File /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/bintar is a regular file while file /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/bintar is a directory diff -Nru chezscheme-9.5+dfsg/boot/a6le/equates.h chezscheme-9.5.4+dfsg/boot/a6le/equates.h --- chezscheme-9.5+dfsg/boot/a6le/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/a6le/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x40 #define alloc_waste_maximum 0x800 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86_64 @@ -87,8 +96,8 @@ #define bytevector_length_factor 0x8 #define bytevector_length_offset 0x3 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x8 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x9 @@ -101,7 +110,9 @@ #define code_closure_length_disp 0x29 #define code_data_disp 0x41 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x31 #define code_length_disp 0x9 @@ -193,25 +204,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -221,8 +232,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x3D #define fixnum_factor 0x8 @@ -235,6 +248,7 @@ #define forward_address_disp 0x8 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x9 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -262,7 +276,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -337,6 +351,7 @@ #define mask_fixnum 0x7 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFFFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x20 #define return_address_mv_return_address_disp -0x8 #define return_address_toplink_disp -0x18 -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x10 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0x18 @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x8 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xE #define segment_t1_bits 0x10 @@ -498,7 +512,7 @@ #define size_rp_header 0x20 #define size_rtd_counts 0x810 #define size_symbol 0x30 -#define size_tc 0x270 +#define size_tc 0x2C0 #define size_thread 0x10 #define size_tlc 0x20 #define size_typed_object 0x10 @@ -541,6 +555,8 @@ #define symbol_pvalue_disp 0xD #define symbol_splist_disp 0x25 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x2A8 +#define tc_SRCBV_disp 0x2B0 #define tc_U_disp 0x160 #define tc_V_disp 0x168 #define tc_W_disp 0x170 @@ -549,51 +565,58 @@ #define tc_ac0_disp 0x28 #define tc_ac1_disp 0x30 #define tc_active_disp 0x134 -#define tc_alloc_counter_disp 0x260 +#define tc_alloc_counter_disp 0x298 #define tc_ap_disp 0x50 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0x1D0 +#define tc_block_counter_disp 0x1D8 #define tc_cchain_disp 0x120 #define tc_code_ranges_to_flush_disp 0x128 -#define tc_compile_profile_disp 0x228 +#define tc_compile_profile_disp 0x230 +#define tc_compress_format_disp 0x278 +#define tc_compress_level_disp 0x280 #define tc_cp_disp 0x40 -#define tc_current_error_disp 0x1C8 -#define tc_current_input_disp 0x1B8 -#define tc_current_mso_disp 0x1E0 -#define tc_current_output_disp 0x1C0 +#define tc_current_error_disp 0x1D0 +#define tc_current_input_disp 0x1C0 +#define tc_current_mso_disp 0x1E8 +#define tc_current_output_disp 0x1C8 +#define tc_default_record_equal_procedure_disp 0x268 +#define tc_default_record_hash_procedure_disp 0x270 #define tc_disable_count_disp 0x198 #define tc_eap_disp 0x58 #define tc_esp_disp 0x48 -#define tc_fxfirst_bit_set_bv_disp 0x1F8 -#define tc_fxlength_bv_disp 0x1F0 -#define tc_generate_inspector_information_disp 0x230 -#define tc_generate_profile_forms_disp 0x238 +#define tc_fxfirst_bit_set_bv_disp 0x200 +#define tc_fxlength_bv_disp 0x1F8 +#define tc_generate_inspector_information_disp 0x238 +#define tc_generate_procedure_source_information_disp 0x240 +#define tc_generate_profile_forms_disp 0x248 #define tc_guardian_entries_disp 0x118 -#define tc_instr_counter_disp 0x258 -#define tc_keyboard_interrupt_pending_disp 0x1A8 -#define tc_meta_level_disp 0x220 -#define tc_null_immutable_bytevector_disp 0x210 -#define tc_null_immutable_fxvector_disp 0x208 -#define tc_null_immutable_string_disp 0x218 -#define tc_null_immutable_vector_disp 0x200 -#define tc_optimize_level_disp 0x240 -#define tc_parameters_disp 0x268 +#define tc_instr_counter_disp 0x290 +#define tc_keyboard_interrupt_pending_disp 0x1B0 +#define tc_lz4_out_buffer_disp 0x288 +#define tc_meta_level_disp 0x228 +#define tc_null_immutable_bytevector_disp 0x218 +#define tc_null_immutable_fxvector_disp 0x210 +#define tc_null_immutable_string_disp 0x220 +#define tc_null_immutable_vector_disp 0x208 +#define tc_optimize_level_disp 0x250 +#define tc_parameters_disp 0x2A0 #define tc_random_seed_disp 0x130 #define tc_real_eap_disp 0x90 #define tc_ret_disp 0x60 #define tc_scheme_stack_disp 0x138 #define tc_scheme_stack_size_disp 0x150 -#define tc_sfd_disp 0x1D8 +#define tc_sfd_disp 0x1E0 #define tc_sfp_disp 0x38 #define tc_signal_interrupt_pending_disp 0x1A0 +#define tc_signal_interrupt_queue_disp 0x1A8 #define tc_something_pending_disp 0x188 #define tc_stack_cache_disp 0x140 #define tc_stack_link_disp 0x148 -#define tc_subset_mode_disp 0x248 -#define tc_suppress_primitive_inlining_disp 0x250 -#define tc_target_machine_disp 0x1E8 +#define tc_subset_mode_disp 0x258 +#define tc_suppress_primitive_inlining_disp 0x260 +#define tc_target_machine_disp 0x1F0 #define tc_td_disp 0x88 -#define tc_threadno_disp 0x1B0 +#define tc_threadno_disp 0x1B8 #define tc_timer_ticks_disp 0x190 #define tc_trap_disp 0x68 #define tc_ts_disp 0x80 @@ -631,6 +654,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -679,6 +703,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned long int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x80 @@ -689,41 +716,34 @@ #define vector_length_offset 0x4 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -896,6 +916,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+9))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+680))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+688))) #define U(x) (*((ptr *)((uptr)(x)+352))) #define V(x) (*((ptr *)((uptr)(x)+360))) #define W(x) (*((ptr *)((uptr)(x)+368))) @@ -904,51 +926,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+40))) #define AC1(x) (*((void* *)((uptr)(x)+48))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+308))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+608))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+664))) #define AP(x) (*((void* *)((uptr)(x)+80))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+464))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+472))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+288))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+296))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+552))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+560))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+632))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+640))) #define CP(x) (*((void* *)((uptr)(x)+64))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+456))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+440))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+480))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+464))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+488))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+456))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+616))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+624))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+408))) #define EAP(x) (*((void* *)((uptr)(x)+88))) #define ESP(x) (*((void* *)((uptr)(x)+72))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+504))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+496))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+560))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+568))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+512))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+504))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+568))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+576))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+584))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+280))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+600))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+424))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+544))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+528))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+520))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+536))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+512))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+576))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+616))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+656))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+432))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+648))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+552))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+536))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+528))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+544))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+520))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+592))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+672))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+304))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+144))) #define RET(x) (*((void* *)((uptr)(x)+96))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+312))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+336))) -#define SFD(x) (*((ptr *)((uptr)(x)+472))) +#define SFD(x) (*((ptr *)((uptr)(x)+480))) #define SFP(x) (*((void* *)((uptr)(x)+56))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+416))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+424))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+392))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+320))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+328))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+584))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+592))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+488))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+600))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+608))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+496))) #define TD(x) (*((void* *)((uptr)(x)+136))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+432))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+440))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+400))) #define TRAP(x) (*((void* *)((uptr)(x)+104))) #define TS(x) (*((void* *)((uptr)(x)+128))) @@ -960,5 +989,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+152))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/a6le/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/a6le/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/a6le/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/a6le/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/a6le/scheme.h chezscheme-9.5.4+dfsg/boot/a6le/scheme.h --- chezscheme-9.5+dfsg/boot/a6le/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/a6le/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (a6le) */ +/* scheme.h for Chez Scheme Version 9.5.4 (a6le) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "a6le" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/a6nt/equates.h chezscheme-9.5.4+dfsg/boot/a6nt/equates.h --- chezscheme-9.5+dfsg/boot/a6nt/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/a6nt/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x40 #define alloc_waste_maximum 0x800 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86_64 @@ -87,8 +96,8 @@ #define bytevector_length_factor 0x8 #define bytevector_length_offset 0x3 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x8 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x9 @@ -101,7 +110,9 @@ #define code_closure_length_disp 0x29 #define code_data_disp 0x41 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x31 #define code_length_disp 0x9 @@ -193,25 +204,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -221,8 +232,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x3D #define fixnum_factor 0x8 @@ -235,6 +248,7 @@ #define forward_address_disp 0x8 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x9 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -262,7 +276,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -337,6 +351,7 @@ #define mask_fixnum 0x7 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFFFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x20 #define return_address_mv_return_address_disp -0x8 #define return_address_toplink_disp -0x18 -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x10 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0x18 @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x8 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xE #define segment_t1_bits 0x10 @@ -498,7 +512,7 @@ #define size_rp_header 0x20 #define size_rtd_counts 0x810 #define size_symbol 0x30 -#define size_tc 0x270 +#define size_tc 0x2C0 #define size_thread 0x10 #define size_tlc 0x20 #define size_typed_object 0x10 @@ -541,6 +555,8 @@ #define symbol_pvalue_disp 0xD #define symbol_splist_disp 0x25 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x2A8 +#define tc_SRCBV_disp 0x2B0 #define tc_U_disp 0x160 #define tc_V_disp 0x168 #define tc_W_disp 0x170 @@ -549,51 +565,58 @@ #define tc_ac0_disp 0x28 #define tc_ac1_disp 0x30 #define tc_active_disp 0x134 -#define tc_alloc_counter_disp 0x260 +#define tc_alloc_counter_disp 0x298 #define tc_ap_disp 0x50 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0x1D0 +#define tc_block_counter_disp 0x1D8 #define tc_cchain_disp 0x120 #define tc_code_ranges_to_flush_disp 0x128 -#define tc_compile_profile_disp 0x228 +#define tc_compile_profile_disp 0x230 +#define tc_compress_format_disp 0x278 +#define tc_compress_level_disp 0x280 #define tc_cp_disp 0x40 -#define tc_current_error_disp 0x1C8 -#define tc_current_input_disp 0x1B8 -#define tc_current_mso_disp 0x1E0 -#define tc_current_output_disp 0x1C0 +#define tc_current_error_disp 0x1D0 +#define tc_current_input_disp 0x1C0 +#define tc_current_mso_disp 0x1E8 +#define tc_current_output_disp 0x1C8 +#define tc_default_record_equal_procedure_disp 0x268 +#define tc_default_record_hash_procedure_disp 0x270 #define tc_disable_count_disp 0x198 #define tc_eap_disp 0x58 #define tc_esp_disp 0x48 -#define tc_fxfirst_bit_set_bv_disp 0x1F8 -#define tc_fxlength_bv_disp 0x1F0 -#define tc_generate_inspector_information_disp 0x230 -#define tc_generate_profile_forms_disp 0x238 +#define tc_fxfirst_bit_set_bv_disp 0x200 +#define tc_fxlength_bv_disp 0x1F8 +#define tc_generate_inspector_information_disp 0x238 +#define tc_generate_procedure_source_information_disp 0x240 +#define tc_generate_profile_forms_disp 0x248 #define tc_guardian_entries_disp 0x118 -#define tc_instr_counter_disp 0x258 -#define tc_keyboard_interrupt_pending_disp 0x1A8 -#define tc_meta_level_disp 0x220 -#define tc_null_immutable_bytevector_disp 0x210 -#define tc_null_immutable_fxvector_disp 0x208 -#define tc_null_immutable_string_disp 0x218 -#define tc_null_immutable_vector_disp 0x200 -#define tc_optimize_level_disp 0x240 -#define tc_parameters_disp 0x268 +#define tc_instr_counter_disp 0x290 +#define tc_keyboard_interrupt_pending_disp 0x1B0 +#define tc_lz4_out_buffer_disp 0x288 +#define tc_meta_level_disp 0x228 +#define tc_null_immutable_bytevector_disp 0x218 +#define tc_null_immutable_fxvector_disp 0x210 +#define tc_null_immutable_string_disp 0x220 +#define tc_null_immutable_vector_disp 0x208 +#define tc_optimize_level_disp 0x250 +#define tc_parameters_disp 0x2A0 #define tc_random_seed_disp 0x130 #define tc_real_eap_disp 0x90 #define tc_ret_disp 0x60 #define tc_scheme_stack_disp 0x138 #define tc_scheme_stack_size_disp 0x150 -#define tc_sfd_disp 0x1D8 +#define tc_sfd_disp 0x1E0 #define tc_sfp_disp 0x38 #define tc_signal_interrupt_pending_disp 0x1A0 +#define tc_signal_interrupt_queue_disp 0x1A8 #define tc_something_pending_disp 0x188 #define tc_stack_cache_disp 0x140 #define tc_stack_link_disp 0x148 -#define tc_subset_mode_disp 0x248 -#define tc_suppress_primitive_inlining_disp 0x250 -#define tc_target_machine_disp 0x1E8 +#define tc_subset_mode_disp 0x258 +#define tc_suppress_primitive_inlining_disp 0x260 +#define tc_target_machine_disp 0x1F0 #define tc_td_disp 0x88 -#define tc_threadno_disp 0x1B0 +#define tc_threadno_disp 0x1B8 #define tc_timer_ticks_disp 0x190 #define tc_trap_disp 0x68 #define tc_ts_disp 0x80 @@ -631,6 +654,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -679,6 +703,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned long long int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x80 @@ -689,41 +716,34 @@ #define vector_length_offset 0x4 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x10 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -896,6 +916,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+9))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+680))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+688))) #define U(x) (*((ptr *)((uptr)(x)+352))) #define V(x) (*((ptr *)((uptr)(x)+360))) #define W(x) (*((ptr *)((uptr)(x)+368))) @@ -904,51 +926,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+40))) #define AC1(x) (*((void* *)((uptr)(x)+48))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+308))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+608))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+664))) #define AP(x) (*((void* *)((uptr)(x)+80))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+464))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+472))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+288))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+296))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+552))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+560))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+632))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+640))) #define CP(x) (*((void* *)((uptr)(x)+64))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+456))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+440))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+480))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+464))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+488))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+456))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+616))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+624))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+408))) #define EAP(x) (*((void* *)((uptr)(x)+88))) #define ESP(x) (*((void* *)((uptr)(x)+72))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+504))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+496))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+560))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+568))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+512))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+504))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+568))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+576))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+584))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+280))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+600))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+424))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+544))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+528))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+520))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+536))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+512))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+576))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+616))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+656))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+432))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+648))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+552))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+536))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+528))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+544))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+520))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+592))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+672))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+304))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+144))) #define RET(x) (*((void* *)((uptr)(x)+96))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+312))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+336))) -#define SFD(x) (*((ptr *)((uptr)(x)+472))) +#define SFD(x) (*((ptr *)((uptr)(x)+480))) #define SFP(x) (*((void* *)((uptr)(x)+56))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+416))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+424))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+392))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+320))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+328))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+584))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+592))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+488))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+600))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+608))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+496))) #define TD(x) (*((void* *)((uptr)(x)+136))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+432))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+440))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+400))) #define TRAP(x) (*((void* *)((uptr)(x)+104))) #define TS(x) (*((void* *)((uptr)(x)+128))) @@ -960,5 +989,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+152))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/a6nt/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/a6nt/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/a6nt/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/a6nt/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/a6nt/scheme.h chezscheme-9.5.4+dfsg/boot/a6nt/scheme.h --- chezscheme-9.5+dfsg/boot/a6nt/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/a6nt/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (a6nt) */ +/* scheme.h for Chez Scheme Version 9.5.4 (a6nt) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "a6nt" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); @@ -192,6 +194,12 @@ EXPORT int Sscheme_program PROTO((const char *, int, const char *[])); EXPORT void Sscheme_deinit PROTO((void)); +/* Windows support. */ +#include +EXPORT char * Sgetenv PROTO((const char *)); +EXPORT wchar_t * Sutf8_to_wide PROTO((const char *)); +EXPORT char * Swide_to_utf8 PROTO((const wchar_t *)); + /* Features. */ #define FEATURE_ICONV #define FEATURE_EXPEDITOR diff -Nru chezscheme-9.5+dfsg/boot/a6osx/equates.h chezscheme-9.5.4+dfsg/boot/a6osx/equates.h --- chezscheme-9.5+dfsg/boot/a6osx/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/a6osx/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x40 #define alloc_waste_maximum 0x800 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86_64 @@ -87,8 +96,8 @@ #define bytevector_length_factor 0x8 #define bytevector_length_offset 0x3 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x8 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x9 @@ -101,7 +110,9 @@ #define code_closure_length_disp 0x29 #define code_data_disp 0x41 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x31 #define code_length_disp 0x9 @@ -193,25 +204,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -221,8 +232,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x3D #define fixnum_factor 0x8 @@ -235,6 +248,7 @@ #define forward_address_disp 0x8 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x9 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -262,7 +276,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -337,6 +351,7 @@ #define mask_fixnum 0x7 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFFFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x20 #define return_address_mv_return_address_disp -0x8 #define return_address_toplink_disp -0x18 -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x10 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0x18 @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x8 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xE #define segment_t1_bits 0x10 @@ -498,7 +512,7 @@ #define size_rp_header 0x20 #define size_rtd_counts 0x810 #define size_symbol 0x30 -#define size_tc 0x270 +#define size_tc 0x2C0 #define size_thread 0x10 #define size_tlc 0x20 #define size_typed_object 0x10 @@ -541,6 +555,8 @@ #define symbol_pvalue_disp 0xD #define symbol_splist_disp 0x25 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x2A8 +#define tc_SRCBV_disp 0x2B0 #define tc_U_disp 0x160 #define tc_V_disp 0x168 #define tc_W_disp 0x170 @@ -549,51 +565,58 @@ #define tc_ac0_disp 0x28 #define tc_ac1_disp 0x30 #define tc_active_disp 0x134 -#define tc_alloc_counter_disp 0x260 +#define tc_alloc_counter_disp 0x298 #define tc_ap_disp 0x50 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0x1D0 +#define tc_block_counter_disp 0x1D8 #define tc_cchain_disp 0x120 #define tc_code_ranges_to_flush_disp 0x128 -#define tc_compile_profile_disp 0x228 +#define tc_compile_profile_disp 0x230 +#define tc_compress_format_disp 0x278 +#define tc_compress_level_disp 0x280 #define tc_cp_disp 0x40 -#define tc_current_error_disp 0x1C8 -#define tc_current_input_disp 0x1B8 -#define tc_current_mso_disp 0x1E0 -#define tc_current_output_disp 0x1C0 +#define tc_current_error_disp 0x1D0 +#define tc_current_input_disp 0x1C0 +#define tc_current_mso_disp 0x1E8 +#define tc_current_output_disp 0x1C8 +#define tc_default_record_equal_procedure_disp 0x268 +#define tc_default_record_hash_procedure_disp 0x270 #define tc_disable_count_disp 0x198 #define tc_eap_disp 0x58 #define tc_esp_disp 0x48 -#define tc_fxfirst_bit_set_bv_disp 0x1F8 -#define tc_fxlength_bv_disp 0x1F0 -#define tc_generate_inspector_information_disp 0x230 -#define tc_generate_profile_forms_disp 0x238 +#define tc_fxfirst_bit_set_bv_disp 0x200 +#define tc_fxlength_bv_disp 0x1F8 +#define tc_generate_inspector_information_disp 0x238 +#define tc_generate_procedure_source_information_disp 0x240 +#define tc_generate_profile_forms_disp 0x248 #define tc_guardian_entries_disp 0x118 -#define tc_instr_counter_disp 0x258 -#define tc_keyboard_interrupt_pending_disp 0x1A8 -#define tc_meta_level_disp 0x220 -#define tc_null_immutable_bytevector_disp 0x210 -#define tc_null_immutable_fxvector_disp 0x208 -#define tc_null_immutable_string_disp 0x218 -#define tc_null_immutable_vector_disp 0x200 -#define tc_optimize_level_disp 0x240 -#define tc_parameters_disp 0x268 +#define tc_instr_counter_disp 0x290 +#define tc_keyboard_interrupt_pending_disp 0x1B0 +#define tc_lz4_out_buffer_disp 0x288 +#define tc_meta_level_disp 0x228 +#define tc_null_immutable_bytevector_disp 0x218 +#define tc_null_immutable_fxvector_disp 0x210 +#define tc_null_immutable_string_disp 0x220 +#define tc_null_immutable_vector_disp 0x208 +#define tc_optimize_level_disp 0x250 +#define tc_parameters_disp 0x2A0 #define tc_random_seed_disp 0x130 #define tc_real_eap_disp 0x90 #define tc_ret_disp 0x60 #define tc_scheme_stack_disp 0x138 #define tc_scheme_stack_size_disp 0x150 -#define tc_sfd_disp 0x1D8 +#define tc_sfd_disp 0x1E0 #define tc_sfp_disp 0x38 #define tc_signal_interrupt_pending_disp 0x1A0 +#define tc_signal_interrupt_queue_disp 0x1A8 #define tc_something_pending_disp 0x188 #define tc_stack_cache_disp 0x140 #define tc_stack_link_disp 0x148 -#define tc_subset_mode_disp 0x248 -#define tc_suppress_primitive_inlining_disp 0x250 -#define tc_target_machine_disp 0x1E8 +#define tc_subset_mode_disp 0x258 +#define tc_suppress_primitive_inlining_disp 0x260 +#define tc_target_machine_disp 0x1F0 #define tc_td_disp 0x88 -#define tc_threadno_disp 0x1B0 +#define tc_threadno_disp 0x1B8 #define tc_timer_ticks_disp 0x190 #define tc_trap_disp 0x68 #define tc_ts_disp 0x80 @@ -631,6 +654,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -679,6 +703,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned long int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x80 @@ -689,41 +716,34 @@ #define vector_length_offset 0x4 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -896,6 +916,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+9))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+680))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+688))) #define U(x) (*((ptr *)((uptr)(x)+352))) #define V(x) (*((ptr *)((uptr)(x)+360))) #define W(x) (*((ptr *)((uptr)(x)+368))) @@ -904,51 +926,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+40))) #define AC1(x) (*((void* *)((uptr)(x)+48))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+308))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+608))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+664))) #define AP(x) (*((void* *)((uptr)(x)+80))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+464))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+472))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+288))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+296))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+552))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+560))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+632))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+640))) #define CP(x) (*((void* *)((uptr)(x)+64))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+456))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+440))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+480))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+464))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+488))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+456))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+616))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+624))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+408))) #define EAP(x) (*((void* *)((uptr)(x)+88))) #define ESP(x) (*((void* *)((uptr)(x)+72))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+504))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+496))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+560))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+568))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+512))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+504))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+568))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+576))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+584))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+280))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+600))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+424))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+544))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+528))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+520))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+536))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+512))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+576))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+616))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+656))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+432))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+648))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+552))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+536))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+528))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+544))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+520))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+592))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+672))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+304))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+144))) #define RET(x) (*((void* *)((uptr)(x)+96))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+312))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+336))) -#define SFD(x) (*((ptr *)((uptr)(x)+472))) +#define SFD(x) (*((ptr *)((uptr)(x)+480))) #define SFP(x) (*((void* *)((uptr)(x)+56))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+416))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+424))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+392))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+320))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+328))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+584))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+592))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+488))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+600))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+608))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+496))) #define TD(x) (*((void* *)((uptr)(x)+136))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+432))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+440))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+400))) #define TRAP(x) (*((void* *)((uptr)(x)+104))) #define TS(x) (*((void* *)((uptr)(x)+128))) @@ -960,5 +989,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+152))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/a6osx/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/a6osx/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/a6osx/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/a6osx/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/a6osx/scheme.h chezscheme-9.5.4+dfsg/boot/a6osx/scheme.h --- chezscheme-9.5+dfsg/boot/a6osx/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/a6osx/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (a6osx) */ +/* scheme.h for Chez Scheme Version 9.5.4 (a6osx) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "a6osx" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/i3le/equates.h chezscheme-9.5.4+dfsg/boot/i3le/equates.h --- chezscheme-9.5+dfsg/boot/i3le/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/i3le/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x20 #define alloc_waste_maximum 0x400 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86 @@ -88,8 +97,8 @@ #define bytevector_length_offset 0x3 #define bytevector_pad_disp 0x5 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x4 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x8 @@ -102,7 +111,9 @@ #define code_closure_length_disp 0x15 #define code_data_disp 0x21 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x19 #define code_length_disp 0x5 @@ -194,25 +205,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -222,8 +233,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x1E #define fixnum_factor 0x4 @@ -236,6 +249,7 @@ #define forward_address_disp 0x4 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x5 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -263,7 +277,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -338,6 +352,7 @@ #define mask_fixnum 0x3 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x10 #define return_address_mv_return_address_disp -0x4 #define return_address_toplink_disp -0xC -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x8 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0xC @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x4 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xD #define segment_t1_bits 0x13 @@ -496,7 +510,7 @@ #define size_rp_header 0x10 #define size_rtd_counts 0x410 #define size_symbol 0x18 -#define size_tc 0x138 +#define size_tc 0x158 #define size_thread 0x8 #define size_tlc 0x10 #define size_typed_object 0x8 @@ -539,6 +553,8 @@ #define symbol_pvalue_disp 0x9 #define symbol_splist_disp 0x15 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x150 +#define tc_SRCBV_disp 0x154 #define tc_U_disp 0xA4 #define tc_V_disp 0xA8 #define tc_W_disp 0xAC @@ -547,51 +563,58 @@ #define tc_ac0_disp 0x4 #define tc_ac1_disp 0x8 #define tc_active_disp 0x8C -#define tc_alloc_counter_disp 0x128 +#define tc_alloc_counter_disp 0x144 #define tc_ap_disp 0x18 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0xDC +#define tc_block_counter_disp 0xE0 #define tc_cchain_disp 0x80 #define tc_code_ranges_to_flush_disp 0x84 -#define tc_compile_profile_disp 0x108 +#define tc_compile_profile_disp 0x10C +#define tc_compress_format_disp 0x130 +#define tc_compress_level_disp 0x134 #define tc_cp_disp 0x10 -#define tc_current_error_disp 0xD8 -#define tc_current_input_disp 0xD0 -#define tc_current_mso_disp 0xE4 -#define tc_current_output_disp 0xD4 +#define tc_current_error_disp 0xDC +#define tc_current_input_disp 0xD4 +#define tc_current_mso_disp 0xE8 +#define tc_current_output_disp 0xD8 +#define tc_default_record_equal_procedure_disp 0x128 +#define tc_default_record_hash_procedure_disp 0x12C #define tc_disable_count_disp 0xC0 #define tc_eap_disp 0x1C #define tc_esp_disp 0x14 -#define tc_fxfirst_bit_set_bv_disp 0xF0 -#define tc_fxlength_bv_disp 0xEC -#define tc_generate_inspector_information_disp 0x10C -#define tc_generate_profile_forms_disp 0x110 +#define tc_fxfirst_bit_set_bv_disp 0xF4 +#define tc_fxlength_bv_disp 0xF0 +#define tc_generate_inspector_information_disp 0x110 +#define tc_generate_procedure_source_information_disp 0x114 +#define tc_generate_profile_forms_disp 0x118 #define tc_guardian_entries_disp 0x7C -#define tc_instr_counter_disp 0x120 -#define tc_keyboard_interrupt_pending_disp 0xC8 -#define tc_meta_level_disp 0x104 -#define tc_null_immutable_bytevector_disp 0xFC -#define tc_null_immutable_fxvector_disp 0xF8 -#define tc_null_immutable_string_disp 0x100 -#define tc_null_immutable_vector_disp 0xF4 -#define tc_optimize_level_disp 0x114 -#define tc_parameters_disp 0x130 +#define tc_instr_counter_disp 0x13C +#define tc_keyboard_interrupt_pending_disp 0xCC +#define tc_lz4_out_buffer_disp 0x138 +#define tc_meta_level_disp 0x108 +#define tc_null_immutable_bytevector_disp 0x100 +#define tc_null_immutable_fxvector_disp 0xFC +#define tc_null_immutable_string_disp 0x104 +#define tc_null_immutable_vector_disp 0xF8 +#define tc_optimize_level_disp 0x11C +#define tc_parameters_disp 0x14C #define tc_random_seed_disp 0x88 #define tc_real_eap_disp 0x38 #define tc_ret_disp 0x20 #define tc_scheme_stack_disp 0x90 #define tc_scheme_stack_size_disp 0x9C -#define tc_sfd_disp 0xE0 +#define tc_sfd_disp 0xE4 #define tc_sfp_disp 0xC #define tc_signal_interrupt_pending_disp 0xC4 +#define tc_signal_interrupt_queue_disp 0xC8 #define tc_something_pending_disp 0xB8 #define tc_stack_cache_disp 0x94 #define tc_stack_link_disp 0x98 -#define tc_subset_mode_disp 0x118 -#define tc_suppress_primitive_inlining_disp 0x11C -#define tc_target_machine_disp 0xE8 +#define tc_subset_mode_disp 0x120 +#define tc_suppress_primitive_inlining_disp 0x124 +#define tc_target_machine_disp 0xEC #define tc_td_disp 0x34 -#define tc_threadno_disp 0xCC +#define tc_threadno_disp 0xD0 #define tc_timer_ticks_disp 0xBC #define tc_trap_disp 0x24 #define tc_ts_disp 0x30 @@ -629,6 +652,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -677,6 +701,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x40 @@ -687,41 +714,34 @@ #define vector_length_offset 0x3 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -894,6 +914,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+5))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+336))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+340))) #define U(x) (*((ptr *)((uptr)(x)+164))) #define V(x) (*((ptr *)((uptr)(x)+168))) #define W(x) (*((ptr *)((uptr)(x)+172))) @@ -902,51 +924,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+4))) #define AC1(x) (*((void* *)((uptr)(x)+8))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+140))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+296))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+324))) #define AP(x) (*((void* *)((uptr)(x)+24))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+220))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+224))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+128))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+132))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+264))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+268))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+304))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+308))) #define CP(x) (*((void* *)((uptr)(x)+16))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+216))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+208))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+228))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+220))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+232))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+216))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+296))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+300))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+192))) #define EAP(x) (*((void* *)((uptr)(x)+28))) #define ESP(x) (*((void* *)((uptr)(x)+20))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+240))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+236))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+268))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+272))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+244))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+240))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+272))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+276))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+280))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+124))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+288))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+200))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+260))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+252))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+248))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+256))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+244))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+276))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+304))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+316))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+204))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+312))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+264))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+256))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+252))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+260))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+248))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+284))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+332))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+136))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+56))) #define RET(x) (*((void* *)((uptr)(x)+32))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+144))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+156))) -#define SFD(x) (*((ptr *)((uptr)(x)+224))) +#define SFD(x) (*((ptr *)((uptr)(x)+228))) #define SFP(x) (*((void* *)((uptr)(x)+12))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+196))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+200))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+184))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+148))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+152))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+280))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+284))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+232))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+288))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+292))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+236))) #define TD(x) (*((void* *)((uptr)(x)+52))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+204))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+208))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+188))) #define TRAP(x) (*((void* *)((uptr)(x)+36))) #define TS(x) (*((void* *)((uptr)(x)+48))) @@ -958,5 +987,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+60))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/i3le/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/i3le/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/i3le/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/i3le/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/i3le/scheme.h chezscheme-9.5.4+dfsg/boot/i3le/scheme.h --- chezscheme-9.5+dfsg/boot/i3le/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/i3le/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (i3le) */ +/* scheme.h for Chez Scheme Version 9.5.4 (i3le) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "i3le" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/i3nt/equates.h chezscheme-9.5.4+dfsg/boot/i3nt/equates.h --- chezscheme-9.5+dfsg/boot/i3nt/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/i3nt/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -14,14 +14,22 @@ typedef unsigned short U16; typedef int I32; typedef unsigned int U32; -typedef __int64 I64; -typedef unsigned __int64 U64; +typedef long long I64; +typedef unsigned long long U64; /* constants from cmacros.ss */ #define $c_func_closure_index 0x4 #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x20 #define alloc_waste_maximum 0x400 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86 @@ -88,8 +97,8 @@ #define bytevector_length_offset 0x3 #define bytevector_pad_disp 0x5 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x4 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x8 @@ -102,7 +111,9 @@ #define code_closure_length_disp 0x15 #define code_data_disp 0x21 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x19 #define code_length_disp 0x5 @@ -194,25 +205,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -222,8 +233,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x1E #define fixnum_factor 0x4 @@ -236,6 +249,7 @@ #define forward_address_disp 0x4 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x5 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -263,7 +277,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -338,6 +352,7 @@ #define mask_fixnum 0x3 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x10 #define return_address_mv_return_address_disp -0x4 #define return_address_toplink_disp -0xC -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x8 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0xC @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x4 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xD #define segment_t1_bits 0x13 @@ -496,7 +510,7 @@ #define size_rp_header 0x10 #define size_rtd_counts 0x410 #define size_symbol 0x18 -#define size_tc 0x138 +#define size_tc 0x160 #define size_thread 0x8 #define size_tlc 0x10 #define size_typed_object 0x8 @@ -539,6 +553,8 @@ #define symbol_pvalue_disp 0x9 #define symbol_splist_disp 0x15 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x154 +#define tc_SRCBV_disp 0x158 #define tc_U_disp 0xA4 #define tc_V_disp 0xA8 #define tc_W_disp 0xAC @@ -547,51 +563,58 @@ #define tc_ac0_disp 0x4 #define tc_ac1_disp 0x8 #define tc_active_disp 0x8C -#define tc_alloc_counter_disp 0x128 +#define tc_alloc_counter_disp 0x148 #define tc_ap_disp 0x18 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0xDC +#define tc_block_counter_disp 0xE0 #define tc_cchain_disp 0x80 #define tc_code_ranges_to_flush_disp 0x84 -#define tc_compile_profile_disp 0x108 +#define tc_compile_profile_disp 0x10C +#define tc_compress_format_disp 0x130 +#define tc_compress_level_disp 0x134 #define tc_cp_disp 0x10 -#define tc_current_error_disp 0xD8 -#define tc_current_input_disp 0xD0 -#define tc_current_mso_disp 0xE4 -#define tc_current_output_disp 0xD4 +#define tc_current_error_disp 0xDC +#define tc_current_input_disp 0xD4 +#define tc_current_mso_disp 0xE8 +#define tc_current_output_disp 0xD8 +#define tc_default_record_equal_procedure_disp 0x128 +#define tc_default_record_hash_procedure_disp 0x12C #define tc_disable_count_disp 0xC0 #define tc_eap_disp 0x1C #define tc_esp_disp 0x14 -#define tc_fxfirst_bit_set_bv_disp 0xF0 -#define tc_fxlength_bv_disp 0xEC -#define tc_generate_inspector_information_disp 0x10C -#define tc_generate_profile_forms_disp 0x110 +#define tc_fxfirst_bit_set_bv_disp 0xF4 +#define tc_fxlength_bv_disp 0xF0 +#define tc_generate_inspector_information_disp 0x110 +#define tc_generate_procedure_source_information_disp 0x114 +#define tc_generate_profile_forms_disp 0x118 #define tc_guardian_entries_disp 0x7C -#define tc_instr_counter_disp 0x120 -#define tc_keyboard_interrupt_pending_disp 0xC8 -#define tc_meta_level_disp 0x104 -#define tc_null_immutable_bytevector_disp 0xFC -#define tc_null_immutable_fxvector_disp 0xF8 -#define tc_null_immutable_string_disp 0x100 -#define tc_null_immutable_vector_disp 0xF4 -#define tc_optimize_level_disp 0x114 -#define tc_parameters_disp 0x130 +#define tc_instr_counter_disp 0x140 +#define tc_keyboard_interrupt_pending_disp 0xCC +#define tc_lz4_out_buffer_disp 0x138 +#define tc_meta_level_disp 0x108 +#define tc_null_immutable_bytevector_disp 0x100 +#define tc_null_immutable_fxvector_disp 0xFC +#define tc_null_immutable_string_disp 0x104 +#define tc_null_immutable_vector_disp 0xF8 +#define tc_optimize_level_disp 0x11C +#define tc_parameters_disp 0x150 #define tc_random_seed_disp 0x88 #define tc_real_eap_disp 0x38 #define tc_ret_disp 0x20 #define tc_scheme_stack_disp 0x90 #define tc_scheme_stack_size_disp 0x9C -#define tc_sfd_disp 0xE0 +#define tc_sfd_disp 0xE4 #define tc_sfp_disp 0xC #define tc_signal_interrupt_pending_disp 0xC4 +#define tc_signal_interrupt_queue_disp 0xC8 #define tc_something_pending_disp 0xB8 #define tc_stack_cache_disp 0x94 #define tc_stack_link_disp 0x98 -#define tc_subset_mode_disp 0x118 -#define tc_suppress_primitive_inlining_disp 0x11C -#define tc_target_machine_disp 0xE8 +#define tc_subset_mode_disp 0x120 +#define tc_suppress_primitive_inlining_disp 0x124 +#define tc_target_machine_disp 0xEC #define tc_td_disp 0x34 -#define tc_threadno_disp 0xCC +#define tc_threadno_disp 0xD0 #define tc_timer_ticks_disp 0xBC #define tc_trap_disp 0x24 #define tc_ts_disp 0x30 @@ -630,6 +653,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -667,17 +691,20 @@ #define typed_object_type_disp 0x1 #define typedef_i16 "short" #define typedef_i32 "int" -#define typedef_i64 "__int64" +#define typedef_i64 "long long" #define typedef_i8 "char" #define typedef_iptr "int" #define typedef_ptr "void *" #define typedef_string_char "unsigned int" #define typedef_u16 "unsigned short" #define typedef_u32 "unsigned int" -#define typedef_u64 "unsigned __int64" +#define typedef_u64 "unsigned long long" #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x40 @@ -688,41 +715,34 @@ #define vector_length_offset 0x3 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x10 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -895,6 +915,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+5))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+340))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+344))) #define U(x) (*((ptr *)((uptr)(x)+164))) #define V(x) (*((ptr *)((uptr)(x)+168))) #define W(x) (*((ptr *)((uptr)(x)+172))) @@ -903,51 +925,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+4))) #define AC1(x) (*((void* *)((uptr)(x)+8))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+140))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+296))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+328))) #define AP(x) (*((void* *)((uptr)(x)+24))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+220))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+224))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+128))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+132))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+264))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+268))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+304))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+308))) #define CP(x) (*((void* *)((uptr)(x)+16))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+216))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+208))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+228))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+220))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+232))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+216))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+296))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+300))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+192))) #define EAP(x) (*((void* *)((uptr)(x)+28))) #define ESP(x) (*((void* *)((uptr)(x)+20))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+240))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+236))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+268))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+272))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+244))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+240))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+272))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+276))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+280))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+124))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+288))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+200))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+260))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+252))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+248))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+256))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+244))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+276))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+304))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+320))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+204))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+312))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+264))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+256))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+252))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+260))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+248))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+284))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+336))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+136))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+56))) #define RET(x) (*((void* *)((uptr)(x)+32))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+144))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+156))) -#define SFD(x) (*((ptr *)((uptr)(x)+224))) +#define SFD(x) (*((ptr *)((uptr)(x)+228))) #define SFP(x) (*((void* *)((uptr)(x)+12))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+196))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+200))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+184))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+148))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+152))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+280))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+284))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+232))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+288))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+292))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+236))) #define TD(x) (*((void* *)((uptr)(x)+52))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+204))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+208))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+188))) #define TRAP(x) (*((void* *)((uptr)(x)+36))) #define TS(x) (*((void* *)((uptr)(x)+48))) @@ -959,5 +988,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+60))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/i3nt/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/i3nt/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/i3nt/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/i3nt/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/i3nt/scheme.h chezscheme-9.5.4+dfsg/boot/i3nt/scheme.h --- chezscheme-9.5+dfsg/boot/i3nt/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/i3nt/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (i3nt) */ +/* scheme.h for Chez Scheme Version 9.5.4 (i3nt) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "i3nt" /* All Scheme objects are of type ptr. Type iptr and */ @@ -114,8 +114,8 @@ #define Sunsigned_value(x) (uptr)Sinteger_value(x) EXPORT int Sinteger32_value PROTO((ptr)); #define Sunsigned32_value(x) (unsigned int)Sinteger32_value(x) -EXPORT __int64 Sinteger64_value PROTO((ptr)); -#define Sunsigned64_value(x) (unsigned __int64)Sinteger64_value(x) +EXPORT long long Sinteger64_value PROTO((ptr)); +#define Sunsigned64_value(x) (unsigned long long)Sinteger64_value(x) /* Mutators */ EXPORT void Sset_box PROTO((ptr, ptr)); @@ -147,13 +147,14 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); EXPORT ptr Sinteger32 PROTO((int)); EXPORT ptr Sunsigned32 PROTO((unsigned int)); -EXPORT ptr Sinteger64 PROTO((__int64)); -EXPORT ptr Sunsigned64 PROTO((unsigned __int64)); +EXPORT ptr Sinteger64 PROTO((long long)); +EXPORT ptr Sunsigned64 PROTO((unsigned long long)); /* Miscellaneous */ EXPORT ptr Stop_level_value PROTO((ptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); @@ -192,6 +194,12 @@ EXPORT int Sscheme_program PROTO((const char *, int, const char *[])); EXPORT void Sscheme_deinit PROTO((void)); +/* Windows support. */ +#include +EXPORT char * Sgetenv PROTO((const char *)); +EXPORT wchar_t * Sutf8_to_wide PROTO((const char *)); +EXPORT char * Swide_to_utf8 PROTO((const wchar_t *)); + /* Features. */ #define FEATURE_ICONV #define FEATURE_EXPEDITOR diff -Nru chezscheme-9.5+dfsg/boot/i3osx/equates.h chezscheme-9.5.4+dfsg/boot/i3osx/equates.h --- chezscheme-9.5+dfsg/boot/i3osx/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/i3osx/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x20 #define alloc_waste_maximum 0x400 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86 @@ -88,8 +97,8 @@ #define bytevector_length_offset 0x3 #define bytevector_pad_disp 0x5 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x4 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x8 @@ -102,7 +111,9 @@ #define code_closure_length_disp 0x15 #define code_data_disp 0x21 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x19 #define code_length_disp 0x5 @@ -194,25 +205,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -222,8 +233,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x1E #define fixnum_factor 0x4 @@ -236,6 +249,7 @@ #define forward_address_disp 0x4 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x5 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -263,7 +277,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -338,6 +352,7 @@ #define mask_fixnum 0x3 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x10 #define return_address_mv_return_address_disp -0x4 #define return_address_toplink_disp -0xC -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x8 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0xC @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x4 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xD #define segment_t1_bits 0x13 @@ -496,7 +510,7 @@ #define size_rp_header 0x10 #define size_rtd_counts 0x410 #define size_symbol 0x18 -#define size_tc 0x138 +#define size_tc 0x158 #define size_thread 0x8 #define size_tlc 0x10 #define size_typed_object 0x8 @@ -539,6 +553,8 @@ #define symbol_pvalue_disp 0x9 #define symbol_splist_disp 0x15 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x150 +#define tc_SRCBV_disp 0x154 #define tc_U_disp 0xA4 #define tc_V_disp 0xA8 #define tc_W_disp 0xAC @@ -547,51 +563,58 @@ #define tc_ac0_disp 0x4 #define tc_ac1_disp 0x8 #define tc_active_disp 0x8C -#define tc_alloc_counter_disp 0x128 +#define tc_alloc_counter_disp 0x144 #define tc_ap_disp 0x18 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0xDC +#define tc_block_counter_disp 0xE0 #define tc_cchain_disp 0x80 #define tc_code_ranges_to_flush_disp 0x84 -#define tc_compile_profile_disp 0x108 +#define tc_compile_profile_disp 0x10C +#define tc_compress_format_disp 0x130 +#define tc_compress_level_disp 0x134 #define tc_cp_disp 0x10 -#define tc_current_error_disp 0xD8 -#define tc_current_input_disp 0xD0 -#define tc_current_mso_disp 0xE4 -#define tc_current_output_disp 0xD4 +#define tc_current_error_disp 0xDC +#define tc_current_input_disp 0xD4 +#define tc_current_mso_disp 0xE8 +#define tc_current_output_disp 0xD8 +#define tc_default_record_equal_procedure_disp 0x128 +#define tc_default_record_hash_procedure_disp 0x12C #define tc_disable_count_disp 0xC0 #define tc_eap_disp 0x1C #define tc_esp_disp 0x14 -#define tc_fxfirst_bit_set_bv_disp 0xF0 -#define tc_fxlength_bv_disp 0xEC -#define tc_generate_inspector_information_disp 0x10C -#define tc_generate_profile_forms_disp 0x110 +#define tc_fxfirst_bit_set_bv_disp 0xF4 +#define tc_fxlength_bv_disp 0xF0 +#define tc_generate_inspector_information_disp 0x110 +#define tc_generate_procedure_source_information_disp 0x114 +#define tc_generate_profile_forms_disp 0x118 #define tc_guardian_entries_disp 0x7C -#define tc_instr_counter_disp 0x120 -#define tc_keyboard_interrupt_pending_disp 0xC8 -#define tc_meta_level_disp 0x104 -#define tc_null_immutable_bytevector_disp 0xFC -#define tc_null_immutable_fxvector_disp 0xF8 -#define tc_null_immutable_string_disp 0x100 -#define tc_null_immutable_vector_disp 0xF4 -#define tc_optimize_level_disp 0x114 -#define tc_parameters_disp 0x130 +#define tc_instr_counter_disp 0x13C +#define tc_keyboard_interrupt_pending_disp 0xCC +#define tc_lz4_out_buffer_disp 0x138 +#define tc_meta_level_disp 0x108 +#define tc_null_immutable_bytevector_disp 0x100 +#define tc_null_immutable_fxvector_disp 0xFC +#define tc_null_immutable_string_disp 0x104 +#define tc_null_immutable_vector_disp 0xF8 +#define tc_optimize_level_disp 0x11C +#define tc_parameters_disp 0x14C #define tc_random_seed_disp 0x88 #define tc_real_eap_disp 0x38 #define tc_ret_disp 0x20 #define tc_scheme_stack_disp 0x90 #define tc_scheme_stack_size_disp 0x9C -#define tc_sfd_disp 0xE0 +#define tc_sfd_disp 0xE4 #define tc_sfp_disp 0xC #define tc_signal_interrupt_pending_disp 0xC4 +#define tc_signal_interrupt_queue_disp 0xC8 #define tc_something_pending_disp 0xB8 #define tc_stack_cache_disp 0x94 #define tc_stack_link_disp 0x98 -#define tc_subset_mode_disp 0x118 -#define tc_suppress_primitive_inlining_disp 0x11C -#define tc_target_machine_disp 0xE8 +#define tc_subset_mode_disp 0x120 +#define tc_suppress_primitive_inlining_disp 0x124 +#define tc_target_machine_disp 0xEC #define tc_td_disp 0x34 -#define tc_threadno_disp 0xCC +#define tc_threadno_disp 0xD0 #define tc_timer_ticks_disp 0xBC #define tc_trap_disp 0x24 #define tc_ts_disp 0x30 @@ -629,6 +652,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -677,6 +701,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x40 @@ -687,41 +714,34 @@ #define vector_length_offset 0x3 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -894,6 +914,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+5))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+336))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+340))) #define U(x) (*((ptr *)((uptr)(x)+164))) #define V(x) (*((ptr *)((uptr)(x)+168))) #define W(x) (*((ptr *)((uptr)(x)+172))) @@ -902,51 +924,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+4))) #define AC1(x) (*((void* *)((uptr)(x)+8))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+140))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+296))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+324))) #define AP(x) (*((void* *)((uptr)(x)+24))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+220))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+224))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+128))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+132))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+264))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+268))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+304))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+308))) #define CP(x) (*((void* *)((uptr)(x)+16))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+216))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+208))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+228))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+220))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+232))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+216))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+296))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+300))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+192))) #define EAP(x) (*((void* *)((uptr)(x)+28))) #define ESP(x) (*((void* *)((uptr)(x)+20))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+240))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+236))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+268))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+272))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+244))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+240))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+272))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+276))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+280))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+124))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+288))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+200))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+260))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+252))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+248))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+256))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+244))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+276))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+304))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+316))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+204))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+312))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+264))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+256))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+252))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+260))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+248))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+284))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+332))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+136))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+56))) #define RET(x) (*((void* *)((uptr)(x)+32))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+144))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+156))) -#define SFD(x) (*((ptr *)((uptr)(x)+224))) +#define SFD(x) (*((ptr *)((uptr)(x)+228))) #define SFP(x) (*((void* *)((uptr)(x)+12))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+196))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+200))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+184))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+148))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+152))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+280))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+284))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+232))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+288))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+292))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+236))) #define TD(x) (*((void* *)((uptr)(x)+52))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+204))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+208))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+188))) #define TRAP(x) (*((void* *)((uptr)(x)+36))) #define TS(x) (*((void* *)((uptr)(x)+48))) @@ -958,5 +987,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+60))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/i3osx/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/i3osx/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/i3osx/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/i3osx/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/i3osx/scheme.h chezscheme-9.5.4+dfsg/boot/i3osx/scheme.h --- chezscheme-9.5+dfsg/boot/i3osx/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/i3osx/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (i3osx) */ +/* scheme.h for Chez Scheme Version 9.5.4 (i3osx) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "i3osx" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/ta6le/equates.h chezscheme-9.5.4+dfsg/boot/ta6le/equates.h --- chezscheme-9.5+dfsg/boot/ta6le/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ta6le/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x40 #define alloc_waste_maximum 0x800 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86_64 @@ -87,8 +96,8 @@ #define bytevector_length_factor 0x8 #define bytevector_length_offset 0x3 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x8 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x9 @@ -101,7 +110,9 @@ #define code_closure_length_disp 0x29 #define code_data_disp 0x41 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x31 #define code_length_disp 0x9 @@ -193,25 +204,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -221,8 +232,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x3D #define fixnum_factor 0x8 @@ -235,6 +248,7 @@ #define forward_address_disp 0x8 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x9 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -262,7 +276,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -337,6 +351,7 @@ #define mask_fixnum 0x7 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFFFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x20 #define return_address_mv_return_address_disp -0x8 #define return_address_toplink_disp -0x18 -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x10 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0x18 @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x8 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xE #define segment_t1_bits 0x10 @@ -498,7 +512,7 @@ #define size_rp_header 0x20 #define size_rtd_counts 0x810 #define size_symbol 0x30 -#define size_tc 0x270 +#define size_tc 0x2C0 #define size_thread 0x10 #define size_tlc 0x20 #define size_typed_object 0x10 @@ -541,6 +555,8 @@ #define symbol_pvalue_disp 0xD #define symbol_splist_disp 0x25 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x2A8 +#define tc_SRCBV_disp 0x2B0 #define tc_U_disp 0x160 #define tc_V_disp 0x168 #define tc_W_disp 0x170 @@ -549,51 +565,58 @@ #define tc_ac0_disp 0x28 #define tc_ac1_disp 0x30 #define tc_active_disp 0x134 -#define tc_alloc_counter_disp 0x260 +#define tc_alloc_counter_disp 0x298 #define tc_ap_disp 0x50 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0x1D0 +#define tc_block_counter_disp 0x1D8 #define tc_cchain_disp 0x120 #define tc_code_ranges_to_flush_disp 0x128 -#define tc_compile_profile_disp 0x228 +#define tc_compile_profile_disp 0x230 +#define tc_compress_format_disp 0x278 +#define tc_compress_level_disp 0x280 #define tc_cp_disp 0x40 -#define tc_current_error_disp 0x1C8 -#define tc_current_input_disp 0x1B8 -#define tc_current_mso_disp 0x1E0 -#define tc_current_output_disp 0x1C0 +#define tc_current_error_disp 0x1D0 +#define tc_current_input_disp 0x1C0 +#define tc_current_mso_disp 0x1E8 +#define tc_current_output_disp 0x1C8 +#define tc_default_record_equal_procedure_disp 0x268 +#define tc_default_record_hash_procedure_disp 0x270 #define tc_disable_count_disp 0x198 #define tc_eap_disp 0x58 #define tc_esp_disp 0x48 -#define tc_fxfirst_bit_set_bv_disp 0x1F8 -#define tc_fxlength_bv_disp 0x1F0 -#define tc_generate_inspector_information_disp 0x230 -#define tc_generate_profile_forms_disp 0x238 +#define tc_fxfirst_bit_set_bv_disp 0x200 +#define tc_fxlength_bv_disp 0x1F8 +#define tc_generate_inspector_information_disp 0x238 +#define tc_generate_procedure_source_information_disp 0x240 +#define tc_generate_profile_forms_disp 0x248 #define tc_guardian_entries_disp 0x118 -#define tc_instr_counter_disp 0x258 -#define tc_keyboard_interrupt_pending_disp 0x1A8 -#define tc_meta_level_disp 0x220 -#define tc_null_immutable_bytevector_disp 0x210 -#define tc_null_immutable_fxvector_disp 0x208 -#define tc_null_immutable_string_disp 0x218 -#define tc_null_immutable_vector_disp 0x200 -#define tc_optimize_level_disp 0x240 -#define tc_parameters_disp 0x268 +#define tc_instr_counter_disp 0x290 +#define tc_keyboard_interrupt_pending_disp 0x1B0 +#define tc_lz4_out_buffer_disp 0x288 +#define tc_meta_level_disp 0x228 +#define tc_null_immutable_bytevector_disp 0x218 +#define tc_null_immutable_fxvector_disp 0x210 +#define tc_null_immutable_string_disp 0x220 +#define tc_null_immutable_vector_disp 0x208 +#define tc_optimize_level_disp 0x250 +#define tc_parameters_disp 0x2A0 #define tc_random_seed_disp 0x130 #define tc_real_eap_disp 0x90 #define tc_ret_disp 0x60 #define tc_scheme_stack_disp 0x138 #define tc_scheme_stack_size_disp 0x150 -#define tc_sfd_disp 0x1D8 +#define tc_sfd_disp 0x1E0 #define tc_sfp_disp 0x38 #define tc_signal_interrupt_pending_disp 0x1A0 +#define tc_signal_interrupt_queue_disp 0x1A8 #define tc_something_pending_disp 0x188 #define tc_stack_cache_disp 0x140 #define tc_stack_link_disp 0x148 -#define tc_subset_mode_disp 0x248 -#define tc_suppress_primitive_inlining_disp 0x250 -#define tc_target_machine_disp 0x1E8 +#define tc_subset_mode_disp 0x258 +#define tc_suppress_primitive_inlining_disp 0x260 +#define tc_target_machine_disp 0x1F0 #define tc_td_disp 0x88 -#define tc_threadno_disp 0x1B0 +#define tc_threadno_disp 0x1B8 #define tc_timer_ticks_disp 0x190 #define tc_trap_disp 0x68 #define tc_ts_disp 0x80 @@ -631,6 +654,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -679,6 +703,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned long int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x80 @@ -689,41 +716,34 @@ #define vector_length_offset 0x4 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -896,6 +916,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+9))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+680))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+688))) #define U(x) (*((ptr *)((uptr)(x)+352))) #define V(x) (*((ptr *)((uptr)(x)+360))) #define W(x) (*((ptr *)((uptr)(x)+368))) @@ -904,51 +926,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+40))) #define AC1(x) (*((void* *)((uptr)(x)+48))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+308))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+608))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+664))) #define AP(x) (*((void* *)((uptr)(x)+80))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+464))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+472))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+288))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+296))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+552))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+560))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+632))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+640))) #define CP(x) (*((void* *)((uptr)(x)+64))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+456))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+440))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+480))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+464))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+488))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+456))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+616))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+624))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+408))) #define EAP(x) (*((void* *)((uptr)(x)+88))) #define ESP(x) (*((void* *)((uptr)(x)+72))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+504))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+496))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+560))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+568))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+512))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+504))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+568))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+576))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+584))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+280))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+600))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+424))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+544))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+528))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+520))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+536))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+512))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+576))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+616))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+656))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+432))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+648))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+552))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+536))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+528))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+544))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+520))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+592))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+672))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+304))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+144))) #define RET(x) (*((void* *)((uptr)(x)+96))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+312))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+336))) -#define SFD(x) (*((ptr *)((uptr)(x)+472))) +#define SFD(x) (*((ptr *)((uptr)(x)+480))) #define SFP(x) (*((void* *)((uptr)(x)+56))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+416))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+424))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+392))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+320))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+328))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+584))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+592))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+488))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+600))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+608))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+496))) #define TD(x) (*((void* *)((uptr)(x)+136))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+432))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+440))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+400))) #define TRAP(x) (*((void* *)((uptr)(x)+104))) #define TS(x) (*((void* *)((uptr)(x)+128))) @@ -960,5 +989,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+152))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ta6le/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ta6le/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ta6le/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ta6le/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/ta6le/scheme.h chezscheme-9.5.4+dfsg/boot/ta6le/scheme.h --- chezscheme-9.5+dfsg/boot/ta6le/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ta6le/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (ta6le) */ +/* scheme.h for Chez Scheme Version 9.5.4 (ta6le) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "ta6le" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/ta6nt/equates.h chezscheme-9.5.4+dfsg/boot/ta6nt/equates.h --- chezscheme-9.5+dfsg/boot/ta6nt/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ta6nt/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x40 #define alloc_waste_maximum 0x800 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86_64 @@ -87,8 +96,8 @@ #define bytevector_length_factor 0x8 #define bytevector_length_offset 0x3 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x8 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x9 @@ -101,7 +110,9 @@ #define code_closure_length_disp 0x29 #define code_data_disp 0x41 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x31 #define code_length_disp 0x9 @@ -193,25 +204,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -221,8 +232,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x3D #define fixnum_factor 0x8 @@ -235,6 +248,7 @@ #define forward_address_disp 0x8 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x9 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -262,7 +276,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -337,6 +351,7 @@ #define mask_fixnum 0x7 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFFFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x20 #define return_address_mv_return_address_disp -0x8 #define return_address_toplink_disp -0x18 -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x10 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0x18 @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x8 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xE #define segment_t1_bits 0x10 @@ -498,7 +512,7 @@ #define size_rp_header 0x20 #define size_rtd_counts 0x810 #define size_symbol 0x30 -#define size_tc 0x270 +#define size_tc 0x2C0 #define size_thread 0x10 #define size_tlc 0x20 #define size_typed_object 0x10 @@ -541,6 +555,8 @@ #define symbol_pvalue_disp 0xD #define symbol_splist_disp 0x25 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x2A8 +#define tc_SRCBV_disp 0x2B0 #define tc_U_disp 0x160 #define tc_V_disp 0x168 #define tc_W_disp 0x170 @@ -549,51 +565,58 @@ #define tc_ac0_disp 0x28 #define tc_ac1_disp 0x30 #define tc_active_disp 0x134 -#define tc_alloc_counter_disp 0x260 +#define tc_alloc_counter_disp 0x298 #define tc_ap_disp 0x50 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0x1D0 +#define tc_block_counter_disp 0x1D8 #define tc_cchain_disp 0x120 #define tc_code_ranges_to_flush_disp 0x128 -#define tc_compile_profile_disp 0x228 +#define tc_compile_profile_disp 0x230 +#define tc_compress_format_disp 0x278 +#define tc_compress_level_disp 0x280 #define tc_cp_disp 0x40 -#define tc_current_error_disp 0x1C8 -#define tc_current_input_disp 0x1B8 -#define tc_current_mso_disp 0x1E0 -#define tc_current_output_disp 0x1C0 +#define tc_current_error_disp 0x1D0 +#define tc_current_input_disp 0x1C0 +#define tc_current_mso_disp 0x1E8 +#define tc_current_output_disp 0x1C8 +#define tc_default_record_equal_procedure_disp 0x268 +#define tc_default_record_hash_procedure_disp 0x270 #define tc_disable_count_disp 0x198 #define tc_eap_disp 0x58 #define tc_esp_disp 0x48 -#define tc_fxfirst_bit_set_bv_disp 0x1F8 -#define tc_fxlength_bv_disp 0x1F0 -#define tc_generate_inspector_information_disp 0x230 -#define tc_generate_profile_forms_disp 0x238 +#define tc_fxfirst_bit_set_bv_disp 0x200 +#define tc_fxlength_bv_disp 0x1F8 +#define tc_generate_inspector_information_disp 0x238 +#define tc_generate_procedure_source_information_disp 0x240 +#define tc_generate_profile_forms_disp 0x248 #define tc_guardian_entries_disp 0x118 -#define tc_instr_counter_disp 0x258 -#define tc_keyboard_interrupt_pending_disp 0x1A8 -#define tc_meta_level_disp 0x220 -#define tc_null_immutable_bytevector_disp 0x210 -#define tc_null_immutable_fxvector_disp 0x208 -#define tc_null_immutable_string_disp 0x218 -#define tc_null_immutable_vector_disp 0x200 -#define tc_optimize_level_disp 0x240 -#define tc_parameters_disp 0x268 +#define tc_instr_counter_disp 0x290 +#define tc_keyboard_interrupt_pending_disp 0x1B0 +#define tc_lz4_out_buffer_disp 0x288 +#define tc_meta_level_disp 0x228 +#define tc_null_immutable_bytevector_disp 0x218 +#define tc_null_immutable_fxvector_disp 0x210 +#define tc_null_immutable_string_disp 0x220 +#define tc_null_immutable_vector_disp 0x208 +#define tc_optimize_level_disp 0x250 +#define tc_parameters_disp 0x2A0 #define tc_random_seed_disp 0x130 #define tc_real_eap_disp 0x90 #define tc_ret_disp 0x60 #define tc_scheme_stack_disp 0x138 #define tc_scheme_stack_size_disp 0x150 -#define tc_sfd_disp 0x1D8 +#define tc_sfd_disp 0x1E0 #define tc_sfp_disp 0x38 #define tc_signal_interrupt_pending_disp 0x1A0 +#define tc_signal_interrupt_queue_disp 0x1A8 #define tc_something_pending_disp 0x188 #define tc_stack_cache_disp 0x140 #define tc_stack_link_disp 0x148 -#define tc_subset_mode_disp 0x248 -#define tc_suppress_primitive_inlining_disp 0x250 -#define tc_target_machine_disp 0x1E8 +#define tc_subset_mode_disp 0x258 +#define tc_suppress_primitive_inlining_disp 0x260 +#define tc_target_machine_disp 0x1F0 #define tc_td_disp 0x88 -#define tc_threadno_disp 0x1B0 +#define tc_threadno_disp 0x1B8 #define tc_timer_ticks_disp 0x190 #define tc_trap_disp 0x68 #define tc_ts_disp 0x80 @@ -631,6 +654,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -679,6 +703,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned long long int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x80 @@ -689,41 +716,34 @@ #define vector_length_offset 0x4 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x10 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -896,6 +916,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+9))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+680))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+688))) #define U(x) (*((ptr *)((uptr)(x)+352))) #define V(x) (*((ptr *)((uptr)(x)+360))) #define W(x) (*((ptr *)((uptr)(x)+368))) @@ -904,51 +926,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+40))) #define AC1(x) (*((void* *)((uptr)(x)+48))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+308))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+608))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+664))) #define AP(x) (*((void* *)((uptr)(x)+80))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+464))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+472))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+288))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+296))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+552))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+560))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+632))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+640))) #define CP(x) (*((void* *)((uptr)(x)+64))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+456))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+440))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+480))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+464))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+488))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+456))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+616))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+624))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+408))) #define EAP(x) (*((void* *)((uptr)(x)+88))) #define ESP(x) (*((void* *)((uptr)(x)+72))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+504))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+496))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+560))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+568))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+512))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+504))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+568))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+576))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+584))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+280))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+600))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+424))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+544))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+528))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+520))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+536))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+512))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+576))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+616))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+656))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+432))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+648))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+552))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+536))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+528))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+544))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+520))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+592))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+672))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+304))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+144))) #define RET(x) (*((void* *)((uptr)(x)+96))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+312))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+336))) -#define SFD(x) (*((ptr *)((uptr)(x)+472))) +#define SFD(x) (*((ptr *)((uptr)(x)+480))) #define SFP(x) (*((void* *)((uptr)(x)+56))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+416))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+424))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+392))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+320))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+328))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+584))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+592))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+488))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+600))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+608))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+496))) #define TD(x) (*((void* *)((uptr)(x)+136))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+432))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+440))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+400))) #define TRAP(x) (*((void* *)((uptr)(x)+104))) #define TS(x) (*((void* *)((uptr)(x)+128))) @@ -960,5 +989,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+152))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ta6nt/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ta6nt/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ta6nt/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ta6nt/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/ta6nt/scheme.h chezscheme-9.5.4+dfsg/boot/ta6nt/scheme.h --- chezscheme-9.5+dfsg/boot/ta6nt/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ta6nt/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (ta6nt) */ +/* scheme.h for Chez Scheme Version 9.5.4 (ta6nt) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "ta6nt" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); @@ -197,6 +199,12 @@ EXPORT void Sdeactivate_thread PROTO((void)); EXPORT int Sdestroy_thread PROTO((void)); +/* Windows support. */ +#include +EXPORT char * Sgetenv PROTO((const char *)); +EXPORT wchar_t * Sutf8_to_wide PROTO((const char *)); +EXPORT char * Swide_to_utf8 PROTO((const wchar_t *)); + /* Features. */ #define FEATURE_ICONV #define FEATURE_EXPEDITOR diff -Nru chezscheme-9.5+dfsg/boot/ta6osx/equates.h chezscheme-9.5.4+dfsg/boot/ta6osx/equates.h --- chezscheme-9.5+dfsg/boot/ta6osx/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ta6osx/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x40 #define alloc_waste_maximum 0x800 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86_64 @@ -87,8 +96,8 @@ #define bytevector_length_factor 0x8 #define bytevector_length_offset 0x3 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x8 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x9 @@ -101,7 +110,9 @@ #define code_closure_length_disp 0x29 #define code_data_disp 0x41 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x31 #define code_length_disp 0x9 @@ -193,25 +204,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -221,8 +232,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x3D #define fixnum_factor 0x8 @@ -235,6 +248,7 @@ #define forward_address_disp 0x8 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x9 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -262,7 +276,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -337,6 +351,7 @@ #define mask_fixnum 0x7 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFFFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x20 #define return_address_mv_return_address_disp -0x8 #define return_address_toplink_disp -0x18 -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x10 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0x18 @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x8 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xE #define segment_t1_bits 0x10 @@ -498,7 +512,7 @@ #define size_rp_header 0x20 #define size_rtd_counts 0x810 #define size_symbol 0x30 -#define size_tc 0x270 +#define size_tc 0x2C0 #define size_thread 0x10 #define size_tlc 0x20 #define size_typed_object 0x10 @@ -541,6 +555,8 @@ #define symbol_pvalue_disp 0xD #define symbol_splist_disp 0x25 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x2A8 +#define tc_SRCBV_disp 0x2B0 #define tc_U_disp 0x160 #define tc_V_disp 0x168 #define tc_W_disp 0x170 @@ -549,51 +565,58 @@ #define tc_ac0_disp 0x28 #define tc_ac1_disp 0x30 #define tc_active_disp 0x134 -#define tc_alloc_counter_disp 0x260 +#define tc_alloc_counter_disp 0x298 #define tc_ap_disp 0x50 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0x1D0 +#define tc_block_counter_disp 0x1D8 #define tc_cchain_disp 0x120 #define tc_code_ranges_to_flush_disp 0x128 -#define tc_compile_profile_disp 0x228 +#define tc_compile_profile_disp 0x230 +#define tc_compress_format_disp 0x278 +#define tc_compress_level_disp 0x280 #define tc_cp_disp 0x40 -#define tc_current_error_disp 0x1C8 -#define tc_current_input_disp 0x1B8 -#define tc_current_mso_disp 0x1E0 -#define tc_current_output_disp 0x1C0 +#define tc_current_error_disp 0x1D0 +#define tc_current_input_disp 0x1C0 +#define tc_current_mso_disp 0x1E8 +#define tc_current_output_disp 0x1C8 +#define tc_default_record_equal_procedure_disp 0x268 +#define tc_default_record_hash_procedure_disp 0x270 #define tc_disable_count_disp 0x198 #define tc_eap_disp 0x58 #define tc_esp_disp 0x48 -#define tc_fxfirst_bit_set_bv_disp 0x1F8 -#define tc_fxlength_bv_disp 0x1F0 -#define tc_generate_inspector_information_disp 0x230 -#define tc_generate_profile_forms_disp 0x238 +#define tc_fxfirst_bit_set_bv_disp 0x200 +#define tc_fxlength_bv_disp 0x1F8 +#define tc_generate_inspector_information_disp 0x238 +#define tc_generate_procedure_source_information_disp 0x240 +#define tc_generate_profile_forms_disp 0x248 #define tc_guardian_entries_disp 0x118 -#define tc_instr_counter_disp 0x258 -#define tc_keyboard_interrupt_pending_disp 0x1A8 -#define tc_meta_level_disp 0x220 -#define tc_null_immutable_bytevector_disp 0x210 -#define tc_null_immutable_fxvector_disp 0x208 -#define tc_null_immutable_string_disp 0x218 -#define tc_null_immutable_vector_disp 0x200 -#define tc_optimize_level_disp 0x240 -#define tc_parameters_disp 0x268 +#define tc_instr_counter_disp 0x290 +#define tc_keyboard_interrupt_pending_disp 0x1B0 +#define tc_lz4_out_buffer_disp 0x288 +#define tc_meta_level_disp 0x228 +#define tc_null_immutable_bytevector_disp 0x218 +#define tc_null_immutable_fxvector_disp 0x210 +#define tc_null_immutable_string_disp 0x220 +#define tc_null_immutable_vector_disp 0x208 +#define tc_optimize_level_disp 0x250 +#define tc_parameters_disp 0x2A0 #define tc_random_seed_disp 0x130 #define tc_real_eap_disp 0x90 #define tc_ret_disp 0x60 #define tc_scheme_stack_disp 0x138 #define tc_scheme_stack_size_disp 0x150 -#define tc_sfd_disp 0x1D8 +#define tc_sfd_disp 0x1E0 #define tc_sfp_disp 0x38 #define tc_signal_interrupt_pending_disp 0x1A0 +#define tc_signal_interrupt_queue_disp 0x1A8 #define tc_something_pending_disp 0x188 #define tc_stack_cache_disp 0x140 #define tc_stack_link_disp 0x148 -#define tc_subset_mode_disp 0x248 -#define tc_suppress_primitive_inlining_disp 0x250 -#define tc_target_machine_disp 0x1E8 +#define tc_subset_mode_disp 0x258 +#define tc_suppress_primitive_inlining_disp 0x260 +#define tc_target_machine_disp 0x1F0 #define tc_td_disp 0x88 -#define tc_threadno_disp 0x1B0 +#define tc_threadno_disp 0x1B8 #define tc_timer_ticks_disp 0x190 #define tc_trap_disp 0x68 #define tc_ts_disp 0x80 @@ -631,6 +654,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -679,6 +703,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned long int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x80 @@ -689,41 +716,34 @@ #define vector_length_offset 0x4 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -896,6 +916,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+9))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+680))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+688))) #define U(x) (*((ptr *)((uptr)(x)+352))) #define V(x) (*((ptr *)((uptr)(x)+360))) #define W(x) (*((ptr *)((uptr)(x)+368))) @@ -904,51 +926,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+40))) #define AC1(x) (*((void* *)((uptr)(x)+48))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+308))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+608))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+664))) #define AP(x) (*((void* *)((uptr)(x)+80))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+464))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+472))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+288))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+296))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+552))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+560))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+632))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+640))) #define CP(x) (*((void* *)((uptr)(x)+64))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+456))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+440))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+480))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+464))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+448))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+488))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+456))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+616))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+624))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+408))) #define EAP(x) (*((void* *)((uptr)(x)+88))) #define ESP(x) (*((void* *)((uptr)(x)+72))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+504))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+496))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+560))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+568))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+512))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+504))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+568))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+576))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+584))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+280))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+600))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+424))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+544))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+528))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+520))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+536))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+512))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+576))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+616))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+656))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+432))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+648))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+552))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+536))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+528))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+544))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+520))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+592))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+672))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+304))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+144))) #define RET(x) (*((void* *)((uptr)(x)+96))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+312))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+336))) -#define SFD(x) (*((ptr *)((uptr)(x)+472))) +#define SFD(x) (*((ptr *)((uptr)(x)+480))) #define SFP(x) (*((void* *)((uptr)(x)+56))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+416))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+424))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+392))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+320))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+328))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+584))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+592))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+488))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+600))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+608))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+496))) #define TD(x) (*((void* *)((uptr)(x)+136))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+432))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+440))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+400))) #define TRAP(x) (*((void* *)((uptr)(x)+104))) #define TS(x) (*((void* *)((uptr)(x)+128))) @@ -960,5 +989,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+152))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ta6osx/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ta6osx/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ta6osx/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ta6osx/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/ta6osx/scheme.h chezscheme-9.5.4+dfsg/boot/ta6osx/scheme.h --- chezscheme-9.5+dfsg/boot/ta6osx/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ta6osx/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (ta6osx) */ +/* scheme.h for Chez Scheme Version 9.5.4 (ta6osx) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "ta6osx" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/ti3le/equates.h chezscheme-9.5.4+dfsg/boot/ti3le/equates.h --- chezscheme-9.5+dfsg/boot/ti3le/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ti3le/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x20 #define alloc_waste_maximum 0x400 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86 @@ -88,8 +97,8 @@ #define bytevector_length_offset 0x3 #define bytevector_pad_disp 0x5 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x4 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x8 @@ -102,7 +111,9 @@ #define code_closure_length_disp 0x15 #define code_data_disp 0x21 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x19 #define code_length_disp 0x5 @@ -194,25 +205,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -222,8 +233,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x1E #define fixnum_factor 0x4 @@ -236,6 +249,7 @@ #define forward_address_disp 0x4 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x5 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -263,7 +277,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -338,6 +352,7 @@ #define mask_fixnum 0x3 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x10 #define return_address_mv_return_address_disp -0x4 #define return_address_toplink_disp -0xC -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x8 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0xC @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x4 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xD #define segment_t1_bits 0x13 @@ -496,7 +510,7 @@ #define size_rp_header 0x10 #define size_rtd_counts 0x410 #define size_symbol 0x18 -#define size_tc 0x138 +#define size_tc 0x158 #define size_thread 0x8 #define size_tlc 0x10 #define size_typed_object 0x8 @@ -539,6 +553,8 @@ #define symbol_pvalue_disp 0x9 #define symbol_splist_disp 0x15 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x150 +#define tc_SRCBV_disp 0x154 #define tc_U_disp 0xA4 #define tc_V_disp 0xA8 #define tc_W_disp 0xAC @@ -547,51 +563,58 @@ #define tc_ac0_disp 0x4 #define tc_ac1_disp 0x8 #define tc_active_disp 0x8C -#define tc_alloc_counter_disp 0x128 +#define tc_alloc_counter_disp 0x144 #define tc_ap_disp 0x18 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0xDC +#define tc_block_counter_disp 0xE0 #define tc_cchain_disp 0x80 #define tc_code_ranges_to_flush_disp 0x84 -#define tc_compile_profile_disp 0x108 +#define tc_compile_profile_disp 0x10C +#define tc_compress_format_disp 0x130 +#define tc_compress_level_disp 0x134 #define tc_cp_disp 0x10 -#define tc_current_error_disp 0xD8 -#define tc_current_input_disp 0xD0 -#define tc_current_mso_disp 0xE4 -#define tc_current_output_disp 0xD4 +#define tc_current_error_disp 0xDC +#define tc_current_input_disp 0xD4 +#define tc_current_mso_disp 0xE8 +#define tc_current_output_disp 0xD8 +#define tc_default_record_equal_procedure_disp 0x128 +#define tc_default_record_hash_procedure_disp 0x12C #define tc_disable_count_disp 0xC0 #define tc_eap_disp 0x1C #define tc_esp_disp 0x14 -#define tc_fxfirst_bit_set_bv_disp 0xF0 -#define tc_fxlength_bv_disp 0xEC -#define tc_generate_inspector_information_disp 0x10C -#define tc_generate_profile_forms_disp 0x110 +#define tc_fxfirst_bit_set_bv_disp 0xF4 +#define tc_fxlength_bv_disp 0xF0 +#define tc_generate_inspector_information_disp 0x110 +#define tc_generate_procedure_source_information_disp 0x114 +#define tc_generate_profile_forms_disp 0x118 #define tc_guardian_entries_disp 0x7C -#define tc_instr_counter_disp 0x120 -#define tc_keyboard_interrupt_pending_disp 0xC8 -#define tc_meta_level_disp 0x104 -#define tc_null_immutable_bytevector_disp 0xFC -#define tc_null_immutable_fxvector_disp 0xF8 -#define tc_null_immutable_string_disp 0x100 -#define tc_null_immutable_vector_disp 0xF4 -#define tc_optimize_level_disp 0x114 -#define tc_parameters_disp 0x130 +#define tc_instr_counter_disp 0x13C +#define tc_keyboard_interrupt_pending_disp 0xCC +#define tc_lz4_out_buffer_disp 0x138 +#define tc_meta_level_disp 0x108 +#define tc_null_immutable_bytevector_disp 0x100 +#define tc_null_immutable_fxvector_disp 0xFC +#define tc_null_immutable_string_disp 0x104 +#define tc_null_immutable_vector_disp 0xF8 +#define tc_optimize_level_disp 0x11C +#define tc_parameters_disp 0x14C #define tc_random_seed_disp 0x88 #define tc_real_eap_disp 0x38 #define tc_ret_disp 0x20 #define tc_scheme_stack_disp 0x90 #define tc_scheme_stack_size_disp 0x9C -#define tc_sfd_disp 0xE0 +#define tc_sfd_disp 0xE4 #define tc_sfp_disp 0xC #define tc_signal_interrupt_pending_disp 0xC4 +#define tc_signal_interrupt_queue_disp 0xC8 #define tc_something_pending_disp 0xB8 #define tc_stack_cache_disp 0x94 #define tc_stack_link_disp 0x98 -#define tc_subset_mode_disp 0x118 -#define tc_suppress_primitive_inlining_disp 0x11C -#define tc_target_machine_disp 0xE8 +#define tc_subset_mode_disp 0x120 +#define tc_suppress_primitive_inlining_disp 0x124 +#define tc_target_machine_disp 0xEC #define tc_td_disp 0x34 -#define tc_threadno_disp 0xCC +#define tc_threadno_disp 0xD0 #define tc_timer_ticks_disp 0xBC #define tc_trap_disp 0x24 #define tc_ts_disp 0x30 @@ -629,6 +652,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -677,6 +701,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x40 @@ -687,41 +714,34 @@ #define vector_length_offset 0x3 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -894,6 +914,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+5))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+336))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+340))) #define U(x) (*((ptr *)((uptr)(x)+164))) #define V(x) (*((ptr *)((uptr)(x)+168))) #define W(x) (*((ptr *)((uptr)(x)+172))) @@ -902,51 +924,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+4))) #define AC1(x) (*((void* *)((uptr)(x)+8))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+140))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+296))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+324))) #define AP(x) (*((void* *)((uptr)(x)+24))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+220))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+224))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+128))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+132))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+264))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+268))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+304))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+308))) #define CP(x) (*((void* *)((uptr)(x)+16))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+216))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+208))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+228))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+220))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+232))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+216))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+296))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+300))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+192))) #define EAP(x) (*((void* *)((uptr)(x)+28))) #define ESP(x) (*((void* *)((uptr)(x)+20))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+240))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+236))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+268))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+272))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+244))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+240))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+272))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+276))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+280))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+124))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+288))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+200))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+260))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+252))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+248))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+256))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+244))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+276))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+304))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+316))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+204))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+312))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+264))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+256))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+252))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+260))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+248))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+284))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+332))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+136))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+56))) #define RET(x) (*((void* *)((uptr)(x)+32))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+144))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+156))) -#define SFD(x) (*((ptr *)((uptr)(x)+224))) +#define SFD(x) (*((ptr *)((uptr)(x)+228))) #define SFP(x) (*((void* *)((uptr)(x)+12))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+196))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+200))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+184))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+148))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+152))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+280))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+284))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+232))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+288))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+292))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+236))) #define TD(x) (*((void* *)((uptr)(x)+52))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+204))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+208))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+188))) #define TRAP(x) (*((void* *)((uptr)(x)+36))) #define TS(x) (*((void* *)((uptr)(x)+48))) @@ -958,5 +987,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+60))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ti3le/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ti3le/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ti3le/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ti3le/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/ti3le/scheme.h chezscheme-9.5.4+dfsg/boot/ti3le/scheme.h --- chezscheme-9.5+dfsg/boot/ti3le/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ti3le/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (ti3le) */ +/* scheme.h for Chez Scheme Version 9.5.4 (ti3le) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "ti3le" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/boot/ti3nt/equates.h chezscheme-9.5.4+dfsg/boot/ti3nt/equates.h --- chezscheme-9.5+dfsg/boot/ti3nt/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ti3nt/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -14,14 +14,22 @@ typedef unsigned short U16; typedef int I32; typedef unsigned int U32; -typedef __int64 I64; -typedef unsigned __int64 U64; +typedef long long I64; +typedef unsigned long long U64; /* constants from cmacros.ss */ #define $c_func_closure_index 0x4 #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x20 #define alloc_waste_maximum 0x400 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86 @@ -88,8 +97,8 @@ #define bytevector_length_offset 0x3 #define bytevector_pad_disp 0x5 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x4 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x8 @@ -102,7 +111,9 @@ #define code_closure_length_disp 0x15 #define code_data_disp 0x21 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x19 #define code_length_disp 0x5 @@ -194,25 +205,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -222,8 +233,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x1E #define fixnum_factor 0x4 @@ -236,6 +249,7 @@ #define forward_address_disp 0x4 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x5 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -263,7 +277,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -338,6 +352,7 @@ #define mask_fixnum 0x3 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x10 #define return_address_mv_return_address_disp -0x4 #define return_address_toplink_disp -0xC -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x8 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0xC @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x4 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xD #define segment_t1_bits 0x13 @@ -496,7 +510,7 @@ #define size_rp_header 0x10 #define size_rtd_counts 0x410 #define size_symbol 0x18 -#define size_tc 0x138 +#define size_tc 0x160 #define size_thread 0x8 #define size_tlc 0x10 #define size_typed_object 0x8 @@ -539,6 +553,8 @@ #define symbol_pvalue_disp 0x9 #define symbol_splist_disp 0x15 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x154 +#define tc_SRCBV_disp 0x158 #define tc_U_disp 0xA4 #define tc_V_disp 0xA8 #define tc_W_disp 0xAC @@ -547,51 +563,58 @@ #define tc_ac0_disp 0x4 #define tc_ac1_disp 0x8 #define tc_active_disp 0x8C -#define tc_alloc_counter_disp 0x128 +#define tc_alloc_counter_disp 0x148 #define tc_ap_disp 0x18 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0xDC +#define tc_block_counter_disp 0xE0 #define tc_cchain_disp 0x80 #define tc_code_ranges_to_flush_disp 0x84 -#define tc_compile_profile_disp 0x108 +#define tc_compile_profile_disp 0x10C +#define tc_compress_format_disp 0x130 +#define tc_compress_level_disp 0x134 #define tc_cp_disp 0x10 -#define tc_current_error_disp 0xD8 -#define tc_current_input_disp 0xD0 -#define tc_current_mso_disp 0xE4 -#define tc_current_output_disp 0xD4 +#define tc_current_error_disp 0xDC +#define tc_current_input_disp 0xD4 +#define tc_current_mso_disp 0xE8 +#define tc_current_output_disp 0xD8 +#define tc_default_record_equal_procedure_disp 0x128 +#define tc_default_record_hash_procedure_disp 0x12C #define tc_disable_count_disp 0xC0 #define tc_eap_disp 0x1C #define tc_esp_disp 0x14 -#define tc_fxfirst_bit_set_bv_disp 0xF0 -#define tc_fxlength_bv_disp 0xEC -#define tc_generate_inspector_information_disp 0x10C -#define tc_generate_profile_forms_disp 0x110 +#define tc_fxfirst_bit_set_bv_disp 0xF4 +#define tc_fxlength_bv_disp 0xF0 +#define tc_generate_inspector_information_disp 0x110 +#define tc_generate_procedure_source_information_disp 0x114 +#define tc_generate_profile_forms_disp 0x118 #define tc_guardian_entries_disp 0x7C -#define tc_instr_counter_disp 0x120 -#define tc_keyboard_interrupt_pending_disp 0xC8 -#define tc_meta_level_disp 0x104 -#define tc_null_immutable_bytevector_disp 0xFC -#define tc_null_immutable_fxvector_disp 0xF8 -#define tc_null_immutable_string_disp 0x100 -#define tc_null_immutable_vector_disp 0xF4 -#define tc_optimize_level_disp 0x114 -#define tc_parameters_disp 0x130 +#define tc_instr_counter_disp 0x140 +#define tc_keyboard_interrupt_pending_disp 0xCC +#define tc_lz4_out_buffer_disp 0x138 +#define tc_meta_level_disp 0x108 +#define tc_null_immutable_bytevector_disp 0x100 +#define tc_null_immutable_fxvector_disp 0xFC +#define tc_null_immutable_string_disp 0x104 +#define tc_null_immutable_vector_disp 0xF8 +#define tc_optimize_level_disp 0x11C +#define tc_parameters_disp 0x150 #define tc_random_seed_disp 0x88 #define tc_real_eap_disp 0x38 #define tc_ret_disp 0x20 #define tc_scheme_stack_disp 0x90 #define tc_scheme_stack_size_disp 0x9C -#define tc_sfd_disp 0xE0 +#define tc_sfd_disp 0xE4 #define tc_sfp_disp 0xC #define tc_signal_interrupt_pending_disp 0xC4 +#define tc_signal_interrupt_queue_disp 0xC8 #define tc_something_pending_disp 0xB8 #define tc_stack_cache_disp 0x94 #define tc_stack_link_disp 0x98 -#define tc_subset_mode_disp 0x118 -#define tc_suppress_primitive_inlining_disp 0x11C -#define tc_target_machine_disp 0xE8 +#define tc_subset_mode_disp 0x120 +#define tc_suppress_primitive_inlining_disp 0x124 +#define tc_target_machine_disp 0xEC #define tc_td_disp 0x34 -#define tc_threadno_disp 0xCC +#define tc_threadno_disp 0xD0 #define tc_timer_ticks_disp 0xBC #define tc_trap_disp 0x24 #define tc_ts_disp 0x30 @@ -630,6 +653,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -667,17 +691,20 @@ #define typed_object_type_disp 0x1 #define typedef_i16 "short" #define typedef_i32 "int" -#define typedef_i64 "__int64" +#define typedef_i64 "long long" #define typedef_i8 "char" #define typedef_iptr "int" #define typedef_ptr "void *" #define typedef_string_char "unsigned int" #define typedef_u16 "unsigned short" #define typedef_u32 "unsigned int" -#define typedef_u64 "unsigned __int64" +#define typedef_u64 "unsigned long long" #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x40 @@ -688,41 +715,34 @@ #define vector_length_offset 0x3 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x10 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -895,6 +915,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+5))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+340))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+344))) #define U(x) (*((ptr *)((uptr)(x)+164))) #define V(x) (*((ptr *)((uptr)(x)+168))) #define W(x) (*((ptr *)((uptr)(x)+172))) @@ -903,51 +925,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+4))) #define AC1(x) (*((void* *)((uptr)(x)+8))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+140))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+296))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+328))) #define AP(x) (*((void* *)((uptr)(x)+24))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+220))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+224))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+128))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+132))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+264))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+268))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+304))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+308))) #define CP(x) (*((void* *)((uptr)(x)+16))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+216))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+208))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+228))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+220))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+232))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+216))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+296))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+300))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+192))) #define EAP(x) (*((void* *)((uptr)(x)+28))) #define ESP(x) (*((void* *)((uptr)(x)+20))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+240))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+236))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+268))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+272))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+244))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+240))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+272))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+276))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+280))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+124))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+288))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+200))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+260))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+252))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+248))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+256))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+244))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+276))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+304))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+320))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+204))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+312))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+264))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+256))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+252))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+260))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+248))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+284))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+336))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+136))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+56))) #define RET(x) (*((void* *)((uptr)(x)+32))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+144))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+156))) -#define SFD(x) (*((ptr *)((uptr)(x)+224))) +#define SFD(x) (*((ptr *)((uptr)(x)+228))) #define SFP(x) (*((void* *)((uptr)(x)+12))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+196))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+200))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+184))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+148))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+152))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+280))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+284))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+232))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+288))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+292))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+236))) #define TD(x) (*((void* *)((uptr)(x)+52))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+204))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+208))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+188))) #define TRAP(x) (*((void* *)((uptr)(x)+36))) #define TS(x) (*((void* *)((uptr)(x)+48))) @@ -959,5 +988,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+60))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ti3nt/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ti3nt/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ti3nt/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ti3nt/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/ti3nt/scheme.h chezscheme-9.5.4+dfsg/boot/ti3nt/scheme.h --- chezscheme-9.5+dfsg/boot/ti3nt/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ti3nt/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (ti3nt) */ +/* scheme.h for Chez Scheme Version 9.5.4 (ti3nt) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "ti3nt" /* All Scheme objects are of type ptr. Type iptr and */ @@ -114,8 +114,8 @@ #define Sunsigned_value(x) (uptr)Sinteger_value(x) EXPORT int Sinteger32_value PROTO((ptr)); #define Sunsigned32_value(x) (unsigned int)Sinteger32_value(x) -EXPORT __int64 Sinteger64_value PROTO((ptr)); -#define Sunsigned64_value(x) (unsigned __int64)Sinteger64_value(x) +EXPORT long long Sinteger64_value PROTO((ptr)); +#define Sunsigned64_value(x) (unsigned long long)Sinteger64_value(x) /* Mutators */ EXPORT void Sset_box PROTO((ptr, ptr)); @@ -147,13 +147,14 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); EXPORT ptr Sinteger32 PROTO((int)); EXPORT ptr Sunsigned32 PROTO((unsigned int)); -EXPORT ptr Sinteger64 PROTO((__int64)); -EXPORT ptr Sunsigned64 PROTO((unsigned __int64)); +EXPORT ptr Sinteger64 PROTO((long long)); +EXPORT ptr Sunsigned64 PROTO((unsigned long long)); /* Miscellaneous */ EXPORT ptr Stop_level_value PROTO((ptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); @@ -197,6 +199,12 @@ EXPORT void Sdeactivate_thread PROTO((void)); EXPORT int Sdestroy_thread PROTO((void)); +/* Windows support. */ +#include +EXPORT char * Sgetenv PROTO((const char *)); +EXPORT wchar_t * Sutf8_to_wide PROTO((const char *)); +EXPORT char * Swide_to_utf8 PROTO((const wchar_t *)); + /* Features. */ #define FEATURE_ICONV #define FEATURE_EXPEDITOR diff -Nru chezscheme-9.5+dfsg/boot/ti3osx/equates.h chezscheme-9.5.4+dfsg/boot/ti3osx/equates.h --- chezscheme-9.5+dfsg/boot/ti3osx/equates.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ti3osx/equates.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* equates.h for Chez Scheme Version 9.5 */ +/* equates.h for Chez Scheme Version 9.5.4 */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -22,6 +22,14 @@ #define $c_func_closure_record_index 0x3 #define $c_func_code_object_index 0x2 #define $c_func_code_record_index 0x1 +#define COMPRESS_FORMAT_BITS 0x3 +#define COMPRESS_GZIP 0x0 +#define COMPRESS_HIGH 0x3 +#define COMPRESS_LOW 0x1 +#define COMPRESS_LZ4 0x1 +#define COMPRESS_MAX 0x4 +#define COMPRESS_MEDIUM 0x2 +#define COMPRESS_MIN 0x0 #define ERROR_CALL_ARGUMENT_COUNT 0x4 #define ERROR_CALL_NONPROCEDURE 0x3 #define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 @@ -63,6 +71,7 @@ #define STRVNCATE 0x1 #define address_bits 0x20 #define alloc_waste_maximum 0x400 +#define annotation_all 0x3 #define annotation_debug 0x1 #define annotation_profile 0x2 #define architecture x86 @@ -88,8 +97,8 @@ #define bytevector_length_offset 0x3 #define bytevector_pad_disp 0x5 #define bytevector_type_disp 0x1 -#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall->ptr Scall->fptr Scall->bytevector Scall->fixnum Scall->int32 Scall->uns32 Scall->double Scall->single Scall->int64 Scall->uns64 Scall->void) -#define c_entry_vector_size 0x1F +#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) +#define c_entry_vector_size 0x19 #define cached_stack_link_disp 0x4 #define cached_stack_size_disp 0x0 #define card_offset_bits 0x8 @@ -102,7 +111,9 @@ #define code_closure_length_disp 0x15 #define code_data_disp 0x21 #define code_flag_continuation 0x2 +#define code_flag_guardian 0x8 #define code_flag_system 0x1 +#define code_flag_template 0x4 #define code_flags_offset 0x8 #define code_info_disp 0x19 #define code_length_disp 0x5 @@ -194,25 +205,25 @@ #define fasl_type_ephemeron 0x1C #define fasl_type_eq_hashtable 0x1F #define fasl_type_exactnum 0x14 -#define fasl_type_fasl_size 0x16 #define fasl_type_flonum 0x8 #define fasl_type_fxvector 0x1B #define fasl_type_gensym 0x13 #define fasl_type_graph 0x10 #define fasl_type_graph_def 0x11 #define fasl_type_graph_ref 0x12 -#define fasl_type_group 0x21 +#define fasl_type_gzip 0x2B #define fasl_type_header 0x0 #define fasl_type_immediate 0xC -#define fasl_type_immutable_box 0x28 -#define fasl_type_immutable_bytevector 0x27 -#define fasl_type_immutable_fxvector 0x26 -#define fasl_type_immutable_string 0x25 -#define fasl_type_immutable_vector 0x24 +#define fasl_type_immutable_box 0x29 +#define fasl_type_immutable_bytevector 0x28 +#define fasl_type_immutable_fxvector 0x27 +#define fasl_type_immutable_string 0x26 +#define fasl_type_immutable_vector 0x25 #define fasl_type_inexactnum 0x5 #define fasl_type_large_integer 0xA #define fasl_type_library 0xE #define fasl_type_library_code 0xF +#define fasl_type_lz4 0x2C #define fasl_type_pair 0x7 #define fasl_type_ratnum 0x3 #define fasl_type_record 0x17 @@ -222,8 +233,10 @@ #define fasl_type_string 0x9 #define fasl_type_symbol 0x2 #define fasl_type_symbol_hashtable 0x20 +#define fasl_type_uncompressed 0x2A #define fasl_type_vector 0x4 #define fasl_type_visit 0x22 +#define fasl_type_visit_revisit 0x24 #define fasl_type_weak_pair 0x1E #define fixnum_bits 0x1E #define fixnum_factor 0x4 @@ -236,6 +249,7 @@ #define forward_address_disp 0x4 #define forward_marker (ptr)0x2E #define forward_marker_disp 0x0 +#define ftype_guardian_rep (ptr)0x56 #define fxvector_data_disp 0x5 #define fxvector_immutable_flag 0x8 #define fxvector_length_factor 0x10 @@ -263,7 +277,7 @@ #define int_bits 0x20 #define integer_divide_instruction 1 #define keyboard_interrupt_index 0x3 -#define library_entry_vector_size 0x20C +#define library_entry_vector_size 0x210 #define libspec_closure_index 0xD #define libspec_does_not_expect_headroom_index 0x0 #define libspec_error_index 0xE @@ -338,6 +352,7 @@ #define mask_fixnum 0x3 #define mask_flonum 0x7 #define mask_fxvector 0x7 +#define mask_guardian_code 0x8FF #define mask_immediate 0x7 #define mask_inexactnum 0xFFFFFFFF #define mask_input_port 0x1FF @@ -458,7 +473,6 @@ #define return_address_livemask_disp -0x10 #define return_address_mv_return_address_disp -0x4 #define return_address_toplink_disp -0xC -#define revisit_tag 0x1 #define rp_header_frame_size_disp 0x8 #define rp_header_livemask_disp 0x0 #define rp_header_mv_return_address_disp 0xC @@ -471,7 +485,7 @@ #define rtd_sealed 0x4 #define sbwp (ptr)0x4E #define scaled_shot_1_shot_flag -0x4 -#define scheme_version 0x90500 +#define scheme_version 0x90504 #define segment_card_offset_bits 0x5 #define segment_offset_bits 0xD #define segment_t1_bits 0x13 @@ -496,7 +510,7 @@ #define size_rp_header 0x10 #define size_rtd_counts 0x410 #define size_symbol 0x18 -#define size_tc 0x138 +#define size_tc 0x158 #define size_thread 0x8 #define size_tlc 0x10 #define size_typed_object 0x8 @@ -539,6 +553,8 @@ #define symbol_pvalue_disp 0x9 #define symbol_splist_disp 0x15 #define symbol_value_disp 0x5 +#define tc_DSTBV_disp 0x150 +#define tc_SRCBV_disp 0x154 #define tc_U_disp 0xA4 #define tc_V_disp 0xA8 #define tc_W_disp 0xAC @@ -547,51 +563,58 @@ #define tc_ac0_disp 0x4 #define tc_ac1_disp 0x8 #define tc_active_disp 0x8C -#define tc_alloc_counter_disp 0x128 +#define tc_alloc_counter_disp 0x144 #define tc_ap_disp 0x18 #define tc_arg_regs_disp 0x0 -#define tc_block_counter_disp 0xDC +#define tc_block_counter_disp 0xE0 #define tc_cchain_disp 0x80 #define tc_code_ranges_to_flush_disp 0x84 -#define tc_compile_profile_disp 0x108 +#define tc_compile_profile_disp 0x10C +#define tc_compress_format_disp 0x130 +#define tc_compress_level_disp 0x134 #define tc_cp_disp 0x10 -#define tc_current_error_disp 0xD8 -#define tc_current_input_disp 0xD0 -#define tc_current_mso_disp 0xE4 -#define tc_current_output_disp 0xD4 +#define tc_current_error_disp 0xDC +#define tc_current_input_disp 0xD4 +#define tc_current_mso_disp 0xE8 +#define tc_current_output_disp 0xD8 +#define tc_default_record_equal_procedure_disp 0x128 +#define tc_default_record_hash_procedure_disp 0x12C #define tc_disable_count_disp 0xC0 #define tc_eap_disp 0x1C #define tc_esp_disp 0x14 -#define tc_fxfirst_bit_set_bv_disp 0xF0 -#define tc_fxlength_bv_disp 0xEC -#define tc_generate_inspector_information_disp 0x10C -#define tc_generate_profile_forms_disp 0x110 +#define tc_fxfirst_bit_set_bv_disp 0xF4 +#define tc_fxlength_bv_disp 0xF0 +#define tc_generate_inspector_information_disp 0x110 +#define tc_generate_procedure_source_information_disp 0x114 +#define tc_generate_profile_forms_disp 0x118 #define tc_guardian_entries_disp 0x7C -#define tc_instr_counter_disp 0x120 -#define tc_keyboard_interrupt_pending_disp 0xC8 -#define tc_meta_level_disp 0x104 -#define tc_null_immutable_bytevector_disp 0xFC -#define tc_null_immutable_fxvector_disp 0xF8 -#define tc_null_immutable_string_disp 0x100 -#define tc_null_immutable_vector_disp 0xF4 -#define tc_optimize_level_disp 0x114 -#define tc_parameters_disp 0x130 +#define tc_instr_counter_disp 0x13C +#define tc_keyboard_interrupt_pending_disp 0xCC +#define tc_lz4_out_buffer_disp 0x138 +#define tc_meta_level_disp 0x108 +#define tc_null_immutable_bytevector_disp 0x100 +#define tc_null_immutable_fxvector_disp 0xFC +#define tc_null_immutable_string_disp 0x104 +#define tc_null_immutable_vector_disp 0xF8 +#define tc_optimize_level_disp 0x11C +#define tc_parameters_disp 0x14C #define tc_random_seed_disp 0x88 #define tc_real_eap_disp 0x38 #define tc_ret_disp 0x20 #define tc_scheme_stack_disp 0x90 #define tc_scheme_stack_size_disp 0x9C -#define tc_sfd_disp 0xE0 +#define tc_sfd_disp 0xE4 #define tc_sfp_disp 0xC #define tc_signal_interrupt_pending_disp 0xC4 +#define tc_signal_interrupt_queue_disp 0xC8 #define tc_something_pending_disp 0xB8 #define tc_stack_cache_disp 0x94 #define tc_stack_link_disp 0x98 -#define tc_subset_mode_disp 0x118 -#define tc_suppress_primitive_inlining_disp 0x11C -#define tc_target_machine_disp 0xE8 +#define tc_subset_mode_disp 0x120 +#define tc_suppress_primitive_inlining_disp 0x124 +#define tc_target_machine_disp 0xEC #define tc_td_disp 0x34 -#define tc_threadno_disp 0xCC +#define tc_threadno_disp 0xD0 #define tc_timer_ticks_disp 0xBC #define tc_trap_disp 0x24 #define tc_ts_disp 0x30 @@ -629,6 +652,7 @@ #define type_fixnum 0x0 #define type_flonum 0x2 #define type_fxvector 0x3 +#define type_guardian_code 0x83E #define type_immediate 0x6 #define type_immutable_box 0x8E #define type_immutable_bytevector 0x5 @@ -677,6 +701,9 @@ #define typedef_u8 "unsigned char" #define typedef_uptr "unsigned int" #define typemod 0x8 +#define unactivate_mode_deactivate 0x1 +#define unactivate_mode_destroy 0x2 +#define unactivate_mode_noop 0x0 #define unaligned_floats 1 #define unaligned_integers 1 #define underflow_limit 0x40 @@ -687,41 +714,34 @@ #define vector_length_offset 0x3 #define vector_type_disp 0x1 #define virtual_register_count 0x10 -#define visit_tag 0x0 #define wchar_bits 0x20 /* constants from declare-c-entries */ -#define CENTRY_Scall_bytevector 22 -#define CENTRY_Scall_double 26 -#define CENTRY_Scall_fixnum 23 -#define CENTRY_Scall_fptr 21 -#define CENTRY_Scall_int32 24 -#define CENTRY_Scall_int64 28 -#define CENTRY_Scall_ptr 20 -#define CENTRY_Scall_single 27 -#define CENTRY_Scall_uns32 25 -#define CENTRY_Scall_uns64 29 -#define CENTRY_Scall_void 30 -#define CENTRY_Sreturn 19 -#define CENTRY_foreign_entry 14 -#define CENTRY_get_more_room 16 +#define CENTRY_Scall_any_results 24 +#define CENTRY_Scall_one_result 23 +#define CENTRY_Sreturn 22 +#define CENTRY_activate_thread 11 +#define CENTRY_deactivate_thread 12 +#define CENTRY_foreign_entry 17 +#define CENTRY_get_more_room 19 #define CENTRY_get_thread_context 1 #define CENTRY_handle_apply_overflood 2 -#define CENTRY_handle_arg_error 13 +#define CENTRY_handle_arg_error 16 #define CENTRY_handle_docall_error 3 -#define CENTRY_handle_mvlet_error 12 +#define CENTRY_handle_mvlet_error 15 #define CENTRY_handle_nonprocedure_symbol 6 #define CENTRY_handle_overflood 5 #define CENTRY_handle_overflow 4 -#define CENTRY_handle_values_error 11 -#define CENTRY_install_library_entry 15 -#define CENTRY_instantiate_code_object 18 +#define CENTRY_handle_values_error 14 +#define CENTRY_install_library_entry 18 +#define CENTRY_instantiate_code_object 21 #define CENTRY_raw_collect_cond 9 #define CENTRY_raw_tc_mutex 10 -#define CENTRY_scan_remembered_set 17 +#define CENTRY_scan_remembered_set 20 #define CENTRY_split_and_resize 8 #define CENTRY_thread_context 0 #define CENTRY_thread_list 7 +#define CENTRY_unactivate_thread 13 /* displacements for records */ #define eq_hashtable_rtd_disp 1 @@ -894,6 +914,8 @@ #define THREADTC(x) (*((uptr *)((uptr)(x)+5))) /* thread-context data */ +#define DSTBV(x) (*((ptr *)((uptr)(x)+336))) +#define SRCBV(x) (*((ptr *)((uptr)(x)+340))) #define U(x) (*((ptr *)((uptr)(x)+164))) #define V(x) (*((ptr *)((uptr)(x)+168))) #define W(x) (*((ptr *)((uptr)(x)+172))) @@ -902,51 +924,58 @@ #define AC0(x) (*((void* *)((uptr)(x)+4))) #define AC1(x) (*((void* *)((uptr)(x)+8))) #define ACTIVE(x) (*((I32 *)((uptr)(x)+140))) -#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+296))) +#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+324))) #define AP(x) (*((void* *)((uptr)(x)+24))) #define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) -#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+220))) +#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+224))) #define CCHAIN(x) (*((ptr *)((uptr)(x)+128))) #define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+132))) -#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+264))) +#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+268))) +#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+304))) +#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+308))) #define CP(x) (*((void* *)((uptr)(x)+16))) -#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+216))) -#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+208))) -#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+228))) -#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+220))) +#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+212))) +#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+232))) +#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+216))) +#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+296))) +#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+300))) #define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+192))) #define EAP(x) (*((void* *)((uptr)(x)+28))) #define ESP(x) (*((void* *)((uptr)(x)+20))) -#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+240))) -#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+236))) -#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+268))) -#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+272))) +#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+244))) +#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+240))) +#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+272))) +#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+276))) +#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+280))) #define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+124))) -#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+288))) -#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+200))) -#define METALEVEL(x) (*((ptr *)((uptr)(x)+260))) -#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+252))) -#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+248))) -#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+256))) -#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+244))) -#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+276))) -#define PARAMETERS(x) (*((ptr *)((uptr)(x)+304))) +#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+316))) +#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+204))) +#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+312))) +#define METALEVEL(x) (*((ptr *)((uptr)(x)+264))) +#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+256))) +#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+252))) +#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+260))) +#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+248))) +#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+284))) +#define PARAMETERS(x) (*((ptr *)((uptr)(x)+332))) #define RANDOMSEED(x) (*((U32 *)((uptr)(x)+136))) #define REAL_EAP(x) (*((void* *)((uptr)(x)+56))) #define RET(x) (*((void* *)((uptr)(x)+32))) #define SCHEMESTACK(x) (*((void* *)((uptr)(x)+144))) #define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+156))) -#define SFD(x) (*((ptr *)((uptr)(x)+224))) +#define SFD(x) (*((ptr *)((uptr)(x)+228))) #define SFP(x) (*((void* *)((uptr)(x)+12))) #define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+196))) +#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+200))) #define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+184))) #define STACKCACHE(x) (*((ptr *)((uptr)(x)+148))) #define STACKLINK(x) (*((ptr *)((uptr)(x)+152))) -#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+280))) -#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+284))) -#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+232))) +#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+288))) +#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+292))) +#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+236))) #define TD(x) (*((void* *)((uptr)(x)+52))) -#define THREADNO(x) (*((ptr *)((uptr)(x)+204))) +#define THREADNO(x) (*((ptr *)((uptr)(x)+208))) #define TIMERTICKS(x) (*((ptr *)((uptr)(x)+188))) #define TRAP(x) (*((void* *)((uptr)(x)+36))) #define TS(x) (*((void* *)((uptr)(x)+48))) @@ -958,5 +987,5 @@ #define VIRTREG(x,i) (((ptr *)((uptr)(x)+60))[i]) /* library entries we access from C code */ -#define library_nonprocedure_code 150 -#define library_dounderflow 152 +#define library_nonprocedure_code 152 +#define library_dounderflow 154 Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ti3osx/petite.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ti3osx/petite.boot differ Binary files /tmp/tmpbUEGtt/L8kInfQCo5/chezscheme-9.5+dfsg/boot/ti3osx/scheme.boot and /tmp/tmpbUEGtt/b5quRSSzwL/chezscheme-9.5.4+dfsg/boot/ti3osx/scheme.boot differ diff -Nru chezscheme-9.5+dfsg/boot/ti3osx/scheme.h chezscheme-9.5.4+dfsg/boot/ti3osx/scheme.h --- chezscheme-9.5+dfsg/boot/ti3osx/scheme.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/boot/ti3osx/scheme.h 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -/* scheme.h for Chez Scheme Version 9.5 (ti3osx) */ +/* scheme.h for Chez Scheme Version 9.5.4 (ti3osx) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ @@ -40,7 +40,7 @@ #endif /* Chez Scheme Version and machine type */ -#define VERSION "9.5" +#define VERSION "9.5.4" #define MACHINE_TYPE "ti3osx" /* All Scheme objects are of type ptr. Type iptr and */ @@ -147,6 +147,7 @@ EXPORT ptr Smake_uninitialized_string PROTO((iptr)); EXPORT ptr Sstring PROTO((const char *)); EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); +EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); EXPORT ptr Sbox PROTO((ptr)); EXPORT ptr Sinteger PROTO((iptr)); EXPORT ptr Sunsigned PROTO((uptr)); @@ -182,6 +183,7 @@ EXPORT void Sset_verbose PROTO((int)); EXPORT void Sscheme_init PROTO((void (*)(void))); EXPORT void Sregister_boot_file PROTO((const char *)); +EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); EXPORT void Sregister_heap_file PROTO((const char *)); EXPORT void Scompact_heap PROTO((void)); EXPORT void Ssave_heap PROTO((const char *, int)); diff -Nru chezscheme-9.5+dfsg/BUILDING chezscheme-9.5.4+dfsg/BUILDING --- chezscheme-9.5+dfsg/BUILDING 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/BUILDING 2020-08-31 02:35:12.000000000 +0000 @@ -1,5 +1,5 @@ -Building Chez Scheme Version 9.5 -Copyright 1984-2017 Cisco Systems, Inc. +Building Chez Scheme Version 9.5.4 +Copyright 1984-2020 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40,8 +40,19 @@ * GNU Make * gcc -* Header files and libraries for ncurses -* Header files and libraries for X windows +* Header files and libraries for ncurses [unless --disable-curses] +* Header files and libraries for X windows [unless --disable-x11] +* Header files and libraries for uuid + +Uninstalling on Unix-like systems is as simple as running: + +sudo make uninstall + +BUILDING VERSION 9.5 AND EARLIER + +If the environment variable CHEZSCHEMELIBDIRS is set, please unset +it before running make. Depending on the variable's value, it can +cause the build process to fail. DETAILS @@ -64,7 +75,7 @@ if successful, creates several files and directories: * The directory nanopass containing the Nanopass Infrastructure, - retrieved from github. + retrieved from GitHub. * A make file, Makefile, in the root (top level) directory. @@ -75,8 +86,12 @@ * Within the workarea, the files Makefile, Mf-install, and Mf-boot. -'./configure' supports various options, among which is --help, which -can be used to list the supported options. +'./configure' recognizes various options for controlling the type +of build and the installation location. For example, '--threads' +requests a build with support for native threads, '--32' requests +a 32-bit build, and '--installprefix ' specifies the +installation root. './configure --help' prints the supported +options. The make file supports several targets: @@ -91,9 +106,29 @@ fails. This should not fail unless the distributed boot files are out of sync with the sources. - To run Chez Scheme without installing, you need to tell the executable - where to find the boot files. This can be done via command-line - arguments, e.g.: + When you make a modification to the system that causes the C side to + get out of sync with the Scheme side so that the build fails, try + the following from $W if you have a recent version of Chez Scheme + installed in your path: + + make -C s clean all patchfile=patch Scheme=scheme SCHEMEHEAPDIRS={see below} + make build + + Set SCHEMEHEAPDIRS to /usr/lib/csv%v/%m:/usr/local/lib/csv%v/%m on + Unix-like systems and to %x/../../boot/%m on Windows systems. + + Alternatively, if you have a build before the changes at full path + , use + + make from-orig ORIG= + + To run Chez Scheme without installing, you need to tell the + executable where to find the boot files. The run target of the + makefile will do that + + make run + + or this can be done manually via command-line arguments, e.g.: $W/bin/$M/scheme -b $W/boot/$M/petite.boot -b $W/boot/$M/scheme.boot @@ -112,9 +147,12 @@ is overridden via an argument to ./configure, $W is the same as $M.) 'sudo make install' - runs the build plus installs the resulting executable, boot files, + runs the build plus installs the resulting executables, boot files, example files, and manual pages. +'sudo make uninstall' + uninstalls the executables, boot files, example files, and manual pages. + 'make test' runs the build plus runs a set of test programs in various different ways, e.g., with different compiler options. It can take 30 minutes @@ -151,7 +189,7 @@ can take 5 minutes or more. 'make bootfiles' builds boot files for each machine type for which - a subdirectory exists in the top-level boot directory. to build + a subdirectory exists in the top-level boot directory. To build for a supported machine type that isn't built by default, simply add the appropriate subdirectory, i.e., 'mkdir boot/$M', where M is the machine type, before running 'make bootfiles'. You can @@ -165,23 +203,58 @@ 'make distclean' removes nanopass, Makefile, and all workareas. +OTHER UNIX VARIANTS + +To build on Unix variants other than Linux and OS X, you will first +need to build boot files on a Linux or OS X machine. On that machine, +after building Chez Scheme, create boot files for the target machine + with: + + make boot XM= + +Copy the generated boot/ directory to the target machine, +adding to or replacing the boot directory with pre-built boot files +there, and then build as on Linux. + +Remember to use gmake if make is not GNU make. If you run into linker +trouble, try running configure with --libkernel so that the build +avoids running ld directly. + +On OpenBSD, Chez Scheme must be built and installed on a filesystem +that is mounted with wxallowed. + +On NetBSD, note that the makefiles run "paxctl +m" to enable WX pages +(i.e., pages that have both write and execute enabled). + WINDOWS -Building Chez Scheme under 64-bit Windows with Cygwin or Bash/WSL -follows the instructions above, except that 'make install' is not -supported, and the 'OS' environment variable must be set to -'Windows_NT' on Bash/WSL (to indicate a build for Windows, as opposed -to a build for Linux on Windows): +Building Chez Scheme under 64-bit Windows with Bash/WSL, MinGW/MSYS, +or Cygwin follows the instructions above, except that 'make install' +and 'make uninstall' are not supported. Alternatively, the main Chez +Scheme executable can be built from the Windows command line or +cross-compiled using MinGW as described further below. + +On Bash/WSL, the build directory must be in a location with a Windows +path such as /mnt/c, and the 'OS' environment variable must be set to +'Windows_NT' to indicate a build for Windows, as opposed to a build +for Linux on Windows: env OS=Windows_NT ./configure env OS=Windows_NT make Prerequisites: -* Cygwin or Bash/WSL with bash, grep, make, sed, etc. -* Microsoft Visual Studio 2017 or 2015 +* Bash/WSL, MinGW/MSYS, or Cygwin with bash, git, grep, make, sed, etc. +* Microsoft Visual Studio 2019, 2017, or 2015 * WiX Toolset (for making an install) +Be sure that git config core.autocrlf is set to false. + +If you're using Visual Studio 2019, install "Desktop development with C++" +on the "Workloads" tabs and the "C++ 2019 Redistributable MSMs" on the +"Individual components" tab under the "Compilers, build tools, and runtimes" +section. + To run Chez Scheme or Petite Chez Scheme from a Windows command prompt, set PATH: @@ -204,7 +277,7 @@ This will create workareas and compile binaries for the a6nt, i3nt, ta6nt, and ti3nt configurations and then include them in a single -Windows installer package Chez Scheme.msi. The package also includes +Windows installer package Chez Scheme.exe. The package also includes example files and the redistributable Microsoft Visual C++ run-time libraries. @@ -219,7 +292,7 @@ An alternative that uses the Windows API can be found at: -https://github.com/win-iconv/win-iconv +https://github.com/burgerrg/win-iconv/releases If the DLL is not present, the iconv tests will fail. No other tests should be affected. @@ -229,3 +302,37 @@ Library. Use 'make test' described above to run the tests. + +WINDOWS EXECUTABLE VIA COMMAND PROMPT + +To build the Chez Scheme executable using Microsoft Visual Studio, +first set up command-line tools. The c\vs.bat script can help if you +supply amd64 for a 64-bit build or x86 for a 32-bit build: + + c\vs.bat amd64 + +Then, run c\build/bat with a machine name, either ta6nt (64-bit +threaded), a6nt (64-bit non-threaded), ti3nt (32-bit threaded), or +i3nt (32-bit non-threaded): + + c\build.bat ta6nt + +The resulting executable in \bin\ relies on +bootfiles in ..\boot\ relative to the executable. + +CROSS-COMPILING THE WINDOWS EXECUTABLE + +To cross-compile the main Chez Scheme executable for Windows using +MinGW, specify suitable build tools to configure, perhaps using +--toolprefix= like this: + + ./configure -m=ta6nt --threads --toolprefix=x86_64-w64-mingw32- + +Then, make with c/Mf- while supplying cross=t and o=o, +possibly like this: + + (cd ta6nt/c && make -f Mf-ta6nt cross=t o=o) + +The executable is written to /bin/, and it should be +installed with bootfiles in ../boot// relative to the +executable. diff -Nru chezscheme-9.5+dfsg/c/alloc.c chezscheme-9.5.4+dfsg/c/alloc.c --- chezscheme-9.5+dfsg/c/alloc.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/alloc.c 2020-08-31 02:35:12.000000000 +0000 @@ -24,13 +24,14 @@ if (S_boot_time) { /* reset the allocation tables */ - for (s = 0; s <= max_real_space; s++) { - for (g = 0; g <= static_generation; g++) { - S_G.base_loc[s][g] = FIX(0); - S_G.first_loc[s][g] = FIX(0); - S_G.next_loc[s][g] = FIX(0); - S_G.bytes_left[s][g] = 0; - S_G.bytes_of_space[s][g] = 0; + for (g = 0; g <= static_generation; g++) { + S_G.bytes_of_generation[g] = 0; + for (s = 0; s <= max_real_space; s++) { + S_G.base_loc[g][s] = FIX(0); + S_G.first_loc[g][s] = FIX(0); + S_G.next_loc[g][s] = FIX(0); + S_G.bytes_left[g][s] = 0; + S_G.bytes_of_space[g][s] = 0; } } @@ -40,6 +41,7 @@ } S_G.collect_trip_bytes = default_collect_trip_bytes; + S_G.g0_bytes_after_last_gc = 0; /* set to final value in prim.c when known */ S_protect(&S_G.nonprocedure_code); @@ -131,11 +133,12 @@ g = gmin; while (g <= gmax) { for (s = smin; s <= smax; s++) { + ptr next_loc = S_G.next_loc[g][s]; /* add in bytes previously recorded */ - n += S_G.bytes_of_space[s][g]; + n += S_G.bytes_of_space[g][s]; /* add in bytes in active segments */ - if (S_G.next_loc[s][g] != FIX(0)) - n += (char *)S_G.next_loc[s][g] - (char *)S_G.base_loc[s][g]; + if (next_loc != FIX(0)) + n += (char *)next_loc - (char *)S_G.base_loc[g][s]; } if (g == S_G.max_nonstatic_generation) g = static_generation; @@ -150,38 +153,8 @@ return Sunsigned(n); } -ptr S_thread_get_more_room(t, n) iptr t; iptr n; { - ptr x; - tc_mutex_acquire() - find_room(space_new, 0, t, n, x); - tc_mutex_release() - return x; -} - static void maybe_fire_collector() { - ISPC s; - uptr bytes, fudge; - - bytes = 0; - - for (s = 0; s <= max_real_space; s += 1) { - /* bytes already accounted for */ - bytes += S_G.bytes_of_space[s][0]; - /* bytes in current block of segments */ - if (S_G.next_loc[s][0] != FIX(0)) - bytes += (char *)S_G.next_loc[s][0] - (char *)S_G.base_loc[s][0]; - } - - /* arbitrary fudge factor to account for space we may not be using yet - arbitrary because: - - we assume each thread has not yet used half it's allocation area - - we assume each thread has not yet used half its stack - - some threads' stacks may not be as much as the default size - */ - fudge = (default_stack_size / 2) + S_nthreads * (bytes_per_segment / 2); - bytes = bytes > fudge ? bytes - fudge : 0; - - if (bytes >= S_G.collect_trip_bytes) + if (S_G.bytes_of_generation[0] - S_G.g0_bytes_after_last_gc >= S_G.collect_trip_bytes) S_fire_collector(); } @@ -214,22 +187,24 @@ if (old == FIX(0)) { /* first object of this space */ - S_G.first_loc[s][g] = new; + S_G.first_loc[g][s] = new; } else { + uptr bytes = (char *)old - (char *)S_G.base_loc[g][s]; /* increment bytes_allocated by the closed-off partial segment */ - S_G.bytes_of_space[s][g] += (char *)old - (char *)S_G.base_loc[s][g]; + S_G.bytes_of_space[g][s] += bytes; + S_G.bytes_of_generation[g] += bytes; /* lay down an end-of-segment marker */ *(ptr*)old = forward_marker; *((ptr*)old + 1) = new; } /* base address of current block of segments to track amount of allocation */ - S_G.base_loc[s][g] = new; + S_G.base_loc[g][s] = new; - S_G.next_loc[s][g] = (ptr)((uptr)new + n); - S_G.bytes_left[s][g] = (nsegs * bytes_per_segment - n) - 2 * ptr_bytes; + S_G.next_loc[g][s] = (ptr)((uptr)new + n); + S_G.bytes_left[g][s] = (nsegs * bytes_per_segment - n) - 2 * ptr_bytes; - if (g == 0) maybe_fire_collector(); + if (g == 0 && S_pants_down == 1) maybe_fire_collector(); S_pants_down -= 1; return new; @@ -260,9 +235,10 @@ seg = S_find_segments(space_new, 0, 1); */ - S_G.bytes_of_space[space_new][0] += bytes_per_segment; + S_G.bytes_of_space[0][space_new] += bytes_per_segment; + S_G.bytes_of_generation[0] += bytes_per_segment; - maybe_fire_collector(); + if (S_pants_down == 1) maybe_fire_collector(); AP(tc) = build_ptr(seg, 0); REAL_EAP(tc) = EAP(tc) = (ptr)((uptr)AP(tc) + bytes_per_segment); @@ -271,22 +247,22 @@ } -FORCEINLINE void mark_segment_dirty(seginfo *si, IGEN from_g) { - IGEN to_g = si->min_dirty_byte; - if (to_g != 0) { +FORCEINLINE void mark_segment_dirty(seginfo *si, IGEN from_g, IGEN to_g) { + IGEN old_to_g = si->min_dirty_byte; + if (to_g < old_to_g) { seginfo **pointer_to_first, *oldfirst; - if (to_g != 0xff) { + if (old_to_g != 0xff) { seginfo *next = si->dirty_next, **prev = si->dirty_prev; /* presently on some other list, so remove */ *prev = next; if (next != NULL) next->dirty_prev = prev; } - oldfirst = *(pointer_to_first = &DirtySegments(from_g, 0)); + oldfirst = *(pointer_to_first = &DirtySegments(from_g, to_g)); *pointer_to_first = si; si->dirty_prev = pointer_to_first; si->dirty_next = oldfirst; if (oldfirst != NULL) oldfirst->dirty_prev = &si->dirty_next; - si->min_dirty_byte = 0; + si->min_dirty_byte = to_g; } } @@ -297,11 +273,22 @@ IGEN from_g = si->generation; if (from_g != 0) { si->dirty_bytes[((uptr)loc >> card_offset_bits) & ((1 << segment_card_offset_bits) - 1)] = 0; - mark_segment_dirty(si, from_g); + mark_segment_dirty(si, from_g, 0); } } } +void S_mark_card_dirty(uptr card, IGEN to_g) { + uptr loc = card << card_offset_bits; + uptr seg = addr_get_segment(loc); + seginfo *si = SegInfo(seg); + uptr cardno = card & ((1 << segment_card_offset_bits) - 1); + if (to_g < si->dirty_bytes[cardno]) { + si->dirty_bytes[cardno] = to_g; + mark_segment_dirty(si, si->generation, to_g); + } +} + /* scan remembered set from P to ENDP, transfering to dirty vector */ void S_scan_dirty(ptr **p, ptr **endp) { uptr this, last; @@ -324,7 +311,7 @@ IGEN from_g = si->generation; if (from_g != 0) { si->dirty_bytes[((uptr)loc >> card_offset_bits) & ((1 << segment_card_offset_bits) - 1)] = 0; - if (this >> segment_card_offset_bits != last >> segment_card_offset_bits) mark_segment_dirty(si, from_g); + if (this >> segment_card_offset_bits != last >> segment_card_offset_bits) mark_segment_dirty(si, from_g, 0); } last = this; } @@ -353,7 +340,9 @@ AP(tc) = (ptr)ap; EAP(tc) = (ptr)eap; } else { - S_G.bytes_of_space[space_new][0] -= eap - ap; + uptr bytes = eap - ap; + S_G.bytes_of_space[0][space_new] -= bytes; + S_G.bytes_of_generation[0] -= bytes; S_reset_allocation_pointer(tc); } @@ -369,49 +358,60 @@ void S_get_more_room() { ptr tc = get_thread_context(); - ptr xp; uptr ap, eap, real_eap, type, size; + ptr xp; uptr ap, type, size; - tc_mutex_acquire() + xp = XP(tc); + if ((type = TYPEBITS(xp)) == 0) type = typemod; + ap = (uptr)UNTYPE(xp, type); + size = (uptr)((iptr)AP(tc) - (iptr)ap); + + XP(tc) = S_get_more_room_help(tc, ap, type, size); +} + +ptr S_get_more_room_help(ptr tc, uptr ap, uptr type, uptr size) { + ptr x; uptr eap, real_eap; - ap = (uptr)AP(tc); eap = (uptr)EAP(tc); real_eap = (uptr)REAL_EAP(tc); - xp = XP(tc); - if ((type = TYPEBITS(xp)) == 0) type = typemod; - size = ap - (iptr)UNTYPE(xp,type); - ap -= size; + tc_mutex_acquire() S_scan_dirty((ptr **)eap, (ptr **)real_eap); eap = real_eap; if (eap - ap >= size) { - XP(tc) = TYPE(ap, type); + x = TYPE(ap, type); ap += size; if (eap - ap > alloc_waste_maximum) { AP(tc) = (ptr)ap; EAP(tc) = (ptr)eap; } else { - S_G.bytes_of_space[space_new][0] -= eap - ap; + uptr bytes = eap - ap; + S_G.bytes_of_space[0][space_new] -= bytes; + S_G.bytes_of_generation[0] -= bytes; S_reset_allocation_pointer(tc); } } else if (eap - ap > alloc_waste_maximum) { AP(tc) = (ptr)ap; EAP(tc) = (ptr)eap; - find_room(space_new, 0, type, size, XP(tc)); + find_room(space_new, 0, type, size, x); } else { - S_G.bytes_of_space[space_new][0] -= eap - ap; + uptr bytes = eap - ap; + S_G.bytes_of_space[0][space_new] -= bytes; + S_G.bytes_of_generation[0] -= bytes; S_reset_allocation_pointer(tc); ap = (uptr)AP(tc); if (size + alloc_waste_maximum <= (uptr)EAP(tc) - ap) { - XP(tc) = TYPE(ap, type); + x = TYPE(ap, type); AP(tc) = (ptr)(ap + size); } else { - find_room(space_new, 0, type, size, XP(tc)); + find_room(space_new, 0, type, size, x); } } tc_mutex_release() + + return x; } /* S_cons_in is always called with mutex */ @@ -657,64 +657,6 @@ return p; } -ptr S_ifile(icount, name, fd, info, flags, ilast, ibuf) - iptr flags, icount; char *ilast; iptr fd; ptr name, ibuf, info; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room(tc, type_typed_object, size_port, p); - PORTTYPE(p) = flags | type_port; - PORTNAME(p) = name; - /* PORTHANDLER is really a ptr only when PORTTYPE & PORT_FLAG_PROC_HANDLER is true */ - PORTHANDLER(p) = (ptr)fd; - PORTINFO(p) = info; - PORTICNT(p) = icount; - PORTILAST(p) = (ptr)ilast; - PORTIBUF(p) = ibuf; - /* leave output buffer and last uninitialized for input only ports */ - PORTOCNT(p) = 0; - return p; -} - -ptr S_ofile(ocount, name, fd, info, flags, olast, obuf) - iptr flags, ocount; char *olast; iptr fd; ptr name, obuf, info; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room(tc, type_typed_object, size_port, p); - PORTTYPE(p) = flags | type_port; - PORTNAME(p) = name; - /* PORTHANDLER is really a ptr only when PORTTYPE & PORT_FLAG_PROC_HANDLER is true */ - PORTHANDLER(p) = (ptr)fd; - PORTINFO(p) = info; - PORTOCNT(p) = ocount; - PORTOLAST(p) = (ptr)olast; - PORTOBUF(p) = obuf; - /* leave input buffer and last uninitialized for output only ports */ - PORTICNT(p) = 0; - return p; -} - -ptr S_iofile(icount, ocount, name, fd, info, flags, ilast, ibuf, olast, obuf) - iptr flags, icount, ocount; char *ilast, *olast; iptr fd; ptr name, ibuf, obuf, info; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room(tc, type_typed_object, size_port, p); - PORTTYPE(p) = flags | type_port; - PORTNAME(p) = name; - /* PORTHANDLER is really a ptr only when PORTTYPE & PORT_FLAG_PROC_HANDLER is true */ - PORTHANDLER(p) = (ptr)fd; - PORTINFO(p) = info; - PORTICNT(p) = icount; - PORTILAST(p) = (ptr)ilast; - PORTIBUF(p) = ibuf; - PORTOCNT(p) = ocount; - PORTOLAST(p) = (ptr)olast; - PORTOBUF(p) = obuf; - return p; -} - /* S_string returns a new string of length n. If s is not NULL, it is * copied into the new string. If n < 0, then s must be non-NULL, * and the length of s (by strlen) determines the length of the string */ @@ -756,8 +698,126 @@ return p; } -ptr S_bignum(n, sign) iptr n; IBOOL sign; { - ptr tc = get_thread_context(); +ptr Sstring_utf8(s, n) const char *s; iptr n; { + const char* u8; + iptr cc, d, i, n8; + ptr p, tc; + + if (n < 0) n = strlen(s); + + if (n == 0) return S_G.null_string; + + /* determine code point count cc */ + u8 = s; + n8 = n; + cc = 0; + while (n8 > 0) { + unsigned char b1 = *(const unsigned char*)u8++; + n8--; + cc++; + if ((b1 & 0x80) == 0) + ; + else if ((b1 & 0x40) == 0) + ; + else if ((b1 & 0x20) == 0) { + if ((n8 >= 1) && ((*u8 & 0xc0) == 0x80)) { + u8++; + n8--; + } + } else if ((b1 & 0x10) == 0) { + if ((n8 >= 1) && ((*u8 & 0xc0) == 0x80)) { + u8++; + n8--; + if ((n8 >= 1) && ((*u8 & 0xc0) == 0x80)) { + u8++; + n8--; + } + } + } else if ((b1 & 0x08) == 0) { + if ((n8 >= 1) && ((*u8 & 0xc0) == 0x80)) { + u8++; + n8--; + if ((n8 >= 1) && ((*u8 & 0xc0) == 0x80)) { + u8++; + n8--; + if ((n8 >= 1) && ((*u8 & 0xc0) == 0x80)) { + u8++; + n8--; + } + } + } + } + } + + if ((uptr)cc > (uptr)maximum_string_length) + S_error("", "invalid string size request"); + + tc = get_thread_context(); + d = size_string(cc); + thread_find_room(tc, type_typed_object, d, p); + STRTYPE(p) = (cc << string_length_offset) | type_string; + + /* fill the string */ + u8 = s; + n8 = n; + i = 0; + while (n8 > 0) { + unsigned char b1 = *u8++; + int c = 0xfffd; + n8--; + if ((b1 & 0x80) == 0) + c = b1; + else if ((b1 & 0x40) == 0) + ; + else if ((b1 & 0x20) == 0) { + unsigned char b2; + if ((n8 >= 1) && (((b2 = *u8) & 0xc0) == 0x80)) { + int x = ((b1 & 0x1f) << 6) | (b2 & 0x3f); + u8++; + n8--; + if (x >= 0x80) + c = x; + } + } else if ((b1 & 0x10) == 0) { + unsigned char b2; + if ((n8 >= 1) && (((b2 = *u8) & 0xc0) == 0x80)) { + unsigned char b3; + u8++; + n8--; + if ((n8 >= 1) && (((b3 = *u8) & 0xc0) == 0x80)) { + int x = ((b1 & 0x0f) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f); + u8++; + n8--; + if ((x >= 0x800) && ((x < 0xd800) || (x > 0xdfff))) + c = x; + } + } + } else if ((b1 & 0x08) == 0) { + unsigned char b2; + if ((n8 >= 1) && (((b2 = *u8) & 0xc0) == 0x80)) { + unsigned char b3; + u8++; + n8--; + if ((n8 >= 1) && (((b3 = *u8) & 0xc0) == 0x80)) { + unsigned char b4; + u8++; + n8--; + if ((n8 >= 1) && (((b4 = *u8) & 0xc0) == 0x80)) { + int x = ((b1 & 0x07) << 18) | ((b2 & 0x3f) << 12) | ((b3 & 0x3f) << 6) | (b4 & 0x3f); + u8++; + n8--; + if ((x >= 0x10000) && (x <= 0x10ffff)) + c = x; + } + } + } + } + Sstring_set(p, i++, c); + } + return p; +} + +ptr S_bignum(tc, n, sign) ptr tc; iptr n; IBOOL sign; { ptr p; iptr d; if ((uptr)n > (uptr)maximum_bignum_length) @@ -793,3 +853,11 @@ RELOCSIZE(p) = n; return p; } + +ptr S_weak_cons(ptr car, ptr cdr) { + ptr p; + tc_mutex_acquire(); + p = S_cons_in(space_weakpair, 0, car, cdr); + tc_mutex_release(); + return p; +} diff -Nru chezscheme-9.5+dfsg/c/build.bat chezscheme-9.5.4+dfsg/c/build.bat --- chezscheme-9.5+dfsg/c/build.bat 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/build.bat 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,30 @@ +@echo off +setlocal + +set M=%1 +set WORKAREA=%M% + +if "%WORKAREA%"=="" goto needargument + +xcopy /s /i /y c %WORKAREA%\c +xcopy /s /i /y s %WORKAREA%\s +xcopy /s /i /y boot %WORKAREA%\boot +xcopy /s /i /y zlib %WORKAREA%\zlib +xcopy /s /i /y lz4 %WORKAREA%\lz4 + +mkdir %WORKAREA%\bin\%M% + +echo #define SCHEME_SCRIPT "scheme-script" > %WORKAREA%\c\config.h + +cd %WORKAREA%\c +nmake Makefile.%M% +cd ..\.. + +goto donebuilding + +:needargument + +echo Please supply the machine name as an argument +exit /B 1 + +:donebuilding diff -Nru chezscheme-9.5+dfsg/c/compress-io.c chezscheme-9.5.4+dfsg/c/compress-io.c --- chezscheme-9.5+dfsg/c/compress-io.c 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/compress-io.c 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,672 @@ +/* compress-io.c + * Copyright 1984-2019 Cisco Systems, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Dispatch to zlib or LZ4 */ + +#include "system.h" +#include "zlib.h" +#include "lz4.h" +#include "lz4frame.h" +#include "lz4hc.h" +#include +#include + +#ifdef WIN32 +#include +# define WIN32_IZE(id) _ ## id +# define GLZ_O_BINARY O_BINARY +#else +# define WIN32_IZE(id) id +# define GLZ_O_BINARY 0 +#endif + +/* the value of LZ4_OUTPUT_PORT_IN_BUFFER_SIZE was determined + through experimentation on an intel linux server and an intel + osx laptop. smaller sizes result in significantly worse compression + of object files, and larger sizes don't have much beneficial effect. + don't increase the output-port in-buffer size unless you're sure + it reduces object-file size or reduces compression time + significantly. don't decrease it unless you're sure it doesn't + increase object-file size significnatly. one buffer of size + LZ4_OUTPUT_PORT_IN_BUFFER_SIZE is allocated per lz4-compressed + output port. another buffer of a closely related size is allocated + per thread. */ +#define LZ4_OUTPUT_PORT_IN_BUFFER_SIZE (1 << 18) + +/* the values we choose for LZ4_INPUT_PORT_IN_BUFFER_SIZE and + LZ4_INPUT_PORT_OUT_BUFFER_SIZE don't seem to make much difference + in decompression speed, so we keep them fairly small. one buffer + of size LZ4_INPUT_PORT_IN_BUFFER_SIZE and one buffer of size + LZ4_INPUT_PORT_OUT_BUFFER_SIZE are allocated per lz4-compressed + input port. */ +#define LZ4_INPUT_PORT_IN_BUFFER_SIZE (1 << 12) +#define LZ4_INPUT_PORT_OUT_BUFFER_SIZE (1 << 14) + +typedef struct lz4File_out_r { + LZ4F_preferences_t preferences; + INT fd; + INT out_buffer_size; + INT in_pos; + INT err; + size_t stream_pos; + char in_buffer[LZ4_OUTPUT_PORT_IN_BUFFER_SIZE]; +} lz4File_out; + +typedef struct lz4File_in_r { + INT fd; + LZ4F_dctx *dctx; + INT in_pos, in_len, out_pos, out_len; + INT frame_ended; + INT err; + size_t stream_pos; + off_t init_pos; + char in_buffer[LZ4_INPUT_PORT_IN_BUFFER_SIZE]; + char out_buffer[LZ4_INPUT_PORT_OUT_BUFFER_SIZE]; +} lz4File_in; + +typedef struct sized_buffer_r { + INT size; + char buffer[0]; +} sized_buffer; + +/* local functions */ +static glzFile glzdopen_output_gz(INT fd, INT compress_level); +static glzFile glzdopen_output_lz4(INT fd, INT compress_level); +static glzFile glzdopen_input_gz(INT fd); +static glzFile glzdopen_input_lz4(INT fd, off_t init_pos); +static INT glzread_lz4(lz4File_in *lz4, void *buffer, UINT count); +static INT glzemit_lz4(lz4File_out *lz4, void *buffer, UINT count); +static INT glzwrite_lz4(lz4File_out *lz4, void *buffer, UINT count); + +INT S_zlib_compress_level(INT compress_level) { + switch (compress_level) { + case COMPRESS_MIN: + case COMPRESS_LOW: + return Z_BEST_SPEED; + case COMPRESS_MEDIUM: + return (Z_BEST_SPEED + Z_BEST_COMPRESSION) / 2; + case COMPRESS_HIGH: + return (Z_BEST_SPEED + (3 * Z_BEST_COMPRESSION)) / 4; + case COMPRESS_MAX: + return Z_BEST_COMPRESSION; + default: + S_error1("S_zlib_compress_level", "unexpected compress level ~s", Sinteger(compress_level)); + return 0; + } +} + +static glzFile glzdopen_output_gz(INT fd, INT compress_level) { + gzFile gz; + glzFile glz; + INT as_append; + INT level; + +#ifdef WIN32 + as_append = 0; +#else + as_append = fcntl(fd, F_GETFL) & O_APPEND; +#endif + + if ((gz = gzdopen(fd, as_append ? "ab" : "wb")) == Z_NULL) return Z_NULL; + + level = S_zlib_compress_level(compress_level); + + gzsetparams(gz, level, Z_DEFAULT_STRATEGY); + + if ((glz = malloc(sizeof(struct glzFile_r))) == NULL) { + (void)gzclose(gz); + return Z_NULL; + } + glz->fd = fd; + glz->inputp = 0; + glz->format = COMPRESS_GZIP; + glz->gz = gz; + return glz; +} + +INT S_lz4_compress_level(INT compress_level) { + switch (compress_level) { + case COMPRESS_MIN: + case COMPRESS_LOW: + return 1; + case COMPRESS_MEDIUM: + return LZ4HC_CLEVEL_MIN; + case COMPRESS_HIGH: + return (LZ4HC_CLEVEL_MIN + LZ4HC_CLEVEL_MAX) / 2; + case COMPRESS_MAX: + return LZ4HC_CLEVEL_MAX; + default: + S_error1("S_lz4_compress_level", "unexpected compress level ~s", Sinteger(compress_level)); + return 0; + } +} + +static glzFile glzdopen_output_lz4(INT fd, INT compress_level) { + glzFile glz; + lz4File_out *lz4; + INT level; + + level = S_lz4_compress_level(compress_level); + + if ((lz4 = malloc(sizeof(lz4File_out))) == NULL) return Z_NULL; + memset(&lz4->preferences, 0, sizeof(LZ4F_preferences_t)); + lz4->preferences.compressionLevel = level; + lz4->fd = fd; + lz4->out_buffer_size = (INT)LZ4F_compressFrameBound(LZ4_OUTPUT_PORT_IN_BUFFER_SIZE, &lz4->preferences); + lz4->in_pos = 0; + lz4->err = 0; + lz4->stream_pos = 0; + + if ((glz = malloc(sizeof(struct glzFile_r))) == NULL) { + free(lz4); + return Z_NULL; + } + glz->fd = fd; + glz->inputp = 0; + glz->format = COMPRESS_LZ4; + glz->lz4_out = lz4; + return glz; +} + +glzFile S_glzdopen_output(INT fd, INT compress_format, INT compress_level) { + switch (compress_format) { + case COMPRESS_GZIP: + return glzdopen_output_gz(fd, compress_level); + case COMPRESS_LZ4: + return glzdopen_output_lz4(fd, compress_level); + default: + S_error1("glzdopen_output", "unexpected compress format ~s", Sinteger(compress_format)); + return Z_NULL; + } +} + +static glzFile glzdopen_input_gz(INT fd) { + gzFile gz; + glzFile glz; + + if ((gz = gzdopen(fd, "rb")) == Z_NULL) return Z_NULL; + + if ((glz = malloc(sizeof(struct glzFile_r))) == NULL) { + (void)gzclose(gz); + return Z_NULL; + } + glz->fd = fd; + glz->inputp = 1; + glz->format = COMPRESS_GZIP; + glz->gz = gz; + return glz; +} + +static glzFile glzdopen_input_lz4(INT fd, off_t init_pos) { + glzFile glz; + LZ4F_dctx *dctx; + LZ4F_errorCode_t r; + lz4File_in *lz4; + + r = LZ4F_createDecompressionContext(&dctx, LZ4F_VERSION); + if (LZ4F_isError(r)) + return Z_NULL; + + if ((lz4 = malloc(sizeof(lz4File_in))) == NULL) { + (void)LZ4F_freeDecompressionContext(dctx); + return Z_NULL; + } + lz4->fd = fd; + lz4->dctx = dctx; + lz4->in_pos = 0; + lz4->in_len = 0; + lz4->out_len = 0; + lz4->out_pos = 0; + lz4->frame_ended = 0; + lz4->err = 0; + lz4->stream_pos = 0; + lz4->init_pos = init_pos; + + if ((glz = malloc(sizeof(struct glzFile_r))) == NULL) { + (void)LZ4F_freeDecompressionContext(lz4->dctx); + free(lz4); + return Z_NULL; + } + glz->fd = fd; + glz->inputp = 1; + glz->format = COMPRESS_LZ4; + glz->lz4_in = lz4; + return glz; +} + +glzFile S_glzdopen_input(INT fd) { + INT r, pos = 0; + unsigned char buffer[4]; + off_t init_pos; + + /* check for LZ4 magic number, otherwise defer to gzdopen */ + + if ((init_pos = WIN32_IZE(lseek)(fd, 0, SEEK_CUR)) == -1) return Z_NULL; + + while (pos < 4) { + r = WIN32_IZE(read)(fd, (char*)buffer + pos, 4 - pos); + if (r == 0) + break; + else if (r > 0) + pos += r; +#ifdef EINTR + else if (errno == EINTR) + continue; +#endif + else + break; /* error reading */ + } + + if (pos > 0) { + if (WIN32_IZE(lseek)(fd, init_pos, SEEK_SET) == -1) return Z_NULL; + } + + if ((pos == 4) + && (buffer[0] == 0x04) + && (buffer[1] == 0x22) + && (buffer[2] == 0x4d) + && (buffer[3] == 0x18)) + return glzdopen_input_lz4(fd, init_pos); + + return glzdopen_input_gz(fd); +} + +glzFile S_glzopen_input(const char *path) { + INT fd; + + fd = WIN32_IZE(open)(path, O_RDONLY | GLZ_O_BINARY); + + if (fd == -1) + return Z_NULL; + else + return S_glzdopen_input(fd); +} + +#ifdef WIN32 +glzFile S_glzopen_input_w(const wchar_t *path) { + INT fd; + + fd = _wopen(path, O_RDONLY | GLZ_O_BINARY); + + if (fd == -1) + return Z_NULL; + else + return S_glzdopen_input(fd); +} +#endif + +IBOOL S_glzdirect(glzFile glz) { + if (glz->format == COMPRESS_GZIP) + return gzdirect(glz->gz); + else + return 0; +} + +INT S_glzclose(glzFile glz) { + INT r = Z_OK, saved_errno = 0; + switch (glz->format) { + case COMPRESS_GZIP: + r = gzclose(glz->gz); + break; + case COMPRESS_LZ4: + if (glz->inputp) { + lz4File_in *lz4 = glz->lz4_in; + while (1) { + INT r = WIN32_IZE(close)(lz4->fd); +#ifdef EINTR + if (r < 0 && errno == EINTR) continue; +#endif + if (r == 0) { saved_errno = errno; } + break; + } + (void)LZ4F_freeDecompressionContext(lz4->dctx); + free(lz4); + } else { + lz4File_out *lz4 = glz->lz4_out; + if (lz4->in_pos != 0) { + r = glzemit_lz4(lz4, lz4->in_buffer, lz4->in_pos); + if (r >= 0) r = Z_OK; else { r = Z_ERRNO; saved_errno = errno; } + } + while (1) { + int r1 = WIN32_IZE(close)(lz4->fd); +#ifdef EINTR + if (r1 < 0 && errno == EINTR) continue; +#endif + if (r == Z_OK && r1 < 0) { r = Z_ERRNO; saved_errno = errno; } + break; + } + free(lz4); + } + break; + default: + S_error1("S_glzclose", "unexpected compress format ~s", Sinteger(glz->format)); + } + free(glz); + if (saved_errno) errno = saved_errno; + return r; +} + +static INT glzread_lz4(lz4File_in *lz4, void *buffer, UINT count) { + while (lz4->out_pos == lz4->out_len) { + INT in_avail; + + in_avail = lz4->in_len - lz4->in_pos; + if (!in_avail) { + while (1) { + in_avail = WIN32_IZE(read)(lz4->fd, lz4->in_buffer, LZ4_INPUT_PORT_IN_BUFFER_SIZE); + if (in_avail >= 0) { + lz4->in_len = in_avail; + lz4->in_pos = 0; + break; +#ifdef EINTR + } else if (errno == EINTR) { + /* try again */ +#endif + } else { + lz4->err = Z_ERRNO; + return -1; + } + } + } + + if (in_avail > 0) { + size_t amt, out_len = LZ4_INPUT_PORT_OUT_BUFFER_SIZE, in_len = in_avail; + + /* For a large enough result buffer, try to decompress directly + to that buffer: */ + if (count >= (out_len >> 1)) { + size_t direct_out_len = count; + + if (lz4->frame_ended && lz4->in_buffer[lz4->in_pos] == 0) + return 0; /* count 0 after frame as stream terminator */ + + amt = LZ4F_decompress(lz4->dctx, + buffer, &direct_out_len, + lz4->in_buffer + lz4->in_pos, &in_len, + NULL); + lz4->frame_ended = (amt == 0); + + if (LZ4F_isError(amt)) { + lz4->err = Z_STREAM_ERROR; + return -1; + } + + lz4->in_pos += (INT)in_len; + + if (direct_out_len) { + lz4->stream_pos += direct_out_len; + return (INT)direct_out_len; + } + + in_len = in_avail - in_len; + } + + if (in_len > 0) { + if (lz4->frame_ended && lz4->in_buffer[lz4->in_pos] == 0) + return 0; /* count 0 after frame as stream terminator */ + + amt = LZ4F_decompress(lz4->dctx, + lz4->out_buffer, &out_len, + lz4->in_buffer + lz4->in_pos, &in_len, + NULL); + lz4->frame_ended = (amt == 0); + + if (LZ4F_isError(amt)) { + lz4->err = Z_STREAM_ERROR; + return -1; + } + + lz4->in_pos += (INT)in_len; + lz4->out_len = (INT)out_len; + lz4->out_pos = 0; + } + } else { + /* EOF on read */ + break; + } + } + + if (lz4->out_pos < lz4->out_len) { + UINT amt = lz4->out_len - lz4->out_pos; + if (amt > count) amt = count; + memcpy(buffer, lz4->out_buffer + lz4->out_pos, amt); + lz4->out_pos += amt; + lz4->stream_pos += amt; + return amt; + } + + return 0; +} + +INT S_glzread(glzFile glz, void *buffer, UINT count) { + switch (glz->format) { + case COMPRESS_GZIP: + return gzread(glz->gz, buffer, count); + case COMPRESS_LZ4: + return glzread_lz4(glz->lz4_in, buffer, count); + default: + S_error1("S_glzread", "unexpected compress format ~s", Sinteger(glz->format)); + return -1; + } +} + +static INT glzemit_lz4(lz4File_out *lz4, void *buffer, UINT count) { + ptr tc = get_thread_context(); + sized_buffer *cached_out_buffer; + char *out_buffer; + INT out_len, out_pos; + INT r = 0; + + /* allocate one out_buffer (per thread) since we don't need one for each file. + the buffer is freed by destroy_thread. */ + if ((cached_out_buffer = LZ4OUTBUFFER(tc)) == NULL || cached_out_buffer->size < lz4->out_buffer_size) { + if (cached_out_buffer != NULL) free(cached_out_buffer); + if ((LZ4OUTBUFFER(tc) = cached_out_buffer = malloc(sizeof(sized_buffer) + lz4->out_buffer_size)) == NULL) return -1; + cached_out_buffer->size = lz4->out_buffer_size; + } + out_buffer = cached_out_buffer->buffer; + + out_len = (INT)LZ4F_compressFrame(out_buffer, lz4->out_buffer_size, + buffer, count, + &lz4->preferences); + if (LZ4F_isError(out_len)) { + lz4->err = Z_STREAM_ERROR; + return -1; + } + + out_pos = 0; + while (out_pos < out_len) { + r = WIN32_IZE(write)(lz4->fd, out_buffer + out_pos, out_len - out_pos); + if (r >= 0) + out_pos += r; +#ifdef EINTR + else if (errno == EINTR) + continue; +#endif + else + break; + } + + return r; +} + +static INT glzwrite_lz4(lz4File_out *lz4, void *buffer, UINT count) { + UINT amt; INT r; + + if ((amt = LZ4_OUTPUT_PORT_IN_BUFFER_SIZE - lz4->in_pos) > count) amt = count; + + if (amt == LZ4_OUTPUT_PORT_IN_BUFFER_SIZE) { + /* full buffer coming from input...skip the memcpy */ + if ((r = glzemit_lz4(lz4, buffer, LZ4_OUTPUT_PORT_IN_BUFFER_SIZE)) < 0) return 0; + } else { + memcpy(lz4->in_buffer + lz4->in_pos, buffer, amt); + if ((lz4->in_pos += amt) == LZ4_OUTPUT_PORT_IN_BUFFER_SIZE) { + lz4->in_pos = 0; + if ((r = glzemit_lz4(lz4, lz4->in_buffer, LZ4_OUTPUT_PORT_IN_BUFFER_SIZE)) < 0) return 0; + } + } + + lz4->stream_pos += amt; + return amt; +} + +INT S_glzwrite(glzFile glz, void *buffer, UINT count) { + switch (glz->format) { + case COMPRESS_GZIP: + return gzwrite(glz->gz, buffer, count); + case COMPRESS_LZ4: + return glzwrite_lz4(glz->lz4_out, buffer, count); + default: + S_error1("S_glzwrite", "unexpected compress format ~s", Sinteger(glz->format)); + return -1; + } +} + +long S_glzseek(glzFile glz, long offset, INT whence) { + switch (glz->format) { + case COMPRESS_GZIP: + return gzseek(glz->gz, offset, whence); + case COMPRESS_LZ4: + if (glz->inputp) { + lz4File_in *lz4 = glz->lz4_in; + if (whence == SEEK_CUR) + offset += (long)lz4->stream_pos; + if (offset < 0) + offset = 0; + if ((size_t)offset < lz4->stream_pos) { + /* rewind and read from start */ + if (WIN32_IZE(lseek)(lz4->fd, lz4->init_pos, SEEK_SET) < 0) { + lz4->err = Z_ERRNO; + return -1; + } + LZ4F_resetDecompressionContext(lz4->dctx); + lz4->in_pos = 0; + lz4->in_len = 0; + lz4->out_len = 0; + lz4->out_pos = 0; + lz4->err = 0; + lz4->stream_pos = 0; + } + while ((size_t)offset > lz4->stream_pos) { + static char buffer[1024]; + size_t amt = (size_t)offset - lz4->stream_pos; + if (amt > sizeof(buffer)) amt = sizeof(buffer); + if (glzread_lz4(lz4, buffer, (UINT)amt) < 0) + return -1; + } + return (long)lz4->stream_pos; + } else { + lz4File_out *lz4 = glz->lz4_out; + if (whence == SEEK_CUR) + offset += (long)lz4->stream_pos; + if (offset >= 0) { + while ((size_t)offset > lz4->stream_pos) { + size_t amt = (size_t)offset - lz4->stream_pos; + if (amt > 8) amt = 8; + if (glzwrite_lz4(lz4, "\0\0\0\0\0\0\0\0", (UINT)amt) < 0) + return -1; + } + } + return (long)lz4->stream_pos; + } + default: + S_error1("S_glzseek", "unexpected compress format ~s", Sinteger(glz->format)); + return -1; + } +} + +INT S_glzgetc(glzFile glz) { + switch (glz->format) { + case COMPRESS_GZIP: + return gzgetc(glz->gz); + case COMPRESS_LZ4: + { + unsigned char buffer[1]; + INT r; + r = S_glzread(glz, buffer, 1); + if (r == 1) + return buffer[0]; + else + return -1; + } + default: + S_error1("S_glzgetc", "unexpected compress format ~s", Sinteger(glz->format)); + return -1; + } +} + +INT S_glzungetc(INT c, glzFile glz) { + switch (glz->format) { + case COMPRESS_GZIP: + return gzungetc(c, glz->gz); + case COMPRESS_LZ4: + { + lz4File_in *lz4 = glz->lz4_in; + if (lz4->out_len == 0) + lz4->out_len = lz4->out_pos = 1; + if (lz4->out_pos) { + lz4->out_pos--; + lz4->out_buffer[lz4->out_pos] = c; + lz4->stream_pos--; + return c; + } else { + /* support ungetc only just after a getc, in which case there + should have been room */ + return -1; + } + } + default: + S_error1("S_glzungetc", "unexpected compress format ~s", Sinteger(glz->format)); + return -1; + } +} + +INT S_glzrewind(glzFile glz) { + return S_glzseek(glz, 0, SEEK_SET); +} + +void S_glzerror(glzFile glz, INT *errnum) { + switch (glz->format) { + case COMPRESS_GZIP: + (void)gzerror(glz->gz, errnum); + break; + case COMPRESS_LZ4: + if (glz->inputp) + *errnum = glz->lz4_in->err; + else + *errnum = glz->lz4_out->err; + break; + default: + S_error1("S_glzerror", "unexpected compress format ~s", Sinteger(glz->format)); + *errnum = 0; + } +} + +void S_glzclearerr(glzFile glz) { + switch (glz->format) { + case COMPRESS_GZIP: + gzclearerr(glz->gz); + break; + case COMPRESS_LZ4: + if (glz->inputp) + glz->lz4_in->err = 0; + else + glz->lz4_out->err = 0; + break; + default: + S_error1("S_glzerror", "unexpected compress format ~s", Sinteger(glz->format)); + } +} diff -Nru chezscheme-9.5+dfsg/c/compress-io.h chezscheme-9.5.4+dfsg/c/compress-io.h --- chezscheme-9.5+dfsg/c/compress-io.h 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/compress-io.h 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,26 @@ +/* compress-io.h + * Copyright 1984-2019 Cisco Systems, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +typedef struct glzFile_r { + INT fd; + IBOOL inputp; + INT format; + union { + struct gzFile_s *gz; + struct lz4File_in_r *lz4_in; + struct lz4File_out_r *lz4_out; + }; +} *glzFile; diff -Nru chezscheme-9.5+dfsg/c/expeditor.c chezscheme-9.5.4+dfsg/c/expeditor.c --- chezscheme-9.5+dfsg/c/expeditor.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/expeditor.c 2020-08-31 02:35:12.000000000 +0000 @@ -77,7 +77,7 @@ ptr tc; #endif /* PTHREADS */ BOOL succ; - static char buf[10]; + static wchar_t buf[10]; static int bufidx = 0; static int buflen = 0; static int rptcnt = 0; @@ -95,7 +95,7 @@ if (!blockp) { DWORD NumberOfEvents; if (!GetNumberOfConsoleInputEvents(hStdin, &NumberOfEvents)) - S_error1("expeditor", "error getting console info: ~a", + S_error1("expeditor", "error getting console input: ~a", S_LastErrorString()); if (NumberOfEvents == 0) return Sfalse; } @@ -104,13 +104,13 @@ tc = get_thread_context(); if (DISABLECOUNT(tc) == FIX(0)) { deactivate_thread(tc); - succ = ReadConsoleInput(hStdin, irInBuf, 1, &cNumRead); + succ = ReadConsoleInputW(hStdin, irInBuf, 1, &cNumRead); reactivate_thread(tc); } else { - succ = ReadConsoleInput(hStdin, irInBuf, 1, &cNumRead); + succ = ReadConsoleInputW(hStdin, irInBuf, 1, &cNumRead); } #else /* PTHREADS */ - succ = ReadConsoleInput(hStdin, irInBuf, 1, &cNumRead); + succ = ReadConsoleInputW(hStdin, irInBuf, 1, &cNumRead); #endif /* PTHREADS */ @@ -125,10 +125,10 @@ KEY_EVENT_RECORD ker = irInBuf[0].Event.KeyEvent; rptcnt = ker.wRepeatCount; if (ker.bKeyDown) { - char c; + wchar_t c; - if (c = ker.uChar.AsciiChar) { - /* translate ^@ 2) and ^ to nul */ + if (c = ker.uChar.UnicodeChar) { + /* translate ^ to nul */ if (c == 0x20 && (ker.dwControlKeyState & (LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED))) buf[0] = 0; else @@ -508,12 +508,15 @@ ptr x = S_G.null_string; if (OpenClipboard((HWND)0)) { - HANDLE h = GetClipboardData(CF_TEXT); - - if (h != (HANDLE *)0) { - char *s = (char *)GlobalLock(h); - if (s != (char *)0) x = Sstring(s); - GlobalUnlock(h); + HANDLE h = GetClipboardData(CF_UNICODETEXT); + if (h != NULL) { + wchar_t *w = (wchar_t*)GlobalLock(h); + if (w != NULL) { + char *s = Swide_to_utf8(w); + x = Sstring_utf8(s, -1); + free(s); + GlobalUnlock(h); + } } CloseClipboard(); } @@ -522,12 +525,15 @@ } static void s_ee_write_char(wchar_t c) { - if (c > 255) c = '?'; - putchar(c); + DWORD n; + WriteConsoleW(hStdout, &c, 1, &n, NULL); } #else /* WIN32 */ -#ifdef SOLARIS +#include +#ifdef DISABLE_CURSES +#include "nocurses.h" +#elif defined(SOLARIS) #define NCURSES_CONST #define CHTYPE int #include @@ -546,12 +552,25 @@ #include #include #include +#if !defined(__linux__) && !defined(__OpenBSD__) && !defined(__NetBSD__) #include +#endif #if defined(TIOCGWINSZ) && defined(SIGWINCH) && defined(EINTR) #define HANDLE_SIGWINCH #endif +#ifdef USE_MBRTOWC_L +static locale_t the_locale; +static locale_t uselocale_alt(locale_t l) { + locale_t old = the_locale; + the_locale = l; + return old; +} +# define uselocale(v) uselocale_alt(v) +# define mbrtowc(pwc, s, n, ps) mbrtowc_l(pwc, s, n, ps, the_locale) +#endif + /* locally defined functions */ static int eeputc(tputsputcchar c); #ifdef HANDLE_SIGWINCH @@ -675,11 +694,15 @@ #endif /* PTHREADS */ if (n == 1) { - old_locale = uselocale(term_locale); - sz = mbrtowc(&wch, buf, 1, &term_out_mbs); - uselocale(old_locale); - if (sz == 1) { - return Schar(wch); + if (buf[0] == '\0') { + return Schar('\0'); + } else { + old_locale = uselocale(term_locale); + sz = mbrtowc(&wch, buf, 1, &term_out_mbs); + uselocale(old_locale); + if (sz == 1) { + return Schar(wch); + } } } @@ -886,8 +909,10 @@ #include #include #include +#endif /* LIBX11 */ static ptr s_ee_get_clipboard(void) { +#ifdef LIBX11 static enum {UNINITIALIZED, INITIALIZED, FAILED} status = UNINITIALIZED; static int (*pXConvertSelection)(Display *, Atom, Atom, Atom, Window, Time); static int (*pXPending)(Display *display); @@ -897,9 +922,11 @@ static Display *D; static Window R, W; +#endif /* LIBX11 */ ptr p = S_G.null_string; +#ifdef LIBX11 if (status == UNINITIALIZED) { char *display_name; void *handle; @@ -984,6 +1011,7 @@ } } } +#endif /* LIBX11 */ #ifdef MACOSX #define PBPASTEBUFSIZE 1024 @@ -1011,11 +1039,6 @@ return p; } -#else /* LIBX11 */ -static ptr s_ee_get_clipboard(void) { - return S_G.null_string; -} -#endif static void s_ee_write_char(wchar_t wch) { locale_t old; char buf[MB_LEN_MAX]; size_t n; diff -Nru chezscheme-9.5+dfsg/c/externs.h chezscheme-9.5.4+dfsg/c/externs.h --- chezscheme-9.5+dfsg/c/externs.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/externs.h 2020-08-31 02:35:12.000000000 +0000 @@ -45,6 +45,16 @@ #include #endif +#if !defined(NORETURN) +# if defined(__GNUC__) || defined(__clang__) +# define NORETURN __attribute__((noreturn)) +# elif defined(_MSC_VER) +# define NORETURN __declspec(noreturn) +# else +# define NORETURN +# endif /* defined(__GNUC__) || defined(__clang__) */ +#endif /* !defined(NORETURN) */ + /* external procedure declarations */ /* prototypes gen. by ProtoGen Version 0.31 (Haydn Huntley) 1/18/93 */ @@ -56,9 +66,11 @@ extern ptr S_compute_bytes_allocated PROTO((ptr xg, ptr xs)); extern ptr S_find_more_room PROTO((ISPC s, IGEN g, iptr n, ptr old)); extern void S_dirty_set PROTO((ptr *loc, ptr x)); +extern void S_mark_card_dirty PROTO((uptr card, IGEN to_g)); extern void S_scan_dirty PROTO((ptr **p, ptr **endp)); extern void S_scan_remembered_set PROTO((void)); extern void S_get_more_room PROTO((void)); +extern ptr S_get_more_room_help PROTO((ptr tc, uptr ap, uptr type, uptr size)); extern ptr S_cons_in PROTO((ISPC s, IGEN g, ptr car, ptr cdr)); extern ptr S_symbol PROTO((ptr name)); extern ptr S_rational PROTO((ptr n, ptr d)); @@ -78,24 +90,17 @@ extern ptr S_inexactnum PROTO((double rp, double ip)); extern ptr S_exactnum PROTO((ptr a, ptr b)); extern ptr S_thread PROTO((ptr tc)); -extern ptr S_ifile PROTO((iptr icount, ptr name, iptr fd, ptr info, iptr flags, char *ilast, - ptr ibuf)); -extern ptr S_ofile PROTO((iptr ocount, ptr name, iptr fd, ptr info, iptr flags, char *olast, - ptr obuf)); -extern ptr S_iofile PROTO((iptr icount, iptr ocount, ptr name, iptr fd, ptr info, iptr flags, - char *ilast, ptr ibuf, char *olast, ptr obuf)); extern ptr S_string PROTO((const char *s, iptr n)); -extern ptr S_bignum PROTO((iptr n, IBOOL sign)); +extern ptr S_bignum PROTO((ptr tc, iptr n, IBOOL sign)); extern ptr S_code PROTO((ptr tc, iptr type, iptr n)); extern ptr S_relocation_table PROTO((iptr n)); -extern ptr S_thread_get_more_room PROTO((iptr t, iptr n)); +extern ptr S_weak_cons PROTO((ptr car, ptr cdr)); /* fasl.c */ extern void S_fasl_init PROTO((void)); -ptr S_fasl_read PROTO((ptr file, IBOOL gzflag, ptr path)); +ptr S_fasl_read PROTO((INT fd, IFASLCODE situation, ptr path)); ptr S_bv_fasl_read PROTO((ptr bv, ptr path)); -/* S_boot_read's f argument is really gzFile, but zlib.h is not included everywhere */ -ptr S_boot_read PROTO((gzFile file, const char *path)); +ptr S_boot_read PROTO((INT fd, const char *path)); char *S_format_scheme_version PROTO((uptr n)); char *S_lookup_machine_type PROTO((uptr n)); extern void S_set_code_obj PROTO((char *who, IFASLCODE typ, ptr p, iptr n, @@ -119,8 +124,8 @@ extern void S_register_child_process PROTO((INT child)); #endif /* WIN32 */ extern void S_fixup_counts PROTO((ptr counts)); -extern void S_do_gc PROTO((IGEN g, IGEN gtarget)); -extern void S_gc PROTO((ptr tc, IGEN mcg, IGEN tg)); +extern void S_do_gc PROTO((IGEN max_cg, IGEN min_tg, IGEN max_tg)); +extern void S_gc PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg)); extern void S_gc_init PROTO((void)); extern void S_set_maxgen PROTO((IGEN g)); extern IGEN S_maxgen PROTO((void)); @@ -132,16 +137,19 @@ extern IBOOL S_enable_object_counts PROTO((void)); extern void S_set_enable_object_counts PROTO((IBOOL eoc)); extern ptr S_object_counts PROTO((void)); -extern void S_do_gc PROTO((IGEN g, IGEN gtarget)); extern ptr S_locked_objects PROTO((void)); +extern ptr S_unregister_guardian PROTO((ptr tconc)); extern void S_compact_heap PROTO((void)); extern void S_check_heap PROTO((IBOOL aftergc)); +/* gc-011.c */ +extern void S_gc_011 PROTO((ptr tc)); + /* gc-ocd.c */ -extern void S_gc_ocd PROTO((ptr tc, IGEN mcg, IGEN tg)); +extern void S_gc_ocd PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg)); /* gc-oce.c */ -extern void S_gc_oce PROTO((ptr tc, IGEN mcg, IGEN tg)); +extern void S_gc_oce PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg)); /* intern.c */ extern void S_intern_init PROTO((void)); @@ -168,9 +176,32 @@ #endif extern IBOOL S_fixedpathp PROTO((const char *inpath)); +/* compress-io.c */ +extern INT S_zlib_compress_level PROTO((INT compress_level)); +extern INT S_lz4_compress_level PROTO((INT compress_level)); +extern glzFile S_glzdopen_output PROTO((INT fd, INT compress_format, INT compress_level)); +extern glzFile S_glzdopen_input PROTO((INT fd)); +extern glzFile S_glzopen_input PROTO((const char *path)); +#ifdef WIN32 +extern glzFile S_glzopen_input_w PROTO((const wchar_t *path)); +#endif +extern IBOOL S_glzdirect PROTO((glzFile file)); +extern INT S_glzclose PROTO((glzFile file)); + +extern INT S_glzread PROTO((glzFile file, void *buffer, UINT count)); +extern INT S_glzwrite PROTO((glzFile file, void *buffer, UINT count)); +extern long S_glzseek PROTO((glzFile file, long offset, INT whence)); +extern INT S_glzgetc PROTO((glzFile file)); +extern INT S_glzungetc PROTO((INT c, glzFile file)); +extern INT S_glzrewind PROTO((glzFile file)); + +extern void S_glzerror PROTO((glzFile file, INT *errnum)); +extern void S_glzclearerr PROTO((glzFile fdfile)); + + /* new-io.c */ extern INT S_gzxfile_fd PROTO((ptr x)); -extern gzFile S_gzxfile_gzfile PROTO((ptr x)); +extern glzFile S_gzxfile_gzfile PROTO((ptr x)); extern ptr S_new_open_input_fd PROTO((const char *filename, IBOOL compressed)); extern ptr S_new_open_output_fd PROTO(( const char *filename, INT mode, @@ -197,11 +228,13 @@ extern ptr S_set_fd_length PROTO((ptr file, ptr length, IBOOL gzflag)); extern void S_new_io_init PROTO((void)); -extern uptr S_bytevector_compress_size PROTO((iptr s_count)); +extern uptr S_bytevector_compress_size PROTO((iptr s_count, INT compress_format)); extern ptr S_bytevector_compress PROTO((ptr dest_bv, iptr d_start, iptr d_count, - ptr src_bv, iptr s_start, iptr s_count)); + ptr src_bv, iptr s_start, iptr s_count, + INT compress_format)); extern ptr S_bytevector_uncompress PROTO((ptr dest_bv, iptr d_start, iptr d_count, - ptr src_bv, iptr s_start, iptr s_count)); + ptr src_bv, iptr s_start, iptr s_count, + INT compress_format)); /* thread.c */ extern void S_thread_init PROTO((void)); @@ -216,6 +249,8 @@ extern s_thread_cond_t *S_make_condition PROTO((void)); extern void S_condition_free PROTO((s_thread_cond_t *c)); extern IBOOL S_condition_wait PROTO((s_thread_cond_t *c, scheme_mutex_t *m, ptr t)); +extern INT S_activate_thread PROTO((void)); +extern void S_unactivate_thread PROTO((int mode)); #endif /* scheme.c */ @@ -229,13 +264,14 @@ extern I64 S_int64_value PROTO((char *who, ptr x)); extern IBOOL S_big_eq PROTO((ptr x, ptr y)); extern IBOOL S_big_lt PROTO((ptr x, ptr y)); +extern ptr S_big_negate PROTO((ptr x)); extern ptr S_add PROTO((ptr x, ptr y)); extern ptr S_sub PROTO((ptr x, ptr y)); extern ptr S_mul PROTO((ptr x, ptr y)); extern ptr S_div PROTO((ptr x, ptr y)); extern ptr S_rem PROTO((ptr x, ptr y)); extern ptr S_trunc PROTO((ptr x, ptr y)); -extern void S_trunc_rem PROTO((ptr x, ptr y, ptr *q, ptr *r)); +extern void S_trunc_rem PROTO((ptr tc, ptr x, ptr y, ptr *q, ptr *r)); extern ptr S_gcd PROTO((ptr x, ptr y)); extern ptr S_ash PROTO((ptr x, ptr n)); extern ptr S_big_positive_bit_field PROTO((ptr x, ptr fxstart, ptr fxend)); @@ -278,22 +314,24 @@ extern void S_handle_overflood PROTO((void)); extern void S_handle_apply_overflood PROTO((void)); extern void S_overflow PROTO((ptr tc, iptr frame_request)); -extern void S_error_reset PROTO((const char *s)); -extern void S_error_abort PROTO((const char *s)); -extern void S_abnormal_exit PROTO((void)); -extern void S_error PROTO((const char *who, const char *s)); -extern void S_error1 PROTO((const char *who, const char *s, ptr x)); -extern void S_error2 PROTO((const char *who, const char *s, ptr x, ptr y)); -extern void S_error3 PROTO((const char *who, const char *s, ptr x, ptr y, ptr z)); -extern void S_boot_error PROTO((const ptr who, ptr s, ptr args)); +extern NORETURN void S_error_reset PROTO((const char *s)); +extern NORETURN void S_error_abort PROTO((const char *s)); +extern NORETURN void S_abnormal_exit PROTO((void)); +extern NORETURN void S_error PROTO((const char *who, const char *s)); +extern NORETURN void S_error1 PROTO((const char *who, const char *s, ptr x)); +extern NORETURN void S_error2 PROTO((const char *who, const char *s, ptr x, ptr y)); +extern NORETURN void S_error3 PROTO((const char *who, const char *s, ptr x, ptr y, ptr z)); +extern NORETURN void S_boot_error PROTO((const ptr who, ptr s, ptr args)); extern void S_handle_docall_error PROTO((void)); extern void S_handle_arg_error PROTO((void)); extern void S_handle_nonprocedure_symbol PROTO((void)); extern void S_handle_values_error PROTO((void)); extern void S_handle_mvlet_error PROTO((void)); +extern ptr S_allocate_scheme_signal_queue PROTO((void)); +extern ptr S_dequeue_scheme_signals PROTO((ptr tc)); extern void S_register_scheme_signal PROTO((iptr sig)); extern void S_fire_collector PROTO((void)); -extern void S_noncontinuable_interrupt PROTO((void)); +extern NORETURN void S_noncontinuable_interrupt PROTO((void)); extern void S_schsig_init PROTO((void)); #ifdef DEFINE_MATHERR #include @@ -338,18 +376,9 @@ extern void S_initframe PROTO((ptr tc, iptr n)); extern void S_put_arg PROTO((ptr tc, iptr i, ptr x)); extern void S_return PROTO((void)); -extern void S_call_help PROTO((ptr tc, IBOOL singlep)); -extern void S_call_void PROTO((void)); -extern ptr S_call_ptr PROTO((void)); -extern iptr S_call_fixnum PROTO((void)); -extern I32 S_call_int32 PROTO((void)); -extern U32 S_call_uns32 PROTO((void)); -extern double S_call_double PROTO((void)); -extern float S_call_single PROTO((void)); -extern U8 *S_call_bytevector PROTO((void)); -extern I64 S_call_int64 PROTO((void)); -extern U64 S_call_uns64 PROTO((void)); -extern uptr S_call_fptr PROTO((void)); +extern void S_call_help PROTO((ptr tc, IBOOL singlep, IBOOL lock_ts)); +extern void S_call_one_result PROTO((void)); +extern void S_call_any_results PROTO((void)); #ifdef WIN32 /* windows.c */ @@ -357,8 +386,7 @@ extern ptr S_LastErrorString(void); extern void *S_ntdlopen(const char *path); extern void *S_ntdlsym(void *h, const char *s); -extern char *S_ntdlerror(void); -extern char *S_GetRegistry(char *buf, int bufsize, char *s); +extern ptr S_ntdlerror(void); extern int S_windows_flock(int fd, int operation); extern int S_windows_chdir(const char *pathname); extern int S_windows_chmod(const char *pathname, int mode); @@ -376,3 +404,6 @@ /* expeditor.c */ extern void S_expeditor_init PROTO((void)); #endif /* FEATURE_EXPEDITOR */ + +/* statics.c */ +extern void scheme_statics(); diff -Nru chezscheme-9.5+dfsg/c/fasl.c chezscheme-9.5.4+dfsg/c/fasl.c --- chezscheme-9.5+dfsg/c/fasl.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/fasl.c 2020-08-31 02:35:12.000000000 +0000 @@ -18,12 +18,19 @@ * * -> * * - * -> * + * -> * * - * -> {header}\0\0\0chez + * -> {header}\0\0\0chez( ...) * - * -> {fasl-size} # size in bytes of following - * + * -> * + * + * -> # size is the size in bytes of + * + * -> {visit} | {revisit} | {visit-revisit} + * + * -> | {uncompressed} + * + * -> {gzip} | {lz4} * * -> {pair}... * @@ -63,7 +70,7 @@ * * -> {library-code} * - * -> {graph} + * -> {graph} * * -> {graph-def} * @@ -71,7 +78,7 @@ * * -> {base-rtd} * - * -> {rtd} + * -> {rtd} * * -> {record} * @@ -177,6 +184,7 @@ */ #include "system.h" +#include "zlib.h" #ifdef WIN32 #include @@ -186,16 +194,15 @@ #include NAN_INCLUDE #endif -#define UFFO_TYPE_GZ 1 #define UFFO_TYPE_FD 2 #define UFFO_TYPE_BV 3 -/* we do our own buffering size gzgetc is slow */ +#define PREPARE_BYTEVECTOR(bv,n) {if (bv == Sfalse || Sbytevector_length(bv) < (n)) bv = S_bytevector(n);} + typedef struct unbufFaslFileObj { ptr path; INT type; INT fd; - gzFile file; } *unbufFaslFile; typedef struct faslFileObj { @@ -209,8 +216,8 @@ /* locally defined functions */ static INT uf_read PROTO((unbufFaslFile uf, octet *s, iptr n)); static octet uf_bytein PROTO((unbufFaslFile uf)); -static uptr uf_uptrin PROTO((unbufFaslFile uf)); -static ptr fasl_entry PROTO((ptr tc, unbufFaslFile uf)); +static uptr uf_uptrin PROTO((unbufFaslFile uf, INT *bytes_consumed)); +static ptr fasl_entry PROTO((ptr tc, IFASLCODE situation, unbufFaslFile uf)); static ptr bv_fasl_entry PROTO((ptr tc, ptr bv, unbufFaslFile uf)); static void fillFaslFile PROTO((faslFile f)); static void bytesin PROTO((octet *s, iptr n, faslFile f)); @@ -285,21 +292,16 @@ #endif } -ptr S_fasl_read(ptr file, IBOOL gzflag, ptr path) { +ptr S_fasl_read(INT fd, IFASLCODE situation, ptr path) { ptr tc = get_thread_context(); ptr x; struct unbufFaslFileObj uffo; /* acquire mutex in case we modify code pages */ tc_mutex_acquire() uffo.path = path; - if (gzflag) { - uffo.type = UFFO_TYPE_GZ; - uffo.file = S_gzxfile_gzfile(file); - } else { - uffo.type = UFFO_TYPE_FD; - uffo.fd = GET_FD(file); - } - x = fasl_entry(tc, &uffo); + uffo.type = UFFO_TYPE_FD; + uffo.fd = fd; + x = fasl_entry(tc, situation, &uffo); tc_mutex_release() return x; } @@ -317,18 +319,16 @@ return x; } -ptr S_boot_read(gzFile file, const char *path) { +ptr S_boot_read(INT fd, const char *path) { ptr tc = get_thread_context(); struct unbufFaslFileObj uffo; - uffo.path = S_string(path, -1); - uffo.type = UFFO_TYPE_GZ; - uffo.file = file; - return fasl_entry(tc, &uffo); + uffo.path = Sstring_utf8(path, -1); + uffo.type = UFFO_TYPE_FD; + uffo.fd = fd; + return fasl_entry(tc, fasl_type_visit_revisit, &uffo); } -#define GZ_IO_SIZE_T unsigned int - #ifdef WIN32 #define IO_SIZE_T unsigned int #else /* WIN32 */ @@ -336,28 +336,15 @@ #endif /* WIN32 */ static INT uf_read(unbufFaslFile uf, octet *s, iptr n) { - iptr k; INT errnum; + iptr k; while (n > 0) { uptr nx = n; #if (iptr_bits > 32) - if ((WIN32 || gzflag) && (unsigned int)nx != nx) nx = 0xffffffff; + if (WIN32 && (unsigned int)nx != nx) nx = 0xffffffff; #endif switch (uf->type) { - case UFFO_TYPE_GZ: - k = gzread(uf->file, s, (GZ_IO_SIZE_T)nx); - if (k > 0) - n -= k; - else if (k == 0) - return -1; - else { - gzerror(uf->file, &errnum); - gzclearerr(uf->file); - if (errnum != Z_ERRNO || errno != EINTR) - S_error1("", "error reading from ~a", uf->path); - } - break; case UFFO_TYPE_FD: k = READ(uf->fd, s, (IO_SIZE_T)nx); if (k > 0) @@ -370,10 +357,22 @@ default: return -1; } + + s += k; } return 0; } +static void uf_skipbytes(unbufFaslFile uf, iptr n) { + switch (uf->type) { + case UFFO_TYPE_FD: + if (LSEEK(uf->fd, n, SEEK_CUR) == -1) { + S_error1("", "error seeking ~a", uf->path); + } + break; + } +} + static octet uf_bytein(unbufFaslFile uf) { octet buf[1]; if (uf_read(uf, buf, 1) < 0) @@ -381,12 +380,14 @@ return buf[0]; } -static uptr uf_uptrin(unbufFaslFile uf) { +static uptr uf_uptrin(unbufFaslFile uf, INT *bytes_consumed) { uptr n, m; octet k; + if (bytes_consumed) *bytes_consumed = 1; k = uf_bytein(uf); n = k >> 1; while (k & 1) { + if (bytes_consumed) *bytes_consumed += 1; k = uf_bytein(uf); m = n << 7; if (m >> 7 != n) toolarge(uf->path); @@ -415,55 +416,100 @@ return "unknown"; } -static ptr fasl_entry(ptr tc, unbufFaslFile uf) { +static ptr fasl_entry(ptr tc, IFASLCODE situation, unbufFaslFile uf) { ptr x; ptr strbuf = S_G.null_string; - octet tybuf[1]; IFASLCODE ty; - struct faslFileObj ffo; octet buf[SBUFSIZ]; - - if (uf_read(uf, tybuf, 1) < 0) return Seof_object; - ty = tybuf[0]; - - while (ty == fasl_type_header) { - uptr n; ICHAR c; + octet tybuf[1]; IFASLCODE ty; iptr size; + /* gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28) co-locates buf and x if we put the declaration of buf down where we use it */ + octet buf[SBUFSIZ]; + + for (;;) { + if (uf_read(uf, tybuf, 1) < 0) return Seof_object; + ty = tybuf[0]; + + while (ty == fasl_type_header) { + uptr n; ICHAR c; + + /* check for remainder of magic number */ + if (uf_bytein(uf) != 0 || + uf_bytein(uf) != 0 || + uf_bytein(uf) != 0 || + uf_bytein(uf) != 'c' || + uf_bytein(uf) != 'h' || + uf_bytein(uf) != 'e' || + uf_bytein(uf) != 'z') + S_error1("", "malformed fasl-object header (missing magic word) found in ~a", uf->path); + + if ((n = uf_uptrin(uf, (INT *)0)) != scheme_version) + S_error2("", "incompatible fasl-object version ~a found in ~a", S_string(S_format_scheme_version(n), -1), uf->path); + + if ((n = uf_uptrin(uf, (INT *)0)) != machine_type_any && n != machine_type) + S_error2("", "incompatible fasl-object machine-type ~a found in ~a", S_string(S_lookup_machine_type(n), -1), uf->path); + + if (uf_bytein(uf) != '(') + S_error1("", "malformed fasl-object header (missing open paren) found in ~a", uf->path); + + while ((c = uf_bytein(uf)) != ')') + if (c < 0) S_error1("", "malformed fasl-object header (missing close paren) found in ~a", uf->path); - /* check for remainder of magic number */ - if (uf_bytein(uf) != 0 || - uf_bytein(uf) != 0 || - uf_bytein(uf) != 0 || - uf_bytein(uf) != 'c' || - uf_bytein(uf) != 'h' || - uf_bytein(uf) != 'e' || - uf_bytein(uf) != 'z') - S_error1("", "malformed fasl-object header found in ~a", uf->path); - - if ((n = uf_uptrin(uf)) != scheme_version) - S_error2("", "incompatible fasl-object version ~a found in ~a", S_string(S_format_scheme_version(n), -1), uf->path); + ty = uf_bytein(uf); + } - if ((n = uf_uptrin(uf)) != machine_type_any && n != machine_type) - S_error2("", "incompatible fasl-object machine-type ~a found in ~a", S_string(S_lookup_machine_type(n), -1), uf->path); + switch (ty) { + case fasl_type_visit: + case fasl_type_revisit: + case fasl_type_visit_revisit: + break; + default: + S_error2("", "malformed fasl-object header (missing situation, got ~s) found in ~a", FIX(ty), uf->path); + return (ptr)0; + } - if (uf_bytein(uf) != '(') - S_error1("", "malformed fasl-object header found in ~a", uf->path); + size = uf_uptrin(uf, (INT *)0); - while ((c = uf_bytein(uf)) != ')') - if (c < 0) S_error1("", "malformed fasl-object header found in ~a", uf->path); + if (ty == situation || situation == fasl_type_visit_revisit || ty == fasl_type_visit_revisit) { + struct faslFileObj ffo; - ty = uf_bytein(uf); + ty = uf_bytein(uf); + switch (ty) { + case fasl_type_gzip: + case fasl_type_lz4: { + ptr result; INT bytes_consumed; + iptr dest_size = uf_uptrin(uf, &bytes_consumed); + iptr src_size = size - (1 + bytes_consumed); /* adjust for u8 compression type and uptr dest_size */ + + PREPARE_BYTEVECTOR(SRCBV(tc), src_size); + PREPARE_BYTEVECTOR(DSTBV(tc), dest_size); + if (uf_read(uf, &BVIT(SRCBV(tc),0), src_size) < 0) + S_error1("", "unexpected eof in fasl file ~a", uf->path); + result = S_bytevector_uncompress(DSTBV(tc), 0, dest_size, SRCBV(tc), 0, src_size, + (ty == fasl_type_gzip ? COMPRESS_GZIP : COMPRESS_LZ4)); + if (result != FIX(dest_size)) { + if (Sstringp(result)) S_error2("fasl-read", "~@?", result, SRCBV(tc)); + S_error3("fasl-read", "uncompressed size ~s for ~s is smaller than expected size ~s", result, SRCBV(tc), FIX(dest_size)); + } + ffo.size = dest_size; + ffo.next = ffo.buf = &BVIT(DSTBV(tc),0); + ffo.end = &BVIT(DSTBV(tc),dest_size); + ffo.uf = uf; + break; + } + case fasl_type_uncompressed: { + ffo.size = size - 1; /* adjust for u8 compression type */ + ffo.next = ffo.end = ffo.buf = buf; + ffo.uf = uf; + break; + } + default: + S_error2("", "malformed fasl-object header (missing possibly-compressed, got ~s) found in ~a", FIX(ty), uf->path); + return (ptr)0; + } + faslin(tc, &x, S_G.null_vector, &strbuf, &ffo); + S_flush_instruction_cache(tc); + return x; + } else { + uf_skipbytes(uf, size); + } } - - if (ty != fasl_type_fasl_size) - S_error1("", "malformed fasl-object header found in ~a", uf->path); - - ffo.size = uf_uptrin(uf); - - ffo.buf = buf; - ffo.next = ffo.end = ffo.buf; - ffo.uf = uf; - - faslin(tc, &x, S_G.null_vector, &strbuf, &ffo); - - S_flush_instruction_cache(tc); - return x; } static ptr bv_fasl_entry(ptr tc, ptr bv, unbufFaslFile uf) { @@ -476,7 +522,6 @@ ffo.uf = uf; faslin(tc, &x, S_G.null_vector, &strbuf, &ffo); - S_flush_instruction_cache(tc); return x; } @@ -637,7 +682,6 @@ faslin(tc, &EXACTNUM_REAL_PART(*x), t, pstrbuf, f); faslin(tc, &EXACTNUM_IMAG_PART(*x), t, pstrbuf, f); return; - case fasl_type_group: case fasl_type_vector: case fasl_type_immutable_vector: { iptr n; ptr *p; @@ -696,24 +740,25 @@ } case fasl_type_rtd: { ptr rtd, rtd_uid, plist, ls; - fasl_record(tc, x, t, pstrbuf, f); - rtd = *x; - rtd_uid = RECORDDESCUID(rtd); + faslin(tc, &rtd_uid, t, pstrbuf, f); - /* see if uid's property list already registers an rtd */ + /* look for rtd on uid's property list */ plist = SYMSPLIST(rtd_uid); for (ls = plist; ls != Snil; ls = Scdr(Scdr(ls))) { if (Scar(ls) == S_G.rtd_key) { - ptr old_rtd = Scar(Scdr(ls)); - /* if so, check new rtd against old rtd and return old rtd */ - if (!rtd_equiv(rtd, old_rtd)) - S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(rtd), f->uf->path); - *x = old_rtd; + ptr tmp; + *x = rtd = Scar(Scdr(ls)); + fasl_record(tc, &tmp, t, pstrbuf, f); + if (!rtd_equiv(tmp, rtd)) + S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(tmp), f->uf->path); return; } } - /* if not, register it */ + fasl_record(tc, x, t, pstrbuf, f); + rtd = *x; + + /* register rtd on uid's property list */ SETSYMSPLIST(rtd_uid, Scons(S_G.rtd_key, Scons(rtd, plist))); return; } @@ -868,7 +913,7 @@ IBOOL sign; iptr n; ptr t; bigit *p; sign = bytein(f); n = uptrin(f); - t = S_bignum(n, sign); + t = S_bignum(tc, n, sign); p = &BIGIT(t, 0); while (n--) *p++ = (bigit)uptrin(f); *x = S_normalize_bignum(t); @@ -886,7 +931,7 @@ return; case fasl_type_code: { iptr n, m, a; INT flags; iptr free; - ptr co, reloc, name; + ptr co, reloc, name, pinfos; flags = bytein(f); free = uptrin(f); n = uptrin(f) /* length in bytes of code */; @@ -897,7 +942,11 @@ CODENAME(co) = name; faslin(tc, &CODEARITYMASK(co), t, pstrbuf, f); faslin(tc, &CODEINFO(co), t, pstrbuf, f); - faslin(tc, &CODEPINFOS(co), t, pstrbuf, f); + faslin(tc, &pinfos, t, pstrbuf, f); + CODEPINFOS(co) = pinfos; + if (pinfos != Snil) { + S_G.profile_counters = Scons(S_weak_cons(co, pinfos), S_G.profile_counters); + } bytesin((octet *)&CODEIT(co, 0), n, f); m = uptrin(f); CODERELOC(co) = reloc = S_relocation_table(m); @@ -949,18 +998,6 @@ case fasl_type_graph_ref: *x = Svector_ref(t, uptrin(f)); return; - case fasl_type_visit: { - ptr p; - *x = p = Scons(FIX(visit_tag), FIX(0)); - faslin(tc, &INITCDR(p), t, pstrbuf, f); - return; - } - case fasl_type_revisit: { - ptr p; - *x = p = Scons(FIX(revisit_tag), FIX(0)); - faslin(tc, &INITCDR(p), t, pstrbuf, f); - return; - } default: S_error2("", "invalid object type ~d in fasl file ~a", FIX(ty), f->uf->path); } diff -Nru chezscheme-9.5+dfsg/c/foreign.c chezscheme-9.5.4+dfsg/c/foreign.c --- chezscheme-9.5+dfsg/c/foreign.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/foreign.c 2020-08-31 02:35:12.000000000 +0000 @@ -36,13 +36,14 @@ #if defined(HPUX) #include #define dlopen(path,flags) (void *)shl_load(path, BIND_IMMEDIATE, 0L) -#define dlerror() strerror(errno) +#define s_dlerror() Sstring_utf8(strerror(errno), -1) #elif defined(WIN32) #define dlopen(path,flags) S_ntdlopen(path) #define dlsym(h,s) S_ntdlsym(h,s) -#define dlerror() S_ntdlerror() +#define s_dlerror() S_ntdlerror() #else #include +#define s_dlerror() Sstring_utf8(dlerror(), -1) #ifndef RTLD_NOW #define RTLD_NOW 2 #endif /* RTLD_NOW */ @@ -171,7 +172,7 @@ SETVECTIT(S_G.foreign_static, b, Scons(Scons(bvstring(s), addr_to_ptr(v)), Svector_ref(S_G.foreign_static, b))); } else if (ptr_to_addr(x) != v) - S_error1("Sforeign_symbol", "duplicate symbol entry for ~s", S_string(s, -1)); + S_error1("Sforeign_symbol", "duplicate symbol entry for ~s", Sstring_utf8(s, -1)); tc_mutex_release() } @@ -229,8 +230,7 @@ handle = dlopen(path, RTLD_NOW); if (handle == (void *)NULL) - S_error2("", "(while loading ~a) ~a", S_string(path, -1), - S_string(dlerror(), -1)); + S_error2("", "(while loading ~a) ~a", Sstring_utf8(path, -1), s_dlerror()); S_foreign_dynamic = Scons(addr_to_ptr(handle), S_foreign_dynamic); tc_mutex_release() @@ -281,7 +281,7 @@ for (b = 0; b < buckets; b++) for (p = Svector_ref(S_G.foreign_static, b); p != Snil; p = Scdr(p)) - entries = Scons(S_string((char *)&BVIT(Scar(Scar(p)), 0), -1), entries); + entries = Scons(Sstring_utf8((char *)&BVIT(Scar(Scar(p)), 0), -1), entries); return entries; } diff -Nru chezscheme-9.5+dfsg/c/gc-011.c chezscheme-9.5.4+dfsg/c/gc-011.c --- chezscheme-9.5+dfsg/c/gc-011.c 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/gc-011.c 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,23 @@ +/* gc-011.c + * Copyright 1984-2020 Cisco Systems, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define GCENTRY S_gc_011 +#define MAX_CG 0 +#define MIN_TG 1 +#define MAX_TG 1 +#define compute_target_generation(g) 1 +#define NO_LOCKED_OLDSPACE_OBJECTS +#include "gc.c" diff -Nru chezscheme-9.5+dfsg/c/gc.c chezscheme-9.5.4+dfsg/c/gc.c --- chezscheme-9.5+dfsg/c/gc.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/gc.c 2020-08-31 02:35:12.000000000 +0000 @@ -22,58 +22,206 @@ #define enable_object_counts do_not_use_enable_object_counts_in_this_file_use_ifdef_ENABLE_OBJECT_COUNTS_instead +#if defined(MIN_TG) && defined(MAX_TG) +#if MIN_TG == MAX_TG +#define NO_DIRTY_NEWSPACE_POINTERS +#endif +#endif + +#if defined(MAX_CG) && defined(MIN_TG) && defined(MAX_TG) +#define FORMAL_CTGS +#define ONLY_FORMAL_CTGS void +#define ACTUAL_CTGS +#define ONLY_ACTUAL_CTGS +#define DECLARE_CTGS(max_cg, min_tg, max_tg) IGEN max_cg = MAX_CG, min_tg = MIN_TG, max_tg = MAX_TG +#define GCENTRY_PROTO(tcdecl, max_cgdecl, min_tgdecl, max_tgdecl) (tcdecl) +#else +#define FORMAL_CTGS , UINT _ctgs +#define ONLY_FORMAL_CTGS UINT _ctgs +#define ACTUAL_CTGS , _ctgs +#define ONLY_ACTUAL_CTGS _ctgs +#define DECLARE_CTGS(max_cg, min_tg, max_tg) UINT _ctgs = (((UINT)min_tg << 16) | ((UINT)max_cg << 8) | (UINT)max_tg) +#define MAX_CG ((INT)((_ctgs >> 8) & 0xff)) +#define MIN_TG ((INT)(_ctgs >> 16)) +#define MAX_TG ((INT)(_ctgs & 0xff)) +#define GCENTRY_PROTO(tcdecl, max_cgdecl, min_tgdecl, max_tgdecl) (tcdecl, max_cgdecl, min_tgdecl, max_tgdecl) +#endif + /* locally defined functions */ +#ifndef NO_DIRTY_NEWSPACE_POINTERS +static void record_new_dirty_card PROTO((ptr *ppp, IGEN to_g)); +#endif /* !NO_DIRTY_NEWSPACE_POINTERS */ +#ifndef NO_LOCKED_OLDSPACE_OBJECTS static ptr append_bang PROTO((ptr ls1, ptr ls2)); static uptr count_unique PROTO((ptr ls)); static uptr list_length PROTO((ptr ls)); static ptr dosort PROTO((ptr ls, uptr n)); static ptr domerge PROTO((ptr l1, ptr l2)); static IBOOL search_locked PROTO((ptr p)); -static ptr copy PROTO((ptr pp, seginfo *si)); -static void sweep_ptrs PROTO((ptr *p, iptr n)); -static void sweep PROTO((ptr tc, ptr p, IBOOL sweep_pure)); -static ptr copy_stack PROTO((ptr old, iptr *length, iptr clength)); -static void resweep_weak_pairs PROTO((IGEN g)); +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ +static IGEN copy PROTO((ptr pp, seginfo *si, ptr *ppp FORMAL_CTGS)); +static void sweep_locked_ptrs PROTO((ptr *p, iptr n FORMAL_CTGS)); +static void sweep_locked PROTO((ptr tc, ptr p, IBOOL sweep_pure FORMAL_CTGS)); +static ptr copy_stack PROTO((ptr old, iptr *length, iptr clength FORMAL_CTGS)); +static void resweep_weak_pairs PROTO((ONLY_FORMAL_CTGS)); static void forward_or_bwp PROTO((ptr *pp, ptr p)); -static void sweep_generation PROTO((ptr tc, IGEN g)); +static void sweep_generation PROTO((ptr tc FORMAL_CTGS)); +#ifndef NO_LOCKED_OLDSPACE_OBJECTS static iptr size_object PROTO((ptr p)); -static iptr sweep_typed_object PROTO((ptr p)); -static void sweep_symbol PROTO((ptr p)); -static void sweep_port PROTO((ptr p)); -static void sweep_thread PROTO((ptr p)); -static void sweep_continuation PROTO((ptr p)); -static void sweep_stack PROTO((uptr base, uptr size, uptr ret)); -static void sweep_record PROTO((ptr x)); -static IGEN sweep_dirty_record PROTO((ptr x)); -static void sweep_code_object PROTO((ptr tc, ptr co)); +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ +static iptr sweep_typed_object PROTO((ptr p, IGEN from_g FORMAL_CTGS)); +static void sweep_symbol PROTO((ptr p, IGEN from_g FORMAL_CTGS)); +static void sweep_port PROTO((ptr p, IGEN from_g FORMAL_CTGS)); +static void sweep_thread PROTO((ptr p FORMAL_CTGS)); +static void sweep_continuation PROTO((ptr p FORMAL_CTGS)); +static void sweep_stack PROTO((uptr base, uptr size, uptr ret FORMAL_CTGS)); +static void sweep_record PROTO((ptr x, IGEN from_g FORMAL_CTGS)); +static IGEN sweep_dirty_record PROTO((ptr x, IGEN youngest FORMAL_CTGS)); +static void sweep_code_object PROTO((ptr tc, ptr co FORMAL_CTGS)); static void record_dirty_segment PROTO((IGEN from_g, IGEN to_g, seginfo *si)); -static void sweep_dirty PROTO((void)); -static void resweep_dirty_weak_pairs PROTO((void)); +static void sweep_dirty PROTO((ONLY_FORMAL_CTGS)); +static void resweep_dirty_weak_pairs PROTO((ONLY_FORMAL_CTGS)); static void add_ephemeron_to_pending PROTO((ptr p)); static void add_trigger_ephemerons_to_repending PROTO((ptr p)); static void check_trigger_ephemerons PROTO((seginfo *si)); -static void check_ephemeron PROTO((ptr pe, int add_to_trigger)); -static void check_pending_ephemerons PROTO(()); -static int check_dirty_ephemeron PROTO((ptr pe, int tg, int youngest)); +static void check_ephemeron PROTO((ptr pe, IBOOL add_to_trigger FORMAL_CTGS)); +static void check_pending_ephemerons PROTO((ONLY_FORMAL_CTGS)); +static IGEN check_dirty_ephemeron PROTO((ptr pe, IGEN youngest FORMAL_CTGS)); static void clear_trigger_ephemerons PROTO(()); -/* MAXPTR is used to pad the sorted_locked_object vector. The pad value must be greater than any heap address */ -#define MAXPTR ((ptr)-1) - #define OLDSPACE(x) (SPACE(x) & space_old) /* #define DEBUG */ /* initialized and used each gc cycle. any others should be defined in globals.h */ static IBOOL change; -static IGEN target_generation; -static IGEN max_copied_generation; -static ptr sweep_loc[max_real_space+1]; -static ptr orig_next_loc[max_real_space+1]; +static ptr sweep_loc[static_generation+1][max_real_space+1]; +static ptr orig_next_loc[static_generation+1][max_real_space+1]; +#ifndef NO_LOCKED_OLDSPACE_OBJECTS static ptr sorted_locked_objects; +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ static ptr tlcs_to_rehash; -static ptr append_bang(ptr ls1, ptr ls2) { /* assumes ls2 pairs are older than ls1 pairs, or that we don't car */ +#ifndef compute_target_generation +FORCEINLINE IGEN compute_target_generation(IGEN g FORMAL_CTGS) { + return g == MAX_TG ? g : g < MIN_TG ? MIN_TG : g + 1; +} +#endif /* !compute_target_generation */ + +/* rkd 2020/06/16: had the relocate routines more nicely coded with FORCEINLINE. + unfortunately, the llvm-compiled gc ran much (10-20%) slower on my mac. */ +#define relocate_return_addr(PCP) do {\ + ptr *_pcp = PCP;\ + seginfo *_si;\ + ptr _cp = *_pcp;\ + if ((_si = SegInfo(ptr_get_segment(_cp)))->space & space_old) {\ + iptr _co = ENTRYOFFSET(_cp) + ((uptr)_cp - (uptr)&ENTRYOFFSET(_cp));\ + ptr _pp = (ptr)((uptr)_cp - _co);\ + if (FWDMARKER(_pp) == forward_marker)\ + _pp = FWDADDRESS(_pp);\ + else\ + (void) copy(_pp, _si, &_pp ACTUAL_CTGS);\ + *_pcp = (ptr)((uptr)_pp + _co);\ + }\ +} while (0) + +/* use relocate_dirty for oldspace fields that might hold pointers to younger objects */ +#define relocate_dirty(PPP, YOUNGEST) do {\ + seginfo *_si; ptr *_ppp = PPP, _pp = *_ppp; IGEN _pg;\ + if (!IMMEDIATE(_pp) && (_si = MaybeSegInfo(ptr_get_segment(_pp))) != NULL) {\ + if (!(_si->space & space_old)) {\ + _pg = _si->generation;\ + } else if (FWDMARKER(_pp) == forward_marker && TYPEBITS(_pp) != type_flonum) {\ + *_ppp = FWDADDRESS(_pp);\ + _pg = compute_target_generation(_si->generation ACTUAL_CTGS);\ + } else {\ + _pg = copy(_pp, _si, _ppp ACTUAL_CTGS);\ + }\ + if (_pg < YOUNGEST) YOUNGEST = _pg;\ + }\ +} while (0) + +/* use relocate_pure for newspace fields that can't point to younger objects */ +#define relocate_pure_help(PPP, PP) do {\ + ptr *__ppp = PPP, __pp = PP; seginfo *__si;\ + if (!IMMEDIATE(__pp) && (__si = MaybeSegInfo(ptr_get_segment(__pp))) != NULL && (__si->space & space_old)) {\ + if (FWDMARKER(__pp) == forward_marker && TYPEBITS(__pp) != type_flonum) {\ + *__ppp = FWDADDRESS(__pp);\ + } else {\ + (void) copy(__pp, __si, __ppp ACTUAL_CTGS);\ + }\ + }\ +} while (0) + +#define relocate_pure(PPP) do {\ + ptr *_ppp = PPP; relocate_pure_help(_ppp, *_ppp);\ +} while (0) + +/* use relocate_impure for newspace fields that can point to younger objects */ +#ifdef NO_DIRTY_NEWSPACE_POINTERS +#define relocate_impure_help(PPP, PP, FROM_G) do {(void)FROM_G; relocate_pure_help(PPP, PP);} while (0) +#define relocate_impure(PPP, FROM_G) do {(void)FROM_G; relocate_pure(PPP);} while (0) +#else /* !NO_DIRTY_NEWSPACE_POINTERS */ +/* the initialization of __to_g to 0 below shouldn't be necessary, but gcc 7.5.0 complains without it */ +#define relocate_impure_help(PPP, PP, FROM_G) do {\ + ptr *__ppp = PPP, __pp = PP; IGEN __from_g = FROM_G;\ + seginfo *__si; IGEN __to_g = 0;\ + if (!IMMEDIATE(__pp) && (__si = MaybeSegInfo(ptr_get_segment(__pp))) != NULL && (__si->space & space_old)) {\ + if (FWDMARKER(__pp) == forward_marker && TYPEBITS(__pp) != type_flonum ?\ + (*__ppp = FWDADDRESS(__pp), (__from_g > 1 && (__to_g = compute_target_generation(__si->generation ACTUAL_CTGS)) < __from_g)) :\ + ((__to_g = copy(__pp, __si, __ppp ACTUAL_CTGS)) < __from_g)) {\ + record_new_dirty_card(__ppp, __to_g);\ + }\ + }\ +} while (0) + +#define relocate_impure(PPP, FROM_G) do {\ + ptr *_ppp = PPP; relocate_impure_help(_ppp, *_ppp, FROM_G);\ +} while (0) +#endif /* !NO_DIRTY_NEWSPACE_POINTERS */ + +#ifndef NO_DIRTY_NEWSPACE_POINTERS +typedef struct _dirtycardinfo { + uptr card; + IGEN youngest; + struct _dirtycardinfo *next; +} dirtycardinfo; + +static dirtycardinfo *new_dirty_cards; + +static void record_new_dirty_card(ptr *ppp, IGEN to_g) { + uptr card = (uptr)ppp >> card_offset_bits; + + dirtycardinfo *ndc = new_dirty_cards; + if (ndc != NULL && ndc->card == card) { + if (to_g < ndc->youngest) ndc->youngest = to_g; + } else { + dirtycardinfo *next = ndc; + find_room(space_new, 0, typemod, ptr_align(sizeof(dirtycardinfo)), ndc); + ndc->card = card; + ndc->youngest = to_g; + ndc->next = next; + new_dirty_cards = ndc; + } +} +#endif + +/* rkd 2015/06/05: tried to use sse instructions. abandoned the code + because the collector ran slower */ +#define copy_ptrs(ty, p1, p2, n) {\ + ptr *Q1, *Q2, *Q1END;\ + Q1 = (ptr *)UNTYPE((p1),ty);\ + Q2 = (ptr *)UNTYPE((p2),ty);\ + Q1END = (ptr *)((uptr)Q1 + n);\ + while (Q1 != Q1END) *Q1++ = *Q2++;} + +#ifdef NO_LOCKED_OLDSPACE_OBJECTS +#define locked(p) 0 +#else /* !NO_LOCKED_OLDSPACE_OBJECTS */ +/* MAXPTR is used to pad the sorted_locked_object vector. The pad value must be greater than any heap address */ +#define MAXPTR ((ptr)-1) + +static ptr append_bang(ptr ls1, ptr ls2) { /* assumes ls2 pairs are older than ls1 pairs, or that we don't care */ if (ls2 == Snil) { return ls1; } else if (ls1 == Snil) { @@ -106,77 +254,6 @@ return i; } -#define relocate(ppp) {\ - ptr PP;\ - PP = *ppp;\ - relocate_help(ppp, PP)\ -} - -/* optimization of: - * relocate(ppp) - * if (GENERATION(*ppp) < youngest) - * youngest = GENERATION(*ppp); - */ -#define relocate_dirty(ppp,tg,youngest) {\ - ptr PP = *ppp; seginfo *SI;\ - if (!IMMEDIATE(PP) && (SI = MaybeSegInfo(ptr_get_segment(PP))) != NULL) {\ - if (SI->space & space_old) {\ - relocate_help_help(ppp, PP, SI)\ - youngest = tg;\ - } else {\ - IGEN pg;\ - if (youngest != tg && (pg = SI->generation) < youngest) {\ - youngest = pg;\ - }\ - }\ - }\ -} - -#define relocate_help(ppp, pp) {\ - seginfo *SI; \ - if (!IMMEDIATE(pp) && (SI = MaybeSegInfo(ptr_get_segment(pp))) != NULL && SI->space & space_old)\ - relocate_help_help(ppp, pp, SI)\ -} - -#define relocate_help_help(ppp, pp, si) {\ - if (FWDMARKER(pp) == forward_marker && TYPEBITS(pp) != type_flonum)\ - *ppp = FWDADDRESS(pp);\ - else\ - *ppp = copy(pp, si);\ -} - -#define relocate_return_addr(pcp) {\ - seginfo *SI;\ - ptr XCP;\ - XCP = *(pcp);\ - if ((SI = SegInfo(ptr_get_segment(XCP)))->space & space_old) { \ - iptr CO;\ - CO = ENTRYOFFSET(XCP) + ((uptr)XCP - (uptr)&ENTRYOFFSET(XCP));\ - relocate_code(pcp,XCP,CO,SI)\ - }\ -} - -/* in the call to copy below, assuming SPACE(PP) == SPACE(XCP) since - PP and XCP point to/into the same object */ -#define relocate_code(pcp,XCP,CO,SI) {\ - ptr PP;\ - PP = (ptr)((uptr)XCP - CO);\ - if (FWDMARKER(PP) == forward_marker)\ - PP = FWDADDRESS(PP);\ - else\ - PP = copy(PP, SI);\ - *pcp = (ptr)((uptr)PP + CO);\ -} - -/* rkd 2015/06/05: tried to use sse instructions. abandoned the code - because the collector ran slower */ -#define copy_ptrs(ty, p1, p2, n) {\ - ptr *Q1, *Q2, *Q1END;\ - Q1 = (ptr *)UNTYPE((p1),ty);\ - Q2 = (ptr *)UNTYPE((p2),ty);\ - Q1END = (ptr *)((uptr)Q1 + n);\ - while (Q1 != Q1END) *Q1++ = *Q2++;} - static IBOOL search_locked(ptr p) { uptr k; ptr v, *vp, x; v = sorted_locked_objects; @@ -187,10 +264,11 @@ if ((x = vp[k]) == p) return 1; if (k == 0) return 0; if (x < p) vp += k + 1; - } + } } #define locked(p) (sorted_locked_objects != FIX(0) && search_locked(p)) +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ FORCEINLINE void check_trigger_ephemerons(seginfo *si) { /* Registering ephemerons to recheck at the granularity of a segment @@ -204,12 +282,13 @@ } } -static ptr copy(pp, si) ptr pp; seginfo *si; { - ptr p, tf; ITYPE t; IGEN tg; - - if (locked(pp)) return pp; - - tg = target_generation; +static IGEN copy(ptr pp, seginfo *si, ptr *ppp FORMAL_CTGS) { + ptr p, tf; ITYPE t; + IGEN newg = compute_target_generation(si->generation ACTUAL_CTGS); + +#ifndef NO_LOCKED_OLDSPACE_OBJECTS + if (locked(pp)) { *ppp = pp; return newg; } +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ change = 1; @@ -223,7 +302,7 @@ /* relocate to make sure we aren't using an oldspace descriptor that has been overwritten by a forwarding marker, but don't loop on tag-reflexive base descriptor */ - if ((rtd = tf) != pp) relocate(&rtd) + if ((rtd = tf) != pp) relocate_pure(&rtd); n = size_record_inst(UNFIX(RECORDDESCSIZE(rtd))); @@ -231,7 +310,7 @@ { ptr counts; IGEN g; counts = RECORDDESCCOUNTS(rtd); if (counts == Sfalse) { - IGEN grtd = rtd == pp ? tg : GENERATION(rtd); + IGEN grtd = rtd == pp ? newg : GENERATION(rtd); S_G.countof[grtd][countof_rtd_counts] += 1; /* allocate counts struct in same generation as rtd. initialize timestamp & counts */ find_room(space_data, grtd, type_typed_object, size_rtd_counts, counts); @@ -242,11 +321,11 @@ S_G.rtds_with_counts[grtd] = S_cons_in((grtd == 0 ? space_new : space_impure), grtd, rtd, S_G.rtds_with_counts[grtd]); S_G.countof[grtd][countof_pair] += 1; } else { - relocate(&counts) + relocate_pure(&counts); RECORDDESCCOUNTS(rtd) = counts; if (RTDCOUNTSTIMESTAMP(counts) != S_G.gctimestamp[0]) S_fixup_counts(counts); } - RTDCOUNTSIT(counts, tg) += 1; + RTDCOUNTSIT(counts, newg) += 1; } #endif /* ENABLE_OBJECT_COUNTS */ @@ -267,7 +346,7 @@ space_pure_typed_object : space_impure_record; - find_room(s, tg, type_typed_object, n, p); + find_room(s, newg, type_typed_object, n, p); copy_ptrs(type_typed_object, p, pp, n); /* overwrite type field with forwarded descriptor */ @@ -284,14 +363,14 @@ len = Svector_length(pp); n = size_vector(len); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_vector] += 1; - S_G.bytesof[tg][countof_vector] += n; + S_G.countof[newg][countof_vector] += 1; + S_G.bytesof[newg][countof_vector] += n; #endif /* ENABLE_OBJECT_COUNTS */ /* assumes vector lengths look like fixnums; if not, vectors will need their own space */ if ((uptr)tf & vector_immutable_flag) { - find_room(space_pure, tg, type_typed_object, n, p); + find_room(space_pure, newg, type_typed_object, n, p); } else { - find_room(space_impure, tg, type_typed_object, n, p); + find_room(space_impure, newg, type_typed_object, n, p); } copy_ptrs(type_typed_object, p, pp, n); /* pad if necessary */ @@ -300,36 +379,27 @@ iptr n; n = size_string(Sstring_length(pp)); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_string] += 1; - S_G.bytesof[tg][countof_string] += n; -#endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, type_typed_object, n, p); - copy_ptrs(type_typed_object, p, pp, n); - } else if (TYPEP(tf, mask_fxvector, type_fxvector)) { - iptr n; - n = size_fxvector(Sfxvector_length(pp)); -#ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_fxvector] += 1; - S_G.bytesof[tg][countof_fxvector] += n; + S_G.countof[newg][countof_string] += 1; + S_G.bytesof[newg][countof_string] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, type_typed_object, n, p); + find_room(space_data, newg, type_typed_object, n, p); copy_ptrs(type_typed_object, p, pp, n); } else if (TYPEP(tf, mask_bytevector, type_bytevector)) { iptr n; n = size_bytevector(Sbytevector_length(pp)); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_bytevector] += 1; - S_G.bytesof[tg][countof_bytevector] += n; + S_G.countof[newg][countof_bytevector] += 1; + S_G.bytesof[newg][countof_bytevector] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, type_typed_object, n, p); + find_room(space_data, newg, type_typed_object, n, p); copy_ptrs(type_typed_object, p, pp, n); } else if ((iptr)tf == type_tlc) { ptr keyval, next; #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_tlc] += 1; + S_G.countof[newg][countof_tlc] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_impure, tg, type_typed_object, size_tlc, p); + find_room(space_impure, newg, type_typed_object, size_tlc, p); TLCTYPE(p) = type_tlc; INITTLCKEYVAL(p) = keyval = TLCKEYVAL(pp); INITTLCHT(p) = TLCHT(pp); @@ -344,44 +414,53 @@ tlcs_to_rehash = S_cons_in(space_new, 0, p, tlcs_to_rehash); } else if (TYPEP(tf, mask_box, type_box)) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_box] += 1; + S_G.countof[newg][countof_box] += 1; #endif /* ENABLE_OBJECT_COUNTS */ if ((uptr)tf == type_immutable_box) { - find_room(space_pure, tg, type_typed_object, size_box, p); + find_room(space_pure, newg, type_typed_object, size_box, p); } else { - find_room(space_impure, tg, type_typed_object, size_box, p); + find_room(space_impure, newg, type_typed_object, size_box, p); } BOXTYPE(p) = (iptr)tf; INITBOXREF(p) = Sunbox(pp); + } else if (TYPEP(tf, mask_fxvector, type_fxvector)) { + iptr n; + n = size_fxvector(Sfxvector_length(pp)); +#ifdef ENABLE_OBJECT_COUNTS + S_G.countof[newg][countof_fxvector] += 1; + S_G.bytesof[newg][countof_fxvector] += n; +#endif /* ENABLE_OBJECT_COUNTS */ + find_room(space_data, newg, type_typed_object, n, p); + copy_ptrs(type_typed_object, p, pp, n); } else if ((iptr)tf == type_ratnum) { /* not recursive: place in space_data and relocate fields immediately */ #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_ratnum] += 1; + S_G.countof[newg][countof_ratnum] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, + find_room(space_data, newg, type_typed_object, size_ratnum, p); RATTYPE(p) = type_ratnum; RATNUM(p) = RATNUM(pp); RATDEN(p) = RATDEN(pp); - relocate(&RATNUM(p)) - relocate(&RATDEN(p)) + relocate_pure(&RATNUM(p)); + relocate_pure(&RATDEN(p)); } else if ((iptr)tf == type_exactnum) { /* not recursive: place in space_data and relocate fields immediately */ #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_exactnum] += 1; + S_G.countof[newg][countof_exactnum] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, + find_room(space_data, newg, type_typed_object, size_exactnum, p); EXACTNUM_TYPE(p) = type_exactnum; EXACTNUM_REAL_PART(p) = EXACTNUM_REAL_PART(pp); EXACTNUM_IMAG_PART(p) = EXACTNUM_IMAG_PART(pp); - relocate(&EXACTNUM_REAL_PART(p)) - relocate(&EXACTNUM_IMAG_PART(p)) + relocate_pure(&EXACTNUM_REAL_PART(p)); + relocate_pure(&EXACTNUM_IMAG_PART(p)); } else if ((iptr)tf == type_inexactnum) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_inexactnum] += 1; + S_G.countof[newg][countof_inexactnum] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, + find_room(space_data, newg, type_typed_object, size_inexactnum, p); INEXACTNUM_TYPE(p) = type_inexactnum; INEXACTNUM_REAL_PART(p) = INEXACTNUM_REAL_PART(pp); @@ -390,17 +469,16 @@ iptr n; n = size_bignum(BIGLEN(pp)); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_bignum] += 1; - S_G.bytesof[tg][countof_bignum] += n; + S_G.countof[newg][countof_bignum] += 1; + S_G.bytesof[newg][countof_bignum] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, type_typed_object, n, p); + find_room(space_data, newg, type_typed_object, n, p); copy_ptrs(type_typed_object, p, pp, n); } else if (TYPEP(tf, mask_port, type_port)) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_port] += 1; + S_G.countof[newg][countof_port] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_port, tg, - type_typed_object, size_port, p); + find_room(space_port, newg, type_typed_object, size_port, p); PORTTYPE(p) = PORTTYPE(pp); PORTHANDLER(p) = PORTHANDLER(pp); PORTNAME(p) = PORTNAME(pp); @@ -415,51 +493,50 @@ iptr n; n = size_code(CODELEN(pp)); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_code] += 1; - S_G.bytesof[tg][countof_code] += n; + S_G.countof[newg][countof_code] += 1; + S_G.bytesof[newg][countof_code] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_code, tg, type_typed_object, n, p); + find_room(space_code, newg, type_typed_object, n, p); copy_ptrs(type_typed_object, p, pp, n); } else if ((iptr)tf == type_thread) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_thread] += 1; + S_G.countof[newg][countof_thread] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_pure_typed_object, tg, + find_room(space_pure_typed_object, newg, type_typed_object, size_thread, p); TYPEFIELD(p) = (ptr)type_thread; THREADTC(p) = THREADTC(pp); /* static */ } else if ((iptr)tf == type_rtd_counts) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_rtd_counts] += 1; + S_G.countof[newg][countof_rtd_counts] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, type_typed_object, size_rtd_counts, p); + find_room(space_data, newg, type_typed_object, size_rtd_counts, p); copy_ptrs(type_typed_object, p, pp, size_rtd_counts); } else { S_error_abort("copy(gc): illegal type"); - return (ptr)0 /* not reached */; + return newg /* not reached */; } } else if (t == type_pair) { if (si->space == (space_ephemeron | space_old)) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_ephemeron] += 1; + S_G.countof[newg][countof_ephemeron] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_ephemeron, tg, type_pair, size_ephemeron, p); + find_room(space_ephemeron, newg, type_pair, size_ephemeron, p); INITCAR(p) = Scar(pp); INITCDR(p) = Scdr(pp); } else { - ptr qq = Scdr(pp); ptr q; seginfo *qsi; - if (qq != pp && TYPEBITS(qq) == type_pair && (qsi = MaybeSegInfo(ptr_get_segment(qq))) != NULL && qsi->space == si->space && FWDMARKER(qq) != forward_marker && !locked(qq)) { - check_trigger_ephemerons(qsi); + ptr qq = Scdr(pp); ptr q; + if (qq != pp && TYPEBITS(qq) == type_pair && ptr_get_segment(qq) == ptr_get_segment(pp) && FWDMARKER(qq) != forward_marker && !locked(qq)) { if (si->space == (space_weakpair | space_old)) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_weakpair] += 2; + S_G.countof[newg][countof_weakpair] += 2; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_weakpair, tg, type_pair, 2 * size_pair, p); + find_room(space_weakpair, newg, type_pair, 2 * size_pair, p); } else { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_pair] += 2; + S_G.countof[newg][countof_pair] += 2; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_impure, tg, type_pair, 2 * size_pair, p); + find_room(space_impure, newg, type_pair, 2 * size_pair, p); } q = (ptr)((uptr)p + size_pair); INITCAR(p) = Scar(pp); @@ -471,14 +548,14 @@ } else { if (si->space == (space_weakpair | space_old)) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_weakpair] += 1; + S_G.countof[newg][countof_weakpair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_weakpair, tg, type_pair, size_pair, p); + find_room(space_weakpair, newg, type_pair, size_pair, p); } else { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_pair] += 1; + S_G.countof[newg][countof_pair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_impure, tg, type_pair, size_pair, p); + find_room(space_impure, newg, type_pair, size_pair, p); } INITCAR(p) = Scar(pp); INITCDR(p) = qq; @@ -490,12 +567,12 @@ /* relocate before accessing code type field, which otherwise might be a forwarding marker */ code = CLOSCODE(pp); - relocate(&code) + relocate_pure(&code); if (CODETYPE(code) & (code_flag_continuation << code_flags_offset)) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_continuation] += 1; + S_G.countof[newg][countof_continuation] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_continuation, tg, + find_room(space_continuation, newg, type_closure, size_continuation, p); SETCLOSCODE(p,code); /* don't promote one-shots */ @@ -512,10 +589,10 @@ len = CLOSLEN(pp); n = size_closure(len); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_closure] += 1; - S_G.bytesof[tg][countof_closure] += n; + S_G.countof[newg][countof_closure] += 1; + S_G.bytesof[newg][countof_closure] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_pure, tg, type_closure, n, p); + find_room(space_pure, newg, type_closure, n, p); copy_ptrs(type_closure, p, pp, n); SETCLOSCODE(p,code); /* pad if necessary */ @@ -523,9 +600,9 @@ } } else if (t == type_symbol) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_symbol] += 1; + S_G.countof[newg][countof_symbol] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_symbol, tg, type_symbol, size_symbol, p); + find_room(space_symbol, newg, type_symbol, size_symbol, p); INITSYMVAL(p) = SYMVAL(pp); INITSYMPVAL(p) = SYMPVAL(pp); INITSYMPLIST(p) = SYMPLIST(pp); @@ -534,33 +611,35 @@ INITSYMHASH(p) = SYMHASH(pp); } else if (t == type_flonum) { #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_flonum] += 1; + S_G.countof[newg][countof_flonum] += 1; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, tg, type_flonum, size_flonum, p); + find_room(space_data, newg, type_flonum, size_flonum, p); FLODAT(p) = FLODAT(pp); /* no room for forwarding address, so let 'em be duplicated */ - return p; + *ppp = p; + return newg; } else { S_error_abort("copy(gc): illegal type"); - return (ptr)0 /* not reached */; + return newg /* not reached */; } FWDMARKER(pp) = forward_marker; FWDADDRESS(pp) = p; - return p; + *ppp = p; + return newg; } -static void sweep_ptrs(pp, n) ptr *pp; iptr n; { +static void sweep_locked_ptrs(ptr *pp, iptr n FORMAL_CTGS) { ptr *end = pp + n; while (pp != end) { - relocate(pp) + relocate_pure(pp); pp += 1; } } -static void sweep(ptr tc, ptr p, IBOOL sweep_pure) { +static void sweep_locked(ptr tc, ptr p, IBOOL sweep_pure FORMAL_CTGS) { ptr tf; ITYPE t; if ((t = TYPEBITS(p)) == type_pair) { @@ -569,75 +648,76 @@ add_ephemeron_to_pending(p); else { if (s != space_weakpair) { - relocate(&INITCAR(p)) + relocate_pure(&INITCAR(p)); } - relocate(&INITCDR(p)) + relocate_pure(&INITCDR(p)); } } else if (t == type_closure) { if (sweep_pure) { ptr code; code = CLOSCODE(p); - relocate(&code) - SETCLOSCODE(p,code); + relocate_pure(&code); + SETCLOSCODE(p,code); if (CODETYPE(code) & (code_flag_continuation << code_flags_offset)) - sweep_continuation(p); + sweep_continuation(p ACTUAL_CTGS); else - sweep_ptrs(&CLOSIT(p, 0), CLOSLEN(p)); + sweep_locked_ptrs(&CLOSIT(p, 0), CLOSLEN(p) ACTUAL_CTGS); } } else if (t == type_symbol) { - sweep_symbol(p); + sweep_symbol(p, 0 ACTUAL_CTGS); } else if (t == type_flonum) { /* nothing to sweep */; /* typed objects */ } else if (tf = TYPEFIELD(p), TYPEP(tf, mask_vector, type_vector)) { - sweep_ptrs(&INITVECTIT(p, 0), Svector_length(p)); + sweep_locked_ptrs(&INITVECTIT(p, 0), Svector_length(p) ACTUAL_CTGS); } else if (TYPEP(tf, mask_string, type_string) || TYPEP(tf, mask_bytevector, type_bytevector) || TYPEP(tf, mask_fxvector, type_fxvector)) { /* nothing to sweep */; } else if (TYPEP(tf, mask_record, type_record)) { - relocate(&RECORDINSTTYPE(p)); + relocate_pure(&RECORDINSTTYPE(p)); if (sweep_pure || RECORDDESCMPM(RECORDINSTTYPE(p)) != FIX(0)) { - sweep_record(p); + sweep_record(p, 0 ACTUAL_CTGS); } } else if (TYPEP(tf, mask_box, type_box)) { - relocate(&INITBOXREF(p)) + relocate_pure(&INITBOXREF(p)); } else if ((iptr)tf == type_ratnum) { if (sweep_pure) { - relocate(&RATNUM(p)) - relocate(&RATDEN(p)) + relocate_pure(&RATNUM(p)); + relocate_pure(&RATDEN(p)); } } else if ((iptr)tf == type_exactnum) { if (sweep_pure) { - relocate(&EXACTNUM_REAL_PART(p)) - relocate(&EXACTNUM_IMAG_PART(p)) + relocate_pure(&EXACTNUM_REAL_PART(p)); + relocate_pure(&EXACTNUM_IMAG_PART(p)); } } else if ((iptr)tf == type_inexactnum) { /* nothing to sweep */; } else if (TYPEP(tf, mask_bignum, type_bignum)) { /* nothing to sweep */; } else if (TYPEP(tf, mask_port, type_port)) { - sweep_port(p); + sweep_port(p, 0 ACTUAL_CTGS); } else if (TYPEP(tf, mask_code, type_code)) { if (sweep_pure) { - sweep_code_object(tc, p); + sweep_code_object(tc, p ACTUAL_CTGS); } } else if ((iptr)tf == type_thread) { - sweep_thread(p); + sweep_thread(p ACTUAL_CTGS); } else if ((iptr)tf == type_rtd_counts) { /* nothing to sweep */; } else { - S_error_abort("sweep(gc): illegal type"); + S_error_abort("sweep_locked(gc): illegal type"); } } -static ptr copy_stack(old, length, clength) ptr old; iptr *length, clength; { - iptr n, m; ptr new; +static ptr copy_stack(ptr old, iptr *length, iptr clength FORMAL_CTGS) { + iptr n, m; ptr new; IGEN newg; /* Don't copy non-oldspace stacks, since we may be sweeping a locked - continuation that is older than target_generation. Doing so would - be a waste of work anyway. */ + continuation. Doing so would be a waste of work anyway. */ if (!OLDSPACE(old)) return old; + newg = compute_target_generation(GENERATION(old) ACTUAL_CTGS); + /* reduce headroom created for excessively large frames (typically resulting from apply with long lists) */ if ((n = *length) != clength && n > default_stack_size && n > (m = clength + one_shot_headroom)) { *length = n = m; @@ -645,10 +725,10 @@ n = ptr_align(n); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[target_generation][countof_stack] += 1; - S_G.bytesof[target_generation][countof_stack] += n; + S_G.countof[newg][countof_stack] += 1; + S_G.bytesof[newg][countof_stack] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, target_generation, typemod, n, new); + find_room(space_data, newg, typemod, n, new); n = ptr_align(clength); /* warning: stack may have been left non-double-aligned by split_and_resize */ copy_ptrs(typemod, new, old, n); @@ -666,20 +746,12 @@ next = GUARDIANNEXT(ls); \ \ if (FILTER(si, obj)) { \ - if (!(si->space & space_old) || locked(obj)) { \ - INITGUARDIANNEXT(ls) = pend_hold_ls; \ - pend_hold_ls = ls; \ - } else if (FWDMARKER(obj) == forward_marker && TYPEBITS(obj) != type_flonum) { \ - INITGUARDIANOBJ(ls) = FWDADDRESS(obj); \ + if (!(si->space & space_old) || locked(obj) || ((FWDMARKER(obj) == forward_marker && TYPEBITS(obj) != type_flonum) && (INITGUARDIANOBJ(ls) = FWDADDRESS(obj), 1))) { \ INITGUARDIANNEXT(ls) = pend_hold_ls; \ pend_hold_ls = ls; \ } else { \ tconc = GUARDIANTCONC(ls); \ - if (!OLDSPACE(tconc) || locked(tconc)) { \ - INITGUARDIANNEXT(ls) = final_ls; \ - final_ls = ls; \ - } else if (FWDMARKER(tconc) == forward_marker) { \ - INITGUARDIANTCONC(ls) = FWDADDRESS(tconc); \ + if (!OLDSPACE(tconc) || locked(tconc) || ((FWDMARKER(tconc) == forward_marker) && (INITGUARDIANTCONC(ls) = FWDADDRESS(tconc), 1))) { \ INITGUARDIANNEXT(ls) = final_ls; \ final_ls = ls; \ } else { \ @@ -691,12 +763,21 @@ } \ } -void GCENTRY(ptr tc, IGEN mcg, IGEN tg) { +/* tc: thread context + * max_cg: maximum copied generation, i.e., maximum generation subject to collection. max_cg >= 0 && max_cg <= 255. + * min_tg: minimum target generation. max_tg == 0 ? min_tg == 0 : min_tg > 0 && min_tg <= max_tg; + * max_tg: maximum target generation. max_tg == max_cg || max_tg == max_cg + 1. + * Objects in generation g are collected into generation MIN(max_tg, MAX(min_tg, g+1)). + */ +void GCENTRY GCENTRY_PROTO(ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg) { IGEN g; ISPC s; seginfo *oldspacesegments, *si, *nextsi; ptr ls; bucket_pointer_list *buckets_to_rebuild; +#ifndef NO_LOCKED_OLDSPACE_OBJECTS ptr locked_oldspace_objects; +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ + DECLARE_CTGS(max_cg, min_tg, max_tg); /* flush instruction cache: effectively clear_code_mod but safer */ for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { @@ -705,6 +786,9 @@ } tlcs_to_rehash = Snil; +#ifndef NO_DIRTY_NEWSPACE_POINTERS + new_dirty_cards = NULL; +#endif /* !NO_DIRTY_NEWSPACE_POINTERS */ for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { ptr tc = (ptr)THREADTC(Scar(ls)); @@ -716,44 +800,48 @@ if (S_checkheap) S_check_heap(0); #ifdef DEBUG -(void)printf("mcg = %x; go? ", mcg); (void)fflush(stdout); (void)getc(stdin); +(void)printf("max_cg = %x; go? ", max_cg); (void)fflush(stdout); (void)getc(stdin); #endif - target_generation = tg; - max_copied_generation = mcg; - /* set up generations to be copied */ - for (s = 0; s <= max_real_space; s++) - for (g = 0; g <= mcg; g++) { - S_G.base_loc[s][g] = FIX(0); - S_G.first_loc[s][g] = FIX(0); - S_G.next_loc[s][g] = FIX(0); - S_G.bytes_left[s][g] = 0; - S_G.bytes_of_space[s][g] = 0; - } + for (g = 0; g <= max_cg; g++) { + S_G.bytes_of_generation[g] = 0; + for (s = 0; s <= max_real_space; s++) { + S_G.base_loc[g][s] = FIX(0); + S_G.first_loc[g][s] = FIX(0); + S_G.next_loc[g][s] = FIX(0); + S_G.bytes_left[g][s] = 0; + S_G.bytes_of_space[g][s] = 0; + } + } /* set up target generation sweep_loc and orig_next_loc pointers */ - for (s = 0; s <= max_real_space; s++) - orig_next_loc[s] = sweep_loc[s] = S_G.next_loc[s][tg]; + for (g = min_tg; g <= max_tg; g += 1) { + for (s = 0; s <= max_real_space; s++) { + /* for all but max_tg (and max_tg as well, if max_tg == max_cg), this + will set orig_net_loc and sweep_loc to 0 */ + orig_next_loc[g][s] = sweep_loc[g][s] = S_G.next_loc[g][s]; + } + } /* mark segments from which objects are to be copied */ oldspacesegments = (seginfo *)NULL; - for (s = 0; s <= max_real_space; s += 1) { - for (g = 0; g <= mcg; g += 1) { - for (si = S_G.occupied_segments[s][g]; si != NULL; si = nextsi) { + for (g = 0; g <= max_cg; g += 1) { + for (s = 0; s <= max_real_space; s += 1) { + for (si = S_G.occupied_segments[g][s]; si != NULL; si = nextsi) { nextsi = si->next; si->next = oldspacesegments; oldspacesegments = si; si->space = s | space_old; /* NB: implicitly clearing space_locked */ } - S_G.occupied_segments[s][g] = NULL; + S_G.occupied_segments[g][s] = NULL; } } #ifdef ENABLE_OBJECT_COUNTS /* clear object counts & bytes for copied generations; bump timestamp */ {INT i; - for (g = 0; g <= mcg; g += 1) { + for (g = 0; g <= max_cg; g += 1) { for (i = 0; i < countof_types; i += 1) { S_G.countof[g][i] = 0; S_G.bytesof[g][i] = 0; @@ -769,6 +857,7 @@ /* pre-collection handling of locked objects. */ +#ifndef NO_LOCKED_OLDSPACE_OBJECTS /* create a single sorted_locked_object vector for all copied generations * to accelerate the search for locked objects in copy(). copy wants * a vector of some size n=2^k-1 so it doesn't have to check bounds */ @@ -776,7 +865,7 @@ /* note: append_bang and dosort reuse pairs, which can result in older * objects pointing to newer ones...but we don't care since they are all * oldspace and going away after this collection. */ - for (g = 0; g <= mcg; g += 1) { + for (g = 0; g <= max_cg; g += 1) { ls = append_bang(S_G.locked_objects[g], ls); S_G.locked_objects[g] = Snil; S_G.unlocked_objects[g] = Snil; @@ -809,23 +898,27 @@ /* fill remaining slots with largest ptr value */ while (i < n) { INITVECTIT(v, i) = MAXPTR; i += 1; } } +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ /* sweep older locked and unlocked objects */ - for (g = mcg + 1; g <= static_generation; INCRGEN(g)) { + for (g = max_cg + 1; g <= static_generation; INCRGEN(g)) { for (ls = S_G.locked_objects[g]; ls != Snil; ls = Scdr(ls)) - sweep(tc, Scar(ls), 0); + sweep_locked(tc, Scar(ls), 0 ACTUAL_CTGS); for (ls = S_G.unlocked_objects[g]; ls != Snil; ls = Scdr(ls)) - sweep(tc, Scar(ls), 0); + sweep_locked(tc, Scar(ls), 0 ACTUAL_CTGS); } +#ifndef NO_LOCKED_OLDSPACE_OBJECTS /* sweep younger locked objects, working from sorted vector to avoid redundant sweeping of duplicates */ if (sorted_locked_objects != FIX(0)) { uptr i; ptr x, v, *vp; v = sorted_locked_objects; i = Svector_length(v); x = *(vp = &INITVECTIT(v, 0)); - do sweep(tc, x, 1); while (--i != 0 && (x = *++vp) != MAXPTR); + do sweep_locked(tc, x, 1 ACTUAL_CTGS); while (--i != 0 && (x = *++vp) != MAXPTR); } +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ + /* sweep non-oldspace threads, since any thread may have an active stack */ for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { ptr thread; @@ -834,13 +927,13 @@ if (FWDMARKER(ls) == forward_marker) ls = FWDADDRESS(ls); thread = Scar(ls); - if (!OLDSPACE(thread)) sweep_thread(thread); + if (!OLDSPACE(thread)) sweep_thread(thread ACTUAL_CTGS); } - relocate(&S_threads) + relocate_pure(&S_threads); /* relocate nonempty oldspace symbols and set up list of buckets to rebuild later */ buckets_to_rebuild = NULL; - for (g = 0; g <= mcg; g += 1) { + for (g = 0; g <= max_cg; g += 1) { bucket_list *bl, *blnext; bucket *b; bucket_pointer_list *bpl; bucket **oblist_cell; ptr sym; iptr idx; for (bl = S_G.buckets_of_generation[g]; bl != NULL; bl = blnext) { blnext = bl->cdr; @@ -862,8 +955,10 @@ } if (FWDMARKER(sym) != forward_marker && /* coordinate with alloc.c */ - (SYMVAL(sym) != sunbound || SYMPLIST(sym) != Snil || SYMSPLIST(sym) != Snil)) - (void)copy(sym, SegInfo(ptr_get_segment(sym))); + (SYMVAL(sym) != sunbound || SYMPLIST(sym) != Snil || SYMSPLIST(sym) != Snil)) { + ptr ignore; + copy(sym, SegInfo(ptr_get_segment(sym)), &ignore ACTUAL_CTGS); + } } S_G.buckets_of_generation[g] = NULL; } @@ -871,16 +966,16 @@ /* relocate the protected C pointers */ {uptr i; for (i = 0; i < S_G.protect_next; i++) - relocate(S_G.protected[i]) + relocate_pure(S_G.protected[i]); } /* sweep areas marked dirty by assignments into older generations */ - sweep_dirty(); + sweep_dirty(ONLY_ACTUAL_CTGS); - sweep_generation(tc, tg); + sweep_generation(tc ACTUAL_CTGS); /* handle guardians */ - { ptr hold_ls, pend_hold_ls, final_ls, pend_final_ls; + { ptr pend_hold_ls, final_ls, pend_final_ls; ptr obj, rep, tconc, next; /* move each entry in guardian lists into one of: @@ -895,7 +990,7 @@ GUARDIANENTRIES(tc) = Snil; } - for (g = 0; g <= mcg; g += 1) { + for (g = 0; g <= max_cg; g += 1) { partition_guardians(S_G.guardians[g], ALWAYSTRUE); S_G.guardians[g] = Snil; } @@ -907,7 +1002,6 @@ * for entry in pend_final_ls, obj and tconc are OLDSPACE and !locked */ - hold_ls = S_G.guardians[tg]; while (1) { IBOOL relocate_rep = final_ls != Snil; @@ -916,16 +1010,26 @@ ptr old_end, new_end; rep = GUARDIANREP(ls); - relocate(&rep); + /* ftype_guardian_rep is a marker for reference-counted ftype pointer */ + if (rep == ftype_guardian_rep) { + INT b; uptr *addr; + rep = GUARDIANOBJ(ls); + if (FWDMARKER(rep) == forward_marker) rep = FWDADDRESS(rep); + /* Caution: Building in assumption about shape of an ftype pointer */ + addr = RECORDINSTIT(rep, 0); + LOCKED_DECR(addr, b); + if (!b) continue; + } + + relocate_pure(&rep); /* if tconc was old it's been forwarded */ tconc = GUARDIANTCONC(ls); old_end = Scdr(tconc); - /* allocating pair in tg means it will be swept, which is wasted effort, but should cause no harm */ - new_end = S_cons_in(space_impure, tg, FIX(0), FIX(0)); + new_end = S_cons_in(space_impure, 0, FIX(0), FIX(0)); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_pair] += 1; + S_G.countof[0][countof_pair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ SETCAR(old_end,rep); @@ -933,42 +1037,47 @@ SETCDR(tconc,new_end); } - /* discard static pend_hold_ls entries */ - if (tg != static_generation) { - /* copy each entry in pend_hold_ls into hold_ls if tconc accessible */ - ls = pend_hold_ls; pend_hold_ls = Snil; - for ( ; ls != Snil; ls = next) { - tconc = GUARDIANTCONC(ls); next = GUARDIANNEXT(ls); ptr p; + /* copy each entry in pend_hold_ls into its target generation if tconc accessible */ + ls = pend_hold_ls; pend_hold_ls = Snil; + for ( ; ls != Snil; ls = next) { + ptr p; + + next = GUARDIANNEXT(ls); + + /* discard static pend_hold_ls entries */ + g = compute_target_generation(GENERATION(ls) ACTUAL_CTGS); + if (g == static_generation) continue; + + tconc = GUARDIANTCONC(ls); - if (OLDSPACE(tconc) && !locked(tconc)) { - if (FWDMARKER(tconc) == forward_marker) - tconc = FWDADDRESS(tconc); - else { - INITGUARDIANNEXT(ls) = pend_hold_ls; - pend_hold_ls = ls; - continue; - } + if (OLDSPACE(tconc) && !locked(tconc)) { + if (FWDMARKER(tconc) == forward_marker) + tconc = FWDADDRESS(tconc); + else { + INITGUARDIANNEXT(ls) = pend_hold_ls; + pend_hold_ls = ls; + continue; } - - rep = GUARDIANREP(ls); - relocate(&rep); - relocate_rep = 1; + } + + rep = GUARDIANREP(ls); + relocate_pure(&rep); + relocate_rep = 1; #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_guardian] += 1; -#endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_pure, tg, typemod, size_guardian_entry, p); - INITGUARDIANOBJ(p) = GUARDIANOBJ(ls); - INITGUARDIANREP(p) = rep; - INITGUARDIANTCONC(p) = tconc; - INITGUARDIANNEXT(p) = hold_ls; - hold_ls = p; - } + S_G.countof[g][countof_guardian] += 1; +#endif /* ENABLE_OBJECT_COUNTS */ + find_room(space_pure, g, typemod, size_guardian_entry, p); + INITGUARDIANOBJ(p) = GUARDIANOBJ(ls); + INITGUARDIANREP(p) = rep; + INITGUARDIANTCONC(p) = tconc; + INITGUARDIANNEXT(p) = S_G.guardians[g]; + S_G.guardians[g] = p; } if (!relocate_rep) break; - sweep_generation(tc, tg); + sweep_generation(tc ACTUAL_CTGS); /* move each entry in pend_final_ls into one of: * final_ls if tconc forwarded @@ -987,19 +1096,17 @@ } } } - - S_G.guardians[tg] = hold_ls; } /* handle weak pairs */ - resweep_dirty_weak_pairs(); - resweep_weak_pairs(tg); + resweep_dirty_weak_pairs(ONLY_ACTUAL_CTGS); + resweep_weak_pairs(ONLY_ACTUAL_CTGS); /* still-pending ephemerons all go to bwp */ clear_trigger_ephemerons(); /* forward car fields of locked and unlocked older weak pairs */ - for (g = mcg + 1; g <= static_generation; INCRGEN(g)) { + for (g = max_cg + 1; g <= static_generation; INCRGEN(g)) { for (ls = S_G.locked_objects[g]; ls != Snil; ls = Scdr(ls)) { ptr x = Scar(ls); if (Spairp(x) && (SPACE(x) & ~(space_old|space_locked)) == space_weakpair) @@ -1012,6 +1119,7 @@ } } +#ifndef NO_LOCKED_OLDSPACE_OBJECTS /* forward car fields of locked oldspace weak pairs */ if (sorted_locked_objects != FIX(0)) { uptr i; ptr x, v, *vp; @@ -1024,33 +1132,34 @@ } } while (--i != 0 && (x = *++vp) != MAXPTR); } +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ /* post-gc oblist handling. rebuild old buckets in the target generation, pruning unforwarded symbols */ - { bucket_list *bl, *blnext; bucket *b, *bnext; bucket_pointer_list *bpl; bucket **pb; ptr sym; - bl = tg == static_generation ? NULL : S_G.buckets_of_generation[tg]; + { bucket_list *bl; bucket *b, *bnext; bucket_pointer_list *bpl; bucket **pb; ptr sym; for (bpl = buckets_to_rebuild; bpl != NULL; bpl = bpl->cdr) { pb = bpl->car; for (b = (bucket *)((uptr)*pb - 1); b != NULL && ((uptr)(b->next) & 1); b = bnext) { bnext = (bucket *)((uptr)(b->next) - 1); sym = b->sym; if (locked(sym) || (FWDMARKER(sym) == forward_marker && ((sym = FWDADDRESS(sym)) || 1))) { - find_room(space_data, tg, typemod, sizeof(bucket), b); + IGEN g = GENERATION(sym); + find_room(space_data, g, typemod, sizeof(bucket), b); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_oblist] += 1; - S_G.bytesof[tg][countof_oblist] += sizeof(bucket); + S_G.countof[g][countof_oblist] += 1; + S_G.bytesof[g][countof_oblist] += sizeof(bucket); #endif /* ENABLE_OBJECT_COUNTS */ b->sym = sym; *pb = b; pb = &b->next; - if (tg != static_generation) { - blnext = bl; - find_room(space_data, tg, typemod, sizeof(bucket_list), bl); + if (g != static_generation) { + find_room(space_data, g, typemod, sizeof(bucket_list), bl); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_oblist] += 1; - S_G.bytesof[tg][countof_oblist] += sizeof(bucket_list); + S_G.countof[g][countof_oblist] += 1; + S_G.bytesof[g][countof_oblist] += sizeof(bucket_list); #endif /* ENABLE_OBJECT_COUNTS */ - bl->cdr = blnext; bl->car = b; + bl->cdr = S_G.buckets_of_generation[g]; + S_G.buckets_of_generation[g] = bl; } } else { S_G.oblist_count -= 1; @@ -1058,96 +1167,110 @@ } *pb = b; } - if (tg != static_generation) S_G.buckets_of_generation[tg] = bl; } /* rebuild rtds_with_counts lists, dropping otherwise inaccessible rtds */ - { IGEN g; ptr ls, p, newls = tg == mcg ? Snil : S_G.rtds_with_counts[tg]; - for (g = 0; g <= mcg; g += 1) { - for (ls = S_G.rtds_with_counts[g], S_G.rtds_with_counts[g] = Snil; ls != Snil; ls = Scdr(ls)) { + { IGEN g, newg; ptr ls, lsls, p; + for (g = 0, lsls = Snil; g <= max_cg; g += 1) { + lsls = S_cons_in(space_new, 0, S_G.rtds_with_counts[g], lsls); + S_G.rtds_with_counts[g] = Snil; + } + for (; lsls != Snil; lsls = Scdr(lsls)) { + for (ls = Scar(lsls); ls != Snil; ls = Scdr(ls)) { p = Scar(ls); - if (!OLDSPACE(p) || locked(p)) { - newls = S_cons_in(space_impure, tg, p, newls); - S_G.countof[tg][countof_pair] += 1; - } else if (FWDMARKER(p) == forward_marker) { - newls = S_cons_in(space_impure, tg, FWDADDRESS(p), newls); - S_G.countof[tg][countof_pair] += 1; + if (!OLDSPACE(p) || locked(p) || (FWDMARKER(p) == forward_marker && (p = FWDADDRESS(p), 1))) { + newg = GENERATION(p); +#ifdef ENABLE_OBJECT_COUNTS + S_G.countof[newg][countof_pair] += 1; +#endif /* ENABLE_OBJECT_COUNTS */ + S_G.rtds_with_counts[newg] = S_cons_in(space_impure, newg, p, S_G.rtds_with_counts[newg]); } } } - S_G.rtds_with_counts[tg] = newls; } #ifndef WIN32 /* rebuild child_process list, reaping any that have died and refusing to promote into the static generation. */ - { - ptr old_ls, new_ls; IGEN gtmp, cpgen; - cpgen = tg == static_generation ? S_G.max_nonstatic_generation : tg; - new_ls = cpgen <= mcg ? Snil : S_child_processes[cpgen]; - for (gtmp = 0; gtmp <= mcg; gtmp += 1) { - for (old_ls = S_child_processes[gtmp]; old_ls != Snil; old_ls = Scdr(old_ls)) { - INT pid = UNFIX(Scar(old_ls)), status, retpid; + { IGEN g, newg; ptr ls, newls; + for (g = max_cg; g >= 0; g -= 1) { + newg = compute_target_generation(g ACTUAL_CTGS); + if (newg == static_generation) newg = S_G.max_nonstatic_generation; + newls = newg == g ? Snil : S_child_processes[newg]; + for (ls = S_child_processes[g], S_child_processes[g] = Snil; ls != Snil; ls = Scdr(ls)) { + INT pid = UNFIX(Scar(ls)), status, retpid; retpid = waitpid(pid, &status, WNOHANG); if (retpid == 0 || (retpid == pid && !(WIFEXITED(status) || WIFSIGNALED(status)))) { - new_ls = S_cons_in(space_impure, cpgen, FIX(pid), new_ls); + newls = S_cons_in(space_impure, newg, FIX(pid), newls); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[cpgen][countof_pair] += 1; + S_G.countof[newg][countof_pair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ } } - S_child_processes[gtmp] = Snil; + S_child_processes[newg] = newls; } - S_child_processes[cpgen] = new_ls; } #endif /* WIN32 */ +#ifndef NO_LOCKED_OLDSPACE_OBJECTS /* post-collection handling of locked objects. This must come after any use of relocate or any other use of sorted_locked_objects */ if (sorted_locked_objects != FIX(0)) { - ptr ls, lsnew, x, v, *vp; iptr i; + ptr ls, x, v, *vp; iptr i; uptr last_seg = 0, addr, seg, n; IGEN newg = 0; v = sorted_locked_objects; - lsnew = tg == mcg ? Snil : S_G.locked_objects[tg]; /* work from sorted vector to avoid redundant processing of duplicates */ i = Svector_length(v); x = *(vp = &INITVECTIT(v, 0)); do { - ptr a1, a2; uptr seg; uptr n; - /* promote the segment(s) containing x to the target generation. reset the space_old bit to prevent the segments from being reclaimed; set the locked bit to prevent sweeping by sweep_dirty (since the segments may contain a mix of objects, many of which have been discarded). */ + addr = (uptr)UNTYPE_ANY(x); + if ((seg = addr_get_segment(addr)) == last_seg) { + /* the generation has already been updated on this segment, and newg is still valid. + this isn't just an optimization. if we recompute newg based on the already updated + generation, we could get the wrong result. good thing the vector is sorted. */ + seg += 1; + } else { + newg = compute_target_generation(GENERATION(x) ACTUAL_CTGS); + } + n = size_object(x); + #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[target_generation][countof_locked] += 1; - S_G.bytesof[target_generation][countof_locked] += n; + S_G.countof[newg][countof_locked] += 1; + S_G.bytesof[newg][countof_locked] += n; #endif /* ENABLE_OBJECT_COUNTS */ - a1 = UNTYPE_ANY(x); - a2 = (ptr)((uptr)a1 + n - 1); - for (seg = addr_get_segment(a1); seg <= addr_get_segment(a2); seg += 1) { + addr += n - 1; + last_seg = addr_get_segment(addr); + while (seg <= last_seg) { seginfo *si = SegInfo(seg); - si->generation = tg; + si->generation = newg; si->space = (si->space & ~space_old) | space_locked; + seg += 1; } } while (--i != 0 && (x = *++vp) != MAXPTR); - /* append entire list, including duplicates, to target-generation list. we do so - even when tg == static_generation so we can keep track of static objects that need to + /* add every object, including duplicates, to target-generation list(s). we do so + even when newg == static_generation so we can keep track of static objects that need to be swept at the start of collection. (we could weed out pure static objects.) */ + for (newg = min_tg; newg < max_tg; newg += 1) S_G.locked_objects[newg] = Snil; + if (max_tg == max_cg) S_G.locked_objects[max_cg] = Snil; for (ls = locked_oldspace_objects; ls != Snil; ls = Scdr(ls)) { - lsnew = S_cons_in(space_impure, tg, Scar(ls), lsnew); + x = Scar(ls); + newg = GENERATION(x); + S_G.locked_objects[newg] = S_cons_in(space_impure, newg, x, S_G.locked_objects[newg]); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[tg][countof_pair] += 1; + S_G.countof[newg][countof_pair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ } - - S_G.locked_objects[tg] = lsnew; } +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ /* move old space segments to empty space */ for (si = oldspacesegments; si != NULL; si = nextsi) { @@ -1158,8 +1281,8 @@ s &= ~space_locked; g = si->generation; if (g == static_generation) S_G.number_of_nonstatic_segments -= 1; - si->next = S_G.occupied_segments[s][g]; - S_G.occupied_segments[s][g] = si; + si->next = S_G.occupied_segments[g][s]; + S_G.occupied_segments[g][s] = si; } else { chunkinfo *chunk = si->chunk; if (si->generation != static_generation) S_G.number_of_nonstatic_segments -= 1; @@ -1168,7 +1291,7 @@ si->next = chunk->unused_segs; chunk->unused_segs = si; #ifdef WIPECLEAN - memset((void *)build_ptr(seg,0), 0xc7, bytes_per_segment); + memset((void *)build_ptr(si->number,0), 0xc7, bytes_per_segment); #endif if ((chunk->nused_segs -= 1) == 0) { if (chunk->bytes != (minimum_segment_request + 1) * bytes_per_segment) { @@ -1184,10 +1307,20 @@ } } - if (mcg >= S_G.min_free_gen) S_free_chunks(); + S_G.g0_bytes_after_last_gc = S_G.bytes_of_generation[0]; + + if (max_cg >= S_G.min_free_gen) S_free_chunks(); S_flush_instruction_cache(tc); +#ifndef NO_DIRTY_NEWSPACE_POINTERS + /* mark dirty those newspace cards to which we've added wrong-way pointers */ + { dirtycardinfo *ndc; + for (ndc = new_dirty_cards; ndc != NULL; ndc = ndc->next) + S_mark_card_dirty(ndc->card, ndc->youngest); + } +#endif /* !NO_DIRTY_NEWSPACE_POINTERS */ + if (S_checkheap) S_check_heap(1); /* post-collection rehashing of tlcs. @@ -1233,30 +1366,36 @@ } S_resize_oblist(); + + /* tell profile_release_counters to look for bwp'd counters at least through max_tg */ + if (S_G.prcgeneration < max_tg) S_G.prcgeneration = max_tg; } -#define sweep_space(s, body)\ - slp = &sweep_loc[s];\ - nlp = &S_G.next_loc[s][g];\ - if (*slp == 0) *slp = S_G.first_loc[s][g];\ - pp = (ptr *)*slp;\ - while (pp != (nl = (ptr *)*nlp))\ - do\ - if ((p = *pp) == forward_marker)\ - pp = (ptr *)*(pp + 1);\ - else\ - body\ - while (pp != nl);\ - *slp = (ptr)pp; - -static void resweep_weak_pairs(g) IGEN g; { - ptr *slp, *nlp; ptr *pp, p, *nl; - - sweep_loc[space_weakpair] = S_G.first_loc[space_weakpair][g]; - sweep_space(space_weakpair, { - forward_or_bwp(pp, p); - pp += 2; - }) +#define sweep_space(s, from_g, body) {\ + slp = &sweep_loc[from_g][s];\ + nlp = &S_G.next_loc[from_g][s];\ + if (*slp == 0) *slp = S_G.first_loc[from_g][s];\ + pp = (ptr *)*slp;\ + while (pp != (nl = (ptr *)*nlp))\ + do\ + if ((p = *pp) == forward_marker)\ + pp = (ptr *)*(pp + 1);\ + else\ + body\ + while (pp != nl);\ + *slp = (ptr)pp; \ +} + +static void resweep_weak_pairs(ONLY_FORMAL_CTGS) { + IGEN from_g; ptr *slp, *nlp; ptr *pp, p, *nl; + + for (from_g = MIN_TG; from_g <= MAX_TG; from_g += 1) { + sweep_loc[from_g][space_weakpair] = orig_next_loc[from_g][space_weakpair]; + sweep_space(space_weakpair, from_g, { + forward_or_bwp(pp, p); + pp += 2; + }) + } } static void forward_or_bwp(pp, p) ptr *pp; ptr p; { @@ -1271,82 +1410,85 @@ } } -static void sweep_generation(tc, g) ptr tc; IGEN g; { - ptr *slp, *nlp; ptr *pp, p, *nl; +static void sweep_generation(ptr tc FORMAL_CTGS) { + IGEN from_g; ptr *slp, *nlp; ptr *pp, p, *nl; do { change = 0; - sweep_space(space_impure, { - relocate_help(pp, p) - p = *(pp += 1); - relocate_help(pp, p) - pp += 1; - }) - - sweep_space(space_symbol, { - p = TYPE((ptr)pp, type_symbol); - sweep_symbol(p); - pp += size_symbol / sizeof(ptr); - }) - - sweep_space(space_port, { - p = TYPE((ptr)pp, type_typed_object); - sweep_port(p); - pp += size_port / sizeof(ptr); - }) - - sweep_space(space_weakpair, { - p = *(pp += 1); - relocate_help(pp, p) - pp += 1; - }) - - sweep_space(space_ephemeron, { - p = TYPE((ptr)pp, type_pair); - add_ephemeron_to_pending(p); - pp += size_ephemeron / sizeof(ptr); - }) - - sweep_space(space_pure, { - relocate_help(pp, p) - p = *(pp += 1); - relocate_help(pp, p) - pp += 1; - }) + for (from_g = MIN_TG; from_g <= MAX_TG; from_g += 1) { + sweep_space(space_impure, from_g, { + relocate_impure_help(pp, p, from_g); + p = *(pp += 1); + relocate_impure_help(pp, p, from_g); + pp += 1; + }) - sweep_space(space_continuation, { - p = TYPE((ptr)pp, type_closure); - sweep_continuation(p); - pp += size_continuation / sizeof(ptr); - }) - - sweep_space(space_pure_typed_object, { - p = TYPE((ptr)pp, type_typed_object); - pp = (ptr *)((uptr)pp + sweep_typed_object(p)); - }) - - sweep_space(space_code, { - p = TYPE((ptr)pp, type_typed_object); - sweep_code_object(tc, p); - pp += size_code(CODELEN(p)) / sizeof(ptr); - }) - - sweep_space(space_impure_record, { - p = TYPE((ptr)pp, type_typed_object); - sweep_record(p); - pp = (ptr *)((iptr)pp + - size_record_inst(UNFIX(RECORDDESCSIZE(RECORDINSTTYPE(p))))); - }) + sweep_space(space_symbol, from_g, { + p = TYPE((ptr)pp, type_symbol); + sweep_symbol(p, from_g ACTUAL_CTGS); + pp += size_symbol / sizeof(ptr); + }) + + sweep_space(space_port, from_g, { + p = TYPE((ptr)pp, type_typed_object); + sweep_port(p, from_g ACTUAL_CTGS); + pp += size_port / sizeof(ptr); + }) + + sweep_space(space_weakpair, from_g, { + p = *(pp += 1); + relocate_impure_help(pp, p, from_g); + pp += 1; + }) + + sweep_space(space_ephemeron, from_g, { + p = TYPE((ptr)pp, type_pair); + add_ephemeron_to_pending(p); + pp += size_ephemeron / sizeof(ptr); + }) + + sweep_space(space_pure, from_g, { + relocate_pure_help(pp, p); + p = *(pp += 1); + relocate_pure_help(pp, p); + pp += 1; + }) + + sweep_space(space_continuation, from_g, { + p = TYPE((ptr)pp, type_closure); + sweep_continuation(p ACTUAL_CTGS); + pp += size_continuation / sizeof(ptr); + }) + + sweep_space(space_pure_typed_object, from_g, { + p = TYPE((ptr)pp, type_typed_object); + pp = (ptr *)((uptr)pp + sweep_typed_object(p, from_g ACTUAL_CTGS)); + }) + + sweep_space(space_code, from_g, { + p = TYPE((ptr)pp, type_typed_object); + sweep_code_object(tc, p ACTUAL_CTGS); + pp += size_code(CODELEN(p)) / sizeof(ptr); + }) + + sweep_space(space_impure_record, from_g, { + p = TYPE((ptr)pp, type_typed_object); + sweep_record(p, from_g ACTUAL_CTGS); + pp = (ptr *)((iptr)pp + + size_record_inst(UNFIX(RECORDDESCSIZE(RECORDINSTTYPE(p))))); + }) + } /* Waiting until sweeping doesn't trigger a change reduces the chance that an ephemeron must be reigistered as a segment-specific trigger or gets triggered for recheck, but it doesn't change the worst-case complexity. */ if (!change) - check_pending_ephemerons(); + check_pending_ephemerons(ONLY_ACTUAL_CTGS); } while (change); } +#ifndef NO_LOCKED_OLDSPACE_OBJECTS static iptr size_object(p) ptr p; { ITYPE t; ptr tf; @@ -1400,15 +1542,16 @@ return 0 /* not reached */; } } +#endif /* !NO_LOCKED_OLDSPACE_OBJECTS */ -static iptr sweep_typed_object(p) ptr p; { +static iptr sweep_typed_object(ptr p, IGEN from_g FORMAL_CTGS) { ptr tf = TYPEFIELD(p); if (TYPEP(tf, mask_record, type_record)) { - sweep_record(p); + sweep_record(p, from_g ACTUAL_CTGS); return size_record_inst(UNFIX(RECORDDESCSIZE(RECORDINSTTYPE(p)))); } else if (TYPEP(tf, mask_thread, type_thread)) { - sweep_thread(p); + sweep_thread(p ACTUAL_CTGS); return size_thread; } else { S_error_abort("sweep_typed_object(gc): unexpected type"); @@ -1416,40 +1559,39 @@ } } -static void sweep_symbol(p) ptr p; { +static void sweep_symbol(ptr p, IGEN from_g FORMAL_CTGS) { ptr val, code; + relocate_impure(&INITSYMVAL(p), from_g); val = SYMVAL(p); - relocate(&val); - INITSYMVAL(p) = val; code = Sprocedurep(val) ? CLOSCODE(val) : SYMCODE(p); - relocate(&code); + relocate_pure(&code); INITSYMCODE(p,code); - relocate(&INITSYMPLIST(p)) - relocate(&INITSYMSPLIST(p)) - relocate(&INITSYMNAME(p)) - relocate(&INITSYMHASH(p)) + relocate_impure(&INITSYMPLIST(p), from_g); + relocate_impure(&INITSYMSPLIST(p), from_g); + relocate_impure(&INITSYMNAME(p), from_g); + relocate_impure(&INITSYMHASH(p), from_g); } -static void sweep_port(p) ptr p; { - relocate(&PORTHANDLER(p)) - relocate(&PORTINFO(p)) - relocate(&PORTNAME(p)) +static void sweep_port(ptr p, IGEN from_g FORMAL_CTGS) { + relocate_impure(&PORTHANDLER(p), from_g); + relocate_impure(&PORTINFO(p), from_g); + relocate_impure(&PORTNAME(p), from_g); if (PORTTYPE(p) & PORT_FLAG_OUTPUT) { iptr n = (iptr)PORTOLAST(p) - (iptr)PORTOBUF(p); - relocate(&PORTOBUF(p)) + relocate_impure(&PORTOBUF(p), from_g); PORTOLAST(p) = (ptr)((iptr)PORTOBUF(p) + n); } if (PORTTYPE(p) & PORT_FLAG_INPUT) { iptr n = (iptr)PORTILAST(p) - (iptr)PORTIBUF(p); - relocate(&PORTIBUF(p)) + relocate_impure(&PORTIBUF(p), from_g); PORTILAST(p) = (ptr)((iptr)PORTIBUF(p) + n); } } -static void sweep_thread(p) ptr p; { +static void sweep_thread(ptr p FORMAL_CTGS) { ptr tc = (ptr)THREADTC(p); INT i; @@ -1458,75 +1600,80 @@ if (OLDSPACE(old_stack)) { iptr clength = (uptr)SFP(tc) - (uptr)old_stack; /* include SFP[0], which contains the return address */ - SCHEMESTACK(tc) = copy_stack(old_stack, &SCHEMESTACKSIZE(tc), clength + sizeof(ptr)); + SCHEMESTACK(tc) = copy_stack(old_stack, &SCHEMESTACKSIZE(tc), clength + sizeof(ptr) ACTUAL_CTGS); SFP(tc) = (ptr)((uptr)SCHEMESTACK(tc) + clength); ESP(tc) = (ptr)((uptr)SCHEMESTACK(tc) + SCHEMESTACKSIZE(tc) - stack_slop); } STACKCACHE(tc) = Snil; - relocate(&CCHAIN(tc)) + relocate_pure(&CCHAIN(tc)); /* U32 RANDOMSEED(tc) */ /* I32 ACTIVE(tc) */ - relocate(&STACKLINK(tc)) + relocate_pure(&STACKLINK(tc)); /* iptr SCHEMESTACKSIZE */ - relocate(&WINDERS(tc)) - relocate_return_addr(&FRAME(tc,0)) - sweep_stack((uptr)SCHEMESTACK(tc), (uptr)SFP(tc), (uptr)FRAME(tc,0)); - relocate(&U(tc)) - relocate(&V(tc)) - relocate(&W(tc)) - relocate(&X(tc)) - relocate(&Y(tc)) + relocate_pure(&WINDERS(tc)); + relocate_return_addr(&FRAME(tc,0)); + sweep_stack((uptr)SCHEMESTACK(tc), (uptr)SFP(tc), (uptr)FRAME(tc,0) ACTUAL_CTGS); + U(tc) = V(tc) = W(tc) = X(tc) = Y(tc) = 0; /* immediate SOMETHINGPENDING(tc) */ /* immediate TIMERTICKS */ /* immediate DISABLE_COUNT */ /* immediate SIGNALINTERRUPTPENDING */ + /* void* SIGNALINTERRUPTQUEUE(tc) */ /* immediate KEYBOARDINTERRUPTPENDING */ - relocate(&THREADNO(tc)) - relocate(&CURRENTINPUT(tc)) - relocate(&CURRENTOUTPUT(tc)) - relocate(&CURRENTERROR(tc)) + relocate_pure(&THREADNO(tc)); + relocate_pure(&CURRENTINPUT(tc)); + relocate_pure(&CURRENTOUTPUT(tc)); + relocate_pure(&CURRENTERROR(tc)); /* immediate BLOCKCOUNTER */ - relocate(&SFD(tc)) - relocate(&CURRENTMSO(tc)) - relocate(&TARGETMACHINE(tc)) - relocate(&FXLENGTHBV(tc)) - relocate(&FXFIRSTBITSETBV(tc)) - relocate(&NULLIMMUTABLEVECTOR(tc)) - relocate(&NULLIMMUTABLEFXVECTOR(tc)) - relocate(&NULLIMMUTABLEBYTEVECTOR(tc)) - relocate(&NULLIMMUTABLESTRING(tc)) + relocate_pure(&SFD(tc)); + relocate_pure(&CURRENTMSO(tc)); + relocate_pure(&TARGETMACHINE(tc)); + relocate_pure(&FXLENGTHBV(tc)); + relocate_pure(&FXFIRSTBITSETBV(tc)); + relocate_pure(&NULLIMMUTABLEVECTOR(tc)); + relocate_pure(&NULLIMMUTABLEFXVECTOR(tc)); + relocate_pure(&NULLIMMUTABLEBYTEVECTOR(tc)); + relocate_pure(&NULLIMMUTABLESTRING(tc)); /* immediate METALEVEL */ - relocate(&COMPILEPROFILE(tc)) + relocate_pure(&COMPILEPROFILE(tc)); /* immediate GENERATEINSPECTORINFORMATION */ /* immediate GENERATEPROFILEFORMS */ /* immediate OPTIMIZELEVEL */ - relocate(&PARAMETERS(tc)) + relocate_pure(&SUBSETMODE(tc)); + /* immediate SUPPRESSPRIMITIVEINLINING */ + relocate_pure(&DEFAULTRECORDEQUALPROCEDURE(tc)); + relocate_pure(&DEFAULTRECORDHASHPROCEDURE(tc)); + relocate_pure(&COMPRESSFORMAT(tc)); + relocate_pure(&COMPRESSLEVEL(tc)); + /* void* LZ4OUTBUFFER(tc) */ /* U64 INSTRCOUNTER(tc) */ /* U64 ALLOCCOUNTER(tc) */ + relocate_pure(&PARAMETERS(tc)); for (i = 0 ; i < virtual_register_count ; i += 1) { - relocate(&VIRTREG(tc, i)); + relocate_pure(&VIRTREG(tc, i)); } + DSTBV(tc) = SRCBV(tc) = Sfalse; } } -static void sweep_continuation(p) ptr p; { - relocate(&CONTWINDERS(p)) +static void sweep_continuation(ptr p FORMAL_CTGS) { + relocate_pure(&CONTWINDERS(p)); /* bug out for shot 1-shot continuations */ if (CONTLENGTH(p) == scaled_shot_1_shot_flag) return; if (OLDSPACE(CONTSTACK(p))) - CONTSTACK(p) = copy_stack(CONTSTACK(p), &CONTLENGTH(p), CONTCLENGTH(p)); + CONTSTACK(p) = copy_stack(CONTSTACK(p), &CONTLENGTH(p), CONTCLENGTH(p) ACTUAL_CTGS); - relocate(&CONTLINK(p)) - relocate_return_addr(&CONTRET(p)) + relocate_pure(&CONTLINK(p)); + relocate_return_addr(&CONTRET(p)); /* use CLENGTH to avoid sweeping unoccupied portion of one-shots */ - sweep_stack((uptr)CONTSTACK(p), (uptr)CONTSTACK(p) + CONTCLENGTH(p), (uptr)CONTRET(p)); + sweep_stack((uptr)CONTSTACK(p), (uptr)CONTSTACK(p) + CONTCLENGTH(p), (uptr)CONTRET(p) ACTUAL_CTGS); } /* assumes stack has already been copied to newspace */ -static void sweep_stack(base, fp, ret) uptr base, fp, ret; { +static void sweep_stack(uptr base, uptr fp, uptr ret FORMAL_CTGS) { ptr *pp; iptr oldret; ptr num; @@ -1538,20 +1685,20 @@ oldret = ret; ret = (iptr)(*pp); - relocate_return_addr(pp) + relocate_return_addr(pp); num = ENTRYLIVEMASK(oldret); if (Sfixnump(num)) { uptr mask = UNFIX(num); while (mask != 0) { pp += 1; - if (mask & 0x0001) relocate(pp) + if (mask & 0x0001) relocate_pure(pp); mask >>= 1; } } else { iptr index; - relocate(&ENTRYLIVEMASK(oldret)) + relocate_pure(&ENTRYLIVEMASK(oldret)); num = ENTRYLIVEMASK(oldret); index = BIGLEN(num); while (index-- != 0) { @@ -1559,7 +1706,7 @@ bigit mask = BIGIT(num,index); while (bits-- > 0) { pp += 1; - if (mask & 1) relocate(pp) + if (mask & 1) relocate_pure(pp); mask >>= 1; } } @@ -1567,7 +1714,7 @@ } } -static void sweep_record(x) ptr x; { +static void sweep_record(ptr x, IGEN from_g FORMAL_CTGS) { ptr *pp; ptr num; ptr rtd; /* record-type descriptor was forwarded in copy */ @@ -1582,12 +1729,12 @@ if (mask == (uptr)-1 >> 1) { ptr *ppend = (ptr *)((uptr)pp + UNFIX(RECORDDESCSIZE(rtd))) - 1; while (pp < ppend) { - relocate(pp) + relocate_impure(pp, from_g); pp += 1; } } else { while (mask != 0) { - if (mask & 1) relocate(pp) + if (mask & 1) { relocate_impure(pp, from_g); } mask >>= 1; pp += 1; } @@ -1596,7 +1743,7 @@ iptr index; bigit mask; INT bits; /* bignum pointer mask may have been forwarded */ - relocate(&RECORDDESCPM(rtd)) + relocate_pure(&RECORDDESCPM(rtd)); num = RECORDDESCPM(rtd); index = BIGLEN(num) - 1; /* ignore bit for already forwarded rtd */ @@ -1604,7 +1751,7 @@ bits = bigit_bits - 1; for (;;) { do { - if (mask & 1) relocate(pp) + if (mask & 1) { relocate_impure(pp, from_g); } mask >>= 1; pp += 1; } while (--bits > 0); @@ -1615,11 +1762,8 @@ } } -static IGEN sweep_dirty_record(x) ptr x; { - ptr *pp; ptr num; ptr rtd; IGEN tg, youngest; - - tg = target_generation; - youngest = 0xff; +static IGEN sweep_dirty_record(ptr x, IGEN youngest FORMAL_CTGS) { + ptr *pp; ptr num; ptr rtd; /* warning: assuming rtd is immutable */ rtd = RECORDINSTTYPE(x); @@ -1628,13 +1772,12 @@ num = RECORDDESCMPM(rtd); pp = &RECORDINSTIT(x,0); - /* sweep cells for which bit in mpm is set - include rtd in case it's mutable */ + /* sweep cells for which bit in mpm is set */ if (Sfixnump(num)) { /* ignore bit for assumed immutable rtd */ uptr mask = (uptr)UNFIX(num) >> 1; while (mask != 0) { - if (mask & 1) relocate_dirty(pp,tg,youngest) + if (mask & 1) relocate_dirty(pp, youngest); mask >>= 1; pp += 1; } @@ -1647,7 +1790,7 @@ bits = bigit_bits - 1; for (;;) { do { - if (mask & 1) relocate_dirty(pp,tg,youngest) + if (mask & 1) relocate_dirty(pp, youngest); mask >>= 1; pp += 1; } while (--bits > 0); @@ -1660,7 +1803,7 @@ return youngest; } -static void sweep_code_object(tc, co) ptr tc, co; { +static void sweep_code_object(ptr tc, ptr co FORMAL_CTGS) { ptr t, oldco; iptr a, m, n; #ifdef DEBUG @@ -1670,10 +1813,10 @@ } #endif - relocate(&CODENAME(co)) - relocate(&CODEARITYMASK(co)) - relocate(&CODEINFO(co)) - relocate(&CODEPINFOS(co)) + relocate_pure(&CODENAME(co)); + relocate_pure(&CODEARITYMASK(co)); + relocate_pure(&CODEINFO(co)); + relocate_pure(&CODEPINFOS(co)); t = CODERELOC(co); m = RELOCSIZE(t); @@ -1692,28 +1835,31 @@ } a += code_off; obj = S_get_code_obj(RELOC_TYPE(entry), oldco, a, item_off); - relocate(&obj) + relocate_pure(&obj); S_set_code_obj("gc", RELOC_TYPE(entry), co, a, obj, item_off); } - if (target_generation == static_generation && !S_G.retain_static_relocation) { - CODERELOC(co) = (ptr)0; - } else { - /* Don't copy non-oldspace relocation tables, since we may be - sweeping a locked code object that is older than target_generation - Doing so would be a waste of work anyway. */ - if (OLDSPACE(t)) { + /* Don't copy non-oldspace relocation tables, since we may be + sweeping a locked code object that is older than max_target_generation + Doing so would be a waste of work anyway. */ + if (OLDSPACE(t)) { + IGEN newg = compute_target_generation(GENERATION(t) ACTUAL_CTGS); + if (newg == static_generation && !S_G.retain_static_relocation && (CODETYPE(co) & (code_flag_template << code_flags_offset)) == 0) { + CODERELOC(co) = (ptr)0; + } else { ptr oldt = t; n = size_reloc_table(RELOCSIZE(oldt)); #ifdef ENABLE_OBJECT_COUNTS - S_G.countof[target_generation][countof_relocation_table] += 1; - S_G.bytesof[target_generation][countof_relocation_table] += n; + S_G.countof[newg][countof_relocation_table] += 1; + S_G.bytesof[newg][countof_relocation_table] += n; #endif /* ENABLE_OBJECT_COUNTS */ - find_room(space_data, target_generation, typemod, n, t); + find_room(space_data, newg, typemod, n, t); copy_ptrs(typemod, t, oldt, n); + RELOCCODE(t) = co; + CODERELOC(co) = t; } + } else { RELOCCODE(t) = co; - CODERELOC(co) = t; } S_record_code_mod(tc, (uptr)&CODEIT(co,0), (uptr)CODELEN(co)); @@ -1742,20 +1888,18 @@ } } -static void sweep_dirty(void) { - IGEN tg, mcg, youngest, min_youngest, pg; +static void sweep_dirty(ONLY_FORMAL_CTGS) { + IGEN youngest, min_youngest; ptr *pp, *ppend, *nl; uptr seg, d; ISPC s; IGEN from_g, to_g; seginfo *dirty_si, *nextsi; - tg = target_generation; - mcg = max_copied_generation; weaksegments_to_resweep = NULL; /* clear dirty segment lists for copied generations */ - for (from_g = 1; from_g <= mcg; from_g += 1) { + for (from_g = 1; from_g <= MAX_CG; from_g += 1) { for (to_g = 0; to_g < from_g; to_g += 1) { DirtySegments(from_g, to_g) = NULL; } @@ -1764,8 +1908,8 @@ /* NB: could have problems if a card is moved from some current or to-be-swept (from_g, to_g) to some previously swept list due to a dirty_set while we sweep. believe this can't happen as of 6/14/2013. if it can, it might be sufficient to process the lists in reverse order. */ - for (from_g = mcg + 1; from_g <= static_generation; INCRGEN(from_g)) { - for (to_g = 0; to_g <= mcg; to_g += 1) { + for (from_g = MAX_CG + 1; from_g <= static_generation; INCRGEN(from_g)) { + for (to_g = 0; to_g <= MAX_CG; to_g += 1) { for (dirty_si = DirtySegments(from_g, to_g), DirtySegments(from_g, to_g) = NULL; dirty_si != NULL; dirty_si = nextsi) { nextsi = dirty_si->dirty_next; seg = dirty_si->number; @@ -1777,12 +1921,12 @@ dirty_si->min_dirty_byte = 0xff; min_youngest = 0xff; - nl = from_g == tg ? (ptr *)orig_next_loc[s] : (ptr *)S_G.next_loc[s][from_g]; + nl = from_g == MAX_TG ? (ptr *)orig_next_loc[from_g][s] : (ptr *)S_G.next_loc[from_g][s]; ppend = build_ptr(seg, 0); if (s == space_weakpair) { weakseginfo *next = weaksegments_to_resweep; - find_room(space_data, 0, typemod, sizeof(weakseginfo), weaksegments_to_resweep); + find_room(space_data, 0, typemod, ptr_align(sizeof(weakseginfo)), weaksegments_to_resweep); weaksegments_to_resweep->si = dirty_si; weaksegments_to_resweep->next = next; } @@ -1803,16 +1947,16 @@ ppend += bytes_per_card / sizeof(ptr); if (pp <= nl && nl < ppend) ppend = nl; - if (dirty_si->dirty_bytes[d] <= mcg) { + if (dirty_si->dirty_bytes[d] <= MAX_CG) { /* assume we won't find any wrong-way pointers */ youngest = 0xff; if (s == space_impure) { while (pp < ppend && *pp != forward_marker) { /* handle two pointers at a time */ - relocate_dirty(pp,tg,youngest) + relocate_dirty(pp, youngest); pp += 1; - relocate_dirty(pp,tg,youngest) + relocate_dirty(pp, youngest); pp += 1; } } else if (s == space_symbol) { @@ -1832,15 +1976,15 @@ p = TYPE((ptr)pp, type_symbol); val = SYMVAL(p); - relocate_dirty(&val,tg,youngest) + relocate_dirty(&val, youngest); INITSYMVAL(p) = val; code = Sprocedurep(val) ? CLOSCODE(val) : SYMCODE(p); - relocate_dirty(&code,tg,youngest) + relocate_dirty(&code, youngest); INITSYMCODE(p,code); - relocate_dirty(&INITSYMPLIST(p),tg,youngest) - relocate_dirty(&INITSYMSPLIST(p),tg,youngest) - relocate_dirty(&INITSYMNAME(p),tg,youngest) - relocate_dirty(&INITSYMHASH(p),tg,youngest) + relocate_dirty(&INITSYMPLIST(p), youngest); + relocate_dirty(&INITSYMSPLIST(p), youngest); + relocate_dirty(&INITSYMNAME(p), youngest); + relocate_dirty(&INITSYMHASH(p), youngest); pp += size_symbol / sizeof(ptr); } @@ -1858,19 +2002,19 @@ while (pp < ppend && *pp != forward_marker) { /* might overshoot card by part of a port. no harm. */ ptr p = TYPE((ptr)pp, type_typed_object); - relocate_dirty(&PORTHANDLER(p),tg,youngest) - relocate_dirty(&PORTINFO(p),tg,youngest) - relocate_dirty(&PORTNAME(p),tg,youngest) + relocate_dirty(&PORTHANDLER(p), youngest); + relocate_dirty(&PORTINFO(p), youngest); + relocate_dirty(&PORTNAME(p), youngest); if (PORTTYPE(p) & PORT_FLAG_OUTPUT) { iptr n = (iptr)PORTOLAST(p) - (iptr)PORTOBUF(p); - relocate_dirty(&PORTOBUF(p),tg,youngest) + relocate_dirty(&PORTOBUF(p), youngest); PORTOLAST(p) = (ptr)((iptr)PORTOBUF(p) + n); } if (PORTTYPE(p) & PORT_FLAG_INPUT) { iptr n = (iptr)PORTILAST(p) - (iptr)PORTIBUF(p); - relocate_dirty(&PORTIBUF(p),tg,youngest) + relocate_dirty(&PORTIBUF(p), youngest); PORTILAST(p) = (ptr)((iptr)PORTIBUF(p) + n); } @@ -1917,8 +2061,7 @@ /* quit on end of segment */ if (FWDMARKER(p) == forward_marker) break; - pg = sweep_dirty_record(p); - if (pg < youngest) youngest = pg; + youngest = sweep_dirty_record(p, youngest ACTUAL_CTGS); p = (ptr)((iptr)p + size_record_inst(UNFIX(RECORDDESCSIZE( RECORDINSTTYPE(p))))); @@ -1927,13 +2070,13 @@ while (pp < ppend && *pp != forward_marker) { /* skip car field and handle cdr field */ pp += 1; - relocate_dirty(pp, tg, youngest) + relocate_dirty(pp, youngest); pp += 1; } } else if (s == space_ephemeron) { while (pp < ppend && *pp != forward_marker) { ptr p = TYPE((ptr)pp, type_pair); - youngest = check_dirty_ephemeron(p, tg, youngest); + youngest = check_dirty_ephemeron(p, youngest ACTUAL_CTGS); pp += size_ephemeron / sizeof(ptr); } } else { @@ -1961,19 +2104,16 @@ } } -static void resweep_dirty_weak_pairs() { +static void resweep_dirty_weak_pairs(ONLY_FORMAL_CTGS) { weakseginfo *ls; ptr *pp, *ppend, *nl, p; - IGEN from_g, min_youngest, youngest, tg, mcg, pg; + IGEN from_g, min_youngest, youngest, pg, newpg; uptr d; - tg = target_generation; - mcg = max_copied_generation; - for (ls = weaksegments_to_resweep; ls != NULL; ls = ls->next) { seginfo *dirty_si = ls->si; from_g = dirty_si->generation; - nl = from_g == tg ? (ptr *)orig_next_loc[space_weakpair] : (ptr *)S_G.next_loc[space_weakpair][from_g]; + nl = from_g == MAX_TG ? (ptr *)orig_next_loc[from_g][space_weakpair] : (ptr *)S_G.next_loc[from_g][space_weakpair]; ppend = build_ptr(dirty_si->number, 0); min_youngest = 0xff; d = 0; @@ -1989,7 +2129,7 @@ pp = ppend; ppend += bytes_per_card / sizeof(ptr); if (pp <= nl && nl < ppend) ppend = nl; - if (dirty_si->dirty_bytes[d] <= mcg) { + if (dirty_si->dirty_bytes[d] <= MAX_CG) { youngest = ls->youngest[d]; while (pp < ppend) { p = *pp; @@ -1997,18 +2137,19 @@ /* handle car field */ if (!IMMEDIATE(p) && (si = MaybeSegInfo(ptr_get_segment(p))) != NULL) { + pg = si->generation; + newpg = compute_target_generation(pg ACTUAL_CTGS); if (si->space & space_old) { if (locked(p)) { - youngest = tg; + if (newpg < youngest) youngest = newpg; } else if (FWDMARKER(p) == forward_marker && TYPEBITS(p) != type_flonum) { *pp = FWDADDRESS(p); - youngest = tg; + if (newpg < youngest) youngest = newpg; } else { *pp = Sbwp_object; } } else { - if (youngest != tg && (pg = si->generation) < youngest) - youngest = pg; + if (pg < youngest) youngest = pg; } } @@ -2064,15 +2205,20 @@ repending_ephemerons = pe; } -static void check_ephemeron(ptr pe, int add_to_trigger) { +static void check_ephemeron(ptr pe, IBOOL add_to_trigger FORMAL_CTGS) { ptr p; seginfo *si; + IGEN from_g = GENERATION(pe); p = Scar(pe); if (!IMMEDIATE(p) && (si = MaybeSegInfo(ptr_get_segment(p))) != NULL && si->space & space_old && !locked(p)) { if (FWDMARKER(p) == forward_marker && TYPEBITS(p) != type_flonum) { +#ifndef NO_DIRTY_NEWSPACE_POINTERS + IGEN pg = compute_target_generation(si->generation ACTUAL_CTGS); + if (pg < from_g) record_new_dirty_card(&INITCAR(pe), pg); +#endif INITCAR(pe) = FWDADDRESS(p); - relocate(&INITCDR(pe)) + relocate_impure(&INITCDR(pe), from_g); if (!add_to_trigger) EPHEMERONTRIGGERNEXT(pe) = Strue; /* in trigger list, #t means "done" */ } else { @@ -2085,18 +2231,18 @@ } } } else { - relocate(&INITCDR(pe)) + relocate_impure(&INITCDR(pe), from_g); } } -static void check_pending_ephemerons() { +static void check_pending_ephemerons(ONLY_FORMAL_CTGS) { ptr pe, next_pe; pe = pending_ephemerons; pending_ephemerons = NULL; while (pe != NULL) { next_pe = EPHEMERONNEXT(pe); - check_ephemeron(pe, 1); + check_ephemeron(pe, 1 ACTUAL_CTGS); pe = next_pe; } @@ -2104,7 +2250,7 @@ repending_ephemerons = NULL; while (pe != NULL) { next_pe = EPHEMERONTRIGGERNEXT(pe); - check_ephemeron(pe, 0); + check_ephemeron(pe, 0 ACTUAL_CTGS); pe = next_pe; } } @@ -2113,37 +2259,39 @@ ephemeron (that was not yet added to the pending list), so we can be less pessimistic than setting `youngest` to the target generation: */ -static int check_dirty_ephemeron(ptr pe, int tg, int youngest) { +static IGEN check_dirty_ephemeron(ptr pe, IGEN youngest FORMAL_CTGS) { ptr p; seginfo *si; + IGEN pg; p = Scar(pe); if (!IMMEDIATE(p) && (si = MaybeSegInfo(ptr_get_segment(p))) != NULL) { if (si->space & space_old && !locked(p)) { if (FWDMARKER(p) == forward_marker && TYPEBITS(p) != type_flonum) { INITCAR(pe) = FWDADDRESS(p); - relocate(&INITCDR(pe)) - youngest = tg; + if (youngest != MIN_TG && (pg = compute_target_generation(si->generation ACTUAL_CTGS)) < youngest) + youngest = pg; + relocate_dirty(&INITCDR(pe), youngest); } else { /* Not reached, so far; add to pending list */ - add_ephemeron_to_pending(pe); + add_ephemeron_to_pending(pe); /* Make the consistent (but pessimistic w.r.t. to wrong-way pointers) assumption that the key will stay live and move to the target generation. That assumption covers the value part, too, since it can't end up younger than the target generation. */ - youngest = tg; + if (youngest != MIN_TG && (pg = compute_target_generation(si->generation ACTUAL_CTGS)) < youngest) + youngest = pg; } } else { - int pg; - if ((pg = si->generation) < youngest) + if (youngest != MIN_TG && (pg = si->generation) < youngest) youngest = pg; - relocate_dirty(&INITCDR(pe), tg, youngest) + relocate_dirty(&INITCDR(pe), youngest); } } else { /* Non-collectable key means that the value determines `youngest`: */ - relocate_dirty(&INITCDR(pe), tg, youngest) + relocate_dirty(&INITCDR(pe), youngest); } return youngest; diff -Nru chezscheme-9.5+dfsg/c/gcwrapper.c chezscheme-9.5.4+dfsg/c/gcwrapper.c --- chezscheme-9.5+dfsg/c/gcwrapper.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/gcwrapper.c 2020-08-31 02:35:12.000000000 +0000 @@ -33,6 +33,7 @@ S_checkheap = 0; /* 0 for disabled, 1 for enabled */ S_checkheap_errors = 0; /* count of errors detected by checkheap */ checkheap_noisy = 0; /* 0 for error output only; 1 for more noisy output */ + S_G.prcgeneration = static_generation; if (S_checkheap) { printf(checkheap_noisy ? "NB: check_heap is enabled and noisy\n" : "NB: check_heap_is_enabled\n"); @@ -270,6 +271,33 @@ tc_mutex_release() } +ptr s_help_unregister_guardian(ptr *pls, ptr tconc, ptr result) { + ptr rep, ls; + while ((ls = *pls) != Snil) { + if (GUARDIANTCONC(ls) == tconc) { + result = Scons(((rep = GUARDIANREP(ls)) == ftype_guardian_rep ? GUARDIANOBJ(ls) : rep), result); + *pls = ls = GUARDIANNEXT(ls); + } else { + ls = *(pls = &GUARDIANNEXT(ls)); + } + } + return result; +} + +ptr S_unregister_guardian(ptr tconc) { + ptr result, tc; IGEN g; + tc_mutex_acquire() + tc = get_thread_context(); + /* in the interest of thread safety, gather entries only in the current thread, ignoring any others */ + result = s_help_unregister_guardian(&GUARDIANENTRIES(tc), tconc, Snil); + /* plus, of course, any already known to the storage-management system */ + for (g = 0; g <= static_generation; INCRGEN(g)) { + result = s_help_unregister_guardian(&S_G.guardians[g], tconc, result); + } + tc_mutex_release() + return result; +} + #ifndef WIN32 void S_register_child_process(INT child) { tc_mutex_acquire() @@ -355,7 +383,7 @@ void Scompact_heap() { ptr tc = get_thread_context(); S_pants_down += 1; - S_gc_oce(tc, S_G.max_nonstatic_generation, static_generation); + S_gc_oce(tc, S_G.max_nonstatic_generation, static_generation, static_generation); S_pants_down -= 1; } @@ -455,11 +483,11 @@ for (s = 0; s <= max_real_space; s += 1) { seginfo *si; for (g = 0; g <= S_G.max_nonstatic_generation; INCRGEN(g)) { - for (si = S_G.occupied_segments[s][g]; si != NULL; si = si->next) { + for (si = S_G.occupied_segments[g][s]; si != NULL; si = si->next) { nonstatic_segments += 1; } } - for (si = S_G.occupied_segments[s][static_generation]; si != NULL; si = si->next) { + for (si = S_G.occupied_segments[static_generation][s]; si != NULL; si = si->next) { static_segments += 1; } } @@ -509,7 +537,7 @@ } } else if (s == space_impure || s == space_symbol || s == space_pure || s == space_weakpair /* || s == space_ephemeron */) { /* out of date: doesn't handle space_port, space_continuation, space_code, space_pure_typed_object, space_impure_record */ - nl = (ptr *)S_G.next_loc[s][g]; + nl = (ptr *)S_G.next_loc[g][s]; /* check for dangling references */ pp1 = (ptr *)build_ptr(seg, 0); @@ -619,7 +647,7 @@ IGEN from_g, to_g, min_to_g; INT d; seginfo *si; for (from_g = 0; from_g <= static_generation; from_g += 1) { - for (si = S_G.occupied_segments[s][from_g]; si != NULL; si = si->next) { + for (si = S_G.occupied_segments[from_g][s]; si != NULL; si = si->next) { if (si->space & space_locked) continue; min_to_g = 0xff; for (d = 0; d < cards_per_segment; d += 1) { @@ -702,7 +730,7 @@ RTDCOUNTSTIMESTAMP(counts) = S_G.gctimestamp[0]; } -void S_do_gc(IGEN mcg, IGEN tg) { +void S_do_gc(IGEN max_cg, IGEN min_tg, IGEN max_tg) { ptr tc = get_thread_context(); ptr code; @@ -718,22 +746,23 @@ S_G.max_nonstatic_generation = S_G.new_max_nonstatic_generation; } - if (tg == mcg && mcg == S_G.new_max_nonstatic_generation && mcg < S_G.max_nonstatic_generation) { + if (max_tg == max_cg && max_cg == S_G.new_max_nonstatic_generation && max_cg < S_G.max_nonstatic_generation) { IGEN new_g, old_g, from_g, to_g; ISPC s; seginfo *si, *nextsi, *tail; /* reducing max_nonstatic_generation */ new_g = S_G.new_max_nonstatic_generation; old_g = S_G.max_nonstatic_generation; - /* first, collect everything to old_g */ - S_gc(tc, old_g, old_g); + /* first, collect everything to old_g, ignoring min_tg */ + S_gc(tc, old_g, old_g, old_g); /* now transfer old_g info to new_g, and clear old_g info */ + S_G.bytes_of_generation[new_g] = S_G.bytes_of_generation[old_g]; S_G.bytes_of_generation[old_g] = 0; for (s = 0; s <= max_real_space; s += 1) { - S_G.first_loc[s][new_g] = S_G.first_loc[s][old_g]; S_G.first_loc[s][old_g] = FIX(0); - S_G.base_loc[s][new_g] = S_G.base_loc[s][old_g]; S_G.base_loc[s][old_g] = FIX(0); - S_G.next_loc[s][new_g] = S_G.next_loc[s][old_g]; S_G.next_loc[s][old_g] = FIX(0); - S_G.bytes_left[s][new_g] = S_G.bytes_left[s][old_g]; S_G.bytes_left[s][old_g] = 0; - S_G.bytes_of_space[s][new_g] = S_G.bytes_of_space[s][old_g]; S_G.bytes_of_space[s][old_g] = 0; - S_G.occupied_segments[s][new_g] = S_G.occupied_segments[s][old_g]; S_G.occupied_segments[s][old_g] = NULL; - for (si = S_G.occupied_segments[s][new_g]; si != NULL; si = si->next) { + S_G.first_loc[new_g][s] = S_G.first_loc[old_g][s]; S_G.first_loc[old_g][s] = FIX(0); + S_G.base_loc[new_g][s] = S_G.base_loc[old_g][s]; S_G.base_loc[old_g][s] = FIX(0); + S_G.next_loc[new_g][s] = S_G.next_loc[old_g][s]; S_G.next_loc[old_g][s] = FIX(0); + S_G.bytes_left[new_g][s] = S_G.bytes_left[old_g][s]; S_G.bytes_left[old_g][s] = 0; + S_G.bytes_of_space[new_g][s] = S_G.bytes_of_space[old_g][s]; S_G.bytes_of_space[old_g][s] = 0; + S_G.occupied_segments[new_g][s] = S_G.occupied_segments[old_g][s]; S_G.occupied_segments[old_g][s] = NULL; + for (si = S_G.occupied_segments[new_g][s]; si != NULL; si = si->next) { si->generation = new_g; } } @@ -757,6 +786,9 @@ RTDCOUNTSIT(counts, new_g) = RTDCOUNTSIT(counts, old_g); RTDCOUNTSIT(counts, old_g) = 0; } } +#ifndef WIN32 + S_child_processes[new_g] = S_child_processes[old_g]; +#endif /* change old_g dirty bytes in static generation to new_g; splice list of old_g seginfos onto front of new_g seginfos */ @@ -801,26 +833,32 @@ } } + /* tell profile_release_counters to scan only through new_g */ + if (S_G.prcgeneration == old_g) S_G.prcgeneration = new_g; + /* finally reset max_nonstatic_generation */ S_G.min_free_gen = S_G.new_min_free_gen; S_G.max_nonstatic_generation = new_g; } else { - S_gc(tc, mcg, tg); + S_gc(tc, max_cg, min_tg, max_tg); } - S_pants_down -= 1; /* eagerly give collecting thread, the only one guaranteed to be active, a fresh allocation area. the other threads have to trap to get_more_room if and when they awake and try to allocate */ S_reset_allocation_pointer(tc); + S_pants_down -= 1; + Sunlock_object(code); } -void S_gc(ptr tc, IGEN mcg, IGEN tg) { - if (tg == static_generation || S_G.enable_object_counts) - S_gc_oce(tc, mcg, tg); +void S_gc(ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg) { + if (max_cg == 0 && min_tg == 1 && max_tg == 1 && S_G.locked_objects[0] == Snil) + S_gc_011(tc); + else if (max_tg == static_generation || S_G.enable_object_counts) + S_gc_oce(tc, max_cg, min_tg, max_tg); else - S_gc_ocd(tc, mcg, tg); + S_gc_ocd(tc, max_cg, min_tg, max_tg); } diff -Nru chezscheme-9.5+dfsg/c/globals.h chezscheme-9.5.4+dfsg/c/globals.h --- chezscheme-9.5+dfsg/c/globals.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/globals.h 2020-08-31 02:35:12.000000000 +0000 @@ -15,7 +15,7 @@ */ /* globals that do NOT need to be preserved in a saved heap. - * they must be initalized each time the system is brought up. */ + * they must be initialized each time the system is brought up. */ /* gc.c */ EXTERN IBOOL S_checkheap; @@ -63,7 +63,7 @@ #endif /* globals that do need to be preserved in a saved heap */ -EXTERN struct { +EXTERN struct S_G_struct { /* scheme.c */ double thread_context[size_tc / sizeof(double)]; ptr active_threads_id; @@ -73,6 +73,10 @@ ptr heap_reserve_ratio_id; IBOOL retain_static_relocation; IBOOL enable_object_counts; + ptr scheme_version_id; + ptr make_load_binary_id; + ptr load_binary; + ptr profile_counters; /* foreign.c */ ptr foreign_static; @@ -82,18 +86,20 @@ ptr threadno; /* segment.c */ - seginfo *occupied_segments[max_real_space+1][static_generation+1]; + seginfo *occupied_segments[static_generation+1][max_real_space+1]; uptr number_of_nonstatic_segments; uptr number_of_empty_segments; /* alloc.c */ ptr *protected[max_protected]; uptr protect_next; - ptr first_loc[max_real_space+1][static_generation+1]; - ptr base_loc[max_real_space+1][static_generation+1]; - ptr next_loc[max_real_space+1][static_generation+1]; - iptr bytes_left[max_real_space+1][static_generation+1]; - uptr bytes_of_space[max_real_space+1][static_generation+1]; + ptr first_loc[static_generation+1][max_real_space+1]; + ptr base_loc[static_generation+1][max_real_space+1]; + ptr next_loc[static_generation+1][max_real_space+1]; + iptr bytes_left[static_generation+1][max_real_space+1]; + uptr bytes_of_space[static_generation+1][max_real_space+1]; + uptr bytes_of_generation[static_generation+1]; + uptr g0_bytes_after_last_gc; uptr collect_trip_bytes; ptr nonprocedure_code; ptr null_string; @@ -123,6 +129,7 @@ uptr countof_size[countof_types]; ptr static_id; ptr countof_names; + IGEN prcgeneration; /* intern.c */ iptr *oblist_length_pointer; diff -Nru chezscheme-9.5+dfsg/c/io.c chezscheme-9.5.4+dfsg/c/io.c --- chezscheme-9.5+dfsg/c/io.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/io.c 2020-08-31 02:35:12.000000000 +0000 @@ -20,6 +20,8 @@ #include #ifdef WIN32 #include +#include +#pragma comment(lib, "shell32.lib") #else /* WIN32 */ #include #include @@ -41,17 +43,23 @@ #ifdef WIN32 if (*inpath == '~' && (*(ip = inpath + 1) == 0 || DIRMARKERP(*ip))) { - const char *homedrive, *homepath; size_t n1, n2, n3; - - if ((homedrive = getenv("HOMEDRIVE")) != NULL && (homepath = getenv("HOMEPATH")) != NULL) { - n1 = strlen(homedrive); - n2 = strlen(homepath); - n3 = strlen(ip) + 1; - if ((outpath = malloc(n1 + n2 + n3)) == NULL) S_error("expand_pathname", "malloc failed"); - memcpy(outpath, homedrive, n1); - memcpy(outpath + n1, homepath, n2); - memcpy(outpath + n1 + n2, ip, n3); - return outpath; + wchar_t* homew; + if (SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Profile, 0, NULL, &homew))) { + char *home = Swide_to_utf8(homew); + CoTaskMemFree(homew); + if (NULL != home) { + size_t n1, n2; + n1 = strlen(home); + n2 = strlen(ip) + 1; + if ((outpath = malloc(n1 + n2)) == NULL) { + free(home); + S_error("expand_pathname", "malloc failed"); + } + memcpy(outpath, home, n1); + memcpy(outpath + n1, ip, n2); + free(home); + return outpath; + } } } #else /* WIN32 */ @@ -91,25 +99,9 @@ } #ifdef WIN32 -/* raises an exception if insufficient space cannot be malloc'd. - returns NULL if utf-8 path cannot be converted to wchars. - otherwise returns a freshly allocated, wide-character version - of inpath with ~ (home directory) prefix expanded, if possible */ wchar_t *S_malloc_wide_pathname(const char *inpath) { - size_t n; char *path; wchar_t *wpath; - - path = S_malloc_pathname(inpath); - n = strlen(path) + 1; - /* counting on utf-8 representation having at least as many chars as wchar representation */ - if ((wpath = (wchar_t *)malloc(n * sizeof(wchar_t))) == NULL) { - free(path); - S_error("expand_pathname", "malloc failed"); - } - if (MultiByteToWideChar(CP_UTF8, 0, path, -1, wpath, (int)n) == 0) { - free(path); - free(wpath); - return NULL; - } + char *path = S_malloc_pathname(inpath); + wchar_t *wpath = Sutf8_to_wide(path); free(path); return wpath; } diff -Nru chezscheme-9.5+dfsg/c/main.c chezscheme-9.5.4+dfsg/c/main.c --- chezscheme-9.5+dfsg/c/main.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/main.c 2020-08-31 02:35:12.000000000 +0000 @@ -14,13 +14,6 @@ * limitations under the License. */ -/**** - This is the default custom.c file defining main, which must be present - in order to build an executable file. - - See the file custom/sample.c for a customized variant of this file. -****/ - #include #include #include @@ -66,7 +59,25 @@ return p; } +#if defined(WIN32) && !defined(__MINGW32__) +#define GETENV Sgetenv +#define GETENV_FREE free +int wmain(int argc, wchar_t* wargv[], wchar_t* wenvp[]) { + const char** argv = (char**)malloc((argc + 1) * sizeof(char*)); + int i; + for (i = 0; i < argc; i++) { + wchar_t* warg = wargv[i]; + if (NULL == (argv[i] = Swide_to_utf8(warg))) { + fprintf_s(stderr, "Invalid argument: %S\n", warg); + exit(1); + } + } + argv[argc] = NULL; +#else /* WIN32 */ +#define GETENV getenv +#define GETENV_FREE (void) int main(int argc, const char *argv[]) { +#endif /* WIN32 */ int n, new_argc = 1; #ifdef SAVEDHEAPS int compact = 1, savefile_level = 0; @@ -313,13 +324,23 @@ if (import_notify != 0) { CALL1("import-notify", Strue); } - if (libdirs == 0) libdirs = getenv("CHEZSCHEMELIBDIRS"); - if (libdirs != 0) { - CALL1("library-directories", Sstring(libdirs)); - } - if (libexts == 0) libexts = getenv("CHEZSCHEMELIBEXTS"); - if (libexts != 0) { - CALL1("library-extensions", Sstring(libexts)); + if (libdirs == 0) { + char *cslibdirs = GETENV("CHEZSCHEMELIBDIRS"); + if (cslibdirs != 0) { + CALL1("library-directories", Sstring_utf8(cslibdirs, -1)); + GETENV_FREE(cslibdirs); + } + } else { + CALL1("library-directories", Sstring_utf8(libdirs, -1)); + } + if (libexts == 0) { + char *cslibexts = GETENV("CHEZSCHEMELIBEXTS"); + if (cslibexts != 0) { + CALL1("library-extensions", Sstring_utf8(cslibexts, -1)); + GETENV_FREE(cslibexts); + } + } else { + CALL1("library-extensions", Sstring_utf8(libexts, -1)); } if (compile_imported_libraries != 0) { CALL1("compile-imported-libraries", Strue); @@ -333,7 +354,7 @@ /* Sscheme_script invokes the value of the scheme-script parameter */ status = Sscheme_script(scriptfile, new_argc, argv); else if (programfile != (char *)0) - /* Sscheme_script invokes the value of the scheme-script parameter */ + /* Sscheme_program invokes the value of the scheme-program parameter */ status = Sscheme_program(programfile, new_argc, argv); else { /* Sscheme_start invokes the value of the scheme-start parameter */ diff -Nru chezscheme-9.5+dfsg/c/Makefile.a6nt chezscheme-9.5.4+dfsg/c/Makefile.a6nt --- chezscheme-9.5+dfsg/c/Makefile.a6nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Makefile.a6nt 2020-08-31 02:35:12.000000000 +0000 @@ -17,49 +17,49 @@ # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv95.dll -KernelLib = ..\bin\$m\csv95.lib -MTKernelLib = ..\boot\$m\csv95mt.lib -MDKernelLib = ..\boot\$m\csv95md.lib -KernelExp = ..\bin\$m\csv95.exp +KernelDll = ..\bin\$m\csv954.dll +KernelLib = ..\bin\$m\csv954.lib +MTKernelLib = ..\boot\$m\csv954mt.lib +MDKernelLib = ..\boot\$m\csv954md.lib +KernelExp = ..\bin\$m\csv954.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj ResFile = ..\boot\$m\scheme.res # We use MD so that we can link with and load DLLs built against msvcrxxx.dll -CFLAGS=/nologo /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +CFLAGS=/nologo /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS MDCFLAGS=$(CFLAGS) /MD MTCFLAGS=$(CFLAGS) /MT -DLLLDFLAGS=/machine:X64 /release /nologo +DLLLDFLAGS=/debug:full /machine:X64 /nologo # stack limit is 1MB by default. this is not enough for one of the mats in foreign.ms, which # builds up nested C & Scheme stack frames. 2MB seems to be enough, but we set to 16MB. -EXELDFLAGS=/machine:X64 /incremental:no /release /nologo /STACK:0x1000000 +EXELDFLAGS=/debug:full /machine:X64 /incremental:no /nologo /STACK:0x1000000 # use following flags for debugging -# CFLAGS=/nologo /Od /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS -# MDCFLAGS=$(CFLAGS) /Zi /MDd -# MTCFLAGS=$(CFLAGS) /Zi /MTd -# DLLLDFLAGS=/machine:X64 /debug /nologo /nodefaultlib:msvcrt -# EXELDFLAGS=/machine:X64 /incremental:no /debug /nologo /STACK:0x1000000 +# CFLAGS=/nologo /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +# MDCFLAGS=$(CFLAGS) /MDd +# MTCFLAGS=$(CFLAGS) /MTd SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib MDZlibLib=..\zlib\zlib.lib MTZlibLib=..\zlib\zlibmt.lib +MDLZ4Lib=..\lz4\lib\liblz4.lib +MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ - schlib.c thread.c expeditor.c scheme.c + schlib.c thread.c expeditor.c scheme.c compress-io.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ - schlib.obj thread.obj expeditor.obj scheme.obj + schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj -hsrc=system.h types.h version.h globals.h externs.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c .SUFFIXES: @@ -68,16 +68,17 @@ $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(hsrc) $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(SchemeInclude)/equates.h $(SchemeInclude)/scheme.h $(KernelLib) $(MTKernelLib) $(MDKernelLib): ..\zlib/zconf.h ..\zlib/zlib.h +$(KernelLib) $(MTKernelLib) $(MDKernelLib): ../lz4/lib/lz4.h ../lz4/lib/lz4frame.h -$(MTKernelLib): $(csrc) $(MTZlibLib) +$(MTKernelLib): $(csrc) $(MTZlibLib) $(MTLZ4Lib) -del /f $(MTKernelLib) cl /DSCHEME_STATIC /c $(MTCFLAGS) $(csrc) - link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) + link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) $(MTLZ4Lib) -$(MDKernelLib): $(csrc) $(MDZlibLib) +$(MDKernelLib): $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(MDKernelLib) cl /DSCHEME_STATIC /c $(MDCFLAGS) $(csrc) - link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) + link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) $(MDLZ4Lib) # nmake builds Dll twice if we list it with $(KernelLib) below $(KernelDll): $(KernelLib) @@ -88,11 +89,11 @@ # conflicts with other dlls. use 'depends ' to check. # we no longer attempt to rebase other the CRT dll since it # has already been signed. -$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) +$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(KernelLib) -del /f $(KernelDll) cl /c $(MDCFLAGS) $(csrc) - link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(SystemLib) + link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(MDLZ4Lib) $(SystemLib) editbin /nologo /rebase:base=0x67480000 $(KernelDll) $(MTMain): main.c @@ -132,6 +133,18 @@ nmake /nologo -f win32/Makefile.msc AR="link /lib" cd ../c +$(MDLZ4Lib) $(MTLZ4Lib): ../lz4/lib/lz4.c ../lz4/lib/lz4frame.c ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/lz4.obj $(MDCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4frame.obj $(MDCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hc.obj $(MDCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhash.obj $(MDCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MDLZ4Lib) ../lz4/lib/lz4.obj ../lz4/lib/lz4frame.obj ../lz4/lib/lz4hc.obj ../lz4/lib/xxhash.obj + cl /c /Fo../lz4/lib/lz4mt.obj $(MTCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4framemt.obj $(MTCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hcmt.obj $(MTCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhashmt.obj $(MTCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MTLZ4Lib) ../lz4/lib/lz4mt.obj ../lz4/lib/lz4framemt.obj ../lz4/lib/lz4hcmt.obj ../lz4/lib/xxhashmt.obj + clean: -del /f $(cobj) main.obj $(KernelExp) -del /f mtscheme.exe diff -Nru chezscheme-9.5+dfsg/c/Makefile.i3nt chezscheme-9.5.4+dfsg/c/Makefile.i3nt --- chezscheme-9.5+dfsg/c/Makefile.i3nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Makefile.i3nt 2020-08-31 02:35:12.000000000 +0000 @@ -17,45 +17,48 @@ # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv95.dll -KernelLib = ..\bin\$m\csv95.lib -MTKernelLib = ..\boot\$m\csv95mt.lib -MDKernelLib = ..\boot\$m\csv95md.lib -KernelExp = ..\bin\$m\csv95.exp +KernelDll = ..\bin\$m\csv954.dll +KernelLib = ..\bin\$m\csv954.lib +MTKernelLib = ..\boot\$m\csv954mt.lib +MDKernelLib = ..\boot\$m\csv954md.lib +KernelExp = ..\bin\$m\csv954.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj ResFile = ..\boot\$m\scheme.res # We use MD so that we can link with and load DLLs built against msvcrxxx.dll -CFLAGS=/nologo /fp:precise /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +CFLAGS=/nologo /fp:precise /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS MDCFLAGS=$(CFLAGS) /MD MTCFLAGS=$(CFLAGS) /MT -DLLLDFLAGS=/machine:ix86 /release /nologo +DLLLDFLAGS=/debug:full /machine:ix86 /nologo # see note in Makefile.a6nt regarding stack size. we use 8MB here to be consistent. -EXELDFLAGS=/machine:ix86 /incremental:no /release /nologo /STACK:0x800000 +EXELDFLAGS=/debug:full /machine:ix86 /incremental:no /nologo /STACK:0x800000 # use following flags for debugging -# CFLAGS=/nologo /Od /W3 /MDd /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DNO_UNISTD_H -# LDFLAGS=/machine:ix86 /incremental:no /release /nologo /debug +# CFLAGS=/nologo /fp:precise /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +# MDCFLAGS=$(CFLAGS) /MDd +# MTCFLAGS=$(CFLAGS) /MTd SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib MDZlibLib=..\zlib\zlib.lib MTZlibLib=..\zlib\zlibmt.lib +MDLZ4Lib=..\lz4\lib\liblz4.lib +MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ - schlib.c thread.c expeditor.c scheme.c + schlib.c thread.c expeditor.c scheme.c compress-io.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ - schlib.obj thread.obj expeditor.obj scheme.obj + schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj -hsrc=system.h types.h version.h globals.h externs.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c .SUFFIXES: @@ -64,16 +67,17 @@ $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(hsrc) $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(SchemeInclude)/equates.h $(SchemeInclude)/scheme.h $(KernelLib) $(MTKernelLib) $(MDKernelLib): ..\zlib/zconf.h ..\zlib/zlib.h +$(KernelLib) $(MTKernelLib) $(MDKernelLib): ../lz4/lib/lz4.h ../lz4/lib/lz4frame.h -$(MTKernelLib): $(csrc) $(MTZlibLib) +$(MTKernelLib): $(csrc) $(MTZlibLib) $(MTLZ4Lib) -del /f $(MTKernelLib) cl /DSCHEME_STATIC /c $(MTCFLAGS) $(csrc) - link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) + link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) $(MTLZ4Lib) -$(MDKernelLib): $(csrc) $(MDZlibLib) +$(MDKernelLib): $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(MDKernelLib) cl /DSCHEME_STATIC /c $(MDCFLAGS) $(csrc) - link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) + link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) $(MDLZ4Lib) # nmake builds Dll twice if we list it with $(KernelLib) below $(KernelDll): $(KernelLib) @@ -84,11 +88,11 @@ # conflicts with other dlls. use 'depends ' to check. # we no longer attempt to rebase other the CRT dll since it # has already been signed. -$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) +$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(KernelLib) -del /f $(KernelDll) cl /c $(MDCFLAGS) $(csrc) - link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(SystemLib) + link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(MDLZ4Lib) $(SystemLib) editbin /nologo /rebase:base=0x67480000 $(KernelDll) $(MTMain): main.c @@ -128,6 +132,18 @@ nmake /nologo -f win32/Makefile.msc AR="link /lib" cd ../c +$(MDLZ4Lib) $(MTLZ4Lib): ../lz4/lib/lz4.c ../lz4/lib/lz4frame.c ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/lz4.obj $(MDCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4frame.obj $(MDCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hc.obj $(MDCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhash.obj $(MDCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MDLZ4Lib) ../lz4/lib/lz4.obj ../lz4/lib/lz4frame.obj ../lz4/lib/lz4hc.obj ../lz4/lib/xxhash.obj + cl /c /Fo../lz4/lib/lz4mt.obj $(MTCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4framemt.obj $(MTCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hcmt.obj $(MTCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhashmt.obj $(MTCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MTLZ4Lib) ../lz4/lib/lz4mt.obj ../lz4/lib/lz4framemt.obj ../lz4/lib/lz4hcmt.obj ../lz4/lib/xxhashmt.obj + clean: -del /f $(cobj) main.obj $(KernelExp) -del /f mtscheme.exe diff -Nru chezscheme-9.5+dfsg/c/Makefile.ta6nt chezscheme-9.5.4+dfsg/c/Makefile.ta6nt --- chezscheme-9.5+dfsg/c/Makefile.ta6nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Makefile.ta6nt 2020-08-31 02:35:12.000000000 +0000 @@ -17,49 +17,49 @@ # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv95.dll -KernelLib = ..\bin\$m\csv95.lib -MTKernelLib = ..\boot\$m\csv95mt.lib -MDKernelLib = ..\boot\$m\csv95md.lib -KernelExp = ..\bin\$m\csv95.exp +KernelDll = ..\bin\$m\csv954.dll +KernelLib = ..\bin\$m\csv954.lib +MTKernelLib = ..\boot\$m\csv954mt.lib +MDKernelLib = ..\boot\$m\csv954md.lib +KernelExp = ..\bin\$m\csv954.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj ResFile = ..\boot\$m\scheme.res # We use MD so that we can link with and load DLLs built against msvcrxxx.dll -CFLAGS=/nologo /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +CFLAGS=/nologo /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS MDCFLAGS=$(CFLAGS) /MD MTCFLAGS=$(CFLAGS) /MT -DLLLDFLAGS=/machine:X64 /release /nologo +DLLLDFLAGS=/debug:full /machine:X64 /nologo # stack limit is 1MB by default. this is not enough for one of the mats in foreign.ms, which # builds up nested C & Scheme stack frames. 2MB seems to be enough, but we set to 16MB. -EXELDFLAGS=/machine:X64 /incremental:no /release /nologo /STACK:0x1000000 +EXELDFLAGS=/debug:full /machine:X64 /incremental:no /nologo /STACK:0x1000000 # use following flags for debugging -# CFLAGS=/nologo /Od /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS -# MDCFLAGS=$(CFLAGS) /Zi /MDd -# MTCFLAGS=$(CFLAGS) /Zi /MTd -# DLLLDFLAGS=/machine:X64 /debug /nologo /nodefaultlib:msvcrt -# EXELDFLAGS=/machine:X64 /incremental:no /debug /nologo /STACK:0x1000000 +# CFLAGS=/nologo /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +# MDCFLAGS=$(CFLAGS) /MDd +# MTCFLAGS=$(CFLAGS) /MTd SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib MDZlibLib=..\zlib\zlib.lib MTZlibLib=..\zlib\zlibmt.lib +MDLZ4Lib=..\lz4\lib\liblz4.lib +MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ - schlib.c thread.c expeditor.c scheme.c + schlib.c thread.c expeditor.c scheme.c compress-io.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ - schlib.obj thread.obj expeditor.obj scheme.obj + schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj -hsrc=system.h types.h version.h globals.h externs.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c .SUFFIXES: @@ -68,16 +68,17 @@ $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(hsrc) $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(SchemeInclude)/equates.h $(SchemeInclude)/scheme.h $(KernelLib) $(MTKernelLib) $(MDKernelLib): ..\zlib/zconf.h ..\zlib/zlib.h +$(KernelLib) $(MTKernelLib) $(MDKernelLib): ../lz4/lib/lz4.h ../lz4/lib/lz4frame.h -$(MTKernelLib): $(csrc) $(MTZlibLib) +$(MTKernelLib): $(csrc) $(MTZlibLib) $(MTLZ4Lib) -del /f $(MTKernelLib) cl /DSCHEME_STATIC /c $(MTCFLAGS) $(csrc) - link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) + link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) $(MTLZ4Lib) -$(MDKernelLib): $(csrc) $(MDZlibLib) +$(MDKernelLib): $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(MDKernelLib) cl /DSCHEME_STATIC /c $(MDCFLAGS) $(csrc) - link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) + link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) $(MDLZ4Lib) # nmake builds Dll twice if we list it with $(KernelLib) below $(KernelDll): $(KernelLib) @@ -88,11 +89,11 @@ # conflicts with other dlls. use 'depends ' to check. # we no longer attempt to rebase other the CRT dll since it # has already been signed. -$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) +$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(KernelLib) -del /f $(KernelDll) cl /c $(MDCFLAGS) $(csrc) - link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(SystemLib) + link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(MDLZ4Lib) $(SystemLib) editbin /nologo /rebase:base=0x67480000 $(KernelDll) $(MTMain): main.c @@ -132,6 +133,18 @@ nmake /nologo -f win32/Makefile.msc AR="link /lib" cd ../c +$(MDLZ4Lib) $(MTLZ4Lib): ../lz4/lib/lz4.c ../lz4/lib/lz4frame.c ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/lz4.obj $(MDCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4frame.obj $(MDCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hc.obj $(MDCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhash.obj $(MDCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MDLZ4Lib) ../lz4/lib/lz4.obj ../lz4/lib/lz4frame.obj ../lz4/lib/lz4hc.obj ../lz4/lib/xxhash.obj + cl /c /Fo../lz4/lib/lz4mt.obj $(MTCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4framemt.obj $(MTCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hcmt.obj $(MTCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhashmt.obj $(MTCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MTLZ4Lib) ../lz4/lib/lz4mt.obj ../lz4/lib/lz4framemt.obj ../lz4/lib/lz4hcmt.obj ../lz4/lib/xxhashmt.obj + clean: -del /f $(cobj) main.obj $(KernelExp) -del /f mtscheme.exe diff -Nru chezscheme-9.5+dfsg/c/Makefile.ti3nt chezscheme-9.5.4+dfsg/c/Makefile.ti3nt --- chezscheme-9.5+dfsg/c/Makefile.ti3nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Makefile.ti3nt 2020-08-31 02:35:12.000000000 +0000 @@ -17,45 +17,48 @@ # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv95.dll -KernelLib = ..\bin\$m\csv95.lib -MTKernelLib = ..\boot\$m\csv95mt.lib -MDKernelLib = ..\boot\$m\csv95md.lib -KernelExp = ..\bin\$m\csv95.exp +KernelDll = ..\bin\$m\csv954.dll +KernelLib = ..\bin\$m\csv954.lib +MTKernelLib = ..\boot\$m\csv954mt.lib +MDKernelLib = ..\boot\$m\csv954md.lib +KernelExp = ..\bin\$m\csv954.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj ResFile = ..\boot\$m\scheme.res # We use MD so that we can link with and load DLLs built against msvcrxxx.dll -CFLAGS=/nologo /fp:precise /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +CFLAGS=/nologo /fp:precise /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS MDCFLAGS=$(CFLAGS) /MD MTCFLAGS=$(CFLAGS) /MT -DLLLDFLAGS=/machine:ix86 /release /nologo +DLLLDFLAGS=/debug:full /machine:ix86 /nologo # see note in Makefile.a6nt regarding stack size. we use 8MB here to be consistent. -EXELDFLAGS=/machine:ix86 /incremental:no /release /nologo /STACK:0x800000 +EXELDFLAGS=/debug:full /machine:ix86 /incremental:no /nologo /STACK:0x800000 # use following flags for debugging -# CFLAGS=/nologo /Od /W3 /MDd /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DNO_UNISTD_H -# LDFLAGS=/machine:ix86 /incremental:no /release /nologo /debug +# CFLAGS=/nologo /fp:precise /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /I..\lz4\lib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS +# MDCFLAGS=$(CFLAGS) /MDd +# MTCFLAGS=$(CFLAGS) /MTd SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib MDZlibLib=..\zlib\zlib.lib MTZlibLib=..\zlib\zlibmt.lib +MDLZ4Lib=..\lz4\lib\liblz4.lib +MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ - schlib.c thread.c expeditor.c scheme.c + schlib.c thread.c expeditor.c scheme.c compress-io.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ - schlib.obj thread.obj expeditor.obj scheme.obj + schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj -hsrc=system.h types.h version.h globals.h externs.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c .SUFFIXES: @@ -64,16 +67,17 @@ $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(hsrc) $(KernelLib) $(MTKernelLib) $(MDKernelLib): $(SchemeInclude)/equates.h $(SchemeInclude)/scheme.h $(KernelLib) $(MTKernelLib) $(MDKernelLib): ..\zlib/zconf.h ..\zlib/zlib.h +$(KernelLib) $(MTKernelLib) $(MDKernelLib): ../lz4/lib/lz4.h ../lz4/lib/lz4frame.h -$(MTKernelLib): $(csrc) $(MTZlibLib) +$(MTKernelLib): $(csrc) $(MTZlibLib) $(MTLZ4Lib) -del /f $(MTKernelLib) cl /DSCHEME_STATIC /c $(MTCFLAGS) $(csrc) - link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) + link /lib /nologo -out:$(MTKernelLib) $(cobj) $(MTZlibLib) $(MTLZ4Lib) -$(MDKernelLib): $(csrc) $(MDZlibLib) +$(MDKernelLib): $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(MDKernelLib) cl /DSCHEME_STATIC /c $(MDCFLAGS) $(csrc) - link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) + link /lib /nologo -out:$(MDKernelLib) $(cobj) $(MDZlibLib) $(MDLZ4Lib) # nmake builds Dll twice if we list it with $(KernelLib) below $(KernelDll): $(KernelLib) @@ -84,11 +88,11 @@ # conflicts with other dlls. use 'depends ' to check. # we no longer attempt to rebase other the CRT dll since it # has already been signed. -$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) +$(KernelLib): $(ResFile) $(csrc) $(MDZlibLib) $(MDLZ4Lib) -del /f $(KernelLib) -del /f $(KernelDll) cl /c $(MDCFLAGS) $(csrc) - link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(SystemLib) + link -dll -out:$(KernelDll) $(DLLLDFLAGS) $(ResFile) $(cobj) $(MDZlibLib) $(MDLZ4Lib) $(SystemLib) editbin /nologo /rebase:base=0x67480000 $(KernelDll) $(MTMain): main.c @@ -128,6 +132,18 @@ nmake /nologo -f win32/Makefile.msc AR="link /lib" cd ../c +$(MDLZ4Lib) $(MTLZ4Lib): ../lz4/lib/lz4.c ../lz4/lib/lz4frame.c ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/lz4.obj $(MDCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4frame.obj $(MDCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hc.obj $(MDCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhash.obj $(MDCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MDLZ4Lib) ../lz4/lib/lz4.obj ../lz4/lib/lz4frame.obj ../lz4/lib/lz4hc.obj ../lz4/lib/xxhash.obj + cl /c /Fo../lz4/lib/lz4mt.obj $(MTCFLAGS) ../lz4/lib/lz4.c + cl /c /Fo../lz4/lib/lz4framemt.obj $(MTCFLAGS) ../lz4/lib/lz4frame.c + cl /c /Fo../lz4/lib/lz4hcmt.obj $(MTCFLAGS) ../lz4/lib/lz4hc.c + cl /c /Fo../lz4/lib/xxhashmt.obj $(MTCFLAGS) ../lz4/lib/xxhash.c + lib /OUT:$(MTLZ4Lib) ../lz4/lib/lz4mt.obj ../lz4/lib/lz4framemt.obj ../lz4/lib/lz4hcmt.obj ../lz4/lib/xxhashmt.obj + clean: -del /f $(cobj) main.obj $(KernelExp) -del /f mtscheme.exe diff -Nru chezscheme-9.5+dfsg/c/Mf-a6fb chezscheme-9.5.4+dfsg/c/Mf-a6fb --- chezscheme-9.5+dfsg/c/Mf-a6fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6fb 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = X86_64 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -O ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-a6le chezscheme-9.5.4+dfsg/c/Mf-a6le --- chezscheme-9.5+dfsg/c/Mf-a6le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = a6le Cpu = X86_64 -mdclib = -lm -ldl -lncurses -lrt +mdclib = -lm -ldl ${ncursesLib} -lrt -luuid C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_x86_64 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-a6nb chezscheme-9.5.4+dfsg/c/Mf-a6nb --- chezscheme-9.5+dfsg/c/Mf-a6nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6nb 2020-08-31 02:35:12.000000000 +0000 @@ -27,15 +27,22 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} + paxctl +m ${Scheme} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-a6nt chezscheme-9.5.4+dfsg/c/Mf-a6nt --- chezscheme-9.5+dfsg/c/Mf-a6nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6nt 2020-08-31 02:35:12.000000000 +0000 @@ -21,15 +21,45 @@ mdobj=windows.$o mdsrc=windows.c Makefile.$m cs.ico scheme.rc make.bat mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe* +cross=f include Mf-base -${Scheme}: make.bat +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + +${Scheme}${cross:f=}: make.bat cmd.exe /c make.bat cp ../bin/$m/scheme.exe ../bin/$m/petite.exe + cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb make.bat: vs.bat echo '@echo off' > $@ echo 'set MAKEFLAGS=' >> $@ echo 'vs.bat amd64 && nmake /f Makefile.$m /nologo %*' >> $@ chmod +x $@ + +# ------------------------------------------------------- +# For cross-compilation, triggered by setting cross=t o=o + +C = ${CC} ${CPPFLAGS} -O2 ${CFLAGS} + +${Scheme}${cross:t=}: ${Main} ${Kernel} ${KernelLinkDeps} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} -lshell32 -luser32 -lole32 -lrpcrt4 -luuid + +.c.$o: + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c + +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} + +../zlib/configure.log: + echo "all:" >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + touch ../zlib/configure.log + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-a6ob chezscheme-9.5.4+dfsg/c/Mf-a6ob --- chezscheme-9.5+dfsg/c/Mf-a6ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6ob 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = X86_64 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Werror -O ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -Wl,--export-dynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -Wl,--export-dynamic -Wl,-zwxneeded -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-a6osx chezscheme-9.5.4+dfsg/c/Mf-a6osx --- chezscheme-9.5+dfsg/c/Mf-a6osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6osx 2020-08-31 02:35:12.000000000 +0000 @@ -16,8 +16,8 @@ m = a6osx Cpu = X86_64 -mdclib = -liconv -lm -lncurses -C = ${CC} ${CPPFLAGS} -m64 -Wpointer-arith -Wall -Wextra -Werror -O2 -I/opt/X11/include/ ${CFLAGS} +mdclib = -liconv -lm ${ncursesLib} +C = ${CC} ${CPPFLAGS} -m64 -Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough -Werror -O2 -I/opt/X11/include/ ${CFLAGS} o = o mdsrc = i3le.c mdobj = i3le.o @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-a6s2 chezscheme-9.5.4+dfsg/c/Mf-a6s2 --- chezscheme-9.5+dfsg/c/Mf-a6s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-a6s2 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = a6s2 Cpu = X86_64 -mdclib = -lnsl -ldl -lm -lcurses -lrt +mdclib = -lnsl -ldl -lm ${cursesLib} -lrt C = ${CC} ${CPPFLAGS} -m64 -Wpointer-arith -Wextra -Werror -O ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -DSOLARIS -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -DSOLARIS -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_x86_64 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-arm32le chezscheme-9.5.4+dfsg/c/Mf-arm32le --- chezscheme-9.5+dfsg/c/Mf-arm32le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-arm32le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = arm32le Cpu = ARMV6 -mdclib = -lm -ldl -lncurses -lrt +mdclib = -lm -ldl ${ncursesLib} -lrt -luuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS} o = o mdsrc = arm32le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: (cd ../zlib; ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-base chezscheme-9.5.4+dfsg/c/Mf-base --- chezscheme-9.5+dfsg/c/Mf-base 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-base 2020-08-31 02:35:12.000000000 +0000 @@ -18,17 +18,27 @@ Include=../boot/$m PetiteBoot=../boot/$m/petite.boot SchemeBoot=../boot/$m/scheme.boot -Kernel=../boot/$m/kernel.$o Main=../boot/$m/main.$o Scheme=../bin/$m/scheme -kernelsrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-ocd.c gc-oce.c\ +# One of these sets is referenced in Mf-config to select between +# linking with kernel.o or libkernel.a + +KernelO=../boot/$m/kernel.$o +KernelOLinkDeps= +KernelOLinkLibs= + +KernelLib=../boot/$m/libkernel.a +KernelLibLinkDeps=${zlibDep} ${LZ4Dep} +KernelLibLinkLibs=${zlibLib} ${LZ4Lib} + +kernelsrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-ocd.c gc-oce.c\ number.c schsig.c io.c new-io.c print.c fasl.c stats.c foreign.c prim.c prim5.c flushcache.c\ - schlib.c thread.c expeditor.c scheme.c + schlib.c thread.c expeditor.c scheme.c compress-io.c kernelobj=${kernelsrc:%.c=%.$o} ${mdobj} -kernelhdr=system.h types.h version.h globals.h externs.h segment.h gc.c sort.h thread.h config.h itest.c +kernelhdr=system.h types.h version.h globals.h externs.h segment.h gc.c sort.h thread.h config.h compress-io.h itest.c nocurses.h mainsrc=main.c @@ -51,17 +61,21 @@ scheme.o: itest.c scheme.o main.o: config.h -${kernelobj}: system.h types.h version.h externs.h globals.h segment.h thread.h sort.h +${kernelobj}: system.h types.h version.h externs.h globals.h segment.h thread.h sort.h compress-io.h nocurses.h ${kernelobj}: ${Include}/equates.h ${Include}/scheme.h ${mainobj}: ${Include}/scheme.h -${kernelobj}: ../zlib/zconf.h ../zlib/zlib.h -gc-ocd.o gc-oce.o: gc.c +${kernelobj}: ${zlibHeaderDep} ${LZ4HeaderDep} +gc-011.o gc-ocd.o gc-oce.o: gc.c ../zlib/zlib.h ../zlib/zconf.h: ../zlib/configure.log ../zlib/libz.a: ../zlib/configure.log (cd ../zlib; ${MAKE}) +LZ4Sources=../lz4/lib/lz4.h ../lz4/lib/lz4frame.h \ + ../lz4/lib/lz4.c ../lz4/lib/lz4frame.c \ + ../lz4/lib/lz4hc.c ../lz4/lib/xxhash.c + clean: rm -f *.$o ${mdclean} rm -f Make.out diff -Nru chezscheme-9.5+dfsg/c/Mf-i3fb chezscheme-9.5.4+dfsg/c/Mf-i3fb --- chezscheme-9.5+dfsg/c/Mf-i3fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3fb 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = I386 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -O ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3le chezscheme-9.5.4+dfsg/c/Mf-i3le --- chezscheme-9.5+dfsg/c/Mf-i3le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = i3le Cpu = I386 -mdclib = -lm -ldl -lncurses -lrt +mdclib = -lm -ldl ${ncursesLib} -lrt -luuid C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -fno-stack-protector ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_i386 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_i386 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3nb chezscheme-9.5.4+dfsg/c/Mf-i3nb --- chezscheme-9.5+dfsg/c/Mf-i3nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3nb 2020-08-31 02:35:12.000000000 +0000 @@ -27,15 +27,22 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} + paxctl +m ${Scheme} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3nt chezscheme-9.5.4+dfsg/c/Mf-i3nt --- chezscheme-9.5+dfsg/c/Mf-i3nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3nt 2020-08-31 02:35:12.000000000 +0000 @@ -21,15 +21,45 @@ mdobj=windows.$o mdsrc=windows.c Makefile.$m cs.ico scheme.rc make.bat mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe* +cross=f include Mf-base -${Scheme}: make.bat +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + +${Scheme}${cross:f=}: make.bat cmd.exe /c make.bat cp ../bin/$m/scheme.exe ../bin/$m/petite.exe + cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb make.bat: vs.bat echo '@echo off' > $@ echo 'set MAKEFLAGS=' >> $@ echo 'vs.bat x86 && nmake /f Makefile.$m /nologo %*' >> $@ chmod +x $@ + +# ------------------------------------------------------- +# For cross-compilation, triggered by setting cross=t o=o + +C = ${CC} ${CPPFLAGS} -O2 ${CFLAGS} + +${Scheme}${cross:t=}: ${Main} ${Kernel} ${KernelLinkDeps} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} -lshell32 -luser32 -lole32 -lrpcrt4 -luuid + +.c.$o: + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c + +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} + +../zlib/configure.log: + echo "all:" >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + touch ../zlib/configure.log + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3ob chezscheme-9.5.4+dfsg/c/Mf-i3ob --- chezscheme-9.5+dfsg/c/Mf-i3ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3ob 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = I386 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Werror -O ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -Wl,--export-dynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -Wl,--export-dynamic -Wl,-zwxneeded -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3osx chezscheme-9.5.4+dfsg/c/Mf-i3osx --- chezscheme-9.5+dfsg/c/Mf-i3osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3osx 2020-08-31 02:35:12.000000000 +0000 @@ -16,8 +16,8 @@ m = i3osx Cpu = I386 -mdclib = -liconv -lm -lncurses -C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wall -Wextra -Werror -O2 -msse2 -I/opt/X11/include/ ${CFLAGS} +mdclib = -liconv -lm ${ncursesLib} +C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough -Werror -O2 -msse2 -I/opt/X11/include/ ${CFLAGS} o = o mdsrc = i3le.c mdobj = i3le.o @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3qnx chezscheme-9.5.4+dfsg/c/Mf-i3qnx --- chezscheme-9.5+dfsg/c/Mf-i3qnx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3qnx 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = i3qnx Cpu = I386 -mdclib = -lm /usr/local/lib/libiconv.so -lsocket -lncurses +mdclib = -lm /usr/local/lib/libiconv.so -lsocket ${ncursesLib} C = qcc ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -O2 -N2048K ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib -I${LocalInclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} -I${LocalInclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -mi386nto -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -mi386nto -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -Wl,--export-dynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -Wl,--export-dynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-i3s2 chezscheme-9.5.4+dfsg/c/Mf-i3s2 --- chezscheme-9.5+dfsg/c/Mf-i3s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-i3s2 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = i3s2 Cpu = I386 -mdclib = -lnsl -ldl -lm -lcurses -lrt +mdclib = -lnsl -ldl -lm ${cursesLib} -lrt C = ${CC} ${CFLAGS} -m32 -Wpointer-arith -Wextra -Werror -O ${CPPFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -DSOLARIS -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -DSOLARIS -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_i386 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_i386 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ppc32le chezscheme-9.5.4+dfsg/c/Mf-ppc32le --- chezscheme-9.5+dfsg/c/Mf-ppc32le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ppc32le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = ppc32le Cpu = PPC32 -mdclib = -lm -ldl -lncurses -lrt +mdclib = -lm -ldl ${ncursesLib} -lrt -luuid C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS} o = o mdsrc = ppc32.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6fb chezscheme-9.5.4+dfsg/c/Mf-ta6fb --- chezscheme-9.5+dfsg/c/Mf-ta6fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6fb 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = X86_64 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses -lpthread +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lpthread -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6le chezscheme-9.5.4+dfsg/c/Mf-ta6le --- chezscheme-9.5+dfsg/c/Mf-ta6le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = ta6le Cpu = X86_64 -mdclib = -lm -ldl -lncurses -lpthread -lrt +mdclib = -lm -ldl ${ncursesLib} -lpthread -lrt -luuid C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_x86_64 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6nb chezscheme-9.5.4+dfsg/c/Mf-ta6nb --- chezscheme-9.5+dfsg/c/Mf-ta6nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6nb 2020-08-31 02:35:12.000000000 +0000 @@ -27,15 +27,22 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} + paxctl +m ${Scheme} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6nt chezscheme-9.5.4+dfsg/c/Mf-ta6nt --- chezscheme-9.5+dfsg/c/Mf-ta6nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6nt 2020-08-31 02:35:12.000000000 +0000 @@ -21,15 +21,45 @@ mdobj=windows.$o mdsrc=windows.c Makefile.$m cs.ico scheme.rc make.bat mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe* +cross=f include Mf-base -${Scheme}: make.bat +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + +${Scheme}${cross:f=}: make.bat cmd.exe /c make.bat cp ../bin/$m/scheme.exe ../bin/$m/petite.exe + cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb make.bat: vs.bat echo '@echo off' > $@ echo 'set MAKEFLAGS=' >> $@ echo 'vs.bat amd64 && nmake /f Makefile.$m /nologo %*' >> $@ chmod +x $@ + +# ------------------------------------------------------- +# For cross-compilation, triggered by setting cross=t o=o + +C = ${CC} ${CPPFLAGS} -O2 ${CFLAGS} + +${Scheme}${cross:t=}: ${Main} ${Kernel} ${KernelLinkDeps} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} -lshell32 -luser32 -lole32 -lrpcrt4 -luuid + +.c.$o: + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c + +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} + +../zlib/configure.log: + echo "all:" >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + touch ../zlib/configure.log + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6ob chezscheme-9.5.4+dfsg/c/Mf-ta6ob --- chezscheme-9.5+dfsg/c/Mf-ta6ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6ob 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = X86_64 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses -lpthread +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lpthread -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Werror -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -Wl,--export-dynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -Wl,--export-dynamic -Wl,-zwxneeded -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6osx chezscheme-9.5.4+dfsg/c/Mf-ta6osx --- chezscheme-9.5+dfsg/c/Mf-ta6osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6osx 2020-08-31 02:35:12.000000000 +0000 @@ -16,8 +16,8 @@ m = ta6osx Cpu = X86_64 -mdclib = -liconv -lm -lncurses -C = ${CC} ${CPPFLAGS} -m64 -Wpointer-arith -Wall -Wextra -Werror -O2 -I/opt/X11/include/ ${CFLAGS} +mdclib = -liconv -lm ${ncursesLib} +C = ${CC} ${CPPFLAGS} -m64 -Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough -Werror -O2 -I/opt/X11/include/ ${CFLAGS} o = o mdsrc = i3le.c mdobj = i3le.o @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ta6s2 chezscheme-9.5.4+dfsg/c/Mf-ta6s2 --- chezscheme-9.5+dfsg/c/Mf-ta6s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ta6s2 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = ta6s2 Cpu = X86_64 -mdclib = -lnsl -ldl -lm -lpthread -lcurses -lrt +mdclib = -lnsl -ldl -lm -lpthread ${cursesLib} -lrt C = ${CC} ${CPPFLAGS} -m64 -Wpointer-arith -Wextra -Werror -O2 -D_REENTRANT ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -DSOLARIS -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -DSOLARIS -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_x86_64 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m64 ./configure --64) + (cd ../zlib; CFLAGS="${CFLAGS} -m64" ./configure --64) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m64" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3fb chezscheme-9.5.4+dfsg/c/Mf-ti3fb --- chezscheme-9.5+dfsg/c/Mf-ti3fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3fb 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = I386 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses -lpthread +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lpthread -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3le chezscheme-9.5.4+dfsg/c/Mf-ti3le --- chezscheme-9.5+dfsg/c/Mf-ti3le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = ti3le Cpu = I386 -mdclib = -lm -ldl -lncurses -lpthread -lrt +mdclib = -lm -ldl ${ncursesLib} -lpthread -lrt -luuid C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_i386 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_i386 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3nb chezscheme-9.5.4+dfsg/c/Mf-ti3nb --- chezscheme-9.5+dfsg/c/Mf-ti3nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3nb 2020-08-31 02:35:12.000000000 +0000 @@ -27,15 +27,22 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -m elf_i386 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -m elf_i386 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} + paxctl +m ${Scheme} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3nt chezscheme-9.5.4+dfsg/c/Mf-ti3nt --- chezscheme-9.5+dfsg/c/Mf-ti3nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3nt 2020-08-31 02:35:12.000000000 +0000 @@ -21,15 +21,45 @@ mdobj=windows.$o mdsrc=windows.c Makefile.$m cs.ico scheme.rc make.bat mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe* +cross=f include Mf-base -${Scheme}: make.bat +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + +${Scheme}${cross:f=}: make.bat cmd.exe /c make.bat cp ../bin/$m/scheme.exe ../bin/$m/petite.exe + cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb make.bat: vs.bat echo '@echo off' > $@ echo 'set MAKEFLAGS=' >> $@ echo 'vs.bat x86 && nmake /f Makefile.$m /nologo %*' >> $@ chmod +x $@ + +# ------------------------------------------------------- +# For cross-compilation, triggered by setting cross=t o=o + +C = ${CC} ${CPPFLAGS} -O2 ${CFLAGS} -D__MINGW_USE_VC2005_COMPAT + +${Scheme}${cross:t=}: ${Main} ${Kernel} ${KernelLinkDeps} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} -lshell32 -luser32 -lole32 -lrpcrt4 -luuid + +.c.$o: + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c + +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} + +../zlib/configure.log: + echo "all:" >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + touch ../zlib/configure.log + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3ob chezscheme-9.5.4+dfsg/c/Mf-ti3ob --- chezscheme-9.5+dfsg/c/Mf-ti3ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3ob 2020-08-31 02:35:12.000000000 +0000 @@ -17,7 +17,7 @@ Cpu = I386 mdinclude = -I/usr/local/include -I/usr/X11R6/include -mdclib = -L/usr/local/lib -liconv -lm -lncurses -lpthread +mdclib = -L/usr/local/lib -liconv -lm ${ncursesLib} -lpthread -lossp-uuid C = ${CC} ${CPPFLAGS} -Wpointer-arith -Werror -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = i3le.c @@ -27,15 +27,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib ${mdinclude} $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} ${mdinclude} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -Wl,--export-dynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -Wl,--export-dynamic -Wl,-zwxneeded -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3osx chezscheme-9.5.4+dfsg/c/Mf-ti3osx --- chezscheme-9.5+dfsg/c/Mf-ti3osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3osx 2020-08-31 02:35:12.000000000 +0000 @@ -16,8 +16,8 @@ m = ti3osx Cpu = I386 -mdclib = -liconv -lm -lncurses -C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wall -Wextra -Werror -O2 -msse2 -I/opt/X11/include/ ${CFLAGS} +mdclib = -liconv -lm ${ncursesLib} +C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough -Werror -O2 -msse2 -I/opt/X11/include/ ${CFLAGS} o = o mdsrc = i3le.c mdobj = i3le.o @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-ti3s2 chezscheme-9.5.4+dfsg/c/Mf-ti3s2 --- chezscheme-9.5+dfsg/c/Mf-ti3s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-ti3s2 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = ti3s2 Cpu = I386 -mdclib = -lnsl -ldl -lm -lpthread -lcurses -lrt +mdclib = -lnsl -ldl -lm -lpthread ${cursesLib} -lrt C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -O2 -D_REENTRANT ${CFLAGS} o = o mdsrc = i3le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -DSOLARIS -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -DSOLARIS -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -melf_i386 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -melf_i386 -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/Mf-tppc32le chezscheme-9.5.4+dfsg/c/Mf-tppc32le --- chezscheme-9.5+dfsg/c/Mf-tppc32le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/Mf-tppc32le 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ m = tppc32le Cpu = PPC32 -mdclib = -lm -ldl -lncurses -lpthread -lrt +mdclib = -lm -ldl ${ncursesLib} -lpthread -lrt -luuid C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS} o = o mdsrc = ppc32le.c @@ -26,15 +26,21 @@ .SUFFIXES: .c .o .c.o: - $C -c -D${Cpu} -I${Include} -I../zlib $*.c + $C -c -D${Cpu} -I${Include} ${zlibInc} ${LZ4Inc} $*.c include Mf-base -${Kernel}: ${kernelobj} ../zlib/libz.a - ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a +${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} + ${LD} -r -X -o ${KernelO} ${kernelobj} ${zlibLib} ${LZ4Lib} -${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} +${KernelLib}: ${kernelobj} + ${AR} ${ARFLAGS} ${KernelLib} ${kernelobj} + +${Scheme}: ${Kernel} ${KernelLinkDeps} ${Main} + $C -rdynamic -o ${Scheme} ${Main} ${Kernel} ${mdclib} ${KernelLinkLibs} ${LDFLAGS} ../zlib/configure.log: - (cd ../zlib; CFLAGS=-m32 ./configure) + (cd ../zlib; CFLAGS="${CFLAGS} -m32" ./configure) + +../lz4/lib/liblz4.a: ${LZ4Sources} + (cd ../lz4/lib; CFLAGS="${CFLAGS} -m32" ${MAKE} liblz4.a) diff -Nru chezscheme-9.5+dfsg/c/new-io.c chezscheme-9.5.4+dfsg/c/new-io.c --- chezscheme-9.5+dfsg/c/new-io.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/new-io.c 2020-08-31 02:35:12.000000000 +0000 @@ -27,6 +27,8 @@ #endif /* WIN32 */ #include #include "zlib.h" +#include "lz4.h" +#include "lz4hc.h" /* !!! UNLESS you enjoy spending endless days tracking down race conditions !!! involving the garbage collector, please note: DEACTIVATE and @@ -53,14 +55,14 @@ INT flags, INT no_create, INT no_fail, INT no_truncate, INT append, INT lock, INT replace, INT compressed)); static INT lockfile PROTO((INT fd)); -static ptr make_gzxfile PROTO((int fd, gzFile file)); static int is_valid_zlib_length(iptr count); +static int is_valid_lz4_length(iptr count); /* - not_ok_is_fatal: !ok definitely implies error, so ignore gzerror + not_ok_is_fatal: !ok definitely implies error, so ignore glzerror ok: whether the result of body seems to be ok flag: will be set when an error is detected and cleared if no error - fd: the gzFile object to call gzerror on + fd: the glzFile object to call glzerror on body: the operation we are checking the error on */ #ifdef EINTR @@ -76,8 +78,8 @@ if (ok) { flag = 0; } \ else { \ INT errnum; \ - gzerror((fd),&errnum); \ - gzclearerr((fd)); \ + S_glzerror((fd),&errnum); \ + S_glzclearerr((fd)); \ if (errnum == Z_ERRNO) { \ flag = errno != EINTR; \ } else { \ @@ -97,8 +99,8 @@ if (ok) { flag = 0; break; } \ else { \ INT errnum; \ - gzerror((fd),&errnum); \ - gzclearerr((fd)); \ + S_glzerror((fd),&errnum); \ + S_glzclearerr((fd)); \ if (errnum == Z_ERRNO) { \ if (errno != EINTR) { flag = 1; break; } \ } else { \ @@ -115,8 +117,8 @@ if (ok) { flag = 0; } \ else { \ INT errnum; \ - gzerror((fd),&errnum); \ - gzclearerr((fd)); \ + S_glzerror((fd),&errnum); \ + S_glzclearerr((fd)); \ if (errnum == Z_ERRNO) { flag = 1; } \ else { \ flag = not_ok_is_fatal || errnum != Z_OK; \ @@ -143,33 +145,22 @@ static INT lockfile(INT fd) { return lockf(fd, F_LOCK, (off_t)0); } #endif -/* work around missing zlib API operation to extract a gzFile's fd */ -typedef struct { - int fd; - gzFile file; -} gzxfile; -#define gzxfile_fd(x) (((gzxfile *)&BVIT(x,0))->fd) -#define gzxfile_gzfile(x) (((gzxfile *)&BVIT(x,0))->file) -static ptr make_gzxfile(int fd, gzFile file) { - ptr bv; - - bv = S_bytevector(sizeof(gzxfile)); - gzxfile_fd(bv) = fd; - gzxfile_gzfile(bv) = file; - return bv; -} +#define MAKE_GZXFILE(x) Sinteger((iptr)x) +#define GZXFILE_GZFILE(x) ((glzFile)Sinteger_value(x)) + INT S_gzxfile_fd(ptr x) { - return gzxfile_fd(x); + return GZXFILE_GZFILE(x)->fd; } -gzFile S_gzxfile_gzfile(ptr x) { - return gzxfile_gzfile(x); + +glzFile S_gzxfile_gzfile(ptr x) { + return GZXFILE_GZFILE(x); } ptr S_new_open_input_fd(const char *infilename, IBOOL compressed) { char *filename; INT saved_errno = 0; INT fd, dupfd, error, result, ok, flag; - gzFile file; + glzFile file; #ifdef PTHREADS ptr tc = get_thread_context(); #endif @@ -207,25 +198,26 @@ return Scons(FIX(OPEN_ERROR_OTHER), str); } - if ((file = gzdopen(dupfd, "rb")) == Z_NULL) { + DEACTIVATE(tc) /* glzdopen_input reads the magic word from the file */ + if ((file = S_glzdopen_input(dupfd)) == Z_NULL) { + REACTIVATE(tc) FD_GUARD(result == 0, error, result = CLOSE(fd)); FD_GUARD(result == 0, error, result = CLOSE(dupfd)); return Scons(FIX(OPEN_ERROR_OTHER), Sstring("unable to allocate compression state (too many open files?)")); } - DEACTIVATE(tc) - compressed = !gzdirect(file); + compressed = !S_glzdirect(file); REACTIVATE(tc) if (compressed) { FD_GUARD(result == 0, error, result = CLOSE(fd)); - /* box indicates gzip'd */ - return Sbox(make_gzxfile(dupfd, file)); + /* box indicates compressed */ + return Sbox(MAKE_GZXFILE(file)); } - GZ_GUARD(1, ok == 0 || ok == Z_BUF_ERROR, flag, file, ok = gzclose(file)); + GZ_GUARD(1, ok == 0 || ok == Z_BUF_ERROR, flag, file, ok = S_glzclose(file)); if (flag) {} /* make the compiler happy */ - if (LSEEK(fd, 0, SEEK_SET) != 0) { /* gzdirect does not leave fd at position 0 */ + if (LSEEK(fd, 0, SEEK_SET) != 0) { /* glzdopen and glzdirect might not leave fd at position 0 */ FD_GUARD(result == 0, error, result = CLOSE(fd)); return Scons(FIX(OPEN_ERROR_OTHER),Sstring("unable to reset after reading header bytes")); } @@ -234,7 +226,7 @@ ptr S_compress_input_fd(INT fd, I64 pos) { INT dupfd, error, result, ok, flag; IBOOL compressed; - gzFile file; + glzFile file; #ifdef PTHREADS ptr tc = get_thread_context(); #endif @@ -243,41 +235,42 @@ return S_strerror(errno); } - if ((file = gzdopen(dupfd, "rb")) == Z_NULL) { + DEACTIVATE(tc) + if ((file = S_glzdopen_input(dupfd)) == Z_NULL) { + REACTIVATE(tc) FD_GUARD(result == 0, error, result = CLOSE(dupfd)); return Sstring("unable to allocate compression state (too many open files?)"); } - DEACTIVATE(tc) - compressed = !gzdirect(file); + compressed = !S_glzdirect(file); REACTIVATE(tc) if (compressed) { FD_GUARD(result == 0, error, result = CLOSE(fd)); if (error) {} /* make the compiler happy */ - return Sbox(make_gzxfile(dupfd, file)); + /* box indicates compressed */ + return Sbox(MAKE_GZXFILE(file)); } - GZ_GUARD(1, ok == 0 || ok == Z_BUF_ERROR, flag, file, ok = gzclose(file)); + GZ_GUARD(1, ok == 0 || ok == Z_BUF_ERROR, flag, file, ok = S_glzclose(file)); if (flag) {} /* make the compiler happy */ - if (LSEEK(fd, pos, SEEK_SET) != pos) { /* gzdirect does not leave fd at same position */ + if (LSEEK(fd, pos, SEEK_SET) != pos) { /* glzdirect does not leave fd at same position */ return Sstring("unable to reset after reading header bytes"); } return MAKE_FD(fd); } ptr S_compress_output_fd(INT fd) { - gzFile file; + glzFile file; + ptr tc = get_thread_context(); -#ifdef WIN32 - if ((file = gzdopen(fd, "wb")) == Z_NULL) { -#else - if ((file = gzdopen(fd, (fcntl(fd, F_GETFL) & O_APPEND) ? "ab" : "wb")) == Z_NULL) { -#endif + file = S_glzdopen_output(fd, (INT)UNFIX(COMPRESSFORMAT(tc)), (INT)UNFIX(COMPRESSLEVEL(tc))); + + if (file == Z_NULL) return Sstring("unable to allocate compression state (too many open files?)"); - } - return Sbox(make_gzxfile(fd, file)); + /* box indicates compressed */ + return Sbox(MAKE_GZXFILE(file)); } static ptr new_open_output_fd_helper( @@ -288,9 +281,7 @@ INT saved_errno = 0; iptr error; INT fd, result; -#ifdef PTHREADS ptr tc = get_thread_context(); -#endif flags |= (no_create ? 0 : O_CREAT) | @@ -347,14 +338,15 @@ if (!compressed) { return MAKE_FD(fd); } - - gzFile file = gzdopen(fd, append ? "ab" : "wb"); + + glzFile file; + file = S_glzdopen_output(fd, (INT)UNFIX(COMPRESSFORMAT(tc)), (INT)UNFIX(COMPRESSLEVEL(tc))); if (file == Z_NULL) { FD_GUARD(result == 0, error, result = CLOSE(fd)); return Scons(FIX(OPEN_ERROR_OTHER), Sstring("unable to allocate compression state")); } - return make_gzxfile(fd, file); + return MAKE_GZXFILE(file); } ptr S_new_open_output_fd( @@ -377,14 +369,14 @@ return new_open_output_fd_helper( filename, mode, O_BINARY | O_RDWR, no_create, no_fail, no_truncate, - append, lock, replace, compressed); + append, lock, replace, 0); } ptr S_close_fd(ptr file, IBOOL gzflag) { INT saved_errno = 0; INT ok, flag; INT fd = gzflag ? 0 : GET_FD(file); - gzFile gzfile = gzflag ? gzxfile_gzfile(file) : NULL; + glzFile gzfile = gzflag ? GZXFILE_GZFILE(file) : NULL; #ifdef PTHREADS ptr tc = get_thread_context(); #endif @@ -401,7 +393,7 @@ FD_GUARD(ok == 0, flag, ok = CLOSE(fd)); } else { /* zlib 1.2.1 returns Z_BUF_ERROR when closing an empty file opened for reading */ - GZ_GUARD(1, ok == 0 || ok == Z_BUF_ERROR, flag, gzfile, ok = gzclose(gzfile)); + GZ_GUARD(1, ok == 0 || ok == Z_BUF_ERROR, flag, gzfile, ok = S_glzclose(gzfile)); } saved_errno = errno; REACTIVATE(tc) @@ -421,6 +413,26 @@ #ifdef WIN32 #define IO_SIZE_T unsigned int +static HANDLE hStdin = NULL; +static iptr read_console(char* buf, unsigned size) { + static char u8buf[1024]; + static int u8i = 0; + static int u8n = 0; + iptr n = 0; + do { + for (; size > 0 && u8n > 0; size--, u8n--, n++) + *buf++ = u8buf[u8i++]; + if (n == 0 && size > 0) { + wchar_t wbuf[256]; + DWORD wn; + if (!ReadConsoleW(hStdin, wbuf, 256, &wn, NULL) || wn == 0) + return 0; + u8n = WideCharToMultiByte(CP_UTF8, 0, wbuf, wn, u8buf, 1024, NULL, NULL); + u8i = 0; + } + } while (n == 0); + return n; +} #else /* WIN32 */ #define IO_SIZE_T size_t #endif /* WIN32 */ @@ -431,7 +443,7 @@ ptr tc = get_thread_context(); iptr m, flag = 0; INT fd = gzflag ? 0 : GET_FD(file); - gzFile gzfile = gzflag ? gzxfile_gzfile(file) : NULL; + glzFile gzfile = gzflag ? GZXFILE_GZFILE(file) : NULL; /* file is not locked; do not reference after deactivating thread! */ file = (ptr)-1; @@ -442,17 +454,28 @@ LOCKandDEACTIVATE(tc, bv) #ifdef WIN32 - if (!gzflag && fd == 0) { + if (!gzflag && fd == 0 && hStdin != NULL) { DWORD error_code; SetConsoleCtrlHandler(NULL, TRUE); SetLastError(0); - m = _read(0, &BVIT(bv,start), (IO_SIZE_T)count); + m = read_console(&BVIT(bv,start), (IO_SIZE_T)count); error_code = GetLastError(); - SetConsoleCtrlHandler(NULL, FALSE); if (m == 0 && error_code == 0x3e3) { + /* Guard against Windows calling the ConsoleCtrlHandler after we + * turn it back on by waiting a bit. */ + Sleep(1); +#ifdef PTHREADS + /* threaded io.ss doesn't handle interrupts because + * with-tc-mutex disables them, so bail out. */ + SetConsoleCtrlHandler(NULL, FALSE); + REACTIVATEandUNLOCK(tc, bv) + S_noncontinuable_interrupt(); +#else KEYBOARDINTERRUPTPENDING(tc) = Strue; SOMETHINGPENDING(tc) = Strue; +#endif } + SetConsoleCtrlHandler(NULL, FALSE); } else #endif /* WIN32 */ { @@ -464,7 +487,7 @@ GZ_EINTR_GUARD( 1, m >= 0 || Sboolean_value(KEYBOARDINTERRUPTPENDING(tc)), flag, gzfile, - m = gzread(gzfile, &BVIT(bv,start), (GZ_IO_SIZE_T)count)); + m = S_glzread(gzfile, &BVIT(bv,start), (GZ_IO_SIZE_T)count)); } } saved_errno = errno; @@ -548,7 +571,7 @@ ptr tc = get_thread_context(); INT flag = 0, saved_errno = 0; INT fd = gzflag ? 0 : GET_FD(file); - gzFile gzfile = gzflag ? gzxfile_gzfile(file) : NULL; + glzFile gzfile = gzflag ? GZXFILE_GZFILE(file) : NULL; for (s = start, c = count; c > 0; s += i, c -= i) { iptr cx = c; @@ -566,7 +589,7 @@ GZ_EINTR_GUARD( i < 0, i > 0 || Sboolean_value(KEYBOARDINTERRUPTPENDING(tc)), flag, gzfile, - i = gzwrite(gzfile, &BVIT(bv,s), (GZ_IO_SIZE_T)cx)); + i = S_glzwrite(gzfile, &BVIT(bv,s), (GZ_IO_SIZE_T)cx)); } else { FD_EINTR_GUARD(i >= 0 || Sboolean_value(KEYBOARDINTERRUPTPENDING(tc)), flag, i = WRITE(fd, &BVIT(bv,s), (IO_SIZE_T)cx)); @@ -610,7 +633,7 @@ ptr tc = get_thread_context(); INT flag = 0, saved_errno = 0; INT fd = gzflag ? 0 : GET_FD(file); - gzFile gzfile = gzflag ? gzxfile_gzfile(file) : NULL; + glzFile gzfile = gzflag ? GZXFILE_GZFILE(file) : NULL; octet buf[1]; buf[0] = (octet)byte; @@ -621,7 +644,7 @@ GZ_EINTR_GUARD( i < 0, i > 0 || Sboolean_value(KEYBOARDINTERRUPTPENDING(tc)), flag, gzfile, - i = gzwrite(gzfile, buf, 1)); + i = S_glzwrite(gzfile, buf, 1)); } else { FD_EINTR_GUARD(i >= 0 || Sboolean_value(KEYBOARDINTERRUPTPENDING(tc)), flag, i = WRITE(fd, buf, 1)); @@ -651,7 +674,7 @@ ptr S_get_fd_pos(ptr file, IBOOL gzflag) { errno = 0; if (gzflag) { - z_off_t offset = gzseek(gzxfile_gzfile(file), 0, SEEK_CUR); + z_off_t offset = S_glzseek(GZXFILE_GZFILE(file), 0, SEEK_CUR); if (offset != -1) return Sinteger64(offset); } else { OFF_T offset = LSEEK(GET_FD(file), 0, SEEK_CUR); @@ -670,7 +693,7 @@ if (sizeof(z_off_t) != sizeof(I64)) if (offset != offset64) return Sstring("invalid position"); errno = 0; - if (gzseek(gzxfile_gzfile(file),offset,SEEK_SET) == offset) return Strue; + if (S_glzseek(GZXFILE_GZFILE(file),offset,SEEK_SET) == offset) return Strue; if (errno == 0) return Sstring("compression failed"); return S_strerror(errno); } else { @@ -778,10 +801,19 @@ S_set_symbol_value(S_intern((const unsigned char *)"$c-bufsiz"), Sinteger(SBUFSIZ)); } #ifdef WIN32 + { /* Get the console input handle for reading Unicode characters */ + HANDLE h; + DWORD mode; + if ((h = GetStdHandle(STD_INPUT_HANDLE)) != INVALID_HANDLE_VALUE + && GetConsoleMode(h, &mode)) + hStdin = h; + } /* transcoder, if any, does its own cr, lf translations */ _setmode(_fileno(stdin), O_BINARY); _setmode(_fileno(stdout), O_BINARY); _setmode(_fileno(stderr), O_BINARY); + /* Set the console output to handle UTF-8 */ + SetConsoleOutputCP(CP_UTF8); #endif /* WIN32 */ } @@ -791,58 +823,127 @@ return count == (iptr)(uLong)count; } +static int is_valid_lz4_length(iptr len) { + return (len <= LZ4_MAX_INPUT_SIZE); +} + /* Accept `iptr` because we expect it to represent a bytevector size, which always fits in `iptr`. Return `uptr`, because the result might not fit in `iptr`. */ -uptr S_bytevector_compress_size(iptr s_count) { - if (is_valid_zlib_length(s_count)) - return compressBound((uLong)s_count); - else { - /* Compression will report "source too long" */ - return 0; +uptr S_bytevector_compress_size(iptr s_count, INT compress_format) { + switch (compress_format) { + case COMPRESS_GZIP: + if (is_valid_zlib_length(s_count)) + return compressBound((uLong)s_count); + else { + /* Compression will report "source too long" */ + return 0; + } + case COMPRESS_LZ4: + if (is_valid_lz4_length(s_count)) + return LZ4_compressBound((uLong)s_count); + else { + /* Compression will report "source too long" */ + return 0; + } + default: + S_error1("S_bytevector_compress_size", "unexpected compress format ~s", FIX(compress_format)); + return 0; } } ptr S_bytevector_compress(ptr dest_bv, iptr d_start, iptr d_count, - ptr src_bv, iptr s_start, iptr s_count) { - /* On error, an message-template string with ~s for the bytevector */ - int r; - uLong destLen; - - if (!is_valid_zlib_length(s_count)) - return Sstring("source bytevector ~s is too large"); - - destLen = (uLong)d_count; - - r = compress(&BVIT(dest_bv, d_start), &destLen, &BVIT(src_bv, s_start), (uLong)s_count); + ptr src_bv, iptr s_start, iptr s_count, + INT compress_format) { + ptr tc = get_thread_context(); + int compress_level = (INT)UNFIX(COMPRESSLEVEL(tc)); - if (r == Z_OK) - return FIX(destLen); - else if (r == Z_BUF_ERROR) - return Sstring("destination bytevector is too small for compressed form of ~s"); - else - return Sstring("internal error compressing ~s"); + /* On error, an message-template string with ~s for the bytevector */ + switch (compress_format) { + case COMPRESS_GZIP: + { + int r; + uLong destLen; + + if (!is_valid_zlib_length(s_count)) + return Sstring("source bytevector ~s is too large"); + + destLen = (uLong)d_count; + + r = compress2(&BVIT(dest_bv, d_start), &destLen, &BVIT(src_bv, s_start), (uLong)s_count, S_zlib_compress_level(compress_level)); + + if (r == Z_OK) + return FIX(destLen); + else if (r == Z_BUF_ERROR) + return Sstring("destination bytevector is too small for compressed form of ~s"); + else + return Sstring("internal error compressing ~s"); + } + case COMPRESS_LZ4: + { + int destLen; + + if (!is_valid_lz4_length(s_count)) + return Sstring("source bytevector ~s is too large"); + + if (compress_level == COMPRESS_MIN) { + destLen = LZ4_compress_default((char *)&BVIT(src_bv, s_start), (char *)&BVIT(dest_bv, d_start), (int)s_count, (int)d_count); + } else { + destLen = LZ4_compress_HC((char *)&BVIT(src_bv, s_start), (char *)&BVIT(dest_bv, d_start), (int)s_count, (int)d_count, S_lz4_compress_level(compress_level)); + } + + if (destLen > 0) + return Sfixnum(destLen); + else + return Sstring("compression failed for ~s"); + } + default: + S_error1("S_bytevector_compress", "unexpected compress format ~s", FIX(compress_format)); + return Sfalse; + } } ptr S_bytevector_uncompress(ptr dest_bv, iptr d_start, iptr d_count, - ptr src_bv, iptr s_start, iptr s_count) { + ptr src_bv, iptr s_start, iptr s_count, + INT compress_format) { /* On error, an message-template string with ~s for the bytevector */ - int r; - uLongf destLen; - - if (!is_valid_zlib_length(d_count)) - return Sstring("expected result size of uncompressed source ~s is too large"); - - destLen = (uLongf)d_count; - - r = uncompress(&BVIT(dest_bv, d_start), &destLen, &BVIT(src_bv, s_start), (uLong)s_count); - - if (r == Z_OK) - return FIX(destLen); - else if (r == Z_BUF_ERROR) - return Sstring("uncompressed ~s is larger than expected size"); - else if (r == Z_DATA_ERROR) - return Sstring("invalid data in source bytevector ~s"); - else - return Sstring("internal error uncompressing ~s"); + switch (compress_format) { + case COMPRESS_GZIP: + { + int r; + uLongf destLen; + + if (!is_valid_zlib_length(d_count)) + return Sstring("expected result size of uncompressed source ~s is too large"); + + destLen = (uLongf)d_count; + + r = uncompress(&BVIT(dest_bv, d_start), &destLen, &BVIT(src_bv, s_start), (uLong)s_count); + + if (r == Z_OK) + return FIX(destLen); + else if (r == Z_BUF_ERROR) + return Sstring("uncompressed ~s is larger than expected size"); + else if (r == Z_DATA_ERROR) + return Sstring("invalid data in source bytevector ~s"); + else + return Sstring("internal error uncompressing ~s"); + } + case COMPRESS_LZ4: + { + int r; + + if (!is_valid_lz4_length(d_count)) + return Sstring("expected result size of uncompressed source ~s is too large"); + + r = LZ4_decompress_safe((char *)&BVIT(src_bv, s_start), (char *)&BVIT(dest_bv, d_start), (int)s_count, (int)d_count); + + if (r >= 0) + return Sfixnum(r); + else + return Sstring("internal error uncompressing ~s"); + } + default: + return Sstring("unepxected compress format ~s"); + } } diff -Nru chezscheme-9.5+dfsg/c/nocurses.h chezscheme-9.5.4+dfsg/c/nocurses.h --- chezscheme-9.5+dfsg/c/nocurses.h 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/nocurses.h 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,24 @@ +#ifndef ERR +# define ERR -1 +#endif + +#define setupterm(a, b, e) (*(e) = 0, ERR) +#define tputs(c, x, f) (f(c)) + +#define lines 0 +#define columns 0 + +#define cursor_left 0 +#define cursor_right 0 +#define cursor_up 0 +#define cursor_down 0 +#define enter_am_mode 0 +#define exit_am_mode 0 +#define clr_eos 0 +#define clr_eol 0 +#define clear_screen 0 +#define carriage_return 0 +#define bell 0 +#define scroll_reverse 0 +#define auto_right_margin 0 +#define eat_newline_glitch 0 diff -Nru chezscheme-9.5+dfsg/c/number.c chezscheme-9.5.4+dfsg/c/number.c --- chezscheme-9.5+dfsg/c/number.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/number.c 2020-08-31 02:35:12.000000000 +0000 @@ -25,9 +25,10 @@ #include "system.h" /* locally defined functions */ -static ptr copy_normalize PROTO((bigit *p, iptr len, IBOOL sign)); +static ptr copy_normalize PROTO((ptr tc, const bigit *p, iptr len, IBOOL sign)); static IBOOL abs_big_lt PROTO((ptr x, ptr y, iptr xl, iptr yl)); static IBOOL abs_big_eq PROTO((ptr x, ptr y, iptr xl, iptr yl)); +static ptr big_negate PROTO((ptr tc, ptr x)); static ptr big_add_pos PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL sign)); static ptr big_add_neg PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL sign)); static ptr big_add PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, IBOOL ys)); @@ -37,7 +38,7 @@ static INT normalize PROTO((bigit *xp, bigit *yp, iptr xl, iptr yl)); static bigit quotient_digit PROTO((bigit *xp, bigit *yp, iptr yl)); static bigit qhat PROTO((bigit *xp, bigit *yp)); -static ptr big_short_gcd PROTO((ptr x, bigit y, iptr xl)); +static ptr big_short_gcd PROTO((ptr tc, ptr x, bigit y, iptr xl)); static ptr big_gcd PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl)); static ptr s_big_ash PROTO((ptr tc, bigit *xp, iptr xl, IBOOL sign, iptr cnt)); static double big_short_floatify PROTO((ptr tc, ptr x, bigit s, iptr xl, IBOOL sign)); @@ -53,27 +54,27 @@ static ptr big_logxor PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, IBOOL ys)); /* use w/o trailing semicolon */ -#define PREPARE_BIGNUM(x,l)\ - {if (x == FIX(0) || BIGLEN(x) < (l)) x = S_bignum((l)*2, 0);} +#define PREPARE_BIGNUM(tc,x,l)\ + {if (x == FIX(0) || BIGLEN(x) < (l)) x = S_bignum(tc, (l)*2, 0);} #define bigit_mask (~(bigit)0) -#define IBIGIT_TO_BIGNUM(B,x,cnt,sign) {\ +#define IBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) {\ ibigit _i_ = x;\ - PREPARE_BIGNUM(B, 1)\ + PREPARE_BIGNUM(tc, B, 1)\ *cnt = 1;\ BIGIT(B,0) = (*sign = (_i_ < 0)) ? -_i_ : _i_;\ } -#define UBIGIT_TO_BIGNUM(B,u,cnt) {\ - PREPARE_BIGNUM(B, 1)\ +#define UBIGIT_TO_BIGNUM(tc,B,u,cnt) {\ + PREPARE_BIGNUM(tc, B, 1)\ *cnt = 1;\ BIGIT(B,0) = u;\ } -#define IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) {\ +#define IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) {\ ibigitbigit _i_ = x; bigitbigit _u_; bigit _b_;\ - PREPARE_BIGNUM(B, 2)\ + PREPARE_BIGNUM(tc, B, 2)\ _u_ = (*sign = (_i_ < 0)) ? -_i_ : _i_;\ if ((_b_ = (_u_ & (bigitbigit)bigit_mask)) == _u_) {\ *cnt = 1;\ @@ -85,9 +86,9 @@ }\ } -#define UBIGITBIGIT_TO_BIGNUM(B,x,cnt) {\ +#define UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) {\ bigitbigit _u_ = x; bigit _b_;\ - PREPARE_BIGNUM(B, 2)\ + PREPARE_BIGNUM(tc, B, 2)\ if ((_b_ = (_u_ & (bigitbigit)bigit_mask)) == _u_) {\ *cnt = 1;\ BIGIT(B,0) = (bigit)_u_;\ @@ -101,20 +102,20 @@ #define U32_bigits (32 / bigit_bits) #if (U32_bigits == 1) -#define I32_TO_BIGNUM(B,x,cnt,sign) IBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define U32_TO_BIGNUM(B,x,cnt) UBIGIT_TO_BIGNUM(B,x,cnt) +#define I32_TO_BIGNUM(tc,B,x,cnt,sign) IBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define U32_TO_BIGNUM(tc,B,x,cnt) UBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #if (U32_bigits == 2) -#define I32_TO_BIGNUM(B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define U32_TO_BIGNUM(B,x,cnt) UBIGITBIGIT_TO_BIGNUM(B,x,cnt) +#define I32_TO_BIGNUM(tc,B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define U32_TO_BIGNUM(tc,B,x,cnt) UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #define U64_bigits (64 / bigit_bits) #if (U64_bigits == 2) -#define I64_TO_BIGNUM(B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define U64_TO_BIGNUM(B,x,cnt) UBIGITBIGIT_TO_BIGNUM(B,x,cnt) +#define I64_TO_BIGNUM(tc,B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define U64_TO_BIGNUM(tc,B,x,cnt) UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #if (U64_bigits == 4) @@ -124,16 +125,16 @@ #define ptr_bigits (ptr_bits / bigit_bits) #if (ptr_bigits == 1) -#define IPTR_TO_BIGNUM(B,x,cnt,sign) IBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define UPTR_TO_BIGNUM(B,x,cnt) UBIGIT_TO_BIGNUM(B,x,cnt) +#define IPTR_TO_BIGNUM(tc,B,x,cnt,sign) IBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define UPTR_TO_BIGNUM(tc,B,x,cnt) UBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #if (ptr_bigits == 2) -#define IPTR_TO_BIGNUM(B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define UPTR_TO_BIGNUM(B,x,cnt) UBIGITBIGIT_TO_BIGNUM(B,x,cnt) +#define IPTR_TO_BIGNUM(tc,B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define UPTR_TO_BIGNUM(tc,B,x,cnt) UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif -#define FIXNUM_TO_BIGNUM(B,p,cnt,sign) IPTR_TO_BIGNUM(B,UNFIX(p),cnt,sign) +#define FIXNUM_TO_BIGNUM(tc,B,p,cnt,sign) IPTR_TO_BIGNUM(tc,B,UNFIX(p),cnt,sign) ptr S_normalize_bignum(ptr x) { uptr n = BIGIT(x, 0); iptr len = BIGLEN(x); IBOOL sign = BIGSIGN(x); @@ -163,7 +164,7 @@ return x; } -static ptr copy_normalize(p,len,sign) bigit *p; iptr len; IBOOL sign; { +static ptr copy_normalize(tc, p, len, sign) ptr tc; const bigit *p; iptr len; IBOOL sign; { bigit *p1; uptr n; ptr b; for (;;) { @@ -196,7 +197,7 @@ } #endif - b = S_bignum(len, sign); + b = S_bignum(tc, len, sign); for (p1 = &BIGIT(b, 0); len--;) *p1++ = *p++; return b; } @@ -337,7 +338,7 @@ return FIX(u); else { ptr x = FIX(0); iptr xl; - UPTR_TO_BIGNUM(x, u, &xl) + UPTR_TO_BIGNUM(get_thread_context(), x, u, &xl) SETBIGLENANDSIGN(x, xl, 0); return x; } @@ -348,7 +349,7 @@ return FIX(i); else { ptr x = FIX(0); iptr xl; IBOOL xs; - IPTR_TO_BIGNUM(x, i, &xl, &xs) + IPTR_TO_BIGNUM(get_thread_context(), x, i, &xl, &xs) SETBIGLENANDSIGN(x, xl, xs); return x; } @@ -362,7 +363,7 @@ return FIX((uptr)u); else { ptr x = FIX(0); iptr xl; - U32_TO_BIGNUM(x, u, &xl) + U32_TO_BIGNUM(get_thread_context(), x, u, &xl) SETBIGLENANDSIGN(x, xl, 0); return x; } @@ -377,7 +378,7 @@ return FIX((iptr)i); else { ptr x = FIX(0); iptr xl; IBOOL xs; - I32_TO_BIGNUM(x, i, &xl, &xs) + I32_TO_BIGNUM(get_thread_context(), x, i, &xl, &xs) SETBIGLENANDSIGN(x, xl, xs); return x; } @@ -389,7 +390,7 @@ return FIX((uptr)u); else { ptr x = FIX(0); iptr xl; - U64_TO_BIGNUM(x, u, &xl) + U64_TO_BIGNUM(get_thread_context(), x, u, &xl) SETBIGLENANDSIGN(x, xl, 0); return x; } @@ -400,7 +401,7 @@ return FIX((iptr)i); else { ptr x = FIX(0); iptr xl; IBOOL xs; - I64_TO_BIGNUM(x, i, &xl, &xs) + I64_TO_BIGNUM(get_thread_context(), x, i, &xl, &xs) SETBIGLENANDSIGN(x, xl, xs); return x; } @@ -417,6 +418,11 @@ *(x) = _b_>>_n_ | *(k);\ *(k) = _newk_;} +#define ERSH2(n,x,y,k) { /* undefined when n == 0 */\ + INT _n_ = (INT)(n); bigit _b_ = (x), _newk_ = _b_<<(bigit_bits-_n_);\ + *(y) = _b_>>_n_ | *(k);\ + *(k) = _newk_;} + #define EADDC(a1, a2, sum, k) {\ bigit _tmp1_, _tmp2_, _tmpk_;\ _tmp1_ = (a1);\ @@ -505,13 +511,21 @@ *** */ +static ptr big_negate(tc, x) ptr tc, x; { + return copy_normalize(tc, &BIGIT(x,0),BIGLEN(x),!BIGSIGN(x)); +} + +ptr S_big_negate(x) ptr x; { + return big_negate(get_thread_context(), x); +} + /* assumptions: BIGLEN(x) >= BIGLEN(y) */ static ptr big_add_pos(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL sign; { iptr i; bigit *xp, *yp, *zp; bigit k = 0; - PREPARE_BIGNUM(W(tc),xl+1) + PREPARE_BIGNUM(tc, W(tc),xl+1) xp = &BIGIT(x,xl-1); yp = &BIGIT(y,yl-1); zp = &BIGIT(W(tc),xl); @@ -524,7 +538,7 @@ *zp = k; - return copy_normalize(zp,xl+1,sign); + return copy_normalize(tc, zp,xl+1,sign); } /* assumptions: x >= y */ @@ -533,7 +547,7 @@ bigit *xp, *yp, *zp; bigit b = 0; - PREPARE_BIGNUM(W(tc),xl) + PREPARE_BIGNUM(tc, W(tc),xl) xp = &BIGIT(x,xl-1); yp = &BIGIT(y,yl-1); zp = &BIGIT(W(tc),xl-1); @@ -544,7 +558,7 @@ for (; i-- > 0; ) *zp-- = *xp--; - return copy_normalize(zp+1,xl,sign); + return copy_normalize(tc, zp+1,xl,sign); } static ptr big_add(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL xs, ys; { @@ -570,13 +584,13 @@ return FIXRANGE(n) ? FIX(n) : Sinteger(n); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_add(tc, X(tc), y, xl, BIGLEN(y), xs, BIGSIGN(y)); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_add(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { return big_add(tc, x, y, BIGLEN(x), BIGLEN(y), BIGSIGN(x), BIGSIGN(y)); @@ -594,13 +608,13 @@ return FIXRANGE(n) ? FIX(n) : Sinteger(n); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_add(tc, X(tc), y, xl, BIGLEN(y), xs, !BIGSIGN(y)); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_add(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), !ys); } else { return big_add(tc, x, y, BIGLEN(x), BIGLEN(y), BIGSIGN(x), !BIGSIGN(y)); @@ -619,7 +633,7 @@ bigit *xp, *yp, *zp, *zpa; bigit k, k1, prod; - PREPARE_BIGNUM(W(tc),xl+yl) + PREPARE_BIGNUM(tc, W(tc),xl+yl) for (xi = xl, zp = &BIGIT(W(tc),xl+yl-1); xi-- > 0; ) *zp-- = 0; for (yi=yl,yp= &BIGIT(y,yl-1),zp= &BIGIT(W(tc),xl+yl-1); yi-- > 0; yp--, zp--) @@ -634,12 +648,16 @@ *zpa = k; } - return copy_normalize(&BIGIT(W(tc),0),xl+yl,sign); + return copy_normalize(tc, &BIGIT(W(tc),0),xl+yl,sign); } -#define SHORTMIN (most_negative_fixnum / (1 << (fixnum_bits / 2))) -#define SHORTMAX (most_positive_fixnum / (1 << (fixnum_bits / 2))) -#define SHORTRANGE(x) ((x) >= SHORTMIN && (x) <= SHORTMAX) +/* SHORTRANGE is -floor(sqrt(most_positive_fixnum))..floor(sqrt(most_positive_fixnum)). + We don't use sqrt because it rounds up for fixnum_bits = 61 */ +#if (fixnum_bits == 30) +#define SHORTRANGE(x) (-23170 <= (x) && (x) <= 23170) +#elif (fixnum_bits == 61) +#define SHORTRANGE(x) (-0x3FFFFFFF <= (x) && (x) <= 0x3FFFFFFF) +#endif ptr S_mul(x, y) ptr x, y; { ptr tc = get_thread_context(); @@ -653,17 +671,17 @@ if (SHORTRANGE(xn) && SHORTRANGE(yn)) return FIX(xn * yn); else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc, X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc, Y(tc),y,&yl,&ys) y = Y(tc); } } else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) x = X(tc); yl = BIGLEN(y); ys = BIGSIGN(y); } } else { if (Sfixnump(y)) { xl = BIGLEN(x); xs = BIGSIGN(x); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) y = Y(tc); } else { xl = BIGLEN(x); xs = BIGSIGN(x); yl = BIGLEN(y); ys = BIGSIGN(y); @@ -680,29 +698,34 @@ /* arguments must be integers (fixnums or bignums), y must be nonzero */ ptr S_div(x, y) ptr x, y; { - ptr g; + ptr g, n, d; + ptr tc = get_thread_context(); g = S_gcd(x,y); - if (Sfixnump(y) ? UNFIX(y) < 0 : BIGSIGN(y)) g = S_sub(FIX(0),g); - return S_rational(S_trunc(x,g), S_trunc(y,g)); + if (Sfixnump(y) ? UNFIX(y) < 0 : BIGSIGN(y)) { + g = Sfixnump(g) ? Sinteger(-UNFIX(g)) : big_negate(tc, g); + } + + S_trunc_rem(tc, x, g, &n, (ptr *)NULL); + S_trunc_rem(tc, y, g, &d, (ptr *)NULL); + + return S_rational(n, d); } ptr S_trunc(x, y) ptr x, y; { ptr q; - S_trunc_rem(x, y, &q, (ptr *)NULL); + S_trunc_rem(get_thread_context(), x, y, &q, (ptr *)NULL); return q; } ptr S_rem(x, y) ptr x, y; { ptr r; - S_trunc_rem(x, y, (ptr *)NULL, &r); + S_trunc_rem(get_thread_context(), x, y, (ptr *)NULL, &r); return r; } /* arguments must be integers (fixnums or bignums), y must be nonzero */ -void S_trunc_rem(origx, y, q, r) ptr origx, y, *q, *r; { - ptr tc = get_thread_context(); - +void S_trunc_rem(tc, origx, y, q, r) ptr tc, origx, y, *q, *r; { iptr xl, yl; IBOOL xs, ys; ptr x = origx; if (Sfixnump(x)) { @@ -718,13 +741,13 @@ return; } } else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc, X(tc),x,&xl,&xs) x = X(tc); yl = BIGLEN(y); ys = BIGSIGN(y); } } else { if (Sfixnump(y)) { xl = BIGLEN(x); xs = BIGSIGN(x); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc, Y(tc),y,&yl,&ys) y = Y(tc); } else { xl = BIGLEN(x); xs = BIGSIGN(x); yl = BIGLEN(y); ys = BIGSIGN(y); @@ -746,13 +769,13 @@ bigit *xp, *zp; bigit k; - PREPARE_BIGNUM(W(tc),xl) + PREPARE_BIGNUM(tc, W(tc),xl) for (i = xl, k = 0, xp = &BIGIT(x,0), zp = &BIGIT(W(tc),0); i-- > 0; ) EDIV(k, *xp++, s, zp++, &k) - if (q != (ptr *)NULL) *q = copy_normalize(&BIGIT(W(tc),0),xl,qs); - if (r != (ptr *)NULL) *r = copy_normalize(&k,1,rs); + if (q != (ptr *)NULL) *q = copy_normalize(tc, &BIGIT(W(tc),0),xl,qs); + if (r != (ptr *)NULL) *r = copy_normalize(tc, &k,1,rs); } static void big_trunc(tc, x, y, xl, yl, qs, rs, q, r) @@ -763,11 +786,11 @@ INT d; bigit k; - PREPARE_BIGNUM(U(tc), xl+1) + PREPARE_BIGNUM(tc, U(tc), xl+1) for (i = xl, xp = &BIGIT(U(tc),xl+1), p = &BIGIT(x,xl); i-- > 0;) *--xp = *--p; *--xp = 0; - PREPARE_BIGNUM(V(tc), yl) + PREPARE_BIGNUM(tc, V(tc), yl) for (i = yl, yp = &BIGIT(V(tc),yl), p = &BIGIT(y,yl); i-- > 0;) *--yp = *--p; d = normalize(xp, yp, xl, yl); @@ -775,10 +798,10 @@ if (q == (ptr *)NULL) { for (i = m; i-- > 0 ; xp++) (void) quotient_digit(xp, yp, yl); } else { - PREPARE_BIGNUM(W(tc),m) + PREPARE_BIGNUM(tc, W(tc),m) p = &BIGIT(W(tc),0); for (i = m; i-- > 0 ; xp++) *p++ = quotient_digit(xp, yp, yl); - *q = copy_normalize(&BIGIT(W(tc),0),m,qs); + *q = copy_normalize(tc, &BIGIT(W(tc),0),m,qs); } if (r != (ptr *)NULL) { @@ -786,7 +809,7 @@ if (d != 0) { for (i = yl, p = xp, k = 0; i-- > 0; p++) ERSH(d,p,&k) } - *r = copy_normalize(xp, yl, rs); + *r = copy_normalize(tc, xp, yl, rs); } } @@ -870,12 +893,12 @@ } /* sparc C compiler barfs w/o full declaration */ -static ptr big_short_gcd(ptr x, bigit y, iptr xl) { +static ptr big_short_gcd(ptr tc, ptr x, bigit y, iptr xl) { bigit *xp; iptr i; bigit r, q; - if (y == 0) return BIGSIGN(x) ? S_sub(FIX(0),x) : x; + if (y == 0) return BIGSIGN(x) ? big_negate(tc, x) : x; for (i = xl, r = 0, xp = &BIGIT(x,0); i-- > 0; ) EDIV(r, *xp++, y, &q, &r) @@ -889,13 +912,13 @@ bigit *p, *xp, *yp, k, b; /* Copy x to scratch bignum, with a leading zero */ - PREPARE_BIGNUM(U(tc),xl+1) + PREPARE_BIGNUM(tc, U(tc),xl+1) xp = &BIGIT(U(tc),xl+1); for (i = xl, p = &BIGIT(x,xl); i-- > 0; ) *--xp = *--p; *--xp = 0; /* leave xp pointing at leading 0-bigit */ /* Copy y to scratch bignum, with a leading zero */ - PREPARE_BIGNUM(V(tc),yl+1) + PREPARE_BIGNUM(tc, V(tc),yl+1) yp = &BIGIT(V(tc),yl+1); for (i = yl, p = &BIGIT(y,yl); i-- > 0; ) *--yp = *--p; *(yp-1) = 0; /* leave yp pointing just after leading 0-bigit */ @@ -949,7 +972,7 @@ if (asc != 0) { for (i = xl, p = xp, k = 0; i-- > 0; p++) ERSH(asc,p,&k) } - return copy_normalize(xp,xl,0); + return copy_normalize(tc, xp,xl,0); } else { bigit d, r; @@ -972,13 +995,13 @@ uptr_gcd((uptr)xi, (uptr)yi) : uptr_gcd((uptr)yi, (uptr)xi); } else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc, X(tc),x,&xl,&xs) x = X(tc); yl = BIGLEN(y); ys = BIGSIGN(y); } else if (Sfixnump(y)) { xl = BIGLEN(x); xs = BIGSIGN(x); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc, Y(tc),y,&yl,&ys) y = Y(tc); } else { xl = BIGLEN(x); xs = BIGSIGN(x); yl = BIGLEN(y); ys = BIGSIGN(y); @@ -989,10 +1012,10 @@ uptr xu = BIGIT(x,0), yu = BIGIT(y,0); return xu >= yu ? uptr_gcd(xu, yu) : uptr_gcd(yu, xu); } else - return big_short_gcd(y, BIGIT(x,0), yl); + return big_short_gcd(tc, y, BIGIT(x,0), yl); else if (yl == 1) - return big_short_gcd(x, BIGIT(y,0), xl); + return big_short_gcd(tc, x, BIGIT(y,0), xl); else if (abs_big_lt(x, y, xl, yl)) return big_gcd(tc, y, x, yl, xl); @@ -1062,7 +1085,7 @@ iptr i; bigit *xp, *zp, k; - PREPARE_BIGNUM(W(tc),enough+1) + PREPARE_BIGNUM(tc, W(tc),enough+1) /* compute only as much of quotient as we need */ for (i = 0, k = 0, xp = &BIGIT(x,0), zp = &BIGIT(W(tc),0); i < enough; i++) @@ -1083,18 +1106,18 @@ /* copy x to U(tc), scaling with added zero bigits as necessary */ ul = xl < yl + enough-1 ? yl + enough-1 : xl; - PREPARE_BIGNUM(U(tc), ul+1) + PREPARE_BIGNUM(tc, U(tc), ul+1) for (i = ul - xl, xp = &BIGIT(U(tc),ul+1); i-- > 0;) *--xp = 0; for (i = xl, p = &BIGIT(x,xl); i-- > 0;) *--xp = *--p; *--xp = 0; /* copy y to V(tc) */ - PREPARE_BIGNUM(V(tc), yl) + PREPARE_BIGNUM(tc, V(tc), yl) for (i = yl, yp = &BIGIT(V(tc),yl), p = &BIGIT(y,yl); i-- > 0;) *--yp = *--p; (void) normalize(xp, yp, ul, yl); - PREPARE_BIGNUM(W(tc),4) + PREPARE_BIGNUM(tc, W(tc),4) p = &BIGIT(W(tc),0); /* compute 'enough' bigits of the quotient */ @@ -1198,7 +1221,7 @@ /* make sure we are dealing with bignums */ if (Sfixnump(x)) { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) x = X(tc); } else { xl = BIGLEN(x); @@ -1207,7 +1230,7 @@ if (Sfixnump(y)) { IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) y = Y(tc); } else { yl = BIGLEN(y); @@ -1260,7 +1283,7 @@ else { iptr xl; x = FIX(0); - U64_TO_BIGNUM(x, m, &xl) + U64_TO_BIGNUM(get_thread_context(), x, m, &xl) SETBIGLENANDSIGN(x, xl, 0); } @@ -1284,39 +1307,47 @@ bigit *p1, *p2, k; if (cnt < 0) { /* shift to the right */ - INT bit_bucket = 0; - - cnt = -cnt; - - /* shift by whole bigits by decrementing length */ - while (cnt >= bigit_bits) { - xl -= 1; - if (xl == 0) return sign ? FIX(-1) : FIX(0); - cnt -= bigit_bits; - bit_bucket |= *(xp + xl); - } - - /* copy to scratch bignum */ - PREPARE_BIGNUM(W(tc),xl) - p1 = &BIGIT(W(tc), xl); - for (i = xl, p2 = xp + xl; i-- > 0; ) *--p1 = *--p2; - - /* shift by remaining count */ + iptr whole_bigits; + + /* decrement length to shift by whole bigits */ + if ((xl -= (whole_bigits = (cnt = -cnt) / bigit_bits)) <= 0) return sign ? FIX(-1) : FIX(0); + cnt -= whole_bigits * bigit_bits; + + /* shift by remaining count to scratch bignum, tracking bits shifted off to the right */ + PREPARE_BIGNUM(tc, W(tc),xl) + p1 = &BIGIT(W(tc), 0); + p2 = xp; k = 0; - if (cnt != 0) { - for (i = xl; i-- > 0; p1++) ERSH(cnt,p1,&k) + i = xl; + if (cnt == 0) { + do { *p1++ = *p2++; } while (--i > 0); + } else { + do { ERSH2(cnt,*p2,p1,&k); p1++; p2++; } while (--i > 0); } - bit_bucket |= k; - /* round down negative numbers by incrementing the magnitude if any - one bits dropped into the bit bucket */ - if (sign && bit_bucket) { - p1 = &BIGIT(W(tc), xl - 1); - for (i = xl, k = 1; k != 0 && i-- > 0; p1 -= 1) - EADDC(0, *p1, p1, &k) + if (sign) { + if (k == 0) { + /* check for one bits in the shifted-off bigits, looking */ + /* from both ends in an attempt to get out more quickly for what */ + /* seem like the most likely patterns. of course, there might */ + /* be no one bits (in which case this won't help) or they might be */ + /* only in the middle (in which case this will be slower) */ + p2 = (p1 = xp + xl) + whole_bigits; + while (p1 != p2) { + if ((k = *p1++) || p1 == p2 || (k = *--p2)) break; + } + } + + /* round down negative numbers by incrementing the magnitude if any + one bits were shifted off to the right */ + if (k) { + p1 = &BIGIT(W(tc), xl - 1); + for (i = xl, k = 1; k != 0 && i-- > 0; p1 -= 1) + EADDC(0, *p1, p1, &k) + } } - return copy_normalize(&BIGIT(W(tc), 0), xl, sign); + return copy_normalize(tc, &BIGIT(W(tc), 0), xl, sign); } else { /* shift to the left */ iptr xlplus, newxl; @@ -1330,7 +1361,7 @@ /* maximum total length includes +1 for shift out of top bigit */ newxl = xl + xlplus + 1; - PREPARE_BIGNUM(W(tc),newxl) + PREPARE_BIGNUM(tc, W(tc),newxl) /* fill bigits to right with zero */ for (i = xlplus, p1 = &BIGIT(W(tc), newxl); i-- > 0; ) *--p1 = 0; @@ -1342,7 +1373,7 @@ } *--p1 = k; - return copy_normalize(p1, newxl, sign); + return copy_normalize(tc, p1, newxl, sign); } } @@ -1357,7 +1388,7 @@ do much here anyway since semantics of signed >> are undefined in C */ iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs); return s_big_ash(tc, &BIGIT(X(tc),0), xl, xs, cnt); } else return s_big_ash(tc, &BIGIT(x,0), BIGLEN(x), BIGSIGN(x), cnt); @@ -1425,7 +1456,7 @@ } /* copy to scratch bignum */ - PREPARE_BIGNUM(W(tc),wl) + PREPARE_BIGNUM(tc, W(tc),wl) p1 = &BIGIT(W(tc), wl); for (i = wl, p2 = xp + xl; i-- > 0; ) *--p1 = *--p2; @@ -1438,7 +1469,7 @@ for (i = wl; i > 0; i -= 1, p1 += 1) ERSH(start,p1,&k) } - return copy_normalize(&BIGIT(W(tc), 0), wl, 0); + return copy_normalize(tc, &BIGIT(W(tc), 0), wl, 0); } /* logical operations simulate two's complement operations using the @@ -1466,13 +1497,13 @@ return (ptr)((iptr)x & (iptr)y); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logand(tc, y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logand(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1501,14 +1532,14 @@ if (xs == 0) { if (ys == 0) { - PREPARE_BIGNUM(W(tc),yl); + PREPARE_BIGNUM(tc, W(tc),yl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl); for (i = yl; i > 0; i -= 1) *--zp = *--xp & *--yp; - return copy_normalize(zp, yl, 0); + return copy_normalize(tc, zp, yl, 0); } else { bigit yb; - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); yb = 1; for (i = yl; i > 0; i -= 1) { @@ -1519,13 +1550,13 @@ /* yb must be 0, since high-order bigit >= 1. effectively, this means ~t2 would be all 1's from here on out. */ for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, xl, 0); + return copy_normalize(tc, zp, xl, 0); } } else { if (ys == 0) { bigit xb; - PREPARE_BIGNUM(W(tc),yl); + PREPARE_BIGNUM(tc, W(tc),yl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl); xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1533,11 +1564,11 @@ xb = t2 > t1; *--zp = *--yp & ~t2; } - return copy_normalize(zp, yl, 0); + return copy_normalize(tc, zp, yl, 0); } else { bigit xb, yb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = yb = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1556,7 +1587,7 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1); + return copy_normalize(tc, zp, xl+1, 1); } } } @@ -1571,13 +1602,13 @@ return Sboolean((iptr)x & (iptr)y); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logtest(y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logtest(x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1686,7 +1717,7 @@ } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs); return big_logbit0(tc, x, n, X(tc), xl, xs); } } else { @@ -1713,7 +1744,7 @@ /* we'd just be clearing a bit that's already (virtually) cleared */ return origx; } else { - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),xl); for (;;) { if (n < bigit_bits) break; @@ -1722,13 +1753,13 @@ } *--zp = *--xp & ~(1 << n); for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp,xl,0); + return copy_normalize(tc, zp,xl,0); } } else { bigit xb, k, x1, x2, z1, z2; iptr zl = (yl > xl ? yl : xl) + 1; - PREPARE_BIGNUM(W(tc),zl); + PREPARE_BIGNUM(tc, W(tc),zl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),zl); k = xb = 1; i = xl; @@ -1748,7 +1779,7 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, zl, 1); + return copy_normalize(tc, zp, zl, 1); } } @@ -1763,7 +1794,7 @@ } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs); return big_logbit1(tc, x, n, X(tc), xl, xs); } } else { @@ -1781,7 +1812,7 @@ bigit x1; iptr zl = yl > xl ? yl : xl; - PREPARE_BIGNUM(W(tc),zl); + PREPARE_BIGNUM(tc, W(tc),zl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),zl); i = xl; @@ -1793,7 +1824,7 @@ } *--zp = x1 | (1 << n); for (; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, zl, 0); + return copy_normalize(tc, zp, zl, 0); } else if (yl > xl) { /* we'd just be setting a bit that's already (virtually) set */ return origx; @@ -1801,7 +1832,7 @@ bigit xb, k, x1, x2, z1, z2; iptr zl = xl + 1; - PREPARE_BIGNUM(W(tc),zl); + PREPARE_BIGNUM(tc, W(tc),zl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),zl); k = xb = 1; for (;;) { @@ -1822,7 +1853,7 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, zl, 1); + return copy_normalize(tc, zp, zl, 1); } } @@ -1834,13 +1865,13 @@ return (ptr)((iptr)x | (iptr)(y)); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logor(tc, y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logor(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1869,15 +1900,15 @@ if (xs == 0) { if (ys == 0) { - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); for (i = yl; i > 0; i -= 1) *--zp = *--xp | *--yp; for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, xl, 0); + return copy_normalize(tc, zp, xl, 0); } else { bigit yb, k; - PREPARE_BIGNUM(W(tc),yl+1); + PREPARE_BIGNUM(tc, W(tc),yl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl+1); k = yb = 1; for (i = yl; i > 0; i -= 1) { @@ -1888,13 +1919,13 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, yl+1, 1); + return copy_normalize(tc, zp, yl+1, 1); } } else { if (ys == 0) { bigit xb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1912,11 +1943,11 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1); + return copy_normalize(tc, zp, xl+1, 1); } else { bigit xb, yb, k; - PREPARE_BIGNUM(W(tc),yl+1); + PREPARE_BIGNUM(tc, W(tc),yl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl+1); k = yb = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1928,7 +1959,7 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, yl+1, 1); + return copy_normalize(tc, zp, yl+1, 1); } } } @@ -1941,13 +1972,13 @@ return (ptr)((iptr)x ^ (iptr)(y)); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logxor(tc, y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logxor(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1976,15 +2007,15 @@ if (xs == 0) { if (ys == 0) { - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); for (i = yl; i > 0; i -= 1) *--zp = *--xp ^ *--yp; for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, xl, 0); + return copy_normalize(tc, zp, xl, 0); } else { bigit yb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = yb = 1; for (i = yl; i > 0; i -= 1) { @@ -2001,13 +2032,13 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1); + return copy_normalize(tc, zp, xl+1, 1); } } else { if (ys == 0) { bigit xb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -2025,11 +2056,11 @@ *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1); + return copy_normalize(tc, zp, xl+1, 1); } else { bigit xb, yb; - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); yb = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -2043,7 +2074,7 @@ x1 = *--xp; x2 = x1 - xb; xb = x2 > x1; *--zp = x2; } - return copy_normalize(zp, xl, 0); + return copy_normalize(tc, zp, xl, 0); } } } diff -Nru chezscheme-9.5+dfsg/c/prim5.c chezscheme-9.5.4+dfsg/c/prim5.c --- chezscheme-9.5+dfsg/c/prim5.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/prim5.c 2020-08-31 02:35:12.000000000 +0000 @@ -32,7 +32,6 @@ static iptr s_fxdiv PROTO((iptr x, iptr y)); static ptr s_trunc_rem PROTO((ptr x, ptr y)); static ptr s_fltofx PROTO((ptr x)); -static ptr s_weak_cons PROTO((ptr car, ptr cdr)); static ptr s_weak_pairp PROTO((ptr p)); static ptr s_ephemeron_cons PROTO((ptr car, ptr cdr)); static ptr s_ephemeron_pairp PROTO((ptr p)); @@ -86,7 +85,6 @@ static void s_nanosleep PROTO((ptr sec, ptr nsec)); static ptr s_set_collect_trip_bytes PROTO((ptr n)); static void c_exit PROTO((I32 status)); -static ptr find_pcode PROTO((void)); static ptr s_get_reloc PROTO((ptr co)); #ifdef PTHREADS static s_thread_rv_t s_backdoor_thread_start PROTO((void *p)); @@ -117,6 +115,8 @@ static ptr s_multibytetowidechar PROTO((unsigned cp, ptr inbv)); static ptr s_widechartomultibyte PROTO((unsigned cp, ptr inbv)); #endif +static ptr s_profile_counters PROTO((void)); +static ptr s_profile_release_counters PROTO((void)); #define require(test,who,msg,arg) if (!(test)) S_error1(who, msg, arg) @@ -124,7 +124,17 @@ ptr p; char *msg; tc_mutex_acquire() - p = (msg = strerror(errnum)) == NULL ? Sfalse : Sstring(msg); +#ifdef WIN32 + msg = Swide_to_utf8(_wcserror(errnum)); + if (msg == NULL) + p = Sfalse; + else { + p = Sstring_utf8(msg, -1); + free(msg); + } +#else + p = (msg = strerror(errnum)) == NULL ? Sfalse : Sstring_utf8(msg, -1); +#endif tc_mutex_release() return p; } @@ -156,7 +166,7 @@ static ptr s_trunc_rem(x, y) ptr x, y; { ptr q, r; - S_trunc_rem(x, y, &q, &r); + S_trunc_rem(get_thread_context(), x, y, &q, &r); return Scons(q, r); } @@ -164,15 +174,6 @@ return FIX((iptr)FLODAT(x)); } -static ptr s_weak_cons(car, cdr) ptr car, cdr; { - ptr p; - - tc_mutex_acquire() - p = S_cons_in(space_weakpair, 0, car, cdr); - tc_mutex_release() - return p; -} - static ptr s_weak_pairp(p) ptr p; { seginfo *si; return Spairp(p) && (si = MaybeSegInfo(ptr_get_segment(p))) != NULL && (si->space & ~space_locked) == space_weakpair ? Strue : Sfalse; @@ -219,7 +220,7 @@ return S_decode_float(FLODAT(x)); } -#define FMTBUFSIZE 60 +#define FMTBUFSIZE 120 #define CHUNKADDRLT(x, y) (((chunkinfo *)(Scar(x)))->addr < ((chunkinfo *)(Scar(y)))->addr) mkmergesort(sort_chunks, merge_chunks, ptr, Snil, CHUNKADDRLT, INITCDR) @@ -342,8 +343,8 @@ #define INCRGEN(g) (g = g == S_G.max_nonstatic_generation ? static_generation : g+1) static void s_showalloc(IBOOL show_dump, const char *outfn) { FILE *out; - iptr count[space_total+1][generation_total+1]; - uptr bytes[space_total+1][generation_total+1]; + iptr count[generation_total+1][space_total+1]; + uptr bytes[generation_total+1][space_total+1]; int i, column_size[generation_total+1]; char fmtbuf[FMTBUFSIZE]; static char *spacename[space_total+1] = { alloc_space_names, "bogus", "total" }; @@ -356,54 +357,60 @@ if (outfn == NULL) { out = stderr; } else { +#ifdef WIN32 + wchar_t *outfnw = Sutf8_to_wide(outfn); + out = _wfopen(outfnw, L"w"); + free(outfnw); +#else out = fopen(outfn, "w"); +#endif if (out == NULL) { ptr msg = S_strerror(errno); if (msg != Sfalse) { tc_mutex_release() - S_error2("fopen", "open of ~s failed: ~a", Sstring(outfn), msg); + S_error2("fopen", "open of ~s failed: ~a", Sstring_utf8(outfn, -1), msg); } else { tc_mutex_release() - S_error1("fopen", "open of ~s failed", Sstring(outfn)); + S_error1("fopen", "open of ~s failed", Sstring_utf8(outfn, -1)); } } } - for (s = 0; s <= space_total; s++) - for (g = 0; g <= generation_total; INCRGEN(g)) - count[s][g] = bytes[s][g] = 0; + for (g = 0; g <= generation_total; INCRGEN(g)) + for (s = 0; s <= space_total; s++) + count[g][s] = bytes[g][s] = 0; - for (s = 0; s <= max_real_space; s++) { - for (g = 0; g <= static_generation; INCRGEN(g)) { + for (g = 0; g <= static_generation; INCRGEN(g)) { + for (s = 0; s <= max_real_space; s++) { /* add in bytes previously recorded */ - bytes[s][g] += S_G.bytes_of_space[s][g]; + bytes[g][s] += S_G.bytes_of_space[g][s]; /* add in bytes in active segments */ - if (S_G.next_loc[s][g] != FIX(0)) - bytes[s][g] += (char *)S_G.next_loc[s][g] - (char *)S_G.base_loc[s][g]; + if (S_G.next_loc[g][s] != FIX(0)) + bytes[g][s] += (char *)S_G.next_loc[g][s] - (char *)S_G.base_loc[g][s]; } } - for (s = 0; s <= max_real_space; s++) { - for (g = 0; g <= static_generation; INCRGEN(g)) { - for (si = S_G.occupied_segments[s][g]; si != NULL; si = si->next) { - count[s][g] += 1; + for (g = 0; g <= static_generation; INCRGEN(g)) { + for (s = 0; s <= max_real_space; s++) { + for (si = S_G.occupied_segments[g][s]; si != NULL; si = si->next) { + count[g][s] += 1; } } } - for (s = 0; s < space_total; s++) { - for (g = 0; g < generation_total; INCRGEN(g)) { - count[space_total][g] += count[s][g]; - count[s][generation_total] += count[s][g]; - count[space_total][generation_total] += count[s][g]; - bytes[space_total][g] += bytes[s][g]; - bytes[s][generation_total] += bytes[s][g]; - bytes[space_total][generation_total] += bytes[s][g]; + for (g = 0; g < generation_total; INCRGEN(g)) { + for (s = 0; s < space_total; s++) { + count[g][space_total] += count[g][s]; + count[generation_total][s] += count[g][s]; + count[generation_total][space_total] += count[g][s]; + bytes[g][space_total] += bytes[g][s]; + bytes[generation_total][s] += bytes[g][s]; + bytes[generation_total][space_total] += bytes[g][s]; } } for (g = 0; g <= generation_total; INCRGEN(g)) { - if (count[space_total][g] != 0) { - int n = 1 + snprintf(fmtbuf, FMTBUFSIZE, "%td", (ptrdiff_t)count[space_total][g]); + if (count[g][space_total] != 0) { + int n = 1 + snprintf(fmtbuf, FMTBUFSIZE, "%td", (ptrdiff_t)count[g][space_total]); column_size[g] = n < 8 ? 8 : n; } } @@ -411,7 +418,7 @@ fprintf(out, "Segments per space & generation:\n\n"); fprintf(out, "%8s", ""); for (g = 0; g <= generation_total; INCRGEN(g)) { - if (count[space_total][g] != 0) { + if (count[g][space_total] != 0) { if (g == generation_total) { /* coverity[uninit_use] */ snprintf(fmtbuf, FMTBUFSIZE, "%%%ds", column_size[g]); @@ -430,25 +437,25 @@ fprintf(out, "\n"); for (s = 0; s <= space_total; s++) { if (s != space_empty) { - if (count[s][generation_total] != 0) { + if (count[generation_total][s] != 0) { fprintf(out, "%7s:", spacename[s]); for (g = 0; g <= generation_total; INCRGEN(g)) { - if (count[space_total][g] != 0) { + if (count[g][space_total] != 0) { /* coverity[uninit_use] */ snprintf(fmtbuf, FMTBUFSIZE, "%%%dtd", column_size[g]); - fprintf(out, fmtbuf, (ptrdiff_t)(count[s][g])); + fprintf(out, fmtbuf, (ptrdiff_t)(count[g][s])); } } fprintf(out, "\n"); fprintf(out, "%8s", ""); for (g = 0; g <= generation_total; INCRGEN(g)) { - if (count[space_total][g] != 0) { - if (count[s][g] != 0 && s <= max_real_space) { + if (count[g][space_total] != 0) { + if (count[g][s] != 0 && s <= max_real_space) { /* coverity[uninit_use] */ snprintf(fmtbuf, FMTBUFSIZE, "%%%dd%%%%", column_size[g] - 1); fprintf(out, fmtbuf, - (int)(((double)bytes[s][g] / - ((double)count[s][g] * bytes_per_segment)) * 100.0)); + (int)(((double)bytes[g][s] / + ((double)count[g][s] * bytes_per_segment)) * 100.0)); } else { /* coverity[uninit_use] */ snprintf(fmtbuf, FMTBUFSIZE, "%%%ds", column_size[g]); @@ -601,7 +608,7 @@ if (DISABLECOUNT(tc) == FIX(0)) reactivate_thread(tc); #endif - if (status == -1) { + if ((status == -1) && (errno != 0)) { ptr msg = S_strerror(errno); if (msg != Sfalse) @@ -624,12 +631,12 @@ INT ifd = -1, ofd = -1, efd = -1, child = -1; #ifdef WIN32 -/* WIN32 version courtesy of Bob Burger, burgerrg@sagian.com */ HANDLE hToRead, hToWrite, hFromRead, hFromWrite, hFromReadErr, hFromWriteErr, hProcess; - STARTUPINFO si = {0}; + STARTUPINFOW si = {0}; PROCESS_INFORMATION pi; char *comspec; char *buffer; + wchar_t* bufferw; /* Create non-inheritable pipes, important to eliminate zombee children * when the parent sides are closed. */ @@ -640,14 +647,12 @@ CloseHandle(hToWrite); S_error("process", "cannot open pipes"); } - if (stderrp) { - if (!CreatePipe(&hFromReadErr, &hFromWriteErr, NULL, 0)) { - CloseHandle(hToRead); - CloseHandle(hToWrite); - CloseHandle(hFromRead); - CloseHandle(hFromWrite); - S_error("process", "cannot open pipes"); - } + if (stderrp && !CreatePipe(&hFromReadErr, &hFromWriteErr, NULL, 0)) { + CloseHandle(hToRead); + CloseHandle(hToWrite); + CloseHandle(hFromRead); + CloseHandle(hFromWrite); + S_error("process", "cannot open pipes"); } si.cb = sizeof(STARTUPINFO); @@ -701,13 +706,16 @@ si.hStdError = si.hStdOutput; } - if ((comspec = getenv("COMSPEC"))) { - size_t n = strlen(comspec) + strlen(s) + 5; + if ((comspec = Sgetenv("COMSPEC"))) { + size_t n = strlen(comspec) + strlen(s) + 7; buffer = (char *)_alloca(n); - snprintf(buffer, n, "%s /c %s", comspec, s); + snprintf(buffer, n, "\"%s\" /c %s", comspec, s); + free(comspec); } else buffer = s; - if (!CreateProcess(NULL, buffer, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { + bufferw = Sutf8_to_wide(buffer); + if (!CreateProcessW(NULL, bufferw, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { + free(bufferw); CloseHandle(si.hStdInput); CloseHandle(hToWrite); CloseHandle(hFromRead); @@ -718,6 +726,7 @@ } S_error("process", "cannot spawn subprocess"); } + free(bufferw); CloseHandle(si.hStdInput); CloseHandle(si.hStdOutput); if (stderrp) { @@ -875,6 +884,9 @@ CODEARITYMASK(co) = arity_mark; CODEINFO(co) = info; CODEPINFOS(co) = pinfos; + if (pinfos != Snil) { + S_G.profile_counters = Scons(S_weak_cons(co, pinfos), S_G.profile_counters); + } return co; } @@ -1331,46 +1343,36 @@ static ptr s_getenv(name) char *name; { #ifdef WIN32 -#define GETENVBUFSIZ 100 - char buf[GETENVBUFSIZ]; - size_t n; - - n = GetEnvironmentVariable(name, buf, GETENVBUFSIZ); - if (n > GETENVBUFSIZ) { - ptr bv = S_bytevector(n); - n = GetEnvironmentVariable(name, &BVIT(bv,0), (DWORD)n); - if (n != 0) return S_string(&BVIT(bv,0), n); - } else if (n > 0) { - return S_string(buf, n); - } - - if (getenv_s(&n, buf, GETENVBUFSIZ, name) == 0) { - if (n != 0) return S_string(buf, n-1); - } else { - ptr bv = S_bytevector(n); - if (getenv_s(&n, &BVIT(bv,0), n, name) == 0) - if (n != 0) return S_string(&BVIT(bv,0), n-1); - } - - return Sfalse; + char *s = Sgetenv(name); #else /* WIN32 */ char *s = getenv(name); - return s == (char *)0 ? Sfalse : S_string(s, -1); #endif /* WIN32 */ + if (s == (char *)0) + return Sfalse; + else { + ptr r = Sstring_utf8(s, -1); +#ifdef WIN32 + free(s); +#endif + return r; + } } static void s_putenv PROTO((char *name, char *value)); static void s_putenv(name, value) char *name, *value; { - iptr n; char *s; #ifdef WIN32 - if (SetEnvironmentVariable(name, value) == 0) { + wchar_t* namew; + wchar_t* valuew; + BOOL rc; + namew = Sutf8_to_wide(name); + valuew = Sutf8_to_wide(value); + rc = SetEnvironmentVariableW(namew, valuew); + free(namew); + free(valuew); + if (rc == 0) S_error1("putenv", "environment extension failed: ~a", S_LastErrorString()); - } -#endif /* WIN32 */ - n = strlen(name) + strlen(value) + 2; - if ((s = malloc(n)) == (char *)NULL - || snprintf(s, n, "%s=%s", name, value) < 0 - || PUTENV(s) != 0) { +#else /* WIN32 */ + if (setenv(name, value, 1) != 0) { ptr msg = S_strerror(errno); if (msg != Sfalse) @@ -1378,6 +1380,7 @@ else S_error("putenv", "environment extension failed"); } +#endif /* WIN32 */ } #ifdef PTHREADS @@ -1439,6 +1442,31 @@ } #endif +static ptr s_profile_counters(void) { + return S_G.profile_counters; +} + +/* s_profile_release_counters assumes and maintains the property that each pair's + tail is not younger than the pair and thereby avoids dirty sets. */ +static ptr s_profile_release_counters(void) { + ptr tossed, *p_keep, *p_toss, ls; + p_keep = &S_G.profile_counters; + p_toss = &tossed; + for (ls = *p_keep; ls != Snil && (MaybeSegInfo(ptr_get_segment(ls)))->generation <= S_G.prcgeneration; ls = Scdr(ls)) { + if (Sbwp_objectp(CAAR(ls))) { + *p_toss = ls; + p_toss = &Scdr(ls); + } else { + *p_keep = ls; + p_keep = &Scdr(ls); + } + } + *p_keep = ls; + *p_toss = Snil; + S_G.prcgeneration = 0; + return tossed; +} + void S_dump_tc(ptr tc) { INT i; @@ -1479,7 +1507,7 @@ Sforeign_symbol("(cs)s_ptr_in_heap", (void *)s_ptr_in_heap); Sforeign_symbol("(cs)generation", (void *)s_generation); Sforeign_symbol("(cs)s_fltofx", (void *)s_fltofx); - Sforeign_symbol("(cs)s_weak_cons", (void *)s_weak_cons); + Sforeign_symbol("(cs)s_weak_cons", (void *)S_weak_cons); Sforeign_symbol("(cs)s_weak_pairp", (void *)s_weak_pairp); Sforeign_symbol("(cs)s_ephemeron_cons", (void *)s_ephemeron_cons); Sforeign_symbol("(cs)s_ephemeron_pairp", (void *)s_ephemeron_pairp); @@ -1568,6 +1596,7 @@ Sforeign_symbol("(cs)lognot", (void *)S_lognot); Sforeign_symbol("(cs)fxmul", (void *)s_fxmul); Sforeign_symbol("(cs)fxdiv", (void *)s_fxdiv); + Sforeign_symbol("(cs)s_big_negate", (void *)S_big_negate); Sforeign_symbol("(cs)add", (void *)S_add); Sforeign_symbol("(cs)gcd", (void *)S_gcd); Sforeign_symbol("(cs)mul", (void *)S_mul); @@ -1599,6 +1628,7 @@ #else Sforeign_symbol("(cs)directory_list", (void *)S_directory_list); #endif + Sforeign_symbol("(cs)dequeue_scheme_signals", (void *)S_dequeue_scheme_signals); Sforeign_symbol("(cs)register_scheme_signal", (void *)S_register_scheme_signal); Sforeign_symbol("(cs)exp", (void *)s_exp); @@ -1629,7 +1659,6 @@ Sforeign_symbol("(cs)log1p", (void *)s_log1p); #endif /* LOG1P */ - Sforeign_symbol("(cs)find_pcode", (void *)find_pcode); Sforeign_symbol("(cs)s_get_reloc", (void *)s_get_reloc); Sforeign_symbol("(cs)getenv", (void *)s_getenv); Sforeign_symbol("(cs)putenv", (void *)s_putenv); @@ -1659,27 +1688,8 @@ Sforeign_symbol("(cs)s_multibytetowidechar", (void *)s_multibytetowidechar); Sforeign_symbol("(cs)s_widechartomultibyte", (void *)s_widechartomultibyte); #endif -} - -static ptr find_pcode() { - ptr ls, p, *pp, *nl; - IGEN g; - - ls = Snil; - for (g = 0; g <= static_generation; g++) { - pp = (ptr *)S_G.first_loc[space_code][g]; - nl = (ptr *)S_G.next_loc[space_code][g]; - while (pp != nl) { - if (*pp == forward_marker) - pp = (ptr *)*(pp + 1); - else { - p = TYPE((ptr)pp, type_typed_object); - if (CODEPINFOS(p) != Snil) ls = Scons(p, ls); - pp += size_code(CODELEN(p)) / sizeof(ptr); - } - } - } - return ls; + Sforeign_symbol("(cs)s_profile_counters", (void *)s_profile_counters); + Sforeign_symbol("(cs)s_profile_release_counters", (void *)s_profile_release_counters); } static ptr s_get_reloc(co) ptr co; { @@ -1904,48 +1914,49 @@ #define ICONV_CLOSE iconv_close #endif +#ifdef WIN32 +static ptr s_iconv_trouble(HMODULE h, const char *what) { + wchar_t dllw[PATH_MAX]; + char *dll; + size_t n; + char *msg; + ptr r; + if (0 != GetModuleFileNameW(h, dllw, PATH_MAX)) + dll = Swide_to_utf8(dllw); + else + dll = NULL; + FreeLibrary(h); + n = strlen(what) + strlen(dll) + 17; + msg = (char *)malloc(n); + sprintf_s(msg, n, "cannot find %s in %s", what, dll); + free(dll); + r = Sstring_utf8(msg, -1); + free(msg); + return r; +} +#endif /* WIN32 */ + static ptr s_iconv_open(const char *tocode, const char *fromcode) { iconv_t cd; #ifdef WIN32 static int iconv_is_loaded = 0; if (!iconv_is_loaded) { - HMODULE h = LoadLibrary("iconv.dll"); - if (h == NULL) h = LoadLibrary("libiconv.dll"); - if (h == NULL) h = LoadLibrary("libiconv-2.dll"); - if (h == NULL) h = LoadLibrary(".\\iconv.dll"); - if (h == NULL) h = LoadLibrary(".\\libiconv.dll"); - if (h == NULL) h = LoadLibrary(".\\libiconv-2.dll"); + HMODULE h = LoadLibraryW(L"iconv.dll"); + if (h == NULL) h = LoadLibraryW(L"libiconv.dll"); + if (h == NULL) h = LoadLibraryW(L"libiconv-2.dll"); + if (h == NULL) h = LoadLibraryW(L".\\iconv.dll"); + if (h == NULL) h = LoadLibraryW(L".\\libiconv.dll"); + if (h == NULL) h = LoadLibraryW(L".\\libiconv-2.dll"); if (h == NULL) return Sstring("cannot load iconv.dll, libiconv.dll, or libiconv-2.dll"); if ((iconv_open_f = (iconv_open_ft)GetProcAddress(h, "iconv_open")) == NULL && - (iconv_open_f = (iconv_open_ft)GetProcAddress(h, "libiconv_open")) == NULL) { - const char prefix[] = "cannot find iconv_open or libiconv_open in "; - char msg[sizeof(prefix) - 1 + PATH_MAX]; - strncpy(msg, prefix, sizeof(prefix)); - strcpy(msg + sizeof(prefix) - 1, "iconv dll"); - GetModuleFileName(h, msg + sizeof(prefix) - 1, PATH_MAX); - FreeLibrary(h); - return Sstring(msg); - } + (iconv_open_f = (iconv_open_ft)GetProcAddress(h, "libiconv_open")) == NULL) + return s_iconv_trouble(h, "iconv_open or libiconv_open"); if ((iconv_f = (iconv_ft)GetProcAddress(h, "iconv")) == NULL && - (iconv_f = (iconv_ft)GetProcAddress(h, "libiconv")) == NULL) { - const char prefix[] = "cannot find iconv or libiconv in "; - char msg[sizeof(prefix) - 1 + PATH_MAX]; - strncpy(msg, prefix, sizeof(prefix)); - strcpy(msg + sizeof(prefix) - 1, "iconv dll"); - GetModuleFileName(h, msg + sizeof(prefix) - 1, PATH_MAX); - FreeLibrary(h); - return Sstring(msg); - } + (iconv_f = (iconv_ft)GetProcAddress(h, "libiconv")) == NULL) + return s_iconv_trouble(h, "iconv or libiconv"); if ((iconv_close_f = (iconv_close_ft)GetProcAddress(h, "iconv_close")) == NULL && - (iconv_close_f = (iconv_close_ft)GetProcAddress(h, "libiconv_close")) == NULL) { - const char prefix[] = "cannot find iconv_close or libiconv_close in "; - char msg[sizeof(prefix) - 1 + PATH_MAX]; - strncpy(msg, prefix, sizeof(prefix)); - strcpy(msg + sizeof(prefix) - 1, "iconv dll"); - GetModuleFileName(h, msg + sizeof(prefix) - 1, PATH_MAX); - FreeLibrary(h); - return Sstring(msg); - } + (iconv_close_f = (iconv_close_ft)GetProcAddress(h, "libiconv_close")) == NULL) + return s_iconv_trouble(h, "iconv_close or libiconv_close"); iconv_is_loaded = 1; } #endif /* WIN32 */ diff -Nru chezscheme-9.5+dfsg/c/prim.c chezscheme-9.5.4+dfsg/c/prim.c --- chezscheme-9.5+dfsg/c/prim.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/prim.c 2020-08-31 02:35:12.000000000 +0000 @@ -124,6 +124,9 @@ #ifdef PTHREADS install_c_entry(CENTRY_raw_collect_cond, (ptr)&S_collect_cond); install_c_entry(CENTRY_raw_tc_mutex, (ptr)&S_tc_mutex); + install_c_entry(CENTRY_activate_thread, proc2ptr(S_activate_thread)); + install_c_entry(CENTRY_deactivate_thread, proc2ptr(Sdeactivate_thread)); + install_c_entry(CENTRY_unactivate_thread, proc2ptr(S_unactivate_thread)); #endif /* PTHREADS */ install_c_entry(CENTRY_handle_values_error, proc2ptr(S_handle_values_error)); install_c_entry(CENTRY_handle_mvlet_error, proc2ptr(S_handle_mvlet_error)); @@ -134,21 +137,15 @@ install_c_entry(CENTRY_scan_remembered_set, proc2ptr(S_scan_remembered_set)); install_c_entry(CENTRY_instantiate_code_object, proc2ptr(s_instantiate_code_object)); install_c_entry(CENTRY_Sreturn, proc2ptr(S_return)); - install_c_entry(CENTRY_Scall_ptr, proc2ptr(S_call_ptr)); - install_c_entry(CENTRY_Scall_fptr, proc2ptr(S_call_fptr)); - install_c_entry(CENTRY_Scall_bytevector, proc2ptr(S_call_bytevector)); - install_c_entry(CENTRY_Scall_fixnum, proc2ptr(S_call_fixnum)); - install_c_entry(CENTRY_Scall_int32, proc2ptr(S_call_int32)); - install_c_entry(CENTRY_Scall_uns32, proc2ptr(S_call_uns32)); - install_c_entry(CENTRY_Scall_double, proc2ptr(S_call_double)); - install_c_entry(CENTRY_Scall_single, proc2ptr(S_call_single)); - install_c_entry(CENTRY_Scall_int64, proc2ptr(S_call_int64)); - install_c_entry(CENTRY_Scall_uns64, proc2ptr(S_call_uns64)); - install_c_entry(CENTRY_Scall_void, proc2ptr(S_call_void)); + install_c_entry(CENTRY_Scall_one_result, proc2ptr(S_call_one_result)); + install_c_entry(CENTRY_Scall_any_results, proc2ptr(S_call_any_results)); for (i = 0; i < c_entry_vector_size; i++) { #ifndef PTHREADS - if (i == CENTRY_raw_collect_cond || i == CENTRY_raw_tc_mutex) continue; + if (i == CENTRY_raw_collect_cond || i == CENTRY_raw_tc_mutex + || i == CENTRY_activate_thread || i == CENTRY_deactivate_thread + || i == CENTRY_unactivate_thread) + continue; #endif /* NOT PTHREADS */ if (Svector_ref(S_G.c_entry_vector, i) == Sfalse) { fprintf(stderr, "c_entry_vector entry %d is uninitialized\n", i); @@ -186,12 +183,15 @@ Sforeign_symbol("(cs)enable_object_counts", (void *)S_enable_object_counts); Sforeign_symbol("(cs)set_enable_object_counts", (void *)S_set_enable_object_counts); Sforeign_symbol("(cs)object_counts", (void *)S_object_counts); + Sforeign_symbol("(cs)unregister_guardian", (void *)S_unregister_guardian); + Sforeign_symbol("(cs)fire_collector", (void *)S_fire_collector); } static void s_instantiate_code_object() { ptr tc = get_thread_context(); ptr old, cookie, proc; ptr new, oldreloc, newreloc; + ptr pinfos; uptr a, m, n; iptr i, size; @@ -214,7 +214,10 @@ CODEARITYMASK(new) = CODEARITYMASK(old); CODEFREE(new) = CODEFREE(old); CODEINFO(new) = CODEINFO(old); - CODEPINFOS(new) = CODEPINFOS(old); + CODEPINFOS(new) = pinfos = CODEPINFOS(old); + if (pinfos != Snil) { + S_G.profile_counters = Scons(S_weak_cons(new, pinfos), S_G.profile_counters); + } for (i = 0; i < CODELEN(old); i++) CODEIT(new,i) = CODEIT(old,i); diff -Nru chezscheme-9.5+dfsg/c/print.c chezscheme-9.5.4+dfsg/c/print.c --- chezscheme-9.5+dfsg/c/print.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/print.c 2020-08-31 02:35:12.000000000 +0000 @@ -282,7 +282,7 @@ static void wrint(x) ptr x; { ptr q, r; - S_trunc_rem(x, FIX(10), &q, &r); + S_trunc_rem(get_thread_context(), x, FIX(10), &q, &r); if (q != 0) wrint(q); putchar((INT)UNFIX(r) + '0'); } diff -Nru chezscheme-9.5+dfsg/c/scheme.c chezscheme-9.5.4+dfsg/c/scheme.c --- chezscheme-9.5+dfsg/c/scheme.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/scheme.c 2020-08-31 02:35:12.000000000 +0000 @@ -19,12 +19,18 @@ #include #include #ifdef WIN32 +#include #include #else #include #endif +#include #include +#ifndef O_BINARY +#define O_BINARY 0 +#endif /* O_BINARY */ + static INT boot_count; static IBOOL verbose; @@ -39,11 +45,16 @@ static void idiot_checks PROTO((void)); static INT run_script PROTO((const char *who, const char *scriptfile, INT argc, const char *argv[], IBOOL programp)); +extern void scheme_include(void); + static void main_init() { ptr tc = get_thread_context(); ptr p; INT i; + /* create dependency for linker */ + scheme_statics(); + /* force thread inline allocation to go through find_room until ready */ AP(tc) = (ptr)0; EAP(tc) = (ptr)0; @@ -76,6 +87,9 @@ if (!S_boot_time) return; + S_protect(&S_G.profile_counters); + S_G.profile_counters = Snil; + FXLENGTHBV(tc) = p = S_bytevector(256); for (i = 0; i < 256; i += 1) { BVIT(p, i) = @@ -126,6 +140,13 @@ S_protect(&S_G.heap_reserve_ratio_id); S_G.heap_reserve_ratio_id = S_intern((const unsigned char *)"$heap-reserve-ratio"); SETSYMVAL(S_G.heap_reserve_ratio_id, Sflonum(default_heap_reserve_ratio)); + + S_protect(&S_G.scheme_version_id); + S_G.scheme_version_id = S_intern((const unsigned char *)"$scheme-version"); + S_protect(&S_G.make_load_binary_id); + S_G.make_load_binary_id = S_intern((const unsigned char *)"$make-load-binary"); + S_protect(&S_G.load_binary); + S_G.load_binary = Sfalse; } static ptr fixtest = FIX(-1); @@ -320,7 +341,7 @@ CP(tc) = Svoid; /* don't have calling code object */ AC0(tc) = (ptr)(uptr)n; - S_call_help(tc, 0); + S_call_help(tc, 0, 0); check_ap(tc); CP(tc) = Svoid; /* leave clean so direct Scall won't choke */ @@ -333,7 +354,7 @@ p = Svoid; break; default: - p = S_get_scheme_arg(tc, 0); + p = S_get_scheme_arg(tc, 1); break; } return p; @@ -375,7 +396,7 @@ hdr.env = (I32)0; p = (ugly)((I32)&hdr + 2); p(tc); -#elif defined(WIN32) +#elif defined(WIN32) && !defined(__MINGW32__) __try { (*((void (*) PROTO((ptr)))(void *)&CODEIT(code,0)))(tc); } @@ -415,25 +436,28 @@ return p; } -#define SEARCHPATHMAXSIZE 8192 #ifdef WIN32 #ifndef DEFAULT_HEAP_PATH /* by default, look in executable directory or in parallel boot directory */ #define DEFAULT_HEAP_PATH "%x;%x\\..\\..\\boot\\%m" #endif #define SEARCHPATHSEP ';' +#define PATHSEP '\\' static char *get_defaultheapdirs() { char *result; - static char defaultheapdirs[SEARCHPATHMAXSIZE]; - char key[PATH_MAX]; - snprintf(key, PATH_MAX, "HKEY_LOCAL_MACHINE\\Software\\Chez Scheme\\csv%s\\HeapSearchPath", VERSION); - result = S_GetRegistry(defaultheapdirs, SEARCHPATHMAXSIZE, key); - if (result == NULL) result = DEFAULT_HEAP_PATH; - return result; + wchar_t buf[PATH_MAX]; + DWORD len = sizeof(buf); + if (ERROR_SUCCESS != RegGetValueW(HKEY_LOCAL_MACHINE, L"Software\\Chez Scheme\\csv" VERSION, L"HeapSearchPath", RRF_RT_REG_SZ, NULL, buf, &len)) + return DEFAULT_HEAP_PATH; + else if ((result = Swide_to_utf8(buf))) + return result; + else + return DEFAULT_HEAP_PATH; } #else /* not WIN32: */ #define SEARCHPATHSEP ':' +#define PATHSEP '/' #ifndef DEFAULT_HEAP_PATH #define DEFAULT_HEAP_PATH "/usr/lib/csv%v/%m:/usr/local/lib/csv%v/%m" #endif @@ -466,17 +490,20 @@ switch (*s) { #ifdef WIN32 case 'x': { - char exepath[PATH_MAX]; DWORD n; + wchar_t exepath[PATH_MAX]; DWORD n; s += 1; - n = GetModuleFileName(NULL,exepath,PATH_MAX); + n = GetModuleFileNameW(NULL, exepath, PATH_MAX); if (n == 0 || (n == PATH_MAX && GetLastError() == ERROR_INSUFFICIENT_BUFFER)) { fprintf(stderr, "warning: executable path is too long; ignoring %%x\n"); } else { + char *tstart; const char *tend; - t = exepath; + tstart = Swide_to_utf8(exepath); + t = tstart; tend = path_last(t); if (tend != t) tend -= 1; /* back up to directory separator */ while (t != tend) setp(*t++); + free(tstart); } break; } @@ -509,7 +536,7 @@ /* unless entry was null, append name and ext onto path and return true with * updated path, sp, and possibly dsp */ if (s != *sp) { - if (!DIRMARKERP(*(p - 1))) { setp('/'); } + if ((p > path) && !DIRMARKERP(*(p - 1))) { setp(PATHSEP); } t = name; while (*t != 0) setp(*t++); t = ext; @@ -535,7 +562,7 @@ /* BOOT FILES */ typedef struct { - gzFile file; + INT fd; char path[PATH_MAX]; } boot_desc; @@ -543,19 +570,21 @@ static boot_desc bd[MAX_BOOT_FILES]; /* locally defined functions */ -static uptr zget_uptr PROTO((gzFile file, uptr *pn)); -static INT zgetstr PROTO((gzFile file, char *s, iptr max)); -static IBOOL find_boot PROTO((const char *name, const char *ext, IBOOL errorp)); +static char get_u8 PROTO((INT fd)); +static uptr get_uptr PROTO((INT fd, uptr *pn)); +static INT get_string PROTO((INT fd, char *s, iptr max, INT *c)); +static IBOOL find_boot PROTO((const char *name, const char *ext, int fd, IBOOL errorp)); static void load PROTO((ptr tc, iptr n, IBOOL base)); +static void check_boot_file_state PROTO((const char *who)); -static IBOOL find_boot(name, ext, errorp) const char *name, *ext; IBOOL errorp; { +static IBOOL find_boot(name, ext, fd, errorp) const char *name, *ext; int fd; IBOOL errorp; { char pathbuf[PATH_MAX], buf[PATH_MAX]; - uptr n; INT c; + uptr n = 0; + INT c; const char *path; char *expandedpath; - gzFile file; - if (S_fixedpathp(name)) { + if ((fd != -1) || S_fixedpathp(name)) { if (strlen(name) >= PATH_MAX) { fprintf(stderr, "boot-file path is too long %s\n", name); S_abnormal_exit(); @@ -563,12 +592,13 @@ path = name; - expandedpath = S_malloc_pathname(path); - file = gzopen(expandedpath, "rb"); - /* assumption (seemingly true based on a glance at the source code): - gzopen doesn't squirrel away a pointer to expandedpath. */ - free(expandedpath); - if (!file) { + if (fd == -1) { + expandedpath = S_malloc_pathname(path); + fd = OPEN(expandedpath, O_BINARY|O_RDONLY, 0); + free(expandedpath); + } + + if (fd == -1) { if (errorp) { fprintf(stderr, "cannot open boot file %s\n", path); S_abnormal_exit(); @@ -580,22 +610,22 @@ if (verbose) fprintf(stderr, "trying %s...opened\n", path); /* check for magic number */ - if (gzgetc(file) != fasl_type_header || - gzgetc(file) != 0 || - gzgetc(file) != 0 || - gzgetc(file) != 0 || - gzgetc(file) != 'c' || - gzgetc(file) != 'h' || - gzgetc(file) != 'e' || - gzgetc(file) != 'z') { + if (get_u8(fd) != fasl_type_header || + get_u8(fd) != 0 || + get_u8(fd) != 0 || + get_u8(fd) != 0 || + get_u8(fd) != 'c' || + get_u8(fd) != 'h' || + get_u8(fd) != 'e' || + get_u8(fd) != 'z') { fprintf(stderr, "malformed fasl-object header in %s\n", path); S_abnormal_exit(); } /* check version */ - if (zget_uptr(file, &n) != 0) { + if (get_uptr(fd, &n) != 0) { fprintf(stderr, "unexpected end of file on %s\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } @@ -603,21 +633,21 @@ fprintf(stderr, "%s is for Version %s; ", path, S_format_scheme_version(n)); /* use separate fprintf since S_format_scheme_version returns static string */ fprintf(stderr, "need Version %s\n", S_format_scheme_version(scheme_version)); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } /* check machine type */ - if (zget_uptr(file, &n) != 0) { + if (get_uptr(fd, &n) != 0) { fprintf(stderr, "unexpected end of file on %s\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } if (n != machine_type) { fprintf(stderr, "%s is for machine-type %s; need machine-type %s\n", path, S_lookup_machine_type(n), S_lookup_machine_type(machine_type)); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } } else { @@ -639,11 +669,9 @@ } expandedpath = S_malloc_pathname(path); - file = gzopen(expandedpath, "rb"); - /* assumption (seemingly true based on a glance at the source code): - gzopen doesn't squirrel away a pointer to expandedpath. */ + fd = OPEN(expandedpath, O_BINARY|O_RDONLY, 0); free(expandedpath); - if (!file) { + if (fd == -1) { if (verbose) fprintf(stderr, "trying %s...cannot open\n", path); continue; } @@ -651,23 +679,23 @@ if (verbose) fprintf(stderr, "trying %s...opened\n", path); /* check for magic number */ - if (gzgetc(file) != fasl_type_header || - gzgetc(file) != 0 || - gzgetc(file) != 0 || - gzgetc(file) != 0 || - gzgetc(file) != 'c' || - gzgetc(file) != 'h' || - gzgetc(file) != 'e' || - gzgetc(file) != 'z') { + if (get_u8(fd) != fasl_type_header || + get_u8(fd) != 0 || + get_u8(fd) != 0 || + get_u8(fd) != 0 || + get_u8(fd) != 'c' || + get_u8(fd) != 'h' || + get_u8(fd) != 'e' || + get_u8(fd) != 'z') { if (verbose) fprintf(stderr, "malformed fasl-object header in %s\n", path); - gzclose(file); + CLOSE(fd); continue; } /* check version */ - if (zget_uptr(file, &n) != 0) { + if (get_uptr(fd, &n) != 0) { if (verbose) fprintf(stderr, "unexpected end of file on %s\n", path); - gzclose(file); + CLOSE(fd); continue; } @@ -677,14 +705,14 @@ /* use separate fprintf since S_format_scheme_version returns static string */ fprintf(stderr, "need Version %s\n", S_format_scheme_version(scheme_version)); } - gzclose(file); + CLOSE(fd); continue; } /* check machine type */ - if (zget_uptr(file, &n) != 0) { + if (get_uptr(fd, &n) != 0) { if (verbose) fprintf(stderr, "unexpected end of file on %s\n", path); - gzclose(file); + CLOSE(fd); continue; } @@ -692,7 +720,7 @@ if (verbose) fprintf(stderr, "%s is for machine-type %s; need machine-type %s\n", path, S_lookup_machine_type(n), S_lookup_machine_type(machine_type)); - gzclose(file); + CLOSE(fd); continue; } @@ -702,58 +730,61 @@ if (verbose) fprintf(stderr, "version and machine type check\n"); - if (gzgetc(file) != '(') { /* ) */ + if (get_u8(fd) != '(') { /* ) */ fprintf(stderr, "malformed boot file %s\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } /* ( */ - if ((c = gzgetc(file)) == ')') { + if ((c = get_u8(fd)) == ')') { if (boot_count != 0) { fprintf(stderr, "base boot file %s must come before other boot files\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } } else { if (boot_count == 0) { for (;;) { - gzungetc(c, file); /* try to load heap or boot file this boot file requires */ - if (zgetstr(file, buf, PATH_MAX) != 0) { + if (get_string(fd, buf, PATH_MAX, &c) != 0) { fprintf(stderr, "unexpected end of file on %s\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } - if (find_boot(buf, ".boot", 0)) break; - if ((c = gzgetc(file)) == ')') { + if (find_boot(buf, ".boot", -1, 0)) break; + if (c == ')') { char *sep; char *wastebuf[8]; - fprintf(stderr, "cannot find subordinate boot file "); - gzrewind(file); - (void) gzread(file, wastebuf, 8); /* magic number */ - (void) zget_uptr(file, &n); /* version */ - (void) zget_uptr(file, &n); /* machine type */ - (void) gzgetc(file); /* open paren */ - for (sep = ""; ; sep = "or ") { - if ((c = gzgetc(file)) == ')') break; - gzungetc(c, file); - (void) zgetstr(file, buf, PATH_MAX); + fprintf(stderr, "cannot find subordinate boot file"); + if (LSEEK(fd, 0, SEEK_SET) != 0 || READ(fd, wastebuf, 8) != 8) { /* attempt to rewind and read magic number */ + fprintf(stderr, "---retry with verbose flag for more information\n"); + CLOSE(fd); + S_abnormal_exit(); + } + (void) get_uptr(fd, &n); /* version */ + (void) get_uptr(fd, &n); /* machine type */ + (void) get_u8(fd); /* open paren */ + c = get_u8(fd); + for (sep = " "; ; sep = "or ") { + if (c == ')') break; + (void) get_string(fd, buf, PATH_MAX, &c); fprintf(stderr, "%s%s.boot ", sep, buf); } fprintf(stderr, "required by %s\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } } } /* skip to end of header */ - while ((c = gzgetc(file)) != ')') { + while (c != ')') { if (c < 0) { fprintf(stderr, "malformed boot file %s\n", path); - gzclose(file); + CLOSE(fd); S_abnormal_exit(); } + c = get_u8(fd); } } @@ -762,21 +793,27 @@ S_abnormal_exit(); } - bd[boot_count].file = file; + bd[boot_count].fd = fd; strcpy(bd[boot_count].path, path); boot_count += 1; return 1; } -static uptr zget_uptr(gzFile file, uptr *pn) { +static char get_u8(INT fd) { + char buf[1]; + if (READ(fd, &buf, 1) != 1) return -1; + return buf[0]; +} + +static uptr get_uptr(INT fd, uptr *pn) { uptr n, m; int c; octet k; - if ((c = gzgetc(file)) < 0) return -1; + if ((c = get_u8(fd)) < 0) return -1; k = (octet)c; n = k >> 1; while (k & 1) { - if ((c = gzgetc(file)) < 0) return -1; + if ((c = get_u8(fd)) < 0) return -1; k = (octet)c; m = n << 7; if (m >> 7 != n) return -1; @@ -786,62 +823,58 @@ return 0; } -static INT zgetstr(file, s, max) gzFile file; char *s; iptr max; { - ICHAR c; - +static INT get_string(fd, s, max, c) INT fd; char *s; iptr max; INT *c; { while (max-- > 0) { - if ((c = gzgetc(file)) < 0) return -1; - if (c == ' ' || c == ')') { - if (c == ')') gzungetc(c, file); + if (*c < 0) return -1; + if (*c == ' ' || *c == ')') { + if (*c == ' ') *c = get_u8(fd); *s = 0; return 0; } - *s++ = c; + *s++ = *c; + *c = get_u8(fd); } - return -1; } static IBOOL loadecho = 0; #define LOADSKIP 0 -static void handle_visit_revisit(tc, p) ptr tc; ptr p; { - ptr a = Scar(p); - - if (a == FIX(visit_tag) || a == FIX(revisit_tag)) { - ptr d = Scdr(p); - if (Sprocedurep(d)) { - S_initframe(tc, 0); - INITCDR(p) = boot_call(tc, d, 0); - } +static int set_load_binary(iptr n) { + if (!Ssymbolp(SYMVAL(S_G.scheme_version_id))) return 0; // set by back.ss + ptr make_load_binary = SYMVAL(S_G.make_load_binary_id); + if (Sprocedurep(make_load_binary)) { + S_G.load_binary = Scall1(make_load_binary, Sstring_utf8(bd[n].path, -1)); + return 1; } + return 0; } static void load(tc, n, base) ptr tc; iptr n; IBOOL base; { ptr x; iptr i; if (base) { - S_G.error_invoke_code_object = S_boot_read(bd[n].file, bd[n].path); + S_G.error_invoke_code_object = S_boot_read(bd[n].fd, bd[n].path); if (!Scodep(S_G.error_invoke_code_object)) { (void) fprintf(stderr, "first object on boot file not code object\n"); S_abnormal_exit(); } - S_G.invoke_code_object = S_boot_read(bd[n].file, bd[n].path); + S_G.invoke_code_object = S_boot_read(bd[n].fd, bd[n].path); if (!Scodep(S_G.invoke_code_object)) { (void) fprintf(stderr, "second object on boot file not code object\n"); S_abnormal_exit(); } - S_G.base_rtd = S_boot_read(bd[n].file, bd[n].path); + S_G.base_rtd = S_boot_read(bd[n].fd, bd[n].path); if (!Srecordp(S_G.base_rtd)) { S_abnormal_exit(); } } i = 0; - while (i++ < LOADSKIP && S_boot_read(bd[n].file, bd[n].path) != Seof_object); + while (i++ < LOADSKIP && S_boot_read(bd[n].fd, bd[n].path) != Seof_object); - while ((x = S_boot_read(bd[n].file, bd[n].path)) != Seof_object) { + while ((x = S_boot_read(bd[n].fd, bd[n].path)) != Seof_object) { if (loadecho) { printf("%ld: ", (long)i); fflush(stdout); @@ -849,20 +882,10 @@ if (Sprocedurep(x)) { S_initframe(tc, 0); x = boot_call(tc, x, 0); - } else if (Svectorp(x)) { - iptr j, n; - n = Svector_length(x); - for (j = 0; j < n; j += 1) { - ptr y = Svector_ref(x, j); - if (Sprocedurep(y)) { - S_initframe(tc, 0); - INITVECTIT(x, j) = boot_call(tc, y, 0); - } else if (Spairp(y)) { - handle_visit_revisit(tc, y); - } - } - } else if (Spairp(x)) { - handle_visit_revisit(tc, x); + } else if (Sprocedurep(S_G.load_binary) || set_load_binary(n)) { + S_initframe(tc, 1); + S_put_arg(tc, 1, x); + x = boot_call(tc, S_G.load_binary, 1); } if (loadecho) { S_prin1(x); @@ -872,7 +895,8 @@ i += 1; } - gzclose(bd[n].file); + S_G.load_binary = Sfalse; + CLOSE(bd[n].fd); } /***************************************************************************/ @@ -951,7 +975,11 @@ boot_count = 0; +#ifdef WIN32 + Sschemeheapdirs = Sgetenv("SCHEMEHEAPDIRS"); +#else Sschemeheapdirs = getenv("SCHEMEHEAPDIRS"); +#endif if (Sschemeheapdirs == (char *)0) { Sschemeheapdirs = ""; if ((Sdefaultheapdirs = get_defaultheapdirs()) == (char *)0) Sdefaultheapdirs = ""; @@ -979,20 +1007,28 @@ #endif } -extern void Sregister_boot_file(name) const char *name; { +static void check_boot_file_state(const char *who) { switch (current_state) { case UNINITIALIZED: case DEINITIALIZED: - fprintf(stderr, "error (Sregister_boot_file): uninitialized; call Sscheme_init first\n"); + fprintf(stderr, "error (%s): uninitialized; call Sscheme_init first\n", who); if (current_state == UNINITIALIZED) exit(1); else S_abnormal_exit(); case RUNNING: - fprintf(stderr, "error (Sregister_boot_file): already running\n"); + fprintf(stderr, "error (%s): already running\n", who); S_abnormal_exit(); case BOOTING: break; } +} + +extern void Sregister_boot_file(name) const char *name; { + check_boot_file_state("Sregister_boot_file"); + find_boot(name, "", -1, 1); +} - find_boot(name, "", 1); +extern void Sregister_boot_file_fd(name, fd) const char *name; int fd; { + check_boot_file_state("Sregister_boot_file_fd"); + find_boot(name, "", fd, 1); } extern void Sregister_heap_file(UNUSED const char *path) { @@ -1039,7 +1075,7 @@ iptr n; n = strlen(name) - 4; - if (n >= 0 && (strcmp(name + n, ".exe") == 0 || strcmp(name + n, ".EXE") == 0)) { + if (n >= 0 && (_stricmp(name + n, ".exe") == 0)) { strcpy(buf, name); buf[n] = 0; name = buf; @@ -1047,7 +1083,7 @@ } #endif - if (!find_boot(name, ".boot", 0)) { + if (!find_boot(name, ".boot", -1, 0)) { fprintf(stderr, "cannot find compatible %s.boot in search path\n \"%s%s\"\n", name, Sschemeheapdirs, Sdefaultheapdirs); @@ -1074,6 +1110,8 @@ /* #scheme-init enables interrupts */ TRAP(tc) = (ptr)most_positive_fixnum; DISABLECOUNT(tc) = Sfixnum(1); + COMPRESSFORMAT(tc) = FIX(COMPRESS_LZ4); + COMPRESSLEVEL(tc) = FIX(COMPRESS_MEDIUM); load(tc, i++, 1); S_boot_time = 0; @@ -1101,7 +1139,7 @@ Scall1(S_symbol_value(Sstring_to_symbol("$enable-expeditor")), Strue); if (history_file != (const char *)0) Scall1(S_symbol_value(Sstring_to_symbol("$expeditor-history-file")), - Sstring(history_file)); + Sstring_utf8(history_file, -1)); } extern INT Sscheme_start(argc, argv) INT argc; const char *argv[]; { @@ -1122,7 +1160,7 @@ arglist = Snil; for (i = argc - 1; i > 0; i -= 1) - arglist = Scons(Sstring(argv[i]), arglist); + arglist = Scons(Sstring_utf8(argv[i], -1), arglist); p = S_symbol_value(S_intern((const unsigned char *)"$scheme")); if (!Sprocedurep(p)) { @@ -1156,7 +1194,7 @@ arglist = Snil; for (i = argc - 1; i > 0; i -= 1) - arglist = Scons(Sstring(argv[i]), arglist); + arglist = Scons(Sstring_utf8(argv[i], -1), arglist); p = S_symbol_value(S_intern((const unsigned char *)"$script")); if (!Sprocedurep(p)) { @@ -1166,7 +1204,7 @@ S_initframe(tc, 3); S_put_arg(tc, 1, Sboolean(programp)); - S_put_arg(tc, 2, Sstring(scriptfile)); + S_put_arg(tc, 2, Sstring_utf8(scriptfile, -1)); S_put_arg(tc, 3, arglist); p = boot_call(tc, p, 3); diff -Nru chezscheme-9.5+dfsg/c/scheme.rc chezscheme-9.5.4+dfsg/c/scheme.rc --- chezscheme-9.5+dfsg/c/scheme.rc 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/scheme.rc 2020-08-31 02:35:12.000000000 +0000 @@ -1,8 +1,8 @@ #include "winver.h" VS_VERSION_INFO VERSIONINFO - FILEVERSION 9,5,0,0 - PRODUCTVERSION 9,5,0,0 + FILEVERSION 9,5,4,0 + PRODUCTVERSION 9,5,4,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS VOS__WINDOWS32 @@ -12,13 +12,13 @@ BLOCK "StringFileInfo" { BLOCK "04090000" { VALUE "CompanyName", "Cisco Systems, Inc." - VALUE "FileDescription", "Chez Scheme Version 9.5" - VALUE "FileVersion", "9.5" + VALUE "FileDescription", "Chez Scheme Version 9.5.4" + VALUE "FileVersion", "9.5.4" VALUE "InternalName", "scheme.exe" - VALUE "LegalCopyright", "Copyright 1984-2017 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0." + VALUE "LegalCopyright", "Copyright 1984-2020 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0." VALUE "OriginalFilename", "scheme.exe" VALUE "ProductName", "Chez Scheme" - VALUE "ProductVersion", "9.5" + VALUE "ProductVersion", "9.5.4" } } BLOCK "VarFileInfo" { diff -Nru chezscheme-9.5+dfsg/c/schlib.c chezscheme-9.5.4+dfsg/c/schlib.c --- chezscheme-9.5+dfsg/c/schlib.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/schlib.c 2020-08-31 02:35:12.000000000 +0000 @@ -105,6 +105,8 @@ return S_string(s, n); } +/* Sstring_utf8 is in alloc.c */ + /* Sbox is in alloc.c */ /* Sinteger is in number.c */ @@ -199,19 +201,23 @@ static ptr S_call(tc, cp, argcnt) ptr tc; ptr cp; iptr argcnt; { AC0(tc) = (ptr)argcnt; AC1(tc) = cp; - S_call_help(tc, 1); + S_call_help(tc, 1, 0); return AC0(tc); } /* args are set up, argcnt in ac0, closure in ac1 */ -void S_call_help(tc, singlep) ptr tc; IBOOL singlep; { - /* declaring code volatile should be unnecessary, but it quiets gcc */ - void *jb; volatile ptr code; +void S_call_help(tc_in, singlep, lock_ts) ptr tc_in; IBOOL singlep; IBOOL lock_ts; { + /* declaring code and tc volatile should be unnecessary, but it quiets gcc + and avoids occasional invalid memory violations on Windows */ + void *jb; volatile ptr code; + volatile ptr tc = tc_in; /* lock caller's code object, since his return address is sitting in the C stack and we may end up in a garbage collection */ code = CP(tc); if (Sprocedurep(code)) code = CLOSCODE(code); + if (!IMMEDIATE(code) && !Scodep(code)) + S_error_abort("S_call_help: invalid code pointer"); Slock_object(code); CP(tc) = AC1(tc); @@ -219,7 +225,16 @@ jb = CREATEJMPBUF(); if (jb == NULL) S_error_abort("unable to allocate memory for jump buffer"); - FRAME(tc, -1) = CCHAIN(tc) = Scons(Scons(jb, code), CCHAIN(tc)); + if (lock_ts) { + /* Lock a code object passed in TS, which is a more immediate + caller whose return address is on the C stack */ + Slock_object(TS(tc)); + CCHAIN(tc) = Scons(Scons(jb, Scons(code,TS(tc))), CCHAIN(tc)); + } else { + CCHAIN(tc) = Scons(Scons(jb, Scons(code,Sfalse)), CCHAIN(tc)); + } + + FRAME(tc, -1) = CCHAIN(tc); switch (SETJMP(jb)) { case 0: /* first time */ @@ -252,72 +267,17 @@ CP(tc) = code; } -void S_call_void() { - ptr tc = get_thread_context(); - S_call_help(tc, 0); -} - -ptr S_call_ptr() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return AC0(tc); -} - -iptr S_call_fixnum() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return Sfixnum_value(AC0(tc)); -} - -I32 S_call_int32() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return (I32)Sinteger_value(AC0(tc)); -} - -U32 S_call_uns32() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return (U32)Sinteger_value(AC0(tc)); -} - -I64 S_call_int64() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return S_int64_value("foreign-callable", AC0(tc)); -} - -U64 S_call_uns64() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return S_int64_value("foreign-callable", AC0(tc)); -} - -double S_call_double() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return Sflonum_value(AC0(tc)); -} - -float S_call_single() { - ptr tc = get_thread_context(); - S_call_help(tc, 1); - return (float)Sflonum_value(AC0(tc)); -} - -U8 *S_call_bytevector() { +void S_call_one_result() { ptr tc = get_thread_context(); - S_call_help(tc, 1); - return (U8 *)&BVIT(AC0(tc),0); + S_call_help(tc, 1, 1); } -uptr S_call_fptr() { +void S_call_any_results() { ptr tc = get_thread_context(); - S_call_help(tc, 1); - return (uptr)RECORDINSTIT(AC0(tc),0); + S_call_help(tc, 0, 1); } -/* cchain = ((jb . co) ...) */ +/* cchain = ((jb . (co . maybe-co)) ...) */ void S_return() { ptr tc = get_thread_context(); ptr xp, yp; @@ -334,7 +294,9 @@ /* error checks are done; now unlock affected code objects */ for (xp = CCHAIN(tc); ; xp = Scdr(xp)) { - Sunlock_object(CDAR(xp)); + ptr p = CDAR(xp); + Sunlock_object(Scar(p)); + if (Scdr(p) != Sfalse) Sunlock_object(Scdr(p)); if (xp == yp) break; FREEJMPBUF(CAAR(xp)); } diff -Nru chezscheme-9.5+dfsg/c/schsig.c chezscheme-9.5.4+dfsg/c/schsig.c --- chezscheme-9.5+dfsg/c/schsig.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/schsig.c 2020-08-31 02:35:12.000000000 +0000 @@ -21,7 +21,7 @@ static void S_promote_to_multishot PROTO((ptr k)); static void split PROTO((ptr k, ptr *s)); static void reset_scheme PROTO((void)); -static void do_error PROTO((iptr type, const char *who, const char *s, ptr args)); +static NORETURN void do_error PROTO((iptr type, const char *who, const char *s, ptr args)); static void handle_call_error PROTO((ptr tc, iptr type, ptr x)); static void init_signal_handlers PROTO((void)); static void keyboard_interrupt PROTO((ptr tc)); @@ -384,8 +384,8 @@ } args = Scons(FIX(type), - Scons((strlen(who) == 0 ? Sfalse : S_string(who,-1)), - Scons(S_string(s, -1), args))); + Scons((strlen(who) == 0 ? Sfalse : Sstring_utf8(who,-1)), + Scons(Sstring_utf8(s, -1), args))); #ifdef PTHREADS while (S_tc_mutex_depth > 0) { @@ -501,16 +501,24 @@ } #ifdef WIN32 +ptr S_dequeue_scheme_signals(ptr tc) { + return Snil; +} + +ptr S_allocate_scheme_signal_queue() { + return (ptr)0; +} + +void S_register_scheme_signal(sig) iptr sig; { + S_error("register_scheme_signal", "unsupported in this version"); +} + /* code courtesy Bob Burger, burgerrg@sagian.com We cannot call noncontinuable_interrupt, because we are not allowed to perform a longjmp inside a signal handler; instead, we don't handle the signal, which will cause the process to terminate. */ -void S_register_scheme_signal(sig) iptr sig; { - S_error("register_scheme_signal", "unsupported in this version"); -} - static BOOL WINAPI handle_signal(DWORD dwCtrlType) { switch (dwCtrlType) { case CTRL_C_EVENT: @@ -538,6 +546,8 @@ #include static void handle_signal PROTO((INT sig, siginfo_t *si, void *data)); +static IBOOL enqueue_scheme_signal PROTO((ptr tc, INT sig)); +static ptr allocate_scheme_signal_queue PROTO((void)); static void forward_signal_to_scheme PROTO((INT sig)); #define RESET_SIGNAL {\ @@ -547,18 +557,88 @@ sigprocmask(SIG_UNBLOCK,&set,(sigset_t *)0);\ } +/* we buffer up to SIGNALQUEUESIZE - 1 unhandled signals, then start dropping them. */ +#define SIGNALQUEUESIZE 64 +static IBOOL scheme_signals_registered; + +/* we use a simple queue for pending signals. signals are enqueued only by the + C signal handler and dequeued only by the Scheme event handler. since the signal + handler and event handler run in the same thread, there's no need for locks + or write barriers. */ + +struct signal_queue { + INT head; + INT tail; + INT data[SIGNALQUEUESIZE]; +}; + +static IBOOL enqueue_scheme_signal(ptr tc, INT sig) { + struct signal_queue *queue = (struct signal_queue *)(SIGNALINTERRUPTQUEUE(tc)); + /* ignore the signal if we failed to allocate the queue */ + if (queue == NULL) return 0; + INT tail = queue->tail; + INT next_tail = tail + 1; + if (next_tail == SIGNALQUEUESIZE) next_tail = 0; + /* ignore the signal if the queue is full */ + if (next_tail == queue->head) return 0; + queue->data[tail] = sig; + queue->tail = next_tail; + return 1; +} + +ptr S_dequeue_scheme_signals(ptr tc) { + ptr ls = Snil; + struct signal_queue *queue = (struct signal_queue *)(SIGNALINTERRUPTQUEUE(tc)); + if (queue == NULL) return ls; + INT head = queue->head; + INT tail = queue->tail; + INT i = tail; + while (i != head) { + if (i == 0) i = SIGNALQUEUESIZE; + i -= 1; + ls = Scons(Sfixnum(queue->data[i]), ls); + } + queue->head = tail; + return ls; +} + static void forward_signal_to_scheme(sig) INT sig; { ptr tc = get_thread_context(); - SIGNALINTERRUPTPENDING(tc) = Sfixnum(sig); - SOMETHINGPENDING(tc) = Strue; + if (enqueue_scheme_signal(tc, sig)) { + SIGNALINTERRUPTPENDING(tc) = Strue; + SOMETHINGPENDING(tc) = Strue; + } RESET_SIGNAL } +static ptr allocate_scheme_signal_queue() { + /* silently fail to allocate space for signals if malloc returns NULL */ + struct signal_queue *queue = malloc(sizeof(struct signal_queue)); + if (queue != (struct signal_queue *)0) { + queue->head = queue->tail = 0; + } + return (ptr)queue; +} + +ptr S_allocate_scheme_signal_queue() { + return scheme_signals_registered ? allocate_scheme_signal_queue() : (ptr)0; +} + void S_register_scheme_signal(sig) iptr sig; { struct sigaction act; - sigemptyset(&act.sa_mask); + tc_mutex_acquire() + if (!scheme_signals_registered) { + ptr ls; + scheme_signals_registered = 1; + for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { + SIGNALINTERRUPTQUEUE(THREADTC(Scar(ls))) = S_allocate_scheme_signal_queue(); + } + } + tc_mutex_release() + + sigfillset(&act.sa_mask); act.sa_flags = 0; act.sa_handler = forward_signal_to_scheme; sigaction(sig, &act, (struct sigaction *)0); @@ -690,6 +770,9 @@ S_protect(&S_G.error_id); S_G.error_id = S_intern((const unsigned char *)"$c-error"); +#ifndef WIN32 + scheme_signals_registered = 0; +#endif } diff -Nru chezscheme-9.5+dfsg/c/segment.c chezscheme-9.5.4+dfsg/c/segment.c --- chezscheme-9.5+dfsg/c/segment.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/segment.c 2020-08-31 02:35:12.000000000 +0000 @@ -36,6 +36,7 @@ #include "sort.h" #include +static void out_of_memory PROTO((void)); static void initialize_seginfo PROTO((seginfo *si, ISPC s, IGEN g)); static seginfo *allocate_segments PROTO((uptr nreq)); static void expand_segment_table PROTO((uptr base, uptr end, seginfo *si)); @@ -51,9 +52,9 @@ S_chunks_full = NULL; for (i = PARTIAL_CHUNK_POOLS; i >= 0; i -= 1) S_chunks[i] = NULL; - for (s = 0; s <= max_real_space; s++) { - for (g = 0; g <= static_generation; g++) { - S_G.occupied_segments[s][g] = NULL; + for (g = 0; g <= static_generation; g++) { + for (s = 0; s <= max_real_space; s++) { + S_G.occupied_segments[g][s] = NULL; } } S_G.number_of_nonstatic_segments = 0; @@ -63,14 +64,16 @@ static uptr membytes = 0; static uptr maxmembytes = 0; +static void out_of_memory(void) { + (void) fprintf(stderr,"out of memory\n"); + S_abnormal_exit(); +} + #if defined(USE_MALLOC) void *S_getmem(iptr bytes, IBOOL zerofill) { void *addr; - if ((addr = malloc(bytes)) == (void *)0) { - (void) fprintf(stderr,"out of memory\n"); - S_abnormal_exit(); - } + if ((addr = malloc(bytes)) == (void *)0) out_of_memory(); debug(printf("getmem(%p) -> %p\n", bytes, addr)) if ((membytes += bytes) > maxmembytes) maxmembytes = membytes; @@ -86,24 +89,18 @@ #endif #if defined(USE_VIRTUAL_ALLOC) -#include +#include void *S_getmem(iptr bytes, IBOOL zerofill) { void *addr; if ((uptr)bytes < S_pagesize) { - if ((addr = malloc(bytes)) == (void *)0) { - (void) fprintf(stderr,"out of memory\n"); - S_abnormal_exit(); - } + if ((addr = malloc(bytes)) == (void *)0) out_of_memory(); debug(printf("getmem malloc(%p) -> %p\n", bytes, addr)) if ((membytes += bytes) > maxmembytes) maxmembytes = membytes; if (zerofill) memset(addr, 0, bytes); } else { uptr n = S_pagesize - 1; iptr p_bytes = (iptr)(((uptr)bytes + n) & ~n); - if ((addr = VirtualAlloc((void *)0, (SIZE_T)p_bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == (void *)0) { - (void) fprintf(stderr, "out of memory\n"); - S_abnormal_exit(); - } + if ((addr = VirtualAlloc((void *)0, (SIZE_T)p_bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == (void *)0) out_of_memory(); if ((membytes += p_bytes) > maxmembytes) maxmembytes = membytes; debug(printf("getmem VirtualAlloc(%p => %p) -> %p\n", bytes, p_bytes, addr)) } @@ -134,10 +131,7 @@ void *addr; if ((uptr)bytes < S_pagesize) { - if ((addr = malloc(bytes)) == (void *)0) { - (void) fprintf(stderr,"out of memory\n"); - S_abnormal_exit(); - } + if ((addr = malloc(bytes)) == (void *)0) out_of_memory(); debug(printf("getmem malloc(%p) -> %p\n", bytes, addr)) if ((membytes += bytes) > maxmembytes) maxmembytes = membytes; if (zerofill) memset(addr, 0, bytes); @@ -149,8 +143,7 @@ if ((addr = mmap(NULL, p_bytes, PROT_EXEC|PROT_WRITE|PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS|MAP_32BIT, -1, 0)) == (void *)-1) { #endif if ((addr = mmap(NULL, p_bytes, PROT_EXEC|PROT_WRITE|PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)) == (void *)-1) { - (void) fprintf(stderr,"out of memory\n"); - S_abnormal_exit(); + out_of_memory(); debug(printf("getmem mmap(%p) -> %p\n", bytes, addr)) } #ifdef MAP_32BIT @@ -228,7 +221,9 @@ si->space = s; si->generation = g; + si->sorted = 0; si->min_dirty_byte = 0xff; + si->trigger_ephemerons = NULL; for (d = 0; d < cards_per_segment; d += sizeof(ptr)) { iptr *dp = (iptr *)(si->dirty_bytes + d); /* fill sizeof(iptr) bytes at a time with 0xff */ @@ -261,9 +256,8 @@ chunk->nused_segs += 1; initialize_seginfo(si, s, g); - si->sorted = 0; - si->next = S_G.occupied_segments[s][g]; - S_G.occupied_segments[s][g] = si; + si->next = S_G.occupied_segments[g][s]; + S_G.occupied_segments[g][s] = si; S_G.number_of_empty_segments -= 1; return si->number; } @@ -296,11 +290,10 @@ S_move_to_chunk_list(chunk, &S_chunks[PARTIAL_CHUNK_POOLS-1]); } chunk->nused_segs += n; - nextsi->next = S_G.occupied_segments[s][g]; - S_G.occupied_segments[s][g] = si; + nextsi->next = S_G.occupied_segments[g][s]; + S_G.occupied_segments[g][s] = si; for (j = n, nextsi = si; j > 0; j -= 1, nextsi = nextsi->next) { initialize_seginfo(nextsi, s, g); - nextsi->sorted = 0; } S_G.number_of_empty_segments -= n; return si->number; @@ -322,8 +315,8 @@ for (nextsi = si; n > 0; n -= 1, nextsi += 1) { initialize_seginfo(nextsi, s, g); /* add segment to appropriate list of occupied segments */ - nextsi->next = S_G.occupied_segments[s][g]; - S_G.occupied_segments[s][g] = nextsi; + nextsi->next = S_G.occupied_segments[g][s]; + S_G.occupied_segments[g][s] = nextsi; } return si->number; } diff -Nru chezscheme-9.5+dfsg/c/segment.h chezscheme-9.5.4+dfsg/c/segment.h --- chezscheme-9.5+dfsg/c/segment.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/segment.h 2020-08-31 02:35:12.000000000 +0000 @@ -15,8 +15,10 @@ */ #ifdef WIN32 -#undef FORCEINLINE -#define FORCEINLINE static __forceinline +# ifndef __MINGW32__ +# undef FORCEINLINE +# define FORCEINLINE static __forceinline +# endif #else #define FORCEINLINE static inline #endif diff -Nru chezscheme-9.5+dfsg/c/statics.c chezscheme-9.5.4+dfsg/c/statics.c --- chezscheme-9.5+dfsg/c/statics.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/statics.c 2020-08-31 02:35:12.000000000 +0000 @@ -16,3 +16,8 @@ #define EXTERN #include "system.h" + +/* The C linker may require a reference to a function to pull in all + the common declarations. */ +#include "externs.h" +void scheme_statics() { } diff -Nru chezscheme-9.5+dfsg/c/stats.c chezscheme-9.5.4+dfsg/c/stats.c --- chezscheme-9.5+dfsg/c/stats.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/stats.c 2020-08-31 02:35:12.000000000 +0000 @@ -53,57 +53,76 @@ #include ptr S_unique_id() { - union {UUID uuid; INT foo[4];} u; - u.foo[0] = 0; - u.foo[1] = 0; - u.foo[2] = 0; - u.foo[3] = 0; - - UuidCreate(&u.uuid); - return S_add(S_ash(Sunsigned(u.foo[0]), Sinteger(8*3*sizeof(INT))), - S_add(S_ash(Sunsigned(u.foo[1]), Sinteger(8*2*sizeof(INT))), - S_add(S_ash(Sunsigned(u.foo[2]), Sinteger(8*sizeof(INT))), - Sunsigned(u.foo[3])))); + union {UUID uuid; U32 foo[4];} u; + u.foo[0] = 0; + u.foo[1] = 0; + u.foo[2] = 0; + u.foo[3] = 0; + UuidCreate(&u.uuid); + return S_add(S_ash(Sunsigned32(u.foo[0]), Sinteger(8*3*sizeof(U32))), + S_add(S_ash(Sunsigned32(u.foo[1]), Sinteger(8*2*sizeof(U32))), + S_add(S_ash(Sunsigned32(u.foo[2]), Sinteger(8*sizeof(U32))), + Sunsigned32(u.foo[3])))); } -#else /* WIN32 */ +#elif defined(USE_OSSP_UUID) /* WIN32 */ + +#include + +ptr S_unique_id() { + uuid_t *uuid; + U32 bin[4]; + void *bin_ptr = &bin; + size_t bin_len = sizeof(bin); -#include -#include -#include -#include -#include - -static INT gethostip(void) { - char hostname[MAXHOSTNAMELEN+1]; - struct hostent *h; - char **p; - struct in_addr in; - - if (gethostname(hostname, MAXHOSTNAMELEN)) return 0; - if ((h = gethostbyname(hostname)) == NULL) return 0; - p = h->h_addr_list; - if (*p == NULL) return 0; + uuid_create(&uuid); + uuid_make(uuid, UUID_MAKE_V4); + uuid_export(uuid, UUID_FMT_BIN, &bin_ptr, &bin_len); + uuid_destroy(uuid); - memcpy(&in.s_addr, *p, sizeof (in.s_addr)); - return in.s_addr; + return S_add(S_ash(Sunsigned32(bin[0]), Sinteger(8*3*sizeof(U32))), + S_add(S_ash(Sunsigned32(bin[1]), Sinteger(8*2*sizeof(U32))), + S_add(S_ash(Sunsigned32(bin[2]), Sinteger(8*sizeof(U32))), + Sunsigned32(bin[3])))); } +#elif defined(USE_NETBSD_UUID) /* USE_OSSP_UUID */ + +#include + +ptr S_unique_id() { + uuid_t uuid; + uint32_t status; + unsigned char bin[16]; + ptr n; + unsigned int i; + + uuid_create(&uuid, &status); + uuid_enc_le(bin, &uuid); + + n = Sinteger(0); + for (i = 0; i < sizeof(bin); i++) { + n = S_add(n, S_ash(Sinteger(bin[i]), Sinteger(8*i))); + } + + return n; +} + +#else /* USE_NETBSD_UUID */ + +#include + ptr S_unique_id() { - struct timeval tp; - time_t sec; - pid_t pid; - INT ip; - - (void) gettimeofday(&tp,NULL); - - pid = getpid(); - ip = gethostip(); - sec = tp.tv_sec; - - return S_add(S_ash(Sunsigned(pid), Sinteger(8*(sizeof(sec)+sizeof(ip)))), - S_add(S_ash(Sunsigned(ip), Sinteger(8*(sizeof(sec)))), - Sunsigned(sec))); + union {uuid_t uuid; U32 foo[4];} u; + u.foo[0] = 0; + u.foo[1] = 0; + u.foo[2] = 0; + u.foo[3] = 0; + uuid_generate(u.uuid); + return S_add(S_ash(Sunsigned32(u.foo[0]), Sinteger(8*3*sizeof(U32))), + S_add(S_ash(Sunsigned32(u.foo[1]), Sinteger(8*2*sizeof(U32))), + S_add(S_ash(Sunsigned32(u.foo[2]), Sinteger(8*sizeof(U32))), + Sunsigned32(u.foo[3])))); } #endif /* WIN32 */ @@ -234,7 +253,8 @@ #ifdef CLOCK_THREAD_CPUTIME_ID if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, tp) == 0) return; #endif - /* fall through to utc case in case no thread timer */ + /* fall through */ + /* to utc case in case no thread timer */ case time_process: #ifdef CLOCK_PROCESS_CPUTIME_ID if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, tp) == 0) return; @@ -264,7 +284,8 @@ #ifdef CLOCK_HIGHRES if (clock_gettime(CLOCK_HIGHRES, tp) == 0) return; #endif - /* fall through to utc case in case no monotonic timer */ + /* fall through */ + /* to utc case in case no monotonic timer */ case time_utc: #ifdef CLOCK_REALTIME_HR if (clock_gettime(CLOCK_REALTIME_HR, tp) == 0) return; @@ -409,7 +430,7 @@ tzoff = adjust_time_zone(dtvec, &tmx, given_tzoff); - if (tzoff != orig_tzoff) tx = (time_t) difftime(tx, (time_t)(orig_tzoff - tzoff)); + if (tzoff != orig_tzoff) tx = tx - orig_tzoff + tzoff; return Scons(S_integer_time_t(tx), Svector_ref(dtvec, dtvec_nsec)); } @@ -421,8 +442,7 @@ #ifdef WIN32 { TIME_ZONE_INFORMATION tz; - WCHAR *w_tzname; - int len; + wchar_t *w_tzname; /* The ...ForYear() function is available on Windows Vista and later: */ GetTimeZoneInformationForYear(tmxp->tm_year, NULL, &tz); @@ -436,10 +456,9 @@ } if (given_tzoff == Sfalse) { - len = (int)wcslen(w_tzname); - tz_name = S_string(NULL, len); - while (len--) - Sstring_set(tz_name, len, w_tzname[len]); + char *name = Swide_to_utf8(w_tzname); + tz_name = Sstring_utf8(name, -1); + free(name); } } #else @@ -447,10 +466,10 @@ if (given_tzoff == Sfalse) { # if defined(__linux__) || defined(SOLARIS) /* Linux and Solaris set `tzname`: */ - tz_name = S_string(tzname[tmxp->tm_isdst], -1); + tz_name = Sstring_utf8(tzname[tmxp->tm_isdst], -1); # else /* BSD variants add `tm_zone` in `struct tm`: */ - tz_name = S_string(tmxp->tm_zone, -1); + tz_name = Sstring_utf8(tmxp->tm_zone, -1); # endif } #endif @@ -498,7 +517,7 @@ void S_stats_init() { #ifdef WIN32 /* Use GetSystemTimePreciseAsFileTime when available (Windows 8 and later). */ - HMODULE h = LoadLibrary("kernel32.dll"); + HMODULE h = LoadLibraryW(L"kernel32.dll"); if (h != NULL) { GetSystemTimeAsFileTime_t proc = (GetSystemTimeAsFileTime_t)GetProcAddress(h, "GetSystemTimePreciseAsFileTime"); if (proc != NULL) diff -Nru chezscheme-9.5+dfsg/c/system.h chezscheme-9.5.4+dfsg/c/system.h --- chezscheme-9.5+dfsg/c/system.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/system.h 2020-08-31 02:35:12.000000000 +0000 @@ -17,18 +17,25 @@ #include "scheme.h" #include "equates.h" #ifdef FEATURE_WINDOWS +#ifdef __MINGW32__ +# undef WINVER +# undef _WIN32_WINNT +#endif +#define WINVER 0x0601 // Windows 7 +#define _WIN32_WINNT WINVER #include #endif #include "version.h" #include -#include "zlib.h" #include #include "thread.h" #include "types.h" +#include "compress-io.h" + #ifndef EXTERN #define EXTERN extern #endif diff -Nru chezscheme-9.5+dfsg/c/thread.c chezscheme-9.5.4+dfsg/c/thread.c --- chezscheme-9.5+dfsg/c/thread.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/thread.c 2020-08-31 02:35:12.000000000 +0000 @@ -95,6 +95,7 @@ TIMERTICKS(tc) = Sfalse; DISABLECOUNT(tc) = Sfixnum(0); SIGNALINTERRUPTPENDING(tc) = Sfalse; + SIGNALINTERRUPTQUEUE(tc) = S_allocate_scheme_signal_queue(); KEYBOARDINTERRUPTPENDING(tc) = Sfalse; TARGETMACHINE(tc) = S_intern((const unsigned char *)MACHINE_TYPE); @@ -104,6 +105,8 @@ VIRTREG(tc, i) = FIX(0); } + DSTBV(tc) = SRCBV(tc) = Sfalse; + /* S_thread had better not do thread-local allocation */ thread = S_thread(tc); @@ -121,6 +124,8 @@ GUARDIANENTRIES(tc) = Snil; + LZ4OUTBUFFER(tc) = NULL; + tc_mutex_release() return thread; @@ -143,6 +148,33 @@ } } +int S_activate_thread() { /* Like Sactivate_thread(), but returns a mode to revert the effect */ + ptr tc = get_thread_context(); + + if (tc == (ptr)0) { + Sactivate_thread(); + return unactivate_mode_destroy; + } else if (!ACTIVE(tc)) { + reactivate_thread(tc); + return unactivate_mode_deactivate; + } else + return unactivate_mode_noop; +} + +void S_unactivate_thread(int mode) { /* Reverts a previous S_activate_thread() effect */ + switch (mode) { + case unactivate_mode_deactivate: + Sdeactivate_thread(); + break; + case unactivate_mode_destroy: + Sdestroy_thread(); + break; + case unactivate_mode_noop: + default: + break; + } +} + void Sdeactivate_thread() { /* deactivate current thread */ ptr tc = get_thread_context(); if (tc != (ptr)0) deactivate_thread(tc) @@ -197,7 +229,10 @@ } } - free((void *)THREADTC(thread)); + if (LZ4OUTBUFFER(tc) != NULL) free(LZ4OUTBUFFER(tc)); + if (SIGNALINTERRUPTQUEUE(tc) != NULL) free(SIGNALINTERRUPTQUEUE(tc)); + + free((void *)tc); THREADTC(thread) = 0; /* mark it dead */ status = 1; break; @@ -334,11 +369,11 @@ #ifdef FEATURE_WINDOWS -static inline int s_thread_cond_timedwait(s_thread_cond_t *cond, s_thread_mutex_t *mutex, int typeno, long sec, long nsec) { +static inline int s_thread_cond_timedwait(s_thread_cond_t *cond, s_thread_mutex_t *mutex, int typeno, I64 sec, long nsec) { if (typeno == time_utc) { struct timespec now; S_gettime(time_utc, &now); - sec -= (long)now.tv_sec; + sec -= now.tv_sec; nsec -= now.tv_nsec; if (nsec < 0) { sec -= 1; @@ -349,7 +384,7 @@ sec = 0; nsec = 0; } - if (SleepConditionVariableCS(cond, mutex, sec*1000 + nsec/1000000)) { + if (SleepConditionVariableCS(cond, mutex, (DWORD)(sec*1000 + (nsec+500000)/1000000))) { return 0; } else if (GetLastError() == ERROR_TIMEOUT) { return ETIMEDOUT; @@ -360,12 +395,12 @@ #else /* FEATURE_WINDOWS */ -static inline int s_thread_cond_timedwait(s_thread_cond_t *cond, s_thread_mutex_t *mutex, int typeno, long sec, long nsec) { +static inline int s_thread_cond_timedwait(s_thread_cond_t *cond, s_thread_mutex_t *mutex, int typeno, I64 sec, long nsec) { struct timespec t; if (typeno == time_duration) { struct timespec now; S_gettime(time_utc, &now); - t.tv_sec = now.tv_sec + sec; + t.tv_sec = (time_t)(now.tv_sec + sec); t.tv_nsec = now.tv_nsec + nsec; if (t.tv_nsec >= 1000000000) { t.tv_sec += 1; @@ -387,7 +422,7 @@ s_thread_t self = s_thread_self(); iptr count; INT typeno; - long sec; + I64 sec; long nsec; INT status; @@ -400,8 +435,12 @@ if (t != Sfalse) { /* Keep in sync with ts record in s/date.ss */ typeno = Sinteger32_value(Srecord_ref(t,0)); - sec = Sinteger32_value(Scar(Srecord_ref(t,1))); + sec = Sinteger64_value(Scar(Srecord_ref(t,1))); nsec = Sinteger32_value(Scdr(Srecord_ref(t,1))); + } else { + typeno = 0; + sec = 0; + nsec = 0; } if (c == &S_collect_cond || DISABLECOUNT(tc) == 0) { diff -Nru chezscheme-9.5+dfsg/c/types.h chezscheme-9.5.4+dfsg/c/types.h --- chezscheme-9.5+dfsg/c/types.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/types.h 2020-08-31 02:35:12.000000000 +0000 @@ -80,9 +80,9 @@ * no space is left in the current segment. n is assumed to be * an integral multiple of the object alignment. */ #define find_room(s, g, t, n, x) {\ - ptr X = S_G.next_loc[s][g];\ - S_G.next_loc[s][g] = (ptr)((uptr)X + (n));\ - if ((S_G.bytes_left[s][g] -= (n)) < 0) X = S_find_more_room(s, g, n, X);\ + ptr X = S_G.next_loc[g][s];\ + S_G.next_loc[g][s] = (ptr)((uptr)X + (n));\ + if ((S_G.bytes_left[g][s] -= (n)) < 0) X = S_find_more_room(s, g, n, X);\ (x) = TYPE(X, t);\ } @@ -96,7 +96,7 @@ ptr _tc = tc;\ uptr _ap = (uptr)AP(_tc);\ if ((uptr)n > ((uptr)EAP(_tc) - _ap)) {\ - (x) = S_thread_get_more_room(t, n);\ + (x) = S_get_more_room_help(_tc, _ap, t, n);\ } else {\ (x) = TYPE(_ap,t);\ AP(_tc) = (ptr)(_ap + n);\ @@ -338,11 +338,23 @@ #define tc_mutex_release() {} #endif +#ifdef __MINGW32__ +/* With MinGW on 64-bit Windows, setjmp/longjmp is not reliable. Using + __builtin_setjmp/__builtin_longjmp is reliable, but + __builtin_longjmp requires 1 as its second argument. So, allocate + room in the buffer for a return value. */ +# define JMPBUF_RET(jb) (*(int *)((char *)(jb)+sizeof(jmp_buf))) +# define CREATEJMPBUF() malloc(sizeof(jmp_buf)+sizeof(int)) +# define FREEJMPBUF(jb) free(jb) +# define SETJMP(jb) (JMPBUF_RET(jb) = 0, __builtin_setjmp(jb), JMPBUF_RET(jb)) +# define LONGJMP(jb,n) (JMPBUF_RET(jb) = n, __builtin_longjmp(jb, 1)) +#else /* assuming malloc will give us required alignment */ -#define CREATEJMPBUF() malloc(sizeof(jmp_buf)) -#define FREEJMPBUF(jb) free(jb) -#define SETJMP(jb) _setjmp(jb) -#define LONGJMP(jb,n) _longjmp(jb, n) +# define CREATEJMPBUF() malloc(sizeof(jmp_buf)) +# define FREEJMPBUF(jb) free(jb) +# define SETJMP(jb) _setjmp(jb) +# define LONGJMP(jb,n) _longjmp(jb, n) +#endif #define DOUNDERFLOW\ &CODEIT(CLOSCODE(S_lookup_library_entry(library_dounderflow, 1)),size_rp_header) diff -Nru chezscheme-9.5+dfsg/c/version.h chezscheme-9.5.4+dfsg/c/version.h --- chezscheme-9.5+dfsg/c/version.h 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/version.h 2020-08-31 02:35:12.000000000 +0000 @@ -14,6 +14,8 @@ * limitations under the License. */ +#include "config.h" + #if (machine_type == machine_type_arm32le || machine_type == machine_type_tarm32le || machine_type == machine_type_arm64le || machine_type == machine_type_tarm64le) #if (machine_type == machine_type_tarm32le || machine_type == machine_type_tarm64le) #define PTHREADS @@ -34,7 +36,9 @@ #define LOCKF #define DIRMARKERP(c) ((c) == '/') #define FLUSHCACHE +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define LSEEK lseek64 #define OFF_T off64_t #define _LARGEFILE64_SOURCE @@ -67,7 +71,9 @@ #define LOCKF #define DIRMARKERP(c) ((c) == '/') #define FLUSHCACHE +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define LSEEK lseek64 #define OFF_T off64_t #define _LARGEFILE64_SOURCE @@ -100,7 +106,9 @@ typedef int tputsputcchar; #define LOCKF #define DIRMARKERP(c) ((c) == '/') +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define LSEEK lseek64 #define OFF_T off64_t #define _LARGEFILE64_SOURCE @@ -133,7 +141,9 @@ typedef int tputsputcchar; #define LOCKF #define DIRMARKERP(c) ((c) == '/') +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define SECATIME(sb) (sb).st_atimespec.tv_sec #define SECCTIME(sb) (sb).st_ctimespec.tv_sec #define SECMTIME(sb) (sb).st_mtimespec.tv_sec @@ -142,6 +152,7 @@ #define NSECMTIME(sb) (sb).st_mtimespec.tv_nsec #define ICONV_INBUF_TYPE char ** #define UNUSED __attribute__((__unused__)) +#define USE_OSSP_UUID #endif #if (machine_type == machine_type_i3nb || machine_type == machine_type_ti3nb || machine_type == machine_type_a6nb || machine_type == machine_type_ta6nb) @@ -159,12 +170,15 @@ #define ARCHYPERBOLIC #define GETPAGESIZE() getpagesize() typedef char *memcpy_t; +struct timespec; #define MAKE_NAN(x) { x = 0.0; x = x / x; } #define GETWD(x) getcwd((x),PATH_MAX) typedef int tputsputcchar; #define LOCKF #define DIRMARKERP(c) ((c) == '/') +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define SECATIME(sb) (sb).st_atimespec.tv_sec #define SECCTIME(sb) (sb).st_ctimespec.tv_sec #define SECMTIME(sb) (sb).st_mtimespec.tv_sec @@ -173,6 +187,8 @@ #define NSECMTIME(sb) (sb).st_mtimespec.tv_nsec #define ICONV_INBUF_TYPE const char ** #define UNUSED __attribute__((__unused__)) +#define USE_NETBSD_UUID +#define USE_MBRTOWC_L #endif #if (machine_type == machine_type_i3nt || machine_type == machine_type_ti3nt || machine_type == machine_type_a6nt || machine_type == machine_type_ta6nt) @@ -187,11 +203,18 @@ #define USE_VIRTUAL_ALLOC #define NAN_INCLUDE #define MAKE_NAN(x) { x = sqrt(-1.0); } -#define PATH_MAX _MAX_PATH +#ifndef PATH_MAX +# define PATH_MAX _MAX_PATH +#endif typedef char *memcpy_t; -#define _setjmp setjmp -#define _longjmp longjmp +struct timespec; +#ifndef __MINGW32__ +# define _setjmp setjmp +# define _longjmp longjmp +#endif +#ifndef __MINGW32__ #define ftruncate _chsize_s +#endif #define LOCK_SH 1 #define LOCK_EX 2 #define LOCK_NB 4 @@ -211,7 +234,6 @@ #define LSTAT S_windows_stat64 #define OFF_T __int64 #define OPEN S_windows_open -#define PUTENV _putenv #define READ _read #define RENAME S_windows_rename #define RMDIR S_windows_rmdir @@ -227,6 +249,7 @@ #define NSECCTIME(sb) 0 #define NSECMTIME(sb) 0 #define ICONV_INBUF_TYPE char ** +struct timespec; #define UNUSED #endif @@ -244,12 +267,15 @@ #define ARCHYPERBOLIC #define GETPAGESIZE() getpagesize() typedef char *memcpy_t; +struct timespec; #define MAKE_NAN(x) { x = 0.0; x = x / x; } #define GETWD(x) getcwd((x),PATH_MAX) typedef int tputsputcchar; #define LOCKF #define DIRMARKERP(c) ((c) == '/') +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define SECATIME(sb) (sb).st_atimespec.tv_sec #define SECCTIME(sb) (sb).st_ctimespec.tv_sec #define SECMTIME(sb) (sb).st_mtimespec.tv_sec @@ -258,6 +284,7 @@ #define NSECMTIME(sb) (sb).st_mtimespec.tv_nsec #define ICONV_INBUF_TYPE char ** #define UNUSED __attribute__((__unused__)) +#define USE_OSSP_UUID #endif #if (machine_type == machine_type_i3osx || machine_type == machine_type_ti3osx || machine_type == machine_type_a6osx || machine_type == machine_type_ta6osx) @@ -280,7 +307,9 @@ typedef int tputsputcchar; #define LOCKF #define DIRMARKERP(c) ((c) == '/') +#ifndef DISABLE_X11 #define LIBX11 "/usr/X11R6/lib/libX11.dylib" +#endif #define _DARWIN_USE_64_BIT_INODE #define SECATIME(sb) (sb).st_atimespec.tv_sec #define SECCTIME(sb) (sb).st_ctimespec.tv_sec @@ -347,7 +376,9 @@ typedef char tputsputcchar; #define LOCKF #define DIRMARKERP(c) ((c) == '/') +#ifndef DISABLE_X11 #define LIBX11 "libX11.so" +#endif #define SECATIME(sb) (sb).st_atim.tv_sec #define SECCTIME(sb) (sb).st_ctim.tv_sec #define SECMTIME(sb) (sb).st_mtim.tv_sec @@ -396,9 +427,6 @@ #ifndef OPEN # define OPEN open #endif -#ifndef PUTENV -# define PUTENV putenv -#endif #ifndef READ # define READ read #endif diff -Nru chezscheme-9.5+dfsg/c/vs.bat chezscheme-9.5.4+dfsg/c/vs.bat --- chezscheme-9.5+dfsg/c/vs.bat 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/vs.bat 2020-08-31 02:35:12.000000000 +0000 @@ -1,22 +1,42 @@ @echo off +set Applications=%ProgramFiles(x86)% +if not "%Applications%" == "" goto win64 +set Applications=%ProgramFiles% +:win64 :: Set up Visual Studio command line environment variables given a :: machine type, e.g., amd64 or x86. +:: Visual Studio 2019 Enterprise +set BATDIR=%Applications%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build +if exist "%BATDIR%\vcvarsall.bat" goto found + +:: Visual Studio 2019 Professional +set BATDIR=%Applications%\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build +if exist "%BATDIR%\vcvarsall.bat" goto found + +:: Visual Studio 2019 Community +set BATDIR=%Applications%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build +if exist "%BATDIR%\vcvarsall.bat" goto found + +:: Visual Studio 2019 BuildTools +set BATDIR=%Applications%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build +if exist "%BATDIR%\vcvarsall.bat" goto found + :: Visual Studio 2017 Enterprise -set BATDIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build +set BATDIR=%Applications%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build if exist "%BATDIR%\vcvarsall.bat" goto found :: Visual Studio 2017 Professional -set BATDIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build +set BATDIR=%Applications%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build if exist "%BATDIR%\vcvarsall.bat" goto found :: Visual Studio 2017 Community -set BATDIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build +set BATDIR=%Applications%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build if exist "%BATDIR%\vcvarsall.bat" goto found :: Visual Studio 2017 BuildTools -set BATDIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build +set BATDIR=%Applications%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build if exist "%BATDIR%\vcvarsall.bat" goto found :: Visual Studio 2015 diff -Nru chezscheme-9.5+dfsg/c/windows.c chezscheme-9.5.4+dfsg/c/windows.c --- chezscheme-9.5+dfsg/c/windows.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/c/windows.c 2020-08-31 02:35:12.000000000 +0000 @@ -21,11 +21,12 @@ #include #include +static ptr s_ErrorStringImp(DWORD dwMessageId, const char *lpcDefault); static ptr s_ErrorString(DWORD dwMessageId); static IUnknown *s_CreateInstance(CLSID *pCLSID, IID *iid); -static ptr s_GetRegistry(char *s); -static void s_PutRegistry(char *s, char *val); -static void s_RemoveRegistry(char *s); +static ptr s_GetRegistry(wchar_t *s); +static void s_PutRegistry(wchar_t *s, wchar_t *val); +static void s_RemoveRegistry(wchar_t *s); void S_machine_init() { Sregister_symbol("(com)CreateInstance", (void *)s_CreateInstance); @@ -42,109 +43,62 @@ } void *S_ntdlopen(const char *path) { - return (void *)LoadLibrary(path); + wchar_t *pathw = Sutf8_to_wide(path); + void *r = (void *)LoadLibraryW(pathw); + free(pathw); + return r; } void *S_ntdlsym(void *h, const char *s) { return (void *)GetProcAddress(h, s); } -/* S_ntdlerror courtesy of Bob Burger, burgerrg@sagian.com */ -char *S_ntdlerror(void) { - static char s[80]; - INT n; - - n = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), - 0, (LPTSTR)s, 80, NULL); - if (n == 0) return "unable to load library"; - /* Strip trailing period, newline & return when present */ - if (n >= 3 && s[n-3] == '.') s[n-3] = 0; - return s; +/* Initial version of S_ntdlerror courtesy of Bob Burger + * Modifications by James-Adam Renquinha Henri, jarhmander@gmail.com */ +ptr S_ntdlerror(void) { + return s_ErrorStringImp(GetLastError(), "unable to load library"); } #ifdef FLUSHCACHE oops, no S_flushcache_max_gap or S_doflush #endif /* FLUSHCACHE */ -static int strncasecmp(const char *s1, const char *s2, int n) { - while (n > 0) { - char c1 = *s1; char c2 = *s2; - - if (c1 == 0) return c2 == 0 ? 0 : -1; - if (c2 == 0) return 1; - - c1 = tolower(c1); - c2 = tolower(c2); - - if (c1 != c2) return c1 < c2 ? -1 : 1; - n -= 1; s1 += 1; s2 += 1; - } - return 0; -} - -static void SplitRegistryKey(char *who, char *wholekey, HKEY *key, char **subkey, char **last) { - char c, *s; +static void SplitRegistryKey(char *who, wchar_t *wholekey, HKEY *key, wchar_t **subkey, wchar_t **last) { + wchar_t c, *s; /* Determine the base key */ - if (strncasecmp(wholekey, "HKEY_CLASSES_ROOT\\", 18) == 0) { + if (_wcsnicmp(wholekey, L"HKEY_CLASSES_ROOT\\", 18) == 0) { *key = HKEY_CLASSES_ROOT; *subkey = wholekey+18; - } else if (strncasecmp(wholekey, "HKEY_CURRENT_USER\\", 18) == 0) { + } else if (_wcsnicmp(wholekey, L"HKEY_CURRENT_USER\\", 18) == 0) { *key = HKEY_CURRENT_USER; *subkey = wholekey+18; - } else if (strncasecmp(wholekey, "HKEY_LOCAL_MACHINE\\", 19) == 0) { + } else if (_wcsnicmp(wholekey, L"HKEY_LOCAL_MACHINE\\", 19) == 0) { *key = HKEY_LOCAL_MACHINE; *subkey = wholekey+19; - } else if (strncasecmp(wholekey, "HKEY_USERS\\", 11) == 0) { + } else if (_wcsnicmp(wholekey, L"HKEY_USERS\\", 11) == 0) { *key = HKEY_USERS; *subkey = wholekey+11; - } else if (strncasecmp(wholekey, "HKEY_CURRENT_CONFIG\\", 20) == 0) { + } else if (_wcsnicmp(wholekey, L"HKEY_CURRENT_CONFIG\\", 20) == 0) { *key = HKEY_CURRENT_CONFIG; *subkey = wholekey+20; - } else if (strncasecmp(wholekey, "HKEY_DYN_DATA\\", 14) == 0) { + } else if (_wcsnicmp(wholekey, L"HKEY_DYN_DATA\\", 14) == 0) { *key = HKEY_DYN_DATA; *subkey = wholekey+14; - } else - S_error1(who, "invalid registry key ~s", Sstring(wholekey)); - - for (*last = s = *subkey, c = *s; c != '\0'; c = *++s) - if (c == '\\') *last = s; -} - -/* could commonize portions of next two routines, but they're short. - * the first version takes a char * and returns the result in a buffer - * of fixed size. the second takes a char * and returns the result - * in a scheme string of the necessary size. the first returns - * (char *)0 on failure; the second returns Sfalse. */ -extern char *S_GetRegistry(char *buf, int bufsize, char *s) { - HKEY key, result; - char *subkey, *last; - DWORD rc, type, size; - - SplitRegistryKey("get-registry", s, &key, &subkey, &last); - - /* open the key */ - if (last == subkey) { - rc = RegOpenKeyEx(key, "", 0, KEY_QUERY_VALUE, &result); } else { - *last = '\0'; /* Truncate subkey at backslash */ - rc = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &result); - *last++ = '\\'; /* Restore backslash */ + char *wholekey_utf8 = Swide_to_utf8(wholekey); + ptr wholekey_scheme = Sstring_utf8(wholekey_utf8, -1); + free(wholekey_utf8); + S_error1(who, "invalid registry key ~s", wholekey_scheme); } - if (rc != ERROR_SUCCESS) return (char *)0; - - /* grab the data */ - size = bufsize - 1; /* leave room for trailing nul */ - rc = RegQueryValueEx(result, last, NULL, &type, buf, &size); - RegCloseKey(result); - buf[bufsize-1] = 0; /* nul may be missing if buffer just large enough */ - return rc != ERROR_SUCCESS ? (char *)0 : buf; + for (*last = s = *subkey, c = *s; c != '\0'; c = *++s) + if (c == '\\') *last = s; } -static ptr s_GetRegistry(char *s) { +static ptr s_GetRegistry(wchar_t *s) { HKEY key, result; - char *subkey, *last; + wchar_t *subkey, *last; DWORD rc, type, size; ptr ans; @@ -152,16 +106,16 @@ /* open the key */ if (last == subkey) { - rc = RegOpenKeyEx(key, "", 0, KEY_QUERY_VALUE, &result); + rc = RegOpenKeyExW(key, L"", 0, KEY_QUERY_VALUE, &result); } else { *last = '\0'; /* Truncate subkey at backslash */ - rc = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &result); + rc = RegOpenKeyExW(key, subkey, 0, KEY_QUERY_VALUE, &result); *last++ = '\\'; /* Restore backslash */ } if (rc != ERROR_SUCCESS) return Sfalse; /* Get the size of the value */ - rc = RegQueryValueEx(result, last, NULL, &type, NULL, &size); + rc = RegQueryValueExW(result, last, NULL, &type, NULL, &size); if (rc != ERROR_SUCCESS) { RegCloseKey(result); return Sfalse; @@ -171,86 +125,97 @@ ans = S_bytevector(size); /* Load up the bytevector */ - rc = RegQueryValueEx(result, last, NULL, &type, &BVIT(ans,0), &size); + rc = RegQueryValueExW(result, last, NULL, &type, &BVIT(ans,0), &size); RegCloseKey(result); if (rc != ERROR_SUCCESS) return Sfalse; - /* discard unwanted terminating null byte, if present */ - if ((type == REG_SZ) || (type == REG_EXPAND_SZ)) - BYTEVECTOR_TYPE(ans) = ((size-1) << bytevector_length_offset) | type_bytevector; + /* discard unwanted terminating null character, if present */ + if (((type == REG_SZ) || (type == REG_EXPAND_SZ)) && + (size >= 2) && + (*(wchar_t*)(&BVIT(ans, size-2)) == 0)) + BYTEVECTOR_TYPE(ans) = ((size-2) << bytevector_length_offset) | type_bytevector; return ans; } -static void s_PutRegistry(char *s, char *val) { +static void s_PutRegistry(wchar_t *s, wchar_t *val) { HKEY key, result; - char *subkey, *last; - DWORD rc, qrc, type, size; + wchar_t *subkey, *last; + DWORD rc, type; + size_t n = (wcslen(val) + 1) * sizeof(wchar_t); +#if (size_t_bits > 32) + if ((DWORD)n != n) { + char *s_utf8 = Swide_to_utf8(s); + ptr s_scheme = Sstring_utf8(s_utf8, -1); + free(s_utf8); + S_error2("put-registry!", "cannot set ~a (~a)", s_scheme, Sstring("too long")); + } +#endif SplitRegistryKey("put-registry!", s, &key, &subkey, &last); /* create/open the key */ if (last == subkey) { - rc = RegCreateKey(key, "", &result); + rc = RegCreateKeyExW(key, L"", 0, NULL, 0, KEY_SET_VALUE, NULL, &result, NULL); } else { *last = '\0'; /* Truncate subkey at backslash */ - rc = RegCreateKey(key, subkey, &result); + rc = RegCreateKeyExW(key, subkey, 0, NULL, 0, KEY_SET_VALUE, NULL, &result, NULL); *last++ = '\\'; /* Restore backslash */ } - /* lookup type for key (if it exists), if not assume REG_SZ */ if (rc == ERROR_SUCCESS) { - qrc = RegQueryValueEx(result, last, NULL, &type, NULL, &size); - if (qrc != ERROR_SUCCESS) type = REG_SZ; - } + /* lookup type for key (if it exists), if not assume REG_SZ */ + if (ERROR_SUCCESS != RegQueryValueExW(result, last, NULL, &type, NULL, NULL)) + type = REG_SZ; - if (rc == ERROR_SUCCESS) { - size_t n = strlen(val)+1; -#if (size_t_bits > 32) - if ((DWORD)n != n) { - RegCloseKey(result); - S_error2("put-registry!", "cannot set ~a (~a)", Sstring(s), Sstring("too long")); - } -#endif /* set the value */ - rc = RegSetValueEx(result, last, 0, type, val, (DWORD)n); + rc = RegSetValueExW(result, last, 0, type, (const BYTE*)val, (DWORD)n); RegCloseKey(result); } - if (rc != ERROR_SUCCESS) - S_error2("put-registry!", "cannot set ~a (~a)", Sstring(s), + if (rc != ERROR_SUCCESS) { + char *s_utf8 = Swide_to_utf8(s); + ptr s_scheme = Sstring_utf8(s_utf8, -1); + free(s_utf8); + S_error2("put-registry!", "cannot set ~a (~a)", s_scheme, rc == ERROR_FILE_NOT_FOUND ? Sstring("not found") : s_ErrorString(rc)); + } } -static void s_RemoveRegistry(char *s) { + +static void s_RemoveRegistry(wchar_t *s) { HKEY key, result; - char *subkey, *last; + wchar_t *subkey, *last; DWORD rc; SplitRegistryKey("remove-registry!", s, &key, &subkey, &last); /* open the key */ if (last == subkey) { - rc = RegOpenKeyEx(key, "", 0, KEY_ALL_ACCESS, &result); + rc = RegOpenKeyExW(key, L"", 0, KEY_ALL_ACCESS, &result); } else { *last = '\0'; /* Truncate subkey at backslash */ - rc = RegOpenKeyEx(key, subkey, 0, KEY_ALL_ACCESS, &result); + rc = RegOpenKeyExW(key, subkey, 0, KEY_ALL_ACCESS, &result); *last++ = '\\'; /* Restore backslash */ } if (rc == ERROR_SUCCESS) { /* delete the value */ - rc = RegDeleteValue(result, last); + rc = RegDeleteValueW(result, last); if (rc == ERROR_FILE_NOT_FOUND) /* value by given name not found; try deleting as key */ - rc = RegDeleteKey(result, last); + rc = RegDeleteKeyW(result, last); RegCloseKey(result); } - if (rc != ERROR_SUCCESS) - S_error2("remove-registry!", "cannot remove ~a (~a)", Sstring(s), + if (rc != ERROR_SUCCESS) { + char *s_utf8 = Swide_to_utf8(s); + ptr s_scheme = Sstring_utf8(s_utf8, -1); + free(s_utf8); + S_error2("remove-registry!", "cannot remove ~a (~a)", s_scheme, rc == ERROR_FILE_NOT_FOUND ? Sstring("not found") : rc == ERROR_ACCESS_DENIED ? Sstring("insufficient permission or subkeys exist") : s_ErrorString(rc)); + } } static IUnknown *s_CreateInstance(CLSID *pCLSID, IID *iid) { @@ -271,33 +236,48 @@ } static ptr s_ErrorString(DWORD dwMessageId) { - char *lpMsgBuf; + return s_ErrorStringImp(dwMessageId, NULL); +} + +static ptr s_ErrorStringImp(DWORD dwMessageId, const char *lpcDefault) { + wchar_t *lpMsgBuf; DWORD len; + char *u8str; ptr result; - len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, dwMessageId, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); - /* If FormatMessage fails, use the error code in hexadecimal. */ + len = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, dwMessageId, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&lpMsgBuf, 0, NULL); + /* If FormatMessage fails... */ if (len == 0) { -#define HEXERRBUFSIZ ((sizeof(dwMessageId) * 2) + 3) - char hexerrbuf[HEXERRBUFSIZ]; - snprintf(hexerrbuf, HEXERRBUFSIZ, "0x%x", dwMessageId); - return Sstring(hexerrbuf); -#undef HEXERRBUFSIZ + if (lpcDefault) { + /* ... use the default string if provided... */ + return Sstring_utf8(lpcDefault, -1); + } else { + /* ...otherwise, use the error code in hexadecimal. */ + char buf[(sizeof(dwMessageId) * 2) + 3]; + int n = snprintf(buf, sizeof(buf), "0x%x", dwMessageId); + if (n < sizeof(buf)) + return Sstring_utf8(buf, n); + else + return Sstring("??"); + } } - /* Otherwise remove trailing newlines & returns and strip trailing period. */ + /* Otherwise remove trailing newlines & returns and strip trailing period, if present. */ while (len > 0) { - char c = lpMsgBuf[len - 1]; - if (c == '\n' || c == '\r') + wchar_t c = lpMsgBuf[len - 1]; + if (c == L'\n' || c == '\r') len--; - else if (c == '.') { + else if (c == L'.') { len--; break; } else break; } - result = Sstring_of_length(lpMsgBuf, len); + lpMsgBuf[len] = 0; + u8str = Swide_to_utf8(lpMsgBuf); LocalFree(lpMsgBuf); + result = Sstring_utf8(u8str, -1); + free(u8str); return result; } @@ -336,7 +316,7 @@ } #endif -#include +#include /* primitive version of flock compatible with Windows 95/98/ME. A better version could be implemented for Windows NT/2000/XP using LockFileEx. */ @@ -410,8 +390,18 @@ wchar_t wpathname[PATH_MAX]; if (MultiByteToWideChar(CP_UTF8,0,pathname,-1,wpathname,PATH_MAX) == 0) return _rmdir(pathname); - else - return _wrmdir(wpathname); + else { + int rc; + if (!(rc = _wrmdir(wpathname))) { + // Spin loop until Windows deletes the directory. + int n; + for (n = 1000; n > 0; n--) { + if (_wrmdir(wpathname) && (errno == ENOENT)) break; + } + return 0; + } + return rc; + } } int S_windows_stat64(const char *pathname, struct STATBUF *buffer) { @@ -434,8 +424,18 @@ wchar_t wpathname[PATH_MAX]; if (MultiByteToWideChar(CP_UTF8,0,pathname,-1,wpathname,PATH_MAX) == 0) return _unlink(pathname); - else - return _wunlink(wpathname); + else { + int rc; + if (!(rc = _wunlink(wpathname))) { + // Spin loop until Windows deletes the file. + int n; + for (n = 1000; n > 0; n--) { + if (_wunlink(wpathname) && (errno == ENOENT)) break; + } + return 0; + } + return rc; + } } char *S_windows_getcwd(char *buffer, int maxlen) { @@ -454,3 +454,53 @@ } else return buffer; } + +char *Swide_to_utf8(const wchar_t *arg) { + int len = WideCharToMultiByte(CP_UTF8, 0, arg, -1, NULL, 0, NULL, NULL); + if (0 == len) return NULL; + char* arg8 = (char*)malloc(len * sizeof(char)); + if (0 == WideCharToMultiByte(CP_UTF8, 0, arg, -1, arg8, len, NULL, NULL)) { + free(arg8); + return NULL; + } + return arg8; +} + +wchar_t *Sutf8_to_wide(const char *arg) { + int len = MultiByteToWideChar(CP_UTF8, 0, arg, -1, NULL, 0); + if (0 == len) return NULL; + wchar_t* argw = (wchar_t*)malloc(len * sizeof(wchar_t)); + if (0 == MultiByteToWideChar(CP_UTF8, 0, arg, -1, argw, len)) { + free(argw); + return NULL; + } + return argw; +} + +char *Sgetenv(const char *name) { + wchar_t* wname; + DWORD n; + wchar_t buffer[256]; + wname = Sutf8_to_wide(name); + if (NULL == wname) return NULL; + n = GetEnvironmentVariableW(wname, buffer, 256); + if (n == 0) { + free(wname); + return NULL; + } else if (n <= 256) { + free(wname); + return Swide_to_utf8(buffer); + } else { + wchar_t* value = (wchar_t*)malloc(n * sizeof(wchar_t)); + if (0 == GetEnvironmentVariableW(wname, value, n)) { + free(wname); + free(value); + return NULL; + } else { + char* result = Swide_to_utf8(value); + free(wname); + free(value); + return result; + } + } +} diff -Nru chezscheme-9.5+dfsg/checkin chezscheme-9.5.4+dfsg/checkin --- chezscheme-9.5+dfsg/checkin 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/checkin 2020-08-31 02:35:12.000000000 +0000 @@ -62,7 +62,7 @@ endif endif -set tmpsdirs = (. c mats s examples unicode makefiles csug release_notes) +set tmpsdirs = (. c mats s examples unicode makefiles csug release_notes wininstall bintar rpm pkg) set sdirs = () foreach x ($tmpsdirs) if (!(-e $x)) then @@ -90,8 +90,6 @@ foreach x ($sdirs) switch ($x) case .: - (cd $W; /bin/rm -f petite.1 scheme.1) - (cd $W; /bin/rm -f Make.out) case unicode: case unicode/UNIDATA: case makefiles: @@ -103,7 +101,11 @@ case mats: case benchmarks: case examples: - (cd $W/$x; make clean > /dev/null) + case wininstall: + case bintar: + case rpm: + case pkg: + (cd $W/$x; make clean >& /dev/null) breaksw default: echo "checkin error: unexpected sdir $x" @@ -231,13 +233,6 @@ echo "" endif -foreach x ($bdirs) - set x = ./$x - if (!(-d $x)) then - mkdir -p $x || goto error - endif -end - set oldbfiles = () foreach x ($bfiles) if (-e $x) set oldbfiles = ($oldbfiles $x) @@ -291,6 +286,7 @@ @ n = $i + 4 endif echo -n "$x " + if (!(-e $x:h)) mkdir -p $x:h || goto error mv $W/$x $x || goto error end echo "" @@ -298,7 +294,7 @@ delete: -set tmpfiles = `(cd $W; find . -name zlib -prune -o -type f -print)` +set tmpfiles = `(cd $W; find . -name zlib -prune -o -name lz4 -prune -o -type f -print)` set files = () foreach x ($tmpfiles) set files = ($x $files) diff -Nru chezscheme-9.5+dfsg/configure chezscheme-9.5.4+dfsg/configure --- chezscheme-9.5+dfsg/configure 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/configure 2020-08-31 02:35:12.000000000 +0000 @@ -37,10 +37,29 @@ installschemename="scheme" installpetitename="petite" installscriptname="scheme-script" +disablex11=no +disablecurses=no : ${CC:="gcc"} : ${CPPFLAGS:=""} : ${CFLAGS:=""} +: ${LD:="ld"} : ${LDFLAGS:=""} +: ${AR:="ar"} +: ${ARFLAGS:="rc"} +: ${RANLIB:="ranlib"} +: ${WINDRES:="windres"} +zlibInc=-I../zlib +LZ4Inc=-I../lz4/lib +zlibDep=../zlib/libz.a +LZ4Dep=../lz4/lib/liblz4.a +zlibLib=../zlib/libz.a +LZ4Lib=../lz4/lib/liblz4.a +zlibHeaderDep="../zlib/zconf.h ../zlib/zlib.h" +LZ4HeaderDep="../lz4/lib/lz4.h ../lz4/lib/lz4frame.h" +Kernel=KernelO +installkerneltarget=installkernelobj +installzlibtarget= +installlz4target= # On WSL, set OS to "Windows_NT" to create a Windows # build instead of a Linux (on Windows) build: @@ -185,6 +204,14 @@ --installscriptname=*) installscriptname=`echo $1 | sed -e 's/^--installscriptname=//'` ;; + --toolprefix=*) + toolprefix=`echo $1 | sed -e 's/^--toolprefix=//'` + CC="${toolprefix}${CC}" + LD="${toolprefix}${LD}" + AR="${toolprefix}${AR}" + RANLIB="${toolprefix}${RANLIB}" + WINDRES="${toolprefix}${WINDRES}" + ;; --gzip-man-pages) gzipmanpages=yes ;; @@ -200,6 +227,28 @@ --help) help=yes ;; + --disable-x11) + disablex11=yes + ;; + --disable-curses) + disablecurses=yes + ;; + --libkernel) + Kernel=KernelLib + installkerneltarget=installkernellib + if [ "$zlibInc" != "" ]; then + installzlibtarget=installzlib + fi + if [ "$LZ4Inc" != "" ]; then + installlz4target=installlz4 + fi + ;; + --kernelobj) + Kernel=KernelO + installkerneltarget=installkernelobj + installzlibtarget= + installlz4target= + ;; CC=*) CC=`echo $1 | sed -e 's/^CC=//'` ;; @@ -209,9 +258,38 @@ CFLAGS=*) CFLAGS=`echo $1 | sed -e 's/^CFLAGS=//'` ;; + LD=*) + LD=`echo $1 | sed -e 's/^LD=//'` + ;; LDFLAGS=*) LDFLAGS=`echo $1 | sed -e 's/^LDFLAGS=//'` ;; + AR=*) + AR=`echo $1 | sed -e 's/^AR=//'` + ;; + ARFLAGS=*) + ARFLAGS=`echo $1 | sed -e 's/^ARFLAGS=//'` + ;; + RANLIB=*) + RANLIB=`echo $1 | sed -e 's/^RANLIB=//'` + ;; + WINDRES=*) + WINDRES=`echo $1 | sed -e 's/^WINDRES=//'` + ;; + ZLIB=*) + zlibLib=`echo $1 | sed -e 's/^ZLIB=//'` + zlibInc= + zlibDep= + zlibHeaderDep= + installzlibtarget= + ;; + LZ4=*) + LZ4Lib=`echo $1 | sed -e 's/^LZ4=//'` + LZ4Inc= + LZ4Dep= + LZ4HeaderDep= + installlz4target= + ;; *) echo "option '$1' unrecognized or missing an argument; try $0 --help" exit 1 @@ -256,6 +334,14 @@ installman=$installprefix/$installmansuffix fi +if [ "$disablex11" = "no" ] ; then + if [ $m = a6osx ] || [ $m = ta6osx ] ; then + if [ ! -d /opt/X11/include/ ] ; then + disablex11=yes + fi + fi +fi + if [ "$help" = "yes" ]; then echo "Purpose:" echo " $0 determines the machine type and constructs a custom Makefile" @@ -266,6 +352,10 @@ echo " -m= same as --machine ($m)" echo " --threads specify threaded version ($threads)" echo " --32|--64 specify 32/64-bit version ($bits)" + echo " --disable-x11 disable X11 support" + echo " --disable-curses disable [n]curses support" + echo " --libkernel build libkernel.a instead of kernel.o" + echo " --kernelobj build kernel.o (the default)" echo " --installprefix= final installation root ($installprefix)" echo " --installbin= bin directory ($installbin)" echo " --installlib= lib directory ($installlib)" @@ -276,11 +366,20 @@ echo " --installschemename= install with group ($installschemename)" echo " --installpetitename= install with group ($installpetitename)" echo " --installscriptname= install with group ($installscriptname)" + echo " --toolprefix= prefix tool (compiler, linker, ...) names" echo " --[no]gzip-man-pages compress manual pages ($gzipmanpages)" echo " --workarea= build directory ($w)" + echo " CC= C compiler" echo " CPPFLAGS= additional C preprocessor flags ($CPPFLAGS)" echo " CFLAGS= additional C compiler flags ($CFLAGS)" + echo " LD= linker" echo " LDFLAGS= additional linker flags ($LDFLAGS)" + echo " AR= archiver" + echo " ARFLAGS= archiver flags" + echo " RANLIB= archive indexer" + echo " WINDRES= resource compiler" + echo " ZLIB= link to instead of own zlib" + echo " LZ4= link to instead of own LZ4" echo "" echo "Available machine types: $machs" echo "" @@ -314,15 +413,27 @@ git submodule init && git submodule update || exit 1 else if [ ! -f 'nanopass/nanopass.ss' ] ; then - rmdir nanopass && (curl -L -o v1.9.tar.gz https://github.com/nanopass/nanopass-framework-scheme/archive/v1.9.tar.gz && tar -zxf v1.9.tar.gz && mv nanopass-framework-scheme-1.9 nanopass && rm v1.9.tar.gz) || exit 1 + rmdir nanopass > /dev/null 2>&1 + (curl -L -o v1.9.1.tar.gz https://github.com/nanopass/nanopass-framework-scheme/archive/v1.9.1.tar.gz && tar -zxf v1.9.1.tar.gz && mv nanopass-framework-scheme-1.9.1 nanopass && rm v1.9.1.tar.gz) || exit 1 fi - if [ ! -f 'zlib/configure' ] ; then - rmdir zlib && (curl -L -o v1.2.11.tar.gz https://github.com/madler/zlib/archive/v1.2.11.tar.gz && tar -xzf v1.2.11.tar.gz && mv zlib-1.2.11 zlib && rm v1.2.11.tar.gz) || exit 1 + if [ "${zlibDep}" != "" ] ; then + if [ ! -f 'zlib/configure' ] ; then + rmdir zlib > /dev/null 2>&1 + (curl -L -o v1.2.11.tar.gz https://github.com/madler/zlib/archive/v1.2.11.tar.gz && tar -xzf v1.2.11.tar.gz && mv zlib-1.2.11 zlib && rm v1.2.11.tar.gz) || exit 1 + fi + fi + + if [ "${LZ4Dep}" != "" ] ; then + if [ ! -f 'lz4/lib/Makefile' ] ; then + rmdir lz4 > /dev/null 2>&1 + (curl -L -o v1.9.2.tar.gz https://github.com/lz4/lz4/archive/v1.9.2.tar.gz && tar -xzf v1.9.2.tar.gz && mv lz4-1.9.2 lz4 && rm v1.9.2.tar.gz) || exit 1 + fi fi if [ ! -f 'stex/Mf-stex' ] ; then - rmdir stex && (curl -L -o v1.2.1.tar.gz https://github.com/dybvig/stex/archive/v1.2.1.tar.gz && tar -zxf v1.2.1.tar.gz && mv stex-1.2.1 stex && rm v1.2.1.tar.gz) || exit 1 + rmdir stex > /dev/null 2>&1 + (curl -L -o v1.2.2.tar.gz https://github.com/dybvig/stex/archive/v1.2.2.tar.gz && tar -zxf v1.2.2.tar.gz && mv stex-1.2.2 stex && rm v1.2.2.tar.gz) || exit 1 fi fi @@ -332,6 +443,12 @@ -e 's/$(workarea)/'$w'/g'\ makefiles/Makefile.in > Makefile +sed -e 's/$(m)/'$m'/g'\ + makefiles//Makefile-csug.in > csug/Makefile + +sed -e 's/$(m)/'$m'/g'\ + makefiles//Makefile-release_notes.in > release_notes/Makefile + cat makefiles/Makefile-workarea.in > $w/Makefile sed -e 's/$(m)/'$m'/g'\ @@ -339,7 +456,6 @@ makefiles/Mf-boot.in > $w/Mf-boot sed -e "s;^m=none\$;m=$m;"\ - -e "s;^InstallPrefix=.*\$;InstallPrefix=$installprefix;"\ -e "s;^InstallBin=.*\$;InstallBin=$installbin;"\ -e "s;^InstallLib=.*\$;InstallLib=$installlib;"\ -e "s;^InstallMan=.*\$;InstallMan=$installman/man1;"\ @@ -350,6 +466,9 @@ -e "s;^InstallSchemeName=.*$;InstallSchemeName=$installschemename;"\ -e "s;^InstallPetiteName=.*$;InstallPetiteName=$installpetitename;"\ -e "s;^InstallScriptName=.*$;InstallScriptName=$installscriptname;"\ + -e "s;^InstallKernelTarget=.*$;InstallKernelTarget=$installkerneltarget;"\ + -e "s;^InstallZlibTarget=.*$;InstallZlibTarget=$installzlibtarget;"\ + -e "s;^InstallLZ4Target=.*$;InstallLZ4Target=$installlz4target;"\ makefiles/Mf-install.in > $w/Mf-install cat > $w/c/config.h << END @@ -359,9 +478,40 @@ #endif END +if [ "$disablex11" = "yes" ]; then + echo '#define DISABLE_X11' >> $w/c/config.h +fi + +cursesLib=-lcurses +ncursesLib=-lncurses + +if [ "$disablecurses" = "yes" ]; then + echo '#define DISABLE_CURSES' >> $w/c/config.h + cursesLib= + ncursesLib= +fi + cat > $w/c/Mf-config << END CC=$CC CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS +LD=$LD LDFLAGS=$LDFLAGS +AR=$AR +ARFLAGS=$ARFLAGS +RANLIB=$RANLIB +WINDRES=$WINDRES +cursesLib=$cursesLib +ncursesLib=$ncursesLib +zlibInc=$zlibInc +LZ4Inc=$LZ4Inc +zlibDep=$zlibDep +LZ4Dep=$LZ4Dep +zlibLib=$zlibLib +LZ4Lib=$LZ4Lib +zlibHeaderDep=$zlibHeaderDep +LZ4HeaderDep=$LZ4HeaderDep +Kernel=\${${Kernel}} +KernelLinkDeps=\${${Kernel}LinkDeps} +KernelLinkLibs=\${${Kernel}LinkLibs} END diff -Nru chezscheme-9.5+dfsg/csug/binding.stex chezscheme-9.5.4+dfsg/csug/binding.stex --- chezscheme-9.5+dfsg/csug/binding.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/binding.stex 2020-08-31 02:35:12.000000000 +0000 @@ -49,7 +49,7 @@ in a library or RNRS top-level program unless the \scheme{scheme} library is included in the library or top-level programs imports. -These forms are described in Chatper~\ref{CHPTSYNTAX}. +These forms are described in Chapter~\ref{CHPTSYNTAX}. In Revised$^6$ Report Scheme, definitions can appear at the front of a \scheme{lambda} or similar body (e.g., a \scheme{let} or \scheme{letrec} @@ -66,8 +66,8 @@ The macro expander uses the same two-pass algorithm for expanding top-level \scheme{begin} expressions as it uses for a \scheme{lambda}, \scheme{library}, or top-level program body. -(This algorithm is described in Section~\ref{SECTSYNTAXDEFINITIONS} of {\TSPLFOUR}.) -As a result, +(This algorithm is described in Section~\ref{TSPL:SECTSYNTAXDEFINITIONS} of +{\TSPLFOUR}.) As a result, \schemedisplay (begin @@ -85,7 +85,7 @@ both result in the giving \scheme{x} the value 3, even though an unbound variable reference to \scheme{a} would result if -the two forms within the latter \scheme{begin} expression where run +the two forms within the latter \scheme{begin} expression were run independently at top level. Similarly, the \scheme{begin} form produced by a use of @@ -136,7 +136,7 @@ %---------------------------------------------------------------------------- \noskipentryheader -\formdef{define-values}{\categorysyntax}{(define-values formals \var{expr})} +\formdef{define-values}{\categorysyntax}{(define-values \var{formals} \var{expr})} \listlibraries \endnoskipentryheader diff -Nru chezscheme-9.5+dfsg/csug/compat.stex chezscheme-9.5.4+dfsg/csug/compat.stex --- chezscheme-9.5+dfsg/csug/compat.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/compat.stex 2020-08-31 02:35:12.000000000 +0000 @@ -23,7 +23,7 @@ describes \scheme{extend-syntax} macros. These features are supported directly by current versions of {\ChezScheme}, but support may be dropped in future versions. -New programs should use the standard mechanisms described in +New programs should use the standard mechanisms described in \emph{The Scheme Programming Language, 4th Edition}~\cite{Dybvig:tspl4} instead. diff -Nru chezscheme-9.5+dfsg/csug/control.stex chezscheme-9.5.4+dfsg/csug/control.stex --- chezscheme-9.5+dfsg/csug/control.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/control.stex 2020-08-31 02:35:12.000000000 +0000 @@ -93,7 +93,7 @@ [i 1] [ii 2] [iii 3] - [(iiii iv) 3] + [(iiii iv) 4] [else 'out-of-range])) ;=> 2 (define p @@ -287,7 +287,7 @@ When the optional \var{critical?} argument is present and non-false, the \var{in} thunk is invoked in a critical section along with the code that records that the body has been entered, and the \var{out} thunk is -invoked in a critical section section along with the code that records +invoked in a critical section along with the code that records that the body has been exited. Extreme caution must be taken with this form of \scheme{dynamic-wind}, since an error or long-running computation can leave interrupts diff -Nru chezscheme-9.5+dfsg/csug/copyright.stex chezscheme-9.5.4+dfsg/csug/copyright.stex --- chezscheme-9.5+dfsg/csug/copyright.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/copyright.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -% Copyright 2005-2017 Cisco Systems, Inc. +% Copyright 2005-2018 Cisco Systems, Inc. % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. @@ -16,13 +16,13 @@ \centerline{}\vfill -\textbf{\copyright~2005--2017 Cisco Systems, Inc.} +\textbf{\copyright~2020 Cisco Systems, Inc.} Licensed under the Apache License Version 2.0\\ http://www.apache.org/licenses/LICENSE-2.0 % NB: also update corresponding notice in csug.stex -Revised \INSERTREVISIONMONTHSPACEYEAR for Chez Scheme Version 9.5. +Revised \revisiondate~for Chez Scheme Version 9.5.4. \medskip\noindent Cisco and the Cisco logo are trademarks or registered trademarks diff -Nru chezscheme-9.5+dfsg/csug/csug.bib chezscheme-9.5.4+dfsg/csug/csug.bib --- chezscheme-9.5+dfsg/csug/csug.bib 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/csug.bib 2020-08-31 02:35:12.000000000 +0000 @@ -444,7 +444,7 @@ author = {Oscar Waddell and Dipanwita Sarkar and R. Kent Dybvig}, title = {Fixing Letrec: A Faithful Yet Efficient Implementation of {Scheme}'s Recursive Binding Construct}, -journal = {Higher-order and and symbolic computation}, +journal = {Higher-order and symbolic computation}, volume = 18, number = "3/4", pages = {299--326}, diff -Nru chezscheme-9.5+dfsg/csug/csug.stex chezscheme-9.5.4+dfsg/csug/csug.stex --- chezscheme-9.5+dfsg/csug/csug.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/csug.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -% Copyright 2005-2017 Cisco Systems, Inc. +% Copyright 2005-2018 Cisco Systems, Inc. % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. @@ -22,6 +22,8 @@ (case-sensitive #t) \endschemeinit +\def\revisiondate{August 2020} + \iflatex \usepackage{graphicx} \usepackage{color} @@ -41,10 +43,10 @@ \def\copyrightnotice{\raw{

Chez Scheme Version 9 User's Guide
-Copyright © 2017 Cisco Systems, Inc.
+Copyright © 2020 Cisco Systems, Inc.
Licensed under the Apache License Version 2.0 (full copyright notice.).
-Revised \INSERTREVISIONMONTHSPACEYEAR for Chez Scheme Version 9.5
+Revised} \revisiondate\raw{ for Chez Scheme Version 9.5.4
about this book }} diff -Nru chezscheme-9.5+dfsg/csug/expeditor.stex chezscheme-9.5.4+dfsg/csug/expeditor.stex --- chezscheme-9.5+dfsg/csug/expeditor.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/expeditor.stex 2020-08-31 02:35:12.000000000 +0000 @@ -120,7 +120,7 @@ \endentryheader The value of \scheme{ee-default-repeat} is a nonnegative fixnum -value that determines the number of of times the next command is +value that determines the number of times the next command is repeated after the \scheme{ee-command-repeat} editing command (bound to \scheme{Esc-^U} by default) is used and \emph{not} followed by a sequence of digits. diff -Nru chezscheme-9.5+dfsg/csug/foreign.stex chezscheme-9.5.4+dfsg/csug/foreign.stex --- chezscheme-9.5+dfsg/csug/foreign.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/foreign.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -% Copyright 2005-2017 Cisco Systems, Inc. +% Copyright 2005-2018 Cisco Systems, Inc. % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. @@ -192,8 +192,7 @@ %---------------------------------------------------------------------------- \entryheader -\formdef{foreign-procedure}{\categorysyntax}{(foreign-procedure \var{entry-exp} (\var{param-type} \dots) \var{res-type})} -\formdef{foreign-procedure}{\categorysyntax}{(foreign-procedure \var{conv} \var{entry-exp} (\var{param-type} \dots) \var{res-type})} +\formdef{foreign-procedure}{\categorysyntax}{(foreign-procedure \var{conv} \dots \var{entry-exp} (\var{param-type} \dots) \var{res-type})} \returns a procedure \listlibraries \endentryheader @@ -213,13 +212,15 @@ Multiple procedures may be created for the same \index{foreign entry}foreign entry. \label{page:conv-description}% -If \var{conv} is present, it specifies the calling convention to be used. -The default is \scheme{#f}, which specifies the default calling convention -on the target machine. -Three other conventions are currently supported, all only under -Windows: \scheme{__stdcall}, \scheme{__cdecl}, and \scheme{__com}. +Each \var{conv} adjusts specifies the calling convention to be used. +A \scheme{#f} is allowed as \var{conv} to indicate the default calling convention +on the target machine (so the \scheme{#f} has no effect). +Three other conventions are currently supported under +Windows: \scheme{__stdcall}, \scheme{__cdecl}, and \scheme{__com} (32-bit only). Since \scheme{__cdecl} is the default, specifying \scheme{__cdecl} is equivalent to specifying \scheme{#f} or no convention. +Finally, \var{conv} can be \scheme{__collect_safe} to indicate that garbage +collection is allowed concurrent to a call of the foreign procedure. Use \scheme{__stdcall} to access most Windows API procedures. Use \scheme{__cdecl} for Windows API varargs procedures, @@ -250,7 +251,38 @@ with the second argument being a double float and the return value being an integer. -Complete type checking and conversion is performed on the parameters. +Use \scheme{__collect_safe} to declare that garbage collection is +allowed concurrent to the foreign procedure. The +\scheme{__collect_safe} declaration allows concurrent collection by +deactivating the current thread (see \scheme{fork-thread}) when the +foreign procedure is called, and the thread is activated again when +the foreign procedure returns. The \scheme{__collect_safe} declaration +is useful, for example, when calling a blocking I/O call to allow +other Scheme threads to run normally. Refrain from passing collectable memory to a +\scheme{__collect_safe} foreign procedure, or use \scheme{lock-object} +to lock the memory in place; see also \scheme{Sdeactivate_thread}. The +\scheme{__collect_safe} declaration has no effect on a non-threaded +version of the system. + +For example, calling the C \scheme{sleep} function with the default +convention will block other Scheme threads from performing a garbage +collection, but adding the \scheme{__collect_safe} declaration avoids that +problem: + +\schemedisplay +(define c-sleep + (foreign-procedure __collect_safe "sleep" (unsigned) unsigned)) +(c-sleep 10) \var{; sleeps for 10 seconds without blocking other threads} +\endschemedisplay + +\noindent +If a foreign procedure that is called with \scheme{__collect_safe} can +invoke callables, then each callable should also be declared with +\scheme{__collect_safe} so that the callable reactivates the thread. + + +Complete type checking and conversion is performed on the parameters +to a foreign procedure. The types \index{\scheme{scheme-object}}\scheme{scheme-object}, \index{\scheme{string}}\scheme{string}, @@ -266,14 +298,29 @@ \index{\scheme{utf-32be}}\scheme{utf-32be}, must be used with caution, however, since they allow allocated Scheme objects to be used in places the Scheme memory management system -cannot control. -No problems will arise as long as such objects are not -retained in -foreign variables or data structures while Scheme code is running, -since garbage collection can occur only while Scheme code is running. -All other parameter types are converted to equivalent foreign -representations and consequently can be retained indefinitely in +cannot control. No problems will arise as long as such objects are not +retained in foreign variables or data structures while Scheme code is running, +and as long as they are not passed as arguments to a \scheme{__collect_safe} procedure, +since garbage collection can occur only while Scheme code is running +or when concurrent garbage collection is enabled. +Other parameter types are converted to equivalent foreign +representations and consequently they can be retained indefinitely in foreign variables and data structures. + +For argument types \scheme{string}, \scheme{wstring}, +\index{\scheme{utf-8}}\scheme{utf-8}, +\index{\scheme{utf-16le}}\scheme{utf-16le}, +\index{\scheme{utf-16be}}\scheme{utf-16be}, +\index{\scheme{utf-32le}}\scheme{utf-32le}, and +\index{\scheme{utf-32be}}\scheme{utf-32be}, an argument is converted +to a fresh object that is passed to the foreign procedure. Since the +fresh object is not accessible for locking before the call, it can +never be treated correctly for a \scheme{__collect_safe} foreign +procedure, so those types are disallowed as argument types for +a \scheme{__collect_safe} foreign procedure. For analogous reasons, +those types are disallowed as the result of a \scheme{__collect_safe} +foreign callable. + Following are the valid parameter types: \foreigntype{\scheme{integer-8}} @@ -509,8 +556,9 @@ bytevector is passed to C. The bytevector should not be retained in foreign variables or data structures, since the memory management system may relocate or discard -them between foreign procedure calls, and use their storage for some -other purpose. +them between foreign procedure calls and use their storage for some +other purpose. The \scheme{utf-8} argument type is not allowed for a +\scheme{__collect_safe} foreign procedure. \foreigntype{\scheme{utf-16le}} \index{\scheme{utf-16le}}Arguments of this type are treated like arguments @@ -550,12 +598,24 @@ \foreigntype{\scheme{(* \var{ftype})}} \index{ftype}This type allows a pointer to a foreign type (ftype) to be passed. -The argument must be an ftype pointer of with type \var{ftype}, +The argument must be an ftype pointer of type \var{ftype}, and the actual argument is the address encapsulated in the ftype pointer. See Section~\ref{SECTFOREIGNDATA} for a description of foreign types. +\foreigntype{\scheme{(& \var{ftype})}} +\index{ftype}This type allows a foreign +type (ftype) to be passed as a value, but represented +on the Scheme side as a pointer to the foreign-type data. +That is, a \scheme{(& \var{ftype})} argument is represented on +the Scheme side the same as a \scheme{(* \var{ftype})} argument, +but a \scheme{(& \var{ftype})} argument is passed to the foreign procedure as the +content at the foreign pointer's address instead of as the +address. For example, if \var{ftype} is a \scheme{struct} type, +then \scheme{(& \var{ftype})} passes a struct argument instead of +a struct-pointer argument. The \var{ftype} cannot refer to an array type. + \medskip\noindent The result types are similar to the parameter types with the addition of a \index{\scheme{void}}\scheme{void} type. @@ -814,6 +874,16 @@ See Section~\ref{SECTFOREIGNDATA} for a description of foreign types. +\foreigntype{\scheme{(& \var{ftype})}} +\index{ftype}The result is interpreted as a foreign object +whose structure is described by \var{ftype}, where the foreign +procedure returns a \var{ftype} result, but the caller +must provide an extra \scheme{(* \var{ftype})} argument before +all other arguments to receive the result. An unspecified Scheme object +is returned when the foreign procedure is called, since the result +is instead written into storage referenced by the extra argument. + The \var{ftype} cannot refer to an array type. + \medskip\noindent Consider a C identity procedure: \schemedisplay @@ -954,8 +1024,7 @@ %---------------------------------------------------------------------------- \entryheader -\formdef{foreign-callable}{\categorysyntax}{(foreign-callable \var{proc-exp} (\var{param-type} \dots) \var{res-type})} -\formdef{foreign-procedure}{\categorysyntax}{(foreign-callable \var{conv} \var{proc-exp} (\var{param-type} \dots) \var{res-type})} +\formdef{foreign-callable}{\categorysyntax}{(foreign-callable \var{conv} \dots \var{proc-exp} (\var{param-type} \dots) \var{res-type})} \returns a code object \listlibraries \endentryheader @@ -969,14 +1038,27 @@ e.g., the conversions described for \scheme{foreign-procedure} arguments are performed for \scheme{foreign-callable} return values. +A \scheme{(& \var{ftype})} argument to the callable refers to an address +that is valid only during the dynamic extent of the callback invocation. +A \scheme{(& \var{ftype})} result type for a callable causes the Scheme +procedure to receive an extra \scheme{(& \var{ftype})} argument before +all others; the Scheme procedure should write a result into the extra +argument, and the direct result of the Scheme procedure is ignored. Type checking is performed for result values but not argument values, since the parameter values are provided by the foreign code and must be assumed to be correct. -If \var{conv} is present, it specifies the calling convention to be used. +Each \var{conv} adjusts the calling convention to be used. \scheme{foreign-callable} supports the same conventions as \scheme{foreign-procedure} with the exception of \scheme{__com}. +The \scheme{__collect_safe} convention for a callable activates a +calling thread if the thread is not already activated, and +the thread's activation state is reverted when the callable +returns. If a calling thread is not currently registered with +the Scheme system, then reverting the thread's activation state implies +destroying the thread's registration (see \scheme{Sdestroy_thread}). + The value produced by \scheme{foreign-callable} is a Scheme code object, which contains some header information as well as code that performs @@ -1039,8 +1121,8 @@ callbacks[i] = (CB)0; } -void register_callback(char c, int cb) { - callbacks[c] = (CB)cb; +void register_callback(char c, CB cb) { + callbacks[c] = cb; } void event_loop(void) { @@ -1062,9 +1144,9 @@ (define cb-init (foreign-procedure "cb_init" () void)) (define register-callback - (foreign-procedure "register_callback" (char int) void)) + (foreign-procedure "register_callback" (char void*) void)) (define event-loop - (foreign-procedure "event_loop" () void)) + (foreign-procedure __collect_safe "event_loop" () void)) \endschemedisplay \noindent @@ -1073,7 +1155,7 @@ \schemedisplay (define callback (lambda (p) - (let ([code (foreign-callable p (char) void)]) + (let ([code (foreign-callable __collect_safe p (char) void)]) (lock-object code) (foreign-callable-entry-point code)))) (define ouch @@ -1107,7 +1189,10 @@ \endschemedisplay \noindent -A more well-behaved version of this example would save each code object +The \scheme{__collect_safe} declarations in this example ensure that +other threads can continue working while \scheme{event-loop} +blocks waiting for input. +A more well-behaved version of the example would save each code object returned by \scheme{foreign-callable} and unlock it when it is no longer registered as a callback. @@ -1412,8 +1497,7 @@ (array \var{length} \var{ftype}) (* \var{ftype}) (bits (\var{field-name} \var{signedness} \var{bits}) \dots) -(function (\var{ftype} \dots) \var{ftype}) -(function \var{conv} (\var{ftype} \dots) \var{ftype}) +(function \var{conv} \dots (\var{ftype} \dots) \var{ftype}) (packed \var{ftype}) (unpacked \var{ftype}) (endian \var{endianness} \var{ftype}) @@ -2720,6 +2804,7 @@ \cfunction{void}{Sscheme_init}{void (*\var{abnormal}_\var{exit})(void)} \cfunction{void}{Sset_verbose}{int \var{v}} \cfunction{void}{Sregister_boot_file}{const char *\var{name}} +\cfunction{void}{Sregister_boot_file_fd}{const char *\var{name}, int \var{fd}} \cfunction{void}{Sbuild_heap}{const char *\var{exec}, void (*\var{custom}_\var{init})(void)} \cfunction{void}{Senable_expeditor}{const char *\var{history}_\var{file}} \cfunction{void}{Sretain_static_relocation}{void} @@ -2752,9 +2837,11 @@ \scheme{Sregister_boot_file} searches for the named boot file and -register it for loading. -The file is opened but not loaded until the heap is built via -\scheme{Sbuild_heap}. +register it for loading, while \scheme{Sregister_boot_file_fd} +provides a specific boot file as a file descriptor. +When only a boot file name is provided, the file is opened but not loaded until the heap is built via +\scheme{Sbuild_heap}. When a file descriptor is provided, the given file name +is used only for error reporting. For the first boot file registered only, the system also searches for the boot files upon which the named file depends, either directly or indirectly. @@ -3007,6 +3094,7 @@ \cfunction{ptr}{Sflonum}{double x} \cfunction{ptr}{Sstring}{const char *\var{s}} \cfunction{ptr}{Sstring_of_length}{const char *\var{s}, iptr \var{n}} +\cfunction{ptr}{Sstring_utf8}{const char *\var{s}, iptr \var{n}}; \end{flushleft} \noindent @@ -3015,6 +3103,10 @@ and copies the first \var{n} bytes from \var{s} into the new Scheme string. +If the C string is encoded in UTF-8, use \scheme{Sstring_utf8} +instead. Specify the number of bytes to convert as \var{n} or use $-1$ +to convert until the null terminator. + It is possible to determine whether a C integer is within fixnum range by comparing the fixnum value of a fixnum created from a C integer with the C integer: @@ -3118,6 +3210,27 @@ \cfunction{ptr}{Smake_uninitialized_string}{iptr \var{n}} \end{flushleft} +\parheader{Windows-specific helper functions} +The following helper functions are provided on Windows only. + +\begin{flushleft} +\cfunction{char *}{Sgetenv}{const char *\var{name}} +\end{flushleft} + +\noindent +\scheme{Sgetenv} returns the UTF-8-encoded value of UTF-8-encoded +environment variable \var{name} if found and NULL otherwise. Call +\scheme{free} on the returned value when it is no longer needed. + +\begin{flushleft} +\cfunction{wchar_t *}{Sutf8_to_wide}{const char *\s} +\cfunction{char *}{Swide_to_utf8}{const wchar_t *\s} +\end{flushleft} + +\noindent +\scheme{Sutf8_to_wide} and \scheme{Swide_to_utf8} convert between +UTF-8-encoded and UTF-16LE-encoded null-terminated strings. Call +\scheme{free} on the returned value when it is no longer needed. \parheader{Accessing top-level values} Top-level variable bindings may be accessed or assigned via @@ -3402,16 +3515,18 @@ in the active state and need not be activated. Any thread that has been deactivated, and any thread created by some mechanism other than \scheme{fork-thread} must, -however, be activated before before it can access Scheme data or execute -Scheme code. -\scheme{Sactivate_thread} is used for this purpose. +however, be activated before it can access Scheme data or execute +Scheme code. A foreign callable that is declared with \scheme{__collect_safe} +can activate a calling thread. +Otherwise, \scheme{Sactivate_thread} must be used to activate a thread. It returns 1 the first time the thread is activated and 0 on each -subsequent call. +subsequent call until the activation is destroyed with \scheme{Sdestroy_thread}. Since active threads operating in C code prevent the storage management system from garbage collecting, -a thread should be deactivated via \scheme{Sdeactivate_thread} whenever -it may spend a significant amount of time in C code. +a thread should be deactivated via \scheme{Sdeactivate_thread} or +through a \scheme{foreign-procedure} \scheme{__collect_safe} declaration whenever +the thread may spend a significant amount of time in C code. This is especially important whenever the thread calls a C library function, like \scheme{read}, that may block indefinitely. Once deactivated, the thread must not touch any Scheme data or @@ -3473,12 +3588,14 @@ #include #include #include +#include /* c_write attempts to write the entire buffer, pushing through interrupts, socket delays, and partial-buffer writes */ -int c_write(int fd, char *buf, unsigned n) { - unsigned i, m; +int c_write(int fd, char *buf, ssize_t start, ssize_t n) { + ssize_t i, m; + buf += start; m = n; while (m > 0) { if ((i = write(fd, buf, m)) < 0) { @@ -3493,9 +3610,10 @@ } /* c_read pushes through interrupts and socket delays */ -int c_read(int fd, char *buf, unsigned n) { +int c_read(int fd, char *buf, size_t start, size_t n) { int i; + buf += start; for (;;) { i = read(fd, buf, n); if (i >= 0) return i; @@ -3529,17 +3647,17 @@ (void) strcpy(sun.sun_path, name); length = sizeof(sun.sun_family) + sizeof(sun.sun_path); - return bind(s, &sun, length); + return bind(s, (struct sockaddr*)(&sun), length); } /* do_accept accepts a connection on socket s */ int do_accept(int s) { struct sockaddr_un sun; - int length; + socklen_t length; length = sizeof(sun.sun_family) + sizeof(sun.sun_path); - return accept(s, &sun, &length); + return accept(s, (struct sockaddr*)(&sun), &length); } /* do_connect initiates a socket connection */ @@ -3551,7 +3669,7 @@ (void) strcpy(sun.sun_path, name); length = sizeof(sun.sun_family) + sizeof(sun.sun_path); - return connect(s, &sun, length); + return connect(s, (struct sockaddr*)(&sun), length); } /* get_error returns the operating system's error status */ @@ -3567,86 +3685,86 @@ ;;; socket.ss ;;; Requires csocket.so, built from csocket.c. -(case (machine-type) - [(i3le ti3le) (load-shared-object "libc.so.6")] - [(i3osx ti3osx) (load-shared-object "libc.dylib")] - [else (load-shared-object "libc.so")]) +(load-shared-object "./csocket.so") ;;; Requires from C library: ;;; close, dup, execl, fork, kill, listen, tmpnam, unlink -(load-shared-object "libc.so") +(case (machine-type) + [(i3le ti3le a6le ta6le) (load-shared-object "libc.so.6")] + [(i3osx ti3osx a6osx ta6osx) (load-shared-object "libc.dylib")] + [else (load-shared-object "libc.so")]) ;;; basic C-library stuff (define close - (foreign-procedure "close" (integer-32) - integer-32)) + (foreign-procedure "close" (int) + int)) (define dup - (foreign-procedure "dup" (integer-32) - integer-32)) + (foreign-procedure "dup" (int) + int)) (define execl4 - (let ([execl-help + (let ((execl-help (foreign-procedure "execl" - (string string string string integer-32) - integer-32)]) + (string string string string void*) + int))) (lambda (s1 s2 s3 s4) (execl-help s1 s2 s3 s4 0)))) (define fork (foreign-procedure "fork" () - integer-32)) + int)) (define kill - (foreign-procedure "kill" (integer-32 integer-32) - integer-32)) + (foreign-procedure "kill" (int int) + int)) (define listen - (foreign-procedure "listen" (integer-32 integer-32) - integer-32)) + (foreign-procedure "listen" (int int) + int)) (define tmpnam - (foreign-procedure "tmpnam" (integer-32) + (foreign-procedure "tmpnam" (void*) string)) (define unlink (foreign-procedure "unlink" (string) - integer-32)) + int)) ;;; routines defined in csocket.c (define accept - (foreign-procedure "do_accept" (integer-32) - integer-32)) + (foreign-procedure "do_accept" (int) + int)) (define bytes-ready? - (foreign-procedure "bytes_ready" (integer-32) + (foreign-procedure "bytes_ready" (int) boolean)) (define bind - (foreign-procedure "do_bind" (integer-32 string) - integer-32)) + (foreign-procedure "do_bind" (int string) + int)) (define c-error (foreign-procedure "get_error" () string)) (define c-read - (foreign-procedure "c_read" (integer-32 string integer-32) - integer-32)) + (foreign-procedure "c_read" (int u8* size_t size_t) + ssize_t)) (define c-write - (foreign-procedure "c_write" (integer-32 string integer-32) - integer-32)) + (foreign-procedure "c_write" (int u8* size_t ssize_t) + ssize_t)) (define connect - (foreign-procedure "do_connect" (integer-32 string) - integer-32)) + (foreign-procedure "do_connect" (int string) + int)) (define socket (foreign-procedure "do_socket" () - integer-32)) + int)) ;;; higher-level routines @@ -3656,7 +3774,7 @@ (lambda (old new) (check 'close (close old)) (unless (= (dup new) old) - (errorf 'dodup + (error 'dodup "couldn't set up child process io for fd ~s" old)))) (define dofork @@ -3667,7 +3785,7 @@ (cond [(= pid 0) (child)] [(> pid 0) (parent pid)] - [else (errorf 'fork (c-error))])))) + [else (error 'fork (c-error))])))) (define setup-server-socket ; create a socket, bind it to name, and listen for connections @@ -3691,11 +3809,11 @@ (check 'accept (accept sock)))) (define check - ; raise an exception if status x is negative, using c-error to + ; signal an error if status x is negative, using c-error to ; obtain the operating-system's error message (lambda (who x) (if (< x 0) - (errorf who (c-error)) + (error who (c-error)) x))) (define terminate-process diff -Nru chezscheme-9.5+dfsg/csug/intro.stex chezscheme-9.5.4+dfsg/csug/intro.stex --- chezscheme-9.5+dfsg/csug/intro.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/intro.stex 2020-08-31 02:35:12.000000000 +0000 @@ -13,15 +13,12 @@ % limitations under the License. \chapter{Introduction} -{\ChezScheme} is an implementation of the Revised$^6$ Report on -Scheme~\cite{r6rs} (R6RS) with numerous language and programming environment -extensions. - -This book describes these extensions in detail. +This book describes {\ChezScheme} extensions to the Revised$^6$ +Report on Scheme~\cite{r6rs} (R6RS). It contains as well a concise summary of standard and {\ChezScheme} forms and procedures, which gives the syntax of each form and the number and types of arguments accepted by each procedure. -Details on standard Scheme features can be found in +Details on standard R6RS features can be found in \index{The Scheme Programming Language, 4th Edition@\emph{The Scheme Programming Language, 4th Edition}}\hyperlink{http://www.scheme.com/tspl4/}{\emph{The Scheme Programming Language, 4th Edition}} (TSPL4)~\cite{Dybvig:tspl4} or the Revised$^6$ Report on Scheme. @@ -96,11 +93,12 @@ \bigskip\noindent \emph{Acknowledgments:} Michael Adams, Mike Ashley, Carl Bruggeman, Bob Burger, Sam -Daniel, George Davidson, Aziz Ghuloum, Bob Hieb, Andy Keep, and Oscar Waddell have +Daniel, George Davidson, Matthew Flatt, Aziz Ghuloum, Bob Hieb, Andy Keep, and Oscar Waddell have contributed substantially to the development of {\ChezScheme}. {\ChezScheme}'s expression editor is based on a command-line editor for Scheme developed from 1989 through 1994 by C.~David Boyer. -File compression is performed with the use of the zlib compression library +File compression is performed with the use of the lz4 compression +library developed by Yann Collet or the zlib compression library developed by Jean-loup Gailly and Mark Adler. Implementations of the list and vector sorting routines are based on Olin Shiver's opportunistic merge-sort algorithm and implementation. @@ -134,7 +132,7 @@ Second, the single-character sequences \scheme{\schlbrace} and \scheme{\schrbrace} are identifiers. Third, identifiers containing arbitrary characters may be printed by -escaping them them with \scheme{\} or with \scheme{|}. +escaping them with \scheme{\} or with \scheme{|}. \scheme{\} is used to escape a single character (except 'x', since \scheme{\x} marks the start of a hex scalar value), whereas \scheme{|} is used @@ -142,7 +140,7 @@ matching \scheme{|}. For example, \scheme{\||\|} is an identifier with a two-character name consisting of the character \scheme{|} followed by the -the character \scheme{\}, and \scheme{|hit me!|} is an identifier whose name +character \scheme{\}, and \scheme{|hit me!|} is an identifier whose name contains a space. In addition, gensyms (page~\ref{desc:gensym}) are printed with diff -Nru chezscheme-9.5+dfsg/csug/io.stex chezscheme-9.5.4+dfsg/csug/io.stex --- chezscheme-9.5+dfsg/csug/io.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/io.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -% Copyright 2005-2017 Cisco Systems, Inc. +% Copyright 2005-2018 Cisco Systems, Inc. % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. @@ -207,7 +207,11 @@ \begin{description} \item[\var{compressed}:] An output file should be compressed when written; and a compressed input -file should be decompressed when read. +file should be decompressed when read. The compression format for output +is determined by the \index{\scheme{compress-format}}\scheme{compress-format} +parameter, while the compression format on input is inferred. +The compression level, which is relevant only for output, is determined +by the \index{\scheme{compress-level}}\scheme{compress-level} parameter. \item[\var{replace}:] For output files only, replace (remove and recreate) the existing file if @@ -309,8 +313,8 @@ \var{endianness} must be the symbol \scheme{big} or the symbol \scheme{little}. -The codec returned by \scheme{utf-16-codec} can be used to create -process data written UFT-16 format. +The codec returned by \scheme{utf-16-codec} can be used to create and +process data written UTF-16 format. When called without the \var{endianness} argument or with \var{endianness} \scheme{big}, \scheme{utf-16-codec} returns a codec for standard UTF-16 data, i.e., one that defaults to big-endian format if no byte-order mark @@ -670,7 +674,7 @@ \endentryheader \noindent -When When \var{obj} is \scheme{#f}, the port's beginning-of-line (BOL) +When \var{obj} is \scheme{#f}, the port's beginning-of-line (BOL) flag is cleared; otherwise, the port's BOL flag is set. The BOL flag is consulted by \scheme{fresh-line} @@ -972,8 +976,55 @@ will be compressed. If the port is an input port, subsequent input will be decompressed if and only if the port is currently pointing at compressed data. +The compression format for output +is determined by the \index{\scheme{compress-format}}\scheme{compress-format} +parameter, while the compression format on input is inferred. +The compression level, which is relevant only for output, is determined +by the \index{\scheme{compress-level}}\scheme{compress-level} parameter. This procedure has no effect if the port is already set for compression. +%---------------------------------------------------------------------------- +\entryheader +\formdef{compress-format}{\categorythreadparameter}{compress-format} +\listlibraries +\endnoskipentryheader + +\noindent +\scheme{compress-format} determines the +compression algorithm and format used for output. Currently, +the possible values of the parameter are the symbols \scheme{lz4} (the default) +and \scheme{gzip}. + +The \scheme{lz4} format uses the LZ4 compression library developed by +Yann Collet. +It is therefore compatible with the \scheme{lz4} program, which +means that \scheme{lz4} may be used to uncompress files produced +by {\ChezScheme} and visa versa. + +The \scheme{gzip} format uses the zlib compression library developed by +Jean-loup Gailly and Mark Adler. +It is therefore compatible with the \scheme{gzip} program, which +means that \scheme{gzip} may be used to uncompress files produced +by {\ChezScheme} and visa versa. + +Reading \scheme{lz4}-compressed data tends to be much faster than reading +\scheme{gzip}-compressed data, while \scheme{gzip}-compressed data tends to +be significantly smaller. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{compress-level}{\categorythreadparameter}{compress-level} +\listlibraries +\endnoskipentryheader + +\noindent +\scheme{compress-level} determines the amount of effort spent on +compression and is thus relevant only for output. +It can be set to one of the symbols \scheme{minimum}, \scheme{low}, +\scheme{medium}, \scheme{high}, or \scheme{maximum}, which are +listed in order from shortest to longest expected compression time +and least to greatest expected effectiveness. +Its default value is \scheme{medium}. \section{String Ports\label{SECTIOSTRINGPORTS}} @@ -1091,7 +1142,7 @@ a new string output port during the application of \var{thunk}. If \var{thunk} returns, the string associated with the new string output -port is returned, as with \scheme{get-output-from-string}. +port is returned, as with \scheme{get-output-string}. \schemedisplay (with-output-to-string @@ -1224,7 +1275,8 @@ The mutually exclusive \scheme{compressed} and \scheme{uncompressed} options determine whether the input file -should be decompressed if it is compressed. +should be decompressed if it is compressed (where the compression +format is inferred). (See \scheme{open-output-file}.) The default is \scheme{uncompressed}, so the \scheme{uncompressed} option is useful only as documentation. @@ -1359,11 +1411,7 @@ transcoder, and this procedure returns a textual input port whose transcoder is \var{?transcoder}. Otherwise, this procedure returns a binary input port. -The buffer mode \var{b-mode} defaults to \scheme{block}, which differs from -\scheme{block} in {\ChezScheme} only for textual output ports. -See the lead-in to Section~\ref{TSPL:SECTOPENINGFILES} of {\TSPLFOUR} -for a description of the constraints on and effects of the other -arguments. +The buffer mode \var{b-mode} defaults to \scheme{block}. The Revised$^6$ Report version of this procedure does not accept the optional \var{b-mode} and \var{?transcoder} arguments, which limits @@ -1594,11 +1642,17 @@ \entryheader \formdef{read-token}{\categoryprocedure}{(read-token)} \formdef{read-token}{\categoryprocedure}{(read-token \var{textual-input-port})} +\formdef{read-token}{\categoryprocedure}{(read-token \var{textual-input-port} \var{sfd} \var{bfp})} \returns see below \listlibraries \endentryheader \noindent +\var{sfd} must be a source-file descriptor. +\var{bfp} must be an exact nonnegative integer and should be the +character position of the next character to be read from +\var{textual-input-port}. + Parsing of a Scheme datum is conceptually performed in two steps. First, the sequence of characters that form the datum are grouped into \scheme{tokens}, such as symbols, numbers, left parentheses, and @@ -1623,13 +1677,18 @@ \item[\var{value}:] the token value, \item[\var{start}:] the position of the first character of the token, -relative to the starting position of the input port, and +relative to the starting position of the input port (or \scheme{#f}, +if the position cannot be determined), and \item[\var{end}:] the first position beyond the token, -relative to the starting position of the input port. +relative to the starting position of the input port (or \scheme{#f}, +if the position cannot be determined). \end{description} \noindent +The input port is left pointing to the first character position beyond +the token. + When the token type fully specifies the token, \scheme{read-token} returns \scheme{#f} for the value. The token types are listed below with the corresponding \var{value} @@ -1667,8 +1726,18 @@ The set of token types is likely to change in future releases of the system; check the release notes for details on such changes. -The input port is left pointing to the first character position beyond -the token, i.e., \var{end} characters from the starting position. +Specifying \var{sfd} and \var{bfp} improves the quality of error messages, +guarantees \var{start} and \var{end} can be determined, +and eliminates the overhead of asking for a file position on each call +to \scheme{read-token}. +In most cases, \var{bfp} should be 0 for the first call +to \scheme{read-token} at the start of a file, +and it should be the fourth return value (\var{end}) of the preceding +call to \scheme{read-token} for each subsequent +call. +This protocol is necessary to handle files containing multiple-byte +characters, since file positions do not necessarily correspond +to character positions. \schemedisplay (define s (open-input-string "(a b c)")) @@ -1832,12 +1901,11 @@ The mutually exclusive \scheme{compressed} and \scheme{uncompressed} options determine whether the output file is to be compressed. -Compression is performed with the use of the -zlib compression library developed by -Jean-loup Gailly and Mark Adler. -It is therefore compatible with the \scheme{gzip} program, which -means that \scheme{gzip} may be used to uncompress files produced -by {\ChezScheme} and visa versa. +The compression format and level are determined by the +\index{\scheme{compress-format}}\scheme{compress-format} +and +\index{\scheme{compress-level}}\scheme{compress-level} +parameters. Files are uncompressed by default, so the \scheme{uncompressed} option is useful only as documentation. @@ -1985,9 +2053,6 @@ Otherwise, this procedure returns a binary output port. The buffer mode \var{b-mode} defaults to \scheme{line}, which differs from \scheme{block} in {\ChezScheme} only for textual output ports. -See the lead-in to Section~\ref{TSPL:SECTOPENINGFILES} of {\TSPLFOUR} -for a description of the constraints on and effects of the other -arguments. The Revised$^6$ Report version of this procedure does not accept the optional \var{b-mode} and \var{?transcoder} arguments, which limits @@ -2555,7 +2620,7 @@ Characters are copied from \var{format-string} to the output string from left to right, until \var{format-string} is exhausted. The format string may contain one or more \var{format directives}, which are -multi-character sequences prefixed by a a tilde (~\scheme{~}~). +multi-character sequences prefixed by a tilde (~\scheme{~}~). Each directive is replaced by some other text, often involving one or more of the \scheme{\var{obj} \dots} arguments, as determined by the semantics of the directive. @@ -3314,7 +3379,6 @@ %---------------------------------------------------------------------------- \entryheader \formdef{fasl-write}{\categoryprocedure}{(fasl-write \var{obj} \var{binary-output-port})} -\formdef{fasl-read}{\categoryprocedure}{(fasl-read \var{binary-input-port})} \returns unspecified \listlibraries \endentryheader @@ -3326,11 +3390,62 @@ \var{obj} or any portion of \var{obj} has no external fasl representation, e.g., if \var{obj} is or contains a procedure. +The fasl representation of \var{obj} is compressed if the parameter +\scheme{fasl-compressed}, described below, is set to \scheme{#t}, +its default value. +For this reason, \var{binary-output-port} generally should not be opened +with the compressed option. +A warning is issued (an exception with condition type \scheme{&warning} +is raised) on the first attempt to write fasl objects to or read +fasl objects from a compressed file. + +\schemedisplay +(define bop (open-file-output-port "tmp.fsl")) +(fasl-write '(a b c) bop) +(close-port bop) + +(define bip (open-file-input-port "tmp.fsl")) +(fasl-read bip) ;=> (a b c) +(fasl-read bip) ;=> #!eof +(close-port bip) +\endschemedisplay + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{fasl-read}{\categoryprocedure}{(fasl-read \var{binary-input-port})} +\formdef{fasl-read}{\categoryprocedure}{(fasl-read \var{binary-input-port \var{situation}})} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +If present, \var{situation} must be one of the symbols \scheme{load}, +\scheme{visit}, or \scheme{revisit}. +It defaults to \scheme{load}. + \scheme{fasl-read} reads one object from \var{binary-input-port}, which must be positioned at the front of an object written in fasl format. \scheme{fasl-read} returns the eof object if the file is positioned at the end of file. +If the situation is \scheme{visit}, \scheme{fasl-read} skips over +any revisit (run-time-only) objects, and +if the situation is \scheme{revisit}, \scheme{fasl-read} skips over +any visit (compile-time-only) objects. +It doesn't skip any if the situation is \scheme{load}. +Similarly, objects marked as both visit and revisit (e.g., object code +corresponding to source code within an \scheme{eval-when} form with +situation \scheme{load} or situations \scheme{visit} and \scheme{revisit}) +are never skipped. + +\scheme{fasl-read} automatically decompresses the representation +of each fasl object written in compressed format by \scheme{fasl-write}. +Thus, \var{binary-input-port} generally should not be opened with +the compressed option. +A warning is issued (an exception with condition type \scheme{&warning} +is raised) on the first attempt to write fasl objects to or read +fasl objects from a compressed file. \schemedisplay (define bop (open-file-output-port "tmp.fsl")) @@ -3343,6 +3458,23 @@ (close-port bip) \endschemedisplay +%---------------------------------------------------------------------------- +\entryheader +\formdef{fasl-compressed}{\categorythreadparameter}{fasl-compressed} +\listlibraries +\endentryheader + +\noindent +When this parameter is set to its default value, \scheme{#t}, +\scheme{fasl-write} compresses the representation of each object +as it writes it, often resulting in substantially smaller output +but possibly taking more time to write and read. +The compression format and level are determined by the +\index{\scheme{compress-format}}\scheme{compress-format} +and +\index{\scheme{compress-level}}\scheme{compress-level} +parameters. + %---------------------------------------------------------------------------- \entryheader @@ -3661,8 +3793,8 @@ The path root component is the portion of \var{path} that does not include the extension, if any, or the dot that precedes it. -If the first component names a root directory (including drivers -and shared under Windows) or home directory, +If the first component names a root directory (including drives +and shares under Windows) or home directory, \scheme{path-absolute?} returns \scheme{#t}. Otherwise, \scheme{path-absolute?} returns \scheme{#f}. @@ -3687,9 +3819,9 @@ \begin{tabular}{llllllll} path & abs & first & rest & parent & last & root & ext \\ -\scheme{c:} & \scheme{#t} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} \\ +\scheme{c:} & \scheme{#f} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} \\ \scheme{c:/} & \scheme{#t} & \scheme{c:/} & \scheme{_} & \scheme{c:/} & \scheme{_} & \scheme{c:/} & \scheme{_} \\ -\scheme{c:a/b} & \scheme{#t} & \scheme{c:} & \scheme{a/b} & \scheme{c:a} & \scheme{b} & \scheme{c:a/b} & \scheme{_} \\ +\scheme{c:a/b} & \scheme{#f} & \scheme{c:} & \scheme{a/b} & \scheme{c:a} & \scheme{b} & \scheme{c:a/b} & \scheme{_} \\ \scheme{//s/a/b.c} & \scheme{#t} & \scheme{//s} & \scheme{a/b.c} & \scheme{//s/a} & \scheme{b.c} & \scheme{//s/a/b} & \scheme{c} \\ \scheme{//s.com} & \scheme{#t} & \scheme{//s.com} & \scheme{_} & \scheme{//s.com} & \scheme{_} & \scheme{//s.com} & \scheme{_} \\ \end{tabular} diff -Nru chezscheme-9.5+dfsg/csug/libraries.stex chezscheme-9.5.4+dfsg/csug/libraries.stex --- chezscheme-9.5+dfsg/csug/libraries.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/libraries.stex 2020-08-31 02:35:12.000000000 +0000 @@ -469,7 +469,7 @@ \begin{description} \item[\scheme{\var{library-spec}}:] all exports of the library identified by the Revised$^6$ Report \var{library-spec} -(Chapter~\ref{TSPL:CHPTLIBRARIES}. +(Chapter~\ref{TSPL:CHPTLIBRARIES}). \item[\scheme{\var{module-name}}:] all exports of module named by the identifier \var{module-name} @@ -896,6 +896,57 @@ as procedure inlining. This can result in significantly lower run-time performance. +\section{Explicitly invoking libraries\label{SECTLIBRARYINVOCATION}} + +%---------------------------------------------------------------------------- +\noskipentryheader +\formdef{invoke-library}{\categoryprocedure}{(invoke-library \var{libref})} +\returns unspecified +\listlibraries +\endnoskipentryheader + +\var{libref} must be an s-expression in the form of a library reference. +The syntax for library references is given in +Chapter~\ref{TSPL:CHPTLIBRARIES} of {\TSPLFOUR} and in the Revised$^6$ +Report. + +A library is implicitly invoked when or before some expression +outside the library (e.g., in another library or in a top-level +program) evaluates a reference to one of the library's exported +variables. +When the library is invoked, its body expressions (the right-hand-sides +of the library's variable definitions and its initialization +expressions) are evaluated. +Once invoked, the library is not invoked again within the same process, +unless it is first explicitly redefined or reloaded. + +\scheme{invoke-library} explicitly invokes the library specified +by \var{libref} if it has not already been invoked or has since +been redefined or reloaded. +If the library has not yet been loaded, \scheme{invoke-library} +first loads the library via the process described in +Section~\ref{SECTUSELIBRARIES}. + +\scheme{invoke-library} is typically only useful for libraries whose +body expressions have side effects. +It is useful to control when the side effects occur and to force +invocation of a library that has no exported variables. +Invoking a library does not force the compile-time code (macro +transformer expressions and meta definitions) to be loaded or +evaluated, nor does it cause the library's bindings to become +visible. + +It is good practice to avoid externally visible side effects in +library bodies so the library can be used equally well at compile +time and run time. +When feasible, consider moving the side effects of a library body +to an initialization routine and adding a top-level program that +imports the library and calls the initialization routine. +With this structure, calls to \scheme{invoke-library} on the +library can be replaced by calls to +\index{\scheme{load-program}}\scheme{load-program} on the +top-level program. + \section{Library Parameters\label{SECTLIBRARYPARAMETERS}} \index{\scheme{import}}% @@ -915,7 +966,7 @@ containing library source and object code are located in the file system, and the parameter \scheme{library-extensions} determines the filename extensions for the files holding the code, as described in -section~\ref{SECTUSESCRIPTING}. +section~\ref{SECTUSELIBRARIES}. The values of both parameters are lists of pairs of strings. The first string in each \scheme{library-directories} pair identifies a source-file root directory, and the second identifies the corresponding @@ -974,7 +1025,7 @@ the object file is missing, older than the corresponding source file, older than any source files included (via \index{\scheme{include}}\scheme{include}) when the object file was created, or itself requires a library that has or must -be recompiled, as described in Section~\ref{SECTUSESCRIPTING}. +be recompiled, as described in Section~\ref{SECTUSELIBRARIES}. The default initial value of this parameter is \scheme{#f}. It can be set to \scheme{#t} via the command-line option \index{\scheme{--compile-imported-libraries} command-line option}\scheme{--compile-imported-libraries}. @@ -998,6 +1049,51 @@ searches for the file containing each library it needs to load. The default value of this parameter is \scheme{#f}. +%---------------------------------------------------------------------------- +\entryheader +\formdef{library-search-handler}{\categorythreadparameter}{library-search-handler} +\listlibraries +\endentryheader + +The value of parameter must be a procedure that follows the protocol described +below for \scheme{default-library-search-handler}, which is the default value +of this parameter. + +The value of this parameter is invoked to locate the source or object code for +a library during \scheme{import}, \scheme{compile-whole-program}, or +\scheme{compile-whole-library}. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{default-library-search-handler}{\categoryprocedure}{(default-library-search-handler \var{who} \var{library} \var{directories} \var{extensions})} +\returns see below +\listlibraries +\endentryheader + +This procedure is the default value of the \scheme{library-search-handler}, +which is +called to locate the source or object code for a library +during \scheme{import}, +\scheme{compile-whole-program}, or \scheme{compile-whole-library}. +\var{who} is a symbol that provides context in \scheme{import-notify} messages. +\var{library} is the name of the desired library. +\var{directories} is a list of source and object directory pairs in +the form returned by \scheme{library-directories}. +\var{extensions} is a list of source and object extension pairs in the form +returned by \scheme{library-extensions}. + +This procedure searches the specified directories until it finds a library source or +object file with one of the specified extensions. +If it finds the source file first, it constructs the corresponding +object file path and checks whether the file exists. +If it finds the object file first, the procedure looks for a corresponding +source file with one of the given source extensions in a source directory paired +with that object directory. +The procedure returns three values: +the file-system path of the library source file or \scheme{#f} if not found, +the file-system path of the corresponding object file, which may be \scheme{#f}, +and a boolean that is true if the object file exists. + \section{Library Inspection\label{SECTLIBRARYINSPECTION}} %---------------------------------------------------------------------------- @@ -1011,7 +1107,7 @@ Section~\ref{SECTBUILTINLIBRARIES} above. %---------------------------------------------------------------------------- -\noskipentryheader +\entryheader \formdef{library-version}{\categoryprocedure}{(library-version \var{libref})} \returns the version of the specified library \formdef{library-exports}{\categoryprocedure}{(library-exports \var{libref})} @@ -1023,7 +1119,7 @@ \formdef{library-object-filename}{\categoryprocedure}{(library-object-filename \var{libref})} \returns the name of the object file holding the specified library, if any \listlibraries -\endnoskipentryheader +\endentryheader Information can be obtained only for built-in libraries or libraries previously loaded into the system. diff -Nru chezscheme-9.5+dfsg/csug/Makefile chezscheme-9.5.4+dfsg/csug/Makefile --- chezscheme-9.5+dfsg/csug/Makefile 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/Makefile 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -m = a6le -Scheme=../$m/bin/$m/scheme -b ../$m/boot/$m/petite.boot -b ../$m/boot/$m/scheme.boot -STEXLIB=../stex -installdir=/tmp/csug9 -INSTALL=../$m/installsh - -x = csug -latex = pdflatex -stexmacrofiles = tspl4-prep -bib = $(x).bib -index=yes -TSPL=tspl4 -DIR=$(shell basename `pwd`) - -target: logcheck1 logcheck2 checklibs $(x).html - -install: target - $(INSTALL) -m 2755 -d $(installdir) - $(INSTALL) -m 0644 --ifdiff *.html *.css $(installdir) - $(INSTALL) -m 2755 -d $(installdir)/canned - $(INSTALL) -m 0644 --ifdiff canned/* $(installdir)/canned - $(INSTALL) -m 2755 -d $(installdir)/gifs - $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs - $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) - $(INSTALL) -m 0644 --ifdiff $(mathdir)/*.gif $(installdir)/$(mathdir) - (cd $(installdir); ln -s -f $(x).html index.html) - -# thrice is not enough when starting from scratch -logcheck1: $(x).thirdrun - @if [ -n "`grep 'Warning: Label(s) may have changed' $(x).log`" ] ; then\ - /bin/rm -f $(x).thirdrun ;\ - $(MAKE) $(x).thirdrun;\ - fi - -rerun: $(x).thirdrun - -logcheck2: $(x).thirdrun - @if [ -n "`grep Warning $(x).log | grep -v pdftex.map`" ] ; then\ - echo "`grep Warning $(x).log | grep -v pdftex.map`";\ - false;\ - fi - @if [ -n "`grep Overfull $(x).log | grep -v pdftex.map`" ] ; then\ - echo "`grep Overfull $(x).log | grep -v pdftex.map`";\ - false;\ - fi - -include $(STEXLIB)/Mf-stex - -stexsrc = csug.stex title.stex copyright.stex contents.stex\ - preface.stex intro.stex use.stex expeditor.stex debug.stex foreign.stex\ - binding.stex control.stex objects.stex numeric.stex io.stex\ - libraries.stex syntax.stex system.stex smgmt.stex threads.stex\ - compat.stex bibliography.stex summary.stex -texsrc = ${stexsrc:%.stex=%.tex} - -title.tex contents.tex bibliography.tex: - /bin/rm -f $*.tex - echo "%%% DO NOT EDIT THIS FILE" > $*.tex - echo "%%% Edit the .stex version instead" >> $*.tex - echo "" >> $*.tex - cat $*.stex >> $*.tex - chmod -w $*.tex -title.tex: title.stex -contents.tex: contents.stex -bibliography.tex: bibliography.stex - -$(x).firstrun: $(x).prefirstrun -$(x).prefirstrun: tspl.aux tspl.rfm tspl.idx - touch $x.sfm - cat tspl.aux > $x.aux - cat tspl.rfm > $x.rfm - cat tspl.idx > $x.idx - touch $(x).prefirstrun - -$(x).secondrun: $(x).presecondrun -$(x).presecondrun: $(x).firstrun - cat tspl.aux >> $x.aux - cat tspl.rfm >> $x.rfm - echo '(summary-make "$x")' | $(Scheme) setup.ss summary.ss - cat tspl.idx >> $x.idx - touch $(x).presecondrun - -$(x).thirdrun: $(x).prethirdrun canned/cisco-logo.png -$(x).prethirdrun: $(x).secondrun - cat tspl.aux >> $x.aux - cat tspl.rfm >> $x.rfm - echo '(summary-make "$x")' | $(Scheme) setup.ss summary.ss - cat tspl.idx >> $x.idx - touch $(x).prethirdrun - -$(x).hfirstrun: $(x).hprefirstrun csug8.hcls -$(x).hprefirstrun: $(x).thirdrun tspl.haux in.hidx - cat tspl.aux >> $x.aux - cat tspl.rfm >> $x.rfm - cat tspl.idx >> $x.idx - cat tspl.haux > $x.haux - touch $(x).hprefirstrun - -$(x).hsecondrun: $(x).hpresecondrun -$(x).hpresecondrun: $(x).hfirstrun - cat tspl.haux >> $x.haux - touch $(x).hpresecondrun - -$(x).hthirdrun: $(x).hprethirdrun -$(x).hprethirdrun: $(x).hsecondrun - cat tspl.haux >> $x.haux - touch $(x).hprethirdrun - -$(x).prefirstrun: $(texsrc) csug8.cls csug810.clo - -$(x).firstrun: scheme.sty - -tspl.aux: ${TSPL}/tspl.aux - cat ${TSPL}/*.aux | grep '\\newlabel' | \ - sed -e 's/\\newlabel{\(.*\){\([^}]*\)}}/\\newlabel{TSPL:\1{t\2}}/' > tspl.aux - -tspl.haux: ${TSPL}/tspl.haux - sed -e 's/(putprop (quote /(putprop (quote |TSPL|:/' ${TSPL}/tspl.haux | \ - sed -e 's;url) ";url) "http://scheme.com/${TSPL}/;' > tspl.haux - -tspl.rfm: ${TSPL}/tspl.rfm - sed -e 's/\\pageref{/\\pageref{TSPL:/' ${TSPL}/tspl.rfm > tspl.rfm - -# this version leaves tspl entries out of the printed index -#tspl.idx: -# echo -n > tspl.idx - -# this version includes tspl entries in the printed index -tspl.idx: ${TSPL}/tspl.idx - sed -e 's/{\([1-9][0-9]*\)}$$/{t\1}/' ${TSPL}/tspl.idx | \ - sed -e 's/{\([ivx][ivx]*\)}$$/{t\1}/' > tspl.idx - -in.hidx: ${TSPL}/out.hidx - sed -e 's;"\(.*\)\.html#;"http://scheme.com/${TSPL}/\1.html#;' ${TSPL}/out.hidx | \ - sed -e 's/"")$$/"t")/' > in.hidx - -$(texsrc): tspl4-prep.stex priminfo.ss ../s/primdata.ss - -checklibs: $(x).thirdrun - sort libsrecorded | uniq > libsrecorded.sort - sort libslisted | uniq > libslisted.sort - diff libsrecorded.sort libslisted.sort - -code: $(stexsrc) - extract.pl $(stexsrc) > code - echo '(load "code" pretty-print)' | $(Scheme) -q - -$(x).clean: - -/bin/rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\ - $(x).prethirdrun $(x).ans\ - $(x).hprefirstrun $(x).hpresecondrun $(x).hprethirdrun\ - tspl.aux tspl.haux tspl.rfm tspl.idx in.hidx\ - libsrecorded{,.sort} libslisted{,.sort}\ - code - -$(x).reallyclean: - -$(x).reallyreallyclean: diff -Nru chezscheme-9.5+dfsg/csug/numeric.stex chezscheme-9.5.4+dfsg/csug/numeric.stex --- chezscheme-9.5+dfsg/csug/numeric.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/numeric.stex 2020-08-31 02:35:12.000000000 +0000 @@ -117,7 +117,7 @@ The Revised$^6$ Report distinguishes two types of special numeric objects: fixnums and flonums. {\ChezScheme} additionally distinguishes \emph{bignums} (exact integers outside -of the bignum range) and \emph{ratnums} (ratios of exact integers). +of the fixnum range) and \emph{ratnums} (ratios of exact integers). It also provides a predicate for recognizing \emph{cflonums}, which are flonums or inexact complex numbers. @@ -180,9 +180,9 @@ %---------------------------------------------------------------------------- \entryheader \formdef{most-positive-fixnum}{\categoryprocedure}{(most-positive-fixnum)} -\returns the most negative fixnum supported by the system -\formdef{most-negative-fixnum}{\categoryprocedure}{(most-negative-fixnum)} \returns the most positive fixnum supported by the system +\formdef{most-negative-fixnum}{\categoryprocedure}{(most-negative-fixnum)} +\returns the most negative fixnum supported by the system \listlibraries \endentryheader diff -Nru chezscheme-9.5+dfsg/csug/objects.stex chezscheme-9.5.4+dfsg/csug/objects.stex --- chezscheme-9.5+dfsg/csug/objects.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/objects.stex 2020-08-31 02:35:12.000000000 +0000 @@ -653,6 +653,29 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{vector-cas!}{\categoryprocedure}{(vector-cas! \var{vector} \var{n} \var{old-obj} \var{new-obj})} +\returns \scheme{#t} if \var{vector} is changed, \scheme{#f} otherwise +\listlibraries +\endentryheader + +\noindent +\var{vector} must be mutable. +\scheme{vector-cas!} atomically changes the \var{n}th element of \var{vector} to \var{new-obj} +if the replaced \var{n}th element is \scheme{eq?} to \var{old-obj}. +If the \var{n}th element of \var{vector} that would be replaced +is not \scheme{eq?} to \var{old-obj}, then +\var{vector} is unchanged. + +\schemedisplay +(define v (vector 'old0 'old1 'old2)) +(vector-cas! v 1 'old1 'new1) ;=> #t +(vector-ref v 1) ;=> 'new1 +(vector-cas! v 2 'old1 'new2) ;=> #f +(vector-ref v 2) ;=> 'old2 +\endschemedisplay + +%---------------------------------------------------------------------------- +\entryheader \formdef{mutable-vector?}{\categoryprocedure}{(mutable-vector? \var{obj})} \returns \scheme{#t} if \var{obj} is a mutable vector, \scheme{#f} otherwise \formdef{immutable-vector?}{\categoryprocedure}{(immutable-vector? \var{obj})} @@ -1155,7 +1178,11 @@ The result is the raw compressed data with a minimal header to record the uncompressed size and the compression mode. The result does not include the header that is written by port-based compression using the -\scheme{compressed} option. +\scheme{compressed} option. The compression format is determined by the +\index{\scheme{compress-format}}\scheme{compress-format} +parameter, and the compression level is determined by the +\index{\scheme{compress-level}}\scheme{compress-level} +parameter. %---------------------------------------------------------------------------- @@ -1262,6 +1289,28 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{box-cas!}{\categoryprocedure}{(box-cas! \var{box} \var{old-obj} \var{new-obj})} +\returns \scheme{#t} if \var{box} is changed, \scheme{#f} otherwise +\listlibraries +\endentryheader + +\noindent +\var{box} must be mutable. +\scheme{box-cas!} atomically changes the content of \var{box} to \var{new-obj} +if the replaced content is \scheme{eq?} to \var{old-obj}. +If the content of \var{box} that would be replaced is not \scheme{eq?} to \var{old-obj}, then +\var{box} is unchanged. + +\schemedisplay +(define b (box 'old)) +(box-cas! b 'old 'new) ;=> #t +(unbox b) ;=> 'new +(box-cas! b 'other 'wrong) ;=> #f +(unbox b) ;=> 'new +\endschemedisplay + +%---------------------------------------------------------------------------- +\entryheader \formdef{mutable-box?}{\categoryprocedure}{(mutable-box? \var{obj})} \returns \scheme{#t} if \var{obj} is a mutable box, \scheme{#f} otherwise \formdef{immutable-box?}{\categoryprocedure}{(immutable-box? \var{obj})} @@ -1317,7 +1366,7 @@ \item A symbol whose name contains arbitrary characters may be written by -escaping them them with \scheme{\} or with \scheme{|}. +escaping them with \scheme{\} or with \scheme{|}. \scheme{\} is used to escape a single character (except 'x', since \scheme{\x} marks the start of a hex scalar value), whereas \scheme{|} is used @@ -1373,10 +1422,8 @@ In both the first and second forms, the unique name is an automatically generated globally unique name. -Globally unique names are constructed (lazily---see below) -from some combination of a unique machine identifier (such as the -network address), the current process identifier (PID), and the -time at which the Scheme session began, along with an internal +Globally unique names are constructed (lazily---see below) from the +combination of a universally unique identifier and an internal counter. In the third form of gensym, the unique name of the new gensym is \var{unique-name}, which must be a string. @@ -1800,7 +1847,34 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{hashtable-keys}{\categoryprocedure}{(hashtable-keys \var{hashtable})} +\formdef{hashtable-keys}{\categoryprocedure}{(hashtable-keys \var{hashtable} \var{size})} +\returns a vector containing the keys in \var{hashtable} +\listlibraries +\endentryheader + +\noindent +Identitcal to the Revised$^6$ Report counterpart, but allowing an optional +\var{size} argument. +If \var{size} is specified, then it must be an exact, nonnegative integer, and the +result vector contains no more than \var{size} elements. +Different calls to \scheme{hashtable-keys} +with a \var{size} less than \scheme{(hashtable-size \var{hashtable})} +may return different subsets of \var{hashtable}'s keys. + +\schemedisplay +(define ht (make-eq-hashtable)) +(hashtable-set! ht 'a "one") +(hashtable-set! ht 'b "two") +(hashtable-set! ht 'c "three") +(hashtable-keys ht) ;=> #(a b c) \var{or any permutation} +(hashtable-keys ht 1) ;=> #(a) \var{or} #(b) \var{or} #(c) +\endschemedisplay + +%---------------------------------------------------------------------------- +\entryheader \formdef{hashtable-values}{\categoryprocedure}{(hashtable-values \var{hashtable})} +\formdef{hashtable-values}{\categoryprocedure}{(hashtable-values \var{hashtable} \var{size})} \returns a vector containing the values in \var{hashtable} \listlibraries \endentryheader @@ -1809,6 +1883,11 @@ Each value is the value of one of the keys in \var{hashtable}. Duplicate values are not removed. The values may appear in any order in the returned vector. +If \var{size} is specified, then it must be an exact, nonnegative integer, and the +result vector contains no more than \var{size} elements. +Different calls to \scheme{hashtable-values} +with a \var{size} less than \scheme{(hashtable-size \var{hashtable})} +may return different subsets of \var{hashtable}'s values. \schemedisplay (define ht (make-eq-hashtable)) @@ -1817,19 +1896,65 @@ (hashtable-set! ht p1 "one") (hashtable-set! ht p2 "two") (hashtable-set! ht 'q "two") -(hashtable-values ht) ;=> #("one" "two" "two") +(hashtable-values ht) ;=> #("one" "two" "two") \var{or any permutation} +(hashtable-values ht 1) ;=> #("one") \var{or} #("two") \endschemedisplay -This procedure is equivalent to: +This procedure is equivalent to calling \scheme{hashtable-entries} and returning only +the second result, but it is more efficient since the separate vector of keys need +not be created. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{hashtable-entries}{\categoryprocedure}{(hashtable-entries \var{hashtable})} +\formdef{hashtable-entries}{\categoryprocedure}{(hashtable-entries \var{hashtable} \var{size})} +\returns two vectors containing the keys and values in \var{hashtable} +\listlibraries +\endentryheader + +\noindent +Identitcal to the Revised$^6$ Report counterpart, but allowing an optional +\var{size} argument. +If \var{size} is specified, then it must be an exact, nonnegative integer, and the +result vectors contain no more than \var{size} elements. +Different calls to \scheme{hashtable-entries} +with a \var{size} less than \scheme{(hashtable-size \var{hashtable})} +may return different subsets of \var{hashtable}'s entries. \schemedisplay -(lambda (ht) - (let-values ([(keys values) (hashtable-entries ht)]) - values)) +(define ht (make-eq-hashtable)) +(hashtable-set! ht 'a "one") +(hashtable-set! ht 'b "two") +(hashtable-entries ht) ;=> #(a b) #("one" "two") \var{or the other permutation} +(hashtable-entries ht 1) ;=> #(a) #("one") \var{or} #(b) #("two") \endschemedisplay -but more efficient since the separate vector of keys need -not be created. +%---------------------------------------------------------------------------- +\entryheader +\formdef{hashtable-cells}{\categoryprocedure}{(hashtable-cells \var{hashtable})} +\formdef{hashtable-cells}{\categoryprocedure}{(hashtable-cells \var{hashtable} \var{size})} +\returns a vector of up to \var{size} elements containing the cells of \var{hashtable} +\listlibraries +\endentryheader + +\noindent +Each element of the result vector is the value of one of the cells in \var{hashtable}. +The cells may appear in any order in the returned vector. +If \var{size} is specified, then it must be an exact, nonnegative integer, and the +result vector contains no more than \var{size} cells. +If \var{size} is not specified, then the result vector has \scheme{(hashtable-size \var{hashtable})} elements. +Different calls to \scheme{hashtable-cells} +with a \var{size} less than \scheme{(hashtable-size \var{hashtable})} +may return different subsets of \var{hashtable}'s cells. + +\schemedisplay +(define ht (make-eqv-hashtable)) +(hashtable-set! ht 1 'one) +(hashtable-set! ht 2 'two) +(hashtable-cells ht) ;=> #((1 . one) (2 . two)) \var{or} #((2 . two) (1 . one)) +(hashtable-cells ht 1) ;=> #((1 . one)) \var{or} #((2 . two)) +(hashtable-cells ht 0) ;=> #() +\endschemedisplay %---------------------------------------------------------------------------- \entryheader @@ -2380,6 +2505,12 @@ When comparing two non-eq? instances that do not share an equality procedure, \scheme{equal?} returns \scheme{#f}. +A default equality procedure to be used for all record types (including +opaque types) can be specified via the parameter +\index{\scheme{default-record-equal-procedure}}\scheme{default-record-equal-procedure}. +The default equality procedure is used only if neither instance's type has or inherits +a type-specific record equality procedure. + \index{record hashing}\index{\scheme{equal-hash} on records}% Similarly, when the \index{\scheme{equal-hash}}\scheme{equal-hash} primitive hashes a record instance, it defaults to a value that is @@ -2391,11 +2522,18 @@ The procedure \index{\scheme{record-hash-procedure}}\scheme{record-hash-procedure} can be used to find the hash procedure for a given record instance, following the inheritance chain. -\var{equal-hash} passes \var{hash-proc} two arguments: the +\var{equal-hash} passes the hash procedure two arguments: the instance plus a \var{hash} procedure that should be used for recursive hashing of values within the instance. Use of \var{hash} for recursive hashing is necessary to allow -hashing of potentially cyclic structure. +hashing of potentially cyclic structure and to make the hashing +of shared structure more efficient. + +A default hash procedure to be used for all record types (including +opaque types) can be specified via the parameter +\index{\scheme{default-record-hash-procedure}}\scheme{default-record-hash-procedure}. +The default hash procedure is used only if an instance's type does not have or inherit +a type-specific hash procedure. The following example illustrates the setting of equality and hash procedures. @@ -2532,6 +2670,10 @@ In the second form, \scheme{record-type-hash-procedure} returns the hash procedure associated with \var{rtd}, if any, otherwise \scheme{#f}. +The procedure \var{hash-proc} should accept two arguments, the +instance for which it should compute a hash value and a hash procedure +to use to compute hash values for arbitrary fields of the instance, +and it return a nonnegative exact integer. A record type's hash procedure should produce the same hash value for any two instances the record type's equality procedure considers equal. @@ -2550,6 +2692,42 @@ is returned. Otherwise, \scheme{#f} is returned. +%---------------------------------------------------------------------------- +\entryheader +\formdef{default-record-equal-procedure}{\categorythreadparameter}{default-record-equal-procedure} +\listlibraries +\endentryheader + +This parameter determines how two record instances are compared by +\scheme{equal?} if neither has a type-specific equality procedure. +When the parameter has the value \scheme{#f} (the default), \scheme{equal?} +compares the instances with \scheme{eq?}, i.e., there is no attempt at +determining structural equivalence. +Otherwise, the parameter's value must be a procedure, and \scheme{equal?} +invokes that procedure to compare the instances, passing it three arguments: +the two instances and a procedure that should be used to recursively +compare arbitrary values within the instances. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{default-record-hash-procedure}{\categorythreadparameter}{default-record-hash-procedure} +\listlibraries +\endentryheader + +This parameter determines the hash procedure used when \scheme{equal-hash} +is called on a record instance and the instance does not have a type-specific +hash procedure. +When the parameter has the value \scheme{#f} (the default), \scheme{equal-hash} +returns a value that is independent of the record type and contents +of the instance. +Otherwise, the parameter's value must be a procedure, and \scheme{equal-hash} +invokes the procedure to compute the instance's hash value, passing it +the record instance and a procedure to invoke to recursively compute +hash values for arbitrary values contained within the record. +The procedure should return a nonnegative exact integer, and the +return value should be the same for any two instances the default +equal procedure considers equivalent. + \section{Legacy Record Types\label{SECTCSV7RECORDS}} \index{records}\index{\scheme{define-record}}\index{\scheme{make-record-type}}% diff -Nru chezscheme-9.5+dfsg/csug/preface.stex chezscheme-9.5.4+dfsg/csug/preface.stex --- chezscheme-9.5+dfsg/csug/preface.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/preface.stex 2020-08-31 02:35:12.000000000 +0000 @@ -13,33 +13,26 @@ % limitations under the License. \chapter{Preface} -{\ChezScheme} Version~9 is a complete implementation of the language of -the Revised$^6$ Report on Scheme (R6RS), with numerous extensions. -The implementation is extensively tested and actively maintained and supported. -It includes a fast compiler that generates efficient native code for each -processor upon which it runs along with a run-time system that provides -automatic storage management, foreign language interfaces, and an +{\ChezScheme} is both a general-purpose programming language and +an implementation of that language, with supporting tools and +documentation. +As a superset of the language described in the Revised$^6$ Report +on Scheme (R6RS), {\ChezScheme} supports all standard features of +Scheme, including first-class procedures, proper treatment of tail +calls, continuations, user-defined records, libraries, exceptions, +and hygienic macro expansion. +{\ChezScheme} supports numerous non-R6RS features. +A few of these are local and top-level modules, +local import, foreign datatypes and procedures, nonblocking I/O, +an interactive top-level, compile-time values and properties, +pretty-printing, and formatted output. + +The implementation includes a compiler that generates native code +for each processor upon which it runs along with a run-time system +that provides automatic storage management, foreign-language +interfaces, source-level debugging, profiling support, and an extensive run-time library. -The compiler has been rewritten for Version~9 and generates -substantially faster code than the earlier compiler at the cost of -additional compile time. -This is the primary difference between Versions~8 and~9. - -This book is a companion to \emph{The Scheme Programming Language, 4th -Edition} (TSPL4). -While TSPL4 describes only standard R6RS features, this book describes -{\ChezScheme} extensions. -For the reader's convenience, the summary of forms and index at the back -of this book contain entries from both books, with each entry from TSPL4 -marked with a ``t'' in front of its page number. -In the online version, the page numbers given in the summary of forms and -index double as direct links into one of the documents or the other. - -Additional documentation for {\ChezScheme} includes release notes, a -manual page, and a number of published papers and articles that describe -various aspects of the system's design and implementation. - The threaded versions of {\ChezScheme} support native threads, allowing Scheme programs to take advantage of multiprocessor or multiple-core systems. @@ -55,4 +48,39 @@ Unlike most shells that support command-line editing, the expression editor properly supports multiline expressions. +{\ChezScheme} is intended to be as reliable and efficient as possible, +with reliability taking precedence over efficiency if necessary. +Reliability means behaving as designed and documented. +While a {\ChezScheme} program can always fail to work properly +because of a bug in the program, it should never fail because of a +bug in the {\ChezScheme} implementation. +Efficiency means performing at a high level, consuming minimal CPU +time and memory. +Performance should be balanced across features, across run time and +compile time, and across programs and data of different sizes. +These principles guide {\ChezScheme} language and tool design as +well as choice of implementation technique; for example, a language +feature or debugging hook might not exist in {\ChezScheme} because +its presence would reduce reliability, efficiency, or both. + +The compiler has been rewritten for Version~9 and generates +substantially faster code than the earlier compiler at the cost of +greater compile time. +This is the primary difference between Versions~8 and~9. + +This book (CSUG) is a companion to \emph{The Scheme Programming +Language, 4th Edition} (TSPL4). +TSPL4 serves as an introduction to and reference for R6RS, while +CSUG describes {\ChezScheme} features and tools that are not part +of R6RS. +For the reader's convenience, the summary of forms and index at the back +of this book contain entries from both books, with each entry from TSPL4 +marked with a ``t'' in front of its page number. +In the online version, the page numbers given in the summary of forms and +index double as direct links into one of the documents or the other. + +Additional documentation for {\ChezScheme} includes release notes, a +manual page, and a number of published papers and articles that describe +various aspects of the system's design and implementation. + Thank you for using {\ChezScheme}. diff -Nru chezscheme-9.5+dfsg/csug/scheme.sty chezscheme-9.5.4+dfsg/csug/scheme.sty --- chezscheme-9.5+dfsg/csug/scheme.sty 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/scheme.sty 2020-08-31 02:35:12.000000000 +0000 @@ -54,14 +54,14 @@ \newskip\schemeindent \schemeindent=0pt {\obeyspaces\global\let =\ } -\def\schtilde{\raisebox{-.5ex}{\hbox to .5em{\hss\schemelarger\rm\char`\~\hss}}} -\def\schdot{\hbox to .5em{\hfil\schemelarger\bf.\hfil}} +\def\schtilde{\raisebox{-.5ex}{\hbox{\char`\~}}} +\def\schdot{.} \def\schcarat{\char`\^} \def\schbackslash{\char`\\} -\def\schatsign{\hbox to .5em{\hss\schemesmaller\rm\char`\@\hss}} -\def\schunderscore{\hbox to .5em{\hss\schemelarger\_\hss}} -\def\schlbrace{$\{$} -\def\schrbrace{$\}$} +\def\schatsign{\char`\@} +\def\schunderscore{\char`\_} +\def\schlbrace{\char`\{} +\def\schrbrace{\char`\}} \def\scheme#1{\mbox{\tt\frenchspacing\spaceskip=\ttglue#1}} \def\schemeblankline{\par\penalty-100\vskip .7\baselineskip} diff -Nru chezscheme-9.5+dfsg/csug/smgmt.stex chezscheme-9.5.4+dfsg/csug/smgmt.stex --- chezscheme-9.5+dfsg/csug/smgmt.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/smgmt.stex 2020-08-31 02:35:12.000000000 +0000 @@ -18,8 +18,8 @@ \section{Garbage Collection\label{SECTSMGMTGC}} -Scheme objects such as pairs, strings, and procedures are -never explicitly deallocated by a Scheme program. +Scheme objects such as pairs, strings, procedures, and user-defined +records are never explicitly deallocated by a Scheme program. Instead, the \index{storage management}storage management system automatically reclaims the storage associated with an object once it proves the object is no longer @@ -44,7 +44,8 @@ parameter \index{\scheme{collect-request-handler}}\scheme{collect-request-handler}. A program can also cause a collection to occur between collect-request -interrupts by calling \scheme{collect} directly. +interrupts by calling \scheme{collect} directly either without or with +arguments. {\ChezScheme}'s collector is a \emph{generation-based} collector. It segregates objects based on their age (roughly speaking, the @@ -59,64 +60,56 @@ Objects are placed into the static generation only when a heap is compacted (see \index{\scheme{Scompact_heap}}\scheme{Scompact_heap} in -Section~\ref{SECTFOREIGNCLIB}) or when the target-generation argument to -\index{\scheme{collect}}\scheme{collect} is the symbol \scheme{static}. +Section~\ref{SECTFOREIGNCLIB}) or when an explicitly specified +target-generation is the symbol \scheme{static}. +This is primarily useful after an application's permanent code and data +structures have been loaded and initialized, to reduce the overhead of +subsequent collections. Nonstatic generations are numbered starting at zero for the youngest generation up through the current value of \index{\scheme{collect-maximum-generation}}\scheme{collect-maximum-generation}. The storage manager places newly allocated objects into generation 0. -During a generation 0 collection, objects in generation 0 that survive the -collection move, by default, to generation 1. -Similarly, during a generation 1 collection, objects in generations 0 and -1 that survive move to generation 2, and so on. -During the collection of the maximum nonstatic collection, all surviving -nonstatic objects move (possibly back) into the maximum nonstatic -generation. -With this mechanism, it is possible for an object to skip one or more -generations, but this is not likely to happen to many objects, and if the -objects become inaccessible, their storage is reclaimed eventually. +When \scheme{collect} is invoked without arguments, generation 0 +objects that survive collection move to generation 1, generation 1 +objects that survive move to generation 2, and so on, except that +objects are never moved past the maximum nonstatic generation. +Objects in the maximum nonstatic generation are collected back into +the maximum nonstatic generation. +While generation 0 is collected during each collection, older +generations are collected less frequently. An internal counter, gc-trip, is maintained to control when each generation is collected. Each time \scheme{collect} is called without arguments (as from the default -collect-request handler), gc-trip is incremented by one. -With a collect-generation radix of $r$, the collected generation +collect-request handler), gc-trip is incremented by one, and the set of +generations to be collected is determined from the current value of +gc-trip and the value of +\index{\scheme{collect-generation-radix}}\scheme{collect-generation-radix}: +with a collect-generation radix of $r$, the maximum collected generation is the highest numbered generation $g$ for which gc-trip is a multiple of $r^g$. If \scheme{collect-generation-radix} is set to 4, the system thus -collects generation 0 every time, generation 1 every 4 times, generation 2 -every 16 times, and so on. +collects generation 0 every time, generation 1 every 4 times, +generation 2 every 16 times, and so on. -Each time \scheme{collect} is called with a single generation argument $g$, -generation $g$ is collected and -gc-trip is advanced to the next $r^g$ boundary, but not past the next -$r^{g+1}$ boundary, where $r$ is again the +When \scheme{collect} is invoked with arguments, the generations to be +collected and their target generations are determined by the arguments. +In addition, the first argument \var{cg} affects the value of gc-trip; +that is, gc-trip is advanced to the next $r^{cg}$ boundary, but +not past the next $r^{cg+1}$ boundary, where $r$ is the value of \scheme{collect-generation-radix}. -If \scheme{collect} is called with a second generation argument, -$tg$, $tg$ determines the target generation. -When $g$ is the maximum nonstatic generation, $tg$ must be -$g$ or the symbol \scheme{static}. -Otherwise, $tg$ must be $g$ or $g+1$. -When the target generation is the symbol \scheme{static}, all data in -the nonstatic generations are moved to the static generation. -Objects in the static generation are never collected. -This is primarily useful after an application's permanent code and data -structures have been loaded and initialized, to reduce the overhead of -subsequent collections. - It is possible to make substantial adjustments in the collector's behavior by setting the parameters described in this section. It is even possible to completely override the collector's default strategy for determining when each generation is collected by redefining the -collect-request handler to call \scheme{collect} with explicit $g$ and -$tg$ arguments. -For example, the programmer can redefine the handler to treat the maximum -nonstatic generation as a static generation over a long period of time -by calling \scheme{collect} with explicit $g$ and $tg$ arguments -that are never equal to the maximum nonstatic generation during that -period of time. +collect-request handler to call \scheme{collect} with arguments. +For example, the programmer can redefine the handler to treat the +maximum nonstatic generation as a static generation over a long +period of time by calling \scheme{collect} with arguments that +prevent the maximum nonstatic generation from being collected during +that period of time. Additional information on {\ChezScheme}'s collector can be found in the report ``Don't stop the {BiBOP}: Flexible and efficient @@ -126,31 +119,77 @@ %---------------------------------------------------------------------------- \entryheader \formdef{collect}{\categoryprocedure}{(collect)} -\formdef{collect}{\categoryprocedure}{(collect \var{g})} -\formdef{collect}{\categoryprocedure}{(collect \var{g} \var{tg})} +\formdef{collect}{\categoryprocedure}{(collect \var{cg})} +\formdef{collect}{\categoryprocedure}{(collect \var{cg} \var{max-tg})} +\formdef{collect}{\categoryprocedure}{(collect \var{cg} \var{min-tg} \var{max-tg})} \returns unspecified \listlibraries \endentryheader \noindent -\var{g} must be a nonnegative fixnum no greater than the -maximum nonstatic generation, i.e., the -value returned by \scheme{collect-maximum-generation}. -If \var{g} is the maximum nonstatic generation, -\var{tg} must be a fixnum equal to \var{g} or the symbol -\scheme{static}. -Otherwise, \var{tg} must be a fixnum equal to or one -greater than \var{g}. - -This procedure causes the storage manager to perform a garbage collection. -\scheme{collect} is invoked periodically via the collect-request -handler, but it may also be called explicitly to force collection at a -particular time, e.g., before timing a computation. +This procedure causes the storage manager to perform a garbage +collection. +\scheme{collect} is invoked periodically without arguments by the +default collect-request handler, but it may also be called explicitly, +e.g., from a custom collect-request handler, between phases of a +computation when collection is most likely to be successful, or +before timing a computation. In the threaded versions of {\ChezScheme}, the thread that invokes \scheme{collect} must be the only active thread. -The system determines which generations to collect, based on \var{g} and -\var{tg} if provided, as described in the lead-in to this section. +When called without arguments, the system determines automatically +which generations to collect and the target generation for each +collected generation as described in the lead-in to this section. + +When called with arguments, the system collects all and only objects +in generations less than or equal to \var{cg} (the maximum collected +generation) into the target generation or generations determined +by \var{min-tg} (the minimum target generation) and \var{max-tg} +(the maximum target generation). +Specifically, the target generation for any object in a collected +generation \var{g} is +$\mbox{min}(\mbox{max}(\mbox{\emph{g}}+1,\mbox{\emph{min-tg}}),\mbox{\emph{max-tg}})$, where +\scheme{static} is taken to have the value one greater +than the maximum nonstatic generation. + +If present, \var{cg} must be a nonnegative fixnum no greater than +the maximum nonstatic generation, i.e., the current value of the +parameter \scheme{collect-maximum-generation}. + +If present, \var{max-tg} must be a nonnegative fixnum or the symbol +\scheme{static} and either equal to \var{cg} or one greater than +\var{cg}, again treating \scheme{static} as having the value one +greater than the maximum nonstatic generation. +If \var{max-tg} is not present (but \var{cg} is), it defaults to +\var{cg} if \var{cg} is equal to the maximum target generation and +to one more than \var{cg} otherwise. + +If present, \var{min-tg} must be a nonnegative fixnum or the symbol +\scheme{static} and no greater than \var{max-tg}, again treating +\scheme{static} as having the value one greater than the maximum +nonstatic generation. +Unless \var{max-cg} is the same as \var{cg}, \var{min-tg} must also +be greater than \var{cg}. +If \var{min-tg} is not present (but \var{cg} is), it defaults to +the same value as \var{max-tg}. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{collect-rendezvous}{\categoryprocedure}{(collect-rendezvous)} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +Requests a garbage collection in the same way as when the system +determines that a collection should occur. All running threads are +coordinated so that one of them calls the collect-request handler, while +the other threads pause until the handler returns. + +Note that if the collect-request handler (see +\scheme{collect-request-handler}) does not call \scheme{collect}, then +\scheme{collect-rendezvous} does not actually perform a garbage +collection. %---------------------------------------------------------------------------- @@ -256,7 +295,12 @@ Collection can also be temporarily disabled using \scheme{critical-section}, which prevents any interrupts from -occurring. +being handled. + +In the threaded versions of {\ChezScheme}, the collect-request +handler is invoked by a single thread with all other threads +temporarily suspended. + %---------------------------------------------------------------------------- \entryheader @@ -528,7 +572,6 @@ (bwp-object? (car p)) ;=> #t \endschemedisplay - %---------------------------------------------------------------------------- \entryheader \formdef{make-guardian}{\categoryprocedure}{(make-guardian)} @@ -773,6 +816,86 @@ This would allow the header to be dropped from the Scheme heap as soon as it becomes inaccessible. +Guardians can also be created via +\index{\scheme{ftype-guardian}}\scheme{ftype-guardian}, which +supports reference counting of foreign objects. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{guardian?}{\categoryprocedure}{(guardian? \var{obj})} +\returns \scheme{#t} if obj is a guardian, \scheme{#f} otherwise +\listlibraries +\endentryheader + +\schemedisplay +(guardian? (make-guardian)) ;=> #t +(guardian? (ftype-guardian iptr)) ;=> #t +(guardian? (lambda x x)) ;=> #f +(guardian? "oops") ;=> #f +\endschemedisplay + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{unregister-guardian}{\categoryprocedure}{(unregister-guardian \var{guardian})} +\returns see below +\listlibraries +\endentryheader + +\noindent +\scheme{unregister-guardian} unregisters the +as-yet unresurrected objects currently registered with the guardian, +with one caveat. + +The caveat, which applies only to threaded versions of {\ChezScheme}, +is that objects registered with the guardian by other threads since +the last garbage collection might not be unregistered. +To ensure that all objects are unregistered in a multithreaded +application, a single thread can be used both to register and +unregister objects. +Alternatively, an application can arrange to define a +\index{\scheme{collect-request-handler}}collect-request +handler that calls \scheme{unregister-guardian} after it calls +\scheme{collect}. + +In any case, \scheme{unregister-guardian} returns a list containing each object +(or its representative, if specified) that it unregisters, with +duplicates as appropriate if the same object is registered more +than once with the guardian. +Objects already resurrected but not yet retrieved from the guardian +are not included in the list but remain retrievable from the +guardian. + +In the current implementation, \scheme{unregister-guardian} takes time proportional +to the number of unresurrected objects currently registered with +all guardians rather than those registered just with +the corresponding guardian. + +The example below assumes no collections occur except for those resulting from +explicit calls to \scheme{collect}. + +\schemedisplay +(define g (make-guardian)) +(define x (cons 'a 'b)) +(define y (cons 'c 'd)) +(g x) +(g x) +(g y) +(g y) +(set! y #f) +(collect 0 0) +(unregister-guardian g) ;=> ((a . b) (a . b)) +(g) ;=> (c . d) +(g) ;=> (c . d) +(g) ;=> #f +\endschemedisplay + +\scheme{unregister-guardian} can also be used to unregister ftype +pointers registered with guardians created by +\index{\scheme{ftype-guardian}}\scheme{ftype-guardian} +(Section~\ref{SECTTHREADFTYPEGUARDIANS}). + + \section{Locking Objects\label{SECTSMGMTLOCKING}} All pointers from C variables or data structures to Scheme objects diff -Nru chezscheme-9.5+dfsg/csug/syntax.stex chezscheme-9.5.4+dfsg/csug/syntax.stex --- chezscheme-9.5+dfsg/csug/syntax.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/syntax.stex 2020-08-31 02:35:12.000000000 +0000 @@ -244,13 +244,13 @@ %---------------------------------------------------------------------------- \entryheader \formdef{syntax->vector}{\categoryprocedure}{(syntax->vector \var{syntax-object})} -\returns a list of syntax objects +\returns a vector of syntax objects \listlibraries \endentryheader \noindent This procedure takes a syntax object representing -a vector-structured form and returns a list of syntax objects, each representing +a vector-structured form and returns a vector of syntax objects, each representing the corresponding subform of the input form. %Programmers are encouraged to use this procedure even when the current @@ -631,6 +631,32 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{compile-time-value?}{\categoryprocedure}{(compile-time-value? \var{obj})} +\returns \scheme{#t} if \var{obj} is a compile-time value; \scheme{#f} otherwise +\listlibraries +\endentryheader + +\schemedisplay +(define-syntax x (make-compile-time-value "eggs")) +(compile-time-value? (top-level-syntax 'x)) ;=> #t +\endschemedisplay + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{compile-time-value-value}{\categoryprocedure}{(compile-time-value-value \var{ctv})} +\returns the value of a compile-time value +\listlibraries +\endentryheader + +\schemedisplay +(define-syntax x (make-compile-time-value "eggs")) +(compile-time-value-value (top-level-syntax 'x)) ;=> "eggs" +\endschemedisplay + + +%---------------------------------------------------------------------------- +\entryheader \formdef{define-property}{\categorysyntax}{(define-property \var{id} \var{key} \var{expr})} \returns unspecified \listlibraries @@ -1741,7 +1767,7 @@ \entryheader \formdef{make-source-object}{\categoryprocedure}{(make-source-object \var{sfd} \var{bfp} \var{efp})} \formdef{make-source-object}{\categoryprocedure}{(make-source-object \var{sfd} \var{bfp} \var{efp} \var{line} \var{column})} -\returns a source-object +\returns a source object \listlibraries \endentryheader @@ -1887,7 +1913,7 @@ \endentryheader \var{sfd} must be a source-file descriptor. -\var{bfd} must be an exact nonnegative integer and should be the +\var{bfp} must be an exact nonnegative integer and should be the character position of the next character to be read from \var{textual-input-port}. @@ -1981,3 +2007,167 @@ extracted from source objects, possibly using recorded information, caches, and the filesystem in a way different from \scheme{locate-source-object-object}. + + +\section{Source Tables\label{SECTSYNTAXSOURCETABLES}} + +Source tables provide an efficient way to associate information +with source objects both in memory and on disk, such as the coverage information +saved to \scheme{.covin} files when +\index{\scheme{generate-covin-files}}\scheme{generate-covin-files} is +set to \scheme{#t} +and the profile counts associated with source objects by +\index{\scheme{with-profile-tracker}}\scheme{with-profile-tracker} +(Section~\ref{SECTMISCPROFILE}). + +Source tables are manipulated via hashtable-like accessors and setters +(Section~\ref{SECTMISCHASHTABLES}, {\TSPLFOUR} Section~\ref{TSPL:SECTHASHTABLES}), e.g., +\index{\scheme{source-table-ref}}\scheme{source-table-ref} and \index{\scheme{source-table-set!}}\scheme{source-table-set!}. +They can be saved to files via +\index{\scheme{put-source-table}}\scheme{put-source-table} +and restored via +\index{\scheme{get-source-table!}}\scheme{get-source-table!}. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{make-source-table}{\categoryprocedure}{(make-source-table)} +\returns a source table +\listlibraries +\endentryheader + +A source table contains associations between source objects and arbitrary +values. For purposes of the source-table operations described below, two +source objects are the same if they have the same source-file descriptor, +equal beginning file positions and equal ending file positions. +Two source-file descriptors are the same if they have the same path and +checksum. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table?}{\categoryprocedure}{(source-table? \var{obj})} +\returns \scheme{#t} if \var{obj} is a source-table; \scheme{#f} otherwise +\listlibraries +\endentryheader + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-set!}{\categoryprocedure}{(source-table-set! \var{source-table} \var{source-object} \var{obj})} +\returns unspecified +\listlibraries +\endentryheader + +\scheme{source-table-set!} associates \var{source-object} +with \var{obj} in \var{source-table}, replacing the +existing association, if any. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-ref}{\categoryprocedure}{(source-table-ref \var{source-table} \var{source-object} \var{default})} +\returns see below +\listlibraries +\endentryheader + +\noindent +\var{default} may be any Scheme value. + +\scheme{source-table-ref} returns the value +associated with \var{source-object} in \var{source-table}. +If no value is associated with \var{source-object} in \var{source-table}, +\scheme{source-table-ref} returns \var{default}. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-contains?}{\categoryprocedure}{(source-table-contains? \var{source-table} \var{source-object})} +\returns \scheme{#t} if an association for \var{source-object} exists in \var{source-table}, \scheme{#f} otherwise +\listlibraries +\endentryheader + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-cell}{\categoryprocedure}{(source-table-cell \var{source-table} \var{source-object} \var{default})} +\returns a pair (see below) +\listlibraries +\endentryheader + +\noindent +\var{default} may be any Scheme value. + +If no value is associated with \var{source-object} in \var{source-table}, +\scheme{source-table-cell} modifies \var{source-table} to associate \var{source-object} with +\var{default}. +Regardless, it returns a pair whose car is \var{source-object} and whose cdr is +the associated value. +Changing the cdr of this pair effectively updates the table to +associate \var{source-object} with a new value. +The car field of the pair should not be modified. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-delete!}{\categoryprocedure}{(source-table-delete! \var{source-table} \var{source-object})} +\returns unspecified +\listlibraries +\endentryheader + +\scheme{source-table-delete!} drops the association +for \var{source-object} from \var{source-table}, if +one exists. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-size}{\categoryprocedure}{(source-table-size \var{source-table})} +\returns the number of entries in \var{source-table} +\listlibraries +\endentryheader + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{put-source-table}{\categoryprocedure}{(put-source-table \var{textual-output-port} \var{source-table})} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +This procedure writes a representation of the information stored in \var{source-table} to the port. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{get-source-table!}{\categoryprocedure}{(get-source-table! \var{textual-input-port} \var{source-table})} +\formdef{get-source-table!}{\categoryprocedure}{(get-source-table! \var{textual-input-port} \var{source-table} \var{combine})} +\returns unspecified +\listlibraries +\endentryheader + +The port must be positioned at a representation of source-table +information written by some previous call to \scheme{put-source-table}, +which reads the information and merges it into \scheme{source-table}. + +If present and non-false, \var{combine} must be a procedure and +should accept two arguments. +It is called whenever associations for the same source object are +present both in \var{source-table} and in the information read from +the port. +In this case, \var{combine} is passed two arguments: the associated +value from \var{source-table} and the associated value from the +port (in that order) and must return one value, which is recorded +as the new associated value for the source object in \var{source-table}. + +If \var{combine} is not present, \var{combine} is \scheme{#f}, or +no association for a source object read from the port already exists +in \var{source-table}, the value read from the port is recorded as +the associated value of the source object in \var{source-table}. + +\schemedisplay +(define st (make-source-table)) +(call-with-port (open-input-file "profile.out1") + (lambda (ip) (get-source-table! ip st))) +(call-with-port (open-input-file "profile.out2") + (lambda (ip) (get-source-table! ip st +))) +\endschemedisplay diff -Nru chezscheme-9.5+dfsg/csug/system.stex chezscheme-9.5.4+dfsg/csug/system.stex --- chezscheme-9.5+dfsg/csug/system.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/system.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -% Copyright 2005-2017 Cisco Systems, Inc. +% Copyright 2005-2018 Cisco Systems, Inc. % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. @@ -521,6 +521,8 @@ memory faults, illegal instructions, and the like, since the code that causes the fault or illegal instruction will continue to execute (presumably erroneously) for some time before the handler is invoked. +A finite amount of storage is used to buffer as-yet unhandled +signals, after which additional signals are dropped. \scheme{register-signal-handler} is supported only on Unix-based systems. @@ -979,6 +981,109 @@ determines the set of directories searched for source files not identified by absolute path names. +%---------------------------------------------------------------------------- + +\entryheader +\formdef{verify-loadability}{\categoryprocedure}{(verify-loadability \var{situation} \var{input} \dots)} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +\var{situation} must be one of the symbols \scheme{visit}, \scheme{revisit}, or \scheme{load}. +Each \var{input} must be a string pathname or a pair of a string pathname and a library search path. +Each of the pathnames should name a file containing object code for a set of libraries and +top-level programs, such as would be produced by +\index{\scheme{compile-program}}\scheme{compile-program}, +\index{\scheme{compile-library}}\scheme{compile-library}, +\index{\scheme{compile-whole-program}}\scheme{compile-whole-program}, +or +\index{\scheme{compile-whole-library}}\scheme{compile-whole-library}. +A library search path must be a suitable argument for +\index{\scheme{library-directories}}\scheme{library-directories}. + +\scheme{verify-loadability} verifies, without actually loading any +code or definining any libraries, whether the object files named +by the specified pathnames and their library dependencies, direct +or indirect, are present, readable, and mutually compatible. +The type of dependencies for each named object file is determined +by the \var{situation} argument: compile-time dependencies for +\var{visit}, run-time dependencies for \var{revisit} and both for +\var{load}. + +For each input pathname that is paired with a search path, +the \scheme{library-directories} parameter is parameterized to the +library search path during the recursive search for dependencies +of the programs and libraries found in the object file named by the +pathname. + +If \scheme{verify-loadabilty} finds a problem, such as a missing +library dependency or compilation-instance mismatch, it raises an +exception with an appropriate condition. +Otherwise, it returns an unspecified value. + +Since \scheme{verify-loadability} does not load or run any code +from the files it processes, it cannot determine whether errors +unrelated to missing or unreadable files or mutual compatibility +will occur when the files are actually loaded. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{load-compiled-from-port}{\categoryprocedure}{(load-compiled-from-port \var{input-port})} +\returns result of the last compiled expression +\listlibraries +\endentryheader + +\noindent +\scheme{load-compiled-from-port} reads and evaluates the object-code contents +of \var{input-port} as previously created by functions like \scheme{compile-file}, +\scheme{compile-script}, \scheme{compile-library}, and +\scheme{compile-to-port}. + +The return value is the value of the last expression whose compiled +form is in \var{input-port}. If \var{input-port} is empty, then the +result value is unspecified. +The port is left at end-of-file but is not closed. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{visit-compiled-from-port}{\categoryprocedure}{(visit-compiled-from-port \var{input-port})} +\returns result of the last compiled expression processed +\listlibraries +\endentryheader + +\noindent +\scheme{visit-compiled-from-port} reads and evaluates the object-code contents +of \var{input-port} as previously created by functions like \scheme{compile-file}, +\scheme{compile-script}, \scheme{compile-library}, and +\scheme{compile-to-port}. In the process, it skips any revisit (run-time-only) code. + +The return value is the value of the last expression whose last non-revisit compiled +form is in \var{input-port}. If there are no such forms, then the +result value is unspecified. +The port is left at end-of-file but is not closed. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{revisit-compiled-from-port}{\categoryprocedure}{(revisit-compiled-from-port \var{input-port})} +\returns result of the last compiled expression processed +\listlibraries +\endentryheader + +\noindent +\scheme{revisit-compiled-from-port} reads and evaluates the object-code contents +of \var{input-port} as previously created by functions like \scheme{compile-file}, +\scheme{compile-script}, \scheme{compile-library}, and +\scheme{compile-to-port}. In the process, it skips any visit (compile-time-only) code. + +The return value is the value of the last expression whose last non-visit compiled +form is in \var{input-port}. If there are no such forms, then the +result value is unspecified. +The port is left at end-of-file but is not closed. + %---------------------------------------------------------------------------- \entryheader @@ -1108,7 +1213,9 @@ cp0-score-limit cp0-outer-unroll-limit generate-inspector-information +generate-procedure-source-information compile-profile +generate-covin-files generate-interrupt-trap enable-cross-library-optimization \endschemedisplay @@ -1140,11 +1247,6 @@ \scheme{compile-script} is like \scheme{compile-file} but differs in that it copies the leading \scheme{#!} line from the source-file script into the object file. -When the \scheme{#!} line is present it is uncompressed in the output -file even when the parameter -\index{\scheme{compile-compressed}}\scheme{compile-compressed} is -set to \scheme{#t}, causing the remainder of the file to be compressed. -This allows it to be interpreted properly by the operating system. \scheme{compile-script} permits compiled script files to be created from source script to reduce script load time. @@ -1317,7 +1419,23 @@ use by \scheme{environment} and \scheme{eval}) if the \var{libs-visible?} argument is supplied and non-false. Any library incorporated into the resulting object file and required by -an object file left to be loaded at run time is also visible. +an object file left to be loaded at run time is also visible, as are any +libraries the object file depends upon, regardless of the value of +\var{libs-visible?}. + +\scheme{compile-whole-program} linearizes the initialization code for the +set of incorporated libraries in a way that respects static +dependencies among the libraries but not necessary dynamic dependencies +deriving from initialization-time uses of \scheme{environment} +or \scheme{eval}. +Additional static dependencies can be added in most cases to force +an ordering that allows the dynamic imports to succeed, +though not in general since a different order might be required each +time the program is run. +Adding a static dependency of one library on a second requires +adding an import of the second in the first as well as a run-time +reference to one of the variables exported by the second in the +body of the first. \var{input-filename} and \var{output-filename} must be strings. \var{input-filename} must identify a wpo file, and a wpo or object @@ -1355,42 +1473,49 @@ produced (when \scheme{generate-wpo-files} is \scheme{#t}) as well as an object file for the resulting combination of libraries. +The comment in the description of \scheme{compile-whole-program} +about the effect of initialization-code linearization on dynamic +dependencies applies to \scheme{compile-whole-library} as well. + %---------------------------------------------------------------------------- \entryheader \formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port})} \formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port} \var{sfd})} \formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port} \var{sfd} \var{wpo-port})} +\formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port} \var{sfd} \var{wpo-port} \var{covop})} \returns unspecified \listlibraries \endentryheader \noindent \var{input-port} must be a textual input port. -\var{output-port} and, if present, \var{wpo-port} must be binary output ports. -If present, \var{sfd} must be a source-file descriptor. +\var{output-port} and, if present and non-false, \var{wpo-port} must be binary output ports. +If present and non-false, \var{sfd} must be a source-file descriptor. +If present and non-false, \var{covop} must be a textual output port. \scheme{compile-port} is like \scheme{compile-file} except that it takes input from an arbitrary textual input port and sends output to an arbitrary binary output port. -If \var{sfd} is present, it is passed to the reader so that source information +If \var{sfd} is supplied, it is passed to the reader so that source information can be associated with the expressions read from \var{input-port}. It is also used to associate block-profiling information with the input file name encapsulated within \var{sfd}. -If \var{wpo-port} is present, it sends whole-program optimization information -to \var{wpo-port} for use by \scheme{compile-whole-program}. +If \var{wpo-port} is supplied, \scheme{compile-port} sends whole-program optimization information +to \var{wpo-port} for use by \scheme{compile-whole-program}, as if +(and regardless of whether) \scheme{generate-wpo-files} is set. +If \var{covop} is supplied, \scheme{compile-port} sends coverage information to +\var{covop}, as if (and regardless of whether) \scheme{generate-covin-files} is set. -None of the ports is closed automatically after compilation; it is assumed -that the program that opens the ports and invokes \scheme{compile-port} +The ports are closed automatically after compilation under the assumption +the program that opens the ports and invokes \scheme{compile-port} will take care of closing the ports. -The output will be compressed only if \var{binary-output-port} is set up -to do compression, e.g., if it was opened with the \scheme{compressed} -file option. %---------------------------------------------------------------------------- \entryheader \formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port})} \formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port} \var{sfd})} \formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port} \var{sfd} \var{wpo-port})} +\formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port} \var{sfd} \var{wpo-port} \var{covop})} \returns see below \listlibraries \endentryheader @@ -1410,17 +1535,16 @@ output port. \var{sfd} is used to associate block-profiling information with the input file name encapsulated within \var{sfd}. -If \var{wpo-port} is present, it sends whole-program optimization information -to \var{wpo-port} for use by \scheme{compile-whole-program}. +If \var{wpo-port} is present, \var{compile-to-port} sends whole-program optimization information +to \var{wpo-port} for use by \scheme{compile-whole-program}, as if +(and regardless of whether) \scheme{generate-wpo-files} is set. +If \var{covop} is present, \var{compile-to-port} sends coverage information to +\var{covop}, as if (and regardless of whether) \scheme{generate-covin-files} is set. -The output port is not closed automatically after compilation; it is assumed -that the program that opens the port and invokes \scheme{compile-to-port} +The ports are not closed automatically after compilation under the assumption +the program that opens the port and invokes \scheme{compile-to-port} will take care of closing the port. -The output will be compressed only if \var{binary-output-port} is set up -to do compression, e.g., if it was opened with the \scheme{compressed} -file option. - When \var{obj-list} contains a single list-structured element whose first-element is the symbol \scheme{top-level-program}, \scheme{compile-to-port} returns a list of the libraries the top-level @@ -1458,6 +1582,21 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{concatenate-object-files}{\categoryprocedure}{(concatenate-object-files \var{out-file} \var{in-file_1} \var{in-file_2} \dots)} +\returns unspecified +\listlibraries +\endentryheader + +\var{out-file} and each \var{in-file} must be strings. + +\scheme{concatenate-object-files} combines the header information +contained in the object files named by each \var{in-file}. It then +writes the combined header information to the file named by +\var{out-file}, followed by the remaining object code from each +input file in turn. + +%---------------------------------------------------------------------------- +\entryheader \formdef{make-boot-file}{\categoryprocedure}{(make-boot-file \var{output-filename} \var{base-boot-list} \var{input-filename} \dots)} \returns unspecified \listlibraries @@ -1835,7 +1974,7 @@ compiler would arrange to define \scheme{mvlet} before continuing with the expansion and evaluation of the \scheme{mvlet} expression, but it would not arrange to define \scheme{nodups?}. -Thus the expansion of the \scheme{mvlet} expression would fails. +Thus the expansion of the \scheme{mvlet} expression would fail. In this case it does not help to evaluate the syntactic extension alone. A solution in this case would be to move the definition of @@ -2394,6 +2533,21 @@ disabled only for the remainder of that particular file. %---------------------------------------------------------------------------- +\entryheader\label{desc:generate-procedure-source-information} +\formdef{generate-procedure-source-information}{\categorythreadparameter}{generate-procedure-source-information} +\listlibraries +\endentryheader + +\noindent +When \scheme{generate-inspector-information} is set to \scheme{#f} and +this parameter is set to \scheme{#t}, then a source location is preserved +for a procedure, even though other inspector information is not preserved. +Source information provides a small amount of debugging support at a +much lower cost in memory and object-file size than full inspector information. +If this parameter is changed during the compilation of a file, the +original value will be restored. + +%---------------------------------------------------------------------------- \entryheader \formdef{enable-cross-library-optimization}{\categorythreadparameter}{enable-cross-library-optimization} \listlibraries @@ -2427,20 +2581,6 @@ %---------------------------------------------------------------------------- \entryheader -\formdef{compile-compressed}{\categorythreadparameter}{compile-compressed} -\listlibraries -\endentryheader - -\noindent -When this parameter is \scheme{#t}, the default, \scheme{compile-file}, -\scheme{compile-library}, \scheme{compile-script}, -\scheme{compile-program}, \scheme{compile-to-file}, -\scheme{compile-whole-program}, and \scheme{strip-fasl-file} compress -the object files they create. - - -%---------------------------------------------------------------------------- -\entryheader \formdef{compile-file-message}{\categorythreadparameter}{compile-file-message} \listlibraries \endentryheader @@ -2633,6 +2773,34 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{commonization-level}{\categorythreadparameter}{commonization-level} +\listlibraries +\endentryheader + +After running the main source optimization pass (cp0) for the last time, the +compiler optionally runs a \emph{commonization} pass. +The pass commonizes the code for lambda expressions that have +identical structure by abstracting differences at certain leaves +of the program, namely constants, references to unassigned variables, +and references to primitives. +The parameter \scheme{commonization-level} controls whether commonization +is run and, if so, how aggressive it is. +Its value must be a nonnegative exact integer ranging from 0 through 9. +When the parameter is set to 0, the default, commonization is not run. +Otherwise, higher values result in more commonization. + +Commonization can undo some of the effects of cp0's inlining, can +add run-time overhead, and can complicate debugging, particularly +at higher commonization levels, which is why it is disabled by +default. +On the other hand, for macros or other meta programs that can +generate large, mostly similar lambda expressions, enabling +commonization can result in significant savings in object-code size +and even reduce run-time overhead by making more efficient use of +instruction caches. + +%---------------------------------------------------------------------------- +\entryheader \formdef{undefined-variable-warnings}{\categorythreadparameter}{undefined-variable-warnings} \listlibraries \endentryheader @@ -2707,12 +2875,17 @@ it produces to count the number of times each source-code expression is executed. This information can be -displayed in HTML format or packaged in a list for -arbitrary user-defined processing. +displayed in HTML format, or it can be packaged in a list or +source table for arbitrary user-defined processing. It can also be dumped to a file to be loaded subsequently into the compiler's database of profile information for use in source-level optimizations, such as reordering the clauses of a \scheme{case} or \scheme{exclusive-cond} form. +In connection with coverage-information (covin) files generated by the +compiler when +\index{\scheme{generate-covin-files}}\scheme{generate-covin-files} +is \scheme{#t}, profile information can also be used to gauge coverage +of a source-code base by a set of tests. The association between source-code expressions and profile counts is usually established via annotations produced by the reader and @@ -2767,7 +2940,7 @@ The profile information can be dumped via: \begin{description} -\item[\scheme{profile-dump-html}]\index{\scheme{profile-dump=html}} +\item[\scheme{profile-dump-html}]\index{\scheme{profile-dump-html}} in HTML format to allow the programmer to visualize how often each expression is executed using a color-coding system that makes it easy to spot ``hot spots,'' @@ -2968,6 +3141,38 @@ larger and less efficient, so this parameter should be set only when profile information is needed. +The profile counters for code compiled when profile instrumentation +is enabled are retained indefinitely, even if the code with which +they are associated is reclaimed by the garbage collector. +This results in more complete and accurate profile data but can lead +to space leaks in programs that dynamically generate or load code. +Such programs can avoid the potential space leak by releasing the +counters explicitly via the procedure +\index{\scheme{profile-release-counters}}\scheme{profile-release-counters}. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{generate-covin-files}{\categorythreadparameter}{generate-covin-files} +\listlibraries +\endentryheader + +When this parameter is set to \scheme{#t}, the compiler generates +``coverage-information'' (covin) files that can be used in connection with +profile information to measure coverage of a source-code base by a +set of tests. +One covin file is created for each object file, with the object-file +extension replaced by the extension \scheme{.covin}. +Each covin file contains the printed representation of a source table +(Section~\ref{SECTSYNTAXSOURCETABLES}), compressed using the compression +format and level specified by \scheme{compress-format} and +\scheme{compress-level}. +This information can be read via +\index{\scheme{get-source-table!}}\scheme{get-source-table!} and used +as a universe of source expressions to identify source expressions +that are not evaluated during the running of a set of tests. + + \entryheader \formdef{profile}{\categorysyntax}{(profile \var{source-object})} \returns unspecified @@ -2978,7 +3183,7 @@ position identified by \var{source-object} the number of times the \scheme{profile} form is executed. Profile forms are generated implicitly by the expander for source -expressions in annorated input, e.g., input read by the compiler or +expressions in annotated input, e.g., input read by the compiler or interpreter from a Scheme source file, so this form is typically useful only when unannotated source code is produced by the front end for some language that targets Scheme. @@ -3010,6 +3215,17 @@ %---------------------------------------------------------------------------- \entryheader +\formdef{profile-release-counters}{\categoryprocedure}{(profile-release-counters)} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +Calling this procedure causes profile information associated with reclaimed +code objects to be dropped. + +%---------------------------------------------------------------------------- +\entryheader \formdef{profile-dump}{\categoryprocedure}{(profile-dump)} \returns a list of pairs of source-object and count \listlibraries @@ -3036,6 +3252,62 @@ It might be used, for example, to dump profile information to a fasl file on one machine for subsequent processing on another. +\index{\scheme{with-profile-tracker}}\scheme{with-profile-tracker} +can be used to obtain the same set of counts as a source table. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{with-profile-tracker}{\categoryprocedure}{(with-profile-tracker \var{thunk})} +\formdef{with-profile-tracker}{\categoryprocedure}{(with-profile-tracker \var{preserve-existing?} \var{thunk})} +\returns a source table and the values returned by \var{thunk} +\listlibraries +\endentryheader + +\var{thunk} must be a procedure and should accept zero arguments. +It may return any number of values. + +\scheme{with-profile-tracker} invokes \var{thunk} without arguments. +If \var{thunk} returns $n$ values \scheme{\var{x_1}, \var{x_2}, \dots, \var{x_n}}, \scheme{with-profile-tracker} +returns $n+1$ values \scheme{\var{st}, \var{x_1}, \var{x_2}, \dots, \var{x_n}}, where \var{st} is a +source table associating source objects with profile counts. +If \var{preserve-existing?} is absent or \scheme{#f}, each count +represents the number of times the source expression represented +by the associated source object is evaluated during the invocation +of \var{thunk}. +Otherwise, each count represents the number of times the source +expression represented by the associated source object is evaluated +before or during the invocation of \var{thunk}. + +Profile data otherwise cleared by a call to +\index{\scheme{profile-clear}}\scheme{profile-clear} or +\index{\scheme{profile-release-counters}}\scheme{profile-release-counters} +during the invocation of \var{thunk} is included in the +resulting table. +That is, invoking these procedures while \var{thunk} is running has +no effect on the resulting counts. +On the other hand, profile data cleared before \scheme{with-profile-tracker} +is invoked is not included in the resulting table. + +The idiom \scheme{(with-profile-tracker #t values)} can be used to obtain +the current set of profile counts as a source table. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-dump}{\categoryprocedure}{(source-table-dump \var{source-table})} +\returns a list of pairs of source objects and their associated values in \var{source-table} +\listlibraries +\endentryheader + +This procedure can be used to convert a source-table produced by +\index{\scheme{with-profile-tracker}}\scheme{with-profile-tracker} or some other mechanism into the form returned +by \index{\scheme{profile-dump}}\scheme{profile-dump} for use as an argument to +\index{\scheme{profile-dump-html}}\scheme{profile-dump-html}, +\index{\scheme{profile-dump-list}}\scheme{profile-dump-list}, +or +\index{\scheme{profile-dump-data}}\scheme{profile-dump-data}. + %---------------------------------------------------------------------------- \entryheader \formdef{profile-dump-html}{\categoryprocedure}{(profile-dump-html)} @@ -3115,7 +3387,7 @@ This value of this parameter must be a string or \scheme{#f}. If it is a string, the string should contain an HTML cascading style sheet (CSS) color specifier. -If the parameter is set to string, \scheme{profile-dump-html} includes line numbers +If the parameter is set to a string, \scheme{profile-dump-html} includes line numbers in its html rendering of each source file, using the specified color. If the parameter is set to \scheme{#f}, no line numbers are included. @@ -3132,7 +3404,7 @@ profile information present in \var{dump}, which defaults to the value returned by \scheme{profile-dump}. It returns a list of entries, each of which is itself a list containing the -following elements identify one block of code and how many times it +following elements identifying one block of code and how many times it has been executed. \begin{itemize} @@ -3479,8 +3751,8 @@ is called from a script, \scheme{exit} exits from Scheme. In this case, the exit code for the Scheme process is 0 if no arguments were supplied or if the first argument is void, -the value of the first argument -if it is a 32-bit exact integer, and -1 otherwise. +the value of the first argument cast to a C int if +it is an exact integer of the host machine's bit width, and 1 otherwise. %---------------------------------------------------------------------------- \entryheader @@ -4334,7 +4606,7 @@ but also various forms of overhead, including fragmentation and reserved but not currently occupied memory, and is thus an accurate measure of the amount of heap memory currently reserved from the -the operating system for the current process. +operating system for the current process. %---------------------------------------------------------------------------- \entryheader @@ -5007,8 +5279,6 @@ environment of the process, where it is available to the current process (e.g., via \var{getenv}) and any spawned processes. -The key and value are copied into storage allocated outside of -the Scheme heap; this space is never reclaimed. \schemedisplay (putenv "SCHEME" "rocks!") diff -Nru chezscheme-9.5+dfsg/csug/threads.stex chezscheme-9.5.4+dfsg/csug/threads.stex --- chezscheme-9.5+dfsg/csug/threads.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/threads.stex 2020-08-31 02:35:12.000000000 +0000 @@ -123,10 +123,16 @@ %---------------------------------------------------------------------------- \noskipentryheader \formdef{make-mutex}{\categoryprocedure}{(make-mutex)} +\formdef{make-mutex}{\categoryprocedure}{(make-mutex \var{name})} \returns a new mutex object \listlibraries \endnoskipentryheader +\noindent +\var{name}, if supplied, must be a symbol which identifies the mutex, or +\scheme{#f} for no name. The name is printed every time the mutex is +printed, which is useful for debugging. + %---------------------------------------------------------------------------- \entryheader \formdef{mutex?}{\categoryprocedure}{(mutex? \var{obj})} @@ -202,15 +208,31 @@ Using \scheme{with-mutex} is generally more convenient and safer than using \scheme{mutex-acquire} and \scheme{mutex-release} directly. +%---------------------------------------------------------------------------- +\entryheader +\formdef{mutex-name}{\categoryprocedure}{(mutex-name \var{mutex})} +\returns the name associated with \var{mutex}, if any; otherwise \scheme{#f} +\listlibraries +\endentryheader + +\noindent +\var{mutex} must be a mutex. + \section{Conditions} %---------------------------------------------------------------------------- \noskipentryheader \formdef{make-condition}{\categoryprocedure}{(make-condition)} +\formdef{make-condition}{\categoryprocedure}{(make-condition \var{name})} \returns a new condition object \listlibraries \endnoskipentryheader +\noindent +\var{name}, if supplied, must be a symbol which identifies the condition +object, or \scheme{#f} for no name. The name is printed every time the +condition is printed, which is useful for debugging. + %---------------------------------------------------------------------------- \entryheader \formdef{thread-condition?}{\categoryprocedure}{(thread-condition? \var{obj})} @@ -272,6 +294,16 @@ \scheme{condition-broadcast} releases all of the threads waiting for the condition identified by \var{cond}. +%---------------------------------------------------------------------------- +\entryheader +\formdef{condition-name}{\categoryprocedure}{(condition-name \var{condition})} +\returns the name associated with \var{condition}, if any; otherwise \scheme{#f} +\listlibraries +\endentryheader + +\noindent +\var{condition} must be a condition. + \section{Locks\label{SECTTHREADLOCKS}} \index{locks}% @@ -406,6 +438,127 @@ value back into the field. Both return \scheme{#t} if the new value is 0, otherwise \scheme{#f}. +\section{Reference counting with ftype guardians\label{SECTTHREADFTYPEGUARDIANS}} + +\index{\scheme{ftype-guardian}}% +Applications that manage memory outside the Scheme heap can leverage +the Scheme storage management system to help perform reference +counting via \emph{ftype guardians}. +In a reference-counted memory management system, each object holds +a count of pointers to it. +The count is incremented when a new pointer is created and decremented +when a pointer is dropped. +When the count reaches zero, the object is no longer needed and the +memory it formerly occupied can be made available for some other +purpose. + +Ftype guardians are similar to guardians created by +\index{\scheme{make-guardian}}\scheme{make-guardian} +(Section~\ref{SECTGUARDWEAKPAIRS}). +The \index{\scheme{guardian?}}\scheme{guardian?} procedure returns +true for both, and the +\index{\scheme{unregister-guardian}}\scheme{unregister-guardian} +procedure can be used to unregister objects registered with either. + +\entryheader +\formdef{ftype-guardian}{\categorysyntax}{(ftype-guardian \var{ftype-name})} +\returns a new ftype guardian +\listlibraries +\endentryheader + +\var{ftype-name} must name an ftype. +The first base field of the ftype (or one of the first base fields +in the case of unions) must be a word-sized integer (iptr or uptr) +with native endianness. +This field is assumed to hold a reference count. + +The return value is a new ftype guardian \var{g}, with which +ftype-pointers of type \var{ftype-name} (or some subtype of +\var{ftype-name}) can be registered. +An ftype pointer is registered with \var{g} by invoking \var{g} +with the ftype pointer as an argument. + +An ftype guardian does not automatically protect from collection +the ftype pointers registered with it, as a normal guardian would +do. +Instead, for each registered ftype pointer that becomes inaccessible +via normal (non-weak, non-guardian pointers), the guardian decrements +the reference count of the object to which the ftype pointer points. +If the resulting reference-count value is zero, the ftype pointer +is preserved and can be retrieved from the guardian. +If the resulting reference-count value is non-zero, however, the +ftype pointer is not preserved. +Objects retrieved from an ftype guardian (by calling it without +arguments) are guaranteed to have zero reference counts, assuming +reference counts are maintained properly by code outside the +collector. + +The collector decrements the reference count using the equivalent +of \index{\scheme{ftype-locked-decr!}}\scheme{ftype-locked-decr!} +to support systems in which non-Scheme objects are stored in memory +shared by multiple processes. +In such systems, programs should themselves use +\index{\scheme{ftype-locked-incr!}}\scheme{ftype-locked-incr!} and +\scheme{ftype-locked-decr!} or non-Scheme equivalents (e.g., the C +\index{\scheme{LOCKED_INCR}}\scheme{LOCKED_INCR} and +\index{\scheme{LOCKED_INCR}}\scheme{LOCKED_DECR} macros in scheme.h, +which are described in Section~\ref{SECTFOREIGNCLIB}) to maintain +reference counts. + +The following example defines a simple ftype and an allocator for +objects of that ftype that frees any objects of that ftype that were +previously allocated and no longer accessible. + +\schemedisplay +(module (A make-A free-dropped-As) + (define-ftype A + (struct + [refcount uptr] + [data int])) + (define g (ftype-guardian A)) + (define free-dropped-As + (lambda () + (let ([a (g)]) + (when a + (printf "freeing ~s\n" (ftype-ref A (data) a)) + (foreign-free (ftype-pointer-address a)) + (free-dropped-As))))) + (define make-A + (lambda (n) + (free-dropped-As) + (let ([a (make-ftype-pointer A (foreign-alloc (ftype-sizeof A)))]) + (ftype-set! A (refcount) a 1) + (ftype-set! A (data) a n) + (g a) + a)))) +\endschemedisplay + +We can test this by allocating, dropping, and immediately collecting +ftype pointers to A. + +\schemedisplay +> (do ([i 10 (fx- i 1)]) + ((fx= i 0)) + (make-A i) + (collect)) +freeing 10 +freeing 9 +freeing 8 +freeing 7 +freeing 6 +freeing 5 +freeing 4 +freeing 3 +freeing 2 +> (free-dropped-As) +freeing 1 +\endschemedisplay + +Objects guarded by an ftype guardian might contain pointers to other +objects whose reference counts should also be incremented upon +allocation of the containing object and decremented upon freeing +of the containing object. + \section{Thread Parameters\label{SECTTHREADPARAMETERS}} diff -Nru chezscheme-9.5+dfsg/csug/tspl4/out.hidx chezscheme-9.5.4+dfsg/csug/tspl4/out.hidx --- chezscheme-9.5+dfsg/csug/tspl4/out.hidx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/tspl4/out.hidx 2020-08-31 02:35:12.000000000 +0000 @@ -241,7 +241,7 @@ #(index-entry "./records.html#./records:s22" ("rtd") ("rtd") "331" "" "") #(index-entry "./records.html#./records:s21" ("record-type descriptor") ("record-type descriptor") "331" "" "") #(index-entry "./records.html#./records:s20" ("make-record-type-descriptor") ("\\scheme{make-record-type-descriptor}") "331" "emph" "") -#(index-entry "./records.html#./records:s19" ("make-record-type-descriptor") ("make-record-type-descriptor") "331" "" "") +#(index-entry "./records.html#./records:s19" ("make-record-type-descriptor") ("\\scheme{make-record-type-descriptor}") "331" "" "") #(index-entry "./records.html#./records:s18" ("rtd") ("rtd") "331" "" "") #(index-entry "./records.html#./records:s17" ("record-type descriptor") ("record-type descriptor") "331" "" "") #(index-entry "./records.html#./records:s16" ("parent-rtd") ("\\scheme{parent-rtd}") "331" "emph" "") diff -Nru chezscheme-9.5+dfsg/csug/tspl4/tspl.idx chezscheme-9.5.4+dfsg/csug/tspl4/tspl.idx --- chezscheme-9.5+dfsg/csug/tspl4/tspl.idx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/tspl4/tspl.idx 2020-08-31 02:35:12.000000000 +0000 @@ -1171,7 +1171,7 @@ \indexentry{parent-rtd@\scheme{parent-rtd}|emph}{331} \indexentry{record-type descriptor}{331} \indexentry{rtd}{331} -\indexentry{make-record-type-descriptor}{331} +\indexentry{make-record-type-descriptor@\scheme{make-record-type-descriptor}}{331} \indexentry{make-record-type-descriptor@\scheme{make-record-type-descriptor}|emph}{331} \indexentry{record-type descriptor}{331} \indexentry{rtd}{331} diff -Nru chezscheme-9.5+dfsg/csug/use.stex chezscheme-9.5.4+dfsg/csug/use.stex --- chezscheme-9.5+dfsg/csug/use.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/csug/use.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -% Copyright 2005-2017 Cisco Systems, Inc. +% Copyright 2005-2018 Cisco Systems, Inc. % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ by an angle-bracket on a line by itself, like this: \schemedisplay -Chez Scheme Version 9.4 +Chez Scheme Version 9.5.1 Copyright 1984-2017 Cisco Systems, Inc. > @@ -687,7 +687,7 @@ (define yin (lambda () (- (yang) 1))) \endschemedisplay -defines \scheme{yin} at top level as a variable to a procedure that calls +defines \scheme{yin} at top level as a variable bound to a procedure that calls the value of the top-level variable \scheme{yang}, even though \scheme{yang} has not yet been defined. If this is followed by @@ -1011,11 +1011,9 @@ \endschemedisplay Scripts may be compiled using \index{\scheme{compile-script}}\scheme{compile-script}, which is like -\scheme{compile-file} but differs in two ways: -(1) it copies the leading \scheme{#!} line from the source-file script -into the object file, and (2) when the \scheme{#!} line is present, -it disables the default compression of the resulting file, which would -otherwise prevent it from being recognized as a script file. +\scheme{compile-file} but differs in that it +copies the leading \scheme{#!} line from the source-file script +into the object file. If {\PetiteChezScheme} is installed, but not {\ChezScheme}, \scheme{/usr/bin/scheme} may be @@ -1538,9 +1536,8 @@ to object code. Although not strictly necessary, we suggest that you concatenate your -object files, if you have more than one, into a single object file. -This may be done on Unix systems simply via the \scheme{cat} -program or on Windows via \scheme{copy}. +object files, if you have more than one, into a single object file +via the \scheme{concatenate-object-files} procedure. Placing all of the object code into a single file simplifies both building and distribution of applications. @@ -1590,8 +1587,19 @@ arguments or running a separate script to load the application code. \end{itemize} -A boot file is simply an object file, possibly containing the code for -more than one source file, prefixed by a boot header. +\index{\scheme{scheme-start}}% +When an application is packaged into a boot file, the source code +that is compiled and converted into a boot file should set +\scheme{scheme-start} to a procedure that starts the application, +as shown in the example above. +The application should not be started directly from the boot file, +because boot files are loaded before final initialization of the +Scheme system. +The value of \scheme{scheme-start} is invoked automatically after +final initialization. + +A boot file is simply an object file containing the code for +one or more source files, prefixed by a boot header. The boot header identifies a base boot file upon which the application directly depends, or possibly two or more alternatives upon which the application can be run. @@ -1630,7 +1638,7 @@ {\ChezScheme} if present, otherwise {\PetiteChezScheme}. In most cases, you can construct your application -so it does not depend upon features of {\ChezScheme} (specifically, +so it does not depend upon features of scheme.boot (specifically, the compiler) by specifying only \scheme{"petite"} in the call to \scheme{make-boot-file}. If your application calls \scheme{eval}, however, and you wish to @@ -1639,6 +1647,28 @@ both \scheme{"scheme"} and \scheme{"petite"} is appropriate. +Here is how we might create and run a simple ``echo'' application +from a Linux shell: + +\schemedisplay +echo '(suppress-greeting #t)' > myecho.ss +echo '(scheme-start (lambda fns (printf "~{~a~^ ~}\n" fns)))' >> myecho.ss +echo '(compile-file "myecho.ss") \ + (make-boot-file "myecho.boot" (quote ("petite")) "myecho.so")' \ + | scheme -q +scheme -b myecho.boot hello world +\endschemedisplay + +If we take the extra step of installing a copy of the {\PetiteChezScheme} +executable as \scheme{myecho} and copying \scheme{myecho.boot} into +the same directory as \scheme{petite.boot} (or set SCHEMEHEAPDIRS to +include the directory containing myecho.boot), we can simply invoke +\scheme{myecho} to run our echo application: + +\schemedisplay +myecho hello world +\endschemedisplay + \parheader{Distributing the Application} Distributing an application involves can be as simple as creating a distribution package that includes the following items: @@ -1655,7 +1685,7 @@ if not already installed on the target system. It should install the application boot file in the same directory as the {\PetiteChezScheme} boot file petite.boot is installed, -and it should should install the application shared libraries, if any, +and it should install the application shared libraries, if any, either in the same location or in a standard location for shared libraries on the target system. It should also create a link to or copy of the {\PetiteChezScheme} @@ -1757,7 +1787,7 @@ Most of the options are described elsewhere in this chapter, and a few are self-explanatory. -The remainder pertain the loading of boot files at system start-up +The remainder pertain to the loading of boot files at system start-up time and are described below. \index{boot files}% diff -Nru chezscheme-9.5+dfsg/debian/changelog chezscheme-9.5.4+dfsg/debian/changelog --- chezscheme-9.5+dfsg/debian/changelog 2018-09-30 11:16:41.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/changelog 2020-09-17 19:27:16.000000000 +0000 @@ -1,3 +1,71 @@ +chezscheme (9.5.4+dfsg-3) unstable; urgency=medium + + * debian/rules: Only override dh_link if chezscheme is built. + Thanks to Axel Beckert for the report (Closes: #970507) + + -- Göran Weinholt Thu, 17 Sep 2020 21:27:16 +0200 + +chezscheme (9.5.4+dfsg-2) unstable; urgency=medium + + * Upload to unstable + + -- Göran Weinholt Tue, 15 Sep 2020 21:18:17 +0200 + +chezscheme (9.5.4+dfsg-1) experimental; urgency=medium + + [ Göran Weinholt ] + * New upstream release + * debian/copyright: + - Exclude external projects from the repacked tarball. + - Fix readability, cut redundant NOTICE, new years. + - Use Expat for debian/, to have one less license. + * debian/watch: Repack upstream's tarballs + * debian/gbp.conf: Use new DEP-14 branch names + * debian/patches: Rebase patches + * debian/README.source: Updated bootstrap instructions + * 0005-continuation-repair-for-return-arity-error.patch: + - Patch from upstream git to fix a crash + * 0006-make-arm32-return-address-encoding-montonic-w.r.t.-o.patch: + - Patch from Racket-on-Chez to fix armhf (Closes: #968054) + * 0007-Add-arm32le-boot-files-missing-in-the-release-tarbal: + - Adds files for bootstrapping armhf builds + * debian/control: + - Add native build-depends on uuid-dev. + - Add new liblz4 build-dependency. + - New location for Vcs-{Git,Browser} + * debian/README.Debian: no longer relevant, deleted + * Drop the 0001-Dynamically-link-... patch, obsolete + * debian/rules: + - Link with -lz & -lz4 + - Fix for cross-compilation + * Drop the chezschemeX.Y.Z versioning scheme. It was intended to + allow for packaging of Scheme programs and libraries built with + Chez, but that did not pan out. The ABI is not stable enough + for that to be practical. + * 0007-build-with-marm-on-armhf: + - Build with -marm on armhf to fix a Thumb-related build error. + * 0008-Add-usr-share-r6rs-to-the-library-path: + - New patch to use libraries from /usr/share/r6rs by default. + + [ Helmut Grohne ] + * Fix FTCBFS: Add missing native build-depends zlib and ncurses. + (Closes: #967003) + + -- Göran Weinholt Sat, 05 Sep 2020 21:05:13 +0200 + +chezscheme (9.5.2+dfsg-1) experimental; urgency=low + + * New upstream release + * debian/copyright: Note non-DFSG files in Files-Excluded + * debian/watch: Fix the syntax, which was wrong all along + * debian/gbp.conf: Remove quotes on tags and set upstream-branch + * debian/control: Add uuid-dev to Build-Depends-Arch + * Drop xlocale.h and FMTBUFSIZE patches; rebase remaining patches + * chezscheme.post{inst,rm} should have been chezschemeVER.post{inst,rm} + * debian/rules: Add {csug,release_notes]/Makefile to the cleanup + + -- Göran Weinholt Sun, 21 Apr 2019 11:46:08 +0200 + chezscheme (9.5+dfsg-6) unstable; urgency=medium * Remove Built-Using (not needed since policy 4.1.3) diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5-dev.install chezscheme-9.5.4+dfsg/debian/chezscheme9.5-dev.install --- chezscheme-9.5+dfsg/debian/chezscheme9.5-dev.install 2018-05-18 19:48:25.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5-dev.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#!/usr/bin/dh-exec -build/boot/${HOST_MACHINE_TYPE}/equates.h => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/equates.h -build/boot/${HOST_MACHINE_TYPE}/kernel.o => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/kernel.o -build/boot/${HOST_MACHINE_TYPE}/main.o => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/main.o -usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.h => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.h diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5-dev.lintian-overrides chezscheme-9.5.4+dfsg/debian/chezscheme9.5-dev.lintian-overrides --- chezscheme-9.5+dfsg/debian/chezscheme9.5-dev.lintian-overrides 2018-05-03 20:01:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -# Upstream has their own way to specify arch triplets. -chezscheme9.5-dev binary: arch-dependent-file-not-in-arch-specific-directory usr/lib/csv*/*/kernel.o -chezscheme9.5-dev binary: arch-dependent-file-not-in-arch-specific-directory usr/lib/csv*/*/main.o diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5-doc.doc-base chezscheme-9.5.4+dfsg/debian/chezscheme9.5-doc.doc-base --- chezscheme-9.5+dfsg/debian/chezscheme9.5-doc.doc-base 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5-doc.doc-base 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -Document: csug9.5 -Title: Chez Scheme User Guide 9.5 -Author: R. Kent Dybvig -Abstract: This manual shows how to use Chez Scheme, a reliable, high - performance Scheme compiler. It contains instructions for using the - compiler and the interpreter, shows the extensions made to R6RS - Scheme and includes a reference for all built-in libraries. -Section: Programming/Scheme - -Format: PDF -Files: /usr/share/doc/chezscheme9.5-doc/csug.pdf.gz - -Format: HTML -Index: /usr/share/doc/chezscheme9.5-doc/html/index.html -Files: /usr/share/doc/chezscheme9.5-doc/html/*.html diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5-doc.docs chezscheme-9.5.4+dfsg/debian/chezscheme9.5-doc.docs --- chezscheme-9.5+dfsg/debian/chezscheme9.5-doc.docs 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5-doc.docs 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -build/csug/csug.pdf -debian/tmp/usr/share/doc/chezscheme-doc/html/ -debian/tmp/usr/share/doc/chezscheme-doc/release_notes.* diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5.docs chezscheme-9.5.4+dfsg/debian/chezscheme9.5.docs --- chezscheme-9.5+dfsg/debian/chezscheme9.5.docs 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5.docs 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -debian/README.Debian -README.md diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5.examples chezscheme-9.5.4+dfsg/debian/chezscheme9.5.examples --- chezscheme-9.5+dfsg/debian/chezscheme9.5.examples 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5.examples 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -examples/* diff -Nru chezscheme-9.5+dfsg/debian/chezscheme9.5.install chezscheme-9.5.4+dfsg/debian/chezscheme9.5.install --- chezscheme-9.5+dfsg/debian/chezscheme9.5.install 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme9.5.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#!/usr/bin/dh-exec -usr/bin/scheme => usr/bin/chezscheme${CHEZ_VERSION} -usr/bin/petite => usr/bin/petite${CHEZ_VERSION} -usr/bin/scheme-script => usr/bin/scheme-script${CHEZ_VERSION} -usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/petite.boot => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/petite.boot -usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.boot => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.boot diff -Nru chezscheme-9.5+dfsg/debian/chezscheme-dev.install chezscheme-9.5.4+dfsg/debian/chezscheme-dev.install --- chezscheme-9.5+dfsg/debian/chezscheme-dev.install 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme-dev.install 2020-09-17 19:24:49.000000000 +0000 @@ -0,0 +1,5 @@ +#!/usr/bin/dh-exec +build/boot/${HOST_MACHINE_TYPE}/equates.h => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/equates.h +build/boot/${HOST_MACHINE_TYPE}/kernel.o => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/kernel.o +build/boot/${HOST_MACHINE_TYPE}/main.o => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/main.o +usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.h => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.h diff -Nru chezscheme-9.5+dfsg/debian/chezscheme-dev.lintian-overrides chezscheme-9.5.4+dfsg/debian/chezscheme-dev.lintian-overrides --- chezscheme-9.5+dfsg/debian/chezscheme-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme-dev.lintian-overrides 2020-09-07 17:08:14.000000000 +0000 @@ -0,0 +1,3 @@ +# Upstream has their own way to specify arch triplets. +chezscheme-dev binary: arch-dependent-file-not-in-arch-specific-directory usr/lib/csv*/*/kernel.o +chezscheme-dev binary: arch-dependent-file-not-in-arch-specific-directory usr/lib/csv*/*/main.o diff -Nru chezscheme-9.5+dfsg/debian/chezscheme-doc.doc-base chezscheme-9.5.4+dfsg/debian/chezscheme-doc.doc-base --- chezscheme-9.5+dfsg/debian/chezscheme-doc.doc-base 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme-doc.doc-base 2020-09-07 17:08:14.000000000 +0000 @@ -0,0 +1,15 @@ +Document: csug +Title: Chez Scheme User Guide +Author: R. Kent Dybvig +Abstract: This manual shows how to use Chez Scheme, a reliable, high + performance Scheme compiler. It contains instructions for using the + compiler and the interpreter, shows the extensions made to R6RS + Scheme and includes a reference for all built-in libraries. +Section: Programming/Scheme + +Format: PDF +Files: /usr/share/doc/chezscheme-doc/csug.pdf.gz + +Format: HTML +Index: /usr/share/doc/chezscheme-doc/html/index.html +Files: /usr/share/doc/chezscheme-doc/html/*.html diff -Nru chezscheme-9.5+dfsg/debian/chezscheme-doc.docs chezscheme-9.5.4+dfsg/debian/chezscheme-doc.docs --- chezscheme-9.5+dfsg/debian/chezscheme-doc.docs 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme-doc.docs 2020-09-17 19:24:49.000000000 +0000 @@ -0,0 +1,3 @@ +build/csug/csug.pdf +debian/tmp/usr/share/doc/chezscheme-doc/html/ +debian/tmp/usr/share/doc/chezscheme-doc/release_notes.* diff -Nru chezscheme-9.5+dfsg/debian/chezscheme.docs chezscheme-9.5.4+dfsg/debian/chezscheme.docs --- chezscheme-9.5+dfsg/debian/chezscheme.docs 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme.docs 2020-09-07 17:08:14.000000000 +0000 @@ -0,0 +1 @@ +README.md diff -Nru chezscheme-9.5+dfsg/debian/chezscheme.examples chezscheme-9.5.4+dfsg/debian/chezscheme.examples --- chezscheme-9.5+dfsg/debian/chezscheme.examples 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme.examples 2020-09-17 19:24:49.000000000 +0000 @@ -0,0 +1 @@ +examples/* diff -Nru chezscheme-9.5+dfsg/debian/chezscheme.install chezscheme-9.5.4+dfsg/debian/chezscheme.install --- chezscheme-9.5+dfsg/debian/chezscheme.install 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme.install 2020-09-17 19:24:49.000000000 +0000 @@ -0,0 +1,5 @@ +#!/usr/bin/dh-exec +usr/bin/scheme => usr/bin/chezscheme +usr/bin/petite => usr/bin/petite +usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/petite.boot => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/petite.boot +usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.boot => usr/lib/csv${CHEZ_VERSION}/${HOST_MACHINE_TYPE}/scheme.boot diff -Nru chezscheme-9.5+dfsg/debian/chezscheme.postinst chezscheme-9.5.4+dfsg/debian/chezscheme.postinst --- chezscheme-9.5+dfsg/debian/chezscheme.postinst 2018-09-30 11:16:41.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme.postinst 2020-09-07 17:08:14.000000000 +0000 @@ -3,21 +3,20 @@ set -e if [ "$1" = "configure" ]; then - CHEZ_VERSION=9.5 update-alternatives --install /usr/bin/scheme \ scheme \ - /usr/bin/chezscheme${CHEZ_VERSION} \ + /usr/bin/chezscheme \ 20 \ --slave /usr/share/man/man1/scheme.1.gz \ scheme.1.gz \ - /usr/share/man/man1/chezscheme${CHEZ_VERSION}.1.gz + /usr/share/man/man1/chezscheme.1.gz update-alternatives --install /usr/bin/scheme-script \ scheme-script \ - /usr/bin/chezscheme${CHEZ_VERSION} \ + /usr/bin/chezscheme \ 20 \ --slave /usr/share/man/man1/scheme-script.1.gz \ scheme-script.1.gz \ - /usr/share/man/man1/scheme-script${CHEZ_VERSION}.1.gz + /usr/share/man/man1/scheme-script-chez.1.gz fi #DEBHELPER# diff -Nru chezscheme-9.5+dfsg/debian/chezscheme.prerm chezscheme-9.5.4+dfsg/debian/chezscheme.prerm --- chezscheme-9.5+dfsg/debian/chezscheme.prerm 2018-09-30 11:10:45.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/chezscheme.prerm 2020-09-07 17:08:14.000000000 +0000 @@ -3,9 +3,8 @@ set -e if [ "$1" = "remove" ]; then - CHEZ_VERSION=9.5 - update-alternatives --remove scheme /usr/bin/chezscheme${CHEZ_VERSION} - update-alternatives --remove scheme-script /usr/bin/chezscheme${CHEZ_VERSION} + update-alternatives --remove scheme /usr/bin/chezscheme + update-alternatives --remove scheme-script /usr/bin/chezscheme fi #DEBHELPER# diff -Nru chezscheme-9.5+dfsg/debian/control chezscheme-9.5.4+dfsg/debian/control --- chezscheme-9.5+dfsg/debian/control 2018-09-30 11:10:45.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/control 2020-09-17 19:24:49.000000000 +0000 @@ -5,39 +5,53 @@ Uploaders: Barak A. Pearlmutter Build-Depends: debhelper (>= 10), dh-exec Build-Depends-Arch: zlib1g-dev | libz-dev, + zlib1g-dev:native | libz-dev:native, + liblz4-dev, + liblz4-dev:native, libncurses5-dev | libncurses-dev | ncurses-dev, + libncurses5-dev:native | libncurses-dev:native | ncurses-dev:native, + uuid-dev, + uuid-dev:native, libx11-dev, - r6rs-nanopass-dev, - chezscheme9.5 [armhf] , - chezscheme9.5-dev [armhf] + r6rs-nanopass-dev Build-Depends-Indep: stex Standards-Version: 4.1.4 Homepage: https://cisco.github.io/ChezScheme/ -Vcs-Git: https://salsa.debian.org/debian/chezscheme.git -Vcs-Browser: https://salsa.debian.org/debian/chezscheme +Vcs-Git: https://salsa.debian.org/scheme-team/chezscheme.git +Vcs-Browser: https://salsa.debian.org/scheme-team/chezscheme -Package: chezscheme9.5 +Package: chezscheme Architecture: i386 amd64 armhf Multi-Arch: foreign Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Reliable, high performance Scheme compiler (version 9.5) +Conflicts: ikarus (<< 0.0.3+bzr.2010.01.26-5) +Suggests: chezscheme-doc +Description: Reliable, high performance Scheme compiler Chez Scheme is both a programming language and an implementation of that language, with supporting tools and documentation. . - This package contains the executables and the boot files. + As a superset of the language described in the Revised^6 Report on + the Algorithmic Language Scheme (R6RS), Chez Scheme supports all + standard features of Scheme, including first-class procedures, proper + treatment of tail calls, continuations, user-defined records, + libraries, exceptions, and hygienic macro expansion. + . + Chez Scheme also includes extensive support for interfacing with C + and other languages, support for multiple threads possibly running on + multiple cores, non-blocking I/O, and many other features. -Package: chezscheme9.5-dev +Package: chezscheme-dev Section: devel Architecture: i386 amd64 armhf Multi-Arch: same -Depends: chezscheme9.5 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Depends: chezscheme (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} Description: Reliable, high performance Scheme compiler (C development files) Chez Scheme is both a programming language and an implementation of that language, with supporting tools and documentation. . This package contains the runtime kernel and C headers. -Package: chezscheme9.5-doc +Package: chezscheme-doc Section: doc Architecture: all Multi-Arch: foreign @@ -48,25 +62,3 @@ that language, with supporting tools and documentation. . This package contains the documentation. - -Package: chezscheme -Architecture: all -Multi-Arch: foreign -Depends: chezscheme9.5, ${misc:Depends} -Suggests: chezscheme9.5-doc -Conflicts: ikarus (<< 0.0.3+bzr.2010.01.26-5) -Description: Reliable, high performance Scheme compiler - Chez Scheme is both a programming language and an implementation of - that language, with supporting tools and documentation. - . - As a superset of the language described in the Revised^6 Report on - the Algorithmic Language Scheme (R6RS), Chez Scheme supports all - standard features of Scheme, including first-class procedures, proper - treatment of tail calls, continuations, user-defined records, - libraries, exceptions, and hygienic macro expansion. - . - Chez Scheme also includes extensive support for interfacing with C - and other languages, support for multiple threads possibly running on - multiple cores, non-blocking I/O, and many other features. - . - This package depends on the latest Chez Scheme version. diff -Nru chezscheme-9.5+dfsg/debian/copyright chezscheme-9.5.4+dfsg/debian/copyright --- chezscheme-9.5+dfsg/debian/copyright 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/copyright 2020-09-07 17:08:13.000000000 +0000 @@ -1,57 +1,18 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Chez Scheme Source: https://github.com/cisco/ChezScheme/ +Files-Excluded: csug/canned/cisco-logo-large.png + csug/canned/cisco-logo-orig.png + csug/canned/cisco-logo.png + examples/rsa.ss + lz4 + nanopass + stex + zlib Files: * -Copyright: 1984-2017, Cisco Systems, Inc. -License: Apache-2.0 - +Copyright: 1984-2020, Cisco Systems, Inc. License: Apache-2.0 - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - . - http://www.apache.org/licenses/LICENSE-2.0 - . - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - . - On Debian systems, the complete text of the Apache License, - Version 2.0 can be found in '/usr/share/common-licenses/Apache-2.0'. - -Files: NOTICE -Copyright: 1984-2017 Cisco Systems, Inc. -License: NOTICE - This product includes code developed by Cisco Systems, Inc. - . - This product also includes separately copyrighted: - . - * Unicode data files from the Unicode Consortium - . - * Unicode data-file processing code developed by Abdulaziz Ghuloum and - R. Kent Dybvig - . - * sorting code developed by Olin Shivers - . - * example programs, an html formatting module, and documentation - support files developed by R. Kent Dybvig - . - * test code and other code used for testing developed by - William D Clinger, by Dirk Lutzebaeck, and by Oscar Waddell and - R. Kent Dybvig. - . - * code derived from C. David Boyer's command-line editor - . - Builds of this product incorporate separately copyrighted code from: - . - * the Nanopass Infrastructure, developed by Dipanwita Sarkar, - Andrew W. Keep, R. Kent Dybvig, and Oscar Waddell - . - * the Zlib compression library, developed by Jean-loup Gailly and - Mark Adler Files: csug/csug8.cls csug/csug8.hcls @@ -71,6 +32,71 @@ Copyright: 1987-1996, R. Kent Dybvig License: Expat +Files: mats/oop.ss +Copyright: 2002 Oscar Waddell and R. Kent Dybvig +License: Expat + +Files: mats/5_4.ms + mats/bytevector.ms + mats/io.ms +Copyright: 1984-2017 Cisco Systems, Inc. + 2006-2007 William D Clinger. +License: Apache-2.0 and CLINGER + +Files: mats/format.ms +Copyright: 1984-2017 Cisco Systems, Inc. +License: Apache-2.0 and LUTZEBAECK + +Files: s/5_4.ss +Copyright: 1984-2017, Cisco Systems, Inc. + 2006-2008, Abdulaziz Ghuloum + 2008, R. Kent Dybvig +License: Apache-2.0 and Expat + +Files: s/5_6.ss +Copyright: 1984-2017, Cisco Systems, Inc. + 1998, Olin Shivers +License: Apache-2.0 and SHIVERS + +Files: s/pdhtml.ss +Copyright: 2005, R. Kent Dybvig + 1984-2017 Cisco Systems, Inc. +License: Apache-2.0 and Expat + +Files: s/expeditor.ss +Copyright: 2007, R. Kent Dybvig + 1989-1994 C. David Boyer +License: Apache-2.0 and BOYER + +Files: unicode/* +Copyright: 2006-2008, Abdulaziz Ghuloum + 2008, R. Kent Dybvig +License: Expat + +Files: unicode/UNIDATA/* +Copyright: 1991-2014 Unicode, Inc. +License: UNICODE + +Files: debian/* +Copyright: 2017-2020 Göran Weinholt +License: Expat + +License: Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + http://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + . + On Debian systems, the complete text of the Apache License, + Version 2.0 can be found in '/usr/share/common-licenses/Apache-2.0'. + License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -90,17 +116,6 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Files: mats/oop.ss -Copyright: 2002 Oscar Waddell and R. Kent Dybvig -License: Expat - -Files: mats/5_4.ms - mats/bytevector.ms - mats/io.ms -Copyright: 1984-2017 Cisco Systems, Inc. - 2006-2007 William D Clinger. -License: Apache-2.0 and CLINGER - License: CLINGER This is part a test suite not included in the binary package. . @@ -113,29 +128,16 @@ ; make to this software so that they may be incorporated within it to ; the benefit of the Scheme community. -Files: mats/format.ms -Copyright: 1984-2017 Cisco Systems, Inc. -License: Apache-2.0 and LUTZEBAECK - License: LUTZEBAECK - This is part a test suite not included in the binary package. + This is part a test suite not included in the binary package. A copy + exists in the archive already in the slib package, written around the + years 1991-1993. . ;; "formatst.scm" SLIB FORMAT Version 3.0 conformance test ; Written by Dirk Lutzebaeck (lutzeb@cs.tu-berlin.de) . ; This code is in the public domain. -Files: s/5_4.ss -Copyright: 1984-2017, Cisco Systems, Inc. - 2006-2008, Abdulaziz Ghuloum - 2008, R. Kent Dybvig -License: Apache-2.0 and Expat - -Files: s/5_6.ss -Copyright: 1984-2017, Cisco Systems, Inc. - 1998, Olin Shivers -License: Apache-2.0 and SHIVERS - License: SHIVERS ;; dovsort! is a modified version of Olin Shiver's code for opportunistic ;; vector merge sort, based on a version found in the MzScheme Version 360 @@ -150,16 +152,6 @@ ;; Blah blah blah. Don't you think source files should contain more lines ;; of code than copyright notice? -Files: s/pdhtml.ss -Copyright: 2005, R. Kent Dybvig - 1984-2017 Cisco Systems, Inc. -License: Apache-2.0 and Expat - -Files: s/expeditor.ss -Copyright: 2007, R. Kent Dybvig - 1989-1994 C. David Boyer -License: Apache-2.0 and BOYER - License: BOYER ;;; This code is based on David Boyer's command-line editor, which has the ;;; following copyright: @@ -174,13 +166,6 @@ ;;; The present implementation retains some of the basic design but little ;;; of the original code. -Files: unicode/* -Copyright: 2006-2008, Abdulaziz Ghuloum - 2008, R. Kent Dybvig -License: Expat - -Files: unicode/UNIDATA/* -Copyright: 1991-2014 Unicode, Inc. License: UNICODE These files are downloaded from unicode.org. Newer versions are available in the Debian package unicode-data. The 2014 version @@ -243,12 +228,3 @@ shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. - -Files: debian/* -Copyright: 2017 Göran Weinholt -License: GPL-2+ - -License: GPL-2+ - Licensed under the GNU GPL version 2 or, at you option, any later version. - On Debian systems, the complete text of the GNU General - Public License version 2 can be found in /usr/share/common-licenses/GPL-2 diff -Nru chezscheme-9.5+dfsg/debian/gbp.conf chezscheme-9.5.4+dfsg/debian/gbp.conf --- chezscheme-9.5+dfsg/debian/gbp.conf 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/gbp.conf 2020-09-05 14:59:41.000000000 +0000 @@ -1,10 +1,4 @@ -[import-orig] +[DEFAULT] pristine-tar = True -debian-branch = debian/sid -upstream-tag = 'v%(version)s' - -[buildpackage] -upstream-tag = 'v%(version)s' -pristine-tar = True -debian-branch = debian/sid -upstream-branch = master +debian-branch = debian/latest +upstream-branch = upstream/latest diff -Nru chezscheme-9.5+dfsg/debian/menu chezscheme-9.5.4+dfsg/debian/menu --- chezscheme-9.5+dfsg/debian/menu 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/menu 2020-09-07 17:08:14.000000000 +0000 @@ -1,2 +1,2 @@ -?package(chezscheme9.5):needs="text" section="Applications/Programming"\ - title="Chez Scheme" command="/usr/bin/chezscheme9.5" +?package(chezscheme):needs="text" section="Applications/Programming"\ + title="Chez Scheme" command="/usr/bin/chezscheme" diff -Nru chezscheme-9.5+dfsg/debian/patches/0001-Dynamically-link-with-the-system-s-installed-zlib.patch chezscheme-9.5.4+dfsg/debian/patches/0001-Dynamically-link-with-the-system-s-installed-zlib.patch --- chezscheme-9.5+dfsg/debian/patches/0001-Dynamically-link-with-the-system-s-installed-zlib.patch 2018-05-18 20:16:25.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0001-Dynamically-link-with-the-system-s-installed-zlib.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -From: =?utf-8?q?G=C3=B6ran_Weinholt?= -Date: Sun, 10 Dec 2017 19:16:01 +0100 -Subject: Dynamically link with the system's installed zlib - -This changes the C makefiles to use $(LD), to stop building zlib, and -to not statically link -lz into the kernel. ---- - c/Mf-arm32le | 8 ++++---- - c/Mf-base | 6 ------ - c/Mf-ta6le | 8 ++++---- - c/Mf-ti3le | 8 ++++---- - 4 files changed, 12 insertions(+), 18 deletions(-) - -diff --git a/c/Mf-arm32le b/c/Mf-arm32le -index c4564a5..d6f8abb 100644 ---- a/c/Mf-arm32le -+++ b/c/Mf-arm32le -@@ -16,7 +16,7 @@ - m = arm32le - Cpu = ARMV6 - --mdclib = -lm -ldl -lncurses -lrt -+mdclib = -lm -ldl -lncurses -lrt -lz - C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS} - o = o - mdsrc = arm32le.c -@@ -26,12 +26,12 @@ mdobj = arm32le.o - .SUFFIXES: .c .o - - .c.o: -- $C -c -D${Cpu} -I${Include} -I../zlib $*.c -+ $C -c -D${Cpu} -I${Include} $*.c - - include Mf-base - --${Kernel}: ${kernelobj} ../zlib/libz.a -- ld -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a -+${Kernel}: ${kernelobj} -+ $(LD) -r -X -o ${Kernel} ${kernelobj} - - ${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} -diff --git a/c/Mf-base b/c/Mf-base -index cc23047..4c101a1 100644 ---- a/c/Mf-base -+++ b/c/Mf-base -@@ -54,14 +54,8 @@ scheme.o main.o: config.h - ${kernelobj}: system.h types.h version.h externs.h globals.h segment.h thread.h sort.h - ${kernelobj}: ${Include}/equates.h ${Include}/scheme.h - ${mainobj}: ${Include}/scheme.h --${kernelobj}: ../zlib/zconf.h ../zlib/zlib.h - gc-ocd.o gc-oce.o: gc.c - --../zlib/zlib.h ../zlib/zconf.h: ../zlib/configure.log -- --../zlib/libz.a: ../zlib/configure.log -- (cd ../zlib; ${MAKE}) -- - clean: - rm -f *.$o ${mdclean} - rm -f Make.out -diff --git a/c/Mf-ta6le b/c/Mf-ta6le -index 206afc5..1141c12 100644 ---- a/c/Mf-ta6le -+++ b/c/Mf-ta6le -@@ -16,7 +16,7 @@ - m = ta6le - Cpu = X86_64 - --mdclib = -lm -ldl -lncurses -lpthread -lrt -+mdclib = -lm -ldl -lncurses -lpthread -lrt -lz - C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS} - o = o - mdsrc = i3le.c -@@ -26,12 +26,12 @@ mdobj = i3le.o - .SUFFIXES: .c .o - - .c.o: -- $C -c -D${Cpu} -I${Include} -I../zlib $*.c -+ $C -c -D${Cpu} -I${Include} $*.c - - include Mf-base - --${Kernel}: ${kernelobj} ../zlib/libz.a -- ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a -+${Kernel}: ${kernelobj} -+ $(LD) -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} - - ${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} -diff --git a/c/Mf-ti3le b/c/Mf-ti3le -index 3883602..c7308c5 100644 ---- a/c/Mf-ti3le -+++ b/c/Mf-ti3le -@@ -16,7 +16,7 @@ - m = ti3le - Cpu = I386 - --mdclib = -lm -ldl -lncurses -lpthread -lrt -+mdclib = -lm -ldl -lncurses -lpthread -lrt -lz - C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS} - o = o - mdsrc = i3le.c -@@ -26,12 +26,12 @@ mdobj = i3le.o - .SUFFIXES: .c .o - - .c.o: -- $C -c -D${Cpu} -I${Include} -I../zlib $*.c -+ $C -c -D${Cpu} -I${Include} $*.c - - include Mf-base - --${Kernel}: ${kernelobj} ../zlib/libz.a -- ld -melf_i386 -r -X -o ${Kernel} ${kernelobj} ../zlib/libz.a -+${Kernel}: ${kernelobj} -+ $(LD) -melf_i386 -r -X -o ${Kernel} ${kernelobj} - - ${Scheme}: ${Kernel} ${Main} - $C -rdynamic -o ${Scheme} ${Kernel} ${Main} ${mdclib} ${LDFLAGS} diff -Nru chezscheme-9.5+dfsg/debian/patches/0002-configure-Do-not-download-dependencies.patch chezscheme-9.5.4+dfsg/debian/patches/0002-configure-Do-not-download-dependencies.patch --- chezscheme-9.5+dfsg/debian/patches/0002-configure-Do-not-download-dependencies.patch 2018-05-18 20:16:25.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0002-configure-Do-not-download-dependencies.patch 2020-09-05 19:05:07.000000000 +0000 @@ -1,16 +1,17 @@ From: =?utf-8?q?G=C3=B6ran_Weinholt?= Date: Sun, 10 Dec 2017 19:17:24 +0100 Subject: configure: Do not download dependencies +Forwarded: not-needed --- - configure | 16 ---------------- - 1 file changed, 16 deletions(-) + configure | 28 ---------------------------- + 1 file changed, 28 deletions(-) diff --git a/configure b/configure -index 4f035e3..5c0c196 100755 +index 2780d81..3a2971a 100755 --- a/configure +++ b/configure -@@ -310,22 +310,6 @@ if [ "$m" = "" -o ! -f boot/$m/scheme.boot ] ; then +@@ -409,34 +409,6 @@ if [ "$m" = "" -o ! -f boot/$m/scheme.boot ] ; then exit 1 fi @@ -18,15 +19,27 @@ - git submodule init && git submodule update || exit 1 -else - if [ ! -f 'nanopass/nanopass.ss' ] ; then -- rmdir nanopass && (curl -L -o v1.9.tar.gz https://github.com/nanopass/nanopass-framework-scheme/archive/v1.9.tar.gz && tar -zxf v1.9.tar.gz && mv nanopass-framework-scheme-1.9 nanopass && rm v1.9.tar.gz) || exit 1 +- rmdir nanopass > /dev/null 2>&1 +- (curl -L -o v1.9.1.tar.gz https://github.com/nanopass/nanopass-framework-scheme/archive/v1.9.1.tar.gz && tar -zxf v1.9.1.tar.gz && mv nanopass-framework-scheme-1.9.1 nanopass && rm v1.9.1.tar.gz) || exit 1 - fi - -- if [ ! -f 'zlib/configure' ] ; then -- rmdir zlib && (curl -L -o v1.2.11.tar.gz https://github.com/madler/zlib/archive/v1.2.11.tar.gz && tar -xzf v1.2.11.tar.gz && mv zlib-1.2.11 zlib && rm v1.2.11.tar.gz) || exit 1 +- if [ "${zlibDep}" != "" ] ; then +- if [ ! -f 'zlib/configure' ] ; then +- rmdir zlib > /dev/null 2>&1 +- (curl -L -o v1.2.11.tar.gz https://github.com/madler/zlib/archive/v1.2.11.tar.gz && tar -xzf v1.2.11.tar.gz && mv zlib-1.2.11 zlib && rm v1.2.11.tar.gz) || exit 1 +- fi +- fi +- +- if [ "${LZ4Dep}" != "" ] ; then +- if [ ! -f 'lz4/lib/Makefile' ] ; then +- rmdir lz4 > /dev/null 2>&1 +- (curl -L -o v1.9.2.tar.gz https://github.com/lz4/lz4/archive/v1.9.2.tar.gz && tar -xzf v1.9.2.tar.gz && mv lz4-1.9.2 lz4 && rm v1.9.2.tar.gz) || exit 1 +- fi - fi - - if [ ! -f 'stex/Mf-stex' ] ; then -- rmdir stex && (curl -L -o v1.2.1.tar.gz https://github.com/dybvig/stex/archive/v1.2.1.tar.gz && tar -zxf v1.2.1.tar.gz && mv stex-1.2.1 stex && rm v1.2.1.tar.gz) || exit 1 +- rmdir stex > /dev/null 2>&1 +- (curl -L -o v1.2.2.tar.gz https://github.com/dybvig/stex/archive/v1.2.2.tar.gz && tar -zxf v1.2.2.tar.gz && mv stex-1.2.2 stex && rm v1.2.2.tar.gz) || exit 1 - fi -fi - diff -Nru chezscheme-9.5+dfsg/debian/patches/0003-Support-using-the-system-s-installed-stex-and-nanopa.patch chezscheme-9.5.4+dfsg/debian/patches/0003-Support-using-the-system-s-installed-stex-and-nanopa.patch --- chezscheme-9.5+dfsg/debian/patches/0003-Support-using-the-system-s-installed-stex-and-nanopa.patch 2018-05-18 20:16:25.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0003-Support-using-the-system-s-installed-stex-and-nanopa.patch 2020-09-05 19:05:07.000000000 +0000 @@ -1,16 +1,17 @@ From: =?utf-8?q?G=C3=B6ran_Weinholt?= Date: Sun, 10 Dec 2017 19:18:50 +0100 Subject: Support using the nanopass installed on the system +Forwarded: not-needed --- s/Mf-base | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/s/Mf-base b/s/Mf-base -index 200d444..2ee7a68 100644 +index c709608..1aa8d6d 100644 --- a/s/Mf-base +++ b/s/Mf-base -@@ -358,7 +358,7 @@ mkheader.so: mkheader.ss cmacros.so primvars.so env.so +@@ -414,7 +414,7 @@ mkheader.so: mkheader.ss cmacros.so primvars.so env.so '(compile-file "$*.ss" "$*.so")'\ | ${Scheme} -q cmacros.so priminfo.so primvars.so env.so @@ -19,7 +20,7 @@ echo '(reset-handler abort)'\ '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\ '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\ -@@ -368,8 +368,8 @@ nanopass.so: $(shell echo ../nanopass/nanopass/*) ../nanopass/nanopass.ss +@@ -428,8 +428,8 @@ nanopass.so: $(shell echo ../nanopass/nanopass/*) ../nanopass/nanopass.ss '(collect-trip-bytes (expt 2 24))'\ '(collect-request-handler (lambda () (collect 0 1)))'\ '(collect 1 2)'\ diff -Nru chezscheme-9.5+dfsg/debian/patches/0004-Remove-the-need-for-files-removed-in-dfsg-cleaning.patch chezscheme-9.5.4+dfsg/debian/patches/0004-Remove-the-need-for-files-removed-in-dfsg-cleaning.patch --- chezscheme-9.5+dfsg/debian/patches/0004-Remove-the-need-for-files-removed-in-dfsg-cleaning.patch 2018-05-18 20:16:25.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0004-Remove-the-need-for-files-removed-in-dfsg-cleaning.patch 2020-09-05 19:05:07.000000000 +0000 @@ -1,32 +1,20 @@ From: =?utf-8?q?G=C3=B6ran_Weinholt?= Date: Sun, 10 Dec 2017 19:20:27 +0100 Subject: Remove the need for files removed in dfsg cleaning +Forwarded: not-needed --- - csug/Makefile | 2 +- - csug/csug.stex | 1 - - csug/title.stex | 1 - - examples/Makefile | 2 +- + csug/csug.stex | 1 - + csug/title.stex | 1 - + examples/Makefile | 2 +- + makefiles/Makefile-csug.in | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) -diff --git a/csug/Makefile b/csug/Makefile -index a078abc..952ec14 100644 ---- a/csug/Makefile -+++ b/csug/Makefile -@@ -80,7 +80,7 @@ $(x).presecondrun: $(x).firstrun - cat tspl.idx >> $x.idx - touch $(x).presecondrun - --$(x).thirdrun: $(x).prethirdrun canned/cisco-logo.png -+$(x).thirdrun: $(x).prethirdrun - $(x).prethirdrun: $(x).secondrun - cat tspl.aux >> $x.aux - cat tspl.rfm >> $x.rfm diff --git a/csug/csug.stex b/csug/csug.stex -index fe791e0..9cdd3aa 100644 +index dbeca1e..44e5e74 100644 --- a/csug/csug.stex +++ b/csug/csug.stex -@@ -84,7 +84,6 @@ Revised \INSERTREVISIONMONTHSPACEYEAR for Chez Scheme Version 9.5
+@@ -86,7 +86,6 @@ Revised} \revisiondate\raw{ for Chez Scheme Version 9.5.4
\ifhtml \raw{\raw{ @@ -47,7 +35,7 @@ www.cisco.com \end{flushright} diff --git a/examples/Makefile b/examples/Makefile -index 5d0b987..42ea8fa 100644 +index b1b4e1d..073337e 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -11,7 +11,7 @@ @@ -59,3 +47,16 @@ scons.ss setof.ss socket.ss unify.ss compat.ss ez-grammar-test.ss obj = ${src:%.ss=%.so} +diff --git a/makefiles/Makefile-csug.in b/makefiles/Makefile-csug.in +index df24092..0ef3f8f 100644 +--- a/makefiles/Makefile-csug.in ++++ b/makefiles/Makefile-csug.in +@@ -81,7 +81,7 @@ $(x).presecondrun: $(x).firstrun + cat tspl.idx >> $x.idx + touch $(x).presecondrun + +-$(x).thirdrun: $(x).prethirdrun canned/cisco-logo.png ++$(x).thirdrun: $(x).prethirdrun + $(x).prethirdrun: $(x).secondrun + cat tspl.aux >> $x.aux + cat tspl.rfm >> $x.rfm diff -Nru chezscheme-9.5+dfsg/debian/patches/0005-continuation-repair-for-return-arity-error.patch chezscheme-9.5.4+dfsg/debian/patches/0005-continuation-repair-for-return-arity-error.patch --- chezscheme-9.5+dfsg/debian/patches/0005-continuation-repair-for-return-arity-error.patch 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0005-continuation-repair-for-return-arity-error.patch 2020-09-05 19:05:07.000000000 +0000 @@ -0,0 +1,138 @@ +From: Matthew Flatt +Date: Mon, 31 Aug 2020 06:02:36 -0600 +Subject: continuation repair for return-arity error +Applied-Upstream: https://github.com/cisco/ChezScheme/commit/07108624d347e13980d70f3a10d48dc2b2aebd7d + +--- + mats/3.ms | 25 +++++++++++++++++++++++++ + s/cpnanopass.ss | 22 ++++++++++++++-------- + s/np-languages.ss | 5 +++-- + 3 files changed, 42 insertions(+), 10 deletions(-) + +diff --git a/mats/3.ms b/mats/3.ms +index 8658669..d8a3021 100644 +--- a/mats/3.ms ++++ b/mats/3.ms +@@ -2087,6 +2087,31 @@ + (thing-pos posx) + (do-something-else))) + list))))) ++ ++ ;; regression test to make sure the continuation is well formed when ++ ;; an exception handler is call for a wrong number of values are ++ ;; returned to a multi-value context ++ (begin ++ (define ($go-fail-to-get-two-values) ++ (call-with-values (lambda () ($get-one-value)) ++ (lambda (a b) (list a b)))) ++ (define ($get-one-value) ++ (call/cc ; copies return address off stack ++ (lambda (k) ++ (collect) ; do something non-trivial ++ k))) ++ (#%$continuation? ++ (call/cc ++ (lambda (esc) ++ (car ++ (with-exception-handler ++ (lambda (exn) ++ (call/cc ++ (lambda (k) ; this continuation used to be broken, and ++ (collect) ; a GC was the simplest way of detecting it ++ (esc k)))) ++ $go-fail-to-get-two-values)))))) ++ + ) + + (mat let-values +diff --git a/s/cpnanopass.ss b/s/cpnanopass.ss +index b653cb9..b4b9d70 100644 +--- a/s/cpnanopass.ss ++++ b/s/cpnanopass.ss +@@ -10125,8 +10125,10 @@ + (if (null? x**) + (%seq + (pariah) +- ; goto domvleterr before decrementing sfp, so callers frame +- ; is still on the stack, to go along with value in %ret / sfp[0] ++ ;; mverror point ensures that the call's return address ++ ;; is in sfp[0], so the caller's frame is still ++ ;; on the stack for error reporting and debugging ++ (mverror-point) + (goto ,Ldomvleterr)) + (let ([x* (car x**)] [interface (car interface*)] [l (car l*)]) + (let ([ebody `(mventry-point (,x* ...) ,l)]) +@@ -10163,6 +10165,7 @@ + (definitions + (import (only asm-module asm-foreign-call asm-foreign-callable asm-enter)) + (define newframe-info-for-mventry-point) ++ (define label-for-mverror-point) + (define Lcall-error (make-Lcall-error)) + (define dcl*) + (define local*) +@@ -10397,7 +10400,7 @@ + (build-return-point rpl this-mrvl cnfv* + (build-consumer-call tc cnfv rpl))) + ,(f tc* cnfv* rpl* this-mrvl))))))))))) +- ,(build-postlude newframe-info)))))))))))) ++ ,(build-postlude newframe-info rpl)))))))))))) + ; NB: combine + (define build-nontail-call-for-tail-call-with-consumers + (lambda (info mdcl t0 t1* tc* nfv** mrvl prepare-for-consumer? build-postlude) +@@ -10508,7 +10511,7 @@ + (let ([tc* (list-head tc* (fx- (length tc*) 1))]) + `(seq + ,(build-nontail-call info mdcl t0 t1* tc* '() mrvl #t +- (lambda (newframe-info) ++ (lambda (newframe-info rpl) + (%seq + (remove-frame ,newframe-info) + (restore-local-saves ,newframe-info) +@@ -11401,10 +11404,12 @@ + (if (uvar-referenced? x) + `(seq (set! ,x ,(uvar-location x)) ,(f (cdr x*))) + (f (cdr x*)))))))] ++ [(mverror-point) ++ `(set! ,%ref-ret (label-ref ,label-for-mverror-point ,(constant size-rp-header)))] + [(mvcall ,info ,mdcl ,t0? ,t1* ... (,t* ...)) + (let ([mrvl (make-local-label 'mrvl)]) + (build-nontail-call info mdcl t0? t1* t* '() mrvl #f +- (lambda (newframe-info) ++ (lambda (newframe-info rpl) + (%seq (label ,mrvl) (remove-frame ,newframe-info) (restore-local-saves ,newframe-info)))))] + [(mvset ,info (,mdcl ,t0? ,t1* ...) (,t* ...) ((,x** ...) ...) ,ebody) + (let* ([frame-x** (map (lambda (x*) (set-formal-registers! x*)) x**)] +@@ -11416,12 +11421,13 @@ + frame-x**)]) + (let ([mrvl (make-local-label 'mrvl)]) + (build-nontail-call info mdcl t0? t1* t* nfv** mrvl #t +- (lambda (newframe-info) +- (fluid-let ([newframe-info-for-mventry-point newframe-info]) ++ (lambda (newframe-info rpl) ++ (fluid-let ([newframe-info-for-mventry-point newframe-info] ++ [label-for-mverror-point rpl]) + (Effect ebody))))))] + [(set! ,[lvalue] (mvcall ,info ,mdcl ,t0? ,t1* ... (,t* ...))) + (build-nontail-call info mdcl t0? t1* t* '() #f #f +- (lambda (newframe-info) ++ (lambda (newframe-info rpl) + (let ([retval (make-tmp 'retval)]) + (%seq + (remove-frame ,newframe-info) +diff --git a/s/np-languages.ss b/s/np-languages.ss +index 84128ce..cf89756 100644 +--- a/s/np-languages.ss ++++ b/s/np-languages.ss +@@ -775,9 +775,10 @@ + (- (mvset info (mdcl (maybe t0) t1 ...) (t* ...) ((x** ...) interface* l*) ...)) + (+ (do-rest fixed-args) + (mvset info (mdcl (maybe t0) t1 ...) (t* ...) ((x** ...) ...) ebody) +- ; mventry-point can appear only within an mvset ebody ++ ; mventry-point and mverror-point can appear only within an mvset ebody + ; ideally, grammar would reflect this +- (mventry-point (x* ...) l)))) ++ (mventry-point (x* ...) l) ++ (mverror-point)))) + + (define exact-integer? + (lambda (x) diff -Nru chezscheme-9.5+dfsg/debian/patches/0005-Fix-from-upstream-for-removed-xlocale.h.patch chezscheme-9.5.4+dfsg/debian/patches/0005-Fix-from-upstream-for-removed-xlocale.h.patch --- chezscheme-9.5+dfsg/debian/patches/0005-Fix-from-upstream-for-removed-xlocale.h.patch 2018-05-18 20:16:25.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0005-Fix-from-upstream-for-removed-xlocale.h.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -From: =?utf-8?q?G=C3=B6ran_Weinholt?= -Date: Fri, 2 Feb 2018 12:38:24 +0100 -Subject: Fix from upstream for removed xlocale.h - -Cherry-pick b04e9123a4 from upstream: - -- ifdef'd out include of xlocale.h for glibc, since the glibc - locale.h includes xlocale.h or, in glibc 2.26, its replacement. - expeditor.c ---- - c/expeditor.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/c/expeditor.c b/c/expeditor.c -index a103fa2..84c3897 100644 ---- a/c/expeditor.c -+++ b/c/expeditor.c -@@ -546,7 +546,9 @@ static void s_ee_write_char(wchar_t c) { - #include - #include - #include -+#ifndef __GLIBC__ - #include -+#endif - - #if defined(TIOCGWINSZ) && defined(SIGWINCH) && defined(EINTR) - #define HANDLE_SIGWINCH diff -Nru chezscheme-9.5+dfsg/debian/patches/0006-Double-FMTBUFSIZE-to-fix-ftbfs-with-gcc-8.patch chezscheme-9.5.4+dfsg/debian/patches/0006-Double-FMTBUFSIZE-to-fix-ftbfs-with-gcc-8.patch --- chezscheme-9.5+dfsg/debian/patches/0006-Double-FMTBUFSIZE-to-fix-ftbfs-with-gcc-8.patch 2018-05-18 20:35:50.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0006-Double-FMTBUFSIZE-to-fix-ftbfs-with-gcc-8.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -From: =?utf-8?q?G=C3=B6ran_Weinholt?= -Date: Fri, 18 May 2018 22:07:15 +0200 -Subject: Double FMTBUFSIZE to fix ftbfs with gcc-8 - ---- - c/prim5.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/c/prim5.c b/c/prim5.c -index 5bee635..69c6bfd 100644 ---- a/c/prim5.c -+++ b/c/prim5.c -@@ -219,7 +219,7 @@ static ptr s_decode_float(x) ptr x; { - return S_decode_float(FLODAT(x)); - } - --#define FMTBUFSIZE 60 -+#define FMTBUFSIZE 120 - #define CHUNKADDRLT(x, y) (((chunkinfo *)(Scar(x)))->addr < ((chunkinfo *)(Scar(y)))->addr) - mkmergesort(sort_chunks, merge_chunks, ptr, Snil, CHUNKADDRLT, INITCDR) - diff -Nru chezscheme-9.5+dfsg/debian/patches/0006-make-arm32-return-address-encoding-montonic-w.r.t.-o.patch chezscheme-9.5.4+dfsg/debian/patches/0006-make-arm32-return-address-encoding-montonic-w.r.t.-o.patch --- chezscheme-9.5+dfsg/debian/patches/0006-make-arm32-return-address-encoding-montonic-w.r.t.-o.patch 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0006-make-arm32-return-address-encoding-montonic-w.r.t.-o.patch 2020-09-05 19:05:07.000000000 +0000 @@ -0,0 +1,44 @@ +From: Matthew Flatt +Date: Thu, 3 Sep 2020 05:56:20 -0600 +Subject: make arm32 return-address encoding montonic w.r.t. offset +Forwarded: https://github.com/cisco/ChezScheme/pull/532 + +--- + s/arm32.ss | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/s/arm32.ss b/s/arm32.ss +index 9edb2ff..11b09e5 100644 +--- a/s/arm32.ss ++++ b/s/arm32.ss +@@ -1679,6 +1679,16 @@ + (bitwise-arithmetic-shift-left (logand n #xffffff) 8) + (bitwise-arithmetic-shift-right n 24))))))))) + ++ ;; restrict funky12 so that an code offset n will not fit ++ ;; if a smaller offset wouldn't fit, which prevents bouncing ++ ;; in the loop that computes label offsets ++ (define code-offset-funky12 ++ (lambda (n) ++ (safe-assert (and (fixnum? n) (fx= 0 (fxand n 3)))) ++ (and (fixnum? n) ++ (#%$fxu< n #x400) ++ (funky12 n)))) ++ + (define shift-count? + (lambda (imm) + ; can also allow 0 for lsl and 32 (represented as 0) for lsr, asr +@@ -2144,11 +2154,11 @@ + (lambda (offset) + (let ([disp (fx- next-addr (fx- offset incr-offset) 4)]) + (cond +- [(funky12 disp) ++ [(code-offset-funky12 disp) + (Trivit (dest) + ; aka adr, encoding A1 + (emit addi #f dest `(reg . ,%pc) disp '()))] +- [(funky12 (- disp)) ++ [(code-offset-funky12 (- disp)) + (Trivit (dest) + ; aka adr, encoding A2 + (emit subi #f dest `(reg . ,%pc) (- disp) '()))] diff -Nru chezscheme-9.5+dfsg/debian/patches/0007-Add-arm32le-boot-files-missing-in-the-release-tarbal.patch chezscheme-9.5.4+dfsg/debian/patches/0007-Add-arm32le-boot-files-missing-in-the-release-tarbal.patch --- chezscheme-9.5+dfsg/debian/patches/0007-Add-arm32le-boot-files-missing-in-the-release-tarbal.patch 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0007-Add-arm32le-boot-files-missing-in-the-release-tarbal.patch 2020-09-05 19:05:07.000000000 +0000 @@ -0,0 +1,26687 @@ +From: =?utf-8?q?G=C3=B6ran_Weinholt?= +Date: Sat, 5 Sep 2020 15:28:43 +0200 +Subject: Add arm32le boot files missing in the release tarball +Forwarded: not-needed + +These files are required for building on armhf. Upstream includes the +ones for i386 and amd64, but not other architectures. They are built +from the source in this package. +--- + boot/arm32le/equates.h | 991 +++++++++++++++++++++++++++++++++++++++++++++++ + boot/arm32le/petite.boot | Bin 0 -> 1756649 bytes + boot/arm32le/scheme.boot | Bin 0 -> 869814 bytes + boot/arm32le/scheme.h | 261 +++++++++++++ + 4 files changed, 1252 insertions(+) + create mode 100644 boot/arm32le/equates.h + create mode 100644 boot/arm32le/petite.boot + create mode 100644 boot/arm32le/scheme.boot + create mode 100644 boot/arm32le/scheme.h + +diff --git a/boot/arm32le/equates.h b/boot/arm32le/equates.h +new file mode 100644 +index 0000000..4d7f2d5 +--- /dev/null ++++ b/boot/arm32le/equates.h +@@ -0,0 +1,991 @@ ++/* equates.h for Chez Scheme Version 9.5.4 */ ++ ++/* Do not edit this file. It is automatically generated and */ ++/* specifically tailored to the version of Chez Scheme named */ ++/* above. Always be certain that you have the correct version */ ++/* of this file for the version of Chez Scheme you are using. */ ++ ++/* Warning: Some macros may evaluate arguments more than once. */ ++ ++/* Integer typedefs */ ++typedef char I8; ++typedef unsigned char U8; ++typedef short I16; ++typedef unsigned short U16; ++typedef int I32; ++typedef unsigned int U32; ++typedef long long I64; ++typedef unsigned long long U64; ++ ++/* constants from cmacros.ss */ ++#define $c_func_closure_index 0x4 ++#define $c_func_closure_record_index 0x3 ++#define $c_func_code_object_index 0x2 ++#define $c_func_code_record_index 0x1 ++#define COMPRESS_FORMAT_BITS 0x3 ++#define COMPRESS_GZIP 0x0 ++#define COMPRESS_HIGH 0x3 ++#define COMPRESS_LOW 0x1 ++#define COMPRESS_LZ4 0x1 ++#define COMPRESS_MAX 0x4 ++#define COMPRESS_MEDIUM 0x2 ++#define COMPRESS_MIN 0x0 ++#define ERROR_CALL_ARGUMENT_COUNT 0x4 ++#define ERROR_CALL_NONPROCEDURE 0x3 ++#define ERROR_CALL_NONPROCEDURE_SYMBOL 0x2 ++#define ERROR_CALL_UNBOUND 0x1 ++#define ERROR_MVLET 0x8 ++#define ERROR_NONCONTINUABLE_INTERRUPT 0x6 ++#define ERROR_OTHER 0x0 ++#define ERROR_RESET 0x5 ++#define ERROR_VALUES 0x7 ++#define OPEN_ERROR_EXISTS 0x2 ++#define OPEN_ERROR_EXISTSNOT 0x3 ++#define OPEN_ERROR_OTHER 0x0 ++#define OPEN_ERROR_PROTECTION 0x1 ++#define PORT_FLAG_BINARY 0x400 ++#define PORT_FLAG_BLOCK_BUFFERED 0x20000 ++#define PORT_FLAG_BOL 0x8000 ++#define PORT_FLAG_CHAR_POSITIONS 0x100000 ++#define PORT_FLAG_CLOSED 0x800 ++#define PORT_FLAG_COMPRESSED 0x2000 ++#define PORT_FLAG_EOF 0x10000 ++#define PORT_FLAG_EXCLUSIVE 0x4000 ++#define PORT_FLAG_FILE 0x1000 ++#define PORT_FLAG_FOLD_CASE 0x400000 ++#define PORT_FLAG_INPUT 0x100 ++#define PORT_FLAG_INPUT_MODE 0x80000 ++#define PORT_FLAG_LINE_BUFFERED 0x40000 ++#define PORT_FLAG_NO_FOLD_CASE 0x800000 ++#define PORT_FLAG_OUTPUT 0x200 ++#define PORT_FLAG_R6RS 0x200000 ++#define SAPPEND 0x3 ++#define SDEFAULT 0x4 ++#define SEOF -0x1 ++#define SERROR 0x0 ++#define SICONV_DUNNO 0x0 ++#define SICONV_INCOMPLETE 0x2 ++#define SICONV_INVALID 0x1 ++#define SICONV_NOROOM 0x3 ++#define SREPLACE 0x2 ++#define STRVNCATE 0x1 ++#define address_bits 0x20 ++#define alloc_waste_maximum 0x400 ++#define annotation_all 0x3 ++#define annotation_debug 0x1 ++#define annotation_profile 0x2 ++#define architecture arm32 ++#define asm_arg_reg_cnt 0x3 ++#define asm_arg_reg_max 0x5 ++#define bigit_bits 0x20 ++#define bigit_bytes 0x4 ++#define bignum_data_disp 0x5 ++#define bignum_length_factor 0x40 ++#define bignum_length_offset 0x6 ++#define bignum_sign_offset 0x5 ++#define bignum_type_disp 0x1 ++#define black_hole (ptr)0x46 ++#define box_ref_disp 0x5 ++#define box_type_disp 0x1 ++#define byte_alignment 0x8 ++#define byte_constant_mask 0xFFFFFFFF ++#define bytes_per_card 0x100 ++#define bytes_per_segment 0x2000 ++#define bytevector_data_disp 0x9 ++#define bytevector_immutable_flag 0x4 ++#define bytevector_length_factor 0x8 ++#define bytevector_length_offset 0x3 ++#define bytevector_pad_disp 0x5 ++#define bytevector_type_disp 0x1 ++#define c_entry_name_vector #(thread-context get-thread-context handle-apply-overflood handle-docall-error handle-overflow handle-overflood handle-nonprocedure-symbol thread-list split-and-resize raw-collect-cond raw-tc-mutex activate-thread deactivate-thread unactivate-thread handle-values-error handle-mvlet-error handle-arg-error foreign-entry install-library-entry get-more-room scan-remembered-set instantiate-code-object Sreturn Scall-one-result Scall-any-results) ++#define c_entry_vector_size 0x19 ++#define cached_stack_link_disp 0x4 ++#define cached_stack_size_disp 0x0 ++#define card_offset_bits 0x8 ++#define cards_per_segment 0x20 ++#define char_data_offset 0x8 ++#define char_factor 0x100 ++#define closure_code_disp 0x3 ++#define closure_data_disp 0x7 ++#define code_arity_mask_disp 0x11 ++#define code_closure_length_disp 0x15 ++#define code_data_disp 0x21 ++#define code_flag_continuation 0x2 ++#define code_flag_guardian 0x8 ++#define code_flag_system 0x1 ++#define code_flag_template 0x4 ++#define code_flags_offset 0x8 ++#define code_info_disp 0x19 ++#define code_length_disp 0x5 ++#define code_name_disp 0xD ++#define code_pinfos_disp 0x1D ++#define code_reloc_disp 0x9 ++#define code_type_disp 0x1 ++#define collect_interrupt_index 0x1 ++#define continuation_code_disp 0x3 ++#define continuation_link_disp 0x13 ++#define continuation_return_address_disp 0x17 ++#define continuation_stack_clength_disp 0xF ++#define continuation_stack_disp 0x7 ++#define continuation_stack_length_disp 0xB ++#define continuation_winders_disp 0x1B ++#define countof_bignum 0x5 ++#define countof_box 0x9 ++#define countof_bytevector 0x15 ++#define countof_closure 0x3 ++#define countof_code 0xB ++#define countof_continuation 0x4 ++#define countof_ephemeron 0x19 ++#define countof_exactnum 0x8 ++#define countof_flonum 0x2 ++#define countof_fxvector 0x14 ++#define countof_guardian 0x17 ++#define countof_inexactnum 0x7 ++#define countof_locked 0x16 ++#define countof_oblist 0x18 ++#define countof_pair 0x0 ++#define countof_port 0xA ++#define countof_ratnum 0x6 ++#define countof_relocation_table 0x10 ++#define countof_rtd_counts 0xE ++#define countof_stack 0xF ++#define countof_string 0x13 ++#define countof_symbol 0x1 ++#define countof_thread 0xC ++#define countof_tlc 0xD ++#define countof_types 0x1A ++#define countof_vector 0x12 ++#define countof_weakpair 0x11 ++#define default_collect_trip_bytes 0x400000 ++#define default_heap_reserve_ratio 1.0 ++#define default_max_nonstatic_generation 0x4 ++#define default_stack_size 0x7FF8 ++#define default_timer_ticks 0x3E8 ++#define dtvec_hour 0x3 ++#define dtvec_isdst 0x9 ++#define dtvec_mday 0x4 ++#define dtvec_min 0x2 ++#define dtvec_mon 0x5 ++#define dtvec_nsec 0x0 ++#define dtvec_sec 0x1 ++#define dtvec_size 0xC ++#define dtvec_tzname 0xB ++#define dtvec_tzoff 0xA ++#define dtvec_wday 0x7 ++#define dtvec_yday 0x8 ++#define dtvec_year 0x6 ++#define ephemeron_car_disp 0x7 ++#define ephemeron_cdr_disp 0xB ++#define ephemeron_next_disp 0xF ++#define ephemeron_trigger_next_disp 0x13 ++#define eq_hashtable_subtype_ephemeron 0x2 ++#define eq_hashtable_subtype_normal 0x0 ++#define eq_hashtable_subtype_weak 0x1 ++#define exactnum_imag_disp 0x9 ++#define exactnum_real_disp 0x5 ++#define exactnum_type_disp 0x1 ++#define fasl_fld_double 0xA ++#define fasl_fld_i16 0x2 ++#define fasl_fld_i24 0x3 ++#define fasl_fld_i32 0x4 ++#define fasl_fld_i40 0x5 ++#define fasl_fld_i48 0x6 ++#define fasl_fld_i56 0x7 ++#define fasl_fld_i64 0x8 ++#define fasl_fld_ptr 0x0 ++#define fasl_fld_single 0x9 ++#define fasl_fld_u8 0x1 ++#define fasl_header #vu8(0 0 0 0 99 104 101 122) ++#define fasl_type_base_rtd 0x1A ++#define fasl_type_box 0x1 ++#define fasl_type_bytevector 0x1D ++#define fasl_type_closure 0x6 ++#define fasl_type_code 0xB ++#define fasl_type_entry 0xD ++#define fasl_type_ephemeron 0x1C ++#define fasl_type_eq_hashtable 0x1F ++#define fasl_type_exactnum 0x14 ++#define fasl_type_flonum 0x8 ++#define fasl_type_fxvector 0x1B ++#define fasl_type_gensym 0x13 ++#define fasl_type_graph 0x10 ++#define fasl_type_graph_def 0x11 ++#define fasl_type_graph_ref 0x12 ++#define fasl_type_gzip 0x2B ++#define fasl_type_header 0x0 ++#define fasl_type_immediate 0xC ++#define fasl_type_immutable_box 0x29 ++#define fasl_type_immutable_bytevector 0x28 ++#define fasl_type_immutable_fxvector 0x27 ++#define fasl_type_immutable_string 0x26 ++#define fasl_type_immutable_vector 0x25 ++#define fasl_type_inexactnum 0x5 ++#define fasl_type_large_integer 0xA ++#define fasl_type_library 0xE ++#define fasl_type_library_code 0xF ++#define fasl_type_lz4 0x2C ++#define fasl_type_pair 0x7 ++#define fasl_type_ratnum 0x3 ++#define fasl_type_record 0x17 ++#define fasl_type_revisit 0x23 ++#define fasl_type_rtd 0x18 ++#define fasl_type_small_integer 0x19 ++#define fasl_type_string 0x9 ++#define fasl_type_symbol 0x2 ++#define fasl_type_symbol_hashtable 0x20 ++#define fasl_type_uncompressed 0x2A ++#define fasl_type_vector 0x4 ++#define fasl_type_visit 0x22 ++#define fasl_type_visit_revisit 0x24 ++#define fasl_type_weak_pair 0x1E ++#define fixnum_bits 0x1E ++#define fixnum_factor 0x4 ++#define fixnum_offset 0x2 ++#define fld_byte_index 0x4 ++#define fld_mutablep_index 0x2 ++#define fld_name_index 0x1 ++#define fld_type_index 0x3 ++#define flonum_data_disp 0x6 ++#define forward_address_disp 0x4 ++#define forward_marker (ptr)0x2E ++#define forward_marker_disp 0x0 ++#define ftype_guardian_rep (ptr)0x56 ++#define fxvector_data_disp 0x5 ++#define fxvector_immutable_flag 0x8 ++#define fxvector_length_factor 0x10 ++#define fxvector_length_offset 0x4 ++#define fxvector_type_disp 0x1 ++#define guardian_entry_next_disp 0xC ++#define guardian_entry_obj_disp 0x0 ++#define guardian_entry_rep_disp 0x4 ++#define guardian_entry_tconc_disp 0x8 ++#define hashtable_default_size 0x8 ++#define header_size_bignum 0x4 ++#define header_size_bytevector 0x8 ++#define header_size_closure 0x4 ++#define header_size_code 0x20 ++#define header_size_fxvector 0x4 ++#define header_size_record 0x4 ++#define header_size_reloc_table 0x8 ++#define header_size_string 0x4 ++#define header_size_vector 0x4 ++#define ignore_event_flag 0x0 ++#define inexactnum_imag_disp 0x11 ++#define inexactnum_pad_disp 0x5 ++#define inexactnum_real_disp 0x9 ++#define inexactnum_type_disp 0x1 ++#define int_bits 0x20 ++#define keyboard_interrupt_index 0x3 ++#define library_entry_vector_size 0x210 ++#define libspec_closure_index 0xD ++#define libspec_does_not_expect_headroom_index 0x0 ++#define libspec_error_index 0xE ++#define libspec_fake_index 0x10 ++#define libspec_flags_index 0x2 ++#define libspec_has_does_not_expect_headroom_version_index 0xF ++#define libspec_index_base_offset 0x1 ++#define libspec_index_base_size 0x9 ++#define libspec_index_offset 0x0 ++#define libspec_index_size 0xA ++#define libspec_interface_offset 0xA ++#define libspec_interface_size 0x3 ++#define libspec_name_index 0x1 ++#define log2_ptr_bytes 0x2 ++#define long_bits 0x20 ++#define long_long_bits 0x40 ++#define machine_type 0x1F ++#define machine_type_a6fb 0x15 ++#define machine_type_a6le 0xB ++#define machine_type_a6nb 0x19 ++#define machine_type_a6nt 0x1B ++#define machine_type_a6ob 0xF ++#define machine_type_a6osx 0xD ++#define machine_type_a6s2 0x11 ++#define machine_type_alist ((0 . any) (1 . i3le) (2 . ti3le) (3 . i3nt) (4 . ti3nt) (5 . i3fb) (6 . ti3fb) (7 . i3ob) (8 . ti3ob) (9 . i3osx) (10 . ti3osx) (11 . a6le) (12 . ta6le) (13 . a6osx) (14 . ta6osx) (15 . a6ob) (16 . ta6ob) (17 . a6s2) (18 . ta6s2) (19 . i3s2) (20 . ti3s2) (21 . a6fb) (22 . ta6fb) (23 . i3nb) (24 . ti3nb) (25 . a6nb) (26 . ta6nb) (27 . a6nt) (28 . ta6nt) (29 . i3qnx) (30 . ti3qnx) (31 . arm32le) (32 . tarm32le) (33 . ppc32le) (34 . tppc32le)) ++#define machine_type_any 0x0 ++#define machine_type_arm32le 0x1F ++#define machine_type_i3fb 0x5 ++#define machine_type_i3le 0x1 ++#define machine_type_i3nb 0x17 ++#define machine_type_i3nt 0x3 ++#define machine_type_i3ob 0x7 ++#define machine_type_i3osx 0x9 ++#define machine_type_i3qnx 0x1D ++#define machine_type_i3s2 0x13 ++#define machine_type_limit 0x23 ++#define machine_type_name arm32le ++#define machine_type_ppc32le 0x21 ++#define machine_type_ta6fb 0x16 ++#define machine_type_ta6le 0xC ++#define machine_type_ta6nb 0x1A ++#define machine_type_ta6nt 0x1C ++#define machine_type_ta6ob 0x10 ++#define machine_type_ta6osx 0xE ++#define machine_type_ta6s2 0x12 ++#define machine_type_tarm32le 0x20 ++#define machine_type_ti3fb 0x6 ++#define machine_type_ti3le 0x2 ++#define machine_type_ti3nb 0x18 ++#define machine_type_ti3nt 0x4 ++#define machine_type_ti3ob 0x8 ++#define machine_type_ti3osx 0xA ++#define machine_type_ti3qnx 0x1E ++#define machine_type_ti3s2 0x14 ++#define machine_type_tppc32le 0x22 ++#define mask_bignum 0x1F ++#define mask_bignum_sign 0x20 ++#define mask_binary_input_port 0x5FF ++#define mask_binary_output_port 0x6FF ++#define mask_binary_port 0x4FF ++#define mask_boolean 0xF7 ++#define mask_box 0x7F ++#define mask_bwp 0xFFFFFFFF ++#define mask_bytevector 0x3 ++#define mask_char 0xFF ++#define mask_closure 0x7 ++#define mask_code 0xFF ++#define mask_continuation_code 0x2FF ++#define mask_eof 0xFFFFFFFF ++#define mask_exactnum 0xFFFFFFFF ++#define mask_false 0xFFFFFFFF ++#define mask_fixnum 0x3 ++#define mask_flonum 0x7 ++#define mask_fxvector 0x7 ++#define mask_guardian_code 0x8FF ++#define mask_immediate 0x7 ++#define mask_inexactnum 0xFFFFFFFF ++#define mask_input_port 0x1FF ++#define mask_mutable_box 0xFFFFFFFF ++#define mask_mutable_bytevector 0x7 ++#define mask_mutable_fxvector 0xF ++#define mask_mutable_string 0xF ++#define mask_mutable_vector 0x7 ++#define mask_nil 0xFFFFFFFF ++#define mask_octet -0x3FD ++#define mask_other_number 0xF ++#define mask_output_port 0x2FF ++#define mask_pair 0x7 ++#define mask_port 0xFF ++#define mask_ratnum 0xFFFFFFFF ++#define mask_record 0x7 ++#define mask_rtd_counts 0xFFFFFFFF ++#define mask_signed_bignum 0x3F ++#define mask_string 0x7 ++#define mask_symbol 0x7 ++#define mask_system_code 0x1FF ++#define mask_textual_input_port 0x5FF ++#define mask_textual_output_port 0x6FF ++#define mask_textual_port 0x4FF ++#define mask_thread 0xFFFFFFFF ++#define mask_tlc 0xFFFFFFFF ++#define mask_typed_object 0x7 ++#define mask_unbound 0xFFFFFFFF ++#define mask_vector 0x3 ++#define max_float_alignment 0x8 ++#define max_integer_alignment 0x8 ++#define max_real_space 0xB ++#define max_space 0xC ++#define max_sweep_space 0xA ++#define maximum_bignum_length (iptr)0x3FFFFFF ++#define maximum_bytevector_length (iptr)0x1FFFFFFF ++#define maximum_fxvector_length (iptr)0xFFFFFFF ++#define maximum_interrupt_index 0x4 ++#define maximum_string_length (iptr)0xFFFFFFF ++#define maximum_vector_length (iptr)0x1FFFFFFF ++#define minimum_segment_request 0x80 ++#define most_negative_fixnum (iptr)-0x20000000 ++#define most_positive_fixnum (iptr)0x1FFFFFFF ++#define native_endianness little ++#define one_shot_headroom 0x600 ++#define ordinary_type_bits 0x8 ++#define pair_car_disp 0x7 ++#define pair_cdr_disp 0xB ++#define pair_shift 0x3 ++#define port_flag_binary 0x4 ++#define port_flag_block_buffered 0x200 ++#define port_flag_bol 0x80 ++#define port_flag_char_positions 0x1000 ++#define port_flag_closed 0x8 ++#define port_flag_compressed 0x20 ++#define port_flag_eof 0x100 ++#define port_flag_exclusive 0x40 ++#define port_flag_file 0x10 ++#define port_flag_fold_case 0x4000 ++#define port_flag_input 0x1 ++#define port_flag_input_mode 0x800 ++#define port_flag_line_buffered 0x400 ++#define port_flag_no_fold_case 0x8000 ++#define port_flag_output 0x2 ++#define port_flag_r6rs 0x2000 ++#define port_flags_offset 0x8 ++#define port_handler_disp 0x5 ++#define port_ibuffer_disp 0x1D ++#define port_icount_disp 0xD ++#define port_ilast_disp 0x19 ++#define port_info_disp 0x21 ++#define port_name_disp 0x25 ++#define port_obuffer_disp 0x15 ++#define port_ocount_disp 0x9 ++#define port_olast_disp 0x11 ++#define port_type_disp 0x1 ++#define prelex_is_flags_offset 0x8 ++#define prelex_is_mask 0xFF00 ++#define prelex_sticky_mask 0xFF ++#define prelex_was_flags_offset 0x10 ++#define primary_type_bits 0x3 ++#define ptr_bits 0x20 ++#define ptr_bytes 0x4 ++#define ptrdiff_t_bits 0x20 ++#define ratnum_denominator_disp 0x9 ++#define ratnum_numerator_disp 0x5 ++#define ratnum_type_disp 0x1 ++#define real_space_alist ((new . 0) (impure . 1) (symbol . 2) (port . 3) (weakpair . 4) (ephemeron . 5) (pure . 6) (continuation . 7) (code . 8) (pure-typed-object . 9) (impure-record . 10) (data . 11)) ++#define record_data_disp 0x5 ++#define record_type_counts_disp 0x25 ++#define record_type_disp 0x1 ++#define record_type_flags_disp 0x1D ++#define record_type_flds_disp 0x19 ++#define record_type_mpm_disp 0x11 ++#define record_type_name_disp 0x15 ++#define record_type_parent_disp 0x5 ++#define record_type_pm_disp 0xD ++#define record_type_size_disp 0x9 ++#define record_type_type_disp 0x1 ++#define record_type_uid_disp 0x21 ++#define reloc_abs 0x0 ++#define reloc_arm32_abs 0x1 ++#define reloc_arm32_call 0x2 ++#define reloc_arm32_jump 0x3 ++#define reloc_code_offset_index 0x3 ++#define reloc_code_offset_mask 0x3FF ++#define reloc_code_offset_offset 0x4 ++#define reloc_extended_format 0x1 ++#define reloc_item_offset_index 0x2 ++#define reloc_item_offset_mask 0x3FFFF ++#define reloc_item_offset_offset 0xE ++#define reloc_longp_index 0x4 ++#define reloc_table_code_disp 0x4 ++#define reloc_table_data_disp 0x8 ++#define reloc_table_size_disp 0x0 ++#define reloc_type_index 0x1 ++#define reloc_type_mask 0x7 ++#define reloc_type_offset 0x1 ++#define return_address_frame_size_disp -0x8 ++#define return_address_livemask_disp -0x10 ++#define return_address_mv_return_address_disp -0x4 ++#define return_address_toplink_disp -0xC ++#define rp_header_frame_size_disp 0x8 ++#define rp_header_livemask_disp 0x0 ++#define rp_header_mv_return_address_disp 0xC ++#define rp_header_toplink_disp 0x4 ++#define rtd_counts_data_disp 0x11 ++#define rtd_counts_timestamp_disp 0x9 ++#define rtd_counts_type_disp 0x1 ++#define rtd_generative 0x1 ++#define rtd_opaque 0x2 ++#define rtd_sealed 0x4 ++#define sbwp (ptr)0x4E ++#define scaled_shot_1_shot_flag -0x4 ++#define scheme_version 0x90504 ++#define segment_card_offset_bits 0x5 ++#define segment_offset_bits 0xD ++#define segment_t1_bits 0x13 ++#define segment_table_levels 0x1 ++#define seof (ptr)0x36 ++#define sfalse (ptr)0x6 ++#define short_bits 0x10 ++#define signal_interrupt_index 0x4 ++#define size_box 0x8 ++#define size_cached_stack 0x8 ++#define size_continuation 0x20 ++#define size_ephemeron 0x10 ++#define size_exactnum 0x10 ++#define size_flonum 0x8 ++#define size_forward 0x8 ++#define size_guardian_entry 0x10 ++#define size_inexactnum 0x18 ++#define size_pair 0x8 ++#define size_port 0x28 ++#define size_ratnum 0x10 ++#define size_record_type 0x28 ++#define size_rp_header 0x10 ++#define size_rtd_counts 0x410 ++#define size_symbol 0x18 ++#define size_tc 0x170 ++#define size_thread 0x8 ++#define size_tlc 0x10 ++#define size_typed_object 0x8 ++#define size_t_bits 0x20 ++#define snil (ptr)0x26 ++#define space_char_list (#\n #\i #\x #\q #\w #\e #\p #\k #\c #\r #\s #\d #\e) ++#define space_cname_list ("new" "impure" "symbol" "port" "weakpr" "emph" "pure" "cont" "code" "p-tobj" "ip-rec" "data" "empty") ++#define space_code 0x8 ++#define space_continuation 0x7 ++#define space_data 0xB ++#define space_empty 0xC ++#define space_ephemeron 0x5 ++#define space_impure 0x1 ++#define space_impure_record 0xA ++#define space_locked 0x20 ++#define space_new 0x0 ++#define space_old 0x40 ++#define space_port 0x3 ++#define space_pure 0x6 ++#define space_pure_typed_object 0x9 ++#define space_symbol 0x2 ++#define space_weakpair 0x4 ++#define stack_frame_limit 0x100 ++#define stack_slop 0x200 ++#define static_generation 0xFF ++#define string_char_bits 0x20 ++#define string_char_bytes 0x4 ++#define string_char_offset 0x2 ++#define string_data_disp 0x5 ++#define string_immutable_flag 0x8 ++#define string_length_factor 0x10 ++#define string_length_offset 0x4 ++#define string_type_disp 0x1 ++#define strue (ptr)0xE ++#define sunbound (ptr)0x1E ++#define svoid (ptr)0x3E ++#define symbol_hash_disp 0x19 ++#define symbol_name_disp 0x11 ++#define symbol_plist_disp 0xD ++#define symbol_pvalue_disp 0x9 ++#define symbol_splist_disp 0x15 ++#define symbol_value_disp 0x5 ++#define tc_DSTBV_disp 0x164 ++#define tc_SRCBV_disp 0x168 ++#define tc_U_disp 0xB4 ++#define tc_V_disp 0xB8 ++#define tc_W_disp 0xBC ++#define tc_X_disp 0xC0 ++#define tc_Y_disp 0xC4 ++#define tc_ac0_disp 0x14 ++#define tc_ac1_disp 0x18 ++#define tc_active_disp 0x9C ++#define tc_alloc_counter_disp 0x158 ++#define tc_ap_disp 0x28 ++#define tc_arg_regs_disp 0x0 ++#define tc_block_counter_disp 0xF0 ++#define tc_cchain_disp 0x90 ++#define tc_code_ranges_to_flush_disp 0x94 ++#define tc_compile_profile_disp 0x11C ++#define tc_compress_format_disp 0x140 ++#define tc_compress_level_disp 0x144 ++#define tc_cp_disp 0x20 ++#define tc_current_error_disp 0xEC ++#define tc_current_input_disp 0xE4 ++#define tc_current_mso_disp 0xF8 ++#define tc_current_output_disp 0xE8 ++#define tc_default_record_equal_procedure_disp 0x138 ++#define tc_default_record_hash_procedure_disp 0x13C ++#define tc_disable_count_disp 0xD0 ++#define tc_eap_disp 0x2C ++#define tc_esp_disp 0x24 ++#define tc_fxfirst_bit_set_bv_disp 0x104 ++#define tc_fxlength_bv_disp 0x100 ++#define tc_generate_inspector_information_disp 0x120 ++#define tc_generate_procedure_source_information_disp 0x124 ++#define tc_generate_profile_forms_disp 0x128 ++#define tc_guardian_entries_disp 0x8C ++#define tc_instr_counter_disp 0x150 ++#define tc_keyboard_interrupt_pending_disp 0xDC ++#define tc_lz4_out_buffer_disp 0x148 ++#define tc_meta_level_disp 0x118 ++#define tc_null_immutable_bytevector_disp 0x110 ++#define tc_null_immutable_fxvector_disp 0x10C ++#define tc_null_immutable_string_disp 0x114 ++#define tc_null_immutable_vector_disp 0x108 ++#define tc_optimize_level_disp 0x12C ++#define tc_parameters_disp 0x160 ++#define tc_random_seed_disp 0x98 ++#define tc_real_eap_disp 0x48 ++#define tc_ret_disp 0x30 ++#define tc_scheme_stack_disp 0xA0 ++#define tc_scheme_stack_size_disp 0xAC ++#define tc_sfd_disp 0xF4 ++#define tc_sfp_disp 0x1C ++#define tc_signal_interrupt_pending_disp 0xD4 ++#define tc_signal_interrupt_queue_disp 0xD8 ++#define tc_something_pending_disp 0xC8 ++#define tc_stack_cache_disp 0xA4 ++#define tc_stack_link_disp 0xA8 ++#define tc_subset_mode_disp 0x130 ++#define tc_suppress_primitive_inlining_disp 0x134 ++#define tc_target_machine_disp 0xFC ++#define tc_td_disp 0x44 ++#define tc_threadno_disp 0xE0 ++#define tc_timer_ticks_disp 0xCC ++#define tc_trap_disp 0x34 ++#define tc_ts_disp 0x40 ++#define tc_virtual_registers_disp 0x4C ++#define tc_winders_disp 0xB0 ++#define tc_xp_disp 0x38 ++#define tc_yp_disp 0x3C ++#define thread_tc_disp 0x5 ++#define thread_type_disp 0x1 ++#define time_collector_cpu 0x5 ++#define time_collector_real 0x6 ++#define time_duration 0x2 ++#define time_monotonic 0x3 ++#define time_process 0x0 ++#define time_t_bits 0x20 ++#define time_thread 0x1 ++#define time_utc 0x4 ++#define timer_interrupt_index 0x2 ++#define tlc_ht_disp 0x9 ++#define tlc_keyval_disp 0x5 ++#define tlc_next_disp 0xD ++#define tlc_type_disp 0x1 ++#define type_bignum 0x6 ++#define type_binary_input_port 0x51E ++#define type_binary_output_port 0x61E ++#define type_binary_port 0x41E ++#define type_boolean 0x6 ++#define type_box 0xE ++#define type_bytevector 0x1 ++#define type_char 0x16 ++#define type_closure 0x5 ++#define type_code 0x3E ++#define type_continuation_code 0x23E ++#define type_exactnum 0x56 ++#define type_fixnum 0x0 ++#define type_flonum 0x2 ++#define type_fxvector 0x3 ++#define type_guardian_code 0x83E ++#define type_immediate 0x6 ++#define type_immutable_box 0x8E ++#define type_immutable_bytevector 0x5 ++#define type_immutable_fxvector 0xB ++#define type_immutable_string 0xA ++#define type_immutable_vector 0x4 ++#define type_inexactnum 0x36 ++#define type_input_port 0x11E ++#define type_io_port 0x31E ++#define type_mutable_box 0xE ++#define type_mutable_bytevector 0x1 ++#define type_mutable_fxvector 0x3 ++#define type_mutable_string 0x2 ++#define type_mutable_vector 0x0 ++#define type_negative_bignum 0x26 ++#define type_octet 0x0 ++#define type_other_number 0x6 ++#define type_output_port 0x21E ++#define type_pair 0x1 ++#define type_port 0x1E ++#define type_positive_bignum 0x6 ++#define type_ratnum 0x16 ++#define type_record 0x7 ++#define type_rtd_counts 0x6E ++#define type_string 0x2 ++#define type_symbol 0x3 ++#define type_system_code 0x13E ++#define type_textual_input_port 0x11E ++#define type_textual_output_port 0x21E ++#define type_textual_port 0x1E ++#define type_thread 0x4E ++#define type_tlc 0x5E ++#define type_typed_object 0x7 ++#define type_vector 0x0 ++#define typed_object_type_disp 0x1 ++#define typedef_i16 "short" ++#define typedef_i32 "int" ++#define typedef_i64 "long long" ++#define typedef_i8 "char" ++#define typedef_iptr "int" ++#define typedef_ptr "void *" ++#define typedef_string_char "unsigned int" ++#define typedef_u16 "unsigned short" ++#define typedef_u32 "unsigned int" ++#define typedef_u64 "unsigned long long" ++#define typedef_u8 "unsigned char" ++#define typedef_uptr "unsigned int" ++#define typemod 0x8 ++#define unactivate_mode_deactivate 0x1 ++#define unactivate_mode_destroy 0x2 ++#define unactivate_mode_noop 0x0 ++#define unaligned_integers 1 ++#define underflow_limit 0x40 ++#define unscaled_shot_1_shot_flag -0x1 ++#define vector_data_disp 0x5 ++#define vector_immutable_flag 0x4 ++#define vector_length_factor 0x8 ++#define vector_length_offset 0x3 ++#define vector_type_disp 0x1 ++#define virtual_register_count 0x10 ++#define wchar_bits 0x20 ++ ++/* constants from declare-c-entries */ ++#define CENTRY_Scall_any_results 24 ++#define CENTRY_Scall_one_result 23 ++#define CENTRY_Sreturn 22 ++#define CENTRY_activate_thread 11 ++#define CENTRY_deactivate_thread 12 ++#define CENTRY_foreign_entry 17 ++#define CENTRY_get_more_room 19 ++#define CENTRY_get_thread_context 1 ++#define CENTRY_handle_apply_overflood 2 ++#define CENTRY_handle_arg_error 16 ++#define CENTRY_handle_docall_error 3 ++#define CENTRY_handle_mvlet_error 15 ++#define CENTRY_handle_nonprocedure_symbol 6 ++#define CENTRY_handle_overflood 5 ++#define CENTRY_handle_overflow 4 ++#define CENTRY_handle_values_error 14 ++#define CENTRY_install_library_entry 18 ++#define CENTRY_instantiate_code_object 21 ++#define CENTRY_raw_collect_cond 9 ++#define CENTRY_raw_tc_mutex 10 ++#define CENTRY_scan_remembered_set 20 ++#define CENTRY_split_and_resize 8 ++#define CENTRY_thread_context 0 ++#define CENTRY_thread_list 7 ++#define CENTRY_unactivate_thread 13 ++ ++/* displacements for records */ ++#define eq_hashtable_rtd_disp 1 ++#define eq_hashtable_type_disp 5 ++#define eq_hashtable_mutablep_disp 9 ++#define eq_hashtable_vec_disp 13 ++#define eq_hashtable_minlen_disp 17 ++#define eq_hashtable_size_disp 21 ++#define eq_hashtable_subtype_disp 25 ++#define symbol_hashtable_rtd_disp 1 ++#define symbol_hashtable_type_disp 5 ++#define symbol_hashtable_mutablep_disp 9 ++#define symbol_hashtable_vec_disp 13 ++#define symbol_hashtable_minlen_disp 17 ++#define symbol_hashtable_size_disp 21 ++#define symbol_hashtable_equivp_disp 25 ++#define code_info_rtd_disp 1 ++#define code_info_src_disp 5 ++#define code_info_sexpr_disp 9 ++#define code_info_free_disp 13 ++#define code_info_live_disp 17 ++#define code_info_rpis_disp 21 ++ ++/* predicates */ ++#define Simmediatep(x) (((uptr)(x)&0x7)==0x6) ++#define Sportp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0xFF)==0x1E)) ++#define Scodep(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0xFF)==0x3E)) ++ ++/* structure accessors */ ++#define INITCAR(x) (*((ptr *)((uptr)(x)+7))) ++#define INITCDR(x) (*((ptr *)((uptr)(x)+11))) ++#define SETCAR(x,y) DIRTYSET(((ptr *)((uptr)(x)+7)),(y)) ++#define SETCDR(x,y) DIRTYSET(((ptr *)((uptr)(x)+11)),(y)) ++#define BOXTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define INITBOXREF(x) (*((ptr *)((uptr)(x)+5))) ++#define SETBOXREF(x,y) DIRTYSET(((ptr *)((uptr)(x)+5)),(y)) ++#define EPHEMERONNEXT(x) (*((ptr *)((uptr)(x)+15))) ++#define INITEPHEMERONNEXT(x) (*((ptr *)((uptr)(x)+15))) ++#define EPHEMERONTRIGGERNEXT(x) (*((ptr *)((uptr)(x)+19))) ++#define INITEPHEMERONTRIGGERNEXT(x) (*((ptr *)((uptr)(x)+19))) ++#define TLCTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define TLCKEYVAL(x) (*((ptr *)((uptr)(x)+5))) ++#define TLCHT(x) (*((ptr *)((uptr)(x)+9))) ++#define TLCNEXT(x) (*((ptr *)((uptr)(x)+13))) ++#define INITTLCKEYVAL(x) (*((ptr *)((uptr)(x)+5))) ++#define INITTLCHT(x) (*((ptr *)((uptr)(x)+9))) ++#define INITTLCNEXT(x) (*((ptr *)((uptr)(x)+13))) ++#define SETTLCNEXT(x,y) DIRTYSET(((ptr *)((uptr)(x)+13)),(y)) ++#define SYMVAL(x) (*((ptr *)((uptr)(x)+5))) ++#define SYMPVAL(x) (*((ptr *)((uptr)(x)+9))) ++#define SYMPLIST(x) (*((ptr *)((uptr)(x)+13))) ++#define SYMNAME(x) (*((ptr *)((uptr)(x)+17))) ++#define SYMSPLIST(x) (*((ptr *)((uptr)(x)+21))) ++#define SYMHASH(x) (*((ptr *)((uptr)(x)+25))) ++#define INITSYMVAL(x) (*((ptr *)((uptr)(x)+5))) ++#define INITSYMPVAL(x) (*((ptr *)((uptr)(x)+9))) ++#define INITSYMPLIST(x) (*((ptr *)((uptr)(x)+13))) ++#define INITSYMNAME(x) (*((ptr *)((uptr)(x)+17))) ++#define INITSYMSPLIST(x) (*((ptr *)((uptr)(x)+21))) ++#define INITSYMHASH(x) (*((ptr *)((uptr)(x)+25))) ++#define SETSYMVAL(x,y) DIRTYSET(((ptr *)((uptr)(x)+5)),(y)) ++#define SETSYMPVAL(x,y) DIRTYSET(((ptr *)((uptr)(x)+9)),(y)) ++#define SETSYMPLIST(x,y) DIRTYSET(((ptr *)((uptr)(x)+13)),(y)) ++#define SETSYMNAME(x,y) DIRTYSET(((ptr *)((uptr)(x)+17)),(y)) ++#define SETSYMSPLIST(x,y) DIRTYSET(((ptr *)((uptr)(x)+21)),(y)) ++#define SETSYMHASH(x,y) DIRTYSET(((ptr *)((uptr)(x)+25)),(y)) ++#define VECTTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define INITVECTIT(x,i) (((ptr *)((uptr)(x)+5))[i]) ++#define SETVECTIT(x,i,y) DIRTYSET((((ptr *)((uptr)(x)+5))+i),(y)) ++#define FXVECTOR_TYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define FXVECTIT(x,i) (((ptr *)((uptr)(x)+5))[i]) ++#define BYTEVECTOR_TYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define BVIT(x,i) (((octet *)((uptr)(x)+9))[i]) ++#define INEXACTNUM_TYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define INEXACTNUM_REAL_PART(x) (*((double *)((uptr)(x)+9))) ++#define INEXACTNUM_IMAG_PART(x) (*((double *)((uptr)(x)+17))) ++#define EXACTNUM_TYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define EXACTNUM_REAL_PART(x) (*((ptr *)((uptr)(x)+5))) ++#define EXACTNUM_IMAG_PART(x) (*((ptr *)((uptr)(x)+9))) ++#define RATTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define RATNUM(x) (*((ptr *)((uptr)(x)+5))) ++#define RATDEN(x) (*((ptr *)((uptr)(x)+9))) ++#define CLOSENTRY(x) (*((ptr *)((uptr)(x)+3))) ++#define CLOSIT(x,i) (((ptr *)((uptr)(x)+7))[i]) ++#define FLODAT(x) (*((double *)((uptr)(x)+6))) ++#define PORTTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define PORTNAME(x) (*((ptr *)((uptr)(x)+37))) ++#define PORTHANDLER(x) (*((ptr *)((uptr)(x)+5))) ++#define PORTINFO(x) (*((ptr *)((uptr)(x)+33))) ++#define PORTOCNT(x) (*((iptr *)((uptr)(x)+9))) ++#define PORTOLAST(x) (*((ptr *)((uptr)(x)+17))) ++#define PORTOBUF(x) (*((ptr *)((uptr)(x)+21))) ++#define PORTICNT(x) (*((iptr *)((uptr)(x)+13))) ++#define PORTILAST(x) (*((ptr *)((uptr)(x)+25))) ++#define PORTIBUF(x) (*((ptr *)((uptr)(x)+29))) ++#define STRTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define STRIT(x,i) (((string_char *)((uptr)(x)+5))[i]) ++#define BIGTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define BIGIT(x,i) (((bigit *)((uptr)(x)+5))[i]) ++#define CODETYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define CODELEN(x) (*((iptr *)((uptr)(x)+5))) ++#define CODERELOC(x) (*((ptr *)((uptr)(x)+9))) ++#define CODENAME(x) (*((ptr *)((uptr)(x)+13))) ++#define CODEARITYMASK(x) (*((ptr *)((uptr)(x)+17))) ++#define CODEFREE(x) (*((iptr *)((uptr)(x)+21))) ++#define CODEINFO(x) (*((ptr *)((uptr)(x)+25))) ++#define CODEPINFOS(x) (*((ptr *)((uptr)(x)+29))) ++#define CODEIT(x,i) (((octet *)((uptr)(x)+33))[i]) ++#define RELOCSIZE(x) (*((iptr *)((uptr)(x)+0))) ++#define RELOCCODE(x) (*((ptr *)((uptr)(x)+4))) ++#define RELOCIT(x,i) (((uptr *)((uptr)(x)+8))[i]) ++#define CONTSTACK(x) (*((ptr *)((uptr)(x)+7))) ++#define CONTLENGTH(x) (*((iptr *)((uptr)(x)+11))) ++#define CONTCLENGTH(x) (*((iptr *)((uptr)(x)+15))) ++#define CONTLINK(x) (*((ptr *)((uptr)(x)+19))) ++#define CONTRET(x) (*((ptr *)((uptr)(x)+23))) ++#define CONTWINDERS(x) (*((ptr *)((uptr)(x)+27))) ++#define RTDCOUNTSTYPE(x) (*((iptr *)((uptr)(x)+1))) ++#define RTDCOUNTSTIMESTAMP(x) (*((U64 *)((uptr)(x)+9))) ++#define RTDCOUNTSIT(x,i) (((uptr *)((uptr)(x)+17))[i]) ++#define RECORDDESCPARENT(x) (*((ptr *)((uptr)(x)+5))) ++#define RECORDDESCSIZE(x) (*((ptr *)((uptr)(x)+9))) ++#define RECORDDESCPM(x) (*((ptr *)((uptr)(x)+13))) ++#define RECORDDESCMPM(x) (*((ptr *)((uptr)(x)+17))) ++#define RECORDDESCNAME(x) (*((ptr *)((uptr)(x)+21))) ++#define RECORDDESCFLDS(x) (*((ptr *)((uptr)(x)+25))) ++#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29))) ++#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33))) ++#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37))) ++#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1))) ++#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i]) ++#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp)) ++#define CODEENTRYPOINT(x) ((ptr)((uptr)(x)+code_data_disp)) ++#define SETCLOSCODE(p,x) (CLOSENTRY(p) = CODEENTRYPOINT(x)) ++#define SYMCODE(p) ((ptr)((uptr)SYMPVAL(p)-code_data_disp)) ++#define INITSYMCODE(p,x) (INITSYMPVAL(p) = CODEENTRYPOINT(x)) ++#define SETSYMCODE(p,x) SETSYMPVAL(p,CODEENTRYPOINT(x)) ++#define BIGLEN(x) ((iptr)((uptr)BIGTYPE(x) >> bignum_length_offset)) ++#define BIGSIGN(x) ((BIGTYPE(x) & mask_bignum_sign) >> bignum_sign_offset) ++#define SETBIGLENANDSIGN(x,xl,xs) BIGTYPE(x) = (uptr)(xl) << bignum_length_offset | (xs) << bignum_sign_offset | type_bignum ++#define CLOSLEN(p) CODEFREE(CLOSCODE(p)) ++#define GUARDIANOBJ(x) (*((ptr *)((uptr)(x)+0))) ++#define GUARDIANREP(x) (*((ptr *)((uptr)(x)+4))) ++#define GUARDIANTCONC(x) (*((ptr *)((uptr)(x)+8))) ++#define GUARDIANNEXT(x) (*((ptr *)((uptr)(x)+12))) ++#define INITGUARDIANOBJ(x) (*((ptr *)((uptr)(x)+0))) ++#define INITGUARDIANREP(x) (*((ptr *)((uptr)(x)+4))) ++#define INITGUARDIANTCONC(x) (*((ptr *)((uptr)(x)+8))) ++#define INITGUARDIANNEXT(x) (*((ptr *)((uptr)(x)+12))) ++#define FORWARDMARKER(x) (*((ptr *)((uptr)(x)+0))) ++#define FORWARDADDRESS(x) (*((ptr *)((uptr)(x)+4))) ++#define CACHEDSTACKSIZE(x) (*((iptr *)((uptr)(x)+0))) ++#define CACHEDSTACKLINK(x) (*((ptr *)((uptr)(x)+4))) ++#define RPHEADERFRAMESIZE(x) (*((iptr *)((uptr)(x)+8))) ++#define RPHEADERLIVEMASK(x) (*((ptr *)((uptr)(x)+0))) ++#define RPHEADERTOPLINK(x) (*((uptr *)((uptr)(x)+4))) ++ ++/* machine types */ ++#define machine_type_names {"any", "i3le", "ti3le", "i3nt", "ti3nt", "i3fb", "ti3fb", "i3ob", "ti3ob", "i3osx", "ti3osx", "a6le", "ta6le", "a6osx", "ta6osx", "a6ob", "ta6ob", "a6s2", "ta6s2", "i3s2", "ti3s2", "a6fb", "ta6fb", "i3nb", "ti3nb", "a6nb", "ta6nb", "a6nt", "ta6nt", "i3qnx", "ti3qnx", "arm32le", "tarm32le", "ppc32le", "tppc32le"} ++ ++/* allocation-space names */ ++#define alloc_space_names "new", "impure", "symbol", "port", "weakpr", "emph", "pure", "cont", "code", "p-tobj", "ip-rec", "data", "empty" ++ ++/* allocation-space characters */ ++#define alloc_space_chars 'n', 'i', 'x', 'q', 'w', 'e', 'p', 'k', 'c', 'r', 's', 'd', 'e' ++ ++/* threads */ ++#define THREADTC(x) (*((uptr *)((uptr)(x)+5))) ++ ++/* thread-context data */ ++#define DSTBV(x) (*((ptr *)((uptr)(x)+356))) ++#define SRCBV(x) (*((ptr *)((uptr)(x)+360))) ++#define U(x) (*((ptr *)((uptr)(x)+180))) ++#define V(x) (*((ptr *)((uptr)(x)+184))) ++#define W(x) (*((ptr *)((uptr)(x)+188))) ++#define X(x) (*((ptr *)((uptr)(x)+192))) ++#define Y(x) (*((ptr *)((uptr)(x)+196))) ++#define AC0(x) (*((void* *)((uptr)(x)+20))) ++#define AC1(x) (*((void* *)((uptr)(x)+24))) ++#define ACTIVE(x) (*((I32 *)((uptr)(x)+156))) ++#define ALLOCCOUNTER(x) (*((U64 *)((uptr)(x)+344))) ++#define AP(x) (*((void* *)((uptr)(x)+40))) ++#define ARGREGS(x,i) (((void* *)((uptr)(x)+0))[i]) ++#define BLOCKCOUNTER(x) (*((ptr *)((uptr)(x)+240))) ++#define CCHAIN(x) (*((ptr *)((uptr)(x)+144))) ++#define CODERANGESTOFLUSH(x) (*((ptr *)((uptr)(x)+148))) ++#define COMPILEPROFILE(x) (*((ptr *)((uptr)(x)+284))) ++#define COMPRESSFORMAT(x) (*((ptr *)((uptr)(x)+320))) ++#define COMPRESSLEVEL(x) (*((ptr *)((uptr)(x)+324))) ++#define CP(x) (*((void* *)((uptr)(x)+32))) ++#define CURRENTERROR(x) (*((ptr *)((uptr)(x)+236))) ++#define CURRENTINPUT(x) (*((ptr *)((uptr)(x)+228))) ++#define CURRENTMSO(x) (*((ptr *)((uptr)(x)+248))) ++#define CURRENTOUTPUT(x) (*((ptr *)((uptr)(x)+232))) ++#define DEFAULTRECORDEQUALPROCEDURE(x) (*((ptr *)((uptr)(x)+312))) ++#define DEFAULTRECORDHASHPROCEDURE(x) (*((ptr *)((uptr)(x)+316))) ++#define DISABLECOUNT(x) (*((ptr *)((uptr)(x)+208))) ++#define EAP(x) (*((void* *)((uptr)(x)+44))) ++#define ESP(x) (*((void* *)((uptr)(x)+36))) ++#define FXFIRSTBITSETBV(x) (*((ptr *)((uptr)(x)+260))) ++#define FXLENGTHBV(x) (*((ptr *)((uptr)(x)+256))) ++#define GENERATEINSPECTORINFORMATION(x) (*((ptr *)((uptr)(x)+288))) ++#define GENERATEPROCEDURESOURCEINFORMATION(x) (*((ptr *)((uptr)(x)+292))) ++#define GENERATEPROFILEFORMS(x) (*((ptr *)((uptr)(x)+296))) ++#define GUARDIANENTRIES(x) (*((ptr *)((uptr)(x)+140))) ++#define INSTRCOUNTER(x) (*((U64 *)((uptr)(x)+336))) ++#define KEYBOARDINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+220))) ++#define LZ4OUTBUFFER(x) (*((void* *)((uptr)(x)+328))) ++#define METALEVEL(x) (*((ptr *)((uptr)(x)+280))) ++#define NULLIMMUTABLEBYTEVECTOR(x) (*((ptr *)((uptr)(x)+272))) ++#define NULLIMMUTABLEFXVECTOR(x) (*((ptr *)((uptr)(x)+268))) ++#define NULLIMMUTABLESTRING(x) (*((ptr *)((uptr)(x)+276))) ++#define NULLIMMUTABLEVECTOR(x) (*((ptr *)((uptr)(x)+264))) ++#define OPTIMIZELEVEL(x) (*((ptr *)((uptr)(x)+300))) ++#define PARAMETERS(x) (*((ptr *)((uptr)(x)+352))) ++#define RANDOMSEED(x) (*((U32 *)((uptr)(x)+152))) ++#define REAL_EAP(x) (*((void* *)((uptr)(x)+72))) ++#define RET(x) (*((void* *)((uptr)(x)+48))) ++#define SCHEMESTACK(x) (*((void* *)((uptr)(x)+160))) ++#define SCHEMESTACKSIZE(x) (*((iptr *)((uptr)(x)+172))) ++#define SFD(x) (*((ptr *)((uptr)(x)+244))) ++#define SFP(x) (*((void* *)((uptr)(x)+28))) ++#define SIGNALINTERRUPTPENDING(x) (*((ptr *)((uptr)(x)+212))) ++#define SIGNALINTERRUPTQUEUE(x) (*((ptr *)((uptr)(x)+216))) ++#define SOMETHINGPENDING(x) (*((ptr *)((uptr)(x)+200))) ++#define STACKCACHE(x) (*((ptr *)((uptr)(x)+164))) ++#define STACKLINK(x) (*((ptr *)((uptr)(x)+168))) ++#define SUBSETMODE(x) (*((ptr *)((uptr)(x)+304))) ++#define SUPPRESSPRIMITIVEINLINING(x) (*((ptr *)((uptr)(x)+308))) ++#define TARGETMACHINE(x) (*((ptr *)((uptr)(x)+252))) ++#define TD(x) (*((void* *)((uptr)(x)+68))) ++#define THREADNO(x) (*((ptr *)((uptr)(x)+224))) ++#define TIMERTICKS(x) (*((ptr *)((uptr)(x)+204))) ++#define TRAP(x) (*((void* *)((uptr)(x)+52))) ++#define TS(x) (*((void* *)((uptr)(x)+64))) ++#define VIRTUALREGISTERS(x,i) (((ptr *)((uptr)(x)+76))[i]) ++#define WINDERS(x) (*((ptr *)((uptr)(x)+176))) ++#define XP(x) (*((void* *)((uptr)(x)+56))) ++#define YP(x) (*((void* *)((uptr)(x)+60))) ++#define ARGREG(x,i) (((void* *)((uptr)(x)+0))[i]) ++#define VIRTREG(x,i) (((ptr *)((uptr)(x)+76))[i]) ++ ++/* library entries we access from C code */ ++#define library_nonprocedure_code 152 ++#define library_dounderflow 154 +diff --git a/boot/arm32le/petite.boot b/boot/arm32le/petite.boot +new file mode 100644 +index 0000000..c315e9d +--- /dev/null ++++ b/boot/arm32le/petite.boot +@@ -0,0 +1,17806 @@ ++chezI>()$„* P ÊääÞäZÒÜìÞÖÊ L á ™å™å™å p™å@™å4€™å(P™å ™åð—å$V,lòJ ( ÒÜìÞÖÊ L á ™å™å™å p™å@™å4€™å(P™å ™å Šâ JâàâàŠåð—å]ðà ãà‰å@‰å4€‰å(P‰å ‰å0Ÿåê$þ3ÿ/á@‰å ‰å‰å0ðòÿÿêÊ"8 ,chezI()$r,°ñOHÄÂæÊZäèÈP P‚ ++ÌØÈ àÂäÊÜè æÆÐÊÚÊZÞÄÔÊÆè ++ ++æÒôÊ 1àÚ#Ú"-2ÜÂÚ-*AÌØÈæ2R ++ÌØÂÎ:@1êÒÈBb ÆÞêÜè!ÀJ L chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* $0*B   L>@ ãðšå$0*B   L>@ ãðšå#:,žñB X  LpŸåê fX±@ ãð—åB=ð x ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòSö  ‰å‰å‰å4€‰å(P‰å ‰å0Sñ3ÿ/á4€™å(P™å ™å>@ ãðšår $0gð ++ &æÆÂÜZäÊÚÊÚÄÊäÊÈZæÊèeˆà‰å 0‰åmúD°‰å@À‰å8`‰å p‰å@fà-åà…ø!>ÿ/áàäà™å 0™å ™å™å™åD°™å@À™å8`™å p™å@™å±ÿ/á² (#,löB H  LpŸåê& ã±@ ãð—åB5ð x ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòKö  ‰å‰å‰å4€‰å(P‰å ‰å0Sð)3ÿ/á4€™å(P™å ™å>@ ãðšår $ ð "ÜÞÜàäÞÆÊÈêäÊZÆÞÈÊ`ð °–åà â^ã p áà›å à†å§€¯8`‰å p‰å@Œ ø ™å™å™å p™å@™å èÿÿêÊ #ž,ððB à  L0Ÿåêà ø ƒâà‚åã ++,°™å Uá*°Kâ,°‰å ‹å4æ àƒå>@ ãðšå@1ÿ/á@ñ ++ðÿÿêBHÌÞäÊÒÎÜZÊÜèäò“+p !¡ø@ á@‰å4€‰å(P‰å ‰åµð3ÿ/á@™å4€™å(P™å ™åðj "hB0 ++0B¬#°,ðB à  L0Ÿåêà ø ƒâà‚åã ++,°™å Uá*°Kâ,°‰å ‹å4æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêB,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò›/x  ±ø  ‰å‰å‰å4€‰å(P‰å ‰åÉõ3ÿ/á4€™å(P™å ™•ðr $hB0 ++0B¬$0*B   L>@ ãðšå#Ò,æð B P  L* ãŸåê` ñp–å@ ã ð–åJ9à ÎÊèZäÞÞÚBö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàjðP>ÿ/áàäà™å 0™å ™å™å™åD°™å@À™å8`™å p™å@™å4€™å(P™å ™åÿ/á² &,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#¬,Àð B P  L ãŸåê` ñp–å@ ã ð–åJ9ðà ÆÂØØZÊääÞäCö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàkð+>ÿ/áàä ™å™å™å p™å@™å4€™å(P™å ™åð—å² ,HÒÜæèÐØÒÄäÂäòZÊÜèäò#Ú,ìð B P  L– ãŸåê` ñp–å@ ã ð–åJ9ð ÈÞÞìÊäÌØÞÞÈEö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàmðP>ÿ/áàäà™å 0™å ™å™å™åD°™å@À™å8`™å p™å@™å4€™å(P™å ™åÿ/á² ++,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#Ø,êð B P  L% ãŸåê` ñp–å@ ã ð–åJ9ð ÈÞÞìÊäÌØÞîDö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàlðP>ÿ/áàäà™å 0™å ™å™å™åD°™å@À™å8`™å p™å@™å4€™å(P™å ™åÿ/á² ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#,pò B `  LŸåêø ` ñp–å@ ã ð–åZAÁ€ ÈÞäÊæèHô@@DâTã& ãÿ/á„A á`EâP•à*,°™å[á:@„à†å á`†âVá ++`†å†å  ¦ÀŠâ°œå°ö Œâ÷ÿÿê&° ã°†åÚÿÿêà-å°Øð;ÿ/áàäÛÿÿê ++’BP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#ú,8ð B P  L  ãŸåê` ñp–å@ ã ð–åJ9ÀX ÈÞäÊæè@ôA@DâTã& ãÿ/á„A á`EâP•à*,°™å[á:@„à†å á`†âVá ++`†å †å ¦ÀŠâ°œå°ö Œâ÷ÿÿê&° ã°†åßÿÿêà-å°Äð;ÿ/áàäàÿÿê ++jBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#ò, ò B `  LŸåê ` ñp–å@ ã ð–åZAÀ0 ÈÞäÊæèHôI@DâTã&  ãÿ/á„A á`EâP•à*,°™å[á:@„à †å  á`†âVá ++`†åÀŠâ°œå°†åö Œâ÷ÿÿê&° ã°†åäÿÿêà-å°°ð;ÿ/áàäåÿÿê ++BBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#ô, ð B P  L ãŸåê` ñp–å@ ã ð–åJ9À@ ÈÞäÊæè@ñL@DâTã&° ã°Šåÿ/á„A á`EâP•à*,°™å[á:@„à°šå°†å`Šå`†âVá ++`†åÀŠâ°œ €ÀŒâ÷ÿÿêlæ°†åãÿÿêà-å°¸ð;ÿ/áàääÿÿê ++RBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#þ,0ò B `  LŸåê ` ñp–å@ ã ð–åZAÀ@ ÈÞäÊæèHóL@DâTã&° ã°Šåÿ/á„A á`EâP•à*,°™å[á:@„à°šå°†å`Šå`†âVá ++`†å ÀŠâ°œ €ÀŒâ÷ÿÿêlæ°†åãÿÿêà-å°¸ð;ÿ/áàääÿÿê ++RBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#ô, ð B P  L‚ ãŸåê` ñp–å@ ã ð–åJ9À@ ÈÞäÊæè@ñL@DâTã&° ã °Šåÿ/á„A á`EâP•à*,°™å[á:@„à °šå°†å `Šå`†âVá ++`†åÀŠâ°œ €ÀŒâ÷ÿÿêlæ°†åãÿÿêà-å°¸ð;ÿ/áàääÿÿê ++RBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#¨,¼ð B P  L¦ ãŸåê` ñp–å@ ã ð–åJ9Ðà ÈÞÂäÎÊääAö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàið<>ÿ/áàä ™å™å™å p™å@™å4€™å(P™å ™åð—å² ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#X, Øò B @  L$à™åZá*Ÿåê( ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP,P LD0ð3ÿ/áÚÿÿê rB´P€ ´„p á0 á¼ÿ%*°™å—åpŠå0Šå ´ ´" ó  Jâpšå0šå&Sã@ ãð—å à“å&^ã“å á áÔ ð:2ÿ/áÔÿÿê’HÈÞZîÒÜÈXò€ ++ÂààØò ++0B(  ++,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò2p(BÐB`Šâ0Vá0Ñ)%q`O*-MLæÿÿêñÉÿÿê ++šXú 00, ++(  ++ ++0B(# 8, ÄðB P  Lš ãŸåê` ðp–å@ ã ð–åJB  X îÒÜÈÊäZÈêÚÚòH0&%÷ á@ ã¨p™å< ‰å°—å à—å ^áVààã[á à€Zpžå”„ö;ð—å@[ãÊÁ á ++ÀŒà ÀŒà$à™å ^᪠‰å‰å‰å8`‰å p‰å@‰å4€‰å(P‰å ‰å0Xñ3ÿ/á ™å™å™å p™å@™å4€™å(P™å ™¸ð;à—å¨à‰å ++°‹àTã Ú<`™å Dâ ++¡ á V᪠Jâà†â ++0žçà‹â ++0ŽçZãøÿÿ  ™å`ðZá ++à–åàŠå Šâ`†âøÿÿêTãñ@ áð—å`—å`Šåðå  Šàà–åà‹å°‹4S ++[áù\Àà—å°Šàåÿÿê pD°ÿÿºÄð ‰å —å  ‰åÌJâ$ àH‰dàÀ Ú°Dâ ± áè1°KØ Ø1Šâ Ø[Øñ°™å¬à™åà‹å¤à™ 1¤°‰ì@¬à‰åè1 à‡ñ(à‡åÅÿÿêZr` ++ ++HÞÞàæ( XÂèèÊÚàè@èÞ@ÒÜìÞÖÊ@æÐÞè@ÞÜÊZ ðÆÞÜèÒÜêÂèÒÞÜ° ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò# Œ,’ò B `  LŸåê( ` ðp–å@ ã ð–åZ   ÆÞÜèÒÜêÂèÒÞÜ‚L÷'°0™åà—åSá„< ‰å  ™å°—å à—å ^áVààã[á àtxpžå ãˆxö;ð—å@[ãÊÁ á ++ÀŒà ÀŒà$à™å ^᪠‰å‰å‰å8`‰å p‰å@‰å4€‰å(P‰å ‰å0Xó3ÿ/á ™å™å™å p™å@™å4€™å(P™å¸ð5à—å¨à‰å ++°‹àTã Ú<`™å Dâ ++¡ á V᪠Jâà†â ++0žçà‹â ++0ŽçZãøÿÿ `ðZá ++à–åàŠå Šâ`†âøÿÿêTãñ@ áð—å`—å`Šåðå  Šàà–åà‹å°‹4S ++[áù\tp°Šàåÿÿê pD°ÿÿºÄð ‰å —å  ‰åÌJâ$ àH‰dàÀ Ú°Dâ ± áè1°KØ Ø1Šâ Ø[Øñ°™å¬à™åà‹å¤à™ 1¤°‰ì@¬à‰åè1 à‡ðà‡åÅÿÿêTã&` ã¼¦ á áÀœ€ÿ/á@Dâ,,ð` áòÿÿê„A á`EâP•à*,à™å^á:@„à†Dôá`†âVá ++`†å†å  ¦ÀŠâàœåàðŒâ÷ÿÿê&à ãà†åÙÐ TñÝÿÿê ++ª ++ ++HÞÞàæ( XÂèèÊÚàè@èÞ@ÒÜìÞÖÊ@æÐÞè@ÞÜÊZ Ið° 8B ++pBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#r,¾ð B P  L ãŸåê` ñp–å@ ã ð–åJ9ÀÈ ÆÂØØÆÆ@÷p á¨°™å ` á@–å à–å^á ++ @†å`–åøÿÿê@d!àš$ð0›å°à™åS4ð  á@ ãð—å`Eâ P…â,à™å^á:l&àL@à†åP1à†Hð @Šå°†å¨`‰å @™å  ‰å@†å@Jà”÷@†å¬à™åàNà¬à‰åt&0\ð&3ÿ/áâÿÿê’b4˜B  ++¸BP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#‚, ºð B P  LC ãŸåê` ñp–å@ ã ð–åJ9Ð ÆÂØØbÆÆA§p á¨°™å@Eñ,àšå^á0›å°à™åSá  á@ ãð—å`Eâ P…â,à™å^áX:LàL@à†åP1à†Hñà†å°†å¨`‰å @™å@†åàJàà†å«Šâ$løZá ʬJâ@Jà @†å  ‰å¬à™åàNà¬à‰å áhDàŠå˜(ô à†å¤ ™å&Zã @ á`…â4ÄøP•à*À€:  ál('¬àÏ}àŠà$à‰å„&0Ð3ÿ/áèÿÿêàšå¤L"@šÐ@X±þÿÿ ++àŽàà„\\ñ¡ÿÿêRb4˜B Ð † ++0BPˆ ð ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#, ++ð B P  L' ãŸåê` ñp–å@ ã ð–åJ9ð0 ÈÞÌÂäÎÒÜèfdDð$°”å@”åF[ã ++@dâÿ/á,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#‚,œð B P  L ++  ãŸåê` ñp–å@ ã ð–åJ9ð¸ ÈÞäÊèÒÜèfdCó&`EâP…â,°™å[á ++:Tãªf° ã°†å@dâ@†å@ áÿ/áF¦ùÿÿêà-å°wð;ÿ/áàäíÿÿê ++ÊBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#V,lð B P  L¢ ãŸåê` ñp–å@ ã ð–åJ9ðˆ ÈÞäÊèêÜæfdCö`EâP…â,°™å[á:F° ã°†å@†å@ áÿ/áà-å°_;ðäóÿÿê ++šBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#¨,Òò B `  LŸåêˆ ` ñp–å@ ã ð–åZAðè ÈÞÌÂäÎÒÜèlhLû` á°–åF[ã@–å° ã°‰åÿ/áf[ã @@tâ,€°™å°kâ@óÿÿê@ °àáð ïÿÿêÀ–åÀ‰å @–å†[ãêÿÿ ++ð ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#x,¤ð B P  LI ãŸåê` ñp–å@ ã ð–åJ9ð˜ ÈÞäÊèÒÜèlhDÀ°™å[ã.ª ð °àá°‰å@dâTã@°‹âð `EâP…â,°™å[á:¦° ã°†å(ö°†å @†å@ áÿ/áà-å°˜;däñÿÿê|@éÿÿXXS:fX@†åêÿÿêLôL=LS:FLëHLõÿÿêà<†<Æ< ¡ ++ ++BP ++˜xð ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#Ð,2ò B `  LŸåê˜ ` ñp–å@ ã ð–åZAð0 ÈÞäÊèêÜælhLö+°™å[ã`EâP…â,°™å[á:F° ã°†å@†å@ áÿ/áà-å°l;`äóÿÿêDDS:†DlÏ°†å @†åëÿÿêHÐòÿÿê ++²BP ++ð ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò# ,Tð B P  Ls ãŸåê` ñp–å@ ã ð–åJ9ðh ÈÞÌäÊèêpTCð Tã` ãÿ/á° ã ÀÔç\ø ++°‹âúÿÿê[ãc0ð%°‰å°‹â°Ëã`Eâ P•à*,p™åWá :°™å‹± á°‹ã°†åP` KâpÀ p†à ÀÇåøÿÿêXfà-åpl7ðäëÿÿê¢ ++ØBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#(,fò B `  LŸåê8 ` ñp–å@ ã ð–åZAòh ÈÞÌäÊèêblTLð ++Tã` ãÿ/á° ã»À”á\ø ++°‹âúÿÿê[ãd0ð%°‰å°‹â°Ëã`Eâ P•à*,p™åWá :°™å‹± á°‹ã°†åP` KâpÀ p†à¹ÀÇáøÿÿêXfà-åpl7ðäëÿÿê¢ ++ØBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#",Vð B P  L  ãŸåê` ñp–å@ ã ð–åJ9ðh ÈÞÌäÊèêfdTDð Tã` ãÿ/á° ã À”ç\ø ++°‹âúÿÿê[ãd0ð%°‰å°‹â°Ëã`Eâ P•à*,p™åWá :°™å‹± á°‹ã°†åP` KâpÀ p†à À‡åøÿÿêXfà-åpl7ðäëÿÿê¢ ++ØBP,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#®,Àð B P  L) ãŸåê` ñp–å@ ã ð–åJ9ðà ÈÞÚìØÊèÊääCö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàkð<>ÿ/áàä ™å™å™å p™å@™å4€™å(P™å ™åð—å² ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#²,Äð B P  L’ ãŸåê` ñp–å@ ã ð–åJ9ðà ìÂØêÊæZÊääÞäEö+à‰å 0‰å ‰å‰å‰åD°‰å@À‰å8`‰å p‰å@‰å4€‰å(P‰å ‰åà-åàmð<>ÿ/áàä ™å™å™å p™å@™å4€™å(P™å ™åð—å² ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#Î,Þð B P  L] ãŸåê` ñp–å@ ã ð–åJ9ð ÄòèÊìÊÆèÞäz~Fð&Pá ++àå®1 áà‘å®á á^á Sã º å à‘åRáð(0Câ€ââõÿÿê@ ãðšåSã ++ å ‘å0câƒ1 á á ápTóÿÿ0ð ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäò#¾, ðB à  L0Ÿåêà ø ƒâà‚åã ++,°™å Uá*°Kâ,°‰å ‹å4æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêB0HÒÜæèÂÜèÒÂèÊZÆÞÈÊZÞÄÔÊÆè/x " µø  ‰å‰å‰å4€‰å(P‰å ‰åÍð3ÿ/á@™å4€™å(P™å ™å™ðr *hB0 ++0B¬#,~ñB    L$à™åZá+*0Ÿåê ö0Šå Šâ àâàŠåÀâÿ/áiö+ Jâ0šåà”å!àNâ ƒâà‚åã ++,°™å Uá*°Kâ,°‰å ‹åàXæ àƒå>@ ãðšå@1ÿ/á@Hðÿÿê°ñ3ÿ/áÎÿÿêZ HÜêÂèÊìP@ ëÁTã@ áW ÇðbBL8B8B$xB0 ++0B¬ ++0B(#ú,<öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò+ðÿÿêBäÂîZäÊÌZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZb àäÞÌÒØÊ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#þ,BöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ó-ðÿÿêB äÂîZÆäÊÂèÊZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZd àäÞÌÒØ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#þ,@öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò-ðÿÿêBäÂîZÂØØÞÆZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZf àäÞÌÒØÊ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#ò,4öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò'ðÿÿêBäÊÌZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZh àäÞÌÒØÊ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,DöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ó.ðÿÿêB"àÂÒäZÆäÊÂèÊZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZj àäÞÌÒØ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,HöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ó0ðÿÿêB&ìÊÆèÞäZÆäÊÂèÊZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZl àäÞÌÒØ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,FöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò0ðÿÿêB$ìÊÆèÞäZÂØØÞÆZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZp àäÞÌÒØÊ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,VöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò8ðÿÿêB2àÂÈÈÊÈZìÊÆèÞäZÂØØÞÆZÆÞêÜè&ÄÐÞîèlî`ÆÞðØ`ædòZbb àäÞÌÒØÊ+üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,JöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ó1ðÿÿêB(ÆØÞæêäÊZÆäÊÂèÊZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZn àäÞÌÒØ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,HöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò1ðÿÿêB&ÆØÞæêäÊZÂØØÞÆZÆÞêÜè$ÄÐÞîèlî`ÆÞðØ`ædòZr àäÞÌÒØÊ*üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬#,XöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ò9ðÿÿêB4àÂÈÈÊÈZÆØÞæêäÊZÂØØÞÆZÆÞêÜè&ÄÐÞîèlî`ÆÞðØ`ædòZb` àäÞÌÒØÊ+üÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 4Á ++ÌØÈ ++ð êàèä ++ L PB0 ++0B¬# , ²öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@Oðÿÿêñ ØÿÿêBHÊâZÐèZäèÈ  ++þ?0ÒÆÎêêpÚØÐÚbònòîæÂÒäðÆÖZ`P Ðè$ÄêpbbôdÞÜÌrÞlèÌÆZlPÐÂæÐèÂÄØÊ&`&Ö ‚/ñ$ ++ÌØÈèòàÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++Úê8~  LP!_0_pÐè2!(  ++4JÁìÊÆ ‘ ÚÒÜØÊÜ"qæÒôÊ*k k8kC? n &i&a"[ RæêÄþ@2n÷  PB0 HæòÚÄÞØÄ5 pz'°/´1y ÊâêÒì~³³À ++0B¬ ++0B¬# ,-ö&B   L$à™åZá* ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,j Jâ]H D<0ð3ÿ/áÞÿÿê bB 8 ¢ñ  áàâ^ãUà ý,`EâP…â,à™å^á:@ á€â0‚âà„â‹‘í›“í ‹(î‹ŽíðšzŒñÿÿê‚âP4Põ0 áp€ââàƒâ‹—훑P 8!8T  á8Y‚â‹8W`Eâ4¼ñ6à ãà„åà ãàƒà‹ží „à8‚Øv¦1ÿ/áêÿÿê P2ÿ/áØ DÅÿÿêX?€ _â‚ €  4†’4( V0 Ô® ‚â 0€â°Ô{  áÀ‹âpØ–€â‹œí›—Ø 4i4p á`ƒâÀŸ‡â‹–훜4W4cÀ€â‡<dRíI‹80„ 4Eh‹x†¤.434ƒ444ÌØ܃Ü8ä€ØƒØ ÐêÄØp_7ÿ/áÆ´À_<ÿ/á¢(<á~ÿÿê ++êBP ++°(-È-`ò ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ&€&B`ŠâÌoVá&*6ÿÿÿÿ xÓþÿê ++ ++KB°, ++0B(# ˆ,¨ö&B   L$à™åZá*^ ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ Jâ_H D<0ð3ÿ/áÞÿÿê bB  Ð ¢ñàâ^ãCà ý,`EâP…â,à™å^á:@ á €â0âà„â‹’í›“í ‹8î‹ŽíðšvPñÿÿê0 P"PL]ƒâà†L×  á 0â`Eâ8ˆñ6à ãà„åà ãà‚à‹ží !„à@ ƒ¤>¦1ÿ/áêÿÿê „2ÿ/á×ÿÿê-0€ÄƒÄ€Äjn €âp€5„õ0 á°‚â ‡âàƒâ‹›í›’Àn €â <!øp á€â ¥à‚â‹í›‘<ôƒô‚ô&Ø „áÄÿÿê ++âBP ++H( ` À ñ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâN$ NB`ŠâôoVá¹*^ÿÿ× @ÿÿê ++s°, ++0B(# â,àö&B   L$à™åZá*  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,j JâaH D<0ð3ÿ/áÞÿÿê bB  ` ¢ñàâ^ãUà ý,`EâP…â,à™å^á:@ á €â0âà„⋒훓íI‹8î‹ŽíðšvŒñÿÿê âP4Põ0 á€â ‚âàƒâ‹í›’P 8ð!:à ãŽï á ++’åà!à ++à†åà’å‡  á`Eâ4¼ñ6à ãà„åà ãàƒà‹ží „àp‚ØrŒ1ÿ/áêÿÿêØ DÅÿÿêX}-0€Ô" # ƒX†XÔO 0€âØ‚ØƒØ Q2ÿ/á×ÄN€âp5Èc°‚⠇țÈ_€â Ì#  #à‚‘<ÌV ôÌáÄÿÿê ++âBP ++°((` À ò ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòX✨œB`ŠâBoVáË*¬ÿÿÿ .ÿÿê ++Á$°, ++0B(#è,E(ö&B   L$à™åZá*b ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ JâcH D<0ð3ÿ/áÞÿÿê bB Ð ¢ñàâ^ãUà ý,`EâP…â,à™å^á:@ á €â0âà„â‹’í›“í ‹ˆî‹ŽíðšvPñÿÿê4 P4P0 áp‚â P•ƒâ‹—í›’P. 8!8@  á8•‚â‹í›‘8W`Eâ4¼ñ6à ãà„åà ãàƒà‹ží „à8‚Ør¦1ÿ/áêÿÿê P2ÿ/áØ DÅÿÿêX½™ pâØ'°›(Ø 4{ cÀ‡â°‡ _œí››4i4£°ƒâ0‚âà†dÄ80„ 4Wt'0ƒtü hEÐcâ‚Шœ34T‡â œ‘„ð ++à ãŽï á ++’åà!à ++à†åà’å?  áV ØÆ$´L¢°_;ÿ/á(~Pþlÿÿê Àâ°â p€âHÕ W‹â ‹ pÃc`ŒâŒ_–í›4±4ppÔŸœT`âœh @q á@‡â ¯à€â‹”í›–@ @œ€œ” iЈ@ œc`‡âp‹œÐ—œ@p<Œh—<? á@†p?I‹84P/tÐ@Y0@p7@ ´<¢@@4@ (lTZ(H6<á$ÿÿê0 ++âBP ++°(-Ð . h!ñ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ.$.B`ŠâÔoVáÙ*>ÿÿÿÿÿÿÿ\  þÿê2 ++S~°, ++0B(#%D,Dzö&NB 3   L$à™åZá+*2 ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,o JâÉH#­H.$õH¹$*=HºH$…H»H$ÍH/ $*H½$]H/ H#¥H±$íH- $*5Hµ$}H"4O8P!ÍP@ ãðšå   €0Rã€À “å âRã Z/0Š* ++^^sònEæÊèB/1pc cx 4[}ÚêèÂÄØÊc&"yhycCc‰ü 篶ÿÿê‘,ô%²{þ.3aØÊÜÎèÐdH/ BÉ]Ò/ɹ?Å\²ŠìÊÆèÞäÅ­Z¥(B& bÜX¥!¥ìf æØ¡:ªô,­* ò Â`3ÂÏ_  Ë* ‚ËËõuËü,Ëb(æˆl„ã kk?g_F Vš$‡ZÌÒðÜêÚBŠ * Ý1¹&²,Ð0<© NÉÓ?º<J Z/RÒ73"ÉÒ˜› ^"*r }$8ÆÂæ$Æô*ô ô¡$àš/’JJ`_&Ìð‡Y&(ÎLÜ@Ìð¿&"­/õy/&û,(Ï&Âê¸/$¦ ƒâQã ¦ ª  ò¾û [yÂ*Ìðä/,¾78*º*. 8 G%b]/ô6ômÁ —à âR,^,.£/ 7\0Ìð(%’²T0/2__0â_`t2"ÄòèÊBpdx24 ,$//Âeûye2ü,4Â&bêÕ†6ÕêÕ6Ù½/!½´6ä½%!¢’/`" uâPµf¡±@*Ý úºð þÿÿQáÊRãÊB! áNá áè? Îè6_ âqbj28$7|R: ÒÜÞTìÂØêÊÚ7p88< $¨F@F>‘>‘&&%r‹&H&›ÿ ±:q@‰ 'Që ++.BÐí ++44ý/'²í ++]B)æDqÿàâ^[m ¡°ñÿÿêbD «*z~ )óÐwø —5 :@D•/+r KF x /- qF•’ KH | //" qH•² K1J %/1B qJ•Ò KL | /3b qL• ++0B(#Ž, dò ++B @  L$à™åZá*ŸåêØ ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâPÜP LD0Ð3ÿ/áÚÿÿê rB²P¸ ²ý,@ áã`EâP…â,à™å^á:Dá á0†âêîÈ‹¸î‹ƒí@ áðšbôóÿÿêàâ^ãà”åàâ^ã ++ Ì^ã áÆÆ4€^ãt,N <<ñP ++ºBP˜ÒÜÊðÂÆèX .üæ@Òæ@ÜÞè@Â@äÊÂØ@ÜêÚÄÊä  ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(J$JB`Šâ0Vá6ZÈ  rÃÿÿê ++ ++Únð X  ++0B, ++0B(#p,$ö&B  €  L$à™åZá‡* ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,_ Jâ H$­HH$õHH$*=H/ÎH#…HÏH$ÍH/ H#*HÑ D<0ð3ÿ/árÿÿê0bB h Qg  áMYYðJÆÂä üæ@Òæ@ÜÞè@Â@àÂÒñ ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ¨B`ŠâålVá:Å°!õ  ++bB,( Xr.j ++ÆÈä`/á] ++’áá)º æÊèZÆÂäBe)"ææO ²æ7æÈæ/ Bæ] ++0B(# ,¥Pö&@B ?ð  L$à™åZáõ*Ò ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,_ JâÓH$­H/5H#õHÕ$*=HÖH$…H×H$ÍH6 $*HÙ$]HÚH$¥HÛH$íH7 $*5HÝ$}HÞH$ÅHßH$* H/ H#UHá$HâH$åHãH$*-H9@$uHå$½HæH$*HçH$MH: $•Hé$ÝHêH$*%HëH$mH; $µHí$ýHîH$*EHïH$H€$ÕHñ$* HòH$eHóH$­H=@$õHõ$*= ++HöH$…H÷H$ÍH> $* Hù$]HúH$¥HûH$íH? $*5 Hý$}HþH$ÅHÿH$* H/ H#UH"4P ¥PP$õP P$*EPAX$/˜˜$ÝPP$/-PP$}PB8$Ř$˜ LD0ð3ÿ/áüÿêPbB h  ++g  áNZZñKJÆÂÂä 6ÒÜÆÞääÊÆè@ØÒæè@æèäêÆèêäÊ@üæ ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòX✨œB`ŠâªlVá:Ò¼!õ  ++bB,( Xr. ++*Èäa/â] ++’â7k ÆÈÂâ/"â] ²â7â Ä/ Bâ]Òâ7l ++ÆÂÂÅ/ bã]òã7ã Æ/ ‚ã]/ã7ã ‹/¢ã]/2ã7ã Æ/Âã]/Rã7] ++ÆÈŒ^8ã Æ^8ã Œ^8ã Æ^8^  ÆÂ/bä] 8"ä /‚ä]"!8$ä !^$#8&ä #^&%8(ä%^('8*ä )^*8,ä +^,8.ä - ^. 8^0 ÆÈ //bä]0 82ä /1‚ä]23 84ä 3 ^45 86ä 5 (äY6%7bä.8ä /9ä]8¢È7:ä /;2ä]:ÒÈ7<ä /=rä]<?t8>ä /?¢ä]> ++0B(#@,lö& ++B   L$à™åZá* ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ JâH D<0ð3ÿ/áÞÿÿê bB h ¡g  áMYYòJ ++êÜÄÞð üæ@Òæ@ÜÞè@Â@ñ ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòX⑨‘B`Šâ6lVá:Ʊ!ð ++bB,( ++0B(#Z,‚ö& ++B   L$à™åZá*  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ Jâ$H D<0ð3ÿ/áÞÿÿê bB h ¡g  áMYYñKJæÊèZÄÞðB .üæ@Òæ@ÜÞè@Â@ÚêèÂÄØÊ@ÄÞð ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòX✨œB`ŠâAlVá:Ѽ!ð ++bB,( ++0B(#Z,‚ö& ++B   L$à™åZá*( ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ Jâ,H D<0ð3ÿ/áÞÿÿê bB h ¡g  áMYYñKJÄÞðZÆÂæB .üæ@Òæ@ÜÞè@Â@ÚêèÂÄØÊ@ÄÞð ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòX✨œB`ŠâAlVá:Ѽ!ð ++bB,( ++0B(#3n,Lö&rB eP  L$à™åZáA*à ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,_ JâäH$­HèH$õHìH$*=H/ H#…H"4„P ÕP˜$*H/qH#eHrH$­HsH$õHð%HôH$…HøH$ÍHüH$*H/ H#]HA°$¥HBH$íHCH$*5H/H#}HE$/Å@/H@#/PLP$ePe0$­˜T˜$ýPXP$/MP\P$Pf8$å˜d˜$/5PhP$…PlP$ÕP8$* Hu $eHvH$­HwH$õHzH$*= ++H{H$…H°$ÍHy$* H$]H}$¥H~H$íHH$*5 H $}H$/Å @/@#/ P P$eP‚è$­HƒH$õH!à$*=H…$…H†H$ÍH‡H$*H"% H‰$/¥¸ $õP¼P$*EPp$/˜Ę$ÝPÈP$/-PÌP$}Pmh$ŘÔ˜$*PŠ¸$]H‹%àØà$õPÜP$*EP#È$H0$ÕHŽH$*HH$eHn $/­¸ä¸$ýPèP$/MPìP$PO8$å˜/ô˜#/5Pøè$…PüP$ÕPÀ $/%PP$uPRØ$½˜$˜$* PØ $/U˜/˜#¥P/èP#õPìP LD0ð3ÿ/á¸ùÿêbB ` ;÷  áà áãã àŠågs·0L  á44d ++0òMzÌðV PÌÒðÜêÚ@ÞìÊäÌØÞî@îÒèÐ@ÂäÎêÚÊÜèæ@üæ@ÂÜÈ@üæ ++HÒÚàÞÞàæ0 $üæ@Òæ@ÜÞè@Â@Lv  ++H'ò  ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ[¨[B`ŠâšoVá+*k BqÎÿÿêšU ++8 +æ ++0B,  XruªuZûû&õ/Ø /’´Tûûo"(Ô %ÂTØ O •Å5  ZÌðbO? @O ++GÙá& RÖ ÈááØU qßÿÿêz¸Ä‘/ â‘o‘Z«o/ ro”Äo )ˆ1ù­‰À  áñÿÿêZ¢_zæN “È„ML:á¤11 ++b v8‘/"Gxp²m‘/BG|pÒm‘/bG ^+xzqòm ‘/‚G"|/m"‘¢5 >$*z~q%Bqd$‘âG& /rm&‘/G( /²m(‘/RG0* ++ ++ /âm*‘/!‚G,|/#"m,‘' h– iêJ.ÌðôÊäÞ~U %j¨T õ„!å;(.âå7Û0ÌðàÞæÒèÒìÊé/'ré]0/)é72ÌðÜÞÜì/)’ì]2/+"ì74ÕOÜÊÎÂé/+²é]4/-Bé76Õì/-Òì]6//bì78KÊìÊÜå//òå]8/1‚å7‹: ÌðÞÈÈä/3ä]:d Hº<ÌðØÞÎÒÞäÍ5h n<‘h H1> 7…d>‘9ŠH@ ð9{n@‘;{HB;ÂÜÈu€nB‘=Ì8Dö:ÜÞè|=Æ^D/?býGFX ú/AúmF‘¢ïGH ò/C2mH‘ÒGJ ïEfnJ‘/Gï7Ló ìGhìTLIÒ$ Pur¹rª.ð^ã@ áðšåx^ãgRðRã2ºt0nâC1 á ã3@ÂRáªNá áN4Æ•Ì8à̡̺¨-ÀRÀÀ•d˜X`H"NÙ7æØØÞNÞNp? N$ˆ$ òP ,ÒÜìÂØÒÈ@æÐÒÌè@ÆÞê‰0 <ôa/ ˜v!Év!ÿÿÿ ž¯0ÿÿêJBN[/Pù [!Kß / Ðó‰zïÿ©/…63ñR.ÌðÂäÒèÐÚÊèÒÆZÁWZØÊÌèìRÈR4R$ $ ++Mw/  ™ ÿÿK IP`ÿÿê8IRU%M%X%0à áiãëF( ³iQrT› !äØùTTó&O2ó €*Þ˜ Rω,?’T  /O °V ÂùVùV /QR ÔV  /Qâ °?X0zWäÒÎÐè X XS¤ËX U&/ S “?ã„9 ÿ©Àw0àãSáªÄ0ànâÌ€Rî á@ÎãÐŒ{ ]>Z$= Zï a Z$€ a $-K)/ hv £v =ÿÿs 'Vž Z=UpW¢ ˜p1ã!1ã3cRãº;Aª@ k ;¬;Q²\! ¤ÄÒè~^ (ñ’ÄÒè@ÒÜÈÊðx7'\K ³W¸,/à³2p=¯ ¬ÇÓÒ^0 cY]-.˜ï ++c³±`ÌðÄÒèZæÊdbd ++`4`d/["d>d¾b0 d&[Â6XÇS “d§_`fC ++ddC/]bZ Z žøf #_~(#§h#_bj# ++hh#/_’#Ôøj #/a2™°lŠÏÆÞàòZÄÒèn$ ++ll$/a¡Ôøn $cÓ)HpÞJèÊæè@'e×)np‘ ++0B(#~,a¢ö&$B #P  L$à™åZá!*N ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,_ JâOH$­H/ H#õHQ$*=HRH$…HSH$ÍH/H#*HU$]HVH$¥HWH$íHg $*5H"4OtP!…PxP$ÕP|P$*%Px$/m˜„˜$½PˆP$/ PŒP$]Pip$¥˜”˜$õPFP$*=HGH$…H($ÍHI$*HJH$]HKH$¥H $íHM$*5HfH$}HgH D<0ð3ÿ/áØýÿê´bB  ¹÷àâ^ã   áY5 eeñH  áñÿÿêbÌØz $üæ@Òæ@ÜÞè@Â@ÌØÞÜêÚ ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ¦ЦB`Šâc lVá:ÛÆ5õ  ++bB,@ Xr•;B ++;xt/ q ++•’ K |t/" q •² KzÌØxzu/ B ++q•Ò ++K ++| ++/ b ++q•ò ++K ++*z~uo ‚( ++m•%"• ++B ++/ ++q•/bK ++/ò ++q•/’K0 ++2 /2 q•3L | /b q•/ KQVtÅ h•/" K Zt² q•/B K TtÒ q •/b K" ^tò q"•%!‚•Ph •i <Jm%#[¨[ð {!Ü( ++0B(#ˆ,ö&B 0  L$à™åZá*N ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4äP LD0ð3ÿ/áÜÿÿê bB ¸ ªf@ áà*ú 0Žâà„⋓훞íI‹´îúñî5Š(]„âàŽ(ù **`EâP…â,à™å^á :<2 Žâ@ü†â‹’í›“í ‹8î‹Ží0 á@\ :¨6 ƒâ¬DIDfðšå ,Œ2ÿ/áîÿÿêÙ,زôJP 3x ˆ € ++XBP ++(D0'''ñ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(b$ bB`ŠâoVáv*rÿÊ ƒÿÿêj†>ð ++0B, ++0B(# ,xö&B   L$à™åZá*0 ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ Jâ4H D<0ð3ÿ/áÞÿÿê bB  P ¢ñà á  á0âSã40 ó ++0Žâà‚⋓훞íI‹´îúñî@ ãðšå8ö Sã0’å6Sã 0‚âŽõƒâ0€â‹‘훓Tÿ 0‚â0ƒâàŽtXL áàœBœžœ?쨎¨?àŽâ!q Žâø l ++p p$’6(ð °z Hz€£ 0ò ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòX↘†B`Šâ,oVá‰*–ÿÿ äpÿÿê2ª£ð ++0B, ++0B(# P,<ö&B   L$à™åZá*È ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ JâÌH D<0ð3ÿ/áÞÿÿê bB  € ¢ð áàâ^ã ++ ô^ãià‘å6^ãf$f-àZ1à ó0âàŽâ‹“훞íI‹´îúñî@ ãðšå8 40HƒH9ïÿÿpOàŽâtâÿÿ ++ãÿÿê¸ àt_Òÿÿ,[Åÿÿ ++ÆtÜ ¤4ºÔ0„¬ÿÿ ++­ÿÿê´´—àâ^ã Ðè@V^㜔ˆL  ãff€ª0p P`8Xò' ++ôÊäÞ~ Hz ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ¹ȹB`Šâ_oVá*Éÿÿ/ /jÿÿêÊÝ ð  ++0B, ++0B(#œ, 6ö&B   L$à™åZá*8 ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ JâB #  L$à™åZá*  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4ÄP µP/˜P#/PœP$UP/Q8#˜/˜#íPȈ$/=PÌP$Pj8$Õ˜¤Ð$*%PM˜$/m˜Ô0$½P¨è$/ P¬P$]PØð$­PÜP$ýPkØ$/E˜´8$•P/ ˜#ݘ@$*-Po0$/u˜ô0$ÅP(è$/P,P$ePS8$­˜4˜$ýP/øP#/MPüP LD0ð3ÿ/áâýÿê¨bB À ’ÿã$àâ^ã à‘åàâ^ãb<q ++à<<< W  á®ººt  áñÿÿêX9äÿÿXÄàÿÿãØÿÿ ++¸9Ûÿÿ¸ó Ñÿÿ ++ÖÿÿêŠHØÞÎÂÜÈ€ ñ> 4üæ@Òæ@ÜÞè@ÂÜ@ÊðÂÆè@ÒÜèÊÎÊä ++HÞÞàæ  ++,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(W$WB`Šâí oVá7*gÍ mõÂÿÿê ++ª€ ++ÈB,  ++X‚6ÚÁ ÄÒèîÒæÊZ‰/"Oÿ  OoÂÜà0 ÜaÞä€Û:ÒÞäR/RRÿ _€R/ò¡är€ ++U I/ ’Iÿ I. 2›IÖê ˜/ ÂOÿ O/ bêäÆ ðëëðS/ òSÿ _€S/’ëäV€¢ O/2Oÿ O%Ò6PØ 5‘1ài ++å’iŒ áÍÍý--“ÜÞè0 Þ&r÷ ©ÞO*¹Y jßjU0j0j% je& D f/¢f˜ f%BfPLà á™f áÀóÿ/áR"ØÞÎÄÒè~ B$ P ÈÞZ%Rð0 áãRã; SCóºRãª@ ãðšå÷–ûâQã/cÏ“åâQã+pD,ó ãàŠå0Šå Šå Šâ ï .¢)ñ Jâàšå0šå šåT³OÝÿÿêøø…ø’øøø@º´Ê³p!\pXx?xD2º*S0ãpsâjÿ7i¯0È ++È ã á” Œ+½”80šåØ ^1ÿ/áÏœ$>/M$ «$ ,?ð0º (ÒÜìÂØÒÈ@ÄÒ/ÏÈÊð@üæ ÀñpB8B$H/C˜H/8W Ð(ÂæÐX?J0J ++(B(0w8¡¯˜ä  ï \öðÿÿêr" B$ ++ U%rU@U bMTJ& kÒÄÒèZæÊè~B$V%̈ÌlfÄòÄ[j&ÄÛ( ØÅÈÛ ×†×“×‚1ãR|è|ë$SW|@| €@ ãx¢ @  Jâ/DD]DL€(„ „€ *¨" €|_¬ÿÿ ++Þ„ 0´U*Ê,CT`0*l_`.û2À(MC0 ++1(øŸ((*0@&hV58*ó 0  ^%B$$ °$“¬“4˜4”4Xm4i|J|O<º(!ä O"*8!qTTH  12ÿ/? ×\P/=ÌL:ð|š³|P '“Mÿÿê0ê,.¨gPgHg,½,m$0WÚ‚ H]  %âK/ P‡ uSqSXJSF|/|!‡‡9CàçP/ÁC½CXU&Ê4CTb02C_b6C5(9_2892Ü29ž/ à9’9~æzæXSæO|0|"9%åAêP/ÕÑ'´Ñh“gÿÿê*ê4œ6ÑHõ,õ/8ÁåÁ/!€ã":y¤èÊæè€< B/!²†ÿ [:€<† ++ ++0B(#I†,7¸ö&jB O@  L$à™åZáß*  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4OÄP!µP/øP#/PüP$UPØð$¥PÜP$õP/aØ#/=˜/˜#P/€˜#ÕH„H$*HxH$eH|H$­H{¸$/õ¸´P$/EPè@$•PìP$åPÈð$/5PÌP$…P/ Ø#͘$*P% H”% HˆH$õHŒH$/=p¸$P¼P$ÝP_0$/%˜ô$uP}˜$½˜Ô0$/ P@$]P P$­P%˜ô8$*E ++P/j˜#HkH$ÕH~($/ (ä($mP$½PP$/ Pèð$]PìP$­P(ð$ýP,P$*M P X$•H¤H$ÝH˜H$*%HœH$mH°H$µH´H$ýH¨H$*EH¬H$/¨0$ÝP¬P$*-P^X$/u˜äP$ÅPb˜$/ ˜$$]Pr˜$¥˜È$õPc˜$/=˜40$P(%P,%PZ $uH D<0ð3ÿ/áûÿêŒbB  ³ò  áàâ^ã’åà;ÿcGö àà^áà’åpžåg@ á9ð—? ¯¯òS ÎÊèZêp0 :üæ@Òæ@ÜÞè@Â@ÄÒÜÂäò@ÒÜàêè@àÞäè ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(ùXùB`Šâ°oVá!* u ¸’Øÿÿê ++âõ ++0B, X‚Þ@Ön áà‘™•RZ?%"?ˆO ´¶òÿÿêz ++(¨&†O0 ++èÆÐÂä0 ++ <yèÊðèêÂØ‚"Þ/bdîud ++ø, do d ++?’dG ++d% 2¨dƒtäÊÂÈe_e& Âße¦ø,e/ Re#?â?e>e.reH* e<ØÞÞÖÂÐjN_Ng/Ìñug÷,g/¢0 g?/BÌ gg/â0*gO6gÑ_Ñ/‚6ôujø,j."Ñj?²jGjyjƒtàÊÊÖe_ee§ø,e/re#?Ú e>e ++dÈ e`à á0z0Sã'z%’R&ÿ6Iñ0àSáã^ãºÿ`Ú6^ãšm0’å p“š_  áž $¢Ò£ ++êÜÝ—8 HÁñÜ@ÞÆèÊè@Þä@èÐÊ@ÊÞÌ@ÞÄÔÊÆè 02"Á%2l$lÖ8ò|Í š¢Áÿÿê*†& `,"[%ÒP²­à á  á0žâ&ÞRbG!˜ W Ñðk8‚¸#Ô,¨¹10ï"ïžïï°ÿ0âSãQ ++6Rãùª « —ò$êܸy$& P\_ÂÆèÊä`56(S a#ÍðÔ4Ôr¹ €ÅQ2$E&&QJ( Q%˜Q"$GÒQO$¸/'rQ@Q»X*êÜ¥_*,R6.R/)RsRÇ*E&,Q,.R))¢þ ™¯  ¯ þ *?)+2þ þ O þ *þ +º¸þ %‚&Ï‚ ‚ ++‚@Êzö rsú0 àêó ~02 $ó 0 ?4 <á >Þêèâ %-R//º6/`¿ vÃ720m&2Y,4Ú /-ò‰ ‰ 0G//’‰‰ 0¸1A/˜Ú  ççnuâ6àêÐ x68 *}#?: >k=l1@/à¸2¸V± \Ç-26>&8J,:d/3r-+6G/5-O6¸&5²t˜¶ -³„<îäÒèÊ/_<>/ #@/&7BH/X/¿<>&>J,@//7Ò“ “ ð —åà—åàAà àNâ —åàŽà°ð$Žâ$ ‚âŠå0Šå šåQ2 —!0ŠÄ'*ñ,O0B›$œp0šåàšåT@ ‚âô AààŽà.á áàNà à‡å°]Q1ÿ/á¤oPêL‘ ÀÄòèÊìÊÆèÞäˆÈpàNHæZÆÞàòBX²J ++x«EÐ PÙ Ù(]j­0écpšå WÝ“Ý1Wá,Ý“Ý`° ápá0[ã#áZpŠå °áá0\OŠå°á ¹á(10š¤Ð°šå°Kà ‡àÝñ t2W“åà““±U‹â$‚âàŠåp5 “°/°u¼ ¼1°š` àŽâ ˜ Bà ‹à"! á 6 àƒ ØíÝ^WúLˆ^¼ÀNXP ++˜íE RªHí`0 á@Tá7Tá án Šå@Ñ„  áp áØ9O**‘ÄŠå@Šå á‘" pl%Pñ­QRpšå@1ó0—å 0ƒâ —å0Bà‘‘ÏEZ²T&pZæÞÚÊèqfúR ++pGz Vkk H+à{à“åaâ áTï Ú“å!p‘{wP“åë@à Aâ P@àqk‡kkC“å 0kpk'àc * 0{pûÃû÷î÷±SÒTÈz ++\ÜKÛ^Ç ++ÇÃ,+ÃÀoŠåË/õË ËÇ ÎÇVª`|Ãø{V^ ++h{KÖ/bÃÿ,¿!pggÇ/õÇ ++ÇÇà ïÃSÊ`Øzà‡Ï Ï ÈÚ ++fÈÒæàØÂòÔàß8ÒdÔOœhÙÖ"ÔkÕé9p áÝ°Ý[Üà€E0 ãà0àÕû 0à½à Wpšå 0àO0ƒàÞà 0PCP0ÈàØ Øù¤ Ø0ù}Ø ÀØ!0š”á—Ø00ƒà¤ °ØŽØIfÙµ ++IhÙ ++0B(#ô, ö& B   L$à™åZá*¸ ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ Jâ¼H D<0ð3ÿ/áÞÿÿê bB ø ¡ÿ  áàâ^ãà’å^ã ++@’åðšåq ­$0õ9 ++’ 2ìÂäÒÂÄØÊ@ütæ@Òæ@ÜÞè@ÄÞêÜÈ ++HÞÞàæ0 HèÞàZØÊìÊØZìÂØêÊ $ü6ñ Â@æòÚÄÞØ  ++,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ ++$@ B`Šâ°oVá*i ¼Û¼1²Ûp0 ð ++0B, ++ ++0B(#n,/Èö& B ++   L$à™åZá*À ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ JâÄH D<0ð3ÿ/áÞÿÿê bB¤ð¤ñÐà™å^ãÈà™å^ãA áúï ã€ áðšåâà “à ãÈà‰åÌ8f ++ÀlDÿ/áøO *è è©èhÔÌà‰å@Šå Šâ 4 l4;РJâ@šåp á`=ð— Ù òÊB  0 æÒÎÜÂØÔW/Üç1}çÜç¹ç ¤@j*lDÔà‰åÔ_;t*-°O  áì ìi<ð&Tã ++à á @žåu ++žX P.Á@éÿÿêH @8@>@ ãǨ/%¨'/a¨0 Šâ¬l´K‘lL¥ÿÿêÌ ÿÿê&rB¾âx ÆÞØØÊÆèÞä¶&à21àžâ`Ì0îSÕð úSãªà á0CàÌ0‰å0 ãÈ0‰å,#N(tî ãöÿÿêLEH NF\\X@ðÿÿêXÓ÷ÿÿêB ++0HÔ÷ZäÊâêÊæèZàÊÜÈÒÜÎð&ñ2ÜÈÊôìÞêæ@4ÖÊòÄÞÂäÈZÒÜèÊääêàèZÐÂÜÈØÊäXB$@B8Š ++0B(€Àr .HÈq¢êÊZæÆÐÊÚÊZæ?rX2HdÉš(HrÀ Ú` : ++x¿@ .èÒÚÊä¬ r8â¬ô ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ ++B ˆÕB`ŠâúoVáG*å-2*:*ÎŒ ÙéòLv ´  ê $“²ÿÿêò ”A`B+/#ÿÿ’#/³ˆð@[ÍÍÍT ´!™™™™™à8ê ++PB, ++(p(B ++   ++0B(#l,”ö& ++B 0  L$à™åZá*ƒ ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4H4P LD0ð3ÿ/áÜÿÿê bB h ©g  áMYYñLJ ìÒäèêÂØZäÊÎÒæèÊä ÒÜìÂØÒÈ@ÒÜÈÊð@üæ ++HÞÞàæ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(¨B`ŠâJlVá:Ò½!ð ++bB,( ++0B(#v,®ò ++B @  L$à™åZá*Ÿåê8 ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP@ ãðšå¸õ* à‘å‘å0 á&Sã ++0Šå  Šâp´ò@ ãð—å u õ  Jâ0šå à“å“åìÿÿêpš0 ¨â ð$ú ++HB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâBÕxÕB`ŠâÅoVá%*å ÙÙyÙhH*éfèÿÿê Ý_2ÿ/áöý ðÔÿÿê ++ ++PB, ++@  ++0B(#T, .ö&B 0  L$à™åZá*  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4H„P LD0ð3ÿ/áÜÿÿê bB¬PP ¬ôŠå&Qã>@ ãðšåÀù* à‘å‘å0 á&Sã ++’å0Šå Šå Šâ pÄð—å}«ð  Jâ0šå šå ’å à“å“åèÿÿêP5pš< ¼ð*Ýÿÿê ++ ++`B( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(Bê êB`ŠâÚoVá**ú îîîpO*þHäÿÿêÎ_1ÿ/áôÁÏÿÿê0, ++H  ++0B(#^, òö&B 0  L$à™åZá*q ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4HP LD0Ð3ÿ/áÜÿÿê bBªP8 ªôŠå&Qã@ ãðšå¾õ* à‘å‘å&^ã ++àŠå  Šâp¶ò@ ãð—å q °  JâàšåT`£ ++ áêÿÿêh5pš< ®ò%àÿÿêòB$ ++`B( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(ÛˆÛB`ŠâËdVá'*ëd" ++ 0×0Sã×0× m×\f*0çW áæç& ÛP2ÿ/áóÛûw ÒD!êphB, ++P  ++0B(#\, òòB @  L$à™åZá*Ÿåê ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâPP LD0Ð3ÿ/áÚÿÿê rB²P0 ²ôŠå&Qã@ ãðšåÆõ* à‘å‘å&^ã ++àŠå  Šâp¶ò@ ãð—å q ±  JâàšåT`€ áêÿÿêd5pš8 ªò%áÿÿêòB$ ++XB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(×€×B`ŠâÇdVá&*çd! ++ 0Ó0SãÓ0Ó mÓ\f*0ãS áæã& ×P2ÿ/áô×÷o ÿqÓÿÿêêÿp`B, ++P  ++0B(#î, ¦òB @  L$à™åZá*Ÿåê˜ ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâPœP LD0ð3ÿ/áÚÿÿê rB´P€ ´ôŠåŠåàšåàžå®à áàÎã^ã>@ ãðšå àŠåààõà ã0 áàƒâ šå^á ++ šå ‚â’çàŠå Šâpäò@ ãð—å<À JâàšåéÿÿꌵàŽâžçpš4 Ôð*ÝÿÿêJR ++PB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(BØB`ŠâÚoVá1*L àšå ++30Ž7Sá0 ¡ö*0šåà áåÿÿê P2ÿ/á÷.¯0šå0ƒâ“. ++ðÈÿÿêRZ ++HB, ++X  ++0B(#È, ö&B 0  L$à™åZá*Z ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4H¤P LD0ð3ÿ/áÜÿÿê bB¬P¸ ¬ô!ŠåŠå Šåàšåàžå®à áàÎã^ã>@ ãðšåàŠåÜô"*à ã0Žâ šåSá ++ šå ‚â’ç é’ç0Šå Šâpðâð—å|©ô Jâ0šåà áæÿÿê0šå0ƒâ“ç e“çpšD ðô/×ÿÿêbj ++pB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(B B `ŠâòoVá8*. Làšå6 &&(±& D*6fâÿÿê _2ÿ/á÷J$ñÁÿÿêrz ++HB,P°, ++0B(# N,*òB @  L$à™åZá*Ÿåêˆ ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâPŒP LD0ð3ÿ/áÚÿÿê rB À ±ö/à‘å®à á0Îã`EâP…â,à™å^á ++:p á‡å ‡å 0‡åà ãà‡åCâÀafÿ/á ð 2ÿ/áïÿÿêºB   ÌtôŠåàšå^ã9Ê ö ++@ ã 0—åSã@T¢ðšå àƒâ଄P•à *°´ :ƒà áà†@ð ++0Câà†â@Žçùÿÿê@ áH ¬Dðÿÿê½õ* à—åžåpŠå Šâp—¥€@ ãð—åbíÌ JâpšåÎÿÿê}ê`@Y*ôðàNâ 0—å0ƒâ“çl l¢ Y  l@@Šå¬±0šåàŽâžHH“,¡HH" @”@Nâ<8›“ÿÿê8Õ4"àpP0„à À0àƒåôã ++,°™å Uá*°Kâ,°‰å0‹åø<<<<¸,õpàˆð ÿÿêš ++°BP B$ ++ B(¸ !h„B¬ ++0!(+ñP ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(i$jB`ŠâoVá*zM úâþ"ÚŽ/‹ÿÿx/‰*ð ++(B, ++0B(# v,–ö&B 0  L$à™åZá*Y ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4H”P LD0ð3ÿ/áÜÿÿê bB È ©ö3à‘å®à á0Îã`EâP…â,à™å^á :p á‡å ‡å ‡å0‡å à ãà‡åCâÀefÿ/ápð 7ÿ/áîÿÿêÂB  8 ÌxÀ0 áSã:ÊÀ ++@ ã0—åf@L¢ðšå àƒâ਄P•à *¬´ :ƒà áà†@ð ++0Câà†â@Žçùÿÿê@ áH& X„2ÿ/áðÿÿê±Ð* à—åžå éžåpŠå Šâp—©@ð—å¡bíÌ JâpšåÌÿÿêèh`* Câl„àŽâžç 1žçtO0Šå x !R  x„0šå@ŠåXXXX“,½XX„ @ŠåCâ@<›‹ÿÿê8õ84ðàƒâ „à àšåà‚åðã ++,°™å Uá аKâ,°‰å ‹åà¸qŽâ0„à8?ƒå88?0‹åÜ,õŒ11á 0ð™ÿÿêŠ ++°BP$ ++ B(Ð !ptøB¬ ++0!(*ñP ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(ˆ$‰B`ŠâoVá*™Q ¡2â­/ªÿÿ”/¨)ð ++(B, ++0B(#ê, ¦òB @  L$à™åZá*Ÿåê8 ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP@ ãðšå àŠåààõà ã0 áàƒâ šå^á ++ šå0‚à“åàŠå Šâpäò@ ãð—å<À JâàšåéÿÿꌵàŽàžåpš4 Ôð*ÝÿÿêJR ++PB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(BØB`ŠâÚoVá1*L àšå³0 ãà á0Ž ++3Sá ++1à‚Æ/0 ++ ¥ ++”æ*0šååÿÿê P2ÿ/áø.0hƒ.ðÈÿÿêZb ++@B, ++X  ++0B(# ,, ö&B 0  L$à™åZá*  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4HDP LD0ð3ÿ/áÜÿÿê bB¬P¸ ¬ô!ŠåŠå Šåàšåàžå.á áàÎã^ã>@ ãðšåàŠåÜð"*0 ãàƒâ šå^á ++ šå ‚à’å ù0‚à“åàŠå Šâpðâð—å|©Ð Jâàšå0 áæ¸ÄàšåàŽàžå ežåpšD ðô/×ÿÿêbj ++pB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(B B `ŠâòoVá8*. Làšå6sà ã0Ž&3Sá&&1à‚Ò/0& ±& `*0† áâÿÿê P2ÿ/á÷J0Vpƒà“å /àƒJñÁÿÿêrz ++HB,P°, ++0B(#, äö&B 0  L$à™åZá*V ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4HdP LD0Ô3ÿ/áÜÿÿê bBªªôŠå&Rã@ áðšå¾ñ* áà á ž(ù ++žå Šå  Šâp¾âð—å y ð  Jâ á šåêÿÿê@5pš0 ªò&áÿÿêB$ ++HB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(Ø€ØB`ŠâÈdVá&*èL! ++ÔÔuÔddäLæÿÿêÔ÷øp ,uÓÿÿêúÿ0, ++X  ++0B(#¼, fòB @  L$à™åZá*Ÿåêh ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâPlP LD0Ð3ÿ/áÚÿÿê rB²Ph  ²ô Šå0šå&Rã@ áðšåÊõ *à á á 0’å&Sã ++’å žåàŠå 0Šå ŠâpÊÐ@ ãð—å…±ô  Jâ áàšå 0šå àžå  áæÿÿêT5pš@&Æò*0ÿ/áÛÿÿêB$ ++hB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(ô¸ôB`ŠâàaVá-*p"0ø1 0žüüžå —åpüü|A* p –p—åâÿÿê ôQ2ÿ/áõt  âÌÿÿê*pXB, ++P  ++0B(#, $ö&B 0  L$à™åZá*W ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4HtP LD0ð3ÿ/áÜÿÿê bB  ©&À%pÿ/áB ó ÌÞØÈZäÒÎÐèb.ôp á0 á&Sã@ áðšåïó ++* á “åpŠå0Šå  Šâßi ñ  Jâpšå0šå á“Ãfð—å žñ)2ÿ/áçÿÿêâB$ ++@B( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(ðhðB`Šâ®lVá* 5ör"b/„ð ++ B, ++0B(#R, ˜òB @  L$à™åZá*Ÿåêx ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP|P LD0ð3ÿ/áÚÿÿê rB   ±&À%pÿ/áB ó8 ÌÞØÈZäÒÎÐèd.ô p á0 á°šå&Sã@ áðšåûó* à›åàŠå á “åpŠå 0Šå°Šå ŠâïêÿÿêyÒÀ Jâpšå 0šåhö  á“å›å@ ãð—å ¶ñ*2ÿ/áâÿÿêB$ ++PB( ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò( h B`ŠâÃ0Vá¾  Nös"b-/ ð ++ B, ++0B($0*B   L>@ ãðšå#$, Îö&B 0  L$à™åZá*J ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4¤P LD0Ð3ÿ/áÜÿÿê bBªP° ªôp á  á&Rã@ ãð—å ’å&Qã’僰‘å&[ãT‘å‡à›å&^ãT ›å €0žå&Sã xàžåàŠå(($Œ¼à ãŽâ áææ°à ã 0“åàŽâ8ò*òÿÿ ++úÿÿê’ HÂààØò ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(øB`ŠâÆoVá5*(Å &ð Äÿÿê² ++`B, ++0B(#œ, æòB @  L$à™åZá*Ÿåê¨ ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP¬P LD0ð3ÿ/áÚÿÿê rB ( ²ôp á á&Rã@ ãð—å à’å&^ã’僰žå&[ãT žå€›å&Qãt0›å0Šå$$ˆ0‘å&Sã$G0‘å,,ñ `EâP…â,à™å^á:†å †Dü à ãŽâ á  á°à ã 0“åàŽâ<ˆñÿÿ ++úÿÿêJò01ÿ/áæÿÿêâ HÂààØò ++`BP ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(ZpZB `Šâ0VáDjÿ ¤¢µÿÿêvð ++(B, ++0B(#ì,Vö&B 0  L$à™åZá*K ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,b Jâ4´P LD0ð3ÿ/áÜÿÿê bB h  ªð p á á á šå&RãFôð—å À’å&\㠒倰œå&[ãpàœåàŠå  ˆà›å&^ã Cà›å((€0žå&Sã(À0œå0Šå0›åCàžå 00ñ`EâP…â,à™å^á:†åà†â à†å†å †Tü à ãŽâ á  á..°à ã 0“åàŽâ<¦ñÿÿ ++úÿÿê°0ò0;ÿ/áãÿÿê" HÂààØò ++`BP ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ(z°zB`Šâ(oVáL*Šÿ" 䢭ÿÿêB–ð ++(B, ++0B(# ,æòB @  L$à™åZá*Ÿåê¸ ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP¼P LD0ð3ÿ/áÚÿÿê rB ¨ @²ô*p á á á šå°šå&[ã@ ãð—å `›å&Vãà›åàŠå‡À–å&\ã”à–åàŠå$àœå&^ã$”àœå àŠå,€0žå&Sã ,Á0›å0Šå0–å0œå @àžå<4õ$`EâP…â,à™å^á:†åà†â à†å†åà†âà†å †å°†düà ãŽâ á  áNN°à ã 0“åàŽâ<¦ñÿÿ ++úÿÿêÀ0ò0<ÿ/áàÿÿêb HÂààØò ++`BP ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(šðšB`ŠâP0VáTPªÿA $¢¥ÿÿꂶð ++(B, ++0B(#Þ,ªö&B   L$à™åZá*3 ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,j JâÍH D<0ð3ÿ/áÞÿÿê bB  ˜ ¢ñPá@ ãðšåàâ^ãà ó ++ 0åà‘åSá ++0å ++@Hó^ã$àå6^ã!T‘ñàâàžå0€â0“X ++ ++S  0 0 ++0   —àâ^㤤 `€áã <\&ÀzLÿ/áttW^ãppl@VlVl0„êBØò ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâàB`Šâ5oVá’*Ÿÿÿ; ‰gÿÿê ++³ð ++@B, ++0B(# ®,ö&B   L$à™åZá*Ê ãŸåê Šâ`ðp–åàâàŠå@ ã ð– e,[ JâËH D<0ð3ÿ/áÞÿÿê bB ` ¢ð)à á0âSã ++&Qã ++0‘åSá ++ ‘åøÿÿê@ áðšå@ ã€ãòÿÿ ++@ðSãïÿÿ ++0 á&Sã2Dó“å áàŠå0Šå  Šâ â&Àžâÿ/á ­ ð  Jâàšå0šåTã 0“å\\ / \\Œ“åÏÿÿêä ö2Bš8B$€ ñ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXâ|$8|B`Šâ"úVá]*0 áàâ^Œoà‘å^Œ Œbàâ^Œ Œ1RãD00’å0_0Šå 0½Œ¬¢+*0šå @%@0 ’ål l /)ll¬s’åÇÿÿê„1ÿ/áòÿÿê$Î$ *ÃœÿÿêRB˜è  ++pB, ++H°, ++0B(#, ,òB @  L$à™åZá*Ÿåê ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâP P LD0Ð3ÿ/áÚÿÿê rB²PP ²öG&@ ã&Pã% ++ 0å&Sã ++ “åå`EâP…â,à™å^á: †åà†â à†å†å@†å@ á “åëÿÿêz¢0ÿ/áòÿÿê0LLLC0†å @fðšå <P2ÿ/áöPÀðšå ++êBP ++xò ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(ç˜çB`ŠâoVá)*÷• ņÐÿÿê ++ ++ ð ++0B, ++0B(#OF,@òB    L$à™åZáË*ŸåêH ¦ Šâ`ðp–åàâàŠå@ ã ð– m,D JâPLP$½POu ãH!/˜T˜$UPXP$¥P\P$õPv8$/=˜d˜$PhP$ÝPlP$*-Pw8$/u˜t˜$ÅPxP$/P|P$eP/ 8#­˜„˜$ýPˆP$/MPŒP$Pyp$嘔˜$/5P˜P$…PœP$ÕPz8$/˜¤˜ LD0ð3ÿ/á.þÿêrB ° að@ åàå®à áàÎãàNâÁ0 á0Ããàà0€âà“çã ++0žå“åPá ++ àžå÷ÿÿê @“åðš}áñ ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXò(ŠøŠB`ŠâïoVá*šF õ äÿÿê ++B, X’(( Ž’Ž‚Ž0ŽSŽ@@ ã†s)"ƒE"žt  P²Ä0 á á á© ž©“©ðÀp ápÇãàà àŠå pšåà‚âàžçàŠåàšå¹¹©@žåp”åW¹­÷"à“å^ã\`EâP…â,à™å^áR:@ á„å „å`Eâ ñE:^à ãà†å 0†å@†x` à†å àöŽâ‚à`åã ++,°™å Uá0*°Kâ,°‰å‹àðpÎãà“åŽâƒâ<<<0PÑóÚáàãW᪇à áàŠåPÓ  á@Šå Šâ &À©Sÿ/á@ "q Jâ@šî&°,@;ÿ/áŒÝD0ÈQP1ÿ/á´pÿ ++7ÿ/á§ÿÿê^ã0Šå ŠåÍ<RРJâ0šå šå•TL™L‚´ @ð2ÿ/á[ÿÿê"B @ ÂÈÔêæèB Åø Šå Šåšå0AâQãL‰Ä ãQá1 ++)pžçã*±Ãà—å —åàžåÎõñÀàà†â àžç @‡âà„áð@‹åàŒâÀ†àpŒå\,,À‹åp áÞ¥0ôãm€âËÿÿêùa0Žâ`ƒíS>t40‹å et€ àâàÎãy„P•à ++*}€:à á}@Aâ@Žçp_¦ÿÿ ++ùñòÿÿê ++r ++PB¬ ++0¸×°BP8b ++ 0 ++(÷P ++îÊÂÖZÆÞÜæXB$@ ÊàÐÊÚÊäÞÜ5(õ#bõd  0õ$–H¼*ùQeù[ù Nù(9ù($ùùù(©ù˜E*  ÞøÔ€¿«xž uÑÌDሌ÷A åplp Tð=ÿÿê*B8j ++@=/ ++(•# ++pHe8@ & ++({% Œ  x `BB›¯˜ ÈÞZæÊèB¢§¢p©—©ð  á ÂãàààŠå ;‡â©©© žå°’å[©` 0‚âQQ2õRõHõ ;õõm ‡à`‚õ&¨& ‹, õõUPá ++õR cª‚à áõL áÒÆç•Òþ¾±Æ 0‘9q910šÑŸQL½LŒ´RÆ0 ++’JB ++0\ VÖ% ’i hz Ó Ž ïöBvbB ++ ª% 2Zd  „p ášåFƒà“å žå¢uð BâÁ° á°Ëã àyq&qq´’å Šå Šâe€@ ãð—å<b¡+ ++1 šå¥@¥¥2"0B ++„¢s%I ++én ++üý h³ 1Rˈñ € $0‚Ü% Ò‚$(‚Ý[°’†/†(¥†”n–@ µåªMª¨O*ºòˆ(AZΨ¿1,xÔPV% r$ ð Óà á å0‘å£S0CâÎΠpà0â0V€ “å ’å‘ÀI ++  á 0’å(Cêpp“åp—å¦ @÷ÿÿ*} ‚âà‚Æ 1-·à ã àƒåà‘5Ñå0Nâp€â0‡hDDRp‹å"á™0SQAª଀Ú1 á^áºÒ4à áÍ@ûÿÿÊaYN DÇÿÿê8 ‡â à åK Š‚;¸¸%’$ 8¸VO*Èÿÿg š\š?ªÜ& ++0š%¢âÀP jp0‘åSf ++ ++¹±1&^±±C!R_ Â4%B{/Ì O*ŒN Eâ=""%â¼È’ˇš× Z &r&[O*R *á***"«| @g@ ݱõpå “åWãs˜©Ú’ ŠåŠåàR™ ™ j|‘Züšå šåšåàšåpà‘L‘@ „å< žç(±=:@†å †a? …-…‘…­pŽâƒâp€.<…g……Æ o@Šå  ng  Ä gàJ˼ŽL­ÿÿêÐ@°àP€ pžçà á}22À2\}œ xJ ˜p˜‹˜’/=˜4 º ˜p_<ÿ/á¯yòÿÿêÚæòÚÄÞØZÐÂæÐw`ðB 3øž@Šåm€0BâRãaiàS! —@S:¥€à†å 0†å¹5àž uÑ,Sàƒå °M 1 `ŠÃ)I0à ã§°àƒâ šå^Ë ++9ÿ ‚â’çàŠå ŠâpåÇ¢ü9y Càšå祅@žçµ ?pšHLÁ ¹çÐï¦Ú)à‚½ ½S ++:‚½¸@ ++-@& ãÉ@ŽçY_ `ŠåŽ'Áïÿÿêj ++T€ÈB ð&PãT ++à á žå&^1 à—Œé ++a àà—.]Å¡0†å †å0—kD0ƒàç5æÿÿßõ¥Oœœƒ9 áâõ ++G ++R0& ð8ŠXB8 ++XT% ++Àii¯PB8 ’$ˆ#²ìU Û ™ú^ð…ðpðpð•ð„eOpšåUF6h(!hhh¹ nn׫³D¤”8DS8 F8ÐŽ/‰ÐXÐ \¦©“ÿþÿê$âO!bOŠ` ,’/*0˜%R® (X‚ @‘å7ŒPãp ++?@°àÎS žçj+¹Àžå`œåVj` 0Œâ ùù2 –B–fL  á 5 T †å ¶ % ¶¡Žâ ƒâ‚÷<<UQá ¶sP᪀¶èÓÄrD·ÿÿêÏ l† ++ÐvVVpF/UFFpFFD¸TMÀÀ€À» 0ĵrˆ ++\·? ++0ó%˜W/Ø(³%âJ/À±î_/ /v±J°_@pŠå¿ °_™µUµRž _°šå oEoPp†åoN‚âpo6(o/#&/#(/# ++/#/#+#/ : ¥Ò_ô@‰ & ‚ !pƒõ ACäÜ Ü½ ö Ýê* ,à.À+p%‚U-@6 °6 H*U‚U´ä´pŠå°Šå Šå‡Y ‹*‹ô´@ šåŸWÀà phÀh \Øö4XP?Àšå™@™O žç½ Œ½Ó ,´…@…ÅÀžç à á áUgàå`ž‰1åöÈ 0žå çÄ¢¹$$uภŽ¸ : T@ŠåÀŠå X‚M “ h @\O@šå`C8 ++ÀX„X¿ Ãl¶¾ tÝþÿê"ò"°E Ðð7¼# 1v 2$h!,îHC*1%”%À%À%¡Ír)# 5OÀšå 5/ hShEÿ6 ¦‡m0ààe °3‚âuú 0o%”œ5ú _”å @q* q,5`à á @… „âôð55 ¸• Á•¸R¸D¸ 7Ì+¡Ì§Àu¶þÿê*úµРÐ ++1Á°¯'CèCÍÂ^%( ! } R¹ 0} “eàà  ãpƒâ°—çñ e0RãPee°’å°›ž)1 °’»4s6 ’)Qƒà zí')“ì#­pNâ€âp <ì#7Wá ì#SÚ¢T2æŸÑeà’å ‡Ø%Ïç/ ‹ï6ç+<:ÚØ&%R•/pU"d¤!Øÿ 8O ++Zì6  ++0B($0*B   L>@ ãðšå# J,úö.B ˜  L$à™åZá**€Xâ ++  ãŸåê Šâ`ðp–åàâàŠå@ ã ð– m,j Jâ‘H D<` P&À$@ÿ/áÅXfÖÿÿê0(ð3ÿ/áÏÿÿêrB ¸ ßÓL ++WŸŠåŠå {¢ a ò  JâšåšåêÿÿêRB ° ÂààÊÜÈwö/&PãQ ++ àå&^ã0å`EâP…â,à™å^á:@ á0„å „åðšå ‡Ä2ÿ/áöÿÿê0 áª6ªó! ++àåàŠåà“åàŠå “å ŠâÓÒÜÿÿê$±Æ Ç00 áŒŒŒÿ àšåà„åà„â à„åàšåà„å0 EñÿÿêOO0ŠåS¢=SP 0šåÊÚ `€Ãÿÿê@ á|ð ++ºBP¸B$ ++ˆ ð3XB`8’ ++0B(HBb8Ú  ,HÒÜæèÂØØZØÒÄäÂäòZÊÜèäòXòB ++@1B`Šâj3VájA)qA`þ Èâä¡Ûÿÿê ++rBu/mÿima`8ú ++0, ++8C  ¢ ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* $0*B   L>@ ãðšå# ++,­>ö"vB ±   L$à™åZá +*0Ÿåê ƒâàø à‚å,°™å Uáú**°Kâ,°‰å ‹å(H àƒåH,àT¤‚åã ++PàP<ÆP<¬P<’P<xP<^P g Šâ`Tðp–åàâàŠå@ ã ð–r‰ø  Jâ`EâP…â,à™å^á<*:hÈà†å@†å  áÀ 8)81 †åÜ`ÜÜ,$Oàžå0/ü)T?/á)„?/ „ /¿)„#/¬)„šÜ@éÜ xÜ$eÜSÜ@/ÅÜ 1Ü$Ü Ü@/¡Ü /ê(Ü#/×(Ü/Å(Ü?/}Ü £Ü$Ü~Ü@/YÜ \Ü$IÜ7Ü@/5 Ü Ü$Ü/ð'Ü?/ ++Ü /Î'Ü#/»'Ü©Ü@íÜ ‡Ü$tÜbÜ@/É Ü @Ü$-ÜÜ@/¥ Ü /ù&Ü#/æ&Ü/Ô&Ü?/ Ü Š²&:0 á¨Kƒå@pO0Šåtlbõ Œ Jâ0šåxTZ á T8|8í0†å †å0‚â`ƒXiX0X‚X"/ÙX G4$44"4@/µÜ Ü$/í%Ü/Û%Ü?/‘Ü /¹%Ü#¦Ü”Ü@/mÜ rÜ$_ÜMÜ@/IÜ +Ü$ÜÜ@/%Ü /ä$Ü#/Ñ$Ü/¿$Ü?/Ü Ü$ŠÜxÜ@ÝÜ VÜ$CÜ1Ü@/¹Ü Ü$/ü#Ü/ê#Ü?/•Ü /È#Ü#µÜ£Ü@/qÜ Ü$nÜ\Ü@/MÜ :Ü$'ÜÜ@/)Ü /ó"Ü#/à"Ü/Î"Ü?/Ü ¬Ü$™Ü‡Ü@áÜ eÜ$RÜ@Ü@/½Ü Ü$ Ü/ù!Ü?/™Ü /×!Ü#/Ä!ܲÜ@/uÜ Ü$}ÜkÜ@/QÜ IÜ$6Ü$Ü@/-Ü Ü$/ï Ü/Ý P¨ ÅH4­H4•H4}H4eH4MH45H4H4H4/íH3ÕH4½H4¥H,àTô‹˜4sH4[H4CH4+H4H4/ûH3/ãÌ?/ù%Ì /ÁÌ#/®Ìœ$4„H4lH4TH4@ ãðšå@1ÿ/á@OðÿÿêØÀ¨—Ä_3ÿ/á„@aP@=@ @/öþ@Ó.Âþ@¯@Œt\D,/üýäÌ´œ„l.[ý`H@%@@/ÞüÆ®–~fN6/îûÖ¾.­û`š@wf@S@0@ @.éú.Øú@/Åú@¢‘@~@[J@7@@/ðù@Í.¼ù@©@†nV>&/öøܨŽv\B(/ô÷ܨŽv^F./þöæζž†nV.EöX2@.þõ@/ëõ@È°˜€oˆ\@9! .ñô.àôˆ/Íô@ª™@†@cR@?@/ìóÔ¼¤Œt\D,/üòäÌ´œ„lT<$ /ôñÜĬ”|dL4/ìðÔ¼¤Œt\D,/üïäÌ´œ„lT<$ /ôîÜĬ”|dL4/ìíÔ¼¤Œt\D,/üìäÌ´œ„lT<$ /ôëÜĬ”|dL4/ìêÔ¼¤Œt\D,/üéäÌ´œ„lT<$ /ôèÜĬ”|dL4/ìçÔ¼¤Œt\D,/üæäÌ´œ„lT<$ /ôåÜĬ”|dL4/ìäÔ¼¤Œt\D,/üãäÌ´œ„lT<$ /ôâÜĬ”|dL4/ìáÔ¼¤Œt\.Ká8@/ýàå͵…mS;# /óßÛë“{cK3. ++ß8/÷Þ@Ô.ÃÞ@°@|@i@F5@"@.ÿÝ.îÝ@/ÛÝ@¸§@”@q`@M@*@@.ãÜ.ÒÜ@/¿Ü@œ‹@x@UD@1@.ýÛ@/êÛ@Ƕ@£@€o@\@9(@@.òÚ.áÚ@/ÎÚ@«š@‡@dS@@@ @/ùÙ@Ö.ÅÙ@²@ü&P0ÿ/á} _2ÿ/ájTGT$@@.ÝØ.ÌØ@/¹Ø@–…@r@O>@+@.÷×@/ä×@Á°@@zi@V@3"@@.ìÖ.ÛÖ@/ÈÖ@¥”@@^M@:@/üÕá.ÐÕp½@š€fL2.þÔ¼ñ ++îÔÿê„ZHÐÂÜÈZÆÞÈÊÈ u¬(  ~¬ˆTã ^n b+Z+Àñ`ÿ/áR ‚Úêæè@ÒÜìÞÖÊ@îÒèÐ@âêÞèÊÈ@ÜÂÚÊ@ÂÜÈ@ÆÞÚàÒØÊ@Âè@ÞàèÒÚÒôÊ@ØÊìÊØ@d@Þä@f ++HÞÞàæ0BLPB0 ØÒæèÌ1ð  ‚Æ“Tã&l*ô„A á`EâP•à0*´+Ð-:†åTã0°à ã à†å@ á8@à†âW†å$$@à†âW †å$$@à†âôààãàŽà`†à¤@ á 4@Šà|ðà”åà†å@Dâ ++Tá ++`†å`Fâ÷ÿÿê@FâT ìãÌÿÿê ++ ++BPh#„HäÊÆÞäÈ&$ $„)P+ ++!÷°„â°Ëã`Eâ P•à )“:†åYÙ"=[ †å ùõííŒ`Fâøÿÿê éÜI+ o@ ++Šù!("ÿv ìÊÆèÞäþ&®&@Mq   Ÿ„° á°†å    ©Rt ++Xüc ++ÆÞÜæTü2 øD@Dâ%H7º-.÷+-o ) / % Oàšå%Oà”å%)Î</< ++O??ÿt HÂààØò{#ˆ !{ðp á@ á` áDA á=ïr± á ++°‹à³ö [áÊ–å `–å&Vã ++  õ ++ ++° áà–åà‹K!°‹Ký ð—å@‰å8`‰å p‰å4€‰å(P‰å ‰ñð ++@™å8`™å p™å4€™å(P™å ™åÙmTr ñð PÆæRÄÞÞèZÊääÞä HÌÞäÊÒÎÜZÊÜèäò¡ò$8B   àPTã M-1* àœ@0—唈M1 •`Rp’Â0@B H Gsh€p—å@ ã G1jÕxÕÛƒÌ ++pð(ÂææÊäèÒÞÜZìÒÞØ ++ ++# 0ñØÞÞÖêà¾ØÒÄäÂäò¾F  ++ ø ' ÿãD á@ á'¤ Ð_ áñÔ²Z ++ ++B8tR0*HÁZÁÓZ/p Êø"Qp0 ãvv_ ãú†8’~ FŠæ¾ÌØèÞÌð: P&Ä M!&M MôHÌØÞÜêÚZ|ÌÒðÜêÚ\ Œff" èPîÊÂÖ¾´ ++ëë%ë=ëƒZƒå€ßß ßZàÂÒäààËMà΄~áÁ'(âŸÊàÐÊÚÊäÞÜÆÆMæˆ Ë Ð'*îÕÕM Ø Ú ß'.ñPÒÜÎØÊÚAèÒÜêõ ++óX ðâÍÍÉòÉ9 ++ˆÉˆ&HæàØÒèZ»%'8ûæÊè¾ÆÞØØÊÆè¾èäÒà¾ÄòèÊ!M!c.HæÊèZ‘Z‘Z‘ 1'¹!Þı øø‘ ø=ø €çzÖÖ4Ö ÈÊâêÊêʾæÆ]{¾æÒÎÜÂØÜÜMÜ‘Z‘Z‘Ü ­.šæÐÞîÂØØÞÆûh ü % % ôÛ ++ _ âìQR ++¨@>P  HÉZÊ=  $9¯K ãØ Oø P$P ãùM @Tã;$t0 á  áÀÐ1*àâ^ã"AÁà’åàâ^ã\ÿRã ++ ápŠå0Šå ++? ®«R  –² D•šå0šåS´O á´$$ ò=È—ò r* HÌàZæèäÒÜÎZ|êèÌpSòp  $üæ@Òæ@ÜÞè@Â@&P ++â>((­øÆÐÊÆÖ¾ÐÊÂà¾ÊÜÂÄØÊÈ C@B"­‡£$°á áNá á^À?A±ù“r" ++˜B@Å"(]´¾Æ((½$½`½j X-j$j"$HºZºZºPOH '% ++6 3P㊠™/6 :ˆ@0 ŠâºþÛÁBžùpéÿÿê¢ã €ƒ ++?8(€ ++q3 X& èoo$@âàãkL*©Ëük & ++¿5D8®‹Ä78'jæòæèÊÚX( ÈÊ.3Pã6 ^ €âö>3(˜2, –ø3Ð ‘3m *    2¸+2¸œH Ÿ„ %Ï„2Ò*•O@,q&õ ++!ÈÊí ++ ++æ. ú 4. Ì ++!ÈÊÄ ++B­ ++& ïîn ï0ïM0ïˆïï7JØÞÜÎï2ïM2ïˆïï7;âêÂÞ4ïM4ïˆïÞ':b°êæоÒÜæèäêÆì ++[¾ÆÂÆÐÆ6º M6ù!0H’Z’Z’!¦'$ »ÚÂÖʾÆØÞæêä8ÂM8 H‡Z‡õ ++¦'[ÒÜèÊäÄ:ºM:äî dæòÚÄÞØå Š¨ædç<ËM<ç#H‚áÁ' ÛfÛ>ŸM>ÛfÛf€.Hk¾ÎÊÜæò3 ++@£G;@£ÐZˆ£ ++£'íkÆàêèÒÚlBlMBÆ@ÆàêZ‚Æò ,NäÊÂØÚDÚMDÚ‚ ÛÜ'÷›ÌÒðÊÈàÂèÐ÷FÿžÑ Ñ d&ù ÿ1F ++°l!HÈZÉ79 ÉD+ @#*¹få iå å ·í ?·$Ö4 ++Šé &hË Ñ âjÎÊèÊÜìÞH®aH®2J –®®éJ®Ý.àêÝL¿¹ ¹é pé¥ññ3LÀñVN àêñ3( ¥^ñ"@ÁùSùDù@ò!à0”,TÚ_ á _±_H šåa_ @ŠåLPý0K#a" @aü %_pžåi 8m.¦ÁGž ++?PN¨ 0NÆ­ !ÈÊ¥KÌØÞÂgP& g;Pg†Z†j " 'mJðÚêØßXR ¸­ß A-$ /Aë3RˆëTHÌðTã Å 'Û+ÈÒˆTÛYTÛ^Û^Û&ðVHàäÞÆÊÈêäÊZù-.,Рʶ1^Áà’å!àNâ @žåò ¥.x’V *k‘n ++r.FX(°¥ÂäÒèòZÚÂæÖÏÔÔ8XÔ4Z |Æ3# &- ÑÐ5ÿàâ^ã; [@: *Ï„åà ãà„å [õÿÿê<0+/Ç)ï)aà–åÿàtù ã)÷Ž*=åà’<à  ìˆÏì_ „å"ðôð@ , ,l0üYÝ#+GTãCüü  _ „å2 ó D -`1YÚj/@TãKr 40šå  (ä(X0„åB,p„S7ÿ/áò, H", ."08#8M ´“×ÿÿêTãS8&p<<<< „ HHXp„åRL°˜S;ÿ/áñL(L%L@ à†âL"'pX+XM ÀÔˆGTã[X& °\"\\\\ä äh hX°„åbl\<(Zl0P(l$@(à†âl"/°x3xM Ì.Ñÿh7R&PãM¾#lãSã1000 ã$*¤7 åŒ ++ø øKþà„à Žå0ƒâ å×ÿT8€ àƒâàÎãWP•àÔ2À :á áàŽãº46$ð ++0Câ  ãà†â Žçw1<.¼ÿ¤<î8à¬2ž”€&^ã¬ÿÿ ++à!qLR^ #šP¨Z\ßÆÐÂäÂÆèÊä? Ä1P ++À/À/'\àØ!ð0.X ·(BüH^Ð/ ++Ð~ S`Ìð¦6€ 5  ‚ â?~ ~ ž††&Âøf<áz 8ð0àáln #n ~n ìQÞj =àaà‚áàŽðV 3V r V QÛR CÂuàƒáàŽ6 C6 !6 I °Ø2 IÚ0à‡f  S $ )0I ¼Õ ++ O ++ }à‹áàŽ8Þ!cÞ'Þ5HI ÈÒÚKÚ/Ú(Ú0Ê ÖÖÔ:1à„jÒÙÒÞÒÒÒ¾Ò®Ò1d`8šP `bðC7R¨,¸,'b¸Ðf-èè-"Í7dÀÍ0fN'χl 'h Ó*Ó +àþÿÿ^áÊÿPÊ « @á Ä ++[&£L á^ Hò¯:´#´´›Êã$Áæ$?QãØ›Ø ÿA1 á4 áàƒá¹àÄáèðû ++›ÕBôï·Jô0ô+ô)ô'ô"ô $;ã$oÊÿRã õÿ0âB! á$ á0‚( / ì/  à åC4ìë­ÏOã=8886848/8-8+8&8$$;ã"$ÇBoÊÿWã\\!\ÿÿ âG á á lè /p xéK jK OãH|C|A|?|:|8|6|1|/$;ã-$ýcÊÿSã& $    ) e áÿ C$10ƒ90ƒ Gá á àÄ ++æ ++ ++,´xÏ {Ï ¸U¸P¸N¸L¸G¸E¸C¸>¸<¸:¸5¸3¸1¸,¸*$;ã($Q ^á#$?[ã!ÜÜ1Ü08K(½( û âà ++à ++8ø „.ãÿ ++À @Z*g ++QL‹ ++8^ã;XÜá3w `  á&RœP ++’åLÚ ãG´3€!€åü Ã0ŠåŠå Šâ ¨ Ø<åãR ü à 0šåšåAá áC¿%“šå€à àÁ‰N’åÏÿÙOãG!@š¤[N1 á¿ ++¿ ++óSƒá á¿ ++_`Šå¹£ ++óHó0 á 0“åàŽâ&S㨣 ++ ˆ²Ÿÿÿê4Rjô ÓpBh ð ÊØóDÛ à^ÏE@0žåK9( K3RáK‡_ žåðú ++žÎ ñ ++ºf ÒÜìÂØÒÈ@ìÂØêÊ@üæ¯ ++ ¯ ++Ò ++TˆBhY & !¸xÐG &è% ö`jBh8%l ++h¼ ++`¸!+ 6n( £ZèäêÜÆÂèÊB?Ø „4é#àêÙ#S} ++±0’å0âSö@P0’å£0¡QÃãS ++E… $ŽàA3‚åô!? Š›U#U#% MÔâjPn 8ÚóÜÊî@ØÊÜÎèÐ@üæ@ÌÞäæ!0(!©>¬¢€V5±v± ¼8( ±-¡•Rº ‚£#†å@™•• ð• a.ÀÀÀ YÀYYY7 YsŠt ++°vÅoxt ++¸5 82x&¸5jÊâÐÂæÐ@?˜ B&,ˆˆˆ ˆˆ@0 ŽçLOúÿÿ€ñ€0 €¨Kxµ´ÜÞÜÜÊÎÂèÒìÊ J1z+ @:È †?>"0B/+,ù%VÖ!9 š0š ÿ€Ö ¶, /aüÖ/Q5ªd¡?zU!0B¿.Ìðö5€d.7 ®2|SUZÌÒØØ_ ++)° [ ++/ã10[ ++C ++ž[ ++¿#ë ++@0#âc ++¹¹qŽâ €ý›PÝE? ++|Æ |= ++  \4~ ++^+¨ `.``1S‡&$\\‹?~óY8YB [! FæÇU#0 ëW„`šåðåU‚ ÆÂØØZú[ZK€TW-P  C¬p¿49Æ2<-*¶23âƒ)¯4Lp áïE£4u£4!"3ã«4ÀÏW\³3ñÚ`Šâ Á áÀŒàà–åF`†â Váñ.§^2GÀ^2¿ú€ˆ‚ò-ï‚. ++ U2V0„ŸC^bÆÆP%Ø “Õ.6JïÝ,¿ ++zB „Ì ++ 1†´ÅÄd_° †Ã6ˆ<(jÆêääÊÜ¢PÚ( ñhˆñ0 H-4~×#ˆ ¿ ++ý³6àT)3â>):ê ¢2ªq"HèGZx*¸ -a5 çŠDÿ¼€>àà:—Ú—$€-œ/à ¡¡Ûe2e2鵞µ4(¶( :C+ÞÈñ=Š«:P®Ä(éø@šå àšå°šåÐMâj9 À‰æ4q°åàÇL DáïL3å3PET›"ZŽ:75LÐâ»0ïLñL"u8ç ½_@åÝk<1zŠ~!68 ++0+M"ÍC%7UÞÄÔÊÆ;7;‹5‹51ŒL†5'à  ++D#h’h2 @’;µ4.v¢Œ "’ 2Ž ­ ~5-à ÍÍ8ŽÍÍ0ÌäÊâ3êÜèÍ-è ÍÍÍTà’åê7Ñ.?ªÑ’_LÒÜÌÞ_’’8’Á2”­à®Tà ÅÅ8”Å2H(…ZÂÈÈäÊææïg n ˜O@€àTPÑ ¡6 ++zPP# Hm"Z|}Ž  ++–"A1¾Ò'bA@Dà{ Ïø˜bŠb ++Õ ++4–8“a, ÿ «_EZàÞÒ?( ' ++ªO!@‚âU¬40 ++ ++²…ˆ8– .r .@„ú˜t¶? ' ++;dé)!$!—àâ^ã HDA)*Ò? {B)f@# ++: ++@??!@D×d?  ,Ѓ…Ò˜"é0ÒÜZCS~ D)—8(˜ 0«!Ü@l@“  CšHýKƒ£*È  ŸDõ N ÿÿ ++?X€Ò¾º°Z­ƒùØÊä$ÆðfêÚÔÐòrÜÖÖêâÖêZÂP ‚5ó " ++¶ÌØÈ äÊÂÈò~ ¸ ++rÁp ++ ++¶Îz±ÂÐÊÂÈ ¸a ++êÜÎÊè"‘ÎÊèZæÞÚÊ*²ÆØÊÂäZÒÜàê+2:::'àê:B ++ÓeJKÁ=RìÊÒZý¸!ÞÜb$ý ++ Bj9r 53z"ÁÜÞÜÄØÞÆÖÒÜÎ~!‚*:"?óŠ L º ++ c,T¼ "³QÄêÌÌÊZ5Ä)$ÛÒÏ!)@79À..ÒÜ6"5’-5- -"àU 5»&¾OÀO ÀO ++ÀO>Â<-^Œ?  ) `]Ùy]]G°šåaca_aOaIa:a6 &›"}}/} ° ›Ê‹Êá• eÉ…¡C…É0ÚɈÉÂkŽ5в$.ï ++##óÂó2Ä2ÊèÊðèêÂØz /@ $F_F JåFå6å0å!îaÉÉ{ WàÎã.µ æJŒŸJ(ÄJ ÄW ++ÄW:Æ03.ÒÜV#U“›M MŸU¾ÆU ÆU ++ÆU>È>2 / * ¡{¡egagQgKg?¢ÔÉ5Ö¥&ÄÞ]>*` »%Êì’ì&ÿ©!©!2àHA%¿)éοÓ=L"ÖÌD ++¾Ø?ÊÞ̉8/.è/è@ØF1Ü­2ÚÞ 5ï!ï8ÚïÜh~³×,p Ù'ÎÎ_"q!0‚⃑Që#:Æ:Æ&0‹É î30ÁY,3/º:o¬0Ü1Þþ ?9Þ%Þ8ÞÁ5àÃ²Ý Ü%܇àâÊáZŽ ¬ í*!‘ÖÖÓ*8<<ê4?Jâê7ä, Q? @ !YñŒ4“°I((' qƒâ ‘`wË ‰*‹ügnâ ƒüƒN0©ì© è5è è+è±è è®ä äí!\ ”C ++¢Áä#? ++h$Ûñ7æ ¶50-à 5“ P0’å´=@àCàãtx0’å@ŽàP Pžü+6O¢æ3è A2?h 1f–'Iž³2 1³2®‚&QžåÑI0AàÚc R)'º˜X@Êb0ƒâ$~0Bà 0Ž)õ¬)¬ ¬¬¬Q 0CâJ3Rã ++°° °N"! á´‚_oZèƒ3š/8?0è·7ê;5æÒô—1,À µ1Á=µµ8@Nâ­­­¥8?‚ê¥;ì(…0¤/` £e£4Ó50“/Y £@0bâß«_0ƒà£0(£¬¬a[ Ÿ° °Ÿgì¤Íž01î$4L ^ _  O# _ <<_ 6î)3Ü\ 5ð.i a "b "âb b $ b b Yèb b  b b ðb ðb ðÞ ++8ò"¸ d e  e W0’åe  e !P Pe =ò9ô™Cg !h ! 7Å_žåh ½h  h A ûh ¬h ½h ´É`ôh ôh ô½8ö = ++j k »»k ³³k ;ö«ø2m  n ©1n ån n A©n n ° °¥gøn øn ø£úÃZP=  £-£ u?y à’å@n› @ @/àn“9?búþü˜ 9:Ý: :Õ@:=üÍ4þ27(` ++é / $ú<… ++E<Òþ—bC ++@<¶é "?x ) èH0L7< Và š ’)*Q‚â0©mÈ “*‚È _ƒàà‚È &´ ¹j/ä /s ++/î#?0Á Ñ /8 #åC=9åC1/#>:áù? ( :ð² D1Y/ZÓ):\b× ‰m8/º?O.Žê /( "U\(ËG5/Ì#?8¤³ ? ' ++Ê?("Êv^ :Ê, ÉÉ#9 ++4Œ½ —%˜!ã L@OÒ ++¯'#M > ì›*œ' „œœ$ œœ œ  ñ$?2à ž$Ÿ wŸ=$ª 3? )¢&’;-Øv¢½Ú?0 ++¤#¥– ¥AÒ$r Zr (Ð?b"Ðv¨Ï$30A/Òܧ#=+=G,3¼g Áè </p ( ÁGŸ6; “});“})?‚å 7í›gš›Y ,ÈJ}Ÿë">.¿ ›.@ " 8!ð À%)kO"p ++;/ ' ++<È*p ì$ (0BxOr ¿Ï>,”œ.0 ! ?ÛS(sOòÒ"? 6« š/ & Ð;Ð_+¼')D{Oj œ Ë""¨ S ¨ Zÿ]oOâ"Å"$§ (. #ïZLâ$· ++&ÿ ÿy4 /OÚ&l (n $ M =(Œ$*P7fÊÚàèò~um  [FOú*R *,S MÌêØØt M, N.2 $ˆ+ˆH.4#0wêå)æ' ]%ææ  ææ0æ0î#22 è#é©,kO2!#4ó…/ (ì& ì,%ŒxOr4ì4Â" ?6.– ++î"ï×+bOò6Ø#8‹/ 'ò%é.@+)Ž{Oj8ò8Ñ#B:HqÀêC)À íCºN|>M‚:‡v1<"¥E©äC.P `#ÆX×C}â²<4>*¹’àäÞàÊäèòZ‹ÒØáü~>O‚>Í8@4Å ²ê%ó  ó‡@&Bó!ƒóó= ;O‚BÍDó²ó%ó ó‡D&Fµ<‘µáq€>O‚F»Hµ©B™xÎÅ¢o Ó{)/HÉ3J©|Â$ ++ ø ø >Æ}˜ˆ ì;3â½2 @”½Á0b ++’(HÑÅ‚Z|àäÊèèò O`Jq HèÞàZÎèáŒÓˆ ݈¹˜Á@åTã ++ÜHŸŠŠB\ š1L*H w´O ¼O¼O:2&ठ “@ðB00 Âù$ ++0HLÄ7N"–q~—…˜…kTDà’åðM £Ä˜…0/NÙBPH±o ++M|+ð  JÖ” …p .âƒÎ×4L²P×jpP ++Ó*   ++ùÀ9màmTSã1mÊjÖxk&Þp—{'Ð ‰{‹ ‹± ¹¢Äm”*à€à/¾£op£ßp²Ë¥in¥ ¥ ++¥D*ã¶"€o¶>X\òBtÃ7R,˜q3ZÒÚÀ’4W 9Wt,9W/à9W?/RÖà Ժùž ++  Ö!?"ÒÚ…‡ ++‡$– Z|bÍÎ(*x µ¾oO C ár¼ˆr3Tc Z|r~Z ++Zm˜06 ++RÄ@: R=º püÿCRПÊã á@ŽâZ5nT L 0êÜÒ‰|‚@æÆÂØÂä@‘Qxr Q*˜ Q ò”\ÊsM\šBlM«sÑ MYt ôtôt™4€âö„›\ÂB`E s(X F$ž÷tB÷tà*àâ0€à ` š 3ê @ ++*3 hñ(ÆÂÅ^$ d*¢î10©"“Sãõ …0Qí¯â*0â0€àŸ“á´tqžƒáõ±-` ++ x J Obd $äZ¶zBFt ±c ¹ €â Žç>A\ÚBœÏ7V,wA/ð  ++º==>L²V=ͧ ="¸,€ Ö ˜Ÿy¢9 ++ 9 ƒ9–9$?ÌðÈ,    %+¨9=ÌðÐ)Ð   Ú[ÒB §>ÌðÜ*à Ý©Ö àCž^Ú/#áÚ-¤ÚX$ÛðÜ .ø "  M¶Ê(â/Ìðä"H-Ìðe ž ++e$?&ÒÚ‰‹ ‹$dïåÓîÚ ã°kr„å „N0Õ…Ô' ++šïõ6Æž ++” ê¨O@å” ›8ÆÈhÈh hh#FÆÂäBó v#s¯.0€I¯ JÚ® œÂÈÂÈ  Âh ‡EÄÞðñ€ ìg ÑïÄ8µ/ïÄÕ¢ÕFÄÞð(‹ ++•Ž•50Z‰{"à |b_àâIg@ Z¹Jºž µ2\•%ÄÞÕ#5h À#&ÁÁ¥°~úh\*€²0^NS %˜ d,ý!ù!ŒnUm“0ŽâŸï“áè(’4 4 3Á!0A ++ ++,O@^, –!#-Õ Ò üÒ ?ÒÚ{ } Ž}$ ++­õU"h GÀ_Š_Ò!ˆ ¤ E¤œÎÐÐ$´~·±¿Ràå< ++é ++Kº{ïÕ‹ ++̋ǼÌ‹ "­° ª°"y„òë ë$i_¼â" $$&   § (@¦?h 8¦ë˜~"þácc$ ++pa ++_Cž ++™6™#^Äîàg ++gNg$ ++á(lG©h$Ï3u(¸ {C©C©,L+ ++” • m3•&T`q•6x “(  5 5 ? *ótñ«Ò4€ ++ ++Bð `257b-~À tóu óuH/bfnHd8ß ++à'h"?OÊdàFÊâÒ × c?PáÊ”!"fúZï(Ú(1yµ"µ5×ÃTàBà.Ï s4H³#¦ÂÀÖ/0" ++rD(ÚÞæÍŠ4ìÊZ涺– ++¿–?Aà¿–K™¹i  ++i/A‡—ŒÎäÊÂèÊæèd È#NØÊÂ\ ¸#=fZîÒÈèÐY ++Y/x@YÙé3ZêpS3 $»» [?»$½Ÿõ ++0Žâ 0€å0åàÞçE3Als;à¤6!%ø  ++r¸¸ ¸œÑ¸ù[úBì³÷Žn)ð » %s»B¸k[òBØ·¡p+è  ++ª(»v»+nZêBä·yhêÜÛ5H  .§ ú40ú4ìC&ÔšaºÿAÚ6R-65E ++ žäC\2Cà©g ++0Aâ 5?Ä/2µ0†! tú‚Bø h H˜=÷ÆèÊè@Þä@èÐÊ@ÊÞ̬lhD"[jêÜá70 ¿?¿-¿ ëV#ã¼Ü³³³‹PjB³_j Nî¶j£B·lCîp Dî n=¯+h8!nnn°Õ « AQãN`8 B1ØÔožå0Á秄PZB §l‚"Z’lk8#ný”G% E9êe,E1 0žÙØõƒâ Žå†/ ƒ†…P:B†nˆ :„n}Q"hàÊÊÖƒ6P /7V”Oä™åk%kkHhBD&+ä!6p /“ ^ŒîÏ %Ï l@xBH3/H1V1%O|&H//&H-!V¨@ZÎ/Ü@+ ~Ø)/&H'!V¨@/~Ø2€Å™%å+ˆ ]J>P¿ ±¿ó=0©-ÿ<VPVP ++D®Dà“åU á×çVB+0 „å}™?@ôJPgºý˜+€}9ÜÎÔBôÊäÞ¶@&V@ÜêÚÄ Ü+·RHäèÈ:VæD n%‚g'èbFœO$UA ]H ’åhàÀ ++ à“å0“å* Û1 0žÑôÛ>D_Y² ? 0ž|qÝ´L3OÚ‚§A/È àD„&HÝÍÞ»‡º/ð (v1¨@™å3\¶ \¶•D” ++ù ++ÃÃ%ã»Ã/±»Ã] 5¨ ‰H D.ý 1f8OÀ@@„.ÀiyƒÂäÎêÚÊÜè6N O5† Q ++ôº=`  ++i°iaiÌÒXìÄ y1@ ++òä@}@à áÖã0à“å‡ã#kP0“åobìA“g .g Eg "çÊŠZBà ã¬ñ° ++‚â‘ç 4¶1¶¶ ¯0Žâîô ++N ãc 1 ?ð ¢ |ÌÂÒØÊÈ@èÞ@ÌÒÜÈסÆÞÜÆ@ÂÚÞÜÎø þÒP@ìÂäÒe5Tæ@ÞÌ@[äW8>.ÀÕ×O ++ƒFZÞÞà9= ++I=‚/Y Ü;b09 dÎ"Ì"PðàÊÆè9· ++ã ‡:˜ (,!>"~@à ãÒá÷_` (òR0†å 0  †©Tà„åÅ w8ó°îæ”î×æä ++B € Þ¿ —åî•ùú ´A@“å¼ —å ‚âà‚åmF99A ‹åƒO àƒåÒPG?0—ånñ0ä¼:zøTT ¦0 ++"±9& ++°ÌîE$ ++0úî ](o?   ++Q… “#““ “ ¢= å—Ö—Ï” 8 š} 6Œ5âRä2‘å„0 ++ BÚåb0“åÌ ++– á> ++&* —å’á´Ð ´Ð+1´ÐpN®Þ  âñ±Ó± öåø’Xz” ++˜ê© ++/ ++8 A æ¾ÿÓ@¾ÒܾüÓ Ã–Ý;@èc œ ÈTãÒÜR 1 õ QZ– 8@ ++(ÁÜ4˜c ïÔf ŠÑOæ¾à褚å všå  ÑÙj„ ƒŠe HÊìÊ%m#P  À ++e.@ä²@æ°@è®1êP@ìª4î’#g8ð%b8òAÆÂÆж0ô(a±ZäÂÜÎÊæZèÞZdÎö ÆÆÐÂÒu4ø öé!ÒÊb`ú"ìÒäx.Zë¶æ8œüR$1èÆ@«¤@Hžw$ ¢¤¦¨ªQ®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöø1ú@>üº&,,=ž  ++±@µkÛ MK  ++KÞ/Á0@P0"o*Là‰âç@[ŠB ƒÄ¡ uBí ++ í•••6\[’B ™<*7* N7*%4þ1•'Ø `-N8.Aþ})‘WY$Y«IÎ ++(ä(ó‚)ä)8Ïþœ#J&~  èô6R <j6 9$¥# ++ì4ì=$wn Ëwn ++ðà/Êðä:=²œ?ÜÞÜ¡à ”0HæÌ°1¸  ++ÐôÐ,ÐÈ'ôÈœ ñ8Oæÿÿ  ÔÛ9+3Ò.Þ  pÈÊæÆäÒàÏTA@(»›PU2@2íD/FÌïð@0 ++dï/ VJ  ++tøtt ++‹%‰Ìb:- ++æâ æ EK H$ ÉI  ++æüæu1 Þ9Oª trÌ ++´L L ++Ä&,AÄ;ô"u #º ö/,!Ð9Â¥> @0m°@g³Áù ++Ÿñv  ++òòœ R1 Ëç ++7‚ Š q( ++ _@Sn â@ÅÊ)Ø æRe ++0þ0þ8R ++Š,‚ \€µ@઎‹ ++ò/8A /8! ;/ª «ä“ ++ã<ã<ã=¨ã ¸—b½"½0=R7 _á‰åöžb0`Š‰2P ++ ¸j*°Õÿó¶Úêæè@ÄÊ@FÌX@FèX¨X0 ºâ¶k_Ï ++B BÞÉÛTÔ' áú ++‚_00Œ‡ ++“$“$“$“²“7 ++„(„(„(„?8Hú Ÿ& ++ ++¥4¥4¥4¥R&*$èØ6˜ à1L)pìŒÌÝOÖ1Qá4Á> gE^E°8 ¦<ÅS ~<½,^~<¯ p„å0„å ‚<󂜔4ºiÖÊòìÂØÃ:S>(&„×LÜÊðèè:%2x>%â@’ÃV ++HèØÆ0. ^.$@(_Zä/0^0@z(,òjµü1*°ÐYB½MB@*,¬1.›.®°‰>Oš.°"¯‚žQl Wl^úˆ†WlpSHÌð}-'H  ++ ++;À{ ++;É. ++;JÎÂÜÈ-#0„7 #5-!„7%0î;"Hƒè;}â;Å,Øü-Ø+Þä×2×N2×! H‚ÖÕ'­ðÖ4ÖN4­9ðÞä­ðØ1+ÜÞs>/6 :M*6Ø9ÜÞèØ/ÜÞg>(Ø,ÄÒ`>/8±N8Ù"H„~Ú³'Û`Û:ÛN:Û`Û`Û2bÛ<ÛN<ÛbÛbÛ/jc Û>ÛN>Û„ ÛÛ&a@H©L|›l8*H cîQà߉ ++¿¡:Q ælòR[2 ki¨êBì @Vã?îÐÞÝF OB )(  ++,¯Œ *ç;ñ@á á0„âêîÈ‹¸î‹ƒíí P*# Ø Õ@×0B, ÛQ¨…pÛQÜý!aì€â ˜*ÛQ!^&blt u_è€âu-/dhu/dhu_ä€âu-6fd~ø  ++ç ür--1?0åGöôüÝH( Ò ° ++ª ++ÿÿÿþ?$8‘ ?(@î/h`î/h`î‘8þð_ ++ð pðpð’,ÿñ/ò /jlò/jlò’-ÿó/ ô/lhô/lhô’.ÿõ/ö¨HÌÞäÊÒÎÜZNt+ ù WtòRÓn/ª?²…mîÔt Þt6 Ù þ,[ZÆÞàòÛ D à@nˆĉ¦0šåÐMâ°^* °ç C‘F°0åN1 áA á” 7ÔKOÐâû cjD˜û %H¦Bþ ¥ ++Ü ++?àèäFnF$H¥&1HàãCÂØÊÈ¿÷,Ø )]IÔÃP*¢$^0Šå éA¦$áA+qéA^ª$ VVFJ`" ¬ÏÒ$3š.×™DÒ$0€™D2‘GÒ$Ì$J H{%ˆ zžw#oJ.HÛK‚!]‚š]‚8n™lÏ {LêèÌp|š9P zš*ÃÌ"³Ìý¨¯šó ++ ^㨺 àÒåá áï^㤠++“»^ã  Å¿^㜠 ãHÀ0ÎãCàPã|€@(A©ý$€^ád ++Nt¦Ð‚à Ðå áPðÊ á€âp„à‡åâÒKpïÿÿê P§@ºßP@ÊpCà¡fpªpŽâGqŸñ‚à p×å± á+s ápÇãWÛ €üp â|âd1€t¤»ÐHýÿxPàŽâÑM”JW'p,e„àp€¤ÆsD öà„à0Žå0âà”åÒ‹0SápLSd 0ðšåá áŠ‘× PãpºïPãnüUüðq á'³ á°Ëã[ãDš9B°Câ Ø𪰎âK± á °‚à °Ûå ,¡Ã áÀÌã\”c<(Рáüpâs áü° ô€á €á ++¬@º6 ++P»+ºüPáT _ àŽâ|T€qTHÌ SxH× P㛺=Pã™Ì€ÌoÌVÌE¶;BÀCâ ­ðª ÀŽâLÁ á À‚à ÀÜå Á á,cKJQÆãV³'ü üvüu ³ áüÀ ˜ €áPã !ÿCÈfàŽâýþAXö,/ñþ_x/ÓþxcµxdJ—þÿê`Q`Q``€ à€âàÎãm"„P•à*G ÚJ0P†åP ò ++@âp ãà†âpŽçø™‡6áqþos ++ÖQo ãaþ…/R^`£¨^ð^ 3À^Ÿ O8LH¯ ²%*KGC HÌà´9 Z|®¦ ++O ãå4ÙZBP Ð HMÈ ++"0ÇgA “姭0 Âãsp ãWá3| ++´ƒà‘å! áî pü QQ@ÊQ ÊÓa°€á¡°àj  qp‡âêÿÿê ÏàŠå ŠåpŠå]¢<Á \ ðšåàšå šåpšåçÿÿê ÷Zê Bÿ ,—Êk€Øÿÿê ãŠNnaŽ¶€›LPãk£]à0^ác Öƒàå  áp³ƒQ@ áAƒ‚„à Çå#QÉ S@|‡ã§A{à„à pËåüâ €ã@WpâGDDÛïà|" vX.}Xtx_°âK|| |¼ÀyLhvhŒŒ ŒŒ™©ðšå@ áà7õO hŽ áäkˆ„ 0hŽ˜ @à€âqPŽ45‰@!@á³ ++ïãà„à ÎåjÿÿêN° .ìÿË°!$p.ð_bÈj ++Ð?%XN%ÀäÊæêØè@îÞêØÈþ*PèÞÞ@Øo1±dXj ++°}%N0 ++€21ß…k;0R¢BP© «ZêèÌblh :ø «Lv0 f¶)!`cì9³—X_ Ÿc?- Hu*ZŸ„Z ¢ 1 Âãæ8T!¢ªÅvs <P¹ Þáë°\aüû±8t@ /øÿ8” Ú[±"0N.>y/S¨F_Çÿÿ ++¿Š*<C –+L‡ÿÿ ++¨°"¢XÄÒÎ}òR ØÒèèØʈBV @b ++æØêäàá+2Tê,@àCà 0Îãd D8&T ù+fãÖ²n@ 0Câ§ø ++U ++B á€à¹Ñá á6 ++Qã9  oq=,!Ê t 0RáD #p‚¥`€à¹p×át !7 ++46º°Ü 0 WÈ °Ê7zGâ6Aâóðáâ áâð ‡-`â ‚âÔ¯ð  €0„à ƒåPqà ++-?7 ++QQptü ++¤P ‚â«.VÀ¤°H50”8Ì@^@@5 0ŠW9A°*ñ pà á 0šåP@› ++ ä· ^<P ++ á•ê[ß@ŠåàŠåpŠåå¢üéåøSðšå@šåàšåpšå6 ++SãPˆ xPSáKx õ B á1|?ŽâO0Šå ”‚} “ ” ” 0 RÔ <Ôð*Bâ6:Câ5 á0ƒá7ƒâ3 á0ƒâ „ ‚å [ Žâ¥ö´ ‡Ô0æiLLÔ˜˜Rp‡â dÀu°H ++@W@W@@ O!Iÿÿê àX ++XQX%AXX©XP’^1€R^¦€^àT$ï @ZêblÑŸ6CÐT 'h8V! ++Èc  `R BVÓ!X !8CPBÓ 08s˜*ê";FgÂÜÜÊææ/ZÒ½ "€%bl›œ œ`\ С, Nø Ø.[àž40Îã ˜(¨.6€¡ ¬!ÿÿ! ™`p ãq á!1‘™T àCŠå0Lo|"< 0<™"p™› Ãu0ãµÌKQã (&. ¶Q- ô'ôfšå™¸sBÕ D`‡à¹Àá˜ôPAâ!' ++BÀã6 ++u B• –šåp‹à¹ÇX°à7ãX[‚â@\\Õ‘@v²h_h€à ã0 ãd,@òÿÿ ++à00‚àN]&##jRØ(Ê0šå Iø_ áà„ „u„# ++AàŽâì ƒâ)bwBâ'5\@6*ƒãp$ppdtødt&p°\€0à7*ƒãÔàÜ.QÜÜ¡¼$`šÿÿêA!™‚™ ++‚•w†å`ŠåTœ =™!ûA€@‘â*jÇ]U•%8"Aá# €à†à¹ Îáˆ_2ÿÿêDÀp¯סÀìö¼ @ ãà"¤,l´íü¹šåšåÂÿÿê,Qxj(Lkp^&?h¥ðX \^X ê x Q º\„_4( ++˜á:`Çâpâ`â`¿ í`4:À …O|ÒEîñ¶F/ ú/­2|Ë|—|!—|9s 1Q‚ ¿| 99 t4š5\ÓQˆXz(@/S `$f$+fd$: $—$¦4p á!„’Ç€I= ++¢ i$"à“Q!Î$NÃV$ € @“åâàã±`?Ñ ê4Á.D1T ÆD1à„&©s†DÀ BOŠåpP/¥–"pP@åÿÿ ++’±aÁ^XýX_¦ÿÿ ++žÎ; Ü!¨f¨5*¢›d«Fhb”º.˜p ÎãàBàx¨ ++KSãˆ=,pà 3Wá5˜"p=y.ä 0àBâ `$ªGáÆ¥U€à @ž%;š' ++U³TX!6 ++^ˆq³›àÔ ð°ƒàà‹åàâp‡âÙ瑳CàŽâ÷óäÜ1àƒÐ¶³.&0!%? ++í‡;ä0 CâÕ°2ÐÌ# 0Ð.Š `+µdÌ# 0ÐP $šå‰´ ++|R$RR4ì ¬@âÊ|j‹# á ‚â÷$$¤9º¨ƒ¨ ++¨S¨%0C¨¨_0 áeÿ¨3š¨JDО&fdž' ++†’DŒ1d %.TñHad–d– x¡fNf¡*/fd¡/fd¡%hø¡"fdrA Ä—‘0 Ããb˜()p0‚â>àã @ˆÊÐÉ ++K^ãI µ]&ŠQœf` ++à‡à !C í‡d3 áIg^Î1 @Žzñé ++†;°& ¡  …eðôÿÿ ++ ‡à ’å"# á ám@ŠåY*p-¥ 5*U5&p1MßTlÙ>0>7ƒåª‰Vª“ áàâ`„5*CãXAT–9 à*?àƒœ ++ƒ ¨äŠ4ñRÊjÝ †jKØ&Ü; YÂh# @Hj ++ô83 :jYåjø /fdø ÿ_hø /ª jø |»æ¾ÄäÊÂÖÐÊäÊa.l{M%l>9%H†A.ƒ®<ã2æèä„\ ++ân,mÏnÏn ôß ò,mhZn ++ˆ¡n„HÊääÜÞy  'N pÊZAne+pAn þ{@©2} æ¾=4o‹<ÒìÊÒ>r vr ¶Io µEo 0EoWatHHJ[1àÊäãL ÜÆÊZÚÞÜÒèÞÛ W? /,ÄS ¹BÚ „\O|O« (E Íᢶ"-³Df tš¤W2 0ìƒ`…+Úà/ˆ "÷“1O()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #óÖ, ÏNöPB »Ð  L0Ÿåê ƒâàø à‚å,°™å Uᨠ*°Kâ,°‰å ‹å(O àƒåHH4xH4`H4HH40H4H4H4/è ++H3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/ø H3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆpX@(/øýàÈ°˜€hP8 /ðüØÀ¨x`H0/èûи ˆpX@(/øúàÈ°˜€hP8 /ðùØÀ¨x`H0/èøи ˆpX@(/ø÷àÈ°˜€hP8 /ðöØÀ¨x`H0/èõи ˆpX@(/øôàÈ°˜€hð PôÿêèBbZ B ø bZ/ð Tãã@Pâjð P€Xâ öŠå Šâ àâàŠåÀhâÿ/ái} Jâš( ñªBb8êBl BLPB0 bV²²V²²`²h²QæêÄb´´hy¶+8·#Zj¶µyµ5%Ê5ÿ¡>5$52>@E!5>5<5|5@5O\ |5º5pº5º5ÿÿº@5(5@¹(5@5*5@5@ê*51@8F @5B5%º5ÿ¡B5(52B@E!5B5@5b äläæt9¯F  ÈDˆ5 5pÿ§¥I/Õ¥&¥F{F{F{F¥F{$ ++HH%ÿ¡H_H_HHO ÂFdL?JˆaÿÿK„LÑLÑLÑLLÑN»ÿÚN»N»NNLÀR?Pˆ½ÿÿK„R-R-R-RR-TÿÚTTTTR ®X?VˆÿÿK„XˆXˆXˆXXˆZrÿÚZrZrZZXw^?\ˆsÿÿK„^ã^ã^ã^^ã`ÍÿÚ`Í`Í``^ñb&ÌØZÚÂÖÊZäÊÆèÂÜÎêØÂÈDo  Í;:¨8šBñ0 áàâ^ã)à ªBñ`EâP…â,à™å^á:@ á6à ãà„åà ãà‚à‹ží b„à‹Žíƒâ "K_& f  á`Ïp–å@ ã ð–å40 Êð" ++:BP(bd $üæ@Òæ@ÜÞè@Â@ÌØÞÜêÚ f ++HÞÞàæ0'kdf2ÌØ™lh 6FTT  öG`Eâ``õ  €â0âà„â‹’í›“í ‹8îD ƒj9|2|/|%|xY†â‹xò ÈÈP‚È‘È;ZEg hF ø²Eá|ÞE,$/ðšæE1àt-l*  l„löM¯äÿÿê Šå@"¡hŸ"F €Ù\€0 ++ò+½AŒ ++h 0  AhŠr0Œ0 ++ ¢E"0ÃUZh ++0=ÈlBíkjÞg(B?Z„B=IBdIB<IBDPIð˜ ñà ãŽï á ++0åà#à ++oåà„å`ÜgÝ `(„R± €0 á  áÏkpó á0âSã=&^ã(*‰eŒ 0žå žå¼ W⇠‘PæŠP0ÿ/áòe_pŠå àÑU ++¡šåpšå àš‰eèo â0‡°6 4:(4 ++¸ Ìèd1 ++ c ºj ++ ~lWV f0 cÿkncTcA(cd(c<(cÿ lc‡”U”U‚”hÿg4”0knk”krJ2kpk`J4kJ7ˆJdˆJ<ˆkF k“|9‡¸‡1í‡8P‡s*2˜2˜23˜8$˜5òprr“t ++ÌØÂÄæm2H „P"_z`ààã®àM ++S’åàM ++’M ++v>3 ++ ++âðtדvÌØäÞê†ixè$` ê%êøòl º/ W1+©W1O šåÜ쵊Bp vö`;jÏOƒzÌØØàä!è øâŸu ++à’å®è qü?@ÈO²-_ªz¬|Ø™~…_Ø\ \ ++–þ0€âà⋓훞íI‹´îúñî¡+t5\.\+\(  Ð‚l\\ g8 Öj𬂬1 Þy€MX—w$ €’ °SÄ ++LzD áèp0 ++ ++l0$t" n ++# U’åà€€0’åõ‡vz 5 ûO šåîŒ ++/’åhÜ"5RœR ++œZWœZœ¸|…z ++K3~ØW… ~ |DE@Bœ³€³û,‚³x³.*³H*³ *³ÿ9*³ÿ ³ ³ ³_ ¸€³ ‚³X‚ €³ ³„³+†³|³#€³D\³‚C³ÿ'€³ÿ%¤³¤³¤³_¤¸„³ †³X† „³¤³ˆÄ C)Š´h.ŠhHŠh Šhÿ9Šµÿ¨µ¨µ¨µ_¨¸ˆµ ŠµXŠ ˆµ¨µŒµh'Žµ/|zj.ŠjHŠj Šjÿ9µÿ¬µ¬µ¬µ_¬¸Œµ ŽµXŽ Œµ¬µ’µzìc¦!ˆ /ˆj,yj7j µa[*æ-6/ý1_q1P A!8BA8pf88 ++03C 3ˆ ú ’35½–¤ ++:”:x: ÿ#:@*:ÿ$<:<:[P-<:”:Y” –: È—!š) ++:˜:|:“ÿ#::ÿ9@:@:`M-@:˜:Y˜ š:@:žÁx¯ œ;/ˆÿ2v@Š<ÿ$D<D<D<D<œ<Yœ ž<D<¢<|< <|<¡ÿ$x,<ÿ9H<H<H<H< <Y  ¢<H<¤¤HÌØÊâì~;%$˜ œ5,›ào'10c'²10 }+Àžå0’åQá×:@ ++0žå#OSá¯20£&Tò¤^E0¤0¦CÐÂæÐ$à p$°»’õ0àƒàB&?@Îí# wD¢¦¹ ­B¨ H6•ZÊðàÞÜÊÜè#% /%'.é/%/%;¨Ã4ª©CæÒÎÜ¿)Ð »»ê%•v?@â¯3?’ª¯3¬˜A|ÌÒð˜7<+à ´5´¦'œ³?0Ž1 JŠ(Ž(BŠ@ïžíÈ‹½îêîA á  <.`r: ò(P ÿÿþñ€¬ \äÊæêØè@ÌÞä@üæ@îÞêØÈ@ÄÊ@ÞêèæÒÈÊ@ÞÌ@=c@äÂÜÎÊ«¬í8ðí8®¸<@¶ Œ1 Š¥Í0 B¥ B¥ IêµZ¨0á}402¤ 8Sã`0u!“2¤/0`0uq0`0L0`‚BpFZpp–˜pÝÀ²@®aZpj²à‹7°à0ȸàZz |£àPàPà„2B/4àãHp¢0¢Aa oD-¶+=¢)9Pã=  ååàNà±#à= š.e=>"àA " v@>@Nÿ=³F<t<t<tû7t ++0»¥Ëâ°@²´5=A^²´ì!FDF €¶>! ö nZnTð¸ $@% 0’V``«DÌðb§!x g®J¬OzBäjVjVjjàjtÌðôÊäÞí ++$ )…0y´ ++­> |J’Bè| ºÌ68€¼ ðÂÌ88 ÉB0TãðƒÈpôß1ãÐ1ãÂi ƒðó•Gá á“ÁàÀQá‘/a84å£qÁàÄQá0$qŒWAL*Að0†åà†â à†åp†åà†âà†å †å&à ãà†å»A T1L L2tàf4_‚å 0‚xâ030Š3-COŠåô.E>èHPàª5 5 ˜ü…5 .î5 gpX@5SãJ S 7RãTxT ++ÃBЙ1 Uý1 t1 /=1 h1 \1 I„ ++× ++ÆåÁˆÈHÌð^Xß_pÈ ++X00 ð ++Ì 2ÂèèÊÚàè@èÞ@ÈÒìÒÈÊ@Äò@`‘ ++B ÚÊ‘ ++DÌ) Æ7  3ˆÈÚAo¢Ê ? ++@P S0È DZRÊ ++_ Á/Ì} U O’ÊU  ΠŒHÐÜÕÿÿÿÿÿÿÿkÎÕ.ÈÏ*0 Ì´дÎ+Î  ´>Ð ?´д¦}´дVÒ ++ÌðøL2( øL>ú/¦ª` RPAª@b0%ˆ" Â& Fˆ0 © ! ++Ò™h™Ò™ÒÔ ++=Öc, ++= nd-9"!«<dz Þcõ+&3À@€Än<&00 áü "ÒQ10^ DtCQáø"ø"ñYD áðø"RÑ·ô"5,ô5,"5,L 1,ö1,A1,@ÌÌ`"šBx,xŽDOZxhÔØU<аCºÖº˜„ šÖ Ô“xØ$KÚxª(Úwèªÿ||‡Ÿ_|hØ Ú6&Ø|ÜvJÞ|Ú(ÚPuèÚÿ€€¦_€hÜ ÞXÞ Ü€àµ'ÈIâÊ(ÇrèÊÿ„„„_„hà âXâ à„äIæ|º(>pèºÿˆˆˆ_ˆhä æXæ äˆê;èúÌ€€;(jUqÃZu«\/å«W2AšB Ï¡Óè®H$ ++0­3è­ˆâè ê­4Ñî´ì´æGν´$ª´ÿ((´(´(´(´ì´Yì î´(´òo´ð´`G}½´$Ú´ÿ(,´,´,´,´ð´Yð ò´,´ö£ÚFôµ/ˆ,Ŷ$ʶÿ(0¶0¶ªÛ,0¶ô¶Yô ö¶ ÞÛ ú¶TFø¶ TFÛ ½¶$º¶ÿ(4¶4¶]æ,4¶ø¶Yø ú¶ ‘æ“ü ++HÌðêx2X 2$·"à»?pi%lOÇ=.W²üü§ ++3'ÌðˆØþ ++3% ŠØÖ;À,/à´ /@8 Iuàà‚l1@H]k\BWÓ6¼?82à&ÑoBtžåžåó¬@¬$쿧9 Bq’B ˆ0hB°þþ ï½Îí#ð žÒ ++¸)@{9ì ìW?Á$9@‚DèU÷Ct+à€¬ÉóCòóCqì óCèÙm1„€0h+ÁPúøC(„©?ÈÌ"èçÿ}A€0hçç+ÐîÆ(À ÛÊÀ!À$!À/"àñ† À!ÀpÀññÀ ñŸ&­"î«ÿ…Adˆ0hë(dë©Á¦ÿ}A\€0h¿¿(\ã¼ ++ιÿˆ!`Î`ë`ë`Î ++Î`ë2æØØë \R[QR àè+nÅ9BßäÉùíò.ÌðÂäÒèÐÚÊèÒÆZæÐÒÌèZØÊÌ¿>!Å$×l&l××x#äØã"˜ /–S|Qã¶É'0î“TÄJAšBŒØ }Â}Â}P}}0­UäÒÎÐè"£x£)àM$oojntj?(]âÍœM¢ÎÝÍ M.`pm4ãû7ÌðhÊA2gÊ2/t…‡Î"À~ŠÎ¢tè ’Í9Ìð…Î"î€Î¢på|Ü`a¨Ø‚Îé‚Î î_ªBŒb 0Î 0Î ‰Z¢B‰0@ÆÞàòuÐ7€ }” ++I ++†81ã8’t‡\1*Ô40C1»G¤ ã3 á0àá»Z\Rã ?@Žá°&"–7  (0 i_‹%0 ¨;U\?B\?3ã4î%t;&úµK©J/ àt?ì9+™> „†r”à@B^¨:,</y,<«ä>¤ 5êk:G8¦9(X¢9 ++ ++(£9 H bÚÞÈêØÞÕÛ5ˆ j`M?0"/0/+0 SEª BÚ@„/3~Tãúÿÿºû>?š¥? ?™?ò?Hˆ???Ob? 2ÚÒÜ<gÙ2 H f.#9@×%ö0Tcšªæ;‚Tu8Õ™@o¶Æ”0^1dªª¤À N:$ h?G!" ˜, ñ3^ã' ++ ++ažåàžÏ ´`^áôÿÿª À!õàõ/aõ0àšå0Ï#h2ª  (è 0' f? !X P Ú"® $ 1$C"ÂðC&C/ÂðCÚCŒÚCÚCÚCàÚCº$$C 0' C$C&C$g#¶ÌðÜÊÎÂèÒìÊ<_g  g  H_ªc l’Bð „MàÞæÒ„„ ++Ú„"ì„Ü   ++ºŠ"øŠ  ++ÊŠ"ôú 2(ªYWZ|ÌØÞi+0 Ž–ÞÒ‹‘‹‘ÿBá á0„âêîÈ‹¸î‹ƒù’Cƒ‘/ÊD/(K*DÊÜÎèl58 à àC_ B1Y•Sžª›²¢!S£#8 á@àŽâ ÿ4 á àŽâ!™å0‚à 0Óå@Žà×j3Oú*Þ¤,ÌðÌÒäæèâå,` q’ì]K ý1à ãFpÿÿ’üÿü_ÿ0âB_",.a1$ÒÌö!È Ž2üOă*ÿ¾àá àààfm^I GXº.K.K.üR0ÂSÌÒÊØÈ?8 FKÔ:Ó+åSã*NR@*Sá ÊÄ B!ëBàã"¦ "ààà^ã¿»Fª ¿@ÜÆ0 VæèÂäµý@Òæ@ÎäÊÂèÊä@èÐÂÜ@ÊÜÈÒ86+iý+&(:(rR62 Ø =@ " vª7Tãakß™T %Ns?1^ã=-zu0xW ++@*^÷PÊE9 @GàA21 ã@AâN’Ãà! áNá áîM0à.àõ—»%?pŠáy I='0u Z2(8 Š"2Š (Š2Š2Æ…# ++%Ðvd03âHw_àå65:ºõ4ÆÌØZäÊÂØZàÂäY* ‹ù b ƒ”ƒ1@„ºM‚ ù$™" '¸º48 &v2é6âIÒÚÂÎâ* âsâ’â3 @‚âès ¬¡îê@ ++²68D:ÆT«ÕYØ ÆV«EË"ày›0<w 2S•²0ãSÿNw$$$2žå6/Ë$þ9-/%½CpGTãmó Vðü3Qã 2Q`òü0Qã@ '$$-$“$*$$$$’$tú/0ð/ñÈðH5="/UO&0X$àþK šå•àòõx ++¿ú&—¥( AL#,‰Vºz(è/à@6*ôð–Û'Ý—'}U1Š€Ïn 4ó¥ÏnU   ôAAO·ÿÿ ++)!pNB¼0:0v:>T²b<`B¾jf*(9c ++G ¿Ub¿UI<°6@Ñ­Øe(H*D ZD`^Ý>ÝΩ&@ÝTÝÿÿÿÿ鸤>–>Ý@ݺÝ9ÝG ++Ý9@°6@G¬Øiá>á@á>áBáгqD ˆáÒ³áÿÿËÙkÙXÙU.ˆ!« nµ’nµ!« ¹‚ PE4:L€“åà!à ++U^Cà“å]^. 8!8’8’8Ì,¼ƒ,¼‚,¼ ØÅž ˜d ÈLIO°2&-Q á ªNQ! ++ à‘å0‘{/0ï®b/u’¾NàšåÛ£°ˆ"›b{¯¥v&@Ü&"¿/0V9ÀBòB9D9Â999G ++9D4¯1 ++°(((PøF@u0uY[Ds èFPµ³lØ! P^PÿÿÙ.àC€XâD P ++PÕ1¸2“j.­“jÓõ \¥/\w/ \UÄ®FF\H\Æ\9\G ++\7H ‡ D!P(Er~@u01Y 2Y ++s \J\9³‚Ü!)\Q[{\õgTdTQTPH!0Š“ŽŠ“ H 0Žâä »·&ƒâ&Á<òÿÿàŽâ\Pèÿÿ ++éÙˆˆ*? 0‚\Û\X MŽƒz“€Ñÿÿ ++Òÿÿê¬O ‚âHɤL/0ƒ¨@¾ÿÿ ++xQ4Ü4,Ç,Ä,±,®,œ,™$llTUð’d‘D !Ú•ƒ™Pàô-àŽpP¨ PˆP/àƒ\P/àƒ¬Pà‚â ƒâHɤ?0ƒPH W½'Ã0´Ttˆ P@ÿÿ ++÷3´ø/Ž\¤/ƒÐS†ÿÿ ++”¬ €H‹¤L¨^sÿÿ ++ < v˜4!dHQäNø‚¤<‚\Û\0T'4M¯¬\ òSì— – “fPO 8 \ ++8^ã2TQ GJíh /1h 2T&HÎ! ++ÿ¿¬q qÃA0“ JT@àžåïJT-.¹-JT žJT ¬Æd@‚âp p@£ÿÿ ++xœd¯\¬/‚(QŒÿÿ ++¦0‚â €P ¨_yÿÿ ++“Ô9@V‚ö#1¸¹s)J J/ & (83T A/06'0àåUS!zLÇÓy#ŠL MH‚O N“%“ÆÞÜÔêÎÂèÊ“%:x “%¥Ö4>ˆ y&~ „â 0„®æÚÑV®¦ 2J ++â€Nå 0 /¬ÿÿÒP0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* $0*B   L>@ ãðšå#¯,Ólö,ÆBÄ I¸  L$à™åZáŽ*€Xâ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ö  Jâ`EâP…â,à™å^ád:àHçà†å@†å  á0 8Q8ø †å ƒâ`‚åã ++,°™å Uá?*°Kâ,°‰å ‹å<O àƒåÜ!/EÜ Ü$ ++Ü/øÜ lD Dà‚åHàH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆpX@(/øýàÈ°˜€hP8 /ðüØÀ¨x`H0Hïûÿêlo3ÿ/áÜû@¹¨@@•ûÿê &À @ÿ/á*UrHð/kûÿê~j PÆæRÚÂØØÞÆ HÌÞäÊÒÎÜZÊÜèäòXB$8B ð àšˆTãð à‰å4€‰å(P‰å ‰å@ á0—årü 4€™å(P™å ™å@ áâàã^á*žVPA áüV âôR ++ˆBD8BL0¶ʺ@B p »'»0  áUp ++ÍñRãÚ áp—i9ð—™© ¡™ŸpŠå Šå ­¢ ­ ß  Jâpšå šåÚûð- ª 6üæ@Òæ@ÜÞè@Â@àÞæÒèÒìÊ@ÌÒðÜêÚ ++HÞÞàæXBb8r(* xB0 õ†ÌäÊÊ ã ++ã+à?@ áä ŸãDì& ä_ áòà1Z ++à380à4 Ƕßy ø ¹XÞ†âEâð ++àâ^ãà’å?0âSã$öÞ‘¾€Tã ++PàšåpžJ&¿?àâ&^ãðÿÿ "/1 Üÿÿ ++ÖÿÿêDuDª½Ð ++ÿÿÿþŸ &¤ó$P  4ÒÜìÂØÒÈ@¶ð@ÂÈÈäÊææ@üæP‘9*9!PÄh ÄDüøäÊÌ BJ 5ˆ  ôTãJ° á0 áp áZ"?Zy* ++pŠŸP  áGÏ°Šå0Šå pŠå+PÖÑÖ°šå0šå pšå 0`&Rã ø’åžå Qá ++ ’å÷ÿÿê^ã à á8Œ^áï ++€@ á‹1 áG! áÖÿ :@ áàƒà‹žíà ãà„à‹ŽíÎ ++.óÿ>P0 áç „„„„šžíÉŠ·îˆ òˆæˆ@ xŒŒ¿A áÒà”áA á÷HOàÔçH1ò4²H¨DÿG1 á³à”á0„àÒ0Óá8 áàƒXòX O0ÓåX!ø \ð@”ça áFa áT@/Xîll l´hïh,,@à”ç,`Ô ÓáÎ? Rp0P0Sæ h@ á ‰ì°4 „0ÓåSã€`"àãR@*x0xØè ôpO´0ÓáI €p "Dá4q@žç0Ž€ àŽàÖàÞáè@ŽáÄï Rá± ++±á áN1 áS"@|_à á☘˜AàÞå˜bàŽá^(2(S _*à‰å,ä_˜ ãG@“× j >3l ++H€ ãÄZw kYÌ4 áÌ$$ $ˆà€áã¨L áH´x ìn2ÿ/áÇÿ:ļÿÿê ã áô/ ¼*I ðì_ šå¤”^”F”D”=6 Àœ%/õ œÊ½$/Ù ++¥°”°Hø¿á áã á@ŽâPõPP ””h\úxíÔp 0!Tø¬´ô€éÓ  b"× ô€ àžåüüÿê( O÷üÿê” /! ” .ÁüT.ºüÛ ð®šXBH —˜ ÆÐÊÆÖZÂäÎæ e ±ŠåŠå Š¡U €] ++àšåY" 1à€@3 5àž„9ý )á¢láä" øl1àŽå#øPžàõ±1㜠ΘOÕ”/1”H· ++E`&Sã°|Ò“åžåšåP C0“åö @¥PQáDP .ä„*X&D"A**# jdEy ++%yà ãàŠä[ àŠåL šå)0?ëÿÿœᜀÚÿÿ ++×ÿÿê”O áD +%ô@ á­!xl/½x‡/Yx//x.h.¨H.èˆ(.Èh.¨H.èˆ/(o/a¤‡/ý¤//A¤.jŒDZ±ßR*  ãšå- i|½|À=/!À Àh/½À Ñ §­ ++”ðÉ ˜)/U ˜O/¹ ˜‡/U ++˜l)/Á ++lO/% l‡/Á l'l/- lO/‘ l  lh/- lW/™ lO/ý l‡/™l'l/lO/il lh/lW/qlO/Õl‡/ql'l/ÝlO/Al lh/ÝlW/IlO/­l‡/Il'l/µlO/l lh/µlW/!lO/…l‡/!Ì W/lO/ñÌ ‡/lW/ùlO/]l‡/ùl'l/elO/Él  lh/elW/ÑlO/5l‡/Ñl'l/=lO/¡l lh/=lW/©lO/ l‡/©W/ lO/y ‡/!èW/!lO/å!è‡/"ØW/í"lO/Q#؇/í#lb žåX÷$OS÷ÿꤤ?ñÿÿd#/•$d#fÞÿÿ ++%÷œL.á$ôP.÷öЬ3øøô$ /‘%üÝÿÿ ++ÁöÿêDÕD¨’öÿê‚ÚÁ3¸ð(L&àèäæÆÐÊÚÊZÞÄÔÊÆèÒÐÒÜèÊÎÊäZfdê²êÜæÒÎÜÊÈ€ ++ìÞÒÈTP”ÒÜè#1 † ++æÐÞäè&bebl) (l!QØÞÜÎbU ++&*Yilh$.$,]%ÁîÆÐÂä¾è0 ++ ’ æÒôʾµ#æ €ƒàèäÈÒÌÌñ ++ÌØÞÂèæÒÜÎØÊZA¢ÈÞêÄØÊ ++ô Lx((( ²vp¨0¯”@ ($ n5QÊÌÌÊÆ78ƒ5@PV@ü‰5R5Ð@üæZÄòèÊ@èòàÊž5S Hž50ž5.cU "‚_"($I¦&(((F„gdh(Dp¦((B)gh`(@)>!Xp(6>*,>**>*8>*:>*<>*>>*@>*B>*>*>*D>*F>*(>*&>*>*>*>?P F™ D#<`Q80 $??d8 $cu< u< ò—ÂH82J(Lpna ++°BP¹y80 ++¸1 ++h ++5(" ++& ++( ++3F ++ˆ ++D ++ ++@LP( ++pç@# ++8Bl%H u@ ++ BL > < 7: ++Ø W08 ++¸ Â0*ÀNÂæÐÌ0d ++Œ?68 ++(¡ThB,x!,¼_DHN=8763. ++x ++0÷H92 ++°?æ0 @^ÆÂÜRØÞÂÈ@ ++0@àÞãuäæ@ÌäÞÚƒ>`ÚÊÚÞäò$±€B`85ZJ±(6APr>P†@AæÊèBs>yR ‘ 1PTãü³/DŠå1%0š/("ðx>"ß1*à|>ë/o šå 0Ç xt>Ç . 0l>#Ãl> c0% ’c0¸° c0=Pá¦c0 Páïqàâ^`31@š B l3Ô Ná á  ã0l>$“íà=ã x2ñ@àë+Š 3?K ¤$¤¤ ++¤q›“íÉ‹·î¨Š¨ð¨<"l9!Hãìƒâ ^ã*C1¤4! á¼Ô550Äç  p6÷ é_èƒâ O²0„á õ% ,9aäƒâÔ*ÔP! áCát@@„á.èèo„ààÃåÔ¬è[¬wF7/7@“å? 71Rã:$ ++×Eô.ô´G ++ø8„C¤„¤ ++pCë$,÷?íÿÿø"/yøAÙÿÿ ++FO„X/„ã/ý„¦„z„…„$/‰ Œ*b*_à=Lh0@à„C„!œœ8œS „ç >˜>`& g0 ü ;= S@žâ ++0?8—%ošå0aL+© ++aL0aLḠp £°l/­ °u°\/9 °{/É °{/Y °[/É °/]°w/é°{/y°+X °+/ °[/y°/ °w/™°{/)°{/¹°[/)°/½°ã°·°°$/IŒŸ°‰°€°u°Œ´ ´Ý””üÿààNxqÈBÈ?È<@· „áŒÀ</e<œ </õ< `Âœ" 0ðI/p | |—!#psU ¤…¤y¤Ítf¤l/a¤8¤\/í¤/¤s/ ¤{/™¤O/ý¤_/q¤/¤°¤„¤¤$‘Œlû[_ áà`áP¸RÐX7X4ä-äO „ç(((E›F ÄÍ 1Ú,Í,$/),µ§Øl/ÝØkØ\/iØ;/¹Ø×/¥ØG/ ØŸ/µ ØØÄCÄ%T<×&ÿàâ^ã€d@Zbª#ãY°Ä°V)°/#C‡ ¼ [Û0dã¸I„àX¸ƒKLUCžåE¯0O@÷ÿê<.ñ#<.÷è. ÷*¥BxV ++þ‡dHó( X<ÄÒèîÒæÊZÂäÒèÐÚÊèÒÆZæÐÒÌèZäÒÎÐèÂ&˜'_(,®(‡]g%`t“{Z ++•]@xV‹/Xk**Ze®>x\ ++ÿûp1|^ ++Ü_<x\Ü>^e¯:x` ++ÿݨq/¸{ ƒ(/ ++0Œ}b ++ ù_8x`ˆX*b€¯*xd ++ÿ‹)g ++˜aPa/ ++Š ++f~f ++_,xdtC*fk?6 ++ˆh?. ++À?0 ++¨1\02 ++ N* ++ `N*]æèÞäÊO*OÒÜèÞO*pO*núR ++ O*¤(HÌÒØèÊäZ<*xU*_ È ájÎ( EZ# EZe žåRAZNhÆ^@ @žåN\ÉiyRL˜+BhHá5rih à pi µœ ( áœò&Pã­ ++0åp“åW¦#¦ŠSã£08@SáXbB|^1@‘ç\ \'/B1ðh?àðh Àó„NSá\ Èh\Èh`ò`Ü6Þà‘g$OàÑç$ þH¾$ð~³à‘á0h4ìg4 ÔÈg H H¤gä@à‘çÀ€g. `¤àààÞå0e¸)ô¸LO´àÞá¸1¸C@‘çXÀÖl/ ƒèf+ pp¨AO “åHKžH2`‘`„ d , ¨äcÜ(Àc#,`F®Zþÿê0 ãUþ.3TZ!41@­ P•;# ++˜ ++ñ ++ H"H&H(HFhDhþ2@ë3P?308B6!Hß3xŸ3E8><3: ++¸38 ++˜*(,(“6H.X0bSH2 ++vhü )Pþj HæîÂàZ=Ð ÓË Á ++¨@‘ç4O¿æ|°°8€>ï¿æà„å¬ O ++à„å.À d d$‘ç`$î$H$O¾ïÿæ( ¾(¿(ða à±àÒ,>Ó0‘08O0Ñç8  8) L<%ÌSvø?Ó ‘ˆ:q0à@“å°?àÑçü1ÀÀó ‘á²/ÿæÄ9ÄÄ`È1Èaàà@ž`˜\?x Ø°=° ‘ç2/¿°FtØ°1t>dxÔ|*p€b<€7€ ++UH ++ €¸€õP(PFpDp ++p€X€ €€€¨€ˆ€È€¨€¨€ˆ€P€X€˜vj€4lh~;yn E  ~;"Mzòyž †ûB ++å°‘å[†ŒQã8†Q’vá}0Žâ::0 ƒåilþH„H„/0‹~60 "CQálú ã ‚à‹’íàƒJ; 44#›’Ú:ƒÚ: 8’>oOàÃç(9O²àƒá(- 0 á,1±àƒÖ7:0ƒÖ740Æ CãÚG/ƒçÀF=HE:j .Ùx.˜.±I /ƒçXÊ"ž<</"C</Æ7Rã ÆPšñº$î?"Zî?E<2!+(2!#œ"u$/%>tdd_à‡âN õ6! NYMÎtµ˜68L/L¦°ŸPŒa/±Œ{/AŒ7/Œ'qŒ\ŒBŒ:Œ / ´ F+’á á‡âA@"+µtZ{\ ‡âB >!Àè )Òy©èuLèˆèp/) ++è_/ ++è_/ è7/] è'Sè>è$è\4/ pp T ++ pÞp / $ÇpÍL­p¦pl/} p_/ñ p7/=p›/ípPp2/ap7/­p›/]p_/Ñp7/p€ ‘åÅûÿê0.Àûb2Þrbâ÷¬0hp P"P\ÜÇN ++9Rø1>(ÿRAS8]U,hüMxà#l¨# ++UXˆo%`x$`x$!`’#bn ++0yP7)27ç% ++/ ++P;/';&.-Ò­1 ++/3²1/9’1/?r1$ER1)HÔ4pß$YÞR; 0 ú$¿Û þ$·þ$mžåQþ$­*àò£!^ð° 8$$ $$$$$ Ü\PÊW^üƒ"Pÿ°.K®'8ð888 8"8&8(8F8àP8è@8@Ü@8<Ð08hQ*8,¸ü8.80828p BÀ‘ƒ“æàÊÆÒÌÒÊäÇ‘ ++¹p6Ææìnt¸!äÈÆ(³ZÈÊæÆäÒàèÞäð?ø , ÷÷¾“ák 0N„SÑSàžåÇO@’åk! [Oº*nV&0ç3rB5äèÈóçr/rÑ3v ½àäÊÈÒÆÂè¹*x  à]à~“Tà C-•~5ø©à˜q2aÐ$ ++à’åã&7*î2à„å „å¶*D1¤ ì ™• ¬f3¥6š‚.Ý~Ô¿pB ˆt Î ++`UU—å0žV0åHð ‚0ªX0PXk:øt``  t9R. 0P$ # ++H$=úÿÿ˜˜&™Ž(v Dþ`²–x÷-´zHäÊÚÂÖʈ| ¸  PTã0@%é0 áp á!à“åü ™r €Rá%º ² î/ ã5@žåP ++ DåX!‘< 1@‘V‚ —fUŠå ŠÚÿÂì:"0@9Æ<R°?ápšåà“å àŠåà“YPà“å<Çà“åàŠå`Eâ’*Ç®­¹à†åà†â à†Ø6‘à†åà†âûšåà†å&à ãà†å áê¬ê’i‚å @‚j@ ãðH( ŠâGhç™@ôI"(OføšP‘(š ƒŠå$Šå(ZT7‹ à˜0^ã.0 ã1žA_0Šå4Ê’ü?a4#4\L0šåäbäpÔ7à‡å 0‡åÌO á0‚’øÅ0c 0ÔPàšå0à ñšå4àŠåàšå8àŠå(àšÈ±<àŠå àšå@àŠ€1DàŠ 'jHàŠåL@ïhAžå·iO šå(ô ôˆ&Ut(°ì"ìº1å ü”} àå@Œ ^ žå@®Sjª+íª/@š*×<<—0 ã@1<@yÿÿ ++°"?&îOœ DMX2Þ°è¨/­¨Xú¬"Ï@ ãðþÿê ãØ´"ð<rÂäÚfdØÊH ¢ÌÂÒØÊÈ@ÂææÊäèÒÞÜ@PjñPÊâ~@ÖÊò@PÚÂÆÐÒÜʨðRRR@Âè@ØÒÜÊ@hjrX@‡ec@br@ÞÌšu\ææ&N`ZìÒÞØ ++mð¨8” ++²ÌÒÊØÈZÈÊÆØæúòˆ†ÒÚÚêèÂÄØÊ0˜zhê|¨ÞØÒæèZèÂÒØ2òB~ ðˆ ÌÃã1 Š_&…3&w ^NC=Ã!—Ÿ]/på*…ñD 5 —DHp á{Ÿ8½8ÓC<0Žâ´Úk@ß’ v;% [o„å 0„åÕ/pÙ.m°²í«Ó?hÂô4èã‚ÂÆÆÊææÞä´!pxÀu¦;ÀBò~ÀË‚ ++–HL³8˜ ++ÂààØò( ”@B€ ºµ&°A€XâP¯—å—å —å5¢ò yö ++OpšåçÞ ózšHæàêèàäÞàÕbC ++€JŸH ++ž$ÈÒæàZÍ6ëäêàèæ ++ "ÊÜõ 0¢ÈòÜÂÚÒÆZîÒÜÈXò| ++ cPÕ7)H or| ++(2„ õ °- $ rrT ++C" " šaWP ++ ++¢_0ŠåžÄ^XNS Jâ2A. ++šåLÕL íoåo’Æ?òB. šêX 2? @4ìžä.¹äŸ"˜²æ ++CÀ0"0àpDm’Œ$À? ŠåxZ x@ ÀD¸ý¸½¼ŠQS4Ê‚µP@Œ ++˜À ðX²(Bª P Úäè¥` L$Šåœ¤M #!šýe 1^›"‘à’å^ãiawâ^ãfH¥W£!àicS¬ŽKÃ4ƒP!¥ .£2‘åo# ++0w£&ËPãàŽãQœ÷>e ÷ "К ++1š~EcŠå0!àŠq Ñ ÷.$kA0 ã¡ pà ãÒÿÿêœ# ‰—¤ÛnØ•œ5 š€9Fp87y—; €j€S€0RãO½lŒHŒŒ ã%"Œ@Œ1àŽÝ0  3Pã4,§œ L/áL")NÜ ÓÜuà@Ûÿÿ,ÙJ10 ã{C ã¸ü®ü /‘ü –üo!ó&ª®æèäÒÜÎZ|æòÚÄÞs ++ðh„ B” - HßßP(Šå,£`m ++"µ@¤ ++ÿÛ" Z6 ’ÑVãŽ,àšå@ž6…Ošå0£jt¥ ! ++±l:0 á @ƒ‚[àƒåØÛ^:0†åà ãÌ ¼ 1à†Hü4`ŠåàŒ<& ã41€ ++8›ƒåàƒâ àƒ8qƒåàƒâ 8ƒ8 ƒå Îㆠ"< @ °ðX/Ì„Qšå @šUÜKQp PâIjlhJWu5¥hÞdË1à„üm0”àø[ªX€žàjH  Xk+ k0 á"éÿ>/  j¬M@ú5z .儈 ¡± ð Š^n¢ ++YÔãÎ @¨,¤ V9L,Ä,´^/Þï¶/(„€ _ø ¹€ôN1 á -h /!hOÒþÿêp d_…hQ(@Šå±Î/šål¼ \øõÔJ¯t;šåŽ¢8?Šcˆ\‘UN5G@u92Ä+$•–¥™µœ/úýÀó/ìýü/åýÀÞ8× ÐýZ /šåR¯"Ô xí:t"p& @Á ++Šœ !à—ä 0Š&!à / ?À™ÄO  á‰Œ" ‘Nt¤@TãzD´#pàB4À á¨o|ýÿê4à`¢¿ ++pSZžöej4夔W”$”¹” 2” Ì|/5 ||0)ÁŒ /ðüŒC/M ŒÍŒ Þ O³üÿê¶$ „*Ñ §".Ÿü&ò ++˜üÿê¬B xÎÆÈõ  ŠØBÌØÈ péXx ++%ðÑX&P fXB08a"!€"x4HYxW4 N3¨"/Xè/D@d55HŒó+78ŽÔÁ_# ++ 0(X+JŠ YH†B´¢’ ¸ ædU›ehq0û( Sã{`Û0žå0âSã ñX·&ÊÓ‚§ Ç ++A#ªAY ++)H#,¯PM°“å)H Sãã*0«Áÿ8G’åoƒø4RS+20n à*P á$õ° ýû4"Ûÿ3J"Öÿ ++# à‹„ë'8­B “+"pBç·T1’—2ŽGõ$Lp. "&(FDB@><:8*,6.02îŽòB  à æfîI"0ú©ªq%ઙIapå °ô–ö!æ¸ ++1›Ú&ë“ë“ àÌg3^ãï (ï yo@` ++Tb‡^°Šåpv8–î " 0†S°šå¢ê[¨~PØ_ºà›åØD)¹? ž ++` ÌOŠå E"üì"  ÈZ. ã( /  Ãÿÿ ++»ÿÿê¸!/m¸‡ ++Š#€|ed4!ƒ’Ìسì#R°Ž(Ȉ4ÇV‚xÕŠˆˆ'` ò ++@ˆ'"8/#@7b8Bp<4z’±F8-rÂC¶+”XB’8/š!P'1’ñŽ.3ª$5Â0(!@¢b7ºŠ ++z)ú J”âêÞèÒÊÜèXf`¦0 ++–8˜‡)hœ ‡)+ ++7¼)))åÝ&° ++j¦ ++TäèÈŠ`š)3œ)ó8 ++ž ++ 0¢X¢”!°€ª”@ 5”RÊäÊÜèsùæ(¤ @ÒÜÆÞÚàÂèÒÄØÊŸ2qüæ@Z@üÂ|6ð >Z;A(¤70 XGØÂÎæ(üTÒØÒèò ¿0 (È© àÂR$PÄÂæÊ@ 3D¦ Ò&&¸^pJ - Œ0 :” x*B8¨C 3h FÍa ÊðèÊÜÈ@æÊÂx. ++2% É3#-ˆ1(xABªËŒÑT„ , DZÒÊD¬›'#® ++’P„(B”Ø%:Q Q*S Ï'”O0„‹4ÂHŠ°‹4%xÉ 0h²Šªy Ö4XKB °Æ+À+?"H¿+~´  H 0€˜§¢ . D⤠})#sÍ+r[cF¾Ošå OÁ+Ïxæ&9Ë!8PÙP$ ,D.DØ/ šå+J4 Êš S  S.Žÿ… S"„Aõ„P•à*ù(3„à `Ó&q†âVá á9‘†åÀŠâàœ @ÀŒâ¨ `Åãf€æ´*Y+H ++0>1ª³<á¬0B 2´20 ++æ jf8… ƒ= ¼¹;/€ ) ++2…Ñ2T ,#:¹F¹Ê&0¾-;±&v/_ Šå$ã)"üØ 3)‡0šå šå$cÑ.Ç) OÖ. ˜É ÅZ¾ÕÕÕÕŸÕ5Ò\@@Bºg1@ Úu: âb(Šå,’8"p–8&$à‹±Ú B'j hS°/„^†%ò "¸ÉÃÚˆòjÌ1‚ xZœª Lª —I ®à ;Îãn'S<:PJ*T p†å€0p áÔÄ’ o˜U¸¬ r" F$(y-`’åÆ ++¬H#3PãT Ü-i,Ã@Õ,Z!¸,3Ötî®$è¹,ݦÝ,$èÔT^ ,(Î$o X˜P/íPO ++Æ Ý5"ò"Â8B¸ ˆ˜>@à—åt*É7®Jð@ ++ à—åàŽâ žç+1F’DÈ ø' úA[Sã! (< )l&˜=­7Óz4é7L(±7±7' ­7 "W E Ù ++_Öt'®J Ô®JPʶN&ÈX/0Œ ++Å ++f¸ ++(Û7søB” ++PD.DdìÊÆèÞäÌ48 6êÒÈ"é p/8 8 s`8 òºNI4( &/ ++,oR¼ ++0éO¾6ê À È ( %¢ &2C]"•" pÜÉC5"1®ñ˜%* |1#"O5í?"$0ö # p• [àÉ%]>"$0F ²"¹ÓRÛ2¾0 2ºh”:ªÀ¥8#‚¶E? 0C¶BŽÐ¾B]¼o9²Ø2¸~ÊT`Ä $ ¼^eöö|F|F ++˜”954 R1!0@ ++2’å2e0 ++øø øõ4¸¸ ++Î hÈhà&L^h^h"Ÿ ++Ú²ˆÂDð™ jäläæt™_ Ä1ÕDÂ8Æ$Ë£$È / š¥WÉG1û ÉG8ÖáH=G6éxÏsÈ:5š?8Æ FHêÈ•*›@4˜ʘ\xÎ ˜H˜?˜.˜8=;»0!@+ P•,ø@,ÌÐD! IÁк šìm¬`ÌgæOZÊæ±ÞÐi/ÎW_W’ÌW!ÐW.WH9ˆÒñš_!š‘+¬!Ò¬HÔ_"êÒ'KÖ¦ £ÿ/Ô‘!Ö=/GæœØœ_8Ü .&¦@¦7)¦5z ++’¢¿A¾>.ɾ¾¾0 ++6@ 7A2 @y Û b°oT Ú‡Â?ØÂÚøà96 ܨmßdƒ@ß5¥#S’å›Bd: ¦k&ë Íý¢&ÅMÌ:Ú0Ø dO áÕÌKê<8“?µ“œ“•““P“#®Th@"Z|UDXÞ]/ÚšO‚àš¨šâ’/ .åKÿ"(8þ×1 à¾&í<-¥Q ++aó 0„åà„â à„å „åà„âà„å„UA„b0Iå¼äùJSj† ++¨ºS8¶ !â¾Nä4HebÞÌÌæÊè-æ›'.ÿ3./äü!æü8è&ÔaÞàÂâêÊÚ êõ/0 ·?î6î%î8Y8 ïÖ ++AýŒÊêÃÖ ++ ?`è­?ê­ì­ $­î­ ­c­¢ì­!î­ðº`ÎÊÜÊäÂ(´±ò±$beµ¢ðµ!òµ!ôœ <?ð *ˆSêZj” P-ŸZ• Q/0.S LO, áL[/nš/ÙnšÓ\Ì{OŠøŸ!öG'Ô@ ÌÒÜÈZÌØÈUV&0&&Š„[ É É V^< r!PaH“å`XÉXäëø \p@žå ”åÈ\:"ÔG!@žylà¤X9L\" ×Pê~ðHœ– ˆG Š!`Rãºüd0x”  îªN<d]pTÞuôÞV<ÞuéÞ=:ë°ë/ÞY|žEÈî8 -hŸþ1¨þ*Üu¢ŸÜE,ºwžºL6ß oÈ } `.XBþ³س4³H.»I/˜H/áW;OšåÍ ++90òüQ©b hX 9;ÚþÂ0&/'î0'+(2((î2((nRÛDÊ ++($%&21!n"n" h"î0R"‘ ++  P |:X" lX"@LT3ã@`!@>ºä}d!Ô/ ++x/1x/€y.ñÆ_„È!e ü/Éà!pà!^zûp1&¨Å/ŠX@ Do!_ÒÜÈÊð™! ™!>[ J ++š!‡ B PP.2+zìNèW0b(? ("\&;® ‡6\" (Ž/p"0žjÙt}Al héhÏÈw‡6_Š*#RöÔ±!8#`4 %8#4Ú 8#Á( 0xroSãB ++H#9H# /H#`\\ D „å` ó0ñ`ÿÿÿÿÿÿÿ‡œ#aÎœ#ÉØq/Šˆ 9”zÄ#m° µ ++/æK‰e1 u0 žå8[ÅI6~1 ’ ++V~ÚK› ++00—åGÄ 0ƒâ0Žà5©5©3 š1êü#³?¬0 $fÀ1êL !JQ!‘QK‰JÝ©9àŽÝ©Ó}p× Ý‘O¨^Âò‘) ++@R$9È525` 5Þª9Š9=O° ¸0X?Da<‚â )q*°cˆ¥œ?0Îç ;  " ÷& w^8‚â O²0Žá R( ÷F Ð 3 \dha4‚â|*G¯ÿ1 á±0Žá#8 áàŽà0Îå;¸Dÿ=i  šºô'" ç‰+ç‰ ?iQø]Ö19=ŒÎR|ù¤V(TB±â£Ï/ƒç*­ ¦¸/±¸aP¬Ï1Ýÿÿ((,/!( ôh´0;TuTÓH¶UHïø%¶IÇË`ìsz`ŸËH†h`h[ öööÿÿ¯ö öBöi  Pöƒ„Q¦²Y'²Y1?þ) Î ++ÆYp 5–" pœ?& Øn/\° ¾î@?0âar?ðÿÿÌ*/ÅÌ PØÿÿ ++Ë„nT/Tš§ü€V›¡û3lH(Ð -@ÿÿ=@>ÿÿ.\>^< ÿÿ=< :"ÿÿ.`:b"8$ÿÿ=8$*&ÿÿ.d*f&,(ÿÿ=,(6k Š-k\¹Ð—Ž—<ˆS.Œi* ¨NŒ7ŒP—ÿ0âSã6_¿èT%O ª(M¸E ´¸¸9x.©![¢*›S8,›€›I›2›X‡y1‡¹‡?P0‡Kz,‡²8.À®‡9‡D€Xâ#ƒ&(H.w wÚˆ/û 6Úˆ_šåÈÇ81úü‹3(l=ú.0Ç8BX 6Þ4 üæž°Ð4V°ê8Oê0ê832L3 ’46’4 Œ4þ02v4& ++w4264z66:6[e…y^ 8o:?¨ 0&.x:$x:Âh uÂhg^*÷µT:Üö7Õ\OŠ÷!8é5T8hO‚8h§±!e:e^> *&eZ ÄreXO<÷eû d:d24ÊV<8õ@d3Pz$Úÿ¾Ç _àÀ #NU¥ ¡ L…;¹j8îÚL½Lú) ! ++ñD ’G .U˜´k­Ç­B@P P0B*¯H 0HäÆÈZ|±/0‚S p“åAi—pö¾Eˆ…DWã£NC åçÞ ++: ++{¨1Œ° †å 0†å@†{ ++á£À VxsIu0‚ «+,`²Bç½ =XPèP Cp áµ®!¿® ãÞ0 àãǃ–Rk]™;pB«ÉL8L8 L8L8L8L8¥=_0„å p¥=ÌÇ­ã" ÷o°Šå 0ˆƒ.C°šå 7L à—å  áõJ XOp á\ /M\a&TãÐÐãÀ" 0_Ž/à ++ tͶ ++ûh"@7Ô½ Ì0p†åuº08x 0Ã0†å †åp†åÄÀ ¼ð HÝì=A ^ãÙ?­µ 8€§¯ÑSøP#½P P$©PS` ã¢ t`yŽ>žå@hˆÚ•§;@\0w\ \0`\\0I\\02\Ü+0·ÜQlUB5K lt @°†å›² 5  à›„ ™—ÿ †å†å°†åp†åUŒïü|M6| |P||P/øý||PÙ||Pº||P›| |P||$|P]|l"Vý"TýO™ô ++3 ’åUBRã)ýÍU /ý° .åü<ÞìEV  áT10ƒs;":ü|ØžÊB  R J¥V’K0—å–  ¯JSS ö' ++šŽkÉ×h€F¨R¾ssO„åÔï w¢w°wÚwšÐw/ šÐ{ª{¸{¢{{Í ÿÇô²ÈLT~…²J*pƒø R ++ó‡‡à‡@‡ì¯$ á.Ô °• ‘ò“Ú“ð“Õ˜”b °šåÀ˜ ™˜À˜#°œ@ˆ4™œêœp%T—Mº‚8 ++Ä& +^`"¼Y£ k˜Æ= —h “& ++ `Ê®B®ØGSãâÿØ ·#Ô +^À ++BBüh ++–`T( F¿¨ ääæ`ÜêÚÄÊäœÃÂäÎêÚÊÜèæ@èÞ®"dCêT~%™ŠN þ…P™Šç¿’V ˆÂ"°ûq»‘@ã‹S@—â‰Ü½!àƒt¼VˆÈºžJù3ê\+s€“âjݪ1âÿÿ¢™;!WÕ  WÕ ôB ºl(¶Œ• á“qTåT¶7¯vÈ‚® p¡ à·å· tZÚÖ^Ì/=Ì dS{ÿÿ ++|ÀÑd¡d fƼ/ùÜ\G¸ÚO ‘›åžåƒÌÁ»ðH}º_PÚ š° ",ÿ¾Å ŒP*à‘å_³#HˆûÀ¸E\ˆûŒ¹‘úÞ^´AÀ’ÎÌ`` ›å€"À(hPÿÿê@</À¡ ÀhöhÀ¤ [l‰ˆ l˜ËP  ãb¦òPºÑåÌÉ(/ ( àÔWŒÿÿ ++‡ O3*Ø ‰Øo/õüØ „ÆX(/eX_,ÿÿ ++©T /Å$ ‡ÿÿêBBÜÚd¸pÍQúVIß®ÄF@âV ‚¸¼FZ.2[V' `p`­q("/Ȉ|ppˆpT¢Vö2'%ã('Ðæ&szµ"klZ*`|0åpå`bN:0*Ò âˆ/.`ø×/ ¸H{#?Å <0šå#¸&Â`ÑÌ0'¸Â`jà ¸õ%5 XÞX A"@ay \ò\ÿÿÿÿÿÿÿ7ä6Ø?,]áv`Üñ ˆ «bÒ&+Í &^šå•ýŠ'Žy@¦Ê D¶^ñ^æÒÚàØÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæ*1›XÌÚè%ÌÈI1I1aÌÚè(1ÇZìÂäÒÂÜèP1p\ÈÒ¼2ÒìÊX1C1ZXN W7ZN:\C^Cû ++ üæ L( ÌÞäÚÂè JÎ_“0 HÈÞÌÚèÒ( bFè /fTàŽâ0€¥aJ²¡a¡aP®bØšX¬ß0óêuã 0;aY“íà€;a(m: ’/Êü`à !›“–`”Š”)Ò}`”Д”ö\ì _^ö\4á ácOàÀçŒ'Âþ_Œw&Œè^ŒO³à€áŒ9(ŒxFŒ îŒ]ä]\*${"BáŒÏ.è á0€ààÃå˜'Ú^˜ƒpPB`©ÈÈœr\Ð&uè<¤w5£5)0Z00ZY(¨0,Y¬X•ºµƒ­ Z Z§6´„h (Z(4/jĤ.9¤à Zä Z$/™@Îÿÿ ++-)DÝDÛú/^Ê8èYìšb½–C`PãY8{E{Ò` Ù\LbLÿÿbL bLBLdL(L^¦ÉLË7$JbyT$T)÷IL ö3 çI@5ÒÈ ++ÅC@@ ?óÿÿ´"/I´@ßÿÿ ++Å-DD\ûWÊVüa0B0ŠEYîK2dî@îfîÿ¢@îfî>îhîÿ“\î>î^îhî<îjîÿ¢<îjî:îlîÿ“`î:îbîlî8înîÿ¢8înî*îpîÿ“dî*îfîpî,îrîÿ¢,îrî6 ¸ê ÑV ЀÐ(ª¸Vnt&./ zyjJ«WV!YSÀyS¶ ‚ÊySO šåÐySºBV@¶T[Ât 0 v ?  ÙX NŠÜU cÁ Õ <’0 OšvÂUhx @ !ÁU‡[aUaU4‘aUà@Gr]UK:xOz—à¹ËáOX'²|‹°&Xç/ pñ m1 5O¿`B~  hÞ10•tÞ14SãkÞ1C —å´MåÞ1q—å —:F/0‘ '6Fù2@÷øÝæ1éû÷½08m 'ô ‹1Rã"þ' ++°ÑðƒFF.¾F1^2—‰£ÒP H= ]#ÎIí/ àõà.ÉÿÕ ®F.38Ž.3¤/9¤Xyÿÿê.3CXB+óB~Ò~<ÝRJ~áR/0U3 Š=O[3cxB€ZÍ7ZÕ/0é2(M"Óü10€02à€2Î8—𠉸ÌN9# ç=-Å’(ÐJÉ"*€fP;`Û’xAPhB‚AA;A2AAN$A I‘IåIã5OšåÎIÇI2î‚IêI„I I=I4I!II Q™QãQñQÌQÅQjBJ„Qú ++QP˜B†t_ ++1;O XEUn0 ++ß%UUœ1Ì0Q4Q È0#@šå’“@ @ •@‘ (3Ô,x5¿,x»02a™0†€’† ´’ ‚0 Ï {ˆ À Q G 2 õ' õ¨¡¨,á¨Ò¨=¨¹¨²¨€RZˆ€Ðˆ¨’¨Š¨ШS¨I¨4¨)¨°©°,é°аE°·°°°€bjŠ€7Š°¢°Œ°à°U°K°6°G?+°¸±¸,ñ¸θM¸µ¸®¸€rzŒ€žŒ¸²¸Ž¸ð¸W¸M¸8¸-¸À¹À,ùÀÌÀUÀ³À¬ÀÚ‚ŠŽ€ ++ŽÀÂÀ©¨B  &C]ÀG° áïåRÄn= ++ ts2: †À,ÿéÙ¨òë¤"thà œ9" °-Ú Q¤d$@"qÚ88x<*8w ™PÇØ°0 : m`?0Ô®ç§ØÐJR€Òpb8 ++ ßòßHßPˆB’ß0ß_ßTß?ß 4ߟç¥ç,åç$çÅçuç¬ç¥ç Zb’€âipR’ç ç”ç@çaçVçAç6ç†ï­ï,íï$%ïÃï}ïªï£ï jr”€òjpb”ïï–ïPïcïXïCïy8ï u÷µ÷,õ÷$-÷Á÷…÷¨÷¡÷zïfP–€jpr–÷"÷˜÷`÷e÷Z÷E÷:÷l ÿ½ÿ,ýÿ$5ÿ¿ÿÿ¦ÿŸÿ Š’˜€pi˜ÿ2ÿšÿpÿgÿ\ÿGÿ géÿ Å,/#=½•¤ š¢š€"pÈšBœ€i^I>$ Í, $E»¢› ª²œ€2p'œR©ÀBž  ++˜hPlaç©Á Aÿîßq"° úßìÁ 'ûi£ùßKúßÌÁ @"L<ãŒæb<å88[€Q8¸°ý<çiH ©su0Ÿ˜ý žý PžxJjpºž"j"X"P B "¨"n"c"N" C1* ¥*,å*(!*$Y*¶*±**–*@ @P xZjpÊ *z*¢*¸*p*e*P*E[ 2 ­2,í2()2$a2´2¹2›2”2ƒ¢ƒP¢xjjpÚ¢2Š2¤2 ++æVr2g2R2“ G: µ:,õ:(1:$i:²:Á:™:’:ƤÆ0¤x»|Š¤pê¤:š:¦:Ø:t:i:T:I:Ç ++B½B,ýB(9B$qB°BÉB—BB ¦ 0¦xv;0¦púP¦BªB¨BèBvBkBVB KB JÅJ,/J'AJ$yJ®JÑJ•JŽJL¨LP¨xšjp ++¨JºJªJøJxJmJXJMJ$SRÍR, R(IR$R¬RÙR“RŒRªPªxªjpªRÊRi¬  ++ RzRoRZR(ROR,!Z ÕZ,Z(QZ$‰ZªZáZ‘ZŠZº/10¬€Ä0¬xÇŠ¬p*¬ZÚZ®ZZ|ZqZ\ZQZ4%b Ýb,b(Yb$‘b¨bébbˆbÊ)0®€?0®xÿŠ®p:®bê b!°v=° ++0µ» €©ŒþM51‘  Q*¤!à„å0 gê0„åB£/à&Qíù/m/T4oº †ë ++”^0—å …gpŠå á$4$Š.p…c£/ , ,Ÿ4QM,¢-‚¶ Àˆ©€-°š=T0PãPy0p ã3x²R % ++H‘€å°€å 0€º$½~ ‘@ìÿÿê‚‹º_ll " Åpz` ½·xy~Ö¾$Ð.Ktjœ.ÝÿjKt@ på4z#0÷þ5yÅyÀTÄ= h=pÒB²ê6`– Ja—©€šS a¼{j ++7¾P½… p¯zÙ3¾^¿5b …B²8–PpB´òÎ1´xJ(ôp:/èþþƒà—åà„å/ëo¸  ++€~ â§1—* ~ Úšq žå@Š»h=>(Å>ÕŽTHB¶Ž`¢¸ ++pˆW8xÂA¢¶É((*A2ºä`7P ++X85¼þ2( º8bÄÂ/Þ䚎¾ˆ5°@U)6¾ ++ B×úÆÅ[€ÂZKÀaÍ;—> ++– ¡ˆ°…Ç1/ Á× Çà‰tF0B¼fRf^ PF;6 Rx/¬íDP ++( ++°IÂÄ ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Uè,@ö$B   L0Ÿåê ƒâàø à‚å,°™å Uá€*°Kâ,°‰å ‹å(O àƒåHhH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨ñxÿÿê0BÄÞÞØÊÂÜ~ f%p  mòTãPã ++#ÕÝÀeó ÿ/á’BLPB0 ÜÞèd ` _OW‚WAÊâì¼q è  [üTã€Xâ ++KýŠåŠå  Šâ àâàŠo¢ i Ð  Jâšåšåê[ 0ùbB˜HBb8ê(¯b ÊâêÂرs À ´DQœÀ$à™åZáG*ÈD8 ++€O2. ã¼ q¼PTã# rÊ  ãH&`@Sp–åX€@ ã ð–åHÁ Ï  ã Šâp áb÷ïÿØ *Iˆ¹Œ¯_3ÿ/á² ð ºB 3À àäÊÆÐÊÆÖ~|ñp á0 á@ áWá1 ++àâ^ã<à @7@@ʬ¤,¤¤ò Dâ—å“åpŠå0hÔ@ãÿÿêÀ•Pppšå0šå´P —å Dt  áÖÿÿê(TO@Šå,’ùc'dP @šåÔ$ 4W2ÿ/áÍhP^ãUHƒà—åãR M“J$€®à á Îã qàÎã^á>X& ÜÀ7*à ã šå(2 @0ÚPPõ‡â‘çƒâ‘çGàŠå\ÒŒÿÿê<ñ÷(ø3àšåxo ++àŽâàXTO@Šå\’|Uc+dP@šåÐ`Ç dÂd@¢àâ^ãS€ @ ((W6^ã@®àâ^ãÕ4_^ã—nV^ãYL1àô¨f^ãÔ(—àâ^ã$,,Hèè¿—å“åÿÿêè/áèèˆ tzÌv°°À¼eôP| á á´X ¼+¼8° áÀ9[(€û`EâP…â,à™å^á(:À á@Œåà ã àŒå$$8  á«„à‚åÀ‚åÈ" ÀÀD p á´€@ ãð—å¬*Q´L ÀšåÐO@œåßxÑð/Ñð›`@”ÿÿꬬh `+9h2à á”^”˜/‘Àìˆ5ˆp1".á\` —å"!tsÂãRá'Ô ðàNâ^ã º ‡â’çÏ ++“ ’çQá$  +++]VR0 á]L?0Š:¥:!0š2 ”åRãX"@Q㊩ „â0‚å>ä$r ++?ƒåÜ$òÞ¾.¶|  3Rã(r¶P Žâ|º0 ‹åHìt0ºª0¾® k\ÅÚª"0ÂŒ%5Áÿÿœœºî,õ°1QãBþ "àÆŒ Q¯Žâ å ++(àa ö+Ù²R0šåàe# %0ƒj|O0‹åu® 0 8Pã*  €   pt7 " V/Ò .é$" Z$ª Ü_Ø/0Ü+µÒØ"0ÜHTá'` “å 0hQá!Úü¼ü±àà 0„âàƒþ/òþ(/ëþ(~°ˆq ‹åà€à´ˆЈɈ TˆÔ/ Ö5ùÔ šåuþÿê2;)#®^X ++¸! ++èhua¢ ++ø% Ê.pIê(q‚ ++()0à !`$B‚€!¨’¨ÄC-5PB#øKa Š€ %B.%°.K$:S ++ø '¸B ˆZJZBÊ-XZ 0d“å CàbOp—å, yffLŒ0 ã0Žr ++ñr!r¾„·rHÊB[r9Z r rxh/O!zxD#úxO'’xI+ŠxN-Êx1OxJ5Rx)n%=j_“x äÂÜÈÞÚ!û@B 3ø ++ÌÂæè_ˆpŠå@Bâ» OAO 4‘>ë£S °Šå¥ïß *©©n °šå0‘ï ++tï ++/t_@šå̉ÅëWÿTçOÿLÿ$9&*“4““ô“l áŸø ŸÞ dŸ*yŸd`!À‹lAK=WÓ Ó)+E)à@Ó€4 ++)€ÓC+`'ƒÆ*u¬<8°—)¸/U¸ ` /X— :û¿søG/Mø3/•ø'VøVøH/Eø3/ø?»;ü7%¬/9ôC/‘L7 ++ >«/iø/à_ ü/)—% —¸+< 0/Y ++ÌäÈxtcÈNÈ °. ¼  r0)‹r0ävà‚å À‚8ÀŒ ‡„+½ „v0ÞL¢3ä/= ä`–kl/¥ lC/ý l Ef*r`BP3R¥ &ˆ"êd ++ ++@ ++ 9!² IÂÉ (/²+¢ A&#:œ5@'2k¿¤b8)Ê^ÈB ¬*R" ž§+F¬*" ¬*­¬*:¬*O1’4a5H(AA*9c(XBÍFC2xVª ++xq;RÄÐ<zv;v  È $ˆþ& 0  á´ñ÷0âSã÷0 =R‡œ ó ƒ{40¤‰Ò# ¢#0´€âQãs´! pc&R ++€ `så&Qã)C£ppå÷âˆ=Oõÿÿ ++œÐdX™|h\X×ï !Ô!ˆ3SáÜ!:—à’å^á“S ’åöü ˜ ,%pˆ| ¡<ø (,:4 äó0 &üæ@Òæ@ÜÞè@Â@ß  ++HÞÞàæ0&0ç@ È%/M#raJà ` bX7 "h )0è“æòÚÄÞØç çæS0âæ 0% æSâæ1 æ_âæˆ  æÿ,X $9WÝ_"DÜ Ü0 X6."f„ Ú& ++0P0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Á6,!ÌöêB k8  L0Ÿåê ƒâàø à‚å,°™å Uá•*°Kâ,°‰å ‹å(O àƒåH}H4eH4MH45H4H4H4/íH3ÕH4½H4¥H4H4uH4]H4EH4-H4H4/ýH3åH4ÍH4µH4H4…H4mH4UH4=H4%H4 H4/õH3ÝH4ÅH y>0 ã0Ž\? 0Ž$ü€D4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆpX@(/øýàÈ°˜€hP8 /ðüØÀ¨x3/ëûÓ»£‹s[C+/ûúã˳›ƒkS;# /óùÛë“{ñcùÿê<B ++ÂèÞÚ~ ¸"h  ¼óTãàâ^ã´¼À\ñ ++ÿ/áŠBLPB0  ++ØÒæè_‚   b -à á0fý6Sã# 0å âRãSá ++€Xâ ++ àžå “åñÿÿêàŠå0Šå  Šâ àâàŠ–¢ ô  Jâàšå0šåëÿÿêÖ1&SæÞPþêòBb82˜ DÜêØØh"` Of9‚[SÆÂÂäZ!˜ Y Á så0âëO@žåe œšB¤ {È{È{ {*¨{ÈöÈö {¬{ öÈö ++{*°{6 ++ÆÂí"¸ î} øžƒ$_ºB´ÈÈ :¸ÈÈ *¼ ++È ++:ÀÈ4È4* ÄÈ4 ++:È ++4È4*Ì ++4 :Ð7 ÆÂi#Ø j  ©¹Ó_ÚBÔŸÈŸÈŸ ŸJØŸÈ>È> Ÿ:ÜŸ >È> ++ŸJàŸÈ|È|* Ÿ*äŸÈŸ| ++ŸJèŸ |È|Ÿ:ìŸ >| ŸJðŸÈøÈø; ŸôŸÈŸø ++ŸJøŸÈ>ø:ŸüŸ >ø ŸI.Ÿ øÈø;ŸŸ ++>ø ŸJŸ |ø;Ÿ Ÿ >ø ŸJŸPH™“ZØÊÜÎèÐ(;  1)5äÊÌ1 EèÂÒØ(DÐÊÂÈ y ++ è r  €TãéM ++½_Šåíi퀚åšåêg 0ÝbB  h ’Ñ  á á@ ã§syƒhÇÄ@œTáʳ@@„â0î³ÿ ŠåŠå @ŠåàŠå΢<¥Îð šåšå @šåàšåçT@„â0 á4Qã8 “'^áG”00“å(ð˜"0œ_àŠåœ’|A›'œ"0 [àšåäÝ&` Óp–å@ ã ð–å&eÌ 4 |0dfB"ab òš@2 üæ@Òæ@ÆÒäÆêØÂä ++HÞÞàæP .ÐÜÞè@Â@àäÞàÊä@–H8P!HcXê ++(×! oc ð Érii×u¢qqémÁ ++b B@´:ú‹!´u € l ð‰p á0 á㉚öSㇺúSã…Ê  áàcòxRã:Ú]¢! B¢UpU ¢¹¢p]& ¢&Ù\&D{¸ VV44Š9R ü ü ++œata0ïàâ^ãÂÁà“åàâ^ã¾&3ãÉTðºº$à™åZá²*,æŸ ++ áàãp} t0|+á˜4  á, °) á|xÏBOð ++ á@ ãTãp Jâ° á¶,0P¿A ›I (±>ƒáN±Sà%j0ŽˆLÿ0žàj á  áÀ ñ¸q Jâ@”|o á°x  x8`šåßÿÿê¤Êk`}ÊLÂÅÀ[°^?wïO°x +QpN› 0P2ÿ/áGؤ”å”°O ãH/-HŸTãÌÿÿ ++BdJšòŠP HÒÜÈÊð@yòÞêè@ÞÌ@äÂÜÎÊ@ÌÞ}@üæ 02! ˜ Hõè$ÚÒÜXB$hB P ÌðZ? !v ++ààÀD>Ú°4Ö 0žåÌ‘*ÚQá!Ð9 < Ða‘å “ø ++¯0Šå Šå X&¡XHÛ0šå šå šåè(Ï`šåðå Bâ!O áBÐðZ0 ++ÊääÞä8 ++ÆòÆØÊ8ÞÖÂò088 þÀXP B‰5˜ †Z; 4@ áIÓ%aà ã 0”øp0 ++S×A ++àŽN @øÿÿê2 ¬"@;  ‰C ¸x@šå^ãýqàNâ @”h`àt,R@šåàýp#@X 0ð+5x@` " 0ð¹X''ð3ÿ/á°ÿÿêÊäÊÚÂrä ++Á€B`8âh Á‚ ++8B(8"CHB, B`B0 iY ++AHHKPº ++ 0((#H& Xîg ñ Ü@ÊðÂÆè@ÜÞÜÜÊÎÂèÒìÊ@ÒÜèÊÎÊäQhc“âXB*Š8¶ ++ ¶ ++"¶ ++& · ++y· ++‡c…· ++ƒ· ++³ ++€@ á^ãZ÷B â· ++Ž ”å· ++’· ++_àŠå · ++(Tàšå · ++R ++`Tt^å 5àò" “”¯ ++_´¯ ++°¯ ++»L¬¯ ++¤¯ ++‘¯ ++(Ù¯ ++<)¯ ++b¯ ++@¯ ++‰4Ÿ ++Ÿ ++Ÿ ++Ÿ ++Ÿ ++€ ¤w ++@w ++/ñw ++@òw ++@w ++=w ++9Ï€x_iw ++,ã \w ++UOØ w ++%¥w ++4/íw ++ w ++bw ++W"P ¸ 9 ++ˆ5è$L ++8 z"Ö0ˆB8P 85:"8#& ++?b" ++( ++,î'&à  ++5ŠWA€Xâ!ž1ãÂREþº`EâP…â,à™å^á:p á ‡å ‡åº mòV·è M  ÌúóÒB*  Ð< ÇPQã‚àðaô(àø(@ ++(0à—åè(Ì/—å 4 ++ ++H5H ˆ“Ô@Aâ€)Ü*@ÉÿÿêÐ+ýЕG`EâÒÒ0@ á+ ++`à„åà„ôrà„å0„ƒ ,äSpŠå« ++à ‰§ ++Spšå§ ++ËŒÄpPtb&ö)ä DP0„å&“ à4õÔhW0²(l(l ¸9 ++ˆBPXra** ++0rH5 ++À/ (¤ ÒÜìÂØÒÈ@ì &X„:â,'Á0ØÂæèZàÂÒ¢ .&@ 6Aª_ 1lpà á@ á1¤ *pa@“å$È,Ë È,ñyàD ¥› Ë mêö A@ á8<<  &ù“.002©0— Üm—0Œq6ÚÂÖÊŒ4$ ŒJ €9 ++> ã˜N)N¢'º&` ã@K"| Ì P±:†å @†«ñÃö¬&¬ŬGC@šåÞ{¦"Ž .=Ž@¶ÿÿê~=µÿÿWD ++ ++‹¾´¢486 IDæÒôÊHP&K’4¼8óAÆÞàò¼:&° HD/d'dŠ/?u‚Ê!½HÙ Òîðz8(X:B>2È<ùã/u,e W å aïýLeaa/ 0ÙÔqÍÿÿê ++ÚÝhRO ++AÊ>¡2(@3’: ++‹‘D ÂààÊÜÈ@@ü#à  ‚D9T)ÕUL:”L -‘L &p,+ÔÕp…/€pÝpÐaPÕÐðÎÿÿê ++‚B 0B»"Dx<Æ ++3Šå&¶©Ñ!ýÑ…;‘åÍÍ YšÝ©±©¥ßÕØ¥d z@”3zB”PB:@Ÿ`PD0Øœ BF ØØØ.Ø Ø   ++tØ Øpf"7 /ÝÑOšåÒ;ËàP;TÒF ++(;Ã2Ú@Ú2HÇBÛLr#$@ ÜWØDÜ@Ü,@q6éàY ++ž6 = ++tà‘+dp" àô° 0Žâ@ƒåe& ++Ë>Ë>40‹åÀ x0ô”) ©|V¢ÿÿêŒhJ hŒZÂ7 ^±M± ++>‰1 ++“eàÚà¹à)àšO$Œê'Ý!ÝEÙ!ÙÕAšåìÕ€Õ4Õ.© ¢j“›ÿÿê¢H. Q*J`’˜@0ZJ#¬bLjJLH2L¨0QL ++A`K :L’¡NäÊìÊäæÊ’Pm$È « ++R« ++JI9ú« ++(§ ú! 6û« 0« )ðaö††ßs Is  ƯZUzN7 7P ++˜Z5" ?ªP4 ++3R´[T[%X Ê„Ê|ÊkÊ=G@ ãÑ<&¥×p0å €â'D9/D@ÍO áëÿÃ=óââ!àš§w<Ô!@   ´-@‚C´ï´”–ÑK¨´’.œ„’}’UzR’7T ++ÀIgRT ++ØdºTHeT£qVÂææâŸ\F ! Ž)ÍÛ%/uÛç–)V®XU£  ÂææZÊâ~"@0 áâF Ù pq"1Wã]õ ++Q‘åpO€p”åWáK=4‘å,9,+,—' ++Qáé 1 ’8 ã½"à Ú›,ÙŠ*Þ[šåå©r v ++Q0AdyBŠCÊX@b ï"HÒÆ@Âì$r8Z 4ÒÚƒ, Øò %:ÚÊÈ$2PZ,(Z£;\^ìa`  `ìž äç Qâ^7ó 5^Ê,Þ èD < ©<ؼDŠåü‰´1’0xˆeöžl I/*®" XO¼h:ž,ð† ++p¿#0ppCàšåÈŽÁ/m ++ â ++_ žå¾d vh< &~DD!ß/­ˆ$H#Ä- ¨P4Ú^N/2X8r“j`°Bš›¨ h^b©@ µ áo r`(# ++ód ++ÂææÞÆÒfÿ$"à Ó.•ÓÏ"z,1àžW^ãÏÛ÷]Í÷O#|”iV ++{U Q < + xÍ$ºÔí„i Î ++O#²0´›$%@’ç&Š´w´”{ “ ++%àœ°Ð@X%ã$1à á<@\;^ãXÔCš2102Ô ”åR 2S˜f0âS˜à˜.½« $ à˜Sô ++ªô$ðiì@= ìO@šåvìxGË ib"dò²f¸h ÊâêÂØ~4%C˜h ++7hddõdŸ`8 òf(#¼ ÔjæèäÒÜÎzl3Øj ++pl8I!`l/Êl [ l[ à‰an  ð[ àˆ·[ $­ÂT^ãœ4…èt4aèD5ppã)Cð—å|» ØM0”p8p“®6'ž÷#h  È0hÈàb4SÔàÔ~žå “åÂÜHØ'SÈ^-ÈŒÜi4L@0Zz#Ðìlìl]lìo rn(# 0 + *«;oÆÊÈêäÊ¡bpÚÊÚvwprgÐ ÚÊÚ‘4@' ++.Ž0¯ƒ’åQá>¸,'ì)Rä>D ’åëÊQðç Ë,¹[$šåü¯. äK Ó@T*,sr@| œwT`t › ++*tv…x…z&@…¡ ++Š  yÿàâ^š š @¹‘axP–’~  3 )*" .<š ++†n ++X qXàN ʆ,* ++1Ç<.U<ŸXñ?P(úxÝ rÝ WŠzˆñxñs`x| ta —b8 Âz@ ++Ù‘~ ÚÊÚÄÊä+s€ € -IÛ«%QmÝë|7e„T]o )Qe>e)e`±m Æmœ•mL_ A}Šsb;;£0/0E0¿00·||@|ýâ5³¯C TC ?”å·(ê5LY.á`LDor ++iJB~ÎfÒ€™ ++7`~Ê~Ê—VB€@‹v  ++hIXI.ÚI Ç ‚B h„j °B hh…hth]QLQÉì<Â&%:U%U/ àP /áEÎEœʼn£ù5È0t-@$2Â# ‚‚Èf¢„@O0‚°S†ÌÒ‰-ˆééÿ gIé-¹éÚ†é†éWˆ@†é†éDŽä™þI ä™9³:,0<&¥9:7: ”PÁí…¯:6áO šåÐ %É‘ ªBŒ À)ÌТ$e¢ aZBŠy"<‡ƒ÷ ‹ùp÷ }‰78WáÙ°q°Z“$—s)&pO$¿+²Plu ")"pC$Â0à”MB!á— î1S,0u9â)*' ä/ P'â)`Ý9? ”H&”ýBiD,—åµ;L±;'­;ÀX0ÿ/áó‚* h± ß l" p´ˆÑW˜(|D0 ++Ée ++`0Ïfu0 ++|*! ++°ˆ*jg Š ++8€,3âŒg0Ž”ºQ +++(oÚ ++(ƒ’ƒ—˜ƒ؃—TƒKÓ8@!àRb£)1ÿàJ ŒC¯•¯<x. xàKï/Mïµ;®ïWBÜS’”×–  <)’è‹”^R·’^’[?ªÃ•E!àžÀB+Z¦0Bžàž¡žŸE02ã!÷D0’] .¸&0’ < s `\_x]\X>eRš!0”^J?žž0ž ž/02_0„å 2ôð p—t÷Yè°…1`/0ž & ð/ ++ ñ~ìVÒ-Oz3^ã(Ë ¦Lh/@ë+a«!3ªÈÿ µTÄõ7 @"RöQ˜Q€ ! ++Ðx¨$ 3ú–f ++Œ!p5F‚–ÔLM.?²˜‚œ äÊÚÞì›2 ˜-# kbROõ!.…)©¤)1Ì:@i@Åqó4qžq—q¿âBš Y*YÒY Å°YTkkÅu5&}E}µ& ™€ ¡¥¡´’ ½ ŹÅ/]Å;Å4Å;F0óS*dõñH s/ùMåÿÿ ++õ:,U?> ++!Ö!8Ï$%°A¨ ++ %ˆ B Òš $À!!p$Âi œi °€ ¯HBž  øt ½ °·›t hÿ ÿ>| ãm„ ÀÇeÇ ÇPÇIÇ=>¿ «  ¯•¨ @é¨ «£x-?ph£?Ph£3*ž£x£jêž ++(†X‰> ² ¤Ã¦ÃÃK,À² Aœ.çUþ ++›GT ++.} ++¦ )S!/0. /)øO šå¿Ô¸. `ÒB¢‡€pä® ¡ƒŒp0ÂV@%”L" 0PÃ,/õÿT" 0{9ÿP ëEë0ë ++ ë '¡)èä×.)÷- ++×S×/ ž”&Ñ/p×Ícp×_1X×%¸×w #EÃpÃ/™9HO@šåÛÈÔÃÃ&¨ø»-€·C ²¢? ++À³YJ¢ ++(V ++¤V ++ ß??j¦àsª ÌÒØè(¬âäÿA¨äò=Dü/AüyA€/ဠÁ-¼Mä­xäp˜Ò¸Þˆ X' ++ÀXO ²¨ä¨äªäªä¬äÁ®àÂäèÒèÒÞÜ粨3&€ ê) XúBàâ²>%V+3!ª# ñZú "÷*ØbõšB° X< bP0 áÀÞ3Ç ‰7P|a°“åà  ++ [á ÿËÖôÖÛ!’à›åàŠå ŽŽœËR4G°Šå’fØHËLb—À Jâ›RÀ ápf"°ªMXxY"À` RüçfdTL$&À•??›Xô|CXTÈÖ\ßP ++“åd Î ++Îùsñƒåàƒâ àƒåƒåÀƒƒíOi „%«I=0“zXêGƒ0å Àå•L›0V°0‹‹å ‹å xV ÊâŒH/ÕH"H¼¼¼~‹å À‹åàôd 0€K,å X –à ôŠ6HÔ"! ƒ© ÔÇÄc"À`h ¤d"Àlt Ð7o3wMWŒà̵Ô" 0Ô.‰, ãÜH& ãð@Ü+!BQäÕ‘*üé;¸ ¤LT6ª®õ€ØÊ°È !°MèMð(eÞ$b !8õcä$a’° ++@[H! EZ° dw'h ? ®xÿ$à/;‚²rr´ ++äÊÚâ¹O¶n"ø j8j?0 áZWÃeƒ*ËeÕS æ" Óe? Ý(`ZWXÒ+ËO\2’´ÚR@"¶öT¸ 18¾[#7RTý8 ++'ôLT5”åé[ô q”)@LTÓ` ++ô2"0¶iÄ ++Ü;$ŒB žåK ++>-DT" , à;Ö9\(cE< Ä ++†-0l•ƒ9QVä ++ ², à„Ì /}‘(à”Å Ó 1ºúQú¸ø„€:PÇF¸U(HY¶™ ++º'ì'¼|"€ 'I'?','Hù ++Õ!Õ!Õ! Sk-/!œÁkºkU’ºk¼?i¸pÀp6è¾fXÖ,"àÌ/uîfˆo%šå¶8Ÿ~ÔÚ9N6öPwr#!àžH1€,€2L—<éü0T»w!àž6?"Œª½ª-n?ZBjX Ä­î9½wr ù>‹Â7ªÇ%Èö%¹x¥X6rÀç`d<4 ++Àê%?Z¼Û2Â×%ÝÄÝßÿ8ÂßÄßÆ^0ßÉ J0bóf"4ß.ß4ßÅ:ñçãç»ç5çlµçœ+ãýBJ05ÂI€ ++ë3‚ÆNg Æ ++ÆOZÄër æêÄæèi4Êì ++#h æ s/Z¤h ++o ++o ++oÙ/ `j ’3¾Ú8F4dÈ Ðc©q—å^áS"µ C%GLà 5ˆFËF-É<Üod ÓU ++0…!à”9› ãU ð"wm °„‚c q /QeFy²E !@—t1 úžxN6]2ºÈ‚$ ++ S—kÊçB"€|Δ•¬oÌ •[•O•()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # `,' ö-ÞBÜ ³0  L$à™åZá*€Xâ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ö  Jâ`EâP…â,à™å^áó:àHÈà†å@†å`ŠåpphÙ,pÒpp p¢ I  p±p pp¢¹pppp¢<)poppp¢|™pNppp¢ü p-pp p’y  p p p$p’é$$p/ëp$p(p’Y((pÊp(p,p’É,,p©p,p0p’900pˆp0p4p’?©44pgp4p8p’88pFp8p†p</ô¬'.àx¬ Íp(¹p /¦”3ŽH4vH4^H4F(2 pt  pxp˜¬ x/ö03ÞH4ÆH ü ü/µüˆü¤à< /à/• '¤l¤   lxXxXx€xDd@/p”<”((”@”D”  (.ø”`”´  /ãx'ÏxHx/ t»t(§tLt“t(t|t0¸l/gx'/Sx@ädˆDˆ€x7”(#”€”d”p”‡””p .ó ”h x/Þ x'Êx”˜t¶t(¢tt t‚tŽt t tzt„ }0‚â`ƒtft0tO‚å0t/R <\Ô/ ƒì=ì ++ƒx ++)xtx¨x xD P‚P/ü ÀÈ /è 8¸Õp(ÁpTp ®p(šà /‡ 'sp_†å4  _t(Ktä8xPd€4€ü €ø8€Pˆ(.ó ˆ</Ü €'/È P ³x(Ÿx(/Š \'vxPxpcp(Oàp X YX@/…>X6X$#8_0†å XX  /üP 'Õp@p Âp(®pDp ›p(/‡ p(/`ø p(/9ô p(/øp /ÿp'.ëp\p Øp(/Äܱp(/Šp(và cp dRdpd œ ++¼p¤/+„xÌxX(/ÿX/ìÈ 3ÔH4¼H4¤H4ŒH4tH4\H4DH4/,°'° p(/ñp/Þ(3ÆH4/®'š ‡p(sp `p(Lp 9p(%p p(/þp/ëp'×p Äp(°p p(‰p /vÈ3^H4FH4.H4H4/þH3æH4ÎH4¶H4/žø'/Š¨wp(cp P(48H4 H4H ˆ>@ ãðšåÄ;@1ÿ/á@OðÿÿêØÀ¨ _2ÿ/á–,,o,ZB*/úþâʲš.‚þp,[,I,4,", ,/ûý,.æý,Ô,¿,­,˜,†,q,_,J2\,.óü,/áü,Ì´œ„lT<$ ì/úû,å´_3ÿ/áÎ,¼,§,.•û„ƒ,n,\,G,5, ,,.ùú,/çú,Ò,À,«,™,„,r,],K,6,$,,/ýù,è(n0ÿ/áÖù@.Ãù8 T}TkTXT5T@,.ëø,/×ø,Â.¯ø˜œ@yh@U@2/ê÷.Ò÷ À,«,™,„,r,],K,6,$,,/ýö,èи ˆpX.@öÔ.-öP,,,.îõ,/Ùõ,Ä,°,›,‰,t,b,M,;,&D/úô,.åô,Ñ,¼,ª,•,ƒ,n,Z,E,1,,,.ñó,/Ùó,Ä,®,™,†,q,_,J,8,#,,/üò.äòDÐ,»,§,’p7,jW,A;,B,/,,,.ññ/Öñ,Á¦,‘z,eR,=*,,.ìð/Ñð,¼¡,Œx,.cð<D,2/îï,ÙÇ,²š‚jR@,+,/ðî,Þ.É@Žv^F./þíæζžŒ,we,P8 /ðìØÀ¨~,i.Wìl ++.Eì¤ (.ëëd.Âë(¬†s.eëdE(0 @¾êÿêÜT*ÇꨨU*ÁfàT °(/8(<0 á,/,(.Žêô.ôÿÌä@Têÿê„V]àPW*¡g WàA$à(.ïé@¾éÿêìXèY *•hxYÔBéô'@Xéÿê„Z]à@[*ui[àA(à(.óèÒ±oN- .ëçÊšyX7.õæÔ³’qP/.íåÌ«ŠiH'@åÿê0l XN`Z‘l(l.ãäHóÜäÿêšj 0PÆæRØÞÞÖêà¾ÌÞäÊÒÎܾÊÜèäò HZðXB$8B  àålˆTãIð à‰å4€‰å(P‰å ‰åPã$p ã0—å‰ð4€™å(P™å ™å@ áâàã=f<*µ™ÐA áüÿÿê €âíy ðR ++˜BDHBL0 (äöæ¾ÒÜèÊÎÊä¾ØÊÜÎèÐ Ðv  Ì Ì À= •sRpŽŽzÄÒÎÞÈÈà‡‡M‡‡ZÌØÞÂè… ++…M ++… :¾Ê↠ð†_Tã†$€á áNá áVcAš ^ùN N>@(´Ø:´u´ ´jÜÊÎÂèʸòMòŠ+Âæƒ;ƒ=ƒƒ:ÂÈÈM:ÚêØM:æêÄM:ÈÒ샃M{zæ¾èäêÜƆ†M9p™†J¾äÊÚŠŠM  M :æÒÜ"i@œ!‚ Ïà ãà€à žíŽ ß_B:4s†à Ží®ÐMâ í† íÐâñ|˜" ++ØBP8Ø:ÆÞæØ$Øž$Øر&Ùž&Ù ²(Ùž(ÙvZÌØÞÞäÚ*Úž*³;ÆÊÒS,Ùž,Ùôd ++@ÿÿÿþÿÿßX ³3ŶS1Gæ WÕç¾›ÅÉ\—ÿ[˜7]“5åjåg¿8—· ê!•€ѳAHqégõo ÇCsÀ±‹žÓÃ'{CY¬;/2;5©ègy‚h@`H"Â:àÞî].]X$]oàžíim>. ++ð¦+èÂÍ0Až0Þo 2Ùž2Ù;èÂÜÙ4Ùž40+Êð6Øž6Ø:ØÞÎØ8Øž8‰;æâä :Ùž:/ZÂèÂÜdÚ<ùª>< ++ð¿Âú@@p$í>Çž> 3ÒÜÐáá@áž@á6Ö«öÐ F HÌàZæèäÒÜÎZ|êèÌp@B ++ûCHBÑ`BD X ÌØE „$0 áă"ăü  ++ ++à“å®î áàâ^ã“üE‰:lnð “åà"à ++à†åà“åôp/wôpTŽâ ôpän’8q€pŠå0Šåhƒ=p—üpTƒ*í\ƒnpšå0do/SpqI|_ @Šåx\ƒedƒŸà á @šåø/|# „l†l r¼¬Ør@t>@ á¤„¤ „å¬.ñÿÜʦ‚Lpÿÿê°e@/ AZN ++>N>aP (×(æÒ×^×U×B×´×ª× ˜«·†·s †âàƒ¦ñžíI‹´îúñî3 áŽO Šâ [û*»‹†Ã ”Wˆ@3?w†?wO†å@¬3ßãI”/ƒÇ ”7‚/I|°/0„^¬\*±¯!¢(/æÿ«((°aOx~ 0" .¥ 0 á —å£ çy‚»‘`³>ñä@\ .\@/¥\ ++\ ºï8˹{ö/uЫ¿¤¿D2:eà¾& ++øP)À!Ð!}3PN˜H/ ++ ¿ ++IP¿dXÀ YT ++>4Âü‹RR  b>‹*¤‹"›‹ˆÕ£ËŽËI£4/½£­‚€£/½£»ÏeX^’ ?ªT.J 2RTqCCHTEXP ++~VþEþý#@— %`5 hV ++8#8°#ˆ/C€VQØ Ð&YX ++FX)è)ö€BX 7Ð. Ìr Äs° á Šåä"iäV ++ šåÄ°.º”+y:Ì°ÒF&—å ++“øBð* ojzf$ ꀆ؈vR8b„Š ?H/ ‹‹ ++ø.-JY›ƒ<°˜9 ++àžß } —²ƒÔ6æ‚„ qƒà‹ží !„à˜& ‚ð®êÿÿê —åãÿ’+̈º§<j¤„ÜJÜ@8¨0‹0p/‹œ8ÜTP4 ++|Š<ñÞHÌHdz‹Ü˜ ˜XŒîzäì:ÿÿ Ž(_'õ Ú™1 0š’j@àƒáÂ|@ׯ*ß šå’NÃàÄSáÑ7Ç•8"p¤.fŠ8 ¹8C0 áŒ_0Šå@b•*ùÊ™@† ++ˆä¬+e¬0à šå´+"‡T°â U›í›‘€ìO Šå Ö*éJšìO šå¼ è„è„. ´ X!ØXX@XÀU ++; þLÏ€¹””sô@2ÿÿê$# œè 0.•ÜlOÿÿê/, ¼4 8‚°(L4 V‰V‰â îžd–‰Ì–‰€Þœc`âÀ_–훜4Ì41À€âŒ'à†d¤P ++4º4€44 ++Œ#Œ“*u ++Œü /”•(!„âl (ˆô€´h#°‹4@?›í ¨k@€€(4"Y3€4à hG¨Êbx°›8|@0ŠåÞž=p—šŒNc*á Òžä"$ü ++È„p‚¸p¨V ðÕ²˜  Ž=Žøy¬d8_<ÿ/á?-PPñSß#Íþ°4/É P .—ü€.ü¢xªªÂÄæ1 ++08? ++Xe#h3H“!p€Ø‚ø( ++e2(  ·aXB48Ú#40ƒ€‚%ðq¥P„HnÜ5aI7ªXa3à÷7Å~@BZ   ‡MÐã ++àâ^VÐàåàâ^ãŠ5!U$# ++ß5Ão" ++}\*—ƒ +++ ++ ++· ¦ ++ ++àå.éMk ü±<)à66˜´+1ûOšåËÄ+@ ++Jò!ð•HzZ•£€B0 ‡qZìÂØêÊÈ¢|\  0 ©Ÿ©$S0N06^ãK m 8 ¼ ++D>å6å#U?€âé Ýé€qéÊéÃ`ñ)/å/yñ+ˆúÐõ2ú\õ'ÀO ++\ àäÂèÒÞÜÂØ~ BAª&8 ÿ ÿÏÿS^ã[- AZÑPÑ ½ÃØ-È Þ2ßßß ßß+ ++Ú`5úÿÿ*?÷ÿÿ*_êÿÿ ++ë*˜’X,fž ++äÊû"à ö ##ÊÊ>äÊÆ)h Â&« ««Î° °ï@’pô…ÆÞÚàØÊðð%@  ++*+ììи ÇVÇbÓwÜêÚÄÊäÒÑ£•^ ÊðÂÆèÒ#¸ Ñ0Zk  á5â‘‘’Ýó  ++åå?’åT åþ ‚ þôF ò z^b $üæ@Òæ@ÜÞè@Â@ÒÙd ++HÞÞàæ04` ++6¨ 8.8(Ôd0707»j`bdÀfÜêÚÊäÂèÞä„ ++vh  À ‘@°3”å°B@”å ¢ ++ ++( H\`n°”°Š® N® @; ++./@² & ++à4š†ÜŠÐI*}%<¹< 80 ++@ ++  ++O@šå² ++«Î xÈ Zfj 6Ô. ÝQ d°RQpn ++»x3 f ++SpØ!X| ++B 2h| ++ (hEj ˆ ++´lÈÊÜÞÚÒÜr(È ’(ÀD @’åè,œo’ $PP= ++ $  ‚0ŒOðšåÜ…(Á D™©¸a"bl¬÷.E0nùlù$pð5BrðD ð1tÈ ++FàÂäèH KûB@„â¿ ++ Vó9È 3'?w1Èrtx 4wï ++v 7yvÒÚÂÎ;&È  ++Ö &B3 @‚;F‹vCv^D^0Švx^| ÚÞÈêØÞ$ƒ€ ˆ '$ ++’.& (–.í*1ãËç“çÔã'0Õ¹+©Ý0ÝQTã¿„?ãk„£_§„ /-„ ’9»3Rã„ŒnèO ád dÁ‘ÁPDpRã'ªšT_AÚà„ï ô“à”àjê.„ @ ã y/-m @ šåq °^ãéÿÿ ++Ûÿÿê  @×ÿÿºS$l™l @Îÿÿ ++ÅkXñX WÏÿÿ ++¦X/0}/IO|ÿÿ ++Ç05nÜ/%Ü£ùB-¤8 ++zÌØÜ3°z ++0p‚írÚÂÒÜÈÊäÄ B,`B 8 x  ð 0|Ô êÜÈÊÌÒÜÊÈ@ÌÞä@üæû7~ (J#Ü@“"!~P¨Ib€:±†ÊðàèZÚÞÈ<u„    >TTãí>V@ á i)âB"ÏBBB'¶B@%¾ k°*­1úÊú" ôôˆ$_qˆ /5ˆ [ˆ"fB@WºÇŽâÅÓŽ55àž¤$¨P:=%¨ݨ "$hS^ã! ¤ ++¸Èé ++>š€ ++Y.]€|" àÈ@ ã@@ ++›: àÒŠ„â½$…G0’ÐD1 á”ÂàÀRáj<šåàŠå˜\äõ˜00 áó¢œA0Šåå%/ ãXoôMXXÀܾ@¼) 0!àŽ:ÄDÔR%(ƒÃàÀSá À£\+ pA á–ú0šå­f@M@Þ@„BHXP¨PP€P  üôØ©".%ˆRèÿÿêÐãÐ/m ‘SãDÿÿ ++É(L œe) ++”3šå-dö” $/$ 0ÿÿÇãH œp qp /àþj²>¬ ",/-¼ A…þÿ ++¿>Ê%„±„€¥#ÊE^´¸ ++ø ++3¨‚ ++Ø ++ÔXHâêÞèÒÊܤH0 ++ÊìÊÜ ˆ1%HÚ"%h G€|ô"%X÷!`«GŠ„@H|dZ8†½uÜÞÜôÊäÞ   '>'™W8ÒìÊ+%h„ !@6Y M Oz„M 4Šbû†ˆ ø °X6 Lª£í T´/Ž*D M?…< Øk0’åǼP¼× Ã?ŠåÓO O=t'. ã~]W @0²‹!@ø‚ˆ B Š .3&äÊv7ŽTòŒò õºõ…Šõ)<õºõ¢ŒõŸ( ŽÜv”àÞæÒÙ’ËÖÚÖ0*ÖdÚÖ¢’Ö_  ”Ö˜² ++Ù–²Üʧ0Š§dÊÜ¢–Ü…˜ÜaœÚÒÜÓpš !° $„þ"ÊÀ®D^J,1,.µ(&ëû" Vì ^+É^ œ Æõ2Lâ ++ÚCÓ[$…>¶¶$Ú1öÿÿ\V‚X?ã{xDx>È„„ |MZ@ˆn„/•„O1à‚ø¾Rg'ª|Úb´þ´´H‘H$  $ Q×ÿÿ ++Ô¨´Êe€æ}@K@t/@/Þþ@/Õ@Ÿ/‰@3/Ñ@fÒUÔ0TãOéC HC.ÄÀ°mÄ%6¬0&R‚ ++Rq ++ à’åàäIá’H[H½H ++M" @ÒU3 ¡6ù¹:" @Òà"ðš™-_Šå ¡3*EL9O šå½t¶{+&@Z2D!@+Ñ\ü¢/ðšì#„â +M|O@šåÎÄÇÿÿêhJpXÊ•.5:š!œ¬+˜(/ B(!¨ð@ ªš(˜+ >/Â>**>4@œ4 € ++PB ˆ!Q@QC ++šf¢š ++0ßchžX}l4A!²š¸4(‰ a¢ÚÂð‰  ‰ /Âð‰ ÿJ%‰ ÿqÚ‰  Ú‰ ÿyÚ‰ ÿÿÿ2 # ¢‰ ++(‰  ("‰ >**>?@¢‰  ‰  ‰ ¢‰  ‰ dSÎÆÈ@¼XÿaM2Q¤{nM¤ô5@XB¨`€ ÎÆÈ‚p]""*Û@€XâÈ\4¥1 áŽGŠ±—(è. ˆ7ã‰$ ‰$;) e#Cpžå€.8O‘*)yT‹&0èjN)À_8Js'd—*K¥#„­„6„Tc*ýÿ)@ / ˜þI+EX&šô2¸Å"ñW}ñW/˜/s((ð _(Hhÿÿê¤ /Iœ<¸ ~=/~=%#*QTã$ÿÿŒ5Œ& pí'( É%àÀDpåP@ÿÿê+¸à˜À ++ žåžÌê$SŠå$ДÛ+].KCšå$Ø$Ñ$m6 ++zÃ)Hñ08 ++üC÷0P0¦Ã`)A0¦ Ô¬P:¨ a2¨ ++HðKD!€²IÒ¨ßP(¦h¼úHB¬  ØÆÚ//"ž/.‹/ '»}'x[tòI ++S¯™@fýAÿ!/ùßD@Šå£ -N?àóãä*A1N" 0sd*õI{æ‰Hs“ 48˜&˜&˜&sîÃàÎSá¢áû¬ õ0#/=DšÚ,D“ÿÿê¼ø¼åz0Íë$/åg¸ëŸë$/i„ŠÄ/ 0£¹PL«/ Ÿ«ôA ++QDÖ_6t u£Do ¯| +½|4@à á|à|õQà|/€/A€€*D¬ÿÿ ++x\.Oœ÷;B/AØ;/™;"bþ;/aþ;7"Nþ;/ ;G/i;/†\ªªX¾ $8Le8Ô114HîC ’¬)Ðv ++q9_HpPg@g€^)@ ®4 ® ¿($šŠ«OJ¬ Kꬠ® @ p·<²üf$ =6#Ç Ç |ï; Lˆ/yˆæög€bp B°ëJäH $ÆÞÜìÊäèZèÞZ­ô¼´JW@:5ÿ0†âêîÈ‹¸î‹ƒí}eó:X°ø)œU/p á0@šåG hê9h”i;ù:½ø@%è=O”å°+­Ì02 ”-´õ£$ ¡-RT¸ 8ø@ 1 ++ºOà­Ú°°bÝ5pp¬  ++}luB J°"H>: ++²KA´#Z|Ú¶Ú á{f´ B°Ù¶Ù!nƒ{¼ ð ++ÀÀÀ ¼'.q'é´`nB¸ <7 •“Fi Ñ=Û FAs û÷ :÷) _‚â ¯.¿¸ O‚â?Ys¸ ø3 Û­œƧ¿T Š Oy ++[Cbx ³BEß@ à”åoq ”å0€(7IQÑA1 áCÂàÄRá:@ D @ªnÄ ++ã 6l+¹  .¸\´ `/`>³^Aá á”@„/à‡ h ++µÏ L.ùLvL{©B4RGI.pó Ø ÚÂÖÊZäÊÆèÂÜÎêØÂäBr¸ó±¸ÈÊÆÞÈÊZ‚Œ=‚ºÂæÐ4S8@ºp² ++@P ++‘n <ÜÞ@£¡@äÊàäÊæÊÜè1G—<$ ++!@™Yú¼ ©+3¾P!Z|¨À¨ ±oe¾B¸ÌÀÌ4Æ;H1ÒôÊÉxÈ # `#ü"Žj"1#ü nh= 8 FiP½;TÍT¹T°¢Å=à’à j0㌃@RàŠjµ;e=STá¨÷ATÕÚá ý`pµD81Êkqtâ/j¼ Œ~âjÍ©´GXø(tâsBm•Ýk ,kÕ4`/ àÝ E= eAàšå¿¸!@Ø @¥HÔ ++RíDˆI-e9 ð E=¨"08°sSãÀÿÿ ++zX¥X @aÿÿ ++ä®10Ž¸­!tªl’¸ù;¸3ãràE8¸~¸àt¸t¸¸/a¸/Í<#à¸@ ¾9=Œ aLÊTÀ/­Àh/ h S¿ÿÿ ++xeX A_ÿÿ ++êht \Á\ G=tX/X Q#ÿÿ ++yMí.mÈcDðt /µà$_0šåJþáS¬/a”ñ±.êýÏ5pª@"P ++PØBÄs@ äÂèd„{MoýÔ ì}\è?K/mc$H ,„  !0š§æ  g1ã¬0Tá©Ï"Ž{€?'ƒi @Sàg3V ã @ˆƒ\890O"àï%1 ‚`A=GRà:d/0/Ïd4ó¿&Ð0Õ88àS /@–K–K?ø/ áðx"0óPǤ+ݤ¤ƒÖK7Kà”âÌ7ïô„½l+a„ƒˆSRãÜkHdÅdQ=ÿÿ ++æÏ_KÑf±üþÿê0’ ++èR3@ÂRÈ™ C!&H`KFXB0#B p1KG&f3BÄfC¨BÄfPB0PG]k8^X ++ a:hK¢KO˜BÄZ@P@Z€ñ[,LÆå' ÇC!ÚÈÇ(”!ª‡pÊ  P 1gF£ãó ++£ ++ô5ÿ&dâ.7o'Irdààã®à°~°~ƒ$3 ö<—÷ ++Æ<— ++.-[*7  G·Dh3ãDŸ˜-Ř\.!\× ++@ /a _Ûÿÿ ++¾û.$£Y0ŠÅh! ++ÀÊè{@rÊè10Ð$¢Xf ZÊHô458ª!+ ++(>ÀÎÚÂÎÜÒèêÈÊëvÌ P /"C/ûECZ.ÙZC ß%"m cÍd ê.—WKþ"T „âõg ª2ÊÞ#_Ê\¤n2ÿû¶6û‘ûWÒAÑN1 ážÂàÁRáTãiA”àjg#ª]« KÈ¡¶4$b2W#³ å³?šå¼¢.!H¤¯@Œ­Œ¯N˜/El\¡\¯@.áw ¯@1< ++â§ò0AÊÌ— € ¾CÀ:Ì6Å“J .Z 6 oC ZÌöHrÌÿH¢Ìÿ+ ÿÎ+Z}_qÒ ++ÂÜÎØûrÐ !è ÷¥»Š )_Sw~Q1 @ž" > f%º[N)mb&öê' ¡0b–¤T‚âñI._ +ùO [Û[aF^S3ã9",Hª  II3 ó.ÝäXY@ .@@Ñÿÿ ++y4ŒD/iŒ'8©ŒB¨ÿÿ ++‡”&_Â&\99T–WÏC ++ 0’å ’å.+!1.+O ,ƺ…ºT¶1ŽE"ya!X0pžå¿FT1Sã@ÆÏz3«vS‡âww&`^.G +5Gøµ.qƒ–*^V. ÏuÆÚ)½.d!0ŠI&:* /äptSåÿÿ ++£,…ÔnC3ãW*(^P /…P'.ÁP; ž¦T¦¬/1¬'/m¬R ÔÐ å ++,Ì9}Ë ++ .1Ë ++ ¨/¨VÖÿÿ ++f^WáTáTN1pþ0)mH.¬þ®!¥%ìL0nº¤‡˜2 xÏÑ ++ÐÒÔô`@ÒÐç"Dü8êÐý¸$,>,A€‹‡%¨‚` Ö™%X‚„x(º‡&`¥:DÖX‚?0Hà¬%YÖhþU;C!jÐÄ";(ÒôcçØç}Ú è #s!&6s!<2doDn %L' I F«@>$+50¼&+Én~q‚³*ƒ³*ƒÍvƒÂd0»H% R 4³ˆ°†tÌÌ® ++óÛpVp „å 0„åH·¶T‹#BáÁ0Ÿ}/‰KL1L+L-Š R `5kC»!B ¥xÏø'/Èÿo$ t> A' ++ȹ}EúÚ«@ØN1 ++ˆò€4/*4'p‰@”š5bڽ؅1ܲQàÞØÂäÉwÞ  0 Ã"¿Ã“µ ¤ “.u¯ …ßLÁLeLWc[-G;p.1p>F7ç6c:3#+d×8™O" _p ++“+ka/s-#Ç‹çÑhÖ" —.], [`"  ý KD*5.¢…@ ++sˆîæÒÒ “xôÆÞæ;hØ{_ç+ÜkÜÓl Þ ++ k¦>Ôà  I0 ØÞÎ @#?¯@/ÜÊ0²xùHPãQÊMˆlD?ªó7ó&æö{râj J8Üv±ŸÉ&?žÊbà 0 . \úaûIÇÉûÂ. [n9 ã– LJBÝ6€Ý6Dpžå‰6 ðà)Û[– ö®2l]®2Zb RA  Ѩ z@+J:.¯<:¦#A,fh y8 ÖfͶ ®„§² ({œjœ˜ /eSÓà±LD4 ÑþŽOå//)"µþ.UÍ($ $ $¤vÍÝMŒCpšåO¨ . (…@~5ŸŽ¬ }p­J@üæ'OÊ/ÑŠ> °M‚4ï ++&AóÌî4Ê(,I¾%!IjD (@ <4ð <Á< ˜@þÿêRA/íRA ž˜ÊDtƒ ++Ä e_‘<Ú&OŠå¢„­1+a Z ­8Dœ ++¼*–M& àØ"Œ•Q d$"·•² ++ ’åàà ++àƒý,màžåàƒ<$m<<5€å<€šó”ÙU““˜)­( '‘kš—•1 àD›•+ ++³i—•¤¯’.mZD l\r ‹‘þnÁªŸŒ¨†|S˜2Ç‘?„G˜‘x(šå(E@.- ¢)‰>X)QŸ )­# € ++ljl`³‘_’/ƒ§‘/ p+u pÛœp#‚Ïš€•p/á p¯-›pbÈñ1­ (Ûœ™ÈÃ#¤Œœ.šEO žåÜ!+ÜUŠ &=6=dÌó£P“P¿Pqlù®p^0 á÷þpŒ4€xþÿêà‚âÃ%eä@ à‚âTix .…ØSh"Lþ´ LŠ>¼"€ ð Ò? Ô0dšª’šªQ€åà’¼@p ,A¼/0žÖV (ÉÒ?d.Œ"£ÿI=„é;4ü ++šxÃ'p^Î1"°û„ /i)ÒN* 2"¢ûL /¡1S•C0.L õTŒ\S¡ůA¾rj7(Ø?/"@›4ªà40âOúÐDêsjàøÒÐe0<"¹+‚ZæâêÂäÊÈ ŽI4ײp%Ⳉ@€Bä 51 2?4ÂÄØ lÈžúžÂžRrC+ ++NQB$1.ùF,Å.ì)0ŠñZËÅ7?õ0 <M9=…²Ë’€& .Œ¾\·¬ a,P, /ñ,D.5D›) € “<.µ¾B5àD^Daðÿÿ—6Ê0(‘‘ n¨.)ôŸ¨˜¨úMX*•X ìÄ%íÄØÄúM`ýµ#tZ`û4vXº*zC3äUh+‡S0æCvZÑHŠ# ¡"°ojI`x¹ò4F#hVlÿÔ!F0p“wN2ÿ5hæ,"%M˜ºdNóM Y9,PMV`8#rZ¯•'(0›PU"6(inš.;[·¶ˆ! ++"«8$?"˜!À+ ++ÐC"KgE:à°³6C B8âIIàO4€âOpìÊðàW,pè  Ø U,ã´ÛI ,‰ ·þM 2K$G šåêimtt ®K|õ|è)(*ý+'‘9—̧‘¶[̧å+.­Ù%ÊcGK)1V¾díùQ¾\/ L2ô¾dÍ&/4&Ê‘MõèxBê  ++!° ÆÌØT" $&û•õq"ë©t+ 0€§/0ƒiu(Y$šåÙ? pž*½.µ¦@ ‘ ©q(• ié£;û‚ÙÌOiŠÌ M Ì028ݹ8 ¨DÕÔ¬„Ù(%! p$%I "ItP¥+„M(ô£j×HCLp.)é ++Ô€A¬§™3ºˆ8Oàå Õ¨´°„ÙÙ  h/!h ¶ÿº "`Ð` e‰—Z`Ñ`£Z øB`h` ´­ §BX–à P†Œ­ T†T„T®¾ 0éX·Ñx /‘x x4ùh®ÊàC$¬§Ä /}\ Ä4åh¯a´ã ++!à€íí€í ++vkh +++Mh ++^šåôýhpíýÿêDŠI/Hz ¨c 'ÐÁ§Y·-0B €›.<&».ÐCIxB»$ ++ ¨ I!²ê±W§èÀì ++0erèð° 3ì¡ E ZèØì‹›9/î¤ pð  0 ,&¤ /ߤ ¤ / pÎl¤ ‘² ¤ &z% ++@ @ T/ =I9@ €í–˜ô/=ô@ 1ì;y(y#0t@"1; Ô'ŒAÐ3Äص#†ôô@…Š•Ø& ´4´gHQÅ8Ø"¤´H"@Lì´LP.@ Tô]á8’á8Ðlµ|´4ù:ÌȬ@ ĽYh>/ t ++È t | "t À×4¯¥Üx*võ P €!³ÆL8C< ‚âðÎð€d €¸ $€àÅT·Õ7 *  ÌCDšäC4¶0D ++#”ôƒ¬ ƒÕfؼ?„â̓2¦õ _ 0‚â‰"éþm?"âþ$Ü)(ű.¾þ9HPYððî Iªð 4îPndð î !pÆ@}˜!xÓ@© @•8ö`Bò è ÆÌØæØÞîìÉplѲÉ&¡¬iœ'X: .!#ày ++“z4*8³qG©Ê " `‚ž#¡ .áé0á !5mî;á ++ /a¼ ,P ¾(òÖ; .ÕáH áH ++054ØË/ mi’]’809ƒ/ Ø P. ƒÜ? ƒ c‘åà 8‘8Å}ÁÁ\'!êµ»1ÜXlN X;   ˜l X; àà8.H êè( I.¤2A <þ/ Ü p«p3p$ p p(‚XëÙlÆy0ƒâaÊ-ä.éä.NþÄqGþÿêJšCBê 2?d0B¸8nÀè"*%8àÇ< ++°w/ ++(&Ør r8rPrB BÀg? ++¨¸y`8êòZ (ö H/8 !p;g ++ð ++(6Èjôjpö  x ‡6j¨j D&j =uùŠˆ/ôrì{2 Ò áþOò rr‘éb–Š 0i= AŒ*®9²Â “%æ <0r ¥ÉX^Ãc3.„×*Š°b .p°¬b(<™A¨ Ž ƒ /ƒåŽ ‹,ŽIU–<m¶6¶ )¶0¶,Š Ñ¡Óж ÉC‚â$ ŽRL/ÅL/ôþÞ ‹/}Þ !~Þ -/qôÞ ABŽöãPO$ÀàM˜j(Y•HBø øYºÒ YÓME >Y˜YU} KYÿq ®á °…á ˜/Eá 3/á //Ñá '/ á ÿ(¿á qŬá ÓM@á )o B¼ ++  =¼Â Búø / ++ ª 'Wy¢öÀôEIöEôEEúöEôNä püèÂÜé pú È é /2÷*TS„ÁI“*Sªô/=µ GìŽìђÛ à /}Ãÿ é -rkØ66 \úðüŸúZüŸúZüŸmØþ  ÆÌØèÂi\ *Ü#\ç0ØË!x ×2à—&-à†8 uO ±å(G³; ‡CƒC‚CtáÞÏ9P l$uCpŠå Ò Œ8 ¨ Vpšå ­ˆ?p—ò,åx ¬CêÓ[òÓ#¦‘Ø àíwBÑž- ++*- Ç> FÙÇ>‘( fԽ㠇?D&@‚Ó (x ‡? €~ÓÄÁ¿=Iàà®.„|›;4 p p#CïE+8:% Õõy8/šåa24 ~Û“>ÜŽN$ ++–#@/€^Ö NÔø8nÝl . %cüYÀ ¸(R×Fð`8f&$3drÕ‚dg/„` ++V½ ëÆ(³ÊÔ yffÔ (.Üþ(ʶ>,Ã>´Ã> /]Ã>O šåˆx.þ# ƒâ#þÿêBbj,#XãB@yÓÀ@[!ß &°#8 ã$«,5Xm99#È'&€ '€á "4AÒþ³(ü!`;I¢úö`,P î©  ¨ Âi,*Î0öQ ¡1‚¡1ÛžÁ8Z­Oïÿÿ:~%á~Ðu9P/]u9â‰/â/¹â;/ —W3,‚‰±`B È? x O.ÿ ++9l·wïœ /më12< ©< |/@Ïí€&@<ˆ IY—z2uã.pJÏåX‹ Éë ‹ ›Ľ»ÎQðŒ°kƒ)ß‹)ßž4ÿÀ á@‚â`‡âàŒâ‹”í›–4ŒSS‹â°Œ‡”YÞñÝ„ ++4z‘ß‹4 ÍÞüáâh•"pÀ¸™7ì…= |½íâZM/pí.§ ‡í.ß BÑâs âH ++ ++¿ sùdM<.\9[«„;ƒM7 §ã ÉS·í. IÞÚl4_ ([ ÕÞI ;PÀ1ŽâAÎ0ƒâ6¬@„â.Cp„â(Õ6p ÝÒ ++tËþÿê2z. E8B¼H /¸$æâ8É& pX>*ït>t>"åéS ú"Ú ++ ZåQåQ$Æ6<åQåQ±MD…*Ï}Ï.jë`¢/€Têˆ l²!Oš*Uš" w >tO’ ,JUO¤8¬ ë“*¬  ÁO B$8°/ö°(°"d§ö°€=hä<ïdÞ$ • ++rü; và;”è>…d A$+ B 3 ++,CÔ=/9 ôLé±qª ++' Ú >â+€J&öØuÊÚ&êrU:Ä€jŸ³ 0ôíwo îÛ€= ÌPå (»(™º”èÍ ì"ƒX |þåS„&·4¯+ œ’-X¸„ ,…Ê%M 0q”ö _€€D‚° h.5° r/<Àë*,8h , åa, s¬ðüϽk ++š(ˆgôFþ,ü /É DOšåQX/Jÿü“«üp  ïM‰Z× 0ùVùZ„Ü´/5/0¿œ.Õ ++ ÎÇùVIWƒd ++éwN áéý™WIW €„O×ýÿ ++l1ÐýÿŒ.ÎýÐ3ôA"ý\B}v"ý\B¸ Qýÿê^¢3Xœé&ÿÌé¢ø!€æ!à HéЖ<êEéS²¼ä*H£¨ž š/ ++ˆU [&'ª[àO!H +Â&$(OùTë&@‡$SPB 8ØPYOC.ÀËO«ˆCAÒ$C(-$˜çš„xBM™ÒÀd Be# ++U *g+Â$ˆ°0 1þ° ++° ¯2°ÿJ°ÿðb °x °áøl°gáB ´à ñˆàrX<Œ <.5D 0\²¸/Ñ/Jl@“G À4› Ø,AÐá 0Q@†âÑ#/†â8ö¹sH7v8sH7F77(PëÙÚ+Ùp Ô<‘<â7¨ +El?` á¥låŒA†â/ã ?†â)ÈúdMóâ)`/Ù`N*Õ·²(è„d¶0¿#ø)k)Šà’.0/0¯$*y « ++60#0Ô|!àƒ¬NðÏ‚ ++9Aª@—‚xhM"< Ê-C< < àh  L ìÄH/Á ++HÉŒlHY¼`ü~*) hd480T}T ÷‘‰ôô/Í   /Æ 9Ä/… ” q5”q5lðÖr5°à@‚ÙfuÖ0ÖU‰|Þ K E’K Ö¤5hN,&j,÷f(. M-HÉ;&ØZ- ++Hx- #Êmy-“' 0  ++Ê d¯« ++8è@úƒæ@üæ@ÂÜȯ«: ++ .Pb8+šHx%¢EHØõÒC-€Ö-€S.&3" .¨i08R~†  ° IR~OJd¶~³t& Ê ++›’J “J0à áÅ€2ñ“½„èIÍàÍzèI*5.¼èIuèIQèI4à6# èI èI *!<¤BX‚~d´I}¨(¾øHt!ç•dË:/aèMŠ N‡/m/½b;/ ômA82µHø´HÔ` (8BòhG ÚGIÀz J –V2–JB@þHIÿÿÿ\ÿå'øSèÂ> csdsódsÿä 3þ.j }0j*}2j&}4je ++¼êKìKÿÿÿÿæ}ð|fðK&fòK?{C)cÌ,E$ ++ÂE"Í,JX ++ÂFÄ' &¨Î,0è%¹èÚg P/5¦,£/íL‘g % ¢ ++#îª"r–@hêg ¢%/YÝoÿU ‘‡R‚Ré7Sé7(/QÇ ++4 ++·C ´L¡3$Õ/}$ÿ„ì/=ìL³ ;³ °ÊààãRà ª· q/ùà  c¿ ÷ y/Ý÷ ;/-÷ WR:Í'! ++è•'ð±q(õ8Ù5 º&€K!!`B ’BIÈ(„  ++@Ñ(3²‘ (‘ V!r&‘ (‘ a*ÊðàÚ, YH ‰« ‚R3 áÞ§ dæ*˜{"”† EB‡ë ++a-xæ•8„ù,:nºÖº'…{á* -ô¯. 0É{jå‹Ö¹HiH ,PÉÿÿ ++Ê-Sˆ 0¬3SãO : Sº²¨¦Š“<ç3râœÊu,%Î]¶ˆz uPÚ„áhdw] ͱ‚`W´ÿÿ ++»[&Ömûüå/ ./1ÈD©ÜÜ6d•d/bT *MTI”Êž˜ÇP°P_ʹ3ãK$I$ kç/Q¼C>šåHtH™Hf— @R /ˆ„H/n:¬0Ü j !@ŠeÃ$p/Á,Y0Px /P|L€.]&˜„/¡„/ùdSœÿÿ ++;S ++d \ú¼8í, ++œe¢®¢®//…`h).Ù‡qäÚØs ++3râ ÛÕ1Ÿõ„Yþ§°.‰ز¼ð-/éð꾇C ++13 >œ.q ¤ɳ ɳY³ v½ l.á “ éX˜¸ é ++@– ªÁk ;;a`/‘ ++¨D½ýÿê—&Y±7åt–~Ÿpîpºw4ñm6ˆ/q ˆ-@P/Á P[/1 P¸/y ¸ìÐ ++d/Õ dm6ø$@-/} ¼[/í ¼X/-XÀX¹p hÍB#ƒ¿‘j TvQŘ¹‘Ê X ¼Ä/AÄ[/±Ä',/ñ,˜Ä‘CCš©< ++„  CÝ<g8OSáhÔ Y FœÜ 100!/ñ°[/a°t$ä§ËišÌ/H/9dœ /Wvÿÿ ++q„ÇÎÇˤÃX°X ›X—à;¸” /UÔ3ÌTå?Ì% /ílWÝÿÿ ++Ú ++¼/=Ì;/œ[/ý //E n¼J˜=6;0àlOz*„>ã 4HÒÚàÞÞàæ AZ5ÈËÈU¨ºx¦‹¥H=¬Ó/]Bä 5 k§j8*X*§*béÛ%H%H:t§+0:ïÈÒàB2 ø.B"Rjæ(šåoª`‹ÂOàã"+"úæü«Ý› ?­,p/ Þ.ñl®òÖ®4¹‘®ôÎ5à€Öí°Ná áNÃàÄS’;ÖÞ/´Í+‰>! kD”” p(¯ ‰ *õHᘊÿÿ꺺A©<0<¸uí 148¼v 2 ++˜‹ £%xph(B20–ÿ¼A5HâêAìÂMôH'ø +:&ˆYA\!XËt3Â, ++(‡ˆpG!H8&9r8÷$¸, 6 &?ú6!€¢qOÀ² ‘°G°%#IŠŸ6$P¬/X÷V4hñÌhN.0«W[ú!6܆8 ð  ik%w¾3e"R>´ú¼s%Ã"Bx F´ ye»!»!<›î ¬0÷ ÷ › Ü;1çF´Ï#%µ–.›/P/1/xö1Ш Í0Åþ´ÄÝQÝ.²¿Ž, ++4ôŠÈ  ÞoÔ ^þp×êø Uäm|Ûê@8 T/©T@< íD01´ÌŒõ+|­L=¼¸/ ¸{“ìˆ@ `öÙ  Ÿ\`=;Ð;\4° 0AFªYXž"€"6†Q‚8,1H zÒ B> X ·õSí ++Ë@: ++á 7esPý 5àž?w07 §ºÍ ++ C@%*(o.Éo«)9! ëë  ÃÔcb'/ ã qÕ ++i Wºÿÿ ++À_Úü`<`ƒ8 ¯/åýØM …À; o!æ}y h 8MoÛµ kÍË/uä/Éä Läñ("à h/àŠ5oú[œžàYj/¸ ¸ S{.Ô  ã’ÃàÁSá)ç Ÿ!"ª# L= ‰¯3‚“©`Ã]ÚQ .íl•“¨L 9ÁÜзþÿêHò: ++Ò?%XµÙE : 4Ø ++0 í·P f+/ <&0´ “Ù$hÓ¸H²½`_ P¡ì èûSŠ>#¸‡pH†¸û46X 840¶(66pŒQ€x†`8r8Ì(6ê :UÔÚD  è@ ++Òï –;¤„ ++Ë( × ++Ó!f"_ºëŒWk'+ z/,+ ++'.é'Ð#¬¬ƒ A@ƒÇ'/Éàá') €Ê`/)`"¬mD=>ö"ÚBB @% í"¾­@º@ªTÅ$2$º ,8-   •ÕrºX+&Ò´é Í6ÿi\ .kù@ßÿÿ ++²Æ|.I|%VÀ|^¸ÿÿ ++µ|”ïOšå$|ý|W‘ÿÿ ++Ž± <-<-% µ.YÕm_ßTâ ++jàã6þ ½ Üzé™ Ø}AtâÖX&/šåL % ++1Â/] ++ø/Ñ #ý˜(åÕ çˆõ<@“å á 1ã€A0žà~ ( /àŠ+¸.MzÉÐ"°ƒŒHù+™ˆO0!"@T1ï„™ ++? tTà=jB)ÖâêÞäÚðP[3Ú$Tmí`à(%ðšÐd þ È…}åìSíÿÿ ++à-ïL $x LLÈI ÄHõHH¯—ývè° E—ýðülÿH+ . äÐ+Í0_ áäþñ ++*8Ä=/½þ.U@À.Á%þÿ ++›þÿêbrÆ ++P²B{*v ++ÛE*¢¯ÃE@ºí ++º¯ ó ++8ú&HâêÞèÒÊÜèZäÊÚÂÒÜÈÊä xD’†ÞÈÈ~3‚åR`”Ã0S,Low"B ++ö+Âä6°zó6¸ ÂÖ ó: >üæ@Òæ@ÜÞè@Â@ÜÞÜÜÊÎÂèÒìÊ@Å® 3`BÐÖ X\y òD Úø¿rF  p ~úÑ ‡ÜøÉ  ò©òðè…¦L¬e/¡½ô+9ˆR‘òOôGôµ6 ++”å ”tœ0t@„d" ++´.P@^âáôŒ€ Ìä à +¥˜LTãëÿÿ ++ßuôéÌÈ¹é ²½ò4An¦ZF HoÇ0¦~UêF~Â_ cò±LÆÊÒØÒÜαJ±³ÿìd‡»ž»«00³1ⳕJ³ˆ’ɳJ1L´¡PèäêÜÆÂèõ Nµ%¨ ¶Ž¶$T¶AQ”QÊn0E&E”E”EéEêf"Á ñ˜<1®/™®¬®® ¢N¦.æèÒ4Oâä|ƒ£JNxH O PÎ1HÄ„R %¸ X É<&Pþiå ";é),‰3SãEî!¾¾.j¥êõ™ h.½ý¥ê-u ²K¥êPA3SáPd=n, ,)á/™ Jå!,zM! !H аB/•°°Q!ªX]ORã)/Ô’lÔ ]¾-Å /ól­©1ÔÔðˆÌE , 5 . ‚ ñÄ ,, /9öG m+Ä<Õf@è°E, àûý.[ý6Û÷ …/õ3/=[ø”.7ãµ0{U/(/(fȸ¸®p¬!¡„9¼Oú©1A=¼ùtF«ø´/U«ø €@%d! tex/M x.ðþæE†2 ‡8H~JîNPRŽ 6èzñH(BT ¸ H5Ê° mF˜B@bâl ¸¸‹^1/©Ä2@LH ¬L„ñ*/„å@L  IÜ .ÌÜ ×ÿ‘'0qàXj ’åŒ!äX œ ý)ðÕ  ÒÅ5V*pÕ*meX TĈX eÀ …5ɇSàtâ.•&©)‰½þ))””AE¬  t{Û¬óì .q À(<›( a=ÔP,j·T"ÀÕQjT ++KÝr2³…ÂTÈv€t3 Uàâ`à rW1"' ž' ++0or BR`˜qsVHÌð^† r$0¾4:8¿">P0Y: Â:Ô·?€G%À2…ÿ17%h=# ++jO  £\%²RLáZÈÒìZÂÜÈZÚÞÈZx\ A˜ ]" !¹<ªH3ã'¹åRY ++ê?. æDé@ ¤(á Í@GxW{­ô]-P ++-P ++/yÐm-PM´‰yêm¸Ö§…£ Qõyˆ`šåðå ++ðy 1Q4I à] dì]ìô¡S¤i[#ð€0”å?0âªØ1žztW 0žå ”@ª(u0CàžI1‘Iu ++4s/0©%©0)peƒààžå7/^pžt™tb>H˜/˜le¬)± „bGRã0U/ÝÚé$ ++"«TO áDT/TC/ÍTY8€Xâ°|/I|å$Ð) ++H@E¤09?㉠B :`†` Øhí1ðÿÿ I°ž= M•ªÛÈ/•L»¼(d*ˆI „Ì`§YUWCà’å? *òt&4A”àÜ)à€~Sœ/yœ¸ +¹¨! Gƒ ++¬3TàM¬)/% ¬+/e ¬å $ˆF8êB !/@%+M ++%ˆ¼Ú/™ ++ºP+PAˆ /5 A'´ œ´ ‡\ /Å \ K50’Da ô€ic…@àj  ¥+ PØÊCÃfH .á  §5ÄÄ0PàÄ8 ++8 ++À/] ÀêÀ.¡ ÀÕL/å LdÔ ]Õ©~ø dЀO/µ€@©/@7/Ù@¨$ž:-øĺBX 8 HÌðn»Šp¤ªQfªdLŒÚCàÊÚQáAS_Š À} ÒY ¦I òó!VÛÄL //ßÄ1šåD|-sààCà‡zˆNà„â„^ }|òóEàaâ|,ƒàò 5/-_ŽàD"/‘Œ¬^0àc⓺Æ ê,$/1 @ >Càü#Ç#\ÔüÆs3$ÚCüH PÌÒðÜêÚ@ÞìÊäÌØÞî@îÒèÐ@ÂäÎêÚÊÜè Eë#VßÀÅ&BX$,°& :Àq—&2H Zü‰pð¢\¸B^  °gØÕÅ÷Ì£·Æ&‘Æ&j5 ++8è' ‘îepdnNdn dnìm½÷ì+Õõ±÷ ìm.ÍTnÛx§“±î»o 4 ++²gJg²'— 5ï³LÝ{Ëìm« ý ¤=xx"+MIÇ||€| ++|p|—£² H ï H¼Að§2 ++%ú4`‚-ÿÿêºY€pû' ++f›/źv ¢^ ++0úÈ0Q ++\µ€$„»6@1°&((dwS:\PˆB`úmP HÊð ìB$ÿ$îÆ Ù_3Sã€;^lCsâj7/0/…# 6'ÉDŸU5@p“ÂàÁRÆ( ++T-T/Tl ++µ%0ˆ ÐÌl/ål­lŠ<‡Œ $%/]$W/É$'/$W/q$K/Ñ$P/!ô yÌ,&NÑ&/KÑ&¨E/¨W/q¨'/­¨W/¨K/y¨;/ɨìÿ./%ìß/ì7/eìH$*-!&*‚d  € * ++þ)‹þ)Oþ)RsG ò)ò)ò)E@æ)¶'6/éÒ( o!@„é@¶'/E¶'Æ)D“ è5/ÑèDè/-è š)†uì6ƒb˜Řµ?3 Â")0")(è(S¢dè(˜& r:‚ 4Pf)Ah ++P}%/XÊ(A²a hùôPº ( ++ ?h*h0tÈù>6Âˆâ  â {€‹ c@Æ rk(ë>/hÓ!'J 82!/22¸j !!)9º+À/V(s !G ++¤˜WIXB,¤Kâh¸—0!hQ,UZŠ?0_7!_ªr`.,iâr ++ª!°!4lA‰n › A#š eP-S ]? !3TãÑD s!®l.ÅÍCQDÙ›`Ï¿ *\×XÏIgT#[TnP-‡9LO P:oÐ6µF ?(àE¨6Œ¨ª àžå@Nà /Žà…G0w%pŠTC *C ÚÈX¾‹,ñ\5îGæ˜ÓPļ3㬠`w*KÀ’aoHjÖníÄ ÔD‹(/9¯ L^p^p ‚`$ áÓÄ‹D@’à‹.8¤?É㬟(/Ü›fP/ex7/±x5Rx2/AxM(vql^ ÿÿ ++>|L:/Lû û ìÇì²Ó¨{ ++ ++'WSM© O;³1°‚âË031‘³¾ ´8/Q@› 'ÚŠ´³Wà óK3W„³Ùé˜[ ß_2¾(™Y, ƒ,&/},cI,! ¾Qd/} d9`2[„ ΧÈääœ €ѯ¶\¬¯ ++ ++ ]Y@O…œ ÌÏ4‡ãƒã&@ÑOp.í ++`"@txíð/0ƒ¤g ¼ª6 4„4&/! 4k¬" 4M P·ÈÃ1Ad@ºpÄ:. €E»ì¦Å`¸Z„ /¥ ¸ã4/Ù4¸›@/Í@E`>û˶ ++ô¯1<# ”§< < ;=‘Ã;À0 /áÀ_0šå / ‚Ë;W+„@<4 ü< 4„4&/4k<" ôP/P5`.Û"*ŽO Š° ++E/ A;'O$—#  (’àc¼LüÈ /ÙÈ  ++|R|*/U|eQ¬ ÿ3ˆ2ˆ/ˆhK $K7à€LL4P4 |ÇÜ/ùÜÿ3€â, ß, ×0¤=/‘,7ÝS"¤h/m¤7/¹¤;/ x7/U¤{/å¤7/1¤P/,)`"ð (å°аÜ›0$ /É$ ÿ /ý$ ³ÜÜ £1(ã' /$;leHhÀH ++&î{*"ëD ++ è/¶&ü(íÈÍ/áÿ /!ÿ /5"3/}" ° M/A#8 ++7/#° {/$° 7/i$° ;/¹$x7/%° {/•%° 7/á%° ;/1&° 3Yw€‚²Bj;-À;-ÒRCPã}7-@7-P+H@@à7-7-P»ª6ÌqÛœ , ~|O ÅU@ÅU 3¯%ls /d¶/Ìû,/€àì5/ì!Žìñìðÿ,`ÿ,7-´¯dô/ô /@@àÑPØ-´6ú-"-B"j*,&ú h& ºE lÅ*.-Enx*H+§z8n02&è*@è* +-HºM`¸ƒ000-  ¤`8:n ++(~lÏ*1³0Â/è \ '\M2°§SP ++”+ìÖdM2b ++¾/¨o#º&C²º/øº)Q%QRQ•…€b8SÊn6,1,#UÂ!0^/…T<,h&/ ] ++(ø,KÞ/kÐ;'&yâx/ÈbA/‹2/ÈPR/™zP ÍOtrÈÒì`JV`H.zp µp R.*G ·~"àÚ&t¦&‹Ê*KæG$ŽSö ˆ\8˜Ž$#Ò-4Sá*n/Å¡: zmGSã“yÞlâ-!R/ãÅéjàòl˦ 1Sãd|ŒŽFm $œ*b "0b œ U2ã6¶d ªä l`(ÝB^5W1ã8’*d,ž1{tœîddŒ6 .yš ++Ô—8/Å8YUS¹ÿÿ ++³¥U¤\/!”=ž”R”†o£u/Å”3/ ”7/Y”(µ\ @„ÿÿ ++‰š>ïïODÞ2v9 ++æ xÀmê /U1ì.Èþ&ÁþÂ-ù?&*ú"O ++Ì!/éÌ[/YÌ/ý83/E87/‘ÌG/íÌ/‘”3/Ù”7/% ÌG/ Ì_È.+/ ++5ïÞÄ/×þî'ÝóÈÎ'¾%òX# ++ ++ Ü ++"= ¸# Žéb’lªIyBI?:<pacŽb—Ö&$ z ++X5E <ö$ ‰c « ++‰c 4œèýcú'Fe ëÂ&öÂk( ("€â3φî'(=§à h;½ô/á Œ#žf+a˜"Nt&?tÁ]x/ax&xˆ\bÚáô -L1á  6; ++€YAà€Hk@àƒâ@àÎãrrCD [à@DcD/´àp_/pŸ¨˜—‡Ó®)&î^4p ++þjöüá‚?ãÆ*¼^4) †f-x œ ++  /‰(( œƒHœ>tƒtt’)p#"ø½˜Uf$x”‚$/)î”ظx@ž4"po .UI"p*ø/Ùø ++P®(Ž1ø/øÿÿ™€/Y€5€.Q¯PÅ »3Ö) €xx/ùpÿÿ©> /åŒ&ŒQ¯“*<“8l ` Ö*   l l CÖ*0l /õl ÿÿ¯l t ++l / +ùæ.µUl /El W\ `€ *!8!H!"”3/Ù"8#H#+\/é#\íÌ&æþ &;€Ôü±/ñ$üÿÿñ/õ'ü7/A(ü/å(ü[/U)ü/ù)h3/A*h7/*üG/é*ü/+”3/Õ+”7/!,üG/},üS/å,üä! xSèš+  2ebp¨Ý-®/,kÚ-€-0-,- '~ H42r.Ö0SÂp-0À—/ú—i;/ )R—¼.r;/àÌ~08+¤JÏxoô$ïê- ++x¢/?P%\¶GH ++ K1&7Ú˜BX89ê/pº%?2º2˜® C:®8®0®0®³2%OÊ¿ ++F˜/S*˜E!P]"Øt/a K‡&kâz"¸{/q‡c/}¢‡ˆqq\!H—'ꪰ#/• ++#c/¡š# /£ò#b/³â‡ åÅPv)3:3qt  13*º13æ9&ƒÉ)âEÞQí×L&Å3$; T¨) @¶*Á ++§‘ ++/Ý) ) @) q) 7) /@ý]à ýâlö‡žÊÍ¿-Ѫû?sL”Ñ¿Òm/Îm/Õw=s=á–·u ++à/)à)±Àà%/µàÁ @Á . OWÅ @Å `Rã°ÿÿ ++’|–Á,8 µ Cµ/Å ˜ÔÁѵÉñ"h!/EhW/±hw/=h?/‘hw/hC/uhca /a 70(®x™#)04/áœqœ-01)'m/‘Á†ñÚä?ðšåÓ¥ ˜'0„IDüî©D¯Èk³IŽÈIÈ$qjX/ ++XR Kõ%XÜET6m/ å2¼q/ q/-/$óq]/ö]/0;qI/0I/`/¥ ¨„¡UL¨ ”­/êI/ ,´I/™áI/8/¡ på¼#- ƒ˜ô¼—È ¼v/wï¼Äm•.(/ñ•.W .= ,Ežx‰•. /åDÿäÌ/ ÌbÌ[ì­œ˜È ++Žá-4/©ÿôk¤/áØSØL--*¶--²XíD /æ1$&à„ P P 1$9P ÿúP }#%/A}#P /P Wºxì/1ìW/ìw/)ì?/}ìw/ ìC/aì/(/Í(F<?è&µ+ä±/Õäÿÿ=/%ä7/qä/ äW/ äw/ !ä?/a!äw/í!äC/E"äW/±"äý(2Bž’Ì#vât Ÿ#˜úV«é†x¨#X‚'v–# AÆ ¢fÈs/²sD!X($VBt($v¯(yêtHW%¸1%`P%ç&()t¡( +bì/(¬/ ¡( 3j @ 8é%%=’± ++*“(/?òŠ7…(&I*$…(.Kzð2&SÚlw(/Y ++]U/c2]F'/eŠ7!HsoZ E(/sÒñU/}úñ /Rñ>.‹zë(5zM[Š| )° D[!ga%«ÅD0/‚Ær/Á”ÚšÊ4ž¼î5’/ušÊ*1Úv-¬1'ã‘© 6ŠŒi/MŒ ÔÂÈ}/´OÂÈT|A/ñ|ZÀ ÂÈ|/mÂȃÂÈX.qÂÈ!/¹ÂÈG‚–Âu/­–ÂW‘˜%/…–Â7/Ñ–Â?ªÄ‰/ÁÃ/™ 7/å ªÄim‚x  ims ++Ò;Òo( ++ò*Y3îj®m.(Q.(T‚2@DZk+à.(/Qã0„0a0šk+Ûšk€Ÿý‹s ++ŠBjã !Þ VxbkzQ bkAš|¦Á`~ 0cØcŸÁš>.ŸÁ½*³d„ŸÁ¡ŸÁXlÍ+Ih$u o$uŸÁ„ŸÁ á01- ++!.A$y„y¸mmñkôʼq ¼$’dŠQx(X(F :ÄÄ"/™ÄÄ ÄMñß¿väv /…ßÂ.äþ`SÝþÿê&ßÂ(ð”Mœ Œ /à“o_"~Ã?×ÐB€ È Ê¡ ½ÂnB"]óHëõ½Âá½Âß½ÂxªÅÀ¦ÅÀ’A@žà,B3ãwû:û0ÎuUõÝÁ úvi5à„ª…LàTà8 ++$”/é#”À ++ÞtýX/Aì-”ì>/ÕìØ/-X Q¯ÿÿ ++s øÅ }aÂ_˜H”/Á€F‘Ä/ H ‘Ä/QÌ//•ÌÌÌÌo^à ÿÿzŒ. t/üþŒ/MDÖlîŒhEoœÿÿ ++¥þyÄÙD’Š_‹þÿêFyÄà‡ k¡‡ Xô¢VúPs@¯ÄyÉ/P¯ÄÊ€ ++   ²Ör€P |+zÎÄ~ úDÎÄ1~P òÎÄ~ ++Ÿ£ Ša0a Ž!H "rvIv¢-ºIøH/#šH,'âH #ó‚#…‚ 90 qü(f0("h‚ŽZ#ó ++¸F@óí@“óíÓ"/ó2Ò×ç/ÉHQ ò¡GPZ©Îj ++bà"ùP ×$$H  ŽŽÃͯ'î T\£í!ü0`\•¨/XXyX†ÝAѸ‘”ÀàÁPáfÜQµC@SàQìK"9$L@‹CˆÚü ⫸˜M Æã7$@èÿÿ ++#óxxQáÿÿºáPhhWÎÿÿ ++̵°" Ș +á® Í ÈSÐÿÿ ++±´/ ¹Ë.1»"èà yA„ЃB/6ß3@*P°/àÇ~”/)¨1šå”Ã~/Càj†âZÐ/ZN šåòMœlýÓFÝÙ¬ˆ/©ˆC/ˆ—/­ˆS/ˆ?/iˆ;/¹ˆ3/ ˆ[O*[õüÈ0/Ù 0瀴δ$/] ++„¹!«Œ7ã•hÄ/Å ++Ä—/q ÄS/Ù Ä?/- Ä;/} Ä3/Å Ä èP/ ¸Uã÷Tˆ9 t/åþ|/ |.îýß÷G¬Jß÷‚Dò%P…´‚²%@)CXH fÐPA˜(IƒÐÔJ0‚´ò%pª‡' ++8„,S2‚/ûgóGó/xm2 ++ÔóÖ„ tô[9*‚û!0üð„ @ ++ÊìÊÜ~ø<3QûýTà⟊T ŒïÄÜàà@„¡·1@„Ì x(µ ++à’å.é ¼ ‰üààO^áh´&^ #‚“ Ç5 ÀÉÚ  <£ t1Žâ ++“#àƒæ‘#‚‘Š  Žh`÷I‘š#0†˜_“`p˜-Ûæ½/›ÿð ¨X X (X ¼[d/5Ô!TXÁ*}Ü/½Á$ô 4pè[Œ. ++ÿA4R‡àÍ! Hp.ÀR.„º0‘ ±'('¨SÒù!0&äS„ù.(û-1†ÖˆCþgÐ ÞÈÈÕ.óÕÕÉÖQQEðU…)\Lð/ý3EH H±/ݱO2—†— †— <†0E:þZÒˆ—ðŒ ++äÞêÜÈ BŠ•"¨  ®ù0áå)å)U* - +y A@šåë© 7ãÍ*é*ƒÁ zí*w¹oõ ^Õ“¦IǦGýŒR(¼5Ó»\!”APá½!4.‘Z)4 ++•êÌQê̼:Ñ Î)/tAíÿÿ ++‚ÛàDIký©< .… ‘äŠA+% t‘(ŠBp@ä ++ŠÈXt`†XÂç &PY@øt "Š ++ 6WŒ6PnAHz¢Ž G( Hz+Æ„Tã^^Œy1fïÄe ´ DBVd ¹ ,`,_6^ã]£*S`B1àL Xmƒ4 (0 *ˆŽ<`òÿÿà|† Åé-.oÇ? à†\Û\†ç' @Ñÿÿ ++-–/ 5I/5)/á)5R5O5y QH@à“åå10€0 “B1 áÇàÁ Y ++±±àÉýਠ/H)®/dm ¹ /m Gàšåºa €X}M1Q„¶‘NÇàÄWáM$w’å à“åtNtv<t'à„|Tt @t= ++I@tt\ Ü€Ú0Ià€F./á t@t+5 ++1 šåšå|}ö/Šˆ/1 [/¡ c/ ?ɨÉ*ØÑ6*ÑڰѤ .á @Ñ0© ‹ô ÑÚÑ°+/É°?©]%A¤ñPZ…×? GXB6WAêC0B@1(·!è +šI*RI&˜g JJ(BggUYN Ú N–ã$ªS€ !jPÉ)+%’)+'R)p/)‚À/-zÀ -1JÀ= ++pmÚF F F-;ªF)0ˆ$2Hx‰$’ʈÊÿ5ÊÿEÊÿEÊÄÊ¥0! ôÀÊÿaÊÿáÊÄÊÄŠHŠºÄºÖ’Ô$’’”$ I’’$$’ ’S’ )+'R)’À ’F(F(’1HVP˜ A¥5Vþ 9‹0—å —å—Àñ:0†å †å²GÛé&=9Ý8Ý8Ù6\5ôÒlU'U'k 5”ºM·/p»Ÿ@¡%O`ŠåÃx¥%R¥%@¥%Q`šåä( :Öd4/&u:|+ S?O°±: ++ à”å0‚» ++ » ++‘’ÁàÀQá;3”åÛ ++? 1à ++Jjž òN à©< ’Zâdà6žÆž½2@¯ ++.1ç"p4XÌI=/ @ 3/ 3€±›ŒXwXt’å 0”åi/Y; ‘“îÀàÎPáU; @”å°\0ã< ñ áKÌàÄ\á8[  ãG ÁC! áËàÁ[áVg'0„Ë ”àÊŸ ”H_àŠåô„¥)RD"àVg&L/ @P ” PPLΔ" S¤ ¬ Tp”"0X^Kì\/t |tLød_šåL/ÍLtLý,*ù8±0$PNi/ @+qý5 èwW¿ Do €%-ù…6BMŒP/à ++HIkPû@@@ àÉ,k½†Rkç¼Ú/©‰>¢òj¸ß ' D89/©88  &l›  /I  |bx_µAÌ-/Å Ì;/ ++Ì_/‰ ++Ì//Í ++ÌÏ5”åVP( ð% ÃŒ¼p>P³$x¡hžL–LƒtL+ LLA2 /àA2iXX½~AØ@0žà?ÊfÿI2Ñ9/Ñ I24 ++cSI2ãžüy8üTü .… üè’¨ü/É `OŠå¬H/HjHc¸( !/±ì,/à0/07šåèè#/uìæ¤/¹ì'5F ++°;Pü%4C¶Ï2À—2PPB”¼RõP ÊðÒÜèZêÜÖÜÞîÜG +++‹\Iå\#p®/*çR ++«Y’å0«s‘ËàÀ[«’«/àˆ>.Aws «« Ts•T«X/åX« / ÷ /òYbpW #b#o ŒM[í”L/@g9Ú ÝjŸçƒ3‘oƒ$2/±ƒ@ƒœ/õo ,1.òÙ`2”8.S6{Wgâ# hB–  yaÂÆèZÒÜVˆt"@×%%^np Q5Œ\rƒM‹ zf qá–^Ž{—9‡Jl I5‡a ô A‹#àŽ¸3%Pˆ¿/… ˆ8< ìs csùˆ^@=<+M‡ô 0“àN…Q5N µ5NåìõØèr\á–F ++BQQS€Bä‘Þ¬2hp:! ++˜` JH@p%¬TR –T!HŠu Ê”ÐÆ:@Ú:YXØ`lX ++=xtSHR C<.9B]òPÃ*?Š=r]PiSAHTV¦š OX HTV"äV_ 0—åV&×V? ++P)$2‚â …$*jj jÌ„nÒPÖƒÚq+"pÁ$ ßÈlL„LLLJ#LÛ®XH ++b ,8á N"f HŠ=/5{ÅDA7ï 3°øfú%à‚f¾b’ÃàÀDZW ”åS # @É$‰•+"pÈè^.ÕÍ TWQè4ž4:è0 áçœ ÇSB  (ù2"^·æa6 .UÌ ++`çŠ$  /¡˜Îz#Å/PPXû[¬T±p´PlP$šåü•ð*T/ @z%™XD\°wP´õ´[(=ÇO”xx HËþx ++'€ Ùœ„ ‰2<BØ 2:š/Eš  ++u6”F*8/</Á<øDÌ/ <3/Q<î(."ûîÚ`rbî3¨bZrUTPî/3šØB° "Q ¢š"œ"X"|?&&0Î/‘'0&6 ++·’u+·&“§ë §/ Ÿ-ì>&púè/yè·W)ŒØ2%/Ø2W0€Ú¥ˆ7‡‚îÁàÎQá3¸;álúú+w†X ++X K /߀$þKŒ¼/Ù4ß„?Ø4ß1.úZP:œâ…&6Ü” ++«ÈBž xT&ÕC(*»â¨  n+Á3ã0Oªü¿“c0”åà#¿“”¿“w‘ Ö9%zØ ”"{Ô_ëÿÿ ++×7Èu›3e3 .¾Ý;-Õ;³/³Ì< /­ÓEáâO& ++JÓ! ++àÕÊ%¨Ô8Pp4z8ýàZržäORœ)€ÆYØ z` ÷B' ++(z ‚ §LšPÑ/ ++MΞ³ Êš ³ ++ @`8#BÙ¸Y 'kÀk )Zk c %1Bcäˆ@"^0th ,ù4 ++Š.E’Š5`Ò*MºH ˜Z¦¤ M8 HZÀ /³r9_L£ [rTðh„Ȉ´129ÐŒÚ]Æ9–“69 1‚˜*C á’˜ ­L5Sž7$%¡^$ $69P0… .õpT£`Í,/E69T˜69969<‰69@ÝT698969D/‘69  !n? [€$½¤€ 2G q0§j0!F9T’1ì‘F9Ì—¤Ù”ì»ì!d’ì‹d/rd[É’94¾¤» &5FBúŸƒ¶ ž- dž- @, õ¢9ž-/0„m%ˆ­FqÎ9|8<gW ž-#j.9  ‹Tž- ++ðc /¡ cÀ/á r\k`y`ûk´5/q ´K/Ñ ´_/E ´3/ ´3/Õ ´z<ÿÒ8/z<3/qz<^z<&ÙJ:z</!z< T z) ++‘%/Úi/ © &7Â@Î=%Ïå½R]Î=HZ`8Kš=²^²¦ª e0 H^²"?²m 96=U$òªp  pO'„u ²=V o`/en<^ Åå ++ Á â1õ ä&2Í "/„x7’þ;;„G+”þ;ñ hV/ Ù /¹Ù • &/þ; þ;î þ;þ; þ; Ú$ÉÜþ;(.þ;)/eþ; É +d'†9* ¤ èæÌ ++`Ì ++MŽ$.•ÜäÔ/ݾ /-ÖxŽ /iå æäÁ> ²™Ø RHzlR9/iR  ++Ãù„öRDÔ ü»‘íœ_dñR -ð/¸/•R }R­ŠB -P`Ñ, ü!FÉXE1-8 F.Í  Q×ÿÿ ++ÀPŸ±zÄ/ @ŠIXXØ .… ++Ø êZ/á ++´<Øm>7H0kŸgh5/ý h3/E h;/• h'/Ñ hC/) h4’ &×Ý"ÔÐ/Õ,.Î8 ,&È8 Å$ ‚&²¯æ>§æ>/”² $ äW0Ð\’(æ>ÁJ>P„ àTî>/:?&àX/ Xö>mX°HX¢>"&ò>"x 9"›uò>>ªò>èò>æò>Z,ÈZ,€qÀàÇPáÄ!‹¥ëu›P !‡P… 3WàƒéH°Šåø/ @Ú)a:=pH(šåø\P¬Lž?Ì2°&-.–?° Cžà°/pÖ* €$ZÖ*"pàÖ?`  `” šåhxÆWtP/àÞ+µTTòq Ù' ¬° Ø»8\नd™¥/#+qbÄxÌü (lÔAþ.è /Iè Ô d‚@ ©` \ÍÀ$+ `,"ãþB"/Ä/mÄ /ÅþL /¹YJA/RþÄô\ áš'$/Yè/0ù+©` è1 ŽT <Ö! áž"ÁàÂQáœ8*8},‚èe 0’àc8ت'0x+Ax v"˜¦E9¦E5˜ fE0@q§qIj0ŽúAžúAbE  ++@Q:í¬9æiàÃ?,5Œs?²#LL<Pµ”¶)/0M!ÑP(”‡( X8+-Ô \Ü&iÿ ¸‰ì \Lh Õ¨x ¬ Á!éá3â®$ô3T E„¦ p °$¾$^¶$1ã'•Rá ++ž>y¶"ö#Š¡/‰Š¡茀*)Œ€%_º¬G±—]¹ØÛü|&Cü|@°)°%à“{7{7¸{—Tñp7~ª Õ€|3/y ÀŸ“õ ŸiJ%/ 0!m”¥_¥L˜N›­ŒäšõHO@Šåý/Aý'/}ýà/Õà¡%šl Wx¨%/U¨3/¨7/é¨'% 0Nœ¥5(”Ô¬E1Zê}!s*¦0»¨="QÒ¦dØ")0 ++ Ó¨ÿ&4 ù&^ÿ&k ×A)6,Ï)6%²ÖŸg/@$+ù ++àè(¯&?^ãe)6+? ¨EQ¨EBwÀ)Ñ<²Ø¨EA6¨E‹'/Q‹'w‰pEwè'/å¨<|/uêƒNìG„E"„E"&8‚Ð_pH„EI¨' ZW¢$ß$ÑÐ{d&@3 Ø„%HE¦ê$€@¥o% bH0ÌEQâªÌE¦ ÌE/ " ++a'M4 ¨û_*ªû Hû Všª('ÄY ê(' ++2 ’êX''7X&XáA'/@áá%-ò’/ Ò &5j@;FPe'R%°S6_(ïdp1FˆB'  !,  ¶'.SŠÂ¶'&ø À~F (4òF€Á*c‘҈)¹Â®ÆÞÜÔêÎÂèÊ-¹v¬  È 1¹’1¹û ¸ p ( ( &0l¬P „â ý )!Õc“åà!Õ“ÕõMK`EâW…AQ6à ãü,± ãà‚à‹ží !„àe ƒW… Ø°:T7ü%”’;ô@j¬¬Q:V¨¯†å0†å @†åýô¦dï‰-²Ú-ü0é)è-ô†Á¸%F ++B¨a515¬H’,|À^®b¸2<Ê÷ ° x "ÚÂÎÜÒèêÈÊZæâêÂäʼxÅ$F/ À  (º!›Â&;Â\F} ‚â ‚Þ, À3‚æ⃺ßêß;êßê 8ê ++êß ü ++$B’!î*¿70flX„’NÃàÄSá6¨J? ² ²~Á”vŠs“›7³qLÔ_€‘CÂàÄRáTì¾!Stž¹¹ª œÝ±/Ù±i‰à6\ /5œ<³ ++î@p+yp÷ ++½®Ò*ų ++Î*‹ /àî.ДSÂú1, ++â£'¨° ‰@*°`/24‘½# Ê5,XP-°@ ++$P°ë6ë<ëë²*ÆÌØZãn @ ++/aÿHg-g¿ÿ ² &üæ@Òæ@ÜÞè@Â@ÆÌØÞÜêÚ(ƒ´ ++ôÊäÞ~2 p §kN¬Üš( )DifCg-\?àt.8? àŽ&¿9ïÿÿpOàŽâtPâÿÿ ++ãô¸)3ö¿Ò6µ,[Åÿÿ ++ÆtÜ ¤4ºÔ0W¬ÿÿ ++­È wDšÁ) -4²Ç¯Š7p P°äX_´Td¶ÜÂÜ+1 ­Ï+2þ‘‚ä· ~›  ÉE::™3e`ª0àá­ ¼0³º#8 á@àŽâ @4 á Tø!™å0‚à 0Óå@Žà«p*òß¿ #7pe6ê”0B ŠS€ÊÒ(æ¡Ü¾ô¥4ÖzVqÔq ++qÿÔôÖr4ÚW"ÒÌ"wØ %ø ÕL#XðÓBãzã´÷`àá sQQà@Ž³ KQ]Ð’åâQãš8Á=p 0@àX«÷t0àã.àGy_k$à Œ  /@§íÑ6Ä­ " ºo/W.M©&@4¬y7 Þ"y7¾ ”17/@”/á7¯ HÑ$سH“œ/0ä .}œ7 t´/à8/Éèh[ 1¸³¸“¸'¯·lÜ|/ÉÜK/)Ü//mÜ;/½Ü3/Ü?/YÜ7/¥Ü70ë!ìÉìžìÅë4 /ý4K/]4//¡4;/ñ43/94?/47/Ù4k44 ÈB€²Ó @òØ'é+ ²VPBN` M1Ú0&Zx`0! ++Ú! ++',ªi/ji/’i/Êi ++%0’,!¸5,w/Òw/úw/#2w … œ 4Þ  ‚ÆÞàòZÄÒè# Üó/-x ) *ˆ) õ=t=p=ðSE\EX?T$÷7&U0tSÅ 1*C1 Pã3 á Q!•! +õ}‘è* áGRã!”””! /…é•A ÂÇPÜ‘2”$"˜â*1Þp¦@ÂäÎêÚÊÜè@ãd`@Þä@bï* 2‚ ,ãâÌðÄÒèZÆÞêÜèÌ#8¸ ³p³aÃ1¯"0"à¢9Cãø!@.·1ÿï"'0_Ðàƒà àÞåá á!4ç†Ããÿ?âC1`(ßð1 á!( á Âãÿ/⯊»à €à Òå! á!lŠÁãÿâA( €à Ñ倱ŽààŽààŽàÒXRœB?ÿï¸ ++"¸s%0¸/"/",à´óÔ$-ðÊàDLO O@- —Pà€Xâ $›?ÌÒð‘,4æ"o gžä ¨ p/.pÿ„cº~ë G".âìÄ@0Žâð1à ›&=Z?p€Xâ& ++˜E@Ò眸q±O„l ¸@”௵`AàŽâ%dÕO# —༠+‘p  ¼ U]L÷S +á·PÃ&…ÇÔ0@"àM8 0,"0<0´EL@ Ôç¤*B!2 ÀT4 €áèS à#t0@(.¹8 &@Ü P, 5^PPšåÄç / à6/i62@*¡2@˜x ! X>4ÊQej à £ `ÚäØ K£é b2ä€ ê 8f - æ ¾ð .PÆæRæ¾ÄÒξÌÒäæè¾ÄÒè¾æÊè @Íýƒ`Æ8Bè  À È1ð à‰å4€‰å(P‰å ‰å‰¼D3Ó4€™å(P™å ™å  ÌPRèì Lm'4ì*:œ@"æÊ ê|/P " CÐ  33@àÏ+7 ãB  ÿÿ…iœ-“ÿ “_ÿ0â—\í—KÄê–ìHxH8H@àÞæÒ K_ÌÒÊØÈMîMœM>îMð¦˜I~ò ¸ ˜Ð¥À4¤!8!à ñ»^Yœñ·}!à‹`Ã<´È3[á¥P ˆ[úfª¾m K1¹àŒ¸ àã0#à0 àx.U|ˆ* ˆ ?=0# ¥" ‰ƒýcd¤Q €-M°í'ý±ÔYp!•H4°šå4@0[à2ªRtSŒh õÁp} ++S  :0Pâ =1@±E|x /9õäêVp©4vSp©¸¥8–#À” éQNÀ”mIp!!lèŒ$Ñœ" h˜/½˜/¹Ôµ%&t—[¶aª#l#h0r0Ocºü1/UüS/½üc/5ü7/ü”$ „$/ $ Ø0\Úÿÿ ++uèdqd^Qÿÿ ++\ü\/ €œ , €Ó`*ð`BÎÆ ++PHk*û ++ILH>G ' ++0 qP êòZ%ô ++ð (ÒÜìÂØÒÈ@ÊÜÈ@ÒÜÈÊð@üæE!,!ZæèÂäè#/h•)/0ƒ bq(hH(CI™  &tò ++872ð+H4ô$©v$BZæâäV ø ˜ S lS dÈ_?p Q‡å ‡ÿ+{ L)º¿?.†HYMR“íÈ‹±@ðžíÈ‹½îêî á@´mpàBàæ(`šåðH ó?¦ŽÏ Ï •|VÃp ++,} ++Bšåpon–0ÇS ƒ6 ++ʇ@°˜Bö )°?Îý”R_0àšåOÕÕI NÑÑ ]cCÕ QIéÕØöQ"\{AM ++0SR{%¥5K ,kJ”â*Ë@  ãXàå pžåý4à á‡F ¯<žà`%šÐ d h%" àD4påç-@ƒÿÿê44!†™ã`/@ÕDü * à¤xÓK M`¤ | U` M`9@Š`{¿ ac\ ¼°Ab\d"db‹jÐÔ¼Ÿq¡b/AÉcÀ@_‡"bÕeS`jÀ£yàåpž:— £™X©àšå0”å ”p/õp : T ôh( Ì@šå 0ã p ”à ++j?²—𧑯¥ìe4× BTàÕ4 x´° Äh#³‘¬Ø#¨³ 1à¦+13㎉n‡°Òã^‚ áÀàÜÍ{[  ” ðˆ|Û Œ# ŒCã1Û /Û JJüESRâAg0”VàX4@šåˆ/ 3 ]È$ 1g D.¡T¼±±TØ„/ „‘ € „o=Œh% ”à”èå7 /@§”ñP 83šåGØLHth%´»1&L/@½f‰P</üþ Ù ãH, <. HAg0Éh .i x(*_þHDpÌ Õ´Ûl!ìýüŽƒ™ ++ + ++œ áÄýÿê8 Q8.¤ý” ‡ýÿê| ++zKT`æXJ 7ôHˆ @P híö< 6ô`   7ôXÓ V/°"X"+ÈO]I$è},â}%Ø·×%&÷?íUV ++¼ p0 Böz×OHP.8%w)ºö ++“Yþ§ø÷/v4-¼1ú.ü„ðØ &HâêÞèÒÊÜèZäÊÚ³äŠ9TŠ9f+0ªSɳ’å0âSã='/&!0,oÊ, ŠÎ; ŠÊ9+É&Ê9çîA% ³ )0 ÈBjÆ@ªü…úN(æ_ x3" È•ÌðäÂÜÈÞÚººùþNþº(’Ø’(’’/’M%LB {ÕŒ#€ ‚@)33ÂS+ —ÚÁ"8mº (+  ínE «NoNŠŒŒ/ŒG"Wàžåº¿D¯Ú§§˜˜å0à㈷ ¤(ÍŒ Jž}]È"áÚI@TÚÇ Aý¥¢<‘ä<³/t" to| <+|Ÿ"ho®¶§ Õ‹x`*H 8“4 h *HÄ· / 2¿Á»"oiðD.D² ÿd ¶H*X¢ mhàXH@ÿÿ ++ÑcP½¸LOvÿÿêè ù<YgR1$… ¶„ .}ïeG 8 µ8j_Ôÿÿ ++#2:âLA"xQ!¨`:WC$ø‡OHX 4‚Ú$f=q’@ s ++ ++Ò UE,% Æ >C8B"U(Æ"4’0¾æÊFWÉ  èµ[Ã7!pâàã^0*oOA áüi[“ ++€BD8ó*¿9æÊèÃúX ðúZ áÇ øŽ/OD áÓ>š XÜòÇÄZ ++ˆB80(2 ÀZÀ® ++a(X $}Ó ÷ CË ¥ +a¥ApšåíþŒ1TãN ++$ á»“ üM#d0C@)*) *E*#p' áp'†”.†$ü! Ð(C~ ¡ ³î1š†åÚ ++¸B0xzÃc/ Á´Ì@ZZ ++¼¡ ++ÌØÊðà0øE"h ä&„ÏíS+, c%JB“%/©“%Û2» ¢W-èYYË\j1æÒÜ?æÒܬkÿÿÿ!ÆÞæB%ÿ?ÆÞæÿ¬ÿÿÿ"èÂþÿ/èÂþ­ÿÿd  ÌØÂþ"ÿ¬ "$&¯$&(¤ %* ++˜ ¢(*1, .w# j:à#jPSãH10ë8#D2æQIˆ0õ– 40ÈQbÊ,Qõ&,_`¾8*.ôÁ0ÌØÌØÞÞä`2ab¬0b2bÁ4ÌØÆÊÒØÒÜÎ6¬46uþ 8`S¨ ÌØð]Nü OO2#`ø1« .q&tE_š` ++X^(ˆE/5ˆ»´œ3òs?z ‚`8‚80Y¸°HB:  ˆ _ØÞÎ «•·gG# ¥B´3Wec2„gx)£#ª§‹@i7$D² t'0?!ï7øÚ*©îQ¢Ÿr$¢<W¡ S :å¾A$€˜Ÿ B8 <=¨<\-\v Z: ++0ý7%h>ZP ++ šº! ºˆ/™ºg#@¼ho>°@V @V CJ>±d@@hÑBÌØèäêÜÆÂèÊwD X PtdePeA· ®î‹:2ây ++yøL0*#*&#*pPààã®à{ ’åÃOß ++à€åà’åà€åÀa*Áç90’`¡ t"`¡“`¡ ¸sñçÓÉ3$]6¡ài@’˜+ ++ˆ‡lyBz±D< ++F¹hiœ ++jijiÀ1ÔfOÊFà ++Õ@mHÌØ9i(` ;i%;iX ++/ÕH J (  iµ ++ZëOêJêL]o   _oæ?oÍR0 ++rmOpLçNܦ;ë*ïGNïPïá$ ++ïÞï\PïRÌØÜÞÜá õ2ŠõGRõTõÈ& õêÙõ\TõV¯QÊìÊÜ~  tX  ˆ |ª´¡]Ž© «Lh ++A ^¥ !"‚âE,€â}› Ù t<`v tgŽâ„lv‘ ++Ÿ ++@B pE ++  Ò`xp æ ++bø"Âðødø/Âðø‚Øøÿ ´ø<øÿ<bø bø bøbøpø f·cêÚÊäÂè™!h‚(° p op fp S›C=­Hš"àáHX CC “ºÄ’-,NñÌ’<.-<“O£ÝI/¹„ ++O@šåš„ ++“„ ++;òØU fX®O8fœ ÐmOŠhT ++ÅjÌØÈÊÜÞÚÒÜflf*À hqØ hhUØ F"@à p‚,$€4ùp(5pÃô ;Á ˜p‘ppPá hylyO@jÍ _šlyny’ÒìZÂÜÈZÚÞ1px$* ß'<%%%%%ãt| -Jýç'Æ¥pºB^V!nn nzp01r ++ƒ•tß" šµ#KËþt©#dâ“Ê ++Ê$ À‡€:˜ ª! ¢ïÜHBE8m“y”y/IyL ÓÁ—€­$}u­$hVß?XÐÖr% r%\ t%v— ºx˜~8– ²à%Ö/Á1²1¢1WiLMÑ m;Ñc°‚âÑ›¯#±Ù²©ÍŽ•Ž„»bÄ ++u„uÍŽ ÍŽ ++N¾(øÍ, ƒ,&/),cI,! ¾)€/y)*ÄÞ;A& ++6ø6?PèNvN vN .ÅOx ++0 1|g`ý`^z^,Ø hôà9— êhÕh\ŶB+"QnÄØñ ø OD=oBH¡>ópÔŽ —uzȆXH*aJ d ‘“'‘“‘a“8Ø ‘“‹' €¤’‹íI™Q ë‹ ÙA.$} $D€â ˜ `$<>)îO°XlT/p9qɸ9q¸¸00òú r8Bz’x•#0µ - ++x¸?P%~?HV |Äã|rãOªzã2€ ÇÚ~‚#p ÑÇ9 ½PìÅ™9 ‰÷ B©Ñ(pÑP+ 0Õ# Ž’Y1Õ'' ƒ±’±Ÿ“¿ ˜= ++1 %“¿ }¶iÈk„\IÈ$/wïÕ}ÕC<,9~@¸÷`€ò €ò ‘‚é„úÿ~•‚• ‚ú„ÕW†Ìð}tzˆ x ˜HáNž3½N$b ++whƒˆ©NJDºE|9/à1þtO šåºõ2 ²†BXÓ†¡N/†€p ’zzˆ(T1Š ++ÅØŒØÐÿ5ŠÐdЊЊРŠÐŒÐŽÐ¨Ð`Ð  EÐ0Ð!ÐÐÐÜ8Ä‘%ĽÄp²Bj¿Ž¿Ž¿ Ž¿Lb¿Y’ÌðÔÉ”Æz,ˆ ñŠ € mßëOéIPUhAw6 ÉI/0¾Z•;( \9M—dBÚ_PSÒá ãQEšñ ˆAà€âSàƒâ®:\¡OSãD [à@DcD/´à ++74 ++R‚sÓ +cO0šå€, ++yç"60’8{q8R”_~ñ ’úJ’Û Q b”T ++(2– ã÷˜÷#@ îwîdîVîGî8î@îò ò®㊪ A@„âÞöÞ0D0c0ÊÄʉʂʖÊD˜(Ê–Ê–Ê –ÊO˜ÊšÊÁœŠ‹ÿ*xÇš‹š¨‹ œÁžÌðV^ÆÂääòÄ j)&° s¯pæi%àƒ\n€à“àz~±-‡º("ža ãP>²T»Ù“Ù~¨Qo3ã`#R¸ýy|QÕß"% ]z¹ŒWà‘å?îiŸ8®½CQà]c ++@„m;#ët†Ø¤RCæÙàtl Ùl S5q<²p4£ =0:k\mIfos*bVä#!p9”# €äV›žŽ žt< ‚  ++0t¢³Z³¤³Z³S³^³ÿÿ–Z³¢³ ¢³ ¢³¤³¦³T³:Á6 ³&Y³¿"HW9ìÚÃP GýNÁàÄQá rµîu?”ÇõÇàS &Òh#½hȈwk"@k*£€Nv  m-<5À±-ÇíiÖµÖµeþQþôO _.×4$0Pá .x ‹kP‹kh[00”oÇ j+\ jë ++µ.= ++µ“Òµ ÉÀÔ@Å ++.½l"@3n¹Ë°Œ`à”/ êðž`Zxx̘ Ub¶t̆sß*™sJÃj&"Q /Ùs3·O1/QO Oÿh¹hãP/ PÌ k»T œCNº=ÃX0ÂXZA€@-Àa@âiPj0jøi8aH8aO(¦¬nSº¨n÷fŠ¨hv¸0H Õ —3<ª,]M¬ P #  ÜPTãƒÜ°Ó ÀÈPšˆw”ÚL^ ++Ú¢*LÆ}:~*4Ö_*0:~,, 3R2~GpýGpù2~ê­"0ôΤ8â8—8Þ8à 0RàÁ` ú}º{6¡Ö­pÌdOpœåR| ++ ôfÀ>¡â­4pšå«rTàTâŒØ ++xæ~ |«o€ ++Ct+ñ¯oÀ „Ûn»rT‰C à ++80@ à ¨Ú¸9O@à¤V” ++Ù"*…X šùìI!Œ >¾"À/ à‡Ë.ùˆ"0ÎË2~.À`d× MŸuØÀX°li¼gq©\¸”Ì ÷‰ `¯r§\,iÈgÀ/&ÿD;d;Ä" Ȉ *1ˆ$" È&dÙ—ºà F!Ì!ýÌ/‰þÛþß yLZªØqXp PK&`¬&`YÇ&l|00cr/ªR5ªåž€ÚP,s€ 0v!pó¬ ++@P$®²[äÞèÂè툰 !ð %¢EÝ{ÊÞpn3ø' ++Þmÿ | ÞmúšæšâšÞš *Ÿš&›b¤š"–š€W€¢*‚¢~€zPOP0àMÎ 0ã!º PXÊåF6 ¾¾M ++ÞzßJ õ{R ­^ÚÖÔ*KTâÒD† ++Bd Jnú3ŠåÊmšnxô‰ ½}’úi}Ж[*-@æ y¼ MwÍÕ}n"@I10ƒö‰70SàaŠ~ 5yCàŠå =}| ùÅbI  BxØÄn"A Cà ò1 à(¾"T5@$°‡/œr? áJê ñ¶n¨‡?šuz O>}äÏÜD qD¸ºi |L"ðôˆ t t‘Šÿÿêšå}€®, °7šåZî¬H .QJ ¨{H/™ì.ìþß+&åþÂ`aÚ¢dFpL/IL²[¶þÿ ++·¨/ ¥\" `n X|.ñ¢ '0Ž" ++P!/©PùP°_Éÿÿ ++1b ++<įvynÒ®ò @á â‰l$Ò+®æ{ |`ØBh‹&h—(`, ++ ` ++= ++X°§`8J° ++(p 6°`Œr¡•#b°ä T®  ++ ++› ++®P ++ ++– jUGhB*\ ++®$ŠJ ++\²$Ìð ++VU> 8 < ++€mRà áp„m)ƒ0xWD¢*ä SWá ’U*Ø“!Ç!(@Gà‚:1QáR¦0$A‰Ðxaâ@ ápàã7ððÀã ápààAà$7e¹"B!š 0"*þ ++Âã à! áà‚áàà0#à@ƒCVX&[ìÊV§ú@Òæ@ÎäÊÂèÊä@èÐÂÜþÄ²ç ˆ#–W UúÈÒÌÌÊäÊÜÆÊ@ÄÊèîÊÊh=@ÂÜX{·èoŽ /²]»¸&ÌðäÊìÊäæv0ºy.P !ª–ƒzp+(y+(BãUš FÖ3SãDæ6æ4"9 S˜ûPÊBàŽ–B†R°àã@ àËP~0Îã"Š( *ÉŽ ++ ZŠv /ÚÚ Ž ò:Z </<‡è€7&)€0´[E¨ HQ¨'›0 Q¹§º† ++ Aâÿ?J¡ ++ ä‰0Žá  AÃãíI „ch  +™ „¡šåÞÿÿê 0a€@Æ "23>¡‹ý&âŧ`‚¶þ£ñò€@À  `àPÐ0°pðˆHÈ(¨hè˜XØ8¸xø„DÄ$¤dä”TÔ4´tô ŒLÌ,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò ++ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–VÖ6¶vöŽNÎ.®nîž^Þ>¾~þAÁ!¡aá‘QÑ1±qñ ‰IÉ)©ié™YÙ9¹yù…EÅ%¥eå•UÕ5µuõ MÍ-­mí]Ý=½}ýƒCÃ#£cã“SÓ3³só ‹KË+«kë›[Û;»{û‡GÇ'§gç—W×7·w÷OÏ/¯oïŸ_ß?¿ÿˆG¤J´H¶GJ Ìð­]K¸¬$¸Ë !´ ¸i!_ "ºi!5¾2ãO~¼ ˆ 'U¢êŠå¥ëßëWÐ ++¼< œ¯ç ï'ª< (<›¯–i‚PP…(PzPudU·_ÒSáLÊšå} Ø%"ˆ­¿"à\10‚« ”`Ràj!l@ ++ñ(í»«¨É0ã‘p Sâjw¼ŸtäŒ Ã"¬  _Ý s½ 0 £E‚ˆÄã Rã&&a Bâÿ³ &pl‡à ÐåE4ê[Bƒá!À¥íy!P àŠå$²m(.¢ü¹((¹RP àšå$TmÅ”1 b*A”5‡$¦"1Œ? ++ 2 ¥$ƒá…õ±3 áL/ àL[¸] 7”äŒ/Œ ©‚<8$8  "$$«<8ˆõ!</ ଠœ  —0Xô¼[ø´/0”¥\\š?œX¨ n˜ñ”­ñ"@ ÜQ %t ô*etæ`/0¼ n¼­ûdÃsRãüþÿ ++¤T/ àT+TP_/M ÎTp?p"Üp ÕˆÛoàÿÿ ++’þ™„#¬4 4Ø *­Ø.!þEIF^šÝCèÆ a€¶˜LP Š¼Q„¶˜ÌX#/dGx0`O·(´©X?X…ÆG¼w ¾p Z2$¾ ¾{ ¾/HÅ|r¼ ++ƒ • /¬aA #N ;$H ‰HT +Z /Z;¢ë $ 0 )fH1C!ÀI‹6ÂÉ«pÔ@„Š!ƒ3 €Š éo€à ží€Š %I–M4F†à IŒÐMâ íŸ íÐâñs‹5Ä ++ØæGýLXBÆ àÌ Hù™Š™Š3/+e›.%ëŸ!¢¤0âõÓ_L ++0ŠÓŒ'N‰ʉŸʉÏOàÌnÎ…Ð…H…Ò…ŸÒ…Ô…uÔ ÖBØŸØÚuÚ§o’À³:Ü ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Ó8,óâö˜B Ð  L0Ÿåê ƒâàø à‚å,°™å Uáh*°Kâ,°‰å ‹å(O àƒåHPH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨öÿÿê(BTHæèäZ|ÜêÚ BN   @öGTãk0 ápšå°šåQãd ++ã1$à™åZá)*€Xâ ++“å0ŠåŠå ŠåpŠå°Šå  Šâ`˜òp–åàâàŠå@ ã ð–åä™ õ  Jâ0šåšå šåpšå°šXÀ#Táå”ÓÉQãl ,/)µ0^á•Ê9¤õ0àDà.ã á(^ãºà ã^ãy(e<Ø0°Šå$"à" àÐ&àÄæàŠå á  ãÀEÿ/áTiT@bT Tbà ãà|LoL  LdL (LxL @L@œHÿ  ã Šå  ã Šåal ++Xz¤Wlÿcÿÿêà ãaÿÿê ã  |/9Tã ÿÿ ++hdää˜!јf×þÿê<€0ÿ/áÐþÿê¼Ox!/I l$/¥lDœþÿ ++ð Hó2êÆÐÂäZÈÞîÜÆÂæÊXB$È ++ò0Ê0BH X àäÊÌÒðf"ø áà‚áãÜRáf ++"Ð ++µ» ++àƒàž~_ Šå$v¢ü‘$$ú. þ›’Áà‚â Žáã ^   Œ’ ++à_üXàšå úRÚ6Ê úXTáK0 Dà"#úRú ú0Rã7ú R<Ü4 ŽâB2 â4o4 4d4(4x4@4ò’àŽâ ã ++4/ laX ++Dz€WX Ì  ã¦ÿÿê áôrì/ ìjlÿÿ ++iÿÿêì èh_qà.0ÿ¦")ÿ¦¦hÙh? ´/%L`ýþÿ ++úþf ++ÚYÀ ++÷BD  ÜêÚ`Y„pšå°šåa¹a­a”aÿ$0Šå(Šå ŠåpŠå°Šå,Ý‚ ¡,Ôô, Jâ$0šå(šå šå˜ ß cß ^ß H ^áß Eß .<{ÀWã([ã› ªp ã ‚âp *àyPp ãîIl+¿? ‚âT!L-LL_àžåLùHŠå ÿ œ -• O“ÿÿêL _ åDSÕ&Lÿ{x!/]xå\!¹\õ¶ÿÿ ++ÿÿê,úNá8 ++êäÊÂØ m@ àØêæõ1T¤ O@ á´õ bBL(B   ÌØÞÂè`5&p1o1c1&L1,0Šå0Šå$p OpŠå4-5œ"4þ4 Jâ,0šå0šå$ šåp))))  !p!B ã ¼( / ;ÛÙÙ,9_5½$  – Op/-p TT ù@fÿÿ ++P 5êùóÐ ++ÄÞÎêæXB ++ 7(»Ab¼",ŒòàšåÀšå0šå$°šå(pd Ôaã"ARá²!^ã ++\ ++ð¢ðf‹ ++”'PQáƒLaà ã‹hÀi[àgjL(œ àA [Ô ñAÈÜñ0‡áã?D1 á—ÂàÁRá; 0šå0ƒ &p“à#jèO ++ž [Ðqž P á<)pš0 ð—åСI0p@Šåšå,. Œ Ð: ++ _ÔùˆPÊÿÿê f jÔAf 8ðšå±ÿÿê  á áѨP[ô ‘@$šå¨& €à ãzÿÿê4 R0Šå$°`8\’ðOí8[z8 Jâ4 Ð^ŒWe¬"d¬±M ++,àšåàŽ ˆ _}     q4 ++‡DñC á—ËàÀ[á0€à p@àjáb(@Šå,ì¯ûþÿê á4 l nüwYÜê\DOàŠå*¹¶ œâ¡^X)C),/=)))NšÄ!.â!à!=m¨!¡!!"@. € ½€´ Q|%9gÞ €òPã\ÿÿ ++4ÿÿêòBXÑ•Š8xGøèB"   ÆÞÚàØÊð"`Ñ— @šåÀšå‰"«’’V’1Wã ( ã( Ø>4).pÉ,R`­€ZO°Šå0R@ù*0V4à áÁ,Vô ô ¤$Ò@60^áÇWz2\ ++ ½~#Ÿ~#à"pÐ/à©/Í‘"pÀŽ#jŽ#eŽ# (Rá’#I’#.@­wˆ%Æ#±$Žâܵ%¬  µi/ŽâX%& ¹ü)P½àPÁ ö#DŽö#Œö#lõ/1dšWJÿÿ ++Gš¨Ç 49!Ð&Ðxxxø0H, 5Ðë& $ô(0^/*…"W  ++$(¬'/0` *™Ö(´'.0` ÛÖ.ÅÛ&"ঠß&3SãBŠÂ=$š&@öÿÿê<ô.¾0#wv!0Žþ"_v+fpð |Rð–SªÀ¢/ ã> \å> 0  á>  æ&éŠOà ãä:@šå0" “ààÜ/uÜ%àš²4 n¦1Tá0Ž0û¦ ˆ*ýˆ fˆ*ÙˆÁˆ!>kN*_ H%'(í<×#É×#_(0šå,>-'/>(0 ‚â‘9'=ß9'Ý£NA_­ .¡ÿÍšo>p/p ÕTqT Ý\jÿÿ ++go>k a( !p¢1bA¢I(Šåk Gpšå$g "Ìg b#g RÊAg 9$ÚÇ +Ñ!<÷"к÷ }0 ++Ù=->c ^m&q9_$@Šå(@ ¢(? (I!O@šå®Ÿ §Ÿ _Ÿ WH ++(ÿÉ@V/$@oO?1› Õ@  “ “ “  >8Ò“  G“ “ P¨4 áM“ ôK ++_;µAC šåè‹ Là!8eM>&4_4àšåÍs ++$3s ++Gs ++ ðs ++ôâk ++P?Ç 7Ç / ++Ð+ ++ ØíØô ô Ï \ü\_9q\pÆ/ D!Øí| L# _:-@ §42_ü8¥xå@¹ ,á ß œ_?Aœ ¡o &šþ9pó ++x¹x ¨_ h$/!ð lO ³`þÿ ++üýÿêVºO 8Pé8# BÑ587 H^ \r( ++ »5^ hø5ÿÐB* @ äÂèÐÂæбf±D±Ô±Lùl/â±D<à á¥&}=} }}e`i/ÍÅçîF"e”iif dl=i5i,Ø/¥) ++ia5_ü9!åä¼Èaø0/a+/Ýac/Uaa©Ttä/ÿ//!S/‰“Æþÿ ++bþÿêL*lTø`O!0I 6@:  ~@pŽp‚‰kïP-7ïP·N<ÿÿê EL /Á˜ ÿ øpŸ ÕIÀ¨€ /A,  x-¹x | ' ó¶þÿ ++Wþÿê@Ò°Ð `xB.M2ð $%JÂÂäè^ÊðàÞÜÊÜèhlT ŠådlcêþCl?S„LÒ`EâP…â,à™å/::@Å-1à„NDöà„å „åp„å0„åð@B(W2ÿ/áïûSxw S‡º5 pškDàÿÿTbø0A,I,##ëbA@ Jâî.,£Ój Qª˜Øb ^)é,_ ã"Ì]"@ JâpSëÿÿ ++æxQÐäRÝ/ È!àƒ¢ ˜Tq“ÂàÀR¨@Cœ*a¤"›ÿÞGìZä ¡@ò ++ ¬D"<b¤sÐCXlŒob¢-Ó€B, € ðqVTãI`oA|ò0 ++à—å—å — à‘.„ ‘.,y=/1šådTŽ¬ZdT"žˆ:&5p—ØT]0åˆPä´Z@%0¿Ÿ ¸ Ø$ª N& ~—Bb,—$óL ++PBP`€xz¿ X».<·@|Nt$&Hf˜/` â. ++0f@$h>J0íNˆ2'ÈL&.L?2˜1"øf$šf!I“š0¸B,è¦4'p'e R4p'ðP ++@Z0B4 ( 0AI Š6AG j6A%X(@ò%€ø0·("pÂ3j*Z€ÂYZ*˜ZLJHB6|$|!}Iš(}oŠ(˜?8?8þ®PQ&ƒ4ñ HB2ÀB ++ÈB: Ð ÜêÚ-0`'°'/O-0V-0.-0°-0(:D-0° -0-0°-0$°-0ð4/×-0)0/ýÝõ(õ)&á.ý. !ù, ù, ±.b±/0/É9*åPèé+Å,]/1/ÅÅ,3/ Å,#Å,1/-/4ÕÈ pÌ*ÞÿI-E-/MxLŒ² / ÿA-`É,°„Ñ„Äx-/IA- |² @Çþÿ ++CJ>A-A- <: ++(±`ôB6(둱hB< )  iù! ©~VÀšå(°é>7²é iéi!0Œü ++i\i¥(G,i+éž<°i‹i›iDii™iDñi i*9­8i iϨi ‰¢H"&/(°iRÀ`i .åt^È^aiW*hiŒ[yÇ ˜ ++¿*T*CŒdB#›xeiÔÇÈh/˜ç§*le?mä!àŒàRðPðÀdpeÝÌTH$Ü"›¸c te&"l_q} åŒ¸_sÉ Ü”´< "ü{ú!X –þ#šÄ!Œ(|ÔzÔ_eµiØg›JÜR á›ÜFÌÄ€Ò[-3à*Ô¦$t˜eEœh&$  e/…h¨eéôi¤4¿t°e+AXX¢|¸e¡`&pôj cO$/ WxWW) ++€‰€x  ++p)ùpX•;þÿ ++‡ýÿêd‘ ++xh;¨vep%bZb2â<¡ý7ø9Ï ¸2PWá ++xWeHˆ›ÈR#8N[8&ˆ›˜›a%*< ++@<Žcf'*<¨< Q 6Z—`8²: ++@ÜHº:Üœ @œ ?8$œ !Rg!‚& ++HRH#’&Rà'B3r>×!h'f5B>`³€X ++@¤>/0Uf8B&ø)C"xìD48BBU6>HGbBBºCF`KQXx gr" ++XÇl’"°ÇC ’ǘ'l ’À'IJ2îG 2î/Pæ.-wàB<Pn0n°nÅPÅ/@íd ++¼…"¼9Z ++ÒO5J ++Ò:’Ò:rÒ±;Pð¿ #4&ð„D¯xSf ÒD€zFhBDß@PBF/~H‹‚9j!ã%³ã%§ ¾cpŠå0{Jg@—‚ #cpšå0‡J*~a°!\¯bp> ++”[ßCAª")“K á(` ã–¸!ßC n±¸!ø o܉ì\( ã Tà_0 [Üá_0)\$ßCrÒ) [™ ÚNªú)\L (—L *~<7 /Ñ4 YšR'p/Ap ÝX™X Ŷ!ÿÿ ++ÿÿêò(  évI ºFvi šFxÈADP7I úH¢HÊH!x&`H˜BJ[-(PlÛ†–+*ŠH/uÛ†WU]c; Û† /àÛ†/Mceya _S.àŒÉai< ›Q ÜÃ… ñÔ¤S²ÿÿ ++¯! Ã…)/YÈv×*/oÿÃ…#ÁhÃ… †ŸCÿÿ ++@ÿÿê&Ã…@XõD!8$(ÀX™I ÊJ™H šJ; F˜BJJIhBLódóÿÿÿÁJóLóLó-$1D`7IºNM iªN€"òLPB0 PæèäÒÜÎZ|ÜUõ”R72KHX $  †vo ++( ãiU/ŠÌ$q %1šåé»+0Tãh¸' àÀ^ÀKU2âæO¢à’åàâÏ-øyQSã'$`Sã%ª( .áô Îã\ |‘ O  áÜ-ˆ%Sã Puˆ ¤¤r”åàâ܈ . uU)40‚K0¥U¥UrK0P œ›d&qjPP‚ƒúR T(ñˆP .üæ@Òæ@ÜÞè@Â@ìÂØÒÈ@äÂÈÒð V ++HÞÞàæ0*$*bVXJ3"RMu(Ú &¯xtÝZÝ6(XÍ8Í q`qMq>q:šWù*A ++ S}(+" ++@yyy$/ÙyÃ/±y y™–#a.a„aLƒÿÿ ++4Oj¯/V¨CzZ¨H0 "6(2j¨#Z|@°l"5Kˆˆ $ÀH%Ô4  ¬ ¸"ˆ ÕG`Eâ.õ: †å&à ã à†)ï_*`¹n4Å+ ¸ å%H!ð 5+C šå¹ðv,à0a0003Sã 2SsfÁ0’å0âSãIYðiÜÚ”^ã6ª0 áL+LC0†åL[0 á$‰/‰/lå0å,J :( †å¬0Š /ã´€ìTÜΨ$=à$/$AàšåŒ¸BTãæ™&pÄÜÄÇð   ² “ ®ð¹sQWãð1Wã›… a1 R©ÊdqdDmD3ãw,AiÚ/!0ŠnÙšq "! ‘/0õm ¤˜{ˆ:d ‚Œ,‚å$,¬p¬¬$¬_å °, 0U‚å0‚´° 0°ÛÍU0/èP=2 ÜÐÔ/åÔ _Ýÿÿ ++rÀÀÜ"¼/¡¼$œ- ++ñf ++PŠhîäÒèÊZ`û ÆÎÞæ`ÆrêÌÒbäâZÊÐP\rbÌÚè!ðÌÈP\ ‚'ð' ++^ÌØÈdìÂäÒÂÜè `æÆÐÊÚÊZÞÄÔÊÆè ++ ++^fÈÒQ`°ÒìÊ ` LN!b]P]­0<!d1H"f= RÄÂæM!î " 1àÆ*Æ2Ò:a ++æÒÎÜ~BrÆÞÚÚÂæJ¨hp üÈ¡ , ±,ð L(v ÌÞäÚÂè +Áx HÈÞÌÚè¢\P(jßO ßä ö‚l`Bp ¨| æîÂà±3NzbE„=ô ++ ”Kiô ++©6RžåžÐ7Dd ++ é3¸7Lp0Žâ@ƒåP Ü•¤ŤŤ&0‹µ¤ 70›q¬ =¬» '´4ŠnàäÒÜè~° ++ñ8nXzp ++˜B¬H ++i’p ++' –z ¸ ¥0  /—å ++0 ++@ =å5.Õ5Ðò4à‚tæÒè|ŒZÈÒæàØÂòcèB'rB 2Mè}t}}Âf!v^RÂxV PÂzo5òL@†ÈòÜÂÚÒÆZîÒÜÈ)& ++(‹ ® Xv³ Bl ’·‡~>ÖB~  P|ƒ½zGG½%. @õ<:8*¥eíý= íH¥@D.1D9… ++1àƒ ++% 99|C0Žâ 8 8y1Þ‘-†‘drŠ€‘“àäÊÆÒæÒÞÜ•9 nŸðò~0€Xz~ ++ª' ++0°I :~°O`B„°Þ/‚E„E>8†7 =5\Â@ž°@Òæ@æàÊÆÒÌÒz6ÜÈ@7T6wJ]EpB ™#©(3 VÎoZl ++0Þ.Œ.?Xˆÿ$xc OK^^^&&ÿV&Š&Þ&ÔÙ¿& ª&¦Ee3Wã„ê?c4% ÿ†C ++ W Wž\Ò /‰€,Œ%õh/Š¸ È ¨qŒpBŽ¨/|¢ÿK ö ++*Œ1ZP0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #_þ, ’ö,pBn ‰  L$à™åZáy*€Xâj ++0Ÿåê ƒâàø à‚å,°™å UáY*°Kâ,°‰å ‹å(O àƒåHAH4)H4H4/ùH3áH4ÉH4±H4™H4H4iH4QH49H4!H4 H4/ñH3ÙH4ÁH4©H4‘H4yH4aH4IH41H4H4H4/éH3ÑH4¹H4¡H4‰H4qH4YH4AH4)H4H4/ùH3áH4ÉH4±H4™H4H4iH4QH49H4!H4 H4/ñH3ÙH4ÁH4©H4‘H4yH4aH4IH41H4H4H4/éH3ÑH4¹H4¡H4‰H4qH4YH4AH4)H4H4/ùH3áH4ÉH4±H4™H4H4iH4QH49H4!H4 H g Šâ`Xðp–åàâàŠå@ ã ð–r¡ø  Jâ`EâP…â,à™å^áç:h¹à†å@†å`ŠpphbpŠÆ:0 átJƒå@à_0Šå t¢ … Œ  Jâ0šåx£x x‡‚å@‚åG`Eâ8 ô 0†åàšå à†åâ`€åã ++Ì'|ÌÌt ++ht 0tƒtTt0tˆ @t­ †åƒâ`l.lô ll-`‚l/ y>@ ãðšT@1ÿ/á@Lðÿÿêßl0,Ê,¹,¤‘p7,|,i P2ÿ/áV8_3ÿ/á3¨ì/ïþ׿§w_G//ÿýçÏ·Ÿ‡oW?'/÷üßǯ—gO7/ïû׿§w_G//ÿúçÏ·Ÿ‡oW?'/÷ùßǯ—gO7/ïø׿§w_G//ÿ÷çÏ·@Ÿ÷ÿêh  t ++&À$@ÿ/á*"` .‡÷°þ€÷ÿêÄj"ÜÂèÒìÊZÊÜÈÒÂÜÜÊææ B P @"¦Tã@Tì ŒóRf ØÒèèØÊ BLPB0 ÚÂÖÊZÄòèÊìÊÆèÞäw<    vPTãNvÀà á  áã=À^ã;ºã-êðþÿÿSá(ÊÿRã&Ê,ºô N1 áàƒâàÎã`EâP•à* ++ò:ƒá áàŽãà†åBá áÿ âä á ŽáèƒàƒâàÎãhÿ ++àNâ 0†â ƒçùÿÿê@ á ++çŽ  n J 0R 4PTã)@1ã@`RãºBÆ 6@ á !„åä J ++õä! RðÚ ++BP(Z 8üæ@Òæ@ÜÞè@Â@ìÂØÒÈ@ÌÒØØ ðêÊ ++HÞÞàæ01. F/mö@ØÊÜÎèÐ x ++j9X0ì&%~æ(ˆ  á° ++àâ^o óàåàâ^ãW _ s9ª{"fZÙ.  ‡ ‡‡0‡ßSã®à á@΃ k¢BÔG4HãæÊèZÒÚÚêèÂÄØÊB¤/ø $­Ñ1à±±’8‚› A˜º ,° &½Z (?*ÒÚ ¨0cæpZäÊÌ‹.à $‡¨£Tã°`àÎãQ°ÿ*Aá áà€àÙàÞáA áÈâBØ ¹ê¹ê¹LL!0ÍE?àŠÞ ++( Á¡:¯0 .°wwêwêwP¹w‘w _?4²ç/° %ñOñ(ñ$a7ã"ñ0Ž#áõõ!þõ ++:ŒüÿRáO¹ ÎáÀsbïÕË Õ?4Õ/p %ÕGÕ ÕÕÕÕ4¶*µÐ7"µµµ`.fdé?( $é>éé—ãé é éð @žåa áFa áTáY õ ++ Ð …Ç ++B@h r‰/ $‰=‰‰‰‰ ‰Râàãï*}™…„—BDx … …?"4êà $©/¸ 'ʼnp á0 á@§÷ h!aà—å 9d7ãb÷ ‘ ƒâRá]ɼA ++à@3@ä”åàâ^ã/Ú7"LÚ77Ï AH á˜ApŠåÖ @Û Ú Yã õã pà ápšåâ @ @šåŒ ¤QDA áCqV‡à @Ž'  í ÄŸ +±¼¸´þD­ÿÿê°°vé/pŠµé Õñ$J‘ ÿÿÿþ8(xzXB$ ++€B8(" ç°`B`8z$ ++òW(h""?&4q*/À '‘iec^L TpºpU€9ïÿÿ€5ëÿÿ€1€€/ ãx1/]xÊÿÿ ++¼ÿÿêµÏȈC" ++:ö&ö‚ 8 ++""("x 5‚* & & ,* +lh¡ . /X &£„ß ++£!àR ++RQ“å£~Wã@‚âD :88õ ‡ ++ ƒ ++9öKö…8 ++à‚â È +È € á€ ã¨/ \' \'*]\'H—0šå šåBt³ ³1à€B­Ã. =^A áóÿŒ¸b¨+ °¬µX®%g,¹,¹“È2ÂæÐóDM!dÖ1@Pç` 2. ++(ç)(Ï0p ++Ï4Ï/P &σϼJE Ï[s( Ã×%e×`ÒË Ë¶Ë¯Ë0Ë0Ëi^DH2Ì"hÆ?*4Æ?64o¡:  h '¡Æ¡ô&0¡ ¡ üÐÐ1 ‚©!Ô-#H-9؉Øv¥ 1ã!U xdxÕ`a 8É/ 0Åm 0½1TãEo áàãXXÙX ++* ++—àšåàŽâN ++ Ü<@@à<<NU ++ €@ôÿÿê$/pLLOpšåáq Щ ++ÈD ++ /<wŒpÔg0*6< 6< `  ++£ a ++¦ ‰ 0‰ $XòB`8µ ö1`8 Ñ 6Ç XO B:?<4®>/p 'ÇÌŠwTòSŽºŽ%YŽ  ŽLb7“7#Z-/ÍZSÒÿÿ ++‹vo.<<î<¿ _x ++9ÎO J>7@Bà¿ÒÊÊÊZæÒÜÎØÊS/` ,é ++Eé ++é ++[  é ++‡„2 J'@ à ãí ÑàŽàšžíÉŠ·îo„à‹ŽíB(T2= q{RB'7h@÷ @{BµOÈÞêĵ/X ,µDµµž ž µµ?‹ží± ñ±‡J±B±B±?FD: uD € /}iB>j7ã< @7*)qâQ[ô ã ‚à›’íÉ‹·î  ã0ƒà0ƒàŠƒíM¥ à9+Õ9 ˆ àšå á•/0Tn)TP¤ËE‰„A‚Ö$âÂD0F@BîèGpF Fn?JDã ^H^/x /^h^A^=7ã;^^6^^9‹’íZ‹Z+ÑZ@%ZÌZ‹zZ{ºH0JZJZJZ7N+AÆÞàòGLG,@ ù*am,? X? GE,8,4S00S· j/b àƒâ.ás±$0 ã0ŠåàŠÜ$M_  á@M 0ì<*ÍÏ ++1@š–/ CÎ/Î/Î/×,:Î/"_ Šå”´2*…¬=_ šå¨p:¡w ++ÂâpHàè¸uBX²LÅ/NÆ™-o"L ++ = ++;P g}R  ˆ  @!TTãªx0Ÿ°ñ!!e}eˆxyÄ"!j3’åf}0Áã8‰° Q° O° 1ã@1Wã>0[3ñºAà[áÊ@ À Ê$‡â$ƒâê*.‰Y"°±p </àŠ5  5¤)Ð (͸ a ŠåpŠLI¢ü­@ JâÙÿ0šå šåpšå°šåZEa2ÒZ,øu@P VÝ*pV@ÆÞêÜè ôÒæ@ÄÊòÞÜÈ@èÐÊ@ÊÜÈ@ÞÌî*7$07q+4,VæèÂäè“+"E × ++pRi rR@ 'T%*/Z|1V®(-L´(RÒ!I1 )ðš\@%1A™Ðˆ7ˆ&""Pˆp%U¨C*ÅH8Lâ5Ë> /@=O@šåÉ¿“š¨Nf_0Tó+ ++ ++O’V ++X ++W6B- p<)] ++!0%+%3’å%'‚/p·8QSáj/(Êe ++`ÿ0âäABŽáèU5Žw8a‚â0w8 |à9,srXZX ’ 6\Nz‹4 ^g)@ cAcü,ükk&ˆ›& ›&¯h )3Q à£!0 šå Á¤òBè \ãE0\ XïKB^ð8`,W2”äÊÌZÆÐÊÆÖ6? !Y \  Ü1à‘ ‘‘ê4 ++0(L*B6@4L L>/L 0¼SP€PP P/ PPP¬) ¢8„Ò` 0µÄÒèæ@ÂäÎêÚÊW  0\! ++x3;S(f ++p ++‹|;;~$œ6;€r ;‰~;ü;Ør ; j;f;5;3;-; ;"< L Lj<3ÿ`?1S8f ++X ++3€3‚n(h` /è 1– „€FD> T ++à‘å>¾ P ÓáÎ?)é â@D1 ábN3? ‰ÒB @ àžådÝd-n Dn n Hn „(n a ++¨BH6  ++‚z ‚z ‚z ‚z ‚z „? ++ /È  ’ € | B @ : ?b ƒà ++@’‹° ÞåL°Q 2SS)_*à‰åŸ`@ @’å\ \%üÿGQˆBLÿ€ ++„ü„ü„ü„ü„ü†åP? ð ü—ü…üüGüEüü?ü ù Óá²/ÿæ Mý „HŠ° †††††ˆ  /Ð “}CA;¬ EO½àÞáÿMˆˆˆˆˆŠ'jl? 0 Ÿ‰OMG¤ —âP ƒáÄï¬A@á á^Ž??  C@žåtßt50D00H0ŠÐ0À ++Š0Š0Š0Š0Š0Œ0 ++0/ 0›0‰0…0K0I0C00j@1(l- ÿG°P  ++Œ Œ Œ Œ Œ ;Ž$–C /Ö›ƒŽ›ð1G.&H¶›yÔuÔDÔBÔÔ<    “å2/¿ NO “åd5×- × ¸¬,   ×CÈ  ++o;’$÷Bo” ++o‰’oþo0 ++o uoqo@o>o8s  s _ à“å>s H? àžß_ÿ' 6”_;–&f*£<˜` «a0ÏŠåŠå Šå ata"6šåšåa–a bO (H¸@cï8grgË8# ¶kã'@5ª.*Œ]%Œ] 3 Wád-ë[¦0ƒà²ïÿæ¹àÃï[ 00 \?8C(ôãJl`fXn8X X˜X;š&^*XœXêXŠšXj àXêXjXÉ ÉX"_ ½P8¿8ÿZ ++8-œ8;ž&g+8¿6À† ÌÌÌ‚ ++)1þR ++)Î ÿÎ)Î)0 áSàƒà¾/¿æº Àá.èi?m ÃL << Â8 81>8:)ÿ**?f;)5ž ++ žqžqžqžûC; &Ò+/È ’{A?9< Rã_*ÿÿíÿ ÿ ÿ ÿ ÿ ÿ ÿ;¢&q+ÿ/¦¢ /fdJ ˆ¢J ¤ÎS¸¡ (fdI o`"°5=SàŠåŒSÂŒS¾¼3ãŠ\Eˆ¼5à—å:!àNµ9‚¼7ã+uA9X`T—cq¥AZ—c ¦ pŠå0Šå@ìCR ôžYôC#`¢ pšå0šå@ôC+d »1[Ò)dSCay0‡à4ï¿æÑ‚ RdS LÒ)a!OšåàE ,uB P‹HQL›;:D« /ZR°ŠåÀ3/ <õ ;­Zb°šåÀ[,ñ \á´ á\|å\8Ë`xPDá áCi ‡à à  Ù\Ì‚q @ààƒëc?ˆ3/@ˆ,“cˆ@0 áŒšb@šåC$U ¦ð á‡à Áåÿ?âC|$D ŽâB¬!0Â¥]T.Eâüÿ@à ŽâDäøîp!0‡}1ÿïÉ]nEC ]L4 áèòH å•]ØSÛÿÿê HÑ\ z-Ñ\¬Ÿ‹\û°j8 ‰^”&6àÔD@àø0W ƒâBô|/ý|Œàƒâÿ/âðDy_= ÎåˆX/…X?0ƒ üN Èì/õìLšå°{+I@@X‚êT µR(l'c"c1^!c±kð0"p!ƒ$ / .Cþß.<þ† ƒ\j ++¼d+þÜ 7@l¼dTH8p6€Ó`&X Ce(8ø9¸5¨4p478®®a7¨®®®®i oJ° ++8éP;²&Ç4l´l/ˆ lÊl¾l§l—l“lYlWlQl"*ÙVOºÜ=/ñÜs/yÜÇUÜ4ùdÜ­mÜt/õÜ[eÜ@/¹Üw h›h 5/­ Îÿÿ ++±þÿêpÿ2p Bp;pZo†SV²S²liê7À²i²i²i²i?R´i¶Õª‰¸  iÙiÍi¶i¦i¢ihifii`ÕNÕJDÕc+ÕˆÕIñ !   ,)õÈ/ 3Mõ°p U l/ s¥õD ƒâ( /0‚9 >/59 •9 ‰ z€¥¥H¥¤Y¥ 3¥,Òu/ÿ ˆÅ/èŶŶ¶¯¶¯¶¯¶¯?ʸ¯º¯¼¯/ ¯Ú¯ί·¯§¯£¯i¯g¯a¯:.+ˆ.“™8Èu84/½»8t|/¥?/ù XÀíX¡X³ÿ#]³ 2³+X“Wº“ºX/ÿYºªºªºªºª?Ò¼ª;¾&}EªÀª/° ªï:š° áp á0ªãª&Ì ¼ ª¸ªBã~ƒp|ª›îª1WávªYL+dy‚Dy‚1°Š×)/0Y,0°šå%&0ÆAYºI|Y&x&DèG‹" Nàà‡â@º‹º:/âÆ‹ÆSNS6 à‡f °f /Uf °f ‹f ‹f ‹f ‹f °f 1…°f Œf y…øf 6U°K2f `f < ++f ‡hf È /IÈ;à‡f ‹f   Tf /ÑXIà‡â@aàÿ?Nl"A4&D8°/0ÎXH’ /D’ Šd0’ á±Xo’ <± ++þ›þWþþþ/°ŠZþ°VG$p¦ ++( $þ/±¨ þ± „‡/ÿ³ à //@! ¾! ¾´¾ ++ ¾ ++ ¾ ++ ¾ ++ OzÀ ++ ;Â&WK ++ Ä ++ /¸  ++ ð ++ ä ++ Í ++ ½ ++ ¹ ++  ++ } ++ w ++ PÜOAºz=/ñz¿/ÅzÇ¡àz$éàz¬/¹zsAz¨/ýz?Qzxe‹ F5/EF ‹  ÿ0µ   ìXÂì /ÿ    ?‚Ä ;Æ&ƒP Êè=/lh9ˆÆ9kÈ %ˆè=(lh9 ³ 9» "B» &+» *» "» å» ã» » ÝÅÍÅÉÅ " °Ðè=%" °ÔªÅËK ++|ûÐÅxÛ Ô@\_ÔÝö8`G@šåNÏG× ?ïâo× w·@@à/DÏ ++Ï ++û¿@¾– ¼‘0ü÷ Ï ++„èeŠ µ Ï ++07Pó4 7Ï ++œÜXÔ/UÔt+ É+ ®+ “+ 8¨!/)Ô+ ,¬ˆ ´*±´œŒ4,2¨ @7 7 D7 |xœ/Qœ(°$«( /áÝŒKšåºä/ä \/9¸LšåWŒ8T*°<ž? ž?a #S S  Š> S *>K 0¨T ++`Š>3 ,æ? /- $ .¾ý3 uÆ^1¶›3 ` ++/0R 'x) 0^ %èKà>€s @o ˜?°O y?C C%rÈC Š?ÊŠ?;Ì&bXN Ð\DN ŠÌN ÎN \DN CN ,N N N æN äN ÞN · Oªº¾ ++=/ñ¾ ++GM¾ ++èI¾ ++È%¾ ++4m¾ ++D/ž ++¿/™¾ ++s!¾ ++Œ/Á¾ ++wM¾ ++H/©¾ ++?/ý¾ ++g.ñ¥í¥&*/á&SÐÿÿ ++$¥R ÿ1R ½R \¶ýÿê\u. … j£í ÈG @ áƒà Ðå ápŽâGq ápƒà p×åq á°ŽâK± á °ƒà °Ûå ± áÀŽâLÁ á Àƒà ÀÜå Á á$S1:A ²®A˜°@€áÌ@á$\‚G8K8L8H@H HH8 DòÀ«¤4¼LI/L¼H ¼ ¼H ¼„@¼ ŽöHBØ 0 æîÂàL­ܤbÀ á0Œ‚"0Ž#vÚ†X3 Œ¦Ž¦3Œ¦Ž¦Œ¦Ž¦3pŒ¦Ž¦3°Œ¦Ž¦¢"àŽŽÁŽ¬9ÿ0–†90‚ž@8G8–8ŽWF ++"A!H‚ ‰šÔ(Öz*øzSHBØ1+217¨Ö}Ö}Ö}Ö}?Þ6Ê >Ú € ( F‰L?Å1ƒvƒ—}erƒ3ã8O6÷ —÷ dSá0ª¾«ÿ !i^b£2CáÍ¡F `0 ã0L®“L®‡L®9 {ò«/H< W ò«/p\, c¼TL® ôÓ <ÓÈ'/ ,*.åÔ9"0ØæÛÿ+ ^á¨, ýV— ¦«a˜mÀžÀ°†àŠŽí àÖå } À> ++ À>   @Ol÷ T/` )/=X/`0/0\LA\"`8$Ç k ++£LP/1L?€à€½Œ° /0\€`- ++®„OàšåÑp>d,p>Hp>tü+R"fØ=:Ú”²0øÜøQâ ú4²ù p[^!GÁ BUƒz® /0ƒ^"0úÞ^n3BšåpÞ/`€²â^u\^ B  ++Ê–JÜ8FHʆP†!âëÞŒ-AfàO ’Ú= ÜF*zF!xAÞAG°Þ4 Þ4 Þ4 Þ k?æ6Š4 à P ( 4 £4 4 Œ4 R4 P4 4 J4 S4 h4 64 4 9‹“í0 ‹0 + 0 @a0 ÌäP/á0 O{0 q- Ò>Ò5‹ží΋, L  œ <¥œ H/œ ’>ˆ¸P/™œ w/%œ Gœ ·œ  œ  œ H œ ‹ÐTM2àÖ¹œ äœ >ðâ‘ ¿)    - ƒÛ ¿ý ý ý [1 Ç“½ù5 Y ;üü@BQê]Ù˜ì ++\ã X«C0 0 ¸ ´0ã¥LC\ã£ujuhu8àLâÉ!@àAà@az»ÔK«Ô”<G¾ŒPP*Œ ++0nâö& pU¨;"À][ |‘e& pexˆL00ààã÷Î% ++ ¸|ˆ/À80ìP / "©ÿ%&%!%ÄAo*À!Cä>!GýU¼(í ˆ/µˆûITCf2öGX_  ^S0 ¤ ++GÈx,>rl@Bv·0¯G_7ÄÒÎð%Æü£„ ²P*±”p@â €à*@]ºïF¯3Œ—rÿCÁãDœ ++@}1B#5RÇåD1ÿ©1 1ÿBSŒ”_lYX!/ ¢pô`X`!…2bÊÿÿêÿ`\"Qf BI`»2T¥T ¾(1^ëŒ#;­û'Aä³C&BÃ6àÀåÿïâN@AØ]8TwHX K;…iÿÿꢺ k@áqb ++¨ã1 fÎÎ<à 6Î’ÑÑÿÑÍ ‘Å‚å  ++Í-ñÍ O‚âÉÍ$MÍ@¡Í8Y‰/ ‚º"8Å‚åXÍjÍšÍ FZÍùQô˜|  r -'!pÔ [‚ ++•ØL (rŒ Œ /X "Œ dŒ [Œ 6Œ 2Œ 0Œ ,Œ  x *x ÿéx ˆµ ±x ¢x  x gx ex ^x Hx Dx Mx x 0x l Ŭl ÿi•l þl  ++l  s l  S l  l 30 ª ++Îl Hl 3¨ _ rå å å ’- åLBåw‚|æpZØÒæèäo ð aß«+uÞŠ•Þ+q•ÞOšåéaU€B¾Ü ⧥M?ìM6æ  &@Å,&’åÎØ Nâ_@/ÚÙ„#àC¦‚ƒ)?™K á!-y>ð†åà†â à†å†å@†zØoá0Câå7Gy>/ Xþýë ++ XþѸSð.rÙàÒá1¤?¤C0†å ˜ ?öHÝ, …,·1 ++z,ÿÜa ++˜ó+8Ý@jú ŽŽêŽŽêŽvŽŽêŽIÀ!CŽŒO àÒåŽhŽŽ9*W? -à #ÏH&ÕÏH 4 :.ä7RãºZ’!» /0T7 ³+™T7!0š×Eº«n{ S*^ñZ~p Îãàâ_IFš@ Bâ²$ŽIàBâMÛ §? BŽü/ Ž¬8 Ž‹F-ÜŽ-P4O K U ++7RãÄ}ÄyÄo ! ´wü`&  ãR3PãBÄ-{ÿ@Ä0¼VÑvõ_ á@ vÑä@†å †å ²à?@âÝä èþ#ÓÚ ­ïH"k¾d!PÂä9 @“àÂÒ c0„å ®ç öRç»[SëÿÿêT@0 ãÄ( @9W Rãš@Š@†@@q@ @L@T7 ++ @’&"@‘=·2pžåˆÁ3WáDAG^“_ ++p‰åØh "@—H°H4[áÐÁ¡HCWá®(|_@@âÎ|=°‰³çh/h´hD“å È»;QáÈ»$Ä»m¸¬W@†å ¬ 4öt t\gy2)f—€V€R÷˜½R¨0pÎã\¯+k#¹ìn/°àšå”ààGàü¼=ó ++:p†å 0†å †å 9 p, ã èïZ € |°'X¼? . hH‡´€=˜É}/Õ ÿ4/ (%11œbUáƒBÜ ‡J ++x R @@³+6" bÌ ˆ@ØÊÜÎèÐ@Öî€ÚêØèÒàØÊÆäÕ+lÑ$5 ++ÈûM@!`s rs¸"P8M" Fð:"H ++GN«,H¹#B¹!H)§?PHFÃ&HÌð^pô°B$ Ð( ÌSà—å$Éì Ž0Kœð8 ++ à—å Câ‚àÐE —åPá á Bœ(x1 —k/04©¸ $pB1Šå   ƒà€DÐ4+Náe $v÷ãRà„å 0„åóª°/Y°.µÿ§^®ûb*Bôð!p=hK="ñAÊ$()ñ?P0Ý-w!XA %AÍW&û*ûO¸(øHø5 +ì ++ƒììÓìÕìdMì¸ì±ìOBòìO²*ì)(-RìnS),ÆêÆ.Æ/¸ #ÆÐÆ5Ƽ¹Æ¹Æ¹Æ ŠÄzÄvÆaÆ@Ä+ÆåÞFj ,, ´ÚØø"Aú ++ßV/¥VÀV¾ÌÝß/0Ê'ïºl˜4ˆ4„ºoºJ45º÷ÇL4Qá(÷Dz@r@4Wá@\º2\²¶²m@“å à“ÉÉl3²ø¥²ÿ5/í²¿Á²ÿ5 ²i,²².².²,*  ,9›æ¡æ! ++ˆ@x‹K".Ãæl·Pê",p F8«Í±Í F FF :~0y~v(?vÿ.0ŠÔŠ,Š #òv2v3ìvÿ$2ì)(-*ì/,v34&‡%&Z|\t8Ê# Ê#p4Ê#6>1ñÄ¥Ê#®Ž®{š#Ëu ºÖeŽÏu+ÕÄ…dpà ã&P´âP ++ åVAw—:3Sá<—:U:ÊB#w„wp 0å&Sc. ++´L“Lè(L3Pá LLjãi`„à Àå@@ “åò’#"ú#àß)1 ‰1þ"àÛ)Î$`€àƒâàÎã ++ ŒP•à*Æ!ƒá>EBãà„CzÆðÆ ++èr Ñkÿÿê‚<H{Š#X¥UB` *ts*6H4* îR ²6­ç$8ç$O:&ê«@«ê«‚:«>«_h (Hê« „«q«<J«9«7¶1Ò ——3Pã-—8 88Žm<ƒ?åâƒ%¡Gaƒ OšåÓƒP©ƒ,%ƒ|ƒuƒ8uLb>u@u5B*-(wD =  #– Ín5Š~b^áù– èÞÒ^2¢ ) Ö”CW6…4Æ5 ÎÅÎ1„à xâ\5IýGàžØ0SáBoA0žØß=ìD¹0Âáì5U ìöØ ÓöØøïps„๠ÁáøÒE y/ 0š`–u¤£Ëu€N} —}(FO^ãÎ$(.é$"á$¥G5@0 ãS7S&WãxÜŠÜ!@—ׂ$)Îw)Îs›~@¥@¨”©ÜG—„H¥@~1^ãU7ãN{É2 šÖ p@Žå p—åÐDÈ1È-È Ä/pÈ.qÈÄ&pÈÈÈ[àƒâNÌŸ 0ƒâ —å•4ò0 /@šJ ¬P$/p€…ÿØOcÿÿêHD†å`ŠåOHœ`ÖH(/1lH­HQ ã Pá(†L“x“Ú ++ M€ÐI› âRã|„L0Æ€ ñð—"0¾Ca·9¯â^¼X Ä,IºQšå 0“Iì6ì2ìH`)!Šû¸ˆ” #ú”ög ++”UpàFˆ?@8+šW@kJ -’J Jï>*?!Ho 1B? .Sn O87n9n =  B OJ*êëLëO *êë »ëêëÙë ÇëuëDL  ËËQ 8‘  f‡<«?‘åâ«)ž/Å« «Q§« Ðä(©«§« V¼ŒãeúÚ@VºO E<<<“Û“8›ï¾Ú§“1“@Ïÿÿ ++¿:#«àT;!/ù;àw1³M³aK$M³ ØP(/ù³¯³gT•Çq^]º3%/‘3Jl&lOº³)/³ Áã $ÏÄÏÄÇ- G:ÇXÒÿÿ ++¹˜À€/yÀ nxtÁ»Zp$E»<]»{»x»¯»U„D»2».»»$1»¯%…¯À¯D¯«¯,”HÀ¯2¯.Ù |¯·¯¯¯ž¯(/Q ô¿/% ô?/y ôg/õ ô‹à.¹hQ£J£4Ò£J£> £ ++£@¢yú.J£ A{=]JÖ7x8‘X! ÊV²L ++˜i€¨<X:›ˆ )¦W:N2š0ùé €&N˜+šyJ py"‚¬ y› Jy /Ê?yn y ++n/9n ;Š yJyf 8PÆæRLà¾ÆÞÚàäÊææ¾æÒôÊ™òRHÌÞäÊÒÎÜZÊÜèäò ò8BP ˆT àF&1T/û9@ ˆTñ à‰å4€‰å(P‰å ‰ží@D á×oC:00—åÀ4€™å(P™å ™å$³7³7ZþüZ/néc87'AZP…@Dël8Á8:O0 .4ÿR^\ÀV T1TÙb"ñ ++#„2@šåÐMâ5 æúÚSàå9*DàåMSàåØ2SD! á ++Pšå-Opžå7yAÐ⟠Ø7ïO3åÏ0¥O@åÛœ71@00&°;àô<ܲ /1_[ü<ÝE ÷Šd0Bf  @ ÓüdW ++ôdVšå°Û9{ÓbI,å6 á|n0RáQü ORã<'ó àNà$0Šå(°Šå,àŠå0&0ëBŒŠå  ŠâP°µÇ ++ &0ãBq ++T§:“« ++N }/šå# |g?à€# ++€ò/·Ÿ<# ‡? D"t¬¬« ü0¬«laTø…{ ±~ÿÿê¸o6˜ x?Ê/{C@ÌÞä~OúæÚÂØØÊä@èÐÂÜ@ÊðàÊÆèÊW{HÒ8ÅO¤üæ@ÆØÂÒÚæ@{k$aÍ#f_#1(XÕqRh8õxõ?j*ôl  X "ó¤ó óš ‰óyó¦!›1K[ PãODúòCy9 0Ò! ;•ê ã¡x à•y3 á €/à§!² 0.!" ¡ò ÚÁ  „/|2? áÊ$£ T.|n_áÿÿ ++|$x‘xf“_ïa,újC8Bþ%?`<‡FäÒÎЈ!je7fP¯0S4 H—ùÈÂèÂ@ÒÜ@æÞêäÆÊ@Ãß&(<  Y :l «D¬ ++0tS ÿ¾!H:°‰n ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #ñä,#UZöB m¨  L0Ÿåê ƒâàø à‚å,°™å UáÃ*°Kâ,°‰å ‹å(O àƒåH«H4“H4{H4cH4KH43H4H4H4/ëH3ÓH4»H4£H4‹H4sH4[H4CH4+H4H4/ûH3ãH4ËH4³H4›H4ƒH4kH4SH4;H4#H4 H4/óH3ÛH4ÃH4«H4“H4{H4cH4KH43H4H4H4/ëH3ÓH4»H4£H4‹H4sH4[H4CH4+H4H4/ûH3ãH4ËH4³H4›H4ƒH4kH4SH4;H4#H4 H4/óH3ÛH4ÃH4«H4“H ð  ã`EâP…â,à™å^á:0 á ƒåà ã p p+‚pplpp‚HTHÀH@:0à†å0†åp´`åã ++l.l(l0lƒll0l¦>@ ãðšå@1ÿ/á@Lðÿÿêß0,Ê,¹,¤Œh^3ÿ/áxXœeM5/íþÕ½¥u]E-/ýýå͵…mU=% /õüÝÅ­•}eM5/íûÕ½¥u]E-/ýúå͵…mU=% /õùÝÅ­•}eMö5ùÿê>BæêÄæèäÒÜÎ B Ø  óTãtp á0 á áàâ^ãaà—åàâ^ã]ð.á áàÎã áãH@ðSãFºSáDÊQáBÊ AàRã&$@•  ã,ö; ++€Xâ ++ ‡à ’å„à €å0ƒâàŽâôÿÿêpŠåŠå @ŠåàŠå0Šå Šâ àâàŠåÀ\âÿ/á|ýð ++ Jâpšåšå @šåàšå0šåáôðšå à‚âàÎã`EâP•à*ð :á áàŽãà†åÐÿ ++ Bâ ãà†âŽçøÿÿê@ áÇù@îÿÿêÀÈÅf  á`¿p–å@ ã ð–444 ð ¸Bb8 ++èBP8 `üæ@ÂÜÈ@ñ#äÊ@ÜÞè@ìÂØÒÈ@æèÂäè^ÊÜÈ@ÒÜÈÒÆÊæ@ÌÞä@üæ  ++HÞÞàæ0Ca$üæ@Òæ;$Â@~ò0BLPB0 qZÂààÊÜÈ¡z (  ‚¥ŒTã ++6 9‰L ãí_Šå!¢y Jâšåë½ À$à™åZá¾*lq« ++àœ ’q˜àˆ“„90pÎã8 À°Îãà‹áãd@Á@›àbjãSU;Tã89ò á á ãŠå àŠåò  á0Šå °ŠåpŠå@! Ykx)ò0šå °šåpšå@šåá á ! á ‚â xxl[@íl`„ ++TR@Dâ&µÖ ++EEÉ  á á Šå`\¢<Õ\8 šåX…  ++  0¸°¢ …  °BLñ ;ÿÿê0 ++RBü8B ++  P ÌÔ!K°  á&Wã,#ÎCø€uŒ€ @Ó9+Ž»!+#Ú Wl’€ „O”#OO` o–€`=<Ê•ž +•, - ‰fR9 €/˜y0/qÀJKš€x …ˆ¡.4…]„0ÌG ¡, Å,Î Ñ,e0Ð Ý, ),Ò å Ô …, ù,ôc6[»/œÙ @ Pb 2Ö=b M, 0€œWM, ‚„“ ++ ¡€8 ù,2 :  <  >  @  B  D  F  ð8:<>@BDFH(J … L ‰ N  P ‘ R • T ™ V  óHJLNPRTVX ûpZ p\ p^ p` pb pd pf póXZ\^`bdfE"ûÁ*hŒ ++Å ++± ++Ø2 , ++bj q»Ä””hñ ++$ ZÑZl7ÝZ¹ZÜZuÝ,j¬Dl!Kp) B,nµÞECå,t%# ŸÈM$ `prà ô2âN&tDàŽD"ûñàv*%à%9àäM%à ƒrüüvKFž€ ++/8#õº —ƒ~Œ?8n‡0  *‚ Fçf¡J4O€4 yƒH `x #ØJ¥§î»Ì§Î¨ã©8§ú©>©<0©~Ú( ++ ++ Ñ&xšfx/ !¾ ++L‚(³6¹4 ˆL‚ ++?…)„([…•Pñ…•ˆ…•ž…•–…•‚<Ÿ…•$…•TK? ªGP€œ ™,$z D¥,| R±,ž Sz  4|~2oÑ,~0¢Ð”Ñ, +Ù,¤ T•,¦ P­,¨ ù'ª/µ,ã[/¢N2@½)Š?¤€P<æL/¦ü3/€Òb/0&'ÿè)€ñ,1‚"!(êà@!(ˆ 6!*°7 ÿà./^x7"F!E0à’çË% >!};,1 ++âg!O0¬•2À >.®g H € M?°€\ 0Aò²…‚L+ƒÐ H´€&B½…X¶€†" %Â#F %!‚p=‚„ -žO?‚¸2 X(‚º 0~ºu)©~&‚ð©>©8©<ƒ¤ƒœoš@ƒ”S–•ž@`ƒš•– p•P•ˆ@¢ƒ¦xC§î Búƒª^Yb¼€ƒ¥"[T PŠƒ²•_ƒ¶_•$ 1)¾HO¨Bˆ#Àˆ;1ÌÊ A€ ++=¾ÀÀþþüòW1Þìé‚ P È"m‚ Ä  O#Æ  / $%Èp ‚Uº‚\„=ÌI ++/Τ2à)iЀà- o.ÒünH.|ÉP3) ++%;Ì€Ø]„ö ‚„+{~€Ô' @  /€bD ++  ++ !”¬È¼81àüp 2_EñJ+# ++C Ó.` OÔ€ä?¸.  ‚¼‚w ´ ºhx, Xx©V©Pâ * ++@; ++ ++ /ñÀ]… nxOÖ€$‚H‚*f2–8‚ ˆN‚ ++‚& ++‚  TN.Øh x YÍÀ Õ7o0Ú€‘`ÐO€Ð y\/Ü‹5µ^]óÿÿ#h‚ª-J J1¨JÈÞîÜ ++Áo„0âü<-/-&P+ƒŽ ++lä€'< àYÒÔxÖ ++ØÚÜx6ÿëÞ6?ðîL–æL4°6R™/àKP-þJIf…†ä‘ oæèê M œô ++ / O~ .?  T /îý ++ÿñðÇA °´îÐÒèÊæàÂÆÊ~Ë-˜ Î,ÎÎÎÎ0à0àC3 á ÃãA6Ö(Ãã±[€0ƒâ0“çpà“ç µY# ++µY½YÖ1Öí//‘ƒ™/™3.+™$&’i7#1Ó;Ñáá!Á#? …SDÓF?"R"ÑÊÒRA%±?BR€!€!‚.3™FK1"Q!A `CHñºR¡ "¥1J<1 "¥@5(,€*Fš  !H®E€/J /JÇ/H$ .€F £&  4 ++ 80/JHŠ .J´*C*C"&#ŠB )L(Hœ/Jz Ü-**,,* 8Ð H H H H+CH0 //3L %€&^/3.AhªŒ˜,t:OçQ géÝÙË$.‘1 ý}DñSN P " Ø&ë/ç8 qý1Ñ9%J3ë "AB#J¿ )ÑA )T +JHã$’&(.J$E &*í ,> ²(€£/J/k/*i%€At 1qL²/J¥/J¦NX– Õ"ÑÒc,€ v¢H6Á>Q³¯ÝJ ß<H0rå° S  ‘S  ++ ++ ++ ++ ++ ++ ++$‘ ++ ++A‘S \02‘S÷!ç##ÝKJ?=CV€ U/Ñ!€¯°!1d\7u!jo%Ñg/Cj!€ ÌÌ.‘à! ++# ÝQ$*  FP ³\>#‘SãLò€Ý@£V=*Q@A×3 <”  U Ê (Û!ÑâR%“]M ç ++ [Ý É/Ccÿ 5¼¿£ gn À™5®/3 èM ¢ /3xð/%,8GÎ À/Ñm]^ 4)*/Ñ   ö ++QÝ „ E ++K  *€Ïciµà2‘Q´ Rc€ ++/S  )c6 ‘Q¹çEë }‘+&SÚÛ¯B\ ˆŒ/ t= œ ¨ }+ Ñ'/¥>Kù Î =\  Ð   ) =´$ t,b;\ ,  E  `! -/ä!/c ¾ =\ , #  ++ ‰ ++M-c¬,¬  ++/Ñ] ~F Ê4, 0(< -S í" =2 û1ïQF`D#w   U&[Ü ½… ‘ */Ñ ++'2 ++(F`,  9 °) èSŽú) ++)* - ß;/»u>TáC ( ¬ þ FN%&P/ ++ /C{> ++$g‘ s Ó1Ø,C3Æ-.k‘æ/Q ®nn Ò ++Ê ?6  H )å ++wK,ä ã‘{É /S ^& kàkQ(@P&Ý  *¥ x ++±2Ñ>0aAo ´ Ë$ƒé$… ++ /ƒÖÆ¿)›MœuSQë /QÛ D',$/Ñ _œ ±"S ² o  C¿ ++ª Cª (S '‡ =aFJ ++(€9bA/aà5arAaß ”.\,€f6 ‡$òðô  @ u'ˆ * ++B &@y)ÅB Ð*%QX ++)S N/¥;Ž )/Q/Ñ ++Ür].ÁBØ &ô™0/C1/iœW–ÿ('—C(0¼ E ++, m7ƒÿ„#i€ÿzœÕ ++¶&VVQà f>51-;%¡ ѱ7.ÁóÌ;ÂÖ Ûy1.® r׎OåS. ù ÿþ… þ*c í@'ßu¸ ¡y2/CEA — šØ!Ê'2*1 </Qq¸&;AÝT-S CK·/ /S Ÿ$ J/S  /c ébËGŸ.Ñj ++0êê ++îÝ 0MuÑô€hä&€‰À:´¸nÏ Sòa %&/Q úç/Qh• í{ ®7CÝ  ä*c%a¨° € ì/S  (Qå"¯ E$³Šc/3 */ /ÑËA ”/aZ Ý3$ v# ¼Z þCg[úo /H›/3L9,€‹/H8J ++`HW/3L}µL0š]×_çrS@d¢^Ý2Bö€ž'/JåJ/H(H@a/J /* /J„4Y/J /* /J /*¸* /JÂ,Þè*,Hà /#Š /J /#Š /J /#Š -Jz^H2"#Šcf&cB8‚<@  @J€)*@ ++pÀ0«pC¡ðYÙ c!ñ#÷rñ³p(5# –Zb3y3‰ÎU lZ%i,æ( ++t , %±Æ *%±'!6$/òZ P ++iÚÀVKZ Å š[àŽ *Bp/3L®:c ð- ò W"'—c 8ÝY/Ý; ++'€}2(%ƒOgH 8_ $/(l tã @ ++€*˜ ç˜'Qêm8)€ '!²)H#Q J›e¥+?—*,J)*€ ("*)—/¥ÿ.!Q!  (&!²š`!.øÝ ø  #=î>”Q„|GÑ!j!PQŽ!QP Ð  ‚/ÑM/Ñ>& `M N/QS?S*,€ JR J4.ú ++ÝÎ!’¾¯! ++/ú’ ¤ /¥d/Qš(€I/!fܤ0#ú6‚5VØ=~ ˆ.øB¥! B^ Qˆ– /Q@ŠuW/Ñ!/Ñb¡'€´Ÿ{J±{/fÂÎÞ$/*&H <£%q/Hh-Q,ŠÌSò  )¥d//J‚êÒH=Ïê +++//Ñ"¾2/€¿fÅ P/€‚mˆ+›-€ ++%% ++&%2%.Á r%¯ -r2Œ/Á¬3šâÑ_ G.Ño> ++¯/ÑŽO/ÑS/Q|[ ?*Qmü5.—¤´c0Á$8/—ÛÖ†éè†áÙ6mÁ 3 œP"3¸6){ Dš‹D5% c"A23  mCf,€Ê+Û.C±+Ç „°4ITˆ!X$/C8cÓv/Ñ ì ++în <¬\/¥ $Úmª• ++/¥t%%1¨ ++ ÜPr%NúüSW/üIO€üWŽ’: ü.þN^þˆèƒYR¨œE Þa /òða4 l/Q©Ÿ .ÑÙ/3 Y ) ü/C+ ZLèˆ/Ñ4; /–/C=%ÕVQÔ¡©€Kˆ?˜t,íÉ— Ú/Ñ" ¢C@/3,BÙ#(¸¢Ô\/H <¨F”; âF-Ñ(‚YÌT&3L( ++*QœÕV ­ %^UF.UË Œ9018-/Cº xkY£Ð‹a/ ‘ÁFic«^"ÖM /9í–1—HÜD ++G ˆZ [s/C_ 4·_Â*cÙS 5º/Ÿ/3 5'HLn="h&(— ¹ÅUp-€jŽ/cÐd'4ð &Q!€À\ä$s; ág,C<#¸#Cß>€3x#­ HH­ñ à 2<@ /H!]d9/3L“R-Ñ×ULOa¬ ‚/S #Å„åI ++/ò €òl…|Œ/ª Hn® Ô úÒ?±é?G€€g/Áé?§+€K¶#rG'( †×Î1@Geãfþ%|yã3ÆGy€  &D»U ’» .!8/Ñ ++   «˜ ¦)Ë/Ѹ ±¤ Þ¶:•Ü< ++½â… °Ð ++— "€…(—ºÔh>%r‚)Ý`6C"%±ú>$Þ ++ziúiŽÆÄÔC/Ñh ++!üC!â'1(/Ñ ‹;Þ@!¡bÑŽ1Ôk ²!öÚðk?…@æhñgKìÐ#A Hl ++ÒmK‚!‚YS )1< ]?—@ n3'\/€t A Jm"!Ä &Q Qr H|n <4"ðlnP /€N*¢@qÞ%€€§dž Ä/Qø5 1± Qú6& Nh ++.Ñ@/Ñe&/Qž b /ôÙ!fHöZ¡Òþ/¥VÚn¢ F9——žÈ4xè(Å*/€°k«.pîÆ—:‚-€\~/J ñ^q/C)´&´)ù*ÒUò˜ ä/ô|ÔþØn 8 /K~ €‹´J Ü/€ ++N/¥ /CG2¥ßQ lŒÊf / Y/¥´pll”» ø(Ñ( bž€© %SqŸŽŒøfÌ Ȇ B7gx.//Ñ$^Ü…™‚\†/Ñ@m/Cb/C ^»0/ @J ê//€‚N ´& Iòh& P z„ ++ . & <8âÅ(ô€^ æY $€OH.S UI´ê  F/S Á´ÛN o‡A: ++Ò+¤Æ Ì)KÊ¢&1ï2 "þ ++n t¶,.€¨B(Îô ++ÄÉ"  v3JÉ/CC Ù¨¿5K ‚ =H&C4UM `H Sé\×›ç/Sál4 ++› &Œ› À Ø ŠÍì?ZŒZø( hK Œ¤ä ‹2N5R=è 626*fØ(¢Z+ ++,c0%p ZÊ ++-t…/€ÆVº$$cWC/ÑÁÕ( g .Cñ0ÿ5É Ñ_K  b»Á&ôS p ×*)×_/Jj x A«1½ .f à #lT /€ÈUk‡-€0ܬÊ. ++êN GîW/€¦Å€q1_€ôl…2ò nt *©Ãw: Ø=]~¯ ++!BÉVŒF@)3 &/ÑO> é ++ õ ++|UŽb,©/ôò%ò" ö˜29) ¬N/3 T _%æ% lXØ/ôJí ++,5§z!‚vQGl[óÎ% 4ºes' j’¼/ÑÑ Æ“/Q€K¥GÙ9“ÙÊ 'ã' Š ¢½zF/€~¬/ç2Gcœ=±/Ñq Eh/Ñ×ÖSN/ÑÔ0V X$€¾O/HS/()/HécËpÒW)/HS"("%(   ¢ 45rÀ¤r/HAh”¤ /HStˆ/€Â ++òö  /HS/(E /HS/(S/H=vU/(S x?w%Ò½Ò¹ I/HZ‚ I'!µÉÖIh /(N€ ++Bêƒ êÕêÕê.H.«/ôò$+è"5/€ÕJæ VÄ€4·Jp ¸LT 9/ÑBbn@@ eJ'bh€V¦fi/Ñ0).€G Ð/QUÈ/Ñ/Q%D1/Q%@.…øQlþoj>/S()cÍ( ~ÍÍ(Rt~r/Ñm˜?CQQ /Ñ/Q— ¼/Q/Ñ$ ŸÐŸ/Qa%/ã$#Ž//Q{/ÑÛ»éL$ð‡ª‡±I ÜÍ3/Ñ+/Q@ /Ñ@)? ++G/Ñ•! F/Q©/€ò /Q/Ñ/QÕ=/ÑYþ/€¶ká~/ü3åµ%‰‘7O ? ÖXº/ô¯A,:µA.G‹”\»zO ôLÿû.Ñz:Xd7`,€ÝšG9€C@àO² c±\/>yž8Ÿ˜÷ ëŽ/ý,xª0BLPB0  ÆÐÂäZØÞîÊäZÆÂæÊ~ B ˜ ö) LTã,  áÿàâ^ã" áàŸåêü?ààüàâ0ô0àC3 á ÃãA6 áÃã À0ƒâ0“çóà“ç€ã ++@ ãðšå&<' `TÖp–å@ ã ð–åÀ ÿ/á ++â###?êàà##g@#N##_èÒèØÊ##g/ #M#1wÜêÚÊäÒÆ  ++h M @­ÂØàÐÂÄÊèÒÆ@#g@N #1"*ôÎÊÜÊäÂØZÆÂèÊÎÞäò(/° -/--Lç.å áàÎã|0âà0àŽâ@žç91 9ÿq`<˜ê˜Ø˜è˜Ú˜ÞšÜšÆšÊœÈœØœÞ Æ È æ Ê Ò Ì Þ¦Ú¦Æ¦Ö¦Þ´æ´Ø´à†Æ†Ì†æ†Þ†Ü0"µø$HÆÞÜæèÒèêÊÜèõ Òg5N$«&HæêÄæÊâ g N&päläætÏxÒ,  °.  ˆSTã&`à áÿ0‘Sãÿ0 ÏRáªËO  áÏÿPTã8¤à á0 áÿ˜Q¸1ÿ   þ^áªS¸ƒ!0è"Hk:_@3ÿ/áüæV0 á á ´D ^áª&Pþ ++€Xâ ++ 0ååà áðÿÿê ŠåŠå  Šâ àâàŠ’A ô  Jâ šåšåêÿÿêTô0 á&Sã" ++ “å_@€€“åõÿÿê0t [µt0šåîÿÿê´ì=Ô£s<Â(lð* *üæ@Òæ@ÜÞè@Â@ÂÆèÊä `(*Ì)Ø ñ ++@B èBb8 š,° y ‚, H@V ++>4¿0 P.„,ÿ‚ÓÓ€¸ |•‘|`/|¯8BÂÝ]%(p* kS :0k4 "5k&©zª4ª36 «"ʜʸ«´Ê«ÿs$2m 28 ++*•4•94 H@V •28•?6„ÿ‚•„Ê•ÿs2].•2•8•8k%>”<”>>“$}œ}¸“´“ÿs:> ’:5 ++*’<’9< H@V ’:@’?>„ÿ‚’„’ÿs:].’:’@’@k%'|“D“F'|”$ºœº¸”´º”ÿs$Bm •B8 ++*•D•9D H@V •BH•?F„ÿ‚•„º•ÿsB].•B•H•Hk%'|”L”N'|“#Ú}œÚ}¸“´Ú“ÿs#Jl J5 ++*’L’9L H@V ’JP’?N„ÿ‚’„Ú’ÿsJ].’J’P’Pk%%’4ZÆÒú*µV XX ý*ZƒIƒ9$,,.#(,(,(,¸0ÃãB ápÀダ€âç50(,½àŽàã áàŽx,fü0â ` àB#Œ,?ÂãAd ð ç ‚â0’ç0ƒà3 át/S¡'j†StSdSŠU# á`àAœ-ÈÁã@v á°Çãp„`‡â p—çÔ—çâ0‘ç\ƒâ.äääh 50—ääŸ^áª"TT>Qð  ++Œž; @‰°"à; Q#0(œ\4  _àü |.  ‘ç ‚à#|‚4])# 0à“å«× _0Šå + ‡0šåšåë tp¢‰pJ ++RÈVTN óT« -Ðà7 ,  À5aøRÐqJV¨ y*V R@` ” TZoøX„ÿÿÿŒœ %aÿfia\Ùa°Pa*V8(p*dDêZdOÊZd%)·^Ž6` òÊ~ÿmÊ~\Êÿ±Êÿv'\O Ã3\: ++, ++: ^9^ R@` \b?`„ÿÿÿŒÿYÊÿv\V>\bbd% ++fhŽô|ÿm|\ðŽÿ Žÿvd d7 ++, ++: f9f R@` dj?h„ÿÿÿŒÿYÿvdV>djjd% ++Ô<nŽp|ôº~ÿmº~\ºÿ±ºÿvl ¹?l: ++, ++: n9n R@` lr?p„ÿÿÿŒÿYºÿvlV>lrrd% ++ÏBvx|ŽóÚ|ÿmÚ|\ÚŽÿ±ÚŽÿvt ´Et7 ++, ++: v9v R@` tz?x„ÿÿÿŒÿYÚÿvtV>tzzd%àÖæèäÒÜÎZêàñzsØùu Þt€àâ^ã ¡à’åàâ^¥LI áŸ SÇ/ k+Åk@ šåÕk ,2ªÈu} Hæèäé #, 3ðð àà×ÂãC& áÂã Áa ‚â ’Ø€@’çãé^2à„ø1@ŽâÜ.ðšÙÿ €0¬®€) ú M,/À9ÀÚò²ð€‚¬ ñ, 9,<I…X¶ =‚„ -ž0òCi), 1,Z+ÿ¸º¼00¾ô½ß¼ e,2"0ÌÊ0¾I•IÀ øÂÄÆÈÊÌ΀à )Õ, +IéZ/0=CU!|a€€öø‚]`!, Å, ++QQ, ! ++Q], ) ++e ++†, ù,ö8/‚)Ç€~ø€^c M,j&€ ‚ „A[a!”¬È !àüà€† ù!,;0ˆ % Š ) Œ - Ž 1  5 ’ 9 ” = 𠆈ŠŒŽ’”–%¡2˜ ¥ š © œ ­ ž ±   µ ¢ ¹ ¤ ½€ô–˜šœž ¢¤¦ û€¨ €ª €¬ €® €° €² €´ €ñ ¦¨ª¬®°²´ï#ýé3¶üE ++ ++Þú2 , ++P¸"üp¶ñJÛlÿº8][%[ü[V],¸Qºy!½pe,p¼2=3>t·3Ùpp¾… B ++I *IÕ0À)¥Õ=Õ#Õ¥ÕÀ 9ÔxÖ ++óG € ,4 T%,Ä "1, ++ dÄÆ€RQ,ÆÂs+, +, ++%)Õ ++í ++9/õ,^!È_ÚÜxÿè €Y ÓBÊ  $> aÆÐÂÜÎÊOˆ Z üWðŠå$à™åZá•*à“å.á"€Îã& ãRb&@ ++ “p áWáSþ: aƒàžå(Xó @ŠåpŠå ŠåŠå Šâpå/ Ð@ ãð—åü©Z ' 0 á8Xñ @šåpšå šåšåÿàúª ü!à„àŽå‡âÛÿÿê`EâP…â,à™å^á:p†å †å á  °†å †å áHÉ› °ä_;ÿ/áõè Yäè*‘èä­ÿÿê&Qãp0ðšå\@ ++ T/ @xj x" @lô éÿÿêp á à‡âàÎã`EâP•à*( (áÚ¡Žãà†åWãÿ pGâ° ãà†â°Žçøÿÿê@ áx0^†ð 2ÿ/ádÿÿê¢ÀB$ ++BP ++(òhB`8:ÊpBÔ  ÐÂÜÈØÊZæàÊÆÒÂØÅ„Šå áÅ@*5² ++àšåàžÑÿàÎã àŠå šå Šå$5¢y$$•Âà á šå 0šåa ½iS¯&À ãàŠåÀ˜ j,˜ààšåÀšå° ã0­1^ã­q"I‘Ž ++&Tãj«ð”åàŠåà”å àžå”å‘åpAàa á  á@â°â,@Šå0`Šåpð Šå0Šå°Šå ÀŠå¼Œ$pŠå( Šâ0ñ8¢üÕ((ñðšå šå0šå°šå ÀšåØð$pšå@šå‹à0ƒàÄ iapâW-_±°žåp‚ఇȠâôÿÿêÿp›­ Ïà‡å°â0ƒâ»1é´†å À†åÀ á,°½@7ÿ/á`+ À ‰@   ZÕÄð øãÃÿÿê àšåàNàá˜ó1 á0ƒâŠåàŠå á ˆ’]‡ ‘ |,. qðü/@´kìÅLGšåð"@ÄWó ‘‚‘ ++‘R‘R Bâ‘#‘@  á?ÀÐ1‘ Z} Léþÿê ²âþÿê,ÊBÌWŒ ++ïæ¡Î_1&&q0Å3SãÈ@½÷Ì]_àŠå © Ú*…©MCàšå æT åÜT”+Õ””€Ïÿÿê@ áš1âùr"Ìh `ÂÌ8ÒSPBØ ó BÎ h ÈÞZæÒÎÚÂÈ`ð("0à áÖF&­Š6@ ++¸`D0“å×ÐÃ0€à ƒåñÚÖ0Þ¢<•Þ0oäÜ– šåà“å0lqà‚à0Ž¬N"@w"4w#È1 ž,ò—vOpåz +1z0šåpD@ kq@Ôò ©x.Ìÿë‚ÅÿÿêïôBÎBÒ ˆ Z ++‘G4ÆÒCâàã àãpŠ* ++š mŒ0pšå: E ++à—² ++0ƒe\É\EÓÂà‡à Žå>øl/5l¹ ² `²BÐX’¸ æÆÂÜx pPáR ++ݳ  ˆK¶ áÀË㦠€°‹â °›ç50›Pã5lPSãòÔ@€àý#pîd}Þ +AÞpöd" uN¼ Ô0ÒgŽCØžcSšÐÇ&€B  £ ++Q‚Òµ ++P(8zHBÒ8ú 8É ++`jÎ ++ &"„Dñ@ðXÂÔ ++Pý ++x4  ¸q ÒÔ0l ¢0ð/H cu *Ê ++ÐV (œÖ—‹8Þ $—‹¢"PÖj¢Ø  3ÜGFÌÞØȢࢠ¤Ê¤ë¦|5Ú 0ÊÜ€ÞìàìììFÈÞîÜìîììÐëì|4•ô„0ââä†äˆŠ!æñQLJ0~~@1 ++Å +@ÿ茎’”–0@iêžx  ++x'ÿñìîC0 ý›. P 1"C*3/¬û à Ð<àõ ¸ À@:0îà†å àšå à†å0ù@ñ:ñ ,·å 0å`Eâ0$ã$8p át1à‡((uÔ:`Š) «¬-0Ž,[Ä:,, ,´€À€ŒT[¥:TT•TT€T†(0(ƒPw(°(‹(h;( $ †å`‡å ‡åqà‡åÀ‡}qà‡å°‡ø1à‡È¢#à‡å'‡å+ $1ÀŽ" p"S Žå    ²`Œå °ŒåŒðàŒåpŒåŒå Œå<SŽå@@@R€å °€õOà€åÀ€åp€å€å €å`ƒå °ƒåpƒåƒå ƒå`‹å 0‹å‹åÀ‹åp‹å‹å ‹å°†å 0†å†åÀ†åp†å†å †üm± û "  p+­pqÝ_4ÿ/á‘É‚sdTE5%Ø( ùþ­ƒT ++TST%0CTTn `ŠåßþTC)!  ò :ÊèB  x 殄nÄ^®„nÆý.ˆ.õ€Xâp +++0—å0ƒà0“å#à: ++ ,füâ°` ° àK³ù*@ËãLÆ¡)Ìã¢á`†â À–çÀŒâ °œ©`›ç ¿ òÀã|â<Pã `—å…] á'p—Ú˜UPã ++pUO á _ áZ" p»Hå *)å" p¿"FyÖ 0òØð B   ++èäÂÜæ@Z"à`h ++^ãBO-[L-Ç/dPãl Ï/ Žâà ãVxw ¨}2@Šå_ Šåà 6°šåšå šåpÿÿêÚÈè*8e"Íå*19ðZ*/'Z*39òP P*?ô¼)/- ¼)ÿ(1ö))Õ( 1E'S,:' $:'3þ0' /'E%Eü'>þ}3'$ÿ¾ ++ Û&=Ð&Å&l$™, ++¥ ++± ++#zD|XNÑ, ½&ÙŸ&%+• ++­½&µ½&ÿÿj¡ X bž 3®"°¦ q, ++ÿà& &Q—åàŽ£E_°Šå € ++ ö!0. b0†å °†X`X@<ÿ/á“ [/&."5¶O°Šå º¢ø!  ö#3&*"G&M 9s PF0d F6 "0B ™P—åQü"o —åš ² Ò Sp á¹'@pŠåˆ"'{7ÆP|¡ p"!pšä"'œÙ„ ++0ŠBôŠÇZ°B ++ &&pðZ@B¦#P "õ62àü ô0B H ++ æ`òT\ “å"³Ñ9 Ñ9 ` B à@  D q;"£7. |0âSãÉ pT_<Sã£pX_Sã}pX_ SãWpX_$Sã1pX0@SZ% ++#¬þƒåŽâà—åPáJÿÿ#¬D0 ã;¸/'p( (( (((\/X o8%Xý$Jˆ®à!°¸Pg ¡rbX­cj8rö   € $æ¤ÊÎÒÞÜÂØ’ÜÈÒÆÂèÞä ‰ _q ++ `@ ê/—å  P- x $'8B™Cr™öXB    æ–ÂèÂÖÂÜ­C"˜“˜Ï —å ‚à ’å"T1 PV$˜Œ”U$”/—å”m("(X˜/  D  ½ mBV @˜!+˜,˜P ++,W ’ ,ö"  æŠðèÊÜÈÜêÚØÊè0.0^ ++0œ`˜œh0”m<” ”p””p €”ìæìì0/yì .çþì"ì  W ++"Ò ++$Ò ++Öbb^®„bdÊ ++{ ÖôÊ ++®$ž¢& Ø æœJÂT™:™d™ÿ©_Pã7qX á\8y€$yÿe/Yy ¯y&yc/à ƒWÊ&ƒÀ(  ++   殄lX&À÷cfc€[ð[À(0÷*  æÊÄäÊîØÊèèÊ€y' _' “ö» q“Ü ++q4”4q» ÿùí» Š» *`° 6–Sò*–THB,¸‚‘¸yý€<%‘ÿ_ýÿÿ~¸>ý¸",ò1°@Xr.($CV(0ú; ++”^B8Ð;­{µ2  xx  f/´DT¨`4bÒ©YK"*ìI ìIÂHÜD $ˆG_ˆGN€7c ŠâFïpÌf 0¥<0Sã0¹A¡0’å0âSáA¸JžÈJ¶ AL ÔJ,G /qºªààe8@a¤a @õ9OD Jâ,F/e:+1e:Ošå¡9šîQ ++r]a–* ÌÕ(: ØÞÞàâPQI:É'ÎOR”Ø ++O¬u’å ’H¡îLNi›«éHo!šþ+Ù*­š>,/0Õ+ŠNÔ,Ææ:¿I!â‡GñPÒ28r40Gt"4 ++(vGI,2å HÐB6çC bbbÊâêÂØ~,9P„5àž?b0‘å#1Œ)R%800 ãi¢P1 k ++€p€àp—å+U±dZPó‘MJ-0«*µ«ýF-0ÝH BBa‚6H Pú28 d%8@H 7@VHBz2hH(B(€¬#<(%~ (ÿÿ=>(?:"ÿ<">"<">"<"ìÅCÐ "KØÊææ!!‘!80Îã-  ãRá*Ü@Rá&úƒpà°—å!€ Wáº)O ‚âï) o2Áo2 -s2æ19ZGš@9<9B9B9<9<9H9w#D9%„ 9ÿû 9ÿ!F9ÿD9F9D9F9D9 ++*D*H*H*D*D*2NV§ JÝ_V(Š —uid,'î,02KFFPBø92“D.l&lÍeœÍ  ýUµpO0šåÚ…Ó„-s*„ /M„'‰„‹„W„ÿÿê*„L„ÿJ„L„J„L„J„ …°VSaB‚J5‘N‘N‘²L‘ *5 ‘T‘ÊŽ#P‘& ‘ÿ‘ÿmR‘ÿP‘R‘P‘R‘P‘P‘T‘T‘P‘P‘4\èhë¡#VO (– ³ÿÿ=X=ÿV=X=V=X=V‹¼»ˆfW/ÆÒ° ‘°°pÀÃã\ãòD^T C×ìÔA ë[ ]KY}-pÇÿ1p–Y}D —ç]”ã^ Ý}@°ƒâ°ctttFtÊTz@„âp”tpt0ãä"0‡tPpƒâ PA° ãÿ`âVãÁI!` q"F0WámŽUCSáeËa±aFÓ@p—å'¸p¤ÌpàüpâpŠå"Gs´"F¶7 ¼1 °”'p›ç°šå~b°—çÀPp‹às4$‡âl&'sVh`àü`â*X âFc á`Æã `ŠåGf „„@”ç `šå  a`”çL2p†ˆ0p‡â³à¬[Hp áú¿.kBi ²Põ²P:"k"0ºPŸÇ?Ê Ø“`›åWáGÌCÄ—O °›åHeHC0ƒâ[DûD/ °rk ^=‚jHW °šå½L4L¤`¯3VáG«Ë@ °×L›å+³< < < <_$`ŠåK<$< „` °†à ³ ‹Áåˆ Ì°„ p€J jü}€J@/p@3@—x7Tá!ñjp¬/áþ  ä_!ä"pèߨð° á¡þÿêjÚè!xIc𕆠Zh!’PøZ Z Væ ++\æ ++\VVæ ++dæ ++n^æ ++œæ ++qÿÿ?`æ ++ÿ^æ ++`æ ++^æ ++`æ ++^æ ++bæ ++6è æ ++t å ++ ++Å ++õ ++Õ ++QnÕ ++€ÆÕ ++xiÑÝ ++ Ý ++ÿ ++ªÝ ++0íÝ ++Í ++Õ ++OLºá ++™Xá ++49á ++HQé ++Tõ ++—õ ++4õ ++,ý ++'L Ó 0I ( ‘ J ˆ ‡ òbp Šx b2bÃ- ª  ^ d d ^ ^ j J#f ¢ M#ÿÿ?h ÿf h f h fM#0f0j0j0f0f06p),l¿)¨ S#ÿÿ•nŠÿlŠnŠlŠnŠlÂbÂlÂp—pÂlÂl—v—V#r—®—Y#ÿÿ˜t—ÿr—t—r—t—r—r—v—v—r—r—!'¨ ++; ++¡V8x¨AQ¥t/± k‡J‡UòBî7_zzî7 % ++@½|½ÿBRz¼0|0 »|» 2 i> cC9€c~cÿ–@c€6 c‚cÿ€c‚c€c‚c€c#†c„cV6cÿG†Q5 cˆcÿ†cˆc†cˆc†P² ¦6ŒdFèŠdWdˆd/¥ñ ;/õñ 4¼”å¼M "ø/ÐuŒ‰4ÉŽÉÿŒÉŽÉŒÉŽÉâɈ’ÉɺBÉÿš’Á3É”Éÿ’É”É’É”É’É É5˜ø ++–[ÿ–Zø ++˜A, fšfÿ˜fšf˜fšø ++˜f Ážfœfÿ–bfž’$ f fÿžf fžf fžf Ĥf¢Äÿ–f¤È# f¦fÿ¤f¦f¤f¦f¤f"Ì%ªþ ¨þ OÇÿbþ ªý"̬ÌÿªÌ¬ÌªÌ¬þ ªÌ Ê°Ì®ÊÿïÌ°2"̲Ìÿ°Ì²Ì°Ì²Ì°Ìcp’(ÊÑÜÞäÚÂØÒôÊZÜÌÈÒR?ˆ "š*åG€X⟠éŸa—•ŸA %­O šå×µ¥ ¾´ HÈÊÆÞÚàÞÌ°uZuGu&0 ˆV< Îã݉9݉Dà ã/›š+ ›ð‡å ‡å 0‡å‡å à\0‡å& ±Ÿ ã&  ã 0A r¦Ax¨O“åÑ §(.››p¯¬ÎìÀ5O }Ó(_¦(¬7€jB´îyôø àÞàZÂÜÈZÎÞ¨ ÕÁq{ 0—R¯XnßRú]§_©L×9*…* ++ŠŠò¬e\p’ á à—åžÖŠDáD@p0Žâ@ƒå»¡Äp,°™å UíÅ*°Kâ,°‰å0‹A¨* ý§0b®Œ/ 3ÔO šå´Ÿ_²H ++„^‘Žâ—åà·³lV›/ SdÂy ,« ¬p"ps6”á€ÛYŠû_ “åt/ 0x<ø|x& 0| âÿÀ‡Aºݣã ÆÂÜÞÜÒÆÂØ|_= :? á ¹É!&㣠=ö–".ê·=?ÿï¹Éd(Áã¥Å5‘­Ål"#:˜?ÿ?¹É L!©È™e‡ò0¼ØÒæèZæÞäèXÔBB C‚ ++B¬XÓCú´ÓâpB¾  ÎÞ†Ž& 6Ž&p¶sº³Dd ++@¬¯[¼@ÊÐ@£×°¬àCà.ã á±Ÿšåp ã$ü7\—<" @D_“ ã$D( ++9O áp@E@ÜW„E&™˜O Šå\[|¡\ šåë„âTC0Žâ zŸªò 3 F¡’0€å €å , á“k=\àšå.000P ÃãA6" GÃã0¸a0ƒâ0“(?0“0@^ã` ++!àš+°-.~x¥'^  á¥ µžg^ ++@ñ@<M,0žÖ£2  Ö£¤’ \`\\ ++\ÞšŸ.pì|¯·Ý,ÌJµN $ b¤‚V›5 à‚Œˆ ¨„’0 l Y€ @œFÄØÔ0Žâ¤¤Èûà€â à€å €å€åI@0ÿ/á¬e|¯T^ãðªEÏB’ã&ÿÿà€È@Žâ"$ xPxOÿÿêoa *ù.þ€ò†þÿê8:¶ ++ÌðÚÞÈMd¶ @(¸3ÈÒìC`¸ œ@ˆº¥¼&H‹@HB€ ’$ ++0òkD¬˜ITäÀ ˆ àêæС ++¡…a–p¼ ñ= 0­-–†ååi*°S¤òé ØbéG•ÐÐÿÿê ++jB¾põ`zBšÀ! ++ÀmÀèž0æž-lƒ|š3Æ[’$,4SƒÈW, &,ƒ–AÅ,¿Á², Ñ, Å, ÉÀšPÍ,ÂWÊcü€”Æd,þ T,ü T ,ú T ,ø T!,ö p),ô “!vÉ]ð ]î ]ì Pê %4è 4æ 4ä !wâ9 HŸ#=CÞ CÜ CÚ 4Ø ‡@ÖUEÔ EÒ EÐ ¼ÎëÇEÌ…EÊ EÈ EÆ ŠÄ R ^vÄ#^/Ê#•]¼ ]º ]¸ PçÅ#¥4´ 4² 4° ^wÆ#¹ ‘Æ#½Cª C¨ C¦ 4¤ ^/Ç#ÕE  Ež Eœ ¼—Ç#å^4˜e!,€ ¼T, 7 T,  T¡,   ++ÇT, v T ,  T,  T1,     ‘¥ÌD Ç È "Ç$ &y( *á, .†0 2 á4  6u8 :u< >T, @ BCË[D ¡ FíT , Hœ JL N“P RûT VC, 3),#d©, XIΩZ © \ -Ð^ ­ Á`1Bb ± d6f hˆj#1,SÝ,€#Ý)l[n¶ p[r thvR1,ÄUxWzÊ |W~ €T-, ‚-§„IšÌ#É ˆšŠ Œ§Ž Ì#MAÌ#Í ” – ˜[š œ[ž  ÝÍ'ÁÑ ¤'¦Æ¨#±ªÒ ¬M® °M² ´T), ¶ ¸tº ¼å¾ À§ÎmÝ ÄÌ Æl ÈA!, Õipïé ÎúÐ Ò/Ô1,… Öb /4–Tm,”m‘4’%4%4 $À¥‹ Ê4 õ, ++#ù,Ñ ++1N1N¾ ++99¹vØ©2Ú© ܳ ÞÍ  â äê æê p #q„Š #ñ ìÛî ðAò ôT, öD ++#]^ ++#‘ x ++#™ Ö"  c# Ö%™" 4 ]T1, ] š  ++š  $T¡, $ Ú#©lÚ#­ Ú# ÝAÚ#I0Æù4i, ++édé, £T, £- ++$ ‰T, ‰ û#8û#• $ & û#a û#á / $ŽRT=,ŒR ŠTE,ˆ †''„' ‚'€ ~ '|  z'x v–'t– r'p n'l j'h f'd b'` ^T™,\ Z X™Ý$VáT1,Tá#„R|T,P| Nbú Lb  "Y #Ù 7 #U U #Õ BH[@H £ #¹'½ #½ :÷ 8 Ѩ,@ ‰öð‰‰‚öôꉀ‰£»¤W#,  ) ¡  ÝÂú‰ê‰Þ‰ÖD® ª"A€>àYØ<,ƒvúü«(†@PÈ . #¡M0ÔÆ@‹  1 #U4áÓ 6±Óð  B%}:†Ó+ ++#!] X ++&!Ýp$ö1T,ôd ò8ð à ++#!y ú ++'!ùR #'¡2 #'¥ L #!µ f ##5 âØyàÝ Þ'Ü ÚT-,Ø œ#!'A '# _ #!­y %#-ýP0Êbî! ñ ¤1, 3M,Ì @Q,%#3! È@U,3 !3)/ØUµ$Ñ,Ì ++%7) ++,dPd€N#7Uè j/7÷ ¤.7I$8*0? f]A }|I¡, Iñ,¥%IÁ Ã.IÍ,ªhÛ "!IUU ++Y ++] ++q ++… ++‰ ++­ ++½›{"? jÇ Õ£O, Mù,¶ ?O],åQM…, M©!M‰ ++½ +_ l€yVtQÉ, Qñ,á •?n€a#YS ++] ++qu­uj(> p« Üc[, [Y²Yþ°þQY…, YÈ!Y‰ ++º/ara Ñ^]I, _°3? t ZP_, ]9t#_ ¨–\F? vî)Rc, cîW’x–¸zeý, gU,›Þ!g4  ¨4ž@ ,.-g)B¾MzøËPk, iëå#k –køY|0 ´Qoe, oø$’@=,œ!oq4Ž}×Q †¯ s5, qÉ,=jŒw5, uÉ,?¤ u­, ue, ++…}¨;…ÀL‚  áR{ , }„ É ){1  /+{EQ+{Ys/{m^%¥{, }Õ,ÑP{Å, {ã4 Œ@Ñ, ?t}É, }, ++Pc%}Í ++ ++ñ0 ’$N}×/}IÍq…™­R"A`> ”Û) kn•, ¹ _%ZÀ 1: –Õ °aÙ, ÙÕÝä%Ù%Ù%,%Ù-P#Ù5O‚'ÙEÒ9³%Ùéµ%Ùñl0 ˜H¾!Ùù ¾%Ùý2À%Û 2aaJ€óÖñÎóØ Ø#ïH ôóÚí6óÜóÚ€pÖóÄë耈óÊóÈPëâëàAóÌ@Æñ `ëþüü óÆ@øëÖ8DîçV4€óòóâóÞ!çh@NçFå ++*óí’õríó\í†õtí„í‚í|íx@Øí¦Êíívíz@tíbPñíZPƒ8í\Sõ‚íX ésš–rMT•,pM - ò-‰ jT,h fTÅ,d -Ö-# ^[\Þ% Z[X V[T RT,P NTµ,L ½" IU×# M F©D BkA@k >TÁ,< ¿"¡ÖÛ#¥ 6Å÷B&™ \&0 .-',- *+( &ö$ "+  T¹, Ý _#=+_#½ g g ©   ++á ÿ%'ÿ% $ñäà"ñÝ $þ4TÅ,ü4 úTµ,ø À+5©¾+µ t œ€òT,ð îT,ì êÉ 'èÉ æ'ä Á+®à Þ®Ü Úà»Øà ÖT!,Ô " 1# 5 ÎAÌ ä$A þ$Á ÆÝÄ Âv Àv ¾÷¼ ñ#óiÌù#óm ¶4´4 ² [6&Í ®[¬  š%# m “#  € ó&#ó žø œø šu˜ –Ô ’á Ž”!T‘,Œ”! ŠTÁ,ˆ †A„ W # ¡ÇU  pO # ©/ÿ L²"Y¼'²"Ù vÝtj#$ žc'Ê# c' ¢n¤ ¦¨ ªT, ¬ ®T, ° $a'>á ¶[¸ ºî!'¼î! ¾¾'T , À¾' ÂuÄ ÆTÅ, ÈðÅ,ÌÎÐÒÔ k# ý‚+„ ++$ ÌÉKÎÉ ÐT%, Ò õ O‰ ØƒÚ ÜAÞ àT , â Å#õß#õ… ù ‚# ìuî ðuò ôuö ø‚T, ú‚ ü¯+þ¯T,T%, T , žˆ! ¸#©  )rLp nT%,l jDh n "õáJn #õå bšA`š ^…\ Zï$ Xï$ VAT n "Qân #Ñ NÝL JAH FÝD n #÷1Ýn #÷5 n # un # … :u8 6u4 2u0 ., *? (? &[$ n   n  -© A ©  »[ »  ++' u u Í„€þQ$TM,ü @Q,—"ù†±#ù öT,ô ò˜ø#ð ît%hì hêTû[èTû æ[ä â[à Þ%hÜ h7#ùA[Q#ùE Ö[Ô=4Ò&RÐ R×#ùaEñùÂ$ÊRÈRÆ«%RÄ RŽù%¨ù%$¾R¼ ºÿ¸ ¶Ë&h´ h²Hü[°Hü ®[¬ ª[¨ ¦ &h¤ h.ù2H#ùÅ ž[œ š[˜ –'h” h‚ #ùá[‚ #ùå Ž[Œ Š[ˆ †Û&m„ m‡ û‡ û~`|÷z>(Rx R‹ û‹ ûrRpRdÖnu'H©ûã©ûãhHf dbÆ44`{("­$ûe/$\ZIXÿ'ì (¤±ûã±ûãP—N L[J Hv)hF hD«þ[B«þ @[> <[: 8„,ïŠ6ZDŒ4ÆDŽ2D0ADZ.·D\,#^¸4OT,O d#ù ~#ù ˜#ù ²#ù Ì#ù æ#ù "O $O 4#ù) N#ù- h#ù1 ¿#ù5 Ü#ù9 ù#ù= 2« 4« P#ù‰ m#ù ‡#ù‘ ¡#ù• »#ù™ Õ#ù B« D« ##ù© =#ù­ W#ù± q#ùµ ‹#ù¹ ¥#ù½ R˜ T˜ óûÐ ûÐ'ÐCÐ_Ð{ûÐb˜ d˜ ËÐåÐÿÐÐ3ûÐTÐræT,t A,¢Á'x Ö±{Ù0Øù#ýÙ~ëS€ S‚ ƒ,ñj„7#Ú¡.£M,ñ ++Ú€å- †Í- º#ûÑnŠ‡ î%¹š0Ü ÿË€D‚’!C„”-{ýÀ4˜ I š œ÷îž î .^†¿CÞ¢>¤Ó>¦ >¨ >¢½ Ž#ÿù‘¬ ‘® S°hS² S´.S`fà0!@câ¸#Jº J¼ J¾ J0º¸"…‡$Ây/AÒÿ ö#ûñ]Æý . %9¶0äM ÿPÌ8PDÚÎôCØÐ?#ý’F¿ÿ€€ÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔ•FÍv@ÿì® ++Q¹, ¹,[æ2 ++!b1É,3ì0è1Õ, 7êU…, …,š.,è—B, ý,"…,5ýÄv„;ì¸ 2û1' Až.O3ª"72/ A¾H1Ênû ^XF6ùvZVQTPÿIÌáªA€Æ ½,&? PÍ,ƒ0Á,N? '½, tÕ,ýî+9ðFƒ†ƒˆƒŠƒLªðƒŽƒƒŒƒN#ƒŽo"½¼7ƒ’T”ƒ–â M,!±531,¿15,<a”õú œ‘¾ÌƒÔSÖÌ &íÊ2ƒ ë!,ìóa,õø÷÷V÷>€¢s…ƒÄ¾ DÝDå 1ED3 Á,MDê'ÍÖîðÕðbDÑ*ò*D߃òôážDô"Ýs….öêb%,ø Y'“2%, ++! ø*a*"*a*ƒ…@…TƒD…úUb¥,ü Ùiüþ—àÙ! ü*áxp*á*ƒ… …4?$€]Á„/ ! « Qá,ÔI/1Ö2Q2?Ø! !OP#QQ½$I³Ú; x!g%!!†/-  !Ï#<!ì+•L!£1­,3,qþs›9 O} äî!¤&ñÒ÷' $¨ }õHH…H!b#5 ‘ ñ ª  &‘bF!ù#É ú'Í ÿ#Ù %Ý Ž æ´#é-'íM¾# MÍ" ú% -!U#‰`Ò#¡é#¥a/­|>èÄîÄ&#õN#E® -I!¹ Îå #ÍH#ÑI-ÕDåêå0 3¾—$“$8?‘^ ×"Å,ÉÍÑÕÙÝáåëR¡,¥ × ++ ïÇÙá#å0 ¡à1$6 6€   ++      ‚É,R¹,   ÿ  ú "õ $ð &ë (湆2*ãx3 "$&(Á "*Î&…?'‰  ‘ • ™  ¡ ¥ © ­ ± µ ¹ ½ ó'Å É Í Ñ Õ Ù Ý á rÍo¥,‘ê,€ ÞSO“tf)!‚)ð# ++FSP é,Rõ,. (H~õ,.L?ìŸ'I.Wu&¾`v±$±NŒN³ÃS_õ\Δ_ÃX„ðÿé}}N}h}x}ª 2d‰l‰¶‰À‰ì‹‹:‹¢‹Ê‹ÞÌ‘‘ ++‘D‘T‘ˆ‘ ‘Г6“X“ŒŸr¡§–§Â§Ð§ä©©œ±T±²³ ³Ì³ðµµ„µˆ»Z»l»‚»š½€½Ž½–¿~¿¿¨¿¶Á.ÁNÁpÃË–ËðÍ€×Þ×æي٨ÙÀÙèÛ4Û<ßPß~ß¼ïªñ,ñXñÊñøóóózó‚óÀ, ¨ ¾ Æ Ì Ú ü þ žLTø ++lxˆ–JV(ˆ¨!Ü!è#'”)Ž)˜--®/3ú7?|?°A A„C ++CC(CŠ=ððCþEIÂIÎIÞIîK K(K.KÊKÐKÚ[‚[¼cdczc¦gÚgòi~iØsDs`s|sÀuw”wªy.}}Xø (ƒÞ‡L‰D‰N‰V— —°™æxŸHŸ`ŸfŸr¡4¡v¡€¡š£æ¥J¥P§¼§À§ä«Ú­8­D­Î­àñF­ä­ö¯0µD»b»t»¾»è»ö½½½\½b½‚½Š½¢½Ö½ò¿¿t¿¿qý?‰¿ö2RÈéa‘ î¾!0 ƒ-• ++eQQ&ƒ5ž&ƒ=Á&ƒEè&ƒMØUí&ƒ]0&ƒeO&ƒm(&ƒu(&ƒ}»($ƒ…N,&ƒ‘$)&ƒ™.)&ƒ¡5!V)"ƒ½6Âi;)$ƒÉ ¾ Ê)$ƒÕ º *$ƒá ¶ >*$ƒí ² …!.ƒçŠ ++}V%…u0…! #;dü$…­d!&…µ:&…½Y&…ż&…ÍÛ%…Õq &…Ý&…å@&…í_$…õA€‘&…ý$°$‡Õ&‡$ô&‡!5!@$‡=½ÝI  È$‡U  0$‡a   r$‡m $ !.…3O‡l$‡Á/$‡Å.É%!ƒ2'‡õ_!Í,KZ R1b`ÿd ++h+ÿíWLv¸x/ÿÜ*q¢!ÿ@ó :ÿ8ÿ0ÿ*ÿ(¤ÿ$ÿ"¨¦x_œšP–ÝäPrjILZAÿòsðÿÞÿÚTÿ qÜsòqê•Œqès,qæ2s~qüqÊŸ—$u6$ -W&‰'‰     % - 1 9 = A E I @,ö)‹…±50±    % - 1 9 = A E IH ù$‹ "‹¥R‹•, BE22G'q¡'uN'qs8·m'Q (‹µ4 À7su &› 79! ƒ48aÑ'2' Ç7¹}'/}8A©AÐ6Éù 7¡5“Î' e(ËÕœ'w ++7£ñ Û(·'y8 g_B(Ëayù8 © ÎQ ++ͱnÍ‚%~¥5¦•ÅÉÛÉÑ# ÙÝáÍÍPÍPÍPÍPÍPƒ…À…¾¼Sº…¸¶!Q‹w"%‰ ++ ++ ++ ++ ++% ++- ++1 ++9 ++= ++A ++E ++I ++22 ÝéR‹¥,R¹qÑn¹Ûò¦oqo‘°q {Ðmú{ÈoªƒpÑü÷ÀçPÓ6}†“ ͪ×2ÑîV…òÿÈiŒ8~ :›°wš{ƒ¤é’•Êqà{îã€mÌomÊ­~…–ƒ$£Ú£vnq¨i2ƒJ™Ø·Ù¿Ý¤ ÿÑÿÑÿÑÿÑÿÑÿÑOÑPÑPÑPÑPÕPQ€4”&26q | ++Ñ ++Õ ++Ù ++Ý ++á ++å ++ë!Áþ46; '"•= ++4!Y1Nñ,‰\‰Z‰X‰V‰TýR‰P‰N‰L‰J‰H‰F‰D‰B‰@‰>‰:‰8‰6‰4Ú0‰,‰(‰$‰ }‰‰?$‰¹ AE,="‡ñÈ $$­,º ++…ï !i, ++V‰,PB­ü…» Q‡-,=6"…Á1U‘,B"‡1¨ ++¥bn$¡, V½,Zb% "…­ ++]V©,Rså>Bs$­,©©a‡¥,:, Qµ,8©sA±,#5#‡µ¿áy'!¹,# #‡-Dl a‡•,8ܹ€iµ„1<ÁºÜ X"‡…G5Jú +‡­*\ ‹:<W6F<Íæ¨%…ñLµŸ½ s#5,2  -ŸC ï)8u#Õ,9¹?xi&Õ,JS>fc‡©,@ScBH ;-5Þh™!,A %hû)9¢ 4:û­"‡E¾8H U ‡A±È3‡Q,cC…å,¨2Q,òÍ{M6 § !Q,N*Y „E*#‡¥Ø'3ý,Þôõ1 ÀI1#‡­ä.6R,îá,eýuA1TqL%!,þ"‡Íø.»%£)ñÈy›&…½<&‡­;=­8$Í=#‡d,}'}P óG… QFr9‡Z ++Ö‰r©¯%©¾$7Qƒ­YñxÛ&±, B …Éb\^?s…å,`p bp ds fv hy j| l n‚ p…$…åx^`bdfhjlnp¾^`bdfåB3zº@3…,0D ++oUr‰ 3É,;ýã@%6µ ++3vB%Éx$Í,s)U ++ óU A 1!¥;+‚É, [`9, eííÕ ü22yiÊ $€Œ#,B ++%ñµ ++­ ++Û# ,¼B ++ ++2r›k!º@…‚ >4rooo ++yT,€| t\ éUtˆ  Q R% MS ‘ ­ Lµœµ’µ? ++ ++­¿Tv ­xx ­`|»l$Í,5~4z8z÷z÷z-Éq‘à<|~ŽÍòÍòÍòͱY(Y(Y(YTY, øY?]?]?]?]?]Z]¢ ­,D1 ++‘…,‚ ¹Ä#\H%Å¢ ++‘! ,M4€½9‘È#å,ÈFÐq$A,y,¹- ++5¾Ñ“hµ ++¹±q%áþ‰"µÔ#%±½h!L4‚A} ++I ++ÍqM‰# ++]e½-5„l¥ C„†Äc/•,ˆÄ ŠÄ ŒÄ ŽÄ Ä ’Ä ”Ä –Ä3/•,Š%˜KŒ3ˆŠŒŽ’”–®˜†ˆŠŒŽ’”–PÍP,š0LxAuq"2f…‰¤…‰1#(o"R¾S„P~…›¤…›L÷"®<Ï‘jÌ…£æš­/™ •éQ.ðœ2€ƒ³p…Iƒ©pƒ±v…)f…«¦…•BƒeÖƒeØ…pƒr……ˆ…].… JƒçƒË¢ƒÅ®ƒÁ4ƒ£…=$…/ô…!z…rƒÓ¶ƒŸ^ƒ}R…«2…—N…92…ƒËäƒm…o¢…%nƒÍ¬ƒ¿€…Y¸ƒÝœƒÅ…i¼…ITðI€…^ƒ¡¼…§N…î…™¢…QØ…9¼…D… ˜ƒåfƒÍ^ƒË´ƒ­ƒ‰ ƒw”ƒm€…^ƒÿzƒï:ƒÕꃙv4ðk‚ƒ¹Ö…Æ…i~ƒóȃ㎅ȅúƒ³ ƒñ¿ä…sÒ…=r…-æ…)~ƒñ@ƒí2ƒ …›ƒã…ð…Ÿƒýtƒï2ƒÕ΃‹Èƒ·´…[…=´ƒ¹¾…­J…uð…eœ…´…ä…™˜…Ò…§L…gz…­´…38…Oâƒñ…—P……… ؃ÕJƒ»Š…7lƒ§‚…3Ô…YêƒÛ…Wª…"…«’…¡…Ÿ`…Còƒó(ƒÝƒ»V™ðg…›6€…•|……k,…O|…' …¶ƒ²ƒ}:ƒkâƒkv…›Þ…KŠ…9*ƒ©V…m4…_þ…_ …Sî…)Þ…!”…ƒÿ–ƒïDƒåPƒ©äƒÓVƒ¥îƒºð‚Ÿ ++…›ô…“Â…#®ƒÃ¼ƒ»î…k²…g\…YR…7îƒõÐ…d…«ˆ…‹`…w†…oâ…g …ö…Šƒé*ƒåÔƒúƒ‹xƒ‰Öƒ‡8…©T…ƒ¡ƒ…c°…­h…£Â…wœ…uü…QJ…?z8ðòä… þƒÓŒƒ¥Žƒin…Mzƒ0…|…Iš…G¬…3…-^…†…è…ƃó~ƒ…ä…¡È…_Hƒ¶…§R…sx…/؃«Z…iš…c*…G†…¨ƒ¬…Ÿh…—ž…uô…Oš…K&…Et…3ü…¼…ƒéÚƒÅ0ƒÅƒ¡:ƒ…›X…-d…— …!<…®ƒÏ샜ƒw6ƒm¨…Iº…1TƒáƒýXƒû°ƒõÎ…t…%ă»H…­zƒÛ…ŸŠ:ò&Ÿò…m¶…]^ƒõZ…yþ…3Î…M¤ƒ«˜ƒÇxƒxƒÁþ…mp…£˜…‘0…‡l"O<ð¡n…Ø… š…¸…v…j…ƒ‹Œƒõ¾ƒéÂÔk Ñ!½T8’ƒ§Úƒ¥Rò7…vƒ…^ƒ…ƒqòƒ¥ ƒð…«…¥”…£Ê…Ô… …›È…“2…‘b… …‡ò…‡$…w®òÐgR…c¬…cb<íð ++aœ…Sä…QÀ…Od…G~…3œ…1^RJ…#´^òP…t……… …þ…ô…è…Šñ+(ƒÿ¨ƒû,ƒñƃñžƒñ0ƒëЃ鬃áÞƒßȃßʃكŠƒÃ–ƒ½Âÿòƒ·"ƒµºƒ«`ƒ©^ƒ ++ƒ‰Ôƒ‰^…gì #ƒáª_±ýðx…¥…«æ…¥^…£ê…Ø¢ú…“¶…•Hcð‰D…‡”……t……VŽ9ò…<…}²…o`…oT…m6…k°„Per…g8ðÍö…eT…c2…a°…[’…Yä…Yz…Ut…Q:…Mö…Mð…M|…=8…;¸…5¬…/z…/œ…-ð…)ú…%\… ì…!Ò…à…ì…`…8…Ð…… …¸…˜…h… ¾… Ô…¾ƒÿöƒûÚƒùfƒõ¨ƒóxƒíæƒëZƒÝƒۊƒÍxƒÅêƒÅbƒÅDƒ¿ôƒ¿„ƒ¿àƒ¿vƒ¿~ƒ¿¢ƒ¿ @ÿV½lƒ·rƒ¯ƒ©¢ƒ¥Vƒ¡žƒ‘”ƒÈƒäƒ‹Üƒ‹–ƒ‹€ƒ‹"ƒvƒmd µö µè å…ýj…ëv…ë6 ]è ‡ô øƒo*ƒm':ó€œz|ž ‰NOÑ,²=ø¢¤¦¨ª¢"P/e, -h €ó/É, -Ý,‡Õ|‡Õ¢‡Õž’~ @ëüš¤/¥, /,H @ ,3Û%Ló!/Ak4P (5R Pñ,T E à#/I ¯#/M ²#/Q G#/U k!/Y âr#/abþ |#/i #/m Ö%/qCÝ#/y%æ#/-ë%/…-ò#/%/‘<#/™Ã#/ ²#/¡ zS Ã#/© ~éTå,€*Tý,‚À „w#ý,[û /q,‡Ó¾‡ÓÀ‡Ó®‡Ó°‡Ó²‡Ó´ ¶û ++¸‡Óº‡ÓȇÓʇÓ̇Ó·ÓÆ÷Ú‡Ó܇ÓÞ‡Óà‡ÓŒ‡ÓŽ‡Ó‡Ó’[”‡Ó–,ûâ‡Óæ‡Óè‡Óê‡Óì î·ð€‡Óò‡Óôð£Õ‡Õ‡ÓäV[ö‡Óø¾Р×Ò‡ÓÔ‡ÓÖ‡ÓØ HØJ?¼î© ÷‡ÕL‡ÕN‡ÕP‡ÕR‡Õ ‡Õ"‡Õ&‡Õ(Ì Ó6‡Õ8‡Õ2‡Õ4@*‡Õþ°.‡×>‡×@mDP1™, 1C¬®7êC®°”3!,°² 4D²´‘#D´¶0D¶¸¥s¸¸º3¬#𺺇Õ`‡Õb‡Õd‡Õfú%1ü Ö¼?$Dº¾@),)"1¡7$ Tµ,  Ë6À d3, T%,Ä @), 4)#1©N N NÆ NÈ NÊ ¶u#1­ÐÌ 1Î 1Ð ~)#1±r 4 t)#1µ™ b)!1¹ ++> $f)#1Í> ' S¹,  4Z)#1Õ' T)#1ÙN$ '& N( 4)#1Ý'° ¶á %)#1å[0 ƒ%#1é4 @ #38 h: < 4$Ò ƒÔ ƒØ#3 A@ 4Ö 4Ø „é-!3 S4 B D NF CÜ 3þBÞ hà hâ œ!3[„J]L ]ä Pæ Pè P·#3«P NR Nê N$ º T%, ¸ NÞ#3NV NX Nì œî œð N#3N\ 43, ++% ++.^q.` |b |ô5q|ö |ø ¸AÁ, 3`!!1Å ++  ."3%".d31, 3E 5 <.  7(39:(3=?(3ACEtùÅ ++NBD¾ ìß$Å, ++*é*"Âß©'©'Â'"ȸ­'­'¸'ðÎÐÒÔÖؾ ++óÚÜÞàâäæèc>Z#3ZZRîðc)*)*µ*†öøú"’BD¼ d"§Ôþ  À fô,   Æ h2öÌ ++         ó1¹,  " $ & ( * , . 0 2 4 6 8€ : < > @ B D F1ä H J Lä ê–¤ô ++N P Rê T V Xì j2%&ZôÁ, ^ ` bô l1Ù÷¼ dÀ fÆ hÔHD ¬ö@, Ç ++#1Ñì® $,ç²äì jôhT, n p Dr vå)x ­zØ| ~Ø€ ‚¥„ †¥ˆ Š'%/ŒŽ]6 ’9” –˜ šëœ ž‘™  ™¢ QDt ¤SÅ, ¦â ¨{ ªcúGÅ, v x z | ~ € ‚ „ † ˆ Š Œ Ž  ’ ” – ˜ š œ ž   ¢ t ¤ ¦ ¨ ªw¬ ® ° ++a° ,  ++¤v_-, ²å ++wd  ´ &   N P BR ¶µ-¶Û4 ¸ ºA4   ++ DŽ ¼ &P CN ¾ {b¾ Ày"µ,VBÀ æbê ³2 D Ä sR Ä ÆVÆ¿d Š È r È Ê$• $êB¸ ä+:Ì T õé6é Bº ÎçoBÎ ÚÂU ê&Ü‹‡ Œ aŠ Щ¥ ++}DÐ Ò t Ò Ô"P †$3VV˜   J-#3r¹õ&3_Z§Ö &  Ž ¸ 1º È )HØ*4 ”g Ž ’ ¸ º‘¸ Š Ž’>$ Œ#Œg ¸œ$ Œ  ¸#¸ÆÕtŒ Ú Ü¸A ++Aà$tD” Þo3  n ++DÞ àÀŒW4€;O¸7¤Œ â ä æï”q /-H$ Ð ++47I, ++2è”Õê 2ìL< C 1½,â,00W[!åal î$ä ++4æEÍ €å)R î y# !1ºŽ%71OGr‡÷ȇ9 #÷²’è‡÷®‡9wâRT ++òy‡y:‡y>‡÷¨‡÷ª‡ù£÷x‡÷v‡9JVf'yy‡9n‡9jZc÷؇÷Öbñ‡y‡y‡÷܇÷Þ‡÷à‡ùH‡9 ò ++‡ù2‡ù6‡ù.‡ùl‡yˆ‡ùb¢÷À‡÷¾‡9’£ùx‡ùt‡ùnÑl‡ùP‡ùN‡ùRNS‡ùŠV:23-,Õ ++ú 5 9)9)==AAEEII 83‡á¾ÀÂÄƓȇáʇáÌΓЇáÒ‡áÔ֓؇áÚ‡áÜ“Þ‡áà‡áâ“ä‡áæ‡áè“ê‡áì‡áî“ð‡áò‡áôöøúü“þ‡ã‡ã“‡ã‡ã“ ++‡ã ‡ãP‡ã#㓇ã‡ã“‡ã‡ã “"‡ã$‡ã&Ÿ(‡ã*‡ã, “.‡ã0‡ã2“4‡ã6‡ã8“:‡ã<‡ã>“@‡ãB‡ãD“F‡ãH‡ãJLN±P‡ãR‡ãT ñð„‰, ð ò„, ò ôq•, ô ² ö?‡ûÀå,€["W´c=¾‡=¬óƇ9Ô‡9è‡;Œ‡;Š‡;ˆ‡;†‡;„‡;‡;‡;‡;X(óž‡;œ‡;š‡;˜‡;–ß”‡;’‡;‡;ŽPP;‚‡;ß|‡;z‡;x‡;vÿr‡;n‡;j‡;f‡;bŸ`‡;^‡;\’Z‡;T‡= ++o9x‡9àb?‡9æêîò#ý|Sl‡ýh P€‡}zjk̇y²^iš‡iórÚOx†ò›) Y…e, …é–®m< ¬+•+&i ðÁ‰Å, ‰,¨É/•%¬ pÅ›, ™ù,¤›»}W¤Y ‘Æ¥å, ¥é, ÁLžõÜ]¯h eÁ­á, ­½,šåÿ[*Ae*_ˆ€Ù ,q‹], ‹Û+7‹a } ¹ ½ Á Å f~eŠe½&åù'é í'ñ íVŒ€c-0„?O~TrTææ$Ú&/QNI'€BT1¶ ++  ªîª&/STA/€† ++ 6 zTî ++ôîæîâS/UV9,€JT¾T²²;/W&T1,€ŽT‚TööDêS/Y^),€RSbUæQÜ|/M./.KŠ!€ ++ÓtM"NÿÓ²KÎMKÜMKÞMM¢/.KþxÓèM––>ÿÕ&MBMŒMPMˆMRMŠO/.MrÕ\O ++,€ ÕšM¶O®ÿÄMüMÆMþOŠ/.Mæ>ÕÐN ~ó×O*OtO8OpO:X þ0Z×DOòA)€óׂOžOèO¬OäO®Ø Üž/_<PdxŒ/0+%:M°#Ÿ²P¬Ÿ¨Ž!Ÿz ++ûŸ´Ÿ¢Ÿ~ŸŽ¶2󞟸Ÿ ŸÄŸÀŸÖ“ҟПÆñŸ\ÆúŸ`nQòŸì ++º!Ÿô[¾ŸÎö,°ŸÞŸøŸà*¡9@&¡0¡4!Ÿþ 3¡6&q¡8¡ ++@2RFBŸ †Qr¡l ++:0Ñt¡b¡>¡NNv,¡¡^¡x¡ ++c¡€¡–’Ô†¡„¡‚¡$¶#¡²“¬¡¨¡z ‘´¡¢¡~DŽ¶2󞡸¡ ¡Ä¡À¡Ö“ҡСÆè7±¡ò¡ì¡èº ++±¡ô¡â¡¾Îö0óÞ¡ø¡à£££“££¸ƒ*–fÿ.ÅÉÍÑÕÙÝáåq¼S&ÿQ' …S' hU' }RS'% ) €U'1 GS'9 ŒU'A ÌR'I M kT'U Y ] a e i 2Qb±U,ÃÐÃÊ[VDdC†Y?ÃÞ),€DTY, øñCÜ#ú DYžòs¾"E ™E²¨?)mƒ\¹=%€k]ƒ»EJNo…Í,2A øœ?Š[tyŒ˜cö‹¡fcÜè/òò3žK"ƒ"1Þ‹Ó¾‹õ‹•ôehwØ $?$;¦‘R‘B‹‡ÂQŒ‘yv=P‹“€?¼‹ãb‹ßryXj-Z-^‹õ ++Žsz¶29±·£W +u1Ý"pK +++M+·]D+—u"+" _KÓ*³¶Q°EY_Ž€Û0󘕧†•§’•§‚‡Û•£H•¡®•¡–•¡ ++•Ÿ•à•F•x— ܇Ǧ•›‚•›v•›X•›4‡Ëì— ´•›Z•›‡Ë–•›•™è•¥š•™Ü•™Ìƒ™z•™P•™6— €•—Ê•—¶•—`•—X— ••¼••º••†••\••Hó ++(•“Æ•“¸•“¨•“x•“f•“dò$h‡¹•Š•‘Ø•‘°‡³ª•‘œ•‘’•‘j•<•‘ ++•ì•®€óß–•d•‹à•‹Â•‹‚•‹„•‹\•‹:•‹,•‹•…j•‰Œ•…l•‡ú•‡¶•™’•}Æ•ƒ•¾•Ž•ƒ”•H•L•X‡ê•}Е}È•}¬•}†•}x•{ú‡‡p‡…î•yì•y•yz•{•y—ò—Ø•u•uX•uZ‡{H•sT•s,•s•qú‡u²•qæ•qÚ•eB•q¦—ê•q.•q•or•oÚ‡k.•mrP •m(am•k@𗨕k•iº•i’•i<—L‡] —•g¶•g²•g®•gˆƒSú•g$‡UÀ‡U“Û$•eä•eæ•ÿž‡¾…[|•en•e^•ÿp•e•c •cŽ•cL•a>•ýΕÿ •a‡G •_¼•]ð¶•]´•]º•]`•]:•[ô•]•[þ•[¢•`ð*[v•[D•[0•Y®•Y•WÄ•U·7X•Uø•W|•U¦•Ur•S²‡3š•SBò@•Sö•U0•û(•Q´•QŒ•QP•Qž•ù¶•Mò•Mº‡#€•KЕG¨•K•÷j•I|•÷•÷Ú•€•| ðIr“áR•Óü•G‚•Gñ^r•Eú•G‡4•÷*•CÊ•E¶•C•Aº‡ì•A¬•CŒ•?¤•õ”•?L•=Œ•=•9†‡ ’•9$•ó¬•7œ‡’•7:•óH•7•5ª•5vð…ùÔ‡oÚ…÷þ•3X…ñ~•1z•1`•3.•/Òðî/„•/•/‚•/4•/•/…ïЕ/¦•+²•+6•ï®•)€•)Š…éx•-*•'B…çd…ç•%˜•#´•#ì•#ô•ï•#š•#6•#D•!Ú‡Ïì•®…Ût•…Õè•ð•Ø•¤…Í6•H• …Çâ…Å&•\•<•éü• •éè•éê•Î•¦•~•X•Ð•é0• …³þ•ð…³J•‡_4• T…§4…§…£ò•å„•å‡+ó• ˜…¡œ…¡ …¡T…¡"• NðÒP•ü•å •~•å ++•ãl…•`••†••áÜ…X“ÿú…‹t…‹ “ÿŽ“ýØ•áR“ý2“ý “ý…À…{l…{n“ùâ•Ý¼…wl“÷8“÷4•Ýz…sÊ“ó(•ÛŽ“ó“ó “ñÔ…gÊ“ñ•ÙØ“ïN“íÚ“íV•Ùz…]”…]X•Ù6…[8“çø…Yr“çÆ“åþ“åê…SB…Q²“å:…O¬“å/'ðBB•×X“ã “ã•Õò“᎕{¢…GÀ…G¦‡ì‡Ü“ß“ß“§Þ•ÕF“Ûü“Ý ++“Ûè•›¾“ÛÄ“Ûð1°“Û`…9¶“Ûf“Ùø“Ùn“×Ü“Ùò“×À“×n“Õ“Ùš“×®“׬“׎…5Ü…1.Fð¢•Ñø“Ón“Ól“Ó(…“х+•Ñ ñ´œ…'þ…#¾•ÑŽ“ÍÆ“Í°“Íœ“Íš“Í“Í`“ËV“Ë°“É„“Ë(“ɤ“Ép•ÏЀ“Ǿ“Ç€•Ï’“ÅÆ“ÅÂ… ¼“ÃÞ“ÃÒ•Ï&“Þ—…:…Ì•Í•Í“½^“»Æ“¹Ž“µúƒõV“µR“µ(“³v“±ÀƒëR‡Çª“±“±>“¯Ø‡Ãþ“­“«N+FóƒÏè“¥œ“£ä“£¦ƒËn“£–“Ÿ^“"ðEÜ“—ä“—®ƒ·æ“‘Æ•Á´“‘rƒ±ô•Á“`•q„“‹¤ƒ£bƒŸº•¿•¿“‰4ƒ—╽”ƒ•Î“‡æ“‡pxòg“‡®ƒ‘–“…@•» “ƒ¶“¼“ˆ“•¹tƒ{²“{ð“w–“u•µ~•µB“sPƒe„•µ2ƒeƒa ++ƒ_“m´•³€“m<“m4“m(“m“m ++“kƒQ  [xÿ¬%ð Æ00BÅñ! þ      ++         4ò,   " $ & ( * , . 0 2 4 6 8 : < > @ B D@ó F H J L N P R T 01À X Z \ ^ö` b d f h jÛô l n p r t vòx z | ~ € ‚ò%„ † ˆ Š Œ Ž  ’ ” – ˜ š œ ž   ¢ ¤ ¦:ð4¨ ª ¬ ® ° ² ´ ¶ ¸ º ¼ ¾ À Â Ä Æ È Ê Ì Î Ð Ò ÔG¾ ++ð! Ø Ú Ü Þ à â ä æ è ê ì î ð ò ô ö2ñø ú ü þ  âó    ++      ÆoR   ++÷ ++   " $ & ( * ,÷ Ò·c/Ë·µð. 0‹  2 4 68Ÿ: < >ù @ B D F H J ;Rfö N P R T VoX ZA´ \ ^0 `µ2 b;d0P f htj l npp r t vxz7|0 s~ˆ€ ‚ „ ž$<>ˆŠ@Œ Ž’‘_ ”0B – ˜00 šfžø3 ž   ¢ ¤ ¦ ¨ ª ¬ ® ° ² ´ ¶ ¸ º ¼ ¾ À Â Ä Æ ÈHšÒÊÝðVÌ Î Ð Ò Ô Ö Ø Ú Ü Þ à â ä æ è ê ì î ð ò ô ö ø ú ü þ ++ ç’ð "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxzŒðØ|~€‚ñjT"ñ ++…À†ˆŠŒ.öÜŽñ‚’ñ„”–˜šœž Á¢¤¦¨Yòª¬®°²´ö ¶â¸º¼¾ñºÀÂ׌ÄÆÈ\ðäÊÌñÚÎñØÐýˆŠŒg ++Ó45Š3Š*‰%ZÒ¶*ªŠ% ˆ6Ú Ü?Þ0à?âïäæèê0(Oì0! ++/î‰^ðè42ô øúüPþ# *0  ++@  YP@@@ o"$2&¤(*,.0ÝékÞ&ÿ2468:<>@')0B ðFHJLNPRTVXZ\ à`bdfhj@ln@prõ tvxz|~€‚ˆG/0ÂO†xÇ~ˆŠ"KjOŽxÿ¬!ÑÝw ++¾ ++¤äÑ ´`BÀXò ++´8ª8B„×F†×APPSR$ÞU ’_æax’” Ñè_–*ãäÖå˜å#å'å€06–6˜6/;æÏÆ@B X:æÆ3D3Ùç;ã(??Fæ/pÿ‰ÿ™ãOp—å.€Iã èäpšå šåÅIã¾›0ꛈÚÔ(B X H¬æáùààPQÑ ++5ÝeÜ]xìÝÞ$Úpæ`™Þ«=Þ@çð€Xâ– ++àƒâ; ^ãiß EÜMp’çC’çÜæ  áàŠå´ ¬yáAÏêÍÝ@0 áÛtà@}àŽâ žç1žçè/žt(µtu àšåàž<èå ðÛKEÞ3í#ƒDè,ƒå@èB=:9Þ‘†å †å 0†5á3à†Dè†(Ü xè*xèR ‡å xè8|èo ã0\+‘\tè/Étè 1ßÏë¼H®ˆè0yë+UO0šåY•àM=àPð¥P œqÿÿê4š.æ6h P YêãBàïå#3 áƒ3 á@#àRå1ŠHåK6 mæ ŠöQåà‘åäw\Þ ï_²_ó ÚÂÖÊZÐÂæÐèÂÄØÊ4ß°˜` ­í·>éX?ùñ ›1-ì@½¹œA­qi[pùép$‡7ƒ‡Tq$Ñ,Ýq$q,7r+r]¾p$Q,þr$E,Hs#%,´s‡\š$‡ 5u%…ù—té}r0 …s˜$…Ñçpßt˜u1 …rdƒà€ƒ<ƒ<ƒªƒ¥ƒAƒAƒY&ƒ,ƒFƒÖkƒrƒxƒpƒ–ƒƒUƒÒƒÒƒ)sƒÍƒi9‚ƒÈƒN›ƒ¥%l‘olßqälUÝmZ;l¾221(w'­pÈ 5uÈÃÃPPPniUcPP|Ô Um´#uÍR(P ˜sñ i, ÿñ, ÿé, ÿá, ÿÝ,eŸð:ÿÑ, ÿÍ, ÿÉ, ÿµ, ÿ±, ÿ©, ÿ¥, ÿ¡, ÿ, ÿ™, ÿ•, ÿ‘, ÿ‰, ÿ…, ÿ, ÿ}, ÿy, ÿu, ÿ`ñ'e, ÿa, ÿ], ÿY, ÿI, ÿE, ÿA, ÿ=, ÿ9, ÿ5, ÿ1, ÿ), ÿ!, ÿ,£¡ñÿ, ÿ , ÿ , ÿ, ýñ, ýé, ýå, ýá, ýÝ,e¢ð>ýÑ, ýÍ, ýÉ, ýÅ, ýÁ, ý½, ý¹, ýµ, ý±, ý­, ý©, ý¥, ý¡, ý, ý™, ý•, ý‘, ý, ý‰, ý!Ÿðm, ý}, ýy, ýu, ýq, ým, ýi, ýe, ýa, ý], ýY, ýU, ýQ, ýM, ýI, ýE, ýA, ý=, ý9, ý5, ý1, ý-, ý), ý%, ý!, ý, ý, ý, ý, ý , ý , ýè!,¡±ûé, ûá, ûÙ,ߢ1ûÉ,£¬£½£Î£ß£ð£¤¤#¤4¤E¤V¤g¤x¤‰¤š¤«¤±û}, ûu, ûm,®§ñû], ûY, ûU, ûQ, ûM, ûI,¨¨ñû5, û1, û-, û),€¨ñû!, û, û, û , û ,ê¨û¨ð ùý, ùù, ùõ, ùñ, ùí, ùé, ]©n©ñùÝ, ùÙ, ùÕ, ùÑ, ùÍ, ùÉ,å©ö©\¥m¥~¥¥ ¥±¥Â¥Ó¥ä¥õ¥¦¦(¦1ù‰,J¦[¦ñùu, ùq, ùm, ùi,y«Š«ñùU, ùQ, ùM, ùI,ã«ô« s­¦¾¦Ï¦à¦ñ¦§§$§5§F§W§h§y§Š§›§ñ ÷å, ÷á, ÷Ý, ÷Ù, ÷Õ, ÷Ñ, ÷Í, ÷É, ÷Å, ÷Á, ÷½, ÷¹, ÷µ, ÷±, ÷­, ÷©, ÷¥, ÷¡, ÷, ÷™, ÷•, ÷‘, ÷, ÷‰, ÷…, ÷, ÷}, ÷y, ÷u, ÷q, ÷m, ÷i, ÷e, ÷a, ÷], ÷Y, ÷U, ÷Q, ÷M, ÷I, ÷E, ÷A, ÷=, ÷9,ª¯»¯ð*÷-, ÷), ÷%, ÷!, ÷, ÷, ÷, ÷, ÷ , ÷ , ÷, ÷, õý, õù, õ’¡ñ, õí, õé,ä°õ°ñHõÝ, õÙ, õÕ, õÑ, õÍ, õÉ, õÅ, õÁ, õ½, õ¹, õµ, õ±, õ­, õ©, õ¥, õ¡, õ, õ™, õ•, õ‘, õ, õ‰,²*²ðõm, õe, õa, õ], õY, õU, õQ, õM, õI, õE, õA, õ=, õ9, õ5, õ1, õ-, õ), õ%, õ!, õ, õ, õ, õ, õ , õ , õ, õ, óý, óù, óõ, óñ, óí, óé, óå, óá, óÝ, óÙ, óÕ, óÑ, vñ,óÉ, óÅ, óÁ, ó½, ó¹, óµ, ó±, ó­, ó©, ó¥, ó¡, ó, ó™, ó•, ó‘,—¶¨¶ñó…, ó, ó}, óy, óu, óq,S·d·ñxóe, óa, ó], óY, óU, óQ, óM, óI, óE, óA, ó=, ó9, ó5, ó1, ó-, ó), ó%, ó!, ó, ó, ó, ó, ó , ó , ó, ó, ñý, ñù, ñõ, ññ, ñí, ñé, ñå, ñá,¼¹Í¹ñ÷ñÕ, ñÑ, ñÍ, ñÉ, ñÅ, ñÁ, ñ½, ñ¹, ñµ, ñ±, ñ­, ñ©, ñ¥, ñ¡, ñ, ñ™, ñ•, ñ‘, ñ, ñ‰, ñ…, ñ, ñ}, ñy, ñu, ñq, ñm, ñi, ñe, ña, ñ], ñY, ñU, ñQ, ñM, ñI, ñE, ñA, ñ=, ñ9, ñ5, ñ1, ñ-, ñ), ñ%, ñ!, ñ, ñ, ñ, ñ, ñ , ñ , ñ, ñ, Û , Û, Û, Ùõ, Ùí, ÙI, Ù9, Ù1, Ù), Ù!, Ù, ™hÃò {Õ, {Í, oy, ou,íÆÀi, k1, k-, kqÈ"-,yÈ0!, I„ò4g, c!, _1, _-, _), ]Q, [1, [-, [!, O1, O-, IÑ, IÅ, I¥, 7M, 7 , 7,Ã\Q•, 1‘÷O Pð? 'å, 'á, 'Õ, 'Ñ, 'Í, 'É, 'Å, 'Á, '½, '¹, 'µ, '±, '­, '©, ', '™, '•, '‘, ', 'Pñw}, 'y, 'u, 'q, 'm, 'i, '], 'Y, 'M, 'I, 'E, 'A, ' , ', #Ý, #Ù, #y, #u, #q, #], #M, #E, #A, !å, !e, !9, !5, !1, !, ! , !, !, Q, M,¨q5, 1,˜¨9©qÁ, ½,é©1µ,‹ªÀvð©, A, =, 9, 1, 0À%, !, , ­€, Í, L&L!Á,?Úµ `µ, ±] Q, ©, ¾1¾ÝÝr }, y,  M@i, 9M°a, ], Y, ñuðQ, M, I, E, A, =, 9, 5, ° £¡@), · Á¡9Lp, , Æ ë¡ñ8 , , , ý, ù, õ, ñ, í, é, å, á, Õ, Ñ, Á, ½, ¹, µ, ±,Þ†ð9¥, ¡, , ™, , ‰, …, , }, y, q, m, i, e, a, ], Y, U, £@M, £@E, +£u ++t ++s ++â´ó´ µ±µ! ùoàñ5 ñ, í, é, å, á, Ý, Ù, Õ, Ñ, Í, É, Å, Á, ½, ¹, µ, ±,åºöº»»ñ •, ‘, , ‰, ¼¼ñ }, y, u, q,;¼L¼ñ e, a, ], Y, U, Q, E, A, =, 9,U½f½ð !, , , , 1áð= , ù, õ, ñ, í, é, å, Ý, Ù, Õ, Ñ, Á, ½, ¹, µ, ±, ­, ©, ¥, ˆð•, ‘, , ‰, …, , }, y, u, q, m, iúˆñ, a, ], Y, U, Q,Á+Áñ =, 9, 5, 1, -, ), %, !, , , , ,£¹´¹ñ , , ý, õ,á±í, é, å,±Ý¡¾¸ªx»x!Å,ZÀñ¹, µ, ±, ­,"¹q¥, ¡,h ++à;á1,•º±…, , u,|áPm, 3}!e,&Þ¿‰¸±M, I, E,ÏÀm}¡5, 1, -,—¹q%, !,ÝÂà°á1 , ++»ñ*, ,(`šœž ¢¤¦¨ª¬®°0.*A&$P ^lzˆð   ++æñÒüúøöôòð²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$âàÞÜÚ&(*ÖÔ’pÐÎÌ!!È!AÄÂ0!¾?!ºK!!âW!Aà´l!°x!¬„!¨•!¤¡!§! º!œÆ!˜Ò!p”’ð!ö!Œ"ˆ"A„‚0"~<"B"zP"v\"rh"nt"j€"fŒ"b˜"^¤"Z°"V¼"RÈ"NÔ"Jà"Fì"Bø">#:#6#2(#.4#*@#&L#"X#d#p#|#ñÿâ,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnÖprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnpr‚%Ž%š%¦%! ü²%ø¾%ôÊ%ðÖ%ìâ%èî%äú%à&Ü&Ø&Ô*&Ð6&AÌ ÊšÀÐ^&Ìj&! Æv&‚&¾Ž&ºš&¶¦&²²&®¾&ªÊ&¦Ö&¢â&ñÿšžtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒ-)ñôŠŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.0246 Zo+Vƒ+R+AN LÕ+Há+Dí+A@ >1,q: 8 6M,@2 0b,ñv28:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ‹-(—-$£- ¯-@ Å- Æ×-! ã-ï- û-.@ .! þ).ú5.öC.òO.î[.êg.æs.â.Þ‹.Ú—.á’”– ÔÐ.ÐÜ.Ìè.Èô.Ä/À /¼/¸$/´0/°0^L0ZX0Vj0Rv0N‚0JŽ0AF D¤0@°0<¼08È04Ô00à0,ì0(ø0$1 1 1,181D1 P1\1h1t1õ–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþPgðZæÊèBXš(ò @X‚€B ð ++JÀà—åPáX ++güE ++à—åàŽàžå!#äúLþLþ@0ÃãBäú°äú Üú?0’Lþ ++ à—å„ý×ù€ý$|ý?_€âÅ£ôå O€â ó à à uà ƒšå¨ÿÿê>?‡ ò ++"ûò8B  ° æbŸ‘0 á  á ¨3Sá¨x¨¨4°žå¤Å^á"ʈRáˆa ^áu(;[á(@àKàf&dô Bà"# á ã’àà‚à  ãžà+êŽâôýWƒâÍ3 1¬ d!£×  §  €Ú&à ãÏ ` á à"$Û!H(*€ÁàBà. áp ã÷ûû Šå°ŠåÓ!¢<¹ÿûø0šå šå°šåTãÕÿÿÐH80$„«Ñ—ü xo8M”Osÿÿê\\ \û´d d Øã õšB € æd ï0° á‚ýóÎó¹ó\Àžå,›ÿÿ¸ ÂãA áÁã€â‘ç2 ‘ÿ&à’›POâà%`^ágº‰&QQãa$0Tã~%‚þ0À†å2#@ à†åßÏ`Šå  á  áòŸ ŸAPS°†å Ÿ Ÿ‚û1—! ‹€S&^ãW„šåžåS_ÀŠåS¢˜±S6ÀšŒ-@‚Æ$ŒOƒâ Šÿ @ð3Ǹ¯ ƒârÿDoÿÿêóL)*HÎ#° á°å Àåûž$' °O@Šå ¶$¢üÕ  ï5 á{°,_@šåpøÚÐ÷¤|–#"÷O°šå2÷NXS >SX %h+ ++%*+¼Œ'ƒ1/p·ŒÊ Tº«ÿÿê* ++ØÒ]+"Œ(eB ++ñ÷FàÆ 2äÊÌ1$% ++H°+(ß+† Â@T ++Hy*wR ++ ZC¶N˜H ²‰ð)!H8 :- ++?,$ ++(5`•v bW,&!+X S2Ù('+x'+],(+(+")+3)+è8 O ¯¯& ++0@. ++( ÿsP0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #‡¤,}ÂötB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆpùXþÿêBìÊÆèÞäZ|ØÒæè B   úóTã+  á€Xâ ++àâ^ã ++à’åã æ®à áÎã áÀ†fÿ/á¢&` ü p–å@ ã ð–å Šå Šâ àâàŠåP¢Á Jâ šåÖ’ ,éºB  Hèè°&@ ã0AâSðÚìð: ++àC⠀⠒çà€âžç`EâP…â,à™å^á: †åà†â à†å†å@†å@ á0Câépÿ7ÿ/áòÿÿêŠå0Šå @Šåèè"èÀšå0šå @šåÕ`°Sã0å   C0†å ”º dP2ÿ/áöDð ðšå ++BPXBb8š ++ò  $üæ@Òæ@ÜÞè@Â@GÔ ++HÞÞàæP6ð BLPB0 m#Z|4v ++v)¸ vð0$à™åZá(*’H ++:"" BJJLu*^šå¦/v "šà`_3ÿ/áÑŠÁz($Húù ++ØÊÜÎèÐXB$ B  H¦PQãFŽ@T‘0 ã&Pã9š åØ@ „àКD ++Ø1ØÀ å&Rã* ++`Dù’åàƒâàŽâ„à€åHHß‹å0ƒâ ’åÜÿ|óî@î î+ î@îÞ|ô Çÿÿê àâàÎã`EâP•à * ++À ++:à áà†åLâ0AâDÀà†â0Žçøÿÿê&¨Ðñïÿÿê R  ++8B¬`òQ* ++! ++È?A@B`  ++ ++ 9((2ØQZÆÞàò÷((  ^ƒUD5200ÎãD5£Ÿ  áŠå ‘éb¥ “  JâšåK9 àƒqqS :ƒqrà á^uâàNâ ã†âuO áÙAî;@.y;«õ¤Å Ú HB¶øS·1B¸ó0 á(Rã[Ê BâRã=[@( ++Oýàžç‚âƒàà±iñ‹åàBâ€â‘ç¡mpƒà‡¡8p‹å BâÞôŸàíaŠå0ŠPP¢4À Jâ šå0šåXÃd@Rã£øP ‚â0øƒøDY ++È&0‹y ++ ¿È dÐ ++ ++à ãàŠåÀ0 ãð 44ìì _8ýìÁ šåáÿÿê ++j0%0:³¬x,Hàè1!¢ 8bFO(tAPdO ++d30•·|ÒÚÚêèÂÄØÊZ /¨ %~Nsr áàâÂàà”åàâ^ã )ðš' @TáÒ@A™åº6º%ºPPŸ áײ‹"@ JâHqàŽãà„x: ++>@>9>O@šåÊ>Ã>’š  õO0ç çOŠçÐ QÌÒØØBÛÛ)` BSTãEM 99@à ã)CPá)&½?p‚}Pà€âí°;µ­…_0Šå} j<å}a‘— 0šåšå× ÿû pA ++:ÃhÚ ++¸âH 4¯:ž0¦] Ìðx ¨+ø z XªHª°àâ^ãDº ¿.á áàÎã0NÆ #‚7O‚âÆ Æ Æ  Æ õÆ  Æ ’Æ &ö1¿ C w0  *üOÜ@Ìð÷2"Æ 'Ìðz&5+è pvû n0]û <\Tã/K àK (é¤a åôÿ0„â ƒçàŽâ åóš @@Šå¼/ à/- @@šå¼# ào ~ ++„~ ++ ++"Žãó T~ ++%@Dó ó ¾À~ ++.Ùd’P‹“z"($œ((€"aÌÒðÜêÚh`Qr& ++Ø«H?Ê&'\.Ìðt z*  ð v —‡ƒ&.áf dTP(Sã) 0àCâþ —ž 0“!“çX0ƒç»§ð‘ç„âçàNâS– /@8+Ý8R šå@8á´1^ãÐd‚â “çب-xF ++€àŠå0Šå6 J ++@„„*qB âØL0Ü/¹Ü"@Óæ Ì ++¦ (W :(ª O@ áˆhå{,rº(ØnòÒ*Ð,Xú*Xâ0Š*kC( ++Ð% .“^08Ìðô ++ ¡2˜/° ) ++'O _àâ    7w& o w# Å# # P=# ÉÂ# U(¨.# Y0 ( ð% ?’2þ34Ê1ÚÂàãw6 H $ˆ! <ø"àõ'ð0âSã0âSã™`0žå /ùaò"àÊ €ˆƒ ÀàšåÆÿÿêTãwüRp á0ü`‰pâ^ãPü!à•@•“´ =$.†+$Y ˆ1^áø G`Eâç ´ñp†å †å 0†å†å à ˜p áAâ` 0´/ ŠDx$dÜ 4"p ?+å$pŠ€äLé:‰øÎø¾ø®ø« !R{Øà á žå&Qã.OPàžå0P0î`ñ4 'pOœOŠå|¶RüpWÁàšåšåÒÿÿê´´0Qãe¨!žåbÐü% àO@ ÿ ++å°å«° á°Ëã[áóÿÿ ++ # øÏŠåŠåàŠåü¢üùü”šåšåà 娠ù_ÀãP¬Ÿ0†å p†å ¬(à¬;X°_ ¨° *•°œ¿jÊBÄ 48K04 ¡@àäÞÆÊÈêäÊ Ýò6xB8  X: ÌÜ 0 ++`SãKʃp@ ã0—åë   g ++ @P ++0C⇠S@Žçù[ ++Ú $ "$ Ð ++ à—åžå "žwi Šâp— 1ð—‡ õ p·8Ð .1<ÞÐ׬s¬GA Câ°„àŽâžç 5žç/¼³±»'D@ŠåXXXX,nPä 4Câ@<j!A84€àƒâ „àk ‚ Õ†žnA0„à8?ƒå8  õéû h' /l\ t°†ÿÿêŠ ++°‘ !ÀÊBz8’ ++ à!°p' ++ø#Ý a R8 ++(Ý  pÅR$£æ@ÞÌ@ÒÜàêèè€æ@üæ@ÂÜÈXÈÒÌÌÊú7/06' yðb8 â6 ++@B 3/@S!p2D6,>Ò!xCò ++6àB< °:§1ŠÂ ++²DWÊ R²@€XâA·ÂO —åïy+ bà—å w/p- ?pšåCe°qç®÷G@ ãÐÛ±Û@  ++t¾µP”: $û„à€å0€åˆöÒ ++Ò ++ÿ/pß.UßG À_Àð&àij cÅc¼;ÀP .P" @HNâ¯6¯I4,w w¯ „!0‹d³>à_š,eÜø .MøOd(16Š.6@ ì· 2@É a0buúAV8CXB $0""Hz ¨ú<˜B Pcn ¯—å0€â@“çkrkTkChB /PVA h6 ++·GP ++(‚l²< ++ Ã&>^O@ ˆ5KB6á4DøqÞäZÊÂÆÐñË<#ˆ öºL#àþQÞBÞ? ÒtÄ –,@/*^0€ ++0 áe%z ++Ë ++ú2 "à9 pÓ³ *ÑÌ* „àšåæÿÿêáö4T[ /)XÒ$Êî!0Æ4–’+œG0 á œšošl´]´Z’ Q&ÈZŸÈ!ÈÈ â>Ò° ++ƒâçpØ#$—ç@#žÔ‡ ž*¥ž<#"à*[ 1žÁužç pš@ d / hÊ; ÂN¤ Tð..# V8 ŠåhST1àžXqàšþ12Ø%;!D žåœœOòÿÿ ++0Ü$ú+úà3!ÛîÃ&Àä$jè3è'èú £0Ãã šåS5  ++ò ¸ðî +ñîð`(˜v È"0ð_1ƒâP&.0RU+ ++8 ++'ø ++4/0Ä+µÄð ++l&à0 ++H øö Hl ++ÊD ä ÈÈ( +}¬ ++È <  ],8 nôí852t ÄMdÄ+ ü¢~²ºBxz2jBKO(D ++Dj ++’ bB˜¢12Bö (9œŒ ++ª‘ (/Hf"XNaB,F‘CúBm *P. BB= /X\6@É ' ++ € BòB&F`/HŠ0 “ $P×.2æÞäû&J{"(0 ¢(…}"…mÓ ^§[²(0S¿#ÊZL¯7?Sã/“Û/͇0QP //9Ñ//"pÇ,[‘l1pÇ,È´`­÷ A9 ¬‘ XB$-‚²J8BN51@ÈÞìBz/ó\óGó0Rã,óò Ðîóp á ‡å ‡å ‡å0‡Ô ‡åƒò S¡q!‚ Óê }!—? àO@pc)Ú¼#‚3 ++‚33`p ã0†&03O0 áÁä& °3+O šå¤`ó ++ÿÿêz  BL È ++äÊÆê×4v f,Šå(pj `m*(à* žåð àžå( šå ’å šå>0A’ç¢ò ‚â(šååRá[† ++@D ++ò å€âç Šå ½0 Šâàå pž– P¼½¨#j5 JâÆ"J Ü0 ‚â¦ Ö Bàÿ‘0Šå00šå,2 ++`SáªÔ10žf bàCà00¼@ ++ƒ04Qƒà0š– 4BÞÓ¯ÿÿêp8e4¨$xÑé4 Jâ4Šå8Ú %šåXA`ƒà4€s†à<àŠå8Ž @žç,ž " rRÀšå p^1¸þ ò Šå$`ŠåpŠåÀŠåTŸ Šå@ ŠâX“üÿ@°@@ Jâ˜P$`šåRÀšå`" d† ÀŒâà‡â@y.„y.Bn`@‹å\Òªf ++ ^0‡âÎàö ^Õ.D‡âüš2­â‚àà€Ò#û6S0ƒâ<Ø#¼T3-$@Xn|ø)êV2!0šä 4¶ ?àe¾3Õ¶F ƒH!„!ä;HàL(L{P%‡âdÒ4_ƒâ‚Ò4Ò40ÀŒâ¨6Çÿÿ<00ƒâð`ö _ÀŠå8@ ’|i88T [Àšåè»0Ú½„äÐ ä/ùäo+ÿÿêíøl4lbîþÿê0| Rðå 0#X^Á&&¥þô.ÁþŒþÿê&ŠE‘PòL`– ++"ðV WjL ++`"¸MWêL ++8€@ ++L#HgCâLašL ++PrK5Ní ++"Hù ++$ ++ÈÖ/I*2NÊ ( ++À3:Já ?(P¬ ++P 7Tì ++¨3R¿)`  {$" “%ú ++ TñD͸3AÙp W Å 2 ·$¢ ++0 á† / pû A*¹û"0Ð*5\ e22pk/)22OpšåÎã<E9ž ++uJBNÈ $“*5jROT84 [ T·# ++W1VG2Y \T&ð W wQ@J<mZ²eKa, ++ ,Š¼1 t2b+‘j1à á½³@šåd^ã ª<8Ê1?1X+/ 0  5" àï?"dH @UHDä+°+ ++P² /Ù°+_@šå“ÿh,&t ªV0\2ñhBZ   ÈÞØ 4  PRã ++î-0ž‡5$ í.¯0„å&à ã à„Öõ* „ds* 0RモR¢ Bàšå, € d®Õ"à„ è” *à¹$SÅÿÿê,  8˜4È 8·LEXh¦ 6?àÊ!ü*žZ2ž` ba©dX  ý·7p„åà„â"œœ (·7HHH0}¾!0|Àpuÿÿê ++ÂC hÚfèÂÒØX7%P(BXë°þbØÚÊäÎÊÊ"pâ0&T ++¦+ƒ1d’O¢+R’å”Ì#@ žÊÖp’Ö1^Y1à”~9 ”†ÁBl É/ án|O„å 0n5à’tš9 ’x¸x/Ax; 8 ++ ½m<œ•®.2A ++˜! ++hl'ˆ À 2’Xq! ˜ú £ C Z'2FXBµÀ(B V@+r7?\ ++(t25^•`•ÿô^/Z† ^†`†1b ++‡dØ67à ++.^!U`ŒJŒ;P**# ++ƒGˆˆ ÄH$/Ù„ ^Ê YŒ¶¯ì;Pºb e:d0Êdó_X bY ÆoÊd ++ó6f ++c‹n  ++\Ë{Áï®{Ÿ{& î?« óq" ö?dS7ª¶{ ã‡3à†s ++U†å`Š£f”À0éEM-¼6/ @¿.™H ¥FÇE!;`Cƒ%G‹‡3‡1 ‘!,{5@à‚â$>àHÊK ‚â à‘åÛWó?# @“ &§ ‘ý*# @“{4Ô¶ApÅn  Ì .)K=œ?Ë8ËW(ªfË@¸Bla3ð [ 4B ¢. \ 7@&0 ã¼1 0Žq§;$   â%y ö#+™ê%¸xx …É%šX. ++[\L?D"à*-<< 4 n ++Ál Aœ ¨/ Mm¼  § ±§Sêh; ) ++#€Y j4 ; ª&0y!àš*H dP 3SãOg:@ “å5O 0¢è'…R" K"àæ ß=q Žâ zC¯!‹è ׯL$0¦<Lq_ 0“åÄL ät& /m豘0äƒä !0‹f? @ž€ ä ä‚ä`&€.O ‹åë*€.€B03! ++ „˜ÎK2òj% ++ˆ -4(@l-&hâ `â 4 ++P\H– 0:nÂ"o¬0fõ O jnõ 2p Ör} #X ÷ ñ,›÷ YƒJÙ1÷ 9…+ ++¯ ‹8 ·H$ÙH,§w©,!L •»§ hUºp3 ++5r£ÊrxBj ++ ++Cp9 ++NBr9 ++$ ++0ÆJP0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #J,7¬öB   L0Ÿåê ƒâàø à‚å,°™å Uá€*°Kâ,°‰å ‹å(O àƒåHhH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨úxÿÿê0BàäÞàÊäèòZØÒæè B p  |öTã'  á€Xâ ++àâ^ã ’å`pæp–å@ ã ð–å” 00ö Šå Šâ àâàŠåÀ(âÿ/á± Jâ šåÚô ,PŠÇð;ZÆÞàò0 $üæ@Òæ@ÜÞè@Â@æòÚÄÞØ ++HÞÞàæPBb8z BLPB0 àêè/t Ð  )PTãs)a0 áà!b!€à“å&^ã19°žåPá ++M€ ++ àžåÿõÿÿê0ŠåŠå ŠåàŠå ¢<• ð0šåšå šåàšåçÿÿê\ô0Žâ ƒåã¡ÑÑ&0‹Á t2Iüôÿÿê “å`EâP…â,à™å^á": †å †å  á  Ð†å †å 0ƒâ`2iP0ÿ/áäp[7ÿ/á×(‘O  á• xB(ÁB ++°B¬ ++ p0BP ++(O(qY 0_e äÊÚ_ ++_$0  _STã_ˆ€ñOà ã 0’å&SãIc“cccB“å 0/# gO0ŠåcP™*pcñ0šåèÿÿê^ãdàžå 0‚âàÛÛ2¸¿ Žâ0‚åX XÔ3X ¤ $B ++QJ ++ ++ÀO@ s vHæÎÊc’&Ð e3ñà á0âSã"àže0e?SáeŸŠå Šå àþ‘þÄšå šå àšåé]0@žåJO@ áR e2 úU:XKI¬MðI ®w®f á¶dQp “åà áU3UpžåWẠÿŠå Šå ŠåàŠå]¢|¥¾øšå šå šåàšååÂWW2¾ž¾ ¾= ¯¾L"ZRb ++¸¾¾ssÀÀÂÂxÂèÂÂ$ ++0BP0B¬$0*B   L>@ ãðšå#O,­¾üLRBP h  L$à™åZád*€XâU ++  ã0Ÿåê`EâP…â,à™å^áG: †åà ã à†å`Šå$9$0$@`ŠåX (³*:0 á ƒ,Fƒå|¦ 0Šå Šâ`òp–åàâàŠå@ ã ð–åí› Jâ 0šåpf :àLÌà†å@†å áœýù:  á0‚å ‚äì ú áàšåàåàšå àÀ ŠåŠåÄ¢<±Ä^ šåÈ"È8 ++ÌJƒå@@ 8/µø†åp€â`‡åã ++,°™å Uá£*°Kâ,°‰åp‹å<= à€lll` †å p‚p|p p Ühpœ†å‚â`pUpp‚p ++App .p(PP0†å0lƒll0l¦>@ ãðšå@1ÿ/á@Lðÿÿêßð0,Ê,¸,£,‘„|pP7ÿ/áj°;,U,DÈ_3ÿ/á1 x_2ÿ/á.ðþ<.Ïþ(.ÀþГ²þÿê Šâ ô&À p’­_ Jâœpò4•þÿêXr Îø PÆæRêÜÒâêʾÒÈ(HÌÞäÊÒÎÜZÊÜèäòXB$@B   àùˆTã ð à‰å4€‰å(P‰å ‰å0—åuñ4€™å(P™å ™å@ á5 ÁðRpBLÀ .šóæ¾æèäÒÜÎæ¾èÞ¾ÎÊÜæòÚ0”@PB”@‘‘@‘B((HÐZ|àäÊèèòZÜÂÚÊ& È  ™€Tã2L ++ç ++‹Qåà—9 {:ž< žå ÿßäÿÿêpŠåŠå OP ÙÐ  JâpšåšåÎÛ 0Ö’B" ˜ !ð L à—åàžå^ã ++ @žåp:">:A- ++› Šâp—å›âb}› ^W0à ãNA @†åˆ/0Žêê –,õþåSO ´.1´ÂP»_øÒB ˜ (ÎÊÜÊäÂèÊZjs2!0žëñžåã$@‘â"jP Žâ@9*9pàâ^$¢à“åàâÃX@K ++·_8 ++(™ *-å L á‘! ++úl‚å‚å&½ñ †å Šå ã áP  Qê¥ÚyÌã_Šå06+¥6ôšå0šåµÿÿê  á÷³÷ðà’å.á áàÎã àŠå(à ãu ++À0ƒâ^áÊdð ++Ž á€àà€à €öÿÿê Šå˜Ÿ0ŠåàŠåœ’|A› Jâ šå ‘0šåàšååü;SãrG\ð àšåàNâ^㺘ñ ++‚àåpšåp‡à‡(ô _àŠå ¢üá PàšåãˆqàCâ á C^áEŒ2ˆR ãàÞ1 j\U"àæp„1 á0ƒlXà0@à(à0‚à0“å šå $‚å|x\TÍx <ÆèÈÔÀ/ÀG1@šËô àƒâàÎã`EâP•à*Xð :á áàŽãà†åà áätŒÐp ã†âp€çøTO`Šå{$íËFÅ @äþÿê´„ pŠå\ì+¡ 4pšå`O ãLML÷´þÿê6²B ++ ¨ æîÂø@NóÌEÃ_6 ++iÃù ‚žåžå@hñ h±¦E@šåLï!@ƒì¸± ô÷Ñ ûÐã =ã»´ßòŠàäÒÜèZäÂÈÒðä ð8Xz ++ ++˜B¬HB`8’ ++ ++B((Ÿ ++h Ø|4s @# ++ø [ —åU"f@à†â¥¹ †å&à ãà†c )`ŠAH ã) ­¥ Ê â0åäÌû,ÊæÒÚàØÊZÈÒæàØÂò ÆÎÞæ`ÆrêÌÒbäâZÊèP ÌÚèðÌÈP ‚'ð6 ++ÌØÈìÂäÒÂÜè æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÈÒäÊÆèÒìÊ  LN*] ®hA4K)@@´ ü  ¥ ð ÌÞäÚÂè üÂü HÈÞÌÚè ++0BP?‘b8â Ø òP$ÈòÜÂÚÒÆZîÒÜÈ)& ++(!P5qb€Á šH( Àã Ú HÌð^¼ò@ `bdfhjlnprX !X3eB ++àg1( ++(ápm°`B.83 ++¸"Ê Wz" ++ û8 ++>$ÈÒæÂÄØÊZÒÜèÊääêàèæ ++@"ÊÜg $ ++0çCÊ&L´xB0 B*Û +Z– ý D @ !þ aP ðàâ^ãQà’å0âSL ++0@# 3TãG·Ð3 ¿à(0^ã!| ++Ã> !à—U/ F 7âØ/Dó H œ*Uœz ! š„ ¹|ðšå@ ã²ˆ p¸B:  ?Q¼3 ˜S´A ++@“¤H ++à 2à (  Ç , ‰¼"p€50ƒ¸ ¤ °o—å @áPùá/@šë *ô /QÈ»` 8^8Mû û ½G0@ ; ¤ý¬ ;D$:‰;;”¼Ä.‰¼åLÕK.ñ4¢P›_·(êB4 {é{@pŠåËOW×//"à”ï D0Î㣠aàžåàŽë   ’å ‚âàŸgØ@K žå ++ü p á0‡å ‡å @‡åà ãà‡å ãß žïLß·@*ãyàå pžß ++1ð—Û1g ú„“-àƒå&ÈÓãËPãJç Þ7 ++ ã ŠåÜo SÁS gšæ ]Žà žË@ 0†å°€| |.= |ÆlwÜ' /•Ô¶kùãVhPã;ª”è,¨o €å 0€Ç*àW? ƒo Ð ++\$ƒå Ÿ0àã0Žå/˜íÍð, ð€a€ÿ€åà€â à€å €å0€å¼d"ðÿÃð/E°hÐD ‰Dd_Áÿÿ ++„˜ ÝT˜/!˜_ÿÿ ++Zoÿ _èþÿê lp*pò¢þÿêDZ ++8HæÊææÒÞÜZÖÊò8B. à Ì ++@0 á °' ++à—åST qŽâ à—ƒLp á|ó8ƒâ°æÀÛP à—åÜ_„ààƒóæõl`ô ++šB,  Î" 3ðã‰(Sã(ªc ++ÿ ³ @D_ ÀàÄ! À kkW :k2QgáAâ  ãà†â Žg_@ áá? îˆV? BE ++Ÿ`Žâ á‹8.à8¤858@!àWcá áD påì@¬ÿÿêüq\<ˆ/@„[4¹„yà á@š 1àƒ|`0”å#1L Ããä`0Cà (‚à”¼.1Àª|£\fX/‰@É@Pø~ÿÿ ++Tÿÿê ’(*j ++ðÏâˆ2âêÞèÒÊÜèz"xTÓ0äÊÚÂÒÜÈÊä­R *˜Ý3z,TX@ *,pˆ! ++P"5d. ++ ÌA¬˜T4È0^÷6 HÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòô'2€24}`òB4H6pØÒæèZ|b_P8h®& ++H#a(6 ++ E`r0¢4PÈ!p)Ò& ++8“!@ÞB24qˆ<H?"ÜZôX ++: ++ ¾ÛCº:B$xB<CHBB„À<X *7 ÓI ú:Ó–H ++> ++@¬ò(B $üæ@Òæ@ÜÞè@Â@ŽÒF ++HÞÞàæ`œ_ÂDH0AF0h€ï#ÌàäÊÌÒð@Bà* $'»4Öï3 È ++1 $1 ++òw ÁCH¬PÆÞêÜè§yJ  à U²Qã‚`’åàâž0ã"0 Rûºû ûû3æ vC )ÂW ++ï HqH·_Íÿÿ ++·Ç@ ++bȈ0H >§pÜÞÜÜÊÎÂH@x1ÎÊä´hÝ0jJu*d8 2L ñN# $ýüK`Eâk€>1à„Ã;à„¤ „¨  @à„å0(ð´3kY: Q*Q_& ˜ (B ƒåÒ,ƒå´´/0°$ yë° ++݉ –"Bô"à| +++’SQ0 QâSQžSçp” ¿Hy¸¿À1"¢¾ÎFP # ++(ðLÀ /ø_ F0< %f ++N0ö& ++0˜/ ++( !@ò rP ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # @,¨ö ++B P  L0Ÿåê ƒâàø à‚å,°™å Uá8*°Kâ,°‰å ‹å(O àƒåH H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØð ÀÿÿêBæÊèZèÒÚÊä BK&  TðTãK  áã< ðRã:ºá á2à〠áÌ@™åð1Ú0 ãÈ0‰åÌ ‰åÐ0ðSã&€Xâ ++TãHö@ ã@Šå Šâ àâàŠåÀ´âÿ/᥀ Jâ@šåÿ@„àîÿÿêàŠå@Šå H¢ í  H°àšå@šåÚÿÿê””"ð`0 ãÌ0‰åÍLPX&` ½p–å@ ã ð–€ò"Bb8bX ñKòh <üæ@Òæ@ÜÞè@Â@ÜÞÜÜÊÎÂèÒìÊ@ÌÒðÜêÚ ++HÞÞàæ0BLPB0 $ÈÒæÂÄØÊZÒÜèÊääêàèæ ? ,xTãĬðÌ ™åRã ++ ðà‚àÌà‰åáàãSáq@ƒâÐ@‰,  ñ ++â `èÞÞ@ÚÂÜò@ÆÞÜæÊÆêŸÆÂØØæ@èÞ@ì:O"ÊÜ .  -°@Câ0àãTöUN á&CTãÚß ++à ãÐà‰åŠbD JâP8 Å8Eâÿÿê‚ 02 ++òfR28 V¢(,c ++0B¬P0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #…è,Õ~öfB ø  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(O àƒåHuH4]H4EH4-H4H4/ýH3åH4ÍH4µH ð`EâP…â,à™å^á¤:0 áà ãh X?žå  àƒåà ã W`Eâ\Hˆ:<ô à†å0†å‚â`åã ++¼v¼¼‚lD ^H ´J´0´ƒ´8l0l¸ 4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¯0,š‚Dqð_3ÿ/áU„C+/ûþã˳›ƒò kþÿê‚B ++ÂààØò B 3  ˆ ðTã¾ ++TãD ++Tã¼ ++Tã& ++Tã„ ++(~Ü Xø!ŠåŠå$à™åZáp*€Xâ_ ++àšåàâ^ãP á¬¦ Šå Šâ`òp–åàâàŠå@ ã ð–åÉÉ Jâ šå áÈOžå PP¢  [  JâÈØA  áÄl‚å @‚åÀ_ Šå Àh‰pÀLšå@¨ lˆÚÿÿê ã„/ @` &À(@ÿ/áX.!X@‰ @õp á0 á°šåÀšå š’qw ++àHi¼ÿ ++pŠå0Šå Šå°ŠåÀŠå Šå$T¢ÔÝ$ó$ Jâpšå0šå šå°šå”0Tt`ð á á  á@ ãð—åô jàåà((±Tã ++ à¬1ü[àžå 44P Tã 4bå à‘8På@3‘å @@@˜ ˜@:Pð!à†â à†å †åà†âà†å°†åà†âà†åÀ†å#†å„â áÌh @æh@È |À/Àntg€|‡|n|`|pŠå0Šå$!°Š x¢èU ó  Jâpšå0šå šåŒtHÔp@l/à”l lh(œh hdd¤ ddd _†å X éX¤Tœ/ñœyPrPLzLcLUh pŠå0ŠåO°ŠåL¢ð¡ò Jâpšå0šå šå °HHD`W ›å<<›ød(4Ð"›4/‘h4,  ,_°†å  ì tl/ l †mXJàpŠå 0Šå¢8± (’pšå 0šå ô W’å$’åW žåü <°’å(,(   ++ô_ †åè ïè Hä@/ñ ++@“àŒà àWàDà6àOpŠå ++*  ++SpšåØ ÔèW’åÐÐWžåÌP 0Ì“ “ð¤/døŒè/} ð©` ++ð¢ÿÿê† ++¢B €(HØÒæèZØÊÜÎèÐXB$ ++ ++T( HË  `8#ñ ( ++0BP0 BÂèèÊÚàè@èÞ@2õ*@ÜÞÜZàäÞÆÊÈêäÊ@üæ  ++HÞÞàæPB`8 Z ++ B((BLˆP_&P`/ ++bAx[`R ++H[UHUU! ++2p2eú ++@2@2-¸2h2a%2 ++82P82h2`2+d0202_ø8âXLP3 ++7ñ(PB0   ++ÞäÚÂàŠ%"H Š@‚: ++ :qp&Q"~ždªœS ++à á¢àb2¡b¾\+Ê@Sã$tžå0Šå\5pP®fñP@0šåTRÊ‘žå âRÜ[@CââæÌ Ä¼”6 pš.@ þ +•¤@¤oÂÿÿê@ 4Õ@_šåœÞ•Ø ÂývqŠåŠâzî Wß ++@yΚ†¢pµ tpšå&Rã8tA€Xâ'*’å–/Šåd|ŠdÒv@Tá@ ’å1à’ÔHHḧ¡ˆfÈÿÿê@¢€– /@T \xõT0 áPà"`QHn0NpšåQãEÈ!šÊ 0p k\ep0lt0Lü“å0âSã 0( LŠdŠ ‚8@à á.ô¯@CâÄÿÿê4àOTð! Lø, Ü 4_šå˜¸¸D X* ¨4 rV`Ò ä# øÐ  NÒÜàêè@ñ@îÂæ@ÂØèÊäÊÈ@ÈêäÒÜÎ@ÞàÊäÂèÒÞÜ€¨bBH 2Âð!(Qõ *üæ@Òæ@ÜÞè@Â@êç! ++@ªUˆ  (Hœ!PE! €æ@üæ@ÂÜÈ¢ÈÒÌÌÊä@ÒÜ@Ú7t@Zò غr$¨BT ñ ++X 8B H ÎÊèÆðäæf0  á”,` ã& ã0u`šåð$X$\1 ’¾Ê °@ëÿÿê¶ uœèHÎ *! š°œ` žåà\0^ã¾ ++-p’: VRmpå 0 Z ` †å †’ ++áÄ ôÎ LçÿÿêHÜÞ ++ +•Þ ++ ¨Ìà¡ÿÿêú ++| # ++(‚ ŽÛ H‰2B< B8º@H P/Hk aB8KFf2 ++¿ ++ˆ P Ê𓉠‰ Š ÿÿÿÿÿÿ!Š ¤a a a ¯J (J J .( ( a8B===^8==d ÂÜÈÆ=#X ǃ=q==e1T=H,=%=7 ++=5ÑA%™AÁAÙA› ”A(þAïàAÏA(¹APAt¥AAùARAFA iA  ++A1ÍAlôE5E —EDE8 ++EE¬ˆ:4JE5ÊEE(EEE?bEE5ÂE™PE|R8E?BE¡ ÌÞäZÂØØF"FGÿÿÿÿÿÿ) G G"G"G G( G G G"G G"G G^"8 G"G4$‰©& ø( ˆ"ôÙ-ŠÁ-„Á-9u9fÅ-ù&9Á-±99*A9 99ˆ9"#áõQÍ %Ý-‹Q„Qi)™,\WM ++<­$,Åe < á Là='<ý%ü¸ I|‰<°(*Õ¤° ‘(=œ*@!à˜( Í/0±&/eã!0š 1M&¹$k íˆÃs¼ÿÿê\ ++rÉ($É$É$É@R&b*bP8(H ø1&^ù&} V„@G ++Äì +yü 2dW žå“@Ýÿÿê4­D/š) ++j,ålI(@ M-+%@<0 á»Ûa@ á0„t1 à„!-72ÿ/áõÿÿê ª²£ÿÿêÊB›`›O±H'!­@­/í¥!0-¥?Dâå¥ %/…˜ÆŠÙ(úëüÜË(¥P t‘>åNB U•1±• Æ•85y ›D*ñœ(0•˜ò2P0ôxÕ2E¢20(0Ä0Ä0?:2@Â2<5Š2™@{ ++280ÍOú2Á4ÌÞØÈZØÊÌè&6&&à ®•j sá_‚+0Rã 9'w+dÇ ++ ãHD¡Û##\9ß@$t/4’å‡9pX¿Ä@/ù{@  áè& ¼>DZ AÒ " ´>P@Üÿÿêæ ++œœn ŒlK .©øChêÏ „t /|‰[ØG ¨, ++¨,=ntƒ"k¼ ++‡ždà+i’àr ‡Ažåá‡Ø=‡! ñˆ‡’  “ðˆ=»0¿ H.I‹ 4!¸?7 ¨<ñ p’å&WãC ++Š{¸@’È@/p/¹‹üG\1 ˜!‹/pŠÐT\.¨>(_Çÿÿê,‡4 Pæ‹/ 0ḋÀš@Y¨,$RdÊ4uaZ6°äaš6˜ …j6(4 ‹c R6 ++(š4šwˆ4 Œ4š4šZú6xš3X8Ö14@šcZ6`šŽ'Xš{Ú684šOÊ6š18„BäÒÎЛ—: X< žû1L‰L &0ªyRh%WR/0Ù,¹è šå`V<.!ÎVOàžåâVP/©VÅ`‘„’ .5|‡j @€€ &(](L(;¦I Ùˆ L/)„!IÌP< x (> 5.}/@a*µíü¥7žå SÍÿÿêh=8 ZQ<©@å&à ã àfTÆQ/ < (=<* < 4 ø¼@.½@56Òâ8p½FX ++ÆÞÜæj¸'0vÿP3’> AAi ‚: ++  (8 8 #¼E  Q$òQB€8P!"¦9¸‚#HJ:#û` ++B$ÈÒæÂÄØÊZÒÜèÊääêàèæ( ++D"ÊÜù8HÈòÜÂÚÒÆZîÒÜÈ@B@ %ðP $0˜"š˜@”TÊ "Š&u°HeÖ HTnqCP¡b° ™å0ÖHÔDp á¼–IläÜ"0ÒH YRäYQ†å 0†¶ 3 à†öX?†å¨@VK5°`‰bIˆ Œ #5€>R Ò<bTS° ‰å = pHô} ++80@ át äX\\ .< ì ¨ l¹€q§ÿÿê°à™E. ¢LÇH@MŸà†å`Šå0 /‘èeàšå°à‰H$<Í< _š: ˆ Ô$ÐiaÐýX …&X.Ä <4x ˜ „D J€0’:4 4t M@@ ÌÌ/¥ÌÙÌ,*@ </„ ++ ˜ q¬ _T2r$î!Ð !Ì È¼ Q."pŒ.vþ.oþ¼  ¶x ¡ ‘ÆU"P })rT*™„ ++Š8`.h „ ++.DTd/ @ C`<”¼•Dš˜1°‰ _ ŠâÜ6CLD dè) á`à` +A`àX_“åX R^¶f^¥àVQ ä M/e ä J_ð‚bj@’@@÷üÊ@ ++F ìÂØêÊæ BP ++ àFð˜BX :@x ²@ÐDX Ú@XB@@ ÀÊ@h2@( @²@F@ü8 b $Ê ¼J@ ++F(qw(HJÁI!0#L#N# fº@ ++0” P"6• R@˜Ú61˜!š6½·DJ}&L‰'Nr$%âr"xèx"äläæt< í¤R PI ?‡ba /Y+uY(Yæ@bHȘb8R0°UHÈÞ uV  $l#ú1Uá¦.põ7Þ[&Ô,€à ã&TãÊ ó0 ã^áÅÚNàÉŸË ø R á@ ³¨/ÂSá©ÚCà X1‹s  L2"àd“S^áûÍ6’¤#AøÿÿêÐàl/ q°2ô dµ[H apPµ:”0Ð0”åà“å^ãÑçH= p“ ¸l! ã0@šåL$/0€ ¼§€0ÿ‹LÑa#?   .…ƒÔœ ¸Ü2@ÆcÚ¨˜" . Ÿe.0ìAp á ïR‡å 0‡ÿ*+ ++ ñ€@à áhkB šåOã[\@0ƒâ¡P/ÿÿ ++ú0à ãX m^ƒàŽâ&Pã%Ø +éØõ7* ++T#XCèÂÒØ3pTý*ÀúVèâV0M¢ jV¸ "VMg ¢V ++~ò :V€BX à ÌÉk` áà—åÐÌ'K/Z ++“|5 “G+cO:7+aàšåàžPs$3}àšå pž°û*Á$3H5°0‰±gˆÀ œ/œ} —å “t`_ ++´/u´  # › ‹Ø D4 álГ K/ðúX˜šXH;:XÈó1DP×1ÚXÅ(Ñ!ØHêV­­`HÚÂÖÊ@YaÚÒæÊ 8n:8 |w @¸dc EKµ[L>0 ãŒ$cCåc kQ  3 c ;,eg@à„åK,c „åK, ˜ñG ãÕ([  ÜÅBBZ  àuo¡TãÕà—Ù^Pø]]!@žÀM ¸ ( ( K _¡Akp¯ O p—å¯ ¬[ C으´)`$PP0Žâ¡l¡l¡l,‹%àƒAl0ç o.0ÃSظ {ƒ$Y*$$$$ ++$¨ ++Hî<Ü<X0à0/e0Oàšå5Œõ4b\ æÒÜÎØÊP^ÚêØèÒàØÊ0ë 爪ZH\@^Á˜\ ++`B¬ ++0@ü )0^Pj4A(PV B âZq/ ++@?`Ô m! b ++ÌÞäÆ¢ dM "P œ#œH„;ˆ³ü ;"¨Ñ( ûO šåÞ¤_ šbù =fZd ` OP0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #OB,$öŠB ™à  L0Ÿåê ƒâàø à‚å,°™å Uአ*°Kâ,°‰å ‹å(ø àƒå0 ã`EâP…â,à™å^áx :0†åà ã à†å  áp0Hg :Xà†å †å˜´`‚åã ++”U” C”2” ” ”/ý”/ë” ”/ٔȔ¶” ¤”“”/¼o”^”L” À4p "ÜÜ/ÿÜ3çH4ÏH4·H4ŸH4‡H4oH4WH4?H4'H4H4/÷H3ßH4ÇH4¯H4—H4H4gH4OH47H4H4H4/ïH3×H4¿H4§H4H4wH4_H4GH4/H4H4/ÿH3çH4ÏH4·H4ŸH4‡H4oH4WH4?H4'H4H4/÷H3ßH4ÇH4¯H4—H4H4gH4OH47H4H4H4/ïH3×H4¿H4§H4H4wH4_H4GH4/H4H4/ÿH3çH4ÏH4·H4ŸH4‡H4oH4WH4?H4'H4H4/÷H3ßH4ÇH4¯H Œ/›Œ/ŠŒxœ(dœSœA€4)H4H X90Ž\æ 0Žå>@ ãðšå@1ÿ/ádOçÿÿêÏ·¦ _2ÿ/á•@€o@^@I1/éþѹ¡‰qYA)/ùýáɱ™iQ9! /ñüÙÁ©‘yaI1/éûѹ¡‰qYA)/ùúáɱ™iQ9! /ñùÙÁ©‘yaI1/éøѹ¡‰qYA).ù÷.è÷/×÷@Ĭ›XŠ@wf@U@B1@ @ .üö@/ëö@ØÇ@¶@£’@@ûnöÿêBÚÂÖÊZàÂäÂÚÊèÊä B ø   ¥&üTã$ ++Tã   <0 áu Š:@ áy a„å0„å‰ ++ Åó µ ++P3ÿ/áåÀò?ÿ/á  á$à™åZáN*€Xâ; ++àâ^ã, Šå  Šâp áàâàŠå@ ãð—å Œ  Jâ šåää@ä$äO „åq òèä4&` ôp–å@ ã ð–åŠåè ä ,äíì@šåð²ˆñ«ÿÿêÚB  ²(@Tãaà—å@žÕô0Žâƒåãj ¾ ¾ &0‹Š 0ôñà ++òB¬0BL ++0P ++(ÿL¸B$B @· D<@4@ü! ++pŠå Šâ p—å4¢qH5pšåÿ@ÿÿ2ˆØ Ä_šåÌØÅW0 ò9! ++]¡XB`8\(\& ++8n,(,ó *üæ@Òæ@ÜÞè@Â@àäÞÆÊÈêäÊ ++HÞÞàæYBòYñ PB0pÆÂæÊZæÊÜæÒèÒìÊ@v+( Í PãPà ã0‘J‘‘2_à ãè˜! ++<@+#xØö 0ÆÞÚàÒØÊZÒÜèÊäàäÊèZæÒÚàØâ"잃.ÎÊÜÊäÂèË•äêàèZèäÂàë!êž4ÉõÂØØÞÆÂèÒÞÜZÆÞêÜèæí$ðž6¹_æèäêÆñ%ò¨ñBÊÜÂÄØÊZÆäÞææZØÒÄäÂäòZÞàèÒÚÒôÌø+þœñ ÚÂÆÐÒÜÊZèòàÊ µ0)P $Ôf@Xˆ hÑRÂäÚfdØÊ lúÓHÌÂæØZèÂäÎÊèU) z€+ó ,îÂÒèÊäZàäÞÚàèZÂÜÈZäÊÂÈ7/` "‚Õè è ôB ++ 4ÆÂÌÊ@àÂÆÖÂÎÊw£ØÞÂÈÊÈ`S UîäÒèÊ— 'Y ++q: (òeæèäÒÜÎy' pÜÊîZ ui'ió :HÆØÊÂäZÈòÜÂÚÒÆZÆØÞæêäÊô|' ‘&C<c : QHÆZ¾ ‹« .'Yu\'Þȇo8%c&Í9$ H· fÄÂÆÖÊÜï w8D^7ÌÒØFè'è*ÎDÐÞæèÞxò94c } w'wiNàÞäèiq'qè~àäÞÎäÂÚèw'w4^VæÆäÒàê u'uì*èÞÉ Ì'w w × Ú' w4"*^?îÐÞÈÎ+"ƒ$ƒ c ƒi.$ƒ?.H& /.H <¶ö$HØÞÞàZêÜäÞØØZØÒÚÒ{8#&wJÄÞÞèó ò'&ð/Ht/HuFF( ]eÐÊÂÈÊäx y'(î/"Hx/"HyH¯*$ÚÂòÄÊZœ¢(*}:,*a _-*,ƒ.ƒ  ƒÈ..üBHÜàß ^ ++ ++K9ZÑëm9X–ÎÊèZèÒÚÊä4 s9:šØÂæèZàÂææQq9"Z5äÊæÎB¾ y9^GèäÂÆ0€;a Z{9 :HÏÖ¬'ŒC8jOæèÂè&Dq—ÄØÈZÎäÂàÐ+ ++u&A0KˆP2 4°„7ÊÜ褥'_02m\æèÂäèmm@èB mm9X&ÞêØi94?îäÌMu8%0fga8A4Y ÞÕ'4k–6ÒÜæàÊƪg's6: :H;38-H^ÞÄÔ ”'Y8:u5< ++fk'U< >Hÿ0>*†èòZÌÞäÚÂŽ ++’'s>B DNOàäÒÜ—3@$2ØVØÊÜÎèb¡'Y@B}3D*a3ÞÜÊe GJ+DƒFƒÞÒÜÒèÒÂØZÒÜÈÊ܃ ++ƒ'Fƒ3H,dŒæèÂÜÈÂäÈ„ …,H…3J(eqÚÂðÒÚêÚp;S )J8L»y ò'Lq3N[ ƒ…'NoPÞVZÁs'sPT :N¸DR{HÈêÚàr'YRTq§VæÆZÊðàÂâÛ'uVX >Jýö HæòÜèÂðZÈÒæàÂèÆô ˜*)X3Z^FÊääÞ q'Zq@\(Ø!º4uÒÌÒÊäz~y'\^$ÄÞêÜÈ}(^}`"ÌäÊÊ|{'`{6b[uo'bo5d(2"˜èÊÚàÞäÂäÒÀÀ)d3fÄV|ÈÂèê¯ ++s'fs1hT"Z|cs s'hs0j"CÊä :àêèøú'qjn 6RÌ2l} ++=<'Xlno! I5c&Bp ++R jJHêÜln&OêÜnÈ Ê É'ps…rHÆà`ka'srv L7PäZæêà‰C·tHÆàìÂØÒÈl‘'YtviÇxHÆàØÊèäÊÆ;k'xkzÔYÆÐÊÆÖÔi'zi|©YÆàäÊà©i'D| Ê/ w&ð‚ÊìÂØ (ÜÞ@ÆêääÊÜè@PêÂèÞämc`~Zn&)€ n& $î&4  áa0 ~& ~&~&30 ®&@ ++ ++¯&O0~›-*Ð&Š/3† 0 8 &ŒÊ‹5€u ¾€ ‚“ „ž3! ã”3ü@5 ++œ3/Ä0'Ä0Ä02<0 ¨Ô0°<0/u2…šåp áü0T0 ÁLÙ0Òm)Ð#ÐÐÌ 1+A 1ÈÈÄD…DÝÀ°Öÿÿê¢~XD1!`å0Hš„>1%X!P1W"„ ++ 11 †îsˆ 0 G$|ð×ð‘¥ ++Tão·Tã9 ++Tã3+8ÿ ++ ŠåŠå Šå@¢|‘â Jâ šåšå HH \PTåTÕXÎà 3Šå Šåà<À3Rô5ƒšå šåà 6 ++\àTÅTàÐdO ŠåÐðRp ÐÀ\ÐT•TЈ1/ ˆ7/Yˆx-/Éx// xS4Ú€WpxW∠++0xh!$¢!+p% B6ÏB ʈÏI`€ÉJ2ˆÉ5(HÏ 2ÒæZñ 0~(`,¬X6/ ++(ÿÄæDP(B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* ##0,]ö*,B* ø  L$à™åZá¶*€X⧠++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ö  Jâ`EâP…â,à™å^áŒ:àHÈà†å@†å`ŠåpphÙ,pŠk:0 átZƒå@ƒpO0Šå t¢ M Œ  Jâ0šåxHèg á  858ø†å‚â`åã ++,°™å Uá#*°Kâ,°‰å‹å<O à‚ål lP0†å0lƒl'ýl0lÀ!/™À /ÛÀÜ ++/ÈÜH/¶H'/¢HH 0l|lýàšåà†å ƒâ`‚pip pƒ/àˆ#*aȈTã<¨?0Ž 08¹ 0Žå>@ ãðšŒ@2ÿ/áDOïÿÿê¸!/€ /È<0 á,Àœ ´ôäP3ÿ/áä1Ü@},hW0,B,1˜l.ûþ/êþlÕ.ÄþØ.±þ€Ž@mþÿê” Ô&À @ÿ/á*õŒJHóCþÿê|j 0PÆæRÌÞäÊÒÎܾÂÈÈäÊææ¾ÜÂÚÊ HðZÊÜèäòXB$8B  àHPTãø@´ð à‰å4€‰å(P‰å ‰åã D á0—åŒÁ4€™å(P™å ™å@ ¬ P áí¤ ðZ ++€B˜ ++0B82L0îtäÊÚÞìʾõÚC Þ¦@B ÈÚÚÖPPã$? ãÖðšå €âö²qR˜¦8( &”ŸXÒÊæ(¡r  Ã_Tã ¡ • 2p3) 0ÒÊæ€m ++ Ð @O p ++p—l¯ãð—åpŠå¿S ÛOpšåçКBb8Ú ++ ®ÂxB0  (åZ¡òº P ðcO4  á ++"Z ++GÏ€àâ^ã8ãòà’åàâ^ã4Rã á Z ÿ‚ß+‰N 0 šå>E ++ò’r âÚxc Ö Ö D šåÍB„€çp‰xt¦ŠŸÿ@"±8  ÜÞ@Æð@ÌÞä@üæ ++HÞÞàæPÈâàZæèäÒÜÎZ|êèÌpN!0>Ò$üæ@Òæ@ÜÞè@Â@&øXB`8* ++(B((iPoØÞÞÖêàP .QQQ pâàã^4*1=€A áüÿÿêu@PR ++u2DH{I~¿{ Ø ÍT.K.8.).%.E ++¶¼•! ²Hr,ͤ n#nvò:Mòµò®±RâV!p½?@½O²½M?H bêYêFê7ê3ê(ªO ++U ÎH…"§"  ?0DPD%û ?">4(%7 ++Z7 ++E E/Ð LsLPiP—X ++ãX/X“?0âSã7P€dxŠ$Z/pžFÝFF, *¼¿?àâ&^ãðÿÿì"/‰ìÜÿÿ ++ÃÿÿêDÍD—ñÚ ++ÿÿÿþ8B$8½€08ˆ#Z|ux0 2cìÂØÒÈ@@¾`‘N(N"P©W² ++ ©€©ò ++"$ØÞÂÈZæÐÂäÊÈZÞÄÔÊÆè ,¼2ÂȾ¾# ¯ B `& B"‚ì ++ÑÑB" àæêààÞäèÊÈÚ p° ++8B¬0ž† $¨ =x ++¨ $¨ PXB(6x&H!?Ñ,É!ñ ++_Rã(iÁ¹C¹Á)ºY5ò—@"2ÒÜþCàÂèмÒ8R(”å4P ++(O¬ ++0 * ++!@w * ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #—è,Múö*èBæ mØ  L$à™åZáÒ*€Xâà ++0Ÿåê ƒâàø à‚å,°™å Uá²*°Kâ,°‰å ‹å(O àƒåHšH g Šâ`Xðp–åàâàŠå@ ã ð– ù,È JâTãN” XO0Šå\TbUø Jâ0šå`EâP…â,à™å^á.:  á̧à‚å@‚åG`Eâ8J:4ô †å0†å †åâ`€åã ++@@@p ++/ôp0pƒp'áp0p°!*©° P¿¨1@†ådÔ 8¬8Ü-`‚Ü/šŒ?/…Ü xÜ$eÜSÜ@/aÜ 1Ü<0 á,!Œ HÜ Ü@/=Ü lê:0äoƒå@ƒå\%/±\/Ç\ ,·,,]å0,§,,Y€å €„ D/”¸_†å Œ/°?/í° _°@/a°<°,°°$ ° /ö°?/° /Ô°?/ °/±°/¡°/‘°#/~°k° œ SH4;@@/Ý ++@ /X#/X/ôÜ?/¹ Ü /ÒX/ÂX'/­3•$@/Ý $ s$c$(NA Ü ,ÜÜ(Ü@/•Ü /å¸#/Ò¸/ÀÜ?/qÜ /ž\Ž,p,Z‡å ‡œ ŠåpŠå ¤¢   ^ šåp/i€T ++Vˆ pŒŒCŒ ++L2dVp†å }‚â`lll‚D d/ L?0‚,/÷, ‚d"/Õd /Õ@#/Â@/°3˜H4€H4hH4PH48H4 H4H y>@ ãðš$@1ÿ/á@OðÿÿêØÀ¨x`H7$_3ÿ/á$@Hðþÿêð0,Û _2ÿ/áÇ,µ.£þ˜k/[þÀ8'@@.ñýÔ.Ýý@/Íý@ª@–@†@cKX7X'@.óü@/àü@½¥.ü°{ph@X<H<%|@.ðû@.Ýû@.Íû<½</šû|w@e@R@B<2<|.ìú@.Øú@/Èú@¥”@@^M@:¨@.ú$p7,.ðù,.ÞùXË(¬/¬ ¬ ,/ ++^ ƒå‹ù ó°ã°/^ù@Fùÿêì Ü&À$@ÿ/á*eä.Œÿ'ùÿêöj*îÒèÐZÞêèàêèZèÞZæèäÒÜÎ B ¨ " ±ÄTãn  á½"e½ÿT ++àâ^ãE  +yK šå@+:oà ã àm/ q ++Šå ã± ++ ¼] aìÙÜ*ÎÿÉ4 l H@.¹@›€” @´ª$ÞàÊÜöóòXB$B ø æîÂà¹òTãè0™åà—åàžåèà‰ P Žâ0± dã‘ Á Á ± T0ô°ö ++ ++êB¬0BLPB ˆ ›D*Ÿ"Ÿ@ ++L9p—ƒ0ð—_:YHLè™å“\/p“©ÓOpšåÞ“×ãú ÂÊ"ÎÊè—ðPB`8j ++ B(( ++ð@ ++ÈòÜÂÚÒÆZîÒÜÈ ++"6P ++(ó( *üæ@Òæ@ÜÞè@Â@àäÞÆÊÈêäÊ ++HÞÞàæcHŠcÁPB0 ,% ÒÜ—HÌäÞÚH  # ¦STãI&0M“®€Mñ ^ãqà’åàâ^ãmài¯] á0‚’*‚.0mBm4m m/$zC0‚åqÖ yW]ª0 áÜ VÂœ>žB jÕÉ.Åÿ’·É9Íý"ÜnÌ/qVO0šåmÐfrQ,ò"/ÒÜ*üäüäübˆXB Ðû-@€XâA%p—ã³a³í†ÒšBb8Ú |ð ++ ++Xâ ++Bü0 ++ ìÂØêÊæ!OP ++ ‹‹Q 0!$!eQX¢n ú ++(¢ò PÆæRæ¾ÎÊèîÈ ÌÞäÊÒÎÜZÊÜèäò~Ø­­Qøà ++,I¸D°–O¡ ++ˆ ++!q\/@ ­•° á@šåà”å”Ði ++ 0žåSãQäö ƒâ Žå žå“ç6PãX%ñ ++Pá ++ 0‘88ñ å ‘åƒççÿÿê¨àŠå Šå=˜$§!äùšåàšå šåÔÿÿê 0”å“P<  XTO áH@õHDä`@œP/¥P/‚ÿ åÔ$P|IÝñ(z ÊðÊÆ@^ÄÒÜ^à@›$ææ9" ++ôBL8ÂX"ÆØÞæʯâàÞäèXr8 &ÒÜñ  hB<8Ph×b bH Wâ ++çÜÉÆÐÈÒä(*H߶@HB ++f, àÀ wð à‰å4€‰å(P‰å ‰åPã$p ã0—å)°4€™å(P™å ™Ðáá áNá á^áèOA áÈŸùÿÿê €âìFÁR ++°B@8Ûþ("ÆêääÊÜèZÈÒäÊÆèÞäò@B  ˜ $°@} ++ßwŸ n¼[R LR ”HRã1N  r9 p—LIŒ‘B 3 šå}A ++D ãL¬PáP4)E ++#:Èõ€œ+iFD šå¹» !€¾ áxt’´‹Kì*ìì .Q *$h .ÁYÖÜ„Ïÿÿê,2 Ð8 DÆÂÜ ++CæÊè@ @ `@èÞ@üæ“P" HÌàÇ cZ|êèÌp¼0L$Y HÚY!=(=(‰žÈÊèÊäÚÒÜÊMH B šH #€B PÆÈÚ&Ú?ÆÈËÿÿ×R §%"•$&)(]&] ! ÚÖ3 *A8B.&,ƒ O@ á € D á zôö½ R AZ. 8Ü a00 ++Ä&8º"è $ Ëí ñáAüù ½ÝÁ/yÁpšåæÿÿê3t4 hä +++åä ++lä ++ç'ò‚B6  ¨ ÈÞZÎ Iª@•,†,@‚ªs4Z4c vtt®yà á^ö0âSã%xÃ0žå0âSã!hdàÔ/åVàšåL ô ô\ì„ ü‰j€||;$</ 0Ë 7 k C$Œ_ 0šåŽT ¼ë Á´°V¥O@*öó ˜2.ÚÂÖÊZÒ^ÞZÌÒØÊÜÂÚÊZÊääÞäBs80 0˜ñÆäÊÂèÊ@üæt@üPüÂüR4Ýc^ÆH27(7 7‰4X"] ‹cÌÒðÜêÚ©0©`¦61(H<² ++8PB6P#âû(xÇZÆÐÚÞÈÇ:ôÆÒ Aº! ×cR: œ1< ++™œ>"à •µÞ«•–•‡•ƒ•t•[• ™™™d™p•™p™ ™€Í™U™NA.B)˜Y78<iÚÞÈÒÌò)4‡<‡. ‡<‡ ++<‡3²>‡(ll=ÎÊèm@4 ++Š@4 ++€D  0 6FÚÞÈÊ, ++½¸ ˆª ++ ãY ˜‹˜|˜xQ˜ 1 ˜ ¡˜1˜˜=˜p˜E˜!˜ 1 ^ ã‰lð ©lOšå`ûY˜¸ /¸ C¸ LBÿÿ ++8L,R¸5B>¡¯ÌÂÒØÊÈ@ÌÞä¿ YB + ¼?HBž3jDž D "DCBh­­§àÂèоÂèÒÚʱO@BF±ŠFå0( Ë#ÌÈÉ6(*½vH ¨,¹ç O@ á° Ó 4Hx; J \ [6ZÌàB9 1,@ ++0Pã­pœ¤&œ"pPHH ãå`Ý`Ϻȶ4 ºÅ!€§IÒJE÷XBL à` ++ÌÈZÌmÎÖ/eÖë`!¢6SâL(Q0N / 0ZÂÆ¿Zf%}V 8 /¹ lŠåà ã/n—å  Ÿ û‰Ÿ CšåⳄ ++„/€#/ „_šåáeñzN(BT Ð Cð>@> Šåp á J=ì=×iiÓÿàâ^ã¿ e âiü$'ÂP Jâe 6¨x\”Xxt4m`JÄ(àâ^ã ++Oº ”å ”åU8ˆ ˆ”ˆˆ"@ˆø ,Õ? ˜ŸM@Šåšåõp$m phá/ Ô°ŠÔt¨/8¬o0Ŭ?¬Hd2ü( ( $/Õ)¡ ÿÿê6*ÿÐU#"ÀÑ@P¡ZêèÆ(RÀ%€9 0` @' \ 0H(x”ZÈÊæÆäÒàè"p`i$?Rxh>8^>¬ @@Þä@o@y¹ JÂTÞQ*VX)#TÍ C2V© €É ÆÉ XÉ ŠXÉ ZÉ QZÉ ^É /\À ÿ ^À bÀ /`¹ mb¹ d¹ eÆÐÂÜÎʹ f¹ ¹ ÿd¤[fXd¤f¤Ú¤h¤Šh¤Ú¤j¤Qj¤l¤ÿl¤n¤sn¤1p,ˆ°uÒÆÂèÒÞܪrª"°ÿp°[rXp°r°%&‚% ZæÊàÂäÂèÞäê-_ P ó-Š"@‡O/È9r 3?t(T~r/ø ÃÚÇ  áÿàâ^ãwƒCRá"ºC%$ Ç\ºt€/‘ÆÐÂäÂÆèÊäÛ ++0Q/$<ÌZ¾ØÒæè)Xv ÈBËh+úR3v˜’6xjž„{z  ø £˜a'x| m i˜Rüü‰üì=/ñì?¼P“åLx. +yì0†4}& ÜôåàؘÌ)9 ]n4tqðj»@("8&xx,xnÂp0 ++âÉ*"Z|Žc@BTX'pF ߌ ààå.á á0ÎãSCEEàŽR.;d ++Sã 0 @^᪠4!:§yäÊÚàù'xå3_Òz ++(µ Ð ºÒØʾÊðÒæèæà’| ++h ++& ++ ++ 0BÅ ++ã(pZ| ++È#0* ++8é¡~ Ђ a~WqÓ^ïTç?ç0ç,ï(ï ,Œ+ ++±# ++  ++P;0*íOL,l|» ++ÕØ+)Ã/yë ++¿¬×¥K Œ ++ /ÕŒ ++£ Ž¿DJ!xPIP€uI ++~uEÂ~u€uy"äläæt[@7v„ ð‚uyym,8 ++87 <Ošåé(3j€¿Yú„ »"'{äÊÎêØÂä(†(²†(ˆ(! ¹'ÿò*Š(ˆ(ˆ(Š &nv pŒp²ŒpŽp]rÿò,tŽtŽtt.tÛæòÚÄÞØÒƾØÒÜÖx’­ !  ;u’ ;Q0”&/ÒZÒ~Ö–</Ø ÛTÛK[8[)[%ÛO, çKGGÍG?&ß M°6µ7®»Yâ"t?@”Ó O²–Ó ÊpÈÊØÊèʾà ++o˜da4˜˜ÝšBb¸ ÌàZ¤}0Ä(qÄ3Pã¸Qü ++Qé!/½ÄØåÑ šåšH’šÁG( (»ä%0ÀOPBœÀaœ$W(ž·Q˜¢ ঠ¬$ ¤Ì1@€XâÈ . !À.+Ë"?šå€ÙY/)Ù#aÙʉ;[Ùó‚ž B   ˆ ÈÞå$ ×&&0Ë&†xqxdx`…="0“$' 0,¤“$¬"0,¹È3 Dà3#\/ àC&n8œ \K&/ |(Ô4|xt[%+l ++¬`< 3 C&4šå´.zÿØRsd1$àø?@¬öd.:0®¨$Â!?8¤E ++ I z E ++B2¢± -°¼Zž¤ˆ=6¢ ++(_=-¨6 ¦È! Ù Nà ãÅ%! H…!ä1 ++zÉ$ 94"¨¦! ÇE Cª  {E}° @ &°&ªF Z3&~&zžcúZk ++ ++¶ &²5*  ++8M/1†?ˆ²µr3Dn35n3‡–F ­^3Z3Vi/YV#/‘Vk/VK::ò}8ª¬C4®ªI r°y à 3$:3 ++g äF> g ˆ8B² ð § 7Qã ¤$³ _ âñ» 3²À2´¯» ¸˜(h ±E™"pû×ìÅ !àšËÛÛ¹eàšåàžßWÖ$Å$ÀP^㬠‹–T@å"  áWp-pžMOÕ¡ @¡ ¯ [A <„/š«+M«'@¡  ‘¡ "ô„ „Ñ„§×Uš£A+Tô/ ã.…MPèô  €0 „´¨.9± ++@Wÿÿê<L2}D¸BÓÕ>4•  * —.þþmKBº :0›¶ÆÞÜÈÒ¿'s´ <²>…2@üæ…LÇ0S)¶H,H$"Q´d ++?"H^R¸ ++‚Aº9„ÂÄæÞØêèÊË&;ˆ ÿ *ú ++** ‰"Eºà’˜ î&i" ++  q"~q"'7OJº¶ '#Â#‘ÊðèÊÜæÒÞÜ ++¾JV+¸ '' ’§ D90àÎã *— ¯ /™ ð0 á0CâSáfº‚à Vþ(@Qá_N .¦NL5ÿÿð4= ”6˜‘ @šå0šåב>PNâS9h¨y?C⬠°Ò- 1QeL ++*" ++*ý!ƒâˆ±C ++·Zà ´/= #0ý ˆ@`A.Á3 Y<R© p  ++B¼=b1 þ3ÄÂæ 3QÊS&/ÊÂ(!({&Q2/ ++ H £&  @ @J1‚+X0T™b ++à€ààž0I#QP@„âòý½ ++/ @ø …A V-Mê±Ø2âJ3"¼tWøòz¾8À HÆæêÄH¿’¾0À Â+–O¾;`"È#AäÞÞè7Ä7&x 2¨†2Ÿ2Ž2M”M2kÇY.•.àÃY+Z¡0 Bâ‘-»`º0„à0“:0SáY  . 2”& 2 ˜ # 20AâRáR2D0Bâ k?Sá .  É0ôS2oàBâà„Ŭ&P4T–@øN<.)øðæÙF ++ž@¡O@šåaZUB_$`cÄ`Æ– jÄ0Ȫ K?ZÄKÌK2ØÂæKʺ&° ê.}¾u}f}b}Eq Q" ++še»/0‚S!A&y8W=‰ "dº Œ/È ÉÈŒ ù@=ùzçsçùçC¨ƾ]0’ä=ÆÅ"ªÊ0Ì4O ’Êé1ÒÓ àÂcYëÐë(P í6 wOzíiííYÝ“íU8Uf8! <¿x+-0Qá!ÉbàAâàƒD é^é€| {Ox­f€  /0¿•¹&0¿ÀóN$ü. ü†­f½¤AÀBÎ?1` "æÖÒà«5±ZÄÂÆÖîÂäÈÉ ++@AâTáÄ?DâÍ Í D áðÍ  /‰Í  Í 4ê7Î~V0Æ@sBÐ0Ò\O 2Ðs1Ö[3ÌÒä]Ôr' ^}^tqc^T^P^^/ © $ ª-Œàv 7^á&b^ CàŽâò^Ò¹ Í =Òµ ÚÛ * jÍ A.õŒ…ý %¸”A’Ô? XÆ0Ö?ÔœÜC Ê›ÚC & ššC ‘`lC pC lC  C #G  ø G [_3Qã;¢w57¢"¢§ ¢2Ž ++&Œ/%Œ/#  æ/‰ªf""ɳ´Ù´$ Ei oh"$ PàBØg4 g^#V# £/# Vq2ÚZ6ØZVh*ÚhBO0Üe>êÚÉ“"/¬Cl H*$G +++(Cm ÞÇ)9?Ç)  B=C .sÞ ++hB˜‹@`Bä†$'¨’t.+&é÷s€-qt+¹=pû =Ót2 âKHŠäKÑ#¬å mâæ ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Ñr, ‡>ö'B€ W€  L$à™åZág*àŸåê>0 ã0Žå0ÿ 0Žå  ã`EâP…â,à™å^áS:0 á ƒåà ã àƒå&(sD: †$††å á `W`Eâ0H3:”ø%à†å†å 0†å0‚â`ƒåã ++,°™å Uá *°Kâ,°‰å0‹å@n à‚å0˜˜0˜8  áø0/ý˜­ †å ƒâ`‚”'ë” ”ƒdD Dà‚åHÓH Àö&` ã0 ã€Xâ® ++`ŠåSã1 ++ á0Šå  Šâ`8òp–åàâàŠå@ ã ð–å ]   Jâ0šåÔ<P @&À@ÿ/á@¥H ¤À:@†åàšå¤ˆ0CâÍÿÿê@ß2ÿ/áõÿÿêšåÄb!â Jâ @Šå&0 ã<@,ÿ ++R ++Qã!º( ãŠå0Šåhh’‰g äOšåèäT_AâÞè°èx* €/0x௠àšåà†å @è/þ /$5W`Eâ˜ÔðÒ:Jï ãà†å”à ã^ã ++àNâ D †â ƒçøÿÿêxÀ  ã”Rã­ ++š,ðp ã áàáãiAá á‘NÀàÄPáeã64Tð ãGá á ãîÁàÎQápà1 áê´B ã€Ÿ Šå@Šå8¢LÝTPô0šå šå@šåçÿÿêP/pTkl1TP"pTLÊÿÿê´"´˜pÔ  &`½à‚âƒà`D'D€‹å ‚âœT@0ÿ/á0ôä@×ÿÿêD# ¢<A" 4T•T m¸< .á<LS È /È?ƒâœ*öœÈ l/âlÐl(¼lªl(/– /„$  /r a”O” =”,”” È ”/÷”/å”/Ó””°” ž””{” (”i”X”/Fä4”#”” /ÿ”/î”/ÜPÊ”¹”§” •”„”r” `”O”=” +””” ¦>@ ãðšå1à ðÌ ß Î(@»ª@™@†u@d@Q@@/@ @/úþ@ç.Öþ@Å@²¡@@}l@[@H7@&@@/ñý@Þ.Íý@¼@©˜@‡@t/cý N,=,(,,,Hñüÿê$o3ÿ/á'üÄ.úûðHçûÿê@à 8/Á8#›û$ `$ /$ _`šå?û´% .üúà/ëú@.ØúdÆ,.µú`¦ú0’úÿê8Z&HÚÂÖÊZÎäÂàÐZÊÜì(B0ÀäÊÆÞäÈZîäÒèÊä@B H   òTã× ++TãÑ×'@Ç*KA¶ ++g?pŠåƒË+}˲pšåTã– ++_sâ^ãñ^ã‚ à—åàžQ O ãpù|XP0Žâ@G·*^G= 0—«TP:@0†åP%žOp áÛ .””.”pšå šK ++hýp1 0”ׄSá‹@ 0„â1àƒ ë «&0‹Ë «Ê©,*šÿ?7 ç44/p›.MÀ.9ÿ§2 @XpXÄXµXT§Ñ„P—@5 àž8f@P¨$DÛô p.Apz( šåÀOh ++¼,Ûx áQãUÀ!ž˜o .Ý+ ¼§ÖW dRdd / p# š' žå5žH¤ P„O@ áO „L¾à+-@šå‡Ì/ðšT"\ p0Žç „?šå jx±–\ùwDõDà l,P*EPŒ.ŒO»DÅDìÀ*@@@ ã€&„ [|IDcà á@DàLmø^ÛTIT  T˜OšåÜüR"@È1ð—0+0L09 pd4E4+ fàsžâjd¹w$ ãÈÌ[ø¡\íû  D  åDO­ÿÿê4 *4“p]]hQ× ,L*ÝÄ ·b"Ž’"àR + „¬Oåÿÿê ++ 8# ++.jþó .cþ? È^ÚÌ*ÆæìntÌ3ÜÂÚã ` Fxžð ´8 ++0 ÈÒæàØÂòXJ ++«5L0S0ÎYóèÊðèêÂØ@Þêèàêè@àÞäèg‚* ++0èòxB2 Ø ÄÒèZæÒÜÖý91@—-H ++KNÅ=×4`E⹄P…à”0”@@ß *ê]5]5 !8é¯ íÑí?0‡š"õ•ÉXí }.a²Pô «ÿÿê2B0  è ÐÂÜÈØÊä„I@’ ++c=6öà‘åàŽâ0‘åàCàànâ àr# 4 _Q ãàN(@DÎàåà‘åëŽãDx*f"m{À ++‰,#^”’”’”‚”p\áOTã€IÌà $ Ü5d|X  là 6iI;à 6æe²,Z"ÆØÊÂäZGZG‚hÆØÞæÊ‹ˆ"ÌØêæÐ#˜D( TˆE ,1ò. 0ÞàÊäÂèÒÞÜ@üÇȹAH6:¡h,. bÄØÞÆÖŸ#8ó ++@B @B ˜ ÊäNVþ} / áÂ1RD(x ++ATHøC ê0g1( ¯+,p ùBÚ2¤åe Q€Š4PÑj24 ++(¸°"X"Iò(O3H6t ö°BF  ++ ÆòÆØÒÆZÄÞð~æ¬:¯aâR ƒ/yOšåå‹ÒzB>  ++ ` ¦¢Ü3((Ý¥P ++$ ‘Ù|Ô#Ù %/Št*±<"pÐ.D °8Ø —åÅ} šåp—6,`Aà, !àŠ’8 8` 1Pሠ++h` phÔ44/å4 õ  õ õ n Pá Ž2 ˜áË FPõÿÿ ++öJò%´/E´JWâÿÿ ++׎' '* „âÀ˜4 ++˜4À"@k › ë ÑG à0šf!^„z‘)ØAÒJ'$/i$¶rúB®(b0B 1­`­4(häÀ:pB:Xx 3P<`ùpBD   æêÄZ¾`-`ÓVÞÞ!†á.ò1†å~â ë¨Á¨Ó¨o ŠBBÂÿ¬@¸ÂPÂGÃ2Â#ÂÂŽVDÆ©ÙÆi/9ƹo²ÆO*B>Æ&;Š@Æ/2. B. B. X. ‘b8šD0IPB:J C R>vP-2 ++F-ÃPBH x Í ìÊ'#îH”)² >j@àâ Å 0+0o3R“åS1*¼ ++P0šå0ü"“ç %% ãàåpžå¼ *ͼ d.Lk1ó»Z5r,8JHPHBJ€3€ €8àÂÒ~Iö ++0° á""ÀH  ++ 9æ"ø eƒâ›å²°€¾ N.°€ZÎ q Œâ ›À ² ++N€~ |ÇdÀ‚H‚&>‡7J ++8PÈÕ0@ `ŠÞ#rèÊÆèÊÈvÇ.ÇÊÈÒÜÎ@îÒèÐ@P'ö@FèR(îÂäÜÒÜÎÌX RL­õ ++ BR  ÌÒÜÈZÈêàØæ) Z° á _•ï#&‚÷/ °9.q¿" °­ m”B[ãk7u ­NhÙh9 à”f^á1A ++w@%S?21[9@ ãW"à1 °/aˆû3U b “å ‰ ¡¸w0 Nâ¼›Kâáÿÿê>ß~ã{ã¸t¸o! "àý;C,÷"k4 O!àNg@p á·`“2ÊWã0¯D ++C× œà›"P@\ÿÿê+,*±"”"à“"SWãPPàŽâÝ<C Gâû£\, /dЈˆ:ž0žå Jp p/,@Ë3@àKâÀŽç!ç ç](àà"ýþ„Œ X < <î<>s/ °;¥. °« Ç6ú œé %°†C í ”&`ËË(« ¬ 5“PB9þ T¡J áé aÃÿ0^ã #o6Ž}?` 0“å0éRƒ30™¸ìÄòÔ Ü  /yk$ðdþÿê<ºBN ¸ X8W8~ «‡Ÿ `•O•; ° ? ™? ”;Œ‡6 ‡%g0)cc00^$ ++_^ã1à¸K5àc+$ó@w .Ñ8 ß !Ftj Œ€Ûbà5 IºNÆXP ++ÌÒäæè@8ò(PèÚR à& E tZØÊÜÎèÐj!q( zR_¹ BR@ ++ä,s ++æôäÊÌ8X0HØÂæèZÜÊîZEÊØÊÚâ8ƈ° Œ <—!T;£% ++ ++ ++^“O —åø ++ô$ÖI/ùÖÆ oBR8¼sb8 ++Tbˆ¶P¶ ++Pr! ++ØC/xäB ++R¶ô8JLÀBV  @  •µteT uX®Ñv/™vGšåètÀˆÀu` / dýd Ì/pÜQœt ¹W3^ãG£¤?0— 6 8-0ž3-'ô&D^C¹ZX‹&@¨0à„Xä ó4ã},qÂÿÿê @”`Ô/ÑÔx`q¡UOTã àÛS?à ðR–èÂÎ(èèÂÎ~n#¤«´JVBN8µ&šPø”B˜¸ÚÂäÖ¯=»=!h°B ºV°8 ++ÆÞêÜè1DL ++H,®59PPXÊgÚL ++ x$3’ X BZ„ðpW:·Ê=e¯Tèb8 :Te8–0Nâ4žò? &:¡Pàšå@ ++ Nâ|&ÿ $&ºPÿ *z:<Ö@³ "àï ++ó .5@k³$Øç _@ŽâðP…PC$„j›#” 0Ú3!x¨ìD˜8Ê5ž3"Z6IšZRPRó^HÌØÞÜêÚZ|ÈÒÎÒèæAJcpØÞΛÀ ÿ1¹„ïÑçÞ*A8h! ++hò8\ØÒæèZ|‰6‡xvÊðà!.#\ 0^ô5|~ è ˆô5@–Ú=Àšì5"s% ++M ++n¸@zñ-À>I `3‰à 0dxñ à”åàŠå °”å”åPã@yã# —3ö:À†å †å †å0 3.[vT"  " À6 X (#øXó†å 0†åp†å†å°†å0`  Ñ$"ç<7_°Šå ¢”¡ 1  Jú"°Ê`È8ïÿÿ[áÌÚº àB0ã´•@Pᯭ à¾eQdº‚0^ã_1>‹âœ(j¬=œ"°­l>ÉH[<…H+H˜&1 èa ã$@ŠA1(àŠ l?p±[íh`n_t4 H¹(@ ã]!J^?ã 8j|uˆ Q‹âž†ìA”/ ã”.Ñ”P+Pkd@㨠+% V á @X]&$à”`? 7˜…`˜1 ãê!kâš@ ã¼ÝÀ¨5Lê"´@Dn ÃÚ 0—å(Sã.a,º i$Ê@@“ç ×f00ƒá±7%ðD1 á šå#ÁàÂQáM'$­zø_šå ï" ¯ ++ÔOàŠå(Õ¢ð9((™Ô"$àÍK[ —åPQ [ð‘XTÂ[f3ã“„…ªnâ0l1Qãj07Qãh0@0“çi1 ‚7&€LC! áÁFpBÁàÄQa!A šõ6*&, WeðC á°šå›ÀàÁP™;2@-\/ \ H 4d kœdd"@F-ÞÁFil0d,t¢”,,Ì"(0l!Èh,Ä[°a\X¢($+µ0°„¨ø Q?ü_5¤uPßÿÿ ++XšT‰T„@ÿÿ ++øþÿêpHZÑh¨?šåÂ@/@©@Q@<.yþUúrþÿêBº¾ÒÜèÊÎÊmõ˜ÝÛó¾½÷vX ++ÌØÞ½ „0 ++ÊðÂÆè¡ðBz  À ++ÌÒðêà€»v!#R¤ ŠfmPm4Fiƒ/N »“àLj\ãE@àžåviZgƒ°Šå0Šåè ++Bi ""ü¨-¼¾h’°šå0šå ë–@  ág «Ì !à‚¤ êiq’îÀàÎP‰2Q2O‹â@+´í *eí¸± ¸«/ Àà ÕÔ  (Èý `¾[h/=Œ 4vä—@6ÿ/á¶*±â ++d|ˆó XBp  ° ÆêèÞÌÌÂÈÔêæè`#0#ÀX—_R^ác ++S µ 1 OàNàב+ŸŠåŠå ª "ܪPpšåM*Û, ^4ª ˜=O —åAÌ/}Ì ÔÅ ˆ/@/#à@â$0Šå(°Šå,ÀŠå 0ß w™%s){z 0s« /H ,#0­%À8/µ8 ´Àw)ð*bb0ÂÄæÞØêèÊPBx1%8È  8R "$ p"F ¬F D ++\$@kº«O¦àžå(^ãUx$@Rº  SOÊÔöŒ7@@žçB1àŽ/ñ6Dá á$ šå’ÃàÀSÜ$3ž "¼ÇS r¢\!à„X" P KWqüÚà•½(€à”å^ãº* ++cF@æ2 "ø{B þ ín ¯)Ô‘¬’ Œú-I s$ó1 á$pšå—#ÀàÂPán(4àŒ,˜j¸áÒ "(”X¨ 7*B K0Pã£R0 ãp³2c‡à@·03q.pP-fïßA0šåí¸$è$è°p›ÇàÀWˆA0€ ô`PáÙÿÿÊœ×<&$ áˆ  .á~ ++"@7ôSåÿÿ ++¾ùsd` \´Aö `ž^A$šåLÀ† nø •â L¼W{ÿÿê TP ++L åPàP_§CPão" 60‚L0" ø Cà ãî SG5ìßL0^¯Ú„Ý$3 ãÛ”P ˆÑn ìÐSH÷ZgD1àƒœ ¼À/pž› ++„ oüU„r W$ÔÀ .¡`½Þ T*˜Š LíL"¢þœ)Hn⸞ž&°¬¬À.aÀÀ¼©HJ| Ý4TÚ …Mþÿê@‚‹æÆÈÊÜÞÚÒÜ„¦ØÈÜêÚÊäÁÈBt  ¸ Ì d6Í ‰žlÍ MÍ KÍ DÍ "p…&0v Í > ++R°šå0: Í  Í  ++Í Í É  °ê j, Y ´äÉ ¹É Z Ñ’ ++¦ $Ě `É h /9ˆ 0w pÉ &dÆ n˜C`h ÎÊÜœ#Ê`„ z)  ! "0`ž ++  €ˆg  H/`X/   À@Ô ÒBl Ð Q ++  P Tì Q× ++Zßy@¿Nãyæ@ºnŸw$! ¤„1à”.š$$1\L€"“N<qˆ(@Š<"t•òkÝTbpžå$*W,@Šå0ß!`’=00ò",@XTp^þ #<ö ++t“à9jz ++â ¢Tp“å |OàŠå4€’?½44æ €0Ø$ÊSGHjBNâ,@MO0í4ö 0$;"²/›ÿÿê@%Àôôf/V% õâ,»3Sã¹N1R&º%.0 º%# î^Eª^E t5P1Sá((à¹[w<,3"@,0{F¨0ƒ,‡FäX ˜¥ j<;¥˜ A"< ÿ K= \D ñd8"â ¼Û@"ô Ï@" ++ A%›å+AÕ/ï4\Ì_A©\,›K>?[áŽX.11à .!¨(. W6^ãY}1V^]~q à›å›û=18 ŠÈ1< ŠP@ ŠåDÁ~_G4Pª¨ýÿê|) SGDJ´‡F º Ös!RCµ‚â ƒå“ÈS +Û& ‚çt4•.œœ@ -˜%pš”ƒ\…Z ++‘”||jtijtiü "+ (u_)± ++0Ày-LýL @¢ÿÿ ++'_0‹D,Pè/u „¬)¬ÐÕ„D3 ÷(–@à›å!=¯IDÿ>LC·JëE œ¸pNAãÆt àãA, P/á ¤ ++d›å›å%4:” ++(/M lQà›å Ø—`žåàNà(QRã]tžX &ÿŸ*ß> àRáS /ภná ¸ Iˆ'ˆ âRã#p(/QpœHl •D€î|Pà%/1઀ /u(xÏ_ÿÿ ++rÿÿêàãPÅPA0ÿÿ ++¶9Ô$/!\0?NâÔ/iÔO¬ò¬ñÿàâ^ãî%à›à!o)hO ã8%\…\ЋÐ&›˜(4&˜7F4k4ÌÌaì/9Œ %!^V, ++“+ô @ *t tKt/ÝHW/ <.u˜ȤˆÁLœ¸$.A€|Ì$LiÌ;Ø^>^ã7´Ø/ù¼`/=ÔW ++ü^ ++8"8*ˆ/´ ++#o#)´ ++ðy9°ø T. žÈT[!¹ð'Ƚ Ô/ÔOl‰+ 4ª`ü-üÀ pÌËœ&- /@ .-P—0 HœyL ¤ÿ)"3ãI/ 8˜ tX¡jèb”ñ$ ˜~4å‘á,^!UœÛxP _!¥PxÁxôLñLm$PP_±ÿÿ ++¡ ˆŒnŒ¼ pQé- ‹âH´ <0Q*d ã( šå˜ @Ü_)Í(| 8ãc4\ /%OÌo€+½”"@dLk„) èpã?<´ Œ.YŒè/è·51,døœ /p¸ .¸­(]L½L¥¼ oÀ?É H:´ /0/5!/<XyD| ¹@hd$¨œ /!\Uå2ø<.q¸LŠ{ "Œ// Œ+E@-Ø %/Ñ Ø ¨Ô.!Ôˆl(˜P/i!Hd/©!dk[qåÿÿ DdâO*7^0N(¢„Ò„†Ì1à†±.1à†I2w%›¤/`ˆ/©"Ø"`^¸ ^ Nô ¨b²O(¤%)ø$,a/93„$(#*0úPa°pÁ¨h"à| ++&_| /G$"$Ð$.ágcaŠåp ãì SWá$Ö–Ä ‹à p@ˆ! ++\¿ch$h\h(( “Õ8cçp‡âÛ¼/pÀ  !%è]+èD <\\/ à` _ñ`Ì%Èü "  ´" ´",N›Ú|̬„/u&„ Ä" Ä"tÄ" Ä" È!( &t¸#"(BØ"(€ ++\\((a(„?aì/}'mì\Ù\Æä @b(<ÄbÄ/(Ä% ,/ù(  ++ @n(ô52/nÄ/½)Ä/Ýþ +/*  @f(¬ÄfÄÝÄ• ,/9+  @r(dÄrÄýÄM ,/Y,  @t(ÄtÄ/-Ä ,/y-  @v(Ôd©/vÄ/=.Ä/½ý +/™.  € `¨ =(x(.Ì*¨/A/¨ˆ;ˆr,;,Å„[\x4 ++#/%0° /¯ÿ˜ ++/‰d Œôt /!ýp #/1x?ýÿêLMLOÜüÿê4"4"$ *"t$ õ¨"©ü˜,¤ @r &$”/ ä(äx%è 2˜ )P)P"à1ÆP $°0¸®g¨t'08 < "@à* J¤ä0nÄ?30H<.ÌRÀ.48TáT«r ++ÔI@§K €œeh/I4h&¸Ü! „:_©@S °’噑 eùlt!œ\ é Vx  ¡>jÿÿ\ |.E5\,,4,8,4@, ,”.¹5”:àì)â T4t.6t!óLx.a6" °˜ Ä (Ät ¹XÄ"äþl1LŒ+ ++^:7H5 à›¼,ü@*”ÛN¸ˆ//y7Àcl@à ã¥Ì%à› ’’Ì# ”4„”40žåÄ*6—þÿ”4Rà ã“þ‘+M˜È,ì/ ¦Çp#›åACÇp*  6Ü \/Q8\Ø/q!›Dt”/­8Dü÷üõ£u>Tá2ŒD/99èà)/9à;µ„Ôh4/:Ü šÜ/@àom:à&@P|H.µ:˜&@àäP/;P ä.ˆ" <- "!ý;€Âã”å!D Áã¼-#< ãQá+‡p „àÔŠPpŽà)< Wü…<:ôŠiI¼#àLrÈ ’fÍÈ"àTr" ;›V<0 Îãešfø  ++, ø"àž2ÎãÌ À%\@/]>ˆìÃìä$T)/á>T(|,/]?|+X81l/å?l&îñh$`çñÿêðivô„ @ îäÌÒðÜêÚ —²†A œ 1 @Î ++Še†Ke;[@SãAajF>G䉩q2Gp‘ $(2’å«ž ++ã†v ‚å’Ý-= ŽçSA ++-œ/%œJTl_ Sã(™tºt\+õ\£y:DP*p8p#py)€/u€pprp*yÿ üñ|dT#T/ET¸òI©Ô\ãž/ Ýs¡ " 0rQ`õ €¢º FðoFp¶8*„äk†é—1X "ÎDÒèæZ¨G˜u´z1àaåOqQ@'Ú<Ó–&0‹ëZ1ž˜'€£ Š®œ?`BÄ í· "eXCTBTTBCˆÛwdô- ¯ÿ"Œ& H…L´œ Ïy4Ú³‘@?àdd2$/³.!Ьo¥ÉKô‚ˆ H`bdfhjlnpr‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¸4J†¨–²L`ŒHÌð^xF«hº†(O@ˆp~L+vd Z† ++ ôN8b„8BŠ Ø Ø(0Ï¿P^á&¬T0Y°/šåÇQ/©ÇYÇHÇ Ç¶ÇI4Œ[Ëkx,¼‘u‹A”àK›Ûh-Û§Û JY8[(QpRã3Ú˜KG– S0–X BâïF0Ç ðTê ÛHåfˆ˜¨nèC,D/)D «Ö‚˜gE+H/0,‘+±~}d* 'Hc Nˆ!BâÌ\°S/ œ2+-2¸S 60ŠX$cå¤@(”¾,/½”0LTHàBàœ˜P1»/0^.Y," ð.ÿäT–ÌZbjˆÀé3jŠé%ŒãTªŠ8+0Ú3rŠÚ!ÛC âŠï¡ jŠ(ˆ°@zŠ¾N5Lx_u€òŠH_08ˆòNL¶~BÊŠ–Qƒ0 FÞ ÃJ„8Ä FÄ@ „PŽ@Š8 À£´a ú„p A ¢„ÛN QbZ„HûŠŽH PR1´@¡jŽX F̪µè2a‚ŽØ @ ’ŽqQLBAF¸H(¶ Sb8 ++²MžU¶ð0 ,ÜêØ , ++ÂØÂäÚ !,ÄÂÆÖæàÂÆÊ %,€àÄ ),ÜÊîØÒÜR-,ìp1,àÂÎô 5, äÊèêäÜ m,ÊæÆ , ++Qòý, ÈÊØÊèÊ LèÖ¥0êÜÒ£v£oBŠhíµQ:Ž€æRÐ(H†´#Z|ðOÙä[´˜ñ!XÔBŽ‡ƒH ++FBÊÞ^04Äîà²"FxêÜÄÞêÜÈ@C¨8¶ƒ FxìÞÒÈ¡ Œ@ \\\ ++a¤’ h îä ++O40 áS`c`" p‡PÞ¯É3Wã´¤{n‘‹r.pË{_ Xv@à”å â†"QÆ ¸â ‚åp’å¡ Sçy #ÓX *õ¾y y &’²=v7Ô &0A /0”.‰”ä äcs SZÝQk膱 énCx03Sã*–“ñƒx/ c  › + pS¦0Žâ 0‚å ’Ê#Ê Ù ÿàœ $„¾ œ+ Æ]‡*–l/f/Yd8d0wȬ¡H„"YÎLÁ(âBŽ(¸×@’u…1Ž`’C*’Ü¡Ò’0”°*@ ê’9VL¼§ "’8–p‰CZ’]Â8 FxÎÂäÄÂÎÊVæt2ŽpP…ðPÐ'Ž()‹f"+z›TVcp FL / ¦À’È ++$HÜêØØ#¼AèÒÜêÕ¤`0 (Fx@ïáP :FxæÐÞè@ÞÜÊZ & ²¼|!3ÚÇ0é5²Ž¨ &æòæèÊÚF"7:d` @ÒÜ5a9ºŽP ;O >"=z+ÕV&hàVU8 Fx¦Ä0@AZŽ¾ ˜ ( îä‹A%]0GŒï¿ ÷FKŒ3QãKŒqâQLi»Üdš“1 “…Ê…hƒåp“å …ÇG2 µÐ\"àNo£G«œ ++³1S¥ÿ  ›Rò‘•P˜*¢¨Hʾ åÇ*M˜&0%·}{0Qáwë‹’å ’å~’kßAà†âdž ý¿ý¿_29`Šq· ö–  àËûTT iLÙ@ .±dè /#: E­È0˜UÉ ++}ø ŽS’U®}aÜËX¯#J*ÑhÔ$$d/d‚þþÿê2B+¡‚˜HšdõÒÜÌÞ0ÎäpplÂÊnÒêîhîèrÌèhìðòÚZdÀ0À5!¿¿VæäÆοw ++æÊðàäÓ¿WÌäÊÊÑ¿$Ø%ÀÏ¿QäàÒæ*“¿ðš àÂèÐZi‹VóH¤æÞêäÆÊZdÈ0ÎÄîÆèî`ÚÂÐêäÄêÒÊÎànêâf¶Rœ ,)`ß ß20œvžæÌÈÞv ÄÌàÞS¢ÊRÀœ2±2&žQ& L*¢&Ü&Á9êÚÜ(¤(óª¨æÒÚàØÊZqà Âèð'¦îÁ 2ùÁŸÁݨÝå ü ¹,ª« Ì£ƒãè ++üÂ\üÂ(¬À‘ @Âè@@Æ` ê˜8ÎÄ z˜x €1š˜,PÊ]ˆ1Cº˜‘„J˜8AêWhÅ!EjAtÄÒÜÂäòŽçG"Žð "ÒÜàêè^A’I…Qh ¨$KÒ²B O–[ ÒÜ8ŽOšŽˆ R!Qš3!S2`0 FxEš!U ++ýÑ$U’ÑP%5èØÆËPFxèÐçÄÑ´YjŽPB pVì„ Å8 u‘àÍ kp!’+_p( ++$ÈÒæ[—Z´~Ûääêàèæ ++"ÊÜõ0ÈòÜÂÚÒÆZîÒÜaÅÐ ÈÊæèäÞòÊÈ0Ü$]:JpÈB†8_Z ++!ar ++ˆ ++cøB¶ è!ÄÒ‰ŒŽà†žöçÀÓô†žWEÆì`”âÄjhx,½èàlSª: C<C<š³""t@ žçÌ{[oR¸" _.à|·˜eÔsB!„ðƒ]­TSAÊŽ±>N ážAÀ[é:M’›'«B Sp ã—$„mOëM\l»è ûÞÀ|öé³é'_é aÄe^vè ŽyÍË:\·é /¹h±"%1$ Üäf ++Ô}&wœk¼uP._ÿ/!OEÌ/ á\ ÍŒN á*•Ê 8*8 ++¼u»ê.š®ÄÒèîÒæÊTƒ4@<€ÂäÒèÐÚÊèý­”ÐÒÌèZäÒÎÐH2Ю ++7 ++XÈc`fx @@B´}ƒ:а£"Àb "WÀtºœ¡*qUWfPòÚGi?W œåít @I*8 q_…1jcÀn,^ †#pÂcÀvœÂ10‹kzv°[àj”å#p§Œ@TžvpŒ!@š@d!”E/¶¹&J X ydªjhÓš°ETÚi08n .å0& 04RP–ÿÿ ++‘̲ ?—å ¥G€/e€ ¢jÿÿê"²©…ÀB´rg$ ++8&"¨Sp ²Š @ â´º ””C¶ëP7h}ÕB"¶iB8e:0>YL8gbµ" ++@Ñg FxäèÈZŽ—æU '‚ˆB¼ CÅn”õf">Ç"cW¦  ++ ++à‘å.éA¶9uIààA^á(€0ûâà⋒훞íI‹´îúñîÈY? Ž(½¶ %r +óAä*µnF˦†Ù ¼­ ++®†0"@t1(óŸ)"en@^ãP.‡ "ø%v ¥L+“-‹¥p ©Ì Ì\Ë¥Ž1 pž” 7Dûª7/áä8-ä8lJ(@70Ê |[`Ráëª@éª &SP/ÍP0\9¬(.(Í{ÐX-@;ªÄ$QQ8°“å1@ çtñîI"0ÖB* b”q”"0ÞF¿'TÅT Å=  ü«#9NØ„€à‘å /LRpâ p]Qd‹œ$û.+(™t<"ª­IóÜìè/Š.±˜"àèðçT®É ,2Xü ®É(2GÅuµ"%v •ú —1ÚÔTã/PR]|PR€NDR­ ++ þ |°ï/©7šåÙ†(SÔ0ª0/@4l…Uß@¶pCƒ@ºLS8‘/Q8À‘/ÀÀt´Ý `°4LX¹X&ßþÜö ¬`/ `] ¨íx/pø o\½ ø.Bþ¬\/ ++\È!þÿê —å ‚âu„ à’å”Ê$?@‚ç ð¦J D ª 9 |²  . l8ì¸  ð / ðé /Ú/Q 8" ½ÇD@/K´e´ôe /\ ™z" œ ü.ý œ/8-8å„  LœYœ.™ œœeœéœL,XÔ .Sÿ°l/m l<¼/pU†½Xe¤.$ÿÈ\/\@ ýÿê´È D ++ýÿ ++ j ÿï ti”­”"èüX<1 ^ïP !.  ªXX(eX”ŒC5#xìpÕplÐI .nüÐIä.It[L#L•L½Ðq#ü=¨€ íX=Ô°Ëûÿê² ++ßdVÒÜÌ\`/* ZDVÜÂÜ3X¸¸3hºJ³’¼8b(d02x=Rú¼pð¿¢¼XÀ LF`Ç0¼y”z¼H‘)“àäÊÆÒæÒÞ܈5H¾S{sŠ@B¶%eJ¼€¸kº¼ C!:¼¢R!Ú¼È"#Š C`8%!@L8%!€ %'’ )vq@À°À_àE8-U-u! ~%1KC1²¼~%3Ja3ê¼Ð %5ò7l9,ð ;r(#”!=2”ÄQ⼨`A?¼ôßc8Aª¼TgCB¼ ++ g+ Cò¼8k²Ž>}T¼8mb3@Æ|#@l‘hB„8qÊ$S[!u:¬ ÊO8OÝ8ŒÅ#à¡á8îGî!0šožå8 ¹Fg}7/ í‘‹!v] ::í8$$($( ++a40Žç@@~y¯jþ=® ! ãÓ.O0.Aôç"/-Î7CšåÒ+LÝLNSëÿÿ ++¯9º¢¬.=`“XX(•X}Jy94ü#ü®0. xhhrhUq9ìtBL#LO Sƒ ¯—‡û2*!ú ++"à¦ÿ'$"ºe*$0:Êj¶ 2 @N8E`BûÌÂ5D ’Ês¶8 BÊ–*C 2ÊCÊ«g²Ê ++ üÁpZÊ8u' !HBL<3€]æ¤y‚Ž0ÌXu€@´8{Å!3 †@ƒí%Ρ "½ã"ÞÌÀãS/šS)¢S ´å ¨åP ƒºž"Ñå5HÐopØ k°®€æòÚÄÞØ®š"¢¥)—>&Œ ++î$Z0 C}Þ &àM!@j*ÃØ"8œ~ £;Š.6˜h ++²@;46 ’À aé)„Yz07Rá Ú¬"A('„(Z(SÊʼn" Ç< ++é /}ÄQ"4Ü l[a@ZzÐRO¼ ¼ (Z(E(*¨[ ++Š0;<6>1/,!'$"%&:? äZ^äZ_ äZ€[ ¬\ „\ØE¬4ý¤/w>åw".˜›M§1 RZ­Ð Ð.”$ ÷ 4 .4 Ä>Ð.]б TXT5(XTxõ˜HT.ÿHT .itnLxL/àš¹P,»(TT/ Tœ„-„”„¹;;£ „>h`l*â ++\Ÿhp/]h'/çþh#Ñt/Ôþh'/!h?/uh+hhL+@.—þŒ@. œ/„þLo/© L'TL$. ++tAL(/m ++L?/Á ++L*H+/ P˜ ¯m/± 'Ò[t.% t¿ôZ ?/É D\ L/ ‹/µ 'Q$.)t>(/y?/ÍØ\  Ø\ .5h&ûü¡5"-üT ˜ARáQ°0ã:ר̊.üÿ< 0hV9@BÊXp1züÿœˆ„ª­ã§O(  ãüD´!q_üÿ ++ À€\ 99Õ9p ”å â1UüÿÀ /‰ fBüÿ ++;üy/ /ÙÄX²ÿÿ ++,° "Šœs\#œ œ  ´Xœúÿ ++7@ /éÐ (@{(}TT[úÿ ++Ü /uÜfúÿ ++ú½7,ÅPbóùÿ ++ìùX,/,n¯ùÿ ++Ýù 5Ø+ !8‹W¨+" 0& aùlÌ+Ý‘@(ÒšåKùÿêèº øø/bP 4n"óÊðèÊÜÈÊÈZÒÈÊÜèÒÌÒÊäæ%PPBÒ±Yˆø æòÚ¢þ¡Ïþ¡Ë=i0Žà0“ii;Sá@i (Z(6(-1©?,0P9("P*<!]=Sá]=Sá]=Sá S]•~&£E10€â• #¦ÿ‚BnT9 /±ÎBñÑñ*ʦ7ºgHSá](X¤)S[N]ä ++Q=SáDQ8Sá?":'5`0,+;&d!\|” ++”A”¬Y ”9ç‰/d©dï LõL@ÿÿ ++:A:6 qzÒð a ¢Ò @jÒi L£ó8ú´`BÔ )@ æb÷]" %lyBRá~ƒ"mhIT&à[ÈüšzOÑmÛà[ (Z(c(-^à[Y0P9(OP*J<!E=@>;<6$1%,&'/":ãØ^oÕ_Ø’ xœ8Pá+ .Îî@[Ù< ++€m"Ìk_ÛÛ„"lÿl-/ 0%# 0{çcÊ*Pâ# B*ñê# Q¡COT!/ETl0T9XœÀs5(x("œ"<»¹œ%/ŠÿœtYÐ/wÿœl¢% /©dœTýT  /I‹/é' $]/öþ'/­?/ Œ €"þîÐ i/³þh/±h‹/Qh'/oþh#Åt\h(/ h?/i h#*hÑ”&þH©Ot6P!Ì&‚ýaÒØø_CØ_CêØ_CŠØ_88 %¢8%Ò8%º8%!Z8#Y! %%:8%'j8%)R8%)ò8Š+šØHÚ%/z7%1b7%37N3ªØ%7‚7%9j7%; ++7C;²Ø=ö=‚Ø`ÜHæèäZ|ÜêÚ3ÒåUOPÜ! /pà,%OðÜC h!³FPqUCkJØö-‰kÒØ8‡jn-‘` F¶\\\º‹îhÞ  P3ãC3ã-3ã3ãá23ã“t10—H`10—÷520—ÞG0 ŠåmÚ­*HNÇCSãнç9 àî g6¼½0SãOBB’Sã 2JÞSã%¨HãXùGÕ( FBÄÂæÊZäèȪY¬¼€ ++"ÄòèÊ5å 0êpZøßð ìêp Bâ (û."!Ž^$Šå,Šå0Q·!pŠx|F&0ýW"uP@d ++Ê0É.^@zh"ø?‡m!ÛŠ„a!ݲ@a Xuph ++¿ÓÊ NâêÂæÒsÀêÜSX ð ZæàØÒÆÒÜÎ X€ æòÜèÂð FEEG5êÜI"JÒFX€ Lðe•hŒ¹Ð’h4 R ¯hc( Ft½8å -2-Ô^æêÌÌÒðHì*÷hÕêÜÒâêÊZæèäÒÜΓÐëhø ëÎ9C \i@í"ŽiïêI Êæ{@‘ZÖÊò0 ++êÆC`8ï(?Ô »PêPsf_i5hìÇ3Föa)õšÊH†"÷Â~ ùù"ùÒú™ x@´HþRvÌÞäÊÒÎÜ%eT`8ÿâÒi$hçùî¼ê mê0ºò¾?1Ø ++/ºîa}Tô÷"§i q[“b ++èà™åªÇ9P ãOY… f *f <ä ( <"@½ $¨"NÇ X5Rä©´ æÌ0à á>Y ˜ô&Í! à#xÓ#0ŠY”M ÓýùL Ú ~ Þ Ò ÀîÁ Ò ã=ˆÚ ËA‹|ÏA­¨kËAÉ`,8 /Å8'/8C/Y8+/™8cl= eáRul9THÒô0 h[4 ö^½SØÊìÊØu(0&ðä’Ô`ø >xñàÊäÚÒèèÊÈ@ÞÜ@ÆØÞæÊÈ{ Á/f ++ò ++Tôƒ/öv øU/0þ€$‘ÐúàêèZÈÂèêÚ£vü  è ™–CÜXŸ|/½Ÿ'/ùŸCQ×,/‘Ÿ·/]Ÿ‹ó/2ú úúo Òü ++½ þ¯É3è Yf¿R¿¥æD8"qè ™åà’Ø·þ ä/‰!8@ï$X,Ý ãßû /5¬¼øµø("^HI : ü·x+/xo¨%èœ áࢰ›«€Êux¨q   ‰ƒqg‚þ ++( ðTQÊ çeÈWÚþ ++0é`p@]h9x 2$jhjh#øÔ#l_ø¸ ++_øÉÙHÂwùQŽâƒŒ©åo«ù«ùx;ùô|()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #„, +ºö,nBd a  L$à™åZáú*€Xâë ++0Ÿåê ƒâàø à‚å,°™å UáÚ*°Kâ,°‰å ‹å(O àƒåHÂH4ªH4’H4zH4bH4JH42H4H4H4/êH3ÒH4ºH4¢H4ŠH4rH4ZH4BH4*H4H4/úH3âH4ÊH4²H4šH4‚H4jH4RH4:H4"H4 ++H4/òH3ÚH4ÂH4ªH4’H4zH4bH4JH42H4H4H4/êH3ÒH4ºH4¢H4ŠH4rH4ZH4BH4*H4H4/úH3âH4ÊH4²H4šH4‚H4jH4RH4:H 8 f Šâ`ðp–åàâàŠå@ ã ð–rO JâP-íP LD$@1ÿ/áO¾ÿÿꦎv^F./þþæζž†nV>&/öýÞÆ®–~fN6/îüÖ¾¦Žv^F./þûæζž†nV>&/öúÞÆ®–~fN6@úÿê  &À$@ÿ/á*Lÿ3ÿ/áÿùÿêj8$HÚÂÖÊZÊâZÐÂæÐèÂÄØÊ B è  IñTã60 áSã eø `Eâ P…â,à™å^á:@ áU9à„eðà„åà ã à„å 0„å ö ãà„å„åðšå 0ð2ÿ/áéÿÿê àƒâàÎãt„P•à *xð :ƒà áà†å0Câà†â0Žç´úÿÿ0 áÓM Xñ ]ð jbH< ++õ9è0ÒÆÎêêpÚØÐÚbònòîæÂÒäðÆÖZ`P Ðè$ÄêpbbôdÞÜÌrÞlèÌÆZlP_(`(Ö ‚/ñ$ ++ÌØÈèòàÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++Úê8~  LP!_0_pÐè2!(  ++4JÁìÊÆ ‘ ÚÒÜØÊÜ"qæÒôÊ*k k8kE? n &i&a"[ RæêÄþ@2nð  $Êâ ++`BP ++°õ(BLPB0 "HStZìÊÆØÊÜ.à  PTã5ø Øñ0âSã ++0’åSá ++âQã0“S ++ŒÁ Á 9à’Ý ++ü^á à’å àžåàžå®à áÎã 0Îã ++€`šåðå 1@Îãl õZˆ *üæ@Òæ@ÜÞè@Â@ù ++HÞÞàæ80Êâì¸kkHÐèd'H ]"]h× ++Zˆ ©Ü@ÐèXû û'û'0 ûûhO@’åï  ï@ï"U`äÊàÞäèöŽ4   ÿmÿ¤O[ ++_u‰ á@ ' 4j ++Ë=ž_œy* ’  _ ŠåøðbY Jâ šåHx OßÿÿêpÉp”71&j7"7à8$02B&öx ÊâZÄêÆÖÊèZØÊÜÎèÐ(ã'!@ ?"Û € ++ å/ ÇÖZe# @@„âD/÷+¡÷^šåäÿc Ý p ++ÚB$)Ò`8Z& ++ B(ÃB, 'À l 5ŠÞön* àåàŠåàš£aàÎãàŠ0 A  ã00 ã ++L ++àŠå Õñ@Šåàšåàƒáã2pSá” ++TõàŽâžç0Šå  Šâ pò@ ãð—åü¹  ++a0šåà„XÁñDá á”ÂàÁRái°Ž RàžàOj á šå¨xO@Šå$ ’ìA$‡!$‰  á\ñ @šåšåáX€‘àj@ °ã“â@0 á°’ ã á@<œ løÍ@@šå Ü€šåšÿÿê€$ áT/0X jô%XPäyÎÿÿêš8LkÜq04à á,œøá P\üÁPPð?šä ++k8 <€@Šåèà™å$@[|QHbãhÿ. ã’ÃàÀSácT¥œ á ãÔ 8Ý8_@ŠåoÜ`¼@!@Ná á}Ó’ÃàÁSሠTàjìnØ‘ì<.Í|.Ø|OÓT/!|8.YP„D@šå8œ’ÜÝ?+¥H€Z@€oÔ]€'@@ €Ä€(@*@€€DB?/€€@@€@ @°àšå àžå^Á ++Ð ++ Žâ0šå ƒå5 “u ++“ ++0Žç>â&.  @ ã|  .qPø< ­< èþ<ÔOšå@$ñD¿ á@šåÑþÿêÄX.5 ˆ£‹þÿê á ¸ ^y `Tã½ýÿ ++QÔ?0ŠåüPÉPü.ý& ++€‹ýÿꈂ ++‘¸ÚÂðX$ ++aàB,8 x ` ChB4 BXB8 Ò8(ÒÜÊðÂÆèJ³P* ++äÞêÜÈ[8/&@:d˜æâä54 (?-*8@ <Ûð X@ÆÞêÜèX@ÚÂðX@ÚÊÂÜX@æèÈ@z@-ô´8R,(. ++îäÒèÊXÒ, X""\.X¶Ò,¨BLH,C@B0 P ++ c€`8'ª, ++Â( 00 ++6 “ ñ ++ B,@28B,8Ê4 ++6Ý ÈHBb8ª4 "!] Zx":u   PTãøÿ€Xâ ++  ã ãä, q @êÿÿêa d @ Pãøh/ lA ãöGE éE  ,Sr8A‘ú:X8`Kê:O.~_(˜ A'qàâ^Ü90( ]{ƒ Ìir<Høg>àêè»BØ|@ 8  ”PTã@dàô*Ð!0è +žŒ Pá 0žåàP ++d äô[ø4!càŠå+üËb ü࣠'Á2Šd¦° > "FÏa 02š'Êâg3 >i2@0·lBÎÊèŽDŽ+¸ µ0µµ ++µ©uM/ÍuÑuuŸ0B¤ BXK²DXF$äÊÚÞìÊH/ d< (`!àµý µaà’å^l˜ ˜” R  A”Å ++_¸ FF­ ˜;H 6L‡AZÚÂà©{J  ¥¥©“‡‚µsµ-Óàšåàâ^ã\f_àã i J&©M ++AœAC]ÈŠå Šå&@ ã900Îã @8 ++°%• G0Câ  @žçÁ!0Š 9pŒk|55 °à á@šå0šåÑW`Eâ°: †å @†j>áÚÿþZx€ Kµ€x€ÈXnðšåJïO<O šå9 .umcf)È$ª<`N*H·ðZÊÜèäÒÊæXzJá ! ++x Pç @‚J ++lH L­„àäÞÆÊÈêäkLfWH Jæl7R&QÌÞäZÊÂÆÐqPq/ všvvvpvjvYv8@vP Šå  «Ó h ãà³!†Žâ šåSì ++«” ‚â’ç O’çŽ MŽp0šåà áp ++Ô 0šå0ƒâ“ç e“çpšD/àr±ò—GjŒijpjij"j!NS¢PH²PMSzP0MRM RMO êPM?V"Ç"ŽT   Q [cÈQ ++ã#ÒRã!ºàBâN1L#ª0àá  S!³º#8 á@àŽâ ð 4 á àŽâ!™å0‚à 0ÓåàŽàh^@QÚhà ã¡0 ã á PXà 5 pà’åàâL r3ã´„P ãë™” ? ãeÁe¤_áÿÿ ++Þ©.DžÑmð T@8˜V\ 0ÒÜìÂØÒÈ@÷â@ÂäÎêÚÊÜè@üæþ ++*?zb8 "TŸAZ,…NîÊÂÖ¨X¨#­ ­Ì­ÿX­_Z\“X“2`6à,&>äÞܘ^˜(Ìÿ^` ++^5j{l  x $ :•%•QâSŸ¡ Ÿ ã á :K) ++ঠ/ù)àÐ …‹…0ôtôè0Qãdô! T{"{ /P BâB/Q×@àáA"1Q›£! á@ ‚â ò  á ‚â™å€à Ñå ‚àhR/Q  ãB!A :ã/_ ál1º%+¯’åâQ+ì+)505/q505;_Ýÿÿ ++ÚŒfA¼/-¼w³`0ºBníKˆ H^ï ++85qžåQáPz ;Rá´' 8úP_.O _. 5_.€_._.S :€_.‚wðàNâ& ã0†âƒçøÿÿêk.Ð\ îB?Pãä C/0èp4_7ÿ/áèè)pèpèÏèáB ++ræòÚÄÞØbPv*,~ ++2xzatÊâì ôz ÊâêÂØ~@bH|dI`/p8/'n./r.0!f’9Òì~s.ds.2~ mw.È!8»Ÿ‚h ÎÊܸn¸@¸,?'/.t±f :½h½Ç„ÎÊÜÊäÒÆ ++h¾? jÊ !yÕ ++lBnˆjp/@j*K rl2Œ$Ì +++âì[Š˜,.ø â ++â ++, KÚ ++ iÚ ++ìÚ ++aÚ ++OÚ ++!û$a ¼Ò ++íÒ ++L±Ò ++0õD Ò ++ßrBˆ ˆ &H"_Mè‡Õ#O Ž.aG#z8û$p†Bp÷‘€ ÜêÚÄÊäôJ"éƒ0áé* àvsâ^ã×PÆ9 9”9z"rGSD¯*HRHS^ãODÝ*Q+gÙg±-0@šå!/ó*Aá á  ã’îÃàÎSá%d¬d \=Ý­.Žm/Ptžà°ÿÿzm.5 *5©$@éÍéõ.@LDo2x\?I0Ã2Ë2ààãà àé./ ád¡¾<€X}/OÉŒ‰1@@.àç0 Dd/1èOŠåÇJ X‰XA@šå)P”å ++à”/à¨7 TتX!@$Ø \ó ,Ú^ ÚÞÈêØÞÜêÚÊäÂèÞä¦pÈÊÜÞÚÒÜ&h„)X(´@äÊÂØZàÂD)!`xXÒÚÂÎP¶) hr"lD' ++00(a*p€» ++ ++r0 ++t[(v ++x ++t ++z ñ@| ~P ++tX€ ±q hq D(a<,?q DÐè u S ++ÎÊÜ"R €R A0 ++PI ( ±@‚ „P†É& ++8!˜A‚ˆ81(8ßêŠ@BˆˆŒS;ŠS8.`  Ž $  Ä ÿ%ˆ‡Ž‡‡ ++Ž‡=”8O Œ’Œ)‘‘Ä‘ÿ ’‘”‘ ++’‘8– ÑAZäÊÌ…˜þ* +Ý–+˜p9š,?ÆÞÜèÂÒÜæ£. œb/  #í%-…S õ ++Ý%©>hÌ*-+Å‹ ++Ì*Ô\ ++_¨ š¯*K¢œö#9ž"92æÊè[, m/o/ÿžo/ žo/ 9¢(SêàÈÂè.¤¾/° !  ÁWTãOÁ9Á)Á#Á“ÉýU"àÊ,_ ŠåýHz/,® ++®9°.à "'L°?²?Ø þ4 L|f 0@øÿÿ‹K1àž4_òÿÿ ++ó):œL²eHY`0P[?´(_ /Ø ee e´e!4¶(~! h¸u/H !ÙBpRÛ'+Og)“Á#QPáÿ&5âO&O áº K÷% T@à!º 0÷'!À0’|v¨¼ ¶ $¥] 8  ;B¸=º4¬ ++Ù¼Ó.0 'Ý?²  +ž´Q dSSã /Æ cö n3 Zò O šåÃÍ ++_À ºÍ[ºÍX‹ ¼^=¾*¦JÀÈ.È " ++NRƒ*;ƒ*œ+y œ%›*œ¨C žå÷)^¨hŸ)M/UŸ)°™ ŸhBÈ ¾x ¾ù ++¾ù;ÂÀù=Â0 ++»Ä·.@ % ¿a2J2:242$2<Ïæ>n‰F0‘0¡Û7nŸ€BÌ Â Â Â ++ÂK:ÄÆ»,ÈV"Wÿ"_Ä ÆÏ ++ÆWÈÏÊ^ ÌÒ¨^¡N“ !“ *g0 S$SSî±_±R|W2-/IW2´€ ++_Ð Êé Ê" ++Ê" ++;ª̬>Î? Ò·0*è á–á?H íP!2“åî0 ++p!H!Wã« !I« ©:“Ð?QáA/QyWCQá+lWQãž“ §3_Qã Và  6ÿ39“˜Ùà? “ìOŠå ¨ à>8.X>¨ à>l,1(r'Î' '#8a~· r> ++°0Î(BÐôA€ $H0 ùc ê1 Š1T& à"Bƒ›,Sr ++IXQX på0žå£0EQÃãCmRÕ ++bpŠåO X+ùNpåT)/å0@àDE“àžç&^ã( ) a0žå“f×RÒAS*ýRÏfðP àžåå‡*!@“ø%TiR ÌïTØ`(@<&10=̃0”å0â)50„Ø(èÄø'/ áxÉx´'* ’4½½/¦B x˜FFOšå}˜'¾i@*5 !à; p‹%@ºÐÐ_"`R d0Ø ^?†ð ++ZÌêÜÆèÒÞÜ@üæ@äÊèêäÜ@ìÂØêÊ0ÌÞä1? ÏA3‚ÐÏAkÎ0BÐPK âÒ#?Ô&sÚ?À &l ++‘l*|}™ ++™lA ++% !‘ Q q,0ã .SáÌÝEC h*hI Ü _Sã VY  Q6Sã !žåÌ j_ $ ¨<´Ud+´qùÔù¨ùÀù ã`0Ô"^Öæ;X 0ùWÿ& ÷€÷o÷÷ ðT@pŠåD÷K…‡äT"pV÷,÷%÷÷ónLñaGïçÛJ/à L›. ­GÛO,ëÇëx h—KOàšå·ë /å !»&z¦RÄ 0胪R7^áªRf’çàÌ©b¢ ˆVHšHN¥ëa ++àV €Ý€Ç ++2‘ó;‚ó; ó;T ++:‚ó;"Rï;" B:Daà†âpŽï;@`Šå‘ ++ žDï¥ ++q‚b ++8²ØBâ h †#ý0—å —å —åp—Zö>:0†å †å †åpV9&P*&`î+7 H*1 à˜& YlcÚ :.½B¢tEH/pX^š.Ù<Õ²•>&°ô;ÿ/á»ÿÿêRBà  Hj üyüfðR“å pŠh h ü]m{ 2 pš& *1—å—ÞL žçÐÐ@ †åà9à„ÈÞ1 ðGâèèq$—åìÍè › š/… »;iŠå —øO —åøxýx‡Ò+­n +++Y!¬œ:7PÀ4@ØY"2à§9`8’âc2à@M2Bâ.:ò8ÒäXBâ8bä8_8Òä(! ++ÀuEd Þ ++0Œ’R:/°ªH7e‚Þ ++ªq ÜdÞ ¹¤K bæ?è"û ìÊ?à "ô µÍžÍpp " 0Úh/ ¾ [tá=@"0àšåùM 4 è  h ´ Ì è ê ;Ø , m$@y„\ Î  üs$   Ð (/,"ô,]”(+´8 ((° @› ++„7?[,0Šå0¯sƒ)0€0ˆ,%“L=päEuLHL1@ƒÐœ1=šä„[¸ ++ùä @KN #àZa4=d4_ 0šå(4 *È 4444 4@ª,# à×x4ø æÜø¼< ++®> ,p*…Œ\T4ü?L < jðõ<S(@Šå0@ ô/à<¤ [ðe×rõ<î<b< ˜ ++ˆ¯!€^_àBädzo"ê¨j Ò7âêÒ:èÒê ¬' èó;Úìó?î_'òv# w#ÿÿqî~¬qÄqîqðqHzúzûRìzzzzPpŠå òezzy0f¦j"àœzÐ:&S #bà“åž~C0Šå(~%~V±“îo[O/$0.y.0 # .h&W2„2,„å(Yú@. ++ú F² Hj..a Žâ‚XMH.jŽ"úØ!.06ƒ¶ ++eu/@î :D©È$<2g. éï @¡v ðZjÊj²V ‘.ÄM.Ü *µÜS@Šå>.b5`%bèþb]%ó ++ð(Bä8 jðîo êð ++(÷7Rð%îî%ð[%òç?ô"w-øÚ?@ "p-¡W%ŒW%håA^§c%ÿiK7I•—%a“ô“¸З%ô—%ö%T@Š™0™%ÜÍ + ™ +œ+‡Pˆ@à ãä" ++m10“.mvzi’#à%‚K¡ƒ 0v Š3Sã?ŠW’m&LØHO0‹åN ++"#á`†@ ª<÷X Ú£`4 Îãš~šâ0ÊL4žå Rø5Çÿÿ°øÀLEõÿÿêœÁƒ.¹ †R˜Hl˜d *10ƒ]˜ J *™J $˜ž`7B¾<À¬˜ o Šö¸GJö1¸0)oö ô…ú2K Bø?'ú…1Þàò›‹ ¸ $ œ@".PP ++>O¡/V‹¦°@I™ñY¤FYf|ªД ++ÈC1T9M"0T50]Y5¼’å’å ’åo[o[2 0†W\—†å†å _\ ’cëäã2d Ü`Ü\0ñ"’\^@XHxA$ ~HžL/@m*‰m*õˆL¬Wq žåžÄ=°ž<%<" <_p†å°ç] Pã] íM<…˜0 ã7;„/` /¹` Op’ådd!(h ++ êhÎØ )®RÔ/ÔAšåå„aòR .Íû`@Òþÿê] LÑþÿ ++41D‚Õ úÕ ŒDZHþ$ x@€`~pBü³>08 *Zê“2èÞä!*/5 9zEÙ$5AkDRáÃ() ]i_žçÄ=.¥" ÏM à wQà@Õ Ý w‹å ‚â×Åw/5Ã( m š— `š—;i ;i‚$_ `Šå©å`$!H«G6° –GS oå år{_0„å üiöK 6 ++ª?–¬"Vý! ++¸:R‚ü ++Øé `[# ++XøZS0hþN\CXBü'x [A€4[Hë€(h(Zh8dÖr2H ² ++ãG BØÊÂäã y-H JþæHh + “´3 mà0Ùúz@Aà4&  5 ûž.o}0}/¤¸»%E’ Àm2¨R$|¥Q1àá|¡a á 0ý G¹@ƒ“"ÀÎx¡b ã PúARá:±`ƒâpžç•Á-3Wã 2ýà—åàžå°‚â `„àà†ë% ++`Æ_ p—åéÝ54óƒ €âØB#ȘÚbÀŠåŠ3 Ô˜+)ÛIÔ˜îRÀšåôC& _Ž ++ ö ++ö ++¡¦öG]@b ++ É"³`j ++øÕ¥°' e2 ÏrZÂààÊÜÈäSà‘å®Ë9àÖÝ53=j#›pƒàWãh  pö7Wá/äD ++u€žç°‡â ÀÜŒÜ ¢À‹åp‡âìØ#ôÿOþS@Ðã9 ã9 ++u ++T"@Ì}bƒCPá.ÌÌ0âÌPpƒâṗ¨ pp‹å0ƒâˆë¨&Èù8Ÿ&+ÝŸ&Ä"ÔÒ‡›: ++‡›:WŒRpGâ°›:5°ŽŒ†Äï]QÊb ++¸‹x> 1 ++ðp Òà $3 ++(ÌŒ3·sŠ <8 0<iK|š)Q†Š B:1 hþkß-y²(%X9!@ ÚK Á ++&äläætà ++™F wM Z»©}mw84<§I_vS5jH51A8 q8B0?@4S+ßm("öMÀ*ƒ  ‚ ÿÿc(“ Jà x gx «ëhë­+ë­/ £ =| £ ’£ /£ _@% õ¸Z 4 "ìL0&«Ã $Í (Í ÊÏ b Ï ÿ4$Ï UX&½ 5$à U  1 ¦£E# *# # ;*(E7(# *c=,"lšd4ç.6 "hÿÿc2ê hàÿ#,¬%N•.Á{,´ù ·u·b·0‹H‹£&0grP ’å¢qC ÂãÓ/àü% 0A„l@' &Ø'/0›F)“b¡ƒ.‚³à° ñ6mq„‡:(êº/¸à“O«“í“‹óq„ÿÿê’; . B0(:ð *Æ 0 Ç!à°Ë|ˆ9^À(‡ŸçAp ã°3WáMËK‘2¨("Àï-ï3\ã)$'b`œåà–ïm@€àà„ïïD@‹å 0/`ƒ OÀœåÝ ŒˆNÇ7 ^/ _ÀŠå 1•^¶3 b+ €Àšå šå¸• l; 6O á; d&l‰qŸd)(£  A"ˆ/ QB0 ++Ë8¹ƒ@8ÚÖ¬ |~ 1H%H Wò. 0 2° ,Ð 4Ð Ð ;4(E72Ð ›­,ó Ò 8ö6öÿM,öNõ.õ0õ8’ ::¡?¾Bô ‹ ÿÿc@óÿõ:ó;>&ž%Á] <´2&, ++Èñ ++Fñ;â 9ññ ñí!êí Üí,%íÉí@§í íFb<í>í<í ++@ý: B  ;B(E7@ B[DËa4ÒôÊ+{+ " +%{|*É!>P 0’åh!@ƒ-Ç É/Dv6 :0h36F$)Úꦶ?0  Ès È F  ++)@W ü' ôøy ++ðð®· ¢·  ø7RãøøÝe }} ÍiRؾ’c¸ ++e¸R,"s“C|“jH.Hþ&Z|íÊ G´? %¦]ðµ ++µ ++jŽMNâ1”B$ª öü@^ŽBðA} ++@€Xâ —E AE žŽ@} _Ñÿÿ ++Îv†XÊHOŽ°fšJHM ò,6L.å n\Ò"63|í .&0 ++›!@žTTT]´( ++÷.Š~( ++r8‚6N<`§¢lÂØÊÜÆʉ? ) ;`¤t¤¤¤N¤œPv(~ t©‘RæèäÒÜÎ*¶(è rœ¶Ê†¦šȵzœ¢.ÆF`Îã@QóxÊ÷ Aœ•Ù|6C^áß'8;@0‚àªø#3 á á€à@ ààŽâóò bB@!>ͱ>ú Bïì4ª™ ¬O^ã¬I/y¬OàAâ4M/ˆ"!â§*Ä .P0‚à4Uð  áq áp‡à@'àö ù[Nº• ++P”G às)àÌ!ä”$rÊŒRP ¸  ++ ؤ  ð:G÷3R¹KM 33Vj'ÆÒ†;¶+@ ‰‰Âx£Ÿ•i•e•à;JŠåQ“TaÕ9—ekK µ7IQÉ…ŒÆ "0opp@ áÿâAV¿F“å!Õq à 0“y8í·ŸQà@!íñ© "0¤Y eÄ+œ"0 ÙT=/µìO@šå¬¡9 5TJ*H;ÃÐÂäZÌÞØÈÆÂæÊÜ",dâTh‚¼T`V¼# ++0%Â"r±D¶8ø ^«®X7S^ãHý D å ++ ++ à÷é ++ ++é0 : *#ì`9G}¡.íÁ ++È: - ÝøÖ¿.!òEP:é~Ù4æÊèy0òp*ÎÊÜæòÚZ|êÜÒâêÊZøtXòX9.CrXS90 P ++ç!?­à`/' .D9®1® Á[´O, ãUœ mUœ* }ÍP” ”h18ªˆ.刕®ȼã²BZ 38 I€Ê\p«ÐlqÚà Ò'ùc铨K ás$Žà9…°™qz!àyÈléS?%aGèL@p ã!ø WÂ` ++@;5$UÎ×!qƒâgH"pÌl" -2(¤X}!2­üãG€l"à$R`àNà Üjâƒ@µ€#„ ‘|"€Åžžß! ?€XÐZ_¤ ¤qàâ^’B °qH3Îa!}Iri å‰ `MÂ\öc îÊsœœ9ÃêBBãŒ$.‰0˜‚¾Ãºx0@^¼Êì@À iÉ.™P¾Úð @± á °ƒà °Ûå ± áÁ áŒà !à©òà©”TÉÏ yþp$ -Õ£„¶-4!à¬L.à< ÔOPãÔ1/i5*Mi5ÔÔNNâpœG霓. á°Àã%j ¤ÀÁ á Àƒà ÀÜå  a¤¯†à !à €à¤°Æd½/‘ C°šåÛ5zÿÿä¶ ÷à »#^Bì`ðŽUI1L^ƒà#@(@œ(Pu7 ÿà 6O#ã á< °š9&…”€à|Nb X Ä/µ`¸€ùO¨õ´ "MQ”È@à ã _œqW`Eâ$CFMBàåvg@å rIo¼r, á XO(+}ö4 «"Pspñ LÉL# p(ÖÆHpH/HP1.àè?žåx®E¶ÎI¨!/ã•P/¥ðfh_G,ŒÐa”/ ›)/ 6p4 šå|Ô/y ÔÔÔÍÔZ£ Ô@ ÜõÜL/U ++ÜÒÜËÜ8/Ñ ++ÜK/1 Ü ŒO̧xvŒ&°ô ++=(i$‹â±= ¨ A@_!“È&°ÇRè ++@ ýÿê˜d&í Ü è ++ìý%Ð"°U<@ Kàä¾ þf/ûüè ++ D°D/u D°Å$¢kì0±`2ZˆT)‘sQ:Z$R4(ð•QZ  ++ Ÿ@ ãðšå#ER,§ØöFB   L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(O àƒåH/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨x`H0ñèþÿê`B$HÊâZÐÂæÐèÂÄØÊZÖÊòæ °?ˆ  ÂöTãJàåQẠá 0åQã*@vó"à“å®à áÀÎã  ã ã Pá ++Rá ++àƒâpžçãô —åàžå°‚â `„àà†åã ++À`‹å ‚â p—åëþ°ˆ;þóÿÿê€âÝ ð,ðšå àâàÎã`EâP•à*,à™å^á :à áà†åà á^ã ++àNâÈð †â‚çøÿÿê@ áÃT tP2ÿ/áîÀúÿ/አ++B¬ ++èBP(BLPB0 (€WìÂØêÊŸ¡c ¡ÃŸ ++*€UÊÜèäÒ ? H ¡‚¡aàåàŠ¥a¥Cràšåàž½@àÎã<ÁÃp ãàšåWá2­0€šåàŽâÀÉ3ã)'Éb`œåà–Ém@€àà„ÉÉD@‹å 0/`ƒùOÀœåßùáÀp‡âÉÿÿê áäo`šåð7O áªd&¢  ã0†â ƒd@0 áŒdØ3p’(……0 Œ/ ++È’&rEÆÊØØ0/€ ŽI/)/N//+!ì+ Þ+@Ä++ JDÆÞàò(/P —óƒ$à™åZá{*!)íÐ àŠå 0šåSãY· ÀàŠå0å åD P…âHI:,#ð à†å †åàšå à†å0†å †åQÑà†å`Šå0 ã u·Sá3 ++`Eâd€):p á4`à‡åà¯3‡å•ðžç0Šå Šâ àâÍ k¢ü9  Jâ0šå Dك⠂à@‚åW5 ++_0ƒâÓ ô÷€Ðÿÿê@šåcQ0ÿ/á°!ƒw wS:ƒwÀ0Câà†â0Žç¤Ÿúÿÿ`Šå˜tñ)~ÀÊX ++Kõ5è0ÒÆÎêêpÚØÐÚbònòîæÂÒäðÆÖZ`PÐè$ÄêpbbôdÞÜÌrÞlèÌÆZlP&`&Ö ‚/ñ$ ++ÌØÈ ++èòàÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ Úê8~  LP!_0_pÐè2! ++(  4JÁìÊÆ ‘ ÚÒÜØÊÜ"qæÒôÊ*kk8kA? n &i&a"[ RæêÄþ@2nò  ÊâB X ++ÒÜÜÊäà áã@ áoÿð ]*à“å —å Šåžå žåà—åÊL,s"só @ á„å „å “å@Šå Šâc\¢0ð Jâà á@šå0 á×X€:^à ãÓóÓ à†å@†å 0†å¸ Ïòã@×ÿÿêÀö^ãpŠå0Šå Šâ`,Sp–å°ü@ ð–åbQ´ppšå0šåºLL±¸áœÿÿêJB$ ++‘òðPX0îÊÂÖZÆÞÜæX!`@Êàþ7äÞÜ31(8 ˆãAP ++8°W( dÆØÊÂäBé/è S²V påà—70 Îã»QSᢀ‡âàžç°Œðã ++ à›åÀ ã À‹åkpÀ‡à0Œå°kÀkç¾kpà ãà€å"øÀ Q:¼È 0€â`ƒåã,|&0‹  Œ| Ø  ++·.1A· ·QãÜÿÿ ++ùŸòŸ@ ++ ++:ÝCpç°$°6äÊÆÞäÈZ6óZÊâêÂØZàäÞÆÊÈêäÊÞ?P &  å0TM ++í Y áŠ¸ß  µ 4  á‰ßK* á Šå]]¢µ]` šåTµ ++hXÈ\¢   \Tñ”å&Qã ++ 0‘å‘ß ++A“å÷}Q“å^M-@ 0žå 1@žôAà ãåLD °¨ )ö®ÿÿêr $ÈRB*ÈBæÊèâ^Î0B Þ¦Šå0 ápQ* á ï0 Šåû>[<q÷ N "p¢/ ++WãÒ €àâ^㟠kVÎùàåpå å0R ++:ž? žå> ¦ jäÿÿêãO  á@ ,,lëxš".z²ÈÊæÆäÒàèÞä~Î¥B  PéGTã£À q›*—ž8e8•a@Šå à—‘ “å&Rã‚är’å ’åI: ++ äOÉ°0žå&SãL ++4À’åNPãøÿÿ ++e‘°å&[ã0’›å°›å[\"°‘\! ‘pbëÿÿ Ü„ .0‚y‚+Iy!pšUP0šåÕ‹ @  ãål ìQ—åàAìàà’ !0’ 6 ˜PáX!pšm L@VT LDŒ0—å—å= * *þà‚å0‚å ‚å&à ã à‚å`  Õéa ãÂOà ã¡^¡x‚&Þ3êÒȼöpHæäÊÚàäÞàXªØXÚ@p6¬÷ 6ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØ?  u 791> aÚÂòÄÊ„ Väèȇ ÂÒÜÐÊäÒèÞäæ‘ f f 0P2¸0àêè¸Z HN ‘8 ++8$ÈÒæ& ûÒÜèÊääêàèæ ++:"ÊÜò <ÈòÜÂÚÒÆZîÒÜÈUõ0 6üæ@Òæ@ÜÞè@Â@Žø@Þä@FÌ   ++HÞÞàæ8 D*r@PA  Z0( ©CX"s($8&Ø.TTp8(4ò}o%nÿ©u( ,Ç_B*f,f^(.B3.H¾=/P !Œ 1  `RB@ Ÿ¸ ,ØÞÞÖêàQ&06HM**"0>X6a60T”²}8ᙾv hJh`*ÉB0hS\A"/ ”h Ýl[5Õl v”v p - ¬üb$8B>‰8X "‰º„€€B*å ++/^a1š10”¨*N‚à“å0“åÀC ++ 0ž^?žåž ++ ++š ++ʆå†å @†åìš ++ Ê ++ž ++nž ++TOà ãÙˆ·A$zfx¨B h: ++²¿—å—åp—å'äjB4  x Ì, œö §>>!@ž$$w•Ê! á: OÊO O" ˆXuTT [,ñ¬ D šå§#¤Û@¾ÿÿêN)´81 ’^8 +y+V} 0‚â@ƒ~—tO át blítpfë Lâÿÿêz ++z ++¦.à~ ++¤/‘¤ Üdy¨ã\ÿÿêò$}càÂäÊÜè–P:!p3H0±2Xò4 ++(vP`6h" :U  ++¸8( ++: <' ++™!`ø'>@' ++XJÊ?B, ++O¨ , . }‘ á0âS„ä !0ñ!0  ž@Þz ^ N ‚ tîâB@ B $± ++õ ++/0X 0e$,\¹ ++? !$µ ++›/W§"q Jâ@”ÙO2…Ì ++-ÑC9²CO@DJ, ++0a$ ++0~&P0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #ÿ‚,µÈöVB   L0Ÿåê ƒâàø à‚å,°™å Uá€*°Kâ,°‰å ‹å(O àƒåHhH4PH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨ð xÿÿê0B ÌÞäÚÂè B>i#è  „oøTã&*Tã :ö3ÿ/á  á€Xâ ++Šå f ãÀ€ÿ/á Šå(Ì  Šâ àâàŠå$¢ ™ Ð  Jâ šåšååÓ 0 ”Rp á0˜ôX ++àâ^ã'à—åÿàâ^ã#%—¿Dÿ;úàà^á  è á  á˜$‡,`ÿp–å@ ã ð–åWãdOè™åd0|0þ`EâP…â,à™å^á :0†å †å`DØ SÀîÿÿêpŠå 0ŠåˆÜ¢uÜòpšå 0šå šå“ÿÿê* ++bB @ Bd € ÎÞ ð áp á°šå$à™åZád¤ð€XâM ++ á áßpŠå Šå°Šå˜’xy— á@ ã€2 Jâ¤ðpšå šå°šå&[ã$à ãQã ++^ã ++Qá˜|”.LTª X (”ÿ À á ÀœåàŽâ&\ãÕÿÿ ++úÿÿêäàOx0&©0 œð ++•ÿÿêÊBb ˆ ++àÂäæÊÙMÑBb8ˆ a ++`  ’ÈB^üÐ8 æhZæÒÎÜ.bà á0² °—å Sᜰ8[ãa 0ù=\á$o 3[áo :Ž0ƒâ0Šåßàã ++0Û/ÅÛàß ++O0šåá×"0êÛ ++ /=ƒ,×Ó/Ó+à=/à;/m³ ,ó°—å°‹à°›å_ÿÿê"B\  æhZÈÒÎÒèºèS° áÀèT`šå‰FRáïÚµ ½ÎàÎS6ÊàÎ0PÊ b8  áff¥*àÙ8@H:74À*$FÍ /ù;R°šå À:+ ++dd/]d ä { !@†E Ý‚Ý$| íŒ$ /¼ u\ ¸€ØÞ_Ìét / @` ++ÚìX6ÿ/áTË ++0ŸŠå$Šå(‚ ’((0|\$šå&Š F ªt`ª ôL/ª]a0LPžåæþa$ªÂrp`ð…Z|ÜêÚÄÊäÝq XÎ[ÆÞÚÚ‰"À O¿OƒO`«X^á]+X#VÓ6Ê`æ(f-Ú`Â,›ßæ šà ãà†å ߢÍÅ q òE (/5E Ôò"'ÈtÃlÔ@H?Tã0à @à] ðì" G/@è%5 " W_@šåÐf/ÀË¥À&ÀË/ùÇ4C@žåËd” ++#--² /àØ#ívp÷0Sã?0 ã|IP æ dŠ €~ /™t @¨ ÁÜè àb.!bìS$àšå?/°¨”x/­xà„L/1„"°Ë ©ËÀ'ýË8€<þÿêN ++Òþ!pâ°‚ BZ ++ ôP æhZÂÌèÊäZàÂäÂÚbê­b0À—åº~ÝB%-,ñ0\áR"0‹ÚæPà·H _ì±üà³/ @hf/ Àb R tfÔ ¾R)€","€”)ä^@ùT^öÀ—å ÀŒàÀœå}ÿÿêâB X“f³V à æjP ùRª ù:2vmf^df2xx@x[¥ŽbSà ãd$$PpŠå0ü @º¢ j¼¢Ppšå,ø <à*Ι#9  á< <i / jŒ‘/"p€& <Ü8^€áP®®"@ð$:ð#$ð2/ðk/ð;/Ñð;þpx oœyx ☘l .í˜p/Ap,öù©þÿê@JB" )¨ æl(ÜÀ¾" ˜1àŠÀ : „":àšå: ÄF\áw"&'<",%FGTá` n[NV&'¤a'ŽA‰s'|SwwrWmf'ÈFÃeEg'tGo$'ÖcAC<b'£BžoOd'gDbx'ÉXÄr'´R¯pP t'cT^?'°*'<('¬);'ý ^ž{}' ['m ]'’<'ù>H ++('á|' 5HpŒâ —åîô0@ ++òôŒxp1( šàPpŠå ª°d?Šå,P¢|µ,ñ, Jâpšå 0šå$°š¤Läÿÿê*1q —åà‚ p&àÄìµÄ@– ++‡"l˜ !àšôS ++ [ð ÐÜDF*Lÿ+(ŒâOp áoÑ@Œ  8°å/o a&Œ äÜ0³èÎ @ ŒâÌà/@Œ j€Ah@à áä1@š ++ P "8",`”0¢üÍ00¼",` K@&¾ð&°ð"¢ó/&53â91»$ÿ^ã à’å&^ãN l| ÖxH,¤ìÄ @w*˜g“0DXì xô o5 € 2""" @¶7 ã "ü/à " ++” Hï"×% ++7 1 ’ô¨¸^¸2/í ++¸÷/ù ¸7¬0  €Rã ªì´ü ++è5oÕ è;|è¥/á è7„!oe„®9R#@‰- / Ìd &/‚þØ,¤/@¸ ++ oüm˜  O%þÿêpZ~p‡/¥¸L~З/±p—/]¸÷/ipÇ/Ep?è¥/Qpo/Õpó/ÝpÄ")B |qþ(àšPø–""€âPã× )`žPVáÑ„4 áÄ À/àÄ j¼ ¡Ä€)È ÄrLŠå žx(ðšå åŠå žå(°ý2žå,Šåžå0Šåžå4Šåžå8Šå!žå<Šå)žå@Šå-žåDŠå1žåHŠå%žðW’:LðôLð¢Üÿ‘LLð°ð`RÀ"À„L0jdÿtp"°À8ð0ÀXÀ(À@,àšå¸þ+0àšåà†å4àšåà†å8àšåà†å<àšå!à†å@àšå%à†åDàšå)à†åHàšå-à†å1°ô ¤3! ²#* àø6C¤3 øÉø(/Iø7 þ$g˜”[Ý”$(Ô>žå(´BoÜ‘´.×þŒ3Ð8 ±v ++à—å,àŠì10àŠÈ0H@h:¤¸b p†å0À°S°†å¬¬"%Ш"-ÀøŒÄ#áD2G.p\#p ++00’åÚ',,Qã$S–HªÀSE@ TTØ ø/ 0p/Ep[u=)/õdmŒ&º &¬ˆ&ž„˜` ãô ˜/` [ ‘ðL ˜1`š@1àµG„80–å˜(? ++$ &z$/S$DM@rE* à–z)€€žå àŠå à4QŠåà–¤°2-0–0™Ø0`Q€å 0€xÈoœ½ ,\´1d+! d0dBŒt.0lHn$ ˜h/0D L„"01BÐ/0L0Ly@ îD !O°cf* 0ø!°žô@X°øôZY' .ôÔ7`(@ôPô`0ðX(!Ûð(/U(PGÖS_`žådýxK\ ^ Q)TX D+ýÿêP D” ++P &†h ++~ŠTax$>˜”!/ñ)ü ˜˜b@†å °#Fà¤#‚L‚œýRà!Ý(/å*7 x° /m+|  .‚ÿÜ{ð$$ûÐ&Þhw@¨9/M,/\ì¼ èÄ t$T ]/Y-¨—/.¸÷//¨Ç/í/è7¤è¥/ù0¨o/}18KÌ ++ #/%24  (\Ì ++)/!3<o/©3<&þýô äX ++ɼ.»àµà0àS  ++IžŒ WPáŽà ìÜ oü }4ì¤8ò 0žå,0Šå(0šå 0“å$0Šå 0žå(0Šå°žå0À Gôœ"0°4ø’d?54›#4p˜&0°  ¼%ô`À  0(¸f°†å0`, ,,$,$Ô(/168Cü±€Ô%GÔ !.a7¸´¨ ì|{[H L7| /Žåà.Ì€b!À†å%°èÜ„ ààà´/%9à›/Õ9,hd> @0\Ä10—X(X[#:X ØR†å0TÜ HH"pËWL HP’åH3Pã(ÊE "gDÖàT/A;à&§ÿð›4”4Ü<œˆZDgc+žŒ7Pázh6w( „Ts¬6V4,„$Ô ++oD <@"ÀŒ° Žâ@‚åÈ ++Áj Áj ¼ 'L/íÿ4¼/í<Ì oä!/u=  ?’‹ ‡ j @¸8A  ã0? Žå$/9>$ . (&þK# †$@Žâ`HHF Þ\D/I?\oü/Ñ?\y\/9\2|0,)h+81%àžÔ"'x ++pdh: /¥@l %l%l¸/µAl7 @š*ôP ++X ++ X ++TŠ:è(üRÀ†å@T ++è(&°8&@H ++(& P<o ±B ÂN °¹k’th h /ChsuÿÿêÀ ++^À ++^À ++ ^átJ!©QÐ / àà +++DP0P" àT4 à ++1oÜ_ô ++,/ÉDøÙ” äE&pˆ € ED&pxœè/™Eè3X ++/hý8#ò(Õ ÇD¹4³/’/Œ/0/µF//,/$/øL.0¸odQG„?L.d H88. ,Ì$È d@/]H,k/ÝHD3/Iÿà2ƒ/½Iôt ‚ìe, B ¤,`'/]Jp 8ø$@XÙ(/aK s/éK,~,w(SÔ üFqB0—< ++ Œo5:00 ˆ4ŒP< ++Hµ ++hTTL™/qMLK&0PH eŒ=SÌÈ^ %N<4@Ð,+È((È( Ü Ð)/-OÌ7 ¬”Œ¸R¸./ÝO¸ó/åP(G”,Ä;|B/½QàÐ’ð  èƒt(uX|OLÜQJš|3SãA’]˜/ 0œoT yR¼/ 0T <( $>VT ¢}º¨U@0ƒà¸Oà ã³°(/•S°0Œ ++\/IT``4Y`…˜wð  df˜Ð8°Ì8l d|Oèè´/ Vè[Ì- U/éV ^Œ‘0t QLüC0ot ‘W 4 4 8  TÙ ¸ ¶,Oà ã± (/µXT s/=YTô|í\x´=jÔ!|0ä0äH Ô!(ì(ì , Sø"ºôÚô‰/[ô[\jè °&D9/Õ[D/8Dtžgº,(/á\,7Ì´+/}]@öØA$@$ø%µ/_ø%›/Í_ØAPÿ`/maP›/bPÿŒ/½cP›/mdPÿŒ/ fP›/½fP8‡Ô)€ =.Ug˜”€ € ´/ah¬s/éh) ¬rl´/j›/Mkà‚ðVyä!\ääð/ñläÇ/Ím€a€ÿe/qo€Ç/Mp€ÿ/ñqÈr€ê Øä e´/tä _üM|C?0uˆ„/ 0dKð UÝð ¾ð (/QvpG“  ,/ív ùpó åÄ6 ¨Jð/™x¨_M/my/¤/iz0dp/1{Dðx)¤„O‡TdyT;kOcd¸I1ݬ d)€i€"„T]/Ù|€OK¨^¨2/…}¨ç/~pO{Ø5pO/]Ø;tOØ‘/Y€`Oo/Ý€DK8/Ñ \(NUø ++¹¨«¨xr= ++xr+&`ð4q|rfÔV8/!ƒÄÄp8 ++Ünl`Ô*-„PL`È} @P @´ T¬ÈV3/Í„¬÷/Ù…¬3äI4T4T43TáhÔFÔ/ @H*¥†Ø< Ü. @à!à _ †å @ÜX ØÜ(/µ‡Ü3 € \/9ˆ\`Œ"@|˜ 5ˆdr„/A‰p*xD@.Á‰ xÜ ,4A/Š4A+ R–f„Ýÿê@(4î³Ýÿê jB]’ú‚"@ 8êÜäÊÆÞÎÜÒô¯ñ#üütÆ B$˜B& ° ,æÖÒàZÜÞÜZÜÊîØÒÜÊZîÐÒèÊ´ŠA@ á86T˜†8)Ž iª ¹ª  `M¦µ@„â2”#pT ++y³ v¡ y³€0@šåÔå¹ðÀ@—rµ˜†Bbv¢3¢&=‘1HBñ¢&M‘)$ü¢ð0 „€@ÂÜÈ@t@ÚÞÈÒÌÒÊäæ@ÂäÊ@ÚêèêÂØØò@ÊðÆØêæpBÌÞä@³¹ ++…„! ++HPHŠ›á8, PèÞÞ@ÚÂÜò@ ” Êè^!ÒÜ5DæÆ?£o²"`õÍ%˜wüX.*ÈêàZÆÐÂä3²Ð3²T((Ö±,?Ó± ++B0Üб1Æ "ݱj* Ða6PP ,¸&¨¬/.1ÿh2ÐÂæÐ04ìpBXöP6 XÒÜìÂØÒÈ@üæ˜?@üš50ô¤{(08 8%ÑÐÂæ@ÜÞ@t@ÌØÂÎp?8:&€&!€ð=ò"`Ì/.QCo204H*,6!8$78:Þð[Ò"ÐX@ÔêæèÒÌòZÌtñ 6ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZb¤d< ++- dµ4µÂé´y>ÆÚÈTä´<=h=Jy§<F'>–B ÚÒÜÆÞØ“D ÆÞØÒÜ F(1àÂÈ*B¶à$2¡HÄÊÌÞäÊ~:1J P˜BñRæÊÎÚÊÜèæ J¡LÒÜÒèÒÂØR‘N ÚÂäÎÒÜZ2Pɵ>b @@Á€¨(¨-ST& `%Êb`h+K_&BC&D;'F3a\àÂÈ®9&H0&J(DL DN DP DR @T/@ ©ïÊ(t ,ÚÒæàØÂƱC6P`8o:" ++P8ò8Bb  ÐV àäÞƤ»Ú¸ó=7sPKs_’!à—ͨWF1à—wsý0—å! —å%—å)°—å-À—§y+9 ƒËS à†åC‹ >³P“o‡Fò0†å% †å)†å-°†å1ÀÏ]—3Qã÷=“_‘å0‘>‚-S’ Žâ)—å%ƒ­[š ++ ÏlÕšK¼"àG ó " + ++G¬/ûš.m˜"ßZêÒB`  ðV|‰|!!à—çu€!0—å% —åL_-°—å1„l„$„(„’0†å) †å-|[5À†åhŒŒy1Œ-ÄŒ åŒXŒ}ŒdŒœòB^  (ŒŒ)‡ €%0—å) —åTS1°—å5”@”q”0,£K÷)0†å- †å1†å5°†å9À†åpœƾ&s ¤ 0Xpÿ âR¨ ++¨M5¨1è¨ /¨Wˆ¨™¨]¨¨"BZ  ¨(ˆC3u?'sQãS9(5|1—åÉÅ$ úÁ ¥ÇÉÅ@è" ¬!ì.ëäÑ 0†å †å†å%¦ŸX"!ÀÃj%Ãj)-1ãJ?—³­/q0‚å ‚å[ž{oP? p—Ç.íÿ'/µP%nÍPO —åp…Ç9…ÇOšåxÇKq¢%²U ++lxX0 ++† ( ++!XU ++C ŠZ•³ÀhBZ82(4õ1Z ++8¥ ;HÁ \ϳ!P± ¶ J^XB^@?^?F?0`?`?`?D?@ òb?b?b?P~B?x? yLfÃÿ|f(ÆÞÜÈÒèÒÞÜÂØ^Âè‚fÆ dUCd&>^@fóˆH€h.C_ÆÞØÞ܉h‰…Ã?F‘êr ÂØèÊäžhžg~j"X˜j˜0˜>`@? ++’ '04rl ++ÆÂæÊ’ø ¡ÈÊÌÂêØè~*³j¢  ª¶ópØÒæèZ|ìÊÆèÞñ®&€0wrn¢ Þ¸0îÄ/˼Ë&l¼#Ä$ ÃOn*Ûp•·pÝ/rM1( ++@J@BtF(ÈÞ=v"d 0ÚH5Q "“ÂxÆ ÙxÆÞÜæÊâêÊÜèdv:¸íðP 8ÜÞ@üüv@ÌÞêÜÈ@îÒèÐÞuÂ\\\üüº98( ù:zæ öÜöÇ 2Ç )xÇzа½+Hcõf¥º"èÇO| Rˆ3­òˆ ++7L/~Á~Á%~Á&'xG?€°=%Ïj=ÿ¨Œ‚ÒèÊäÂèÒÙlA<>?†è»'æ~vòˆêæÊZäÊÚÂÒÜÒÜÎK‚~x_à 5Š‘ æd@¾-? ++„,0è†è&ˆÞäÂèZØÊÂæèZÞÜÆAŠÃèùPòPEr`8ÝÚ"ÃŒ Ž‘ƒ6X{Û fÛ š!!‹ ++S—å‹ ++/0ß ß  "% S C¾#@º0Ï Ÿ !Ÿ ) ’Œ¾Ÿ ‘Ÿ 4/0£ £ "0§ …z"~§ ºS_`ŒȦ `¦ 2ŽÐé ++Žé ++Žé ++ gé ++ çÂé ++˜PB– P©&ƒ1,0 —å¥}!°—å%À—«1û«1 ³sb †å!/q()À¯11QãyŸ\Q‘å‘¿ng*t׫s0m1/Em e#e\k„ãy# m móY) m;9c¥m+#GiÖm,/Um/ ”/2)3/¼û/¼0 Ý“pOþþÿêQ/©QïØþÿê4ºB’ e%(èe8" `ÿ( @ ?Y/<%<) ó%ÿ(eÇÍX” ++ÂÄÞä˜ è¾)¸7Ú¹D æêàu¸¸é ’¹ ˆÑ?”ØB7*!X)@j–%b– B–?)0@§íš"¸€¸v¶¨m.¬Ù$',á!a÷"€~ >ð>¶/ ++@D ++!ÿºD?XðD!¬hB˜ ° "?¶2Q^qÚsS ŽåfË>¸ žŒ/u!0š)òu>q,-,0,,,v> ã10ŽÛà ^a<ñWrq » ;¡Ú ·ö¸[;; ++À ++\.6 )/ ÷/! /3ï\ï\G3\áuÈLÈ/À{/áÌ/ÀÐ (Ð,u10ŽâÀƒüØ44&0‹ø C 0ôßáÐH/1/œ/ÀÑ üÃÀ§)xó/YxAšålÇÕ¡$ ++øœ$P ++¨0#P ˆ8'P9? ++/ ++HgbØî—ñb8ʘ8 z"˜B E J"{p j‡,‰iCqª" ++hý}ª"HvX{ÀÈ¢šÆìè÷/n/o ++<k-!œ”)7ÞÜ~5fžÂè~aKš) ++° ÆÞÜìÊäèZz † ++؆ ++ 0 ++ •ÜÊæèÊÈZ£*$œ$ž‘ ++ ‘ ++þ ®+¶%'’Ó‡,?¢ÀeC%/êC%xÜ.¦í R`)-!àkR í )Fí RÚÌX¨¤ÎÞèÞfÂf(ë —äÊìÊäæÊ~ò šÂÄæÞØêèÊõ ¤õ ¦‡ 8ÌM-?P¨ÂS/€7"á6õxG’" !RªÒÜ2 3l;,5 dæàØÒû<ª<ý888 &Qª{-@XB°˜°m(m(R0—å %_%°—å)EhU(Ei-œ †å%†å)°P¤e-§ µX. ++ÅÙ*X‘1(]1(lÙ*O²B®V)(Å/!8VDñ)V,È̬èÂÄêØÂèl ++.ÊÖ, ++ !² ?ÜêÚq3QäÊØ”# ++ ++¬ ++®è®è®(0Ò°?°?°[²?&0õ«h[ê"ø[}´ àØêä &.ÊòÙ$*Î$ —ÄÂÆÖZêà~iy ò^ÒÊæ~Å$´HÀ¹±&e’±AHBÄ,4/V&4/&4ÁÁ…&4ÚlÀ  |Œ&4Lo’1(„YV&4Š1³ ˜ñ˜XŠ˜‰˜aŠ1OB¾24¦,Æ6¤24,¨,¨³/24¥l¼  0¨‘¨1‰[ )0ó —åŽ5_5°—å9°p°00â6¼Û5à†å9°†å=À†åxì ì ìʬ¬X‰¬¬\¬Ÿ2Bº  ¸Þ6­z­@X OR X© ÷ú8= .‘= •PËÞ$1É6=ì—)Õ0Õüüá'Ä ++°}Z++/ñýJñtõ ÐX_0Žâªý,áý4ùMùõslõÚü üˆÈ¸îäÒèÊZäÂÈÒð¡ ÂFP¡ /?¦ ++HÄÂæm2GÂîa¶….7ÆžCAÆÒ—C0ð ++Êê–C!Tãí Jí ¸í ,î pÄ7T²º ++(6º÷º6AÌyZÒÜèÊäìÂØF@ R¼8¼8¼O2ÐOdC8¾K¾K¾^80*ÀÙÀÙÀ?Â8Ä?6ÄP?Äj ? ++æ3ÆÌÂÜÆò_.ÌÊ/ 'œTž÷Æ÷`´d"wH Ô÷è;ˆ÷Dm# &0°¬_÷k ³-/áWŒyeOâBÒ¦”)D[ ¶˜ÕΘTn8-@.1àK ©œ-õœX‹œœ`œ@BÊ)D¨K ‹K xK VK PK 8K 9-ý0/9ÜC ,#C 5%C D¬11,ÙC XEC uC nC ?xÈq 6¢Êq ʘ ʘ Ì× 02Î Î Î?Ð Ò?Ò?ÒU 0 ++Ô½Ô½Ô ÂL93²d Üd ÿÿvÚd ÿÿ†Ød ÿÿŠÖd Î(d ÿªÖd Ö§ ++Öd Ø% Ø% Ød Ú?Ú?Úd ܽܽÜd #‰Rd äd ÿÿvâd ÿÿ†àd ÿÿŠÞd Î d ÿªÞd Þ§ ++Þd à% à% àd â?â?âd ä½ä½äd ‘Jj/ìd ÿÿvêd ÿÿ†èd ÿÿŠæd Îd ÿªæd æ§ ++æd è% è% èd ê?ê?êd ì½ì½ìd ›ôDØN.Aî Æ0 I.ÖI>*D.'îD.;>)£êgrú;>«üD%;>ÿsøarž„;> ar¤Û8arÕö/>ã@/>ÿnô ˜ ‰ v T Nƒ;Q uq-g> ' , yrs;dÒ ®s;,Ñ X= w p oò HÄ ++%ÊÎÄ ++HÄ ++HÄ ++Ä ++ _üÈèiÂèi¶a; Q;ZVZàÂÈ~o;!ð B ò ø· 6’ôsô9 ôsö9 ö9 ö?Âsø?ø?ø?0ù:ú?ú?ú· ü· ­ã._hBðP›/J%ðPÿs/ qŽ*0uQ q}ÀD…qÚ  ++rà}‡rLjrTþ5 ‘Ý…„u…fj kkTmk<'1°æIk"[±ñ›„ PB‹LH™”™1‹Ls¡0‹Lü/¹W†¹©¹Y¹¬BB  h¹˜¹9¡à—å4àŠå-0—dL5ñ=ÁHÁuÁ84u"’0†å1 †å5ÁrŸ=à†åAÀ†å€ÉeÉeɳ!ÉX„ɹÉUɯbB  ØÞVÉ~Þ\ÞVÞQA1AÆ9iOAò+î(î!wuçúÊþdÎþ¦þ,ñþX]þoþhþ˜þ ÎþrþXþÎþ ++ÂûüûwÊîБVÖwÞÆù¶÷’gÊÆÔ‘RþkOFÒ(/œßÊðàÞÜÊÜè#OAŠRRl@jï)B”¿ ÞìÊäÌØÞî”A*R70R”.CA ++C ++…/ ++•O&ÊÉ! F F ‰ü`!BBÅ! `·*ÿÿ[(ÿÿk$ÿÿs"ÿÿ‡ÿÿ§ÿÿ·Î$ÿ”_ Ê/ÌÌÊ)7)&? ?/  u#úCCúÝB… ë"C"ë"ë$C$c$C&è&7)(C(è*B*B*èÁè6èÿÿ[4èÀmƒèDhèLã5[°Íu„eujà2àüF3àkàEKìüFYŽüF7ä0e8¶äe8ÿ·/.f8¾ f8'°p ++f8ÿ\_, ÌRÄg8Ìg8RRR¶V8/,W8'.7.².Z8!0é 0B0ôA ++2C2ô2ôQ â4C4o4±6B6B6±˱_ˆB@³DÿʳDÿH/>´Dÿÿz/<µDÿÿ–/:P ¾¶Dÿ„O8 ++O -ÊÒO ^h ++Q …Â#'\µD—ÜÞÎÊÜæòÚ®DªD ++ØÊÌè~` 8` :` : :` <˜ <˜ <Õ·!>B>B>Ø·!@B@B@Û· ++¼¿BæÒÚàØÊZûæû¹· 0±·ÿ¦B¦ ¨Û|]_xBNQ–ýÊcÿILK0º’ AK0ÿIJß_¦‚ 8Æ-ÿß_;H  x‚ …‚ r‚ P‚ J‚ L ~ Ù Ù%¥Ã €›v r R$W<ÿ/áÔr ²r ,Ár X-r {r tr hFÈäÍ øÎ-ÌÒ»Dj.»v *9D».F»Z GrHZ HZ HZ A*JÖ JÖ JZ  LBLBLZ AÒNBNBNZ “öP- æ.Êè_ 2a Pa   ízu£ºÐTRÌäÊæÐZî× œÆ{£G:1µÀ;¥ÁR¶ÀØ¿OT°Ù¿#:Ú¿8ç¨8º_\Õ 0u˜1·ŽrÀ_h.È9`ß ++"åkb8%š”«:'š”«PX <½ÔÁ/èÊò¥¼Ò*PF´2"h\I:V\ ð« X<‡,"<, </<€6X6  ++6P6 ò6P6p£JbZ£1' ++ *UI b 6O b 5@°2ÖCZ ++ ¿Ÿ4 MµVg@Z ßA\`@r {­#^gz ++X‰Oj ¾ÿB`` &°È¬&P„eºY2\ò`^Û)^š_’^1' ++H%. R%VgòÈ€ Rˆ ¼¶ A ’³djðhb ++`Ç?Z¹R˜2T„Zp4©¨+jQ/bQöt Lp( $üæ@ÒôÙ­è@Â@æèäÒÜξ@ªTð d¸R<  ++ÈÞÌÚè@þPTãka Òp á0 á° áõ ++Ø ++^Ø ++@E ++‘ SA¸ ++¸ß] ” L PÜ•4 TâÈ ++¼ß€\1ŠI½" àÑ È ++(#,àP  í [0… Ê% š ++.¸àÈž³1  ° ++€*¢Ì¥›4 Pòâ¶$ÞàÊÜZÞêèàêèZR’pB @ ¨ß9T†´ Hã•bBL 7ï 7ð HB„  ÞêèÊäZØÞÞà E 4 bŠå( Šè€°šåÀšå¬á!šéL. ++D¨$t ñ0 ápƒå ƒå °ƒåÀƒ’%=àƒnâ:0†å °†å •Ð5Àô(?Cp†åH¥ o šå$`ä ]æÜ Õ,õ@°Šå®´ÔâÔâ.=Ôâ$ñ·ÿÿê ++šBf ™@ fª"=1 pŠ[;·"m)Qõ1àž: pâ^ã'ÕaàšåàžS^ã"eáq ++šú_!žå$Å¢ $$Fðàšå žåšå pšåm©D [`áDÞeÃàšåÿàâ^ã+œD ++˜q à‘å^=ü 0å ‘å0šå0ŽçˆµT/šÐ*mŒìÀ¡4©”p0âS)ïp0“åS¹0 ++ 0Rã™ý @úÿÿô9%žÅäÖ€žå^ã¬(Ð@^ãk(=ã@^ã§'‘ïò^ã8% ++^ã-" ++^ã&d‘ì10žH` àžå T`Rã ++ Ñ ’åÿâQãó%.1^ã8oS㤠++W0‘å  !ž¤@Lÿÿꉤ *pëó¸@*DÀ©0TeTÖíè .¯Ç¹/Šd ++E[$ÉdíëQ4°ã á€^ã7ªÙæ`!“å 0@0Sã @¥ ƒâ å‘'ºü^ ƒçìŽâã áŽâ||NŽçŸÔ d*u¬’I­x¶L [(¹DàšåÓÿÿê¤v¤*`i\4 Ô@<(, ‘x tt>t?L?>è *p/@_<@ŒEDç¿äJD pl,? ž P ñ¬ðÚþÿê ^㥠++$^ã. ++(ÍîÀ ++,^ã­ ++0û!ƒ ++4^ã¸0#©Ì!àž1 0“ñ výé0Ô1Sãf€s“åRã$Ì h „Ž„y„Ð1 “Ìõñ$/0¤ j$éø&t”X”s”Ù(s„.m„Ç`j*ì”\@ dÑd®ý ++äŒ`@0 “]² ã™ëi ++ R¼ ++>Ì°’å0 áöÿÿêÌ/  n,‰ ÐQ šåë¤dSãjÿÿt ? ž%* ++|ðHÿÿê8^ãÚ ++^ã0 ++Dð@ ++<$à ++L^ã„ ++TÃü+4“å Q ++¬(VÍ1 áÜ ++ l© ++à( áàOTýÿê0A*! x“ÆÿÿêP^ã<ô-ô p ì¬`7”O'ýÿê € ++üD* tPÄÿÿêXä ð  ++@^ã ++H^㶠++`^ã# ++\a ++d^ Üný_00ÄŸ!žå$0Šå(Œ¢ © ((í[$0šåùBö0@àåa b{žå àåå /Ùbà†å ¦%4['º¼ ++ S!àžå üÞ3žå uàžå#à†„'Hí,Dš@à ãÑ"`õ ô”.pž( ¶ÊÇ÷t /  ÌQz<  ” …  DžåLŒ0P¢Ï`V`P:àžå–3Qá=çÅ1ž$ÎÑL @ ¾Ñ& 0 ++0  “åÆT@@üÿê "Ä 1pžhÑð—å šå ’åïœQ­üPãòÿÿ ++Ñø•úàô ^}¬"ภ_Úÿÿ ++Þ¤$ 1Àÿÿ s"A ã¼  ã€ ’åâ_¶ÿÿ ++út% ° °#”| ¸@€â$÷|‹¤*¹<l¤e\"ˆty„" l¬10“y ¹0“åšå °‘fSá?à &/ÔÓ#"Ó#@º¨‘ p‘å&[ãqûÀWã ++À—å ``‘å  ár"P$ Šå(4p-ùüf¼µÝR@âíj"P$ šå(P§Æ€ —å° áŠkÌ{pêÔ$ á„",°„y_pŠå0€¢¼I0D0 Jâ€,Eõ%p”! ++ è0dôP0 =ž‘S: ^#" ˜ .ä™°™0R#pÛ%™H®"™( ++ þ#5Œœ99@œ å¬)÷T *¬  " Ô?pžE´£. ¸b°†åÀ"%#àUJpIE   ”Í"¨f†åp¤D8Œ\ ?éïOÄ„!"MS Àå Ä @lTæ$ ( "ôì00 ãã(@º/»þ¸7ddp‘å0ƒâÐáD_pšå þD*ýD.xþD@qþÿê8H¬8&0¬¨Œ ++69ïÜ£1"à™À ¸ ++&ëÜ ++¸ ++W‚å0‚¸ ++‚ð ++¸ ++0À´ ++„`Šå Šå@ ++D?pž]%æ@l&p_7ÿ/áø*qt©¤ ¤ý ++!àž±= ’ÜÈ|D#¸D’å㢀0Qã € à ’|lŒ/QŒ  ã&Pã#4¿à ãQáʸ[IÌ 4 áô P ++O¬ùÿêÀ%‰Ã1 0“'hÖ¬ 1 0ž|0¼È'ˆà€àNàNàDº´ä.-ä/ÅÿØ(c0 ã À3PãÓÔÄìÊ̼ ++ø"´OÊØ.Ø/ÿ°+ÀØÀ´´` 8"8T44´Ošå2¸8dˆt ´Ošå@*±¬ô´í¥ÿÖTÇø 1À-¸ºU0 "%° ؤ 0 "p“, %“ €, p, Z, X, )‘ðb Pá,¨ 8 ¼BãlNº43WáÛÜ ÌÜ Qã·ÔOWãµ43^á‰4,¹ïÖ1ÿà @d0è 5! ä3SV:D  Ø $Ø ÀÏDráp,!]‰-T 6Wæ.X =ž1,5(âp á‡å 0‡å[ì3ÁÎä 8DDl]€å0€``Sp†å T¿Šå  á  ãP  ê<¬ÚPÄG9£ÀH` <<d4À ã<Oqÿÿ ++¨5XAà á0!ÀŒ0ä8XÀ áVpm1Wá&p2Qã%ã„„Oÿÿª¬5\üÀ á Àœåp‡â&\ããlmGPáÕþoPãÎþÿª¬5'.€0 ™Ošåz0 UOšå_0 *-$|*|#|ŸèÐ <  è7Rá[8Kè žåã5 0Rã3 @1R80 pì00 º“å¡Ð Áã°Áª0ƒâ“çü° ´ k1%, ++¨þ48O²öÿê$!è  ` „"„    3Rã€ì!¸5' ! ‚äá„ ++*Í&œaZpû ì $°Ú°a “å0`%Åô!0’p%PSãÁÚç“å áì&u'¨À§00 Jâì ˆ !°žPSÜ 3›å`"2%žxõÏ°H(ü l<(X šåX" °< `/` , Så °t<L 8G†å °¬ Ä©+Èx œ?! žÞ/Êÿ´# à2Ää‚àÄÈ, t/à$ 0$(ô ++Úô¬!®Ô,  p7ÀA*Ý*þ°"ñ+‸ hF^á­,&ø`ã‡0C^ã…€ ÀBPáS@ &Dä "/ ¢-º ‘å h ¼":ty!0“å% “ÏãTRá& ÐÀ k< ,Ø0p áÜ #<((PH.Q, ô<Ü#¤o0©, , !qÔôÿê0„[?ÏÜpTᇺáT œ ©0,X,PàVj¤o89-°#0àŽáøB4ÿ^à1j@ áTã,­tÀ½ÿÿê à„âàÎ㘄P•à*X± :á áàŽX„Ø%V@Dâ0 ++>‘à†â0Žçöd? áØ(Ø gâD+ ¨*U.¨ ($ < X.‘.è"˜|@|”( \¼ÙH0Ð1@šHQ~ÿÿ ++m¬Ž3D0°°4*]/„Q°\À °/0°p/I0p [¤ÿÿ ++ø/ ++Ô ?^ãψ(T.å0¬X@íþÿ ++ ´¥)\àžå%0˜ SÙg°$Tx.]1TÈ L@@H@Àþÿ ++œ¬åHX@®þÿ ++›èG¬¼K*i2„/Žþ¼ƒ/3 | 3B á@È P¼+ü< .Í30`Iÿÿ ++3þ@ƒp ++pSpZ0Câ p& p( ++ì€m d "¤€ Pœ$2º ` O¦ýÿêŒ:`%Œ3RãàÐpŠpP,0T /0(i^øà,ø^˜M¸8'à*àŽ_šå2ýø*Å6ø.ý/ý˜x(ø]M!0žH ++7°5! ž8,€0j(™7ÔD šåô ++lLòÿêÔ Ô ++ÔÔÈCŽçùÈÕ”.ïÿ€˜gS 8_ šåÿ8<˜8˜O šå‚˜/e9˜"® /Ÿ07#‹ì !@’cðüì7Àx ”å â "tð "ƒü*§  2I$Gn0A:ð ðL-ÀòúP@†å&$-à†…=O,`Šå< œ L5/Ý:@:„/.FñŒ 7TI(T87”/ @Ð(*i;Œ$ddhtâjT ´5 µLȼ/ ãà <.ñ;` àä€*5˜Ùd(˜˜X*u=œXÛ-@Ô.Ä`˜@TáFè@€Xâ1„4!ž„°À ¨/ °´9>¤È Ð =€4 „áÓ Tàj@ áÖ .…>4¬ ¼H´Í´@ºÿÿê86ýþÿ¨5ÌCà’åªhd n°1?d ¨5ä>´/T ¼?¸"`.Õ?ŒTQ»ÿÿ ++süOSã 7/Q@x’”U?á @˜P.¡@°P&l€.é@ä%Hb, ãL L/èo49Aè"ìS”O á(¨‘XÌ2H!Ä@à†âÄ"0ÐÐL*EB´.$þØ„;^ãÄÍ Çÿ¤@* CȤ)YL/ßý¤/•C¤/ÙD/¿ý¤/D¤/N,/}D¤‡*Eœ/oý¤+f¤L¤7¤A  Rpƒâ px=Oƒçp ãp/õEpÑp/=F¸L‰L´¼.ý¼¤¼íd¼-/AG¼;/‘G¼m´ü3dH*AH°.Rü(&KüÜTÜEܬ3t+…VT+?°“l+øFQáT%#õ¼!!“0ðßQãݺQãÛÊ ¤- ¬&«1S㜓ÈPÈ4*hSWáV8G8ðp“åÿâPã14,$p43[á4óà+°4 4"Ý4,(°4BRá­4"ž\B"‰˜#@‡Ú8S00Šå0 @u ++ Ì("00H˜Gp0å0âX ü¿Šå, Šå4Šå88’¸~EJ8¡#8`b, šå4Ìü?|"ÚHLºp ++tp¢°>µJ4@4 Jâl¤6·eõà”å.á á°Îãp”( +H0WáÆZ-@ p010Wã®ø,ÀÁN3Lâœ"@…K4¡MÀj¼~aKä°"@K4­MƒÀšå0‹à@D Bá á  áˆ0Šå<àŠå@’þñK@@ ñ80šå<àšå‘àÀLà\|1LÀ áQMDè4°M' à…õ@_—Ô-!WÔ „0  áðÌ-`j &¡Lì¤8àŠå<@Šådp K"íL0@ÂìÿêNܨ*IM\Ôh$.µÿ°° °°D ã´ø¸ O0 áwdî AÀKâO$ ã4 j´> NÀ¨XP&ÿÿ ++\¥Qk¤faN Ü FÜ C†åÜ $7$8|&.0l&(Œ%ÿ@‚å ‚å8Šå ã@x  $j¨&-O$"@à4Ì$m@KøÑPÁ(/³ÿh*  Ì!˜Sd*ÚÈL-´,d! át6d*PÌl1l° m3[á <%4° ã YWì‘Y"0 +Eá ++T`E*©W`E@†šå ++àå.鄉üàà`@lj Xlt Z‘8àt _( šå0t KaLt ,t åéô= câ`0¼$  $Íl xL € ”åààãð2Xqg&  Q7Q­ ‘åŽç ”Ô ++(h:±à ãà€å €°/èXJ@ Z¡YÔ\;=N”ñPš( ++D „ ++x8 Œ/AZè@p&x­!àš°¼ZŒ7íL[D Hp ž Ô5 K¾p <D,t8) ‚t8p_Šå¢þ,({ $< \/gþ< ;(($.$ D^ ¸ D ´ º´D=cp á p—DW\ ++_ Šåöý¤& _àšåºý¤&T¨9D)* `T ++tðmD)"ßT ++DÐ ++DC@H ++%°&!@ ++6ž3\ãðVHl¼8h¤¼R7PãàôVp/Pû *©s .!ûˆ&û lh+&] \  ¸W"p, ÀF\áè# !Àž "õTó` ˜1^ã³4+ž0"ž´"œÌd j8[8°81ãF8[HI0º pPF á°8b Sáˆc —¬öa‚ ,3QáÌ´c½0P—åÿ°¤?[ã§03Rá}0n`00X03Pá(0È000(ø3 á(´ ð˜nwšå°å ì/" ìK"$p¼chP>ùuì "0i‚˜"$p¼c¼Ŭ0tp_ivpf ++”å ¸ÌJ à4Pá)H6ˆd„’° ++ívdƒ d¬|Ôc4@Šå`š„e ++j ++9wawä(äQ/âÿêd-PPo ñ€âd°šå°kâ[á¸4`S᪠1lŠ|ÔÛxŠå| Šå€pŠå\l€`l Z ++áwx˜*`”v1Qã¸@_ÚCâ„=*ex„³°2 câ\eO`àšåX ,XZ ++ÉxØ`h A4Oïø  „1< j ¸hW ¸ü ´Ñ <ˆ )€ˆ pµ$m ƒðX4Wãü  O}þÿ ++ô 9ô [[<  e8Qá4 ì H. ä 0 / 0 mBSáåý Oàýÿ ++(9(<[ãå°Ì o""À Ø,À ˆ HºðOà áŽà,<H à,$W㈠p/rýÔ ^Ô  /7ýÔ ;Ô l.ýÔ HgÔ l!Ô !àš| /ßüÔ <Ø `àp!pÃÈ+*}Ô ”È+<9<9È+¼+:žÄ+ ¨jpÄ 7WáÄ+#÷Ä ˆ "áh&ßÄ Œ 3Sá²X+£È ,"ŽP ++Œ+ ü+c4Tü+Xq,3Qá,,Pžåÿp@BWãì0„ ++`_3Pá»8"¬$,1ÿè&'–ì+ì+#ƒì+Càžå˜+X /0àð+.Iƒ)à(àD ^ðx\ø+*¡ƒ´(t \2 ++à‘ ! Iàà !ŒBt(,„t) Õ„t)/a„,0ÞÿêÔpTt(ttt p ZÕ„p ᨠZ¨ ¥  È(ì)_Šå>ÿÈ(<ì).€ì)OŠå"œ ++m \ $ˆ\D4_Šåèþˆ;€¤ ++WD4OŠåÍÄ m ¤œ¸ 7^ãè)—À Ø):å´ q àO´ "àH¼f¼ 0¼ ” ++t eWt ˜ ++˜ ++t ,óœ ++<ˆœ ++ ++t p×è*+ñŠ<5è*¥è*Hñt ht \ +t t ³t *£t ü/‹t 3QáZ"K ¼6"6¸o@4Ú8  3Rá8õx àt5Þt5tB^tBP ! "œˆ´ |G¬.X[Ä@ sdsS˜>0˜> 0˜> ,A $d!4$‚åÄx,døc1à‚äSà‚å0¼>,„&4*å4±Ä"ÙàÉ»à~l@¢¼aŽllä~¯0Ÿà ++.,@`*KÁ`,”?lì ++k¸ C@Šåh€'h°Ž”ôUT”D0àÎãÄ ++ŒbP0Bàà„(^\Cª”Ü @C1 áh,€ BâŽà¨/0[¤Õ€hQ”àô(ƒô(E˜xìj$ ++Al<Hÿÿ ++<È*‘¬4C(D(øÈÆÔ/îÿ0Ÿ/@(p(PD.^’P*0,à5‰ÌÀÈ/Lþà5Sp0ü m (ä5õÜ (8Hl/Úý8{ 8yÚ| /Ÿý<KáL`/„ý$ §G$ \+$ *—$ $ ù˜"d$ U$ TA äˆ   ä@óä@ñ ˆN3QáÀ¬ &± "œœ/š 3Sáj8[ÈFÈD x0 ++pl8T ÿ0ìGSãî   *  5/Ř /ÌÙä#,è ++:I™„È ++ÔžÔüH ++Z™<,l? á,t#+Ý”Ü ++,  ”+1š”Ü ++4€[¤±€Ü ++!lj$›l<_fÿÿ ++,Ü ++ *m›TÜ ++T¸@ž d ¸@d´ _ Šåæþ<pƒS´ _ ŠåÊþ¨l À $t>¼/þ”1;´ *0ƒ´ ^0Šåtþ´ ,g´ 9ð=4L´ P´ .þ ´ gP´ (k t/áý ;Ð ´ OŠåÅ´ *É ´ œ´ •¸j‘¤¸j}§ ++ à“kx*hÜuS^ÌŽºÐKŒuôfÚx90+ôi°’*¡ÄpP¤_Ú0Nâ`j5/ù¡`jO×ÿê˜9&# ++˜9˜9ÒtH˜9mu!ømüi´1mâdjht`› ++e£P”HAlj6'˜œŒ „ X8_*Q¤„ti/éÖ°˜?|Í|ʸÃüH/M¥üªüD/É¥üðD ++À ++‘tt„š *-¦du³óVB¶8Rf3ª Ú AàBN6«Af0ð Zf(¨ $ÒÜèÊäÜÂØ@ÊääÞätÉ­®!È7 :+ÒPhX âf ++n± >îRZÜÂÚÊ”¨£ BL8 Š ˆ JJp˜jXV!¨&0 ¢b bÀ8 NÊðàÊÆèÊÈ@kPÂÆèÊäx®ã@üüÆX@äÊÆÊÒìÊÈy®ñ @l NèÞÞ@ÌÊî@ÂäÎêÚÊÜèæ1sÆÞÜèäÞØZ«2(«  ú!¸î ê Ð !1‘8 ÒÊæ8·'#ºŸ1lG¸G '*.å` 6ÜÞ@àäÊìÒÞê憶ÅÊv!)"vsB"8¶²'l˜-¤'Ø!@!"1RÝ2| ¬b ÚÂÖÊZ™¯RZàÞäèª&0ϤhkW›  7L7 7 #‘>·‰[O£„P…à<*Ÿ>"@¸¶Eê ã#¤âàNâ  ã0†â ƒS ÿxû Ë5 JˆŒ©Ðànâ à„åà”å›B0€àŽàà„å³^ éG0„å« »Ï3»­+˨b½+˜+ ¾ ÛÇôp  ÐÂÜÈØÊä„È«ö– ÷­ =»¸“÷  ‚@"Bàƒû¬ 4¶' r!/A0&C\"à`ÐàNâ “å Žà*b?R㈫>öW&pö4®Š_[<9®&pî4®ò5/0¸+‰¸00šå✘ ј Âtg t ++ šŒ˜.þŸ&TT «+…«p. Q—å@ž+ü<*ÍDüÚÞ”¦y Þž-ììèìä.qè ++1àN¬ÄÈ«®Pà“åë7È  hÙhÓÌfk2Tãe áŠh . RÓ ++@ü8O# ++¨ÈaŽà€r ^Ó¼/»*­7»nô "pægh—» * `#pLO0šåȶ_Dz* |STãX >‡ ++ª£”:”)Š8&„}êë²RšåªˆD@ àå~;¿ UDf H†œà± Æ ++ ¿œ$ï²’ P|0€Xâê9\..œ´ +´滳¤tb"ÆØÊÂä¹³‹ ’hÆØÞæÊ(tÌÒØøæÒèÒÞÜ8r"ÌØêæÐ:W ñ n   êàÈÂèÊZÆÞØêÚÜBá 0À á˜‘"0ÔeÌd* © ++e°Žà°›Ö1[B8øðÎ0â íÚÀtIÚø‰h6Pü¹P  ª!ÀšÀIæ"ý²¸Ö”¸v1à€Ø’Pàà¡Àc‡â‚å(^ ++,°™å Uá°Ò°Kâ,°‰å ‹å¤ÅàœåéÎãàŒnŽ Á Xê¨ 47ü/  œôXP k  P T"0E´AJ Ên ++HB¬r¸²¸.Q ò8ŠpHvÄØÞÆÖùÊsX*pÀSºp"¿0(”ö Å3  ¼×b Ä –hrX "J ²J(JWx­ ü€z 0ÞàÊäÂ"@ü¹é ++Èä pS úS˜S ÊS’ ±Ht(@ÇZßü€ÀvXr4ˆ4 24½@(xåØz½0P "ÆÂÜ{%äÊX½Av`ƒ :O(»Pn8ÂFa0vPa&z• a ++@B @†·S˜ ÊäÁ À·w­ ÷Ñ  1Rì·zwS BT: ¾(&"à7rÏ% ++¼!HÞR’|ÞH¸PB~ èY¸6á‘ "kA 5 ùý/yý9 "›!»… `U ÑX‘  £rª€"ç Pq ++~x?Rº~~ƒmé‚ö· ϹA"áÀ %?4  Ô ++KuŽ8 ò 'à—å0—å#—å°—åÀ—å —å`—¢7΂¸10Š®›_ –å Æ”ø ++_ŒÈ$Ákó¢€X‚˜B„v‚ ++(^0`3Á!@+&9BÎ8ûˆ4`4@B˜«AÝ !¸[&CŠ[¨=!B¼½ G’%„Ð ++ØÒæè~7P`B†rÐŒ ÌÖìBB"BQPã1Rã ++FQZ•`ÉÖ1 à—æ˜ Ã'{» ++Ãåpƒå ƒÆk~›!†˜Ë"Ø ++‘jÏ‘R0ŠåªÐ  _ãÒ‡»& Ò2ò ¶¹h+À §^  º ňÅ8Å †Ž €EÊaçEÒ( blÞ f ++ +‘f ++ásšB†éÀS:ˆNTXBŠÈNÈ—Š¸˜·$Râ†1ÄÔŽ  PŒï"°êp0S@S@1à›@1!à›@Op›å<Í@W*8R@Pp ã& j ‚ á›å°4ÍP p˜³"{ ˜°<Í  ú•.©.¶,1à›ú•Ð!àÐþ•¿°åpå0ØR°†å p¶|5 à›>Ô9à›þ•1 ›¦ ›åp›ö•ã+Ë~#þ¬O ‘å«k3Á\¾w` T/%T:\pyÿÿêÊø€šH’ZØÊÜÎèÐX¤ Ž˜h  ª¾¶G°NN0—;/ãRRõv$¼¼‚v½vÕv€ ++ªBŽf ++S’D¨B’ (DŒ PòØ®Dò/p.jâ<ŽöÇ2’ <$ ++@ŸÇ"ŽH8 .{Å àä€ @ þsµ@B” Àj¢@¢b¢š`šš!š^—åáÏšJ]š ©šªš–šœ”Ò–š˜šœÈ˜š CÒ”š©øBœ  (™ål•33?p—U˜Ó(&° °Å% -°š4,——#p‰/0ð…ÇÌ× ++…—…—c…ÿƒ" °…­…¤ã…/L…}…²…PšX/Ìœwhž  ++ˆï*}w………( s0¹OÖs8œXsCŠž_€B s”œs sC:œC4H06À€¢ NÒÜìÂØÒÍ!p@àÂäÂÚÊì!\üÂ@ÒÜcЭÑ@‚D¨¢!‚%]‚tB² Œ ‰.]^*pÉekF.mÍÉ3~ ˜-Í`&dÒ“˼ Þô¤ € ÆÞÜìÊäè‹Ô+""pœÛü!fÈ>¿™n*Zâ“r0Ó “å"! á ÂãÏ"~š þ…8& àsÙq@*“·Õ»·@@ƒåîq Nd ^á*‡ßr ƒà’dGt+=00ª)P!@‚2(3X× PÖ¹.'2«x 3Ïì¡ì0/)ì;/yìŠÄVÖt–]ü- ο$–® –® ++/0ɈO'ç|B|0/¥|;/õ|Bc0.I0ñóþÿê.újh¨(dêàÆÂæʈçQ¦FÈÞîÜ!hµQ2¤>i(¸¦% ++õ&® ` ¸FîÞäÈÃ1à—aͯ$ W$]êJk ú%ý†‘‘:mL­FT!åT AƒÄ\ \³AÃ$\ 0@Žå` ¡`£oœ•>qÚª ´ÂØàÐÂÄÊèÒÆ~ÂØ3¬3VÜêÚÊäC`¨!œ°8&äÂi»„x\NUFú´m! àÊžôÙÃ" ¿HáH2"ó.%¾ Ü!@Ž 1Ž¯˜D ç •p«¡¤ûEꪜÛ%¬ÈÚûæØ2®8BB°Ó ŠBZ®@8 J Û)¨=&=| ³ª¤8ò²{²² ++8™´” ØŠ 48 ++,8 ++4 ++ iâÐ   – 8 ++Ð É`4 ++ÔÍ0 ++² £¤8ê´8B¦-*Hª´Ã¾ ø¾ Ø ++èÞæèä@Ö& ä o3ŠQ"­Ú;"g "­V«!pš(æžÒ/ £-R£Qƒå ƒþ}àƒåƒãŸ<~¶.­S†å « rj‡ÖKãá§̇/ªÉ "<Ø ªÉ0"*Õ/pD táD@‘˜”åb’¶v¸pB¸ `:EÙÂ;­$¸=# ++ " )òDÅDå¥ã XÆ † .P¹l¾~2ºãï¸0¼"ÎÊè ÚäwB¸ ++ ÀcPTC†…(‚g.}úDÁD‚DŠ . L…( ~²~@º‘¼kßÝX2ºk-¨$|0 7RÚ¾6*• @b8aŽ2±p4èÀ—DèÂÒØöö DüÂ@îÞêØÈ@ÚÞìÊ@ÄÊòÞÜÈj2»"CøÀ5VO Ú@$2‚—dŽ®0@Šål0°/ ŒvšéŒ6>vQ|;ÌN¤ ~Jö;BÜþŒ„*¤.uŒ"~@Nâ@Q’å’Ü®ª5Ô®ªò` à-"¼°2 àüD@Nâà‡jGð„ä ++ Ö°Ö°Ê°äÓ2P¸²¢L jìL €®¢[¾â/”Ψ NܽþZ@À4dè "RAìì+õì˜0àŽàD"UþNÊs `šå `–^ACVã?þŠET@Šå8þ¡  k¨i|x@Šå&þÿꌠx Ìž@†å `Šåþ# /óÿœ* œ„/õý„  x°«P¢¤ýÿêrŠ ++Lý&#TÙ/p ++ÌðVœ #Pü,Àx LðÂu?0Üå.Z‘<= aÄp ˆ;?¿rÆ`0òW?q ‚Æ@-¸ ªðuÈHÌð^Êî#È À4 ê@3ˆDsÆ ++àï›14Æ ++è¥"P`8B8O0({2<Þ R.×@&è2è ³hÌðÚÞÈêØÞJ€dA# .1hS?P08[1 '¯"ö$Ê}µ~(â6¥/ a]ê ?— ! ~($ !7 š& YÆ„(Ê}OÎ ~)|¢Éö¬MP†å > !à—NÜ¥#²ä&¬Mº9¨m¹7#pÜ5~)RÒBÌ%X "ÎLõ(fîÌhÐ ##„ËÔ)yÔç"‚ÈC ++ÐÈ°Ò}!ÈDè¦9d¬/ „Œ}Œä¸2ÌP¸CÒ†`†"XÙ\óˆF'˜ D'D'BhBh&‘rh€[8yÁ2`»%›²SÓ2Ÿi#!ÀÀ% ¡¯)À%Ô¹ññx÷,¶$ y¶$Š¾@Ô¶$¨Ö¬"¬{Öb%Àc#8°sØdsZ*Ëó&,yó& fØÜÚ°w°ÚÞàÞÅ&2P HD&üÂËó K.ë)«ÒŸ S CHÜQ E S( @@; ³jsiÈà ^ ·ýÈ>ô0’ CXB €7/½Ò7EPB(„HT:Þ09ÃJ!X ++ÀÀhß;àXo/ÉêoH›8o³è X7¨° ²'²ä&Û¢˜‡L ++ßÀJ( ++Øz7å7KÁ‡¹×'þ ƒ(âxz€pPÈ5üñ ütÈ , ±,0 L:ÁòÌàäÒÜèÌ(.‚=Aô Hö1XëÐ@³“H ÚÒÜêæ@ÏíëJ:±ð X Ìb`B"bŽ"9!’? #¢ÃP! =`AªŒ/š³- Nïn?O = `±ÊÑãçTãÖzŽ$ áŽ²T.¡p@ÄHn E@<xH•PØ(Ù÷Ü#G ãJS )/5 HŠ qøG ˆà¹@HP ‰.(.((|¤]\(ÖÂÎ µXÖÂDÒÿÿ ++Ò$b²Ä + þ±@sÿÿ ++*æäU(…</Œ•ŒOÝÿÿ ++:Ìê8¨ ý¨˜Ïþÿ ++Ôþÿê< *9<ý¸þÿêNºBè 1 ++ÌbEùá&êF 0{­šÿTO<‘L ö ÉDC­/ 0ú^`º)úMáu"vueP ++ÝEu,uu<Åu0/ u/u+eu(¡u4éuHm)m¿ ªm,…mX€xXÝXu ¨ | .˜è)mP¨ˆ/±õG/ õC/eõl/lÑl@æÿÿ ++ßì¼/!PA±$/u%"äþ%±Á ö…±/± S•Œ{A4Q^ãr”/šådm…Mä/¥3í€/šå|/-|G/‰|C/á|ù $Q2 ++ ÈQéÿÿ ++uÌlD Do_ÿÿ ++Áý„7/ñ „#/) ++„3/q ++„+/± ++H D „S/Í „ * <q¿lºÖ+âìæhäâêÞèÒÊÜèéDóHBæ  0 ÌbR •Ü—’º0ã}™”IºáiªqàŽâžç9š Sg*)Ãæ=—% „„X. X îM +îî,/©î•&/õâÕâ ©’X7 áP´h .]Tæ%æ|²\R D]Àñ/‚(ôÊäÞÞÜÊèîÞ ++èÐäÊÊÌÞêäÌÒìÊæÒð ++æÊìÊÜ ++ÊÒÎÐèÜÒ1aÊÜ ÊØð èîÊØìÊèÐÒäèÊÊÜD ++BÌÒÌ 1æÒð O S ++V ++n%hYïqú hQÜèò hRò ++ÌÞ ÒÌa2ò_1ò ]1ò [1ò@JP*æ£/¥êäÊÚÂÒÜÈ!C0 Zîvjæ`Å!?FXB*háb8 Zæ8S´ì @ÐêÜÈäÊÈJ¢D0êfTî  Q âèO!æNñè @èÐÞêæÂÜÈ(& ê(EB "X‹M RCì),òŠ3îgS0è(:%Pö/æS&hp `r šEH€•8# b„•Ú,òÚ•/#*•gópr+)jr/)úr/-2r•P1 ,`²P‹X¢ð‹ ð‹T ‚ð ú)€ @ÚÒØØÝTŠ8 ÒAÅ?èP° Â)×P7`åÙmC8ï‚ì0Sð8ñ‚‰…â#/ü"}@(ò: üÈKTôX÷ŠðP( †šè ˆ@ † PÈ †@´ ° °d ˜P °° ° ’° ++ ¬ ’q ’ LcCÐ šødùD) ‡@`8ûY.ý 1!p ÿ&dhŒX>fHÂÄæN9ÆH#XÜæèpnöqÂZc ++ütÈüÂ]6 ¢^P8 ÜÈfƒäÈ èÐ@†3 2‡ ‡O Tˆ/ˆˆ(ˆ<Ýk̈ÿ/nˆw!ˆK :/K C/mK ´ì`¯+áÜ#_}ÿÿ ++ž¯-¿/ÿ¯/m¯ `/ôþ`.ÕK_Ùþÿ ++Þ`ƒQÂþÿêL`Ÿø -Ð TaÏaÀaH#aa†a4`aOaÿ/ñawFáس؞F,=t®l$•,ÕÞ8ÉH/u~C/Í~7Œ/ŒYé xéPMZD "úþèçZi  Z/©Z Œ q…h… .€äMÁ,/tG/étC/At5R Dˆ /É]há áoiÿÿ ++áý\7qá$©8\/é \G/E ++\C/ ++\s/% \¹a<1¹Y*ýÿê²¹™ ¸ø™¢™Hâø«8ø(¥¶Š’%›,ÂfTþ :?wpø(BüZEX T[f˜x1ã„WPWWAn*S°.©L" @”ÆÔ ++­Ô ++Š<>8M,Ó«hUÜ ôH.èM@™çO”ˆ .刔ÔðÈ ++ ‹˜°Ðjœk"øò*D°Wÿÿê*z( oAèÐ ++†1€ æÊÆÞÜÈvQÒäÈ 2ÐÍÐÍÐÍÐÍPÐ ++ÜÒ! ++è3ÊØ ƒ9„ †CèЈ ŠEèÐŒ/Ž !èÐ)`RC@úpÂüC£XRü»10ÇÇ ÒÊ‹® 5ÌÞ ++#ÒÌ ++ª ++©5¨ §#ÒʦçMP¦‚‹P‹T pñ1jÛüîE0 ß0`R ê² ++,²93þñ"êñ ®8¢û/'jk/)¢kô_-Úøô+ôO0ô'ô*ÜÿZM¿ø¿$ *¥ r<÷ž:8 Êø/ÊùB8Jú ñA ,é0  @d 1@ a@ ++ YU %,Íy 5,(ÃPL8Üke>6*Ñ6òÒ<šÓ% Vç~`ÊðÂÆè@ˆ>Îë~äë~K66!ša4È´464pVK÷ÜêÚÄÊäZ|æuÇ>èL= r*WABÆ>ðP4ÈòÜÂÚÒÆZîÒj =¯<%(gSŸ(ì>²@Ì{; ˆ;Ð'˜¨ÈA˜ÈAÂuÂ'<¸<6W‚·À>p¤¸ ++äÊÂØð\HÒÜ$K=DX‰ ë!aÚŠ=À"ÂÄæÞØêèªyôHÌØÞÜêÚZ|ÈÒÎÒèæÇäpB 7ˆ ÌÈmS#0ç°']e‹£ N£?o÷pK2àÉ%pŠ/°eR ü_mRk«uR"°ñKw«0à8†TáÖ ìǨŽâ å°‘å?ÖD ŽçP ï·?µ#ÚǬ—¬aw›"Ðn* J¬½O '¼ p .Óš Žçk&}"’å×7ûà @R0Žâ 0óÖ\Ÿ00ŽçÑ€,Øë\Àiñ~&à|HCªÌk?ø q( ++ ‘[´"p€Kë”pˆS p€çC”¿~Lè G0Câû‡´"à)‚À ÝÀŒ"à-‚ËíT/1T ÁCë´1™ÿÿkì'`Y’çÈl1à€_`×Ø ++0Ž04p‘å$ŸŽå$"¬À ­R.ñÔ" ¼åL/=LļhSãZÿÿ ++å..\p /¡T3ó ‡‘ ++ó 1Wã\(GâXÿ &‘.ÿþÿ ‘”ˆCÛ• {>WãfLHn•ôD:÷Úd \" ,×-SÓ»Œ"À6 äOåþÿê'Ì.0'ÌØ'Ì <8 D/ÙD·4) ¼¼…¼cc GàŒm pOPã'p//½hóh")Tx€3Rã<Ðu~ž7¿‡¡¶‡àå p‘,R°‡â °ì€ ‡çBâ}UéÏÜÀRDp oT¡Èà ‹LTõT ¼1 ‘#€Ð/‚°‚lD÷ô! ž8'þô –‚Œ1 €jhô‚Œ‚ô-àžô´nå Ä*àôL/1 ++Lô"Ýýô @·ÿÿª ++tƒÜ’0‘åŽçÊýƒ… –¨¤ _Õ¤oÕô. <©„»gl, /] hÔT±TAV\/ý @üä€( ++ CC*p(&p(Ä\@7ä4-< Èð´u È&pÌ ý|d[ãÿüÿ ++l/( +( *ôü7á”/Y ” Üü‡ùŠ( Ì +­ ÉmÈ .›ü„˺5~âÖ%àÏJQ²à1¼hà RH Ò µ z+ñ€ LF``bdfhjlnpr‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´ÈE úE ’ SZÅKL BgQ˜(&ФPL8ʃK`ÊZ)¨°,&#ZÁ %"à™&'â™)Þp  +Â@)&-:)-SL8/zUL81Î!x 3¢ð &5ʈ 7r*8;‡#h·%gú !P82iš<—Y8äkš–5( R9)@à7H"— C\Î\8Mõ' 'ü'&*WØ4ˆ`ÛF°* ˆ Â4px ÜËWcØ 1SXÚÒ·Nò ++PB P $æÒÎÜÒÌÒÆÂÜèZ7°På„œ+ªHn  t å½–ÙðíŒW©–@@„âD/„„ÜT iݱ'ÒjXR»‰t(ÚÂð ñB 5€ ÈÞZÌG‹!U´c00 ážäGB - WŠÌ2(àv ¸Œ_ƽÁ;ÊÙ#$0¢o?°ŠåJ³j| ­Â¥ÊÙ”Bè1 à”@ Žà FR ´e똦ÿpe§Ï1 žÑÀ’åàã\á9ë^®Éºû2ž Nâ#Ð`e Ê÷0Ö"¾*æ¦Ô&œ ++ôãW PÜd ‚´FþZ Ý0 ++¼^( ‚%à0$ààã àNàÄÀZ m¼0¼ ¼¼ƒš÷0€åà€â à€å €å€å·O¿<] h¢_ `Ó lg®ä  ^x €Ü/&ÜãàŸ Sƪ¬×@¿ªôàààà’Ä0åj¦™ð\ã%Ú `‘å@–å`àãTÕ/P ++ÀLâ,<_\Æ(4  ã¼/¸/•¸#@àNà˜þªÊzŸà‹àànâ8¬¨/0pŽö"x)Nr¨/0pÌBÌ_Çž{3Sá%¤@ ++ªdJíªšc°4_ò· 8¦8|‡d›,—˜Tà*uà†¼Ð@œ" ˆŽ4‹ ü\ZÝþøP",¬" `gc4šå À®£4à ãšÁSMª"-ð£ºÀ‘åpàã\7Ûž¦©A BâóèRPª0àã^«Ö¤Y(à*½H47Ÿ#ãíë„0NâV´@>ª?àKЬZ 9|ÈüLÁˆzû‚?àkâø1/1 øKø¹ˆµø@Râû#ª A´Nà‚âà ++/pà.M ++/p ;üÙŒm _p ã¼ 8/Q sÙˆ-d" [†/ ภ++.9 ¸ ++\"  ++"¸þ„°SÓýÿê˜D  .Í @ @@Šån§òò(4 ++/- ++¾‡ ·üÿêŽÚ¦z• w €è@´uX"0/$ ++°/d’A2 ›+0PHW0WØK€Kñ Z\` Z`\`P  B8 VfV`\`XN €ƒ Ò·  xg(ŠØ;/H"ˆ«-à"XD m 1Š$Xh ++4P8B$6§5ˆ éEZÈ ë#0Ý'°b&Àóa-~rœå àœ×°×Nœå À×6f— R°†åÀ— î"*R!H &^©&qÚùÑ@ à ãJ)/qVà}õËn V$ dK?l Ng áÙ{ ?Ÿ M±kêà ãÛ ++4éª# 0'°”¢/Àœ _ü¥œ.ŸÿϘ ê`,7 ++@tb$ ++HÞ.T`85rU`(8•¢1ã` —wa*a( MÈ*Ê*(ö|*@¥7jË*$ #M3 ‚,ë’,ë"9¼%S& ++$tï ®îR‡Ò YXª ++Í"‚t1âI4@ ã–¾‡ˆ* ζ !ã×<7ð ãp’å'q ápÇãâæ ++QàŽà(ø¸1^á°*3Tã|ý[.Úˆiw>ˆ1†å«†ôæ4äÆT¹ ¨¯[` ++…Ò Æ¢æ $ i ¼A2~ÀƒÀƒ¼2ô 900ŠØœÏØØ*]Ø›žp x½" âp ´¸ âp1Óÿÿâp*¡² æpîT¸_‚ÿÿ ++°<|™6y<€5&)ÑÿÿÚàDà@ŽâG&À˜²/à‚‘ ++ à,à, ´´^  á÷þ¼ìôµŒ="ý!"áþ–p/ 06 "ü* ö Çþ¡FTãL6ã¸*ÒfÛ"vðx$ ++\˜¹"u0H;SàCâø³ ð¢¨:v\ žt.\°7ÔBžª .nâX‚yOmX!àšÐ¿,Ô&0__ôÅXQœrv. Dð^.pòuØHP°ÈñàöÙ î 5   0 *#@k° \hÍBu=@c°šå(@Šå x¦/ áhn!T d9 ¿ÄXb~X‹X?‹å®y$*ôÿb # öƒ`! ªv "˜õYªvØ’PYD·ˆ,R¦Mðó>¾M$ŠåH"8XóŽ t„š"+HÚ`Ú¸À~q"ÊàŒ*4.,ÀÌÀ°Â+Ñ `Àq,1,Àš2 ‘! BÄ2ÿÜ5bâhÌ8ÔZA ++Žlq0šå4 š…²bŽÜi–Úê S«ÿÿ ++ S¨ÿÿ ++(t ¬t $ á!  á!á!!0Ø 6â0ôÀãðHsô;0Pã«hªP áp4;WãŒ|=\‚8l8Ddœõ=6 ¤ ++Š\  ú{3Càˆø4Q4d@Iºtqà‘å$àŠ”? à‘9$i2”ˆýb  á8@ ++®_°Šå<|¢ìŠ] <<<8\H="Fþ4˜4 /¹ 4 $  *~QÀ ã´3 ã¬ ++€¡™ÈŠÈ{½))° "° ^ƒ`Ü5ì¼ä"’ÄMZC áþÒQ àNàÛ äÁ`ªÀcâÐ RÀCâÎþ "Åþ|/à( *a¨" 0ø"¯þ$ ++«0 h"¤þ&$z1Sã „J °  K ñRƒ/ 0 ü h&$ [aàp"$Ü0ôÆ(lS/ ++ ,‘6 •:ÔO&Ú8‘¢8ƒ¬pzp°4`\ ZT½à õ›SUPMPä¸ ,,,ŽX@í#4(kè:‰z,í"ÀàF"4p$8ˆ. |ß,*å„,)" t¨ÀŒ?Œå’ìƒ@B—hXVj_àNàÞ/U.ÉþÁ.ûÿêÆŠ_]` `(É>P( `\é6&Xºu ˆ( '&G(>;7P */`+ ++$x‘(+4¡9@ŠÛu'y&`‹)X¥&x¥& ¢3nŒ>^V ÊðÌ&PŽ ¢C1P ++€…Ï #ÚN°X*äÊØÂD&'B¨L\)|' }`\% ++Ð~"ð„9„O˜*yØy(yy y°yQMÂ(£Ì›`: 2À`» B$8¡2ð)¡úð J§ÝÀ‘”!§Wc ØÞÎÐó8ýß-öS7•ˆÝÛó¾½÷vX ++ÌØÞÞÓC. ++Hâ:Ð) ++ÎÐ)/ƒ)°î:/ () )¹|))&¢&&*  ;µ*$´?ÏjM*XQ*ØM*ˆM*°M*Ý×Â#"ßÚ6Â+áâI&ãªÙ‚å ÊìCå9 ›~ ++Ê(˜å€˜å ++°å@&ò¡#¸åháÀÝXÝÝ!ί°B 8Âl-Ì·\ì l-s*Žü›ü'e.+úeJð$Æ33z1ÆJa°B0GB?,ABÿM2.ABfÎÊÜæòÚ/.BB0BB0BBh2 pCB's…?BW…&D3 /Ý£sB_> —Y¾B±BÙŒ·B’h5BÍÈPÙG2ˆB…4X7œ} oB¶îQØ*;š¤B!PÞ!=!¨'IPú!A4H 'C:6ÿS 668Ì8ˆI¦ XÈF'¨º ¨ñ†°ñ†)]Bv¹ à„(c¢æÎ/gRæ/izæ'mRæ.mòæ/`=&ƒª= ’¸:X‡2Ü68 ‰ ++(ðV%ú5b$²Z2(T(‘º‡“gˆ"v/•²)—´!xÑ;™r¿"p°’„8R<˼i6& ++@ô_8LHÎú`8N P2OÚÂÜò3®#HÌ'nd1Q{†BJ>Ëa èšQ0d …( >e†‚èÊðèêÂØ@žŠÁEH58 ++` ++ ~Œ± >PB01Qt B<2H[ΡÚèZ|Êðàä ÂÀ:È ŒÌN è@&›Ï„å„å „å uÍñа‚BD 1¯”O0TàW¡4œO!&œK'>ÌüppÑ › °žåÀžå¢›ñ ++:p†å °†å À†å†å†å(¤B†åpŽœV*Š2 'Š/# à~›" Šð70‚› IýI# à~›ÀèÆ( ++ĆB  ++%‹³à(Îع¾B8 ++n‰þê3âÄœðâ^ãÁ ++ÿàâÖ`rÊ  4\»  RÔ0€ ++âQA ’ó³9úÿÿz/ ÈgR”2RÍ ++" ++س Ç bö&.å# ++{\¬8›1 “K±¾OD på²9S³ÿÿêpêY¶OΑ©\10“à›‚î$ž'0ý)â †å&à ãà†å`Š~!˜ ®>1àÊ>ñPÎ’d& vðê‘d5 pž¨› þ#$ž0gSÊP xc ++ª\¬(Œ%PŒ/ጇ/}Œc/õŒ|"ñþ|/]|‡/ù|c/q|#ÕSd;Ü¡.p|P’þÿêTTo h/p|Â$Diàåpž× ìX6aLàú$rá¼=¼ ˆ.µ¼¼,/pÀ’U.1ÀÐ1ÕŸdÈQÈ Ä!Äl ÀÎÀ/åÀ{/uÀ|L¼/í|œ¸™{&h¥RÒ(ˆÌÖ ++È1(õ BÈ@‘‘$ ++h«Cƒ`8 êBmÈ)/h)&)¨)j)+ú)$˜Œ ++C z/0//2Èà·1ªk%#òk–¨è™í >¦Êì2û=åØ" ++RSÙPP ÙDJ:RíjåtT ( <$ˆ2¡>TÞ§ <á1ÐW[5pžS ++DÿpŒ®á^.PC ŒÞQ? >, ß"àb+/ G h‚#àÆ/ |× 7^1ò€/ò"`If"T0Š‰/¬P0B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Æ,ùôö*ÞB* M¨  L$à™åZáÌ*€Xâ½ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ö  Jâ`EâP…â,à™å^á¢:àHÈà†å@†å`ŠåpphÙ,ppp p¢ I  p`p pp¢¹p?pp& ||¢<5|Š: á€™å àšåà€t©t'048 ƒâlø à‚å,°™å Uáò*°Kâ,°‰å ‹å(O àƒåHÚH4ÂH4ªH4’H4zH4bH4JH42H4H4H4/êH3ÒH4ºH4¢H4ŠH4rH4ZH4BH4*H .œ!†åt´`‚åã ++pp(.ïpp /Üp'Èp p µp(¡pp /Ž3vH4^H4FH4.H4H4/þH3æH4ÎH4¶H4žH4†H4nH4/V'/Bø/p(/ˆp ˆ>@ ãðšå¨ @1ÿ/á@fðÿÿê P2ÿ/áÞ,É,·,¢ŠrZB*/úþâʲš‚.jþdX,C,1,, ++,.õý,/ãý,ζž†nV>&/öüÞÆ®–~fN6˜3ûº™x@Wûÿêì œ&À @ÿ/á*Mä4Hð6-ûÿê„j "PÆæRÆØÞÆÖ¾ÎÊèèÒÚÊ HÌÞäÊÒÎÜZÊÜèäòXB$8B ð à™ªTã@ið à‰å4€‰å(P‰å ‰åãD á0—å…Á4€™å(P™å ™å@a ©P áòy éðZ ++ˆB80BL0 Ì"ÎÚÅ&µ  ²PTã ²®¢ ++ ŠsRp„„>ÂæÆ……7…=8p .ÚÖ„ ++„M ++„ðqHèæ$ÂjÈâhÜôèÜÚâlðØÎàZÂP ‚èæ ++ ÌØÈ èòàÊÜÞ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ àÂÒä  L B( :æÄTãî0 áF"åFÀÒ ++ àå pžåÿ žåå 0Šå ŠåpŠånj8ð° á 0šå šåpšåãŸfÁRã_ªã‚`Wã[Ú øDààã@^àAjš÷ ++à€áã& Pà$j`Eâò`:°V p†â à†åbùà†âà†å †å&à ãà†Ö=àŠf.¶  ++ þ`ßÿÿêø¿Šå°Šå@Šå8:" 8÷°šå@šåÅÿÿêàãX [4¢TŒ¨¨<  <p<Tu á ã@|Žýì|ßTãÂÿÿ ++eÿÿêd$/ad±©ÿÿ ++HÿÿêŠ<ü L+µü0šåX.ÿ6 ýò2ÚBL ¸ èæZ- Z|Ü@  árj@>¸ BBpZ8ÞáZàäÞÆÊææ0:ÁèÐäÊÂÈ0<áÈêäÂèÒÞÜ0>ñÚÞÜÞèÞÜÒÆ0@ êè1B$ûÆÞØØÊÆèÞäZÆàê0D&cäÊÂØ dòÒÜèÊäÜÂØ (êÜÊðàÊÆèÊÈ@˜ð@üæF ++HÞÞàæ8û7˜¹×)° Fx"æÒÚàØÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæPÌÚè !ÌÈ Y0'ZÑ ìÂäÒÂÜè9IÖÈÒäÊÆèÒìÊPJI ™R&I)>àñ ++ üæ @ZP AlZäÂÈÒðàÐÀTPw/?v2ÄÂæÄ!î " 1àÆ*Æ2Ò:a ++æÒÎÜ~BrÆÞÚÚÂæJáa üÈ-¡ , ±,‘ ¹,P 'a ürXN`+[ Á+òù, L($ÌàäÒÜèÌ Fxüæ@ZüÈ\<à|& HÈÞÌÚè ++ö bP`B0S%x % V$"†' Žµ9a$ ¬«#&£CpB £CB ñpB`8‚( ++(B((9 ² 4äÊÆÞäÈkøäX ‚*@B0 xÙDHÕ@ÕA+ ++ʼn9p—»@ð—å}*a…[ šåK@  â æ9@pŠå=99p» šåÀ.Àÿë ¹A1Ò(ð X FxÈÂèÊ ,ÆÞÜÈÒ0MÂØ^ÂbÜ¢ ¢ 2?¥ ++“ÆÞÜæÊâêʆP,T (›@º®s.y|ÈÒæàØÂò4è’« 2­.||6 L×2 ˆü€¶@üÂüº×XÁgJ0 ++0Áõ0¨2Èè$ÂjÔÐÎØÜÄnèäpêÄÊÈZ ¬aÈè2ìÊ• ++Ò 2Ò ò 4X j*6ÚÂÖÊZÙ ¦BJ   šj0° áø &pü '*zB"¯  á0Šå pƒ ô ;Q0šå ì ðã ++àâ^ãTx Àà“åàâ^ãP”< ã, ++x8 z!z!4à áˆ @˜ `^ã4 ++p ””"”—”X ÷÷÷p†å 0†å0 á`Eâ bZ@@†å 0 È òÜ åþ  44ô ++à\+a\ð ++\qÈjc &’6HBZ¨ ++ب ++¦ ++"ÜÞ* 7QRá$ ++p ¸ ++ðJ88:8<8>8@8B8D8 2êÜù@ÎÜÒô< ++1ÒÚÊA ++? ++#FÚx8 ++¢'þ8bxzÛ`ðH ++@–LðP(6` 8ÒÜìÂØÒÈ@ÜêÚÄÊä@ÞÌ@æÊ°æVQ F0*5f **2ÂÜÞ$#!`éH ÚJé PB0  ++ª~R ˜ b `!à|ˆJSJJR ^XrHH{BNô "òàPl& ˆ+V0  áü” ++”’”~’b|xO ŠåpªÁ&'_ šåÖTòŠH0BL NT .üæ@Òæ@ÜÞè@Â4= 3ÙPBb8šP 9R- é¼(ø ::22Ï à’å@žåØ ! îÑ ++zH@RTÐ0Å1V°²É Í' Í<VÍuXæÊèZ¹BÐ{\ à ÈUÎÝLÝ9á*â$<Ö©•©q0‚â@ƒâÉ+[[&0‹K !0ôaOŠå ¼*Q*¼_šå´4 ­}â¢H(X8BZe¬0X× ++8º\Ø è5^ ÍiB¶=@ êAê à@Ú0Sã0Ú*’ 0Qáò3÷!0,°žå0âSãàP0’å0õ¾¾JÏ\.s‚H ++è‹S^`Ü^n5d(k&th è !vp_ [ ++dd- —)^ ++ 6 2ÊMÆ:£ / #pË + ò+ÑúpÏ »‘—å Žâ0‚à   °£ ++ØÊ /¡Ð³› ++¬c % xd#¨~ 20bz # ++¨vudf BZh!(=T ‡0l bz> ƒj  Ø k”ûƒû}n óm$ž$gÚp0žå’åV Гå 0žå“å0vvSPá"$ $ƒàžå žåš$Æ Ç˜ OŠå¥ÛÙ. ++``0 Šå‘o ŠåÖ*yÖÎü(… šåšåP° Á°H[PÕÿÿ ++±Ý/àŠãGV&ãaHH09 ++@:j9 ++1x@ ++jߌ @lr 2–æ] Aüæ@Â9 ‘@ÈÒÌÌÊä‡l “p x sn  x  È · ± ¡ › Š Zèªè84ª8-=8T¥84í8¤%/I¤3/‘¤_€ÿÿ ++}ܘ.܈Ü0’nÜÜ7bnÜ!€" ªòSpr×p×p×1vÄätØÙÎÊÙÿÿctÙ$ÙtÙtÙvÙvÙvÙzÙ|ÙxÙ|Ù€ÚÙ<ºÙÿÿcxÙ(ÙxÙ"ÙzÙzÙzÙ~‰ |Ø|‰ |×ÏÚ×ÿÿc|× ×|×|×~×~×~×€.™2ÊÜÆ2„2, é0€Xâ½]‡*uÍ"‡çs¡ ++b€B‚Ó,RŒ Ìâ –Vp áýé7ÔgǾ- ““Á“·´·®“pà—å “åŸ@“å .-—C‡Dp@Pà…j$$$n$pàPàlj-TT!ªW»:ì@0à80!@ D#0^â!@à á ¾ ¾ _0†å @¾ [:¯0ÿà„åà ãà„å 0„åãñ_äÿÿê áZ+ö, R Ù¶!P @šåÌÃ_ áà…+…0àšåD6 »Hê+[@Ž+mî 10 á§F"¯Sãèÿÿ ++–ÿÿêà/¹à@‚ÿÿêÛ/p"ýïr,Cpšåh)&O ßëP (ÀB".Á"$"pûHrÿÿê2¢#ø+è× &Xí(CPB, hU(`!)30rTÙ Cš‚Ù HlK„¶;† !,ˆ> ?wf†B‚ÚˆÚ¶Š"æêÄèäÂÆè*-ÛÛÜwŠŽ3ØŒ“ïÚôÍô0<º<´q“å^㧗“—“trXT<:   á0—åÖ&  Ö&c0„å  ¾1.òÿ 8å/p„"p„Ê/ ++/%à·$T²3}(\,Sæÿÿ ++¨ø/ÑøzH/` 0X¼0Ù3À00 ++0ð0'80/`0x….!\`(˜ FÄ"ÞÊZ%3ÐÂìŒ' ++R2U<ÊŽU{=’$]W”|}w’YŽÞ”Þj–ÂÈÈTœØ Ow–Odš Ok O"4OQ! ++WA/@= ž3& WÿWùWìÓ.šæ!ûN/Í7 ++à#Ù-à‡×N/á-pàšå Žá±9³ ´ žà±j@ á¬"@d ,O Â"Á- @k+¸/ àTý8ÑT=9àT10ŽCs ++%#àq/Ï10„$UoTáQº ;D7Tà9‡$‡7žâ"‡Ö‹i„ ã áH3$! í8@<Ë3U‹¶{ºH $¡0<Ðoé› /àñà}³,ä .9l=kL°(› g/ñØOšåÌÛCsÅþÿêD²c3XVl.@ ++3pR ++P ++X‹@ø“Xˆ¢ 5(Î !,O ˜nm%júš ++(nœ8žwi ‘ ++dwždšÔ Ôu¢ÆÞàò4Î&ø ÷,8÷,(,"÷,O '½½<ð 03o"w-¸…O(¢&’¤ÆêääÊÜü)v8y¦ Ø  Y© @¿ ++a¹a&°u; e Qá¸+±W ÍK…±W à”å0”sØ(/]؈l+‘ )‘ƒ6æÒ9‚:g5 ,0Ü­ò=—é1OšåP/I«ô0ôŸ ++ ãü8*]©/੸.á¸ÐôµLÀ8’B0HÎÆ@ô _PD0*&@+ ¤O0#pN%!PßH ê¦M0!˜'H"Ht@Ú¦ ++è33(€ÏªÏÇ:Ïy¬  x ÏfÏ`0ÏWÛDR98ã68Gµºúÿ^á1Ê!FÕ @,Ê= ..á  ëóHç$o k/…kO šå©w¢k=, ++ ã` /ý`{Ÿ±WÃ(¼ÿÿê,JSX¨ ++0[¡ª ÌÂÒØÊ7 0D´ 6ì8™ÃZôÞÜÊ@ÞÌÌæÊèk9Ã/9"¬w b °;z¬‰0®iEZÂÜÈYz°  P ZS‹M‹Dû1ä5"Ï Å8/ Š .‘b^¾/ðšö?L9?¼µ?+D?ª ­;÷;÷Õà³Îÿÿê&²¨€æR® 2ŽP@ÌÞä@Y:Ú%*¼7:(Ã6?Š°v?(®õK R°õ²¯@{¸ÀC&0  FDgLTãk €à ãàŠå’ "ÿpŠå Šå$Šå( Šå,N¢|},ñ, Jâpšå šå$šå( šåãJ3Tã€à ãàŠåˆ4"<¯@ˆ á®özB¶  ÈÞZ8 8!(Šå, Šå ZR°šå À—J„@šå`šåòp¶ UÁ ++Œ6*CŒ6/?§A£$0Šå°Šå À;K@Šå`Šå0ˆ6"ôˆ6"00~_$0šå¸ˆq ++(àšœ8@  ³=0º ôS>CÊ,$S÷,$@ôº “ì^ãñÊ$ᤠ$@Þº Ð\^ãÛÊãÌ Á[ãʺ|[ãÈà 0\ä&aº0\ãµ7㦠´v±W᡺Vã - ;ã- ]^á‹- 3Tá†Th0°Tp Wàcj©8©Y©í €å@ à€åô1 à€ %ðà€å°€åÀ€å €VAã!à€Ø"%àb)à€å-@¹1à€å`à ãà€èß ä-pš""4d Ø ÜÐ"JP" ++kP ^)!uu þuÀŠåpŠ† Z†G ++ < ·N¨ 0ktå e 4Š_D9 4  4 ê4,4 (4 ®   *馃‰þÿêT ++™:P™:1°¯ˆ® ++t8² Nü ++0ÈÂò¨7(TÚÞÜèм7FòÊÂäD3@3aÆÞÚÄÒÜ%í7ÂäÎêÚÊÜèZe&ˆFH='´IId Œ³Q;ÐÞêQ"Q_ÒÜêèÊ éDÆ;xÕaê¶ ++H X…ƒ¸€B¶a"¸8Cö  ++¢~EEC9¨H¾0ºnC C#C8Ÿ¨@º¼‹1¾´ ¤DÅ' Å<¾ÅÀņ ÅÅ' Å<ÀÅ1°fÃÁ'Á<ÂÁ1Ä®5ÈÂòÀ¿'¿<Ä¿1Æ­ÁÃ'Ã<ÆÃÈIîÊÊÖ‡ ++Œ'!É<ÈÉÊÉÃÉÉ'%É<ÊÉÌÕKÈæè~ÕÁ')Á<ÌÁ1Î ®ÀZÀÈ Ï'-Ï<ÎÏ6е%ÜÂÑ+ø Ë'1Ë<ÐË5Ô Æ Ò™&è Ä6Ä&Ä Ä›žåã$P@žà;^T5Ù_/n+¥n XÿM-‘2¨¨M ++0bÒ;_, ÔL4ÖŸZ$Z|IØ“+0 $ U@‚ ++À |%Y?rû]M•7 “&3QáG“&2^¤_ú@ “åþš Ñú¬)!+ ³# -+O šåŽó%‡IÊu5u/u,"_’åj /¡ÊÓ/‰Ê}<ºHøCÖ¥Ö7 ( 6¬9êèÆçQs,fúØ ++0°opH˜p di*Ø ++(åÚ¸|¡{Ü Ð ösÔj•W•H•BÔ© +/™±ª!  Õ ÙÙº 5áLÉl–áu£ ¢¨HìIa3Þàòœx–`À ð(Ú 0ÆÞÜìÊäæ_ƺÚ# 8ªÜ¡“éD¬ ++0e! ;f~ a~!@I M²* ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #¿¼,/òøK,B* ¨  L$à™åZá *€Xâý ++0Ÿåê`EâP…â,à™å^áð:0†åà ã à†å  á00gß:à ø à†å †å ƒâ`‚åã ++,°™å UáÍ*°Kâ,°‰å ‹å<O àƒåœ ¹œ¨œ–œ(‚œqœ_œ L&0 ã”M”<”*0(œœ/óœD Dà‚åHÛH g Šâ`Xðp–åàâàŠå@ ã ð–rµL Jâì/¹ì@$/¦$”$4|$@/Ù$ Z$$G$5AÜ Ü$Ü/î Ü?/‘Ü /Ì Ü#/¹ Ü/§ Ü3H x/} ÜlÜZ¸@/I¸ Š8 :0 á¨Kƒå@pO0Šåtlb½Œ Jâ0šåx0 xx_ †å 0t/õ t/ã P3ËH4³H4›H4ƒH4kH4SH4;H4#H4 H4/ó H3ÛH4ÃH4«H4“H4{H4cH4KH43H4H4H4/ë ++H3ÓH4»H4£H4‹H4sH4[H4CH4+H4H4/û H3ãH  /Ñ  /À ” ®Ü4–H y>0 ã0Ž\? 0Ž$7¼ /¼ lY : ¼ ]‚å@‚p I„.0p 9àà (\P†åàà˜˜ `¼/õ¼/ä¼/Ò¼/Á¼/±X/ X/ŽX3vH4^H4FH4.H 8<0žåÀÀÀ/öè3/Þ0l/½h/«H/šHˆH4pH4/Xø?/A< /6°##l$4/ù$?/e$ /×$#/Ä$/²$3šH ð$Ül*@Œ_`Šå(1(9`Š”Ÿ ã  ã œœ¢  L  Jâpp@p pp³q;p"ïl ++\ ++t‚à(c á0((Ñ(p(‡(‡(*ÂXèß ŠåŠåpŠå ø¢ü] î  Jâ šåšåp¨/  8/ŠmÀ€â`Œ'x¼À¼€l ++dlo àšåàpQp(=pp *p(/¤ ll(/ðlpl/ÞllÊlLì" È_à†å𲄠W`Eâ xñ¡: á0€å €dð ++ à€å €åp€åàšåà€å0à ãÄÀÄL‰Ä¬'Àa †åp†\(m0Œâ`ƒÌoÌ0ÌŒü./Y#ü/Gü#40ô€ô"ôDp!¤3ƒ$œ /ýœ/ëœ ++./é$/Ã.&°<"²è3°€Ì0¡/ °/Ž° 0Œ/z< ( ++€lhl( ++ ¨Tl´p¬âà†å †åp†åŒ/༠++/8¼ ++3 H4H4/ðH3/ØL%'/Ä/³x ¡œ l/P,zp(fp SÄ4;Ä('ÄÄ/`/ò”/á”/Ïx3·H4/ŸÀ'‹,z,hä4PH48H4 H >˜#°0°À#ÿŒ0Œ”/îhä/Üä .”#ʈ ˆ ”/¹ˆ h/§h dØ/“” € hH ¸T¸ P/AÀ ¨)ž¤8 ¤ ++( ++@ÿ/á*•/0t /<¸¸ y>@ ãðš°@1ÿ/á@fðÿÿê P2ÿ/áß,·¥p7,xDf,Q@<_3ÿ/á/@l ð.úþ/ëþØÀ¨ˆn@YA)p@.ôý.ãý@/Òý@½¥D“,~,l,WF@5@ /ðüØÀ0L°;,,jXl.GüH6T .üû@/ëû@ÖÅ@.²û¨@‰@p,X€F/, ,.ôú/ãú,μ,§•,€.oú\.\ú07.(ú°P ++.éù`È/¹ù^F.5ù€"@/ÿøç.ÖøXÃ@ ˆp._ø N@;.ñ÷p/à÷@ʲš‚jY .H÷”/8÷,&hT/ôöTâ.ÑöT.ÀöT°/ öbJ.9ö((@/ýõå͵…mU=% /õôÝÅ­•}eM5/íóÕ½¥u]E-.ôòT.äòÀ/ÁòhžT|@iQ@˜-@ ++.ùñ@/æñ@ò@Ÿ@|dSX@@.ôðˆ/ãð@ν@¬@™ˆ@w@bQ@@@+@O ðÿê¸ *M@¸.ôï ðíïÿê ˆjB à ‚i@ )m@pF ++&PÁåÝ¡@"6¡@ÿ% ++ àå&^ã ++åàU8+©U8±àšå áçÿÿêLõ%*ñ bÎÿÿêˆE0+)€OšåÊÉÃPyPùY©ÿÿê ++BBü@ÜÊîZÆÂÌʈØÞÂÈXj8Xú8B`8j ++ B(HBb8 ++`æÆÐÊÚÊZæèÂäè@B € !çðTãà—å@žålPTã$ãl„àâ^ã$P0Žâ ¨dã Ð°À À0*ôÿœ ø Ó´$ Sð3 ++ ++B¬0 *üæ@Òæ@ÜÞè@Â@àäÞÆÊÈêäÊ ++ ++HÞÞàæ0BLxB0 BöPÀ „ûQà ÞÚÚDÚ3Î ÿ")Ë£¿€å €åŠå ¦÷%*¡ÿ% / á..á^ 8 äDÐÿÿê¬Âœ.E¤¼µ @ø ++RB ¨ ÆÞÚÚÂÜÈZØÒÜÊXZ(,ðZÂäÎêÚÊÜèæXÚ ++Ä2PH3¢(Ûd`éFÆäÒà ++¾- ++úúÿd! ìQ(Ôp²èŒZàäÞÎäÂÚââ3Ë1ã ä¾äïp@B  H V! }!tPa ++í_pŠå å‰åÑpšå šåTã#] 0Rã5\¡à á0 á à“9 (qð0“åâQãa0âS¹˜Eñÿÿ”OàŠåÑþ+*þ+$Þ¹ à”ÿ ++âSãïÿÿàžåàâ^ãëÿÿ]B„½ /|ŒÁ…ÁòÊ ++ØÒæè~XB$è ¸J0 6š*°@ÞÌ@æèäÒÜÎæ  ++èÇ!X8f " ++(Ø›À> L` ÁÁIX 1¹ ¹v¹c¹@%¹Áa!ÁØ ÁŠÁƒÁ#ºøº¸Z0  HºÜÞÜÊÚàèòÃ?2Ãx"äläæt°s” ؼøRç iÚ ìüSb % Qê®P®ò &PÆæRÄòèÊæ¾ÂØØÞÆÂèÊÈ .HÌÞäÊÒÎÜZÊÜèäò=ð8B  0 àÌPTã t¿ð à‰å4€‰å(P‰å ‰å0—地4€™å(P™å ™äá *`Rp¦a0"žZž|  ø $]]ÿ  ++àãàãp—å@ ãð—åp¯iW ppšåëÿÿêeyM3Tãsm&0qiqÀT ++Sã4€PRã 0 àã‰Q6¡È2 `šåR©˜ºRááÿÿÚ¥@RáÅ_ÿ/ ãÚ1 $P&Qãé à‘åžåP\Ò ++ ‘å÷ÿÿê^ã?žå¼ll&pXà ãì50%/-^0šå—ÿpAMAÜ.XhQQÁͬ=¬¬< мy/m¬¿ys¸ÿÿê2ªiò ø$4ÆÞØØÊÆèZÚÂðÒÚêÚZÎÊÜÊäÂèÒÞÜRöH& æèÂèÒÆ8"( *ÒÜìÂØÒÈ@.!@üƒð 0*ÜÊî ÒÚàêäÊ àæòÚÄÞØàÞéðîÊÂÖàÂÒäÊà& QäÞÜ ++'=0 ”QÜèÒÜêo  ÆÞÈÊ"&òZèòàÊÈZÞÄÔÊÆè|ZäÊÆÞäÈ4 ÈÂè LxÍ$ ËPæàÂÆÊÆR  ++pCWr ++0Þ 3x$P@&XA!(Ý tB ò tn!HYædd, à ,k* öo moë.P ++b*e1Ø8 ;ò,ttaÆêäÚÊÚÁF .`v2 è0¾]$qâàã^• ¬y_A áüÂÒR2 ++€BD8‡ñ(ÆêääÊÜèZÚÊÚÞäòZ¸Šo4 Р€"Op—å†a†í¶!šoXÚ4 ‘o?ÚÂðo6oq6o/ o8oog8o(o_äÊæÊèt:C t@ !\ @ :@ !6ŠZ1BQšåPNP±PL!àš¼@Ž ++ Q ++<<žåÌOàŠåÌ| ++"ÄàÆOeX)…XO0õ0žå#1 á0Ãã0Câ0Žà0“/Sá@Ì›Ÿ á šåÍ>t1-„ ÅB9IL ã xüxЈ¸Q @žåˆ$t ápšåµ ++ ŒÖ ½4@šåËÿÿê`ˆjrÿÿê =.P 9šåœQ D44  4 0*d.Çþ­ .Àþ|ƒP‚à$E³ÈÒäÊÆèÞäÒÊæ– ++ô(>P \ L( ÊâêÂØ~É HÌÒðÊÈ~’x>(@Hzƒ0 \(@ò€ üÂüÂ0Þ ÌÞäÚÂè¤à6ø ŠD8Æ0“ –/— <ž<¥<Œ ++á ++ÐO ÉóŠÞàÊÜZÒÜàêèZÌÒØÊBƒ  ÆØÞæÊþ XbB@< IÚBK–0B @ ÇW1b7’( HÎêÂäÈx ++h¯“( ++üÂ^ü¸€*D N "@ü\’ÌÞêÜÈ@ÒÜ@_@_ OPFá!0!$!U.o DîÐÞ@êv œgBD ++¹— ð pZ&HÆÞÚàäÊææÊÈZîÂäÜÒÜÎH/X =RR—ªó¨ Û500Žå°>‡„3Þb P1 ++Úb áH  ÌÂæØ@ª06Òæ@êÅ@ÒÜèÊäÜÂØØòvrÒÜÎ@èÐÊ7@PüæR4ñäÊÈêÜÈÂÜè@ÂÜÈ@ÆÂÜ@æØÞî@`@îäÒè5@äÊÂÈ óæÒÎÜÒÌÒÆÂÜèØòTÌ° R F¾:K ¦@BJ ø0í _[O ÿA áãD áŸ ++ —'ò¹ ++¢ZJ ++B8¿@( ¹6Äì¾¼(¼L GFL PpR…Z…{v^ à $ ++˜1 g ]è¸q¸?pšåèÿÿêñ:4p$óˆ„ËPŒ ãóÌìç+ì oa‹0šåÎÇ5òrB\ 0 ÎÞ /300—åØKE"#OHñ0‡å ‡å ‡å ‡å ÃD ‡åÚŽ U5’_7DÿÕÐàà^á} d, Ï6Ò Ó•"n ò2BN 1  ÎÞb&pÕ " ++@û ++‰ 1àž‰  ++ãÊðžå àå^㨠++0Žâ 0€å0åàÞçA á6Tã 0BTã;,, ²9""þIAwsåà ã ¦:Pà ãõ'xo  ã. .ýCËšåTãòµ  sIÅ!¥ Là ++/Íóá á®0 á@ÃããS .B@/-@<D ãß] Ñ ýyˆ¡Ãã0„á¸S@ áØe ? X.UXÈq בÂ0à á© Æ@Ñ@C@šå­¼fãY®$Pá6¼#¨x/¥¨C/ý¨'/9¨+/y¨ , ++°¯ØÞã›|Pãd¬/Rh_ Tã0/)˜± ++¤TãËþÿܯü *EÌâ'™,ïœ- ž‘¨„ Ï ++T .ÍË ++¼ *44 54¤î ØH.}4¨ <)¤D ? ”@O| ãx.ExÌQ¹ÿÿ ++SHH_>ÿÿ ++A˜.Í”OÒþÿê#@+ @>  áD ++ÆhoÎÿÿ ++–þ/(þŒ7 ° /×ý”*a ”“ÅýÿêˆTã  <’ àžåŒ^ã1>ãpx _ ãøÕt_æÿÿêŒtˆt4.I ++t‹#d\ ¥\/ìÿÔ8/ðšd/1 de4H>ýÿê@ [ ++ã@ ?žåLÉdd€ àžåànâ€Dýÿ1% ž(D žå"! Spžåµä *I €öN@Ñïüÿê°²"ÎÊèì§3ZÜBjA0b’@chezìAè8’PÂæÐ*bxBd†#ü ‰Ÿ ºNPP.r ++N`Ãt¢N >í¬&‘ÄÂæÊ@ÄÞÞè˜õ RT LÚÂØU!ÊÈà ’Âüæ@PüÂR( ++bg²N0… óFÂÜòÒfØÊ ++è aÜè  ++aÌÄ  Þ ++ ô ++ÒfÞæð è QÂl`C ++è R ++Âl D è ,M , "aæd$ &‚ ++(‚ **¡,* .Ö ++0Ö 2* ++4* 6õ8 :Ö âÜž<Ö ¡>ÐÂäÚfdÐF@ècBààÆ CDèÓ L bÂææìšP 2êÜ"ðÎÜÒôÊÈ@ÚÂÆÐÒÜÊ@¹"  Tå H @ hÒÜÐiÂèÒÄØÊ9ò"*" " H$r(¤,HËZš/FìÊäæú#0…^….9@ü€#hu4 hÐÊÂÈÊäõY0à%ÚNhBV %ÐK1dKGŠåO\O*7 3 ¤àï YÎãw @.Û w  8KPW 4@šåŒqà€á{ T×'`+8ü7 ¨XÆ/@ ,^ @w <¥<­<"à\LKX("àT¬”Lb°^ãÊ÷»¤©¤¿è\èID3D$‚âì_@Šåðì=("ð"ôÔä3h|`+!``Â<Î i& 9(D­D¤´4Ô; ¯ë_ ãÀè.èÈ„.U„"öˆ X™Dÿ0žå T pžåt#ð [dõM4*)4@6ÿÿêpS¨^ã<8?è"lô"^âjDèÈX.ñà8 $8ÄÏ // ±ˆN¼ å4T#@¾þÿêxq¨´#P*5PH}H&Èè0ÉL³  *TÐ1à„Là_”àà y\ÒGôÄ .µÄÞÄí8€½0G| +- x| (K4.¹ýc ªýÿêxZú Ð ¬ ubVà.ˆ.X.P.”rVpZf ++LX Ë 7,H$êÜßj€ z vjVˆX¹0 —@ 4 &‡ ++0(ÞÜŒ ++f IzVZ 0H.¹!AZÐÂæÂ!PZàÞæÒ.7#588!²) %%B~>.ùXXªVBN8`*(^`d$G`X# ++V~,ÝC#òVŽ*%rº$ ++‹AQ`8'Â] -`)ªNHH!+b¿"%2æÒèv/ #h,*-z‰°@R0ZX/VÈ%B1ªN‚B( :%"qÄÒÜÂäò@#@ê% X !aJ\H ñ ú^P¨ ++ìÒæÒè8B\ ®äʉB!8e(ÀŸ `V:Ú^Ê A¼,D"AÒØÊȽ#Z¨ ~Ê*f  ° #$¢ðq4†%u/ á¹|.q¹|(P S ^ã^à ++jK ++N!oñ à Òå á “Á2S‚â ƒåè(0Òçô ++˜Ú80Ö8£$P ++àŽâÄ«$l @«XeS!@šc¤¨ <  ++ ¨ ¨", ðõð¢òC@ ãÅLZ& .=Ì.zÿAGsŠ Sš`“Pb B˜s™hdXâfo94f ]’f ++ Y%± h"HÚÂÖÊZè?ñ á‡.0 ìì3 á¸ ++6| „  Û2~ €+‘Ošåâ,P ŠhŽCQBrKB- Ã@KHÕ áp á°šåÀšWK³2’3G ++" 0‹¯ Šå°ŠåÀ“,+™; 0ß*D šåŒ œg ++Q"@#,ÿ„å „å À„å°„å0„åp„å˜YïÛ ´ç /E¬µ¬7ó/®ÿÿêŠn àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`Pv 0‚l3õ  ++ ++jÌØÈšÜÂÚÊ lHEï5ð ++ ++jœ ++ÌØÂÎæ l" Ï(a lÞàÊäÂÜÈ%"%"HêYðl* Ln Bp6 Ä&°5=I ÁŠiD .u5ç/<`jX ++±'Ê Cp6*2Hî6Z!ÿäXJrhBt  ++˜ ÇìoCK2Dp áK2Pg *qw" K2ñ$#\0ñ$&3Sát` ++ ++àC ŠåL9—å —¯ ? pŠ˜0ƒ. @ pšåœãœp¥œœŽ”[F¼.-¼é„„m@10±@ ++8,! .mA¿3o1=OúÿÿD D ++D´%´8 NÔÜÜ_—åÜÜ/Üá?T<<\?—=, ++z p#º' ó-t@‚ØÒÄäÂäò^äèZÒÜÌÞ0ÌÌpläèÚnÊÌÚìðÆìäÚÐnè`ÄZfPv„x41óÊb`ìònèÆÒlÄâôlàÚÜðÎìØâ1³(³981“0zp0€¥3|;$ §v~êÒȦ@€Ñ AÄØÊ~"—Gx'<à0Fjzq&|h&~cD€ ˆÒÜìÞÖ-¥Ž¥ô8”˜ÊðàÂÜÈ0ÌÎònìdîäìÔ`æÞhäÞpÖìÐâÞƒò–ÜÂÜÞàÂææZÎ÷0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjEC ;0£r’èÂδœJ:¡2)’-”Éó ˆ˜˜æäÆ$ÆôæÂbÌÆÌôÈÊÐhrfÜÀ'–R*O˜Oõ¨žàäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZdä ª31[š$œq ++ÂäÒèòžxAp$H71 àäzcÂÆÖÊÜÈÇñt` @êÜÊðàÊÆèÊÈ@ìÂØêhŠ/†@ÌäÞÚ@üÂÕK! ++P¬hM1r ++@f @Pi:  q 1¢.† H1äÞÚåw ¤  ( $¶ žý:O•¶ †%;u%;% žg.g.j,ÕÅ Í Í ¹ ͹ Ü) ý7©0ƒ.* p);*ø U8­™7u1*S6^ã©;"àP9p± m¹D_@ áÖa9œ-8  ’ qn ¡8 ° }|-kÿ6dœ a(*¢zC0BrŸ0 ÷"D(cˆŠ¤: *¤0¢ -6O ¤-6R ¦0Îdªd%eÿÿ•Z¦¨e¨e¨eªe_ª0¦eªe_¬4äÊg ++°g'iÿÿ—Z¬®i®i®i°i_°0¬i°i!²My x W:fÏU¨9DžåO <;-4%à’E)°Så ¦B#r·A áÊB—N'êoN$ü8o Šå0,mÁ0qšå0šå±óæ+­æCšåšP;Lœÿÿ ++4ð b ++ÄÊìÂظBÀÍ>6È 2dD ––æ>,†å/ `” %å.:|ä"+ÙépxÏiö’B´ ðÆ ÖæäÆlwjH:Dl*ùGA6Žã 2…4` ã.`ÞÊ<·? ~ A\"Ú„–|æBöÑD ·V/ý0/1‚… é\ >ñ\!@€wCÀ=pžê(*3C’ Îe`}Ý~` 8G½BR8¶=C7C@´{#„•µ@"èÞàZØÊìʇx2´ ++ ¯\#Ò`DX²(¾]QÈ ÈÞ&0€‚(0×(¸~fG,"d€#0I=p/*ü‚Ï)"l€t æ1æÀø†ŒØw/ŒåOH°,l‹åÀ‹åˆÕôƒ&€@À†åf Èú&@46 PpÖ::PnH/ÉH”p~aº*H¶EÐ!¡E^P°B¸ÇBâF†AN@žÔ_vFuvFèÿTr¶P÷¸Zxº %P¤WC 3":µ"+Q 1àž¸³¤ù ++è&HX-€/?6ËìM4/è4_„Tã¾4Ì4€ˆ"P¼Tã¯<+=@/‡Ã; ~¬#ë=€à‘âWj¬-(ß;Hé\¸  ++83šåÚ0/ˆs?x#³é ÚF-ä!Yw?•z@+j !àš`*hÃ:äáˆT& Ð ¾]äÌ-\=³>P%´¬´}•X!Z/ÍX ++€.¼D^@^á{^t ú ++T"‘|÷; P8v^P  ã†O @à`.,  Sàžå ¤"? ž™.Eˆ-"¨ [Í#p; Œ/CTã3$:!T/@%$4OåXÁÁx(/DÁ×Á<š<Ì/ePì à P ½”Ôµü,vK€2@˜'.XÜP#<@»B.Ex@"…þœ+—þ””™” 1(Õ<[³> D*!LbÜŒ .aŒ(<< <Ù<Oðýÿêå * 8ÆØ..¿ýP 4l¢X)"ÿ,ƒrºH¼ã`¶X ʺ¿95üÂ@ÊÌÍ;·9p‰)“ Úº`.H§QT ++"ÈÊÙk#ÞäVX+„Bº$žZPèäÂÜæÕ\äO.È“ ++B •)’! ++XþbØ«8§X£Âjºxâº(J ++é.Q’ºX f"ºH[. ]iJº@ç-RdX!Z,t*@ YH%:ºß‚phHÝXràäÞèÊÆèù-& ++(YBª¾YÔ  3ÊÀOr(²(FB°P ²°PÒ]Õ!!ò4Qb9Â0Êk!4+Î¥¥ÿ´ ÄŸÌŸãÈ‘P'°™>YxO.pŠo5!D¡¡(™Î™²? àÉ<½<"./ro?P n V4 A4ŠoùPx’JS¶ºb2È0 9šÈF3XÊÅ,¾ÌÊÊ ÊÎÎ=Hè?3*` P…ö6~<PzPk‚8Ê,® –] PRÕ@à†âç£s’[&à ãz ï™{‹§   .R;éª]U@ éHê;?šåC†åƒ {£*s ê™J/áãà§9 Â8†H(P&¢W*UZäÞÞè3ðÐ0PØæÒÚà} òÒæàØÂò ÆÎÞæ`ÆrêÌÒbäâZÊèp'›ÚÒÌÚè .ÌÈ ++('ÿ'¶ÔìÂäÒÂÜè}&BÖ8Y6ÒìÊ(JÒI ›S(ÔK)Ö@Ø@‘ ü ¹,åcLÜJï/ ãæ“'Úd)0xÜx ++xæU\@Þ LZ\jD¤D HÈÞÌÚ„1(ð ++cÊðÒæèæð8PXBæ*pÈ@’@ìˆìw<hU Þ ,…¶5>6–Å@‹"H‹‘/ @?§+;«‘qQ $"-¡T ++«]å0Ä&`‚<…K½Tÿ©G švܺ6̾±«| IOpšåx$q$Q"Â$ àÂ^ ¢#à–@ÐBâÖ¦¨n æîÂà;N8lÕE™6™A n¿/@Š*+±¥ãLÛñq18 =8 »´UŠà4!‘àXzâ ++˜²â9’âü @XBäl ðÓ7˜.]`â ++ ++BãfU ++GËy¥Dß¼"Y`Ò<Ë<3ÒI Ä2`4ä@2`ä ++ðH~ÈòÜÂÚÒÆZîÒÜÈXjô<¶W' ++(I ªæ2@ A0% W ++' ++8¢IO Jè¬"í î#€ÿÿºìÿãê)ˆ¿Jÿ?’0ë më(©ëCü6;>¥Æàê ¥† äÊÂØ&EP ++ ++jM:E‚?ÆÎÆZÆÞêÜè,EP S*eÎÆZVQ>!þAXQ>aú ++˜¡ Æ8ü Füæh;Œ qÜ@ÊðÂÆèãlpÎÊäþ˜ "@6? @6@j@þ”HLT ˜ „ ØgCgCÌp`xjrHƒ2r¹†'ð ‰PD FôC 2@’#wé ++¥ z8Ù9 4§Óy=ß0D ÏB‡,p Ómg¬ME€]à J† ++m+“QÕ4$ÔM*pÕÕ©,ÈyO ++0ƒÊ…:¡î ¾ /™ü£EJœ ++0ª-H0# ++ ‚‹ =? .  ++'4*]\"oJ ++(¼39Ý:;# ;>×7 ´ "  ! !ÿ## "3$!1   ++# ++>$ ++7&"ìBÌ>8  @ÒDà á“J/¼q" QQá)ql ã“K´‹n|@0â£JcMP 0‚â£Ã/ÅJ¤8Ûd‚ ++àc&„?, 4Ç y*¦3(† ++p s#s>(Í7*(W¸vyKyÀ*‚,]*7.m ++ #Y>.É;0$:ø ++2Ø û ++Úÿ#0Ú0Ú2Ú64# å ++ è ++#>4:6&òë ++8!î ++‘ÿ#668: ++ñ ++ ô ++#>:< ÷ ++ú ++NÀ<<ZK 2àäÒÛ ++™T o¨ 9#"ì]qÛ ++è™ZZ±}¤"Ф"Á%-K<}òp*£pI/’pIpIpIO‡€.ý‹;Ó‹;" *#/X– U– N!]-•-0@Bšå0¡D \e" 8]10š¨' ÅKŠ`Tãªv{«`Sã}Ú ðjààãà^àgj¯9«?lN(0PàL$}*á.*Aá./0Õ.KÕ. Õ.x.ÍKµ/x. //t¬^MïŠ0@Nšå0”CD¼Ë<LB¸"׸"“¸"½¸"¸&|¸/y¸"`¸/^¸.S¸0Ix.… =¸xÅÃl¸/tÀC+×n0@Ošå0¸Åj|IŸ¸"é¸"¥¸"ϸ"¡¸&Ž¸/‹¸"r¸/p¸/e¸³> ¸ ¸x=K=¸x+}x÷p,Ç*½t¸ O0Šå$D’$S$ Jâ ¸"û¸"·¸"á¸"³¸& ¸/¸"„¸/‚¸/w¸_ àŠå$¸ ¸x*õx¸?!+5x<@tjøut¸" @á08Q+:  ”Ç@à†â$wD0HB†âà8H“à†å à†â#ˆÍó ++'à†å(à†â+à†å/@†å0à†â3à†å7l;l=& l* ÿ ˜_ # ++Î0€‚ÿÿê áx ÷ +¡ là8š-ŒáLPÀž;@ôL^í ì¾ ”!”`.‰ ++”Y<Øôkj! ã@ø [å ++pDË#Q¾ÿÿ ++ ½,X/= X n¨ÿÿ ++ïþÄ"”þ/@\J+¡ $à8&}þ¬Lg^í ¤/cþL_.‰ L/kþ @0D.å DD#BX/= X Ä"¦ý/@i+¡ Üà8&ýd ++L\ ++.í \ ++/uý ++_.‰ ++/}ý @0D.åDD&-ýX/=X Ä"¸ü/@ÊP+¡” à8&¡üL.í/‡ü¼ _.‰¼ /ü @0D.åDD&?üX/=X "%ü1Ê0 .‰ ?áûÿPÍDÐ7H¸+ @10 á¼0¼dY*Q°P  ++ÀÆ ð  ¯ ¬ “ ‘ /†¼[ì/EÓM0/…0++Å$0 . ˜ÀØ ¸Ô Á ¾ ¥ £ ˜t`/ý0' \+=x@4 à .Ã{8h]Á@€@*@€ëK8*AD €sK ,ü€8Á€ °© ++P/aÿŒ/-Œ/JÿŒ.yp/0ÿŒs./8ÿŒ3/qŒ/èþŒ/ɌΌ sŒ /@@+-¬à³O\Œ 0x .y(/Bþo”.ÐJŒ @0D.qDDúŒ XÉX àŒ äa »¡b$¨*yd0üÉ/)ùQ=.ÅQ="ùQ=.ùQ=r ²>±U¨(ªODX£‰0F¿,ZÓmeæÊÆÞÜÈ6AH ñ ˆ¹×)  ++ µ,PB@ðElZäÂÈÒð&FÐ&FP&F/?%F ׌ˆp6î‰pGàÆ~p7ÆÆpp1ÆÒ: ++ožíoB¤³æJF#@IGp üÈ¡ , ±, GQPB(a ürXN`,[ Á,4Í,ØF’J ZüÈ\2K‹$D6. F‡?Hz€¨?;J››‡4›‡$ : ô" @@@@LûH3 @*±üÒÞÜ(N àØêäÂØOòOu*uJŠp7ZêàÖsz ò^ÒÊæu Nßõ ütà  ++·P*Jp :@ÊØÂà&¢1Æàê 1"X@«rá¡ - ä/ÜÎMþä6ršK0 : X“0ž3`lû0` (!Ê$$M[ ++f!6üX× H ~ b+ bbR _Jdš¶Cf0È ZÅ>ÿÐ/ˆ "/Í % ú7ûÁ R§ÚïË8` ŠD ++ ++ 5ftο–씶GðÜêÚ5~•2h ++‚–6+ h ++:^º2Z¹eí" Át• ‚º ½äzWïåí9ïÎÕ Ç’V¨¢B€ (ŠW^ K /A©ö0ƒåýŒîºW/¾^!¾^ „¾^XQ‚å ‚ŒSà‚åÊ^G«è Ê9 2·‰­:B¶¢¨:Xxl XÅ\$¨.Y Ãy1à€@à€åj·„ðÈQ Å\ÄÜÀ ++Àj¿ØÀ4€,€½P  çXPYL…ô•„ìÑìÔÍy]PÂÊjÐD2pTÐÂÜÈØ mXºj$ ++H[]«TCbl¬TQ°Brt`?nn`ÿL%po`!pp`,rq`)rϨXB| î:®)®þ®Þ Š/€å_ ýëÚýÆ]!t¶* µ±Fôk0 áy±³Åó˜šUóX5T.9Tº”³hÂÚt`0 ++@jk2@—š÷ÁK!üÈv¶Fµ˜|a^žåD¾ðyDµ˜ ++ä‚AL ¬Sæp$PËYf ++v Æ IŠt[P`Bz½€öIˆÿÑÒù/mÚëVäÛ ä ++v ++ ð`'ö[ÔÆïŽ!Ž0’DH`äÒÞêæZG$ Í¢”0"äÂÒæÊZzÑ1ÄØÊ]xÓ˜],…$……A]A? —K*±ß Õ± ÊÒx  ++ûç>xâX_¬ØIz ++(>e,ïÌQÊðÆÊàê 8* ++0{e^`c| á`(~#!P/r€g°ñ' ++(â‚ ++(•eˆÊðÒÇ$({ p ÂÄÞä%0 PÒ¾A ++åË„ ð0 Eæà Fâà ‚„âà F„ ++ˆãÃ`PB†Y†(<èO¶ÝŸ¾ÂT ++eaì±^Ñ 4&Á>+zƽše)|€DE&àý›%à‘ü\Î ¯c Äàâ¼}>5Fú1ØÿÿÙÖ–à…PÂ…Ó 1¢ÛB↹ðБÿÿÿþð(SŽxzx xB"†èVxˆMèähâ¾/ˆiâ™HBŠ À E,ÒØŠáxjôæ S ¨¿p¨Œ©©Ú.©9Gy™Š%™<u™ D©<Œà£:ŽŸiŒ ++(@Ú&þ eþ¿þu2”X K’«OA– öï½`½Os ++Hha5 v‰/ ­–1ŽdÙ •C2 C2mC2C2QÑ*8µ¦@n Ošå ES™ÿÿê">ðd`ˆX€’P8r’Upƒ ++”¾w' .xbäÊèêäÜq ,#@9t%_š B<$üæ.'sË"Žä 0 !,ä™–˜  –¯lèmÛp ^M.qF2 ~<=,7#`Ö+h `XÌ%HÃ8 ++?¥C ++¢P–)`Ã⦠++ | J¨H`**PZÜêÚij§a/`  ++¥ P$ ã´G0  ã¥`šåð7"‚Â,;º–ج“+` se~$àžRè ++¢èVŒ ++E]£$‰ä9àžoX œ |8 ++ 5< ++ ÿ7‹¡)à—'5ÃÿÿN›bô^õ, ++¾`$•”ªP£Â”Ú ++®(¿ÂAäZÒæì¢ÒÊÈ~8 ++¨8ÝB5ª""ŒÂØ^ÆÞØÞÜ ÚèB5óB 1Âؾä1DFºÆÞÜæÊâêÊÜèúBªš *¶ñ º  ÊèÒèÊ@ L L (†ÐÊô@¦®"@¬® ˜BÔCHüt¶=Oüvüº:EüÂ(Ú ++ ++Ǭ£$YB¬ç÷óàZðw$€ < ¥Ú”æäwˆR ++®P\aèÐäÊÏw&@ yFè(Pó!jÎÊèàÒÈ#ñ#°ó!$ñå$Qá áNÕÞ^g/AÙåùœò!°Kz@è B0Î50aÆÊææZÒOå!²Gñ ¼:ñ[I² .˜ª5ZÒȽ ++ ++ÁOà@™åÁœç?JKØÊÊàÄ´áæèò;$´éòQ¶ ++„P¥2¸  pU‡Q‡f<W -/šÐ'q´  9DµD ++Êi Táì P/ oQþÄcVI”  ´Ý©‚Ï £6À ÅÀš|“5šøV(h6¼ÖbH~6ê5/8½C@¶ ZáyeÙ× ++LÄ5~¢¸ ++²T  ™ QÎäÊÊè¹ìݼ4-P ‘C#;¯,„(C‹.@/ .C‹û *¬ÅÏ <ºÇ:P–õ R†ÞàòäÒÎÐè@brphZd`d`@†ÒæÆÞ@¦òæèÊÚæX@’ÜÆ\Á?VüÂ5» bØ_:¼q HæÊÎEZÖÊò)DFÒÜÒè3$õŸq: HÂæZž0ÎÞÊexCÈ#81ŒZÄäÊÂÖŒ)£d ++ÈÊÄêÎaÀ$YE!ÞäÝta0¾‡kX&/Fm¾%@H ?@ÈÞ¾Îýý.Ï•¦°'Ùí+ûpó)ó)!ü/åíü/!DÖ3á*. O áè ¢Ñ À"C*0À ++ÈC*& ++02î3H4rM¯*H /±­j„2H¥u ] \€\.²2ÒÂØÞoZÖGg r&Rî"M-ÈÊo7'DI`Z&1®wÆ  ++ à 6ES•üü|&ȹ¨ £ "àç$<: ^U*/!à—ùªÕMÇ ++…TàKjþ[6‹@à4j&[/pbm+æWpé×áP²B+iÚ?‘¨×_è†@L¢V .ÑD »{D¸8ŸÃ.U/ s£lÓ˜3Ò"`Ê ZÚÞÜÞèÞÜÒÆÇ?5ÄO¦ðC Ì0VQ èÄVHüPò¥PR?ë•IÂÆç¨ 2 ^ tØ ! ¿$9X (<7w²<7 <7 711àÉùàåà—åàåà—åà Ì4 ¦® qÛÁùð ÇU+ xƒË1TãÚ¼T£_Ô Š±É)¸   Ó»Ì ¾®î—Þ?s@”º ŸkvvHÊf«x<‘ß[ñùŸx4Ðó Ç^+K\/M\ öÜ3ã*h0^Š³º ò?ÊŒœJ ã0›Ìl ÿY뢭@ Ì3šåö¢ß5T ™Ï[O@šåÓ\+â>œ/@1ÿÿoŽâŒÙLAë‰È‹[/ YQƒrx70-* !ºd‰ ìd "ÇG ô! š`-a}C_X R|Ê6¡ºìhÃ^ .9`d8 ¤¼"¯|À tœ_¿ˆÜ/ÜÎ*µ‚¤¤H]HAÍÿÿ ++™/gO t Ñtp€i“PBh/ï8÷}lõï‘0pp p p´ø° ¨O‚âö(!À ý¸¾0Q·ÿÿê~D>hÎ  5ˆŠ4*J¢¸Aø.2¤<Ú! PBPã“z1àžå ++\¢ú@‘âøá ++„PE› ðƒzÑí"ÖP0LSdõLBà<@+5@L@u@E4H"WNâÇl 'e ÉTˆ@ìÿÿ ++LL#…\’^〪5B"àü$°Ž¶*l@¼‡iu é z½ÇO"@f¶ QC#wN óNÏO• !8Bà·id$$„  ¿R{J˜@.Í»M X«O«q £O;P8Ü @Q@€‘@€Ñ€ ÿN ÿN|I8RY…t$½tä.õh h,5옡" | ¡ìÐðì8©8$.áìš@!ïO œ*l @/a¸#/™P#Т¸ £Uè„ÔÊç èȨOPàÆ/¶8Ø.­T Êç Ì¢¼0H.5 `üqü,t.© üÿméz¹ü²º.1 ++n¼ü,¾¾t, ++ï[u@âjÁJ<–º * ÔÜ$̇BÀ óT $…»z+PéïkÃUÕP/ÒýPŒPã?x ++!ŽâØ0à ãz$\ € ++ ,I  2šåŸl〠*… €o@Šåøü ;lñloäÿÿ ++Ôü(*- <¿ùø.¸üø±Ê‚ ++ÚHÂs²ÝVæˆ$2fåUâg=&àè´ä ÚÞÈêØÞXï»b)0à$§&ÄÚ/Ì6@"°ž3ÒþvZÜÞèÒÌòc0Ð&Î%BÞØÊZE^\Çf 0¶Ng@UœbS:Îœb º œbOÒÜèÞ---C\\\FЊÔ"ÌØêæÐ""*$³<pçÓ(Þ2HÆØÊÂäZæ½ñØÒÜÊæZÆÂÆÐÊX‚ÎxúDbà0HÀÊ0äÊæe1Z)³SæXj”ÒìVБ ÈÞÜʺ0À,ÚÀpÔXÂ8¨ª>W•8ÖÂÈÈ!pî42Ö 4 ++(BOhYì'@\˜ì'ÎÆì~È/`æ ^ÆÂÜÝ!ó@îÐÊÜ@ÚêØèÒàØÊ@åR@ÂäÊ@øú2†+Y5rÎãQ€ ++èòbÌJZd2æ–2kê"ÊÜ% “I°Ie ++Ø ÀG&X€ˆ&8&ßCƒì   Ôd:ò®+"(\U" " """ÿå å#0åà—å'.) N1ئLVµâ ¾®LQè>ÈŠBÜ ?**Û#SÒ*Ã*­*"Ÿš'*Dž*™æÖÆnö@G Ã"àŠ#ë,넨4þ=/Iþ3.‘þþ$/Ýþdþ‰{þþÄÌÊì8}8$/µþ'Ä*þÄ*¸/mP#Ä*þÌ* èþþLØ/þ'„:8ÌþH FþLt/}þ69+½"üþH. ¿[þþ¿[\ÙÔþYØ/Y ++þ;/© ++þ’ñ„r‘âïjþ< ++>Žâò/’ !Fò/ \À +++a È ++¶3(¶Â0Æ0Tà³,X¹X1àŽXXPžàý´ð Ä+ ( T/ÐýD/U ¹àôWôTôX­Xô1ôCžà.„þØÊ$qPáòüÿ²$¡^âìüÿzO)ã\ +5 0@ áÜj¼Œ È+u ÈWQ# ++Ê1‰J» .½ ¬À^øù .Dôù&˜ÿˆ’ *EŒÝibˆŠhˆ9H”*É”J /ÿn#ln/Cü˜q<.n'n•æ‚ ++Úh]è#àþS âÜÑ b þ --þ >"ÊëãÞX*Üx¢@SàX ¶/‚xùܶ‚¨Y'€<6âÃkä f¥5!)ØL,›üm,ƒ, ++ ?æïY=úÜ︘ ++è ++êÈÿÿa2ì8Tø ®ÒÜìÂØÒÈ@ÚÒÜÒÚêÚ@èÂäÎÊèdküæ@ÌÞäÂÜÈ@ÚÂð3fl@dld/Âðdí`” "0[*[ }!P9ØHpðˆP&7PB\^± ±X±±±«€—D࣠!D(|H¸Ò1 $Ñ4UÌÒäʾø4 Ú4î;Ù<;>î;3($…±ZäÊÜÈÊôìÞêæQ/ð#X—)y2!„(†i ‚† Fj%ß(ØgaZiðù9NŒ&Hç&פ»©)`ŠSž10Ž¸5?Ž ++% ++%y`@Ùw&Š%,@€Y@¸‘81 à”\??U¥0Žâ 0„å ”d ++0Žç`ñØÔã</-Ô#.eÌÄ??pšüVš‹s¬8W Ñl¸·U^_._AP:p4ªBØF`p%¡BA ++­y­y eÉuà.©àÛE; Ißðw—Ä„Äzô ]Þj#€ ,ZË-‚` J`  G€ª $ ý=:ý`ýýTtùCTt#FU¹0B  ðV·V®- ŸV(/@Ç"$!×  <4,à Ÿ!ƒ-Ò.)s/³(DmDD±DÌ!0ŽC# ¾ì»l .ç&) 8 88K(8¾6ÞÊ;'á&LRÜKéú‚ Ìl & ¡Xj0"#ò ½pXz ++€¸  L ÚdPhB  ‚.¥ &x!E|$"põ ­€%¹PÚXÓXRŠA½€¡JŠ9ãÃ}!PÔWG´7° ++ w4SjFy€@"æêààäÇZŽV‡"F( ˆVXÊ"ÉhÔ! r"c4"H 5û%ÈÒºôå(R(6HäT8 º" ++¸êR hU2$ê™Å4 .URTKECÚ õ $Úì# ff`y–Ü`æL³ ! " q€ê ~f’H%¥(Œ®I½¹¶¹,Œy2 €ú )±Qú  §†. ++ ¢¢ × ++ 0ó ++ ›ÔˆÔæ ~ ++ n ++ ^ ++ N ++ @ ++ 2 ++ $ ++ 4 ++ ø?‚å¥$ç Õò ǹ«b›‹{ } e & Ñ& & ( Ñ(ý(ý* p* , ÿÿÿ#, , , , .O ý“DÕ ++ #@ ÁNm} gà‰ÿkH ˜.é˜$ ¢DÕ€# :N ++ Ä N ++åW€@.­ÆÐ` Q É_#à/àŠDdh„%ŒÁHˆª ++x&t&`àÑ `ä /Ñäälø& 0Ñä>ä:ä(¤u`ä µÐÑ„H@.õLÊ€€ìð D€€@ul¦€ €ßDèä ì¨ùD ä"°ä/¬ä ä¤Y|Ñ ä\Ü™¼Ñ„ÁàÙ@šBbä?Pãä(¤*=dbàšå à$Ø"$àú1(àŠÕd5,àŠü/ l t¡ÿD‘$& .á™$/ô/!¬)#Y8‹ ÈÁà "ü W øÔ€^ãŸÿÿ ++JdË”/ àX. WPëÿÿ ++=öVàŠåÖþTLTd.Y DT¯LGàŠåˆTT 8.­ |T.aþ ++.ËýÒº.¬ýò"žýF .A ++Ø .xýŒuqýÿꘊy ++¹èB@  PþƒþzXkþ(_A< þ¨ ++ €íHÂD1ü ~~FP, .†$& xqŠB`½gZØÊÜÎè!94>5ìÊØò ý >Xò@0BXz@ ++, :ÛŸ Dc¢à,U,M¦0>BN¢ÿÿ(eÅ->‡N‡N‡N‡ÁhP  ++ø‡8Â'§‡A w³•8k Ÿ¡:Ù<øè"0Þ‹q0—å0Š(Z0x‘9—E?. §#Hê8[ à L?êpM €¦lñ_pšåÈ;ð’>  \ü€¶ü€PüÂüRüºüt¶üv@ÒÜ@üºÂt‘~üº Þp9SP9h7;x²R@F1é$@P"ÓßATã-¢7Tã') ++ GK/uD'±<á”­ýᦴ—á)í ++U<e<tt ¼“"&à t´“»:$98¬74¬7 `/™5G'ÕÔ$/ ˜€œ M@Ñ_ZÐSÚ*ضØ"§ËëSì–*S1àžP^ã‘ ++Sº%¤u{Qa<t™tä%/å#/äK/}ä'/¹Ô#/ñä+.1ä ++sü†/ÔJ|Cÿÿên¢JXzTi(Xz/œ/JâTQ>0 ++þƒ–X”>TÀ/ ++# Â"ô*#qT8 ²úÇ° Œ|L °Œ,ÚŒ ++ˆ/∠/Šˆ!z©*ÈÊÌÂêØèZÜ„ ÎD4½‡%J»U`Z9K ++$…,K¾/Z,K!†αvD`p‹,h 'æ¶# ++ܹ²}! ++à0™ùW. AJhf& Oã§-é›Ê+Ì&'¢eE1à™±F½*]~a1 @”{¿©¿Ùf`ÒÿÿêÒ>h^ ¸¬ p ++ h: 1MŠ¸¸  Q2“$ £.#`…JaJ<` KK G1 ?@†å,¾÷¯0êO)Áà˜P‘L¾ðX\ øò2¯ƒ?É·?q?è0rÕU )Cú\ÙrPäÊÚà÷! ++°tÀšJš=Ì@±W£)Sê`g3h:ZKBj`LêJ1dü±2  /‹*-4ŠúsM0¡O’å™3F#ƒƒÖ?žå³@³@ ~G²B†å 0K•3? ++ I3é³@ ®™3ŽÃø ¥T Eˆø å@x/7ŽÃê.ê-4ß(Ò ++f˜BhÀÿUô)!ôÀ,hÀ)hšPBj C"// (Ä¥<<A á< O.´H ¸g ]ŒI  üš x€H½.Ñ×+ ¬#­àpà(+žC +/+ ¤ ó* £ÐÌ^6Tã7ŒKH/ÝÔJ/UÔJ/X/=¨'y<« |—Á¶ÕCàžå „|Ñå¨ë# š ÐK.5dÈD/y<#³)<e5 44`/à hÀ "èE%à6 BC(Í`} Ü×0Í /t*Q< Brøj Œ/¡Y0<Q”å&^g*Žà”å 0žåPá?/0€™÷*%„€¢j/@ŠÐqL¿3`à”å.á– ÎãS*ÄdPã3ÚÓ'".˜{ ¼€ d'0/ð  O /U@Œ.¡,1 àžÈ 0 ŽâW31 ƒ_3= “ÐÞà / ++Ä* Ä6ËD ãì@ U(€à#4šsꉂP €@::ðô `Šå&Tãªë÷@€Xâ#aà á @žžOpå¨ .ý Œ,?pšå$ *= ++$„4  .u ++xo¿¨œŽ<ž= S/ñ ++Ô '@/1 ŒR#/i ð'/¥ p#€/é ø+*) @úlÐ .u  Ùü’1ã¬2â?[$y¿L{L/@ŠÐõ€g¼@3㣻0OcºQ#\Qà€"\ le#(LHVTVp´.å TVü/%ô#/]ô'/™ô//Ýô+/ø#/Uø'/‘< ‡0@Я/ÙäP®ÿÿ ++IÀ00šå§^@0ƒâ%% Y%ÍŒÑ<Îì *uä.¢ü”.iü[¾oLp*å.ÑûH.ÊûE .4p$Õƒ+ÒÜÔƒ2  [qbjÛ¦¸Ãà”øÏ2 ¨p‚BlEo® Ì“EàÄ“EDlâÎäM$87mª#|@?pB-â% ++1€H  à&0‡=qP t@8 ²I°ˆC :C§ø%HC€YÆŠ€BLH‹÷J슔$ ++Ð(€0…À Yøq( TPã ++Tš€a= )¡HB€8)’ 8&'+å ++8~0P ò¨·¶cÒ@@èÞ@ƒ @æ 6PÒÌã RÇù!@æ9¾ 9 !ÆZ !pÊ@@Þä@ÊA· Þ@òÒ%Š@ÎÊäXÈ0ÂÒÜ¥ƒYÊääÞä“B/â@;ÈÒæÆÂäÈ<æ/-zæ/7 ? z,2æÊØ¥s!–/Næ>0xÜ|K?=[æ\Šn8æo)æp"1jb H+`¨ÌØëu4ÎÊäk`ª LœÞ@æÂìÊÈWV‚9!@` 7R`3B!7âÜ4 \~/9bî-;Jî#L’æ¡ÆÞÚÚÂÜÈ\@@ÿ~tÞ^áæX/=RX ?:‰fXB(8™,´bCš¥,¼3C¼ Û¥á (H¼P$œÞèЈ"èÞ ¨\âŠõAU1(HLC 6ÝÑ,Œ;2c/&H ‚ >c1Ev<ç@ßQç@`-0‚Ö à#K|) æ'ÖÈɺ Àϵv/âc4@Ø ÞŸú AÆ>^dD.v * ++ú‰^šõ3 X›™Í#èÞ‰ÿEâêÊæŸy4©Ž%5 ©3Ž+Žžg11 áy ®}…ÍdÕ©λ¦?”.$w( ”¬ ++ï…›wä”Âï w0àÊÜ’Mvô~Dw²Ž ++ '( 1 ¡d?l¢5?O’ ˆ`®@ø…;i;ì ++CbÈÆcê’[%”²7—¼7Å”¼7CpÒ"+( O¡ jBCPãrBÅ‚ÀŸ1èÑ! ++N@‡8˜HÆZ+’–ö\$„ç×2Ø3’åDâ«ì> ’, L‰L È^@^㺠^㪠++ ^4p ++^ãŒâÿO#@ ++^.vA ++^Ú~ k' Ç-ÛTL à’å\+ÐK(M^ ‹3÷ÕÑ,d w3 w"{ Iš|H /‘÷ P®’fò i¼ ¼0À408l< LD ’ ++ÊïÁ*–¨ zÒÜÆÞæ¤(2ÞÌ@úï/'@ÒÑ£P QÊðèÞ‚(˜ãr ÛÅãB@ b TÊÈ@üä_Ç 5ÒÜÎT0 [9ƒD`ö ×D!–‡ W 4œÞÜðî@ý‚¼ ª5ažH½R :–# ÄX @ü~\@@¦ÞÚ”  B@ØÞæá?H F&ÂäÎêÚÊÜèÊ? H BÂèèÊÚàè¥ÂààØò@ÜÞÜZI)P)qH 2ìÂäÒà%ütœBÄÞêÜñü0Ný?Åš†˜@™å%ì™å0 Ú­äÁLÛö„†­ä"Z( ïqJšš$äA ++ ì µ¼ù /Rÿä~…A `”1@ÞÆí¿ È@4@ÜÞÙ†@ÈÊÌÒÜÊÈd{`œ.T „Œ!™ ÅœUAHæòÚÄÞضÊõ9 Ó&¾FÞF$$Ó$ æ6 *}dÁ4 «i±4"Fÿ®¢/ Ø4à:hR ê R@Šåÿr͆.9¯cøzöñþÿê6¢ž(HÎÊÜæòÚZ|àäÊèèòZÜÂZË$|JLŒ Êð1挞M |éEÀ '~ß(Rõû#bpÎãà 0 ÎãQÀor [+É3Sá'Ù ++W+ñ°à°›åÀ€àÀœå \áU€0ƒâàŽâð)L@„âì|"pŠ½_àŠå0Ôc+Å,dŸ|ZÍ šå°e"0ÇJtÚK2b4C¢ •˜Öpj   Ò¢x²´ ¤o ‹ð ++æòÚx~ ++—OåN¹„; ++à‘å"•&›áß #}2§ã@“åg7ð_Ã4 /Ñyóóö»!ÿ q âRK 1 ž¾€‘ Ø?âÕ* "0¶² «Ô ²Ã&P b ¨ÅqZÆÒx~¸Éu€¤,| ¦5* ++ ÎŸPb¢0 zµ X¬ øü+ùJ‘îè+ùJÉùJ0ªÃ^d0 ++ØÒĈP&Qã`»CSã\’E ++a “åà‘ô Ã0“åñ;I€:*‘å—0¶‚nF¬5ž¸¸ù¸10‡3Sã܇Ú×<ÄĤ õ-O±Q¨ ++€˜¾$S2ª¸Cú¬¯a¦ ‘C$¢ê#‹ ++´ Qƒ ++ƒ ++Xÿ⃠++@ƒ ++pèWa\”y”p”èp0ÁÄsU.ùÌÇÔ0p—åÉPævç ­/u­¨I v¡ÿÿêªô78&P Z½æø§1°(SV®ÕSq&Î2_ÕL‚µC{7/0ö‰Ñ¥fø Õ0 eD–RyÉm ++TÂ’)D þ` ++¤9ð ++à„å 0„å¼õˆ Ë„Ô/¥Ô¡EÞ5Êñ5XB_ ! ++hmxÐvb° ++(Ðí²òÄý(´" =¶(‡7Þ 0C'Ü@^¦›(8º 8ky&1ù¦XÚ¸ ++ cÈB¢ a0â.žú¼7ÞÜZrtX3´® ®7ºhX¸ËS¾Æwtà    'f'`‚ Xy íçCî??0?“?,?.05 ©í9ÔõÑeG x ÇÃÔ !ä{4 ++ܪ£6£Ï A0ÏÏŽ>1" ýG|x-è ”Å”¿"¶¸ÿÿê4 ++¼@dP¾ a‹¢ØÒÊÈ BÐ#÷DÈÞZ  ¾¿; à ·³M ¬˜@*ipð@KšÐ$ï@ëÓ{ â9虘¨^f4 ¸÷ ùxi XœG4Ó¸J›¢ 4L ô üë ô/@üëùO~Î{4LÀ ÀÅãÀÅã ”Øðì .Ýä—´ö§ È_h0¤E.9Ð$:´·64ªµðp ÒÀÊߌêÚÜèäÂÆÖƒìâƒì ƒì/?}ì ‘ÂÄÞÈòcì!Àcì{2>§äâót@@ÔÄÒ膮 )í%Êd¦@¦-?¤ 6ÂíaÈÜ"S9v!æ~*!êiÆÚA.2³q@ÂæèZÏ*:÷Ä÷0èðúhÖÆÔêæ„& ØbØhØ+?÷í ++ Úþ Øòíw ÆÞØÒÜÆÝ$7àÂÈÚ—àÂÈZÆÐÂäÔdÄÊÌÞäÍ9RÂÌèÊäB%ÝâJ%RÚÂäÎÒMR%:æZ@æÊÎêb+Æ+,+1|u8">ò7òa ),ÃgÎÊO¬ ÂÆÂ?V¸ :ȲÊ‘L , L•ª ,Æùò L L0 ++ØÌûý ›è›0›_¢ ++› 8ÚÏ4æêà–*º̺.•¼=@ ±À% h ÎâLèQÚ ‰t{Ì TüÂó ++üöüxüJüL@übtv@üæü|ü¼XüúüL°úÊr7Ð0_ Àz:Òþúô:Ô+?Ö Æ¨?Ø%&0ÚÚ _Ü <üæ ++êðS ++Ч4˜Ä8ÜêÅ%Òùp^¤£Ðü B Þž&¾P  m´Y"àèF°âlU ++¹ cBÐ ++› ¢K› 2À›©æ%\.0 v¤$?Ý/7Œ ++&±*í'Ÿ§.; 8¾BC/p°ýŒÉÓ »EAš$Hë€ÊâZÐÂæÐèý& °B|Xæœ-Tè&—x0èÒÚÒ/:%/ 6% &%¼þ]dH¬nê—  0 q¿v°_µ_ Z‘Õ†° –¯R »þ ¦« ËM'j kX^‹4¡F_X‹_VO4 ´° œ2d• ©FÖ¢qgÐ.@/b È— /@€{5ì#b …Ç(]F. ²I/õdKÄD^ª8ÚÌEìŠMÈ *’ŽŠ/y/"—lg›5­g‚"3^qƒ/iƒöB ï¢WæþÑxAŠd @Òà ãà†å 0†å 0¦W„ðgaM*ØN1”Îáû‘ÆsNj0„ŠQrûõ‚Qã/Õ%L\θ‡/áËÚ.IÚvÚoƒU¢ÑUZÆÊØØ?FH8ƒ|vPê3ñ:ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZd`jý $ Ýû7<;ÖûÅ ++ÆÂØØæ  E  D  T ++ Ìû„ê ªÀÀ$ ++(gNR‘r/ì•878kMªchö À„1, kÐl·/GãÙîc+ošhð hô*†R}'/nžd,¨(.©äBÈF= aà;Èúê&G˜ G(kz Y  d Øi X ++Ñd Èd L¹ ++°Á*8.;œv/L¦ì³\ ¬?,àOðô ùô ,/9ô dô bô (*™€ô %áô 8/-ô 3 úà )Áà öà %/Aà Ðà ·à ´à @ ++O¯d ‡ž>=@ .Y½¤èNýtd £èVè €ž/)€x ++è| ++è x ++å;x ++ Y« *èÜx ++o¢ÿÿêŽïœ@ ++ ++*©P<€( ++. ++Ž ++I88 ++1 ++†bÊ ++"7PÊÜèäÒò°:0Bš>` ÄêÒØȸò#Øèê:àð37‰#/>8aà /ÌkàØϵ"àÎ!¡/1 bâ (0A<ö2ò á0žå žå žåpÃ/(gAšp„åà„âšñ0„åà„âà„å „åà„âà„å„å à„â#à„å'p„ë/#+à7 ­éKS* pT8BÊ™61ì®Ü Z|ñ-"XY A‚U?H(d ,X rd @d €X ++XZ/UHBl_-ôÌ? ++H˜ 9T?H ++ ‚ _ª‚ ( N[S ++½K|jŽ!MTÍr"Hì  ² â¹> 8 $Ä ++TT-7×T⩉b1#'0îçðŒ*„$ÃTp€ ++õet"CsyŠ%/MXÖ#D ¼” ˆ .½œ Äšº3µÄ…q¼ í ŠB %( @£ = ":ìL) ++þA:ò5¬ êÏêÏ}«Èh šs)ùÜþFb}"Pm@ä ++GBÿ@n} ´4ïhô"4élo< ÈÀj<Zü° ''èb†T Pøh ¤po"g(ɪS&Wãˆ7qF^# àN6!àžåªóXÚ! ‘7Bðn°Ä æ_@°àIpê°j´1pŠ…9«,p ++¢ì•,,ö=@e«´ŠN`(X"ø°(W (­B029Œ ++ƒ¸o`“àj#@¿¤S šå$R‚/p™F]¬ôÄ'Äf# 0 O Šå0T"ܾH0S#0µ" 0 ,ùFKŠåd$´ ’$$$\0x ++›*„)&àj8 €þI †ân8à@†åà†âà†å0 “†â#à†å'†§FJâ²&²oA/`ÎJà íH `gB¸ @  kB@ .ií± ¤ ±Œ ^f±´/š^‚Àj¸ F„ø @9ú…úšx q2† ¨u bô+1 à“$âB äÝlBƒ]“å pš4Xø .1TPÇ´œ¡Ѷƒ U® LU®vdt,ÝD Ð+„ \h@pÆhùõ®€.…€/ þ>›# è"ÚýÓEp  q¯OšåÆÝ® ¿ýÿꂪBuÒx` ++àæØ Lòe$pŠå àå0å(0ŠE›==Ð]pI ,a‚žå°žå Àààœå ÀœåÀœå$`‹?p–åVãItPVáòq •mæBG/ ù Eÿ  õ  &© ++|/|¥ /à-o (üç Ùõà| “†VÇ$E à‡Ý? W•w ++¹¤/ À) j€ )½¤" À'G V ˜3Tb¬ ‰? S¬ ++ËQ/°‰ \@¹.½a0šå°š¥  IW œ_ }(0šå,šb8OLL¿?  É u)VÉOiT% ÉetLLKHLL/KH/I ­P!“r­^!0“’53H€ âRã5Y¡ ‘å âR¢.à19—ƒ Âzàá9èŠo»/0Š{QPLU)ƒJƒJ<‹ …þ ír·ƒ0zžp`æ ++yµ5Èø_ ++€Í¶:ÚÂØÌÞäÚÊÈ@I@ÖÒC£CòÀÕp8"/L»8š ¸²&X &¨Ÿp ˆ#:Yµ` ++¨ž¨‚˜ÿSWuä#çS àž"lÏ  d!Xd×v0 ++j,`UÐ ìÂ&œóÛ9ë¡Ú¡*µÓ ‹‹‹AH ³AH ‰åRÄ/-39"ànqÛ X‡Ï¢KV‡~1ãVh^ãRÚì 00ã;âT@0Pà9§}à;}äá00”’cj@ áç ©I@©I0©Ih. bâ—:<ÂÔL .•$ËX/@ü/ÕÛ:þÉŸ,½«R .)\ʯó°Rèÿÿ ++”èXX WÒÿÿ ++z¨Fr ++d5:Šl‰Ô /¡ˆÔ̤+kdrôN0ôNœ ÀaÕo{è™å àÖ_€å Ö û â3É¡Zp¿/ñ¡ZOpšå{LLR)Á|4Áª-ÿÿê0Ú‘Im"ì•IJöN;I LÕ‡CI² üìxüÂüvü|뇭DX² Øq8"nnn l€$ üìtpnSZ qt>3$%LP Ú !TJ ú($ ªP(8 ++õ ++î’(8Ò ++ ÂPQ,? à€yƒ ++yƒPÓ E@âÓ-yƒ#0yƒC“/ðšÌE ·xZb> ++Ð"¼8B 8ú2   Ò 0 !@!zë öpm#]ùÇb`@ÎãQ $ª¥ €5’‡X‡/ [;0[ \!R 7@`8#+ ; }.YlG ++ ++0/ %*G ]^Q&q ++y%(ÚÔD5R²&A#@p‘"&XÈI$ ++0%#± <0 $`B 1<B 7*0~¯Ò 6TCtÀ²* ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #sÒ,‰"ö†B (  L0Ÿåê ƒâàø à‚å,°™å Uás*°Kâ,°‰å ‹å(9 àƒø0žå`EâP…â,à™å^á^:0†åà ã à†å  á|0HM:Tà†å †å¤´`‚åã ++ ;  l œ'œœœ(/ðœ/ßœ/ÍØy>0 ã0Ž°Œ 0Žå>  ã¸³²:0 á ƒ¼Nƒå>(£(c  á‚(N‚å>(”(c á(Nå>p(…(c áp€( €å$$w$:p á(û‡å0‡å ‡å ‡å‡å8ðd:p†å 0†å †å†å †å(à ãœO0 á QÄ Ä(Ä@Ä­†å‚â`Ä.ÄÄ,‚å``)0†Ø00 ¦>@ ãðšå@1ÿ/á@HðÿÿêøP2ÿ/áÜ0,ʹ X¨°P;ÿ/á•p_7ÿ/á‚PtPe¤V^3ÿ/áG<ä+T @.ôþ.ãþ@/Òþ@½¬@›@ÿ…þÿêZB ++.ÈÊÌÂêØèZàäÞÚàèZÂÜÈZäÊÂÈ B @ $ \ó2Tã¡  á$à™åZá˜*€X⇠++ã ++àâ^ãà’åàâ^ãö^ã\ á Šå Šâ`¼òp–åàâàŠå@ ã ð–å¡Ó Jâ šåTãI|SœRãEºX XùXj@ŠåøT TT¢ M  ¬„p€Xâ  ++¬"K¼N7`´X­`@ á´¨õH¼ñàRâj  áÑÿÿê°0 ã\ ”Àd0ÿ/P<IT3 áÁ@D ã D</@Oµÿÿ ++$ˆÑDõ à”å^ã ++0Žâ 0„å ”( 0Žç`+1¤O á Ì<m<t¥t(á<ü@Šåàšå6^ãHðD@*9@¨4P€y@¨%¨ ++¨`Ù`4t+<0@šåDÄ<Q<Ò´l°L *•´OWÿÿê@.Í@*âþ4ì ´ð +A,´áÿÿ ++šþÿêD…D.hþ°a @ôbúÌØÒÜèÊÎÊä~XB$X(îÂÒèÊä×cæèäÒÜÎ ²( (z:ó h&ÆÞÜæÞØÊZÞêèàêèZàÞäèð8ÈÒæàØÂòX pB08RPB D0P ++ª "ÌØêæÐX¤ ò.$w+ÒÜvP :”†c (mðXB@BT8º¡@L8ó8B`8²  ++ >üæ@Òæ@ÜÞè@Â@ÜÞÜÜÊÎÂèÒìÊ@Zö ++HÞÞàæ`B(ôú`8" ++ B((BLPB0 ++ ++h ,‹bŸ@B € !ÞáTãà—å@žŠ–"$–^T^ã$a0Žâ ƒÒDÎ ++Ê þ ++&0‹î ++ ^ Ê ¾> ¢ø ++ ++B¬0  *iñàäÞÆÊÈêäÊ0<x<¡ † ¨ Š DN† "F† 5 ++>Pã: +qvN± @xé8n 8Ž>.9Ⱥî .³ÿ>5š3õ(àäÊèèòZàäÒÜèXz 3ïHŠïc`ÄUîäÒèÊÚ Ð¾Ðs |`/  Ÿ" ("l l _àâ2‹22X $2ø/áPÜÊîZÆÂÌÊ(OÃBV  =tääêàè9+m e ýY ++5!€å5pà€å à—åmýà—åà€åà—åà€Ñ [é¡p«ÁsOpšåÕ—¸ ’BT ØþTÛOA ++¬ 3t<0 áD% ++]å0pä ++,‚;‚;Q‚å‚?1à‚?Ìà‚åŠå ã00 OälÔÆw ++aô !pšì¬ö b ++ìÞÒȘB ¨4 æîÂàiŒ~EO6 ++„i¡àšåàžåžŽæ  ŒÞE@šåL@2å =»Œ´v…ŠHÔí Œ0 ++˜E"H„W’ ++s ¶XB0  ++7  ¤*m¤"d¤/U¤+X!žd°‚½°Æá@šåà á0šå0“n Ÿ“å àŠåXº BW bච`DðYP  áè ô .™0 ˆŽ*쀘/â'=<âà y<øÂ.µø|Æ /õB0-B$4i<=pšn#v*p*(jg:p ++j$/Y–T åN Ì Ì*5Ì16T†H/u^/¶^X/Õ¨'þ(@ [Tá“BŽÜæ^ ã0&Ð ++ $š/´ ‚ ž%à‚8,/al#.™ä/ž$á€$/D'U<P)pšh1ð—D+¸/¹P /& #.!h @Òô.Vÿ®E7T) ˆœ ÄJ D<@Qt/é ”* ++ôY8ú>šå ,/ ++˜­˜3˜F/ý ++H+/= \#/u \'/± 0*Ý 0Oçþÿê¤/ +/Y #/‘ '/Í *ù  flØ *1 d.Ùý|. ý|.’ýÌ/ƒýø/ ý *¹ À.œü`.•ü óâŠ@æèÂèÒæèÒÆæ `P"æÃæZÈÒÌÌÊäÊÜÆÊ3X ++0 ++PHB,@&3P 7PæêÚ4fŠå0êŸp ++šåÐÀ4" @à á`/àŠDÄ4 Dÿ šå0Žáã<0žà:j0ŠåœàXA áüœäî DhÜ„‰@/ @Ä_ðÉÄ,oô Ä'„M@$øî$)üî$"£$o¡j0œX/)œ_àŠå Dî Cg  Jâœlœ’ žàjj üXÅXü ¸D‚ $Cc$ Jâ ü ü„*I„ À€[|‰€ÄÄ[¼ÍDÄ$Äk< „|šå šå@8#/áä@*i@@Šå…ÿÿê@©@¶!N@€é@@Šåµþÿê8 *!8.þœ³zþÿê\Š?…ÎÆZÄòèÊæj~F%EäÊÂØ$‹õ"ÂÈÈZÈêäÂèÒÞÜ6 <5Æàê; #%"-$ŽUÆÞêÜè/$Ž3&% ++°&"3(" ­(r$*?œ**‚hÚÂÖÊZ/SXB,?H BZ,âCx.S‰  ÆØÊÂä* a ’0.¸6L00@0Q„å„n ôó°Ö‚B2 Ø Ìs¥ù'Å+4—å¿ $.e$ì°¢Bb8â2Œ L ++@PL°7  ÄäÊÂÖ|@ š´8 05!ö ê0àB6  P4Úƒñzñkñ(ù<Ý*¥Ýq19ÝíHD.1DmPàšåiàšåÍ] 8 8EÞÅå†Ñ–õŠ8äÊæÊèZÐÂÜÈØÊä^Òðò608Xz6 ++Ý' ++0ãH :6ãÚ@B<  ñ“#“ "!e!7"Ý7Ö75‚Ý3:Iz<ÿ JÈòÜÂÚÒÆZîÒÜÈ%:ð>ÊðÒè>(Ê(@ oæøBDéÿÿ(1F+$tZØÊÜÎèÐyDB5ìÊØõBõQD0FõDõDØ@`BH‚èôVôNž=ôa¢!X ++mÒ )žå‚f  Ø1šú¸ ++/ ¤ H ÊY.YY²î«î5ŠY±0 PèÒÚÊ@@E’H8 ++ã%ñX"H RB´@×IÊH3&yPJXÚ€8Ÿ ++‚&.Ú Â0X@x ++& ++R , ++(a(L ++£ä(âêÒ ñâ(L0N ++ÂÄÞäÂ(N0P Ü @X'ê† )B†¡RÒÜæàÊÆ/Ò@RX+" +r"7~+𠀨òàÊ@Ê@èÞ@š@õ @5ð@ÂÜÈ@ÆÞÜèÒÜêÊ@`ä@Þä@â3¼c@æÆÐÊÚ² Üa\P@ÜÊî@M%Òµ„@ÆêääÊÜèo† 'æ'ñ+@z#A ++.-’¡ /zùX/Ò0{ ++pL’ÜìÂØÒÕÚÚÂÜÈ\@@€~@ÌÞä@Þàu$æ\Y.1ÊY 3²Ya5 ++08Õ+o5z0 ++åOI7Š0C>xJ!PK BÚT'ã+°°1PHBšVh qø` ++H™&ç(" ¾' ž'€ú3 ì! ++òO'PHB„EE°n W'¯M´ <@žåq($É4Õ4³ \'  H'îm( û0 &O šåɼ'I?S+¡3 4E&èÊìÂØ€B‚ à—uÃmÃZÃÑ&w/mÙ& w>Í:@£! $0›Ÿ! "›C å 9(09()(è?× Éç»=(Ñ=(“XŒ?2’8Ë[Zr ÿÿ'%8d 0X9 d18Xe ZZZe Ze h^  ðe וΕ¿¦- w,³3? }¥*^0€å0ú5Åú=0šl…l © %ò s-/0¦/q¬@ãLd@à”âJs:<@ áP?-% $1$@¶ #¶Q%a ã- çºÖUÈ!ºÿñã± /0¾.í|¤XtTFå*a<2H+åp2 ++B\V/ U9OpžåUJ\í ++8H`¢^Hì ++ 0Ò ++WÊÒ ++!@Ûpb^ ++­ #`[_Bb\ÿÿ(\%`N`NQb0NbNbNh€ ˜Ã,Ø4 $ ž$ $   $ à Å#Ô+œ4|ß°ß/Ï 'b’-pÒ ò/—åö!½TÙÒë$Š Â0Bz  ++À |61$1 ŠY,a,5$5$û8û"§` á šå@Éñ0™0×@ù;pà ã$àŠå: àŠ:=/? ã(œ^"<"(o( Jâ@P'[|UPP([ü¥PL PDPƒAñà ã,àŠåàšå0àŠåàšå4àŠ8=.;I¸ X*]h Ø ‚¼ ++$¥ J (s¬  (y/dœ õUP ++pP ++($G²pP ++q åMb àžåà S àžå Sàžå bàžå#àˆ ++ h(ˆ ++4ðLôdñ/Y.‚¥5€3‚å° ++ 0"81$pœ1šå2.ýþOÑà ++²¤‹•Éw…-8DÐÔÄ’Íþÿê>Š #`o)0d±"a0fâ!Ç_d0fUd84xhÁ xxB  ¿ q›à—ç1#à—ƒ6 Ê} ++ž(Ýžå°—åÀ‹âàŒÃƒƒCÀ‹å 44p44#4]444J4ÐPÀŽâ0,,9Èñ=,(w ,,,,Ù × BáÐò¿-M®›ˆu F ++²÷ ~˜ÐBx  à+ U ++ ++D ++ ++:¤ ++ðƒâƒ ++ ++ƒ¢>ƒ¸%0nn@‚@Š ++/0ð èéÓ= â¿® ++iŽ«Ë=˜’Bj  pƒ‡~² ++o(W< <@ <€<( >`!$‚‡{K5Šp?Pa0 ++Ë(( ++(9Zj(˜€Bt ˆ›J}9 ++0—ž .?9$ ÙA ò  â"òÙËòW@ò¶§aâBl´A/4®AÿK Ð'pCÊzp–k’| ++ ‚-~‚-‚-ŽOT ++7põ  ++O ­D‚-á Š,ÄÂæÊZÊðÆÊŽ& ++\üNIr~~,îÒèÐ7( ++0¾3¢€ž`ÅË3- ++ ”I Ú^XP´fº‚ ++(3%8]O(PÅN X^4*„i2ª„ß= ha&$ ++0½{ 6P(B¬chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #U,ÉÈþ,DB    L&0 ã`EâP…â,à™å^á–: á0åà ã àå (‡(c0 á ƒ(Nƒå(x(c  á‚(û‚åŸåê0gg:à ø à†å†åp€â`‡åã ++,°™å UáU*°Kâ,°‰åp‹å<? à€l ++Alll/lllllí †å 0†å0â`ƒpp0pÆå>@ ãðšå @2ÿ/á@HðÿÿêüP0ÿ/áÞp7,ɸ°;,£,’ „0_3ÿ/ár(ó cÿÿê$2 HèäÂÆÊ@B H  ‚¬ Lö#Šå pŠå$à™åZáú*€Xâë ++ Šâàåpžå àâàŠåÀ@âÿ/áuð Jâàšå&^ム++šåPÓÈ ++ àåàŠå öP ++ åàâ^ã@ á Šå Šâ`lSp–å„ò@ ã ð–å<ñ{ÿ Jâ šåTã! ++L.=Lûàâ^ãšåˬ d\0MDbD_ Šåøj5ÀDCDLLDD#`  àžð=žd p : á$€åP}à€åšH üíÌ€"lpd+ådšå'ÿÿê8 ¨*8\ñÿþÿêN ++BBü€B à "àäêÜÊZHbäZØÒæèú636"Ò—åpŠåŽ¢]Æpšå0‡â@ÂršÊʺ OôÿÿêˆåˆÍñÆÿÿê ’B 0 ++"VQ á&S´&”XGpà“åàŠåŸžå0Šå Z¢ …  ¨0¦/fP ÕPHñ àžå^á “P@@Äÿÿê,,<, á²¦A@ á–o„å 0„å¬@õÿÿêh­°0°+°O0šå¨ö¡ÿÿê èÞàZØÊìÊØZÄÞêÜÈ~XB$HRìÂØêÊ xñ ++ ++hBPXB`82 ++ B(8qˆB¬PD⃠e4@ ++A ++ ++C¥ XèÐÊ@~@~ð @ÞÌ@üæ@Òæ@ÜÞè@Â@àäÞÆÊÈêä2õ  ++HÞÞàæ0 ++ üt+ØC 8 $HaæòÚÄÞØ hš1XÓ ++3@ ã"ÒÈÙ1TÕ2@½ ‘€bBLüÖTPB H ?€â  áŒ_Ï ++ú" À n¸  R1Tã`p”å^án‚@”åøÿÿêÃX ++@ á˜@¨*Þ/ 4ñ|@ @ŠåH_ šå* **=ŽLL¶…¶¾]N ˜˜PÕPÆX X.-XÞ +Þ qà†å †ÚQ à†å  †å2 D8 |Å:0†å †å(%0Ž 5{ÿÿ TtLä1Põ ++ å(OÎÿÿêx!.M ¶`Q„(.¬ P ,²2‚@BVÚ' ³2"? sZÆØÞæêä!F8$:uÚêèÂÄØÊX`,ÈÊÌÒ1 ]`£A jäÊ&ÐÒÜÎ@üæv@ÊðÒæè òäÊÌÊäÊÜÆÊæ@îÒØØà!Ê@†€È(îÂä6âÌX r@ ¹ó :ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZd`lP  ‚6ò% ++ÌØÈÒÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÞØÈ 1ÜÊîð L ++ ++0> ++(œH (æÊèrBX ²<±HBb8RQL–T0P(6&å'  Žaâ8 `R ++]ÕxB0 HêÜ#u  ð %%Ó@€ ++‡%·5+ Ÿ° žå&RãX ++\} „’å‘å5 ë  pCWï#àžïo^ã")?_ ’åâÓçq ‘å ŠŸ0ŠåŠåÇü× ++RQ Jâ ׯšå0šåšå˜’†å @†å@˜¼ƒ˜ ”ÿ|× ++Rˆ/ x™Žâ0‚å5 " ‹þ ‹ *qüq×Ujÿÿêy !I 2 ++ý¸X XÒ ++€” Qâ ++˜ˆ HJ úï»"@B ` É ëTã%\!à¨@t§ Î ++ ++tð„å„å „åà—åæ ++oà—åà„/îoJ@ OÏ¢BB   ® BL ++Ç;¿71 0€ÃQà€åË€åà—åà€‹ q èq 0 } €pšå0šåÒN¨hB@  ++ @N ++Á¬€Xâ® ++µtžåPáka0žåà—PãS¸|@‘âQj{G&P Æ 9$@$<  áU+ì ++U‘å å 0A1à˜Làå@Ü ++@‚•‚8ðH‚d‚¡Ìà‚åŠå ãDD ˆã_ÎB À²å? ãéé›°O½6*0—å —*¤2 †V`® ® /Q|p`šå á°Op—år .™"~—å — XÏëÃ)@/ÄOšå?Ê @&‚¢°& æîÂঀTãO0g(@ 00âœ);¬ 44(4hgg`ª  ª 2·áûнpD ++ ++ê ++ü `L€B2«ŠDÍúÅI ´ÍO0—å¨(/‘  Ù$ šy[[Æ3€å_|x Qì´øJÔ ™ ++šL¥’\2  Y X "@šîCT㘠êd  Ið@ JâÀ¸-ðÎpÌ ++t?ŠÐµ&:"?žJ€RQ€.5\;¶4‚r6Ú6Ø RàäÒÜèƒÂXB$ !8 rÈÒæàØÂòõ yÔ "û‹"ìùK ä +i‰T yäãÇ(PãRÚl ) <I^â:j@ç*Õ@à áÐ ð0žå#1 á0Ãã$0câ‰ðSãGÚ ‘åRãñs¥‚â åp‘'À|‚ç0Câ4@:ÚD# ++<< <H ØÏàŠåŠå0Šå ’ü± Û y¨ °àšåšå0šågT/T Ï@ 0”åø”ä¥ ƒâ „å”I[ ƒçpÏ…ï€ àp0^ãep¥0Žâ 0„å ”Óã]0Žç ã-Þ0žå,Sãº,0 Mw3€¥ ++€C?C Å ++ é ++1 ã#é ++­0å åÝ ++Q‚å @‚ßÉ ++ èwÖȺ´é¬Œôlì.qìL[Là¼*Á¼¼@\ÿÿê EL0 /"0\q\ CæþÿêDãP+Áìì&²þ¸è‘^ã3ÿÿÚ 0‘È@ÈVå‘ÈUp ƒçàNâ41&ÿÿè!è<< <è#˜$ Z•Ð"(çàLáLÊ$$T.5TÄT‰T(/ÑüÏ^ãzÿÿ ++&þÿê5 *¬.þc’þýÿêRŠ"4£ÞêèàêèZàÞäWó€ÜêÚÄÊäZ|æèäÒÜÎoÒ€BL8z$pŠ“"$¨8zöX "$¨B*  ð& ·¦® Ÿñ¤ Y< j$¥a <4 <E@Šå]/žá,)å?šå DmDD±D@µ1àƒ½ ö.–ÀC0Žâ 8 888882ÞMÀ áR¼ K®ñŠ.*àäÊèèòZÞÜÊZØÒ$ÚÒoS ,$!UÊÜÎèÐ(?ÄÒÜÒèÒÂØZÒÜÈÊ ñ8(Xj*0,Xò ++­.Xz* ++€¶EB Ú*E!(LjhB0 àƈD ++ 1p— ++/ð#iVë*1ª2ê0ðX>ÈòÜÂÚÒÆZîÒÜÈÁm!hŸCú$ %šªRB$À!0 1p"`-%Ú8"‚ `L8*s # 8‡c!B$ ++!ØÊ2HB4 €Ñ)I¿ý!ƒD Å) –Å)q/µq×™‘ ++ÊBP ++ >X¥B‚48Â8Ê2P6–QHB$»°2@B: K,;!Y% Ñ~ [ Õ1 à‘~ ~ Vå ‘~  ++~ AÍ ·OŠåFéF!š“'Y% D Š8Xê:›Tšfê: ++(š¢ "TTT@ÜÞ?#qæ@TTT8a@ ª2,äü8B<  0,‡ZÚêØèÒàØ ½|µ|¢0—'Q+mE0šå ±@Šå 0å #x¤Î!Šû'  d t & "pu li&P$ŸpÅ% f ›+² " CT㺎P@DâïÖ ++„/@ö СP@šåê%&0É°â ++`/` Ö TUTD¹ÿÿêLà/0T _l©T"7sŒH„/ñ„K„D„S"’(Kp¿€:<èaZ<ˆ C <"  K3j<¬H ú<¼!@§’ ‚2 ++ Á$ Q¼ûg ‚2 ++ û?€>õr.Ì"6p[J@(e1(P¼C B@žh¼#PÂB ++K‹!/ *ª'% ÿ60am P(BPchezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #;,½8ÿ*6B x  L>0 ã`EâP…â,à™å^áã: á0åà ã àå(Ô((€(€(Å(p(‡(?‡å(¶(À(Œ(wŒå`Eâ$¨$û0 áàŸåêàƒåÀƒå ƒåpƒåƒå8•8ü  áÀ‚å ‚å p‚å0‚å‚å(à ãà‚åƒl\W ƒå@t `Js:”ø/†åÀ†å †åp†å†åà á`„âà†åã ++,°™å Uá]*°Kâ,°‰å`‹åL? à„| ++I|,3| ||ù0†å †åÀ†å†åp†å†å0„â`ƒå€€0€¦>@ ãðšå @2ÿ/á@fðÿÿê°_;ÿ/áÚ,Å°,›†0P3ÿ/áv ˜d(Q(C4%òÿÿê.²B  0 ++ÄØÞÆÖÕóTã$à™åZáw*€Xâf ++à—åàžåàŠå €^ãS ++™@0Žå ÖžåpŠå  Šâ`òp–åàâàŠå@ ã ð–å ™ Ÿ  JâpšåH áH>œ  Á¡ ++-ó€åàšåà€å Šâ €&À$0ÿ/ƒriˆL À¸ ñàµ' DD$”Œbý‰q‚ @ÿ# ê4ÖÊòÄÞÂäÈZÒÜèÊääêàèZÐÂÜÈØÊäXJ8 ++.èÒÚÊä#ðÚB h tÀTã&0 álL ++A1p—L=ð—éAñÿÿê0D 4©<_0šåÛ¦ ++šB @ 8@—åq `ð bBL ++@BPPBb8j(ñHB°8B$æÊèZF ++01Ñ(ÊÜÎÒÜÊZ®’ ÜÞ@ð@ÂÆèÒìÊ ++HÞÞàædÒ`8  ++ B(jcè J°äÊèêäÜ@B ++*H !‚Ú DŠå{j ++ ãªynD @ŠåffEft’<ís.fH.5HfÖ f àXV€åpšâ .î.$ . ….ñ~ÿÿê ++BBühXÆø Xò8 ++X‚B °2½ 0—å —C @Ó R„å „VÜ_1ÿ/áöš1 ++ªdï" ++X?¤ 2J ˜B0   )¸ lˆüwü@Š.mŠ^IÝ^4/%^s­^€.AÔx0q´0$’:Qòˆ93Ò90b22õ2$',è8šî’2ÚÂÖÊZéûx4  @ nAn n-’¬â^ãÙ z! €.Ò1à€2òà€åà—åà€åà—åࢠ JåÊÊ Úê_ šåÀÚ`²B(>¡@K/8#.( ++#Qå8#1à1à=ààw1s sss{ýw Ë5[=[Ošåµ[¸’B  x8¨ˆ ˆ–?—åˆ-@5p—4,4¡4xP L P ++/ ++ ++  ++ Ð !uÐ H /½` ++, ++~è ¡è`YÏ&è‘hj ++7 ++P7 ++BþO’7 ++zI ZO˜¨B  ++ ÀúH‘' + ++/qR0/å3-((ÔÚ ÚÚÚU7G?#à€aáC$ E[ + ++; še 3â, ++0r, ++h& è‘6, ++"a¶1à—a#0€å#à—å'<l ++ál ++él ++Ël ++i o ++á7Ù”_È ++'7(5 —Ù ç Éç—åPã)»pãH!Wn#—å{ O ãÈuT“Tã×ÿÿ ++”W àŠå W` ++ XÌÇBw#xH .5Hˆ¬Ï&? ÏLÁ\ä/³ÓD.…'€ ³ò 6’"äÂÒæÊZÆÞÜèÒÜêÂÄØÊX'òhB  ++ ++æÊèêàài¨Õ“— ++à—å±E q  ]P0Žâ@ƒƒvƒ,,žåó gS p€å\ \ \\ .5MÙ *åpp­1àƒµ4×€€÷ ôÎ’,"Õ½ÕXãÙÙÏ°B  È …" õú…8^ ++¾Õ¾…2…4¾ölÁ4—d5šf Î8Ùª“^ã ++ Õ šåÅ–xt MÖ–æ–ØSØÅÅíH  Æ–eH/•e[j A.YL.õþ_îþÿê@ÅÅð BP8JHB 8ÊÃS`B“˜:$ ¢:@ 2š "Æõ"ÆC0 ‹›ÊðÆÊàèÒÞÜ“BÊ“A€¦S ( ++Ĉ ++Äâ ++ B¬ ++0@P ++( Ú2’ G€8ªX@Z«KPHÞBòÞ@ ‚Þ$Þõ$ÞPÞ0No " ++ ª[( ++ÀU3ê&UD B°E! ++2 JH ¢J†p,îÒèÐC’!j3’7P€B,{R ÊÜÎÕ t n ++ÁQ„åp„=3 à„–C„厩ñrB0  kCTãÝ@f Šå óÒè ¿0㛆@ã¦0rSã—º} ¦W†u(a@« ÛAO?0€Sùÿ8Lp át4IÐÐkO áa  ó L8 áH. è €u¸ÿÿê )/0ø ¯ ñK "0›Ÿÿÿ ++—åÀ/9À G. _ {  4 O  á44/%4WFÿÿ ++ÝL qL.ä '¡¸RB* ÈäR¤œIœ6!0ÿ u°¯ ++ð‡ U ™pd Ø€ /Eзx°xQ¢1*pq ¢ª*8. ó &ÆÂÜÜÞè@ÜÊæè&æXf¢* ++(%xš hR`B, 8ïbÓ %X"à0. *üæ@Òæ@wÿÂ@àäÞÆÊÈêäÊ !ð ÒÜìÂØÒÈ@èÒÆÖæ@üæShBt`¾H ú0¾ž/2k×2B4>     P(BPchezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #?œ, i`ð"ÚB (  L$à™åZá\*€XâM ++Ÿåê f Šâ`ðp–åàâàŠå@ ã ð– u,g Jâ04W ƒâà`ø à‚å,°™å Uá(*°Kâ,°‰å ‹å(O àƒåHH 8<žåÔÌü@1ÿ/á`Oèÿÿê@Ðÿÿê  &À$@ÿ/á*¤LÔó63ÿ/áÿÿê"j  àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P 0‚l3ð- ++ ++ÌØÈ ÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++" ++ÌØÂÎæ á æÞêäÆÊ ÞàÊäÂÜÈ%"%"HêYð* L B  i€Tãe} ++yEŸŠåŠå Q i" Ð  JâšåšåçY 0ñj ++îäÒèÊXBb8(BL äÊÆÞäÈZ!öäXÒÜèÊäàäÊè B     ÞðTãò ++TãìÂD  á_â_Ñ$B á ÞOƒÞ}æø šåTã² ++`EâP…â,à™å^á¨: áãøàå åàšå àåßÓ³bÿ Jâ@Šåšå ãD’$EC_ Jâ8 8}8ü@? ++îDDÁDO.„*@Q ánŠ„, DªO á@…„ @+@pà ãàŠåSàŠå L  ã†_@ ãï÷Qw  ˜/ ".¹<€2ÄÀ5Ày& ++01™C0Ss/LL*MLLÌOñþÿêD‘D"íÿ@8É8Ë ôÄÿÿêP²ÊÜìÒäÞÜÚÊÜè~XB$XB @STã\׈K ++ ãQW`Eâ¡=¡ü  á‚åà ã à‚å$s/:0† l†å0 áé!é|0å å0x ++0à‚åà—åà‚å à—匌Šå ã…} -éØÊ P2ÿ/á¼4?pŠåµ …}_pšå¤±öj,ÂäÚfdØÊØB  . æîÂà°³-ô0™åü ™sžåüà‰å 2ôà‰@ŽâLtã ++` ` "‹8õ Žâ0‚åã>@ ãðš” ”  P0ô,áô  ++bB¬ ++0 0ÐP`B ++ü¦}` ++ Þ0—å£_š.yš}Òz ÊðàÂÜÈP€Q ++ ++ €ðPÂÈòÜÂÚÒÆZîÒÜÈÏLP ++(!H<C" <ò8 2HàÂææZèÒÚʬò 0HêÜÆàäÊàX¢‡uZÞêèàêè-bHÜÞïD( $@DúõèòZàäÒÜèX " "BÖ,Jš^ÞàèÒÚÒôÊoõ@ØÞÂÈ BÔ  "S "Z˜<0€½À0šåpšå °šåÁ—! ++`Eâßó ++:°†å †å p†å0†å à ã? cp‡]‡å 0‡Ý óÕÿ<ÿ/áâÿÿêŠåŠå Šå0ŠåpŠå °Šå9Püõ P Ìxšå šåðŒñ ++ ++BÐ ð ++žêèÊä×Í0âSã ++ç00å–ñü ++ âRã0“ö©Sãúÿÿà83^ã8 Úëh 'h!h ‚L*ýS†å&õtjO`Šå" .Ïý àå@^㊠++`^ã  å0—ôÁr3.p—#†+ɨ ppšåšå=€Œ\/UŒ9 ^½Rà⢠++^ã ++ $c ++^ãS”-é”8m ++$ ++‘ ++ àå ü ä0ää@ÿÿêÐ/ÁØ„0šå áý /  ܾ OÕÿÿê”1/}”ñ"BB(˜æäÆ$ÆôæÂbÌÆÌôÈÊÐhrfÜZfP&ÜÂÜÞ›cñ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`4ËË<;1®aèÂΚ ++uJ:˜/)*Ÿõ¨*$àäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZd” Z31] ] 5" ?a ++ÂäÒèò$zP(& ++°Êð8Ò 6êÜÊðàÊÆèÊÈ@ØÂÜÎêÂÎÊ@ÌÞäÚ@üæHÁÈ"ÆÞÚàÒØÊäZ ðÜÂØÊ ü€¶üÂt@üºü~.ÌAÿæ ++HÞÞàæhäÊìÒæÒèPBÆ P ++’ÜÜNæ ++NN2ž@ž*Íž0ž®µÐ0^ãï ++(^㶠„^ãy ++D`0€Xâ|:@ à—åx —å —å¿ `/-`_ãÿÿê$€P­€dz€Ã/Å +Å z|2zð ++ å åàå0å °ååàŠå0ŠåŠå `pdLl/ á )/mÀβÇTì.ìì# àðQ0å0›ÜÜõÜ@/IÜÒÜËÜ+ÜB/ÐÐ/ÅÐ?/ÐÕÐÀøZB(¨*@BÄ ¨ ÒÄÊìÂØUlòYD þL0 ã^K=/. 0ƒp‚å ‚årå p\.Y!0  ã4=ð—Û= ¼%®T ++Å” ”ö²ÿÿêj,àT/.NÛhF 0Nf?p!"6ë"'•·/“‘?žå•$.©[ø7L `Šå¤Jê: ‘†å àšåà†O`Šå-n<Aé `µQ á ŠÐ0Sy8B Jâ€Qžå^­ ´¸ë@P#ùh p—p¨V²B0 ð*« >—« p*qšµéí„HÆàìÂØÒp4ú03#B 2’B8 ¼ÓDWâOÍ<È@à—åj-0ŽJ®#/©®oÊYYY±Xª¼¨ÂB4 øFFFh?"JuJèJtrHÆà`¶34Gg(Æà`CO@B6þtÕ:HÆàØÊèäÊÆ6ºD>H2o.q`8Ê8(%#¢HäêÜZÆà`ï!põO`B<õt%:ê<ê*>¡@ŸyUÆÐÊÆÖ´@X ++»B»u»…ÞÚÚÞÜÒôÊ¿B¿Ã%HC0DX òF×hä  @Øvyvhøh' e2 ++”ùÙ'”ÙV$$@¦ ƒ,| t 0à†â¬ "@aau# a bb•³N: ÍÐ .l‡€€ñ$¢Bj q¨ Šðàä7@@ áè§ ƒ Rá ++à”åê@ì ++~P~ ++°Ô¢Ë ++^ãO_ð< ++ ”å ”åp”å&Q ++P  áÌ'€ áÞÿÿê—?Šå Šå*é . (&! šx[âÿÿ ++?u1à€œ%L à€å4bw,4†4 ƒ0 ã0° áJÓ ðû ++p^ãõ ++^ãï ++ä@Ù ++š!ð:w ++ ^ã ++À^ãÒ ++Ð^ã ++à^ã ++ð^ã¹ ++ ^ãr ++^ã ++^ãØ ++^ãŽ\Ï ^ãH ++^ã Ó0 Œ&ƒ1ƒl ”åðî_lK¥G0@@„åîÄa„å 0„åÉ ¨ñ/-ÏÈ ;è( t”å àŠå ðà+ô@"þÿê³*™°ôp} ”å” óã à„å 0„å „å ¤í/=ž?,!à”lªÜýÿê4±S ”å Å*ìPàšå 00„å „å ë /] Á Ä -"0, —ý('NÅ ,  ++.ðà (ïø/U ++øËøˆ'  ‡à”åàŠå ŒÒSýÿê|Õ ++ €4à á„SàŠåD<ªDýÿêð @( P(à(D†L˜ šåÜ @àšåÜ  „.ðšï,`/µ `±`ª`<`)`XPýüÿêp X „Ð l/É Ä½ZGl| @ºüÿê +9 t d=”½*L ¢à€å0€å ìà0­ øÐ*, á„ èÀè ìì x î¼ÏŒ¦ŒŸŒVŒCŒD8Dœñœh"=üh/-h'°h Á|/Ñ|ªX£|H|5"øû+APÐÌ@éûÿêÔ.}ÌØ/ àÀXØ/D¸D±¸ "©ûP/}P'Pø/ ¸#DÀ:ÀÈ /±pMp/íp'€p ¿Œ/™D#WŒDT t"ûJ-/ D"÷ú/E”"èú”/”'PH/€©€¢À?0”å”/@à”&@$ mZ" à|ô*à"‡ú+ì 0šÃ ˆ* ü"xúÄ*AüJ šå’ÿ„( Q ` H ++ 1à’¦2+`=X/qX“XŒØGØ4À)dX ˜@úÿê¨ /Ýô&šÐO +Oب@@0@ ð@/±@¹@²\ ++œ @"Áù@.@Ø ðh/…h+ h_@†å 0h Ø /-\ ++pXp,MÈ"0“ ‚*l;l/0h+íhi0šå “ä/@ @.54°0°¾¬Ä/ñÄ•°t Dd/Ud"øðšåRr*ðB P$þ ê Ê RJ4t¬~tâêÞèÊ*05"Zbk4uZH1(+)5'(ï41?\bh÷4HÇ42$28Hp8 R¬ÈÕ4Ä4JG" |î>>¥E]fp:V¢ðT7#ÊIG(ÌÂTHr¤ÄÞÈ(7"2X2–À^*=CÆÂæÊ¢CfX'Z®7ø9í$df¿7³'\¯YÒÆؾ7^–hp`“/ØØŒ%hhŒF"Œ#ØØ…l8 ++…WdÊ`-YfÊb+o` ++X+@& ++` xølb»OæÊèB»d»2»bó¤ÚÂòÄÊZºÇGºðÆItÊÅbZˆ€nh¡â `ç  âŸ`ßd“)fÛhFP@A¬€Ù$ÏÊjàlxn%LJ÷Rj8àÒàb Ø9”Ò â ++ÊääÞä %bv<˜´9t*bZÈÊÌÊäÆòbdn:ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZj`txr H:/`p: ++!sÆp:?\b`o ^&V<Ep“; £6r?! ´)t±vÜ@Ø(ArjÂ1(°‰d`z4hÌ¡4ÂÄØ/dl ++ê<$xM?KY6w| ++ÆÞÜì,'t.²~ÂäÎZèòàÊ#d¡€äÊæêØè qzò`ò%!’òÀò5‚0§dÞäÊÒÎÜ¥jð ++hð8dI= |ç ç&tÜ!~ * € 2Û‚ÛpÛ%%ÒÛ¨V4„J’CÆèÊZ€D”ÂèÒÞÜZØÞÆŸhè ++jèeVz^ÄÞðßÔ„}Ô%)ÂÔØÔ!xÚd8†8„¯N“?bdfÑ ++l¹M ++½vˆäèÈÊEŠ¯‡Œ ++ÒÜÈÊðÏfÏi¨ÊdÓ†ÿˆÿ%/‚ÿÈù;Ž6¬4äÊÌ«dø ++n¡L ¢'ˆ¼Š´ŒåtƒŽÕxÕ%3ªÕ¸6-Ï+m0?/ºA'+mØ ºA Ï+SjBjVHUò(Ö TÖ jP’.40b| ++p|JH xšäèÈZ nY–ÊTL’ €9T_ˆB”z€”zPz$xÓ4˜>8PÒÚÚêèUTZØÒæè@`ˆ ++rÍP A –Ä˜Ä v*?ºöÑ;œ4…Æ /brÌ .b`TKWGäÆÄ.š†ÖœI.EBnž”ˆ ++.bb˜M ++•ˆ•ž•¿%I2O˜B €  ¦³¹2T¹ ++ ++.bd2I‡¢b–-¤-¦- *OJ3*ˆÕ4ª&ŒÒ†b› ++.bfÐDË  ¨ËªøUÅ”`°®,qBb‚ ++b; ++Þ GÖ ¬Ö ®Ö p(°CO | 7 ¨xÄ&°´²(‚=/bb ++b ++Eƒ²­Ip´·*]ú± òHB¸  € $ÒàbZØÞÞÖêàZØÊðÒÆÂØ1 1q åà’Þ;P^á›0xà’å @žå‹~sk7+"“3E0ƒêÑJyqYƒk/RWs„å „[0„[0“ñA<º>P†å ß@ƒâ`s-s--s- D þ> à $$ ß]€â`ƒhh/0‹,õ#0çÙ(@˽§Oë/1¸‚˜{ÿÿê+ßXĶ ++ÆZìÂä ++lÖ—206‰FÒÈ ‡ àÂäÊÜè4Œ ‘wØÞÆ ”¶ $¸œAf, ++(xC z¸5Æ ++6¼*©ë b< ++.bnïFðº¼ðæ*czæPHB¾£? à¤z¾¤]À]ã/bb! ++/bp] F]t˜]À] iúPhÂÕ?ÊÜì¡ ++r«6£fàäÊì•SìÂäF_« pBÐ]>ˆq <50  áôS^ã:Ý'!‘’å 0’å ’©V °ÀTÑ0‡å ‡å ‡åðT‡ï9.¡ƒ7¿A.&´[ ˜4àç7€[ >K šåƼ)/ð[ `‚B†…ö(BÎ  ÈB Ì é¯éš ++&PãoE1 å€ÛB 7,ÀÁSŒå Œ¨3ŒÅŒÅoŒå —åÚHo†å Àð6> HL}‚â`.)G é["ÀêH6* |.À/`,$-¨+@0‚âð,1àƒø, Ü4)ØÀ5Ê»®T 7q —å —x \$”ô+5 $0”.ÅØ(%¤,ˆ1ï9A8(Ñœ™¤Q­ JÿÿêÊÄJ$ ++€ ++ChBjºeXÌFtã/bdÉ ++“6È D`Ù ++d Æ3M ++?È‚?Úô Êô ÌÅXbA ºÎp4( ++ y±b8*Ð(® ‡÷ <ÌÞêÜÈ@æÞÚÊèÐÒÜÎ@2qüæ /=Ì0i “ ØM¡&Ÿå à“å €8* %à“ Š ++ õZ¥6 ++ÊK'8•FPÔEÆØÞæÒ £ ++.ddGgÌäÊʯÒ Ô ' ++(˜!oúØ#¸Ý%qÂ0xâNqHÄXi>eH ¤òÞÜæÒÚàØÊ;fó ÆÎÞæ`ÆrêÌÒbäâZÊækÖÌÚè+ÌÈ_°g#Úè]¶ØìÂäÒÂÜèðÖÚÈÒäÊÆèÒìÊJÖI —RØäÚ>Ü>ð ++ üæ @Äêè@ÎÞèæ$Þ ÝA žVgÂè ,°1´üæ  HÈÞÌÚì]”àâ ++0Á^  W"ä ++ ^D:0àîBhÀ àBý ++.—ý ++øiøëõ ++Âè ™  Òàdi® 7à B’åAOœ ++$ O€ ++~* ~* ~*B ^*"Nz;"›š;@Ç ++ª;@q ++Aõú@ ä'Y’å 0’ÚÆ&MµbL0µKd- “¢A@ ž @n@P^ã±ÙžÚ(¥¢qà„å „&iþ;ªF á ++j’* ç†N>¶ ++6ff&Rã~”‘NF'EO’+óÃ0^ã›K0’åæ PËŽ'òÄ3^ãT 8 ö-\' ` ñ ^‘I\0`ÉPhZ(hH†ål > Z(/,/½ž*X5üô0 á 0“åàŽâ&Sã{¾A ½Dg² ++Tð­z ^“åžøÔ„å „åH.Bø\1 àdpdÏp„å „å „å.Š Bå hpp°p°p_p„åB²X ++„ÌúB„CRãõþ„ú[ÑG" ++h\ TT! ’TRTh ðþŠ/“&Fr¡ à“Ÿ<šT)p’SWá”T ++BRáŒÔˆžC! L…¨ž`´œQ´bpâW´!‘´Q´&Ãþ>0lPb°ûs â^ãf€]À¤«æ@eÀ/ Èž „å °„å–þ$ ÀÈÀ\n„å~þ( ++ÀÀ¸hŸp„å„åcþ¸/\þ¸œ<$"SþQOMKoIþÿê +ÍP šå þþB^ã2BCBC5qKÉV÷†"pŠ*ÀÈ5TáŽgדP9à@FFF‘àå à‘ånEÑ ·nE ªnEnE€‚€‚æH~E‘P°P‹Ú0‹PN‹å Œ}tJ0ízH€°†åp†å&&h&®ZvI èO†åŠEd7Þ0nJ€nJu €å €—IV ¤y*@"0’2°   ýpK© Üä ñV?„å Ö6 ˆÂ´„Ÿ‘&7_4ÿ/á|XhÞO6A,"R)SH. H.øþð/ñþÒt tøt@’åþpp’åà’åéN/ |à|Öø0 ƒ|ƒ|ƒüƒüƒ|Rƒå à“|ÀixŒ|¶|Àð©ŒBK^M xŽ|’= 0Œ^F|Œ+îŽMƒÀ†å†å:M f#&|_ €X€ 0€ @ dCd5€ o°€å 0€|õŠ@Šrx"üx/!xL¾> ¶X ¡“x}\ idPxBè #xD.x÷x.ðþ:F+HRà’å @ä"ûäí>A"àtt"ûü/ü'"0/ àüÔ .¡Ä”:FK:NGQ’å’^:R:"FûR:. ‰_?P:ûÿê(N?D, /û:h<e,H ++HF?/àNBP.ñPµP®PÉP¸P)’d"ôúd.Qd1 0ž½^= žüT5XÿX _@†å 0 \©¤ H.9H7H0H"¨H —*@H" à”p&¤! ++ ðžSO ±bJ0Žâ ++ƒf*?ªP1›,ªWD@ ã×_P žå0Ž!3Sã,nj<P‹fª0àãCà.6DÇ_8fOøØßFvDhºTl6N+¥º¸ªTÔŒ!0p á¬/pž ¼.!ž_Wã° ++—`. 0= ,Ä\H\HhGðšåÀ@—"0(ö#@†Þ?d1“êXº¬@^ã"´0à ã¢"Ðæ +ͬh Th5| ++óð”%/a”+””(õ”,/ëþ” ”(/‰”+Æ””(/”+¡”šO^ã.œ$¹œ #eÔ ` *`nˆ æÄ%/}ÄKÝ`=ÄÄ(/AÄK¡` Ä Ä(/ ÄKe`/ÛýÄ/ÔýÐ8.Æýl ¹l  ã¨1¸ýÿ6^%üjs T ‚T =$7å §oi$ @0ƒâŽ(soi$âã./0zT un.½!‡_0šåÈ .ý!Ä ++Xœ QýFM/’åüŒ óîK?0žL2" 00€Ñ ’å+âRãrf,0ÊvÀF$hð #XžÜ–^Ìÿº (jÄH*~vˆ$Æ}ñ}7 (!*:m'Ÿæ¨Bê*Ü( ð.e{ì*'abBè@B)]âê *0@*_oÀì Ðú è ¦STã¦æ 3—åtÌ'aÌ'í¢1š2Úì 8PhBî•1 “‘>½-0šù‹S ++‡©ûwÇw‘ ƒ/(@^ã~7 x0 x'#ziŽe†# *é#"pQQ"'-W ãÄ=1ÒÄóPð BÂèèÊÚàè@èÞ@ÂààØò@ÜÞÜZàäÞÆÊÈêäÊ!pâ)fêî ++@â) ++ Puhò ðuWuNæY?0Š‰|Ýo # 0&fO Šâ H€T ¦‡ÑfÕê‘  áÙÙP/Mز٫Ù0úÙ!ß7`ð¼I²ò¼k;¨xBô °¼o¼fI–¼ ¼(_@Šå$\ [Ñîg\$ ZH @šåP­š“¸"h"Irô"H"˜ˆBö è"HvÎ7{j.[ГàrˆŠ¶öàåpž.. Óx(HŸ$ ŠâàåHƒÉ$H_$ JâH HZHD^H H"€Eu Hpbb_ šåb~R ÝR.–ÿ >F9+E3 æ0gÒö ++E;"„;¨PBø  QH}yMrMaM ßY/pïìi—ï"pk@&0 ãS\9=83Wã"d$d ‡ulå‡-0šÑ7!Ów,Kp—åÝà ++ ++q73âw0?šU ! [‡ ÌEm /µÐ#%t@x.õxŽm‡mA ++aÐ$ ++pŽ5CP(mœ5D‚ø}2\ø ++ ßóB(!4P€Büê€6Ðúx3ë*Œ`S  ++½ƒ\(û ½3ÖûÏP0 ++ÚI!x*O’üÅ ˜Bþ ˜LC*   Å ,&pÉ U\ˆÁÉ w…Ûo"‚‚(!}½‚¶‚ }˜ˆˆˆOZþ‘ P BpH‰bÚü…XAá ùC Ý2 X!è“Ñ™ XÆ1’ "à‡ "ˆz…‡"à_(j Šâ-,å/} ¨þ)¡S ]C-°è ýp8X ðp&à*0 HèÞíEø ++ìÊØZìÂØêÊX&(B ° ++/^³~@5‘,1B—!Ð ++zÑÎÑ>qº 29ðÄØÊ@ütæ@Òæ@ÜÞè@ÄS;ô#8® ++é9Rºü†8‘A ˆ 0OÃF6*-áá x4| |L J-ϺϳL QYx›kOrcP€Bmx¡h¡_¡FmH dd „‘¡š Ô/ˆ _:æ¨B ++  ( ~æt]æ æ$xt>xt ^ˆxd"5pž"c_Wã c@/ žgVgíV ŒV…cVj(j hjNò ++g!ð.Ö#²è˜ ++"(H~• æZ²œøÊÈ~`  $èÚàð &Â\?äÊÌ _pÁ\‰VnñH'ç@ºç@#ž^F&‚ZI]pI]0xA< ¹Z/fjW|ÜJ¾Y"¾YW ¥ÈÐöž4* b‚ZÄÂÆÖÊÜÈ@$`K §8@7÷çˆ )â‘éz™¼ )ñ‚ÉfÂ: Ú™…U^úU/ ++(FFÀ( nÆÂÜp »@ú[Z8#ä@š ;“ r`85Bè„U` cˆ ++"cP$è^A¨&ß7("ßwÝ%nlÝ8§Qݦ\/fh¥\? (çÐçCH*ÕXÕ,Õÿ/,Õ=pÕàÖ$G2Ö+ Ç.Oøò8ò/òÍ ++} ++|¿‡r 6Ò(ÑÒÑÒÊcSòú.óœ .Ì«%KZQ°QI0ˆWÞxÞHÞ?œ´*4  Þ .0©¯0ƒâà“ç0ŽDnžÁžºDž( ++¨ˆO:>ˆ”Wj "w+4ØÞÆå(œaŠÆÂÀ@ÚÒÜñy @cbèP 5DЪ’rP O)rò@ÊØæÊ@£Vi@ÐÒè@P)#@PU@¿VãR@PÆÂä@ÆØTR@PPAAPPêÜPc¥@ðTR@\\\R@ƒs€sÄRR@PÚÒÜ~@PÆÈPÆÚÒÜ@PÒÌ@PÌðx90@`RHZ@ZbN ðÚRRRR@Âè@ÆÐÂäÂÆèÊä@àÞæÒ*m¥@bdnnn@ÞÌ@å, \æPòâ`Bˆ `BÆ,¢2"š2&1–; Ì3\ì,×¾?“øz9\ˆ“~<ª2²Ò?(tÔˆ #$8[^㽪‹#JŽààŸ•Ð|pæ2 "ôU î Zh¹LH[øiH¬€ªà ãÃ$T¼’ "ŒF¤ ++)Ž<dD;º &NÆM2C nH"5¼i/š¬ ++¶)+q¬Â8zB¾E˜zB˜* ˜À}0ààãîU ++A5¶>ÄL0Càô¢S ìR@ðˆBmÿÿêøNø@ø\* 7ø\ó& |‚`8rDW¨Wx@ÒàdZ“Á2êÈÊ R@ðT@P-ŽPÂ`@ÂbRRm5R@PH1Ú ?vÂÈÔêæèZEžÌ⧠Ofjnp§’r PFH·2Jð&8 H"Ô8B^ è ÎÀÆ S^­0 ã|¬ ++i)}q)RÄR0\¡1 ++¦&^ASF2à",`À8†®!`‹§ä:®P P0 0/0†9 `9Op—åÄ€óâ˜Tž˜"@’å°œ‹r˜lSlƒl/æ€e¬Y*›¥™’ü$‘B€ 0“å;â4\D;0žÀ6SlElE_ ‘åâ­*òl6ÎçXóX0ÑXD»X ++I˜Y£ ++h´Wožå0NâdŠdÞ ƒ”/@úf.ý˜ [^‚Á.LDÀŠå 2):¼ .U:¼\CÀšå ¤B¯? ¦þÿêDêLí,”¬@N ++À P- CPBèÍ7ApF™Ro(p™'o()¶7Êm>ÛOø,@7µ 1G- Ù0 ++Âñ "`)(jbR8 HïTïïï…8T8<1LïVï w(1*‘Qó9RD0‚å>Á±ó ; ++ ó©ó 0óÊóLjVó@óXóˆó*jæ ++0æ:`Šó Øó$/­×ûhûjrX@ûPÓÅ ZÔÅû[[ îÀ=QKP™l$2&Àµ• Ó…Ó‰ÀÓ=”3U?„)k)kGX" @3°; ++ÏW<ûWÛä™ /aÜ ¯ïB¨¿5ÂR $ ++ð•Ë¼oÚZ ++8¼Na|/\Ö~ Ö Öï\ÖS^3QÂ^º(år5-`h"O©=Å¢ "!7O@­ÿ/¶  €ŠåŠå#eà6*‰Å‹pšåšåƒ*€à?êi*`@ñò| È æÊèZÂäÎæÊ6-"°ç c·O ‘åË_É'0[ãcêWRëApyÃXö‰,ÿ~Œs#°Ûë-*0 AÏè *©‚ ëjÁ5Xöä“/"!©Ø/°j +…î©Ø"°n t+ Ì10f’i ++b˜ Ç@ýºÒ´0àF9žx & p` /àí 4& p\ hæ¹Â´Fb8\63¹d¹¹¹,¹d¹L¹f¹ ¹¹,¹f¹@¹h¹(¹¹9p/àŠ½z‡ ø,@Á~ãÅÒÅjh@Å/j`$0þlÓÓzk"Ó8Iúˆqú ÍÐ1ºÃOúlùn´´õ´$õ´nôp´ ´ tx´&|x´ pïr´ ´¨ë1yëäÀÊëO ++rë•ŽXtÕ ++ïï6Ýý…}ýÕÀtH*vÁÁÁ,ÁvüxÁ Á Á,ÁxÊzÁQ8„ ^–ÈiÑ"0È6¹!à“6yÌ +0+…+ /0šxÄ"âÔL"z£+ );Q"|&(~»‰~»%8¹1i€ H¨"¨P¹%0—º† š¬,¬ßÖò¦g2€@F1t`B|8#Û ‚’ÝØg mc ²¾ƒJ‚8ŽO!†‰?„ŠºŠ}†ŠU4r2ˆ ++0_8-}€ =æº |Z ZÒÜÆÞä†{p@ÜêÚÄÊä-!@ÂäÎê,Ýæ Q%Fx86|1(0zR# S™j %/à—Nj ¹`ŠBŠ PX ‚| { ñ ƒ ++.t1 0—¦"ÕÆÊ,wïâr $Jh±˜*$Úh$‚ ++BBüøûCzŠ+(Ð0B   è h"F+!¼à!¼¾§E(]£k §p@&Tãßu ORãOV53RWu”'PxÐòÛ]RWu_”å à”Wu0§w«yWuRWu ”ådWuWuh#l ÿ?ðË`7Rãl" pz~$.pt ++tDp„åx ¿Ý'0G{%Î ¼! ‚ ¼m1/àÚ‹ùÚ‹àfFHèbüXtxí]žj …jåY$jR5Xž‰,c*jFÿ@mv˜ 62bé?H<<L<<@<?#< ÏŽ ??ÈåiÜŠ ‘ÜŠ¼œ*5ŒX:Ž(NººƒJºº’ÐX¶ Tâ3¯—åàŽâ@žç»zc†@I\¶K”œl„jÓð>ñ xœ n!åœ ;”8jLh– ´9Ä30¢5 ´)Qx¡ "@‚"Õ‚"ÐÊ)É™>« Y–‚3› ̘L &C`8H²>8L> :\ø Ü¦ l0 \ºIÛ 1@†.wÀäV$ òV$$q\5©Ô¢ÔPú}I5(v$Ð oú˜ ++@ÖKš¼R¨àn,ZðaðPð ++°âK ¡" ++¼R ++L¼RÊKH/@L øÖKOà á¨­@ :È1H¯(* à 8 eÎa(.¹4Ÿû˜9!˜–K' ++ÀzB}Šš ++ J\ÛTYœ  ++ ža~K\þYcK\4FZ Ó ÉK\$H?pž&ZK\ï\Û\ øK\Gà á _Á{_ ¿* @Oég<šc ýcþYk\! ++Ðe@e^ œj\,Yž  °^–_\ eŠe{št$†|;‘ô%d5‰ KSãN·$çÍhq@0 ã3èɬŠ€–P¸<[ü È ++ ++±àƒâ ‚à@‚<Þk :2÷îÊ1O¡”¬Åiè }q àƒâàÎ̈P•à *sƒ!à†l À0Câà†â@Žçùd1`Šåàè6¼Ø*]ØvÅoºPuGAམ\¬"xZž ++ÐÒÀPˆ„ ++Q ++ Sájg¢jT „{ÚÍrr/Š¯s*u™<% çF ?¨(F–ªu%uFB× 8F oDD ++ë% ?ª0J–¬óþ}?¬8N–®Þ9 EF!|EFE®E5XE B@hO° i/ia=° °H°1# ++—R‚²`úzSz`?²(W§´W‹W‹d?´0[§¶[œ[œi?¶8_8åE/åEyÌ@PÜêØØ~@Ž [æ20@PP7KaØÊè@PPûE ++F °@Ìà@ÆàRR@F̦ERPHäè@:¢ @PI R:f"Âb¤KàÆO@PPb†A+Â`ˆdCþF „}f}F:@Ìà€ ++yhyI(@Æ|s@‹ %³ š”M£ ++ŠO¬ ++¦†R-@Ì9:JOrln`J¹ ¬"D’DDÈC‡’èõ$‰7Q ` ê!2@—Þê!& ++0Y<#/`#å¸í#‡¸#º#º#Q 6¿O@å¿%O@‘å¿%ä¿H</@ž@jü ˜C&,Áž$£lïm:ê1@”“=­=Ü ÕQ ö:3ŒXè·"`¶E¼¶d(¾ËJ¾k` ++k?àžçg‚o!@âEêÀåìª ;ïÃHFÂ'hÂDP:tXS¢Ä¸¬P²ÆB„! ++°¼h8Î 6¸XaÂÜÎêÂÎÔfÚÂX0(·f ÊÌq:ó °0HÒÜæèÂØØZØÒÄäÂäò^äèZÈÊæÆá rgp(Æ( (5P*(ràäÞÎäÂÚ%ðt JÆ ++HÒ Γ¯¸()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #ý,Wšð"|B  è  L$à™åZá´*€X⥠++Ÿåê f Šâ`ðp–åàâàŠå@ ã ð– u,g Jâ04W ƒâà`ø à‚å,°™å Uá€*°Kâ,°‰å ‹å(O àƒåHhH4PH48H4 H4H ˆ>@ ãðšåü@1ÿ/á@OðÿÿêØÀ¨@xÿÿê€ p&À$@ÿ/á*íxLLó63ÿ/áEÿÿê>j, àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P  0‚l3ð- ++ ++ÌØÈÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++ÌØÂÎæ á æÞêäÆÊ ÞàÊäÂÜÈ%"%"HêYð* L B  É€TãÅŒ ++å­¥ŸŠåŠå Q É" Ð  JâšåšåçY 0Uñ. ++îäÒèÊXBb8(BL 2äÊÆÞäÈZ$õäXHêÜÆàäÊà B¦    áSTã[áÀJ ++ ã0 áø 5 ++`EâP…â,à™å^á+:  áÞ€à‚å0‚å,,,,(J :$þ†å`å 0å å†å †žp_7ÿ/áíæÞ P2ÿ/áÎö­0­/A­D0šå¸D@6R?#@Ì¥ÿÿêTã¤ÿÿ ++4ð²B ++  8 ÎÊèZª$«ó€0 áà—å^ãz@“åTãvÇe¨Q“å@ûH ++àâ^ã @”å×:×÷ @‚åà ãà‚å`Eâ$û,: †åà ãà†ás†å&à ã 1à†H<  áó" ÷:ž- ž„) ]åÍD¿ÿÿêµÉ0Û™ô<¹ãO0šå¦dé303. PŠPqðšå@“åE 8ôbB0ˆB øˆPTãóaà—å@ž@?` 0—å0Фƒåã ++ÌÌb0‹å@—w Ó0ô› Ë€ ++âB¬8ªû0 ++$ÈÒæÂÄØÊZÒÜèÊääêàèæ ++"ÊÜö  ÈòÜÂÚÒÆZîÒÜÈ ++0BP ++(ñP(HÎÊÜæòÚZ|àäÊèèò)áXB$ ++ B(H.C * ++„´XB@  Y+øû ++ “å“å°“å  ++½ÿ p á ‡å ‡å °‡å0‡å à ãà‡¨ï €½-0šåšåÖ-ò ++âB op àäÞÆß 0Pâ^åI0’PˆSá± ++ 003Sã ++0$HáâQã0“ 7Sãúÿÿå ++°ðˆà’å ^ãx ++°^ãÿ ++0^ã° ++P^ãm ++€^ã? ++@^ãÜ ++`^㇠++^ãþ ++ ^ãu ++^ãï ++ ^ão ++ ^ã  ++^ã• ++ð^ã0 ++À^ãí ++Ð^㪠++à^ã‚ ++^ã| ++p^LÁ ++^ãp ++^D„^ã:(2Ý € ++ ’åI Ë1¡ÿÿì*= ¼ O@ ñà„åà„â à„å0„T?à„…O_pŠå O+-Opšå šåÎÕ ÇÄÐ[ ++ ++ Z¹Y ++ÜÈõÈãÈÜ@¼D È(È/È'/½È˜8˜%|Çà’å àŠå’å âÿÿê!„Ó„ À àšåà„åà„∔”ë”/ÁÈÁ  "¿þ/%‹/Å#ZSG ++  €Ò{þÿê45o#p ë -¤ €åp€å šå@\Ø( h|0 á@šå|  Ñà†åà†â à†åxá†âà†å@†å0†å¬xì4ÌŒ/QŒ¦XŸŒlŒYŒœ¢àŠå’åà˜WàŠåœÒþÿê|Ñ$€Çàšå@Šå á4Pþÿêð„C4h.» è sà‚â à‚h‚l‚¤0@ p „åà„â óàšåà„å à„â#à„åàšå'à„å(à„â+à„å/L3L %àP ËÔ/% Ô”ÔÔXÔEÔ È«¢ýÿêp™ È”*” (@”(.0h+„ä„Ï„/© ++„¨„¡„u„bìä1à’Lè«Aýÿê8 €8@ŠåÔÈÄ [,aD D_šåD˜.¥ €Ç /0D ¬áÄo  á0š .oàšåà/'  ø/¡ ø‹ø„ø{øhøø|P LPÁüÿêx „Àl DD \ < t < )¤''0    /±…~~kƒ0’å ’åü ¼]¼¨? 0Š´+Y´0  á¬. 0, T㸠dSã-œS^ã* ¨0€à”åàâèq# ++÷à ß ++ÿàâ^ã41àP1à8À^ã ++6Tãð0NTì ++0T | Ì4 È@ïècÄ‹0—å—ådàW:0†å †å  w†Œ10¸IÔ)ž`±QáC àžD@ç0 1Sã=ž@9@-0ž(3@ø³žå°žå ›åq à›å ›P" Ë° ã[áø(ó!†üAà—åü0 †åؼ°;d›(ÿ ãÀ á Àœå°‹â&\ã×ÿÿ ++ú0à _0ÿ/á¢$/‘$ŠÜL Ðdõd“èÿÿê@’å @<qæâ^ O 0 ãˆMA0 ã|T‘ ”å&Rãx@’å X3RáoD÷ÿÿêÔñ Tj`àäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZdP Q# Q#43‘ ++#8#E 1#b ++ÂäÒèò0# # #ò(>ÜÂÜÞàÂææZe"õ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`‚‚ ;0rrLèÂÎr@ròˆ (êÜÊðàÊÆèÊÈ@:ð@üæ ++HÞÞàæåðHÆàìÂØÒÈZÈÊÌÊä ++P±PB`8 r+0((X€˜:!@#& #òìÞÒÈ L  àÂäÒÂÐ L÷" ++âêÞèÊÚÞÒ LˆM$’M# ž—#GÆÈ ++pš-š**IèòàÊ,%¢,¸,×HB ð8 ½ú!ªVm/mb éš$SjBe2ò ’$¹CT8Ú Ú& ++p»Û%ºÛØ-"h3E"€mæÊèB ++È<%%b<À66]äÊÌ ++¨5++j50Bë%6 I· ó/Pá»$5( ô R*ÒfÜèZæèÈÆÂØØ(,¾¾Q .!°ÆÞÚ(0 ++¾¾ ð 2ÂÈÔêæèZÂÆèÒìÊ(4ÁØØÊÆè¾æÂÌÊ0¯8¯ã6B(  è ("!ÖZÌàZæàÊÆÒÌÒÊä)– oàå^ÜP^ã$|o å R$@€/ ¬¤œˆ P(08@HPXœ!)ñ, P8jU&$”ÎÊäZp0 (bl(fdlh $Ða .ÒÜD@0Q@æÒôÊqáXêÜæÒÎÜÊÈq)bl)fdtd$ 0^ _ò@0êpT0êbl fdà ÌÒðÜêÚ0ÈÞê!%PÌØÞÂèFæÒÜÎP& ++Ì;¥0& ŒzùÆÂæÊ `ÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@P)0@P˜Gà@¨òàÊR@ð@PPÌàZ1R@Pù@ R02PêÜ@ÄÒèæK E@PPp;p@-bl!bl-fd!fd-lh lhÖPo@îÐÞ@DÓD£Â”Ãß Ä Å# Æ/Ç ++ < È -^ +++6êpT%pT'bl&bl'fd%fd°# )ɹoè¦FÌèÈRz³'L( ñR@Âè@ÆÐÂäÂÆèÊä@àÞæÒèÒÞÜ@hdrf@ÞÌ@$ \æp ++ŽŽ ++ÊääÞä*S@R(5àP€"HÌÞäÊÒÎÜZšÍ(' ++¨z%3ZzÐz‘ÿ*(, .(0 2(41/65~$Œ(wÊÈêäÊ ++È$;zP B:Ø ++/8Õ ++z:Õ ++E* < ( ¬Ê->(6ïb! ++ — *e—/ Û&0×/( ò»,Û ñŒ0”ÊçÃHb¢R ++2! ++ˆôXôAú<Ï+([±+X@´PBB  à ®‚æÊâêÊÜÆÊk ++¢*¢*Š*A+ ¢*R¢*;¢*§1§§£ £~£/ “ö“/“Ï“Žb0åÚ0&Q2# ++²%/¡g/èGè‘0 ++PSãRå  >"d<Ê~&@ á¶Ê*8/Ù8HB" <ÊÈ<J ¹šã²ÿÿê(B>ÐR@ËhËCJB˨"$ R"¿,X(`(P ÊB ++>Æ|ØÊèäÊÆT ++PË Ñ(C²?D?€D?F?ÿ+F?%BA2z A@%Kê— ¨@HtaPx~*Q‚!p`3—8vÒÌ ++˜1%WŠ£öxBH pZ ++èÐêÜÖ¢3G«6 —å—å–9 .YyD%Ô2“!2D1/pý41M5pŸ #sŠBV°±xt ØÂÚÄÈÂpPXrÈ Z›azH A@@BJ☠ÆÂÆÐÊZæÊðàä›SWãœ?)o@ ãð—é9Äa;å9í™7Y0ûÕ\8tu6|4 X8q 0€â@ƒYÎ5Î5Ê5õÔ8Å:/=Å:ÐãqÉÿÿêš{2ÚJ=! ++p6L2’J)$ ++ @–b8[€×Çpp ++ÄÊÎÒÜ ++0g$]òg°@nHÒþ#Ä¡x X" ++X"÷ÀR*˜æäÆtŠðàät0ò*ÆôæÂbÌÆÌôÈÊÐhrfÜZfZfhubP7(+pTN*$%#'>3*()L#N]~?\bh2P02â>$df"L" ô@WÊÒÜÌÞ+9ÆØ(R¶€þX8^Q†Âæʘ]†etl!jþ^V*;4b2T0=?\bjV(>>¬ E]fpgðT“8äÌÂv>‚ÄÞÈY"1öX ¸B^  ++ZkfZ­Cà—å&«7_—å½2LI*"?o&o& c€fO —å–.Å–œË!%% / % {&: ‚º°’Á’•’°ŠR@hB\éÀá Qá Iæ4æpU  @½ iY U D á„„ /­„- ++*@ ¿!- ++,/=- ++·´ ++ª¹ &Pb ¬ 9’\8 ++p8 ++mlØÊè5 ++N ++°ŠG– 6à;ÐØÂÜÎêÂÎÊ@ÌÞäÚ5Ò(˜"ÆÞÚàÒØÊäZú ++ÜÂØš ü€¶üÂt@üºü~œP R5c,äÊ@€ZäÊâêÒäÊz7æ ++°ÒPà–(˜šœAöxBž ˜ ÎÞZ’ÜÜÊäEY2%Y %Y ++.YY"1Cnx&EI } ?•18@Ñ ++Q8ž Ã^ãf ++$^ã"-?ý 0žå žåžåžiN±XqP]LaN SæÿÿêD$” – ŒòÅL$dÅtO 0žå­YAUY%-2áJÐ0’å’å p’å‰ Ï Šå á  á´É^%| .I|Ó‘UØ(ØØ& ÜÐÄ ÄÉÄ0. ÄØÄÑÄ$ÄIO’å,´/}´/Á´Ü´™G28Rš"xs²žÀm@^ÆèZû'Ë,&€ä%²xàäÞÎäÂÚV%(:G í÷Ž¸1v&Saÿÿê²2 v&¸b ”å¤6 ¤"í¤1Äà„å 0„å „åH ¨í\\Æ\x> + !à”äì"ÿûj¹õG‡Z ÿp *î0ß à„å0„å „åë/e»4-G($ØrÉsÞ.î‹uô/YôÌôü O  #à”“n$”åˆ •cp+Õž44à á€ˆàŠå”ågp‡gp* gp D ×^—_<†<†@†j_c šå/|/@`éX/±X³XO P(X P"Aþëo%³q[t /ì \/ÁP/\xˆ"ÿýçe.-dp=”i*‹iÙL Ó<*äT, á€ Ø/ðàð îÿp ˆ/ s6BˆD7Ïjœ.å ç4 T"ƒýT/ ++T'/ààT  ++xs6Fx3? =2p°¬"1ý·h.e ¬´/Ðà P´/ý <PE³˜"òüD/a D'ÀDô/ñ ˜0$"³ü0/] 0[/Í 0+°0X/y0TG”  <(</ 0€) r < ¼H<&€à  4ð4Ñ4/­4BOã~B[; 4°@üÿêX/ ("ùûä/Eä'Pä@/Õ(¾\·äT,A,"¼û,/9,"¬û/yL"žûL/±L'@LH/It¬t¥\0\\˜Ô…¸a”å0”G5D¤-t šåà áSI08gm lñ ›åÿëâè áÿâà€á ‹âà€`‡?ïÿÿ^A!‹·j Ëk^A`"ò6„ _ Šålküµ~è.þ6` @ šåX ì3Råÿ븰/âà‚á €âÜŽ ˆ6äŽb*Ž7D. Ir"0rZÌëÏq/}Ì' Ì Äøl ++/-äh伄É/9„/Í„J„/„'„`/±„#w„d„C0”å¨i\p"úK„+! pÜ&€ à“åãâÉ?ÈŸ“åëŽã ƒØØ” ++ D*`àD 7q8 `îS€¿|= —^0`8 0'0B /vT5R|81‰‚h1 ”r/'‘þ0¼f¼B’åëâ7­êŽã ‚âàÜ(Ü2‹åP00d  d dâü/ 0' zIAœÿ& @ÏZz`úMG Ó0B ŽYr¦H8Ä.IP £rQP.ppQP4@ ;YP/fnYPYÊÊ[PdÄ ++@Ì/á$2òÆã!¦`nÈ"¤oàäÞÌÒØïP.phž(:5˜lñPIæäƘȘ#¨Ê,v<Ì&ÌDi`0,<7‘jK˜ )wÎ ++ÆÞÜì¾YµYaÐÂä·s#/˜ ÒrAæêØè' 6˜ÌÑ`iH ªÆ#`âH>Ôoià%nlà8o5ÞLh Þ'Î××&ÊÌ!Ð * Ò 2ËÔËpËJâÆ©t†@Ö<ËCÆèÊZ6)ÂíI?ØÞÆØ6S‘\BGBåš\^ÄÞð¿ÄÖÄPÄHÊÆ{k+x8BØû]rtÁ.lp™|\9¸dvÚäèȺEÜO‡Þ ++ÒÜÈÊð{VöÊb³yÊd¸ØôˆôIzÆét8Dà(î?äÊÌíhf.í3äÊÌìbg'Ú¡܉Þ‰ ++HàÅxÅ%šÅ°..@`Bâãe/ ãen5RÆãeâæE2M¬PHä plÒ—^&lh`‹^ h€ìäèÈZ½bSYèÊT„^äjXí5Sw¸_ˆBæj€æMg$p˜fLê0pQÒÚÚêèV˜OØÒæèx.jl’6A ++<€/drŒ/è‰ê‰ ++„x ÖÁmNî&¡Æ4.jd4, Æ7dÂ`GäƉ.ì+ÆîÞ.1OPðIܼ.hpx I9¾nuÚuðuyqúEòÛ€òEhTøžd/ØØSh"îc#ØØLlAôLwÊ` ö ø8F; ++Æâhhü  X^¤Aáà›.PM'  M'‹¥xu’0›å ›åtyL‰!!8Qã1!ÿàžå Àžåÿ» â ¸ áÿÏ â °Œá ÀŽâ°Œå!À!E .%%.E%Y" >)eCp‚2ÿë)¯âàá ‹E)E Q õݱ8”.ý¹)&ïX-°~ß*O°šåuõn’yrúD ÙPé 1 ++@ŸSxþ“¢üøRƵ6XþöÝhK 2üNºjjP ++HXøb8?rÆ(bM›€ ++d]M4 dgQg:8˜œvf?æÊâ~`Û·3æÊâ{`Ó'ÔöÔ,Õ*C„*€®wh ++ ä ++.bl5`ÒÜ ++.br3¬0, ++=&Iª„"hãXl b?ÚÞÒihßa3ÚÞÒµl܃Àp“gO‚ÆðQ hFXXµŽq€à ++l 5›/djPPèPPP ]$UrV7 ++HÛ/YŠÛ|\ ÛÚ/fl 4ÙhÙ*Ù+_zJˆÈd¯d¨/dbßj•ÚÂòÄÊZ½Oð* +++Å “p ^üæ@ÂæÁ|1Äêè‹4ÀæÞ@ÚÂäÖÊÈ@ÂÌU@üæ@PKV2üæR’I;ðI'ú²4g¨ j??äÊÌ?p Ðbs ++& :¡úHú0ðh tüæ@ÚêØèÒàØò@äÊV 4þU?büæL6pFüæ@ÐÂæ6*«>"8Œ û1bìKQXp2eH Nò(&æÒÚàØʱªó ÆÎÞæ`ÆrêÌÒbäâZÊæn{ ÌÚè%ÌÈiˆ'`"ìì(ÜèÕq$ÈÒäÊ…’Z L ›Ô(" $A&A ++ üæ Œ0ÎÞèï4( L(r èL Â踫5t ,%üæ8 üæ†v HÈÞÌÚö<w=Ž ++0 Y Z*¾7A(,B/0ˬ}T.XĬ#0± 02Xze~G¤ ++ àXR4àu8“(HÒÜæÊäèZŠ±Bt8zù/p "s8' 7 ++m7O†å8 d ++ïKs­EÙEp ŠBxï74 *ïqÞìÊäÂÎʇIB} yð7q9 ^¾> ¼tÄ7õmÄ78O/áOÑ ˆ)`"šBUR_¨6£7"é£77"¥‹7 Ÿ#X3^㇞©qŽ©¦©Å–©"‚›7³7›72¦©Φ©j«7«7Ç«7v«7«7²«7l«7«7Õ«7Œ«7£7Y]£7tå£7S7uS7MS7/ñS7S0S7aS7˜/ S7GìS7qS7|S7`©S7}S7›S7/µS7YS7XUS7/ÍS7‡iS7P"þ..Õd#2IES7˜/ñS7‡S7—S7/Å S7iS7PSS7/Õ ++1ES7 S7„/¥ S7GD S7|™S7P"Çü0S7\uS7˜/!0#ˆL98£/ /Åð"Iüð/ý+2\ 0Àˆ/©ˆ/Mˆç6/…/1\ˆ(/1c:{/Ác:/ec: ++ª·pHUH/ÍH'`H ª·g;;:ÉBª< ++ g;.üg;i/‘g;G"Ëú,/õ,0»šª/5è­6/mg;ƒ/g;kO4³3>\!”8UzáŸV.9©×L´ XÜ/Á\pB$j³2?^µ2 :8-2Hâ:‘Y`<Ì"& ú#¸#>?02# i@Ë#&# Ÿ/9BÓ.&Ê)À#D1.&ê#í)/Fî)tEB:ï)/Fð)?H`)#i™-/JÑ‚Jœ-]L ++P×)®/Ni//bFÁkæ+JúR)‚RúTú&9Zú_˜BVÑ‚Vú =X ++`×*?j×ZׂZ× \×&Ez×PxB`´yØØTC^…m8} °<ô)î¶ýkâ+/µâ+¼â+¸ ¸4 ++\MàO šåĽÌor^Ë+ PŽ ô º+Ð_²`µ+I9Ó) )6$¨3dÕ+MâÕ\f†,S:)€/hX%Y"/c*ehj ++Hn*¢lp"+ÑZì2(@X]ŠÂIHn&_šˆ ï%>pé%ú$% ++€r tvë$&^ì$“IÚx8)$R$Hrz#$‰' ++!H_  ò ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Ç`,ÿÖñ!êB H  L$à™åZá@*€Xâ1 ++0Ÿåê  ¦0Šå Šâ`òp–åàâàŠå@ ã ð–å…§ Jâ0šåà8ù ƒâà‚åã ++,°™å Uá*°Kâ,°‰å ‹4È àƒå>@ ãðšå˜@1ÿ/á@“ðÿÿê Šâ &À$@ÿ/ábˆ JâÀÿÿêüóA3ÿ/á¹ÿÿêjHÆàÆÐÊÆÖ¤ àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P ++ 0‚l3ð- ++ ++ÌØÈ ÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++ÌØÂÎæ á æÞêäÆÊ ÞàÊäÂÜÈ%"%"HêYð* L B  €T㌠++åØЊåŠå \¢ u  ô€šåšåçd 0ñj ++îäÒèÊXBb8(BL(äÊÆÞäÈZ!qäX"Åuè ð š Í„TãwÙoÙ^ ++ ã *au0âSã ++-ñ 0”åSá ++ âRã0“ ++pSãúÿÿà83^ã8T,@Éù`EâP…â,à™å^á,:€ùà†åà†â à†å@†å&à ãà†PˆàŠå `Šå¹ø& ¹ém!I á% EÍ9|h+Ý)Ošå‘•ŠEð"šB$ ™@ Šðàä„@ áŠåƒƒOM ++ë 'ë!ëG`EâÃL*¿» »[àŠå»t/ {·ò3à”å0^ã ++ ^ã¾ ++`^ã| ++P^ã1 ++@^ãÖ ++^ãc ++ ^ã ++°^ã± ++ à”å0) žÛðRáÿ àžå&^ãü %àž4ø<žlò4ð ”å à’åžå àå”å 0”å ’å påå&Qãà`° ã[#\ ++p áûô$0Šå ŠåpŠå àŠåŠåÿË€P(ƒ¢ÐQ(`( Jâ@Tšàq) ++@š$±£ ++0 á à“ °“å”å@ŠåÐp [üÁpô@šåàšå @”ååÿÿêPH jð Hqšåš88›;ÿÿê05,à@ ++ Ô@ ++ìÜÀ0“å  ã ƒåõÓ@Šå0Šåè [|©tÐ@šå0šåàšåèè÷à“å0 ã0Žå`EâDD±à†åà ãà†Œð à†åàšå à†å@†Háˆf.:0x$o h€h h& 0<¤Š :@ á@1„å°@1„å$@á„å 0„åàšåà„å¼ÔP2ÿ/áíÛ Ù˵”D@x+90àšå|JX.ð ° ãÀ á Àœå°‹â&\ãÿÿ ++út”„¢D½ð*áþÿê€^ã ++^ãZ ++ ^ã¡ ++^ãÍ ++ð^ãv ++^ãO ++à^ã(œ4^ãKp &  m˜—q ++ ”¬¬1Pþÿ<+á?ðšå\.\äÜOÝÿÿê”/ ”+”/u”ß+­ß”"L”€; ++à”åß1 à”褤@þÿêøRk!l ++¸Œ ++°[]D Ä ++@ü +++•ü ++00 á\4Ó:à ãà†åh ++ä ˆ ¸@à ã „lè:p„чå ‡åà ã à‡@ ›à‡å “åÏPPñà€åp€å@Šå& ãŸ0Šå Šåp˜ k|± ˜± 0šå šåpšø8<  Ä,0àƒÄ ä@:à? / @< À 9 0„œ à„å „å€ì°ÞèÄý à—åëŽã ‡âà€'h1‹å0ê0V0<0“åHHØQà€å ì€H]€å p€<.4$¼8]†å(`ŠÄ!8ìô1$`Š” ++q°‘å ‘0œx ¨ ÌPp€ °†å †åêK 

$df *.WÊÒÜÌÞ9ÆØhZ"8^Q†Âæʘ]†ØÂêæÊtÆ!jþ^ *;4b20=?\bj (>>¬ E]fpWÂðTy(ÌÂã,rÄÄÞÈE"/ú"  BR 'h ÜÊðèZèÐÚ.dB"SB"!—B)0—n Ò.Ö, àRæñ âRã žåàâ^ã4à’((à(3^ã.8S PD'f / @¾ ö+®Rà á @* ++zî&R'²êb&Tãõr N/êJ3 ¾F Ü6 2.õV " @v1 à‘4ÖìA.V "¬n1‚Æ# b(v!3€(?€å(ŽÆ#3‡(;‡åX€X@àåÚ } åpÎ#n¨ ++43‚åž! h v+‰tp”n °n ¦ pæ”æ $†9/ 6*v.®®fH®$U&.(”Þ+)¶Â"" †å †åê>ñ. !0ŠfX®,MX šån\צ" ðš#& z jðð.(häö“Jƒ(se<^¸jàŠå p¶' D!pŠXq1'+Õz H"pn ^6 ¤ Ìú? ‚D ü” ++D¾ ˜Â4 ´<S. 0d0\@!î""‹J".yþR.kþ4\PMP"þ6H6$þú-Šú Ò Opšåœ¢"ö•ýÿê|ŠB& àV àÓ5ÖC€XâÇ5j_4.i_4ëK4jB$@Œ6Pê& ‹6p8BTr$B$ ˜P0,õ /ØØî "hho (1 "1 3ÂØØ> l# &* gLÊ` YNÊb ,ë `ë `p._õZÆÞÜèÊðè<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZb``jd¢9>0uVÆÜè RÊää¢8ƒ.› h%2h0’òHB4  ð æîÂà® €Tã·R `!_Ÿ ++B äŒ< j$¥ <4¨/Ðl5OžåôŠ.)T% DmDD±DÜ5ŽŒ1àƒ² €,.´;50‹åÀC0Žâ 8 88888Dü;@@< Æ 0ôÚÞÊ,\ *áx`! <ñ&Š8àäÒÜèZØÊÜÎèÐX2T 65ìÊØ2/cÎÊÜæòÚñ82Xj406Xò ++ö8Xz4 ++€B¬ ++0òHB`8 Ú4 ++B(q;ÆhBB À š1~ ¸]—å 0žî*N+² •:ª ’åx.ÙxÏ‚ò²â@æÒÚàØÊn<ó ÆÎÞæ`ÆrêÌÒbäâZÊæbk:ÌÚè+ÌÈ;ã=Ú2˜<ìÂäÒÂ8Â>ÈÒäÊÆèÒìíW:I —R&>@>ð ++ üæ L(ä ÌÞäÚÂè Àæ HÈÞÌÚèBPHz=2ÊBïóXÈòÜÂÚÒÆZîÒÜÈg†pFDí_âêÞèÊî%bdîÈ$83ï$bpÎïWÈ MD`°FLp FÒÜÆÞä7ð@ÂäÎêÚÊÜè@ÆÞêÜè@ÒÜ@®U@üÂ`0ð P0@ HJB†˜TPÍ?æÊâË%d`Ëþ 63æÊâ¸`ö&L¸)NëP¤H{`ŠÂ²R`TxT! ++(8 ß( XàÞææÒÄØÊ@3(áRHHK@òZîÂäÜÒÜÎXÂR ++XZ#FEQ F ++hth‹+ ++X6" _(ª" ++P,°$"¥°ìÒÞØÂèÒÞÜ¿/ ++0 !€\P'jR ++×p(`BXa ++/V^ ++rX^ ++0^ ++³¨B\  P ý@`BÔ>"\vëâ^ã¡|’ '0À>‘¨> À>À>8@à‘åˆ9‰à=‘X ,<%<% Ä ˆ&Ê($<%¤Ä$ùÄ$1óÿÿ|H¸$‘h$ÈB +ˆ/šDÑD ÚŒ8*̯0Žâ@ƒå 2Ð.¡Ð§˜Á"rZ`îö"\`Z@B @ ƒ½2 @÷ u5b‚ ŸV82\C CÌCCa B\ ++K PÞÐ Z\8 š$XB B *$7!°‡äj$pZÐ^€ ¶P1Š$(J R3r’$ ++Éñ`(bdfJ q8BBJ$ø'˜%r¸ ++/hxhs@8B¢·Fò ÚÂòÄÊZäÊÚÂÖÊZäèÈ´=ü0™ÿÐÑÌßHÂDÜ‘ÜßF  ++JÂäÚfdd°B   *xöêèÊZÌÒÊØÈZÞÌÌæÊèæƒG½¶Fµû c i &–!1 ‡Ï7¿!C‡IC@ áï ‘Tã|êFŸ ÷8ß%óãa “â_j¯$ÙûIGùàÑ70P/IPÿ"? T¥ ñj €áã PbGbààã0ç#[)É`šåðå‹<1 шŸ!Påÿÿ ++㥠K á4T +%s4 áXƒ_  ã¤uP‹ÿÿêƒïO< ·cÌ!/ »í«ûI2KDò$âBj 7è¶ Ìù ùWí(ÑG@ ã&«ÒN"hN"Y9/1pžM Ç#Km5Pp†å`9H¿ˆJ  ãé7¶J0 ã~á[á—à ã  ã^pi3bÀŠå°µF$=Eþ µC*!µC"py3±Àšå°šå š‘:1Dv bãXÀàUjdâ`0ã7ÙGðà(ŠåŽáãB ážÀàÁPá: à Dã÷0žàôn0 áXO žåä_ à ã70Ä)"!BMBoà ãÿý/øýÀñ/êýü/ãýÀÜ8ÕSÎýÿêà>   TL¼í,û ýH"pN €Ã ++&Wãe=1 à—ô ‡C'œ / œ _p—å–ÈO  á¨ é&¥ ++¨´1TÜS¸Äp á0 áÀ á°oxýÿê4àh=0—¶(4—åEAOpå8”/9 ”S”$”Í” .” Ð|/I ||4-Ù /ëüG/i Ç MO®üÿêž „*í ž.˜üó ‘üÿê¬J xÎÆô  ++jð plÂæA3xl~CðB,FP BXB0 ' ++h|x"Ÿ6HhC˜B4 ú`°"ðX€ÈÞêÄØÊZÌØÞÂè8~¿'Ü΂ä,ñÎÊäZp8„êÜæÒÎÜÊÈ4t…bl8v †!gdh8ˆ!p!gfd8r!Š!gh`8Œ!Ž!”!’!j””!x!l”z!ó – ÌÒðÜêÚ8˜ÆÐÂä8| ++î ðšÄÞÞØÊÂÜH (êÜ °ÎÜÒôÊÈ@èòàʲ0å JHà ++ØÒæè~ú1Ñ@n 4ÒÜìÂØÒÈ@v @æàÊÆÒÌÒÊä=°(JX+rjpêÀ(ÒÚÚêèÂÄØ‹Z³ž ¸ ædMX0à á€hŒ0õV0SãŒH€0âSã 0W.@0 ã)U¤, ;—\/—å\Ì4ÍžT 1&P¥’0å°“åÄ` ++ å÷')!S&90 ´0&Rü‚ ++’åP4A ’åø4RÙ3õ?@ à*P ð$°° P 0“åÛhR0 ãÖÿ¬ / à. ¥""p%Ü ·!BTq’8nWð¦&àèäÒ ++p ++ê ++¡r ++ìÞÒÈT AÒÜèçõ 4µæÐÞäètv]AØÞÜÎI< ++Yx$"QzCÒ¾è| æÒôʾ|#æ `ƒàèäÈÒÌÌ ++Ÿ ~3Ãñ)€ Lp.€~‚„tv†ˆprŠŒŽ’”xz–˜|š L‚ð(Bœ  à æf E"0 ++­ªu%àÉ ™MPpå °þY3[ã¹ ++óÿ ++5›ù&Hâ[•påàâÒZ&Vcyc`NCÂRR°Šåp=µ ++ ÂB*í=ÆRC°šåÁ ++NU¨­PØ_ºà›åØÑá? ž ++` ÌOŠå I¢üµ  È Œ-. ã(âC /  PÃÿÿ ++»ß¸ /m¸‡Ü-€id 4!ƒ’ÌØ ¤0°n€!€ó@‚œz*Rˆ¨a òœ ++@· 8/#@7b8Bœp<4zžµG8-šÏÍdž8/Â!P%1º-0YNX3Ú$5ú71P@ B7òj=& 82 Ü#CÒÊÜèçH… CØBÞpz ] @`X`f ò  ++0&VH÷xB:¢CÀhB0ˆ¤ Å&( @ãbÁ]i° áÀ£ Ƹ%“2 W#0“62^ã®’áÛ ^"#@` /œ¿K=p</ˆ£U0£U} À€å°›8u•1 Tn °†å°™1Sù/ ++pOé/ AÏSa/4 ° pëK8må pe/•3/ 0Q/#O™2_0„å 2öëK (ÒÛNÅkV¸ª˜„Œq`@]ÿÿêƒ+OÌ1à ãã] ‡*ôb¦ph¬¨­:÷0ÊdfàÖìÞjÄèÎÂàÜôÞÚâÎÊÎÚ=(.$*ê(f°æäÆ'‡² ++æÊðà".@¨‚'¨xFh®ª†'?äÊÌ­:p…'3äÊÌN(n{;2Ú2 –H/IÜð“'ª’ƒp08¾&"H’gZæÊèB!=(& ++x4!HÞ spB¼8³ 1¬¸vºv#HÓ=O!Âï& ®p¬æ/3´³-&º„0¬™h;(:¡hF°DE²  ;@ØÒÄH „0& zhú>th´UTàT ++P^``83BóT½ÂˆB¸ ¶­"° ++»;0ã‹ ++ ++@—â‰Ë!àƒcVê å!#º&t$|@JÞ @3 ++É § “âj ™ìBâI1™ïf%%œZ_à„å ÌBxM±®,°Þ§ ”jÓ @Bšå°ÚÏþ,°x] qTP. ¶Á¯ò7R ++ pè]+åˆA tÎ6ú;Ì/=Ì R ++S{ÿÿ ++|ÀÀd¡d Ç/¼/ùÜ\G¸Ú‘‘›åžåƒÇ»ðH}º_PÚ j 0 á¿,ß8 áŒH=à‘3)`åÀ(*\3ØCI ++ à‘ 0^ƒAÀ’)$`` ›å€*À€GPÿÿê@< À•"‘ÀhöhÀ¤ [l‰ˆ l˜heCÀ ãÅþ=ºuŒHÌà(/ ( àÔWŒÿÿ ++‡XFO3*Ø 1¬þÿl/qØo/õØ „ÆX(/eX_,ÿÿ ++©T /Å$ †ÿÿêBB_ë pAú¸Þ/2(xÊ 0⸠dX*.+"« ' ]p]U*("/È…zpoˆoB¢¸! !+p!+ÂY), ÿ%bâ/L0Û)ˆZØ^ s@º¨0!0("8ÿ4 ++ 5%E+Ø—!h€@¬xB¼|*3Ð &‘/Ä) òI/N- ?*.YN-_”å±#¶1@”º³'Î- Ù€¯'òIDŠBq@(yCZäÊÌçLAʼ](é [ €å ++.¾† X%Qª¤Èž—pF€B¼k 8gJ À «I¿ =2 z$]bz1ß-%_Òê- ab$BÀE-/ E-rÀE-!`"fHÆ p oØÊèäÊÆ Il²<&94ü4h´<ÂéH'ÊT. Ä®<Æ+<øegeº$ ++P/4g’S$i%ˆR0$kR1 /oXZhl0'Tl0C/l0 0C_BÈ¥/xȺ4±@BÊ  h LB9G¢2A3QãX.\Ö[K‰f@Eªâ ++  àã@ àS3ªöðŽYà†p/ I(+©I(à†p.ÝÂ2: \ 6=`(¬/U¬½ž Sg! ++¼é0.00@Èÿÿª#H 0Žåää”é”Üp ->4DÔÔÁÿÿ ++Óÿÿê*jCjÊœ@*ÊúDn8Ú8 VêÊPT8sŠtØJ·S‘FW„å ÿ_ ïQï+S‚ZÊ»e0ÚÂà7^ ++P]+wJ×fHÌ&¢ÌK9Ê¥pž:0¥,<7¨$fjÛwÎ ++ÆÞÜì‚MHÐ|MpÒÂäÎZt&é¡ÔäÊæêØè öÌcpâ&{j?—(BÊ8}ê7Ö"îoÞäÊÒÎÜìn‘8ì(ì5êMh ’Îã' ÐÕ!Ò * Ô 2ÔÖÔ€\:*òM5*hj&ØZP?tÒÌÕbfb=ÒÙrb^<ndbØDŽ%‡º´¨´IHT—*ÛÏÞéDÑdéD2Ó/dbÓÚÓÜ£ÑÞÑ‘ªC˜®q<5hà• ++r4•R7$•Â0! %—ºiI™:$¼ ++¡(¨HXYzðH ÊðàÊÆèÊÈ@Û âm?ª @Äêè@ÎÞè…?eä ,8%üæ+È"æ¼— ++ÊääÞä ++0äiÒè ++ «A90ÎA R ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #gæ,E)¼ÿT(B¦ P  L$à™åZáá'*€XâÒ' ++àŸåêàŠå0 ã`EâP…â,à™å^áÃ':0†åà ã à†å`Šå>(´(_ `ŠåP(¥(n`Šå2>(–(_`ŠåP‡((x(Èi( P(((öà ã,àŠåà ã0àŠå '  f$ Šâ`p–åàâHò@ ã ð–åüÉ$Ÿ$ Jâ$@Šå&¨:¨L(`Šå$H,':¼Sà†å&0,0€':(àšå(@ àšå(—0`Šå`Eâ((Q ':4h\À4àšå0Žå0šå S0Žå0 S 0Žå S0Žå S0Žå S0Žå, S0Žå S0Žå( S#0Žå ['0ŽåÀ[á&:8˜8˜S40šå8˜°<¤¤’ÿm<H< Jâp ”*·&„Ìdù ƒâ`‚åã ++,°™å Uá¤&*°Kâ,°‰å ‹€O àƒåp pp }p(ipp Vp(Bpp /p(pp p 0ŒŒkþùŒ\8/U\G±\H/ \Gi\HÅ\H/!\G}\HÙ\H*5 \ üŠ%:  á‚€?à‚H"€µ€ /ì$€K/5 ++€ Ç€L/µ ++ÜDSpå 8&À@ÿ/á@õ@¬”,/I ”+/‰ ”?Ý”,/ ”?/q ”+±”@/ ”+/E ”?™”,Ù”@/-”+/m”?Á”,/”?/U”+•”@é”,/)”?/}”+½”@/”+/Q”?¥”,å”@/9”+/y”?.͘˜/œ"˜ ˜4¼ //Uˆ uˆ0ˆ9OÞ݈ NQ_Þe,Œ *OÞÁ\ˆ_Þˆ<_ÞU”+•”@é”,/)”?/}”+½”@/”+/Q”?¥”@-/\G]\H¹\H/\/U?©”,é”@/=”+/}”?Ñ”,/”?/e”+¥”@ù”,/9”?/”+Í”@/!”+/a”?µ”,õ”@/I”+/‰”?Ý”,/”?/q”+±”@/ ”+/E ”?™”,Ù”@/-!”+/m!”?Á”,/"”?/U"”+•”@é”,/)#”?/}#”+½”@/$”+/Q$”?¥” ” å”@/9%”+/y%”?Í”,/ &”?/a&”+¡”@/õ&À /ƒÀH_Þu'€ ^€Lõ€ 9M(€ M€ /ïL)€ Ê€Lõ€ ¥M*€ €M€ [M+€ 6M€ M,€ /ìL€ Ç€L/u-€ ¢M€ }M.€ XM€ 3M/€ M€ /éL0€ Ä€Lõ€ ŸM1€ zM€ UM2€ 0M€  M3€ /æL€ Á€L/u4€ œM€ wM5€ RM€ -M6€ M€ /ãL7€ ¾€Lõ€ ™M8€ tM€ OM9€ *M€ M:€ /àL€ »€L/u;€ –M€ qM<€ LM€ 'M=€ M€ /ÝL>€ ¸€Lõ€ “M?€ nM€ IM@€ $M€ /ÿLA€ Ú€Lõ€ µMB€ M€ kMC€ FM€ !MD€ /üL€ ×€L/uE€ ²M€ MF€ hM€ CMG€ M€ /ùLH€ Ô€Lõ€ ¯MI€ ŠM€ eMJ€ @M€ MK€ /öL€ Ñ€L/uL€ ¬M€ ‡MM€ bM€ =MN€ M€ /óLO€ ΀Lõ€ ©MP€ „M€ _MQ€ :M€ MR€ /ðL€ Ë€L/uSd/+/µS-?/ T”+/IT”?/T¨ \¨L/U€ 7€L€ MV€ /íL€ È€L/W€ £M€ ~MX€ YM€ 4MY€ M€ /êLZ€ Å€L€  M[€ {M€ VM\€ 1M\ÀH  € 8ÀH4/%]ˆ /å ˆS­ˆ ¾ˆT/5^ˆ —ˆT½ˆ pˆT/E_ˆ Iˆ,8ˆ’^Í_88°"ˆ €0/M`€ /ý €KÍ€ Ø€L/Ma€ ³M€ ŽMb€ iM€ DMc€ M€ /ú Ld€ Õ€LÍ€ °Me€ ‹M€ fMf€ AM€ Mg€ /÷ ++L€ Ò€L/Mh€ ­M€ ˆMi€ cM€ >Mj€ M€ /ô Lk€ Ï€ €4 4/Õk ¨L/Ul€ ƒ€LÕ€ °jS^ :$Œgt l ¨O¨¨0o^}m( *€Lý€ Mn€ /à€G(ý€ /»¨K/}o€ –€L/ýo° /q°S/…p° Jˆ20 áøƒdnƒ°(;°  °"0¼¼O0ŠåÈ*EqÀ¨n Lœ / 0H//ÍqP [é:ènènX o[Ö:888 ¸"ø ¸4¸/´è d°°j|^õr(°Š””¸<sŒbHH Ÿ àƒåà ãXOX\/MtX%XX/Ýtà /ýŒ à0ˆ/euˆ ÖˆP¨íˆ ¯ˆ ð4/uvð /ˆ  *l0”"ðÝh”"D*1wT”ü/qw”;T/Åwø /Ø Ð0/Ex€  ++€L/ÅxØ /å€$€4Ø4/Myˆ ¾ˆT/Õy` "—P$˜ ˆ°/08 3/}z8 b„$0400oZ {È /:ÈHOZ€ €L/ |€ /ðL€ Ë€L/ }€ ¦M€ M~ܬW _ZM~Ü@ ãðšå¤t@2ÿ/áDHïÿÿê4P3ÿ/áÔ ,°Š<{(W1<".ûþ<×±.‹þP|U./ÕýPU0.Þü¹Ži@ .çûxS. .äú.¿úÌ—q<b;.ïùÊqJ#.üøÈÔ.ªø<—(oE<6#P.ê÷.¾÷<¯ˆc>.ôöϪ›vQ*.àõ»–qL'.Ýô¸“nI$.ÿóÚµkF!.üò×°‰b;.íñÈ£~Y4.êðÅ {V1 .çïÂ. .äî¿šuP+.áí¼—rM(.Þì¹”oJ%.Û붑lG".ýêسŽiD.úéÕ°‹fA.÷èÒ­ˆc>.ôçϪ…`;.ñæ̧‚]8.îåɤZ5.ëäÆ¡|W2 .èãÞyT/ ++.åâÀ›v.«Ý„].2Û HèÚÿê10.ðÙ /ÞÙ,É,·,¢,,{,i,T,.BÙð.íØÞ.ÍØd¿rcTE6Øÿê Šâ¨b¡Ÿ_ JâèðZØÿêjHÆà`PÒÚÚêèÂÄØÊ ++ÌØÂÎæ L L@ ++ÆèäèÈ  "HÚÂÖÊZäÊÆÞäÈZèòàÊXB$B   Tã ™ • ÝöZR"ÆÞÚàÒØÊäZÒÜèÊäÜÂØ 6ÄêÎ@Þêè@ÌäÞÚ@àÂææÒìÊ@æÆÞäÊä ++HÞÞàæ0BL¸BÄ  (ìÂØêÊZìÒæÒèZÞàÊäÂÜÈB·@Ä I ++³ ›ŸpŠåŠå œ¢ u  D€pšåšåç0 0q ++bn ++¡ÛB0 u¨ ­­±ŠåŠåpŠ¥œ%@žåTã¹4ðšå•¡"D•¡Q5 ++Ÿž%ž›#àžå žåí*&í±à†åáàãà†• ¢ à†å 0†å Á |€àžåàŽâ¡ŸP0ƒâE)í* ++í81àžÕŸñ0“å šå ’åšå p‘ð‘å šå(Šå, Šå00Šå4àø`šå  áù Å[ÀIõ °N° ++*Ø°91™mÈSáË ã0âSã ++I00”å(ñs ++ âRã0“úm ++SãúÿÿŠå@¢ 051PP</kT&eT€ šå` ã"ñ^ã ++šåšå`Šå@oàå'pžDj„D 1`šÄ-Ý.=ð%, ,,,,=Àžå @^àjHH@HHHA@ á=]ßôÿÿêàã ŠåÅ¢ˆ¡_ šåÜÿµÌA»ÿÿê °àžå°^㯠ˆ!0äz§ ž5 pRá¡( &^ãž ++ 0 wSã›@—@-0ž¨‘lp°àžå 0žå$0ŠåT±0“å 0Šå 0ž”‰¤Ép€{à ãHßu(šå, Šâ8 ¢ÜÅ,@, Jâ D%\€- ++ šå   ++à á ÜRø ++žå Špjü5p1 šæ @;ÿÿêXÄ.‰ÄSëÿÿ ++$ĵÄ$µÀœ@n ++ØYÈB’ål0l.Mldl @à†å”! %)ù-à†å%p†â‡å4&4­p‹åâ`€Ð(R‹åà¤}âà@ Œ€‹å ’å¶0Œ&p7â0Ò0¬`Š0O0Šå0Ô¢üa00Ô0àšå0)¦’$^ ’å0´a´Ym†â 0:\-¤**-¤3à“pô@ e6 ü$q6ü_( šå`‰.îÿå ++€à8Î0¾0D˜ÿÿê0( .] (Dßþÿê˜5ÿÿ˜*)˜˜ /Í ˜_Ùþÿ ++å. ++oÇþÿ ++Úþü.Y ++ŒÆ< óÙ0à ã´Ø øW~þÿ ++ú(“éýÿê^ã?\„ àžå$àŠåh P8_ìýäW088   *m p 8/­ý¨Ä/Á 88ÿy 8.™ 8 8ÿ18/Òü8_ <.•(8 D/[/u/kü/ÉÿÄ/¡ÿ4/ûƒ/ðÐ1žø" °À pžå›å °Šå=$d"Üu¡tñ á@ ãTã•$³` á °šåQ Ä.‡hðhb °†å pÀQ*l@Ü[4ûÿêLoQ-ˆD ++u±ù´ €¨¸ PVœ"Ìü ý à–åëŽã †âà€|*:`µµV: ©µ¯ á á0 jì‘Eµ `,A á+h€  ám¶(d’Ìõ(c (T>!@šȹ ++ á  áèr(_p‘å(l¯À†âpŒå(¯À‹åp€â`‡( ptžåšå€ø (‹å ‘å¶(°;(0Ò0(,ÐÜœ0 *Ñ0b 0šå$@H(šå, šåŽ8%‘˜ÄsÄYd!€€lLl}‚â`Ä<`1à’à} ‚âà‚Ä h 8ý.Y1‚‚t ++‚@x® 0†å @†åõùñ<Üh l¼0¬0†p.êþ(/Íþ°¾£@Šr$È Óªùÿêà”åP^ãG1±4 ++ ”å ”ÈÐ" \ ™»+í`Rà á@¨" ˜ÀÜ0Qã\0 áàL_ùÿêð ðPðp†å †å¨.îÿ`DðÿÿêŒD[ùÿêÌÄ ḵÄÀ¹P@Gùÿê¬"à/Cùœ .îøL_Óøÿê œ¢ÀM _  Jâ¼=-òµøÿêú Ió"<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbbhpP (‚8ð+ ++ÌØÈ ++ØÒÚÒè æÆÐÊÚÊZÞÄÔÊÆè ++ ++Æèðè 1Ö  b ÞàØÒæð" L pBÕ ‡@ Æà` ¢,Šå0 Šå(p}5àŠ"YSH ++‘ANâ m Žâ‚ù*7¡€QãªÊþKŸ4 Šâ àå#a @8½Î½4þK àÅ^pK “½JRá€NÀõ ++0$ýbâQ ! ’1R  Q ‘ 4ñ ñ 0^ãD ++ ^ã  à“å àŠå “í m¯ü ++0šå k¼ÍE 0  á¡0R- Ï à’åêŽã 0‚q Û¥1à’}$ X@1º‰]S 0^ePÚ0 ã1!0ŽTB0žåÆ¿EDWEÊ,p_?,p@8é¹1%à“x 1è`”åãâx+"âj%râP‘åPáÕ ++RâW! ÏP@0 ãPÓ ++À@šåñ&y¬‘ €Tã@¼€  áp áŽÀ$",i!i!/-i!R†åzˆ à“å “å• À \ qÀ‘å \á¥b` âV !Àœ \#°‘å€[ãó˜™!Š@ ‘ ü‘"/$àP/ÉP&ÕP10ŠÞÁ1pš€p`‘å,Y ±8Šå<àŠå@ŠM ++¢DàŠå á œCp匪¶þÿê€;IŒh“8@Šå šå0‘ ++@é _€!™P0å""¹ ¹ 3Qã¹ ¬ àž²ã Žåõÿÿê0!"0à}4LnŒ!|"@€…æY dE!a!fa!à^àcj)ÝVÝ ˜ ˜ ++˜É!é.,†Ä@à†âÝ"0éŽ9T} ¢@Å#q::­&"z'+"@é& Ý/Íÿñ¢¥"é jéI ++ ˆÿÿê7îOF(©' ÌQ 3Tãu¼ÑM‚I jÀ ++ÕQ@œF;-ƒœR˜œ€¹ ++ œ j@Y Á ++„€ëˆ á  )Œ@01  ++¢= ++ù ƒù ÞUæU_ ƒåÍ ï} áÏ• /¦ÿ ð0 ++v jøÅ ++øl"~´%D1LdddQán ++d!‘"h- dfÈ"\ŽÈ É(u,©ŽÅÆ!å 9HVWo†åp á¨ /¨&¨ê+ +ý pt0 áþÿê¨ ++‘šþÿ ++À^ã­¤L“å 08 8 “ /€8 &z8 ŒŒ-ƒ gŒ3PãŒ?ŠkDé Q¬ ”<”*” ] ]3†å ]™ÐÀÐ" Ì/(þ™ Ü°9"‘ÿDä @ƒÿÿ8è ¢ÿÿSá|ÿÿp„“åâŽã ƒÝ ¡0 ‹åp jÉTÐ^ã±ÀOp“åăİÄ[Ä}Ä jÄÄ/pÈnL±È/pÌ#=Ì+Ì ÌœÐÌ pƒ]?åtýœ ÛͻюЀÐ{ÐyÐ4gÐà´/y×à/Äüç„.„‘„˜ Qác¬ ]/¬ «/0ü¬ K‘/0Ü„Ü@ ‘å q ++%à’¨ è èÑ1è7RãxènítÌëÜêÜè@0è>_ƒå¶ûèìáè„$àºÔµ1"8à"<àÌuOpšåX .Uy/‡û/tÿ’8.¥¨ .sûÈ"üèI"•üèO“üÿêP]/UP«/ûPK­&q€^ã/úÿ>õ/@ ‘åÜp/0¬ kü>ÁA šå0ôT¸?0”ô?ïùÿL5éùÿLì@úÿêEúÿêèP "ü?Ž¿ ¤"0"ÂÿT"ìùêèæ/äùÈ_/È«/júÈK¤¼$L .iÄ/Bút.L@8úÿêÔBø ¸9(180Š¢Ú@<0Šå$1@0ŠŽÚ9D0Š¥8n0 šåà¼@‡øÿêH+ aàšå@Šd4dl ldl  šå`¨\p^a”p&<'< .¥<Róùÿê@ñ+Ü´´ü&@àÌ €Ø@[9! l ¨7 ¬””ˆ¬‚¬ 8/ ¡$b†å @!=(L"p@H0H HHì)€$XX ++’ðTT ° .U °‡å"2’å0i.#  ++Cp átÀ ÀÌ@„l= @ŠpÔ"N^Ñ p1 @šäPt.!ÄVÁ"</Gù¡$ù# í#z5p áxÿÿê`Ù;,0“å$ a “åà“Ì ÐOšå € Z;å!Ä P@Øa0„ +ô-à’øˆ=šD üqŒ[]"Œü~T.©"T/òøW/ t"^/1#L41$4Z‘#4¤@ëŽãì  P8` 8`88$âo_@ƒåšÙ$íX ß(@¡ÿÿê¡>@¿ ++ô )è$“åø" ì!0^# Ý2"Ý=qâQ01 àžÉAí0* ++1),,X#`Qá  ++” –Œ˜"#{˜"- ž,St°/0  V:…%T¼ 4C "7}C3U?X éAéAtéAnéAØ"1øÿä1 žT €„$ &Q&ÀÌPˆ!3Šžô$ð @ .0ªXöÿê@Á&0t!t!•B` @y/B'G# l[ ++l!l!R0 ã0l!Xh!,[L}tXd!èd!\ðo¶÷ÿêWït@ ÐÍA/¦ÍA ,9B›,•XT`8Ѐ ,u-91HqRá…è‰-<yè à Fì,8ðð0ð8"$`X  ++õBB^á3°@%ð ¸ *)ìÐ"4Š\éD jü]) ++\"47!20 ã%ÿÿê4uF À¥ˆ0 áÿÿêì"ì|ø/*ø¨.M*¨#ìþØþì €üã$áßÝ"Dà)8 $ &p d@ Šâì%4KWŽ¿"¨/ßö” Ø"0ô)œÆ&X/ÂöÀOÀÀj˜+ñ+¤= š,/,pœ 1à‡1 à‡|B à‡å”‡ˆQà‡å(€‡” ++_ ã$ø"Ž¿Xä€ä_@ƒåqöä Ê ©î‘@@q ++‘;—O ++^ã· Ä„S “å  Ì+* ++D/_Ü*XG&4 °Ü ++ ++[o .°/ šPxd¬ªmôÿê@m.|ø øø/î¤ ++ „ƒ$?ƒåíþZéä±D¨\ ¬!´´€!1Y€å €H1 à€TTTTPè=À1ôÿDbµ/À¯øØø´W ^ãÌèèO “åà]àVàEà$¼ *í0€$àxŒ| ++༠¾\j@M1Œ ++ Xà*íà ØØà7àëسØH| ð ˆ1yóÿ.=2ˆO õÿê<l1"Zó\/¹2\7.3\/Ûô<#µaì 4Ó!”e=\0T.Œj á5T*„ aP1à‘ì±L ++0 á à“0 !0“ø´@&äQ&Pã$(åp“åWd/` ++ å÷à HÜ!œp"øá±R è1 n±6Ð ++ÐL u@S 0“åãÞH“PŒyõÿÿ0ž(ù=yÄ!à’0 2PÄ# ’Ä0^ão¨<à ál ¼S¼ Œ/m7Œ i-õ@¸2X[ÅX P ;ñ;0ñ;= @‚}?*)}?Hü# ˆ  ü+i8ü4 šå´¨ k­8À!^0 áÿ8СB0"Žÿ5:‰  ©DˆP¨6ÝRP@žåóþÐNšåñþôO¡þÿêÐ^è4 4 ª ñÿê¨9¡9x Nl/=//@¼ l):¡EU<0 <<r@å 0|ì.‘:Œ.øò€æä/¼ÿ”s”4;”/5;” R”T/½;”(” 8 ++Ät /-Ø„ KÈ .E„>Œ(-Œ(Œ'X# Ž¿ ' (D ++*ì( D ++$,¬æià"ËR0 áŸñl ++À ¼è !à” ++²y_ |q0€á pPá–Úüb“å$ ªs ô7 +}@pÐ!0”¨ ~H:éGTP^?Í@¸1àX MÜGè`å€àâ A¨ ”Ô   È ª³ïÿêÀUA(€9_ÿÿ€´5Xÿÿ´´—Sÿÿ ++ùÿÿê°ND?0žå¹C©E_@ á=Ô. 6” ++10¼1÷ÿÿP ¸ñ¸ì¸}HÌ "¦ÿø' P3 àà„ SŸÿÿ ++à|l%\t .ÑBTä„T8! ãä p0“å€â J"GÿVl"úþ&Ûð| "SD@  <ølùp@Áþÿê0 ,*©CØ"pž’œü 1ð—*ÝC   ,L¸>t*QDt…|6"áÿÝM”h!0” @& ãŒ\xybè ++Aâ “¤ "L" MÔí1˜1 “`@ +E@° 0Tã.È?@ áÐ/JþÐ.Cþ.>þÐ/9þÐ//(þÐ4 ¼ /4 Ì.)F ++*mFµI”tAOŠå@œ ’ÿ­F@@œ“8šå<šåsÀ"éý*çýXØ Ø Îß@šåÌýÿê^ãR ++ p)4p"ü/Ž¿ p),p)d p)L fp^ÙGl/îd ,do@ƒå’ïl4<Ð&?“å8 ì1àíÿT.¡H0 "tïØ9dd(Çd.Id"[ïl7Sl7 è Gè ,x_8¡Ix ¤Ð¨‰ø^ýI8ˆ.àà°/ïœ2²U_€^ãä ++pø(Rïÿ ++Ád„Ô„ !RÜZ ÙJÜ"@H Ä0Ü,Ü0ÜÜô”Hô!Là ãð\ *ÕRüÐ /çì€/€.US€bÇìÿê@ø.| ¼AøIøCø„ ¨6˜ ++˜ ++0˜ ++˜ ++ k¼x)T€!0šœD+| H *Tü ++H.uììÃœ¨†`0ŒD ++Ù[#~Ýn! hOz¼/@,1 ž09¢ “å8 Šå Ñnè$bÍn¡Qá]& ãÈ’  ã&0 ã°Mc`= ++p^@[ã!  ”:'ÀtQT?\á'tQ!tQ5?p”`Cp†å ¨B=p›$$ 0†h«á @”å °›åÒJt/$þä|CÉu00 ã¤ˆ"@0ƒâhÁ|„"$ ÑdŒ j¼þ¹[Œˆ"$ Ád"@@0;P˜ ++Zþ\˜LD@ŠåD _øúID"@ˆ< [üø…<¸Ô8 ;½8 ÀZ œ-œ-Y€< p jøø-]p$69À.Àð4/@ÀÀ Àp/sý”ËļÄÀÄ XŸ|X!°ŠÜŠåDŠåHÜ ’ÿ™^HH¨2°Ø%šåè°šåDšå¨ýÿêÀ=ir” ++ir#—ýirt ++,/2ý($'”.Ä^YeÄ^1Îéÿ P+x8#x8 +_x8_0šå¼éØ-âà$€|/¬é(/èì 8Ožéÿê)Ž!`| „/,-&„;# €&¸H . a”$YŒl$ÀOÁçÿêô.•aô.§çó  çÿêøRB  ÄêÎZÞê胀½a©a"h©aUµE!“e/0s€es€í9p“å —åá9, E+!A0àNâjo!jhO ’åëQÁ°e¸Ã+å7¸" eÔh‡Òm*A>]Dý] ‰8ò¤T /¹T˜u½Oñ¢B ø "äÊæÊ軂TÎäÂèÊn‚%ld€å åô"ô"x-¬!¯}h¯!šŒN–ßz  ++Âààåd råd@åd@€61Ÿda ++ÞàÜÈæždÏd'Éd¶ÆÞÜìÊÜèÒÞÜÒdÜÂÚÊ"¡:àäÊÒÜÌÞ*=±êæÊÈ 25 êÜ: e ++ eñXBb8 8â ++ÐB¬hB`8R ++¨Xõ*Š ++(B(8’88àäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZd 430¡'a ++ÂäÒèò¸ð ("ÜÂÜÞÁ„Y…õ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`‚‚ ;0rr0èÂÎr@r@ˆÀ+fl ,êÜ7rÎÜÒôÊÈ@Bò@üæ xÜ ÊÌÌÊÆèPB  ØÞÞÖêà‚„Y?_Oð ‘å0’å£0 á0Ããp®oðWáB ++°‚â°›ç[Ù.P ++p‡â#”$å"™?–p"àùG/p² "üif²"¥?" rl¡Yä`Žâ@žç€X ‘åÆ€  - pì`®``a X ++Q’¨ arˆ a28¯‡òÐà ˜"ØB. € $ÌÒÜÈZØÂÚÄÈÂZÆØÂêæÊé= ‘®"*nHj&Ö)j&Ö) Ö)Šdþ'ÎL<]qõ* 0B"ër0Rãä´À°’å0›åSãÔ† ó›å p›å0›åWáË­°„Wš Àª°àãpKà^Ž2Pª 0’å^!/0± f€…±ïrBÁ Šå¾1žB„:*z V„ ¬RC50 áp H/ L ¼R LÉÞ m– " K† à¿l6% ~ 8'3@‚3‚å¾/ e+ e8,šå ¦¦ +y¦Öiœã`šåðå¢ æ Á®_uÿÿꙎD–U#àiWŠ0i,=4äiºgü@5ÿÿêˆ Ü¼<Â@ :Ö‚ ÀCo P ++ /¥àox²&r÷‡Ú6[yB–@fP1p“ÔSâ00CªIðªðDe /džOpŠåðr%&-z%¨8:-Q á pšÂÚbŽ/ಠ+++… pÊ6.+8/€àÄ”È °+õB&˜¼¼DµJtJ4Rã¦trÌ)0ÚõpJÊÆÂØØ0"ˆ$: ++òÆÂæÊ& äÊÚàèò@ÊØæÊ@i@ÐÒè@P+ð@P˜æäÆ@ŠðàäR@Êðà@PP8£@PêÜâêÞèÊ@Ð RðÆØTR@\\\R@PØÊè@PPÜ QÜÎèÐ@D #RRˆQPPÆØT;ÂR@PÒÌ@PÜêØØ~LP*/æR¢Q†Âæʘ•†KcR@PÆÂä:P_žð°mGÌÂÆÊ@ÄÞÈòŠ¦ÆÞÜÈ@PPÌðz'%@Ü“5@ðT+ PÂ+7Ìðx* `R@|z@ÜGZ@Zbn5DäÊæè"ðT R¡P&"ÆÈÚð@Âè@ÆÐÂäÂÆèÊä@àÞæÒ† ô.@jjrj`@ÞÌ@Æà`\ææ( ++ÊääÞäH$&(8B, ð^ ++æàØÒè¡0êB#ë‘/0ð/iü!0š.=¾-¬q'* “ãxdF(ØM 7ÁX º<Þ"/0“ž0š.€ 2Ýd„ tÒ®3å }å 0å ¤Q!rd“(Pe“Cr Ä/9±|(Þ  P@îQ„å0„†3 à„yy„yy„yy „å„14.*¦pN2*$%#'".*#)02X~?\bh24  23äÊÌ6n0öÚÂòÄÊZæäÆ ;Ið 6PT¿ð  * 8xð!ô (‚ L@BûRð Hý¬%Ç Ë(ƒ ã .1F°F¯ „å „å F ù8ÛGÇ /ýG@ šåÅù'„’F<p÷0ÊdfàÖìÞjÄèÎÂàÜôÞÚâÎÊÎÚïãq:¯4HÀØ‚J ++æÊðàä!NzA"72V!dlYz ++V':JWðÊ`€Y Êb;z@Zc9CB_–pD0µ'šZm¿%jl¿6A ++<ÉrW¤ÊTÍI–ÊDî@ÀBVŽ2x ڲ؂ œOØррéð_ 6A+! = == Ñ)\€\/0„IðEúÎë ù Ãë œªœ/Áœ”ã“’LÛ¤2F¬;(:´Hf&J´–ØÒÄæàÊÆ2ß"Å£LѸZR8Û c t ²j¬^P*;4bàN™0=?\bj¥PÂP>>¥E/fp^gtð–%ª è@vŸ kR1ˆÈ~T*/J.fdJ÷9GfG IÆØBTþHþ` ++3šl òPFXB\ È oE3Rã™Å1p¾m(0p‘åíT¢p!p—(W(IA 0ºe0SãÐL!0‘@¸¼ (WŽa !p´zq9°“ô Q[á«ú;(§(¡h(“òV3Wá—P°“å XÀ\‘œå °›å `œÀ` ÀœåÀF.[æm¼‚y°Â+[OÄf\­!pžÔH[À“å°ª2ž+˜`ž+V˜b@âT˜!`–˜V˜G!àœÞmçR?ž}0^áäl!=Épz kü¹Ò1ýŒ#p|06- Ä!°¤1ÁÿÿàÔ~3!À Â+»~3!°›$4[ã¶.@p²n3Wã²²n¯@ @ $„r%/ àH:>ð° ãÀ á Àœå°‹âž,w©¸>TD@â@Ì3Sãêo—’$Z"¸X´ è˜ZPXP8ð!¸¾ Š\P"ðX×%=X ++à- ++8 (XA`’.h? –!ýzHlbpbz@( ++€»ó(Ì ÂààØòd@Î f¬z_j <pw8bƒa#ÒÌÅÍ ++· @b,QÑF&RRÝÏ;pjjÏÖ@Bb  à^/ ­QT­J­)]*15L ++Så ­Ü Ü ­q/ 9tA( À \ 3€Ä €]t K ” /òÿ9(äh ÈÀ ¯#:ˉ3'š'/¹'k/aÆ ¿k "ªíE` ++I ++Uh šbC!HëD Úb%ü‚.xBh ‚ Ì¢("Yr.DB/:—wf߆. ++&¨’ ++mÕósªƪ v¹v< ö#cèLtÔ“. †È —u! ‹·„ÚI!k‡ÚŠ(8bF)"00 "@ïd x_+ë+LH/@L [\YLW1›„çP @@Í!@à‚âÍ!3‚Ó…‚ž¿/‚0;9 €â‚ 398€I/ ¡/ ¡ " R dÍ ++ òËæ¹(—u Y@@@2ŠÜ+/5+ Ø+¡#á/ } ,µ8”L @Ë{Óç>+¿þ-‘ +yÜþ,§`Á þÿêFšdXóc€` !f ñ àÆÂä!ôëC @*Z¬ÆÈ)H)I(Bl@B\ ++ 9 lH0fN˜M#P¶+A ++hX(CX¸PB."`© © ¥ ++³ ++:nfh ++Òj ‡0ÔÆà`D±öÖ 8êÜÊðàÊÆèÊÈ@Âàà@°- ,õ8˜p O R P Z˜ ðZÞR  ! kdfphh`š ð¨Bx    Êðèʆ"ÜìÆî&& “ÉG ++&>"·+¡Qt<±°‘å 0›åà›6'ñÿëâè áÿ?âpƒá À›€]*(\ '1ÔFÕ†å p†å À†å0†)/ ‹ ++°}äû ++Ø;ª$ûãð·1Ú’22ÎÆ“25Èÿÿ22ÃPà›å`üp†Ù½¼FO`‹å¶G2ø72 \\áñ@´6Ljp_ ÔU.!\j ++&£ DxDeD•b0€å @ÜAsß 3 •/y |dÅ  ++ÄWJL›3 à+EdO šå7€!0²f2` ++ØÄ”0p !r2 ++jƒ!`?ÀlÑFÊðàìxtÊÜìñ&îÈ—VÚÞÒg2Ü^2 ++檗_2àÊÜÈÒÜÎ:(ÞBDn J p.æÒÜÎØòY!†ÊäÊÜÆÊÈZVRs’ ØÒÌè¸2Z™pˆð| #„P(r'ƒZ|ìÊÆèÞä`·30r ++PHvôD b®2#t,xÞØÈZÒ´3UÜÊîIVÜÊðè<@v´`•C xƒB ¢x‰"‘8º§ðhB| 5° ØÊèÒÌò`t"àTQ; ++&¦*~,Õ¶ ~,_°šå¼Z/‚+& ++‚+Ü"Ü"ëx`&p ã&`Pg4sPÉ ++$€!`ŠJ+uðphb ‘åxXL}CˆX`BJô?Ð8"`Y­¤âM ++ H#H n ,!à‡R? à‡ÇžÌa/¾ÿŒ@ @ã(Ö¸!¸¯°†å° á%p—/ [Ì)Y¶ =ô@/ D \ØmD0D" éN„w~ º)X8} /ïÔH&éÔHX@ã ++pe"-!à’`Ù<° ’å ’å*â|]:3ôhNä0Û5j0 Uj0äZêáC?S㻄±„%+„„!Ù„ | ¸UŒði0}œqq @‡å ‡Þ”q10‡Ø q˜q” dhJ&^”< ++GNì Œ ++C³" 0<‹ð@/³"!“³"€J—= 04  É™Í ìÍØÊ!  ++D  ã#! ‚#«jƒ71à”`I1.0 ”å¢4%®àåå \Fü" è °¬ œR1q°xp åøs=„c5ì! ” "°Ô¬dÔ® å°å Üà& 3à/eà@XS"ÑÿPZ9B3‘”å °”åÀ”¬ ä+äðå åÀåÀÔF ˜š˜šÐ/U ðÐáðÎÈ] q/% ++Ð/Ðþ ÀÐ. Ì&ÌO å <õÐ/œþÓìj.þ mþm’ÔL—bþÿ  ãa"ê@:þÿ ++L} ˜”n" þn"” _T\!þÿ—Î.ä^#ìä^Ä0„å „å„ål YîlWš® ++XæjO°Bª³ˆ³(´ú ¸Lpžå>1l`/î¼#pÀ âÚíÀWª° ++`ÀÈÀhxB à¿ÖþO0—åO`'ð௯Á ï§9Š²Ml˜§p§ا§‡hÀ§‡h£7´ ++H£ £²`ègTA¬€òC1b| A3|43( ++ÈiE5º|³8(ðBà>¨8`+eH S??ó¾¼æÒÚàØÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæÛgk¶ÌÚè+ÌÈIl0'Ll§¸ìÂäÒÂÜè ²ºÈÒäÊÆèÒìTl¶I —˜?¸I)º>¼>ð ++ üæ @Äêè@ÎÞèæ$¾õ L( œ ÌÞäÚÂè ,%üæ4&€³ ž HÈÞÌÚèN0ÀnS² ¬0ÝAH •TÂ)úxRÄ8#ÂÐB8%Ê(d ++PWVc0 ++€P?`+¢Hz P" BçPø ¦TPZèÐØ‘ ++Ã!—X 1à—#1à—`21%à— J1!à—|À —å —å —å¶g ¼/pÞ}*•?.{€è°ðÂBÆ Eà ++ÆÞàòd¥@(ŠåI;c° á]:jÀšå%@›€'Q:”9: F‰’‰’Q:&@Q:#ý €W2:ÝÉÈ !†åZð!à­"=x ++Å;Pá7á– ƒÁ•”åˆàâˆ^•LÄ0ÉÖNí-ÅÖoÜ…0Pøº‰OÙÌ“^ùÔ ÙÌ ÙÌ“~]0 ÙÌ–í.s(Çf/ 0¬ §=ÙÌ ]%Ñc{",0}®#µ3Ž*yé–1,0šŠí¹E",0}QÅ® [½D"$pöõA§Û¥G OЉ—}3Qá†$ ñŠ@$0ÿ^/©0//í07Ä• %½ À%8¸E¨#UT!ÀŠ‰Ì(°jðí­°ªù„ÌÞ¼ˆ/ˆÙ?Ðð†ÁN¢` E3"íÿÅH8"¬H À0PAÎÜ6+`‘40Vá~(!tÿY/t//at7&àgHµCôgH¬"”*0°h1 fÔ= 19<oAË"ø&¸*0°„¤ l4@^á`‹ˆ!‘–WqQ—åp“€à!`›åà—6sVá©ÚdQ]—ì QìOªä. ++ä,át-¶%ðš´Ä¼"8Q¿@µ•bà†å uXq'à—åà†D3qQ"p…Êbà†åÀƒHÐ#à†å'0†åà—å+$Cà—å/¥ÓÀ3à†å7†å;†å4 ?µQ Œ¢4öeZx.¨Ý_1à›ô›ò ‘0™Q  Sà†å Sà†å# b'à†å+ 3ø7;!/õ |Y/} |ÿ ”h””#3P㣫rS’å£ÌdÌäÜQ/YÜÿ Åí Ð/ @Ô Z?Õ—¼@ .ïýUOèýÿê ).U X&ÇûÁ×ð½ûÿ @”å»ûÿêªz;(µ(OnÐ|!ˆžC ++Æ÷`C ’ÆléhÀàèÊæèHâYÈSO R%jR*òRãpBÚ Ø ÌÞÈɃ%€ð~$I±I±¹ `šåÀ›å à›é²' ++1!  ñe"° , |:. l (<µM ”  jpá°(4"°]è" ÀúȨ™©´ ++ˈ °ü]›å @“OaâQwqâ Q¨&úo€‹å0‹âÀY!|˜Y! ` Ð|˜ „„ÍJ€ ãàMˆYUqâ Q½Jyø0!°ŠU§qV1< ŠÐ@­ `±« jÙýW($UÒm/¬'u”vp"°”UyFÁ_Y´” ¨P ã¨Ý"â QãœÁ`2\ã!ô?ãͲ Ì ÝX"ÀŠtàØ jì¹ØØ Ü åXÀq¥" Qã‘ìb”0 ã ¤Ah!hØÑ!œl oàMl 5X.ù·öŠÊ(Ì(Î`BØ À (äÊæÒÈêÂØÒôÊg†@ŸC@ á=q"À/×T:Œø¢#pÛ—"ŠqÀT ìgWT#p×—áql}‚†Ÿ±Ëœ[sà‚åàœ£Œ££P{ºcC H˜þ>~ U°#„â” h$|f´¯˜a\aº| +„Ñ?„å£\aߨ™{2[y§"0¸ u§ ++ TÜ'D¡´_ @šåkåÓ [,TQT/ @XY/ÕX* @\vÿÿê2Ò›ŒPÊ~Ó*ƒ˜X8er1Ð ++æpÖtÒ† L/5Î5 ++5«Ð!tÒ)QÔÖ92F H ŠØ; c xÿaÂØ` cÚÚ@?ìœphܸÞC!¬rVàÀâãVèë8P ƒ 1d ¬ Šå$Šå(¹j"0T&….Ùˆ€G€æ â^ã½Í©`ê â ++^—ƒ 4Eh1pÓ‚¯\GTp—å±Íp±Í¸G% ê â ++^ã¡L˜Lu1q1Í(E_³ [1³°à6ë â ^ã[+–/šH ++[8yHŒ%˜ •+ IÞ[[()æD õk410Žt@0Žâ€ 1+5+)ø QPBà‚å«›Q‚å @‚õj0à‚ø7ãÉ,\…[8 H ¸é-ݼ±Ü|uT3 ã Eî"40à Ù¿(tð|ç\è.èrÑ+=,Sp ãkiTRP`°1¿Ì/9b‘xp'ø ñ ÿÿê"ÚèÆà`f˜² 6dÈ[î‡ä]Œò ÞÄÔæZÒÌZÆÞÜæèÂÜèP‰ jû*bY¦²¦iž°[[¦iUþ¦iD  DD‚/0»S»+3’.21a ++ ÚSÆÁ= ©‹JRSÒ-.ðßyªá?„å †õ؆[z‘ù O0šåÎÊÇðˆ>Â1Sã¨X‡žöë& L…aˆ"@Z$ˆ÷‰©'V:ä ++(4'RxBØ:¤Â`Bæ È D"ã5rXp4úsŽ1 —»ª^/pi|m²–a‹€ $­ 0r†Ìeñ`",]Pà—å1Ê—+-)}ÌÈ 0È 6‡ äÈ \ÉœOpšå–”&ô²BP8æ`È ++@AüH[•È—Õ­9 %'‚…”P5 # öj B( 4zA!Ó{‚k "Hò1ªæ7*(O!PÔ@(Ý6 1b7 ˜ HÎêÂäÈ &|*P#8!¸mf:è ++8_ü 0â Bö 0 ÚÂÖÊZæÊâe‚Ü\Å·P/pWª*mç< WªK¬/ ˆ4h³/plûÙlhht5lòüt5f'VkV DDÔ)Ph / ¯ð{ 2’åPwDO 0’¨ûPøHœÆ+,ð'R?¿?1—ÿÿ¨:T:8/à< ¹ƒdy8"à<(a0 áèÁ/ $4{²Bê y¸ }*)Y/‰)YgY"g)YDBz<N8-‘Í(¹‘A1æ9 $‘0ìâuUn<¤²US0.¥0"4\ÒUµÍìâ ^ãOÿÿ ++LÕ&Õ&‘½& !pÜ“Õ&Õ& <À<»}C8¸]/Oâ)OUÚê¼\[RaRµ^ Ikê@+kÒ§i/qê»Âwòê ì)“@Ü`Bê8)x¸ôò“»?æÊâfQ.d`fQeR3æÊâ^Q`^Qð^Q ^Qò^QëMˆpô€ô‘³$X%€¸! GBöD&)6èÀÜJRA²Ú=(ë/bRÆ@L‚ú  øÂ)5 à—>ô >ôq>ôrBº à—nëÈÈêŽã 0—å Ì,TL8 îç0—å —.% .%îçÌñD!ñD5 —þ*6M¦) ­¦)¦â)é<ßüØ*3‡Ž~V ++d† ž;CrúYSgêú ++ ž;8gÿ¢Æ8à(â@ ¨î;%!Rî;+!Úî;Ñ°B.8%*ÆÈ._)Æ O ++˜Bü €*&©ž,¡ŽqŽ ++3à—š` +0€¶p^á†/eBP0žå; áB—š„ ¾+wÏ«#0%NR†å§«?70—H ++`Hçª \."MM1 =1?¨='0—,"=Œ30(®ò/p†']t%™F öøD"Š@#à—5Õ Žâ„T!´* ´# 0 bàü ++7" †$öëì1;à—¾ž>#— ׫A®`ä"ÐÖŠÌ'\Uè@;0—åø· ;Q ‘åÆ^"‚Ašåù4a0Šå0—ò“"€Ô ø   É6ap"à.*; TT /TD!TX#¼$ºƒ¾›1 ƒD t"@D/à67•67x"@¼#àp· à“â*cã0Žå?ÙEt'?Ä@eìxNx ++Q88ð ']ÖUX)O Cà9•C)“÷­?”Dµ~ À@*”@ ++É}ÌW!ž‘~˜%àž4˜"@®/è LŒx#†\ ¿ø§o“ÿÿê×ïÈ0 ˜/ýþ\.ìþÁCø .¼þ .¬þN:™S‚þÿê3U"ˆþÃ_*¡´3"p‚‡_Œ.Xþé0ñ BòBx8âü @ ªü1_Ö ØWj0aBü=Czüljü ++P=$@=[a†0Òü [[, ++(!¹AZüG1µ8½X¨˜Bþ 'x£&h£`XMSM ++?£/£M;£ 3 ŒI[/7[S“o ++â» ++X³Sáàãʲ# à% !†Íì~ —å! ‚8G ÇG ‹å„ Ü¥Š¥ç$‰£-`‚ÌT3ÿ"'“ ++EˆÕ#®çÐ#e’3—å‘å3-X"°3–µŠ™bŠå#0—+A—å q5g-? {•.M­/"à—''TT ¡T' P@À9à/ ñhpY>À9'7'7'B§''.8¿Añ1BŸè€à^àjH)Ÿ0Eàã8Xt ™h$ á4ÚƒÊÅ¢µ/–0,2, ,qñþÿê+ —Ø°\/:·# ´°TëTÛTËT4/T­T`/¡T?/õTc/mTCAT$-Ts{  {  { { ¼A<7” 2·*‰@ë ++ã8˃/-îP-$P ±«ô£ ++@Âýÿê? É%bj  S>! ¢.™ýŸ ++XŸ ++°Ÿ ++¸“ ++oªþà“ ++{ Jþ ++Èaˆ ++# ++0)A¨m/Rm Dòþ F#*þUm$ ++(úf`8'RþÝ ++!Øe/7¢ ¶c1H//=ÊÑ S0%ÆÝa]kACÂÆ/( gúwEøfÚEEB?g"r#3êOb$€fd/ ++(«à¬>P> ?z>0> F&¦hÆji.jdji,¤hÆmid{ËGäÆk7fi–fi%³hÚ P&K ++/10;/U"¢c 1˜)/[ò) B˜BÆ´’&HÆ:L/eÂL % Bäâa8Ø>@mâÒØD/qRD `(¦0Þ€ÜhñSPBöi2ˆà  '0h"n¸t Hoè #uO ++-à— sI s™ •d¥d¥dðQ )à­d1 —ÝÕ¸$$ d +++½$¯?šål l/@l¤.)Ð ++" p™§"àHP-—åoqeT-—å¼I§2¾ .™Ü/ ÿè0’ ÿS&˜_  ÁXB / ¯@"ÒÌæNΧ ”¥ÖÕDÇ ++„Ë# Ä40àå°ÌT .yÔ4«Âø%6ÿI6ÿ/f¾u/`J@LLJLDL>Ÿ0á HRvBÜ=¬$<êx¨ - +- fªppŒLpÂD@XÉW¸Ìù /à2@ìùÍ¥Iâ8 êÚ¬ å¬æ9๠âA ;“*¡.× ;&Ñ ;Ù’1p0HpFNWᾰиH°Ðü" í“!°0H!°‘$Î <ÎH<Î<Îð‚BACp‘å0\ ++X£ô”ΔÎî”Îé”ÎTåT¬T'¬!¬îÿ Ü&Nîÿ=Ð6¥•€Ô;ÔIøáhA!‘ UP>ºFAQãPP,)šôàt.:@˜þÿêH*ÁØUÀŒÜ°D89Ðþÿ8ð5Éþÿðð"Äþ¨Æóô91¿þÿÖô? 0žÜFE0é.®þµ ðÝ–b6z ++@@ž(?@9@ ŽF'pLìäÔ L&LÑ$XÌ@%þÿêˆÖ´œzE“8ízE/0“4úýÝêºÚEp˜0WãÄ`p”pÉ-a´ÆSðpMq °*Ü"áýÜ/ÜÜáD>Tmhnô{€ žåDþÿêðBN³pQR“å+þÜê")þŒ,*ÏýЦøH"¶ýf¨&´ýú|˜F1œýÿÍR íc@˜ýÿÁ  [À<T ++.Í ++T ++o}ýÿ ++D. DlD-@šùÖ¼+:Vˆ` X` …t*­ó#ýÿêŠÊB ++  ø gcÊâêÂØ~[L “Xcú^µ ++ ÅÙáAáØË»áQQEáQ¬Ë»áQ!à‘\úÝP/Lâœ)+I-—À/0ÉEÉEÉE0¡'¤; @‘ÍÙ1RáõI÷ 1-Ÿ…/, A -.bßJ2 å° 1ÎN/æ³h©:g¤OšåÓb)'QBÜÈ,3¸"¿×àåé(H€,&w ê ++ ++03O`V˜" ÷ê @ ¢³á§}.bl’¶Òºärø{Ï) *ˆˆhZch"‘°"¨" ++°Ôô8 (üæ@Òæ@ÜÞè@Â@jUP(£öÐ ü€¶üÂt@üºüð-@ÄÊQÈÂèêÚä-PP3:0"\ Ü`µr"øô#HT.%`p ++PE/ ++@x / ++X– ++!@/(àP# ++þPª+00n öB,t/" ++êç‹(AJ („,%X +)IÈ Ò@ Þ+öÕö3`n$ˆ° Êä8dÊä1/dbf'g/ï ‹ÆÁ‘8n0ÜÄ[QX XO)@—2 !èBd™Êà-=°V@ŸØ!ñHpdXdxn`dx£0"ÔƱ ÄÞÞØÊÂÜZjSÈ OO /4OgÿN#ÄÿN+à’S*ž;´¡²—K¡²!¨ÃKT,›`fh h’ažå€Q7I 7&~[LgL•a‰±ÜrwÛO ˜Ü\9 àžmˆ#@deˆ_o4J ºg4—(p /1%o4b<â o4oìâ o4 o4o-»Y^`ÿÿê0Ü!k4¯ k4<.ìk4o-  ü¢N U<¨pÁÆCàšå¡ã7ˆ‹!€‹û0y³ FK oçâTDÇ O+Z@Mÿÿêssð`ÏB øÏB€ *-Œ*ÓBs,â Rs:. wI#p£*"Þþ½¶*©"px"{I8 ÐþsJ;á8@@<wI HD °/™DÃ@@Í ++> "É$­@¿ ++Ÿ ^O8ä!/äS"gþä/…ä{œ /5œñ¶c9[Z ++ ŒŒ$/¡ŒSŒ/Œ›/ÁŒ„4/% „S"£ý„/• „›/E ++„oB"”Ô©"Ô­"ŒÔ­"ˆCN„>¼1/Ñ ++¬S8¬/A ¬›/ñ ¬@V*`0* p0à 8Pn÷àâØ(( öÊ 5pj²=<$) Ë&¼= ++X,8LÀ; ++d= Â"x™;/=nÅ J1[ * ‚* * #š** )¢*à*/ú"èd‡!&"cèÌY£ ò.   ÌÒÜÒæЖb0 á àAD ýe1à“ó†ò “å“å°“å!À“å%@E(¬ŸÇЭŸÿ ‡å‡å°‡åÀ‡å!@‡å@ÏÐìŽÏЈ)g!  öq}°“åÀ“J,£x:†å °?ÛP†åp¾†¶† „l„!’L’Þ ˆ!‘„Q®.p</`j ¥:+¥j0`šåë¾^ÇÌQ’åà“ž .+Q ãŽ ®j=ƒÏpãÒ>èY;.QY;µ VtJ*b€,-/Ñ, šz@3åPÂA å ãO  árÑæ B:X*Šl,  ++X¬%B~1Û=«Ÿ=˜!×=pl10Ž$h°+ .°$ Û@•Š$%k6×4%!4%¾DßXúB( È ++ÈÞZÊfFðF š>¾/e0ÀÒE­j4ߘçÃs!š4%)/-àÇÔ®ªm&0YÚ/’ÃiÚ/0Ú/wŒfQ;ÊA&2—ÏÝj'E?×cE? | )k`çú.©@ÜGÐ:ü ^ 8y=>÷rb ++ /-œPç;•É/0D¥x:M_u:’0u:õ=àæ1*>JoàcÆu:Çe /¾ ++ ™Y:Kj/'QA.ÙøþF»¶,ª *ì| ²ÏhuB(ÐA)v *`üå0XF\‚t J( ++XÜ ++ù–Àj Ê*Aâ>, #¬*sZ, ++ >.O Pb.E/— º. â„,, & ++ )ø£¤à@à8Bã .û9$ÀDD —"´  tW8 *åbÆÞÜèÊð]‘ "kœ‘!¯ú‘u2  ++nË>£ÁÐÍ m3#$f!àžpÐ) ++M |Î&0Í  ++DB÷äÊæêØè p  6Z!€þ%8O!vô8â°O"„}!8¯€!-Ãò!@87Ì%‚?ÂÄØÜŸ.p`M¢877%jL¢>:ÛŸ=¢%@>¢úp(à7 â4#( p hB  ++PöC#˜%M †™ƒš5uEEÊ>ê#p7éAÀZU 9õ)ÝjvP ++¢n_¤4H,¥%B=žuvhá˜&Bв“w`R.¡ÃZÈÊæÆäÒàèÞä~1œ˜°m:Ût$°BPBäf’8 ++ HL– %T²QȈܕ#DâÛ4È KvTÖw>!ÿ‡e(*¡¼y,“ålÌzý.Û ++`ÌøxÐÎY(AÑ`Öªï‹4 ++ò öÞXºD?(º& å ®0ío@BF»¦Ü»F»ä7.Dì ++ H ·HÄ6Ü@  Û+ ð5Üh` ++6ƒ“ è Ø .obÊðà^ÒÜÛ ZÅŒRS7åíK78EyD DD5霞Ùç<"'Ö-” · hË$“åDD|Ž9%àžþï5âÿÿï ++5Üÿÿï ++××6ç~Ó¼$Ñ9äÏÍèŽ"¸ÿèŽF3JVFH" +P,§ÿ@® ++x aØJ—ðTäÊÌXO J _88ØW+8XC0B h´X Ê4Ææìn?ÄÌÒÊØÈZÂÆÆÊææîðXÛ&pˆè?# ++à²0L½¬`8 äÂà¥ñ$ž"¾K?0å"0÷E1 ú3†3¦€§ÿ/™¦€'œ¬y3 ++º½ŽGJL–W6V(ÜP·ø2rÄ>;nh†2@°½ Ð!ÈÅQpBNÅoZ à°NÉÉ#¸(Å g[` BÊÜ: ++ðZÆäÞææZØÒÄäÂäòZÞàèÒÚÒô£ ÐQP8x pöyµQü9S$’¨í.sVäÊÚàdvØP< 9ÆèÊŒOZØÞÆ? d’YBGB' f£Y_ÄÞð«%P¹«  M-2T,…<°@ZèÞZä-[àâV Oæ+ƒàâ^ã *-OàåŽ [ÿàâ=÷à(&¸° IxM>€6N SPã+¦æ áÙ/à¹1YÙäÆHJ< ‡‹!8!@ÃD˜ ŒpRË5ŠMp7ð*ø)/½ø@Yé" OH­ý 4p€åh4e Eì6!0š.$Må–ã}   £°-E/É°-OšåÀø¹$d$Qt/DÜ3åHMø‚% ü/Aü-šh4h°€ð­l@$WØT¨(84Ú@ÚˆœXê\Å´/}´œX•´V´C—v1åh( á°¸ /ù´/pD/=|/ù|ª|Ù +/|,,/i,§/%, +p•\á( /‘¬ѬÞp¬ ¬/=¬+/}¬#˜¬…Øa0å àÅ+O½ Xµ8\À° X4Ž0X&p#d ä#M6ÐT §g‰ .‘ "¥Ê ÔS Í<Ó÷Œ["àp"˜[gvãöà ß ?sêÿu8èe8" ˆ© ,>©|ÍOQ‰Ü/ „h„a„/Ñ „// „'/Q „K/± „#/é „//- „C/… „#y„f¬2€TST x tÔ.EÜâ0p*L08 88 €¤é¤8  ð .5LÈh¥/‡€Ì¹h7V1à¸"ˆ" t»x±«ÁùJ6A ++ à’dqÐF'’yÕøsÌE  ¿Ãmâà `u§ 4¦7 & i#¨</íØŸNø / @ .9ôL</Û}Yø»‘h¡hæc‘‘`È ý\!< ¦2 ˜ù˜\Šù˜ HPQã†|ë¼´£ ++àâ^ã€Ù¬/™¬mT/áT4T-T[TH\10\ 8!&?A ++ “ L¥@0“åøl! Svì8 /} 'À8/»md8Ü/q¥žH5i" 0m€@üT \õ„üD È/9È8 /u8 +µ|¸D±D6­ 8 /1ìü/qü+/±ük%üðAļ&¼"8˜m°`À < .Å”Íë¨/h”¾  OÚ)/Ád ÙdG4¿zt.5t®!hÁ ÄLmð/ ð¹H²|/Å#BbnD"Øe&@¢Xáiâ"ö’XˆB\ ðZ5B'û-‚ /m® é£@jBŸ'Cò\'P'`¿+®¸AªX=#r(R^*O)`Ùu˜Ù`ÙþÍÙ&Ù˜Ù&P 6!X0& ++0€$&b$xT„)/º #Px%²¬Pßo-b ³À)rXp)â&LÒj@ Ž(-R//ºR ++!3zR&3êR,5rR'7"R!X9ïF/51Ð;?š1,=‚?%?2?ò€80 ++ HèÞàZØÊìÊØêGÇGQCòK( EŠ § GZ 8õ„<8kPKJ s'KÚ² O(@QÈ (B ¡%Qú."¨m -@º/W‚JH*%[z*1 ++`¯3 _¢'¹GaÀ! cš·Ð5'7 ++¸&i*‚8%k¢8$ ++ ?¤Â76L ++x™>´V ++f]€5ª& ++h*–húh ++ V'4?Êùmh0B° ++ Â,Ejjr (Y‹1EB94}ÐFl }Yð LÆàìÂØÒÈ@ØÊÂÖÊÈeZpZÈÊÌÊä@æÐ9@üæ¢YÀ_I2xÈmu?€n   }Z‘äÊÆZØÊèþ³µbQ0 á ^W4Ç1?²1g_  ã,06º +½y>S™0y>("±0VÂ(/‹Vý>*@kÒ ++^(E°8ç0"pK1Ë»ð [ä]&½¿»*3 šÇ0ANšå' :xB¦ëŒLŒL |L°FìH4ÊÊD(‚¶0šåÀ “*½€(½€(½€æ´ [ yt½€/(ཀ·òbˆñ ”å°—å ›å âPã–’V @½"àþÃS4 Šå8™B'd ’%88¬J†w“½"à ++Ä4õ’€_¯ €Ä jü•8 lÚ‚ E@` á,âÿ!HÿÉe"ãø 5Bz/ UBQ°†å ³¼T3úõ*¸p( "üîWð \…„5‚ MÛ¥Ana‚€J¸ *=¸"(rÀ(.9þ&q2þÿêD²@Qn:Û8XMD¾Cy®ÜIL*¦o*îÛAL„3!à„AL„AL/-àÞÜâÞÜG ++¸°³pÆ $@Î#¬J‚† "n`srà! ÒóBp à ØÞÞàÆ"0 ¡F–0Pã³ñ¡À‘å°å%àœ«sE¿8ÅùKšh7_ ‘åìöiLÀL]Œå 0ŒX7t †åÀŠåXEÕ;ó!NG RáQ$}R†Ð# àÌ.¡†å†å°†nGNS!À†å@H+S-àœå8ëqý/šå™P÷|P_&" àöˆ½3kÐýίL" ^ ++F "8z¯ ++F.E²IËP1 0‘ÁIoR ã†Gt#@ztŠF oüI€"@rm¶nƒ]00‘9Aãƒ/@—! g×upµ»ò £áQ㺠ANà/Žu Ñ;ù@ªYO"pßÊ<Ÿ [4‰ÊG"pÓÊ€ÓŸ[/—«YiTSQ iT °ßb—ýSÌâ OÌ'à »ïzH/pÇ`$— êGëÿwD —É.H0<ûw/ ä ++à4†å ÆJ@(Å (Å rHËô—bm©çÇ7Sã5þ£ëô ž°œ‘ÜÛx o<© "à@ˆÿÿ ++± d` €/ `\qqÿÿ ++ @—ðÀ¼ /e¼ µM 'u|Äáä  é„#áŒF!w ++Þ ++ˆÍê r„TX‚Íæ[Ç ++°“9@ãSkSõˆ!à€PN*ªž@à(j \#\å °å$‘2"# ++Î åGR)]1 “eƒ ] nêjÜæÅ"°XL 9âñÞÅ"°Õ\Ántn* d. h¡h ²@žÿÿ ++€1)ž^uAõ%—>D<jÄ·T yAý„ž](°`?žå\ ° Ô ++æàoÙà /x ­h…h h "qÚ¢Bp ++ X‚.ƒEønâpPÞ¸3' ++8Ý—Pr2•IA"ÈG gªpˆ–S7r ++ R€ *v0@"äBg€xCë_ØÊèäÊ…?/flCë4w?/dhåltu?¤žJvålx‡êUXB„B ¼X‚z"¶T·húë(·T¸j¸*z:@&Ø∠¨ç âè8Ô1(h×YêpVS ++n ++ÐG¨”m B* ˜N  ++f :0(òN  +Në’*+IÈUcJ?"À‡Å`°B†ÝÊ0ø ݼÏØÊÔʈÓ#0‘°æï4Ò­ é8ÈÁ (Á Á ++ñà 9Ý ²[Õ "0À¤ÈÂR<°ŠåÔáxËtÔ-Ñ`â K dÊ4Êðì ` ƒ–‘ nJ#Õ9?~`p~`R †å0•0Ñ9"(+¸/$@œ "C a  á$@šäÊU ¶ á@ ŠÕ .B %`Õ Í qºÿÿê–<ô(*ë¦^ù  ++.¯{0ƒàC®öÿÿê#0—å' `5;`R@†å H*àdÒý8Ë·á ++N"pT"$@í ¾ "| Ú XT"$@ý"àu»ñ1x*$ÔQ °¶Ù|?$šÈ€Ù?6<Ú[–Ê @ÊØŽg †|  ЂqI?Dqi ^ Nà ÔŒp‘§ƒ®õ&úwX„4PBs ++ *­P&éò\åÄBá±ÚbÊ3 o¸Z#Ì %0Û ++3Sã9i#pD ;“ emïÁ,p‹| …I”‡{[*`Ib‡ ++¤1 "$ ++À.  á‘OY©Óu P#Ähã0àðS ++ìrdq;Yû›=Qtl_0„å ³ tºyÕºy‘øŠŽ122 ++Sr|•wVâ|W ++D¬ÈK%H7 ++TT&€®Vê Â?wH _"ŒÉ# {AvZØÒÌèÊÈ€‹2-@šÉ'@éñ(B~  @ ÄêÒØÈZî;M4ä0&àͲLzÕgau“VÕï”[eIbQO1 žØ‚})òÅ1 ?öžMƒp ãp€åõ,¬#@1. b<[ ýnL"àv" 0‰fñ5j½.Æ×~§d@ž òT/0²Nc0[†½2rÈ1ÚGAúP~Ða€j!gP‚ ++XA"S :~#Ũ0B„  X¥ rõ1Ña°“å%›ÿ )à Þ3Œ! †qmé =H@Žà(ƒ=»F.GÉ"°]¶g ++éa OÉjöõ3à›kV2 D¥"p$fOšåQ(j;“å§ô£í ôõ] /Õ;Ê ŽEŒ*Äj{3Qã@þcp¤ N}âšp šå@—åŠ3† ++Lx7xðžå0›å›å ›å ›åí†P À—å7Ùv—r—9  â”Öv ,¥ œ¾—î™è* Ò—ð /m>r4Â褠 ¹LœņsÌ/ ;/ˆŠ¸#}‚æ31* ++òG¸% ôX' ++hP„/°— „°ÜJ^WT,' Š3 R"„Ði”p’†&xf†¤(9W@˜Zé6 ++8¡öh~€ZP~°~ ++øØ '`"H"NZÐ×^GP˜2``'@ 8¹gV@Fh¬dXd' ++`4“{J¸n"^P&k]1(Þe]3Hâóf&ƒ"0` f(Úq]¦íg2‡B4ˆrˆˆ0;ƒÃ RV$pw)0³-"€¤çRߊ i˜ ÒìÞäòñÎ/êgâH"VÊH" öz"ÒH/yÈG=À#àKyÈS âi·@ àâ¨*yÈÆ“¼IÉ‘yÈ "‹ÿyÈõ8yÈ"~ÿyÈ.)41 ++yÈ@*0à.}yÈ-/åyÈS/MÕÁ  yÈ"ÿ¹Ån¢#yÈ" ÿ©¸ý8ÔÔDyÈ%/±yÈ–L"”–L"–LÉ9B’å Ø1‘} ‡" … F „V@õÿÿ”u»/¦ŸQ© }»Ô ++” YÜ~K ’ùN‰ÙÏõ»ÍâHx€õ»4vÏ/Iõ»C^`©`õ»¼Nõ»6áÏ/Iõ»#/õ»+œÐ .é8 b¹Ë"ÀæOÁ1.YŒj}S0âyº> àˆyº"ÖýyºÉž€yº@yº%/u yºÍÊ@/Ý 7eÈ="hýeÈ. ++YÇØq@ÕÏ/! eÈ3ÑÏ/U eÈ#/ eÈ;/Ý eÈéÃ8/= äS"Ýüä/­ ä—/Y äáÆ5/¹ |S~|/)|—/Õ|ÅÍ@/=`‡-Ð/á`ƒ"èû`/`ÛÅÍ/µ`#/í`;/=`ýÔ=/¥h‡v-Ð/IhƒNh/éhAh/h#/Uh;/¥hZ[ѱÇ8/ TSé¹Ë/}T—)¹Îf]n±Ç8/‘„Sˆ„/„—­¹Îp ÂMÁÇ L®#l! [Ôq’å0’T5ž(™z õä.yÌ1 à”ÜAå}õä8 ÉuÏ/e à8^Rò©0СÎ"0ÈúëOàŽá5¢IÐ Ø .ÍT”p*“ ôØ6 -ç Fh*ˆ=& Šü‰ïê bü‘! Øoéç0 $8¦(Ïd%ιc4’•0r¬ æ ôàÊ3Œh!‚/Ž %ÎOÊ âŠ˜PÊ z0! º À÷ÈYŠ¡ êBùÈ,'©HÊ /2m C /ÒCÏÉ/5Ê*/;—,Cò—/E’C,MÂC,ObCûÊj*P[rŠ>qŒYŽEÐäs'h=ÍC!¨£%c²£0ÈþŽ¡ H ÍX.~³„Òwëæ :àÚ0wëwë'Òû®—àà0” ë¿ž°œr ++&¤P—ëM *ÙJ R¢\1 ž ×è/žå¢ "0ùXªº!CàžåöCSàâÅ<? à=:l- Æ ×¥ ÆAhp ++ =¦ þDœ€ØàÄ(‚ "è l è’ æ’ Ã2 P  ñP³âˆ.)ˆÒ¸o#0“ ì3SãVGè/}~ŠAê:hLLLX.ÿÿ +++( ÂÂœìä4.u;Ž†‹ÜìµØµÒ츟’ 1 “=ÄÀŸ×ï0¤“,1 0“† ‚ \/Ù‚ +"@b ++fD„*°,°/0Ì.mâ¸^KJd.dDÓÍ@/¥ °õP /- tuP¤AZ š ƒâ(6£ìF’ ++D'bÑxŸ%FŠ8•M&è'h ÂS j&S+xÝ——'ð] 'pQØi ++%r]+ oÏDzP&i:B¨Nr °?7*àH8(Ë/pÚ0h ²øœ” ³/ó<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbb"¼& Îy3’®yhæÊâ~²y6ÒÈæ…9jìÂØæ¶y”§ ²4OQ%Ò0©º–ÏõV×^àäÞÌÒØÊ×õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ. ×õ<˜‚+šáõ@&–âõ!–ãõ%,–äõ/–åõ#/–æõ/–çõ,–èõ/–éõ,–êõ/–ëõ C IêCíõ/–îõ/–ïõTaTñõ,–òõ ³óõ/–ôõp– ˜³+šq–JP`8)Êð!kÌñ"2'7Jñ"?œt"?)±/¨ƒ4/KZƒ SRƒŸ,dž ÈÈV&lÜô‚B ã&Únôu`šåð"ç"Ôa éh7’åÌ€(òkä[ ÚqSTã½üåí“" šô&àl#°°ƒ0[á–¥—Ð'°·ÕT#?[á·Õ—Ð÷×!à’¨,|($ RwÚ1Rà ãàLš°[" àÓ  ´[#± P/^ìçDìLtT1 à–÷> †8‰ üé0 ‹å±j ¦2t‘°Ž]‹÷‹V¶o‹å À‹åbœVm°‚å p‚ 30‡å ‡kÀ¢RÖH áXk Ú]æ|h†Å©e¶›@‚l¹ ¼ ¬vsÚr 1ìÿÿrLHêÿÿ ++lŸdÿÿ ++åÿÿê1<æÆž ÃTÕ“"äZ$ –R¢*žhwøðB0€`d ++»N He£!ˆE`Zrž ++(yN U*œTp²¸c°y /¨í ++Í` cºQxí@d ++œ±ã ¯Ç(a Ua( ·§€H $æÊâæZ}X“ æ(0Õ.  ++—"0Š—z'$r®‚ ++‰X؉XÁ‰Xj,šÎ^”Ô4¡4¡ÜfÕ@70 ++BüzP>36WI: œP˜ö¥ç|sz0 ++`Æ!@ u²BÄÕa_Wð¢  ° ÐÂÜÈØÊZæÐÒÌè ³PTã¯?9çU? Pk¡k9pY ~Q# *] ""U@ t³ ++M [ á@š;Â;”µƒa;Â[;ÂD  Dƒ×3”å0ƒ×1 à”ð¸ƒ× 565°ú =Q':$†ÌÚ*Òn-`îÒn,,- m_,O@ áaôUãõ^Ò9Ãùqª¢qª ït% .½<__Xßd7Ú›Ó " çª< ++ M' ++(•Tv ’¢ ++ è|°@`B¤aª2 «ZU1›:!)¡6ª/uÁOšåçèÄj ++îäÒèÊXû#¤´$ êÚ"ðäX ò¦¨ ×eðÊÌÌÞäèZØÒÚÒè@B-¥-ˆ !Þ!Tt(öB@žå.ÙT*=†Åg«kŽ$º«üða¬‹.0‹¬„‹” /C ++ ++½é ¨IS¬ ÒÜ ~ëC;0=€¦` ª[æÆÞäÊ. -êK¬0®,ËÞêèÊäZêÜäÞØØ" )È®)@°.H ++?ÒÜÜ*!+É°+! ¤àÞØòìÂäÒÂÜ!-(  ï61`Ë Œ£‡ˆ1ñ ! ++5 ++ ++VñÜÚÂÆÐÒÜÊû¶1²ÔcGlY3 LHllUN2Q{‡&J9}à‚åü0™|Adl0vñ¾ñ n:#‘¢03QãÞÞ,HlTÒÈ ++@­ ++vñ´HæàêèàäÞàX ++uù"ÜÂèÒìÊZÊÜÈÒÂÜÜÊææ@ð f4 Ê † àæàõ‚¶ÂäÚfdØÊHÒÄÒ Æ ØÒèèØÊpúr´XÂï&Ñ´æ>ŸæÊàÂäÂèÞäñ“7¶è9 ½,à"zàqèÐäÊÂÈ·ÏÖ  Õ"2Õ’(ÚÞæèZÜÊΫoÌÒðÜêÚà˜5¸ãj…çêçoØÊÂæèߟ9¸Ð(¢·Hª·£º·Yÿÿÿþç"!ZçÎäÊÂèʺ£ºÓ##ŠÊoZîÒÈèÐI¡*<ØÊØà,ìÒäèêÂØZäÊÎÒæü ++_ÆÞêÜè⢠âQ%‚¦½¼WÈŲũÅ1^QE½#Él“l¹á& ’, $*¡å" S„¼ _<YE¼ DÛ,?ÉFQ”åÿàǶ9Ëj/Tzõ-¢-`‚õ¸C/m=_0 ã3 ++: 0 ÍêóÓ q $¤$¢ƒjé% ½o'h 4fë ++Â]EPŠ¶R4Ð ½x2P PAR¼(L?0( ++K i'iiÎ C0i"i&i/i"i/ëiS/Ì%/ÆiK"¬i‰<¤!à‘ø1W$"÷p^ãš:0="· ©©0©ƒ©g ¾oòÉ ’t ÿÿÿÿÿÿÿÿÿÿÿÿÿ®°’M"cüªÍ^ "7ü/5ü/Q.ü”/ùû /ãû̸¾Ó&ÈU6 ++ 'iŸ¾À<P pÕÂXÎÊäZp))¿rêÜæÒÎÜÊÈ* ++8ÂÄT x(dh**5z+ ++/ˆ= † ++€(h`* ++*‚+ †U J *ˆU+ ŒU(jl**ŽU+ ++?ÆY ++ÈS ” ka 0–ÎÄP ++ÊB?Ì!ÀB[AºÎBÚxZæÒôÊÞÌ<)<iÐ  ˜<Ì£Ä! ŠÌu©1^v0k˜b7;ü ™ÞíRH æ& à0¨¹N0å)!* ž±!* {D,u­ˆ, D[T”K˜ Î> Î ?0 ÎnDhå( *8)xç¡S: *@à†â¤¸£¬0zEQšå0Ž²Nì¼HÚ¼S?àâ&+néÿÿ ++¾ÿˆ†A*  °€XÈ/Qÿð 7 0$¢ð˜ð Q ++ÈC0B$9øâø1P‘¢I0B(‘y 2Ð ++ í¡*HìÊäÒÌòZÌ5ÛEÂÈÈäB#ô#+‚Ý)qÔÚÊÚâ/ÉÖÖ ˆâ ÌÞÞ)É ‰2 üŸÌpÉóÉiÒ  à\•ŒX¼/,j.5 ‘åk™:R" ÖŒ¶‰@•@" ÊŒ'Üï”[›F|&pÞTs›@s›D  DD%.&%.ìR‹è'ä˜ ++E ¥Þ¹-½x»•Å, x ++1• –ˆzæ` €m€F|(|I€*BUt zÒ ++0„FL ++0óªHÔM#-ªMØMì-–Ö-Ø-#/Ò-œÚ ÚÊÚÄÊä/Ú/#1ú/|ÜÂææâ-Ü-#5"-Þ- ‰Þ-#7J-Œà ++ÂææÞÆ.à.#9r.æäà1ê1?â,=ä,ÿÿŸä, yèH#;šHì£àuê-ì-#=Â-|îÌÒÜÈ-î-#?ê-ò&ÚÓô¢Dð¢ÿÿ…5ú/ L­ð­ òõ#CSöSÙô-ö-#E:-œø äÊÚÞìÊ/ø/!Gb/0V©/©DüKÿÿ‡úžüž Vñ#IŠBþi&'þ'#K²ß Ý€ @IÛ=`°šåÀ†©7Qã=@8ºñÝ ç¯ ++‘!†åV4àØ£ð°†åÀ†å†å †åã"àÁA’× èiû §o°ŠåÀ ++§*ý ++§ ++§ôÈÓë°#`–Ü?Vã¼Ü° ÊB [Ù+ˆTk¶L²:8,&pÿ"¤\.‘7úb‡:“•1 `Š{ûw@6o(2à”¹fc‰k?pžˆ> ++åg/V#/Pg/ÜD&ÖD<+ O-еo• ++I70—x/ )D/­D.§Ô.3=F/)=F(0=FPp¸,S‡å0‡AF‡AF‡AF‡AF‡ùÛAF/0‡…MóÔ FæÌ?Ì? ת#p$Má\§Ã Ãû¹¼ñsCþ"pŸŠqàžå ž ›àžå ^ã­“(5°ž4"ÀK· š™Gƒxš¦ÜW°†åÀ¤à•£.mGáØ[à€å ÃýS p€å¡j"àíÍ àáž$"àTù§˜3™< )e.ñežaT1à‘‰F#ypþC—™TÑf Lä? ©gn±TÇ·= ‘XS(:XÀeT^ ’åMÒ(B% ‹5 ŽP0?Àÿÿ‰PO ‹å¹´‰Pã@BÑxñ¢_T_PÿÿêÃëþ œ"è Bˆ .éþ@@Ðþÿê¸/0Áq.Ud À*U@9 @‚‹áR"0çp Åpã!@Šlàii& Hp@"X¼"0û™ÍîH´ ¸ØÜŸ(ˆ¢¼•(( ›PøP5à€05Ýén€01à€ € k¬ €´ETD ++¯TTþ©¨äýc¼Ì4Ì8§½<̳½˜$Ä [¤µ $l0¤àÿ¨/gÀ&aÀ ¨hd¨ƒÄ,ƒåŒFàà€€¨0Q§#ÌC žåk¼€ ++j‹½‹½A¥@¢ Œí\ ñj!@šƒ¿‹½ d³¤yU$Õv@›ÿÿ£ P  P¢¢ŠàðY$ÐJ ?0žå}¥*P&0;%Ð W*`h/ DBDB /ÿ¼   ¤þX —å tKap—Mz9Mz3H²"&‡L ‰p7^ã- *$âå0à“å’·±Ê1 ž q 9Õ%Õ tt tt.,ýX88 ++ Õ)h8K/ý8. 8" ýä7" ýD˜ô‹&_p—åòüi±gà ++†Ì ‰d /µÄ L@Šåt /u±R;/\±RC*@l =`Š|24p "$p $ht r· fähS  ( $©® ++j¼™±¬Ü$0€ ++[€ „·$¶3àÔ ôH àå($  4(8(<¦¿@("Dàí­(( [4ÝĨ((((”lð©(L ( Díh ( ( ( +adª(0((((D |B” È.Õþp.Çþ ¸@„èð1GðT˜p\.Iu—&ôº (ZJ0úPÝÊ ù{l .yl"ûúlbùúÿêúv  Á°iW XD ãÜ!€ÜÏà(ˆ@TÜúÿê°^À%à”   ü”‡ˆŒéµ0úÿ ++ÌÆÔÄ&Âúä"­úä.«úTDrúÿê˜T( ÅÍg" ‡\X.UúøÐ ++RB ¨ØGCàÂÒääˆPà'&Ð!èáKˆÒWˆªÆøb€Îp ¨d4³Ð„ ++h5‡WA(Ì M:H ++  ++.þü WD†³r à°¡á J³, ’²þm²\ 8Wî©S¹ ‘R²Î™>„å 1B ++?ý\W .Ý\WÔyºn7 ++âF±xYAÒ˜/UW`uE(P®¹Cà\/9£; èò¹#0„3 ++„ë„ë„þ¹¿£„(d.(\ NÀšÛ- ++Ðv;ºHR²Xþ !Bþ2 ²²Bà "_²§ÆÞÞÖÊÈZÞàܶ²5K±*»+·k 6»†6»)½-à†å%0†âƒ)Æ P+W PγUzÚ[ÉYF8F H[¼d` „E%Ü;t ++]ƒ€ ++ƒ)Qƒå ƒ†ô…ù=p——¼$mŽô_†åp]'/0Áµ ?„å5¶ ^2ʾµa‚dˆi7µS€B¸@8E¾'†ê©Àr|x¾ -Š¶PP$€°[SH ++ü²G8 ^VþÖ SÔð"ØÞÞÖêàZàäÒÚäÊÄ1¹¬]v!2 û¡^à ÖÆÞÜæ ++\0 Sðp Ø ÜÊðèZèÐ7çÇçt‰7!0¸ 4…àhêã Ó°» Üâï °·|ð j8x0 ++ØÒæèT(, ++÷6T ++pA &  =/?ú ÿI@¼pÝa 0AJ ?äÿj2HdQÆä/MÚä ++$c+A:¥  R` "Î7~X’ ++2È  ‰ýš>š§M<(ñèOºW €&X·4§À8@ ++€É¹ [¢!( ++Ü7³4P ++ ý´bº ³j@_Ð*)$MÂÁ%i  øÁ%¸Á%…®IP™b Š£Íue`e% Ù(˜ÕI /¡±b]% Ý(yb&°âì™([™( ",—å(MÎÂÎÂÇÎ @ÅÆÂv“  €úi¹¹4›1)Z— i …P 5 xa ) %) PìY UP9Ë &¬ÿe/Ñ0”å¡zC áŸb&  a ¹b& _Õ XY) î‹K}'P Âà@ z¶ ¶ò"ˆB  ++øÛ õ1rb-0—±&V±ß  ::dåI:=0ŽÊ/ 1—ö‹ô ìã‰Ó)J BÏŽ" pcùüÏa* â­â X>g¼Bðâ ô1($ ++ ÿ¸°QFŠVÌÀXÜÞèÃ$OÒÃi eˆÃSJà" pk=/>œ- "1Ë"—PD ŸP £ /Ô;/÷ÔC*Û .(` /ÍÌ;´ÌD˜Ì9nY˜¥#‰ð'p°åàâ|(ÐÜŒÈ@+½Çu™È”@fØ,wÛ´ ÊÙÇm°šå “Ô'Uœ °&° ++x‰Ë4Så „ô',å­/5ð'°œ< @è'D’Hð4 šå0"4ƒÞ_,àå ðjü{­ƒÞ 4ð'`í`´*@VãDCU( ál/$@pkÐgóÞ8  át+$@C'u‘’]‘/%õ&u‘9|I‘ ¶áqžd!^[á°‰n¦:p¬!Œ/•’'’]Ë4° ãP“­à“奞ð*€`"" ÐA}/p/¸4Øh ¢ì#…44Ø# /p;¸ ++hÜ”Ä T s sÜ&NÜh”<Àh?\áŽñT„: œ)ép†åƒâ°€åTt~o‹å0ƒ¦d¦|. S ¸ ++MÀ¸A6@Œ"h0˜°˜ÍÏ·ƒå ƒå ƒå0l0l X+C0Šå0l4(j › 0l\øl - É€¸O ++°˜3/®ÿ¬/”ÿ[á„0u1À ++l1\á5DR âVÌ!Àœ/Ì\Ì€#€°€-`€X€p€?ãv,O0‹åoüõitå0ÖTž5–CD9D)DD59ÿÿDD53ÿÿDD ¡ù*(ßÏ0‡ÔAÔ/úþÔ5w Pà”å®þL(` á¬þÿêp(Ozþÿêh( ˆl(E „ЄÇé-°„ÀTq?ƒ¨q°(5p“$myðk n2àhk"&YÔ" Õ•/ 0H k$å HàeÔ²á‘zä D"Dè5D3”@ ++ h°s5iþÿ°s°s5cþÿ°s°s*^þ°Zþÿ ”0# ”.Jþ›ð¯Æ(µŸ”Ÿ+’ÿ(/yÿ(s(/Hÿ@8)’®nýÿ ’ålý@S7°Õ| [Ö Õ|Õ|½z°‡‹$‹å&p ãM„ô¨%¨/T  ++U.T &)ý("ùÿ(÷h8<ää’¸`’åæüÿêh ¹äüÿêp“å °“øH´/"pÏX "ü=¸ X \1pšÏ €d)(d)P“å8T`1@\T"HpXDLàŠåÀx _%ýÀ4°.°.@$!0), 8@šøàè() ý+,åH N áýºØȹh/ PµPµ÷ÜÀØPx6 Äy  ä „Äy&ÄyÄɤ¨ •  Õ& ø.îûÀà . ð e¡t` ãÖûÿêÙ¤Ê @º@`@ª@€@š@/@Š@/ @z@ÀÀj@Ð@Z@à@J@/ @:@/@*@ðÀ@¤*’M¤M¤¤*`Å"Á" ¤*@ûÿ ++\ÿœ*C` ãý+ûú  @ ”åõÈ O  áóx,.Äú /¤ú-pHD `.Eúˆ,@@AéùÿêœBšé* BˆB^0šåÏùX#Èù  g¹’ ORã»ù Dô2F!6Q!xQ!ð  0n ʈdÀ%äÛ%q"°8hÏåÐ$ 8 ~´RZîÒèЗüþæt LpE"4 1Xð)CRWúùPY_"EUÒ l " ++¸= ++*Bx&¶Â!t胚 U&0"E&Q0ž,&ТÓPÈXPÍ _x&V - ++0°Päà(!6" ++È … pö"XZ ghdà†!AFÀ…!I°B|%ÕTxô ++HRme…% ++psøi)"`ã 8( ++Ü!\ Ü!ùˆ- e*(B8@"QâëF%r0*¿&K+ÛI"rr“€C g/ˆ&¥ˆ&Ošåé3H×WFnæ1ú0ñ"P ‚Þ êþτ€Ab*2L*#Sš*,WK2WKCy. @|aÛLû17QãCŽ"\ ×0*š"" _Kbo+é [K C@š!/0ŸJë4v!óäȶ·J/‘·JŸT?ŠO ¿+ ++Ȧ1(l:.0—J(,¬#U‚0q*2'0'#Wê'('('[ƒN@4 lá,ÜÈ/4/]…NB6/B060_†Nˆ r ìÊÆw|?:aÆ%P?8j:j#a;—ô æèäÒÜÎ;>;Ñ<;>;YmÄòèÊwB<Ñ@<B<#cŠw]úÌð=F=ÑD=F="eB=qNÊâ~#P#DiL Š:Š1bP,7fSJC ++.¿ˆü*P' ûïc/ÑcÔa ÈÆ€ ++BJgd3x cŽ¤ÊâêÂØÒèòÛÁ"ÊH Jº¶?Õb Õb ÕbPÞ©äš],‰Ñd²M šOš®!ln?/fÕdG Uu 0”å à“©Æõ.?P*&`ÄbŽÿÿ ++ V'Ï YäÚ¯´¾JOpåÆ< /E/¡QÑÿÿ ++æk Ó·?pššV ++QdÒLc, N=͈.ÈÿÒºú—ú•$ 1™dfŒU,J"*8d-x~ —åÞmWöÿÿ$¡à¡Þ1‡aïp„ ­©¦…,/’˜0vÚH ++(Œ5æ-)H‹›x ²J ++ Oæz-ëä@ºLd1¶ N #gjqRÊâì~6 -R-#i’-1T ¾ /T/#kº/6Xò zZDVÿ9!V!XGY#mâÅ@\ʆ…BæÊèzøZ3\3#q ++3þ^$ÄÞêÜÈZÒÈÊÜèÒÌÒÊä;^;#s2;`"ÌäÊÊ: ++`:#uZ:2bÿh àÞ(n8b8wiPd(Ø“/ÂØu ++d=yfŽf èÒÚÊ/f/{ftl ÆРn Djò; ++758 /¥*ìZìZ˜ —åB6ð Yò•9, .É, Yò ðÍG'˜`F?v8dxdz͇ñg£~æòÚÄÞØþ|1~1‰õg•€äläæt" 4€4‹ügE‚4Î7‚7]1„7 Ó6„6‘d7† 6o†9“ód4ÍŠÍDˆÍ¨Í.Í%Í ú ;Êt#0“<  ãSYÞ +¥ ‰]¥à¥ Ô¥tÊR¢ OZˆ‹(4€•;òŒ0ÄÒèîÒæÊZÂäÒèÐÚÊèÒÆëŸÁŠÁŒA#—²A?Ž:A>ZØÊFŽF#™ÚF? 5  ++yé ++ ] Ä] l€`B¨˜n ­"V± Ed ; ã!h1 ã©K† u@/}+ "€L }+ppšåšåKEp ++BBü‚PÀ”V ++”(¬hö  ÎÊÜÊäÒÆZÜÂÜ~xJ›-Bàâä&ø ++0€âà€â‹“훞íI‹´îúñî,PÔ· ª3Âkñ¦ 3 "àÂäèÒÂØZÌÞØÈZàØêæ·â(Šå,Šå0 Šå$p·3‹cíÆS@v‚" ç Oú ++4 j„=…×214@Š¿e@&` ãÄ 2,š­`+9" ÿAg}¬O÷Abšå`'9!S» ++ ´"`Q&TãY¦Z‚0 á kB@0Šå<÷d1¢üÿQ<<P @šå8—_5šåLCŠå@¤½ZçÓð—åüÿ™@H@SH <…0Qãol/ šä² ­ÿ ‡6&Ñœ? @”KjôæÛ6|²X‚lt ?š CòX¼šë5  Z8¥ =R]0 /^   Mß 0­ 44:4Y‡4G5üMoAIðüà$ n¨(©"’1 ž×Aàâ^ãk7`¿<Tkœ€Ñ1“«KÌ߆ó6j™“Ë8 Üç@ ôX0{ ðkn΋t. ++P°—6“ „å 0„åTþ áÀÎ( O šå;©+]¸ç_ <`¦X(X?<?  0³8¬/àÐVîø%Oà ã×øÅø¨ï ¾ &«þÃ?¦P°”h,h h¯\=À$Ö8/¯8œ4 (r([(R(<(1¿A [d# †$ŸxàxS< ˜°ݸÈÀ(±ÀŸÀ¼\Ik<<ÉL Z) L Œ ++ P m‡jJ [œ=yËDP óú’ñìüÿê¤âB  ÚÂÖʪ ¥ìÀmÒôX 1òÖ‡š H ++a—b2L»T*'Nn'»6y>4bw[ 0åš ++‚)‚1}® p0‚å‚g?ãzzåM•y^4Gšå̲è2(¯2(Oå­M3RõeäøB– Ø ‹² ++  —Uà5{4áC[ü† /pq/y’) ô4à— !.Sº1àãúîÚ'** "põ>{ Jâp0TÞ ºáàãTáiÕ§Ø.Qؘ]ÒÕ"Ê,g ++–øAYº–À¹Xõ@l]¥ï¹b7g˜ ++0# R ++šê²–:é„ °*ñèþb:!x›d8È ++H6:$˜";`œTb¯dT¨ÈÀX°;(–;Yž (É9Ã@üæ X LCfT 2¢™b# Éc :0!€C †åb> (‘YR"$á¥FG"ÐU·!¥¢bé4;ãæb¥DŸx;H \Ž:$HR ã– q8` ;@F »eURA‡T0j| -0 ,ãe bH4a4Ø[ZºE" I])ˆ™‡M=!ó6 j<é6êH/ 8 n,!8Vú> pš>dT _$uTŽJT"ÄÌ/`1Ž "< ût "@ð<_`šåxL&kÿ=¥-Í}<@”å°"à= ‘ªŽI.@Ü=À,…¥ì=[ •TÈÀŽB8 6Ä×À/ŸgþeæAHìþÿꬮ@…S /1° .¾þHw·þÿê<ÚÔÀW¤;Ó!h:<ˆ<T—P#L Ò0B ÐÑù° ‡i›“}âàBD艆æ1ø×, ++ž˜=°@ª ++ˆ1°ž¹ÊDƒ$!à—ÊD9l`5 —ÊDcÊD  ÊD Rã2—ø°–Bµ *yj" ñÀ"°’Bƒò ++ °& ÎJ)œ ÊJÊJ& 0BEÆJ° ++EvŸÆJâ(Ð(*„¸Am" ÿ9°EŽXX? 0—™²nM‰H@˜ ÎD/¹@˜DA| !y‹„ÿÿê6J¿›P€œ(Ô#šQ?°4@?`'8?FaYŠ&?@ÿ@S0B‹ RÂ)A¨xB à,CC_—å C iC ,1ª¿Aê×{?LPB#B(˜Åóé`dbT`8zô 3Êåö$Ug( ++²É$$c $ÿ< € WHB¥¥¥j ¥7KK ++KoËK"oÿµ Ö&q P"P$õí % P$P ++"P ›ÍP&›ÿµ K ++&K(›íK (K ++&K›ÏK*-KyKp›`—K —K¾=¸(šu šu. }¤Ð ++äÊÞu,x× ‰——<*°#X• ++})}5.)ZÒч,‡c ‡Ð ‡Ã,‡,.Ó}à‰)x}h}_}¢`}+ ++n!§ 1ÕWÓW„‰W(š/û@’0ù)§ 00F:(0GAÂ2e4eàe5e e2 ++ˆÄ¸ 5ámÑ5m068vOÚ4vF*2r ®ŠÕr6rk rÿ<7m6m8mr m–8m ++6mß×m<ßÿ½:·+à:=:sàõ:6s>s ++%ƒmý.Y.~–. õP©PÛÍõM#†%¶›ùä% Cj ++‘HûP‘3’ _ ‰óR ÌÒÎ ÜÊîèÞÜS ­q ˆ è>‘Aœv  ++0yû' ++(Ô Sª †QHò ` ++ ++©»ÀåH­j µN%)÷ ÷ ÿ ++÷ ÿ\4   H c €.xz(B   ++ iÌðxz +++ ++ ++DR †å /à ++¥h  ++] ++CÒ9Ò°g‹Æ=à‹(:$: ::.°..ä.ÑÀBB¨¤B`hB §öPp ª_Tã'ªÞ3Pã¾,š? ážö Ž/à’/p˜Ž€â’ü·§üÉaR HË`,P ++ 6&* ++(_f/ , ++8 x8 ++.-."8ÿ ++ 8ÿtO<|7 ++  ++"7IÌð|/&ÿ ++$ÿtOB|@ ++ $  ++&@ ++|1 ++, ++ ++æ*@ ++ˆS[ ++"°> 4[à‚â &]‘&ù/°2WÞ2Å2/ °6 \6_ °šå«8 ++0p:0?x?? (; *8;,{ ~;3;2;ÿ ++0;ÿ©.; ++0; ++2; ++¶ ++<5<:<·æ8<x<h< L:ÿ· îh9»ö †â†å0†d ×´Û<É È:ÿp "0p©p_íÐpã4ãÊ64HãZpè\ 60U ++[Oj 8[ ++:– Z7Z@–ÿ ++>–ÿ©<– ++>; ++@  ++;9;F;ÿ ++D;ÿ©B; ++D; ++FÑ ++|w;<$‹È<Hø1à © Ú²gD D3RãbßK“s žåÈûLÀžåÉ >É É -`ÙËXÁ¡Á #À†,Å ¨0½ ²r— _4ÿ/áãDÌ»X"ë¹ ­X"ë¹ ž ÏrÇ$@ ‚âü’°âB L !ƒF¶ÕoR u¢'ü’¿»Ô2·¼ À;$À.·zºD@³tH kô½Ó$à‚º*@Z¶1 Ç&ß&€ žåRᶨbâPß&! ’°ß&R#'D  DD6÷C0žå07'D àžå–õLöÿÿ6Šô20 á»ƒu¤ƒ^S{:&»™¤} â`‚.Àj[%@ ‹å(0((Z(1 ‘»%…  dd@d ++œp/¾¶ „ „å 0„åKù”0¾¶ ª¶|$ |û¼ºÀHû `Hû> pˆžŠ·Ž@~Ã&o‹(€0žåPSãM‹(@àžåKñ¦¤  / l.ýþH54ÂÕ&&Xà&(à&ö( 8 H Ä J„ LXS0J ¸¶'@7”+Ä J ++H¿õ ¿õ ' ++0,xÝ%wB L ++(øí !ˆq¸@B N  xˆ&ÈM  á Am0ªÔ($£^ã ª ƒáG»d,ª-I@ÈxÍ ¡¢ ¥  ù0¿n á ++h%/ hñ ++? ãHUH0*@×ÿÿ ++ +8$@A/å@`/E83/8¸8œ/áüœ/)œ_‹ÿÿ ++ª 1ª4ª "Y1ßÌ+YW$"Y«Y Ÿ®!ÿ8_ØÞÎèÊæèv$ ++p­3Ìð1 %U%r%¨%n%d%¸_%Hë•!°%`$@-à>-[à‚âE=à‚`E@àâE3@<¦KÝà>M M ¡M •¤¥êM¨°ŠÌTHR rç))ÒÌOWOtÿŒ"íÄÒèZÆÞêÜ£ tõ3 ûYûvûÿŒûoØÊÜÎèÐø ++vH0 õ[õxõÿŒ*õQÌÒäæèö/æÊô xü9Ìð7 ]zÿŒ?bVð ++zßE‚Û)bVè_è|èÿŽZè ++|À b’±%aå~4ÿ ö OæÊè~= ++~)4Ìð2 /c/€>ÿØ1 ’Tç€ êxÌðîÒÈèÐZb€Z €Z:,Pç/_ºpPã|Z¢t Ÿ¼@ÆÞàòÁ¥ ++€¼2 ¼e¼„¼ÿÚ‚¼¼º tº?‚¨l_ÌÒÊØÈ» ++„»9 †²g²ˆÚ²"p]n¶S^ãi¶T¶p‘å žå°8 ’å[¾ ^C¾4[à‚âÖ=#à‚x ÖpÖ°ÖpÀåàâÖâ#â(Ô5/pžæÙævKâÍâÞ—Þ ‹×«#q‚8À…,?Š0Ÿ)T² ˆ¯ªJ Ìð8 ™i™ò¢ x™m™h™S™B™d™Ma6•ÚzD•É•˜• Œ•‚•  È5hŠ ˆÙ:*83à@4˜DB0Bà`ʱ7±7€_ Ù7îÄD± .*ÄD×øT ‚0mWäÞèÂèùñ8 æèäÂÜÎÊ@ðh@ìÂØêʺír3Az ÷£/L8-Uª Œ™=$Ìðd›k›ŽæÿØm ‡2•OÊìÊäŽJ =&Ìð; mmmrÿÆ/ÄÒ5 r+ÄÒ4o%”A%ÿ©’A% ^' ”  ++a'q – ÿÄb  ++– b s i˜ @ a W R ;  . 4 $889Ë i ® ¢¬Y¿n.æ »nRsààãDÊ…»n xo@ ++ŒmCê ˜m@H úÂäÒèÐÚÊèÒÆZæÐÒÌ.$ubvšvÿ¤ Ž ++š.;ZØÊ$wrœÿ± ++œ0JäÒÎÐ$y‚žÿ¤3 ¢1Oêxz2x2—ž|9  e${’e¤ÿ¦¢¤¦$}¢ª8`VQ:ñQF* ¿#%Ì e ¯ £ÜL¨èÜL6´@ÜLŒKdKº}10€MHD@à@K]t\J It\JXJçŒ4@œJé@"@œJÏÇ~ŠÿÿÿþHSXBbEJH¹}¨ N/ /Eâ ª°i ++ÌðæäØ3$²3¬j3Z3PÒ&K34Ò&)+GÖ&$‡OÐ M µ ©ƒÊ ++ îß|°€ ++ ®ÌØÞ•!ÒÜ÷Ä6E² ¬UO"Z|H ²â(K   #!äâ(ŠÊ ++ ®€8°$ û•€Ì W% WyyŒ{ñSäYŒ{ 40/yyµyyyy ­SÔ1‚ ++×yÁèäêÜÆÂèÊP(SQ‚ °ï( G¢ ²"ØÞ,ÒðƒЮa"YOJ3­t ‘Ñ I ¶ ªç+ ++)x_ ++ôÊäÞ¼m´÷1Ìð/ ð…ð¶ðÿ‘ŸÜÊÎÂèÒìÊô ¶«53 ø‡ø¸øÿ’OàÞæÒø¸ø3 ø‰øºàÿ’OÊìÊÜô ºà/ ð‹ð¼ðÿ‘OÞÈÈï ¼šF. îî¾îÿ‘OÜÞÜѾ¼ ð6 ÔþÀþÿ•×ÀþÚ‘þi  Ðþ³Zªú¥úŒOœŠŒj`w ++ ô‘ñ’'f f¹õ’  dšFXªQRF DFÞŒ8ÞŒ-0”ò-„r‹dy”? ‚óeËeÿàâ^ãJa?0 ã^‹0&J ^‹_0 ãêƒeŒÝø6"«ÿ6©Þ[äÕ” /™Õ”ätm|ò[ Of0Š¾‹0¾‹¾‹5¨PŠ8PŠKQ J Â(XTú˜HÌÞäÊÒÎÜZîÆÐÂäq“qÌrsèq6q-k(k}aà‘å 0‘ 2à“? ÿ _žå ß#pçs] wÁÓ.#pãO šåØo] Ìo]ñº ++ Î2ÄòèÊìÊÆèÞäZêblZܨ@ZäÊÌô$ñäÊÌ0B Ê P 6’Z%?0€\;ß'’/_µ"Oµ">(k/pß üÏtØj/p­/!¯‘/­D­ ++€ ”å“P^ãûPÏà’åàâ^ã÷á@ïó/ ™— "Üðl™—/ Òy̽L²½€±“åàâ^ãÍ3ã‘;h@ºƒe"›à OSn|Í R0šå›“I ++®¬ëehj_-`ëe=éÿÿçaWçaÌl†å 0†å †Ç’û Ë’*½ñŽ­X (mœl”l«’=`ƒU£’ ++A†Aa†å @†åakQ£’ËQ¢CiØoüØ_sÿÿ ++Z¥1¥/E ,"âþ,Oàþÿêø.•ø±C“&ªþ|5:ZˆøPRH ÄñRˆB¨XB È ø[“ºzy—å — û•w“u'“èëdr ÆñãI È“@¶°&(þ’d0È ++H mF`B(†iƒ`8B ÊŽEš Ìaä) ΰ•°аõÒ°æ° ++æ°7 ÊpÐpÒp—pÔpWpŠÖ ++/fd ++ /fdpÔpÖp™pØpõÚàp ++æpØp +++›pÜpW pŠÞà/lhà /lhpÜp ++±`pàpõâàp ++æpàpâpŸpä{yðp|y Ï@& tllíˆçg)Q¥cpH5 Sƒ¥0 Ê@Ät ¥DŸt ÓAšÓ¡pz xT+Ì~ˆxÌ`DZÌC¡PÁ :QÑ í-AŒQãGºè _=:è 4$è Œ+ÕÛ$óni8$ Ô$ ¡ œ7¢E/ð¡ÿÿ ++àâ^ãžÿÿ ++ˆœ4G ãšË¡…ð ƒHHH>6Èq`ðÿÿ^£v±úQãUÿÿºàdRd@ ãPdG ãNd9d7Ωõ /=Ê© /ùþÚ©/ìþôM$3 /ÀF ”à æÊðà=&HLŸ"¸pyA’ äe 4(`  ++„m¡ Zê  ôè|ß]Ò)½€!0‘Ûv" —p11" —pHD ÑD1à.(+”Q ~X}0ù/0‚¼ ¼¿ à”å€àâ€^C¡h\ìX} ü!$ ++ÔÈ |&!‘<Qü €×¥B•üü /¢äòäB•0«õì ˜˜ ˜´ë$~ÚôH/ L/}L´.P/'ÿPD 5(ò<cPB èHx@8èâ¡}%~gPâ ++ 0øâ"*!hUx ê ++0UÛ .àäÞÆÊÈêä¾£aW¼) °a¯a¦a¡¾ñ ++}{¦¡¦$\¥VéL<¦1¦¦N¬5SãN¬0Sáæ6¶XÙÈ ì©¶‘¶puiÁ SKŠ©È© C: ìWp¬îK¥K½ (¶K­K¨K—K‚KTc]KLCK8K&K||?ãgg<gÒÁg gžg­gigbg Lg/g Jr ðgQÄÒÎx4¸§m»™‹2m)YM$•YM4‘噋õÝ0Q/ % …/ q±} …uÜ] Ð]€ ++ª ++”ÿð ø ð $ÈÞZÒÜØÒÜÊZÆÂääòZÞà@ì±½’½‚Q@q ++q Å¡½/ py/T)N½L&4­"/ &- T*ÊøQ*Qü+0' I‹¼0Rá &5! ’&I‹D / D‹ëÉæ 5Qãä ’QááÊšüôÿ yìôÿü/ ÂIŒ/¼D ++"¢½!`‡5Rã›lRá˜Ê!QŽee@à†âeSàšå±0 ã‰1Ž‘ u€ÁqÁ!‹¹„²j/ H7M<7¹ D.YD7 D™ ++ƒhƒå @ƒå€) €x+Ùô<0€] P™ 4 (+0? ?Å9+ ìÚE‰;&p7퇵k A Aõ?$øe /öþ$¯$O­þÿêÄ.eÄ~‰ wt?Bb‰ = #7¶ ( ò[&8ôØ@È  öBBÙ+. ++(ˆ uZâ øÐfz úxM!V^V ƒ©ƒüƒä‡ ++@B ø6ü6Z6«6 ÍÂ)À616(6#66 29­2Ý2 Ñ2 ª>=Pþ È&žHáà:Bñã!Aá áîÃàÎ^º& –x@àjê×ÿ ¿‘‡ÚæÊB;ñ`öº@ 8,1@c?šå¾Q2úw@: þ‰=,¼/ úFHB6S·}Ô«Hr «T«­«i ¸«@ÐT \]ÅBÀ«á^u@ žåmÉX ¯X @ž ++Œàå pžå” ¥X  ‚T |T L4 ÓZ:à ãà†å°| ,  %•íN†å0-•.AŽ¢3 ã <LtTÀ à–åêŽã 0†â„» €»,%9O–åë00L`Šåüü|@Ežøx ZÔ .pËÇü‘€åà€â à€˜3à€x€x ++‰+.@&  ãX$ Üeœ Ì —s<^à I(:( X/ôþ@åÓ¸¨ &Ÿþm oþÿêÔ*Ô_šåQd/Jþ' 4mFP"  ÔøB0€`x ³`d€d° ™à #Ä Lœ ++BH€""8"ˆ4 0U BV=•/J \ b  !p wR  ++ ô1@…ÅÕIZÚÞÈÉ$¯Â–ÛÅ•ËD^’/T Gv&4 " ²9†† •†" ²9 /& S=Žòó"ë"P^ãì3þ3Qáä0ËÎH "üHª 8Ë<ËP&Tã˸!à” ++fÄ` ++ @”å÷Y " ++5 @ž#!%#!K3ÇJ¾gõ&ÇJ¬@Øq‡!]4)à’Ê×$Ÿ!}1x/xž(‹·!=qà’å ’J•žš>i·!Vi ºÚ &53(ÚñÎïÚöÞ Yffh´¹Ö²;&¥ÎM2Õ Øó ++P,HÆèÊZÞàèÒÚÒôÂèÒÞÜZÒÜÌÞÉZ°8 ++Ð "7 ++X[@àÈ"cH °èØhQÊ zo&) ++ò±\ çn ++Þ˜{&rêXe§Rô‘s+ ¯ o& îR/0îc¤2î,2D  D¿¤”¿¤ï9p0âS㿤C*! ƒF?òÿÿŒüŒ`PMòÏ )îS +ÍîS¿$›b ++”»$‡Å=òÌ! ++à!€fZ² fñ*HæÊèZèÞàZØÊìÊØZ|kBz³zPB $z ++R˜zzA*Õ(f¼nŒ &0œ5°†ý+F™/™/0 8C*à0ÏÜ+M¨¸±0CŒ " pdÅ/p j4!p  }¤É/¿Õ¥C^ãF/'9l0éq*°&0¬$-ܲ_  á$ â³Ù$ /E$ º³ jîñ"* ++  ÚÂÖÊZäÊÆÞäÈZèòàÊ( HB "  Úäè²P$Šå,Ç=pªøçî³Þæ KmòÐs0Q7D1êЩW`Eâ0Z!n ++ó<"å;nºÏ1àw/† * SnüÊÒq»<ÿ'àå,àšå+àå$šå Ø:Ñ|Ü ÀÀSvª·?Apd!žÈ ž ++[%žô4 Y4Ç=£"ÑF"Ñ_@‚åÑ0S>_¼åŒ€ÊÐྠ'>1‹$'>)³Ps0/(~ K~(t~ÿÿê,²ÑöÐB   , ÖMW:É'1¢0Y[5¢­]Ý»Qåà—[1à—W1à—Wqåà—O1#à—O1'à—O+—å#p—YéI“ /ù“OšåÆb6¨’B  èeX 6"CS-¿S +++âш'_ ++ ŒmŒ—»3>Z6ce0  á¤c#—å\0Y£.6]£dDã>6" 0ÍtévÕ.B¤àÆ4"­_†åFB¤÷õ!+‰õ!ÿ ++—p0—å0ƒ žïˆ310Ž 1°ž¤_‡ q1—V¯¡rÕ`a0—å“ÓQÝ0Ý?;!“;@0“åŸVcq'—å—ìš´/0.9 j8…â7" –´B u¯°¯–°†å 0†å@±ë :*À:*Ú¯>* A ++ð/U ++Á L —åøðÖ*²‰×—°x X X°J° §wF°>k ×°;Ú5oÿÿêêïO ++á ++ŠÖø.Ùø.Óþ'.ÌþqJ²B Îu nÜbæÊÂØÊÈ$9*,3Ù  Ù €94E‹%u`šåð-  -  @,,‚ùaHº5 "#^B* Ó& 5Àÿÿää5ºÿÿääWµÿÿ ++ùù±ù¯Î/ÎËÄ-áPR*/9€ "à4BR 4ÚD0  ++b  ¨übÞàÂâêÊáD1}Epà‘åŒ ++xp$C$\"$$ :´\ö!0xx‘ b)à‘åå" Üpðˆ <ˆj #pŸ|N Šâ Þ E#¡¥"_Á\¢œœœ—œ“œ‘ß«…# Aä/?}Ĥ½¤¢¤ƒÛõFs š  ++0¤ïÊ pB  zÛ10—t ++@àƒá¤%10—2:@T –?°GH ÜÜ/pQT @1g QTÛ”%´Â èÚà $Cj ZHxZH#0ZH£œÀBTSvPX€´oHÜ¡µÓž X  ¢! ++`'O8¤×µ ++!PÂ~@H òEÅ1H@À³ µb@ÈB —Õ"ècU|æê#T#o? ++ À%Y&Záš$K Dp áÊß$ƒàƒÞƒ/aƒ¬ƒ.7?Š(+÷ÞXÚ xÝ­S ++ Ð@èB .Ú@ H ÐBàäèÈÎÂs ++9A¹öºæqæ I¢CæHSÀ^ãæpàåÀ²,(òV)ú ? "ANÕ„ ~º~¸º’/%’œâ=º~b8RÊ! ++¨; ƒS b ‰ÈÜ@!ä ëh è,ôX 3N m3Nêà7rNáCò Ù@Ù#1áØ2NÆ6w" " ++ ®UZ´Z $ ++ B*$T ¢ $ W(&$· (~´~´å` &  Tn"€0 1Tãzv Dâ†W¦îzg’0šå°šå À71—] ~`në3'7 ë3 †â7 07çö†â#à†å'°†å(à†â+à†å/À†å3†å°ŠåÀ‡´lsWW €Ã`nïé#(./R°Šå Àkñ "x‡qñ@$pšåõ,Ûå @b°ÿÿê„A(„P•à*Dˆ$„à35 `îQ†âVß²`†åÀŠâàœh@ÀŒâîÀ±Žæ€š ++ wwx²p! &ÊOP(µ& (œœ¹œ8´ œD"g œ%R¤M ++tŠ‹!0ž $r à“å“š‹“ÒŸ%Òp›››°›À›‘&3àŸ/ “‹ ü!£HÞ,ar*Ö³$ §$¬ ++ *6Ö°ZÈÊæÆäÒàèÞä(*a;  6 è ÚO âñ* àâLà ½âÿu‘|1¸BÎÎ EB¨Î\ÑŒ…ÎdgÎ4U1@0 >Æ.éÆlÚÆ2Æ? ,Ãý.ÃúZ ´ž2×>ÃÿÿÿÈ2 Ôr.B =.=0=!n ü=ê5==MŽ10ŠÒ÷÷òò  n/pú3 "OX ú3OpšåÕþ@ºÀŸçY  :8Hj X/ 0w±.w.wË Å2ÅZ Z4Z~4ZL^,~ê 6 ++ EÚ 8™M) *š»š>6 6æ<6QP …“Tãƒ:6`6ïú00šåHÕ„K`Eâ@’>,È$BB@0à†â§“70†å8à†â;uG_?à†åC^0/Z’(Áü IVA<ûÕ"Ø?± •ûP(pšå0V\$\©ZdZZ…ZPê ++ :2:t9¡Z_* Z:À½ÀXZ ò8|€¬=pÍ.8°šå5‚ 5‚0nÀOD. (/ì/Àñ(/üø0‰OY^°ì `ÿ {` àŠå$`<? á,FìS0ŠåkÆ°s [À?Ys0mØcÖ/ °5‚'iX @DôqÆÞÜæèäê` ++e@e`V ¸eAÆÈAÝ" žÕfÙi*5@ ++é_$šå(ñ"üÖ"((Á4 ¡45¾S©I ù Ÿ LE ùA@†Õ L"àù ¸ àÈ  ã… 3šåéK® Eí Yj# ++j#qýkAD‰ ‘‰!]‘Ã4U¹)¹OFUZq àå0àFÚ”ùÕÀåA à‘û/à'à 793Sá!(¼r 0žå žlBàãyw/eL ++!©B®å 0å å¤eL 9\ù’ùO‘å´Zqq(…nüÝ<¬/qqq$qqAq04 *ÕøÖ)Ïþÿê6²Ü >…Є°hB R pa ì& õˆSâ ++ ÷ñ —å—å—å°—åÀ—C(CSÑ: » 0ä·ó †å†å†å°†å!À†å@« àF’ωX +ÍË S¦ÈR kR SBSÐ^ã;8tQà"±ú#àíÞ0SEd: ·L˜.?r:.?.?a0’å S*’:ø’:!0’H9PâSŠ:JL §H0,$4L"0Ì¥Ë.Í.àËt/%tBMÔ$ iD, ¬#]|[; ¨ (ì (BM ++}`O0šå «ÞO(r4X N$qTàÂäÊÜ—d8Z&¥B L 1 ½"úIWé ++! e)‘ /ÉP&ÃP+0Ü' é“Ñ/Ré'Lé À 1Rã„EP9 3“å€ñL !]_)L] 1LO1L<6-MD-M0çWÀžåYÝÕM M1RãÔM3’å˜M M¾Å´¡J ++ü1€å!xq€å °€å4€å =!@ŠþæSÀŠå#GWB +m½J‰" @™_Àšå™ˆ™ À™ Ü ¥tÔ /@)‚fü3°€$3€å  ¶xÄ ++ mM]å °<CÄE 1 †öä=p—/<Ð’†å p†å0@/ ­*õjSRÙ 1à€èO à€åÙ ¥Ê¶¶x “ù…(q(EY ¨  q  /ðþ¸ ÞÃ2y@A™þÿê¼­—åâำŒ ¼ƒ ãŽåÀ†Ú}R7E ++€1’¡i¸ ’È Í R㩱. ¨Hll0,qÀ—å—ÐQºk/ÀP1 2p*9P1UÂk.ÀÄ]  ] úèÐZco À„å aúè i[±% o= Rq‰TPdr ìEY#“ú7“AQ%€  ãªýÿê@¨ýÿêASé “å7K@ãâ9›L[AÌ4 %à úm9à’èËJ ++ËJ  ò —å‡ýÿê žå€Rã ++PR ÝÌ ô–5tLî¼ $žåÞìê( RLø_lýÿê%¼5Êÿÿ¼¼5Äÿÿ¼¼¿ú5 ¦ê3R㻈"¹ÿXR`&Pýí$|€ 0”å9ýÿê 7Ñ.   .ý$zÿüÿꎢ\ ¨" "p†QØ °B B ¸ñ#0sLà PÄ> 0Àð ðxQ! ð¨ *8Cúá$Ñá$é1B¢dŒëu@RÄHÆBä|ò:hXdp H D ++ÆèäÆÈ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbbjfP  ‚7ð ++š  ++  ÆèàäÆÈáàäÞèÞÆÞØZÊðàäõ L D x FpçR@PF¿6\ ++ # ++G/ ++p4Ù#SÇ蜰 H˜?X»O F ++P{ *PÂÂñ%"è J"˜æäÆtŠðàätàäÞÌÒØÊ*ÆôæÂbÌÆÌôÈÊÐhrfÜZfZph›!>™í›(:5Ba\flª0ª"H¤‹J‹PP~@”0æS1" L5 ÏhB L@ ®×¯)kAÌ5OšåæŒß=;ˆ²Èp H£$ˆ{ëÁ72š óL‚ Ù$ ++hÅ Ý Aú R<‘(hd˜dª0R’Pÿ!Tÿ!~Tÿ!LN#g V ++ÿ!htÊ Xˆ?@?¿?Èä ?!àš "0f4}±1±16¤¹1 ÀžGu œå àœË¥ ¡1°<4Œ÷#W&#àÃ*w`[ [Ô[ê¹2W qWâ#Z“M³S ±1Ò ++ ZFHTZ‡ V|7Fú \b ++|ÉÁ#hî1 ++•dñMã4"ÀåÇqàÇq$æaѪ¶Ý ,—å=c«:ååPÀ†å°Ãöfr"" pÃ5Á º[»@ œXñÄ'âdà/ÀYyÑ ++`Ñ ++V s 0H`0™"@@âhH!`–Õ VII ž;$&\íJQž;Iö1Ö/@ @‘åiY$ Ä,Í ++!p '÷ó à‡å 0‡å À‡å°‡å‡å@‡å ‡í/‡åi  ii ¬( ¾ÆÐ  žjÍ« q A”剼5? á‡êTM 1 1œ/á([vR#[?Pã[F"ºâ @â rãQª`  ° ÖbAmŠ"_X ++Æ*M]Yæö l€9 ,<)â.÷âø1àžŸ= Àž:å– ãcs0‚å À‚Œ‚Œ‚¤æÎkd&°0ü — ++À— ++ Pü1 °†¸ ãb¬ÌWVç?¤ƒö1à y6@›å¥qtåå^"‘!‘› [ùÂp3*_™ "pÿ5 ¾p¾ó%*?< ãŒ4  # & #1 Š Y\ `€` 4à—åâ¾_ —å oW#­HÈ îÅ(ö(  á(Râ&A/ ++úC1 ++/ á&  –#Tý&°(Ú>€»d oWM9ç +^/ÿFæ†͆¿¬«pl¿ /ÅÂml“Œ†ŒþÿêHj×ò ÐdÀ bH~M} ++~m06 °@dÀhZÀ~xB ïtÐ@k—* ܆ Õ=p â\ã,ù)À›´0 \Èzp Q°žå ¤Š5"}_ *8 J)+*u= jðÕ- "pƒ;" •î-ïr»¤¢ xBTÇm ^ ++ ¶`¶/ ++h£ š3dvL, ++(+!X=Q¢ `ø(Ð"ˆB f !èøÙû _ ++ÙøÙ+ÍçÍë×Ù×á ´ ++¦“!’ ++ ++c Dz ++  ++ O ++À ++HL ++ .õþ`á± Ê(º‹! tze@W;@"@… ++L*ÔìcTåýÿêfu ++ˆÝn€ ++À€ ++5rdÈ bs ++¸s ++¸s ++ ÄchB\8 `¾ > d„  !H¢ S!ê føù`%7P ++p4oQ2 h'4o PàäÊÈÒ¯µ ã$Ã"afi² 'Øã€tÀ á©©^ï&eï/`ï (D+PI ++r; ++(š¡58_, Šâ¯ Z½]t† 8õ.  +/9//¤D.žP+@=®?%àžÌ!/-Ì!'ÿoD DDœê’Y7áEØ9(  Sø:(L9Ânƒâ`å &0=àƒ /Ø ( ¿ü% /†ä&£ÐÍw•>E21!D0 \…تX4100Šw|ù ++&pà nä ѱ2q0àŠå4@ŠA0Çmh [%ÅwýÌgM †Š´/0d+*% @1 ++/ í¿±qB%À°*M .Ïÿý†ŠA ãAu4% ã¸ qI nìIKÀJP"`T i dÕ ¬U:@!@,ˆ%À1G8&"íþ€%&ëþ¤%"Öþ¤%.ÔþÉ Q<&È?ƒåD>t4#44@’å64oà4i 4 üÞüø oà…ø È º =MÝM+±W X={x?¯uZ?!¶I{hU{60šè_  ãBþ½ ‚å @‚å9A ++@öÿÿêK0T:”h(?*h($(cpP žå 3vÙňKµ °¡" ˆ+. þ„ö% ã”(ÿ”("êý5Lèýÿêìè /¥ è.°ýH/©ýJ /”ýïF^Rï(-5°Ò™ðB °   èäòZ,%$ ++#x" Š uC߲ߙ³O°—å e9ã°È1Vœ 0`·†å †å!†å@>>;s ¿#É¿#MR d_^_•[<]9¸OŸ09%”¼)Ì  Mßí%ß=0DD0ê/ `[…EÝ8" `"›|ä ÔÞsŸU8kliµ#0 ++Ú Áí-qa ÔNøG5S=jQI`x¬ H–<•^+I+jÀ“å °“Á ' á ›L"á 1á  À¥51|1ö À©5³)TÓ®1 —7Ÿ˜¡3P㔡,o˜"°ø  ¡ ZQü ¾D †u×@× z.ö°¹5y¹5=0¥ /Rº;9¢„$.0µ!†0U d/±èq8jò_'Ø#!:?6?WzÁØ£à ] §(’(„q iu Z ãpäP# kø¥8, ++Ü@Rÿÿê&@3(¼c T½I…8 ¹§(­1 “˜* % /Y<ß1à› ++qüþÿ à›¥ 5ùþÿ    œ <.í˜0 é  ++X^, n œÔÝP LØ‹È.¢þE ¶›þÿê8Š"À/.PØB ¦g¢tÈ ÎÞ ¼†GÅ@ã ++#9 “Î/ àu}+yí%àz 1@ŠÅ·nL@&D0$ 0$¨]. YY7Z/ @ø³ Ùv3. @þ6~Ä$ð§ˆ×Y×10‚‚CÝ7‡&ùº|š`-[ö7œ#¥€µ –3€–3ï/–3 áÒä„€ ‘å0ƒârÁs&E#¸" ´?pÁ",Ív¸ü$XLH øµ”µÖä{Æ@Qÿÿê¬*$àŒJ:ˆ [lµˆ/ àó*í%tq ÿÿê6‚¶/(à¼5æ K<2f30„„Æ„Æ„„Æ¥@„Ù4H0ë0+„"4H Ç"®â.š4 ++0 ++09"îSÕ+\ÅR ]'<.©í'§Ëâ é@.@°/µF#;/œCC*€#¬…¼&Kä Žãƒ âd.k²k´^´K ++ ¸À' (`ÄFߟZ2 ++[yZ2!@Š7 Î3S­* @† ++˜'æ5á*ž€($ý-0RãêgV;‚r8ˆD$påV›Jÿÿê¨ù€  wk&@_"àÃ&%°Œ'$Œ' Ë!]„å0„ "­»  "¿ @˜¨ãC0ãC¤)û}dC ++#ᤠ_ ~9/Ü o U\ <›½`P)þ11ààˆP)I(P): ++' à“¤'~¤• î:îcnaÐLø6(#Hü ¨†6ˆü @å@)@ŠD V@1ž.\.X.,0(" „3n|_$àåOˆ[¼iê91@ŠøL, _¥'@å@ Ë%O&™2 ™2-å@å d*]x.¥þ à­/¥­/T H±TD–P_ õP(_ 5 Pl_ ¹ P$_õ P(_5 ++P`K­x+P-_  P¤ƒ_Šn1Ô&Ìý¶e¶e5÷ÿÿìËF/›ýÖ,x]XoDýÿêœ.*! 8 _šåPÈúüÿꤒ .ßp½˜cZÜÂÚÊæÀ 3 ‚ÚE|ØÒæÎûê.Pê.Cê.9ê.< ê.'º.J.ÙÿdÀ#€¢.–° ›.0´c&`ÉHAhÌ‚ 3¾.X¾·GЊ·&8ÏHˆÇ.# ++(ï°D ++ ++X³H ãc;¿8 ¨8ÆæìntH2ÿ\5ÐBh&@.›j)@@XpV²0ãS^<¨¼ÿ¨4" ++àkw }*LX1Z ªOeȉpq×S: ¬VCH ®%–hÈXB P{# ¬Í`Z×Q ò °ºÐ(©MYødÀw3 ^ à^i%€©,Ü. ++(¶È n¹^ëTÑ*x¾›yWON' ++~ ÝY'b ²yÑBX ´BM(BM Å¢BM_i¶ ¸BM0G‡'c!¹*M¶k ]=#p5`V…Ö@ .¥Ö@PïJ…å‡ Ò!`sÊB °øœDb åÿŽ8.äläæt81 xNÇEÆñÿA   6‚ÌÒÜÈZÌØÈþ\‚©Ñêe¢é4D ++Z;D È¡Ÿ —½ÈC pªÕjîÕLPèCÉ|pSÊÒZ•Ÿ":E6S*§¾}6MÎnÌ>DÿÈ«>7=@Ÿ|Obž:3PãÛ.10“B_V0§Éb€0àjå6–´/ à= jØ-¬6 °* º¡TºT3Sãጠ¦ Qµ/ 7@­€" pD„ýÂW6M B(JzÍ,ÃÈúÕF ¸ ++0)"Žº  È /Ò/Ç/²/L•ë/Luß!থX ´!0”êA5Q¾ÀôŒ!àOO/@”!@/”"@˜ ‡Í;ÈÔ‘· T:D*”G›™”GKà ãuÜ» T€nÃlÃ/AÃÝa2ÃÃÆ‹#„¸ð¸w " ºÐÛY š ºÐ_KMò)@:a•°|U"`,I"Àézm> o¾Eñ±$˜U@à–åLy1,0Šú0OB á`ŒL" pôx‰(™€Ž—åhx ‚ñ¾Âškškk›žFžFZn ++“‡å0‡å ‡°‡°‡È=à‡†C`6"F+Ò D‚ ΛÎ/ pÊð˜âßIÎF_| 4^ãì ŶeÙŸµ?ÌàNwÉu¨ M ++"š\O‡ ++¢ .p[(p[ Ó ++")</%B3 ƒ$ƒtƒtƒ$ ƒå*$ Ò!‚ô*æNã0ë0Ô0. IgÆùd&LY("·¼”x?ŽHW*¦HWÐ,! “Å,•,РЄ…f T¨Ð°<[/m’!éeX­e0]d µÝL ÉCX•-5¡¾ *-¾¡P1 ž:#9Ô] Ô½fÁfñ”°@‹@‹@0‹å nì Ø/ÝÝD°ÝD @p*Qp) (FL³ùD/ @õD  ¬œ(\PXS €åT xˆF# ++|z| |o| üƒ”X.[ üM” ö€öö" E¥.%Ö"7¬YÄ])kRm09E:À]L <Ðd ¬(žŠ(Œ! ‚ŒŒ Dql]FOóþÿê” àQñ`µ(.¡þìŒ8[u(”c,RBD/3þÐ$.þ( öVÝ6 d?x@Óýÿ}¤¸ QØÝlñk"à3U# L / Žžë' | |4ÿ ++) @ê,0@+/m@@1Qã¹p@¬Ø— 0ü käMüD­Ú Ä ++pø0¤ /Yd Pd 3 0‚øüEmMøkYµ7ñm,.w B*GB*% xÍ wÂx ´X ‰db/MÿØÌ0Ì.‚mÛØ(ú€ãTÑ,D»þÿêìÍM *YÍMì.fü˜._üø].¸û(.¤û´¬•.ƒûÄg.Nû4Ъ "Q@®˜‹RšèZÈ~ ++HºHÌ!`E¯O ¸FP˜dxÖÛ4 ¾z4­d+ÄÛÛc@ ¼H ++ÜEÀ À 5š@ÞÞàæ43B¹4H9X03’8Þ`ôØ»?³/ ++(â (PÛ„ö  4p&nM¸ ¾@_%' À_%/P÷/ ++PÐ(XØüÄg4QIÊ Â(îa"PXB IJ…1à $1äèÈݤ% ++›Z±q Ábu [d]«3*aCíb==¡Lô‚! ‘™¦Œçä`+E]@· cýºÀD‚" ô‚ … À… #¾ÿ ù/áùOšåiˆ¦¾’Yد!qwÚ Ä ++((ˆpÀ!Hâ ƨ#!p0Qº ȵÖIH Êþ"$Íþ"ÌÄÿ¡÷Ì÷#6kÂÆÆÊææÍ#ÏErìÔ`e V I,‰—‰40ÕxavW°£c(ëô+@ÚêèÂõV €B Ò ñ1ÚDÀt°Ñ=úPú ˆú0ú ç·‚†å°†åÀ™b¨‹ }b"pÈÀ"—ö½½Ô` "ü×· _!pšË "«öôÉ ++¨ÊB Ð  ˜ ++#ì ++R ’å"Ýå@Ä ++=à‚­ ;\#»;\PÀžå°§»\?\ö?\_°v/¥R;/ŒvR z.Ÿ/ †,pNŒ;0^0[ìPü<7üDü 0Ö/ûRR/æ>>žù‹Ñ@&îö<"¶ê ++ë^\ÿ^B\ᥨ<°Äê”ê^0—å žˆNž žêê{øO0‹åê `¸‰ #‚,‚¸‰¼IzzSàƒâ ‡¾ŠŠ0ú/àHºâŠ0°™{øB æ /pæ/jæ/^˜(0˜/Eð@(êð@*)ô A 0&pN"Ô& J("ùVxt>*èj!0‚¿þ,×,Ti /ÆTiïñ/¯ïñïñ/š” ª&…sLsñ /pd0* d0­âV&~0¢/I¤+/4" Î Åmâæ?$@Šf³+) ++Q 0â$Þ÷Îæ $€D ++"••Æ)m ê{ [œͤ)m qì ³ˆ;&­ ¸¡†&´®!0Ä–¸Ìa{’p’0 \ N¤’ ’0’V}, V}–/Å –`V} « ‰–~  DlXæ£Á)í/“å÷Q À^N “å, P»hŽ ƒå ƒå?4, ÷Qd%ÌœÇøÏÀ¢4j ¤( ++{j €B*u0@¨?(0šù!@‚R5/~œ qÄ ÄøxLA \\t }Î'» $?ápX n¼´ ä7¸@¸€Xs€å@€åB.@ Œ. Œ"@ ++¸ ++ü #ƒ†?ƒåK®!˜ DÂ0/ˆÿ*#(/uÿ*#ù 2R.Úý.Åý</°ým N ƒåî"tt_<J°3(| !,D/ñü¼ áÏ.´üX.›üî#/‘üî#/€î#î#î#i„ î# ++/Xî#„ AD D /,î#H .QH * 0L û.+ î.+ /Ùî#  'oì5 ±  Í¡¡9€È ”à–„ o i ]   Iä `‚åà‚â  ‚ŒDxR#/’/0ž$G ž$< Dœô ++, ô ++8/ƒÿô ++C Tiô ++<_,àŠå0ô ++$˜ô ++^i\ $ô ++Ä$ n¼u$ô ++A, Œ.Œô ++5‘ô ++Šô ++°Hô ++  Î.$/øý° .Íýœ.¸ýL¡´ ++,qyýÿê—MhE t jÜQt ) .Fùò(.(ùÆ(.ùÐ/þøî(ïÝ.ÂøX©@šˆmX@Tøÿê8¬"Mø«w&HøF*Ù&E%/¡>.¬Ÿ”#”.ø!„nŠÀßH8x곚)T€°h>x xƒ(#«Mü)(ü)](Àü)Î(8Ü\å)ÈÒ(@Ò(VˆBêIJ@°ô ÒÙ)Ù)/©pôˆô ++HÕ)ôƒN€¢^Q0¢^TPÈHHÀ ÎH^&X3`ôê)8œ*#*Ü) Ê* Hø €ã(øÚ* Ñð( §‰´lx Ñ×ã+ˆ'QZ ÐIÕfÄšãO ++ Ò½'KÚ Ô½'2ÐQ ×% Ì)$ѲÌ)ÖÇ'ÿ°S ØóÄ'4Ö49 Øã)$ÓÒ°MZÚ Çå=æN4&/³Ùð´õ‚ÎüD > /p—^ìc-Cå© *Ýe".ÑO Å|1 Êñ»€()—$/ G—$—$ýR+ ++W8òrÝ ц*â ++ ¬‰0P”PcÒ Úxyž:v>,YÒÄØÊ~^$Õâ^ÞTG˜^,^#^þN߸^ÞD‘CKè.™â Ö4Q.GÜ«sˆ äÌÚ~!ÌWÙ / WÙ Ô ++íH/03K½H "0*0 ++‚ö(ö9ö=-ööö. 0oG07Ãy-x‘&ÌCõ(b ++ <H<h<C’ Ü·ÛUJ ÞH4¾ E$×òEàEË ++)à)*$Û¯2Kj=ä6åZ}ßÂ8B æ ¨â$YÚ3à„üKQ„å „QM‡Î¹rB â 0®Ÿæ²&•;VY ˆD– s‘ï³" y9Öå •BÝD³ÊOP{*å{LG/R°c[ 6p”åð^ãï³0Òô;“åNô•P³h°P0[á°‹W ã*¦UG?‚QG–Ý¢Q‚å°’ùéÈk¦‹àç°1^ãT~ü íÈKË/íÈ 5AÞÕJ«Öåë$ñœÖåyÈuÈð.ÜZÎ( ã 2ªC  ã¸§gÃg`¦X”X)MógjC.bÿ¯S2«'Ä&7,^‚å ‚‡ / ‹FNãÒ[¿C^ã?È à°qà“åôšÿ:¯ ä š(/0“Nby #pVã+YÄpVO šåx3qz/dþzELe:‘' èU ø¤ÆðNæ/ ++(Tæ.‘> ·ÌÆ /©h¤'£°D  D²ß6Ê_$—å<pC1‘î¸ ++1)à‘ ++) —%ø /0‚ê, Š¼ÔCL  ++ö딡NàÝcÌÏ.àeQ§ÐÕ§  -ÃÃS ++aY 5]ÙTÍTf˜v `ZbXbª/¹f\jj j>$ú`«@Àâ2*e&p†%8Ó ++¿h!‡XŠ îÓ ++H@&ΙÁ ++ÿåvgð™ÿH™H™ÿ ™ÿxð™ [ÞàÂâê˜$燺ö €™)™ ™¼¼df°m/m)mÙ°ô ¢B ô P ÞÜÊZÂäÎZÆÂæÊ[æ&pªMÎÇï" ¸ àå pžU ++mÀ" Ϋ h ©ü8 ªø âMø 7ø € Ô .)¼5 à 9_å0Ø JàØ 525>0冠/ †† —ï~äÕ†ðe©ÔÀ$žåäñ1ñ“ñ*ñ   Îä%ëïsTœ/ÅœŸô.Ø.áþPuÚþÿê4²)'@ýò "¨B ò x 0ÈÊÌÒÜÒèÊØòZÜÞèZÂZû~F1àÏ C ++ÔG1SáRá{å€à  ++“5õÿÿ““5ïÿÿ““êVà!àšêðèÿÿ ++^ãæÿÿ ++ ^ãäÿÿ ++^ãâÿÿ ++àÉÖ0ÿÿ ++è“b8h"úà"z@* 6?X¡tòIÍuqR ô ++ IïC2 öï7(hs~É'$ëÉ'iø /PN"ã“L" zZ×ÉÁZZònÙ/ ˜ 4\fè´_ "¯"œú M=&ÛÏ6"0„^àå ŒLS]ê&|æñ1Z\ß„ ȱ›JÂdñf^ñfPcF"Pi i§2‡¦ i1 ‡œ i((×–(×&Rqó‹" ”\U^o9¼K…p. . TÄ ‡$ÙT¹)Hed .=thØ  '@@„ɸ¤VÌ!àž b ?€à ÈF\Ú0TÁì ++*T=¼X[Ý3³Šæˆh@ƒ<+AÓ5d" @ç& ÄÄ0Ä0ÄrLÓ Ç"3Êô–t„D+]D­Àx ‘4Š ¸°²p´/´/E´,´&´ ˆn ++´/ä Œž£ 8$šåè èFp!2Óÿÿj …Á5Ïÿÿj Ì!“Ð „ •ái°CØL•ÈŽ¢ø. ø@|ÿÿ ++Y€´&KX@ŒsšåTá"$$tùl@4ÿÿ ++h /@ïV*9 ++\_@šåÞð˜óÚ ©ÃŸÃ.ýf}ýÿê08)p# *m Ø ++"0p#QX/JýÁ1/"ý6’‚ÂB ô@÷ fB øÈ©ß#¬×dú  ++Ь× UZ l¹-Ý»ø!L­ %L+u%L&¾@< ±<(í< J ++ˆØ V1 `. V1Tð.ÝðM¹§s?Â'@Y/ZRÒ úZ&X&`pRHâô ˜B ü è ÂÄÂÜÈÞÜZæÐÒà×ÂŽºóeÜËé0Ã&ÖKi+"pBC ù)R^ —åa0"P}× (syK  Èô1à’ÿl >@Ç+Qžåàó+D©¹×°ã+[ p ++ ›å°ËÃ[ã+"°ã+!à¶E'Â^  áÔÕÔ~D~D°ö»+•ß ïÃ`fAÒ üß;O(ˆx€ÂÁüugPš øÜð ++8#0_"¸8Š0SÈþ¯ƒñ .ÞÄìÒÞêæØòZÒÜÆÞÚàÂè 7 ++* BÆ*®%£’1àžã[@1 ++ßG-T1ž¶3&àÿä¾ |¦3 càåqIþ “åSHèƒd| õ\ÓLÀ"}îXô ++<ȹ"à´^.^ 2(¿¡V'Óî ð ++ 10žâ')$ Ì 444 ?›Þ>¦50@ s“åã0Û@'˜˜ ˜¨ ˜W㘙¯?÷v»ðOÍŽò/à¥.=ìr £3ÿÿêêTú€ôu þ`&HiX ’ þ:,øy2=þ]S )ŠWø);i 7P ++Púkz-ò ø ++(q=d#í2«# >pÄÇJ+½¯# °‘ J+P yJ+PDJDc– 3æ ‚9‚þ*$‘Db½ßOD2: Ô½·$Ó#²`3Û#•†+Ó#Œ›ÐV ã™ÿh„ó"‚î+ýî+PäIë"<Š! î+&p“HX2-"˜*L ,¨¼ï¼¼ÿÿÿN/ ¼¼) ¼ñ¼¼ÿÿÿM? hœ_ÈÊÆØæÚÚÚóÚ ++Ú8ÚÀÚ¶Ú ©Ú–ÚPx–rÚ DÚ P“X® /i®.~/.wx¾‹¾‰¾á¾WtP¾C¾È~}ø *È* Á éN\ Ú ++¶ ¶õ¶¶ÿÿÿ=? ±$±±÷±±ÿÿÿ;¼Ÿ Ÿ) NŸ"ù2ÜDM .·`æòÚÄÞØþLi  ˆþLPþLpîLóîL/ Æÿÿÿ=8À?êÒÈ&&) ++0I) 2!ûZ20 ß& (($ý‚ù Ä9øä8Ä9/à@*ºÌùT Åc±i! €= mrîÈ/ Ì/É:Ö: ÊXºB  …„o«¡Ýi ° þ“ :‚ :/p]?Ȩ /b¨&\¨ÜØ", ++§í‘±‘±xb0žå0Sj2!àžê3è@ ʇqâ3¨"pO[S% z2F!2^ãjºAá à“b¼P0“å 0²3Sã ++5]6”àn2®2Œ©jâ%?ˆ €ÛW|-|0WQ0Žå ydš@¨`ô;8 BR¹ã25# @-k¼ î Ë,º'3“å M„D±ÿÿÜŽTq¾ …Õáx*< Á< P {(Y»ÈÌX'Ôl1žqY¸/y\L o&¼ÑY»0ÀSÒT/ Ek@ðÕ}.=]q* ð/0ô/ô–$. ø ++ø# 0ô ô „<ï8Ê ¹”pëò  þH¨B ážþÔÌ .…mÜ;.fþ´–H ++RB ˆ~TŒv.à~!èLQ  ݦÍ°]P² ++`{x±B@Bä `ø ++ è.?º/±]X² ++X#Bw"  ++  œ¨ Dò Ê /š?‡@?‡?‡8B `ª9*í Yýp??‡^ ?‡‡}¦ (H GÊ-$ˆú®Ošå‡.Äþ/¬þ".—þ@‚,sapD,×Æ€ &$þè"`\  ++* Ü"`O  ++>. ++ýÜþüÿêŽZŸZ# "ã0ÆÁÈÅÁwzò³ñã 4‚ž]—# ++x›'b80N¿Ö€ ++ ØÊÜÎèÐ@,b ++ 6›â¨ÈB $ øÒ¹j4Û >d=Ì> OšåéÍ /j%ÃÿI/Þ@l $ N$°yFPB_¹ÃXB , °‚~>x–ÑLE ++;õ)93[ã„z= !9É G&°ž¤¤ÒPu6yŽ>°Dz1 •f›H/ MÉPW 1S1/px e.AÈ"@åS é+…é1à á{ö  Ps3…jÔ‡w…jáj1à—àÑ= —aÚ= š¯/C­ÿ c± òè›CËS ++x ¥ '‰9 >4Ožå à4ßB?TÜÒ @(Óôú> kn ¹˜ÛÀA: /EÌö„ïþÿê>ìhVzcF`B\P¡ r£xz’ ++’&  H ÎF̸"&Ü&à"zà"g±-0— \f Ý„ Ê¡]< ÅÚ? —å¯ü^n "@ˆžpÀ©.I„º©«›¸$ú^äø® Ÿq0äø ï@Çy’T& 5+=P†RBqÊdP€ |þ¯p-0èC ã fˆ ë YŠd ++P´t‚X@<’ ++& ++hé PÝw B & ++(]=1HÜ£~8sýGh3ú8Õª¡ô (Oß8 * ++PÍÎ!Xlw¢ , ++0lSXd ]³ . ô2à*Þá( NÌÞäZÊÂÆÐêÞpèßóÈ *üæ@Òæ@ÜÞè@Â@àäÞÆÊÈêäÊH^P«¤P«Gö8/Ѐ$\C‰ 6ÚÂà4 ö~"v~ÙfW1 0(.A’ 2› 7L`Lˆ~ 4…3L6L$6| Hx ++“vLLˆJ~?L:LL(ö#$P3€å '$†uÿ€å €å°€å0€å@€å#Àq ûæ\tú}YM / \ üÆ\^É\?Pãº\¨ÚB F - \/½c$FiDL­*3£W WØäuDŒÑVpŒ!`ž"v…D$`Åm W+ÉÅ`ÑS ++"5ƒ#"&É?àž8 o¹B/šxx xå /¡û%1àYCL8 ÜZiQæâ^ãèERìâ õrµÛñwoŽâ ”Ó ++Ì Ç#8=+aQ!w!%½O%d³"ÅOMس\Cà ãð×|$ Sàžå( Sàžå, #ÌÙ Sàžå4,ÂHyS npUH.w!x/m"e*T/@…¯/á ÉTã%Ú<L/ã.Ñl¢(â¡:/ªh£CŽü|0 ó #Þ„/0Šó&.Q%5% XÁ" 1%. À&GÙ\ !C ‡å Û o&  ã¬ X­<¹± ù&Ÿ1 €´\ [@Y²Á˜||| | 1ž£&ÉÙ Ów ²±/¡ÿÝ|jO€6@'œøH"ßþñI@Øþÿê§'*áˆÁI@½´ . 8›É.°þø¦¾p ,U yæìâ ^ãþÿ ++Uþi?"þå Oþÿê¤ ±˜OËýÿê À` .¡ ++LoŒýÿ ++ÁÿÈ ++.á ++Èc)V.Lý$ rœ%`B 8>·pp ÜêØØŸdœd eƒR$s+ *Us+H ++ 8é$2-%L"õ]&ôà]$µóÿÿà”å 0”çgîé[)“ SQáèPe ++S¨«#&LeßBË $É///©/Ošå›˜”ý¶‚(#‡*Yj 8ƒZ`ÜX9ƒ¨8¨BhÞ ++ …*UB 0ÅÚª :  è A”AA@gýaAL"”6j'Ô1ÐX”6&EqÈ@ ãTãÊR&!@„õ°” ¹n¹;¹ .R„#àž„^„' œýšý/eýlýeîPýÈ%è€ÔX â :&¨Ô”ˆw”]UþK] <2þ-êþa .Gæ‚ ÇÈ®ÕF/0¸ ˜AÚ„ D Èó–"$T‚7p^00—åo¢ncn$¦3/ –1lr ïö –1pnd&% 30€»C6 /eÓ= 0—çJ •\§ÚûÔc À/éz¨—ˆO@Šå ˆ,²Ù0C*áC"p{Ž^(Jk­"‚å(!NâïŽz›)ÿÿêP}§ è/@ü Hn6[ÀeÇ­/Ç­` °¯œ›Oµ PQ"¨ íÇrËþÿêJÂ20 <··»ÿ.1 ++»ÿEñ.ù[ Ç ++–ŠÂ/f›ú¿<~#eŒuX¸B†xÜ­M  *N/@6ÿ˜'$`=>=ÿ >=T=!è ++VBVÿ/ @W JÅ:"Å:ž7 0"J" ++L" nJ%ˆih ¨ˆN"Aˆ<ˆ""MÆÿ€å €å°€å0€å#@€å' "ä ", "Ä " ¸ " ++hf q¸ / ". "/ö " *ßñ.Éñ ","ˆ2"y GÕ‰!é!/\/Vé!'/Cé!/6é!/íé!;Ié!\é!é!é!é!'é!#é!é! 5é!.Òé!/Èø"Àø*¯ø/›øtþ é!T„YË „F" ++ ¿¸!ù}ÄÞCÊâC]+ðJ]+ /­]+]+]+']+#]+]+]+  »š§ïz“™+~pPa; <êM+.Üþ(½.©þd.‘þ´k<^0 (ô¡).Ëý(´(.‹ýdj(U(7/#ýr/ðüÞ.Ãü€ª@›‰nXU@F4X ñûæ?TãhI2/]I2;DI2L&fL/</<;íI2D/Ñü¿I28/‘I2›I2„Oq /d   "Ëö/0.]i2V# :z$?@ á­25/ýPh L¿Ø•44Ì44. ¬¤¨.ãÿ|/^ÿP93 /óþ@ä/Òþoñ ,œU3•U3á8 *-$/fú1¤.e¤"@ú¤.Uúø/1úU3*ÃùU3»ù10"§ù4-/¥ùU3ý˜/xùU3' eÀ¸/9ùU3.-È.ù˜ùÃNV3È xT1,PT1ÿÿ¤PT1.)Æ ++4Æ`1ÿ™8Ú' ·ÿ˜0‘)cd˜ Ró ++ú9~~+ ôHòH  R"+T"+ÿ =T @JTHX˜TVTÿ VT1€F´J€\X|,ÿ!X]`]p˜XHn„,öË4¢PòK*ب,X0P6¸jz/VHFx/ðèÍA€xÌÚÊ´,‹š#OPˆ¢:ÿ¹$ÈšZöÿ Zö©5! ÚÐB d ¸‚y¬qC<q-1Ÿ¤ } ’W/~ÿ9%<¶U*Åï7S9/U•"àpà à/< àì˜p¦Ô÷< ¥›¦jô àà pýý!äÙ 'æ1½Y{‡<ª—D›D(/ ƒ” a+-,[>rD ](/ Ì‘Ã’ˆ](0 Õ̼Р£<4på§<@ÿÿêÁ+ ù0 á_<²\ 6Y]¦\XÑšª\µß; ‰Ì¥ؤ‡^ÝOA­*eyXÔÃbRÁW? \æÿ \æ<$ T^TÿÛ•ÆÂÈä! Új^jé N8BöI$‹`ßÿ `Å /Pÿ§? bfÿ!n0™ ñ=Râ d3 *ÖÛ=PÛ=Yiâ fÛ=Pm fÛ=ÞÚ= qr;Ú=ˆR;C: hR;`R;Ú=$ "R;tÚ=TÒ †å 0†å°†åÖ=b;ÃåÚ=»hj  !Ð:;C]ž7—\&ˆw š#š#š#š# ¦# .$ *ñ Ú± .Ôö;ÊçZÂçZ±çZ.þ8¨ /…çZî:/â!$â!â!T, GЭ?TãC^)8^)<^)L^)ï§[áØ<È^)D¬^)š^)8/µ^)vÃj ++;N'V…R'.!5|Y‚AÊ(h0”€Ê'™x0@ Ù@–¿n)¾0r).5r)ØÌ HÒ\ Ê(ƒ â(L1WÄ@ ÷Ê(ÚÊ(ÁÊ(ºß[@ß[µ¢;K@šå¨)F' ùD/dþ>'.1¬>[\.Sþ4/.%þ|bE'DXÜÆÄ ŽìÊÆèÞäZhP!!DÔ † IA8- ++°ú jðB l×Z09']9'J9'@0õ&*9'LÎZ Prp1ã󺞞å®à á@Î}&]&Ó]&Ñ]&‰®Z£Gbó]&"ÅœY* l¥Z%@}j88b /˜ÿº¢€ „ÒÞèÂd(½Áx p 8Ê`P M€œUœU@Y ,ì 2—J½ F>ѽ¹.> ++©²  ½n#Án Åï ͹ّ٠ö°¢dxB n•À´Q´> ++4Ê25 ƒzq ¹ ó qé |~F=N PìdÚ*ÅxUx¯x1’2#dÈ  |=3ò=qäÊÌ!  ¦pwC nœ`Xв 4S: p4pÐppQr!€‚f(‰P@q ‚YPB lº}!z j ++0ÑMtÑMK9ÚÂàˆ ˆŒÛoh“ €å0€åÀÒM@îM#ÄXÛo¦hŠ x˜/ÒM"ø ++*é:M#( /‰:M/ÌÉ .Æ:M5:M/Ù 1ì.Mð)ðÒ3U P/H"yH*hH.TH#H /5H /ÇFL  ++/¶ ++;/ŒC/Œo0ˆaü<HüD,ü/M ü|(NG©w! 8–ÂD,/ ÷!DöAû!+Í×"10šån|p''U{ ÷Hv{È [88s$<³  ++@@6x50 á>pžåŸ"## ?,pŠ&~+‰ ++¼?pšå*~/ÈnÜ.H´ã ã ¦ã â{ kÜU Câ{‡hã Ú| jÜÅ Ú|ÿ ++z(Â}Ç"a/0ÿ*± Èÿ`ÌÖ‚ÿ<ø kÌ© 7# Ç":ÞÇ"ñHÇ"T_Ømÿ Ç"XÇ"œ Ç"(Ç"/!Ç"ÿh‘r<SxE(1(Ç".ïý<Ú;".Åý<±<¤xP.cýðP<<(Pòç!.Ýü(¿Ó"xfK€Ê{#ö/!Ê{μ¡XÊ{ygLX3$ƒ#*±ƒ#Ì.¡ƒ#/Ìúƒ#.á£G–.Œú$(„#Ä„#ÿ{Ä„##ÿÿÿ¦Ù÷ÆG"ÿ ÆÊæH…öÈS"ÿ!=È /v5XDÙ!Cùʾÿ Ê´#OXz#ò÷T/*®#Ì#ßä#PSz Ìä#K* ++ å#Äå#_WÚ Ìå#Îå# ++q#Šå#‘Ô ÊðÒæèæä#Ò0Ô0$²ÊjZÞ R£ ,X  á~p"!l#`! ++H  " ÿ„ @0“妎pL""0qO p—åq ™q" †:1 ä ü  ü 0RáÜxbâPü ! ’Öü R@ D DD@ Pà^ã%Ç @ Rx" ø†Ð&† _å0˜þ2@’ 40ôþP°^ã”bŠ˜u`& 3;"@Ž– —‚!  z ž:£sRát8 qìwž n k$ ”å à’å Tš’åÀžåྂ‡4Q4 ,€,A,!‹0Z˜’‘å  á0´ €â*¸ x;%0“|8“ 88Q8|4“T4O0“åA' "PTPž  ++ A' ÷6$· ¨L&pIë`('(%(tÎô/u0øìØå£à ã  á ’ü&ORãØþü&F, ++](]6 ++ˆ@À8¢ FÖs "Øôxwöð0B Ü  P Ø11à—wøÌ…¢Ì… o¦œ5d—å0žå49àžÍ  ++óvSñ&‘= —…fU? à—SXU#X,é[ Žå¹Ea)a) a)q“å “üw +uw pÅ_—å%0ž‘› ´Å£“Mu /¥uG0šå|­ðr8P(00,¤Ú ( *]+ áý@€XâÙb0—å “wg.p—¸¬à y…í"à yäÉc’BöözQ" Ú{öz'ºà ¶¸ 4{³ b Ü(B Üj ” Q2 Þ*2(`lM! Þ²4 $Â4 iæ h4 f4 [4 N4 /94 c/ð/4 K_oA”å 8 P8 ++O8 =8 =‘T/& ++O åû‰ä+† |#/Và<€à ð¼û‰Ê0»ª ++!À’˜" ++…/ ++ÿ("íþ ++/ëþ ++/u ++² ++« ++ž ++8 ++ úV¼8 @` ++Hë/ ++(< +++eä  < ++P± ++\ž —å —å•£•0é'• € ++“€ ++€ ++q/‘åX ++±õÁOt*h ++ih ++Xh ++ 6ž4 ++ /q •$P1 žˆ ++„ ++ù ˆ ++Áˆ ++µ ©€ ý7… QV° ++Ü .Ts>ÿÿê"ú  ++c âf ¨f ­æ§æf ú«;“å&O4» ‰ tj J/ 07 ψ/I ++(™àÕ…0§/¹Õ…O0šåwNp’  5€Æa‡öØ R€ëS Š ⺠/0CA0B š:°Q B ä' ä' [ æ' ¬& !Ò& PB ð¨‡È& 2¨‡)¾9$8/ià‘å 0‘ ++ š3@ ã“È¥? “å…؆Â8ŒLr±Œpþ‹r+?šå܇ Ðn9ð ++š rPB î X èäòäÊÌ@'-: RÞRË ++šåÇ A: O*u©3Ç 1#«žž1#¥u#Du#y W‹ ü˜…ÊÊ!0”u pžåQ=%# ž" à-$ "øÆ !-* à21Ìä!”tVä&å!‘PäQ(D  DD( $3Rã6]Sã*š ý;`Rá%*j@ï °žåæâ^ã (Ÿc©í8&e<CÎ~q‰'è¸ó;D ã© jœÅWPpšå g g" °'S\ã*¨ aœ)‘p/¬/°"ÜW$ °/´ ’›PÀ ã`ÌL`–åÀŒâÐL GñúB ++ S8 ÚàÏ,Šå0Šå‡@Æš.×*Ë8Î(ÏLv" vLþ ++4ô»J4p á ++ÈE>.· ++/­J(¢ /”ÉeCx‡Ïf0 Xå` «¤+Dšî o±õ^¥¼6p6/pÈ8 ÐAè+Y-@f /þ( ]åPÀhSŒå ŒŒŒŒRŒå àœèm Œâà‚èÈ7 »Ì<¢:3 ÌÌÌÌSå à‘ÌÌ…Ì È&xÁb@à‚âÝ`3À‚ÌMd/gº. ¶S<°<‹<‹<B‹å À¨$?ËÛø°ø/0DØ#õ=M øb9ø¥b0@ €0„åà„âŠp3 „4}A.òÿ¢ áº/¦ÿ¬, Ú /ÿFsTW@/>ÿF0@.ûþ.êþ<ÃßÚ¡’€.eþ¦/Lþ\<.E®:8P.1þu6NÊÉ ¥UR< ò"HÒÜæèÂØØZÎêÂäÈÒÂÜ!M £È/ÈFX '.* ++è’ ì þ „PQ¢† ~P+¸$¡ (ÒÜØÒÜÊZÛ òÊ$@Ê$÷Ê$íÊ$<Ô…oD/¸À/¦À/˜Fv.à**ÌDrsh<ZhD>h,éq h/ö@& ö2 ­Æ»³ ++Z?y»³ S¦/é„?8@ŠC´ !¿íFˆ¶8÷¯#¿¸/0‚•i/±•i2 \ì‘8j/’jp ++^?ˆÐ"sÚT"H`ü10ž ak »s.  6' ¬/J¬;/1¬Cs/¬/õ¬4</à<;/Ç<( *« 8$" IkìLè ’ÿ éLLp»íz!h.@\p*Yp.<@Ø]tØO ÁØ ?<Ø+O 1 p H°O@@Šå€ ;±€°"@@Kß Xö*#PF" @ô’ Ä/ãÄ(0Ä*u ++Ä@J"/½A=L ª¦#8ä4•x  $Ì^¿‘  l/bq"T 8q/4 ˆ [  hˆ/5ˆp ++K? ‰p ss ë¹ í-@ƒ*þÂ"¬ Z = ´4¬/Þ¬/ÐÉr8¬ nì¿ Å ¬8¬/±¬/oì? 5 B’:Ê(¬Ù? d=8p?[¸? h `rŠ$* @ÄÈ [¨? ý` †$V\6/o@åDš8 ++o ?mp 5 à?H š’$ ++[ ?Ýf%86'Z& /¾/O.Äÿ¨.£ÿ ‡(gûÍ ´)P PãÄ¥Ô—w<d(O< ””ºœz/\ýÜM2@T/õüã.ÈüX.¯üt˜(†ÛíHx:((ðÖ#/Ûûà̺ŸX†(xahR@%€ ®$y®$ú®$Â$$¯$€^)øT¸T"UÖ!ùàW":êâ fgèfgj °‡  4­x"Nä"h23}ïæÊèZÆÂäB!t<`Ø‹H0Ú"QXô GÈG8j#ôFkôËhoh@YŒx3!ÐX0K(@à"-%u ¤4²$%-`þmV@~hò@á\#Ùz&sO=`+H©•$J ++•$bºe")¥ $$1Ú$Z"  q"M"’à á0 ápQYJPpšåÀ}"F^ãÅ_ˆ}".m¬/c\(°\Jf;°\@\„\.ˆ!@‹| ï Êm„å °„p Œ%°†ÈA#p` L‰#é†/pžYšHw4Þ9 f9ØÊ,¯,ž.€S" 0[%"Û/Àñ# @R*Qñ#LC„¦4xñ#1° ãX!°‹Xñ#_ à ák\F ++Q*PB bbXDd8\ø#Iø#/?è;&ø#D ++ø#/ø8ê\ø#!Ö’>x`/Èø#ø° !IýôL"pô 1@Š¥ :4/@:4Ñ„X èà !ì/„åuP/õÿ:4N —å«Ç)â-ƒÄiTD e‘HN .QÝãQ‘6?,mâ /@ F h± oÕà)Sò3M  Ü"@ 3Çò3 ( ¼h$|1<#x/ÿh îÓô/ºþÁ{/.O¤XH":DÂH"ð€ .D"_ÌèòàÊJ" 6 ++ 2xG¨ ¾!#€U*(HMUZÞÞàæRé.ZXô ++X~ Æ %eQw2 ++(K",? ++ B<1,U º"Ì !(HÍ ++ÓÓ D,3Ó ô8B&  ++ HÆà` &©¦ P– ++7,0Æj2+‹²MÅv ++  ã ã–)¢&YøYøø]/Ÿd" šÝ- vUv'1@‹–= à‹‚Gî3€$€$9ú&¦î ó–+Ö ++ åb" ²'@à—åâPà—åº'0à—å¶'¦R3à‚?—íÏC—3à‚T‚ ++L ãH@ ²æÎÀ.'²¤Ä_ÔòÌ/YÌuˆ/nÿN/µNW–UlTãVÿÿ ++8R Ò$ ++ÃÊâZÐÂæÐèÂÄØÊ{ëâ8B  à æîÂàcOþquà—,ÖQiÖY’®Ýžå—å€âà€` _-i 44L44494œ«È€«È(”̓! ƒ O, ++,,€&>œ iu lô„áðа ¿¬™0 J ++â“$o ˜B$ Kº/Oøë2 —3g1Û :áàÛ +±L «H†H…J"`Á& àî39 —«+.& J3Sà§ÈÀ›0‹ *Q× ¨›±—Ъˆn=c ++|Bº$ ++|øhÈòÜÂÚÒÆZîÒÜÈ ïcQ Ê&*tWR ‚&ŸWƒ*ÈXÿÿÿÿ½Ú 1˜ÀZ¦ ++B(#0*B   L>@ ãðšåchezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #L,BûMøB Ð  L$à™åZáq*€Xâb ++0 ã`EâP…â,à™å^áW:0†åà ã à†å  á0Ÿåê0gF:à ø à†å †å ƒâ`‚åã ++,°™å Uá4*°Kâ,°‰å ‹å<f àƒå& f Šâ`ñp–åàâàŠå@ ã ð–åDRH Jâ¼”pDà‚嘘 ˆ>@ ãðšå”@1ÿ/á@Oðÿÿêij €2ÿ/á¢ÿÿêà Ð&À @ÿ/ááØHÜÿ$3ÿ/áˆÿÿê"ºÌ6êÜÈÊÌÒÜÊÈZìÂäÒÂÄØÊZîÂäÜÒÜÎæ@B ( % 5ðTãà—å@žåÐTãPãà ã0—å0]¤ƒåã1aa&0‹Q 0ôÿÿêà ãèå ó@ ++ ++B¬@BLxB0 L àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P ++ 0‚l3ð- ++ ++ÌØÈ ÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++ÌØÂÎæ á æÞêäÆÊ ÞàÊäÂÜÈ%"%"HêYð* L B  {g¬Œ ++åøŸŠåŠå D¢ u ß  Jâšåšåçgðj ++îäÒèÊXBb8(t± äÊÆÞäÈZ!õäX*HÆàìÂØÒÈ Bî  ¸  Ù@ð ++°@ á,™å㇠Pã4ðšå­|­ÿk ++ á ã  ã- '…-p á@ ãxAS:8@ áá0âSã ++qñ 0”åSá ++ âRã0“ ++9Sãúÿÿà83^ã8T,Ðe5,5€à†åà†âq¹@†å&à ãà†PyàŠå `Š!/ %%¥MI áyi qÍÿÿêZïOˆ_@Šå¨€b-ˆO@šå„Ù@}ÿÿêAXí+‰í¿@šåšå  ãœÉœ0à áDŸ^ãVÿÿ ++T5Ô,âR ÏØ öÏ ô &‘ á Šåà::+ :iRáå ++"! Š ++0$'¢bâQ¢! ’!¢R¢ ¯L*^"r ràŠå`Š“/ 2nðàå ^ãX ++0^ãR ++°^ã³ ++€^ãL ++`^ãD ++ ++ð ++ ^㊠++@^ãç ++P^ãg ++^ãú ð ^ã‘ ++^ã1 ++p^ãŠ0 ãª¯`šåðå0,möUöðB ++ àåàŠå å<sšå Šâºêjÿÿê òÛTã+ Jâ‚ ‚ð ++à†åî ãà†åàšå à†å †åv|Qã ++D ++DD <` LïêoÙÿÿêÈàRö_0Šåº¢@ Jâö_0šå«{ D¤ÿÿêx^xKxPàå€ôàå å Šå áŒŒßÿÿêh ŒS/ŒH$H.íŒQàšå*Ošåàœ__ÕÿÿêØœ,/)œ¢œ›œbœOœœ¬¤¤îžþÿê豤S1¤ P&P0“àšå à†å¬¬¬`_Óÿÿêà¬,/Õ¬ž¬—¬uc¬9 p|"p€˜@8þÿêt&It˜@I„qŠåŠˆ_pšåŒ¯$þÿê`™ŒŒ .PàŒ”"à ++šåŒu/íø+/Íø‹ø„ø˜ø…ø„)pŠÈP¸ýÿê< ÈjÈSŠåX쯣ýÿêÜ ìOìTT%šh Lßýÿêàé L_6 Ü+ü@PP8 X ddL_šåæl_ÎÿÿêôlVþ /qï„+/Q „h„a„"p„“] ++ på $ˆQ&Wãa4 ð áà á žå&Qã@P1€XâP <žåÄ\Ä  ÌQ€â`€ÿ5ãÿÿÿ@‹åÜа\;õÝ'<T"ภLfü ´¤<1 š´XnÀÿÿêü/ü mâ`û'íü0‹åF Ð x jÞ:0¢9àƒp +Ô$| 1@Š,<,+,ÐàžåàžåŽâ0ì?ãóìì켟àŠå Šå$Ø ’u$$Ä8@ šå(¨¨¨˜|˜T˜ X®MüÿêôõX à`œ˜X&<ó á  á à’å&^ãX` ’å ’´Aよço Šå à .• "0óàAàšåã ’ Z9 Žh9žp/h"hhˆÀ/0Ð+mÐ ` Ä€ø: àšåb1 0†€0€0€“€"€ a“å0‘€3 ƒ `Sãòÿÿ ++4Sƒåï” ´Ï`Šå 0Šå$àŠå(¼ ‚)(»#(” ´P`šå 0ú0šåÞ”p0“åà“åp2 Ž C^ã·10Ž¼t#¬`@ j¬­@"p€´b& ãpDOp áHo¨õ "“ S0 áð 7j…:ä„à€å0€å È /uÈ0 á¼D n,¹ĬUÄTÓ&Pã;0šåD5+¬!”¬6@Qá%\RâP¬!‘ ¬Q¬ Ô/Ô00†å$È&Rã ãpühP; n<ÅP¸?RãYx lÞ:¬$$XËT Aà ãø°ø"³ø \¨\\" À "0Û 0"”|3 ƒè,ƒåô†`€`C°†å œ ˜s8°88"@<h/dh' “üTÀ&hN h/Bh40'¶¶hh1 pžxd<È(D ´Vm$ ¾šD 2\ØÌ P L É` ñ·ÿÿêà“å^ã¼ÿÿ ++®°?šå™,†sT e>P<ÿ/áQ@ ã4pàžå€âœQFÿÿ ++ú0_0ÿ/á._D#÷þD 0&æþÜbëþÿ ++ÝþÜLÈþÿêÀ/ ˜ ++ Ä ƒå,1 ƒônàƒå³þøî„”/àŠ”/tþ4 Ø4 P ++.|ý´, Oóüÿêä /5ä .üD&‰üä "4ä +!ä ä 1  á! ž¼ ä ä 4è ä ä (ä   ++/ä ä  ä  üÊä !/ ‚ß!*±G!ä /¢ä  ¬¬ ++4(´@'`à (à 8 óèà à  À /Uà à  à  ¨‚à <”Ü "ÖøÜ /ÑÜ ‹/qÜ [/áÜ ÝÜ <.I„ ++\0\ ++¸ \¸ ‚ R¸ 7‚åïpß @Šå$ Šå(àŠå,˜ ’á,,˜” @šå$ šå(¸ à'à’¸ ’¸ a  ã ŽÌ@|-Ì|@ ŽâÀ1àÈ^$ñ„/êÿ¬õø¬ ø/Ùø‡àšå( šåÓ„$ °‚°Œ*KŒ1$pŠ„0@Šå¬90àŠ@°/ ”.‰ Ð Ð ¸Œ$´Œ!0“D6 ƒ´ø/àØ/!!ØôåDô¼ ++ ¼ ++h¨å”0  á„!”×”? €åĘ/ "Äðàžåëâ^ã€@gØ,2$"0 /"T"ð +,ð \Óåàâ àå0ô /åð I/]#ð að  À1€å8 “€å p€å @€ ?€å‡h @ëŽã´ X -à‚8**8 ¼ 1‚å`‚È ‚¤‚(Là‚å$/àPà ÜS à€å¬˜íl"ˆ@ØØ@#à@Vp†å @8@ ++00@¼@¶@ª@\˜ò'H$8$ 0‡`° 3à‹,‹å&[ãôþÿh/v `cÌ`ˆÀè0[ãKˆˆ@ˆ (¼ 0,pü¤ˆ À`D¼°Ü& ¼.˜þTîhÛ`")&@Q4ÿ/á¹(Ô¤!¤/®ÿ¤–<ƒr Oà_Tÿÿ ++F$! œ.õþ(.Üþ(ÈÎ"Ü L/­ý8#¼\.jüô/WüÄG/ô/)*ô.Ìû˜&Åûôý\!ê%ø\OŠ#"^õ#/±*#v#À/jd  #3‚åd1‚ÈbJ`0#à C^ãC:0à 8)SšåÐ!¦+ +y+O á@  +p!ü„Tå3žåºlpp O †å¨˜òÀ32}˜!þ. ++#3 +EÜŽ/)0Šd®Åôÿêd-d&p\S7ÿ/ጠ´„0„ƒ„F2 ð ø ø/©-øø@P"/O✘/Úÿ,/³ÿ/A.ÈÓüþÿê å å | I+24 L/*l/ ,! j@Ý.,!œ ¤ T€T!@€4ˆ$ íXÏ/Š°x*/°HTÜ Ð!¸ î¢0‰ 0p á¬ñà‡å 0‡å ‡åà ãà‡È1 œpœž0'ô0° žå â PÌ. ++Dp á<[V*”L¨1 à€"  Ì/ý0´'-´'" Œ P  ¨pÜ „.[Ð4­°£2 8z/]2LdÿÿêPôP0?0iå Œ0 300 ã„„)à“”@^á$0`ŽŒ à! † Æ4Î5 +]3®4 ++6 H „tS0žåÊh.4 æ3*Á3.4d°©t Pñ L‚TàäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZdP ++8 8430380 R8w8E p8a ++ÂäÒèòJ8J8ò( ÜÂÜÞàÂææZª7õ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`‚‚ ;0rr"èÂÎrò ++°BP8 (êÜÊðàÊÆèÊÈ@<ô!@üæ("ÆÞÚàÒØÊäZÒÜèÊäÜÂØ ü€¶üÂt@üºü~55Ó ++HÞÞàæ ++aòE(¸ *XŒ(<˜æäÆtŠðàätÆèÊZÞàèÒÚÒôÂèÒÞÜZØÞÆ*ÆôæÂbÌÆÌôÈÊÐhrfÜZfZnu*&@(+)pZ$*$%#' L*A)"<$v~?\bh2&*B2ëG$ffD"DVÄÞðGY,ÊE(E‡ˆ2..R˜oZÈÊÌÊäK"ppþD*¢4¢;›Ln›",˜‰.\Xû ++v:ñP8BHHB`82Q(ØBfŠ0&²PÌÆÂØØÔ<®`®0®,<7ªj< ++ª–4 ++ÆÞÜìTI&,ú;Â6ÂäÎZèòàÊ#þ;¡8äÊæêØè' <0v?¨2ñ%jñ1èŠñgˆ:"ñoÞäÊÒÎÜèlï8ï(ï5íMh —4æ æ&,Û!6 * 8 2Ú:Ú¸Ú%ÂÚ‘Àº Zàfv<à?æÊâÜdË 62æÊâØ/d` ++g>Ê` Y@Êb <–0Â%#²Â Ð%‘¨'b˜'úÈVtBß?tÒÌÇb£(Ç5"ÒÌÆ\brÆ&>Â'@~>1Êd"ÌBÌÐÌ8ÌÒ$-ºÒõèFDÒÜÌÞ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbdrlKÁ1<6¶µH ++àäÞðò ƒ‚N êÜæÂÌ?Ù.`?% Ï ä>CÊÜÆÊP?×D&¸@! ++0ÓhÁò3RpFð˜JzÀ n CH‰b ++æèÂè¦ ++zJQÀ šàäÞèÊÆè5ø>Ç?6 î>!ü ++€ @0 „Ì „Ì „„„„„Ì „’A ¤èÏ?‘‚L ¼ `1~ ++h/å€LPBT1$ ++à]ApGñ;= ++Büð‘?B` ++–N0êÊæ8ÁP8A2P¾2H $]AZZêO ++3å YB ³1jH1@€ðEjÐBR È Ì X"À¯*B&aBM@K #½0åp’å°‘— 'Ç ++#0³“ ±À†å`Šå àœÏ!¹ å ‘å ’ C,¹“óóo„å 0„å!CõSÒç ++W“-À· k5*M;?0šå{OÀšåµÿ ++ ÏÒPîÊØèR oC1h6SHÒÈš6ìÂØ'NÍçÌÞäÄÒÈÈÊÜZÒÈæQC-æVCaP °Ñh½`?A²R(WðXB  Gx àäÞÆÊææZîæR"é:@[ ++­F}+Å ap [Dq ++e,?@ŠåL_T½L§@L/àP X¹<Pð"@@F Œ —å&  ãPvQ *ÒBžå àá Sàžå 10ž" d-1 -0Sã>á 9",i@ ++!ßÀŽâŒåãò5"OÀ‹åëÁjˆÝ#05"*U5"Hfšå05"‰Ôÿÿê —åe& e&ù*Åá"1 à— ì"à—õ%±°5@U@4 D/}#%°‘˜ D°D˜Dþê'ôHŠå, Šå0L ’¡00Lšå, šåÑ}$¸PePÍc  ãpœ96 V1y&'$Õ"p¨x''5 ‚4"0ñ:©%.Ñ|„&©% ' '/AÄó˜K¨/é¸O¸(/‰¸¸(.ùµA‘°}<á<È¼Ô ½2/°E)  ¹0E)‰=.°Á6T:Á6°1: 1 ñ yôÖõ<˜ñœ -°‚@œ='Ñ& MÅ#.½ iž444 ü)! $¡5-!¬¬. f  åÝÊ<o¸ÿÿê&îE0`“M /Hþ0O3þÿê(m# àø 9 *} ++ 9ÜÐ$(©((”(„Ht /É t Lx (IPI I I 1l"l¹?$ÇNWú:$$ õ;í=%„-Z/ å;.U Ø"0^å($„8(/Å „K“„0¨/m„##¸1 0ž -)àž´" i2/0M1)?"p¬Ù)$0-ž-/0¬ Kmh"0è¬X $  .ÅXÚ/ 0X 0X4 X eu'é&I$/æþd/dd_åþÿê(#¯¸d¸.Oþ˜ Oðûÿê L¸q”ûÿêÀz‰0@ w ‚&? @~b~fVV'Ý1@ N:ìÂØK K K*ÒÈJJ HJÁ@BV ]˜ ÑW&ÊäsRJÌéTéTÑT pK=WéT'éT ór{"ƒ "¨pz“ ++ óR-0-UO‡ ++¬ <¬6¬ÇQ)eUÆmU!©mUžƒRÏ <bGS";GS"7GSAÑ?$!0,·A9pžQWáO(žòDL ++J IÝYž@E@-0žœ?@p{$Š ++1 0ž»"ð 0å °å°Šå p—åpŠå pžåpOd)ŸAPp ã°Ú`Wá­L"£AS34@Rÿÿê34/áË3—kK¢ pH§A/' ç$‡ç$a€å € 91 °Š‡5Ö fÄqÖ@hæ_ °šå$ç$[/3+4†åLâ—AE—A7/g2›A#‹%<%W«4"p  ›% ›%W5/>ÿú ++ÖÂ<´ožÿÿêoïŠG/ž,°R—UÈÄ"¡þÏN/¥š^š"p6Ä ÀOÀ *Ã: à‚~0~"pî ó- «'S0 %œ·.Üj _ªÿÿêe ðp ã° á °›åp‡âß2Ð;Bü"ü/¡üw/-üŸ8ü\oZÇ 0c+W1R¬*à짷R·Rg·RìøTP’ýÿêøs>·RL´s>³R¯€ýÿêÄ) ++H4³R)³R° ³R³R.Åý³6·Dñ«Rèè_Ðÿÿêì SønŸ\1±\´ÓT)0¸¿+t"#ýÇV¿RtFÇV !0šh@ýÿê6.é _-ÃV"ÃV¬¬Z¬$L¬ ×_-MŒ#^B„û4û4Ã'F_ ]‹. `¤ §U,,$,]/_w˜"|ü¬/9˜K˜ĺ˜7°çLp˜?/’ü˜[ èè/!èw/­è7 èTè\ßbKèh ++ç9ß^!0p,P…ûÿêäs7h/×^$×^`ø×^×^/Íû#/¿ûï\G ^ãG88S0å00"9û£8&E: \«a"«a¾$<«aƒ($/uû\//e>H@@ôúÿê¨&Yùf)§DpKdB$4‡?Àpÿ4ûef ûÿêWûÿê OûÿêL}/õLL_ëúÿê ü¼ ++ˆ |GA 4W=ä/‘œ Äœ <Úg5@·úÿê¨ "´ú²¨Šüs??7ölx .Xú@.Qú?-ôR 0T( ++ô4Žô4©4 XzVIm¶H€fX*0¿ÆÂæÊZØÂÚÄÈÂ0.fdâ00>9ê0ô3 hV6Ê…--0IÆØí0XÐ.€d^8^Q†Âæʘ]†ØÂêæÊtÆ5j¢^\*;4bÖZ50=?\bj5\n0B>¬ E/fp?1W|ðÇ3! 6(ÌÂÊo‰~ÄÞÈòP1^a,ö êVˆB` øl àÊ”=d@ —åÇ! Y/pÎl*q 8 Pì/qrRVH·o3ú`å/ð`Bb  ¸ ÚÂà^ÞäÚÂà­ ++ ++&¸ O& ãÒWB/DÑV‘åpxp®ö@ð—å­yµ.ïo˜Õ="p’¹Z9 ‘Î ++ÒäÎ ++Î ++Ê.ð' ]<_óÿÿêp®ÔÍ /‘ÍOšå©Îiª N¤ ]¤H¤ “åP˜0.¬¬&/%²0ygp[$ °“ö0"ÒÿeD.y^ ´¨ Ag´´4Ü´ 0JIYl £&œmÿb˜²b ++°D6C:bD6¯ rb¨ 0P0A ªbò4ø (8 ++VhdÐfxpj^/ØØW.hhr6"W#ØØPlt6h1€6€6"j>7P1Ü& ++ °rV€BnU/lR~nRab8ŠpìÚ2ÈjÚrÚ„rÚ/!‚Úñ¨'BV¨'êV)zVXtp8Hp8 ¡¨/bV˜/ú2vjHj,05b&XªxáOæÊèB:á2ábÆÎÚÂòÄÊZæäÆì^Ðð;ïxB 9š÷z÷„z÷ ;²÷vÀ€ g_ØÊèäÊG?f¼:Š=4khL|`W„ÊTa~a€PŠ# Ad‚m„‚mCd|º†"mT¸`n(nTojo /„k†k1¸IR·?ˆ¸ø1¨M² Š×A€QÚ ?Œˆ # ++¨ùAŽP "YRôHXf`R8[J§,B]jV,z@(Bž::4À .ï7;QZÄÒÜÈÿ|!6P0 ápÆeZif °šåÀS:Im Y.+"ÀBb# òG †åH11wâV   ý7¿9&pÂf‘7 3:Y #¿ÎWòGo °ŠåÀÒW*=æV"ÃÚW0vIÔ@6ÿ/á^Eñ ++ØÒæè0ÚÂàX‘9Ô0B’ %‡9 ‡9&,‡9ª­!R‰&D šåþòn@œ*¹$0@: ++ %)Ï. g/*.—+31*{9å$‘; ‘;9Ù$®' 0 ì][«, ÕNÕÙ%Q€å à—üIqà—åà€,/p.{.Á5 xZÛ,Ø"|Z|Z|Zc 0³ +Y_C`‹åPP PHØû O`‹åÑû K ++Û (*{d& WX#Àom§imý‹d& gX#Àwm@0šå¬ 0L‡ HL£ ƒ[d :PÖ LRLR@ó? 0—ÏY&p ¹e;íÞˆÕ¨Ä ¹¨ó ß{* ó = 1 ++âò@³òÿò¤B¦ ȃ&ムƒ1 —C.pkç oy%à‘lqû Øû !Š¾?Z@±*¼äœ“ ¯ *&A &Aç|/€&A &A  “ /•“  |'Sã| lÎ? #  # Wq0’å’,Aof#~ ++"A"A/"A ++D0+oNIÃm –JL0‚="$NI"A¸øç* ø" ÷mïH ÜÃzœ0÷Dî:SZ ++áâ@*?n@ó#%# *? ó0+ ³„.È) óOÐŒó /- p$pÎ@¤œÉ—Î@—#/1÷˜ø [m[/m[³là^ÿÿêõä,“g/íþ0¡GŒ/Hþ_/é_Á ++þÿêPÂB  ++¸  RV`B¦ÈÞ  Þ ñ Ú¦ðRV8¦(Ib¦¨ OB¦¨ $‚!è=+ª=Ï _x¦Ï Ï Iꦗú€® 2¤8 jiÀB¤;d/@|G¬ ++è( /+( ¡/ª ° À, q3b 8+5Âê /7²' ;¼’M=" N¿@¤8?HS ++(3R  pèoE* Xj ++êÀG¢ 8Ixr™˜X5 ++6™ù “åÅ Å @0“å÷ûIW û<ºÂWPPB¨é'øº ++W8&ž ++°S<&Î(¹‘a0’åà‘z0R/ æVö1Ú:j:™Q‚ž‚0þ5 à“©jî ++î> ++W]ƒå ƒ&Š Øi :ä¦ !à“q p2 ‡2 i2p„M\°pž ]‡å ‡Æ2/Oq. 0™qæ?@àƒâ@n ƒå1{&| ++¥‚iZ‚iZ‚iZ‚iZˆ €»˜G †åŒ/  î>Ó¤Â(J3 6.6 ùj¥’J./iJ.2¸+¦*B¨ ++iöøªH®¬ø!OâêÞè²`.bd`a$83ô!/bpXa9ÈYa¬6-` °\– ++ÈêÚÚò ++è æƒ(4ꨃ(ñKš€ °2X®c0 8K%0ÖÊZäÝ„h²°”.÷0ÊdfàÖìÞjÄèÎÂàÜôÞÚâÎÊÎÚeñChßD´›%²%¤¶ ++æÊðàä ê@°ƒh¸n//u3&²³Z;(:b´~&¶¸Z—ØÒÄæàÊÆ]# ²Z)øa¸a”dÀfppDñoYòHPOP ++X¤LP ++` Bˆº.„(KŠ ¾,I(A" & ++( &e‚'`/F‡_$k‡_ß Hq$¼û‹qÂøsÊe^Iuú÷ wê]^)¾^ø,w{Ú ++HUùÊàBHBž8ƒ:I…Z/‡:«RXµˆï/ÒïBxÀÅfȪPdPPvB%c€Àx…h…uȲhÂj?xp?H4 *‡*AO0wÚSY©îd«îdòhª¨ ÂææÒÎÜHBÚ ˜ $ÒÜæÊäèZ^pÆÐÊÆÖ@¹1}64@šÑ< ++àI^¢ŸÕ`ÁpkWŽ "µ žL’ O’:6eŸ 5@Š}6 lï¤ Y`ôÕ L/ 0P P9YPàP" 0L E8—à $ú_Žã ‡½.ëÀz H‹ÀxH‹„" €‹. p@x· %´p0´p½8€8¤17*0à0Š 4’# ++ ++l‡8‡YC‡P ž[ -h€&‰iFe ½m3ã ÆuFï &–%[ /!% KBK K@N-·,§)§ «( “N / :„ »|á“Ìï Ø>kë&/xÿÓ.ÁÓV€OeoaÊ¢ˆ1  ¢âHBäô3È"26*÷i=S»e—S»-h!s¹÷â- ÷Ïf1¢2òäF!@kªä ++ T;pÈZ$ ++8J&¥B šâZ# ß˜4§òæxF ++`ñ&azæà´@¢æEN‚è °lzz o³DZ2Gà‘å  5ÃDæOH*m6¬±ͺÿ?¬$ ++ã—Hj$¯±€ / ±+É$t L}‘ª£’R`¢çLÂèç ÑR(¤AªèIPLx‚Š8¢ÚæpdÈßrE1Hj_é C‚æ !È"OŠæg" òL’æà´68À#hB5P&)Ÿ'bæpBê®Gz®Gê®G!Å" p±FXpDæ ++ Õ Pb8ÉÒ’"´¢hìP äÒ‚V0BÚyŠ@`8Ïõ R*ðL82î8*¨TXãeH ZŒcôòñ£Á Šæ9ð! 0ò ++U±æ @Äêè@ÎÞèmôm,Ÿ%üæ+Eüæ xÒ‰6ö ++0NÁC rî`H@ *î3-0LPÄ/ ++0}K Ú ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #qÎ, ³|ûNÐB ð  L$à™åZáu*€Xâf ++0 ã`EâP…â,à™å^á[:0†åà ã à†å  á0Ÿåê0gJ:à ø à†å †å ƒâ`‚åã ++,°™å Uá8*°Kâ,°‰å ‹å<H àƒål'  ¦0Šå Šâ`òp–åàâàŠå@ ã ð–åy Jâ0št¨à¨¨¨ ˆ>@ ãðšå˜@1ÿ/á@OðÿÿêÀ¯ Ó2ÿ/ážÿÿê Šâ Ð&À @ÿ/ábñP Jâ‹H<ÿ3ÿ/á„ÿÿê"º&ÆÞÚÚÞÜÒôÂèÒÞÜZØÊìÊØ@B   7ðTãà—å@žåóôTãV0 áã0_K_8_ÿ ã á$  ãpŠå0Šå ··¢ ™  ·ñpšå0šåTã ++P Žâ0»dã“Ãó '0ô?o ´¬Ø¯È/iеÿ® DñêxzXB$ ++¨B¬0 ÒÜìÂØÒÈ@¶ð@üæ  ++HÞÞàæXB`8ê ++(B(äLxB0 HÆàûó.Ê< àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P 0‚l3ð- ++ ++ÌØÈÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++ÌØÂÎæ á æÞêäÆÊ ÞàÊäÂÜÈ%"%"HêYð* L B ++  ¿€Tã“Œ ++åË.OŠåËu›šåšåç· j ++îäÒèÊ‹rb8 ++…±(äÊÆÞäÈZ!bäXJÅyÀ x Ÿ Ñ|@ˆ­t"tOp ++ *ièD1@šä(dâ ãg¹P@@ŠåM 0ñMð á@ ãTã5]d{ âRã ++Õ€ “åRááâQã ’à ++ ++Rãúÿÿà83^ãè8T,âÐ9ž$^žåÀÐÉð<0šåkÿ À:p áàšåà‡å @‡å áû *%û+$b0âS$b0åS$<$!0“$S$$c8 ++$0Sá] œ Áœ ++˜˜”˜˜8 ˜¼ð``,›€à†åà†â×¹@†å&à ãà†PˆàŠå `Šå H ã¤+ͨ9 ád‰  OÍÿÿêÜÜO/©Ü7 9ð0ðO/™ð$ Üð¤Hd„*%l.þû .zþRlŠB‚HÊðàèò8B6 qP ŠðàämOü ++y 'á!á L*ÑÕ å[àŠåå½ / ¥áûjàå`^ã} ++P^ã ++@^ã ++^ãG ++ ^ãõ ++°^ãj ++€^ãQ ++^ãµ ++ ^ãd ++^ãõ ++ð^ã\ ++^ã ++à^ã~ ++0^ã 0åå  Íðà€å@à ãà€å 0€å ã]}`šåða“îÿÿê ^ãd. h h0h/ l ¼ SíÿÿꙀ 8p$$/&î°hm± ‹% Àz ++ å àå`o á e e*Áe" ! AX ++LI &I} ABÅ RŠå É S ŠâLßøþÿêA@_,½ U 5 šI f +A 0 áE ÌàÌ] à€å 0€å  Ì?ÌàO/Iï -b ” *•Ý|uÜDnÿÿêP=P,P0àåùW å ´@‹þÿêX/õq "q ` ++\1†åx†\`†å †å„ ` é`x`.­Ã¼ŽS} ++  ÔCÔ/ÔfÔ¬ŸŠåšå¨Rµ•ÆèÊZÞàèÒÚõ.$ÞÆÈ£ .n`[fÖÄÞð)<>h %rè“°R6P@Þ%/±B DPBH7/F4ÿ¿H4H4H4œÚ6@ ++J)N´Ï ++Ìr b(´M=gPäèȶàäèÈZÊðàä0!L "Npö%%*þØ'26ˆ'º6pR@žTZæÊèB¦bð dð8ðR< õ'PðgTèòàú0‚V ++ÒÜÈÊú0a„Êb*Q¶Êd2R˜%+’ÏÀ-‚6`X>»¤ ++/r`  f 0 Q &2 'TñVþò1Xêˆ$1 ++äF@; ZÿÆZZZ 3¢8 !5"8 ++Z¤\ TØÊèäÊÂn3 .nhM  Wbð% 'Lw”æÒôÊydÄÞÈò\€F cBD, %9Ú.ñˆhf8˜æäÆt†ÂæʘÂÚÄȆØÂêæÊtÆò(ÆôæÂbÌÆÌôÈÊÐhrfÜZfZï^`*;41px^6$%N* ^G0Š?\bj>`>(À>òE/fpÀ'bË1pö(ÌÂÊ6)d¼af `6O=6 ÖXhhB @ 6®51 @®5 O0bc6ýÚ C C/C 0C0¤ ++(/j ÿÆj j j aEÒ6@lØÉ97G ++U@ß1„åKÒ„å „å „å „¤ Aïµ9¨‚šrN¹r n!nw ++I/nhI §léRñnñèù /pîr‘ãý:‚8˜ÚÂà  ˆPˆJœt2aÆÂæÊZØ”@pÍ .nnªR¡‚¦VÊÒÜÌÞîiŠÆØ©t½“ ++Kw áPv€¤~g °*)Îeˆz1T–x1/\b ++zF$2?b>)|Ï~‡¢X HèÞà?@úZìÂØêÊP€¸ž†2z$ØØsR p^K£‚µW´Ê`§„§†j' ++(¯ú@BŽ -4 ÜÊðèZèÐWC"¸‰u§ ++ à—/$ ¯(ž¯(q àžo$&o$*o$/o$ ++@b0—å à“s$0 žå'q —å —Ûà 0“å0Šå žå`R›6 à ã^áod=O ŠåùÇ/Ç"WÇ£.Ã+,Ÿ'ü#».,Ÿ'%ÌWìÑp Ÿ#+//'!Š{, à÷(?šåŸ'ô#1Ø 0:H>H/°êÛ/­*à£Eû'1š_àŠå ’lå 9r  Jâàó)œaÈC|? áT n|9TH/@L [ü…L 0<Qšå@š¤¡,<  ã–ccb 0†å û#S%±  G_'73 !sdd!0< _<°<<`@†å`Ó,ð Ÿ7*¯'o+£+ *Ýó).@ðë. *!_+ @@` fte`P#+_@šå0Ï(3/*O4+'?€å³© ++ì½ ++ †xËGc(,`žå ‚⬟Yÿÿ ++úÿÿêñw/ > ð"à—_'!—ë+ h/Õ½ h½ ã6Ðo-/1o-[¡ë6Lë6,°ë6@oL0 ã;1!0“ï5Aþ€(!/ý(G/Y ([/É (K/) ++(—/píù_7^pšåHý&öAýÿꨒšŒ*Ó [ Ù fDˆ&#x ” d“ ++Õ )Š† Œ Q€hЃo2Ž`wwÿÆwwwaÊŽPwÖÈ ÚÂÖÊZÌêÈÎʸ1Ÿ„å „å yñyQ– ++w rI)7,’,<,”,–ñ@˜3(˜) ++( î¹--EÓ àžåëâ^ãµC¦K  ¦K¦K¢O@à“åYE a‚À¶€ àÂäèÒn!ŒX *Ž@R20¢¿! )/ZÊL@Æ: LðLL HLùhšÈœxž˜ q9¢vv ++ÎÅ>X¤ì ø’H ºŽ $" !`k/Ò_ ¦_ÿƦ_¦_¦_OjŽz"/žÂ!˜g/%"[ ¨[ÿƨ[¨[¨[/'º[>B- ++Ž>!@„“SR68BŽpU6ÀUŠ˜`$ªP"íªP"Õ ++Q"¿Q@` ++*Q@ ++ÖO"Ð ++QÊ ++Q"€"Qò ++À^ãÝ ++Ð^ãŒQ",Q"È2Q"‚2Q**Q"ërQ"¢rQ@] ++P›G ++^ã §[ÿ0ÿÞ7G”å«1±ÿÿ8]Z]oö #îw 0ö ¯ö @ŠCå3\O@šåЖ7Éÿÿê 0”娨4:4'9”C”Äëaë+ 00 á¸} ”å” Bí¤B„å 0Ç!#´ v@í\/A\Æ\¿ > + "à”Ö>"ÿnH*±ïS ”å '*îÎ>¿„å0„å „åë/]»4!(  0þÿêÁ{dÛ#.îÄïô/QôÌôÅôMî@ Aà”åRL$”åˆ&?P•þÿê|'Zÿ€—àŠå”å8P‡þÿêðàc DVBÚM AÚM1@†å|.ðšVBX/©X³X¬X;X(X PªAþÿêpPz=/ì \/¹Å¾Y@\Xˆ"ÿýŠD.%dp[”åK*›Ÿà€åp€åöL 0ºTäÞA. à Ø/ðàðfeîGψ/A ˆ§ˆ ˆUˆBˆD7DœÝœT"ƒýT/ ++T'/ààT  ++x«X¤ºQ3? H°¬@1ýÿêÈ.] ¬´/Ðà P´/õ <ºQ˜"òüD/Y D'ÀDô/é ˜0$#³üºI 0[/Å 0+°0X/q0|4|O0”å <(< o ºQ¬ <¬ <&à  4ð4Ñ4/¥4BK@0|¸8¸%` °"ü°/ °'p°H/¥È4Á‚G/¤8ü"ÆûæJ/ ,"¸ûè/Aè'`è@/Ñ,‚G,T,A,{,/5, "kû /uP"]û /­ 'P H/Et¬t¥`@``? ”å´0´ \o ã«f" ½0”å@”å —oÑ+´†å p†å&Qã{i&`lÔ[ª ++@P :.àW+t =`Š ‘ ëQ€å$0Š¬?,“- kÄ5G,Àk*O}0—å — ¢i:p†å @ ’Kƒ0†å †å(Ìp á šË, ++[¹„s+Ô1àžjLã+ \Y»àg/Opåt¼º\‹.@àšåèâX!“°@¼*mÀ“+°°¼ ¼T/„åL“+ØÔ .Ôµ“+žThY8"Š€ \ˆ ¿0‰ˆp p" 0ÒW\=p6°P;ÿ/á(éðšåjvð Lðb êÜÊðàÊÆèÊÈ@’âC!˜ïfHÈD¸AdtÆàrbZÈÊÌÊäÁ/hdÜD p­6XÌÆ>Ldrñ £6XòÄ>LOd\freF /pn>L ++èIOÄ>L±:Æø485<5ÈM%^=AâÊÁ(jAÐ>dšHE/hbÕO .rfQ ™E3ÜèÞ%ŠÞ°î;ˆ`BÞ ð[*€jÜ[?p—µ.Ö /mÖ OšåéžwqjBÊHò#]òÞ(ž)nPâ684¼: %rh…IM] ++à IâSP({% _ˆBäu€äuPu$pÐæ¾NdiN/hbz% .rjÊUÄLÄæÄ +úÚ?è<Æ M% .rlXP [ˆäÆÈa ++¾"èd.1€ê v&ˆ ++ .rn­RªPªêªÈ.3êžì)€ìžî÷$d ?/hbS ++ rS ++÷$ KX? /´T?îš%9úš˜xBø ØrTÕ;€áà’å^6 ++6’<’)’’’å ’å’ê ªÖ® *µâ ²•D0•D ®!: RM&$O šåÄƽf—rð 6Z üCs-C BÊwHXöEd5D/hdÉ rEô:I`| ++#n`¢ òERôEè E'ö“H²ø°ôVôú- 27?h`r- Þ R…7úÔHö‘b8?bÊ(%ZüW ØY?h`pÀ Ç íM èAüè4@¨¾þK /`n fK KB*'þ„*Cb„`J0‚âlÌ ³ ++Ö+ JÖ+,é+GºÀ€Æ8.|0-?h`jÅ õ y- Iy-',(M¢ñ(Æ_dWG?h`hÁ á â^L¤G%ïjh/`f™ n Jê£4#*¦ˆ^?h`d¦ p!J"\p( tÌÂÒãaPÂææÊäí÷ @FÌ@Âè@ØÒÜÊ@jbpX@ÆÐÂä@bp@ÞÌ@±u\ææ&7QZìÒÞØ.ˆXB øÞLÙpƒ * a:bà ãà_yl7òB u:0Š¯ ++ÄÒÜÈÒÜÎ\ {:DDÈ:, ++~:~: ”ÐÊØàÊäZûZ݇$ >#gÂäÎT I& ++)0À:PÀ:´ÐBX  ++)`$6å1pŠUSz ++ mÈ5¥!ž­=pžk K ++Bg*5žõ‘žGiP0“åC1ºP|IO  ãüŠqÉk ++&?pc€@€Xâ2,J!à”¸  ”   tA+!‰àtA9:P@ áæw ++¸‡^~ ™8Ž ™‚øݽ*¥üŤl @D på]ïŒ(% 0bšå@œ6Œ?pžå¤6 +5¤6/@š™Á™ì}**3žå0ˆ@0šåë‚1 0Š„I$Ç ¢ü½$$0I"$@ãk(< ’ù(Ï( Jâ šå@Šå8 ++Z18ÑxGÓ "Œ8$Œ8ñàâ àå@åàâàå0ø9à HCI +½IÌKDLù< ¡K¼0B`ƒå@ƒå4EÏ6 SàƒåDü" 9ž³ ¯0Šå Šå$pt Z¥t®0šå šå$p,D.©,5¸†¸†¸†Ðp8ðMKõK €@†å †åwr˜:á3‚K‚Å ÓK" |K¯r ‹ q0s" pðœK= žµ ¦ÈK" @? Ž›’–0ìüL+‰üL!0š$°xrx,,@,,a¤0nX-¤¤=x¤,,DD" 0 HHHý/ ý.HnpšåüýÙ'Ú³“Ì»—†bS9&¡(Y <  ãàœL!œLùJ XáPŠ.®þldŠ€| ØðI¤"äýpdN Ù<`šå½ýÿêüüÒ ϤH’!/ìJ ==/õwýÿê|šBÊ°Zs92c ++¤xBP ˜ºgKƒ7  E?žå E E€0žåSãøàC'Tó¢x! “ÓSð9 "}ì"}"æsT/T0žåLÀSãݺà ++3Tç1¤¼b“åQ¼b°â[¼!‘¼Q¼ ÉE0RãÃ|°¾¼!’@&»¼4 ’å ·h’„\±ü}`“å “åLo 0R¿ ++ªp’töz³ þLˆ ++‹~ˆ,@0€å yp$ Ìx1£Sa£Sw " l& [ s ´"O§p —åQUG ++„$'T„™oT|$£Bº`".÷UsS²u /í÷U¾u0+&À)&ü%öpoBÛNË[QHŒ ãª$/îX û{z&· ++ +· ++pü%c[\° Ã&Ršp ©àBN …_aòXònE ++&ä›:Á Á q‘,p‡(± œÒ`‡å ‡å ‡åp™DED“å$„Þ/ .õ„‚:’ O þ*Üra’Ò;/0²É•²¨X¡`ðB" c(FµG"S€ ++  ã³?F&pK+"ûÉ@æ ++N›2½ºY lŸ([:R@šå0%‹†‹ARã'VV`\ dŸ>\XoP/5P IÚÓ@- ”Æ—+Ï‘’' {”pL'ˆL!{ýƒB–‘’C ”åA™A•—A"‘A‰’=—AgÀL!”+2g?|Ç ËÇWÇ Ç"$VIž 1 pž‰Dð—åç1PRå‚Ÿ¨‰…¬Â"?ÿÿ<*-ø"àºZþ*Z þP0ÿÿêäY úvšß 4P#ÿÿꨊ ++ j0 Ï€´íï@­ÿÿêC"r?CL°o ¨ o @”ÿÿêˆT`Rã2ˆ/¢ž"Pßþÿê,Ÿ1 ++ €t <"ÐþÛ1é<G3,BYG3à;sDDÜ"à”™{¯0 DDDCD!à“±”(/ 1“åDBRá"._ H"þãAõ ++[µ0Ï7p//ØÕ"%?Eí$}G6??Ú^à”å$àŠ¸Q6"ôþ<€Ë€#à ƒ“å(Šå"톨,ã ++¢üU,,(6X€­ ++šå,/àT_ø©TP—9 B^ãŽæ¢2ã § ƒ•"ãO ~!0š 0£1Ì]¥6¢·1·1ż¨_ ++[I T¶c ++ 0’å┎`X [ð¡XPSíÿÿ ++$<@ _°á@Xz1(š$«Äýÿê° r  ·BûD ||Ƀ1„å$Ƀ?„åQ®é(DJþÿê€ *É è‡L"7þò]Š_3 ‘ö]3Qãvw <‹€ ’å0ƒâDk· "'þ%#DG ^ãÐÀÀÀ¸5¸x°¸¸[$ Šå´(\Z ì\•\Œ\\|\d\Š  \&½ý\X [ðýX\ \@ n°= @%à1$šJ\ªíüÿê°u BØkI Œ §5 \|6ë &uýTx * àT‰L/býTxTmT"Rý@PýÿêSL@ÔO ”å (8"9ý4`&¬3“å (ÒS("ƒü²*(x0»>ÿH" ¨0:¨  ÀÔ lð ++ÌOA?°”Ä&pÄ"Õü —Ðp“å À“å “å@$3PãŠS&Wã€|O{2VQ ++`: ++àX&€`wŸ3Vá , 0 ’åNU¡—’°ŠåpŠå À;8<(ä+-ä!š¾gP°šå›9ÀG8“$ šå(àšåàÜA˜üÿê÷àlSáùÿÿ?jb‚å põ|..*Bàƒåò ‘ƒå Àƒåƒ¢ýàƒå@ƒå°ƒåƒ;<X ! ¦*Q4.Yüôã ++Ð˺@"HüLs` á `–L4VãyhKà ãsoh@8üÿêÛB/ pÈÈPÈ ++#Èè „ Œ3Rã9´¬^­CPá*×l$RX°"ž#=^$Ÿ?pKCp.òû("ëûé$÷ ã° á °›å€â&[ãÊäÖc3 ˜7PãÀ|LÙûÿê C±O=±‡å 0‡å @‡å£=‡|Vm+œVm%Å‘^#"’a–m@Œ”Ï= ++òm$^áóOªûÿê” ð*A”4u4ˆ¶@‰ˆ‡…ƒLûÿêÐÀ+R@€å 0zi$*«ô, ++ ü/1ü < Œ0RãU@ Ø€œ!f ++±±Ø  : ( g8sà‚å‚2"‚z!‚z!‚’ ý‚å à’åëŽã ‚âàY²J-‹:!=! –!Jll[Gî &†”0ò ƒò Œ?0‹å¼‹B†"¬OôúÿêÓöá?Ñ,¼(@.®ÿÜ’yž”ꔈ ”dxõ®ª”+ì.úþé_4y™+}§Ec4P @äùÿêl*Lãùÿ ++<øæêB 0 ++æÂÚÊ~ªª$ $‘$3Pák( èBª  BªBª9d90™™‘™\3‘å0•d …1SáZ¤©7^áô­dµfe„2\M‰ ++xT) ‘ ++ Ê'Ò·} $k` ++Ý]åÙ ò·a 0†å5/ãŒYŸ#œV õÛÍze¶ +Õ¶eOL 9€€‘€ ;‘å ¹f [h5ðÿÿhh5êÿÿhhQåÿÿ ++ù¡‘T@æÿÿ ++ l5×ÿÿll5ÑÿÿllÌdXbÈÿÿ à  V6yÂV›¾¢ž5¸ÿÿV›5µÿÿQ 9²ÿÿQ ®@5¨ÿÿV›" 0yh¤"ˆnžÿÿ0ü˜üü’üüü€0‘å°Sã‰ä%0‘X#…LX#¤!0‘Ø5|ÿÿ˜#9yÿÿ˜#u@o@,X„#œPRáeá ^ÀF ++7&ò0bvHvX¸# pÈBü»4 a¶fÊâêÂØ~l0‹¤P ^'1žè $° ++ ++×n¶w] h‘9@ ãr-ì ®+ð+¡@!@Š€+"Oî.B@ ++`zw(+ Rx ++-›I”À"ü| JH4º-8Zmt" © ° 4  àW<1Ž­§W @žå¹«‡" õTË^Þy *1‰4‚Ù ˜ú8Ææìn•=pZÌÒÊØÈZŸ¹æ·g8h4&!‚ÂÆÆÊææÞä$&h÷5 !pP5S  (aw z ++ƺD3„ æîÂ஼H3A81™å"¼àžå8á‰å.¼B 0 ++ê–»«b LPB ã3 ›×[^M/—Žºpag+u½0pÚK J>rr $PŠº!ËköLH2ÈòÜÂÚÒÆZîÒÜÈ ++0¼9 Â9° ÂHÐmvÕ~‘€P($8¢b Pnú ÞÖÂòZèÞZæêÄæè~k´ e ++f`å€àâýI ++÷YañaìýE ++E ++‚înã‘“–€Þÿÿ ++ßÿÿê‘ @Ûÿÿ ++$•3høThB7= v@˜/(A˜†°* ++êÜÒÌò †a¸`%x+RH†8x&"6 ++Pi#ì–7#®P àB  0  â $©NA ùBc‘åà€áúù  v$y½•=Ay½ Ò6`  L/5 µœÔ $ $($($0$0$8$8$@$@$H$H$P$P$SX^ã ++ø• XàmD 0‘åR 4·©mB_@B_1è$‚2 ++& 2ÿBL@d |Yx` H <=3 Œ`>p'ª"žøãFR7$ ++pR 5RRèV&ó?pà7(Ί#*ÏŠAàCøAr"¸B, ,¶ÁøC"¦S‚E0y0¶Á1 ++bisT` °)'ì€ô$ os‚X¨2X@B ++,pcFæ. ðD èÐøWMÅOk q> ++à—8/p®Â ápšå —å—å—ç%¯?p—Å1 ++.Áï%" @î,C' Ç¢@e6×^c ÒVÒWÜ .]Ü±Ë ++ªð0©ü`ÙmC$u!H²yÒ. ++ … ++?0¾‚оÚ@0€âª)Þ ò8ò  ü0l ++22, ++d ++P ++6PCPœ@#PV ++@8t¢6 à4xP á¯  ~« F¼E-:K8#††Þ£ Œ/ Ý1ô43¥H ++Äÿ#ù8!0žÖ¯2 “Ìp` °“å 0*¬›Ø^ˆ1 ++ »!! <À(\¨’¨¨ ³Càžå°Ÿ… d 5š 5 Á-”,dt8Œ8†8! žq Àå Àœ41 \éyñ5Rãp Q¬ À \c9 ++S¬H ++/b`'ƒ7›J7èªH„œJ¶œJ„£f @ð,¬& ˜ŠÑa\ (Ðqc"@L ÒHBJ  @ ÌkP ©á>PSãqÑ!Àž9"0i¶)S_¿  °‘å à‘å@ÃP¿Ï2ì"$(RÀ‚å °$(I!+1 Àlbàå@F ? H$oÀ€å °€ùÂ É í7؉Ç ¼65 p—ŒÉVÀŠå°$ÚCÏr ¤8ÉÀnÉâ~©Tí0 œ  ++BBFÓBF–F  ++PDô…8 Ht*Í'’—å—å—òŽ<¶ ?y’<"0¥8/þU$Ý5¬wïò òHt @7ÊæXXš ++PæI2Fæ¿HæÿHæL02AP)ÅjJ@L|²tUò ’ÊÚàèò@ÊØæÊ@i@ÐÒè@P)&@PÎPb°WƒR@ÆØd@PP?APPêÜ0Rµ@ðdTR@\\\R@ª dQ¢ÆdRR@PÒÌ@PÌðz&b1ÀîÒèÐZÊÜì@ðbT^ïÞêèàêèZØÂÜÎêÂήbPâêÂæÒ{µbµb!P̸b¾€@PäÊèêäÜÊ ÌÂSÂFÌ@PàäÒÜèÌ@DâVNðæ@ÈÞÜNè@ÚÂèÆиÜD@\O!ÂèìQ‘ÂÆèÊä@àÞærŠ_@bdprýQ D oL €×3?b@P"'/RRLÿtN?nffNux¼/ ++@¨|hHNR ó°8 RP°ÈÒìPpBTèTXF N‰@p á„25[V‰`;V‰¸g¡cG—cG "p€´;żp‰H3ì#<*S—p‘¼˜+àD.41@àKâ4!p— !0“]eD‚ÙÇpêKÞGÙB”? ‘¢‰" (/Ô6eÁ T4hv‰0àKâ%4$:%Ü*Q 10x%G  átþ ?Q+H+HÓo ê” /dàÇG'TfL /L Hp pAÿÿêêx ((’G>‘(¥;"T$í;5¤*“È,0ñ2öÿÿ$ ÇVòÄ*4Û44Z×ÿÿ ++4/ ++ÒeXPZŠ`ß2R–Ø’T ++ ‡M¢s\äÊÚâ$0° Ê$½‰' ++ Œ B8I\08 â€[VÌäÞÄ# b#6" 0TÑX':Ä(Vã\凰­R:PÄ ˆÉ&¨@ ZÏ \ o0„å Äöµ ++¢%Yfhl"ÒNôêàÈÂèÊBX¢X`4¯ ^ðx $àäêÜÊZÂÜÈZàäÞº'BïN°H„u¿reŒ6&Ô;þãyi) ~ß¹@ ++Uü ”P Ú#=žX$>ZP1à Gç YP ¤3!@ƒNS (/0‹¸ ++ ( ôĈG/Áæ % 4|“ÑÖeªZÜ‘%\šÜšAÈÊØÊšu*^h„d?mf¬p-»@X *0kR ‚^4* XŠQh LD`”(¢ †(&†(<ßò¬]h P)Ï.™}Áê£uCàâ%2 @”ï¡0bñX(HÎÊÜæòÚZ|àäÊèèò‚+é)BJ`66@B 8 ð¨ ++æèäÒÜÎZÂààÊÜȾ$Pø­#s|æòÚÄÞØ«@}˜ ++—(&ZèÅ ++—sPfj©€dò 0ÊdfàÖìÞjÄèÎÂàÜôÞÚâÎÊÎÚZ§b„¶bŸ©.dåOaD‚5aÎkAd ++æt¶=aQb;Ho;(£7oI6dö^—ØÒÄæàÊÆJb"æÂ?o°ó¸šÀœphy¯" d/Êb°'ØKd°&`øBjû»<ËRÙ3 ƒ%—ã| Á$ë ++{öÁí *íÈìÍÐÆs5¢Õ' ++hš Xòjš åPlX!2 0L ++ô `«M/ 'ÊlPç5)’%‘°B^8Yrl šòÊ@n·gÏ´?h`bk dq Mše$bT… ?ÄT]i&n#bÞo]Ê ++ íšr`8_*Êÿ& ++(á@Ì”‘ ++¬r [¸j‘«j‘äËOÞb‘ÆãO°ËOWb‘b‘Íb‘Çb‘"Œª‘9j‘"æj‘©j‘\j‘ j‘ºj‘vj‘"j‘åj‘žj‘[j‘Ej‘4.j‘q@{.ábÒKBb‘H8b‘Ž Ê"cÿÊ•c 8b‘(b‘T.5Töƒ ¤o+/F  " ÿ–‚+¡ï< Z‘%  Z‘.I¤o2º‰ÞØá.©R‘&ìÎìÇìI9ò ‡"žþ0Ò©QCBB‘·"‘þ ÐÝz‘‹Nß&B‘ H.}H·H°H9:‘HDMÃR/íê ÐÞ!:‘<.…ÇÀH7T "þT/éT)”ô» ++. /5žŠ ++‘Ú‹D.ÉD¸D±DDDv t=Xã”È"¬ýÈ/q È'/ààÈ;.ý 4¼4µ4 ++@Òx"pýxa‘$ø¾Š"cýb™•ê‘¢è,ô)T⾊à&/‰ 'ÀŠ$Š)–‹d‹Gp. ¸àR¸àŽˆð|¸/fnŒ&p÷uÚr ++ }6t"¡?›h›(: ++þÙls/ttFv&‰#‹`‹Ô‹,< ?®jY3&vâ~F% ‚F[(xLJ8ÁÃȈ€L ++þ­h@?&xAË&ªËˆFz<ËæŽØdØE$BG Øf'&z[$ÁŒÈHX8|Œ»ÖŽ¾.lp–Œ» /fd?&|Ù&ÙM~(Ó?äÊÌÒh) ÔbõŽ3&~öŽÅ&"Åí(šO€ÖÌ0WU0€Xâ«'µ<".e<"ìOŠSbBrïm† ƒ!<‚ hdÎÉ ï×`ÔŽ'%‚;ŠT#³ XN„Nv„N%hV6†0T ++rŽ\.jlP6A®Ž/dr­Ž,†J+)¬»=Š&wÆ.jdŸ ŽdCÓ/ˆ‰Ž,Š”/-jÉŒEIº.hpp qŽ/dnpŽ,Œm/1BŽËvŽ˜¸ãÁ/ØØNh SŽ/dlRŽ',&5ÊhM’Mv’ ++”9 ÿ"TSm5Vj†Œ L)#”X&;RVHVh˜ ÀWQ¦8 º¦/0ù\r *±:Á/ê¢6 7E^" ºš/–›˜sÌ9hnX¢˜Ì9(8MŽTš ++H/¡K" ‰'œ ++àTd> ++ˆdi‰œ])58¨žf¶ ++df¯ ++/dbm',ž&C2¹˜É8 ³â²`faT/d`S ^,Gj¥p«7¢Œ@ .bl\¯Ô9/br8(¢Z'M"œ2¤$¨0X¬¦\?äÊÌþÔp[ê /bnŒ¦¦ Œ¨‰?ÚÞÒ‰h ‰sŒbDë!¨ 4¨€Å¢ª  $ì`ÄêÒØÈZE&Êä„"ÝJD6D›Vï /î 1ï*À\7 Œ4P]µk Œ4ñ@ØM"–“Wf&Sã‡9„l]?€l]"z@e ++H41 “%6MÀJ ñp*TÙc /­:þàS‹12§í[.ò6îH!žåwL&býw ‘nL! ž”yajž@j”g”c”]d²ÿX‚ûÐ]šå’¦©8*H ñ*H" 08‰x/@ÏÔ+5Í]׊ øb:u4ô /¡ôì€D¥l /ý £aDPWˆ v’i8 ‚hi‘ ++rzK‘imâà€icÝ4‰hV& &tÔQ.ì BúJ R/0PO.<'‹ò&ªé:´OsXh&€& á–I Ì ++·£ ++¬•’ÌêÌ’MiN‹å‹LMi#gÿItíh+!.àíh/†þ‰G_7nŠÿ Dª_ˆBoº F B7 R@È@v4­@Ž4Rð@ï@ £Aá@qA3æäÆ„ ++^ABÄPØÊè@ØÞÞà@PPí1@ ÷R@PÊT@PÚÂà@‚äÎ@”RcBŠ”Z<d>Ê7wMî¹ ñPöðRÂÎÂèÊÆÆÞÜæ@ðT@ÊTRR GJ Æ'ØØ~`ÄÛ —6PPèaðW|`àäÊØÊð^óÊäÊÜÆÊÈ@èR@PæÊèZ‡ÚêØèÒàØò#[B@è@F'  ´1äÊÌ}CèØ­Ê€/RRlC _f`pfnºE0 šÿDz17v 0 ‚äÎv Mºl ':j!¬R±^míb²@? l!>@†`"9<m þ8$Rßc7® 0º-K@ÂäÎäc °Zô÷3¬sp$ø(®N_°2-0ÓXoO´ –o öObdjff`²@uÚ9Þ XÍA(p&[‰ä700”¡f00ŽC2”å ++´A 0”ÖN&† ++þZtDQá§z÷Q^ÓE@_j: øì! ¾²C<8€¢' ++0 h"án7´ñJðp¶è¬x¸xhØtP€9- ++(KS ?SPb8Zpbºpº!I4Õ¸¬Õ@Lö#„ SÀRªмåC YzH|X¼ ãs/flO;/dhá(¼w&[²,- ˆè:E0ÈseH ÆóÆÄæÒÚàØÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæØ¥{¾ÌÚè+ÌÈ?0'C#`Àì<(Üè?²ÂÈÒäÊÆèÒìÇС?¾L ›˜#(ÀmÂAJ´ð ++ üæ @Äêè@ÎÞèï4Æõ L(Ê ÌÞäÚÂè Ì ,%üæ8 üæ“Î HÈÞÌÚè0AÐ"DÔ}È_p‰ ++€Ê ÌÎað`/ ++(fF4fa(úÀå1H8WIbÀ©mh»WÂ>!@5 ú ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #ç®,wôñ"B H  L$à™åZá@*€Xâ1 ++0Ÿåê  ¦0Šå Šâ`òp–åàâàŠå@ ã ð–å…§ Jâ0šåà8ù ƒâà‚åã ++,°™å Uá*°Kâ,°‰å ‹4È àƒå>@ ãðšå˜@1ÿ/á@“ðÿÿê Šâ &À$@ÿ/ábˆ JâÀÿÿêüóB3ÿ/á¹ÿÿêjHÆàØÊèäÊƬ àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P  0‚l3ñ- ++ ++ÌØÈÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++ÌØÂÎæ ð ++ æÞêäÆÊ ‘ÞàÊäÂÜÈ'"2 Hê[ð* L B  €T㌠++åÛÓŠåŠå _¢ u  ÷€šåšåçg 0ñj ++îäÒèÊXBb8(BL(äÊÆÞäÈZ!qäX"ņ ++ ` ž Ï„TãåÞÝÞyÌ ++1™JSá]. *u.H áH0âSã ++G00åXñG ++ âRã0“àA ++Sãúÿÿà83^ã8 œ6Dù`EâP…â,à™å^á,:|ùà†åà†â à†å†å&à ãà†LˆàŠå `ŠåÒf ã Òÿ:I á*; ^ͦílÁ á@ ãTãS´LJâ@ˆˆ”pˆ ++ˆˆ8 ˆ@nŒ@ŒO/ Œ7?ZïOˆó¨€+•æOšå#Rÿò@‚ ++@B Uhš ŠðàäÍáð„A ++à”å°^ãâ ++^ã ++ ^ã> ++^ã8 ++ ^ã  ++0^ã ++ ++@^ã± ++P^ãh ++`^ã' ++p^ã! ++€^ãæ ++À^ã© ++Ð^ã\ ++à^ã  ++ð^㺠++ ^ãv ++^ã" ++^` ++^ãžPð ^ã[ ++^ãE ++^ã k_<  á¹¹Õ.Õ€ ++ ”å1¡1±ÿÿ8]©K0 áÁ[:Eñà„åî ãà„å 0„ågP2ÿ/áñ½@+áO@šåÒËÿÿê 0”å  ,8,',0à”å 4@È8@cÿÿê´+•¼00 á¸b ”夤 ¤"í¤óàšå à„å 0„å „å´_0ÿ/áíT.5TÈTÁ<+ƒà”å àŠå  Ò ÿÿê¡k' S ”å   *î ÿ àšå à„å0„å „åë.IĽ2!@ÞþÿêX.© L ++ü.î´ïìÎìÇìIì8ƒà”åàŠåPžþÿê<Bs tà—àŠå”å4Ó‘þÿêxÝ4L Jâ,=Qà†å,†,†(ñ†åàšåà†åàšåà†å@†ål-ðšÍéH.}H·H°H9H(H DPMþÿê8ÍD H/ì <.…ÇÀH7T "þT/éT)”ô" 0ˆ°P*5”@ 0šå4 P /ðà˜OîD.ÉD¸D±DDD3D t+= t”È"¬ýÈ/q È'/ààÈ;.ý 4¼4µ4B«x "pýx+a ++ð$øô@cýÿê`.• ++ôô/Ðàè,ô.) ,¾,·à&/‰ 'Àü- h0üÿê\/a$"cü /• 'P <.!»N=)/} T"üT/µTx/éx'@xD.}\²\«œ0œ°? ”åh h,G6,!”´ ++ xàÜ,µ¨šå @Šå áü"ûü*åüôøô1àð½àå @å šŒ ¨ø.uø¹ø @A/õ@?@/%@{/µ@S@SB ++@ ¬ 4ø*ø Ü!š , l .ax°DDD D00® á@€å 0€\ ôó  âp.%p­p¦ñ#ðšåj~àäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZdP § §430H!gŽD ‡r ++ÂäÒèò„__ðL$ØÒÌèZàäÞÌÒØÊZÌÞäÚæ êÜÊðàÊÆèÊÈ@âð N ++ÊääÞä˜B$H.˜æäÆt!ñtÆàìÂØÒÈZÈÊÌÊä*ÆôæÂbÌÆÌôÈÊÐhrfÜZfZppÂu 9(+`*`P*$%#òzÜÂÜÞàÂææZ€õ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`CC ;03rèÂÎP3J:˜/)**ì?\bh2€242 R@Xfn@­2$bÞõ ++@BPHB`8Ú ++ B(`""“tú²h1' ›(:5•l•iêæäÆ—"—!¨D†`Ð&&ŽÌÆÂØØÂÄ`0,<7’j» ’†( ++ÆÞÜìT&$™Â*ÂäÎZèòàÊ#¡,äÊæêØè' ¤&Ð`g$ ‚g#¸áHÒ.oÌÞäÊÒÎÜß%nlß8o5ÝLh Ý'(ÖÖ&$Ë!* * , 2Ê.ÊpÊ%ªÊ ïvº0<ÊÿÆèÊZÞàèÒÚÒôÂèÒÞÜZØÞÆ×d׺BGBäfÔä^ÄÞð½Ã0ÃPÃÈÃ!hɆ8Ì2*ɵOæÊèBÀ.lp—0>9·d›v4äèȹE6L|‡8 ++ÒÜÈÊðxV^Êb±idÊdµ2òˆò%òÀìmÎ:(ì?äÊÌëha.ë3äÊÌêbb'4ž6…8…$C:ÄxÄ%"Ä$¶(B< Ø 4 _@€Xâ› .eìï qbB@ë @â<š‘L8BT8 ŒPÄ> d`Á(`&`\O`\ ÇFäèÈZÊðàäE4Bº^>^X^#×oXB@Xt@X®†HÀD0^PÒÚÚêèë_ZØÒæèf.jlq6A ++<n/drk/BhDh*)²º]H&zÆ.jd,yÆ/dpGäÆ`.F½H²,-jè?J°¹.hpl 9»ni4iJi%1B½PHBV 'À¾Qú!Ï  áà’å^ã ¹µ =±0’å ’å’å©ù*±Í ­. ý¡ Iù y¡ žEá = @—rL 6 ó ++†ÂæʘÂÚÄȆØÂêæÊN˜BXžT8 -!tÆÿ jT^R*;4bˆPx 0=?\bj„ R„ >>¥EfˆWtð_ ++˜ÒÜèÊäÌÂ(‰vÄÞÈò˜TìB¢Vì%(VsHœX¦aÆÂæÊZØ¡¦/fd¦9¦z  ŒlWÊÒÜÌÞÞ9ÆرXÅHÅøb852 Z!oàÂäÒÂЩdO!4¤dÂAZÂ89†Hô\xâ .dh~³ Û /dbñ•jÚÂòÄÊZë Olð„\„9ó˜ûh€`Àâ¿`Þ ¿â¾`ÖVbÊ`·)^Ï`”+=Z¨p®wfªd ++.blm5Ò\ ++/br b© d]f]&Cúvúh¢OâêÞè×.bdú$83¨pø9ÈôhôˆhnÒ?äÊÌÍpÑ€ bMj$lÍnœ!(‘p‡?ÚÞÒ‡h‡3ÚÞÒ‡lŠpŠphBre ++_„ àh ++nrh ++-ˆ$@B èMÏ0—å —å± ±ª ï«h’x+)-T hI æ 5Ÿ/djJt&BJvJxÿ‚¯@B‚  3 85ŠA À*&0 ã&  ãëñ뀠á&Qãç+)à‘ÉrpâW,`pžåWê‚ ++°â[,!p—,W,Lp áòð:p†å †å  á ‘åÝt 9 ðõÿÿêžåPPãf žå pžåŠå Šåâ"6%ŸŠåpŠå —¢ü!  —pšå šåö"%’šåpšåÆ/Ü.+VÀ—å°TP \á04 À03\ã ++0$ Hb` âV$!Àœ$\$š! °—å0[ãb+ñ[ã ++°[ã$ °—åÀ `}òÿÿÀ›ñìÿÿ°—å&[ãéÿÿ ++ °› 1æÿÿ@9°›P [áß³-   À†å 0†å0 áŽœlð;ÿ/áöÿÿê€[ãïÿÿ ++R Ä„ÿÿê á˜Œj0­Â%z$<¶$5pš§-«.@ð—å± .å²$P&Sã@ha “å 0“ Ø &ns†å †å ++&êø‚ " 0„i Ï- 6@pxØv!œ$¦&ð¶' ˆŽ(+5Ž(.úþ} ±ñþÿê*¢z ++à}A˜B| ++5# r~¥Ô1  L0L0š4@àåó-qc.$—$W1å h$ áb5"Øÿ³ÁN5ù\@ áÕdô.ôܾ Õ-Xp ++BzÇ2$hZ 3:|Æ N óp~(zø~h HèÞàZØÊìÊØZìÂØêÊvxB„8ø C€€ XYeB‚X``‚‚ ++0nt– %K– PpB†#/„ n† L +|öˆ "!/flj4 h 'ˆ )‚åO°2_BŠëtŠë@ëxPB ðåå å é°"/ºéhš¦Žºß ++º2ålåŒåbå^åŽåpå' ++(ëIUbUÑ ¨~P $4eH <ò˜–æÒÚàØÊ48ó ÆÎÞæ`ÆrêÌÒbäâZÊæ ++kÌÚè%ÌÈÐ:'– P’ì6&ÜèøÇ”ÈÒäÊÆèÒì4JI —è ’I)”>–>ð ++ üæ @Äêè@ÎÞèæ$˜ L( 2 •Âè  ,%üæ7 üæ³ HÈÞÌÚèXTLbOP ‚  }Xš° 8 O½ ++4 '4!€7Í *„Ü8 P7s#P7 – ¢L7¬6"A6 ;Å ++B^ãII±8 ++ àå0à/) žÍñRá) àžå&^ã& ++ 0žÙ u#àž@@-0žP@ppå à—å0ñ 0žåå å p—å °žå` QãÀ ãE é'.ñ¼Ãð‡4¨ 8u8d8 ¼ å˜UÑÌ?„L›5" Ü3+LÜ ÍO5”@,ì@ŠåðІÐ/ ++Ð//ààÐ;Ì~. ‹„Ó,¿ø®Ó,Ó,Ó,7åh,[6&q YhS—´"ˆ /  4 PA}c:›1P0šåLQ„C^㈠ì ØðŒO0†åÜ €14 PV ++9!à’2 !œ¦(’åpHQ&Wã&(—å°’å[R@` ++ p—å÷ì@RãÈÜ SRáàAáÿÿP!ŠŸ;] + ]ù!šP `0 ã/¥ä4äØ!0š€ ‡>"Oü‡>&å ++@O—>—>) ä ø_æÿÿê”àìà(.ѨŸ¨˜¨F¨5¨ )œ"øûÓ>/Aœ”ã>ã>!Tà Œ<(. <º<³<J<9<!0Ì Û3"¨û_C5@R,á™å ° ++°CA.íˆ L¨˜ CA˜L(.YL¶L¯·8LL\T”"Sû0/Õ”!”TT¤\\\M \( 5·8\k\Z\a0å LL P áŠ(! ŠÀ ++% /=Ž(! šˆJ!à¤?ã0‡=.‰€ ++7;7 ¤=ôD"à]Ø +ýqà]D Ð".…ЕЎÐL/ ÐÐ/YÐw/åÐ[/UÐ|Ðk„ L "úL /½<T<ôð0žå à“åãâ^ã"ø "QïQ Ô Å x/ à”ê!# Dœ_ëŽã TT3G+`à° D ´ 3GRTé#[@ (.i„}YH "•ù Íd2& , "„ùT/TT@@ .Pàˆ$ä<(.ñˆ§ˆ [D)p€0\/0l.]¬!0,쀿€å 0€å @€å¸ /íÿ¼.ñÆtxtgt1 ”p ü8"öøB/I@O@" Ð|¸ @åøÿêÌ/¸ 8¸ À"Äè "Õøè /Íè "è ¼üL@¼ ¼ø Ä Lt1ãÿÿt0¤ÀüVx(.áðˆððXàDB’åëD Ý’åêŽã ‚âà¸1¸!‹@/ë00´ü l < <9 €å¤ ,!îPçÉ)œÙÇ0Brb÷$! ++°-ò8² &êÜÐÂÜÈØÊÈ@½4ˆá(´"ÆÞÚàÒØÊäZÐ1÷ ÜÂض ü€¶üÂt@üºü~¨{Zú¸ ++HÞÞàæ œ€ž B¤ à ÜÊðèZèÐÙ["Ï¿—/Š·¡—å 0—å —s/ ÒB/‘ÿpÿVIƒ Ë# 0Çw W ++ ?Lj€àà0^ÒC÷>÷4à ã‡k@Öÿÿê³4‡ ++ap á —w# ++€p—å^áw Wת°àãpKà@ªxEðÿÿDc+áo@ ‡«Ùƒ¬Ã ++0—åÔQ[¢ªpàãGà?º,¡ïŸß0à ã‡ ‡@àŽâ仃$_”ÿÿêwƒr —å à—£.—\*Å6·ÓYŸ !ŠÌ)??· ´*? àÃ3|ZD /…+ âH³°³g€s à€å0€å³ ++ ê+ ÓYp;eRUOpšåí\+ðæþÿê0’~hB¢ ( ++%TC$Ï p/ ãGT{C`!“ãÂIœó ó ++[ “åS+S+Èó ++ ++FjG?†å  ++Fpó .‰o ++¬‹ ò¥ÿÿêÒB 8"¢ˆª¢³¥*1H0@†'D*¢†'¡J¤€¦ ++h-$€DA¤ 4`W  ¢¤X¼ ++=~k&ð(¨ "ÜÞè@Â@àäµ`@"ä9@PBª>o€® Ì<&<_<N<07<0 <.0$'#ZHO 0åT1 è_åÿÿêœPøh(µh¡€šÿ ++hªh7ª ++àè)n4‚ªn¯2¤h¦ ++x-D⤇7 BÓb h+-}3ÿ å0åÿëâè áÿ/â ‚á x+x+b0„å .=l"àƒN™€â@ƒåÐ ++Ð ++"0‹¨+ ¹,Ì ÁÝi,@º¬¤#¬«)(j,ø` ò xB°  ð®DØ0à ã LH5PŠPw{“à2‘Xs•]Ë 0ó'`€× Ð(  ç'D× 30š83žå£ ߸40 ã=o*[:pìh ++òß d XS2p á\]‡å ‡ìFP |!†dG' ªLøñ;_ãÿÿêKô/îôÒei_¼vüû)BýÁR°˜ê° ++þ/ù- +(ñ ¢ ÈžÀœx¦Xê2Ð ÞVÍ  S " Ñ’4 A/W‚€ ++H{RHB¸{1¹Áº H ++ è2æ0(PÝ.&pÏShB¤V0A‚ ^‘b8Ú p b‚  ++¸gÀ²(´¶d縨!š Xº ++he7C#ú 72À¼QHB¾~/®{ÿ¿¾{¾{¾{' x):D<À ++h3! h¹ ?$-*V`°/ ++ Ä²¢8/ª ˜Äò5ð Ê&àèäÒàèäÈ`ÎÊäZfdê²ÆêÜæÒÎÜÊÈ€ ++ìÞÒÈTÆA”ÒÜèÈ#1 f ++æÐÞäè`ebl'hQØÞÜÎ^Q ++Uilh$,"Y#¡îÆÐÂä¾è ++ ’ æÒôʾ«#æ zƒàèäÈÒÌÌ` ++ÌØÞÂèB2 ÜÎ =?‚ÈÞêÄØÊc Lp›75B ˆÊˆö%9j·‘Ø;r €;òö?Ì ++ )%?º31ÀAª-=Î ++g%E2'½ÈG* xÐ ++ˆ'&IÊ!KÒ'=Ò ++˜'$O‚'/hì äPì Ä`Bâ #  Z  püÓY² ¬,La xm•P0d(ÂD¹D!@Š|hpBWã!ø Rs’åÀ—å<0 hØ(1 ž‘3(‚°¬$›åÐñüïÿÿàà `‹âà†xý=¼O`‹åè5>¼(1œ2À0Šå ÀŠå$Šå(Ü)OŠå0ø¢ü±00´&)>2ñ0šå Àšå$šå(àšå,šåÍÑÈ‘-?È_ à @»@ ¬  Q$NŸHoÈ%, á´` ŒâŒŒŒŒ(`((|(1àœÅ "êÅ rU |/Œôd@Œø1 O`Šå(¶r¢üa((°`ù 0Vãá P0¬-@$¬<*Ä*B`ó* Sã€_]&œn ++2Q8*Aàžåø(?^ãÕ A0†å @†å0„ƒ„¼D 0 áœ òä€O` áäÐE}‹ |_lÿÿê¦Ñ ¨=¨]C *I]Cèß2ü+/kZ/•’ ++¤’ ++P.& )–¬C †åä1 `l#3Sãf5 4ZñB€42$I(q‰DOpåÐlL50#/ž@h¸+ @<l6 ÝxØ+p@8)¾ üø .]ø¬4Ÿ!Y¤è#th91 à“´xa0“å0“Ô õ˜.˜./àõ˜"à6K\(tÔ$“(:pxën«XÄ *}ˆ/íýôýÿêV¢ÊÜêÚÊäÂèÊp<½ Æ ÚÂÖÊZÜÞÈÊÉÉ(Ž-ª C„å ¦ . à® .5/!àñæñPà¢ó<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbpTÏÔÄÒÜÈÒÜÎ0 nb>x4p9WwÖØÐæb>fØàÞæ_?bÚäÐxd?–Ü ++àêäÊ~xæÞäÊÆêäæÒìÊ~ xAÔHAðæ07'Ö‘>ØÒ?Ún&ÜgDÞ QXñ1ÜÖT2QäÞÞè:2ÈÞÜ•xB@à@˜è ++â ++Xè ++0 ++8 iazâ×q ÊâxNx ++ ßÎ=JÓEÆD a0š~qP ÌÒØjx‚Ȉ &8  ++ @ ¬¤ ¼#¬¤DCªâ R·”hBè P­1!à7D§2Òj&Í# ƒƒCC/< b †å p'@à ãh : ãð÷âÓ p×T +%TpÓ7á{ò bBä ¸ èÂäÔÂÜB9>&pÙ B,*:ž=?¶10‚Â1àƒ) E ++* @©?žq" bbJ(ŽY .øX˜f»` 0“å0ù(ƒ˜â@ 055;Sãk%+Mzµ9]V] W1 Šå @iDpåSÝaqv 0 šå©=%qà’åf @ºåÍ#ÙU O‹åÒÝ U # !y@. "ि™í/$b| ++ Q"kÿ=0uâK' C0å„\¼\¼< ù&^eeDh66v ‡å 0‡l/žvÐ2@Ð Ð7†Ü܇ñôôd FÃf$ „uœ­* X„œdôù7 /qüq´\/ðþ,ßR!çÍþÿê(òúä ++¨Uô :äÈ äHBæ ˆ±,åQƒåà—cE 1 àPJ? ‚c-c-O&@ ã\OKÈM òöç_*!- ¿%¿/ÝûC .í0OÙX÷/*1D\LßšYD ++"%"¬¾\àAzæŽHN·HC:äÄLÇ(.4(¬ÇL' ++(LPæÐbè8ââHB fbâ87M¼8B ¹¾H@—åoNR(?›F­pWC „"îÿÓ++iœnKC1 à—Z×Fa“å à‘ë òt!à‘ÖÀ žå p“å{â$'' p;0Wãæ¯Cp“å¤%£ 1°ÄRGH€°å[á¶âLRGH!°›°Ó<[GH1pžC+°/<+?WãŸ+•rc° á‹gA‹.‡ßD#0$Wyº ++­ ‡}   Qà‡åµ ‡.`0&0&P3€å&¸(œJT0h)?ÏF /1oF A+Œ ++&Œ ++ ´ÏFx ++D÷Lªw/°„cïÔËP΋Eç9 ‹E!0ƒ‹E¯) D™€rd7, ã´¿på€WãMÿÿË||Ä ,30€$€;A ++0Ä ËH[NG6?t/¥  . 0ïAlˆ,-û5  á|ÒÛüv /q¤ ^0šå®þp§.} âšãÐz˜üðé^_ó0ÊdfàÖìÞjÄèÎÂàÜôÞÚâÎÊÎÚ[dòì_,d¨NDŒSNê:Aî ++æÔeZNì;(Ÿ†gGDî  ‚ØÒÄæàÊ^jgðnV ò Å!, ++Pð`P0Bþ'Z”ˆ ÎäÒæØòíÀˆ2,]&pÝLêò-…AS ã É2pF/}9Zpšå@uGMKd ++ a+Íd ++.@Š¹¨ ++, D! D éB ½?YH" àÎX•9 ˆ 5™@ Ý ÝÌ q { ++ ++ ++ZZZ¦b™M ++P‚P‚P‚yˆK^@^‘8@vbpb$b( bBV Ib (¹bb®b—~Ì ¸/5¸û¶qôþÿê>‚LØY&®R¦:&ëL' aT0„å ]&'  ±: ++ÒèY&!(•(8–@Y]i0å ˜5˜5h5í €í +í P;P;‰3cw'vhð'ÛKÌÍF„  ++ôˆ¨'B!¬Á"/+[Š3@ |FZäÐæGç2 @© +bÒYNØNN Ë+Ž'øÅ+‰  ÄêÒØÈïá Pñ „UbâQ= `’åQA ++p a= !‘= Q= qZ‘ qZ6køOP÷;¤¡’å à’å ’Í … ¯+"0³/@¤+] ++»|/0?„ g@gXEî˜;· ·ý UˆAtJ¤A“jz¸ö•YŒ"‰P dPö ++`œ]”b8 ø`7$8[H P’ôP —|  R×XúÎ ++. |G[APüF ++_¨žÈF ++$P2^þh(ÈBøp#8’³E_w k×Xk ×XR#`ƒk! ’kR#` “å/S™s‚zÀ“`àÂäèÒÙtÄXr8Bþ–)Ëp-ö/I$ YDªj ’n@0æ)Xvú ++(åBÒâW!ØI!â9*8b#â ++?@S:  AüÈ!UB@-28-!@/W"ü'ükâ8YÚ=/[â=%]Â`)1°_¢+7€8mÂigÀô ++x>@Š)%eêQ ¨g(,1ˆiJ·)€(,3kr.eqx  €±_©fq8‘e€fq#à’ÌL’ GG+ŘCGA/ Ä Ä (AÔ ÿ Bÿ ÿ 1 Œû .-ÁDVLtGI/õtG7 P̵÷ˆ(AÆr.¥Æroƒ h´_(r¨Ær/x½äH½X!ÁBpž("X ¾33 ._ bÆr6Hœªo°b8oú °qº§s{1€s­#W8`®´%wÚ´w˜ ++Xü!ȶB ++8—bNX ‘b/˜Ãa€ +%'¨›aXB ++bhB0—‡ R ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # ×Î,7Í ÿD BB @ è  L$à™åZáÔ*€XâÅ ++&0 ã`EâP…â,à™å^áº: á0€åà ã à€å((«(((,å$$Ï° á‹å ‹å>H$ H‚H‚(€(p(‡(°‡åàŸåê-0ž€sn:0†0{†å0 á$`X8À áLqàŒåpŒP,HP:(€à†åà†â\ü à†åà†âà†åÀ†å&à ãà†å`Šå€6€&€,€ €/ü€+ €/â€Ò€,€¸€¨€,€Ž€~€,€d€T€,€:€*€, €€€,$€/æ€/Ö€+(€¼€€¬€,,€’Tà†å°†å8 €‚€!°€0€"h¤ ++]‹å‹X€,4€T>€^p‹å „-„,8„„„,=<`ŠT/èT&à`@`Ë`8DH/®D0@/ž@+Hà„€»à‹åà‹â à‹X{‹åà‹â3à‹d´g@8"ÀÜ `ˆJ:àšåXHàšåP@ àšåHQà†â0šåØ@à†â#`@àšå'èAà†â+(0šå/ø@à†â3€@àšå7Aà†â;80šå?0@à†âC @àšåG`Aà†âKH°šåOà†åPà†âSÀÁàšåWà†åXà†â[X°šå_à†å`à†âcàÁàšågà†åhà†âkh°šåoà†åpà†âsøÁàšåwà†åxà†â{x°šåà†å€à†âƒXÁàšå‡à†åˆà†â‹ˆó šåà†åà†â“à†å—°†å˜à†â›à†åŸX£X ++/ñÔ Ü/á+X ++Ç€·€,X ++€€,X ++s€c€,X ++/IX9¬<&À0 €€/X+P0T[õ:P PPP&'°L/p3ð/Ôð/Äð?/ªp/šð?€€/pð3T[V: ð/°ˆAÀ/10?@À@/í€/ÝÀ?^Ã:ÀÈ/®À/žp?„@/tÀ?Z€JÀ@^0:ÀÀ À,/ñ€/á€+Ç€·€,/@¬À-s€/cÀ3(T[I:À0 0'°,`+`,à`@€/ò`?/؀Ȁ,h/®`ž¬à-„€/tà?[Z:à à$à`=à-`@€`@/é€/Ù€+È/¿`¯¬à-•€/…à?[k: à$à(à`Nà/>`?$€`@/úà/ê`?Ѐ/À`3 T[¦:$`P D\P#Ð/Ð/}Ð?c€S€,ø9Ð)P@€/ÿP?[å:(P,PÐ/ÌÐ/¼Ð?¢€/’È?x€/hÈ3€/NP>¬Ð-$€/€?[ú :,Ð0Ð4€`/Ý à/Í `?³€/£ `?‰€/y $3€_€/O / €/5 à%¬`- €/û Ð?[á :0`4`8`<Ðð/À ð/° ð?–€/† ð?l€/\ ð?/B p2¬ð-€/ P?[î :4ð8ð  $;;;Ì%t"!|%Ä)<-\15´b9à†å=?AX3E€0Iø(M°-QX+×Uà†åYp†å°à ãÈ"’4@È` †å pd0'À¼ ´~´@ú&0†å †åp†å†å0Œâ`ƒåã ++,°™å Uáh*°Kâ,°‰å0d Ô0H ƒâ Dà‚åHPH HFƒåg Šâ`Xðp–åàâàŠå@ ã ð–r LL JâÜ".tK ++ÜZ‚å@‚pO ŠåtlbL} Jâ šT/ Ô-@à /û j †å †\mƒâ`€ 'åXXD |Ñ|p¾p(ªp <-`‚p/—8 ++€H4gH4/O?/O -€1@†å$ ¸8¸´Ü ¦>@ ãðšå@1ÿ/á@Lðÿÿêß ^3ÿ/áÌ(@©‘ya„P0ÿ/áOp7,:,(,Ì.þþî/Ëþ¬¨ 2°_;ÿ/á{g0@_4ÿ/áHúýÿê€n<ÿ/áêýPÐ.ÀýЦ–<|(l(R(.BýÈ& Ü.üüdâ.Òüx¸¨<Ž(~(d(.TüÈ.öû.äûðÊ.ºûŒ <v(f(L(<("((.øú(.èú(Î(¾(¤(”(z(j(P(@(&((.üù(.ìù(Ò(Â(¨(.˜ùDePSP9)<(.ÿø(.åø(.Õø °–P„PjZ<@(0(((.ì÷(.Ü÷(Â(²(˜(.ˆ÷kQPAP'<.ýö(.íö(Ó(Ã(©(.™öÈpVPFP,<(.òõ(.Øõ(È(®(ž(„(t(Z(J(0(. õ@ .ñôP.áôPÇ·<(.ôx|bPRP8(P /ñóðóPÇ·<((s(c(I(.9óÈ.þòP.îòPÔÄ<ª(š(€(p(V(F(,(.òð.ÿñ.åñP.ÕñP»«<‘((g(W(=(-È.úðP.êðPÐÀ<¦(–(|(.lð S9P)P.ÿï<.åï(Õ(»(.«ï ŽtPdPJ:< ((.öî(.æî(Ì(.¼îÈŸ…PuP[K<1(!((.÷í(.Ýí(.ÍíÈ°–P†Pl\<B(2(((.îì(.ÞìÈÉ.¯ìPŸP…u<[(Kx6P P.òë.âë<È(.¸ëx£‰PyP_O<5(%x.êêP.ÚêPÀ°<–(†(l(\(B(2((.êð.¯é<.’é<u([(K.P.÷è(.æè(Ì(»(¡(‘(w.gè,M(=(#((.ùç(.éç(Ï(¿(¥(•({(k(Q(A('((.ýæ(.íæ(Ó(Ã(©(™.‹æ<.yæä.jæ$\(N@?æÿêX H„@ÿ/á*mgP,pð%æÿê ¬ê ++ ìÂØêÊæ˜B  ‚”gÄTã|pŠå g"s gOd ++| |*i|õ à”å^ãE ++0Žâ 0„å ”„ ++0Žç`É`B á¬]ž=pž˜Hp@ ãð—:8€I8àà PL áÈèp*ÁøO²ÿÿê4 õ4ØD†ÿÿêðXðIÌ+YHT €À /™ˆ#/ш ˆ \\/ á¬ *Et/ëÿ y4¨„ó¡ÿÿê6Š&ÆÞÜæÞØÊZÞêèàêèZàÞäèXB$h ++ô8Ä ++àäÒÜèX:õxBT@BT8š0B`8  ++B(XGð% b’ÜìÂØÒÈ@ÆÞÚÚÂÜÈ@Þä@ÂäÎêÚÊÜè\@@¨òàÊ@~@ÌÞä@ÞàèÒÞÜæ\PX´8 JuÑ` ++äÊæÊèP{% ¢{% ++{BP ·á à0 &àäÊèèòZø@ÞÄÔÊÆè€B 0™¢™™©Š™0k™Ì%à `©ùDA !éÒu1*YŒ14g­`1,ñ1,/1 #/i1_Ý1 /1_>Š ++ ++îäÒèʦh%b Z8 3ʵO 209) zŠ3`)%ÒtH:)Åq î0  "h "Ð0 ++TãÍz.æÿ² ++ãŠå : O%R ð  JâšåQãºQ:Ú?"ðQá•à ã^ãI¾¦/í+->$/e_.Ù˜.˜r _ @ŠåvR8p á @šå€8””@­HD*&.6Wà ãh,d.=$=R6Ö,/¥¸+åÖ$/¸_/‘ÖÅÖ¸dˆUæ *-Â/@P*i,  L|±H®Ošå D@ñ@-žØ ++Ø° Žâ0šå ƒå? “L¸ œ *}Pœ¸ð•ÿÿê`º 4ÆÞØØÊÆèZÚÂðÒÚêÚZÎÊÜÊä  ¿ æèÂèÒÆH[1Or[gÊ(’æÒôÊ`ñ ++X r˜BLP„o ’ ++ ø7/âC:øC¢ø`*4  ¸# ++(²`ú¨²8>%>!P àð0 \äÊÆêäæÒìÊØò´÷ àêèÊ@æèÞäÂÎÊ@ÞÆÆêàÒÊÈ@ÄòRh ?xR"ºRê½ ++TãZ Z"P¢ =Z0ãZ^Šå 2vt 2`šå ºRbRbORáb#/ýª+=b$ub`ébœ­,\)Î pâ^ã˜t ±/ r&ø…rj@ šåvà ¤;Í´ ”`0Žâ@11ý,*c11 4!pži0Ä´l*9l?T|y&,¹&$ñü `e&R.pž4-Zé.#¥}C@‚å&¥})2/P* ¤ð ò@Þÿÿê† ++Hßþÿêðlð/uè.°þR/©þŽ +++/áh+/!h#/Yh_/ÍŽ ++/Ž ++ñˆàŽ ++‰4*i0<©(š +++±R ++_  á@î ` €.€"@”€/M€W/¹€+/ù+/9 #/q _/å €/‰ ++€'/þ+é ++J Ošåìì(Ø ++H ++, / Õƒ/þi8¸0å Šå ã|x JÅ 06T0 p¨/ ¨3/Y ¨?/­ ¨3/õ ¨W/a ¨+/¡ ¨+/á ¨#/¨_/¨/1¨' °.ûþ/íþœ*µTØ8 ++uÑþÿêòÒ=?@f4?’fÓê($ÊìÂØQP ++i"#h}‚&$ÚÂÖÊZrrZÌÒÜÈÊä/#Øߨ¤œÞè@ÌÞêÜÈIŠ€ø â0B  ÈÞîÜZàÂèÐjŠ;½ (É4pŠå= Í+eÕ0pšåIq£ ++&Pã Õa hï éÑí¤á /œÅåä¾ÿÿê‚ ++ØÒæè~Jà ¶ÌÂÒØÊÈ@ÂææÊäõ @PP&@KÓR@P|z@PØÊÜÎèÐõbRR@Âè@ØÒÜÊ@nbjX@ÆÐÂä@bj@ÞÌ@ÒÜæàÊÆè\ææ&ZQZìÒÞس  R Ì®ƒ¶²ð ++¥ ++ àå0å0Šå&^ã ++¡ƒ Šâpå"îßë A{•Å­ö ƒpž ³4é2 ++¿T¢PLˆ.5ˆÐ@ žåÑ-[q@‘â+jK0žådB >˜BPp†å \>0à ãpC"0 lCHŽpB[u£ô Úë?ãpê.=Tà ++ÜPw ˜N±À¾¢õ¸OšåJžñCÿÿê(âê(¾/£ÚÊZÂZÆÐÒØÈ·•8èòàÊó<ìÂäÒÂÄØÊ(>äÊÌÝ€ˆ@ ++pò$Ê<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbpjpPZ 0‚@8â ++ ++ÌØÈ À´ æÆÐÊÚÓñ ++ ++ ++ØÊìÊØ PàÞæÒó‘ ++ØÒÜÖ"'ðZÜÊðè * L’À ++ÐB¬ ++0BPö3,8è>@ ¨Å‚Êâ~@ð@PPŸ‘R@PâêÞèÊ@—R¾r¾,df¾$2!X` ++(ð¬x(B" H æÐÞî„ÔCb| ðD  áìUìBž7(ìDéDð1žÍ /Ñ; ++# $A d /…«h¤ Dv ++RB ""( ++tÌš&Ì+"ŒX8º"k'HB""ð L *üæ@Òæ@ÜÞè@Â@àäÞÆÊÈêäÊÏÃT8*Ö`Fo ++(~7/Z5 C²~E~$tA ++à /&¯ %¯ '¯ $ 6/(,+,rD+êªN B, ++ ¨TîÂàÊN>(Eo6>(( ++!žæM ++±¯ †o1R *=Ô»/´/õ Š*(îÂÒèÊäZàäÞÚàèZæèäÒÜÎA*Xz, ++˜ç´g’, ++&P8B.–y¯D(« «ýe p i(ã ¥@àÙz ‚T,‚ÂÜÈZäÊÂÈ Ib. õ XÈòÜÂÚÒÆZîÒÜÈ“6/7Ú“/;2“(=z“& ++(!@âF?‚—Ü@0 Js@îÒèÐÒÜ{qX@ÎÒìÊÜdpÊÈÒÆÂèÊŽh0  ŽàqØ*à—4à ð0 áSãv ++à“å‰ DPà“åõ !pŠ? ¨Hp á9· ‰œpšå0šå¾/Ѿ',+¾_½bœP Žâ0wJwJ ++d>p—\ qwJ Uf+,/•„#/Í„_.A„ðà; /}ôOàšå*õ!$',éþ,/)”#/a”_Õ$' / –CN"ñO:0ñf’0€ñFÀ œÞ@ÆêääÊÜè@®K ++/ BMC š0ôO0¿ ++9/jtaÂ00tE*0hD’0 äÊàÊÂÆSY2 !3-DzG @—å0Pƒ ·i{ 8g ++‹ )/µ+/õ#-7`/¡/Õ @ÿÿêŠ& G *ãŠdPãºQ&@¶ ++3/`ã‹ÐOx ++4g4XWpàPâjÒá¿ åÊxOpšåÐ')“,/it#/¡t_“,‘€/i€upC€Xâ{LµLD/ù¬5Nÿÿ¨œQQ$,/‘(#/É(_=Q$ .qœJë¥áÝ%,/ÝŒ+/Œ#/UŒ_/ÉŒýÝ%Gv"¨"¨AÚÞìÊI ?2I 3Z2ˆBÂ2ˆ! ++(òS¨B0©0f/ êf"B[#¬{Cê22@‚2'jx 2/:Š%’ðOú2ì 9/Rt%ªtG!2!7ð ++êà ê0 <äÊèêäÜ@èÞ@¶ÜèкKaìÒÞêæ@Œý Y4  Þ.+ý •D$ ++m Ù5óÿÿÙÙìIõIˆ /µ¹@àšåÜê8] ++0/5+/U5#] ++`/5/554 ++ê‹Ÿb8‚4h1OÂ4C 4G ‚4`èÞà ì 0wÒÜÒèÒÂØÚ1FçC üÍ ++­ ++€ ++mCpšåêi rd_é ++[ïFPãYe h|èIhh/ùà+9à$qà`/åÉ ++ ¬°¤Í ++c= ++Žø,/•œ+/Õœ# e `/|/µ|`<rB60À @ ++ä$Oµ*"<¤ ×5/m«+/­«#/å«_Y»€ žåà€á÷ÚÇp@àØjô‡ðÉð€í§,-+$/e€_/Ù€ë: ++j%.@»r%%Ç"à _K0^»n ++sP&SãŸ0 “åm8äP 0“åøW/SÔ/ÁÔ+÷$9÷`­õ5Å+/«w .wç/Q籬ªþÿêT’â 1Or6â oÊ6Ð$ C CQ(8p(:àÂÒäg)B,Dp° äÊÌZÔ)k)GŠå!@«*p ÕD0 † 9B*º£o'"@Iz ++ pŠµ¼@Šå Šâpå±<R±­²8 ++1Tãp?ˆ@Œ,(¿OB¿CrBEoêB@N/NDZB§ÂY@:B4D(²½ñ ÆÞÜèÒÜêœ1Utó%ôl ìÊÆèÞänÌð spÄòèÊ2À (ðr äÊÆÞäÈxÌ®.(‚êÆèz!êÜk|¢ÂääÂò~ÄÒèæ LhY6Y`6 BDRRPê / H Šåq2õÚSæ ++ þ"9a0°8°8Ï  áàã šå¬8D½D@8äDÿ ´„ ñ3t1DB ¤:m<B @¹ˆñ3>àñ3m0C .ÁTB 8 @ù8 N²ÿÿê:ª Ö6:0ÜxXÔO’D9_D0>T&áIf ++D ++i2"N,Bº6Ï!@–0òFà%?6@š2?ŠFâ2âFš!`xO ’F3/ ÂtCFÜG‚FðÌÞäîÂäÈ Ì0 :¨&°@ÊðàäÊææÒÞÜH(±AˆŸShtSp7Qãn0qâ€'+M” /,$éÛoQ¨,‘a$Éa`.=aoˆ¶4•oOšåyo,/íœ+/-œ#/eœ_/ÙÇ / oe@rB6T0H¨CHB2õ Z?2O:HëI ’H_O BH_3/ rtCÊH_G2H_ÊÄÂÆÖ Ä0 B\n! ++`hJ 'ˆ`N£Xë{!0þ8âäÏ(Ìp=uh  á¯11à½D•ã!“ ++ T/pPÃ1 / µ `T0 áìµ YJâ>PQ :<XT]¼—WT@ Ì€¤@Oß">R?0ë/R?!ì%@z:.õ]G˜çTs! ØÖ/ /} \0 ÑT±‹#mDpmD//MmD'/0±00µ ,/+/]#/•_/ /=Ã:ì¡J /ú¡Jì¡JD/¡J7.aìè–‰Tì/½ì/íìG/Iìƒ/áì+/!ì3/iì?/½ìg/9 YJ7 ÿYJ*½ ê[uãþÿꔢ<P…OzJ˜,9OÒJ* C*J* C’J* 0XN‰@R‰@/Pƒ@ÿK+*m@Rm@Rm@Vm@¹,TU@Vñ= XG@¸*¸/Lª/!Zª/#’ªO%ŠJ.@ ++'BPP z|Ó,CæÊÜÈÆ,lU\f:L\|mÇeÇRèaàâ^ë!FLƒàâ^ã1^å 3@!¼5¤/©d¸q0âSd1 ž+08óÉP \ 0\ (p\ ”N›Û”\ -ì,]@Ó,\ `ì =[,ó2 ++´(HÎÊÜæòÚZ|ÃBÜÂÚÊúñ(Bb X ÞàÊÜZæÞêäÆÊZÌÒØÊ ‰ð€Xâ ++ ãŠåõ µ Ÿü ++šåYpR"_Û­@¹@m9pˆj 4;K?ŠåttU= ++@/šåxe8Ù,%Šp'uR0TãfÅð”åà‘å.á áàÎã…Á\ÚàNâàà …/T'TU%JWO@Šåžü‰RPx#&HOpåèDMDø&!@”î˜'ð&¥ `&//á#ÝU)ðšxãŽ_šåäø‰T4te |U= ++èù;“oÿÿ ++@ ã¬X% œ éŒ@@šåbzäˆ(à  ˜%{vü *aÀõs‰ =ñÖþÿêFªHÌÒðÊÈ/VUá(&ØÒÄäÂäòZÈÒäÛ"3ÒÊæC0BØü3($'" (óÀ üÂüÂ0¦ ÌÞäÚÂÐuÁPB`  Ð ¸BO¡"*¥""®§+¬ › ^ÌB ++ P“å à;'7 <÷H ++ƒ*ÜV` àžåä”!0žc) A ++ “1àŽ(1AH ^é  ++ €àƒå ƒâV“ 414H#í %ž¯IÄ  Ø Ð ¸ . @í ” ä å .åÿò,ÄC/0?*+”‡JŒ¨ÿÿ ++µÿÿ궕/F— ð „_à‚åâT ëÜ/à—).ÝTT|KS9bÊd>&z‰‚0äÊÚâ& ++¸$!$ ++(‚9À'¨`B^  `Ú … }[ ++Sl ++—3gß q0 ã—åR0CuSo2w!°—öJ8`CSã4YV  #) #Ò°†å †å 0†å@¯ ¦' øÀSáêÿÿàŽâèó ¦/0žG0º//Iº ô ×"¶" àjh|Úz b0¶g»HùHD P àãØ––lþœ/@ <‰<àØŠ” "0ƒ@ ++=LË(øxD"=ž{@0 ƒå„0“åàžçƒ!6Æ{C ++Š *!Š$È?¬Ÿ. ++@Šå È¢üq  @¢‘­aVå ‘Ð ÐW@„âÝI£€ÈKéx"@_ ++<.%<Á'&°eå&ï$/`h`["%1 àŠAÕê>Tî B.ùbÐp’I`á6PãBXàXQPá= ªÔR VŽ¼x0”åŽçÌ/ÌC@žçÓ8À Öá€ÅßTá8 * ++8Ø,ô<U<ð ¬ Ü10N-jS@ŽâÊ?¬ Åpìf.ý +++ Is ¨/Q  ˆÄ,¥ ¨oŠåÌþÿê8 Ý8"´þ 1 0ŽdCG°°o" ñ ,;U@B.‘ ˜oà ãöýÖ^ Ç/ÜýdqTãÏýÿÊTÔ7’PS qâ)A ±g Xx Ä XÚB/0P¥PŸàP&@Tø ñL8P"@TÀG3"8ýHãüÿê`÷ *Q÷\.vü«/oü\.©"Yüþ>"ò/Wüš/ù <7ÂÂ8(œÞQdO¢hdoúhÇ2bcO ºhúP3/ úcqRhØÌ4Þ^‘èÐÂè@ÚÂÜò¹k0æ@Ò[\×Gªh×gXB<8A² ++hPvVkò@Bj ˜ ÄÂæÊb`Z :;r0(PüôºPãJºúPãFº”"@œ”[ª¢S7W&Ä0t+È0 ép×D|¨‹”ÖF˜'8J‰+)2ɨÂ}qpòº‚mBÒÊÜè€$PˆA,&HjjM\øBjm5³¸BL8êh7!¥xBÑ P¤r:ñZäÂÈÒð ÆÎÞæ`ÆrêÌÒbäâZÊб« lÌÚè %ÌÈÑÑ0'1¿1nxo'ÜèÔ2p2ÒìÊرAlIPI˜!ý&nH&pP & Ao7î;o1àÆ*Æ2Ò:a ++æÒÎÜ~B­æJ«rôp üÈ¡ , ±,ø t@ L(t üÈt@ ¨ HÈÞÌÚèX% ++’&ÈŒ8½e)Jh ¨ðC+¢hõ$|:K "z:t' ++ Fo ªz ++ ~7OúzCRzEºz~ ++úPæ0 ºv·ÿh~ ¸ÿ8«#'xŸžå> ã B.eP Ä5 0„_Wƒ21õÈÿX0ðFS0'ì ¸€ —3| /q×3 BgG(×0ã? á_~ê”….aK8©,/µ+õo$/-_/¡Õ0r4¢B®÷ ++$ ++˜pHbe<~ÀbP‚º'sZ|æòÚÄÞ‚' ++ ) o Ú~PÙ1O ~ÙCZ~ÙDÂ~ó ++ºB°ÚÂäÖ Ú0 D A@ØÞÆèN @¶‹t@¶0ÒÆ@ï ++h€ ð²ð¡ð8Ì;PÏ7H ¹ë ++óZ¾d?“å °°Ë û7; `áoH$¥D , „ _4à_‘D oHØ.ÝxNØÊ“:Áx°ä«ä§Q8Yÿ ++ p“,/Ý8+/8#U `É p`\.\"@yX\ \Ð`P>;O ádŒ.ýŒ?\8 ,e³m,¥@+nˆ_Q³m …³mj ¦—p$ -–ºQOâ€Kg :€ ++¿… Ò€ ‚¹3?¤øWRj@ª€h$¬ÆÆ!`ÎO€9/bCº€B H"€B ÐÎÞèÞ Î0 8ÎÞš,+ 'ÊÈJ < ðx ÜÊîZÆÂÌÊ Ü0 ÊÜèÊä@Â@ÜÊî@¸0B„  hb i®1aÁ=ˆ?%ê3ê `æ)A‘)† ŠWĆ â©Ÿ†˜ ++,/  +++/Mˆ#/… ++_/ù ++-±=‚Ä%huoX¢„®3„áoj„ ++î08?²„U% ++t% rt`UôâêÒè â0 ÊðÒèx‰!Þä"h†  0"B":z+"ŸR` †Æ¿†,/q†+/±†#/é„_]† /‘†*†0`ÈùCʆùO2†m9Oz†m% Òt$ :tPhBˆ44PMFM>A-“Í44Ñ ++Ñ qÝ•'G/ ¨4Ýtë .<ÂÙ»],],Á]$ù]`m] ¡](á¯"°U3Òˆô!OJˆ 9OšˆU4òˆU7ZˆWò´0 䢯 @‘ €ÁÂÄÞäè Â0 > wôqÆÞÈÊ@ܺòhŠ ˜¥"­1WJ(ö4A•0Ù±.u‘% î+u „å”v%n ŽçeO)0f O0šåèM.1<¿M¸½,™½,Ù½$  ++`…½ ¹½ª )/ _/‘ /Ū 5:¢YBpŒ!X`DŠÔ?zŠÔ:?ÊŠÔD "ŠÔ=ŠŠ3`Œ*%:*H¢Š’ÐÊØà Ð0 ÄŽ¶ *SiK <¶ :,#/ݸ@¬ UaµP®à,µà,/õP#-à`¡à Õà0ú ` Š@°‚Ü@ÞìÊäìÒÊî¤(b'ËP¡Òæ@ÈÒæàØÂò®˜P@àÂäè+BÊÂÆÐD9’Ù„ÐÊäÊ@ÂäÊùæå?€ÒÜÎ@ÚÞäÊ=ÂO‘2@ÞäEM%0ÒèæAÔàÞÜÊÜèæ\@@D~DE"æ@ktàÊÆÒÌÒÆiDN@s(D~5‰"™-©bÂØîÂòæ?PÂìÂÒØ–šg\@@¦ÞÚÆ@èÂÖÊùáÂÚÊèÊäæX@îÐÒÆÐA.Ê`ÌÞØØÞîÄIuÜAæÂÚÊ.\wUÊÚàèò$DŒæ3ª`'dPÞ@àÊä˜IM)aØÊð@ÂÆÚXEÄ…4DÜD·sÆäÊÂèÊæã2èÞàw‚è’c@ÂÆÆÊæ!èÞCrêæêÂØ@¦ ++tÊÜìÒäÞÜË&ÐÊ+@äÊæêBCêàÞÜ‹7 ++AÌäÞÚL rA\@@Š©D[PD@PÞä-+1ZÞÌR?OR@èÞDq#\8LbŽCU+OºŽË9O Ž¢4ZŽ¢Ât©B’ ' /Ô‹'cP Å—lØ[ ü|q ”å à”ä* }²PNH)*/éH)CA¯$/yH)SXMA *¶ÄQX³/™XŒ*gX=0p.½pÙÓPÒŒ,/%Ó +/et#/Ó _/Ó /EÓ Sf’Šë(´ àäÞàÊäxØ+" 2§ @àÊä@J1#X@§%üÈ+,?š’ñ+Z_²ÒÚ\6¾ Ú^ / J^¯®ÆÒäÆêØÂ^^/ú^I7O’’§9Oâ’C:’G¢’{¶q0 ØGȘ ++ÐÏÇ'o” Ðâoùˆ@Æ)/ÁÆ+/Æ#/9Æ_/­Æ/áÆ ¶mõx¶m”x*3O”¤Cr”¤DÚ”¤ Ozœ^ @@ÆÂäª •œ˜•‹¨œ‘[''ˆDy"b. Óv8ªu*Àª±<Ïvˆ/ýÀªÓv/Óv-Óv3&×v Ȫ!/àžÛvNÙÛvw& .`ÓD8 LI8xqˆ,/­ˆ+í $/%ˆ_™õ /͈8¢–Xýw ++T˜@ ++Øò%ýwO ª˜p9O ò˜ÇCJ˜ÇG²˜ÇÈÇÈÇšX“ cY‘R9Ñ‘RC,/)C+iË$¡Ë`/CId&Ë0šHV=?ºš3Oêšd Bš0ˆš ++E€ø" u!ÆÂYœ )¿¦ïüt*Œæƒ„ž„ž}„žy6{/{+/Í{#{`yF ++ ­F ++@ãÌ ÝM&‚ù„ê† Í*‘F F Ša‚Xu%€­€±<Þ ˆýˆÞ @Þ >Þ 1Þ 0é440‹åØQ éKa^âÿÿz4aI‚ í8up ++ ++é4 Èý€.U¤õ3üt¤X,# `.%‚ µÅˈ< ñ< iL8 .)Õ…&çþ”¡Ô€ v ,/¡ +/á #/ _}2 Á}2ž9/5ž'q<Àˆ/½žÿ/Ñ ž#/ ++ž?”Ò¸ ++1O²œ“3 ++œ¸ ++ƒrœˆ8$–5þH. ++¢û4/Â¥%¥C‚œ%eúœ8Åb/ ++@û7/ÚŠ%2ŠCšœç x½/F)*œ{IOèÂÒØ1 ÈäÕaÖ†X1 Õü)HŸ]/-+ÝA $A `‰A HŸ1/áHŸC9›,/yœ#/±œ_/%ÉY›„*„'-"}œ=~ ¨5"?žåü%!9ÖÌóÏÿÿêB²BÎ   ç™& ´Z#I#h*àÍZÄ ++ c˜“ Ì 8<8¥8 ¬¤~„ñ„$/)„ Ðð„/u„#­8&YDßœ„3ñV_1àƒdoÑl SÇsª´ÉÕ ˆAL |ßÚÔ Þpè° p¤ ++ÈÈ`žâ®ÿÿzä Œd w ++X7šåÝ^bÆû}û TTL ÉL uUMZ€ ++Üh„ .1„PÂÿÿ ++là ?@ŠåœuDBOpšåP<¹ã€#<# ù@x×?pšåä'1ì" x¯H.…H¦È Ÿþ'Ý3Š–O ++Y ++˜ (`Ð æÒ“*  ++˜B3ž`€ ++ ÌŠ/  $ØÂÄÊØZ+ZùmP4ª— YrÑ µ †â1&"=&9à†6c*`Y*E†¸4.a• ü32à”ôx0Îãœ4/-ÚD8ÚD@¾ üI!'@ð0ð-'/-'ÖHg-'9°…lì5‘Á#0‘VXOMlòšÒ @@H¾¢=û ZèâY' âY 2íYœY.Y¢.Y.YoÂP¤;Yq¦ üÂ=Y5(¨vXÊ )Ø –. ­Æ "‘­~Ÿß!à‚êlRàjjy 5¢ Y}e Âý£LÅL 8  " „_„/I„#/„ >„Í„$/„ „/Q„#‰8$Á¼ î¦ ² Û @8@^âV«zÆ ++ ² 8 8.a² ++. … *™Ø B-£!B-Ko   ˆ®5àžŽ{ndP@^àkOd d¡™§¹} 8d<áç8d’ ++ýN ++ÙÙ¡‡§Pã Úà•(Í€!44 Îãçd/ex}¾ .\n RŒ/šåIçñ§,í{3 áù€Qçÿÿ ++Å»L85N|…%VP8Þ ð.‰hZ«ô èÄò ¤ õløö‚¯œÌkcÙ‚²  ãn äl/aÈ ~ÈP"môGô@Êu @.1^ÿŸãh[dõ mîŽ 'oXT.µJ 4ÓÜ´æ šŽÓoÁýíöI ++/] 'Up_©ÿÿ ++§4{`½`_Sÿÿ ++c@Þ_* ++å #†ýýîwä*] ++("c}.oýøhýÿꦢV ˜Bh 9W !™¿ ØÂÚÄÈÂ(ï"`Ù༠Ð æÐÞäèZ$ BZäÊÆÕ%‡&, oò`&•<  ãø@U:c3 ƒ"•/ƒå(Fçß F•<  á‚/8F•[ åT/'²²$z• n•j€¿pˆ7y"0ZøצÁ"à PÇŽ b³L¡@“à±jà„çéSTᔊcÝÃt $|\<<n‚–^ å </]<mD"¼›\ Dy 4 ++Ty t[r¹X XŒRáˆ` žå"!€Âã šå ™ P¤ˆ2Ú à°ˆÜ‡uü [s ++/Q˜Sæÿÿ ++≉rœ‚‹}¹o3j$šåUŒ´¼"¼ÆŸ¬|矂0P "œfš P0)ôxX |P^à ++!ddÁd´È/¬+ HHÚœàH.Qô"bóª8 ØÁ³<O¤þÿê Äá‘HøŠþÿêBJB¬  Pf•ƒNzÙkf•( <êR¦•H ñíHÇYD.1Dj#s óä 8 8“b5Þ:– —b.†ÿ,ë…qŠ®›˜Zý©T ª5ìÊØ_–ôªXò¬0®Xz¬ ++ù!p–H :¬••ˆ°˜8•ˆ@G8ž'ôxO%ù_¢ cƒŠÞà ++ãKð</Ee –ÁSØ1´$ƒ‡[ÞêèàêQØú  ++hr° ¸"ÎÊè'$P–Ý°ï†H—oxB²2ÿÿ'%®ˆª²²²¶ÿ+´V¶ ¸ð¶ðXôšX@Š3øBŽ‘, ++Xš8‹p8‹â(6pºƒŠ0Mvoº¼ ++0NÌ(WÚ¼ ++‹bP Pd@¾85 ,"TüÂ@ .x0S8B¼\Š¨ÂæêÄ5CÈgÕÂààÊÜÈ@B¼HÙã?Pê¥0B¼ À(Ø3€Â\0PfshÄ5Õt eæe 0cÄc +++æ(7üæ5°ƘÂ-*@\\\ž±ÈÍsCPB$ó8óa66¼@,Äg)ÒÊ ++(ÊWAä“'nOâÌ@A$ ++(p×H4šÌUG rÎØxƒ Љ8Q*ÀBÔ x ".Œé<%.é/ ++éCåÉ¿ ++áãÑdq&¬j¸@²Úî« ++§àˆÍÔN/Ôµ /åµ _Y:ID±…*$éµ dq#‹Q€âàÎÓ„P•à*p !#pá áàŽãî0Œ;ƒ8@â?…’à†â0Žçö§€/áVìMÏf$˜ì ,  +ó š`o3ÿÿêdh+]xP¼#ïþ”T .±cÛè Ôþ¥™3šÒÑ!. ++;é; ++†t5_Np>;¥™:_XBÊíO zÔí"0—GFNPvhv(tFzÔ8o°7ÎkaD£XÔ8 ++?tÈäBÔ‹2"ÎY¸3OÒÖL1I*Ö´²OÚÖ»@4 ++ta bÖ0è$ ÊdhhÇÎfZÖ ++ Ô²ìt ÷t2÷ta¶Üº@ÊØÁ2æç@H-``BØq¤è 1y² q² /`uP0¥M@¥M#/ÉÃC!x&$/YÃ@ 7³ `.å– ×ˆ´1, °f´1/$Å´1`9´1 mOEM`’e@@@üÈ»œOZØvy OâØÉL9O 2Ø£4ŠØ£?òØÉL*¹ @SÃËLÚá1ð½â ++ E9/J E3/Í+ l$EP6`/¹/í}<÷ˆè}<$ ‚y÷v‘#$S#¥Dšs/å+/%#/]_Ѹ ˆ¢,¨9>.Yä9>%/¥9>W9>”/¹9>#ñ8 ¤ÿÿêZzBDI?ÚI4?2ÚÎ 3ŠÚ·EòÚ=£Ÿ?ÜX >/ bhnºÚ8+Åq=%ú¥X¦I*u=(y=ÞÚ† ë{îY‹ug‚uo-: eð ….…%Ö7Gw"VšÏTºSáRÊ'š!/é]+)u$au`ÕuUð=«! 0Ñ/1¬~)w) ,,/Ý´#`‰) ½Ý=)„° Ý=.1%±òÙ=P×È!Ðÿ¡¬#Ð×pç2?jÞç0ÂÞݱàÍQF>läÊÌæDw}õoø¼,0(KŽ½MF§š5â=Ü& .´1•Ò€'¨,<  Õ@<õבÏáX *)¯”Œ.aŒ)ØŽëy L­LtØ+@.í$ 4'_“ÿÿ ++Ù´‚ÿÿêÊ>p'œÌ8Âàp…dÚà`~Fà®o@ÿo zÞ ++(|8ÒÞC*ÞÅM’ÞC(BàOÞ"oBâÿÿÿ¨â â<âââ.-Ìðäÿÿÿÿÿÿä6äää0ää4äæÿÿÿÿÞææ ´æ´<æ´æ´æ´ æ´è´ÿÿÿ¨è´ è´<è´è´è´2´"é¶ê¶ÿÿÿÿÿÿê¶6ê¶ê¶ê¶0ê¶ê¶4ê¶ì¶ÿÿÿÿÞì¶ì¶ì¶<ì¶ì¶ì¶ ì¶î0}ÿÿÿÔ“ü ÌÒÊØÈI×; ++'o ªî ++8}:î8}î8}î8}ÈÝž­ ++ÿ,ð ÃŒý¦ ++šô Ù•ôzùi?åoz ý)å<E]É<å7x.ˆ å  å$Ñ å å`™+ .)`Á~ni-‚<ÅfqHOšåpuiù,Ùù,ó$Qù`Åù /ù ‰ˆzÅ S qS(­S8ùSÿ/ É#E8wLä_VÒ>='1 ?úðL9O Jð=T¢ð0æüð‘:.O¢ð¯8[×eÞä@ÜèÐAI€Bò‰u“’ožÖ:A1«»( á…ÇÔc/}¾z Xc³Ü×é»"02nϪ~,/Y+™±$ѱ`/E/y’o`Œ/Qöó DÚ“öó 6öóöó D]ÐU4göó$.¡Ú–T LJ  ÔÃèµ{ ³%Ç ¬™.ü%²fí“@øæÊèB 5oêò ++0R7OJòRC ¢òRC ++ò!`–ðô–ðÿcô–ðô––ðö–ðËöñ–ð]8ø ++0AU%bÂ!P Od0 @æʾ$"pX@ÒÌ@ÂæÛÈnžÆú.ÿÿÿÕP ++ÌÀ¢/X..ú.<ú.ú.t Ç‚™¡ÖþÖpϼ½ ¼½²ågGÏYq0\ Ó|<Ú/í+/-#e¿*@üK·ÝlŒ`ñ‘?AlP5AA@" ++íW @sÍ÷å ++e 1“ t1à[± e$"0(Õ§ÍígXL§± Dl/àyÍŒ!@š3Ëý@0Øˆß €âÎ_®ÿÿ ++úÇ‹ .·`¼½A/‘¤+Ñè$/ ³_/}³/±³SF¢ü*nk$8ßÑæèäêÆè@ÐÂOú5èÑ\Krþ ,µHÒÞèÂ.²¦ È ï|& ¾.ûƒ )\/0boM.uE& ÊjS T9 Ñ\íÒ^kQ5 Š¢CP0B^2  .^~ [z*^^ ++ ^ p †åà†âc\+^W]HÕ+^À/©+^3/ñ+^_/e2C½í ++$/õ+^ÿ+^<i+^/ìþ¿t/Á¿t.ÖþX$Ïþ3^:` ++õ]™/\@[^©/\@_^_O’`^/D^Bš &Rºš`8 âþbñ#¼d ²þˆ½¿þ# 9Oºþ# dþ0_t %&.%&DÆÞÜèª]6@B\£ÿÿÿÕüö0/÷œd7/$d&$žd/$Ÿd ¥ d_h& àáGóÙä¶ ++Û1Ê 2 ++P9ÌA ++P›Ò ++!™Ò ++(ÕÒ ++8/!Ò ++ÿ5Ò ++Au¹,µ¹$/í¹_a¹þ+™dOšå%ùE,/Œ+/AŒ#/yŒ_/íE/!Î9/•ü'/Ñü7/üÿ/1Î#/iÎßl’ $TX>Q&û_ ‚&dS Ú&–+&˜"9/šw òwÛ Zw;\,&êO ++„2èAÂäÎÊÃø0àÞÒö½(ˆ –ð3+< ë° ³Oq0 xyE#æÕÎK,/=K+}D$µD`/)K]l _ˆPh Ch5h hhÐ5òÑh…Öh dÄç¶qp¡¤šdš1%Pt,(9_(+S j(+ ÒwÁd*dÿd*d*d,dÌ,ód(dÈd?HæÊœh.hÿÿÿÿ.h=.h.h.h.€ ãín0Ê Ó.+&‹ì306ͦ!¹Æ ÚÃÓG,!b ,ab $™b ` b Ab 4&’.S BÌ€_Š0ê9_Ú0¿ ++D20¿ ++šw¤¤o B2iÿÿÿÖ08ìFî12î=2î2î2Í ÊE0 :í°ÞäÊÒÎÜZÌêÜÆ^×GÆ 4ÞÿÿÿÖŸ<ÂÈÈäÊæ#‚1/4á=4á4á4áÍ-ä$ç6­ÿÿÿÿ6Þ=6Þ6Þ6­h:  ˆÓMtDÜJ× q_)uiµ¡ ­¸|1.ñ11Œ 9p¼?µÃ,/Ã+Ý)$/Ã_‰) ½).Ãtù"8,³˜r:0Xiÿÿÿÿ>{=>{>{>Xi@Xiÿÿÿÿÿÿ•@Xi=@Xi@Xi@Xi;@Xi$BÇIÿÿÿÿD?B ++0ÇI;BÇIBÇIBÇIDc.ÿdDc.Dc.Fc.ÌFóÇIBXi$H²ÿÿÿÿH7=H7H7HÇIJXiÿÿÿÿØ"XiNiJNi LNiúLNiJNiLNiJNiJNi=JNiJNiJ %ÄÒ:èJN ÿÿÿÿNÎ =NÎ NÎ N P™ÿÿÿÖ8Ë1PË=PËPËP ++7&ÉfäÊÆÞäÈ7R7ÿÿÿÖo\äèÈÓ1RÓ=RÓRÓRÓÉJ0 <ÒZ"2’ÈÊæÆäÒàèÞNPTÝ7s¨)Q…¨)Á<í¨)/ ¨)ÿ!¨)4i¨)TÑ,·$I`½ ñ?Â>\'.2êBx\'5O:TûD’Tûúw '#V 'ÿÿÿÿD?V ++0 ';V 'V 'V 'X 'ÿdX 'X 'Z 'ÌZó 'V2" '@"^y6Ц*6@"-„«{ ++01™9 0SáWp"oX"X"$Å8qà”å!ø< Å {\ I@x8{¹{ `!/í`#/%¸#+/e×+/¥×#/ݸ#w/i¸#_/ݸ#S/E¸#+h` ©d>ð#Ý4Ó«/Ìþ³ +/AÜ+/Ü#/¹³ _/-³ /a³ àbŠj æòæèÊÚ¯#\þ#0 ++ð#J¤ÒÜÎ@ÞàÂâêÊs $Gª^ø €à³F¯) bTa$`6 ++Ða$ÑcBOj>a$ oab ++‘oà a$¦‡ ·¢ F"U$ Ú%´«.!\çc^ .]è±FóªÿÿêŠ&ÂÆÆÊææÒÄØÊ~7p2( (2Òd F{”^ÞÄÔÊÆèXmoD0f8[ RÒ`q8Ò^0%`¶ ¢Z j Z *Ï9*ÙÑ &rw&Úw¡®÷`Bb‹ŽÿÿÿŽ ‹Ž™ÆÐÂäÂÆèÊäŽbŽ bŽ=bŽbŽbŽ*Ž0æèäÍŽŽdŽŽÿÿÿÿÿÿ dŽŽ7dŽŽdŽŽdŽŽ1dŽŽdŽŽ5dÁ.ŽŽ7cf18Xcòc¼†søHZøXøVøÿ)4O  ã‚§C 0ë/A¼zCs—'ÿu„-|!À ++‚.AGlrj!¡`ÓØ_ÌÿÿêJ‚Af‚`f nx€j  è IÄæÆÐÊÚÊÆÞÈÊý"¶,®u# ì“ììz ºÅ ºÅ*µ) ŽÆ“`,qâ^ŽÆG…3PãAŽÆ$ ŽÆ´ŽÆ _àŠåÔ ÐÈ ¸âÊÄDÇÊľÊÄ"X þÊÄS¤ÿÿê,V% .….\/@Ðf˜€T ÙT?šåRPK¾P,ºWÄPh ++XÄæXÄ?üæÄ(_¨ ++0FÄåv Êj ++ <Ó(Bl !8 nZ¾cʦŠåŠå mDû*"ñàšåà„áãÏRTáÊù—ʯ—Ê @)_$àŠå(ý O@Šå ¢ä  € àŠå&` ãŸÀ@q ++uÙÚôƒôEXASáo7šå$E>ASáf1†b¼šå$ Šâpåé ’ü­$«/$é $™ 8å80 á,h0*0 ‰3Õ‰ࢠ++0ㆠ++àK3žâÝ ‡€žâ«ÿÿz= A"@É$"ôY À¤T `šå— /šL[øñLDÔ͹Æÿÿê àšåàž“¾q⼨¢…“É/0˜ "ìLN'LÕL]@V:à*à Î@ Ι " ++jìQPi$i  Ô¨©X8á8i`"Éþƒœ *Edïò £•Df•]_Ì< ü+<=Ïêÿÿ ++Fÿÿê ã° .U°3¨_šåš„•@€Q´þÿ ++Â*?šåDÙDTšþÿ ++ +|H.!|z7!J4€4 *y4T&6þ"tyLÅLtl@/ _þÿ ++ÙdïþýÿêjÒH°Í %t@Ñ  ÍEt@( Sð>hêlèÜ` È@˜NŒ"„P ++È"P, .z±Í˜læ ®{¢l ++l Hl Pl ¾0 ZH0Ž S ++lÙ+f@! ++8¥ X0v?f ++(ô5;fô55f0ô5flQ n lú Z' L&r’\p\ÿÓ \ÿÿZ \©p\p\t\rÔ/`¸ êÜÒU:ÐÊð\0øŒ ++ 3 á· Å3T€;åX.ÕXÐDVªUú ülXN`ð  ÁY% øÕR| -@/,cÂr Ìjpj=pjpjpjtjp¤"#  ++D0 f)" ++kó@Âæ@ÐÊðÂÈÊÆÒÚÂØ@1@æÕ0vˆÿÓ@ˆÿÿZ@ˆ©vˆvQzˆÝx  ÂæÆÒ҆à >%À2¶ Pãº@Ãáúú¦3 C¦õ¦EÑÿÿê¡DuDO ã<u<Í$3©.Úz€ ZZ@p8d88 _„ üd8rxP Š C@B*è0OvO=vOvOvOzOv¹! ++ÑO0 bM/K_T~ì@(L¡ï™€ˆ€ ç&/$ß ++mß ++3Bù§/H/U§/C/­ #å§/T <Œ”ïOpšåg0`Œ,íŒ,/-€#eŒ`ÙŒ  ½Z4D’Ð/XÕ "7|5 ÿ/„@@@ªVüðÒ_r~ö/ ++o"~ ++ §7 x§CÊ~§ 2wÏ V‚~}Ç ‚{ø{»{³ó¢{1Ü}ÜSÜ9/éCA$yT D%TYç‹ÇÜü ¼ /©¼ _Æÿÿ ++qãíãM˜Fã,/Uã+•ã$Íã`/AãuãJãl8€h¤ ++£5¢_š‚¢/h¿ "6„"].(—`G ‚ñ9)BÇñü¡‚ñ wq ï_àB†1VÿÿÿÖˆ ++êÜÄÞð3V1?† ++†;†††††îËt3c?1ÄÞð ŠÙ_ÿÿÿÖˆÓ1ŠÓ=ŠÓŠÓwJ8ÖŸŒŸÐÖèf…§}–j[1ãfJ0PãdcOPãb$/‘º+/Ѻ#/ º_.}ºóÁâ/ ã>›ÇQA/QAƒ*|®,/…ô+Å®$/ýô_q® ¥®x¢1/P"!/]x¢?FÚ1 oŒ¬«ŒˆúOJŒú:¢‡T úŒ¡bwú.ˆó¡ Ò"®*(úIÁ`BŽ#5PÂu#º"(#¤ ++ T÷Ê3ãóØ"ŸñºSãïÊ$/™Ö+ÙÊ$Ê`…ÊD€`  " 0;M’aÙ3MY á 0šÆ" 0$["bõS@  ˜/q˜ . ,    o 0†å P psÚ dãN /‰lÀH;Sãd{Þ1uD o-S6bc¹SC ãa²bX0È "5 È.øþ, ñuS,/¹ +/ù #1uS`/¥ö/ÙÛº_MSºp/‰p7/ÕŸGÿéÛº$/!p?tê‚ 2OÊŽ‚ "ó(èÞàZØÊìÊØZìÂØêÊ€õ#8ÿ#bMGW @ ++ÐbXb‹8” HPè ð80šàäÞàÊäèòZØÒæè2ž(¡VZã¢æòÚÄÞØZÐÂæÐî4_ºŽ€9/ ++#SbŽ ++I±H/†-&!ZP ++YHB<+WP%2ÞÌ@ï’ïÿCïÿÿï1’ï=’ï’ï’à ++Î8 ìâ ( â–âÿÿÿÖ”â1–â=–â–â–âĘZæØÞè ìæäoÊ  ã˜ãÿC~ÿÿĘã=˜ã˜ã˜ã~0 ÜuñÀt ÖœÖÿCÖÿÿšÖ1œÖ=œÖœÖœÖ ++”0 à@c>à  é éÿCéÿÿžé1 é= é é éi1 æñLñ%ø ++¤øÿCøÿÿ¢ø1¤ø=¤ø¤ø¤k-FH æÐé =¦ÔJ =Û™~Ò•Õº:8O  ãB̈ ýˆ ˆ/Aˆ//…ˆ ˆɈ0/ ˆ  ˆ/Qˆ/•ˆ ˆÙˆz,)dͼ*q˜.}',/Õ+È&$/M_/Á/õZ} #$Íà¼1Ï7¦0Æ& î&#š& K #ª šF€ ++4ÒÊæ&# º& * "­ ++-# Ê-Å% ìÕ-#¥.¦¥9 B{¥¥&w M.*M.${z ¸ B¨ À¢cN.N.öBåN.áN.@ߺî*ÝN.ÿÿÿc.s. .. € ++Ç >,/qØ+±>$é>`]. ‘.`.(A.8.ÿ¡.$Ùáèn.7¨.0¨(ë õ-'Þ-4š¢-O*¨¢-9/z¿SÒ¨Q :w¢-75¢-)ª¢-ÿÿÿÿª&=ª&ª&ª¢-+¬¿(ÿÿÿÿ¬â=¬â¬â¬¿(®ÖÿC¿(ÿÿÅ®Ö=®Ö®Öw¿(&î°‘Èéuîl¥]îÿV/…V V Ù˜”õy,=y,}y$/µy_)y ]y•ßÎ ;(? [Ó¬’Ol?4àO ”c…T…TÀ»,/q»+±'$/é»_/]»/‘Ö•_+ì Ö•/IÖ•+/‰+/É# `/uÖ•7/Á^'ýÖ•8/Iÿ/]^#/•Ö•0d’Ö•P`B¶ÇâØ ÎÊèZìÂäZÞÄÔlt €i,ð,á, p1&*m™$b@ŠåùŠ¾08Šå¹Šod‰‰Ô<ò{"y Jâ@Š<l©•Š|5("û !à¨:T«žåQãC%†O@Šå,ØüR¤Ð@šå”åPã)Ü^ á ‰T"|E\ U…@?šå@@ðxa‹AŽâ—£T š8¯ 0ðåÀ²^ãäÿÿ Ш!àÊC‘åÈ°ÀÀ,À$À`“ OŠå8Ø*­Ø”1ˆ© (å‘($6Ï p™ôC`´ P 3(d ++¸‰™_ ª¶¹C¶‹'r Bⶕ €8B¸ºÂÿsH ÈÞîÜHÌ8@ áç§~­k'pÉ«„z­®ˆ"p–‰==^6+/p\\X¤å+­ ‘â)j0—ÝÝR@†å . ¢»?0‡"+JÛÕX"+ /É\@  áåL.LH‚åj+Tz8•¨Äh“?@ ++ȶ&¬&R Bºl^Ì"H §yOJ¸¬3 zK# Òþ¬_ :¸-/ªkEn¸1²'6 MLY¼ #LÕÁÁ0ôߺnnu~ ;‚Ø ++.‰x 3 @Š$ ++Vxr«˜ Á0ï˜@?³t É/%Ž«´L&§+¹ H ‚¯‚ /d¡ wÝ‹ ª¬p?FïOÈ ++ç»°/p?¼.Q,TnA½À,ýÀ$5À`©S /Ý;¼ (Ù°7¼ £7¼•7¼$;¼.¹0 ?¼Œ? á /;/i7/µg/1s ' døV<ô %0(Ùc¿` ,(¨*áß c¿% #ðX+97|ð¶X·°c¿p½±xc¿sŠº$h1 ¶8Ú¼_6À¼~a àx(Æ (üæ@Òµè&¼º 1ZDS ++0/”ø|h€H8B¾Òf€ æÊèeÙ¾6ä6Óó9¶r/0/}ê¸ýÃ< ++  ?0šå/ Ž+M&$…&`/ùŽ/àš‰ÅFu‹ ++ʳ!7q > †ò N/@J//=J#ÞJô¢ ++ µ"¼Ž :‰Š`€Àå 0å _²¾P ++0å #À (R"P êÜT"0È`›˜ ’T ++˜}S‚¾5ç§?¼¿m9 ^Cj¼;8¸¼é"hÄÂhÄÿdÂhÄ< ++hÄÄhÄÌÄó(hÄXP$p8!ú8¦+4Æ}/z} ++•† "  È ÿdÈ È Ê ÌÊó `?ã ++ÊvÇ#ü H(PÊèB {Ç2pæÊfIÊ o2@èÞW) îÌHE rŽ‡£dÔ¾–š‡v( yG—dù ++ZJâ>P/ ‡{™ <éwÆ3PãO+Å9Á@ àå+’{OÄ!ô%$˜   Ë˜Ø Ø.­ØÖ[Å /õ —ˆ.IT±“ÅO/.‘ب”¥_Ç,ýÇ,=G#$uÇ`éÇ /Ç„Ó„— µ—§—`›+õ¬Ã ›Ô/MÔG/©Ôƒ/AÔ+/Ô3/ÉÔ?/Ô G RÍD»l .‰”-pp&ÿÿêpª“ÏVÌ‹,@ L EüˆP(LX±‘8Ì8)%P©5]|bÌž:’wžêwž RwÈ’ Î’ ÿdÎ’ Î’ Ð’ ÌО?`Âs/sð0š * Ð `ÊìÂØ º”n òêÂèÊ@ÊðàäÊææÒÞÜ@ÒÜUð¼8õàäÞÆÊÈêäÊ@ÊÜìÒäÞÜ-ÛYÒ ¢/ãLÚ´ËË84 4$¢õ8„ û7NÄ NÀvÐlTãrÚÃ.hgµ!5/`?± !5 !5 $A8› ++› ++ t!,­_/ áÆô ýPÙ‘“ 3„ß: .U¨_íÿÿ ++y ‘<&”Ç ,/õÇ +/5Ç #m0`/áÇ ›PT0ÔW·ÄØ æÞêäÆÊ* !˜Ô» 5Ò0‘&\XÒ@6:"üÂ;5t6 *?1ÒÐ2Ö¨.±ÊZ@tZäÊÌæìѲ.”†!9 àŠ”.Д8/ á8 rû(ª!.pØÑ"@€¼GUÓ¹“ CSá³ ~Ù*/ È/=‚/@<–š~, ¬ ?pšD¹|Ü°$ rûﹺ±ï¹P è¢Ä ,}‚- ++Xü [»@\èn/2šä ù¸¼ú- rû*sÿûµ ò#D ,q¸¸ .©ü@Qÿÿ ++4ó *å².c<šÔ‡¦ÖÒÜÌÞ(7àˆäµÉ. ñ¥Ì8úÖhº*,A"@Q? ++-0“ù5ÖP\6Ö8µ@¾.ÖB @ì ¤ÒPZ, /:b\5‚Qâ+CÚÒÉ&Bw „?8¯Š0ÈÊ@xó:ÚQ Q ÞIÕ…ÆÓ3  I 48(?W?Ý/ñM+1M"$iš?Aã(Û7/åÛ77/1Û7WÛ7”/EÛ7#}8+$= ,á= ,!= $/Y= _Í= = LÀEÔîÜ/ØGÝ2I ^O#DìÂÒØN#»#KzÚ)A/ ‹1%_Ú]:ZŸ]D²Ú]w"/ u Æ0 D=TÐf ÀJYÜ %íEÐVAmleïRbA1^W_1à*-W^ã~A"¦, qà¾k g ¸Opšå.,q0âSƒÞ žåõÿÿê áó’¥ä&ä&//Uä&'öA¹öA›#”§,/%§+/e§#/§_« Er1,€Q”‡ÈwÇÀ/¹ø#ñ8'äJºDœ/9+y»$±»`.%Æ1)4 ËL@à‚âL3‚ÿÊX'/­X#ÛA¸3Tãΰ¤ã" ˆO ã; *9  ;1àŽD¤Â?Ÿ^à¡jX‘XX"‚@_àå ++è8Ûœ @"3U/I"3'w [O: ËɪA&àÏɸ&àÓÉM/õMC/MÔ#/…MOªó —þ? + „1 á¢¬<R*m x€oÈ`yþÿê”^´å1b  .#Ò= ++tàÂèÐ@üæ‹*VÂÜ‹*&ÙÙÜT9 âgƒ ++w÷܃ ++ ¢wñc— Ræ… ZÀ@` ++P8›"(¦¥ ÄÌÒØÊ@êÜÖÜÞîÜ~/ ++~ bË3`è ä†ÂÜá 0ØÞÆ·çPêÜÚÞÈÒÌÒÊÈR@æ`qüÂ\üJ¨ä¥« ÜÎŽážó ÈÒäÊÆèÞäÒÊæ@àÂäÂÚÊèÊä\üJWÒæ@ÂèÚ«4üæ\‰)r‰E€ºœÆî#`üp³3ê ³tÞàÊÜ@üÂO*ªOÀÝØì 6ØÒÜÊ@üÈX’È—É)!²;NëÈ@ úÆ Ä,Ì&%òÌ0` 7 0 \æîÒèÆÐÉ)P0ÂÒÜI ++V ºÞDRÿÿÿtPØWoZÆÞêÜèQR&ÞQR ?Þ ++ QR;ÞQRÞQRÞQR+àèF Æs4¤,¼¤0‘; w"J¤!.Ñ ++ÕÍ,/9û ,ü$/±û `/Y0(’«Ô8ÚCBÔ §¥àH9_ ++àHS bàH Êw  /â—} * Ç_¸4U!/¹¯+/ù¯#1«AU­U8/ùUÿ U$ 92Ÿ,/©ð+/éð#/!Ÿ_/•Ÿ/ÉŸ6H¢ŸJO ++âJ6PâJ9/âJCBâ'ªw ++J J8ä8x8ÿÿÿPr8c80)/Ü+/AÜ#yf`/ísuxDY,™d˜½D$/M{/ÝC5Ž_‡þÿê!ää=äääPæXš8è/šf òˆEèý)ýt4ê?»d5ìGBšGx ++G‚G(_ Bî‹kÿÿÿŽ:5î5 î5=î5î5î5Z5"ÂÚ0lÆØÞæêäBð66 Á–ŸŽ·}Ÿ0"·ÐX @PãRÏ øCEsÏý ++`1-;*í9_ šå1;o =?O/u»O´«?#Ð.¸Bpì–.Yrk,Á,/#/9_­ áÕ>’ ++ÈÊàèÐÑF6ÂÚÊÑÝs0 ++t8O’ðG( @æ‰ë¨ð29) 3DCrð2 ÚwËóÍ ,æ,A@ÒÜêÂoa@æèÂÆÖ-òÀpÿÿÿÿÿÿ¥S_ABò¤=ºžiò’3žiòžiòžiòži1òžiòži5òži>ži1U §i ¢iô¢iÿÿÿÿÿÿÿÿÑôja iôjaádôád=ôádôádôÖ ÕaöCVÿdöCVöCVøCVÌøádôád ôádôádú ÿdú ú ü Ìüóádôád>fæÊ©Üd xÁçyXf÷&m@pšåê×ëAXd_„Þ[gdPãYºdª[ Iê/ùý + ^6ïw`.åý ®°T¨¤/=Ž™,/•œ+Õ™$/ œ_™ µ™p<rBþBÜÀ ` äÊàÞæÒ> ++W ñ­" ­/øh…¯ý@q§•¬7Tã[ˆ@àžå• q ‚âà‚ºUY¯'Ó¯% ‹Èe®/ýE+/=E#uá`éáO„àÄÄ5Õ’VQ]ºyÁ,¹Á$/ñ|_eÁQãÓÚ€ ¼/±¼'/í¼d¼P = 8/‰ -+0 °”9!LÚ.‘TÊà/ÑX+/X#/IX_/½X ~À/ 8+/I8#/8_/õ8 Ÿ‡ÌD%þÿêÌ´ .EÔ.÷ýóðýÿê~’ŠàÞæ­ÀÕ÷ þ êo8`Þx/ ŠP âW@Œ ËŸO(AˆÌ®AÃ/:ž@E/ªEq!þ ++V‚& !¢ p\¬b8ò€Bnƒ&_ŠÁCâß`| ’,<,3Âw â0dz'$ðÌÞäîÂäÈ Ì0 0ZrˆÜ,h' 4 $ Asd` \ Z éa/`â / ÿ/0£/A@¡-™O ,ÙO $/œ_… ¹6þ?ˆ8O’Æ*š,3Êw "⊃)pÄÂÆÖ ÄÎa ++‡àäÊìÒÞêæY -,ÔÓ#q6¾gû=VEI.…u`ã0ãe€Tâ.j@•)Bã)–¾®'ºSá%–¾ÿ¬ '„µ/1µ'/megµ/½µ7/ Á)W½Á)|/Á)Á/]d+/d#ÕÕ,`.IdÜ!Øþpáª405 O0šåÀ½ Í<™î’î,/5Ø+u™$­™`/!¢/UÅ0æˆ×Å0$/ɘ'/˜;/U˜7/¡˜ÿ/µ ˜+/õ À+/5 ++À#/m ++À_.á ++À0 * `Àvÿÿꦺ¬[5[ÿ8Ž ++ØÒÜÖT`Ç0Ç/R™Pª1}0Èn² ++ ù&7/‚ Z‚ú Âww1O ++X&Y/)‚¤&+Ú¤&-B¤ž pÈÞîÜ È  ++›   hoš ÝÛTÔFÅÛT<IÛT¨^I/¥·&áU8/-&ÿAU$y8,þ%ä,/Ý$+ $U `/ÉB /ýdoSøCU3èÐÒÞÀ×4@ÜÞ%DU/ sbZ7$Y/ ++7/RªSª ^&wïˆ Æà0 F'U$Næ (!ÜòmõŒÿÿÿÿÿÿÿŸ/õŒ/õŒ&õŒ/õŒj<`/­‹ /á‹  2 08` "êMZ.i*‰AË!2Æ_9   ;l𠩃€í!„ 0.%¸KrÀ /mÀ+­ˆ4õˆ,/5ˆ3}H!\^ã—G ”ÉLZC ŠrÖ_­m„1hfh | aY®Ö^30†aºE*‰ºPZ &G ÜM ¶‹ÜM8Õ žŒ¬ utë †A—L |ðM:H Ýh‚~0¬ )7!¿_ ¸þçæ’R( WýŽr(øƒ6( ””1ò4×ix( ÆÂØØ$" $%$Ç!ÔkÉ"QˆþZ5Yë¶2` Yl@ÒX+ZU ++üÂü ªU» 0pBãŠ@‚LB ++…?" 0^!Š%XâŠC($j=¥.?Pp 1 KÑCrp _ÚQpLI&oL/ºþL•L–É ++/KþÑ6ÝH.ÓýH/Ìý…+AK,/ H#/¹ ©_/- ++…/a ++…6ª¢,Ö~ø/õ‚&0*ÐÂÜÈØÊä(/Š+“2 ÒÜàêè~*a@øUZæÒôʯ8¿.1 üÂ)@)5t@üëˆ B^; b€úU_ÒÜÈÊðV "V*W,"Ww.ÞêèÀbPòÁ2"üÂ* Â-ªÂ3ôWÃ$X ÄyŠd^h& ++ª&#B­lÒd4*'þ S)r&d&)Úw Ø/$.%BàÞäè39"Üè(%(-¨6 ‘ ++´|y(%8Ö/±Ö7/ýÖÿ/Ö#I8´|A/­¢+í'$/%¢_™' Í¢ÑI%&A(Ò9_ ò(ÒSJ(Ò&²wP^D0 "„ÐÜï=,ÌÿÿÿÕ/*Ì1,Ì=,Ì,Ìw I0 (Ϩ(0¨( ˆNáÒØŽÉÒ4 l(/µÚ+/õÚ#-l(@@!/µ'/ñ7/=ÿ/Q#‰8(Ž!,/í8+-)"$e)"`/Ù ´(M.X¨Z$(#Ü@ú[®[0ôi3ðRoÄêÌÌÊäg-_*0g9)r¹CÊ0g'2w: Õ0 Þ ++i*st4tÿÿÿÿÿ2t"t/ÒÜs4s_öÒÜr;4r=4r4r4w ÔH ÒÄä 'ÒÜpo8B6·ÿÿÿÔ¿< ÖÊòìÂØ¿16¿=6¿6¿6‹ÌÚa@ÌÒÊØÈ8ÙÿÿÿÖ_>ÐèÕ18Õ=8Õ8Õ8Õ8ÐèMº'ÐèÍ:ÍÿÿÿÖ0@OIÏ1:Ï=:Ï:Ï:DÊü$ÑSpÓêBê22“=ö£7c×ì“lÝ ++ 0W;SáyW ûrL–M .NØœÍ<ïˆ.ˆïE¿7ïqN .-`ïh~(t»À¡ÿØæ *Ý°ã g,/A„+>$/¹„_/-ga>VJ\MO<xf$>>@cž3/Bcž&Bcž/Bß9/w&rw'Úw °¨&ã™äDžº°· rGhi /Z9ÿ&4+}à „=Í”—PÔ,1X,qX$/©Ô_; Q; <<2eD0>!7Ðèú1@D22ÊðèwÐM _²Dn9 úunS RDn& ºwN0fæ{iƒèØÆø†Ä@Bš  ++p $e N0Cu^¹KoY¡ òƒM›8uüF‰G`Eâ ™ ++.ÜBOq€çpÿ€å à—å à€åà—åà€åà—åà€åà—åà€å0€CX…ÏX¡Ð EIé ++ËàH,À /™$¢) ›(l¤œæÊèZèÒÚ« PB˜  1"â¾}[µâq¤ ++—yiÞqÞ s ‰Ú0Úqàƒå@ƒ1²3 àƒjàƒå&  ã Is ++0FšEò ÿ ù› ^EZ‚3 €ùs€$L&G#@‚$‚$>=tî0=tq åê1àê1àê=à:” ++L‚8&F:‚J1à‚HÒG X‚ã Tà‚åµt XFáѕɻƭ(Ÿ¿pF ùKPD>c$šFmð H@ ¬$HÚÂÖÊZÊâZÐÂæÐèDOVˆ0B  àþqPup"žx! žhƒ©u½—å€âà€mž_?C‹å 44L44494œPŽâ0,,(” ,ÿ,!ƒŸ3Aáäа;¿¬™0D ++âø §ØL˜B–  ¨‘rŽ]P†v´Ã…žå0—åE¶²÷ðk.…"#0†® ÷RÓÓú­ ú­'@$q (÷£å 0å Ÿ,å<çç çç!×å›Ñõ§pa¡f9ÅÁzßs“ðz ++HVäÊ Ô<´ˆJ  À·±ˆ©ˆ˜æ °l µvRpšå@ÀqD$XY §#@ŠÃUžåàŠG 0[]ƒâàƒßcS³.žŒÓ ã  ã ei? 0„.ݵ!< ++ 0Áq)àWýD )uéÕØ=Ê=.•0 )r¢B®¼`¨BNÞ{(¼>ÒWÐ 9&SIA€0*à áä®la0 á à“¹~Xa0“å “Ñ~EÄæ~QàL`<à ù\ÑtÉ pòP êq"ÊZR*R+pXRN3PÔ`N˜`B’ øb×iðm%u.èÊó ++b ~ L B  X &Þ䡪)ÍH K°žåuHbÎC°€å ÊÙ °ó¡Ñ /°š€‰  ½‚€ y  $3°‚Ì3‚åu  u 50‚ƒ/pù‚‰´žž3€ (€—ž/žXB!ˆ²B ØtL$ ++X@X„Ô„Ñ ++a„å„å‘ 4ïÎö‚BT °R_Oê G›€ê -;pÑ­Å Ö Å@ á]àªò%Ÿ€¹²£€¥“0"ÆØÊÂäZÐ5 grT ++˜-´€T! ++P> ShB°ˆ_ BXf‚ÿS%VŸH"Vh‚Xh‚Xu¸XBZ  ++ðÃ*×Î÷\/¿'‘KZ•©• o]!žÂzOA/ ãõ ñHð0 áà“å.á áÎãÕÁxAqâvj™ò  Q •¦ 1ãKI¡`PãEÚ*`¦qµœ áïO`Šå lN Rˆ P@šå`>pPLLs' L †‰d .Ušˆé .‰L6‰Á_[ÉÔ\.åS¦X"àŒ\ \ó’ P%/‘¦: e2½›\ 1àžÉ Ñ 1 ñ l1 àù¢Í.]IñÞÕÇèÌCžåŽÌó) Élã'*^àå§^ °fT&‚€ ŽÌÃø%/á<…<´ß\ V D u Ÿe3Sã 1S èâ^ãk_6T" –U=ˆó€ÆÀ6ÿÿê à€âàÎã „P•à*X Xpá áàŽã|'à„Êþÿ ++@âýß à†â Žçöe ++îXSØ„ÈL|øûÀJu„Ru£åÿÿ ++žþÿêA\¥ +%¥ TwVSa6T2žS.+þÁlæš^$ÆÞÜæÞØ‹Õ2( ™ ¥@jZvʲ$hÉ £PN@\´xðX¢Z@\X : ‚ @t@8°ÂMa…b è =RZäÊÂÈ t/e "*]t ‘!CƒZö 0„å0”åžç6PãK!PPáûí @pgM,ÕMB á@|g!@ÉÿÿpÔ ++ð0”åà”åàŽâ ”åàNàY)ÍxŸàCâ à„å@m +Qé|!Šsx¨~A” ++ðàžçÿ0âSã^i“…;ôïx"0xw_SãHX$/!X @2DBª4!0ƒØjS 0“åÅ1ƒLÛ1 ‚¿º“ ’åàƒç¹ðiKy/@Ö±ÖC@šå¨Üñ õÔÐÑ šð ! ++–  !0láª! <. «zc0„å ^ Jö L /ý([D@.=ŒGDÜáD= }s\@#Á, Å*`à”åé¡?„å&ã¶=& ++=& @\p5& \hí´4 ±¯”´/®þy&íxŒ­£…þÿêJr^Y`˜` uþ´ZîÐÒèÊæàÂÆÊŠW4 ´'!$…ÜêÚÊäÒÆ~d"` ÀèBL8 zbUÃ<8 b@¸"ø#Šd  à &Œ^ZèÂÒØÓ²G¡U“±U| “åžçM`ÍM.‘ªITª d)d'Å] „ „AàŽâ 21 áÊ1jO á0ý]K0šåí@µeH²"þ 4£“ V Hæ1„Ûåáo  ©/!õ…iHÞˆ.¥@‰bÉ@å@N2 M6"ÚDà8Rd8ë. ++€PÏ)!X0P êdEZ7D8•“R âdÔ&8?,P) ’´€HBÔ8´/6€`Î)`âêÒè Ll.hb <ɦfòb ++xõ@ ØÒæè f ÊâêÂج\æfj( ~5(Y„  ½ @˜VŸd½ß¢î ©D>cÀ ?—åL/õ[s?PS¦/=¤-+ ˜.x/µ¤-_.)¤-¥/žd? á«„.Ø.hÿSaÁñ*¢B€ , *æÊØÊÆèˆçQÂèÆÐZ·'Å MÇ ++Yà—åÙUÕÑ0LŠá7ö2@—» ï=01™…64 4 <$!%)-15OÐ%=qÿàâ^¾9t˜=´AEIQM8$Uè½.y<M5:‚‡‡0:qh+ `jHlnpPr8ÀV®`:ÄÞðtƒÑÔ ++“v8Ð@R`P í0@8xzð|8 vÌèòàÊZT~2˜@ÄÂæÊ2¦@ÌêÜÆ’1%h.§€ß` `‚ `sLÂäÆÐss"R¤¾ c5"\M—A{ I´´M,!0Ї¸Ù4 ±¯<îŠ|È» ÈQžå@žXlàä}/!ä"à°1æÿÿ£z¼.m¼SÐÿÿ ++ÓÀ_ ©v ¤ŸPÿÿêÃrd^Ãdš  ++w Xj‚w èá#‚ƒ 841_„4P j„†`#Y „`#¡ ‚†  Šøò X›o~Ð  zP›@ áð  , Š"  D D1 à‘  _å ‘hl0 9 0“z $)1j*µ9ÙÊéÊ‘ÊŠ& 7’ª `ÌäÊæÐŒÊ £CÆÞÜÈŽÆQ4† ++ø¿ }ŒC‚†‚6NÀ†É`ˆXÒZ$Ô/„Š / gò$ & ˜"ç˜_Ø ++˜b Œšc'8J /«J A‰zÎ ++?  ]à)z¯'Àš E<VBTã‘n8uRŠå à”ªvßð¾²@”åàâ^ez‹0”å ”åòÌô/,o ,oüyàŠå`Šq *ü¨2 2*)2”r ó€Pqâ”jò²ò…²|¶?Sãe”'XS'ˆÕzÕz/`!+"˜0ð˜ÞA  ++¸q.õ ’ (í¸¡bƒNNY :N%&0CN.NN¼2†lfìÿÿêPT> ++LLY“($©p€/u€_àŠå€ €Ä«” €"?€"=€ì *\€€/€ /€U~ˆ ™”€0P/ñ€0/)€³€ E ^ãXÓ(P<ŸÊ ""òG HàAƒ^,*àN,e0†â ƒ, Œ†!˜$õ%/9huC‘õ$Éõ3  `)¸s$/a ü^?ÙxÄXs¤ ++Z$*9 ++D`/øþ$C/Ýþ$ø ++ ++#ð.°þ$„"#47u*M Xw+/ýT´@/LýÂIÁ4ôvvýÿꢂÿ ++` ++ÆÂÈä@&TÃØ3ú¾ ü ¡,0¥, ꬦÙÕŒ üÂPüÂR ¨ ÆÞ KN ct2Ž]ùÂ_tV úŠ¨! ã QBŠ× ;P ++Ø(Ð /È°?Œ¨4Ž››0@©CH (@ T@ÚÞäÊ7/@J*#:Jh¡ñ^k&'Êþ(Fu/)Š S-²Š5 /2 .$/šA(#”Zó%€S2Š³ÁQŠ8"l%"ÖA L¸UI& ++8‡G(NÉ¥,pîÁ ÚŽ¦€2¯¸ÊQ Rå›Q’%ƒúL0 ++ìÞÒÈ X ++0C/‚b8B”1.p( w%X Š–Ð/: @X ++˜@!˜V0P"šŒK§œX¢š ++ í J(6`˜B0KÕF B ®  8Ý&I^ÞÄÔ9F€JÄw\hv¦<0 ãè]T>Ä ++ X 5,0º+Zƒå@ƒpâ(À*æ(e ++tB†å@5ì *qp á0‡¸þ à‡å ‡åà ãà‡åôª Dî2,5œc1/Ø}‚|ð"Ò PÆæRæ¾ÎÊè¾äÊØÞÆ”ò HÌÞäÊÒÎÜZÊÜèäò•žH¶ž  ¢ àa %"]ð à‰å4€‰å(P‰å ‰å0—å…°4€™å(P™å ™% á© ÑqRžp`0( , 5«¾¨þG( —†¤ 𢔔$`á áNáÚ&^z#A¨0QùQ¼¤¢2%@⡦ ßp ·D'!àqyB ©„º‹)`Š|Q 20Ž‡- Ž/r±°U‹åp‹å ‹0a0À0ŒåpŒå Œ=Pµ- ƒ\@H7 H7- „`.9 Ì9! €,(,õp[U! ô °†åÀ†å0†å@†å†å#†å¨ ™ ¶Å0 eËÇ6©˜‡u[/Ö”çHÝH4[Ë:44|[¹:444. p<[¥:<<<<‘”Opƒå ˜€dpäI 0ohmp€å €0^„M„(ˆA;:Ýh>0O`ŽåÔ[): 4 4 484 ;#p„<„N„Ü1à„¨ñà„å0„å„å#„å'°„å+À„œ1/à„p/3àA'âäv*_4ÿ/áо„O<ÿ/á0H›¬Š˜y¥¦ T@.¬ª˜|ï2’Ýy¸ol ,_8 ’ô © È,œ >“0- ‹TM Èc 0†åÄŸ@†å†å°Àí(Ý(Í»ªPš}ïùÿê à&œÿÜ‘"å ++‘QÒ ++ ++ï*OŠå Á/:i ù!C Ó#DZlp»$^(!Ÿ*ú(&@&°HÀ’å ´À­*! ­¸. Àµö ++4ä ++ @L ++Òˆ ++ pˆ ++<¾” 0” 0” @. À<ªœ 0œ 0œ @<– À … ÀhFt˜Ï@‹å p‹åÀ‹å\ü@€å À€å< O =à `à `à [+:$4$4$       ÌUƒ„å0„å# R„å/ÀH x7 à μ ª¨˜…¼t¼cO;'( ( ÿålŸàâ^ãh^ ¨N¤=˜ +h ú¥ •ˆ•6ï°„åÀ„å„åPî˜Þ˜Î¼«À›ÀP^ãùQ# 0¼¥à’å!àNâžtDÿD€>ààù·$:§’ƒF <#àã‰8/!i# Hàã\ Ñ) /½T @æÿÿ ++ ¬ _² ++Pð YL T—ø …h @4sÉ ,c@|S|B| 0| | (Sp ‚£â0†å†åÀ†å@t'ŒéŒÙÌÉ·¦Ì–̆b´å´Ÿÿàâ>^ãá´פ Åœ ³Äd¢Ì dTdô 4md ˜[0ÌP- „8Hô 6ˆ &  | PC†åy(1°†H1à†ÿ#à†å'@†å+À†å/0†å3hãÓðñžŒY\imYF4"¤&^¤n^ãZ¤/P¤/>°/,t4/D/Dö  p <âp Ñœ0œ0œÔ[¿:(4(4(Ô­[œ:,d,d,˜[Š:04040˜xœ g(V( ia4È4È4ü2   ,"àdØؽ+ è1#†$1'à†øq+à†å/† 13à†tñ7à†å;°†å?À†åC@†ÀoGà†åK0×ãN µ£’o]L:;€ ñNFßÍ»Ÿ©þÿêRãV LÌ<0Ð|*œ$ à‹(ÀÄ | Ì0l Ð/ Œ@˜@°Ä@”@ ++ Û<¶¢Ø 8|~| 8rÐ d ++(Q” ++ .À4? . À,., ,ìh ++¼Àì Ý˺¨x—Ø--<š< ˆw<f< Tx 0¨ .0Œ8t8[°|/#@88 ˜8¥“¬‚¬q_¬”¼@80‡Ø2ÀØ2 ha\Ø2.ƒd .ø $T ++/ „d'0d€$ ++ T$Ø2. ||$‡uh}$q$aP€?€ /À‹ H  9 ø ©Hø4ˆ<4 dÃeœ!?©7€.õˆ€õÿêú’`@Ê ++aëÊW58ËQ !bÂ;æhB¨ ð ÆÂä<kq‰tgq%+q¢C1pšåY Ÿ_czB¦I=eú¨ rª¥È¥ ¥aª¥²°  àè À䬵Y­÷ìE.ÕdSî.¬9BS¨B¬oA¸ŒhH® ++X^@’ò°P² 7´ ++X¶@yÜ;° ++ do°¸ Ø u¸x=éûä? —Õù/uÕùè&0¶gç@à ¶néQÚàêèÊB¹ÐP& `aq^aä Ð. Ç0œM.uÇ0 @KR@ºRÝÚ[13Rá5»x0^YfO… ÀKõ€50‡ëq¶s4S ˜€ÿ/ ãµ w…/—åc »dç«$/ /áì3U¢ /V5h#ÈpH ¼H(B|Œ|6Æ ¤c¸?D *6ÉQÎÊÜÊä”@á@üæÈ ++HÞÞà¿ê{綹CH¦D5¸(÷º Ü ++îäÒèFF[ù/—åøJyJçJbr ++X¶G ++ºû¼¶à ++àäÒÜè¶{L¶¼¶ZPÀ úw„®³Å 3’A ” g $ é?‘ò*½ò xŒ n0/9n| |0µ|$|0/1|#|0­|$|0/)|#|0¥|$#|0/!|  ++Ë·† pðP ++RB (8(:¹I1¾HÏ €’À(ßpƒÂ ++ÂààØòÇ"ŠžæpÂ"‚–" z" r" j ++"b(Ä÷ÙÀ¶Æå4æ H ÚÊææÂÎÊ@üæuÎ!@¨_0ÈaLNL ++xK !p\/UœH– ÎÊÜæòÚ~= #‚g?1SãùÙ5žåÚ{=`xQ`m¿ûÌ x èÞàZØÊìÊØZ H~@i ++/z "Ödˆ2Ÿ ã ndÑdœ2 Ú$.!PÀ˜# @V’ VSÄÞêÜÈ.i 89jbÑÒ|MZÌñ…ά O@ H©!_—§d -a ++!à—¸{!%™qß 1 ++’â8uJÎ âЧð(æòæèÊÚZàäÞàÊäèÔí/æ踸aиÒ¶qæòÚÄÞØÍ­­aÒ­ÔíBNÁª9å1å _Þ%yk_ÞåÏ©Èm†ªZÖA¦x‰YâÔ‰DÖñ  óaÖóÚä?ØÞw7¶LÚLÞ– ?ÜE‡Þ¯â¯à>‡â¯hä ¸>>ÿÿÿÿ |'|0|$+|0/|#/|0•|$3|0/.Wp./h/ä/©(Dä(þ /1,0”1ž2¢383š"R ‰"J ‰"B ++‰#:hŠ)d¸L!/ˆ|#X77XÏ ++vЄ®à á@ÎRz[ìr ++FÈê ~€"  ¥#[ àÎã0àãSÂtªQª Ë Žâ)|TP!E/ÙP!Ïv 0âÜ[ ìj iÔUWÊì\ î­ îO ++ð­ ðòò­ òëhô à­ /õ­ ÿÿÿ–A 1HA lA ôA ô?"‚>9 ôË8 ôË7 ôË7 ô›Ëh¡­­B/.á­ö­/.á­µ?Ìð¯ö¯ø¯ø¯ú¯ú¯ü¯ü¯þ¯ÿÿÿün¯þ¯þ¯þ¯þ¯þ¯þ¯þ›¯\ rد4¯ ¯\ ¯·@Bá áŸÏàƒà àÞå á·Y/á·Í·ò·_"ÄòèʹFÚ¹/¹Œ&¹/¹Ž&¹/¹Ž&¹/¹ÿÿÿüp¹/¹/¹/¹/¹/¹/¹p¹,RpHŠ!àÞ´®~‹ˆòj8ÆæìntäÊÆÞäÈZ©Šã»Z)&æ+/XÕ*(ˆý ++ý¹Š«*@¯u`žå@„âOûÿÿ[ª!¢ ++ è  •¼fÑ•ÑŠ%¼*êÉrŠ%Eò ++à(ræ ÂÆÆÊææÒÄØÊ~ +à ÿp Z 2žåÁ ++øD|(ï à– R,ºtC®;t  ã¢ó aË DĈ–X_êÿÿ ++úûƒ" B™ T 4œ  @Ž4UÒÌÒÊä¦ `%0¢(zX ÚêèÂ%Dè ++0-$- --Ç!—56ËE-äE( /!( ½Ï(x24ÐËU¢0 ˆ¯VZr, ³F°P/'*''*\ .-* %½PlDÒ0=’*üöœ-* _ äèÈ{x* .´ˆ7jOD:aÏN[(-[+[4[S%ª[/:×/sy“/ 0ã0 ÓÆÓ¥Ó§¾˜ðOZäa"Þä½&pÃ- öá9gb ++(ÒPpB¨²¦(L æÊèBç~7Ot;a;(@;>;G;8–c[<Ù[<e¾X-Ã;Û'=°*Z4³‡G„Ö_…‡sjK ++?P2v5èÞäÀ<…" * ƒüæ@Òæ@ÒÚš™/0¨Y ¨û É­ É ¯"É"¯h$ °É¯Þ.ÿÿÿÿÿÿ |7|0Z/Xx±r±$Õ ±$±ü±,&²í°˜ º$C/#b\Y/,$%"RøX/,$:"B ++W/-$:#2r:È(Æ&“ (6˜àLiÑé87ã$¿I.*Ò& „•4àãa »¾b¶ |«þa ñ `—åàŽàj>_­ ù  ÓQËs¿/A°µÇ?UÚÜXFŽå/oæèäÒÜÎ} A ÈV(¬Hš4*º *\ ,º ,ƒ.º .ƒ0ƒÿÿÿûÀÑ 0Ñ 0Ñ 0‚0‚0‚0‚0š:'b12tCo ++êÜÄÞðlC_ÞlCD'2g4Ô4Ô6Ô6Ô8Ô8¯<ÛèÔÖÔÿÿÿX1@X³P/>@@lBB¯hD  ++ ð·ÿÿžŸ18ŸОDžDˆDˆDˆžDp‡P ++Á0BF %° 0ÓŸ‡*%—ŠåŠå µ"J&%Q; ++—Î? ãn$àž"S Jâ3Ï1D àsÆ àå àŽâq áÀNâ0žåàNà tP| û·’4“qà’ûS@Î4çù±= ¬C3·0p á¸kSà‡åm¢ûóq¢üàýÂô¹'`*<¡<i®7-¤ýÁ†ÈŒ(Ý=pšŒ ™±Æÿÿêà’å(àŠ l «*k¨¡*$àTu(,GС‚Šå0 ã@4@àƒáH›A S`pª8AUªùÂ_@Šå, "üÕ",,>ÈC0šå‡Í/XA°€àŽâ žçRË1 šË@à ”å !‹Y)œŒ0œØküIœœžÊ¹› ”åDü©`ø`ÈA[r0kVbPãxí´@e ++`/h.hl"hb ++(àTÀàžç 0žå Câ)$_žç”ɦ ƒ0(d‚â0ƒà/÷Ýá /@\øÙÄÄ<Cãšiši°–i ++\9$ñ*èÝáp7´˜ü ¥lŒQeo 4¸$¸ ,À*i íf<Ð èO÷”X©,ãÒ¤lž’ÍD Šå¹¸¤™O  á¤>XàOx¼Åü1€XâWÓD/íD…Èî*H/5ˆ UÅþÿ ++¾ŽãÒ ++$Ž áà$r±É Nâ †â0‚çܦìˆ/¦þãÒhh hhD&  ãͲÎ,ìˆ …lpu’åà„³0^o[ðºÀNା á °Œà˱ á ± á°‹àÀ€â Àœç`œåWD’ ++Ý Ù3QàKâì ‹â0" ÃüPŠå 1«!0Š¬@,°ŠåĈ4¨ ’?Ý44¨á šåpšåšå š„È,°šå0`šåÜLtÀŠåøýÿê$õ Oòýÿêì *Q °¶°ù¯ýÿêZšd&HæàØÒè€ ðXúF¸˜HÆÞÈ°ÓöÌÞ0ÎäpplÂÊnÒêîhîèrÌèhìðòÚZdPZ 0‚5ò ++ ++æäÆ a ++æÊðàäQÌäÊÊ2ØÒì"AäàÒæ0* LÁ¯ÀH øBZÉÀHßÖk!0 ž 1žm 1àŽŠb¿Õ©+º&ìÁ}‡/lî!/ ár¬.r¬YàÙ E> .鿸1ŽR IJ¸ ™~o.4I& Ö^ àå 4Ø ¿..U¸ê´L•Né´DDpånÍ”Y–2 4nÍ=zà¼nÍ×.EðƒA|é# 0 \<5 ½L:Áœ/áDQVÿÿ ++S"Í„ò’ÞÈc¥@XÂæÐ#³¡š Ø (b @ìÂäÒp& ^ åpöx ,`±P± Ny*w-‹0/| |Zw /„.wS †å.w¶•Ny MíNy .wÊ.w¹‰©±™u‰îäu/Z' q;QææÒÎÜ´(A d'5g 3eEg²il@ äÂî’eJ@¿'Íe ª ++ÚEª£ew ‹žÍe91º¨PÇe'JNŒ(F0LŽ?Í,ÍÍÍßã!ƒ+››O> ãÝ@Å0 ã¢ådîØq @ŒÔ@  8OšåÁE0ÚE" ++`©q+ë$5&êܾ@ ØFW2NU(P|f: ++&€€† füº ++ÑO ŠâšÑ¥ï Ä»O @„â]vm!¨/ù¨Ç7HºêhAv( ++ ˜)G ++PChR О3G4ÿÿÿ£šÀ/Ú/÷Ý%Ï3|Y¡|ŽB\Ž<ŽRä1#ŠÀvR(l œR¨(›R28!Rð"b¿ ++8BT ®/" }"  öñTj Fx³|´\0 BT0 ÂÕ °ÖiV  Õ=Ö³A4ñ#âÊù Õ ÒçÎçÎ ßÃßÃ%Ù "šö¶ @:‚b(@ål3V€qÀMqHV±Ct"Zt<Û*,œÑû¿'h¨Ûx¿C¢Z‰`~P ZZ*@F` ¬Vn"Z|åPš!ߪ ð :äÊÂØZ„ 3b ŠåÀeb|.°a¥[m:E¬E¬=Ž4[[:44Iž ýˆIŸ4 4"À. 0p5‰Ÿp#UŸS 0œåÑ‹ äaŸ p4üaŸ °¨ê)Ÿ À. <Ö]‘ ä%ÅÿOÀ‚å ´‘Ÿ°‘Ÿ°‘Ÿè¢M ++dž‡åÀ‡å ‡ùºõ‘¥u¤LL/u¤,4,4,4 u¤1 àœ”í= hI- h0h0P7™Ÿ`™Ÿ`™Ÿ-ŽmŸ%$'!À„¸¥ɯ ɯɯɯqŸÙ¯#½¯Ó'à„å+0„å/ „å(Õ¯b7p„å;°°1?à„0qCà„åG„Ô1Kà„¨/Oà'ÔC°/ž(ŒzhEW(E.u¤#ý ëÖ/Äþž+æ?L¢¨(#h¤X/¤\Î0 ½û'êä„o­Ú)L L'KšÀ1W\£O¬@ ÌäÂÚÊZ„‰@0^›ù! ++àÃ> æ©Jœÿ$ìÞ1¢ØCâ^×€×)<ÅIÓ! â+Z+ZTªÚb1@žç©H ‰~Òb&ÀÎY0¨o@ àÞæ¡f+=+`+= +=3ã4J€Ê ã¹ã¤/"[3Ä O ØJi+ÝayÀIÒ•ätK> ã˧L+= +=0²B„„ b &ÄEàÞæÒb†áI3pôÜ' ++0 WšfPhö5_ØÒÜÖõ5õ5ahðjQ0 ++§TUKU7U3UDªUO QuÙQÓQÌQ=Q¶Qª¹NQ,Qk@dTG’jß×x ø® ÊìÂ'21.S±/q±[PrBví2 |šVæ9êÁH"0¸"ܹéËf ‡å t)¬$qÓ ‘­.AAL´/Á$Á epÀúBt )¨0!bî º5)gÉ* çæA"[A"H ++C 2NÎh“â0j6BäÕ¡…ÚBï ô„U&@:#"à†Î¶Ö ¶Ö {@à ã!«`Ä @ãðRhS㶪 &šÜ[TI˜ü*@0HLpåBSt <8A+<xÖÓ <’Ù —/zò× —kó<fm¯ àÊÚ4l TîÙ$ 2Ø1à !£ ++“5À p¬ݬ° ÿ°óàƒåàƒâ àƒå ƒ@ƒ(/ë| „„Ô¨ü ‚â¨ü3‚„;‚åÔÀžÙ& ’Ù.0„©i ¸ìL#— +¸$`"1ä"-@š¬&0°@°¡š l` „âhh@à„âh30„P/„å¡š éÓå«3âºÝ=à”Þ‡ !”HîNÅ)ä%Ì.QVÞ<<l&@hEžl ++d LN@ á}ÈlT½0è?å»<bP¤9(%Œú.åþ¿•!Ð|  | ++@OƒåÿÑ* Ø.¥þ.“þìì-ì˜oàŠå `’à ’à/e#<.¡X(à̲ô Òà0þá \ XJKnµÿÿ ++ýý`åšÛ ºK ,] $ áÜ/ºýJK/¥ ¥¨"žý”(Hˆ0Ý.X(  êÜ„ ….ô/Q ++¬\Àtýÿ ++qýÿê~D !ŸØðxJ`JbJdJfJhJjJlJnŠÛQ ²5äÊÌÿÚ"8îõSlEîðH ++âêÞèÊXžˆnÒÈpæÊèZÆÂäBJõñpÊ LXønp Lpr"ÒÈÊÜè?aôZæòÜèÂðXØÊ膠ØÊè ++p %˜áˆC ‚ ++ù8 ++ÂØÒÂæ˜ ++ÄÊÎÒÜäŽ 7øPnˆr8³B–¢ZÊääÞä òn L @ÆÂÜÜÞè@æÊè@ÜÞÜZï$%ÊÈí$ L àh •,P¤#Ý@ÈÚ-¡ , ±, 7ÝW JüÈ9Ý¡RêE8M5P`~š!XÏQ'bt€1(hjP)*tÏ$D¬šp$vQ—eúx(¡z?`² Ž.úú ú Õ7?Nà% ÕOpšåæ«’;Gz|ö¯À æÞêäÆøŽ7| NRÊ ¹F[³~ èÄ J(àÂV+›ôfsä%ð©Hê3ÈÄž4$ +a+aÁ@ž4;ýPtà—å žå]pIÄññ0Xž4à.Yظ®¾ $ ðºÆFÆêääÊÜèZØÞÆ ›æþ€€ª~ˆƒHA HÊ~A ë€ÏA€­‚ÏA‚¯„ÏA„¯h† &'€1*/i1*ÿÿÿ¢x^ÿÿË |;|0/ |#?|0…|$C|0/|#G|0}|$K|0ù|$O|0/u —HW¨ // ++/†˜H†W,ý.,ˆþ.,ÿ.†)/#bAŠYaŒZaW ++[a,Ž\a$\a,Ô\aØ!*JÚK%#";æ"! è/"# ØI"% ++ ++ØI#'Ë-BM PÕ-ð”ÆÐÞÆÞØÂèÊÆÐÒàëlc˜’‰àC.©n jX#€(%0) m,Ù6)¬oðbFèB– ø> © j@ãG —å‡Ô¢[BD‰ ++ÚT°žç :Àžçé\„«A&[Í@€â‚è`9O ›åÀ"HP ++ Ò ºóp†å †å †åÀ†‹E †åï  î?…0 )º&À“KI8:0àƒâ¼0 Š-á;CÓD S³ÿÿê¨n@ÃE1ÃE`` áÀDUšå0š[JP"`WÞ"  89t>P"`WÞ  ¸oƒâ0†à­;«E( á• š<_ñÿÿêàKF 2+ª+," 0Ø/Üú™(ýš00Ø”^X$R=Põþ Ì  õ /FƒÃEHà áÃE#’†âçøÌ$áUüî4*¡fCüø `[#Ðð¼ÐPdnCXKšåÖŒ0òT`*ª”œ/ ÊN` VÊð9®`ØêÊ@ÌÞ³yÀ@Äêè@Òè@îÂæ@½`ÒÜ@ØàÚxòȸB¦ ˆ Îi O"0ò@8 ++»tŦÂ@gCkBy<T%* ¨L½xÚ#Ù<«¢1—G÷B mj8ÅûB• Nš¶œ@ —å:)wE÷?“0QãPl0µ>âí>0¼!“„"àQˆ ¸}÷ ¸NˆŸ2P¦¶P/@Ø<×Dà_@šå—!. ýS.`ðº”Û ¬4PPQãa> ++p½Dã^\€ âRãM!0“%J¤Aõøä³ 8  ,/ L\/ù3F\/ š|Î ´€¨¤ /i¤"ß”$TPâ _0h ++Ð!!/ !0!0À áyØ¢0áÀ`I  *uõ À£FùÄM¸P_Œà@ O‹å  5Ü-õ"ÔþÅ0.EÅô0šå³þÿê>¢B–HV1ð$ÆÊÈÞôÈÌlêâèÚÆÔÔèZd4-ž!\1h &ÖàäÞÆÊÈêäHGæO@€Xâ9¼0àå»Þ>8 áT//T`) 0TSD5à“40‡w ¼ Sê†å p†å 0†å¼ .ãÞS-çSv4¼C¡ö šå´ÿÿꚘÐBœ  À Q ‡*&j‡* £K^=Ke ++Ø€% ++ÀhŽâžçÓ ) ++ ±/¡£*("ë*Wj´Œð¢»ÇJ ÇJ‹"Û! Ì]~z‡"¹… ožç·ÿ“"/±¢¬/›ÿ“"#ëJ“"%/]“"óqÿÿ ++nÿÿêBšV €Z<X– pî Yzœ– W Bœ– —5(¸F 2o3¶ÌÞ@æèäêÆèêä±håžpØ“&h à[U  d@ ++GàÂÒäE ++ñÊÈ@ÊÜìÒäÞÜÚÊÜèXK ++9os°¢ã|Z#>|¢Œ† 2ùí< ~|W1,æ/qæ M& j ++]>Bú¤~#X!H!ha ì##— B¦˜|°2@½±R¢¦ùŸ°Ò– 7 ++ï JsC`“ÿP€B¨ª0ø´Pbrƒ  á&Rã® × ¢  ¢  ++¢ Za0Câ 4/Bâ Žž ?@ áuìa A!Daƒâ ’š2ý0Ž2àà’å0ƒâ0„ààbEb˜,õ­X3/mŒÌ’A0rœr!¨Ëˆ4Rò¨ éÖ®rê– ++0 ’uˆBª0ð$P`8ò3XBB ++èg #Ò$° t%ºF ++^I 8Á»¼/P¦:h9†& µ 9=ÄOø®Ð4s6vÛ&5°(§†´ ø²º¯&vožå!Nâ&%u%1#‚&G´Ì&¶Þ#¶€"¸Þ#¸ºÞ#ºœuO¼ Nÿÿÿ²Þ#Ù1Xt¼¼¼•v¼l¼l¼N¼¼¼ÆˆÆÍvGz ++HÍXm ++? @ž;jì¾APâ ©i¼{%¾B @ PÍ>ÊY'êܪ íàžåA áñrñŠ F€ÀC)N05àžü": žåhÓRÆA ž/9 z0" €1éAáP‚IhIerÂ8| ++ÈùËF@Äòa5òZò`T0òýd0F%5id0­0îd00d0 íd0d0údo“åà“\0P\00ê.}к&ÿO©ÒÒTÆD0sP7ȨD0SÈ\87¨?ææÌ0 \lHLÖÌ ˜ ++äÊØÞÆx,„$œ a“1“a“a,È•)±PÜÐÕŠ> Ò¯•:zKÃÝ’Îß Îß Ðß Ðß Òß Òß Ô¿ÿÿÿÿÿÿj/ÔSÔSÔx]"‚,ÖUØVÔ¬-VÔ‡-#bBÚXBÔ(: ++ \Ô¿/Ô¿/Ô¿%Ô¿žk¦ ‡À ÒÜàêè?hŒÏ§  § DÿD€ààëoWhâ|OÞêè}}}(—p ÄÒÜÂäò}0 F ++U’UÂ$/ÊÈUU1Ü(RÐÂÜÈØÊä ˆ|5Ü ÑRÞy 2¨ ÔXZÄêÌÌ°.ÚÚ(Úè è$Ï Î*Å♤A ++ ív¢Þ0$C8  ÜÜœ ã ž:KR—å0žrtàCà àNâz O@Nâu &ZËCX ¿˜À$ÀÀÀ9¡Ñ—å “åà“åàBÀvP“È $$?@ŽàÐ ·Yà?ÒÜœ"󜜜[àœ?ÒÜ› › ++_0žå››?ÒÜš!¿š ++W “åš š$$šäà?âÚ!Úaä2 棣%£aæ£èöèöêöê¯ìöìöhî $%ˆöJ³DÿÿÿÿÿÿÿÿðÞ1 1%vÞîÞ,2Þ.ÞîÕ• ä\ êN*ê,ðêòæôçöèøèúFDîÆFDîò7Dîj6Dîj6Dîj7Dî›!DAE/h#`üÆ ü þÆ þ¼ / Æ Ž' ¯H”ÿÿÿq êÜléƒ/ ƒ, Y"‚ ++- Y" r/ S”ªÛAQhB ö@ ÖÊò/jõz& x! ¨?Ðè¤ ¤a¤ ++¤OÜÊðËç|' ++¦ üŒ& ü/ üŽ' MüÂ/  öÿÿÿÿx/ g g , ÈR¸;ÿÿÿÿ ¦—]>)Â(Wø1bâ$xø>ø`>zÊ, >>Jö>>Jö>+˜ö> "Z+˜/ @+˜‚ð " X\\\ ¥– ++/˜O @ »–K > ä"Jï/xìJ8ç º)Fº? B³Î? DžFžJžÿ? H›J›SL›ÿÿôæ0‡ ++ø0¸1L1N1ÿ¼$Ü&êÜPl#/ 4ÌNÌPÌPÁTÌæ? R¶T¶V¶ÿÿÿÿÿrz¶V¶V¶V¶V¶V¶V¶V¶V¶Z¶‰M, X±Z±V±Vš±8?.€±'\±ð\±Mè²7 ^2pøD˜Ú &ŽU},žnql‚pà’åàâÒ h¯n w¢@d*j-yàåpž}-4 q Uð? pž .© d¦ ö—/ ž6ìaªª rñkñB,J¡ ã ã8ã€ã(0$`¥j‡~Y Ú ^RQxB bÎÐ õPõ°^1 þ¹ÕÊ\¿ÉÖw É?ð1¡9¡º¡³ûûœr!œ`‰! :b ++0D]/ dœdœfœþfœ_h ø¸ÿÿÿÿ.éjZ | h h h  h  hì¸, h  h j ‰. jë¸N h ¨k% h… 5.Ê ++jE(/ lðl¶ nú«Ä{=}ÊrDc ++’† a’,¡’l’8/m’’ ’J ñ„ŽF‡F?&ÒY;!H…{ú n ++-p›ÐcÆ3—!Ð GÊj} ;#C £ Ð $ Ð "Úe"à T¿  ¿ %Hß ;p ++(¸r° ràt° þt° Ox Bÿÿÿ64 9/©4 BœRBìR/ x4 x4 xx, x 4 xBx z ‰$ z Ô ¿Bxp­Ä(… Ï-)| ð| ~Ï-ÿ*~Ï-S¶§)ˆ‹j8 a¾N¾›-IÏ- ?a*+é 44a*%“»Ï-)/à”ï,ù8*8»,Æ*CàžåØ*¹»,/¥ Ÿ¦˜y*»,.pP ++},]b € ‚ÀˆqˆgR},M}, C/},8)},A±>,,/ ,L­,Â,Ö,µ­,½ ™ ’­, /ˆ4,M’ ‚,„Q¤ª/ †Qþ†Qˆ,ÿÿÿÿÿr~IˆIˆIˆ,ˆ,ˆ,ˆ,ˆ,ˆsŠs‰0sŠ,ˆ,ˆš,8&ø\)ŒðŒŽ˜+# ¶]<­PÝÖÕ…ÊMr ŽY à@à qÏá‰eá‰ëyÏ ++' V\’% ’% ”% ¸Ê0­óu 4¤Ü¢Ô¢«à€â à€å0€W€¦ z‰Å Ñ Ñ]¢?28!1  ++á PWº ”È–@ þ–@ š“^ÿÿÿÿy˜H šH šH š‘š‘š‘š‘^š‘^š±ñ(0 ªÌêÜÆÆ­û()œc ðœb ++ž¯@ ÂÈÈäÊææ¬íš‘RâàãQ(*Œð0A á8¬í9š ++ ++ŠBD0²í% žry   è½~Ò¡ ++žmžÅrwb8ò  Ÿ¢E ¢E ¤* ++þ¤* ++¨»&ÿÿÿÿy¦* ++¨* ++¨* ++<+ ++¨¿x, ++¨, ++¨J¬J‰ªJ¬½&¨½&¨r½&,&0õP`8ßjJõ!?( ++ 9Ú Y " ®P0PéÑÁ PÆæRÎÊÜÊ乨 ÐP@B b©F ¢œ œàçéщå4€‰å(P‰å ‰ûˆÈ°4€™å(P™å ™gá)%aR °pN2( Œ è¾Ð1¾ÞÄ9‘ŽPHB ²fc¹î×·“ µèª`D1 á@ìªOSD! áè%"D¡ ++7¿ `‚p÷_·èBc²Þo’Z ² ++ÈBÚ_%0<CªÂ ( HÆÞÚàêèÊŸ‹·#i#@0Tãcœ®m³ ѲAµ½n°—å p’¾,Ö´R°†å pÖ´W †å(Ú´¸ ÌÖÔÖPb" c/p-™¸a1$b•¶ ß³ûÍìa¸ƒ Pb iº³Tbžî<° . P ++ ¶5 ãˆ %#$)³% šÄcšvè`{$ XÒ{$Ë4cðªÈÂèÊ Üêèh~‘²8" ´Ce’¸  ++g ¶[šN7"g@X ++Û¸Š°S õBO!š¦_àå í%0÷JeÌ)"@½LF`Tá<ÊSºÙ¡þ XÕX1 0”¢@Ld‘ "âÙÎÝ` 0„âàăÒÚ v±*ïv±ÌúA-!žo¹D påî±¹¡pñ¡ 7º!@ŠD 4SœÿÿêDO¶ 4Âàšå àŽâ@Žà®ðâ„Á"²ÈúÝHÈ”wÈ/EÈOšåÎÝ…@öÚl@\ÿÿê,±°Á4 @OÿÿêϺå441ž7¼4PBÿÿêÌy û¾h1`àŽâRx 4F=4õ(7ã9À±? ++ ðá áàŽâàŽâàÎã0 ãŠgSSá&Å::¦ ‚â’ç0ÿ¼È*ÝüR´ È"0ë¼¼00ƒâZ×DXL/-LÚþ³K@ á^øPO ++$<${HvažåàBT "Îþ飽:Ôð 0å0ƒâ0Ãã@ƒà¼-b,ÿÿ ++02i&€¼|y ++“8-Ñóÿÿ0“åC1 áÖ’‚å.@˜Pªþÿêôzy`0^;€@šå@„à"@Ô/0œÉP"@à"0s• ; Dòþÿ†¬•N€0šå“缫{þÿêÀ5¼0à ápb@„àÝþ¸´ ø´°ÛH $$Ÿàâ^ã ¼PHþÿê@Vkf @„â¬þ€l/Y´éIG$ $ JŒ"%þH/ 4"þ.Á@zÈ ”V” ”/!”"óý”/U”U””f6^ãóH;ÅH/Û0šµ?àNâȘ>ȘÎ40Œ `0SáµPtPã³!/0ààã„Ê"®Èú î 0*Q ü\j?!àŠþôäà :Ý X"ýÄ/­ Ȧ¶ °"ý*å h8¬î 2é4‚4ƒ ++ 4 È0‡@Šå$ Šâ4u4ƒM ++$4$" @7ÂP€0ƒâÌC0ƒà„0ƒà@ƒà€åà ãd"”h8 Sܪ0Â_šå `ÌåÌS H2àtäP+5 Ù0@X%âÎÀžÀGÁ l'l*…  0,ײ ø KÁ<. ð@šå{ýÿê€@ ãyýÿêàH¸* \$@?ÿÿ ++¤ÌÌ  0¤ Ü"æüØ .‰ 4  ´  "Ëü/õ  7/A  *ýð&”ð“ÿàâ>^ã©ða áFa áTá„…5€à„41 àžÿ"m½3†æT< <R0Îãàîå ®æC0šåT"1 0žî¾"J—°$`A ++ä@ ã$Væ(‚](#(“È1$@šKÉÞƒÇaàâ(àŠ¬ Æ ¨ò ++þù1àŽ<Ì8ž˜7/±0 ŽàÉ p((,¨!š4°Wàå ˆˆ¸+¨< áä"<üä*1äœ@0ŽàŒ@ àŽâ¢`|P D@“ç}}ÆOA áÒ8¼8ºãÄ#áœ,œ’ù,,œPK,@ààÄ1 ƒxp8 p[ ip( 8ã"lÿ@à¼/Á¼"Íû¼/í¼H6~Œšä^ EÜÊD/$@H LHà”}8€H ÕH¨ ++¦sÿÿ ++&ÿÿêÌL_!`R@šå(dDeD@"êþq7Ð Œ@_ûÿê( +¥pT4"Rûä/ÙôôªEûÿêÌ L|à¬ðø@¢ûÿê<¸"¨þ¸¦šë ð¸Ô ++NŠå‹þ¨Ä…vT *Žd>ò‰ì "ûì / ¼XuX¢¡É<‰|"Ûú,/µ¨´ä¤=¨„ /1¨"±ú° /]° !¸"¤ú¸/‘¸%¸"—ú¸.Å@ ++ ¬¼ óúÏ P¡$Œ¬|DLSN^ã@Ô &à4D 0 ãøñ¶D>˜C1 á ¬c8.•D €0 œ Cᢨ D"Rú„.ÙP ++ø"µúÇ€Ï +Dê{àø$/$1^^ü$"*úl.yl ø/­ø 4PúÿêLŒ *púÐÐnè@PAM ãf4ó2|S`@ ãWdT/.âðÈ@ÎãNúÿê @ ãL,á,C$@ ;D2Ð q÷ùÿê “ßÒè^B} ƒâà‚,€b ‹å @“„øØôXì *Áì.™ù „’ùÿêÒ ++vÉ"¬øB1Ph­É# 8O"šàh [r ¸x7Sˆ˜dÉ·ª ¸8 ¬î!3MZÀ é ++ Â$HÜêØØØ!€\ý %ºG¸iA¥&ØÜHœÜ‡|u/š ¸Xʃ8 ÄHÒÒxZØÊÜÎèÐÊA'Øù5?àà º<ÄÒèîÒæÅ\øÒèÐÚÊèÒÆZæÐÒÌèZäÒÎÐèXn ñDsX ºXB &°.µ&`ñï | `æ^ Iâ"€! ++˜|³@Ñ@yÈ  Æ"àÞäèZv« $1È$$ 7®%m÷³è|ÐÈÀˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜ˆ€xph`PH( øðèàØÐÈÀ¸°¨ ˜ L¸–AW&]Ryêô ¼ &ÚÒææÒÜÎ@ÆÂæ¤Ú¿!FÈ ++hß' ++ÐÍgL/ ++1"!`´" R¢8“!3ˆ¶ÌEÍQ  ´Y(a2¼hG"U Ê(œ 1ÞæÒ-E"¿Á?À !{D4£ÐXU"f ++&W y+D@IÚD < )æ® q@šåŠ !XÞ*)¬øüþ !%)-159=AEIMQSUà†å¨\".`pDÈ: HTà ãæÞÂq0†â ƒHÑ `æš. ++0VP PB¯: B†å 0`ú¤1 †ÊS@†å0tÜ22á XJ ìþ F "@Ì, ú/ ã@ † M@¢?p1×Àþ 8Ú€þ<ô@]L"àÔ"@“ååÚÐ \*˜`˜Y<@* ² ++0šå ++( +¥(Zhˆ <á<d%ˆpL.-ˆ.='/î•ÛJŠ&1ÐÞ $ *ÉPš&.“þô$5nªK&0 0P:³hlnðp À :  ÌØÞÜêÚ ++3ÄÒÎ ++2äÂè ++SÊðÂÆ 6ÒÜç‘ ++æèÂÆÖ É X(—S< ¯<HRÃà ¿' e¸U‚à 0ƒ\¤\\Û\8o'O ++ ++$o'*› $ÂH½tžå à‘刴#{ë´ ,‘¹ oëfà~t/Ÿràd‚å 0‚åxt +¼7(½ Š” ûý?541à‘ËN1 à“*‡ A9?0“å#(ò#(  (@Ûýÿê^ç*µ$Œ&áÿ» õ@»Öè= žÆÍf;<Ï g”"´ý”p +q <àf;”œ…œ”„„„ À! ‹\TÇ«-d‡d€d y0Àd(*k@R$‹(Mè#ì€ Ì´/Gýðò@àP 4Þ€×@(l/¿Ð‹)V$]$ ) @Œ) ” "áüü. ü ¼/Øü O@ T ˆVˆ-ˆ$-ˆ,ˆ/%ˆvˆ¼ˆs+9s3c+Hø\s+&OÜ5Ü.%Ü&Ü€Ü5Ü+ÜÛ+ì˜ ++Û+êÛ+åÛ+µ$.I$ »+ `"çû`…<) 4Ú4¹4ÄÎ0é00Â0.0¯ä„9” pal¿,„ b„ 9ÈP¤,@,"@ì ++¯(A,_2 ++·!.ß*$ø7žå§+›!"vû— ID;,±.‰Ô (Ä‹ Å|¿ä ¨$—ä ` ôÔ ¬‰¬ßØ\ .Ý`·,xð/Þþ´#€´/Üþ/Õþ´#$"ÑúÄ/ÝÔ'*<&@ø=øKø€ <ü=ü* `c'0^á-ëÀHÜ@0ƒâ„ 0 "úX/å\Õ°0 .%@ßd Îd½dd<µh®hÞ&—.&ÄAá  «.Ö«.$/È$A$.¶ ÷.¡÷.¬E¬Œ/ ´aEOî„. ¨"\W/1W/W/W/o72+Ñ+7»-ÚW/W/ÂW/W/ W/0#àø(W/ ›3I?öv÷?åŸ-¸+}¬/)`"žù`+©`>÷W/m=œ[mùœLW/"0_,&àW/l[|ÙlO/´/1´1´/]´@8O/u ++Ô*­ÔÏG/Œ5 ñDŸ:£ÔpH /9HdSwÿÿ ++*G/¼'4 /…T63Šåë;ã;/;"îþÈ è "Èø$.è 0¼010 "³øW)TÁó.¿ ©/˜þH' H ¨ /‰þHÇ/œWp ++h QhB1D$ $ ¸.c6444 äHÔ¼¤Ã0·0IT0ƒŒ ++ TIÜp0"ó÷$.U $¼$¼'1¾L´ /Í ˆʤù¤#1¤"/q!¤¡¤.!¤!x•0Í0%œ/Œ÷ˆˆ¨/vÿô # ô t” /mÿô #¤NCMQGDM4Ü ++¹%CøÜ(Ä"$÷\.‘# è8 t/÷tåTՀIJü4°©,ig2eQ;1@Q ˜"¯ö˜.e%˜@£0•0 È/šö(Ú¸Èp4Ƹ¿¸,T¸O3P¸U *Aí¸U¸‡2¨o2/0‹to2  X*AíXœ2d/àÿ‹4 ‹4@1x Œ%1x„/`àxW %p*àÛ500%`= á  8 ܬ€NØ€!H $!Ä„ Ä`ÄáÄ+ĉáÄ{€)€ Ï9||p((  xdÙxø@øÿ 'à *½0( .ÚópoÓóÿênà;‡x: À ++0x8ð ¬p * Ó1ï;Ÿ ú À`Z9 tX2 Àç;Ò,&0-spB¤š:¨ 1 !f0h!‚`p# !HQ %R8ˆ”, ++@‡? ++°Ù?ø3Rù ++?9b sð ++ Âi< Aª¬1xC"³!CŠ !Cê EJª%€n<0ˆI/%(u<o< K¢q(q&r%`ˆ fIŸ^C†å¾ ëÀÿ^<9ÿ^ö †å †å @†å0†å†åp<[0 á,t*&> à†å0†å ° ++¸®0@g:rà„å„ñC ¾óêFåÓ3_Àº.°K^¬# /)¤ }ÖvG_5ÂH:p(B *1k æÂìÊÈZÕÔ8Zàäóýy0 «hH& ãûïk% WdOpšåæèaraˆ:@ næ nÐ B Î  -à ++TrÄ&@K"ÑK.ºúa"°x^` †å`µ!A ++àÍ.Bb3 á…"@Ë 9¢<9¢ kà<=¢½‚x1 —½5D(Ú`\\,ɇ\X1p¼c4Úí^Q n?Q R —åžbã × /­DL`` 7\Äa5e­5/3߸¬)5< “å, ,ƒ †å @†åÄbà†å00rxîxx fð^ 8_3X U(‘3Ny0H!BI5L-+L pl0lVl0/õþlä» l 1“Í1 DÍ1 à$`U&ˆa1qØþÿ ++ “]1@]1BÒþÿ ++&ÊL/ ++/aT± ÔÔ9 ãåÜíŒ.™þd"Ýÿl[@/M «ÿÿ ++}þÿê C@†å Sà†å/mþŒ Œý+  2à—t@ŒOx/ àå#-3è )pQ!_&PPC@†å djH o L/9 ++LLÞ(^ 0/ëý Ma¬ML TDIýÿê/ /Y " /¼S(ýÿêfM¬”M! ++¸ÝxuˆuQ 2 Îw@Ò ½Ø?Ô  / | l> ++ß ‚!ù>à—å à‚å p‚åà—å!—¶á åyyÑä c‚p ’B Ðøç »s5 —¨ ^â(y”Ïq’ŠB Î@ÂqB ++ ÐÂq € ++%HƒÒ&°ç# ++0Âê1 ÜÔ? ÔÉSÉjhÚ €ÉI}A¼0øôô†ô4†åÉô4†åV}`p ¥/µHu`SMD|@Ó@%:”¿ž¸Tq¢B ØA/ @S@jÖ  bÖ  ++Ø%€¸*@))²Hb Ú6MÜM! ++XÒB Þ  ++èR LÀ³L—# ¯€  ö 1„å„s¯à„åp„åìò¹šB à  ++ØÓ4ç,çozà.‹$Žâ—Op—å " ›LÈy7ÿ%“Ô“Íu²B ÞC`´àدw=ÙPB æ  ++`=E===,Z›P —åý_u ++’0†å †å _u ++ð&õÇ ++ ©y"€°_;ÿ/áÛü€*B â)È Q&Pã4ð+/åSn¼9ËhDáŒ}áŒòp p pp¯0„åp„å„ÇEÜr ++bp!A â…„hä  à25N-N–Œ? ‹$2ˆG‹/ þ‚'ÕhÓÌâêI äp.8—IB æ0`³aàB è— ´˜˜bè-o€B ìw ++Ùê7 Ÿbê7 ++ì½ð½Ùî½Œî½ ++𽸠# # ÚH?òú  ++à  ØÞÞàÄ\{èß"šåË ScºÃ - Ýà UBì”oVK5âÀ ×2+O ++ºpp• Z[-I…@ áÃ'> ++³kÛ ++$T N Û3 /á«»cVÍ øíÈí2í!ÙÙ$ H£åâåÝQÎåöø¸ø0øøø(›Dðû9§%ÐðôµZÁjòÁÁbòÁ ++ôˆC ö˜fÒ ø ê /hÜehü  x"H¥ @Š/Ÿ‰>^q>|¹||Q9€,!ÿ 9Y¹Þ6šÂ*ð úü YZ üÌ x¶˜©¦AÚ ú‘(ë*»Ã Ëø„ XµPµ?ЋÞ‘-‡=× Ïì ýÚ0†å †å†å ìíÚ ?ˆ ôÙSaõ°õ©õ5’],oÈB þ s! / cnþ/ .HyIÚ 0Xôý0 `À„1[ GG$/ OÃüOãüÙiÏO! õ/ ô[ôj " ôZIRIAInK1én <.°Œ+!@&°Œ+P,HÉ¥ T ,+Ø®EEÇ‘„it®P§˜ôjB   ˆ C*qk±¦sg!LbfRã÷XL$ÒêÒ&ÕlLÆ-mk+±§" °",àJ§|L! ˆJŠxL$Íóàƒâ—å ‘åQã´œ5@Žàj(¡Ü! „ÿà„åp„å„å#0„åŽèL‘¼H ‡!ÕLÓL @ Gt°K”] »‰ D" H"(L¼K=,Î Î ÎÎÎó †å@†åp†å#†å'«#Kç€Kü¸T éÛ‰àôǘK`/I`cCÿÿ ++\°K “" +©ø `C"PùPL.ÿß"‘ °’° 0ülK…úþÿê&Ã5¸ØB  þ[þS© #àˆÂ7Žâ¸K  0,L´9  ¸’¸4Jt—å —åL ÑÃÙ(0Z ÝàHØøÖm­¦RºB ¹ 'ÐÏX,$rYò ¿ ðª`·7pé™ B ++ oégõ'0 #éé0@Šåw˜€’ÓšAÉP-'#-) î%ˆzU¶ €dý`h·"½9™99¶9&@¯9¸| Š9@A¶) ++J˜' evˆÌ9ˆ37Q ++ {%(€,8…!@{ Hê r.çoÊ  · ¿Ø/ êZ!ìjh `ìeìTSžÄ041SÕ¾iOu ++$=%$´¡£yOø+`´#l`6ÊÄ©¬›Ä€B Å ¯Y…Q…@Ñ:×Ü(#à("¾à(ñ¢ËaÜ(Þe¯Ù¨ä(`B F õ•)•¹¡m% / ·"'ÅX×õÐS§ÿ?(8=H¢ ’%€:@ µ"} Oâ L(oÈB X÷•!XÆ_j % /  ++ /À¨A«©HB  à^'Æ]ö&]m èF 6¼ñ¡ß&. ß&8 ÒÐ˲OzzJ§_@B œ'OÊ ++ _€B &H [ \ ++j$H 4 Æ"2 ‹2 P/ "ï ++$ ++& O( (‰F ++H|P`8-ÊQ8B *QÀ°B , Ø ÕA²BAA-"à—ׯºFË$ìù ++# ,ê0F&¬ '„R¦nj . ++8&Fÿ& B 0 ( $FL¦@² ++G€k¿¤e FÑB\GU<×ôµ #0l©'£ ë&™ë&0x©ÎU R@ºRDÚv. -ÿ/ ã‰<)÷5%9! ë& /¤èE8ä;¨(¢æ¨& «œ ä 5ˆ¬ ˜"»¤`5˜(ˆÅÅï¾^,Šå¾ç7„æp&–Y} Ä3§ P*…ÀÚÙ’pLîXŒ ƒº@*UFê r%p(8q¤0& 4 *n鳪sé%à *üæ@Òæ@ÜÞè@Â@p;AÊÈêäàÚçyR 0 ++0”  œ‚/ (I €« ¢I(‰C”( ÞÄØÒæèSœÂ 2S}K$PwK82÷©``6  P@§ OWO­_b¨H‹5Iê5/ŠåK‡‡3)’¨Ï­Ó$ÐÓ /Iȸ“±÷ ¸|ÓÉ[ ¤\_ .T ¸5$ºª@c ¼ú]®( 4âwª 6 ++(+X>C  ¼‚' R' ¶?8& …½:½ !Ïÿÿ4ÊÏ8Ï:ÏÊÏ:Ï "œ°Ç ++¾ˆ+±T8B <+±à +±=# <+±30R ‹‚Qj> Ð ŒO ÆK aK íK šK CÚ >ä x?/ ++0K S { ‡ ÿÿÿÿÿÿ…(°ò @ ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #UF,Ûzð!VB ¨  L$à™åZáŒ*€Xâ} ++Ÿåê f Šâ`ðp–åàâàŠå@ ã ð– u,g Jâ04W ƒâà`ø à‚å,°™å UáX*°Kâ,°‰å ‹å(O àƒåH@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ˆ>@ ãðšå„@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи@ þÿêà Ð&À$@ÿ/á*MØtLìø:3ÿ/ámþÿê†jÊÜêÚZàÂäÊÜè0ÈîîÒhòbÖäÒÄÐnÚÒÌjpòÞðÊZ`P ‚8ð ++ÌØÈÚÊÚÄÊäæ æÆÐÊÚÊZÞÄÔÊÆè ++ L=ð B  é€Tãå+å ÕÍ_Šå by Jâšåç­ ,q ++b FxÚð3æÊè|ÈÒæàØÂòPBb8 ++ BL äÊÆÞäÈZîäÒèÊäX ÚÂÖÊZGýÊäÂèÒÞÜ B ++  x  üÄT㈊åñ"ñp Àô qô á)žÉ_žå9XÉLÐ  á&à ãàŠå  ã Šå  @R Gð@ ãTã0  Jâ šåTS àŠå\ÿà ãàŠå ŠåŠå & Ô  +Ôð0 á`EâP…â,à™å^Tñ:@ á0„åààãà„åùp¿2ÿ/áõÿÿêØàOø´ *%ˆ.ÿ½z¸ð(‚8B à $ÂææÊäèZæòÚÄÞØZØÒæèe]D  áaQa„@ ++ á¹55¹&mÁµÐTã ++&Rã)Tóà á0 á à“å&^ã ++0“å0âSãíAõÿÿ|OàŠå%@w#x‚ àšåäÿÿê5Àôà“åàâ^ãñÿÿƹ ð.eø¯©¶P’ ++ð~XB$¸B`8â0 6üæ@Òæ@ÜÞè@Â@&B@ÞÌ@´áæ ++HÞÞàæ€5Pâ ++{³(8ú ++ ++áñÐÂæÐ ++Êâ~(bSèÂÄØÊ{±XB  p $ <€|ÒÜÈÊð  °àà áp á&[ãV ++ŸA·ÿ á›å°Šå 0ŠåpŠå+<„"+’°šå 0šåp+D'XO  á\Í\[ ›åÀþ: †åàšå à†åƒâ`Šå ›å  á¿ÿu@òÿÿê @ á$O¶ÿÿꤪpxSã6xÓ Câ&Pã+€€ôàåp‚âpàà‡åã ++© © Àp‹å å Bâìh°`;M@óÿÿêȯŠå ŠåÐ*AÐÌ °àšåšåÕÿÿê á0ð`šåðå àƒâàÎãP„P•à*”ð :ƒà áà†åà á^ã ++àNâHð †â‚çøÿÿê á·Ì pÑîÿÿêºBÂ8éñ€BÊ8² ++˜BPx¼ñú @ ++ÀB¬h` š ++ø&ð8B ++p¡ô$ÄrænpôÚÚnrâænÔddZÂP` *’ ++  a  ++QæÒôÊ1àÚ#Ú"-2ÜÂÚ-*AÌØÈæ2R ++ÌØÂÎ:@1êÒÈBb ÆÞêÜè!JCæòÚäRBZ|æò~Z˜ ˜ ` סZèòàÊ "H3ðU! ++h`x1H8§` b ++ ++§ (( aPB0DX Z" ++ v @ Î r@f Ž8b]E"^ƒêÜÒìÊäæÊ_>È f2€À  áàâ^ã“ð à’å0âSãàžåã ++ˆŸ^ã ++(,Ä· ˜9ž½ qQáÚÿÿ˜Ø@ ++¥§(" 0v(Ü@¥ ++™@8[5 ?7$ÊäZ-Ø Y4Y Y› ++)0žåYY¹ ++oà„å0aóa8ØaÖaÖúB € ÿ)ÿÀÀ3âΗå á  ãÅ ³?pŠ·µ¯ pï?šåØÓøšB¼ 2 $©8-"X 2‚ ì# ++0j_"P5$(5§ÆÞÜæèäêÆèÞTX3±Xš&XðX7ÿà .à $`yP=—<`Ù`Ò7 Ë ¡‚$HB‚ð& $ B( ` $äèÈL@ $Z|;PqŠå Š @)àžåHlàà ++3^ãS` ÿ À@žå”P@ŠålØ¢|Øa á@šd ++0P$00 SÎP žåßD ++ § O žå;4@à€áð ë0tP$ ð*@á á0 ãî á@„áÉÿ ô È 9˜ ++À O¹ÿÿêø*yøôO­ÿÿê€ä A@†åkW ørÚB¾È 5h ¯B@ÈÞÊ€óÒÜÆØêÈÊ@æàÊÆÒÌÒÊÈÓ@üæ °Bš ++HŸa ++( ++x¨H~ VÊ& ++(¢¶$¶5*—|l°{. ø ¬¬Ð XÈuÈéÈ€j*B,!K˜ H¢ E^EðR ++’å-0žå&@ ãà“å®à áàÎãNâPãHºò1^º“xPãºQî áã Pàƒâ žç:²  6P@âæîpî7:Ê o Šå@àNÎ ` šå@¶^ãáÿÿ ++Ö` }` \¸È=(š=˜ÿÿê ++²ãS`B‚ˆW,@Ù@¶X. ä$&~&Ø ÖÂBàâ Eà8 8*0n@SáuC òi²H‡;0 F ¬ 4é-¨ ê\n àY‹‡JÒ ++¢0žåâQ ++`0“å|0 ++0 ++S¼E ++)“È /àô©(ê ’žåà„á§xTã*D6Ë >|L ++O  áni0žå“šqPáÁÿÿü¿ÿ ”/à(É[˜$”äF*-øQ€ 0Ä ë!82­ ++Jª4™':T4æêÄ 6.-° T¯Tà4  @R@ @@€ ’åãš@4  ã\,¢“åâP,€‘åã†,l0Qãv @RãgR@RáG0“åžåb0ãL3àƒá/fü¶Ò”  ”Êp \K\!šp/0¥¸Æ¼ˆtXn á°#àÌ! ŠHÖ #àÐ0 šåŒãt4¨ j“åp‘<aWárÿÿ8p Ì’Ì1^ÿÿˆ\XA&ê*@*6*:@â6Ž#fs@PB8Ó;` (#RZÂêð~S ++1p‘ Þó0å-°’åà ã ›å¢  á Âã^á} @f ++)€ ‹â’ç«T°Šåw£ ++™› C°šå{wÑJ ++ Žáã+k^·p*N! áS"kÅA ++ „$ C! áW$³0Žâʧ¸/Q¸„åÿÿ ++âÿÿê× dO@Šåh¢ü¹Ç l xRãÇÿÿ ++½ÜÔ/%Ô ƒÌ\G ++×'8И  ”C b8Ÿ… B68:90: HÔ 4>¹zó<ó'˜ í¬íñp7 7 $“åý7 —í'à,V—å,ƒ,°í3[ãsípd ++ RÊ!”“å—åO áPá á+ý…á q9q“" ++°Šåê2 pŠM°MuS0šå pM° Xò. Í€õ€ Ç¢"­ 4á k°—å›; QQáuÿÿ,sá]“å’$aá_áB$ÒÑ0< c˜B8X"pBRÊ@< ++W((>X>X 8Bqÿ @,+˜ `Œ¡ 0—4w—M cM S`0^ãEE p áWá5d0’åU@d0ã P “o:pÉ ö}„!…Ø *%Ø"p  ap e Cpšåλ± ° ÁQ•Á“Hû-žÁûàA" ++º áHb@·ð(BH Tüæ@ÂÜÈ@üæ@ÐÂìÊ@ÈÒÌÌʽ@ìæ;50B  7F*èÅÆ ++$D /¨ "ŽyeUG7vP?0à_p„å6(),iß#Í “‘}Â1jDbs0FHâFîFî 5L&ÌHÆJ  ê¹ê¤êê€êrêbê0à’åd ðã90àã@ à0 ú?0ú3u@ú9úq!@šÑí˘˜ј’é+t ++D¢– h–f–T–R–H* ++â–VŠJX–@ºJ„*%n­L­L­L­ P­’ÆÞÚàØÊÚÊÜÐN@(/ð W­<C24ì!’e¡ !? US0„å U ‰ Un/ÝnjE0) ? áÏ !!0’M µ µb³%D ++2à½WÒN@5(P½RòGàäÞÔ‹T9/ ŸYûxO<Ü ³ )³.Ë ÷)<w÷)x` ++ ã ¯"ÇÏÇ=üaäO šå±_ªúPâRü,Öi( Rð`#*8ÚTÚà/¬AQ ² ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # Éð,/M(ð$ ÄB T Ð  L$à™åZáÑ*€Xâ ++0Ÿåêà û) žåã­Rã«Ú`EâP…â,à™å^á¡: †åà ã à†å  á$H“:X@à†å4ø ƒâ`‚åã ++,°™å Uá*°Kâ,°‰å ‹å<Œ àƒå< ãˆoˆ0ˆØ ”^”L” &f Šâ`ðp–åàâàŠå@ ã ð–r­L Jâ¤*¤i@†å`Špphbp pp p¢   p/èp pp¢ýpÇppp¢<mp¦ppp¢|Ýp…ppp¢üMpdpp p’½  pCp p$p’-$$p"p$p(p’((pp(p,p’ ,,p/àp,p0p’}00p¿p0p4p’?í44pžp4p8p’]88p}p8p(*ú(LL`Šå$ýì:0 á$àšåàƒå(àšå àƒ(Ý(A áH(1å((Î(A  á (1‚å(w‚å`Eâ@(@¿:L˜ðàšå à†å,àšå à†å0àšåà†å8àšåà†å4àšåà†å¤1à†¤ñ !à†åàšå%à†åàšå)à†å- †å10†tâ5à†å9†åpà ãàü„0„™„0"% p€C†åXppxp4p$p(ppôS)†åPlh  ++x.U`Ȉ/ à ++/@ ++ | ++,xppŒ_0ŠåP’= PrP Jâ0š@/ïOžå”єĔD˜4à‚åH¬H H*›Ð|   /  o´^´@D´2´"!D ++¸‚¸‚H‚H" ++Ü ++HƒHƒ ð/óð'Hmâ`€ü'ÞüüD ¸Êx` 0†å0pƒp·p0p $/¦ ?/Œ /z i´@O´/=(j|Õ ( /ø pt/Ep /úˆ p!Oµp .Ù°Œ @P$XZ)t=$0šà.¶p}à‚å@‚,"¦ ++ ++,3å  ++ 0•00]€å0€,…,p,]‡å ‡h8r¨’†å p†å< t/\P3DH4,H4H4/üH3äH Ô (*ýÔO ád+9< /²LL ä, ùàâ^㇒,ŒQá` /wˆ/iÌWà4?H4'H4H4.÷H0 /æPH/0ô/Ò¬ Ì/¼ô3¤H4ŒH4tH4\H4DH4,H4H4/üH3äH4ÌH4´H4œH4„H4lH4TH4@ ãðšÔ,@1ÿ/á@HðÿÿêôP2ÿ/áÜ,Ƕ¨è ++ 0(pv\eWp4%\p! dp¯Äþÿê@šåºþp{.bþ´M,.åý*ÔýÀ0,¿,®,™,ˆ,s[DJ(_3ÿ/á(@/îüÖ¾~/mü´X,G,2,!, ,.ûû /©ûÄ—†@s@P8 /ðúØÀ¨x`H0/úÌ ++,/öù,.áù¤Í,»,§/˜ùĆnV>&/öøÞ/Íø¸,§,’,.ø@7˜% .õ÷.ä÷p/ž÷@Œ{@1@/÷.ùöT/åö,.ÓöXÂ,­X™,‡Xv,aXM,;,',77,D,.ïõX/Ûõ,.ÉõX¸,£,,z„f,T,/@õP/"õd/øôàÈ°˜€hP8 /ðóØÀ¨x/gó R,.Aó/õòlã.Òò@†@t/cò¬NX:,(X,X/îñ,.ÜñXË,.¶ñX¢,X/|ñÌjDY,D,3,, °føðÿê°_;ÿ/áæ,Ñ.¿ðX.­ð/ð¬v@b,M,.7ð.%ð°”T/ìïÔ¼¤Œt\D,/üîäÌ´œ„lT<.'î@/éíѹ¡/‚í˜ pX\Gœ/üìäÌ´.œì¼.‡ì´.tìødTSPCP .ÿë/Þ븻ª@@~m@.SëÐ@.Aë//ë4ll.ïê/ØêÀƵ@›@‰x@^@L4 .ßé`/Íé,¸,.¤é´.`é°:P+P (.ÿè.ðè<ß¾|[:.øç׶•tS2.ðæ/Ïæ ¬.›æ”Š@wf/Xæ ¼e À$˜Zag´e/øð(æÿêxj ÌÒØÊZÄêÌÌÊäZæÒôÊ ++HÆÍæÒô°B ˆ ( ®gÂÎpà—å@žåÖTã%ÂRãžgAÚ(j! ƒºgD>*r.²ôú! 6ùG ++ ++B¬0  6üæ@Òæ@ÜÞè@Â@àÞæÒèÒìÊ@ÌÒðÜêÚ ++HÞÞàæ0BLxB0p.ÆêæèÞÚZàÞäèT@F!MÈ?J )Cð( *PÆæRÜÊî¾ÞàÊܾÒÜàêè¾ÌÈ HÌÞäÊÒÎÜZÊÜèäòXB$8B[€ ++ àGPTãŠ@F ñ à‰å4€‰å(P‰å ‰êÑ D áPã[` ã0—å&°4€™å(P™å ™†á7n €âöÿRŠí ²Z ++°B8ëI0 ,å4Þêèæ&Ö° Ø ++ Ôÿ% Tãt Šå$Šå( ŠåpŠå0šå šå šåšåpšå@šåÐMâü Züá20@å@_3ãOS àåDSàå9Sàå.Sàå#a1 á(@štC! á$€@ šå„ „ ++=Opžå7ˆDÐâŒ.ôÿVŒ.êÿ®2Và¼O0 áÖ0_@åÌ`^@åÁÿn@å¶ÿº n @å«ÿn_@å 4€ª ++Ð5/ ++0_8Deeÿìe'e]ÆØÞæÊUv ð ++ŒŒ§€ xòx9 ++ˆ´&´ëÄòèÊìÊÆèÞä¾äÊ»KP° ++@¼Tã/ÿO@šåß?p—{{[ñ[çû[Ý ++j ++ØÜ,(:¾ÜÄ++Ö+(+ZîäÒèÊ))Ö? ++Ø0 ƒ,Äò!!P@ ++!ŸTã!1õ0A* O  áèéZ ++¨ãã æÊfJ¾àÞæåää!Ô > ++ˆ¶ζËu¶.¶ÊÜÞܾÄØÞÆÖÒÜο¿u¿æ¿  ž "­jØÊÜÎèÐè"§u>" ++ˆ¹æ¹$Õu$¹¹ºÌȾäÊÎêØÂäà·&X¸XX¸Pá áN± ,tæAÌùXX&B9@ ++(æ-‡ÆÞÚàäÊææ-ì(ì€])]ìÀ Tn!ªü38àãT O—å1Ä Õ ÄL? ãë`_0™åä 0( ++Ȉ ++HBD8´  ï *°øøø°°*°Q €0HL ÐZäÊæêääÊÆèÊÈZqÏæ@B< À $$=1=xàžå^ãX|"#X|@ ++PO p—åT *}TÜ (_pŠåœ@*Åàz_pšåÝÖ8`ÒB,±b`Þ ÌÆ5ŠÚbÚ@Q ++Ž{ ++J2Š2JYúzŠ–36P ++‚]pƒâ àŠåÞzD@âÿÿêây*™ÊznB4½0ƒâ0„ààƒN3‹‡Aõÿÿê–3A^ã¢$4~/ôŽâàÎã`EâP•à*º/@ :$@Žà á–8 L0PãQ@â0ZG¯â0ŽçøÿÿêÂÐHÖD.¥LžÖp—ÿÿêÂŽ €! ++€*@H ++ˆðPHB`8b, ++ B(ßñ$B0 x æÒØÊÜèZ ++¬3ôàšåàžå®à áàÎãàŠåNhô@0 ã€500ŽâÕ€Sá= ++:*" Àrü‚â’çà‘å ãòÿÿŒ1/|lx‚å ãüO0Šå´| M z*ñ´|_0šåÒ9Aßÿÿêž\¢ x*ET®XÃâ¶q0“çà“ð$|€X⢠++ø˜ø0øô+åÄÔÌ$ ++ÌU/½Ì?/Ì*ÌÌ Ìêˆ +Ùô00šåø¡a0Ž*1Ž–MŽ°ôþÿê8BB.& GÿŒ ++—åûÛ9óqóéÛRj2ãÂPBb8ú. å†B @ Ì  }1b7ñ(6 HÎêÂäÈXú0[1PPlŸ¢0˜B4t%2ø4ø+ÿ 6Xâ0B8à8Ø,à+ ’Ð" :Ð:ð:ð+W6 ++0&IÊ0#z 1(@C¢<(ff#J b @& )° V /;BB’g† ú8Z{ ::V ®åŒ › ћћ`’B>÷Ð&3A %g J,Ožå=H?…I 4ÍçÛåÔûóÂÐÂæÐèÂÄØÊZÖÊòæXh ++$0<9²><¡0 ++:$ÈÒæ6ûÒÜèÊääêàèæ ++<"ÊÜö vÈòÜÂÚÒÆZîÒÜȯrb8º@"€˜PBH|ô#ZÞàèÒÞÜæ&ÜÞZÆäÊÂèÊÜÞZÌÂÒØÜÞZèäêÜÆÂèÊ–úõ+ÊÈXäÊàØÂÆÊšÊðÆØêæÒìÊ’ ÂààÊÜÈ àÊäÚZæÊèZêæÊäZÒÈ"PÎäÞêàSèÒÆÖò "ÜÞ1)$ú'vÊðÊÆêèÊ'Y;&<) =[ÞèÐÊä==zð L( ÚÂÖÊZÊÜêÚÊäÂUh !$H!v ++B0(6pÆÞÜæèäêâ ++?SÔÇ"qÚÞÈÊ~ Ý)È q· ++-u0Pá • ŒŒ-òRPÜÞÜÊ(ØÒ 1 ++f!HsPÁð-H~H ++ÆÞÈÊÆ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbpl`PJ ‚Š ++";ñ ++DÌØÈÜÂÚÊ FæÆÐÊÚÊZÞÄÔÊÆè ++ ++DqóÒÜÌÞ F L H  ØÂèÒÜZbIb(  ç 0Tã^S%šo?X™po?%Apà^áN("àO €0ÎãSã0Š. çƒ#Ù ñà„å„å „å „å‹Vbà„å0 3à„Gf„Gf„Gf-4 529à„- ô/ 9 àƒ  ` :áC ŽoƒøR0Câp#pO0 á½Xî/ã¶Eñê€H‚L ÛL QbPJKxKG?h=0*aìèð%:€îÄà 5QðÄì qòÜÊðè""qôÒÊÜÈ*±öÒÞÌÌæÊèæ:2@ø Ò™æ*:aúÒÆäBaüÄÞÚJDþôRaÌÄÒÎZ` ÈÊÛnbU ÊÜj1 ++~r@LðBN #0 ZU0€æTãŠå r*!`‘À"ðàšåàƒà(àŠå à–å$àŠå0£…ð‘åSá°–å à–åváp ã!0–å@–åÀ–ßq(c@^á»Is\á,å% QÈ ++w’0#ñQ㟠++’åDŠ@#1šû~ñ °Šå,àŠå0ÀŠå4@Šå80ŠålZäÂÈÒð.?Ð.?P.?/?-? fÄÂæʱ\Tî ¬\dàÆ ¨\FÆÆ \dÆÒ š\” ++æÒÎÜ~ š\‚ÆÞÚÚÂæJ˜?ˆc@" 00 S\  Á, ±, $ "?D” [ ?BêŠ?¢=TxGD@Œ± Žˆ#x|Ïm/ ++°|–|í'u/’¥/”›–›1ˆ2xz”Iq`X ++Ø4¡ š nêÜÊðàgrq@ÊÜÈZÞÌ&c@„c @1êØè5_ ¡m& ++Èú10TX˜ÿ>˜h/šâ ðóss1!°øyqr„@ø¸aœaÿ>œ_ PðžŸÿ>žÒp³²„\8w „S`Ïê„ð! ++à$è* Q' ++x%`]Gt  30ÿD ±\&f ­\q*!à‘þD™íì)0Žµ\fµ\µ\µ\!àŠ¹\åëWê½\?ö,šRà ã0àŽ_^c =U'†*å ñ" µ\¢MìÞD|ˆ_0CàµY8" ÙU¤ V.‰¤ÕU"ÁÿÞa(Lqàžå.ã ©UyU‘(^ãBEíž\b eXÈd©Vá á ++0 ãà½WÎ"(à†•Ð/YÐOæÿÿê„ „t„Ý„d„ç{&àòPTá/ò*0à ãºG8€¹WiÙ\V& =\Õo ++@ áÞŒHô§ pKà„âN„\Oá áÂ4…¦ *‰ œ¸?”ÿÿÌnÄ[ÄøÄ4/-ăÄ@0„âC¤!ÎF ¤ Ø"þØâØ€¨ìì/uì’à1Šÿÿ]/, ÑUS^ãKýZ´‰[…[)àÃX/^þÀ/5ÀåÀ"üÀ[ŠKX=/Á”p!àš”Q}LìŽãh Süà✠\/üýˆ/½ˆ¥ˆ!ÿˆeˆR@/I ˆtæˆ/툨 ° 4°/m ++°›#\˜ô˜4/á ++˜téx˜æ˜ÀÀ  À À/- À‘]gÑ_H.æüÓFd¢¨]”U–* ˜^0^sÊ 0¢! Ò6V°B q8V%!*%_¤0¦)2¦p!)?¨00„ u3u=!0„Û± s!±3u°(»u?„å6»u .à"´*, ¸ ´ÿ![øÕU* ´  LZ%PLcG"u 0? „r8S „â6 ++^ãô?Ao0PïÊ<6kH‘ð\áØÊ Œâ@ á,°S'€‹à Ðå‹X?ŠåS@Šå-p@·Xð á@°šå €á7 ++P>l6º°¿A0 P²²Ê7*@â6êNâåüÀçŽâã áàŽâ{Cy@à‚å3y¡à ã< šåÀŒ÷0@¤ýÿê àü ++œ!80ƒâ€L†ýÿêwf¨wf@úñ{f/V&àf?l?0„Ÿ~dŸ~tÊò `R0ã>Fã>‡ã>Ä6Ä@ x¢Ä È0  á " ƒ>Ll  Ï>L$ðÇ*Âøç>c0 á 0“ç>4Sã³ßA4¦”EzÃ` H @;ÿÿê¼DWB0A  ++<Yy¦©q ++- — Þ$! „1S€ ƒà Âå|¸ ++èà‰D,@0ò / »Ô, ÔUÔ Ô,åÔP…Ô Ô…Ô,/¹Ô? Ô(Ôë×7 ,Ô(Ô,/Ôd›è‚²È—qJª-—‘O$üÜ– —ƒ —— $ t0—0  ã0— ƒàeT<.œþÀåP…/ ãðT²C  ãl¤””” ”/ÙÿŒòŒ”5/i/QþP §4!‹7 ”ú\çUif˜˜O8|DʘM_€" áÁã´1„ž' \QÀåÿ/pDРHþÿê<D8 yf (ˆAªBâ0¢ à7‚ã %UjS6*‚ã-ÕiF""ÝY¬ °„âK± á °œË´R Àå!$H ä ¬/âL HÉýÿêpDl 8 pp (â8/m /ýs/% J§‡³7º,.5ýš' ýȼ _á  .ÜüÆ Ê8Ef@`BÀ² - u²/—q²i ì÷´µu²(5 Š´2RI‚À©8©#0©ìXÿþ¸¢Âè8q*Âx^~—2„:Â8¢!â¤!Š¨!2ÿV(¦èVp¦¸V`ƒ9!p4o%ZÂHz9 Ó/ >C1bÂ&JQ0þÿ7ò¶o3Ú ++(M9Aô8/Äì8Æ?-à„ì8½oÆ È6!HB;CÊ ÆE;˜("äläætBE´)ÎZ³;GP×dÊC(á„Cµ A P ¼¼úÖ!ô zÌ( ØÒèèØÊ(ÌHÎ *a¤ÊÜÈÒÂÜÜÊææó0·Hp¼pÿ#B(*ØÊÄ> ”cÒcÿÄcÄc(0 ŒÊqæ¾ÒÆÞÜì…Ø ++†ÊÐïÍ‚Ê ºg? ã¨Û_ âñ]qRÐÀéͲ†¶ ++³Ò³w³ À9ËMž 9Ë ÒIйŠÌäÞÚ¾æèäIÐ@@BÔ¨ŸQˆ ++ÚTãJ-QßÙ!pš‚_@šå”Ô4ÍKÃÙ)¯Ù&p¬Ô¬ÔþÎCÚ %ÙÀÔ ˜*-.ðÿÊ æœ ØÔÜ”*oÙÑðÔoÙÆwŠÔ ++ëÔ¦8( *¦$èÞ¤(¤OHBÖ¤ÿDÖ¤PXBØ€1è ¦aËð6ð00 áƒ„" ++=“å‹A #ÔwÍIãÌg0›Í›Í‘±¢"p[Í®²mÈTÈ éXË;ƒ ++2:ØYPù!Ød°‚Ú )¨ 0 ÚŽ>²¦¤ ‚:²:²Càžå$ >²!àžH4"0àb,uTRSáWQH ++0ò±^D™K(8àb¯š¢*í¢! ++£ã2 ++àD5¨„¬4‘K8Æ F³A@Åñ ¯žìJ<üdFPê ãDT0\2Ú¬1(àÔZ?íÚ¬RàâL- à”å ”M`Ø4`ü.¸D2Ýó{,4K ƒâŒ$c{ðL@È © ?  ãÐ /½ÐИf€„A/A„EX,A´/,à"­´0´ôή á 0`(Táøø4@Cà*­0h+Ò) èH" ++$.Õu ¬=/í¬p<ÿÿà”OãÌ0¬†ÏO ”åç~í ›0„å „å-"ŽüêM@ ã&v±ØC/ÅØØ(/÷þØ/ðþØS/Ø/ÐþØ'ÁغØØ$jˆ@pp›å(šåSwa/ æ³"<°ßÀ „@!ÿ.´ ‹ÄðéaR@šå<°`R„@( Ç@0 ãÐÒÌ ÀÌ üYV¨P B¸£yhO! ŽåœE6œ$1p›ÔP@ÔPcƼ+ Àv¶¬*Ѭ ¼“ËròµÜéc0ʵ çê€ šå=’å@9X0 šå˜"Hࣨx?r! _ÿy¨ qâQ$ 0’å à’å<©CRã l*ÄS| b ’å¢ F">+"ãÄ*¯yDè!ƒâ0 ++2&&0 äKyÅ;y+6·D(‹t/ P Sëu` ++ Dà$Ò·0 ãÄKP/ä  ù2L+ÅLH@@Dà\8` “å 0¸Sò-9p’p* X°+)d0°d" XFá#ã6”x0“å(ƒã H ƒå¾ ˜>S0 ãÂ| 0$AûÆ"0ï}´p ”´@@„༣D0$?0Ž”:b:dâpH.D0ÜØoìÿ©€¢ˆ Ìô dü /!\.ZþÌ.AþxA0:Á$H~·ÅQ9ó xBÜ   äÊèêäÜZÆÞêÜè‹W"0o_GÛ@p.µ1‚§_àå[ 2Ê> ‚ k6Íhk g„6€Àà!p’åGá°I'3[áZq1;—3–`€à`–å@&2V“@  bÉW{3&` pDB‡åp@°‹âèG°‹âá4ëAOVáDDÓ8.( 8|ÅC@¿{Ï"0orÀŠå°Š; OpŠå( ’%((õ¹»qÀšå°šr¯1$pš;C@Nà!‚fÌ% <y”vjP ++à>1¨\v bÜ ++h]ØÇ óØz8X¨Bâ  ( Êää\‰¼&#Ë ++w7'½^ ++À‚⌓HQð@À‹å(-pŒpA(„‚2(:`p†å †DŸá ã0Šå à *é¿Eooa¼»Eó'`1é»F10ž)¿S àžåï : ǃ$·§l"!À/ G jüùG#0oè‰tGFâªBà  °Þk"0È7¼Û1[SF Ä  3à„ü;„´ ‹ç`M ++Ká‘—ÃU p>-¿\<ƒ \< °Õ¾{ (Õ¾ °c¬w‹âCâÿç­S\c9 d.0ÔD7_„å 0„.õÿ¯½ Ô,ÌýÌž8‹çô53ªÃ?! ++8æ¸k=#Ç?28r!x}hÂ!(D¹B à rX ÊèÆ|#8¾Œ=4H Xb}@;ÝqÊÈ@ÌÞä@¸x€æÊâêÊÜÆÊÜ? â?n†‡*B ++âÜ£ˆäX¢æ}˜¡B°BâZ#¸’BAÜP?HZæ¾­c$p†"˜  X ˆ„§ áh{hhи$@à“å\fO^ãTàJò½ppltÝ|X® U:†Ká †å¢¿¬1à—'X@à—å'X@0†å`$³FL¤$P@†å 0{ Œò,Ú¯ä0)QÇ ¬/ 0…Œ~Àq"ú D@U½nfüÂ0rˆ!x  ++ 'HMnÆ}"B}Q1 ++å@*& °Dÿ= ='='&”[½/pðMÎƽ1"péXu òÇ. LŒ˜5à”QÓÜG@TãÆëÚ¸ ü.¿ü9(ü´ ¬ž =—å Ë‹jüÍ ‰"pR3 [ G‰ 4 )’h3Rã[LW4JMQ0&>ƒp1àƒ81 àƒ\EvÒÆ`å #›D`å—åH<!e) „¼„- . àq)á ++/àØ+ò10„å5„å9„å= „´ ])ØõA¨AËh¢Æ_ 0—å³7? —eq>71—™ ++l0.9l|N¨y¨,€¬ ¨h] M "÷þˆJØOFË.5,¾P·Pò < ++è ª¨ŒZfd˜Š(ê HÌàZ'cZ|êèÌpý˜\ˆè0ê ¨$0>D‚.'—> jWJ PÍJ3@=)Q@ÜÞÜZHö‡Fm/ˆl*N9Kl!èÞj¦õk‚xüIâd…V‚ˆJâ>0 !…&â‘…îBâ&ð…&ò8â&ô2â&öˆ…&ø â&úâ&üâ&þâ&Ì â6â6ûá1 r "BZÈÊæ†z*ÊÜ ‚è…@G ’# ‡ °@ .êÜæêàc&ÊÈÙJ!üÂn@8 ++{EHêÀH" 1 ++ 9Pê¼6Y‚ ½6W˜~ ++@ƒð( $üæ@Òæ@wÅ%Â@¡+Ë g2 ++(ט3UHšÅ]ç8h  &]çIçg”­çH1RŠ71¢(N7¤R71(¨ž7¨ç€  ÜÂHÈZû-P ¸.áK .:P pA*H“Š#ZÐþÅ âèëè^äL|èL .1b‹PèäÂÜæ9ä¸0£,¨ $¶¤CTãœê@‰×Ë} ç— … j… Z@< “åD" 㧉¼´+¹Ý ++G4#ÄL/LX; A  ++@ Üa<  < Ùï%  z44 "0Y.50… µNÝ ‰Ý ë™@dÿÿêFÿeŽÙ 8=%OøL.ý-O° ÈGÄ= .IL=0:r”" ~Va ¦X Žô fˆÍ „<2Tó%&¿’ì YPÉ@ /ÌÉ/Ü@A.0-,-¶#"ÀÆ0w ‚ ++ .S *Ã4EXRX'#% ª3 &½(˜ ³ þñÁÚ/;0ÁS›ir ”E("¯# 3"»Œ‹5Ž5"`$$Æ1ÿ(Üèr8 ˜Bùó!|;ó%@ž€;*€;ƒ-0’.<‡! ƒº©iÓ1¬;-` ¢ –%UT‹9 À³@-ª;V6& !Z¼^-ð  9699%2@’âÜí` ++z òo&*çI7((Í { /ð ï# ï>o(*×8,<¹Éá( ë# ë>,ë1.ûS ++ ++H ,€ Î)ÎSÿàâ^!Þ  ü R–ü ð ò ++%QQã`’85úÿÿÀ:?@“4Èš‚¨. ìï $ÕPB2 p 4 ȉV6 ¯: à ++t0pŠål0 Ø ++¸€÷¯æ M*“  à)CÈPã: Pšå(· É3 ÷"@/ @+I@S!à“å ^Ø1%pžPL ·%\Doc{ A €””O6±àNâ àƒåà“ObuàŽâàƒPPPP PW àƒåP1àƒ\rèÎãàƒ@"žÿ$àó /ÕÌPàšå9p, á„„.<=Û$û!U·%·50@ üœ5U ¤½¬@!ëŽ@T§ Ô.` €.jB0uAb¨ R ,xù>_SòZÌÞä fZ1 “ƒàBààNâkáP! “å9jI±m3“å1Ž5bÅ+2 ŽLœæÒáÖƒy NâàbSàŽàP"çP 82Î!àžÝ)11p’Z#àCÝ ‘êæ"0  áÀÜP5p‘åH´j.H½ *……D´¢/ÅÅO0šåÈ@ ++Šô ‘"0H± R¢0ü€8ª2„4å$2x ä#èÞF ++@€Xâ{Ï$@0‘å½ö!àC!€ 0‘å Žàªb,çhqµÂi_ˆñ0 á ‘å!‘å5p0 ýãŠÚ)0ö,䱆"##0¶*%¢` ++Žà6xèV&‹' Õ¨ë'>&_(ò:Û'½¦  ‘å)‚ã +'®8p CààŽàºj1à‘Ñg‹ÃDõ"0dWànâ pÂpÌO0 Œáåâ4 qÕ J‘^A^rÄär…20gâ4 ++0c” š48*‹6æ2 ‹&ŠÞ!p‘å0—åaCSã/0* v»¡ —å‘å!°?2iO¡pö0= ‘Z<? Ü&pú£2"0íàÇP ++TÑólZ¤ù $Þ1êñ*#râ6 ++P××ðˆ22 ++F&HSÿ7ÞØÊn…0 ++H(N7Š À2X Âe0x :e˜pB8 ðNPèéfO"Lã  ++Pq ++Pé÷‘zB¸@\Cú8gÐ@ ++: ++<0SÞt’2 ++@gb—ORdk0B£ 4$|@ ?ø ´ #øÀAÀ<$"îŽ&Ùœ +ɸ ¸ ¸ ¿Ø 4¯4- œë ©ï “—( &ž˜##˜# „$5%à† ++úœ$1à†[!Q Âã"Z@bâ @‚‚00 0™ç¡é  t*A ãH„ Àÿuð$T/•T0‡}v%cvà< !dr±T ++º ãœ<Ѐ4P…àHEH" Hšä ¼% ++ÈÄ"°7õ^dÜô¿+" 0¸)!ü$Kè 0à¯> &àD D,'ID/ùD*ïD$DåDÛD(DÑDÇD,D½D³D0D©DDDŸD4D•D‹D8DDwDÃö9à†å=†åA†åEÀ†åïo±À„  tD§4e4 ¨4[ó'F[ã?î°0[ã E <*“#“Ï%%ß%§%@„åõ ++@àÎ㺠qnâ „Õ ++@ààÛ% À$œ$Tnâ $ Œà&÷¤ ++( èP&$çtŒ/p .¬%àb² b ²ÚW„åà”Ú„|Ü|Þ|Þ”ô¯E 0 nâ°PËTä/4B”åé?! ƒH˜h3è+TT‡T<Pз)X85ñ Ì”2Ð@»(UàÀ&ÀRÀ4¼ 3. ++ˆ´¬ "¬8Œ-Oå@´°ËÍ°¬x0×f§rg)€`Q0àKâ¯(#4È”þøR‹øRøRa : á{‡øRC à áž ++猲@ ãÀ†â@ŒüRKÀ áÌ (o<ÿ/áíÿh,À$ ++R†âÀh^ á­þðí0J[ã"p \+\/\* #"®üäü@/Êÿü8XØp oüm Üâ[D*ÙýL*ÎýH*ÅýG »8 °d "¥ý[+ˆ œ Ø ˆ ( ++t x ++` È ++L  &8ý+v$ ¸   &üüÇ+.èü€9®´üÿê° ã©ü([0 ++§$/ ás$9P˜ x/ÙD.üì. üˆea €> ê0>`ÀÁ4²B@ðB® $'D}<0 , ¬~TX PvÞc ’W7Ä2žÎæ É/…ÉÿBDÉD‚NQ‚å!à’ÚëC@“„Ž`4Qã!0ŽåÌè Q‚å à’óOäR㨜ãS'ðÂêGq /q§br#v#7T7/x0/ù0Š•.ƒÿpAâBA²"DPB6Ù€DBL]x` ÌÒØØN Sù])€V@o ++ ++ ž6ŠJê7v? ++‹p6Ûšm4-0šê„R{ ++„5.A„H 1p|ÂÕH¶9FËÇùຠ++@ŽŽ Ž)àd(¶ ÷¯ùf *%àˆ€Ú a2Ÿº ++F8\±"& îXJ ø(( ¬,Û ++ ~*gß y†fè;p ++b ++H³"2P"o!HDq ++JÀ(úe±’L ++NPH*R{N-(PûRûSšLh;Ø4v bL ++ þphV >þ"`àÊäÚÒè11ÞÜ@Ø"$È@{20H ++D0 ˆT·<ø 2–ØÞÞÖÂÐÊÂÈÚKɧ;ŽÅ'#€/“^lÛ ©/0§‰×%@@×! 0 Ž7#ã!)Qƒå à“.ä)q¤<¨/q¨pTãêÿÿ ++"ðšmŸ)XSþK } @ “å20“’Ul.5lƒÐ/šå7 ++ ýk23ê{f*TH{T{+8ªGé j,T£+V,, ++0þŒZ  @ *þRêÜÎÊ軸.¡Ü0ÃòòB ++3Žg1$>ç!W¹"°/5%H0 6Æ0 Žà £ $`Aà Bâ, t(0"Bç1é& 0™Ð1@Ù@ ++2$1€.Y€¾ü†2 l“ X *ÿû»Ï/$ÞÜ|8AÈX @ "ˆQTJZQ Ê ȱ¦"Zo#0>&08\8<˜ &8'ÎÊ›¬0¢0”0€0¼;òrV0=Z?ð ++ .6ànÅ ++Xñ€rˆtd=ŽàŒ% –‰&Ž€…€o€,W€ \€\€< úð _ "\€^ @ 0HGZæÞÚwaáWUMFÖ_ÅY·Y08m/0œI ìœ+œI@Í@Q7!@n@NU<…6!ಠè/µè6„5.9„64(%¼`K ++" Mv@ªKQùw°šå áâ'fap€âŠ¯S“å\»QtL"X”öÃQ; 1 “xÃ1 A&SàNà Žå¸.…L*¯#,ò!E2^!²^É.`É~ ++»`» ‚ö¶5b¶Œbû€ Š^( ++ p; ø8|"^ ++ d‰)> 6£22ÊÂäH(U :œˆ-ˆ(”)tW à‚å2à‚à0 Ô15pžª-pÍ FûÀ42r@²d!5:V ++f ++ø ++'àêÓ ¸8V0 áp ++®L™LŒLP¤0ûh + Ö.pç[ò/ˆ ˆ2 “5„ƒp‚å Žâ M ++aL'YôT)W×A" )îÖ8Wá!( '£HÜ} e&/D©D P4| ®0ðàNâp“å“åGàAâQ”VªÆ0| À ¬H œL/ÙLR¬KÍ ++¬0¬Qfx‚º âÖ!j  ($`Ê'E^ ÊfÏ ++h p 0z Ï ++çzMƒzMÜzM&˃*½/7 ÓaÒH Ä0%0š3Z²` ¢lR ‚àà¶`Å2¿W{à‘Ð0;Qá/ß%Ær˜"d²˜Uµ U K5âLU7' ndŠGZ3 00 QhrÊ’å!Ô^`ŽàPî–#ªÓ Ï !€ä- qÛ 0‡â ÷/Nœdà“ ++Ó ¨¯S 6³û¢—bdô.ôv]c 5plUUhà2/03d[0d ô1 ŽàŸH;&êj Nf^¯îœ78 ++ÜoU!( —é¡ ¶4.µÐ"@¼2ØQ[<á5 <’[@4,3"@4 bK!²LÝ5"0l–rúœ ++4@AâŒ?€Œ\4Q\4Uî \4QG:?(Ôãƒå@DàT4Á‹" ØßX .ܯ˜+! +M7&P U7ý+$w& 4G$Éß# D $À$/( $!·þÇ#?ãµþ/EÄO/©Ä“KX.ô.$þ;.þ;<;óh   ),l 5,n ,p ¡, L• ‚3 8 ° hÐBjª {p $èäòZ9ñ "0p áy67à—9@—å0ðSô„9P™*¾O9Vy!—å5°‘ ++9âpYÊ9¥69p ++9.'09º?‚¶>I¶—¶‡91(Àt-7ˆœ5 îáäw`Žâ ã|xÅS á/0Í* }+¹æ8ÅW1à—Z `qàcâ à‡¸Úê9] BàÔ($D ++Î989‡9$P'0—Î9 ‡ån(Á(<ì. /¡ð iu `Ž90¸ñTŠj)¿v Zj ++8Êgd"hD*a1ˆ3 1` ² !€„@Hlnp#jV:@ƒ^Rhƒr¿>•}aÒ'W5F'9•î1&/ Ò •@É@,. @%rPÉ|…|©¡&¢¡&êžc*rH’ª 6ü;4rX3µ>rt•? 8•Ô@–=–0>E/!b2 ²()’ý’ý ‚å¡qª/áªÕz,¢š¢jÚt(¢³`võ ÜÈØÊä$ÆðfêÚÔÐòrÜÖÖêâÖêZÂN#NI F6"bÛ Â*NÀ#N ++§Û©Ûw¯Û†¸Û¹Û7àê:¼Û ++=$ @V(<% LV52 LV¼KVŠ”$æÊè9žB_VQ¦RØÊÜÎèkr5¬ ;BtVQ‚"ÃÜÞÜÄØÞÆÖÒÜÎ~}V!5~*@%E$ŠIOpv x,`(> ´<x¡=w¨¡=x¡=8¡=2@v°NoBzY>‚z¸8¸Q)R@?h| pº'ºn Ú3º²,®e®#Dpžåý]±LÙúò ++¢B²8â|`Cz HZ?|+²@ ++ œX& ++(™Ÿ& ++Ð,?> ++ðÜX€HL< JW+ù$ á‡q0žå lvtçH.Ä MJ7 à®V7 /¹7à›kÖÒgš~0ó‹eŠ€0³Ö „"=p Bí Y'''G€Xâ0 ?’å Æ /9­óÚd’‚0ÇXGr„Á× †0?è @0†+V‚Q'A€XâAó4v~ó1=pž»†ƒH"*~¡% /¥NDéDªÚ7€ i4I¬ÉC" ++Eb†Ã0Aê†ú(©"ååˆå?Ð 6óáíSí?í3 ++)] 9Ü Ø3Ý^30 ++~p²99/]|®ÔÔERˆÔHÚˆÔ¹ Ò(Ôé1çO¸ D¹z »p»[»NËL¿?1§L‘G‚¨d‚‰o1 ’" „S)à’åP+ys‘ ++¬»ùµm$ÊI ä[& #H d}QHDÉÙ8Õ#@Ñ#’O%êB'J3ŠX8OºŠ#OŒP0?P :#K%ƒ%NzNg1[101b0‘å1p“UYNR ++¥ ++g$Î|±žåAà 0’ëq ++0ž>x ++N-žœ(up’å’k¾yñ à0ƒâ0“çNàà€Š¨÷F@Pàjæ"/IÑ/D}1}eÑ-/ |†M–A"cøB0P¡EªŒ±g2ŒPêÄ,f*Œ ++(Ù ++­àEdo(B2YÌ\#.#bÄÒÜÂäòpV ++P`8?Ê‹ 0êcAº %? ­%œW œW@¹ùEI9>¿!PÒºNZ’bWB ¼ŽÄ$ ++Œ¬Ù:ÙÛ‘}X áÂ("WIÑó£Qlé0/ Ü ýÜ O šåÇY€Â¼0¼Y’– :üæ@ÈÞÊ[Æf`@ÞàÊäÂ7f,˜…ÔOzŽ Z58iÅ~' ++•5•L  ++[’„"”…š…/( 5q>Š¥)Ž0ÚÙ[qÿ0âSÕ!q0’å5p“ŽŽ¥’YàÃå"ÄšÊ@8C–}˜9 ++j*š(l:œ6Õøk& jAjMœj‚jžïEó'AóÀ8‚Y‚YÅžÅ> >žiÈ* Ë!EaM a~a¢Ë…Î+EÎÍ~Î~u~΢Î:¤*¨Ók a9aM¤a¦a¨Â@¼'9¼Á¦9¦G¦¼¨¼>ª4’c·%²!=QMªQ¬Q®² w­+=­ÍËá)¬f¬­®­0°§¿ä ++†²* / ˆ åò Õýw&Ý°i?°‹*‰ ²™g?°8X3ú+(²ú1´ßaø¶ÏÏü´p´š´ò¶ú¢¸èäêÜÆÂè[iœº›t*ˆ ”k™t#eÊ][H¶öU8¶öU6Y«E 0e4‘Ò~;Ön ÚUBK¤d/Ñ•BK P/p(á4"Ä0 ™0È¥•žR&0¤Y¤šW¤Ç-äW¤">änP ê]j¡/yà?pšåP¤bÚ 9‰tO0šå§Tð ÿÿê2:¸xººØ¸…¸?¼î ç-9¾ 0Ùs©%ëW4DºWgQP¸€ ++~ ~7¼_U¾ u( ŠE Ïs7À>"ÌÒ‹p<Â>>ÿÿÿ@À>Â>ÀÀÀÀÀÀÂÀ‚E Â"2õÄ#1˜ ÎN0Î ,Î æ -DRÆ 4– Å– ÕŨ²202j \¢Äj ÇÈÆÂØØZîÒèÐk Æÿ +h ƒ†<ö>|‚iLZLVîwQâ^Q—92  ^pw;o¼b Uª JDÓ6/éÓ6 Khàh0h“hàh+Qhàd_“å>T ++ +pª/Opšå„{}¤$*BÆ]0Èh-&ƳAüH"Æýj ª ìÂØêÊæ PÈ#µ ÛuäÞÆÊÈêä,|È Å}i6Ê"dkÄYÌ .8 E@X±0³ ÚŠŠƒY!YYKþáQÑQ¤D3Yá3YI•?2Ê{0ºë¶+Ê!!Ü@\®CÀÒJ±ÆÞÚàäÊææÊÈBÔkÎ ˜ "£ì£Ü”Ø”¿ 4 4 É4²‹$@ ãDpà á^?ß,S ++㇠9 ++ð2& àÛ@yhfÃ@…¡¢IH.M&>®‘&5I&pv ð.E¼ØÈ|ý7…,ˆ½ˆòጠjc! ú1à[.dÏ0ÔÞ'\Y' ÅŽC‡\€ˆ …{!m{ ++ 5:‘âPã² 2‘å‡= ++3B…{0à ãDFFPˆœ5 ,A2zŒ8À¸PX’Λ{hÐ  ++ H·10ì/º/©Ã1w1!0³•ÿ„@‹³1'Û . /#û1H/L ”ñLHŽ7šå” ´{-a ˆÂ™¹´cB ++¤("p$9œÂh(h“àâ^ã$Ü? MOÖ1¬o0—å!0ƒtá%‚¯3Of:ƒã0ŽUG5‚"ðÿ!cÙYJ·? —´Vœ‡œ/Éœy˜“ "6Î |F3? V¼l†‚”XúÐ;ëb˜ÿ;Cˆ v˜PÂææÊäíõ @PÄÞð~@ÎôÌÈR@Âè@ØÒÜÊ@fbrhX@ÆÐÂä@dr@ÞÌ@ÒÞ\ææ&8QZìÒÞØ/# ++ÀŸ© ÒÚ w˜ üæt@üPüÂüRÚ uc$HšÃGÐ ++ à hÊ4T v ++0‘)V„‘@äÊÎêØÂä@ ++V ¢Α,Òg ++/œ"84€&H%WqÇ^ê5]Òœ ++î Š ++0Ö$ »8ZÌÈöu¿@B, p ™‹"nÂÒ©?CTãÌÊ" a.&pDÀ¯,3ã m¦Qžº Ù-È*ÈcC@~ ++ˆå ++ –j±ú–ucBL „àå pžÌ.|PU~RëuöÇ frhÀ5ú~¶yÆy10†ñ9®Vra nâ ††w{fâ~ZsÆ¢ÌD‘ªxB”åê  ì$T .1ŒcNx ‘JÎs2v$Œ 2v_@Šåd[7K ÷2v,H·ÿÿ¾y³ž‘ ¿yN áàºsºsñ  áH'¯N}µõšs.Hÿ*t7Þ©ñ² H ê¤6¥6¥_`ŠåHòHH^(`ŠåþÎtHH_$`ŠåèH ¶s.ÓþŒ.Âþl.±þd "þÝL`9 +m§R!pšXù£tPïR µH[¨ðTþÿêRŠPhBÞ¤”àÔ5; ˆB§ Z†å€ ¸<㪪Q/á›SŠÅpŠBܼF -—êZ. @K”*ŒF!—ŽÆŽG!‰SŽGĪBÚ  Ø 6™³E‘ÒYÝ!° ŸÝ!1~ç @=~ `="~M| bù|4Õ!$Ng¼  ++I# ++°3šUU ã!“p€oéa Ù*Áá/ p˜%p ÂBà~Á=8 2ô ++›kò0° áp‘ Àý8]@ à›åR´QRãmÄ`›³j›Úš¿¾X]ÑDa¡ Tã¿Êà›M‹Õ0àÎã-¹è_!à›ê´ê¯Ú9 ›~¾³iýb!›åÖ¿ƒ³ýÜ\ þX?‹ -@ °šå2ÅøÚ'&V^ ª†í¶ ‹åȶ1 ›XB$! ána‹å$à‡â³±@kj†›å$ ã &© :/Á-&šs:Za/—m›´Ëjî[p)*XÉ0TãGÑ —TaT}T&L’ñ t“gP2/ áô/ /°–þ ʧ±NÚnè}èxè±  Ø—+" ÌÌPÁ¼X"àÄ,&à0 öW/ °8÷l.U|”&($L¡L \F®HÜ/1/° +… I#c‚¸é É”a<Àšå¼£&œþFLEmFü1›¼¬d ÚL!›$Jf]æÃ@ºÀÓ$ ‡â$Žâ Šå È Á/o/´šÅq0›å 0ƒH10B^'i3oë½ 4/ 8 ¼é8 4I»Y…AH*I ++0]ðšàH ÒÜèÊääêàèø“–ä ÊâêÂØ~â GHæ  ++Ã)   ++§HèÆÞÜÈúô®ê¶ ++s&ìƒ!ð5x–F(äd!ŽF8æ è B0êXQì€ SªàO¹ðúq2à°&LMé-Cšî3 ˆ¹ (¦W e@QaðV!P h!P`Bö~ØødF¹ÔL Mß>é4L L  L L >‹ñÕ¸ 4 Ý *DÄ4 EL eL³Õ´4 X ++ôðh4 S,/W4 ’ è #m­mVßšBò  à ( (¾Áœ yÀºu =Ÿ(Ñšÿ•ç ++“ç ++ské ö3l Lpå4®p ˆ!p@Þÿÿ ++Þ,+$}Ûx5 ã"Ë ++0BÞåAo ++ã{ ++@È#sì.‰Æ"0Ÿ( ++©X[XáXXLDcÌ!1ì"P$ø/ s(hscñ}éS .D=‚w ‚wN áL(âLDAá á¯TA ª&ðcÍX[ÍHÍ@ÍÚPxœ?ò ++ °Crô°X°IJö° â °ü°ÿ}ú°´ø°=` 4° 醶¸¶Ž ª«Ššª•ªª8/Áª  ++ª ++Š‰l-/i–C/Á–;–<a–Lm–h–.ñ0U–N– Oá áNv’ìÈv9_ úøvúvüvüv/vÿ|/v´þv= .vs”6o¹o´X:Ó@w¨‹•ww‹w+£w·B 9Ï,>Þ/šåž I& N` ‹ l.‡.}¼l{\ Ds)V`lÜ/Y c(rcm>å>XkQ`@ظ<GøŠ3ø âþ ++(G/G,G)GPÀBÑ$G*c8·!/!;Ñ$#†:"{†å †å*Õ$-âÕ$ ++c+é°Ù$ÈÝ$x ¨Çnâ9fÀc ÓaBG ++ã@Ô;>#ã^Ê5Ö"0!C³pÚ"Ìõg/ pÚ"1—LÚ"˜.\"à”D0—åÞ"hÆÞ"\M”kò ¨Æ,¹¸š¯“èAZ.`ç !Šhs¡gŠ ++ 4H"pkeê8£  -(/\-( x ++ €PiPaPP2=PA# P;P6@@@•@@÷0â0eTD /õDD$Ç<Â<<,¥<Ÿ<˜<:Ë—<X<Ib ++<U% C 0OÁ0BUIàž5Èi6Fà(" »AÁ B 2ä³u0ÖoBÿ:ÖoÌB_šBY ++Y @ —åÄ'& „ JY Y :}Mð ,Y º–ã"wå¼F‘Š–‘l ü´+êé‚–C0‘夶+¤¶+1‡Ù 8i‘É‘ÉP0Câ#1É?Cà t (0 ²è”Æ=Ð 8  ++-)RRMÈ2MMM_å 0I( _ åì¸/Ù›iO0šåÏA¿ÿ>­.c u3ƒŒu3‚üŸ7ùÒÍ‘?0ÁéBÊ;ÐàX輡/Av½&AvG n AvR2× q0 ++H k RvPPB † ð† °.o† g† V† G† A† <† 4!¸ ++,Gâ†o0žå0ž 2/ ž ?Áž ¼ž @½°†»’ž ˜ž O’ž  ³% ++@Z&</ 5<±h$ xfHf@f/< ¶ ¶ `d dȪH98êH ¤ ++*.! ÀʹPÝÚB"  F2 ++éu—¾& þ˜w‡#‰q $Fuýõš“ à^1vj ã—Åâ<K" pË ++“…YSYN/ Y€p ºZ1 @Š® ¿1< èã+|&“ ˜@+'ƒ„‚ hT3 ã¯¡.ªÿaõ‹R¡  .…Ôh×ðaÿÿê"ò ++ÿÿÿþ’(`xz,À@*e0Ä>@*uÒÜìÂØÒÈç L*(Ig Æ HÜJ1U¡ Q*8X 4$Jd3$T ""§AZF_Z$ ;&8F*  ðh(  :|:tͯ  T  NGI  0!œ &àIÊ%à”#€\ÿ:4k?„Ô ¡!dTàjÀ ¡!í# pe Ô +Ad>0p± ³5/@Ô ´3¯Ô @ñÔ Œ3…JxÔ ÀB0@Ù Oú(Ù *Ù / ++( B@€!Xn ‚ (å«dHB ++0­ƒVÖ 8m_FÌ@Þä¶xÖ¶xhêÌÌÊä@ÉÕ$6$@†ÝgäÒàèÞä[ š,ÝþFùF#@ùF&0B8µ>%Šµ/à¤!n00©…%r…"/P PÆæRæ¾ [æqqÀ.À6 ++Àü@tñ à‰å4€‰å(P‰å ‰\á! D›X3Pão tS Ó4€™å(P™å ™å@_ €âö8í<ÃZ. ++°B8 cx0ÉðPtv  H ÍY‰ áK#¸Š§½X˜Žå”fTRFŽ­XÖ‚ ++4[˜3Ó&  ãD}K¾p[ "çžþ0·Î Ë#½Y9Y ø)‰ " 07Œ! ±K@-KB]Pû%™p@¬Õ<¨!Š¬(@wîô ˺wî à„â à„å0ú3„â˺ÛíýG-ðš!íELT¾. ¾HbA^:2âåUX$ ++ ð0z æèÈÞêèq³r  € æêÄt /LLæ Qÿ_0B$¡‚Ž³PÓa0,ç"ü6 ++\é`ê+ ++p ++d ñSà†â J"à·Nñì ÁÆ(×S >7"øTY ¬ÜYf ËT# Lâš50Šå'L¹»"Äø.=Þ à :=V9¯JçS/ çS ˆ ˆ .1ˆܾ7•Ùó ë _O 8æž /±0_„:$6&ºgO| àÒÀ/,î+ üææ(Ôû (t ++æèÈÒܘB\  4xOXyOð$ LF&>´¨?¡yOˆyOX }ÝN)À1å-~ åNj­O$W­O)­OF­O b+MOHPãMO3PãûB,ã]O/×½O½O 0ÆO O]Oµ]OŒ  ™Nb †å!0EO%ª]O.-YO,YO YOR°†åEYO–UO o¸5UO„UO¼]O ]OÔWîKx)&è>HUO9ƒåUO“UOêîÄœOàDâRI mO #mO1ŽmOmO Ž– @4H°qO“qO?ƒå¬Öo¾ D1mOƒmO ++ƒiO¸wLõYODO3N"ÝN| )TuOPðPPn,`Šåöþ´PP2ÞPÍO !ÍO/Èþ]P .³þä ¢@|þÿê™\± ¹OZ­F¾adLŠ ñDL¤QEþÿêPµOˆ'6 ðb7Ø´ ¨¨ f½O<ájÉ‘jÉj4¤˜jLF;à>v -‚)0—¬ Þ 3“åw3 Á" œE˜* ð§Ü.¹<†Ì=›40 ã #E›l eP$.1x.Âÿ`»`pJB¾á@ ˜ ÖúcìÊÆèÞä“ž}I Lß W„* =F¹‚i‘ˆÈså¦`ÿöÇ 2Sã[ŽaÉ"00 ++_óMI_( Šâ¬7"ô91"(q( Jâ š%¯!Ž“0Nà ‚àÞé£/@ùEÏ @DùEeHH.ùE ­hCF@0 ããždi"ô}IhfDÉ€ITuÿÿê0É,e8>(ACîäÒè¡Ù0O@@wD0T j2>Ú´Š4xBÚU0Iz4nPn Bê6Š:O/:û/A û¢h8 ¸‘PûHy7ûçh‰ ‰ ±‰$U K¡A¡¸¡±pr:B2c&;8xÌOš89:ËF98R@/Bšå°W#ñQ!X¯0†å †å°ß, x àþ©R€ AY" p߸"žøÂÖ,D‰QÇÉî.(‰Q U²‰Q ÀêtgIQ -]å༺1 Ž×§ñ Žå 0ŽåpŽåÀŽå°Žå0  ã Žå`›å›å ›º Bâ! á IQ0aâQ± Šå›å L@à Aâ àA á Wø Ê ±ƒWá Ú½¿.pÏ"( ÙN1üÀ O÷Ÿòé9S0@Šå4 OÍáQŒáÀ2v´ÔÝ ,¸¢¼m,,éQ XÀÔ $`}LšË ++$SD¼| Wå!Ê(F#WÝÊ$Œâ$à ÚÌ"pÞT' °¤Ó1+I° YR10›T'P΋å àLà@Žàð( ++|]‹å pšÅâàDà$‚â$  ã0 tÁÙM pàlÐ "< E9x t!àš€b ‚âˆB. á ‹åp*p±®` BàW±vPÊ$ ŽâxP t੨‰NN ¤NNN €Ü< Ю%„ùPH  ÔE;H_! ЉQ"° i ÆgC!qý•Pr&*$à„ààà@à/mà@4_0„à#` ¼ÓÐeQ 8Á [ÜÁ ,ò‚þÿê0ÊB<  @ À 2ÜÊî'_ £}t$£vžv°¢ —å —å—lh_? )$: * RCsT¬ÆA¬öÇANà 2ʨÏœj—3"á=±°“D.Ê8 ƒà$ƒâ0—åÎ@" Ú ++M$M$u!.!@šï30žž°@ BàÜJ z œX¼"@ƒN_Æå$á$. ”"âG**>äH**™— ?—&_&Z ++{ Jï}tÛ;!H¿Sg<Ð>>A8@ò0éR B< 1 "øNp BBÀ ˆR âB 2 °j @jP ˜;`òB ++“$7( ++(-) :SpS)D@ ž p(uFHŠ<Lª/7– %èª/›OJ >5~ ­E/ ±ES>5p ¢BHÁ$?ð (n (!L‹`'$9X5 “X SQãV¾`A áN Q‚à Â@Ñ éÆ!â.%Ý- QÀ&Xe¶îïCQãzhiFd£_v%ôc7.o´ /tŽ É0\4X&^r€Ö8"ø3ÅK.eE#à1 dREµP Ÿ ÅK/  ÅKC/ž§|4„´t/ „†]@€Xâ$H0àšå‘KAH°‚à àÀåàâÞ&~ °ò&, ý›xÂ" ÛT  p$ò eA "0;YÇ^C 4oq·+>QL ƒy/2H¸­  Š· âH ++0FIzJ79…/L¥B_àBPFüNFÿÿNá2PFTÛ2ð/R FÿêRQTFå/V´Bÿ ‡ ++´BeVîSX²B1zZ²B¾Z²BZ²Bl\ ++(²B˜²Bhd “ œDD°$¶<à› ñ› ÆKh^  ++èBVKNK=Ks•´$+Xl/ ¸$C<YC²ÿ«ˆCp^€Bbñ$?0 B¦? H¹" Ä/0C³€€u:u¶ê“u:S)6Ζ”2^Z?+ ‡©‡"pfýo' ++†%4~/Î  ?ˆ ?}D¶  àÓUaTj…tC  ãÎbɳÉhç / `†NC³:Ú,?g0`XÆ(?s. 0Ë>f¡X³/bUUö!9ÊáÖ/Xá CúdÂ>P°h`*7´.àG`*“Yf  ¤–¤͆?c¤ ¤ñ4Eõ¤ ¤ û ++¤I Ë‹ /1I/ç!©ç I$ ß<.Y°r¤|ç¤OfI_ ÊfÍ(;h0 l¼ ÿj¼ ÿ}j€B"jlpöðnÑEÈï’ïŠïyïjö ÑE<)ÑE%o áE¼ ¡”à j0E@Pâ?¾ù< Ã/ áÛà M~õ4bõš@÷/™)F?š=I÷vßox)Fs¾C@B,‘E@ùOªnªp4F.F ++h$ú .F ­D…^P0 :× ]EÜ Y zrT ‡@C ‡@0tUÐ#ri¨Â•( $n…æèäÒÜÎY *v€H•#xH•Ê@XD| % H•‰H•Ôø3TãÎY?H•{DÂ4±À¡À{D씕‰W ++ ÷=‚³DTñ¨M`8Cc àÑÝ? ¯D8 ++48 0Äà”å “å “å0‘å÷wb 0‘å0ýƒq1 0ŠvûQ@L/(0ËC"àÕí@ ü ++4Ý"àTˆl lt,th± t "¼H•(P$æ5“>¬/,àl.g~p\D‘pè@ ‘A÷?`šåðå„•9…A ßEs ++ I¤rO@šå>7" LH§H–ÃG‡ÃGƒÃGpõ¬&ÃG@“ óÅ*1< ç$  ßFÄQ H•Þˆt( ˆ¯5Æ+ÝEDlÊ//@ø\¤¥pìaD`û0?šåYÜ*å( áÈ­ÈœÈÈ‰È U +½°È ‹J<ù<ÈÈðø\ \ •&H *‘H" à@D|LØL”˜+ %Œ››JèŸD€ / @ÄT•% xàà0ø , H?šåSàQLÿÿêŽÖ­5 HUJpà @ˆxEJ~EJ8ÊääÆ !P9z@7tPHP/x ++4 X ª| +++¸Kˆ†~²-ž ++ %b‰ ƒhPˆ,P ’ %%"’* 1€(   t ˆ ( !$<. 2ú ¬òÕZ 1C"H10‚uF9à‚vnß+Ú™êen> ú en:Ïê»#’1´Ø Ø09p‚S+¤àÅ~ .mš" àÁßuD˜j!N . Œ/ ÞY/”Ë+˜TTã]4µ°½ŠQ8P³2â¹Gƒâ ++ú 1Qá 8Š(³ ùQUœ= ++½ƒ*˜„+M/EØ~Š !ÀŠÝQ#°#âÖ iEˆ1ÀšÊ #°'âpñç p@¨^ €8j ++Bp.ù € B† à 6ŸL Ò þ:"9iþ:r6¶v«L*>È#/È%àžè*›íUNà øH¤ø ü§í#I/( TñTùAþ˜.5DÝêΓLQ0€å€ê€jÀ±|— °¥`%˜2x2x 2xŒ&臊 Pl¯ “à’å^ãBúÈ| éOÌ&? à’9_^㈠/9ˆܨT#Tf(LÙLA[ˆ ˆ …«éWKOX¡"Cv_ ’åT¡440 X ++T&E Ü ”¦+<Ø£ ++ , ,X Ò¸iÄÛK¬K ò^ÊÜêÚ›#¾ŠäBeR4‚ FZæêÄ"%0ÑRØ&gB€‚Z„á+ š]ëUï”Ç5Ç Ç&Ä'Ë 1/ ΘZ—ZŒÙ @BYÅÇ# p<¯ ‰| ë !pšÞòç¹ò´ ÷"­|öuö«G ¤¥0z´ˆ´$$ VÖó¬,9„äcxe`d]Zmƒæ@ÞÄÔÊÆè'ƒ´Rê†Òy+ ++ …+5ˆX˜ S(B† òh0Ô À0ô †¤=E;gêˆ ++@Ox ?*HŠ{~/x "$xN0NS ø íø º ++h /ÍÔ ÂÐh Ì;î” € ð x¼ ð „ð áX ˆâŒx-|y~x >/%IU%I°OK30È 7Sã*ÁºÀ+ŸÈ \º·2°Ž/ñ! K.i„m%´ ´ 2) eI¨s8  ´DB)eI8µUU® 4.b° ( ++ Öe²ŠPwºŠ` ª)m° X&!^ó~ 2Š ++H!ÜŒ&æèÂÜÈÂäÈ"l,_X’ #$‚мß}¢uRм>Ÿ;`%2 i"é+OxàF'1'7Rã  %Î é~â×/—å ©å>ã#R#× % ++Ny %C0¤º ³ž¶bñ¹Ž¹'8È >¹d d*¥±À&5æmmÿQi#¦ ++!´E i¢ ++(æ ++<ø´\5 „O  ãy íá°$ (-æ¸À&6Š³gx&CŒ _äf"00"5 xÒŽ ++ø¡A5ŽHA 2* Ž Œ gá{.< ++0è5¯” ø’¸] , ++”Õ4Ÿ(0äläæt—hÏžø'a¢ E%Ç UgÄåO&  ãéA/ƒ åñ\j ©ô(B˜ h ÞÒÌî òAŸ&." «2—"¯À& 0™ « Ú" 0–î K³ý¤dK³í ++xd"`]0&Vçr; ++–´ùŽQ4øc# ++üö‘à–å `–åæäº ++×#ò|`Nœ +¥ ` ¯È®Ø)ØØRØ RáÃ("Ô±ÔÐ5/uÐ #¯ |? –vÔh§Ã0„pŒDw!.Œˆ€za/  v• • s!:†ä†°DÀ"@0?pº ++½$Ã!zÿ|p¦¼CØLÄÄÄÍDöøî/ 0(œ/œƒ©.üþ8 ++œ¡ /%”.¿þ„õ¸þÿêJÚ ++ØÒæIÖ°–(–êÜAÇš <ÒTÂèÒÄØ{æg!ÂÜænÂhX>‚˜8˜ä ÊÈÂUœêÜeˆš5 53@ "TuÝZ)`»jPœ(Pý–+°è àp$ ++pH*þUR˜Â½*˽*{Džžì!(w ¥sÛ  ¤{Xo(¢ gmÓÓ €Ã€ õ/ü  õãïaj Ù˜i6¤X k"¤0ª ¬Ûf@® (¨Îàê0!ý8O&0 ãÈA/‘Èáô_‚¦Âù¨É¬rˆ ÆîÒÌ¥"0Î ÿFO“]Ï?óÛ: ¶y»Éë¥Ï§ìpµ©ÏIϼTÊX€©.šÁAÏzC"#!/­ï#!š~ÿF€’¦8åÄ‘x’¨ ++ÏbPº ³oóXB¨ ++ª Ï/¦Ï ++¡r^8Ö’c:¬0Ö2Ö‡Û¦Û°Ûop®b*#a/%*#ÿ‚訒°¦H¨ïkb°8ÿ¼ÿ8¾ (±?äÞÚÿ/²Âÿ¸o€d îÒÌÿ°ÿL€ÿ ÿqÿ°ÿ Á<°šåÙ U$ÁÙ $G!. o7 ++ 'o1°‚‹"«+ñ Ža‹p87‹Ÿl‹¡‹! ¶Â% ²¤ï Ç°À/uÇ°ÀL€*DzÇ2˜BA´A3ä0™EÜ9’å¡’¡µ#/¶(ò@;ÿ%#×<3ã-ΑC 8)S…/à‘ðžå0žå0Aà 0Câ ”P0ƒàTVQ‘³]³]D Aâ¯])etÐ*Ò‘0v; ñhñ&ññŽ©ñ‰µ@70Å’?‚åA;B0¢ÿXid·O¥m!šåüY Ä„F @„XPéʲ®²Ü$¤@ )ãú$â$pŽâàW@ʲ“…-{ ám'`ë:"0‡Ì[[à[ ¦#0¥-x/ E!YE!#0¥-D# ʲ s ‹)†¸@‚—^uâ°B: ++@?IÄ)O)1`tÀt– }Â#à‘bÀ –Ü• øþ'âëØwë-^šf*²eÈgæ€yÉ,í]a¹7¢ 㘡õ]%YÂ;$Ì R<>ªK oÌ+$BkPs,Dgº¥_¥PÐäe]åàÓ" ½P/ M/9Ti]¤¼° ¤U~Ø7켌 „/ „¡ì šE Õ‰ˆ•ˆ·„HÝHÅ„Ïÿÿ ++fÿÿ꟥"À`°» èù*ù*ClPÄX§]`8 ÞêèsØPäÂÜÎÊ! ÆË*ÎR 2ÈÎ/0d ++˜€b8 BÈ@*`ˆaívÇ,rm¿/@Îm(šj0áO!@’å ++ =@Û!T ++N`!0Žâ œÛÕ0Õ ë/Õì $1 ++âeÚ à S(ʨ x Ò&Îu/€ 'Ö8{Ró2ìÜ_3âìÜ@‰ –ëÎ Ï%‡Ï:€X–T0nâ 0–‚óÎÛÎ àW!u_"0÷ Þ&[/âÍ7U4Œ!E7TAÜ6²€_nâ Ð#à€6'k‹I>' / :(=3ç|0 Ã/ Ê'$j'fêÌ ã‚GÊà=8Ð ,1(À€ ¸ÌØ2H½B ’TÝG4ÐÂ=Ê¥%0úxuu o ++á ?@ž™(ê©(™9™+í@í0ƒàéééåhÀå HÜ"ÜÜ0ŽàáÝ Žø,/"p ÒÕ?nâÑ¿,-ÑÑ@ á²v`âq2w‡ÙÙ+éÙ ÙÕQºÕ³Õ+ŠÕeêÒ¨ÕÒÕ}¸tÕ5àNÑÑ ++ÚçÐsç5†+tû"ª]ÔÍpYÇÍ·}͘Éy/áÉ?/5É;/…Éo Ét‘É4ÙÉÉÅ<zÅ-O*ÔÅH:ÔÅ€Å*/.áÅÿ{1Ö,ž¾) ++Á°/ ÷0<º,©M(ºžºWàÎã.¾¾ /æÊÜÊ& 2Ø +$ ++È» ÖÜWJ0!87Ú"+(Œ‡ÿ6ØÚ:Ük1ö:C?dÆêæèÞÚ7ã½ø € + 7 #iÜ1p áÅ:ÀJÔÌ4X3 0èÛùt3\ 7[ã§%ý Q\ ë #%áO%ÀO%Ñ”.p”Á_ã=pŒ,±6š ++,Q„åp„Hrœ  \3[ã„_ç B”y³œ1s_à†å @«ã_À†å«ãN”b1 †å5p9ŸãAE57 ® ¤2b03 :†”2 ¿ä/%0ô0«ã à „ÛR“R“€¿â E  á€V“?‚åÈ·&õ>“1Œ TPpT‡å°‡åooóD «_ —([D[ã8¨( û ¼×'!c0dˆ!°3pwI@Às•âÔ¼3pw€.£þp.œþ[%pR’Bã(XQ ++d®~(Íߺ6à]á/ ‘÷ ++ÿµÎÏ`` \ú` Ø&TW àåTR>Ì / ÿ=à*ü&É WMÔ*¸ H ÷3à8*Áp¡ª²ÞHð x2Þ ++(ùG@Bâò-Ðì3¼ "0p¸ °Ì ™:7L,(- —Ä  "pÜ" àí" 0~D$ "ðvE"$ $ JâpšåHZñ& 0‚E `µºBà  P<äÐ ++JÝ­ Ÿ"p(."£×Ñ$ô!ÒDÒ'°'´Y# ØÓØ hnpÌn ÎD4ŒX  ãÀº Ráʘû×} IŸ8˜"p¼°ù:UÉ;¨¤@À/¹ÿ×Ø&0[Š6ª @ &òŒ$ &@Sl4° ÄXY/à &4/@Å.84Ì_»8 &Ab˜d˜ä D9PäÊæêØ?ø@‘,@zKB ”%ÊIIÂØD JØ& 2 9xPF5âHRêRp2'ƒA€Xâ‹_>> ED1/©ED˼þè?° ,"ð ·¼=¸üÄ ü-ØH¾L.…LÏ˼#0‘%( ã˼uü/*ñ½¾*Ó|Ѿs½>! á ‚k½B¦*‘¦*p ++âBæ‚3  "‚¡ÊB²A™ K•5î„œâä# z‚ž=mÍ]}m#0›Iàqq@ºhŸ qÁ$|Ê5 àÐñ‘‘"0â…Í .A6ƒ K• Ñí²>1 ++A2à9À<4•æ}g! l6è ++0EGjê(2ì· .lUVõGN7^ã7JØÒ*åšD/ 0zi.™_JhÒ`06 `O0šåÖmÏÔÐ$&s ++Bæ¾x¾ì¾€$!ˆî  ¸Û‡WkÛfL’¼a%Î3T ž% ÐÑ:ñHie/9 rø ¾wx ÎY x3TµœÙÌ mLO ++óÌ `( :ÆÂÜá‘ÈÊèÊäÚÒÜÊx£ò@æèÂèêæ(Í!P‹Qzî›5(xVa(†ðd 7'dVl²–Ù $,àV$äyV PŠB ¼Ì>ð 0V#Åÿ| ++dðüè©ü ûþÃ%»6ØÉzLX ++8€°àÜg©|7ñ·8ïÜ3Qã$%)“âQã ï(,@ºuòT ãI5)àa““´"Ü7 '‚ ,*{Dn08I×DEK@Ýÿÿ ++lî\¥\ ›Œ8#‚ž/8PxDšåbíFòcu0cuô 5 u}WkIXsM J–žÃ£Äñ ++ý¿=Z"Z"k,E º$º‚Ct] 4@Rà3t ºÒ ++þ ++3ا Y #_àÿÿ ++Ñ /0xÑxÓ:|• ++Žºò"èºo0  RÓ°`ÚFhB(tV‘HXºô, ++8==ö\¸#=r+!FÌú0(8(›="ÅiÝwBø ++@ýPúH<Ï|èÊðèêÂØûUË?° , GoücüJü:ü6ü.&üü.üñüçü×üÇü·ü žüŠüüÿü¯ -)ü)ü9 à„øøQ :/!Žã¸m¢q ++@Dâ hO`â Žçø¹ O  áÂ4îzi0UB2± ¤(ÿ­–ú• é/b 1 -\ÐP P 5E º … /dš¢ú M"ú þ èü 8Ó %?@nâ Q¥ ˜Q 0E393E3+E3 Qº<E3ÿ—O˜ Cºüð!eRü¨üþ/· Œ>€ .$;³+Þ,·o?ànâ!éÕwÎW= Žà”#0‚È7¿È7÷ k4 $kø$3ø/.áøCòø `ôôO@åðE9ðº> ³ðHÐðIŠðBêlð&ðqåÒ˜RðDðèðèÃ< ä,ä#²xä/ ++äÿÿW/ ++ä/ ä¸ØÌ>à 2,å.åLŽC0Žàkn*áÝXÀÝ) Ý ÝÈÙÙ-ºÙ$>ÙÈÙ ý ++ÈÑ2ÑÑ F ãB40ŽåõAùA)0ŽÈÚ •õßà/Ñ)UÏ|ZòÅ2:\º×  V/$  «fEWí ++ 1 ++ Ýáš÷oR0C/(7(C ++/COrC0 $ÖIÜX} È  ++1 ºñoHW7 ++&Z}'ÿÖÖÖ"›" © @ º+4ˆogé%>`Tá»*„"à㪦Xõ¢Å\u ánñN]" Ø0DàKhµÎy(pŠå,Š"¢®"°B€" (º"ü]ó¨"@ºpä! ‘À á6\ãH¢D\ä©ð ++ ‡à ‹à pNàWR:0 ++¤îþ"`„àÎá á¤'‹JL3ºÎ])Î]C†å  Çk ›0:0<0à ¹É0êD!C6‚KKŸh‚•Éï?öÝ?"Kl|‘® f![S4 ñ ±ó!0Š<¹ªÔ0u& `ÔMZUØÔ0u" `Ôd888 ++8R×i"RN#àuqI ´5@ñ\%ÝËn@uö€Jø)ß „TðšåŽàÀF<BÁËÛÅË?„åËÁËoÓ_l½Ôk Œ.IŒ.¸þ ±³D>2” `©¦aˆ˜ X–%˜ª`HBIò 0 ÂààÊÜÈZÄØÞÆÖæ1b&0ã jã St £ôDql#-`£‘d%£pÔ`E€pGà$0‡âÉŒ$à0 ão"à ‘ØÈ# “®"0&^G ++˜¢0žå žå ’3ü!ž:§"@ý¸ø/× ¼j³tð6P´ /¹H –ª‘ÿÿêšÛ!§5¨þF&Yâ sŠ ++8Ó X·a2/`Q –ڜÛqX8]];0 ,wÚÒÜZÚÂðh–WaM§ c5à‘±0@9 ++µ‘ÖMKPàG ¥Y½JT"àKL »RpGà ‰AÚàN;Êí‡B@Cà¥M šå›3¸1 pžœ"6 €F ˜ T¡ E `ØK /Ü °=d ++Xƒzîw ++8 ˜$ ++°ü ++X |áÇ@E/ ´.‚Þ> A /Tå ++&„àC¶Ý XCXCËÒé ++ƒ Ý .˜ˆ„KÎoʇX@"@Y¡tDX ++¸_"4_ "$4?&(´7(Ö/x ":ˆ:n:^:T:D:@:2:0:!:: :/ >ÿH)> {>Fª&>&>$&> &>&>&>Lj(>;*$G2ÂØØg, H <âÑ”¨~Ù<Ê„¿5d/ 5  (_®t@‚%†PÌ-È|@Dà ›(ù"öÎ  ® ¡ ³&@Ò  ñP³?Ÿ ++Žàp‡àÝI¾ÙÄÙpï­Ý ÍÝ~º)W|\æWˆÆÛ Åg“ˆ²È!mÈ£‘‚& ++@QÎè'y ÍÁ«qP*/(yp>Q„V ¢,?*qà* 2<àT.ÎÊ2Q¨4Ý2)` ¤e¤[Ã2¤9¤ ¤.¤" Ĥ4Ǥ¨¤ ‡¤ŒN¤L¤B¤9Ç/Ç "¤ ë1 à ++ë1äÐÿîÿÿ ++àNâ ã †â‚çøÛó×¼ʼ‹¼€m¼^P$KPÏ ã†âçø<ïÔLUÔ,ÜÔ # ô‘  K4\0\ƒK4N@ áÄÃyí| (ð-.•Ø¥ðžð >ð.ðO> ++Èð2“N¸0ám[ ++VáL¹ 0å#0å@àGàlÑ.É.¤í0íý8"0ˆ1&Síº>" àƦí01/?“å×íàíqí OšåÂí Åí “íŒííì.ÀéT2éú éE¢2é!>é12hs ò4 ++àé >é.V6é$Yåÿ£6å6åD> ++è¦ ++.å ++(² Bc²88¸ ++«:â ++Þ4Þ _âÞ/!Þÿš8 6î8 $8  8 8­&ZÛ:7<9×> —ˆÓ<&në@^“ “¡Ó…À Ó ô è ++ô  è ++D Ô ÄÜíïH!ï„zïú· ++(CA@<ï6ïD> ++ði<>_ Z>>;@ ÍABë è4è Dè/!èÿž@H@H$@H @H@H @HLjBH7D@áH2+È )°/LÀJvZâþX;˳݂'0PÒàÝ0FnK  H %ýNÉNºðÀ=Ï ¢‹©m©"(àþÊ ö ò /ñò¡D¡ :Ú0Ú #¡“?’=è’ ¢Ö½ɽÿWf½ ¤6 .™ª ¤z @a † À<¼ä7â 0ÿ#‘‚”D>ÐO> ++Ð2BJFé$@¶CF ++ :Jª ++„¥.0# r{PorL ++(" 0Pœ3ØÒÜR¾%¸ ¸0¸r¸ôÑ/p°SÕ°Ñó÷•AN·ª2€Þðæ×ÿÔ§Ô€ Žâ ‡åèB@žç6Ë¥ ++ô  ++J1TáäSÊ? àƒ1M ++1MSL%0C1M5 Žæà’˜³yœlA/A Bzd ¡b8úT¸SÛjP Ö"Ü@ˆ ËZšTË!,ž“ ¾àZ’>V…i…6âY;Xž ++Zž ++7\.7Z¡Zv©x/ "V+›uNµ ++!ìé ++×/ } :Út³8uÌ 0O\™ 0NÖèBr Ø *³< Á"SûK³ ìÜWá³™Ó@«¹í$F¬k#§½& à+©+š`*‰`*§½¬t½ “¼Af ++?¹§½$]TQÁ ˜¡D^KB{Í £ {Íç¹ *t/@+¯¼Ò­' I& ëý"9 )»(*E0WûPѵQµAÁpÙ´OiCß /íiCÐû ++ `q +Iq\"òþª¥1þþÿwÐ!&E<ÿÿ ++H3Jbô»iè^6¼Uº$¼æ å!ð` !P .ÊðèäÂÆèZà I ææ'ºBÚÂæÖü(¬."L/ñÔ&â,¼"æ,¼_(šå,‰åD½úÈÊu*‡É½J„¹„/ç„^ !„Ÿ¡à ã „„×b „xgÃ? ã„gè„1 „OŒ„>„_€­„]E@„é„nÀ1„¼|€ì„¬µ„Ô   *„Ä/ê„nð9„«mOì ã„š„_ø½„+Õ"ë „që„nüA„YŒ,„H„0„’Å00„1šK € €!€W €åì€O0Šå4„’7I4f4 Jâ00³æ,0 DO ++ ã3ì¯_: ãÌúp"ëh¤ ´9( { _ °R 6|ìT)ì•" äé+­".×þ S»þÿê @® ’@ä… i ˆ\ @þå(,3 _þÿê,¤„*!àÑ,{ùýÿêhr|Ä0Œ# xá@ÌðØÞÎÞä.LP/)?P ++@'qw!Z` ++})_pBÿ8Bn ð 4ÐÊØàZi(€¥Ë¥Ëª Ñç3ª .³ÖÅ_šå þmR66/4@ @x8xAž "88vx.mËxKa™x,xJx/ìxZqx(x'xðKy‰x$xxx}Íx‰«Ò&áÒxpI|K~}|S 0šå4Bªi, ¼ë%G`Eâ0€²…Í Í…Íð0å@å(àšåàå$àšåàå0àšå#àåp1'à„>+ài« µÍè ¦jøPeèy gÎ žå½ÍáÌ ‘Ì.ÅÞ;ô–¹Í„.I„ݱÍL•LÃ6DÙD8bÎ×2¶,mÞ4mÞaÍ+1±ÜeØ º+Ešò¼¼³1Ò‚¹ :G}Í<&† PõžÒ¯Œ  Fn þ< *q˜/î (þîŠNAž¸xBb À´­Ý°ôiNr+ÁhSŠ 1#0—;ÇM ' 3RãGr͆S° ãýCÀ ã5C` ãmñýå1Puæ²Í`æi# °º!0Š£)|1 —;É L<"p 9g &jH" ù$X %+5%pädIg :j“`šå šåÔ ýmñ#`ýÀ×ù"°<íζR0 ã°ÿR ªÝ$pN? "ë5P—êèD " Î%èÎ5b-¸ÎEhd/% fÌ\Ç>hE@jClX~=\E»\0 lÊrÍ+ÒæuÍ<¯@2¼&uÍ/ ++(, Vún%pÜ/pcÄ*ÞÍ,ãÍ S ¢r²?YYSRrö ò€ù ªX=^6pŸÃ tYOà ,Hñ x/&ZúZëŠA50‚_Í@ÐÓ̵^”BŠå„^ÿ<f£|”á*Z…<f€ šÔ%kÔÍŠ/ ++ f$Ü TiTõ# ˜­D3Õçáçû/áç1l *!tf̬œ®ànáÔ9Õ) ,, *9]dVð pÿ?/ '0‘ãÍ 4¢ å¢  ¶/I¶"ñþ)´"ýþV^^@^/_S`8$_n(È8ÃœÓ4Z Št¹b:tp â8Ϲ2t`¹O ¨2¶Rv&"È ¿@Bx   }ìr}ì0}ìð}ìC¸¢­(@ º\ó?.$œÜ€ÜlÜ®JÜ1Ráe 5$ á„å4Í<¦× |ƒiJx]»&0ZÉFx6* `†vÉ\"0؃@|¨X ¼0ïEÀ `p 9æ@1æÛ,!æ §4@ ¼ /¼ ²hNp ã«S8ª 9ç- 0}ì>@}ì0í¼8HHpHbnºéHÈè Á3HN´¡LD.)D·0$ "0X“CÌGÖ &päÐ&  %¾É´Nzö"€,±Ø° ãÀ ªÞ <À,–å^Üw  /ÒÞàúÝ1[ã×U[ÒÞb à á°þÝ܈ÑF" ‹Äy@`Šåƒè#ÀT 10Šå\jìá+P`šå ÐÀdc$0šå(p@è.èèRèRèFÞìè¢èä=/ÅäÒäÌWäWäpäiäÌ@/­Ì;èSèSè0è/èè@/•è':vñ!à–Dr@- ++ ü'–<Ü@^ã¿N,Ò ’á0‘å÷ÚÞ°¬/à°/E°¬"à<Üx&(%Æá O" ++”œÙKäB4ì˜ `+8ÿºá0 H ^fáÓ"Ó„#ƒ-ƒ€ ++¶Ll+§ì*3 <.L?[á?L0¸+¸+#Àd¸+’‘((üÀXIÀHL”? ä#ÀO_ÀMM–Î; L D-¹iLõd4Xd dH"Fïd‡dP,sP „*RdÜ–?GPõN&¦äŒŒP Oþþÿê „/µ ++„Åü*"tý«c.uýˆB> ¼ ++”Ì ´ ++.7ý„£0ýÿêžâ‰aÀœ ++~ ¾ä  èäêÜÆÂè<¼Xj ’‹ošïI)aÚ”Hðä2–" ¢"˜nä >#rÄš( ¨ÜÞÜÊ$) -!B-P ª(!àc0P Tÿ@ÂäÎêÚÊÜè@Úêæè@ÄÊ‚]!8 nŠ)päÊâêÒäʆåE(JåpJå@JåB šÔ#pTåSpœ$5Už}úUêÜÒÞÜB"ž 4n ++ éW <# ++xX'’ / ++( ‘1hDR+‚”k5/@ð#j -ª, Êå%¢Êå*ÊåÒ ðà!¤¨Ëå/¦Ëåÿ !¤%W”j6¨XËåK¨0 ËåF° *‚âÌå–?®Ã(ªŽ˜hÍåÞÍåRIÍåôQM/ÿl *m©$µ/IÁå /©ÁåK. ’ Í4"‹q )¹”­” /™‘)2Ož¸jÉ/0²Ò¸åEzª¸åQ¸"Ƹå!(zX*ª¹åÄÞ ÉeJZ@ÄÞ´å4´åŮŲÅÞ/°ÅÞÿ0!®Òª“²~1®öSªÅÞâ ++éºé8¾ &²/èÞç/¼Áåeâ ø îÞè³å”å{£\Ò/°å b%§å /5§åK•§å]›å­°­/a­°®l> Xeÿÿê&­žåèžåèžåe/´žåk)´žåD’¶Ö¯¸XB¶žå Õ ÚY Õ9º0Öø]Ó¼Ó˜å˜åÿ1!¼Ó¶‘˜å!¼Ó¶Ó˜å€”S]â( (?’¨÷šF™— “åJµ JµCÁ á b™S‘Gá áL! á£žsà àÂå¯" @1 ŒIäL¯ÌŠnniŒY ++“å|¦pŸ‰ ^¸Xª G€å—¸bv$ÉEω#0 ++lÀD3+ ë1!“]^3Pš4š ++} âà€š !‹`OäCàÎã`ØöPà á.ª `â ) ª"Œ¨B" áÅ_ƒå0íÓ; ƽèb\:/ ôØ+9P× §¡¤ ½è¤Çfô €½è.½ètˆ½èHôØ ÄM ++A. ++‚Î0ý¼âàØ)_ 2ÆàØPBÆ@*6¸° ++ì(Ðb3b&b ¾aà’å @ž‡nÂßeÚ}/>,#ƒßó ¹óx,åÞ ³ òÐÚÂð»ŠÈ(ôÊO…èôvôÖ ̨9Ê%Ê ¼Ê RÁ á!@ ´a NâRÙn` „âÀaøY? „‰; ÐâÀ®tÖ_AàCàz 0—å^ ,®` Bâ@z Ez °?z "pñn"@=& À\C¨?ÝÓQ"@Q‚ ‚   ü,…?‡åˆiç $®  0" ò /( " ,x8’ ++ð0oê ++ô3ãtXôÁh/0ô"0PPôTô¤ô ¤Aô&Œô ++„¡î š0ÁjŒ™ŒøHáHø_Îÿÿ ++e– G> ++ÚÌÈ ¶wÒÊ ++&® "H¯v. 2U0gØÊÜÎèÐÆwWJÊ'8W °õõª¦Ù ‘è*ŠÊHL"]ày?žå aàvêaàBÚ6¡:Ô‘ ˜=Ü X ( olMÇÞXB¿(à½Cà ã  L¾-L¾/ß"! P B1à†žL£èa câ †¬ûä4ï D!ò)‹-ðŽñ^ð]·æ7”Œj^7‹&x^7 ++Œðg{,’å*-a„V„„A–* ++ˆ[€å0€ˆS€å!€ˆ€ˆ€ˆgcâ €ˆ/€å„ 𾼦­ÐðžSž<Ñ€A$!`šüÔ È’¸è£(Z8V8 ++ L /?'O šåu nN8¯‚ÎÌ6Ôÿ'ZÒÜÌÞ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbplhPJ  ‚M Á ++Dø ++[~b F ++2ú úaàÜÞÜæ¤1ÒÜÎø L Ì ¨ÖÙñÕ¢a¨BÔÏ(g>g-C@—å!‰62âõKM0K†{.²ŸÁÿ a  €&_!àå §  Çä)O . ‘’Î0B_ï3P /i"Þä™8‰O@’å99Ú„!Q ånÎq‚â0ë ¥› “› ‚› `ƒàà‚åxïW10Ž? 0Ž©¥&à^¨ Ä Æ¶´ÉA  @r …ËÕ½®P›QØ ‘ L" ›QÖÝGq0ÂÎ •ÐéBÐ !hw S:Ò-`HPX̱ÔÒ<, 2#!- ++@ú ><’XΰÖo_˜BØoÿ7Òƒ؃ئ"BPBÊŽO(ÚlöX„—6Ü ++( à  ³r¨iá½ 0[—}½ ++!“å p®&O p†å €â`@4`EâdˆP…àT5"€ÒE X]–E †Hè°á áB! áN ái!“€à ÁåyÝhÀâyݱ!Ù:É\¸$ªó*’4$XZ  Þ#° ¯‹õ®¤[D‹ ++B~B-p“8Bm°“å ›BiBíp†å †å ‹â`€êZRB JB/ƒX9XB[nâ BBà à @`âÊö $ìBâììC“å0Gb;ð v¬#0K/àš®à®ªÞ¿–¯ ++žXʪä0ãöXÉäùˆœ\°UäF#!`"oŠÞ ++p% är-äçkòH÷# L÷âîñ Y.ì ++1 0žT— ++²(Áãæ á’å0’îûÐ 0Câ ’å0ƒà#!@ƒä”,@ 0“åÙ@[ðÿÿ ++úÏãú$ó±eŒ<BHcKØÒæèh / +‰ K@&‹à¹“‚âÄìjà j  < A0ë6à RÄìTíPâí;˜ ñïäs7è€ v€ e€ aÀžå œõ/8µðÙè ++% ’¢)¢ œ\GW&PãFyÜK ¢ Ù-aÂã‚àÝ-/ `„†„/k`„Z°nâ °„‹Œ,Ñ‚  ++3 ++J26í+ åˆ Ü AµJ4Î’m3Rã³mH…?ƒå«`í`Š¥‚Ú²Q¸¢°XˆB†3& ++8¶!¨d_òäç f è@7â ç?h .d<"• `ù&0ý…A reØcR gNQ"ŒKŸ_/ 3µ":{ƒ"àä_àÜO Šâr:d<"àÐ"à›!KE Ò=—$‘m0žå-p“X1+e¾ò:…?. >äàOs­W4¶Œ2+A`¶Œ{Êt. ‘ÞZLKL/ ã /Õ ;/% #/] 3/¥ 3ì ++ã +)„ ‘Þ ì‘Þ>ŠŽ°ÚX’æ n?3æpª™PèhY HJ5蔎èÃAX šæA!€ˆ! Òˆ, bˆ-bˆeÏA jeê†2ì$øA(Z|ú¯têš/ø  ˜aeŽŸ:J*kóÝcoX‡f#RÅO0f/9F#pP£! “±ìeíHHšàJ”ö‹ %†îA ++ø¢bY‚4/¡b/ìb3<&g]‚0gr‚k‚&®ê"f74êh,PìhZ,ì´-šìÄn±HÒê±+PÒ7Lì( @@¡Ò7’Ò7Ò74ÀŽàÏ ~7¡à“å àŽàpŽ,Æ7='Â7uŒ`Â7±Nâ  á@R(@½RORã<(..á(Aá á˜¨M{नÂ7%AÂ7$ u(óßÆ7¬Û; |« .‘|«(ÚABâ°Ü6â°Ãß±É îÞ7UÞ7‹`„<Þ7¢h•{4ašî ++È‹ÐÞ7Â0Þ7¹ì( XÂÄÞ7¸›ŸÞ7’,,Ú7Ö7CÖ7ÓÒ7×b×X+×Ö7))Ö7(/߇߇k£eH“! á ‚â G¬°àæ7'íæ7æ7â7 Éo<‹oú7I/ú7H§Aú7j8)jð0"fòð ++h‹  ”ðèu.ú7ú7?0Žàö7%Ó waâ ûêò7šò7 2g2W#?@Žà{'ª{0ò“ á.ýî7íž6Gž6Eî7?Žàê7%*ê7/.áê7X u€âà€æ7æ7U â7QÎâ7d/Ùâ7?-â7<}â7p/â7s‰â74Ñâ7OjÌâ71Oòâ7O*òâ7 ôD »Þ2R%R²Þ7P/µÞ7=aêÐX$‚ô(ßhö ß{Ù7Ñ4ÏÙ7ÁÅ 8ÀŽàÕ7/.áÕ7—‡glÕ7_Bây Fy ¯ky Õ7-ÙÕ7@  Ù7?àLÕ7  <§ í7(í7yDrí7ùí7@Mí7<í7p!í7x­Œí7õí7#Ò×Àµ6ÔTÊöí7Ðí7Jí7=ZUí7Oröí7ÿEA ++.7$*Y$/Ø !X"TO$IO$O$â74W$W$'W0Ãã#[$[$ &æ /és$OÅ‹°s$ž ü.ž5lž5Iš56ø†$6ú‹5 $~5ü~5B  Tf¿¨àB àŠ$Š$Þ1#.i#ë6rjBþÐ4$²'§Ù40 Õ4)Õ4#Õ4 › “› ?‚åÙ4$½±›ÄÚÙ4P¼Ù4Zººs©ØÙ47þ ++8‘uOê Ù$($a! ++/H ÓB7,"Q Gû &æ „EäÈ?Y ½‚ ¨ Mè?> ++¸]&M "§y> ¯îO° "Å>&¥vV= ›pÿàâ^.&A0’ý(i6.Ò¯¯;Eͯ;ÒÚ¯¬ÊBþ  -¬á ɧXéó, ^68'ÿE çë?Ð * ++us¤>nàY[%J‡ø""yw'" n1 ++†W8œ¢º&Dâ5W†åà–5̨ÚÇÔ0ÇÔ?ƒåÇm ù… ÈüŸC0í;hÁn= S4ÿ/áòHˆH:½_DóLLÈ<@¡n ˆˆ'4 0óÕŒ+{9à°€.ýw9t.¦þh.ŸþwØN¢B   ˆîŠ2 Í}„ÀÙ@Xaá á0‘>"Z "0n#" lbTùõ +­%pXµ8"0x`D[3å ¶š Š•hL p—å„ÅÇd* 191à©‘%,ÿúDÛ+8ìüq9ðûq9`` ³` 4Å9Ùùa'/!ò“ƒ±|U `2B 4·ÇP ÄìZîäÒèÊBôÏ9•"n[@<*ÐD8 ++ñêÝ·ý^Â<Ïü× ++U&\1"êÁº$Ø Ç`BààÔI  UyUy ” žc˜%œ„½ü ++4€ F„qQäÊæêØÆRÌäÞÚ@X@–qŠ+T: §Ïpr È2œw Z  ++0 ++P`B  6\PŸ+%4Gú2f@%c áV?‹Èt'Ãü.©Ñº µc\µc`‚A/9`‚Ï8(“«üQ*B æ÷ í–VãYŠ ŸPXB £ÐK*3"0Ðq"þvÊ1 Š4Qjw8ú%›”#Š //Š5ˆ ++W™Í݈@pšå‰# à.0yiÐPúPºB x13Ð 6€ Oú‰ …Î^~  [+à6! 'ÊN.cœ¿O)ÊË $ 5B ‹â'©" @tÅß`@dņp5 Aá0°5B1& 7E+F “ú  ã…c(s"Ï)n/ @Âu¯+Ó)§+lË R°Šå$@pÒ Pè5 çÔ%/IÔs¶ ++lአJå®B Ï ˆ  M× 'óéûxK5HèÒsf‡s40± á;G KzŽ7G1‹ÌÙP \!?y6@@ ++lkYÏÏ *ñŸÏ § ém \¯" ƒÊÖ Ãøé%Cºßbú ¨ÖoÚ  ++@+0€#3˜è€xþ D-/0’þ ++éý-”éý³âå˜aÐü C °²7VÀ á°F„Fm›)¼”ß@ ++ª¸ BÖ›ì!>ì!/+1[ã:X%œ,}Wœåàœ²œ}3œå}¶ñ/ ²"pô"/°º “²ùº"pè"¬á€•œ•ŒLà µþ˜  ^ ,  ð *0Ü<‚ Ü&0à!TÜÿÿ ++ I?\/1\ |5 u ++BÊVs ++ D/8ý( ++i4±"€3z ®ó&(¿Î mt˜‡&ŒÚ ‚Êo a²ÖK qØà ++úÀ Ê  ’Ëù,(VÚ$+f"0“…0à‚á.S©±’à jÃ!‚@Pâj/, ãrj:Þ¿'æËC áæÖ5/ oˆ©+*9ƒ /µ6©+Qàÿÿ ++º“­/šåîy/0x*-x$~ÂwÂ1ò„P(B0B,†+D0 ¦+©š+^9gr ++(²8†:"A˜(¸P!FÌ=0(8(´s"M:kB2 KC ¿88>“ÔÇÀÞ?À - O qÁeÁNÁ=Á8Á(ÁÁ.ÁóÁéÁØÁÈÁ¸Á žÁ‰Á~ÁÀ/Áu ÁÆ"ÅÅ éÑ80DâÍÍ××Ó1qçO0 á½8íé{é iéHíTH  Aí1#!<íÿ¹í ›í”íh(  €Ü ©í œè î39‚.9T‘ßn G‰ ñýàõ t½j ´# aSª!0CÉ3'&0`Ò;“  …!( J A«9i?ànâa…¬ aa a[:][:]]eÀ«:,ˆ³ iid1]iRJB &iOæèäjÿb&jñŠ (˜" (ø"] R (k*CPëvä& èH<ptWú.*ëÐ>ä»Ap¬’Dp¬Á# 0×?ÌD G⌠ŒŒ ŒŒ ŒŒ ŒI“Œ‰<$ŒƒŒ“Œ4ƒåó7+,p¦¥7+(Opšå«Ñ¤$+ñZB &8š */b * ++8%.è,>H4Ø 8Ä  ®“/KTá+ƒð "†$€âF¤º '/Ñ     yhm \tq*0` @à‹à‚ ?à‡> qpTX%͉RK‰Z‰rº ,U‰3,˜ Ò‡_ ² ,Š.Š2nØ+ní0˜5f^-ŠyFà³?< >”LJší0 NPšB 0‡-?¨ .Nçéàšåp‘åé 0Gàñ[pp‘åpƒàà°ƒàà‹åà‡â °šC_ø ++0  81Bà°A ++L° á±Ô£XÄ–Ð(@X²/0H Ð÷.• " T´P®?àƒ- > ++- - óïô°èüý å ÷ô°ô«a±C ++ryr² 0˜yL‚ 0h@L 28ªf~ªª¢f~*¢Q> ++XТ4¢Ê|zOæüÀÒbÌU†O| ++ÖœÖÓA‡LCà“å ®÷(| ++œOJ8÷àC».ÕC›& 0*ýŒ ++H Œ ++xô¸4 ++'ÀÄ ++jùÄ ++ÀÄ ++O°šå‡‹$‚z 4 ++`| ++{ ++ 48*O6 Æ °R_RRR ’[ p›åN?N ZN›=Î tz#5Ò Fg½FºF°Fâ +å–°BŒ>j>Bª 6>`>â 60'8 ¶8Ž(8(¶ 8¶OŠ :¶0<¥ QX Rõ;à $8QLOXu 7 0Sò«%’Ö&ÿˆ1q0àSsæ104ƒNƒ0žå0âÛd£½F!0ÃKì­E<5Œ8å7àiXA­" ti¶+bÏ+Kó;†SóóY2!ó1ó!û^“âQã‹#¡…ó Q :WAàQYð,0°'‘ ++ào%¿ +Ñ àg%9"GTã”"p¯g˜W5õ ˜5õM˜=˜9˜+#!)5õWŸ“ºœ5õNÊ õó/p‹Ý¡F˜ ø‚MPÏ0ä8<·ì ø,±;‰š >ha õ ++„5! º„ˆ„(>ùõ / <ùõÙ\ ++ ÒÙ8ò:@&ÖIü" B÷!üÿÿÿÿî›@Ÿ@üBüa# „4 ++üBüü@ü$@ü Ù[ü ùüF DCEóFóê0ê W0âê/#1êøê _âê.!ê/!êÿ9ê ˜ê/!êÿƒ‰DR‰Dd×­çFç^ 1 ++äFääDä$ ¹ä¹êÜXçFç6HÏß Jì ñÿÿÿÿH” HñJñ^ 1 ++ñJñ”ñHñ$HñÜXñJñ|‰" œ·ù6µÙLþ^½ùÿÿÿÿ§^ßo šÖ Qð" ˜Qð@QðWðÿÿÿÿÿÿÿç/ LWðÿñ/ LWðG™ † %à çÛ/ÌÈ ++! ++{ ++n3"P‡@? ++¹ ë @(w< @BA:è0êâšÿ?Aå50›Ç8S0Žå9 M 0Žå„BK:$D$DS10›å$D5 D[ñ:(D(D(D(D"Û\ ++ÿPƒå1à›*4å-à›å àƒ8/È°¾581‚å)8‚8/µo88Fj¢:,`CsqŽå5›.à× ÈFp€p€8|8p8‡81‡å%83‡åŸ"^ Ý50àŠE4,8&ÜÝ øj:<`³<øpÀŽåÀ›å =ÀŽ8[ð:@8@8S À›å@8 ++ˆG݈G6š!†dˆFQ†å g(€G!0†h´F$ÄF ˆG1-à†+ ++11à†/‘5à†å8àšå9DF šå”G ”Gà”G´—+ã¢TG¤\/ hG}hGÔC†å¤´Àûž5 †!`"àô2g0nâ 0†2„Fk öÐSí1èí1 "ê § $ n:ð[!˜sbâ àƒå/SD\ƒ¹`  Y2 Ä{Àž\&yQ ø#    90è× iÛ 3N+Á4eO˜H Ó É9h1¨ÿÿh"ç,“?00¤\D&­ iL¡a D1LƒL ++ƒL^0 áQÿó õ¢8 "öþäHÈ äH¼JÄp†åà›åÕjaà›åà†Ã.Þþ`ìDI ``_8`ŠåÅPðPP_4`Šå¬PäI !P_0`Šå•HòˆJ.}þøj.Wþ’=DÛ 1§ òºÐÜ6Ñ°ß ¬L 7 *) ç àÄÆDs e<°”‘©ýÿêjŠPßDhP ð87˜p"€¸¸;ņkHj†å\€ ¸„à ´á/é.Éÿ# ÈŠB N ˜ ý ñ{wJ>/ Ò£H0—å99 ãS0á á ç " 9?Q—å‰{“ÕÚá sJ ŒApšå±|nX l/ plr#.1x.Âÿ`»ÿHA2zG‘NxBÚ@Œ Zz NÿjŒ (Œ T v ++0Ɖâ=Cê PgE_ˆB XÀ?K†å¤PÀ“hV €Ài×a¨WP ++Ô«P0žåÚs0$Nâî˜×[?—¤¤ t x /xŠ[t(<Šb4¥Ÿ4˜ÔòB T  x R⢆W “åJ®- { ’ ++ ’ ¡Mƒd¾® ++ ++¡bŽ. ++¹ ++±%§ ç{‘NÍ4D¨ Ã!+|½LA ++àN ”yYJèd iY„iY-8„”à+j \H € éN`Pàj•³}.É2 ›ü/0Ã\, åJ$ áÛË$/ áLULLÀ«&ØT{©TÀvL‰ƒ€ft$/- _ Xi1*¢Ð@B"8ª TFG0ºüéYPå}A@¿}àÙs r T ++(JNbR V¸ÝtB VxS?P(LVàXà\0ïHGLB»\nHPè è¨ ¯0†å †å°ô, ° ÞÊ~ÿ°:F/ †ÿ À 5HhZ   M<¨ -ä Á”1à—gWà—å¸ . P š­„, : HüüÞ4æz°°€| .I|³dâBBpB T G9Z ++ 'OÎuZyz/hùÿu* \Hù`ùG:Á#Ù ñ Ý -àÝ  ž( \eá ¢(Æå Y^  ++å I8Ù)Ù ÿJÉ ++½ ++âÉ0y 9y ·ÉUâBHÈO’ ^ÈCŠ ^ÈXÈi)Hf`(PpB dzG Á. p#VC GÕ=ý T  $  ( Sàå   %µ*ýµ ++TD%ù AùM VPL Lª|£¹ÊB b  lhLAA%O0*Up' UuùU¨ år‚4år?‚å¿xɽ@ÅÄ”½Càض o b ++°õ(bõ "DìÉAš d=P 2û h³[Ï}>PAò7 ö ö^á¯öï ˆ ÁöoL qL°~©öPÂB fCpögöVöGö hSŠâ 7QíŽâ6ÄâÖ@±Ö™âTÚBòá_ò fáCz fápáIb há ú ánUø» ++8E!É» ++ ³ ++<â³ ++ é³ ++ ȳ ++lU ++ U U ¤û#/ U  U  p U0 U U( ¤ UY( jUlUlUH+ Gê n+ rÿ‰pÿ¹øÄpÄprrváÿ‰táÿ¹þátátáváváoB zû ++/ÿ ++² ‹û ++›xV¨Vn“fæU“tG ++ã@E;*/š/5UMÆ. pækæk¥_p9^¦h 6òF"àìšß"0Pï”ÈZ/Â!t[§:*¹¸šÚ“èAZ/`1"H1'htgŠ x ++ 5 z ~\à>5\ +*\ X<ãã" >TËPO| ã"ã"P;P6@@@•@ ÷0} SD+D /õDD$Ç<Â<v.¥<ã"D:å< <XG|<@G BÚ ~G h dPíH€/¥žGFãš e->;½S¥0ˆ>ÙS¥O0šåÏ "'3fƒI ’W à‚åí&%‚eÒ,m0|ƤRÊ €î HÁ‚Áÿ Ò ++ ++Áe‚Á¨ƒ¿œ‚€æY„ v 'ÔÄ"—  žâ„ã* eî !— â:ÌL±LÙ¥Ô ++¢B²8â „¾z #0` Sš †IcA0Îh®ƒ´ƒ+ ++(hŠ£,0` ?'6c!`å å"@åP ++&%) s/Ü$0| /| ÌIÂ$hˆ h\&,þ,Wí ++L@Þ_0žåÞNi0Xã£@G ++ã\˜\\\Åü í(bí(ëíF ñ(Bñ(@@j”= àžõ(*$@@Pà($ü²Aá8Ãã0Žå—å—>É'@P C’ ÁHšP)N¤.\ÇE)@ ]@A)T­ÿÿêä @ä ­PP=)* Pä eä `”V 2 d2 .qT„ ú œ  ++,.¨  ++.ûþH *Á´1*@ÀB5Qš ˆ>*&@7*H7*HÊ ++"ð ú=€J*(Ý ++YJ ˆÝ ++xV[R" Š% ++pŽ ++175'/à ++1¥YŒ  øÉ–'ãÁ}w›¦0; ¦0;.±“¦0Ag<g/1Ãÿk«U›U=0Û!© ÷Á÷& <Y7r;ãÁC:„qz Œ˜é_ Ê Œ0.ŽŠ % ++P ’=+?† /=+©h  ++°ogVò-ñ N ©o l& ×  l /lï ï :5ñ,½ñ @’:5|2 î1zR ˜nY’ nÝ+ ;’8n–™ðh”  øZ˜ZZ™p™jÖe™0 = /= ¡Y= = _ j= = « Úq /aq à$q /±q q U˜z“U@azpþi»U0¼œ } ++OÚ ”f–.uB8˜] %↻B{ð0 lÊðÆØêæÒìÊ@Þà:“@)Y0æêàUI0ÊÈ@®ª“@ÆÞÚàäÊææ&]¼. ++0‰‹sú ˜ ++m{/ šXáÃY):쓸ÄêÌÌÊä@ÚÞÈÊ* íY©T³ˆæ@ÞÄÔÊÆè,8Z!H°S ¢ œ˜´SR œ*Z ò¢ ªX¢a( šhAZPHB žAZOà 8H?U xó"óúBZ"ë£I10‚u1à‚Ï7Ð@›µFZâP$ŠåÑ‚FZM &àF#£wW” ++BY…ŠQNZ€ š"M&„"M¶YdNZT TiTOþY˜­DNZNZ TaNZ2… *!tô" àW­œ–Z.NVZ ++Q²Y , , ,, *9]ÃV':b~‘ŽZ :4ŠZ åŠZ U<[ /I[ "ñþ4d"ýþ>ZFZFZ@FZ/GZ"`B ˜(Î8É8Ä8¿ JŠ ž¿C: ž$: â8‚¿2ž`¿« ++$h g2 2(‘Pc³¢   &$9`"r©Ù1Ôý[ÎOÌÕ(±,3㢿Q º ü§¾.Åë€ëlë- žžKe³d$ á„yàå pž|j |.|ò 7€Lp ã€ÜG€Ü´Ü* àÞ ™  :Pášk#0}‚7Â+¹Ë0y‚ö ++"p›x%WÈ…„¿dW rI)`AW/WŒ¦[p ã«ÚL¡`9Ëe 0° I®Ç>O7Î "0°Þ•^NHpH@nºOœ†H È÷KHN\$ áLÈ©Ù D;0$ "0XÌŒD "p ¯ ÀÉ´“íb€<ˆˆ  .Ép€N80 áltlclTlRÓi À ? 4 XÄd  €/à07Å0¾0ü2|.ÅÜŒü»³6~ò1 bp ˆ ð ÌÈ@n ++ üæ 0pp ++ÌÈÚh30r:@`  k . †½O8  C).. = 3…üƒ@ÈÊæÆäÒà)wÛX ª ¢Û%˜îé#Pé$0B¬Þµ8µ/à¤!0$ @©…%¢…$E ++1¤, ++ ++¦ DB ++¬¡¯/( #èãå¾#ì©_&  ã­OÜ\g& g&px”"åÿ°f ++o €‚q€àè—ò /ò àì—ãôôj ¤(B ¦ %h ÞÒÞÌ%™*\ "A X0 ++×Kã#“ß äV@" L¸fý: ¸ Z¡¶T@Ø^¡P&Vã÷–ô"Q·Š  ¦ï‘\´ ++ƒsƒsQ–å `–NH.Ù™Ù™ C`ŠåX" \Ú(ý¢ìÑ((ø C`šå\ƒ†ZÔüÜ^Ü^ÜàܧÜÜ\d4Xd®dH"Fïd•dP´P #,¿(¤¤sUPõ¦99Jˆ/™ˆ ×®üýÿê` áýý„½q œ&\ ”¿ê[£¸ýÿê„â @°œWæ@ (Œ/ ’hš‘ßPº ¦Øe˜Hœ# rš-¨""A ªØ00H Tÿ ð @ÂäÎêÚÊÜè@Úêæè@ÄÊ@Â@ÜÞÜÜÊÎÂèÌaÌÒðÜêÚ#v!8 1 ßµäÊâêÒäÊæ@ÂÜE("iv+ô¡ï$ õbPš#Bpœ ++fžX $!# ++xX'’ + ++(G1XR#J ¦¿/@ t %j,ÿþtÆ2¬X U ¦P *bßßÈ?ÈH Æ Ç~Ê !` 2/r "ÇN„­)²š ø;r*߆#Άš Ɉ­¹ €­.ª€­˜€­†\ Lt|#yj:`ŠŽ 2Ž«n  ´e[V: < < < àf/D®­°Œå pŒå Œ424@4Ý„å°„å p„å „4# ôhôhCŽå œìh/ !2 "5 |®Lû:‚ìg$é °®o €å 0€ ¯9`ŠÌ$K'0fñm wt Hþñ³"/U S- +s0ÌÍx«8ÓJòœ¼ @ÕzPÌT°.}°D-`8pý,ÎÀ4¹°Î pF(B†>F8æ >ò`( :ÆÂÜ ðÈÊèÊäÚÒÜÊ@äÊÂÈòM—0èêæVêYJ+ @æÂ+ "öq  ÂÈ  ™ \¼Q U`ÎÔD ++,¹. ÎÔ@bÕ€6˜S"XgÕ°¹QDYÄ  †GšmÕox÷ï mÕMmÕI²73ãR,&EmÕ7mÕ” ++TWŒåàœT ŒåÐ猙Վ¸0 ™ÕZ'\]\ q«j™Õ3Äè™Õ"OÒ Ä™ÕÀÆ™ÕÀ¾‘™Õ—ütÝ ++f™Õ@1:™Õ-:7ã6ŸŸ¥Û™Õ™Õ 0|þEAüH QüHàá­ÕLÉ­Õ µ­ÕDAyÖr­Õ @ñE8­Õgš Æ ++(Æ0Æ)Èíº(C»"D_Eâ)w!" Ê ++@, b¦?äJÀÕu(æu(/° 3v(v( 4év(Øv(Óv(Ãv(´v(¢v(v(~v(tb' Àb'cj(ê! b'j(4QÚ(444?6(6(6( Ê'/-Ê'0)^ Œå 0×/ ú' 4ù’(4$4$4ç'˜Q„å „Z(ÍZ(¸Z(­Z("@R( f(Z(^À†åV(dâŽ^(/-Z(GuZ(œ<\Ê=V( 0&ÊØ2×ÊðùÎÎ$ÒÒN×iÒžŒ–iÒj× î&Éj×-¢ ã †â‚j×O  á¯Üíh- Ò× Ò×Ò×Lš( :š( Hš( ƒå pƒå%¤òî>ŽÝ:(Ø̺¨.–þ…(ž(ÿJ-ž(.þý¤/÷ýž(ÌrØÿÿÁðÇCŠ ÌíÖÌíÖÌõÎíÖÿýÎíÖ:Î ++8Õ0ÉÐS+Ø)#T( ++íÖ6íÖ†ðÀžå°žå °Là°KâÆõ[ÀžåÆWQ q°Kâ °Ž À°‹â°‹â°ŽåXq¸Ëã°ŽTó°›å+± á°ËãÀKâ°lâ 8r °‹à°Ž2þ0q×kQ‘" qׯ#ÓlÂB ,!Ôƒ'ÐD'Ò¢˜ŒL¢š4!Ô'Þ1žå€ÃAJÓÅšKžåš¡0 ã0Câ 0Ž RÓy0ƒâ0Ž.\T60“íµƒCâ0aâ 80ƒà0Žå¥Ôa9nR¥Ôµ‚\¢B 0ŒÒÞ,ÒíÔM&šý!K@ áQ&zmÏø È§Ï ³¬³ƒ›g ++‰&›U$GÛÏ'(àm&ÛÏ'°%@%-F q£1°•%@•%AFûÏm¨ûϲˆ@Í&/i8k¹"% BüÈòŠ—OÔ ++xÏ&u ê ÔH*Ö»" Ï&ˆÎË$qÂdÂ$  ¶ ßÔ‘Ò /•Ò| •Ò/™Ò{±ßÔ™ÒD/-™Òz†sBB°†2 Ö ++`Q'W r ÖQ'Úh Q'‹Q'/ Š ¼ ++ŠÔ ++Š/ áŠ ' àèÝø ++ ¥&i×øEãi׊‚ ° ++Š@ :/5@ O°šåx’; Ø’M: Ú’o×G‚ ÚæYÜ  ¨Ó'Ÿ ++ Š–} K °–[úi ++à°VÈ .àÕa ZVKVB7VŠ?(•7á?($?(7(=@žŽàÆúp„™AO0šåa ZC(oÚƒÜàBF¸˜NIJ ÜN hÞ   í RÜ–$r– (Y/(3I(4‘(d/ (/S. c(?’åQÜ+¥Ü´ xL*¶!*f[(›à­v¦Ë(/ºË(=S * ÞË(à}r b Þt$  0Ë(ïáX7( ‹k7(ÈÇ(Ç(-º3(PↄâÈ„â Šâàã h] †ŠâlÇ_Ç Ï  |Ö;| ++Ö;²âYý²â°²âl/!²â }@ÒC O àC kZ à8C(â²âÿýâ²â>â0hý»'äk'(C*»'"D»' Or æ»'2º”'è^ƒsÀ ÆØÞæAg'¯\öUVö&b+Ë’¡2à¤J‚[ O¢ $/ N+ÙVu »ðPÚ2Û/ºÃ^IÜ@ÒÜÓÉÜ‚9è J"¸JêJ"JÊ(K K—i¸ 0K LêL° îÄØÞÆÖZ2 ++Xwì ¸ $}©Ð¡Ðl¡Ð &¡Ðb¡ÐRg¡ÐN¡ÐùÐ1 à’\#^. hÙñ/ hkC..8Ši"ínWÞÿÿ„À¦q’åp‘D "òö)@ áHÆx/0ÿ;4 7É"0°t%¸½$ ++ÙÏÍÏ~eÑÍÏeÑtÍÏdÍÏ`.0ReÑ:0Mt3 RCFÊIpCSã#8?àùL"*/1ž4 b´N0 .µÏR0 ´ |" ÌE<šîuì¨ ++#òCh îÅ ++PR ì‰yî 4ÒÜ&oùXÝîºÜãÎ l!¸_/ ++|'‚|2Ï{M¢8¶2ðžˆû·òeÖ(È 'e':o£7p,™„!!tÔ“! uÖ àÔ1^ájàG4Z4%à—ú/VÔH".á;JÄ@Cº._AÔ0à ãíl5ýfŒr “å!À’]°4; ø¬àa  SJRo)æ#(| à] 1 KNøú¯X¹ ++…\ Ô{}à“å%pžÈ¤¬5à9 ‹f˜"p×JgŠ^Žn&  ‚ o _ œJõ FD B˜1pÎã5CWã4„¼R“å!°‘„-pŠ¼ö5& à@ €/©$ÍØ»1pG€’NX€ /\ Ì€XLØgM ÕÐÐ~DwPX‡Ò ð<9‹)`òH ðjð·ð·ð<ÕºH2 òº0X®ˆ®®ˆ ˆˆ7 ˆ(dkLqôÆÐÂäé "ò~LöiP(€ $t€±&ä™å à‘œ  ,Gãørg¼&É+ |x/ ™ CšåéÇàâàù @¨ ü0ñ <&t !t ØØØ’ØTñ .uñ èÜáÜ63¤ p‚ ôHl pJ ö0#'ýö…ô:  ˜‡ø ÆØÊÂäØŠ8}ú  VV^22š *qš ê‘È” ZGò ˜F:A"È”z ø@Ìú ú¸ ø)øo^­ú#2ü"·cÖþÖ×è×)×eæ×)׉ü×þ×ü×üûØþØÒ ÌäÊæÐZØÒÜD ‡    ÊzÊkÊ8™å_ZjjZ%à’0œŒ˜Ð3’n\WA’å W| ++sªê.ý†Õlõ720’_"ð3=ôÿÿð3ïð3êð3_åÿÿ ++ȧ8ŽZ*Z†Z…sj à ø  !0™’~bT* 1P 'AZÄÞØ—”&@ çaîQG8 j’'Ó–&@KÎ 7$ ++…$/( $¨kM /pš  wlnp$22 ++s@ îuw'7à (5(%ÔXÿàâò ! r1  ++ð&!0`vš0Rãö‚Ë RÏ6A ++òqðÿÿ ’[“ëÿÿ ++ùÿÿê ][lAæÿÿ ++µux,  ++ꂸ "ðYJ PÆæRÎôð9r¾ÌÈ Ë Æ8B ++ ð ++LÞ ++4{ð‰å4€‰å(P‰å ‰å0—å77°4€™å(P™å ™#áéO0^ù'$åO0o7ù aR ++J@I `0 (Ó’‚È\x#x! ¼, !Ì‹{w*î 1!’D?Z:¬BFIV(ö +­öR(ë 8?À ¨‚ ++j0QÄp0 ++«90Pã !‘ ¨0QãúÖxÔ–4# ++(ž‚Ž(-/Õ( èa$ ++[!b [í 8   *{a8‚ˆ)&!ÀW&ÂW4 7Þ ®nH¸%â ³ ò!Ù–o3oJ P% p T9!p’)* Nyí=t%/3íñ¡O šåÍÌ;½”vš ôhÁH9wò  ++(ÁMM kgJMAM.M"M,ŠKSÿàâžy6×a/ú#…:/%…Ÿ¼¸…К HàÊÊÖZ~ÑP (ÎÊÜÊäÒÆ×pZÐÂÜÈØÊ“!B)6|@äÊèêäÜé Ô^b ÔÔ ‘'=%H-à’t ‚=#ð‚zäè“5¬$èçx /É0Ý0e°æ º LêÜ¢cp2 Ëzª  ++(E$0_3ÿD6J‘38  h  ¸_;оSp á0[;° ÄÊ­ \7‹1)0íú' åA• J)°fŽ!îBúY3µ(" pœë=±–þ0[ "*6¥0 ++ƒß~× ++¢  áâ óx]"@ ãa¨ã+†€¾ s61@šÕ2? à‹·H ++ ·H ·HII¢I ÓP | 1¾* |_€ÿÿ ++è" ìhàØ.•—R F›R0[[ *æÜ Ø/5 X ++@ÝX ++Ñ ÊX ++«øh ++  Y ++NÒ h ¦ …<á8¦  -ðu}BÑÛC g¤ JôjÍ©¦ Q Nà"€g  ³,Zlê ++0Zh"  ¨Â®6pÓ&’@¢f‰f{f1PãfÎãC†&A ãP˜~"0œBï%*Ñ^ Ò `‰@ŠÛhÃœm »n ++%O n ++%O2ÁÿÿnÏp ã†âpçøÚïB ã0ÒF@ú/ "lí† ú/àHÖ¼Ÿ^ãšÿÿ ++d 1ÂP»{/ á2Ø|éÓ¶Ø^HW"0 â:xúQº ") xÓ 1" ++¸hP0p z)± ‰€j2@C$Ûú"PÛ$Û$Û&ûü>&>&>(> Íg,?P N’>‘>éŠK ±¦"áÚAêP¢2` 2(8lz ( ++ *h&BàŠ662ì8©Ûìg‚°8ób¿v( *é,é€ )OKOK éé?žåéÎ ++v±ÎàÎØõ §bä,!.Þ³´Þ.Þ0Þ¿ÀÞ0ÞaH 6‹](ÒÜ ++ 4¥,ð —á" ÎdT]ýó"+I­8î*E~1,—åPZ:¤[5¦‚8®‚&! ª‚XZg nâ „XZ‚‚Z‚ \/2í0@‚r1ãÉ8M Õ<EI#à ++ T.ßÿdX¿lç m ÜbN ºDióÃ!%pª:/UšDäPsG ++lC: r`°B 2ÞPx~ªÚ/ Íj/ô—j«ä"pй tÝ% <4pšåRªRªÌVxu%0Žâ@ƒÑŽp,°™å U”Æ*°Kâ,°‰å0‹ë? 0ôó#¬ì .!°Àì¹»7CŠ 8ß"BÜÂÚʳ£#¬ÀYZ 2ý0Ü @õ e!b7É(6X¢ 4 ++ ‹;/ 6Ï:"Pt0Œ@m¦@ÜÞ@ØÞÜÎÊä©iv@êæÊ@Æ¡Zâ0Gy;î   ++E€á!1>  @¢" <6 7d/7 ++‡? ?7ÿ¿:7ÿ:? 8,:,:<,>, >,3>,<,6D,E ++^2B7O/Ø #ˆ ´%8°8ª¨“8ÏgsP9oc9ol¡5O%Py5LTATTP0„å°L›¿d$ 0L‹9 ++ãd„ãdpW}p(ú¦ób £ S :D ++pD°›¸Å&G©o°›¸V¬OPF.r¬_èB @¬ÿT@¬6\ B¬D¬eDË DË3DNF ++= ¢¿8ËP F@°H ï$µ*µ* µ*®H10’¦©šT2!@’r A.¶Z m,ÂÓP·˜ 0ÜÞÜZ¬%$„½Löh G& (_âžÉL0&PôAp ++0åp¾*WÙ` ++ å÷× !SÐRR 0“å&ã ++“åPáø(!>’û/àŠ' Æl·0à ão h@àŽâ„TÎÿÿ ++úhPS¤*Alƒ ++Jgð# ++RB P ô ø ü2´°P H 8 J Lð L N L î ð L Lh*_P(¿C ^jPq@ÚÊææÂÎ  ·£:a;©:$ „4# Póà¹*P ~[R[È.RšJš7 4¿T/àwuãT D ++¦æþ’é H +;%¥0Žâ 0å ‘ú…>0Žçô Ÿš¦/E³Ošå¶Â¯v6P‚ Fx.© Æ@Þ'ò´8 R8 XÈÒæàØÂòX’ RBLHãJ¢ R¼² \äÊÆÞäÈ›BP T× äVœÀä±ä©ä–äe3@ 0ål1 0[> ø/ àN‰T$ øø,œøWø øœdÔ/=d*l Ð/©ÐK& Ø.9®„ Hø °.°'W`/Á`W`P`v$ª Fx“¬e@* Vê/XÁV€ Z ++8AX’¢ ZXj V{€XBL8 Š  “Z š V“0 \„º„ë.äläætÆêääÊÜè¿=ž . $& \2ä@™\° h4)0jk& lèl ++Ö_ÊääÞäÖ ++jìj`1`Ö RS6ÆqŒ —å0—å!Æ/Áv@på 8ÐZ0å%¦*e¶³Â ++  ãì/éì׸ªB ^ øJ 8Ò Sàžå&ˆ-­*ä³æäS%àžå7æ¶ cEb ‰b HÚÞ'p£A ++ áXÖè¾=@ ++"Ó1^x‹^Ú ^þÀÝÓDê `³ad@"¤öa> —e Þ  é0»ópwÅ ++¦; ÞiñiÈihb  ++ i} ðiû” `qmq\× ++qq‘qqH õQ z{ þ®*-þ®Ø#`#³Œ ++- ê3*ii °)'‰¤ M1 iÜ-”H}õ‡“PßV¡2: bE-€`* b ++#¬i" —7ÞP¤È( d—f5Ù  *xT=!0‘µ{5Ù0ðè5å½$ç! 5ÙÎ5ÙP|Q" 0= žÀv·" ŒÉ¼ß1å ¹G ++ÿ(aÙ( fíj„ühòÍÐs„„ ?èÖÍÌpâi)Äü¤ÔOØbÔ!áÔ4/)Ôˆ9ˆãÍ\±\ªü0 ++H ÐÓhbcÈ2 hU_² hUjhnõP­/CÜf"0ò=è)tû@‘å À”å °”åp”å[mó@å °åÀåpå ¿ùŸ0å å#q 8¶)ÅØ9.ñ.)ÅÀ”™ÊB l  õÝQ‡#³PY'Ú [    dK7Ù3à—˜i?Žå¼íÀXÀG   ÔHKë"0˜j@#0—å=^Ö/ \\i\ô^,5à |Ïe<!|~rHx%0 x$k è;ä.´¨ä¡äZäq2 l¸äcðÚ lò;Y R lähWÙ 3B òärL ½e4Íê@! ‘åÅ = /P­ ¸8ä<á<̨¨¢B p ¨)  ˜€0žå&  ãÊÀwÖ“åp“åžå žüà + Oàšåæœ4Ú± ¢ð8# HÚ r»z» 9×$×Pà‘å pÀž p1Û¬ì0!× :,ñ,,Çëx«`ë$Î †©lÏmÖß/iïK=Ûßßµ¢ÏÄ\\/¨ ÔÔ§¤í {W ++.9׃6h?0“KïÄMêÄMåÄMµÙË‹†© k v¢O‚h æØêäàŒ:Ñšpkõ.½.1 ž" Tžå½9+.…fX" 8} ªâ‘p á@‡å®‡ë>ëV†å pë q#" <Æ¿çHn|B "p›çÊ £qr0!< å#»­D~/%DÑšrâB„ ++8P˜B ¡ôNXuXƒÒWš #Êb !/Áb  »» f  Ê X*ž ++.0æ¦3 0†$æ?®ÿÿÞ§¨Þ –æÍ#ëN$‹ƒ„N’! ‡Ðj t ++ÈLhKt ++/Hã##0)fŠ v8©& ++ˆr$ ++(…xBb vå 8ê x˜‚’¸: xÐ'?B !òX•z¡5~Ú@•AO•é^&âRÀžå °â à À°0†å †å -ê#4 à²ÓÝ_‰  G¶ÓüÁú¨²B |  ¸W°W¨W—+ä å úm é u Øøé Å\¥ "@jÄ]$Ëà%uƒ°6{×S·’@@DàÒñYÜò ­Ýò ò¢? ++òÙ$îî ðîëîæî@áÿÿ ++¿:ð‰ 2!0“a%@ŠS`½`r?a,-Sù`@Uu L£ }PLšX .ÁüX#QÑyQªB v€|/!Ðè_ó'C |±– ++oóákWf* ~@Š©ñá"‚ d ?|?eå?Ë{€? hž§ümK ± UÄÔP ` h4ÐzÉhuòú €¨f€[¿ ++Hâ ‚¿†[ð„[ü„[„[†[Š[ðˆ[üˆ[ˆ[Š[RˆHðÚYÆ%~?/+p  \öa)0 / å[™ ’,Ò$HÆÞÜæèÒèêÊÜaæ[&/h }Ó@2!àëRžåÏ@~‹/ðyŠ÷\2Ž:(Û!ÞÜá5$é:Ø ub”/ŒlŠAÆ@{ ++ãËj, Ë_e a #¼ < ,ø¬ DOK@Šåc/=¤5 Ĩ5/<‚|ŸuCXè>v0 ++:¸ V@žçà` 1T6v0ö&+/0Ž<çZŒÌÖ¼6S0‚å@òä8¬ ++*-š” ++”‰¦i` €Q ËÝ0šõ D€é<ª-1TáÐSÈI„4½sH3ä0™ö- ++›äà‰åè0™å_èà‰åì?ìà‰ž/±È È|+ù|<.5<<*q#I5èà™ 8±|v$@x.õµÇ ˆ/9ˆ ÛÐ #ი *¡ð/ýþ8Ù8.ãþX/¼þ Þ#` *U`v|.oþÔ€fÚ œ&)ÞØAƒd  š$ *ÒÜê Œqb" On í”{²" éž6jmBú Œ /8ÐÐ 3 6À;Ï1 ++-Ï »8ŽJÐ`PB ¤-š1à "´=ÊYRq ƒ€±ƒå ƒå ƒ<*¸‰ =]=p=1à„10Ã|¬2 cH%0ƒxÊ00 0—=aàåò© ++; æmR&&å5žo>N% ¸"<é<úSûÆOòOíOèO_ãÿÿ ++áöœ? ˆk„r ’ ù&ÒÜÌÞ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbplnPJ (‚ >ò ++DÒà F ++Þðö ++êÜÎÞè F" L  ’   { ++‡`‡&8¬$8”~1߈ÿ ”X z –¨ ˜"èäÂÆK€8 ˜X ++*ƒ  šX‚ PœXú ó( ªÈÂèÊZÂÜÈZèÒÚÊ>õ 0†ÐÊô@¦ÆÐÊÚÊ@¨¾#@¶Ž3 B0Ž3 Š P º ´ª A,€<8Z –¨D§aéPÕQï ~ – ++<(Ì !ÌÌç 4ï;H *Hbä Yä Jä   \ü ¥ü À ™áZ!@ä ™å8p2ì™ ŸÞÇ—T¢ü5  d"@¼"Ë—Ã8 Bú: s†åà†â ;¨¯ýPà†â}/Ð@†åà†âà†å k¨ó†â#à†å'†å(à†â+à†å/†å0à†â3à†å7oä@;à†åŸÞÞnðAá `žÏÚá#z:1àž` ++‡gP3PãOj/`$ 1.7`ã®Òð9^‹q!0žå “Ãgä ¬ ©€¼ *©¸à ++¨ HñH€/)€ €/q€#©€4ñ¨ x ¨  ¨ ¨ p /qÈ/ð ¹H< è , /šþ @ìa3ŠåBM÷¨ ?  Š ÌX2X:72 ++ ¢ö_2 ž¡W ¢‰1ÆÂÌåŒ ®   ŽMŽCª4Ž#ŽŽh ^¿ j.%j¼=be@1 à”nÊ ++0”šÀ'`Å`¤Î!àŽ[ÖL/Ê…ÊL¥ì]$ŠåÊ/ Δ_íH ¶/Nª ú} à‚å@‚ò:ÓÙ<€<Y€å@€Â „¦:F Â0>é¶[^. [ ž û ++|i«/ tÒMòN ™JN8Ñ8/(ÿrC*9¨½R¶R9ZÚG]¨#ŽC ¨‚‘G élef4zƲx ±LÝ*Ö˜J‚ l] á­(2h @âÃSXB ¤`)h¦  @UÁU¹U¨UÇ­ ! %ó1 &É»¹Pù  /I+/‰;ÙP™ Tq ++l*™ q™ ™ Ø/aØ;±Pk,.TG­@­*) H vŠ ¦(îH #ª”P”Xʸð ++H z% :*D " äÄØx ¨  È­²­S™­0µ­p ­j­/ø­ ­ ­1Ø2i á-ÉhVqS&q¨q¨q:¨¸aúQ 3 .0 ¬Ø(f^fV :d/md//±d/õˆ ì *5ì t4 }Hª£o’ ª2K ¬2  28!‚QÜÊî+>K ¬ €vXz ®ðüH2X" ® ++ª„(PþS' ++(‘WJ ®‘¢‹#Šq ê(íê• zq 홌.õ PÆæRæÂÚʾÈÊìÒÆÊà(Y@XB )ßF ++¢ ªòˆ^‚4(:@D áò|D@OD áz2 óèO áÞ3a ++Z °î @•8º%8I1b(FhB4HMTNp>¡ n†57#-FHNŒ1šø:U.Ð bqŠ¥ H”.TU7Œ®Wé3% ƒŠt!69˜U"0 ++b-3Žš~¾Ö‹•! œWHWÙX.¡…X–œX¼¼„Y”YN°Xç”XºX ’HÒÞZÒÜÒö^u´ ð h&hz`þ ++ ©™ÌäqÖ 3:9CÞZ C8Ñ$6  ã€ëúu› (ÂQI0 ()µl6—8 9L¢œ@20žØ!àž<ì6 ¶¨-8¾¾" àÒP°- „ÎÛ8¼Y¼d/±¼ 6Ž –ì( ôô8ê 2âÆ l;VD7µ(T 6.]¬.ñþh/êþü2š$ô³ÊâZÐÂæÐèÂÄØ"±(B € ¬ˆ¤ÎêÂäÈÒÂܳ¹ß ÖP@“å Ãh­ —å ‚âà‚¸Gã! ‹6È1àƒ l±ÈOñŽ B0±…ÎÆІå†å0†åŒàW+_†åŒ`‰=†ÆTT {A ++":<OÔ¨þM€7 ++PpB ²š1 7I'r!¥>öafO  ã./eU‚Opžåj1±L٠âB²8â ²zG— 7² ñ<V10g ³=´ç ¶¾¶¶$ zNHœUN€B ¸¾¸¸p3* ++(/¬PYÒ ´Pœ * ++0< ++HN¥ºÔ / ++0 œ ¼ š ¾ @&x N HZ7f ~`5T …ØGŠ 2‹$a„jOÀŠ8t6 fH0ƒ¢ ¾­˜E ÂöÀÚ T ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #UB,+Xñ#¨B 5H  L$à™åZá@*€Xâ1 ++àŸåê)žå–žå Šâ`ðp–åàâàŠå@ ã ð–r}ø  Jâ`EâP…â,à™å^á:  á`§à‚å@‚å0 8Jþ:4ù†å †åƒâ`åã ++,°™å Uáì*°Kâ,°‰å‹Ð? àƒl ++ØlÆl(²l l(Œlzl(fl l‚lTl l D Dà‚åHJâ¸H/q¤/µDDÿÿê àO4P ++ZPÀÿÿê @žåýþÿê|Oøþÿê˜QL@ìþÿêD. @R D.•Üñ ++Çþÿêã@Sâj@Šåy  á&è [ÐíX@iÜO0Šå,< ‚),;£, Jâ(0šåV</@ _ði@h6’ / Dóf¢†ÆÂæÊZæÊÜæÒèÒìÈó@æêÄæèäÒÜÎR ˆPZÌÞØÈ:3Šu|æòÚÄÞØJðžÜêØ , ¡¦ ++ÂØÂäÚ áœÄÂÆÖæàÂÆÊ !’èÂÄ % јØÒÜÊÌÊÊÈ )`šÜÊî@¢ì1-‘–àÂÎÊ 1±” äÊèêäÜ 5 ÊæÆ m 2Ž ++xó¤ ÈÊØÊèÊ ý, L É ˆ0BØ8R ++é"Z|ùTð 8B Ø ìÂØÒÈZàäÊÌÒð~ ¢Šå&Qã&ðì"-ì± ++à á ž,@ ++`ÏŠå  Šâpå ¢ …  Ô šåDbçÿÿ ++ð¬=pš<`\ á\.ÓÿJ ++ðÌÿÿê âB € ÿð2à—å.á áàÎã0å#1 á0Ãã^á%Ê0 ãSá ++ €à ’å‡à‘åQ᧠€X³Ð ++0ƒâóÿÿêpŠåW ; ++O0Šåâ<¥Ã@pšåW€àšå0šåè¿›Ó"Bb8bñò@B@B`8Ú ++ B(a 6ÒÜ@ `ÂÆèÊä@ ñ @F¸üÂèB  äÈZÊääÞä…, “p á° á  $ ÿ ÿ ++0—åpŠå °Šå$ Šå0Šå¸ ++jìÀñ °šå$ šå0šåSá —X@àšåÔŒšå šåd\€[ãtH"p” ðjÌp"pŒ¼&KL ++,"^ìñ‚åà‚â à‚åàšåà‚åà‚âà‚å0‚ Là‚åÜ€à `@áÿÿêŒ ŒŒ@ ‚⌘#˜4OÞÿÿê„!/™„€ ÿÿê à—åØ q)àš   áx ++@à†â À†åà†âà†å “†âà†å0†† ++ *q —åøà™¬ =G`E⨬@8 õà„å„å „å °„Ð ++à)œ”ªãÿÿê á œ9øp™ ¯ð—åì)HÙÿÿêü° oèqð.ìþÀóåþÿê.º$ÆÞÜæÞØÊZÒÜàêèZàÞäèÒpHØÊðÒÆÂØ¿``.$"-0ZàÞb3ÞÜ~7õð ü~@ÞÜ@üæ ++0BPè Šü~@ÄÊÌÞäÊ@ÌÒØÊ8ç@üæ@ÞÌ@üæv@èÐÊI!ÇÚÒÎÐè@ÈÒÌÌÊäSiH„ƒ‘ &ü~@ÂèN2@üÂa% <ó-x: æÞêäÆÊ0ÎÄîÆèî`ÚÂÐêäÄêÒÊÎànêâfZ`P  ‚<5ñ* ++ ++ÌØÈæÌÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++*ÄÌà  C,Ê0 LZt €£ Ë!Xzhú ++0zÁ$ ÂèÞÚÒÆ ++XÒð(" BêÜÊðàÊÆèÊÈ@ÊÜÈZÞÌZkõ@äÊÂÈÒÜÎ@üÂp bRˆBQ! ++E5@"úóZÊÜèäÒÊæXr8ìÊÆèÞäZ|ØÒæ$. p ÂààÊÜÈ& #P5«HD°Q@hzZ ¨`0ŒH‡2äÜdUxB0{¡Ô8jH`ê ++(pL(Þ“§‡ %p !t0TãhÐTã ++Tãÿx0Œ&pˆô¬ ßœ €àâ^ãÏ`%“&ÿ¶Ðàà^áÅÀ!à 4µ4)›<QQá¯D1ã`,‡,pà’åàâЃ$¤ðRãºà“å ão01Rã1 €à“åãhU 0Šå °Šå¢9<R0šå °˜>hK  ã3XX €å0€å °€å 9 à€ø=à€D(p4FT?pžåê 'éêC á8ð VÒà á šå šå¼œ<ü ÌÆdP*‰P T¬} ++@  ãªT þ 440¤5 ãÄ A *IA ¼" _Ýÿÿ ++\À Àô!¼/¼. ÿn.ÿ@*0 ¥ ” „Ø  0àr ´j¬e¬Xœ œ < ?¤4¤x/ à¨K/‘¨SŨL+-褭 «  àA˜ .Ýü.[ÿT1¼Š¼{ ++ä0™åŒ5/mŒ›/Œ‡/¹ŒCT þ%vèòoÿÿê†:<,ú ++U ++ùZÈÊæÆäÒàèÞä$ÄÈÄìhæfÐÖjÔÂnäâØZÂP8 <F @ ++ ++ 1 † ØÊÜÎèÐ2 VÆäÆ0 @0 3ðM ++õhäÆÄ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZbplpž(ž51i6Òà‰'ƒ2Â~‚‘1îÐÞ"‘‘à@ l `B !Ñè‹ ++@‹ ++s ++#!@š¯5“óðå ++ Žâ €å å žç{æ©À ã6Rã$Ý*-%'  ++ hû ŒBšåØÿ§/$À§ nŒ å§P$ÀšåêGp0aüz„EjÚA(Z(`(('NÔ)<[*]'0Œ9('³Œ-'ë<+'•;s#HÉ ø/“ øF\ãS ø'Ì HfH¥F tyTt\L ++t.ð8Ü`È,/ò`'T`@.BØ'×{¼í-"&.Qˆy à“S °çw CXá  áósìsÄÓ ++0@Šå4pŠåd\"°\Spå`¦úþÿê€ 9T§Sº,§Ð` á0 šå4pšå8oZ0šå°ï@ Wá‹@p ãO18 Š)*ˆL° ás,sò0Šå4 Šå1/.,@2'$"0.Ô6.?^ :_ :~p> ++ÌM4) „L2X(`.D!èd.)ë¬&/ àh oX ‘;p ¤&Óxp/@X oH é;0"$À\ºœ&À@,/Q<„ИH¸äxN€*´ ++Ô«> /Ù<€" Ðú|. ++..åp:.ÐÐ9…}: À ØØ<*¢ð´øoœ Ñ=€ì,TãL=@…ðÿêd¬) |-<'0<'X/ñ>H" ++° * t'ä0•/ @[p-@-¨1 xð /AAp ˆ¥/BˆC/qBˆ $/yþl # /åB¤àœ/¦ýì$+l(ÿ/aD¸' l(/µDl(K/El(?/iEl(‹/ F$ ø< L/eFl(Ô#D3žçscD( ++| JPáé<*´<.|\/E¸DQãðD;^ãiä:¨C5N”0/À”0/ˆ/šå@!/IHà ¼$0”0T/¹H°²x«".P*./øL B\ãºX~H I¤0H !Sá¤P0Câ 0¤^¤0¤^¤/àP jDJP¼è ã¤/YJ¤´ Ô´/d _\½¸" ¼1š¤#/K Ž¤pŒHJ(HJL(HXÀ2œµ/¡Lœ?/õLœO/YMœG/µMœ À;i &‡¯_jn ++  Ìd X:NÐ" ÀXJ0=\á0\', \D,„x+¤X9 p@ÀL9ð&P O¬ ,76\¬4\ã6¬OlA ‘åOl!Sá,C!àCì'°- ü!^@ëh`/UP` $: ø` /©P`½äˆB48Ð/!Q¼´X ++48p#‘p pp$/Rp 0T œ€8è¹/=Sè?/‘Sè €°/åS€.yþDr‡j°OœâAýD!0Œ/qT¸ t)oX ÕT ôN°"8%¤>/AU8CH8Ut"Øü3ì^0¸, $$/%Vä$ p$•p& àŒF%˜œ ˆp”"À²Ç-/((KE °¤00p0(@4( ¤"ÍïQ“àâ^ãÉ h3PãÀ ++˜nø—<U<|ž.à0šå “å&Rã•®—¾— ¾—?“Ç]üѸó>zTË ÇØ òŽàB:tØØëÇ/šì.½» P&^ã8l0Þ˜n–R„"4 \8y00Šå€"@0\à" ì` o 5 gx"`# x`|@\ˆï—T! Š ê 0šå´‹²„p0žå “庙:0“¢‚ e ++0&Pl ++ åp’åW<#ú™R3S\{QSáp@‘å &…R°K “ü?Rá!("ø p!‘¤È"@Š6‘?Ywu8‹ô8z.0¾‚ô‚šöŽø H†3ü0 2`Šêƒb‚Çâ`ü,0`ƒŒSƒå @ƒˆƒˆƒˆ;ƒåÇè3ü ‡³%P D L´¨¤R 𜴒xA 7#œ8àO”"@[˜[ôÙ<xºˆ ++^ ˆ¥œ@ á«|` ++äá(@¨ Ü.| ÿtÜ f‘Ü Z Šåöþ8 ++¬£• w ’僕LQÁþÿ ++úH0Šå„ê™1 ã³SÀ@Šå€þÿêàâÛc0þÿ(*Iþ0 #0ü à'°X 0ÜX ´ ¼ “RüOà*8 %küÕ8 à8 "0àü 8*@ /¹$ +˜ƒ[ @ ª< " †/ Žà©q˜©¼Sàžåd'#ïN°tYtp´û8@Šå<ÀŠå@°ŠåD ŠåHŠåL`x ++„4€ ’>U4H4 Jâ|¸ 9 Ž( $ $¤ ˆ¬W<.ጠS4§àp á° á8 šå<š|aQáÞ ++›€°7<">£Œ'‚®°ûÿê@(a€,#Ä€0²áp á8°šå<Àt ä5 ž—€›—€‘ð—€0—€4°4À—€"°ÏEØp0žå[á_4à €pƒâ°‡åkØ!p‹†•À t , @ðŒ,&`ž\p˜0\á&6™:0‡âŒƒì¬*„®?0†,,º‹/`¤ñÄàI"›å ƒ“5œ!ÀƒC5ßÿÿ((Øpõå´zhg‚ƒ&‚— S°g‚j¼(eDì ÏU°oWÿÿêËï3„"¨ oPÀ á‡„°  € À³„& 0$¨  xˆ.çÿ¤ë„ . þ\ˆ.‡þÐ/xþ¸ ”S‚åp‚”S‚å 0‚”‚”‚”N‚å^þK"ê_"@(¤Ü1ô/Þð#o<Åðˇä ì ä‘|’pŠå4°Šå8(äŒä¯7úÿê@Ew€ä_0°šå4äNäDä 2ä”"X@ ++:›*H&`ÿ‡  z›ï0 TØX‚åÀ‚åà˜õœÇµ° ,° ·t°ÿV~°œÊ° Œq¶*#0W3 ªÆ«”l WQ3Rãp$L °ŒB ã<7B€L*\” ++oc” ++.¨ šåú‘HZå Ô ¸ ë=T"`oOÌ*p¤ð­/pšÖ’ ++.iÖ’STãÖ’r­[C ø4C‹±G! áà‚âàΠ„P•à*P±:‚á áàŽ¨Ê$ödÔ7qÄ àC’≻!. €/à„ kÄi” ” "oÿ¨sàSâgÿÿzXãø/ÝOdCüL%* #/m; ¸Ô¸¼´š´v´(b´H/™´o/°;9 à‡° °T«%°@à áŸ%1Éÿÿw#[oŸ †â‚çø´ï̗̃Ì,/5 ÌiÌaÌ(/© ÌI=ÌD/9!ÌOÀPÀHNºœ +œ  ˆ`„?$pš¤ ¤P :‡L  ã Ï ã†âçøŒð°WÇ_ìã, tt t$@ ++ºî@o*Q-t ã@Šå x “’  ì n •#üà~ÄáäÌä ä oÜ$串äªä$oÌ$ä’àsvô¸è ÿx°|ÿD_t|ã|x¯5ÌO{™```<d¯—öÿê)Å%d~d÷”d„0„T„J„ 8„*˜&< m tm°m”  hí:¬\&p6¬3À‚`?‚åÛˆòøÁ¯œzª" @œœn| ±'œŠª" @œ·•x$…ì 1@—€5þ¦­OmÇpœ jÀ9(¬"àGm*,°XT c°ŠåpÓ—ü Ì@@'pD ìè ggìÐá0âSãÛÿÿ @”¦«êü'úþ4˜'/])&&00šÜP WáöÐ Û²¸ï™?™<d.0¼—ˆõÿê@ƒt<—ÀDÀ á3™p3™/08n8d¼¼‚å 0‚å À‚å8RÄ( 7™ p¨š÷š@à &8à`æ­°Øo +(?š+™*°œ x°& Àd @ S³ DØP°†å h!0 §q èؼh ++3t§È•Ô|)"00 Wr/° ”#.Q, "0cM&@0_„ÿÿêžp»Rè!À<8$/ 4èP*Û"ÀD˜l`l ü@&0 ãü"&0ö©+¨\4 ¸4/.¸‡"Zô¸/¹.¸ÿ/Ñ/¸ÿ$/ 1¸ÿl,/ è#.½2(," ä #]ó—ºpT0 $‚$8̨ôàÂäÊÜ( ØÄäÂÆÖ(&(Ô ìTÂìÜ d„ìÌðeÈìÌðd‚ìêpeÆìêpð²ÄÞð(¾ÌÂæØ(ÎÚÂäÖ(( ÒÜæÊäèh³#®ž³sx0.=© r=©8=©à( ©'Ü:©*:©(,8©PÞÄÔ 8©QæÊÊÜ*ìÒæÒèÊÈ2[©³. ++¸B¬ÂµPX0 ++x ++# ++(µ£¼äÊÆÞäÈZbSP ä' 8µaÆØÞæÊ@óèÐÊæÒæ€B 8 ä=- 01$Êè-§fÈÞè( $*sÈÞè@P\R$o2( ,–µ# µµ µ1ÂØ@-ªÕ@èòàÊ@üæÈBU5à 8Ò4p2—5 ø%h(0(×øb(HÎÊÜæòÚZ|àäÊèèòµc z4/µ$Êäã ++TäèÈT€|.#»«ñ·PP 6êÜ#rÎÜÒôÊÈ@.½FüæØ•ˆ88ÆæìntP²ÌÒÊØÈZÈÊÆØæPÁ¸B6 ˜ ˜,QÂÒØ?6,Ó0Ú½MÈÆŽ]b¯ ++40†c_,šå0ã P|uïŸW”0ï"40Ÿ,<£LPá?CPáã% ƒ"00ƒ   !8=½õ@p á›s&pÀšå<@šåO ,›,›Ì›› p›°Š¦ @›B_C ++"à™³Ý¶S} ++sb¼ H ¢@RâEj<à 'Ž1H@ŠS0"LàXX8×q»ŸT]8Ëb8 Jâ„ÿÿ_*ƒ,ÀÁ,¾ ß°ã/5žªß k7ÿ7 ++“"" °ÔÜ8 ++ZÝ ++ Ç#¯$@šå&ÿÿê?î""" pc ", "< "bÃPSã=Ð0Ä6{´%è¬2éØÇ/  ++ jÐ ++"à ++" ÐOÄÿÿ ++Ë ++/Ï ++;õÃ/· ++ [5˜•Ë$.:þÃ:·Ñ1JÂQÀ6X8(2dð 48R6Ø:`L>ÂÜÜÞèÂg¿û$ÄÆlÞrÚÈfjrÆîrÈæjZÄS³7<0Z³=>% ( ++5< b³sÇ#ààþ 0 ++‡ ++ÌØÂÎæ j³Ð> X â6 ++Ð[ ++!8x¾hC¾D€Bƒ¾± LèÞÞ@ÚÂÜò@uäæ@æêààØÒÊÈ@ÌÞä·Eüæв& ++($¨‘¿…H "xx xã0X Jf?ÌÊîe à4%h¥€6 Çû¿b‚6 ++8û¿Á%’4ÀÒÚÚꤿó (J&àèä ÒàèäBÝÑ0Zfdê²@êÜæÒÎÜÊÈ€ ++ìÞÒÈT@A”ÒÜèB#1 0 ++æÐ#Â`ebl'hQØÞÜÎ^Q ++Uilh$,"Y# îSÀA¾è ++ ’ æÒôʾ«#æ z@àèäCÂñ ++ÌØÞÂèæÒÜÎØÊZ?0ÈÞêöÒô ++ Lp P0PFDÈÊØÂòÊž ++2 ++%n`0;@@"õ¶FäèÈA gìÂØæE *E Q B q êàÈÂèÊ"*"aD €Bõ+24€F`B @®É"TË#^@ áð40beÁ" ++`ÙOFXA#¡ RˆH$ðZtÄ0èäêOÂõ >ÂC`H@T„Éa5B48ˆ` ‰@²«Æ!à-0 Ñ8™8!àÅ/Ñ8 ^ã$© <ÝÝ 0"ôÿïÎï?¾PbJ0!h£Âb8ÚÂàÐb8%‚4ß‚° 2ÜÞÜZlÌ@ÌÞêÜÈ@ÂÌùÄ!F¶šÃD Â.wÊcB¬&ð0X 0ÈêàØÒÆÂèÊ@ä`@Füæz@Sb08ADàå°Cê4`2 E ++ÐÐ:hL° Œ ++˜Z¤x ŒX Œ ++xhG¬ ++à 0p ÎäÂàІI(CÚÆAM Çp(( ŠêÜ9 Þä@ÞØÈ@ËCqÚÂè@ÈÊè0¤ZZZêæÊ@ÜÊîñîÒèÐ@ÄÒÜÂäò@Ò^Þd!€þ$[²þ&]²þ& ++ø?ƒàWÙ&8™D˜ 8 ++ÌBÄòèÊ*Å@ĺîøŒð kâ4@TBN ø $äÈ&ØZ9! éJ× ééûÑ þÒO(é "ðé(éâ¢Ò'0Ø.à‘ ++ +·x r‡} # \,gºÿ\ã)§–õ @a XGl3“’°Šå<@Šå@ M#$Œ", ?G"pCG/Àð…E(ÈÄT/oR/¦ºˆ7M@€6$`š¤à¤°0HçL8 ¤/)¤ "LáòÔ"B!øq à àƒu"p *à,&eôD¡±  ± • /$pa ÛLµ ÌBa Ô~Ç€N áB áœ:±Œà Àå ‚{Ð ¨ïŽ,¬jì Õô ¬àP`%Ì' È/rÀéå(  ?*e# î ç< @NXQ2U4X Hê@ìÂØêã½'ÒÜü!èò…"NP Jz vÊØÊÚÊÜè" !À4c jN ++°ÆYW€@ÂN2 DâN2 amú4p©ˆÝS¨B,W°- ! ++@dبBR Ð äÈ•$¼¿"p ?&p•íX^Ô™ýD$U: ™>yNü»0N"°eˆž.0Ž‰eWW*Úèq씵% ¡(!ÀŠU;&@ ¼"( FM */,pý‘¡ÜL *,¼é€¥Crà€pé'Gùh}+" "4àl@G1 á¥L GqÉ%]Žà 0Ç/ÄH‘+¯ie? àŠa@aá ù™ ,bA­4 N1=2ƒ=2 ++ƒ=2!8­ü»<¦‰@Lp jüÍtQ<®Àj+Ê2*Ê_R` ðµ:RÐ R˜0 ++Ù`Ùg@T ++ÀÐ`è2²R£E8w×€ ++4•/Ìð~ ++!{J~ ++!Z~ ++V~ ++4H ~ ++/Ìð| ++üçå| ++8Ì| ++e0Ô8T9*"ÔÀŠ”@^¼,ItF.À2,´¼ 04"p2ÀÎÙS ãHŠ¼NáHaX ++ˆC¨+VÔóØ!T ++˜ ˜Dù˜"‘ € ‚â‚ç°   $ÁD ++sÇ0 ++\O0 á$•!pÓ 4 ++e*4 ++|&4 ++à Bâ8 qâ‘ôÎâk|ð 01šã{@€ç‘|/$ ++}$ ++„äFù AqwÓ$ ++4 $ ++ .ÿ$ ++òß*$ ++V#0@ 8ÛfÌÒðÜêÚc!°†ÚVH F–ð ++2a ++V {?Ìð ++ *:V ++42V ++%}b;¸ ++X ++0ˆ .ð ++ä)Ë ++<± ++CÜ”|A0--"Š ++ 5|!S5,5$LÙ#4°ô` ¹DåG  ãH°ÅEH# °\Xà¡qð \X(6ˆš€a € ì “ì Õì  ì °VŒ0Žâ°ƒçä @ä Ð 6IÐ à ’Ð  ++ Ð ? àŽA5 ++$]8hè½5Ï  ã0†â ƒçøuLA5/.îì 7©ì ì Åì ?XpɸɵúXÈÒXˆ0`£n@Z ++øÜ 4jXÜ +…šÜ ô€^pB\ Ø ³ ˆ# ++®-—#/ð#|#10 á#ü!PPáõ< fÊ ++<HÞÝ4IQ oðY Â!­Â!ÁšÀ á<°šå@@Î!!#…#{#4E ++#h•4 @•4@ ` áÅ& ++ ¼¡mKàÉ5(0€Ë°D"L e@PàŠåqJ2 0ŠMH]`– ®! *aš  ÄÊp™["0`lxmPoŽâ ‚àUL*"UL•d\ ++@@@@ @Å}+ 4MW/?ÿGìÖ‘9… R$ T°ê!.±ê! T°T^nÿÿê-ê! ÍW"p #æ!$y:Í °TQ ìdrÚÀsPánª…- Hpç$,Q ”Y6Àà€âÀ‹àpŒå  À‹å€âìuJ”" 0TÙ88æ4øjì'YIJ" 0T#0 ¬0šå9=ÈD5 ++äääLä oä'=ä ä•›ã…- ć¶"UQ N#Y<$y R Kþ­1y 2\H°"€¶"5:\Ú5x B] [ È[ oÚ\ ++pí Û! ++Ø!pÒ ÊP A’\à!\à!BÂ\œ ô28^þEx 0j ÓÝOB4Á éhB`  äÈZ¿ W ++7s7Q\ ++$8ª>˜;1"0þk, X0>6- Dø, ™×Æ`›> ¡ Ä„ oÐù„/Y„ÝÕ púÖFˆY& p¾EK0K0 l~6<IrJ><8><0 5y4Lð÷@ð LP(Àšå,¹LÇL½L «LŽJ `°!šåœ°D"`îM¤ "œ›2¤u‚õb`ݤ.põ[Wá`Þa#ÀÔö W3áÈ'°¾Y0> 0h 4à4h¸ 4hŸ4 V 0ihŽj0Z Ÿ4üA/"î¼N¼<¼Ù°y$(¼Z9 5tDÙ$Æ* ++Y^+ÿÿê÷ú ¸*Aô…2A æ!˜2A]c6 b Zý ++¬öc6.Hýb VAýÿê„b dZ D(fj 5šdj ^à ²dÖ5i !h^$^% >O?’ÞÜÊ@ÒèÊÚ@X1œ?œ?K Ø?0ÊÈ@Úô)pn?w482d o#bo3 * PC€@èÊäÚÒÜÂ)Äòi@ˆ|Zf( 7@/ˆ— Ý?0 LÚH÷FèÐÂÜåC2ëT/0@ …  ++d µ  ëgi`dÚ D-d!a­Z4 ++Ø™pëŸhŸ;:¥Òc3C¹R48*»šhVÿÿÿÿÿÿÿÿÿÿÿ#hZ ++hh!^ý hý epPV ôw ” ý ó Nhó ý×é hé hé /¿Êé •0+¹Bß h…!Ë’ÛS ÈI`X0§+B2 S#ñp äläæxö ÌÞØÈZÆÂæÊz v ÜÞZ)|÷ ÆÐÊôæÆÐÊÚÊ~p L@BjO4ˆ &Hú·ZÐÂæÐZÄÂÜÎdˆ0Ô ++Q…àYl! š¼‹@® ++Íw"uÁ~# ±°¸‹[< ‘ ++À‹â À€å¬Ó!À›³Ëx ° ±\/þp¨ä‰ ¯Ap‘å¯Rä‰P Bâ ä‰[ ?À ã(/öPõDÅÅ ì'°,/S$¤ á]ç´ˆs[âÖÿÿz ub¬‰pà ‰ k ©äÀ ”ÀÀ¨T/°X jŒXT8½VHÀ“X±i Ì ++N‹ÿBà€åø Q€å p€[ÿ P(Á_Á_[¼¥¤&àü" p•~ # ++ ”å"!ÀPÂãWÜ#ph nø" pa€”Ô „à‚å ‡â;üÐ"$ x0!$$ «L,¡œ¦D°‘â09eH M7/Àì |T¡ ì*°T" p56Å@$*.lh "Ü-@¼.løH™kp“å D tð`à—åæ2¡w$ áp¸ 4Rá <!åÎ< /åH'HH ÌÎ<#pü3Á7õc/¡b õ… ( p¡bH(@@ ›åøHà–ð°›åÀ›åÀœå,Á áÀÌã\qj ++€C[ã°áOïÿÿ</@ à .¥”<p,`\A~ð ›å°å°›å+± á°Ëã[áUþÿ ++¬/SþÔ'/9”7þÿêH¢z™FB@æòÜèÂñGCˆB2c+øxBÖ8 jB ˆK€ŠÑ0å à—åàƒàÄz$—åSJŸ Cðšå8Kª;Jt` ÌÒØè–WÀ Bn ð 'O£ÜÎZæèäÊèÆÐ{"àš“ š“3RãÊprî"²–lÒÌÇ&º5úJ Â5ì/P‚â0Žî¶û…@n Ú3^á/×)ñ0€à0“å„à0³*õ[€# ³f‚.Ö¢< “†# ¯fà*£®KƒÆ6 ++Sá áÂ6IJ·leà†âŽÊ>ýA ++ ++Ÿ ++QHl¨` ++@2n:KÓLÈBr ø ± RTãØV†±4Í"Fé q& =È’-"³>+6U3… #˜]åù±°6…ù±HPá‘]å0Wãs ++Ö­éí ínàáY*}:/ 0Aä›T½O ++X)X/¶X+åX`·X”d¹ oÄA\#Ù@  ãV`b‰/$7Wdi:Ý/7W$u˜7è)È&‘8 ¨ ) ±#0Àñ¿pñ¿Qà [À!m }3 ù– ßU — Ð0'IN™šøÒøŒ/ø6ø ÑI1WÕÒa‡a É/ N. ðÀN.# 0Ý—R@Šåsþ;Y ¹/ Ì _ð … $U—[Ý LYL.8þ£.1þ¥Sd`z.! â–"pX4ÜÎzÛ`¥0 Äîà(p—ÄÂæÊZäèÈ1HD."s L8B4( &Î5[ ++X@FBüÂaû| ++ûtHt NüÂ;ÁÒæ@ÜÞè@ÂØØÞî8b0@FB„´@ÚÞÈÊh FB†ó8Zr $  ++P°£th ++FBÄîà&&* ++`"3ÊÞÌ"(J"&lY£hBÔ82r/AÊrG7 (X•v ` *ÉÃèÞZÈÊØÒÚÒèÊäáa?!ü0[œ"0ÃÏ¿×0SãÈÒ g§=Sá;g§=Sá6g§=Sá1g§=Sá,g§=Sá'g§=Sá"g§=Ság§S¸u ++ˤ ++ˤSˤSˤ=Sáˤ|’ä1ŒQg. ++zû*3 ÿ[(Z¥Ë\4”/[û§_õ#|xÏp&h à- Ž»5žg (­ ³Žâ 0€å0å?Èxw20‚ûKæ ++0f‡à0‡àÓò‰ ³‰ x3 ++K͸ h(‰ Ý5TP oÜxTÆçø d4(X4 .­˜Àÿÿê” ƒ[³ZîÐÒèÊæàÂÆÊES¨Bn#&8¦:BhB< # ++`z%; Grv(7M.3E˜B>$ZÂxXB  zp | ~' ffFBüæ¸Î!pabjð ùŠj˜B€ h« æ½:¹œ« &p¯ Õ¯ SÀ ++_ $c *™ë"$0d16Wuü#1ž‚Œp¡1Rá{âB3Sãa±z­7dý "ÌÐ% ­0HFXÞc"°òb@?<ƒ – Áuâc$ $ ë« « $ è¯ œpèñzšñz5 nÄÁ5ˆ"ˆÿû "$0õs . pHs$]3Wá¥å8h? p.y0t]Jd0Ýd O¿0¤ ¸Ip¤ V¤ ++¤§   %àžû )ÀK€. @Ð*û pí<#4 ÍŠû -<ÿ ( .qhô% äº4/pÓ/ 0&p4'ÒfX 00`€0a|pa|ÌèȯÔ}#$0@pã .‘ `+ã $ã 5Zêâ ±È Ìð êpO” 8” ì” Ç€ Fì@àäÊÌÒð”!&xü Xü ` *€Xk%0@w?8 (tP(oA‚ˆ{ ¦$FìÌðP\\\RuL˜ª sú€(„ª 0ãHã?@ *oGüÂøå% J' BØÊÌè(/X"/ý¤ä!I:€ã f0Bv€³ h³ ©øBŽ  (Y ž±)UU 0U ŽUQqy ++àe‘ q0žåqÚý@ã_*¥ ) )jЭu|pMj Á ¹ áùL‘(<q< }݉@‰/ ` õä‚ M ­À1ôÊ…# 909q4ª r¿.kÿ9d"†½D5 ˆ ++ŠËpÊHà侓ÒìÊX$ ++XÛ@Œ$!H(K úŽ(• k    f) %©èI@! ¤ÀõC “7WãTq¨èð^ èðJWá`°ü'åð*upI™u&ܯ3SãuñW9œ&@ð+"(lJÉè ++C“âó!<qÌJ "ü(t EE<èé, ++H \Ü8Hà† ++Ê݇œ¯,£X [Ø<ÙX,Ÿ©L+,èÿŒÅ7W᧠ª" ++,¢ÉLWáµJWá˜t¹,^æ8WáY0$$9(Oõ ç=WáJÐæ=WáE4ç=Wá@ çWHç=Wá6 ç=Wá1 ç=Wá, ç=Wá'pç=Wá" ç=Wá ç=Wá çW¥~ ¥+ ¥. ¥@dd]/ðþd//d3/ådC/=d$AZg…¬0/I¬3/‘¬C/é¬$\˜LDt/-t"  7w®ôd"xôd@7CSãø¤X" p({ ++ \(5M0à BàCâMJl),½ €*€ŒX.(Àx w|­ pùjQ¡L*¨"@Ô ” k¼,}ìhÏe„X [¸,ÕX¸ °[@™¡ Å@ ++@a‘ø*³ýHñHQž/‘ HÝÀH nœ,Ù H$HÈL9‚¬úß#‰_1’K"#Cß#! ‘¡ah-` BàP%ß#3Sã"@ð¥ƒà@˜ à0 àKSâÙàT o (- œ¥›ð2øo ,u øq! “S0 áì˜úHL+Ùd0H/Øþoœ;! Ãð Xí0WáÔ¸= ¤ Ð[Ð"Ð;Ð#"(ÀM’r "ÜE?’r" 0-MÝ"\@ ãTà‚¢+=Lu>\ŽdÆ1z` 18Tá7<¯@a@z@W@—Ÿÿÿêà ã°";Ø©µ{7ãƒY)1ü_¹qÚ Rã|El!ÿC÷wÊã á Žâà›®-VåA ++à‹ÅÍ ++@é3WãÉfà†â°³9I"½Íå3—âí Ì" `Z—/@( [¼ ÑJu&Ð" `^— NÞa`$¾—…_1ˆ\$¾—¹!@*Õ< l/ l ¸™è lå?pŒ“È á‚w-=¨ Ñ* 2f°8+ íHY+© yr‘Ï86=}%D4TãI- )ó9RáB%DW™MD éHU?p5 Ð ½&-,ȵ íP5 P5šzÙYP5"°--/,@€ kL€päp¥NÁÁ( \/$p` Ká` \D¦œO`‘åœ1+/@ÁEí@è9í(.@µ~5Tx@WâØÿÿz '(ÀH! _ ++!ðDœX/$p\ u\ œ9DRp‘âíý  È# `Tt oüõt|è$"Ðýàä.$xÌ Rz.i ì/$tO±ýÿêl)Õl†ŽýÿêH*9 ++CxB6 vØBˆU ++ U ++H¢Š`W)¦ÆÞÈÊ@àÞÒÜè€3ÒÜ@Ù‹¨ÐÊð@ÊæÆÂàÊâ)5° R?PÐÂäÂÆj)/üÆ8µ2 ƒBˆƒBaÚ’Èpv :68&/€/W#’8 °ã3À'Â’xt` @ûv‡ÄæfTæØÂæЙ Š*g#xå3@å3Xå30Ô3)¸± ++S+2;ZÖ8/”é &0-H-ƒ7B`”Ÿ'ahÞHlŽdÒèêÊÜè×9¨hHæêÄæÊâfp ñ(œ ÆîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÌÖÖ¬¨–ÌÚè Èöö0'0´¶˜ìÂäÒÂÜèñšÈÒäÊÆM(øÎG–[“3“W“&˜C"š8hÆÞØÞÜ~{"Âè"YœY` üÆ F …‚ L(¬ ]O ,­Ã8® HÈÞÌÚèM38tƒgC"ˆ0 uPP¤ T:O@üÂ@ð: ++ qAKš^0vÔ8O‚ÒO† /",@a#_aÜ(xBž   &j(ÄÂ2~#p™®X`a`1 ++°a›a$a‚‹å°›å °aê16[8› ++ ++"[áÎÛ—å 1\áÆ$‘‡à°ŽåàŒNw& àiÙÅ ++#šY JT žY>1 xªJ½,pžY‡8ÿÅv2ÛÅ ++ .yÁŽâ €ååj_G"2&À"9q q ”"*à"`à \ÜÝ-à"`>×÷9 `@ _Ì=BM `@¼Å &[ãÅ 4[ãL"bÀ‘åÀŒÅ 0ÀLà °¢)q@â Õ.$Å {„- ¸‚Ošò~V‚O Z‚Oq !Tq ~“Õu Ñ Tp° " sqPL€¾†J X¬ _ é\ ¨£Ñ C@‘†Ȅ ++P oüax ˆV°šåõþà/ tp nìÑ~Nt/ xOÕþÿêp)A6l ²«Ž+ÒŸ /°Ë )Ð|x\ - Hêž- ¨|çIašž8- k&ø\\\ø ª3c Ò<,8¹#gJ» ++Ðak2PkOkºX3¥AeX FJ@Š0š I1: x šðB   Ü<ƃ3¶ƒ3¡ƒ3hƒ3Ê¡ƒ31Pƒ3lFa1 @ƒ 8[àƒå^¡:0†åàJL €" : %Ù{3" JàpƒFD/=  $¼|ìØÞ#4/#4J–C#4 „˜B0`4× ++* O7K : '4÷ BFt@â§ô*9‚ôÅ€B¢ %¸ ,” ++TÄØÞÆÖëݵf#à’Ä°— ++åäq`žå –“ ++ôs†å`–åôîy-`ôƒô|¸ÍyéEÛ Q-aX0@‘ç4‡Ç ++0m(TTá4!0›OdÃ!0ƒîCUVãEˆ1\ã<…ó3ãr˜ÚCs\âj ]‡Å}WK#pù- Ò­ù\ jìAù\"0 ’"à‘Ò­ã``/ Àd]]¥d :®uk¢Øó ++s3–â¶svÐ ” k|5í] Œ¬ è`èX Û…Ý+¸WbŽ0p ãTî°/¦Í,0Í,t ­AôLü/‰ü€7#L¨L‰LbL|LZL?L L<œ<>Ôiç</}<¸Û¸(/í` ĸ$/E¸ª¸/©þ¸·/A¸\(hþp9!4TãJ«bp‘åp‡ 0pGà%ŠC«V«É0/ãpD* XRè-^¬sVâ×ÿÿzX `X jL™X TÀÿ X´ _Ìõ\ ¬¥£R`‘â þx, ‘F k|m‘F?` á0'"ðý.è.x  /á .tOÑýÿêl)/M l†®ýÿêRZÝ CB i`B ˆ‘>8 2¢XŠZ« kç +++F6)°¥ ++M/¢M!ð  +xTO!¢T ++…%²¢ :ˆBPÐÂäàZȧ@XBG@FüÆv©2L¸ —hB¦ 33?dÜêÚÄÊä ++ø¸Ê@%ÇÊ ++u ++—]+êN$â> ˜ô˜˜0˜!y.,#9ê"µ¤>L(“k$"(à7$¶¡Ì4y+Z5Ô \ ?Ùû“Ø#@,¬ÁÉ/!pŠ’:" à!1&0 $!²p $üüH/Õü{ ð••û ðb@šåÖþ¸¥e Pæ¥ /ñH.þ̳“óD ++ìHæèäZ|ÜêÚàr“0pjnÐÍZüoÀÚ-$=rÞeˆ%^h/©ˆõ`OíÐX$P=ojú- L‰LW *¯þ -A$?Áਠnø í¨L"þƒÁyD ð©A4à4iH.yŒD.íý™Bfsÿ xÿ OØ \=Öʬ†3ÒÜη-‰ªÆp6 ÿ:e ¢´°l.¿0bpH­bS(¶.~cÂààÊÜÈbX¸HqÖf7_$€YH‹¶¸/ ++# ++9PX~C# ++´ï.$hB+3)°Zh§3O jº§3 ++cºP‚t4`P/tFö\\\úT/x¸#YJòT/Fˆ [RÓ#¼7sF¶\\\ºäÍ>+_‚>%aZ>V0¾ðà$ö$ºøBÀ Q¨ "ò‡7ÜêÚF:·&Àí$‡&î +++Üî ++å$$¤î ++N[ã+å$¿å$º _!€Xø37àœá!1Wá}âŒ!< ‡âPSPN{HKÿF¨N ñA á(° ã›ÇàÀWû(ƒHƒHà¶07q jË0"ÀŠ* f °H"$0"À$("hˆÂl# @¿ ÙÅ(#-,šå`/àd nlõ ++ d¶8 I&£H[£Hd¥£H @z@W@•£H“m%@*‹,är2<¦ [8é¦ &Àpm"(°ügvã”]/Àp[xY3H#$0\pFðp [áOjW|Ī ^ ,GD70 `v .@bb"(ÀD—0h#4›|b2 ++"À$å "Я/ ’ ++§+Â$PÚˆ" @è "Ð× pd¹ð¤]4è•)rœ}Rxqá(Q1)Oà„Ë+L¾à”‘þ é',õ g8[áv À+;À< žç- šn 2?’…V2?"$0$:/`ä \ÌÁÖ ++Ø" w.@ÌL@H "<í$ P”<H³ / *%pèdöC^ãZèeW ^ãW(\"Hàf@Dr}²ç5•„&$0ü@5(DœHUϨ¹‚ nÜ H¸0°"$0"ÀÃN 0"ݬºÀ ˆr¤^éîT¿PZ*L`@ì/ @R OÅdèL) q/,À t À\ n ¤* @` < °. œ œiò ?¤ 襤o¬e ++¤¤Ù¤VD/Å ++ H´LˆpU¾0Œ,vŒ*(°€¦\Ð?q¸càÉæ\¦HHHOO˜ àåÊ9'OW*T%CX&¼X/Õ X"à¡.¿; ÷O( ãTF jP1 \l`¨ JO šåòœ¶€/¢ÿ€›/U€G/±€c&(°Ê\„-,a0à ãdˆGˆó‡°ôÆ/pˆ ohሠ4 d¨ ++` d o(E\ " @åɸ E1$‡â4˜ ++ i‚²˜œ ËO/õœ "ÿü Ør IE[>[T k¤ ž°«Œ+2Ù2Hl ;wÌ@Å,L¼ –. ЮàÜoÀÑÜØ‹[@Wûÿzè4¥$¾PL .Ap* P&`X_ ™¤ O)ûÿê¸Íù¸ Ê X˜• .MÂI X†øúÿêÄúS&°Ð,@ƒ ÊÀ˜Â2RR FxÜ|®|¬|”DdÀ ++(X%r`8ÒÀ©$Ø 6ÞêèÈ¿pÞÄÔÊÆè@íÑݹBÄ +˜ ¬ »H/4p¿H—…"š{&…—…" 0G“ oàGÛÅ›…Å'mÊ#®•š“§•$‹‰Î#Ó— ++" 0.WÓÇ kÌCE¨›" hI÷¤W @1C ;á…-€Pâ"j[žåóG  ,½ †â Ñ)ï€# „÷˜·×! +á.@L/,°$ [¸_i÷ÈtCÉîŽÔWªÂD"t48Áº& “@^âpÿÿz$ì4  [ÈCu³È,]v$HOG½HGWØ÷ä8{ ++p/-pçŸ`0`¡î£§<%Û4Pâ#<<„<. pyQYà â@L/,À@*©<" pÒ%",À<’“-(H'<°ÏlgCpŠåPoÄ jÀEmÄ!´?àžå–“ÑüŒ/iüK|/pHnèGx&p|K|¼ ++'€%€ ·O€ @à†â€Oo#Ȉ&·OšLŒn–ˆ ++Z1 ,(" 0À0 8¬é/U ++¬X  ++1"^G© ++¤t ++.fýÏ_I"5tòM!Ðȇ2ȇ`üìXN`ȱˆ&@ !p0!HŸ"½ˆÍ ¹•½ˆM’Ľˆ8½ˆ?0 4†P‡`ˈ. 2ìêp úÞX–—òÄ Æ ++hz–*4 ‰2!ê2È20:?8 6´<Xµ?@ V‰A‰û!pï I+jÄ×Q€&‰!"X"?¨ <.G·$È3{c8#¢ÀR7,J@VÚ'ÀˆBÌ  V*(V–¾"V1—ûÜ 4*4*S,s 4(jÔ µ óQ8+,¯ ,P,m0(<=<(y<"V ×K„'àO@O"V (› H6à‰, ÐIª!"Êÿ?=#$/0`'D?=$‚Uj/cÿ¥‰"‚U ¥‰OÊx™‰P›g 2Ì ++8›ˆrU,›P©`(§O'*ðË6(q&¬z6隣3ÂÀ`Ð$H>!Êâü%ñóÔ=Î ++XKK#F@áÿVM%Ð9(9h¸&9ä7Òþ5H?ÚÀa#xB<6 ++ 'ÔEÀØ"X FB¿œ&€µ'hµ'CKÀ<CKºÀª'iMšÀxŸ'–b8Q ++ÀpÖ'J'#kj['‘(p& Ò½ôã È$" Zæ%ñQÒÜΰSlq piCsj i`u @E#ÒfwR €)MPccâêÂæÒvX AÔ`È(9c%7 ++Cƒ* Œ÷ƒê ¸$èBÖ ]P (Oœe (u·" iàM¿á¹+Š¹`(`[ãJŽ [6Vã1(þL;VáþL (f( þL(À(F("»i( JJWÁ˜öI|`Žåp‡â Q Li(Fäpíê+Läp&äpa(nJ" ++¾ ++í%!ê›ðpµŽAs "è2L¦ D%tŠàüp `/àd "ì2à dda(a(Va(\° a(Va(@—a(•aFN0[=ô(„ø [¸:A?¦ Q`h{â /@t_ø:µt.@xEŽVÅŒ(Π=Váრ¦NVõƒ ¦NV!'# Î5VãÎ3VãØ’G…!ÒƒO3€à‘åà@à¥ÝÞÍqߦG3Rã‰(m7ãšNÐr6NÐr\@©6ºàÐrPÊ ÐrOàŽâŽG J‰)fË ++sÄñî-Æa"#@f°8 <Þ±Ý%[Ù_ ++`~°0„á. À"+A0æHi& îì‡7.uS1¢(y|/p` WÕÕ`ô šY“%TÝ0–@/ @o3ð _'q ðR d§Hõ)*à€ ©%8ÿ)/8‡/µ8w/A8S/©8\Ð/\.ñý”OêýÿêÀ ÿF/™€‡/5À K•`ôÀ a/%À O/‰À c/À W/mÀ 1Ä ›â±úÿzÄ /(`¬} ^éÀè¹* h%+Q~Â(l/{úœ /(p/ÁØt\ [Ì`ÌFúÿꪢá*¸á*Op‚ÖÐADØ >í} {îsKP •?‡ˆú*CÂÖpŠHâÖ ¸0!šU#rÖ>XQ¤^p+Öp•þ/Ø} +++P˜îc5úÖ ++@˜@_vXF!aCjÖ€Ù#E"Q(’?€Ø+OB/Qb%UaUòÖÀHWêÖ²îA"[š”>ƒ'n»8(0Ž@8BÚ²{5( $]¶^§ÍŠpÚg5–N ©XF©XPo;.À¡B… : þPþPþPþPþ=PáþPþPþ/PáÌš¿š¤Ÿ²%`Š3O"°×÷(©J¡A ‡w/|+"°ã÷! }äd }'`,>¶–çŸ@~ 8~ "4àzQÔ'.[¯"<@³:XdyW <_? ++KÑuL ,œ ÂÑÖ x'ì ó®Ý Ý '9-6c>rˆ ŒØ”\ "ôl,ŒAþ :æ €$­€`^Þ `ź¶²$˜$°œ18¤è `8 ºÚ¥Vk¼(„% Ø ÌÞ4èB10]¶ÿ3rÚÏ{€ÚGrÚ? µûfJ ¢ ˆ@Hà(õAÚ`3C—Ú §l*™²>\è$À7"hb%VÞÆèÂØ.!¡ú ó C€C«i N 4†BF¸ü£&^± @’8Oˆ 0C|"(ô Ö‚Ѐë" ++ è!;XCŪ ª*Ç’/hbßI%ËŠ3"Ír3.nGÑ ±²h ÄÞÞØÊÂÜG}oÓò P!×ÈÑu}"g!%ÝJg!aß ++ Ð /áž*㲞×àäBÜ  ŠnJKS'‹U}{.&fU}RK'LK'U}-:Ø°¨#Q ž.Œ° ÜÇÝIi|%Œ°…„~ç&Œ°¼Mpv°>bÜO|\˜²d3€Þ[%˜âpˆêBâÅÁ; 6ý ZÜk‰gÂÜÈÂäÈ "ë:½ ÜÍÒ¼v™&V¯7,R…/¡Â~ ­Dc0Dc (­ Í< 80”  ¼œ¼"kÿ†zƒ‚zz *ipnz“iþÿêVêì?xîvy°vyNðH8z ++8àTvB?PpŽ1èÐoòòXŽ ++0Š9DûC?Doêò ++z jôp©ø}A2ôzò@ c!Zô ++8¬/5 G)"ô9z, ++O/Šô9z1âô°õ¨Iyê ¢#9{êW}šXü *!Žl0Ñ‚ û þy*ÕÁu:½ºBRpžçàð$˜¾BLWã4<8Wá_È*³se+™u¤plFRãu\.H.p¸[à [º5à‹àFB¹à"(0D "pkž0 .¸ }H"(0@ "pÝ` ¸n;Ía;ÍbkÄfkÄr†{t<vk¼x.ö²Zx\\b\$Ž0² ++_ Õ\$~0\ ¸N \4Ð0QI D $O Á¤ $0 ++à x $9 ¦´t$0 Ž® ˜ $0 ë]X> ã›,x,.>r}  …!( C¹*pÐ .z L*Þ}S  ++ô&@T,Ó"ü ¥ir&@`£ ˜.ïoÑ+k:EWáfÊ¿` F5/Q(TR5.4À¿`$–:ÞDºB nH+´4ÀžçèZ"îJ7g6\㊳ÍÖ0 Rá#Ê (\áÊ`{ô0Rãå{6‚´0 ’ç\&×âîj6Rãqˆœ,ˆ8Ráû¬°ÔL;WáÏ(ˆàGà. á] ^á£<=\áž<lLà. á r<=Rám<B6G2 Q¶HP ãPP ã€ÖH“ààà0“f!ÿq«Ú÷j $‰ˆpTÀT¿¾’@­$|ž5 [˜-Q^BxÈV9 ++cø[ˆ[ì/àè/½èÁ& _ø-à‚hPÈüSµVI.B VIà†VIVIRVI@vVItˆ ˆ\ˆ¤Uˆ ˆ\ˆ@òH^ ãC›ÓˆWˆh$ˆˆWˆ@ˆA ãzƒ5Rã "<4RãPh·°_·J½h°_&coô$@ 1" ô $1D 1@¸’¹$Cjç èôš$^G^âÓ$^„ü/À "d çÎ K»Z\\X¡°J`aCp‘å`aR à`a$ÿe Ð_f @'áf¨%Õ¨D ++o€ y  Á˜L ++_Å «øÎ<žrð#*¤.h  ¶¸+9Ö9h 1, šTå{ l/$àse.¥Æ>lèN@\|<\ãF>»,9Rá?>»?^ã!qƒ $À$à  ÇËp/켈c^âÚÿÿzê¥ ? .` Çj Ä©T” o`9"$à| ˆGù„@ˆ@ˆ…”×”ø/qÃŒ/$àü/Áˆ„¬°Dàžâ X  oü 5d .ñüô¸ .‘m \.×üÀ¨ $#Wóo° )/B° So¸ ‰Èô L 0 /ptíd`ô ++0 .üút·tg(/$,O*p°Ͷ DàûÿêÏu° (jG(j@½‰RĈÄRÄÄ/5Ä À/$ Ä/…Ä Ä’E!à’Äçu"„úÄfÈlÀ/õP*lú¼/$ É+MXpXÐSH t`,°œ\` & ++ú``ä ++o˜ 1\Ü´ëì PÝG}Ã"¯A¼ZMšÔ.…cHJ€QŽâ à€€,€ 4' ++È4 40/¾ù0/0 o¸a0/Ä,æ 3’âÏ;z è¨ ++_ Ù¤ Éào˜ -¨ø  -/bù +/Ñ  ’“ 4n –“/¤çœ_É” ' ð/ýøð//i|/$ ðçß|"|*M0B $4'+ €É‹h&éš@@Aè9 Š& @ ×¹ UÀ0ÿ/e0;/µˆ0ô b žâaøHû"0/%0*Iø´, ++, 1P/ÉœøÿêøÊÖ(H»ÐBþ  4 9üÕbÓ¯ ‡òy8Pã%Ç ++“G,ãP¹^ ãLPáLPá‚š;Pá:û#ŒÄ ÑS"@óÑÏáÐøáÐ"0i²/@Á¶ º@\<ÑЙ`#0ÛE P ÜϦ P#0ÏEV šåÌÿH:*XÓ OÑd.þ)M¦ÿÿ ++nþ)|þ'3Ir)Kn£ ë¿„Æq; ++@; ++8ÅÃ&´.À¸Ï:*Ï°È,çÿó =Táó ;Tá8Ô!Ï ++3WãÌЗÔöÔ€ ++\‘¹ÐÌ/9Ì < Ädd|d ŸPŸ°ŸÁŸ[ŸKŸWŸ y`š~@˜Çš,/\èÐ7Wâ×]Ñüá¸/éüÃüѸ/5˜­L/Ü£/…´ bp£?‚ÁPpø*ôHóZÎÊÜÊäÂØZÆÂèÊÎÞäòé'Ö0ú´æ( ~êÜ”žI#üÆPpƸxÒÜèäÂØÒÜÊ@|bÍ*¸)ºk “xPÈBöãÅ< 2cAæÖÒà_}'Íü+­O"°"[[¾›[¾ *;Tá6VV7QãVâ)2m‘mR á÷ÿm"0 (6¥ j¼Ù¼*Re 侘$1L +*%LHåΘ! L*\O‰dºPo«ÿÿ ++÷ÔmuPpÀ ã° ã1&H/°ù2/@&"àP| /¡˜`\$ý\ F"ŠÞ`Þ…böpø‰¦úÖCüa(þ`zhLhø*+l öx^@Šþ…þ6öP1)¨Ô?o`üBC‚þOe"þ˜­Q8ú˜¾C,¤Nü «N”Êü  @5N(ž0¸üÆŸ,–8!ºü Ò pwN?è Z ÔZP`B5À F !Ó@ Ó) HŸ ++LÏ…Qq°ƒâ °€å-!0“) $ee£;Sã¦XSá  † 8Sá!( 5üÑA”±|xÍ?Sã*P²ãa0@â 0 Z/ß­ ¡Ž…àÅ.qÅ" pÉò" ìz9T/@ùÉXT5þ•C@‘â–Ï ¼0; [¼1ÄÒhF€ p*à1¼ …µ&0½gX /ÝTùÖ «]( RxRª˜S< Ò"Ta’ xTRV*`o °UR$RkU^ ++PZRz< `<“J<,•JÖT‚EZ‚ìf§Uþ ý*x»=8> ©T0U³o'p³ûU%¯Šu`:±b2=k¸Bôx¶q·Z HÊUà&X8hhP o ++(ää[W!ÃÂ.U2Xg:ÇŠ%T"ËjT|U%ËÒÖ_:ͺ‚TTT%ÑJƒVp8ú XCH ++ Î>%x?€ >\@à(«è”ÜA«È@àÞäè@üæÑ  ++HÞÞàæ06 >¹"ä@D”ÁàÞæÒèÒÞÜ]«¦?m( D7qæÞêäÆÊZ8ÈÊæÆäÒàèÞˆ@#f70ÀmÀ{0C%­æ3“å&%4m ++ žå“å0u ++ Sã´x9 ’ÖUQRá}´ÐzªqD’¿‰@@Øx{<Ìã&/1žåÖˆzQ:$4ÿ‘Fq4Næ1Aóÿÿêh¨xZÿ) D40šå †7$à  h ++ÀS68T"»À…4 K?©|‡H>¼ÿÿD5GºDÔ",@ü^5%8 <<à<ž<E<OÁf?ðšåó ó “ ++ÂB¬0)k  +++ð ¼ÌÒðZÎäÂàÐ ™Qo1àÏß“ß"öåßIžt{M[hU3ŽÁ!à”o Q›û„ˆ ,<0â$ 0e£¹3b "®à("¸*p¿ HS*`*ó@žåà%6",™QôV#0BÓà˜VÕIC*ª)x ++‘5ˆ ƒâ’çè6’|C ++ŸtâŽÿÿê|ép©A Žâh"@’2ïH³ oÀ@àƒâ }O" ÿåiŸ$¤˜1à&À “àâ^ãðx€,pMP ÔkuCà“å72š“ô*k *= ÈÌ¥@C]+ªÉäW/0 © plÓH ß^áPÛ aU 0L Dbýþÿêüõz LHLˆƒ@žâj?¼Ô-ð ++d¢3<  Í<z÷ ~ò4S*YB?“Ü·mHhZ Ì” ”¨“Þq[* “H‹Œ# S•þÿêìhZ [ “åŸ?[ W W }{ ++m ƒâ`‚k 'ˆ! ‹3 #  »"‡6 †(%0ŽÃ è2@' ,Ѻ”ž”/h)Ï dd/0ƒ JÛˆ.L ++•e±Ÿ› à.Í$ À“å à“åH&ø1 °—o 1 p——Ãû´=À“<‚<À÷" p†"( ³ %j4ï$$/8 äýäS “åÐN€ë’ë¬ß»J¡?& '  jÔu x0h/hh/0’h+07 hM¬ Oàƒåo. ++>Ÿ 8Z§ “w ð.í ++ðOøHÿÿêt‚05%®¿¦bFÀ ++}¦ÃZØÊÜÎèÐ ++óäÊÌ80HØÂæèZÜÊîZ0ÊØÊ?$ Sh ++³æÊèBxêØsó zPB ¸ && 3GèÂÒØ. 0  ++ƒ0ÎãQá)jñ#¡àâp€à ‡N 9p‹åâî!ê#ž0Ö)–Á ZÁ"Å" 0—Dך @1 ++ò¢ ™ @š m#LŠ!°D ;ÄÞðD D YÂ,8Ææìnt÷É@ZèòàF “ÊØÈZÜÂÚÊæ8€4&!‚ÂÆÆÊææÞä$!p*0"5à +3é59ºB,•1 2“ ’Ae ++«*u1c$…m ++ªC±ˆ`À™X"\.ÔÿòKÍqŽ ¢02?TÚêèÂè>!xIX²"z!@hrh°39zS²W€X$h¢…0§ȧ cY¢0°¯º†& ¸ H!0H!'¹ ++—å —d ! ˆX /m` Œ5p—` L° ½PÙ þ D’ ++êò&hÛf’& ++(Û0 ++x(—c Ï(HFXB(1Ü(1(1È$ž… !Jô0p "¨ @Füæz@ÚÒææa+! è& %"pX0˜' 8W*WÜ*W*W@¨+2X@§71 +ò &f&Ðð bêÜäÊæÞØìש@@ÆòÆ@ƒ1äêÆÒë@@ÞÌ@SH@üæE8 úSE˜, !FH.45BÄØÊ~+$ ++° P`8jH`=5.ÞÑHat8BP8bh2 0¼5§6%T @—å -v!ž¼ Ÿ¸yÀ1 —KH1<LµüKšåHD ýHÊ@Ã@bª0Gsx‚2sw2 ++ L˜£M( %º—hr4rÿ%4r4r—Ø)R ++8y¸:ß8 ª$‚!¨è H â! 2 1=ª,0`)Pÿ*ø*z)År Z ++(RP¢6í) H$*KXÂ6ÎË)08(Æ)q:  Ð  {QTã\p ++É)‡ÅÉ)„/]É)+h2h!"Gà ãW41ä™i94'ùµn 44€" +]€"pmC ü¬1p$8ó>"á :î8îHÒ:î'h\% \[ 0 ã,5>*Í,^ oÂf.æ)@)/p "H ‡2àX–Ân­÷0Qã^*%°ž?**€ àQá¦$14:(s¬”Ã>A ++,Š@âª4$Æž Rkº»®', ŠÓF.-lQÎ20p‹ xf+ÓÎ20F>"AÛÿÿ ++N”®* 44Ä/%Ä {õ´ú<¨>æ1 >1ExB*º/>1/>v0»x b@8Q"дT0'ð Y]Ó²=—@J:K)3‚ß(‚6 gg àÝW½WA[㣠<›«"1 € ++„  „ ñ—åà„å 0„å°„å „åý 0ï Ñ" y¯0AJ1•|Âñ.¹"xŽ±; Šnx+åm1<< 4wÈRtF"@˜ x±8"@wu”"ÏDL@èñ2 "4rF ìRà á@%-(CbL˜ PQPP ­1Àa'™H"¯ÊÜ—$ôð ñ @@šå±à%ðš€* „ *5„bŠF8Œ˜ +•˜Ošå#˜˜ô4*HÌÒðÊÈZàÂèÐ~ Ñ&ØÒÄäÂäòZÈÒä”ÒÝÔØZc(v$*% Š?0J. °8 æÊÂäÆÐ4å'DõF#¦DÊ#vLgºÛ€!0/à4<…6Ü"à4MþIX(ñX7E- #1ÄÕÃã0Câ0Žà0“°?Ž0S/ ‡ / ð 0u¤å3 8.­(p$Pèø‘¤,¸TŸÍ) *hŠ°·ƒÿÿêÂl(Ä'\1€ v¿50¬q£H p –ìžJeJR ++—íÆ#po*2mök›X- ÜÖX2 0†< ++/0Žß,ÚAp, ++‚þ ‚ãÆ0 ++ z”GB ÚËZD /©<›°”ÿÿê’ ÚÊ)~ç"ÒxF  €· ++‰{åp™Ù& Ÿ ++é  ÷ £H@5Å5àb¦@@40—å D4 ’ÉRýã€6% ‚N~¤ê—|CÀAuS@G…€ý€*¡ý€/@ œ.ÝœW@Ýÿÿ ++Vn/p .%¬Ux ¢ zD0*Ü ++Õ ++Z. Brw@`.Hù ++Z~ $ð $ÆêääÊÜèZèäÂÜæxH5(ÈYS1N ý pPZF ¸Éå(F% !@Â2@ P@ @ é1b7´ HÎêÂäÈ ++0Õ ŠTjHw¿ƒP ++üÂ^üÂ2Y BJ0HGUZäÊæèK@p³Q úL =H8æ™YXBLå!Pœ @b/` HØÞY† Ž{P  jfIE& pHV‰ÿu>Ñ$ Ç$ z&ðâ.MRPã” ++y72%à¢+SŒ.Œ—ÚM÷z+÷z!@’¦Yh0TP\ Žâ~.P" 0l _à áäÞ%õq0àŽâGe"$I>K…êR"Q"½1 \ð½84hÁ BL¼ % Æ+66‹DàåX ++q àå@FQ9à" 0! žL $œ "Dyú ì…:Š@ ½9I:œ3 –R"VMœnLeLTƒŽ_”å”È Â Œ€ |”%:./ÙÿN‡ HmHò¡5.ëþee@ÚDˆt L ++øG€NX"P7 #„R’ ØÒæèZ|( ·R‘!p '9}0—å— ++ ++Ma0‚å ‚Ì7M8 ÙxU ++ÂñÊù&–(AzR_ÁL` ++X$ÈÒæ,‡¤ûäêàèæ ++Z"ÊÜð0\ÈòÜÂÚÒÆZîÒó jeP0BT–`¨ ÄÒÜë—#À®&àœ94p° ã ‹â.B)gb ‹à ~~ñŒâ‘ç‡áã° WA,ªo{)T° áì‰Tpl70ÛdàäKÁ_pp70ÞÒœL»@âÿÿ ++ô¶l 4)~h@Èó Œâ ’ç Gà ‚âÔDëyZB8JQjTë˜"Z[‚1 â @TùZhV óóylËû³»ó 细zj¾RäÊÌP·C ++V·°H ++X ++ZÌ\Ý¢û~òP ++—„2HÆØÊÂäl4bbæZÆÂÆÐòo^ ð %**ö[šŒ"q"é"6j ¥B"hú^ ì2`fdÑb/p h $è ++q}H1Tãk|$Šå_V-Hšš8òYà^5 t© É Ö7ã/0+Á*é L´HŒ¡ @jçäé+qÔ?@šåL³†/,Åœ ,—,ì OÁ8g€œ*9œ˜ ++”,}@É,Œ µ8¸ˆ/ùˆV *1ø±Ü°ªÿÿê0¢Bbctˆ ÎÞ L~Æ~·È8cCeú1@Šp;’ö `â Ô]„Bî KLgF–!ša´¤ç`k2L9õ8f"`ožQÛA’à á0 ãz×b ++.$ÓÐC á†à Ðå xà.àÿ↠++îiÀàžçà"à0ƒâÌ8´"4“/àb  ,`°"‘™"àD^@0„áYšD;00”àà\T@ á¬äZ`pG Œ3ƒK"`dšd ²  cM Ô5C†å @óH‚ð/àß±˜"@œuG±N1 áàƒâàÎN„P•à*°`:ƒáà Žã¬aÀöLŒ0<Ø:Z3»$1‚ ¬µÄêÌÌÊäZæÒôÊX+PT˜"'$Ä Û3ZÜBõÿÿÿÙ°G$Ë6H_Z•lÓ~1w‚½´û¦)ØoÊ¥üãîCÏ&‰4[JX×n‘|s’5€ÿ¶¹¤kÚ-Èçþ¡ì…à O2LÛ^hWzµ”ó†9°¢­ÜëÎ!øgêÇK" 0ßN™\Sjx÷–±„{²= ïÞ©Ìcú%è O…,Ã>@WRdÛv9˜Šµ¼ó®!Ðg­ôëæK ++ Ç.<SBPßf™t{š=ˆ÷¾±¬cÒ%Àïö©ä Ë(G:•DÓV`_r½œûŽ1¸wª¥ÔãÆ)ðoâωC*8×F‘T[bpÿž¹Œsº5¨çÖ¡Äkò-àW4Û& XOJ…|Ãn!€g’­¤ë¶9ÈÚµìóþSß6™$KZ HÇ~lc‚%囹´{Ê=Ø÷î±ü•Ó0_"\ËNxGj¥„ã–) o²½ÌûÞ1èwúב[2 Ï^‰LCzh熡”k¢-°ÿιÜsê5ø_ ++•<Ó.PGBtËf)ˆoš¥¬ã¾1ÀwÒ½äûö[×>‘,CR@Ïv‰dkŠ-˜ç®¡¼sÂ5Ðÿæ¹ôÛ8W*…TÃF pOb­Œëž!¨gºµÄóÖ9àòß™ S:(ÇVDKr `œcª%¸÷ƱÔ{â=ð€U5b¨Ÿ4,7< ++P˜/w zb ++  ’ E,rf$æÊ2Zÿ%BXêd8 bfµ8fXúdIh† ¢*)¯/ 8G" ++œzSœ$PÈ hœ lŽ(¸7$ %"ˆêÁ áÿàâ^ã‹wâ^ã ”_p ‘å&R›; ++ 0’å ’å‚FK0 “åOn1@“% õ =(Ïý &+5 Ñ$Ú&aE@”åÿ/Š© !ÿf WTå1TãÏ…)̽ %8;þ·=1@ž¨Å1#¹ è{"QÚ3 ‡&Œ<7 €' ++0„à£C*@ÎÖKk](@Î>M_0‚âßS'-žT ˜kB ++ ¢TŒÄ°2_SŸo ++$FN´ûjRûj(ûjFLÛô!ƒâ]À+C/À00šåçg ••™o>¡wà‡AËGŸbÿÿ @”å`Ha *…À4ý"uŠnT „TÐjX:b”'BZlCÈb1˜ 5¤ÂØàÐÂÄÊèÒÆ9#qPh \d ++£+@dk?\s ²lûP2l bhr  íœâ”ÒƒXV1 0— D2z2 !“±s'$g$] &t0.L‘ Bå71à—¯pÝÁ/± '4SÿàâIA À%À/Ä/© ¸+ö =H%’‰!O ã‰ q,lne:(,Èn°Bp  6Ûl ð3/y3–rÉ4EÚâXŠpâfXt"‘ êàŠô1 @âr% n–`à~HæäÊÚàäÞà€».¨â¼M[$.0„å „>öú& ++¢†+p`tX' ++r%n‘+ˆ‘0àêè‘$ ++0,i*icÜ+7 IúrRX–B \/ºb@; "™¤a \ ¦vå xÓ'/H (86%!@žE}D6tÐaB\5÷‰õ;þìfÃ.„e à$·* ++¼WZ3QüTsâSã7Eñÿÿ”àûB 6J>3&àU1ïÿÿ)¥ú ©EëÿÿM&ª@8„Ÿ /|ŒP…PÊ ++æF"è|@Jxs Tv (ˆk`"@-%9ê2! ++èJ/èn"x ++(I2z]ƒŒ 8 '=‹2&Êäš /€BTã) &0¤#" _3Sã{nôê…¨x…¤J$Ê ­2ÅrOTã ¦ /@Ž 7æ¤"ü9¯F’ ( .­(ºm(¸º ++ ;È/y ¹JølúøLø*4 /á\ O,Ì0 J O0å ¨) ¬ WxxD°/)°˜€–j8$ˆ!+ ++€.áþ«%Úg"X‹X P/1PF¬Z—t ¾t/à|l*¥ün? ”TN’L<)3è .àu´'&bpÂ| Vòi€ Œ!Ynp¥·a“Nà S)P»Á;ÇÓp¿+µß Ö1’ýH ÿ«/@©Ňg#†µC ZâhÈ„œL3êÒÈ›b‚ðZ# 0~X%C€# e~P=?€3 8K (3 !(9±ö ÌÒäæè@ÂäÎêO§ $€åÅÞ†? ?mÞ£1TÞràÎ/}ž ++V9“ #R/Z„Ò.ýÒ ‹PP.MP ±4.BÊ"µê£1 @"‚Q„~¨  (zG²†zy.I‚†­zH“&x 0'3büæ¢,Âæ+ñÞÜØò@îÐÊÜ@æÊÆÞÜÈ@Òæ@FÌ?ÅYŠ ƒ2IÅAÅ0œ&#&=… Å  ÏÁD ‰ s<'%5¿xµ”>‚“Û0ˆXŠ06D ˆŸIbŠ%0%x"8òÔúÕvG\jŒ=D|QqªZ˜€_ _l=o‚Ð! e :e ?ŽªÔhXJ’ê”#Š–#*˜Êš#jœ!! ++„ äêÄÞêèª'žkBX#:'CÄÊØ$"#Ú$ì6#%z6 #'¢º¤#)Z¦úiÜi"+š ØtDh ++0­2šI"P ¢°5R ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #ø, {Xð<!œB    L$à™åZá+*€Xâ ++ Šâ`Ÿåêp–åàâàŠå@ ã ð–r]À Jâ&T㜠++Höû ++ à”åàŠåàšå&^ãK ++à”åàŠåšåd ttP Ñ,O  JâH%/H3aH HDb©Ô Jâ@šå¬ÿÿêDX$+XH$IH4‘H H*Ù|@ ãx÷N ++pâ" Wã+ ++àL—àŽâàžç0—0ƒâ0“ç — ‚â ’çi€â°ð 0ŠåàŠåà€âžç  ápŠå  ´&À0@ÿ/á´+•¿pšå áÎÿÿê°:p°W0Šå°t  À+UÀŸšå¡ÿÿê@<.‘è_ôþÿê8*ÉðHÕþÿêó23ÿ/áÎþÿê\r  ÞÄØÒæèXB$pTàäÒÚdT HæäÊÚàäÞàXº"¡fT XJ”TÌØÂÎæÚã ++TêÜàäÊÌÒðÊÈ‚j8 *#ª! : ++ÏÊ@!’# ÿÿÿÿÿ2,6 ++˜&}”lO $# ++& ++"0F@68\ „. ++/ L<( < $8 ++< t"  ++2 &H &$ / : ¢  $  ++/ " ++\>P¢þ ê  / \>b./ / -œvDJ ++3/ On/  ,. ++8( ++6B   ++F ++`(!”LÿÿÿÿýG‚„: L„ Wl ++†^„<"\ ++Lf -@Ö”‚r ‚T*‚¬7 ++úp  ì5,"Pb  ++$$Æ ++ $ <"ÌB$<"–,D ++*xŠ & LpN‚„* ++âÈ„ ++ :ú„ ++ RÎ..6Ø^"  ++ * ++Ôx H2J ¸˜7† L&l L†l ++`ÎT ++žº^ 2,&4 ö ++>L¸  ú/ LR^ .t¼ H $®6 è²P 0Z ++è 8\âz<®Þ :% L:ÎL$4 ++V d ++’ FÞB ++†@&  Ž²‚@X†$ žª$\”P> 䈒„ †â‚^:*‚n „ Œ„ê$†x ++6 ++Ìl $‚Àr„Æ‚B  À   ð . ++–¨’¼¦ XÊ8æ @†z‚   ؤ@<œI8 &°0 Ž v 6 |‚ˆ v„ Þ ,\ ++À ++ä/nV ++^.úp‚2‚ ü\f¶ ++¤ ++@v ^Ð ++^À€,4j Ø„8Î 0P² ² Š ++PtF.`”„ì 4¶R<¼ à`LpÚÔn< ++ ++/ j¢ Š Ô¸ `R•ðXÎ(Nv ºpœ¢  ++P‚ º4t ++D ++Ì,^ :@,È ˆh n  zH†%R |Ò  * šŽn@ ++&(xôR, ,B ++$2 f ¨ Ê ++¾  ++ >FDb4~ \ ++ ++¾ P*î „ ++´ r† ´~ ++„p ++Ø ++Dd&P ú  ++Ât$L0Ê & r4@H\Æ ++ ~ ++¸ ++bh@J¤xx   FL((†^þ º xžÖÒ:Ê ”&Z)a–#ABBÂB'NTBd ++e ÂT \_BB ®A ]  ‰²! *Âxp ˆÅB€d¦µ¾%Zï B0/Aq _› DB#†T Â'%Â*W Zô& rGÂ8 =$ m#" Œ/ARBó* *?B( _B  C(ÂB$p)}8B*65ôE Ä ++ 8 ++³DD ô1Ä T8!ISà ÄôDtD65-Ä-\%qDô!jDŽAÄv ª5Z 5 @D)vô}†DÙ  æL/ Ä!/DK62D)Ý/ ô1Dt="ôk / ôó›5£Ï @ô &)Ä  ¨t @ 4tD#DÚD 8 ·EaD6ãÔ„ ôDôv‰Ð5 Ħ¬fÄľ ++Ñ |  $ +" Ä 98. ++€êSÄĘD$K$ ÄJ5t8&Da    ¨"3!2D# Ä ++ð‘ôDô ++„îš Á" ?!³÷$D/D;ß&ª vC%D!›HU rf  # . F  & ľ 3 *”#!Dc1tT#Ä ³"Hï×#)$D_0]œ 8!~ 0p ++ q·Dj Õ‡ $Dq/%ö!UªýDÉ’î '  ‹! Ä< ++h  ò-" ÄY…( ºŸ¬1D ¤tDã l´NqÄ ô883~Dƒ8ô Aôï9 œ´–ä¨<55£& ô-ËÍ€ßÉ UDÄ</PE!5•(% ôˆ û +ôS ++"5t;~f? ADGö  |!  t%Õ èª £% ôÒl%Ä­¨!ÉôvD^©  $Ä”nø 0 É&D© ++Ú7%®ñe0Ä$ £;H#I t ) DÎ ~G—ù WDÔÎ ) M_b 4 \°ô"Cy{Ð ++`DÉ ++ % ++"Ä«G ôÊ%!” ‡g?ÊØBh83 c  ñ ++  IxÚ»l  40 " ^ :ð <#Då&ôK~]D8XÓ k—t) ?5ïÅÎ2D ì#Äå  ±6É ++ 6|[ * RÊ ËU;Ê ++ DÖ 8l“Ôc'D¨±8°T™ ’PÄô¾I2t!ø“ÞŠ ü_ž$Dk)g' Ä½Í ôùõc˜#†HLäÊÆÞÚàÒØʈ ++HLæäÆŠHTŒHVŽHZH^’Hx”Hxz–Hz˜HÂÆèÒìÊZèÐäÊÂÈæš HÂÈÈäÊææZ|ÞÄÔÊÆèœ"ð ÒÜZÐÊÂà~ž&HÂÜÜÞèÂèÒÞÜZÞàÐæ  HÂààØò¢JñæZèÒÚÊZÎÞÊæZÄò¤ðæÊÚÄØòZÞêèàêè¦HÄÒÎÜêÚZØÊÜÎèШ@àÞæÒœ0~ª#ÿ/ØÞÆÖZÆÞêÜèÊä¬HÄäÊÂÖÐÊäÊ®&-Ê5@  ++PB.HÈp3êÊZ¸ñæÒÎÜÂØæD(HÈÒæèÒÜÆèZÄæÁÒÈæ~FHÈÞEàH HÈÞÌÚèJMçpL$HÊÜÕZ:ZN4 ++$4P"äÊðàÊÈÒèÞäR&5`T.!êÚEAÚÊÚÄãðVHÊÞØZæèòØÊ~X>râZÐÂæÐèy ÊØï;Z(‚kB\$ŠÞàò^*¬ÊÜèäÒÊæ`1|ÖÊòæba@ìÂØê01dòèZäèÈf HÊääÜÞh QZ|æèäåjw¡ÐÂÜÈØÒÜÎZÚZ l8 ìʃnä@ðÂÆèpÒÚÂÎZàÂpCäÊÂØ5ró ~t HÊðàÂÜÈZÌàZÌèòàÊv—^ÆèÊx(^›AÊzM®6|.ZÐÒæèÞäò‡a~HbBÄÂæÊþ3€ÒØÈZÎäÂàЂœ2„"ͲÊâêÂØ~†dÞêèˆ4!æèã4Š&5äÒàÁ $Œ(”hŽHõ$‘4îäÌ‘A’H|G”7@ÒØèÊ$ tÜì–(‚ÌÞäÊÒÎÜZH˜*ñ ðÊÈZàÂèÐ~šHÌØÊâì~œ #0žy ØÞ«P|ÈÒÎÒG €ÌÒðÜêÚz ++"ÊðžT¤Ñ±¦0HÌØêæÐ ++1äêÆDS ¨Q¦BÆÂØØ ˆ ++ ÐÂ05¬ ð9®eò°$`àäÞÆÊȈ E²îS0´,4ÚÂè‚AìÊäæ¶/#àZG?¸«"àZ­Z|êèÌblº{fd¼ @p¾®àNñZ|àäÊÈÀHÌàèäZL92Â7ÄÔ ++BÆ PÒÜÒèZ° bBÈ6Ê$`ÊÈZÈÊÆTÌ!ÒÜ2Î"Z‡ 0ÐÙ‹5Ò!ZÄ7Ô"˜ÞÞØÊÂÜÖ)mVØ,0ÈÞꆦÌØÞÂèÚ [6Ü@Òm€ZæîÂàZêÜU0ÊÈZ|Þ% _dhà% °â% _h`ä%Opæ% _jlè% |lhê6% þì ùî ôð ïò Opô åö à?ø4 gpú(aÜèÊÎÊäøüñþ_fd_h`Op_jl~lh&Hp ++ùEæÒÜÎù) BK6 4K* 9K2</_dhFKOpUZ  ++G;"4 '/$ô&õ(ö*Op,ø.ù;0(º82?ê/4% þ6% 8% ++:%Op<% >% <@6% þB ùD ôF ïH OpJ åL àŸ  HpP ùRóTíVçXOpZÛ\Õ?^(fp`åb ôEd}jBf@ OBh% odhBj% ofdBl% oh`Bn% _pBp% j¹r% l¹;t6% ++þv ùx ôz ï| ê~ å€ à?‚4 _7„$>HB†-OfBˆ.NfBŠ"JfBŒ*FOBŽPJ’D”ß–8˜2>š(MœCIBž‹kB 8 >;¢,!C;¤4 H¦M¨RªW¬®a°f² R;´6! ++™¶ ü¸ ýº þ¼ ÿ¾ À ;Â* îiÄ ++õÆðÈëÊæÌáÎÜÐ×?Ò*P6Ô ìÖ3àÒÜzBØ#êÜÚDèÈZ|AÜ`ÂØÒÎÜÚ9_²æZÄÞð~à(!èÞÙ£ÂèÊÎÞäòâ=a~äÅ#æ!Á`~è ++A~êW…óÎêÂäÈÒÂÜZÞÞàæì àÞíàä~îHÌðTð@aðV~ò ++QZ~ô@^ö¬ð»1ø"AêxÅ ðD«Fü*æ–Iþ0•±HÎÆZÆàêðPR» aÎÊÜæòÚe2èèòQ HòHÐÂ=–ÈÊÈ ++"H!äÊÂG .Z¹Z|ÚÒÜØÊÜ21ìÊÆA&H™äÊæÊäìÊZä1”HÐèZ=6ñHÒÚÚÊÈÒÂèÊ~HÒÚà•A ‘3 v*HÒÜs* uG"Ô~$(HÒÜæÊäè»´ZæäÆB&.HÉ ++4U("K*2Hû“4M,,¹_.0HV/0~ÈÊæÆ2n/4:56*‡87AÜèÒÂ63ÈÊZ§!:@ÈG~<gdh~>gfd~@hh`~BWp~DjUFlU5H21J2äÜZñSLEdN bfP$ ÎBRqäêàèT üð°@ðV{°{XÄ ZtÞ™¡\HÖÊÊà–ó^0HØÂæèZÜÊîZá1ÊØÊþÃ`HØÊðÒÆÂØOUbHm4d: ¨!Òä9æ Ef"ÀæÊÂäÆÐhHÒu·PjHkÆlyÞ]ô nHØÞÎÂ!p…•ÞÎÄÒè`r Ebt B~v3€ÜÞèx Ãz$rèÊæè|$ð¬~*HØÞÞÖêà0€$àñQ‚0HH  " Î@ÚÞÈê„C†. ÒÜb¸Nˆ<^ÂIŠ0# 3Œ2ÞÞèUGŽ"ëRÆQ à %!$”8 f–bÊÜìÒäÞ&$˜ëÑTš&_Sœî4ž×•$ _ e$¢îãÌÚèZ|Êðàä¤, À$¦yŠC¨ƒàèäª( _¬súR®D ++ °:ê¾4²#a!ZÌ‹4´¤àäÞÚÒæʶ£”äÊÂȸ2%u VºFä æ!ÞäL1äÒàŠ9¼"(ï]¾8 7ÀK!äʦøÂ<CäÜäæ$ÄlÆ"KÆ8æäÆÂÈyèÊðèêÂØ(>Ê> ):Ì2$ 3ÎrØÆÐ캡ÒHÚÂàÔ«#äÖ%TÈBÖ’"ABØÅDòÄÊZŒ|BÚHù0ÜS¢ÞÒÞHÜÞ,~àHÜÛ 0âKPä1ÎÊèN Räææ5¹õrè"HÜä'@Bêl`àZèäÂÆV@ì Hå ÈÊî$HÜêØØZú cðH‹: ++Dò 'DôˆDö: ++ p ++ã1ú ++×^ÆüBHÞàÊÜZÇ%  ž2þ*&*ÌÒÚ"L 8 ÷G ,! 2"¤T $H®þ0æ ž#0àÂäX%ŽrW ++H%G $ÔZÌÒÊØÈæ H pÊ  H†Ë #b~ ¼@Êä … ++š 1äÒÚ ++(P "(Üè&U HËW ¾5 ++<(¥ÈÂèÂ~ ,AæÐÞî¡  › ++"5D"HM $”#èä(  &&HâêÞèÒI"BäÊÚÂÁQ ($Hi ZÈÊÜÞÚÒÜÂ:C * RÜêÚÊä@,HHÖAZàÊän ÜÆ1Ü# «ø( ++)U&ÚàA0HP |êR 2x O4*H2g~ 60Ò !Êä–b 8H S :. l HD <,ò~ ++& @H aI B4Vcæ Dq~ F Hˆ  ++„Ö>! ++9 ¿L¡g•ØêÈÊ N$² Ÿ ++Q»dB R0äÞè! T‘°ìÒæÒè V ++HýQ X0 ++=(`ÐÚÊèÒÆ0îÑ/ Z¤Oæ \"ØÞ2^¹3`"Tbæ b åeæ d’èäÞØ fÊ\h\tÊìÂØ jFCÊðÆÊË$ l4W)$ n%übæ p#ÒÞg'E r@æÒÚàtLbæ v&`@ZàÂÒÏ:x*ÑDæ zi£Dæ |Å äj<~M4È,1æàÊó!< €´ÿ:‚.@æòÜè5-DÆ „LAæÞäè\†‰&!ðZ+$ ˆ(1êÜÒá Š #èÈ&0~ v#0æÆZ«M$ ´ ++Ù0ÊäèkBH"S ’ RZÎäÊÊ€v#ì [ –HF"! ˜Fi0 š Ê *OœE Êæ-ª%1 ž%cHB   ØÞ( ¢ˆâêÂÈB ¤0îÞäˆ ++á*ì ++X@æ ¨× p6ªaB ¬"aæòÚÄÞØyJB ®ó0B 6RrEB ²MæèÊÚE´HTR ¶`ØÆZÜÊð"2¸*‚ÞàZØÊìÊØË&ÐB ºHæÌÈ ¼§ƒ0ÎÊè]0 ¾æ}$ÂØ? ++b À2Hm(ZüÂ5· -Y ++CìÒÞØPù-s+ Èü0àÂÆkšÊ&HæàØÒè Ì«#àê«IÎ$Hš ++¨ ++  . X&J Ò`~ ÔTAèäZ|—Ö0…$²RZÌÞØÈ+4Ø$˜D Ú&–G Ü,” ¸bæêÄæÊâÑ+ à8Hæêà†,ZTRZÒÜØÒâ•3Ö äGc  Å¡(& è$dêàl6 ì+j ! î-|Y4ð ÔÈÒæàÂèÆÐ òÚd~ ô$w@~ öáÈS ø Zm.D ú&¿ &.Ä A~ þbÆA~ Ý*b H&(ò ZÚÂÆÐÒÜÊ HèÆ HèÆÇb Hs2;4 ++.@ H`qÐè  0ÖÊò‘ J|P  ++v~ "HÄ‚[  H—a  H R  øA :Ö¤0C 8"‚ ++!0 &!ƒÜæZÈÊÌÒÜGS ""X`' ™-n é'kÞàB (6 c ++e,{¤ J .&£ÒôÊÞÌ 02b4 2{¬ ++bÊäZ|ÄÒ›0r 4HêÜ-G[ 6 0~ Ï-òêÜÆàäÊà :(HêÜ+ÈÃ! <&«¬>*HêÜîäÂàN@$HÎ_ B&HÌ_ D,Hʳ F*HìÊäÒÌòd, H~BJ Hù B L G© N"HîÒèÐ:3³ P&HîäÒèÊZ pâêÒÆÖ Z ++ðÙîp~ TL55äEVL\i XL¿R Z L«R \L½ à ^LÒ^Þ ` z)Þµb$ÊÜ1d0j ÂؘAòZÊð¡ ( fÈÛ52ÜÞèV h,1ÒæZÓ–ÞÜØò j(9 ²5lAA n*õ2A pÑ# rfQ tYa v6Ld ++Ëm1.wx/QääÒè´CzLëñ |LÚÊææÂÎÊ ~LÜ,U  @ €ÕÜÂÜæ ‚ LÜÞÜGA „LæÊäÒÎ3R †L‹0 ˆ ¹e ŠLùg ŒLþDŽLºð& LîÐÞ ’T ”V –Z ˜ZbV š\\\ œ^ žñ% bZxxzz ¢z|||z ¤¾ ¦ ++ÂÄ\X¨ÂÄœð ªÂÄæ ¬ÂÆÞæ ® ++  Ð °ÂÈÈZ5 ¼8²`B ´gŒð  ¶ÂÈÈb ¸ ++ÂØÒÂæ ºÝp ¼ ÂÜÈ~P ¾ ++ÂÁW À*dì£ ++] Â*~Ù_ Ä$˜G Æ"˜8È&• ++à•6Ê€~ Ì ÂàúR Î bB Ð ++ù8 Ò0äÞà"3Ô é0ÖGÐ ØÂæÒÜ Ú ++ bÐ Ü èU Þ&ó?à(O~ â@Ì ä_`æÞÆ ærQæà è Aâ ê €ì ìÂèp0î ++ @Ð ð ++ÞÚ~ ò,À`ô ++ÄÊÎÆ2öÅ9c~ ø0›° Æ @ÄêÌÌ3>ú.7? üêN þ,®X 2òqO 0r/ sO .t7c~ ++ØZÄE 0Á¯æÐÒÌè :0ZØÊ"?<"¤äÒÎÐè "#%ÄÒÒp H  }& Ë\ ,E4*TÌÒäæèKT VÒÌ „ÒÞä "d9& $#D &2 äʪ ¿(Mä‰ *KÄB ,ñB .C 0E$sz~ 2d~ 4$×5€ÊÜèÒÌÒÊä$6ÄÞð 8,Ô`B : <Q <!!A > ++œð ò ô SöI 0ø@À!ZB× ++} ++V ú<%Ó> Ô6("< mF*TF üg6þ8vˆF !Í=@‘^bÆÆ ¡ÆÂäû@ ÁZØÂÚÄÈ ++2æÊÜ Fá ÆÈ ÆÈ’" ‘Èä ++ÆÈ^"  ++AÆ4  ) " $ & ++(I @*Æ`,ÆÊÒ…>Á.ÆÌØT0 AV2 Z4ÆÌy 0ÔêÎ "6()@8*àÚÂÎÜÒèêÈÊZæâêž;":,:)! rz@Æ.a~B ++gQD ++|±'QF `ÂØàÐÂÄf Q~”ÆÒxz~ 5~" Ez~$(U|z~&S|~HjBÈÞîÜà:JíAL*vÎÊÜÊäÂØK,#N–QØÞîÊäFC~Pa##ROF¶AT®C~VETèÒèØÊE6X‡Z8"êà\86êàà}^QîÐÒèÊBP~(%1* 2~, ++Bz~.0`@~b ++‚ÚÞÈd ßF&ÒÜN2f" dh+ÝF+2j" +2l3nqTp0}}ؤäÂÈÒðr4wÚÂðÒÚêÚ%Tt´ÜÞèÒÌòv$ÄFFx.ÄFLOz$ÿC|«02D-óGX~,QZÂäÎêg&T€&=DÏóS‚Ô T„à çH†(ZôKˆ4 ++!È EŠ0Ü¿*ÒDŒ–*KŽ. –«’A"9”Š"K–.U4˜í&šµ?"pCNœ&F~žx#èÞ6 ´4¢*8îÐÞû¤À0¦”ØÊð~¨«r$UªÏ?¬&4HI®3H °îs ++7ÜÂè_(œ @²EV´NE¶$èZÂÆÆÊææÞä¸,óHYFº&NF¼"V¾.lA!ÒÆÿ6ÀæGÂœ#GÄ.ƾ`æÈ ++ oTÊ$ I&Ì1?Î&I Ð))XÒ.ïZ“1Ô "IAÖCPØ(AÚ'GÜ8UHþ¿HÞ:! ›C"8à "i7â`~ä ˆH2ÊÌÌ—0­,@æ,<Þêè¹H@èTæÆÞäÊ5êÒ1˜ì,ÆäÊÂè!æèŽqî ÆäÒè$.æº"0N!¤JÒÄØÊ~*KÞäX®=~(š?Z,:%(.5ÈÊÆØæ\LXæ^ ($³Tð` ++Èü5ò"!Òäœ ++Tò4$Œô=[$Eö. U6ø)*&6VË4úF 0/ñßDü4(Ó &Uþ( ÊÚ’G’48&*&Í!&Ÿr@ääAæèÞÚ8–¢@F Z|B‘ZêèÆáX1 ++‚ÈÂò  cæè~‘ÐÞêä²ÚÒÜêèÊ‘ÞÜèÐ`ÜÂÜÞæÊÉ33~BîÊÊÖqc•òÊÂä Ã2ôÞÜ8V  ×LQ" ++ÈG4!$ ++QêÚ&NºGI((žá* ++ÈÊÄêÎ, ++‹R.#B0$&ÞÜYMôÊ9Ï42ÈÊÌÂêØèÝD6< ++À1#48.#¦.!àè¸x&:?,)K<:# 3)B> R@* úœSB$ÊS*ï9D} CF¸!SH‚YJ$e3L ’ŸN>Â3P.u!=R,}%TI7 VòØcXzGØÊèÊb3:‘HZe+E\-pF^&BæÊàÂ{+O`(‘~b$ÈÒæ3%`æd˜#›3f" 4h$"¦æèÒÆæj6ñlÈÒìnÈÒì= ÐpÈÒì`r ô`tÈÞvÈäÞàN4<¬"†NÔxÊØæÊzBPNEäÞææË:O}|"ÊÜë3~(Lß"@€ú/0ÂÜÜX“‚ÊÜÎÒÜj-S„ÞPU†ŠN|‘5ˆ&$ÆÞ¨WŠ('Œ1 ÈÒH•ÊÜÆÊŽ »›7*3èÊäš[’ OG~”\DàäÞÔ-–-N&x˜Í!êÜ(8š"ÂTœtz~žd~ °hÊ¢I G¤(X¦&šg樕~ªÊÞÌC6¬e~®Pp°Êà'*äæ f沄+m~´"+PZ¶,ÙÞÜèÂÒÜæ~¸(¶iBº.ki~¼ ð+¾{í+À`AêàÈÂ`9Â$¨îÊÂÖ~Äâ~ÆÊâ~È¡ç'CÊ HOAÌNWY#OÐ&tPQÒ C~Ô QÌ>ð@Ö4 ØÑÊäæZîÐÊÜØ0Ú ++½Pa~Ü ++'6QÞ ++#Z|(;Rà$ƒ9 æâŸ1â b~ä Þ0æ@bÆØêæÒìGSè Ø#À@ÊðÒèê ç³ìÊðàî Œ Bð  RòúPKô,/öLK 6ø"Ï!Z'Q úµ0ü þxDèÊÜÈVAZ%aVUQ3ä˜O$b7CÕP&C ++ È2B  %« – #Ð #cÆÐÂÜÎÊ*1½Q~Bya~A,cÚÞÈÒÌÒ" O98TÌ:c~2%#PäÊÎêØyA &Ö !ÒÆUb~" [PP$‰7Q&ö$rÊ~(Ÿ0a2C*0îÒÈ»2,`~. 0@V2‚Z4&Ì؆ !ÂÜ™06 @^8ðx:ÌØxz< ++ A~>@~@$@zBD@|FP|zH5}!J@~LÃ$aN ÌØÅ$!P Œ#!R ++#dTÌØÌ V9.XXÌØl ZÇ!\ÉA^ Š``ÌØÍbbÌØæ dGgAf ++@èh†€j/0ÌØÞvulÌØÒÜSnÌØ@~pN`ØÞÎrýPØàtÚ3v ++ñx ++ªzu–| Ü! ~fBÜÊΉ]—€ÌØÜÞÜ‚q„6Þ4 †Q›ÞÈÈ~ˆ¯SDŠªCŒ ++àŽDT&äž!0’&±”Zò –»˜ o0šDÅêÒÈZØÊèœ D2D" ++Tâ žr ôÊäÞ~ ·#A¢‰#a¤ÌÞÍP¦ °ÊÂÆШ ++ÌÞ}Dª(t;Q*- E¬ ]® º;L°8R1¿/²!º=§*Z´“TI¶d~¸Ù\^º",-BÐ ‘TFÒL-fBÔ$‘T+Ö‘TBØ(þ+1Z|æw=JÚ*èZÜ&<Þ:i~àû;âå-Bäþæ 3èê FBìF0FVEðîÌðT^ÆÂääòH@VðVJ@ZòZ ôÑ^öÌðbVø @Zú@xüÓ0þ ++ A~@~$@z@|P|z ++5Ó! @~Ó! ++ÜÈ$Ìðv'o.Ìðp'o0Ìðj'ƒÌðÄÒ 4‚&eÌðX' R'k  ÌðL' "­5h$Ìð5A& Š`(Ìð5b*Ìð5 , ++' .PÒÌ0d'c2Ìð]!4 HB 6ÀIB&8Fb:C~<7Q> ¼' @‘ZB#B4[B#D'˜' F€!H ++QÒÜJ ++õLõá1N `êØÞPloiRÌð‚#T‚°ðXX| ZK%\¨º;0^À;n`&Ìð( b^ ‡(ÀqðæØØf ++RäÂh ++dØj>H~l8Ìð™'!6n!. p'''r%þ& t ++ä%HvëHYxãHTz@~|µ²~ÙÀÎÆÈ‚4 Ê¿eæ„(SÆÞìÒÜqE†<}9©&Ü ++© ++Hˆ6# ++ùgæŠ. !7•èäÂàŒJªä f8Ž,* á>Gæ½ èÊöîE’$4îàÞÔ3” âFD–*ÞIdêÜÒâêÊäC˜>3š½Bœ@~žkèë!XK  lÜ¢"kB¤&ŸæÞÚʦ(sB¨ΑPPª £E¬*^/`æ®-*^"°Hž"² "´©B-¶C¯[hBȸ)¸•3"º)s"7¼hܾgBÀ; BBÄ;6‡ÆÙqèZêpÈ çDDÊÁ9QÌÎ3æèZÉ ++AÎ ++|TІf~Ò&'Z ++GÔï0FÖk~ØmLÚ«aMÜ §aOÞ&“)àTK>â"£LÜ^Oä(µGæ<`âêÒìÂØ BZÌêÜMFè.# ++;NbFê$JìKî)ðNò"'(ô:|Lö9Gø6Oú$RMHü&[5Z Hþ.a5rN&a~$"ääá5FY(*áuÞÜo~ ++<Ó5# # ++Ù5#?8ß5!54!å58&ë506 ñ5 4÷54ý55 6@Ò†b4 fÆ"[ F `~"I-Q$ R-¡¶&ÒÌ(µ%F*0G,w/0O.*Š/n~0& Š~2"ÒÚó@H~4,?6Jñ604@8 *RÒÆÒèZˆcæ: ÔOC<ÓOä#C>Î7D@>CbBÒÜáNTD¥CF #Z|3Hf~JË@L. LÒÂØZû0FN"ýê%FPc~RdST ^-DV.|„4X8 DZuÈ~\c ^§BèÊäÂ^ 5`l ++Ab6Ý?êæRSÝheTdH$[fÖNÕhÒÞèÂj(g"AQl ++Ò Þn4ÖÊòÄÞÂäÈZJ@Cp d)CrBIpÒät!4ÜZb)ævØÆÚxØÊÂìDz )0|ZÐ~ØÊèT€ OG‚m"„3† ãiEˆ2Š 84Œ$ŠOÊ5Ž%4&àoµD’í6”$èd*ØD–y D˜.C$Œ?š(óL_œ8 M ++Ož,U& ­³CB¢Ž0¤ ++ `T¦ ++$Z|,R¨–3$ª"1¬÷#®OQ°T#²æÌ´rèÂÒض„@~¸è¼) «@ºåMQ¼.îMonä !Y¾ôP#À &AÂ$ æÐú*íIÄë!_Æ6ý! @ÈâB3ÊØ‘>@Ì0CÎ DÐ$Ò DbÔ c~Ö CØ BÚ ++DÜCÞ  à0ÞÖÂ{6âsêpäGA„Eæ,^è",KêQRì0S:FîQÛ]ð 0Q#òY?6Aô.9(Sö6@&3øe¸%Rú:3#!RNüH"'RNþ<) -R*#hONJ#nON>* ++tOA$} ++Q+3 ++'# G‹À]8 ì!>"™RC$ -2çA* ¯_$BBË#–#I;# …‹"\P 7$ ++8 V&5(Dÿ ++<*' Z,@' 3.[ 70Å ++ 32M U4&$ 76 U8( R:R; ++3<¿&6>, ++@|´3B8 Ø3D+j3F)Ÿ-DH ¡AJ4J,!¯AL¦ ½A#Né ++žT#P¬ ìR{D$!ÚÊTQ àÞâ#Vc•T #X^‚%OZ6“T M\ S#^ýŠB98`* )S8b6 oJ#d l3fj¾3hææ­Q$j¤$l‡ç {nù#px])#r]X#ˆ<ðH.,:E&·-° ++Þä  ++o ++gà.4Z9CGb~ ++¥(E‚û` àš/R ºO!€ÒÂÐÄ@øVpZÂÄæÞØê—# .Q"‚Q$SQ&{(X 4*ÞÞè,àt/ ++q.àÊè B0ý‡ÞØ~2'C~4‘ÊÞÌ~6*A'fB8(Ì#:R#61ÜÞÜñ+j~@. ² ++e~B4d+Z~B~D>_$>F8$c!1H" qHGJ „)L+™ÊÚàèò~N+HLPrHGRÁ3T†MV"_X$ŸHHZ" \ÌB*^¡=`  HIb 3dÈ2Cf ++>6hÒFj6Cl ªCn°Ný4p#Sr*ħÔ3t$º9<3v(èEæxJI24™5Cz1$S|,eÈøv2~1\Ä°Q@BDFHJLNPRTV$D`ˆZ5b&Îîd¬ 5f(Ž 3h/|ICjà@6l7~nGz~p.z&rb|~tJ3v 4~x Dz~z%A|c|~~÷äg“€êèÌZbl€8‚(²C;·H„&²C˜=`Ü ++äÂ[^AÞ" ++é òà äÂÜÈÞÚâ ¢ZæÊÊÈä s%ÂØðDæd~èdRêä«k@ìleîäÔAð©èÞÖÊÜò `FôÇBFö2m#ø-ŽQú ++äÊŠ0ü1CþDH;DX¯ÂæÊV:p O<" ++o~,Ç7X*Á7C ++º;% m;dCäpDŸèÈZ.ûh~6 £J\>â h~4 ++Äx^&!u J~&<ê ++*/`^h~ eêÒÈ"ù”`ä`$¬0ÎÒæ+]Ÿ ++D&4µ<ÚÒÜBF(Ã'ò* äÊÚÞìÊ, bB.( Z-C0$› 2ÝsÚà4já16@â8—aÚâB:Aì<PìB>‚cB@ ­DB8rb sÁZÆØÂêæÊD ++ebRF$ob-bBH2J64cBLÒ(SN dBP¾bCR4 ·BT ++ˆ/€VäêÜZˆCX&>P'Z|cZæÆë4S\ À`C^$™`W!C`ŸCb2Êc 13dçBDf“^ ++aJj*gRl ±]n$8a~pf$Br:x T | oBt8"¼ oBv6!Ç lBx< õd?z:#e?|8"f1~!Þ.€ ÆE&#‚ È 0„ GB†•ÊÞÌBˆ, ;Š*¡;Œ(ÿ<Ž .UáaO’*7U”. :–¬ 3˜Q ++,5š$~Pœ"æp7ž—ÆàêB (%ÎÆ-¢– ++kB¤$I:¦&gB¨ ªI— ?¬:#?®8"=°>! v?²<$h?´:#i4¶(“cÒ@eB¸ 5º{fB¼Ôc#¾O Àc"À1ìÒ䊗bBÂ"ðG`æÄ™4AÆÕYEÈ*>U ++ÑÊ ++æØÊÊàÌh!@Î ++ cBÐ* ++ ^c\Ò"c~Ô$ù"GÖ,­ ô?Ø>'_æêÚÚ6$¼_Ü. j~Þ"Œ!ŠÄÌàà(œÆÞØêÚÜâ/Ê/:ä$<æ-ceIèh~ê"Q C+Jì,+Iî( ++ðJîIò <#+ô+-öD Høa~úÆ%HüNVþIS" ?KZ[UYPZK5 ++ƒ]W WRÇ~bdfõ@B î T$Š D0 è(5~ 1VhÑ À:ZÿŠJûŠI ÷Š%"#Î]%$Z!ÆÒ ++Öjlnpr&ø <%G(cB*óN%,%¡1%.%O'0.%2nˆ54­ñC6(Üz’ ZÜÌÆ8oÈ:*_ÖÆ<fÈ>ŽgW@†gSB OO&DóU%FÁfOôtvxz|HX"J &àZÀ=ÒLæêÄbN„AW0@P ++aèR ++CBT bâV aBX X5Zœ\9Cì^9 ìB`"æêădèß`Mb$eBd"ch–kBf«ûHhVh ++­Nl4±Mn0µMp(ÉroÓtPê./Lv"0~ërz~z c~| eC~$ê|š&D€%‚ù4D„38†`m%ˆ4Ò"CŠ( ^}~Œ j LŽ*nM02æêÄ<’"b~” iP–’20ž;94š;C!6d&!8* ++I!:¦;D!<ñ J!>ÒC!@ !G!BÅ;H!DÃ;F!F$,Š&!H'—7JdB!LÀ$C!N$álZÈÂÄÒØÒèò!PQ|¤óÿÿÿÿÿÿÿkš#†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ      ++            " $ & ( * , . 0 2 4 6 8 : < > @ B D F H J L N P R T V X Z \ ^ ` b d f h j l n p r t v x z | ~ € ‚ „ † ˆ Š Œ Ž  ’ ” – ˜ š œ ž   ¢ ¤ ¦ ¨ ª ¬ ® ° ² ´ ¶ ¸ º ¼ ¾ À Â Ä Æ È Ê Ì Î Ð Ò Ô Ö Ø Ú Ü Þ à â ä æ è ê ì î ð ò ô ö ø ú ü þ      ++            " $ & ( * , . 0 2 4 6 8 : < > @ B D F H J L N P R T V X Z \ ^ ` b d f h j l n p r t v x z | ~ € ‚ „ † ˆ Š Œ Ž  ’ ” – ˜ š œ ž  s#! ¢v#ñÿõ ¤ ¦ ¨ ª ¬ ® ° ² ´ ¶ ¸ º ¼ ¾ À Â Ä Æ È Ê Ì Î Ð Ò Ô Ö Ø Ú Ü Þ à â ä æ è ê ì î ð ò ô ö ø ú ü þ      ++            " $ & ( * , . 0 2 4 6 8 : < > @ B D F H J L N P R T V X Z \ ^ ` b d f h j l n p r t v x z | ~ € ‚ „ † ˆ Š Œ Ž  ’ ” – ˜ š œ ž   ¢ ¤ ¦ ¨ ª ¬ ® ° ² ´ ¶ ¸ º ¼ ¾ À Â Ä Æ È Ê Ì Î Ð Ò Ô Ö Ø Ú Ü Þ à â ä æ è ê ì î ð ò ô ö ø úz%÷d ü þ ++  "$&(*,.02468:<>@BDFì%÷HJLNPRTVXZ\^&ðÌ`bdfhjlnprtvxz|2~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìî:Ö¬tí_4.Þäõ_2à_6 d-8`E=æ*-.àòÿÿÿÿÿÿÿÿÿ ++ðò4ôöø6úüþ8 ++  "$&(*,.02468:<>@BDFHJLNPRTVX:Z\^`bdfhjlnprtv<xz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔ>ÖØÚÜÞàâäæè@êìîðòôöøúüþ ++ B "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœDž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìFîHðJòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâLäæèNêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜPÞàâ äæèêìîðòôöøRúüTþ ++  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚ äläætxz|A|z2 !s$Ò܈9+4Šs#BæÊ qIz~ *z~1|1E|~O z(|(B|~" •o".i¼1 $ÒÜ)09! íeqïd$=a 3ðÒè)j_", í["%ðT ++V ++Z6! Q+&¸P ++ë3( ++z.|.†M3P3ÿS34V3òÿÌÜÞàâäæèêìîðòôöøúüþVX ++ Z\^ "`$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ ++ ³(öh "$(ö$&(*,.02468:<>@BDFê&õÿçHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠ~ŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúüþ!!!!!! ++! !!!!!!!!!! €!"!$!&!(!*!,!.!0!2!4!6!8!:!<!>!@!B!D!F!H!J!L!N!P!R!T!V!X!Z!\!^!`!b!d!f!h!j!l!n!p!r!t‚!v!x„!z!|!~!€!‚!„!†`B!ˆ  X ë5ð#ÒÚB@ L0 áp á°šåÀšå$à™åZáž*€Xâ… ++SáöŸåê  áŠå pŠå°ŠåÀŠå Šâ`$òp–åàâàŠå@ ã ð–å<•Ä Jâšå pšå„ø &[ãe0 ã\ã ++w‡ã€€0|o4|ö"0šå àâ^ã>@ ãðšå`EâP…â,à™å^á::  áàløà‚å‚å p‚å 0‚娤!µ¤L‡ã”” ” „|& Œ2ÿ/áéÿÿêÀ¿ÿÿê 0 á˜ÿÿêÜ*0S Šâ Ô&À<âÿ/á|‘Ü*0bxñ [ÿÿê$š ++H ÌXB!ˆ`@ : €!!ŽãôäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZdP  ‚2€ ++!ŠÁgÈDGuÚÊ !ŒÙ5“$‘ ++ ++!Š ++–s !Œç>ñ L!Ž 88¯"‚¿ð!8 Ì ++0BP ++(€xB`8 Õð ++@B(8B(!’”–˜0š@!@7C b:8 ª ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #\,_+^üJ#:B& }0  L$à™åZá½'*€Xâ®' ++`EâP…â,à™å^á¤':àŸåêà†åà ã à†å`Šå0Š“':0 á4(ƒå= àƒ8€8 8‚8‚8m888;å8¦Z':`Šå(ÀàšåŽåšå =ŽpÀG':†åàšå9440(0—`Šå`Eâ0':àšå @àšå XRàšå à˜à†å à ã|`Šå> ãtÈh$ ö0Šå Šå( Šâ àâàŠåÀ âÿ/áüe(î( Jâ0šå šå(@è/ß&è,@Î&:àà(0(‘¿&: á,,1€å,€8"°&,(<1å$<1å <Så8dœ¼4<° <ˆxcp á°‡4‡œ@$Sz&:0Ô“ †å p†åÌ@0†å´bà†å äñ!à†å%†å4àšå)à†Ì-(15XAàšå9sšå=à†åx¤ bT&:0T < L\ àŒDœDW>&:(È DxS,&:4 |/ 0x S&:, ,<Ô& ¦8pŠå@ Šâ`Sp–åìò@ ã ð–åüÿI@p@ Jâ8pšÈ Tfð%:0Ð0` „*ß%Tù à†å †å ƒâ`‚åã ++,°™å UáÍ%*°Kâ,°‰å ‹ä dlD Dà‚åHµH4H 8-0ž´ˆ0w0eè lQlpl?l(+ll(l/ó$l'/ß$lÍl(¹l§l+8O0ŠåD<<‚… DD<2@0š˜@˜˜{˜Ožåœ/! ++œNœ ”=” ` ( ( Ø.ñ#ä ++Ô ++p,.á#Ø ++È ++pÌ ++"Ñ# ypå ¼ ä/Á# mÀ€â`Œä'¯#äÀä€l ++›lP†åll‰lllul­0†åâ`€lclll ++OD/ (/=#( Jå l )Ø ˜m0‚â`ƒpp0p‚¨/þ"ð3æH4ÎH .> \ "¼"t3 ƒ0 `_àžåHàð / ÄÜ _ÿA  œj":@È /‚"l 0˜o( € “8 )8/["8 `I` \=/\\\ /ý!\#/é!”3Ñ€L$¹H /¥!(“l(lm 4UH4=H4%H4 H4/õ H3ÝH4ÅH4/­ ¬P.™ ¬(\ ´…t(qt$]t ˆ.L ¼ ++Qàƒå\0.; À ++3à‚0‚0*ÈÔüüø0(„b †å 0 " 8& $.ùèˆ. |/éD`ä"Øp ++¸*€åøY€å 0€Xp ˜ Zw¹p d/³Ä/¢Ä/‘Ä/€Ä/nÄ`ÄPÄÄ?ÄL*}Ä ð€¼Ä Ä=à€¤/ô/ã/Ò/À/²/¢. /’G¼Ä /mÀ\ÀKÀ:À (ÀÀ/ ++Ì ¼/÷ÌK/IÌ /ÒÌ/ÁÌ/°Ì/ŸÌ/Ì/Ì/oÌ#\ÌL/Ì 7Ì&ÌÌÌ /òÌ/äÌ/ÔÌ#/ÁÌK.á d¸/œd ÈO ++”S‡å0‡lØO/‡ $vp¬P˜P 0ep`0€ /T TŸ †å †å 0gB : T$4èÀS. èH$T. pPP PO0ŠåTjŒw)UT=0šh&í ++8"m¼¼ "Ü ++/ÄTÌ\ l "» ++/ Ü.® ++ä x/ ì"š ++@" àU@ ãH44/D/mV\ / ++\.n ++P8 ]ô\ /L ++\/: ++\,è\/ ++4/ ++XGÀ*-XÀøoˆweXø /Ù ø/È ø/· ø/¦ ø/” ø/† ø/v ø/f øGÀ/%ZÀ AÀ0ÀÀÀ /üÀ/îÀ/Þ˜##/ËÌK/ñ[Ì /¦Ì/•Ì/„Ì/sÌaÌSÌCÌ$0ÌL/½]Ì  Ì/úÌ/éÌ/ØÌ/ÆÌ/¸Ì/¨Ì#/•ÌK/‰_Ì /pÌ_ÌNÌ=Ì +ÌÌ Ì$/úÌK/UaÌ /ÕÌ/ÄÌ/³Ì/¢Ì/Ì/‚Ì/rÌ#_ÌL.!c„.€:<l\$\ÌX/"N<„4„N/ûp ¬/ç”]/Ö|SœÄœ dT4¬_¢ˆ7õd44ü=P!/EeP;•P<åP  Q/\hQ3DH4,H4H4/üH3äH4ÌH4´H4œH4„H4lH4TH4@ ãðšxi@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆpX@( o2ÿ/áþý,.éý,Ø,¯,ž,u,d,;,*,,/ðü,ǯh_3ÿ/á,.~üpj,TBl4p ` ++(œ/ìû´Ô¼¤Œt\D,/üúäÌ´œ4.#úì@.ýù,/ëù,.Öù0¿@š‡<w(*iù€_0ÿ/áWF<5d$(.ÿø.ìø<Ü(.Îø .¼ø «<šd‰(dQ<A(3 ! <.ÿ÷d.î÷(ɶ<¦(.˜÷ .†÷ u<ddS(.< (.ýö .ëö .Úö<.Éöd¸(“ƒ<s(e S B<1d (.íõ.Ýõ<Í(.¿õ .­õ œ<‹dz<_Kx>(-x P.åôP.Õô<Å(·~n;ÿ/á¥ôd”<ƒdr.`ô@N?< <.ùó(.ëóÈ.ÙóÈÈ<.·ód¦(p<`(R @ /<d (.èò.×ò<Ç(.¹ò .§ò –<…dt(O><.(   .ýñ<.ìñdÛ(¶¥<•(.‡ñ .uñ d<SdB( <.üð(.îð .Üð Ë<.ºðd©(„s<c(U C 2<!d(.ëï.Úï<Ê(.¼ï .ªï ™<ˆdw(RA<1(#  <.ïîd.Þî(¹¨<˜(.Šî .xî g<VdE( <.ÿí(.ñí .ßí Î<.½íd¬(‡v<f(X F 5<$d(.îì.Ýì<Í(.¿ì .­ì œ<‹dz(UD<4(&  <.òëd.áë(¼«<›(.ë .{ë j<YdH(#<(.òê .àê .Ïê<.¾êd­(ˆx<h(Zp7 7<&d<.ßé.Ïé<¿(.±é´.Ÿé´Ž<}dl[<6&<(´.öè´.åè<.Ôèdò<z<j(.\è¼J´9<(d(.òç.âç<Ò(.ÄçT.²ç ¡<dn<I9<)(´ ´.øæ<.çædÖÁ<œŒ<|(.næ´.\æ´K<:d)<.íå.Ýå<Í(.¿å¼.­å´œ<‹dz(E5<%(  .ôä<.ãädÒ¯<Šz<j(.\ä.Jä´9<(d<.áã.Ñã<Á(.³ã´.¡ã´<dn]<8%<(.ã.õâ´.äâ<.ÓâdÂ(Š<z(.lâ Z I<8d'(.ïá<.ßá(.Ñá .¿á ®<dŒ(gW<G(.9á”' <d/ôàà<º©<™(.‹àT.yà´h<WdF(!<(.òß .àß .Ïß<.¾ßd/­ßH›@ˆ,s,`,K3/ëÞÓ»£.‹Þìz,e,T,?'.ûÝ.é݈.ÛÝ /°ÝT‰wlil=T*/úÜâ.ÐÜ<,».ªÜ ,•,„,o^,I8Ä.(Ü`.Ü`<h.öÛ@/åÛ,.ÐÛX¼,ª}Qˆ@,+,,,/ôÚ,.ßÚ,Î,¹,¨,“‚@q@[C+p. ÚÐ.ãÙ(.ÍÙ(»(.¥Ù´.Ùôq.]Ù´I:+.Ù˜.øØ(âÑ.ÀØP²Ÿ<.ŒØ,.yØTf_UØÿêtŽbŸ_ JâCHñB<ØÿêP’"ÈÒæàØÂÆÊÈZØÊðÒÆÂØh TÂææÒÎÜÊÈ@ÐÊÜÆÊ@êÜÊðàÞäèÊÈ@ØÒÄäÂäò@ìÂäÒÂÄØÊP2*#£ÒÈÊÜèÒÌÒÊä×.ÞêèZÞÌZàÐÂæÊð PB Ø "ÖÒØØZØÞÆÂØZØÂÄÊØB¿ŸõTãà—å0€¯ŽD‡)·)*Ï4§) o0ô·( ?ö ++ÊB¬0BL°B  äÊâêÒäÊZÒÜìÞÖÊ—O j&Â0 sò#R$æÆZÊðàÂÜÈZÒÜèÊäÜÂØ PÜÞ@ÞÜÊ@Òæ@ÆÞØØÊÆèÒÜÎ@†@•óÚÊÜèæ ++HÞÞàæ¼`¼¼_ìÒæÒè»>o N§q ¦#Ÿ! PÈ “ŒTã?l:@?á„å„å „å „åá àñÝ¡‚R ++cöÌÂÆÊ"ê`älìÞÜÚÌìÖfàÊbZ`P   ‚N1ò$ ++ÌØÈ> ++ÚÂäÖæ æÆÐÊÚÊZÞÄÔÊÆè ++ ++jqæ a¢Ðèð L ++ ++@BP(! @2ˆ ² s2oà„åõóÿÿêrB  ÚÂÖÊZÖ eôTãy ŠåŠåpŠå<£"n<£L_ ++™ OžåÈ3@b‘q Jâ@ŠŒzñàžå®à áàÎãàŠÌ7Q^ã*|  ãˆQ. ++ØPpƒâ šåxxP ++ Ø™`‚â’çà9_ Šâ ‚‡ P4ràšååÿÿêt¿Žâžç ŠâH’xaG Ð9`£bšå š9!pžp*Dð—團 ±˜_Áÿÿê8X*éX.’ÿ‹ ò’ ++ &æòÚÄÞØZÐÂæÐ ++\Êâ~( ,:èùôXB$ØB à±@à á¨Ðg ++0âSãbà) žñRá\žå0((‘((ÿ‘å á&  ãàŠå ¢©  ¸£ˆ:P4 ÈŸþ0“å àžå àžåàžå àžå àŸ&#LP˜;= ”$$5 0„Œ;Å2 `äÖÈÿÿê á¡?pŠåL D*õL"pØó†ÿÿêzæòÜèÂðñ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ``:l61(ÑÊðàäÊææÒÞÜ/V‚8îäÂàSBõ P.ÂÜÜÞèÂèÒÞÜ$ÄÆlÞrÚÈfjrÆîrÈæjZÄ‚(‚g<n30gE s´  æÞêäÆÊ Ç¡æèäÒààÊÈ( ++ÌØÂÎæ"›À `BÆ8/p8 ++Pj ++ P ++ôñP(’:èÞà LXBb8 8JXB òÚhB`8z8 ’ê ++B(BZqPÊÚ•C¶rx¢¢oÜÆØêÈÊ£CRY s¤õ8 "ÈÒä<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZd`lpfH5@¦ÜÂÚÊÕfÈÒäT%y ++ÌÒØÊT%˜õ' äÞÞè L L0¨" àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`Ž0Ž3l2!&í&åD Ý‚ÞàÊäÂÜð"1 HêÈ*§"Š¨B$ ã s¿€Xâ ++å¸oŠå“ußÓª_šåçßÓj¢ ++îäÒèÊ\B$/á(!xäÊÆÞäÈZ$âäXª&hœÀ€ZÜÞèÒÌòŸ J( !üCTã± 1@ž‘ ýPPã¯à ã0—å0ƒÑ :Ì•èÙ ! ++Ú d ++ÃLxB0 HÊ üZæÊÂäÆÐ B(  ¨   Ý€TãŽu= ++… ++ðn ++Šå Šå ŠåÕ= ++ î[<y ++€šå šåÑ lQ0Šå… $ á@M 4¹õ0 áiCrPC1H‘`0 á^a0 ++0Qã.’}âQã*¥S$$$“$$R± ++, ++p á áá `šåðå®0J¹44 ++4?JïO1 ¼i ++´/-´ .{ÿÙtz"ª*,o‚ZÐÂÜÈØÊäb ++ò €š(* |ÆØÂÒÚÊÈ@3@.Ð@îÂæ@ÌÞêÜÈ@Äêk0èêä¿#ÜÞ&Z&@àÂèÐ×"0M5 H+}ÒÜìÂØÒÈ0V@üæ 33  3r1HX¥f r( ++8¥"P‰ß„<ÈÊÌÂêØèZ›† ¥è , «TV ++M Ð "K ++³B< ++ ++H^­â^ã+ ++LA¤ZÜ¥èE‚|AðY3à0l[¼NcåT `G<! \G@, ++ø†P&^ãJ <à´ qžå&Rã1° ð qâ^ã È$“å/  Qâ^5 à“T  ñŸåÿÿ ŠåS[|ÕD<¼ çÀçÈ2îÿÿÈ ¨YRãêÿÿ¨9æÿÿÈâ _Þÿÿ|/||P— |P|´|*|+Q|| |X¸žD „(.¼[@à†âIÈ`_Pl³ €EPä à¸J.À4$jtÁp$@bÔ,,QW ++<QžåàŠ¸´« @ ++èS ++(3 àŠàŠ0žå$ô §Ä/ àxF´*qxF" à°KOÄX)ÉXõ ®0žå#1 á0Ãã0Câ0Žà0“ ++Ë/SáŸÌLá< „„’M  „@Šå šå$Ì’ü$?#$Ì_˜$ÿ _ìÍ@Oo ++@* @ ˜µSo: ˜GôU((  P.P $KáÔ˜H@Z!@ € €ZaÄ|”žŒ À° Žâ 0šå ƒå5 “L ++0Žç°GžåHˆÀ[ìá€ëÈOŠÿÿê$op1 d'@q@d/¸d _(àŠå,d $djt ++ddo|E ++dd @…„€ÄÅ@d"Tddd üOè èp”nlY ”,OX)±X/ìè*Ý舺D(0Šåð$ðn = ÌX ¼n$ P1D( ++8DÅD›8@/ Ô'@.E D Ø[¸¹ÔMn,Õ ÈÕ˜oÔÔ @Y@ €[ ™@Ô8ÔÔS  ã LS/ ++Ìj%ŒèD‡D0/up+/µpnpX/Ep//‰p+/Ép+/ p ++p[  ãb¤`…|ìl`.Õ`?×ÿÿ`*@ˆ$ ààŠàiT ++äŠä­D ˆèñD1 à‘èè­0Žâ 0å ‘à†ÜØ *]lv@ ++<þÿꄸˆXŒÈ7Ð. Ð. ++þŒÖä ø ++i\.¢ýX*Aý /^ü $  B.- /Fü ˜ yL€áûÿê&` ãøˆ@ ++¼Á¤œ  .ñSø ô ++( L,h’Y,S, Jâ$¨ ++¯èX±X™èŠèø ++D*5DŸ$@Šå$šå(èZu¬À_§( @µ@@@õ@€Æ_~:$@_0àŠå4X ,X[ …Ô@?(šÉD˜Hè[ „€K I@(@@(@(@„-0žŒø#¬ÅôDRôœ(ä*ÐÜ€‡`oäU '@•@à ++/”  _,àŠå0  ( jì%à ++( iD à ++(<Ê ©„€Äé@à ++/0à ++ D ++ œA ++88¤¤ nt‰4!˜ád&He ++S^ ++ ||o||h|X$Ð*8ÐOüX)ÙX/æ(×-%¸,((0`*e`[!?@Š0¥@à@Ð^¨NwÿÿêXh_ ýXOz ++L+ILL.¼"|¨¿¸%˜¼o¤á|üèP´fZ1 PL ðPÐHyH_„ÁH,@$šåÄ,Ün€U!”æT}¬.&ÿð "ð (ð ø>¸*"ÈÄD×ÿÿê¤oxþÿê  XuXø/Šþ`n µ"°]`@õ@*@0˜n$=#¨T˜o # @Á„€e+$ ø<W@ ã.Ì/ ++¼]6}|ìh@ l $Ì*Ûý€T h ++ýHÆ”e”s”¤´5¼ .Á%Œ[”5 `š< Såûÿê""´÷¸p¸ *1&¸pX@Óûÿê”%ÈD˜nd&Ì!8 @Í@8 p¬€" € œjl]'8  P$¡D 8 $ á„€Ä+!(T  <.÷¨Ä Ø¥„ꈉ°2ËèY.éõ/Øõ % %Û* *])Ü$µ|.®õË*ÔfâB‚ ˆÚ.JÕ})B0-ñ&1—å3¹Õ;m=…3m”,, ãD<h9< &É9<@-¥ E<y./ à<,ÄU^)¼¾·$,Ò’ˆ ++ØÒæè~,õ0~ ++äÂÒæÊPB0 +8 $ÆäÊÂèÊ+2êÒÈE2&+"ƒ#Žˆ(Èe€Kq‹‡8Óaà”å 0”@6ä@· ++-1 à’ð˜ ++ ’åâQã4!`*ƒ )’“Pá}4(/(#( \3Rã)D(@@Šå G/àÛ-M<+1@šä#0ÜËÐ4!.¥4q: ++ à”ˆ ++Ažå¨”6Rà á@\€$:" àˆnoP“å@A ++0p)X`å0âÏ/@$9DP˜<ºDëDDð 0@OàšåÚ<(.á<"p!÷ l{0à6à$/q$!àš(O ã,*¹,D0 áLP²ÿÿ ++ž` ¼à¼1^ã«,+`åàâü1§ÿÿ¼Œ¼@£ÿÿº\10”Ó0D+"0Šl(* p¬*e¬1à”tiˆ/ áH­H èÇx~1 @ƒÜÇt~à·"Bh/10vl~¬Ó(  (È9à$ €´+a¨0”ì/¨ là T j0ÅTK2Xw " 3.áÿP·[©Ha0âSp5P @žåŸ85p@ áÿÿê¼/uèÁ6 /µÀTPôþÿ ++O°ô?¡þÿô9›þÿôP‚þÿ ++– !à’t.d€.Ãó40PQá½<%àž¨.((42 {þà. h!àœ›`=“”QRá•@ð.ˆ= hah”C8Oð8t(HÎÊÜæòÚZ|àäÊèèòZ@!! "7ð)PvTB: LL<$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$Æâð'7µfÌÂfìôhÚ`Zb==oF;2ß¿F@ÌÒðÊÈu` ++>JH6>PæòÚüæ>'>>II^àØæ>@_÷ xêÒÈBHDVIû$Â`ìäÆÊÈÖìðîÄÜæòìZ`“Ah N4‘AÔ .ÄÒÜÈÒÜÎ ¡— ++ØÊìÊØ ADOQJXð ++ Fz ÈÒäZÒÈ|-9 `ÜìÊäèAPB0õ@HJB ~?e7*"\(ô  v.ÒÜæèÂØØ+÷^äèZÈÊæÆBx?³ LìÊäÒÌòZ¨% #„ŠØÞÂÈPHŒ%;nx(pp ++Ü9p~ÃCÆÞÈÊS€0›ŽØÞÞÖêàz'/†D+ˆ¥_ZäÊÌ~£!&W?!Úàí?ÜÌÞ(o‚"êÜ„*rõƸt0DZ¦OÞÖÂò§.vKZvzv|0†cjP ,@wIÿ"ÌôòìÖjlällÞpÌèjE=L8&N&cÜÊîZŽJ‰PN²Rh Úl:3 ++T3T.?<¬#ÊÈÖ…ÒÊæBWTW,^áG3V*>A GòEVE`EŸX*ÈÊØÊèÊE ++XEdE0Z*'Ï ZEbE<\*@ZZäÞÞèE\EfEeB ++Tc^ LV S` LZ Sb LX Sd L\ fàCEs’ÂÜrhg‚Ð4^ 4jï”ïRlÓ*n¼n¼$pö*r#r#t#v#v#x#z#z#|#~#~#€#‚#‚#„#†#†#ˆ#Š#Š#Œ#Ž#Ž#ÉC v™Sx Ln Sp LŠ CŒ LZÃ#Ž S L† Sˆ L‚ S„ Lr St Lz |ùð ØÂÚÄÈÂZìÂäZÒaÒàÂäæÊZÈÊÌÒÜÊZ™ (ŸÊØØÒàæÒæF_ÂØÒÂæ S"ÆÐÒZŽoÆØÂêæÊ&!’”£"[ÊìÂØZîÐÊ9PÎÊÜæ ++gIZOÚÊèÂ* àä¾F/èòþOÄÊÎÒŸ þšRa \I#’! þH$ äžäÌÄ–"ÈÊèÊäÚÒÜŠ ø–ß-œYH˜A/ÊðA˜Ašô2˜¶cš L– œ×@€BOq(oÚÞÈêØÊ!j cOÚÂÆämÄ>äÊæÒÈêÂØÒôEZõI4$3Q ž7/Êð€ ÒÜÒèÒÂØOÊZæÊ÷OÆÐÒ0àäÞÎäÂÚ"€aÂààØÒÆMF ž wOÌäÞÄCä/àä?ÄÞÈXäZÝ_˜ ++‚óBUó“OæÊèB±@æÊâêW/ äLF/Êð­,ÎDØÒÆÒ*“'T"1&Æèl^ñJS°"_ÆÐÒT~Ñ OZÒÈTG/&ä¯@êàÈ’ þ "w@ ¸@ ÿ1 éQÈÊÌÜZãR ++ý ý´>3¢ :ÒÈB:¢:²:¤}LÒä =¤=¶=3¦ =ç @¦@°@P¨$äÊ;2ZÈê+ÊæB¨B®B„ªÆÐÊÆÖ½ >ª>¬42 ªªc¬ L¨ S® L¦ S° L¢ S² L  S´ L¤ ¶; ˆ"ÄêÒØÈã20ÒÈM_ZÈÒÌÌ (ÅX Œ íS*:¢0ÂÎÂrP(Z…PÞ¥>èÞà y ¸óßîÒèÐZÚÊææÂÎÊ""Œ& ¥d" -# ++¯Zi ++d ãÎãð`º&ØÒÄ1 T°º°Æî4¼4CòJ . ¼JÊJ?¾>J6 ++O¾OÌOÀܘ ++CÀCÈC?Â0C‹ÂHÄü• cÄ Lº SÆ LÀ SÈ L¼ SÊ L¾ ÌüÚι à%áÂÐÝ áнøÒHÒHöH:Ô$HBÔBþBÖkÔ kÖJîJ?Ø>JàØO/P;Ú2Pã ™ÚJòI?Üà0CàHôHâþŠâBðB>ä.B‰äGêG:æ"G+ÒȆæAüA=è,A‡èF.3 <Sê L› cì LÖ Sî Lâ Cð LHSò LSô L Sö L¥Sø L¸ Sú LA cü LÔ Cþ L_ :è ¢Q\,ÆèìÍÁ ++ ++?2ä辩*‰QÚÄÞÈUb7o ´?ÄØÊ%>0Æè{À! ó ?<Æèa 3?.äèmÆñS*  <É» @ <$Æè„'° lïî ++qʨ 2¡ïAõ$$õTE ++æòæèÊÚ~`è]+(ÿž)_ ú+ì“OÞêèÌÖ"ì ++ùάB Oœ7‚zçZ3.'Z , îß ,W ++ æZž:x* "–KvIo äèGÞI?äèO, ÆY ++á ++6á ++ŽB3 G&"ÈCm;ÆÂæŒ&>,‘>3 ++>õ ? ++?(}3 ?'j B B*B;(B†&G2G3GŒ @@.@7$EE$EÌ ½ GG&G:,Gê IIIi @@0@8 Ö CC C3.CAØÊÂì‹Òw&J4i ++DÙ d L "$& ++( *,.024s ++@>ÒÈZ|n#K$_ZÖîÈ~‡2Âèˆ#Š Ä]OZÒÈz ZÚÊÚÄÊäDBÜÞèZj…qhäÆÁ ++°3j£% 6=!$ôZ/^àf&Z®Ë_ÌäÊÊë§]@f  kÐ ­´ ¦¡cì„È Š#|$xO^äÊ覟&ÈÒæèÒÜÆèm ?8>É Ý/ZÐæ!Õ"|Ný"‹(² (Ô_m  k/ÒÆNÕxp+)?èòàM ++êJê0:$Ûö'W: @W3<(Eš G"G ‹>DBD:þ@?>B<D`w+)ˆ„ÊÜì?F4(H‘&ŸèÒÚÊZìÂØêhQÔÞÒÜ.æ:gž ++"$%''æ?ZÖʘç%CÜÞܼm?ÒÈ~"š(ª Ú!0H¿? { b+î*B4 _ÄÂääÒºBæÂÚÛ&Æ+(*åtU#âtû?æêÄÚ*ýt¯ZèäÂÜæÌÞäÚ:a$äÊæÞØÊ4 6>u™Zo+0W„ Å+#êÜùl@^ÂÜèÒp !PØÿ_ÒÚäÊÌŽ"_ÎäÞêàüQ?HXx\/äГ/+OÎØÞÄ—!¶v°v &ÛPÒÜàêè/ÌÒ$.j0àÂèÝZ]EJí*É ,*”Jæ)ÞäÖ† ,cZÀ_ ^á‚ k¡ Q/ÈÂõ%øåÞØH!OÊÜì…?ÒÈ( ,)BÜÞZ ++@"h ++‹ˆ Q0Q*.Š Z²Ø-®yI •‚då b ÞÜØò`>ÂäÖª:.Ãzû *ÇB'·É ++.á£Ë4:7Ö&[ ! V/ØÞ„ ++$üh%°AF,ÎÊèó$† ++"D!òÚì3LÞ?Lñ0$æ變4’¹ à$*ј*,Åß3+<ÁZ4OÊÜìU½O ++6_ÊÚàèò'– D~/ìÞÃ_ , Ê ‚s ë ++¡N2/2L. éE@# û ^TÞÄ ©Æ©Í/ÐÞr?2(p‚H5 À¤__èÐÊZU ++‚P›Z] ²Œ~ ++oØÊèäÊÆê.E)ãr0󫟆 (é !Úêf(~Àæ3–Ü Ëøà œ “  È/º‚ÈÊÌÊäZÞä0 V"`‹ 2ø¿ Yó™; 2”9(ƒ) ³?ÂÆèó"ðàöóÕ_ 6$Ý‚š  ++ï5.t ÀìÜ!_pÒ‚€ ++C`æÚÂäè/ q û( <†1_ÆÊÈêäÝõ ++ (J|€$Š~ + p ++ªXy2BP. vÌÞäÊÒÎÜÞ $P$Th:R,JNÆÂØØ‹-&RIVŠ2$PQTmRVb(`æÂÌø?6棑 %%?ÚÞÒ /äÊE ++ÛXë4=a-qCÆèÊZƒ:“& ++ÐbÐZ†zäi †H9:I\.IÜ“- JM9/`Ð79P9-9%`Ð$ þÌ2 4$qÞàèÒÚÒô+H /ÂÊ ð>_ÒèÒìÊ. ++òbòD5|?ØÊè @ÞÜÈÒå/ÂØõ ps0”  L pùdÞv8 +d+lu:f2óï LfLnLhBDhDjøh­j»dlfn3(,35*">äÒà#0¶èÞÖÊÜtæò‚ÂÊZ|æäÞ`ÎÊÜÊä_3D ++¿ “p0?ÆØÞÀ /ã&â7 ++?ÐÞÞ•"S /àêš 6M!v, ++w › ++E,äÊÚî 4ÆŠ¹ZÏZs+*t5 NBÚÈ?4àêÚ ++'z¦Br˜9 ’r’x–:3t: È$t;vˆt±v¿È=%x¿D€D(?äÊâ  àu' "*D_ôá ­!?àK í!(' zC(»*$~Ü?ê ‚L¸ºD ++q ++šb ÁZÝ**n/ìÒh-"sÁ?Ôà À?ÚJ 4Gë+T§é~Ÿ ++ÆŸ(0G Rš6l¸ 6;ª ,6Þ60-@ÊE+À~az)_6 ^ Ü7‘¾(&ã&½y#~Ó %Ó™{|˜æäÆ•|•/Ð0~ ++7 Í~Í¢5P€ ++˜ž# 8€8Úp1‚ 8 q‚© ++qR„êÜC=y„yÜ@5†@(†?Ô?ˆÆÞêÜè=ˆ=/=Š; AŠA ++ä2A3Œ: 8Œ;/Ò|3Ž;¤ ?Ž?ä?4?Ñ º$@6&’@ã @’@é9&”@=ÂäÒŸ+”@Ð@–ƒŽ,ääÚ=ÐC/è9˜\#0àäÊ” ?ÎC/Î?3š: ²š;56Cœ;6 BœBý8DžBæ:B @ž@;I $@..Ó?„7E¢E 3×?/â>¤= ++ ++ @à?/ÞF:¦&Aæ?/ F?¨0Fï?&<Kª(Kø?h;K¬,GlØÒÄæàÊg¬I/I2®ÒŽ d®::4°¡ >°>/Ö>2²9‘²|C;G´ >‰´æC3¶C¶?.;H¸"?ƒ¸Dç:CºDÏ" "M?/à@3¼@b Ì D?/ØA:¾&AÇ;?/FÀJêÌ7?Æ<&Âh;ØÊð`;.?/?`ÄèÂäžlÌÒðÜêÚÈÄ€ß=%ÆA?ÄÒÎAÆAê×D€LzC›?$’?$žÌäI ΔЌÒýL Ô°Öþ? Ø€Ú„ÜäC ÞN@ àD âyM ä´æŽJ èÆ<$<$Ä‘<nD“<À@•<$¸—<$~™<ÖD›<$¶<$šŸ<$œ¡<#²[$ˆqN ®rA kN  ++JE  lA |¬‰A-Ö Ì ZR(“CHQØÂÜÎêêVE•V4!,H.õ:ÖdÜÆìâèðêÊhÂl`ÎÊÒÞÆêdòÌìÂZlp`ûC: äff*`,d6nhpd0&z/ÊZj ++j.f2p rp;">,æænn.L0l &rnl  ÊÆÐÞk  k-B/j ++lj?"e"e?J`j`1$(÷F1Þêèw$i.^3| 6nrdrp&ÜÂÜÞ¥T9k&k*N,d ++|4(,—FZ|æZ› m(m/Z5V ++Ú2*# ¨*g$d&X'bdXŒ, ++ÊÜèäòV,V"b$T &hfT2.µP-ÂØ®.X&R(\ f°c0 ÜÞÜ$,ÒÈc0c-@/ ++è2R¢-òÄD2_"V$T b04ßJØ 4]+F-, ++hf;68¼ ZÜ>k'6t/P;0 n‚8E ++êk8t+T-j ++bf4:,–@Èn:n.D5vÄ1<0£iÍÊÈZâêÂæÒâêÞèx ++V>POäläæv>v.\3r n† ++R@(0j0#6% $6%:D4FH"JL&N6P.R8L"%2V<X(Z>\$Ç %Z%,Z%* Z%#ZQ¬‡A¤å Bæß Æö3æêä,rîÖZàÂÒäl/Ó ܘß ?äà’d¡Ž ++&ÓOÌäÊÊ# ?ØÒì#¼¶,?¯»9 šA,³.N!+P¦SæÒÜÎØ24/ZÆ0Ì¢\þ—‹ \È5ÜîÖÓ„7{Ρ&00/dÈ€ìœ  %"1¹3Vû;äÂîó;È?ÄÌà*¯ÄØÞÆÖZæäÊƤI & XcìÝQ™*È7"õ/äè›4NZÞÌÌÛU° ƒ= ?æÌÈ_—+™  €,(2Æà„;&{N£¦,¥+yæ–Y0Áî ~˜8T3 7Ê7&í(ÿW- +fÝ. ~H¿îÖZÄÞääÞîÊÈk L&†Rhºð&Ž~ò‹À*böF?l¯FV”D”7¢î  ?äàÒ' "ÐJ Š| :ÏÜÞÃJ!]@/äàÒ/L´;FÀ8?äà° ?n›?äàÅ/ 2 )ÂY/êÚÒ(Å( :‰_ZØÊÜÎd"€Ø÷bÆ~«8 ‹­'cM &â"ÜÞ8(jÖOÚÂæÖj ‡ íÕ±F@ 8% LFm¨ Pr;3ý"ÌðÈÌôèÐdâfÐppìȬjSpšjWÖÊòjö3 %n r?b >TR!T¨{a €’p"Z|öšpRB Ep& ++@:¯!˜mpf0HmpRX.%q%€€p?tjpvB]n/x^npz| Án¶n~ €Õƒ€.p.ñ¯B+B0毑8²‚H_¨@wj‚ ++ `¨`¨¬6˜ G¯ G¯> —2K¯o„ .ýqý¨:¯ð@Ä HÎêÂäÈXↈ!0¾#ÂV(V»&@^Iƒ©à9' º929C6)ÞÜ>0H– –ævc"ÊZ#5ñò ÆÎÞæ`ÆrêÌÒbäâZÊèåË’ŠÌÚè"-Ìȳm'2qAŒû5&ÜèRŽ#?"Òì°ZŠL  úm&ŒN:ŽCCð üÂ@”Юa ãdÁd’@v.?q P ˜@(°R°³%°@æêÄ„!æ~*0êæQ(rÚÂÒÜÒÜÎ2pÂèZØÊÂæ&5"ÆÊ:ݔư‘ üú ½©R$–ñ  د@š '7ðÂè üÂüö^üÂüúg”  HÈÞÌÚèÝt p”ZÂÄæÞØêèÊj€`ઠL˜÷³6ÜÎz†€£¬ \(˜€€® üÂT0š_Q°;!Êð6œ$¤¤&ÆÞÜæÞØÊ”+ p` 2ÈÒÖ¬ö¬Üy¬­Ûs¦ž;Ì° öæöl 1jž ++yækš 6ž„# Ê€0¢XÚ½P t@Ê´P´8!Zc(¨ø0X!'€ÈBL8# 7P0:7¤%$ ++® >¦²(+«,)¢«!+"«a¨X+H¨ª H0¬f€®@Æ0Ô ÊâêÂØ~3° ++ÞNeÆÞääÊæàÞ: ¯óR@,9J&9Ê;!àª/=bª´¯ÅD9¾,C*¾&Cª¾E!À¾/G"¾ 3 P5§%ÂÜ°päÊ@èÐÊ@pI!8~ Iêl~ Kr0~ Kú~ ~!MÒ*² üÂ^L:ˆï ýQ´ 2ÿ1P`]&QêÛO(²Z>´T~ W ++±b˜  HT&P' ++. ++˜' ,cª'&e*'e' ++àR/i"땯° bX@ÆÞÜèÒÜêÍ™uK@ÌÞäæ¬âŠ^/üæP ,mê &oj oèР xûXE@Eh0 Á09Füæ(ýHý&z²@ýƒé8ý ƒš²ð…Á ++/ ++ U.WS`8‹i~LÆÒRʹYZÆÞàòß,ß&šß&‘ “ q¼ “‚ X/•O9Ë~™x`KPFÒÎÜÞÑ@Î8S Þ«w]@æÒÜÆ\T@Òæ@Ü bJ(üæ<#,ŸZD&ŸÚD¡xysªª L:£"- ++(ý (Ô $~é"Â@^^ H)$¥ÒC V¶0 ++>3h*®º/€ c··º $1+‚„àâ^ã$Sü »º»º2.¹‘@ ++ ++㺤·( *4‹BϽ»I7£ ¹@B¼ ø ÉR‹ê„@—å¾´  ã’Â!.u»ò‚B¶ € ˆÒäV½"°iý9 ++ 0‘å p‘‘·-Õƒ‘·ÿ€å°€å á  á°Šå0¡‡ $µÅ_°šåù ta™Ôº ` îÌA‹°Ñ¸¡‡ +Aµˆ°E‘™„°²ÿÿêšB¸ ° Ç*öR0 á `²¾¼-p—™’쯀å p€åÜ ÌòyÃ0È+µÈ}Ã0ÈØ/s ++ÊB¶R!XBî¾B‚¸þ^"ºu`PBº²ÈR†a0å “'¹³0_ˆ ’åW… ++½Q “å÷ƒ…“S‡¤Èðû+B^0å BBb0€å €†¼k† Å#Š.0Ó†,É0„å „å„.öÿ»ÍÚ¢½¢ /U¢s³À¢“RThƒTB† ++h¿Sº¿~8B¸ ++ $dš¶@ÝÀH¼ íSÆ$È‚xeqÂÄÒØÒèòöÈ ( $„=žëü ¿†[¹+Ê"[‘{ ++0šƒ‡S`S°¿¹çˆK–*És”û›¥Rp ã0Ò@7 ++>@à áA ++ãÀç‡ GˆÄ%àœ‹¹ü `¼mÀ€å °€ÜS:·–Ÿ p†åp áÞïˆõèP GºKxœŸ‹Gïº.C»½/×»½1À‚‡½^ïËb °ŠåÀþ¿ £½W˜:9W˜’pšå °šåÀÀ§Œ/œå< < $À& <öè7½ ++? áà`÷–¼Z @z`&A@ á P  ãc“—œ?£ú w¼—‹k“"@o“«¢-žUC†å ™.üG$›Êï‹:\ž@†å`(BSã2S»@ ++ &c½ ++£“1”§“&ÂÍ Ë¢.]+’@ @”å¯ÊT=pš@d/@š ,O¼d`hEÎÿÿê| ++ $¿ø²^¤ÿÿê6ö¯"ÿÿê  áps¾ hý ü<ãÌçŽ_™ µ@"àZÀ0ÇÏ/ oÎ+oÎ@pÏ/´þLg™/Ä.y°.pþ'.iþDàV ++RB `ȳQ1 ++ ++|A 3tMkŒ?¾&ã }}`°B ƙ;ý *ý ó©ó©˜<0 á˜g #Ã104*·œ  £¥ |éDÛȉ ž™Ÿ`êBÀ¦¨Ê æîÂà#NJ‘Eíš6ÈËi ˜*±òwL¿@¿¿2_ =_»Þ´ofŠ¾®¡¾XzÀ ++˜ÐÉ ’!8PÍ@½æÆ ¢1b7øBÈòÜÂÚÒÆZîÒÜÈ¢Î"He ++BÂY ++%0hbhh C@ÄwØðTÆ ÌÄ7a @üæt@ÊðàÊÆXØ`ÊÒèÐÊäÎ @Þ =!6@ÞÌŠ)Â@˜ ÕÍKò(X ZÈh’$¢]-ÊâáÒ´BD €$ &0z / !! N( È !à—ƒÇ¶ 0‚å à—åà‚@4è< ØHÊ ŽËz 0zqÒBÌH?ÊBÿ_ÌBÌE¿XB@ ø þp—å —ÝãþO‚Î 8 j‚2ÌÜBáÊaÉ 9zŠ/k‰¤x`¡ ɤ/R@­@ q¦[C:q¦q¦Õ¤n ªÙŸ n j ++!@š”¶ H•H@]¤”]¤ù¹]„å ”U¤P/ýP Ù‘­L¦T)PxéÊ P/ŠàHÝ@2¡…œ¡­ .5V ‚ƒ¥š ++V]ƒå@ƒ‚sª Ð!€¦b à€å@ü¤[XÙ¤ åÊ ݨ1›bM:0®b à†å YµD½©q ãà†åÊ!¡Æ@@žåDÒ<Ò ÍÜ0"Ò!”žD)Î@ò êÙŸ" @Õ€¥Opšå„¥ *í½á#Óÿá©@r)¡Ÿn@±£ â¬â†Qù¼O á\, ÿ9¬ü%Ý Ͳûê O¶þÿêH 6†Hþÿê\’BTx Q[@ž# ùS ++¹% 0='üÂ/(üÂB$ÁBÎxÜ_&4äÞÞÏ%ûPÞÂäÚfdØÊ0p/¹,ÍJ ++üÂ\¹ =0I ²(à*HÞàÊÜ°-*ÒÜM&¨HBÐ ðä¥×7¨\¤àqàé×0ä·,Ê¢!Pl dúÐ ‘xÒ °®&¯Y©§ñ"–ž/pê ùê ÍÿH1 àÙøo ++0Žâ 0€å0åàÞçA áŒTã4,S,[„Tã),7,€N ++¼Cx  ã8/ò86nØ` ++ãÂN pà‘âÀjþµ(jã ++Ò¦!pŠ3  ª¢ j§"p®°'lÙLõ/Š¸.%L1à¿hÊ-0”SŠà"&`JâN­4`ŠåÎ ++|Át¡|l10⢠++ˆ| Ãâ¢!0“ ++MØú.ÒÀÀ ‡ ËDZö¬\¾+¾-š@`@/Í@!`š¾¡ Ƴ”. ËÈ. ê¨øY‰Õü! @Þ¢?ãpH­ÑdH~¦ œ‚¦/%œ.°Ü/iÜ.ìþÜ “ Lö^¶ŒõŒ»D/9DŸD}DƒD@ ½@Y¥R×Z’äùX1àÞæ#]³1°Ä2Ò@è,ÔhÈædÐÊÂÈÊäN,@ØÌÂæ¶b%ÂÈw£{êÖmZý ++0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbç05Ôå07ð¦Y1.(^Y<.ý3Ö&àChØ’™èÞÙZû ++0Êb`ìònèÆÒlÄâôlàÚÜðÎìØâZfÅãÚ¹ãPìh º.ܳ07x­0Dî·[$ ¶ãPÞ¢™¨úâ0]ÿ ++0ÌÎÆpàèîÜêrÒjÎÌâôfæpjÚäZ`'àK/x27öªZ ++âêpó8äXÒB„° ²00`Î@§‘@Âè@æèÂäèš ++#æX9),=@FÚÒæ6@8*Q+Ì¥ *‹BXB,©  bÔä3ü8y@ì$^“ ÇPBX‚,H,/P ìX’Ò×46 rˆHäÊæ@b4èÊÆÓ ++pÀ ++æŠpô8 ++æxBü  ++?h»Ó! ++uàSà¶Àf¿ tA6Á,*Ô,Ã,¼´´ê¥Êêq*íH e@-§1@ŠD‰9 žh‰áº¶ ÆÜ<0šå¹g'²Ú@²ÚK²°–Ü¢ëÜ@Y@R·"R·R·R·ÕËí‚«„ !à„”Sàžå oàžåàïíê™äH *5Ô!JìH }HLˆ ++E ÒÞ(Yè /Jè/(+/U( ( /©(/ (_/A(+/(Ç( \ òJ²:ò †å¯  Ó"L ¨Æ­æÄ $0'!]'!60šL ‚Ï& ++ ++! ‹01 ž->xo%1€Ø;é «)1Qã^›)’‘å‘åQ«)"’«)!@’<S²»$¨"pžØa°žåQÚ,Fiº˜(˜;£1à‚­ñà‚å p‚å °‚催Qà‚åΰQ‚å‚E9!à‚û#*ñpd\ \h”d ++ ͺ@”庰€”åªÿÿê ++¥yDG¼ *ñœ/X/íþ¼9¾±§° D þÿꈔˆ…ˆ. ˆ’ˆ/Ý ˆØŒˆ *1 ++ˆ"@HH *y ++œDD@ªÁ*Á ++S)Ó%"@ Ø."¾ÂM@à†â$ @‚†âà†å0<#<H/} <+/½ <Õ<Ä4 žåˆ ´¼Lb †å T]°<<!t@/Ñ tk/Q t¿Xoà‚å!t#/etw!t ß*=t *eˆ!œ×t­HltüeþÿêÒŠnònó ++0ÌÎÌ`ÖÞÊÐdôÜlÂÔØêÔÌòÞòÌZhå@èÛB5êÓBì 6îÊB6ðÂB\2 êkÇB[4:áò[œXNø²oö ++0ÌÌpläèÚnÊÌÚìðÆìäÚÐnè`ÄZfÐ0ÐôÂóÐ"7ö ºó!ø˜_úX6B8ñ' o ++ü'2@¾ü'¼2#T%Rp – „'@/@zÔ;2Ô 0 ø¨X Êü¨Bþ `Heˆ]ˆLr&ìâ$= è.]è‹'´´"îûtOp—å. ©¶&»23^ã'´*ÖÂÖÂd ‹/̨ *Ã3šåêVÁ´šü QLÙg/ .•8£,œ.òÊÒþ`B ¸ &”Bæ ’ ’"p61„º~Y)†íMÿx  ++9Ðü*[“5"‰N"zܶ"àìþ" 2r*r ¦ ++Ÿ^ãNB ,!5 ¸í<lFÚ­2 @j E@ ++ @Ïïõ,ŽÄïõïõïïõëZïõ¸ÀÙ$%à“Y5ÕïõÅÞ00Šå"µ@óî;^ã­^KõÏ$ÐàåpžåXÅ if(@©@B "z| ôÖ0Tá=÷jT ++”óøï.  ,T÷4!à” : ++ü*äö æPP44%¾ ++! ”Ý:Ý:¦@0 ãV ++<ÿ0ÀŒ 10ž˜DÑPpÔÔêäŠ !4P ++ Døòx óømè8<\.\B"@E@ 8Ä.ìüçäÐп*Õ}5C á,Ho**HD,/¦, ˜0&sœ@œ.¥ *]èhÉ>/Sì `Æ0";Dì*)ü’ÐÚ !oPã†.]¸+X@À$;,+éÌhçAhç Ì òÄ.i `  N *± N ˜ ? ”¼ 0ü” *= ++Ô´ä!ž  8LL /© ++L+/é ++L7/5 Lk/µ L3/ý LL`/‰ Lœ ? ž °*%@@Šå®Ò€l v Ã.€  úN²O þÿêH ¼ÚQHwüÙ.püþãæÚB ` ËI‡÷D@ á{bÉO),5}& ++ ”2æ1!0€ì?÷/¥É1ß!“-7C œœ ˜C7^1”¯:O @”å”"àÿË9(/¡38OšåžÝp—ÿÿêÊŸKxG,à9ž ¿;< cš %`8N! ++HÕ>`i>f0X»Z!P²%QZÔ;(é:4´$Û'œY|?& ¢85(* ++ðÆhB(XJ1`8 êþL3_eh¶;s‹Ehæ&r@±1Ræ@ÈÞÊL˜mA@äêÜî7'+X8Z ++'ü&FvD 6‘HaH˜M“ üÂ@ó¸@æ@Â@|o+ŒèM@Å…NÆ'Q@ÌäÞÚWTPÞÜÊ@àØ”ÞêæØò@üt¶¸'RüvütTY­/rüÂüºü€¶¢T0äÒÎq2Øò@¶)QÊÈ@Äò#="pì¤@à2P@òÒÊØL¢$ÂèÜaw(H_$æ@ÆPI&4b0 ++ 6OLÆÂÜÃSd 8†*   @02N_(HiQ;XJP ^@PØR+"ò@i5\\\4D)2ÂèÒ4mP/üæ<Q4 RE¸?Oø%R:züæà‘2@ÐÂÀ†òÊè@ÄÊÊÜœ3ÜÞî;#s x…P…%8…Pj.O`Q )’”Â8B X *ᶯèæé'/ '  ++[ ++H›)Ÿ/àc/ y£— —#—`—ÿÝ\—80·)#0K%0Ži>ÜÇ.]€"Ìÿã.?Šm ++8y )Ü0pšå?¥îrÚB·ñ¸ÒpBX<ú+RRH/Hß>‚üæ{ã!#-‚ã ++ã./‚ã.å$3*åd ðåÆå‘ZòÕãÕºÜå B" Á: ^ Ñí¸í„+åní; 8eeíS0Žå <øø ø /øiø$/Ýø#Ê *Ü]•< ]ŽÞÁ9/¹Á#/ñÁÁ/9Á”ø% .u˜†ÈD¹DO7ÿÿê9 ñF1yÿÿê*ê1ØâpR!Ò BX! Š" ú3e¸]  ¹ áY0D ~ž¨!Úàû èÞr ++u"üvJ ++ŽG üºW3˜ ( ++ `ÆòÆØÒÆ@ÈÊ[›AÊÜÆò Øì]OÌÕ Xê B0P!M9M®^$9ºÓD ++`""Ctº ¼ HBþn2' ++xç]Y ‚üg$2((Û5RêÜ’3À^?4ž­ÇÔäZO8,!hóü°  ¹ý0ÄèÐèôääÄÐànîrÈ`dÎäÜØÐnåØSÖØf"6$‚§_Ù«"5êj' ãØ  ›"c88»ò˜B( Ð ÒÜæÊäèFÓ¡.pŒW/@X+i_@XçÆöZB& ˜Ê Ìc4r&°Ž'/+ugµ™ë& ò©ò °†Iú ÉH ++ÈôYŽIaNT !æ= “{/9qà€å €­3 à€±ÞB€å ÛS p á¹‰ø† 4 ++¸ ++/žåÞÓ<" 0FO(. 0 Ù!K'@à„åyO „åRð·&á;'ÀIöË)àxHä@€ÿÿêÚQ!ØEåèhGL ++_°G«0=0) P0 Ù÷ã).TLƒ+“†å °†å°Ä9iäç;°h†RÑÇyäó;-°š˜hR°†å @h Ô`¯ „å p„å 0\ñä¯)À­]šM.½].ÙþÈÒþÿê8Ú9>@9sˆ":dF" ++HP¥8ZäÊÚâûà.€x$ý<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZd`lr®;6±;·IØÒÄ¥;$ x>AH Væàæ˜æ p' ++(oQ’&(7E4êz¨¿(= ¤:.Åö 0ÆrôdØæôÐîÂôôÐÄÒjlðjìjàZe=Ho*_*o* ! ++UÃs*#gän ÄP+š*>+1, :  B{. f <ó6s@Xúã)¨@B0 ˜ã),ã)$;Ø_ÉFã)ã) ÅFŸ—å—å ùN$±T½ÿÕÿ( ÿ(A006† ++^z0¶ ++-XêO' ++0È ++,#úÈ ++&%ŠÈ ++þ+@’ ++0’ ++( ´ ++?¸´ ++3@ ´ ++L *X@\-%%ø ++ ‚ø ++ t/üæf  /’ µÐ ++6 Æ ûÚÂpæàänØÈænlôhÐØÚärZhKeà,LðL'2»-'4H$µÇ% R"IÅ% ¬.B„Á«7Å% ¦.G† Æ$ u4ˆÀ.6½A 8òO8˜Bo 0:ÙT<X9â>Ì>>,=â%?rA'A$^jÎ$' ++8Z ²$Z$B(8b#@ßWHXBX mb‘D8ÒÈŽD·}šÈ ++87Hº%„Ì ‘ •W*|XBæÒèêLÑüæv@æÐÞêØÈ@ÄÊ !ÞÌܺXŠù[½B)  ++™‰cFFžæ©|–  ðÙiå мH½ ++¥ ig¡TÌ/ +yC ?œ¹ Éõ ¹-ç¦-~ô:ëESãZí+’ví0Qáw\Jšít.- $Sn Æ.ð‡b ®àKc΢!&ä0®!Ò'adlKe dŽâàžçËbDh vë>h ú, ++öîå ++` /Å_a"@z.Æ-ïöî((‚õžd# 5 @ á0ƒâ¶idÊ*îå è5ø¢" ¹8ðlK| ++ž$Ö+-Pì+! aLhì0l)lñ6‚FHBH h Zä¦îE¦a‹jR ++ ‹ SyS¢!ø ãôZì$0ñ4ñUcpQbõÿÿ@ÇX/à:*ù–9Ò! š<â.Ø$.QØ%˜%HõXò1 ’–@&SãS°-" 0@Nòඑbef ++= *Ý ++=¶Ÿšå0šåàè$"¹f èÖGP÷SUP/ 50’äÕÖO<ðÒÆ ÙÆûq^ãÁÿÿ4ù1”3WÐöó zKi^&0Ðñš UšZ!àš„2Ú5 ‘< e%t1 (DGŒ/@Î +!Î C T(ãÏ®ˆ8ò'Ð $ "””ôÇ4€´ Õ´€þ .å&€ €%'/Åÿî; ®P.Ÿþês˜þÿêFŠÅò¸ò!ÈË V ++Hëò-,(à(H»JÅòh68 F#r ,b@³±= ++¹ˆBN Ð ñîXþÐXÁô0 ,Xþ(`X :¦ /˜@÷’4þ' Ú“ÚE ++œ÷( ++^Ð8Ä÷‘*8,†@g¡ï" ++Ü* ÚV¬@•, íPÚ`ö PýÔ/EÔÔÔÈ,Ô/qÔ Ô/ÁÔC.Ô6Ô’P/ŒÔ#ÔPÔžåÄþÿê&,æCP$•PP¼ <!à”ˆ,   \ /¬è¬ <\y\Ô¸Ô?™ÿÿÔ2“ÿÿX0Ssÿÿ ++Ž@û8@8:8Wðþÿ ++58/½þ8*·þ8omþÿ ++²þØf*aè0p)þÿê`z'å#`Ò‰h±0PÂÜÈÀ7‰òN8?YTÞä>"š>e? ŠVÜÞèHh(€ÿ°BR )° æêÄZY "ŒY/}Y;3±/T-/N±#±P (/‘ ߥ/Ù ‡“™ ++(±Åj dÅÈÅÝÅÅ/-ÅC/…ÔçP/áÔÇ"œþÔ/±Ô/þÔ/ÔC/Y™ ++dP^™ ++”L4þÿêu.*IA?V% ++?–N8 ++N8*ÁiƒOIF¿cÔÁà”åàâ^ãFº" ñÏq Ç© Á© W¡ÿÿ ++¼8n8h8Wÿÿ ++c8ëá åá „›þÿ ++àþÿêˆ8/ù87´I´C´_&þÿ ++>´ /­ ´?/Ôý´*Îý´o±ýÿ ++ÉýI *Q ++ø=týÿI mýÿê|zÌ ++d|z0-@jx-d 9P` _rRž 9T:":š ”V 6@û• ++ˆˆ"H`•h–¨qY)ºRˆt@BR@_!Nop¶•YÚN6Àô•'@È:ô0¸Br ¸X  tÞÖÂò~Ý,`Ù,xÞÕ,êÑ,ôRBp ˜XŠ &Ž ç.ùN ++ =i.u'·PÅPvP(.P½i!”-"ÉOI`> ”%©”Òà°Ž.æ@/ ++§+ Ôž+ú0A1ùj"àŽ†DŠä?“áè?\\ÕLËQÒ "€ ´I;?ýpÈDêÿÿ ++Ò @=ª À /MQ (´´´´/±´ Š ++D¸.TØŽ ++@ E@øÇññþÿê6‚`^Ÿ#ÒÈs›Pbv›¯fðì[› Rh>!º´8"^F?Z‚' ?Üä›[\^ø4`ï\Tb##V# Û#h/LR~n ˜ ôÉ(ÉÉ)ôÉ<ÏÉ<P(ePLP(µiŽiéi   %!–Ç1“àŽáã/4?^Þ.(! œ R)Á)K õÁ? EÁH´©Á¸/ýÁ µ‡ÄÊÄD ºDÈ ÅIØI{Ñþÿê<‚._dl@fæìµhG ]jl$ ++×P$úlúlú0 6ë¢I+  w ¢nȘmPn/$W•(Û;( ‘ €x 2pàR² RC"pé+S¢p=,„BÚrS! ++Xè+Øê ' ++‰,[rHã,šŽ  ¸ ‰å&0v+v+| ’`t’`FVu<Ë5¾_ 0$Z,”å—/H”$? p”²./Ù$` 0„âàP‚ÊaH‚(4,,p‚mŽo64½¬ ++û^E ”LŸ .ÑL ++Œ$NŒ$ C@“å ŒžŽ€.Q€sò lÿÿêr ++TÆèÊT¨ f |q0Œ-ØQäÊÈxÎ@x *¼¹6ÆäÞÐ/C¬ ++8œTD0|W2 (X1±1¢Ô$­*-Oö !“È;â•’Ñ ++àåp# ++ Ó^/šå;M²EkB ƒAÉ ›g ÌFçcÛgy*„ `9[…: ÷f/0m')1W ·A/Áßf1WHõ H Ý)D1W/<1W ÿCÁRÁRí*yí*dd H 1àõ ^’yZ ,è‰QOy *MÔ¸Í.tÿ=ck= ¤Ï.} .ÙSí d1,,p ÿÿê:JóÈBŒ  (€ ÎÞ÷P  áà³>@ !0FSƒˆöJ¨“ytƒs*\q;!ŽkkWkK‹å¦J÷* àŠpå 0åèŠ8Ö= ”%0€U0‰z.IE3ÜY6ST5!0ŽQW&0 ãF? ’&,Q1¾=Á 2¯(|û(˜ÄFå1r>Õ~é1™2XüQä02²8(tàÊ¡"Èt€Bv  Hm8¢e}¿[AJ6ì”'Û  &5 0“@!yk0ykÿ‹ ÿ‹ Žÿ‹l=4øè\èK°•$Ü\•4¤qàå ^W  bhyp_ ÙÜ›2”.0ž^A”0”b‹ä; ++1ܤPÈ$ t@" ++B@ ++éz?z vSN ++!IîNêNýRÀBS @xHæÆZ†¢ÆèÊX ++vG p$€8xX *œ è $ Â)ˆO'zG¡¨hB~   a­aS ++¤¡•ïFu‰ ›!$¿ ++oTC0“å Ÿ!± .¥ èÌ0 Ä2å@ ´:o¡ ´&´,/Y´+.™´6 pž|„Ý„ÉÕÕpM¼€p$  ¹lÓŠUf8ó("B|8b~H â tƒ‚ ø *¼J× ô× àdÏ× ÁÌ`  ++Ó ±Ó $/ÙÓ +Ó „Ó h½Ó 4Ó ;Ó @uÓ Ó DÏ 'éÏ *Eйau´HÏ @.ÑÏ  Ï Ï ÖÀBŠ  €Ë ! ¢Á§Ë •B‚· rb\T\Ë FË 9¯œ Ç (Ç _ ŠåÍ(E6 (|³ Ç  ³ ‡ "ѯ ++À‡ ²‡ u W!$ W!kôdÜ. 4tv X X ++$±)1—å!õ)—G  G <d{ )1 ++êz ŸH† näêÜv % ¤r„Ä\hf ÒV D-©Å K( Ì @5*ñ ÂW€ ++/¹€ +++ù@Ѹ1t ++ÌüÄ ++D±€› ++ÑJB‚8Š…‰ …<„TVz„$ †$ùN£ˆX¢Š`' bGC¬@O@ h)W ++2ÜìÞæî -W<v±W®WŸ ++º îÐ;aàÒè@Òæ@æèÒØØ@ÄÊUÅXŠ 4(8š·VZ€ ++ Z'XN‰GN®bN<ÊÈNÕK` @`ãK˜s,üæÅ WraÓ "‚ˆ ,H\@X Þ ˆBÑ88 €þ`ÂÚbOq>xlXe¢‚ ++^(8 LÑiYôHPb8º¥5( 4t÷>³^ÈtD8ÊÞ P‚8J PC?4~@øKI) ²(jZ~(ïcªŒˆ-6ø$/ ^ø eót"&òJt ÂŒ ++0òzò}/äÊò"$Q`ö wö 8aú@*|úD. Hø ++øƒ\^Œ8 „öaúK²|úJØù ʦùPºŽP\2°Ü& ++ ‹ ðH lHÚÞÈêØÊHRÐ’¦ €” @ 黃û~ª-APá#q+1PãQnJ"TŒ SñÀ9+å ‘åðG6Î-/…Î-ë # A+1â,x"”8;/# ++€'’Þ–ÍF`µä\}ø„"Wš 0lz \ Ú– ++(”M˜”MÌ(”Mœ4¤,° ”MO”MF< 3(  M¤M (cÏÆ%O ++ZE5 @žzFûl lK9/9lKºR³ lK&˜e#H.@ ˜šÓ_ŠœÓ4ž.·¿i´”3ÆÛ Û$㣠㞞ãžã ãD¢:HÀl$øæiùÂÞÜæ¶ xT!΀"ÕR ’ L0 t ¢©3ÜêÚ¢Æ÷“p~"Dé€ Ð ++¢8 †(J;Xù@æèäê!ªS#ŸŸ¦ ¥H (V$ “"@ ++È+- ++ƒ!àžú“)® ++VÀ0å<à ãàåÓ  -" ++×/ý ×·_× ¨*ͨ#×&× ×/Ñ × p,MC70Êhp#« €Oà?žt0ô TS– ++&,t"&àãk|"ƒ ¶Q0€å ‰¸šŒ<Šž Œ"$zØ/^ OŒŒ ±ŒOö|/ç+/-/³ŒŒ ¹Œ/¾/¯+/5/Š/{+ÁŒ",/=/î&ߌŒ ÉŒ/Š/{+/E/V/G+ÑŒ/î/ß+/M/º/« +ÙŒ/p/a+/U/</-+áŒ/±/¢'̇.] |m¢¥ })ºgRÕ$d’å på½½ä‡*ZÜ/Aàžåø°0^ãBFZaå 0t|¤S'5؈X.@Љ°U .% ++H(‰ºÝº½"Z?`Š6ZpÓgf¥xW¹6Z S+°;¤S¹»L¦4èÉ' *  à™<0ÀÀ5Pžå&ê‘¿ +e ¿ C  á~Ü~Ò 8WD»i ++TÔÔ(‹*1 v\ÔMÀv\ \Û . 7 œF] Ð+ F]O áÌœ0¥è/ÌþX//˜þô/ô'j^.%ô èÐ.ßÐŒ±ŒcÐüB/-ü ü.}ü/xþüW/ýüG¤˜,œì 4^œœ˜ .…˜8_ Ð*™Ð˜IX0.æþX/NýX/&ýLD3h/$Ä +++.¼ 9ýÿôO ýÿà-Õ|0/²üD//~üX/-X+/}X8/ùX+. Œ 8/‘+/…l8]8Œ.Œ"8hB/hw/hg/•hh.åh/^ühW/eh·/1h;/hk/hŸô/ô'h.%ô˜=Œ±Œ˜üD/-ü ü.}ü/ÆþüW/ýüG¤˜, œZÉPjœœ˜ .˜9 k Ð+™*¨  œ 0h <  „^ Z th0/ÌüùX//æøÀc.Ù!À*ÜøÀ/ØøÀs/~øD/JhÏhÀh,.A#h ›ŒŒŒÍŒ3pB.I$|@pÌõÿL<1Xbz)¨f*O¨R) |*4˜£)ÒÀ!(Ee(¤ ¿)7æêÄ#@#O€¤ "È7XSôÈd3APxÂ+v-*¦€*)86 h*h,3±1An.@VÏ x¹\ÎHk)X Ï4/ ++0 1P¤ ù\AH_/X€8ž\8ˆ(¨ ^Àwò/ *œ‚¨Í0Q£b¦…(X‰Pb8¥:#8É8t$hä0Bª Hˆk0~À2¬À2-8 ¹2@j ¹27¹2$0‚Ê/ Ñoêy=­2/p†6/ý>H }2Âçg‚ª8ü e’7^¬o2»è ®½é0¸ &Z6‡x @wSTã0e7"M ¯B„ŽAà†åu'a†å†3¸44` EíØ«·záoŠå í~ ÜÍ~á}O šåÐ7È ŠB²  p‡ŒÇÑ1 ÿ¿ÿ 0 FâN¨ ++R Qš ++ËŒ^£A¥ ++XTC“[ÏÎNyf„X„+B Õ ‚'BJ'Bé =ÃD )´0íÓQ€åà—ðÖrÝU€å0€Y5 DV YèÅA)ãÓD“± &Ìɼ-*Hå~l"p9* .±ëµô‡œ€„ jfÝLh¡HO0 ãDL00Rš ÐÇD ˜ ü:xÿD(ÐðC5ñ ºFçºD,:ª›OÂÝ°é¸ ÄäW[‹KkDyH>cD*cDw-!“åzðp ‘å‘åùÆ@0—åa¾1 —’Ýr9G+Á_,!pšaˆßž 1;C “å¬hŠ"àh–|x /9xâwß«,ðZR®8š°p %HZ9°ë)@Ñ!hMAPš²TXdH/¡dX.õd  /A dÞX¬  ¡`˜tCX.Ï œ0z”/ŠåÜ, ++@Ä: Êס —¢“ó…Ÿ u ï ¤‚ÄS à‚å ïì ,* ìØ ++D.M Œ,^"@£° d $¬EÈhŒ¹/@À Lغ t&¸»9pžl ++<ñ<&P‘¬\» Pk+9 Ç”ð$'˜¬Õ Œ2.a>Õ D / ++D /ýD /ïD /ßxxD $/MÌ+/Ì+/ÍÌ?/!Ì3/iÌO/ÍÌ+/ Ì{/Ì?/ñÌ7/=Ì/ÑÌ?.%Ì /aÔ'@/¡ÔŒÔL/=ÔvÔ ÎÚeØàŸ$‚åŒ 6ÚôSàžå S#àžåP5à‚œ 5#à‚ØL'à‚åŒ/!Œ€P  €5à€1à 5à€5à€>#àdÜŒ.±¼¼+õ¼Œè{Zd¼@”@Ä*e´T7 ++.üýïë‹@¨ýÿêd ÄLXLŒ\Ü: X L .mt/ L ­Œ:. L ÝE_ ƒå ËúÐÜØ Ô X½ 3‚<‚$¯ì€¡Ni¬ °ð<Ì \Ü:)D.]ü!Þß°ÜÎ4plp)˜/@X ÷·,M \˜ <‰<܈nÜ ?(*Ñ”3HØi&wJ\<)Ô(ßßû ++/  +/Ý  ?/1! 3/y! O/Ý! +/" {/­" ?/# 7/M# /á# ?.5$ €üÙ™´#ò.   .Q%8ì70$ºu8J¼sk Ø ô #¶\|9|¼. &,j,@I@éœ! ôu†, ðu P' Dð.ñ&D D P*E'T P/ @T‘LD(D /¿8 ÕX . (hÛ- ´@ .=(íÒl¤<…|̈sPpäô°,} éD<$¤ÈO ¬ ++XE…h <$Ä_ +Qä<$ð_å pžîÏ< <$¤€ /Õ<$`ãä<$|qcVÌ´™°~$X Àÿÿê0’ÌÌ0ZàÂ=Ùÿðº$æÞêäÆÊZÈÒäÊ~l#ÒÊÛ`ÐB¼QS ++¾ÕÁ`pBX{œ6ÀP2PÏÂWà†ˆ ìÊäÒÌ[s €áÍ<ò0#8dgà ujJë44Ê4"Hj# gàø ܺ| üœœ¸€·îd¤©—F` tÕ7@óð@ÚÒæÚÂèÆÐt@îÂÜè!Äê ++»ÜUA/ nBŒÇDæ@ÂèÞm;!-x‘˜^}2 ++0®w»w0Àx±| À£Æ;3ð ÑTêÒÈ>˜b  áàŒ€Ù>¸Ë ;iìTƒ<OÚ 1—Θ& †R \† â "p¬" šÎ2P*1“l\0llá? ò 9 à—î ? —ê íê •ð2 0—”‚àL4L°ç88’ å‚7(—ž oãsâ 0ÕpÍ226t$äÊú:VÆÞÜÈÒ_t6D“¸ 2 .$ļáyÿÄHÞÞàæ^Æ€ ¶Áá=ùBEÄ€DâÆ€8}_ÀH H^< ++Å À<^×CJÀxX|t¸ ++ FW ++8 (}#ÜÞclØcHÖ4¹Dœ‹j ƒ ++Ø(H)CäZÒæÇ‹?~8â$ (ä   ,-&: Ò rpÈ(BÞ&ú0Á2 Ú€ ÍP}µ$7 üæ)± &%±$%š¿Î!3XÀyKâK¬šˆ­]óFu gˆC où/¬ £DíD›Dù¡Á´¥ ++± .Uhdñ •@ Éi¤ É)-; © -wD-; / àÙ äšÉ ˜.ÅÙ © © I¥ uü *M¸çÕ ³Þ%T .¡ý$X½ŒFrÌHª˜B0° `’Þ?Î-Q,ÆäÊÂ!‚4æêÄìòz0/€ š‚΀ ¢ ¥p ++ÚÖÈÒähZ‚ÏC Zí 'ZÀ ó(ÐÿgÐÐÒvŒ¨.‹¶nM%Ã/Šå¡.m³IÌAZ G$/0¹LÛ„Ôt ’ $„ ++åsZÐÂÜÈØʺ~DѪŠ6Ò ++ $!XùùS¸ù2Âïæ@¸x/RBâPÆ81Š7H L ++Ò %`‚&52±F@ÔiÖ™PØ°˜0Ú,' rZÚÞÈÒÌÒ犕F4Ú P Z#|zVÐh  4”÷Òæ@ÞêèZÞÌZÈÂèÊV@V =‡"?R‡  ++1? ++ ++#&Ebg /Eú ++%I"gAʸЀXð ø'¶…P/AÕ#u²èÏÀ ++b¶ Bî“0ÆO‰ ~H ++ç˛ˌ„´ãÒá »sFß» ó>ÓÎ    3— /ŠÃI@" ;¨RPH ++ c <šås+ ++c>ƒå+nQ^O#@€‹€å€åHI +ê\Ÿ? áÂåçL ‘N ++eH^¡ç°Ü!ìjÞ0íÚ? ¹,èM ++üÂ\_Ú°vÞ·Xâ ð··îG.—u ++eq³éeCjäVeúâ €hæ ¢&\ÖÙTl²"C®/pÙ€Ù; P{a—å à— åö€Žâ 0€å0| ÞçA áŒTãŸÀ,,[„TãÖ,/ä,€nU` ++¼TãÉ8Ò8 ã8Ÿ86'` ++ão•óà‘âmj á(Tãè|WÀ#pcQ /cQOÀlÙLA/9¸%ûQD/@Ù ++mCR4@šå½ˆ°L0”å™?À"ðœ R—L,º¬¤ú¬„=<° P?ãpHú,…" @Ú— œœÙœÓ/?DiL½¹Œ©ŒDíD/òþD/1DÖD¨– q@.¬þ•.¥þ¶TF’ ! û"æƒ èàá%Øx cäX ò"Uê@ `ïž RÈ2æè¡;ámáÛa8 FÚÒæ#eÐÊÂÈÊäàöJî ++ÎP ’æ² ++7,8v²Í‘bõÞ—PìXêH/P 9Yúæ mHˆ ++00ß] :îßðI`8Bô¢²ð|Y—ª ++Žª ++(X@ Ü.E#VŠ 2€÷[é+*&ñ›À ++H¡F5©H]1]1 ?]¬¸*˜í. ++£6a#rHk— ?&Š“8 ++ò!]€— )9 ++ð ?è™- ++e- ++ ++-¹T×êqb >ÌÂ?¨èÞ@àäÞÆÊææe'¸p¶8âò®_¦þ"ÈÒæàØÂòÙ ++%òÏà@ *îÒèÐZÞêè&©•èÞZæèäÒÜÎnø SÚôqjô¨mY Jôiã *³õ Ä[çrörÿgörörx  @[An ò* [[L 1[[[[n ºŸ:8V' =¡"ຠæV¼¡Z4ld .dоÈ»pB Ó: 8Æ%¢aÃ)n‚å p'F.N.ôË :/Þÿkõ‰kÈ’ÁxYPšBú¿M+¨/ ¾ ¦`-‚åÈ¿  õ°Á°Õõ ’_È" s.6ñ3à„vaC„å 6ñ TÄtp‚Bø w£ã»Ø^\-ª'ôö #}eTPö¼X.X»’ŽPndn$xz& XJøZ µðì@0¶ñ1h aî±÷$ ++0j°b_ú_ =™_ É_ |X_ ä ++_ ñ^g !g ëÉ¡+*iÀpHi(g üg ¾:g ÍÌÒÜÈ@ÒÜÆØêÈÊe ü2þR üR ? ; & ; ™ hB O Ïj 3õbf"Pr JZ r êr @õv  ++(ð¡# G_" Hd ? ò&UZH/UêH7? ++0 &[ú0/]’0,_º0"ab !á+ 0B_ÞØÈÊäø&eøe©˜B  =/ÙŸÑÖ_À ++.,jû±hæ  \.¹h =%’Ò4 …Ò4w¡jgû #û ¡j1‚å¡j‚C  ++ ++FÞ4Tâ4µj r#—å'à—5 Â /Z:·âD°K_gî4S—å#A12â i*â4 =p—Þ4¥–4#aj? —Ž4’$ ‚ÞXgª` .eü/Ú(ð."Ì oØB „ÿf, „- „N  ++„0K&<<<< @¨@d>K@ÚM{è-Óç ¿ip’B 1q04¿Ñ¶Ñ§´ôÆ=žì1/àP‰©üi¢;@ÉàC¿¤p–GN¹»"Š¿" >m¿"‚@Z› uÇ‚@Ï"  ×!‚@‚@6 ‚@Ü é+¸ *¥Ü†ð‰g|_•ñ+JhC,?0¢?€?ZSš  ++ 2 C Õ+W b 2¹ $ /€B  {üV&­~ì³^& áÒ1ZE?*ucöD.¹Ù%?žëýˆç$šåæ{V&1@‰F&1s11 @ù¶& ++ŠUO{ AI§HO ++/ŠŒ.‰1%1  wüÕ<Y?f'ÍC Ç" m9"Ðz' ,µHH¯à:¢Z(ÒääÒèÂ|î,e0j&Z+ 6 !é/ é¾8éwM+ è/ èS š þ * D€ f‘ BàäÞÄØÊÚz Âm8>.Y ò æ$‚Ÿ(ÄÒ![SJ ±?Iš  ++/ ++/:0xX?8Í80À X â J¹B  ’ ŒO( ++ÓE‚?)q«Û +++q,O\ ++R.µßD¿N0TáJ¬%~ˆhÎ@.=ãÆDÊ ãXÊ6%iÊ6Ñ”iñ ++Ê6.%gEÊ6 z˜qY ++ñ ++Åñ ++ `;™yÝlol! wÃol“m †mx?HhYb‹Y—]]Y.ÔÓG#ù .UX*Uúé ´ Í pÑ \£Û a3P ûGûGÇY¼/ žq‘A HsOlÁ ÐÙŸ)/XÙ;l~ / .1À~÷)w÷)žXš x*HÚ@ G z0"&?ä*t` äÊ Z>¸B@ÄÊÆÂêæÊ@ÂØC/ÃvÆÐÂÜÎÊÈZF/üæ8+ T b +ú €^%/ Úÿg Ú Ú"# ½€i  ++ò2Ž gI,1 åµ60jøF$  d " ¤‰BX: Z ++¨Z ++¢ x˜_H LäÊ\ ++(W9tÊ  ++ízn ++%àÿ"Pß9mMCNü%mâ/ ++(Æ $VaTˆB &“;Ü ++.å&\y£ÈÈ8]Ÿm.…Gƒ¤%\± ¨%ÏNÚ cÊÒ &¨.Û8& ++0ã ©B (  Phƒhz kh( <#Ó Ô &@Š\/ž` íDù(D.1Däøãà áä|C0Žâ 8 8$1Þ<Y†\\6Še Gaò (0"†z ( ++|àZ :Z¬ƒh*  ++ ÀZÑȹ-ó× + ++{ ¹NŸL yëÅL;+.Œ;v? EQ/™E?,í×E'.9;,4|O Ÿ+|PD 4ç)=EùwÙÃ=EP *IP8Ç1Ç»4ª*ÚÂòÄÊZ¹AŸX ++ *@` ‚ BÜÞ@ÜÊœ¤ ^X@æÞ@w ++fF:uòœJ Š ˆB8 Ôä- Ã' ++Q%$ ª{˜ +yJ{B/h]/X†Bq !}²ÕB'*ÕBì$ ÞêXK3 Pœ%) ŸM8!äÊêMÈ&…z%/‡ ++ & ë Ò& &/² &,Ú &‘D@*‰ ?Š0 6  00yB HYD•p6'?Àåˆ5μy&¢yŸÖMp˜ ,X¡˜0h¡'o£ºC/P/rÌÄ7&©Z7#©ò7@.X«  ù)&­j0f` 08_ Ñ" 2Dˆž³€ žÁˆŠ HàÂææ›m !pë tR 4 ++ g ý ª¼8µ6°ÉD½Æ”/1 ¢#” ”‹”ë=Œ/ 5Œ "Ìn 5Œ_ šåÑ‹”/ :‹”6!‹”!‹” ‹”d!‹” ‹”È!‹” ‹”ÿoÖ'” !”ë”2†¾’8”!”ÿo! 65 8”& 6”& 8”Ñ”/ :ËØ$X”, :LØ>P z 6׋”-XB¢¢Ï8´j (H˜» <¸,ø  ªŒ‘8È6\°PP. ø" ,1˜ $: ++ ++"Èžw %1 ++†å†åÈž$èÈž@øÎÿÿê ++zB D  €- ++É- ++Á¸žª4žœ¤Ó- ++(- ++{ªh„Z(Ô- ++L- ++ ?- ++/- ++  - ++- ++4?€å5 ++ÉÀž5 ++4Êóº5 ++¬5 ++D¹5 ++…œ~5 ++ 5 ++5 ++B5 ++?Ý¿ž00 ++=z0 ++@¨H‹Â?ºqW© ++Ÿ™Rî6NOƒ, ++êl20—4 ++¦Nà1_  Šš %, ++ä6&àhd q!„7ø>–îTb —å YØ y(('@@ D-pï#¬ÕäCàšåêzêÀ,/à‰.!LÙÀƒàx /™ÜOjÿÿêt!K$  È7Fl?ò&RB >8’ @ Z ÓxB t ˜ Ú«î2©‚ ’CŽC/ ’CprB B kàù «Ÿå å? G§7 ¯ Ošåä'5Ú»!B°Bç ++@¸Â1J![>;@HW¡J ãY * @t!x% Oª D´¡FŠ D% ´¡B/pBË' >è |è Fè  ÜM t©é LX%,X ê Dê :Ï#ê @/2/ Èa† / Æį8"Ú)¤•P8B HpP;À ZQî > !’óÒŽ> @‘åsâ#Ój{[ò“Im ++_ áRF ªGyî7Rá7<)(m ãŽX+Ú ++ ì÷ ˆ+ Þ ++0€å €åg~mízܶ ,Z  {õ 0¿µ¦œH(00 ã{ñ&ËðQà8& ++äíòt0äíäí… ++q ++#J«í«íÿ‹" H¢42JH  ++ «í, JÏú«í# J«í0VŠ YíŠYíb[ë( HXLXçè/8Ûè ++2ž©ÈFLÆO P{N  Ì #8;7&¦4"ð:˜kw$}&4@;¢à”å 0”å 6ÃF»F“0âSãl ++cõÿÿ @¸‹qñ~ ýƒq" @´Å|¾þØ%.UØ%È0”åØ!à’•Ù½} Sã"« …" 0Bà Œ âRãàŸ&¨;t Iá;tS?³t¡–àè$¦.=èd=k Ù…a÷ Á~ìÔÓÿÿàâ^ãÐ+' åf5à«@Ö ¿ÿÿ ++ à”åpžV*/(ƶ3(( ++‰M ã 0B3ÑŸS ¶àòøX U 1”åĸ¸0¸ ,  á¥È° < yZ4íê2.æþöò>’2,, L L 4"$ÈC¶C N8&=,(à( Ú(F@J@(6i+ÅP 8ÒÜìÂØÒÈŽ!äÊQsÆÉ\ òN² À]º¾ RÀú †v?- "4À #‘4 Gñ `À+Í/Ó O šåÓU š P8A/Q² Rc(‰Ø0 0B ì; ++ N ++ÃJ~&Hc)A<È\ #ˆ   †/7aŠú* B"–^Ô-Aý ++#ï.ô[f ´z!‘%Z? ++XéXÞ QÍ&œþ’ 0/¼w •AzÍ"ôâ®À+?š@Å@4  ."ôµ] TÄ|@.YÔ(NŒ*¤r%ºÐZ­z%êSó± ñD ˆpjü5ÜâS/'Ú˜»nžDnž |/ª• W  ëY¬*Ð1 @Šã³í€NC´/0žN–LI¨K´‘ ;XÓ Ä ++ Ñ( ´‚¥(Ÿ#(<?çÿÿä\T/pšXjôý T_êÿÿ ++$ä¾é @@U0÷ 7<ôQG:R…†°ŸµC †åµ D,`,L K@3žåÍ ++@ +å 0@ žXÄâ® ¬@•T œ .œÃ2²"£<)> ¾†{>t1‚/ò˜Æ›¼M±Fü .¡ü+Wdö! ++*ãþ,2 €*!ÎT=,h ¹ , Ä*­,âÚ›.Ûý 2zš7s±[X±[·FT?nO èÐAnoAÚPeú T ~XCº Lgw—6n! ]ŠŠ_  VEEC6D.: â ï¯D!ýL}¸g7/ ØUó Ø„˜Y[ + ++aó xÎp/’ÿåµ @"’b¾Ix6"æÒÚàÉ@ŧ ++(îÐÞå@S( V?a8>$ù %€En-"TŒ ±|"äÂÒæz†èÒÜêÂÄØÊ"ÿ) X÷a8z,ë^AÊðÆÊˆÆ ++¦wšZ[_eYñ8¢X r \ t@811 ú011Q ‚ \kYX^ èÕ;§ˆõ aêõrBî@öCò ^ö¨pB b  ö.«Z¡ú’1S ö÷“@­@VuS ­ ++g¾N ]…¤v%=0‘!kfS­HÒM ­Lv€: ++ž'`0 Žâ­ˆ1 ƒµˆQ†Žk„Ò i+`ìQ’30_ÆXó?*’Ö×$`’kç, `EN`ENÞwò bÞ r(Þ:b`L°MbNf.b*&@ýB`B pf†hIîE ™5,†h7Y 7YË7Y ˶h/Ͷhá®ÍÊhTþOšå·X¿‰Êh jø#à “Z ¡‹ ñ6à9 Âhe/ fÂhÿH6 d¹h( f½ ¹hJ@ h¢hCŠ j¾P'n¾ ­¾£¬”¾„i¾ÿ ¾íh ++Æ!qÆêƈÄ.]@V@,Ælñhå, lÄlÄ nÄnÄ?nx÷h#.@âNnûŠût*ýhIŠ pýhSxB pø—…¬Vr>]ˆî¿æææÕ%!à“±F·Ÿ!àžÚ" 1k +yºÍ_ŸàJ½DC«< 4 % Ø5 •–9þ)–ïöK} Ê°ur  ÊZc€3à Ê ++çÉ*EçÉAù–/Ê0/ÊSw@!0ž6!1S`r ÊÕGè)9H.1" ø?ž )A ++¨)k¨ ?aïO Å1"@—7¨àä^^ (" (0^^-2\Y5vqî^":wÿÿê6ÊG06¡ ªx r K /0F!@Ff[q Ú rx†{Š r ++ †rÈ}‚`8 \ €hv 87` XŒ¤,œ43" ù–Ȉ3 ¹ 3$/Ñ38š8 ˆÀ)EÀ)Ï]j}4¨q @š£$ t\1ú vp* vµ&¢ X v‘ JRh| HJRâu… ++h ØöÇ &]% ²Œ0ø ++ &]@¢ãNõn@t @5( 𠩨MÇ. ïNh0h*Õ 4  uæ,&\ ”c ++!HÊ@]@£!–€ .²[    O"6.ê0/›N1›Næ_*„ÿ~Z Š .‰(ö!ö6ý%xZcz4s ++Tx ¨NOZ,^HQZ¸ Y R |¸ Ò¸  !ð Y z |yW *À/h’bU`8ZÑ„W!jS~ ,Â&#ä@W.Y# "€('u*HÄêÒØ™J ky¬  ` #wÅe½ow? " ŽÅ×0hêƒá×L!™åA4Lÿÿÿ؈#1à‚}   }€à ãà‚å&_è(»5§ä( hº^);ß P›Aú"€´Ÿ†å †å †ðP7X®lîo €€4† /á2"@p1„å°<Y„å „´½ à„å0„å1™„‹Ì¡ æ‘ ++H*ë Å5©(›ð§ «Y‹›Öâ,D++CX¥!âañ" ’x ž š8„Q†Âæʘ…†t"¼jn –*<5b57 ”20>?\bj>–>(@>@©G^fpK„ ÈðT S'NI! ˜ ">cš ++P ++… œ 8 £Tàâ6 aµ3„e@Dõÿÿê,‘ öPA7å Œ¢áÜ5þ† ®i„O„å 0!õ} ++_ d?Ô¤0 ++ª7  ˜ ' ++h9 X: œ.tX ž ++X> Eg ’ ++0#¦ Ò ¤*ŠCÆÂæÊ9#fds êû s:w]df,6 ¢(BÆØ*¤‚€H ¸ ¦Px° ¨¢/ØØ›&hh›Î"›#ØØ”lÀ ”v ºÊ`Áz ¼ÊbŨ¨°8  ² ªô÷ ÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜô83'’%j ++ÂäÒèò(ªK6 "»O— P!B80 b  Qw : ¬ ++(' P' < TæèÂØØü:¡^ÆèZÆÞÈÊ ³?ø ) `4xÉ*š(/m&  4[*0*R † Q† º [å=j È/ †âj È/ †âå"p‚ #‚ ¹ n ¼žµŒÃc®™Z®k ++Q0 èí1 °S¯ ² 0HEäÆäÆ0 Ô©/8 , ²“àÊÓpÏD{Õ{º °² \†å¶P¶«PP0Šå ã° FÀÈÇ ÅB¯ ^‡vvšƒPƒPƒPƒPd 63Qd Ñp_H FQH 0Z3úH82]g˜ Sƒå ƒP/ƒåʲm <¨<š<rÞ@<ÿ/ሚ6:"0µu/ °ƒ?*mê1‡TÜ-`+x$j30ºePhB u­BP $×)¦CÄÞÈòÌ|™ÈoxÀc!ÂÅ ùþHæàêèàäÞàX À IP Ä«‰V–yh¥\,Æ2Nó@hÌÞØÈZäÒÎÐ:¦`HR p 3ø p fÊèäÊÆT- Xì!@šTû÷KÐ* à} ++Ô¨¨-04¨¨¨› ¢®3x! ++ Ê ŸY`Y 6%j\È^ oÊTÊ ++I\ Ìh8Ù—8(7Î ++HÒ@H Ðmp# ’Aˆ ÒXÀk käk n`œ†<Ô ++HOp ++ Ú ? q¾…´0æ (rðZØÒæè \ \ LµJÑØ h àÂäæÊ%L0{WÄ æãp á0‡å ‡å ‡pE?‡åþK ½ ï¹ –+±¹ ¹ 0 ÅºB Ö Hú¬XÚc  .’U DUÖN1^Ñ ++õ ++UM ä.ÿøQ,ž,MV I E»$=…( `= 0“››R†å 0'ßI Ö½J9¾J J m ݤ+•¶' }ú4=‘yF¼ ± ”(G®€./ý2c= —dV / y(¤“  Wú¬7O —å$0 &»OLP[¬¶^?p—OÍ/%¨/šŒø†Œ*Œ/yŒ< e ŒB*/ ä´`­Ç!Ô.F.êý( ++(àB Ö×°9( P°WD ¯Q ++“µa @ÊØÊW Iw,.&ü Hüæ0 *1ÀÈ.¨›&*› __Bz Ø¡`B è€4Ø &œÎ$Ó0{e1@ž£a:  {5…t/K:ÿ’ÿ6Ú& àeF¹SM.Ÿ0  YF*X" õF éG1Ä@<̱/ Ó0 õ/.èQ* àw³ ¾ãLk/ w.QÐ{ct( ++A&JšQ( ++ Ú¬Täò2 ƒ ­õÌàå.á á0ÎãÉ –…ó ‡å 0‡å ‡å‡å ‰Ùq&mËBå°R: Ëÿ#( p`UJN/B:z?0l ã  ãå:?0H:”7¨¶"p $S"àƒæÓµ”0h3.}¼5€88ÄT0„å Še öýÕ»ù  N3Ô /!Z= aO–+'<0 ã [H /…[H µ ++ðcÿÿê jª(B ÜTnW æh¡A€Xâ¨<ÙÍ3Ráp½Í@àŽà6&PA^á«(0 ‚âàî ]‘4‚âA! °ÿÙ¿Ù ›CW.°P=èŽB`Šå¼[@½_ @—åÔ©R U.&®Dü L|*‹n?´ …´`=D ò?< Y¢È'x  œö&#uΌ݂›„H +0¢'H  èÔšE> —Y>øAÿÿê" ÞæêÄѲ! ++Ø( p<ô0B à  ø æfrr‰83QáS8<eÓoââ|x ¤‰ *¡h ‰ ¬"€#tpàâ áW½x xL×x * µ¨¼¼ | Ì&©¡H: ؤ ++ÜÐbÿÿêºB ܘ©.âžx` æd=]÷ ++Þ-Þ¦ÞÞí‚NŠàÞàpTaR$ "pTa†Ð_ ߌ;Òˆ„u.„GV lE þR4R ¾¡^/1¡^wûÖîm5ÞX^^àD,%`!p¨ã^¬b8 z â8ù $«/ ++°<R  à<6@BHâ75(X‰ƒFÖ ܦ83ªhý!ªöz™½AZ äÛ¬2â@“f" ä ++ øn# ++iFˆX µ1 æ7Å!$ (5ø†«inow º è ++ Ga€¾p¦(p\#êíö¸ ì ÈÊÌÂêØèZÞÄÔZÊðèVI0¼(z:Ò/eâTpB/ µ OšåØæ7ƒ6‚@Æ î \æÞ ++2ð­0ZÂà¶:O¤}êO@ ´1€ö ÊðèÊÜ~ÙXù ++ \ÆÐÊôæÆÐÊÚÊ\æØæ 0Þt2æ  $ (ÆÚ Ð ¦ ++ÏoµD È $ϋΠ΃árÎ9Î5Î5Ÿé åÊ„}ÊÊÆ)á[¯pLÆ)IÆ}MvÆ¢¶ôZòZ? ìIÝ0 îð5ò5Éäöj>ôW; öõ$ 2õçúKª øúD´p&€5¼*ŠÑ1QZÈÊæÆš. ¼/ #Ð%»Â—<>0‚åå—|!‰Ð%%»€š üãßÿ"ÔhÜ`ÚôôÒfbÂÜÔrd“;4 úå6&öå6WüÃc $T5TÊþÊPhš  30\Ž2AZÆØމϗ—/à '›£•&É…){,N6 àqx[ ‹¬JéDG4¯Õ¯×Ù`Ä !à Mž I‡ð1“ !@œu ++7+’ïš/’å’€ @$*q|S à’åMc .Õ?0ƒß: ê ÕÕ ÃAà±|(uðZ  ++TÆØÞTˆ §›pþ€B š†è ++ÚÊäÎÊA&g;OŸ<‚ËN Li0“v1SiRN¼ ð%"^ÖãÒn0=Ù0ã ã›ɇ0"Ae0F<±Xª!XÒMW€1U  ++J õÿLQ¢Y8è_-`˜êPfâ  ++(8"$ ++ˆ/™$ Q ++ | ÷D @{N  ++ ,8¸5Ä}l   p %"%‡Îj ín#}ŒÀåQãî+!œ=c= …yï­vâLå°å@,(o„5¦ƒå °ƒå @ 5 5Aà ã54±!àƒå°å tx&%Æ"à—ÍèD1†šfêà†å0†å°†å#À! ëb.¢b˜ŸU4Ý íºy-yDà ã %Ö*/ wt*%7‡Ö*Ê ï/ÎçPØ ++‹8´ 8Kei  TTø ++y«†"# O"ài/píe#@ Ï2H! 5#0—ðø/<ðø Ä1R00 ãð¡" 7…5°—º'¢0—åÀ—å@6/#0< ãì ++ðÓ‚å ‚å °‚å0‚ìÿ‚åÀ‚å@‚å!‚å#—< ++"?1!ža S0žåÌ4ôÇ21°Ï\.”‡Ð€5yDºBO'pTP:¿€: ++! ++X*Þ I" Áp ++ $ÈÒæÂĽÙûèÊääêàèæ( ++ "Êܱ8B ++0ey* pd–3äÊZ< ++å€?àÂäÆ"xìhb 8$rö'©©/ %©{©b©W©‘@©-0ƒ*5O*50†1 ++×0¨y:_°†å0yD  ++Äy ¬y /õy ‡×=Ïš ¿{8hB tê"Àp$pO@—åt6_‚å!@t+_žåÙt±t0 §/ MhM?äêÜIJ I3 C. xÙ ++ûBˆ1@ °ò [ãÕq p›å°›Þ }#°—}Qv pW'òP‡â"Þ)ñ& 9¹‡â å((o‹å! ‡Ÿ‚:QâàÓ + \/+* + ! ä·€m‰„ntZ ++ ¦ X*êPÙÖÚŽúˆžXZÞÜØòád( "IS‘ñ ÜÂØ  ü€¶üÂt@üºü~œtÜÞÜZÊðÒæè>* Å«t  T‰‰I3 W?p ¢0ˆSg+“_Ð6k¢… D!ƒSá.Óô¤° RÓÇnSæHTÆ R~¦rS§~§"&²å/H)V A&Õ– …$ ¹}¹wõ*ÑPf.µÐe'’‡x-Î]š‡0 “åŸ<Ú]! )r]äÐq žå žš¶&yPN´^¹aU1q†UÄ +}Ä‹‘ u cÁÏ`‚ $x@( B+92äÊÚ+9à‚ & (Xj H &{NsŠ & ++HgTg؆Ÿ#Ê@@3RäÒàèÞòÞ X! "Y0Z S[cHÚÂäÖŠY#ÈB;  K-MŽ$jé¢æ• Ì—^Œ>ßíìZd /†ðˆ/@>;!4ÒÜÎ>; ><>3> >W I0ƒS&zEÐKzi˜t ++`ÅŸ…°0*HèäÂÜæ“’aÊäZ|ÄÒwEo: ø "˜A®L\j ¼–ÃØc¬z‚ ++jhßÐZæòÜèÂðBDJ?ð (¸š(»"Øb¡ ++00ˆ) ^ ó6 #±-0’Ñ<» 1@’@,,æn˜A˜l5Ôb’ *þH!¨ 0Î`$ÆòjhäÔÌfÞôìÞäêÈÖZÂT$ ,T& .TQ  0«7pžå(µï-—(E%p—ÆAKPÎA@’ ¢ Érp)/p_.Ñêq"à-5pš„&„ ÌQ]žå žJ \k/ ÕU?$ßà€åp€å €år©ò66å(ܬ{Sp á æ—EíéàEÑHÿÿê(šP.q Dù±àýÕýÍù¼F —Ü{1 žøµ øø%b3žåÂr¦Âr b ++ C$ŒQJ5 SÕ‰.Š4*"<u+4î@-bK&—°“ @½*uQSSãhaŒRä@C0I ++QL5;Sá))q—å‘/Pl/P‘t3‘åƒP0;\¿M"0Št’ ^qì{ RC 9_‹Š9 ÔØ~ª6PòtBF³•!0“Ÿ&¥DÍl"7Á ++ƒå ƒåÃhx•œdy NM.UM3p,­`$ùW <£v` îÊÊÈè(à(š BN ++ ++fx—+6…¡^õµ£- ”±ý”q\¾2 ++ •|bAW¸K óƒ,æ”(@Õ/”(?@šåMªÞ [üHmš‰@‰`Cq Ž f ¤!]€ ++Y”P½c‹½c/õH•50”‚ Ø*Ùû9ˆmÝÂ/¡¥žÏ?•Ò`B”áK&’üc" <Æ)!xó' ˆ! ++˜Ü@3% Z3P(@añà >@ RTÌØÂÎæ?,`@P B_Lþ,*DP ++ð ž’‘Y  D½8‘ ‘"h,¥P€B"ŽOy¨ ++8éo ’<’ô7T ò F¶/Ób H(!HÈÞ®Ë0P&« ++ƒÜÞÜòÚÞêæ¶ ++L®3ˆ §SÚÞÈêت% E÷J! †š!CK›®à áàÎãM¯"`ÂiÔî&_Ôî@àƒâe¯Â _A3’ça; “ <© ];àžÉ:"`Žâžç± ÔîC? .%\½ÖÈóÊpjB <¢ÈØ,CUšÊC¡+i<1;FbBAê Jħ œ7B J@1Bb L¢' ++(ÿ1p¢ H Bø  H0j›F dJõ¨ ÒÈZ|ØÂÄÊØ^àØÙ0Øoœäkƒ ø ö  ++ö ç { ++çmY–’—SŒY1q p’åà’.•Š&Ë " ^/ ag ++ï …› ž.L›à±A'>]ns ­AÞ;\¦¸£ ©o ++©~£ !pšSvÈkt/õt­t)t#t°9,D? ’å(1/©´Ýœ8 ò(’B N pœ æÊÂäÆÐ'P(ø)Ô? …B×_1- ž |¢" @$/—A6˜( p-aì‰jNQ$ D¥4$¦ÍÌ¥b¼ QT)¯›  B|/ðš¨)tÑ Tí¦Íýe65 Õv5ô«Þô¢ô¥;9:h*eá/OØ "® (¤I “冀˜D.é˜I=Á¤ èp˜è2’8¤| /e| ¢Óû ½\ˆˆ íˆèØ2 á&2 ++íÔ"¥D, +AÜàP‹1 @ž« ù>ôeñ@`¡`@^º P"ÔþäL ñPDÕv& ß C¶8#O] ++Œÿ SYñr0^áIfJ8Q “ç (T!0“p _“çàÙe £ž*µÙetQàŽâÝ£ Ršå 0“X0@“ç| 4O‡þÿêp.%pÆ4¶ÈòN‚– ++æÐÒÌè€Â ÀB N8FHLc"Pob Z ¸ (q]…ÒÈZÌäÊÊZv M+”7&0wT«q©"šs‡RÊs_ šå 0 y\ " 0I „àÏ , e Ù` |Q1@žt _ûO €U\ fu" @¡%@25àže1Dc+l(¡( hëÉh#äÔ@-, ¡3 á9gIÇBlìé a?W 7W"<¨¢ Æ ++/ Å.í¸PPP¸Y#MðråÙm«R,ƒå(c¾0®0(‚(BT:](†$¨dhÍ3~eI3 ‰'$% P˜^}s€å 0€åQ† ~ ¹nE«+"âðÔÆå´ñ@–‘ÞÇ2õ(CNHÄ/àLO.ùL+CN,/À*ahè —Ëþÿ @”åÉ}”à©»ÞR@Šå§þ! ++ù…ž .Ññ….UþŒ°NþÿêVÊB Vþ.”à ,ØÞÞÖêà` ++&@þr 10”:¤X\ç%3 ++ 0O§6!PYs*HH ¿ .˜Ã ½Y&@ B ++ÿ,”ÿ,‹þb :þ¼Ã²jº …XÈ"Ï°?  ãzf \ /ݘTŽº0ê08³à@ R€ @˜B Þ¢&X^`%a%NCÛ%~ ¯‡ cïX éG …àÑ@ ”å«ïiQ#v' hÙ Að‹×`—/žå\/5\X @´ ,• /³O@šåŸá˜B!ÚÑxâ'€ ˜Ì[R T­’¡I V ++0|G’0/C`tÞHô€ X*ÎÊÜæòÚZ|êÜÒâêàZ"; Xèð;^; •,?^Çš ++üÂJü ÖÒRœ n _Ò Ê Z(Fñ‹vŠ Z ++ -ˆ§é§ž§t§q%X&!¨Z$ºŽrídRb NI/ôbæÆZÊðàÂÜÈ¢ bT5¨@ÊääÞä@ÒÜ@H1t@Òv/1Êä@?#å×ó¨¤"æòÚÄÞØZÐÂæÐèÂÄØÊ~9HjˆB \}8™H $ÒÌÂÆÊZ  ò&Ö~ß1Pã#—# ^ãž"PåW˳¨‚3ñ ìuN *f3!Z ®çX(B1.!’J&¡, p½b( áZ«êÄ! “W¶l\ÚEÿ!×3“åãœ×\Á\Ô x /L)X©5\{Ì‚!Ë¿R \ B¼y€ïš$hSß) \mðpª `ÄÂääÒÊä$ÆâðÉR¿fÌÂfìôhÚ`Zd±+^l,>¬+`‚rPÿ bV>® €V§ZˆM_Aô ++äÒÄÆÂÎÊt@êÜÊðàÊÆèÊÈ@ÆÐêÜÖÚ+`ìpìœlSZ Nì%úç'OŸÀ dH¸.ÎF NHï*` b<d©nTX.H2÷j(ý?¶ ZSÍ,#ÒÈê+f­ h´¾x¥$(öPq< Ù/—å–( (> —a¯š.µ"Ø2N@‚K4BéJ’šC‚ h³-0Ž!X¿R  HÊQh j8dŽ– lضâ L( êÜÖÜÞîÜ@He6`:P ++Ê4T4"&.÷2èòBE.pô .` B>e~  á a¬1C+rCÔ˜ ++X0B†å p†'èiù ŒÂ ++6)7å§@*û ¾("0”é ¹ºhèäa\/ËÝkdˆž™„²šÇCnxÖnx ++0nê Y’ pÝYà ++9p8Ç6!$H³¬Äq†ræ±Ft ƒ@ fW!XW"  ` ã&0 ãûub&` ã`tDŠ^b"|Ö¸"`„TŠ"¹bÑ ++`8xU›gA" ++¶0m5Q  7æx5$àŠ~P@$R0àà¾""òë Èë —:0Š/0 öt¤ â*·™$ô ‹."µi ++!‡åJr0 ‡å€€q ++N2p€ã /à€ .ýþs /”/ p>¶+ Ü·/L$ULü üš)KÁ ü $ G,"pƒ{/àƒ¶ð7â0(/9ä@äüÝjää (F"p¾¸6~u"òãÝj6½ *Qêº. p¼1# $«3 p<~¹(+( ä(ÖÞ( ± ++.ùþé.Ûþd.ÉþÆ»<ªÈœ(Y(I®0?/] 0ˆ0z0i0[0 I0;0+004/qý0;/9 07/… 0k/*ý0O/i 07/µ | :000"|T $!p†<,lfÏüÿê°Ô;²½pæýkɬ(/ý ¬=8/¬!¬X:yX cÊim PÎd¾°ÜžÜ<´/qþ P wüƒ60-†’\ ++/\ /gütñrÂ/Xh<¬ç+µ© #ü’4QTáüÿ¸ ++Dp/ 0”.I„!÷û×<ãHì ++ú!ºÈLk¼©\<H1àCÍ*%ÓK@é@8ôU+tôU0¸g)Ž˜.bøf$8/O A$ j<åü Þ‡ˆo\1ˆ'@q@ˆˆˆ/ðˆ#/݈Komˆr*ˆo4¹ˆ'@ù@ˆ/ˆˆ~ˆ$kˆLoõˆ0ˆo Aˆ'@.-ˆˆˆ ˆ$/ùˆKo}ˆ ˆ/éˆ'@/ ˆ/¬ˆ/šˆ#‡ˆLÖÍü p\"aà ++ Ðd&è™&è™&è™ÜdÜd,(!™B  ++h‚h‚P ª ¨-Ô ++4¼ ß• 3à†¬“à†å0†å!'A \ö”ÚÎó%ä  )/¥  /å S/Æ +/± S/’ [/E  i TJ ,5 T œL7/ãÿc (¯ô†“ PH(wD(ëÌÌô.·þP˜(r(_(UL@/íý@ÚŽP{@h@ @.öü.ªü@/—ü@@„üÿê4´Ë6 *= ø"@X °OøÿêL D‰L.è÷Ä.á÷J!°ÄÚ!È ÞÄ:tâ) Ö-aØØ!@àÌÑD€>]?x &_4\4 ó@z£Å Uzc2U¯1/(3 tì°ó@y ++‚B V¦/Yj €«,s8 ‚Hš`0 †1Z|ì}Ž@z"’`€!hˆ0P öÄ€ ‚XB „ûŘgqNy®g —‹o0w3ÅwÔ0—ez ‚|0C¢ „(( Kâ;b ˆ wF†[ ˆ[Š[ˈ[ˆ[Š[#Qò[0ŒdYŒYŽYËŒYŒYŽY#YY0îYY’YËYY’Y#_Y7”G`”`–`Ë”`”`–` e"`@w@Ð F8:Ø ++à˜ ˆ L¸B šIÑÀC;š õÓ8O’qR/p›~ ªq  dEÔhOG\NNpäT.EÄõÓ @`Š ˜Ò7ˆ8äp˜ð3 ÞpØpNšGQ@ê/kbꆜZÔ†öžöÿ`œöžö /q¢öó  ˆ\Ææìnó¤óÿ` 5qF¢ H€Z’ ¢¤<3=ü0‡>S’ t 7ƒa „ňÑ3(²3CäÜäæÞqÒÓ3 l¾/à !ÒUÒAM*\Þ‘A4[ m40 ãkç“UlØM ++>—U=’ç«U «U  þ Ý;·H*ßÿI#·U=žç1žçØn ®Y<AûYò ¸â¬âóên6 ¦’pæÊèB ¦3¨‚ÌÒØØB ¨-0ª@©pÆÈäB ª¬Â0¬2®QÃÀZèòàÊZêÒÈ ®8°& æÊÂØÊÈ~ °8²$àÂäÊÜè ²´9 ÞàÂâêÊ~ ´8¶ pÜÂÚÊ ¶8¸.`ÎÊÜÊäÂs@~ ¸!º!QÌÒÊØÈA@æ º!3¼!`äèÈ ¼3¾*0"ÚêÐ?¢ ¾Ô³~ÖäläætEÑÊðÒè ÆÞÚÚÂÜÜ´qÜÊ"! „À¹šo@~ À!ÂÀàäÊÈÒÆÂèÊ Â3Ĺ`èÞä Äƶ ÂÆíÞÆÑØ™pÆÞÜæèäêTWÚ.ÜN2È6ñ¦0 È%8ÊD%C ,0Ê.2ÌÐ@ZæÞä«Ì7Î0 Î1Ð0ÐZȱðÌðZò¹!ÌðôEVöVøETúTZðÒØÊÂæèZÌÒðÜêÚ Ò—ÔÎäÊÂèÊÔÐÖÌðôÊäÞ~ Ö`Ø ++ÌððÖØòÚ$ÌðäÞèÂèÊZÄÒèR0 Ú¹Ü&ÌðäÊìÊäæÜ“ÞÌðàÞæÒÏÞpà ÌðÞÈSàâm`ÜÞè âä44ÜÊΩæ4pÚÞÈ` æ1è ++  ”! êPÒÜ êìPÂð ìàîÌðØÊÜÎèÐ îð!Òàð òÌðÒÌ ò¡ôÌðÌÒäæèÐ`æÊè ôö'€ÊìÊÜ~ öø*PÈÒì`ZøŸø2ú 0 ú1ü(0 ü1þ ++÷ þ  ÌðÆÞàòH 60 ¡0~ µ <=’$ €ÆÞêÜè P ++0Ìðð¿qÐÚÊèÒÆZ'Q[¬0 ++"? ."pØÊÌè !>$!  ú Ú`ÂÜÈ aP|~ P|z~ ‰ Px~ +xðÌðZ^ÆÂääò V T 2"ò@~ "2$ðZîÒÈèÐ $* & & (q E0 (3*#ÆÒ*†5è1E¡ZÖÊòæê&‘ ++-6ì"0ÊÜèc[î,0•@, ,€.Eé6Êâì¢E0 .30"052@~ 24† êàÈÂèÊB 46ÎðæÒôÊ 6<<1Ç68$(_ 86:. ++PZÌêÜÆ+¶0 :!6<¨AÈÊØʨ>@¨0 @8B& ÜèÂÒÜæ~ B7D  ØÊ DƒFÊâêÂØÙF¤XÊìÂØ!ò ì¡ HÊÜìÒäÞ#°A H3J2Š äÊ`Z%J#ðLäÊÚÂÒÜÈÊä L0NHËÒ%NzP ÜêØØ?P1R n>@Þ RTCþqÊðÂÆèZ|  ° V ++ÌÞäÆÊ *C X%.0 X°Z ++ÈÊØÂò Z ­R \ ó0 \?^, ^ ?`: `'b™@€èÞÆÞØ b2d? ¶ d3f S f2h G 0 hfjÜÞÜ# 0 j3l0 lUnÒÚn1p @æ p3r$^tþP rs@t t&@vÊ&0æÊè†v4x"AZêÜÒû0 x8zÇz4@¤¤ 5|& SàäÞÔÊì|5~  ÚÊÚÄÊä~ ~5€*‹Eæ9€‚9WðY‚„p3ÈÒÌ0û0 „ä@† †%ˆ%™©0 ˆŠÒ|¯0 ŠŒ?Œ ++$ SJ .›t.=¶*á ++=º8 / _ÈÊÆØæ9=^6#áM(D ª25 ±?¾4  +˜ Ç ++5O0Ò K:8nŽÑš êà@É0 Ž3 RèÒèØÊ3’*ðÜÞäÚÂØÒôÊZÜÌÖÈ ’”@Æ ”?–(@È –˜@Æ ˜3ší´“šœBÈÞîÜ%°«‘ÆÒ|~² ª'6´{z~¶"(z)¸P(ºP'¼'\x~¾'x'ÀwxOÂwxP‚$ÆÐÂäÅA&&#4(yz~*$H,H$.H#0#Zx~2#·%4kµ*6k³A ž îÐÒèÊæàÂÆž `êààÊäZ­@~  3¢‰¢1¤‡/6¦ G¦1¨|`ÒÆ~ ¨ª16ØÞîxA ¬*< ØZl ÎÞ! ++¬®Pu # °s# ²gÂØàÐÂÄÊè!²Z ´îÐÊÜ ÷À ¶ êÜØÊææ í€ ¸ÈÞ Ø@ ºTÍÌP ºz’¼êèÌpZ|"  Ж ¾êèÌfdÈ! À&blÀ‚Â*êÒÜèZa BÄòèÊ  ^o Ä&êpc% Ʋ|ˆ  `G È@fd ) ÊPbl ÊOÌ*æ€Q Î"ÜÀZ ++~1ÂÜÜ!A ÐÈ ++4Ð8Ò-ÒF Ô(0~ ÎF ÖµÓF Ø(ZK Î <Ú&PäÊÌ ãH Ü$p9âJ Þ"7è* àT#lh8õK â$9K ä4-@O æ2$Gi * è€#fd@2K ê$9?K ì4 €TO î2$Ge* ð€#bl@sK ò$9K ô4 €ŒO ö2$Gž) øòæò£L ú&;°) üžæòµJ þ"7Á*TòÄK$9ÌK4òŠ O2$Gê*€ò˜K ++$9ìK 4 €ïO2$Gö*€òK$96 K4 €'O2$G<)›òÖ G6Á"ô$ÎØc_O4%dpOD$ ³‰O B, W¡." EÈÞêÄ µO$4%I$$?&D$  åO(B, WûG* +pý),ˆ0B¯K. ¬G0*|ª °)2G|ª ¹*4<æ<!4%p6ÄÒèî0ú 6480 ȲE:2" ÎF &qž&@-i›EB0Ì’DD* ++u—DF,  F –"Âή' €@ÒÌ FB"j% DÎÆÈ EFà pH ++ÌØÞYú EJœ¦ LÍ#@àèä NÊðàÖ DP µ¾ AR$Z÷γ CT ++ÏBV ++!GAX ++` Y ZÊâì~Ÿ ÐÔÔ\\u‚‡ ++J^A!£ A`?!£ Hb=!ª @d;!8±fÈÊÜÞÚÒÜ¥ @h¥ Bj « .lÆÞæ— @n‡ • !p0È” Br@ð~˜ @t ++0~™ #v|- ¢ axÆÊï  zÆÈä,`|ÆÈ^a~ ++ÆȪb€ ÆÈ„ ++"‚y0„/„†Â/»ˆ øŠl¤ Œ=-™ Ž-Âl"/Ž !’/Lˆ !”?u "– p P˜Æ _ @šãP^ÆÆ¿@œ Zg ÖÀFž<1Æêä¸2ÒÜêH T  Å~Z R¢ ++ƼX b¤ ÆÂ8S "¦¦¨/ÛJ !ªNC "¬ : ®l2 °=-+ ²-|ø'"´/ !¶/ !¸? "º  ¼ÄÞÞØÊp C¾@z~ pÀ ++ÄÊÎjàPÂÂZ  Ä&ÂææÊä-  BÆ   ÈMI¯°Ê ++ÂààØò¸BÌ ó¶ ô ++PÎ ++±!ø1P%AÐÂCó ++¦ÒÂÄæÒ Q„¢`Ô^üAžÉ`ÖZ pØVavv°Úë ++@|ÌØÞ¥& !ÜJÓFÜÂÜæã0~ sÞ0ÜÞZ’*ÒÊ") Aà,= C 6 Dâ8 G G bäÌØà 6 ++eæÌØõ  œ&Øùbê ÌØEõ&Øð îS îfðÌØ ” Bò 0~ï ôVÿì ö6 ð!øÛùœ&ØÝë ü{í•&Øgî!@ÒÜð!@Âðò oô [û&Ø-û  ++г÷e ÌØ$ð ™·ìT& è C€¥jÌØMêB  'hÌØQál& â!&Uâ &üàl&Øíã "ožß!$òÛ!&CÖ (RA× *ÌØ|~Ø ,,'× .Ø 0@x~Ö 2+,'Ó4ÌØ^Ç 6 0Z½ 8 0V· : 0T²C<'|¹S>L: ¸Y@L,@@C¡BîäÒèÊZ/ BÜ0¢¦!D¯ÈÍ FÎ@ÂÈÉAŽ&0Þêè’f èÞºaÊ0Z 71’( ÒÜCÌäÞÚ86”28 9tÜ ÞàÊÜS51Þ*5 11à&ÒÜ06â(0'ÒÜ/D¨&ÒI&3ªÐ74¬$&ÒÜ6®Í,5°5ˆ 5²5¹ 6<*}B>48;6@(#Bu©sHàÊÊÖ² ++GJ0~· ++pLÜÊîP. º ++AN(¦BÒ^ÞZer ++Ë ++EP&g³'R™'Ù ++ET>ËjZƒ$ÞÜ)ó ++EV.)σ$!V!9X1V%1X1Zã1\¿1^›3`‹Þn@ÊÜÆÞ䢬Ö'à!*ÈÊ!×#âÙtÆêæèÞÚZB -í?äJ)Ÿ§?æô&ï0~æNö.ÅòNø& 0~ú ú {íúdüÎÊíPZÜBHþ G ++!@¥ dÎÊ0"%0h&ÎÊ0pZæÞÚÊK ++"@ÜB(L   /K$¥;Bà%0æBO&ÁNFø £l 3€` 0ä F8ë 6vF&wF@Ñ’)B'ž—GÊ0~žH à C"2š "Õ†ä 1ˆÙ 1ŠÎ 1Œ· 1Ž¨ 1’ 1’z 1”` 2–F #$ß ¤ õ#&š0&6˜n FMC°—«› ¾2ú5` ++j/~?òUz5Lª@(KC*ªæ1~ª87,Tb.(êÜ!È9dL0"Ø#0~qL20’¡š# „M4*"4¨06‘€8$æÊäÒ<—~Ê @:40±$‰·¹<$ÚÊææÂÎÊ@®8@>±A@4»ç s#BépAD0 ¸AF*" à!ÉHp Ø ñ#JÜ ® #LH à #N xØÊðÒÆÂØ@#PɉÒääÒèÂÜèŠBRR"ù5?0ZäÊ`ÆS/#TŠù#Vi‰MX$¦0~ŒAZç>?\Jˆ0~ðC^ âÔB`*°æÕ5 Ò@bÎFd PîÐÞËFf&‘@ÏFh"Ž @j´Fl$#¼5 %@n—Op("0~QrLuUtL¯_WvLW_UxL§ WRzL™ PS|L‹ h[~ L} oU€Lá…S‚L» 8 „S 2_†6L½ CSˆ L7@UŠL5 AUŒL%PŒ ˜! T'9BU1†¯()þ1 ´ƒ31*ü1,ð1¢‹'1 ÌœA1 ÎA1¤Ž'1¦‚'1¨v'1ªg'1¬V'1®H'1°:'9²2'1 ¼²31 ¾£31 À”31šC1ˆD)1Š:)1´P'1¶G'1 ¶+41.‚1 µ31 Ä 31¸]'1œk1žU1 C1¢21¤#1º€'10·1224†!Œ¨)7Ž›)1“)@¼­'1¾£'!?9À›'1Â’'1 Ž\81 J81Ä–'1 ’;81 ”$81 –81 ˜ø71Ƨ'1 (l?2Èž'! šÿ71 œî7®'! *|?¶'1 ƨ41 È™41 ÊŠ41̾'1ΰ'2¦!а'1Òª'1 Ì›41Ô­'œE1Ö·'18˜1 \=1ØÀ'1Ú·'?X˜,1\,1 ®fF1 °QF1 ²=F1 ´(F1 ¶F1 ¸ýE1 ºäE1 À3E1 ^w=1 ¼èE1 Â1E1 Ä!E1 ¾áE1 `x=1 Æ E1ÜH(1Þ:(1à/("_1D1FŠ1â:(1ä/(1æ( e,PŽè@’Ø@–Ð@š°@ž–Q¢¤ð' €@¨V@¬@°A´þ1¸¶0¼Ð@Àè@ÄÐ@Èà@ÌØ@ÐÈAÔ¨0ØØ@Üð@àÐ@äÈPèê@ìî0ðð Pôö@øúAüþ  ++°@BO ++b` 0’%@m%P@0 ˆ @$`@(à@,@0¶@4˜P8:@<>A@BÒ' ÈPFH@JL0j @P !è˜'1’f-1ê”'1´ ++1¶þ1¸ó1ºé1¼Ù1 bÆ?1ì¸'1î­'1¾ê9ÀÙ1»1Ä¢3Æ—H1^/1 d ++@1 f@2ðö'¿1Ȧ(1Ê•1Ì}1Îf1ÐI1Ò31Ô1Öú1 hR@1ò@(1ô5(1ö,(9ø%(1 jk@1:t ++1Ü{ 1Þa 1L£1úB(1ØG1Ú51 Îà81üT(@ lª@1þV(1Q(1L(2<À ++!`§01b¡09d›01o(1j(ð ++1@â ++1BÒ ++1u(1”3/1DÈ ++2ܼ!F¹ ++1 ++ˆ(1H© ++1 ~(1 ÈIP Ê p!‚(1J© ++1àI!1â+!1L¡ ++1N‰ ++1Po ++1RD ++® ?Þ1àú4E1T  ++@ .(E1 0EáA1â1äÚ1æº"š1êt1ìU1 Ð:1VÖ ++1w)1î_1ðO9‚)1w)P Ð @)u)1g)1a)2X !Z)1Q)1 I)1"=)1$1)1&$)1()1*)1,)1 ÒJ1.)2òà!0)‚ 12)14)16ò(!8ï(1:å(1<Ü(1\“ 1 noC1>á(1@Ý(1––11BÒ(^Wô;1ö"1ø 1 2 G1 4öFO 6æF1 8ÒF1 :¹F1 <™F1 >†F1 @vF1 BaF1 DOF1€v31 ÔdK1úu1üf1þX1H1>131)11 ++1 ï1Û1˜Ð21D*@ ÖÃK1 ؼK1 Ú¨K1 Ü“K1 Þ†K1 à~K1 âwK1 äjK1 æbK1 è[K1 êTK1 ìMK1 îCK1 ð%16%1/%1&%1%1 %1þ$1÷$1è$@á$1 Ö$1"Î$1$Æ$1&¾$1(·$1*±$1,ª$1.¤$10ž$12—$14’$16$18ˆ$1:ƒ$1 "¡KQ $ h<ƒ$1JË,_71lW71Í1 p×G1Lå,1Nà,1no71Pà,1RÌ,1TÅ,1V¾,1^C11XÇ,:ZÁ,W F FÉ,/! v-H1 xH9 z ++H1 |õG" ãG1 €ÌG1 ‚ºG9 „¥G1 ˆG1 Š€G1 ÒAI-1 ¸UB1^B-"<-1b/-1d*- 9f%-P r X@ Œ "`4!j5-71l8-1p¸81n:-\1dM1f89h%9l1pl-1rb-U1‚¢ 1„ 1ts-1 žbD1  PD1 ¢CD1 ¤3D1 ¦!D1 ¨D1 ªD1 ¬éC1 ®ÚC1 °ËCP ² ¨ !v¼-1x³-1z®-1|¨-1~¡-1€™-1‚‘-1„Š-1†‚-1ˆz-1Št-1Œm-1Že-1]-1’V-1”N-1–F-P º h !˜I-1š@-1œ.-1O1?1ž-1%1  -1¢-1¤-1¦ -1¨-1ªú,1¬ò,1®ì,1°å,1²Ý,1´Õ,1¶Î,1¸Æ,1º¾,1 ÔvC1 ÖhC1 ØRC1 Ú=C1 Ü)C1 ÞC1 àC1 âíB1 äÑB1 æ¶B1 è¡B1 êB1 ìqB1 îVB@ ðAB1 ò-B1 ôB1 ööA1 øàA1 úËA1 ü·A1 þ¤A1A1{A1_A1DA1/A1 ++A1 ÿ@1ä@1Ï@1»@1Ÿ@1„@1q@1T@18@1@1 ñ?1"Ô?1$¸?1&”?1(q?1*_?1,M?1.1<Ø>1>È>1@»>1B¯>1D˜>1F€>1Hn>1J\>1LI>1N6>1P>1R÷=1TÝ=QVx"€!ÀÚ.1ÂÔ.1r ++=1t=1vþI+Q@¨ €l1‚b1„V1†9&6!$‘7&‚ˆ‘1Š…0ŒyÐ(p6T[#ÉLè¤æ LTª7tTVgXræÒÜæàÕ%5´Ç06V8$ÂØ'!W5ÒÜÎV6^3@ÚS‹íR4X ++' l$DÆèÒÆ<& ++ÊJDZ\@êÜÒ 7%äÞ£‡HÍ3^À@' ++B7©BÊðÆÊ’4ŽXK‘-æ`ÒÞ æs)`p$d6 ++ÌÒ%k°T LPBŸ•2à #gÆ$§²VîÍ0û¦*!ÆÁpak qak ÕsµsD .µ¿õy<ñ<ÀȪ/@¼¼ û¦Ä*@B`HAz,=è HàH@0„â²È m‚¿Æ` ++m‚„ˆ^®Ž•@au/žõÁ+ðýv øuƒ¦ôu’a¡Hv0^)w v½vyv&yvyv&yv%w†%wy‰J IŠl)wåv)w«¦/ 0wV †å!¼úù¼T#àù…žA†_@å)w8.àÿ‘…Äø_.¯ÿMu)w •‰[(`K(rc9Ÿ¥4 é+§.Ðþ`9`N‚ Hµp b½·ÐÚ¢¬—”DûLàd;àda‘å@¯2ŠÑ Oì…Âa*VA ‘åi«äÄqóè Oà á ¹ªãŽu§P@†åŠ?@ áE¨òã•cq"Ùÿµ¦_‰àb .]Ø´âó´5 ¡t Z`,ë#P_qXÒb¡0 ++tëC8BRñS ÌFQBU·ØÿäD´±Å¯šs%pÁÅ©%0•åŽqåŽ-äx/d¡ŽV´¡Ž ³ª/p¡Ž /7¡Ž/%¡Ž/¡Ž^Ì0à„Ô/å ï¼ò0¸ÙÔQ ³ª£<8À ‘îÌÄ#S¾pºqk½põLHe¹HØÄ‘î@0 áTOp áNÐÙ-R©w8Kg!pñwS úd¿žQ Šdg~ øº5Äy"’Ïõqî@H l%w/f%wÕ/f@zh(TÏLYdkØdk¸ÀBj *Ç ´6q2 ++ —b» Òà, ?ky ++?kŠ7kæ7k-7k½ ´ @úß kIrjkXk SA¬HSRêh’jUq lnp+©$h2¾ešl ++ G ++ÁjBPXyX ++1F¸0rë.Z'ö%á  %(«8еX_Š&@$D$D4r6$6Ag&#kæ’ Ø$ ìÂØ#¢Ð4ŠåŠå †½B½šœÀ&1[ ++Ä´$aæPÐ,z‘߻𞮦¾‘ ]ÔÑDV§šô˜!1ÄÀTPP 1 V”æz /…öôXn¯•¬†¯1$0ŠU 5(0ŠY¬, ᬲ’ Pï # ++€³¢0\ ’-00ÛÕMÙ )WŠ:  ʃ ž’á"0`o b* ++@ l Cà‘å&:Ñk ¬Å4%m ’ü?Õ4§#4ѹ! !@”¦©¿oXô?pšPjð%ø Y:\䲞`&” _€å$šp ++lðp  áT l g¥p‘ ++0‡ånŠ!à‡.”Q à‡å,쵑‡å(àšåà‡„1à‡”Qà‡å8‡ò  ÒÑ ˆ®ø"Á® œ *qœ"Á®ùolMÑ dH*Õ°Ú .Óþ<ðB²J*~Iò,, L,L 4o Rt]§2¸ ;HRDæ~®ÐÅ?Å%0žZ¾3¬ýÈ* -“ýÈ$’¾$“å(((!0#Òk G£DàžåÞK÷^p– ++ .ÑúÝ^ì7¬?úÿÿ9ôÿÿWÛÿÿ ++ï‚ +ÁÆ&C­Ý" á ô¾Gžåæ°PÉPÚv²4t 9ÎŒžÏ" ++Aºtc«Ù x ++4° êedl©õ !Ì(¿/ó­u¼O®D“åàÂT¾ÏT¢ p ++ÂBv40 üzöÆ_¦) žZ°¾uÆ°á10(mÆ- ‘(Mö‘pŽW' ((ÀíCPá4BT¿ˆˆn ¶Þ$“åÜ ÜÏÌ÷ØèXÒ‚+…²àÙ‚Ì~nveǤ¶jÊ@Ë‘.pXbv5” .ËHêZ"vƒfªx ++(¨Þ®Yªtƒ0[C!(Û¬0„„êÈ æÞêäÆÊZîäÂà1„Pzà4Ã64Ã0EÈ2’å-¢J ++ 0’„³¿+™´!„½‰[ ’å  ˜÷S @†åLÝÈ ðìb –ÝÙ„,Q4 ++U¸ K½±PŠ.Äù"|ÈÌ ++öàµv0” ¾Éò²F¹@0“åøaÝâk‹‘´Ý×›ßõã1 @yÝù™Å}´-/E´cõB:xRz F¹ž" ÇÝ ÒVÈ”¥êú$ ß‚¹0i¼1à”jBRàâ!Ò ++Œ2v ++ι@UÍιÏιí,ÓºœßË‚MûFMû/@  O@šåÎþŸðà6ôâe há8ôe£ôq0ÃãSãþÆa0Câ Žþy€ „â ’ç0 }8 #@¨ ý½]'Ýà@°á2»Ÿ¼Ì .­4¹¸ –»TMªOõØ8@?@/-@Ø!à”j×âÊÖÉ RPý10„/ àP+.É “ŠžÌ@ ”å< X`.AxêñP0zãµ6(£Ó—R ++zêq8BzÇƪÀÔ Òh q rzòÓà' ++¸O%ªOcXB|Èâ šB ' ¡:|@.x«¶1~` E¾¯ —ßä_§8›'D›«\ ›Ó—óm}go‰?„å ¿,9¿ÓMÌ¢1.°­h™ÿ­SŠ~­@–Ò%|³½.Å‚± w š‚%Žq‰ ¼T0? + @Ù u ò7òsë10”S¿PÂÚ= 5.:Ãç8/@¯ ‰¯ @¯ ÉîÂu0¢ëÖ! ++@æ@Bu P ÔÞÒÜ: æĽ" @{ܘ½9Ñ "0u‚¬ä/0ª…R`²[Ü@u"öÿþÄt$äÇ"0<ÏÕ5Ü _"$ áìä/iä7Ý@¼æÝÇ 0^èÍH/L,)¼½Ä¾L±6â4¼$ ++`¿º,m€ Pd¼Fj€qÙ$ ++8(€B*‚ôYº„Ø6°Bˆ ðÂ$ Óí×'mÍíלìpjB†ÈDh Ò½(—$È’IÍ ¥Íë ܸ±À’d¡wb† ++(`¾BòˆçT/`B6¸ 3(-ú@ ++ˆ1 —¢ÄO p—å‚Ùñ ++?$³6pô9 p”(¹o'ð¹WÆð s'æú(ôYðÕ,¬Ê4!0”]O—å”q”!@Š›"l8!à“ÂÍ[Ö°*Ã!¶Î ÂjË jËÜ5ý I ""Ϫ ++T  ©tXfþ”`ÿ ø®',# E/U  ÈÏüÈc/È/™@™ÿÿ ++P®‹2 #(J / Í°ê^šåÓþ,`ŸâPªBŠ  ð ϘTíã.&‡˜"r÷[ÆG­0$0¶Ø›½/G/½!@’<òxò%”*,^á$@*= Ïî (0«Í“«Í«Í 9@“åÅä 3Ûê“°S1™å <ä³ “ª àãà.àU#º2@—ƒÀ[.1["0_yÏÇ\ !”= ”Aàã”R”“”v²B¦Hƒ¨ f ++0! ++RÄ|6)Š Ž1 ++€Úؤ EzŠ¼%DŒ€,ËP*XË#‚ `€Ž põ€H Âè[oèˆù õÊËGâ 8:üÂ@¸Ë5 6½F j0ŸhŽ0yQ &@êÜb@Ng}:Ú @}. oÜ(H L¤P“4@ÞêèZÞÌnI?Êðèš:à Nš5.$ ++P##¬¨'T²P Â’¶å8 b’Ø#x˜ U kj&cÈ ++PGÚ|á™å0ŽâADä C*£.$6_0 Ï.&”¦2à‚á‘!à‚ª&è´1‚Ïì1à‚ _ ã¨tÀË V# ü«/éø÷ÞÞè µ˜‘ /©‘ Ä –¥ ÆB øÊD(˜$#1™JRžåበP Žâ0Þ´Ô'3û 3û ¾3û Ž ! ++ê–0P'@B”à(Pà(Cv;vü#1ú³åÜÍì`(«ÇJ  /”µ!”ë`ãTã ÒÃÚ³_Çf °—å°o.pW?LàOl;È Œ õ3tÅÖ¾HÔÚBÄ I  VuáN$@‚"  å‡'„íAB‘åBàâôà ++?/-ó*'ó“ë¡åGÚ" ¤ã " àK a ++ìà= ++u`šåð:"ÿ@ò ++ Ù/0Û' [¼‡'ôÞë @àåpžåH eHîuX"@\u1ºµPuTSÜ? „U¸*®o(˜4,,+”ÄP¿ ++"ŸÝ( (0ó² ++? š8k è|† [pšåUŒ”Œ.c RA0LSŸ,û) ,.‘,f üXÇîÖ%@/(@#"@háÍ1¹þ×Ô$©È<,< ’Y,,<,È8< ++,ã H< ,<,ãP</—<†,¬SZ(L/@Õº [l¥ÉÆ"0?à$D Ð n\í8"@Ækð 5 +a P4Bâ à„ø¢àâàå0¸8*à8(g /¥.Sþ¤3Š ++ù¯ù¯$Ê1àË*è€ | ­ èô8ra³ñ LL°ÙRLó-K./AK.ˆ?Éÿÿˆ9Ãÿÿˆ_Ýþÿ ++¾Üô&Dÿÿ?Gõ Dt 0ýD/[ý SJýÿê%³ü 4 .é X ³û‘³&ôü(?âüÿÄ 2ÜüÿÄ ¬Qäüÿ ++×8­ - “8 È ‹ù“‹ùÒ#1“© êè™-´ð n¨Ý ôÒ#RG˜:Bã-”é&* @àâÙà*1÷à ß ++ÿàâ^ã49è<8œAã6ÿ)NNSãp Sè´@@›?ŠÌ;D/aD3/©D;/ùDE /4Ds/á< ++OÄûÿê %ÄÀ ³$.…Üeí^•$'ö'“K5 _ˆñl©h"à©à" h/ûh.ETÙÀ‰3îÊü/`hʨfbB†ç': *â:”&æô¼  à ÆÐÒZÚÂÆäÞ€³# Ûä:ïE­;”gAB8G/p¶ëG/ >8= `ŠM,yr8e`Šå šß mwA`€å ãú6nŽåÓ¥e‡ 1à ãû@A. p(VÝp(F8 %ç à [pUS§8Hp áŸ@C"0P& [aàâ^ ¶8¶8w²8t p_ùpÏ$ùT .ßÿœÌ³£”B€(B8pßJSö Ä»*Õx»€9šÀSpLbÿÖê–˜B„8ž) AÔ˜ #p äÐÞ  ‘Ûû1Tã‹5ñ0Šå$ŽK€c#qùö²B *ø.}ö Ùìg!»léllwn¤3— H"àrCÞõ ÚøànC 0+"SÈ"0+"Ün7)YþQRãTp7k(O‘æ1°‘ÌÛÜ,Ìg”Ò6Ù'FÔ{íˆ6žþ6XA |2cÔ7 áÎ6v4öx1 ’–´9úšMš , ';%,”äT!Kß²40üüœr’TIœâv!ð¤" \ U4UT 0žåÆÄ!;‹+C  ã " ++Üÿ"ü u‚ø4Ö SÉ  á_)ÿÿê(äÃàv / h jøåh"³*" ½.Lo+îù+1°1  áß+Kàšå±„ „Dí’Î ÞN`/Õ`/Ñþ`Ä *9€¯$y+8[ D ++“êH+µ¬#ªT0$Ã' /!Ã'PFðhh/qh ++þ1’ @¹˜12G*G* ,¤!ô"ðô$TëÞ ÚS) tM“ .­øp¹¤iÿÿêz²–Ì;! nÚ–P@ÂäÎêlß";'@Ž¨@Òæ@ÜÞè@ÂÜè"X6@J0pæÊÄTK$öP¬B  ÖÌÂÒØÊÈ ȹ" (1R5ë/ ‚2ë ê#ƒm"Ê@’Xì0ì1!+("ê‘X DÜÞ@ìÒä£@Ž%„ÒÜÎ@ÌÞä@ýç0@ÒÈò ª˜mÃ7H`° CšÝñŸ˜8 FU 1ÖÊòH>¨$4’ž 蜘=Ú'ýQ&Wãñr—4ñï»JD “åð†pˆ=8!3"ép„=¶/ >ÜÝ×—0>$b$R$L·"DR¤üÐ/YÐ^ò!—ä¥=Ø (=Úq å0%  .î„/ ?/¸O šåÚ/µÿj‰%7L\A6 5ÕÞQf †å 0CHóF-’¸ ïø / ø Y1*¾ °’åà›å®à ++,,ÎãŸG @#É÷†å°†å0†å †å0ÌM ãÌ< @ÌÕÌ  |8H02jÔ€N*Ð*žPFHLûOPÀîZwN@z  ø ˜&-ÐN!à—ÚOÛÓ37 +uŸOpšåèË3T‚Bž—:B ©:! ++X4`wòBž ++8rõß0¢4õµ B¦ »:" ~ ÏSð ++ Yë ++¢<sIC žåö ,? “çT@Ú*D@ žå BÐìZ­ñ2 Loþ Ø;,C5 EQ’å à’LEÈ"¡æS “åè" Ì? ž¹69Å2 *!žv ¯Ø ÜX  ü Ü –í\G  áÏ!üè"’ÜÜ/ÜxD z "F  N?  ã¤ ¹¤ 4;.è”1 “CN/@â.+ ` R®äÔ Ô”@Ø ðhe;¼ ɼO@šå»Î ++\Z E2pÿÿê4²[W`¤DùS˜B \ ˜pB¨ ð  ¦K—؃*çS%Ò8SzB¦Cú¨`›úIªX÷C¬0 ++®© ++hÙöä°ä‚°ähz:Ã@¦?$B@b8 à¶àB²  ðµ@00 áÖIò!à—\2Á> ++ à—å —åν4 ’ç¸2Wƒâñ&€.*à—å ++JD—妽44/¡44Oãÿÿ ++†"pKÕŒ†þ¾: ++ ìd`Ëÿÿê Ð?—å ÍÜ/}ܤž7rH´r OŽârS²r´r\;N?KI²l ÂCp@¬8¥ !XÈ ; Øù ¸As¬§–¶(XÒ<8êXŠ˜%Á/`±6 ¶3*hw1Œx x')¸º2t #r ŠUò0Bº  (äÊÄêÒØÈJ*ƒ B¯d-˜Ç!˜B I&¢ If!IZ   ø?ø@Œ9O-½P *W7 ++@ 9I ódàu»Ë „3 Ç9ù/@ ]„¦·ŸY,Œ­J7ÚUÖEÉZa!ÝÀ•J‹Õ› ÔÔÔàA ˜5"à”S!0ÎMJE:¨å@  ãcP<'q„âžç ^U'É5pP+ÿÿêüN Áàü"0ÅÌ>‚â€ààý >4‹å ‚âÙ¤>4 ”Œ ]˜ë!"@sb “ ´øC0 á»K&ì‡.ƒE×fÇö?*^ˆ/ží €!°!€ O áÖ_böæ”´œcwÀ– ++p`x ¨\-x‡%"‡, ++ 6%h½¼îI(‚% j³oÈÅ¢ðäÊ(À(Ð ++ÂØÒÂæjƒh(ô,‡ßq(Ö0æZÙZ%(‘UhÔX ÿ%!”!‚- ` ð$ÖBL L F¾ÒÈÀìÂØBB7xHJ ++?ÿ  è Ú¢: L5‹ÄB&’o¾À‰ð ++ÂúäîÂÊäÒÄB> ++Q P^`o WxB¼+k; Æ/:6 ³a@z¨@Šå¬"À G½ ++"mÁDX ++w;q àŠåœÈ4L@ÀŠåA%j#Opœå¾ ®‡;"6U&¢ °šåÀšå0Q%P`šåµ'Ô6—;tâ#\Åá1 œ¨*Ìu +euTp, P¨Ü T <,9gdkaD,_Å hL,/ÈL,·,¼xIîB_ëŽã ]ó,hL‰ `‰ XZ¤kÞ0ãWl+< —å5*L1 `Èo½O1 0„'a}à„å1™-!Y(á™åùPœ2a—4,œQã)|Z—&&@ Ù  QEî ã0p™ ½ø 4&Pà4 …NðÕ ++"`_0 ãÔñ­ô¦P- çjF*¬-/ Ob xl Ü6 /ùÜ6 t}¼0!™\ž´ t“t0tPm4Õ p ƒåàƒâý÷¼8ƒ‰KƒPtìnìkìœ`n‘éÀm N ° o à„å0(ÿ«™<’5 x`Ofÿÿê/3|ut4§"' á™ _²Ú€õ€$©-`/ d+Y d•T "*: / ‘N—/I ++‘N³/ È/‘N Ô•´OÚà Ð/Å l// l—/µ l³/} lK=T4 ”åH/ =T*­$ =T=T’=T' =TO/ÕX+=T!/I@—/õ@³/½@;à/9Cð /Aü *0üC€ ÔÐ /áÐ.“û< ++.Œûš¡"BÄèY Æ\[€Ø ç` ¢9CÊðàä¡9„À á° á×suþ%U ¢S<.Ò $<¯.ú S74, ’š,!™åª40Ê y9 isøMRã_Uœ23WU_A ++ä ° ° @,|° “° ›¸À ˆ+n0¬`;R㈜Tˆ P™*Ü/À€î5 €Zä€| pÔ À- e}µR3‚¨‚<Ä-“<.n<Ä/“ÄÄÄ Ä? „åÿ0Ä ÄÄ L|jI._Øp ìIÐ0а¼ø °x& D ž[ Ü)À¬M çm ¼KÀ ç||(Á|.p.Ø µ¸ž Xð@ PŒ ++\? áŒ /•//ÙÀ —/… À ³/M ++GÌmâ=RÀŠå°d1/ 0­A j˜á ++­A 5°šÄ ++K(.ÚŸO.ÿ¯j&Ö¸T†6.ñ¬\!éì6áå"Ê` Ü/À´ €0 ´” ”œ”'À”O/9 ”_/­ Ô—/YÔ³/!Ô;À/¡À (&*6|„/ÐjqÐÌ'ùgÌ-ÌÌ/å #Ø/IØ!`ÌØB8<؀ɀ,/,O/u¬¾,·áq¼^pÜíÜ€$ŠH:ìè@²CÉÂ5t,m> ++Ñ=Sô‘ƒà`\QA%ðZ‰×M\Ršå0“ Ss Ô4ä ¤,õ0h/îàÈø%È W4P®“„Ü Ü/u&Ü %Ъ”\ÕÐØNHì8„„ *Q'€˜T8;8PZ.4 4 ÌlÜ+PÜ+o„å „( ð<ÝË€•h‹Ü,„ô\ÿÆÜÿÍ "4ýצD9 ’Ü #`G´’´jø)6Ñm ýllÀ‘ÀT/…6p ­@7Ü&L ñl.Yü„DRüÿê°/¦h àG¨ pðZ$€¸7€ ã=P`œåëâDÔ0GŒ0Gf0G^XàU àJ  D/ À€2øø¶¬/¨ÿ :’èêØ?ÿÿ4ˆL4“>z`±ÓXÈNö̈HTàäÒÚdT€ h.ˆ Ìh Ä ++PiNà8ŠB (êÜȽpÎÜÒôÊÈ@=@·OcP@PAfT 2# üã`@ØÊìÊØ+2Tat8D 2!8êì@ ä*@( X±1M‘X ®¨¤ ¦`°8ÐgMÑ ²Î HèÞàZn]ð¯! 0â / ++8 6O1rï±Ø’òÜ”âè’@[Îf'g‚Ò ˆ ,¹X`ÎØÞÄÂØ|õbÊäÊÜÆÊ"ˆSVÕ¢Ò0Ô 0@èÞ7UCÖX!÷ Â@ þXjÒ ++0›P¢Ø—Tf ÒÚ~ÅXcPBÒ)#š)3ZÚÃ'8†"9¶í4j&-GÚÊèÂ21n@ìÂäÒtÞ_8Òh¸W ·“UÞ é“*:Úÿ’Š“ÞŠ“1?àa“mW›a +ÚWæ8‚ÊìÂØZîÐÊ,1„%3ŒmW3Š$ z;ˆ(˜W–xHÚÞÈêØG`zHÒÚóÅY|Êð0~(ÎoSþZ0€*AÆ4ÒÆÒæDtHƒCvH¶Ç1Ž`X—(ˆH€ä<–%?â*–ähGähI!x&Q?ZØ|7(€L36›Z Aú"0"( bU @à¨4äÜ@³œRæÒÈÊ@{@¸W&EªW¼æ9Á‘È àÂäæÊZë° ++|®Rv®ØP ++¹ |»m ü^v<° ++ ”å„S¸±\q4/k\#p €……I¼C@ð±ð± hÎvÀðjH$/½Hl`HŒ/´4?Ìÿÿ4ÆHŒ“ @¼ÿÿ ++¿¨¬¾€Œ¸€Œ@”ÿÿ ++ ++|$À.ÙRpÆ?&z]xƒ€xÁ²(Á²X¶B³.³S Êæœ^ 8Gt ++1$ <^DŒu"ÈÊrù'Þܲ&K²PˆBê²2¨ ²°\ –6{ ”&–¸"y§t >Qáwz ++( z ++TEʃ1Â/àž† ++)O €åu3±¢|\ r+¹r¬@+¸ œ&ÐÆ Q.-°¸5‰Æ ÜÆ ÜÆB ˆÆ /@Ž/˜Còu<ÿÿê,‚T ++I o¨Bþ}‚þ}HÑ ++ ++(À é!T B#g¢$i!!îâY R$¹¹°§Ÿ§¹&ó>¿!s{ © m¿!$!¿!K¿!E¿!$ …) ž5P%Åë ++Cµ!Ç!HºÇ!$’Ç!$e .áPsIÇ!sÉ! ˆÉ!DÚbk*m™ 8 &ƶ%} \K@¥Äß´ß´$ˆÄ÷ÄñÄ$nÏ#0``„#0’xl„\×3€<€1 ë,7Ý×Ã- DÊ=hR0€å dG´ŸIC´êOa ê3Ö`ñ o’ ä¦ô3" Ú0¼?0i(/aì!ìH K JTDT|ÿ'K#($=¥ñ6/™ ++$  ++»Eì‡ttWÿÿ ++|tytsp_æþÿ ++n{.‘T¤ùSþÿêH;( ++'ày6H ++&ˆ #P/…s0B_„ð¾ ¼ ÊdQ„F„ ¸„ Â QŒ„'p¶¶ž& ++0[7`† ++/€~‚T:‚o2*q2˜ À ‚)õÌ ½T£¾'#.y¾' /”g/Ž3* Ø%QšÑS/“àNàHà$´¦®ôŸ ¾"žõ<=<Úõæ7”ª00”åþ" Ž ªOÕ.k‚¦ï+ >9u#3Œø ++ ¤ T[¶Ê1 @€ ++vPŸÊh§H3ŽW®A`š±`{’‰€K± S ¬h© Â0Ü*? #jw7“ ++:æßÀÓ˜_` á¹» ž0„ fð˜%.é˜2p\hVÿ$×'rW +•þU ÂZ´*/J-ÜG /eG ËG Å×@©ÿÿ ++p8v8p8W·þÿ ++k8/‚þ8*|þ8oqþÿ ++wþŠ÷Y?4? x-þÿêfŠ+ô,`©^ -\ $pT PhB ++\á` ØÂÚÄȹ8Zˆý(±ÕH*è[˜øZ)³3âô]Ú Û!’LP& à:ú /0Ÿ" Ü:?¥’“€?ؽ‘ˆ/ŒY„=Ç$¡Ö| ++,€¬P¥ p¦Xå 2Pú)pžL=Wúe€ 7Rãad/d)|X”¢ÕÛ|Æ/ 𠦄</U<×`¢Ì©"@¤¦c„Ä4„é?¨@' ” Zí”Ô?¦à,¼¸^/i9݈% /å Î?cÿÿ"$À˜_¿ÿÿ ++XŽpöþÿê0Zk:˜óˆÛ¼ÚEJ ++Í 1xš‘Ûc Â$P[ç 6" ++0”A ' ++hX#â4™>(›,t '| @22ÏÂäÎæ ¼ 1'_66퀾8É”@g|-]X. ++H¶EU0b%( •xæ L?”0Ï?jå÷ ê˜¤•TÊùõs!*/w ++ì;FD~>I&yºIPB)2° áË>_«#šÜ!ÿ ++¿3û›÷»Ê" Ó› .9´)0.Ù´) hh á.EáôØÜ) ßw2ÀvÖ;.ÍUPN‚Ö;–&_ÈBž.o)¸HB 0¯"?|FÚ6º%9³q³~ÂìL½L/÷L/ LàL ULÉL ¡L²íÌÆ­Ïî#§Óf :¶ÐhtŽtˆtHotitHPtJtH1t+t@¢¹Ú )4—%!à Hg³”uV ˜-\.ý\Êb.ÃþO2`‚ ++ÀÆÞÚàÒØÊ, ++lB3ž>f3ž Yž1Hr?Cž EP8Bo+x ÌäÊÊ*÷ªM%  Zƒx eN„ @ 0š2 .u,B ÎjL–?”å`à®   d_¤h3Qãïæ0^ânÚ[¢\Ì4 ÚOÌ4æ ª·(/ ’(xî ë70à á”¾ˆ/ýˆîSý3‚# õHHHˆ À÷ð¹v  ++(I"(ø1Èï0ã÷, ++  ++/XH `0(@»T(È ++ ++ XìT8XHù $ 6( ä d@æÒèê €9 K b ya @6v ++ 3­&Xf , ++@”“/T ²› {ÂÝ'@h@` € ® |„ö  R ÈÞÄÞÈòZ°ü&^\,f4qÊXgB.TH —åj¯yé ‘PgˆƒšXeD°šå†¯c À—åÀ28/°Šlý¶°i@W “å{ñý!MA ++Nõ¦ õ¦ìTwȺ /ÁÄšâ “(l#ú~‘AJÀ.=Ø8ªñ8ß)Ú1Hš³`(B&¼2Ð UV@æÊâêóK+‘ÕY ¹^êj%2©Y/©YL ]T‘T  )a -0„ÕŽñ ¸æ80 ãlúâð•ð[õ/0¾î/Ùúâ `b­¡(b @ RöX HÇS™p Ä8 –¾1$UþSØÞÞàbó¬!@žúXRvp?è éü¦  ++G²Â /˜=)ve3SãúÀùj Ä…ößà·ï ++=¡ ++ ðàrXîïÛšh00^©³®”>^ã¹ÿÿ ++Ð"q¹e³ô1šåÞW³ðšåz"àõ dUV3ÃUâ$VC”U%`;&Cò8/%Bë@؃J8­TPÑ­T/(­TQ/(ERP&zERÀ¨BP  è æ—ùUÑbì Â40"™R\b °—åÀB[( #ŒŠÁ “ÑÊÀaÀ†å†ð ![*sšå%à†åHêp9`Š‡Ïü "œ·I ÒaNæT%/)T²ª¥ª`!bo‰`°6å°è%&®Y¶ Û0 -pÜÆ]a0‚å p‚" ++æ§ 2²*4ê"p¨#†4—Ñ ÝóIp°#Ž4PH IAB:$E/*­)GE# À(@7øè–N P€D(ÐÑd^ŠMD(/pvt è+õvtüú|µ—å%—å! —1éL¯K*µ&.p<<%Yê£./@1 !1 !z!(:> Ä ¤ø¤¤\.Å\b?% —Hä‘ ++HM4à—Ja@" à¢]Š®aT4X@08¥8Ëúœçí $ŽÛº$ î('€fax¾ x¾1 à—ÆãÛíîkd îös3‚åîH3‚å #î|Sà‚å +î`/î ¬. ²zNn&àGü*@ ++PHz ]í6Ãë¨ ²z"pt2/à.…à  2"v¤ ¤ 2T³N@ðšA Œyá k]"Úì4\~ÃØ.Ô¢*›V`'ªk!¤¶^, ‚,¦ð( ÖÊòîÞäÈB.'3X "QZÒÈæZ°Î!:š@*ŽÔõßà 6àªÔ }1PÐÈ 6(,&4²êè0c/åe5^? “åt'n-?“åÁt'ŒÊÓ u& â B(:‚ ++5ЖM+ ŠXѨe”/y”ˆ4ÍBäX/ÍXƒ/eX4þ €'­ 5?¨ÿÿh¢þ+@%ÿÿ ++k¤¤uùþÿê@ÊÈJ8x'aË%pp ++ ÈêµR?ÂèÊþa,¼U @ÒÜñ& $9;øOæ@ÒÜ ++.@ƒöe ¹"²šª X õà7!0— ++úààã "àñ¿0œ³ñ¿ 4R¢HJ'(« 2›Qƒ8 "ÚÂÖÊZÔ|ZîäÂà••à !’ßFDO&*W£2…½"0µƒs žUÑ[QãϦñh±Ã0p ãÀx« cuGñÓ-‘-*L™·Ý" i¨ó 1ø<™yÙÙ6Ç6ÃÉ„!­…pâà@000@p‡âOHŹ4óùî" RX&ptc ++éD®Y" ZX"ptÛ2XXÝ|¥©K ¶ˆç ++ ±Ç „Y I'샃Մë = ’)  ­vzÁ, µ°Ò½ˆ9 àÊÄ ÊÄÊÄø› AAâÄEâŽÆÄ>ï` *Å`¤ *Åp%Q†âp€d_`Šådî  Ù‰Æ<%0š .çþ` àþß'C †’@X0]02g€. ++pÊhÉYX”E¶ z2XF ++ðuÀÈž-w*2 ++0žÄpB>  "Di’ÆÞØØÊÆèÞäòb2 1Kýoà„åaòH šÑ÷ÂB<   ÒÜÜÊ䧙m¾Ež¡ mº<±†¦0‡å ‡å MŠ× ðý± 3)ÙãÝ Dò ++ÊB4 ¨ ++äÊèäò(Î*p.oi` 0“å W‚RãÉ ++ 0ƒ_*# “sËÇ ¸" ++æÓöÕþ¬&àb «9 œUkLj‹!úšUÀß ) ++ TªÖ@I@%0ÖÖ'CÎÔ2´ > v  z 9ñ& Ê2\/ @\.9X,D$ý†z1Žâ âs¨ß„ ++0Žç×x q\­Î  Ž;È;Ì(PY®‹  ºM p.MD<âØ  I -,}&08kʘ{Ey(P0Žâ`|á• ++>*#h40‹å ,h ‘âÍ“ÍH   0xÝ ¥¾(nˆ—Íü–ƒ€lL~ÿÿ ++b**e,*P èÂÃGì €:À0Â×Cc~l0 ++? 0€|.É€Üꄃ0 ã 0Žå;(” ”Œ Ñ8¿”<±p 0}  *E|U0@Nþÿê~&ä:þÿêdJ 4ÞbRütæ@Ò:ÔMCâ'eÈœ;#¤ Sˆ ++ Z â`èÞ@NäÊ£â@èN@à ++qÞêæØò@NKÊÈN@¹Zc ö@äêÜZèÒÚÊ@ÒÜÌÞá˜s)üæe*üæW&(°8¨X Š4žvð,X r4P Â4@p[N .$—åë h* á0’ÐSXdxpx8 £ò0Êâ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZ`P  ‚6 ++ì  ++ Ü  x 0 L@”8 ++b ++Ew·!L8b47-Í tPt€Bˆ ++X¸×$Í !à(À¨ì? ‹å¤ìd( t0 ++êñPH†õw¹å~>h: hÕ˜#àV}ÅD¤Óÿ”U5 pžÏÉ- ++b5*àuÚ#=b=bÏÝ/àV *¹ÙUèÙ ++4Ö¥C ù@9x.1xÌu`Ð(Ñ5¸±€›+òJB‚8Š:H  ++ OÙRz:æ+Š!“€@ˆXª`'* ++0aFðH hÆòÆØÒÆ@ÈÊàÊÜÈÊÜÆò ¶àB °Êù*F1à—Ò 2à—öFŽ0žå¨€?â ;Û 44(4h4˜-0Þ`N ++! ƒ`˜N ++2záR ++нD ++ ++l ++„¨€BL  ++˜„N*Ù a­  9!a€ÃQà€åaã_—ã_èê" Å )pÙ D¸’BJ Ø9t«²l½&‰ó“ž± Q My ¸Ûù ++ D/¥ D‚Dt‚å‚å¡ ™  ™ ·(Q" ++Ñì/ ˜,󳧺¬Î/ÍΔ€@6 øiPè51™]2በ7< Ž7 ++êzE@PzCš;š*uš¹1qÓ3á7—å·%M1ü0¹1 k÷R JâàÛ#ë f °—å°ýœáL1Œ * ¼tÅÖ¾H3Ú!1A*@ÁAØUHŒ3X2@Œ3yBŽp°$–BîïB€ í*û3FÐÞÞÖ*IA0¶ß.r"UÓÓLË'J³ã&`a™°!pòá‘ ƒ.r/j%BOšå¿P¸¨ó¢´ ÜÞÊðàÂÜÈXþ:9o\BÌÒØÊ—( ++ñ©àäÊè8 ++X-5XbB×` BFµg@ø 2È“-2ZÞäÆPèäÂÜæ,q&Êä‘ ¡!ŽH ++†Ge8Ùp’;W¹#Úˆ2¬/P¬/ (¦…' ++2cýÍ ++À/†/ù ++JÑÐ/ ’åj˜56ŽšIÇ }WÁÿÿ (½(=·ÿÿ+þoà†åÀ ‹Œ–@Ûÿÿ ++q0J\0#53Dÿ¦ 2F ++0äÛJ0èP ÒPBH Øšo犗á´e´ì61¢M aâH ¾HhŒ B 68 Ó w²J ++('h hª C¢L^$ ++Øô¶d"N ++È2 ++ ++k@ž R0ž$ B ‘12Òì@(8¤†.CTÙ8_RÑ8ÿÏTÑ8:T ++(ÍJ"& ' ++Ðß •rÃ2 §H{%™ ++á2FÀ›ä3g›îH(´0VX?x̄჋p¸g¸f±|-&6þhf%Ý`RIT.1Tyb ¼f¢2ÞrLN 0„¼ÜLNc¸ ( /-°}ÿvÂj‚dn Ëf@õq^H' ++OY rV&'>XNÿÙXNX>9 ¥"&¡zùMÀa£“N!#ZåB0²@£P²8×ùN+qx\ Xƒa ç)éåå}åX/. $é/ç h#ÒïI"\íHí\ï €Ó/á–d("¨Ò`ÒXÒ`=)P=ÈõPL‘=`Ê_=YÄ»Q(HX€ 8; @°ÙjmPQÒO10£µ ++ G<Ûg¨] ßu!Ø|O^Hw8À˜'õ'† ŠÑAŒ !Jça`°.Æñd˜æäÆtŠðàätæÊèB*ÆôæÂbÌÆÌôÈÊÐhrfÜZfZdhËc  (Ì!"83=a\dbÂ' ‚Ü'bÜ"fÜ ! "édG“Xû.fä ÀUE™EH£uÂææÒÎÜ@Ö’¸Ž^ò ÌM@…™Èš_h0[ %/Z=)?jh=#/`Æ> 2l AÃ>GlÃ>IÕAn ) ÀËGìpìOpìL7`åE€rÔ/“Q/r;Grê@JpA @0RáØÏvGÚÆ ++0OVˆÈ <*8¬ 0óWePä*•õÖÊòHt@è.•v4êÉ•x3ìÍ•zTî Êð|;ð'ƒ~<ò ++†€5öøJ€‚@¼)X„—Jr ++†ÀîʈŠŒŽ6 ++ˆ#Z ++s3êÄ ++(þ.h-HÒ~Ðb87ÒÄ ^Ï’` ++ÞèÐÊä˜Kî *ÑK<”˜æìpŒÞ"Œ (Y€ x%I¢]”]”†&p]ó" ÌØêÒÈZØÊè?C€–Bl a ¶Ij˜Ç xr3ÄØBš `ÂIVÀ á0íO,ì7_0\ãÁÔ °²2œä!ŸÛÇ5¸ù?™<y*#ìÀùd°; ô«í Y>ï¤3šåoÜ °Rtö¯4 8é)°é) á ™et‘+ õz˜áLõP#œ9 Í+%pšˆ/@fµÌ üòwÁ×£ ’åá  $÷ °  G #Poà!à ‚ß 4³ ø)CøIC[ m3  ©+‚p#1àƒ< dã S 0‚â000PÛ¸A)ã÷ Ä]Q@ šå\lC—åÌüÈ}øoà"0­ÿ 0 ++aiEBÔÙÿUZ3äpÀŠä.ÿþ8Åøþÿê*B¤üQHb’°8ŠšzôT’¸8‚š¬1PWàM&xõ2^r  ++8*à¥P †ý; ©&†¹º"¦-¤ WB"&tL0k-‘’S‰:Ñ;/ U¤*{7k Ò!/n™|¿\C@ D"@»C8 ì?/^ú!/ óC‰< 2t&3c^Ò"ƒ$/%«C/«C ’'‰%à ?àž³C/#‡0‚­·‚ ïÏC#·C##"h8'S Tã× ÄAçÊ"à^’1,àšj“10àšºØ9 /n =Y¤8 –’*E†˜1š8àå pžå@ …@ µÂN“ +½N“x8x [˜ý@"@:» mô8:0+EÝ¿'Ý¿’Ý¿<"àñÀ: _<Ý°ñÙv*%h/0“E ++<8$ ƒo 0U^;"@sƒs 8 iyAx" ,v% @'x"p½! ãÑx"t"†.ÞïS(/ùþg3Þ.ÔþlÆ<.‹þ*~pdD]þÿêqhp + žmhGXø@þÿê^ºLB  (;(3( 9FJ +aJ4Rp!2@ÖªûñÇ'é•9/Íÿ¹šüöH°žÌäÞÄ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZd`n¶0¶0Hœ³ÚPØ ++î~áÇž°0@¨ Yê ¨ ì8ä,'@ð,Øð,ÿv¢ ++ð,(Ü#Ü#S ++¼ ýn ++ r)> —)ö(. â®IÀ²B¦ Ñp J '3ÜÂØŠS<Šå@Šå8îK@K " "*î šV®%qžå, Š)Dô¢•DD p,¦_5~ Z/È Æ9&ø»0D`ŠÄÄ㘃Àžå&° ã&&‘&tÅ&Ää™ ++(@Šå0ÎKÀ¹Ô,O@q ++ ›!ž:4Ù¢LàŠå<àšåPà‹ ¨ŸH Šâàå ÷®üÿ¥HjßK H JâH ŠåLíS¾H|îPzR51üß|I.PÈÉÿ¤P JâLŠåP ŠåTàšå0àŠåPšåTT !ÿ?PTS Tfs¶T 9Ra‹C"4ÆX 2:.Zy%0”“Z/“Z (4¶ï /xú1 0†¤"à}à†å4`Š£ ês+È¡/y ”ØZ<Xdü/ÌüƇD”(¾(¸Z)˜"ÛD-0‘,ÛDÿXàšå`àŠåDšåT@Šå\Ä ++‚ÿ%\¢\ JâT@šå<V*/X DiD èeD ;¿­Dd²cXü¹?TáZìÎP~Xi!(À„"ÀI1LšÔ"°èðøH˜ ++FE HþPX0pšå(@šå÷E'0¬À²*–C |? `ŠúV4$("$`¬:W„f–C ÒPXÉH80t%qjx¤ûD ++O á7Á!¤(© 0 ”0òo ì_Fd áÏþÿêÄPèJÀ%”¤i¤i*.10f?¬ò|XÇJ¢üŸwíXXXT‰…l+1 0‚ì00:N|'FC ? 4_à†å0¸õŽp ++hƒ715­àŽâ àã .áàp4pÔHÎpÆ(Àp \pXP ++Jw• ¨p/4 t J7Õ tm6ˆm6zm6jm68__L_P_LWHWt*¹ ++t hQB=8nY0à€â583@€+3?€åH@Zÿ- t0fD@Žâ@° ++M¨ ”0€ŽÝO@ á4¤È.XýèVa Ü·@q</hhìDÞ<ä@ÖþÿGNƒ4/³þÁ  *% H ++VŸ/ H PTã x0Šå24 Š  dûÄU ßdíŠZ dÝdS0‚å4`X`T`J/D©9Mè ;/eL#1Y-0#È È@÷eŸL`Šå0šå4x Kß?Ùt؆؀x(r ìX?0@Š4 *•¼0/L DÙD l D .Dp Lp ±4ÌLÌ/%üÌHìPX ++/ÉX ++/ŠÈ`/Yð þ¬ F›i)@š0Õ ,+Rè¤ ++¸ÕÈ,`Šåà ãTàŠåø à  ++V¿%P\ à 4 0Õkü¯}8  XžLþÁ,ó*DÜ/L0$ ^Ÿ?ýäH¤É0ORãŒN8" »Sèt .mûàN8°à /©à$ (9(Ü ++VŸ!¤Ìà"!| ÷‚9°Í ‹o5 à‹4 ø‚9^æÿÿê :/Tü&ü /ø",8bNœ Ü ‡R!‡Q à‡åD¤Q‡å ‡¤qà‡å0‡”ÄŸR›XØ^˜ µ˜ „XHÏúÿê+@7ÿ/áKÔ0Á° ´·'!Ø ! “$ Ì^_¤:0'! –'!OT`Šå¼^ÿɼ¬ "y¼1HŠd | l{!4N€| [¿E  6P"Tà€ü(À"HÐJQ—$úÿêü—‘L/ :È"nP4Šå0ˆñ0šåP0ŠåX0šå\ šå`šè  dšå\Šåhx*hÒR„ðÚŸT0Šåd Šâ, ¦üÿÿ-d`|Pd Jâdp 蘇l< ‚÷¿lS#lCç 8 [Ü÷¿¹8 P™³< [üõŸõ<" @˜$< ZÓŸ1<T$@ŠåLúQ!žt¹h Šâ0àåpžà»“üןuhDh¼²p& @lå(Ÿ"(`¨™)´ ++_’L.‹9ž44z*S 0l h| Zߟ­8 LÈ <é<LK#@ K)´ ( . $ ( ` 8,ÀŒ$QàŒå\<1Œå@@Œà 1ŒådŸ$Œ9àŒ.Mù8åLÕ”8 @ƒÿÿêˆsü ++Zh/Gÿ Ã!d  Üc“!.UþxB\L/i´.âøl͸&ÕØ ++ȳ¸@SL ŠåX¤?Tš” Zß)”XÈ ,À ++ZßÿmÀÈ14š€@ ©<\yœØ/tØ/fØ/VØTxdx`x ïxë"``Ø/.! ÿG,`‡%jüÿÿ t'L`8…ÿGX zF¼MHäØ#âØ° SÎ ++\ B³ ++p ++\Ð40¤.4à€Ÿ€\$ƒÈxD”D \¨/ˆÝ¼.\0Œü jüßÿ‘!D\o 8é (¿*$‚âð1@‚,XT Zßÿý!TÐ/=" 4S#D”4Ì ZŸ•"P \)/Ž÷\T\/%#\/ îLô j(<p°´,° Õ°$ Ø ää <.ïþ(Ë£„“/…þHL/H(.%%P-€#TPZ¿?u%x<&0@4à/¹%¼D4@šå(–d# ÕEƒ ++Dd/àŠø*!&ød.TàPXyXÀTŽ…Ž…êb¼ú|4Ÿ~ê` ˆ.È(&( È!0”°60ôˆ+‘,PȨ ì /U'ì *göÔÜ€Ï/Å'ð#0ð4h ’ -(44hò@8,'zc 4vc¬Ù¬X0hòÈq/¡)È/hò_à áú8 .V88 ++^ß]*Ì8#=P(<0šå÷cgL.”õ[k  p¸¸¸ *5+à¸/põ߃/î|Ut€ ¸Z¿í+X È"L0d$ /I,'Ø 'àtKól@  áptK „.âÿ`]¢¸H¬Ü›#ãH´ ++¬+ _ßQ-D+&>ˆ4 oTšå(HZ×¥-¸.L0øHø!/-.ø/²ôø/Eïø"i`?0Šå.tÒ2 l @\×ðjäßY/, ¤¾è °ü ªü .—nf}Mr yˆQ®˜.¤"`¤"R¤" |%¤"ü%,ø(j䟹0`,(&|&|.51|_ `“å›{ˆDÿ ¬§@™ÿÿêp ++5@š %ÍO͘ W:„ù e2p"àw: s:¸D“9H šå º¤`€ jìM2€GZXØO0;ô ++/¹2/\pl *93ìhO,šåhX2|ÅŒ,3 ˜.NóˆH1óÿêœ3þYZ)4”33.ÿòÌóøòÿêΊ ++ & ++\8 ,ºDñXÔ¤ÈÊÌÜZQJ\7 b\77<e7&¢e7ˆÈêàT a7Ф H ++æxH@ïNPr¦äIŒþE‘8 B¦‘E‚’`X¨ MShHXÖ’XᥬÐ` "ÆÐÊÆÖZÂÜÈZ­æ2äÈBš@e…ÿqqžq9ýqq"àäÐ"=O&  ãÖ= "èv_–=×" @C£ju#0^ã@0«4“Îwv>0^w+á¾=7þ?VC @ž/ê“XR)jÃ7«EoË_¦(Eo< ++;ñG $—1 mˆ ׸uˆ •‚ÝíŒjx +qÆ?@@šå…n>.B ©­…b„OävÚB¼ ²"” 4 ++8ï8XKïª ++ÊÜèäòË d';$,Â>&;Š¢ ++ØÂÄÊØ&;¨ª  BÈàH·_q ú¬8 T j¬ó¢ bÑm]®DÞPÊðèÊ sÒÄÆÂÎÊBh‚_l‚­™ž!k^rä•d‘˜6£{VÃÈ, %“}E©Ó*¹ç=uŒí|9 hàû‰hTl ++"­ ­/B¥É$© ©IX =$ y#{/”å<54 ? 0„]; X<5Õœ/¶§Ðƒ²IX_Šåoÿά*Ý4SÕL$Z…Â.h¤c¦0¦dØBÄï ï* ++( N r_®qêT !Q'øSO`°ÕzÐ ŒZ& 0A¦±q“àÊäÚÒèèÊȼR,’œïO3¨ ++pU¾#töÜ°B0ˆnxÊa¬8'ïHB®8'¦˜âg‰²âgÿ0²…O²…O€…O@@´‡åXVhV$ ++¨†4ž(µ@` 2|uH¥VŠ™ ++@85È/Ї‰¶‡ÿ0¶‡¶ijBhúQ0úQ89PHÊU0ä"?B ä/?Ê´/ ++È‘4Ü9(5RÜ1®"V\`xB¸Ã]øR W`N —åg [`PT=[`* G`0F }×_ Y€ ²†". ``Ð`/á`; nÒ-ðm`°†Ú=7ÒBfP°xû_Ó¯FQò¸(ƒÈ!|ˆúQ@fÜÞÜ“W"ò@0VÊxÚêRÞÌ@Â@¨V@âxl!~L§ô8Qj¦ ++èš8fz$Pü8UZ~ðøBº  pò àäÞÆÊææNÐxæàÊÆæIP/Q€Î  ›2Û& Œ‘GeL4’žÒ ++ @0  {v â ++(š ÛÊ÷"0‹Ór#S ")å@"àµJð» y(àµJ‡*$¤QDØ´‰Rÿ´˜1ž1 žÌH^àår –ÎÉ&f–/ãÜh¦€n rXntìÑ97â"0ë ™. àº>.ª 01!WU†./è½!†ä k ++ 0‡zÊGÛ Dï´•1—£b£à2&TÆ’‘ı!àž>åM1 “ì/@¸o X½"@ J\ X ¤AƒÄ"Üü øHÀZ p±pAšåç*8@ 8`È . Xµr\.E\_?ÿÿêéìä *­4tð'éïÅ|:ª ++è !P]P ++ºMª ++$ŸðÀ  ,ÐÊØàZÈÊèÞ Üm×Õã°¼éMé. 06 TÇ:~À„I0¶0 0b Dl–µª+ͦDlr^À†¯(>/0žÚàW¼&\¯( „¯>=ÌBÚ–"~&¡‚/àî.òé¬Ô .Q„. pFˆˆÉ°%¨¤%1Väm.–”l2é–À?áÿÿ¤2Ûÿÿ(nÿÿ ++Öÿ9œÔ°X;ÿ/á2òRÅͱüÔúR o¤+`,#I  ++!n;¼ô0ÌÞä¸B¾ ˆ;T.M/&Eg}Nq–q/*í/$q#3q\ \ ++SÙ ++ÕMONoØuÉ3 Å)›¹&vŒ ¸š$qPX!àž÷u#ùÓŒAã !D¬¬„à”åàâ†P^ã0£ ++çl.eÇŒ"w£DЩá™Ó <.å aƒç ++\U!„%.]xQõ™ yeyA' Œ(1Ÿ =&òþˆˆ_Ûþÿ ++T´³ âo5äêÜx 30 Ú|?h‰Æ=T¼P îU€ Z1``>f!€.á áàÎã<ð ’å"! á ÂãŽáãQØ^ rº B! ãxA@Šå(«s?Šå0õ®¢üµ00ôˆ"$@kZ,±.``+``$ ÙåÈO_Þ·A ‘åOlaŠåèˈ £¼QPáÅßNØ 100Š«O"8’a½888ÈNaù<8 „dZc] d 8 ,08 48 l08 @8 8 8 /åþ8 £Gröд(xf/q#x0,àð_í#ØS£ÿÿ ++•sD ++†Ûmp@”å„þÿêHe\ *Y$ðSIþÿê¬ ++¬ ++5¬ ++3¬ ++¬ ++h/¿ý¬ +++.e%¬ ++/ ,/8À /2À #îœ ++PÕœ ++¬"žgf#à“ß.0RãiÅ40íã1 0‘Ð"Iô<bpâW!pu£?V)°‘J‚3[?V$‘å((($T% ++4| œ*%'Ì"³-"à É<¸|¸|¸Ñ<!0‘T &`#i4 H%#c' &“ &,< ++_‡0°?°*ˆ$°$?ªÿÿ°&/Õ(°ˆŠˆ9…ˆ/ù`/óˆ#jÄ Øx @™õÿêü‹&½)` x "κˆ"ùË 10à#à & ô ½à$" kð=*$"d*$à, óFØ GP[”¡d"ùÏD óNLÙ6.D ½yÒó4 ¨/ `8ppK0 ZE+ Tp|K?Ê´ p¸J´ °Y8É ô´K 8& Ød 9:Ò“H ¿z°[((0 0 ¨'P"$@À"(0›0D Z¡,´\"$@È@(0šåëNaÐ& ûl $€”'0”'$rï6P @'dÔ 0ˆ _ °†å ('Q¼'CP 6P / X$ P ‘=œª0`×.U.´ùä÷W d„ ÃÐ'¶¨ (•‡<yk˜/*ÿÝ9/8 k¼u/8"š8'!Qÿ6âŒ9Ñ( ÜFˆüŒ±/…0Œ7pN +õ0È0šåMC–ÉOh Ì?ýÿÌ9{ýÿÌ„ þÿ ++výÿê8s8m8_œýÿ ++h¤&(.Ý1x . $/$/0/ˆ #íˆ PÔˆ È/­3ˆ ‡hˆ bˆ è/]5ˆ _øˆ òˆ @"wòˆ /E6ˆ ͈ ˆ ¼ˆ /Å6ˆ O/)7ˆ -ˆ ˆ ˆ 898ÿÿ\_(ÿÿ ++3 ++ýjCõ0*ïþ„Wýûÿ ++ê8/Æû8*Àû8fÍøÿ ++»û8/šø8*”ø8böÿ ++ø &úó@/ßõ@*Ùõ@ãóÿ ++ÔõÿêØ-T'Ø$?ºõÿØNfáóÿ ++ õ—ØE¿8/jó8*dó8WÔñÿ ++_x/¡ñ8*›ñ8ïÿ ++–ñÿê»L *ÅDŒ.ØÑîÿê6‚KKŸE…ÞÜØòÀ©àME› jÂ8 $ŒE5æÊèã­2@ Š-4hjEÚYh¬# \TW€¨ XXú(¦0Fð ++ÈéOsFa &ÚÒææìËÚ W ÇÐ ¯/ *,/üæ°]AX`!J€¬hÄ œ c cβN,\ž ¹àlü .MkÎ 0tzBvÐÀCă[gXXaâ¯Gp2G' ++(K¹ +*3c0 zÂS[âá†{ ÊðÆÊàèˆ/3òˆ#9ˆ]eÆ!Å20 «Yû¯(0R¢]*àå 0DÍ;I §K…BÜdÝU¼ oá*B0Nâù º"¨e,–0žçê]µ8] ¸~é+é+Q0 9­B ‡ö_0CâÝB€m, /AŒæ@9<¶ô<‹ :e_`Šå´ÿ<‹©B@ªœÈ† È ÌÜtcê¾S„å ¤\ Vö(`šâã{õ$ ++€”T=\AšÆ@`–Ê ¨ȉîÔÛ ´Öh4ÐK_ Ø4˜BÀ, $¼8+ å‚㬨%@— ¢ œxH-mY&ùÙ,.vz¬l€*/0|*^AY3@$?åãœæá3à€(,€åLAF_†å äEÄ!ØB @+  WÁ_öwåØäE¸¤©<ëq"ÿÀ((³=ZaÉÿ 8H.jæUXqpçap <²à%¾q`KàšåGà@@à á-¿‡T$ .ÉвŒ) 1,‚ãƒp.€€— ++`âS :Ê&§U`B"—µA’X³{ªÊ(-Ô(J°'ê £bËÌce‚be«­OïOï~q~Oïr~CúÌ}CH V}8A’x‰Op Eê|h|=,¢P€}·à àäÊÌÒðåPSÂÈÈZ€d&QRd3Æà@Ôi#¨V` E( ð½#Ì p> ]b\¥(Fø ++؉PÄ ++ gr‘ 6˜QB‘ (J /mÈäÞà/q² E° ÞìW#˜ ˜@/ Þ1/Ò10õ , 6w’ÊðàÊÆèÊÈ@ê?@ÞÜ«:4³4pB÷ °!‘Ê°/q¢°[ €ùŠS Òð äÊÜÂÚÊÐ!{{@h )À: £Â:Xˆ 2˜§¢ö ++  ( ++n‰rÒHÚÂàªè]Îh h fÎëh •ÈÙ»k°˜!³Z˜@˜XØZ/ ++(£ ' ++ \r ¿a XV!ÅÛ *§’Û p„€VÐ|/Ïr|%-ÕÒ|/Ù²| 7ÒvÔvŒÔv/åjv¬v)/ñ ++v[!÷ ++v.Ù¢v#†2X áÖ0BØ  0'bþ.b çW•¹ïWg[ö +++¯> *uÿ:ç3á³ 4”åôèW"Þ– |ëÛ ++P”Ûž€"@›#= p”u¶ün —#bà á@švt-àƒ2±¯df(' 4,ž,¤eW!p”Pã$#Xâ/"HgUHgN —MR’0OKQA·2Ž"°¬i2‘+O Û  ½ð °ºª_ Por‚ j˜YXTo Ï ? ++[‘‚åp‚å @‚áòg üî7Î ! ã¸fpàžå€â#PÁÿÿ ++úD0 ã!0ƒ·O ¯Ÿ Oà ážïS%K ƒ q/`ƒ ƒ‹¥û O áƒ $$lZ"Iÿª¥{BAg¾GT €|ôþÿê8’Tv¶ÈŠ Å"Œ¡n#x²ÃõlˆBÖ  ¨×ÂÓ«Qa–óä–f0à€á¨}ï P·Ú_O"1ã `Pâj?8òœüo› 9öó,"—ß/ 0hmRŒ ++ZÒ«& Sر_Uçß›ö‹. 0ƒ#&_!Þúœàhï œä?—g!Ó¦Ó‚eöú*mÿÿ 'ó:DíTÁTUtN`n7›ÑEXB0¼q#Ôõ[p èÈ É0@äåÜFÊÜÆÊO64&üÂ&&(U(U3hBÓô!p`v šÖ ++0gHj ++X ˜ßx êÜÖÜÞîÜ@TÊ$ !/üÂÓ‚w!ÈSšر`(¿ 5õêSõóÚ #Ð ØÞÞÖêàZ%Ò ++&à"0X.X+)`¡d  Œî•ò ++t8/" æ0GUHŒ ++`/m`#X0p [B/R`(` ++/ @`qgÇ@`4%.É4Ú@{j48 2²s ‚ ++ ¹!#Nn ++#pk'oÿ Ò²Þ  ° ÈÞZß $™á× Ì/·î7R á — ZKŸ+m«› Õ–èÉöå#%à—ž4 Ý"7 .ÙysŠK/d=±‡ŠKgŠKYË’K Hþ2ŽK:ŽK (·$Ž]BK ¾2 ++„¾2£Ÿ —Ù·Ž]'ú Ò 'ú±< !$’³/ Å$+E³4`b c*’Üå48 Ö æsˆÊÞƒ ’ (P F° 8XF  v ¢Þ ++0\ô4Ö FÐ0D >' ++PÀr#ÒÚ ++ ð0ÚÎ3P Üáèƒ@€6øƒÚ8ª)n º€sÜ 6àP%Áo éi„‘ RÀp6ÁoÂn- ++PeérzÀ ++8Þ ²Wz0Pj_"<+@ÈR1@juäï2¸ ‘rZÒÌÂÆÊB)> 0‘(ÓEŒ5à’ (ƒÝ’)`Šj‘@1*Ñ¿Àþ;1àƒŠÔBR‚‘Îd‚â’çV#šTü .áZ#Š$(ñxX.=\ÐPÈì (€šBâúzG€XâLS'GS'AS'.­Ÿe n0 n?= _'’_'7’—” ++O%¯bÐî9&X}%Y* uÏMÒ%ßå”ã…`§=¡\…br˜%<§Â$0Â$Á"â8Úä˜âˆB’ä`â«"ØÙ‡§s2ºx š ˆæÎ/qT*à;%àž5)%5)Õ>((])t£ºð º {Ñ! Zšê ++ AÙšž‰7š,‰p¬P&:æ8zJˆÍæŽ * g¢º ++ "ç$rP(8W‚²†H¬†ðxPLB8[ºó‹pó‹È4H’pN fÏO„å Zò0Š¡8·+&PÎ@˜_J.ŠT¨(¿+†ö  ˆ "'ÊðKÜ€@ á° áª&™ÂY ­êìÂÚ’ÃØ@@Šå.™°øó œÏØR@šå°î-R…¹ ++ ++G?݃åÀƒå @ƒå ƒž-sã^)`Šjó^1 Ž’›20Ž›h‚ÌOˆ…" ×n(ˆ V¸* rq ‡å ‡Pqà‡å0‡Ð1à‡tSà‡å8/r1›ëY/°ãh f”Åç?oAÓ,÷?£oª£  á¿nϦªS6 ++,& h†] ++­U ÓfÇ[ #pä"àd/$ 3t kôµa๢›_V†tà ˜|øïuŒ>`«V7&š³“@³“ƒšê!0 I)"ÒÈZ 08û½|8!ðqßÙÚÙÔ““Ûµ÷–»QšåžéeÁ .É] Y/®ÔB xHo1ñZ ‰{19+¡O– °@ O–‚=ˆ]‘ùà. îù Ö dç Žµ! Ãé‡ XCùù.eœíH‡88$Ø(˜^ !:ë` T¨Ba±Pš &h·#ò#r( ++î¤;m$-_ú—8²öh2$c@ †X̱ín‚ö ++@%z0H"az µœB@ !ˆº871pHÃhšC"`{¨ krX@• k/®Û7íhø   PªMPªEÀT¥,6Ø© ˜;Ë 64 4‘4 ˜f—å H7ô%$ „a  á—VídT5ø6»´œðÊÒøh:ø°?Ì}gî+ú4³2¸ ׶ÐB ®×MT’ T’3Rãà…|,’ ³’` Å-Ér¹<¹.Í4`4Y ”i4 ¸“Ò"Ý- `·ô) h·­3q=>&à}8_Øl_  <-›l_" `š)“¡;œ. œEñ 4[¤]X/ H  \ KÒ Q¤B ++äž ++±4¤@K+³ê¸Wh.X ·p ·4J)¸¯ú+$‭F9­"MVd%]{pX@ÒÜÆØêh' ++ »)X‚øC' ++ ¨ ++0¶­E(arª­E _: PK([ª) ++(“!€v«Aò8uà@Hˆl8wÒc» -´Ÿ»† / ó°‰üó°ÿ0üó°üÏz³8z³FXþƶCh šw0P7xÙ° ÐQ6ø& î1šƒ8vM" ¼/‰¼É°“ H î,ƒàäÞàÊäèò;fºß%Ì3§ǧÁVºB)¸‡# n)²n)(nºÓ‡ª5¤k£Ë©£a¶¹ ð(5 \'„ܪ~ܪTä 3’å·\/ Ã+QÃé ¾’  =£ 8D-Ø'ȧƒ§3ƒåð5/0h(¤(9 FF»7¾5 @‚l¤8 ñaÌϾƒϾ ϾœϾ_ '÷RZXÐJô@à á<`k •X®k˜!¸@ÿÿê¼ ++,» x¿u `ýI,h ¾_P·¾R zï-X1DBÉ ‹¤µ/ ++†µËi"hn¶ TÜÞ@ìÒæÒĶ"nUÊ­2@ÖÊj³?8 R2ÒŸ#X I(w¶Ž0´Aæ8•‚¸'Pc˜™Ó³ 0H'€Ã-Xt"‡iJ+8Ü÷h $ÆäÊÂèÊ@ÂÜ@ÂØÒÂæ@èÞ0 $ VCõ&@êÜÄÞêÜÈ@ÒÈÊÜèÒÌÒÊäW$:ÚÇBDÜ ++0=[ +4@Cbà)CIP•b€‚¥P8©â1¿XX Bš·ÿ¦$Oš·r0p„ B ++¾] àÂäæÊZ¢þ¨ ÃWÖF\&¿pO*.uˆ^çT%ÉT×ü nÊ(4+nÊTúÚ"/.}´©Œé¢ÿÿêzJ, Ÿ ++%#6Tv ++ ++ '€@Á˜¾ †YlP8µÊ_ØB ÿ§  tQî8»²W$ @ìZ̃» Úe@¹ h{8°h¹ˆ Ã`¹E¹=²,¹ŽÁ‰ÁxÁÀ û¤@0ª FÍ_:ÆIBÆpÆHÆ@ÃÅ 7 ++[6 NP0 $äʳZÈêàØÒÆÂèÊæA<ì·y å&P@ÄâH aœ@º*CžYï&&x=0”Ô Kx+—0E ô×p@ˆO/•1/šw Xƒ®ž7Tã3p0 ë-|w%'2 '2`*š44TAË2Sb*ú?,-¶ .¡W&X<;ÊO˜¯XœXUP 2ü¢ ³1 –@ÒÜ@ÄÞÈòOF<$üÂ. tJتo ++@ÂÜÈnY1üæ Æ\APºY L,,WÞèÐÊä¬ O?0üæ# ^°(43€Z8Ǿ!ȃÉ x ++H.âô -Ù60`] ÍŠà] Ï¢]@c$ÑjÊ™V[A2C1Lþ¡ Š ,ÜC3AäÊææž—SHq ++PHB8\·` ÆÐÒZÌäÞħÃã¦+Xú©1 €mÖY> 2X¹ c±I ++½ —!îwö ++ŠB p à›G|?| 3 €|‘/ÿ&€@Áˆº„„aYJ1P8BŒDƒX ++ÚÂàØäLpÅ Q?V  ++‚v8‘åÿ6 ëÅ ÷6" @Ñ@Ö•‰ ^¥ K%‰ 1¨¿ /° ++0 ê›&pj d fR ++(E#8AVzE"%„Ý—`r ++еU¾Ò¸B&=ñ(!6ÒÜèÊäÜÂØZ¾ÓÊæZÂæZØÊèäÊÆTÞA(bél“ø ÄêÒØÈ!™@@Tã.ºu` Õ\K[ûö# Ð-n=1™¹S(á™å#ë²!72}E,å6@ãP ?Côx@óÜ ¤#î¤é5 4&Pà4 ÔbðáÄ_0 ãÔ:®Åò’t ˜æäÆtŠðàätžñ*ÆôæÂbÌÆÌôÈÊÐhrfÜZfZflEÖc  (FÖ!&:5Aa\dhXÖ& ‚YÖ2 ÈRÖ ! ˜ "lÖ‘ X ‚%½ˆ Ìh Ä ++PY(¡jB ++ ¾@C 2 C-*fRš ++0 6Yú’N„ ÂJB"`:K ++2F¸!Èž6 @( >Î ÄxXo&@è6+è6æ B&  €$VÉÃ)·)L¿L¬C"Zªó.xNÆ5\)Ý\S/ O9O"”T &‘ ÛòI@ %F0ö)FÂ’’’› Ç …L ++ /!DA:Q0ŠóE L0æ0õ=6Põ5|O ®@ÈFX Z&. G ò"uªi:  p‡:0}hQSûµ] ES­<bÛ< T¤!”   o' È y ¡å O~h/ 4,à R/0@=*ä Rƒa| 8&²á ++  H†ö( ¸ ÊØØÒàæÒæ~v í;… +… %OÒX½9ç»Û.ÍNBC±$4r°izðžBL L Ff1B™ôHJ^BÃc²(0Lð, K€ ÎÊÜZæòÜèÂð€Tª12"¤Þ$•­¬ &áÑ+_|Ñ+u`ˆÇh v^å‡"¼Ö$ ++v$5 á8ËY,}7\z¶$1¶$"àOŠ”%/…”&!0žU?˜ ɘ/˜'*TP/yP'mP/ÂP'½Pz‘<"0Ñ¥«¯ÿ"(0'nRõÆ$³¼Ë¢Lº$VXî\Q@¶&!0¢'äÕ- †C ÃÄêpü€â?€å)@†C È^Õ@:xï^D& ÇXPë ++0ˆJÇXák h [YÎÎŒÂK hhñ <<ª*ùÆêbP¶ Ø̶lÐ > ++Z•¥L.) u1¹ì(â)à`à"‹þà/õàwà`ÒP8B?i+?^àWZÔª ª +Õ\™ºüLîÕ”$Dp_ 0€å½àH,¨´~â7 ¶ d€!à”$´x(x,® ++0x"Â+$t@îýÿêµB.i†RtцR÷",XP (ýX X0þQ\¦×ýÿê`ÅòQ\´•´1Jâ$]Ç ¾X0^ázÀòbx E‰’üþSfI! RRþÚÔ/ßÔ 1∲úix)Áx¡ ð Yì †âðüü©` ²J½G  ¾ZÌ_ €å,ðÈ8wÈ»Ä/6î¼ÍG"h Ö|„u6´†œ"à¤ô¸âuŸ À ´ ++.} À %ˆ B”å @ Gð ++[¹ GCà á åS; ++ä¬ A¶ùEÆ<è%.e èaB1 ++Äô(¦1ôÀP›üÿê@þf ÀFÀCú>04òN D(&ý (H­œæ0%àCdŒ±Cßd!à“ò]:^Tbv_æ!9ÇÐ 0 4 Ñ”OÿÿêÔæM8ô åñE–Î2 *IäTH 5Ä#PŠw" à´ ‰\  _üÿênm ¬®1 ¬Ñ”®1~y1‡$”å'Õ…T”ø(1 à”(9W¿aÀwª àãà.àqsºà”ô@fä¥M#ðô†3­¤~(˜ Qx4"0´àY±? …€ˆÜÐ è p0 oíÿÿê|à8 éÀÔ‘¬Cà ãŠ˜?”ûÿÜPÿÿ ++‡ûÿꑘ *¹p.\û´rUûÿêâÒ52.P!t!€\0',ˆt(²ÞE ++)*Cb° R,fBxèU ° PM47* ++X·+(*k`5pÕOXHB%HcP0>²}2( †mwµÐ!ú,¸#²[0¨`˜¸CxfcPn ++pj.qK ++H&8 CWÖ. €# ÖÂi8#aHNwÍ@D:â6" .Sà—å:º z€?—åÐA/¡#"àÙk/Ýkï@¹! |%¹!"àCJ ‘ʨ÷•µ5"ô'5"OšåŸ ˜ØPBIØEÄ.` :ÊðèäÂ@ª&`l. ,€2 H €7ÚÂà &H‚óP@ààÖ+iÖ<ÞG(  Zä±¢ &H<‘Ë#eNkvvTvv-°’Í£"  0’å.uFb0Rã0°Æv[` ++ ø|6r,æUN0pà“h/©ŒܤÑØ  À !Ì ¿%@à„âE_0„å„åïÙ6v-pžmÍ1ÍÿÿÀ¤ ++òb„@Èÿÿ ++, š,T€àf $Jü ¢,î+9N. €†uÿ(@ÿ(“0/q¾~ ÈŒ< ?„å£&ïÇnFÀ+)À¼búþÿê4&à@S./åÝi¹ÝYg§0äÊÌ ++P^gþV¼J%>j 0°#10ЊP221‡0˜ ++Hb8,@¸Ì®5Þá_H ¨ï°,! —| (!à’v¥O,÷| Ì5&ûÓ<Êà Hœþ©$‡b8j2ëJV YZ. €W à4Å3h4  ßzr_U+J ++ñ<ñ0ñ¿ LZñ8ÿññ]@ؽï ã €âû Ç"à# ؽ/CïU¤UåUŽU‡Ÿ*4O¶Êß sÌÌ LØ*8¤Hâ4¤# ++X? ‹ @ 7’Þ09"' P" LÌ ++€à ++º9[T=ª,ë ¬@Þ%¦Db0ÏP JÚÒæàØÂÆÊÈüF>OØÂèÊß>SPHø ++F O0 BS ++OPpB62L(ž 3äÊÌü#´0šåR㜠++¬R\#ˉ˶ëS Bâ …Ž öäB¼M «\ì" Ž .46Z Ú! q g=g_; ã 1 à€Rš £ jš——-0“$稿Á" !w ôzçÙÊ.gdÜ÷+/cïL$/ P$iP$& T$w°p,DWWœTj >wKÖð°J6Ȩ 8èÚàœ8ÿ ++æ$ ++(n’#HÕr ê6 ++8x; G2ih0 ++`ǘ.p3 KŠ3÷j:0R< %ˆ ++äÊÎÊ®›"Jáky ¸Lý ++µ•Y®‚÷1¼ *Íû*ê76D ê7ö7žö7+“ &ë)ë)ÖF 8°#* ++šÉ/ 1ÿÿÿ»* ¡RˆD@ ¶3žH" fp" û+°û++ „ >„å, ++ ñÅÓ8 @„v +°0P‹,JnvB\5^4‘åä ++!“âMª-ù1I®l!t ¾g0h`é` EÚZ Zä$\y*¬/ ¢:¾K5¯| ˆâ@_*Öx Ú"ÆþÚ/v<04.ŽDêKÄƒÄ 1àƒ¶?àƒ”/¥”ê;–=4ä €›// êê;µ(šx/©x kþÀ“x& |‹0 „#ëÿl% ž @TÐ ++h\O@ ãî\px>m@ëâd,Nm½ëŽã ƒâà‚–”nC Mè¸ ¸T?„å ÀéírÛ¶*ê´ØÖþO ‹åÑLõ50b=@(̉ 0è8b@(;8>Ù57<8á°x ¦p °8K-ñ ²!5t†` Q>P0 (d-` ®î €ExEpÒ!B|60A›GG>@Še8@ Xwô(ŠB ++h)DÎ1¹R2#3 H ÐýG# ’bo ÒHŽ×sj<ho2- Pž€„xð^PmF¬ ++˜»E1ˆ~ B: ++0­2­2 }B­2õFHàäÒÚÒèÒìÊ7F¹2La ¹2" … KÁ˜ô`êmþYå¬v.¥ƒ*$Pi¼/¶/G/Ì ”å,™åPPÊ ãµ=Õ ä#.‰äümŠí /@ýŽ*Ù Ã"@ùŽ0SNA ++ S¾6D]WD$ Ì/àï.¡‚Õ×€ö8 ²6ÑÈIM*iÿ ú8 ++\?Ëÿÿ\9Åÿÿ\Q¨ÿÿ ++ÀË ¼8W8_Iÿÿ ++R › â7 9.ýþH.öþo6<âÅ4 ”>XJ  @ ++­>áb¨ˆ,ø;Sã‚é eMfõà°8 P;z" Å 1 ”)g5 {Ž#’åµ: ++ 5 ¤ õ*ˆ? —/#Ie.k°:ÚÀúYV üe"-"Z5àž´:*á!Énî´:X­• ´: Õ6œš_{ÈD /ÈDOšåc€\2_0Š›}:)ÈkF,kF†@¥ˆ@¢:/¢:SH@ôs 2J ++0Æ—F ++H‰N| VŒŽ–_0BJ8# ++VÑe' ++PO?}ŠL ++t(FtêƒÚ&@BT ;5Ïh±„ ;ûÔè58" Šq*‰žb" ƒ: Å/~ñ/0fì!2fbÃh! š2 "žÃM;xU MC;Ûq*9&;zŽŠ¯Pã‹€>-p“!€xŽC É ‚‚‚‚ÐÛj / %X%ÔŽJ% ­ „å „å!™Ä?Ä?D,DÄ?“Ä?› «¯¡DªÍŸp ãrÿÿꢿ˜.f /xþ246šÿU ++û?p³8€N ` "(KßØÂÚÄÈÂZÆØÂêæÊ‹¥ ŸÊ .-;t}tlô±9PÍP!P^ 0äHÅ7 0þxzé/àžš ©š #_/š9..á0 z¾,  /pQ5;* @‘m5$‚x *•}1$ì$6 £‡ [øÕ£‡ ïRVú´æ nR€å,@Š.d?å t"'Qlü ++U$Óony ki2!@š£‰ <Þô1Y#…'rJ9& .øÍï.ø/@Ü %+œ@Ü ¯a ' á.£eø"”åV·zì!àž’vÌ/­Ì7Ì/Ì/.aÌÌoØ¡Ì +ÌÌÌ(/ Ì+/M̸  Îó§*©Üa:pZþÿêj’*LA/å¼ ++/086ë\% ++=N3tâ (PšPàÂäÂÚµŽ‚@ØÒæè@ÒÜk"ƒ#"PÎ"6ìÂätø9 â„ùî((ñy› ++ ÐP)d#„— ++„J"( 8``€:ˆDC`¨ûX Q[QRtöH $ÚÂÖÊZØÊðÒÆÂØZØÂÄÊØï,Ç@ g+" r ++?!™/‘0 ç nò,áûÆ ++z`hH ++8ÊòÃt2˜´5$xN ++¸Nb”ˆÐ:Pm?RŒ ²z@õN§"QÂT>3+xD˜D†J * ++(!gÆSXJTs'+Æ/0ÆN(0”#‹º”iV '°”o¢„ "c T.Ì ++#…Ì ++ÂÍ7Be ++ð<0Ì \Vò5?è µF8)\ ++Å7=¾ƒ!à”q:ˆyPD¬™W ^ã'L0 Å0 U8Ôät "0y/0” )âr00šå˜ 5ô¤6^+ĸ ¸=8 =M8"à|X@ µ6 | x °@ ù@ðÄ  †á„þQüß±ìžåààNå á0Îã–£0e8 8€.½$ ++„ = ~¯²58wñ3ãs<. 0)"gk‹å#˲ †ÐOÉ!PlQô5ô.ô´*ô¸š ª’0‹8 ãœ=¡!g| œð%uà ++l"Î h³h0²½$ /!æ’llˆ`œ. `x‰%/ …% ¸0p.õ&1. ÀNq%¤ÿ  « 0O  ãzF,*Á L.„.–ý‚ 3†¢f ++'DP @¦wúV8= HUfXx)ÄiZ  ++šRk™\¶IÑæ,H—å`<Éμ'†À<òAM_ —å` èº UõpÀDâ\ ++6ñÚ`Šâ Á áÀŒàà–å ² †â‹=úÿÿ=½Ð/Eзi°W 7ÂòRhBN RZb>%X¢Z. (˜÷ ã#X\ ðº°SHLˆ¾°S/q°S€¾# ’gSeú\ æ$¯H ¸¬”T!}2 @­'C  z& pkrrò@ÊØæÊ@Að@ÐÒè@PÜÂÜÞàÂææZÆÂæÊ@Px]a@†Âæʘl†*R2%PP õêÜâêÞèÊ@ðTR@\\\R@¾_ ¦d'RR°R@Âè@ÆÐÂäÂÆÖ2àÞæ°sƒddrbd@Þ̳1­\ææX0Y¨&˜Ú§ Ð7'Òm& x4˜– p@ :ØÒÄ’@ÚÒæÚÂèÆÐúe7 ++010´ ¥6`B^;ÿx^;^;H¿0ÐhD`D‚=` þP€ê' ++8ãY'šVñ D` ºz/ ºz( ºz@“š&Æ<b{erl ¸ $®a`ZèäÂÜæj5Ê\7 ++ £ ¥"à—ÿdܤ!à—h>_ à—å ¼FÉrBh /\P/A7¤`P!TµR`  lª'5¤` Nþ6±L….Càžå$J$ jü±¸Ü7ÜÀÌ À 0”\ D$¥ ,]¥Ë(Lj"= Û¨ /(*Ù((à_(šå,D ’,b, Jâ,@¤,löù "<"¡ºä " ¦+6ú [l@"¢+ #]°  $ø4€l_(àåklt,8 ;€€hVP/ 0ô [‘€ œ4ªÿ šå¸Ì سŠ@[ÕDÜ,¸±4¢¢¾9Ö´ *u °à©è"1X¢Ô' S‘èº' &¨cÿOd ¶ì¢ˆ‹»@õk¶j¶w!H¶CòdnX¶2( 2~ìÂäÒÂÄØÊ–_4. ++ 2ÏHü°ÛÇf wXDFC<ˆ ++ÒŠ‹n” ++ƒn$$ƒnxĆ„Äø½È†Ò~nO"f~nI2fO ++x¡(ˆ^}Bh ++ Ái  8>ðÑ%   ++&• &lGGGG#¥ ++Nip OÈN "òN é«*gí­&àV äb"ÕV ’5« .:% F ^"øb& ^OuP%.P/!P#aPæ Rª " ¦ ž Î/-­79(À!àž³[* ý½/**#ý½e¾AËZ"> lì¾Ö,º/ æ /°ÂF/ tõt¾*2L.ALX/‚X|Ì¢- “®$"06t `îµt1h50@ŠÂkKH£ Âk0QáE|-’Î.:V".& **uQ f #¤¤f f æ$ü4ø ;b&"44ø3<@Š‰ž;íþ  Žã? ‚;/Ü; .Ï;J J¢-;8÷;0ð@ð 0»Ã"@@ð4¡Ã.¡(#¤8 ++/.,#/8Þ.$`d"~ì¤$È­Á ð¤.o? šì ++kxÿ‰ì0  áD/4< KýÅ< †'E”((,€Dº* d_0àån j8ä1lš $ÄìƒÒ*éÑL±4Þ  [ ¥tÞ À/A+0ê ˜ n€5˜ tØAÊÊ€Ê/ †o>. I±gEx/ƒå¾  È;œ7†80šÈy°–- ž,—FnÇäFˆbÀá‹D P÷E«?<„îîîîî°©—îo) Dx F8(Üh`î% ® H</µ¬ <.øþ(œÙÆ´,Š.{þŠ3j(X/*þËAEþÿê¸ê¸/þB/þB €.Öý¼/¿ýO+œ .¹ýŒO+†7.ý"IýÉ® T ÒN& Wb5„º(‰‚Ô Dˆ.AR&´ £5„0 ˜ð0 *·ÿQÉ"çü˜ð¶0ª ªpûdh,ZŽv ~*M~xÿ ŸåQ".­J)(/¯( Ž*l D ]Dp„//.á jø!l hOÊv@ [øl , ,ì ZÍì œ/œ x j Ex0²/(QÎÚª!—L +ÍLc.ûö¿›q ³"¾:ØÀ3¾âpÔüYnÈ‚nÈ9ÄÂ.8 šp8œ1Hj *3o˜Br¡ÿ4r¡r¡€†àJ‚0\@ Þ3'ðe@@3°9 bïH3 3ˆ!1è ?3€ÏK$g`t ++`;½/ ++(*¨0d’6¨ ++p‚™0-)¾‹YŠ ++û B‹V @ÒÜøŠ85ü˜W°‹)6Hm/4'HLvL‚v|Ç- L0L EÒ]ä5-QK²pÙxuÿ4xux`(Bzð’5` ­ˆ$ J&p0Fá†ʲˆÀ’ ’ .ÞÔ2°lJ»0Ò°èB h¬- ˜$"0›[.°ò“»@Éò°¿B: P‚*Ù-“$k Fh F|" ç]3p€H.€å.Šr ¤E/ ¨Eø ·]®¼Eœ”E•tòf(9nÅw^pw^™À0w^Opšåhpÿÿê,¢î¸ ;u,H);¦¤?°P; ‘ÓlJz ++8Š L OÞ Í)E*ù*ù*ù#­ùi~  ˆùÊ;Ø ùû‰½¯¬³Nõû9 ìUÀ ñQ "ìÃ,¡P!_¡¡, ¡ ¡$¡øu ­%ÅRê˜Gx,Du!),ýù ++•ðlèq/Djô%D)!ž1" 0= ž!½ÚÎÑ1‡å(%‡!âÎ[ ‡åÞÎ ô{/ = “忉 íÈÐ$}/ M*)°C9<9>,ÊX3ÄB|  À æ=ÇùÕl“Bf÷†$}›÷NÿŸ ò¦( Õ/´=™9/]éš/- Åâ0w²;f7À?¥ÿÿÀŸ˜@™ÿÿ ++Ï]5 ‚ÝÚ¶ g Q¢|­(p8Ú~²)`|8 b  ðB€ Èo¢ c X&‹®/"xih"s¢0/ ++ÊÙè#/è#/â#/×#8!ÀŽPTà‚å«œ!/®œ! dz  œ! ,ŽŒÇ  ágYË|Ä*ÉBH[|î,ƒ„“£DßzpTóa®„ÿÿêØHì_à—å H!X1ó&-|O„D—åØû°"Y °tÄ = Bšå(0=Ìq°—å$°Š³/,0`ö@/¬ ¥­#@‚œ‚¼ ää›d ðt×ôEv ®€ î k:V àÄK(9("ÓH ˆ/ÿ„)lbùþÿê0$˶âÀ$" ™l]ñ1 —ô?p— ++ñ³rÿ  dŒÞE *U— Œup ÈÂ5HÊ7ÿ@¨˜ï2`H›Û@!°èíQ j€’IØh/zÒ-Lpƒ e/ÈÝÉ8Y€F˜t òVy j~ ++ ˜%(((µZ‚ %V7-`-a’ ++*$%4 &"4 ?€% Q’% ] /\b4”4?:˜èìEjž –EDP 4›" üÂ6¯Ut0êpTa:š"aOêpT**b+7˜«6&˜è6¡?š¡… êbl€;œ$€/bld7(˜è7‚n‚œ‚‚%fd‚ž‚/fd‚h‚ #fd‚p‚ž‚´  ÌÒðÜêÚ„: („†l†9,˜è9ˆrˆ ˆô  ÈÞêÄØÊZÌØÞÂèŽ:¢4Ž%”p”È?š/b`›¢›$›¥Š ›¤›%›/d`› ++?›b›¤›P(  YQÎÊäZpယ¬¦*›%xÌ•:.˜è9Md\‘¨ÄÒè梦¢µ êÜæÒÎÜÊȦz®ª,¦&§h§;0˜è:¨f¨:¨¢ª¢¢G"bl)‚!¬¾™¾®9 9Fdh()fdG@G+)fdV@V(h`V(hp(jl)lhr)€s)h`s)hp)jl)lh‘KRæHø°¥?ìÞÒ³l¤ ++6¯hæ°¢£ X ++HÌèÈ~N08i¼4ÄÞð\p²›OÌèÈL‹O47œ/bfôj´ÌèÈQB²  kX¶"Œ‚(Œ‹d×´†¶†s"x²¸ ++ ÂO*º¨Zà ¼ äÊæêØèÓ$¸ªf¾"×9§n§8Ñ;6à_fh \‡Ì ++ÆÞÜìT³,¼! "-pÎÂäÎZ.1*2ÐÇ2#¾ä€r' ++ MZjrnÀ$HIJÀ†(À#ËriÄ è6+i 20’ÐP‘ô Ív€ì h8 ‘Ü‘ý ++ÐQý&@"™"P1 /|µÿ‘©/­K1,‘1(pŠØQ?00Š`"T×1¸U2u $2u < UD [,¥Dp:· UÖ5 ýX…UÜ-RY/íUÓMÿ§œGíMMÙr}ÕµÎMTH’ ++MK KÂK‚ÂKO²ÄK?È?4Ê ö@ÆÂØØu2ñ>Æ(['¸lÈlÊl7Ò&l_n&p`n0…n8pOj ++A Ìi'Âj&Îj1Ð *EÒEpE"\ÊÄEMÔ"HODÔDÔD#ÓRDiÚ  øDØ­þÞfÏi°4`" Ô-pbc%¾ˆ"0Lú„('°K·Šü`€å °Vo{Ö|Ã8“ 0‡å ‡å£8 ++! A`6‰8 y8Ȩ)Ì ++h&|&¨)ÿ ¶>} ++>yþØÀ /UÐ 11*þ‚o@Æ@':´Ö  R\787Íf´SÇÙ•ÂA« Hþ¢jü2  ©Ÿ¼ ++4©Ÿ"à>Bîiq À—åÀŠk¸?°Šlýk. @ڼóÿ .eŸ’ÍìD5ÈÄ Ákš „ë2úòÄž6Ö ò'h½Í8žDršÖ ++(Õ{7%&2'$ Äg%'Ø´Ëà÷9Ð!/dpk%^5/dd‡؇?80í- ++(Az ÂÚ ++8í2Ü |âÜâÜâ"Û2¬'‡ÞàäÞÌÒ!Þ¯'àWßÀ q¯'iQX¯'\.’3*e2 @8/ ¤ž&îžlž—(Å°—žm6 zÙ‘ ++™(4@8tæÞêäÆÌ?3( LT@@æêÄm1@Òæ’ä"Â@1@1Ík` Ì ++@L=à„(ÞÁ"áʺÉÖ¸(Ö¸6(Ö6!éR6-(Ð6#Ð6(Ð6!ïÚ6$À6(À6#À6‰"÷bcCâHjÞdâ@#ä@(â@"ýê@µæHàäÞÎäÂÚ@æ@è@æ@1r·$ l7) l7ê7) l7 Ç+5ìnì7ìnì7"‚7î7î7î7î7" ++7ð7ð7ð7ð7"!’7Sò7ò7ò7!)7$j7(j7#j7)j7"/¢7h7h7h7h7"7*¥ô¥ô¥ô¥ô7"=²7ö7ö7ö7ö7!E:7$¼7(¼7#¼7)¼7ùKÂ&øB ¨ão.øf"4"íÌàVK u>‚ ³F/è¢K¨2³F—Fõ+@8 ‹F©Ý" ‹FÈÍÍCà á ß»4 ++ž:Ï%, e(À _èÿÿŠlh [øÍhdæâ•T ++å©`>. àl>.`U+¤ XhuÊ1-ÿ½|OI H8l5 èi Xl5èÌ ++l ‚Š G- G (At5t5`Œ¦– kG(A)(AQ ,iSH .u'/ Š4k*µ(" /IÞ×=J—H*L~H`èBøõ ++1P y#ƒZØÒèÊäÂØvσHƒHUƒHOƒH'+ ++»7j &{ ++ÉV ¶ ++wìÜF Ô& {ôœe¢ ++É‹Â'Hº'H´'H@²ÿÿ ++à)3zwYC R#(NÐ/JNÐRü+¢  ++&È+@ÈÒæà={ogB9F LcÐr|$«PÊäèZà"ï/äÜ$«Ð|C «#P L^ 3šX€u XâøÁH'40 0w&S手àHøOU®18P®²ÒþB±b ´ƒ›>“Ô‚>@|T$<#T(/æ'Û& ”Ì4ÿ ¸* ý·@à„ânz3„7µz ÿµ“#0_ªÍ†&0` ++£µl l³Fæ.mPmDfæ&æ,Ì:?,É:&0•)Ú4€  ++Ø×"ˆms  BdcêTÏ´PB|¹ ­oò° «o :OÐÂúB> Wü ++PÕX òþÕ Â@(Ž‘Õ›ó(í:w@’ ++îG jwL/Ãà/´à /§L˜L,LHnÜgÁ ++Hb*0T\@+.*' `4på²®Dýÿê0E P ”eþv@Ô$L ƒÖ)Oƒå@Ü=4 š¨\ Ž\  fz/} p\ ¸öÅt 2 |G2 ++<x= àt4» -†:/ ¼¼î&pê#0÷=åÚ $âî#Åš#²<¤/‰ÿ–t{à <v ·o · Ü/š 0 4„,‚åÜwÜ­šå âàÜf ÜY` `à/åüe#@t7<@à‚â<3‚àÉ‚`$<=€æðÓlÂRW P¸’€ à€N‹å†Tjw_ô”¦.Rþ<TADþÿêê/Aþ:L  ,ܾw@'ÎýŒè/Ëý¬/Äý¬ /™ý¸/‹ý/ˆý/ý(Œ/,Œ/Œ Ø/ p .¶ý,/éÿà.Ûÿ,Y¼ ++0Y¼,¤"Öü¦ü +Å´)üÿij®l ++\ X nH-XHW</Q<J5žRa/-¿/'Õ¦/hŸ¢]6Æ`&b»ü.0ö¦0¦å ¢} ˆÔ  Na ÅF.$26(€œÀ k\íòvJaRX,´·V F € \’{ ¦“NXNX`nT¡mêT ºant pQ¨@t 3¨1xT0 ++[pŸ” ++@” ++B UémÇ´¸8 ³/¬ÿ8õÛ/šï!4Ä%°l<ô¸/Ýþ>bœ6!« " vY¤˜6~P HŠV& .s‚Y°&p*sx\.s?`úÿY™Ý5úÿ ++Súÿê8ò" jÌÕ$.áù`”ÚùÿêL:¤w PÃ`61D”Ã?„ LSÃív/hËÐÞˆzx57!üÐà -ð Æìè}*ipQ"ÑQ"‹c9Jy/©×c¢É!0h =•<ñ¹ ++À‚ðrn‚ðã2 =añÒkÃœ#/‘œ3Ùœ.œ(-o<PÕ.pO& ãHuH/¾˜'ÅP}P(.P, ”5sL%pš½ñHQ#Â¥Þâ©Ù ›?xÓ 0«ƒ7Öâ Et ±\2:Š!Vx'à Ly Y$L ô ô@ôªä î)Ç¥¨Êéñ¨y&‹Æ ð;1 0”ôÐ Ã 9@•þÿê)&Íë5Ôø¦ç0Šå«sTsL@‚þÿêÀ&ÀLÓz¦åöï"0c‚  öïdȦåUØYY“å 0“$ ØPLþÿê\}ŸaØ_}$$‹A /I0C0Xe 1Žq ¤#²ò/•¤*¤|o”/'B t,å'B½ = ++à" @Ôð× ì= ++ÄÄJE /fïd$žå8Ô1Õýÿ,/ÍÔÔ „ÖÔº5ߌº5˜ ‡štQ.© ”;äH ñH‹¶ÿË‘#0ô­$ ð‹¶ »”ê åž/ àL^£¸ ++?gýÿ¸ ++`1 Œÿÿ ++Zýÿê³E *q €/í(ýÿê–ÚÊé'XÔ,ÐéB2bw( Þé8èéäé`x ÊüÙ6* ++Pw;'€‰Ý„Cf@ð ++X¢ B€>(²>ü¸Â˜Z ++˜©bp° ++Âø h ÆìèTï=ï=K ãÝ»° \l,EH &“w=)Š7=nÔ¶{L/La€eƃ=!š„O°Šå ’:\ q€`ÇA Ý \ØÃ= ð H ¬  ¨¤94YÛ¼!b.ú0º R8Ï=!º, RUhB„"¨=2 ++hBB €#b@8,Ð+ãdI* ++@8> $0 ++$0ôàÒÈæ%++ –+!ÃË/{©+ ßÖÊòæ4, 1ü_…~q;¸,^ÓrJh`z‡%XÀÝ -ú»Pz20Øe°xïåØZ3# Ú, ò¡gd âHPB ++œG`œG¥#¥v&@p /Y•27¥õ/Ý¡«Ú7 ++Š8J1vb ++ ++ u@o€ ,wâ Žz#@7“z@9$üæ+—z5 ++ ++š1wð 0Ý.ž@ØÀÔ `€B $:/  ö2˜Ç '.:|ª· .i*: "8q nq.­nq ²Mf8þp *õø ¶: øH "|' ¦8ô ++âp ô /‘ô¸ôBq`X„½ ´4- ›–P "Df ô›/ˆÄ$›4à‡ t.Á؇ ›_›Q›0P8 0@àƒâ 0Š‘ƒ¼!0ÃÁ ¨<š<_qÿÿê¿+` ÉVOÙøÒ>y&ª×”ŒâÃÓ´ÚÔ¯Ýâ,/áæÞôÃ@f Ô¨NÂÚ Ä ÄJ XÓ3 £p°OIJ °O°_ z TÀtÊ!tªÜ ë 8®Tª ßIo@áÜ! RoàRxB ,& 2`\‘4,èŨ‰°`!ô°‚°,ÐZ{Å4EF®Ô‘ ++o4ƒÝ8‘ ˜î”8/ ++816O¢ j ++ Bèy 17ð ++Ï ÌÊÜÈÊäw > â ++îÐÞf7–æú ++Bô6 ++Xÿ6 p Pă}àH_`HØ$ Yª Þq#8ì/Ø1Ç!¬ŽH*£} h“@‡ i ++‡õF~6»[kÂ<>_ ‚F~ 6 B' ++( HBhŽÞD` ++XçJ"ŽÞD(ÞD`Uj&°$aH– $ãJ˜B& ¨ 0h8_äêØÊæƵD; ƵƵ Ƶ¾Iï¾µy$ àpEµ Z Nת> Ûê ‘A‹:ŒCìJ3SŽå „Z3@ Žå%œŸJ [°½J ¸C qUðœQ Ò´$O# ++;ëa&40+ø“z4Ù À«ï÷ ˜«-܆“˜«­g4À«((!04ßíVrÛ"@r œß@‰kÍ´NIœ?õÿÿœ9ïÿÿœÊ'ê A“% äßû1õ1YÏv’”Î8·$G$GÍ$G¸\¤}$G$G|F h$G•V ++UF# æ,R#î1E !)dI \`°f#G Ðy&Ór0SQÒ'ƒêa+)€ƒê¥ ¦d8G$ .=$4ˆÔ/äþ$â*Þþ$ân ++ÿÿ ++Ùþr "nþØ/ ÚÍÜ~"ÌU¬V`OŒGö\ÂB" ˆDj›+ùbùO™av\ËÆ~\o}æ/#-/U#T´ú¦C [<‰Eáš!?ÁQ-–H.Hu%!Ðý³îCI Ø6Ë´</•q—áYm (‹…}$S(½ àüQ‘å à‘ÖE. 0B]0?–å·×/00 00 ++0/ ~F Û¹ZÎa·$ ‰.µÍ’²G1?Øÿÿ9ÒÿÿWzÿÿ ++ÍõA8;8_âþÿ ++6¹ü/¥ž#—ÙFVGd®èßp‰ŒSÈ6 åŽ…KðÎfd<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZd`n¦K] ÚûF4ÿÖÊòîÞäÈ5\ ˜?mG?eGP š"oZÞÖÂò~¥û¼ °"ÚÂäÖÊÈZêl_æÆÞäÊkUü˜ùH_ ++P~4(. 0ˆ0Ø0-f- h- A$'úH&O ++ÐëEJ6EJŽFJ¾ç!xXb")ÔP·Y ÒP˜O€CAÊvã[èÍMùM')pØI š,&4ž”ñ ’¸@ÉèGÚv²$ ++0) ++PW¾$œW ++3)œW@ar&)^&&CšCšCšCiûY%‚((7! *U] F£0ý ++ߣ&8Ö ++ÇïQ ++9 sNyÒ½8hPO"›.ö2 U]e+]Ÿ. ÊW/çN$“å)÷.pêT&¯N*ì?p: ++.±¶›P£ @g&(€âÀÔ €`'P/-'P ›OÙ -€ã² Ù ^ Š  ++0_P %ÜÌczZ *T*H#ú?8ŠV(AVG@–ÜèP`B,@íph ÚÞÈê›v6ÞäÚY3 U3÷ð†JC á&Ká+ mQ&Ø­-Ó ÌÆ0Æ/ÂÞ!=1*ùÐ ÂpÂ0]R¤¬rfà€âà2Øj€²HžÈäø”*Áì†E8Áàq! ”–# N¢`vpª;öJ q•'y 3" ìÁôZç µ6ñ Z0L¼/ @Ð"9,ô\ø$bœf ó¤å×þÉn™<\_-ÿÿêߎ / °+)0_šåÿþÔºÀ8²B* M  +5+1]#+•ú*zU ++¸ÑM"·ð8¡{ªàS>öáœ+–Ù¢+/ l>/ ++(ƒ( 1û&,{a8[ ’ET@q3/:é1!<¼,­xá^B6xi{Q’ L B ++.B.DïOÎfn ++ p`$p$ bæ> ++>Í ++4@P«ìm@BD`*À/ ++htn_F÷ü ¤"om$¶Â/¶ÂN"føÂxÙbp¾_q]-0”ã9#D ++ '#DâJ~/ ภòõØ 9 Ë "PÖß ÀÓ t" .álç‰V5z&á ++lRˆ6h®)jHjJÊrF dÊVLb^RÒÚ 6¯TÞäÒÎœ˜„ŸHJL ++0¯ ++}ÚN ++ k)¶kwËopPÒÚcEZÞÜØØo/Px\xÿÿ!xVxXx/h`x fxZx?Rt?TnVXZn\n)Pn"*n;^•t/^jä)#j"+ “ ++rnXôég="Ø ++ªÿC3žåa¸a¸#I tJÑbTã×gCxf É,d_ôY¢q&šy&$ ++E$ ++d^á€Â+Â+#>¯¼*hv-aÕÖo 5e"à׃@ºr q<` H.¹``TôÕ'x(nè*)%²j‡3†â”Q1†â´Q1šå3†â#wC'm+B ++2Ï^ ÒûFå’N* Î%”|d!p“j‚Í(/ÀžvÔ,0nƒe¦Ô’¨‚,Àœ uÈ ,ext9pW†/ ZJpÖ:L° °p  ©'VKä9ÙÌ¿¯Þ_<ÿ/ᢔ„ š_4ÿ/áwgVvÔ¨gŒ`¦-EgIÌÌê0.ÅL‡þÿê¼ ++ *ž  !Ð- ! 0*±8ÞGG.×ý6 ++7€Š³ª ++ýÿuÞ˜B08`P Hš& 0î¸BbêrÃè "ÆÐÊÆÖZæèÈ/B„ï³ ¢c —˜c,¨ì „ E1·I5Ò ?X éX5(-' ¥5=áU=áw3©¼Qw)’72Pw Ýá2â]4™á( ++(^áý¿0)/0ˆCù tD,à?ÕÿÿàÅ5d<_°ÿÿ ++Ê{a© Ø© éÐMP÷;*Úd ‘hNhVLð@”Dg&g^$)' ++P R êb p8 ‚`˜:`b8 úÔÔ ”¶ ++, –*Š¨blRnã  ++RbR h$å, pj$Ü* p†hÎ pn$Î Ppp ++ d d='VpÆBv~ø9† Á~?fº3ùhyИxK>))Qa 4r-ìÊäæÒÞÜ0 ++r`êÒÈ$ b_hµ;'hÓ-’jx“`æzצ.7ú›.IÌz`[ã¼lnpNà7?ò8`*âæ)/0ùÆ& <}-,@ŽO‡ƒ-è ¢Î(E,ÊðE@0 C_#z`!^H"…ÂHÛr"èÞàZØÊìÊØZ§†/rR‚©R*2ø£$ð>(/}#Vl¸ €´)Ã#/à n¥7 ÏI‹¢**0*À(üýü¸<Ê,Å|# N">ö1"!x ""|RØÈ/7»«<z76/7/ñ/7CŸ ++.mð.îþŸ ++.çþDæ- ++ ++y ++ ++X. ++¦#' ++x›6|, ++~`hF# rd$„ #rf`tÀ t V€ORv oxz{ õ" §”|~€èæ‡v5P¾@¾m_ò‚crðZ&8B!l € æÆÅTÂÜÈ|òI6‹RTãrDò†š¨~ç…Ò¾. 0×QÒ ++`¯XÁê/¯Xº>ÇS^ãü8¦9:P^ã¡´$T^ã/žúEü;† úE„w[ØQ.aØQ „„«V JAQ*ºŠÕ8L0 ãÞLþ½K0 án>å*dk#0Zž;[¶+ÐrBà‚å\´‚w[Ôrqà‚å@‚h1à‚Ø w ŠÏ^ã´ 0"€Z‹l@B Î ˆÎ)»­|T-@ž > šײ„44| *Ý<Îɼ€prb2®Œ²ËŒ‡Ÿ (+õþpJ‹ †I¥J‹tR‹åº¶ ++PTLÜþÿ ++HˆÓˆôè6ˆ çŒLV9ü~›0¾E¨t.­G`0  ã€jÔT.Té@ 898Ç\R!ñV!€†ÊÜì"ÌdôìädôØìòÌÈÐòÞZ¦˜& ©4„ò¨'p±Ÿ)8ò¨ †.P@¸´Ì6ÔXTc(Bˆ½wÚŠ ++(YQt 4ÊìÂ؉N ++¤ÊäæZîÐÊÜXÜœ"Š0ÑB €Ê‘1ìšPL2®Pžå —å»}Ów4P Žâ0,!Ù44 ]0ôy.áÿ G ++BÛRü æLpB!j  È çR*Aü'¦ 6¦ $(¦  š š c‚ R†{"à—– 0à—åŠ{1à—š 1à—š š b4¸WÒwÃûE< ÚOpšå®‹‰âB ø\’h%1™X?á‰0C ¹' ++ê¨XB!h  8 Ym!²0—å “å0—Y!àŠ‘ É×_—å —‘å æÖc .•uåàæ¨ðÂB!f  ++ À ÆÐÒZèÞàT€¹'jfŠå øÌø»Ún*ì ©Þp ˜ FÜ ±´uD@p .ÍÓÂD= @š~®‡.-@‚êw,°,3à‹º‹0fÊ ++0€0/€å$‚' ++ÒG.(â+.± åå°d|Qàå ò‘åà—åàþÙ#ô (mK, Z ZZä Zô ô P&,1#à‚€&'r Û±À$‚ ¤“‚Âr< Ð&Q .UÈ€wª=ó,‚ ++ ( ++˜0 ,FVê>ï`Œ Ù ­Õ =¬Á—å  ãS}xK/}xK!š3Œ`;á.& €£áã*)eà 515ÙñÓ‚z<Xܬ“Œpèu C°wJz•ÊX-6°-6‘ +++A]/ cñ âð ++ZŽ ZæÞÚÊO7á@ÈÒÈÜNè@ÆÂàèêäàáäÊâêÒäÊÚÊÜè@ÌÞ’½ú 2™/`°Z0Ž‰ðB  ´‚—1à—Ï1#à—m´;žå( ++½°—åÀ‹âàŒ( ++ƒÄCÀ‹å 44p44#4]444J4ÐÀ”Œ”,9ÈP0Žâ C|,(C|,,H 0¸,, 0 ! áР` ¿8Q®›ˆuM ++6 ++²Ø Ѩ°B!d Hë b;VZDjÖ?º&:eS`Šå'ÿ. „'*ÜD0&  f0 ãS/ `@õŒ_q `šå—cSP/@ùs=›B"à±n_@šåáv/è:‚VfÜÖH&r Or0ÈZoD\o>~h­ø¬ o.ØM& ó &Þ/P ++ “å~ˆM{0“åø¯KSãE°484 +444 4 Mt €" ਠóžú1ð—ÎM.¥Ã.kw8V 20H%/B mz(Ø@ÔØ Vƒ/ 0 OCò˜b‚ãŸØ#R .Ýþ/ÏþÎ(.‰ó ¦PŸV“¢L’o Ø‚åPX°˱“Î S ?œê"ê" „"$à(‚" àe, |˜ Sàžå4 Sàžå8 S!àžå< 1%0ž") "-"1"5p"9°"=ÀîXBÛ:`‚3†å(r,…0 †˜Ž:`8˜1†å<”s†å!0†å% 2)4-®»11à†ô 5<4ò9à†å=†åA†åEp†åI°†åMÀh4Qˆ4qšåUà†å¨wú|n¿ôô”–N½ Q$ H"™®½õ b&` ã`d˜S; ++¸¨CSã•¥ñ„ ++°žåpžåžå 0žå |™lšåÀžåPs$" ÀüŽ 4aÒAà†åL3P†åÀ®š^´›÷ÔO°Šå4fü;½”š„što},pšå0°šØ<0KxI"°S=àžå(@"p-ý ++85=  1àºj%“Ölš küy™Cà á$ûz'@õ[0Ð6Œ_ žå‚ûz ½ 3˜(†ÀÈ*AÈlkÈ3SãS`AB ++X! ž¶· œ5œœ œX *Xx"@€ €"BmÄX.™X­˜3Sã_XóN ++°žåpžåžå¼À¼-@ž:<¼lB‚å pÄî‚åÀ‚å@‚å°Ô$„ Àå@å t/…t#/ÅþtÕˆ.!ˆ¡CSãdˆÒ¸þ !pžåžåžå0žå žå( Šå °ü?ò ++‚å‚å0‚å@‚å°‚åÀ‚å#p”\” ”°”(<œ/!œ#^œ \”ºœ.½œœj3S㊜y|  ÄSl: ¤¨’<û3<ûk0ûO ŒÌ$G| / |#/ÿý|O’-(Ép*- ++pMP ð!@Üô*‘ ++ôÁ4åä4.ñ ++4“vÿÿêSãe4Tý-IX=H¦ Ü’ 0 60 Ü0\ 0 00 0 À /á D#nD ùcÕþ <° .‘  ›÷3Sã\ Kp!Àžl ð;`ž°‚åÀ‚åp”#\_Àå °P/q # ++ F¾|. |¤ˆ3SãK|¤¥( Ð „,t!p‚<Z#PL /½L#/·ü Í8.E8µü˜3SãO8>T0 3Tü ++ô ++ ô ++fàå0ô ++ô ++ô ++ô ++/H#eHÆH.H±„ ++œH  H / œƒ/}x#/üœ;± /-œS Sã! èÌ0Ì.Ôû¤ô½Dßÿÿê¹iY|G8 {‹6sú(3Qã&tªÔ/b0šå!0“$E#ò ¡ëPÈ–n+ Ì~È+"à€Õ”í”T$— < œ È"sœ«mX `Oûÿê  *‰ .éúXñâúÿêê:B” *1 ++'U( ¿#" =½×"îŸ&Æ“¼m +im¯0Ø]TÑ*W!ž »÷ QA8m»MQt /ý/$s‚"©s‚Ÿ ¯¢Aü“zçÒƒ"ôã1 [."â[1$ ŠP,L ’­,,Öè@·˜«œߧ "ôŒ] sž"A3ûp0^‘W,s3«3Ÿž/ Ÿž"^º/0à 9 ·1&°Ó ËJ^ä,C ç3 "ô?.• '•PP K4HZ|"àDTƒL0Q¤ÑãQãÄ0šåýbÀ ¸°¥{°Ÿ©LÀ`#0Cžå,Ywë ++K?ýèL(jü/=@SàâÌB@”å–“FTáf¸mÑ,cûÛÓe _R_&§Sààã G4QÇi  Z- Ìä8 ++K(A8‹ ++"uu0;À;þê(7¡ß ++ûŸ ++ûk7_pšåþ» ÿ=d§–ë°ë¸Ú¸=\%Á¬/ ã4 õ4H8 Z5-8¨Ixnï?(@ŠxuH§ž(« k7‡ Uvµ¤7*gÁ¡Y7*äK7* ,Ac8 Ec X@gG s‚ü*«7* 7*t;*h?*€#?'k*+SMàžå/ SQàžå3ƒ*17à‚‡®;??* g®û© Ä’ƒ<rÄã7k СŽ 1 ++„ x)àIß ++ ¼;¸#0ç4›7»;"@4|c8gKéÓ°42˜St0”³‚(Rd30€$€$e~ÔyÔ+ b †å W©‘%$ï-&ï-&µ%•Ó0³!0†£¶`.éýpð}AãÕ@'ÃSµ<§èSô 8 H /40Ï© ô ¸á7  A–ýÿêXª/9 P!š%m ˵DMt-@{ýÿêtHyýÿê¸ 0¸ oä-µ ¬nä(í ¬§/ ¬ œœ(/iüœ§/€0Šåûüÿêœ ++/îü¬/ݬ#  ª "«P  1fy„Ä1ø ++'@ ÔFÓ#83º 03ºKñ¬¡&ð¸ ”Ò ++Èb/¹È/Ø ™HP L€ ++.6 ++*R0B äðR0:¡Ë¬n0 ++@@+5h"Qp"E°IÇ%({Wl܈ ó ++†å†åp†å0†å!°†å%À†åH¿÷”W% d‰7ŸY< á .fû;#{WApˆ.± tt+¤›•¨,<û;?Páj|*|Ô fäÔÜ@íäe>3¿$ ++ZÑ$" àY,ú¡d jì@”`ŸD,¡äd \ìYHRà á@/2l, ш€ ـ͊H ++ö'F$2 "@Ômd oü=äÔmƒ]IÝȽLÀ »Û-0”ðµùL@”å 5Lp4’Í)M4åÆÍ}à8 ¨<O94 K'°h. p4 ƒ#3ƒè ++ã• Ã\¨ ++/pT g<ˆ ++(4 X²/ ˜F ˜¼8«\ 4 +x=- 00q-@ /ú@  ß»FÁ³¼ ¡h„Ì v¿(? áHp/¡Ä #(l/ l#@ã9 jy\<8j8#% < ++)t ót °x ›¸¸€9| ¸5Ðu/Ð3¨_•ÿÿ ++ÈL ++ SDmì°[Ç jô½« 8)¤ !í$ `€X9“ $ *)$ #Ì /ž` ++¤Ó<\ OåøÿêT (AØ   jäÝ {È ++ *°Ø}3U6q7Q31 €d ++.£ø`óLß.DŒ ++.búH ”ðÐ&E800‹2Ô/ÛE8Í/,`èµØ&¥È$ ¼ ²çä ++Š¬ÀÀ á0 á,@šå0/?¯0¡k& @Œà $$ —BP žåÀ„ Š—0Áï?°Šå¼ D?jüu¼"À¶«0 (p<;¼m¼@ƒ,¼<p¿Á„  H 1´ ´ %s€åÀ€å#¯90 ¯4+ P PU€å7p€l7;à€P3€åCš­Ï4GÃ4K,{5Oà€œbSà€åW°Ì[u%àžå_à€è5cà€5gà€?kà€khÌ.)!~´ ” È.³÷ ÄŒ_Xÿÿê¹ô ,ˆ ( (.§/+ˆE<zE<\$nì¥"$×l]$" _FTE£É‘Ô 9 ¿#0˜ 'Ü$?`?S$÷ÉhûF,œjü Å#ˆ «¼À ++^ ý#P"8ð kü5$|00 á«Ë< ++Kq<.$0[GÈì dP·ð¨ÿ½ðšÌ3@ƒ$ÛkŒ[pKG~Ä#pw5G å % ¼o*¼#$_$,Lðd0(0Ð4M4=4E4´8œ+ˆ8 8·UŒ /¡&Œ Õ<@d'/@ö¤ßš {øÞÙ_QB1|.áþ.Òþ,À÷T üÐ% p„.qþ.\þ´®ø  ++.Õ(0 ++T–0 ++,% 5ýð+ Z%)H "‘úD?9ž Ke@/«]žQï H)1 /±)c/|õÏȸ&§M jìµ*×*ì¨U3? $*13?Ì+Å)È p.!+¼•ÏÃÀ Œ”*.‘+\<'ä)%È ó •a)ž()žÜ /„å@.üôôó %È ,x „%ü ä«?,ü „%;­ ëOùH€ê³„%€X„% oô ” `„%R„%D„%8 D`I`A`E`LÏO`*¹.(/IÿD tµl"-Š<yK3/šå8ñØÒx ,½x /¯x#nü0Hx #’H!Š¸“= ˆ.$@*}0€ Ô/ïÚ¸#è åh0ð)_+1ð) ð ,ð)eHlø ,lŸlŽl0l lqlcl8`k6lUlhAhIhh7T7TˆÀ -À  À À  Ä ä;Ü?È7Cà‚¸‚¸‚¸‚¸€ W [_P* ±˜–ˆÔzk<Zèdp +}4p@—~X4 *Á4X4|%=i_p l¬+m55ùN|%Èq/56È|%I ŒJL;›;°Ÿ;$ƒ$ƒx0sFxh/h/ ŸY4&ä#T'ì+@/d"0äÀ+è ˜Õä ¾A <}tj9ÌH +U9Ø 8 ¹ (õ Lfä ++Y: È(#*´^´/$à9:9¼L7 *ñ:€ Ô/@¼+-;ø4!@š°8,9/ï9.è9Ü% 0Ð%0SãÔ°˜p ++À%^?Ý;x ++Mp¸sâ" 0_âøp@ª:ÿܤ ` x =°Ä6?4`Šœ xÔ 0Tã À9p0ü& |/ù<#`"L` ,š@Ëâ ƒ QH<6džK”å8/+(Ÿ0€å80Šå<¢ôÿÕ=<S< Jâ8„ ®ÎÏ…OO°L:ê 1*I>1 L:@ ‰@ L: L:Äô P [ìuÙP(ô 8 ++Z}?8 ô " 0Kb 2 YH|_Ù ô ‰ô xô (ô iô [ô Mô 8H¾Ñ|\ü ð 4ð 0ð ð ,„„è Mè Qè ¬¬ à œ ÇL ¬ž´ð<pè(/õAü# Œ‘v@Îþÿê{UÇ ¹`_@Šå²þ°/¥B°$ €O°DAþÿêÌ?@9þÿAZ"7þp4/þœ  /mCÈ  Lœ nü ++¹C° ¬//0ŠˆZ DLsÜ„\¨/ÿä8ÓOÓOl´%“¸2  Q  Ÿ‹ÔÌ ÑÌ ì¡ÜP$Šå,| ++%0šä„ $œÀ *1E ++H Ù}D ++_uE06ì$ì00!KÅPì8 ++Ký8 ìì .EF ì…ìtìeìWìIÐ>D.ì$ììh, !Aä`‚$"Ü#Ü'Ü+Ü/3Ä7Ü;Ü ËŒ°¢È”…<tÜ ,/ÑH,$è ä/ÐþŒ/]IŒ# P/0P0*ÉIP€Xj L0N¬H ´.}J´L|/„L0Ðj/MKÐ3|L0!Çã.(íŸL p-*L\Ãíÿê ªB†â`° Å "”8Œa¶8ê”`al”–  $ÈÐ’ZØÊðÒÆÂØ~lv8…zl.e/½/ 0üv @® pfkk>¼wÓ *ÅÓW {J}Ø"@€b= p”(d@ olÈf @š@ƒ¦ë(ûƒsi ,g8TÒ“iì¦ë‡¹0Œx/ýðf”†do#rf# dGUxBŠÄÌAŒx x“‡WX ++H_iÅÒw – ++0‚vcP @XÇÈ@ >¦’ÃÈ%”(:]Ç€˜ ! $_âÒÈZÄÞêÜÈZØÂÄÊØ®¬œÅcõ¯iqä ++à’"ç ¾¸âG 'z¿Æ21/@TáTÜú/!@ž#Óäm«Ãz T5ï …Sºº3 @ƒnƒn¬Î$±ÏÂ$ ++r„r„r„r„ NFÌNFØ{j~¬~¬ Ò ž0â«/à;žnF Zª?#@† –¾ n:L; : $,Þ3ê::DNFxà@&  ãl/`ëk "$Íc h"`ê'Ò« ÛyX½— zF­† ++Ÿž ^(M(?¶‹7ÿÿ @”å5StÈt©3jh ›>(”:,‡mšÄpMÔyÖl£Å+FBGà áÆ2L*@ÒÊÁú Ãmú ö  +! 0 áùoa-.ÏþD2L ì"ìðM.ðÂZP Ðdyhe4b4`fI5¡@*J@@Šå>T!@šÒ$5‚ ¯*õ”ÒA Òpþÿêd’@0@Q"t-lð  B0À XX :˜(Føã F8 ++˜ÐŠ %€i!€c I“ –,ƒ{ ü •,·Û8š˜ÛB(œ Y‘=PˆKéKžKw Ý¬!À± !ùð– rI xB®8h kÒ ++Pˆ fÍÕ pB°8*48mß8¤ ÈÊÌÒÜÊwŒ hq„€¬ w®/Òè2 j£„£„72§„Œ§„" LÀ„ -8ЄYj ) "¾Ð„ !¢  ! . " ²äÐæ*! 2oo¤ ++ð0Ón< š<0:z'8 XRzh¦ HRz…¿t~WU‡~~û /pŠ*ZOpšåírup $+Ç “ £q—XÛq/ÉÆX p—å¨Hêz /LK;"1ª%zAꦬ”PL ª ® QB¦œ©(HB  àëxSuãxãxëxãxWÉm€âà€H_ãx4L4ãx494œj]€j](”¯x¯x ƒxJ уx#xƒx¬™áF ++âÐGxx° xGxGx˜ïéŠ0O„äw?Å,å¦&Äö/G3‚å3ý7ý;W„Ž«u0 ·uƒ @ .™n!&à;– P €P €¹‹ë ¡"pWÐ` ƒâ@q`Ûoq` ++ì0ƒå+·vsxŒ‡v|.| <<x Yà<F„1—[D@ŽNE«Tn3.­YƒX"@*)Z ¢N%X~$Ø":[ r$"@itd- — ++ò6Ò{î4.…‚*ïÇÔ8܉S`O5wcpœ ‡Õ xùßv?0úx‰Ñ¨hBª °5^hŽá™å0Žâuô-W+|‰æm%|‰ ³ 3¾ÒfÇl‰Q7ƒ±l‰êl‰ˆ ¨PC¤„;§‘bN?ü1—øÔh‰Z/—åX‰ Z/ür<x9f °—å°3üž/üä‰. ä‰Åh- `"ÚX*¨`ߣ¸Y2¨ð„opB ++0ù±‚b8ºª U€B¡šc´h¾ p="ˆÀï¨(Ïh®ÚÊèÂZì lº c¬HŽ HæA?› 'vèÊðàäœ 4À¢T2ƒÜ ìÒæÒ:’ÞÒÜìÞÖÊBÐ @® âÎJ” ++ HÝ Y³YZ°.P'X§Ï1 0+òÒèÒÞÜ@ÜÞè@àÊäÚÒèèÊȘ¡ bS㘃+ñ>ðNÑxVpB €°í#Ž„b( f˜%/7‚þŸ´æòæèÊÚn(Ô ++@>(¢²”"Ä´”[Ñ)xRVÒ›Z ÒÜ@ÒÚÚêèÂÄ”Á`ÜìÒäÞܨ‡e,8Sh¶ ñ`0 cízÚàè@èÞ@ŸQ &@êÜÕ¶@ÒÈÊÜèÒÌÒÊä´*Ú—íCÜ ++0;/¶[ ÿ4@ÞêèZÞÌZÆÞÜèÊðèbàùíF@Ú: Š(ˆz‚Pü8GJ"–Ì´¼  øòŒÌ¢lG&/à—{.k1 @—¦™? —{.#œ#‹# …= ʼn5%à—%ì@tÉ…y‡%[] ‡% J_%< %_%!ä “>, , %, Cp‚å( ¤’¤’:@ às ++%½²÷+,ñÛÛd§p]ÿÿê&ŠÖ@H'€í`ía¸íÿ*¸í¸í¸í!øB‡  ˆ äw kßmâàw ; ä4(4h‡ °`°„2Ë á­„½HF ++ ++HôNº H&pä!&ÿ×ÒKfnz_Š_a…Ûä?pž ++… .ÒïÒà¬Õ¹.-’w$Q'ä0 ++L / (‹ äsÌÿíô&GÔ& ÄÄ ˆý.I÷å 7Z€7SöAI…¾[ „ ,jO4o…¡¤Xd Qó eZI®CBaé~/@O‰:à”/©õjL/ľ[ ÿb¿ÿÿ ++ @¹u/7©u@©uTÞ´qz"à‘¥¢!àžºS"0üûîP/@GåE‰»@@šåâœ\ X xû X:SÕá•Ù¢I& %ÓÒ úHð2âBÀ82ºXj ++”&<&ï%¼}Ü6j² 2 *« p« ?¶Ÿ ·gÒÚàæ¢ *À¢ ¢ °‚ `"Øk T ¢º R y¯  0‹¯Ybº‹¯˜yµDú¼çü | ~ Aô8M*@@€ŽAæ8OhK(Hž*3–ˆb` @hÕ SÊMP†(ax`pÞÏ(YRÏß`Ä ++ÂØÒÂæ¼ r¼Þ¢%ÐÞ¢sŸÄŸ/h½/p—089?Æ—6(– —Æ—5 b—)O—-Vâ`@BÈ*  #—=M5;"{& e& Û ‹'cN÷ ñR ËÄ5¢*>¢#™vúÈ ++(*/`¾Î‡¢ „À$þ ++û^'.†xðtPLBî8{k"ÊÿhÊ  ÿ À$n’ý®}˜ÌqÌÆ-@ƒ: „õ„ÀdºBŒ€; ÞšHÊ_`H ++ šœA PÑ fxhÐ Ðf ++ˆ ¬4"à—ÊŒ} ¿]j«œ¢RáRÍþ`’BÌbÈì£bJb9ˆŒY( .ãjòÄz½®ð ¶C.IŒ¶¶¯£@‚*0BXU×pÌPBÎíÀyÜî¨Û, †2§Š”ì!à’O XȈ“–!?½A! €7 A Éí©d0…AG)1Ȭ!à“W0+5 ’— áÚÌ°‹¬ H. T‹K*EPN 0“å1tXg lÿ/ 0`ðúâT‚ ¾&#Ÿp“å °“å l+l¸­°l µ:ï ¸­°` ç.\Wp„å °)W‰it /¹YXpRÿÿê"Ênx„%0B4 €1š± B@ #é)"¡*‘/pz@% V G" ++@Î ++zX ŠÎgª( ++˜Iª̘P˜ ‰ †´ªа¸xBš 40­V%wV% fæ.eSR7(€`E€`?Oà—€`3äS$#€`m9¬H y]ù@È ð?¹ €iäýDpÌo  `Ì `»4¶X`¬'¨/ ¨žû/?©  `‚Q ´à³—‹_ë§cë§gë§kë§hT~ É"¡¡#¡'h‚ö&#.('.(+.(Ð> Ð> 7>(Ì>Ž(¼E1Cà—¸E1Gà—”S¸SÈS1Kà—ŒS8ŒS1Sà—ŒS1Wà—ŒSP[à—åc0?ŒŽ(.M•@Â&J × öw•’GwVi[}ò4>¿¨ ++.Õþ.Æþ,_´þÿê[© ¨ýž.‰þ¸‚ê0H¢uohªБ© Pj• ++Ò©©ÿXÒ©©Ò3/ˆy¨ÿÿÂi. 0që&ýó"õóä\pä&_ì(6 .q\(˜ [5§ ŒCÄ°cSW—åcd¬BSP) Ù  p"®4}ƒ²„"Kà\,[à-l88^O<4<[/i8^!pš(^€&À ã&° ã5ºL&0 ãp c¢ 0  áðQ4mí`…º ³ƒ0å@pR00åS^ãÜ8 Ü81Rã©"Cžå âƒƒ× æƒ+UŒ ƒ×D@ [ð•@-uÁT;ˆ2j¸ÄZ¨¤ù¤Í·Î/"îHð |_uè(6!¹³&Ò.ïPˆÖ õè Á!!ÃDÒ@0 á@Í-(NÄ"OÄ*8ÞÂ*Fö°NHÔ[@¡Ú@ á~% š Ê'/>&>Ž @Yö+ê"ûd]0]HŠpX<T]b ^Lâ V Cp ãHZ!"à…&>¯"0àʯ@Æ ++š ¢ ÀŠå°Šåp04`Q® ++4|Š¯<þJ1TàŠš Xö(Y#P‚¯zl ++!ÿt=.P ++K݈P JâP ŠåT¨sPá„Pþ£_X šåT¼ !?ù.TŽvPjT"s@ŠåTlOšå\L !ÿÿ!Ã"\—\ Jâ\@Šå\è>_S\è>Lþu!@ù1_8`u'¢üÿÿa``€a/ €aS:ª ++îuÿ``ŠåDšå\šå` šådP r ddP Àb@ M@ Nm`NmHŨ/¿¨¸9žÜ®4§Ú/* žz#/0‘à!‘ ohàŠåH, J_9ì"Îq8šÀD ++K}D BŠ/xÞ–‚îfî `V<c(``Ð+M ì5œ ++`È„® xA Àšå°šå&08 ˜! ¾¯Øü!`ŒT<´00Ž “4æ…˜ê,˜ر9 £“¼b ¨íØ`´ÜÜÜ ?ààÜZÿ_)ܸXºRZ1R@´. à—S™ÐÎ0@â–ro 6Ò0T¶oh†d´¢¬J ì8Èpù6´Xïî_P0Šåd0K?‘|1P0šè¹¬XH¬X`8N Žå¯Þˆ'"šªˆ/0Œ/µýŒõü  @ž€‰`Lf ?< <@Vþÿê¤SFþÿêP<XÖp/½ >x3ç}Á&ÙýÐc"Ñýäc@Ïýÿê/²ýo( ++*º( ++Ü ++V¾™ Ü ˆI Ü( ++ < F( ++ J¿å ( ++WT@ŠåTL_‰TL‚( ++!n¬( ++:‰ ¤ </V( ++/H( ++#\¼ Ð//Ð/!Ð#/Ð<ÐdÐ`ÐJÿå„ "`@ d  Zÿ%”T _ÿe \ H°˜/ª˜£ 4™4’ \ Z^QìŠ/` LL><@Š‚¨è è/\t O_Ä ++ 7<\< #<<T<\<`xÌ ++/åûÌ ++ÖTj¡ÄªŒP"[ÿÄ<Ä/Ä$ ë¬ ØÊ.±þà&£þ"›þ@™þÿêü/|þ/("õ<(2\àŠäT ++Nÿí`Ì*1 F4<\O8 Šå$ q@8ˆÄº`ij!@Ÿ¤h”rhh¬ …ÀwÀ$h6!sRã] ++d` BÞ@˜ =Nz?’å<ª#1˜dX5ƒåhú†< 'ú†;’å8/ú†_l0Šåp¸’ÿYpPp JâllP D .üV*ú†l¼œ_l šåp˜ +Ép Ø@ * @ ¤<¤S¶H˜<˜;^aX8œh Žh ${h Th \h th ph JMì° ô/R8 <ìgp8;É|.P@..DP,:%/\*0X/h K?i` XýXhX,/í,&æ,4Ü4ÕE d- ò& ö²ö²J¾"pÜ" À®— `TŠäZÿ­D"p" À—ô.T0x@›:þ8¬=X`Š$$0$\$¶—l$x  è X4Ð ô ¶-\ê%j7&NfF¸A³ PÞÁd†&h„ À ++ð" `À ++¸ ++!/7ù¸ ++ Ð/Øÿ¬u ¸<«r"‰¶—l^D œ°\ ü¤ ++ܤ ++˧~Pk]€\¼ /=€3ýÜ"Ýý¾ŠÖœ@ÈýÿêüÁ°¬ é¬$ HÔ ,‚¸tTlT"jýKT úB¬ðÊžò½£å= “SÝ:8Œ J-¨"Ïœ"  Ð X žÿi XÐP²X° -Š ++/¥ ++8 ++0€å€| ++7~å|X’J8 ì9`àŠØSdàŠåPôˆl.¿RšåPèDpåáO®¶÷ÿêüo~I!à$mà"<œÀh¬h„Œ_ŒXŒ(Dv‹OŠå`¸*",~’³êü ”$dv¡\ Ü ZëÿÁ"¤ ²TnÎ"8Dy(àåpž¬ &Bjüoÿ#D /d „ KoÿE@ @ …@ | d| ¿À,¹ì² ¨4¡ d$/H, Kßq$ì  {èì/j¤ /dœ/ %œ J¤ d¤ \¤ ^È Ú+ ++à/(`4L4d4`| ,/Øö4'ÃV P(~(\\L\d!.ÝþhÏäÇäÅäêÒ‰T4 ²,.*þÆ,.þ( \*HTPà Ví'ä%P"1à%°d< QâøBË#‡²4‡'Q‡å ‡Dqà‡å0‡Ú4bË0 áÄ ˜ &…(˜PNœšT˜.2ö¯øÜ~q8 F8„ Jþ)) " 0L… .“™MÄæ«pB2‡V—‡ä/ùõ櫸vÉ)  $ 0;h&U*Ðú“#là*Í5ë¬ ÖF#0‹>1‹ /ªõ*Í‚Q¨484[}þ]+x†ŽÀÜgšH4ô/uõü/Ù+ü3/J,.U,¼/¼"T0TP^ÿþ¥,H&8@h,* /é,À5<@š"P¼@… ++ ++d/àŠd*Q-8 d, „X©XÀ\ ÄQ4 ++! ’úظ10¬j6À #1Rá0Ä $”å((("è”@ 0 ++SÊL ,ÊLT ++.*²ôàuR¨Í /ý.$#8„b4 j€e/b4©=@.Tˆ <:“^€0Î78©ÈqÙÈ0©Ð2øà ¤ Ð 88æ@´ (0­ë 4h*\à| X Kõ1Ä L Tĸ3 Z¿M2È. X/ÃóöÈ 8XpØ ^_Í2„x"?„ŒŒ€æQÏøÏø#ÏøPàŠŒNóÿê„È  `ÆÏ `/­3`k`„FÆÏW°$t  _ÿ^m4x"T0d Ô +É40\ (4¨‘ÌO0 á4ò³„©cxö[ Œâìñò1`0Š„(@ `È3 ^Ñ5”hÐ5È)/,XZo%6¸/T0ÐP!/µ6/©òGà [ÿ57€C á8 !r¡d–>—y0‚DÖÏ<.L hÌ(/0 /Uò€-Ýh žž.0 €ã€,€€ÏöE@7aº ++0 È*áþ˜À%à“d9h. |!‰pp®L¢a |!®L œ|!‰ëTp!"0t! jŒ?Á9Œæ° ¬0 ++@p!¶»€ €nœ?A:€ät  ì<@€P½ì08^ `“å~ˆ©íÞ ‘ü~î§$84 k€;i;4ä˜<˜<\= t<“"0Þ =LpšT|=/0  áx"`ÚÜ3>A*¼ø8Œì/$ð ;*Ý<ü4< (.!ñ.þðNêðÿêÄ<€Z@]=¼< ¸<.±ðTÀªðÿê ’ ++ &¹bE\H¹bç`Ô ++æèùŸº”7Ö@ùŸX ++ÖùŸ#Hiý”˜À…"ˆcu 2D Õ“cuhguŠ~P¬8Š\Pßqòh ++ÈêÜÜÞ`HhÇ’ ²U_°Þ÷“3b``÷“äÚ Úø“5b`bø“ ½u38>Âu&Ø~wpÜÊðÞw@ÊÈ …wÙuÚ””M2ÜC)v"‘„*œ†”ÞCvèKk$”]!jÖ ŒÑ_pBâ Œÿòà Œÿ0à Œà Œâ ŒH ŒX ŒoÈêŒ3b`dŽ{Dä@_æ;è :Œꤙ‘ ¤(lœ`Ú{U@` úZÒzŠÎ_83ZÎ/ØÕîÿòìÿ0ììî"HY /=bY  Aº*ðh!(Bð  &ô©öØÊìÊØZÊìÂØZÐÞÞÖ O+–o0–o ‹ ­Ao iê6xÅ iO0šåÖ”0 š>JHXwBšð\ F $E:e 2òbZæòÜèÂði fi/hiD²iòiøPE0I`3JWˆWA8OWpW ¦„†7¤tX?¤! kyoyky8ky"¨G/[ªGö…o8]Ú Úöýÿòôýÿ0ôýôýö Q@š½`µ eêϸ!°Å‰ kr‘HF×3ø×àäÞàÊäèòÙ hÙ/ôÙ(À!ÂææÞÆÒƒJš@!–7ìÂØJšC!zšüøñ ô/XJ$8>v` TÜÞ@#›fŠËÄÒÜÈÒÜÎ@ÌÞä@ B@ÖÊòzŠ/ R2ÒO¹x(ˆ€B8-æ€ÈY/0‰O„å 0‚ò•&Š,‰YPYq8(…Ë ++˜2&x?‰(ˆ- /¢- ‘ÿÚ‹lW•Æ„¦ú  <“( ¿• »•#·.]/ _–¡Dà²Ùqs ++ÊÒúzZZúŸ¿ü ÚÞÈêØ\ j\(ó ++5¨ð ++ÒÌÂÆÊUžj¤ÚÄTüÿ ++ë/8D%…ª4&[P(ê cÈ›Ÿ øBþ  pÇ›‘‡"¶ð`D”`òZ âûZ^wpQãG ++€4¨ž†ƒ<(†ƒ |Šƒ #(¤”5Ûÿÿò ++¡zÔ[ ,õ4› ÒûŒWÊ 4nƒ Ê!àšÄWúu*$ Á{2aˆ ,Ï<Œº…ÿ !“˜2žlY! ž” H_àåü– ÉEˆd:㢠"0ì-ÆoL’åŒ%¼—t/Š•9à”d"^{H\ÅŠt¹à  ¦Â fr“9Š\:!=Š+=ŠÐ7/<&Ð7ðäÌ—”!Ì— ++Ì— 0 zéšX(ï”!zá# ++ —b —l% Ä–/@P´霷 —\ç¾ .A¤ "Üü  _(`ä™è' p±pCšåç$_˜-pž8`È . XÁ\.E\(Séˆ'ìä ­è·tð47ÔéþÿêH:ª ++èG P¾ ` ++þ-„= ++$¨4˜ ²%VPjX4˜ Èj—Þþ@jøBä ++ š—Têþš— š P¨BY„µ ++š9 à€ül1%€E.˜1l1((À1À1°#7Üëà3 áÞ ­/í„.­¤;®Tšjß" ¬Œ’+„:8zJS8Bµ * f¢þ ++ ˜Ù$r¦(8£"Ö ++X%a |î úΦO 0 ++°C T3"Ç Ú–¢æÒÈÊ@ÞÌ@Â@„ ++¢@Þä@ØÒÄäÂä 0™ ©Òxû ~€~ò~)˜x¢hÒÚàØÒÆÒèZæ‚2Ž`‚™±‚&h× 'PP¾§µÀ 0ˆ Hˆ €Xˆ »I/X³*§á $ÆäÊÂèÊ@ÂÜ@¸™?@èÞ6§F/6§J9P±Â½F  ˜ÑŽ~”øõ’d \ '§ü&ðpcP´ =(  ;”0aˆ$…’) x^öo d¬å’……ÀÂ8[ Ên"@¤ ++D? yõ8ð/mðôYw©ÿÿêÒèBP°Ò¬* ++h3 lò ++(H ‚P8ËüWXö?êÿ§? ++(òž7„°ñš€X`#˜f²†BP8×ÊxoèB$ÿ§$'P8 0ˆ°š ÿ ++ ÒÜèÊäØÊÂìÊÈZÒÜç* l»(»Cp¢Ê ++)œm¢  ++—À伞?X]Ô ‰]çRi i/V2NOV2„i0] ðèNO Ê]>/^ˆ  `E@=~,^jf‰fxfØG¼Þ ªá  0_: kIB ÌXk E ”k`k éšx qHr*/$Y nYFÚ?U*èUU¸Ó'Pˆñ h äÊèêäÜ‘oëí$ñ½qEr™MS ++¡ õ "ø ArYS- ++ ñ8}éÎíb' ++àå@h ++Ê1 à“§U(óóÍ: ç eqàå“D"ø Ôƒôà q¿Xi Wx©X©m$Ûö¿ 0"K xI8  cß@†å•V_…Q A5{ £P šåe…Í ÆŸþ¬ ˆ .•ˆ‡ õ` ÝH÷€át@*@SM« ++3þ;MÌbtÿÿ ++Ì"#ó‘ÈÈ,±‹ê *Ñ¿’ÍO" áÑt4?pšÄ ++*øMc‚€ë ++|OšåÌÛ¾Õú¡Ð ­˜.âþHPÛþÿê>O !ê—@ ÚÆÈB ¸ *¸Æm_\R× ~Öõ qå [QãCOï–O&  ã×Á Ñ`¨ «&«= ”’’†Ö›Hä ï`ÑU Ïn+°;‚ƒ¬cˆB¬ ³HÒÚOZØÒæ pðËSìËtÒÈT îËP‡à£Z„`8ºP2» "t€ö8z…·x  ++8 ++@ ++8¿'^!$/"e¶/ j!­PŽ– ++ 4TÔ 8“Á ++ ++¾!p ++ì§$D¬ÞÌú ++ ++H ++ ++- ++ÈÀ! B>²B è ç96ZÒÈþ#/3å}W ±+# ++-$C(Z ++@8Q!õ  ÂÈÈZÂØØB´Øж騘šÀ@…‚â€F8‹Û© …©`ih¶PÝ ÕCÕ,¶`"‹+è» p|(g ++ g ++ P€s°•¹CàšåëW ++ŒÌ@ ++HÛM© ĶS ñ/ š+­×¬ ‰¹¨! ^ö8 Á8Yöé¨>$²š.á¢pBXnfÒ ++@Œ¬rb JÒÜ~|ñ @ÊääÞät@ÚÄ@üæ@ÒÈ@ÐÂæ@ÜÞ@îÛ¥ PR j°šVÄ$ºÄ@89&w² ++ ] rµïS/¡ D( .z³³bÃ% *ò!€t`Jóô@tõ8v`*"€%@Ÿ}ó@B$ È àÞàêØÂèÊ;"p‘œG+Gº ++ º ++  ñ, ߺ ++ÇÊ -ÿÙXOšåÕ˜«p ÚB&°à(( ++µ ¢àkà a€ÿ7zàÿOH ©W9XšSýT. 0KÜOOO¶ïÈ» é4 ++Ú»»  †(¢à6 š,(‹p‹àB$ ++0}*!T 2&qAô´#&R ÊiT ++ôª"àB(   "ÚÂäÖZ|B7ZÒÈÖ ¸Ú§ñ¦¶š&“+óÀ> !Þhõ&ÍãõÙ TñjׂªµÝ%µµtš ++i$ Äâà!„“@¸…Òbøú Åù&„8 ++r¹&ý„@v!©@ý„r/@ŠFuTÕ©xt .¹t"ÿGðIú.ýúHÒ|Aÿÿê*rƘÆP¸B*F%6h 9BJ €å çDàå —Ëà“å®à áàÎã¥Dày@1*^~Ñ­1àƒ~Ü€— ‚â’çàN Ý Ø®*ÅREå.,›oŽâžçåà4¯.!\§Èùp bB¿@¢*¯$(’ DZ*¿ ¢’HB*8" 5¤ú0,ŽŽk².ù ôK€D.¹b,*àË;'Á+¥o'fÃùTÕäâC "^hb,0^D ++,^ Z, b& Š U (7ÂTHc2"&g ++" ++ AhB*´(^³F.¨½Ï#@XJk2´2¦¨x` ++Pº ++(ZEÍ)¬cP¨ ++p¿©‰b. ++X„𠮸 ¦h °8æ  ²0!B 0 Æ% ®Ì¿H h383(x3”)2»¨Òu­" m¼/ †°¤ ?ušH3/¹u­'Ó ¢xX2QYŠ2‚N€ ++Î#Ï-k0ÃhS@ 8(¯è¯êâ4¯h6 ¸¯0¯(¯ŸÝ·IcQ -# s·@?pšå7„Ñ·`²4X=6·Iš6·¨·È«w? ++.ÐÞ¿& %h l ++Ø< GŠ<TøB À<@+R j2H Ö˜±08ð&€SoÐB:«Ú:«:«M ]òzØ aj½÷` DêÜÊðàÊÆèÊÈ@{$@@g€U³ ?^Íÿv,h@ >a€GW  x°?ñªà/æQA¼$/ØQA…õô$/Åô$4s&1 w@ {˜þ%ãÕ .²ëƒ›ðð$zð oððð0W"Î"kà ++ÌP±zwEšÍ8_gàžå8ðCÈô8_càžå 8Zµê’º•$ ++]4Kéâàh"K05w9š"`˜ f&é"/ý’ $"a […~á’ @ Ü.ÅÜ_&4òíSa×îí ++8__žå$ÚYl/1l–9_"lH"±¶\/ fñ.£äJy¤ \*Ây. ++p/‚g¨," ¬ €,"püŽd$.b¾d/ 0Žp/Rz”zy$\WD5[àž¦ri!_àåS¢rÚ—*½i! p*¤K@†å,Nex?CžHþ ++nð-Èþ °/ šudK°€° O° Gˆ Kµˆ†8m&…&.:*ÛuV>aÇNä@ÿÿ Hÿ+-Hÿ0@šå+! TP[ø}PCd„M ++(@šå`/U1 ”®Ñ·°¥8’ 8r8 Jâ0@šê_C@”åÞÙLTÔKYLáLPÏ ¸Ð+^ÀH*ÅH$ÆbŒ* D8$VÕ P0.9 ¼7P=3 ž*ç/"ŠaR˜ú}¼³öv&öv«!ñ'41+àž¢œ S/àžå4 ?àžP¬.ü„À¤è9(<Ÿ .1 ++Bi‚ 8 i8¨S'àžå@ÎÖü¨HÄ/( Áa)/¹:c¼§ ++cƒj`ƒDµƒJ”Pàƒå&à0˜¢*M ˜¢.<0Îp"‘ËÉ&0 0.ƒ,€a,À® P/jéP< ++zJ9 x ¦–Ht ôƒÞa]ƒå @ƒ,40,4d8 +ð¶XŠ›fê u+/ X ˜ T "àxÅÁÎ x. HTh ++@0žåþG(":0H&¢@’yx ++Ð Pwžå0–`©) Z?ý ½"00КØÌ2% ¯3ÞEO ‹å׶"E Œ jü?‰ŒÀƆAä•@­E„ ++ìè Zåd¬ÎA ;0XSÞk“Þk#0“ÞkoSã18!#8$8#88$/ù8#OëŒ )Q/×Ü+Ü_Ü/Ü Žˆ#, jüõÈ ++Úx«œ(œ 3àsÄ 7gÄ ;´j|©´´y´C´'´(´@‚”` jœU¬ ¨J¨_¨?¨C¨$¨¨,8\/@>£ j¤ T˜:™åœ5X D¢Š@à€âH ó€âà€å@€å à€â#à€å'p?+à€"Gã2} €N"/_šå0i1 Ø ôi1Å2`Ë 0ì ++ÆEñ‚ßè8 ++KõÈÎF'kþø0øƒø/sþLl˜ø ÈΆÅ†±(.ý`v(hP@.ýüP"×ü­!/0 ¬+5¬>j"üþ߀ .uH.ü¨.ìûʲ”§—.‰û"~wi<VŒ"Hûà$ð ^eà.òú„â$°.úŒl^<4(!Oúÿêé# *) pù¤¬,Ñ;#>ÒX< ð:">B j1/pn1#™Üéž‘zB@;Mú<‡W/˜’Õ>’‚>’-p`h ê@ØV ¯/ `7‚×qç,7mº$7è1”$ ¦> Û ++a* 2~2„(= p”\ X4 ++N%  á$Ó,-àƒŠ*˜(T4,,”¼  ++”ˆLëâ( hn†„&èoÚO á£g7.%¸.~ÿ”Ê< zg7”KŠ”KSŒxQX *ã%W`h FKÚLôÂææÒÎÜÊÈ@ìÂäÒÂÄØÊhVzÂ0T bB& "Ç&¡B8¢@€Ô[ z ¨ËVP°F° SX¸"5A l0ß²ÐÈYó4à0~5tA@ á„m Ýkô÷AÊÞ²¸HBD  €”‰jd"àõ©, "?=lZz6ß(tÅ_]¿ý»Au CY Kþ½}t:+¶ò…<Ó( ²ò²ò> „ L! /‚åC u³ÿÿ ++0—å!H!H Cлý0³Pþ, /|ÜŒé…l‡zZ ‘(‘\Vˆ *Ì# gfRD ++0û#'n8˜+$ reH  И 0 þX!2›M !Ê` #«0:%*@`%Š©X ++ œB‡f&d# Έ@H Ð@P# ’Aˆ Òç%`¢CP `q p:Ï%F$¼KÏ%C32È Ï%¾»2¼# çåãÔ Õ0ìØHbã2æLG.-¼½ü¶oæ  uãï( ++0‘ßHrFS&'p‘ß(µ 7;€ÀB¸89Y! ++ˆCÌ7;1"€ ;â7HpJªE xô)P P &ö l "äÊæÒÈêÂØÒôÊZèÐêÜÖ +Ï_" Ä L—åø/üp/œ*@¨ODO Oâ TÜŒó ++šNˆT:˜ÊðàÂÜÈt’ÜÜÊät§Sò^äèZÒÜÌÞ6ÌÎònìdîäìÔ`æÞhäÞpÖìÐâÞZfZb©F™pRG476uL3P600 G$"V?SrV?T ‚ T?ÛFP?I “?\h`8R8lí$@8 Hr‹í& ‚‚G0Ø$6^äè’íè?Tè?l9ÙQˆtdô¸ ÄêÒØÈZìÞÒÈhÛ@¸ðóJø˜O1(á™<¢•8¢•2*1èžWhˆZ ð&îLœ" äPä¤ ó/íÿZ0'ÎüaR ë-@ @\0 /`Ìp Ä?z Œ*8äñ0b^ ° &äèŒI^*$>Y/"Þ&¬Á´'ƒÈ"/ ¤f~= 0‚0ø|­û$hR0 ápÂ2Ú¨!,0  á» h¦‹Ph# ’hR¸%Dp á£ ”4L6Lfô0¶aãX  ++û eQ7Æ  ü/œJ€xh „é„ô¨ôQô:à44  ¤nŒ \B?'fŒ€€€ì)ìÈÜ/Ü'`Ül ªž„7‘q¦dÓ .Yp"tØt.ðþŒ "âþ`÷á.Ý9„úËþÿê:ÒBV ø !Q¿ ++@ç)ôý+qôý-ðš04ºÕ5V(&QXcó(¡>¡ˆ*±ÀV/Ø $GyÄ åÒeÞÒeˆ ù€ш Ê@ ƒ ( ++xy K ++XùP”Z˜\ÀuVÕPpê^ = hL hL d` `>Itzd4H €žêèÊätäÊxkoèZÞÜØòW ++#fd! ++yfbDW ++©?` ++</\f8 ++b ++ ²E/hný `h ++Ò ++ ++ý dý $(+$ &zxj0&$dRn'f¶6H´l´:h­jª ++8ý(ê`QÊ^óP%R…b8Ò^ªŠ  ¸l 7«þBžå ±*`žåpÌäß™A op†å°I $í9G^jdl&xŸZBÈØ€r'ÄTÜvx¦ÈìTÇrg¨ÈÊT¿}& ˜Àrâ~âpAS[Š€‘>î&b©ÌLiŒ /@&áí"Ùÿ_È ++b/½× / ™×P¤.ߣ¯m"’Ý_™×-{||³“50 ß™×7u'EÒ….@!¯£@½ë¡U ›’±õßk ™"<•/eã%@ˆ@â8ë—™G| +qÌ ’/Ä)2/0™G*`12/š12/Œ12'­edÈòO ( é)„}1)E,_à„åë  ãÁu +5é3EÀ1¼.Ákp ¸¸¸ã_—ÿÿ ++–ÈêÕÜ' <m<_<q5ÿÿê0—MÅ7 )01™2`RR °m<Œ[ãôÿÿ°!0[áîG›ó¥lå!ëö[p Ð ›u|u>›u YØ §u‡vÀ§ƒÀPR] v? À=>L.Òþ¤AÀ¼.Ëþ`.½þ?ž/Z”Ì@éí¡ê4¥/!Þ!åLmE/a^‰-õC¶Åéí (bŸÿÿê°q€›åÀ’åE]•5ü¼°›å\ãõÿÿ ++ÀRÀ†å ±>ü±äCž! 4×t¼"Ïu0ÿ dÓÖ¥,*• ¥,"pǪ#0 ’ šåÀšå •5à/ýýà  à à/ìý €éÐ(%á(  ++xµ:¸/­ ++¸"¸&@M;.²ýX$.‘ýì.~ý(gUdO<ýÿêØ G .… Ø'P. ýO 4²°K «IP >`¬Ip¬I¨)$&ÀB‹ gP Р$$HæKáæ#Ä LÆgŠ½ ƽ ƽ `½ ‚½ ƽ d½ ƽ b½ ‚½ 0½ 'ÆèG_jb ++½ 6„» 7†{€!ˆ *• Š• Pz—%>P ^]&7 ++ ++pJuŒp¼$P(¨ÀK¿MŽ¿M/ ++€q 6 ++ !xsX'BŒ2…!(Ë!0*s N 凟4 8/U h  5ì'04 4#/&4#Ð °Õ ý!?0„°ßæLd (¼¤œ‘ß9ŠEPˆ;Nxã ª÷+&H9íqBþ /"¡þìZvwZ0”Í2 $RÎäÞêà¿Ô `; $ >^Ì0šåš3 ++Zš'¤f’  ØŽt–>!žÆ®´ ¡–H® ++ö$”¢&Ip âRãr/10“ ++Q@Sãú !à.%8 ª/ò>h whqh&0lf&ѾtÄž/¤| „ Ô¥h€ºè`‚Q€ˆ¯èRèè38 A-è' h”hP8 h<â ]Py  Ü`³P@P,×ò à”å0^ãŒÿÿ à”å>^ãWÿÿ ++ˆÿ’8/é í[ê1Lû `z ”ɲ3"è>1 ++bP Ä ++Pj&]ä¦lX 3,C=SjÍ   Þbì4d Í PdˆFS ò’­42” ++ ç vÀu°q 0å “) Ä$’岊$1“å÷JI3“å"ZûíaRë.n}% VSg ê/~|Ä–8õ ÆÞÚàÒØÊ pÒ­ ++Eƒh0 äÆ% ++–qH(%U?-} _"Y‚j3T[T¹¾/]âB%@T7@ ++ô.½s ódpo2.8a7. ÝiYq.C&Àãsß@ƘÆÞÈä‹ ß'¬Ú7¿Ès6ƺÀ ˜ºÄÙZD0 V1f €ÒÜ@ÒÚÚêèX5°@ÊÜìÒäÞÜÚÊÜ;UàWYšv0ˆXbz 1+Ü‹v5ðBê8‹r”p 2€ªÐ ++ (ð/E˜(i¦'8ÁU @ÍUÒœõ]T˜ Zÿ*›*—{òã½hp+'³|!šK1X €ƒ*³| ë*š7&/1X'cz< $ûYcœpèC°+Xzœ+™ˆB  õ;S›73#öVžGì¾6 <½°—åÀ‹âàŒö5ƒ['ÀvW4p4C{#4]444J4ÐÀ©<ŒÞW9ÈÞWê60À,,-=?4,,-=6Xáb¿j®›ˆuÔD ++²$á=&6hž #hj*&99H  ++=57—â—ìz .qìz6qöî ¶ä{öî— àŠå/—å;d+à{ Ùh7xÇ+"×à{Ù Óy„&Tèt  ã30—åW"µ@ŒÉ &I:žè1P,p\@žå(È-°•(È‘9Ð0\0V_q Jð ÎMŠU ÊM =:†.@`‹å ,!†O{( ½Àì À†°éá‘ ¢‘ èÚÊîG T€#/Pª`욃Pdùk´&0*ñ@$ ü8q@$êó0.ñVŽô`PãTÿÿ€=°ˆtd°10Vã/|=°–,],%4Âÿy è°,. á<\O°†å ±+< ¬–5 ++êX¸™ÖP/”/ýþ” ]ÛÎQ½¬œ-  0=úõh/ýhX<ï*YþK XèÌTxÄ#‹F6\F­@rö /8ŠR“å °å#Nö'Nö8 Êz6³ bV D>ö]" :öJöï úõ"#àö'FöNöb/0†å3À>ö7¾õZú ÝÁ³°¥¾õ*ØÔ .-Ô*Ø.2þ¼¿ƒ!.™(âMÛMfÅõ‚ 0 ""j3žðŸ`jÓ£ ++¾ixý è›{ð æ L LB®L L°"ŸFÎhp× ++ðb` ÚB]ÄHJ²,TQ0œ + &% V/¢,@ Ú/ )0 ÐÚĤBˆ,7Фú¦¨B>@ µ£ àäÞÆÊææZ{Ÿæ@ ¤]3ÒèæjÑœ³ZìÊÆèÞäÆТ}! sT1B> ž  ’B "b³& 3d¿( 8f÷- &hW #j5' l ªi2ª{; ++ƒqæîÂà.2¬™G ++Ôré onÎj`$ p$b$ r$d$ ++Pd`*?¬Bb£pT»ðpäÒÄÆÂÎÊäèÊÚ ++§•æ%B+r (R^Pv1Àn®°²Ï°}k¨î0<  ++°+$0Ì”/hÐiøÏiÿzh¸ +H!¢!š!/‰Ëi"~(30‚Á ++/‚å(&o–'é ++Àa¦/}äA ƒå7«Ž‡A/O 43i=´ »A+;3‚å/'€«Ñ ++7’/i ?’ üv ””3”"0”EÀâ.” ++ê.”@â-V}—O^0.Þþ(#Íþ€˜.‰ Ô#gþ c^qc^jœ  ð.æý¼ª™.˜ýtŠ</{ýE.‰ ++äfx_O†J ZÑhåÓ?´…[‚´…[x]_XB¶­‚¶­|Sw ¸ ++ˆVr 2¸ˆs ò¸p†¤)çò8!r$HäÊâêÒäÊZ04ÒÊæ”\€ú¸H Ë´CÎäÂÚ»Ã@€úé@tHhÏSÀS(ÐAz³Ð ++dSB~³jº4ýE¸CS .djûE~HDøE/j`ô'. ++àó'ºõEg ` pðþ çE ÙTW.L8%48T0² ÂÅ(­R‚;0 -0¨2¼¨2<0FXÛ@ 'h  ++¸p”&h”&@W ++ü ++·q/K·q ˜ ,' ,' ++7@Ù‘¸BïXv6 !4kF ++B0Bf> ï ++/®ÿ¸Áœ'˜†2º'1Xë682›Å64À.c ck.dÀ6;¾>Õ,h¾6$>?\hf¼6¾¼6‰.4B.jf. ·6* ˜ƒ.Àƒ.|,Xš¾(ª6W€¯•.&€¼†/ ›.s@›.8Äý-Ç-%'*Òm¯-+63.ðx- Øp!rž@x-žx-Y#JžN&hx-N8Æ,-V0‹b”»¸ 2‚Xs« £Ò*† ++Êg5ôà êàÈÂèÊZÚÞÈÊZæÊèq—u³0 & “Ri&Y'4@ ãLÆd@~«søï‹ ++¥³* ï}}Š¼XŒ .áe³XÔyÙp òBÈj͹ ++ÿUa-Ù³œ<W0­3@c—¼3XÙ´È`ì)‘å›X!‘TMá½ø?ÿÿ ++]Ý:>!4㜠ñ$žì÷U@4+)"H8½‹KWÈ*)“OWÈÈE)"ðþÌ"Bí4Ìë¡7ÒB ++ ++HÈP\@ ++L‚J L“X\ LÈ 6JJMZMZ·!! ++ 9!p£ ŽÈ#Ï¥S(BÈœC"6Ê ++(øLfÊŒfO”8Z“ ÌNV Å=C 5C "“î¬ç eˆ yŸy !À0Í ++¡ ++òox6ñW x6Ë»ÄÜL¢–¬X…À ˆfúÌ ++(Ê'hÙ:C B©c/ ++ ¢¬ U0КL bc3€¬c3§c3Ð °Øn2XkÒHn2¢Y,iY ,‡$‡P™û½XåjÉ÷>(C/LøG—1ª¶BêÒY@ ª `©Ò4ÆÊ9 à§Su/2Ö· m€âà€·_ƒÖ4L44494œ€ ++ (”û1û1 Ï1J§ÐÔ+Ï1 ¬™áD ++âµ  r ¨°BØ  ˆòʯÂ(/±r /¦M‰˜ŽË †‚‚‚  ~É >‚Œ^j1aMx5až„– ‘ &à"8 JÒ v " à¢8„,=r žï0$Œ:î ++'â/0V ìC›sƒaSZ.)>x7ƒ?(ú,ÕÖ`± =MÅ<ÃÏ05¬öÃÏ¡ÃÏ»Ï çI×É]Iy³»Ïž/Ô]³ÿ=Ô]³ÔÚ`]³ ++2ª½¤ ]³ˆbf:Øpv%päào³&dd< &K4ÚK9  ÀKÜKÞKMàK/ ++(J ++Y jØ"Øù/ ++A Ò¦ #Xy?®ÎÁÉUˆB–M/ @û âû ÿ*âû âû âû ÿÿ(Zä .•øhG <—"5 ,L& ++¢.  <‘’ ,’@í &0  á<S”• º>â=|…$ SOžåÜ“~ÊKý¶ tKÆ>QÞÔa  á”–Þëv=`£šf>&° ã&p ã_\â÷¤d‹ö>  á,Šå(ï©î>@ú ++ä‘ î>BQãJ±/ ++žå<ŠÍ·füpƒå@Šå ”j³{&à?-‘ïWÉ(Ž(ˆB?‘Ë }º= þ;0 áþð¿%à€caÃ<µ§—€BP,–¯Ú:@ )N‹å $5r àp^p†åpc /( •œ‘1(š`_Gàžå(õG 8–?(Æ:‰·{U(¾?/uÿX G ÑÄ”1¶G¨—|Ú? v¤ë88880Žâ|( [N4 A@3àD%D8 <8/çþ8'ÔƸà3ª8#$Àú<pÞeô“/4@„•*¡„•#$Àþ<pâeT‘4@šå¶þÿê6P4qé ++ž½—<Šåžå8(o#°ÈOƒ.°I"²L3%870ŒŸRôe#,‚å\‘N1à”= à~] è%?†åSVSa:0HWVŸ`Iä$6ä@ *Õøï/ L <Ý/883€å(kèí,îÀà¨Ã(°˜<{(häZG(/½ ++üCQãÕPºE@ŠåX Cžå\ $$/ý¤¡jg`0g`¨€ŽÜªE,PQPàŒl/D`|kftDXx@¹2é0 †âp" |#„ï)a#9a¸/à€ €ô ++„Œ ŒšD#†| æFˆí¶ù 8Àï) (“k<X`(/`+~I3Qã`.t° µnŒ”š Z¿¥”šˆØ]/üØì $ ++ô ´4`´ ÕH(/eHq*CQã$Ä / ¨ ¤Jð,v8šå@ š¤R°Šå$À¤„ ++[ß „æܤR°šå$À¤à  ÈxI/ïûÄ Ôd ++ªÀ <ÀX ++0t ?åX ++/ô /gô $Tô 8t” ŒŸ *ø” ·kÜ@à☤‚Kl ++)/Mûl ++ÜK (’X ++(Oœ(/œ Üþ²à3Qã,äNáO° áå).ûÐô )¼ÔºPQŠSdŒ!;Œ.1 bT㸠#äàLœÀ©Î`­ÔqͧT,°++ ÞSd†ÞS<p¨T Lª(À}À# ;ø1/žP­A *M°< È›D ‘D {¿ «À7TáF8l©Nvè'p©Öãñ` ++R°@° h/8qCààã ŒS¼í> è=1@šD1#àž— d õšU( ãAŽa" `Ô®D*  M>/µCUD"ÑB}D |®å/šp ++T°| 8"@ìì ýì0/Aì#/yì#/±ìì /éì//-ì#/eì#84 Ñ4 àž$‰@ èPØoØ XR0å ÙBø¥" D¬ ®å éè /ÿå@άp¯|ä–>S ÈWjSô tD´Ü‹?*"©Œ &‰J("šÖ/3„(„Ø .Œ }JØC ¢ ++"y ++8W‹å@‹8‹8.f0£LÀà 8ŠU"0°ÄŸ³* jì?ÅÌŸ /0°ÍJ7¼'¬‚¬¥&'"4°° Ì0¬j|q8 ¬  T=pÐ_ü¹H H°Pe ++ ØÁ)K! ž8FÑ4-)K:[¬„/ ¡ _E Œ1 š¤ˆH¦ðNØAKO‹åÑLõ0 / à¤_é 0 ¨ºQK›ì O„ ++¤§ /]!t 8,éH= À‚4/TÜ#ÀXäL¦Ð¢Z +"G°®*|¬" põH7‘ØȦ k`•"ȦGà áñH Šk*@³~s. ++4 ++ü¶Úüð®*  ¥²k ((/m#(Hšåe(¸¬siNl°( ´.ÂþT“.€þT.mþü_<.PþÐœ /…$x 5x OÝöÿê`$ *ý$, .ËöL.ÄöS%O¸²œ÷q`îZB(€îZqJäôÄ!ØêõįX ++ØÞÆÂاõ%& [Ûžšfp f ++à4FôtŒZä ++xÅÀ_u?æñÄ s0Ãè4ÁÚè4Áèâ+. ++X|!pNP+’äÈÄð†3ê8†ì¶Äâì¶ÄìŽcu ‚9RäØŸÄ< Aâ<( Ä ¦ADv›Äˆ›Ä_ØBîgÚîgîg# UïÐWmXxÄp XYŠ5ppp.·Z`˜8] ++ù€Ùð ]²" \Î&À‹¤R`HpNý!c:„_ò`ü&dfÝ0GE`üÝ0(¾å{ð.EÃ0cò ¨ëmâô8Bö ˆ "=xÊK)C^÷Rà„å„å¼3óW r²( ¸³ÐD{ÅW{ 8¬% ++ âf. 8Ÿ8 ".l%{v6t*h0 L¶xQ—å“DCâ&‘YBƒF00½Sä¾ #´(* ¸¯K iI/ £K Ì ++é\ fD/ ,£'<À—IC* ++È ” „¶Ð „/ |Úf.~ÿÈ ZüGH4H&4Ë|pM00È1©¢L ­ (ŠBöl ++ DËÖ‚ #? ++0ÆL ' ++0ÉC8/B8cæ5@ (£4/ö//Ü/+0D¡×Šx 8^ö @0[úôEUH8Yz ð( zÒÜÆÞääÊÆè@ÜêÚÄÊä9÷ÂìÂØêÊæ@äÊÆÊÒZ’@ÚêØèÒàØÊ@öT?W¯Ó‹<Ôø ++T‚ø9˜”8­ú­‚ú­0 "àŸT ¢á  zá ƒê° …ÒŽê8üuè"’6â*%Ýs/ H(;x<v­'xHQ^!íˆÊà;bà„  g /ƒ™$O¡ à„“à„ùª’ZR’ P€à„(VÁ{3" ü&Ãtòü ¦! (þ†^T°ŠN/æOPàÉ ¹¦D>*,<+×Ù­É!0“%È àE<½e<à­É“­ÉPÜEi<Èæ.EˆÄø˘>U ÜE£"|"2ŠC’!ú¯q2!8aS¢!–æ :p†¸PB! YûJœÒ:ò¾=ã ŽÙê»V  # ™#Á8 Ñ8/@A A. äipè1ž¼E UH6%P®Å6%ú !-·QìéT Ù º#0 G_PÑ ++ú÷ È ]äZ ®/„u ïRU}—¼8 8¸5îû/WïÃò ++¨L/ ž£X/° °èˆ¬X ´  R„å ßX5—çð&*œ_DÆ ’  *ñ te<:²ëX8\Žc !X²B€! 5ŠhTDS">šë=¨ôYÒY¿Y2à‘åø ’å0T:•_þŽ ++à½@¨Eƒ­·á! šæW ,Œxu¹‚¹À¹Œi3àŒ›;Œ½yŒŸ;ŒŸ;sŒå àœåÒ¶A}_Žã Œ Mé  @s. 4/ Àw.W(®š/ÀœF 0ôÙœF²š.ÀÛ/“? 0ç+l xÀ€å p€å¢¹ ¥AI¹õ A«ÿÿêtêt¨¡w1à .äI áèº¯Í …n ….Ù'‡€ ++"!xFféP ^]'hÀM ++D¬ ++˜<GP ++BTLGT!úUÄÒ! t`¥ ++/˜D) ++¨â0!zŽ˜EE°E[E¢EE0’åT2!à‘€B1 ›M¹WÕIQ× dJQ#sÔB¯ Pp á°Q›QJ¢ñð(0Ĥ¿þYppi-ip˜1 *~~„;Á[ €å 0Á $ÁÙÌIà#Õ2 á©l ió|cœz}°} ‰[ é°|¦O šå^…ÑWÿÿê":!…v!ˆ›u ÒÎÜÞäÊ…Ðï‰æ$!k¦ 2yPs»L! ++ ++XŠ"@­Hú!¼‹&€v_- ++ |‹%òÉ ( 6 “"à58:Š ‘ •UMŒ/ ++(e‹+XHY qh! KwÊ0  Á –Ó`ð ü &@êÜÄÞêÜÈ@ÒÈÊÜèÒÌÒÊä `ãš Ú  Xi%Ü#"/! [ “4@ÞêèZÞÌZybàb±wO@ÁR8_'PjL /àÐwÿv¨B!  ‘|K JÂ@c ++Œtï/­ˆlvoI ×'/!JG} .ñ–ŒsJÂaêBPûQI!ˆs0!]Sø»—e®»‰;—å ‰µPJ=Íà V0–$O0šå __ rTy49 “ê Ð1?òbˆe2ˆe/$ y/ˆeyeå¶M Ç Qe±ež !PCl;¶ *e& ˆe ˆem ˆe*´¾‘qÚƒeO*!ƒeI2!ªpƒe ++Mº!2܃eqHšhÖÿ¦4q š!P¸•¼•˜wÙ @0FÕ•'à¹exYk! Öâ4 hâ4Hâ4_ôâ4 '!¿e'!¿e&!{¾æe2æe:æeB#5Ž! -0æÔ’’/ ++(¤‰`8!ÓWgŠ(Â0 ++ P8…‘>ôQE`éÊ`8` '`®fXWH`"`Y73ÊÕf¡0z¢ ¢%"¢ÿ*"¢"¢"¢ÿÿ(h* 0ÿ÷(æÞsÛ! ++ÂÍ! ++;¢/»`“7¢@ç€ # h'ó# mv â/{F(JÈ’J.éJ'J&àD’.à)Š"@FÄÄŽ e8”<8 ++‚ûP N ©þ"@ŸH ÁÈ% Î2 S@†å ++ ++# ++ ++{X ëã>W/ÿ*ýL(P xW4*×&*ÿò$*ÿ0$*$*&*‘ h!(©²Fw!HÑCXê!*9ˆ~åsX!, ++oæòÜèÂð jªÍ4hŒÍ' .'²û*û2û:û,ûèú¹ ++Z!*¹@¹@V0º]`µ*‘E Ïê_p!.)6(;)().)5 b)5 ò"J «)­7 1â°8ŠÎBŽêP=ƒœ)k%/x'Ï'.P_‰ ++ü` ,á˨Dà:K< lE?<µ 4*¿­<š{{4ŠS<`qDàJ<) ++(Ù’0!0èJ < \¶LíE5ùÝçå.·2xP9B ++!0'xæ:¿Y8  Ä ¿‡¿v¿‚]@u6p¢®W(©G)!’ L ++ )=ìS[ D ++/p ++ Å5Š® Ý›„ ++!é {ƒÌû’®œ ++ßÏ Ê$¼!’.={ytrt/¢b/ÿŽ™€B!6 LEw o ^âSÙ ¨ÒÀ†3]]À†D9g¤ Ñ %¤ x ³<Æ™´¦­ÝŒ‘_Š+Â×2wƒÿñhÒÜìÞÖÊâQ4æ$»”úè¬×^ççõ‰.]ã®Pî8<”C Ç” OšE×÷3&0Q2­œš(D5¶OKÉ/`bd žg*)Gß>"`}@ h @<©@ [(¥@[? å@Î:/š" ++.»4ÊhÛ U8 °x •xæ:‘ Í> °oK ”C/oK )iUG8¸ÿ• iK«" J]SLC ½CXZì7>Ê…!¨àU@)QH)Q@Û5Q0RQ{Q)J' ++ …4Q ê!4í (7 ’Ï/ ++ [YÒ!6ó Z X ’!85'è„<˜< ++ š_ˆB!>Ð ÿÿÿüZ< ^_T3(T3T3 T3þÐ ìÐ a µ# Ì  µ/Qµ>IÓ¥ Ècš¼¦ ñ4ˆ¤¦pƒåàƒâ¤¦°¦2àƒ•#! Ó{d- ž¹usqj­ UÀ2- ž¤e°1! .S„43à€![€å €!_€å0€!/9ú,¨3/731àTã-à!0ž)\)\%ú  Ô Å/p—±ì­Ú)úô0¦”0O  ã[q0ÄâÄ/E§ ++OpšåÆp Ð.ûþ/íþ‘.Á‘.Øþx.Ñþ@´×:´ÿ=:´:´DŽ8'ÌeWÈ.€ÿß0h¹^0h.ÚßÌgÄ;= Æ 8 'XLö _š!g àg h0 J[ )@Þœ ++«ìÁã°Å«x¥Ëx .M&’#ˆˆ „{°}q°} ŒQPèSè ATc§-è$/;í;b«îÿ7ß M  <Œ¦ˆag.T(Ú?j0,š¸ l8Jià+äžå?T¦ ­‚å0‚å‚âÿ‹ì¿%1—TM í?T@5—S \1D5å[%É’B!J 0XßV ×V _Æ ++d»`'( D¢|/ìx }`'(i$$V+ðL9V=`ÿ/%ÿ`)f/`øiZú /¥ú#À ++£I|j<W…2x.}2 )P" ?6²¼( J ++ pòDPDò/ ++(NÜZJDopB!Lr ++ŒLL‚±9v ++ m$^*!Ndt-†Ï¶!( +ú†ox!Rp¢,ÿÿ|TŸŒTŸ`ë k 3:Ï ++V›piÇ¿¿¿@® ++J²JFÿ;ŠE 2lxE2laQ$N“ ¢ûhc; "p‰"s .Ù' ' YÞl:Oˆ‚öÏâö¤IŸ .@ÇÚ Ûs«˜(o)VsŸAP:”.Þönmh8'cœ¾ò¿@ h#IR!VRÄXÓ³³bX³Pž 92­È\iZ  ++­Ö ` |®…U[}xæÚ!’²"@ÜB!ZÜ `‚/8âÜ =¢Ü¨xB!`  ‹ˆƒˆr$„G$9$+$ $$@$,o$P¾ÎÀgœ²÷ -o$[vo$ÿ¨^ñÇ ’êfý^ýM?2B?24o$o$"M MMo$9û1þ´¿É·i™Œ¢û· @G!×\G!ÿ=\G!\G!( ! C-IJ!^;€Ü Hr!`5/ÐÜ ++C” € lh¬ÿÿ|b¬Œb¬wIrÎ ++ K¯1 ++˜XPO"ÎqA„ ++ +Q 0z-m S*J*f÷ƒI@(¨Óh!pgƒx¢ƒ3Íh Îû3Ívù-Y*!d:À×D GZ Â!f€CBB!hù/S;bîrjì0HêÜÆàäÊà ++8;PH bLEQüæ@ÒæGEPÂ@æèäjfPÞä@FÌÚ….0%Ü$E3 ÀSÒ!lBoàqz!l° b Xëopr!lx9ç0!Ü&HæòæèÊÚZ_ÉaP!Ž.x‹ ÂÆ´E$!8…%Š…q@ bh“ge !n ~ÖýÒÜÆØêÈÊ@B!p  ”+”f1à‹`bg1à’l‰S^ãrgˆ ++ž}SþtšI// w~//Ö4ŽÊ!n $ïQ†²É}p€:×Ð`U¹Î ^ ++Nh‚ù½@!r@WK?€ Ø^¸hÎb$‚z±/Í Aªµ µ ˜0!r *màíAÈêäÊp6çd0!t p!v ÎyvPTãKû%0 VB( -Š„*09t%¤ %" ª 0At5“xLp á¥¢ž‘ í‹U ¬N! /%¤¾[·¨€‚ .FxìÂäÒäI`ZèäÂÜæl Êä@8¨Xû"ôv€š!v |¨ÆVgb!v ++0á0 !÷€’•&!z¾|¾ÿG€*FxÆÞÚàÒ½BÒÚÊZ‹¼|¼|¼|¼¢¼»h~ ð»f7ëÃ,Å5*Ã×»&/š1hö ++<=ˆ=ô; ëøÏæ¨5à áµgÕ4üSRá j ¹gñ‰„a‰„P€pxprp.·\x` xá€IhD D.%D@ áÏt!†¯ète@yàHÜ”A0žåFœÆ£9V*o ++ŸoÔ j†¢äô oX j- \x @Y@ ÄÚ£^³„/, T$‚®&T(E.A(´#]4„H.©„8•tw *á$Ôcæ <rN’ Fx~RÐ _R~ 8i @hú3@ÚÙ"Ú.8 @06°0FÆêääÊÜèZËœóèÊZæÞêäÆÊZÞÄÔÊÆèY0€ ò4¬¨ ++ ¶ÆÐÂäôPÅs ++E u,ðP" 7 üÂ)8üº›zÍ Êc%B ¨R ¼° ¶ØÒÜÊs?X@Š"0NOüÂX@“YuSj!~Ë B. ++º"—Bv€»‚¨è»väl(‹d»!àr+Sàâ¹  (mí• ++(m º¿D!• 4/0·+ÝïP0šåœ`Pã(ny '£EË)/iË#€n@ãi+OåáëµAµÿ.í·‹WÚ FxÞ+HuÒ!‚@¹v êX†C¹‹iò!‚ ˆâˆ¹!Ô"HÚÂÖÊZ8>8 .Ú‚@{ü6ì"EÚµz+. C/.¯$„Ù5 âºÁ ˆÃÑ`‚ P]8’:€¾ ÁPä7„h~…)˜ ÙXqÁ±3xŠr!€H0Š 0aØÊìÊØZW‘!Œ  Ø $ ™Y¶³CTãS? ï}eIC 6­Å&^¸9=0:%  ß qB€`q70 (0ãÝ4Ì5AÄ·*À Ì\àÜ$æ\ˆŽˆ8 | ++ B¬K/H/ˆc .a€à܃,Ò!„X¦-0!ˆLrh èØÄ~§dQP) ‘Y/ *eY/_"Úáþ•;à”7 4A ++W”s 0^3 ++Ü 41øÿÿ4¹´@”Q @¤v”¾âx@ãÿÿ ++ÝÂ_ã ¥„œ×ð•ÿÿêr’0B!†Šã1x "4qÈZÌäÊÊZÿ. £ti’ U’ûµûµFð (©(£r ++‚B ZÒ˜T&7† ++0Ã@òJ¤ b¶, .A¯wnrpÿÿê*‚?!†@Æ7\ r!`h!’ (“H!48 0@%Ñ & µdš! ++ S’S’S”S mS”S{–(æÊèZ:BXš"’/ "$ß[Ù;TãULß7Y'Y6 æëfûa]f /UÈ´G$e 9h&ees  ˆê”° m4/uˆÇÀuô˜  H ++æèØìBwœ¾4«{’{þ/+u«0ˆ‹ƒD¹D‹»º/ ”å‚..àºp÷* y¶pM- ¯+0(0£œH— SH"4TG0h/ñ–O šåBÉ ++;/Y ŠO8O“LB  f.## ++0þ!"f©LK0 @‘!– FÆÂÜHææÒÎjL_o0Z(5/!–µ ++†å V B!˜8–å–åÁiÂ!š ++0˜,åâ˜måž H(å6œ$¿þ¦ ; >ÿÿrž¨¸¨.Ú~?m\?8´P /CPÓì$P P µ PP¼/õL/L#t/@Š¸,a(_!íÅG3­''ƒ(Þë/à6·°§§!·gà Û!0Tk/ df­EHˆfŸEHÆ„®…s€å 0€å S ++}Ó v…:v¢æ¹#0žSøS+‹ž#â ) )& ) ++3„å@ ‹h¦ ++@IÕÖ†F ++ 6ïë9^¸Òw˜5./àž ++ ì Á*øoìèÐC?šHuZL|:ƒ °§—  ("¶þ?Í ÷e8' /à<O.ñ </¯þã¤1@$Oø*Y ++hRüE1Oþÿk&M%A–@,þÿêdD*þÿêÞdF¸¨¨/ ++* ` Hm ^ M' ¤ >¤ ,¤¤¤0_žå& yë(ÛÍ » ¬<›"4 (/:ý , O.‘ , /3ý     ùh&ÖüŒ"Óü /Ñü "°ü O®üÿêì *aì .qüÌsjüÿê¸‚Û üÞ&rQˆ!· € +VT+•,Ý¥*šßT%œ O¨kRPPÚ!Öybr’ F°·P‡0É@qJ%xŒ*A f ++ =a`f&PÊ6&! ++(!H-ˆßéßž–UÖÉsæ -"æݨæ>F ++ Ž T!˜W9…”ePz!Ø,`!Ö8ú UVSj!ØM—(Ìpb8 b!'"/!ÐôcüIB!Îhú(F"Y e3Ê!bfS5%"S”"0!Ž¾?xXÔc0nuÚ è }d¸b QåHò5åêcm‰òcIcqÔ3 /U̸ã±`ʪ$ ++¨]AoŽ#8‡ Xm4Úÿ(òdA( HfèÒ!8  ï‚ï ŸÓÉ"=q"à—aØAq9j'] xçš„o Õ&º¦+q ++BBü khä  Ç"¹Ç"±Á {–P €€…7€€€Ærô“%!pšL»ïjØ -0«ƒ €J=Á7ð©q†¥à ++€ $šåçŽ $ 1 `Šsæ%ˆh(ªæn "à#Û ',áô)“1bÐ) !ž “0 ã 0Žå@ìRŒ .mŒÇø ++†¥cþ .å(OPHe1(Êh BX Hkùðv BL L F„@B)uHJ&ã ÊìÂØ*‰gB4& LV"%oZæàÊÆTa0^3€ªiø„!â àüT0sÈ`` vUvGvv5Û'v vS‚å dyvv“6 ¸ø ÎÍ3@€ €¨)G*ç1¼y ¤Æ/áÆž˜† ê_vÕà˜z øúN"=D/ ã¹ÿ.M!²¹â¹‰hÞ  À±‘ê¨ö@™ ++þ5àž( ꇧ .‡§D,e,D" "lµã" [U3’å&õù IÞøi "  =pž6 5*3p€v€Ø(" .Ür*¡.ÊÌŸ 5d0‚p €åà€â‚*@B ++2 ++¢é4È%yq±’ â‚® " ++‹b ++x¨‚úz ÉJXHQ:„¢X LûAŠbE !ÜÏ(GìÀkÚAˆ þ:=H7Ç…t©çÚg ì ++0v ª!Þ ++-»k²!à ‘z´LÊXÞfLhâ™Ü äÛPâ8 Z 2>h?ä ++ ^u$ âªHX)æE.è‚vV1´M5KDª£ ™,3šåý_ ++Ã5TÅTª?N0  Ø“2œB .Y”³É¬Éeš(à] 5>%nZ½#|YÊ!æÌJzO0BÂ!èV˜”€ð  ø l ª0˜" ìzæuk$-0’ƒeæ0VZ; LV;  H| ã”u†ZQ†å†^Ï›„†¦ m5 †K ¦O IO t¿% ++­Ÿ´% GYǃ }+qº˜m.o¢!€¨œ ÑUhî Ø› Tœ Cœ 8œ *œ `¬„   ÏÁ´ e´ ¬´ ŸYì  µ ®n¦•iž ܬ ŠŠ. qô&@@á* ,ÝF ä  ++‹€ë±õDnè ++‹W¡Yî‚ù‚(H :ê$< á,=3 ù/Fù& ŒÍ+±m¢m.¹mZëSë'ºJ‹HV‹/0Ñÿÿ˜êØx:h:`:QO ++ /=\¹ úzš‰š‰# ê¬W=|Ζ Í–’‰$B@à áì÷ °ã<TA<ø1°Š@BÌl È9''Œ”xB"¡h G™ "’æ #€à‰ÅÂ!ê BØ8ï4ì‰Z!ê ++ „ OŠ!ìȪ¿Câ!î¿ ¿rLX[Bz Ê!ð ++0ûQò¿ƒ`HäÊÂKGSÚZÜÂÚÂWôP9<³.©ˆvîïDíDŽ?|ð\F/EF@@šå M3AOO%ðšÜvÏÜv)4Èò ­¶O@šå©¢F ++‹#F0̶‡]%™;#_r!ô];z$æÆÐÊÚ¦ve v0Ý¢„/@ +hèo—ê?ß@؃Üc>cî†d$] ÒÊÊÖ|s )Ô# PáÎöay¸ ÜêØØaV ++#:Rmr…,)‹‘$ 6ÙÍ!äÊüï$͸V ++q… J&zÅ2üHÎ`JÎ2$HdLuL~Ï/H /´$ûj ˆñ,HÆèÊZÞàèÒÚÒô %CÒÜÌÞhx/Ø 9ß‹1 Ü4 Û‹ H7wˆë‹÷ë‹H ¨3–©F /Ï-DyyMA1·Ì‚uAß-Iy¹rP.hº$€º¢è ÈÂèêÚZ|×í6$‰šR¸ ˜’ÀÀPÀm?O 0’å0{O„å ®Uòl‰02z,E€ÒT™€!ú .sí=uA9ø(T€szý !øúa3ü;|ã=Y‰# à ‰ÒcpŸO” i³Kë‹¥jB!þ  8³ø %<| ++"m%ž•ÃH.Á왈’V€Š²:043 )J„/#„CRB@!ü/` ++²xû_š#a "8t ð ~<} ++Q •â qâ ++Q0 ++bÜ SB|OJú#O)(ß¹ÓÓ!Ú„Ú2˜ÇÀ è (ÎÊÜÊ䌉\ÚÞ€“™MÇÇ/ á%mÃê rB# ãE¶uO¥ ++Ö +]Ö00 á²M"”DWÂL„À.z2÷À.‚À.‚–sÀ.‚À.‚À.$‚åÿ OÒö-’?¸"Iÿ @1 à’×P&Qã/ôA@, n&  ++ @Á†ý\9VXªçF? “º ++4¤B ðC!@ŠrV&â ¼:>.ÑPÇ>%PƒPƒPƒPƒPƒPƒ®ŠPœ‘- “^u–' 1“åP“P/~P£&k[.(:¨«Pêö2õÏ ²'õ|æôC)L•|1 ”H· ‚tj`5@ }ip˜oƒå @ƒå× × n2 ! \¨«žæn0 ãÒ÷ H[|=Î÷¶ÌC‡¤/àª(­ðCp"0ðèEl*Öþ´X/àÓ äG+!0šX¾ Yo ŠåÓþ| |ìÃÈ_ /=$.ù·J.Jþ°Cþÿêf’B# ++ƒ0H «›càZÞêèÊÊ ¨¨ ++¼•>åòêZ£ ¼•)Œ2 @O52b&’’'@ ++# ++&’óò;RpX9<Ý ## ++  ++$€÷7l ˜lbÆòÆØÒÆLN„æèäêÆèêäÉx* ++0\*±Ò0Mgþh(# ’ L ++0j24ÒÚ±ôl@ð¶[¹åO(# e =Y ++#; Lò# ++š ++1@ " ‰&z~Òa""àöžL^!0¶#=ß ¶ Qá9Ì÷QÞ ++WÞÅSñ&s£-ž\4ž\"/òb`R$ò è••! Ý¡0 3’~h,Çôáùðu$ ;ï‘KB#à "œAA$#vBÿ¶"vâBœBBp#(ØÒI?Ø8XX"œÿ±/#Z/#ZÝ´(HÈÒæèÒÜÆèZ—æWB /Ð "÷3>%+Șà6Í ++~k¢ GžG uG îMjê MPÅPÚ¼?K B ++Οz ÂBx‰kH¢#x#ï”18 2Ä—A£B ¥¥Ý—×qY—wqÙ ö(¢q/”™¥X.ù|¢/¸ ! ++-  -4‚!ö2 ++&~ ˜˜D:zH>0~ R/ð " ++kk©’©2@’SG,0 ++z饈8# „z/ pK.,5•8f—Z)ÉÑ6)(OPá|ée_îÿÿ ++ëà/1à­gàÔ?žÿÿÔ2˜ÿÿÔ¬_–ÿÿ ++“,µ ++ ++m#Tt­s“åàâœò9° $,/A÷ ¤=¤¤] ¨-¨¨œÀ# Ý夠¸.Ó4e>à:à%ˆ.½‘ œ$Hp%/( l/UÆÃ9 X ,>q°—å —¤ eO:¨±†å †å °†½Y&àeO HOp áÝ ++ & L©6"#©6Pš9y$; ++3PãÈ X <ty 0<:¨¨/Ù„¨„â ¬h! +I ‘ ")S(Õ ++0¥`/ àx*0øÇ=.Ñ ø¬h ô¬h€~JB#(vj1¨ ++û ú Rp á0%5 × ++6p’ CÚ-—$$ ++pr;? áL‚v" žº½>k ß ½>OÙ × - Ÿ#× ._V ×nS*f/@û ¹6)É6ßebA?ír^öûm8 sú @" Fy~z ‘@,HHy 1#&ÞÃuråpÂI% ++p6(§7º#¦$#(8GRBö{(&*ñ0*XB#* X ìfZÊÚàèòpˆŒ ÂþÖ&êe'½ ©d-à“Ç›® A “å¨0¬y$0í ì¿›A¿›:¢Y¤ ·¤/i¤ hhW”hdöl?{Ço±"0r&}:"QÌ0\ 4 /q | x_x¥xVí|Á $º¤ œ©='q\!\Ñ6\&ä/‰ä´ä/Ñä€FØä,HP28Zl.5,@^p-€¢#*(2x`>Tð(l#²sº#*¸(C2„Î!h$1R ò#*ø¹'˜+ºJr #,¡3 èXÂÆÐÙmmä-+ —ÝïFD~ž è•Ñ" ä-7A?Wã=)# *8ˆù¨G 1G¤Éø±ø/…øÖ‹ O&ÔOÔ &„BŒ/ŒÌ# ++ Xé³sµÙúÝuuç ++ t,…@Üíܱhª…3r.˜Å¶2#,x˜‚®C"#,.%°Bf ˆ?Ç%hž,Š®0#.oQ“¨ ÆÞÚÄÒÜí/ŸA <&;U\õFõ5ow÷I žM³| «A Ä<ýÀ”4 ,D7 m-Ø.Iغª ++zQgºBØrû<ªXŸ6$Hw'#.`û¾ÇF ++&)3``Î!°9T€â!'8{&zg ++wH.P2ò€‘ ++Èšc–@²°°é•³ ++%šL æ2±)¸?š&Â)µB#0  èR2"ÀÍÅÇÅR fI j/œåj œå I µŽ<<Í 6 œ~Àé"G ~ÀˆËæ—J2S  á lô ' %ÖÒ."Î\øSp* Ô) Š)ÌCÓEYE+,S° á\Mè†u!³Rã @&[ã”ö ‚œå—å@&H/0Ú. àµÚ."@zH"0Þ.@ˆ õÐX° €å @€å  árŠz1•="0Ä2›À>/@ön N2&°Ì9 ›Ì.íQÕ<~ Ðj /ujÀ&);1š.J`Jx8! ++H ` Z#0·à´ ÊX‡Î¢#08!:/ B#* B#+²Î”&#ÊPxB#2¤„6`  ++7ZÂÜôˆ}4^/?“åñ¤ /¤ <=9Pý Œý Ѷý Cà“åj(d ' /!Œ ô4Ú:Ò í CÄ0< xg“ù!?Õl ¦ùd@Ù  `| R,8¡¨½8¶½ Tj.pÃíK#2p½ f 2 #°( Gv& Z*ˆ'ì)@ƒ:##&0L& ++4“&„HÜÞÊðྠ#6Z('0 ü$ ++Ç#ªß—#/)i/æ+‰æž %‚ðLCÔ¾X*#6æ%aŸe  /*N)qkR#8]3/¬Kz˜ÿÿÿÿÿÿÿÿ:| H* 6r7 Z o"@"  }:& ++B(# ,BñB È  L€Xâ ++àŸåêFžå`ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/ábqó JâèÿÿêR ++æÆZÊðàÂÜÈ ÆêääÊÜè HBb8ú"eD, £ö+žB Mx  L$à™åZáÆ*€Xâ· ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH/ TT½T˜!/˜?/U˜/™˜@í˜0/1˜?/…˜/ɘ@/˜//a˜?µ˜0ù˜@/M˜//‘˜?å˜0/)˜?/}˜/Á˜@/˜//Y˜?­˜0ñ˜@/E˜//‰˜?ݘ0/!˜?/u˜/¹˜@/ ˜//Q ˜?¥˜0é˜@/= ++˜// ++˜?Õ˜0/ ˜?/m ˜/±˜@/ ˜//I ˜?˜0á˜@/5 ˜//y ˜?͘0/˜?/e˜/©˜@ý˜0/A˜?/•˜/Ù˜@/-˜//q˜?Ř0/ ˜?/]˜/¡˜@õ˜0/9˜?/˜/ј PŒl \&À$@ÿ/á*5df:ûÿê0(ð3ÿ/á3ûÿêÄjB NN¯Tã†Î zóPR *ÚÒæàØÂÆÊÈ@Âêð@ÖÊòîÞäÈæòÜèÂðZÊääÞä0BL *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎXB$?úÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ7 ++\\\ RèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P« « 31‘æòÚÜÂÚÊæ…•R ++ÚÂäÖ’ØÂÄÊØ^àØ«a@ ++ ++ÿ LTæòæèÊÚT HæÆZàêèZÆèÊX’S$'ðð¾  ½Çǯ X°rzÞÜØò³³³/ò³rš  ÊðÆÊàèµ µ µ/ "µrÚ"ÂÈÈZàäÊÌÒð¹"¹"¹/ R¹r$ÈäÞàº$º$º/‚ºrP& äÊ… ++µ&µ&µ"²µxð @¸„aŠå²"X²ˆI ++šåÔNàây,‘ JâTãhP#ÉP/P'.PP @&ð ++ à”å ”å žå0žåå àåö`EâP…â,à™å^áa:àHÌà†å 0†å0 á,îQ:†å †å DL,4, ,$xò ++ †åà†â à†å†å&à ãà†å 0 0Š:@ á`ø„åà„â à„å0„åà„âà„å$ñà„åà„âà„å „d#$ð¼ˆ1ÿ/áæÿÿêv _0ÿ/áÕŵp_7ÿ/á¨A˜ÿÿêÌ0Ì Ì v0 0    0 _ˆ\|#/ <h # 0ìâ P2ÿ/áó° ã _Öÿÿêú p*‰p=¨þÿú ¡ <PNŠZ ó (ÂÜò*ÊÂÆÐZÂÜò , HL ƒÈÒæàÂèÆÐ&(7ø(( L L(* , pfQ) 'Cq·jØÒæèÜròÞÞêèàÒÜâÊbäÊd 01 Á0.ØÞÆÂØZ ÷$Â`ìäÆÊÈÖìðîÄÜæòìƒ . 8 1, C & € wØÊìÊØ  . d2"È`€ZØÊðÒÆÂØcÚO02 ÿ æ64$ÊðèÊÜæÒÄØÊD bÁÁ?81µr ÆÐêÜÖæǶ4>$ LÒTüðÕ›ô›ó"6 °8ÈÊÌÒÜÊZìÂØêÊæ 8 L: ÞàÂâêÊó: L<ÆÞÜæèäêÆèÞäô< L>äÊÆÞäÈZÆÂæ2Ô> L@êÜèäÂÆt@ LB:.N†ZÈÊæÆäÒàYwB LDRÃD LF ++ÈÂèêÚ°F LHÌØêÒ«èSH L ++ ¤ ++ LJèÒÚHÄJ LL àÂäÊÜ2rL LN Ø ÔN LPÒÜÆØêÈ=SP L& s& LR DË$êä*ôR LTîÒèÐZÒÚàØÒÆÒnPT LVDâêÞè0ôV LXHÌàZÌÒØèÊäZèòàSX L" q" LZXZ}qZ L\A"ÈZës\ L^$¬a•^ L`ÊØo“` LbÈÞ°b LdÚÊèºÈxd Lf&Ž ++zƒf LhHÕCÆÞÜìÄh Lj ÂææÊäôj LlÊÞØZæèòØôl Ln8ØÒÄäÂäòZäÊâêÒäÊÚÊÜèæZÞàèÒÞܾôn LpÜÞÜÎÊÜÊäÂèÒìEªp LrØÊèñsr Lt !Zæ¬#ÜÎôt LvàÂäÂÚÊèÊäÒôPwv Lx,MÇx Lzöz L|"ÌÞäÊÒÎÜZàäÞÆÊÈB»| L~ÌÒØÊåt~ L€ 9eÆÂØØÂÄ-߀ L‚,HÚÂÖÊZ$§‚ L„Úêèr„ L†0³ÜèÊääêàèæ-%òz† Lˆ._ ¼sˆ LŠDSŠ L q LŒm 1³Œ LŽîÐÊÜrŽ LMç‡ L’ ++H$u’ L”bÈ” L–âêÂæÒm£– L˜äÊÆå˜ LšàäÊÈÒÆÂ(qš Lœ&îÅZÐÂÜÈØÒÜÎZÚÞPœ LžmØž L ÄêÌÌÊä*š  L¢ÒÚtT¢ L¤ÎcØÂÚÄÈÂô¤ L¦ÊÜÈÒÂÜÜÊæýr¦ L¨"2ü ++7°¨ Lª ÆäÒèº@ZæÊÆ;óª L¬àäÞèÞÆÞØq¬ L®' Œt® L°7Ú4~s° L²8ŒZrUZÆØÂê–S² L ¦ L´ êÜØÒÇ´ L¶äläætÍĶ L¸ ÌÒÊØÈ+S¸ L é2ºÉ4Zä胺º L¼ØÊèT陼 L¾êÜäy¾ LÀ À LÂ$ÌÂæ;äÒàˆt LÄ"Q ;úÄ LÆ"ÒÈÊÜèÒÌÒÊäéÐÆ LÈ$ÂÜÜÞèÂW ^UÈ LÊ´AÊÜêÚ^Ì¦Ê LÌ æÊÂÑÌ LÎÊðÆØê扫pÎ LÐb5|àä8wÐ LÒ.xÒ LÔ ++¿SÔ L$ “$ LÖz|ÃÖ LØ ++ÈÊØÂòØJ ++´ÚèÞàÏû"ÌðÈÌôèÐdâfÐppìÈZÂÇ 80Ç GÖÊòCI~Æ ÚHCB L˜ ++r LÜX pèØÊèÀ3ìÁ~H9 ++PBP ++( %È1(êð ++Þàâäß ++? ++U ++$æºTèêµ ì ¨ê¨ %¨+'š„`„<î ++0^ÿ@B`8*ð ++B((‰*ŒŒŒ#âú8W`W[H ++á á" ð  Jâ @Šå àšå^ã& ++ " àÉ}}€&Vã0 ++˜± ++à á `ž@ ++9_`ŠåoŸ o`œTãæÿÿ…hd'( d`5çÿÿü1 0žPq à“å“ o.,_Ö>z3@zvæd;šÁ ++ö·7O¨ ++Š%.}ŠfÚ(ÍP$P¾7" lwº"žå,#ž8›@ ãO¢Â¡šåà†å @†å‹w cñ~¦7ì. ìHÜÿÿ>%¸}Á¸S * HI³BR>4’ü " ž/Pa9`faAì> k<PÏ„ LæÞäèZÊÚ2"MZîÊÒÎÐè"4Î~)e" ++1äÆ>**OR LD  ++Í~3 ÷D2¹TiD~"›#¹ :ÒÜìÂØÒÈ@Ê?@! £VT#ì$ ++fiH (˜>7P–> ºpT+aT ++Hbd0X(èSâêÊäòíÂP ÿCgD€V5;X!8NX *Zô3'PŒ40à P\ C=X ñTã  å ‘åà€á˜0P·PÚ@ ãñA×"/ŠåÕ&*…¥üÙ& , €âBb8“%‚\ B  È gF*@ Ç<)2@ã s1b&0&P'*P'Ö5 $Hš5R'nB b$p$ dR'^R'^ ++?` ++0,Bâbe´&?P¸®« ¨DNxB`,'O²dã ΉÎB(Ή$'b‰hv !h‰&‰þ@/í‰6aR”å0Š!?!àžÝ%%?% “”àŠåà“åmàžåàŠŠ /¸å=Bzø ¤<? ‚#ºu0˜40SÕ!@`0`/ ^;.Ë»(š(‰û ++y(lW Oàšå ÐȤÝ#` Z´> ¬ƒ¸>´l´[´ ++¾+q¾´ :´ U#Ù %!¤{ÏT¿( (¤x/AþU.¤¡B.ûý2vzÇT3fH ®B ظØBh ˆ7 jùZ0 á d_dN*Hùu2-};"0i[8 TP"P(!Ö-PŽ&!àš„ 1@”¤ ¾F.©,¡yš5²æ0 HQ@pÑ ++{jh ++ f X X„ ° óø ++j@pHÚÂàTn…\r ++ÓŸlæèÊàÓ!ñ XìÂä|ÒÜÒèlRwÆ (- % ¤ ÞäÒÎZð’‘wbn°˜ `/XnP™7n°õ8n0F, ++p½ %8®C0p¨@M’ÜÞètƒ 7rxet«t«7t«t«t«€ _!Jv€ b€ by(b€ $)’€ Κ4 € F >/-€ [2O ã. +Ñ. U: ÖÂлU: iÁXB† GÀ ++„S :&0û5m{/\ka€ îNpOãX)ÑX—X,/)X/X+X/ÑX+ÙX Žr6”S¸;„- :¡zŒ/@Ue†0à áX<1^Á"1 e ++Q Þ6¯!8™25*7?0–å¦GB ­Ø"1® È€:à ã$~ ¤> á ŒB":àX/šåXm×´ð¡  az.@"9YÂN|à`(/©`"C® 0`ŠåØ^9$.5ˆ „°P…PlP(ÕPøK0”åt ÒR©Ú#įð9%XHXt Àl1 pš9ð—í?”\ ++Â4¼œP¸/ `¤ ÙHsšå `šå?¤4!MzlDµp?àžåüàÐ*Ù " àÕ\`/9 ++`=`0™`€ ++ áÔ È"Rý6?.Ù ++ " @ô84@Eýÿêl/ |3È ++0 ”å ++WÿSãW ++ãA°&°/‰ °@Â7€Sâj|¼¼ɼ §%x / ü´E? ãP ¬.Y Å ( ãÈ /¡ 6©ÿÿ"Ñü„F.Ý x ++bšåàÃ& +% œ0àšå .Á #¦ü ##–ü ,<4Qppœpü° °l“âjØï(# €Ø7€å¼1"üÿP™Õz | Œå",C ãš[U + ,8 šåŽ?ØÐJÐF4èSè"1èûÿ€/è/”èñèœ/ c".=´" œO¶ÿÿ ++( ( ì&(/0˜Õ˜.“ûÀ ++Œ¹y: ++‚Ó-RVxÖ-€ÿ7p6‚¾bì:z°&![Æ`d ++ò%$g²mT! ì 7f&ìÊl ++ _ÊÚÒè9?ÄÞðVoÂààÊÜÈ  ++K Lôd 36]–x#¨(è82Æ Ù,*h¾ÄÞð3!pC|jü£/~N@z­¢ˆÂèÞÚ  Z ®`X|@Ë&ˆìW ”>Ø($r$ CfN] ++—Ü3 ´?~ ++Pnd¿ ++lüF ÔD/6E€—X×PB¤  ìYX0¶:$¥:$ ñ*qõ"‰scJ] ™ *Ù‘×õ X/1X>X,‰X!E Ò$ ™˜wKÁAµD(¹É.x5 ++Q 00”åè/Å…YE/!0šiDY ++ ÄgÄ*…ÄQ ++½ ++l)%I”G^â"Y ++Ô ÕÔ ­@ /e ++áe ++.e$Ìÿ/F/ ãa ++/© 5¨ÿÿ ] ++áR/á] 3/)]   äocn 9/á +/! ;/q //µ "þ /íi 3/5i Ý!// W//y ++.õ„J#}Cþÿêprï &_;.W/€%7./¡ Q/à*# Ö# ÚœæP qPhP(ÁP4P(/Ê Ï'J G`°HÝ+à´H ^êH ÊÒ©|Iå€q!à”Ý %íMÜMÁ ++P/=ò&1 ++ µS&^ãZD 8† îöe—. ‹+þX "šþ…;‘4. ‰;Q.„þXr}þÿêVÒ"* «#"`Kˆ˜ rFû~/( ++d/({( ++`û-FŒA[üŠò„IoüŠŠ* ++xÎCj¯Ž ++æèêÌÌ‘?Œ ++0€ ++ÑŽ@@~Â) ++xp2I’Ò_ÈòyX‰Fû<ž?ÈÉ(.’*!P³'Q*”• 0¸Ä&hǹ'$ýtËu/˜s–0B”  +(0gPB8Ãb7Øî'ÓëUØE‚Y¼yg˜ ++Plm@º7Û xœ P 0Ý &á ߤ(̤(E?''M¹ {µE\Õ\ ++1&S÷8K-5W'0x0#†š\6Á ++%/…æA(/0ž'& ¹E;$ /  ++BD Ø5W|| ++¶ è7 ˜1@“hç lñË'W(G' /”å1ÌŠ /™Ä!@zÿÿê6z×}F0à ?°±;¨±;" ·;‘ŠÌ?šA&0O. Éï?.;šPÛÉø 7š ++0dRJœd/¨`V`ž`Ïž`  B  WbVnn¡g$bq ++ “Ñ2EWb!0hOá“Tcy¹TXcX܇U3 ++ÚC­ƒ`8Š …8åh´¢ØNR¤u0>+ ® *® ®@¦h0`Eh0=b,h0]D5¨' TÃó'¼Þ*=(AÊ? ++/l` héC_Øæ&?¬' ++0Ï2YB¦Ï2HZ ++† *† R¨8( LD;Yª ó2&#0 áƒå— ++8Ó ]õf]6p—^)pÌ©éOšåÛs ++’B"Î`]CBjªH% ++Pl)$Z|/M/lb/ jM"^®§ŠØÖp ¾X >¬ /H‹râŠÄ®­8­X-¹#ʆ8ÀÈH˜5!²O´!?° 7€*Ô 8ã²! ++!€hlç&°,¶Ì´Ì XÌxÌ€¶,_œ & ò ¸&ϸò ++ºò Ûº È–ÞS{# Y¨P,ðm ¼["0Ò^;ä7¼ ++PDXG†ž ++ÁRÄ +° ¢&™¯X8#$"¦å/—ãš;/mãš;/ãš;¦ƒ›(iPTP(¹PP(. P/°P'YPfP(©P5@:aT<:Ù€9(%Ñ $¦xB LL/%L« ø5A ݳ(/a]gø/ ø7/Yø—/ø7/QøgIW+#Ì&ñ àJS&© EH‰´3[ =\1 :<{;/L#¶_VkJ|/ |7/Í |h/0”ÐBJ *Á ++ô.Zý˜SýJ?²Šº  ++4º ; Ú p¾d1 ëW Æ {%‹1%`~kØ?¾ÍdÍ lÍüÍÂòPähˆÎ öN€ÞÀÞ:„ /fnÞ"9´˜(ÈBÄ•/?Æ°Æ„ /fp°&0ª?È¥Eøx­J /fr­V£"©Ï /h`©+–`¢€hšæ©JYlJY hJYlJY hJYÊÐJYÊ8ÕÂÔj¡?j›5 /hfF,|LÌóÙVY+šÄc\ÉjIJΗfL–o–o(–fL+ÿ¯r*V­V­V­-ù¯r*t­t­t­1ñ¯0 ++Xˆ±JXBÈ1ÀM`  é˜ —N2O&  ã›< îl.)´¾ë ++·ÐMæ`BÔ  ¨ Ö@TŽAqà—åQá",/0—D ++BÕmÕZ8&&&3/ Ä /l=W ´Vx`Ø)&'a5Ž0ã8“XŒ5¢â“ŠÐ=ßÖÄTðÜÊîÜÏ ++Újl_ìâN>/ Ly ôxà% ++.Ñ”ÒÑ%_ÄüÁ6Ѐ¥—OÒ ++h•+y ‚Ô ++(ú0ê5pø âæ Û §Q& 3³3"¢X 0O0ŠåOtX"S Jâô'O\X)ÕXF9P^ãGCSãEsB/«O žår° ¨-2 %0ŒZD¯Bâ8P`Šå07šå¯CBCB` `7ÈN9 ˜`@ áÅžO`šåç±o_B$15d|N7 "à|?»ÿÿÔ*/Q|sP| / |O/q|G/Í||"&|/d+/9¼hàä/Éh+¡h ™h‚h,/ h—ÇР0Ð_Œ.´"àè "¤.§þTëb?È'ÑÈ TT3T‡ ‡Œdv=¸& á5ìì8ít ê˜@˜* ä8<(a@ngÿÿ ++ À ¬ 8¼ëQÀ)øí´ ½´  ´8/üý´!DÚþÿ ++õ; ÇR›Ï ++›oQLi x ›/ d\Û ++ L/  SN¹ó ì÷ ‘:­=d€dÏ o á§KŒ/“Œ&mý3LŒ/™ ++Œ/0€ .ñ ++€.MýT$zFýÿꎊ¼'R®Ü àýÿ°ðÜÖØ­(OÚ(%@X¾Ü!¸€Bâ PÒcCõn@€Xâ.¿%šË3@—åœ+—‰.   «¢~å 0åÞÇ%«ï%#p›3Ä„ L¬7&‹½f7òÃN¾ ÂnÞÈÓ .¯ÖäÈ/Þ-Gà ++0² XÝ,”â4%À(&).& r*Ä0æ0ÿ1Ä0Ó-?ä'Eæ'W ˜?X|*]Eq% ++”E¸hBì  ++Ð…3D …0Ü p ­1à—t 1à—”@à—åH"@ ++—å—å` (jVGO ŠåE ºLq® +?šåÎEÈ ’Bè  ++ükƒiµEbã‚M ++ —å•R€#¡q—|9¥l«6;SéE¨+UB/åMWU$¤vÂm_ åÃö1(È /¥ÀOšåž—¤4%J 8ä/: ++ªzigbè ++0ƒw€Bê ++ ÎRÊìÎœ?0lÆ&H C¸ˆBî ðbwF(Šå:>I˳!0—r= RKš ^ㆳSQá''sžå 0“åòj.Fq ++ +±’ p*’ .àæ /pŽÎ ¶lZ  ߪ ª.\L ’L˜Êÿÿ@—åö0^ ÈIA:n›zî8*q TXBô!?!?"0œþ ++ äG9 9 ´ ô­ݼ/¥­0!?8 ++ÊI mbô0g ÀDsHü(éÄ ÊZ﹟ÞäÂäÒÊæXþ'@,&¸{%û:†.'¹ ++¤™ë:óë:3ŠÅ ++">úI°I_ö L ++(|>Vy û`0 ++ø/("P)'8£G3ø<(@Eteþ/¾šqº09<qº ++ bâ1+‚bYú Lº%(,võ'hL?ü6'h)0vUX‚Eþ©)Ç)€Ýk¢ ++ ãdx ƒ/ÙÙ Î ++"¿Ù  aÂ; ¥ñ"­ 5  µ Å ©ý! /1©7/}© -”DSZ: d Ut }ªç1“uU% *5R_< ,Ð <5 Q T\/ ž% ++ _9/ 9% ++ }ŸLŒ i\2c+c><ªOuO ++OÎ=A°Ñ. ?à•m˜8™@p(™³/™0D' ++@ó/Y êJh8h  "š88€8¡ €I€$q 1–8 xq Ùu ++</Ù<#/<#°<m\qj(< ˜Ö8Y _ ò ++'˜}.Â,6 ++I /jÿ1®j…&j,j›F$+új¬÷Noj ++ ++ `5 ++®4®˜(®4/3R³4r æ¾­¾­51ãr*Ä­Ä­Ä­7)ãi  *ãÁD¸/©GH7™'!0ž™/àš.Éi‘0âSãx̨YpâSãtþÁŸ[˜04hD ¼X.@‘VX‹…¬)0‚ìjiðë t­~ß4  [ùLß4î0aìYâ ·@ £¯4°@7 * ¨HA»52Š XCH x ‹S N7 ‹S†‹Sf ++|bkú../Šåíœ%"v Þ1‹*ÅÍî´   L /šÄAòÈN  ã :ÀoÞ ƒ Çñp á‡å 0‡å @‡å)ƒ‡Ž.ð-¿-¿„r}rñ"ŠP(*HÞàÊÜZ~™ ÒÜ2íàZ˜C8.H{Ÿ!²Ý!a $ÆêäpÚðîDÆÞÈÊ5(ÈV-ÝBäÊÂÈ`€B}" hP²¿ÊZÊa„yàå pž.“;YS6Tã+h  ¨£y`¥L"@–½ÔÔP ï‡x_¤”.œõˆsž°€*QKF&®š´ *‰ä«Áà1¿B@¶÷ Š@ ÆØÞæFqº8À }* ++Ø J J'Æ(š ßú¡OàÂèÐÇ DP HwÝŸâ—X ÚHÁª©+bÊðà _ÌÜ&`Ø%UìÇ ¦  b%:"0*Eý¿ ++O ++/ ++PÕ êŸ(PÕ 9}Ú F\d wæÕ Ý©Î&)ža•…‰…õ¸‘$Õ‡­OÄP#.%PpO µ(ä= 9 ++q à’å ’Š"BÚ dO%/'Î$`iÅ0ÍÁ9²"`w&L 5 ð„ ++# ª×ø=Ô# °Ð€›å à›åñ˜Ü°Ž·1Î##ì !ð,x0™/ý0„4T( È"Ù»øJi ++#µ\<ñ6‚ ++ÊâêÂØZÐÂæÐ ++ Q~(—Jà.R  –!^{«*?C ” ?ÖÊò??>¤?¿}AèäÒÚvB —OZæÊè%¼OÄÞÈò¦O¬*@ $ ++a•Ð 8`¬à ++4ÚÊÚ"%}!ÒÆÙt~Hf¤DbJ d@Ú $Ú(ð0B.  @– ŠåpŠå0Z)”( º÷k. u¬u¬ÿ5 è¿ý&&€p%jŒ4šåšµ,!žZ̯; ++|&O påhü ) ++g61šåè~Qž@Ø ( ¯? ¡Ç8 ÷  ˆ=œ1ƒé¬@à€âÛ/<€DÆQ'/-G¢$&”ÔMøÂ(9øÂ+ ù‡À@’ET G Ü (¬(vX— /Š€ ++$.!$ïjh¼/0TuT€.ìþXùåþÿê>ºB( çI ++¤-˜ñ®8‹*‹ù{Ÿ).Ñg £F‰€%/)]|¦üw! ePnP(ÍPÇ­&¯).-`Pÿ ltÀ\Ä"„„px€ÄA ++®®„å0„å (ò÷4åV‘Ö È¤ck„ = -…€ùÜ*B:¯ « P¹ã0Q¯‚ì=‚Ø ++ÂääÞ¬*%¡¯ &/"Ž ++c("qÁÃã&z~(ˆ,*’ ++s®Hs®&s®Cìi®Ÿ&$j®+hhj®j® ç ++Æö« k® $k®8fXÀ&/8 RXr(R&H^#`˜B,*e'ø } ,X5"W" ++#e .a/e±0ƒâ@ƒå‹e>ïp,°™å U°Ô*°Kâ,°‰å0‹å k0W,ge/íge»§Äà`šB*>¤¨DfÒu ++t°Lfe)V•õåv,#.‰: ++_  ã‰ ‰"1+ëPLŸµ ++$ XÙ¹Ù ÄX Xp¹œc´ ‰›)È7ʪ%GCZäÊÌ6@x–XR*`J"`/f²* ++¢ftÄ#¬Ü+Sò,©g`8.ä‚ð,8’.@B<% ü ŠãS‚_€o ++ 0åkèLå¤ /bì‚ ( /$ //½$ $ $ $ .xîøkFS©l §© ‹=å' ð‹=ßgË(—V#¼ /%¼Ošå~lw2§n ++*ÍYý½TXlÚ$6…38ˆ_ÎnYr hj$Np hÝàn¥] ¤hn0ôY%0ز_:¸N@s2™ð ++4"ÖÊòZÊðàä2 ++wûT£7›ñà¦68: ++˜ðRob< ++(M¶˜ ++˜S€o6B ++D ++‰^ hvÜný] hr$t] #j` ++> ++> ++W@¸'(ì§#ÎNuBD@V[è. ++hf rc gZ. ++ „ (ºµ躵 HAÝPa ¥©?K˜ä5XB­ Ë)_RF€ ’€’0(’€=~ì N~ÅXÒì ï!µZ[Š# ¦o ‘å à‘*@* –3òÄ &òÄ,ÞÏUÓuDƹ[Jï!7 z¶ ++?%³ê7L’÷€HJþ]9#ô5„¥ÚÊÚìL+’Âqà ON ++ P ++¶P¶P¶P?Ní/RPÿÿM_PPI¹ ÚÊÚÄÊäPRPRRR DRDRDRA éj` %Wa >t"AV2>t<xþr(>t-j0_J& àˆC·ƒ ""K·†Ä ++B [&T AHTP~"¼ü$ pn3L‚"/··'”H p¸<ðÒò`ŠßÈÙÈÙ,ϱ);‡,‡X/¿ÄpÄ«¶ôš˜ ++N`‡åà‡âœ3‡@¨†¨(r< Ü,^Ncp  <0<Jx„ñp0†å à†âã¹Ó' †å(à†â+à†å/„38ÃV/à#Þt>Çz þ¯f$›‡ÉË&p_7ÿ/á_(N:<*㈠( (.õþd#Þþ” ì™ì  ì…ð4Pkè@ ä[Öe<GÓü Óü(" ++lEt+`  ++|!$$é" ++ (²°åŽt" ++`²'-žs¿ªr¸ªr/z2ºÙG'PT]÷<ô%+(v&=`ò»ÆÙÉ‘yTZd²VÊðàb »ØdÍ ++m76ô¤þeZèG¤5ZÜ=Z LX ++HJàpòxðì0bŠaT L¨›^ ØÂÚÄÈÂ*ü)"!2q)AìÂäÒ01AÌÞäÚÔ ZPr5 :Wø\Þ ý0eV\Ý¢òøVdÚI\€”\”W\ LPj,,8p”(ü€Ûð(^‡\`Ô_%r`Ô Æ2 Æ2 Æ2 Cãðif „d„\ù2„]  ¨.‘¤â÷ ár‡^deOØb2J, îdT]5pàäÞÚÒæÊ- ++Pü_:fü ØÊØ…(ØÊ$EÒʳ½(I0Ê"l'üv²½Og ++¸%%y€ è+ü&è+!àšº ðS- žì &B€&Vãü ++˜P- ++,!`ž#å,`ð ¶?`n?æÿÿ¬&&/mô6ôìT50“´ÜT¬j@ Íc Ø*#4@4"04*ˆ4/4/M4 yY7EÊ1±d`=çÿÿ<»Î§Î §Î 3K(/à3J1ÌÀ*  áz/0l.0ט& KP@àâ/˜3@>¢’5´ å´¬¼*+!<{#›Fa@ö5Ä/à8,©8,x"0«Îxié£Îx/½xì ]ÀTxº4™<x“MÙ@z¾x0l/Ü0 /nÜ0Ô+€V5d yd Ì jüµÌ  A d *d  $< ‚U$; $Ã;öTãà ãàŽâ$àL(L pò(K%(/ ã8 Ù8  Bí:Œ2ú Tò »n øó g$àšå'à@ nwOP/•OPä,øðG0“å $"(à¿O0J ßc,ƒJ¢Ü] ,,v…/‡ì OÐ4Ÿ@Šå,0Šå0¢ìÝ 00`P@šå,ÿÏÀ/^j /Q> b A  @V H*H°L LL: B ú¨ ++F `ƒåàƒâÄ$Tƒ\ƒ„ß  ++ ˜ÊÈò4 T°.$§Ô ´“Ž4´ôìð ++  ÇS(j a „"0c×` 4ëN.Å 4ÇTL) .ŠŽÇ/ @ZÄP«M6Ä (€fI/ì xÿ°6çϸ.¨þŒ.›þxr |4@D¯Žpoäýÿ ++úÿœ ‹q<Ù¿ˆ .U.güPO\üÿêü .­ü ?üÿ,.#ÜHön ð/Öÿ`.µ`.ÂûPO·ûÿê”2 *.Šû .ƒû6!ÑR ©žèC5$" Ö ++Á'ˆ“*7¨ò h@1ˆ ++ª~ hôƒ¡RàâÅf£àåàâŒ2ؘ/‡ïÅG§G7à”¡!R 3â`™1 @žÓùïÑÑÊü1&º´1ð0j(HÎÊÜæòÚZ|àäÊèèòZÐFæiY ++h5˜t1h òx ++næèäÒÜÎZ&Š&8SXs p u|æòÚÄÞØ5TH¿ ~8Bl®ÿ 7j˜l˜l˜:n‰=py&@O?3tdNË%}hló—AF1 unQ ’nW +±ËÞÜ /é% ++1õUV5 ++Û@àâÛš«çü u}šL°<±<çT GȲrdNOpšåƒ |!a$Š ZÍrÍÿrÍS@Br 8 /¨Ù k  ++0gM?t ++ Í2 ýhx  Àý±ý¨˜—]R*àãZ,)*0›€0*•³{ *Ñ\)´k* 8jLØl A8¤A/@œ ÜÈ)̘=@š¨#9‰‰È3‚`åàâ‘Ó@å àâ#àå'©+© /!©'/]©+À©Å©X|Q©@0‚ 2#Z~B1 ++v¶ÿv¶v¶ /àÎ_ ¢xÎà^ŠzÇbàŠ>ΤQ‚>.Å¢ZUƒâ ‘'HY›ZX÷ H/ ;'˹áD ˹Ò;Ëö¤âk=d7vÚz ++(½Bø Û0B á Èà;N~Ú“ÿ <š ÂÆÆÊææ ÂææÒÎÜ æèäêÆèêäÊZØÊÜÎèÐ ++ÒÜÈÊðÂ7A‰`ˆÚ €ŠÒÈbOd|˜C';ŒŽbÆÞÜÞG /N!&ˆÀ&˜,˜6~W5AØÊèTò$~0±€ ÈÊÌÒÜÊ ñHàäÒÚÒèÒìÊÌðzM"~,%2jšœ;%~ä:Ìxÿá9Êâ~Ac„DbäÊÌü±"4+žr.~l Ö È%J!€€°f°fa°fW«.¿G5è7’ì h 'Ç@[LW+[LÒ!Âk+ (¢ƒ–ª©<“‚ êàÈÂèÊàPå'~ê4#Vë*' (Ș+‚¸+/ ++hð'ºn ++iˆKZ Éé$•A/à*Ǹ8„ÀöpÚïi''ÐŽæ.~@7<Xš7 ++SA†ï>8̸óa+9Ž¾+Oˆ­›$Œ6RŽ ++0ƒ%G‚ƒý* Iý* R3(RÓ(R3($I3(’;àg•ý*€ |ý*dS F(,6,&k±;Œ óӦÁ+UÅ;srlr&Á+ Ã;¸Z+9!ø øð0>C°;¼6`êQ–"ÊÜü/¡ÒÜèÊääêàèæÐ΋˜$ÈÒæ%IšÈòÜÂúW@îÒÜÈÃOÂ’ , ªÚªÚªÚ$K2ÚœÚÿÿ’”Ú<”Ú1–Ç”• ++˜"0š¥œ¥ †¥†¥†¥3O M‚ ++B(#0*B   L>@ ãðšå"[Ü, ù.ö+”Bö /  L$à™åZáØ*€XâÉ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH/ TT½T˜!/˜?/U˜/™˜@í˜0/1˜?/…˜/ɘ@/˜//a˜?µ˜0ù˜@/M˜//‘˜?å˜0/)˜?/}˜/Á˜@/˜//Y˜?­˜0ñ˜@/E˜//‰˜?ݘ0/!˜?/u˜/¹˜@/ ˜//Q ˜?¥˜0é˜@/= ++˜// ++˜?Õ˜0/ ˜ PŒl \&À$@ÿ/á}df(ýÿê0(ð ++3ÿ/á!ýÿêjBê )0 ™ ÄTãŠå¥ "v¥ ¦g ++šåM ù±Py,‘  JâTã"hP#ÉPð @Šå àšå^ã ++ Ààžå&^ã0 ++À±÷ ++0 á à“ß ++“åàŠåÁ’Aw ÁtRTãæÿÿÌ D<hd™ d`1çÿÿÔñ àžå 0šå0“å0Šå 0žèÀàŠåà“å àŠåàŸàŠåšåx<™ ++Bw Ü10 á@O0ŠåD|™ ++RP Jâ¬ù`EâP…â,à™å^á: á0€åà€â à€å@€å&à ãà€.||Ý|œO˜Aà”å4”4àŠåàšå ]™à žå šå˜`ô™RŸ Jâ@Šådd[üÙdœ@Šåàšå$d\` `¢|9  ø á0šå$0`$Pd[¸dßàšå á á õ[8Ù<ttQî:¬†å @†å0 á$Hà:„,0,,Ð,ˆà†â à†åñà†åà†âà†å0†ä&àT¶T<H. ¼A¢:T! ƒ(L àƒå$S”: LL… ,u,je: „UXE,5, ä% Ø Ø,œ:@ áLq„åà„â óšåà„åà„âà„å0„Ph„åðšåˆ2ÿ/áëÿÿêh_1ÿ/áÔÄ´¤”„t  .eÿqW(C)P (DiþÿêÌ,$. Ärøýÿê0”- ž<#¼0,<< ,/ 0ðóìãŒ_Öÿÿê ü8 * ++8 Š ++ƒ <ð8–Š¾ LÂÜòÊÂÆÐZÂÜò  HæòÜèÂðZÈÒæàÂèÆÐXB$(ø0ó L &ó˜ÒÈÊÜèÒÌÒÊä~S0 X•ÊääÞä@3ô ++(ÎÊÜÊäÂèÊZèÊÚàÞäÂäÒÊæ<# ++ ++µx L(q’( h ^õ ++ØÒæè0HÚÂà+¦ ++0ÀB ð < ŒTã  'üü œ.ìÿœÓ‚Þ+úÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Laò;àæÊèBâ èÞà L*$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`ZbP°°?81‹Ó ÆÐêÜÖæ  ++>ÿ L (ÌÒðÊÈr`r " 31m‘æòÚÜÂÚÊæü R ++ÚÂäÖ’ØÂÄÊØ^àØ•að Œòfè  ÎÁ$"ØÞÆÂØZC÷$Â`ìäÆÊÈÖìðîÄÜæòì©Ë8 1Éö8ÄÒÜÈÒÜÎ ©wØÊìÊØ ¶"L`&"ÂÐØÂÆÊÈZØÊðÒÆÂØf$& ò (,ðŽììÊbîÊd 88 ’ð*³e0,9 )ú)ó °.ÈÊÌÒÜÊZìÂØêÊæ . L0 ÞàÂâêÊó0 L2ÆÞÜæèäêÆèÞäô2 L4äÊÆÞäÈZÆÂæ2Ô4 L6êÜèäÂÆt6 L8:.N†ZÈÊæÆäÒàYw8 L:RÃ: L< ++ÈÂèêÚ°< L>ÌØêÒ|è£> L@\\\¤@ LBèÒÚMÄB LD àÂäÊÜ7ÓD LF àäÊÌÒðÔF LHÒÜÆØêÈ=µH LJ äÊÜÂQsJ LL QØ$êäôL LNîÒèÐZÒÚàØÒÆÒvPN LP)DâêÞè0ôP LRHÌàZÌÒØèÊäZèòà¹R LTÂÈÈZ¬qT LVqZ‰qV LX ++"ÈZÁsX LZ$¸šm•Z L\Ê؈“\ L^ÈÞ°^ L`ÚÊèÂÓÈx` Lb&Ž ++zƒb LdHáCÆÞÜìÄd Lf ÂææÊä'ôf LhÊÞØZæèòØôh Lj8ØÒÄäÂäòZäÊâêÒäÊÚÊÜèæZÞàèÒÞÜ×£j LlÜÞÜ$ÒìEªl LnØÊè ++sn Lp ›!Zæ¸#ÜÎôp LràÂäÂÚÊèÊäÒôPwr Lt,Màt Lvöv Lx"ÌÞäÊÒÎÜZàäÞÆÊÈN»x LzÌÒØÊåtz L| 9eÆÂØØÂÄ-ß| L~,HÚÂÖÊZ$§~ L€Úêèr€ L‚0¿ÜèÊääêàèæº%òz‚ L„._ ¼s„ L†D³† LˆÞÜØòqˆ LŠs 7³Š LŒîÐÊÜrŒ LŽS‡Ž L ++HCu L’hÈ’ L”âêÂæÒ£” L–äÊÆå– L˜àäÊÈÒÆÂ(q˜ Lš&j ÅZÐÂÜÈØÒÜÎZÚÞ*Pš Lœ ++$Øœ LžÄêÌÌÊä*šž L ÒÚzT  L¢ÔcØÂÚÄÈÂô¢ L¤ÊÜÈÒÂÜÜÊær¤ L¦"2ü ++7°¦ L¨ ÆäÒèª@ZæÊÆAó¨ LªàäÞèÞÆÞØqª L¬' Œt¬ L®Ê ++ÚÇ ++~s® L°8’ZxUZÆØÂê–Ä° L² ÊðÆÊས² L´ êÜØÚÇ´ L¶äläætÕĶ L¸ ÌÒÊØÈ+S¸ L r Lºë4Zä苺º L¼ØÊèT÷™¼ L¾êÜìË 9À) À LÂ$ÌÂæ;äÒà–t LÄ"Q IvÄ LÆ"Î ++ñÐÆ LÈ$ÂÜÜÞèÂW ^UÈ LÊÂAÊÜêÚfÔ¦Ê LÌ æÊ«ÑÌ LÎÊðÆØê摹pÎ LÐ|ž5|àä8wÐ LÒ.xÒ LÔ ++æºÔ LÖÈäÞà¡“Ö LØz|´Ø LÚ ++ÈÊØÂ÷ôÚ L LÜèÞàF ++û"ÌðÈÌôèÐdâfÐppìÈZÂÏ 80Ï g¸ÖÊòt ++a~Î ÜÎ ÀôTæòæèÊÚT¤ ° ++hBP(B Î †‰Þàâ°~ @B 8¼€/ÃèØÊèâX2ä *0 L x"`ææîÂi8!C ä ` BæPæ+'  ÷’ÈòÜÂÚÒÆZîÒÜȤ˜ ++på/ ++(?ÕHB`8%"ê àcò ^ Yìî| – Fð`±=ò ++0i@i£)ê ++B(³ó *HèäÂÜæÌÞäÚÊäZ| {X'>•4>ó ü ++@ôKøHæÆZàêèZÆèÊX’öB Ækö4p áÆ"bÆQö( á>OpŠåz}z"pf,XjZp”å žå¶Ÿå àånŸ†å †å0& ¼.`Àf¸.=À"`jHŒ& ã&  ã˜&°;n8r ­pžÒ— 2Š<)ø6ÅT0 ¨ž8 ðþ 'p ÈÞÚìØÊè ×¢Šå Šå pë Sy #õ› ¿†Ó/àó510„— ÛõDàÿÿêÅâJ*šåà á Iq&QãÒÿÿã[1 ++|"'o±Aà€åÛOŠåýg+aËR0šå_Ùÿÿ ++. ™ Ò]œa”õ”¼L¯L"ä@Õ ++‰°/*y„{@¸ ++ccbàŠå{OpåÜ_Ñ× s›:@†óq†åVãt–__ šå$L ’A$$pspgpk$/Ošå(h’¼©(g (ƒp  á šåÜœ@ [Üé@kL!„,ÃiHSpåL«þþÿê€)€00 á”1$šW €\içç.'l|å|ç„ð0žå,™åãá PãÆ80 át ëj mˆ"0ˆ³ˆN šådt#dÑd ”.’”= –°{ãØØ°³i#  ³ã ˜'à,p0€åà€â,3 €I €>¸  ++<0–åŒ(Ï Sàšå ä-  ÷ ßìÑä»ã~dNgÿÿêÓ¼(ÀŽdÓ_  ã| /åx_ÿÿ ++Ô\Ý  @†0O^þÿê,̳#*± ³#.þÐuþÿꂺ‘ V= ++'c.] ÿæÒÈæèÚàæÄÞÈò–(*nñ ++2"ÆÐÊÆÖZÈêàØE"æBõ:4 Lƒ ++1(äÊ5AÒèêècOÚÂØæ)¿ÌØÂèèÊÜZÌÚ!¥L Fú ++¨Ì ¨°Bü P @/ @ -—Ë £W   uH @pšåB'ç æj"$ÄÞêÜÈZWÓz~XBb8ür”@&ÚÊÚ½u8n 4¥@F@FZ3( ËAìÒÞØmå!PÙA þ4(`‹ LôxB  X Ìn &pI)Àƒ"±I)k w'mA)ª S“:å#÷O–å `í(*á)!" `j/j¹)#À5I&¥)‚  )))*0TãL!0žj1)Xn  ++ ++oŸÅ¾ X©!¾ %.MàÆU* l“ò’(’€fÿÿê&@ ã0ç *%Ø@Pu9ÿÿê,’Õâ!00l'"þ! ˆ i0 Ú!¶8 BÒÜìÂØÒÈ@Q@ØÊÌè×·@æÒÈÊ ++ˆÅìR bÆcpcc&¨ hDnåfåOU ++.*e³-1à”Ê,=Ç ++H­H ¿ $&(Û @ƒåà ãàƒåÛÊ$ù á0åà ãà ++1 à1 1àL(Ê$ Õs ð ++0âSã @žåËÿÿê@ áÉÿŸ?Šåyb¹' šl“pV‚#|¢]¡8(HÎÊÜæòÚH@èèòZ5d B0 ¼FT Ó œÒÈŒ‘Šv"Z|…s!€¨vŠ ++ n®T´&˜#&H #€Ÿ  ` ƒhÁÜrÜÁ0^Á_T:ÁÁ hÝp:P ++5À.-PA ++S2žå4žå!ž¤q«¸<u˜qq!”/@ž|¥Å)HWxÿÿêňÅ(Å)»8 ++Hj Ij~xq ã'(p#n ; q€ Tè> í ¬0 ++TG ¬*OTÒÈ)†`6 ++T…P0^'{ó  ++ FÒÜÆÞääÊÆè@ÜêÚÄÊä@ÞÌ@ÕòÌäÞÚ@äÐæ0<"® ¤æÞêäÆÊZÞÞà)Sp È™>ÂäÎæœ%.4ÌþÎnl<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdbjb ÚÄ —GDµr`&5° ZRä‘‘‘n‘ d‘ DˆŸ0L 1"Z˜!R¤– ++hz )X¥<pÚÍ% ++0õ ++3( ¯B'zþÞÆXrð[ GnGn$nGtXÂ:h,  Pê £öšö‹X5 >>6 Ô4h/šå2 ++G0”åè4è4è4&àÉ%[ 0 šå°PP ++) %RBBžå Ù} òYP šåèš/ž@èò @æQp á懇Q/ àö " šjövùvpò ¸ Öæ0, .Y,OŸÿÿêŒ/ *‘fZ_¢ (  âB* À ¬à¡næ]æV?p áØ ]`1&T¬ ++>T §DŠ8§“O Šån†ùnŸ §§œv1 /”§48Õ±Ošå’6‹a’B ™?–ÿÿÿtD–T—  o B$©}6"•$$–?&W( ++0ûr2*X BÂ* ++þ8r,HB*8ò,p#¥ BR ð0 á&Sã/^o0—å —ô6¦ÉbÑ!qO ++ “i ‚Á]]A@@¤? •r4?qÞ•Ä?™"™Ûj}.ùh Ê‘ î\U¬ «Â&@  Eõ  `|Ñ| `" ”\/ží$0b`ƒåàƒâ4=3ƒ¬/ƒåíùí± <~Nít&8? e"À|9 0 0 {9  ÄÓM ’ .%,Pãþÿ ++¾Ö 0/i^0šåžþ¬u—þÿêTÒ‡^4 ++?.B¾Ì!cXæ P0 ++ b˜8)+: O2‰ ++iÌ Tª!‰-L4 ++0…"˜n 5 H¼56B-O60(8Ð:Ðo(<X ++ØÅ#>ËF:H™:p: f$r$ ‘h@a_@è ++B3DS@FH ÷J½N½P÷/p`™ j÷B÷J÷3L’NPBåˆ8?¼Ý³b³ l³* ++pÁ0; }êR ++( Ê 8  :, ++* ¼*¼n)¼*$ò*hp Wk [PK"R‚ ++LC ++ê*ª–O5P%ÉPÛÛv ++ T: Û/ '.ið¨: :  &`?'ú@â ++Sœ¨Oh,1h ++d6 ´\}L ´ BiB=ß2P.ùØ/,B. \B\/Uø / Ë/'Höâ.Ç/åÓ(¿4¨ ’’ü ++Œ ++qƒåàƒâƒœƒXwf / b ]’M!HFô$& ðP/àï6 B¢ qšKë2’@fGæR³8œ‚<gQ<:&<.ìþÊ P®®®Ú®4 <.‘ ˜_ˆþÿ ++ÅT//þÔ <öNODýÿêØ O7.5 #þ$?`Šåä u@šA`šå žOh ++ ¿6Û¿6¨@"0Ž ŽèÜO<Ó6*!ÛšÎ! ìŸ×6!àˆˆ4œnˆœpT`H,ópåàâ àå0POÜ P¨;< ØØH$Ô H |U0 -&p_7ÿ/ᾪT™‹qZ¬ô /Eì¼P*ÿÿ ++n% ”ÐãÐ:Ì 0>V ÊW¬ ++$¦UéÙ¬É\  â%XH+±èT†T!To@ 0 " TÓ‚åà‚â à‚å‚‚Al ++@'þW``  Ò¸ˆ¤ˆŠsðˆp1 .1€è@Gÿÿ ++®W@ q@.®ú.§ús!"4 (! Lp"wVª" ®" 0$,:O  ø"opBTŒ"‹T HŒ"! ++xÒ60 dŽ"@ìÂäÒNJI@ÒÜ@MS¦#0è#Hè#D :V:‹VÆ#ðH#„¡0;X—4P·LÊw %x‹.‹ÎlT¤!$ð7l<*U„"@@, *•, <@ä@üà3 v7à á@šåèÀ( @@”Zl(iZl  >m¼÷2Pžkl¢k"ô¤! N¢k0d“Êl8h"øÎl J¦k\𱤦l Ojmjm `fm/qœdd<ÎldD \! ++mè ++mÿÿþ. ++mÿ0/9þÎl³D 8 . ++< ‡Ä€Öl4šz; ++žvZ ¾˜]l( ++O¨sl€LlÁZá^_(0N&$^²*’V¶òzäG ++ö h`”]È. žàŒ®$82XŒ2Ž`_x2'”êRÅQhu_€P2ÃDˆ6x÷`)1a 9 3aIP=5a<)’’˜z;'¨™4–w!a)”™3–ø_)"˜ÆE rørørø$ RøšÌK8ø€Øœ0wç@hR:$œ0%L0).ÅL0ü/$ Ö9,؈) .ˆ .üÖ8? ÞÍ0*Œ‰¢‚Ta/% ^‘ ØÊèäÊÆ gŽFK´ ++Kd_ "š  –(–c)–($‚(èîHØ(´(d«(š(d/pÔ},(d0TNèîG0hc/í@*`+]4I tx –  Ð!;”%>|! €x ° ™r;ì ++ .ÑTUÆ<2I.Be¿X`à ;P!B&G"Ÿ@Ž ++ËH «]‘å ‘ÆEï7"×T“ ‹•ï/!!à–ß ß*I%“G*P%IqA!ŠG(*™4rF' vG0’å à’“·)0å å“gI™A ÷2åA•LåA Ì[KT L“Ï&3ƒÓ«8ÿ4¸—& Ë Ë@à„âËó"àÛ#Ûèo*ÛÁw­žªH˜…˜/á˜7/-˜/pMp tÿ¬‹ (d1ûW”/«ä'}Pí4(ÍP„*/„k¥ì +Í ìü* ü„-m„^„(J@0 CÃoC/ ôæC Dɯ0›ŒdTÌ —à/­ à7.ù àÌ)_̼ÿ\šP.bÿèa+V*p —@.aüèuZüÿêÌÚ(,Hu XN´.ð  ÈB¨ x ÄêÒØÈZäÆZ;j&0(EnP/2L$0‘ ™.BK•u„&Pxžå áX`ÙX`*½% m]ü!£TFÑA5mx$l3 ù l3yÄܳ¡<=”F,/¡,h^ @$DH 881u!4™ ˜±= Øȱ ›^P`4ˆ1Üt0Q3/-Œ»úOs´þÿêBr?50d»p.,³æÆÂä–/, œjNç2Oœžç2¤\OžÆNYª"322 ++‚3„P SA3)úð 0' –+S¢ÆÈ+i Ž+ %Hô€PÓ,T%¢v¦vOœÆ-7¤àƦª0'€m-!|q,]¤ ++0=Zwr¨ ++(Vf?Ö!!e1À ++@…0Á.¬©-6®í-° Õ² ++æÐÒÌè´iQô ++¶èÂÎÖÊòæº ÒÈæàÊƼäÊæè ++ 6 ++W ‘DªŒ1ÂHqì0¬ó-¦®°²´.¶ú _¸ºû -Êû /¼õ[Î+b  Ž"ügg¾g6â"ÏêÊÚbÚd ")DªÀ‹_ÌÒ̉+]oÀB¨ú ++0ÀóÄóÆóÈ!'X¿Ä¿OÆÈHH94ÊI>̆Eä0ÌäÊÊZÒ(8\R2Îw  .´®´дÒ´Ô´ p´ÐâOÒÔ´_Ö¹;5ÎÀ–#i6Ö¦2Ì£e"?ØnÚnÜ"1ØËOÚÜn?ÞnO…Þn £n'°Õ¼!0=Î ++0Q%w;Rà ++ Ûp”7_–ä>7âÀ­äs ¶æo ä?'ä17 ±_ ºè& 4Ú"4¬)4Ú"$²Ú"î& žV{–tsÖ"/bú4?3 7;ï  3"½¾â,íÊtP†ö!?z:[pÎ9ì‹Aê@ ¡8” 7úpú)7ì0*ì` HÂæZ®”€ZÎÞÊæZÄò/ ++h"_òî" B"B"B"$â"ò" ü%”Õå"‹&| j=ꤚ¤/Qš¤//ñš¤O*Udš¤•à/ž§¦¡‹°Ä4/àa.,ž>U€u†n†y&Šô ˜p)~) / §ÛA ++± //ï/ ++ð£ ä)P˜.&@¤x$H§<°úHàäÒÚÒN“1 H‘Eûxç]CRòç]_ Âò#* Ô'Ô¢)Ô'$'hþ ˆ€ ++''ûòK-Œ„K-  / 7/eë-#×<"žË ++BÎÁsÑJ ++Ö ³ÿ)Žÿ!poL/xŸ'uŸ8ÁŸ$/G/<Â>'/(Â>"¯N ++Œ/ ,ú¦/êX,ÚÞS. ÎSÊà4°×蜌 Ž8 ~ n 4 bƒäDä4Ø$R@k T+ (Å(µ¥‹P{(k]I/d(.ÿþ.ïþPßûÑ(A½þÿêˆ/ “úšE!0Ë ›/Ë 0ÿ'Ë ‹ ++T Ü„Ï· Ë ´³ ++-ãAÜAx³ ++ A• ++X• ++Hà ++V: Z«èä ++œT/Ÿ ++È, ++¿‚Œ,¿Aèq"rô!0 é¥, Ì5¦a~ L3ä L3Uà,#E?Ž/?, x L%)äA0Axl@ ++ ++è³ÈÎÑ° ++àÂÒä~´ £æç3 ++¹?†è†ñ c2\_"T ++€êý0’@@7œNfÊâ~© ++²À ÚÂÆäÞB Luur`ÎĘ89å©á Gí *í *œï,% _bÜ 0 _#R0 b0 b0 b0 $r0 šÀ0 ‘¼‰–x¼`Ï/#0žË/’ô ô KÔ d ++Ô%Ó.Ô ä ì'Ô[®.EÐwŽpçP zªæ˜¥'É ++ö_O ++•%†7úøÉ7`Þ1²W_ ¢5 ¢›¢›¢›$¢›$ö’Лs›k›ZWa D1‹Km,#Í7•#Ž%D7# 7"M' '(ú°X?""+O²$ö ¦ö¦ö¦ö$Òö('D `™ö‘ö€‘a0}# pž—å à—åpU Q]p]D1 7G0/ 0.0Í!. ½!çi $ Ûuzo0„å Rö>ßÏ(< ©¨Že±oŒh± “N &p'&ó œŽL ½ ++ ¨Ê Pt%\& ++°²ºOâ(Ä ŽÄŽÄŽÄ$#ÄY4 !… ZþÄ/íºa ++Õ¯Y/ “é¸Ýbà†å¡"ÛV˜\ø9oY \:©…Lß6§{lñlhjÑP.APP‡3P9pÄÏYµ‘Z/p Xä X ªQÇ.pÛIÄp! €¤ ]p's \_Ð<# ¹âªY/ 0÷q 8»8÷qaà á@šéÈóX‡/ i<‚å¸B.pœ< ++X<@à†âty#€ 6™@`0`B ++‘6Ë݇š(#Ny(l %¡È;[¤ï%` ² * H>l´[´ C& 'q=‡´ :´ P ¤|ÏT¿(ž([œ /Aþx .¤½û:vz X1 z QØBh–ˆ×V’“i* LM_@ NQ™&ú©H}¡°8‘ŠÁŽ.ÑÛ)"P(.!PPP†±p!@”è Œ/0ë).©,¡xš8²üo Ûµ3R@ p–Hj*Ò ++‡8$X_2 º 9X-Ÿm ÃW@ÖWH1?.K1>0dnŸ,æèÊàë)J §#ðäÒÜÒè,8Ê`ìÆV  U < ¢Ž ÞäÒÎZð¡€ w^.°äX`-X.P7.°Œ8.0FpX.8Ù[@L¡6ÜÞè2-6G0xf2¬2¬72¬2¬2¬x _!J4x †x †{)†x $%2x <ÍHx ‚<züi<aa ‘å à‘Í :>| €”¥¶ »à à†¸¥29 ++p±Œi6:D8Ï8ú¸o:?: ++h¹ O*¨2W…úHêÜž2,>ž2&@ž2/@+ 66˜)6)éÀ!D†®/ }® ^t"Á}®O ñ?õ B@ ÿ”vOŠDù ŒÜŒÜŒÜ+‹¨x’ '°Üo‹Þ"fàLW ++<.MB/ àé°s<:0†å°†å°†å°†å°†å°†É†~\!™õýS@ŠåuB& ++lžÜD# êþ%VPô ++q¦!`ž žåÕÃýq+•Š`žd8a“ü?0šßÞ# “ö° r1_ €å0ø-“0  áˆ…K/ )“\½r )r¨ýo\{¡= PPáI°p0“åøÿÿêÃ1.pÍM.f‡œ1`ŠjT v/VÆ 6/B~$&à6¤.à> $ g.1Wä`y”h€‘sת [¬¥ñq"0‰q…Qå’ /á‰q Ôì‘qìÄ® ++ìY‰ â]‰i‰1àšY  /•²a ER4†®D/ àüvÆ!D €\B Q, bü(ü-…q …q!«¡ ± (ƒs<\(5(%È ÷.éþ(Õ·£P“( a˜Iæ9.M ¸.ûýÔ ++.ðý4.½ý¼/¬ýeÁ*]šH.“ýà ++†² ðp*¹M¿UvèvEÐH© ò @èÀx‚(g×XÒÍ¿TÌH "“†Ð-ù@üæ€\ÈBN ?màó–8  á¸Ö4"*Å®ô“W/ Šf2{À X)ÙX¯§¸’l"5’l  ("‹5S\" "œ"T9-°! ¸"L/ þ 4¼ R ++“˜½§ò @ò¿¹ :/S *‚((/ Äj.±ÄRà⃠]˜0Rüœ"+<'É4 ˆ "tÜ@Æ O  áÝ®.ïÿJ¦Â/ÿJð& àL% b5Î XX&@L@tæ+r X!•¤ø. ã×mã _ž ôØ lz Øô ˜T@  ” E'”º ¥”zd‘8”.¨*B .#þ> b™8"F !‰®;`€BL51` š©XàÂè…üc!-Þ–Ï‡å ‡å á&‘.‘&¸-±Þ_E 0”åQÃ3”åî¹w¾·´@Ÿ*9Ÿ¸Û$Óª· §µF£ ++¸/ ÷.Skl[õ–ÿÿêÚBH Шp¤ 1àx>4)ð x’: ++” SáÖ,ÓŸs7’åèY²r* ’l U²Þìp©`–ÒPÔÕW`TC¹ , d9°.2^g!à—Ðv·2SU#àžU-½¤AC  €/_ „å ¼ög—±­ä#p¢@ÀÓ! ++8xŸ‘À2H˜xÿc(@ ++p‘!TX 8ö àÆÞÜèÊðè@ÌÞä@üæŒ üæjÅAJ ++H'Áì¨6PÂŒà÷&äÜÊŒfGBa JXQŠLžP R0­µ@‚Nlsñj @ ++àÂäæÊ@È0 á° áÀt q1à Ð3ls!à Ì %ðš” '” $ %D°Àp ` @›å 0JRãPˈ°0Q¬g(LGR=ä(*3à‚Z‚Z‚Z‚Z‚Z%B/ Àq `Šå$@Š®W›å  1€–º €* z¹‰¿†ð( Ôõ*%B¼ ´ TœÀd*R°ŠåÀ(/@h/*MÌ|*x*„°šåÀšå@äp”f¨k™Àk™& p\L ›å¸l@Mÿÿê í  œBœ)œR©Á:’” C ’å÷¸!ÔÔ$ 00*±Äräâà¦O œå$îàð $ÈÆh“h h‘hð-Oõþÿê¾ÓÕ| „.ÙþpEÒþÿêñàD^ñääÐö $0Ü Ì,ö¤ä,€0b@˜¶1ˆ`^cPh( @æPíë°ÂäTÆÈÂä@¢RPÈäVÈ‘PX ++ÆÂ/a` ++ÆÈÂ0QRZ1b2@T\È2dbQV^2f20X a@Âä _.ZÈ*\È*X^*T`ÈT´b*°dT¬f*åÈÈä LH ++ÂææÞƦd"¢÷ÁPh˜æ y¹_H hqÂj ++@.²<\S²1lÇ! ìçZîðká!à…s­…gB Ta ”y ++&ñ y ++Q ;”å] ++] ++„$A ++W„$p xÀÕ ++ ºM"àüÙµ6G”å8²òÅä¤ © ++¿ÁÓ,%õs!º Ñ°¬™Ù4Ä3&P…4å…#…0Pã @8  È=Tá 1 ?Tá%­%‚ðšå Ú@{ÁƒP@ Lçxhip•ÁRÀCºlÑÖ@pFÇ ++F(n¸D n6n ++X,7žbÀ€ˆš=ò® LÀBv Sx ÎÊÜÊ ++ dã!Q#*ÿBRãÿ& æ ²j8žê öú ’=!à¹Üã`ÇÈ ÝXC ’åÎF†@¡$ ÙOq ++k"eø!5"_Æ*Pf$±’¥…“ħ•"Ÿý j9"àÇZ4”åZ#@”9¹´Hb^ã‡`ãSãt b „@žâ_j"µ’œñ¥)e°iY¸!¡6m-0”l0‘“Nl3 á/@¤& âŽÕö)00 áÝI@ ã~ö ö Aµ/ ã< .=˜z™+1@ ã¿ð$•X$ïXž9} ++}¨0/ ɵD^㈰œà/|0#Ê\``;^â]`" 0 ``"þ í¶9`4`.`"Ä8Xm×X,ÂXÚ>CÏ ++l’¤}a $ÐÃÅ ÌÂÀ ɆÜ$,#š&ø .Q¼W<ÿÿ ++Äì = ºÌ/½°/†°'˜)¤EQ [Iñ ++“?:à ã'° ˜Q˜Ð œ"¦ýf*‰ Ì0 e &Ö=$$"(àd&à8 hªŒýÿê€ñ ‚@PÑÐ3SãùÂÒí´& z=¤&B á@yt ôå*‰ ++˜ @üúh©2VZ!/pùp = ª”/N" 7NF52úàâ`q—r# „¨æ„]€åš4Á´ÚÀÀæ +A H H`E  ++`4Qá?D43½±$4a{/ ì, Èv" ÈO@ƒåŸÈðÆƤh @h±¾¤ŒO0žåm$ ŒY¶!Üâºà&%àšŸ ”ü”@güÿê4*…42! YŸ Üà"Uüà*ÍDˆ˜ ++ ž!.-ÜÍè/â!.qT.Ü/ š<­<x|‰ €$ 1“8 tu ˆÜ@ [ÔM@ ¤/@ˆ [Ü‘D8š.jÂÁŒ ++€}¡"@Ì„ k|„0„,@,CS ÕŸ1à‡x¢ à‡å ‡å@Ú1à‡˜Qà‡å04‡$´. Ô.¡´. 4P ˆ.x Mܶ„…À ++&„ì*Ñ$q¡ûÿê@šÀ 88Ä  ¸ B A¼0(¸ ++84!0“-;/ 0.Ñ  ÀA” „.O”Ǩo’åûÿêÌ.©Ì"âúÀ.ûHöÖúÿê ++Âz ÊâêÂØ~Þë p¢²À@ÕQWá2õ 2â;"# ++ #%*=%pŠ ënuC"0C“åàòH ÉTÛuÔbçÀ1úûÏDYªp>}`X”0û³pX”w%(%0 ”C;Ø038Í-0P`#CD˜À” L€P³~dP” ++Xª,¨@X¬0æ%oYU(p`s È\øw l 608WñBr  ¸ ÎÊÜZ ~4æ ý&påÌå*µ²Ý T6<9& \(" ò"pgÒ l%ílÐ(!àåÇ 0†å p†å Îæ¾1'N 0è#:<2pŠ:¤?žå§? µsJ ªJ /@žê›1ÌÌ/Ì`Ø, /EX 4Þ r-ÿÿê*zá@á@eª¸Bt ™ŒC™S ++ ˆ&1—â = —¸Ð@/*00•)0/pN*¥À"pN"™ÚýÒz¼1 -*ê, ʯÿÀ/eÀª’€šBrˆ2&h_%"Pœ'Aât&>³ìFvh{p`}v ¢r ++8}+ ++ˆR° 4gx(xsB @ÿ#Ð|\#zQVPPLE L8mÑØ~ÚÂàp% |%  3ÆÞÜ ím ŒŸ  Œ%›;Rã<¥[0ÄÕ3 ++/…DÁôÎ YK=ã = Å4ô/yôE‘‘¢l1¢(Ö /™ a´Ã` Šèçþ½h A/P%V`p ++¸: F X J|ŒÕ¶Ø6 =˜äh ++RHUEW~ ++HŽ VX” ++PÎ#!(Š+á6ÊðèäÂ@ÊØØÒàæÒv+èÊðàÂÜæÒÞÜJ€& XŠ€ B| /06xë! @ ++%P²ñ@BL8?rvH· F&HÜ•© ¸¾ +#+„+„+„+„+„+/„å”êG ¢Ÿ&/ ++XÇFÉ€/H¦RB¦RÙ9Å$P"à—ŠZo—å —X/uXKû 2/2/ŠÇ&ÀV6Âì' ++ˆÞ-v€ ++0E&€æQ¹àB„  ­0D’@U*(Ú2Å8  ã¡6" pJ1/0çyq" pJ1.0°$- ++’å “åÚOŸOÒ ‡ŠL ŒÉ½`œqÊ^°“åÀC[D ÀDÀ§(<G€ ã?p°†å à†âã?'l+°“<DÐ##cøU¡‰ Y ++ Y ++ aÚ‚$'_4ÿ/Პ<ˆoÄ/‰Tб —å à—å0—0Ú^xS„) ++Þ51Š/&Œß€ à€/ €¤à " à§b c%<Ÿ—å—å % m@Ø%%%ô ‹wê ++#!,¾] \ ]iä¶`aÐ̳¤þÿê>ÊBl¿(ó(p7@Ó(  ˆð ‚H Büæ@ÈÞÊæ@ÜÞè@ÌÒè@Ng4N4‹üæ´°  BP*„é‹#j6 + ++ˆ© Xê„ j@èxßpM , 5ÅÌÅÅ4ÛKrKºvP P°† ˜ ÂÈÈ RèäÞØBÝM+NÉ";&¨-†‘0 Eà á’6m žåR’6Ý ~fLŽâ`ƒå”N€ ++,°™å UPÁ*°Kâ,°‰å0‹š¨gtŒÖð<ñÚ1ð -û½ I¥,Gšå²_9§ ++ŠB¬ ++0½:ÚÒææÒÜÎ 7qª†8OËXƼMSQâvÁ wSjv ++0HZ8P ++ tHKCW‘J7¨< ê6×Hx8\fˆ°Y A@œ v‰ NXNN'X² í²08Ò ÝŠbÈ•!toŒ 9Œ/ [AÖÍ“bdk£q%`–Ï@4ÒÈZÂÆÆÊæUæ’/Èäo Æ\\\ä7÷0= NúOØÞÞàYoØÞÞÖêàYÖ;s -—ßh/œ66_âêÂæÒ"–Z­9~EÒ¼åD>/ ++\2" :Ø/ÂäªÊ £!Ö@ÒÈZå:oæêÄÊðàX)pOZÒÈ掺U&]eŠŒ‰v¡ŽÖb­UŒmvAŽ6k"­Z®üF(,Ix¶qŒwi0·¶H‘L‘°ÖÊòîÞäÈ@\\\DØÒæè¦' ++0;%²’ ++ ïu 'šÄV XèSX¢#XèSCo /ö ++B(#µr,Iðö@B Ð  L0Ÿåê ƒâàø à‚å,°™å Uáh*°Kâ,°‰å ‹å(O àƒåHPH48H4 H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀ¨ûÿÿê(B HæòÜèÂðZÚÂèÆÐ~ B   ùTã½  á0 áàâ^ã­’çñQá; à’åà(-ž,q ++à(ö€Xâ ++ ’å “åáÿÿê Šå0Šå  Šâ àâàŠåÀHâÿ/á É ó  Jâ šå0šåëÿÿê{`Œ ++ áDd j-d`YØ5D ++ÀÀ$à™åZá(*Ì(D(“å(Ä@‘ÿÿê°/åHTãp…,x/A\»@Ñÿÿ길?p’åˆx¹xBèÿÿêh³žåSáÔÜ@Sá ++xR, |ò$‚ ++TX\\\Bb8ªPB   Ì`$ áÍ Íy&Sãuíí ©w“å0Šååæ%’‰@0šåä0M<Å<ãÁ ,ñ2ÿ/áÜÿÿê"B$@B`8¢ ++ B(@ ñr(¸xÐ+€+a š ++(+¿HB `&35&"! ápK+Kpv [Ò ++^ÙÐGÎ~„/!„ˆÄ×€R8`!xfXfEZf‘€ Šx ++ñLPB0 ÆHÌàZÌÒØèÊäZèòàÊ |$ È  H9&Íb ++0žåq` ++ àžåøK^ã0@PáÖ1QÖÎ1@ á ,I&@$‘]€$ÿæ¶8¶b' ++¨&`,Sp–å6€@ ã ð–å°+©°®OHñH˜/H.APÈÂD P3ÿ/áÁð HõfR> æÆÐÊÚÊZÞÄÔÊÆèÈÞêÄØÊZÌØÞÂèæÒÜÎô(ÒÜèÊÎÊäZp*êÜæÒÎÜÊÈZpeblFbl0Gdh2FdhGfdFfd8Gh`:Gh`>8p@6pDGjlFFjlGlhñlhTÄÞÞØÊÂÜL ÌÒðÜêÚRÆÐÂä ++î ðfêpThêblTjêfdT  ++êèÌZpb dblØÊd BÄÊ" tfdØÊà òÄÊ L`\ìÞÒÈXàèä(  Ò  ê P  +++T CÒÜè$ÍE(Ù 8@æÐÞä U !gCØÞÜÎO"D Y $&¤  æÒôʾ}%æ]…àèäÈÒÌÌ^¬y@(JA(X1èäÒf 8ð"Xj ++HÌèÈ~X·p8lsZÂæZÄÞð!hÐCš$a 8Á0r¥ž‚Z|àäÊÈ Û+ø c STãxÊ ‘_ pÁ!à“Ž 2QÅC0“å÷Å,dÅRB $E€O ++¼%LJ> ÍÅi 1@ž Pà ã’] Uñ ++0Z. NÆÞÜæèÂÜèPæðZÄòèÊæ LX ØÂÚÄÈÂZð L  Lñ&ÌØÞÜêÚ~Q& ++„(,H»p!Q*, ++†.HŠ"Q. ++W04""dh"Q24 ++W6""fd"Q6 ++W8 ++<""h`"Q: ++< ++X> B"ªQ@ B ++WDH"jªQFH ++WJ"lªQJ ++ÒLNP Lp§20R·pÞäÊÒÎÜZPÀV ++ÌðæäØ<!mÕZÄÒèæ L L7î8QTV1GÒÜè/„XZÁP Lh’2\(b^ÒÈ D R ^>áÂÜÈ` ++qáŽÌðxzŠ§| #3þq9 US`^± (b(d(iVfdZØÊ +ÄÊâlÞänÜÞèOR¤\ušf(h(jCbln: óhìÊÆèÞä;L°p°ðr (êÜäÊÆÞÎÜÒôÊÈ@`ù@üæ² ++HÞÞàæ`¢Ø×D AÆÞÜì` ‰P  ^ Ä»Šå  á& ++À±*& ã&0 ã. ++àš ++Šå&Rã¹ÿ’åàŠåšå Šå 0Šå ++¢|•ÀC šå ü¨¦ e ã áXOŠå\\ü^ ++}['\f ++`Ü APo ++#7 “åv  0Pãö ++ðšå`EâP…â,à™å^™ð:†å 0†å0 á ’å®pXP7ÿ/áõÃ<þ áåàšå àåæÓ<ù%:àšåà†å&à ã à†ýyàŠå `ŠíH ãèÀ dj@UÀ@ á <˜ Š ÔÀl/À/ ++<TYœyNÿÿêüà™zä ++HéP:t,3*tl/‰t0 8;8 (/éþk/8«/MÄ0ˆ/<üt€> ++ üæ @Vø ÊÜèÒÞÜ L(„ ÌÞäÚÂè 2 'üæ+à † HÈÞÌÚè`S ˆ‰uÊääÞä ++0U äÊÈêÜÈÂÜèS/‚f„ .. u$†m#ˆ_ñ(¾¾ÆÞØØÊÆè¾æÂÌÖ`(Òf,2 ++è Њ¾¾æèÈÆÂØØTZ𠌾¾ÆÈÊÆØ8 ++SÚd ++& Ïh ÒÜìÂØÒÈÅDŽ *.ÅA ++ààÆÜŠ(Œ€n/ŽWpF2(dTijþ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂë ++3žÊðàäÊææ~¨fîäÂà¬@M' ð –èÞà L ’$ÊðèÊÜæÒ÷õ äÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`ZbŸŸ?81Ž ÆÐêÜÖæ  ’>ÿ L ž”ÌÒðÊÈr`r  31m—æòÚÜÂÚÊæR ++ÚÂäÖ’ØÂÄÊØ^àØ•”a`¢ ++"ñT ++ÂÆÆêÚÖÊÊàZ P–0ÏÁš˜ØÞÆÂØZUû$Â`ìäÆÊÈÖìðîÄÜæòìZ`̈1ʦÄÒÜÈÒÜÎ ¸wØÊìÊØ È˜IÐœ"ÈÒæàØÂÆd`ÊðÒÆÂØcžKšœ p žËPÞàÁ!÷    æâêÂîÖ–'š LâXîÐÞ¢~X^bò°¤ÈÊÌÒÜÊZìÂØêÊæl㤠L¦ ÞàÂâêÊq¦ L¨C äêAp¨ Lª"däÈZÆÂæ2Ôª L¬êÜèäÂÆt¬ L®:.N†ZÈÊæÆäÒàYw® L°Rq° L² ++°² L´ÌØêÒ„èS´ L ¤ L¶èÒÚHĶ L¸ àÂäÊÜ2Ó¸ Lº àäÊÌÒðÔº L¼ÒÜÆØêÈ=µ¼ L¾ äÊÜÂQs¾ LÀ LÓ$êäÀÀ LÂîÒèÐZÝ4ÒÆÒvP LÄ$DâêÞè0SÄ LÆ ¹Æ LÈÂÈÈZ›qÈ LÊ[ZxqÊ LÌ "ÈZ±sÌ LÎ$§„Ð •Î LÐÊØr“Ð LÒÈÞ°Ò LÔÚÊè½ÈxÔ LÖ&Ž ++zSÖ LØ ÄØ LÚ ÂææÊäôÚ LÜÊÞØZæèòØðÜ LÞ8ØÒÄäÂäòZäÊâêÒäÊÚÊÜèæZÞàï³ðÞ LàÜÞÜÎÊÜÊäÂgªà LâØÊèæsâ Lä |!Zæ™#ÜÎôä LæàÂäÂÚÊèÊäÒôPwæ Lè,?¼è Lêtê Lì"×fàäÞÆÊÈ/»ì LîÌÒØÊåuî Lð GUÂØØÂÄ-ßð Lò,HÚÂÖÊZ$§ò LôÚêèrô Lö0 ÐÜèÊääêàèæZÈÒæ%äzö Lø._ ¼sø Lú 6³ú LüÞÜØòqü Lþs )Ãþ LîÐÊÜ 2Vå G ++H$c Ll l!ˆâêÂæÒc TäÊj 0 ++;6ÒÆÂ, ++1 & ++ÅZÐÂÜÈØÒÜÎZÚÞt L1™ÄêÌÌÊä)ZÒÚ„ ÒÄÊÜÈÒÂÜÜÊæ 2"6 ;!p ÆäÒè  Zæƒ Þ\ ¤àäÞèÞÆÞ¤ 1: ¢ ì  )3"8œZ‚VZÆØÂê›",…$ ÊðÆÊàÆ$g& êÜØÚ&ˆ(äläætà(*5ÊØÈ/*D,¾,2.å4ZäèÈ .z0ØÊèT 02¯ ó294:4`6$ÌÂæ¾;äÒà· 6"48"W l 8!P:"ÒÈÅ ++JÌÒÊä :!<$ÂÜÜÞèÂ] d<">ÝAÊÜêÚ…ë>"f@ æÊÂÖ @‘BÊðÆØêæ´ØcB Lr r*8D D8F ++ã FzHÈäÞචHTJz|JtL ++ÈÊؘ ddNèÞàb ++ý"ÌðÈÌôèÐdâfÐppìÈ¥ 80Ù GÖÊò ++}~Ø NI°TæòæèÊÚTžq pt"Z|–!`£QâPX 8((!øô> ]À 40€b"ÑbŠåp<.!"Å.!ð ° ++,™å㘠Pã“à ãd`šå @¸ ¢ü¡ u  Jâ š„ì ì‘r: áðñ€åà€â à€å €åà€âà€åp€åà€âà€å@€9#à€ˆX¤Tj|E¤\P,' D)Q”å ”×)1 ž)@àŠå<D àŠå3)—$àŠå`Eâì2ìÌDà€åü p€åàšå Ašå$ø?Šå(0¢”((ÐJ@Šå8lSá$pH:(x[Vãx[–åôjþ: ôñà‚åà‚â à‚å‚l1à‚Ç*ì" ðl n¼ ø" ÈH (œœ"| 0pp.¤l[Œ±¤h!0”ô(" 0h `U“å0“|tG ’å(”,”0”14àŠ\‰ L½.³Là†â€óà†åà†âà†åàšå00<  á`j˜: D\,/ˆ0L ‚å°x° . ¬°^T<è"JP3 €@ ++4Ÿ0ŠåŠå88¢üé8Ÿ8 Jâ0šå<jà”åàü@žå€8HjÜ]tO0šå8 ++K_•80/þXT@à†â¨Q àšåð†â#à†å'@†å(à†â+à3šå/€"3à  ÔÚ|'0Ô0ÔÆü!0†8¬Ÿ`Šå,šå$ k\P©À ” H nlPñ”/,8 ^@)”ÜŠ/ @DBz:¨<h<  ++”üà? `ŠÈ ++[4@ñÈ `¬? áÐ n$@- <?4š€ ++j$e € <,¤/ @`D Ì(@ø“„åà„â à„$Ó„åà„âà„å0„È„±$ Ü.ëð.ÛB*Í(‘<o(3<.ûþ ¯›.þdq(a(*Fþ°–8Dùýÿê(}Ê“!¿!Ü( ” ++ ©! ++ô`åàâ(!3`ü/•ü ü|{Ô¨kÜ,["0]å0“#L@Œ € LL„ ( ++*5 „ $ ++ L"0”Œ -ž0Ø ¨'œ0œZ0 áSý¨n0ÿ/áìÿÞ.­ÿÔž(Ž~dPP:… .ûü,ßüì!Sì!(÷$.0Ì &pÌ 5/ ++Ì Ëèï/Óÿü¸ ¯$¦$$”$VŒLŒ<\0Œ;‚°( / ( ,€Lüó0ÙÉ/­ÿpÿ /ðûpO /Óû$Ê$Á$¸$¯$D¦ûÿêd`nœm`4?L.XXÅX ô!`@Äš5/ á¸E/]û¸—=)ƒ .ÇútS‡úÿêPˆjúÿê  ãTˆ ü,*íü,L@ŠåUúÿêP/=P;À.4úX'c^ú(•ÓÊZèÊÚàÞäÂäÒÊæ$`ÀR÷/ôòRRôÊÂÆÐZÂÜò L0t 'Bô!*B>ö0ˆ¸Bì ± Õ.bû ++í -+ï ++ ++--"Û ++ Ê ++<©(f3.§q/qG"= yqˆ/ a‘"õÁ|/SÙ /E± ' ­­= 5ÈÙ‰±b!‰/ LmL L ¹LeøPP. PL# @E+T j4]Í à­sšå@šåPõ<@‰Œ/àéà# ‰#ž ž¡— ++À"q© Ì|‰ ++µ `åàâ•30Ø¡/bI •Kù °=ð ü)  t&±Õù ++Í' 0 ®80q ½ ++áÓ¼™­3—<}lPŸ$õ8/ñ„@ì‘èâñ ØŒ…   ¨ 8è®Y p0‚åà‚âY À1 —€@}€4f€D&Xù0Å44¸/ d4/žì'ìP áì¡ì“<|<b<K(7(!zä´Í.¦ýX˜(ˆ(xO\ýÿê¸ ++H:H.!0/È! ü/]<<ï„0¼ ++ÞI $/Ð8 pPÀ¸ ++ø]€å p€P°P É0™H ˜x‚à!ük|@QXa"%€a"  :à$D$ @ $l ©n „åÇü@‰ãÕh¿Ì›QÉwô`I<9)x( ++(ö‰â¹9 ©8  /sÿ©*¹ 4 /–'‚D ,Énô ++€™% U(Te"h#|Œ¢/äûŒ@ <¥‹PwP/cÿ+–;OäRðS° ñA´ •;*¥HDbàšå&T»O3 ”åSC ++ @”»O;Tãó€Ú€Ѐ(¼€(¨€@Ž€@t€0^ pNá ,ð>ð åð ðÜ,Z/Ùú,, »«<›Ä…hkPQP=P)h,\hÐ9 žØù?”6”4/9”#  æ”Ü”pÈlܸÀ/ °ÿÿ/­ù°³A1d%EL 4o €åPÿL „ãôx/-ôÿÿá/pø¨ôÿÕ/!"ôÿÿá/3÷¨ôÿÕ/'ôÿÿá/öõ¨ôÿyÓc@Œõÿê½:q,è$+Ù+¼"^`šå%õ9. ++õ},a@ºˆ„\@P`‘M¤T–Në– ÚN@‚bô[†½M/Eˆ9OVè9dn63/ZzNWN0v½J/ZXN;î @„¢ZòD*Md\~pÂÈÈäV+–>a  ++,Or*ÆÐÊÆÖZ]ŸæZÂØØÞîÊÈ;O vMcS~à X¢Z\ ++TñNAæêØèL"–> µ  ^@`?8@ƶd–fhÚÿÎpl<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdblb4SbPnÓšÒÌdð0 Ly`fh-Cˆj ++/E@l r ++ 90ì]r”/Vcn(pNNVr82Á/´/6t¢/%øÔë€Êääx–‹0ÿK?vø {0Uó‚HÚÞÒ Lxp1&qˆ ++HŸW(&(u1xe6P@qU¨ˆ`Ù1´ ++ãLz|n dN~º_ÌèÈA€šB3K~=•z|~'Z€„^1‚„X ++./ý> ++Xg…!s?~ ++81 d0Rx®R`Œÿ¤@†ˆÚÏ…ŠŒ(ôObX%ŽPhiØÊè%˜j]Œ¯lU°ˆ°'c* Lÿ6’^”^p^ fè<Xdž’” ++0j3*X# ++P¼¼˜¼6œ³–Ë‚ßx^9˜x…˜…˜šІ†ž† †r† h†œ†Ÿž œ ++0\*˜\ ÕZC@¢£¸)R¤¦l>¨IP° åié«Z|êèÌp¦[¦[¦[8¦ÐZz2ªZ¬Z®Z/r`Z jZ¨X§ºÊâ~ª&šp@¬®/øöfö! ª/ ++08°+¼b8Æ r|P@ÂäÎêŠUS@ÜÞè@q @ÑS@Ã\@ðNŸ²8b ¶¸ Á´Â ØÒèèØÊ5¶³[Ä"$)bl#%¶%¶%¶%¼%¾%À%b% l%¸Þ_º¼ @¾À* h ! / ++0><–=ÂŽ0Äs² Æ d  È Ê  ++cÒÄÒÎ{È{ÈöÈöÈöÈöÌöÎöÐödö nöÊöÌö@ÎÐ*ö! ööGÒ{ö"ö ÔöÖölÔúÞú)fd#ÔÔÔØÚÜf pÖØ@ÚÜ* j! úOkÞ/à âä ++{âwâòâòâòâòæòèòêòhò ròäòæò@èê*ò! òöO {ò4WR¯ÊìØs":W+}CX8®c-ð-z …ò«/cî†ðjHp>orºZA| : j  ++/n`ƒ6òh>¬4 Lr{P@•ô& Lý e f(ˆ æ 2öeøÚ1 ++Só ÂÆèêÂØÂäÎõÃd" ‘ ++ÊðèäÂZ) CZ–>  3%0‘uXöˆ?$ JBf ŽYÑ ++AüæZÛöÛ²²Y©"5x{kö˜ô“à@ ++ü ÂààÊÜÈC€"Pþîv ++8J=$H°@úˆ6ðŽ nøqÆþàúÀ™o ++ü·pþ¦±øØ;H;@; G€m%êIS& ++pq; ++‚ö‚˜(B´† ++† †p /nd— ¡#óH ++ ãrLZ‰ $€³C€ú2R ,PYàU¸aU nf$³ ¡nh*q ++?î ++pî38î ++ %R#(%ÐHàäÒÚÒü`t-w|1vžõÌðØÞÎÂÜÈ LZ=v%*›@Ov5PûFHI@ä?ÊOÎb`é néI ++P2 2 ZÅ"Z|µ #ZfbJ ++aîNŸ ++x/hZdZ 5KÒK "¥ À}íw¥ jZ/ঠ ¦L0S"E2ÚÞÈ`Z$Z"ZpŸdZ ++6&(h, n,F$H!à@&(í • ++ˆÇ22*2o4ÚÞÈ1,1*1 .101g ng.,1@.01118®Á2Z6 ++R /¢:?a4Z699>x o8 ++ y@y 8yDy o: ++z Fz :z8: (n(îe/¬P0B¬"9N,_´ö*ðBî ¨  L$à™åZá,*€Xâ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH' PHl \&À$@ÿ/áÍdfÔÿÿê0(ð3ÿ/áÍÿÿêjBè èè„TãNðFð5ðD_Šåô¬’uô¼šåTã@,ö' à”å0”å žå žåå àåžå`EâP…â,à™å^á :@ áàLö à„å0„å „å„å „åðšåp$„7ÿ/áðÿÿêÌTÄ.9ĺX³ @ðzÀ¾ ++ÊÂÆÐVÂÜòóZÂÜò L L( HæòÜèÂðZÈÒæàÂèÆÐXB$(øÊääÞä˜Bæ ˜ÀÄìŠåpŠåÈâÈßÓ ++àšåžå´ˆÀ"ü0@ŠåDP àžå 0À$? šd ++d\ŒÙd á ãd@*@`—2`Eâ,H(:(Èà†å&à ã à†åØ*$`ÜH ã œ œ[€µœô@<žå@Ô X›Ñÿÿê @ŠåÐZüü‘€åàšåà€¨"ìàj”Y¤$00žå@p9@@à†â@"0LQà†å€ â^ã*1àžP^ã%) š`tÿžå@Šå`Šå ŠåxRdñ@šå`šå šå`ŠX/`PP  ãØÈì_2ÿ/áÀðOŸÿÿê\ @*µ\H8S>¢ïc|ÈÂèêÚõ)0"ÌÞäÊÒÎÜZàäÞÆÊÈêäÊ äÊæêØè( HÊðàÂÜÈZÌàZÌèòàÊG@HgÒØèÊäZýH0 4ÒÜìÂØÒÈ@fû'@æÒÚàØÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæP ++ÌÚèðÌÈP ‚'ð6 ++ÌØÈ ìÂäÒÂÜè æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÈÒäÊÆèÒìÊ  LN* ++] ¬fA 2I)>> ++ üæ @! @æàÊÆÒÌÒÊä£ÿ ÌÞäÚÂè  V/+üæ?Ä " HÈÞÌÚè‘ø ++0BP`B$ àÐuÐÌlÌ@[ ++è„_ —å „Üb  „ô „x@„1„'„Ø„  „œ+iÜ /š€Ò ðšåpŠå ðdÕlOpšå”ôôõ$’ÂäÎêÚÊÜè()©©/Æ ++£   "V ‰ð PB`8Â$ ++ B((BL'2T8ƒ ++Tê&¥›þ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂî ++3’ÆÊðàäÊææÒÞÜœfîäÂà @&M4Hõõ3ÊÜèäò,èÞà L6($ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Zb¢¢?81‘ ÆÐêÜÖæ £“(>ÿ L 0*ÌÒðÊÈr`r  31m—æòÚÜÂÚÊæR ++ÚÂäÖ’ØÂÄÊØ^àØ•*aÐä,´Á2.ØÞÆÂØZ8û$Â`ìäÆÊÈÖìðîÄÜæòìZ`²8 1°¦ÄÒÜÈÒÜÎ ›wØÊìÊØ ®.I`4"Ñ ++ÐØÂÆÊÈZØÊðÒÆÂØcð 0Æ ++~íÂÂäÎ,0Ñ@242 ÷6 ëg,,v ƒGð+Nò°8ÈÊÌÒÜÊZìÂØêÊæSÓ8 L: ÞàÂâêgó: L<ÆÞÜæèäêÆèÞäô< L>äÊÆÞäÈZÆÂæ2Ô> L@êÜèäÂÆt@ LB:.N†ZÈÊæÆäÒàYwB LDRqD LF ++C°F LHÌØêÒŒè£H LJ\\\¤J LLèÒÚMÄL LN àÂäÊÜ7ÓN LP àäÊÌÒðÔP LRÒÜÆØêÈ=PR LT¥%ÜÂQsT LV QØ$êäÀV LXîÒèÐZÄ4ÒÆÒvPX LZ)DâêÞè0SZ L ¹ L\ÂÈÈZ›q\ L^`Zxq^ L`û"ÈZ¤s` Lb$§‰P¥b LdÊØw“d LfÈÞ°f LhÚÊèÂÂÈxh Lj&Ž ++zƒj LlHÄCÆÞÜìÄl Ln ÂææÊäôn LpÊÞØZæèòØðp Lr8ØÒÄäÂäòZäÊâêÒäÊ`„æZÞàèÒÞÜÆðr LtÜÞÜÎÊÜÊäÂ\ ªt LvØÊèùsv Lx Š!Zæ§#ÜÎôx LzàÂäÂÚÊèÊäÒôPwz L|,MÏ| L~S~ L » L€ÌÒØÊÒt€ L‚ .eÆÂØØÂÄß‚ L„,HÚÂÖÊZ$§„ L†Úêèr† Lˆ0›ÜèÊääêàèæµ%ßzˆ LŠ._¦æsŠ LŒ1³Œ LŽÞÜØòqŽ Ls $³ L’îÐÊÜr’ L”S⇔ L– ++Hu– L˜UȘ LšâêÂæÒ[£š LœäÊÆåœ LžàäÊÈÒÆÂ(qž L &¢ÅZÐÂÜÈØÒÜÎZÚÞP  L¢$Ø¢ L¤ÄêÌÌÊä*š¤ L¦ÒÚzT¦ L¨ÁcØÂÚÄÈÂô¨ LªÊÜÈÒÂÜÜÊærª L¬"2ü ++7°¬ L® ÆäÒè– ZæS ÞKó® L°àäÞèÞÆÞØq° L²' Œt² L´ÅÚÂ~s´ L¶8ZeUZÆØÂê–Ķ L¸ ÊðÆÊས¸ Lº êÜØÚǺ L¼äläætÕļ L¾ ÌÒÊØÈ+S¾ LÀ rÀ LÂÇ4Zä苺 LÄØÊèTä™Ä LÆêÜìyÆ LÈ È LÊ$ÌÂæŠ;äÒà–tÊ LÌ"Q 6ÁÌ LÎ"ÒÈÊÜè² ++ ++ñÐÎ LÐ$ÂÜÜÞèÂW ^UÐ LÒ¯AÊÜêÚfÔ¦Ò LÔ æÊ«ÑÔ LÖÊðÆØê摦PÖ LØs ++à¨5|àä8wØ LÚ.xÚ LÜ ++弆 LÞÈäÞàŽ“Þ Làz|´à Lâ ++ÈÊØÂ÷⣤äèÞà$ ++ý"ÌðÈÌôèÐdâfÐppìÈj 80¸ GÖÊòO ++^~· ä· ÀìTæòæèÊÚT‘ƒ˜Hl2 @® @Š ++@6 ! ++(< @< f‚æ ++< ! ++HHHŠèY   *HèäÂÜæVCÊäZ|Z ++g ”ê,­ $¬ ýóìHæÆZàêèZÆèÊn ²î ++B(#‡l,4öúB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêBr,HÚÂÖÊZÌÞäÊÒÎÜZÆÂØØÂÄØÊ Bø à $ @¯÷#TãÕ ŠåŠå Šå$à™åZáÊ *€Xâ» ++šå Šâ`ßòp–åàâàŠå@ ã ð–åìuÀ Jâ&Tã@ ++Lÿ™ ++ à”å&^ã$ ++ ”å á àŠå Šå d’üÙ cØ  Jâ àšå šåúTá ++@ áßÿÿêO h`”/ Šôjüiô9 šÓðTáP ++,™åã>  Pã9 à ãù(`EâP…â,à™å^á- : áàšåà€åà€â à€åàšåà€å&à ãà€Ô/´ ´*´ÌšåTã@ì€à”åàŠåĦàžåàŠå,1šÄ p&Àªÿ/áø•¼l@Šå00`SáH…:(1à† à†åVã¼äÈ<0–å\yi:0†ˆX<  á,ŠY:0 áŒ]ƒå ƒÈ"IÈÈ/0Ä.Äk”áLļ¡0”å0Šå 0žÈÔw“å0“å 0Šå0žå$ à —(àŠå`Eâððû áà ãàåà ãàãü @àå09àP,Ì’é,L, Jâ°jÞ:@, á$pà–å,àŠå\Œ^ãÉÜ/¿‘àƒâ àƒå,¬ƒè @.ªÐjà†â àˆ›à†åà†â±à†åà†âà†l#¸œ‰p&0d" HX.0"rÔÄ Ä_ Šå0¼’¥00<ˆ4@G:Ø„†„Ð"4ü "`\($&¬8´S à†â#Ä'¬+¬Ä/ÿˆ&0Ð90`Š(Ÿžåšå4¸’ô?M41 4l_ á(8…84(?@Š< ++\ø7Átà á@šåÄ&´ü& 0< B¦:P ++ø p”p/@dd"}30h?å @ j 'Å  ÜTb:0ø@|^T: $Fè,0_šå(¸’„} ++(1#(0_$šå$8 ‚µ ++$7 $8¬ŒL@x“„åà„â à„$  „åà„âà„å|ð„âà„å0„å à„â#àt„t!„åw  XŒ2ÿ/áãÿÿê³¥„ ++_3ÿ/á—(|eSE.úþx.Óþ(Å(²(‡ { p(OP:Äx$.ñý`.°ý( ((OtýÿêX ++DJÔC0 ++ j6:8˜X ++@ °,€ ++"x; ƒ° ++?ƒå^ ó4.Ùÿ(*Ãÿ¼/ºÿDã DP‘d/àj¼Ýü @àšålX00”åd€ @”åøÿÿêT j¸c¸ V¸$à ++@¸ 4 '0Ü ++¨$^/„ü$ ¹8£8š´H `A/=`ÿl/ìû`Ë/`ÿlT`Ì/ý`ÿl/¼ú`Ë/]`ÿl$`y/š8œ8OºDÙDD*D „HeHDX/@Ð\´±”Gà áðÌ#Ô„@TTÐ*5„T%0”4.§Ä/h0,}€ì/mÀ 0*e00)”p ”Éd Àü@T/$¼ ,S:8 „°°" x.ûøHöåÕÅ<Œ`l\ô}$%$ÔL/ oàšåž /Ñ ` D/U! (- žd14pX#$„„T/OøT ÄæÖÈP™P$”" /Ûè#´Æ´L¼Ü` § -¤/$O/å$£/t÷‹Rd=¼x$SÌöÿêè$ŸÄöÿê  ãØH&+½&T%_@ŠåµöÈ%0d %,!'došåVöÿêœ Y8.6öô/ <ôV¢æòÜèÂðZ|ØÒæèXB$pSÈÂèêÚó. ÒfÜèZÆÞÚ@ö 2êÜæêààÞäèÊÈ@ÆÞÜìÊÜèÒÞÜ@üæj ++HÞÞàæPDó ++ÐÂÜò L(Ô HqƒÈÒæàÂèÆÐ/5(Ö¤pÊääÞäXP( V —ˆ :(Î Z2(a2(_R ++r*:òª Q¢öÎ ¾ ’" :("  ¾- ”þ"Š&"-–\æîÚÖÚ /Æ®$ *ª$”²”äâ¤$$ ++–º&0®& ª3„ö„˜/‰4#/Á47/ 4 -p”)/pt¸t-pš”=î! p&3pƒLÜ ++ÜpÜ0Ü ÜÝ,ïB ++áNÓ¼)ðšt[0ÿ/ác²UGT3(#(O÷þÿêÐ$/‘Ð7/Ý3U¨E¨¨5¨ ¨!¨ "  ¶ °o „åÙþ¶ " Ø(Ä(´(/¤ÿPŽP$/áP7/-P3/VT;T:T  T&Tü ++ü.?þ|ïá ¿òT„T$/5 ++T7/ ++T'øLz' ¶°84@àƒâ4””`/´ý”;Á­,,$/a ,7/­ €3XÐHÐH«"HA (±(¡\ÿ Lð ÌÒðÊÈt`t ) 31o‘æòÚÜÂÚÊæR ++ÚÂäÖ’ØÂÄÊØ^àØ—aðäè ÚÑÁØÞÆÂØZ?÷$Â`ìäÆÊÈÖìðîÄÜæòì¥Î8 1ÌÖÄÒÜÈÒÜÎ ¢wØÊìÊØ ¶I`"Z(ÐØÂÆÊÈZØÊðÒÆÂØcðæ L »´âèòàʺP0KZ1P ++ý(ðT  ++~àäÞÆ<< B÷ *ÆÐÊÆÖZæèäÒÜÎæZÂØØÞîÊÈ6& L¥ŸêÜæÂÌÊ~¥  À ++îÐÞ  ++×¢TäÊæêØèZå% ++> ++± Òò°"ÈÊÌÒÜÊZìÂØêÊæÍã" L$ ÞàÂâêÊó$ L&ÆÞÜæèäêÆèÞäP& L(­„ÆÞäÈZÆÂæ2P( L*DèäÂÆt* L,:.N†ZÈÊæÆäÒàYw, L.Rq. L0 ++ï*°0 L2ÌØêÒ4è£2 L4\\\¤4 L6èÒÚMÄ6 L8 àÂäÊÜ7Ó8 L: àäÊÌÒðÔ: L<ÒÜÆØêÈ=µ< L> äÊÜÂQs> L@ QØ$êäô@ LBîÒèÐZÒÚàØÒÆÒvPB LD)DâêÞè0ñD LFHÌàZÌÒØèÊä¹F LHÂÈÈZ¬qH LJqZ‰qJ LL½"ÈZysL LN$¸šm•N LPÊ؈“P LRÈÞ°R LTÚÊèÂÓˆT LV&Ž ++zƒV LXHážÄX LZ ÂææÊä'ôZ L\ÊÞØZæèòØð\ L^8ØÒÄäÂäòZäÊâêÒäÊÚÊÜèæZÞàé,×ô^ L`ÜÞÜÎÊÜÊäÂèÒìEª` LbØÊè ++sb Ld ›!Zæ¸#ÜÎôd LfàÂäÂÚÊèÊäÒôPwf Lh,Màh Ljtj Ll"†U¯&ÊÈN»l LnÌÒØÊå|n Lp ¿USp Lr §r LtÚêè!rt Lv0§ÜèÊääêàèæò-%Úzv Lx.*V ¤sx Lzÿ,³z L|ÞÜØòq| L~s ³~ L€îÐÊÜr€ L‚S L„ ++H+u„ L†PȆ LˆâêÂæÒg£ˆ LŠäÊÆåŠ LŒàäÊÈÒÆÂ(qŒ LŽ&ß.ÅZÐÂÜÈØÒÜÎZÚÞPŽ L0/$Ø L’ÄêÌÌÊä*š’ L”ÒÚzT” L–¼cØÂÚÄÈÂô– L˜ÊÜÈÒÂÜÜÊæër˜ Lš"2ü ++7°š Lœ ÆäÒèJ@ZæÊÆ)óœ LžàäÞèÞÆÞØqž L ' Œt  L¢0Úÿ/~s¢ L¤8zZ`UZÆØÂê–Ĥ L¦ ÊðÆÊས¦ L¨ êÜØÚǨ LªäläætÕĪ L¬ ÌÒÊØÈ+ƒ¬ L®¾r® L°Ö4Zä莺° L²ØÊèT♲ L´êÜïy´ L¶±¶ L¸$ÌÂæØ àt¸ Lº"Q 4º L¼"ÒÈ…1JÌÒÊäôм L¾$ÂÜÜÞèÂW ^U¾ LÀ­AÊÜêÚiצÀ L æʮѠLÄÊðÆØê攤pÄ LÆg‰5|àä8wÆ LÈ.xÈ LÊ ++ÑºÊ LÌÈäÞàŒ“Ì LÎz|´Î LÐ ++ÈÊØÂúÐ, ¤ÒèÞàâ ++û"ÌðÈÌôèÐdâfÐppìÈZÂo ++80o ++GÖÊò a~n ++ÒH°TæòæèÊÚT2c è(¶ÔÊZèÊÚàÞäÂäÒÊæ3"3$Ôõ2`Ö`Ü] pØ(/µÎÊäZfd© ++LøÂd ‘ ?‚ÞÚ ++Oêð1 ++ÂÚ@ÜÖhw o ++|àGÿÎb`j<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdbp`˜TÞPÛ²¢Êâ~à`PÜÞè$`ˆ!âo NìÑ/äg_æ èd ++8c?på/ê)ì0f) ++"Z|aTÍpÖ ++HBP ++(0ažzÆÐÂä(òîðßÊ þËôæò£ÀöHàäÒÚÒtôÌðØÞÎÂÜÈ Lô¹¤öþ¬|Â$ÀŠñŠêÜæÒÎÜÊÈZp L". ++p O ++îú4`ü5. ]/øZOIXú@üX?þRlR bë_ ++X< ž ++êèÌZp</=>‚êèÌpZ|³O^B€FˆØ b¨êpTO ++pØ 0®ØOblØÊÛ1 ++ ++Í ð ØÒèèØÊ L I/ìî…êèÌbl6W` ++ ++dêbl %ÀÄ !µ ++ÄÒÎ yøø3òòÊò/fdò$5ííôô'fdôüôd"êfdôÖô& ïY ó ï"í í /dhì$" 1ï/&å4$XçØ2ÚÞÈ`& Ý(Ý?& ++p× ‰Ø*Ø),Ø*ت:ÚÞÈ,×.×?, ++p®/h`Ö0Ö‚6 ++Ú4Ú0Úx24Õ6B­#lhá4¸â8â16Ü<Ü8ÜZ:<ÜJ¨Ý<¾8>¾!cD ++ ¿@ã>¿@”BÖ@³×F³!DÐHÐF³HÐJÐH¦/jlÏL¦!dP ++§N×L§N§N§ØR§!PÐTÐR§T§TÐ ðPB`8—rV ++B(‘L8BT8«” XP\p(“ ^µ ++€Ò?‚#yZ@\ø1 LÑ 6`Qb¬ n¬ dt5^X\Dr Yñê L’ÒÌê‰``b<ðÊÂÆÐd ZND dCqd – B0PûJhÑ ó ÂÆèêÂØäÂäÎ4R" €ÊðèäÂZ" ++ I>T (·C fÖRhÖˆÏ%)R~lÜn­?àê4hxztjl0 ++8p Lå *üæ@Òæ@ÜÞè@Â@z#à ¨K°d‘& i2pntnvnpn fnnÃpÃñ>ÒÜìÂØÒÈ@äÊèêäÜ@À¸@üæ@ÌäÞÚ@üæ-!êÛ" )"ƒ‚~ÊääêiòP ++x ÂààÊÜÈ@BPìø @ 3o#rü—tvnÐ&È¢ j|ØÊè*o0 ++xn#HÂ,"HË ++G. ++°Ë9ÔW. ++ &Uz@sP†v0” ++~E00ê0Œ#Z|%"êâ;‘Ìðxzê$B~ BŽG„@€‚€h ++¨6†¿ˆ¿r¿ h¿„[  @†ˆˆ "Šº ++!sÌŒ¥eŽ(V@’”( ++œ?–›5 ˜5š5/b`5 j5–5@˜š5`)bl?+?œ?ðž(°ÂÈÔêæèZÂÆ-%0÷Jx]R²²`ª * Z|^x¬x ‹’V¤V¦VbV lV V…¢ê 0G¤¦!+êxÒ 1 ¨Mݨž!ž¤ª¤¬Ÿ2¾ l^@»¹k#@#°@¾¾ÆÞØØÊÆè¾Z#@Ätj8®ë°×1²³kº"Î blU d¼Ù´Ù¶Ù¸ÙdÙ nÙ´ÙG¶¸!+ê Ù 1 ÙMÙê !ÙJºM@¼œ¾«À«K˜Ș˜ĘƘf˜ p˜˜GÄÆ!+ê ˜ 1 ˜M˜!˜˜ȘÊCÒC/fdC Ô«Ì«ΫЫh« r«Ì«GÎÐ!+ê « 1 «M«> !«ÒCÔ«ÖCÒC Þ˜ؘÚ˜ܘj rj/ؘGÚÜ!+ê ˜ 1 ˜M˜!˜CÞ˜ƒ@ ++HÌèÈ~“0ã&•èÈZÂæZÄÞð#Æ ++èà†E(Và0 ˆRU˜ ++2ädR+0ü!?â+ zX^HWäPU>äxU8›6èVêVn rn7æ0N 8vèêæär n7IH 8ä ++ Ò(ï 8ïÆBLZE åìOŸâÌèÈõLBrKƒìÞÒÈÿ?ì ++0ðp“b ++î«ðÈ/âàù´%Y~î?î»î»ò»ô»} r}ð»~òôð»  »7»Áî S`B®A(öKrZø8 HÊøWÀPB0 ++0B¬"Ó,‘ ö+ºB0 ˆ  L$à™åZá¨*€Xâ™ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH/ TT½T˜!/˜?/U˜/™˜@í˜0/1˜?/…˜/ɘ@/˜//a˜?µ˜0ù˜@/M˜//‘˜?å˜0/)˜?/}˜/Á˜@/˜//Y˜ PŒl \&À$@ÿ/á½dfXþÿê0(ð 3ÿ/áQþÿêžjB( ¨ Ø„TãNà"Fàf5 ++D_Šåô¬’uô¼šåTã@,ö' à”å0”å žå žåå àåžå`EâP…â,à™å^á :@ áàLö à„å0„å „å „å„åðšåp$„7ÿ/áðÿÿêÌTÄ.9Ä.ºÿX³ @ðz2¾4 ++ÊÂÆÐVÂÜò6óZÂÜò L L(ô HæòÜèÂðZÈÒæàÂèÆÐXB$(øÊääÞä˜B&  øÆ@¸ÚD pŠåήÎП ++ àšåàžåò‚æO šåæ®P•;" á ã&@Õ@"—2`EâîH(:êÈà†å&à ã à†åØ*`ÜH ãbœ œ”+qÜ1 á@<žå@Ô ›Ñÿÿê@ŠåÐ7¾¾ €åàšåà€åh_ žå¢ž¤àZÏ 0šå“åàŠå”ž ++ T šåü4¤.  OÂÿÿêÐ å|RnKnõ*6¢ ÌÞäÊÒÎÜZÆÂØØÂÄØÊ äÊæêØè( HÊðàÂÜÈZÌàZÌèòàÊ_@HgÒØèÊäZüH0 2ÒÜìÂØÒÈ@eû'@æÒÚàØÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæP ++ÌÚèðÌÈP ‚'ð6 ++ÌØÈ ìÂäÒÂÜè æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÈÒäÊÆèÒìÊ  LN* ++] ¬fA 2I)>> ++ üæ @ ¡@æàÊÆÒÌÒÊä¼ÿ ÌÞäÚÂè  T.+üæ>Ä " HÈÞÌÚèø ++0BP`B$ àæfuâlâŸ[ ++àšåÞ_ —å Þøæ ÞN J@Í@Þ1Þ'ÞØÞ  Þœ+iÜo ášÚÒ†ðšåpŠå ÖdÕlOpšå”ÚÚõ$’ÂäÎêÚÊÜè()§§/Ä ++£   "U ˆð PB`8Â$ ++ B((BL'1T8-£8zHEEÆÞÜì¨Ü(’,HÚÂÖÊZœe@ef â& ++e! ++HHHŠ(‚Ð  *HèäÂÜ怳ÊäZ|ÄÒÜÈÒÜÎ| c8*A1þ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZ„ ++3(ÆÊðàäÊææÒÞÜ2fîäÂà6@*Mõ+.èÞà L >,ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z` 31y—æòÚÜÂÚÊæR ++ÚÂäÖ’ØÂÄÊØ^àØ£,a@. ++ð LòTæòæèÊÚTdùHæÆZàêèZÆèÊX’0B ++  … ØK Л¿K @KK T$ÉŸ $ — ÿàžå0’å ’å0Šå o ++?’å“]ç! à @ (c c   à‘åp‘å žk ŸüK:†å †å á >¿/ ,.Lßo Šå0@ N á`ØDü+¡Ø3`šå·á@ /Ý@¨P0ÿ/á˳ »°_;ÿ/á®s .a˜0+)+ÌäÊÊZÒÈÿ8rÊØæÊ.öD:$ÊðèÊÜæÒÄØÊšbšš?81z ÆÐêÜÖæ w:>ð ÐÊØà­Á@<ØÞÆÂØZ¶û$Â`ìäÆÊÈÖìðîÄÜæòìZ`«8 1© & wØÊìÊØ §ð.O¡@BH#DÙò°FÈÊÌÒÜÊZìÂØêÊæåãF LH ÞàÂâêÊóH LJÆÞÜæèäêÆèÞäôJ LLäÊÆÞäÈZÆÂæ2ÔL LNêÜèäÂÆtN LP:.N†ZÈÊæÆäÒàYwP LRRÃR LT ++ÈÂèêÚ°T LVÌØêÒè£V LX\\\¤X LZèÒÚMÄZ L\ àÂäÊÜ7Ó\ L^ àäÊÌÒðÔ^ L`ÒÜÆØêÈ=P` Lb¼ %ÜÂQsb Ld QØ$êäÀd LfîÒèÐZÜ 4ÒÆÒvPf Lh)DâêÞè0Sh L ¹ LjÂÈÈZ›qj Ll`Zxql Lnö"ÈZ&sn Lp$§‰n  Sp Lr “r LtÈÞ°t LvÚÊè¼Èxv Lx&ˆ ++tSx Lz Äz L| ÂææÊäô| L~ÊÞØZæèòØ‹ð~ L€8ØÒÄäÂäòZäÊâêÒäÊe ++„æZÞàèÒÞܲð€ L‚ÜÞÜÎÊÜÊäÂ` ª‚ L„ØÊèås„ L† v!Zæ“#ÜÎô† LˆàÂäÂÚÊèÊäÒôPwˆ LŠ,9»Š LŒtŒ LŽ"f ++fàäÞÆÊÈ)»Ž LÌÒØÊåS L S L’ Å’ L”ÚêèÂÄ<r” L–0pÜèÊääêàèæ¹%ºz– L˜.ø ++ ’s˜ Lšß ³š LœÞÜØòqœ Lžs ÿ³ž L îÐÊÜr  L¢S·‡¢ L¤ ++Hôu¤ L¦>Ȧ L¨âêÂæÒ0£¨ LªäÊÆåª L¬àäÊÈÒÆÂ(q¬ L®&¦ÅZÐÂÜÈØÒÜÎZÚÞÛP® L° $Ø° L²ÄêÌÌÊä*š² L´ÒÚzT´ L¶–cØÂÚÄÈÂô¶ L¸ÊÜÈÒÂÜÜÊæÙr¸ Lº"2ü ++7°º L¼ ÆäÒèô Zæ@ÞKó¼ L¾àäÞèÞÆÞØq¾ LÀ' ŒtÀ LÂÉÚÆ~s LÄ8hZNUZÆØÂê–ÄÄ LÆ ÊðÆÊà½¦Æ LÈ êÜØÚÇÈ LÊäläætÕÄÊ LÌ ÌÒÊØÈ+SÌ L2 r2 LÎœ4Zä苺ΠLÐØÊèT͙РLÒêÜìyÒ LÔë Ô LÖ$ÌÂæs;äÒàltÖ LØ"Q ÁØ LÚ"ÒÈÊÜè¡ ++ñÐÚ LÜ$ÂÜÜÞèÂW ^UÜ LÞ„AÊÜêÚfÔ¦Þ Là æÊ«Ñà LâÊðÆØêæ‘pâ Lä#t5|àä8wä Læ.xæ Lè ++—ºè LêÈäÞàc“ê Lìz|´ì Lî ++ÈÊØÂ÷ðèÞàa ý"ÌðÈÌôèÐdâfÐppìÈÁ80 GÖÊò+^~ ðH0òÖ K ++£$ôÒ øÇq ++"’h ºÐB  V_Tãp 0D ûc „å 0ã4 _1ÿ/áö4 é4 0 ++Ú^! ++(dS§(HÚÂàB08M ¹`ìÞÒÈs L. ++ò ÖúÊ`üÊbþÊd.70 ++ 0ö `ÁB ð 0 (”!õiäi(m´(q0Šå0ž" à%D(z+íz _ŠåÌ<¼"_ JâÌ= ”ª‹mªQå ® J:ºÙ^ åhU@,X,@à†âa"0mnà†å MDàT# ƒ•/ƒåD 1 šð ìX+Å-0šeð´ü üñ à„åà„â à„å0„åà„âà„å „Ø/à)ì@_2ÿ/áÜ=µ(¡(‘nýíý P¿ÿÿê>jøx3€(YÔÊZèÊÚàÞäÂäÒÊæÐ 0ÀhB   UPTãMš-0—©B©0©™2]@àƒâ]3ƒ‘,ƒåÙ!É€à†åà†âÕá/à-*!„ Ùòí؉Ç(·f2‚C¾¾.+YOHèY )púüþ VV l"m ++ToCö¸®r²äêØÊæ0 L& ++¸<- ++(H“8 i8<JXa¨0% ‹%% $/ 0óóßæË4¹® ++ÄÊÎÒÜ 0ÿ0ú@ú!é`3cDhDRò#Ð]rŒ ++%PÊÊbd.‰ ++3”'€§Ì Ž…)@L @^Z Ú ++f: ++(vo4vJ¬@ò4TXÂ)t$ )X®"ÈOÄ j@ ++ Ä yÄ °à á^ã ++Ý.ภ°ÅÀ"àD ¸/šåH 0°$ °$0 e $±)ª)pŠ2w$% f@q~0 ˆ  À½L ++40 áÀ´À¡l—ôHp á`1ð—¬e¬pþ"qâ^ã7”÷@Sá@O ”åä %Ùä ˆ W ++`cDïÿÿêìKìEì,/Åì >”åd$d/)dd /ðš<< | <)—¸ „0¤ .ñ¤ _0šåLãET1.Ú.b8  ++ð"ìÂØrðÌæâlÞÂbdâhZÂ07,'S1 ++s=! òäèÈ" ++æèêÌÌÏ®X ++“£$ÒÜÌe- ++åO&ä !0(›° O&P ++PupH*ÂZ8áÆnàÒæÐÎÚäÐ`râÚ82+ L>oH,./Åh‚[ò.äÆÈ0d~2ø~Ê(#ì;0 H¢@t@êܼrÎÜÒôÊÈ@ÇbX"gú ++("-"â ++« Œ«ŒŽ)Œ«$ò«8«ÿŽ;ž6žÿÿÿ? „" "q4q?$k ++?&h?(b1?*C ?,*Ÿ.02)4Vº6 ++8 ŠŠD)Š$ "<ÿ h:  è³–³z0L,F`š/ž0/A0d@@ T|=U|s|l«&|… >P<¶&Ì ¢EÅ‚‡ 0 nÜÞ@ @ ó/@‹!6ë/;N8 dcu_ Â:u ++Ô$Ô?šl Zÿ9l Ô"Ô(ÔH-N_šåL¸ ++‚ñLL¸fê:@ ` `O`ŠåPd ++‚UPPí¦H  .‘ X/½X°7"©°7 ++Ë ¼7%:¼7(<•xT DT HT 'Ä+/uñ:<a< 8M<à˜8\Q5:(X ++Ü8 ©;$œL ƒåäŒ gÿ:0 T /îTØÚlPˆLh /p j|ÿ©pP 8 Kýá81@ŠL¸ ++ "$ \¸ ++ j¼ùEd"@ d e=`[ìø¥`ì  D.é@@ j¬ø!8 0],p d/LÀ ø; H5H¬L ++LDLL8L D/íD/ÜDÌŒ=D/·D¦p<V|ŽèµAÈ(€œ 8„_@ šå4xj|(D ˆgˆ[àšå ˆÈ ŒŒÔ‘ RÀ"@»Z} TwZ} Ä@0: …B\@":ü@$^:$¹=/ å×Z+É’kPS ª<B(-P <.ôþÜÄ.­þdœ(. þÜ.úý(.åýdÕÄ<¬˜„ddP<P.ëü(×.»ü<§(“w".ïûÏ° ã @”åâ¼@ûÿÿÄ0`ûÿê0`S»,ÿ @žåùúÿê@ á÷úÿêX_ïX$_ÿ=X,^ÿ,X"î/O á XLïùøR šå0P@=e\.=.§úœ"èÿœ.æÿÌ.–ùtŸVùÿê4@šåŠ.îøSˆøÿꌟ[øÿê  ã@È .ùÈPíÿÿ ++I`œ@à *U 8.õ÷øÀî÷ÿêÈÂBDcZup àÂäæ³Q  ~ _q Šå Š‚ &Î#f! š’b%𢠹^#ª¨2’dg(!|~ÿ*-ÿ* ++rZõÊ® ++Ð0âSãñ70âSã0)ccKQÕc`Y†“'8O¨ÿÿê %µ ,  . Š5*$tÑ0 `4*|pZL`4÷,\Q\b<žå”8C8Z’"*1÷LGRp@ÿÿê*êZ3>—/_^Bñ6P.0€ZÒÈ’úP ” ŸÌZÒÈÞØæl1'XJq1: í}1Y!X ++  < Q„ LSOZ|ÒÈ9¯ÈÒæÔÞÒÜè~ @(![1› L%à?ÄÂæ 92 È\éD@Ù`|ìYC`@ P_¬Bn6 ++.J. Qh€22R zD22p8FÎ@r÷1p{r&è «+) ¶Ï2­2Lž ++O &”s ¿O–å`M8M8`íy ++Ú6ñÚ6í8(/=í8O (‘7ÎiX3^ãpf! « Sç¼¹ù°Q¸*²kl[ ++ Ä R.U\OP%¥P_ðìRéêiD+ð"Üðü*9üõP&SãÌPà„/ðRá ++ 0“å÷ÿÿêp)@žGM É04S4Càžåø4/³X'/éXqX÷`¬/å ´¸1h/\*U°d`TãW ++p)°1K `µ`LXdn, d $M  /Y  > @$ (*  µ=c$¨¬!@žWPà ãı=-àš6¢;?@–Æ;/eþí=ÝÔS£Lä18dòkˆ +++x4@=;´Þ@4N(6PQÎHL Úèb;R& ++  ++ÆØÂææo.OÒÈŸR m; ++ÞÖÂò~ô ++?Ì-;J­h3T"îdÌMz<L^pNPR£:Tr s2> `l&óiPàèä4ZÒàèäX,``ÎÊäZfdê²VêÜæÒÎÜÊÈ ++cZ@TVD¤ÒÜèX%4"– ++æÐÞäè^hebl+!`r"RØÞÜÎgY 6b]ilh$0%da&ÑîÆÐÂä¾èf ++ \CÒôʾ½$憄àèäÈÒÌÌ ++ÌØÞÂè\¼oQÜÎØÊZE²ÈÞêÄØÊZ ô Lpn.Z\¸5pžvp^`Õ'dh¼†dhXVh<h8(hpp'jl€jlbdž_`ðÜêÚ ðfÄÞÞØÊÂÜ Lh$u Ë€ËYh(ˆj˜élpnh2 t?58 .1ni —pW ++¸Þ=XÒpÞ=)8þm)r p Z8Bt5Dë4Sàâ¥Üviàâ^bAØ /¥¥è,ÅiñC ++“ˆBBÜ *ùÜŒ.ÑÿàvÊÿÿê ºžÑ0v(HÎÊÜæòÚX`1èèò:"ˆV?B ++tŽT¾TRHBt €x ++zbaÜÎZÂààÊÜȈ#Pˆc | v|æòÚÄÞØ 1~"Z|•! ++±do@BxÁÿ 7v«x«x«:zœ4|Œ$¤A8 ~:€yÿ€y€yD¸7*67ºD6`\Xh ++@ a0B‚ÖZ \ÕQ&Pã{ ‡<‹ S G “å‡ S SÙOåî[^‰e<±ÓêBb8*‚-q( TÈêàØäg&ŸDæ@ÒÜaDÍÒod8X¥vY&0¼F˜v†1° o³8+²8’ ++„ á\[¦ ++Ñ^v0 ++„@ó ÿYH•4XfyĆØÒæèZèÂÒ.B8† ¸PBŠ  À§\@‘Œ}|‡‰v+0C 0 á@•z¸—D °ò4+@æ8*¹Gò4/Jò4•{ -d¬…—w <J- ä;<­D0ž"f &0©I f"Q .ñÿ^¯„Ì EY|Ošåyérò;"ÊBˆÿˆˆ0- ++ˆ^{ ¢Š ++ yXF¨#9 ¸Ž ø ̬yK¬$&|¬Ïÿœ2ž<Á~.‰[8àSã „žâj`ÙKÕÌ  ãp •R ¬ëuþ0ž1LÖ690Š;z?2w@@Šå <"Ü?‰ ; <@è8 [¼Ñ8Ê/º)8 j| 8€² VB‚x&|ˆ â€â@åàâàå0˜#˜¬˜!w ˜Ü? ž˜*!D º."9Z/ö' f(«ÄÄÄSpå€@!ÿÿêŒz&€r& õ$€ Ç8ÓÌÀXw1‚ Ô*uTòSãëþÿê<Ê4Ææìntd WúmµD˜B,± æÊèZ@ BÍŒ|ÿŒ|S@BŒ 8 /À” ø$ ++h–°' ++ «°TŽ\F8x=G ƒG ++Q:6+'°5 Ëgb–JšJœNñÎbbp<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdbrfpi;ž ñ ÂÆÆÊææÞäÈÒÜÂØévcÒÎÜBõQ-fo ++ÜàÒÈæÛQ_ ÂØØ# DR&p( ++àn !!Þbb0d  ++ààäÒÚØÊì^J¬;.8q f èj’”L)-w"g`æäÆVPàäèÈ\ÈbæÌbæ d Adæ t2æ ++¯Þàèæ.P§ Iøx“h–À­:–)!PÉiØŠJÈiåV= pm X‹çT[P"I˜ zZj0 áZ*‰” Úú f‚?šåfj? ++j3ƒê2T@¿a˜ @Š@€p بB!.µ@ÆÞÚàK{ú}4x %¯|¨Pu.$ŽV` L S–šœž,n@¨HÖÒ1yf P Xà*@¦ ++äV-˜8 (`0¢õ^(íl0¤Á@ð!ü ‚ Ü26 ´·OŠå ‰Y•p 0šå–,à)2 rÖ0¢I2XDB¤èvç(?„8!**¦˜Én0z  j{ ˜OØÊèR¬ < !? ?ƒ|=ª= ½ª1ª1 â&‰ª B çaK ++ sVá4y5Fy5 < —å<5 5. y5 Es y5956ZuZuDd+Zu z’ØÄR’ P£f’Š 2ß Së X ø Œq A™F@=ÿ¨h >L r$.]*®ýhtÆN?PpEB0° ' ++XJ8 R`BD ( F 1H8.RÂF.I( 4_>S_I:²_º B´PˆB¶;(h Ñ-0€#"àLa@ pšåG¢ ++&° ã°A&  ã#‹^X#à­T pŠ¿ãÓ -CŠå4,(["à¿2"((¥H1 š€0šåpšåE9@ÂB>hQpj¶€BpP_ ++¸ ` Ô `Ôÿ)Ô `1‚ `H xv  ð'F DR *Úꉔ@Âêð@ÖÊòîÝ0¯^¯^¯^¯/²¯s¬¯¬¯¬¯/â¯sJ¯J¯J¯/¯s´¯´¯´¯/B¯s”¯”¯”¯Cå ’0 ++B(#ê,äû5B ¸  L0 ã`EâP…â,à™å^á+:0†åà ã à†å  á0Ÿåê0g:à ø à†å †å ƒâ`‚åã ++,°™å Uá*°Kâ,°‰å ‹å<æ àƒå>@ ãðšå@1ÿ/á@Lðÿÿêß ÿ#2ÿ/áÎÿÿê ’8äÊâêÒäÊZÜÞÜÎÊÜÊäÂèÒìÊZÆØÂêæÊ@B ( & ++ )ðTãà—å@žå¡ÐTãPãôà ã0—å0ƒâàƒåãÑ&0‹ñ Å0ôÿÿêà ãèåÀ ð ÿ/á ++ ++B¬@BLxB0 ++0€P ++(BP"û’,Ù¼ö,âBŠ +Ø  L$à™åZá²*€X⣠++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH/ TT½T˜!/˜?/U˜/™˜@í˜0/1˜?/…˜/ɘ@/˜//a˜?µ˜0ù˜@/M˜//‘˜?å˜0/)˜?/}˜/Á˜@/˜//Y˜?­˜0ñ˜@/E˜//‰˜?ݘ0/!˜?/u˜/¹˜@/ ˜//Q ˜?¥˜0é˜@/= ++˜// ++˜ PŒl \&À$@ÿ/áådfNýÿê0(ð3ÿ/áGýÿêjB ¸ þ ++öTã`EâP…â,à™å^á:@ áàFÌà„å„åðšå^LóÿÿêšÈ‚B† XpÄ„ŠåpŠå~ "z~ æk ++àšåžåPn&`n,n°à á^ã ++T_àŠåº]dÍL¯šåTão¤)*%XTÿB ++ à”å”å0žå àžåàžå àŠå@Šå0¸|n ++`@šå0À€^ã' ++T_tÙTPq ++ š¨\/)P` LD,”å 0žå ,Q“å 0“à DàŠåD=pš6d5 0Šh0Äð,zl.ñ$ß0 á á0Šå@øn B?ç Jâ0šå`E⌡Œù  á0åàâ àå@å&à ãà´?ž´ ++xn´¬¸<á<0 á8ü@+!@8@Šåo šå xiH" xxoü©x>x8´/x#</Yx'@™@4  á <$šP2ÿ/á»ä OXÿÿêø `n |.†þž.þ@ó;^š¾ÂÜòÊÂÆÐZÂÜò  HæòÜèÂðZÈÒæàÂèÆÐXB$@ÒÈÊÜèÒÌÒÊä~8ƒ L 3h ++P ++H ++S@ÚlðÊääÞäB ¹P *ÈÞZÈÊÌÒÜÊZäÊÆÞäÈZèòàÊ@ðè€Šå ŠåЈø"{ øLh ++„l^ : „0‚帇à‚å`Eâ0±M : †å p†$ð à†åàšåà†å à ãà†åp áà ã(àŠå,048Ìÿ à ã<àŠå@0Šå& ã ã  ã$ð¢Ð$äÈñ Tã $ JâŠå Šå$ Šå4àš|18àš¼@<àšå„8ØØ’ü8kc8 Jâ4¤à ++€àâ^ã pš¬ j ,"$à„S Q ++ PžHá ++´_šå4ˆ"ü?^"44°ð@Šå,™åã» ++ P㶄 h<Ø ’ÿ‘<n< Jâ<@D@D ++‚Õ@[@ Jâ@D_4šåDD ++‚DD: @O@ŠåHD ’¿]HH´R0 áD@¨(øQe ++:8‘†åà†â à†Hðà†åà†âà†å@àšåà€†âà†å@‘†â#à†å'0†Ô+ 8 á(.4ŒÜ[ ŒŒOÈ ++b0”å40ŠÌ0àžåø± à“å0“å<0Š ++@¬D ošå@šD Zÿ¡D ä@ ++:ô@±€åà€â à€å @€å@€åH¤l* lü|0p_H_¼ÿtD± ++¼¼?žÈTÕTSœ ++T.™ˆ jÿ)T<e<o@Šå0šÐ\”ߥ@Aà á `SãcÔ"ˆ? Š(KßýX @ šåœòLàŠå(àšåPàŠå,àšåTà9XàŠ8 \ä| ZÏy|¸&/¸@)´lä8Hún”ÉÙ||X@f :@x&@t tp€'à†å(à†âx¢/0†å0à†â3à¼à7à†å8à†â;à†å?@Àñ†âCà†åG0†åHà†âK<ÑšåOà†åPà†âSà†¸"WàÌ[Ì.ÌkÀÙÌÌÌ" Ä ± à‘å‘å pž˜ ++£ à—åp—å°-ÀžüH¦:P&Œ'pˆ°üÀü ‰`  <u<Ì a< ØHØ[`ŠåD ++SJ:4P x0"9ô ++|]å )¤  à o:0 l 0  /í Ü0]ƒå ƒ/̤ o·:00¦p &0[`Šå|.Žø1à@ 4H H´"D  ++X j<À1  ++ ˆgˆˆð ˆ^< šå„ŒŒ.½ "@ÀÐä Rù ;#X 8S0:h& @À\T": $0$^:$¬cà„å 0¬ ´óÈå.×ÿ¨É’kPS_1ÿ/áB(-P PõH_0ÿ/áä.Ðþ<À¯p_7ÿ/ᘄp@4þð@îýÿê´S žåÓ ÀùÀxpPã4 ++À/  nœÍø `LL×ÐT/Vô ++=0–"ÁT ++\ 30€Ø€<h<­P 4p//àT H &GàX Hà ãX €W†åXà†âT h ++â_à†å`à†âcà†åg@,kp ,/Ip 'p    " “"žp!°“€ ˆ -@žô/:(³àƒâ àƒå@ƒô,ƒåt&ôÀÀì,ž°†å À†å° " D/ °,üH/ 0`ìth ° ++ÒÈ Ø ` ô¼ ++p¼ ++À”²4 <ž<8Š ++ ,¬ &sD ¬ ÜbÜ\R \ ++A\,"1„X,!,Ä Ô/ Ü ++øÜ ++èl ++ Ü ++ÓÜ ++ÂL Ü ++ªT ++Ü ++8oüÀ Ü ++ ƒÜ ++$Ü ++_@Šå Œ¢ø™  Ü ++Ü ++” *Õ Ü ++_L:Ü ++ <¸ ++ $ 0$ ¨ $ < À ++­vOP7ü ++&(Pð˜ ++ØÈ.¸þP§(—(†t o[GP'°_;ÿ/á *ýýp<ý° ã.Óýx¿.Lý8(" @žå ´0šå “å™úÿêØ@$àDàŠå 5Ü8$ N ++t ++°/½t ++. /ý //çT&`ä@—0 p#t jÜýàH/0$DáDØpØ&i¤Ð¤¼ &àÌ (À À À /?à€&WàÄ &_@À t“gà†åhà†âk˜oÌsÔ ,/Ô '¼ D ì ìØ # 0\" “à ëà Tøø<Ã< À<, ¯X ŸX ’ pX p … _ †å pl ++xX/ k¸  À^/ 0L/NØ ++ h ++>`ä ˆ "$Ü ,/¼ü,ö¨ ü/æà?ÌT ì$ $ô §ô(“<L< ° ø ++gøVøFø5\,%øø8/ýÔ/ìÔ/ÜÔ ´ x´,è¬/.¹&¬€€ ¤0oü='¤#À)/y'¤ Z¤L¤>¤0¤"¤ÈÈ‘ ÈŸjE  P.üþ(äÔ.ÄþP³(£(’(zfRP-(óxåxÕ(»(«(.›ýT.Žý.ý|t|ghZJ6"ÈÈDüÿê &DO< ++dküý, ä *\/ D D/ ++ˆ  ˆ .1üï4ÙN á%ü D@üûÿêSüÿê”.Ùû(.èõPS”õÿêÜ*ŸGõÿê  ã8ì Ze-X)`íÿÿ ++5õÿê\(0h \/¬ôôRôÿêpŒ3 D Z.Ü"p€3…Xð~ôÿê:ÊBü Eð àÂäæÊZÌÒÊØÈG.`TãW,wŠåŠå;5"LC."=‡3«875Ï ï&()75_!0Š·0+Ùc!!0šß #“5'3TP×,,)¨LO¾ü%}T5 ÊC#¥:«‡5T¼¥@T55X+XP$\(ÙX 7¤,%Lü/W '/y 7Å . ö3 ++x–Wx+=x`x.$¥@"P“7 ‹àà,75 àmšå @Š/œo)C‹ )0žÛˆ/à?6*±€"àû Ð l|í÷ Ošå@S+%8à á@šå‹T¿ ã¿6@àâ¿630ƒC8±Ó5C8.íË6‹6 pX, á5+ 1à„1à„#)1 à„q à„å0„C-/àK ëƒ ¥O ]DÿÿêŸ#ðÜ*üß(,Ø´/e´'/¡´ã/Ù´à´HŒ/e 9'/¡ ´+DåDÌ<1 0Šç*s7 füA ++s7c7D$Ü(< ‚} ++(; (<@¤8 [øµ8 tp ++Kí8[1 W$[p@åàâ # ÷ +… T  <Á<  ð DÐ ++Ì+3à†Ìk o÷9û³AТ¼O0žå¬ .Õ ¬ ÀXÄ/) Ä'/e x#/ xw/)x'/ex//©x'x x,     !žX ++1 ŠC@¨.}` ++  ‡@šd ++   À&@¼§ 0†å †å´ cî\Ú ¤!0ž#./0` *}Ã.0ü ` .  ü c †å0† —í ¿¯1 *aä´¯.­ûƒ@óšÔÌäÊÊZÒÈÖ@úÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ ++ÌØÈÊðàäÊææÒÞÜ  æÆÐÊÚÊ+ð ++ ++ ++îäÂà   L ++ añE–ÒÚÚêèÂÄØÊØèÞà LÜ$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`ZbP¹¹?81”Ó ÆÐêÜÖæ   ++–>ÿ L  ÌÒðÊÈr`r + 31m‘æòÚÜÂÚÊæR ++ÚÂäÖ’ØÂÄÊØ^àØ•að"ðÒÓÁØÞÆÂØZ?÷$Â`ìäÆÊÈÖìðîÄÜæòì¥Ð8 1ÎÖ ++ÄÒÜÈÒÜÎ ¢wØÊìÊØ ¸I`"½BÐØÂÆÊÈZØÊðÒÆÂØcñ @& ÷ZÈÊæÆZÒÜÈÊð4F L%~ gÆØÂêæÊæ""š ²„ LàÂäÊÜè„?äèÈ@g ÚÂÖÊZ)%%¬$ˆOZÖÊòŒ1?Oâ`ÍOZæàÊ„*ñàäÞèÞÆÞØY ++ÆâêÞèÒÌò@º&¯ÂÆÆÊææÞä(_ ++~ú$KAèJ !€$pð   ++æäÆä-!ã AàäÊÈ Bþ×dT ++7 ++X X*?Eã¯ÆÞÜæèäêÆèâßÊÜì® }(/"%X§s°$§DìÂØêÓ$ L& ÞàÂâê“…& L(¯²ƒ( L*è$ƹä* L,êÜèäÂÆt, L.:.Næ6äÒàYw. L0RÃ0 L2 ++ÈÂèêÚ°2 L4ÌØêÒÊè£4 L6\\\”6 L8èÒd‚8 L: ªÃ: L< àäÊÌÒÞä< L>ÒÜÆØêÈ=–> L@ äʵƒ@ LB QØ$êäôB LDîÒèÐZÒÚàØÒÆÒvPD LF)ž0÷F LHHÌàZÌÒØèÊäCÉH LJÂÈÈZ¬qJ LLq)1NQ"ÈZN LP$°¥P LRÊ؈“R LTÈÞ°T LVÚÊèÂÓ{ˆV LX&Ž ++zƒX LZHáCÆÞÜìÄZ L\ ÂææÊä'ô\ L^ÊÞØZæèòØô^ L`8ØÒÄäÂäòZäÊâêÒäÊÚÊÜèæZÞàèÒÞÜ×ô` LbÜÞÜÎÊÜÊäÂèÒìEªb LdØÊè ++sd Lf ›!Zæ¸#ÜÎQf Lh9„ÂÚÊèÊäÒôPwh Lj,Màj Llàl Ln"ÌÞäÊÒÎÜú6ÆÊÈN»n LpÌÒØÊåtp Lr 9eÆÂØØÂÄ-‚r Lt,Hþ$st LvÙ rv Lx0¿ÜèÊääêàèæK%òzx Lz._ ¼sz L|D£| L~ÞÜØž~ L€s 7³€ L‚îÐÊÜr‚ L„S‡„ L† ++HCu† LˆhȈ LŠâêÂæÒ„Š LŒä–bŒ LŽI5ÒÆÂ(qŽ L&ŸKÅZÐÂÜÈØÒÜÎZÚÞ*P L’IL$Ø’ L”ÄêÌÌÊä*S” L– T– L˜ÉcØÂÚÄÈÂô˜ LšÊÜÈÒÂÜÜÊæørš Lœ"2ñ ++7°œ Lž ÆäÒèí @ZæÊÆ6tž L `q  L¢ t¢ L¤MÚM3ƒ¤ L¦8‡Zmö ‹Ħ L¨ ÊðÆÊದ¨ Lª êÜØÚǪ L¬äläætÊq¬ L® #+S® L s L°Š, ++Ê° L²ØÊèT왲 L´êÜìy´ L¶ ¶ L¸$ÌÂæ’;äÒà‹t¸ Lº"Q >vº L¼"2N ++æм L¾$ÂÜÜÞèÂW ^U¾ LÀ·AÊÜêÚfÔ¦À L æÊ Ñ LÄÊðÆØêæ‘®pÄ LÆq“5|àä8wÆ LÈ.xÈ LÊ ++ÛºÊ LÌÈäÞà–“Ì LÎz|´Î LÐ ++ÈÊØÂìÐè¤ÒèÞà‚ û"ÌðÈÌôèÐdâfÐppìÈZ 80 GÖÊò­ Í~ Ò ÐˆTæòæèÊÚT÷ ¨O¦OXœOp0Ôa tÖvØáOßO78C–C ?@nn+˜5'"ñ(Ú8 .ÒÜìÂØÒÈ@7@v {…ÚHÞ,|e <H¤Dg ++$øá  s ++ôÜ` ZHBà Wqàâ^ˆ$Ðàåàâ^ã˜$…¬P"/i"Œ@]Y"šX5à”`O½@4QâSˆ1 @žåñpbùÕÑ=”Êÿÿê ºÞª±è(HÎÊÜæòÚx1èèòUðˆB`8 ++à ++ B(81S@Bà 8 p¨ ++ìŠòÜÎZÂààÊÜÈ8BP c îu|æòÚÄÞØ1ðò"Z|úgôæÉõ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdbrhŸ0SAâ…(ä>@>‹9²b"+*ÅÌæ ++pBP ++(%Hc(‰O8Bê‰ÿ &èsêsêsês*ìd%îLð|ï ++ZæÊèB@Bò…ÿò…ò… /À_8ô ++x,0,O@Bö§ÿö§öœö,8HôÎ%ppXþ…tøú-ãC +›åχÜpô ++`„?XÞ  YøúØWVxô ++hW!@=`EÚü ++=êL8B 7ø -!  à$Šå(Šå, Šå p« 3šå&™$C õšå, šå @ ã`šåð™"i™BZ ++/ žå†X0G&ZW*­ZW³&OP%ýP (¦X*OI¦X/B '.ðP(/íð@ð .9ð0T ++¨+/!ž§  ¦YB Žã 0l’ø¥0k#0 #@O RCžC#b pšåOÿú/?žžV˜&/EX7/‘X@X@XnôýXX/ùþXS./Ù(ð7/9ð• (.ðgP$_œ?ÝP-ìàVc”>?² šå,âRH ! b,‚ãà//  rHMn!åXë,°˜8Š^ ++Œ€ŒH ',Ÿ0À0šå€0âSã l ƒã*A/0p  pØk._? ž`jì]`e ++Qe ++H¥H ++:8³#1 @ƒ_"¯#Ÿ"*·%›0åà ã›%" à³% 1àL:à£#t´.Y \ `¡Æ6Ï% Á·' ++‘ @·ÿÿê‘ µü1 ”ðRaȬ/výÄšbblŒl"ìq}(šhyàå pž«ð—åü½ ++Cà✠++bDàQSá]ü$P$JH)”Ì?0Šþa*Q l"0.o4%0”[bà‘å [È[Žã›%_%Þ0†å †å †å¤ðT º9@êÿÿêh¸(@(<E"àt*Y_ á$0 p*- p$’h4  á^:0ý[üm@”d/üdˆ ++Kõˆ—:6;WÆò P®B[ !r"J"b$Jd&Jîb(J(r~*Jú ð~,JêÒÈ.JàäèÈZ1'10Æþ2ÖÊòæZæÊÊÜþ> I™th(L_:x , NÂN>€ ++#x J@¿Ò·â@ÐÂæ@ÚêØèÒàØÊ@@úŸ ++0&k6í kebköbD,«ÂèÞÚ V*°V S?ð pÏRÄÞèÐ@ßV@ÂÜÈ@ø Ú?@ b 98N4@ BN<"<;?¸ ht & wÈ<(h28è ++‚ B0PdATD ƒ ++(?¸ ^< ‚7!ز20 =ð ++"ìÂØrðÌæâlÞÂbdâhZÂHZ$ðÆnàÒæÐÎÚäÐ`râÚZ %“(¹h¨  'Ñ j$+3 +++†äèÈ؈äÆÈ+µ( +  ¸€e30 8¹0A#ÒæM0¿04êÜ#yÎÜÒôÊÈ@5&A8 DÆ1@é$ ++™1H-ZH 54p¨ÊHBX8«ËT!HFR9G³8R€¦ô¯H †ÚÒææÒÜήç°! ‹F7A€Ìu/@ Ä)nuü 1@ âo0béB( ù%§PYh* ++ZZ e#TUCY À, ++V V9g@rà ++ ƒ“(ÚÈB *õ€(HÈÒæèÒÜÆèZÄÞêÜÈZÒÈæ~=Ô@îÞêØ´ÁæêØè@ÒÜ@ÈêàØ–$Çæ@ÂÚÞÜÎ@èÐÊ@])%X@¸$$X@TXù»@)¦4P$Ú#Z!F.Ž?P.Ô&îpì‚X ð}wÛ ++¯€Xâ ++ » °q°.éÿF1ýjÞPBb8ú Æà lØÒæèZ|ìÊ)£:üp`P 52v8ã& 18hD%ì*,o€ ;3 ! WrD4ø ++36û ++ÎbbrÜ l%/d`% n%b% p%d% r%f% 1d``%h% b%j% d%l% f%n% h%p% j%r% ÿl Ú.(0. []8./€.N++;p+å ++àäÒÚØÊìúðÇT ñÛ/4 ¯3JI&ö1æ/ð "$&(*,.02>˜G#ÀNŠM²468xQT.Ç@ÆÞÚào,C/9)29Vî- ( (1X.×)#j L:9Xa@<HÒ¥D:Ñ Q@ ++Ç+ tØ 2B œ•3\ 5Ž>Žt<>‚;@ZàB¦ B @ nIaë<0—åOVR‰VFaa - —b9/5)XÃ!aa%n¶< UP à„â à„å¶;“„âà„å0„L®;.ìÿKØij³Þ9£P6Š$3`$x°D"?DX"ø".!/!rPH i²(JHÚÂà1/@dÿ©3ddïeFeFeE£H0JXá$¿ $\‹h ++ÄÊÎÒÜa0[W%ˆ‰ˆ7j"<äÇ /f`Ç anÄ ý ++Š7|Fèê ú  Ý6Pú RtÁbÁ ° /fd% ° f° b° f° b° f° b° f° b° f° b° f° b° f° b" h b" hr brhr brhr Pd`LD L<>A ++ j4N_ ++p@–8# Lj@PR#ЊOxFH| >X"0xŠ()@F®OH¯{ WTV¾ ++i g 0z%@@äÊÆè¸;Þäè*hGXlZJl:Z`vPD¨,\[^}[^N (àaN ÿ©1`b?bXøÙ(Ù0 ÿ©1dFfFfFI ¨ZhZ š%ÈZ £xÚ`jpj ÚD ++i i GC0lfoø0 p0 r0 t0 t Á ++ dÁ ++hÁ ++ dÁ ++hÁ ++ dÁ ++hÁ ++ dÁ ++hÁ ++ dÁ ++hÁ ++ dÁ ++jÁ ++ dÁ ++jÁ ++ dÁ ++jÁ ++ dÁ ++jÁ ++ f3 jr frjr frjr frjr PfhU nU nC>ù ++g wU ðU XU Ñ)X‹ ghj ++P%8 T`Bh F lÜÞ‘(ÔæêààØÒÊÈX@ÄêèË&5îÂæ"3$q0Bb#7H ++ bPž&Q¹J`(P ~‰A/‚^>ÿ)‚_>RHB‚ /xU>(U>1 ++Õ?/„xÿ„x„xý?M ++ ô>XB†õ>' ++0ùó Œ*HèäÂÜæÌÞäÚÊäZ|ÞUÐþPG$Pmý ++£(ˆL@ŽH7ÂØØ%ĪŒ?¬‡0®œ Uw †4+q ÚÞÈêØL& ++°Ò ÑdKrCZ°8 oÊ° ++Ù ÀÙÀ×*ÀÙ%BÙh¾ °Ù*OÙF´À/7ÙCÙWy/ yÑA*ñÑy5U5yÔt¿2b"iDàÅW3å4´ 1ä!àô› ¹èÙ„I_žå¬L.%Ðz_7н$ ›È † È *¡(ÈtDíL¨·À¨u&Y†Ë? á<•<(Ñ< \"'h¬ }‹ ',–å] ++µ#,é‡"Òÿx‘Í Ø,Í,0šå*< <ä. /ãþA*At/ºþL• <yRŠW˜1°Y ˜ ++²Huux.¢*f8´ &ao[V&VOH8²9A(´$ÀV3 $Eum5¶apÚ‰1ž¸¼ ÓB?¨ë ÄÒÈ !(ê ++Qº²I=¼ ++PBS²¾) * N_š¾N pNpŒ*pN%rNÈNÿÿÿÿÿ‘NÀ&H>y T5 2TAÂæØ@,ZÀZÂZ0Z y`Æ`?Ä\7À\Æ\È\È\È\ ¸\¸Œ*¸\%¢\Ð\ÿÿÿÿÿ‘NÊ&H<€ \Ì\Ê\Ì\y\Î\lÊ\Î\Ð\Ð\Ð\ ¾\¾Œ*¾\%Ò\Ø\ÿÿÿÿÿ‘OÒ:HpŒ f4Ô Ff6@6pÒpÔpDpzÖzlÒzÖzØzØzØz `z`Œ*`z%#zÚ;: »fw;:o;:^;:]%0” ?:ÝhˆºD.!D²r‹:žž‹:pg: Ýg:‘Ú/Šÿg: G0Ã~;ƒ@·`‡:F,_ÒÚm: ””X*”%%2Üÿÿ%HŸ“"ÊZHWÜ ^^X*^%'bÞÿÿ/*H”6&@&6\Þ% %X*%%)’%à%ƒ ”C9ãt t¢Ùtét< šåà $à 4ýO Ô  §2ìÕÕ%P%s ÂÒäyå™ 2("Ð ¤æÞêäÆÊZÞÞà¿ p´ Oˆ ¹ej4Y /fj¹eE Ñ{\)hÄ bàb \b\^$\bCŽR°+⊠++B(#]¨,%ð!rB 1P  L$à™åZá*€Xâò ++Ÿåê f Šâ`ðp–åàâàŠå@ ã ð– u,O JâP-ÅP<+P04W ƒâà`ø à‚å,°™å Uá¥*°Kâ,°‰å ‹å(O àƒåHH4uH4]H4EH4-H4H4/ýH3åH4ÍH4µH4H4…H4mH4UH4=H4%H4 H4/õH3ÝH4ÅH4­H 8ø0žå`EâP…â,à™å^á˜:0†åà ã à†å  á|0H‡:Tà†å †å¤´`‚åã ++ uè4]Ht_0Šålldbr Jâ0šØ@ØØ3Ô?žå”/ ”” ˆ>@ ãðšåˆ@1ÿ/á@OðÿÿêÅ›ƒr _2ÿ/áa@K3/ëþÓ»£‹s[C+/ûýã˳›ƒk@Sýÿê  &À$@ÿ/á*! HÿüÿêhÿA3ÿ/áøüÿêüj,æÞêäÆÊZÌÒØÊZÈÊæÆäÒàèÞä$ÄÈÄìhæfÐÖjÔÂnäâØZÂP ++  ‚R?ñ* ++ÌØÈÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ØÊÜÎèÐ AÆäÆð  L B È í „TãRõ "Jõ ˆ7 ++àå埊åàŠå A í " ð  Jâšåàšå áD • ½Hõ à‘å^ã ++0Žâ 0å ‘ …>0Žç… ¬oŠåÐ*Eˆ@šåŒ.¶ÿ¯ Dð1‚ FxæÌÈ@@B´88ÈÒæàØÂòX’BLHB`8¢ ++(B(òL äÊÆÞäÈZîäÒèÊäX  Gú0ÎÄîÆèî`ÚÂÐêäÄêÒÊÎànêâfZ`P ++{#4k‘&æÌÈ7Xv(ÄÌàWv*ÊÌàYD Yh  XY„Ä0 á]»]M¨ ++>Y"0‰õà“åžå à“å 0“åPOàŠåmPÑ9[#m` àšå 0q0Sãgq´ ƒâ å‘åj[ ƒçÝÄ/AÝ:Ý:ÝI­l l]l¨.,À ˆ.5ˆæ1à}H¹H8[Lø/ÉøOŠÿÿê˜/ ˜E’>!r*‚ Fx$ñ`Xºˆ ++øóXš€Xrh |B´XBL8 ‚ b ` QªP\J 2\aX¢Mõ>ÂÜÜÞèÂèÒÞÜ$ÄÆlÞrÚÈfjrÆîrÈæjZÄK(K7<01+ônÊðàäÊææÒÞÜ TE ¦‘æèäÒààÊÈa ++ÌØÂÎæ"¼ch Pc@ãÈD ŠågÙgÈgÀ užg_àŠå‹’|Õ_#`g‡gp\¼ pûZg gC.±<l-g ¨/¨6 ž)pš¨1ð—Y?çœ ¹œÆçH¼.¼™ç/àL x/MxOjÿÿêÔ.Ô'  ßv2Š Fx#4@8ã1hãPˆÒC¢Üz$ .Ë Rx ÊòC Š C òC ²N l2 ++ ò!Bòƒ $ÚÂÖÊZˆ Z Ï B" € $P‚ åùp á0 áàâ^㎗ÐQáˆãz4ÁSãkºã]÷RãOºàƒáã!SáÊ`Eâˆ:@ á`ÿà„åp„å 0„å „åƒñÕ/ æÞNqpŠ] n2 =0pšåÏ šå á áPP—TãÈÿÿ ++´Ü Ü1à´óðÿÿà’åàâ^ãì?_˜ÿÿ ++ç`ÓddïT“dëd_{ÿÿ ++æddWTã挄°šåÀšå”Ҕ̔¾”¯”¡”“1ã…j1[ãv1ãh7\ãY´#´´´ ++´o°„åÀ¼ï¼(ÿpŠå 0Šå Šå°ŠåÀ6*6Äpšå 0šå šå`Ì`!a`Ü_Àÿÿ ++ª | ++ |œ|œ||  d ++ d›d›dpd¤:T¤P7¤( ðZ‚À ++@BP0  ~ÊÜÈÒÜÎ@Q@àÞæÒ4ÿüæ@Òæ@ØÊææ@èÐÂÜ@ÄÊÎÒÜÜ(ñ$ ++HÞÞàæpBb8’"hB&8B$@hLSÿÜÞè@ÂÜ@ÊðÂÆè@ÜÞÜÜÊÎÂèÒìÊ@ÒÜèÊÎÊä$2 2D2@á °é.Ó€6,j/dÈÍd‚ S0Í5"i &É&(ÄE* m QØÒÜÊ"q ÆÞØêÚÜ*~ o, ++P :A$€™f"ˆ™PaFg@d/÷} 0 ÿPB0 .4ÆêääÊÜèZ‘ o h % — 0T!Aø@™?Ëw2@žc€ðšåTã  ¿ |â^ã 0õàžåRáà ãøà‰æ_ø ‰åûÓ ø j ++ ` ++ `. *D¼àäÞÆÊÈêäÊ7)~)+  ñá0âSã$Ã0åSáå  RU10“ Ó ++Sãúÿÿ(0 íyRØý90"¯DZæÌÈË.0 ο ++ÒÒ ++Ò’²` ++Ê7QãÊ ÊÇO@’åâß ++Zˆ0 2 ÈÍ@2?ÄÌà?ÄÌàs  24ÊÊu  4:8$ë°/ˆ  *ÖÙý ++ é¹5`%q z68989::(Ù;=#=Œ:=1<[²8ŒD ˆ $0 3í {ñ ñQ‚ ++pâW !‘ Q à sso à ãàs@TãÔûe)iÉiºÝOšån!<R@ J⤜DE_žå}T¡TMP[10™ä…”烔 H [0žåî#X¨·߀åà ãà€åšü.üA|〠€1€H €å€0Ä x6 a"0»ˆ|à ã0Žá    àÔ„€!à„©c à„å0¨ Tí¨^à ãåÿö ÈáO0 ã¼Œ¡¸ ++Ô×*-7)0)@'<± g 3`>” àˆÊÜêÚZæÊè~XF †( ++@&H£0ZÞàtæ(B /FZæêÄ6o ˜|•0 ++@€BnD@ˆ`h> ++`š& ++8M(ò (˜ Ìw àÈÈ ¾ ¶ Yr>H+7F"Ç,.ð •a^ ++d ,ß ++z>8F .‹` GH*ÉÕèì#ì<Hì7J&ÍŸêè# è<Jè=L*ê?˜ ílí\íV_ ðà’åã) ++ã ++ ++!"0©/àõMPP ¨%¨<P y0ApP ++@ ++x«&( 8O(Lm8N6« é'sP  X ( {PTã¢k@€X✠4  ãóGxÌ ÷§Ñà—åàâ^ãd ëT” “Dÿc°àà^(Œy'Ÿ á áø $ @6*#bpŠå0ç$ ï ïSpšåT ¬ ++T!]TÉt $ “ÓH4O ; /Uøuà )/™)@^ÿÿêü L]ÿÿ ++8(b.H÷Áh.àÞäèZÐÂæZ #‘ 5P8!¯ %B&Ò0N püæ@ÈÞÊ0æêà,@1^@ÂÜÈ@Gl  ++¯1((J:ØÂ@ÄÒÜÂäò@ÒÜàêO} ++s$) !Üι XÚa ÂPP h JP8!RõT  ¸ ,$ðH)& L)†|sìÐcì“ì_Û3ãQËC«p á?àãK# )#°(/©ä&Ë7ãOüÿ à³  ++è á†å0†å @†å †å ³ '\1 á3 @ø ð1à á3 @šå  áÕ‹H¤‹(œ” /=”zsp ³  ++XÂæÐM@x ++á P9#`–?8R8R" x`8 ’T†(/.ç !ó Có ?V6€UZàÂèÐ+ %  o_8V©Z©Ñ?Z>ÞÆÐÊÆÖæêÚà\k0/ , KåBå1å""")Ï’å@ ã ŠåÙç1+™û4¡ šå ’åà„Ô"'O á(ŽœÙ”.-”¾E·Õ’¢HXÓ„od Zî',nr\ ++ ¡—^ ÞàÊÜZBð`[-  á-áÕÕ ÕQ$*Ö }AÉÔi­Š0"H ?0^n™b8ª` h—bØÞÆÂèÊY dŸ*p  e R à :á9žpSPá$&&Sºð ¼ ++o#"o#p“åâüë?ßo# H à _(,$ _(±( ¥-4›( .šÿ( ʪXhHñ?0b€!b{Š`{CÒd· ++Jbd¬ ++If6•„”jé/À ( ³/QáÞ’!0’ ’01P` žåƒ/žƒ/ây`šåð0 L3Pã ++L@nn!ÚPÚ^R ²·" œ0Q žåöªJ–Q––à”qŠ6`FfFh"&8ºjå´ ++fhlFn#ÝŸ@B € -¤#¦ U—å@žŒ#$Œ#$a0Žâ ƒp “€#–<–<&0‹†< 30ôPE ¿ ++B¬0l­#xNª$æòÜèÂðZ|]:/H <"Ô ++­,, S ++Qåà((”(TÕ#sXpÈøõ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂB4À' ++31¬'nÄ'SîäÂŒ8š'p4XP>P±ð@ ++ÈÊÄêÎàäÞúa L( _!Êä^$ #h+0HÜ™ å50(<¸ÆÞÜæèäêÆèÞäEK/¬DP ++($[_ 1Z ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* "=J,‹€ð"B p  L$à™åZá¥*€Xâ– ++Ÿåê ¦  ã Šâ`ðp–åàâàŠå@ ã ð–ryO JâT1ÍT@/!T?uT@ÉT@/T?qT@ÅT@/T?mT@ÁT@/T?iT@½T@/T?eTö `EâP…â,à™å^á<: áàLÈà€åà€â à€å›à€åà€âOà€å   * O á<A<Z á( H0€3ÿ/á½ÿÿêx h&À @ÿ/á±pL[þÿêHÿZTþÿêœjäÆÈ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZddfl ÎØÞÄÂØ(HæÆZàêèZÆèÊX ++6"HÚÂÖÊZÆÞæèZÆÊÜèÊä[ ñ,nH"ÈÒæàØÂÆÊÈZØÊðÒÆÂØ *êÜÊðàÞäèÊÈ@ÒÈÊÜèÒÌÒÊä(X²rG0Hm~n Rp@!Z@8$@oZØÊìÊØE rE!E9,0E¿ÒÜæèäZÆÞêÜèK ++'h`KªK(K_ÂØØÞÆKbK! RK9&(KèÒÚÊZÜæG dGúG>:&GF fF! ¢F>2.h_ZæÊèBJ hJ! JJ?$:mPjPòP>.:rPlP!šP?82wLnL!BL?40|Ké!êK_<ÆÆßhß!’;_ÆƲjÔ!:@*"HîÒèÐjÍ÷â@äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂ0 `ø 0ÌÎÄðpÎdfÊÚðhäÌ`èðÜdæä`ZdP 0‚|fñ ++ ++ÌØÈD ++ù÷  ++æÆÐÊÚÊZÞÄÔÊÆè ++ ++b  ++H" Öó * L 0æòÜèÂðwñ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂPÓÓ:31jóÊðàäÊææÒÞÜ  ++ÁQîäÂà~@M0õ7* Ú"èÞà L>$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Zb¢¢?82RÆÐêÜÖ ++“>ÿ  @" LH\Od LôRz Lîq L " L‰ 9O$ L‰ O& Lô$N( LD*A€A,® ç®.)~O0 LÃ#2‰°$4Ê $ÊO6 L=%O8 L’E: LêÕÿ< L L ++æÐÒÌè> L N@ÌÒðÊȼ`¼ ^ 31·—æòÚÜÂÚÊæ\R ++ÚÂäÖ’ØÂÄÊØ^àØß@añÎfff:Òædn`rÎjdbîæìæÔäÔàÌrØÄdfÄZppf$h$ ++h$j$ ++j$l$ ++l$n$ ++n$p$ ++p$r$ ++r$/h`$ !r`$b$ ++b$d$ ++d$h ++rhhh ++rhhh ++ÿrjB Ú"B1ñJFØÞÆÂØZXû$Â`ìäÆÊÈÖìðîÄÜæòìZ`8 1¤ÄÒÜÈÒÜÎ »GD FD`LHMŸJL jËÐNäèÈ (ð ++àäÒÚØÊìÂÆÆÊææÞäZ¹%ÄÒÜÈÊðÚêèÂèT ++"> ++®Ä# JgoÌÒÊØÈæÐBJ,ð'JàÂäÊÜèJàäÞèÞÆÞØJæÊÂØÊÈ~JÞàÂâêÊ~JêÒÈJàäèÈZ Æ @ÖÊòs|ÊÜ">×ÝDò1& âRZÈÊæÆ€Û"1F L%~ ŒšÆØÂêæÊ„õbàÂäæÊZ!æ>\„?äèÈ$ Ú)I%¬Ë% ©OZÖÊòÎ^*Ë*3I_ZæàÊÆÆ°âêÞèÒÌò@~ QÏ&¥ÃÍ Ó$$$ñKMaæäÆ"Ù BàäÊÈ «T2:`ÆÞî ?êÆèÓ£*ÈÞZÈÊÌÒÜÊA _ZèòàÊÖ oÊÜì{Oð&£s°P€DìÂØê^‚P LR •uR LTÕ~ƒT LV:Á «6äÒà+ÔV LXêÜèäÂÆYtX LZ@ÂÓZ L\ ++ÈÂèêÚw\ L^%”^ L`èÒb³` Lb\\\°b LdÌØêÒÂèÃd Lf àäÊÌÒµ‚f Lh ÖÔh LjÒÜÆØêÈe–j Ll äÊÛl Ln tÒÚàØÒÆÒDsn Lp l!$êä9Pp Lr‹ár LtHÌàZÌÒØN Ét LvÂÈÈZÀqv Lx "ÈZkqx Lzzuz L|$‰£| L~ÈÞ•~ L€ÊØ…°€ L‚ÚÊèÂhˆ‚ L„&s ++”ƒ„ L†HáCÆÞÜìĆ Lˆ ÂææÊäEóˆ LŠ8ØÒÄäÂäòZäÊâêÒäÊÚÊÜèæZÞàèÒÞº ô"Š LŒÊÞØZæèòاªŒ LŽØÊèïôŽ LÜÞÜÎÊÜÊäÂèÒì3Q L’„ÂÚÊèÊäÒôs’ L” µ!Zæð#ÜÎw” L–,M– L˜à˜ Lš"ÌÞäÊÒÎÜ 6ÆÊÈ3»š LœÌÒØÊütœ Lž 9eÆÂØØÂÄrž L ,è $s  L¢îz¢ L¤.9 –r¤ L¦0äêàèæZÈÒæJs¦ L¨V£¨ LªÞÜØ‹ª L¬N 7³¬ L®îÐÊÜr® L°Sãu° L²U‡² L´ ++H@„´ L¶äAض L¸âêÂæÒR¸ Lº>5ÒÆÂõ º L¼&ÊääÞäZÐÂÜÈØÒÜÎZÚÞ*…¼ L¾ÂT¾ LÀ‰cØÂÚÄÈšÀ LÂÒÚ{Ø LÄÄêÌÌÊä[ôÄ LÆÊÜÈÒÂÜÜÊærÆ LÈ"bì ++g°È LÊ ÆäÒèÍ@ZæÊÆAtÊ LÌ|qÌ LÎ Œ‚Î LÐHcZÚÂèÆÐ+ÔÐ LÒ ÊðÆÊà“sÒ LÔ8½Ztä š¦Ô LÖ êÜØÚpÖ LØstÅqØ LÚ !+ƒÚ LܾsÜ LÞ°% ++ÊÞ LàØÊèTyà Lâ™â LäêÜ ++ ä Læ$ÌÂæv;äÒà™tæ Lè"6 2vè Lê"N ++ôÐê Lì$ÂÜÜÞèÂW ^Uì LîÅAÊÜêÚU×rî Lð r ‰Ñð LòÊðÆØê怼pò Lô¡5|àä8wô Lö.xö Lø ++דø Lúz|ºú LüÈäÞà´´ü Lþ ++ÈÊØÂúþòdtèÞàÒý"ÌðÈÌôèÐdâfÐppìÈb80FGÖÊòýa~J I°TæòæèÊÚTB"ã   L(. ÚàxÞ8 ó XB$ *HèäÂÜæÌÞäÚÊäZ|¼ð  ++0BP@B`8z ++B(#IR,§ð!RBP 8  L$à™åZá*€Xâ ++0Ÿåêà f àŠåf ã ¦0Šå Šâ`òp–åàâàŠå@ ã ð–å™ø! Jâ0šå ƒâ@‚åã ++,°™å Uáä*°Kâ,°‰å ‹å”9 àƒ_žå„„bH JâøŒX4à‚åº H¢H4ŠH4rH4ZHø`EâP…â,à™å^áF:0rà†å@†`4´4H ø& l l*‰lˆ>@ ãðšåL@1ÿ/áOÜÿÿêÄ _2ÿ/á³,ž†nV>@ÿÿê &À$@ÿ/á*• Hâþÿê¨÷z3ÿ/áÛþÿê^jäÆÈ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZddfl$ÈÊÌÒÜÊZäÊÆÞäÈZèòàÊ  ++ÆÞæèZÆÊÜèÊä0ÌÎÄðpÎdfÊÚðhäÌ`èðÜdæä`ZdP 0‚|H9ò0 ++ ++ÌØÈ ++ØÊìÊØ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜæèäZÆÞêÜè WÂØØÞÆèÒÚÊZÜæ" ð * L  B ¸ ¾ŒTãFŠ:@ áJa„å„åv nóÎ ª´‚B -€Tã) ++à ãåAà ã1 ãÿ ãp—å@ ãð—å pŠåP}XŸ Jâ pšåæ—ð ++ÒBb8 BL ++0BP( …(FHÚÂÖ  ÆÞ‹þêÆèÞäZÈÊæÆäÒàèÞäXB$hB0 ++(.äläæt7,g :#ZÒ"2ÒÞÜÓ?0 ( »j §0âSã ++hñ 0’åSá ++âQã0“Ï ++Sãúÿÿ¡ •2 @’  Œð ++ ++Z ++ˆ  .üæ@Òæ@ÜÞè@Â@Ô@ÔÐ ++HÞÞàæ@w PJh 8üñÂ# %/è ) ++$6$t$t,_P ’åØ á" ùàííñO šåËà1j€€ ++²@ÂæÐPYò ‹8 bR}  s:s(sdyà’å’x+0ƒýƒǃƒƒ©1Èêä¼A }šKš—$äÊæÊèZƒB>/p œ'3hç1 à‚ Eà‚åÔSP (€''~) ˜ ++ýS¥  7Rã(0 aiR ++Ø °­@B Ð bbÃCp—åF/pãaãOpšåíFšž3Úxx îÒèЛ72~-à  ¸‚3 á;Nm ã á¬àŠå Šå ÐP yw Ðóàšå šåèÿÿêTã,ºŠåŠå ~ [á~“šåšå l @í‚B0  "H–0mC—¯z1QáìRâW¯!‘DQ¯ ++àâ^ã@lG`Eâ% ++6% ++K1àÏQ àåï;å@!@pe ++݇å‡å ‡å0‡4ß ¡†å †å0†än ãÔ?&°P;ÿ/áê p_7ÿ/áØŸ ÃóD0D/D0DS~ÿÿê  ï x  ++æÂìÊù ajfPµ  µ 271H  ++X G š WÒÜèä“ ªg ø €B( /Àú ð ñà—å0žåàCâ —å ‚âG9—*àO„Sã ++#w"ÑwðÀ ++ à—å^ã¨0|ð áXAžå\ážå^ã¾ü"àãRá*à‰å pžåà„á”ò€ Tà~jãeöª 1à€0ÀJààHjo„XPAžåT„„4Qá=„ Ä „„@àTàT0@ á߈Tˆˆ¢äààâ4xD žå¨"Ǩ@Åjˆ ˆ*·ˆH #Hh›h? Ž‡ŒL°VØü à`aŠå áú O0Šå“4'R€0šåà áPP/àT_<ÝT€àšå ŽáA´ ^à?jà á¼_àŠåh’TEg#hd0¼/0TX'T#0X! ƒ¼ ÿ¼sSàýj`"â`Þ`0ø0ãÅ4P0àÃ1ã­DB^â«Tq’å €d“: `à‘j$Sàžå<xxžàvj dZ| P{ ++º œAàPà>Œ1ã)œ0”â'R@ á˜ 0˜ƒ˜»0ä,, 44» ++ P0ôwáëR ã,/à$ „.iæÔAÅÿÿê @D ­DC@šå®H/L´ùL"Pà€Ÿÿÿ ++ÿÿêˆì¨,U¨tP808/¡8C0šå[˜O ãL/íô@0šå@ÔüLjP9 ìø(LB0 á+($á¤@\P•\"@`ª Qæÿÿ ++ / á¸/ñ¬%ïþP ¼L´*=`Pd/¬þ'Olþÿêd0 d`R`WAþÿê`/@d 8„ È´$´/ /Y ¸{* þT¬ Ô±¬& ¼bðýÿ ++æýh¸/ ++¸ÎPZA áÄýdÄ eT& ´¤L ¨¹¨›TãŽýÿ ++„¨ / ¨mü*dýL \Ôx+m €Ø"Bý¼* ­@<./ýC/(ý.ýÐð~ ++rBLx" ++{¡€"Ð$êcæÊÆÞÜÈ3P$ ++Qx&!KÜÂÜÞ%&%ƒ¹×)Ø@p ++@B¬Æ¬hB,80@0 C`B( €!` 0F€B 0,t2, ++(…p xNˆNp, !C@*=ñèÐäÊÂÈ(,ÆêääÊÜè* ÀHB`8/r( ++“(0Ÿ˜`B.  ’ (’ ƒ’ ++ŒáSã…f 2â CSá{â / tŽ hZ B `[` `H`† ^"8^'‚ J® R.‰R   b ++1Þ.Œ.ÈÿúÁ² ++"°ÿ¾¦  %¡ l@ ++2! ++À8rÈ*(,ÛL1¬PáH B.á ++ÿPíòPÈòÜÂÚÒÆZîÒÜÈá& ++(!(F*F‘àäÞÆÊÈêäÊK`ßb :0H"„ ++2HB02XÚ20¯À ++BN gÅe]ÙÑÓH ++žåžå! .Å ÷@à,j žå pžå`Eâ(ý@ :Ì ù(à†â à†å†åà†âà†å†åà†âà†å †å à†â#à†å'p†å&à ã+à†” A`# / ÕAÙ÷@àŠå ) _Šå+9%@àšå ) ‡šåšå½T‘ ,…‘ L¥g§Z ++ Fx6€0 ++F:ë0ÜÈÒ‹ñÂØ ÆÎÞæ`ÆrêÌÒbäâZÌÞ-¬<4ÌÚè ÈMMíPÚè*Ô6ìÂäÒÂÜè OÑ8ÈÒäÊÆèÒìÊFG4K 8˜J F6HD8 “u>Ü  … ++ÆÂæÊæ  rÈÊÌÂê؇*p:p`& üº @¬H@ÎÞèÞïÂï'<¦(Ÿ '>œ—äÊìÊäæÊ~Ÿ©ÂÄæÞØêèÊ~¡@§P üdTÐ 1 Çû  @èzPDBîäÒèÊZäÂÈÒð´%ÊдPZ/?» gÄÂæÊ¿'î¸1àÆ*Æ2Ò:R ++æÒÎÜÞBrÆÞÚÚÂæJñBKq üÈð“, ±,þq¹,PD'a ürXN`+[ Á+jL0 ++Fã>` @ÒzH_!tT3ñ LJæÒÚàØÊZ- VæVù 0WìJr  ++›æª ++ª&LC@ ù, Ì!ÉÌàäÒÜèÌ „òâü¶üdTütv@èzüÈ\;@üºü¶tÒzütTüæ³| HÈÞÌÚè3"F`B. ++sb8"NI"3  "–äX*P ++ ¬ ++—Û  BP ++B("“¾,Ážð"DB è  L$à™åZá4*€Xâ% ++Ÿåê  f Šâ`ðp–åàâàŠå@ ã ð– ,O Jâ\ XPt d&À$@ÿ/áílfÌÿÿê0(ú<3ÿ/áÅÿÿêjæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚:7ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð ++ ++îäÂà  Lgñ@ ++ÂÜÞÜ  Ú"èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`Pº º:60¡æòÚÜÂÚÊ摤r ++ÚÂäÖ'’ØÂÄÊØ^àعf@ ++ ++1,Åð!<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZddjh LHÚÞÈêØÊ*Üÿ:ÒÜèÊäÌÂÆÊ"ê`älìÞÜÚÌìÖfàÊb×&&0Ò&ʈÊðàÞäèÊ9ÐèÃR¼ðHÆÞæèZÆÊ[Q êï)-÷ ðd L  ++ò@TæòæèÊÚT BHæÆZàêèZÆèÊX ÿ ++ ".$$ÊðèÊÜæÒÄØÊb??o;1* ÆÐêÜÖæ O.$A F€8( ÒÚaZ¶õÌôòìÖjlällÞpÌèjZÂwG=8JG&¾WÜÊîZŠ.(²C* LM ++Mõ , L L ++æÐÒÌè.´ñÎb``:Òædn`rÎjdbîæìæÔäÔàÌrØÄdfÄZhpf$b$ ++ñh0 Ú"0"Á42ØÞÆÂØZ-û$Â`ìäÆÊÈÖìðîÄÜæòìZ` h 4µÄÒÜÈÒÜÎ  ‡ ++ØÊìÊØ  2Lð6"ÈÒæàØÂÆÊÈZØÊðÒÆÂØf2@46 ´ÊÈ"»#.>!a“àÂäæÊZMn".B LÉ_ZÌÞäÚ <0ð="p ++p48¬`:`b}3¡ô<ÒÜæèÂØØZØÒÄäÂäò"b$.?Š^ÆèZÈÊæÆG>G\G@GäG@GNGBŽJÆÞÈÊGBG^GDŽGDGTG_F"êÜ] ++FAZA”H$ÆäÊÂèÊ>JZêÒÈBHBXBJØÞÂÈ~J<P<ŸLØÞÞÖêà>L>V>•B @ºcN LJ SP L< SR LD ST LL SV LH SX LF SZ L> S\ LB 3^ L½ÿ ØÂÚÄÈÂZìÂäZØÒæè^&€rÈÊÌÒÜÊZ‚(¯ÊØØÒàæÒæ~S"ÆÐÒZnoÆØÂêæÊ&lOÂØÒÂê ìÂØZîÐÊÜ$‘`R‚ L9OÚÊèÂXo ++æèäÒà@ÎÊÜ ÔA ÓOÄÊÎÒ¯)*_àäÞàÊäèò*’äÊâêÒäÊZ¿#M!D_ÜÆØêÈ$ l#b­äd"ÈÊèÊäÚÒÜŠæêdêj(fA/ÊðAfAh+Bf¶ch Ld j×$€Bºÿ?ÜÂØIj B_ÚÂÆäÞ´>äÊæÒÈêÂØÒôEZz_ÚÊÜèæ¸l¸s$ÚÂÖÊZÒ'¤Ð/ÊðÐC¢€ ÒÜÒèÒÂØ7OÊZæÊioàäÞÎäÂm_ÆÐÒ:"Å¿ÂààØÒÆÂèÒÞÜwOÌäÞÄ/àä?ÄÞÈ|Z»€ ++‚ð_ÜìÞÖÊð OæÊèB‰ CäÊÆè(ûæÊâêÊÜÆì,Ë_ØÒÆÒèI GT"1&Æè~^ñJP­bÙOÆÐÒ„,OZÒÈTG/&ä¯@êàÈ8û "w= †= ü1nÑ›ÈÊÌÜZèÂÄØ" nú~;ÚpäÊÆÞäÈZÒÈB:p:€:4r:ñ =r=„=3t =Ÿ @t@‚@Pv$äÊ;2ZÈêÞ+ÊæBvB|B„xÆÐÊÆÖ½ >x>z12 xªcz Lv S| Ln S~ Lp S€ Lt S‚ Lr „8 ˆ"ÄêÒØÈã2:/uÂÎÂèÒÜΓ ++ÆÞØØÊÆèÞ¤*<… ++/ÊÈ- o(ìÒæÒè)0ÒÈÒ_ZÈÒÌÌ ¥?èÞà."¼ßîÒèÐZÚÊææÂÎÊ%á†#"‰\ û >ÈœG=F ++R ãœã ++«`ˆ&ØÒÄ‹  T°ˆ°’î4Š4CàJ + ŠJ˜J?Œ>J6 ++OŒOšOŽÜå ŽC–C?0C‹H”Ô2 ++ˆ›c’ L S” LŽ S– LŠ S˜ LŒ <š L½œ“ àÒàÁžÙ àž¼Æ ÆH HÄH:¢$HB¢BÌB¤jÔ j¤J¼J?¦>JߦOÊO;¨2Oâ ˜¨IÀI?ª®0C®HÂH°ýŠ°B¾B>².B‰²GºG:´"G+ÒÈ…´AÎA=¶,A‡¶FÐA3¬áS¸ L² Sº L¤ S¼ L° S¾ L¨ SÀ L® S L  SÄ Lž SÆ Lª SÈ L¦ SÊ L¢ SÌ L´ SÎ L¶ КQ\,Æèéȼ ++ ++?2äè¹.YÚ QÚÄÞÈXxÒ—FQ>0ÆèRš ÝOÄØÊ~à ò ?<Æè\ 3?.äègÆÄ×#*<Ÿ <$Æè^Õ³^ $ý§ Eì†yì(ÊÍ  Êä°$ ++™\$OàÂèÐtèVIÿÝ(»FÄ#OÞêèÌö ++Ï~_ ++¤ ÄåAr-.'Q , àÐ ,W ++ äZž:”! "ŒE? äèC ‹AÛ7/äà/ Æ} Ì ++%Í ++{2Ô~lÔlô²3ÖS;ÆÂæuÖ;ú‹cØ;ë ++<Ø<øw3Ú<ÄÊÝÚ?ö?;Ü(?fÜDþD3ÞDd ++=Þ=ü=7à$üBàBòBâà  ++DâDðD:ä,Dt ++FäFìFæ 8 ++Èæ=/>8è ++£ ++AèAî@3ê.@ÅAØÊÂì^*ÒèGêˆ5 ++#¡Sì Lcî Lâ Cð Lcò LÔ Cô LcSö Lucø LÖ Cú LSü LóSþ L> ‚ ê + ++!@>#_ZÖîÈ~UQÒÈZ|¶ P ÄÞêÜ%ZÚÊÚÄÊä6%z2Âè úABÜÞèZ&£q6äÆs ++x38Ê" F$‘ZÐ?^àئ ++*€æÞêäÆÊZÕ$% OÌäÊÊãt ìÂØÒÈZ¹ žbO"  /ÐÒ*"?ì`¨ Š?1Ÿ&ÈÒæèÒÜÆè $™o^äÊèäòÏ?èÞàÝß %Ý/ZЙ!•#¢ÜÒÒÈæZÊääL/&]"_i" x "æòÚÄÞØÒÆuÄ'?èòà) ++²²ú@$—¸»#=&÷?C ++(E!š G ++GG= "G ‹ DÈDþ« ++ ŸÊÜìÇJ&~?7ÿ(HÆÞÚàÒØÊZèÒÚÊZìÂØêeQÔÞÒÜnÿ N ¤?ZÖÊM$IËOZÒÜÌg¤&BÜÞÜŽOZÒÈ~"}á„ ú!0H¼?¹: ö' *œ ´ _ÄÂääÒEBæÂÚ Û&Z((*²&#ÂææÒÎÜÊ-P*ìÂäÒ²`ZèäÂÜæl&/Êä%?æêÄ#a$äÊæÞØ°T ++Ú 56êÜÊ ++¼Z½'1í'ÒŸêÜÂÜÜÞèÂèp_ÂÜèÒp« PØ?‚‰" OÎäÞêE3_ÒÚäÊÌdxˆ/äÐoCÖÒØÚBá&OÎØÞć!&¥ ÒÜ^+_àäÞÌÒ$.J0àÂèZ| í*É é*Í)ÞäÕC w-,cZ¢l ‚ ++N/ÈÂÕ%¥âò?ÊÜì~Ò!?ÒÈìBÜÞZ£ ++Ä/))Í ¨… m/'""íÏB¦vI*‡*Ï‡ß R ÞÜØò]>ÂäÖ§., ++ ++**Çç.0¨æc'àÍ47SÖ&"V/ØÞ )$%ô­"F,ÎÊè¢$d ++ªl"D0òÚZ 2LÞ0$æè˜t?4 ± *¥˜ÅÐ$,Åû2+<¾Z1N ù_ÊÚàèòù!Üì¬OÊÜì D~ì/ìÞo/ Ç ‚C  ++ ++t$äÊx ++R2I. îû Ø ZL‚D^T´2 :Æ:Ê?ÐÞBø (‚k ”¡–_èÐÊZL ++‚Gx ++ ++Û¯ ++oØÊèäÊÆÇ.B&ãN0 Á™yY4Û¥_ZÚêèÂ2Õ º~ Ó /àØÎœ$p g  3/ºÓâ(’2ÈÊÌÊäZÞäõ/) "]¡ 2ï¶ qíÇ2 2Ž9]?ÂÆèÇß(ÞêèZÞÌZàÐÂæÊJ ++ðàÑ*¬&â²$ùO2Õ2.q ºéÙ!_<ø‚w ++Ä ++G [( `æÚÂäè¿.. <^R_ÆÊÈêäÝì ++ $^~Sq|· p ++›&2B.,vÌÞäÊÒÎÜÞ "Y: ,JNÆÂØØ/-& I$+2$B"g $(·âe @æÂÌC6XH?ÚÞÒx /äÊh oCÆèÊZ 7&4&-~/ $&Ð0Ð(†¥äú †(†,Ï9*.I­7- J*J.Ð(Â,Ð*.ÐF 4CqÞàèÒÚÒôP2 rz2 ÂÇ ÷_ÒèÒìÊ. 4.Ì0  U @ÞÜÈÒáž0ã‡ú  ê>ê2Þ78 +2+8u:42ê¬ L4LäÒà"/ƒèÞÖÊÜtæò£`ÎÊÜÊäç2% ÂÊZ|æäÆ^ ++³>ÆØÞ¤ ++¸>$Eã"+þ¥ ++&µ2 ++OÐÞÞÖ€4ê° ++" E ++6C!tM ++0E,äÊÚî 4îf¹ZÏZ*í4 KBâUÚÈ?4àêÚ ++'H¦›@˜ÊðàÂÜ$ý>-Dù:3B: ˆ$ñ>/Fˆ¯= D¿BF¿E€D"^)Å 4à.' Î'?äÊâ:)i u0”™& Á Ø3*Hd ˆ› ++ͲÖr!OZêÒÈrScZ]**n/ìÒÜ,"spÎ á4#Þ¹s ‚Ö,OäÊâ~¯;ö¼ E% j”6JÙ 61 Ëp,6[–6S@µé*‘~Oª) ÷‚¤7µ(&&´a#~ÁâÁ‡kJ˜æäºDnC/Þ¾0L ++7 »hC55PN ++˜}# 8N8¨p1P 8 qP9ÖqRRêÜî<yR@ª@5T@(T?¢?VÆÞêÜè=V=Ð=Xã AXA ++B2A3Z: 8Z;œ|3\;’ ?\?²?4^?› ™$^@×4&`@KÌØÂÎw6&`@{9&b@<ÂäÒ_+&b@ž@|d æÞääl=_C/¶9f>#0àäÊ” ?]C/ ?3h: ²h;µ7Cj;$ BjB 6DlBæÉA @l@¡:In$@â-e?7EpE 3i?/°>r= ++ ++ .r?/®F:t&Ax?/ÚF?v0F?¸;Kx(KŠ?û:Kz,GlØÒÄæàÊgzIàIœ|àäÊØÊðd|:Ô:4~¡+Øʦ>2€9‘€>p;G‚ >‰‚C´C3„C„?Â:H†"?ƒ†DÀD3ˆDÝ" ß>/¬@3Š@z0º Ö>/¤A:Œ&AÇÍ>/ÜFŽJêÌÉ>;&h;ØÊðô:À>/Ø?`’èÂäblÌÒðÜêÚÈ’Ar=%”A?ÄÒÎA”A¸ÅD€L C-?$`/?$lšZœbžI  T¢‚? ¤~¦N¨RªÞ? ¬„C ®ªC °\²‚´J ¶”"<$^$<$’&<D(<$†*<`@,<†M.<hD0<$„2<$h4<$€6<$j8<$VÐXÒ|ÔPÖA ØÄD Úþ@ Ü`N ÞzàA/â3äQ(“3æQØÂÜÎêÐSFä•4]4L.ö:ÖdÜÆìâèðêÊhÂl`ÎÊÒÞÆêdòÌìÂZlp`û3è: äfèf*.,d6nhpd0ê&Ž/ÊZj ++êj.22p rp;ì">,æænìn.0l &rnlî ÊÆÐÞk îk-/j ++lj?ðeðe?`j`1ò(xF1Þêèwòi.,3| 6nrdrpôÜÂÜÞ¥ÿ8kôk*,d ++|4ö,—FZ|æZÜY möm/(5V ++Ú2ø# ¨øg$4&X'bdXŒú ++ÊÜèäòVúV"0$T &hfT2üDP-ÂØ®üX&(\ f°cþ ÜÞÜ.‘,ÒÈcþc-/ ++è íZ,òÄD'_""$T b@ìIØ ']+-, ++hf;8¼ Zܺ=k ''t/ ;0 n‚E ++êk't+$-j ++bf4,–@Ènn.5vÄ1 ++0£iÍÊÈZâêÂæÒâêÞèx ++x/&7> ++V POäläæv v.*3r n† ++B@(6Aä6î6þe LæðìôüZ :"%$ ++&Kö( *òµ è.ú0ê2ø4ž Q¬(A¤Ï/äà·.6¹ ½ ZÒ³ pBæèÂèÒÆ03æêäxrîÖZàÂÒä¸ÚM4ÞŽø%ÓOÌäÊÊ# ?ØÒì#Ö¡#?_,‚ $‰a~®.# +0$…X?àÊÈL*¢/ZÆP¶SæÒÜÎØplì—/ ›/dÈp¹j&N\º5ÜîÖ!´7}ì™x %"Ç3ßäÄØÞÆÖZæäÊÆæ¬8þ/ÄÌVí;äÂîå{ … "Š/äè£*­XWì¿Q›šNZÞÌÌmU§ ƒ\ ?æÌÈI+Y  €p-"Æàf;&{NS¦NæúX,ÇM0,  y œdª.Tå ø ^ÊV&Y(‘W-é* Û.éfå  û%Ûk¿îÖZÄÞääÞîÊÈb A6 ºn'|Ž÷*zÙÀ i´ :ib¼™FV8D~7áa€Jÿ‚4 ?äàÒ¡J‚ Š÷ü/Þàw XgJ!?@/äàLtý –./äà° ++„Ç?äàÎ …8 8cY/êÚá(Ô7 :à_ZØÊÜÎs"×~X/ صb0K 9 Ç\ ñ"ÜÞ5(yåOÚÂæÖy J v Ï â#% L³jl(>53ý"ÌðÈÌôèÐdâfÐppìÈWkTj!>HkS@ m$Èù%0@ðBHB`8ò ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # þ,²û7B ¨  L0 ã`EâP…â,à™å^ái:0†åà ã à†å  á0Ÿåê0gX:à ø à†å †å ƒâ`‚åã ++,°™å UáF*°Kâ,°‰å ‹å<O àƒå”4”#”” ˆ>0 ã0Žå€æ 0Žå>@ ãðšå@1ÿ/ádLçÿÿêÖ ^2ÿ/áÅ(@²¡@þÿÿê’"HÊÜÂÄØÊZÊðàÊÈÒèÞä@B    ðTãà—å@žåËTTãô0ŽâƒåãïCC&0‹ £0ô»Àõÿ/á ++òB¬0BLxB0p.H©ÿ ZÐÒæèÞäòZÌÒØÊ@B ` #Ù ø5`  áRã& ++àâ^ãNà’åàâ^ãJ$à™åZáB*€Xâ/ ++ á”æpŠå Šå  Šâ`òp–åàâàŠå@ ã ð–å ¹ Ò  Jâpšå šå° ++9 2°   • /a¨¾ÅP3ÿ/á·    tóú 0æèäÒÜÎz~XB$0 *ü^\ÆÐÊôæÆÐÊÚʾë! ++8òXB`8Ú ++(B(( 0üæ@Òæ@ÜÞè@FÌ@Þä@Â@X™ ++HÞÞàær6 M ( ++0`DP ++(P(BP"u†,½Øð"ˆB P  L$à™åZáá*€XâÒ ++Ÿåê ¦  ã Šâ`ðp–åàâàŠå@ ã ð–ryO JâT1ÍT@/!T?uT@ÉT@/T?qT@ÅT@/T?mT@ÁT@/T?iT@½T@/T?eT@¹T@/ T?aT@µT@/ T?]T@±T@/T?YT@­T@/ T?UT@©T@ýT@/Q ++T?¥T@ùT@/M T?¡T@õT@/I T?T@ñT@/E T?™T@íT@/AT?•T@éT@/=T?‘T@åT@/9T?T@áT@/5T?‰T@ÝT@/1T?…T@ÙT@/-T?T@ÕT@/)T?}T@ÑT@/%T?yT@ÍT@/!T?uT@ÉT@/T?qT@ÅT@/T?mT@ÁT@/T?iT@½T@/T?eT@¹T@/ T?aT@µT@/ T?]T@±T@/T?YT@­T@/T?UT@©T@ýT@/QT?¥T@ùT@/M T?¡T@õT@/I!T?T@ñT@/E"T?™T@íT@/A#T?•T@éT@/=$T?‘T@åT@/9%T?T@áT@/5&T?‰T@ÝT@/1'T?…T@ÙT@/-(T?T@ÕT@/))T?}T@ÑT@/%*T?yT@ÍT@/!+T?uT@ÉT@/,T?qT@ÅT@/-T?mT@ÁT@/.T?iT@½T@//T?eT@¹T@/ 0T?aT@µT@/ 1T?]T@±T@/2T?YT@­T@/3T?UT@©T@ýT@/Q4T?¥T@ùT@/M5T?¡T@õT@/I6T?T@ñT@/E7T?™T@íT@/A8T?•T@éT@/=9T?‘T@åT@/9:T?T@áT@/5;T?‰T@ÝT@/1T?}T@ÑT@/%?T?yT@ÍT@/!@T?uT@ÉT@/AT?qT@ÅT@/BT?mT@ÁT@/CT?iT@½T@/DT?eT@¹T@/ ET?aT@µT@/ FT?]T@±T@/GT?YT@­T@/HT?UT@©T@ýT@/QIT?¥T@ùT@/MJT?¡T@õT@/IKT?T@ñT@/ELT?™T@íT@/AMT?•T@éT@/=NT?‘T@åT@/9OT?T@áT@/5PT?‰T@ÝT@/1QT?…T@ÙT@/-RT?T@ÕT@/)ST?}T@ÑT@/%TT?yT@ÍT@/!UT?uT@ÉT@/VT?qT@ÅT@/WT?mT@ÁT@/XT?iT@½T@/YT?eT@¹T@/ ZT?aT@µT@/ [T?]T@±T@/\T?YT@­T@/]T?UT@©T@ýT@/Q^T?¥T@ùT@/M_T?¡T@õT@/I`T?T@ñT@/EaT?™T@íT@/AbT?•T@éT@/=cT PHl \&À$@ÿ/á¡dfçÿê0(ÿx3ÿ/áçÿê|jÂææÊäèT<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZddjj"ÈÒæàØÂÆÊÈZØÊðÒÆÂØ *êÜÊðàÞäèÊÈ@ÒÈÊÜèÒÌÒÊä(HæÆZàêèZÆèÊX ++ÞÜZÊääÞär Ñl(X²9 ÈÊÌÞàè7 n7!Z7_ÆÞØæ5 p5"5?äÞî5 r5ª5¿ÆêäæÞäZÆÞØ; ++&l`;! R;ÿèÐÊZêÜäÊÂÈZÆР'lb@ú@o ++îÒÜÆÐ6 d6! ¢6¯ÒÜÒèZèÊäÚ: f:! J:_HÊÊZ®h>ò>>_îäÒèÊ?j?!š?ÊÊZÌØêæð B!B9ÿÎÊèZæÆäÊÊÜZæÒôÊ@ K"êyäÂîZÚÞÈ9 O!’9OÜÞZ<V!:<ŸÊÜèÊäZÂÚ>nY!â>_ÊðÒè=V!Š=¯ÜÂÜÞæØÊÊà: Z!2:_ ++àÂêæp V"Úë ŸÆØÒàÄÞÂäÈ> V!‚>cÚÞìÊZ„ê³ V!*? ?OÈÞîÜA ^!ÒA("HB?ØÊÌ« n`!zB$BOäÒÎÐC j!!"CÆØÊÂäZʃ nh*!Ê:ø pd##r ;Z> e!%>ßæÆäÞØØZäÊìÊä4 pj!%Â?OÄÊØì pi!'j5 HÆÂääÒÂÎÅ?èêäµ l!)AŸØÒÜÊZÌÊʦ pg%)ºï€ äÊ‚B? e!+b??  p_)- ++<pX-}+âZ/‚r]1Š+Ý~: Y1"Ê_¨ò? Y#3R:âra%3ú=OàÊÊÖ=]#5¢òra7›B"ÊÊZ¦ òZæèäÒÜÎB d7Ÿrh9 "Ærn.;BŒJrs;ªOîÂÒ5 ++'f`k=¦_ÂÜÞÜ5 f?Ÿ@*hfÞÚÚÞÜZ æH ód ÎØÞÄÂØTµ" ++ÅÏÊÌÂêØèZäÊàÊÂÍ fPB ++HAÀ! pÂêèÞZÒÜ›E hE ECËD*EßàÂäÊÜZÄÂØÂÜÆÊL jLLáA¼ 2ÂæÐM' lFFEéc(ÊÊL_ÈÊØÂòK nKKGõ!M ++OÜÞÒæ? p??óÿ$ÊÊZæèÂÜÈÂäÈerIIIúÿ ÊÊZÐÒæèÞäòZØÒÚ¾ #b`GGKþOäÆÈ8 ÁKøÊÊæèÂèÐ b MöoÚÂÖÊZ= $Oà 8~9 Oï9ZØÂæèZÞà@ Qú$@/äèC$SXCOàäÞÚ 'fbS(‚ØOZÆÞê4 b!*UbÖÒØØÄêÌ@  *W ++@s?ÜÊî@ ++d+.W²@/Äîu du/YZ€Þ€ }.[@Ì€ €.[ª@/ÖÊý d‡*]RÅDæêÌÌÒðTE Œ]%E/ÆÆ d…/_¢ÞàZæÊèBE ‹a+. HŽa1&D’c52Jfœ*eBE¡*eêE!E¦.g’E?ÄîÈE«/i:ŠÞŠ°.iâEÌŠ°.kŠE?ÖÊòE¹*m2è:J¾m. ?A·/o‚ð f¨q'/à! 'fh’q+9†sOàÞæ hvuoàÞæZäT hi&uÊ8¼ 'fh\#wrì?Þæz¦ M%y6x6 >yÿ 6m +%{jm|6  %}m|m "}á ++?ðZ|ð j)/b’j%Ì? Øà( 'fj'Oä7&#ƒZnÄ7%#…n7&$…ªÞ} f)/‡R &‡AOÊÜèä '‰† ;&‹| 6] )#‹ò7/ZØ: #(š: '(B: '#êŒ:xf+.‘’Böf.#“:¯ B@èÞàZµ? M(“â??ÄÞè?X•4?OÚÂäÖ; ](—2zäó8(—Ú??ÆÞØ?9™,»Gv/›*GÀGƒ#›Òb ++ ÅD(zDÊD#Ÿ"8 Ï@/ŸÊáY#¡r( u?àÞÒ) S/£ D£e/Ø£ m¥a 8 ;§c?ØÜ 1#§º‚ÜÙ7 C%©b7/Üæ7 6«^"Hoï'«6t<+%­Z<x2/¯g¯loØÜæZ|#0'±R9“6#±úF9á '³¢:Rµx_òÂÜÖ³%µòŠOäòZ|Vf#·š ++?ÆÐÞyG¹r Z|¸ *¹ê>|K»»OêØØZ­ (½:9S ½·_æàØÒèÀfý¿¨n._ZÄÊèîx h Á~| hÁ—rªZÞÌÌæÊèA g#ÂAy@ iÅsÉj 7h`h<hV.ÆÂØÆgHæ 6h`jH'ÇzHkH~ÉpàÐÂÜèÞÚl7h`n?o(  äÊÞÌà 6h`pEË*EZ•͉"F_^ÎÞèÞB ++'b`BÂÕhÞÏ™&wàÂäèÒÂØ hê*ÑDó/Ѻ¿#Ób"ŸÞèÞZÄÂÆÖî" híÕ¼>?ÌÞä={Õ¼¤q#×Z ¹}" hÐÙæ8v" hÊ'Ùª:$ hÄ#ÛR½: h¿Û¹?àÂί¹#Ý¢e/ÂÎ!±#ßJC­×" hª'ßò9Ä9 =)ášr0 ›ã®9!èÞ{  h–ã°q$ÂÈÔêæèe o^ÈÊØÊèƒ O.å’C ÒÜá)C Xç7z>…çÁ? h|éÀ</èÞñuë¹OÔÞÒ*hjëº(*voZÄÊÌÞä{ jí¾OÂÈÈöpï·*~æ}ïÁRÌÒäæv~< yñµ?ØÂ;qó¨(;ìE só®ìÒæÒÄØ~ `õ‹4ÊÜÈÞ= n$÷Ö =ã ++hm÷•p$ÄÊÎÒÜÜ0wù£ò*ÞÜØòZîÐÒèÊæàÂÆÍF xû¥ÐÂÜÈØÊZ ,hûœ* æ+BA wý¨3äÊø: u/ÿ ++šÿœ ++÷!6 `"ž’@ÆÞääÊÆèL6"PÚÂèÆк!ÈÊr!Ê´ °"¸_.ÌÒÜÈIbIÇ8IøÛ"Û6NÊñ7úä0ÜÊð/ðà–¢"ü,I‘­# ßæÊàÂäÂèÞä& D0 „/îÞ| ®" $@àäÊìÒÞêæD½? Bó03 ê× S c$h6"ÆêääÊÜè@Ÿ$:ÿ)8W ?"  uy&ŠIOÜèZÂá+ h7?2d+#4 ÒÈË'oàØÊèÒÞc h,"ýx&æÐÞêØÈs'£ 2?*»Uù_ ÂÆÆÊ" &"õ¸/Âè4 !4"9&!+9 Mh4rº%`"?ÂÜÈzR!ì_ æÊÂäë N!æš'@Zò$ hú?#jDÌD `%åDO|ØÒæì  "%çTèäÒÚf(> b'äDêàÈþ!?Þäò $")ë*¾Ì- ++þG 39)²„ ÞÈj+g ++ @"+×-G%-{&_ZæÂìÊA…%-ªA/ØÞ‚Ž//R@O?/ú6r1´ƒ N"3¦eN{ p3«!y,F/ÒÈI`+M5¸O8M^œrm+T7È€:7ê’iŠ"9Ðq.oàäÊÌÒð? ƒ;Ï!o,V#rhHÚ  C(Q . O/=ŠQ£?ë!"æ.>?ÊØÌB  ."FûC$"È/^t/ 3hrpI$I#A‚H5oÞÜèÂÒܹ% h¸3C*Ï9 ++j¬3CÒ©7/Êî–j®!E!&>šÙ 3j`dõ&FG )(FÌF ¯0(F,gZ+ jÅ?IrHÌH3K/J**Öpjµ0*MD),MÄM®,MMMK..švO ´.OOX)0OÄOm0Oëjß!Q`!2‚0ÜÊîF^Ï ++3jbb2IShF4IB Ï4Bc!6w6ƒÊ6AUc!86#Þà†… ]8DWi!:…O3jbjA:Ai!+ôÚ3jbnH>H!@øNGª@G[DBÈYŸBD]š!DÓÄH#d`HDH¡Fõ|F ®FF_šHX-ZGL ¸HLa’LJ*L­3jdfMJM©FLßGÇLGc«!NnÓ3jdjHNHe´6PH"ÏPF²6R@F Z%V¨' 3jdnXRXg» TÎ1¬#CÛTCiÈ6V›T*3jdrGVGÉX( äÊŒF#f`FXFkÆ(Zn®F ÜZFmÑH\.=Oß\Oç#^•;k3jffD^Doð`®2Z$ 2_ZÄêÌÌ° 3jfhK`Kqõ4b"K_æÊØÊÆG 3jfjIbIø!dúw_ÚÂÆäÞG ÜdGs÷@f ±/ÞÌ> Âf>uíhò· 3jfpFhFæ2j$„^JÈjJwãl<™#h`OlOyã6n& <:G ÒnGÛqp4ÊÊZX ö3jhdRpR{÷5r6;SärS} t¥ÊðÆÐÂÜÎÊß#hhRtR v¾Á#hjGvG xMHêxH z… 3jhnGzG! |Hõ|Hƒ$ ~â G ò~G# €H#j`H€H…$ ‚–<0êæà½oàäÞÆÊæÉ #jbJ‚J‡* 2„?àÞæŒ Þ„Bòî,d_ZèÂÄØI ¯‰u@~A ‹ †ž?ÄÒÜ#jjɆC·?ÄÂæÉ«/’ tð HB`8Z ++B(#Ž,%ÿBöB2 k0  L$à™åZá*€X⎠++>0 ã`EâP…â,à™å^áƒ:0†åà ã à†å`Šå(t( (e((V((G(ö`ŠåŸåê Šâ`òp–åàâàŠå@ ã ð–åø1[ Jâhf(:àH›à†å@†åp p’¡  ppp oüp /æp p$p’$$pÅp$p(p’ñ((p¤p(p,p’a,,pƒp,p0p’Ñ00pbp0p4p’?A44pAp4p8p’±88p p8p:$àšå@ ++@àšå p ++ð àšå à†åàšåà†å<àšåà†å(à ãH H'dA0 áTL1ƒåLL1ƒåPL1ƒåHL1ƒåL±ƒåàšåàƒå0Tƒ˜S:˜˜8˜4˜ ˜Tà.÷àHH@t˜ 8Dð á à‘å&^ã) ++‘åâQãH @õÿÿÌóP0Šåx Šå|àŠå€ Šâ È&ÀP@ÿ/áb­ €€ÐøP0šåx šå|àšåàÿÿê,' ¬ <4øà‘åàâ^ãìÿÿ@ P f§:P L á\/™\ø†å‚â`åã ++,°™å Uá‡*°Kâ,°‰å‹å<n à‚åØ ³u:  á‚Œ(‚å¸ ”d”­ †å â`‚”R” ”?å”@”/””  ”/ú”/è”/֔Ŕ³” .”¡””~” (l”[”I” ”7”&”” .””/ñ”/ß” PdÎ:@è„œ1„ålT„ØQà„åpœ„œ„H(HS·:L˜l˜p˜`˜àñ@†å0†å àšå!à†dS%à†åH¸=x`Š`š¨A áld1ådd\1 à\qàå@œsàå0ddd,å˜}`˜€åxàšå à€So:XäTääläpä† †åôP0P&Vb 0†å H\HH``!€4W) †åPd Ø8Ø0À áhqàŒå ŒØ$à*:†å p†å ÀXP=|`Š,, ä& à0€H  0#†@ 3†å$4<èH0P P„PTð:(4tP@L |LH"ÙˆP‚HÀÔ‚€1à‚`3à‚ˆ‚T‚@QÀ: dˆ# à €[ˆàŠåP.­à|Hù À†åp†åà áˆ°šå`‹âà†åô'–ôX`‹å°t_šå °Žˆ€ˆ _p†åÀˆiˆ|ˆ/SðTT\"àhÓ#à†å'@†å+À†å/H|À.À|ÀÀA_p†å/ÀÀ/óÀ@l/Þ¼x?`„tËt p„p|·pt$000t0” ›” "Š3 „¨„1 à„h øLtH/r¬ €tÀ]Àt€€G€(2€ øÀ :p†å @†åD 0 œ/û #|/å |#Ñ|0»|$§|0‘|$}| àŒ/h P€ÜÄ S|X x?x(*xüxxÐ08Ð4 $S,àšå'1+à†/Ä /î <'/Ú < /| Ä|¨°|€@ð œt ++ˆtHtôl´\´L´´œ jŒ(/V P/ x Ax(/- x@(ð/ð t'/Ü ì\ Ép(/µ ä#¡t(ä zp(fp8 Sp(?T$+t(/ , / ”'.ð ++p | /Ú ++|'/Æ ++Рx±x è8@†â Dà„åH™H@H†À ++/… ++” LÐdà, nÈ4VÈ(/B ++t „ .ü(ü(/ ++'.ñ x`˜Ä¼ /Ø è'/Ä è/± p'pD|ˆè(tè ap(MpP :p(&à p(/ÿp/ì8'/Ø /Âø '®ì/ ð S#0†å„ì xì }0„â`ƒäŒ¬0¬0(/xЭp†åÀƒâ`ŒpepÀpƒp ++Qp„˜t=t()ä p(p /ïp'/ÛpÈpÌ´pl¢l(Žll€l|lH/h4pxSx(/? t/ƒ|!.+|!t @tpl0¬@¬,¬¬l¬\œL°°/ô°D 4 ++4 ++ÜH L/*ÊL/|*x.¹ @ ঘ @  ã@$X<$&bí0||@$2X šŒP0Žâ@ˆ*~àXÜ'q44 ++ Dl”lxl )-1Ô5Ô9Ôb=à†åApDEØIlMØQØSUà†å¨¬ ”, D D*12DP-P<ÑP(*3D€&Tã. ++¸&Àæ ++à á @žåy ++ž žå@Šå´…p@šåãÿÿêXTÙT HVàžåà O h9xp\1ð—\/54dH}H4ÅH4/ 5H3UH4H4åH4/-6H3uH4½H4/7H3MH4•H4ÝH4/%8H3mH4µH4ýH4/E9H3H4ÕH4/:H3eH4­H4õH4/=;H3…H4ÍH4/H3UH4H4åH/(H/-?H)HuH[H½H]H/@H/HMH4•H4ÝH4/%AH3mH4µH4ýH4/EBH3H4ÕH4/CH3eH4­H4õH/H/=D3…H4ÍH4/EH3]H4¥HÔéDL áHF€//iF€'/¥FH3íH4/5GH3}H4ÅH4/ HH3UH4H4åH4/-IH3uH <``.E<<È0 \(\,\ø1x\l\p \ø+@3Œ7Ä;”?”C”G”K”OäSÜWü$[ä/ ƒP8/P8 ™ƒå>@ ãðšÄ8@1ÿ/á@ðì= „2ÿ/á´ÿÿêxH> .õJpH úÿêˆ3ÿ/áˆùÿê|*zùh>0R0@/@D/âø,ͺ`/;,¥,‘,|k,VE,0, /÷÷,âÐ,»¨,“,lK,6!, /úö,åÓ,¾¬,—…,p\,G5, ,.óõ/ßõ,Ê·,¢Št,_G3, ,.ôô/âô,ͺ,¥“,~l,WD,/,/õó,àÌ,·£,Žq,\I,4, ++/ãò,κ,¥‘,{h,Q>,',.ýñê/Ùñ@Ʋ,›‡o@]B,-,/áð,ʦ,y,bL.9ð ++  .ðïPßÏÁ.£ïdŠ|_B/+ïô @/÷î@ä.Óî@Â@¯ž@@zi@X@E4@#@.ÿí@/îí@ÛÊ@¹@¦•@„@q`RT.ëì Ò»«ˆeD#.áëÀŸ~]<.úêÙ¸—vU4.òé.Ñé²£”…_véÿêœ b‘Z_ Jâc¬ò4\éÿê fú PÆæRÊʾÒÜÒè¾èÊäÚ HÌÞäÊÒÎÜZÊÜèäòXB$8B ð àÝZˆTãyð à‰å4€‰å(P‰å ‰å0—åuñ4€™å(P™å ™å@ áá áNá á^áA á­ ­ù© éõR ++˜B@(BL0ËÖäÊÂȾÆÐÂä »»@¸¸ A ¼Í*D áÈ´_ áò¸³Z ++ˆB80¸"¸_îäÒèʹ¹A¹¹¹ZÌØêæдv ++  % % ¤ æsR ++p†,†úÎÊè¾æÆäÊÊܾæÒôÊ 1í ‡*Âî„M;pš-ÜÞ††M†(†ËÊÜèÊä¾ÂÚ¾ÚÞȘŽMŽ&Ž?ðÒèM;p¬šÜÂÜÞæØÊÊàŠ  @‹PTã!öSôô0 á¬. O áèpZ ++¨/ ++0"KàÂêæmmMˆ"šÆØÒàÄÞÂäÈŽ MŽŽêôçuç±JÈÞîܳ³u³JØÊÌè³ ³u MKäÒÎд"´u"´´zÆØä¾ÊÞض$áM?$pˆæˆ&ˆM&cSÆØÊÂä ++(M(*ÌæÆäÞØؾäÊìÊä…*Zu*Á8ÄÊØWO@B,BM,B(Z ++pÆÂääÒÂÎZ hèêäÜ(.M.5šØÒÜʾÌÊÊÈŠ0ŠM0ŠðKpœ*ÊÊZÆÞÚÚÞÜZÒÈÊÜèÒÌÒÊäæ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdf`d48 ÂààÊÜÈ ++ÂààØòÆÂØØ^ÆÆ óZîÒèÐZìÂØêÊæ ÈÊÌÒÜÊÎÈÒæàØÂò ’ZæèäÒÜÎ#uZæòÜèÂðð äÊÆÞäÈ ++ÜêØØ~J ++âêÞèÊV cÒÊÜè 4Z{ sfæêÄ\ƒZäÊÌÄ‚ØÊÜÎèÐR~’ Cz~$bæÊèB”sZÆÂæÊ 0äêØÙàêÜØÊææìÊÆèÞäb# `3~T ÿ L B` ÿÿÿþ3r288™ÿ0: 6üæ@Òæ@ÜÞè@Â@ØÒæè@ÞÌ@æòÚÄÞØæ4< ++HÞÞàæP4ˆB6   U$kÀà—å@žå?Lu4  ák"lkÿY ++ ápŠå Šå %¢ ‰  u ðpšå šåTã ++&Rã-\Pà á0A_“A_$a8Ç0“å0âSãA_„_àŠå Y±jR '€5"*âÿ-/-_“-_2ïÿÿ@E; E; ãñ!*M;¯ )0ôÍ!dÜT/å\” Ä€ÊÌ ++U~“ñÈB`8*608:< ++ÈB¬XPâ6 ++À(ÆÿxB0pì"ÊÊZÈÊÌÂêØèZäÊàÊÂè\ @f@B6 .ˆ :¨ %¨t]a0R$ºA$ h@ ++ ++@>0çG (âÜ@ÒÜèÊÎÊäw)0`àZÊÊZÂêèÞZÒÜÒ^ h^+( 7[ pPä;Pà ãr 0L?ƒäDS1Oà ã–A ++ ++k@ú4þ*ÃßàÂäÊÜZÄÂØÂÜÆÊ j>Ÿ²üÊÊZÌØÂæÐ˽ l 8üžc(ÊÊÁÊ_ÈÊØÂò nb=eÂêh¯@ÊÊZÜÞÒæ] p^1SŸïŒ$ÊÊZæèÂÜÈÂäÈYrU;¸Ãè¹ÿ  ÊÊZÐÒæèÞäòZØÒÚÒb %b`b 9ÆæJ H <ú ýÜÞÜÜÊÎÂèÒìÊ@ÌÒðÜêÚiA>(pÜÊðèZÒÈý àØÊèÒÞÜn ïhprHBŒ  À @ uPTã±Up0 á Šå© ++) ¦) y• ++à“5€ ’å^áè <š¹ àåpžåå ++¹ *•Á 1 @šíH/0 ÙDÑ¡  @dT`  á0• °Pã&à ã-Šlå Õ[9e Ý DÔÿÿ ++ä9pž8/0q8PÇÿÿê-H! ¥6.*3H9 À¤ݤ«¤*8Džÿÿê|5 ’È È ]H/ŒÿÖ!ÅÿÿêkïOHìÅhØ.Zÿ–S#ñ&š ++>hBr  °  ++ÛÿHÀ áÿÊÿS· ++-Äq ++ àž ò« b«°áH5 pž§-”QžåàŠ­0ñàžå.á áàÎã œåBàQ㎺  ãRã Š/ ã¸ ”s œåŠs ‡ÿ ÀŠåàŠå Šâàåÿu0bU—1 ÀšÍ1¤0à‚àh/àh Šâàå d­vb¹d ÉK"GùhQ2 åï1 àHD žåxk )kp-ù1!@‚tÃ#ù1II/™H1 ”@ Èé1Õ/ϲÿÿê  ãoÿÿê /I 6`’/ÿÿê$º@ˆðÈ’ ŽÌÂÒØÊÈ@ÂææÊä€ð@PÌð|z@ÜÊîZÆÞØ@`R@Âè@Zp@b`jhX@ 0@bl"°ÊðàÊÈÒèÞä\æH5B&F`ZìÒÞØ ++ð BT CX ÎÞèÞZÄÂÆÖîÂäÈ é× ŠåŠå Šåí"í@ ++Á€^ã ++º{ ++?^]@/ø@#ÅŸžåšåI0*ù9à”5Ï0šåSáÑÊ”&àP‘S àžå àÅŠþi@žå$àÉ „BŽàflžåžå(àî|*Ùî|.(@vk*•b6Z6J6" àŽ|€šå,šåŠ|_(àå!…Š|*UŠ|#0@ì00žå  \hRáÊ“é à“å(|Aåº<%0ž8 -ù’å ’å"! á Âã‚$_0Šå,(K ++¦}.0-"¾wz0‡å @‡pplmlÿpšå  ášå(šå$Mj|­2È 4yàåpž}ý4á4h9ƒDqAá áŠ´$àZMl1š²8ð”àà@à 0šå 0“å0“å#1 á0Ãã ä ‚à%íp“åA1 áx"0€ €j|Í€c šå0„€à0@à¾nƒÚNàUТy*%,”!Žâø!àƒ4 úXI ÀC0Žâ4ï5ߤ ++Ÿ^áÓÿÿªCì*ìÃ`@;ÿÿêÐ  Б’å00šå0“´ Ô ++ •Ø SÚ$$4d$8  <˜ZýåÊ à"hà^; ++ä4šåpŠl*QläŸ4šå8šå4äjü<‘Vä4,ä4Å4‚T0žåÂU40Žå@à @*@˜"0ž”- ž' ,4,K=}x, ½@e@Šåšð 0O=õð S3Nâ$¸ð²º( šå8 Šå<0Šå@œašåš´hTk|1e ¨àšåNâØ [|08¼@àŒl+ ++l<¼4@à¬@ ++K0QHø,R,`?4S0Žâ,4,4,4ĺ.ÄAªDC0Žâ0x0Ø8 Ìø¹¦U!C”/ 0Z;! Ј1 à”,O0Câ 1…d/6ÿö>þÑD‘þÿêd Üo|8á  0üìÐ.Z8U tdP0P/®PPK8ÍxP/ |4/A¤W/­¤3/õ¤?¤ ,¤ 8 ++`G8 ++p ¬K}!@düÿêï,_óûÿê˜ H” ++.âû`ŸÛûÿꤠŒ08äÞî04p`j/h/oBh Œ~?p`lN PPJh"4%ã?h ÚbxbP¼%ô@PØÜæZ|æèä@P\\\R×(RR‰n‰ “èPHÌð^…¯@NHàÞJ ++ðjjpPÊ ‚6ðL ++DÌØÈäÞî FæÆÐÊÚÊZÞÄÔÊÆè ++ ++DÆÞØ F LH €BL  è .ÆÂØÆZÄÞèZÒZ9'@ÊÈ“w§%– —åŠå —œ„‹ƒí\Ï€·0à ã»(ÛÓ *™\Û1žT_Šå³™JU&_ /  á÷ t6`Rã; ++“@Sá 3Qá5©^p ++QKPƒâ”# O˜ô™M í€ûРã0ƒâ BâØ[! 8l&¿Ç Kñél"»LËÿÿê»3 ð+Iy0„å „å÷Ä+Pšå ±Žâ&Pãzÿÿ ++úÄÐðLdï]Ä&_Šå X/õ¤'¸ÃšåDÿÿêêJ°P ++Ø ++" —&ñúLhN ++8BP€a RL ++ ¬&ÁXBb8 L8ACPLQ€^ŸCèÂÒØWâHBR Ð` ÌÏ@0 áO0PaA 0—¶@@Cà{(ò ++€â ã “å0Ó@éÿÿê2}c10šo(¢ >qàNà@Žd_L ÕX_`ØÚÑã1 ++xGAÂR&4(<…hÚT€A¨ ++ðxBX  ° "ÚÞìÊZÆêäæ++"1$?_*Œ$qy ++à—ÇS Žà EJº"ž‹× à ‹*0Ž( áL= p—î  F@œ˜\•×&pTWTá„Dà®ÿÿêLNàôÐÐ/©Ð OàŽà¡#@œß* /I t´’mÿÿêêV† €ÊXX\&. Ú²"䡸pBZ  @ ¡v4(ü—ßœÌo ¶ fÂ: h°0"Ÿ"–N@Ú ?50†P ˜| Hä<àNâˆ8“8#0–03Sáb|œH9Nâ¬`HA8`H(„âLx@ ++¸CL"ÝL,T!/1 ªn ° Ü9–t  (Ì?àC¤BeQ7è /‘èOšå!X†ÿÿê :é…Z`\ \è X€ jZ ++¸f%* ++0APPÝB:ZÐ.‡€jX ++°í.C ªX†8bT ++GdZ8:T ++R68T&^IbI/`FíbFÈ¢T€!"T˜/d/ôd/ôp%T¨Bn  ++Ø *U5ràÂäèÒÂØøC0€51 Š€¡ &à)"-% ++‘å # ,ð"t¥$ð1 šlXbï ++@æ" „"àØ@â¹…À&= É 0  ã€_àåÈB.5 À@A@$°Œ!= @êU" €  í$ € € d@Ý@¨¸Hø@.€‰&> "$à˜ ”?=D0 ++\\/yÜ+/¹Ü+ùÜ•@ÆÿÿêD„ *=DÁ®¤D ++ˆÔ \ Ì" @È<W Žâ;È p0ÎãSãÍ)f€ àƒâàÎãù„P•à*z ++± :á áàŽÞpDí40CâUÐ à†â Žçö¹%O áOuDìÿÿꄘ (È$P[Üü " ª €@šåüþÿê`L\ôÙH!,,\.Óþ4*uÌþÿê2º>óÈBj Ø æàØÒèr:J{Q*:ý"à‘•<°Îãn-¡³°‡å 0‡å ‡ŸY‡å àí#Å!"I0õ 6.)nÉ¡%"0 FY" ++0Càž9 Q&p7-éš Ê+UÊ0ž”¯Y h¨ˆ15J·`Bh À`D+°ŽmŽX¼—x0 ^÷,·º ƒà —åÙ°XNt/`/`Œ(ðšå@Šå ƒà  $ÐœÍÌ0’”T*O„å 0ˆDõÿÿêÌ_ —åÄ*Q!L„ 30„Ô*„ H  /Í@“WÛ-TÒf¤ ! ++h! HS:2²hë­1P`fÂj ++8 %(ç’€Bl  ++ :: ^>Ç*¡0[u*-B<:-Òhö<)0àƒàɱï !àŽí½ ’å ‚âà‚ŸBö+ù#@<’ë)Ò0V-ÙÃf „0šå# á*-µSÌ5Ì0h0e0ô,p¥@î1(¶2ˆ ñL˜% ¶B„¥%ñ  ++lp‚l`âl€bl ++½ H7lá õ ++RnHBl8Òn€ Rn¸ ++ Š =ñ ’nˆnˆz ++ÐÀˆC2nËDÊnÍ ˆ%âTp'RB X¯8)ºT ++Xc@¶ý”Bn83"y‘Px3ÚT°,5ÂV pV ôp…/9š‰ =ìЃt!pW#Cb‹(·rZ.þt #¨ ÈÊØÊèÊZÌÞä[.‚[."(jS ++3 ++;->7 ß(Dº q  š^J/»-#"à# "(0<,"o šå0Ô*ýÔž´˳4ã!Û ß*"¼ T@R JO. ¼ æ0 Îã[_šå(l ½ ùzŸ0 ãd.(à÷,LZ ÷,"(àq-¢(«KMó ø¹}mé6à”îƒ,›"›"”,á$„è ¥A˜°0@7œ4´(ä|0„ó-o6 Ÿ À1šrt /Åt ;@3ÆE·‹o,0€¤^…ˆ" @\2 / /[¼Ñ— € ¿xÄ(ˆ(ˆ<*E<ˆ$ˆ 0L!a¬—1,ˆÃ0KÕ×1ð5žú ŒË1Œ.,0àœ!a¬ à?à„âq$¬$0¬Z ñ FPF¼#à‡c3‡d& àRT„7Ç nøe¨_$@šå¨+±µ™0U™7Ó) $$œŒÐyi+” ++K;H /@š,€àΩ8‡j "Zÿ{&Døýÿêj & .Éj .Øýt®Ñýÿê^* ÌÔ%!ÞäØ%À@äb@ädR@PÂÜÈzõ%XÆb@ÆdÌ%ObbjbÓ7 Bd ò 0 $ÂÈÔêæèZÚÂäÖ^q  b"°<y!0‘åS#f$pÀ“å\ º Dª( Z@õPáª` ã!0W‹1€0Kà0LàlŒ @à ŽàV.Å6"0“…Ùa=ó. ù@ ++zÍ ++$ˆ4#g8tc#€­%@ ++50†TMNÐB ÄBv  "šPäÊæè^c9–1Š,&£¦›@b ++¨<@G°Û6@È% # È% `&ˆ ++? Ž°*&°*_ ++øÈ&dÌû,@€XâúJ ¼'3Šåô@'¤ Z)ä Ki ó5Æ"RD _ 5 _D=P0!0é˜ ççX%à *I`Ä&ÜO ƒâ¬+D×+˜¸ ++d &Ô L÷-hDÃAwÄDM`Ú4J!„àø 3.01 áã3¨' §@‰79àHš¬)ü"žFë=÷0 ãh(  ©¹*é \!àDK: X.]ŠÖ"I¦ ++à(I¦Y¦ Y¦0Ü> ,é,Û T 5Ùÿÿ°°ÒHõO/ àÿ —.9K /óþÐÒ_„Nh0PÀL È.µÈ¸SAÿÿê¿ü +ù»‹À„„þÿê:âB’)°ÐòvÀBx¡%8 (>1ZÞÌ-$@@¾@ @åªqÒ ++à‘ 1à‘ˆldH ã.‘˜Ø1” ++P323 .á˜TZð ‘å‘å! áÁãà‡3.!’?À"ì@ ¯àlƒ<1 ’PQájïH@ BàLR4„p.ˆX@ ++_9@ ++ øCà !“Ð@ l ü‹F   k3CàƒàG;Ô"!£A ´´*}´00­02 ³?.¬ð DÀ€ * \P¼™˜Ð* @TS4Þ \/5& @` â|„Ë! „E¤l?šå¼ ôCÚÕChBjéˆM ++ðªx`~ó BxÐ x` rxå-e *x`G‘gŠx ++(èò Šv`êvHz@SRªv ++à¼%H ++ˆØ%+0¨N¾„  0 à ++Â{z@d ++-9V@›åf/Yþ° ãRáTª³?QšL". Ž°™D/àò*Õò1pš"°å7>Òz^á%Ê´!@ ›åôDº Q ++ Ê0#ªòG ªF-p—V  ;³üœâ0!â0¡â0 8z xr, .…ÿÒ~‡,?Ú ¾Ù4ˆ5PÑ4±%QZØÜæ@ ++ þ?`f`þ ++%p¨ ?ˆ ÜJ5>?b`f~ ñ˜BT@B€ ;˜ AGå@G"¦+"—¡ :b&Sã¥4"0Á O‡ªTG)uTGX/ TGNTGLTGDíTGTGDiTG$,¸> TG$,XGOäÊdC"| ¥ý.0ýý& àì<ih%/pŠ}Ä&½p%1$pšBøg$TG ÁTGTGõTGXaTGl/áTGC.9 TGÅ%TG.00¼$xBO ÊWR0A”BOLºÜ¨E*å0? F & F"}_4pŠå8|ZaöÇäW @šå4ä4(F ¥TGTGÙTGTG dFTGdF0 0I”FŽ”F! “ýÿ ++IÄC¥(GQ1 0”yS¢ª8½<µüB¼Ñ @B°FX/y B3ÁHTˆPˆ¼=4@K|FA ÚDB4„BPB^»¨)‚å”1*¡ àY³ ÓHFHF/é  HF? “å¼1/] PW/É P3/ \Ec ©\E ++ (ç8E¯ˆ"vüÝ@3 0“Ù@BSãmü÷`E *Å .ZüxŸSüÿêŒê ¼×//rdxE9/rdxE /JnEH/rdnE %PAN´-c| päD?èÞàäDXäD3DO*ÔD“ à‘å0‘åDS6 ++ÖèZ2¾-1Qã DC°BXi0<0È­<0" L$D5àADhÖ*Ú,d/ÎD9 ת¨C¹0 ++2‡“ÿÿê¢,†d:|`a ' ++(ŠCCŠ|î'°,OPB~°,ô7~ ++0È_h€{Cº,OŠ€¦<4b€¦<> q‚qô‚q÷Ê€€!J€`!ª€l˜k/M%2€B.D'š€Ë/ B.! 9$/Z”cx/ꀻ//1ÒPO5:€’.  ++G#;¢V1(¨f „ ++8_3! ++(4@î>BŠvÚ3x8" ++jt0Ë3& ++8OEX^ù^ÜN$#† ++àÑÊ°Bˆ à`›CSo@.6Ÿ2!à-Ø3{ïÆö ÒÖ+  Î51 —’* Î5/éÎ5@kAa{COšå­¦D3Ú¼5fÚˆ ++(0ä(Bv8!Bt ++ /1' ++(u3"#ª)!(rµ% @Þ°Š ˜ (ÒÜÂî50ZÄÊø‚(W&&rW&÷£#2<›%V  ª—0"ì /%-…90šš@0‚à Îg16 ÒeÉ^gãWÏ!PRáÀk$4"“0!“æ»,*9¢Æ” “,p¤)00 ãƒ,20ž$ /0  áÃ-${-*µ¾$_  áL90–UPZ;f "00Ë-bO  á˜KMV W1ZW1W1Ë-Ç-W1”Ã- W1.˜ îÞ$W1,³!r:h† ¿O2‡(ÚgÜ¢i ó@. ’x® á 1Ùú Êzh”Ê0d’ö?<1é£$ [àEÖú^Wo%(› %ø ++ ¼N8†+0 BŠ(BXaâè¨,È+^wZ;'±°¬,[‘° ›å°›å[ ºIR¬,€0Cà0‹à @,B@,@,Ô,.m7Œ,â.‡2N ++ &ö8D d¢Š ++¾ì# ØÞÞàòN §SBºô@& ãú:K%ðªsÛ`G"u—å—å­=¢K/‘ç6”å1 Q?6 í,\[+Å)æÏ€p‚å 0‚å-,4ðå@å på0å}Sg ™5?ò’œ ^›q1 [ /XW†ÿÿê^`JPPBŽ(A‰æ$,\ÇTC ++—ÉLÉLm¹#[-PD±DKoÚsT½ qÜ}À ´Àà„å„å „åeßà„å0„å à—åî ++oíÿÿê€àn/p½.q¬þ ++¥nô’<"ÞàÊÜZÒÜàêƒ ++1A@–~øèÞÖÊÜXŠŽpB¬  ++àÔ"Ð|q ++à—… ++q —å0—% ++"u4‰%à—ˆ|'"D@0—åŠ a0Câ0ƒHH H€0âSãd}!àžXP^ã -—HdÏ?ƒà’%¬@È*@påW㼈hE»@¤ ¤äJà½<¤mUr1  „ )<I AhW? áÀ¼*< c"•× ++ˆQ€å@€v¥×Y¡€ sÄW ++œ(šåã dÜ4` á&@ ã #=1Ø$žå8qD ++è? p‰ ++õypnÐ ++xÄ< *µÀP@Šåƒ<@h€õ|"@Æ Í ++RàârpmK[I|1wÌ .iÌ.ëþ¸ð<¢ ÂèÞÚÒÆU©˜  x ÌÜ& °&:¥q–š) & rã} 6 ;‚å'/@¤á¤Oà á:SV:Z¤" @Âí@U‡¤  ?ž/eýÕ-ý ÚÕ«Eý?pšý ++.¬ÀÍ\U.v *Q|E.Ê £ña.í µ¤[HTüMÖ‚àÂèÐZØÂæèi‡”LhƒFW >æ-ؼ/—å§i §Ô¶J2+µ†'…Gv= Lv3ÿÂJ»ÿ1ŠZB€\ƒz(’`( \ð‡3äÊƵ{$æè+VJ” ++ :„¦8B @ 4‘k&K Â1b7£(° HÎêÂä}:Tˆ ++¢Ñ‡³x~(¦æÞä¤4Sd–  j-[`$·¦Š¿1?6à“ôâ ÖzS˜ºÌ õMª~*©~ éMH„?žåTŠ,ýTLZÉ/j“2ÆQh â o¸D¯„\ D¨:“"@œ©x[Ë—õ7<í!/÷9#å$Â0 I0/á ü@aß ÔDã*{¶&10¾½JC á’á0–¿  O0šåIŽ…Bÿÿê" ++ËPÊxÕ…0ÌÒØÊZÔ-ˆ ++ÙM4P˜)* ++'#KW– ++ !C@B– „KF º˜AP@C ‚˜Èó@Bš`¨(HÎÊÜæòÚZ|àäÊèèòZÜÂÚʨ0 .„€0äÂÆÌ–ZÊÜìÒäÞÜÚ«W ž&ZG‹ÇœJ$¾eE&žVh¤  ÐÀÓVQ È^¹^nš‰ /} '¹ó„å Z›R.ºŒDDIDÒ! žnËŠeœ ++æø- š c$Ê]CQái}øÁ=3^ã9æ5ÈW4U"ªaR4(ò00B 9-@a‘!È1܇B8Cà ãã™RHRH@ù‚  ãÄ {63à€á>#ÛB4p8ôK53^ãíb#z!€z䤞Þ"¦ Q¦8  <5²S   ++|ÐfÁ#  ++ò¸¢p¢øB¸ Wº¤ ++–2X¦/¶"P˜Bª×€>[R…Üqt ++@‘ÂlhRîu´ bÙ9 ¡G~TPº~@~é*#:‚U:zxƒ PàP((@4T~æ)b¾*álÚPØ­­žÿÿ @”åœr%.5Ê{оd]¢¨!H{+ ++°HÒ:L ‚ªHªHA¬œ1(Hd%Pê¬31L ++`Ë.H_HúŽŽ xhB àÍž€ B Ê"à—,!0à—å¬ Ò¹îÕ`‚B®ï!`¦ Eù‘4—,¤ÚrgC"!Q_Žâ ©I*\1 ÎãlÍ ++‘B áé)¶ ¢ MA5šp9gB˜ ++ Cj®Xò3H°{† ¿ A "š† D´â²8ÚŒh!†púŒ€ ŒÅXBŠ8 ÒŒ ++{‹I ¢Œ Åˆ_(´8„ˆ^›‹0hr`ˈ¶– /8 G ++0"ÒˆÀÒˆÑ=µÖ ÒˆÓ11à“ÞO…(Du‰n/°v&ÝF Öˆ[EX‚±<ÚˆS~ÿ… 11àƒ]$ –Ê4¦ˆ4¦ˆt ØN‰+µ® ++p1 ++®ˆÊªˆí8 ^ ®ˆ³ªˆ Êì½ðÄd!  G+b²ˆp¢î € /µÈù’ KD‰a´P ++àx”v%?ÊØÌ„ `n8 ++´w*)‘ⶨäC Vjbj°GDò¶G3‚¶GPGA`Br%¶i_ ++¶ ++0RºŽ rhFa¸ 0Ž /ì tn&De ++Ø @ qîÎ"L¤ŒC`ˆàL ü‹.Íü‹ Nâ#/ü‹/ŠUt„.Q„?êÿÿ„‰8Ý,)àšð!0“0á„ G]dŽ |: ++¸ ++žÝSY0±½LX X .EX‰FHx5ÁN‰F00µ0h?Ä@d'°‰s ++a S <  $’ H‹^/‘»^ 0Áp5#àž}Hoä „* ;àd YD)ÅN1-ÅN˜ÅNlD:l/ø/iT+T ­DÔ¸8˜ *TŒ&(…m2NºøW ++¸`! W"¸@Ú€*¸( ++ºo¾  À „¤Çk¨¬˜ ++›“V2Î%# „Fiò .(š—Ž÷J– ½° kR(x  ã Žå \¨ ˜qà“å ž’ä*øŸ “å à“å3MSàà-H/ z*Ø*" 0_ ®#4ò? >‡œ-»5/p:lçK ºmH ++Â" ,I<ó"¦?À.}À<"'Å|.Õ¼T" MÿÿêÚB¼›²˜ ìÒæÒÄØÊ~=H$0k.÷H÷L/ ++xiŽà—å… w`"V 10ÜI1“6PŸ ¼J >2‘å0Ê0(“ra( ÍT0!0PðcÚàƒâŸ^@@â4ò¸ÿ—å°‚â `›ç°â `†à–ê*–ê1ÀŒRá;43^¨&àüÃÏÀŠå Šå$Šåts *å°LôPÀšå ï’$0à ãÐ0:¹Dâ‚âçŒàÖ ?pAV +++iT„Ûl\õT ÁX ÐaZ\v‚8ïNâà‚âžç0ÀÀj5%0šP(@@ƒâ9 à‚ S ++:‚Ä`! Bšà RŽçøÌ/á ++8Fï¬FNƒâþþ8"ìþ$03 ‘(FQã½þ@   0DJþÿêdqšèH4¼  -þÿêHšBÂh¢6 P±3áw(—}2y!pšOç›·3r†&AB ++ÂÎ\"Tty ++Ä@p ++ÌðÚÂðã"PÒV%` ++x ++Á0ÆhÆ ++€Y5ÀY5wÒÈ ++Hˆ5âÈÐBÖxq5¨ [HÞîïSëS‰ù zÇ0ë*hÔ-ÃŽÿÓ0Î=WMe aôDà†â5û¹9à†§ûñç9%Ÿ/0ß ß.õþt] DÅû /9D10ƒâÃe ¹ X « ‘' í èZ@Ñ@äÜ .܇Îq ÓNM8wûpí´2@ÔO²ü ÆÎÞæ`ÆrêÌÒbäâZÌÒPÊÂÌÌÚè!È! ++¼‹1ÌÚ輋0D·±aÂäÒÂÜ虋«‹2Òñ&6ÒìÊ°‹AÌI@IPÎ1&Ð="Ò2 T ÚÒÜô‹aÆÞØÒÜÆ"$1àÂÈ*#àݲ2 ++¥„~:Ôà üìÂìA ,; ±( ÌÞäÚÂè $Õ(È HÈÞÌÚè¨'› EŠÖú¤:Ö€ºÖ RBÖ8 2²Ö5#c8êÈ @šÈ;B”Ö8jÈ ++èBGP ++˜UfªÈ ++(E %@" º" :" Ôš¸PæÚÂð­ÃZØ  '¸ äÊ8H@a ++u9‚y@7@C ++w‰t—#"‰”Ûöu*%Lf 444S “å kM·f#aE@d3 "íX³W'3C!o)e  åå <©`Àã€à;q‘å‘ " WM³ .±¯De „â Žâï ?ãÒpcO‹åË(pcÐ) žHm@a€"’Ð:].}0 „â Ž *‡ Ì? ƒ*tè4.abx#' @/Z‡Š"c„" `?XCP Le1´pðb`j°oH1 “£R¨ ó¡ ›R{„_ Úõ×+ç\Ø(/ ØØÂ|غ*Ø_&ªØ¥\ °³Hh Ý8f/0¨‚Laà“åp“8 ++Ü’GõŒ—@Šå, F!˜Üvœ „j .yœ_. XUÝ#ðvít0 C` °µÛ„´ ++3 4a4sSAÊP“ø ,Í“PsS  C' “¤vS6.ôþ-/Ëþ,—„DEqþÿêp / ˜yEt/æýÓr …p¬r'¥ý–J»+Ý ™¿qŠýÿêXú( ++$ ¿}ÀE¬¸ÏГdHNZXjDxZlP7poMh ++ØéÚéôÚéGÚؘNd@BX ++ 1*¶E$uNH%BØ# I'"Ø»•Á'ÒØ8ʸ ++ÈQØs Üt3€ í¾jàäÊÌÒð2NGŒ@aàå@—BØRžå0µIeÃã0”ÁI" ¬¤¾Ü" ++·©P ++p€à`@°„àŽGfG»Yñ$žå“/hC,; QÓ„>'à2É— € "@¸6Ô}”z¦-²:%RO,h™fRÜ ++P!P '‘r¸ú¸`,H(g¸ ++”'#•'_Þ.ÊÊâ+ jœ'~â ` B Ý+Å£'ºG©£'O&ì 11àžT ~0/P lŸ&/ Èåå+Tå+[13PãNKf bi"0Û?10Ž[4Õ+,2i[(/…[( +×'½8[(hA/$//$ 9¡ ›Z«3ʈ[É+@ ã§Œl,›¸Ï)K)Ï)/ùt#/1t/)*y/)5/Ñ/)+*@/) /A/)+Ë'/@/)7+ÝÀ/)//)/M/)?/¡/)/åDQ/)ȳ(0*È Fÿ?»(òZ¢ ++Þ` ++à@ ++Þ`Ê(xòâˆäÎ(™’â8BÜ! ŠþX;H bâ7@ zâw¾8 ++â#ðºâ€:â`šâp‰È Ò& R&…²âPæ ++Hââ ++‡( Râ x4oBâ ++ ’ö0Bè&+° ñ0QO6DU ++8“—ÿàâ^ã+<àmE"!¢@ˆI B2 .ÉŒ8D9å¸;+Òÿ± /1e " ô9Äa²ñŽ²ø €¡`7~@Æ—p?ddbt` ++! ‹Iª衉gzè ++8÷€öc ˜")Ë?ÂÜÈ·È hrøÂŽî  ++@ <,OA6} ++S' ++ É1 *qlQ6Tãe‡d< 8bFD9 I ++@y0 ¥2WT!T x?i Øø9&É$ ½Øˆ4 ã4í4Á4STãÝ ÁiÝ™¢0àDà.C “€,"ÄVêê ++ô`0ð¯”ZÜêÚÊäÒÆ~L"ì ++! ++xLS¸2îLD°Bê@ÐEø !CÈB,R ++0†$îæ{748RHCî`C‚îâI*îkÈâg˜¾`Ç?ÄîÈ‚: ++ `db{ô ø 9ÜøÇíÜå$LFA‰‘U!†mm™1!“¥Ah.±ùÂŽKD± .ù±Áy=  u@%“åUÅGÆ>˜Õ˜$/ ˜ÜÜ 8QãÜÜQû|):? é S] ++>?6>ù H[C" DR pl‡1 /h@p‹å!( ( ++Á ( é•'€†å †å%Ø!`!—Í!O‹åN?õÐ-ç”,ÙÉÄm .áè• ¬ P.Úz€‚ò    ím|{šu‹ý( ‘±m‘±UX E** @é(°T1 áÀ ò?½K$:l ++ý"*ñ)>d ]±¼ •Qè²*ð’ú]$0Žâ¼¼äu .Íܵ…)”/jSI±@ûÿÿÌ‹M±™ ,E?šåun)Qªø$x\=Þêèy\ƒS€N^°@ÎX’ò0 ++´ò Plªò(ü"ÎÊèOé+g ¢ò ++ í8P08ôF! 2Pz0zaX€ö  8pÒ:beì& ””›Z*l¨Š »  Ï5(íTx1@†»" ઠà†å0†å ”¤1à†P!‹M <ã?Ï»‡‚cM.¡`Ph`&šBþ ÌBæ£9Ä(­Y ü.a¿[e00 6MF¦–0‡å @‡å ô–#, ãô <î[ýœÇ(À¦¥5zøÍpuú (¥¥R  á0ìíko1RáÃ=`—åàŽà2m-  ++è ++1Pá„š@ % Ð0‚â™'Aðf_=ØM  ++°Žâ °åÍ+2Žçѹ4‚âجÍu9 /é]$eu‰#¨Œ ¹!` eMM1d@ àdâÐ7„ "Øg 0èucÅ ++ƒâ å‘Y™’@ƒç˜8î4 á/åüà}4L/1LÉ‚ñ$.pÿe&¨A¥)d$S/±d |e%Nóq/éóq;AÜÜB^…ež< œÛ,/,ì7ó ++(ªBN8êúpÌðÚÞÈêØÞEAøBL$âú;P zú ++¼6T(`ü. ++8t(Pú%gBú ++ a?Hþ¢ ++±x €É7I¤ó«@æ_Î]? —ªT\ fº"0%0Åy? „åeòÌý /!jÀ•¹è5êO)ÏPØÜ&Á ri5c ØÜh5tæèä %5BÜæ ++Á ¶8 ++8]tfZ ++(Õ&`õ8%h¢ñ@ zÐH ++ ++¹ ++® ++%l`®H®Bø82£7ØÜæ×5D Ø5U Ó59ìI}æ"2äÞîÝ5û|% Ý5FÄÞè:/Â0D*pB&° ++ XNë5G % ++@@ œBHZ <!X:# ++ òôAP »6ÊÞØÜ9¬¦^OM“týF`/Ï+`/”“bàBà “,Øl$élîEºE0Ù"“°)t0ß>RŸeÌ+3.´¢Ç›ó'²¿ ++op¶ Ø€+ ++"/jr" DXB€vDRwD’öWö ++(Ýq/p3,0IÚô¾!O*)ºåÌå f4æÌæÿbæ%æÿ!%æXæÜ/ò +'/öÖ/×jh”*ß0Þ lÞFõ? Aå"¼.Ž—Ô3/}K &äuò ++b(B Ø ª~‘^t±· ˜ijÜ&p2­¥@cppŽàW³1Úúbóð1Ü×78/0Ë1(0®ìKD7ʳ>º \N"0SD)¸Ï„È~E±Pá¼ÿÿ ++pË2&°,q WáµÿÿÇ4ò9¸*Š^Õ¤" à–"Tæ(w2^l{2CzÆ'ØQ ++EäL B è ,ðaæÊÂäÆÐ÷6ÖÊòº›OÕ°—'*Ÿ/é (@`3  ++½åö iÒiÏiqÈ! “p< Ù¼TE1 †gU`‰/a‰ÆEk.¥$Aä>‹ô;,! a‚az,36%àƒm œ .Aœ)Œ<Yl “OLÓz)0d« ÈFàÌ/ í //QU U ‰8U ñ ånõ ü/­ÿ¸:Ÿ~m=ãL Ÿ™¸4æ ÀT/ÍÀhe ++% “Lˆ® •/!£?@Šå(H(/ `¼.‰¼ (Ç ͬ( ++((˜¯@òXáXzUì!`á ++ˆ .éˆ.Pþá ++IþÿêdÂÍ ++0pz5Š&„`'{‡Uxzˆ5`˜BQ ++¶ ++àäÊÈ~k4M«g>)ž@ ++0M/u¿Óv Ô0zRãfs()t!ctÐÿóBæèÂè ++ ™ûY ++›j %0°=ƒFò‚2 ü! ++Âô 0œB  ÿt( œf(W‡2@uO "åÄååZO($åÌå%å `8B³z2Ø Ô 7…"ˆS]¬x&p?­Ê štQ,. C u+"ðÊw åCSY0` á­H#!à}°``DLp áH¹C±H"à¶Í"`©à`zsb-!@“Ù­pÅLpå`"üWýEÄT"ˆ @^2ÁäzTm8? @“ @ó”T1 “Ü%€z± ++þ‡¡åI@áI!q- ` nyi°€ŒŒ@õD ¥IÉ ô4r Ð ]¯ ¹*•„ 胔q U(õF ++tÀSÈL4„ â‹!À.VMpˆZífr ++ hbS BqA Ò$(á%Ôs*H» ++®öPXB øÌ3sL«qéw1ºþCúý8  `"($³8D8!Ðö ˜, ++púí8öSê¿P…C&õˆ¢)ËÄËnË0ËÄË‹1(’m,  ’Ä’g’V’Ô’Ñ’Ê’¾j /`ì/aì j N ++ ¬Åj j |’œ.Aœ’[’Ú NÚ tš0Yš$‘8š)« |kB AÏÀ…/ÕÀ//À#/QÀ;„.Å„™n_’þÿêVn2*^*^"Y~ ^ ^ S O:,S .õ.õ*ºõ+ ]¢,+ 0+ ;–.µÆÞÜèÂÒܦå !`p- 4- Cú„6ú2ú4 ¬ük.+è! aÕζéÎ1@ ã3!àN:­s]@OÊ>Íb „à¬n É"4Ám @¶ j4 B|&@>|íþb à”œRj@ áz*/ áÁ Í΋.™i¤e .¥^±ö f˜éE:Øâ:ã:(vb2 ++00 B™ 444’4Ä4r484Ä416,8NßC0ÜÊîµ$o^ÂÆÆÊà‚v bßCüå> = []N Ç Ø´ 0…‘ý¿¨*÷ 14/âoTF»¡PS .Å_ê 0'Ÿh úœ& !•&a3¨ý”ì7 žQ'S3 ˜ ++Žà‘åÐ.0Q„}r!0ƒr€ŒíPMX©W +µPˆŒåPŽèÁM»o ³ ++ ç í` ˆ)ç @‘ @œ,1à„C'@¡Tà%j.0ÈPJ‰ÚuK ˆ6 ýp /Èt9“ @îÿÿ ++­@´†@ Å‘4HŽ ++ö›C@”åc &! .ɶíPL &  ß.)„8ü·À „]N x²PÍí ¯Hhéh¸Ò T«âè…Ø… =Ÿ ¥4q4ÀHD¹HDPD²z*¤á: ø ,ÌÒÜÈZøEæÊðà’º7Â& < fƒ—áq$  ž=÷br¦¼Á ++ ++3Šå n=;_ÁD ²›L” ü’ºš$ Œ.M\ ++²=3^áYÂHF!š«M ›Æ­®V>ø¢¨  ++Ú3¸"5 &5 ++/4‚çÜ€.-€àƉ`XwÇ›_ "àgÇÖ«ÁœÂ Á”§JyR4=-¦I±@ÒE@ܾ2›:a0 áƒb Þ°‘ àƒå@ƒå Û8ƒ} 8ž!‚H –ïÇ®à‚å0‚å@– /ü ‘âNÏbn Æ?ô“: qþz뺕äþÿê8²øE*J ©(¸?e²:h¨Õ1:pZ5  Ì1š-50üB"< ¸¸BP  ÀM‡1‰ ++$ á¾HF<´qžåžÁL"°N<·P¢rT°†å0¡PpÙ! ã( Î:Q<ÿ/áêÑŠÎ:ÙK)Qo  ó"BB  Ø>ZG° á6põTY ++ƒ8°¢ 0%‹CŸ";˜Y‡CEÀ áÖ£°—&Qoo5 —¿ˆPãéʽrx ++ ®x0&[1" ++ ++ã³s¹ˆTS‡M¶ + ++Pø^HS@ $qà—±ó;ï 3\á”  ãLd3ˆ„Ã9bŽÿÿê,hÎ ÕTP”‚”‘ŒDO¤@˜@D °€åˆ`cñœtP`ØL*ØØüW‘›K>2›å&°h' ++̨ F1Ï‹*Y—; l SKö­ \¡ }.#á' œr—åï°Q1 QL# HøCàŽâïû¹ ìç9Te·; ¡ WÀ$Xe" 0q-U1‹:5pNœdU /Õì@vð‰þÿêTª@XB $`dÈÞè ++2f ÒW(D£FúH  `¶ æÖÒàBƒ>$.pj{fÈ‚,U,Ò¦p\0Á8pšå‡‡ Ø ++‡¡­~¿¡­~‡9 l ¤Ž”:= f@Ošå}XghFv F@Èm 2*Z*LÆx`ž%c6CC Jâ‹E §(ÉLÖ0  @1ŠogòFHb[YªFÎ4]`B ç2@—ÕÙ(@–RØk²IHpO¸¢rCZHR@ñ 0bÄÞðHJ@œÈÂèêÚ±YÒ™0 ê+H|ÊÞÌ'p~ÌÂæØ j ØÄäÂÆÖ ¢läÊÆÞäÈZqXL ä t=&An ØŸ upìÌðÜerìÌðFtìEv ì fxìêpbzìêpqXN ä yl)0NþZ H±?5€;` PêÜQÆèÊÈ@¨æ@èòàÊ@üæ@ÌäÞÚ@µ¨nð‚îÂäÜÒÜÎÌXÊL` 20‚ x#B`]^&XÂBn¶"HBÊP|’/pøŸQW° ++0ôfçXú:Ò>%`Ìið"ð‚RHzz LµÌ™V è *L´æM´ M´7+ÕDD ++ S û±µ9?pš‹”W,*ßË¡´¡´"ô@fQZ& à­´$`c&ccûôØ7CÌqCÌ #ÍI³hÇ äôá/ <âÝñ´#ÛE/ž5µ*!D!´ ¯!´,”µ”!´ ƒ÷Á.0ÿt J á á$ á10‡¬f3à‡‚$‡å襢˜LÌå ãÄt XHÀh;¡G#\à, /šLjì ˆ´R0Îã(àuˆ !µ5,0Š%µq‹ Øe\ÜuSÌ3P. |MÞ± ¡•’±4R㾓 ” @°…,u5¢ Þ.ÿgÃö·_Íþÿêðã 7­ËóuúBŠˆ6¼ÀŽà0pµ¼DiT  ++ ¸dòÙ;Ì… @· ++<KH?—EŒ5þ0mA*¥×‡G" y H!’µ›ª—’å ’å $Ä×7‡KJ çJ Ž'/ '›ÌòÏL  l e %=½ ++d = Å ++€!ÿ€ Ø_¬ëMy! ¼Ûå =0ŽÔŒQøQWO KÎ÷K  ö¸KO ¬{ /I¤4®)-ïL5~IHXæóŸ ˆœ‹¡ˆ5' ++Î XÑ·GT ++0Î 5¸JÀS¹QVw&6X ++h>' V'x°œQV½~sRZö(˜äÊÂØZèÒÚÊ+ª \Q3À Mp ++IV¾ MûóÙY{Ž ‰Yø±ä#0LH!"™r Riª¥{=ê@ L!! ‚L!üÒÉÛÊ h4øÒ _*L!]~åHÙ}I|ðV ++‡.uðkõDÅÝ܆q XìÐch4P i =‚\ÉI¥z{qJ/0bUÎ.0  da’½Š½\$Ñn !| .ͼ¡Kl0BàÉ/CÙ#&(œ˜˜ .e˜„u~3^á²¾°"Ù ñ A2º M ð§zGO‘ @¢/pž;Üó°¦â麈œñq xq €j¾;ûx9zín¾Âèà<É!\äêˆ ° 6Ëât‰ ‰öÒ ~ì¼Rp†å ¼Í÷ µ&õ"i² .•ñ"Á¥1 à”^€íý"1BY]IÆ›³6Z@ÿJÁ‹Éa¦ )@AâK í©çñÓiUª(Ù&!Èr‡ Ÿ!CÃF0@ ãô“]0 ƒàà&¹%@„[Ecm9ãE#@‡¾¢Øï!€M]{" ž Þ L/¹~~ó€ej< ¸{9¶ + ¸qº‚o\1@ŽUë+ÚBgÌÄ ÙhÄ:VR  Ã,785 )jT+# Vè hì† ÑB†  À 2R% êÜÚÂèÆÐÊÈZ†ˆ„ZÈÊØÒÚ^ Îd ½#ZQÇ/p` .qÈ º¦ï$ ž\ *)Õ±´‚LF5à– V, À~#(A¼À¤ób7Ê6‘&·³gX1 —ŸW ˜4ø‹4ÀŒŒ24œ4" 0` 49q*æ0` .àŽÔôÌk Ô ÆÊ6m| [¦e .U2ö+ÿcš¥æPèB^ô(1 8¢ ÂSœVZÄÂÆÖú(ú(ù¥"èú(æ(Ì’»„f\Àà,«s8 ͵=‹!0BË`áã•8/!Rò…¼ $Ùë9è  §/ áeÕ}Ê(›f¹ç¹ð€ —((@ `è/@Œ " ÍŒ åFè\ež(Ø×½a 55†ü]á@/šåeaÅf ‡å @iaq$”­ îügHÔ .y@ƒ 5ÿÿ ++Ùbµñú) (˜£Cšå-Dè. *v@Q—ÿÿê:Šøh'X”(Z% â  ‡(ó× hÔ¯’'¦-S!‚#Ø S! X°±‚å‚åp‚å &Æk! k!pk!7* )í=ÖG / G vcì°x`  ++3 L|EªTc ++ª(- êÇž("H¦ÇïRå*p¾#‰¶'?Rá ƾÈÖ%@"¾&f"à³Vb= —^î&0€å €Œo"úK  ´X.±´‚ÅV%έ¸h­¸Q0%à—~) j* N!àžIBŸNø1ã0%o+ã'%ªÈ2€Q ®'P'%'% ®‚‹='%E4H¡8 44‚ÿøAè9 /Áe1_Øÿÿ ++…4î)ê)*™ê)bNÒ(ìP.ñ–Eª2`’Ê(``HÊ(0bdfDJh?j€lPL€' ++ Œ@(nprtvxz:N:\$"èp#:•$ 3!0EHB÷A |8~ ++€ƒ$ù ‚XJ`ò`Á[ú`-[x„ èQ$hî. ã <È6Ïê†PruCò„í$0¶$¬<%*i%X6Sš^å1Y^ß$/ß* ++ˆCBrAX †@cÀB†L¨uÐã™OˆXŸ2 ]2@%ŒÙ ]2±/Ω²ŒÊ;äŽâ 0€å0å@žçYC(© ++Éþ<yžh•ù©ù¶ƒ½ ++ñ1PáF3KÏCÄPCž ngx)¦Ý | šP_dªQùQ·/ .¹½5S  ÀH* g//Vïh*'.Aˆ‡5€š;0i /i ˜Ù˜UÝ($Å’¡zŠ8` j@ìÐ8ØÊè(äÊÆõŒÀß½ÃS šŠÃ`P RŠ>¥<@))# л@[wʈ ++8å¡$š(‡Gú˜L6‚Ž  ~ÐhBäõðPàÔnÌ›ØàÂ+Ê>ÞÀÞ­ÞÉJɵþ" û/!û*¡G "½úØ<@ÌL†D.õ¶^ùÔdÝŒÁ,IT( áœQ$+‘œP „â0µ3µ« •($!ž‹á œª Qœª­„­\ê2‰Å©‹1 ©‹‡©‹œ/=œ@X9DptÑ’$c· ,¬ È(/É(?/( 7_câ‹ $/m$3/µ$/I$o,/õ,[¸Ú³@@%w8ZŽvìU0z ý%<8J¸)' ++˜· ++àÊ1Q ’Ž2 º(¸B8ª]ßY ++%Sp8 ²\Å’«l€€BT8 âs!CðBvÈTÂ\= P R¤ «I708—¢R¾=’éPt88ÒN…Òr˜ ÔÞÒp©*hS,vQ’å’` 8œD8¥<3´ 8 ˆ$!’Ÿ!4ˆ$$1’k@%TLÕl$!àx#Ô#NÏ. \Å´æ°##‘°#3QãÜ°#€:j Hyo /¹@˜h‘oª>€ œtoaÊÜÈZÞÌêqC~@ÊÊ#ðVo?brfᎠ++N ¤VPÜÞè@PòÔ YZ/fp°oChBtDêrŠ” ++0ù êÁf‡’ 4múR ++·j6 6KlK dMÓ7 ð 6eK—Ì"ô "pµ'eK1|em5GQAGeKÕI/ýJ+/=J[­pJ/éJ+) JUH a8„s}ï $UH'p16C,Y¢–C,5˜8,¯\8r–$:«OÚ–51P%Å£Nf7v¢ ` 5›N7Ë0j8B&…Ej jÂË ‚åì߉Erÿ'à—åà‚åà—åà‚å#à—å#à‚å'à—å'à‚å+à—å+à‚å/à—å/à‚å3‚å7ÁE ¢Óú$ö +!.ö$7ËÈ’Bš PÑ"c…ï-Z’"KtŽ7Üa +iaŒà¥“¹€WÆ/í" •yP–¥ˆ*u©Ë–P3Ÿ¸/7X.ÁF17àžp&ÉGƇ0 Nâ3g~7  Q/ ê´2 y¿8 D.­ì¶ç› _0“å%}? ¤œ@<x9dùÁ*=(ÔЛü4/qôœ0¡0#0Ñ0'0.T*3ÍuD/Ð ML¿dPEÇÄ @+•xÿ‡dÕˆV#{' w Ì73L8þ  ‘ ]æ/Óþ¨’‘.¦*Ÿ*6Lªj\£"8žcš0ŠJ€œ8 o XÂušÎåž 8 êàÈÂèW=i wY ++ ++!Ž‡Æ5ÿÔaa0†å †$?%ž>m*•Æ:múˆ1Sª@x 7P l ì Þ†»ÙŽ? €è.¿H!ü.AàŽâí€/Š˜8à*­Ø4õâ&a¾U ++”å`= z©dÁ=†–~zzíh myäÔ¨ ¨'Ð"¨üPëvH!8H!E¾‚ –.&ª=f;!0ŽdƒÕ0&}Û?%0Žá ++ñÖß±ä/\/ñb,µÁH2SÄÿÿ ++´+w@"©¼4^ã©& H Œ˜ŠrsòÄ äݬ/Ta@Ta%@BEŸ žWz•Ê ÊâêÂØ~áò% -€@î·ã!ZÐ% ixSg* ++x9ÀßRBžê @8š‹:ûðˆB€8 š` r  õQšh ú"Zº2š ¢% 0"Øj€š€Âšq`¬hòÛŒª Ò»#:+† /è”D,"XØCZ¢„\$(Ú RäšÁ‘hÝ [à9   8­š¢Ö“ÛXç[= ž/+…þóx›‘ä ++ <{Ö<8@=³86$ÐA<Ž p^3ZZ ñZâ3 .-0_Ýÿÿ ++Ìam@4¹²tn¹’^&W€*ÚNHn¤n¤mP„8ú z' ++ –I Šðß"˜¦!äx¦ÉK U M®-ÒK%it[˜¥ {þà“á/­áÛuÔu2 ¢DCâ¦!wr¦ ++0ˆÁ5TOZÂØØ lJzª   9Nœ¥‘] ‚þìíìÏË·ºúÆ=¼dj2/©Àýï û·1ŽgI%I¯W¸"9Þ0slЃI—FF0€Ðd˜ýS(šå,¿õAj;>=ÚÇ "ø>×Èq(@Šåàà÷HKJ!0 º@ Ó8àŠå40Šå,Šå,ÏG‰‰+xë—_0 Šå<Ì"øÿ36"<<þ³¼þ!Ãù+1S:A:A†bˆCàŠå@>D1üÿ>aD‹#DŒS<àšå@Fèb2V"0 Tè4\ñm 蟭#Dàü‚a8àšå4j4@‚â,W0‘塦6 xt\Ít"8à®? ++†BCà á4†5wÁ|3 @ùÿÿê8óTX ÿ¨ý xwH] 8Äh@ªý4QÜhsW ++(š¢Ê» ?"¸6 ÈÓJs¯@S@õ@00*%0x{¯h4àƒ ++Aªž y] ø“ª¨  Òʾ© góK j¸kKš¦€]Äÿ4PãõOJ I b® u}o1 hC>Ü'ßÿPz]^À'?¨ºô$¨%°´B#!ªE.4ˆ8´G`Ž8²¸Ñÿ`ªà‚0€0`b!!Ð Ašìæ#¬Æ, :PÈ 8 È Ø­Vðß;V¨° n°}® Ø <³ˆ ¡˜D&Á‘¡FÉ ø7øñ— Ý qÏá á m ++Ñm ++ÕJJÉi ++ÂÅ&$Âùøh.…´¨´É´Ü´Õ pòB¬®#1¨  ++“&êàeÈ_ÓK4'á2æÿ=Jc›åàNàü™lG#D¡ Nà à›å› À"°x+/à°'/ÝCØä" …è*O'5PºåL+u _9¥PÆ`#°hJ— /qd#°hJ¬¥ÕŒ´#?Ò ²“ |z1Z@PL#²%¯#HÜR@` “/frµ# ˆùTÏŠgú¬ ++8ê˜ÏŠ€¬82®Øb8º 2CB®¢ PxB°®´10 £˜C¥0¥ ŽC@‘å0‘?SãýI&‘¯ ++ýëýÓ ý/Éý«ýÑééïq$ªñ'@‡b°Z° –J°8"t&ªt ±!TXÊÊbjh9´ ´;3, ;g™æŽ@\L¨1 ”h+åOß.ûñO@‚ ++ è§0RáJÞê! ”$MA$M 9)ÁäØ ˜ïgA à”儸L »&”7~¤/ @G±œóÝ L¹ hû .hZ Lÿ /]Hqã jû5º«PðB²øbFÈÞîÜbišG}`›*>3 Ç à@"O7ª'Ž6íP —*¼'/™/ ¢/›FýF‚/?ò â/xV.PWš4ØÜæ¡*Rš/hlG2€˜¡IJ²GR ².4´póxä-Qz´Ž-¸Û1p ÛGäÒÎÐ>XÜMÜ6R›¥" ˆ Ì J/‘Ôœœœœ&/›å° ++O  ãé˜ U˜ ³˜¬˜¹˜“˜ÚÉD!¶õP(o J¸o €Š¸8 Jî_ Ò´îZÅZrÅrëÛä)P 8ÅCn,)!0‘.#\$0‘â-)™ð4/ˆ  é½)$×½N% N½fd@¢º­‡ÒSR¼2± jB¼8®\àäÊìÒÞêæ®!d`®Àû-ø <²;–ßýž=‰ž† /é† ȆAz¾†Ÿ g*À ++(¿:zêÀ8Y¿l’Ÿð0„ w{ :„É„„„0n(›@ÊÎÒÜœeVdVĈ@ ++\;\&; Œ!0C??(eЬµ¬aAAÅ´¾§ÂPhPT‚Äbo"Ä ++0f öGÌX¿+0 8MpÈ>+?Ê ++ð6z¨ ++¨%!Î ç[ :àÑàîàÆà³ ” 6'!0”€§Ë”|.,? 0”µõµõ!0š46“*Ð.ÕGB&"0`”åðâÁ"A àœè„hÑ  ¼ l)[p¢Š; "ç† ¦" °^¿EV ´À /ir/S0â¾=Ü"0ºa~_â= ++¸00\/? ‘SDM A-8:X3XE"bs"fxÒ‡± ++:rxÃBìr5ÎHnnnÑ! ++¨H8~ šÎ ++( +++V|@‡@ÄÊèîŲ0àÞÒÄ)j\/äÖ˜ R!ÐZ/` LlÅlb° á pw1! ‘(äæBà’åÈl¤âÎc ~!qœÈ@ À‘åÃGC0 POº \{[·ŸOŸ‚$¨®+Ø ++ ¨®Ü.ÑKNŸ Ÿ Ÿ¶"€sˆ °ÚðZ”ÈwòB†Ù›"Ù›¤ ++4Ò ++0I¡X…hºÖ [8€ÉÈz <ØÁ++à :yu! ¥k…Z¥ g-èp ui-/1.‰„øž/ÍƸ# àqE Èy.YÐ50€ ++å ++Þ ++LÕ|• Ž‘SêB:…™œ¤Ø- p €)vè ~8‚..›à%/X C¤„- ¨[j¨–60HWÑ ‰OA •¹ ¬Õ¬ ¬ ¬¼‚6Xt¤ ++} +YÁ%e¿™ ÖèÏè‘ T˜[ <£oÚl;8 .õ”d, ö”ýHìükYìdÍJ,ükĤ3E°wv”Í`l=Iük +ük A/àŠþ9"ìük n“N áër\x*}°ükDükôk/ Gsž\ \äý „ÍJ eøktaD ¯ˆ*_cøkM.ÝÍÌ1V”tU ^#.XÄk .‰P@Wÿÿ ++Dñ ++*Ñp"/)Dù ++ ,[fù ++@X_üþÿê> lÚ lÚ lP lR%ÞPÚ lf hÜ °eOÏój@Ç*&<"&0H"°b" p&;ÅM8 O õN“ë"àLV" pB;+ Kfa‘  }“µ¿7& (ÏÅá“ý…Áþ`K  á¿± d)ddJêèzp± j †ñ‘á‘€ ++¹€•Y öæÐî©’Iä(ä!äL:?ä? “yß9Žƒå ƒå[<èåd@|³‡5"poŽ&*¸E%E% R“± \ñ¥žTØ~Øÿ4ðÝÜ5€E €E€E€EÐ/iàï5 àô/Ñôè5!/è ó6.É'ÀLo4h!&—ªz0 ++ð“wàúhêòxö@ô¤,®ò§ ªò ++(ˆÚ !h5?öä-/X C®Ä* 32SË-?2v bÿ6¾ó'Žã ÆöHáH1@)nÂ6e<bÿ@b@Q@$Ùtâ!/!âw¤ .ÍôSìâ.Dž¬—òC* ++hAcJöXNÚ ùj  SSâö~"B¿LGÊöux²>Pñ-> 2vˆ!¥o¦ …'|ú !Ø ;/Ê" ¬ïø ++ÿàâ^ãóŽt#¢fÜ: ’ø 6  ¶8 8."%F@U@Á& 0¶OSã¡‹6#ó:6f  /ñ¦ºŽ&š&<]°]Òy$.U$Ž!"0jÐYt ¤·*šåd‚>G ++[ÍU„Ü(€„Ã0# ++Â~7bc8 %36Lº»”'€ .q€"àŽó=!“Î*+ç"(8ɤœ¹ ++{×Êþ±tb+ t+  /eš óÿ“$Ôº*­ºߥ@ÐÒ õH"@Š)ˆTšÿÿ ++ˆ!“P`(Œ[ÜU(\$Œø&0Ø”›D „ ]’$&~¾$ *½¾$"à}‹ l?Žåƒppƒp_°þ)‡pæ.m¦|&!6*'o*‘¥80‹p0Õ0D ã4p–‘ .lœ 8I8ˆHÿÿ ++˜$•ROõþÿê(Í„Àæ*ˆw0ƒ™b_;\®"þ_ ++þÿê_;.QOA.÷ýX.ðýH adÊø÷°µ'7úQf&þ hF;ú+S°5-pŸ à 6w—pÀRØdApÀ˜_˜*q ž^*:@&ªd $($2+|í||  C®¨%ÞãœÁ /©œÁ//íœÁ79–+œÁ/yœÁK.ÙÊ*œÁYYJ+œÁ-­ª—œÁ/íœÁ/1‘ŸœÁ.qœÁØoª-8h3‚å lÁlÁdÁ&-(ãLÁ ú/ÙþdÁeŒd®\W§þÿêB+  ++N¨ @Þä@P¢#z~ìð @™VºVpÆÞØR@ØàR(Ä(F?hjbñ ++/` Â\ ++ Âb Ê  r $ ò-0y-x  ++`y-%y-D*u- p˜µ&Þ{f|$ïf| ++ó*0n;†Eà‹ê ÛÖÑÌÇm) Aß *í)±Aß Xl+Ð@}ÐlR©*+ñ“ú[µ*.5dú}1—Å©êE ëS—åÓ¼ Q* Q*(ÚXQ**Q ÞXQ*H[(kt  ‹(Á0ñ+$=úÀ_çÿÿêöû‘$¾? ‘Ú|ÔvÜÑ*2L¢Ñ*O— ++)( ++—/ ++8þ–, ++8ò–¨$ºw6*Û–)”*Q’oH¿I:éú/hv*-miXâ_*Á ô #˜ ++ÌØÂæÐƧØj¦B"&· M ++ÓpVv.¾C †å p†å`Šå-±q¯$ÿ™Œ5ã^àå× +ѯ£“""¢Ù¯ ++ØšºÍs“JHÊöG7‹S‡àWn×qbAá ápÍ¡Ë ++« e8"pÙ¡? ++€”àà@àP„9Ž„tT« ++ t #sx cr‚A£cr ++QÞGülî¸ G &ÞGcr{ ›Ƽ}¤,,ý¤ý@<ÿ41ï 0 '0a0$™¥™8< lØ /ÕØ ØL. Å¥d,Þq,I/¥,çЪSûq/0žDÄM“$”t!¨7"0¦» <€<f0‡å 8þªpt[l­t+C@šåÒÇÓï "€žD„$ Ï4 [1@<\4e404N•04KÍ8$4 _ Ø L=4 4£yuØ& Ü-µ o±€0á0__€#<.U€ ƾ Toóýÿê0.Ás.Úý¬ PÓýÿêjR| żS3ødQ ++¸ás/ásô(ásÁáZ×s`h z³` Ú@ö@B ++  ++ € îÂÒè²à¥¬àƒŸXô#4•„¹/hclÀ#LErG] µƒ4Ñ Õé45 ++Î3Tãá…s4Òa¤“Z¦—"à'Ö=x4Zb¼¼+yM TT0(^Àzj}"(?ŠŒ- ,ÑjA «éª /Ê4=4… -< yŸÆ8 .±ôn`ÿÿ ++”ÿ…Ö˜±"* ++ho7Èo7° ++ ++xב*]„ ’ o€/B8B$/ä A8ÂS¡*(BX¤ \P˜P˘%ª_PB ªõ ª£1hâª-BªÐ18*&*’}!hi9ç/Ú=!ºx§7„ ++ h¥T#ši @LChj€²` â8×%^É?šÜñ˜À`òúpb`Âú@õ*:Ù8a8B2q²ú ++yM`¢ !ºû%øû%«t4ÊÊZÎÞèÞß/Òè.8 hd& Ò6/ F&Z—MP«?³Lé *mé/{M %4{M/é•" Ñ#w, *1Hì+M.iü°Ù©q(p²B¶QJJ¯ªœ\§Iªœ/ 0\09 à0{\0p”å–œ«X`—å Æ Àã¸Òz+ª‡Ä(Ä%pt ¾Š¾A?ãJœ <)P]P ;Ö &0Š8¤çQÝv¢ºs Ð4^hp8$} OrêXg>z ÕM50x6Àv@#e>"#G$ÿ†?;2Xq<<KQf^ÊðÆÐÂÜÎÊX^hŒ>"ªF ++´2l2„V^"š@C:yÊÁ /' Žõw ++ kÓ:[°[%[°[“ s;.Y '!&°,;Ë ÅF ÜßÔ´8Ÿ ¢5ª–Ä€Š`N¨ $Š¤" •" :ôjô5ô†{" x¹„ " SW:" ` ++& ð@¤)* 1(@šþ퇤. ^mS¡.  . $ÔÝ. $. á. $ w¢´!7¢. ¢. JvX DyX\Ns+Õ* $6 ++ÎïotÙ¤* $* C* "EŽ¥  y7GÄ" /Õþ ++ Á|œ ++ • ++ DÉ ++ &Ñõ& ++ 3@æ/h ˆ+(Cõ( T8Ú* x ++*h PT8¢3±" l£$š Ì#šáW@æêæàZXàäÞÆÊææ (P,  0 > Ÿ3T ð”Ä…Ä{«d(×Ha ¼#X0©0#0Ù0øZ‹9u 0900i00™©W`/Ù0. x/ ßJ8I¯SŒì 8lp.eÿØÒ ++,`jÊ"*Šê J"€#%01,H½e ª  Y ,`'JÅoÆÞÚàÞæl ds'¨ 3"‚¶+ ++×B ++bbB€ ++BBü.f5ð xÒ¼d7úW& Ç@,*³ìä—ó øìSÙ³&ž¯@1h% à–` ++ó ++çOAL@›_é—Í'G ++—`«6. ++0â Pñ|ApL^ƒÄ}-/ÖÊ¥i jk&x<  8 7+@À]0° áW ©UU3â=bqàâ^¿`ÅK“àâ^ã’Òêñ^ãÚà â^ã}O]<<<< Îãšßó& °Šì,  ã6R9 •4s§@ÿn"p" °;öB eU"p+" °Ê TT©T£E.¼/ xŒÚCR:ð!/EœÙ~/¥ÿOp¸%4 ÐÆ / ÈB]YPÂB6]¹Rx æ`3Þ7Žàªr"\&`h8râ 0—åùp ++0—å0áí>` e‘E›…¼8®ŽbÒ?<×áàë/Åë-à*¤&0¸ˆ-F"^œœÿŒ/YÅ ++" à¬0å7? —ß‚4!®š&àôÀ ÀÐVÿ3 á|0â3 á ƒâ!¦&``/¹`Þ~ÃíÀpB0Óºà æZØÞÞÖêàÖE* B ¯B  yXÌü@+Aè4âç?  ãñOá” m7#fâÜ TBÍ œ ++GŒŽæñP*<û}¼P‰p  éLQñ‡ J²ðª:ÐÂæÐèÂÄØÁrÌBeH2ûÀf@41¨æÊèB08[ ‘ dÈÊÌÒÜÜ ++€@ÌÞä@ÖÊòãI0ÈÒæ8óæ@Òèæ@êæÊ@Âæ@Â@àäÊÌÒððI4.c0(2tõP>$ÚÂÖÊZÊâìZ}¾Æ4X j0Gn6 8ƒ* RM(Mu Cê0u ”à ¢ ˜B*ÎÀÊ}8}¤fÚÂØÌÞäÚÊÈxøJíPò ÂÆèÊä@ÌÞØØÞîÒÜÎ@¸R <0@L@0ÜÞèò5 3 È…/ 9¼98¾U Š6v($:}ˆoX40\'@\R ¢<Ý "(Mp*üæ@Òæ@si!Â@ØHÈêäÊh"BìÂØÒÝPHÂÞä@ÜÞÜÊÚàèò@×oã`Ýw 2<0=.á@>@÷§ÿþàÿøœ@ÊÊæèÂèE ôlbPÊ h‚ü:‘ ++DgÔÞà F ++HäèZq àäÞÚàèÂäÊàÊÂèZÆÞêÜ"SMt1ÄêÌ*‚É1ÜÊî21ÄîÈ:&Þ&BÌ&J1ÖÊòR¯qæêÌÌÒðTZAÆÆ~0b LEÀ@ B^(ßpO ÃX/oyoOšåçaab Fxóq„ÂèÊ|ÎÈB ++BR‹£pFäÊÆÞ£*äV9$âÕ§ÿüÉz2NàPD  qN º ˆfæw 0·¹ ++†/Ë ++}Ë ++"3 ++#ŽªÏ+Å B‹X—§*äv 0å ‘§ p 0Žçelv9ll>l Dr# HTQ Á”·¬Ì@ C—ã È ’ FxàÞæ@&0´8žQ0D8¦VJDB„@zD­©1LX¶V š·zfD ++(óF¡!Ë¡"H¢J‚ƒEo ‚?J ÒºÒóV ¾@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~€‚„†ˆŠŒŽ’”–˜šœž ¢¤¦¨ª¬®°²´¶¸º¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØÚÜÞàâäæèêìîðòôöøúü  v|ËÉPX ++à‰LpþÏ"2‘ž6à(ôüÏÊ2 ++L@ ++NP2!Ñ‚Ë–¼” ++P#ÓžR¢@¸Êä$Õ2â5T¢!×RN¸Ê¼âjÞ#Ùrž¤>#Û„KV’g,¶ˆ#Ý"6ŒX²6†#ßB6œZÒ6„#áb6 \ò6‚$ã‚@Ì^$匢RÚ`ç­Äb­„é­d­Q¼°¼°fë±A¼°¶h$íºj´l ++¸Ê¶jü8%ï",lü:#ï²fŠl%ñBfŒ¸ž%óbo-hüòo¹n%õ‚o%÷o¢o,büù¼xp¼|r$ûRitâ:&v.ýr/ÿ’$Rkx›ªzR–(ÌÒ½ÖS®R|™Ž6ÒüÙ~ ™Š(€š¸Ê¸Ê¶fü  þ‚ÂY# R‘¬„Ⲇ Ö'ð®ˆT½Š¸Ÿ9¸€Œ¸¼Ò˜'â·!P¶ Ê@gŽÎþ H5ÈH55oØÂÚÄÈÂ5Ø5%bwv'¾‡# ЂÁè'º'<„+à'!' ’ÅÜ”#Æw–â¬]˜%)´4šP !'ƒ5Hä`ŸwÜ ,Ø ~ôX ì&«‰‰ÎÙ‰@ ƒåÎ,!àƒób`$À]4V#à†ÎÞ†ÎÞ†ÎÞ†ÎÞ†ÎÞ†ÎÞ†ÎÞ†ÎÞ†ÎÞ†ÎÞòM†å3à—å3à†å7à—å7à†å;à—å;à†å?à—å?à†åCà—åCà†åGà—åGà†åKà—åKà†åOà—åOà†åSà—åSà†åWà—åWà†å[à—å[à†å_0 5 ]Š„þšü$ Ávôú- ûf-‘€*döœ N ¾Ði h%¯Š<# âRã5¾ Œ:„ t@*uP% 0¸@+ ++†!^@‚å 0eî6 ù©’`&Þ/š Uø#“7ƒuUì Ì +œE$ +Í$X " å2òB¨ .5Ø 2 Z­G_"Tñ#«"J!";í#_(T;¨0SñF<0EGSá 0 \T\T,µ\TsXáØ }G9 Ië$TïtTC}#É+ëãé_9_  à­ÜQ ãà†—ž 3 ã0!%)-x1X<µH+¶µH ¦–Ñ/™œ. à   « Y´ é_‘,A-È^ÀUE+@àâW$c!Lèj*-ïK1gü.q™Fc´T„ ôö¬ ȯ íÀ¾œ`.-ÝÝd:d)d/‘d?¿ÿÿdÕ¨``D.1 ÆD.q¤Ø­<tåt(/!t#/YŒ¸¦òt*¥t¦òŒ")|š'PH.õÈ  '« /9à Œ/,yÌ[è¼5+ \Ý\„~w Éd 4?4¶ÑOeáW¸má ¢8a+[a+ €*¹ ÜÍb<Õ+.í E,CE,'@+- ++¬},a m@ #@ ­@DdqIE èSìpqH lq1Wàžpq “í0Á 4'P +œ S/àžå 3X$åë S;àžå ?X$åŒ# SGàžå' SKàžå+ qOàžå/àÈ13àÈ27à ‡#  %Ò°HxVB/﹄&öS$X^Ýð .Ù d _âÿÿ ++«¨x/`ýä,/ýH_*U l ++.¶üH.¯ü™ `ºÂœû"2ž s$x{"üžXª.ÈÊÌÂêØè® é @¬¸Añ0 z`zð÷f¨Þ.÷Lé4ZÌÒá"6.h¤ “r*ëqïâÓÊ  F 7¼%àž* ¸J`: +² %¶ ï1< ¢ šƒŒ>Q0‚嘎 ‚6 ª \¥ð/ž ++˜*q˜ ++vò„þ ëóê… ++ /àŠ*w‚€×$¢å+1 ƒí+.“è“è “è,zÐÑ(J“dm`( ±ûéÊóó<òàêèÌZpZÆÞÈÊÆl%a âô&PèäÂÜæä€ ++äH#0ZÞà„%æ1€æ ++ÄØÞÆÖÅ&€•'Aè8Hç*óÒÜàêè^ÞêèàêèZàÞäèO€¢G“¸_ë‹M]Š"&@öv5iª@"ÿy;šÃ @š9fgá6Sãl101 šuK 0ì×÷K 5}"ð/¨ê +AÈO@šåº]Š @Sª>ê! ++¸n'0ê ÞÞàíx(6Þä@e( @db@üæ(Þ'”žh¦ $Â'm!+Û"‰Ô5/Hî>î  î­)ä¨ÀÌØÒÜèÊÎÊä¿*„X$ÆÞÜæÞ^ ++&H*¢¬HðæÆäÒàOa0®$5bèÒèêÊÜ0æX9:¨Ý HªP:òšd(°&k’_ ++(H)¬{p®XÊg@u~:!zb$ö ÌäÊæÐÆ’@Xr  ª¼"ÌØêæЋ!Z* (¦jʈ¼©3(’1H²D#U †C+#P¸<0 J† !¸@zîeµ0h')0€)®8#)ò P8+»hÎ »ç$Áq—å —ât—h0ç$pç$ðŠB² *+  ÈÒæà¨aƒ%/#Ú¢["§º "˜æRIÜk+ GàšåQS‰ŒMlϵÃ.ˆ…49UpžŸ4Á4àk ”Ìk*ú ++ Ä"éOÚ ++¸ /E¸.y¸8˜lQ!@ŠyDQ6^ã 'OÀà*R@0@YéAç€ã p0ŽåPã×úí8÷ú@”;8#åôDüš—½~R9p ++ÀZ¯ rR"à\¦”0ãgê ^Ê”ÚzW¸l0à ~"궓ã| ÌäÈé p‡ŠR9G–Ê ++úQ  ntX" @R.0­,­" 0õx äj ++ëPŽT‚’ ++ Î ++. ”3Eàž˜!ž!tŽ ++ïÜMÍ€ì „ "ø´ ,ã¹àî” ŒQœÿÿ ++ƒ¡*ùCL"d½D 4/á‹3@¹@Ì th X%Ä ) -t 1Ì 5t 9t =t 2Màž'ÿ!‚ð+#ÿ@@ ;ÐõG   ¸  !è"+/h3å€;a~*Ua~ó;<‚Ñ ‘G ˆ.ÁˆʱEÜDYu"ÌJµþÿ ++„$šå„A8þÿêçQ°[did`(¤ _0Žå²µÁHŒ& ´A´8ù8èDþýÿê" ¡x ùýqaª´&à¤. …L$ä…LL­G ø*±¸hŒ¼%@žÈ0<//þÜ|tp*! pøÁEÄHø4-45@àl<œ T ÄØÉyP . ++Ó8@ @ A@,nì< Ä/•ÿɈYpÒRýÿêd*2²ôsU¢“6 ð0°3Á4t%XËô= ++`¿`Åô`Ãù Ò‡h¾ Ð% SV'KŽÔ&3£ $m  ‚AA¦ z'„z'„z'„z'„z'„z'„z'„b'1'à„‚'1+à„‚'1/à„‚'o3à„å70:…¥wù .Mù µi®~Ô’ìÆY´ )Y‰H…ÅQ"|‹mAƒ¬iM"d a° !Öâ¶Ð %ìkÒt"/$13ž`Ig.íÁg.`$”  ø#$” $”ÿÆ· ïÅ"(Ìô’o=ôd/0íH(A©(œ–  ýSô'\ó à˜ L¸ I <.ä˜d/ š:@/]Oàžå!¤.x0/$ x xÕx¬Rôª¼D,D( ++/<´$<.aP#$ìXŠßÑÉëC ãÊï×ô ìT# 4 ++ ˜$y9”LÎL/ 8".X& !9ß!9!9$’50ŽçÈÁT0H1SãµjcÔ1 à’6Jzü$›«7FëZC{ú¥3A(6eþa*í„ ++$áU! áLÔ5¨˜9: ++9:° Ææ|±Œ ©tÈ /àä/ýäH„.EH '­|$oÔL4õ°4@Œ .5Œ8¢Rÿÿê àƒâà+K@P•à(ä_ ± :á áàŽ'K  (Câ-<€à†âŽçW`Šå7äjºìø/ „'/ñØö¸(%@žƒè% .] °œ O€þÿêбTP"àý+_3M/_"˜ý/_˜ 0$„` .}ýO ++9tÒÒê°8ò´`R@ r1hÚ" :Aš´7ž& -¥¼& %ð”fð”# îFøÈ‘ßËxlK+ëò Â|»ò 2’|‘@¸¶»NŠL˜Fº¨XJ¸à X˜´ ñ2@—À ñ80°oS?EòºÊØ)—˜ö8J â'ˆœ@!š&‘@ J P°z q¶@ ‚1°¦@ jP%" ¢ px¼X›Ô@"!’ù!F# ++ØQ‚€#ú´(Ål¼ %Ò+—x@ˆ'z §!€)ªC' ++ðq‚UH¾o¶8˜q,úµZ"¹D'¹+¹&/µ3/7„771;à„77/?à`T×b¶xÀ /XÏHäz"ÛÓÌæ";ö7Øtúhn|$'F4@S㚶bXX ÑX[WH[W ¹@n Õ! 0¢  ho¾ªa½D ++ "ÝîŸPPãFÖ T> ++$€³ œ/š”ØQ<Ûb>" ïæ$ $Šú à€Ì3ãó¤v«8õ ’1 ‚àú`nDÌ*éj 6 rò / Z œq5´n›ö,  øN¨<ÂÄ^ãª}  ãPP ÁPðHðhrKZø^Ÿ0îzC šå‹:ÐŒ ^ã1ºÜ/aÜ"(N¨Ü%(24Ü ++0.p¬—^0NŽã\ .qmPD ì ½ ?–1;“27“J‚+ &â #- 3 Žç5'á™Ù Q¸#]°à@üþÿ ++3\" H áH´ âþQå ˜ø,p¯—>Aà†âã>0n9†9ö`P,A)\,œ+™Ï›& ÈW™&š øšå+‘åà‘劷þ!& ³îD‚ Wþª0Yà+9pæ"0¾"<|, t2à–°O0“å ¾¢ 4 4/RþHÔ/KþHÔâº!>À.} À®§/þP,Í ¸ ++Æ5 ++˜/èý˜.e ++˜{¨.¥@ ”@Ãýÿêê ^3å&öÔ&>ö  @µýÿ ++@O³ýÿêA/QýØv Ø*• ð%êê1ˆʨÆM2À8œÞÀl8ºÀ€:`#,6À¥€$ÚÊææÂÎZ`!ÜÈÛù*SÒ"žÈ@X BE„ÒlØÚÒÜd¥€r úÀhÛ!š! zH€«!r!ò RP´f0`ZÒ) ’O‰?² ++ÐýÉ Ú9ñ¨ ÄÆÞØêÚÜèäÂÆÖ ÆÎÞæ`ÆrêÌÒbäâZÌâ‘Sa ’S800¸RDÐ ŽSEÒ „SQÄÞÈòÑRQÄàS2z Ó3"t@Œ»ÆÒÜÈÒäÊÆè‰/Êl‰-† ŠæàØÒÆÊ~‰Ɖp ü~Ð ò L(ÌàäÒÜèÌ œ ü~ý+PÈXJ]!G !ŠGl`N ++B¨-Î@(ÒääÒèÂÜèæ@5H"ZfP &ü~ͧ§ ü§ üæ.HÊ=&=e|§$ÌÞhGg/™ Ð&,Ä4XØ.* ++(ÿ6eš²PM(pÆVq„s! ++²€ÇOòVñW #z–o !€!ˆ” )\“,h& ++8RÁb +ª¼@äP3Î 2âˆÐ €|é  ÎCßsÐÔ5#$  ŽC uï0 0¥00Õ00/005”5 †˜˜"€åB€›ïÔÊ+ Ù<¤ê³#ÆOª$@<Æ-ð˜ ++<9îö49/pž440+d.Íô7˜–…bÒ(Ò1¬Ih5ßì ÄŠsj™©ÃG!Hp0,úòRÐ`bÂ""A‚Э0Ô_6 ÅG‚©=./€/—åUp®Vyê˜U…rÒX¦ÔaÃ88ÆÂØØZîÒèÐõ1«2í²i`Ð ê1h R÷T ²Ðz 2‡x ªÐ ++À%î#jî:PÚ& ++(gG; m |;€ TÜÊæè³4iØÊìÊØ@h\ý3ìÊ@#4" |5n uªX5¨ªpBØ<v¨ æîÂàqN¥;E£Á¡¡.iq!~7~7±$£<Û1g5¯%d =9»i´>7jŠÖ,“4ñÜ ÖXzØ ++˜À’siÚ (?4a £Ë.a<íÈ1šqCÚÚúXðHÈòÜÂÚÒÆZîÒÜÈX ++ܯ@ü`@>B8Þã¹hð pº禰ßyÎÞ« >·>*º>#¶Þ“š å hj>%D>/†>>¯>>c=:§= žÊy2\:g0šå%`â]Ý>xë< )!&= @”‚/1® å´ ½K Ã>.™Ñ& “à á^ãHˆö?“×>íšõ×>D¡·e .1üØ"yÔ&nxóŒm€ß¿. Pv²ÚàÜ\ûþ¤±#."ì/ I"YH/`‘8UÇk¯ Q á @ž42Øžž’ä$œõœ Ñ3»3 ++ ½Á! ƒù*= “ %ÙÑ#.u€a&Ìì.½­)ÄÄ Q ܼ MyK ++.…„</è.ÅïB"@œ ++,Q=ÿÿ ++-¬! ã@ 0€âã"’ &.Èþà %*sþé%4™lö.ö/!þ; þ ++fnâà‹!â9= ä¸æÏAE(è…x÷þ@÷þé0ìÉAÿk;êÃA ^Õ/8ÃA-l`îXú_÷ ö‘"Ã(èäêÜÆÂèÊOHò:ð Úvvv@¨ÐÒæ·ApÆÞÜèÂÒܬi8æÂìÕAð Þä@èÐÊ@P ÊèÒèÊR@†ÐÊô@¦ÆÐÊÚÊDpÊðàäÊææjÁHe\@@¨ÐÊAPÒæ@äÊ# ÊÜøjj±æÊâêÊÜÆÊ@ÞÌD]væX@ÊÂÆÐ/· ÂI6d X@Ž’²ÚÞæè@äÊÆÊÜè‰pÜèäÒÊæ@|@0ÊÈ@²h!\BŠðÒè[¸#@æ±@äêÜÜeO Èb@ÄÊÌÞäå0æÂì(<Ÿ@æ@æÞ3 ò@ªËðNè@îÒàÊÈ@Þêè@îÐͶÐbsÊÜÈæ\óea…6ð8¾µE1ò ++ih@XÈ% ñ 0òX&ð“kô"%#²Hê" H5* ++x2C•jZ؇Cù8^Rð²‡C$ Á ° ++ ìÂØêÊæSLP ++ ¢Ç£”7Ü ++(± нkÿà%% |]j-2 ++ ¼,/ ++( å  ßl/=Zu±ú°k:2 ++B("/à,<ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú9 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LaF ++"?ñ4ZÊÈÒèÞä èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P¶ ¶ 31Œ‘æòÚÜÂÚÊæ ‚ ++ÚÂäÖ'’ØÂÄÊØ^àظc@ ++ ++ÿ! LHÚÞÈêØÊ ÒÜèÊäÌÂÆÊ"ê`älìÞÜÚÌìÖfàÊb«.§&ŸˆÊðàÞäèŸ9Ðè˜P‘ð €ÊÊZÂêèÞZÒÜÈÊܶp  ¶À;´)ó<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdf`h Lb4*9ÚàÂäÊÜZÄÂØÂÜÆÊii/–0p jpp€ÆÞÚÚÞÜZÒªjÒÌÒÊäæpp/ì0p dpp"ÊÊZÈg‹ØèZäÊàÊÂEl.¦,h fh²ÊÊZÌØÂæÐ Òf, *d ldº ÊÊZÜÞÒæò] ]%Â#V pVS"(ÊÊÍ–KÈÊØÂb"b/Þ/n nnû$ ÊÊZÐÒæèÞäòZØÒÚÒ$j= ,g ++%b`gï&$ÊÊZæèÂÜÈÂäÈ=&i.Ä-A rjÛ(ÊÊZÄÒÜÈZÖÊ6(c(¤&\ &jj-2*ý;àÞæ’*['ò%Z ,‡qÜÊðèZÒÈ=jØÊèÒÞÜe,e/Ô0p &hp&?.8@^š.w/æ7¤&hr0ué0r®tärK_2.ÊÊß2m>3Û#4"ºÒÜæÊäèZæÊØÌl4l+ø)b ²36"‚?ÂÜÈB6Ñ.-i ‰78ï:ÄîÈf8f+ ++*c j:cÌc:c+Ð)b :<*9zZàäÊÌÒðipÄp>p.È0p;@.°lÆÞÜèÂÒð@r/è2ø j¢BtÄtBt>3u²D|kÜÊîØÒÜ|Dh'&[ ++b†0FD KÆÆÊàJFZ&š$X |6H"^`H`.ä,h bh¾JÊÊZÞàÊÜZJc)Ì' GL9L[ê©&jb*5N4JZÂØØ\N\*Î(` ŠPePÄÂÆÖîFJÆÐÂäcPc-ô+f €Rh ++/ÞäeRe,²*d pTàvàTa)¼'à YV(àäÊìÒÞêæbVb-œ+f ++dóXêoÊÜÈZÞÌdXd+¬)b Z8 ŸÄÊÎÒÜÜÒÜÎhZh.þ/n4<\*?KÊÜèäq ++\o?1q M6^k^k,+e ì1` r «ØÊèÊZèÞZÊÞ—`f-º+f ú6b;¤bd+Ö)ž ü6d@9°ÄÊèîÊÊÜZàÞÒB0ÜÈZ— ++tdt/Ê;† f‹ ?æÊèqfq(â&\ 6h§h`<+ j© äÊdjd+¸)b ++fl JæÊðàblb+Ø)b 8n.Üknk.Æ2tp±mäÊÈÒæà»pi)¨'^  ++ûr&ÊÊZòÂÜÖZÖÒØØZÄêÌÌÊwre?/m 4t">^æÊØÊƬ tk.¾,h vÐ0æèäZÚÂÆäÞfvf,Ò*d 0x Þ” x[#¶!R âz¿ýzZª¿üfè2|$“^f|f.ž-j í~)Õ~o˜)Þhÿ€öÄ ++l€l<+e 5‚6áPÚÂèÆÐ9!ÈÊÀ 8‚q/ö6? h¬¯„4ÊÊZÎÞèÞ{„{.Ü5z„†zÊðÆÐÂÜÎÊý ++†z.ð5÷h3ˆ jˆo,Ú*d /8Š {eŠe¢Ý f1ŒÊ;îÞä Œe,°*d CŽÊeŽeîÊfGÊàºee,ü*d A’Êe’eÀÊfj3”J0êæàá ++kàäÞÆÊæx”h/ú-j ó b L €€ – L~ S˜ LF Sš LV Sœ L| Sž L S  LŠ S¢ L( S¤ L S¦ Lp S¨ Lz Sª LX S¬ L0 S® LŒ S° LR S² L S´ Lx S¶ Lj S¸ L` Sº LT S¼ Lt S¾ L’ SÀ L S L& SÄ Ln SÆ L> SÈ Ld SÊ LJ SÌ LN SÎ L: SÐ Lv SÒ L, SÔ Lb SÖ Ll SØ Lˆ SÚ L„ SÜ L" SÞ L< Sà Lf Sâ LH Sä L. Sæ L@ Sè LL Sê L Sì LŽ Sî L† Sð L* Sò LP Sô L‚ Sö L4 Sø L” Sú L Sü LZ Sþ L^ d L\ T Lr T Lh T L2 T L8 T ++ L$ T LD T L€ T LB T L6 ŒðTæòæèÊÚTHæÆZàêèZÆèÊHBb8"chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Ñô,±`öÎB à  L0Ÿåê ƒâàø à‚å,°™å Uáª*°Kâ,°‰å ‹å(O àƒåH’H4zH ø0 ã`EâP…â,à™å^áh:0†åà ã à†å  áp0HW:Xà†å †å˜´`‚åã ++”EÜ Ì<0žå 0     *ü`Sà†å&œ} 0†â`ƒd'éd 0‹ˆáX@Û:Ü30‚ì‚øøøÆ`@ 0/²0p-`Ì l(Œlzl(flTl(@l.l(/à/à ¦>@ ãðšå@1ÿ/á@Lðÿÿêß0,Ê,¹,¤,“,~,m,X,G,2 _2ÿ/á,”n3ÿ/áýþl,ë.ÚþXÉ@³¢@‘@~fþNþÿêtBb"ÈÒæàØÂòZÆÞÜÈÒèÒÞÜ B` °   ,öTã€Xâ ++à ãàŠåè™å  ãÀtþÿ/áŠå  Šâ àâàŠå ‚u ð  JâšåèÿÿêTã4l0  ápÐ ++àâ^ã%’àDÿ´ôàà^á¤O á¤04&` Áp–å@ ã ð–åÔO ŠåØ¢MØP šåÍ` 0î‚B 7° $H} }yðŠå Šå$à™åZáj*@[ ++aL Šâ¹¥Á¢<mÿ  JâTã# ãPãP½PHú]? š5 ++`5„<A<„ŸI ã =…… $+/‘00 á¥$!H: á©¬å0å å0x ++0à‚å àšåà‚åàšåŒŒŠå ãüô ¥.éÿõØÊùj¼ÿÿê " |O påé /¹´#4õ<_&Tã8µ /@‘ œ*alS@šå&$D ãD¸ L­L4à áPD3 ++±@0 á1 @žÅ¥žå“å0Š¸d +d0ô(d“åãÿÿêT. p,d?àŠ|. "à±9(Ðÿàžå€â&^ã°ÿÿ ++úÿÿê0.í0ÿÚ&@ ã á@ŠåL¢|9Œ¢@šå^ãºo^ãÔ*‘¤ w:`Šå¸p@Žå&0 ã @ 0ŽåhÀùÀ O¹¸àÌ 8 ã8"à€@ àŠåÀ/ x 0*qxPÜÜ¢ÜÕÜD.D´¬¹èµ„*} _@Šå  ++”‚ÿÿê^ã’L¨/ᨠ;”å(t`! ŽA Žâd&0xx.qxFxx<éx`¬/) T//m TÂT¾T.Ñ T©…<L/- ++Lm HP`ŠåH!0ŽS0Žâ¬ÀHL¼| ++LHHHH*1 /ÎþH/q H//µ H'`* dH Ä Hd€@à ãAý ÿ0 á 0“åàŽâ&Sã;þ°* DþÿêÐ @¬*Ý \l < < < 8 `è è*… èŒ.ºü_ÝÿÿêP LÑL–HöüÿêÊ’æ"ÌÞäÚÂèõ þ~XB$H†$ÚÊææÂÎÊ€ $ŠðÆÊàü @ÞÆÆêääÊÈ8B´8" 5óðB  P ++ æîÂà ++–Tãƒpa"zakEEPiÑíY <-+¥é ++A@ŠåÝ žåå ++±q,í¡ D.1Dˆ00Žâi1àƒq9†|C0Žâ 8 8­] @@} ñ0ô Þᡨ*¨†ñ®ôŠàäÒÜèZØÊÜÎèÐŽD3ìÊØð 8Xò0Xz ++B¬ ++0öHB`8 : ++B((BL`B ˜ ¢,€K x—å à—å 2x   x!šªL áËV Åþ×ÔFær 4@îÒèÐ@ÜÞÜÚð@ìÂØêÊ@@B¶8ò( ++îäÒèÊPBb8¢ #ðPÈòÜÂÚÒÆZîÒÜÈRLP ++(@0 Uƒ gÈ ¿ŒæÞêäÆÊa"l_] ++5*qOëDµD/&DùDxL*EL ++\aµõ ¡/ç¡/Ù¡/Ë¡0/ºeeu¹Sà‚å±  ½la ˆf,͈¥2@ƒ˜@à áu ++"O, X&%XW5 X@ å ++OŠåäD*‰D@"z* PHp á©Pð—å8HtTùQãl 0žå0Š*ìPQá^9 ++@àžå.0äñ ämá 0ð? á5 ++±‘ ++æHÑ ñÑ?šå€˜/1€'@.qõ ++8^|SŸÿÿê ´“‘ÿÿêTãŒÜ¨1 Šä Ô´QQá{ ¸u i5%"HDôyD HH@¹©€L€(@.9¨8 €L*yj €ª ¹@H ð± ++J d .4à°iáŒàPàXaD àTàe/M à//‘ à+/Ñ à+/ ++à+/Q ++à?àˆ ++à àEà *Y  H) ™@H€ Ù€(,a Ìà/Y à+/™ àk ô.?ý¥.. ý|@ýÿê@d*• D /˜ /Š /|­/k  " @   Ô  |+•|0@šåð° /Õ° O/9° //}° ‹/Ð//aÐ+/¡Ð+/áÐ+/!° ¯/å° /*)D° /i° +/©° +/é° +/)Ð+/iÐ{Ž(}.oþÐ"aþИH*eH*àÂ-‘ âRã ++Ú'qžåRá ÊÚ'‘Qã ’b(jRãúÿÿ¬à p*õ @ áä ´Ô X.=( ++PÔ xa#Ô rø ++j ø_ø„l/04ˆ*Üü´/]´+@4Ha€(@.4üžü“üŠÌ ìü ð|ðÀOàŠåüì !ôDÌD @@@]@@€Œ€(@Ý@ô/ô+/]ô'ôD *Ýx.”ùÌþùÿ꼚´HæäÆNR0ð"ø"æòÜèÂðZìÒÞØÂ\@|0@ZæêÄØ$](¼*$!QèB ™/ ++“ÿÿ #f; x x x xh  pxD§ƒŸƒŽ”0—ß$@-Œk+rà—å—Ûz… ÆÃ+ Ê+ÍŠRŽ ¸´1—{/%ô: ++8 : ++ô ++/ÉÊ+/ +/IP ).P aZs*ÂsT|ÈÂèêŒS8j2ãX²(h!0 ++RXª"ãX * @ÒÜ@j$ Q PQf R ++ QôxX : H‘ñ ++æäÆX ÂXX rp FÈ$F"SÞÆÂèʦ dZÞÄÔÊÆ´ 0ˆ?ò` @ÜÊÂä(" ++H¾BòÈÔz @ÆÐÂäÀ`ú(D@ÞÌó 0$ Âèp((dZ$‚d# ++dDØÒÜÊG$Šd)X„ - ++„%Š„*„a ²"TH b D8 !#‚&¯"" $%²©/': $'º‰-):‰$)º‰c$p&Z(P$-BZ/-Ê$/JZ//Ê1 -1Êz%3JzV* #rÿ / ++ ý"l8*Ú{OàB,{ÿÿB,{,{,{h. h{F{>ƒ-{·_à—å oyo4Áo÷-.÷“»“5ª½8Oeš.( IJ. h !;B~PX;ÒˆJ!?"J0J$ARð/AÚJ$CZÐ-CÚÐ)EZJ0J$GâZ/IjJ$IêZ/KjJK -Mjz(MêJ&?J/;ÂJ:$?ZÈob6 ió0ÎÄîÆèî`ÚÂÐêäÄêÒÊÎànêâfZ`P8  ‚3ô  ++2ÌØÈæÌÈ 4æÆÐÊÚò ++ ++2ÄÌà 4Ê0 LRÌ6 °<(®EèÂäè0 W*æßP<$YJ…/YÒß$[Re-[Òe)]RßÛ$_ÊV/aRÛ$aÒV/cRÛc -eRv(eÒÛ$WÏ!8ùBgÒoA8 Š.g"æÒÚàØæ2 ,ž*eÊÚàèò@ RR´ 6á@ÆÞÚàÞÜÊÜèæt@â Ú@NÒÞèÂY¨BF ^ ã b"$ß› ++0å±:0†å †6À à†åà ãà†å-5@å, ˜*¡ü@š‘5â ÈÒäÊÆèÒìÊ(:IPI˜!M&eBÄÂæM!î " 1àÆ*Æ2Ò:a ++æÒÎÜ~BrÆÞÚÚÂæJ¨@ññ üfÈ , ±, ó \@DÉÔ cèC'BC 2Ný’D’Ñ ü L(ÌF1òÌ üfÈ\@üÂ( HÈÞÌÚèXšF0 @PÞàÂâêÊR<=087QÌÒÊØÈ=³HBL  S3# 3OL ++/$/@/$2ÜB/$;0 72 à—/$a‚åà—/$_ à—åèB .æÿ»ÕÇ(>~ !4+…Ú !pš;¿¡ÿÿê"BH1ÿÿBH1H1H1hJ È1R1Jƒ91R—å äÆ.u ò ò /­P /@‡ñaDIa¶Ã¯ÃXª4þ‚ÂÆÆÊææÞäÓ!hÙS t@ HúJˆ<ªJˆÀ7û7ƒ"LHN6Q @b br§ü êF8BL8 ZFP+$"+“ªF BLejJF ++p|’`8jF ++(>“RHBF3þ€4(ÒääÒèÂÜèæCt@ ++ØÒæèUXP"%Zå<ŽxRîÐÞFP€ð HTHäÊàÞäèZæèäÒÜÎXúê8(‹¶VîÂäÜÒÜÎÇŸX$æÊäÒÞê¢3 0T Ê[=f0Z«2îÐÞ1(CPPA5ÈR§2&üÂ$õ@üæHTX#ê(VbX€ )Zq@qÀq(qær/-zr,V\&bG’(3ÒPPB^#øœH˜ò @€ ++×? ž?JqïDb: ëDb:Db::C~ û(CkM. Äú„z'.}æ:TZ9ÅH ÓBÏo Ë?L4-ûK0_´ÿÿê¸0e8q´j´U&š\þP ++>UhTH 8 8 \H â^š!HiX@æv< Ü1b7È ¬ HÎêÂäÈ!@gC7ºg@ >``ÐBÍðb >üæ@Òæ@ÜÞè@Â@èÊðèêÂØ@Þêèàêè@,ጠ++HÞÞàæXCC²`OPPB0FHÚÂÖy1Þàæ RŽ|  C>û&™-40 áááL{ ++` q0 0 ‘€å€å €S'QÑ+ÑÃPpó@€åà€â à€å0€Ç€”D7 ®Ç)T/ @´ôIÏ" Y TP yXw wä „  ä@Tñ à„åà„â à„å „åà„âà„å0„LAà„å• D ìTP 4 ©yUˆl 0{/ ]Ù#0½!O šåp`iåô"²Bd è ´TV¯KtM“<  g t  ¢0—åØ…²0½…Ü ++O á˜ s§@ôT?ôT/px Yÿ³l¬ ašD,% ¼F2(B*H (";05Ñ ++ ++IÊd> €@8ÆÂØØZ  ++Zù5ZàÞòÁxfÂÜòfÅ "4ÂèÆÍD3(ôÊääÞäpthR#‘þ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZ° ++3lÆÊðàäÊææÒÞÜvfîäÂàz@hM` ++âêÞè$õ.nèÞà Lvxj$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Zbœœ?81‹ ÆÐêÜÖæ j>zÿx zlÌÒðÊÈu`uò ++3ùq2æòÚg ++ÚÂäÖ懦ØÂÄÊØ^àØæò@lañÎbnf<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnl%h% ðnp Únp`tr$!ØZŒû$Â`ìäÆÊÈÖìðîÄÜæòìZ`8 1¦ÄÒÜÈÒÜÎ ïØ;G' ÿrIDv¸Y°ÆÊÈZØÊðÒÆÂØcðtvz x L z² `ÚæÎsPn7< MŸ ¡Xgn3K L L7F oZÞÜØò~2b ++|'“| L~Lór~ L€2‹‰\ÚàÒØÊ–ò€ L‚Ò^ÞZäÊÂÈΔ‚ L„LS„ L† ƒ† Lˆ L¦GƒèÒÜêÂÄØÊ÷ˆ LŠ(êÜÈÊÌÒÜÊÈ-"qŠ LŒJlBÚÊÜèö, ä梮 3qŒ LŽDÙšÌØâÈÞÊæZÜÞèZÊðÒæèÇ0Ž L<+ ++\4 Lv ú0Qjñ%3 zp L’<¹RàäÞèÊêµy’ L”.,û %” L–(LM"Ï– L˜(ÂææÊäNó˜ LšLÜÞZÜÂÜæpš LœZqœ Lž8‘ÖÜÞZÒÜÌÒÜÒèÒÊæStpž L 6•±ÒÜìÂØÒÈZàÞæ  ++mS  LR tR L¢.C(èÒöI1S¢ LV ‚V L¤Lf p¤ L¦{jÛW¦ L¨R@ÊÜÆÞ] Rv¨ Lª,R"Òæ˜$qª L¬0IY&y¬ L® ñ® L°*H#}° L²§S² L´ •´ L¶HLHs¶ L¸& *äƾ¡n¸ Lº ISº L¼ ¤¼ L¾LîÐûS¾ LÀ¸ è ÷qÀ LÂ$,  ‚ŒÂ LÄL8Ä LÆ8x ++6sÆ LÈ$îÑƒÈ LÊLZ uÊ LÌ&þíuÌ LÎ>!»-‚Î LÐL—PÐ LÒ4"¡SÒ LP qP LÔ ++ÐuÔ LÖ‰xÖ LØ0€a0Ø LÂ/jr ++ ld/BÜÒ2˜nr LÚL‘t°Ú LHàäÊÈÒ•,1~@\ø\c ++!p`7ö7b75/ô7f7î7h£!j5!l¡ì7nl!plê7rl /r`5!!/rd5!è7/ä7!/rl5!!/rp5!/â7/l` ?l`b5!d5!à7Þ7j£!l5!n5!p5!. !lb/Ü4b:/l`: ÒoÞn/3lbdVbV hV?àn/3lbfVdV jV?ân/3lbhV# +llVfV jVT #lnV?än/dlbl L± æbjb pb?èn/3lbnVlV rV?ên/3lbpVnV ++#n`V?ìn/3lbrVpV bV?în/sld` LðdSð LòY òy= ++ o ++Oôn/#ld‹n‹ *nfV/ #ld‹n‹ n‹?ön/#ld‹n‹ n‹?øn/ãldh Lú ++HLæäÆkSú Lü z uü Lþ$3 ¢ þ• ÂØ òæe c LZ dZ LVCLÁH L¿  ++¼‰2 ++22 R2&9 95,• &&8*± # %1% è$ÈÊÄêÎZ'>0>1Sk*:@*00á¡ ++##E Lµ£ O"L#"2$8ÃvZæòæèÊÚ%¡),$,O&0Lm(S& L\ \45(  Š( *ê$*>,&:,#M.LÒ.0Ä“#(0(?24®l2Ø44846,.Z£6&C8Lq#8:> #œ:r<<4O>*L¼%>%@Á"ÈÊÊ@1B6vˆ+B{DD9FMë(F(5H(£î¤H$0J,K-KuZÐÂÜÈØÊ&J&=L$Z L"ENLNP( &”'R*/ÈÊ*²GT0Î ÒÚvtÊäZàÂèÐ(T(V ++ð(ÑNX&œÖX#OZ6L +Z+\D ,“|^ÿ dc%^%I`Lw!X  5b\ºb:dšdf™*ÊÜ™f3h*Ÿ z>h L®5`>j{ jsl˜¦l>n.¦Zˆ6'n'>p&?ÍpÕŸ/trèÞàîý"ÌðÈÌôèÐdâfÐppìÈ180.GÖÊò@Úêè~-.2TÈ T €l_t&Ñ ¯vxz ++hƒ)Xé#AÒ|§)(5#`Š2Èù.ØèÚ@#‚@#/0 'µ ŸL.µ –µ ‡L.( €#oà/±&Yå @o4#.á#È#L#H#O ++DaD,.LL7"Ì|å8„ È@*%@ 4 1Š¼.¼.jÙ!cÙ!Ç,Š$ÆÞÜæÞØÊ€2!©@B~  .Ò1ÉȺ 5(ØqX!àš”0H/ž°%¹Hˆ@ àå,r†œ¥0Žâ 0€å d„ ++0Žçx¸)HqHB±@2%@ñ@à"Ø'Oã(H.9ˆË:ÔÌ /…Ìx'!%O ãX ݤ_Æÿÿ ++æ`*<r4M47”0”°4šÌäÊæÐZH>àXú~8bXŠ ˆÖ*E(è$T ++HÆÂÌx/‘8ÒÜèÊäÂ:8/qH¨òàÊ@P`R@èÞ@Ê&Q@èÐÊ@SÎÊä\[0 "xˆ "ÌØêæÐ…%D08T,¡T8 J~0[Y ²~E+85h€ HÑ'bá2ZPIP/ŠL/i´)4/Å4#ý84/=4(X ‰Ô*¦”Ÿä4$ba¨¦"äÂÒæÊ7KB2„Wè'w¢€¡Q† ++(@X’³ˆ ++äÊæÊè2Y*€(a š, ( f ŸXÚ‚ 1€@„Xr †p†X bgˆ ++0–-} ‚ ++ ++ßp@B ( B$&@Ÿ51@žŠ+æ/.CPãK0`0—å0„ƒþ66+*èÂA ++ ++x6@Ïxϳ ++ŠhJÕ/€ ÈÙ $c»,„àâ^ã$P0Žâ ÝÛ73OÜ @ ++ ++ 0ø8 *\/àäÞÆÊÈêäÊ&6Œ0(PH¹„Ž  î ä +È#ÈÈä Ü ++4p á‰7ì­DÝìÖ* ìJ&YrŽ¸Ð–,ÆäÊÂè.qæèÂèÊ *1?È !M1) È<'¥‡ ¥‡XH/à„å0„åuóL:äH@Òÿÿê> .à„=/ ÔÕq0ûz¸”’ ++Ô lÛ,<AØ,„ ++æèÂÆÖ ×,† ’ 9y;P ”O(–4˜.ÙP —O>8 ! ,/žåß1‡‡`…ž]:0’å®Z Sá‰Nà’剬o5’¨ ` ¨»W˜ 8§%Ü@^@^ÂA šÐž   HÛ5|C"0¯†eo=ÖV³ F¿ÿŒ:ê& Ú3 -  ²AÒ@ åx" à¶A24¶A/0žA Ï24ÚÌÒ3¿  ;Žo Šå 0–4ýÛV®z_ 0šå†P jBµv€B)Xµþ°àžå —å ‚âÕ AÉ‹4P Žâ0,q q q ’áÒD ++B÷#¬&˜hBœ Ðê›wüDp—å‚?.a?íŽ!š´8bÚœ $6?¥š¥@ Œ!šÈ `sZ ž&Q¢ ++Ú -¤Å"À æ Q>ƒAC ++ .ì ì4ì/ ðëJÙËzEUzE‹AO ++pÔ Ø8q9? 1? wˆŒ83… ˜Cg]Ÿ$•8,{„CåõÏ[ ++È'³ÊÒ À¢D¢ Jâ 8%UCz¤(ÿ¦ÒªÒ¾Þÿÿ@X¨ ØÝXÑÍRe]ì’!¢o⨠-ª-¬-sÌ H ½@@®CÝilPãÆ@ €å €åú§4p áŒ ÀÊ €€ ÂLˆ/ˆâBýtõe óCJÕQ/ ®pºB¶_f;‚(ºA4 žš Ë–!†{bKÏI ÄìØÛ‚/ý‚Åp’B®¨žNÔFÔ5ªwðS?˜l ++ Ïà„å„åŒóX5r.9rº”³hÂÚ®` @jž2@—š5E­€üXB° + ÌÍVø:‘—ÐðybçÜ‘ ++b ++º Ûƒæ=:¿Ef ++° ÆQKXŠ®ÂØ´ x¤(nEÜbE ++Ì@)0€Z ïü0X±XO0šåÙ_šB²õp²~PåUz´: ++Nš ++0B¶#³°Õ#¬ÊÈ_8¬@ݼ_À œ!XN–X ¬O†å0d øéúØdæ Àd_¢B¸dÿU¸d4¼d~=º\¼\¸\hÈ @°A€9€&d–Ž „°ˆöVB†åD ++ ©Ì ++Ý  ÇL´hÆ  ++¨4.,,€,€åà—åਠé¨ɨÓ¨Äèì3ä ++Ä Ä¾èè3åñàé$Á4ÕÜÜ ++h xÜ(ÜP À ܼ´È еÐØÐÀxˆÐJÐW>0—Ž ++[Ž ++[XŽ [úZë”ÙËX=W †â…ÔX¾ ð;;*Nî)qÇéžcj¦g ++Oú¾– ++HŽ ++C’ÀëhS‚€IšÄù ++CªÆÖ ++ˆÖ ++\wÈ ++(\X" C:ÊLXL`LwÌ ++8ŠS˜t 9 €¬ ++0B¬"Gü,«ö,DBB ¨  L$à™åZá,*€Xâ ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH' PHl \&À$@ÿ/áÍdfÔÿÿê0(°3ÿ/áÍÿÿêjé > € éÄTãéŠåõ"àõ¦Ñ ++šåMù±@y,ùÿ à á^ã ++ 0žå“åàŠå I¢ É ÿ  JâàšåTãߤ%/¤;/m¤¤ D<A àžåpОå à“å°“å €°žå0’å à’åö`EâP…â,à™å^á›:p á‡åà\9 à‡ÿ°Šå0Šå ŠåpŠåQ¢<5í°šå0šå šåpšˆüt:°†å @†å á g¨ù¤qàå L,JW:(þ†åà†â à†åp†åà†âà†å†å&à ãà†åt@”ž0†å †å0 3hn 0†å ,#À0ÀQƒå ƒÀ ,,@,™„åà„â à„¨ñ à„åà„âà„å„åà„âà„å0„Ü#08ðšå%_2ÿ/áæáÖ (Æm_0ÿ/á¹¢0_1ÿ/á’…p7ÿ/á^ÿÿêÀ°"0ž¬"’°À(.pȲ¬ô/ à°¤$_†å °ð—Ð^†å°,‡3°tÿå ŠåpŠå 0Šå ¢U ¿ šåpšå 0šåü@ü0ü0ü^ †å pÐü Xü À_‚å ‚ü70ü ü „æèÖ¬Æü*r°P;ÿ/áb _<ÿ/áU_GÿÿêTŒ*©Œ. þä <úYhŠÂÜò ++ÊÂÆÐVÌäÊÊZÒÈæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ>$ÊØæÊ èÞà L" ++$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`ZbP²²?81Ó ÆÐêÜÖæ  ++ ++>ã  ++0óóìÒÞØÂèÒÞÜZæêÄÌÞäÚ  LLØÊðÒÆÂØð  L2HÚÂÖÊZäÊÆÞÚàÒØÊZÆÞÜÈÒE'ó LÒ^ÞZäÊÂÈZÊääÞä~„ LL× L$ÚÊææÂÎS7° L LÜÞ܃èÒÜêÂÄØÊö L(êÜÈÊÌÒÜÊÈØ@ò LJÒÚàØÊÚÊÜèõqäÊæèäÒÆ 3q L Dí®ÌìâÈÞÊæZÜÞèZÊðÒæèÛ0 L"<+ ++\Q" L*Zæ“ ++D¿ Ú %ú<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnp L$<¹RàäÞèÊêµy$ L&.,IÜÂÚÊ%& L((LM"Ï( L*(ÂææÊäNó* L,LÜÞZÜÂÜæp, L.Zq. L08‘ÖÜÞZÒÜÌÒÜÒèÒÊæStp0 L26•±ÒÜìÂØÒÈZàÞæ  ++m®2 L4îÐÞXt4 L6.S= %ä6 L8îÂäÜÒÜÎÔ8 L:LæÞêäÆŠp: L<•„SZàÞäèW< L>l‰ÊÜÆÞÈÒÜÎlv> L@,l"ÒæFCÞÜØò$q@ LB0Is&yB LD D LF*H½#}F LHÁ¾H LJHæäÆ5•J LLHLYrL LN&3 ;!qN LP t}P LR*¨¥¤R LTLîÐ=ST LVú * qV LX$, ™ŒX LZL8Z L\8  ++xs\ L^$DZRƒ^ L`Lõu` Lb&&Cub Ld>!ý-€d LfL7‰f Lh4"¡uh Lj"Zª´j Ll ++ÎêÂäÇul Lnœ‹n Lp0ÕtŸp LÎbjrä ++ ld/Bt'2˜nr LrLæt r ¼ÁàäÊÈÒÆÂèÊ~@\\c ++!p`7Ž7b75/Œ7f7†7h£!j5!l¡„7nl!pl‚7rl /r`5!!/rd5!€7/|7!/rl5!!/rp5!/z7/l` ?l`b5!d5!x7v7j£!l5!n5!p5!. !lb/t4b:/l`: Òov /3lbdVbV hV?x /3lbfVdV jV?z /3lbhVfV lVfV jVhV nV?| / lb* 2~"˜ Q ~uju pu?€ /3lbnVlV rV?‚ /#lb³ /lnV ++#n`V?„ /3lbrVpV bV?† / ld^ 2ˆ"´ wSˆ LŠžº ŠŒc ++ • ++OŒ /#ld±n± *nfV/ #ld±n± n±?Ž /#ld±n± n±? / lda ƒ’ ++HLæäÆkS’ L”B ³ u” L–$Y È W– L˜‚ ÂØ= òæ v˜ LšÜ F|š Lœ"{¢ zœ Lž$ Zƒž L L/ˆ  L¢ L \¢ L¤bµ0r¤ L¦R0Ê7v¦ L¨,¬î$T¨ Lª“ #qª L¬# ++ÜЬ L®$ÈÊÄêÎZGðÆÊà:|® L°*XÌT° L²€ yÇq² L´œDîäÒèöz´ L¶@F–.W¶ L¸_æ !…¸ LºLYº L¼L=r¼ L¾8}wZæòæèÊÚç4èòା LÀ0L%&vÀ LÂ&B„ÒääÒèÂÜè7u LÄ ++ ++ÛPÄ LÆ™H~Æ LÈ&ä6ŒÈ LÊL÷SÊ LÌmˆ Ì LÎ4ofÎ LÐ(I"tÐ LÒ,- äÒ LÔLæÊäÒÞêSÔ LÖ: ¨|Ö LØ(½%èÂìØ LÚ*L[#SÚ LÜK"ÈÊÅ qÜ LÞ6„U)SÞ Là­ ö$.â{Ü&uâ Lä(ÒÓ¶ä Læ,ÄÂæÊœtZÐÂÜÈØÊ$}æ Lè$rö…è LêLˆXê Lì” ,Wì Lîõ/ÈÊõwî Lð0— ÒÚ™sÊäZàÂèÐ&Xð Lò= +++&~ò Lô&aÊô Lö6LB)Sö Lø£ Å$Sø Lú¸ Ì #‰ú LüLù}ü Lþ$® þ05_Å :Ĥ)Êܤ 3*±ª{ L"æy˜>ê ,  ++¾ Ë  ++> .±DZÆÐÂ"  '>&DØô L LèÞàõ"ÌðÈÌôèÐdâfÐppìÈZÂS80qÖÊòØè@Úêè)7~ ì"íB@Tû T~$p±@ZÂÜòœÓ  HæóÈÒæàÂèÆÐXB$HÒÈÊÜèÒÌÒÊä~‘0DI474*#[€¸…ÿ&à L(  ,ÌÒðÊÈ„`1 6 32$0æòÚ\æ8R ++ÚÂäÖ’ØÂÄÊØ^àØJ˜ô ++ .¾0ìÂäÆØÂêæÊb ñd2Äb4Äd16c1 ØÞ¾xû$Â`ìäÆÊÈÖìðîÄÜæòìZ`8 1@ÄÒÜw& ÛZØÊìÊØP "ÞTØÂÆÊÈAe’_ $U" ØP$—&eá L(PB 8 +P8²"%P‘* ØÂÚÄÈÂÐI#`1*X7A< Hý07 ++hBP ++(58hS$:¡â,.0 áÊbÊd246ùûU 6W"¨]X¸y8:P0:O:O:?<G Gð@B`8j> ++B(°L *HèäÂÜæ±CÊäZ|ØA’(l…0l ++ñ L@HæÆZàêèZÆèÊHr°²B ++B(#)ª,e¸ð!4B H  L$à™åZáà*€XâÑ ++Ÿåê f Šâ`ðp–åàâàŠå@ ã ð– u,O JâP-ÅP04W ƒâà`ø à‚å,°™å Uá˜*°Kâ,°‰å ‹å(O àƒåH€H4hH4PH48H4 H4H ˆ>@ ãðšåD@1ÿ/á@OðÿÿêØÀ¨x@`ÿÿêà Ð&À$@ÿ/á*Ø L,÷23ÿ/áÿÿêNjLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðhZÂP ‚00 Lð B „TãbZßG ++åŠå ¯¯¢m ˆ  JâšåL"@P@µHŽ@šå á?ýHõ à‘å^ã ++0Žâ 0å ‘«…>0Žçs ¬5Š Ð *…ˆ@šåŒ¦÷Ÿ Dõ’*ÆæìntäÊÆÞäÈZèòàÊZÜÂÚÊXB$ Fxòð%@@B´8‚8ÈÒæàØÂòXBLHB`8" ++(B(sL  dõîäÒèÊäX$ÆÞÚàÞêÜÈZmñ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldnP››DÁ ++ÌØÈð ÜÊÜèæ æÆÐÊÚÊZÞÄÔÊÆè ++ËDËX ++ ðÊ@¾Í ºOŠå¶q²¶Ošåéžt ++b *Fx×@×`|B´‚b8ú ++ e` X¢V>(H¿~ B ˜ & ìðTã àâ^ãø)09“SáÊÒ ì@rÏLPB0 <˜Z›¢?@ :' ++¬ˆO@å€8b|EMi ±&P $‚Xˆ(  áø‘0âSã ++ ’åÐ ++âQãŒ!0“÷ ++ ++SãúÿÿàL’LH@ á Ù –Í æ´¨(¨O& ã= *=p0 á&SØ ++ à“å&^p1@“pú`EâP…â,à™å^á:@4rà„å0„  P2ÿ/áóÑ 0+±0ö šåÇÿÿêZ¨8 *üæ@Òæ@ÜÞè@Â-ð ++HÞÞàæ ++0Bü8B ˜ ò_TãLò4òòPò.òòNZ>’ö ÙˆNJÎÎc „å  nö¶– A H¦oÊ(§ ++‚ ++xBP38Bº8‡Q€ ++0NEz×–"æÒÚàØÊ+H>ð =7óåå2@’G›,›o&à ã àŸõŸ5Ž €ŽÀNO Fü ++YY> YR>Š23R” ŽE&»¡ZàäÊÈÒÆÂèÊ   ä@|¬ ä ++sä ++d ++Œ à ++à ++PTãFD+@šðThdd/ ádÑdOçÿÿL‘l Aœ ++›@šåÒÿÿêÍ6Ÿà„åàšåÙòà¸j õjH †Ux&’".E ³ÈÊæÆäÒàèÞä~L ˜(H$$'càÂäÊÜè"ò ( Xüæ@ÈÞÊ–I€ÄÊ@Â@æêÄ5W@ÞÌ@LÊAPw öšPB P ©cÓ /—å…Z…T…M…G8!à#„B ++0 á3$`t0“å —åF€“åSá^€ñ¯éÿÿpŠåà} apšåàš¼-±à“å0—å ü”iàžå^U ä œ^œu …¥êâ`B þ L ++1P(82 D±K@rŠ f  ++Š û6&$ÛÂÆÆÊææÞäú*ú/0 - ù¥ýuýfýÝ  Å™HýdÕdý&_ @Šå€¢EW Jâ ýý ýýÞð$< *,‹„8š"ì%$ØX&(ª0¢*ªÿ, ø 8ÎÊÜÊäÂèÊÈZvÆx°  ʨ Y¨ S¨ @¨ :æ’º)nó 0žå .&Â`åQÆ‚ ++°â[x!‘&Qx1 àž— 1p—šAð—åÎ_ Šå àR!RÒ° šå àšå×ÿÿê?àŠ\ ++8%àN áÔ¢ñ¢O šåê§ò(Z,@.5 ++o0 fÜ ++?2èÐÊ5ðäÊàäÊæÊÜèÊÈ@Äò@üæú ++€@.0 "ˆr 2ú,B# ++HÔ2k>*k¸ /¬G R ++B("[~,ݤö,XBL P  L$à™åZáa*€XâR ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH/ TT½T˜!+˜? á</=Ô PÈl \&À$@ÿ/á¡dfŸÿÿê0(°3ÿ/á˜ÿÿê$j½ H ° ½„Tã¯Å"§Åf– ++E_Šåõ­’u1¬šåTã@-÷ à”å0”å0Šå 0žåàžåàŠå à“å0“å ”àŠåà“å ÏàžåàŠåšå™¢ü€ Jâ@Šå¨ @‚Y ?ö  Jâ`EâP…â,à™å^áA:@†å&à ã à†åàTˆ$àŠå(`Šå H ã ˆ ˆáˆˆñ : áàšåà€åà€â à€å@€œHà€åè_Šå è|*]|è2 ”ì<°žå4Qê: ¨ ++0@L á0‘Ù:0 á4lƒå ƒåË$8p áP‘à‡åà‡â Sšåà‡ Š‡åàšå(àœ a Šå °Š¨_pŠå$,ô¢¬‰$$,í šå °šå0šåpš ˜¸¸Qå @,(,Jˆ:(`†åà†â8›0†åà†âTò à†åà†âà†åp†å à†â#à†å'´+t0t_h:¤W€[ ‡å,GôÛàå°åàšå˜„ „¢   ˜|î :p†å @†å Ô _0†å $È@ô¨„å 0„åðšåèP2ÿ/áó±dP1ÿ/áæ (Ù(²_0ÿ/á¢(‘(q(a.Q .ßþD¸þÿêPÙH.½HYPR @ðdz ++¾ÂÜò ÊÂÆÐó L( HæòÜèÂðZÈÒæàÂèÆÐXB$(ôÊääÞäÈ(ÎÊÜÊäÂèÊZèÊÚàÞäÂäÒÊæ0#.c|ÈÂèêÚñ"P <üæ@Òæ@ÜÞè@Â@ÆÞÜÈÒèÒÞÜ@ÞÌ@èòàÊ@æÒÚàØʈûØÂò ÆÎÞæ`ÆrêÌÒbäâZÊèPÌÚèðÌÈP ‚'ð6 ++ÌØÈ ++ìÂäÒÂÜè æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ÈÒäÊÆèÒìÊ  LN*] ®hA ++4K) @@` üÂ{ß ÌÞäÚÂè Bü! Ãü  HÈÞÌÚèWPxÌZÞÌ$Šä€,—çþ$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂ: ++3ÜÆÊðàäÊææÒÞÜæfîäÂàê@MõDŒHàäÊÈÒÆÂèÊ~ L.èÞà L$$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Zb¨¨?81— ÆÐêÜÖæ ©™>ÿ L "ÌÒðÊÈr`r  31m—æòÚÜÂÚÊæR ++ÚÂäÖ’ØÂÄÊØ^àØ•að HÂÆÆÊææÞäÚæÎÊÁØÞÆÂØZGû$Â`ìäÆÊÈÖìðîÄÜæòìZ`Ç8 1ŦÄÒÜÈÒÜÎ ªwØÊìÊØ ÃIb "á°ÆÊÈZØÊðÒÆÂØc " ­Z€æêàÊäZöÆÞÜæèäêÆèÞärÌÒÊØÈ1ýV 8 k $B$ùª 0ð`)ã  ++&0 PìÒÞØ–@Zæêĺó& L(Lõ( L*2HÚÂÖÊZäÊÆÞÚàÒØÊZÛ'ò* L,Ò^ÞZäÊÂÈh~„, L.L×. L0$ÚÊææÂÎS7°0 L2 LÜÞ܃èÒÜêÂÄØÊö2 L4(êÜÈÊÌÒÜÊÈØ@q4 L6JÞBÚÊÜèõqäÊæèäÒÆ 3q6 L8Dí®ÌìâÈÞÊæZÜÞèZÊðÒæèÛ08 L:<+ ++\Q: L*Zq D¿" Ú%ú<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnp L<<¹RàäÞèÊêµy< L>.,» %> L@(LM"Ï@ LB(ÂææÊäNóB LDLÜÞZÜÂÜæpD LFZqF LH8‘ÖÜÞZÒÜÌÒÜÒèÒÊæStpH LJ6•±ÒÜìÂØÒÈZàÞæ  ++m®J LLîÐÞXtL LN.S= %äN LPîÂäÜÒÜÎÔP LRLæÞêäÆŠpR LT•„SZàÞäèWT LVl@ÊÜÆÞµ lvV LX,l"ÒæFCÞÜØò$qX LZ0Is&yZ L\ \ L^*H½#}^ L`Á¾` LbHæäÆ5•b LdHLYrd Lf&3 ;!qf Lh t}h Lj*¨¥¤j LlLîÐ=Sl Lnú * qn Lp$, ™FLrL8r Lt8  ++xst Lv$DZRƒv LxLõux Lz&&Cuz L|>!ý-‚| L~L– ~ L€4"¡u€ L‚"Zª´‚ L„ ++ÎêÂäÇu„ L†œ‹† Lˆ0ÕtŸˆ LÎbjrä ++ ld/BŽ'2n¸HŠLætqŠ LŒ@QªQä X ++!p`7¨7b75ö/¦7f7 7h£!j5!l¡ž7nl!plœ7rl /r`5!!/rd5!š7/–7!/rl5!!/rp5!/”7/l` ?l`b5!d5!’77j£!l5!n5!p5!. !lb/Ž4b//l`/ Òo/3lbdVbV hV?’/3lbfVdV jV?”/3lbhVfV lVfV jVhV nV?–/ lb  ++2˜" F ˜uju pu?š/3lbnVlV rV?œ/3lbpVnV ++#n`V?ž/3lbrVpV bV? / ld» 2¢"© wS¢ L¤“¯ ¤ŒX ++ Š ++O¦/#ld±n± *nfV/ #ld±n± n±?¨/#ld±n± n±?ª/ ldÚ ƒ¬ ++HLæäÆkS¬ L®7 ¨ u® L°$N ½ W° L²w ÂØ2 òvæ’ v² L´Ñ ;|´ L¶"p— z¶ L¸$þZƒ¸ LºL$ˆº L¼ L \¼ L¾Wµ0r¾ LÀR0¿7vÀ LÂ,¬ã$T LĈ #qÄ LÆ# ++ÜÐÆ LÈ$ÈÊÄêÎZvGðÆÊà:|È LÊ*XÁTÊ LÌ€ yÇqÌ LÎœDîäÒèözÎ LÐ@F‹.WÐ LÒTæ !…Ò LÔLNÔ LÖL=rÖ LØ8rwZæòæèÊÚç%*Ø LÚ0L&vÚ LÜ&B„ÒääÒèÂÜè,uÜ LÞ ++ ++ÛPÞ LàŽH~à Lâ&Ù6Œâ LäL÷Sä Læbˆ æ Lè4dfè Lê(I"tê Lì,ö" äì LîLæÊäÒÞêSî Lð: ¨|ð Lò(½%èÂìò Lô*LP#Sô Lö@"Èʺ qö Lø6„* ‰Sø Lú­ ë$Sú Lü{Ñ&uü Lþ(ÒÓÆþ L,ÄÂæÊtZÐÂÜÈØÊ% &=$uù "EL› 3 "ó/ÈÊó '7 ++0—Ò‰„èÊäZàÂèÐ( ++( J ++8( (>&eÖ#O6LS++¶ Í&&Í á %%IL=$Ç& "5rÐ:Þ¾)Êܾ 3 *ËÄ{ L"戙>" » $Ø å $>&.¼EZÆÐÂ3¡N(&UãQ( L L†t*èÞààý"ÌðÈÌôèÐdâfÐppìÈ,80eGÖÊò @Úêè8~d!*eRJT T“'  ’ò, àÂäÊÜè.`D ´ÀB ð 2€Tã‰"‰" ‰"ñà„â à„å„åà„âà„å„ù##à¥" e!.ìÿe!4‚«3ÒÚå®ó ++hBP(BL@FHÚÂà `àæàP$]â!äÈZ!H!sÜÞÜŠ!¦ L   Ð2 ØÂÚÄÈÂvÔ0 LÞäŒÀÂÜÈB(HLGÞêÜÈ–' ++¡0àŒ+?@<+ZQÜÊÜèæ5˜X˜R4 ܈XB €ÄL©Á&"Ÿå& ++ÄÓƒåàƒâ àƒåƒ½&]ƒå —Í$Š‰( ­%Ù$'zÙ$ mŒL ƒå|/]•&&à¡&30†„Y%TCT4Ô)Ôì+‚$‚M(€3 †ˆ<\ˆ,/õ,åý'n †åp,"Õ * ++À]€å p€À/Ål l¬ T«T µ(l#l‹lLkl'!)ì"GÌ/ ":Ì ++àl‚å ‚å /*L# ¬|0| !)ì½(Ï!)¿p7!) ¢ŽnN4 $(.ôþ.àþðжœ5)Œdo<Zq)b R ++âêÞèµ€•˜(JHÞÞàþ1208x$4$T:?%Ú  ˆDE ¦Xú÷>ÌÆÈä6ØæâPU`ŸY8ÒÌ*‹<ØÊèìQ0gWÂä6cü84 ++ÜêØØ~/ ?:><'?>†6@> „B=_+6ØæÊz, Lô7 ó˜óW ++/ ++(cÏ ++“8D0FÎ ++ÐÛa ++ÄÊÎÒܨ0Bx(óHB`8’H ++ B(ŠÀ T*HèäÂÜæHCÊäZ|Þ(œ@ ·(þ'° PJPóVHæÆZàêèZÆèÊX’L ++äläæ• ÷ "ìÆnàÒæÐÎÚäÐ`râÚZÂRN ÷"ÞòÄhjrêÊbÌàÐÌðh< N*3ä,þN  PäÆÈ"âÐ`òôÐjâòäðÚôdØZÂŒ*(‚*GäèÈr WàäÆÈ|*qIÞÆÞØ{* PQ0R 3L †a£èÒÚÊZìÂØêÊVL Taä`ä_ä^CVË°ZL ++B(#4,¾öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñ0ðÿÿêB*ÚÂÖÊZæÒÚàØÊZÆÞÜÈÒèÒÞÜ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnp ±/P >Æ—Tã@¾ŽÀõÿ/áRLC÷"ÞòÄhjrêÊbÌàÐÌðhZÂP ‚.0 Lð  BLPB0 ++0B¬"ä, ¨ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañG ++*ÚÂÖÊZæÒÚàØÊZÆÞÜÈÒèÒÞÜ  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P» » 31‘‘æòÚÜÂÚÊæ•¥R ++ÚÂäÖ’ØÂÄÊØ^àØ»a@ ++ ++?ÇðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnp L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#°,böB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñ,ðÿÿêB"æÒÚàØÊZÆÞÜÈÒèÒÞÜ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldj ­> ; ¿ˆTãó ++0âSã0åSá£ñ âRã0“ Ó ++Sãúÿÿ(0&ÀlÕÿ/áRL÷"ÞòÄhjrêÊbÌàÐÌðhZÂP ‚.0 Lð ØBLPB0 ++0B¬"`,Hð!*B Ø  L$à™åZáR*€XâC ++Ÿåê  f Šâ`ðp–åàâàŠå@ ã ð– ,o JâDDÅDO á<+<_ áÔ PÈl \&À$@ÿ/áedf®ÿÿê0(ú93ÿ/á§ÿÿê jæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañI ++"æÒÚàØÊZÆÞÜÈÒèÒÞÜ~  Ú"èÞà L $ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P½ ½ 31“‘æòÚÜÂÚÊæ—§R ++ÚÂäÖ’ØÂÄÊØ^àؽa@ ++ ++>Éðt<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldj L ÎØÞÄÂØ&TæòæèÊÚT (HæÆZàêèZÆèÊX ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLÚÊææ#ñÄîàèòÆÖÎÒÈÎÜæÒÐðZÂ#…L°õ"ÞòÄhjrêÊbÌàÐÌðhZÂKK/ A""5 z1Ei7@ Õþ äÆÈ"âÐ`òôÐjâòäðÚôdØZÂÊ(ÀGäèÈ»WàäÆȺ™àäÞèÞÆÞعP° €L .ÚÂÖÅó ÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎà "f$# " ++öð&(HB`8â ++B(# Z, ZöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB,ÚÂÖÊZÚÊææÂÎÊZÆÞÜÈÒèÒÞÜ ô/¸   øTã`EâP…â,à™å^á:@ á©à„å„å©ùP3ÿ/áó¥Àóÿ/á‚L~õ$ÄîàèòÆÖÎÒÈÎÜæÒÐðZÂPLœð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L!""wà ++ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Eó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbb|8 5rHZ0âSãŠÃ0åSáñ âRã0“ Ó ++Sãúÿÿ(0 švRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbb L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbjr<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnr  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Ä, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbjr<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjld  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð)nr L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#r,òöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêÿØÿÿêB$ÚÊææÂÎÊZÆÞÜÈÒèÒÞÜ~ B  @  öTã$à™åZáy*€Xâh ++Šå Šâ`xòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS Lbý; J˜àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè¸0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¸P3ÿ/ဠ@÷7ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbbXB$8(HÆÞÚàÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ö " ++ B((BLPB0  ++"Sü~   š³‘‚šËmËj\š&DLˆõD@à áã-÷ë_ ŠåX’MW§ Jâàšå ¯P @žåãS LD/à±dÓT,L šåp4hÀw mwoshsS,’'50 ++ ++XŸ@Îbjr” RjnrP9õ ++z  ++ Lüæ@Òæ@ÜÞè@Â@¥@ÞÌ@èòàÊ@L5° ++HÞÞàæ0;  8H„\ò ++„À ++0B¬ ++0B¬" ,<ö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðf3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LîÂäÜÒÜÎ$ÄîèÂÒhbÈÎÂîîfÌêæZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L)"5{"÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØj j(ñ' ++ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++àäÆÈ ‘àäÞèÞÆÞØŠ@ ++d°  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð£÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄðð ++31DZÊðàäÊææÒÞÜÉíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`} ++3‡T‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(#®, zöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêBÚÂÖÊZîÂäÜÒÜÎ ê)P õ—Tã@¥uÀóÿ/áRLCð)$ÄîèÂÒhbÈÎÂîîfÌêæZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L*"w ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlb`8 5 PTã“ó ++0âSã0åSá§ñ âRã0“ Ó ++Sãúÿÿ(0rFØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlb` L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¢, ìöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@õðÿÿêBîÂäÜÒÜÎ~ B  @  ÷Tã$à™åZáy*€Xâh ++Šå Šâ`´òp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSôLbý; JlàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ŒP3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlb`XB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" ,<ö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðf3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØrZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L)"5{"÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØj j(ñ' ++ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++àäÆÈ ‘àäÞèÞÆÞØŠ@ ++d°  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð£÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄðð ++31DZÊðàäÊææÒÞÜÉíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`} ++3‡T‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(#º, ¢öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB,ÚÂÖÊZæÊäÒÞêæZÆÞÜÈÒèÒÞÜ ô/P  —Tã@¹‰Àóÿ/áRLMõ$ÄîìôêìädlæjpêfØrZÂPLkð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L*"w ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`r 8 5 PTã§ó ++0âSã0åSá»ñ âRã0“ Ó ++Sãúÿÿ(0rFØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`r L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¨,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêB$æÊäÒÞêæZÆÞÜÈÒèÒÞÜ~ B  @  ¤÷Tã$à™åZáy*€Xâh ++Šå Šâ`Èòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J€àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ P3ÿ/ဠ@÷5ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`rXB$8(HÆÞÚàÞêÜÈu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" x,Úö* B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðc3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎZÂPLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr(óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  3À ÷   äÆÈ"âÐ`òôÐjâòäðÚôd؈ f(ñ' ++ÌØÈäèÈ  ++æÆÐÊÚÊZÞÄÔÊÆè ++ ++àäÆÈ  ++‘àäÞèÞÆÞØŠ@ d´  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð¯÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄüü ++31Ó±ÊðàäÊææÒÞÜÕùBîäÂàùåMþ)èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`‰ ++3“`‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ…©ØÂÄÊØ^àØæ†a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# , ôö ++B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêBÚÂÖÊZÊääÞä è'P ñ—Tã@¡qÀñÿ/áR LAð($ÄîòÞlÚÒæðÄÌÖÚäÈÎZÂPLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr&óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ºó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`pU8 5 WPTãWÐó ++0âSã0åSáäñ âRã0“ Ó ++Sãúÿÿ(0³FØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`p L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ž, äöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ó ðÿÿêB ÊääÞä~ B  @  Œ÷Tã$à™åZáy*€Xâh ++Šå Šâ`°òp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSðLbý; JhàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ˆP3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`pXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" €,êö* B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðg3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLìÒÞØÂèÒÞÜ$ÄîbÊÒÆrÒÜèÞîÊÊhÚZÂPLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr(ðLÆÞÜÈÒQó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  7ÄD÷   äÆÈ"âÐ`òôÐjâòäðÚôdØŒ j(ñ' ++ÌØÈäèÈ  ++æÆÐÊÚÊZÞÄÔÊÆè ++ ++àäÆÈ  ++‘àäÞèÞÆÞØŠ@ d´  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð¯÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄüü ++31Ó±ÊðàäÊææÒÞÜÕùBîäÂàùåMþ)èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`‰ ++3“`‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ…©ØÂÄÊØ^àØæ†a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# , ö ++B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@Oðÿÿêñ ++ØÿÿêBÚÂÖÊZìÒÞØÂèÒÞÜ ì+P ù—Tã@©yÀõÿ/áRLEð($ÄîbÊÒÆrÒÜèÞîÊÊhÚZÂPLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr&àLÆÞÜÈÒMó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B¾Bó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`na8 5 _PTã_àó ++0âSã0åSáôñ âRã0“ Ó ++Sãúÿÿ(0»FØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`n L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¢, ôöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@÷ðÿÿêBìÒÞØÂèÒÞÜ~ B  @  ”÷Tã$à™åZáy*€Xâh ++Šå Šâ`¸òp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSøLbý; JpàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜P3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`nXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" Ü,˜ö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(óT3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLÂææÊäèÒÞÜ$ÄîffèfôpÊÄðnjdìæZÂPLìÒÞØÂ*àbÊÒÆrÒÜèÞîÊÊhÚ*ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB"7$÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ® l(ñ' ++ ++ÌØÈäèÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++àäÆÈ  ‘àäÞèÞÆÞØŠ@d´   !ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð»÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ß±ÊðàäÊææÒÞÜáBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`• ++3Ÿl‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# h, Îö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêðØÿÿêB0ÚÂÖÊZÂææÊäèÒÞÜZìÒÞØ ++! ö/P " —Tã@½Àõÿ/áR ++LOõ$ÄîffèfôpÊÄðnjdìæZÂPLmð$ÄîbÊÒÆrÒÜèÞîÊÊhÚ(õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B""ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`l´8 5 ¨PTã¨=ó ++0âSã0åSáQñ âRã0“ Ó ++Sãúÿÿ(0F ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`l L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¶,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ð ðÿÿêB(ÂææÊäèÒÞÜZìÒÞØ ++ß~ B  @ ! ¨÷Tã$à™åZáy*€Xâh ++Šå Šâ`Ìòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS Lbý; J„àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¤P3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`lXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" 6,rö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðh3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LÒääÒèÂÜèæ$ÄîlæjêâðhènÔðâÚòZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L!""7}å ++ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++O÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØ— —(ñ ++äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@ ++P°  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðõ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄÜÜ ++31ǸÊðàäÊææÒÞÜíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`i ++3s—æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# ^, nöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB0ÚÂÖÊZÒääÒèÂÜèæZÆÞÜÈÒèÒÞÜ ö/¸ "  øTã`EâP…â,à™å^á:@ á­à„å„å­ýP3ÿ/áó©Àõÿ/á‚L€õ$ÄîlæjêâðhènÔðâÚòZÂPLžð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L!""yÅ ++ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Ió5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`j„8 5xH`0âSãÃ0åSá!ñ âRã0“ Ó ++Sãúÿÿ(0  vRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`j L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbl`<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbd  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbl`<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjlf  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbd L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#v,öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêÿØÿÿêB(ÒääÒèÂÜèæZÆÞÜÈÒèÒÞÜ~ B  @ ! öTã$à™åZáy*€Xâh ++Šå Šâ`|òp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS$Lbý; JœàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè¼0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¼P3ÿ/ဠ@÷7ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`jXB$8(HÆÞÚàÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ö " ++ B((BLPB0  ++&Sþ   š·‘‚šÏmÏj\š&DLˆõD@à áç-ûï_ ŠåX’MW§ Jâàšå ³P @žåãW LD/à±dÓT,L šåp4hÀ{ m{owhwS,’+50 ++ ++XŸ@Îbl`˜ ++BbdP=õ ++z  ++ Püæ@Òæ@ÜÞè@Â@§@ÞÌ@èòàÊ@L9° ++HÞÞàæ0=  8HŠ\ò ++ŠÀ ++0B¬ ++0B¬" *,Nö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðb3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LîÐÞ$ÄîrÒÐØÐÜìÆÎìàÊÈlZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L!""1wó ++ÌØÈîÐÞ æÆÐÊÚÊZÞÄÔÊÆè ++C÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØ‹ ‹(ñ ++äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@ ++P°  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðõ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄÜÜ ++31ǸÊðàäÊææÒÞÜíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`i ++3s—æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# P, 2öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB$ÚÂÖÊZîÐÞZÆÞÜÈÒèÒÞÜ ð/¸  øTã`EâP…â,à™å^á:@ á¡à„å„å¡ñP3ÿ/áóÀõ"ÿ/á‚LîÐÞ$ÄîrÒÐØÐÜìÆÎìàÊÈlZÂPL˜ð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L!""só ++ÌØÈîÐÞ æÆÐÊÚÊZÞÄÔÊÆè ++=ó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`hl8 5fHN0âSã~Ã0åSáñ âRã0“ Ó ++Sãúÿÿ(0 ŽvRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`h L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎblb<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbf  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îblb<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjlh  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbf L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#f,ÊöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêûØÿÿêBîÐÞZÆÞÜÈÒèÒÞÜ~ B  @  üöTã$à™åZáy*€Xâh ++Šå Šâ`pòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; JàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè°0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜°P3ÿ/ဠ@÷7ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`hXB$8(HÆÞÚàÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ö " ++ B((BLPB0  ++S1îÐÞz   š« ‘ ‚ šÃmÃj\š&DLˆõD@à áÛ-ïã_ ŠåX’MW§ Jâàšå §P @žåãK LD/àû±ûdÓT,L šåp 4hÀo mookhkS,’50 ++ ++XŸ@ÎblbŒ ++BbfP1õ ++z  ++ Düæ@Òæ@ÜÞè@Â@ ++¡@ÞÌ@èòàÊ@L-° ++HÞÞàæ07  8Hx\ò ++xÀ ++0B¬ ++0B¬" ð,°ö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðo3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LÜÞÜZÆÞÜèÒÜêÂÄØÊ$ÄðÄnèÄpÈØêànÎbjÊZÂPLìÒÞØÂèÒÞÜ$ÄîbÊÒÆrÒÜèÞîÊÊhÚ*ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB"=*÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ´ r(ñ' ++ ++ÌØÈäèÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++àäÆÈ  ‘àäÞèÞÆÞØŠ@d´   !ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð»÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ß±ÊðàäÊææÒÞÜáBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`• ++3Ÿl‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# v, þö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB<ÚÂÖÊZÜÞÜZÆÞÜèÒÜêÂÄØÊZìÒÞØÂèÒÞÜ ü/P ( —Tã@É™Àûÿ/áR ++ LUõ$ÄðÄnèÄpÈØêànÎbjÊZÂPLsð$ÄîbÊÒÆrÒÜèÞîÊÊhÚ(õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B" (ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`fÆ8 5 ´PTã´Uó ++0âSã0åSáiñ âRã0“ Ó ++Sãúÿÿ(0F ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`f L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# Â,4öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿ ðÿÿêB4ÜÞÜZÆÞÜèÒÜêÂÄØÊZìÒÞØÂèÒÞÜ~ B  @ ' ´÷Tã$à™åZáy*€Xâh ++Šå Šâ`Øòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; JàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜°P3ÿ/ဠ@ð5ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`fXB$8(HÆÞÚàÞêÜÈ!ÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬",Üö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ð;3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂ6LÒÚàØÊÚÊÜèÂèÒÞÜZäÊæèäÒÆ ò$ÄðÊîhdòfÆÆôÒpàîØZÂPLìÒÞØÂ*ðîbÊÒÆrÒÜèÞîÊÊhÚ*ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB"?  5÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ¿ }(ñ' ++ ++ÌØÈäèÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++àäÆÈ  ‘àäÞèÞÆÞØŠ@d´   !ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð»÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ß±ÊðàäÊææÒÞÜáBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`• ++3Ÿl‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# ˆ,Vö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêBRÚÂÖÊZÒÚàØÊÚÊÜèÂèÒÞÜZäÊæèäÒÆ AìÒÞØ! /P 3/—Tã@߯Àÿÿ/áR ++6L`õ$ÄðÊîhdòfÆÆôÒpàîØZÂPL~ð$ÄîbÊÒÆrÒÜèÞîÊÊhÚ(õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B" 3ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`dç8 5 ÊPTãÊó ++0âSã0åSá•ñ âRã0“ Ó ++Sãúÿÿ(0&F ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`d L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# Ò,`öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBJÒÚàØÊÚÊÜèÂèÒÞÜZäÊæèäÒÆ AìÒÞØß~ B  @ 2 Ê÷Tã$à™åZáy*€Xâh ++Šå Šâ`îòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS.Lbý; J¦àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ÆP3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`dXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" à,ö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðg3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLØÊðÒÆÂØ$ÄðÐÚÎèàædêpê`ÈÜæZÂPLìÒÞØÂèÒÞÜ$ÄîbÊÒÆrÒÜèÞîÊÊhÚ*ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB"5 "÷  äÆÈ"âÐ`òôÐjâòäðÚôdج j(ñ' ++ ++ÌØÈäèÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++àäÆÈ  ‘àäÞèÞÆÞØŠ@d´   !ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð»÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ß±ÊðàäÊææÒÞÜáBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`• ++3Ÿl‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# f, ¾ö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB,ÚÂÖÊZØÊðÒÆÂØZìÒÞØÂèÒÞÜ ô/P  —Tã@¹‰Àóÿ/áR ++LMõ$ÄðÐÚÎèàædêpê`ÈÜæZÂPLkð$ÄîbÊÒÆrÒÜèÞîÊÊhÚ(õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½BB ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`b®8 5 ¤PTã¤5ó ++0âSã0åSáIñ âRã0“ Ó ++Sãúÿÿ(0F ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`b L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ´,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêB$ØÊðÒÆÂØZìÒÞØÂèÒÞÜ~ B  @  ¤÷Tã$à™åZáy*€Xâh ++Šå Šâ`Èòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J€àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ P3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`bXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬",Öö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðf3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LæòÜèÂð$ÄðÖÄæÖÎÒèÈÐläbÊòZÂPLìÒÞØÂèÒÞÜ$ÄîbÊÒÆrÒÜèÞîÊÊhÚ*ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB""4 ò! ++ÌØÈÌÞäÚ  ++æÆÐÊÚÊZÞÄÔÊÆè ++ ++æêÄ"C ++Z÷  äÆÈ"âÐ`òôÐjâòäðÚôdØä ¢(1VAäèÈReBàäÆ‘àäÞèÞÆÞØv@P´   !ðL .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæé³ÊäZ|ÄÒÜÈÒÜÎ’> ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄôt3xèÊðàäÊææÒÞÜFîäÂàg@Mþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z` ++3‹—æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# D,žöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB*ÚÂÖÊZæòÜèÂðZìÒÞØÂèÒÞÜ ó/À  øTã`EâP…â,à™å^á:@ á§Áà„å„å „å«ûP3ÿ/áò§Àòÿ/á‚ Lõ$ÄðÖÄæÖÎÒèÈÐläbÊòZÂPLŸð$ÄîbÊÒÆrÒÜèÞîÊÊhÚ(õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B""ò! ++ÌØÈÌÞäÚ  ++æÆÐÊÚÊZÞÄÔÊÆè ++ ++æêÄ"C ++Xó5 ++8BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl``8 5 ˆTãþ0âSã.Ã0åSá¹ñ âRã0“ Ó ++Sãúÿÿ(0 :vRØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl`` L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbld<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbh  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbld<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjlj  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbh L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎblf<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbj  !@ - ¤ÁTã @ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îblf<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjll  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbj L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#,-ŽöB P  L0Ÿåê ƒâàø à‚å,°™å Uá8*°Kâ,°‰å ‹å(O àƒåH H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØþÀÿÿêB"æòÜèÂðZìÒÞØÂèÒÞÜ~ B  @  böTã$à™åZáy*€Xâh ++Šå Šâ`vòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS6Lbý; J®àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè¶0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ÎP3ÿ/ဠ@ñ=ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdl``XB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ü " ++ B((BLPB0  ++*ñQZÌÞäÚ   "š»‘‚šÓmÓj\š&DLˆõD@à áë-ÿó_ ŠåX’MW§ Jâàšå ·P @žåã[ LD/à ± dÓT,L šåp4hÀ mo{h{S,’/50 ++ ++XŸ@Îbldœ ++BbhPAõ ++z  ++ Jüæ@Òæ@ÜÞè@Â@‡¢@ÞÌ@èòàÊ@L%Ð  ++HÞÞàæ0:  8H‹_ò ++‹=0i5æêÄŽŽ%‘ÿÿ©‘f‘ j‘U W0 68ccc ++0B¬P0B¬" ä,˜ö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ði3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLêÜÈÊÌÒÜÊÈ$ÄðÚ`hÂlpÔìäÒÔÞjhZÂPLìÒÞØÂèÒÞÜ$ÄîbÊÒÆrÒÜèÞîÊÊhÚ*ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB"7$÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ® l(ñ' ++ ++ÌØÈäèÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++àäÆÈ  ‘àäÞèÞÆÞØŠ@d´   !ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð»÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ß±ÊðàäÊææÒÞÜáBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`• ++3Ÿl‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# j, Îö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB0ÚÂÖÊZêÜÈÊÌÒÜÊÈZìÒÞØÂèÒÞÜ ö/P " —Tã@½Àõÿ/áR ++LOõ$ÄðÚ`hÂlpÔìäÒÔÞjhZÂPLmð$ÄîbÊÒÆrÒÜèÞîÊÊhÚ(õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B""ó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrr´8 5 ¨PTã¨=ó ++0âSã0åSáQñ âRã0“ Ó ++Sãúÿÿ(0F ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrr L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¸,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêB(êÜÈÊÌÒÜÊÈZìÒÞØÂèÒÞÜ~ B  @ ! ¨÷Tã$à™åZáy*€Xâh ++Šå Šâ`Ìòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS Lbý; J„àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¤P3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrrXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" Ò,pö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ð_3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLÒ^Þ$ÄðàâÌbðòÂÈ`êÄÆðÆZÂP LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ&ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½1÷  äÆÈ"âÐ`òôÐjâòäðÚôdؤ b(ñ' ++ ++ÌØÈäèÈ  æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++àäÆÈ  ‘àäÞèÞÆÞØŠ@d´   !ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð»÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ß±ÊðàäÊææÒÞÜáBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`• ++3Ÿl‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# T, ~ö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@Oðÿÿêñ ++ØÿÿêBÚÂÖÊZÒ^ÞZÊääÞä ì+P ù—Tã@©yÀñ%ÿ/áR ++LÒ^Þ$ÄðàâÌbðòÂÈ`êÄÆðÆZÂP Lcð$ÄîòÞlÚÒæðÄÌÖÚäÈÎ$õLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ùó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrp–8 5 ”PTã”ó ++0âSã0åSá)ñ âRã0“ Ó ++Sãúÿÿ(0ðF ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrp L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¦, ôöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@÷ðÿÿêBÒ^ÞZÊääÞä~ B  @  ”÷Tã$à™åZáy*€Xâh ++Šå Šâ`¸òp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSøLbý; JpàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜P3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrpXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"6,ö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðM3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++LÒ^ÞZäÊÂÈ$ÄðæÌäæÞÜ`ìrjd`ÞÔZÂP)ð$ÄðàâÌbðòÂÈ`êÄÆðÆ$ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þ6 E#÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØÅ e(ñ' ++ ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ àäÆÈ ‘àäÞèÞÆÞØŠ@d´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðÇ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ë±ÊðàäÊææÒÞÜíBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`¡ ++3«x‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# ¬, öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB&ÚÂÖÊZÒ^ÞZäÊÂÈZÊääÞä ñ/P —Tã@³ƒÀôÿ/áR  ++LJð$ÄðæÌäæÞÜ`ìrjd`ÞÔZÂP'ð$ÄðàâÌbðòÂÈ`êÄÆðÆ"‘ L‰õ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ø;!ó/ ++  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrnâ8 5 ÛPTãÛfó ++0âSã0åSázñ âRã0“ Ó ++Sãúÿÿ(07F ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrn L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# °,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@üðÿÿêBÒ^ÞZäÊÂÈZÊääÞä~ B  @  ž÷Tã$à™åZáy*€Xâh ++Šå Šâ`Âòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; JzàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜šP3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrnXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"8,ö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðN3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++LÒ^ÞZîäÒèÊ$ÄðêhfÔÌÈäÊÔÐêÞÌàZÂP*ð$ÄðàâÌbðòÂÈ`êÄÆðÆ$ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þ7 F$÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØÆ f(ñ' ++ ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ àäÆÈ ‘àäÞèÞÆÞØŠ@d´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðÇ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ë±ÊðàäÊææÒÞÜíBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`¡ ++3«x‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# ®,(öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB(ÚÂÖÊZÒ^ÞZîäÒèÊZÊääÞä ò/P —Tã@µ…Àõÿ/áR  ++LKð$ÄðêhfÔÌÈäÊÔÐêÞÌàZÂP(ð$ÄðàâÌbðòÂÈ`êÄÆðÆ"‘ LŠõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ø|<"ó/ ++  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrlå8 5 ÝPTãÝjó ++0âSã0åSá~ñ âRã0“ Ó ++Sãúÿÿ(09F ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrl L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ², öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ýðÿÿêB Ò^ÞZîäÒèÊZÊääÞä~ B  @   ÷Tã$à™åZáy*€Xâh ++Šå Šâ`Äòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J|àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜œP3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrlXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"f,vö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðY3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++*LÒ^ÞZÒÜìÂØÒÈZàÞæÒèÒÞÜ$ÄððêÊrjfÐîæèÚÄlìZÂP5ð$ÄðàâÌbðòÂÈ`êÄÆðÆ$ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'±LÆÞÜÈ™ó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þ? Qä ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Y÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØû ›(ñ ++ äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@P´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ëÊðàäÊæærBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z` ++3——æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# d,:öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB>ÚÂÖÊZÒ^ÞZÒÜìÂØÒÈZàÞæÒèÒÞÜZÊääÞä ý/¸ ) øTã`EâP…â,à™å^á:@ á»à„å„å» P3ÿ/áó·Àÿÿ/á‚  ++*L‡ð$ÄððêÊrjfÐîæèÚÄlìZÂP3ð$ÄðàâÌbðòÂÈ`êÄÆðÆ"‘ LÆõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈ‘ó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹øGÄ ++ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Só5 ++ ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrjc8 5PH80âSãhÃ0åSáñ âRã0“ Ó ++Sãúÿÿ(0 xvR Øßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrj L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎblh<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbl  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îblh<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjln  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbl L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#ž,4öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@Oðÿÿêÿ!ØÿÿêB6Ò^ÞZÒÜìÂØÒÈZàÞæÒèÒÞÜZÊääÞä~ B  @ ( öTã$à™åZáy*€Xâh ++Šå Šâ`Šòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS2Lbý; JªàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áèÊ0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ÊP3ÿ/ဠ@ñ<ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrjXB$8(HÆÞÚàÞêÜÈZÆÞÜÈ}~ _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ð " ++ B((BLPB0  ++$ûêù   šµ‘‚šÍmÍj\š&DLˆõD@à áå-ùí_ ŠåX’MW§ Jâàšå ±P @žåãU LD/à±dÓT,+L šåp4hÀy myouhuS,’)50 ++ ++XŸ@Îblh– RlblP;õ ++z  ++ füæ@Òæ@ÜÞè@Â@¯@ÞÌ@èòàÊ@L<Ð  ++HÞÞàæ0H  8H“\ò ++“À ++0B¬ ++0B¬"V,Vö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðQ3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++LÒ^ÞZÌÒØÊÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðhZÂP-ð$ÄðàâÌbðòÂÈ`êÄÆðÆ$ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þ: Iä ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØó “(ñ ++ äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@P´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ë¸ÊðàäÊææÒÞÜBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z` ++3—@æòÚüæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# T,úöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB.ÚÂÖÊZÒ^ÞZÌÒØÊÜÂÚÊZÊääÞä õ/¸ !  øTã`EâP…â,à™å^á:@ á«à„å„å«ûP3ÿ/áó§Àøÿ/á‚  ++Lð$Äð`Ôâ`îæpÊbjÈôðhZÂP+ð$ÄðàâÌbðòÂÈ`êÄÆðÆ"‘ L¾õ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ø ++?Ä ++ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Kó5 ++ ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrhK8 5@H(0âSãXÃ0åSáçñ âRã0“ Ó ++Sãúÿÿ(0 hvR Øßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrh L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎblj<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbn  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îblj<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjlp  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbn L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#,öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêÿØÿÿêB&Ò^ÞZÌÒØÊÜÂÚÊZÊääÞä~ B  @  öTã$à™åZáy*€Xâh ++Šå Šâ`zòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS"Lbý; JšàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áèº0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ºP3ÿ/ဠ@óBŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrhXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~ _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ð " ++ B((BLPB0  ++$óêù   šµ‘‚šÍmÍj\š&DLˆõD@à áå-ùí_ ŠåX’MW§ Jâàšå ±P @žåãU LD/à±dÓT,L šåp4hÀy myouhuS,’)50 ++ ++XŸ@Îblj– RlbnP;õ ++z  ++ Vüæ@Òæ@ÜÞè@Â@¨@ÞÌ@èòàÊ@L4Ð  ++HÞÞàæ0@  8H‹\ò ++‹À ++0B¬ ++0B¬"Ì,Lö*.B,   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(õX3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂ(LÒ^ÞZÌÒØÊZàäÞèÊÆèÒÞÜ$ÄðdpdäÜÒòðÄÎjÜàÆZÂP ++4ðÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh- ,ô$ÄðàâÌbðòÂÈ`êÄÆðÆ#ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ô LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'À"LÆÞÜÈÒÅå"ÞòÄhjrêÊbÌàÐÌ—× ‚/0 L*"x  ½þ ++Fô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++Q?&ÍZ…  <÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ/ ³(0ORäèÈRBàäÆAÞÆÞØv@P´     "3 àL .ÚÂÖÊZÆÞÚàöóèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎó$æòÜèÂða÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ¿ 31÷¸ÊðàäÊææÒÞÜBîäÂà $Mþ)&*èÞà L (ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`™ ++3£@æòÚDæ‹g ++ÚÂäÖæ©©ØÂÄÊØ^àØæª(a@&* ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*, ++B(# Ô,øöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB<ÚÂÖÊZÒ^ÞZÌÒØÊZàäÞèÊÆèÒÞÜZÊääÞä ü/¸ ( øTã`EâP…â,à™å^á:@ á¹à„å„å¹ P3ÿ/áóµÀÿÿ/á‚(L†õ$ÄðdpdäÜÒòðÄÎjÜàÆZÂP ++2ðÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh+€*õ$ÄðàâÌbðòÂÈ`êÄÆðÆ!A Lïõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒ»å"ÞòÄhjrêÊbÌàÐÌ× ‚/0 L*"v  ¹ø ++>ô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++QÁX…  :ó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrfÃ8 5±H™0âSãÉÃ0åSáfñ âRã0“ Ó ++Sãúÿÿ(0 ÙvRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrf L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# Æ,4öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿ ðÿÿêB4Ò^ÞZÌÒØÊZàäÞèÊÆèÒÞÜZÊääÞä~ B  @ ' ´÷Tã$à™åZáy*€Xâh ++Šå Šâ`Øòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; JàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜°P3ÿ/ဠ@ð;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrfXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒ{~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"@,Fö*2B0   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ð/3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂ,LÒ^ÞZÌÒØÊZÒ,öÂÈZÞÜØò$ÄðjòÊÒÈpàÌÖæðÄÎÔZÂP(6ð àäÞèÊÆèÒÞÜ$ÄðdpdäÜÒòðÄÎjÜàÆ4¥ ++3ôÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh,` ,õ$ÄðàâÌbðòÂÈ`êÄÆðOô" LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ô$LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'À&LÆÞÜÈÒÄå"ÞòÄhjrêÊbÌàÐÌ—× ‚/0 L*"x  ½þ ++Fô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++QÊX…  ::?*<>÷  äÆÈ"âÐ`òôÐjâòäðÚôdØk ž(0ORäèÈRBàäÆ¿AÞÆÞØv@P´    " $ &<àL .ÚÂÖÊZÆÞÚàóèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎó(æòÜèÂð©÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ 31¸ÊðàäÊææÒÞÜ)BîäÂà)(Mþ)*.èÞà L ,ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`¥ ++3¯@æòÚŒæ‹g ++ÚÂäÖ浩ØÂÄÊØ^àØæ¶,a@*. ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*0 ++B(# 8,ÞöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB@ÚÂÖÊZÒ^ÞZÌÒØÊZÒæZäÊÂÈZÞÜØòZÊääÞä þ/¸ * øTã`EâP…â,à™å^á:@ á½à„å„å½ P3ÿ/áó¹Àÿÿ/á‚,Lˆö$ÄðjòÊÒÈpàÌÖæðÄÎÔZÂP(4ð àäÞèÊÆèÒÞÜ$ÄðdpdäÜÒòðÄÎjÜàÆ2… ++1õÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh*0*ö$ÄðàâÌbðòÂÈ`êÄÆðKA L"õ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒºå"ÞòÄhjrêÊbÌàÐÌ× ‚/0 L*"v  ¹ø ++>ô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++QÀX…  ::.<ó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrd48 5 H0âSã8Ã0åSáÙñ âRã0“ Ó ++Sãúÿÿ(0 HvRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrd L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# Ì,<öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿ"ðÿÿêB8Ò^ÞZÌÒØÊZÒæZäÊÂÈZÞÜØòZÊääÞä~ B  @ ) ++ ¸÷Tã$à™åZáy*€Xâh ++Šå Šâ`Üòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J”àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜´P3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrdXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"Ú,\ö*.B,   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(õ\3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂ0LÒ^ÞZÌÒØÊZÂØäÊÂÈòZÊðÒæèæ$ÄðpÜàphòÌðèhÞònâZÂP ++8ðÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh- ,ô$ÄðàâÌbðòÂÈ`êÄÆðÆ#ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ô LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'õ"LÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌ—× ‚/0 L*"x  ½þ ++Fô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++Q?&Ñ^…  @÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ3 ·(0ORäèÈRBàäÆ‘àäÞèÞÆÞØv@P´     "3 àL .ÚÂÖÊZÆÞÚàúóèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎó$æòÜèÂðe÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ Ã 31÷¸ÊðàäÊææÒÞÜBîäÂà $Mþ)&*èÞà L (ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`™ ++3£@æòÚHæ‹g ++ÚÂäÖæ©©ØÂÄÊØ^àØæª(a@&* ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*, ++B(# à,öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêBDÚÂÖÊZÒ^ÞZÌÒØÊZÂØäÊÂÈòZÊðÒæèæZÊääÞä /¸ , !øTã`EâP…â,à™å^á:@ áÁà„å„åÁP3ÿ/áó½Àÿÿ/á‚0LŠõ$ÄðpÜàphòÌðèhÞònâZÂP ++6ðÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh+€*õ$ÄðàâÌbðòÂÈ`êÄÆðÆ!A Lóõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%õ LÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌ× ‚/0 L*"v  ¹ø ++>ô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++QÅ\…  >ó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrbÏ8 5¹H¡0âSãÑÃ0åSávñ âRã0“ Ó ++Sãúÿÿ(0 ávRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrb L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# Ð,DöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿ$ðÿÿêB<Ò^ÞZÌÒØÊZÂØäÊÂÈòZÊðÒæèæZÊääÞä~ B  @ + ¼÷Tã$à™åZáy*€Xâh ++Šå Šâ`àòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS Lbý; J˜àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¸P3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjrbXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"Ú,\ö*.B,   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(õ\3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂ0LÒ^ÞZÌÒØÊZÈÞÊæZÜÞèZÊðÒæè$ÄòÄÆbôìÜlÌfÎÎÚòîZÂP ++8ðÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh- ,ô$ÄðàâÌbðòÂÈ`êÄÆðÆ#ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ô LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'õ"LÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌ—× ‚/0 L*"x  ½þ ++Fô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++Q?&Ñ^…  @÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ3 ·(0ORäèÈRBàäÆ‘àäÞèÞÆÞØv@P´     "3 àL .ÚÂÖÊZÆÞÚàúóèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎó$æòÜèÂðe÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ Ã 31÷¸ÊðàäÊææÒÞÜBîäÂà $Mþ)&*èÞà L (ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`™ ++3£@æòÚHæ‹g ++ÚÂäÖæ©©ØÂÄÊØ^àØæª(a@&* ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*, ++B(# à,öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêBDÚÂÖÊZÒ^ÞZÌÒØÊZÈÞÊæZÜÞèZÊðÒæèZÊääÞä /¸ , !øTã`EâP…â,à™å^á:@ áÁà„å„åÁP3ÿ/áó½Àÿÿ/á‚0LŠõ$ÄòÄÆbôìÜlÌfÎÎÚòîZÂP ++6ðÜÂÚÊ$Äð`Ôâ`îæpÊbjÈôðh+€*õ$ÄðàâÌbðòÂÈ`êÄÆðÆ!A Lóõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%õ LÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌ× ‚/0 L*"v  ¹ø ++>ô ++ ÌØÈó æÆÐÊÚÊZÞÄÔÊÆè ++Q ++QÅ\…  >ó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjr`Ï8 5¹H¡0âSãÑÃ0åSávñ âRã0“ Ó ++Sãúÿÿ(0 ávRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjr` L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# Ð,DöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿ$ðÿÿêB<Ò^ÞZÌÒØÊZÈÞÊæZÜÞèZÊðÒæèZÊääÞä~ B  @ + ¼÷Tã$à™åZáy*€Xâh ++Šå Šâ`àòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS Lbý; J˜àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¸P3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjr`XB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"R,>ö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðM3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++LÒ^ÞZàÞäè$ÄòÈdÈâÚÈîòÆäpÂàjZÂP)ð$ÄðàâÌbðòÂÈ`êÄÆðÆ$ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þ6 Eó ++ ÌØÈàÞÄÔ æÆÐÊÚÊZÞÄÔÊÆè ++I÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØë ‹(ñ ++ äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@P´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ë¸ÊðàäÊææÒÞÜBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z` ++3——æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# N,ÒöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB&ÚÂÖÊZÒ^ÞZàÞäèZÊääÞä ñ/¸  øTã`EâP…â,à™å^á:@ á£à„å„å£óP3ÿ/áóŸÀôÿ/á‚  ++L{ð$ÄòÈdÈâÚÈîòÆäpÂàjZÂP'ð$ÄðàâÌbðòÂÈ`êÄÆðÆ"‘ Lºõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ø;ó ++ÌØÈàÞÄÔ æÆÐÊÚÊZÞÄÔÊÆè ++Có5 ++ ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpr;8 54H0âSãLÃ0åSáÓñ âRã0“ Ó ++Sãúÿÿ(0 \vR Øßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpr L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbll<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbp  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbll<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjlr  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbp L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#„,ÜöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêüØÿÿêBÒ^ÞZàÞäèZÊääÞä~ B  @  þöTã$à™åZáy*€Xâh ++Šå Šâ`ròp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J’àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè²0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜²P3ÿ/ဠ@óBŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjprXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~ _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ð " ++ B((BLPB0  ++ïêõ ++{    š­ ‘ ‚ šÅmÅj\š &DLˆõD@à áÝ-ñå _ ŠåX’MW§ Jâàšå ©P @žåãM LD/àý±ýdÓT, L šåp 4hÀq mqomhmS,’!50 ++ ++XŸ@ÎbllŽ RlbpP3õ ++z  ++ Nüæ@Òæ@ÜÞè@Â@y¤@ÞÌ@èòàÊ@L(Ð  ++HÞÞàæ0<  8H\ò ++À ++0B¬ ++0B¬"È,ö*.B,   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ñQ3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLÒ^ÞZÈÊÆÞÈÒÜÎ$ÄòÎäàÐÆfÜÎØfôòÐÆZÂP ++-ðàÞäè$ÄòÈdÈâÚÈîòÆäpÂàj) (ô$ÄðàâÌbðòÂÈ`êÄÆðÆ#ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ô LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ó"LÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þBó ++ ÌØÈàÞÄÔ æÆÐÊÚÊZÞÄÔÊÆè ++I ++I:&ºO…  5÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ  ¤(0ORäèÈRBàäÆ‘àäÞèÞÆÞØv@P´     "3 ð(L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜó$æòÜèÂðZ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ   ++31÷¸ÊðàäÊææÒÞÜBîäÂà $Mþ)&*èÞà L (ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`™ ++3£—æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©©ØÂÄÊØ^àØæª(a@&* ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*, ++B(# Ê,¨öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB.ÚÂÖÊZÒ^ÞZÈÊÆÞÈÒÜÎZÊääÞä õ/¸ !  øTã`EâP…â,à™å^á:@ á«à„å„å«ûP3ÿ/áó§Àøÿ/á‚Lñ$ÄòÎäàÐÆfÜÎØfôòÐÆZÂP +++ðàÞäè$ÄòÈdÈâÚÈîòÆäpÂàj'€&õ$ÄðàâÌbðòÂÈ`êÄÆðÆ!A Läõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ø:ó ++ ÌØÈàÞÄÔ æÆÐÊÚÊZÞÄÔÊÆè ++I ++I ++®M…  3ó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpp¢8 5—H0âSã¯Ã0åSá>ñ âRã0“ Ó ++Sãúÿÿ(0 ¿vRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpp L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# º,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêB&Ò^ÞZÈÊÆÞÈÒÜÎZÊääÞä~ B  @  ¦÷Tã$à™åZáy*€Xâh ++Šå Šâ`Êòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS ++Lbý; J‚àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¢P3ÿ/ဠ@ó@ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjppXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"æ,8ö*.B,   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ñQ3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂLÒ^ÞZÊÜÆÞÈÒÜÎ$ÄòÔÎ`nfèÈòìÌäØpÒZÂP ++-ðàÞäè$ÄòÈdÈâÚÈîòÆäpÂàj) (ô$ÄðàâÌbðòÂÈ`êÄÆðÆ#ô LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎ%ô LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ó"LÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½þBó ++ ÌØÈàÞÄÔ æÆÐÊÚÊZÞÄÔÊÆè ++I ++II:&ºð ++   ++ 1ÆTCE÷  äÆÈ"âÐ`òôÐjâòäðÚôdØ0 ´(1SHäèÈb2àäÆ‘àäÞèÞÆÞØv@P´     "3 ð(L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜ%ó$æòÜèÂðj÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ w3uÈÊðàäÊææÒÞÜFîäÂà@$Mþ)&*èÞà L (ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`™ ++3£—æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©©ØÂÄÊØ^àØæª(a@&* ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*, ++B(# ,ÐöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB.ÚÂÖÊZÒ^ÞZÊÜÆÞÈÒÜÎZÊääÞä õ/À !  øTã`EâP…â,à™å^á:@ á«Áà„å„å „å¯ÿP3ÿ/áò«Àøÿ/á‚Lƒñ$ÄòÔÎ`nfèÈòìÌäØpÒZÂP +++ðàÞäè$ÄòÈdÈâÚÈîòÆäpÂàj'€&õ$ÄðàâÌbðòÂÈ`êÄÆðÆ!A Lèõ$ÄîòÞlÚÒæðÄÌÖÚäÈÎ#õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹ø:ó ++ ÌØÈàÞÄÔ æÆÐÊÚÊZÞÄÔÊÆè ++I ++II ++®ð ++   ++ 1ÆRCCó5 ++8BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpn¶8 5 «ˆTã“0âSãÃÃ0åSáRñ âRã0“ Ó ++Sãúÿÿ(0 ÏvRØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpn L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbln<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlbr  !@ - ¤ÁTã @ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbln<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjn`  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*lbr L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêÿØÿÿêB&Ò^ÞZÊÜÆÞÈÒÜÎZÊääÞä~ B  @  öTã$à™åZáy*€Xâh ++Šå Šâ`zòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS"Lbý; JšàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áèº0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ºP3ÿ/ဠ@óBŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpnXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒèÒÞÜ~ _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X þ " ++ B((BLPB0  ++.óQZÆÐÂä   $š¿‘‚š×m×#j\š&DLˆõD@à áï-÷_ ŠåX’MW§ Jâàšå »P @žåã_ LD/à±dÓT,%L šåp4hÀƒ mƒohS,’350 ++ ++XŸ@Îbln  RlbrPEõ ++z  ++ Vüæ@Òæ@ÜÞè@Â@‹¨@ÞÌ@èòàÊ@L'Ð  ++HÞÞàæ0@  8H•\ò ++•À ++0B¬ ++0B¬"r,šö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ði3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++LÜÞZÒÜÌÒÜÒèÒÊæ$ÄòØlÆòêÒhÎhäÒrôâZÂP6LÒÚàØÊÚÊÜèÂèÒÞÜZäÊæèäÒÆ ð$ÄðÊîhdòfÆÆôÒpàîØ;òLìÒÞØÂ)ôîbÊÒÆrÒÜèÞîÊÊhÚ)ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB" 33; €(÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØå (ñ' ++ ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ àäÆÈ ‘àäÞèÞÆÞØŠ@d´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðÇ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ë±ÊðàäÊææÒÞÜíBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`¡ ++3«x‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# è,ÄöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB8ÚÂÖÊZÜÞZÒÜÌÒÜÒèÒÊæZìÒÞØÂèÒÞÜ ú/P & ++—Tã@Å•Àùÿ/áR  ++LSñ$ÄòØlÆòêÒhÎhäÒrôâZÂP6LÒÚàØÊÚÊÜèv€ZäÊæèäÒÆ ð$ÄðÊîhdòfÆÆôÒpàîØ9•L©õ$ÄîbÊÒÆrÒÜèÞîÊÊhÚ'õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B" 33 v&ó/ ++  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpl+8 5 PTã¸ó ++0âSã0åSáÌñ âRã0“ Ó ++Sãúÿÿ(0wF ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpl L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# À,,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêB0ÜÞZÒÜÌÒÜÒèÒÊæZìÒÞØÂèÒÞÜ~ B  @ % °÷Tã$à™åZáy*€Xâh ++Šå Šâ`Ôòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; JŒàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¬P3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjplXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬"f,‚ö*(B&   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðc3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ ++LÜÞZÜÂÜæ$ÄòÞìÞàÖpêôÈfÂðâðZÂP6LÒÚàØÊÚÊÜèÂèÒÞÜZäÊæèäÒÆ ð$ÄðÊîhdòfÆÆôÒpàîØ;òLìÒÞØÂ)ôîbÊÒÆrÒÜèÞîÊÊhÚ)ôLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'ÀLÆÞÜÈÒPó"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x BÁB" 335 z"÷ ++  äÆÈ"âÐ`òôÐjâòäðÚôdØß {(ñ' ++ ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ àäÆÈ ‘àäÞèÞÆÞØŠ@d´    * ++ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðÇ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄ ++31ë±ÊðàäÊææÒÞÜíBîäÂàýMþ) $èÞà L "ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`¡ ++3«x‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæ©ØÂÄÊØ^àØæž"a@ $ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*& ++B(# Ü,”öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB,ÚÂÖÊZÜÞZÜÂÜæZìÒÞØÂèÒÞÜ ô/P  —Tã@¹‰Àóÿ/áR  ++LMñ$ÄòÞìÞàÖpêôÈfÂðâðZÂP6LÒÚàØÊÚÊÜèp€ZäÊæèäÒÆ ð$ÄðÊîhdòfÆÆôÒpàîØ9•L£õ$ÄîbÊÒÆrÒÜèÞîÊÊhÚ'õ LæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%LÆÞÜÈÒLó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v B½B" 3up ó/ ++  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpj8 5 PTã ó ++0âSã0åSá´ñ âRã0“ Ó ++Sãúÿÿ(0kF ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpj L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ´,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ÿðÿÿêB$ÜÞZÜÂÜæZìÒÞØÂèÒÞÜ~ B  @  ¤÷Tã$à™åZáy*€Xâh ++Šå Šâ`Èòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J€àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ P3ÿ/ဠ@ñ;ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpjXB$8(HÆÞÚàÞêÜÈZÆÞÜÈÒu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" .,\ö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ñd3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LæÞêäÆÊ$ÄòäÖ`ÎÄòØÐÜÊdØÐhZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌð)÷ ‚/0 L!""4zó ++ÌØÈÌÞäÚ æÆÐÊÚÊZÞÄÔÊÆè ++G÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØ (ñ ++äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@ ++P°  ðL .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæà³ÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðõ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄÜÜ ++31ǸÊðàäÊææÒÞÜíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`i ++3s—æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# X, LöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB*ÚÂÖÊZæÞêäÆÊZÆÞÜÈÒèÒÞÜ ó/¸  øTã`EâP…â,à™å^á:@ á§à„å„å§÷P3ÿ/áó£Àòÿ/á‚L}õ$ÄòäÖ`ÎÄòØÐÜÊdØÐhZÂPL›ñ"ÞòÄhjrêÊbÌàÐÌð'÷ ‚/0 L!""vó ++ÌØÈÌÞäÚ æÆÐÊÚÊZÞÄÔÊÆè ++Aó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjphv8 5mHU0âSã…Ã0åSáñ âRã0“ Ó ++Sãúÿÿ(0 •vRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjph L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎblp<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdld`  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îblp<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnb  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*ld` L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#x,üöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêþØÿÿêB"æÞêäÆÊZÆÞÜÈÒèÒÞÜ~ B  @  öTã$à™åZáy*€Xâh ++Šå Šâ`vòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J–àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè¶0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜¶P3ÿ/ဠ@÷7ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjphXB$8(HÆÞÚàÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ü " ++ B((BLPB0  ++*ñQZÌÞäÚ   "š»‘‚šÓmÓj\š&DLˆõD@à áë-ÿó_ ŠåX’MW§ Jâàšå ·P @žåã[ LD/à ± dÓT,L šåp4hÀ mo{h{S,’/50 ++ ++XŸ@Îblpœ Rld`PAõ ++z  ++ Jüæ@Òæ@ÜÞè@Â@ ¢@ÞÌ@èòàÊ@L%Ð  ++HÞÞàæ0:  8H‹\ò ++‹À ++0B¬ ++0B¬" B,tö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðc3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ  ++HLæäÆ$ÄòêØ`ÚpäÊlÊhnÜÜÄZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L!""2xó( ++ÌØÈæäÆ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++æèÂäè U÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØ (1TAäèÈRcBàäÆ‘àäÞèÞÆÞØv@ ++P°  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄÜW3]èÊðàäÊææÒÞÜíFîäÂàOAÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`i ++3s—æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# ”, lö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB&HÚÂÖÊZæäÆZÆÞÜÈÒèÒÞÜ ñ/À  øTã`EâP…â,à™å^á:@ á£Áà„å„å „å§÷P3ÿ/áò£Àõ#ÿ/á‚ ++ ++HLæäÆ$ÄòêØ`ÚpäÊlÊhnÜÜÄZÂPLð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L!""tó( ++ÌØÈæäÆ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++æèÂäè Só5 ++8BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpfˆ8 5 ˆTãi0âSã™Ã0åSá ñ âRã0“ Ó ++Sãúÿÿ(0 ¥vR ++ØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpf L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎblr<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldb  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îblr<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnd  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*ldb L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbn`<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldd  !@ - ¤ÁTã @ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbn`<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnf  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*ldd L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#,-föB P  L0Ÿåê ƒâàø à‚å,°™å Uá8*°Kâ,°‰å ‹å(O àƒåH H4H ¦>@ ãðšå@1ÿ/á@OðÿÿêØüÀÿÿêBHæäÆZÆÞÜÈÒèÒÞÜ~ B  @  ^öTã$à™åZáy*€Xâh ++Šå Šâ`ròp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS2Lbý; JªàžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áè²0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ÊP3ÿ/ဠ@÷7ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpfXB$8(HÆÞÚàÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ú " ++ B((BLPB0  ++$ïAZæäÆ   šµ‘‚šÍmÍj\š&DLˆõD@à áå-ùí_ ŠåX’MW§ Jâàšå ±P @žåãU LD/à±dÓT,L šåp4hÀy myouhuS,’)50 ++ ++XŸ@Îblr– RldbP;õ ++z  ++ Füæ@Òæ@ÜÞè@Â@ ++±@ÞÌ@èòàÊ@HL3° ++HÞÞàæ08  8Hƒ_ò ++ƒ<(dAèÂäè……!‡ÿÿ¥‡/n`‡ d‡U O0 68[[c ++0B¬P0B¬" ,8ö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðe3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LÌÞäÚÂè$ÄòðÄÆÈôÎjÞÞÎôÄÊÒZÂPLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L)"4z!÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØi i(ñ' ++ÌØÈäèÈ æÆÐÊÚÊZÞÄÔÊÆè ++ ++àäÆÈ ‘àäÞèÞÆÞØŠ@ ++d°  ðL .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæâ³ÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð£÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄðð ++31DZÊðàäÊææÒÞÜÉíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`} ++3‡T‡æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(#¸, šöB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB*ÚÂÖÊZÌÞäÚÂèZÆÞÜÈÒèÒÞÜ ó/P —Tã@·‡Àòÿ/áRLLõ$ÄòðÄÆÈôÎjÞÞÎôÄÊÒZÂPLjð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L*"vó/  BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpd8 5 PTã£ó ++0âSã0åSá·ñ âRã0“ Ó ++Sãúÿÿ(0pFØßÀ ++0B¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpd L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"# ¤,öB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@þðÿÿêB"ÌÞäÚÂèZÆÞÜÈÒèÒÞÜ~ B  @  ¢÷Tã$à™åZáy*€Xâh ++Šå Šâ`Æòp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HSLbý; J~àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°€@ áèÿÿê´L5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜žP3ÿ/ဠ@÷5ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpdXB$8(HÆÞÚàÞêÜÈu?@<ZRÜÊÜèæ(p ++¸ Ñ€B`8’X ð " ++ B((BLPB0 ++0B¬" 2,lö*B   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ðP3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZ LÆÞÜèÒÜêÂèÒÞÜ"ÈðäpìêÖÖêÄÈbèäpZÂP,!ÈÒ)ðÞòÄhjrêÊbÌàÐÌðh)÷ ‚/0 L!"":ó ++ÌØÈÖ æÆÐÊÚÊZÞÄÔÊÆè ++J÷   ++äÆÈ"âÐ`òôÐjâòäðÚôdØ’ ’(ñ ++äèÈ  ++BàäÆ‘àäÞèÞÆÞØv@ ++P°  ó,L .ÚÂÖÊZÆÞÚàÒØÊZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂðõ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄÜÜ ++31ǸÊðàäÊææÒÞÜíBîäÂàíÙÙþ(èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`i ++3s—æòÚÜÂÚÊæ‹g ++ÚÂäÖæy©ØÂÄÊØ^àØæza@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8* ++B(# Z, töB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@Oðÿÿêð ØÿÿêB6ÚÂÖÊZÆÞÜèÒÜêÂèÒÞÜ ÈÒ ++! ù/¸ % øTã`EâP…â,à™å^á:@ á³à„å„å³P3ÿ/áó¯Àøÿ/á‚Lƒõ"ÈðäpìêÖÖêÄÈbèäpZÂPL ð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L!"" ++{ó ++ÌØÈÖ æÆÐÊÚÊZÞÄÔÊÆè ++Dó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpb„8 5uH]0âSãÃ0åSá$ñ âRã0“ Ó ++Sãúÿÿ(0 vRØßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpb L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbnb<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldf  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbnb<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnh  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*ldf L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#|,$öB   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@Oðÿÿêð ØÿÿêB.ÆÞÜèÒÜêÂèÒÞÜZÆÞÜÈÒ ++ß~ B  @ $ öTã$à™åZáy*€Xâh ++Šå Šâ`‚òp–åàâàŠå@ ã ð–åiÿ JâšåTãUH±HS*Lbý; J¢àžåàŠå&Tã* ++ôù ++ à”å&^ã ++”åàŠå  Šâpdâð—å a  °à°P@ áèÂ0ðšåL5pš<"@X T&Àœ@ÿ/áT½\t@šåÖÿÿê \H.T‡˜ÂP3ÿ/ဠ@÷7ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjpbXB$8(HÆÞÚàÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ø " ++ B((BLPB0  ++,S   #š½‘‚šÕmÕ!j\š&DLˆõD@à áí-õ_ ŠåX’MW§ Jâàšå ¹P @žåã] LD/à ± dÓT,+L šåp4hÀ mo}h}S,’150 ++ ++XŸ@Îbnbž RldfPCõ ++z  ++ Vüæ@Òæ@ÜÞè@Â@ª@ÞÌ@èòàÊ@L?° ++HÞÞàæ0@  8H“\ò ++“À ++0B¬ ++0B¬",Ìö*$B"   L$à™åZá;*€Xâ, ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i, Jâ á<¥<8 á„' PHl \&À$@ÿ/á* dfÅÿÿê0(ð%3ÿ/á¾ÿÿêj ++äläæZäÊÆÞäÈ"ìÆnàÒæÐÎÚäÐ`râÚZÂL ôZÚàÒØÊ0ÊÄjÒàòhnÄpÐæÆÜØôÞÎÂjrÖZ`P LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎZÂPLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr'óLÆÞÜÈÒèÒÞÜ"ÞòÄhjrêÊbÌàÐÌðh(× ‚/0 L*"x  ½VHó! ++ ++ÌØÈÒÚàÞäèÊäZàÂèÐ  æÆÐÊÚÊZÞÄÔÊÆè ++T÷  äÆÈ"âÐ`òôÐjâòäðÚôdØÚ ˜(ñ ++ ++äèÈ   ++BàäÆ‘àäÞèÞÆÞØv@P´   !£L .ÚÂÖÊZôóZèÒÚÊZìÂØêÊXB$ *HèäÂÜæÌÞäÚÊäZ|ÄÒÜÈÒÜÎóæòÜèÂð ÷$ÄÈÊÐÖÊÌlÂØÚÐlòàÄôô ++31߸ÊðàäÊææÒÞÜBîäÂàñMþ) èÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z` ++3‹—æòÚÜÂÚÊæ‹g ++ÚÂäÖæ‘©ØÂÄÊØ^àØæ’a@ ++ð LTæòæèÊÚTHæÆZàêèZÆèÊHB`8*" ++B(# (,”ö B   L0Ÿåê ƒâàø à‚å,°™å Uá *°Kâ,°‰å ‹å(O àƒåHH ¦>@ ãðšå@1ÿ/á@OðÿÿêñØÿÿêB2HÚÂÖÊZäÊÆÞÚàÒØÊZÆÞÜÈÒèÒÞÜ ÷/¸ # øTã`EâP…â,à™å^á:@ á¯à„å„å¯ÿP3ÿ/áó«Àõÿ/á‚ ++L€õQ0ÊÄjÒàòhnÄpÐæÆÜØôÞÎÂjrÖZ`P LÊääÞä$ÄîòÞlÚÒæðÄÌÖÚäÈÎZÂPLæÊäÒÞêæ$ÄîìôêìädlæjpêfØr%ELìó"ÞòÄhjrêÊbÌàÐÌðh&× ‚/0 L*"v  ¹&Hó ++ÌØÈÒÚàÞäèÊäZàÂèÐ æÆÐÊÚÊZÞÄÔÊÆè ++Nó5 ++0BP(BLPB0 HàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjp`8 5 Hñ0âSã!Ã0åSá´ñ âRã0“ Ó ++Sãúÿÿ(0 1vR ++Øßñ€¬ ++0B¬"Î, €ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  Lañ= ++HàäÊÈÒÆÂèÊ~  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àرa@ ++ ++8½ðF<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjp` L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#Ž,ÊöB Ð  L0Ÿåê ƒâàø à‚å,°™å Uá*°Kâ,°‰å ‹å(æ àƒå>@ ãðšå@1ÿ/á@ñðÿÿêBÎbnd<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldh  !@ - ¤ÁTã@ådÀdðÿ/ábBLPB0 ++0B¬"Æ, ¢ðB ð  L€Xâ ++Ÿåê  ` ö p–å@ ã ð–å Šâ àâàŠåÀ$@ÿ/áb…ú7 Jâãÿÿê RæòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LañU ++Îbnd<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjnj  ÚèÞà L ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`PÉ É 31Ÿ‘æòÚÜÂÚÊ棳R ++ÚÂäÖ’ØÂÄÊØ^àØÉa@ ++ ++/Õð*ldh L ÎØÞÄÂØTæòæèÊÚTHæÆZàêèZÆèÊHBb8"#WÔ,4ö*†B„ 7Ð  L$à™åZáq*€Xâb ++0Ÿåê ƒâàø à‚å,°™å UáQ*°Kâ,°‰å ‹å(O àƒåH9H g Šâ`Lðp–åàâàŠå@ ã ð–rퟠJâ@Šå<4R);¯ Jâ@Šå <¢ e æ  Jâ @Šåšå<LL¢±P JâÄ LL¢<ýP JâÔ LL¢|IŸ Jâ@Šå ¢ü…P Jâ< ˆ ˆ¢üÑ Ÿ  Jâ @Šå$ˆ‚ $; $  á$Šå(@‚M(?ö( Jâ$šå á <Œ Œ™Œ/$@ˆÕˆŸ  á( Šå,@‚,?, Jâ( šå x",औ TZi”üø`EâP…â,à™å^á8:lÁà†åàšåà†å(´`‚åã ++$/%l ppp /þp'/êp/×L3¿¸(«¸ ¸ ˜p(„( qp(]pp Jp(6pp #p(p p /üp'.èpp Õp(/Á8/®X3–H4~jŸ@†å$àšå Vt(/B¤/p(T p j>@ ãðp@1ÿ/á@HðÿÿêÀP2ÿ/áÞ,É,·,¢,,zbJ\8,#,,.üþ,/êþ,Õ,Ã,®,œ,‡,u,`,N,9!D,.úý,/èý,Ó,Á,/¿ü@§üÿêü  Ä À$@ÿ/á*á ô L`ÿ3ÿ/áˆüÿêôj*HäÊÆÞÚàÒØÊZÆÞÜÈÒèÒÞÜ~ B  @ " *„Tã2"y2oh ++j j *ij * TãUH±HSòLý: ++¾àžåàŠå&Tã* ++ôò ++ à”å&^ã ++”åà29pd1ð—&a&&à°P@ áè–0ðšåL5pš<ŠT½\t@šåÖÿÿê \H.T.‡ÿR€ @ð/ŠHàäÊÈÒÆÂèÊ~<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdjp`XB$8(HvGÞêÜÈw _@< ZRÜÊÜèæ*p ++¸ Ñ€B`8’X ÷ " ++ B((BLPB0  ++0õÑÒÚàÞäèÊäZàÂèÐ   %šÁ!‘!‚!šÙmÙ%j\š&DLˆõD@à áñ-ù_ ŠåXMム ½P @žåãa LD/à±dÓT,sL šåp¯4!hÀ… m…ohS,’550 ++ ++XŸ@Îbnd¢ RldhPGõ ++z  ++ Rüæ@Òæ@ÜÞè@Â@µ@ÞÌ@èòàÊ@HL(Ð  ++HÞÞàæ0>  8H•]ò ++•Ñ(0ÚÂÖÊZÂææÊäëPìÒÞØ ++Á1 "UÊääÞätîÂäÜÒÜÎõ!LÌÞäÚÂè$ÄòðÄÆÈôÎjÞÞÎôÄÊÒZÂPLÓð"ÞòÄhjrêÊbÌàÐÌðh'÷ ‚/0 L*"v¥  :Ôo !RÜ‘ÒÚàØÊÚÊÜè ŽZäÊæèäÒÆ#OB&Cy^ÞZäÊÂÈ<Q(,ØÊðÒÆÂØO $:'"0"_ &Á¿@B, x  ˆNPTã( ö@à áz ÊøŠå Šå0—å 0Šå ãžM  á@pŠå¹<ŠA*©A1 pšý Ÿšå šå݆ñ ++RB `  B*  n€ZÐÊØà€äÀŠå á0 áJ5š:"6: ++Sã jó àâ^ãà“åàâ^ã±^ã à(ü(’(ø ASãt¿Qã< á¶jÑÅ1¶¹k€@A á l^ã  í †è Ø (ð>tO Šåø[Ðɸ-0à á</àH” ÿ D¬9H.YH¬ë CQã4Ô/0˜°ä P@0šåQà àñ˜U$Ü.5ÜSuÿÿêÔ¸nðؼ?@Šå$o´Í$”"œyH$  F ,q,.a,y*ÿÿê0Šé LD$,(Ú |_Šå 4¡*ù¡E|äÊ]p879cFZ$†ŒÚÊææÂÎÊZ$(`ÆXB" @ ‚ AŸ9~ &,pŸ(p¤_—åì­OœœÒ ++ã !pšÇ ++À˜qŠd6_qÆÞÜèÒÜêr dÄ£f ++äÂÒæÊE f" ++(° Q0B°V QP("+]sÄØÊH&Ì ÒääÒèÂÜèæp58$ ++zHA($B?îÐÞ¬5@& ++P(ê³j lÒÜìÂØÒÈ@gP@ÂäÎêV õ@üæ@PîÐÞ@z@üæX@´vR0>) :O>Q hGa ++* ++8GÁXBb8j,8 €—?.( Ì? 0?  @ ¹f. B*#0#  2 g þ¹þ2!14ô!^Ƨt6 x   ++_TãH ++t ++pp ++:,#Ú¬ ++ü üpò [8™ú1 š×L. @vv|„vxd© |€Æ_0ÿ/á¿ŠŠY`™4˜_B6 ++8V@8H'0Þàæ¦:¦©¹8©:©1<<4äÈZy>  @ $²e¢D° á¢w¢@` ++¾ ãa0Šå°ŠRÞëëP0šå°š„;R  F  ++F p›å^á'áâQãàž !¦ {^ãúÿÿ³`:°g †â£¹ †å&à ãà†§J ¯`Šåà—å à 3äþ / Š° æ ä à€c /ùx .‰ÿ‚wS º.6p´ZÈÊæÆäÒàèÞä0F (¤˜aüæ@<«±ð0< 2üæ@ÂÆèêÂØØò40¬%Dô~@~%ßI ++> ++1@ ++B¸¹@B1D ôËF¹DF3H©J ' ~H J 3LöN* ¹L N šZ æòÜèÂð/}\  È $02Wÿ@TãQ:R@ áäTEB@0 ++U*"L Ð hÁ)T S@šå¶@ ¶?@*Íú$LÃo0 ã0Šþ»Ä/ ++ \lE ++¼ »@´Çl& âSTAB ++ _ ãpX˜ݘlDod!œ0˜`S㘜 Ó.iœ”šåñÿÿêp”.Ùü­Œ±¦ÿÿê*Â^* öPXBXÄ €p ÒÜÌÊä/“„±uË qDk:N&£ ¯ 3Và–Ÿ  g ++¥+•`)KÇú,éMé€ ‡ 5  (.‰sP   À$| -Ž}_ 1_|uuõ"âRÒÈÊÜèÒÌÒÊa ++ó0PÂÜòP T H•…ÈÒæàÂèÆÐvR3u¾ T…3`4ûcHVÀ|ÈÂèêÚ8V ++0ª ++"@W ++2zX-#8ŒZQ¦f¢\ ++0w ++L€^'SXBX?8?B Ê\!!!`Zyb  °$„sÙ–&0¹ Ìrð¹ ++&Sã7 ++à áŽ1 à’B#V#Êa ’åe ë¯âQãñÿÿ ++© ö"Ã/àâõ⾿"àV#¤gwgs_7:ŠiŽ0§0LÓH&x6x2ûçÝ®‡/šã*ã¿*T0à€å@€å¿@à ãÚ¡ß]žå á +ñ1  áÈ)t%Ó *aøl.4ÿ<(-“:Z ++¸Ø`l $§ 'ÜΗfb$ ÉÚM`$gO@Bhgÿ.dJDfXChC(CHÈ j´R0 ++ÃpZÂààÊÜÈ#P¼ *lÞXo Úb ++(ŠÖp(HêÜÈÊÌÒÜÊÈ7 Ûr2 /ø !$y ˜Þ E ó~ø? ãÛ6Ø&þ s8&·4ï ++@5€í@à á 0šå0Z!0Sã9èa0šå0“1SR–/àÛU[àÛ’ Û/™_s÷c/V aV ãqKjK5(’®&© ´Lx$ÈnÈÿ>nÈpÈò] ++o Úr ++ žDtHs&{v  x 0@¹QTãxó ‚Tãr b Šå0åf šå ücÝqJ ++pŠpÈ¡"äÏ ­9å0d‡ 0Rã1º*1—å"‹ 2E"Øu ++`+Þ) U:jÀ=H"àºh%/àt= šA„—åÌÿÿê,q4"_Á,˜q°<_;ÿ/á–…x ÔFÔ"1$'-€/#¸j+ #t<%­@ pppuÐÿÿêpŠ= ++h ±> ”$5pš$ºA ++³Hbâ|&HI-äÆP!7hx'*æ. '*8o!t=pàfšv ++@àM˜x˜4`²2jv°#ˆªz"HæÞêäÆÊ~».À " âû ˆúD///QÙ?@—££«)Ï&pD€?¹.D,š2DfÒÿÿê pó' +=£p‡¼ µ‡h Q xzÁM@|ZÒ-H’~…Ü4€¾ø‚Ù ×3×ÿ€×‚×!¬?P ++( .¬0 9*× 7Ú„ ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #e¤, ³˜ûNBè ‘p  L$à™åZá *€Xâö ++K? ã`EâP…â,à™å^áë:0†åà ã à†å  á0Ÿåê0gÚ:à ø à†å †å ƒâ`‚åã ++,°™å UáÈ*°Kâ,°‰å ‹å<n àƒåð0”¶”¥”“” ””p”^” ”L”;”)” ”””/ô¼ ˆ>0 ã0Žå€? 0Ž$6.> ³Ç:0 á ƒNƒå>(¸(c  á‚(‚(©(p(‡(‡(š(°(‹(‹(‹(À(Œ(Œ(g|:È^ á>(m((‡ á`Eâ$ð _:À†å p†å °†åà ãà†å`Šå,,O,ó †å À†å p†å°†å 00 0÷>:àšåà†å 0†å À†åp†å°†åàšåà†å0p À)è" `ø@ àŠå°(0.°€"àpð †å0†å°†åp†å†å#À†å'†å ¬m0Žâ`ƒÜ'ûÜ)0‹p8 „$ŒDà‚åL/âä ++HÊH 8 f Šâ`ðp–åàâàŠå@ ã ð–rÉO JâP-/P;iP<¹P@ ã8€* 0Oôÿÿê°° ,ó9 ++ ++B¬0 6üæ@Òæ@ÜÞè@Â@àÞæÒèÒìÊ@ÌÒðÜêÚ ++HÞÞàæ0BLxB0p*$3ÞÜÊ(EÒÚÒèCFÂF+??ÞÒÜÒèÒÂØZÒÜÈÊÜ? ++?"º?ŒX ô0ž+Qž°šå0šåÛ’Á˜²@-0”È5NÈ_àŠå È··*%ß|<0Îãd dK9@pîÆDÄÿÿêBpØð áÀŠå 0Šå°Šå Šå9y ŠâpžòPð—å|ë!RÚ’Àšå 0šå°Rì ’ X\/U\.ñþfóêþÿê@ÚB iÈ ŠVZÐÊØàbŠå Õ  àâ^ãf±!1à“ô ++&P9n^ã91àP&"~Ààâ^ãz¥ù  Ó@Ó1à„«¹à„åà ã à„1 à„Í DìÿÿêwW­@F ++€sÛ ÿP“åo Šâpšå *yã1 ”¬ Ü^0‘âOë6o ã@ééðà á@šå0 á×ÿÿê¢Nâ¼ÿÿê03Pjðm/_0šå©{¢ØWSá? ++ ?„å @êÿÿêüü ü"à;ü. pq (ñ(.•(Þ”S”DB ++Ýó šå ’å ’å Šå ˜1š˜… Od?žåà Ã/YÃ_\.ñ\­„¦p{ ”"®àSPã±¥ @œ€‰$‰nô}Œ"½ ++^I@Æ> )ž Pžå ¯@Šå Šâp|ÐbõÑ /@' A’' / ô Ž$'  /øI,éô#'  û"Bûh$û œ€ ~¤Ú% xüp/íp_Oÿÿ ++¸5¶>@”! ”``@.1 D.ùþœ/òþ@/.á@3/½ @c/5 ++@ß/) @—/Õ @C/- @3/u @ç/q @€O/ý @c/u@ß/i@—/@C/m@3/µ@ç/±@"!@ ,! á° °/°! š5@ á´ [øeH„Q$THá ++\Èe%/ÅX = L*ÇLQVã£|–¨@Ÿ”¹ œ@œD+aüàü"@üsÍd,Åd (d0/)d d L*@Œ( ( +Ð .Áüø¨Œ/`€ (O_ @†åë  ‡ß¼m$À “å âRãWO! “œP&RãS”)“ÄSQá(ÄqâRãH‹ ++,„ Šå“åÌ\"à+x /+ñ/0ÔÝ'7àž<“< <Ÿ@†å †å 0< @<+¥<ˆ@P  áÙt: “å40Rá¢<|Tžõ%™U&^ã”8Pžå^¼ i ++ ^ãŽ@ž,ˆ0- ž3|¸ ¸S+ͤp¤´*0XÐD/p@¼ *1@.p¸ :¸ p¸ —|”|'0|@|3/!| Ì¿Ñ'}Ô/à%°/Ù¨_@ áAPO2þÿê8/U8.ßýð,Øýÿê~¢àäèò<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldpP* :‘‚L9ð* ++ÌØÈ,ÌÚè æÆÐÊÚÊZÞÄÔÊÆè ++ ++–ØÊÜ QÞÄÔñ L @ ++FL\\\ ++(BPpPB8Å'ð` (äÊÂÈZÚÂÆäÞ FL L ++@3Ž(,/ðhB`8 ò ++ B(( ŒpDf0 h¡X8BXÌ(óB¨&HîäÒèÊZ-0€âêÒÆÖXo0"ÎÊè—(PaH„%ú„R &)jìÊÆèÞä#)ù0 Fìêp ++"ÄòèÊ$* ôêpZäÊÌPB" È S!/@UN"°ÝWÝZ0YA ++Ýþ!°Ay ++/ééÌiyïšXHp á1 ÜU½H@Dâ[ã³î#|[á±Ê § †å †ËZ ++.&ïY±³ƒå KâWã‡ù ³X|Ú.q ‡å 0‡2-q à‡å‡V-1à‡N-‘à‡å°‡å8¿X0‡å…ç9 *Ié R$0à á¥H @€Xâ36&0žå “å050ãDp0àj¥ Y] S0‘â  A = Ùl!= -H/!HÓH¡ 0+m¡H^ šå¸µmA D/îÿ[=¸OGâviR1 @Wã$X0XX@Tb à‡å 0TT\_°‡å0T™iÍ àÌ00GâÝ¥ â.Ô/ Ô ++íp~/ä#hЭÉþÿê<²¾UP\\\R¾Ö!˜Üp#wô@B ($ ÚÖª@à—åƒqÚ @—V–&V‹€C ++—åZ&pº$=p—#ú+yp¶$*æ”àŠå—å¤)X @) ++ª` @G ƒâV@ÅŽJ,3Šo„å 0„åõ`)Â%/…¬ªšƒ£ÿÿêB05`Œ h$ ++htq`8" ú(€è‹X `-a ò"XÐðnÌÒØØv!ÏJ& ++8 ÏèB&  ($6&H%6660[ —å6 6ÿ&6 ++Ôh0HØÂæèZÜÊî) ++”ÊØÊÚÊÜèXS–`8º" ++0?€P(8 k ++H Fòh ,P64ê ++ðäÂÈÒð ÆÎÞæ`ÆrêÌÒbäâZÊÐP*.ã !ÌÈ  q,õ ã0ìÂäÒÂÜè  ++ €2ÈÒäÊÆý;1 L7.FPF“!5 &0HE2 M BÄÂæM!î " 1àÆ*Æ2Ò:a ++æÒÎÜ~BrÆÞÚÚÂæJ¨4î` üÈ· ± , ±,â ìêp L(8 ‰<ó FüÈìêp(: HÈÞÌÚÌ PÒê 78O 0@  %PR¯ 7F`j &%zj (U ÌðU =ÌðS N /"L$/6 Ìð$8oÌð(:/Ìð+Ìð/5ú F,üOFüÈù+Fö;F`óGû±€B’ Ð § ?50 á'2‘^ç0 á.PF4×0]q*‘¯9®& +++ê(Ï k/àÊ, Ts{(!0šK7È2 ++&Sã ++æð „â ‚â‹‘í›’íI‹´îúñî—, ¨'7"@”/b-µ˜³" 03 [0p‚âˆu‹—훑„@*@@ áÈ@ÌÿÿêÊ ˆ \íN€¹•!@šVçß0”å–ÿÿêl à¥l` óYÿÿê"‚XÌäÊÊZÒÈZ<æòÜèÂðuý$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZ§3´ÆÊðàäÊææÒÞÜmfîäÂà®@$ÊðèÊÜæÒÄØÊZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Zb™™?81ˆq ÆÐêÜÖæ9 ++Š>[ÿL \@ÌÒðÊÈr`r  3ÙÇæòÚÜÂÚÊæ g ++ÚÂäÖæ{’ØÂÄÊØ^àØÎ@a€,^S `BB´ÁFDØÞÆÂØZAû$Â`ìäÆÊÈÖìðîÄÜæòìZ`²8 1°¦ÄÒÜÈÒÜÎ ¤_=' ®DIðH"ÈÒæàØÂÆÊÈZØÊðÒÆÂØcðFHbJ €Z ++Uw~B*; LT#Õ="î OÆÐÂä& åJ ‚‚_9>¡9_ÄäÂÆÖ2ÇH¾Ì?àÞäÆ.ÎÊÜÊäÒÆ#¯èÂÄZÂÚÞêÜB¤oæZæÒôÊ?æÒ ++HÛ_àÂäÊÜGOèÂÒØ %°_ZæÊèB"_ ++ÈÞèæb$ÆÐÊÆÖ˜LÝHc?ØÊÜc/Lë_äÞÞÚ[ðÄô7‹?ÞÄÔî Up Æ _ÌÚè~‰ØÆ_ÈÊÆä:4?ØÒæÃ?ÆÞˆ ¨Š?ÞÄÔ&Ë4( ær(. ä¯ dcIï";L_èÂÄ~ tŸ`æÆÞäÊW ï5Á( LuB %c L N SN L S L S L S LP SP L ++  ++p¤RèÞàûý"ÌðÈÌôèÐdâfÐppìÈ880†GÖÊò&™ÚêèÂÄØÊ~…RH¡TæòæèÊÚT ãdÂÜò T H’£4ÂèÆ¢(Š¾ TÆxBŽ ÐV tÏ ¿K¯ ++0 OŠåõm¡0šåÃE” ô RÿBl ÀVS ` W ¬ý.W  ‘ý LP$ÉP.aÂ%"W(s*àÆ%*Æ%IÜ(.UŒ/åÜ'¥P P(õPS”Ú!6ã ¹@{ÿÿê@,5Ú š#_ ï õ „â0ƒâ‹’í›“Û J !ðš› #ó x¿M|@\ÿÿê«M*±ßG"KÏ ´ýÈg „X+AŒ£  %.• Ž(/ÌR'Ë %–l :" « æû”0ä .yää_:ää? @šÅ*ëÿðY$Ä%.=Ä7˜P /gü²&Æ/&ðš@   `B¢þÿê°\\ ˆ!0š( Ý Ù¶7.Tþ‡ÐMþÿêhŠXÀàZ” ++âêÞèÊf]BŒË•à\,^pæ B ÿ )r 5îÛ /`[ #tŠŠ Œxfbd Lq'(î—ÚìÂäf 6 "|(fdC'E¯ˆÚÊèÂf%!hH!€%a0È 2@jMi šl0j1žS +ÊèNc€‚r ûÊääÞäHB† 3Ø iØ"/Ø" ü&¢0´.q¼/¤'ÁP/„P'ôyxe0”å à”š*ƒ40ãq€ áCl²*”2Nl ++), „•ñí$œØ(HK|‹à ã Žâð ?:Bá á †âêîÈ‹¸î‹‚í™$ ,@/:=1Žç5à†ëq ‹ˆî‹Ž8í"OS ++R‘€å0€å €1" ……$ P5º)_1ÿ/áÝ*ʺ0à ã˜ÿ ‘åàŽâ&Qã®ÿÿ ++úŒ(IŒxIH8p8kÈ/0”4/É4Û/¹4¯.}4\` d¢-WLHT%àšb/M´ œC·U¥&Apâ°%à‚G¬T!žxð< .=tü ++"7W? ž   3 áE t’., p0 2 ‹8pQ' ù!ñµ!¶ÓÄ .AÄrø fEà%/©àÛ/™à¯.] thäu/! ++ä3/i ++äo %/% |Û/ |wXä)*å À.ÑüäwÊüÿꤚ– – in ++B™20 OäÊæèÛD¤U O^p@rt›\p`vPzB2æè~ôXBx  ùbR$Z]—å —B/p:uÛ)Ošåè¥SzBlHz3PxÕ$LÒ"T%P ++~h4—V BP ++ +„&7Hzü|üŠ|ü/~÷÷ØPÀ A™EˆBl€, ' ++˜?=@404€4Š€42_(‚ 6`„Š„CxQ(A3â†,(([@B†¤ˆV"‚». (· ^(Š¯¡ªHàäÒÚhTB«¯æèäæòÚ±ŒÇˆPˆ5  Þ(Ë HPìBÊlì<2òŽ/+4°B!Ð1ƒ ŠH‚ˆ-B b@ePNX*PFú’W\8I'”[<0,HBý %0 ++ð®*K˜®*µ Pœ¿90ì–Œ4B´´V ++0£°6OšÿK˜dN@˜š)Š¹‰¢   P!ŠUb ŠåV®=&Q1†ÌuJCÛ( ã(+ã(.<]€SBC1BC@- „ À”w)`PePô zT ++T†T„©:z‰94c‰9 3àý8Fý81Ì ý8@’å ý8ìPàé8!œ ++€@‘âj îõ8e2h  ++ *™  ++Øü ëã]áHá¨<LÔL H°-°H´ º–I¸“ E<p“t„å „å ™3  ðÿ*–[+ K,é ZøhƒmY-<*U00 ápdQu;1 Šà²AC šåBjK 98*U98vG= ž¬”1É;q9Í;u9 i9 ! œ" LOh ¢í  pOh  @ƒå ƒå€G 4l@p‡5 Ý ???8Š_ ¤ Ö GÍ _¤_+ƒ`X½ˆ’Xµ3ú!BÒ¦€…8ú¢ u<¡øB¨ Øýf¤$9>õB&Å9> è ÷a†bW®Gj@ ++ ±cY=>M©c\ +++¥ Y=" Ì’¾M Y1QáánL.L&0 # ++ < 7'”< 9t!4 ++C&O^_$ á¨@ —å“y9œ ".N ?!?? /± aàšå@ŠlllÂOÄ ô)P‰ÿÿê@¨) C7)?)?|@Bâ¤9ô oÃÿÿêJïÜ   ¬ !´30„¬ ´ yÞ¡E;Sv ++¨ ‹œ1‹åœ‹œU‹å à—îQ ¢bnL" °pü l­´! H°p°„åà„â  ò´!à— Ô¾ A°¨ /Y´.ôþ píþÿê0ÚV1#Î~Å&@êÜ9(^–¦8š¨¸-A˜-A5HHw ++& ++xK ++=…\@XA! ++ˆ$@\=x`8ʨ/A' ++p#PdX0Š(fÑ ++C¢¢e=$`BÒàˆ v L'Q¢HˆiQPˆªaLh™/˜L>@ªHL?5 •,N>VFüÈJO>)0vB/HÇ> 8M²B 260‚'q`8iÂ2P((9SpBr`ÇõÇzÇH?¸äÊÌpzz_F :ÅMa°@èÂÎ$"€RV ++@R¸˜B¬  uX ²4rn‡MV÷3 ++Àå åà¤i’Ö`^ã%z â ¿ ++œ ++±úœË 2àØQCÀÎã %q2pŠ=ßjÀù< m>"p€QÀšq 4R{úaàyj!r!rk!rK‹åHOHPàMjH?Hq à’åŽwL"“o5žà D%r%r%rÒTY¾˜PVùÚ0, Xv@,0dT,EV( áXÈL¹¦l/±ÀhhX/X o–Z,}þ* œhVõá€|/À?PLèi€"À•{lr3S Àœå‚DÒD(d1 à‘j ++·5÷ Žâ å ‘åŽçMuœNS@âš, ä‚ä*Œ:§D"r‘u#päDbD£J<4“âH€!àž¸j=0œ»Aâ ++¾R ÜgàF±0“å “å‚x»ùA0’à¹x 3’å"œx˜u @ÀïI$ ++âµþÿêÜM$$°"Àê!$1‚ (à»Oq œå šð j@©\ä'jä)äS v{å0‘åä"<ä:1w,1wä"äÈDÜy1/p° B .Í°ÛvÌT.!Tµ<]< ¤P]“ÈC  ãeT`† (d’üÁ(c#(yD xŽ MÉ…Èh+)hh+%!ÅD%àœ  ’4råàâ°o@#,SMhæ& |*É|"à " @+x e0Pª6H~5 ̤$¡Šåà ã,àŠr' z&\¬.U ¬èC ãæc äPÜ/¥ ÜSÌÿÿ ++Ϻä¬ nÌ ++¬Ô£ 8H–þÿêÌ` _Üa`Ä{dldÅdQL/ L'8þ¼p[+þÿê$-|þh&ûýKXbZ* À|q   ;+•Žâ å‘g°*¬"¬/¼ ++ / ¼ ++D"ï¬/í¸ ++ *ßD`&\ãÓª0ã¸H´“â¶jŠå Pä ++®QVã²` ’åI‡ 0ø ++X_Ožà–ü ++€„|ü ++„B"ÕüB.Í p lV % ‘Æ88/0Ã/å ?/9ˆHHÜ Œ/ ¸ nHɸ¨ pÔ <L*LìPÓTÿÿêPVãÕª ð°ѹžâ·j ,cŽÈA›—^áÊœ`üjôX ++. `à/`à àBÜ /@à /2àÜ Ü DD€VãÓªXÀ³~´ v €œå žå0Ü·[[W˜ ØLì®Ðûÿêôá<"1àƒ¨.PfA“à*#ÀCàâÅŒHp¼ €¤ ¿à˜ H/©”LÙkVÓ[PùPÀ” ++¦ /àT küMTŒ ++ô ’‚>Ñœå 0žå šå ƒp , @“à)( øøøÐ"Sû.ÕT"|þÔïÔÐ oDÐCàšåÝû[ˆP/mtOàšåÁ /µTü…ÀÐ"x„@žâj­"$@Ø ++ˆ hkዠĬ -Lix"&þt ++|oäuÀÕ”ðÄ 40 /Õ0/ÕþdÆd/9d«( ++? X‘X@þÿêÊ' , í é, , |´¯ˆúÿêäp¤»¤S¨ ++ xà8à0žàŒh  / 0øLð_ñÄøìøoìEø ØøL#ú ø/>ýø/ø;/eø /<±LNÀšå_DH/ù@Eÿÿêè ++)1 0Šà 4$ahih"Ùüà ++à ++ nì±°& ´Sÿþÿê PXoü X Ú bßþÿ ++Ný ‚Hdmdâ+ h./ýÜt8„ €å À€åÌh&$àИ.ù˜sZ7àTðoÌ]T Ä1t`"+sf@`†âø"&üB8.Ð&üÔð L/éL/üûl/íûl/Ul œ ”`µ` .²ûXnŸûÿêpÒ4"p„/ 0x Ô x"|ó ¸øÿê ++Ê(˜B¶8¢¬ B&fFpB.½ ¬! 2!"‚`žHvkGæêð8žøn0²¬;]x°  S° EUJkqÀ á Šo&à=%>=%"$=% D[4\ã‰!àž§1 Ž·AopžàljÙ5Œ"0ó j쵌‡pûUSGˆ0“å (0á‹ uKP‘à5++@‘å°+3ã+ ++œ¯ /M˜!“Æ+ôª›ÇX•0 ÿ O­`" à‰"Ñí#¸\* \ `±_ 3 ã¨Ó´i`~=Nœ!ççDW|‹ëG/õH‹Q/1?ë"Dë@;ºd]ˆ — ;LÖO'»%‘‡× * O//›+ /+s//q+ cD<[<;<9<<</À$ o̘DƒD"ÙþDäD/ÀìhìÍLd/Yðh«T/¢ÿË•äß /ÑÜzdkd/5d*Pÿ»XX4$t ++tÿ*/t c /üýt+/itO/Ítc/E tO/© tC/ ++t ƒœœ&œƒ$Œ” /ss ™,¬™VSñS ´Ð /9 ¬ @Øÿÿ ++# ‡À¨:— ++"(ý7$ §}@_ ++Ï}&0’ã?` x` u` /Àd Ǹ\¸<¸:¸¸¸,¹  ++œ¼x Í/ã¼$/% ¼̼,/‰ ¼ª¼¡„ ðñh s“’«lG° á sXsXä/°XnøqLÜq°šå 0›\7L!0›rw ['@['¼ˆ„ õ„ ¾Çç0X/0H QkØ`"0¨ 1à›ÏÏ$PÏ!Ï ++üüK ÔC  ã÷¼/à— ¤ 7‡´ðå¯hPUPPɸ´/©¸X[¬0P/ùO0šå@L/uo/ùG/UŸ/ ;/Y?/­;/ý \ Ä"¿û¯&*½û0 €ä .mp xáÿÿ ++¤ûÿêÔÅXLÜúÿê¯÷Õúÿê¼BB® #P LiSe¥‚WQ㣵^z&!# N^_Lj Ý">µ%&&@²dp6 ›K =xSRp³r*y,="pœºœ Ùœ(v£‘„»L/]»L¢ ¥g\‚z«<"g<æ¦@& 1S6 #=Ç<X&y%€àPâ$jfe-àƒUªy%j &¦ý&¦ m,({¾ õ4r´:\Þ 0\Sb? ƒº ƒç@h^oH¯HçNë<@ ýàn¦+: ¨@H+UHTR-ªL¡L±5žTõT @L.A”|P$CO…ÿÿ ++ô i¨ÀÝ4  GÈ ÌP ÔÏ[Ô‚íŽA0Pà&á'1ÐÐB.}ØØA˜/ à…Š/üøÆ Ôt /qO@šå÷M%'âþÞ©`/Ñ ÇdL/L`/­þö©$|/™(.†þY „þÿê^ ++ê Ãb8’®@Bn "Êj¸Hpb8 Ò® NÏQs®xBl"AxBLí;® >aZ®p "do°™²H™²xªe! ++ˆI`B0¯ËXBT8ú® ++("(`|y ¼ @;¼ñ@àÂäÂÚÊèÊä@ÊðÆÊÊÈÊÈK»õ>"#JU£<ó‚°øB¬8²°ˆB$f€½Iˆ–>õÀ²ÌØÒÜèÊÎÊä~^SvGf2°˜GŸ=XÉlëI`BhW„2°8nS/!S.‚)°À²°¸¸B´  !( «s0€á ++“zr1×Ó FšåàŠ:ö]çðQ ŸºW ++[}§ @[D ÁD‡I€¯N1 áJ$ ÂàÁR᪓„V(— TáAÚ$"ø!‹ ¸¦9©‹^q› /{ÓºhpÓº&^Óº$9 /Õa?¹ Í"pLo '_—Ò:¯|í G@ —å€\b ñ!ÜWã ‚à‚ੈ¦@•Ê(;}ÐOž1 y üOž™ ++\5 Zv,SKSL2= 0LL!Ÿ Ï«í I$½®/å£ +…%pšTèSŸ§±š ¬hä3×q/ 0ò7.|f$½\­\]\“= P­Pxƒ1^ãJîA8EŒŒ/Œ.ö=/Î1&«—“àjpoàåpžt ++…tôú?Ršå­ ++ï /Ñ` ++* <¸èT ++ÌÌÌ /QÌ/ëþÈ/™È"Úÿñ åú.0 ãà ++½ ++@ 휹 ++] ++A¹þÿê°@³/Iض0áÈ ‰@ãfœþÿ ++Yþ+ˆ.ÑTˆB†„   ++M ++åþÿêXšB @ £{á]’ 2 @mI e1bq]8q]0V"P/¼¼Ío!( d"´ ++h ++lôFh甑L8r´8@:´SI–®8"´`Ù Èfº´XÇ ++Fò´^| ++FHB & 4 @2C!2´5]4hB‚ŠˆõNAv lq1J°™o3Š° Ø ,˜¤a9ú°Ð7f=°€71ØB£$Ê ++þ•aE ++°ÀR%GR/I ++R'eQ°¨ïp ++’`8S¢° ++0d qj¬ ++ÀJP¹ hEpL8Ò¬ ++$ ++%èÀ ++§àB´8%¬j² / ++( `nA-:¬SK`(3²©¨©X;*;%W®èB¸  ( †}¥ŽP {ÕUhe“å “,O Â9 ˜{€L%“Î3>Š¤_<j $.ð LL>PàÁ¥3 i5ÛÈdgXT /ÁT±D/D…5ç*ô²B¶  Ì("p"K/ëÚ´W#ÝK–= ‘'7Ç" a‘å’ådÌ©d40šå¬†Ô}Aµ*hè žè (è '"1ž/" …U”ΧŠ4»‚8­˜ Œw"Nœ^sD 40 á/3“Æ//  Ræ5N ++‚A¿35‚çà—ÅÊ4 ð ++àð ++= P|ð ++Ü“@' TP ¼hd ++¿¼ RŸ ¸Ò@ Äš?8k l .PP}‘º<*|ÿ2ð.™dÇÆDÿ8 ¤0I™ 0r=²ÿÿê&º(pù1€j¶‚S ¢¶É  :¶à ¶2L¤C B¶C º¶CJ¶µQC@B´’e@*¶èeD¸ ++pò0# õPD "¸J³?b¬xCÚ¬³ÿЂèÊðèêÂØ@vŠ@`‡a H•fR ++•!ÐÆÐ(P BÒ8_0ËÊ>¦Xßæª{ÂÕr *ÆYÐ#µYÐ%àžZ°6$Ÿ$š?›*µZ þRàžå0c¤8}Îr`0‚å@àŠW,‚ås˜*@Ì¥W ¼¥ŒIÂ/ @*…ºÐDÐÐnЗ]Ф<F6XQÎÜ íÍ ¢>r!@€R)ÏÊÜ¢ Ú^µÎáô õÌ)Í!& &+Ø$–mò >"¾$ÆêääÊÜèZèäÂÜæÆÞÈÊäà € ++ÀHÊñZÞàèÒÞÜæp ++ÄØÞÆÖùA(,H Í%®ŽI¾McÀpÂ7*7*ÒÜ6P@BÄÁnÀ@È1@È);Én¼ÇÄ. © ­ 0 —üãÆ)ÅX׋Ћº’Ê ÆØÞæÑòÄ(ÈÊØÊèÊ."H¢Ä"¨hBÎ 4:Ê!)Ú! ÿ ª"{{0€8ëqýlÆX¨’BÆ ðR×>—göqŠéqbjÌ"â(©Ð1Æ È˜`BÈ  ²{J";rci TC/žyºP6Tã*H‰‰œ/2! üÿT‚$‚$ X4j )eÃHô/m¨” ½PÈñ4Ž‡BPªbª.p‘ X¢È¦ójÈ0ÊXòÈ ̸ b’È0 8úÈà ¡@ÐHäÊæ|qXÞèÊÆèZ ++• BΟO8Ð{ ++Ú8 $R ++U‘E ++/0 «IÒc ++PBÛ!Nc ++zæ  ¨ MÛ*ێܹ\p(®®30“¾3 “åŽ,1@“BSnÜí ++lthB á ouW3”G›a!Rf3 b i0å ãz/ žA ‡å'@*MHAm ‰÷ñ75Êÿÿ¥X0 œÛY [nHÀ/IÀ–r‰*rÔTo]T€NÉPòÚÄÞØÁ P¸BÖ¼xÀ(rO¥c †i/—åž$ (¹w ++¶.µ¶ؘð‚ÔHæäÊÚàäÞà8Ô 0àêèÁC‚Ö‘0 ++$ÈÒæÂÄÛ èÊääêàèæ'®+ÊÜc Ø ++0†Þ ˜ ™–wm)ò"Ò‘©.q«jþœP#ÁPèêÞâ ®’02uÕž¯l ++È´(.u´£P(ÅPP(.PD« ”ù9í]H"§/A 3Pã+'E ªprˆKZuwoIr ++6$ ®CHÒ/™.´B ‰9— †d.yd¸š’(’’ è’’ u8sp$rR0c±0“å0âSãËnnxî ( ÊT§oD ´ *ÅL×¾£­;Bzns Ü\z+à4n~7ân's( ++WÚÜœ˜v(n0+Ü+ ÊzÜ% Ün8ž~'¸ k :ÞXt,Ü»}P8Bä&à  2 /#—s3/—s;/å—s; —s L¾á „#„s„ ˜„(.„ksã ksßÏØ bØ|%/Õ/s¯sG0(.AlL\/‰ 0íGt d”Êy 00ãv þ H€DéDÎDDzy£t"0àâ&0t0 0t®„ÞfP;t+0;t'X5 ÛypHBÞ(‚0BÞhvþ$Iêä„a0Bä ++È "V¢Þ ++m!0Å ’"ÒÜìÂØÒÈ@Ü 0@üæÄ " ++0Bnè  Æ0ž1:ªæ«ñ ++ÂØÒÂæŠôòþNXªè\ ôÈŠîÊv"!J"`&ÂææÊär`ZìÒÞØ ++÷ ++ŠêîÐÞ ìÂäÎ;ê;(;Ì<fê ì2!Š2b ++ÄÊÎÒÜ‘F î!!!*!SÆÂæÊððÊðà  ++žnøÖ4"<@Ê@@tZØÂÚÄÈÂg@/=##j}5ÞÜÈ60h:Pòè׊‘”öz|B0ð L ò JP!% ++PP ÆäÒèb¨CZæÊÆX ù%© ++ÈÂèêÚ/†'¤c ÈÊÌÒÜË ++K'—$.†ZÊÜêÚÊäÂy¡q.)“.aCÊäèòÀ[+Ÿ-PäÊÆÞä+1h}qÚ” ++Õ žô L&&R ³! LÌÚt v(x Êh _ZèòàÊh-] .ƒæèäêÆèêä, ˆtŠt)/ ++·š )/ª1oìÂØêÊæB #1JCÊØÂòð_¿ÊðÆØêæÒìÊZ0 ò*/ö&31ÈÞIŠ‡ýÎúÊb­5”¼ÊÜÈÒÂÜÜÊææ?5© ++Þ›™7ž #½9|¥ÊìÂØZîÐÊÜxø–9xÄ­È©tÖÊòæ͘úÊdv;ˆPÌØêÒ¨¬èA"?î L;¢ 7 > =ðü ÌÞäÊÒÎÜZÆÂØØFbhü þþÂHÞÆ »!ô[AüG^ì þ#k?»T"lTDÊÈêämï  ++ÊÜèäòn¯hUÎêÂäÈý® ++&"Aj»@"ÒöõVÒÌÒÊähXC m9 L †L¥C_$ÒVððrCR Öà ++"EJ ²Šèº/ÿ=Ú% dh_ØÊèT\#GŠÄ_ÊèäÊÆ4Ià4iIòý ô\+/@KÛA"&M ++~M8î;#OJ)dÒÄäÂäòžPÀ±2Á„ˆˆQ¥š¡Ü,Sá– ++ ÚÞÈêØÊ ++¼Æ*n? ++Ú-wþ3ÞäŠK•UÜ-<8ÒôÊÝ/×WטZ§ ++u𙆠ØÒèÛŽàÂèp ++Wì}¢;äêØ›& G>BYóMß `Òȵ$¦ Z `ð  Z9Æd[°9*]£z"èäÂÆÊZ| 0 ]¶Fì ++_Ì&4 aÇ7z ++/ú (aª­î î°cÒ7&Êè4Þ cÇB êÜØãYò$e«PîÂäÜçÇg­%ígè m#ij"?ÒèСkv2…ZÒÚàØÒÆÒÓ/3g03ÅZî›4md4_ÚêèÊðÍ m(iogaâêÂæÒº×d( À%qg%H( F'h$”BNsa ="uQ4>X: \€!Zæo$ÜÎH&X€,w2;êÜlPw."$ Q(FRy#%ªJJ{®Ì2 #{Ê+ …£:}*7 ++êÜ^)‚b ++ÂääÂò)8Üu7_ÄÒèæJ #J1 v ¿±àhaÈ Š $ƒŠu"…) ++ڲĤ:î‘…I€Bë½2` pQTã¥ØâžÀ›Õ%*ŠÒA4-ÒŸ*}t+"ÑN–¯H‚2 ö†´ <`zSMd d/d(d dç!¨Ò dD£"dJ3>J3>J3 ðN4Ëç"HYHlz<•<z*0d^y&PŠ Fx79R@(¬»ÀòXxŠ1ÈRvþ2 : Ê  3Y Bå03 ©9ägô{&#N1Ý ‘zè ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # ,ð;B X  L$à™åZá"*€Xâ ++ Šâ`Ÿåêp–åàâàŠå@ ã ð–r]= J4,P @À$@ÿ/á¥HfÞÿÿê0(ò3ÿ/á×ÿÿê r$HÚÂÖÊZÄÂæÊZÚÞÈêØÊæXÒ(ðäÜäæZØÒÄäÂäÒÊæHB`8b ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #7<,»zøA Bâ ø  L$à™åZá–*€X⇠++`Eâ(P…â,à™å^á}: áàŸåêà€å  !¦%à€å Šâ`ñp–åàâàŠå@ ã ð–ålRg Jâ048 ƒâXû à‚å,°™å Uá5*°Kâ,°‰å ‹ð/ƒåHH4H4/íH3ÕH4½H4¥H4H4uH 8©žå^ãK*ž(/žø ++ø/ øW`EâôHE:hà†å@†åà´`‚åã ++Ü3$ ll l L| ã@1ÿ/áTfëÿÿê P2ÿ/áÚ,Å,´,ƒkS;# /óþÛø€3ÿ/á|þÿêp `&À @ÿ/á*uhjHó/cþÿꈚ èÂäÎÊè0ÈÆÐÎdÐàjìfÆÆÖpÎÊdpfØêÞZbP  P‚3ñ( ++ÌØÈÌÂæØZÄØÈZÎäÂàÐ æÆÐÊÚÊZÞÄÔÊÆè ++ ++)±ÊÜèÊä 1Þêè*BæèÂä"QèÂÄØÊ*4îäÌA2ÄÂæÊZäèÈ:#„KBîäÒèKB1Ð#ÌÒbõ ++J L  B ø î  ÍQTãx1à á0 áp á°šåÙÈ] ++ “å áÁÿàŠå 0ŠåpŠå°ŠåÝ¢<…ð Jâàšå 0šåpšål9 ”eû&Rá  ã „å á á  á p á@ ãð—åRã2 “å!ý': †åà ã à†å „â`‹åà‚â0‘õƒåã>@ ãðš•440‹å å0ôY0áqDÒÿÿêLd/éd Œp 8ô’ ++ÌÒäæèPB®8B$8 ++ˆB¬ ++0àPpBb8ê(LXÐ ++ O ÄØÈRñTãÚ0 áŠå ŠNðÆ ++àâ^ãn¢[ žå^öîR"¹ Jâ0šå à”‚Ó^á8 ++^ã4p=0ž*(*0*/ „CCàƒâ0šå.>WàCÑ.“ Q*Èä„å“åšå šåTT@—ÿÿêH/ÍH8x@æÿÿêȱ^ãà“üŒÔ,/YÔÿ1Ôl®à áàÎãHpà ã šå@% ++h@ ++ H’çWàŠåâÿÿê|ÑxÈàšåàŽâçÿÿê<ÀH/HÛÔ ÈL„^ãi ++XX—àâ^ãb ) “à ÓRá àšå@ È&Ûþ´×@ÑÀ,/ÀÿvÀ_ ásH&iP@ á€Tã\`õŠåŠåàšåàž¬°àšå^ãO ++$€= ++0ŽâÌó šå0šåRá ++4@0“çP9 ‚@W0Šå <ÓGþÿêü  ¤Q  JâT% á84:4ƒA4(àšåÖÿÿê„ Ä"&þÄ.‘x „ OàŠåÀ˜Ù˜²Ð?cïO< à ü@o*Œ¼ø €.aЄTã’Ę ”¼,/Õ¼A– ++Ì ++@SØì/M ìL ™L8@"–ý@/Ñ @ 0ÄÑp\pŸàâ^ãXp,/E ppÐO'ýÿê€Ù€@àâø²V „ 88 R  „&t€_^ã_6^ãoV^ã ØôX1à$ Td `j¥ Ô\OG^á\ÔÙbÀ'/Àvdü/eü‡"üü/ ü"ûûü/=ü3"çû¼/¼ /Ýûü/Õü#0Ñ OŠýÿê˜%/=˜ÿx.}ð.)ûÚwĪ8Ó ÓXÓp¸² ++ ++#?(p3õº ++XB`8J?ñ˜4ÂÜÜÞèÂèÒÞÜ$ÄÆlÞrÚÈfjrÆîrÈæjZÄP ˜(˜7<01þòÊðàäÊææÒÞÜ „– æÞêäÆÊ €¥æèäÒààÊÈ €a ++ÌØÂÎæ"ñ€ˆ ++ÊâZÐè0ÒÆÎêêpÚØÐÚbònòîæÂÒäðÆÖZ`Ÿó Ðè$ÄêpbbôdÞÜÌrÞlèÌÆZlqÐÂæÐÏ&`ä|/0§rèòà«ßaÚê$~¾AK0KpÐè2&>&—vìÊÆ’ ÚÒÜØÊN’ræÒôN*kk8k,? n &i&aE éEæêÄï2——@tep""E‰õ äÒÊæXú ++H2 ++hš ++ :ÁÊ ++@BH ++ £ÅXŒ"æòÚÄÞØZN1~X{x‹¬‹ð8 @.äÊÆÞäÈZÅ´ZÈÊæÆäÒàèÞä;X@”#2êÒÈ0p'-ñ0R  Ø "äÊÂØØòu26ÆDŠå6F"‰i!zÆòþ5š   „@@ ã>bàžå@â®S&^ã^JB}àžåàžªb *¢Ršåe ~+~„@ ô0M0 vê ‰<. öj €@žâjøP àžå·0 ãÐ *åíf *¢ U2.wÿ5pøó"ÚR ++8 x(@àèä@4ÆæìntÌãÌÒÊØÈZÂÆÆÊææÞäÒ`!@B’* €B,4!0xb J @ P ++} (3= ++`݈y~ó p‘ ÿÿÿþ(2xzƒJ0FFxF`æqH"X=òK A*K A’K%C2K%CÂK,PU‚®‚ ++!XFeO ++ F¶. ?à îä̘cõp˜R° áÀ˜ÚBÌ 2 ++ù!D<L  á` ¶¦3ã“LŽ"Ž—rrú @pŠå*R°ŠåÀ.~ t}! 4P pšå:R°šåÀŠ m&WãB:ÆWã ++Wãì°°2Ú4Èv¶- —*¢ ++#\f$—å`“l€hhЈn„/„€Of\%é\ B\¨ÐP Ô/D@ÿàâæð#'ã áä áXàŽã 2 RPð ++‚â ƒå“å  ãÂçv.P@0 ã8/àÈ $F¨,ôv ++(Ž(%+ä'äà/é ä-$$qk à“.UØó Žâ ƒå“å  ã Îç@—å ++à—åÖý"àãRáG*à‰Œ2àðX  ø*øA áü@ÒP@ /Y@8@šåØ@à€á2@@à`¼„t Íté8 pA áºÿÿê`E  ã@P0 ++P4›6(0VD W6Wã(@@ @  ´ “ål0 ã0Îçì $O ã@ˆ.Uˆ_ÞÿÿêN¬,œ¬'¬,/ ¬¬,<¬/ð¬+­¬>¬,|¬X,/Y ++¬ ++\/Wá¸)Œ¸#¸,/ ¸ ¬?n^t* ¼0 ,ͼtÈ( 44"¸,q¼%¼p¼,/‰ ¼`y/-¤;L¤À,Ѥ  ++¤¤dh ++|d4/Q4æv/Cü¨ ÜŒô ++/ÝÔ .ü”àƲB,  .FàÂÒä D[öP…5@A ++x˜ äq/xŒ ü¼D¹D@·<1 àžø¤øâü„„„ ‘2ªA‡ ++!à<ø|/Š˜TQä" l )L L0¨.Tì éLHS ‘åv)@¼ÿÿêÐàX ìR& D<","€0à áŽ-ú1 Š,Ð@ šå*!" ÜR d00šån) P ++Nâ:,Ø. `OŠå p+p0šå0Ë/pYDàDfrè? ãD äDR<à ଼" àª5žx *x(/žXÐpÐmXÖÐÐ,åÐ xÐ.=Ð4 q4°m4.©þ¤±F¢$îÊÂÖžÿp0&Êà749äÞÜ3Ø$ ++2@& ++b`B¤$ðxB*  àêèZêàèäôø0  áÄ*(b$„Pº];X@ ++< ++HbpŠå 6%< ô .%Rpšå ÈPßÿÿ ++ØøL/LóÃÿÿê’B(  `6 Ì0¾bðã&Sã$ʃà áò2@Žá¦ 0Ò1SãÒƒÔ!b ŽåAá ++u ’åàà j/º©r²bWÂFØ)Sàã𠪨1Ü)5 HD på #´à1Q888OOâ„4,ô@ ãJ Dª íœ(0Ìö .%Ô©æ JA*o@j(o´ h:ÂæС`º(¸cHB`š8À3b(=Ð "ÆÞÚàÒØÊäZÒ ++8tÜÂØ F¸ô@äÊÆÊÒìÊÈ@ÜÊÎÂèÒìÊ@ÒÜàêè@üæ< ++HÞÞàæhB*8 ñb8"*8 š,R.8 b,`R.H„b B,P Ê ¡ 8R,¸2"02%ò+âC’,©Hú,žÅ8R0  —8 @zjTãÒ…$8 ›åÄ  °6o0Šå°¸ „ ++¬6p”˜ Ì6:$°d d /”åd @H ã°/ @Ø Pz ¬¬" @d ò.D<*",/ @Ð/¥0ˆú54xDÐ x/x Ê~½Ä dfÄsÂB¦J@ÐB*Y°8b0ÈBU ¸÷B R0©‚a 00‚€[3@2¶ 84XB†¦0è ²$  V`"pN< %Ž8¼ÀÎçà–å^á¶5°–å –å °–åQCâ& ñ>óà†å†å †å °†åp†åø `h: VH"  h:`h:¦)p TaT ­°4PBv±0  š± æ–— ŠåŠå.¨ˆS™ ++ J#4+/š¢ ++ô6 ++ ®1à”¦; Ê/šF.±Ž n#o:–D.õ¨* À2#9#=0žr@D:`Bà†å" †ö 1 à†ú Pà†å ¶¡à†å`Šå&S<)zbà á@Ú&úa —åž^#°81 p—Ò$.OpåÄ[,ý2"àpä~ ++”æ`Ž +YJ4@šå`ÎêµJ0pšåÈ@â® PŠÿÿ ++ú„. É"XÆ#ñ Qÿÿê"ºBt  ÚÂòÄÊZäÊÚÂÖ#@" 7üó Sá“D@ áã ++Û  w ++‰&»®A‘=0šå3:ð ++ ++BÂäÚfdØÊPBr  *A 3êèÊY$vÞÌÌæÊèæ'D½«µ« #1 ï+`–:pEU‡å ‡Å fB .…W/½|W/"à_ ¹+ aW:€“â_jç!àŠ«+» O.ù™?·+]/P/IP1µ# Tâ j å0ã µ PPààãla¯a`šåðéA' ш¹ Råÿÿ ++ã9'£ T%{@XY" [ ¤uP_‹ÿÿêƒÓ8 cÌ™)£ íË>©)KßDáô$âB8 7è6Ò"B >Lh ã&  ãÏK"hK"Yö1pžÒ J/"KJ/` p†å`ˆh&¦J  ã°§³J0 ãd0[á—´qà ã  ã[ ++aÀŠå°ŠŒ_$àŠå(û¢ü!((s$ ++PÀšå°Üv<[Ds bãXÀàUjdâ`ñã7à(ŠåŽáãB ážÀàÁPá(.Ž8!$÷0žàôkC á ÐäW, ŠâžŒCŸè ñ,¡Ù, Jâ$Œá, Šå0àš@$ôŒ”Ü!­¤ŒàªjÞ P ++æó p†å 0†åÀ†å†å(Þ|E (‹r1@†å,ø0à†åô |„".áž4ïD áp üj|ü0€ èùJ“ PâIj%lh\\…hh0SpA ++à„d”0”àG@ á$$Ët`žàjHo$Ô@Z@OC á @d#$à2 Z]Ø. ++pFŸ ä,_¥ˆ ¡ ?šåð GnGYÿÿê(šH¤0 ¢ÜE00À4°o9ÿÿêí?(šÌ€fø ÅÔ,€@òþÿê‡h!/-hOÐþÿêxì oø‘pP(@Šå¯f@4l@Ô [Ô¯tLšåŒþØ"[ï ++– aZ„SL_à ãE>_ à ã70Ä)"_à ã_à ã oà ãÿý/øýÀñ/êýü/ãýÀÜ8ÕDÎýÿê°;  ”#"Ø(-<2*ý "pK @à ++N&!à—ô 1Ð./ œ _p—å–È\$Ð+f4¥ ++¨´L*¸ 4À á°oxýÿê4àh=0—JCl00 —x㘔/9 ”S”$”Í” .” Ð|/I ||4-Ù /ëüG/i ÇGO®üÿê› „íx&.˜üô ‘üÿê¬J xÎÆ\8õ  ++8ð p:Ë8 ++&ðœ5P BXB0 ! ++hÁ4(š4x"å56HhC˜B4 &¨"XRÈÞê¡9÷ÌØÞÂè8PæÒÜÎ0T=ñÎÊäZp8VêÜæÒÎÜÊÈ4F…bl8H X!gdh8Z!B!gfd8D!\!gh`8^!`!”b!d!j”f!J!l”L!ó h ÌÒðÜêÚ8jÆÐÂä8N ++î ðlÄÞÞØÊÂÜH (êÜ‘7pÎÜÒôÊÈ@a:T¶ <H ++ØÒæèÃ:*Ñ@> 4ÒÜìÂØÒÈ@l @æàÊÆÒÌÒÊä;(<X+r8ÓQƒH(ÒÚ~<ãXBp ¸ ædw0à áyh…!0žë…A0¿MS—M*0GC"0Ÿ% ;—U/—åUÅ4) žM P&Pã,‚0å°“å½p ++ å÷ÿ+GS*0Ñ20&Rõ‚ ++’åP4A ’åø4 Rã4@0 ã@ à*P é$©° 1 0“O`"Öÿ¥ # à³Ø8K |p%Õ ±:Tq’8>Uðx&@ÒàèäB ++æ±D ++ìÞÒÈT AÒÜèâð 4µæÐÞäèFH]AØÞÜÎI< ++YJ$"QL>€¾èN ß>¾|#æ `ƒàèäÈÒÌÌ ++š P3¾ò)R Lp.RPTVFHXZBD\^`bdfJLhjNl LK;òBn  à æf"0 ++ªªr%à¿ ™JÃpå °å&[㯠++—* ++2›ï&HÇ8Ë5//VyV`£Ï5p£)í…«ß*· ++ V¨£PØ_ºà›åØÇ×? ž ++` ̵F ZµÁF ÈÝ"ƒ,(a ++/  PÃÿÿ ++»Ò¸ /m¸‡…D€;)d4!ƒ’ÌØ¡0°>}!€‚f‚nx#ˆs#Qòn ++@s#8/#@7D8Bn†X4zp²G8-šÌÊdp8/Â!P%1º-0YNX3Ú$5ú?BPÓ>B7ò85#ó82râêÞèÒÊÜèçH€ CØBÞpu X @`k>f òr ++0•#VHê!PC:tCHì azvP  þ#ôŠvPBz Wh H'"c±L ++°‘åà‘ÙÆ'0j+£àÊ!'…¬Þ'0‚+" V*°š8ÐTá Ká án a@çà’šö y0Nà ‘‹Q&Qãþº>‘§É#‘ýp^ãô- f\0^á/0 áÆ=1 0ü&â ƒâdø&1 ô&1à—, 2  —å —^2 ¨N1ašå@ƒà@'!z$ dmL[@šåÙçÔ áªC PI â¡(Žã$$D$·ÆVá ¥ï:*/áÕü+üüüÔ+y™ Oà ã‚Ø/¹ØÞØ Ø<Q–>žLØ/‘Ø3Ø<.) Ø/iØ+hØØQØ|€®- Ö ¨+¨} ¬,ˆ/Yð^>^>ŒµF>’"³þL/pú>õ@œßÌ/5Ü¡ÌÌL/ÝÌ3/%ÌGŠ>&@Ì/ÁÌ+/ Ì3ÌL/© Ì3/ñ ÌGMR>º/ÍýÌ/ ++Ì+/Í ++Ì3 ÌL/u Ì3/½ ÌG* ŒNZÌ/Y Ì+/™ Ìô$ô<. ô/ýÄ/] ô|(|>F|/ñ |3/9|G.•|/»ü|/Õ|+/|p ++U.™|/züÄ/Ù|ÄX.]ÄIÄ/Ä2C gD.@ üÿêú2B L  t€àÐçA áàXW<@þàá<Ñ<@8ðK± á»àá €àÒÐá áÊ'L¾L* 8±a áFa áTÊ ŽI.«ûr%¦`~:ð à—åK á@žçàŽàÔ°ÞáÄï á.!Š*`á áNÙ,„'}Žûÿê°‰þ%ˆx(ôxpxjxœ± @ç à€à´àÞ¤Ö¤/°€ˆNˆH(O°žåx 0x*x < âæLP *@"ûÚKH¬Z>>MX4Pá>M œ\\àLóúÿêTîðð/äú€ê# (•. .ÈÄñ ++–úÿê.Â(HÌÒØèÊäZÌÞäÊÒÎÜoXb>“hxpü9b*zX7òºz(T(V(jøc bz@ Ú$ F(H¨B~õ6¸›>Ò›>"@û9Bš18š1@š1–0`TãªkM3tâ7+Ë>$ ãŠ2 µŠ2Cpšåè+\"@‹6Ù= ýÙ=bà á@‡6I_Óÿÿ ++ÍÂ/Á"0@da÷>7)A@šå«÷>@òB|=?È6ô>ÓUüSãSÊ›g+g 'ªì ãƒ0v- ŽáSÿâ:#È ++ ??/ÛÍ?"àõ`<-ùû§?J- m?WÚÿÿ ++±Æ;U'D°?$Õ°?…°?. 8ô°?̨?%¡”ݨ?ÙÌ«@7‚¤ÿÿê r×2²|¨?!h@r|º>:8Û$p 2|¨¹?B Ê|¹?12ù$IbPM¤Ú~8 ++z%?!Š ++€X(Z¨B&º!:SB(D&j!êó\(^¨€<ÄÒèîÒæÊZÂäÒèÐÚÊèÒÆZæÐÒÌèZäÒÎÐ7!XIÀÊz ‚ ++Ž€€ì.eh ++ßÌ´±L/<p3ˆL `L.I\‚O<…<j&c#BCªÇD€Bv\ƒ’x”` ez’@B6*01C ª’Âg "’ ++ "VŽ0žÕE–Òl0€WìÊÆèÞ¯X/Ê t7eçWšëe_Ýq WV[Z”Æ ++GÆ ++ F µ*J¿k*Ù™j BO†mv : º4“ç€/à .AI÷W2E@@Ù7l:Å°|_ ã£ÿþ³Œ…¯AŠXaÊ–˜–aš–HzD–‘C¢–‘M –$ ñM „rp.`B˜0@ ‘6ÄÞðŽ"A†&àQU wy0Qã%:1a“åŽQ$4@¤ ãÕYKQPôp€â pŽåA ápžåÀç‰ iM7-QYÊ.½° ++" àJå ++ST/TÁ–0 úÀ=OD’˜¿8:˜óX%O$8%OR8BšÕ"|Øj‹Zû/ ++Þ†&hÚ"WÚ"B/OÚ 1 ‚â U’å ++CQ0ã&PÚ51Úž§i @2‚â©v(b‘åà¯i ÃTÝÕ‡gÕ@ ßpð$ @”²JQ.aD@ch ¥_“çà[,1„7CŠj@q@Üä? *µ?³ÿÿêl ã¦ú< ñ<Cˆs‚sQ¬€°+Cz¬çDú¬KC‚¬çOú¬K°2(MŽ&ÜÎp>5); ;RppDžq â ++R†l˜91 €âT!;_žå À&„#Gà·/½·à¾!@$ ã /L/ LÄ)PB®26Ø 2RZÐÊØà«2 ŸºAŸK?ÎãcqëW¡¦£0ƒà0“å#&/å[å[%[¡ô e“°º1º ++Rú®°4â® b 3â®ýPä2°`ä8*°ÄÀfJ7*.,9r@;º. ~B=º.Þì-²ùg]6ÄÞØaîgãtL³ög!à QcU82’åE8# ++«‰]ÒS9 7Vþ Ì`3`` ˆ3Pã&| 3Õ—.ÄB H@UU4þ œüQ$@çÿÿUåómLD0¬ Å°(½'&#(((p=˜(è÷èõèè /­ˆDñDMxFË%óò*ÎÊÜæòÚZ|êÜÒâêÊ_G d˜´(H"£àäÊèèòZÜÂÚý9_å®8²(B®€I#S²˜´&a r²P$M ú²“ !X#G?Ò.勇 !` ++â¬Ì"*&û&ê&/Š ++Š/q"Ð"¶Ì*”%7µ@ €å° 0"!Ãç f‡r ÜTjLpå‹’¨Ü! 0Ÿ]šØ,(ºk؀؃­ô"q’åQãfÈ"#!‚8 "B!Îqå Á #ÀGSãʺ† ˜p¼áè;¬“*”¶ ++@1™å îXfm ¨1l!$<.œ¶qà€å@€ãŠP¸™ "늭:–#8Ü!¶+@v q© ++†h ¸"xñ¡à 8}8 ²[9¬Í &Í 9r|Œ H- ++ 0! RPPä-ð hŸ~d!›ô¦o° ãÁÿ©?þ©? F ],1ãf3“âdì"/àð.š ++ð1 0“Œ@ƒÀ&*N]5® ++$V]š(Yžåà‘é«"T"±Ä!‰s`* \´°.ËI¨ŒLiL´Ð#üD­D83šåˆH ã  /ùSpÿÿ ++¤˜#@T/MT,þb@@æ€$, .µÈH / áŽ ,vÈ Ú!@šóÆ ¤b .ÙZ ¸ÀÿK¢ )¢ L¦î°Ÿÿÿê‚ ++Ü<>HA£@Òæ@èÞÞ@ë,D@èÞ@‰Ú!ø³ @hHáÈZÆÞàòBX*¸û[v=f j¸ ++(v=Â@Bº  ÖwSTãH+—ˆ î/p/y3‹ ¼#‚À$E52 ++º) Ø8@ÆÂØØZîÒèÐÎ ÉG@(H!0IhVâñ¶àB8*¶q5@à€2¶@–†HVG„ÚÂè@ìÂØêæ>Ŷ_rB¶`dz¶``|RR 8ê}g(Ò]"¡²¶(ª¶Ñ›H ‚ú\H!B¶(V ¾V1 å]%kÁ7G:¿a2wVu_*˽mw c»ÜG`Eâ› Ý ++·Á„eoà„å 0í/ñÿã»í€ÎÙÇ¿7a’Ä$H:;HƼ ++û<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdldr›£H ++—£w ++ÆÞêÜèu¤n£—¼ ++@`jò¾ ++Ñ_Âð%*ð λ—ù wÒmâ^70$ ãÕ& &à‡ "3"""hå @å"àå/$! 9GY„ ý¿þ軎~<Õ ++ Ûyì†ÆÂ*á(“Ht»ñ ÊBÀ È ÊÚÒèZÐÊÂÈÊä0ë;R ++&ৠ++ v:÷äèV)à‘¬*0i/•O;—”I ,è @ ƒF<1 à㛣< €åÌH(E&1iîC ƒC nT·7Sã *W  { ð°žå0›å#1 ápÃãqCSáHL/«2à ‹à ’å" áÿQà0Ê ÀX\{! ŒX#A! Ìç0ƒâì?0ê" °ª{/0<¹ [2‡Bšå °Â½Ê’ÎS„!„¸2w0f†`žåžÿÿêy"l[M ì`š4<³"¨A0šå}›ã>@)ã>.¤ÿ ¸.É̸t/ t ++X?8C%šå%Ÿ2A2š@bchezh DBÀIfQÂÀ@ r:ÀØσ JÀH ŽUH°ÐÂÜÈØÊ@ÄÞÞèuÂ@Œ@€k1ÂÆèfns@îÐÞæÊ@2ñ@ÆÞÈÊ@ÊðÆÊÊÈæ@djj#) b RÀˆfa ÀX$ ¢"HCªÀ×g*À ++(χAâÀ› ++TÂ(Äu ++ Æž8  g gÂa hÈ 0a _)ê|?‚Ô|¹j!—åOm$–¨–/¨–Ošåâ,p ++zB’²$0{ 32Ȥ#PRI ++¿qí<Ú ʉGXø >Ĉdˆ‰ƒI1$9+;:½Dÿ®“ààVg%$1 ++µ ªµ¯ +Ájs(  . LAH‘ ++ ++T„‘„ƒ @¶ ++„0&HøàZîÂäÜÒÜÎXšÊMÀ­.`Ê(BÌø# ©Æ/ÜʧXì0 ++m0 ++ /0 ++: ++/Ý ++oÊ ++…è¨Hz\8’®"hš«0Ǫ̀Ψ¨¨î ¨˜Wr]}XSr ŠP’?Î’ 2"Ì’´0p<üæ@Òæ@F„Â@ÄÒÜÂäòW1" );=:Ê-–à @ü óÈÌ.áe>×àÆ̶b²B‘B¡‘B$œUG,Q áôÙ A‚å@è‚,U= Cˆ Ñ­ . Då=Ÿ?0šåÌUÌÌ à @° ä7*U Ì0@qàå@ª$= àa 4iäCN ]X@ð0$ÆêääÊÜèZèäÂÜæN ++ä%.÷Òp ++ÄØÞÆÖ(Ð(*N*ÒÜMYÔY6À g1g)11?c– ŠZÍ~l`âZ ÅX×YÐyš’ ÆØÞæ ±òÔ(ÈÊØÊ”#ØÊwH¢Ôw¨hBÚ Ð2S2K2:= Cà À¿¿0 €åÃpÃÑ–ÃÚú.M|µP®º¨ªBÖ ðz ÆXqéõbjÜF@!P1úÖà`L`BØ9|«Š-pŒSZ[YvÌ ³ y³[«ÁH@6T㈕ L-? Ýë)< A<4 u4­I¦:-#ÊB!„Ø8äÊÂ3APḂšر Cš؆2IØNðPÞHäÊæÊèZàäÞèÊƪ—ºÚ Ü ++0ý *9²Ú œHÞX ++à1Æ8 $) ++'Ù:ÄI"àyc(äH‰Ó ÔºXBâHÔf ++æ“,0 6Ó?ÿ7Ö³2 ¬Šó&´o â…üE5p”ò™8<\–„Éf¬4šäÎ ñè nÌÂÒØÊÈ@ÂææÊä5{Ñ@Âè@ØÒÜÊ@lpjX60@bn–Zm\FEê&6QZìÒÞØq™~Zgæ ++0¡¦PB0 HªÕÇìÇp”à ì‘a /qô‘à S p”åà Œ õ„Ã%fèêuìu$H ×sîs4 4u qîæ „+sðæ œ+u…u…ðu 0uòŒ™Ðu ¶3u+u[ie.]Tp”åCš ÑlÕEÎE‚E(Eä7oºò ++E*HôÚIôky¢ÂãY|Âç ;ÂSp”åe Œk õ„Â5ôÂ)H‰ |ö|O H¤ ;{3{ #w(›s\p”å´ é|Íük’k8kºnêö ++(k!„]ú]/øO‡!O}úO(þOüO‡%O}þO÷ ++(HÆÂàèêäÊZ Q0 ++ 5'pæ ++zÅOy% v%@I ¬(/à O·5·_,­mƒ/p­q1p1²*‘Ñ`Ô‘Ínš50:tZæÊèBX!)œxëa"HO)˜j~ ++ ø x´<°knkY-ª©2/°Š{UBÈ] "0"ß p+"œC@†å”Ín $Þ<0å, Š ++,Q‚å°‚ŸÃåÏì²Üö~J ++•,`µ +Ùµ ™,\’¨‹sVºi2äÊÌ€ö¨B ¨ æîÂà¡ ++N™E'ªWŠ1 ++iA-ÊÕ ++q‰  §rrqLa0Žâ@ƒ–V›Ï1a =a»´ƒ7Š‡ äXz ++˜úÇ ’ ‰XB XÞì()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #-Ø,]ôö*(B& x  L$à™åZáæ*€Xâ× ++0Ÿåê ƒâàø à‚å,°™å UáÆ*°Kâ,°‰å ‹å(f àƒåg Šâ`Xðp–åàâàŠå@ ã ð– ±,ø  Jâ`EâP…â,à™å^á¤:h¹à†å@†å`Špphb!pŠƒ:0 átJƒå@à_0Šå t¢ • Œ  Jâ0šåx`èg á G`Eâ8M8ô†åàšå à†å0†å0‚â`ƒåã ++Ð8Ð0Ð/‚å  HH ¦>@ ãðšå@1ÿ/á@OðÿÿêØÀÐP0ÿ/á¬lP2ÿ/á™À_3ÿ/ávUh@2ÿÿê  &À$@ÿ/á*µ`óÿÿêFj HäÊØÞÆ B  H  âðTã‚p á0 áãQN÷üÿSáÚ@ ã`EâR Rÿà†å p†å 0†å †å@†å(à ãà†å@ á’˜îÿÿêãxƒRáxÀàÿÿê@ ãÞÿÿêŠpŠåZO Šå6R€ JâpšåZ¦ šå áxXaX³¬$µT¬/ÿ¬/ XTãÿÿ ++…N <QÊ ++4ñ ++`BPÀBb8*xB"8B$p*‚ð*@BLPB0 (PÆæRØÒÜÖ¾ÆÞÈʾÞÄÔÊÆè HÌÞäÊÒÎÜZÊÜèäòX>ð8B   à²WTã *¦ð à‰å4€‰å(P‰å ‰å0—å¶4€™å(P™å ™ PR½`L0 ¡cæ¾æÊè¾9#Œ@@BŒ&;‰!‰‰2( ,‰BÚÂÖÊŠˆ¾èÂÄØÊ( ++4 ++P.HZaÂèÒÞÜZ’B‰ Ð #1€3Šål„ Šå pŠåf"'f ++&SãçÍõ ãšå0Šå Šâ àåpž:ò@ ãð—åtà0l  ãT€Ã ++ŠåXðº ++ à“åàŠåà“åàŠåàšåàžå^ãZŸ žå8 ãºº¢üb Jâ@XŸžå ã H‚I G ÈÀà á0šå “åHOàŠå$L"|N$Kÿ$ Jâ àšå á á šåHH[Ý\0  á˜5š˜9pž<˜<*<„!Ž @—ÿÿê$_ žål*ml@ „ãDD3˜L˜D±D˜@/ žDõDD? ž .9  O@ ã°àŒ,` á»ÿÿêŒPšå æ Cpžå|TX .ÙX`*¸ þ ++ð ã’å ’å&Rã ++tÐ ++‘åQãŒÀàŽàóÿÿê  ãûÜ„€ ŠåŠå ä [eŒðàšå šåšåâÿÿê tRtÖ  ãŽàíþÿê tô L.Íô.Ùþò .Òþ0ò2 ¨:ÄÒèîÒæÊZÂäÒèÐÚÊèÒÆZæÐÒÌèZØÊÌèËC8 ++@ ++‚8 ++ØÞÎÞä„x J P¡ˆ z ˆ “Š XBdvÁxB`8Ê à aâ ˜ Á² ++ B(("¾QÆÒÜæè1 ++x È k@2Æêò l   ™åå 0° :ž< žåŽ ‚å" ÖT *Ù\ " Ïö´šB  €„T㩱¡y ++01™Ã5 ˆ±ñ ã àŠåà ãàŠå&à ãàŠÏÍ ›*­›Í ¥@Šå —åš ++9p—gùÙ*í ++ ++ÃSßñ ƒåàƒâ àƒå@ƒÀÃ! ã¡O  ãã ãiã]LT„ ã„L@ÀP ñ¹1 0à áTŒ @šå  áØ›ó@åàâ àå Ø@ÙЄ+9³?@šåé á« ¦@ ãuÇÃø.¥ø_XXÓò"‚ æòæèÊÚh ++ëS("äBÞÈÊZ– h€C —H ++‘¨X ŠM1P ++( XdI bd0 ++$ÈÒæ ++ûZÒÜèÊääêàèæ ++ "ÊÜñ "ÈòÜÂÚÒÆZîÒÜÈ ++0`Pf hÊ([ "Âì' ¿y$ ø  ÉQTãx*~ ++Ño*àšå&^ãdG  ãšÀ„0 ã&p ã°šåíJìö´[ã% ++0 ã½b0Šå°Ö ++Z *­j¢0šå°šå p‘ø@:è€ p†åp áÙˆõš õApåJ/àœ( …Ž/0j+¹v¡è° ° å°‹â&PÒo°Šå”ŠDÄ ++xT¨XB pégé_éðN ++—åã;Aá áýÏ’NÃàÄSá6 . / @;É0 á3— /ŠåÅx&šA ãÏJ ++/ ã¥.a¥¸á<¡ÜšÜ„Â` ì-X ÆXB`B4œy`8R¬÷H ++ ++  " ++0×gŠ$ ++p+}#,¬ A¬HM ‚& ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #m®,°öTDB8 KX  L$à™åZá¢*€Xâ“ ++&0 ã`EâP…â,à™å^áˆ:0†åà ã à†å`ŠåŸåê Šâ`ð ++p–åàâàŠå@ ã ð–å‘,[ Jâh¦i:p áàLzà‡å@‡pOpŠå t R Œ  JâpšåxFx0xlƒå@ƒå 6,÷  áp‚åàšå à‚å8G`Eâ0J%:Xø#†å †å p†åâ`€åã ++,°™å Uá*°Kâ,°‰å‹å@? àp ++/þp`0†å0tƒt'êt0t0t@Ötàm ƒâ`‚lÄl lƒlD Dà‚åH¬H4”H4|H4dH4LH44H4H4H4/ìH3ÔH4¼H ì/«x˜†xŒ”¼4|H . X"jx3 ƒ\Nƒå(#[t#‚(N‚å(L(c á(8 ¸;@$mp€â`‡,)äpä€lD ,‡,H ´/ýà´/ël'×llÅlÌ/±ŒP †åà/ €À/x O€å à‰t}‚â`lwll‚l ++cl/0‚/Q U‚å`E`„P…àlñ=:ë ãà†åë ã^ã ++àNâ  ã0†â ƒçøÿÿêø°p ã Wã™ ++ ++Ć ++ã áàŽâÔÅaRáʵz^áhÚA(Z(^(0(9(T(LP&Rã”ñ’åQá ++ ’åÀuRãHD Dü+àƒâ Žçp‡âÃÿÿê<@2:<&ä ++p[àŠåô ++¨¤O0Šå˜ ++ ˜ ++* ˜ ++@0šåœ ++0à‡œ0à@ìUãÒÿÿ*ìHËÿÿê ++@1ÿ/á,õœÐ2ÿ/áÇÿÿê ‡â\à\?ã»\´\ì Ü&À,@ÿ/áÜ/ äg\X/„ +  *!   _@ü ˆ Ü/Q” ?Ô *+Œ /0xœœ >@ ãðšåð4ߌÎ\¹¨@š@tXo3ÿ/á¼þ,§–D0,,pX[pP7ÿ/áH°;,3,", ,/üý,ç.ÏýD.¾ýÈ.­ýt.žý\<h|dDN,<$ /ôüÜĬ”|dL.4üŒ#,.üÀ/ûû .æû,.ÔûX.Ãû´³<_qûÿê„b¥_ Jâ^\ò9Wûÿê0º ,PÆæRæ¾àäÞÌÒØʾÆÞêÜèÊäæ HÌÞäÊÒÎÜZÊÜèäòXB$@B   àöPTã Úð à‰å4€‰å(P‰å ‰å0—åzñ4€™å(P™å ™å@ áú JêRpBL( <£gäÊØÊÂæ«3(›@HB›/˜G˜Sp”`ZÆØÊÂäz: p Dg#"_#DN ++û5 p—Û€@ ãð—åO+]÷0  á÷ob& ã £Op—å§ ­7@ šå ++)¯ ++± ++à á ž+ ++_žå . \é ++.ž0PYPD×ÿÿê77 <³¡Û @0Ê]ð HB8  ( ÂÈÔêæèZèäÂÆÖÊäæBå  Šå à—åà9d^ã©DàŠåýtý_qÍŠå Šå½ ¢\…Íÿ šå á áŠåH ’4ÍG JâšåY? šå1@Š$ô šåè± ++0 á à“$Q“½9plù±q¹PêM“ø ++,/à< ½L@Ùÿÿê|&€Dn||"€ŒQõ…ÿÿêâ ˜ ¾8æ5J9Y< Šâ ++U*MÝ@ á4L ++© ++"½ ++… åÍ:ž< žåq i áæ½ ÆÆ@šåÒ<p<A<Opšå¶mq¯ÿÿêª @XBs6 u9à—¦&¦A,* 0@ ãU‰&Užå àžº/às+‘sà áO@Šå¾áP@@šåTÖ ÍhðúB è q 0‘å&S ó oŒ\ Šåq1 0“0,00Šåí·­"00šåa= " … Ð# €‘N€åÕÿå õOèÿÿê° *5°¬0¬_0†å0¬c@ á0„¬ „å` Ñ YèT0åÕ½O0šå‘XŠ òâB ° äÄØÞÆÖ‹ ò×> Šæ.aæëSòZB  È æêÚnùàâ^ã0„òSá ++@åâàãT*ëeA¼q¼* àW1à·Yä#ã¥TÇ@Þã$ã"@€òÒD<Ù‹0 áL“‘0„áãÔ±Tàj@ áäÔ/ á;.9;Ô@+®T<i 1 áŒàŒŒàŒèŒ‹%/Ù‹­tä?IX XÈ@|ÿÿê,*1|È X”X/ àÜ µ‘` XèXè.ÁèX”XgŒà *XY„àP+U$0@šåȤé=ÿÿê$b< ++züÊä$ÄjìÜÜÞÚrÐhÞhêÜò`ZdP 6ñ ++ ÌØÈÒ ++ð êàèä ++ L ++ ++HBDpˆB08 !`ô`B0HB`8Ê °','x!@-   ++(B(bb8Ú!a ++¸BPEPHB°Pq2âD[C BCÚ`ðL( ++L$ÈÒæÂÄØÊZÒëäêàèæ ++N"ÊÜó PÈòÜÂÚÒÆZîÒÜÈ ++0“¯C"Ëgš ++ ‡EXÂíò² ˜ æÜÂàæÐÞèb æi ++å Äå„å „å y ¹ ñuÃrB* ø’Tã ‘± "ÿÔ ìõíU1`Š$[ 0žåÃñà:0†åàšå à†Ðb à†åàq<U &¼”Á] ] ] Õ *Õ °èe @ x” @œ¬¬‡¬,Á¬õ ?pš@8Á õ l=ž Xl ++W€¤2à€Ì!àž„ xt ut @B8:Xüi ôIPPP ”PP= pš4/àD ++eTÕ Á–  .Éh<.<.0 ++ Oÿÿêh *e.òþH.ëþ£ ô<²ìÂÜÒØØ  ++îÂÌÊä0B( p ÒÜÆäZÆêääʲ ++ñ å 0å—å —å p—``>`ó†å †å †åp†å \ \`ô+ d!0ž0  d è.ŵèdø .TÕ ­ò»ÿÿêbB&  È LD0 áüÏüð¼ ++à—åžå áu"¤.qv¨ —å㎔ àP〺 0”åS‚~ 0—å ÈhÀ8bà ã àÜ à˜ „ à•*  ôPÜýpà“å —å¸± “å —åà€ ++ ++á@àj 0ƒâ@ƒ1.ñ¸2 à—­µ­­A à—å¼!àƒ,LAáÔ9—  ŒŒŒT < ˜$ á”À @šå^ã\ÿÿ ++$ä/Uä1Œ *ÿÿê"ºB‡Á $HæÞêäÆÊZèD ++BÆÊØØä fŠå ‰UDM±1&!µ•.uý‘ žåPã ‰Kñdd ù5 0Žùi 5ošå š}Qí-ý uÙ›«áI ¶¢ÐÂæЛdð0B @ "æÂÚÊZæÌÈZæäÆZ+A %2 @x Œ1b@ÈB Ø K"z~0T¥ðà á0 á žå “å ]MaPá yUžå “yˆHAÏá/©aØ``5àŠå%’h<‰ % ++<-šP‘ YHŸTãÕÿÿ ++³A*ž ²j Bx® ƒ:XB— 8“•VÚÂÖÊZ"0€î $¬j8ã ñ˜4$ÆÆ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdlf`P‹ñ$(‚<4ÆÆ ++  ÆÞÞÖÒÊ "æÆÐÊÚÊZÞÄÔÊÆè ++!Á ++èÞèÂØ "8 ¡àäÊÆÊÈÒÜÎ"¿@$¿ÀÇ»$ ++ðÓŒ$ ++ðó¬@ @ÜÊÎÂèÒìÊ@.@@üæ@ÌÞä@üã. ÊääÞäÌhBOpÓ&”¢(0B&$2J(AÂ`8B*ß‘(8Â*  %šö *PB,  øOØO¡  áÀ áàœûP^áÐC¡0œåœåàƒC¼`Sà›j;øËa3³TãRº œå{&û3à$D Œây&ÿh(0(d d ×d EâÿÿêŸÀO"@£4 uaxÀW"@£À£­£L›5àœë  ý'Ôl  É8 ŠåÜ 9Ñô Mà,? ã`!™`wd|Slÿÿ ++¾¤Ðp/ Ð À- á\Ÿ +a8 X5’ óF" ++ò1[0Ú,.1H `² DAÐ@ÈäÞààÊÈ@ÌäÞÚ èÞWQ.€N@ Š,>Z¨@ *,o2“ÙL`B0 P *€ ¤ÌÞäZÊÂÆÐÊ€ ýŸï ++‘å*5le 1@ŠAÐàžå®à áàÎã +++àË! ++å"àEÃ00Žâ ++û 0Á€Ráb ++0ƒâ“ç”ftù!Ùò+1PŠåi ¨S àŠå ¨ + p šåS0 ++ át‚â’ç 0’çi$Ù)p@ ++Ý“ü•$œ$-"àåì ø Pt é©Ý Š!ñŒ+!Œ¯àšåÄÿÿêOïO4Œ …‘Œ@@0< 4!””””XDQ)i”ô”š!µ ͹GlT üáT,, Á,‰?šå, ¶ùþÿê(‚` , cìÂØêÊæ ++VÐ2"H'Òó08B0 â0ðP Z0u H@2X 2(qH j0"$2"3%Ú>DR0o ++ô *B6 øä`0å À\;!ðkÛ¬Q á Àž,lô! " 0D ™ (" 0@R à”å,/øø ø' àü% „‰-Ë‘/Äí/ Þœ õ@Pàj Žä ¯p¨p\ Pà”í3 TgØd´,/I°¬ð.0¬¤ ¬¨= Û¸¸”?0Ž”:Ä/à˜+¥˜0àšå¨P/éP£ ÿÿê& ++B} gp4 ++°å  %p©&€,Wh4 ++È, &X,ïbê6 ++0€@ :*Ê 6œi â* ++ £34ª*¾""9’" ++@ xÐú8`)C’8‰D 8‰är:€B@ Ð4 ü&ã`C0“å dì .‰ìü<+@ÝTü&` êB>p1Ø Ž,bZØÒÜÖæ$ZŠ#m-0žŽ# B#.bDAö"?@ŽŽö‚ VHY*Æl,Db –!Ó–!Õ‘Dàšåì²0Ÿ5¯@ºl#„„T²m”,„a ++ÆDÝF (íÕô ÿÿêz< ++hB8ØÂ>`">¨Ê>°R 4Ú>L@*@Ì>“DÒ@“*:(B@FÊ:N7: ++ L!´€B0 B0X"Î/`"æE/Dî/( $Ñ)>P/6º%ý ++V*P/P/ R*û,8 Œ/ Ê €Cpšå-E- øî*ùœÊÔÃɬ.!x¶0(BÛ"8š9 ++Dˆ4¸k@ÈêÚàƒyR ° w/O€Xâu,u,/y,7å=,ÑOÑ;P’BJ3,Ø3,TbLb; -â¤-YÏ ¤-9&To,c,1/Ác,;/c,k.Qk´º­¤1ÂI@˜BH©È¥,+©IEEà/ áIIÕ4¬-¡´ ÚBF  ÷&@Œyxf-2/@»e64"@¿WP7Ü-1ø ¨#ô, -ô, @†oÈ, 7ök" */0/Aü " (*"0/Ï‘> ++À0À0Àì öÐéø*˜ýhOšå‡\€´-¢Ï(ø! `H(7F ++ÀXA F(¤ C(BFv LÂH)HD:J 9ºJ2Ù0 ++L ++N PØ(aºR %xW!"#c¾ B\ È t_g @ý8 a|îÇ`bBZfOè $H‰}4W$ „[0 á…Ð)oà„å0A0/óÿ:íxÌisÅÿÿêjÞŽÕ ÕTÕO ++æÌÈÌ )#PžåQUÜÀ x!“Å `s 0}? 5É4Ä- Ä4/QÄ ¹¬ ÈòÚÄæèäÒÜÎz~XŸ3rT+H*TÔC V³ˆH^X­ b­­Yœ@7.¢ Ðè ").@ Xj0íCòZí8ß-1\WPWY1~ ²*˜ ··i2i2(!Xxr^H‹Hd"vBZæÒôäbh5 ˜våmq51à°M°’°G3O’åhŒ6 x®9TÅ ++™˜<3^á*© ++D­09„ .y,4€@ƒààŽâ&T ++L` ¹=E ` ‹<Ù‹<“LŒu“¢^8`g8°~b$$X1` òb8d 0üæ@Òæ@ÜÞè@Â@S@6´j ++HÞÞàæs9Êb²«9h,ÆÞÜèÂÒÜæA l°/¨ #Ånµ**d¹Q¹B¹¹Q½*0âQã ++0“‹H|QâPh1‘ Qãúÿÿ­&»EáA’…9' j+‰5-5 þ")µ) )œj••âª^(nf þö 0ÎÄîÆèî`ÚÂÐêäÄêÒÊÎànêâfZ“$ æ350árÈæÌÈä„ÎÄÌà ‡$SÐÊp$Ïf ˆh 2ë×$¦ jXr54äÊ̵&&Ü?0h@ #j. o‚l ++(99p 1äÊÌ3tT ¦3@Tãtíp-Ï i1T11D+ —11 1R1 1R1!I1! ’1R1,—1c+n*!n)5 ág+0PãØ!ðšS.„9 4«,ɨͨ—®E²EonˆpÄ3`rµPr0p¢ ++4 jß_ªt ++0¢v†1ÊèB£x£.ø ¤xˆ† ^p á°ŽX¤¤Ht ¤B¤¤—¤.ì ;—0/ °ð †ð2 °šƒ°ƒ3l N°´Ù´NÌ“´Œ´ v´%h  ++ˆûO0v·?Êx·9z(™bÈÊØÊèʺ| /è !Ž–ŽŒ¹yŽjŽdŽi!à“ð;1à’#5 šmi )ieÍi.¯ «Fc Ã×$iE”Ô{ ä& Y. D/U. t. m55&ª5zéxé8X€$É£X| ~'0€@z²O Â|²=‚"X2V„š?¸ "v2P¦‹F1)–ž“+¦#41/G0“å$Gp†WG!GPG&y öL„ ž „MwêO šå²;5’;‚p@B ‚dÓY²„0ˆÁ††C.( ›¾XTµT¤T•››D"&`›4" 0OpqŸ`Ÿà#¯àŽâžç`Ÿð‹)™ `””p0Îã° ã¤FS[á7„ÿà€â pžçàâ Àžç„Ÿp†å À†åp„p¤[°‹âåM<„@4„È/@Šå@_°Šå ç*ç*€šåšåc+@°šå×+cÉÿÿê`ŒCàŽâÿÿêK+t¿ +…\B`šåÓ»F.ù»K»Dø ++»¸š)wZ† ++(wh—W:†p ) "†0ˆ×ÂO ++†Ân– àêèP}Š G ( #Zå ÔP¡d&=á "-±á &ÿ€ôàà^á#/\ 9Ñ¥Ã.?Y°XèÔ ìÔ@ßX×¹c-&Œï. ¿ ŽâÈùMÇXÙ ++ à÷._àŠå¸ü^¸Ó¸ JâŠå ¸§/c/P ’å¢@ Âã$øG9áRム++ žå( Š-„,ˆ’|],‡#,ˆO@ŠåØ,h O©LD(šå@(˜ ++’üñ(G#(H1 à“¨"]œˆ ƒå“åÁ\_ Žçp"|ø2 p"$Tç.O­L 6$œOýP ,1àŠ$,3Ráö¨ã£18,ð žç à’å0àŠå à’å0(X‚“AÄp@RàÁj 1 Ž¨¯^à¥j,$_ @Šå4( ’?Ñ44Ô& @bH4,^=L,/h, ,,pO-p9p 0p,p^ ýTp ++p)p(äÐtµ/)Ô^ }€ô!& Lø ++^-É<¹L!^=LüNøŒK/]H„äbEÿÿê(P/,à˜­˜Q,àšå+K3ÔD ôQ šå ++ØAüü ( /Kþô«3*qW3€ê¨Ì.½Ì•˜ ¹`d ++h/àÉl/= .¾ \ h1Vhhðø F ðhT Ä' ++Lø\è.Y ++è`ch pDKÉp8h¤ Hå LhœPePh”›9h8h h0hhhhh/@ø .9 k9h$ ^Ü…Lh,pNõph pp ThL hÔ€å€hø <.1<¹L!O}LhøŒKÅHhhh/à˜.˜h/è.Yôhü œ¥ ¯, .ñäÀä.=ä€h` `..üdÁ)=!/e.°û8.©û@@Üþ8 P¡M&´Œ+1Š8S`bŠ £ÒŠ¸>2†1óÊæÆäÒàèÞäZÆÐÊÆÖæêÚ“` @P%ˆ3P´8 jWñ Œ ++îäÒèÊX úŠˆŒX ÚŠ8'g/x+} 0å ¤S—*‡*s „å „ S—* Ô-óH1 ++Â)Øþ"ÈUÈŽ‘+8 )tÛHªÛH-*…ØÛH@,âU)0"Žô,3 H`”ìÊÆ CæÞäèœc( @Pî`ºŠ@†$R$2 ++ÀŠÈBL8 ` ª HBŠx9hƒ9%úB%!ú7¡#’Š Š«0Hhe %¢e/D!):›TŒX)Ê£/+ª=’=¡’=/”0$1Š0$3"ƒ%5 ++âî%7âî%9z /;0 =ÙPx Rˆ´7?;A;$%’;!H8…CRŠ(RR? –â !0$>$òèÊðèêÂØ@Þêèàêè@àÞääOEâŠäZ¤"ÎÊð: ~˜ Cð $"5V.A" ++oÞ-rOH ++!;#ö!;& ž'4G ' àWJWë<Ú];@Ó? 0^W\# ++8P^ã¿t—Ohñ:×bTã¥âE ++|`Pá€Ë ~hmhdhL?'":ŒO+ ++|é|| à ++/åð/]t/Ët.¦ð¡tÑt‡t b›p _Ÿ^‘HQ^ã[  á€³„xãR„?„[ƒ_š `SáëUlt0 BSãü†/@0âóU"ø$"Vôº áG £ (ùîEc9ѯ›5/š“ìÿBs ô¶ƒ x=Mÿÿ`OŒt½trth³h'7dê02dpàåàâT.$"Kd*dkŽA@žàj4/}À/øÀ .½À*¸À´$Ñ3X.°À&œÀ_™j À;*=g@ @ _p 4"KxI×CO+ û%Wìíp Ÿb"C& ¾<+)<ßZ€C&SÖ /@ÆU )Ë8!„()rV"€˜ ++LŒ A,*‰B,$¶2' 8/ gPwŽJdp5@ÐO@ŠåWÐl¿"ð$0 Ü*Y 0"¬ 1nÍÿÿ ++ÿÓ(èÓ> „/Ýþ(—/ ++( ¡_ìjÄ /@Šì,… Ä?šåÄpôóÄ €.I €¤ÌWL/ÕýÌ‹œÿ&‡,¤ D” ++*” ++OÆüÿêÿ&\4ü! •êyãØyz/åzËÔymTãÊûÿ7Añ"FR^pšäÊÂÈZèÞÖÊÜX2˜0ž ØàÂäÊÜHšXÓ  ÂèÞÚÒÆ(œúB¢ ä0P(ž8 â` (E# Ê€Ï Ò˜H ¨,Ùl!º<¢d ¢˜@ è$" ð5ÈÂè(!#"A8X$çAj-#Xkk&+lC¬/ù¤¦ LÚÂØÌÞäÚÊÈÐ@E3ÒÜÎ’XÂò/84ñ¨ JÊðàÊÆèÊÈ@üÂ@Âè@T€àÞæÒèÒÞÜ¿X!ÞÌ¿X "ÆØÞæÊ@JaèÐÊæÒæ ++*@?*p]&¦ei¨ X".ÓC8˜ K2$’K@\ ÞàÊÜÈH0ªƒB`8/’CÓ~h~?@ Â~  î@t/ º. Ð"ÒÈÊÜèÒÌÒÊä@NøN9/ Òå"5@êå8å;T(C2| „/ò„"50"8 ,( *eàäÞÆÊÈêä40YX0 $<ª)ÒÜ©3B˜¸APßfCâ˜8´œ}Ô® H (îÒèÐZZLA{$ ~0`£2 L2J ã ŽnA‘[ 0¦V+"Á¿1 ,‰65šª EÎTÖn»249[ŸŠâàåpž*n ++‘ZL$."ÜN‡@ÁJTfjf^n ]\&@fj@ xP ÆnMK=0žþvB¬:£wžW…<0 áfn-N40å€sŒ eN"}¿Œ ++8"‚å ‚Á\_ ãK?¦_» £T*aì duG ú_ ‚$O&  ã; D1מ1rl( áƒ7$¦_Š1 0‘0 ?”p1@€!/@¯õ"i-@šP>= „Û²1|oi[MzuÊ .¹\ŒóV) C ++ ? ´.=´.¿þ„#¸þ®OK +++‘K ++pK ++§+. þK ++cXêBZNcHªÄ&H d&H9HÆ'H¥ª pBu”€B¬  ÎWÚ\pÖWWÖWäÆ6ÑgQ á pž,f9P;‚Yp•D~Yp"[%ÃÊ\nà ãà"[*0Ê\ÏZ\ÈÂ:·ŒÊ\Ê\³p¬Ê\ DÆ\ÝÍGHhÚÂ\œã? .-˜ ”?Rã(””²\U7’åFpFp?0‚²\?>7.>7¨,/Á,ª\~\?`4ª\hÔ Ÿ@?Xª\,ïLw\4š¬Q@Ò®/WF ++.æ’RC¢B; B2´  P dÒ8® ++  ^dFT ++ ~:êBŠ®)O(¶ ++$#’2Ì C:®ûnS8¶h„#8º"ZQZØÒæè„#~À ( $e"Ze@K ++© ¥BÙ "1w„Á = ZS y“l ÷:`*ÎS 0ý[Š…0\Æ&Y«T »C&û>*@D‰  !Þr”A"Y¹YÍ‹½ Í«VéU«,  oCÜ@ I 9 „ Dˆ`ÕHˆ ,H$Šå‹„„œ# ¤3Qã'¼8CCàžå ªu@õÿÿ ++ ‹Ey/.ÉHÉ ÍgdàÃE8‹˜°v[¼¢+)´!@š*/˜*eP! ++àÍ Ô .¡Ô6Sy.êþŽ/ãþ‹.5À¾Ý /·þîW*X@¦þÿêY@¥þÿ ++¹Õ S\¢¸;0XºéŽ¼  8 —"DH§ŒœX "Ã' ~7*iGWYnh@g-q0âS1X“"F…öC.í" àã ›!àžÕ @Ýÿÿ ++l¿&ö…ž›$@Öÿÿ ++¯/# ào* ‰åTCšåÀ{ü5ßÿÿa—àBj ü5Êÿÿü»'ü9Äÿÿü5Àÿÿ@ xO .]pas •d|]ÿÿêŠ ++j~fU9¾ö°ˆ ÒÜìÂØÒÈ@ܦvR”*¼p¾XNrÚC3Ò¼âB B¼ï2† À º8BÜ]G‘À ÎÂèÐÊäÜdÈÂèÂ_&pŒÍ9¸Z\4‹| Õ†{ ݯ2" p¼ åž/“Cp†å ƒ…{…”¥y”¥ ;Fpe+>%Õ& ¥@ X#e—LkH¡p m÷CÅ•ß5(ær,!hRàƒâ ƒ9ŽVq_’ç.%8Jæ·HL .iü ø”¹”]fÔÐ .õÐv–f{7Ì`K ++Ä3`Úq2.z¾^/ ¶^Æî¨A2&®6G%\ê’Y2zY2vÍ^7“å Hu2+ ++”<)Yv’R? Åó æ<5“ü&G ã #òxi_' /e' vq½šz`u_ÍShu_°/°^ÿÿ ++‘!`¬/y¬3Á¬!`]dô"BÂàÂèÐZØÂæŸ638 ++3 ÄCâÆx3pH²Æ5`N ++Æ8K`tUÌ t"yÁÁ1 4VS! žâx€B0 ãˆ, ,-O ãL$¡” ,.ì.î5¥"»:½ ++úé$gžŸ†TV˜™+@”-|á" p²y™CÄ./ áTTUTŠæ6!à—qoÝ(ÜesÙ&Ùs!4  á H) ¬_OP)Ç@@À/1 0ž" Ž À0À!@†¸Ào 0†å ¸nd”Áëg DÑ< ÝäÉù”P¦r ++÷~„/…0we & / @W/5w$rpi.‰¯~5 "ÿþyo/`é`ÌŒ +€L/5Lä„Ïþÿ ++Ðþÿê@[@[$@[€0 ã³þÿê4!±þˆª#ã¯ð­þÿê:Znh †Ì˜ a@ÂææÊä’&—>~$R´&ðØÒÜÊ@jdbX@ÆÐÂä@dbµ&ÕàÈÐèÚØ\ææ&@aZìÒÞØÂ9&àÝ\0"H¬$Zè'„pØÊ 8 f8H8Eð;0:s`7Òp`! ¼¢Tö„2ÚÂðLrö„aÔÆÒ*%é+2K!ÌÜ:a ++îÒÜÒÈBü”ÊÍ`9ÀÚÝcñÊèBX JÌhÖ”ûhû@ûFà<2…Ì&ÎÿDÐ ù&Òð àðæì!Ô :ÕÖ¨g'0Xi8 rêÜÚÞÈ×&&)¢"@üh„ÌÞêÜÈ@ÒÜ1ÈÒä&?úÒÊæ0îÂäÜÒÜÎÌX"ÌPظÚX‚ÌÌ3*Ìšh@êÌ©(*P8bÜÌÌÄ4Ü µS•ÐBà  ‹Þ@Í ++Âø{ ‡0pšåÿ· € ”åÀ áN}“O|?!àœ³4 _4 6½h"œåá‰p @ @.,$5ž zŽ4{¯/@»5 b‹å àœ¡p ?×#pœ ++žz¥g B\#pì ++À­gØ¢o— T&”_ œå°C”!/” o_Ùÿÿ ++©\ q\_Âÿÿ ++Š\ Í\ ®\ãL? 0‡ãN/pç•H Opšå"—ºšPzBÞ ++`h˜†VlÚ¬9!BB+ͤ 9D5hun$}°H9¤%Ù¤4/!¤_„ÿÿ ++øAr-B²ÞrC‚ˆ8‚Þ¾o"Ê"ó6æÔE; ++x„"$ ++’sO 5V²à ++àD2BàÕ08 ¿óPBà8 êÜ<SF|Ù¤C ŠÜS/g Ü ++ ùsb ²Ü ++0QA!®Eh̳1 à8þn3Šƒ@äÊÚàW@xBâïq8 æÆÂÜç gŸp ã ã >£&Yó½¸ $"K®u@,@ àåWµ @DB^ãAD@( ++ ú\“Àžå pœå¢Ÿé3TáÃp¨à¾KŠóŽâ ƒå$žçØ  ++¿@ ^áa gf1ã2øÝ‘â0j†âàñ##Tbà ãàP'@3”âŽÕL~${ `\"oÀŠåpk: "Ü` Ã=`d"ŸÀšåpšå¼Ð|x/@ç:.ý?>€"@Ög¶DDD‚D¶l(O‹å¯ÄõÄ,/ÁÄw»l%/-l¼h%/•d=D_–åŒÈ„^à’å,H ++ZZH ++ã\Tü /‘ü3jÌ%/ùÌ_[àþÿ ++£Ôh/àx.+ex.h"@rT'¿þz ‹´.®þC… þÿê,Ú{! ++@Ì€ÐS B> ˜&tBâ ++ÍA¬ˆf:â˜T fââ ++P2PÀz7Ââ8 *ÀZ½$ ÜZºÌ¯T}3'\ ÂààÊÜÈ&P/ä3L_å3LÚ3LpäÁ 4)$ gŒâ(ã+( " \ßC3Qã#?q°’å ž‰ybžåpè30B®ƪ@à„âƪà°„åà„âà„å ÉMñ„âà„å„å à„â#à„å'„å(à„â+à„å/p„K=3à„º Ü ©'!àžõLâ >Æ5Q0‚å@r/‚z)Exý€Ê4j6,åš6 ú4¥? @€Èl ΈÊ4 š» ++# ð­”\Jä"ä/a+/]a+/mÿá&@Þ¼ÚµP,šêÝ-ñ¼8ì ++`HÕ ÞàjPæpê 2b,h&êè .Xî øã.X~ï-zÀÍ×÷è…‚rdn²ô-2îÖ™`Bþ •/S‡†KÃ:~‡0ç¶0çç0€²0ã§r‡? —¤" ÚÉa.M|µP®ž¨ªBð ðz,'Æ(qh†‚jßÍ'6úð&hö ˆ¬*rN'=!î."W) 2-.iJ.Ç-/ ãS" dŠMw Í© Í©žs)0Y§ë ++‘†Që)¼¢·#0¶·õlæM*In"0Åi±\NA-:)ð p„âŽâà†â‹—í›í ‹ˆî‹ŽíÅm S6Vóà€å0€å €å €åpM/žÚ'ª%°S ßôƒH"0 œaœ– .‘› ZEH#H$H‘qˆ û.'.‰„Q<]‰.(%Õ‹*)/ àÆ)X.ñ++ç!²01¦.O ái²q™i²k:D ­|ßÊ..Øþø :½¹<â ¤0òÒÜÊð¬E3à†À’Èøôë ++ñÒè.ÒîrÌnôjÞìÎhÔÔÊèæìîjÚÔ² H£ê33K£<;c îÊÒν„"ôê£XúÌÂæØZg]g "ö ++ x´øPú ++0¥5Õ*öxüÚÂðÂF7üX³8Dúöº Vrö ++Y@P¯ÁPäÊæÊè&7èßFŸºþ rH²þgpX8( „•Iâìq9X¸B RìO£Y4*H‡ vG‰ ~ /H Ë ?@žðjmŠ(PÕ¸ ml)6 AØÞÂÈPi ++Ž  ° !‚m A™@:=—–-"„ºÕ³0‡å ‡å ‡–-r‡å&Pã7ž,á·”¬…4f “å0³0ï0’å0âSãñÿÿr.£@ =š×= óí¥˜ ¤Ir´ ++ žmžS6Tã.Ja$È– " @VŸàåà—åÜ–¬Ñ‘z ¬ÀýÕ3š¢X¬X¥Æ|!íþN$XjÃi U&—³‡~ª?N6m ^ a#gà²>^ã •R„"¹ÿhÝZ?1Ô¼#ûAP¡Ð¨=Ø@à”år n7Q„âƒ2 – !”};*$i` {{Á‡,h ÿ þp‡1…!ƒe/ .ç0 º9(û.a¨L®#2 ”çÌl±6"Ì¢A×C‰." ++ 31.bà†â àA×d#à²&m.m.>FÖ<%1iÖªc(²%è²%ÚÆ¡] d]’å’Ç.jÕßñÀŽâ°âàƒâ‹œí››í ‹8ÓDá^ÓAá áNËàÄ[áEp²( d9ØS„â'U훑T“ 4'4[âƒ4[}غ5 ‚›EžþH—/nIÞåÒÀ(0‹ L(O0šå¦¤d /ãþ/¹þ· ++Ï C A.]üq?j?sJ¢øHH4:m/äÆ8/ ++ 8ÿÿÔ/Â8 ! ++8/ ++8/ ++7·c˜3°= ++¶  ++  ++z88$  ´H Âææì0ÿú&{ƒ(¬²$p™"* ++04”)ÚŒC$ >@Ë@Æa@ÊØÊÚÊÚ¶0IXÒL%X'0×JYJ£)$úAhU„.³hµL zÂS8B¤R *T!(Å0ôKî£&,z8ÐÞî¶ Ÿ   #Þ *z¢ pQN [Ò ++2 «?*#š{k±. ¿?™±#±±Ã? N|±˜/ -\‘¢ãï>± ±ò©M•@-ÑI“fh¦.éjN 0ÂAr°2B˼$ ° V"’q{ ++虹¾/  .mÃH~/A3B鈔‘ˆTùˆ -"M-wÞj"ñ ’rÈÒæàØÂòXò t00s r žBúže Pž!ŠNH¶¬ ¬‘K’H‡ÊQ‘åè0™  "0ƒ" àSÒ) ´~â) *­G$‘|ÂH@€*-@€\r€\ ¼ âZ8ÂH8œ}ö¤{Á–0æ/@0Žçh&  ô& ‰E®    à&ú5¾8È“ â[€4‰E@ €$N€%$N ñGz\€º eN   ¾ /Ø—‘Oàõl•Hú @@8Ú0(÷w ò D Xt!ÀÚw êXc% ²), 2c ,2c3KL®DRâ4 :• XB$¸ ++ ++0%dT ²1Ú1 B1XêO É ++bâêÊäòZÆë ++(ë­/À ! Q>n°DÌt ++R¤·0 ä”!0“*¤?S¤?g S/pŠÍ/­»: „”Gm!”åÅWu8 wØQ¹°˜Q+UßpÈ@¯E ++ñbn°$æòÜèÂðZ|ÂÜÜÞèH@í v8ý$ÄÆlÞrÚÈfjrÆîrÈæjZÄ)Å0.Å¢ÊðàäÊææÒÞ¾?í!E (@2§dÀ*@‡ ++ÌØÂÎæ õ!mëM &‚^0p ÿÇ|8:Àu^Ó - }9¢ E¢[£ÜS ÅdŸÖ© ++&Ê°) ++ê#Šqˆ/+/škQ@1C„•D×!ª» !3•p õ DÜ*ÀÜ ìñ ÐÜ&¸ øH.é-| ( }N½ ++ä2o <i<!à å|/à2Ü+/ \ˆû2Ø "NϺ:> $u6]"IQŸf­p‘å ‡â‚¨#cÐ ú>" 0XC3Za`î> 0šå ‡ìÐAp #4 #&êCX#_$àŠå()ø À%ø¾?5¼>!0‡ð ¹õ%0‹«4341 @“Ü—ÜðÅÚ,·²¯Ø*¿hµ0Œ9u½Ø/Ø /Ø•$ú p¼ØŒõ¼Ø*dؾ0ÎãXÌM@PâKjèhX .…äúpLÑLì/@Š€P/! ¸@Lá]0åJu0TãX9†0àãg0”p¥\c0&Ê"?Ê"@%Ú®"aH½W}€â@€Œdn‹å ‚l X '?“åÙD%fD •÷äÆE¾ÆSàTâŠG*¿¼ç"€«” ؾ"h™ì_5#x1‚­1‚Œ"|¶!|^ãªÿÿ ++Ï`Å€  ‰X2NØÖu´%°]¥œÀ ¤ ++”e <l@œl@ Ü@€”u1‚ €@w€@fà0€@ Œ_€å@€i. , ; ‰hÐ Á•þ‰h" à “Ñ Õ¼‰hÌÒmÑ0¸@.MÐ êAº‚](!Þ&wda0žå0“]¨ TB#j=<íü.4LíÀy0`p qâ.jm1 ƒ"Q°+²! á“ÇàÀWáÌ|L…€"kþNKT€ .Ѥ Lظ/! ¼ XyX J#ô/Å @]cxHL/L äH YH&0àá óýcÕ/ ãL ¼ ¥L/¥ýH ”i™þ[9”< /àÈ+AènKì/ü¨"8üdÌ \/Áû8Ó> ++0©„$ü*9üX©„Q©„8 .…8,P%Ñþ*Ñ}"ûÑl"ûÑl'ñ„¥bp PÙlC :WFP"<_S:ãðsàÂØÊèèÊ--C@BÜŽ>D¨>¢Lƒ[ <õO.¢L 0¢L(ü™L ++WT_P>( ++/hÓS86@GL Y(ðê.w,JÕn(J à‘å%ž !8”!Hñ.¹u" ác<$ýD" º{LHÔEJ) ÙÝižÀ4 /žvX ¶ D:ݺ/’€‹?š .D0\Æ%x~Ä(mrXÒB“! ++®NxD øÀ•IȺ )v•I&‡I"D‹:JPóÒP èì ÌÔb/àšSümP($\èžÌ˜Ý–*‰˜`T5 ¤6?Hñ¨6,ñÐ Ð L£ Ð  hH(PsHL}JÕ¯d 2 ¦Lû, „D7Lû ܺt @ ìÔÎâÈûð ;/M ká@˜l ° ¯,&à^, .áxª8Îã0àÎãt¨S‰Ê}d A–áW° ++ñ–˜@!nV˜gIi° K° .‘°°Ñ°)°0àÎãü¶`0“å#1ì·2ÃãÄ9Pª0Câ(ns(b0ƒà̽@*Y@" àx? œ ^64¨ãô0šåN§Pq8§ hÁhÑP oDoD‰p‡pf à‡å @wDдª… öý)” *a AÀ°*W lH *WC@šåïáf‡ é<Ošå“”)åŒþÿêJÊ ÊâêÂØItðHFæÒÚàs¢. ãèãã 3î æ~F~a tÂH0 ++\ê Ù ¢J üÂüÂ\2L¶ p& ++he4J€Jþ!FGüÂZ@¢ÐNæêÄ þ"Ä=N0¸gfƒZÜêÚÊäÒÆBSX'*òšP¨BT  € Îg"°íaD¥ ++)+ô×¾A„ëÓ¯=@à†â“ï‘Y“&°Ÿ;û 0~ « ++W° ++G@‹00[ãH›!›ÇödÛ<ƒ ++ x%d[0×1ãS·“âj ›åÝÜúð M2g +Õ L*¡]lÔPt + È<ÌÒ@œ  á$H? p—,v ++YLÌ/>G Ôs= /­ÌaŠTóóJú[ “VR ö# =æ= 1;R; ++zæ--"üæ/8ïpÄ ˜$ ++`îbW…4`B•á' ++ê8R rTt&' ++ RLwÚP ++’L5r ê Äb0ùj7¢%˜ ° îÒÜXVÞ×@X «k üæL!':/ÀW7XPw¨Z@¶w ++\@·ž$^y\¡(^z\(Ì 6 ++ˆ:&˜^¨IXB$þd -*rxecÞ ‰8ü»Ï3À$Îò †rÜæÆÞÈÊäÑ ++`p ++R)S:bX/fXx7d€fâU 8 ++áà§U IM <¿HLK X!pPK PKPKXÙ XØLK‡.U|³P¬X/h0Kh%6% XJ¢ µL0—åÂ.›“$ ›“ =“=‚=3‚å—“ÑûYÝ RÙË = ¶n0â9RJøj!Ú7Õ_žåèà‰Ñ‹C ¹' ++겋nKl\0ñ?ñ.d=¦O ežOååAØàG &2çÅÅÁ_4Ðj xBˆž†¨² Š@F |Öq¶8âl Oˆï`°n à˜RïhçhÖ^0™åž@8›ó} 0€å 88 S²B Lº :Õ¬„¬îsìI3àƒ¬ƒîƒ[`Qx/ ãD";Te Ü" ] ¡ŠÜ" ”6åx¹  l&÷3 À˜X¶¸ *i” & X àÓÙô†r.1\rPGPP3<½<Œö8Bx (nîÞM ]VÕòÆòµ¶ N¤F>F‘² ++4¾¶~¾@› â¾Ê¡RÊ z_aR ހ̀%€ >„F¶ *1n¶1Ø ¥*Ö4 Ù4¦F,{ ++h.UpIzC4}4+|$ªð ++ÊÐèèàZÊâêÒì÷ pÌ †ÞÜè÷ @¨òàÊJΟ4!0Ð .Ç^ívkóæÊèzêèÌZp˜ÒÚÊèÂ.kPA  : ÑsRp Æ0tPz”Ø HèÂÎ ß‚«" Ö& àTíTܤ :TÄF¾Uå‘ÖØ0 Žçò@JÃ*¥Îº+’™.﯒dUù ß‚ª0éd <pZ4dXVå ‘X>X"^ª]5pš”–9pš&* ZDÇÔŸÔŸ 4 /«Q¬\OšT.Q¢ J.Ñ4¬ ÝPæE?>à *àOT.UTV|< ++/0q.¡ü-ŠŒ x5ü@D` ÿÿê4®€rXbt”žev •žD× Á;+3â¥ý ý ý')& ,/0 ++µ ++0 ++ä©õ@*ß2`B‘¥5à”8\fh<7Ѐ–ÚàNâÍJ@ ‚àip•@0+ÑEÊ9iweRáÚa(z((A(Z( (- ,.j[Z3^ãw3Nâν*e 0*e0ìë÷0ð1Sã:ðƒð ƒç~`M…|·$ \A=A8Ž\=ó2h?. ˆæ—ÄHPYLM'5 t  d d4Ad8g8 %”&8 *)Ð çQx˜O ¬"$¹@Û ++$Û$&$Ò$ $ÍôÛÉ‚i.yÐO$Xü"© | {.ñÃ0&X}C üïK .Ulbj .e¦/ k¼Ð 8k ›Y0¨.|þy ¦#iþyh .Yh .þÿêPÒr{VµN8‚vpûT1v Ž " p*hçJÊJvÍ ÊÈ) ê q zD0ÅJ j±€ LâêÞèv(( Pz LØèvv R~ LÎ  € ++LÂÚàvH ¿ ++s¸ ú 0K„ ÂP:p û8ü§(¤!v@b8Æ@8x"@B Ñ’tà‚t ++fS8 x^ Kq 2t0Ñp ºthzW›)`VPL8 ÒPH)R í– Â ½#Z$UDÚl§Kò²xxÚ ++èÒèØÊì‚ìhj &«Mf Ú ++Ë ++;•O ïó± ëÚ‹H.Ö•BH  ”!@žht¬ä0 tZE„þ z xÿ eJL» . q¬% ¹&Y*^^H^7^<^ ^. ™5 ^>^&^:=Öÿÿ^ª µ¬¸@e_[Á÷_[ˆƒYRqz ++J  S°zbP*|õ/~E€JÐ|Ñ÷òãK!5cz‚—™[`xBïáCX 4]&@Zæèò."N¥ð0‚-/ H/´.‚èb¶à+ ¶t F  í+Mv /ÊÿÄ2.5B./È‚B„ =ÈÛ*ÒF"Éó*ºF/©F Ž\y ¨@Ý@,/@+]@,@,Ý@,/,@,@,Ý@,/,@,@,Ý@,/,@,@,Ý@,/,@,@,Ý@,/,@,@,Ý@,/,@,@,Ý@,/,@,@,Ý@,/ ,@,@,Ý@,/ ++,@,@,Ý@,/ ,@,@#àÔ@D7šc"08îÆ·6˜90…¥a0žçèà™°_ ¬ @¦:…à$èéu Ù1u.y ·íh DôÔ^kQÔ^Ô^.d ´O¼ú „ÞàH¤@A@Òjá2/ H`HY .Á È`€î/€,b+Aê'T%.Ì@¤B*‘P_@šå‰uS¯ œÝœ:| *|/Oü"M4.7ü¤.0ü‹“Lâ T@ö°ôR„ @ÄÞäÈÊät@`vÒgÚÂäÎÒÜ6XYÒ0àÂÈßÅ8 4@DXÀÒÆÂØZÂØÒÎÜt@uWI*F4@ú—f =,ª0õX@ÖÄÈX@àäÊX@æÂÚàÑ 9ö ++F@ÌÞÜèZÌÂÚÒØòt@ÚÞÜÞæàÂÆÊX l Y"3¥æÒôÊt@bäÊÚ! 4О} )²H@ZÚÞôZÞæðZSQÚÞÞèÐ …ÎäÂòæÆÂØ~JJ@ZîÊÄÖÒè3µÂÜèÒÂØÒÂæÊÈ5’H\Ç“*6á´ZÆÞØØÂàæÊt@ ++UB&+& ++Áx ++EÄÞÈòw)R-RH2õ ÐbX@ÐdX@ÐfX@ÐhRž(!ZÐ.`dt@b\djVC.²ÇZÄÞèèÞÚt@`\j}}:5Ðbq'*G\drlL$RLdL/ÒLb˜!˜!˜fL#˜7bfpL#˜%˜U%˜7`lnL'˜/'Òÿ/)R|/)Ò| +}+Üö-&0úN-/;ð àÆý6Y¨ àÆü6!¸y 5?À *@ö@ÄÂÆÖÎä©¡f%ÞäÛe 5š%ª71:v@%7%9%P2v@îн\5t@ÜÞîäÂàv¾595¦Y;:„"8;ï qT8=JâøP`8=²*„@Pè(1 þ'¡Ææ怊 ++î4B©PNx8œ`†8 z3axBT8t b0 mÊx ++Bž# ª**žÂ@ÜÐÊÂÈ@žøˆ B  D¹x0±3 †,/†,|˜$i˜B, Ä-/ ¬0 <¬0+š2`1{ /¹,? „/.E<ºø ø}d©di<å<OŒHk¬,úŠ & 0äÊÚÒRèÐb?HŒØ#‘Jîmi ÿ>"N$æ ò æêB“ùQÒ#‘=z„v’|8òŒ8À Þ} !èò½¹râæàÂÜ»éç(»;»3»$m†±­ ‡§ 4@T ò[ñ?Í[Æ[`z @ÒÂÝb0äðeƒZÂÜÈZèÒÚô>g?|'ærŽqï*YºŒ*8€ 0úÄ 3-°!8.ÉuÓdp’B8“ ü=8­„0±K*u/ •û ˜è_$Õ­/pù ¡«šÔ$‡D/à Z¨Iì ì ä8$% Õ¤ .Ñ™8=ÔøÁ°ä´œù™8_d.-dKÔ#$d/þþx¥xê<á<нJ.ÉþJ9h” °*OÊ"F.7BO/-Í#/ÝÊ"ÙñV àÕdÙbÉËå$¸õ ++ /é ’ÁÌ$/nä?/ÁØEä4ää äò&šŬ9I³]‹\x\u\fUþO.påpÌ•˜/Ìþ\A."ºH³m2Vª ,á#djáR¬Ðd& X’ 蔡HI M,ê- € ++b ˜ÊÎ<§ w $8~F’n*mp”˜BšJx¶H[ H@*®S ? ¼ UÎí0[ &e7 .Dk#—±Ä“‰4#– `.åm2–“@ý3%s,ÀßK•À_<_@^â’dh3TãŽ|giêX3œ”@0žçd_*‡  ++b@‚å 0 ø@xc.åœ Är ú®Tú®Ã`aÎÕ eá6´g¸ .¸t¥°PíPükA4D.1DŒq@,hˆ^ãrÿÿ ++Õ4|™6 .Á]”ù8O¹5.1LÕ7€ àŽâàÎã˜VˆP•à*.$Žöµ!à†<[0PÈiq ++@â0®×`â0ŽçøðO`Šåû–íÓà› ™8Ä òB– ày„åàåå#¹#à%^ë@s V1 †aqYO0ƒà¹: ݌׾VEà2Œ^;êU+!É"]f1 “9"HLH ËA0à áE"¯ ++%]_ 0†å¯¬÷¬È‰# áÀ»XíD ++RcRN¡EÚÒ €#¡ÉX!PèrÚ– ++(˜6£Š˜©–1DÚ˜·6Pâš1¾!˜=¾ØšÈBª  ÀÈ‘£‰Ãx03n8K 8K­X_\Å90KF/í0K3P³@ #  ¥3PhKªHªH tK éZ Ö[Æ(c˜(wPpj (hRh¦ +Ht*¢†"™x&Š´(] §?V"p?VH¢º ´S+¡B ›8ay<u<*)ˆ0fžü"Oü*üüP4¨ üf4bE\ü-Ðäf"/iäf@ œ  ¢  Ld¤D¢ ¢¼d› t. p îœoÔuµ4! =…ù9$/ =$/Á$ $T.I$up²abú?¦_ºú ãð/±ðs.9ð9ð¤¤Oݤ¤„Ð< ++ÈXÅÿÿ ++ŒÌ? =PP@uÿÿ ++,DÅDn#ÿÿ ++ þð/rþˆ¨I¼3˜¨S.Ѩ/Tþˆð/9ðs.Áð/þˆ¤O.e ¤/ïýˆ+¹ @ ˆP. ++P ˆD MDˆ/ýÒ4g$.`ý¸ ++³°š¹×)@` œ>E4ÒÊܵ¯{P ù,Ÿ*7 ,£*ˆž ++üüüæ„è_0]?œS9žL„f‚( (ÊðÊÆêžõ@ZüÂ@_#6æˆZ#G( $$!Füà˜"X#/€’5å åš™qXI-I¢I–IhWF1¤ÅD 3%Pjõuõ/ ++0ì? å,?¢Þ?¤ÚÈFY+2¦³+xQ- ++0¨ ++L£ž¢´ ++ÆØÂææPâ>2½/}TB¸èI‹, –z ¢ª ++ I,T¼èäG,¼Ètc¸,gRš ++ K ò)" zñ&ëIš8Lt².$ ++Ðíe¦iuø,$Zj9À) ++A ++á1§Doê” 2¬®ql ++ŒÒØÊæ®# šx ص*t¥¹kN\æ-KZ ñBݹÞ®©å¹Tãé'/è Vr©üô  â-`¦ç(V¬@ ¡@êaXÓ®6†7 V¯­Í¶Õ4.•ÿŽ,+Úµ°îg¢°îg0îg¸ˆB¾ 0åT¤ûÎêm-p“Fb߬p¬ =à” +±” 9àß'­uU€K& Z[ ŽçBôôŒ1Ûp; <*”ªÌ.`$†ä$.`‰ãxYm^úáÚ ‘ã¤2à“t0øˆ-h„ɲË 8ƒ8ƒN°/8ƒ ‰ 8ƒ>šœ”‰.eœˆ' f@ƒ9ÜÐh@ƒÔ€p`ƒŸà€å0€åäà èãdÒ«Œs<­neEã /¹G€XY * YTP÷(p4²BºH þ”H¤ Ô q€d? žTj/ùTÿˆT.QT¤T¶`7 RÆ ´Ú!à’@!wPS à’å'Á;2¾' òa[‘£ë.8’ðN’åŒt¸w ++XQ‡å ‡4!4b4°41‹å Ú’PPPôB¸tX yYÑ+Ä>°š4` ÖÌÀp(p°åàâ(t4(æ Ö ©è—…øë.h¹éë. O/O šå;H00‚i&xý6ø ²•" ê'(ÙUÊ´%J8>.µ>Øâ< bâ<dX² ÿp$ÐäÊÌh& èÂäÎÊè+FuÏX´°( üWS r¶”§| ?¸œJººœS¼H*Äz¾ØÀX¿„“s2ÂŒs0Œs’¼ÄŒs†Ägqh  §]ÌUÌD":æ ¼ ++?à—¼ ++)Œs¼R€åà—¼ ++aà—åà€`¬sù+¬sД¿².u|«P¤¬sƬsÆEY 5VR¢_A ++¬s6¬s(¬s  '˜8]‚]‚]‚]Ìsáѽn-]-®ÌsŸhÈ  pG6Ìs<4 } ßå1å¹ìsÈgYÞ  ÷ÁïÁÞ‡ËS4º : = ís$/ÝÀ: Š´ yµ( mƒ1àƒtp/ít‡‰¯6tz€‹Q€;lP?P¡P+<±Y<€; ++tÔùw  í0 »«ÕÄ<9³]t t$T t]ay V€9 )¨ õ,t, ,t/YI??Ø .Í,t ù©$9E—žlEYpFp…p44¹4»« <p: ++ÊÌúÎ ++ÐçÒþs4êõfÔù8Ø Ç 'Ç  ].±0Ù ^Öp ++CzØvDHÚ:F‚ ÔBBMÊ xBMY!*MBHM "AHMŠ*æM óèr:ÞBMYê  ++Q rr:j¸@YÍE/F¨/50 Í$A$A/pi3  œ¾% ++çÈ ÒiÍ"°¥Ò9 ++AÑ:/öG÷Æå†å°†å(®"`"“•4 ¦`4 •400 á¸ú: ! ŠÈ” %”@„Ý×U7x"—”êÀvLêP€å¶<@ç6^šËsrTêÈP·õ1êÿÿò;"; êûöäê@0ºš"è’‘X,í6>¢üàˆ!—Æ&0ú› ĺ} ÆY0þ› ,‚Ø"0’v’O'* ä…¨^à<\" @ ô`"Ò©Dè åiXRœ ê/¹˜Vœjå(hè .èÌèž+Õ/Äþxx°<É<–Œ.þ¥HÁ à:XùdÎ\½ K~<~… •2&)P¡ (½R.‘R¤df1zqr+8Bà:P2âû'æ4Pÿ?ä%P ++æ%P ᦽàáXÚ) 4è ++¯½”êB2ZŸõZBÜêÚÄÃ[Þ©ôPB  ++  èЉn«~ ¤¸ƒ  X ³³³«%áåŒÄ>-nYþ  ++éW9 (_£ |=žÐRK  ãº¹ƽ9$ 1$½A'q<ù<ÇTsÚL F½µø ¸ì@ì•@À áW( íîÚ@)Í q ++&\¡ ++"Óh¿Uû`)­Ï:r@”ªUú?'“Àœå àœå c°\” ËaÝ/Àc™ "Ü<½ c™Ùð]  9ñUÓ¬kM 00Y0`" ž8mžåœë G·!———_(àŠå,ž $¦ "Ü6s,åü4 œåO(W šåŒ ¨–ß8œS7(Éß­ `¦!/,à¥È&°_;ÿ/á²= „Ÿק @Êu"À´#·  M #À°ç;  áy q`šåð"v?#`ç!`+duhC#ph34PÌÿÿ ++6£6 ú,“ “/0Tzv¾Pºv{<ñF’H$/½H.×þ(’Qò ++4zBð ) ÆÞàòZêÜèÒØ<†#@û) Šéà@u*ÙCW€1àƒÓEPRSáJÀ/@; ++&h,E'|@Sà#j´ /òî Œ 5 àžz®ç|j¥ØO‚µx‹KSäâK@Úž+^ã_-z .R# Ï|N  -L4E.r@“à*j€\úB|3Tá aëPþøÉ“ 0€å0åäæKÓúÑK½ ½Fž÷Ê­ XùAžj–+0ýã]ƒâàƒGÖ¶à"0JÚÁyä"rän0^ào4/e4.0€¥F85†¥F]{%à“b¢¶®*Â)Rdú!Ú(‚³l‘ @~³ð¤Dà”àÆLÆL:¯õF ýC‚™úK.´E|ø¨*´_Òÿÿ ++¾Û ÜÑ Ž¾„L‡ .±ŒlF`ýHi´\/ }HJL@M@<94 ¼r)*\5? žV­°ýðú¼ùÞCP@Üþÿ ++—$C m ™s‚ň§º?z,¢/-@ƒÃd3  s ++/ 0k ++j|mk ++ W:Q’/*Ë$Š/Š/$M ´ *EQkৠ++Ï´¿Ü6\ª§/@¤.餜_%þÿ ++ `"àýœ=ðü *I üOÌýÿê4 }4L¶ýÿê.QD /Á ªÒ°.ù ¾«O”ýÿ ++þöþ„ýÿê~RBî ¡ @@—å èE¿Ká‰A• ++m0m7Sãn‚" ++Ίé97À<^s¨ k*]C]AAj¿L/ ‚ 3 ½&‡èŒ? ‘åTÇT ++%9Ò›'ä×4 }U:äÖð Åi`8¤*á&àƒä™ ¨fP1JLL}L*vÿ);S\#FÙ\CS + 0<EÓSP/mð‹UHµHÔí“U Ÿ4fJB2“@¡N8î ++(!*FhB.¡?>Ÿl1î`Ž )"€ Ê FPBF/'0òƒßHÆa`ô*þƒ*û9èÞZ©x 10ðö;ò¸ðë˜&à‹‡› ››…Ä› ´z¢›‰›Pí›<=›8‰›Hå›0)›B› y›4Á› › b›O*ò›D’ò›)›â ›  ++ ›Chô„€GrkŒ6ð€cªBXB $ ++Hbª¯D›X-H¢D²DHÖ¹° 8êÜÊðàÊÆáG0ÊÜÈ^ÑÓlK(sÛã<·-EñªÅ$Ã/öü%äŒ~/0—ø%Z6ØÚ7hù%Cröù%po6!Ú«â^!¢ð& ‚ç8ÇG–F& 'ÖÐF 'š 8£øW°ºø€ ++q@Pú²ÐaüȘЮÐ0 @6œ-!@ÿ».?üt/*! 2‘"üÈl#üÈG7ütÈ-8p  Âøs&H©l«¥'ðÞøy«­üÜÚøU“Xø<R3ž@1 3Tã+ ~2&Q“„0‘å@Žçê‹¥‹Ò/åÿòÜ]/9Ü]'u42"±’DbüVâ Dé Š @Jäm20 Õœ)ü’Q’ø(F¢V8’þ@^ ++ S˜€àäÊê9è²Ê8 bêÃ)6Rh$æÊIöPZàÞæÒ[ÛBXêÅY Bj/ÜAz~4»(å'ÑœÑ?pZ ++  ¨Y‹"š‹"‰øë\ mÈB,"p(F : ‹" h>BO32O3°/•â6“¬dT% CÇJÔÏŒòz¤.‰ôfën @,;øù(¸+¤¬Ó­@0ðÁ”Õ”Y  œ=½fMJ2 Šé/cO®*\{"p,t4jà.pZØpŒX'&pB …¸.5î  Ø/ØØØÙÀ0WDg ++p‡âžôØö ŒÊŸ õ¨.¨{ h|Åöê¾Nù4[ÄKoBB¨ ²Oüæ© #éPh d Ç ˜  4GüÈ0Ç @ÒÈͼâvSlÊ ++X· ?)S ¡ ¢ G€ ++<8C/ 3šÿcx n <·"vvz‚~ätt@ÄÞØÈvµ„#Zäe„C‚@°†÷ˆ]/üÂO( 5,*ˆSD4@B ++„=Y жƒ` yæi?ë?sjB Cê c@ÿDY * +++`ÿDÇCºdDPt*ê ++WUixÑ Š8GÆB ŽPT82´ è+$ª*š¸µ@µ`ˆ2‡¯ÕÞ … ‹w ºÞ ++ ÅÞø‡Þ`4®?=@z1W)OP ++0ub´‰#( FõN ++FõÛ,I†N€^"PÓIŠ¾Sòê¾ ŸA*:¾ø Ú Z 0Šo ++?W@¶-@7}J” +++ ++â6¢½ÄV* ++¤öŸ ‹0èÞàE¸0r‚˜.£îÒÈèÐt@b`+.¸‚9@› 9Í^Q B®~ö Ú µŠ ¤öÇ‘|~/Ý‘|S‘|„.Ý´7‘|‘’ ‘|=/õ‘| PDî?0¢Y[/Y[qœÞè@¦àÞè][HQÒh. ¨¹WŽno…40t©ý¶EF© ?×’å“ôO×)5- / £ƒä ++«4Èóx yxÏšª/Á|SÕÿÿ ++b`¤!/¤3/e¤_3ÿÿ ++0I ++u"’pWöi ØšØëfQ  `(©"H ++ ’"# R"gEL8ÈØÚЩØB,  G –ŽŠ}:mÀOõ^l/õ^ÿmÃ/YmÃkõ^ *S=ˆ @õ^± ++à”å pž~ !75ù^ºø" =ž^< œVfÓ^½ˆŸr·&Bàâ”Aà’6Bšš@p ++•A?iÀF.Gi&‚× ++Eu2ÛñÈ¢ŠPà“å÷ÿ1Qãœóÿ¨ß¶‹ 0 ;Sã ½oåÿÿ C/-º C//Ôÿîõ@Ì9ïÿÿÌ9ëÿÿ¬9çÿÿÌã ß’ç‘«)$ÚXà^ œ/ I .9¸Ý”cº(c£ $ÒÜìÂØÒÈ@R½D4Ý" <Ð@ÐÂæ@èÞÞ@ÌÊî@Gî!ÒÊ,8T Š>J"Ï1 @Ï1,H ©î$Ë ++NQ—å@žéWTã=â5âXO0i%`%0ŽQû,1©1º©1˲Ä cÂBa1$ ++,6`ðF@ ++(¢"x=þp`B@Df?° ÓPŽ F0  áõW N”” ŠÁj jj2D B@ ++ ++B7P0B¬ª±a@Þä@FÌÍ0J* ++0;A 5$6)N ª °Kb8 ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #Ï&, ¦ÿAjB )@  L$à™åZá*€Xâp ++>0 ã`EâP…â,à™å^áe:0†åà ã à†å`Šå(V(L `Šå$H:àšå 0àšå(P8P()(((( (ø `Šå0 ãà ã$^ãG ++ Ÿåê ‚â’çðQá(Sã`ö ++0 áàŽâìÿÿê$àŠå( Šâ àâàŠåÀ@âÿ/áøÅ(æ( Jâ$àšåíÿÿêà,<' ”&` Àp–å@ ã ð–åœ@ ++˜Ƙ/0œ nüaœ@0šåÜøð¦ ++à ã  ãRãK8œˆâ‘çQPá*87^ã8qà á ‚8œ/$  * œ_$ šåë@EH ‚âÄ OàŠå,¤ ’¥,,¤Q(àšåêH¬^ãA ++  á¨"6¨Ø †å  á`Eâð :àšåà†å 0†å †åàšå$ÿàšåà†å(à ãà†å`L$ ŠâüÔ¢üq$g$ Jâ0P\$\TTdø0šå ƒâ@‚åã ++,°™å Uáç*°Kâ,°‰å ‹åäI àƒåOžå”/Y”¼” W`Eâ(´H«:$œ00¼"àÌ @àšåÐCàšåX¨iàšå#à†ø¨`¨¨‡¨ (@u:x30‚,‚(f((((W((€(€(H(p(‡(,‡åü:$¡0 ápƒå ƒ ³ àƒå ƒåƒø€'€dRp†å„tb†å dtll x@ ãðšå„@1ÿ/á@ð¼°P;ÿ/áÒxP3ÿ/á¿pP7ÿ/᱈P0ÿ/ᢠh“ø^2ÿ/á„(q|N,<.Ðþ/Ãþ¸;L: 0.îýDßÐ.ÁýT±(£_”ýÿêtb ++_ Jâpñ—zýÿê–º àÂäÊÜèzæÒôÊàÚÚàÚÜÂÚÊÌØÈæ ++ÌØÂÎæêÒÈ ÆÞêÜèæ(€B`8¢  ÌÂæØZÒÜèÊäÜÂØ >ÈêàØÒÆÂèÊ@ÌÒÊØÈ@üæ@ÌÞêÜÈ@ÌÞä@üæ ++HÞÞàæxWñ% ÚX ++ÊðàäÊææÒÞÜ æÞêäÆÊæèäÒààÊÈ(ˆ9÷. (fÂÜÜÞèÂèÒÞÜ$ÄÆlÞrÚÈfjrÆîrÈæjZÄP (‚<0ñ  ++ ÌØÈ ++ æÆÐÊÚÊZÞÄÔÊÆè ++ ++      ó " L  Aõb àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`±0±3l2"u ++¥ ™’ÞàÊäÂÜÈ 0 Hêô*²²àB  _ STãà Œ ++å??ŸŠåŠå »¢ u  / €šåšåçC 0ñj ++îäÒèÊXBb8(BL äÊÆÞäÈZ!áäXú &H™20ZÞàáòæ ÒÜæàÊÆèÞäZY”àäÞÌÒØÊ$Zpæ0ÆÞÚà$±èÒÚÊZÒÜÌÞäÚñ L( ÚÂÖÊZÊÜêÚÊäñXB$hB0 0H!’ ++ 0(<ÀZæÊèZÆÞÜæèäê EÒHB ð CN¸¨ô·Šå Šå Šå"¬B› ++· pâ^ãŠ0aàšåàž—^ã… $t$ßošåpŠåo ¢<Áô°pšåTãO ++LÇ>ž\³ ++\/\A8 ++ï )àŠ` ›àžå0žå£"#Ëâ0€å à ãà€åø(œK¹û œ/@€&þ€€!^9€€Ù€€ _¼¹€|µ||/@€Ü ?0 á„=@š×“tAÀ á$Œ— ++Œ(„(A° á (‹(/‹å[ A á( [ A  á(‡ [ c0 á@ƒ$ƒ$I$c@ á„$„ 8$;Ë ++# ñ:å@å 0å åå°åÀåà—åàåà—å#àåà—å'àåà—å+àåà—å/àå#à—å3àp pà ++pQ‚åà—ðC‚X±à‚å à—åà‚X1à‚Ÿ 1à‚`Ïà‚åŠå ãÇ   ß› ++¾@_4ÿ/á° ¢“„u.fÿï D .ûþÖó ++= š¬$'  4 4ÈÀ.ÝÀ.Tþ<.Mþ d\:@~50XE" Z6æêÄ!\8¨I  63ˆ"E »ò(B p æîÂàžTãç/ë@`žå3@Àžå'@žå+!žë1 žã30ž°žå#°—å@‹âÇ)‚Ë‚C@‹å 44¸44+4¥44'4’443444/4l48P@Žâ0,,[0©0Žâ ƒå,J,0(,,,9,,,,(,,À,,,,!`ƒŽDf44† Ú0ôcáп®ÿþŒyfS@-w ¯ ++ RB¬ ++0- 0¬ ÆàB¦  ¨ QÎq© "Å© ±´ ++œåàœ&_ÀŠåñy‘MKÀšå%— ½‡Å ++,Q€åàœÕ@àœåÕqàœåà€´à€åàœå/@€À&9À ++0@ ãÝ Q_Ï áp á° áÀM ++M ++KQ‚å@M ++‚Í2 œ¤Ÿ0Šå pŠå°} } é} ÞÀšå0šå pšå°|#| P€€`S °€åxq@€åp€H?à€¥ ªç¾ÖÎ?fïOÅ ærúbT À;P4¶Ñ.ªZ*HÞàÊÜÔ³ZÒÜàêèZàÞä詈HB$ ðˆá=—<ÍÀ q€OpšåéÙ‘¤ÆØÞæÊ !PàQú$ 3˜XB&  %x«DH/"@/b/ ++px³Ûi€c€Tã àx ð$ ápšå—å åRãú ++‚â €åå ÒçA á žåQãÛ ø â ŽåD! ážå ÁçŒTãkL½L žL[„TãXLL@ á 4APãaL€LALË°žå Àç¼QãCLL /áLP6QãÊô€Xâ³ ++(Qãèÿÿ˜Hp áŒ1ð—Œ*õ t1 @Š P^ãG°à ãàŠå&0 ã`Dw ++Q ï  = ++]‚âà‚! f§ì"pãO p—åœ +•ß ãP6Rã*3Œ°$Cà’åû€ à’åŒ^ãÿü^ã ++  ãRãËÿÿ ++À°: †å 0†¯/á¼ öK^ãíÿÿ ++”  /0¸40šå áÔ n0Í81 šÄŒ`šåðH’ÿÿê¤< *5hœSvÿÿêìì’K#LS@Šå`q àŠå0Š€˜ ͘ÔÄ0šåšå6ÿÿêÄÀ0—å% “å0—åÃ9“³ —!œ/iœ O áT½T Oöþÿê°\/\<P0 \8el8 áPÀÄþÿê€Qã¹þÿ ++,N ã\¿ Ð.ÅÐÀ OÉþÿê\!/\ OŒþÿê/i p¨+¬@¬Ŭ O@šåN¬/P3¨(/m¨ ¨½P*öýóD/p8 \.! \À÷.¹ýo dŠ ++6 ++RÄòèÊì6Þêè! ++`ú&' ++ñ ++B˜ =¸ äÊÂÈZÊÜèäòˆ ¡0 ápŠå à“è °ñŽâ ƒå “åàÞç á6P¥@@ á…=”ô$Š  ã &_! ¢d±S Jâ[W!"pˆp@àâpóŒà ãàåàâàåà ã/AB#žüø$?0“ü&àAË*”0œOpå  á &@Ð/§ÐAЂTã ++@)T"„T¬T°TDT1šH D’ä… £# ¤@U3ßK á¨@l° .ñl@$ ++XX/šå» « ( ++ ÏQà„å—„'% à„å 0„å¹Oïÿÿê@1ßé#(ó ã¤à áÎããvø Da ++DJ€Žâ ƒå”D2g(0 ã¤ Šå @Šå§'[쥧' šåŒD @šå @à€á ˆ1 g$ ph+ hh¾4À# œs) ^¥ " ˜¥äLñLŠü ++@Šåð¬ nlIX 1¬^ÈS+À" d¼ ¸À °ü@!˜Ìá ++Ð $ <<  /Y S ¨˜<° .5ìò°/uþ˜;˜ ˆ R˜L˜.Dõýÿêd@\*ˆS ^ãuðˆb ++N! á°ñ à Òå! á “ÌD  CÑç , R áÐbàŠå hÜ nì© Ü,& p/Ð!0“Œ1‘l"0ì ++?‘€ ++€Ä9ôð oè™ ++ð«Øàð h ++ðHO‹ÿÿêH o`) è ?@ŠåŒ mD ×Ä$Rá}\/g áP³^ãO ++ ^ã9h ++U¬l+ƒ,Ñ ‡å ‡å 0‡åS,O‡å@È&*) ®à á@šå0Ç/ “,¯/Ø"†Ôp†å @†åø0 *û+Îت šå ’å ’ØàØ ØO   ãÜR@ l3 H”L@šå‰¸!“Ü" àl(¸ +Õ 8àt(„&lX/0Ü&/1\Ì‘ ášåT$hh ¨Ooüÿêœ /Ýœ "Yü o 0H ü.%Hø< a<¼ ++á2üÿê¸:B–8‡è `p nÊð¼)ñÊÈ@ÐÊÂÈÊä@Þä@æÒèêu)à@ÒÜ@üÂ@îÒèÐÒÜ@Ö!@´3@üÈ~+‘(  È ÑFêàèäÐ&pPD®*l/‹ s\ó á®  á@ÂããmZ D° ¬è o4*Ùxw,pÂã „áÙ ü 1@ ×lh¨,‹`5 $$$ @¤Œ"C7œl¨ @@šå¬¤ H+ äDÔ%?ðšåØ1H/0D+ÔH<Ù<.Xÿ òKÿÿê"jPÂæÐ ?/#d[uh* RêÜ_?ÊÞÌO S`Bü¦XÃ/t2(p*–`8 R(@* ++Ú(6cB”   “XB6 ½Ðª} ªâÞ,!pŠfQÇ ++4žj"µ jNnW0“å¶nš ++ @Õ:" FF¶š j𹚠z ++Lã ++&"Ù ++d&¤&t.-t.Š ++€tØ ‘d@d6dLd õd"æ d !"Ü d <P¶¶@àâ¶Sxà ã”#”.‰”.v Ðl”””Ð ýt.Ît"Ätltœt .qt$tttt t åt.ÇT"½thtT.Id‘d‡d`d ­dWdMd\d .d1d'dd ud.Úd"Ðd d Ùd.€hvd$h˜h .Mt2Ø(tdØ ±d.êd"àd(d .dd d|d yd.Kd"Ad€d Ýd.€dv,d .Ad.|Lr®0h4L8Lüÿêè)4$49414Z] ++9(4áF4$4Z‘ÙF,40Ì44ƒÅ04q0 Jâ0@Š^|HGˆÖòº8:A6 ++œ0>0Sã °ƒâ šå ‚å“ ’å0Óç°L@D1 áŽq †à 0Â+ç0Ò&ø"`¾4È¢ü?É44 `Ó:D/ D·DD$`[ä?UHb4@Šå&` KpbÑ ++ `8Œ 4à)JSá‹\/y8S^ ++8$_< Šâ,œ¢üÿñ<< Jâ<@Šå8>0ãH_@ Šâ0H ++r9@G @Ž¤—@@ŠåD Šâ4¨ÓmûÿêüÿmD4D°=@@š…F"ÄHÄ8Ä<(s†å@†åº, ‘LéI1M<2€Qàƒà™^? ãúÊî×O@ ãÁì<8  ’­8Ÿ8 Jâ~ÿÿê 8 [å8’8j<+!<d0hd@dd ´1„å$MK„­Kóà„å,àšåà„å0àšår 1!à„_%à„å)œ77DL< éÈ Q `šåD™šåN1 áàƒ  &/ ƒá ŽùK¬ö<¼ D ++*½ ++.,þ˜&ƒü¬*¤¬’tw /Šåì ++!*e¨ptUt:´tü t d` j`ø¬Ø¬ ++È’(#ÏHÚ4ÂèÞÚb hb(2-!:9)gXèò,v6 /4/PØ+@:½0‚(*œ3P‰3fE26XT& X`ÏH: ++äÊØÞÆ  j 0 "6:£b7—èòàÊZÊèÆAwZÞÌÌæÊè¶bXÒèÊÚºbD8 ´b@:<ð<3P€PT8B„ ¦ØÒæèZ|ìÊcað0<ˆï lïXï!49<î(øFÌäÊÊß&ÔÁÂäÒèòZÚÂæÖ*2fb2 àT: ++ÇHæB!Ú J0ì‡R0<0À`aSê6 ++˜;p;/ ++‘° ±HB@  @ «5&ìà­5‹b[9œâVµ5  ¯Ry ++“NQ&`u u Å$Vy Epå9Ñ *áÉDõH ^)íLùn)$@ní&Žàƒâ ‚à†jé ¿é  OäÿÿêI.í ªs@!@šÁ 厱 ± @ :$Žµ 9@šÅ**0Å*&rŒQ 6qã9 ™ã9dHu]ÿÿêªÉ–0>ˆB6 $ ++ØÌYAPH6aò@ ++à@ç8VJ@ ++Û8RÿB æòÚÄÞØZÐÂæÐèÂÄØ^ n^8^-2E= fQDÚê~t§F ÚÒÜØÊÜWf ++ÊâêÒì}tH ìÊÆ%{BJ È2=B=€,/`@ /HÒVHB@5_LÊâ1p1)>A-'D—@æêÄ”šFnH)J L +ØžE>€! ++˜4\Q;@u6. ++NØÂäÎÊhk?ÎÊä r¢*@BÔ WæÒÎÜ- ++ì¬Nö¬È5„hBR  Ê;Òt?Ït?¬t?”z%*Sïâ®èJÄ=ŒK€?EP-€?Z€?\Ê8È@€KÕ*hÉ`.E¾`Ä?<ˆSÕ@€?D/D#ÔQ ãxN4X”@qâj@QX?h mhd4f , ++ø?]/!ø?']<7,¯*ÿÿê(‚Pó?p, b JR˜Ù0RŽ\0/uo?ZRØ?ÈTæÚÂØز%h`²²*<B<²TnÒ££T£@ì sV  Ш ++ûeDÜΨ ++¤ ++¯¤ ++ 4 ++Ý ‹*e“Üvœ ++wl` ã0ŽáœdFEC^áB³/pMÇI=2 |U ƒ00 á µ%€3 á0ƒâ5@ ++"0)x 0žîxcjà áÚ Ÿ/ @ÃQò`àtÈü¸ •Û´OPT ++ïOTéT#WH/1T{^“ÿÿ ++Õ¡ ð ++Sá á¡- ¥¥>}wð ++ áDQHJD'¢wH ˜Ó ),bBVp 0êV’!( ++èú ++:ÚVú ++r’\ aø bª#Z:¢&Xž)Z™\™âs ++ßP^ ÌØÞÜêÚ¡ dK #B;ïvdÐÒÎШyfØÞî­^­ ‡Ÿ`ÆØÞæêä /hf©$(<î  [ð )Ʀ`¦“HB~ ?XIs„r´O@Šå ÌRQ"ÞQSÏ ++7*, nÀmâ6<( jÀ©ê6</@nÈé*7@& ã65"@™ ‰¸rî1>‘Jä2+8Z2+2+@ ++Z7z2n<àâ0àžF$Z06J6 *¹6V=ÙZd*ÏžFd.d{d.qŽFdd‹w‘„ ` /zo$&f‘7@LW^áOL1 0 LS ++’ƒâ €å L1K ++S%CL„L*”_% ågtW‰Dù˜&p@&PÅQ`!Y \±Ó^AMH¬¥/QH?„å}QcR‚ð£tpBþ8\‘b8Ê„ ++¸®¢6†÷  q'D?¥ IÄì †l €#— €#"•º€#_ˆÌð¿‡%F=½ % ++ìÏÀˆr#Æ-¨Á"ŸÁ?Œ ¿Ü,? ½)Š¸Œ¸'å7˜Ž  àVü V¿Ÿ ÎÊÜæòÚÐ jÐ#H;Ð1 ++à’(ÚR ++¬oH’ ++Põ/ˆï (CÏ"·ZÏo”àÂÒÍ ­,”!9•Š•”•ȹ.,à% ¬ 0 %¿EHš– ++› ++µ n²":±þeŠ8°–°Eh hM Ñe’@ò’ïb K 58L#˜L#xh³)#“ú˜XZ64pB¼F0,HÙ4ZêÜ“–.< 4­v Í€&@« 3HšçŽX #?PhÏ1°:+Pchezú˜^U   j=“q@üæX@ÎÞ˜1OÌäÞÚ> /p!ÔH+Ú˜™0P¤0â@Bœ ˜´ Ì ¬!à`M ©0Žâ 0€å0X5¤n#&‡úY]P(mòAj:‰Ñ#ÒQ9p?„å Î6õåØ% ýt1pšåÞQúY Ñ <}<} ]#}œ .™œ"Â;¾; .Õƒ€•ÿÿê"ê' ++h]-Bœ•&`6–b8Jœ@i2ž j] 0,(]#L;ÿ• ^YìÊäæ\‡ÚÂÆÐÒÜ1,ÃÈÊàÊÜÈÊÜÆÒŽ1"{ž{`Ð  ˜|'rp¢,HY”"Zæy–€O”D`¢ ++% xŒ$ƒ@üÂX@Äêèk—/üÂÑ(—aC;Ò˜e•N=b˜l! ++øÆ8×–% @‚W#Þä•kf¨H¤XB&· ' ++@Õ÷‚&@ÎÊèZÚÞÈÊX?»²&pR ržhN ¿ÒÜÎ@FB@ØÒÜÊî e˜óê&pB 8’&’—IJ&Œ‚hT$æÊlAZàÞæ•6VBX¢B7Ò€+¢x*!ò 0ëHN%B%Z&üâ–ˆþHäÊ‹ñäÞèÊÆèXš¦P ++Hâ†Þ–wp¨H,ü† Ü|rˆ`Bª øR†ý†"ý†Îuâ—î.uî臑rÈÊØÊèʯ$Pà—ª‡¨`B  H°B°1&, ’'> ]‰³Ž]‰]‰0€#Ž 튗e‰#à—ÝŠ—ÝŠ?à—åm‰ ++ ºãZXF¾Xo’B¬ãˆt%¤×ˆ¬Öh®  Ÿ›ƒ3&’Ÿ$ƒ³˜_†Ïs1à‘åÿ/!à·e\'ˆ/ ãK€ •k<!0žD= žW \½Y”5Ë7@&^ã-H´B"¦1 à“ sOãy À41ënAD eB Ü/qÜOžå eY@±@€t"4?žøô .%ô­°6˜Ü q+nug¯à B8B®#;`º  ´20  á܈|ˆP h2‚’å ’å0"`ø"ä‚/ l .‰è‚wäv^~BŒh)Uˆ t‰2S ð0À…Tr’Zä1pÖA5f3à„så @嘆<}hŠ [x}ѾN,‰ | ¬Û£ÝB†å Û£W¥"`ˆúcžè)ìr¸/A¸ÆJ‘̼Šò$¢B²  ÊÚÒèZr 0ž²ö÷䱩71àŠ/ 0û/+…DÒ)RtÅ@š3‚ —š˜Vð0Žâ 0€å å(0 ã0ÎçeK‡ƒOn‚Œ0Sãð WWWð €åå  ã Ãç°žå0›å#1 ápÃãɦGSáH³1ð ‹à ’å" áÿQ°b0Ê ÀX1\ãXŒX.ŽRŽ Ìç§;ìjŠ" °Ôr/0û Ÿ0"¾4" °ÔP¾æuª/ ãV„!„¸¼h00 ãPžÿÿꀊlì .íì`š40W*5W¨A0šå}F@@)@ë.¤:6 Ð¸ .¹̦utùJŽt £'s.z°hÊ0"²´/€¸   ùx~@p á¡)A€Xâ*u7³i0RN º û¹H] ++ 33"pƒÑ*Tßÿÿ ++Ø3 L/LA9ô’B¶  `´˜:µ@¥5p&S ‡ ʃé4î ŽáF1 0ž>>’áç®0šå¦f%àÃF 8$¥©òI.²TîWîFÇR áàPzø*u ++T895H¦JS´ÿÿê 6 88ü‘_Oâ„4,ô@ ãrþ µ@œÛ¨: ++Ô©nš`B*¸0j¶â D h%€pº¶¸ß&`Äi93b¶ë3 "c¦äN©$ F°ý!ñÊÒìÊÈ@ÜÊÎÂèÒìÊ@ h#*y‰"¸8¢²%¢¸8²Ø‹‘ *²H ŽÆå¦À@ÐÂÜÈØÊ@ÄÞÞèŠ@õ@ÆÐÂäÂÆèÊ´©s@îÐÞæÊ@Œ9ôH´ÊðÆÊÊÈæ@djj 6R2²ˆfC ò²æ$ ‚"HCŠ²óA ++²Š2(HL¢*º $;§Ô?$XY?¼ ++'@%jrÒ# 27Æ"! ++äªJ©FÐèö ++¼ pBÀ  ++…à ÄêÒØÈB0"ð4 ´3"N`‚Á‡zf箘> :ü}@^ã,ù9À^㨠++ ^ã$\4@^ã¼.N@^ãTÄ/à^ãÐ ++^ãh ++ˆ…@ ++Ë´ øp–3^ãj” Yü>q šå ’ž * '­T "DÁ ++µDjšå 0”åµS30f üH?Bšåpþ?´@4ø.0U(U£µ? „k¯åD0àƒâšTP0ƒâÿ¯/ Ÿ35EàøDÑÿÿêLZU [ÀEÌh)ó–ÿÿê,^ã# ++0^ã ++4^ã· ++8^ãÃÌ_² ++Ì,/ÅÌ^Ì”§€£0 á0Ãã°`~ j DK*NlBY@0Žâh#  ARá´@à“çמ,À\P)ÿÿê|’V¸ô18 4:i[\±4/||A ++ÿÿê48àîi| .A¶®0ø.u0_=ÿÿê<" àiì´d·ÔŒ àå pž Ü”¸°( ++/](g(t€/ ++€PšûÿêX’} \ôPŽûÿêP’e 0 6Ežy(šåÑ%þ¼:|'’Ô@õÿÿd  "sûD .ULæîoÚ  T @L Dà¸9`8 8"QûßÄ .ý€ìиÒx , ,@8/òúL.yp¤üX¦°)/å°ÿ,/%°˜//}˜ÿ,/½H yHfü ++/“T*Tح؟ä/pT ]eT/šåì D®ìÕH n„­ðL‡`€ 0/ ÿ,/]8C/µ˜ÿ,/õ8?/I8?/8ÿ4/å8 /Q?/¥ÿ4/í &10 t°«÷ÿêf’¾•E1äæèV4®=J¾ ++ˆ€½XA¼b8 ¢À¾2óPÀhzÀ ++À³"CšÀ9/XVoÀ`V BV ªV%:V/ÊV§#2À€¾XV?@¾21Ø+¾+¾1ˆ-“ŠÀø/‚À”#g1*À ++0`#a1ÚÀ a3¢À˜ §5rÀh¾0wwx©o;ÂÀX2C1O Æ ŸÍPPBÄ'0À Â5ZC~Nh©aSŒ›ŒU'¦]=´@à”åE#f”åH­Hr1à”)HL)Q ã0€ò]1‘ PC’Ú UµÄ(lá™Í? ”9³]@Y$U§!”Or…E (àM'ÙÎ2ÇŽ=Aëÿÿ ++cv~^auL°€â&Sã±ÿÿ ++xx/QxOšåtemÍ(]/ä Ø ÌÞØØÞîZoþ1WàåLÑØ2 åD.2ê;B5mB5ÑØŽb!²/6ò‘h aˆÈÇl3äÊÌ/9HB8,Ñ@ÜÎz~u' D¸g ºÄ ++(³]@Á¬Á0 GE³`GêÀØIÂÀ«'"KB/­`8MÀ ++pé±hBÊ  p 0ÆHÏýÎ6àÊÈxa1‰U“§÷*;=C2 –.qê+fqXaHD µDÚ ++D —åÞ0Þ!ÞâÍ¡Q„â32 @”W>?Õ€³É=ÚáÚpÚ_àÿÿ ++½Ú œ Ð>ø .­ø\1‰P0rÆrÄ´@}3˜È *&=6·<µM%ÞÌÕ >0'bBÌÊîÊäfæ@èÐÂÜ_=6Õ ¸AÌ"p8òüæ@æÐÞêØÈ@ÐÂìÊ@ÄÊÊÜ@Â=>e8ŒÛÔ`ûaH rÊÑe$S ++º/PóoYbÀH2!_’»Î ¨ o+Z|JB:Wz3à„Ç;„Ç;C„å¡A ÖWzörBÌ xÖ èÐ:í<À Ð & àÍ7ø%#Ð  Ð Œ5 —Ô d6ué ¥  .pâéJ!—®<è Lˆ8á/hèTÂQ9@B P8‚Ì&FfRÌ ++(è>' ++P2J8O ¬× +!@ogrÀ ++(•/mÒ•!u•/Χ!${â§/xC$%ƒòê(ÏDŠx/ ZÛ8&b. +AçF`8º*ÇUü ; ØÄdXD ØXD ØÁzBÐ  ++GØ óת‰/D° á}Ä"i]/"[]/"(]/"ó]/"Â]/"‘]/"\]/"+]/"ú]/"r]/@= ++±-" ©-"Û©-@œ ++™*@] ++‰'" ++Ñ-Ó“š Å#@! ++? ++q#Q’å ’]Ô  á0‚â “çËà40—7¸'6 !–ipˆÊ!°šŸã©pv 10Äà’åàŠåÀ’å˜Õ1PMG@€â„ßÀB á`“åÀç¸6j ¬/Àm \¼Ñu °HË6Ñ4 h` "Æi`p)põ´È/àÌ"üÅ­Ì "àÐ²Ø /ùØ ‰E!>Ì ++Áȃ“:F“å Ì µ>•n/àÍ.¥™n}'/0ðugéï80èÌÔ  ÐRÐ!‚œP“å°8/ÂÐ ++dÕ6Ô/yÔæÔ/½Ô .ñ)À’å%’å!’åà’xæQà’å$Ý# ’å©+¤Ôé?¤ @  %?c…4häáZ ãÓDéZ€äm×éZãò'†å+†å/p†å3°†å70†å;Ài?P  a×Ù! °D•#¿À’å’å’$$ä$ÿ†å†åp†å°†å0†å#ôåô /íô ÄôÀ/áôuÔ‡ à"MÌ/Ä håŸ?À9C.¡ä¼Ò¼)_†å0¼K/] ¼¼¯™¼pç°†å0†å€ "<ÿ¯™D/% ++D *ÎÿŽ½p5à—Y)2²Hõ_ Õ ù_+á ++ù_ ¼ÅI; ++`O Šâ 1 .= ª\>”L-ýÿê4L 4LŸp†å#°†å'È Èà /)  ƒ0 | Œ/ý \Œ/¹ \³/\ DŒ/A §/ýD³/ÅDÈÈRp†å °„/Ä =ÂëÄ /‰Ä Ð PAΕqZÐ(áBaºÐˆ c zР…B3RÐèSB ++ДŠûx¸Ø!‘ëЦPêÐBÔ/G¸/GÒ/G,~áO ("8Ïða@‡å ‡â°%優Càtâ6_G–Ž/pJµnS\ôX|X"¡E^ãÓÿÿ ++ÍøÁò0Å/aøë@¼Æ`òBÒ8È‹G3Ë€üSãSÊ‚¯<`á+g°Pã'ªì ãƒŸ="àŽwFeàŽáÿ§<ñKñIaàƒâ à€{FõI «G«G/ÛͯG“`0jv .-cOŸG ++ mË¿3WÚÿÿ ++± U DGH$ÕGH'9—ÁôGHÌ?H%¡”ݶò Ì«C%¤ÿÿê rzB²Ò?H"hÛ0rÒ/d^UHo 2Ò¨UHB ÊÒ§Ô2m]}YóYbÚÔX% ++ö’ÐØBØ ¸Ö &P{RHWîu7 ++7—O*#MM MMA—å(¸/ ++¸$[· °£'«_Îã7L.L<3çD/n HIHH‘HzD¥XXéXXzX#XÿR='—¨W\uR”/•L+ Õ@;Ë» ‹>ÓÃ%Ãu ++; —ØÇ Ç/– +q(_ј';à\ËO žç/Ë(Ýl´ƒh ô.5`T,‰TV‡Uð Å<oêþÿê,p.@/Ðþ|A<¸‹s.±þÛF+¸+4Ø`²MØø%UÐ8ª b:Øx ê b šØpôQa BØHCq ÂØ## úD…áÒØ8 Ú"M1L@+i‚Ø0 b*Ø@[ D¢ØÏM""f_8šØÆ^ÂèBÜ  @ ¶Ù•% ·A€XâqD. ‘å?¦ ;¡ *]Õ ÕØbšä- .Ù â; ++œvòUÎ7O”å7"H˜hÊ l œì ++æm D/*` +m4@šåð.TDÌ|ËÌ×ÕÊÈ-K¤V5#0—±J”":ñ&pÕÎb u u"p”P PL Yî Zܬ |` " A÷ P¬(žr.Y _<•<6+ZÞ @|/Xáý®2®2Þ˜„4RÞ¹0êÞÞΙ2 QÊÞˆ f ŠÞ@ŒD JÞJ 'b&BCÂÞbI:Þb+ˆBä"òäàä2ä (¥¤¤.Ý°äÿÿkOä,|ä’äTÒàHäàäàäàäàäàäàäàäàäàäàä èÚЀBâ  ä!e•ä„±*äpä ++ä(b¼< <.Á”<!’iQ.4’ç Ué-4*M.!žT„%/¹DÌùth(H9dƒ|u<kHdµ,BZHRšâð=1ÂâSDŠâ' ++ I âP6:€ZÐxBäÄ0pG?./$ŒŒï mibT áTG(< .<Á·º·2ò¶@2äa”CÚä”ORä” "%Ò”hæ  ++€”I”A”W0 ++””””,w 8ô Wœé\ל%œ¿œ¸œ 3æ8bœ4êæœ9bæœ`?¦)bÐàÆ`Ê5B€BÊ ¨pBè 8¶à¶ضÇõ—^ã˜'„ÂÂ'™f'Â@Ù@#D¥ H!²"0#ç &l@°£0†å †å †Zã?o8q&Ý10—T Xi( ávOGo1’ùeOo<" y1 0’áT. p+"à!Ý =! "à!Ͳ㹪^b.•tHoÿÿêddd# ä.pOÿ`°E@Ü<(!B, ++3Jè­ ++DÊè?óZè8Bê  a èúTz ú´O0C€åNá²k4àÂçTQ¿3>l1 “å<¥5È+©>I;Æk;43 lÁ D/-Á K5E˜ü%/¥üèNÌl;/lŽ ++#5+(| Y„ÒàX…; ++"p9sDŸ2ÌÝÌÕ”W&M!¸y"*EGÀ "ÿ5´/‘´' e#âÉLi4êÐ!ê!CPBÔ!cbêX– ä3:ê f "ê0\ C Òêp,c ¢ê`û%r:ê8Ê5ê3A ’è3'!E&QBè¨LD "èpC ¢èpIèp°pT`81j~&\ì¦ °\O\Gvû†ê ú"ú ‘‘.Ý œ·P·[!#Ò} =<¹²* ++" 1RìÍ2@¼Dì, ++?’ìÈ "5È Yî  O„¶|¶k¶GIG€ ¹xGA•G,ÕGO„Š}ŠŠî“Ô8zîHÖt£î[CÂîŸO :îŸ "7ŠŸhð  ++ xŸˆŸ€ŸoŸŸ[ŸŸŸ(x#4·Ãx#kx ×êx#'à\x# z(/¥x#s寙<!¯[›y¯ ðB"HŠðB"Ebð°4âð°?Zð{ ";ºô«2«LL« ò².2À a#þIæ ž-žDMW>·~“&.á“GŽÛ *yÛ·Å$^á"_¯Òd0ƒà0“å#ö.Þjz ++ Þî½Ï]:@.@ÛAº Y{³ú®2Ê*R ++òˆ 3Êò$&J 4Êò,©@2ôWòWôWôð "=šðöŸC E ++// 9 ++ ++ƒø¸•ôêôÑ<Ñà0 Â)@³ aBö@oºö #A² hø  ++ð#wv£ ÿOÿöG 9öG»E/á»WM» Àbǃ¥O±d©Oãñ‘CAšÃHÚøÃC²øfŠRzøHkoúø Ã"C¢`Yú  Ú‰ÃlpÃ\ÃÚ pONâÈ )s 4(¸s ('à\¸s D-#/—w .%<4xw úw úw ú™Dêúw 9bú7X´oG*Ð8=JF$HÁ‰ü‚Q`H0væèÂäè ++0 "P´9šºÕJ0TêÜ\@ÎÜÒô¦NŽÞàZØÊìÊØvøzD ®D º8ú®(qŒÔz®` ++ÆÐÚÞÈkWb® ++ »°f ú® ++0I€þ£ÏRR*`"(Ô:H ++ :ñ 8Š¦‘ÒzþPÈòÜÂÚÒÆZîÒÜÈN#€(¨ Jž æ@Ó{#Â@y4äÒà#ŒîOP1$15 ++QZÒàñ¨hB0øBd à ‰‘Œ€ÊâêÂØ~+STãó®Þr[ÄK".ÃÆ€àâ^ã³,Àà“åàâ^ã¯Ç!à Ÿ››é[€À ãPã‚827 2À m¯põ[CÀ†åõ[.`$b$ $Ê¿T˜P3„(„HF$À%|Œ(Œ¼E7ÛŒ±Àå @å A·î#ÌGÖ3·îÌG_=#à\\ \‚@Q‚@Q‚‚S‚å‚d‚ta°‚å'0‚ƒ„}‡ ¥Þ˜A‡ Œ=¥¯ ˜FK T= üü0ÜøO°‚ånaîô< žU ûÎT °=Á/‰°=Dšå&® ‚œÞ8 Åzœ LMlTã ÿÿ ++<¨0B @OP…¨91bW| X"HGÊxB  IŽ»!ž·)Ž"à“(ÿ30ž×Ýžå°—åÀ‹âàŒB̓˜_#À‹dŠ?žå4p44#4]444J4ÐaÀŽâ0Œ5;,9ÈP0Žâ ”`,(Œ`,,,,,!ƒ•=ì`2áñT"°;®›ˆuÆ J ++²ÆS ‡TØL¸Bb Ø‘TQ LQ ;ý’Æ1B'O†# +ªGÂ3†åöMÆ3†åöM*†C9'à†ªí!UϾ^å™ `>Î9“ÈTQH´­·p¢B^€¤KB§67u”-š0jêq”4¨€ q#à€å'0€ì+” 7ÜKÌD! ™Z¶•”_šB–”"Ü ¸XB\ è¡V|N|=Ø3šE|+|,Ø ++„+„í„0Æ„Y„²„«„Vˆ „M„9„/„„=#0€¬„ô/ŒÚK9ŒEŒ´ŒŒ€Œh E(¡f> pq"5O& ++ D ¹LÎÕŠC Å2áplDD#“åx¨ôǽ x¨aA á ž7&× p0‚â 0Žå‰ô ˜¼0ÂçŒTãpPºP P_„Tã\PPPcPAP(™0Âç¼QãFPP /ëPb6QãÑý¼:[`Qãçÿÿ ‡<Ö/ ­<Ì c=/5Ì.–Ì/Ü/}| /`ÌLúPCP /&ÌæP/| /ìÌÐP/¥P /uÌ"[Ì/FÌ Å ÊÏ= >ƒ˜ .YþR Œþ“{+ß|ôW+0“åom3 ë{ @1#žlàåpž¹Ý ++.¡¨D/D åD7ÂS6^㣠…ƒœ9ž9æ"tI+Yt40 áš/0”"<[¾ ”-0šÊR+o÷DÜÒ6 ’6Ìa å 0xbàžåà œœ=à²PÚ ®TžÞÂT‚ˆâ¶` P*¹`¨6UÿÿÔ jdÕåÃüµ§#ͨG< ¿·Á1 ’š7'‘£¾‘#¦ ++Ÿ¾hh€ €€( Ì Ô Œ*M”/óþ81'0“Bfl¬“¬‘ ù=™ *í=™™ ù¥¬”1/0“㧠秕 /  ØjLÙLf»~  T/- ++TY"pD ožqDoQHÄ8þÿê€Qã,þÿ ++ä0tT+Í ++  ã<þÿê</ <Oþÿêì/] ìDéýÿê Íœ@œ±œ_@šåÈýœùH¯˜$/I ˜Ž˜‘HIuýÿêŒ@8äÓ ùÚYàAä./ý # 0 /™   LåLMðüÿê Þ/9TA"H^X }ÚYŸÊH"Âü "¶ü # +Ù !à ûŒS‹@/%@OŒüÿêð/mð&rüxœ@œÁœO@šåQœ/ H8˜$/Y˜˜¡H/þû° *ý$.Ëû,.Äû=ó¾Š ++Xú  Cl' ’b8J 4.t3ðBÙ±%P RH ++æm›¡ ++(ƒ› €›B8 ‰ØB °ˆO4oxx³E}âà© ;© x4(4h`¸2 ½¸ ++:¸½.O ++ ++@ ++BN Øh%²mØ:ªm  ++‡È º&z~ÕYÅ"nÅ"[ˆÛ/0 DÇy Ñv,O á@Éà ÀÉ ÕáQ1»ä’!žŽö2-P È‚( PàñT 0¡Z`Tá" ++ ü”P p!@ƒ$\œ*h1à‘ª'9§y0à‘å Q10”Õ20”å ”å v3ãv± ±13 á"=qYž0–;©p©¹z0””Spžåé‹yò=° LÉ ++ Q×=zÓçyÝð:"³oO°Q‘åwyw à= Þ(’.8A¢.·e5™D“ç 0“ç- ++ @N»G"(! ++Ñ  ++‘äÔX/àá ++.axà9¡ãtáßD;a@HD0à”åYLHÈ .Ý4p¤ˆa"ìþˆ/qˆc/éˆàh<”Ø¡1Ø¡   /} w„ / c/‰ #t@`£ `£üù{‘î/¨1à‘+j1à‘+j P$Sãí400”åe10”(ô0”å00Šå0”å,0ŠåÀ§(ΕGQãʼðÓ n|6mðÓ ¸¼Ošå,0Ô _|$­@ ¦ô]šå0šÔÔ.åhšÈš­0&4"à¸@tþCþCÉ iúC€DâüÐ ++DX Vü.å"íÿ!&1»ðk'Ø-ØØÖD ì/i Üà™Ü\ Å\‰ì/ ++ìÀD¸EDyÐecapQãûÿÿ ++¯m&(0´Ö¼`T$× ++ô»l(ŒTL[LK^ã3| W(Sã,| /  b1° "2ý° Y@° !ðx¦¡p¦"Çx"šÇx@ËäÜ ÜP<SãÀ$C0”å Ì^ü D  *) D ¦H [pqH$èð—@ _`±@‚Óo ñ æú* ¨)LLHÉ L/@ô ++N̶²Å&À5 “çØ40“ç(dî Ș"üÆþíˆdÌ‹±sQ4“å P Ü"{üP/5$ Î$D­x¸$ÛÙ€£ñõ)à‘å,àŠå%à‘Or!$$X<`1@SfLð)0”åH0Šå%0”åD0Šå!00ŠåT<.@ÕD ¨,50“`®Áø$!š†@VœÚ̧z»S0ŽåÝØ 5Œ„ ++*Ñ™ŒÀè 5 0‘X4~½3 À0»¹  .Mèèp%?:Dp˜ó’PS^áY·90 ++ À‘ç‚â‘ç°d3ãdVì Ø¥,€ ++/-àŠTôèìÅ^Aà dt룄 +™£„ l¤ÞÄñÄ  SÍÿÿ ++³ ’ÔHŽÿÿêü,L$/yL3/ÁØ+Ì Ì$/EÌ3/Ì,ÄÄ$/ÄË/ñÄW/]ÄC/µÄ3ÀàXÀø`3$ü%#Ø„ „É„@U T(T*T˨y0DaDº„¸H_Sã%| /Á||°/ „+ ++“Sã;`äLø/­ ì#ìýì( ++ä/E!4+˜""è÷( (¨o /Õ! ^šå’÷¥.`‹÷ÿêJjö»Ù hí:˜×Up]ö3¨ìÒBXGEfÚÀÖ4($$ ê$ð$$ *$&%'H1pF×GÐ#x ôÐB  ++ð ++ÌØÈÓ"9#š«!ç&ÏrÃ! ›¿##'rO‘å» šœ¡#â$öîA.ýAÇÐ/Ç«!pNðG´° ],: ÃÈÃrÈÑ ÈÈ/%ÈS/È È ÈíÈT/UÈw±È2eÌE0‘åS ‘åÐóEÉ ,œ6À)S   /  S/u »ÁR`8ºx(œÝP;P ÿDš8l"çN¢n/ 29$ ¨*X)&)V We }K )IJ )¢Á¸£ž’€S(¼a‡XÂ(Fð.B* È ÖÊòìoJoJr óÊFQ0SŒ ‘åà’¦è– ÝÒ ^Uà¡=/¡ü‚˜º)Se5”i.Äé4Ô@/uÔI I I ”d Â,ü Ax~XŠqZ*H`N"ÊN3ÖÊòGNS ,. .(. 0MŠ+s(0·ßæÙ¢.(01@­2­!;r­Ð÷/p.è 4a!Iâa X$pˆc6È8BP&ÿ)£PSA::€?<àÙ€ ZàêÜèðÛ!ÞÜ»á`ÂäÒæÞܞʌPðÒÊæ îÂäÜÒÜÎX_ºm7>UqX@0 en  gJ x’ ++/ØÐBí&è:D oFo&súo*uÒoc4X ++UHhàñ£FPCæÊèB0?'ˆHV†0Z°JeJÓ/JGL§Ý;ÝQ‡ÂmP4(@°ANQ3p„/ ++0¡P£¸ lüÂ@ÐÂæ@ë £Ý#ÒÊñ ¿Ý/è>)#/•Qó!²  hæÆäÒàèìRæäÌÂ8ßæ@ÈÒÌÌÊäKÞÎc #òHG€RýÌr'2 `›S 'Ê  )r Òì‹@TX+Ž"X1#-B 9ÞiÞ,/zh+1ª@( ‚UÞ_/5 ++ª'7Jª&7âª/9Šª';Ê1/=bª/?šª-Aʪꩺ†YE ’S<Èþ5TÙC¢V"@ÀX­`åx€`ÆÂØØZÁüÞ' ++0•SYÊ\¶R¸eC’^"°e:`UIºbUH¨PV X<3ÈëF¦ ³ë.30´1vhF÷7÷7 ++&x¢ †üæGÌÂÒØÊÈ@îÐýÏ ÜÎTXá0¿¡X„T/XTT ++ 6 ++T*d Ê @PBxX\T÷2 ++J*.¬<µ0f ÒTh 2œ¥ K〥3ý0vh7¡/ ++(ÿ ++J ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #MÜ,Ñ òp `B¬ €  L$à™åZá'*€Xâ ++>0 ã`EâP…â,à™å^á :p á0‡åà ã à‡å ãpŠå Šâ àâàŠåÀŸåêÿ/á…æ Jâpšå á,HÍHÿ0‡â@ƒåã ++,°™å UáÛ*°Kâ,°‰å0‹å¬/1¬3yH Tö­:@†å p†å`ŠåH pf  Šâ`Sp–å€ò@ ã ð–å ñ  xX1/IX08W ƒâàh4à‚åŒmŒ8 ‹å(? àƒHUH4=H´H):0Áà†åàšåà†åti`‚åŒp(p/pl/ðl'/Ül/Ê3²H4šH4‚H4jH4RH4:(&´4/üH3äH4ÌH4´H4œH4„H4lH4/T¬'/@¬.l(ll(/ô l/â l'Îl¼l(¨l–l(‚l/p Ð3XH4@H4(H4H4/ø H3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ð H3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/è ++H3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/ø H3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H4/ðH3ØH4ÀH4¨H4H4xH4`H4HH40H4H4H4/èH3ÐH4¸H4 H4ˆH4pH4XH4@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ˆ>@ ãðšå1@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆpX@(/øýàÈ°˜€hP8 /ðüØÀ¨x`H0/èûи ˆpX@(/øúàÈ°˜€hP8 /ðùØÀ¨x`H0/èøи ˆpX@(/ø÷àÈ°˜€hP8 /ðöØÀ¨x`H0/èõи ˆpX@(/øôàÈ°˜€hP8 /ðóØÀ¨x`H0/èòи ˆ _2ÿ/áw,b,Q,<,+,,,.ðñ,/ßñ,Ê,¹,¤Œt\D,/üð.äðìÓ,¾¦Žv^F.¼,,/÷ï,.âï,Ð,»£‹_3ÿ/áLp,_ìîÿê@Cb¹Dn JâÙîtðÒîÿê ”âB¤  ÚÌÄÖDö9ö9Š:@ áú9¡„åp„å „åŠ ^òòÿÿêrBB 3 \ùTã+ ŠåpŠ8ñ&Sã" ++à“åžå šåQá ++ 0“åöÿÿê^ã@šŒPáF ++.v.¦@èÂEÀÙ ++àšå àžålL ++;1€å ÊB1€åžÄ DD 0DêÿÿêNFA³*„K0žåŒS§: 2Cùà†â à†å0†å&à ãà†[(àŠå,EH ãR$ÂD¬’Ù$@$ J☘"|ŽE”ˆ€à†åà†â "@¬¬ O@Šå°j‰°†Fò@šåàå.á á Îãà” ?ÎãX áX8  á0ø `šåRãÀø“àŠåà ãâ àŠå`Šåà ãàDàŠåT/àÚF ° ¨ œ*¶=/à¨d&à¬.ÊÿBé.}ÿ²R(FðÆ ZMl¸ÿ/‘¸›/A¸C/™¸ÿX/¸.ú „*.Z .Š .º ++.ê .J.z.ª.Ú ++.:.j/šœÿ /u ++ä›/% äC/} äÿX/é ä.ÜÌDÊL"Â6R³ØTx/É T›/yTC/ÑTCTTÄ@ *)X>\7  ¸`‘/)`›/Ù`C/1`ÿD/‰`,‘/U,›/,C/],ÿD/µ,·/,›/1,C/‰,C , ,ä/á,·/­,›/],C/µ,ÿD/ ,·/Ù,›/‰,C/á,Cd,Ú/9 ,·/!,›/µ!,C/ ",ÿD/e#,·/1$,›/á$,C/9%,C,,ä/‘&,·/]',›/ (,C/e(,ÿD/½),·/‰*,›/9+,C/‘+,C„ ì/é,,·/µ-,›/e.,C/½.,ÿD/0,·/á0,›/‘1,C/é1ŒÿD/A3,·/ 4,›/½4,C/5,ÿD/m6,·/97,›/é7,C/A8,C „ ì/™9,·/e:,›/;,C/m;,ÿD/Å<,·/‘=,›/A>,C/™>,C4ì/ñ?,·/½@,›/mA,C/ÅA,ÿD/C,·/éC,›/™D,C/ñDÜÿD/IF,·/G,›/ÅG,C/Hh,ÿD/uI,·/AJ,›/ñJ,C/IKXÿD/¡L,€ žåæìÿê<LáìÿêLð Èbú&"àèäæÆÐÊÚÊZÞÄÔÊÆè‚ÒðÒÜèÊÎÊäZfd>ê²êÜæÒÎÜÊÈô € ++ìÞÒÈTlÒÜèn)5p9$¦h ++æÐÞäè^n…blj-"`x#qrØÞÜÎl5t]0v &ba‰lhx$2&de'áœîÆÐÂä¾èf ++ ²ž æÒôʾÅC æŒ£¢àèäÈÒÌÌñ| ++ÌØÞÂèæÒÜÎØÊZò~ ÈÞêÄØÊ ++ô Lx(((ˆÀˆpˆB p Nð9àå0—å^€N#r`z` \ûE’BLHDÌÒÜÈ ++0BP°æÒÚàØÊZÈÒæàØÂò ÆÎÞæ`ÆrêÌÒbäâZÊèP ++ÌÚè!ðÌÈP ++ ‚'ñ ++ ÌØÈìÂäÒÂÜè  ++ ++ ÈÒäÊÆèÒìÊ0 L?*N ¡YF K)@@ü üÂ(F"ÆÞÜÈÒèÒÞÜÂØ^ÆÞØÞÜÉÚÉT({5?~ •ÂØèÊäÜÂÕ“ÆÞÜæÊâêÊ"««*«ôDº L Í, L L( ÌÞäÚÂè H üÂüt¶üvæüº   HÈÞÌÚèXB$PJÂäÚfdØÊH ++ð ++ .ÂràèÐjp`jlêfhÐjbnÔæäâìZcLd\îäÒèÊæ” 0’ç ++Iæ µ,ë¯ N <ü©“üæZüÂ( ï`XPH/5äÜfð R ÄÂæʈT<äèÈ^ÌèÈZ0ZpÝs¨&1,b C ++h D60û‰( àÂäÊì0$@)f*àÚ"S,Ú"b.ÜÂÚ3*q0ÌØÈæ22x"ÂÎ:a4êÒÈB‚6 ÆÞêÜè%Jp8 ++æèòà]0"R!$ Z’:ÂØÒÎÜÚÅ3"bÈ&Èxý c1K($ó&*ï&,ê&.ä&0Þ&2×&4Ò&6Ê/8Ã":¸ ñî ++æîÂà~ jAârÞð< V@Ì1ZàÞd`üA ++90p€ÂÈÈäÊæ„3> ++N@pðX"HÚÂÖÊZäÊÆÞäÈZ@ðXZ ÊÜÈÒÂÜ0\ÄÒÎ ++è;P ++(õ(@Bb8²BŠáH>)DB'h/FÊßEH ¿?PJ¥/L> (N%PiÿRˆTVXXZ0\J !"J¦^(`(ŒYgdh(ŽC¦(()h9’)”!Xp(–!˜!gjl(š!ð b(d(„ ÌÒðÜêÚ(z¶ìÿ$!3êìÿf(†ÄÞÞØÊÂÜÀó¼í`8AjB ++þ0([Y` (êÜypÎÜÒôÊÈ@}ÿ@üæ ¶ ++HÞÞàæÈ Ã%O* îÄ/[‚âÍ/gÚâÍ/u2âÍ/ŠâÍ/ââÍ/›:âÍ/§’âÍ/³êâÍ/ÁBâÍ/ÍšâÍ/ÙòâÍ/çJâÍ/ó¢âÍ/ÿúâÍ? RãÎ/ªãÎ/'ãÎ$3Zã HÙ ++8!8NðI ¦Phjlnprtvxzf|~€‚>„†ˆŠ^`ŒŽ’”–˜šbdœž ¢ L^TdTB¤o(¦ðX¨Bª @ ºWTãa’]Y!oF ++à­ ¨®*ià­*8®LV  ž@±H"@D¯/p®ùHõ à‘å^ã ++0Žâ 0å ‘îa…>0Žç\}¤¯OŠåÐP¯0šåŒ§v. ÿfwŠ® ¯Zª¡ FxÌèÈ@Ñ´8zª8² ++-ÑX ++ªBLH¢Cª“(zS(´^4räXú¬ô˜B°  0/Ÿm!$ á3–3σ ++’å Šå;u«b0 á '±@’åâàã^3€ ñ S g_ 0Šå—Péà!_ 0šåg ï±g*g g Ó/ÓK& Û.-Éõn0á á}#˜  'y²j'c'R"¢® ++zyD( Fx %ðê°8²Xz°€ ++BR°(ÁXBL8 r°`3J ++°3`´X ª$Ò²*HìÊäÒÌòZm}` B¸k/ø " Q€TãxP   áãppâ^ãúfÃà’å?0âSãD ++g[3 ++X´/ i+‘µ B% Tãbp%|W^㈠ˆ‘àâ^ã ´/šå&% Î%(À.QÀñ¼ÿÿê?àâ&^ãÏÿÿ  $/± ¹ÿÿ ++¶ÿÿêDõDÛµà L ++ÿÿÿþ­&¬° DÜÞÜZÌêÜÆ"@9”@îÒèÐ@üæ@cä¶8 $ÒÜìÂØÒÈ!@ü!PsÀº¸P‘b*)` ¸ Ö¼PB0  Ò?Òü·/Ø ÐQ4 ++pâSã ++<€0‘åSá+Tá âRã0“@% ++àIúÿÿB'DDDD9<¢0å åà…Œ á  ã€Î(€ë€Eíÿÿê= ì’ ++ÊVx *ŸÀÚÒæÚÂèÆÐ@ÌÞä…ðHº"HæÞêäÆÊZìÒÞØÂÌô@ 4üæ@Òæ@ÜÞè@ÂÜE*0C’(HànSÒÜÈÊðŒ/È ŠŠ’0å åà+pŠ¸Ÿ Šå0Šå"" Tr Z€| ?$#ÒÜu%€ÞÜ@ÞÌ@üº*ºåò&HèäÂÜæZÈÊÌÒÜÊÉ @`/È sß·+«u_à—åà¯uñ¡È‚BŽ 0ëP  ++%pŠke"u @f ++Ñ·?)}æ1 ++ š@à áï*õ!žÍZ ñº ++LÍO¶¤)*%X @O+š—+½cm‘1 ++á€X⊠++0 á à“ГÐÐ< w'Ð6æÿÿÐ Óm@lh8hdØ„7,± šåšå žÕ»$?pžåÝ» +eÝ» ©e‚ ++±†   8ï,_ ”å€H*1iy¾ “o”Œ0Œ Ö ó: ++i.­“eÿÿê0žå ão ŒyŒa  á‚s-= à‚$k$­¾$è"0”? àä ++ ñ¼œ}0šå”lKÏ/#†h_†åV¼ ++= –«05w.& ³0ø <!<ï. Øóà„â à„å0„åà„âà„å „ã.ô |.ìÿ-|±ŒÄ÷.®(Ž(O€ÿÿê Ü*Ü.‹þ‚ .„þ,ñVš¾¾¼ÂÜò¼ L À HæòÜèÂðU,!½ó@ÂÒÈÊÜèÒÌÒÊä~ò8¾ÄÊÂÆмK#À"4˜Â,CÊ^tÊääÞä@ôˆB†  ¸ $ÊðàÂÜ$RÈÊÌÜæÏ@0 á~¨obžå p1Šš  *mñ p1 [@Šå} [:p†åàËQ†å 0†„T1!Q" ++=špÈ1}Dƒ/ÈAp ái3‘å&$tñ‘å“å —å0ŠÜa ŠâpÉ¢|Ea00šåÜqQ—å “8 Þyh\ [@¡\Ãùpat œá@l­¼;µPn0ÿ/ážÿÿêì/Yì ðkÿÿêZ ++ ØÒæèW#V| ö¨B<ÐB„  H Ž&ÀY~Öòg ++Šå —å —å  áÀ¦?p—‡ ++u– À·œ7V§3Sã)§g ­àžå5 Žâ@‚Ę‘oà áíÿè€ôoÀø"à™Z .%°"à¡×f /0Ž¸Ä*¸Ä5 0Œ(’)Ì Ð&0‹X’Œ/ôÿ¤â¶"pŠZ_ŠåÀè BÄZ0šåô‚lø{ÿÿêÂB‚  ` Ø£ † L° á0¡DˆØp›å °›åR7†  °†å †å–5†´Æb Šå0ó G ++LŸž@ šåœSpšå~6z6qà ã àŠ ÈH (Æ g!à´GJ ”å‚uðRá ++-”åã&k P,ºè@áàãªu@ª Ÿ ++6yAàã$èÉ$"à¸"@G Qáÿÿ ++ßX TÙ.!? X" \[Êÿÿ ++Ãï PüíÌt ò%pšÔË’ð:Bn ­Ð` Ì & $oA Šå(ÑFšå à’"Ë ++û@¼ ++ ++ ,·’< y,#,þ [Ð Ç,¢ PÉPÒÒ:œj| L*àÊTá} ++¬%/u¬7Á¬/ ¬'/!¬é¬ /m¬AÓ)>0à“å‡10“Ó4/àŠ`ÙlÛŸo!0ï˜ïQ”å0÷”êA㜯`Tãºc/@xk4 Q0Q=@‹2,àŠ0 ãT(TCpšåHÓ#ÿÿê •(D(tD1$0š?à:  ã10žå-p‚P„áÀG á”ÀàÁPj /¹=gÍ!ŠÎqŠå0Šð º} ¡=ZD á8" H%= ¤I~ y…"è­=œP0šåÎm=%š”$ˆ Il1?\©×X/11?XšÿâSã—ÿÿ ’å•ÿÿêÛ¢M?tß [ ½l0$,(Pàÿÿ ++NÝü$/¨7/iü/-¨'ɬ/“ ¬A}þ!àžw ü,ü€F0 ã¸m+"G AÄ@¨?šå ˆn<ÙˆS @šå ˆ" @ÿ ++ˆ«þÿê0÷ ++àD°T0C ++Ä$ C0 ã\B ++мæd1à”PS/ áH*! Hœääë P @žå—ä0@ áì© ªÛQŸ0 ’å ŸxŸRŸGìC$ß qDd60}C48 <€"0I ++j9 ++Q ++10š¥ zIE` †å 0¿Éƒ¿Éõ« ++ç ¼ÄOõ¼1 ” P*E PA0šå‘G3^㎌°ÜÜ]E YEêT!4/) 4;/y 4»4¸4 Xˆ>0€å(è?žå@”. L›–áP(/m ¤8P /¹ ¤"  ¢@0’å [" ®­L @[€â à€IGñ ++€åà€âà€å0€åà€âà€å €n1#à€L® šå(pšåqüæ8$o8 ¥8&® ñL8"ÿ܈ Š p| È. ¸ä ü»üÜ°´Oàžå4Ð$" Ø_àå "kìáð á ã|@.!¬L1è'ân•Il K K¢€½@ ?šqŒÒŒ<@ŠåÞ O\(Až` $%à€¸(_šå(¸ j,uà  Ý   [(ÁL" @ÝL ++¨ ¨ ¨ / @X _&?šååªÀ jä™xlÀ HáHã"dì’Ä {&¬%_Q¬/$¬_¬%q(0šå0“ŽY$" p˜màšåpžè%/9è7/…èèT/!è]è /mèG|\`¬\tÕh?šå £ ì (" Ä„( šå ’å   L0 ãS­D Ì Ü-*í̼Ò$Ø0!ž(C žåù'Ì ++[ ‰´×à0à ã ôôW( ÕL@Ì©(@\p Šå P‡À ++@Pã ++`PÈ@ ++€PeF" ++ ¯Á ++ÀPã ++àP¿, Pãe iR!àÎŒ Ô7Ð äAR@0 ++|^ã-Úƒ0 ã( |ÀdIƒ m…šYR@ è?@Š…R"¬ ÐÄo` ++]Ä/H.¥Ì¥Ä¢( Û2°?"îO@t!0ž“Þ%°1à.U°h0 Ä /'h d 4 n$ ½Üì8 õ  à2D ä.9äÈÝ#h H H&@P¶üÏ4˜n¸Ñ°´ ôPo° !H ì¸P/q Ü10“´ ++@üSãa ÀSâ^j0ŽáJ¼`žàHj"000Wsâ-0Û.0ààô,@,(ð\ð   [} ÕC ã¤/àL \´ÉLLd½„”/”Q¦ÿÿê†+4” oð]”ŒLo¬©Ð/HñH'Ð"Ð È OÒþÿê$& ¶+D° ã4"°t<oü ‘<n°šå@DþD €¬ô xt€/ ŠLø LVp á Ä0 @» ++k%P&WãÞL ñÀ’å1àœå(šå‘åQã0ã¸ä@^â¶Ð0‹áC#¼›à–j°?$0ãwØ@~âu(!à‹Y(m° à—IZMœŠ+°Ù[À-Z.n-9<± 0†å `Šå1œ¬ "pÝ'"À0h l| ‰!4å'"À8D-œåÔs$°à›àj° áü1 p—K¸@  á¤ˆ¬ k¼ "x1° áô€çÍ(À¬|"@‹'/À„ O …„€"@“'/h/°l \ü ñlltmÔ/ àØ _]#Ø<N¤`p/°toüÑ#à.°x*\{'Ü"à I… (X¸  \!qÌ7Tâo¤WÐUÌAã;È1tâ9ðŽð!È/àì ASã4@è+0Ü̈"àê0è¨D/  k¤e%d"0è ÉØ*Xd n¬Á%d\­´.&X”*°T\ näu&´D`w \Dnà Õ&ô`"h ++`!/5',`@œ =œ ;¿+H /'l. .ûý,Ð,8n5(„H¤9 pž<1ð—<q<C<€ [µDp-(¨-ž0  ?@€$@.5)Hà Œ@Ùÿÿê¸[žåÑå¡°& ++°&‡;ã; ã;ÈÈ×,l ++×,/SáèO @”å̵ ´O)ÿÿêØ *a+¬.5õ´….õÿêJªr4Ÿ(¼Ę43@Æ ++ïä æèäêÆè03Pê ++êÜ#=_0¼, ¥ì ++ÂääÂòh˜ ++"ˆ #„FÈA^01Hjy_¨|^ ++;}^„‡ ØÊÜÎèÐ|^iÌÌèÈz^È ++^ƒ XxB4p@`EøXÐ(HÎÊÜæòÚZ|àäÊèèòrF`p@ @k`“ÊhB(OHòÈ ¯ÄÒèæ0 e<TPˆpíT0Ò ª@„pÔεZ_ lòpòò =?ô"ÌîÝÎç_¯JP@$8u8Jq¸ÒˆÔ(2(Xc ++°B¬†]zH:u€ÒxÔ^H$¨€BÖ .?èi8ä,/—/p0FOøŒçÆ?ær>$ÄÞêÜÈZq9Az~XCC ++ÖÜE¢HBÂææàÒ! ++ ‘P8“9ZÞ9«4:ºC ˜÷dTþØã1iý$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂÜfJ6þdPÊðàìC6ÒÞÜfîäÂà e@ØP÷+ ÜòèÞà L æÚÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`tb ”31{@æòÚ&æ–ú ++ÚÂäÖæ%¢ØÂÄÊØ^àاÚcD7‘ZÖîÈÂäÎòJ±VäÊæêØèPÜ0_ÁàÞØÞÆÂØZaø$Â`ìäÆÊÈÖìðîÄÜæò=c]8 1X ijBEÜÎ U‡ ++ØÊìÊØ VÞIbâ"(hÆöi`ÊðÒÆÂØcdNKàâ ðèä$ÊðèÊÜæÒŸi{bïco‚8ôcr ÆÐêÜÖ渧ä>í‘æê ++)7@ì ++PCôÈ8ð ÌêÜÞÖ~ÜVÁ ` dÌBø÷è àÂÈÜ$% L©ð êì8àÂÆÖÊÈ~îðÜ? Œ¸!\5»pÆÐÊÆÖZó àˆäÈÊÌZÂÿ:Oìêb'Sf‹‹ü@6æäÆZÒÜÌÞŒg‚ LþÄlö±$@9?àZÌ$/f_ÌÒÊØÈm$`>'"'/ql¹ äÆÈ· Úôò L&/ô A LÎF†~¦}OZæäÆ?Z?_jr‚r&zg&ÆÈ°åèã&! ?îÐÞI‘Ø4¤(5HZ} PÜ” #–úJ" e<"«ÎoÌèÌ_z‚ÖÁö ÒÚàÞäèZÿÌÂÆÊ"ÌôòìÖjlällÞpÌèjC5ëEøµgÜÊîZ·IöVv ü8ÿ"ê`älìÞÜÚÌìÖfàÊb0#ø#'úf0Êð–9ÐèüGPžQò LòUsþŒTÜÏ4É9 Š?*:0:/ ++/T"nªl sDD2 ¨o½l°æCCC0ZlAAA¾B ++\t L: d ++ L ` L LNPö Ô°†T_ÆÞÈÊ ++ ++6&M ÌÒ|qÊæÆäÒàèÞ÷?äà(óBæèÂèÒÆZÆØÞæêäxîÖZàÂÒäZ™nRØq4ÂÜÜÞè— ++w _ZæÊèB/ò?ÌäÊ1,ÎL'ÈZÙUÒœä),H†O^R› ?ØÒì›$p† OÆÞÜì×°0f£Ð A, •Ñ pZ" '"ý›~p?ÒèæòP„«u†=4û/ZÆ<0›æèäÒààÊÈ\TàäÞÌÒƒ/Êä‹ , ++‹ ó\ó5ÜîÖ ?Zì„6ù% ++0/dȃž  7ú %"\m&Vû;äÂîófÈ/ÄÌ—PäÄØÞr ?äÊƦ¸& "ƈ´X´0ìÊÆ…¿*$C"?äèÈØéu o ++Ó ++ Ÿ_ HÌàè:boZÞÌÌæÊð`(™ s /æÌà ++sWtr_ÊÚàèò  £LOÌèÈŸÆàæòÚÄÞØ&˜N~¿,¦+×æ¢"0œÉ 2ŸÛ ?dÈ~¼\ zÁ$T{ Ê&`¥¯¥ ÍPF¢pfr.w~k¿îÖZÄÞääÞîÊÈk 0 j ?£÷­3ÂÜd*nPì 0 *:*bSF?1F8D²7Ø ++^É" ç ÿ ?äàÒH ++5Jª *ù :4ÄÞcJÁ:V/äàO/Lœ D %Ó/äàí ++(¶Ú™*‚‰ H—:¼/äà# 0þ |Íÿhˆ3!f/àèÞ   qZÆÞØêÚÜ>;(Ü' :¢/êÜ7¹?ØÒÜü[ ++$r¬Ã'„ ‡ Ýý?Òèæ¬ Ê ?ÂæÊ X?ÚÂæè I )‚e iì¯ ++Fj§Ör D êܪBð’2X 02 YÒÜÒèZ: 2 $ ¦‡%Æä" "8"Ù_"2$>4äÊÌ$2&@ÎêÂä´€&( ++0(2*ÞX*,Y ?",".ñJæàÒÜñ. 60ñ02 'ÈÊ 2"4hLñ4¯ÿt6èÞàøý"ÌðÈÌôèÐdâfÐppìÈû80áGÖÊòˆ™ÚêèÂÄØÊ~à 6I°TæòæèÊÚTÊ!# ++€ ++!Û#0 ++ !1V¼·#O8 L!û: ^êÜÊðàÊÆèÊÈ@ÖdeÞêèæÒÈc@§R$@€\ †/ 2J ’ÌPBH 3° Ì @¶Ì)S856È519@”´) Š_@): K‚_6&à†_°DÑŽ°D Å®`’bœ1/š°D€<Ðy/Ð/0S 0."t$R÷W,/,|DÁD .. !àšH.Hd°mlGD8ãà-?9ÿÿ-53ÿÿ-</l0”4"à=ÔRüm¬ ÔRG8/¤h8D0øFl[Q 0TC‚SãH>pK<&í8KÑD Ôìnd=°3@IÈ)ô(È  ÈÌO.á3È&„P´B6„P„P@\H Ä$P[d¥ ØÈ/@G^l¸X´Lh4<´9´žä¬k/Å ¬/(S:Å\A@†å¦f(1¸Q%2,(|SL< ++|SF|SÌ /@àÐ`@Ô[lyi×dS?=ÿÿdS6gbdSà G/@àä;‰ ×\_UþÿêX7 ZÑ Œ ++.×üHÐüÿê¾’11Xw e(<8v DLhG8¾97(ʶ@ÆPT¸ ++î1PÛZàÊÈR@R{)," × Z{. :Aü¤r'Ö{3 Ê~0U ++ &7 sy)1#@*1B@Bº6Uiˆ ++ BŽ ê@E" A'ö2UÒ X4^áDPF .Èt@ìÂØêÊ@„:Âæ@y~ ¬Ÿ8> üÂStž! ++x0RW ¨ø²â3˜Ô' ++Í~R3ºHÍ~×5p(NHbÒz˜4 J'3$ .µ ++¸ ++«" ýAæàÊÆŒ3_R PB+üæ5¸`BT èvP9mh"\®sàŠåà—XG ++1 —[sjcydN Ä;Ñ@ØT-ܬ  ¬ œm·gO áØTí/p§.Ù§“XŒ·`$¢L-PH4ê (d@BHÍ6N¼P¼0?R’"PzfÊT ++ H|'ˆ®C0HZz)I&8 N6¤x€X ž8¤2Ü8%bbÝ8!€Þ8 @?Ó:‚ ++„*Ò:%‹(r2!V zÁX9! ++@ñ8 9hu: " ƒ4€BZ(. ;êÜ0þ: 'Zy;0 \a^ ØÒèèØÊ 2\ 6.®\1^x\0™ ¹™Ü|ÊÙ 58 ØC!Êroj ° K280€XâLS&,ÿ‚›l ,aæv0šåëÁî`ZBhX‚BÈ`®z¸&ÉQ#&Äm«­š°o!àåi"àØ{My…yY.{yPÕP…”.‰‚úr|2‘å. a ++ ‘åøþï?Qã) ³v!@=C³vEc|¤Ég¥ Ky0 á…c¿wÅ 0I ašð ™ÚEÅ@ IP¬1yÿÿ(/=cx‹vý [x õ”/¥à…U EI6&ÂHA×1r¾Ü’A8òŠðbðT58È ¥8=Ÿb ++æÊÊÜ:=2dý8 XOb&qf "T#\=*X ð& ++p5‰Ò0 (ÈêàØÒÆÂèÊ÷„ 2ÊT # ++h(í ++&[w Êh ++ i›BÚjZ ++`l  l lào"p)_ t¸íu`šåð„ß}ï„ ’pÁ| ++ ÁpaJÑx`^ãϺ(p10ƒRYN@“àµj mKrv“ju ÉW! ’í_%g%g—Æÿÿê¼ 9mW›•™a‚ôå_•]QY bRᆒwX@  á€ Ò©uQ™!@õK"pا}#àeJpŒq[Üù`#àiJpq ZÝGÝY1‚¥l*–l’à(j‰bp ++¬‘O ¶x †â‘Ov«#O¨[|¨Pt ´òùP„1aá,åd°l\„ K0šåÁ¸$9[µ[PŠH­N?¢ïO)š>yPÌ! *Ý!Hè6~y’ؼöy ++ ™hØvùþÿê4Úæ:l`\û c^PZ ªF20 š=6 ++PBE, t0n8 L÷#ÄÒ¿1@8î ¿!^Yƒ7HXH. 6DAÄÒè@$DR¢lDô8_ÒnXÎÆÈ´ ©E†XøpNGÒ\ErNG ++;NG„&îv Qv =TLG/ppE 5P XoBæ@ÈÞö…ñ ++ÈÈ@êà@èÞ@pX@blX@fdX@Þä@lh’± H æ"r6 Ü…;]WP0 ã£ ÖN/ Vx 8…„ ++B'_ä&cŠBnVˆRrå…‘X‹%8B—!Á†*@ Â7±x21@Ä b\ù° ++tÚÂð?‘ChBÜr(r* ++m-m @mv ++tHhC ¼J†Pæx  h|H ++;zH…)v{H$x ]JUXB`ƒ #0 ›.@9 ++ÔKØzœzX`Rtà%¸' ++8pH H H°VˆB„’Mä(V`Þ|\˜f˜ <™•|™7XM€7xM¯h•!˜,RŸRn¦oXB~¶~àJ¶x¶:0¶9( .smSÊ ++8qL?¨) ++Ÿh€0 hJ*+O*d häÊÆêäæÒìÊrÿÌÞäîÂäÈ@äÊÌÊäÊÜÆ@2' ++8^ ­ÚD^v P­CòZ‚8q1ˆ B Ò«@ÞìÊäÂØØvOhÒF`BÑ´ “Z ++(fB‚ ++@Ò ++À„b„ ++% 287Q¢†áP„8Z Z–AÚ†ò(»`Ñt ʆ8 ,98(0@ÿ´Í0(0â?®"ðˆ ²" ðˆ0<ðˆðˆ0ðˆ ‰ìæ Øa Äß4zDí ++âêÞèÊŒJ/’Kg6’ŽI/ê1 ^”ˆ>Š>xÌ1–.‚/@ÆÞÚàt3QèÒÚÊZ ++dŒ€(3ž703& ++h5;ᘄ¢HÚÂàîG‘š ++ÄÊÎÒÜ?03Ë–rŽBºRpÊ`9´Ü˜ä4šçôÎbnj<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZdpl`12 ++VœÇ’‘4”@1–˜”˜šœ1:ž,§vŽ ++¶& ++@\#€Â‘2¦‘@1È‘"Α]h¾ %¨ç*N"Eë@4 ++á‰*1“š}±¤m¤mPÒ‘ÑsTXX¨.°¨.¸m h{Ð ‹ tøeš ˜ø.@èl(á_=žåáh ­h»…99“¼/à†ùW a0šå5“‰Œk/ç °]k† ë"7”ÚL0/ áÞ/†² ¤)dq -Î#ƒŒƒd/c`Oè è$A$˜ ,1Œ& , θ( ”/ý” &í¤-&àÀx'0´x¨x´x tÖ’À–å,á™å ^ãRq¸/¸/5R”=w¨¤ À“Ê ||0|$q$ ä,a¸= 0€¸Qø¬ˆ Xƒ0€ ç.µ8Ò• #0t6D{â“V ò ++â“ ¼¨ ˜ˆzPfQ#  .üþìØȸª.–þ´ˆs@\þÿê¼"åþìcm .9 ¼.»ýX.´ýh s‚Š¾ú"ï ½]þ8ÊxB    V$"7š’œC0 á í‹&p­ €"@o ++áÕLp á¡3[4qÑUD@8E‰ D•'¡3¡3 å„.!°mxñ M8ˆ -b(Òí0 c c˜-/08’58’¸€ yÕf”’1 ++ .Y "’^ÿÿê"òæ,TP0é+¸) ++"X½C‚ !bt 2 8ú(p€PR¢ª¤/X }Wádú§ ++--’C-&Ê2-=-†h> Y¤Ràâ=# ++e$&*åË—9’%$Ú%$.Á%$%$4?„å%$  â&+5ª^ šåÖÿ&Ïvið( * -25@’š 9¥ œ†Z¨8D#ÚR‚¢@HÔb[¤ 0‘¢ûI¤Ä.y B¢[¬d8,n Š½@_¦ŽPê ++~¿Tñ$.2 ,ÃÀÌÞäÊÒÎÜZÆÂØØAýŠý¨ýªýlý býT¦ÈãS¬ÆÞ¶G¨ªA½`ÖýEœ¬ L8¿bZÊÜèäòÌ%+ LSPpk®ØÊèXqýàäÞÆÊÈêäÊ~ŠG€š@+N"ÜÎ*D˜SÊØæʘ É Š®³°ÊPŽ&Þ?Ò*%WA 2dJè¦2L[^ ª©Â : X8Pj¦ 4xÊdQ´ü2¶üC°ñ¶²BâH´f¶X=„ spȺ˼ÌËnË d%p% ‘f¸ó‘N¸Ð ++°èCì˜3àèäí~º¼°ÃSV%Š¾ ++ x*õ |~]hÐ (Æþ+3f ôå.-9¦[Ò ++‡T(Õg 1§_!7[¤_ "0ž: ++[-¤p™x-0š/8O#ñ£ž –(.09¥=È­ ++I $Èì¡Ó *ý( © ++({:š¾Ç20ãÝ2ã& A ÀyÂD rT hAÄAêó Ò ÆÒ?ª2Èá_~¿~ÀÂÄ¿aXV@I()Ê)Ì)/p`) j)?ÎÉ ÆB… ŸÊÌÎ ++h0Ð ++ 4ÒM°/x š (tt tX ~¶~¶ /³#A3 s`ZVˆìò¯ c í&DS ü¯JÔ&TÜêØØ~:/X 8$8i!à’–¶ ++(Ô(*h"9Öz<X R"Doà á0”Cb’åQƒ²P!‘Q" ++ttž\tt“1–@0’åˆ/S›2bšÖš/0+Z ¶pÅØçŸAç/8 ç çh·O)@žå× ++Ø×H:Ú(ô|T0ª/p "gÁ ^Á MÁ Ú ŒmÄ9¤/šåoaï2¼ Å €?¼+´:.]|Ž¢i ›i 3’ƒT—ÊâìZÐÂæÐè… OÚO”*€Ü ° ; IÛ kZ\%@“ðSn½ ÆŠ" ’ˆý5[ *™ã q6TšTTíT2‚2"1  ã ƒ­ v"1{ •6 Œòyv:B0á áö€/0†ÍTO0šå•ÿ ì°1 ++šø¼eP>?W´ÚF ++ÑW Xq*ÜIU`à /&9Ž­@° á'!à¹M£“¹3QáG’¼O_# ´%Ïp€å °€å €å J«e´A —Ô6ª0'0’IJ=:°R7+0¹ýDo/ñD‡/D‰DƒDl ++9“å5£§!à4'44!²í  ++D ì L«S0†å pL«‡†å †å(@«.?A ÔB°ž¼&0³5™ p+¼«p0pò ñ+t~?  õ, ð‰ÎÄ4 /Á4 }44O ++$ /±$F$6$0 L ++àpbà†å0c&û‹D4ç  \ˆX÷4+bTмl” ^ÈD‚°/“嘱˜94,&4Ï0€å @€å°€å8/)8D Ó¨/Á§8ƒ• 0·3õ ›õ -åÐé3 D(+Y àêP^ãÎ#@d ++p @pI àï@&A D# +ýY °0·4˜4ÀwÀR †å °U2Àð í ++è+± © ++ÿô ™ ;”(ôÁ‰ ´%œ ´1Rá “À    Ø#pl²ܹ (Ø  /É ++  ˆ” d°ïP‚´ /u ´ hhPaÿÿê¦Ð7pÞpBâÜN`±e³C© ¤–íÅUÅB±b°“å—œL™!à€ôŽ- „ à%j dŽ!—$? °Š40+¹]°]™/°òy%0ŠÛ% Eâ e´H°šåÅP?É ”NH«– ¤ä1rM’¾ LØBà$ ++ˆ]=U7f:â ++(O&PH»¾%ä¹4 r7¡ªàXæ1hè x1H?à’181%²’ò¼@’å Q0 .•Þ/ 0a,  "ò½Ž½ ½O šåÈúÁ½½½HC_Rè² ê²# 2²öFhT0z(f˜Bò  ++ àô ÎÁ1à—O[_—åSÆ€ àƒâàÎ㘄P•à*n± :á áàŽ”DGÎáCâ  ãà†â ŽçvLx ‹î ¯*ñœ ++à—å —å- ’åƒ^G“€B á“´|gŽòÌf `žàdjæ½H—å“ b Ú5—| ¨ ÷“v ++ƒâ0ƒ5U(¥SšÓd;"0o5r0„ààƒ’CSãˆ Ò xób¾ähÿ•#ÁËÏo‡Ó•'PàÃ+ÃTlÃ/a,QÃJà‘zð ++À²&ú¤Q3îbGŠŒA€ìÅÃcî L ++(}RLð ++Àäpïw Úò ++(>ÞàBö  ++ 8ô.QxˆeˆIˆEˆ/ˆ-ˆ$/½\9(ƒâdÌ(¼˜ ` ¹+ìÞO ++¬/m¬¾¬$/Á¬ £¬/ Pû2†ÿÿêRŸ'h,x â?7ö ++(ëYkPì ++Hå(¯"š¯Ô@.QøHT£E¡ü   ¬CTã-øÖÒQ—å5ž°&9L%0+™$“Ç42RúRA0“å÷úR@„%1 à—þS. ï:¥ø&3ɸ/ÓÑ ++‚úˆ$B|`†*üNÑ!@¾PÉ@¼ `cRîDq  Hçn$ ++0ÅPb8J€.XÞ± êÜÐÂÜÈØ 0È0\¶FÀ .K*è ŠOó/RŸ  0/! /ðŠ0`0Ž00’0–0š0d¤"Wþ $ìCsC\Ó$8“Hx °^ o'9ûž ++2%åç²ç²p˜Sv ++(@lŠP6ÁÌ ++Øà‚åà›åà‚å à›åÕÌý à›åà‚å‚å‚åà›åà‚åp‚_¯ˆ´ÈtÈÎ < ØÉ°$G»I4pŠå°ÂO ­¨"°0GÃISº0( p ø4¢ú ¸xB Hæ"ææ¦1à—11à—B1à—q^L ÂnÓ/pæ Ž+ŽOpšåÞHeÂ0µ´u¬JCRv€º0f(X ' ++(†Fwr ++@" XK2IH" q-s^Fpèd88([07& ª–W: ++XD %D¢(íH(ØÁ–™‘—åNá á0—ò_†gO ’çYßo0„å Ïö‰7 ++ÒžD(@n>7N%8a[ ++Pî8ÿ%†>QˆB`Ë ; ++cc/Q à—å-ƒñTAá á“.ÀàÂPáPSÆ  ++}ËmÚ — -Η /é— ,G i› ++ü› ++›C ++C ++>=8úá 3îØ H2<Ö )0Ð 4ÝOM ++IBÅ waÜ:< ++PP`8/œ8‚ ++€8 ++X ++ž p$v²Ü ++ $`@B ãÐÜYã nÌ:cÌ:]Ÿ83âr ++šO7<éu&pðʧݎ-¶ š0"pŒÊ`0„âà kq¾ k= ”`ÅM¯N `\ \ÏikÈik z.ðw ©’O@šå±·|Ï5@”Ž ŽÙ£á$ß  ++ô¬/U¬dYJV P ÀÓx"MóSj óXžQh]Ä Â 8Ò,MfR ++ ñÛ`,*HêܧŒ~Ýž #˜ # ++JI",Óx:GÖ* —A¹.{";’åè#G·#h ÖP%/ íAT%¦'¿/ ,g/Ù,/m,1,+;R’å5 (­b/^0†å|OŠDB ÚÔ@ÔÞÊ.5Ð/“ m0‚å ‚0²­üaÛ(ÊÊí $ d$U$O, ½]eGe35W e  `4e_ ++Ýå å å04"”” ˜`˜ ˜p„åà„☤#ïé-Ò× çšÄÑTÑA“#/’å/‰ô¿( ‹# /ù‡#SÔ /¬¬¥+?t.t-(#{#Ë !Qa Ø([ .±$Ápº,2~‚÷ aY:X Þ4]!àÐP1 e1 ’ÂT³83Lຶf †åÁ9Ú¹ Ú :éÂG ++*í (K^Ä’Pšæþ £=þ! Kš«ækúå êå# òåFKÚ"èY© ›D Ï$OÛ;RX%º¼‚¼¼p’NÃàÄSXÐFDá áÐ/‚àÐ%åu ]H ¨0y s+Z2 1Z2p¹ e¶‚—^z_®ÿÿ:íÔD ++J¶˜Z ¸6Ô…0$HÈêÚà5E‰Z/ NèÖt2ÞÌ@=‹H! ³à1ÌPÔpsX:¡Fx`B À¨|2 0—øàžå žåœ7º®:¨XB" ØŸ* AJÐ9üæ¬Z5 Û0Ì , <1à€ß±à€å @€å 0€L3A@Û@!àžP#?0Ž ÞÚø+Q¨Ošå¶¯*%6’ƺ2eÈH¡ñ .æØænÈnjØòÌÚ`ÔÊÔÊäÄâfÜZd¶`…x!¥.`c§SR§¤æäÆ R§Ü $Ý &a‡RîÐÞ ++aÌÛ  ‘`ØP Xê" ++P¤Iºy^J0ë ++Š8* Buiäæ@ÐÂìÊ@êÜÖÜÞîܸ¶C_ª:©O ++Há¢sD"  Ïk UU{RE]]]ß! ‚EŠER9¨ØÕ!H:qWæZÄÞðH  0 =rWrW¦ ++=Ââ“â>êY’¨èê$H²qçO@ HÅq"S)HwrX/Hr' ]Åhq¸œ+ˆ ^*ž%T Ï~W000 00Þž   ÞonÞr%æ?Fx|*+@ !±±¼?hv[ÿÓÄ> ²[@ roùŠ(`((dHòÙ‚|ÚÊÚÄÊäæ¼j@ è òõz@O ã& u#.mÁFê³ôrB< 8 ØÞÞàˆzz6?$ /À$…$&Æ<0åí 5 /àœ{ùgR1Ë0 ( ÞÓ@M*Žb*150#&FTò–ô"ûE#0\îÐ#S¡ÿÿê8=H : ò0"0LîQé!uȸ$P‘àeÌb000Câàñè" àÃ/0§.²0" àË"0br¼ê:i"ôÈXïÎ=¬Xq)*5àKG&ÅÙM !0ž"‚,*à(%Kˆ%/õK'óèkú/ @(.=75ÐÜ™’#$50È3SãEÈ2È! “.kÉØ1¶3‰0‘à]Í$òôô/éô!0š¹ìÝÕ#@¿ýÔ=rCTüa)Æ/0L‰~DH»L#î=&ì€.-hAh\\D áJ ÿP>jTù Þæ`FX>ƒ6vèÊÎÊä ++¸E+ÐXxG)Q ê<Ü37(и) ’0$(1 ++<%*$ð0~((|(í.1>@iò@ "(@ÂèÞÚ¢sÂèÊÎÞäò? .9 2:, 2oÇ ÿàµ"1^ãÒËQÀ4#àžº‡j= Œ0€ ~ð jnptxŠ`d L`> n “ ++ˆ+ H8¡U+s-è @…STã6 „+-¢F¥á&ØöÚ ˜gó ¹{˜õÉÑÁ{˜õÓáÌ0 6º=Ž0RcXªBÐ0W"\Ø£]"Å> ø à˜^~ö,—åfSs:¿™÷Ó*j.,¡æ ++P]íi‘ GÑ %/A 7/  ¸Oß;C°8¾Np¸ ƒßÛÙ<0 E†¯à<Î,q˜j7‘1ÚØ[/8Û[50 ++#%ãk±Ô ÈØ ++îA-0šRä( WÎ1 „Tà„åk Áä(ÈzB˜  70[H_¼V ++¦"EÛ`Sžå*з_ m qm m.‚q"N3` @m ++K`›`@«Ý—1 Ã" ++)l!/IlΦ 6é ¾Ýð/ ž¡ ++zα£7¡Š€Tã÷± ¾§"ÖëHä;%Š?¦¦*%‰/^qZq”vëvëÚ¢“ê§ né ê§*±‚¡6r.(úÓØ[ýzÒ6rVà”å(à´"Œ‹ è*b£?Êt" Ît †í0†íØ Ø[<Õ¶ø °p°R°žåÀs1 ž 0%Ð1žçü# pÕ&ÚO0Šå0°A ¢ü…00°pÕRÀšå,0Bë ”).$ ++Aà‚â#À‚”),‚åœw p¥Œ°¥Œ ¥Œ(öŒpJ‡Sc;‡å$èd-ÙŒŠŸ‚Ÿ0l(\(fyj<Õ$ ÊYå$` Z–Ÿ ¢yT²: 7 @ "¤>y ++œsƒå ƒå™ø%jíSã• œ&Q‰¹P8†x ]1 à†÷Ž£%`ŠÌ"žD(…II /_f„^h&'0ªx#@€x ++ÀÎv.•‘Îv)/›e5ªzl1J5 Ê-›(pGO  ãiÏ u”GXX.éþ<Õ@xþÿê!qZvL Çiñs`` < ¸´ï ++.ý [j@Î ++Žã”}Ë ++ 0”`)À0"0=œ¨D DÍD +Ù ++ÀD D0¨y= N~ eN~ W¤(/C–}3–} œ7XvöW/0h2yh2 `æÖƶf`”(€ûJ"9ÿØ2ì+w .} 6~ª¾¦.£üw7ººí€u<`vÇÇ|¹i£hRP ±ÃfFÙq>´¬qQD½#¯q_ÌÀtt-ÿêNÂTD‚~ÒÈð$Ò' ++ªÒBÚq¨Ò Üâý9TS2¯1ÄÒèÒŠ º#?ÒÈðÏ2–"í0ÂÆÆ­C丠•u{jþ4FHBV =( E$@×™"`»=—S¹*&<&(â £D&8ÿ™"¨¤Þ ²8–Ôd ¯€µ(µ*É‚ùUÍ#P^ãib:00’å#d K KRžÓCžîC–¾ /0š,'/ üð"|½pf 4'" ¢s.Î -ž_Ž6À*èVLjCÛRX°ºz1žz9œÅNXä ô.½ôpb;Ih£š'h/1hhh v;žØãx+4ë4é4ñÀ½4ë4å4Ô¦?!à’š19à’®DŒ¹*u~üh3TrŽ $Oáþÿê8…,ø€R €¤.¤1s*† '!Ë"º/à& mPìQ†å`Š^.- è]„ ‡ ++ Œ.%Œˆ7Ä"à”­(º ++ N÷Ø& Ø<Rr Ña ìÑìœ ++Œs8…¼.­¼¼/=¼"7¼"&¼´ \ŽLŽ ŽTÃ"XK}ĵÐ\ð\#”ˆáv r ¼Í< “ 'æ0À&`ü$Xô.q ôü 8n À.¢ýü•ü ¤. ++¤Öà r0¬ ß!X* häºÙĬ@*! ¶L$}c+ôAã(žP @†å Žà¹tõ"ì $[\½0¶ (.ý€Ü‚Õœ¡œ‡dJC,@ T/ßþ.± &ÉþYÀSÀBô ìÞ ô #ô 'ô }0-Qô €êÜ W&X\ $øפð"4 ++Û4 ++Ùx­xtðL9¶E4ò` ¨p@üÿê´ú/&š¢%‚0·B–ÐZHàäÒÚÒw® `ÌðV¢ƒ¨ª„zb„z l%d% !n&‚$H&‚/H†! ++“œ%J{/L, ?æBrÒ¸ˆ-^.jÊØ‹0¬-‡Ü›™ XÞœàt(ÎÊÜÊäÂèÊZèÊáTÂäÒÊæ˜%²(‘0Z…~…T'‡6bÛd£fff p%h% r%Ú Pn`°\°\–é# ?f”¨ÂZÒÈ.9^˜4`8ˆˆbdfnXV, ++(jA"r7Ô؆€‡&lxnxô‰ !nb%N‡ nN‡pN‡ #nfxhxhxpx?jrXˆ$AZFZ‚Ÿlnp˜`?rl‰?Dzdp@t$tã?v‡š|<åèC̤Ux(»CMz»C>R¶C*ÍeS~"ÊC[¤`€B”šS&h ê&#+"#j&E  ++—Ë*à <++ªxÏ*    ¦ ÀpÀWÀG2ÀYd>$Fª¡*—¯Èp3xÆi ++/’¡{¼Þ䘾 ++QMé7X#R”¤d©³8< ‡u#3zŒøÂÂ/˜Ý "9bQT>Ðo€ O0–4èk³—eÚ=,“åT/ZÄMxx(/• x¼’4&4 x/$Ò Ò uT¬y/Lþu Ì%&Ÿÿ¼w¼Pq=Û0lPn¼9ù ++< *ÇH/@L jü9E L" Ü©‚ GDÄ‹² 8 =–L/+Î)8 t@ †åÔn8`Šå< ºñ¨´ œ´*I .ÑýìÞÏ NB K 7¸ ++å_" ‘° ++¬ .n" pf+b8 Šå<€O“@àŠåD`Šå4OÄ À *U Ž ÝäøÜGØK<.á ØKÍñÊØK¿ØK8§ØKD/½ØK;xb>`dØKVø(B+,2ØK"XØK x0üìôŽò ¸Ç·£\•(R :¹"3ÔK.]ÔK.²û”.«ûPòÔK`ì(-:Þ©K?è#4?RžKL9‚”K5?ÚíJéÜ™6T KÐ$ÞHBV8' à|4Ñð @b ÈÞêò! á0Æ 4Ç×SÄ7 㺓լá`Uî _$¨_ `5$Ž’ ”d/„HMH §o~»!!0–'C VS S‹ W|gó  êp»‡_/ž0i1!"µv0‹  ß µvyKŠ&?ÿi/a/ /a/)X"s„4â HM9Z(F*hðºµ@ ++7÷:Z L?ô/ô0=Qüt¶üv-WüºüŠðR&•ÃƒZ|æòÚÄÞØæcdÖîÈ=;ì `âî³$ m:úD:£ ?ü¿&?äµ&44þÚ?»&/rf»&/rh»&/rj»&/rl»&#rn»&æª&æµ&,èP¢,ÈÂèêÚZ|˜S)Ç°`B0$ Zî ++ð1/d`L0 !rp%L0 #rr¸ê¸ê¸÷ATð’ì(/î ++ÐS ++‰tvð ++()-@I- ++1I-òI-ÿT$I-òI-@I- I- ++«0xTžvsú˜Rð(ÇXY-@–#/ Ü)ÿÿÿÿ¬1ôƒ%6^ ×2 ++1r``%l% b×ö×ö×? 1%?ø10±úüþ7 ë*‰ë** ë*$Ä*1 ++h! }7!¶*!Ô*Ô*!À Ì*µÌ*H8Ì*`åÌ*"&ÔÔn¯ d%p% Ï$Ô/ÔG Ì*èÌ*)ohÔ¸ŠJˆõ5&I?d`rî ®=?db`% j%b% lI%8› ˆ>$c*PÉ€t‹ Pþq ++( ðFˆÊ•´;6"5$ÄÉ?dbdë nÄÉÄB;Bî"· ¡£Î@"$,H¦Õ:(.ìÔÚÓñ- ++ô08 J‚êqæÆÂØÂä@çî,&ÄÊ:ëâ,ÒB4 ˆœ6Òèæ8tD ++Äs”ÿË "î‰_3)ž¬ŠËR*…RÇ£# !Ï ]@]ØO& ô ôllx ž¦O&¿ <i< ô$loôô$ôƒhô Cn‰\€Gn÷.¡ƒ#I"pž5·—« X*$4(» /0¯ p„å à„⯠"'pÙ ++/+à3+é9 ++Ï<‘[x(*||˜w)\ù÷dúu ++68âÊO ++@a Õ,F€ ¥, L ++Œf LfaêüvÒüºKt:&dgB_-0_D0$Tÿ( ++æèÂäè*ÊÜÈ{-aÞÒÈ8nƒo(*à ++( ç,üðÏ/2 f  /bh% F4bs bs bs "bb7>%.g.™+: ’«s(0s!2§ñ ++§àRXj42R¸‹N +Ø Ïg0£bŠåf¼P"®Ÿ"ŸbàNàà)P ^ã“)ŒŽ á  ãZ*-"ª \R-@TãLcaàšå5àžÞ)d`\"‚2 þqðJ 'r)fv"£‡r){,‘ lp0‚åà‚âlx‘þ+•~·v,å÷(߶—¤D-àžåœ/àü1õÇ LXC@Nâ“B%S@^ã”ü@\/í\€\e\oI\ K\Do”Å\;\$D%ždd`ø`Þ`®`(”`S@Nâ’`€`€`/M`G/©`g/%`ÿ/M``1 ^²žŠpW Ô ˜Lc˜ °t¸XS]ºÌHZÊ| ÿ`c2@ ã©Éè9p¢2tnè)ÜÄ"-Ÿ0`T5pšD.ð:,.ny S :, ¡ÝLö'/VO å¸Ç ®sãT˜S€SãT€ìAQÊŒx Nâ€pCâŒH@ñ>%N-&N-xTRå( ((.Q ++(t@ñÊ (ÿ‰" t—ž-aD_ÿÿêŒ[_øá.Rý¼óKýÿê€Ú>ÚÞȨ “`<ÈÒìxÂR ?`¹R/db bb b6 6ò ++B¹R ++îÒÈèÐö›#aØÒèè4è_ÈÒÂÜ~«( `Ì8ž#CÖ#!ÒèÜ>® ()–xŠ8ˆ ++ ò UX<Š$>ÑÌ)× b×d× b…T%@Ì@ÌQBˆ ¼^çVdt !bl%® bÉe%DçDç½ç€d8bò8$Ø_%^F^H^dQ /bp^:BX5žFHBcB/è˜J˜L˜Ä /br˜JLB$, ++ ž!xQ+ÚNÁRí(zàœD$œD 3ÒõTõVb” d”d” d%PbPb ++R–DPTV–D –D`6 Ÿ–D0_EÒà–D,X–DOZ ++ “Œc£—D²‰õ.( DAž˜D•±„˜Dy˜Dœ>˜D¼…!à“žm´ˆ¤D ØD¬D.àž<°D€°Dy°DkÆo°DD' %' Ê)Å`° Ø´D@´D.°¸D¸D °Ù¼D*ð@Q<ÿ/áë¼D¨‚B^ M0¼D¿¼D¶¼D¥¼D¼D¼D(¯¼D¼D¼D\¼D(x¼DE œ&gÄ: 6ÐDø°DÉ°D€]°D@/±°D3°D¨°DA¢ÇÝ°D/™°D  Žà1ü©4´D =´DÉ1¾&4;þäÇ0;ÉðDkðD`ðDDQðD„éðD/ðD/ðDK™ðD(ÕðD ÒðDÄðDÔ%pžøD·øD³øD§øD$ÄøDŠª Pœñ\@p•#/zh=pœBÞÞ Eu EœB2FœBð< ™$ê,¸= L¾/000-_ÛÇÔ ³RÈ<ÈAKD5'XóÒ,.åþ(™pE@’þÿêènxEixE°DøýG¤0  ãˆE7öRp4P [ü;àC"0¬ã¨3à¨3AÕìì& 0( 0F ð“Ä(/ 1)&  :PE*B. „ ++~ „AT1´šT ++~ TÏ¿Î0¨$˜(ˆÊ9x$¤C ã¬F%À z´pF3F -0†Hÿ Šå4 Šå8pŠå<`Šå@ Šâ ¢ìû™@@è –ó ++4 šå8pšå<`šå@ ŠåDpŠåH@ŠåL`F( <\F bõ<^< Jâ3\FôŽ’\F\F/\F[\FX/]\Fÿ”/£û\Fã.ý\FJ\FC\Fþ\F)\\F/h\Fª\FI ++\FSìÂØ‚’–gsFjW\sFO^¨¹>/`¹>ÿT¹>O` ++(¹>  B¦ ¨b|8È ÷· ª»3 Ž„8ȸrBx ¨ê>..¥H"$#.¥Hz¥Hý¼±3!à±3ØVÔ,°ÐŒ‡š‡—‡" ” ÈÄŠ ¹àƒå ƒå ƒ9IkíE4ÄT« AI¹œ(4B( B'à à ° sãÄsã ¢Ëûkí (ol f=/òþÙI/µÙIÜHÕ¥4vBâ ¾s4%…,v42@ ++h4Bi4 #di4?pÈI2 ç!äx% ? |†/:íI/~íIK&€þ ‚íI?rddíI?rdfíI?rdhíI?rdjíI2rdlíI%fíI/fíI+,hâ5Xƒq€l±~… b~…~…_j~…â~…^… l(ÉÀ˜>rðt˜>d) !dn%) d{6d ( #dr˜>n$nk>v§ & ++/ðB² %pÎ>•ŽìÂØ›$žrtv ++ød$-@¿JX‚xZ ++{ÂZ ++/xñHÿÿÿÿê„r†ê*f. fê*fq- fê*zMzÿ/ ++ˆñHl°|~€‚; ñHz„†ˆñHŠ ñHŠñH?Šh!  ñHŠñHŠñHŠñHŠñHŠñHŠñHµñHuD¨'˜ñH˜H óHÖ’H fý/ fÕ2fr/ !ff%ÿ. #fhH ŒûŒH » ++€#Ž @’à9ÈIIYxÔx§Ifž fIh› h› h› h@|h ++ #hd    +;"<?¢ ++€7CIH²¤J78ÄÒèZ÷{7¦o€BNX9/^X9X9¬ ++®nhs hs hs #hhn¨®¨X9 ++ªX9@¬®X9 X9`6 X9X90XM^äm×5;9°X9_ ++²X9.:9’ØÞÆÖÊÈZÞà^9Þ^9/8 $ \â½ —'!"‚d9 " (Ì+¡†å0†å à ¨ôŽ¨¹Ô8/±Ô87ýL ~ %Qt98/t9Ôp49"à€h9 ~0 (!" ++–Ì +y| |æ–Ätbl9ú~<]Ü è~(B¯ p"p" Þ ++h9 h9Ÿà—åà„å#,~è,~x´ =Ðp9Ó ÆÊ Æ¹ Æ#p9p9(² Ætå€!?žp9&&@¤3Ä!ú÷¤‘ü â"â" ,9¾/ á>.q>¤ ++¤ª¾uª%¾j'.î r!¶1HÁ ¢û ++.0®’+jš  Ë /Þ4ç ++òÒ x6—¾[ ++Ž00 ãžQT *ÅTxð58šþ´&þh°Ð8Bà  H òCÂÄØʼúÎø ›òø $!ìòö—Ü&ö8E"YFãeR³£ +µ«1àšå‹ÙÆVPÐ?OÙNåp ÎñèJ"S Jâ&ÆpSv&;?Õðï$”åØÖö¨hKNÌ`S@ áê>öD!/@ ÕTO@šåÚ;ÓìKP %°ý›hhh=%_9åkp•pîàõ ±%/±% /±%°8@ý°ìÇÑû3&bÆö!˜öP‚ࢺæu>g'¸´öDÂûfH5 b5ÓÍ!h B“6 s8 ~ÌÒä懭B@ÚêæU7@Ñ ++$È@ë ++pîÒèÐ@ÜÂüÐ@ mOÜÊææÎÀ3(Y ·› 6äŽ ++æŽ ++—/ j´1j l¯%⎠++⎠++_èê¯7tPX(¼äæèP: / ++¸yg¢ê ++° ++2O ++’ ++"H·æËŠø<  ++©Å 0á3SãáÕ  B\RDsC0“åQø… ++Sãúÿÿ! A ýhRVØÏ÷3ìº3ø 6àèäœ} PP0ƒ¬Aá©øPDá áÒ&Ð_@ƒå÷)ëT ‡ ++ÂB8 ++0|´î´.P Ä„»“A“[?@ƒà:r[ð['¸ Y¹TO0ƒà8# (R8 ›/ ++²éŽ GÏ’/“ç’JVü&€~#Zp§/X ’¬Þà“áA á–zv6þ(Y"êÜÞ<wxOàÓçxN (Ñ.blxxþðO *Òyz¾z62[T9 ÷/` #‚üO¾ïÿ憂†;4c/` $ˆ¾ˆ¿ˆ#dh‚/x |¹ÿ ++åA! á²à“á0ƒàÒ0Óá8 áàƒ–šˆ ‰ŠO0ÓåŠ ++ Ž/€ #’ ’qƒà±àÑœ?Ò0“ ¢–0—$˜O0Óç˜@#fd’/  Œ €“ça áFaé©Ó$ˆ ¥œ  ++Ê@Ð/ Z£/˜ ¤ ¤Râàãæ *˜´  |:D8 p¤/¨ #¨¨O4O¿æP+¢PŠø$þ ++²^'Š^ #h`¨/Ð ¢,0à“çV`Ô ÓáÎ? ++Rê ,@D1 á½ ++cüz? ‰h\ÊBHh¸»/À ¼²ðàåA1 á@žçàŽààÞå ý¸2jS‡__*à‰ån\ªBLn̸/Ø #¼¤Pà‘å></ “|<Ò|äÉ/È $ʆp Žà@’åèOàÞçŠ3²Š øpø ++pø ôøS$øpø pø O´àÞáøH"ø¸àø¼øøò “á²/ÿæ€;Ú€&ü@$ Füü1³àžr’3º’(jZ /𠺈a@“çàƒDÖà ++P ƒáÄï€Rº¦á áN1 áå²ê,Ë/à TÌ" Ž3ÊŽ* È? $ÍÍaàƒà@žSa ¡Aú¡.1q$wÞ § ³3Ú³0A/lhA /lhA O “åAP41/lhA ++/lh9 /žåAH2!/lhA/lhAA “ç2/¿AQ6/lhA/lhA= ?žç>AJFô,¢ÅÈÞêÄØÊZÌØÞÂèÿ   û Œ0ýæ@‹ží à„à‹ŽíÁóÁÂÁ;ö6\ ¿ E§?Ð ) Ès¾2§j§W‹ "M8ApGd€å@“åÓ DÓ Z9Z1A áæà”ç0„à0¸·SÞ0"àãÄA-* 0âvºŒ>  ád8è>"/ d8 ¸  °€¼ œ lÕÁÓOA á¼ê¬0KiÉ>""0Ki–B  D0 ++â? ++ ñ \@&ÄòèÊìÊÆèÞäZêlhýS•X2ò ++€r'78 ++8\Iª)¨˜øRKæÒÜÎR/Ð  R šRšžíÉŠ·îV òVÊVúVÃ?h & Éææu!;ƒå5@?2? Á?'?5@”œ , ÷,,}4ï¿æ àƒßßI \ñgåÛàÙ"ÓÎæ •1 ++ºŸXå8ƒ ‰6<CÆÐÂä¦+h ˜H¿á áã á@ŽâŠt6>\îu,¨ ºÆ1ŽBúÃjHœ;@(¡/° ¦®ª/Šª6B"ŒuÄÞÞØÊÂÜ¿  ++» J  †#e¬÷V`¬;D,8 ++±/È  ++)Zº9Šº8j›‹ß l“l;:* ++ u/` êz>ê0$g¥ F  k1Z›$ƒà@0šåäH ++¥2ù¶Ë¶ !`pžå” ÷3Z;LLJ æD< 4z(ҔƔÁDµD°D¤DŸD“DŽD‚D}DqDlD`D[DODJD>D 4|D -D(DDD DD.úþD/õþDéDäDØD/Óþ$Él½l¸D¬D§D2úE;6ú4!ì0nê4q+u4qà|KhT`.hþ«ñ’z(8 ++ôQö( ++±ø( ++ú(ˆ ++Qü(Š ++Pþ(^$ a (`Q(ŒQ ++(Ž *Q(Q(Q(’Q(” Q"(–$Q&(˜(Q*(š,Q.(b0Q2(d4Q6(„8Q:(z ++Q<(f>Q@(†B0D(ý± (êÜäÊÆÞÎÜà*Â(ÎåR ¶0!$ æN+Z F&5 H¼ &cÀ&Å0 ’Ò#ç>² ¶ V –(Ð[ñ#pBw? ÔîœLV!##aìƒâ /a*Cá áB•U‘åà•j àå#-" žC ”OÔ… 0d Ýó J 8ÒÜìÂØÒÈÕc!üæ.íq0ÿ[Z º0 6˜*ê- ++  ‰? Jí>š*×/blí í^èƒâíO³à‚áíl?ž,º î!ï¦6œ4Î Èá/( %÷÷ ÷÷›(ûSÊû ; 6Öï/( &ý%¿ýq¢Ô%dh÷/8 ñ5îH@ã( pä‡â^ñ°*0‘åB! áGáÿ(Rƒá.è )=àÃåùO`pù-Úù ¦à ú!û²¤ìÿ/@ %!  ²ƒà¾¿æ±À ?àÃçOâ ¨ø & ¶ª2fdB›‡®?  #|ƒa$ŠåÜlÞ6WãJ9(`pàå?0âO GJ76®6ï  i xN7 i™<L3X»XNá á0šåÑ3%@ƒt Ó‰=1 àž >“Ð.eЀ¹ÿÿê?àâr91Ùÿÿ,, /Á,@Äÿÿ ++ß‘D.DÜÖp¸&Ø7•98H‚P½ Ðâ NH‘3*º;z " N ­®¸®P®$¯ÿÿ5P¯ P¯¬l³R³/ (·}·)·H·7·8··o4/¿æ »ò»di_¸»4Å»²» »&ˆ»Oê R»L* R»° ¼T¼)½ÿÿ9T½ T½²Ô ++#h`·Vi&/À #±q±]@\ ++¹¹,¹<+|±+ž5@žx#‚CÜ m[&–ÅA‰?èÿÿ@Õÿÿ ++uFDÙD“Ø X ++þÿÿÿþ‹3…ÄD ( ZƒÃB(`¢¯H \ ++™\Ê V™¶À ++š^š$›ÿÛ? X‘l’( Zƒ? \}^}´Ž ++”? ˜ (…¬…+ +‘_‘o‘­¡‘Hÿ+½µAks©K*5@$  ã;“+d´Ù œ|Qšå ++@‘.= àÑ“/.L0 á=$)íAü(_1 áæÌ(»]xÌ/m]‹y±D`üYq3*âq$4{ô0 bHÞÄÔÊÆèg,@R `‘_#L•(•xÊ›(›pQzE Ž,/ ¸t ¢d¢)£ÿÿÙb’0 b•d•1d•ºL pfL pL ÿÚoh ++ÿM ”¼  j ++@ fà ¾@ Žl@ ÿÛ? h„–@ j}l}¼@ nž/  (…­¡‘`‘p8I?P ¹Q=¡º¡|q¡Š¡µD_üX¡h¡”¡9n ++h¡–¡ ++j¡‚E¡À6 ˜p˜)™ÿÿÝ–™p™1p™Â: #jl“r: /jl: ÿÚot ++ÿ; ˜; ov ++ < r¿ Æ< x< ‘ÿÚ? t…š< v}x}Ä< z¤/¸ (…°£¤£“‘c‘s£8L£B£P £º£> 0Ñ@K¯„·¯|}¯‡¯ÁD\üU¯t¯˜¯9z ++€¯š¯ ++v¯šE¯ÈH ¤|¤)¥ÿÿ隥|¥1|¥ÊT #lhŸ~T /lhT ÿÚo€ ++ÿU bU o‚ ++V ~Ù ÎV ’„V “ÿÚ? €†dV ‚}„}ÌV †’ /lhùÿ /!­Sùÿ£€¥b¥†ùd¥ ++‚ù†¥ÐJ ˜ˆ’ ™ÿÿÜd™ˆ™1ˆ™6Ž.pYWé@"Ž$ì—QâSF3å<-¨1àŽ„VHX$ŽíF3/ 0å@ÄHå@D;8e ú0 Š¨ ++/X * ++dçAxLpâ^ã7CU-ÃT2‹žíÏT†"3 @–Ô–ÔÔ:@‘ª ++ UЪ ++ ̼OÌÿÿê«B5Ð/0t™  ++Ybšå l‹lA ++:MHM M86RIzJ Š8B’7=W7/0 "57 7q›žíÉ‹·î;Š;QÒ; ”;þ?È ' ++R80<0úÇ!04CŠŽí 4•T"¦ ä7ä7_1 áB!,0860„8 ¤Y"S,”ã ÞfÑD8 Ï@ ++ ++ê5Ž7D ++PŽX@ó î6ÖÇhWß, ÔÔSÿàâ,é_#ã áN¿J^ºÝ 6Ø ÃîÞ-P ß#ßUU"#C?:+BV‘«? ++õ÷H1 ++ ++º?9Þ ++;Ú*¥ ++/X  $   B; ôJÂ6Ü$ïþXBYÉHW vðv8†;Þ.¡ ·/Ð !¼¼¼À!ÀïÀºÀÒ¬GYBÁyµyVKe ++O‚[PªK ;Ô,x Þ/ !ããã ++çS²ç2 Œ* T'H7Å@B€ÇE Þ à=¯Z)ï) ‚£Z¼Œ_ ^ápoUoU!àžÕ… p–»Z1àžåTy P¿U1àžåŠ€ åD<Û(єŔÀD´D¯D£DžD’DDD|DpDkD_DZDNDID=D8D,D'DDD ++DD.ùþD/ôþDèDãD×D/Òþ$Èl¼l·D«D¦»ZX"÷ã"0   ·è÷=òK‰ùö"äÇZt/cþËZŠËZ„ Ž@ ++ ËZ! ’Y”ËZ$ –ËZ% ˜ËZšœËZž ËZ¢¤ËZ¦¨ËZª¬ËZ®°ËZ²´ËZ¶¸ËZº¼ËZ¾ÀËZÂÄËZÆÈËZÊÌËZÎÐËZÒÔËZÖËZØÚËZÜÞŸŒËZ / ŒËZxy[* àteF 4cÒ;¶ ˆ€/Ø $a ù ++@àNà›À0 ã> áàCâðA áåÐç áQ"ßm€Âã@àÃàl2Îã²zBº@DØ‚/ðš.[úÄ<@ \/à *Ðб᱿æÔ+*Õ?6uÐ/Ø % ›Ë›8˜ &dhž + ++­ Ž¦ÒP  ã.BBâC1αAq á°€à±Û¡²Ðç á€æË3 á0Ãã@àÂæ­ *ç…â/ & ÝÝÏ·á€àÐåÙ4"†Ãý}0 äŽ/8 .éÀ1Pp á°nµnÁž ++Cà ã¡U°èµš 8©¿ðµ00 áX¶" °ŒaKˆi—å@‘{i~âÌg! ê‘t< Œ|¢ðSâPjà„áã=¦1@àΣ·/@¤Õ F’"TD@šådÉk0T8p#ºߌ‚Tàj@Si,¯ œœp .Ê“”@êÿÿ ++ºLTPP.UP6M4˜ /,šV‚¦t/0øcõ`¸l`KoDd¸ò æ:ÄÒèîÒæÊZÂäÒèÐÚÊèÒÆZæÐÒÌèZØÊÌèx! ++huo@ â<0UäÒÎÐèEø" â tŽ60XÛ` CXB0 2÷  ä ++8ò/ ÿè/0 ) ¿´X=Xm€<Q4™Dñ LE3 æö`öËÖ&^ ú èÖ¹ ƒ0 êØ/` .ÝÅݺݣÝL6½ K䕃à•ƒñ4Qá õ0õX…õ€õ<iõ4±õD/ õ Fõ?õ £yõ0^ * êõÇ ++ðìð/X ) ëÄë¹ë¢ëUL@žç‰ç@çXç€ç<eç4­çDç Gç@ç ˆç6O" ìÜ"pìîìhÜÆñ»ñ¤ÜXܱuˆù@ùX‰ù€ù<mù4µùD ù Eù>ù ˜ù6O2 îàôðàpà‡ îàÿÿÔðà!žŒ  ˆ? ˆ .ñÊñ¿ñ¨ñMP—åKð§$rpà±à×äPÑçò? J- X™ €- <} 4Å D  A :  ¸ 6OR òðô/x ) ÿÈÿ½ÿ¦ÿU0@‘çðàÑå÷Q%÷X‘÷€%÷<u÷4½÷D÷ C÷<÷ ¨÷6OB ô’( ‘‘? öã/lhヿ ’ãÿÿÔöü$ö÷øæ /lhƉžÆÿÿÞøê ¨êº+/¨ $ä*îp( Nâ#5””Çå Ñç! á2`(H(ʬ’ê¢+ /° *¸¸² ‘á²/¿æ¼Ò¼?6D·/¨ % j²j g dŠ›*Ò8µ*£ap€à± ×kå-o á Éò¼êS+/È % M:¿ 0± B+#àP»ê2‡ 'úC/ð .ÌwŽlŽU5+d55+L ~ ~~â úb^ p}ŠZg@ËZ /ÑZ ¥ÒZZhü%?&P9)¸Oº ú9]šüš/è ) •v•k•T±)`5±)5‘dy‘@Í‘ •‘Ž‘ `‘N² ü‘´|$þz‚. ++„‚˜q˜Zl(t6l(9°d‘°@å° °ˆ° H'°Nâ þ°› ++« «/ ) ¦{¦p¦Y''p6a9¢d¢@ᢠ¢‰¢ ˆ¢OÚ R"î!" ]‚. ++b‚¬r¬[â%x6ÿ9´d•´@é´ Ž´‡´ ˜´Oê V¯VpV‡$Vÿ‰V!T §/@ .¬¬v¬_X#ˆ6X#9Äd¥Ä@ùÄ ŠÄƒÄ ¸Ä_ ++ f¿¿/0 ) ººtº]"€6"9²d²@ñ² Œ²…² ¨vOú ¯&y ×/ ++Ï ++/lhÏ ++ƒÎ Ï ++ÿ• ++·"l² Ò ++ /lh(‰/žåÒ ++ÿ— ¥20ˆ**b8 ±‡0|ý$­Rh´b šå°}R|‘° ­?Wãا"°Ša ­ LiM T,¨.éÿ,¨äËÑ0Ý0Ø|$ÊLÅ|¾0¹|$«L¦|Ÿ0/šÿ™N#aN1 pŠqN¸¶R Šå°¸úiNú-°úeN[ pšådgP0šŠ+M! 5NPH ++ ;M!  N  ­M"$& (J¨0^M€^Mz  *PP>i ++ÛĦŸ ,  ( @‡/ü"“¹bp á°$JŒOb ÀNàLáã`î á® $PÁã{  ++âPãZ'¡’åâPêÖPãÐ#qâÎj ‚áée’0€RáLº4—¹@GªñR㪠‚à! áK± “ÀÏ @^âjëqàãà.àGkL“NqàààŽÍ\Gþ 80“崟׃«pÐP‹W/°Šwý ++´3HwýÏö"pÌPÕ`C°šå`\Ó 4=@ Ó\Xã¹À+XÉÛ Oðð"°¸Q#ÀÌQOý _Iô"°,"ÀŸ²O áh%±h´X€¼ÿÿ ++sÿÿêÜÜ œR jü)œRx"äà%/‘à_„ÿÿ ++6à4/ àO ãà%*qàçl.úþ{A(‚ùP ,3281ÜŸ 0 Rô«$ÄÒƒØ1ÞÌ@HãüZØ1¶ˆP ªPC˜BƸ# j*#*~ ‚;T@Z‚¨0 .ˆ/0 .ŽŽ,\ŽXŽÒŽÐŽ”ŽNŽXŽIŽ ŽŽÄR’f§–1]–H¹– ¿–dQ–T¹–q¶41–T™–4à4–Ty–ø–’–NÒ .–8 0kº%˜kz k:k?R6Å ++f2î ++) ï ++ÃZW]Yï ++ÿÿÿ2Yª%˜Ä ++2Ä ++2YÁ ++ K¯0 4[/h .`&`,c`_`Ù`×`›`U`_`P` ``\`G± á Àè[ÜÅ ++ è[tltN'°s5/yH„1Õ„ ¸„dm„TÕ„j¤4M„Tµ„-à4-„T•„ñ„Ê1_ ++ 4„ò%˜„² „r„± ++6/X ) z$z,az]z×zÕz™zSz]zNz zz^»á …`v©·r1/q6r1 21 rºrderTÍrl’4ErT­r/à4%rTrórº_ú 6râ%˜r¢ rbOXù ++ $± 8 0 .+í€0 $y)0 ++¹°@àCàŠñ[!tqa€Ç Ã…+‘a€W!5 šå“ L0ËP Ó*áÓL!#!à™çóPà’åà™1^ãã#0ã{Ptâ?!‚ãýÚd@0sRáÕª½± s'‘þ9Êm7«!®;@Sâ¬;80÷ð+ÑÃY÷ô¢ò߀¬tààã à"iœA1ãNRÚtªà740’à5DA   á¤œœ4ù ++_¼AoÜ ³L0 ³ô« 0q* Œ@áÿÿêÔ”ý} tÁø¨ ̸H[× À{ ‰[*ดS¡ÿÿ ++šà3 „—# ) l¤Bø/° <ð0A áA7Ð,Œ/ ,ÏSßÿÿ ++ÜP]PPËÿÿ ++ïC$T/±ˆ#Öþ Ùp+‹ ,ùhÔ/Žþ(ë5FÚ[%%HU%1 ++ á:hà(( 8So#dÅdHB,8%ÍCäC&l¬%#H6:6ghVDp&…þ_ ++ 8£Ù/ Vß e//8 .4€4 s4`4¨è4ä444þ4Û4ä4@ÖªñŽ@àžåzAeCÇ›0LªL¨L(/åL|LeLJL3L1L(L  L*@Ë™ @ý|å@=@¼@$@_¥ÿÿ ++ž@å@ˆ@/-@ p@$…@ @@:@P@ @a@ î@ µ@Õ@ý@@†@H@Hÿ3@"H ·?¸PCf^ >CL >@Ò) Íÿ( 9øG5V/á5‡}5hù5,95ÍH5!á54)5D5Íÿ}5@5¶5iO ++ @x!N8W?@ .?? t?a?¨é?å???ÿ?Ü?å?×x‹LG]/éG‡…Gh/G+AG<‘GDéG41GD‰GxG GeG íG ¹GÔG/GŒG…GPG ++â¹ÀGiO B|BD| p|ÿAQ|ÿÿÿÿâ5¾|lD| º¸ d÷?` .?…? x?e?¨í?é???"?à?é?Û?1žåè"±UW^/ùW‡•WhŒ,QW<¡WDùW4AWD™Wx%W WuW éW ÉWÐWŒˆWWpW ++¼ÈWiO: FŒRHR/P ) MƒM vMcM¨ëMçMMMMÞMçMÙMDZEe/ñE‡Eh E,IE<™EDñE49ED‘ExE EmE ëE ÁEÒE EŠEƒE`EÆEiO* H½2\Ÿ »/ J/lhÿ=×^ÿÿÿÿîk¾ÐlJJZ’EL /lhš+ÿCžš+ÿÿÿÿñ8ÎlL82 NZô:È BFgrFgðTÃ& pBgOBg ++£¹¾L¨0  á¯¹Jg @6fPŸ´.ìÿŸ´çDÛDÖDÊDÅŽf$àŠå Šå$új" pŽf(Ü"ð ù"(( Jâàšå Ë0 šå¤°.”ÿÜA"’Í´B PX½´! RT´! VX´! Z0\(Hdf y¢ ^PFH¿¥ØÞÆÖÊÈZÒÜÆpÀ/   Ž1TX¿A:ð 0å ƒàŸï’áàŽâž?‚áSãúúÉ!^\kEAMA …•/ÈÊ•/ÈÊ•N•2ƒÂAÒÜÒè~“-` ‘‘I  ã«I q‚qêÿ ++ø`àåA1®±QŽàŸ?žðÙle0 ã“?Žø$IæàÒÜŒ-¸ ‘‘¢ ŽàŸ’áQ‘a ã‘‚´p Žâ ’çì óÿÿ ++úÿÿê$Úƒ*êÜ’ ++0o ++0B¬ÿÿÿNOP ++( 1<%„ ++$!@ ++°Š¬ ++B("L,qxö*nB #  L$à™åZá*€Xâ  ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ˆ Jâ áH/ TT½T˜!/˜?/U˜/™˜@í˜0/1˜?/…˜/ɘ@/˜//a˜?µ˜0ù˜@/M˜//‘˜?å˜0/)˜?/}˜/Á˜@/˜//Y˜?­˜0ñ˜@/E˜//‰˜?ݘ0/!˜ PŒl \&À$@ÿ/á…dfæýÿê0(ð3ÿ/áßýÿêÈjB è Ÿ€Tã›L ++ƒË_Šå‡bmë|šåêÿÿê,òb&HèäÂÜæZÈÊÌÒÜÊZÌèòàÊPBb8ò BL *)úEÌÞäÚÊäZ|ÄÒÜÈÒÜÎXB$æòÜèÂðZÞÄÔÊÆè$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZÂP ‚4ó ++ÌØÈÊðàäÊææÒÞÜ æÆÐÊÚÊ+ð  ++ ++îäÂà  LaH ×ñ-èÞà L  ++ÌÒðÊÈZäÒÄÆÂÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Z`P± ± 31‡‘æòÚÜÂÚÊæ‹›R ++ÚÂäÖ’ØÂÄÊØ^àر ++a1 ++ÿ LTæòæèÊÚT HæÆZàêèZÆèÊX’BKq2K3ÚÂÖr…ZàÞÒÜèÊäQQ':~$8  £ X q' ++È~ :"4 ++ý"ý"ý#òý$MyÉeæÒôÊÞÌû$û8&2 ++ù&ù&ù# "ù(ö…ÎêÂäÈÒÂÜû(û:*4 ++ý*ý*ý# Rý,ýq"ý6LäÊô,ù6.0 ++õ.õ.õ#‚õ0õq õô0ô52/ ++ó2ó2ó#²óhL  ô€ áø øˉOšåä3 jâ2@$âÿØÞÆÖÊÈZÒÜÆäBJ84$ÊðèÊÜæÒÄØÊvbvv?81V ÆÐêÜÖæ yS4>$ LdTNðg¯ÁP6ØÞÆÂØZ•÷$Â`ìäÆÊÈÖìðîÄÜæòìû¬8 1ªC & øwØÊìÊØ ”6IðR"ÈÒæàØÂÆÊÈZØÊðÒÆÂØcòT8  :P êÜRÔB: L XÒÜÒèZ6S> L@ S@ L S L2 S2 L* S* L" S" L& S& L T LBrIæàÒÜrvB LD[D LF,DÈÊÆä SF L. ô. L LHèÞàüû"ÌðÈÌôèÐdâfÐppìÈZ®80®GÖÊò¢ ™ÚêèÂÄØÊ~­HH0oÀz$HÌàèä܉JX."3ÞàBO*L*@ @ @ #â Z “SFVø'8‰'N†¯PRTfvVXMZMFMFl(FM#M^M”O>\M! M :\K^K>K>j(>K#BKbK”OD`K!˜JB`FbFDFDe(DF#rFfF”OBd‘(+:dKfKBKBj(BK#¢KjK”O:hK!K:hHjH:H:g(:H#ÒHle ôq lé<é<é<éðHB`8#" ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #OT,#ö.dB, að  L$à™åZá*€Xâ ++0Ÿåê0Šå Šâ`òp–åàâàŠå@ ã ð–åmò Jâ  á0šåàâ^ãã’åàLbÿ û&àà^áÙ`EâP…â,à™å^áÏ: †åà ã à†å  á$fÁ:à¨@à†å4ø ƒâ`‚åã ++,°™å Uá¯*°Kâ,°‰å ‹å<9 àƒL0žå”š”0”<  ‰ w  L0 ã”e”T”B4 l.H 8À@ÿ/á@+­@-0štà@ Ô/ýÔ È  byL J⤊Û:0 á¨Kƒå@p€tl.í@ x/¸š@†å á (8¥8í0†å †å0‚â`ƒX’X0X‚X"/ÑX pX@/EXMX$:X 'X@/)X X@/X/âX#/ÏX/¼X ÜO ãì.‰ì.$À/–è/ˆà/v´D Dà‚åH/^/L;Ü)” ””/ô”/â”/Ñ”¿” ­”œ”Š” x”g”U” C”2”/ À œ œ/ûœ/éœ 0/הƔ´” ¢”‘”/Xm”\”/JX'6œ%œœ(/ÿœ/îœ/ÜP3ÄH4¬H \š$‰$/w„e”T”Bp 5àŠØ ++O$è +qè ? á<­<àšå0Žâ@¬ ++Ì+ ¬ ++0¼èšå 0Žå>@ ãðšå( @2ÿ/áDfïÿÿê1¶¥ D”@p@_@L4 p/úþ@å.Ôþ@Ã@®@Œ@yh@W@D3@"@.þý@/íý@ØÇ@¶@£’@@n]@L@9(@@.óü@/âü@Ͼ@­@š‚qc@<Ø_0ÿ/á*˜|o3ÿ/áôûT.ÑûT.¿ûT.¬ûT‰TfTTTATT.ûú.êúT/Üú@¶¥@”@p@_@I8**ú< °¨Ä*qH.ëùxùäùÿê†j"èäÂÆÊZÞêèàêèZàÞäè(&ÆÞÜæÞØþXB$øB Ð 8 ÏðTãà—å@žåÿÄTã.  á‹k‹0‹tà^áL‡ ‡dã[{ /ôÿw kò ++ ++bB¬0b >üæ@Òæ@ÜÞè@Â@èÊðèêÂØ@@Wò ++HÞÞàæ0BLxB0 ++àäÊèèòZàäÒÜèh^!@s(€ m $mO^ãEˆEX *CØàäÞÆÊÈêäÊ2óp"æêààäÊææZÎäÊÊèÒÜÎ%.( + PãPà ã0'ë ''2Pà ãè/ s0 ++ ++ÿ'@Þð+ 4ÊìÂØZæòÜèÂðZÊðàÂÜÈÊäæZîÐÊÜÆÞÚàÒØÊØÞÂÈ ++5ð L8B   ûDŠåffJ*@‡ð ++šåà á&^ãA ++0âSã1+ žº `á&Sã-ð “åQá ++ 0“åøÿÿêSã& ++º$Ïžå áàŠå v ¢ Á ñ  Jâàšå žåØÿÿêHO@Šåö\BC#D_ @šåÚ¦O šåf!@š# :ñ ¯ÿÿêb ++ ++ ++ìÒæÒèäÊ ¢ LØäÊÚâ/ñ PB`8" ( 2ÒÜìÂØÒÈ@ãÒÐ@ØÒæè@üæ  ++ ++1(8k¯ˆB H Þ D=û"5ao" ++p +u 5pšåE 1Œ/ ã'nšåËÿáÄnbÂB \! ++xXž0 ++(y((‰ó PÆæRÚÂðÎÊÜ HÌÞäÊÒÎÜZÊÜèäòô@B ¨ à„Ðð à‰å4€‰å(P‰å ‰åi«°4€™å(P™å ™ÌQáA á/ “`Rx¡@( ›CæÊ辟6("þŒO@ á»ŒŒð04ÆÞØØÊÆèZÚÂðÒÚêÚZÎÊÜÊäÂèÒÞÜ  &Æ@€XâM!p—ß Oð—å²a²@íÿÿêE\@1 ++#pRã!ºÁóþRãÊ á p—å€Hþï ã“ó ó0 ++ >}>O šå¼*óšBb8Ú¸ Jüæ@ÊðÆÊÊÈæ@¾@i°ÞäèÊÈ@ìÂØêÊÂQ01ERÜÊî*è÷@Úêæè@ÄÊ@Âè@ØÊÂæè@b5*1V!X‘C¤€¤ qÚÒÜÌäÊʨ  •J•$• ™ ™Q ™P$4äÊg_ÊZÚÒÜ™"™.` &™XO™§F§3¥%¥H#ºíZZ/ÙõORáå­u‘­ºë³Á ++R"˜€P$ ªšñ@ñ ¢!ÜÞ¦ÿÄÊ@ÎäÊÂèÊä@èÐÂÜ@ÁÆ$Æy`8:"pÌ0@úÊÜÂÄØʾÞÄÔÊÆè¾ÆÞêÜèæÖX& ðÖÖ% á áNá á^Õ ++æ õ ùcÓR& ++˜B@(8Ä ++(Ä ++Ä?@ áÈ r _D ÀòÄ’Z( ++ˆB8a B0(¼Z¼Z¼²* h & CTã.@ ++_ Æ( ãn_ ãú ++/ ++æÛN!Nõ ++0 Šâº*öJÝ6ÌSî.)îߺà 1ÚªB*H $"`› ++Pj* ++ +%D2$‡þèäÒàZÄòèÊæ0..HæÊèZ°X*,B0O /ø AG S¤JV7¤)¤@'ÚT¨¨™¨´q´]´ÐF DÓê.XJ0 ++˜Y2 6çÞæÒèÒìÊ@ÌÒðÜêÚUOÒ0Å ñ6$ÐÊÂàZäÊæÊäìÊZ’Ï B8  ˆ [ƒzi *ƒàâ^ã ûUñà’åàâ^ãQ6? Šåª½RÖòp‘ã&š0Pãã ΢֢ ^öð^ o ã ±b ŸTãàÿÿ ++ÆÞ! Ðl†ÖÖŸ$R ++4&H„“àÒÜÊðÂÆ\`X4h·# ++0T6 :PC@C@CX3`B5!84$5aÜêÚÄÊä)g j8 ++ ,P,ãp: HÂææÊÚÄØòÛY-ø 3 3WRãý øg 1R˜Oè ™å¿„Š©:% n@Þä@FÌÏB<Õ ++t*à q 0q qi°re,Nœ^ÞàèÒÚÒôÊn wó>w(#$ µÊZîàÞZÌÒØÊ欭œ5p(Ä[ÆÞìÒÜâä¡#4Hõ pÆÐÊÆÖZà>fðZÌØÂÎê$ðœ ++ @  »PTã+èpí "í ñ $ á ­ å ÿ­ C ©' OšåÞ×ï1 ++Ò\ 2 Hj@2 Õ`BäêÜZÆà`uq¾Bq`ÌÂæØZt[%ÊÈ÷ ÀŸI›†ZÚÊææÂÎÊÀÀŸÆ"ÒÚ²‡ZØÒÄäÂäÒª$À¡XD ø¿ì Î/‡q‡‡¢Tb[RòÍ5úDy;F.%…ZÐÂÜÈØÊä‰!™¾F™ëHë‚uàäÞÎäÂÚëHë;J.%ë !ë¾JëDLhpZÌÞäÚÂè©,ø *a@!™åØý"ææ‚‚Äk†à ã@á‰^ $Ò$õf0ðjNÎôÒà0PØôh L HêÜÊðàÊÆ»H9 ++Ì‘HNHP@88ªþŒ±P±5R^SØÊìÊØ°;H ¯*߯  ÷85÷ D÷D÷  í  å  ÝW0s"jT8ñ0VØÞî0X ÚÊÈÒÓZÐÒÎÐ0\- R F} |ñTHV@X@Z@\@C6ˆc ‡¢p^ÈÊÄêÎeËx`  [ Vʇ0 áã0S%K 8k± ã á  ãÑ 0  0ÚU€—å Žâ0²Ç/ ‹ ÇÊ  07/iÐ.µÿD-® Bxz# ++¨.T^ 26'?ê`ðp6ÒÜèÊäÜÂØZÈÊÌÒÜÊæZÂsUèäÊÆT %  àHæÆÐÊÚÊZìÊäæŸB@,H©Z{ó æèäÒÜÎZ|æòÚÄÞØ«8c$ ++0DP ++(0»* = (š.a%!H" aú, ++B( +\ No newline at end of file +diff --git a/boot/arm32le/scheme.boot b/boot/arm32le/scheme.boot +new file mode 100644 +index 0000000..072927e +--- /dev/null ++++ b/boot/arm32le/scheme.boot +@@ -0,0 +1,7584 @@ ++chezI>(petite)chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #aÿ¢,1a0ðI…BÀ …  LŽoŠâ$à™åVá9È*€Xâ"È ++  ã ã Šâ`Ÿåêp–åàâàŠå@ ã ð–riH JâX„ È*@ŠåTTLR½S+TöïÇ*@Šå`EâP…â,à™å^áäÇ:à\Hà†å› à†åà ã nà†å ``Ç`8`ª`8``8`p`8`S`8 `6`8$``8(`/üÆ`7,`ß`80`Â`84`¥`88`ˆ`8<`k`8@`N`8D`1`8H``8L`/÷Å`7P`Ú`8T`½`8X` `8\`ƒ`8``f`8d`I`8h`,`8l``8p`/òÄ`7t`Õ`8x`¸`8|`›`8€`~`8„`a`8ˆ`D` `Œ`'`8` ++`8”`/íÃ`7˜`Ð`8œ`³`8 `–`8¤`y`8¨`\`8¬`/?ÃÀ7°`"À8´``8¸`/èÂ`7¼`Ë`8À`®`8Ä`‘`8È`/t 7Ì`W`8Ð`:`8Ô``8Ø``8Ü`/ãÁ`7à`/ÆÁ 7ä`©`8è`Œ`8ì`o`8ð`R`8ô`5`8ø``8ü`/ûÀ`7.a`Þ`8`/ÁÀÀ7`¤À8 `‡`8`j`8`M`8`0`8``8 `/ö¿`7$`Ù`8(`¼`8,`Ÿ`8×0aŠå0 ã`Eâdп:0†åà ã ÈKaŠå$¦s¿:8aŠå0TÀ8ášå0Žå41šå ?0Ž`_`<`[Q¿:@`@`S<1šå@`>`=`_DaŠå&(³.¿:  á0‚,,‚å$ Lp †åDášåLH4LLc0 áƒLƒÔP¿:LÔÔLÔ0Žå= Ž4Pñ¾:P4 4P4C ŽåP&\/U¯<‚¥T4 ++èO̾*`-/`¯`0e`L’¾*Tˆˆ¾: á¹àåàšåàP„é„gä0/I `Jä@ää(Í„ä0/-!``0`/å½`/í`ÈȽ*<àšå0Žâ”ù àƒå,°™å Uá¹½*°Kâ,°‰å0‹ü; ƒ8‚8¥8+ ‹ƒHH ¸à ã^ãp½`üáŠå`Pã8 ++Ä"Ÿ ++Šå<<q)#<ð*šåDá á@1 áü!è‚à àÃå€âàÿÿêäP3ÿ/áò€ p&À$@ÿ/á¡xL:Xˆ@Èÿÿê˜(p.&½˜8 H S$à ã °!Hpp((pppXp/ä¼p'p p\pÃp( pÐp`ø*¡¼8d(’(h(ƒ(l(t(p(e(t(V(x(G(|(8(€()(„((ˆ( (Œ(*ü»((í(”x/ß»x'4È ˜p¾p(ähä-ä¤ätäHìì ì/ï¶ì/Þ¶ì/Ͷì3/¶¶ìì ìì~ì4gììQì@ìhì ¤/¤ \°°° ü€!0È Œ/鵌<´/ص<<dø0/ŵ0p0l0h0 /®µ0 ô˜ô‡ô$tô4]ôÜ ôGÄ ô6¼¼d¼ ô#88€ô€ô€ô€ô€ô ôÞ†å †å †å ô/ö´Ä ô/å´¼¼d¼ ôÒ8p8‡ô‡ô‡ô‡ô‡ô/»´ô p†å †å†p ô¥Ä ô”¼¼d¼ ô8°8‹ô‹ô‹ô‹ô‹ôjôÞ°†å p†å†åôTÄ ôC¼¼d¼ ô08À8ŒôŒôŒôŒôŒôô°À†å °†åp†åÜD D´: âšå,0ü¡†å†åp†T&àjï³:$bD#"$âD#b¼0šå$â@""è1 = 0Ž [Ù³:(D&(âˆ#(D4 D"40 \ \Ð[½³:,\,\8,\ 8[ª³:0808_ð1šå08[—³:484848. ¼"ƒ³L/ à#ju³:8b¬#"8â¬#8”[c³:<4<4/<âä$*P³L/@btA(9DbŠ„:žOžå’ð SÝBH<’<o³*HBl“lSICLl“lbþ²*LBHü[ó²:PðPðSd0šåP` ¼Ä ¼"p1 ¼$ S0Žå0$S0Žåœ S0ŽåÐ S#0ŽåÈ S'0Žål S+0Žåh S/0ŽåÜ 3`S70ŽåÀS;0Žå\? SC0ŽåT GTÀø[°²:TøTøSì1šåTø"”0  àTø"2 ø 4Tø˜ øô<øø øü øHø ø ø ø øŒHøø8„Kˆ SO0ŽåØ S„ Wü [Ü _À c gx Sk0Žå „oˆsè w8${H S0Žå  ƒÀ ‡Ð ‹Ð ô S“0ŽåX S—0Žå` ›0 Ÿ¨ £l §à S«0Žå ¯ì S³0Žåt · [»0ŽåLb²:ìàˆ@èášå| S˜ášå x&à ++&^8[²:XàXàbL šåXâø(Xˆ"€0ˆ` ˆ„ ˆ\ ˆ"ä1 ˜Xˆ” 'tXˆ /ÐXˆXˆ€Xˆ` ˆ|$ˆˆ ˆ, ˆ0 W|Xˆ ˆˆt ˆx ˆà0ˆDˆ@ ˆH ˆˆ0Xˆ˜ˆ| ˆx ˆ„ ˆ€ ˆ¤ ˆ  ˆ¬ ˆ¨ ˆ´ ˆ° ˆ¼ ˆ¸ ˆÄ ˆÀ S¿0ŽåÌ Ãx SÇ0ŽåÔ Ë„ Ï` Ó ×4Ûx ßð ã ç ë´ ïx óÀ ÷° ûà2 ÿx "1¨ü1818 "181h1ü1 1ä1\1Ø1ð1ì [±:\8\8\8   @\°d ì Œ ++[÷°:`\`\¼`\Ø  p`\ ´K°:dPdP dP ˆ[Ë°:h8h8h8@hˆ |[µ°:lDlD8lD Œ Q¢°: €+D =pbŠ8 S“°:ôl llðD* t=tbŠ¬S~°:ð@$@¬x8k8 8|8[X°:p8è8€ [E°:„H„H€„Hb2°:èáH"„âHˆ˜< #`< "¸à˜"Üà˜"háHÔ ôÔ ôÌ Ì¸Œ¸X[°:¸¸Wˆ2šåDØÌŒ  Ø„Ø Sæ¯:¸d*dàdä"èàÌ(¼”¼8H[ϯ:˜¼˜¼˜¼”  Œ˜¼@ ˜˜¼D ¤˜” #˜”Œ +˜”„3&›¯hìÐ*èáœü0@/†¯”ƒØ T؃؃,1àƒ,1àƒ,±àƒåÀàšå#àƒŒ1'àƒ„=+àƒx/c¯”"„â”X€1à‚€p°1à‚€1à‚€1#à‚¸1'à‚ä1+à‚€=/à‚S>¯:Ü8h8p<l8À< `PXS#¯:ˆ`@”tL”à`èX" „!„%„)Ì-(,3šå1„5´9Ôóâšå=à†åA0†å âšåE°IM” ++°¤Sò®:ÈÄ° °ô°°*ðà=¨bŠ[×®:¼Ø¬(È€(°("¹®ì˜(´@ª( ̸¸è—° 8¼8SD2šå¼8@ H L ¤`.{®ô€"&€"&€"`*x",! % )-1€ @RPŒŒ#  ááàã 6"6®6 Œ)|Wà†å,˜[®:üè5üè5( &üád  *®øÀ "ñ­T30‡,‡(/â­,7"Ô­ˆ*Àâø (&Å­À_ p†åÄB·­:H3†åÄäÈ, "¨­Ȉ €å4Q à€åœà€<3à€;€åx.“­$@à‹â„,ؤ؀.~­TLSàƒâ 43L@àƒâL1°ƒLH ŒfŒ ” *O­xÜ, †âD„ ,“†âà†å°†N†å°˜j7­:Ìb<3Ì,pÀŽåÀšå SÀŽåÄ . Àt [!­:ÐDÐDÐDÐD €b ­:˜á¼ˆÄ*Àâd ++=ÔbŠ|[ø¬:Ø|Ø|SÔšåØ|Øè 0 [ã¬:Ü,Ü,SÀ2šåÜ,Ä D[ͬ:àDàD@àDPàD˜P[´¬:äPä”äP\äPäP[›¬:èPèPèäèä[…¬:ìDìDìDìD[o¬:ðDðDðD` ++ðDÄØ[V¬:ôPôPôPôPôP[=¬:øPøPøPøPøP Ô$xÔ¸ìÔüÔj¬:cˆ&ãˆ&ãl/ãl[û«:DDDD[å«:DDDD[Ï«: D D D D` /¹«Ø Tè"ˆáØ œØ "ÄâØ qƒåpƒ|Ð ¢#°ƒå'ƒåÈâÈ _/ ƒå> "˜«ø\T&(‰(/c(z(Pk( (\x8x&N«|È|*ã|.c8;8"ã88"c´@8/(«Œ"œàŒ"0àŒ"ãHH0 1à‹lQà‹åŒ pQ#à‹åX| @‹å à´‹È 1/à‹` 13à‹7DÐ(Ìô/ûª¤ "Äठˆ d ¤ X¤ p ++/䪤"â¤èhˆ$ "â$ HAà‡åìì Ìjɪ: b<@<@@šå SŽå b Žåì "4$j°ª:cPxD 8(/ªl!ô ìô ì" \=ÿ 2Šå²Šå"ŠårŠå ŠåɯŠâ\på¬; aM_$B+É@rª*dþ²šå"šåršå šå$C8 ybª:,cŠ”,üpŽåšå .¬/Oªt!œt!ä8"Œô" „!/:ªX @Œ8X "âX Ð%@@@Q„å„°1 à„¼³à„åÀ„å„P„Ñà„å#°„å' „åH4Q„å/p„€13à„x17à„œ1;à„Ô1?à„œ1Cà„ =Gà„ôjú©:(c¼ "(ã¼ bP"šå(ãä"ü! 1 Ž"@H"H1L"T2 ÜBË8Sa,4Ë4OÇ©*`-á`ª`0/Ab``0¡`p` <@” 4@¤ tã ++@@/^©@@ 9Hšp0˨? /Ic¨L;©*l/1©Ð Ð"pâÐ ”ˆ шˆlˆ<ˆ€/Qd€[å¨*°"Û¨ øQàƒå´ì¬1 àƒ3àƒ Ô"/ƨÀ.0¼Oü1ŠåÀ /eÀ@¦¨*4 „›„@‘€|@r@Œ@$]@œd/4œd „¼ ô$Ù"œ´¸ð„$´8 ++/ó›È;/‘Œ¸/Ó›ÈÈ„ €L©›*\,/Ÿ›È À Ш° 8° ¹¨u¨/k›d ¨D/aŽ¨A¨7¨d/ ¨. ›À¨ð° °À!™.ßš( /Õš8 ( 3/1˜.¯šX.¥šA¼3.üa8;&’šìCü ?@ @LA\/}šT ++;/)‘ø]€S€/üá€#©€.3š )Ä +/1’ˆ.š ++Sý™:ÀÈ| 4@ ÐÐÔ@0 À4PðP(XXX,B0/É™0( /Y“(.©™0/Ÿ™0€#Ù€.™0/u™0!”ˆSˆ/I™1 ¸#éˆ'ˆˆ”ˆ,/q•ˆ.û˜ˆ/ñ˜ˆ˜ˆ,ùˆψňŒˆ,/–ˆ£ˆ™ˆˆ,/ —ˆwˆ/m˜¨ /ðàˆ#‘ˆKˆAˆD/˜ˆ.˜€ˆ ´˜è /pâ€#±˜.ï—˜/å—Șˆ4ˆDɈˆˆD/QLj.戈/܈ˆCÙˆºˆ°ˆD/aȈŽˆ„ˆDéˆbˆXˆD/qɈ6ˆ,ˆDùˆ ++ˆˆD/ʈ.Þ‡ˆ/Ô‡ˆC/ ˈ²ˆ¨ˆD‘ˆ†ˆ|ˆD/̈ZˆPˆD¡ˆ.ˆ$ˆD/)͈ˆ/ø†ˆC±ˆ.Ö†ˆ̈D/9Έªˆ ˆDÁˆ~ˆtˆD/IψRˆHˆDш&ˆˆD/YЈ.ú…ˆ/ð…ˆCáˆΈĈD/iш¢ˆ˜ˆDñˆvˆlˆD/yÒˆJˆ@ˆD/ÓˆˆˆD‰ˆ.ò„ˆ/脈C/Ôˆƈ¼ˆD™ˆšˆˆD/!Õˆ.n„˜dˆ/èá˜#¡€D€:€=Ù€€=€.ô‚€/ê‚<ڀʀÀ€<¡€ €–=Û€v€l=€L€B=Ü€"€=€.ø€/î<Ý€΀Ä€<¡€¤€š=Þ€z€p=€P€F=߀&€=€.ü€€/ò€<à€Ò€È€<¡€¨€ž=á€~€t=€T€J=â€*€ =€€/ö<ã€.ր̀<¡€¬€¢=䀂€x=€X€N=å€.€$=€€/ú~<æ€.Ú~€Ѐ<¡€°€¦=瀆€|=€\€R=è€2€(=€€/þ}<é€.Þ}€Ô€<¡€´€ª=ꀊ€€=€`€V=ë€6€,=€ €=ì€.â|€/Ø|<€¸€®€{ˆ/4{ˆC©ˆˆˆð˜dÔ5%/9ò.äz/ÚzKɶ¬L/Yóˆ~LéZPL/yô.,zøS"Ô:p p /õ .úy /ðy ¼ ˜T(˜ʘÀ˜T/Iö˜š˜˜Tá˜.jyø`˜¼˜` ø.÷<2¼=5/øL‘.àxð/Öx”ˆ6˜/ù€¶€¬€<‘€Œ€‚=ú€.bxÈX€ œˆÈi˜2(ˆ4D/ ˆˆD‘ˆ.ænˆ/ÜnC/ˆºˆ/°nC¡ˆŽˆ„D/)ˆbˆXD±ˆ6ˆ,D/9ˆ ++ˆDÁˆ.Þmˆ/ÔmC/Iˆ²ˆ/¨mCш†ˆ|D/YˆZˆPDáˆ.ˆ$D/iˆˆ/ølCñˆ.Ölˆ/ÌlC/yˆªˆ ˆTˆèˆ$/ˆ~ˆtˆD‰ˆRˆ/Hl¤b€4/ /$lD+u\ì/þk„Cýˆ.ÜkÔ#/Òk|¥ *TÔ#$/•!˜.¬k ¢ D/"ˆ€ v Tµ˜/Pkœ+/#\4\,m\\,É\/üj\+/%$\à\,\Ä\,Ý\¨\,/9%\Œ\,•\p\,ñ\.TjÔ *Jjhˆ¼hˆèš /7jøa;/©&¸/jøa „€ /)'€.íi8*ãiXÀ8/Ði8;á¸/°i8/¥i87/a(€†8*|iÄ8i888™€8*iˆÁ88\\,©\s\,/?\W\,a\;\,½\\,/@\/b,\/ça,\/Ëa+/-A\.¯a\/¥a, ˆ.ƒaä"yaØõ˜<àœ<ôí/fa¼'/qB¼*EaÀ=L"-al¾ àÿT /CT ƒBŠå¸šå ¿/Dqä aPnú`*B˜½/ï` /â” #õ”.Ë`Ø!/Á`´: * àÌF˜/D˜›˜‘˜Ì°P /-E .i`d_ < ­€.?`€/5`Ü üH/=F°/`d² ؘ˜Ä«!Õ˜.á_L©"×_ õpõ `Á¤´/ìऴ ø/¾_˜x /¥GÐ.ž_x”€x#/%H€t€j=€J€@=I€ PèP줶*èá ûH/ÿ^H;íÈ.ß^H/Õ^H;/mJ€.µ^À«€ 0T0*‡}  /KY O Ø4hL/…OhL/P.â\@ "Ø\T¼D%¸D%t ÈŒ²ÄŒ²èðÇð/¿\xt!åÐ&Ÿ\t D „P/eQ€uPkP¸”&PpPÈP„ܳPXY /4Y ÷+/Y\ „#/\À/ÿXà /ôX„€ €.ÕX@+ËX¿@/¶X@;/]]À–@‹@8Ý€l@*bX´6@M@S€4= €€ ++=€.êB€/àB<¡€À€¶€<…€–€Œ=¢€l€b=€B€8=£€€=€.îA€/äA<¤€.ÄAx/ºA p!–ŒL/%¥h^Lµ:/0A( ˆ ˆ /=¦ˆˆˆDň.â@@/Ø@ˆ€€ /E§€¸€®€<Å€.Ž@w@„@:ðð è Èî¨ *˜âÀ¸/}¨¸.Q@@GL/ ©#L.õ?/ë?K/-ªÇ½ ,½™L/M«ka°LÝ=3L/m¬°Lý.á>/×>K/­³/©>°K/®…{L­WM°L/=¯)LÍ/û=8,°\ß\,…\Ã\,á\§\,/=±\‹\,™\o\,õ\S\,/Q²\7\,­\\,/ ³\/ÿ<\+e\ã\,Á\Ç\,/´\«\,y\\,Õ\s\,/1µ\W\,\.;”/Š\ è˜$áˆh˜^ˆè˜/?€>€4€$ဈ ++ˆ$,/i@ˆ.èˆ/Þ0f $ˆ$ñˆ.¼Ü ²ˆ*„âÜ`(Ü %A˜.Œ(/‚ÀO$B€b€/X(;‰€8€.€*$|0|,ù|_*|/8 /ù¸ø¸(¸/ßp /Ò¨0"üápô¨/(áx/¶0 *©è è 4‡4‡,ø ø _à‡å8ø $/µ\¼"x ¬À/pø +/5]€T€¤€/Eø '±|_**¨xH H"ÌâH ð 0¸/õh /èp*Èâ¸4hÐh Ãhh/áh/«@ /žˆÈø p„p wØØØŒhˆøàP[x NxÔx Üx2x %xpp p  p p /þpp/äø .×€Èø ´ !/åa4_µ* 4/§H +++/ab|_‹*À|}|,Ý|_a*Œ|S|,/Yc|_7*”|)|,Õ|_ *|/ÿ|+/Qd|_ã*˜|.Õ8 .ÈÀœx/´è /§¸$¸*Èâè¼p/è /€8 ì?‡å $/Íe|"^˜´€/O˜'/If|_4*¸x&   "ã ìXp°¨.ý¨x/ðÈÀ¨/Äâx3/…g<"ʸT@/»¸'/h|_ *Px/’¸ /… èXˆ°kpX,dDàƒå0Y  L Ü ++#Œá h¨/0È /#È\XX X`X/îX /áX€XÍX ÀX„X¬X ŸXäXlX‹X ~XàXhX/j  ]X"TáXxh ++8`G`'0LG`Eâ€l7l0Ä8ô(”,L¼,$\h\ lâ þð†å`âšå'à†ådâšå+à†åXâšå/Ì@âšå3PÀãšå7à†åHášå;Ì @âšå?´@ášåC´óášåGà†åDášåKà†åášåOtS„@ášåWx@ášå[h@ášå_d@ášåcˆCášåg,kà†åtášåoœÃášåsà†å|ášåw¼{\íášåà†å ƒâ`‚P'èP8 ‹å0p1 `H`.Ô`ð ðððððð#ð'ð+ð/ð3ð7ð;ð?ðCðGð¡ðDPLášåØ&iášåLˆLPLPLoL8L8LVL@L@L=L L0 ãôÀ+:0†åà ã@( H ì‰H/ Ä” j>@ ãðˆ(@1ÿ/á@Lðÿÿêß,,^2ÿ/áÎ(@»¢‰pWŒ%,,.Âþ,±„_3ÿ/áœ,Ž,{,m,Z,L,9,+,, ++,/÷ý,.éý,Ö,È,­,ŸDt,f,Y,=,/ @.ûü,/àü,Ò,Å,©,›y@k,R,D,1,#,,.ùû,/ìû,Ï,Â,¥,˜,{,n,Q,D"@,/ûú,.íú,Ô,Æ,«,,‚,t,[,M,6,(,,,/êù,.Üù,Ï,³,¥,ˆ,zP@B,',,,.òø,/åø,È,»,ž,‘,t,g=@/,@.ù÷,/ì÷,Ï,Â,¥,˜,{,n,Q,D,',,.ýö,.ðö,Ë(/¸öTª,,,b,T,G,*,,,/óõ,.Öõ,É£@•,|,n,U,G,0,",,.ùô,/ëô,Î,Àš@Œ,s,e,X,<,.@.úó,/áó,Ó,¶,¨,,,t,X,J,-,/ûò@.íò,à,Ä,¶,™,‹cY5+ .ÿñÙÏ©ŸyoI?#.ëðËÁ¡—wmG=.ïïåÅ»›‘oeA7. ï8.ìîáÁ¶.”îxndB8 .êíྴ’ˆf\:0 .âìØ´ª†|XN* .üëòÌÂœ’lbB8 ++.êêàÀ¶’ˆdZ:0.âéØ®.¤éˆ…zXP@6.øè.îèxÏÄ¢P‡|d>4x ++.èçPͪ„.zçxY(J@<.êæP×.Íæ<¨wPh^8..þåâƪŽrV:.úäðÌž”pfB8 ++.èãÞ¼²†dZ8. .àâÖ´ªˆ~\R0&.úáØά¢~tPF .ðàæÊ®Œ‚`V2(.úßǪ̈žzpND".öÞìÊÀž”rhD: .èÝÞº°†|RH&.öÜìÌ.ÂÜ„£˜xP_U/%d.ùÛ.ÙÛP¼±™PzoOP4*.þÚÞ.ÔÚŒ±¦†PqgE; .íÙãÁ·—ka?& .ßØ.Õؤ°¥…Pvl<I>P.ã×Ù·ž”rhF<.ðÖæƼšnU.KÖÌ,(<.ðÕ(á.×Õ<¸(©ŸuUJ,´.ðÔ(Ý.ÓÔ<´(¥›<|(mcC9.ðÓ唊f\6,.þÒhßÔ.´ÒP“<tiIP2(.úÑØΪ ~tND .ðÐ渔Šh^:0.Ð.åÏÚº¥™uiA5.ÏÜ.úÎãÙ·­‹[Q-#.ÿÍõÓɧ{qG=. Íà.îÌã.ÃÌP°¦€vPF*.òËÖºž‚f<2.þÊÔÊ –lb8..úÉÞ¦ŠnR6.þÈâƪŽrV:.àÇÖ®¤|rJ@.æÆÜ´ª‚xPF.ìÅ⺰ˆ~ZP,".þÄôÐÆ –pf@6.ìÃȾ¢†jN2.úÂÞ¦ŠnR6.þÁÚЬ¢~tPF".ôÀêƼ˜Žj`<2.à¿Ö²¨„ukKA!.õ¾ëÉ¿›‘mc?5 .ë½áÁ·—mcC9.ï¼åÅ»›‘qgG=.ó»éÉ¿Ÿ•ukKA!.÷ºíÍã™yoOE%.û¹ñÑǧ}sSI).ÿ¸õÕË«˜Žf\6,.ü·Ö½³‘‡e[9/ .߶Õµ«‡}]S3).ùµÕË«¡wOE!.ó´éǽ•‹e[5.+´ ++(.÷³íÉ¿›‘mc?5.ã²Ùµ«‡}YO+!.ÿ±õÑÇ¥›wmKA.ñ°çù—kaA7.é¯Í±‰_J@.ö®ÔʨžzpND".ã­Ù³©ƒySI#.õ¬ë½³‡.}¬¤^S3P .è«Þº.°«Œ‘†fPSI<*.ÿªPì.âª<ø˜mxZP0&.ü©ÜÒ²¨‚xVL* .þ¨ôÒ.Ȩ¤©ž~Pi_<@5P.ö§<×Ì.¬§P—<ncCP.$<.ú¦.Ú¦PÅ»Ÿ}sQG%.ù¥ïͺ.°¥,„`U3x .ò¤èĺ–Œh^>4.ý£.ó£@ÔÉ©PŽ„<eZ:P!.ó¢éÅ»›‘qZP,".þ¡ôÔʪ |rND$.ú ãÙ¹¯…e[;".òŸèĺšh^8. ++.ÿžæÌ.´ž$“(€vTJ..öÚ¾¢†jN2.úœÞ¦ŠnR6 ++.î›Ò¶švlJ@ .öšìд˜|`D( .ð™Ô¸.œ™è{pNP?5< .ç˜PØά¢€.v˜ŒUJ(P<.î—ã.Á—P²¨<‰~^PKA<".÷–Pä.Ú–<»°P}s<TI)P <.í•â.•P¯¥‰mQ5.ý”áÅ©ƒyWM'.û“ñÕ±§…{YO-#.÷’ÕË©Ÿ}sQG%.ù‘ïÍá—ukI?.ñçÅ»™mcA7 .éß½³‘‡e[9/ .áŽ×µ«‰]S1'.ûÙÏ­£wUK).ÿŒõÕË©Ÿ{qMC#.ý‹áÅ©qU1'.åŠÛ¹¯ƒcY5+ .á‰×·­ƒcY5+.ýˆÓÉ£™yoOE%.û‡ñÑÇ¡—wmMC#.õ†ëǽ™i_9/ .ÿ…×Í©Ÿ{qMC.ñ„çÅ»›‘qgG=.óƒéÉ¿Ÿ•ukKA!.÷‚íÍã™yoOE%.ûñÑǧ}sSI).ÿ€õÕË«¡wWM-#.ùÙϯ¥…{[Q1'.ý~ÝÓ³©‰_U5+ .á}×·­ƒcY9/.å|Û»±‘‡g]=3 .é{ß¿µ•‹i_=3.åzÛ¹¯ƒaW5+ .ÿyÝÓ±§…{YO-#.÷xÕË©Ÿ}sQG%.ùwïÍá—ukI?.ñvçÅ»™m.cv„D9P ++.àuÖ¶¬Œ‚bX8..ätÚº°†f\@$.æsܺ°†bX4* ++.àrÖ²¨„z^<2.âqØ´ª†|XN,".öpÔʨž|rND".öoìÊÀœ’ndB8 .ên༲†dZ8. .ÞmÔ°¦„zXN.$.úlÚআ|\R2(.þkÞÔ´ªŠ€PF.îjä唊h^<2.j .åiÚ.ºiPŸ•<vkKP4*.úhÔʤštjD: ++.ägÚ¸®Œ‚`V4*.þfÜÒ°¦„zZP0.üeòÐƦœ|gTJ$.öd츎„Z.Pdt1&P.ócéÅ.»cdœ‘qPbX<3(.ûb.ÙbxÀ¶<—ŒhPSI).ýaàÖ´ª†{d>4.aT.å`Ú.º`P¥›ukKA!.õ_.ë_ÜÌÁPˆ~XN.$.ú^Øά¢~tTJ&.ü]òÎĤšvlH>.ì\â¾´†bX6, ++.Þ[Ô²¨†|ZP..$[$.øZ.ÖZPǽ<œ‘oP`V<5*P.ùY.ïY<ÎáP’ˆ<g\:P+!<.÷X.×XP¸<™ŽnPYO<0%P.ðW.æW<ǼœP‡}<^S3P.ôVêÈ/¾V°—š,‰lO.2VôfÿUÿê@4h¡<<"<¡0Ì ++—.‡Uà\I0.UÈ.þTѾ.«TdŽp.aT@*.þSèÕ¼£Št^E,.Sl.îRت°;DRŒ{fQB4.%R€.ùQà.ÐQ€Ã(.§Q ~bO@1"´.ÖP.»PÈ.–PPs^*.ñOÖÇ´¡Ž{fWD..æN|.öM(ãI.ûL.ÛLx¸©–„dvbO< . ++Lˆ.öK€.àKÄ.ÉK<¶p7„<<x<.eK¼T<><'<.KÀ<.íJ</ÖJÄJ̲<œ<…<.rJ¤aPKP4P!P(.ôI(.ãId.ÊI<¹<.¨I´’P{PjPYPCP,PP ++P.ôHP.ÝHP.ÌHP.»HP¥PPPnPXPCP2P!P P.öGP.åGP.ÔGP.¾GP©P˜P‡PqP\PKP:P$PP.þFP.íF(ßÐ<®lK* .èEǦ…dC".àD¿ž}\;.D¸ .ýCîßÐÁ²£”…vg.XC6.ôBðÓBÿê8 ãàƒâàÎ㜱„P•à*$©µ:ƒá áàŽ·.„Bœõ,¨/kB/SB ›?¨1.÷AÚ¹¯’qgJ.-Aô.A .ö@<è.Ù@P˼<¨(š(†(x(Z= .æ?ɬrU8.þ>áħŠmP3.ù=Ü¿¢…hK..ô<׺€cF) .ï;Òµ˜{^A$.ê:Í°“vY<.å9È«ŽqT7.ý8àæ‰lO2 ++oð7ÿê ä¸ bå * ä¸LÌ7ÿ:T.Ç7hóÀ7ÿêwŠ$HÚÂÖÊZÊâZÐÂæÐèÂÄØÊXB$P ++ö4` ++àäÒÚÒèÒìÊ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZlfdlP¬ (‚ <ð, ++ÌØȺÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÜèòàÊ q ++àêäÊ~ø7ÐÂÜÈØÊä " L  ÂæÚØÒÄÆÂØØB   ÊÌÌÊÆè0B ¨ ‚ Lc²¹àŠå&à ãàŠº{Þ&` õp–å@ ã ð–å ++B 8ÜÞ@þ@­ð<@ÈÊÌÒÜÊÈ0"ÆÞÚàÒØÊäZÒÜèÊäÜÂØ ü€¶üÂt@üºü~ ++HÞÞàæP ++  ÆZÛO  ÒTó0¿ÆZæÒÚàØÊ”j”gTŠeŠŠVŠeŠŠZŠeŠ Š^Še ŠŸ" ÌØæâäèe"$Šf$ŠÐ&ÒÜÆZÆÆZÆÞꛕe&•0(&•àäÞÌÒØÊšm(š*/ÏìÞÖÊZàäÊØêÈÊ•e*•¿,ÖÊÊàZØÒìf,ß.ØÞÂÈZÈÞêÄØ’f.’70&’oZ|æÒÜΚg0š2,’k2’74&’/Z|Æk4šÿ6ØÞÆÖÊÈZÈÊÆäB“e6“8“/ÒÜ“h8“: ++àÂêæ²f:Œß<àÞàZÚêØèÒàEg<“>àêæДn>”Ÿ@äÊÚÊÚÄåg@ÿBäÊæèÞäÊZÌØäì“eB“oDæÂìkD1F ++!ŒeFŒ2H­ªkH“J“×kJ“8L(“ØmL›_Nìà”qN•OPì¼qP”oRÆÂæŠeRŠïTx VàäÊÈŽaTŽŸXxz V‰aX‰OZ|ˆeZˆO\|f\‰ÿ^ÆÞÜÈÒèÒÞÜZÆÞÈÊ•e^•o`Êâ~Še`ŠbxŠebŠ_dÌØEgd‹fŠffŠ0h ++Þ BŒehŒ¯jØÞÎèÊæèŽejŽlØÞÎBil0nDoZÆÐÊÆÖÚfn’OpêÙfp‰ÿrZ t ++ìÂØêÊar0v#tˆavˆŸx V^ÞìÌØex¯zV^ÆÂääòŽezŽO| Zj|~Z^Êâ‹e~‹6€j‘e€‘Ÿ‚ ÎÊèZèÆe‚„ØÊÂb‹e„‹†‹d‹e†‹0ˆM‹eˆ‹Š ØÞÎÂÜfŠŒZ ?ÎÞäŒeŒŒŽðgŽ?ÜÞèe’ÚÞìÊ‹e’‹O”Tˆe”ˆO– Tj–÷˜FäÊÂÈZàÊäÌÞäÚÂÜÆÊZÚÞÜÒèÞäÒÜÎ8ªb˜ª1š.ª¯èÒÚÊZæèÂÚàžmšžœ ++æÊðèpŒeœŒ0ž Œ/bležO æìg Š_¢æäŠf¢Š¤ŠŠe¤Š¦ ++èäêÜÿ f¦ŒO¨ ++ôCi¨ŒOª ôCjªó¨B ( 8èäÂÆÖZÈòÜÂÚÒÆZÆØÞæêäÖ#1æ•ðTãà—å@žåúÛÐTãPã°à ã0—å0ƒâ6ãæÜD*ÜZÜ*^àJÜ"3ôÿÿêà ãèr3 Š+ð ++ ++B¬@BLÀÎB 6ÎOæèÂèÍùT  áRã ++àâ^ã0’Ý@SáõA` áHKáõ2@Rã$xO`Eâ0ÇÝ#ôCà ã  !%)-£èÿ·,ÇÝŠ~~ ¹«²°®&¥ñ ÒÜÌÞ$ÆìphØjdÄfÎÐÔÔêâÂZ`P¬Ë,`Ë,O?ü:1,J"äÂîø—,Í, $‡ÌäÊÊZìÂäÙ,Ç"îÖZÄÞääÞîÊÈå,—îÖZÊÚàèò"4îÖ¶p*xîÖZàÂÒk24XìÊÆèÞ:0ªB?ÜŽJ"R4^Z½-`® ++¨_ðh° ++ØBP(8H^Ê^ÿ Xüæ@Òæ@ÜÞè@Â@¤Ð@äÊÆÞäÈ@Þä@FÌ…!0½Á¨B´   bä« µ«ÀpŠå&Rã« ++·@© ++;H’ ++'P&^ã+Óð0žåSá ++ àžåøÿÿê^k0 ++àVã žå$ nánáv †å 0†å(ó; 7BâÿÿêV0ü ZáY*€XâH ++ á Šå  Šâs¶0{¢ e ð  Jâ šåTã) ++<@% ++\\aà á žT 04žålSpå`@ŸÿÿêTÁ\@ëÿÿê8„pšå•ÿÿê@R1@. HEÛÿÿê4st}t§óI ÿÿêôêð"T&Þã&0Ž0 ¬ð"º¶rt(ÜàZÊðàÂÜÈZÅ0±bÈr,°ÞæÊZÄÂæÒÆZÄfæz8aÂØØÞÆÂë!àÞè01U2ÂÈÈ3ðZæÞêäÆÊBŠ4ÜàZäÊa“ZäÊàÊÂèÊäXóBl&ÜàZÒÜæÊäè ,aÒÜÎ|ŒñàäÞàÂÎÂèÊZàÂäÒÂÐèòBZi1óêèÊZØÞÞàZÈÊàèÐB\ †aÒÜZØÒÜcðX*ÜàZîÊÒÎÐèZäÊÌÊäÊÜÆÊã20ÜàZÞàèÒÚÒôʺ¿ÞäÈÊäB4@¹¡ZÂÎÂÒÜBPqPÎÊÜÊä¦Ià;,"ÂææÒÎÜZÜÊ&àÂÚÊB;(2ÌÒÜÂØjZFÐæB;(æÊØÊÆè DèäêÆ587PäÊÎÒæ†:3:˜‚ÞìÊäÌØÞîd3²‹"¡RIñ0ÈÞZêÜæàÒØØÂĆâÜÌØÒÆèB²;&$v ZÌàZÞÌÌæÊè63 :BÒÜæào!Òܧ¢;o:,ÈÞZXÐ;4 ÒÈÊÜèÒÌòM“æÞÜB;2"Tƒð,B;6"ÈÞ €ZÂÜÂØòæÒÄð ++¸ÆàÜÂÜÞàÂææ´"ÜàZÈÒæÆZ“4A欧T ÎÜIaØÊ讳QæÂÜÒèþ£ÒÜÈÒÜÎæÀa Üì•*©ÚÊÜèæÂ"IqÚäìæ¼€æêààäÊææ¶SÆÊÈêä¨jæÄ$€ú3Vª"ŠÇÌÞäÊÒÎܾ&÷A涮ÒðZÂÜÞÜòÚÞêæZØÂÚÄȲHKˆæÆƺ.ß0ÈÒä`S1šz/dêÜäÞØØ—5¤6—^?‰6¢$·”X'5‚æ ÜàP4œQÒÌŽÌ äÊu`ZÞÜZäêC5ZàÂèÐx3GàØÂÆÔU˜èäÂà„2×!àä–+Z÷1ŒT3j0‚S}%³6v0ÞLöØÊðZÞàÊäÂTˆ(•uÉ1pÜÝ^ÀÆÞÜèÊðè†:2Úˆ35˜AÜìÊܨ1’UÃÌØÂèèÊÜZÆÂæʼP L ++0" ! ++0 ²hÖ ++ØÒæè~µ7󸚴XB`8 *´0ráÁ FÒÜìÂØÒÈ@@; @/ñt@üæ¸ ÊääÞäÌPKñ ´ ++ B(@¶ ++` `H hÓ €Ø ØÂæèZIH /ó  4 4 0û    3_ ,q ’¶ ++ؼ ++V0p H ,¢ ++~"¸Œ ++p8¼ ?2÷ ++Êð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlàà” 0” 3l2!i &ºu –Þ ++ÌØÂÎæj BÚ jF9Ç'ÜÈZ 1 Hê9*› ¼X9àB¾  ãË Œ ++å3 _Šå# +u# šåšåçÀjÎ ++îäÒèÊô‘b8¾(US Ð#Ãä@ ++ÿþÿÿÿ{bÀ0ÊÊÌìå: n…¯ÒÂìÂä. p³ ³051‘‡Ä ++ÒÜÈÊð·>Æ&ûTÅ_È*êÜ#¯G†;aÌì;FÄl&ÆW&ÈuBì ³' [;ÊÌ -y ++à: ó/à÷i÷óàšå áS-ÅSÓSpj Ììᤶ8êÌ(Î\4¢Ì\/ÐM!}"M¯ÔäÊÎ  r QÒH¬pŒ9?±Fº ¾ ÚÈR $ pèÆç5à y0ÊÊZB/W=  à2BØÞäÊbBÿÔÿÖ ++_Ÿ?ÖŸ ØâÀ`BØ  €Ä‰•@0 á ¯4pŠå~@m ++eß á  ã0ŠåÌñ P×0 ±W“å@DNPa XÕX AÁ4: á @å)Kàå?ø&$a  á‚×ñ;à‚wñ‚ 1à‚LHà‚å_ Šå ¢0‰€ Jâ šåY? š4 ±.Óÿ/GÅýáàâ^ã½ÿÿ @”ÏñP  áæõ¨.%P‚l{„‘ÒB¤86AñXæ(HÎÊÜæòÚZ|àäÊèèò‰ ¡ ð¨B0ˆB°8*ØaÏ  ++½2P€½ 2bØr Ô¯0Þàêx %f`X!ˆYýò<? [!&ÚU'ÜK…H&Þ9P•Å ++8/ ++g ÐZb ÈÊÎäÊ‘bAÒÒÒjCäÊÌ´r4z-~#‚âà1@â0ê4æøhú 0J_JLJ)à]ýP^áßžï_7*$©/ êþñHq à‘å^v µ0Žâ 0å ‘èŒ>0Žç.>ì ¿Â+b/b¡b°j56êÜÒ‰XuÈ( Fx¿)@@Ïó´8jú8ÎXúúBL'P·O2ú· QòÀ@?#Pø /STã9! ++ ++:@ á=!1„åØY„å „1 à„1à„. Wëuñ‚AÀ(˜bjÈtÂæÚtŠìL_\bfnnP lå9ê A=/lh=  €;|=O\bfjs „.üZ¨þ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`]<Ö>gyþèÂÎlü=@ º°™þ-).7w?‰þÉ7À #Ž@<ÞÓ×i€èTŽêN8ˆP@ ˆ^tÖ0bÛ! ++8* çOP.H†%! ^? p "$èÇv ¤üžå@žåâàã^á¼*ÎO@Šå4 ¬44 œ4 4 Œ44 |44 m4O0 á4 ^4 0 / 4 O4 Ø!/4 @4 ^/4 14 "b/p4 "4 ¦bL° ás&:í*¸ € à„å àšå&@àšå&ðàšåà„å0„å „å!„å%„å)p„å-°„åXà ãr ncÈ 1± _&Pq áÐ@ áÁ@ á²@! á£@1 á”ƒá áàŠå„ SàŠåt S àŠåd =)T éDº0R ++&ÂUð$ÄÐÞîèlî`ÆÞðØ`ædòZb ++m(‘D( ++ ++ j&äa 1d10 1†!0f0?‹h*2"e&Œ ++j24&~&4 ++l43$4à ++p3®2àÂÈÈÊÈZ:&:b_5(⣠++n54&5¤ ++r434¤;¥`<! ++𺠻 P ¿ :HÆØÊÂäZÇ ++>  (Í›C¿ãã“DAÕ$Žå$…$w$i$[$M$?$1$#$$$‚ ¿|9&å×É»­Ÿ‘ƒugÑ.r ++H ++ ++ ç?8 ++(''(hò8<X?ÌðÄÒè9% k* ±ß ++pB,HB` (AZÀÃó,XPJèÆuJæÌàUJÂPü ++J­3  VôJæ!UìJàOÅæJ†ÌàÂäÎb4ØÄÐ)dÂ)d)º)f®)f)¦)hš)h)’)j†)j)~)lr)l)j)n^)n)V)pJ)p)‡BJÌØäÊG81’ôÊäÞ8ø0& g#`0žåS #ˆ"Ý  8 "0J üNd ór@ æòÜèÂð—[û$ÄÈÊÐÖÊÌlÂØÚÐlòàÄZŠ² 3‹AÊðê&’ó Rîä‹  NðöJÂÆ`&>èÞà L,"$ÊðèÊÜæÒ!ä|>ûÎÊ$ÆâðÊÌÂêfÌÂfìôhÚ`Zb4?8Ë r ÆÐêÜÖ ++“"?ÿ L B$ÌÒðÊÈu`ò! 3ÉPæòÚæ¦: ++ÚÂäÖæ!ÿI^àØæÌ $eñ Šð ÚŒ'ð P– a&ÜY.*ý$Â`ìäÆÊÈÖìðîÄÜæòìZ`d4(YCý(\i ++ØÊìÊØZ *Cp0"| ¢'ÈZØÊðÒÆÂØ^ó, LŽ¤ð @6žÒÜèäÒÜæÒÆ&.%ó LæÈÞÌäÊèÒÜèlh&8è)d”&æÆÂÜZVQdÊÈZæÊè1+1%"{ZfƒZ$îƒ7êÜæƒð)3ú)5fdT(üz&zÌ@ÆT|Ú|…ÂäÎÒÜèfdTÜTT~K6Ò*yYÊÜèäò{=Ô33òÑp'ô|a"ÈÊÆØÂ1Í ++ ùOÖÒØØù0þ$DäÞÞÚz-&6Î,T¨+äÜÕЮa« ZÞyxà)`(ÈÞ L¼q@DŸ1T2ä0@æU± BDø;FmÚ%‚F L LP^5/HŸ!JlQL`¯cN¨=P‘P‘TþßRNG}ZÚÞÈêØÊCRCV–ÔEPÔTpRVãOX¡Z\^`( j(ÍbàZÎäÂàÐîbîh1dàZÈÞèDdDfEd#fÏbhçjç €çlšlšn l‹n‹Pš(íZÑPZÊðÒèÈBŸcÔÞèÞ,OÜÊðèÆprY3,ÒÌWf/Þê‡ ++ÄÆÂÆÐÊ|t"ÌZ'&sGA&ÜÊî¸4ñ:(ÎD ++ÎD!Å,'¾È +2ZßhTQ­_ÌÂØæÊí?tD/(Ô20‰0 ++"MžvRAF ++3m4%’Ë?x>¢š! e,ù ,O/äà ++zGoj ?|<6nÌg ++)$‚Ì_5NR ++‚yÔy &' ++K3 ++£ÆäÆÈŽ~Ž *?~„ îOèäêÊÅ €[ ÊÒfë 6ÌñÑ ‚r ++£Î*s~ã %i<ˆF66ó(# ++„†ˆw$K¥:©ë ° ++?hbå$A@ I j~OŠ¸>XA ´?6 ¯ ?Œ_..¦æTAô&ncÏŽ¢v© \ ++Ñ?äàTV \~‚6b|‚o5^ÒÌ# ?„΄ -"ÖH’ù50 > ˜> ”> ”> –> ”> –É 0 à?äÊÎ? ++êÜÌÒðÞŸàèäZ|ÒÚÚG ˜VT@èÂä•ÌÒðÜêÚ~(ž(š(š(œ(š(œ(Ìža ¤°¢¤¢¤¨S7¤7¤7¦Û¤Û¦¹¢¨ê_@4ª1 JA\ÈÑ .7+# ++ Jè? !0Jè¤Ì?¬§_JæÊâuÆÞÜæèÂÜèV®V°2²;l¢r´r¶¸r (ÌAQÚÂèÆЀ?ØÂê¸?º¼¾w$Æv/ZHô_JØÊÂ?À_? ++JÚ®ÄOJÒÜØÒÜ´ ¶ȶRêK-C€f.9ÌÞZ÷v&*¯CC| _Æá c~ΠȢ ЕY/ÌØ¢#^2 ØZù)6e,!ZÒIí! „§ 0]0_,*‚NOÂÈÈä¢ ++UzQr ++x"ÒÜçIW_#D ‚}Y ++ -ë_dÀ ++ OTó 'OÌk ïa$ä1»?  v&, $õ Êõ 7Ì Î*Î*Ð*Ò*Ò*Ô*Ö*Ö*Ø*Ú*Ú*Ü*Þ*Þ*à*â*â*ä*üæ*è*ê*ê*ì*î*î*ð*ò*ò*ô*ö*ö*ø*ú*ú*ü*þ*þ*A,*'***** ++* ++* ***²U@$æ£dè L£5îðúüÚÜÒÔòôþ'5ÎÐÞà‡- ++ -â-äêì--ÖØÊÌöøò  \ÕB¬*¬A%@& ¯ÆèÆÒZäàÒ¿ ++&!äàÒZæäÆB ++Š80ü$¢( $‰ &lD»' !*— 1!Ìì¶æà ++X]M)_æÊâÜÞª ++×æ+++<+OÞäÈæ¹3¾IK'‚ØS A=† ++îN^ȹ% t2у bOÚÂæÖÚ ++STÚ üì$ƒ †ZÛÆ „@ SR *— ++)+5W~¤ ++P—)Û  W ò?ÈÆØ£ ++0ØÓ ++8]Û/äÊb /42 D-N/ðèâ~'^ ƒH~“ ,"IŸVí ++ó ,º? ĂÝ./æÂú^Uï¢ 2¢1î î`%,b S¿îÊØØZÖÜÞîÜ~` .4à  ++§ƒ  ++Óõ˜ ï>YJÇ ++íBA ¿`Ò2 ‘² ÐW® ++oIX~ ++(ITÚ… +ëp£PR? .™ ++¼#R$ ¯$_˜ˆ ‚¥}& ++ ž ¢òËw‘|&"P†T(U!æt’.d f%œ;3M1"‡ J ++J Jq.îÒèÐ¥ÈP PP°0%qº îQäÊÀ0/æT+$¤?äÊèB K•1 f" ,1.B$®.ìÂö/'$ *#C&"v-Ìì?&?(T%&A(P$*P 0˜ÈÞÝ ä‚"J!è!J>:¹ ++˜ÈÞÚìØÊèeUäÊÂØ+1~kN±N $,¾ 6¾m.JÈrx.x4·0è-bp=0=2µ0¦2µ.4ó!+6Ü?8 õDõ:õ¸:¸@õ<õ ?0'<=>õ<æ>Ä:@õ/Bê Dê LŒ#1F¹j¹F¹H’#%FªHªJª Lª XŸNŸn©N©°3!Pæh=í3/RŸª3 RŸNTõVõ Xõ `ŸZ¹f¹Z¹\ŸZª\ª^ª "4 /lŸbŸ44!dæd=44444)hõjõ lõ tŸn¹b¹n¹pŸnªpªrª tª €ŸvŸçv©|Ÿxæ`=x=zŸxæzŸv|õ~õ €õ ˆŸ‚_CÇ‚¸„ž‚©„©†© ˆ© ”žŠžŸŠ©ŽžŒå·Œ<ŠåŽŒô’ô ”ô œ–¸Ð–¸˜–©˜©š© œ© ¨žƒž©¤ å <¢ å¢ž¤ô¦ô ¨ô °ª¸/ª¸¬ª©¬©Á) /°© ¼²:²©¸´åv´<¶´å¶²¸ôºô ¼ô ľ¸‘¾¸À¾©À©© Ä© ÎÆÆ©ÊÈåÙÈ<ÌÆåÊÈÌF ÎÛ?Ð  ôÖÒ¸ôÒ¸ÔÒ©Ô©Ö©Ø©èf0Ú+ImäÊèìÂØ°Ú°à¤ÜàÜ<ä<Þ(<Þ<â(5A ö âÜäãæã èã îF:êp,_ì_ î_ ò_P€P˜kL%4é-`æâêÂîÖc. àÂ~!èÊð7›òoÎdjlX ?`hrY@_X ++?`j`@ #º /ä`î^p^ b^ ++Þ/äb^r^ d^ ++ˆ^d^>ô3/l`w fw o°wfÕ/lb^ h^ 'î^h^d^ j^ ++þ^l^f^ l^ )‡O/än^h^ n^@j@ p@0”Ùæžv&ÊðèäÂ@E(N!4þu];bPÚÒ,(oœJðàoÌJÆàõö7)Jäb‹[zž #œ PÌKäÊÎìÊÆB ?JÒÇ)"(‹ p!2 J†©Q´E5(E/êÜG(GDG*GY G*GâA,Gæ' C,C0#.C]ÚÊäÎÊCh/„ I¨IIªm1àË/ ŠC1¬6C-oäÒÆèÊÈ— ++¬TÌO® ++êw®>|0°>5 B°B/ ÔB²BB B8 / (B1´B¥‡ D@ /ÈD1¶ D»ŽÈ¶Iÿ¸IH¸Iï1ºIºG ß¼GŽ¼GG1¾*G7îÂæÅ2Ì•ö XÀNœÀN/øN1Â"N ˜˜bJ1ÄJHsÄF/ VFÆFrq!/ &FÈIŠ4~!/ÖIÊI’ÊI¶I2ÌØ>ÊÊÜŒÌC —ÎC†ÎCCÐCuŽ†ÐCÒC†"/öC1ÔCO‘ˆÔE/ èEÖEŠÖEºBØê¸Z>ÌÒðØHÜHÚH…"/ ²HÜþ?“ F"/F9Þ$F‘ž"/ ++Kàî… CàC/ C6âC‹â6`Häù… GäGÆ(#æ¿… HæH\H;è(HÜèM/Mêg>† –êIü¹Ô/ Ú?3N[ † Dƒo B D)e FF/ F2F>æäÆC9·S& >D8 $ @·U' @dIBjnKFBð $ DÓ üp‰Fc_ÒÜÒæÐß ¬=/LHHÑ÷Zàå£LHØ–LJ”B£HJHHLKL'RKN±ÁN‘ê:( P±D/>/LDR±H!rØ9/ T±LTØÀLV±HVH'(. X±KXK&] Z˜'5 Ø>/êé ++Q\êÜ#ZC\~y] ^˜]6' ^~ì~`~C`~^Mb˜À7 +?/î~d~C1? n?] f˜ö8' f~ð~h~Ch~l~mj˜h\ˆ-' j=€6l€E®sŽ n ++˜h\n>¶?/ªƒ7pƒFpFer ˜h\p?r?8…7t…GtG ^ v˜;@/ò‚x ++C@/ p~Mz˜=' z~ô~|~C|~r~M~˜~>' ~~ú~€~C€~t~M‚˜9/ ™@/~„~C„~x~_†˜r?†=R€ˆ„EˆE..o Š ++˜r>ó@/DƒŒ„Fý@/®„NŽ˜g1' Ž<r‚5‚DDX€o’ ++˜b`B’>*‚”F|l/ š„–D…A/t‚˜D˜DZ€šb¾Á"/0‚œFÊ"/ ¨„žÊÄ"z‚ DÁ"Œ¢€Ì¸"~€¤€D»"}¦„f>¯"/J‚¨„F¬"„ªR¥"/€‚¬D•"j€®g”Á”"/ @°E—"P%! ²‚Ä=’"´‚E“"/ ‚¶‚å‡"/ F‚¸‚Eƒ"$ùº7s"ƒ¼|ÈEq"Õ#! ¾þ U `"/ L‚À‚EW"áÂÎI"/‚ÄDG"/n€<7q{@ÆÜ;6×› ++yz"8÷²h"/ XyʽQÇ~f"$w5ÌBL Gj"žG:Î&G~s"/üL6Ð"L Jz"FM Ò,J™†"/ ^O5Ô²Zéç H‰"/H6ÖH‰' ‹"$FF Ø"Gºç J"òJ=Ú,J(”"zOEÜJP P‘"/2Þ1Þ ý²u³ % " à´/ÊÈH ”"/âH2â"íJ –" y ^äÌì<‹"X2æëV „"{èê+»­ Ax"/„AnêäÊοl"/ ¦=ìvW¾* _" ¥0îA(® D["D1ð FXY® ÉW" &òUA?ZÚÈ~c"/*@ ôCÍ® Gh"Ô:ö&G½d" °1ø N"&B ú^å?" p%I üU¥Š/"_þ˜[ L –6"(I *FT N ;"üL .Nì’  B"G *‘ . ÈNEx/ Ú§ IA"a.G  DZ¨ ID" ™ L ++*I× V"/ ôN8 $N¯ j" â+N .K›w" ¦* é© N†"ÞN>4NÓ) •"/ ðS8"Sb# ™"ÏM ,J™¥"/ÆOì ++(ª ¢¯"¬S?>S«À" ß * ú¶ª §Ë"ÝN 6O£Ö"‹"G $P½NÖ" áA ",N P TÝ"Z%M $8Jó1 Uä"/JU?&BU I&¯¦3_ (˜0% æ"°=0* ++=yÞ" _ , ++˜R  Ñ"/ä|1. >}È"¶2' 0 …Á"FF2NFÂ" D¡ 4ØÞÞÖê௠=äÊÌGÀ"lC 6@¶" +C 8AZ}˜ ¬"G#D :FW  ¬"ž<‹D' ¨"/.& >FMÂäÒè[- ª" Ü2q @àäÊ—Y( ¥"æD5BD@ FBŠúF4D&Fkl b­"/ îL;F(Li²"/ ŒMH”Ê$ru ++µ"’3J(:à±"Ñ#G L D!¯"/ ÎIBNJh{E®"ºR PJ`ø @ª"ò ++IRJU} G©"”/F T G­" I¦"…À V$JÈÊÂÆèÒì5– èÐvÕ K©"\<~ XJÌØO ›"~=Z=V="/ ‚=\=Z=—"†=^=^=™"/ ˆ=~` ++JÌØÈÆ”"û$" b>¬—"¬dP¡¢÷ @”"}:! fù=–" šZ hJ÷ H›"•J^ j(J»öM«"Y! l•nö H®"ÜEnJ!ö C³"ÌCGpJBõ E²"o5_ r(J‡õ MÀ"ât’E¾"ü v’ ++íô ßÐ"”MHxJ ô FÓ"l& zF/ÒÜFÞ" †1Q | Jô ?Ú"â3 ~ ++Jàêæú, Ý" ˜[X €J;î Oà"Œ1‚„Gì"-&T „J¢ ‡ë"€BH†Jó Fô"±'E ˆFØŠó"/ØDAŠJc8‡ø" 2ŒC„ó"BQ Ž JÆ ?ö" Ü8X J®ò kø" ’Fþ#>#I ”*Fÿ#ÙC –$NÜF?êàÈ×o # t; ˜$JêÜÆ #K_šJìG (#ÞIœJò G)#ú nžJÆÂ"*# Ï,m  Jx;!#o.} ¢Jxz<!#Ž]¤J|;#Û0n ¦J|w#Ë ++¨eŽ‰† H#FnªJÊâ{¾Ex4! ¬U u# ® ++w#E°{=¢EÊ5A ² F? #&;S ´Jnî AœE D¶J!î B#p/G ¸h‘ N9 #’"n ºJê¾#mN¼J„  #—+^ ¾J‚ #X*^ ÀJ7 TEêBÂJÔì @#Å'S ÄJ‡ì AEE’A_ÆJZÅ"+IP È ++Jíë >4EY1G Ê ˆÉ" Úž Ì JÌæèà?Á"ýÎ?à'EÀ&P ÐJ¯u†®" JBÒJì @%EÑL_ Ô Jy  "E>@ Ö ++“ Õ* —"f;" Ø> * ‹"#  Ú>Þºz"IBÜJ*ë @E" ++Þ|.ÎÞa ++m"‡5" àð@ùD«â@.ÜÞy["P, ä•”Þ)]" †NæJ4ÛD o èJT?V"/ n@0êw =V"¹OìHJLé ]ÑDšNî0JÿèQ"jð… oå ?u"ö1ò?ç( r" JI# ô@f k" þK ø²æ¤\"®M ø=ä=Z"P! ú= `, “Dî; ü JèäŒ L" ö$o þ Jôµ@"*$o Jôµ 2" .# @µ ""Î-^e l Œ ¢Œ% Ê,]ý‹% X ++-Ät HŒ% j Œ uŒ%¨¼KÌ<J4-íŒ Kà"~% ì ð"<§x $<Æ&°p }% Ž*Ô^ ,Zj_ .j_ y_% ty_% y_ j_ y_ ‡y_% äy_% œy_ºy_% ®y_% Vy_ ÒD¶FZÐHZJq L- N‡ˆs P-†z% 6È­%ÄV{p XZ‚Ž ZB\ÿo ^-åt `\b`d-øe y% dhTjhlènîp|°W% €°W¦°W% „°W ©o °W ”°W f°W <°W ¾z °W% ü°W °W% ^°Wƒt °W ¨| °W Ju °Wf°W °W% ¬°W% H°W% °˜Ë¡ šÊ} œüž<¥ £b ïu 4‘ ¤­ "  *¨ªZ*¬v®ß°ÿ¤²<д>èt ßb ¸<ÒºÐi ¼»‘ ¾<…À(ÂizÄVÆKŽ‘ È<ás ‘% LÎ<8¢ 3’ )ÒÂ~’% Ö)’ µh Ú<ØÉ’ Þ'¦r% f¦r% ~’ ¾æZÔ_“ ê‡:„ º’ ³ î}“ ¥ò“ _“ n“ öôø¡ú2È“ ++e þ˜d% pÒ”€ ဠ-€ pk€ ás€À€*…€ Åz€ „€ €V€% 8€f€ Tf€Ò€ î€ a€ ê€% ¸€% ’€ €€% €Ð€ït€&€°€r€'€‰‚€û€ ƒ€ Ûùf:€ Ƀ€ß´€6€ €\y€ ` € € û€ 7€Ž€ £€%æ€ ¾€7€€@€ Â¥€ Z€ J€% À€ r€ 2 ++€œ €€ s€ Ê€*€ 4€ g¦€ €% € %€ (€€ ç €b€ € °€W€1€€ †€ ºi€„€ •€ ½€ *€ T€±€ F€ €Ë€’€’€ û€ €Á€G€³€á€ À€ º €  € d€ €c€“€E€ÿ€ “€ × ++€s€ w™€V€ˆ€ ï€ ÀÌ€a€ %€½€Ï€ Ò·€ Œ ++€n ++€ ߀ é€Á€ 耀€ %€ ª ++€d€ ²‚Öp±€  €¡€†€d€€ z €€€Mm=€ õ ++€‚€ œ € Œ ++€”€b€ € d€K€†` €Jynsyn| € Á€Cyn¥ynb€ Ѐ¶ €¸ ;€é€D€ Ҁ∀8^ €*€ B € Ù€æ ++€ þ€Ùì€s€ ‡€gŽp€*þ¿»ÃÆ\À ++¿oOpeo/rͪìÞå«ÃE@ÂÜÜÞ=)•!òÄ7X¤À!¢ê[mUp,Î ìÒý¬gsp&„lt‰btÎÊ1ë,Ê挸%°AnvàÂÑ<¨%/|=Ox ++ð> %/C@z=Ë ºr%/‚¸v5ÏD -D ·D í)‚r3j?îÐÞc¯ p/ÒèßÂäÆÐÒèÊÆèêäÊSv /„ç †×€/ü ++vfû3 ­†ê%ÜàSkæê¯Ü”ˆèÞàÉÉý"ÌðÈÌôèÐdâfÐppìÈ—Ã80ËFÖÊòÀivÚêèÌ[~AÉ ˆLðTæòæèÊÚT L‡+ Ûc’}˼‘& ++€â×/`{Ì’5#Æ/¤@ö LŠëÊ š& ð0€Ž’ 8ø _X , @ @RL#@@QŒ2;ú#†ˆ †å³ä $_ú^†å Ð# Ì WØö;ñ7ØéÛÌÝDr#Àô/”ô3ªü–ü?šÿUP#Âf˜fo¬) ++i=š`Ä`œ`°`` ++íÕ6P ++(ºÛ¥x²¢2ÉzÝ nî£Ü4žÜ( È~ËŠÎŒÌ@òPÊ Ü!¢$äÿ#È Ú8pÑ•…3U¨5f¸ÂºÝÈ?~‚¤¦¾ÊšÒÊ8¨Êÿ•ÌÊ>ªÂ®÷bÎÂ>¬W®Uз?°U¬0²ÔOÞDß?´à±/%Fà8´àÿ”/%@à/¶÷_P%Bà/¶UDà/ ++Uà#%HàOâ@àß¼ñ 6¸5ºç Á/%Z8¼ÿ•T/¾÷²V/¾UX/ ++U\OæHßÀç ´à8Ààÿ•à/Â÷‹à/ÂUà/ ++Uàà?êÇàÄç Û68Äÿ•0/Æ÷²2/ÆU4/ ++U8OîLœ%%Èç ´„à8È 8à _u ,à, à-@@PÌ2+ü D/ @` ïöÜÎh"h|h-?Êkÿ~²-=ÊU€©/U‚UÌ.Ò..`< ++@´ ºˆº†ºOò˜ºßκ´vº8κÿÿ ++nº/Ðkpº/ÐUrº/Utº?ÒU¯x¯Oöœ¯ßÔ¯´h¯8Ô¯ÿÿ ++`¯/Ökb¯/ÖUd¯/Uf¯/ ++U¯j¯Oú ¯ßد³/¼6?Ø "X2#Ð2ÈþP B @!&@ ãÁ ­1bXhX“(;vX ++X+g [;< _ ++,[$/(’#X’P7#’à’^’"9&^ÞE ÚM­2àHý« êŸ0 ÞæüQÈ ù†4÷â ++æÐÒÌèòäNæ‰ ++ÎbbrÀ´ ++2fh`&r& b&?d``& @dÜöÜ¸Ë ^èZV  Q ++@%O"Ì%­+=ÞM¨´8 Ê_- \- œ*s  ò8r4  Äà9 "ìøÞâøäæè  cqê¢ìhüh' ++xÆp ÿïæOîé'<ðë/ë œîñ?ðO”OªO˜O{ ð# “4)Žüø`üpBö €¢ÿ I$à™åZáA*€Xâ0 ++ö-ý ã Šâ àâàŠÅb¡[ Jâ&ù?0”z*_pŠå„|b% Jâpšå¿Þ0,_3ÿ/á¸ò?šg2 ê6òòÀPBô à öÏ ZðÆñ Àð&Pã ++Qã ++¼À ++Aâ å⟊åŠå ¢ m  €šåšåëø0@ ádñ²Bb8òô8B$ ++ˆ}õHB`8bö ++ B(؈þ èsVsNsN= ++ï©[³/0+ +å+_0šå…(§Y§²§«s"š4úªøt@ú]ü&XBuhuIÊþu‡ÿþ/ñ&-‡?|/|/|/|O˜O|/|$–|Pb |/|V|ÿ8ê,ê/ ++ê–êÿ/êQ/ê/ ++êÿÿ ñ(ê êê êê êê$˜êQd êêV êÿRêê– êÿêRêêÿÿ ñ'êêêêêêê$šêQf êêVêÿRêê–êÿêRêêÿÿ  ñ'"ê ê"ê ê"ê ê"ê$œêQh ê$êVêÿR$ê(ê–êÿ&êR&ê(êÿÿ *ñ',ê*ê,ê*ê,ê*ê,ê$žêòj èBÖ  ˆ Üà€ÒÌòZÒÌ¥PTãÊÕEm—å —±½M0 ðƒå ƒåà’å,^ã«CÛ˜ ++ p’å ’å<Œ<V áà-ÿà€å0€å Šå pŠåƒPÅhƒ÷ šå pšå0’å`EâpHk:lú à†å,à ãà†å p†å @†å0†å@”0âSã ++Ô€0”åSáWüá âRã0“@Q ++Í5úÿÿOGO64G`Eâ”,”€à†åà†âý"@ Hà†å$ˆàŠå `Šå¡H ãÜT uH}\ o á¹ ãÍ3@3+u3O@šå¹3G° Ž™m|_ Šå0ú(*õ'0+UX½ <ùö4BÄ ¸ YpY10$^Ó)r 0’å ¹% ² ++½1„å$½„å 0„å Ê“ðÿÿêD^ãH‘5‘0‘)‘æ_à€å 0‘ ‰ý‘ ˆ ÔDÔ д  +¡pšå šå¸! `ò²ü4>˜ntÌÆÂ]Äat†Âæʘ$—Šðàä\nrn4 fbd½À2*˜nB/nfB hBß<0 ˜n\nnb3 j3d.ØdQ ~Ødþ×d! L!0e(£<2< <+ 8F &QeadØ9ep4 ++H `ˆB¾ÔðƒWƒ(@7 ++ÿä?ä,_r°’å’7ÿŠå°Šå Šâp—埢p½C}šå°šÔ Ô(ÔÓ0†å †å°†å@ØTî;Y;Áĺðr  6êÜÊðàÊ°Ò@ð †ØT“qB ++kð°B8 ÍÜ Ã§/E §&? § à83^ã8T,ó3 ++0”å"Sã6 ++ Sã  ++@SãÖ ++`Sã> ++€SãifñV ++à”å 0”å0Šå 0”å0Š§9½70 ã”‚+‚Rp€å0?Ÿjd5;.03 3€3âàšå à†åàšå à ; ìŠ ó*”åpŠå @Šå ŠâÀË¢<éSÏ0 ápšå @šåµWDêÿÿêPŽ *EŽXò$—ÿÿê Sã„ ++ÀSãn ++àSãV ++ Sã@ ++Sã ++àâ^²p f ++` ++Ÿà”å0^ã o2s Fs3sdd@5ÿÿê+M' àd}àŠå ”<@&ÿÿꘉ<00 á8> ”Ö0Ö`„å 0„åÞîà/%àº8³S ++ð$ SãJ ++Sãæ ++ S㧠++Sã@ ++ Sãï ++Sã‹ ++ S¬á ++ Sã( ++&Sã® ”ª &&îÖHñÿÿê ++ Sãd@,ç $B$/$"¬þ$/q$8 žþq4K©Ó 0î  ++. í ï/9¾O·ÿÿêÈ/ìÈ|Y|F|"à”Dô9ôôo-¼@àŠå„|®/þÿê$e| Ô *î¼4?„åí€ÀØ/اX ˆ (ˆ @éýÿêP/}P"ÛýP/µP'/íP</M (<\<I@"œý@.± (h ”å°”åô-< & ; ü *1 ++ü7  7 'î7  7 ¨ ‹Ì”/á ++”¤””4”!Ðœ"7ýœ/E œ'œ@/Õ ôÌôÅLÄ"øüÄ/A ˆ*ˆ¼ Üü*± üú$ /î$  ˆψ/] L#8ˆ%ˆ/à”"–ü/É 'H/aÈÁ€"Wü€/Å€'/î€?/U€  P âà¨/Àà¨à8à°¬¸4 ,å´.$( $L„å8 0( °Î</‘<µz< L700’>00Q080’0Yt %’ô* ø"zûø/9øï D)0Š¸"hû˜+œHà= ’\*\0“ œ8»<"Hû<+<0J` << Ï D/ÕDs€lˆ4ˆ< („ ++,e ®@®$Ñx/ 4¹ø øÈ@ñ*\1à'´+ “ÑRá!à“å ô(ž(qà“oNV$€0žå&SãÃN00@(\XV(,A¨ "rú¨ /Yè@"bú`/™"Tú /Ñ '/"î G/i`@¬ÿÿêÄ10¸¦d-0ž ± ÿÿ ”åà‘ñ 0‘å ‘åŠå‘ŸPXá°”å à’å àŠå àš S yÿà‘ÌŒ^á‘w @‡:@sàšåà‚0#;‚å r°â[L€°å[á LbÀ â\L!°›šL[LìARãJ'’¼G°-°’!"<&°Œ Ü.xAà ãtš†å †å`"Âù.T ++ HHÐ')H°_;ÿ/áËؽ´ Œ(øø& àü°ÜH °L ++ØTP— BƒjB8H¹b":="V¨@à@Œ@ ˜nts6te6p£k lN7“J>˜n8/nd8 nS7<+7>!7>¦02 ­? ++7 †ÖÚÈÆØaœqPÊ`"QFÊb*Ô@77pI>!ßA0ÍAPZ± ¢8Ò Í5W„ "Ð5˜ß` Búk1$x{ÐX€H$˜nttt*?\p`˜8 p}¤ D˜n:?nnl: r ++@DÞ³ïƒ(F•8XZÊdivÒÚÚá HqX´?P>CQb8}ó(øàL&˜ntõÌ/rjú ++#j`úJE£?FM£ǧšæäÆ E£ L©o@ñ8ây„NÐÕóV– &jbœ–E›‰N›B@ L8|;zpzôHäR˜ntæÊâbh§ d§0 B›:&P5RGPð&ŠðÑ`’T"˜nt ¨ig /jfîDìZÌÈêTêo˜BVÝ‚VÝK:T8îQöXî4ØÊèÿe &jhC÷ Bô(ŠôH`ÊózfÄÞÈòôXa`®C ++%!: ++*°ÑRè\9ì r¶ /jjÔE× ++NÅ ZÎ\ÎÈ&%²È ÂVL^G‚^GXG‘Pðb†&Úìpîs &jlo»D¼'`EgÞðT¤`àÒÐÁWÌÂÆÊTÃ@â ++`TÆba++Ú™[Qêhë_ܧÿt /jnDdYfh+/ÂÁLjL‚jp ++Lpîl0ä@xÞäÊÒÎÜZË B /jpÂKÈ`œZ|ÊTÌlŽ 9+5Ò†‘HnH lú…û rÐ CgGºð!HÈn”9ûabpûTÂØØÞÆ€Z /l`û ++D´BŒ³pû(=Âi r ++Ø1ã÷Æ /lb ++ F±r ++hþtœD™àNœD lZ HBìFt¢÷CM Q¦x¢uÒÚÚÊÈÒ pQ lQ H8*v8x8o€Bz¿‚zR /X¨~{UÒÜØÒÜùO /lh{ E³ P/8¤í|í~:µ@b8GO `XÒøÌÊsh€˜œaV‚Ä*Þ–nç /lj¾ C¹a´ ØA‚ÂÎ!(ç 0„1BXOoxB†S‚†‚0PÕHˆS æ5t /llxEz|rˆr@ U*@`Š%DÎÞèÞh¹ /lnA C<d<ŠtáŒPŽ`ÒèÖ€) p”iEr c A¦æ!  ]êZóP’À¤ÌÒðÜêÚ~€.8Œ£@H”׋æ`’M§h q œâ ö ‰–¬ T˜œ (š#1ú ++¿ãñ" 8Ô& À¯¾~ž ! ÄH~œ œÒ¯ Ê@H¢öQ¢ŽIÊÌðØÏp#5Ä´€' ++8—h="kŠ <(3?ž&3 |Z¢ ++8’€¤û‚/ÈR-¯ ƒ¯xª8X4#X?¤ØS4™ñL= X9˜9!5 ©JÕìa8.ðT{ˆ Hp”Ÿ _pðÀ’øB¶ Sø 0àäÞÆ\ö2àÂÒmôÊÈÒÆÂèÊ 3‹ƒƒ3ÇP^᜗F 0Rá—_ 3§$, !tPãV#0 !§fË$%ß Mt ++ÄÄÄXÄÄÄ4£.0ÓW3&Ä /†Ä0P ƒ * —$ ‡ Ãì3Ó/> <¬(“(…ë!ÿ9 ˆ¾ˆ¹#-—®Œ0Œ“ 0‚å ‚å„ |™šUÄwYˆ0/ ,x£YZWjˆ&à hY€I”/ @<g> ++„#$# 6WXˆ$L=Ôƒ;o'ÔÕ˜½·&° <dq<`KÿÿÿÿÿÿÿÿÿÿÿÿQ ×.ÿÿÛBp6ZQìc#âÎÊä~( ÊðÂÆè~üà´«q¤+¢] L`"€M´ÄÒÎÓ +8”8Ë> ++0Îà°(¬ ++àÞäè~ ¢®ÄÒÜÂäòZQ`€ùë·¦`<`Gþ¨9X ˜¨0ª¥1–h0ª ++7”@-€P(¬À¯²èÊðèêÂØÁÀ °ºD£°ÒÜàêè³N(®¸¹¹o0°²¬¬~´Þêèf fq´f ¬|‹!È_`[a0RMr0B¶6!¬~¿º8˜„£í&ÅrÇ$050Ï "09€ /%Ëú<> €r¼<10ftAf/\n— nÃ% yK_¸.˜nDnX% /nb[0Je0¸æ1Ó 8*º”‡'ÊÚÆàŠ&8Ž$'‰¼—¸s¾n $¡PFÂB2AæÊZØ¡°iÇ! ný%ÀÇ!TÖ! z ++ÆØÚ!ÂÚ!SZÄX#/ 2‹hwp#0 ++ù0Èû&¿æt äÞÎäÂÚ\pìŸ nÙkQÊÆ©!;/nny( /nhr AiÆÎ2¸å!X^»Ðˆ8ØÊTî!dî!Èà ³PÊ؆beH jÐÔÒæ{rò ÊZîäÒèÊ ÆÎÞæ`ÆrêÌÒbäâZÊæ/»-øÌÌÚè"+ÌÈ-Ö0'[#`Îìš!'ÜèØ€ÐÈÒäÊ‹òÊp#,ÌL ž°#(΄ÐAÒAò ++ üæ @Äêè@ÎÞèaÔ‘ L(ˆ ð…è Š ,%üæ8 ü汌 HÈÞÌÚèX„F7B ++0zwR Özw- ++0÷ ÷$÷£P:mô ‚  6ÜàZÊðàÂÜÈ^ÞàèÒÚÒôÊ9Øæv&®œ0—å ƒ #' ¼ †å`Šå&0 ã$"‚gS0‚åþ@.&(&syt( ƒå/ ¢ °—åÀ—åp;  4`a:asÞ@ð °†åÀ†åp†å †å0†å8à ãS žQnÖw@p áœÞ:">Þ:€' ++ åæQª:Ô/u/ pR\[4¥Nk" pR\=@ŠùKBD0±à†å`Šå’œÂc L’_ÂcРá@ ãTãÉÞ>@ JâðvA á2CÏ .m \’Wio &C $D.mnC.  ‹ & œ¢?/@  `’iÒdà8?šåclÝv p@†å 0†å$ ++AávÕ/µáv[/%áv+¿n¿Y<ÿÿê íOœ €;#ßþC /0Šp&_+AQwx.Âþлæln4ÿ/á˜þ$.†þäwP.iþŠ,ò\òX TÊÚàèò@ÊØæÊ@^ ¡@ÐÒè@PÜÂÜÞkàx ++K@P˜lþ wR@Òä@PP– ++A@PêÜQ9@d*RP¯ ó@t@ÆØ@`@FÌ@PÚÂÖÊZÄÂÜÖR@Z|@ÆØRR@\\\R@PØÊè@PPØ"aØÞÆÂØZ– "@PWrÚÂÒÜRRR+Zæ,õ@PPPÎØT@ÎØÊTR@PæÞäèZÄÒÜÈÒÜÎæ@4Mâ"@Pí <³7ÎØTÁ5˜@#?ØR@þ"ÆØÒR"ØRô@Âè@ÆÐÂäÂÆèÊä@àÞæÒèÒÞÜ@bbd`f`@ÞÌ@Æàˆ1\ææ`°B|ï¬vò à^Ô.œJ5œJ"ôNäM"@YDpålJj”áM¾ ©¤JH„7%pšD8JN |7\w ŒT@nÈ-Ð+±Ð@tZ@t< A</<HŸ/ÿÿêœeHäMHê „@ÿÿê/©ôM/ôMŒ.=Œ¦ŒŸàxHJÜ9qœ"Èþœ/œ'"·þœ/Epw)œC.Ùœ¶œ¯L6LXs$"vþ$/I$'$<.ÕüÊüÃü^üMH6H+It0HäuÍ 0n,>€E 1 à€x/àøu„ÉD{_  á0txøu øu$Êœ.qœ¢œ›œèœE× ++èu@à”åm<À”åÔ.À¨›Ìýÿê¸ñ€bÀšå @Öhª\0Tã‚! p\I ++XU.Ñ@’åÑ€Ñ Ñ/ ’Ñ ++@¼dƒc$pŠå( Ñ ++T¢ü?Å 44TØxƒÐ$pšå( šå0šåÒ• )œÐp 4¯ýÿêü% ++d0&WÌ^ ++(1 p’i ’µ&kã‚åõìñ ˜W/0pì/± ++ì"(à¨WP0pšåâìt±'é&q_ @”å}‘ @ôÿÿê2`V j Q Í´]ô{ ø„U Œ ëL€ nüñ €@AÄ.5 DÄÄ®Ä`^”å0  ø  é´äví;ˆÜ(Ü1 `ÜÄ ¤ ^• ¬1 š¬؈”"’ü”Ùðz0T ”@ ++84a<èC#0’Uƒxð ð[H‚ •{"@¤ôçY’Y ++É jÜ.ÜRܹ)\x ΂‹’ ++TƒÒƒÒƒ¹ƒÒƒÒƒÒƒÒƒ 1àž8– +Ã\ ,(@Žâ`öÌKÌ-‹¤ >°$Ù>" 0rh(-( ‚D ++¤{TD ++máŠÑ,»(@­8wxḋ 1 0ž" =žTeôâp á0‡å ‡å ‡4!à‡ qà‡å@‡ 3à‡> (‡å8u?P8uJ@^5”åd|j°”å)à›¬=.¨2¨|/°Ð ++ ,àv øz”|Hƒ/€àHƒ/Çx  4”h.yhz0£0’ô ++a0”å p”H) ‡âì<<0¸ ++,ÜÀÜŒÜ À¸ ++Øaä*yàŒ_ìDÔÿÿêèd ð"Öúð/É0˜ ++3Sã$Œ°œ ++Ð@ f/àÅ*IÅÐ@ fö ä¼qìO)à‡åÜd'í#˜H0†åÌäwœ.œ]ÌV°"+ °" à 0”ƒ¬ 4¬ "à”L0 Y&Qã&˜0‘å0˜Ï ‹å0ƒâ ‘åí˜b8ð¢\q88¼b@Úÿÿê|Ð´ä“ ++@’å Dj 0ôQ“å 0“tbØKð ++tBù7œ €á…*”íàà(j ‚âà 1\Ðà”âj@ áàØ1 ã€ ô\|qùô ôÍPÝP\/@` jüqY`4d,f¤8žd S¸ÿÿ ++úh"@l/ àl ^sÅÌ"@lT ž¬ „*l„"@„`>j 0„ƒ„'1„0„" „"„<!@ƒ<*ù<\?šÜ ++jpq¡Ü* @’$0D KsåD\¼*<àLt"0 PÖ$˜kðs=ä Ö$H H…Hr'@¢X¼ ÈJSã?uO á `å¨Djôs)D$ #Å<@ ++ì @10TãØOžå4 Kwd"@àP@  ++\wÉpœcœ”"Úù $Ð"Oõÿÿ¨.5¨æ„tF*°$ ‘žå“å“(° oü©P¥@šå(0šå0ƒ¸5áÿÿ|*|Ú,õ­ Pžå¬à+9h /0Ž*iˆ(%9Ç(PQ ++(!ž8Œ,µ .ÉÄè<@ @* @ô4àžå‘!8ÀÀ À _‰À@ @=D Ü«Høÿê´w8@- /Öè  $ ì ì x5à€h"4œ\nÄs™°Lm/PoLsÝ4,4_“å0ƒð*”°´œ/Œ nDsU ¼ô /r$`Hn@sÍ ¤¤žÀ@˜ìk¤/ääÀükwQ!t<` á„á0m< á„/Ö„0càz ++ ù$´”ð¬&S0 ã)0&-l ncI"€@ šåtsT4 ¢) ++ @šå0@†¥&@1”ˆ $ \ aÍ„`ÔD)PH n`#à4¸@7 ++̬ € @#@ !àž²1?öÿÿ²1è?4Š€n `¹#예¬ ˆ:2!0ä ,,&0=(ø ´ n y$Èxø =("0 *Ñ$"0„gÀ#` ã0 ã €° ãp ã@S ã$Ä¢g ++À á°’."àìÐPY”垸 Qá 8Š."àà@€â”Ì 4SlC`,pŽâŽâÁ4@Áã˜10ƒà\ušå°€à`,ôDœ%!‘Tëd xxx ’ ‚àŒà°\DpŽâØt²tìt 4¥Ô T"ÀÝ+¼oàå pž ++*Í&ü"ÀÑ+* ˜ "\Xn|w%'X TÜPnÄ.àt ++˜b@ : ¤˜$ (œ+£|8?žåL°ÏðÿêÄÂÞ0RŽnàùlâÛ¤ÛÀM$ˆoR8ä ++PMBzæM&¸øs,ˆžR/%’/ S’…*È4è4&ÊcÀ#ê†&Â#Lã=hì ¦s"@ ++ÎÄ" ÒIJs)y²sæÎDq‚BæH!NS ++ìûQpÅz9îzå&!úåà)! ++øî>xR'¢æ !à+›ÀB#„_C8ð^îÝt/Y!P %1‚ea BôD?òE‰ôE! ++À`Õ70_1öø;- ++Pi)=:¥øP5š3½ëxPúÜÞ aúøüÇpþL(¬P0 Ž`P{±/m#m€£S Äqò(B  ò ÜÊðèZèÐÈϵ² ++à—åàž»//M»/@G,ß" 0" °¯*0[ãÝ[ £Ók eÁ1à—Ï"2à—c5p·°‘K+í4p»°Ç/1)’ïÈ€ÀqvÏ/ °{Ï/;à—›’›ð4E_—å 0—+ c eNß -°_' ? +“K.? s´+3 £ƒ¯ ‘À ?5yh+.? ‘?2°Ã”\b?2&/AW*¤à_(¨Càžå ÌÇ"p'7¦Á +7U{¼h ô1ô/@è ¯ .Õg8G= d dÆC" àÛ0/0”ìË /³¢€P/Õ€k/U€‹/p­R+­Rÿpšå=þÿêT‚Þ¨B‘ˆ y؈_0yYñ€(2(|ƒx[ j+|(Z3/[BÒÜJZ~ZÜ+|WÂÈÈä1[ì0[ /Z÷ l ÞÄÔÊÆè ++h•_E ``ö / ++( 7`4Œ ++hÆz ++ À… ++8ž / ++ž / ++ž HÙpû(ß ß ß5ÔJ B ++ 2 ñb8O ++æh ++ðx pI S‡!È Uª)Fá #¬| %YBx 1 ++0¡ ]"¸R°B,¦7`! )cÈHB ø€—5á„/) €Ð+uЧ‚ñ ++j"B @ êìÂä~UšT\2)@, m1b§§"@¿a 8¿h(@ùœ-0p<ÀP¢& àX¢y „¸>„¸>„¸>”=ãŠbhIN& ++(^ Ù(ÙbÈyX äV‡V¿NSTãT ++{Jc„å tjoCñ«“‚zÆ l(` ÅVb/dkŠbcSb%ƒdÓ·0LÚÂàXñ3P &–ÆZîÊØØZÖÜÞîÜ~»žŸå%àžå%@žgrb¡ 5tàÂäè>W@Xk2VPU ]P]#Ö[~1\5/Z ñA ‚ ¡‚- eã²B œAO`ñúè-YÌ(ÇSU #5  5 &¢^²^!1%à† "*7D3'Ì!l-½ ++)D1!`ƒ8Aóì4/ìÿì4#`$#ŒC+!á ++` #0šå ˜Ü1˜U ++0ôèPNà ‚*d ndPdtÀ4=" 8îÖ- Äf6* GÄTN…‘æÒÄØÒÜÎTu…*›…rž ++ÌäÊÊ2| : b$æÊÊBGáÄÞääÞîÊÈZÜÂÚÊJÝÝ$8̧b8Z ++ /g_Z õ8"`B0/ª&pø1—åb&/xÈ .mÈ øqrB.Îßd ÌÄJþ$`0‡â9 ++‰@9( (>6oi i âC´ù(A p†å!}¬å£´¶ >=ξ " >×4 ++!¬ÚPßf8 Ìðc (¬¯Qå)0œàÜÃLP»N£°P»$[á¦Õ/pM“™~a l¦7åæaS*ÌF=°“|?°í<"¬¦ ŸÒß<ÙI%0š(G× ܧç Bð9|]‘WÀ>ÌA +YÌAˆ]•WÄ>¦ÕHäݵ¡HMZ”H!È.H  H H€H/!H!HT/¡H¤*·&0Mý 6Ægä4 ð4dWXtE?x 1 ++5ØI„Àƒå Àƒåü})`Œâ0†ÀBá^ØÀ …]Ø ++¦Jùy]  ÄØœ %ÄðÀð/‘ð OÀšå¨p¡wœãÝ?žå HaŒ hl Œˆ 8ÿ:’,&ÌäÞÄQ pµ 16¯¢!£K8$ º Ç& 0Ê(}‹2(hê¯`*0 Z% Q8\G@Gµk‘(ËɈ, ++[XŒ :@o¡3.¼k R|š’@k‘P08o 2@B Ù†qD¹— ! ++€¼hµèB6 ! £!  1’ Q•ªCŠÆ<j‡  …ßyº ÷÷ _aL&ì?“O€4Î3†å®HA®Â ++¦P~ NM~ 0 ‹åb;ìýô 0 ¹ 0¦P ¹ 1 :"ªØ˜€q‡—–³d ´mÛO ’åg è*0O…;ñ¦N²= à~<Â^¬ ¬Òcgx:I© ++-ëe"úA*àê: æ%–Wª?á ++õÎ\ê%‚8·aPLˆA~× ªB3TãîâÚö ++µ2I¼¨À¼.±¼ Δ-@ƒå ƒå 6)† N,˜”f ˜ ‚L ò ÖU œc) —VÚç»H»Xþ8| ª.FY B-*Ð æÇÌܦB„9/¤þ„PÖ(À`±–žÊ:6,üü'>L^ à“å%jLqÿf?“å,XT/RþTâzSS 0”åLŒ .E.Óþ0ðÌþÿê`rÚ€204Ÿ7, ++ørqŠ6 ++° @ ¹$ P?P ' ++Hñ`<æÒÜÎØÊèÞÜ ++hp2p XàJ"lÈ10SªÞ€’`88xmðƒ@ ++ÂææÞÆXo;C08Z¨ZFpˆ>–, VÀ0@ ìÊÆèÞä ++ ++8&td0Bfg& ++0' !¢é?(28wª ++p68y* @ÈBY®%1Ð’ ++t0 á “åæ²Á„:…j!—×TÄ0@‘² Ej%0‡G 1\.cÝ\.ånðpY ¸XAVjÀT-@‚HIª ++S-—å¬Í<8QP@@àP-P@P$1àáøXT.qTÈ Q¾d4¼¯¼/0àí¼©'0X/5XO0šå‚à š/ àGœœœl/yœ+/¹œ:ôYm,m,œœœ!œ!œpÍ”âœ/ œg/‰œ3/Ñœ  l/• +/Õ ¸ÿ/é +++/) g/¥ 3/í ¸‡„–jÚ ++À%ê@Ò:ö.ãt 4 ++`]'¹z#' ++P òXDRD7ÜÞÜ.$@6!_@èòàÊR0¦. ++¦<"">""@ê/²ê*#*êY(Bb/'BL/+êb//bLJLHD8{*~@:8{‹Ί HBJ „Ù&3äÁàÁ!XY® pžå°žåÀHd.úpÕ0a†åÀ†õ2"àÛ 1| , *ìT× +Õ× à× Σ%óBH  °T úÝ î3þ3çMýN/Sî| O —å}u šÖX" 0`1 ž¾/Ý? +€+t-j0 W)0b0"N0}&bà†å‘K0•× ‰Sqt" ue?Áp Ê0 Ê01@€À Y©@% QÉùˆ€/0»÷ e< Ê!rz–„ì#Ñ/áÑfç_!"QŒµâ8 åî6Õó>Žã!¿q  …â@%ÿÿê9?¯ yâ!/Aß^ƒàÎã!«(É(¸ì`X0 ãÆT%h /I ++/¯h 20¢õ=‘ÿ=ˆpB ˜ô* %!à÷1@—!V™” ++ñTøw…ºåPR ÌÒØèÊäXC0D ++? ’‚C0š# ‹J!/ ’‚?QØHWD;Ä=OF ++H³—Ü/Q ÚHA(0`˜#¬§ %ª% • QÂJú(LU0L='Pi ¸ œ( SqÉ9à. ++Ù{$4ðZ>(>N@4P1@ L¹àN% ++P0 R:PxBZЄл3ç+R¿—V J ‡å 0‡å ŒlxlPåPY E î)ô ÑŽ&p@é™\, ? 4I6´X   TE~ 1@—•e‡er)[=. ?<e\?<. k å)à’"ß›­ ++I b)\`\ `% âÁ¹† M/rº}–y ­Ðöq ””n/=ny=ÖK0"Êì7´`XV<5 ++(7* ð \ lÌÞêÜÈ@äÊÌÊäÊÜÆÊ@èÞ@ù@ @ì.’ÀÄØÊ@ÞêèæÒÈÊ@gA¼ˆ > ' ++0ºBw ’X ++0XdºZ@kÀE¸8Á(8àé†àE𺠹ŸŒ$T o  ++V‡æ$‡H4‡‚‡H4‡H4‡î%þ' Œº Ý( Œ ;@\N#€à\Npe± ++…ž_å@Ú!&P¼× X[f!þ„ œ ++ u ã ++,~ Jï^á2Ó ¹ŠB Xaß ++„tXH‰/%Hÿp/©H4*¯´`±á áàŽâÎ ¶Ÿ¶ ш ò)m á p’ž‰D&àà¤q„Z$.pruÚ €.8bÉC H\LNPÜÄ `À¶üUðÚ4ô4LN&Äl ˹쫬6— ++ „pZ8cK8 j 0`j hò£Bx`¾ p ÄêÒØÈZ‰6½ÂÌ S')å  ö9¯ ¯ H åµ *@]8\ò-0Õ¿X¥4sR¥@=°äŠP!ô¥‰ Lðö î.P Ú^D @m?`p’¥a@!g‚g jg : ++@ˆþgV:Bä>»¦›&ñb0 ¦f4BèÅ·0 ]¾m<dÞÆæÂìÊZÌØäì~9QÌ:äÂ~<f]œ4B> ¨ê,XŒ ++!°Â ++‰‰%•ÐBh ˜ ++² BÏ(;• /0ìï)Hv°pëÎ XÛ.0½x ++àÓ# /œü ü¤ 7 ++òÁ(R’hÁ(@8‹²O€XBh8PA!€™–oj >œ–&OØÊ@Pž•@'Ì‘•_`rhpf‘•¯' Š½H½2jГWB÷O “º4Bd"À.@@ð)ð ++ `Bn  È ÂÈÈZÆÞêÚÌ^ ~Žþ5ö5žÖ3 ƒ+Lƒfv02. ¶cl ŸLòc\š<š ..ÇL/¬ZT 83ZT/¬ZT½òc Æ–(ƒ^k #rƒ,l1ò€ûÂ8’øp§ä/V§a¡¼5nßGHH˜H02HplþGp’)“/x; ;0H/; ;ð::Bp!ˆ¤½)7ÓU!¨ Árà "ÃR=Gõ £I j€6  6ðÚj ++?€jøI3Ò-¨T"Û’8 #Ý ++€Bz ! îÒèЀIDæ€ê/QÀÊ êxáºçÙž(< —ßš=°—FF–!p„" À‡OŒn‡SP³†å°†å! †å@ª! pN—†žp¾!Ž.øÿð àY@h*ÕB )@¸9”˸ ÐX‚o&0à‚o$OP3ƒå  ©!ÞN†_ á 0„86Ð1U: !0žl4L$ ½$  $ ,R]”ª¨\¡\ÎdŒ =(`Š]‰º][¶(À8¾][¶d ëQLh Rj ú]q ƒâ €•EÀ<Å" ²Œ8@ŽkŸŸ jÀ™ƒ›`"@vkNk3 0ƒÓœhÌ6 ++83„â 0 0 n)J D ++r =F &¼( ++§[¶>X<(öéOà—å(à[ì(Lð BY,01ð,ˆ:.(`¨"ô$¨(`$P ` ø@@.Ðþ\ðp×È·ž8 ¡Ô8&‘þÄ#5Ä(?`“å % p<`û¡ ÀÞü‚Dh<› .0ƒÐ$Ó¦D#p$=CŠå¦D/¾ï jüù¾ï"p,=^ªD-@þÿêZ¨ <õ>à@8Bt  ÈH Ã6–P 9` —å ƒ]?—å€#°±° Ø’‰o!0—å°€§Z˜Ø"JS^×£X†Ø°d° nØÀØŒìŒè]ÎHÀP ªwàÔ°L ªwÜ' °>mÀ‚â0Œ:"x!ŽF|!@{ÿÿê8­5þHÉ(bˆˆ)') ÖöòÁ© ++œ(‹sXHp!/ep!´(§Vœ°I ?vL L ?xO &è‰FK/ ++(1(XR R ât6Åôb1€¸£©vpx w&ÐX: ++~„J¬xg°gpYÌà‘xŠ(ò.S! ++z] tr ++hB0‹@% B/' ++0) ¢ 8@X.(|í·òefd0²†¬$`V`PB€9Ø ~¬‘aRÓK/U¥¯í¯í¯HAÖÕÖïkN, 4*'5á˜r`šåðwš,]L" ®åÉ ++h‚BÜ.~.¨K$.+! oeG‘0‘åD^ã&€V±’å5žåDSã 0‘å5³t75'¦/PV@G6Ü/­Ü ,Ã4Þð0 ã»í*"2º@r~*W%% Ð@€*<Ø ÈTÒ€T¼w ꂨ“*g@FÈaP„Xи>†Ç¸Õ·î· ++0ˆ¤ŠŒ,XR)BG^b‚Æ·$8#Þ B<8<(<ܷŸB´ p $Ü·Ó·n‡& ƒ·|‹& ƒ·«·mqwÓ·#/_T1Ù€–a“·+"pÙ‚“·6 “·0“·e“·0“·m““·!K “·Q‘“·Œ1“·ÿ1/uîÄ“·%åA“·u ,“· ++/ Šp<g {.ÅŸx“· .šþÐŒ.}þ¦€\B®õ/j( À  &~ë, âmâXÉm’å ’2/Lš@p€å 1½06i3 ¥;"" 0.YMÆ5O0‹å)P ùD9$l ‡"N7Ñb­- }R/Õ- ²8wƒš~&ÊB¬ Œò,d_¨e¤e(qŒ ++ñèp ++D]ªÉdŽU­õ§j§Uœ¥’"Q6U~T6" ­oÔÿ"&RQ¹ (<)¶ àœ.¡je´z« ÌŸ¡j†"j f" ø<&Ð.™Ð?:ØdX ‘å²Ý ++ùÝOšå–3:ob¢ ´ -% ØB Mæ³æ³/p¾³/À¾³&¶¾³"Ò®³"BƳ"¦³"ž¦³`¾³û®³"¬æ³"G޳徳Ͼ³s¾³¤@b/Zþ@’–xU£ Î| ’®Ê–þ.å6ì5  ì5/@Û þ1ÀÀº¹Ù<@$T$/Ñ$ < (@Eÿÿê^ h<ò±n˜87=E‚³0 æ±h.ÙhÙ<‚³EW¸FÚ« Ú« Å9+ @VÊ@/ɼ"Èþ¼/¼'¼ €ÀÐ.©Ð©Ûr Þ¶€%à”x ‚?º™?rtÀ,À Y pÒJ¹/0«r "¯/0 ++ ÍŒ.5ŒÞ¶ŒDŒ3Œ"!þ/ÔÔ/Õv¶)C.i4¼4µÀø"ÖýøÉÊL°ºª/p”¸.¸ )EpÀ.I Ø/p–ª*îÀ=+pÀ–ªËŒ/õ À3Œ"À t"rýtYBLö·t<.å ++ðÍðƼ°"5ý°.M ôl|+| Ú·è*½ è"0~˜pÚ·  Ú·$΀/e ¼7€&¼ü"Ôüü/Ñ ü'üD.e ÉÂ:²l|:²(:²K`:² (:²è8Ø8Ç8!”4J·„ 10”Z=%vÆ®+)à!š "@Š«T_ šåΤjÌ2«É"@àPÜûÿêÔdc 0"z• xÈ[´ñ@Ì>¥Á +5d˜ ¶l>¥.\î§S>¥© ­xø>¥:p¦‘„2àžˆX€ ”*Iü l l"l( 1 즑 ˜¾œ¼.!¼(€*!ÿ"Œ_„À ?ôrMŠ ++¢MŠ¨¼Üº#ŠR úŠ& ©ÜëÜ/%Ê/MŠo˜B’ ýv% ý.’û#Üö64â&jÀM”Ý‚”Ø$@M}×&‚×° ++û‹+!êohB–‚–`Ø%ð×&)רҌ++â#ú˜ú‚˜Ò&ÄŒ1׸ú)ô)5âÖøÁ#š'o‹#€~¹Ï6!0ÙOÈœ ~] ¥z+p`Tr_4QrŒz™zžNr ~(ïP!`o&07?X8Q ÒŽ ¤Pµ'P) PD+¹~ P9¯ÒB¢ ˆ÷OdW O»7÷OÏ2Û ÷Oø#0÷O“/ ++¤#ëO+ ëOËëO.õÿ‹ëOÏ2Õ/±Õœ‡ •þÕkO fO(O_z¢OCŠ¤JF`O@ÝU( ”î` å 0»¡SsJ0sJ  sJá6/psJW€/ sJG8?sJ =sJBsJDsJSzAsJM ÅïsJ- AsJF#0“sJSsJ?$ÊŸH?¦H8H/ ++ ¾Ë?&MZ6 ó=Y Y,i¨ h§5W§5¿ / Ÿ5 À(À›5Ï5 C58Þ ›5>) ƒ» [4 [40[4Î[4*é§?)0ƒ[47 *[4 ++À(üµü³U0rV {€­3 ++3V‚¨Ÿ@Ózw ++ª ++0v2Cú¬; ++XÕK€%Hx¨Z H oib®0Ö¿é#X à6 àf/FÌÿß÷_phrpbþßO° ÿ'y,ÿ'Y6ª¸°-59²'5¯€8 j´`2j¢`2_â´`2$ Â<`2Z2ÆpB ¸ "Z2gÌÞäÊÒÎbæŸñh ++)I.à36 aë5=/ >=/8=/)/|/E)/7u /½ ˜u‘4p šBÀwˆ:À |,)êx - 0 -ax,¡/ à,%;/í -C"õþ$/M$ `%æ)‰ä+Ø)/Á '/à$C/U -C€¨¨ @ppÀ.Àêü-d/¡R/Ù'p¸X/ü-S ü-ñ@,ü-I/aü-#`ü-`/ ü-K«L*/u Ô"ýÔ/­ Ô'PìD/A ++ü-C`ü-¡`ü-]/! ü-+/@àü-W/Í ÀŽŒ}ü- "üüÐ*1 ¼®ÀÐ* È*Ƹ. j¹"àj¹ ÂÄ:Þ´Ä\d ]”*. xx`´ô„ ++h?„åÆê ÝÍ7¿¬ “\.)\rä\\réD/a\ eü×ó;à˜à fÉ4 .Õ¤H¾ÅTT¤‚°‚°‚¬‚ß"bgQà‚ån—‚æ‚òÙ -15H3 ã9=AÜ "æ» ++=jÈ@S÷{0{ 80F•@@Šåì0Q ZÖä"à^袵ÊÖPT;0™ì1PáÒŸIQ ã á™!¸¥v1p ã„pÀžåàŒâÖÝ}`‹âà†¹¦:— ÜO8ð˜ppĆĉ$\YÑfpY’ŸPb)à†å-p,o1à†å5°/qú¿c6#„^½ ÜTÔ H@ˆ?@ùEµ¸2UI `.j{2l o „å pïÐÜ€Îɺ¥WÈaˆa-2ä.%Ên&Ên6˜î“L+èš¾–¾#õþÏ /Áþì.ìŽ}E#‡þµFHðšåö-ð 0uHº,˜h\njtàäÞÌÒØÊtuO\n`n#' b#'’¼¸C;?lrf; d;¶;O\lrd6 f1i.'1iX n1i" LIi¶½'(Ÿ5¸55<£i2š(ú'ºú'ã8uJ¾*R>tÐQp÷ h÷'¼ÏHÖŒ¾Öhã.ªã.e(©+wÀ©+€.tuFÄWdØÊèäÊÆlW jW(W HÅ­/þÿ§whØʾ­*f¿­ÄR-Y ªÆ:0ØrDÈ$4æÊâjÕ lÕTlEel6PÒ:FRlÈÁP»,ò»xÁrBÊ"|$ÒÌ{hÀ n•D‘¿ ZÊKQÂÌ”rèÎ(v« yÖ p½CGA*ÌAÎAhÀ@-b»Q ÆP¤ЭwÆ­Э…Ò$eø rE§ ?`£Ò£&èÌ2Ô|‚Ôw"¢@êØ&1§z2bw ++&r`w0wF= ++x'x(ÖxP®©¨*…Ø…p…&%2…°gT@Ú(Úì™`ß b HY áo ++Úo+)š;4ÜS‚Ü4tu>ä#%Úì†?lrru dTGU(`UÞt'àU*âUäÚ&/²‡¨ø5  u8æ0—@¿›W /rfK * æ±+°Ë%€è@W/êÙtó‚0HÒÜæèÂÜèÒÂèÊZÆÞÈÊZ%¶@!BÃ% ,9j(6ZXî à 0•³Ù[ m¦%ëY4Ðb¨èBìZ\1 )TèÚà ?,0Œz R#ÞÞŽ&%53„Ž„:„Ž„:„:„:35à„:„:„:¼4Ögl.‘\N° ++R2àèäç Þ\›#PÔt:ì8à:L0ÿ8ðÞP èÊÜèäò07†êO"H‘6`Ž£ 6kh ++.Ap™6ˆHÞH¬°¬°2ø"¹Z”S+Ø † QøHØNøE>#6ðq¨6ì ·5ò ·& ³°7ô¬°&ö­°%Œ‚ÈB(ø(– ,ÈÆØf*umòH. æòæèÊÚð0þóºÏ+ òºp˜_Àú»/ »‡ÐÈÆؽ±&Þ †%äÌìT'º´±DµJð7AZäÊàR:!üxZ$ àöYbR ++æÊâÜcjbþb ¥v£u:6Û¸*Z8/lr? /rl€N † ß ++|† ¼¢€BhÝ.te&?\nb< § ’u,4N G/lr® r1 'ÚMµ!ßDÜ?`´/8)  J£À Hn/t½*?\n` r |09 ++?h``KKIð:?ÛJ –) ++J€4Ox€4!À£ÏˆÆèÆÒ bÅ;|fü²F ®2äàÒÿ¶$ 5!Ìì¶æØ; S XÓr' ++XA QC ø4dX ++PT~_bC²3((mP ++H‰~P‚À9xªÒ2J«°Œ\[B0>ªB0Õ9H’åô/†®  @ Ö1Kß™•yñf É I ++bUkùãs ++Íw ++ ‘0Ðu0<  I‡/‡‡€» ö$¢B& ‡¸ù;DpÏ6ºâ,4Ó?àšå¡Ëc>"@PïÞX"k4 ÒI> 8œ; bH É+ “¿ƒ3Rá oïÿÿà•Ëú#àªôF!Qÿƒ1<÷ñÌ?ÚÿÿñÌÔ[bR A ++L!žd+ °" ±Á° Þ,ð/"°²tPD¸ Cd.T*.L t\ ÜVÒJH‚KKñà›åp›å 0›å ›Ò1›i Xélq 0Šå$pŠús,x¢ü!,,l¶¡ šå 0šå$pšJsòAPáŸòŽò…ò5RNö/°›ú*qú öd‚hâv& àæ*@î?!p†êêÀÆ ó ++º®%O-0&p9OJ)%š‹ZM ö, ¢D4E Í"¿•&‡&HH&Liœ:'1 TÝ"$ V,ëÞ äþò&B^ãœÆ^"HÖ^"ôÎ^" Î^"LÎ^"øÎ^"¤Æ^"PÆ^"üÆ^"¨Æ^"TÆ^_v^P¬ ++ðÈßpîð ^ã ++^ã° ++^ã\ ++^ã ++ ^ã´œ¯^ã` ++^çœ ++(4†2 I :¯g0i/àu u  uôµ*- uì Ü¢S]o %vX·Q°î&H•/ýH[/m HÃ/E ++H[/µ ++HÃ/ H[/ý HÃ/Õ H[/E HÃ/H[/HÃ/eH[/ÕHÃ/­H[/HÃ/õH[/eHÃ/=H[/­HÃ/…H[/õHÃ/ÍH[/=HÃ/H[/…HÃ/]H[/ÍHÃ/¥H[/HÃ/íH[/]HÃ/5H[/¥HÃ/}H[/íHÃ/ÅH[/5HÃ/ H[/} HÃ/U!H[/Å!H <@zš¦:íÀ($8˜æäÆÑ'é'ò(ÆôæÂbÌÆÌôÈÊÐhrfÜZfZ¡*n"*<5b50 5$$‡:/ (T' &“'ˆ/\bÜ("Ü(>?Û(/fpÚ(+C$ >YRò&„&B@ 0¯pêÜäÊÂÆÐÂ0Yö¥¸n¼CX(²³ ·d*ã *ã @9â C C/C`ð.¯* ,.Xî8.ø06Íp4èB‚®'×¼zÇþ2á Gs%÷eßRº/0Û#u÷$#!H@×#+Á×#<'$;šå“4±F¡F@@‚å ÿ¥ A#û 1àíAˆ5 •q1à¹I=àx ¼" 0í™{ m@í[!Ö}AÅ9Fˆ.ýˆŠS C1b[ àäÊØÊð#+ ++ffð*AdQCP R|+ÙSCÞcˆ‹"ëT»5"å/žãù3$¡ù3^ „å‘4/!0ý34 ¥#Õ®  ãCØíú㟘 d» m Úº3a`2 ++Àãx[,½:’4 € ØôQTãI»—ß(ó¨Wh )3Rã)Ë©ã!“ì}Žâ€"âŘÈb_à á븅ҫ(_%”‡ $,ÙMÿ± ‚á#0 Ï©< ŒH ++ ++*Ø©BÊ4Ø©V`¸`B| HsBë,:Y 0_ìY—å— Y £ˆu /Y$_ „åY ¢6 ŽÐÆþ ¿WÉÂB@ ipåX½X "‚á„ &"Só%"비"Ðó%"Oë%"̳%"`³% åXB^ãC&ì…"C&"@;&„C&"â;&"Š;&"2;&"Ú;&"‚;&"*;&"Ò;&z+&1… iT{&YM¡<Û 2Û P Gï#ß ç-ôã ÇyMx½ÙX³íÝMX¡/Xc/XË/õXc/mXË/MXc/ÅXË/¥Xc/XË/ýXc/u XË/U ++Xc/Í ++XË/­ Xc/% XË/ Xc/} XB™c%\q"‘ü!\ÝØàù` c8ƒÉZ%XM]™c@™c¼È: /¥È:O@šå¾,·,T,A,F,/ ,@4"6ü¹^.I¹^@½^8(¹‡/¹^'0¹^ t/t¬t¥­cD ì X:•]áa¤1à”±ëlPÍûÿê8ïl•¹\s—žœx0[8 Hí^<š üð`Ù¸.ѸXaXNXXCà”åÄ``Puûÿêx   `2_dƒdƒd_$ Êu?‚åÝ° éˆ A‘Ì›ø¨/y¨ŸX˜¨x¨üa9‹= 0”W;X‹o¤ oÆô +!ØñÐsÆk=1’«Ç,á™å ^ã8”¦<  ãü-„'=³P.£Aþ¡È"Ûú4/µ4'  9^4 «;u‡_  ãÅó;¡/}ˆÁhkáŠü*à à€HpfxL .M T3 "@0@™]}pƒåƒp / ‰×]‘/‚½j.üdñdèd]dJöd , ++"øù, ++*A Ì40žå ú«C Wàx¨P¨7ùm„/u„£@î„5@žirˆ}‹ºÈ@G„ ¢¬ß0ŽðŠ]¸oð:$˜bt?]?ld`MJ ´^“<8˜b8'_ 3h`f8¿v6 ˜b\l›\ ?h`hé^Z#$6b$™282 ++9!$:9êXèoî>&˜b_?lbrÛ 5P'<UFd_'>d_€$Û^ð€ŠÆàìÂØÒÈZÈBQ/OL0B+ô0 :ÜÞ@ÚÂèÆÐÒÜÎû}ŒÌÞä@ÒÜàê Kÿ @ÒÜ@àäÞÆÊææÞä+K_D ^W ++*üæI}à\K Ú ž{R ’@dLñx”(ÆèÊZÞàèÒÚÒô'¿/~ƒ–ÄÞðî?BèE?D·(B·ð ˜äÊÆÞäÈZæÊp$ÐFäèÈÜÄFKYµp(òµc ++šµbäÊÌF¯ar+¢¬2œ ¬°FJäèÈm}Ïä|H\\\¹q+!RÑ€žÒÚÚêèn(ÿZØÒæè |H Lot('¶c¢ÆÈÆJªt++²`¤zòäÆ©s+1b©2¦c`T¨ºßTL f¶q%7¶ Êc¦oâL˜b‚c?lbf& l&S BÄc&LÄc†R;k(µ€»•àN˜b}c?lbdº nº¶, A¾c*&NO_Æ%AJÆØ`oÜP"˜btclÑV ?h`p—D¸c&P•(o ++QèR4ÚÞÒK ++ r§ B¤ R¤ 8¨’¡8ZV×YYX} ++&b`ØYÃS T¶¦Ž ++ÆÞÜìTÂäÎJTÉ0’eAæêØèÖ¸YÕVVÍoìX*˜b,_/bpµ b2H²VHYX8' ++(x&Gº>Ð9] Z Qê\ p|* /bdÄFÂ\Â)‰È%O ++È…˜jÞðX‡ŠbfC@Hª^/^±.dˆ  ®—Þ` ˜bŸd?lbbt f° C{[P²F²`²@' ++8~'W¾9b-I d¿+L*f¿+ÿNf¿+l¿+ÐsS¿+K5—Ûç#+.m#+,"—¾0ÿ+.µòÆ “É…r’Þ/ ÿx,M,µZ®›7²—XXoæjÅ­m?lbjï hïEKj/hH5j\%Hï[7l ++ ++[_xBnÉÿNnÉ÷@€ÈòÜÂÚÒÆZîÒÜÈ ++0•j]!_2{CR& _ú~  eqoäpp¼<¨_ /bjä Cá/Šápá½æ@r Z€æ@ÜÞè@Â@P3¯7€tÊðèuZ³Ý¸]&g“XAfXc'rð7"tó‘ŸÌz<˜bŸ8/ld< bö ¿oÊx.˜bDMa $hb€ v: JxB Ó s9+z¹+I*|+_ˆB~+ÿN~+O8€ R ‚£Õ%HÏŸÒ†B˜b4c /ld’ ++ p0Q¬„ B1v ?hbrH„ Òd†øHb0–écWˆ ++X+ ”<˜/xñ 5ŠÑŒI ++c äØ&!b·ƒx5œîÒ¢p(%ò¢@ ++š@Ži  /’°q(+‚°c oò$¹º»(1»”–©t)5¢W5˜Ü‹£k*;2ª,šCk+? œ $J·¢o+EROž >t(IâœK¢CŸk+Or;¤6œk)UyPoþÃkÊû0PÇ…s+Y’JE¦¨Êœk)_"œR7h |²s(c²²bEt Ð!žq(iBžb7"ìïªÚÂòÄÊZæäƯ u*mÒrERæÊâ@¡q*sbQc?´ÒÌà§s*wòó ++AE¨ ++J. p}A ++1È!ªdžp*ƒÐoôÚÞÒ›q‡# ++¸pXPnp0¬°¤^p=¸^p ½Y ®dpPÀB2ªc .ÜàZj PZêÜäÞ¤w7ÞÞàqp¼Üœ,ägê™XžÍ."à—.•%Ë'æ!ËL ’å¯k'Ð ¯#ÐÔ/á#Ð[/Q#Ð 2Ž¡/l`ž/Ñ`žTX/A. `q2ÂB0£* ~£ 1$^ô}¤ 1-å0$ÄlqØH€5€)€ ++Ü¡ýÜ¡,DÔ ñ-Ðð¡P ¸ð0b²üa .÷¡ ‚Wû(÷¡,?G,×X°’åû¡·qÿ¡ pÇó é•Ô1°é•(7‘੘ î³Y³Š«º¢š¢@°B©e¢OpŠå /Ï'ÉÊvfI "½#¢b Sã:¢"$ ¢"Û÷¡"Fï¡gÕVÃé ”åž910Š*6ë’ª5_0 ãßšßšd `ÛÈ+ßš4@*Æ2k¿g•#ŒÿœZ6/ @@£/ @u+Eùp@šå™ÿÿêã£ùp1Sãyñp@Sãa®J@SãK¦J Sã  ++àâ"Knh di^ioà”å0¢J/ ß›X«š³‘Icζ;<"'ÿû–…'¢<> ”~*= óÅØ.Øß›h±Sã9 ++ SßѱSã– ++ S¿¥1SßÑ1 SßÑ1"SßÑ" ¿¥?&SßÑB? ++ SßÑNà"¯þ/e % ++5pš8óé +++ ++à· ¦@ .) ?¤$f$/‰@W?¤Å<–@ I?ë± ßÑ/š@h.‘hßÑmã£D/ @¿/¼"Úý¼/¹ßÑ/¼ã£Ð.a Ð㣠W¢ –W¢/É HˆH/ ++SÐ)C.• ++4W¢,"KýlõÃÎ W¢$ìW¢8 +++u F>SÐdŒ.! ŒSÐè"çüè/… è'è<. ðSа "ªü°/y „SÐSÐè/é SÐ3` ++SÐ0p Kp/õp'/îp;/pððPôuࡱ=Ü9Ü°Ð  ( ‹ÍœóZ óZ Í8.¹8¶Šy8+ ”ÀX’@ÆNXQX6X’XX¤ !’à. ä"qûä/]äæä@0°"`û°+¡DÙ+40¢£(„ ,"@û,'Î , 0Õ¨ ,4 Α 8.ñ8vpox5x/”5t ,Œ5@5(0.!0ºä ä¸w¢Œ ÌlÄ Kl#þlÂHÛ,êð¤8 žå| &)ˆí1ÊP´bäƒåàâ^ã"`Dp áq<0ð—åX.˜ &íÐ@r ÌoçÿÿêÈàë.°<¡<.]<‰l‚Ýüœ"÷ùP /E¼"èùü/üƒ/ü`6RÒÇŽB²{v&°ñ:²³—VšÒ ' ++(7ű ¢°ˆÒ LW¼ "O˜$Ä×Ôx¤’)€µ6SR°‰Aø-Õš-Õ#%jV8¤ -Õ&:… ++-Õ/´¶‚´¶§<-Õ &%ÚVÔ +++i 7 /¶‚¶VÔ&1Z×VÔ5VÔ/¸ú‚¸VÔ.;:ú)bú(?ÿ#„ChþoC`¦_€Bº‚ºÈÉjX¨ ++PPb8GŠ¿PPÒø'!ˆ-`_Ê M(V:4!(Œ2¼Õ@ú9l;¾‚¾ãmPÀ ++HU'^qÂî`@B¨³` ÂÜÂØòôÊß&¬oú @€Xâ8¢ Ô–0‡å ‡å Ô µ lR¢ '0BÌ ÜS.­ªF̲¸n Ä°Ä •È=º Ì°op5 IO ++y a  ++×QËQ @ ! ’ : y RÝ Ý R)h/h&hÕ Õ   “å Rã @Rãú…@Rãòe!@Rãê›j@Rã~ u‘ÀRãm ++ ++ RãeÁ@Rã]Ú@RãÁ™!@Rã)‘!@Rãï’@Rã8@RãðRð` RãÇ@Rãõù0Rã[¶P RãìÙ!1R㢷jR]g ++ RãI AA ++. “¯S3 à“Ý“ [[V0˜± ± ¿ e [¡!‚(GUcÿ  ++åxa 0É–'0Š£ º%G%\9 “ U3ÐÂU© T½ ‚ââM—V XT ïT0/TÁTá B”aú ¥/1 #AÙQ)“¿ø"àÃu $¢(Ä™h$@;x˜S° á_`Ù@ ‚àÛ2 —Û'Þ™àiÛ'  €îp·Wë'!°šw]ž Žà‹àÛ_u ++ œÛ€œ/Bï´+/å´œ´•´´|´Y¼ i!/UàdàbŠå°rš¼4@CŽà ¼"p“)¸ ìwwþšlµu(Rà áÀ(.°,"°6/bàŠå Àôºx Ÿð9$xå'°R/àšå Àšåÿ[íp‡à ‡àà‹àŽ@ @0XH ¹˜HJHk`,/E `q`j`Ç`´4% “`Fú&pç š/¬ï ÑÃpç 0TG,-„¡" /I ++ôwôDŠåôÅ1žÞ›Ñî kü± ++Àè@5ŽÐ8 ðJú ++8E8¬&ž ¨Pšå*ž¨¢|Y P  Jâà‚â Žàüêž ¼÷iü" >¡£Úç^yy8€„è/€å< U+/î(~@,/… @9@2@p@]t„À“å€âL"ÀÀ X/ Ä?ÄL°L Àxë`Œâ  ál#0p/°Š„/} „„"0px0p‹â<OàŽâ< <<Fä,/iää‰ä£äÔ Ô }ÜœQ$ŒPPüÿêtª4ØvØKSŠå˜10—  &ÿd»·QS‡å‡.ÿ_‡åš ++f¸u”SF |h„@“妢/à| "üæ•|D1,ƒàTO áÐ "¼ï Ðx èÅx xx¯€ èÅM„ Ä }°,/°]°V°=°* "©û /}pp Ap -ü¬™‰2 ++œ À Ù ôïÙ $ X& H0 P.P,  ,  ¦‡/ „ñ èt  / à$ ÕÔ L?0ƒâ€ l *-X"  €ù €/"îÔ+/ÔTÔMñ!î$ ++ —å —å ,c: ðÅ}*07™üÐèÐ èè Ôr “å “ a°“å)à›é5D0"°D¤ °Dâ*ü dNT.UTlNˆ -/0¨/Õ`"¥`" ÜÉ 4h ðžåPãˆ@ ã¬Ö¸0à„áwnÀhTá$ªU„`€Ê@ ãÒ©¬üÉ(8="ü÷i"((8”ÉA.„âÄd+Kd ²ªhZõºªhñ( šå—å‘åà,*«^èÐ,šå€àQãä`—åQÚÐØ /  "ðÙ XL „âHDË  ôæ• x‘(/„â  ˜ ˜ q) ’å ’´€ 0 Bâ$Ðd÷@)åÁæ¸0( "8æ•.0ÐT{000p á Èl„RkKsASæ¨x!' ++ -'&EJ±4 G"0èöB/íöÏ/êöèö Iö†¸KjÄhº @(ê*2ì T>?î¤ ÿÿî¤ î¤ î/8O@0€ ð€ I..@@œ ++mG   ++,ˆ ( 8„ !U„#€ =4@4î4 Ü ðÜ UÜ P¸ÒÆ ’ö  ++°òï-qÕq ++à—{ô±Õ?}±Õ7,@žåÃôÓ2—ýÖ;L! —2„_—2& RB‹ /åà Dà /à ++–Eüaà–c/„âƒ.!7*•g(“'ã)ƒ2FKתCAšÿÿêà0à àà%ž“¬Ø "•¯Aw°Ï43 §.Ó4 ŽD<Ç¿+ &%') 'Ë4 Ë4+…‡)Ë4Ë0Ï4[ôÝXÏ4Ë03,K9POPÓ4g9K.ÍK.Óþ›QÌþÿê>ü¹ŸMoô  Hz "£Qdz ¦;–9Ë•Š 0Њ አÿ!Š ‰ˆ‚ËË¿Rô˜êô‹ B+‹ ö‹  $ ø(ˆ8‹ @w$ áG1 0žÌS;pž ž¿‡64 }¿˜^/€à˜^/àä/ à—D /‚c7Œ ++`óJ_BøW¨k ` RöOvú'ÿÿ/ú'ú'ú'. r'² üò² ¯ º .0º /0òm²  ÃW03 º ìò^º ò _VÁÃòRª¾ kUòüò 2wS²öú v`Böxg8g þgÿÿþgþgþµ[%ó ûÍg2™Íg4ˆHÌð^¢Bx ! Ì@Ì / ÿ>)jæqgrĸƒXƒÎuh" ˜ƒ&Œë„,Hs ++Ÿ&m»&»& W.éô‡8  Îu üàl-o0åå ]‹ ]/…u“6h qhkhD `DZDODIDíº ˆ%|3‘ oÚ¦b —å07Sp’åC67´P{,“=!àhK"0Rxã hd*ÕÛbp á0Nx @Ì•gQég”r3 „ñ „Gh1 'Ø0Ü.0dm¶Ç ¸e‹<S"8C% O2 ++8Ï<. V±,@J±,0, ïÉ ++,$ X *å$½³# âÇÈ/þ .10|ˆ.uþ³3Lêª\p u؉z‰zZQ /ÉQ/Ã…&·‰z"ã¹v" Ñv"ž™z"ˆ™z?™z/–™z€™z- ™zh!™™z)– – ™z˜Azå ˆ™z+ª ™zX LU™z™z"ß™z"É™z"±™z"›™z&]™z…™zŒ)h}díd"/ÿ 9eiz"àã² ð˜""ÿ!t™5”¿· ™e‹² Ø.-Øe(XH"  ++. (Ht¡té9 BSãrõz14ízåzÆÀ\"˜þÉgÁåz"@Œ < 8@Šþÿê1ùxZ% q X…Izåz!$O$/å$ <@|Y/!<áw À@2þÿêÌ?/Yåz/áwÀ*íÌåz` ey„ "ßý„/¥„"Ñý„/Ýey)„C/q DiuÜ"“ýÜ/Õ Ü'Ü<aõyÙw $ V$É]zÙw Ùw\.9 ‚/ 8%Ùw Ùw(€.á €Ùwp "÷üp/E p'/îp;/Ñ pÙwÿ%$Ùw(.aØÙw]8. 8ÙwžÙwqÙwkÙwZÙw€ à’å0’å€ì*ภ"ü¸ ¹ßÃÔšX @¸@ ++ÈZ*ù¬Te¨ý¸0t$»Â054"êû4/yu.A= Íáw!!ša&H/Qˆºˆ.‘ˆbÀ[)x(ÄôL .!¨)xU0Áíz)x\'ÆÏÄ x,ËÄ+qx-@Š¸J¸ ð ++/ šU}+Ý$CÝ8NÃßm@8 \[M?Ã/ @*î& @P/0 ¯<ýƒÄ)x¸§ %” Ì˜Ì  ¡KÃ1@Š_ ã™˜*åt*@‘/d\+) WœšE+?Â!@š˜ßÁS à‘å&J¨VX" •xÔV ™p Ü1 @”•+äŽXP 䉃 P[šå¤ Cúº”–ï ¤åˆ(8f/ @*­Äp ßÁa.HPAÈ·l©„ .¥D ++ 1"b‰:0‰•(wÂ,*üm`šå@ÁáT4 +]°`” S&Vã*40qà á `ž4ž4` Íp4`40ž0/0"wù0+E0Ü/0žQ~Q~/`0.Ý€0 ppPD.ED8D1q~Ôž"úøp/9Ô"íøÔ.m Ôm/Ô_/uÔ'zÍ~_(Bêx ++êxX%êx/Í~$BÂÍ~p äÊjæŽR¯ZÄÞÈòß~ÀfBh±&€Y%OCr™)qPB¤@s ZsÈñ~/ñ~#%"hñ~ò/ñ~~ &%úcC}&)Ú#C}/ ++,‚ ++C}/×C}(3ºQC}/ ‚ C} =*ÂC}&ÖÁá%D}ß4‰,2¤eF%G:FP}/%‚fP} Kš%P} È. HB  Á*Í"STã ôì&f–ƒñ"—5 ++™ ++5 ++ å/y¡ ++üìE"+Å ++05 ++S5 ++PG ++5 ++!0ž5 ++5 ++0²%5µ"5 ++05 ++Tb“ L.Œ"šsî‹@Î$/Áö‹xÎ%o „å 0Uö,í/ @.9t¦C5 }I#ú-jY ++cÂ$ªÐÂæÐ)ÉCÆÞàò»-¨ B ਨ>SLiLë #ìYeê LÚò¨B°8‚`  HÝ&( ++hô§Š X ëC'X4¾F8BØ D<8=ð ++pM&Uä^¨B ÃåqéHC0÷÷÷z÷8÷ [JÜh êñX.‡ê_° °&a°P B;3À±‘¹r z nzhz ¥*O‰à¾-Q²_W\ +ý ¢_H/@fA_¢Oà áÊC*0à6XʆI¥ÝI¥±f ª‘Ö‰v™x/Uxèç"1_ : ¨´&P À ++€ÏVÒì '¤ò  €âÙâzÙ g²âÙ(iJâ)%kÒâ ˜%m¢è)0sæ /uæ &wœDJù`! nˆ °YÎή<¾ή¤ “ %€=‘Ásš"˜38(íSâ"`Yz"EQxcQ$ø`Ü5)ôÓHèäêÜÆÂèÊ­ƒ@ ++ÊðÂÆè'dhB48 HTGÐ(i¯³âêÊäòZîÊÒÎÐ7•([ÂÄ #94( ++(øPb8y ++ˆ6ˆ8Y9b.$9ÿÿ!$9/$9$$9{)^óAi& VV8‰'®Q¬=œü ‰üBE/põOpšåÈÎ8jK|Þ& ”O.’G](ÿÿ(((/…¢*O<+½U¹U}Oq÷ ñ<'E~;ÄrHÀo"* Ëh&‹b³S0x%Q0˜½cõ<,Q z >TW8°c$PQ%D@°câBoáÙU Ãv ¥Ï Ü[°eÑÓ]Óz °eU˜Ü[IÒ,— ++ýP%“rî01P`$!rÿ>sYz°°I&ö d ++MÈN%]Ò”%0™5” ™%eJ<Ø)r» YÊ.‡ ++ƒ)Fƒø ++SZ0¿”' 2Z ++`Éö0þ@P„XoÊ؆s»>š¥ Bº2 - ++0Ï Ï$Ïw äÞÎäÂÚÈ0hB¹”1x "Êœ»dÒÚÒè¾6BQ—å@ž¡å#ÐTã P0Žâ Šy.Ì0.Ì  .Ìê) A ++ ++ ++ÁÊ.0ß–ÏaÌÒðÜêÚ}ÏàØ ++4æòÚÄÞØZÙjÕ`(6ÚÂÖÊZî°@ ++ ++ÿþÿÿ$ý¿ ++Qÿÿø”S8 ++4B1622 ++àhB> "H 8Üà+à’ÞæÊZÂØØÞÆVâvàÞÒÜèÊäz"B•L> ãj"6O{Qƒåc#ƒåG—åC¯€.&ïHïÀ°šëC á!I1#à—G$1'à—K) +àQŠå/à—OŽ 3à¶KŠå7—å;°—å?À|0|L:^ï["ÙGŽìò àšåà†å†å!°†å%À†å)èW¼@” ””C”;”ÝIƒ}â?—å°—åÀ—åGp 8 @Õ:˜ œ }óà†å!†å%°†å)À†å-p†å1‰S5à†åh°"æ¹S@^㯮š¡R°’å p»u ŽŸ%`€å 0ç ‡^ß!aƒ^/0¿@ °KX¿Ô¡àB8/@+¿ e¿k|ð/ ý•ß; ++ C$QÁ!‡;4˜ òó÷ë|¼TÃ4Aò<âp<(˜bhtÚäÊÌt¨"O\bdd²Ø dŽßpE´:Gàh<QÞ dßÀ>8˜bh5¢Ö /dd}êª*ÒKê Ÿ6:bÕXÕvbðbWÒxdðd`Õv`Õø< XB4 `2eâ¾}ÀUüBB’Jò ¦¾!À’ß2 Ž#3Ü Ü æï%Ž ++,Rå0§ÕKàåèæ Šða°‚å ‚81à‚d¡à‚åÀ‚åG'ãäðæ6Ôó6µuµ«”! `P"Bk¦€Ø æîÂàè ) ×ëï—DÖG0 ‚â§õ £õe©4tÖ= Œ á0 D ++B® tÞ„ h2  ++HÏBÏ:”ß×D—å× ]Qâ9pšå˜yƒ+D;M*†wD Nî{ {Ƙ¿{óªBP ¨Ú ¨ÂÒØ! KLëñ\^ã ++œ^ãù ++Ü^ãã ++G^ãË ++W߾à ++g^ã! ++w^B’4&wïe4D%uý1D›³©Ÿ %Ÿ" ¢3߯Ó¯²Fž+Yk¦;g ~+¦;_åÀuýR,A,/Q,D 0f¶E‰ÆF" â,1’ 4Yþ /½â,'Wdr@l.Q®l§67È/GïÂ<p/Üàp ¨ œDl5l$lè .¹h¨\¨.IËøá°FEÈBˆãphtÎÞèÞttO\bdláì dõ€@?:%à dÂã'>w ++ ++@u ++@u ++Þë³tôdßë'Bßë;z.Kè’öT qˆâ ŠÌÌÊÆè‰1¶^›L¦^ã ++Xäk@ ++˜$Pð ++Ø^ã ++F^ãî ++V^ãÒ ++f^㸠++v^㢠++†^àSA ++–^ßHðÆ^ãl ++Ö^ãf ++æ^ã ++ö^㺽$Íž^áÝÙ ++&à@u ï9Xl,Xl˜lAìØ€,Ø€/X,l =(5§CO’å+Í`И< d .]d ¥ —¨øp‘"ÿ÷¤Ád- 4 ) /õ) 'ö) (./…Ä?q¸(U(B(p ++/õ4 H<¼/K+1<<9 ¨Ç0¨Ç5 %æ5 /ý x¤hN .Ï<»P–a #Hâe †Xe PvP!f`N’åd‹IVdD„åhÓ È"FÈH y, n nX÷­z`’å 0’寯–š/K'š&E'šÿà–åH^ã3 –å –å– ¾!†ß< ++˜§¯/ì˜'æ˜À “å<àâ ^ã¹üt0^ã§>°PRã_ ++RÌY|¹ “å p“å“Œ·^!Èdz^¬¾°X'Pାp¼p H*¦ï7V ´ ËïÜY/0+ 0|¸ÿ®M=/ ˆ2ˆ/à”u/” $¿˜ 0 (Ç,šåœô Çxñdx³ì¬ôX 6Ó”*á Ü`. âœÛœ(}d9œµœ à/ÓþØäÀ&Îþì˜aí'H´’å ’å 0žå  qóC0 , g$­ L׫ ߔٗMTç”L¨5S·5 % “)—å-°—å1(ÐW§:ð& 0ìâ†å°†å †å!ÀÐ ôP ôPè‚ ++°â[ !Ë PË ¬1Œ^Huß à’åNá á°Îã-ÌrotŒ¤.°H]ƒD°ƒD$Oà P?P m á)°—d1¨¶H$°plÜ"°95l@<"9&°äÙ / ° ð_<ÿ/áȺªœOŠÿÿê $R( /%( ( @ùþÿêI C¿(ž b@à  óÄ1à—È Óü —å!0—åØ?Q‡˜, `gà:°ª,"ÒWG& LaØÅä /Tà€ Ø!0ç¤!Ì!g)p ++ àx$$P-@ @R@!.=°—Ô.WÔ#kIä€0Fàà9T/Pà`0H¿?^Ü"#à G¥D! 0/0&¨&^° á À(çœ b †å À¼ ,Ô8'öï%8Á8 ÀDÔ«DæP  # à8^ á °’ °ä&.°Ð~<©p.À@iH À¼p¸U¸ lgB8  {“08/¬ 0p88 p ÝÊH ·|¤Œ%({.gÿ´%N8<%x(œ .Àþ(³(.¢þ`\4<'"þ =+ßU¼)9’Ô poJ,ÅÐ;¹…6À¶Àp«\ï.Y/Äÿô7/¹ô/MôÀˆ¢ºF$ú‚htØÂÄÊØthO\bdjG j(RHDW(<¢ú /dlƒ B…D…ºˆF9ýµruðJ(ÓMˆ /þ'H•G”J” °EêL.M=Põ) p—JšššL.€EìN4P˜ÆÐÊÆÖZØÒìSl rM š"äÊÎT¦N¦\ÚMS^CxBw7’HEèRÿ8èÂÒLì* /f`ÿ GÅj`èØÃRÃ4w ÒT ++(ÿMª@æV&o7æÊân &fbµ£ýF•ý'P•ý)F•ý,V½%"½ð€BX È  äÊÈZ|_'ðT^ã6 ++”^ã0 ++Ô·zð ++E^ãÐ ++U^ã4K¯e^ãm ++uSE+ ùc ã%6ÖÚ.ÉN>gì-æ02áäI 0zè gE(J5_¶/uïõ7 n Ì÷%éc'ùcêeêß(-/¥ß(R¶/Ù¶'Uß( r ++5/Yr ++//Tàr ++;/ír ++>PÊð&%B;UTZkÏv&X6MZNTIƒXG`—3ˆ ++ÓO\bdf #fd@ Rb\Á(:/d`: fÁ(@< \63 µ637êô&^.3zvàT23`XÞ;ü;SêXA=0`GyWd÷)Ø ++ f½)b‰)Em d‰)S€BÔ^ „Gf" \ ++ j¡\ DZ zhàb^ f^ S% âSXpÃpj %ÒÌ~Ò &flÂ+ C]5h„à`+h+j¾àd+jÒnK&¢%²(Eþlä ++UÌÂØæʃŸ &fnÆ%F+šl+1j …Rün­6èäê>h p„Eƒnƒ0JH®MX~ Øú ++ªM eªMìðbB¬  Ð ¨äÒìZ|¸ Q •QQp0’å<àâ:#9wT.T(oQ.$>>%!/Hà>%| | $L!v L˜ ŒX ŒXTÌSãP c0Ìc0æ7!(Ô1,J¤_iÒèpã?|À^T “ˆGtápÒèÊäÂØt¿'¡ r¡Svrb1:/bp: ++/h`b1@¡rݶÜ*ÜtÜ@pÞxI•ÒÚÚÊÈÒÂèÊP= h,vIJvvšxš¥xGz.ÅZÄ<Pf dšjJpd«ìkz¦H¥2"äÒKM/0’2|e*SGâ~ÞSV< b¸‚< VÒÜØÒÜ /hf£GÎ ++'h P¼àGàäÒÚ>*€ª‚| sb8ò&Z*x—sò†$3 PÕ h–ÕEÓ&„Ó•Ï>ZȆr ¢%¢#FäðY0ˆ,}fàÂäÒÂÐ/hrÆ jÆüIøˆq¬ ôRäŠ ++7ÜÞàC" lŒF‰Š‰ÀŒhEâŽ2=—æÐÒÌèZÂäÎC¶ /hnÛLâŒâvâ*⎪°`EàFl€äÊæèÞäÊZˆGwØZæÂìÊæv× hPV­¢`EÞ’8\—ÚÞìÊZÌäÂÚhÀ h^O ++¤’QbEÜ”—äàZÐÊÂÈÊäR› /j`Lj w–ÚäìØÉgZÌæp z\ØàÚ”„xEÚ˜k3èêä›I~á jI0kO? ++ xšäàØŠ–ÂL ++ÆÜÌìs*טsžRØœž=ÜÊîð‡ /jdžLaˆfäàØTÒš•œ•ôpÖžPuQÌÆÂØØ™a‘ÞìÊäÌØÞîZ%„f‘ /jf[žlpÔ >TJ-ÞÈK« /jh¦R  LwÒ¢° í.Ôv+—A´¨ &oo9 Ò ++Ò·_ÜèÊð轂 3•ð @*P&ÜÂÜÞàÂææZäÊÆÞäÈZèÂÎØéÚ ÚÜ> L‘P LŒ+ ++"(8bÒÜÆZÆÆ^/Êä,1Ö)Ø®q L. "Tf äÊÌÊÂà<„#ÜŽXîÐÞ1Z(ÿj 6/ò?\,C®Y\_ ++äÊÌÍ[R t~7H´N„- 2dfMÚܹÞ!_ZÐÊØàm"i*"Z|Œ hn:F jF  &n#Z| L lLA²üaû?¤ì_ Òäc7¦ @`à¡}`âˆVÿw‘ú   0¶ ;!@Ã~C!¤, ²QÆ bræþ)ð‚ æ @è«ÖXOO)ÿ7ê&0VÞ%Hha€ö Â?1î&ÙSÆÞÜÈÒ/ÈÊâ jâ uìÜt¶äÊìÊäæÊÈ~|ÚÒÜìÊäèÒÄØÊ~îÉ 9¨ ++ÆÂääòp pð €ò@ôXõp_hO]`…P…H…x…psr550Áo`â ++P(èè?ö=E/ ++(]` @`O47ø,/!R&Œ$ /llž&I{!AÊ0|! øD ++/¦XV@Bú€üâs Ûu05@#É€QMŠþY`(à.ÒÆú '˜%ì ÊØæÊZèÐÛÆ"jãY ++0—óW2/WÛo52 ërÚ $$ç!vj +#1“D0†å!¤t`¤tŠj*!œt.0/7J. `¿Õ=+T …àg‡PØëß@Ø*ÛØ.OÍ?m!@ƒ“?m $¿÷R0; {&¯kt_ ƒå¡÷R{:˜ {&à¿ u}'x§±{kHT? AB8A? wÃÇ t¾Á @/éx¾|» §ZASa ܸ¥ãŽ.ÿpPX@J(:(,rn/æþ@×È@+í@<ÚdÊd0¤¼L³Çq®d ,ž" OTd dO—åhw“ýÔ‚fÿWÄ IBYh #ÏP@£ÏP h& 4…l `/U8…+/öïé: Ê·¼  “Ä Pi[KP=H.ÇXy“  Ô.–ýœpýÿê‚rV‹1 è› 8?Œƒ ++ðª ÇHèÆÜè@A8 µèF° ² ++Gp9˜› þ Bþqš  2c€Y(åW0¼?x°ˆ°PÅ ¥&î+S'š¢A°˜/h 40BU—8&Ib—8ÀO˜ ++¬Š0O/2? ++ ÿo ++Îbd`­5 Clnñ Þ/ ºZÀàëX¬¬B:Æ?pxv]Pq^q ++“h;‹^X( L± ¬Ê2±e0äX}`’3â€sâ2¡WPBI5u/I59ü²? mÊŠ3NG/ºvº.q²ŸJfEÆŸJ„t|< lÌ7/ŸJDŸJjèØ J%È:óKCâPü3&€B0A ++¦JeEÄ ¦J…Î rÉ ¦JC,A&ö0ÎÕdû, £J% ºÕ@RÂ$ WbÂæÚZÆZû<„n< /n`M9*"”$¿H\?tÀ&0` ++^j&8 &nb«X?KT?)"T?&&T?‚hE¾(6CÔUwjÔ: /ndAEE UNY>?(?(xŠ6sE¼*¯5êÚàjÀ /nf¯ E¯(¨klìÂä¯*¯›ôª­l—R0=Ø%Œt0Œ¹9B #nhk:R²,ÀF Db9 /njv:J:!,,#{@Ó }@§  ÚÂðZÌì '.€@`¢ èØ9¨ @,0&X*2§Žä€ï ï ÊD4kGÊ`2‡PG$:JH#ætûá= nS>R<6‰=bÜD /nnÇ CÀ6ì$¾Ç^ö8±Â,†_P<çŽCzçŽ_:>çŽXìrB>0ìçŽ*D(àƒÒðB¨ \5À (e&#ÐóÈÛ"Q¥†&°õ:"G4 ++»à› h*?·à›j: ++±7.üjÖï­7ª61‡à›y1‹à› h1à›mn1“à›y1—à›y8yÀ›à›å(àŠåŸà›å + +ñ£à›å4àŠå§›å«›å¯À›å³@›î@¬"¿m5‡!.Áà]5µn‡å81à‡-9Qà‡å(¡@‡å,à ++ó‡å0àšå%à‡å4àšå)à‡å-‡å1‡å5À‡å9@‡åpákØoØsØwØŸØ{؋ؗدØþà›å8àŠåƒ›å»›å³ÀÜSƒ:d± mŽ mŽ¹9:=(uŽÔ†Ô†Ôó†å8àšå-à†å1†å5†å9À†ØI=Œ-=‹›Ž/MU 0"`„)ÄÍ7(  À@\2#À6ûÍmy>Œ/îa.v‚Y.¬#° o0wO© * -p"°Š" 0w&@Ì[ì_ììcì{ìgì‹ì$<ôCà›å@DìHìŸ @§:ì±<$(,048<@DóHàšå1à†å5†å9†å=À†åx& `øƒð_ÜŸðoðW»›å£ÈYspȹ=(È,È0È4È#I’À<˜@W˜wkƒ€_€‹€Ÿ€o€ ¸“=¸(¸,¸0¸4¸8¸<€@€D€H€¦-†å1†å5À “S(`ŠåOØSÐWÐÐ[ÐcÐ{ЃPèLèPlà,à0à4à8à<à@àDàHàLàPp&@õ“Õ±9À;Uc¸˜Éí“!à›c1 à›uæ9à›uæ10€€1à€¤1à€8ñ#à€åà›å'à€å+p€åà›å/à€åà›å3à€<17à€T1;à€\±?à€åà›åCà€,1Gà€lðKà€å#à›åOà€åS@€å'à›åWXaà›å[à€(ñ_à€å/à›åcà€å3à›ågà€øñ kà€å7à›åoà€å;à›åsà€å?à›åwà€àñ{à€åCà›åà€åGà›åƒà€È@‡à€åd±‹à€åKà›åà€è1“à€ 1—à€l1›à€`1Ÿà€d1£à€Ü1§à€$1«à€(1¯à€œ±³à€å³à›å·à€8/À¬¸ ˆÂ© ++¬¸AèÀ=•Rv=•Àb!Š =• Ø¡/m )•7J"§î0Y !4.ùþ54¼‰.Rþ. þ­4.þý<.ñý(¬(.vý­>.:ýx. ++ý ýÑ5Eïüÿê<Óc Aµ{4.¹ü†.²üÏd|ª+:_öŒU@5 ++ZDP+<`/Ì`Ò²@¬òB DÈÞÂäÎÊää +> ¸DLÈww T7h ++N¸Nº‚*)3° @3/ 3uKd0^F 0 1dŽ0.FJ!00ÈÞÌeT2,.dnk‹1/dpF †,"Z|J r ++ Z|F ++.f`F2&bL$^ÂäÎÒÜ4 &³/Üæ&LJNRLV"$Nús@HL^ÖS Z%H?NaE4JE=äÊèDJD "5USJÅ…L LHN|BP;Tf‰Ì11R,T:ã5aØÒæèTZàNOÈêäÊE"^EV¾6×6+T¢ÖHèòàÊóSX€¬ÈÞZŠ"0Ò7ÊÎ6=ÔæX@°ÂäÎZÞàÜÈ'Z2,\FT+Ö˜Ó4² Ï4’¦f,ÉS š›/bn\ p\rJ`"C>lV ^D`¿(bd ++QœÆg_x7-9h)/)/ RRÚRêR „àÌn÷Vô`9 #p`¤r˜jA</bn, /pb B¢hšV ++¹­ :l§Úg‰ H @† ÓÛ–q ¯ ++3b¨£Ž p ®g¾xH0 #¢*±à„å„å „é1à„«ðâ.@à—å'oaà—åà„Ù÷±à„åà—å#à„±Q1'à„R-1+à„……ð /à„å)à—å3à„å-à—å7à„å1à—å;à„å­…¯?à„å9à—åCào8WsÙrB¬  ? ƵS×®&Ú¹œÒ¼q½ ++ á™ÝP"¤dáC MPà€âCFmÀ‹âàŒÀ'’ú-0À‹åT;0™ÁŒ¬PᆠãL{P  T5F&TIFx"!(%¸\)GØ°Q ”Tˆ&ˆ&ˆˆÍR Y¦M‡'M‡#N/%/•‚,u§ °@[@"?7à—ø*3*ª…ˆ@!;éQ,?ÅO,r-ÿ0Šå Šå$°Šå(ÀŠå,@Šå0¢ü00ØŠ-¡úû šå$°šå(Àšå,@šåt1¯U¨ŒÀE3†âô€†âà†å0ð†â#à†å' †å(à†â+à†å/°°€†â3à†å7À¬цâ;à†å?@†åC†¤Ì*ølÈ=0—émƒqP0œQ„( Iª\)+\,7\,3\ž$HÏ Šå,°Šå0ÀŠå4 ’?™44ž0`$0šå( Ô£Nšå0ÀÕ†,'à0 °RÀ†åC@ŽX €.3 j3m9 ++¼ƒ@ƒ)…Qƒå ƒ0¥ z:X|Ö¡€&4gÚ7 õ„ x3à€<€€]€å 0€|³|³Û)©4 t¨,Dà݆ ++=“ëZ3&4 ¡â7ŒPx™Œà bº“îTîq= ++‘a®.Àp0ü*Hà ‡ɇ­N`/­NáUÊXðF5.ÝÿœÉÊ4P_0ŠåñK.Ñ ++ñK8Ù€0šåšå9“@0‘åu§/°L Pò7L0Lè " äçü3D `ùOɨ.³þ”/þ”D?À‘H#À” =”a# hß”Ô*e è"pq“xß”¯0—å—å°LR/°” 0L0LøM~,” (J‚8.¥ü<~|N ãwü¸hLfüÿêÔ h<ƒ´ ƒ<?ƒåJˆ «•¢Aadâu•O šå.`'èpÜ.îÎ`0 4;9rôt$qGqZæÒÚàØÊô ±-pi?råN'ÌU*^Uðs(°R`v–Z yâx sMBBnƒ6 L_ÿÂØØTÒÜTÞêèT8 Pà ÞäÒÎZðÄÂæRäÊÎ ++ ÞêèäÊΤee *óD*H p¿æÆÐÊÚÊZæèÂèzP‚ L0RoèÆæØÞè" $HLpL30 saM1äÊÎ$S … v^!_âxWœW°W”WªW˜W¬Wz|Z3Šb–N1~Â>ŒE@ÒÜLÑïû/|û~O É ®/QP’nrl‚*U•t/br÷2 pÏTd„€%>nv4 /ph%D€8¾<¨‚Su¢Pò†0? ¿J/br =2'„¯K ++K ?ýJ/†\ˆ\& ++iX]ˆ]Cˆ]Cˆ]Cˆ]AŽZ.ŠUU?Œ$Ž$O(p$ÔH’@–”# Rð? &pl#ÀHèGvö€–xœš&ZG:b‹: p94*˜†Ž Fž*žš®Np’Xœ*CœþÜ¢8Ò¤@m16/bn65 p¨rHž2M Fl?5 p°L“ž7Ù ++7 ? 7:¢ú6ðs. ++x­4 ‘@ˆ¦4T®ª €q/brá /r`×IÉq *3t"ªš?.–àEÑq+º¬xÇ0®?– ++Hù2_ ++*5â_-8©Ew`ˆ ++X0QB=ÚÀE.Ç&ØUØ0BÔ Z À‰‚ñA`Šât`VáèA*D6 £‘`„^ã‡A…©’4BRáK?@é ++`?§àž@+ä"¿äT1·àžP1àý¨?· ’¬»*«x» Ð0ž,6 ÔÀåq(/!àL"y¨& -Ÿ=0!™Xnm ŒbÀœ ¸ Ad ¥  /!àœa†å`ŠL?Ÿàžè*D.K ÒM.$ü- 8  8Ð/ùebM¼äÐ(¸”.0Á£Í0 ãyÅ?ºX1<0¤‡Ð0.“ ¾/P a †åààd'`Œ(¼1¼,1³ž.“ 2  Q¤ˆ/òU A†å,1  ã†SÏÀ Šâ´àåpžå͵ b=ÀÀŠS$@û*šS ¼ðæT&@ÚT¨À9¶ ©lLÖ*h&Ì| îS¾T\¤ ª¼g$,  <–h¦h¸<‚°5‚ /} üp´W:2#W¸p¸kp¨À6ô À. Ø#8W8¼à @ ÄÖQÈ`ñÈ„È?„åVëôÖtñq°(¢(|ëã ØO(;(-#< .þþ´.Üþ´.Çþ@zþÿê¬;1³0“œ¯“ ’åànâË–@ÞX^0`ŠåL”‹0´`žå0ƒâL@ûÿÿÛæ+œó|4æxÕÌ4—O  ãD.€ýD[(Ì ++/MýP///ýPD <5àþŒLýÿ:Th À ++"ä .Íi}.ÃЄ =È@)x xP5Ä`ŠÄ /nÄ #/ZÄ MÈPÄ /(Ä /Ä ÀÐ ¸Ä EÌh ++«$ ++,üà 8&Äà /¦à 7øà L(ôì8gìE¹Iì4à D/ðàÀ 3/ìàì7ì/ì/ôì .ç\\ìèÐL/½ä¬ä /ŸÐää7,à8;,c,R, E Ü,4'ØàH,,5? ž( 4/DJ/ù( /ì(/Ô`à7 à—/¾è/©(›( /Ž|Ð("³Ü"›p6£°ž„@'0;ÜL,%Ú>ɇ¸Bp./°$1¬"3àü-…ÜM@ ´‹ý/vRb1|³ › /£À¨<d¨ 0¨&%„Np¨°¨À¨¨¨/j¤/ /]ì( ˜0,/Ic f³àžåà´  #Ÿ0Ðt?t7 K“=‡ÀžÝS":€H´x6W†åÄõÜÈpHÓ%p†å)°†å-À†åXXHø Ñ„)0¬ŠâTO` -*¬ÔêVk/ßl H|I4ÈMæu{ÐM+0ð u{1áŠ*áÜF/¬T ýôžô“¬¦¬جÔð +/ l a  à Ü 0/= O:* ++0P 6S£/ñP 7TUº¦¬-¼ÁwÈ @®èä|l@Ì/™4 ü4ø4 @„\4¦\4ô@1€åð@a‰¦a‰ìTèT Q‰Z  ppøG8 84„58!4 X2ˆ̈! ¤.ØÿhÅ`²˜1Ÿ(ŠPu`ri8(Uº,1³ ’­àP“‘å$$ 呸 ++ÐÚn$% ‚$nà áéþP¿˜f.[þ1(.þ83.×ýP°#œý€4y€4^€4ÉË1p°— ?“Àž7#ñ½pˆ4 pÀ4<3À4Èøˆ4 ³ð0Šå,Šå@ /}$@_ÿ ŒÍå¨4Q,šå¢<7t” ++tpD7(ˆ tD7 ++Ÿƒå ƒåÿüD7 ü°4 ˆ.ÔüÄAƒüÿêà0êv¸‘å ‘å&Qã\Ä/’P3à9!tÄ  ÈxP"0L5/ À/='À ˆ"0l5l7‰À#lX /“plôºull¼ˆ öˆ ž ‚å 0‚åæ †l7 DÉ€.»û¼.kûP^.Pûä;P <.òú<.´ú(§(–Z<M(<<(.ôù4 4,oð`Šå´ù4/‘ù¼?_ø`ŠåUˆ.4ù"èøÈ.áøL.ÑøÐ/¬ø€/žø€//€ø€ Y(/6ø¨/Ý+¨.!ø¨.ø¨ k k\>pžx” /q,”.æÿ”/áÿ”O/-”/¡è,.ŠÐ €p=&aX /NX #/:X -ÈPX /X ü-ñl-µ³-¢- •- (|$|Pàð„ /jp „0@dà(ÀÌL/¬¬ /¤¼Ì4¸Ì8,/Õ,/Ä, /·,/0`(#3.,àt€.)¯°KX Ÿ°Ü"nœg áL…íøZp†å°× œ1o ãÄ h b¥4ÄÄ ;hx1Ÿ$0?€  ¼ ¼ür Dg ¼/ï¼rØ  ¨Å /PàÕ–È. H®€´dš´ À´¼´…´ ¸´0´p”. l]8J8¬78 8d$Ì WÀà0 >ƒå¸@/C Œ Õ,.Âÿ´ ¯œ‰<.tÿl_¸4(!dt.ýþ(ìà¾à.‹þxBP5($.èý<Û0.Êý}<ddW(.Fý,X/Å›.ñü€/Ìüؾ¨I0/ üØ/yüÄ/¡;œ.düœ._üœ"òœÛլѰ%Ô = œ/Ÿœ#/‹œ ~ÈPœ /Yœ/MœBÀ`¸œE¨œL/Ä /óÄ /æœ?¬`Šì 2 $/¾$¦ð+ ƒQ®ƒˆ³´ “)ù/¤´Ä?¤(4„~€u ü/pØ7¨ Ô° à p;à /&à /à /à 3/ñà  +5Ä/ËÄÄ7Äœ*¥ ’L) @´l4/0àlK/Z|Il ÿ¨ bc¨/¨ „>ã/Êþ„>, œ¤ ++ud€> =?°’=#°€>¯¼ .½e¼€> PP/pl¼ /p€>c/Ùý€>, ”.·ýuh .nýX^€9h +h 0/ ýh  ô ++7 ; P/0ž|c1ä±€å 0€å €åÀ€¾°"8 X 1#pžp’} øçP\/…hô ΀;Éôh<ô4/yiô—@ô4/mjô— ô4/akô/‰ôrôÔ,ä–$„l¼@J*†1?Š”H±” ”`šå áÈ—| +Äf *mÈ— pPxp á ãÈE  ã ¨òÐ Ù¯</mì|<w<z<c<\/Yn¼;<5'ž^àå° ãú/±n<o0¾o싆¨‘0Dƒ*HàŒ0/ƒåü20ü/­pOTóü˜4˜§T/Iqœ#œ| œ0C°  ˜*¡qK°XX¤*¤NP¤»õ Öª¸v¸/Ur ]¸X¸™¸‚¸t¸Œ/es@Ä9/ž| |/Ås|C/t|#L|0¹|…|/Ñt l|g|&ï@Ö°8$°8œ· 8¬ 8P&T˜1 è]@$6«| 0‡À,"1 ,^/8,^ Ô_"3(^€Ð_qÐ_-ü]ìF¨,‡¨,ìôpì&.ð’`!"3pðS` /Fh'/2h7 8D/ ¤ ¤ä1,e/äØ$Œœ„1$/¼ÐŒl4ÌØ$'¬p¤#||$(D.3p8&.p33àŒPŒ0_,*˜®À0 O¹è <° á„/Bd&`I«0TT•Ð& Ð ä.°(ö´ ã  °8xÐéà p88œ7/©œ@<ÐÈ(Ø (8"aÄ ä L.T8X`ä X`\X`#  !X` 8X`¥$˜<Pd)PH.ðþ(·(ªš<.‰þÜc.=þÜ.þPí.Çýð³¼_ÿ)¤| b9„¤¤8!ä/ý8!, ˆë 7ˆ¼_`/ð€L€O †ålØ8&Ì(Œ/®(ŒK‘àPà5p`ŠTl ˜l=t`ŠŒ/d˜z`Œxˆfö_O:T˜S@:X(Rõ2Ô,e|œG(9/(9 tT ”iBû/ÜUg/ðg /ãg€ì/Èì Lì/²ì¡ì ”ì „t{ | ++&j¤|/\|ˆ A$¨;L/)Ô 8À3 ¬¬N |Ð /ø|Œ,CÐ/ßÐ/ÎÐ/ÀÐ&`ài ¤§¤&–°¤"ˆ\ ¨E/àœÅ5 €ø› ¤/o¸+^,Ð!/P¼.0l9@(ä¼/8“ \8“8/ÌZ PŒãd ++"¸à|h*¼à¨ Œ´„ bi²´´ì "àDkÊÿ/Ô¤ L—¤   / ³ ® l ¡DŸ0ð&&àTð‰ð Tð4ùðoc*”@x/V„ WG:L¼.ü/9¼¤L~8?‚@b ¡ ¤"üTüüà”\¯Œm.è, ++h5.Ù4¤p¤/ɤ ð/°mh4‡åLm#‡h‡èšy\8 ('‹$h:.;°<"{$:T:'l|: ä^4 È49/G¨ °<ØÔ1Œ@Ë/T </”¸Ÿ„å °„å „$/ñ˜ X=„/ÛTo PToL ‹å</ÇPo TPo? ŒÐ (EXÉ_°ŠåÀà/I¹P#œ„EhÉO°šåLo/ŽU4ÀLo/{ püp/g,T°( ¨S<Uø8@8 °p|Œ UŒØ ´B1/³ tìCå Àìè˜.2 àߤ"Ü L/ÑT'\àˆT/¾T . 0ädŒ)/…¼</–蟋¤ ¼ +/%½ .dÄg/Zì 3ƒådì Ä/GðdŒ”èh( HôEHˆ #” ++ hw d`ô2W ‡v HÄWÄÄ ++ ´/Ü\0/A¿µx@”S/•”o/o”/a”#/N”[/ÁØ&|¤xdx0¹ Nô*0y ‚ X”€Ìv œÕŒi|œä¦h£¿,&8/¬¨„|x—Ü& L„ôtxx ¼n|pd ¸Z|4 lÐm ¼&Fh¤ .7D $+)ÄDô!D]‚å ‚D ô' hô'˜TV„å „ð' |YìŒ'Þx'ÐÂ<³È'Ÿ(‹Ø£b(M0y ($ŒÞ &ÓÐ%.«þx.˜þü"Šàk dDdd.ôýdáœ#È.²ýxŸ•ncŒ;x(($<ô|Œ .¹üP¦.’üd~Pk]P.2ü\%.üð&.óû.ßûØ)È(²(›<.~û .nûÜ._û&I.0û d.øú(ê.ÙúÀÄŸ²(£Pd pX<K(%x(.òù(.ßù(Ñ(À(.©ù ›Š<qcxR(9+<(.ùô( æÐÌŸ.¸ød.ø ~(exX(GŒ1(P (.ø÷P.â÷(Ç.¹÷ܪP•<~/h÷«C/M÷«,œ œœ0/îöœ.Îö`±¢b—öÿêì%¤)OðaÎä%ä, Y¤Z.mö>ndöÿ ++úÿà")öà."ö¤.öT/íõà+/ßõà+//Áõà+ š(wTI0/þô@[/ÐD,.Ûô@[.ÖôÀ,W¼]@0?OžÌ\x‘€ 'H$ áT/08béX"  „ ++ˆ"€Ì*SX¤ \ìÒ´\/…Ñœ®´\/©ÿtWt/ÒtWt/]Òt#/tO/ùÒt?[t/yÓt[t/ÑÓè+_tH/mÔt?ct/íÔtct/EÕè%tO/áÕt?gt/aÖtgt/¹Öè+ktH/U×t?ot/Õ×tot/-Øè%tO/ÉØt/ZtCtst/IÙ€*tTt8¡X@*8dtt " €{€ê€Ï€/IÚ¨«€¦€w€/ÉÚ€w€/!Û€/€P/ÉÛ€?ƒÜ€ƒÜ€/QÝ€/j¸/QH7#/=xh2ìE'ìE&Ä%&\7èE5ä_I/ê(l €0PR1«àD,¨h5°¢ìS/ ЕÌ/ œ/ˆhDÌÀT4-sG%œjÿ)/œj7Yt1 t1, /-ó  Z ++¨ììà?\´'_„çá´àÈ2ÕÈ2T,o„æô ® ` ?0šø ++_„Æåd…p4 4üt45o„†õ¨\¨XQ¨f¨ø ° ­T,_„5ö¨(PTT-O„Õ /ö /ë  ˜ 8 -_u÷ Ä .¹`Ìô4œÃ/ àˆ4/¤Ð  LB>Úw€'æòÚG,&5'pÒ ++ !&((‚ eñ ++Îbd`d<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZlhrbÄ?Fˆ// ³à°²¦ð’ø* ,`ú òˆ.X0P‚ L@ ¹t04p´_ö ++´Œ=OÒ¬‚"]Àyÿ äÊÎÜêÚ˜èÞà´ÿhâ¸2˜bf\jtÒÚÚÊÈÒÂèÊt¨äÒì\bbnl¸ òdP¬T¶F</ln< f<ì^‚Bð ++þ  ++ L&”¶ 6¾8@ !v MQ¸MóF ê¾,RÿÜØÒÜÊt äÊÈ\bbp`Ñ h T°º </lr< j B ºÀ(6»= ++" ++ !¼  !€ "$¸¾ 0ª`B7À§O`ÜB/>Ä5o¤ÜKH€Þ‹ ++‹ 0/ƒįzœy°yWÆN¸Nº¿ ++Çoh¦€ÄO7ÆvX®® ++OË. ++Ox𠮀BÈ    ÎÊèZÌì Là—åàžå®à á ÎãP°`º0€â‚Óƒ@º @SãpßÃSRã,S€ ++ BâTñàŽâàžç0‚â0†ààƒÏ'5òÿÿÏ''Ï'?0‹åt,õ« +ÇRŠå `¯ ϻ˻ *ùË»ÇRšå `“  Ôÿÿê0‡â`˜g(1˜Ð@žçTã( § ++çç‹%„7 €„å„å0X€€â0ƒà@ˆˆ Û ++  o Û0±Çÿÿê àƒâàÎ')„P•à *Ì€:ƒà ák ô¡…ÿÿ ++0Câw oâŽçø¬/žðªê ++¸B¬hBb8 ++ÈàÊ ++À ++0BP ++0 ¸ õ ++1>B$ B .P ÌÎœØ9®˜ñ€'Ecpc£púÐ$ï¿Ìt¨ÂÒØ\bdbbj lj˜4E0(„00*Î0Ð0aˆÒ ++pN(&, q1¦ ++X`8r¬`ˆ5Á@B`81‚Ôú¸,( HÂààØòÄ çø y\ÈÞÜÊK P7ðs s h s /ÌÒà!?à ++' yà ++˜ØÞÞà'b ++˜p wÖØÚÃG`ÜO€Þå[?àxí Qàax i ++““!â" " yîè*g 0¤Ðæp å n{ä{H® æ® è® PƒÒê«/˜l¬!?쓤ì“?îCV ++‰ q ++qO.žwˆ %õõPð‹ýoâxú J\ðO W.öWÖ  Wñø’Pò0(ô L â˜&ö&Fö&Cö&6@@–b O–À/?üÄòPB Ah ØÞÂÈZäÊÎæ¯zZžà*sõñ ++&Pã  ++-à—Ê.} ++) —N/Ž0,Ž0kT/êT/ßT?1à–/\} ++% —Æ1/·6/¦q /™qº7L!0—å*/ð j81 æÖS  Šâ¯âÿÿêôí  £ þ/c^b n/¶ê9@‚X¢†1/=Î` R/Ž) Ž)& `â×b€Z*Œ * „ Cäã¼k–^x<`S(B>âÍ ++DD0/ôþD|-`&ô´ ÆC„A/ä8„@g„h„:5,L-Ô/0Ô/Ô /Ô#?à—¶5*?)—¶G. „,Äz9(? à—v9:¥ªG ˜ªGÆ#‹rg o0‚å ‚w¶1° $°¬†Þb© ¼”/M.7 Ð,-,.°¤.æxs ø ¤/ü6y^°€å2ŽåŒx$à(à@” ä[   00 áè.@¨ º¨ q/0¤ ?•¤ Î$ tâö ¨ ¼ ++”k” ÖH< ++˜!nD= ˜˜/?,˜/Õ˜˜à ++/ 0Ü ++ Ü åx ++ºÜ ++Ž(dð ++?().ýþ ++).ðþ(.ßþd.¬þd‚(nP.aþ| /Tþ¶G d.çýP.Úý(É’l&ôãP âqR  Ûü6-€õûÿêʨ¸ÚL¢h ø(/EÎÞèÞ¬fv pñ2$G-$d-$aø ˆðoHúx±O^W x3 U¢*:üò®ht0Bþ   0ÚÂÖÊZ05æÊâ/0d@ó±,j7ƒ„å „å =7 U)±,€rœ ++H$8i0®p–zBþ ++ Ð((ž ++žB"6c. ++0™7!w“/Pq]`Fxvl~v£XT~/`6LXƒ&GpJPàp"¢x ++.ßØÂÄÊØtŠÌÌÊÆè\Û,r„J‚  ++ݤ8$oP X O_‰r/CCl`^@^XëpV`®ê8¢.,XB:^!Pk$QAb(C&cÿñ ++D&`Øò0:En0-eàÂäÒÂÐ./brm! ++6j``xR-K[-l ¬€ ++už(*&·`‰ b‰ö!Gs&'Fõ!)Zõ! H"Á 3þaC±ah>!/ý1! ñ! ++Ü!B ++!X2% °xþh¥ˆ€x,(—'/ y',´'Æ'0¸2)x€L– ++P&S`B`Ó–ù>“¸'?, ++H?q XqV’pp]ˆ,¸ )ú( E)(¯Ò)gØÒæèT)18 ++Ñ(B< C¨ ( * ++ , .ËVO'REEÛU,ÛUÝ›§59à—×U?9 —ÓU˧µ /¾ÀOK˜ ™ã†3 ‹ýwV§µ‚Àp¸ K˜°{V/!oV 5,95©,-/8/' /çV/$`Ü/1ÜòÝáÝ ÔÝ  ü0ñ?)à—£˜.&™OºT-;ø- ¸U¸D¸ 7¸ ”05Q,?—çñ •3à /åçñs@çñ&—Z=éZ Š/ªsA0¼ CT—%P% ++WL }%#E 0! "›Vi"4àõ“8àŠå%à—å<äý@àŠå10—å5 —å—å!—åÀ—ËñÃÉ,Ëñ/ý†[Q¼kO´›NÓMló0†å! †å%†å)†å-À†åXÛñ ×ñ,O°Šå,ßñ ¢üQ ,,9.°¹/ d@˜/ gN 4¿D <ø ­ (E$í&×É= T¢ °å%—å!°äG® ãKÏ[”TÏÈ8"¨ûË|Ñš7­ ¤F‡;P _E@.™sí( papè.,K׆ $0ˆ6@ @•S»US»DÃÿG®›É†¡(r»F_Q/,ÿ×É Üí/ÙþÃÉ <x<.bþ .Oþ ( (úÅÂ)µ(òr%0—å! —KK[”Œÿ‹å 0‹å ‹å‹åzxK0—~%0ƒK_à á[”%D(.ßü<ÒËN.Áü\"wü£H.pü|.`üÜ;(L-‹·0/üËH/êû­Å­Ô­rÍûÿêú’ ++:‡>ØèÞàâ9àö9P„ LXì9hDO_W.0îF8/ºOB J ++CJ«ŒH8 Q/ x :û_°PCs?>˜($IîKîp00;P¦&1 š/ •6.O$—ðhB8 ƒ(T€D0 áˆ"ˆ@ ++à ++t#±™6xý¡ ++ƒá áŽâ)—8 ”å0 3SXd@Lƒâü/}{S !„Qd ++” NƒâŽ± WTŒË¸.°(.EÐ ×’'k/ ° *LLx x_,Žâ)øx °X91Ä æ8B^ãÝè×QáÁÊAâ\@° ++4 " 0]/s¯ e/.e/9 0š´Žù8®~ ++ —å)Àä/rT c ‹å À‹à7‹å!@LW ++¸"Mß& Û¡ 4?Ñ0 ^°‚å ÀÌ,à ´å. Ìpí.+íí.¥,pñ. ÿl l@A-/ 0¸+E-œ*@è#Íè`/À`@¦¡:/™Ü ø"‡ø$#yLL/lLL 1ƒsìW žå$:ÿØ¢àý$$ ôHp á/ u3q3 à   (ó™€ ++Z+ ´ ¤ïOí.±ÿ0|€ ( P< D91:0.úþœÍ ºd/¬þÄ/‡D!0LŒ~—åàAàètH(" Ǧ^„å@`3‘ ++! ˜/ùý˜/.Ïýð´¢€0.|ý8eX ›ààã“à¤F¬©8´,Ä/%']=„< `u; ádì+.WØ* l/I¼ ^‚å °¼/6œ$@ D¼<¢ìÿ¡<<D'(}F/ü}F ç~„-=—XÖMC /‚˜/à@/£à/’à /…µ3/n¨ ¨H¨L¨_@0ŠåD` ’ÿMDD`@G»/CÿuHD nüÿåD p㯠8˜& …M Ô $, (à Ø8 ’y½88p lÙ¥C˜0nÄyU˜ C­¥C˜” _Àyé” Œ…ð(oyy\ (-_p 3 0,-L@™Ì 4Ì Æ.tÿü$L( .õþ.ßþP¶ ‹t4'g(V¨óßý(&.Ãý<°t¢}<.dýW<I7 þ4&ñ.ãü<¾(/§üˆ((‰?<׬!Œ.èû Û.ÍûPˆzlF .úú.ÔúàD³úÿêøëo ð*… «˜ø.æ÷X€ß÷ÿêò79+!e¨âð#Ž9`Ø+ÌP8dZäÊÌXZc0¦èŒ@hŸ>GVPç=)>)Vµ>lZ°d "ºFó9GV008@;}E :aE‹?&1"?(HG" Ñae/"è'/$vEc&w® Že%?*›#(c*w/0%Q q ++ù'˜<J ecd_'s(«(W}ÿp2.ÒÜÌÞZØÊÂàA q6–iB4,RBìRB.¦A›Q(IbvìØ€J~6?îp]PqO?0‹.S0AJ0î0f_2Sò“zhd0<-Uþ:˜Kh°ð®0[?4ü* ++ü5C4$I-p˜šq" c¨žˆ@ Q?6)‡6Œ ©OvI•6zzEHÊN)VàNHóKÎ'O/V'O ú 7äèOQƒ"8(“ˆM€¦MŒ2&vNbœ0:ÇQ€4 Nq%x7Ðuâu •QC¢<1(8ÿw)±úôLKÆÞÜæôLc(B<4(µ"4"HäÊÆÞäÈ/v?>v„vO‰yO@L<øu÷rp£ÖQB-@4:ˆm?Bst ‰`ßVsyKX/X€:/?DwqoP W8€:"\€:&I€:HS ++<&ßC ++á áŽâ˜&/6 69Xx8 6./ 6ý 6ï 6 /â)Ü%HÅ ++)Ÿµ ++ —åH:/©H:Ø'8° áD.Žd9/„d9/vd9#/cd9¼8d9À8 /ÍÀ8Œ7Œ7PFÿÿêèœü6 ,}h  $ $p 'ff9 ä.Íÿ@]q.ƒÿô×Îì4,PD!0(Ôô ++ü´!/êþ5//Ãþ57/æ5˜),¬/Å|35!„@Ÿ„5_—å¸2<y(/*k4 Ì/]410/ à80/ L@L t0 ü,/tXAT!*à” p"O—åŒ1/Â/´ §Œ1 ¨X<-h-QŒ1nŒ1 \Œ1NŒ1 A`Œ1´ Ä/(ô ++Œ1Œ1<Œ1/õŒ1#/âŒ1,È0ä (à ¢ì­ ((à  Ô,¹t!<1,è-t†tut hPt!/QtäÄ @ä kü‘ät t&40 $tô,ô@/ðô/ßô /Òô3/»ôø9ü ô$Ô ^ED1’D1˜+nĘpfD1˜” _À­” Œ>D1'n=M€ D1M€+ »(0“(g(.>ÿ .'( TwÝ.¨þ<.‘þd„(.sþd@((ìöì/.Ñý<¸<0«<.‹ý R(Ex0ýØ/ð✎€Z.4ü,/üˆ//ˆ/¤à/búÿêVˆ/°ƒ/°ðË (t†!xÈ@B˜[mz-1F•?Hä.QDÎ,cFß-]F?-—H“cH9-?2Ü,SHÇ#bHð+„Hð+bHÙ(ã%K?J˜QJð+ˆSò“z³)\L''L³)OL³) ðv NxÕHN®¦NNx,]P7 ùx¦)yu)·WW2P]y¶Ÿ/X‹#RŒ%r ++Ö^Ö^XRx ++g*S*N*G4x1*9w(ïZë) ìÊÆèÞäê).‚r«Né)zRé)F`ýQXORÊ 0®8 ¬e:Vç€eÒèÊäÂØL«j; Ϋ.Tç€ Jç€*ç€V{} &š 2 plêV ++M¨ 'X\¤)O?ZÔ‡^ ++ÈÊØèªV^¦Z"8 ¦ÝP_\µ ”dI\e¾}Q ++S^.^.uq ++qD.uX/x./?`w¿XBl W@.].J.%._Žâ!.,..¸.%.ëU!.0.ÿÿÿ»ç.×)-¬Æ.%„@ .s+Ç,<zÇ,/lb^.%.0%.-L@L ++. ý³+..0T,Ÿ_Ã.µ. ¨.$<-%.0Ø .°¸ .0h.ï±.8%#,,%.ÿE•.E¤1.ÿA….„.€±.|A.ÿÿ6Q(D6<üŸ-ïá›Y.3ü,.‘.£.œ.£b™?d.Q`„,cb.]b.—d“cd.bd.bd.„d.bd[ «K?f˜Qf.åXVìz.\h!c,hF.Bh.}j®¦j.7z.ÿAG:l.y.ˆ#S‹%..>X+§3¹_ ++Ïh).-,/.rk.R8?l.mj.3Lh.sFn•€m.#Sn‘½+_ ++Žë R q‘§+/°ˆ(/?p’ˆ(e~ {ˆ(“t°ˆ("˜ˆ( ƒ/wSãQ ++)0SA ++‹‘%Œ/4„(\âê Ô/ð@À(XQ ++‘‹óŒùÀ( /ç4 Ù$ /Ì4   "p"¯p,p/¢pp"ˆxÉDOx ++w{+ †¦ó7†^ —å%@¨Vƒ ++¬Œ¬“Œå Œå @Œ¨(Œå¤;Ó"17w3 „¤„L#t ÀÀ t/\) #Žto0Šå °¤Á¥$)"p‚ì ó¢ä« €B†å @ŒH/ÊH /½H8£sY|Á|/–|‚îÀX8+'À|$v¬À|/id"HÀ/R§Y‹â “@˧£Z…³’ d4ÔÔ#O*H#OB OÅ̧ô.ÿ{xƒucdL+!œ°… $#ôŽ. ++(G/u(e?rj"tÿ1Qpl0crw® i3'vz!tŽ Wv ++3]vócvó%OŽt‡3bt‡3.v¨ý3ttý3btz'qI?x•(]xŽmò“z`âU53þv1«€;6\z_4zLdOz;6ÿ_?|$‡|ÿb|•|ÿ ++bA@/hë5@ˆT3 6!6@f@E6@ß3‹ºä/ ++(í<Ú—8{ ++~ ++0ŽXŽh_`k€½as ++‰`õõ`5€õ`Äd‰6T8/6'o:/6?‚66ó 0HÒÜæèÂÜèÒÂèÊZÆÞÈÊZÞÄÔÊÆ"6 ÁÄH«3½ûŒk°ãü9*˜au2ü$Ð2ü€ˆC ÌC«6 –‘f/(ßb‚9ß?ßo0Xo_—ßï&ò(7œìÂØêÊæZÊääÞäÂ)P $ ++@Xb8£‘å+@ÈÞÚìØÊèÊä? ++=(§ ++T$D1mÈÞÂäÎ/(©òlŠªÆÂØØ« ++©(­Últ`†œ/„œ3;j¤–¤8ž­J¤˜Íc8ˆëh|;:ˆ§G`†(B@ˆÈ à àbÈÞ^äÊèn7ò_^7.%n5ÜR"¢" nSà†åf"ÒM .'Þÿ1ÐVK/ñæZK…¬ÂŠÐŠ4h¤ÂæÚZäÊèêäÜ?î`¾å hµïMRh*"RhpŠ `B¦2x ¤áŸTã(Á ÕH1WÑ08ÁY3£Ü ‹ ++‚ÈŒ8§ÆÐÊÆÖZØÒìÊWæli jŸêO ++kŒô:€ L; KŽ ++ Lt8úS ¢‚ÞìÊäÌØÞî#O,)·RB ++¡8¡ñ xB–  h *ÒÜèäÒÜæÒÆZÊÜèäòâTÉR;"Ã;¢² ++ på  Êp@ ãð—£³+Y“ šå@Šå88$°S‘88bà áà4O på‹)RÑ@Edk€€Xâr ++¹+0žå„Ã`èÊ d.5dOçÿÿê@7u@¤á'ððšå0šå “å 0“å}<,¼¨  á,ic°žåQá ++Ì@øÿÿê.LïÿÿÅ'edA7^@ áæÿ‘âöÿÿê@Šå0Šå ÷˜Ü*=È"@¼P šåÔC¬0¬S¬? ¬ó¬°/à¬鬸o{ÿÿê ã Ð.)Ð=ñ"p6ÿÿê"Âc!piÆHB” Ø ,i°jçrf¢_ ++ àåp¶ÖLp á2j²Ö"p2?—7*&RÎ(’Ùr.¶r2d.=drÀî× +•<Ò^OpŠå6Ø/Ý„OšåŽ"s‡ÿÿêÂs!@ t«’Ñö#ÚâC ’CTB” IÒ”UžCp’4( 4 ++Z§`8 ’– ++Èq ê–H j S8hBŠŠ/ÞÈ‹¿‹þ ++xñhHª~þH &æÆÂÜZäÊÚÊÚÄÊäÊÈZæÊè†$ ++(Y Œ(ÉÂŒ/þŒ ˆB–8~ŸÎÊèZäÞÞÚs 'Óºs…S^"ÜÞܼEd%Ћ/ˆ  ++|?˜ ++4tÌZ?˜WÒWœW°WÚW„'ð„ }š}Fš}Cš}Cš}1øŒhKO_œ®# Îr¨Hœv}MHœºsv ++vC˜pu9 ++X1{˜ÒÍ/. chžD Qú€QúXQúXQúØu4|Z/0^^?ŠxôMoo ++^' R£0HÌÞäÊÒÎÜý†??B¹À9±"5Thfa © ©%ø G94 ÎÉ#,€©öê"€‹/IjéS€Š/SâŠ'è"@“¯ØØZØÒÄäÂäòž ž,JÛf?$øO`¢O% x?|h?4¢x/ ++(4"_8{š,N_8‡ C‚WÒÄòèÊš z~©p¬ØÊÜdV#츜8ªÒÈð]¨Äì,¦b`å釸 ++˜ÌÂÒØtP¶ ++˜èäêÊ?¢U· ++Ù ++ªU­ ++¨ 0/¤ EºŒUð  ÂäÎÆÜèZ|ÚÂðZÌì; 8& L^Ц¨ª¬%&>\3 ¢cxÚÂðGøþx# ++h¸$× Ÿ&%ˆüÒU pJ#¨R%Ip®…*¨ ¯5®°Wh¨.&  “"&³c^ÿáY!0! !¼++» ++ïVšÈšPxòÀ¹xxÆx†XB   0ZœñæÊât äÊÈ\bbph@Ì„U„„å „åp„Ïr´²&uW l†D° WF=N"PN !h [B² G—~—>s[C´p¡AyQ?¼“1_ÄI1 Ô`ÒàèäZmæÐ  ¶¸ ʽ*ºxv,2¼v,p²:@»$4 ++y<p!÷!`‘³ÂúÀ$¹%Ò̸fþ nþ(þE=ý/„ý !¾ " ++Àeò@~E~Â(e™gb¬ p¬¿ÄGÒÄþÒÄÂç ++J8€h6BóD`QÆ.Ä©@Æ©? @ ©6Bã!ÞθCË)ˆg+  ^ h\ ++0, Z5Bp,ê¹ éúLBHB0‚ > / ++` / ++(jª)A7,@Úp`ÿ–ÿó ++ÈÞÌÂäÎÒÜèfd0Bò ï ã'    ܇ýaÀ á á™´Pð  ã9àœåpžåà‡â9œå€âà€åã ++'øù Uá°*°Kâ,°‰å‹å0™˜FÀPᥠãó 8ó .š³&,F ˆE&0LSà†å¤N ÿ!,%ØJb)à†å- ,b1à†å5p(U Ÿß/r?'œTÿã?€Sã1 œå5àœÄL* g#"ædO¸ÐP.ØG_àƒå Cý/È”O JØLO(=)œŒ ¸¼G*Hàþ؃3ƒå%Œ?W„"ĨM(@ÔS(ŒƒH+=!°œ$IèK3à40*8¤W ˜+PÞ+S(Ÿå °å $.ÀLlNpQ0R~pœå)Àœå´‹DOÞÌ_/ °,‚@Ñ:(&à$ </Ã`@p†åHp‹+¬4‹ p O™8 pQ ++ÐJpL <æÜO Dc/ KnHö¼8[8 0R/03ñ 8Š.ˆÈKp5Ì`/ 0¨"tL tL €ß"DàßÀ`ð„ð?„åÐ`ë½&×7*ÄŸ-±(ž‹p7pL .`ÿK.Mÿ^6( a´‹.õþ´ÎpLÁ(.°þ@Y(1(!(Dþÿê%*"3 %*Ð ++  ã ãcùÀ¿+³÷ ³÷*Å te"ÀÃ+€Tã†\/€\#/! ++\"Qú1 À/G ´ ´ ´ 0D_ x$xPèÄ A/ðÄ /âÄ Òø] _îœÃæ,Ä ª˜` D˜ „D (@Rˆ -Hˆ D(Dˆ0/@à/<ÌØ(.! < /Ø(^ /T] /T]/8`ÜCé_/ØÜ Ë0^ 4 00@0,ÈX '0.¤q¤`¤ /S4$ø\V2œäÈ^8" P P#ýP P/ð´l¬ A/È<‹#·à ¸`<‹T<‹  <‹“0` ++H‹@XLZ‹ðZL`/~,  ++@„äX,„åÈiŒ`*æïŒ`<\U`TØYXè]Œ ++_(pŠåPè] ++‚¥PPtZˆ ++.(p<\/*|Z " p÷ëxZ /À˜ _ó=˜nœå)0ˆ/þ´@c'í@c à ,tOƒå ++Ј X/»Ô[/ 0X,ZÕXT(<+‚<L̨ ++ $m@D@ @Ø ++ÈV'Eœ¼Ô<]‚å ‚/*—. / ],@/ÿ| ++¼‚ü€/êˆ_ @Øa Õ̧ìü@P À@Àaw(«  /–x‘,04,Œ¢Ü!,,äÐaŒ%[̱ ð_F$(€t ,`<< < < ´t0ö0$0ÇÐ\ï,` ,`³.‹ÿ¸cP.Nÿp]9$PPú0.æþP.Ïþ<.Áþp´<£<ŒwŒ>P'øŒ <.ûý<.Ïý(.¤ý {f¸` üB(1P Ì`\‘î,`.¦üd™(ˆ.<!(.èû<.Ûû(ÊO.'û¸( (ÕÀO²úÿê?A*|&0¨…??`Šå L šå  ?0œ¸lv:p”‡¼±‡å 0‡å ‡å`¼‡.a0/>€S Ì "È3pƒ¨ / h x poô:pø æw8/Ö# @"®ü Ü  Ü/ˆr#-@/h,0HŒ0DHD/ È/È /l?@`ŠÀ.-,_ œå)¼/ɼ¸h° "«u/ Ø ž<Ô ++/‡ ¬/t /_mP T°Ÿ pŠå00ŠåL¸ ’?M'LL¸_ pšå0p/0Ì @ŒyàA/ tû< /î¼ tˆ/µt/¤t /—t /Št3/st#/`Œ+/Ktd_¿Á*t/tx˜(V/Pà3L.Æ`L( Œª´ ŒªL(L(¼ì/~¼ qèü/dX ++„/MÌ( 8:ðŒ ++¼€0„%„ /D ¢‚å ‚å°‚´/ú´/é´ TÜ:Lˆ)ðxÎH€· P8§ô._ÿµ/ô/Š öäª8ŒŒ-%Œ *WHz ,\ ”/Cœ\y¤* -D üuD4äÄHDDD8@@ ++T†˜'@ídL „//×ì¸l/¿lS‹å p‹œ‹0  l.pÌ/—¤æ ¤.p¤@¤D¤œ<œ¢äøQ3<<0˜mÀx{” ++KÐá00(40(,<0 80/{ô0@ èŒbN.:ÿœ"Œ .÷þ.âþd̶¢Po<.Bþð+d-xÿhéÔ¿.¬ýd•¸ˆ{<.jýŒª (3 ݤ.®ü(.†ü .oüŒ.büÜU<Dd (þà.íû´É(š(…(.rûx.[ûÜ.NûÜA<0d.÷ú(.êú(Ù‘iÐY(K#<<.íù(ß».˜ùPHƒùÿê0ä• /5:0.Íóè@Æóÿêä0O`•`S€ ã8&H/Ý:¼0nóÿ ++šñ°.‡ñp_O ãXà:LHñÿê¤ | Ät &„‚„?‚å,Œ…îÿÿê”úYH¨AH_Șejq_ÊI1¼{_Ò ++¼{‚DªH÷ºôæÒôÊöaXø¯]ÊH5J°²he¨#HPt[ÊÈSpaTQÊ€¥çqžXÞVs ëtEŒ ÈI_°Cˆ ++*xÿäÎÒÜÌÞZØÞÂÈÄE rÄE&–Åe4̪eÜ_FªæîÂààÊÈ~±eÎÅEõæêÜæÒÎÜÊÈZfdî¤NIž5º–WÐ ++SÇOqB_fÒz±iÒ X¸NBÖ˜ßÕN¹Ô˜ÜÊÎÂèÒìÙNDs?ØÅ_ÔÖÅ ++€[IاNŠuvNfRØÂZ)â¨ÄIaØM{a¬̬I_Úa‚ÚC]qkr ++“&@âSk2NEÜ–Ú–]ÜO¶UwÚb ' U¢`àÞ,^PGÎÞèÞYpSQ /b`¨pI¢p*dñ ++Þ¢p àžâ ++A`VÀlâoU4oUbbqUöqU$Z ++ø| VÖV$âc4è6 päæÚh88²QØä Ùé ³W’ào œˆ Q€Ñ0ÑH$Q 8HW€­[ÿ&ð8 *ÆÂÜÜÞè@ÐÂÜÈØÊ@(ñ@üæ( pµ ò[Ö\Ô5¸u `c s?èc +·ŽÂÆbs“ |è“ bèn ]è@ è@ Q_ê±P&Qê¡jØKxK tW2@æ/PŽm ++€Ì ++]ì ++„ì ++WÆF?î^ Qî× ]îŽîÍ {g ˆ¹ ๠++™r`QбHè/ xô   ¦dTPð`²E h¡b ô P9 # ÿr½ÀQé‚ò(ÂiPëBòhiÉ/ ++8îo. ++ þ[)G"þ[Þþ[!lh=òQM2…/âQeÈÞäÊèN\†" ˆO\O\K\"ÔK\5'§Pà€â5ÕmÀ‹âàŒK\'ÂK\À‹å° áO\/¶O\.«{(—!<&‡9&O\-°O\/ƒã+O\"PO\O§OÛ-!{±/Œs[¨„\Ã5$Ä+#ÝV£2E£2 /8ß6S.0 áÛ²à- ¬¬¯7›M°1ç.ò H$×Ú-³æ/Ê=³æ=.,µ30 ŸZD °È[·02„ °ƒ7 ¼/|/ö/n‹å ‹OÜp\@ã^.D+. àH'x ÀüÀ„/?9 D0PûJÛ\°6!¼/æà/Øà ,#È÷­ +5»§("+L­Ô/¶ï$³J+5 ÷0 @30ã¸o^;o^g0 & ÀÃ]o^ÿ7 <o^ Ã-x³J (Lx.>ÿ×+1!.ÿ‹.þ÷0è.ÒþP}(j(D(/(÷»0.éý@Á(´(.£ý¸&mýç^"žç^+‹ç^p‹^+] Ï-pÏ-+cç^\¹\..ç^.$¬L ¼gH x/ç^T.à—›AhX)»¹.½ø(Ü#¬Ø 8¬/Ÿü ++# €/ˆ8 ¸T0. /dËC/SËC /FËCŸJ%Ü,!¸/0&Hà#93  „Ÿê\ /éï: :‹åT ++‹€ ê-X8*/Á‡È³‹I ×È#£X ++À|'–|?/‰3X ++*‚ål‚å ‚å‚d/r{T74$0Šå(°Šå‡T jüé‡T0_$0šå(çÊ/Dƒ? °»Ë/1 #D/ü ++$ÀL2÷ËI'Hà{@#‚À‚.(\k»(1`,%81ø„&/‘ïk DOA_°—å!l/yD/kD#[$ÀX {ïc` /AD°ßë03ù à(M@ à, ++‹M #ýD$ðWI/¶ïGe0åÜ8ä0Ü ’Å00×^k_/Ã|ؘ-*]˜”/™´ ,ï¹…?K;Z tp¨ 0Ð/[<CZCGHE|WAïi¬+$/  ++[N / ++ ÜT.ÛJÌ°Í<T/ ƒ .'Ë/¬À 4/•$  çU/a/P /C3/,(D/„/÷„ /ê„H A/Â Ô >/Ô  Ô U“K oQ´ ô ;HoQ8|<|O°Šå4€¢ì?Ý44€0ð /E„ " °€ A/!¯JH¯J" £J£J =/ü //æS+/Ñ   / 0$nÜ?"$/ 0(/¢äd;J/ ðz#d0<f<$<\/Ræ ¨¬ /à8/à—O8/,„/ ˆ+›FðÈÝ,§Ü“,j(W((((.ýþ´.Øþ´.´þ<.‡þdr(\P7(Œ(ñÜ.Íý<¶©(˜Pd(M@.,ýP÷«JêÓJ.ÙüP´ž<‹(.tü´`6P. ü@.üûózïß.Ñû ¸(.«û4žŽ.€û´hx.ûðÞ¿J.Èú<µ(‡(.púÜ.cú´VF.8úDŒÛœ.³ù<¦(•q<.ZùhM(.<ùl.øø/Õø[fg ¼/fc/ãfT/0—È/¾ ++#Hà ++0Ü%Kg‹Ô ¨è—‹f°eŠè$ hs˜ $b˜O ƒå0Tœ  8<8+8 œ èkÙœ/õœ /輜'0¨*80&Àô3‚Ô‚$/²¨*/¢˜„.xŠœ°œ d |p 0à-/e* h R8Uü·`—ãg.-@/è ãg /üãg ¤ D/Ôp [0€å p„ &/¯h (l/™p+/„p#£b_ p°Šå80ŠåH ’ÿq2HHpO°šå8s[/Uÿc ˜A/1˜k/ ³ì&¦ï³ì ++¤ŒD/ö›i+/á(DOÀŠå<,O4,OÀšå<0°°ö°^Àå @¨,(¦Ø0—Ù #ðEw`»`($<Çá ˆ.0Gh^¨ DЃa/Ih~x68(ÈD/“o$("'à>/Ýü2h&A/¶$"/¨$"/˜h& ‹Ðâ/}À0À5Ä/fl//P¯g 4!?€å¯g/;;#/(ü  °/Ì”D/ñ's%,-ü%¼/œ¬ °À †D ++¬X"|/<&/o/a/Q<& /D<& /7<&<&ãx.°·j‹õàØ0/ k”#ópm€å °€</æ<&'$.> TºX5 ¤%¦€ü ˆ/l8|¼ 0l5/hà%à%Ãõ æ€(D-lD]/òD D.‘ÿX/}ÿDS<?< .ÿ .ùþ.éþ<.ÛþŒ.Âþ8.µþ¨˜ŠdsŒ.]þð<ä.Ñý´¾(€“<|.nýÜaQCx.ýðç.Ãü<°(.›ü´‡<.püT\Id(/üóg xȤu(`J<%ý¸ð¸.ßúd§”P}(o(WG<9 .ú$/óù” (ν<¥(—†<o(bQ<;(oóøÿêpëg/yFÀ9bWg'[ñ“h`Ù`“hH/!Gh:n2ñÿ ++‰î°.vî"Nî“h/Gî“h/6î“h//î“h/ h“hbNQúqh|ŸôöøPhG Çg¶NHú˜OºVk ++“ ++ÆÔµ½«j_üÒ ÒX9O SîIüW LR/ÌZãSü-OPóbìqžXS]`SÝP5° ++R¦çP.ÛP€ŒŒPžÈOjò`RxÁi ++/hÆi[¬Š/Òçi¿˜æèÞäÊdçiþbHîRO?û?êiOþêi£/UdYs°ÜP_° a.iqW` ++-R … v`¨b ÖWhù¡ZS/s‰ aÇq]YQqâbAIË ++8k[¨+[ U°wP Zˆ8Ff äˆ3 Pýr¤Z?–p`s°«q_ ++Ò ++eo Q* ++j£L ++Ä  ++Ä œ ++Ä u ò ++Qb Š'/à\c@\c`jQj‰j# j¦êW ++%žQÄ–a Õ¾4Eº]IÉÿybnË?]nþh‡ÈÜ`‡Èh0h™ô nx/Ü?@DCÏÅ#‘°yÇA8|¤Är€*SsFÌÂØæ^Ädþs b¥ÄH¦Ä T/j8 ++S“q q ++“ jžžb• X dlh/j‰ CPj`×cp ÿˆRˆsS/¯ ]c%–R×~^öbgW g‰ gqÑ«I I# Ø_AI ÍP‰pÞo€%Q]Ž ÿ¢‹pi ++"ŒpoÊ"p))Qò  á8 ++àk/t #@ ++Ü +/Mô /?ô //` "Ü °ˆ. °ÜÜ °Ü ý ç` ˆ/ÔoR ´G/°7a c ‹å ‹ /‹åm@2X(ÀZÀ DDÓˆ DO° á#Q-( ¤0X˜ 0,#Q #¤  dôh àÜ ” oŒ Íœ #½ä °èÀä¢äœ‹” Üx8 apeÌ . ¼#Q  gQ8 .#Qœ/ù#Q,  ”(.ÿd.nÿX WI@<,dP÷À êÚ/ÌþKQ .ŸþT.Iþ´%8 ü˜ å.×ý´Êº¬8 .…ýÈP.(ýFÒ D/ôüïM/Ý#t.õøl/îøïM/=$ïM3/…$nÅøÿ ++0÷°.÷Ð"õöïM/îöïM/ÝöïM//ÁöïM/DïMf/$ïMÿI.$F*q`(+q§SU¸/ î/£KhKs&KÄDR$¾@$¾@œ$¶7u&]2$Ÿb&L]&à9.Gq©A LPº4Z(]‰(lJ]q¨Rqâa?I(+5lJOVJ%5V$ø]$5.x!5Q±è¯BåW*ˆ?,]BO0÷r:W*Þ]*Ù<Š*Ù<o.,b.]qÑ¡I. 6 Ñâ¸ó?B¢/h˜V,ì],´<Ǿ;YÒ0½;_‘’0¼;))]Âl;îl;¼;0P)cªPòP ;•pT)0´ÇpÌ;ˆD ­P Ì;T³¼Ë;€ ŠåšåéÍC4"¼ ++C4.¥ ++ÆŸ.› ++/‡;#‚ ’‚/x ++ ++ƒS×<"F ++×<=×<=[,×<†×<'4 ++×<`×</( ++×<àwØ&Ø×<×<‹"9Ë‹*/å #//Ï Ë<ÜË<Àêu/½ ÷8 2$Ç=ª8Ç=2€’“)¨.… .! *t à Ï/g ~­Z“O#(œ5éD+˜“#.Ð&0”Ê0/à/Œ «€/ŒäÓ-/x`Ð /t"ŽD(p(0#là¼s-(„-  ?8š ¨ w+>w<Z‹þ^Œ30€X€/? /ë75/Ý75TÍ: yí$¿f© Ü/²O> ­éÀ0 , *], î¨0 …¼ [/ €/s€Tb:lHû1[T:p$ L/F(0Œ2Ö tŒÏ?ˆ „/á„ ”” |”xß1˜/.yH dÞîW´h´òê¯Èr J«Ø//Qp?0—Ü› #†Ã;L†RŽ 0L8/-L\” ,”4L4Ř1˜ <˜8˜4/]˜@˜4/õ¤/Ù¤+/Äà H¤8/Ñtš·KP?? ++ì 1ƒåL|ËD/ƒ¥ô Ü8/­ÜY” X”TP4/E˜.˜ `˜\˜4/Ýèè,/ì>ªdÜ4/¹@/Ãô ++ @1³J,1à,%£>Œ£>5ù ¼ "|_@x c@#nwI°—=.Áø%J/ /@+Éì0ì.@/F— œ ++D/‚å€ /€ _ö:Œ€ _è:€ /Ú¤”$„ œÅ<˜@</±j”j”hœ@p@‡Ø ++1‡å„81‡å€,]‡å@‡D†ÀWÀˆÀp‡= NûW J˜^8 8K8«K8è(ºµ ¯X#Y¯X#¯X5 (Á=®›sX.ˆÿË:s(]—>H4<´.òþðÚ»=¯§=˜ >‹}<.jþ|6x. þøW=Ë. ýPv(_(5÷= <.óüÈ.üdsßJ^<1ñ>Ž.Çû|³¥—P†s.Gûs?:,.û,ûzŽ.èú(.múÜ`R<?d. úð.ôùPçBÖŒ<(n5<(( C.«ø<.žø(T<G(.6øT.î÷(­#@‹(.t÷xg(V.<!(Œ.Ëö(’§@…(ts@O<.<ö,*.ö "Üõ;A/Õõ;A/Äõ;A//¨õ;A (D^õÿê¬"à"WB *+WB°ü*Dhƒ=õÿêĺJˆ4 ++˜èÞàHˆ"2FˆÈB +1 ++À-BM1?6Irˆ_24rˆ:B3W ++ºÜ ++ƒLB0 8 ÉoÐ0œÆCpÂ>s6çX6:O_8°˜”˜ªÍ0!8H2Oä`´1QvPq”›ª›C8›XAs«®CXÀq ++°½DÀ:&(25xl<ÛäËþ ++þþúC¼7H?>Ö ::H>«qVu>îFñ—7KY‹ÿn‹ÿ ©ÿh aœ4  Q?@H¤@ö>âøÌ! I@ K@=]qªL@²?âa5T@` äIˆúòjí@y Eÿÿÿ| 4 ++âF ú€£í89U?ÿÿÞ9•@ ++!!BHú%î &dÿýÚ?¦ˆm_ÿÝÚm ++?ÿ! /ý ! /ñ ‰áGK0üB/`7~ /! /Ÿ&HìRBOPìsBžF5âðìhrþ@`ž† ++H?X<€"ýúµ>úÚŸÿõ íD!`DQ­:D"E(»Di»Dö E D!bl¼D52¼D!blEDbobúbfdTæUuUõS´ÊääÞäZÒÜìÞÖÊÐÊ*ˆ 0Û[ýœÿ)U暬’@ØÌ«ò˜‹ PFš“ oâx!ÌZ?FWÒWœW°WÚWêWŒW`ð’@0 ++`†Y,˜ÛI!XRH'• ++ô4 2¬3¶ Œ`‹`V˜Úìù/äܪT ++˜ÊðÒèhR˜äÊú ô€3YpÆHÆFHÆ;ÚWo'Ø9ÿH%ÔPÒÜÌÞZÜÊîÌäÂÚÊê’ dê’Q–Pê’‘€J×’"šØ’ !ú !L  N " q ++ÜÌìTT*ñ52 îÊÒÎÐè 2&±ÆÂØØZØÒìÊT:³aZîÞäÈæB„ØÞÆÂØZæÂ.Ji“PLXL1È¥Pè ++˜O"t” ôpª Gt0h xéO(ô Lo ,X@X}h¦ =@K’’^6²–ÿäàZÐÊÂÈÊätŠÌÌÊÆè\bbr— f „Q—N 8— (–.Z.\ "Ä^Ä€¢hnb,EèÂÒØŠ?d`hØ hØØI=Ó"`Ó¹b¹ £0`z˜2d2ZÿØÂÄÊØZäÊÌt¨äÒì\bbnn¦ j~˜DT ¦L=©'d|ì µdµˆÅ"t–h?PÜÊîZÌ–ñ`Á l?N ?'Ã'f?*š?hÑ€€{, "6#ý (ý " 6÷2ý 4x4H4f Xf? ªc ++Bí ++Š/Š‡>¸ 9 * ñt >êÜäÊÆÞÎÜÒôÊÈe[¡ZÆÞÈÊÈ@ÜÂÚi[ð Bl x ¨ÂÒØZ| Sý4  áà’å\^ã  ++œ^ãô ++Ü^ãÞ ++G^ãÆ ++W^ãl ++g^ã! ++w^ã 0’˜3l0°5?„å T0ñ)t5_‡ÄS"@ÄSß/ ++ ’å Šå$)SRX7š¤4“ ’å  Šâ<@µÿÿê(SM 0 œ4_|ügüh1 _|¼Ù¼.ÀÿØ.&¹ÿ+‰O$>$/A$@(@kÿÿê +u(Ç šå @Šå’å0Ó_ÿÿê¥0X@3 XWX?„å`í`.9øg‹ªîº^0’å  ´G# ¨kq\/Üà\ ¨ /œà¨`5`$`.¡h¨\¨.1Ëø‡ƒFú ++@Ï‘ÀêÜÊðàÊÆèÊÈ@fòB€Bp 9 n"Z| ++†ökX^㉠++˜^ム++Ø^ã} ++F^ãc ++V^ãG ++f^ã- ++v^ã ++†^ã ++–^ãç ++¦^㥠++¶^ãf ++Æ^ã` ++Ö^ãZ ++æ^ã ++ö^㸠++0ò7ÔËÚÞ ++ ++28†ÞlXl,Xl˜lAìØ€,Ø€/X,l :(3¶"¶¢; bͮИ<"Y¦Íx®Ʀ=ð,¦–|_µ/å'w7qVü,/Ù"Åþ/ "¹þ/='æD/Ñn4t t+tžip’å’:?@0Šåþ3”(*e(@0šåö3. 0ˆBKJOp„åNˆ.ù(:" `Š€ñ0âSã ++0–åSá2 ++âQã0“@, ++æAàúÿÿà–åH^ã\–å –å–=/ C"RP ++˜˜’€/Ó˜'͘ð0’å<àâ ^ã  ++^ãž ++PSã^ ++SãPTO€Xâ?Xëþ5l8Rò5O0šå.àÄr@²?(Û`< .ïÿæ7ÛP ä4.I <°ü( ² ++"0’Ü0l*Ñ l& 0h² ++P² ++¥ð.] ++² ++øø ++ ád ÀÁdyœùœâœÛœ(*] dRœ/• œ @/ìþt:x\#çþŠ C’åæ œ–œœ â:ï:†X:PvP#f`O’åd dVdD„åh îÈ$FÈ< r¼¢Š(à „°Epj ++wàäÞÌÒØÊgjI n°L³*š³Fj ©8È ++PG"GXIUxBlhr"n6!H!Q Êpñ"0(˜#%`‘r )%ú)ÐxBr  L± Z| ++—ñT^ã" ++”^ã ++Ô^ã ++E^ã¿ ++U^ãt ++e^Û!u1V ++—%H7£ Ø£ .Á_ / 0C ++/@Š×+k Rà á@ŸóG ++ u G@ G' G ++$©í¸«±«e«a)/aCdC/‘C'UCNÂf¯! îÂ(Bt Ø ÇSTãj — s“+e“@šåì§ ’ ++bBr@'PâthL#Tº„XE„x; ÚMË·l‹ p¸ÔIÏ'êÏ(^!vÏx¢X8Rjr8²`E‚z({EÎÞèÞyM rÂMGHdH3z „9p8û*´$RÃ$h/K ++`*ò@(|—»0~Hc„ci †  Ð ~! Z|´¿ •¿¿·9 ST .T(T!à’«; /Hà; $¤?LSÙL˜HŒX ŒXDÌSãWÝÌ5H (Õ,JÒ¨Ò2¦¾ 9‚Á a˜ìÂØêʤSˆ:2Cpâ ox€ ++HH2äÒì>0o2‚ t„tVt6ê ++¯b8Jr8)ž%º. p(: 0#ˆgk†óˆóòóQ ++pEàº#`PÒÈŠÈvŠÈî.®!$Ó %ªÓ 552¤Ðæˆa%8Z7' ++HÜ&)Ò ++p)!8/- ++ %/B+ ++( ìtEjŒÀ'—æÐÒÌèZÂäÎr'* /d`À'N ÿ)Œñ'vñ*ñŒ“¢`EhŽJn!äÊ8ÕZÿ-æxí) /db=X * Ž ¶tf<^MÚÞìÊç(f¯ d¯Q ¨¨Cp’i†xEd”³Ê1gZàÞÒÜèbb³ ',0³Q? ++ë) (šë)–X0r0*Ú”) Ú–žûÃrb˜TŒÌk0öÂÄØÊZÞìÊäÌØÞîZÆÐÊÆÖ˜/pré 8,Ä]%Ę .1l ³r`šBVL-ÞÈMpª jªT¡š¡L¡y^œ@MíÜ, /dl SŸœM/ { Gœ ++PlUÊlv})ú}% Š5²hEPž8§bÂæÚZÆZàtm$O\bdb- dȘÒ-O ++Õ- '*"Ö-ž ÌCò„hEN /Ôè e`J p´G.*N¬ ¬'x'IXÌ'%z†|15Ò ++`,)6 ¤+0–2–á†ÂæʘÂÚÄÈŠðàä¡-!(÷''‰PEž¤¿/æt äÞÎäÂÚs/=1 dh’¦¢$F?l· f}^"EQ¢¶Ä´^b8‰*d´¤„ŠÕ¦°†H oŸ2ûÔ ++ üæ @Äêè@ÎÞèÀ L(ˆ ŠŒ.’ФPì) $ŠÕ2(Î:Q5š¨(0ð  B+8 –Iø :ÜàZÒÚàÞæÊZ ++öÒÜÎZÆÞÜìÊÜèÒÞÜæÜ ++@˜&ŒÀ á>0 ã·`"‹†Ÿ{bµ(|(¥?/áœso* d"^ó^3ƒ‹a»fPÃlïbJ³Ø7Ø("(Ûc30‹,‹(PP ++(Ÿý#1œå'œå/œå+qœcø:0ë`'bpz¬3 ãW‚Ðáœå$àŠå áœå(­&0áœåR­1áœKt1+᜗t@áœåÕñpbqœå#Ap0p"×3b«`b(béù€§kj½k1à€ƒjñà€å0€å!€å%p€å)@€!kbŸû0œåÿœåÜ·Ü#Ü$lÔ"ãàÔ"çàÔÔ"ëàÔü›v±ïàœå@àŠåóàœËwx@÷àœåcx+üŒ@ŒQ:(ô†Eò0¯a4ôS†å°†ð†ƒk‘ûŸ‚ûj%q$ šå—‚‡ió-à†å10†å5†å9p†åpÜ›€¨ÛÔä4äÔ"ßàÔ"'áÔ÷Ô"ïàÔ"áÔfó0œå<ƒƒSU:,Ô_mf¦Ð8ÄÌÌÌ!Ì%ÌkƒÃ0†å1†å5p†åhÌÇ|÷Ä?ÄlCÄÄGÄKÄO˜1SàœGz±WàœåTàŠå[àœw{±_àœå\àŠåcàœ§|1gàœó|±kàœåhàŠåoàœt1sàœSt1wàœŸtS{àœåx|üó€àŠåàœå„àŠåƒàœåˆ\ã€1‡àœ/±‹àœå”àŠåàœ·1“àœ‚@—àœåës@›àœåÿf@ŸàœåÿfòS£àœå¬àŠå§àœå°àŠå«àœå´àŠå¯àœå¸àŠå³àœå¼àŠå·àœåÀàŠå»àœåÄàŠå¿àœåÈàŠåÃàœåÌàŠåÇàœåÐàŠåËàœåÔàŠåÏ0œåÓœå×pÔÈÔ_Û:¨ Ø(¬l1ÇwQšå5à†k19à†çj1=à†÷j1Aà†j1Eà†×p@Ià†å§r MààQšåQà†r1Uà†ƒq1Yà†“q1]à†'f1aà†7feÿei3w1šåmg3šåqgußf1yà†çg@}à†åWtòkà†å¤àšå…à†å¨àšå‰à†å¬àšåà†å°àšå‘à†å´àšå•à†å¸àšå™à†å¼àšåà†åÀàšå¡à†åÄàšå¥à†åÈàšå©à†åÌàšå­à†åÐàšå±à†åÔàšåµà†å¹0†å½†åÁp†åíð!ù;è*á€èpDH"Làìn+œåqxS`:4Ø8Ø<Ø@ØDØHØLس!0†å%†å)p†xB†å4`ü Ÿ'1œåœå#„S=:8xˆœHè3h'è+è7Ð"/h(h"Khl‡>¿‡ä‡ä‡§f1à‡ì1à‡ì1à‡ìq!à‡å%‡þ‡h.#Ð#ÿ0pR«Ì4 ˜ígkpÃi8ä0/øÿ((/('XP@T@ø"#áø7†X¨S¾:<¬@;jD   H Cp†å)À-W‰145D9T= A EÏzIMQ”\ ++P'àœåÐCàœå048è ; # °  XXp\8`<dðh˜l'ô`H@g:GuÑ*¨0L4L8ðDJ Q0†åUp†åYЄf`Eâ^Ä1í,‹l\ ¶1à†01à†(1à†X#@àœå'Ëlñàœå+à†åàœå/à†åàœå3à†17à†ñ;à†åàœå?à†åàœåCà†x1Gà†(1Kà† 1Oà† 1Sà† 1Wà† 1[à† 1_à† 1cà† 1gà† 1kà† 1oà† 1sà† ñ wà†åÏàœå{à†åÓàœåà†å×àœåƒà†Ø1‡à†Ð1‹à†1à† 1“à†¸1—à†è1›à†è±Ÿà†åàœå£à†P1§à†¸1«à†¸1¯à†81³à†¸·¨°¿Ókø±Çà†å#àœåËà†¼1Ïà†´1Óà†ì1×à†œ ++1Ûà† 1ßà†Ä1ãà†1çà†±ëà†åï†åó0†ü1÷à†Ôqûà†åÿ†@1á†(Àá†åáœå á†åV!D….Ü‹>"^!p’ûoÞÂ*&/p:" i./m-:"kª@†Jp„åBB”*WB BRBQB’$G’$64 8.,·|@à†â"@{q<À* `ÛpH ãšÄµ+­I5p@ .$ñ4/@”+”O@šå¹~$²Ž¾#`]-.‰®%_`šåbR! y+.ÈþÃg’; .úýá-.Ûý(¼™.¤üjB ¦"(.ü10.ïûàÑÂ.©û›(}.nûìAr"ñFÌJÇJ 0 ++Æf@ B›#øª  ªÐ!¸pp!'¸'ºâHh 3#´ð ++ @$JæÊèZÊæà(I 0_ LŒR L`@ZÈÞZR&P;ÈM E © ='L¤Ðæ<¿ÜêÂèÊZÐÊØà"?¬®T"gãæZÞÌÌæÊØ!,ñ•óB!ÈZrLØc.¯ØÞÂÈZðà^Æ« ." 0bdhAJJÊ,Ük ++f?†#À–Ë?°²JÑRL¼Ì$N¤ñ@´$ÄêÒØÈZÌÞäÊÒÎÜI Î ++ ´ÅK?ºgK3¶K— H¶H¸HS¶Ï0¸Þ´ºÆJ'o¤ÊÌøCÈÞÕU!^+¼ 2Ì2ç¾ç¶I/¾çÆ/Àz?ÜÞÜKÀKÄK“#Úìù HÂHÈzEÀkÄz¾ÆÂȉR@(PÎRÊnÌn$>'PÃPÌÞäZÚ½"äò¼ð"ÖPÎP.kHÇTH0˜rZ)k/Ð/.P!8(WO /=!:dÒXÔZ sXZ«-\‘<4 ‘6.QØÊZFlR|ÆÖÛ!ÎÊ´#OZäÊÎK*PÌÞäÚÂ`LÎÒæèÊäæBƒ/¤V L#¶ò% ò tOGð B'æ „§È3ÂTãr*`ŠâW  Vái**0 á' “à“å@^ãšW ð ++ à“å p“å“å  á¶yO° ãiÏ"nÊ‹÷. J|*`.0$Õ¸N‰#°Œ(Œl#D³³‹.6 ++}}á°å Àå0å nzb¿àžåà S àžå Sàžå ›»àžå#àåBs5à‚Xuà‚å p‚D’‹qà‚å‚sL ã; + .âÿ« ++.Ãÿös.µÿŠy§™eÓ}1C žs}úHdŸ ñ+1ÒšåfÿÿêÀ^ã¢t€‰ ++ “åx£þ0’å à’å&^ã|oq%Ê{ ß ŠåŠå0Šå È¢œE  È@R*Äšå0šå&ž…G ãeÛpp ãð1 ážB¿àŒâ°šå ±›–ž*–ž ó @²u¢‹vž*@nž/!0jžpjžÀ¤O&p ã|åz3p€ˆ€¬"× ôn ã¶þ §QË8`žåâT~þÿ ++úœ¿ hC˜ ^þÿê€^ã(µ1“ä3Sá S/R ãà=Ãpž„Ë *µ Ë Oçÿÿ:ø,/E ++;,Õ< ,/e ;,õ<,/… /"à .¬ ƨ/¢ #' "ŒN¨¨N¨gp 0À À ½ !’å ‚âà‚À '\ À - ‹' OÈP(!ˆ #* ¸ # €8 L€å0!Ð ++ŽRá  ö¨À€ ++(Àf†å Œ ++ !© 0˜ ++e†å¬`ŠÀ.(DL!žåë.Õ ä*HàaÆ<”5°`ŠXj™)5áŠ4H)( ž í:¯ ã^〠ºX1<'áxL(5üàŠ\ H)øHãH,'ôàØB(D.P/ !Ò,!ÒH6û žÜ,8.ò ++4 ö"ä ++¬òuB/× ++Ÿõßð(?÷ ž(/¼ ++((ã´ *"– ++Ì&Ì*ˆ ++ Û° Ðy( PÛŒD/O ++§lp ÜüCšå¼qX4X !†# íX / ++2 / ++2  pÙGHí¾¬*Eï Ü/´`À7&Æ À/¨ À4ÄÛ4-4 ãÏB¯ŠâáåÇpžåpW q¡*B¯ ++k]î%   æš° ‘aà ã áŠ-áÛ"?áB¯X /A b9 *¸@Üϼ/1Ä/( < S†å+îìä=/ ä/ôä /çz•¼¼9Ï0žìÄ=/»à#­,ä àLÀx ++L/vx ++ÄŒLNŒ,ŒÈŒL&ŒŒÌŒL/þŒLŒÐŒLÖŒÌÔŒL®Œ\ŒØŒL†Œ ŒÜŒ`(ìÔ 4èÔ 4ä4/àà 30Ø4,H4(H4$H4H4/àˆ ++7&­ˆ ++/ˆ ++;ëˆ ++`/)!è /Rˆ ++ /Eˆ ++OÉ   € ++ /€ ++ è/ü*Ÿ¼:¡ðì /µ"ì"Öì œËœ Ķ¢ 0/U# ¤ ™  È  0õ r g  $ À 0/•$ @ 5  Ì ( 0/5% /l/ÿl* ++íì L÷žåø/螢ð+/%&ð/Ãð´ð è/ŸŽª/ 0ì+/'ìyìjì*HUÔ0È0ýì//h$œ Јà 0/( &ýŒ/÷0Œîš­/àŒ/ÙŒäì0/‰)ì/³x¤ì dì Ôd4/u*ìiØZØ,Eì Øì4/a+ì/dœ ÜœÀ€'/ ,¨/ë€/Üø+ÇZ¬ è”4õì/¡”–œ ì”@/-¨Lm*€/cj³ ´¤‚ûAj³8P ¦·&/<4 (;/Å.(o*@4K"ö! JªH¾Èc0€å €Ü€ŒJ/Î|„pŒW2¨²® ¨ˆ°|[|2/„| ° =`x /=1x']Ö¯/P¸ p+Ý + Ô1!t. 4l(/÷<ÐLäx* ++¬u‡Œš­/ÏL ðĶ¸¹ .äô4°@ ++”&/Ñ3ôO*„ðgð_ p‚å äqä "áä"áä @/\<@3€åücMøcM ÎGÊ® ¨848 08!†® / ‚®#¬me'‚®#ØÀ-Åè-²($.ˆ¢§u±ù <@(*< .íþð.Îþ<.©þdœ(u(Q(+Œ.åý(.½ý(–ŒcXd.2ý,<.åüÚ[A.´üdŸ<<j<U<F< < <ü«AÕÊ«A.¤ûd<€<Z<E<6<<.úú<ëĹ’‡`U..#úÜ.ýùÜ.èù<Ù(.´ù˜`§ùÿê0 “åD-Î!’åànâ ác'HàX € ååkl¥i#0<2!0ƒ<2Ÿûÿÿà áK0sº®K#ûB®Ó«ƒ.Y÷PL><(÷V®.ÑöÜÀ(.›öÜ/ŽöÜC/RöÜ20 Ä.õõPèÚN¯.ÅõP.ªõx€q.cõx=("xP/ßô  |X:naŠå{ô€  .ZôØ.$ôx æódN ãßó`.Ïó€ª(1/œóÌ6ü d,Ì6ƒÄ0Nƒå~óP.îÿOWóÿê$3 /©?$3.Bó$3.=ó$3"›$3I„ ++`P&Ì`4ü2/Rü2#/>ü2 1ü2Y/ ü2/ü2.õÀPü2U¿S 0` /Ä`¬)A/ž¬)/Œ* /ƒH/<(  /h @è34/¤à #7&1 #/è37 ZT^Ü,Ì0I/Ñ02lX3#X/¶§^„Ð/¡ô/“ô /†ô/˜`\7&_\/A\4/0ž2 Ô/`4&o¨ Šâ¤à0&bYG¨¨°"òˆ „/ç” @þÞ¨×(/” /Ì”/à”/·”/©4/ /œ”4/DìÓì x.ÇT¨ p¨ /cÜ/H¼0T7ˆ)à à L//P`K/Ù 1TŒL/±€0XŒL/‰€0\ŒL/a€0`ŒL/9€0dŒL/€0hŒ8ì/FÚH1'xàÔŠÙ,ˆ ++1pH4lêæ/‘ | ++$!O†å€`L8/u L8o/O °/A Ì ++ /4 °Ì ++Tà/ú  /í  à  /Ò  Á¨ ´¨ ,L/Š ì".`ÈŒ4qp 1&A p /# Ì7(Œ4è4? ã< /•T< /æ  '/Û ˆ @ 't! t!A$ CUl!Al!²¨§¨ (¨Ï +Ý /€ Ô)/q H ð/\ è$ì0/ÉVì6ì/' ”13/ ”1ð+/¹Wð/ë ++|/à ++˜ |,0/YX ¹ /® ++Ý  0ù &‡ ++0.÷0à/z ++à¤0/Y¤ST ++*„Ø*û/E ++/4 ++ '(E0NðI/ý ŒT/ä 4/Ó 4 /Æ < °4/àÄ2 ;H0@ 8W4G94G5Oàžå, ++4 @ /Õ]@ /ü|/ñß @ @/}^àȨ½¨ $8/_ /–T/‡T/à@ /r@ S/ `ìLì/=, +++(ì€;ýôô/ñ4 ++3/Ú4 ++O/íað/µô ¨ ˆ0/‘b¤/‚/wœ> ¼@/9c¨N¨C¨ ¤>H&Ù @*q”¼1 / $TQ8DËèC( l /ãìO/ÕìO Èó ìO BàØC x ++/ `tFƒ8 1jäELäE5Oàžå$ ++48 / g8 /Ô/Ô 4|@/µgÜÛ C/Ðü¸3/Uh © ` DGd ¹d‹„C/|°+/g È3/¥iìAì/2¨3/¨O/•jð*ö¨ðç„C/àÜ/Ò¨/ 0ì+/kì¬pDì)ì/÷0$/„0$&àW </oPl8.J?/@Ð9 ˆ†òd`% $0/)î00P/ém0ê`D/Û0+ÆØB ŒT4/Õnì. /– D„ ä/~ÌH0/¹oäXXDMœ T€L 0/Yp & /òðl 0ù /ô/åÔJ+Ð(C p4/åqìªì›ÜE,†DtØ0/Ñrì/`xUœ \6ù &/qs /. /lÝlø/ÿTJ+/ê.ô ä4/Étì/Ä4 ++/µ4 +++ ì dì4/µuì/zäoœ h¨@/]v¨/F€/7x+/"ý ”4/Iwìü‡ƒ ˜òHB €Îð/@ƒ36Ä ++ /ÉÄ ++hNó´¨E èE/¡0c<ëŒ7.PˆjòÈ”fò0/s0 ¤0/ àÐD^ÐD –õ€hØD ÀØD 8ØDX8ØDl.›ÿ8<†(q(X(Ex0´ýLD.×þdÂ`D³ŠdYdD<5<<.úý<ëZó¤.™ýx.sýx^<O<)<<Þ`DÓ¬.¡üŒ{(cY<.3üÈ<<.êû¨E¹.¯ûPŠP.uû \PMP'<<<.Þú<ÇœD¸œD’<}<nP).õù/êù\A?è,/¯ù\AŽØDHD.1ù$ì.ìøݶ«‚.wøÈQ(D(.øð<ù±¤¤ œ·œ ++ ^H 'o>Q‘ †x $ 2´] ++Ø‚Ÿ. à¼]]´?§Œ.ôHl ¤58ä9<¨ ”.¨ ¨5 X .ÄÿÜ ±(.œÿ ++‡dsiB7x(ä¿‹.þ܃(_/FþL ?—«/þL ãT"ªýè /£ýÀ /“ýÀ //uýDVN(/+ýÔ /–Ô .ýÔ .ýÔ "ÅÔ D® ++ä ++/•ä ++#/V tl)¬ =V /OV/Cˆ 8À¤ ¸VEë©@ 0 ãק?0Ž4/4ì&ƒP/ífh ++H„/ÒH„H#ÿpP±P¹P C«¤L.p,"¤;«¬4$"–Ð4& p, ´Mp?ÄÕ´ ++<žå€/p¨!@/[@ ô" uÍÊ |qRšˆP9*ñÊ4S/-„4S„/(!,¬‘D  ãÌïÌl3›Ì÷Ä A/L6ÌL/®L4 8/’8œ˜"/|öð @˜"|85.ût8/YB€8/H€8 /;$$؀؇€å €å 8nT°k#D/œ pÔ,Ô9"êˆqÉÌÔ4 ØnpB}&toÀ5.°žd\ :(ßL0"ç༜?\Ô# X#XÀ,Ü.œüD æx'<(/è€ps°  <ÔÀ  ++ŒÞåŒ]Œå Œd/¾üp8"$àä*(àä" Ü/püž oüA¢üž@•*Ðpn‰pnˆ/tì DäP¢¸ ++Œ/Ml ,\ T:”*ð˜*x{ø ++ ¬)#0ÕÈ¿x.¬ÿ4™…Ppd;x% È¢.ýþ¼Ü ‹®Ú  HJ ’å ¡2±› Á  “·ÜO° á‹l   % ‚ Xà ákˆpÜ0—刱ˆ Rp†å°¨/ˆ ++žê .¾ý8±( Ø.zýÄ'gýx‘HjH ˆL¨ ++,°°ß´)Ì.Àüž.‰ü¨.püŒc.Uüä@('x. üð.óûŒ"Áû4.ºûD.ªû¼/…ûT/wûT//YûT©,.@û,;¬íÒ„íÒ@ tá ”LÕÿêÜð"2B  Øø©àTã›à—åÀ¤—x 1à— ++1à—À1à—p ++`°—åÀ˜¦ŒÔ'ƒÔCÀ‹å 44p44#4]444J4ÐPÀŽâ0,,9È©0Žâ ƒå,(,0À,,,,,, ã>@ ã44 80ô°á.Ðÿ .¿ÿ®›ˆ.uÿœ@ ++²#ö/ ++0!0ÈÆÐB'à  ++ 8 Ó5€¹x¹qg ++—ö¹Op—å *i ­šã£óTs¤¹ï s¤+Å:¸0pšå+f@&Tã§ç”àŒà ߪD ++ªÓ0 ’ï ++`ã)‚åõ®¸|’@Šå Šåà‡ *E»€q @šå š¯ ++päÿÿêà’pã) Žå g k kDkW@†å0(á ÷îÌâ¹ pàOpšåˆËgöªBä (Ç0ÚMÚ/pë/¶ Õ×*° QÚbTSã- ++üêÀ_ ++S㤠++iÚ`^ãýl¤B^ãû0ë ùeã@SãË}ã@Sãn}ãS‚ø?US‚øzBM1ýà´ë?pM$ü£¸ë %âÅÝàš)⹊øXxì À.EÀ¾u·)âR,A,/±,D0PNÿÿê,üC8=âdAAâ/–ø_l .±È®l§l"#l ˜²5@Ž ++¼ @‹ä€ ä*1€0E(,`¿¾ÀOàåM`йˆ^@šå hN(  5  áÌ\°&*į,Œ \´è,ÙÝà' ÜÙÝ eÝ.Ïÿ @«ÿÿêeè ܃´Q´(/´è€@ ãTãdü±?ÂaŠåŠÈq1I žM”"Qà‚€ ‡å ‡åcÛ"¤nå *ùåp$‡Ð1P&Sã#à<0 ã´ ŒìT/À ¨;ÆT+D=Œ£à0 ø5ààh)Œ1Ÿ$0Šå( Šâ ¢üÍ(v( Jâ$0šÐ( ¸h—T t$<ÀjÜ À ðuÜ"@¤P äY!š X åX "ZïÈÈ ,L¤°&À84$< $Ð@°(¼B™  È?šå „ìR ‡Å= š8 ÀôÁ­¬Ÿ„<bŒ.óþá„D&0àŽâ¤°˜º.Õþø¨0t<°.a °Ý &Öý°› ++Šè¯À0¹Hô¬ . Tœ0˜QDO<”4 ¤©”@ ”mæ ÝϪ@ .ñe€^@ °bŸ ++X»" àt /˜ùt*á/@D 4ü~¸ð ++à1àPð9ð  /A4+”.…4øÿä.ÕäPäIä"Ãä±² ++0’åà’-ì   1à’dl<@n $& ® q$ V•”  #I0 / žÌÀ V0‡å $ W¼õ„t"@Ð X Ô 51 šQX _àå%ä\ü& PœT¨ Dü« œœ 8ÌÀ?]ïOd 8-$Y\,=¼>1š™,È¢è ©,,° 1à”´œ`$ šå  4  ¤RX-F ++¤ {¤R¤Ì”Ì fà=”Ì@_¤S,Šå0Ì p9QÄ-P*<`pä_ žå@t¢ä?@›@ Jâ8@Šå|. ++4À€¬)`€å& ã p ++K¿…p4˜a`@j°œSàžå 1 àžÖŸ ã4šåDa¢üÿõDDTO áD¤4*)4 ”/;L+ ‹×@à &àX:” Ô x/È.`( ŒlTüt —Ö @N€ƒô@ ŒHLLôPôb<šå, T4ô nü|I  /ìð˜¤5`/`ÐO}Å|0/Èh%Vh% 6<ÜX(4?‚åì“/°H7(+d˜.ñþ<Ê.–þPqI1 àÆ ÈWÜÌ ++5‡ˆ¨ÄT¸X¸@ á¨ŸH0ŠåL Šâ<¼ ’ü!LPL JâH°-@ˆLŒOýQLðW_ 0‚åDŒŠÔ?x@<P@H@ ’ý%"HHÐ ÐbŒ ä di&Küµx!(%0=Qžt 40[0‡å(_ä _ä“ ‡å‡å0CäD$ ° "8 ¼ +Y#@à á”<à58ðX (—€o€XÈW$V ¾ü `šå&` ãL‚ÈÈP`Šå t 1Rã?øÉ ++`Ð@x ++J¡$Ðd0Aw@†å 0†(@Žâ`H(t(@( LLÏÉöX`è ÄYü jìÿ%üø "øø øÄðõ@dç׸$P ô*•&ø7àøk€ÝÈ,/¨û¼$L„L^ãûÿÐ#f˜6?Nâ¤ün¨M'¤ 8IhÑ æž€q,0Šå0@Š ç¨ç@à ãD ++ÈÌ ešå š1ä ++'Øl /1(l X "°ÿĘ3 ÈBPã“ÿØÎ 0/Ìú0.)0=ÀX&6ú0"u0dxÕCà’å$ $<<\/ØÍšô0á ˆ`Pã# ++¼9àž¨.D`Ì@òÿÿsþÈ küÍ)ÈKšåãtL"ìÿ(4  ôÌëè¸@Îã0„]ƒâàƒ`.*p8&Í+a0žå!à“`\5òÿÿ\Ìë” ,_àŠåÐ7++À¼@šåÚõ+” ðÓ”Ô;BšåàÄ \ Ì+™+Ì àšôÒá-9$,Œœ$# ++Mñܘ,_0”å)ÔÔ€â @”åÙpHóÿÿêœp *…,”Lj)$Ô)ªÙôÿêx½,0€?h ++Ã@‡å 0‡å ‡åè  ?š°Ù ++ **1-* LJÌ  ++” ƒä /ƒåJx\DÐWÚ(ÄЯ<‘d%/ãþø.ý.ø.‹þ”/„þœ"o/©/œ"//í/œ"ÿŒ/1œ"ñ¸RÒp%ØàÜý&tÎ ÿ/blþ "fbþ€%ÚÞ?:/br: dUþpæÜ×ýObbbb5 fKþ&.Kþ? ¢:þÜ:þsþ ++4Þ4§þ =gþMþMþdà ++@àýW† àýKÝýæˆBì (O â+3âô#’åG^ãk ++œ^ã ++\^ãÁ ++÷^ãi ++Ü^ãà ++·^ãÜ ++ã"k á ++W^㇠++g#Cö( ++w^ãW ++‡^ãQ ++—^ãK ++§^ã3 ++Ç^ãô ++×^ã— ++ç^ãM\\\ ‡ã24ÿ#·1 ?pšål 9æî«2 ++?£«2/ k jÅkWÌcÅ#?ô.ôhg2ŸÛ^%`#@+&##g2r't ´5 ö»Ë3 "åÀÁ ºË3 l /Q,dŸ&ÿÿê‰8Ë3/5d+'5/½/5Ë3ædË3 l.QÈË3`+®ó0p’å‡(Ä/p×Ý,Å>šå²ót ++¶/Op„å3tå K +YFô0 šå ++×7(Ø(SB$ x!Xx Ð$Ð ˜A˜0·*·*/  $+Ç&à ++&/ àH k09èàp"0¿ ++"0³3€šå á#9CÝT.¥T¿T¸ÀÜ("Ë710ß:Hß:žŒëSB/7€0žåžåô pžå °žåg™!0Š,¢ pŠå$°Šå( C˜Z];˜ã€pšå$°šå(÷U +z³ås!—  )·å˜[  {=ƒ`Šå á „1„ kÞ 64F4@410žS4!0žQ à³H j8 Ü"à0< n½ ÷Ìl„ o4 ++„ßëÄ Ä   .m ++¸æ÷©ûᣦ£”.9 ”$”è@’ ++;/[À g$g«+!w £(/{£(œQ£(˜ "'☠d]d)·!h .] hŒ>Wã%O ð §éƒ %ø³0tA`»`0£"$Ðd[5Ô,»œ~¤.Ý ¤]Dap’å°’¸.ý- ’T5TPêÿ„»ë0B°ð*0ì€ óKXÄX.5X?<|,=4C/5ËÞø÷˜Ì€C@Œ3¦3$ÜLŒYŒHL 5 ’È.Ü9(v; ?=+%?=0\,¬< 8ö8 ;KÀ„.¹„§P ða|„PãÚûXH 0¼SN*—. àI žç¬ ¤3'00ð—å#c*Uœó 4/@8n Ð CèÛ0 T!'03Œ0À/ ÌF 7Qàî! «à.™à’ŽÿÿêšÄ"ÄbŠÌÌÊÆèÆð€Bä8B$H'$ê(:‚ùt+_\bbjfÝ hpîèA</bp< j'æñ Bóèó¹õ*`õêõPõðHB`8¢ì ++ B( #h$€#Nð&k7æÊâj`ç lçDî ±F=°"P° F ½ð½% â½Ç€Bò (È Óý°°X‡Xÿ ++˜^ãi ++Ø^ã* ++F^ãÐ ++V^ム++f^ãm ++v^ãH)WèFl+^ çÖ¼ÉK;," 0 - ++7÷€” 3´×£ “H1à áK0Ã&È \uH ' L , ø ˜Ô .é ©P¢„+J ++eÔ+JûIм .¥¼ $ Rò;Ù3ø0*Uïëg0|.eÀûI O,>üü/Å 8 $ \ ++Û »I8$$4_üþÿê0ÛH$EX$/ °È±`ª$/ p| ,9`/É$/Tà$ p ++.ÍÄÌ>PÊÆ ¨ÖÂXBô ð STã}%‰$-p—–^ Â/mÎPOšåé‚OpjBòÈb8òô(ÉQcXBT¨‚XƒÂø¨ÚžÿtÓ_\bbfj… n¨Rúöô:/bn: p¦ ++@¤ö¤(¤ µ=ô'êô"^ô !v "ø"8P ++(ÄBêò—`ƒÀü&}hø røú[E[ü[x ++9ì8Z „+þ" \{ ++ &h`¡X DV *hV þV % âO ++p¿€%R! {%ÒÌz… &hb¾# C/„½ )¾ !Ê`Ê&¢¨PB! ØüüRT ø&+e&OšåìðóbB!  €1Ô ¨äÒì ++ U70tS”\S©›! ì>tS'£tSQà”åH ð ”å ”å0”åà?0^ãP-’ÿÌ#!…@Žã!¨l€('2(8XT‘T‘TT X?‹åq'HàôNy ±ï]X@Æÿÿê$.hT”= ++L= ++ŒX ŒXÌ xXO ”å/Ìàõ „[6à-0”!”.0„„*ì+ì+À$JÒØÞ¨ƒ¸#X!6ïäÊÌt˜ìÂØêÊ\bbdc ð$bƒ!Þ<b@ /hfÞB:.!: ¹'b'd:%!å& ++(=Z°x#ö!*s€ØÒèÊäÂØtœtñ  c! ++!W&:b /hjc@)¶¢)¢%!¢°p#J! .N•ÒÚÚÊÈÒÂèÊPÌ î'! ++˜J<vš š‚x#à!šJ ZPlš nš0J6d^ì5 !¦H='ñäÒì BPÞ ++©\@ë ++aâ! ë ++åVë ++b#º!µdÒÜØÒÜÊd¥( /hpZGC(C¼C*€C( òb8²ò )ªƒ¾!/EÌÂØæxf/) hx ++ F—aj +$ˆR¼!ÿ ++6èäêA¶ /j`‡E††?J80 ++#3$í hØ &jbHØE4 ++(FZÖ4 ++%ºT4 ++4 ++i6!99wL!,ò# /jdcI===PÊìâR®! âgàäÞÌÒØvj‚ &jf¿ ++|J|š| ¦!(Lp !"j /jlÁGv&!&¾¥`%(!(*ðN‘ /jn•H–(T1#€¹Rª!*+6ÜÞàRh› /jp¶F³*³0ŒˆXA ä,ä?òåp,å8 ð`B#T `à $ÄêÒØÈZÌÞäÊÒÎÜZÆÂØØ@µ¢4Šå Šå°‡E9H$"  ÿ (o;1 àd$@ på{;q<šå0°ŠX!Ã< j„ç™Ã<10°š“lS@@Šå@C9ƒ_!p—Ä Xˆ'ô$q‰0›å…à›ø$1‘à›Ü$1à› &1™à›[:1•à›ü$1¡à›F±à›åDàŠå©à›¯@1¥à›ÓK1±à›+C1­à›+Cñ¹ ›åµ›åÁÀ›å½@› €"¹ @P0€åã7!à€0ÛMQ€âà€ä“à€åà€âóM±à€å à€â#à€gL‘'à€å(à€â+0šå/#|aà€â3à€W±7à€å8à€â;à€cA‘?à€å@à€âC3ä1šåGQ€âKà€‹£‘Oà€åPà€âS±šåWà€åXà€â[3vò%šå_à€å`à€âcà€åg €åhà€âkà€åo€åpà€âsà€åwÀ€åxà€â{à€å@»|ƒà€åyà›[J*?uà›5*?à›3G*}@@@Tƒ5&È$"3 ‡sñ0ŒåàŒâ àŒå ŒåàŒâàŒåŒåàŒâàŒå@ŒH€#àŒå&@ ãûAX(,§H00 áKsÌ ÷Qb&WãÙ¿: Àû<à—åžåHPã^—Zø1àâ0Îã àƒâ`& ãÀP+¸%2Eà›×\a0†åqà›+óUà›åà†åmà›åà†åMà›åø  A0„ A°Ƭ AqÛÿÿêXŠðû;@ à“åç<À=0“Ô+ÄUÄmĬ›¬ÿ“PPãŠ, ]/àˆ*IĈQˆ,dÜ ˆ ·=žŒ*QŒ(8Œ&Xl“Tl¤*¨ƒ|*¬/ƒå¨Xñàÿÿê`PãÆ ž#Dphk[ø.H;IûOjøÿÍ;I4#DptkWø?HšhO@ŠåPlr9Pk#Pà p"L@Àxt_üÿ­tp` ^㺀@Rã±Ô/ ã€-/- €S‘ 42w@†³{§k@€Ê@{ ++÷1 @’$"f„m*À|0\ H S RãM ++DîÿÿÜÐàÜ;@Zÿ ++ÔÐÀàПaÄ'qL ŠåL š¬q ++Ž átÜ ^ákº`ËW  áÃeÀ˜3(Y˜À¼P¸œLL PÓ}¿ ¨"àp×w 0¸ “å+S1Àƒp&S@CâÁH.ôÿ~Þ˜ SÀ á¿Ðð&à ÌLÌ/OüÌ & Ð"HÀÐè/L`D/­DØ"HÀØSL`šå‚Ü. à¨à@ÚàTàQàÜ BÐÀ“Tã6ªH `û^+t,]1€åaˆ1€åe„ 1€åièHmø B€å¨,Dvaâ@D ì FïØòÄΤg[Æ · Ü1 è Ç„1àŒø1àŒøT#Œ Œ¬uàŒåŒü ü‚üÀü ÈòèüËô(/€ûô;/Ýô=Ôó ã` á `–åÀŒâ&Vã©XMO£þÿê44üÀ&ŽþÌJˆ…ØØMtp—åàåÏxý—#’àå ^ãšà /‘à HÐJ W  &tÔ ‡O+p À ‚èO&À ã||m|€ Oƒå x/ðúx ¤HBžå ÀÿM'Zœ À -% 0ÐC“„â à„å „¼ À-„H-0ž|9D/±úã<5Ì` /Šÿ` $hÿ` 7Rã)Ìä:äwä( Àh@’h#Ìl„( 3¬¤H¤å¤Ö¼1U^ãÿÿ@ÿþÿ ++¼øð/ùð@'úÿêh=D0 át@:D@àƒá_'ð"@“à jà„â@Îã[.ì"0: ++ ‡àsà‡å @‡Ü¬‡åHQãèDÞß¼3à¨1å‰P°;å /É\@°ŒH\I@3Œå…`‰`lŒX@àŒåH¼X1'àŒH1+àŒX1/àŒH13àŒX17àŒH1;àŒXñ$?àŒåµà›åCàŒå¹à›åGàŒå½à›åKàŒåÁà›åOàŒå9à›åSàŒå=à›åWàŒ,"[àø_øqcàŒåg0Œ1kàŒ“\±oàŒåAà›åsàŒÔ1wàŒ¨1{àŒ/P"0°[”,Ð5p7y/(À—\ nðÿ1›d"0°W”,à5pS5(Àš¨ ï]x\"N\¨ \A\5!à›Ÿvd†ø,"Àckó•¢ ›å›å0Ü €´°\Aà†â  ˜€œ z”ˆ/(à` /i`*½`H 4ànX£U!p øO8;]`§”` Œ/ÂTF ?‡’Ä8/«_j"@ X 4HÔ¢ ")"44Ü7"0°H › ›åm›åІ€ #€4?o  áà›¤Ao€B O¿§‘/[û} Ô—¢</?»öt!ôA #Ã/ ì ïo, È  Ô  {a 'c ¨ ±(žŠs ++NÜ ++ƒ¢"8¤ ÀÄkL"ñ$ÈÄàID-¼ð¼"åþp/¸ /%pJšå[þl¤‡P!“xн ›åmp›åÀ‘œ/5çžG’¨7• ç¿°{m smD0Ëb Kï¡Ëbp _<0šåÀs4ØØÄoƒŽ›åm›åp 3  0Ð/pd  /0†Ä ++  ++N©' ¼ ++.ÂýHÚ¤è/, x ÿ¹, €'", xd¼/ý”ˆtˆ/,0Œ Z÷5)Œ”,”‘0 ”"^ç=*”_(@Šå”/( xOÿ­p x”s¿.¸ü(«—.0üð üø% Qã/8S”¬%¬`ìGQãwuažå Q÷8—8p)pypùh—8@X-XãX1€Q·8 PXyXÏP€/ ¨Pu¨¹¨¿j*@‹Š x /`t +è,1è45Xiè<UèD?è„    fçúÿêÜ/ Ð jœç0Ð̸@Êúÿê¼M/Ãú¼ô€"@ôÐ0›u jcy0›ux^šåîó´ÐçóÿêÚ ++B!.ì?òø NÒÜÈÒäÊÆèZäÊæêØèZèÐÂèZÌÒèæZÒÜZäÊÎÒæèÊäæ~z1=måä–åYÑMGÀMGpg5Ž1yŽ1a!"¦¼Œ"…NTyG+Í=F™NQ&™È#ÊÈ0Sahôg.5hdddƒSãoÊÕ.0#>@4#hCpÒ ++ ˆ&&9‚ S#jFÀ ÒÜâ`Îæ¦x( L® X-&ž*'úVC!4O…!6 L!8Â: LÈÞêÄØÊZ«~z_æÎØš!¨E o ++ÂØÒÎÜã„'ü7Ðþ"!J3QL!<Ü4N˜04®X%!4X/*8*8*:Qoo 0 L'ã€j!|ÂæÚZÚêØ!;!~ÖP# %tÆZäÊèêä<<#*@!¼*EÔêÚàP¾&1„P…Úà^æÐÒÌè+†+ (aÐÊØàÊä 8x2!ÈR•äàZÐÊÂÈÊäRÊ+1^(!<‚D0¨"D@ìàÞàUèÒàØÊHªs1À(ŪÞÜÈÒèÒÞÜÂØ÷Â20Œ2óÞ)Ž)"#ΔæÂìÊZÌØäì+-#TìTuØÞÆÖV^ZTîT0 )0äÊÂå6êÜè%-#WdÈEØÞÂÈTf&t2qØÒÄäÂäò¡B/v/0€/5æÚêÉ=!‚' VNàêæЈ¢/Ø%!ÌØ®6^ÆìOÚ-2¤$ä]¦0'*`äÊØÞÆÂê…ˆc@Š.8x = <z.¬Ÿ /®/èÀ%ÆÖ&ê&°ƒvE ++¿².¸<…ZÂÈÈäÊææ0º0”›FÎèÊæ•–)F#Y] ++QlÕ6æî§nN,NeÎÊèZèÆN.Nú=ÂÈÈ+ >+ ?!N\@@@=æêÄ@@@T@B@.äæ@B@X@Dß.ÂÜÃDCRC3FC-ÞäBFBVBH…ðCHCPCJ=ÄÒÆ@J@L@/ J± ++LÀ ++>NHPDR@TFVBX ¿Z ìàÚZÞÔÍGÞàZìÒ C ++bÒÜÌÞ]~ F?ÂÈÈE"?ÄÎÊ! /Ææ‡!_æèäÐÒD /ÒÆ! /Êâ! cêOàÞàÚ" OÞääÒÊ/Êð# OØÈäÄí /ÂÜsDæE ?ÄØÊ! Î&!ßìÆìè\æfdZ|ÈÄØÕÈ o^àäÊÒÈ n Ö 7¬ÂðZÊÂÝÿOÂÈÈÆ# Ü#_ìÚÞìbŸÂðZÚÞìfdƒ /ØÈØ/äÂ! Ø=ÊðèÊÜȦBè1ÂðT@m/ÐÒCOäÊÎ~ƒ 8#^ìØÈä\‰ /?ÆÚà! /ÄìIõ#(êÜæÒÎÜÊÈbd~Ù*/ÄÒ`V#8bZ+ :LqÄäÂÜÆÐÔÞÉ /ÎØ žJ Õ„ë `S9¶ÔQn~ÈÊÌÒÜÊ! m> æ² ?ìÆÚgÐg ®ÚEÒ‰ ?ÈÒì„ æï«Z]?ÊÞä  OÂÜÈÒk /æèk2!`^ RÚÞìÊ^… ++ bEÒ%LOÈÒæàGO ÆÚàBê?2ÚÞìÏ/Îà#ÏÄòèÊZÌÒÊØÈæƒð_º6 ‘ C_ZØÒæèGø ++"-_^àÞæèZµ#ÌêÜÖòbß ,#NNFÖ5ÒôÊGG!ÜÞ÷¼‚N OæêÄÒ- _äÊìæÐq ?ÚÆäëÈÄØZ|æÎØo/bl#ý/ÒÚ üOÂÜÎÊ< AT#$§p¦ (b7ðÂðÄOZèòà/ ìú®?ÄäÂÐÚäÆ^ÚÆä/æèW#4X5äÊÎ6NÈ /äÆø _ÚÞìÒb¦ è[ ++« R# ¢OÏ"ÏÒ®d® ?ÒÚÚ{0ã%_ÊÚÒè€ e&ŠZÞÌÌæÊèZwt?ÚÞìÔ ìœ ÏÌàæÆäZ|ÂàæäC è/fdÓ OÆÚàÒ9 $ššJ /êØ! B= /ìÜ! ?äÊì /ÆìÆ?èæè+"/Äð‚ /ÞäàO äÊììA ¡/ðè@ ++@ÄÒÜXe†Õ/ðè‰ Æ ++O ÚäæÃ?Îàä¿ Ï± ++T ò ++Ï.ØÒ $ì: fÚÂÖÊZ¸Kñý 0 ++ðÄÊÎZ|ÄÒèæŸèd‹/èäኻ ++ OÚÞìè°Eaì ð·Rmjmý /èæ²&ã h/æèh ´?ZÂbH.ê£ êæ Ò" êÅT!\ù ò ^Œ^)"íŒ ÈŒ / ÚÐ O ÚêØOÚìÜÒ Ý mOØÈäØ`* ! Kg^²rØ/ÆÆG df ++ÈYl /æèËÖ v 4ÒS#3o ++ ++L„$#\q\q7!^N#`*`*b*d*d*f*h*h*j*l*l*n*p*p*r*t*t*v*x*x*z*|*|*~*€*€*‚*„*„*†*>Ç *@± ++*B›*F@O*H'¦*Jî*ˆ*ˆ*Š*Œ*Œ*Ž*DT?***’*”*”*–*˜*˜*š*œ*œ*ž* * *¢*¤*¤*¦*¨*¨*ª*¬*¬*®*°*°*²*´*´*¶*¸*¸*º*¼*¼*¾*À*À*Â*ãÄ*Æ*ÊÈ*Ê*Ì*Ì*Î*Ð*Ð*Ò*Ô*Ô*Ö*Ø*Ø*Ú*Ü*Ü*Þ*à*à*â*kä*æ*è*è*ê*ì*ì*î*ð*ð*ò*ô*ô*ö*ø*ø*ú*ü*ü*þ*,#*&#*'#****** ++* * *****,Ò*&Ò*j%*,A¨¨*'#******* * *"*$*$*&*(*(***,*,*.*0*0*2* ¤#¤#¤#¤#¤#Î-e„!|µ"~Ä"„d† L# 5!Èʨª-.Œ5!ìî "i#dfxzZ#5!¬®è긺lnpr´¶¥Å5!ÌÎäæ$àâ;$$#('%#7/Ž5#<<’˜š¼¾ÀÂŒŽ`biÐ5#= LÜ/tv ¢€è%!ØÚX%¤¦ˆŠ°²”–¥05#…%üþ-,-.-h-jœž”* ê04#0¤5!\=^ Lf&ðòÐÒÜÞZ$|5!ôöÄÆÔÖøú1¡ZÆÎÆÐêÜÖ×4R< V=Ø2Ø/SÆ ++*) ++Û1IšΚ ++#íS9Œ#92&äÂcCÜÊðèìk?$ÎH9hä• •?ÈÊæF¾7 ¨äÒìZ|ä–&!G"cb"ck ÚÊN/ÜÈHS/&Æ"?ÂÉOäÂò O~ Ø\_9*  ++"Ë#ƒ "AÎC /1{7äÂ&K~) ?& ++ Ô¶cqÆêääÊÜ[Æ$?äÂÒ /Îò ÂÜOÞÜæT®®Ø­ #¤ 5P&Tÿn/ÒèH OÒÜÆäÞ  OäÊØT  Ò¿/¿ÌÂÆÊTZ|ÚÂæÖh ++M3ÿm¶œT<€¦5’P| ++<ƒ:Dƒ:¬ƒ:?#>Z@ZHZŠZBZoJo²Z˜ÈB  xv›È0—å0A½ÿ±n0‚å0¬ä2ƒ?Ø W›AˆAB0G²"°œk.°°S}P½å °å—ðGäN¶4N¯ûOìa—å—¼pR C/W#ÍpCê/Egê7èD/*‡êH’ ¶˜H/ÔH O«Ï ”IÜ?ØϤH´¢P.Šÿ¸C|<o(^O?MdNR6 S „åâžÕ(Äv²b>Šøoè#L ++P¸ ¾ /À÷ÿÿÿ=•’n˜’ÿ«ˆ¾ÿªSx#P0IC€#R C)VIsGCÚÊÜ褨#~ ++ÊìÊÜhIÐ:I :Ié)#TB HbW ƾD¾ 2¾?« ǵ™— SShö8KQ¸B#V  ++ @˜ ¡÷ä™6O†÷ä{ i ¾WÞ$Ikk D  ã^é ++5‚Š„/Od„/? /8$¨8?#f0%Š%;+ âÒäÊÎÌäÞÚZ×1PôE0k ++Žc T#†Za'ø"±I¹jƒæèÂÆÖ'öFæÒÜÎ1ôYk4ò "lh%.%¶c2+ …í€VK*t.r ÈÞZÂäÎæŒUCÌÒØØ*k5V>w ‘g#h#j2§ð#p#n&k§0¤Ð楪¸¥ l©#ø#l@9b‡¦ /lds­ ?4¤Y/l4¤¨²¨æ¨ #n*g0ªhU&b  #p€@#`ä#tÚKƒèÊÎÊäZblà/c;*+4r+p*p/•ÁŸi.ˆÍ0#rÂOh#\©5#tb®8ax#X ++X@8i¨ðB#x ¨iNiFi3csM•A/aI" @±œ8Ë ¡t •2/5Ôº³40ÒcHR#vrPõY‚#xõÌ@+‰#z  !ˆè ++{sèP„ C0Žâï.°$/%ìh ”Ä  HäÔ ++ ØÀÌ ÂÀ ++$´=0Àü§ä¼™4‚è p.p$m [MX / 4 @I2.p,€4( L¥1> ¸ ÆÙ¹T¬žŒwÌ`(R(E7%P q÷þÿê0—-/*Hà­° À"TÀÿ… À¬Àÿ0 À‰ÀF „ 5bº ˜° [ ++Š ½ ++` ++$; >u'¨@ q' ++8¯_ÈB#|F ÿ[zF |F ¸r" WÒr"  r"3`#}4 è~6<ÉJ/8&°J/ °J/ 0Gô%J/$ ¯‰ß( ß(j u²c J/Ù$­(9˜@@Bà; 0ÓO‹Š wÉc3‚TYMi(ˆ2*iÁ"t ++| $?„åÁ"É=  ++q€‡P]ÐB ~¼N¸/ ¤5ŠŸ™€œ!˜" m ++]"PH ¬{'!à—¸¦ä£ ´Ë¡*O0—å xM< ++ p ø ;¨< ++È ˜šbÈ .0L$pÙ`̾¬ùBj#€{'ðp ~'=/ €=ÿ•©€B#š µ / i‹.Å£0 Á‹!ö:©Oãkà—Zº*1cà—ž__0—åg» ++/×Rfš0¿ ++/°B/¯Þš<SRãYý‹"lé‹ÂÖ1 à’‹'²´” ²´ °@~¡.Ÿ¥÷ +}Ùõ¸"@z¡¦ŸÕ¯?´//´´4/1´'p\Ìæ³*‘Éõ&pX¶¨S—å_°—å”pÔW”2Xp8 $Jt¾¢.° . ./¶ïf— ò&E . ´¿¯<¡–?TãaÜHEÜ7Ü'Ü Ü  Ü$‡^ |ÒÂ<´rÙCTãRøˆPˆ"{*.,.WÀà"'v, ++¬‹Ø‹0# ++ Ø / –o †å `ŠÜ.èÀD\è2ÑÊÃè³ö ¦â°®Œå °ŒåS@.˜°3à‹ð‹d¿‹å @‹åÀ‹å_ü€Ö8 ++ œrÈb0 U4  SNGÌÖ0·O3à Qå /9O àå-"‹P<Î‚å °‚å ‚åiþ(ð  Éx{¤f—‡yH adS<F6(d.ðþ(.ãþ( Òþö­u–._ D.!  ¦b¦{Ð ,0çŸ>´_ Tã…ðzðˆð+Uð x_ëRA¼ O á[¼<Ü ++€ì$änä Äg¸¤ Z Sý ˜[’å°ž‰˜Y[áîüÿé˜êüÿàâ~ªaà”X ++8Pæñ A˜"¼³V.CàŠåÐZ5@àŠåê$ ++Ì1'à—îË1#à—VË1/à—Ö¹ñ+à—å0àŠå7à—å4àŠå3à—Ì1?à—Ì@;à—冢1Gà—~Ë1Cà—.À1Oà—~Ë=K°—bË[í::À.».®¹ †â2® bËq†â#à†å$bËs†å(à†â+⫳/à†å0à†â3à†bËq†å8à†â;bËêìq†âCà†å4bËÀ1†âK(ÑšåOà†åPà†âSà†‚°‘Wà†åXà†â[8bË‘†å`à†âcà†²Ë“gà†åhà†âkoà†åpà†âs¼ówà†åxà†â{à†å°†nËQ†å0ŠTÜ"¨ ++Ê™š‚«ò$ ²ê1 `Š€ @x&_À5*.(` ++»ÿ@( p($(&´$(;L$$ \-L Ð$7AÀèLö ++îz­Qƒå Àƒ< ++¶s ã€àò¿‘ `›å @”å•j `›å `žåU› †½ Œâl̾¯ÿ@ 5Ö…ò$p" Øòð/6ì üÊõBít" ØR±@šåXÞÂ"@š( € VÆ/åþÐ9ûÿ˜nËþÿ ++ˆû0J.7ûô" ! ‚#ûpL.L.Üúà.ÕúÄ®· <Ž( Er2O‚ ++2%Œ#„2%Àè`ç1^%–4ïÂÈÔêæèZÌäÂÚÊ"2-&]cM2P#˜û0Z<ŸØÞÆæÊT2#úG#–"V1oZÐÊäÊ~Î ?’"çï/+ 7#†1`°p°÷>ðˆX (ÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@PÜÂÜÞàÂææ–•@Ê@P˜>…t@¨òàÊR@móPPÌàZÌèÈL@PêÜâêÞèÊ@ÌèÈRR@PØÊèT@PPÏŸ)@PÞŸ%EÜêÚZ"sØÊÜÎèÐ@•iÑZð@JädR@PÒÜÒè§i’ZÊ@PâêÂæÒpFPæÊâ~ ÊR&èBER PJãß7Jæà 5R @P&Ž@@PPÂXÌðxz@½phR@PÞä@JÚÂà@!ŸÓ ûžò72@PP@"~@n9àÂÒE ^GPÆÂäDFGØÞÞà?dæÎØT@PžŸ/n5w@`R@PÊ@h÷GÜêØØ„g4Pg7ÆÈäb5ÒÌ@ÂPÆÈÈä@sL RC#V@x0_p@hRRà 3Ñ]ÈbjùhJ¾–Œ5‰5/RR=PJôÊäÞ„eàÎR#­kPsõ¢-K@PPb $@Peƒ3HR@FÌÜõí`r†äÊèìÂØë/PdŸ+/bl LQfR@PJšx ­¯°?æäØ)d"blìadzhÑ.èBl?`RR\p-a6IhI9äbRñ@Âè@ÆÐÂäÂÆèÊä@àÞæÉœñ@b`l`hr@ÞÌ@ÂäÚfd\ææ:ï&ˆ©]X¿ ˆVk oÆ¿ ŠŠ¦5ž4W)Ç™ ^)+$ oäÌèÈ0o ++Îbd`.è !lfê0#Œ‡<Vu ++ù¦1 Šn0#’AKŒÜ£m2X!”€$A#Žâm/#Bt-#’¤\=,\/Ö7?‚ LæùïL”n ;Ð#–’#˜`'&< <  ++—;“ ++xÌN¨[`v#š zhµ`¤©_#œ .# Ö | /ÒCE‚#¢]?#¤?_#¦]·'5 ++  ‰'7#žn À$0Ø ++ 0£/!0}?# uŸ#¢#¤#¦Â ++"0X··B^#¨¼Ñqœ†|3U¨“ ++ü=˜Œ('P ++‰q^ ++IèI'¨"?à-\Ã>W!h$/xcX*PNP?®’*x†ª†0%ž¬"<#®ƒUk° p ÐG*ß4PR>¸> 83uU"#š ++X\ê° Y)Ù°S£*rHB„¶3/ˆû/Ü/¸D/ÿÞ0>`À#€xôñ øB#° e0 ¦ÆÐÊÚÊZ|†cå#Ö1à—èééé!)ó% —å)—å-—å1°—å5·@0cQ):ëÇÍ+ÓO ‰‘ðà†å †å†å!†å%°†å)ÀMgÎQ†åà“ù<ê"Sþµ8±›ÿ¬Vî¼3^ãJT}9 ++0—}.$E$ ++(ûÑ=$ 9&ïÖ3à€Ç€Ç™€å 0€å €ð “êA#äVËñ0ÜWÜW‹Pð (^ã® ++0^㧠++8^ã  ++³=),Jº3“å é( d"0o͈jx½Ù+Ñ+S`šåæÑtA/1t ++ûÐä ++P^ãb ++X‘0 ++Õ/¼q;´q;£é/|+±|0 á€ M1 t…WoU$@Žâ`þøþø*uþø h¦1 ƒËÔ_ àƒå#S7>á" “>U&¦U&U&Û½¥?pšÁ<*õ¡Ó½' ßÈ -Oñ8»(¦E‘<ÆúƒtL|E ™$Îû(Œ({( Ù¤$^$@$N$ A$ @$ ,üHüs @€å €(€ìèoÝè°OÍ ¸ˆª›ˆ.½ät|m²ýTwTfT /- |H|8X +|"0¢¾ž¾+ñ ž¾E „ÎÀ± ++‰|‚5 ° ¸ üë! püÎT¾ü8 °h u<'Ÿ3`-ƒP’©, ˆ _`Šåð}@Tg \ p" p  ‹Øn|¹7  ÿÉŒ .Sça§m\ ’€å0€å@Å8¨kàEÁ8Gà áÑFÎ æ|;Õ› ++˜ DŸ 4ïpÚ±5 H¦Û|g¯p I:+.Ѥ|/ýþ3/Aÿ\/±“/Yÿx/å[/Uÿ\/Å“/mÿx/ù 9ù ÐùÿêBâBb8"#°h#²4°˜“!H9` ‚#°O‚óÖ C¸3h àèäZ|ž(‚åhÿ€Xâ ++xSã8ÊÞ- S@ƒå pƒåŽ. ++Dp áú ++êfÝ̶ _Ú*)Ÿ:‡9./~jåZj€ Ó?Úä-):, —?/ë“A'Ú-]j/Í“A© Z/¶8808/’8/8 /t8?`Šð.+âRtW7<>DS7.)S7RtFWK”’½$$”8 á˜= @šT/ÚÚ3N€/ý–J/ „3 _D%`, ¿8?[@"ÓDˆø-`tjÐ tÍèÌ/0­$ â b æ % æ ÙŒ ÅÒ Ç=€- ||* |ŸB.bÿÃ<M5' ++£E  ïþßSyý¾SïIE 8L $.·þì,ÞÁ@´ "! „üWEOG.…ý¬x(.gýdC.,ýÔ(Oýÿê„-  /= /, è@°€åQþ, ++Ì¢/å¢$ ++6”è.Íÿ(¼.{ü<nµç.]ü´9içDüÿêìãS b ‰èÙŠ#0ÛS šåÌûÿê ¾‡?²¨-$`â./öh//Œh/!?¸ ++JAÿ% ++îÒÈèШ'|Ö@A*…6Y3ˆé“67¥©êW¥ R?W¥ÍqÜèÞ†µ5Xt#î»ß$jð)V5(i,CZÌÞäGBÆ5¶;­¸p¦;wàÒÆÖZ¦KØ ‹¨C3Š>/Òðvͯ ºv2†Z|yT†’/êÜV"¾XÕ1m´#¶Õ1hî ++î(5C¸(5(5ºp.™Q?¼°P˜O8#¼!Ã@6`Èx¼ÈÈX0]0‰‚ƒ0/H…i4€qŠ1¾€œuQµG`#ÀJP#ÂÄW#Æ 0#È‹5p€Uf ÇÇ ?#ÊM88?¾&6/H£-7#Ê|N. ++m;:#ÌiÎÐxÒxÔy; ñ(† *ÆÂÜNè@ÐÂÜÈØÊ@Yž@üæ  ++0:<A Èy!K8‚1(`ÜSCÊ#Öè ’è&hB z3£¨8Bì1kðÖ8bˆ#\˜c:D¬ ++0`0`8—°8‚°FÒÜìÂØÒÈ@àÂçHŒBÌI“æàÊÆÒÌÒÊä,XœèN•& ÝkH†&#’†Pò.˜QK+K73K Iè#Øíc ý1I8#Ú>p7:0#܆t2€¾Ó+:Õ/Cº¹ =#Ø­9#Ú¡?#ܘ@/S☃%e ++˜;“ñ@V@B#Þ   0'G‡›↛Aj`@;,, L,5r¤‘jPB#°?#Þ##NŠàk@6|PD’i#àx±>9` D”ðÜÞÜèÂÒØ@ÌÞäÊÒÎÜ@B ±æ0E®ÖpB#â   G ß»ÿ0 á Šå1 —å5—å9"X&ƒ19& ª 9p›å^ãõ6 ¯ Ð: ' ++¿ì†Y7^ãq9Wšåóžcj`S0šåìy9@\ ++M8"îM8"€ M8" M8 qå9`^ã4 ++u7‡u7"Úu7su7du7\Ñ%E 8!à›l?’·&à" àRg÷ûýFg!`š“D áÏñ—!Óñ Aý‹ò.sAÞS!°ŠÀ/`ãÝ :ºe0°šåÌì¤_û 6Èi/ÅÈ// ȇ/¥È#”¢”_ ++9ï,9cç#*e— O á9Ó,:TTo šå š²s ( H€ßSð,ß%É·”¼@ ha-@"p°^€W¬ÿ-/Ŭÿ,/ ++¬#2Êoÿ ++ ›å€RãùÚ-—å5$ ++í2oƒ!;!1;!0"pm? <C!~m. ü" .|“xRãnÊ1/ ++r%M=Ç /B\F©Gt?( ++ ³!@s+Í9J_? ƒåï!B ÜÛ™-Äð·(Ǽ-ÔO£'-‡!-9£ <.i£ ‡'! N÷+1¤<1‡,&°; ø#[,"&G!¬#)£&ûÃ++ £&;)/æþ| ¥K/ÓFk ´Nå Fk/¿Øt'hRãþÚ(/p‘F.a`m4&ám4m4.Ñ‘> H/Ä  0 / k!/qpŒ|t/ntà]Ü^@ƒå 1/PŸ-t.`ªf9HDX@Ÿ)_-0—å5D/#—)  \. ¬-þ«2ÈŸðô 8 ++0 ß¡6‡)Ü-Ó$·àpÓ$‡ì/‡å&q#z|ï0Ž°ï0ŽÔ „nã*& 0ñMá¾-ª¸ìEP ½8.¸1¸c/ƒ´Ì ++¦Ì ýMø  .xýŒ ð9J È È´ ŒP‹w`&q (.Bÿ&Œ ¸ ++.ûþ(.Öþ(À(© ž /‹þy8|m@5@'.þL 4-.› $ Ÿàƒå ƒå/|”4,(ï8/TpCÀ€ø64vu„ 4 ¸" Xu¯)î ÚXÃT¢¥P.}ÿð.lÿØ^P:À&?,·,þ³*.ÖüdÈ(«+ž üß/Rß/˜½/S˜/E˜ /8˜K/˜/ ˜#Xì¤.Þÿ(ÁØ´ß/ ++Û/ lO ûÿêh ++-  ++Ü /¡ *ûLŒ íLHβo&Çúì"–ì&ì]ìQì€/íìè0ìx °ì  [7 ¨ Û6ìsìÀ/ÍT/¿T /²TK/•T/‡ìw_ì,Jì$7ì(#ì“0—å —å!^=À—d' ð$0ð$“°†åÀ†å0ø$<ð< /%<Ó(Ã< ¶Œ\  l8†8†8|² 8/©& € p O° á8/aÀP8°¹J À¤#d/+d#¦‡_°‚å ¦‡œd /ô ¬«E:μ½¼ °P3à‡(‡(‡å À‡å‡™×9 ++ü€L²×91°ŠB~1 Š< ¿$Šå( ŠâpÒš¢¼å)(ð( Jâ°šå0šå šåH$,!0£ &E爛X Y _ ++‚Ø‚O¼öÙM 0  »D  °” D£'m  ++ä!µ< (Œ`\I ><(+TdìHß.Îþ¶°˜Äˆy@C@&Ò†3šåÁZFž *Y-”).îü\.îý4Ö$.Âýì.¯ý„š(rdd(GP:/,ý|ÿÈô|”¨|T/10²|/i1|.jûl&cû|"c|OP ++¨-´mLäNBR/#ä+E#þ.;%h hæ7%\ÜŒ/%ê@…æìè èê#ê?%ë ++#ì»TM#òÍVÿŽêÜæÒÎÜÊÈZ|àèÎVÂØØÞÆZÌ"T3‚™‘IÔV ++4ËO†´ÖV#f#î#ðO#ˆJ—#ü ˆ ·†D° á)GÙ 4 ++à›µ*= ›Ý u76?  á„.„/ó„ Óa ++„g«( €Î¨ ++9 Œ! ;àŒ-SŒå Œç£ Œå!H½)Ì} 5&–LLIÆ õ„á À-q8 p©np áÀ›ù¹ ¦k© À‹å ‹…Á{¨  E(ÈV†*à¹&Jt\A=5¹¥I#0†}@iD$piD -²ù éˆI"ucd+q"(oàþÿê°?¿ÝJ°?¿¹"t²þÿêV’}/œaW°=Z!?ô‚:#ò‘W^¦G?#ôvp20l ZSô­[ìWEX#ö½ð\8 %#ú$SïhÐnw ++ jáÐ'#øÌîEÊî ­ÐÊîúÑÜP¦7 Ò 5`Ä`SHS4W µÂQ‚#ü6(8_VšT!`#Q Ò#â)XiW@iWØ_fW€‚ zù#þ%%%%%% ++ ++?#ü &b påPG% ó¢Ãq\,% ×`g8%ÕM ÕHž\$ˆ1?\x6  Êâ(âWâ€âŠâ+&)"â H_3O%:®!Ÿ%<ÄÒèæ´&Ç]ÙQ?%p A%Ÿ-f ÉG`%&<)[ì’%x|/ ++("_÷O8%´9%A`*%P`'%P`O%X¸_9b([»X%  ++èZÂÆbÏ\òø %J˜ÄÒÎ`ú G% @+ðtd þ\a`%"ˆí ++?%*,eq?%$. %LÄÒÎ DG %,ðuÿÿÿþ`ôOX%.×Q$Óa,%&›fxæd%%(õdõPK¯^WH%*Ëf¨%,XN:%.x>& é* ++`^CŽ0è24÷6÷8Gd*™^d0-%:õ ++Þ ++ {ò0:^#?%<‘>< ++èh¸Xo>¨@BDF?HX¸_øÖà7%Jû(%û‡k‚pûð dt/% +ÛJ.Û>_FZ ¹hjò˜B%P  0 ÊbÈ&3ɼÈ.«î‡ü +iüOpšå9=Ž9=9=~mR=ܵ%#+`L9&R¡Ri=Ei= Tƒ >-i=œ ++œ /a!m;)!, ="ç="Ö=" É="$Œw@¡e=Œw ­( éf¹RH?½ðq<„Xå<}FÌø0B| @#¢üå"0U# Ø]=ê• Ý&Ý¢üeGU' œ½ðvi(XØ0d#(êÐÝ.Ìþ<´(§(™1=zk¤¤. ¤D|=þÿêhrÀlà¡s?Ny›N%L+Jà« q ++SN¾€um n|pk9[ènw2%P ++ §L`%RçÔ ®ácH%ÿn²t}T] VXl Zl \}w^}&Åê}Jp%`åbdfYX%hZj;Q?%lÏ€lqgKq¶tzp#ï’/Ö'ÝR¸:%n!prt?v?x?Sz?€z?]z?_)ó²?|!~€‚?„?†?Sˆ?€ˆ?]ˆ?_> 7 åH?%Šê¶}QŠð]Š h…]Xe$M%rM ×yXN0 —RPè(÷±u7&- ++0ã¶'|y X_S¡J#T ++eF%«re/ ++( /h$âÿ# ++XAöÇ耷IyæO —å ±<<.÷/ž/ @#M¶8.  ‘Ë“8zúÌ ÿ/%MU/´Œ4˜§5šiÀO%œ'%ÏÀ+%¤i6jò+ l‰?%Ži6¦\¨ŸÂ?%ªj6%ˆÃ/%Žj6%ˆÃ%ˆÃ %ˆÃ%ˆÃ#/%’j6¬ì®ìk6%ŽÃ9%–¥å¸ HHÿHÿëŸ%˜%š%œB)8PB#B‚,Ò> ê ++ìÒª ˆN`~r8´(ÃðY…¾r9?íB-?<ˆ  šµB݈6ºJ?rXÂ?%ž¢! Ñÿ%¶ ++ØìØÞî%¸ ØìÐÒÎÐ"q ++V‘B?% à j  ó8 hêÜÊðàÊÆèÊÈ@ÂæÚZ†óZàäÞÆÊÈêäÊæ@ÌàZ=@ÑEüæ(™†!`(?C ÿð° ++²C ´C ÿ%¢%¤%¦%¨%ª%¬%®² ÿÿ-°%²%´² ÿoˆ² ÿûº² o%¶%¸£ b£ Wº£ (j£  ++G¤ `«²«m+`Ã$ ++(·=,u@9ÃgüÚ–@Sbìé“ðx+ª%Â&˜bdtÚì/’ö??`nrI n;@'@%¾@9/ll9 p9°+B%¼˜bd5b5 r©@S.©@h ž˜@! L %¼´;(œ3¾383? A !Ö  !%À " q+rèb*!€ 20Aò %  B'D  `;ð ˜ìÂØêÊd0âSã ++Ä’`0”åS|‹ñ ++ âRã0“@_ ++”€úÿÿà”åp’ð ++M ”å ”å0”åàâ^ãP)’% ++0PÔyù!à’åàŽã!‚âà€åó/'2ó/g‹åàT‘T‘TTTZ'Hàû+²ú0Z|áÆ£+ w¯ü‘¢ë +0” S ” m0„âàƒ *S1ø,ðõÿÿêJÒØÞ¨j¸#X ++PÀ'B¬0'"v4€BPÞ ++*_¸`B%Ê H6 !âOûTLÙ}SÆzº/ ì+u2¹”2&§”2”2—Aê =zø.$ghJ†hJ0Tâ @mY pAh/ qo0.8vum/ Ô/›Ëå¸=~’|aRæ¹/…'N ù‚4‚%Ä á/@/"7"BR/%Ä K'¦ÜÊîÌÔçã?š›7$ð ´Öè`~'–èbT€+&> ] *}¨!eád !n`³?ÊfO ‰<姠x'\%ÆF-J!äÊtäÆZØÞÆÂØZæÂìÊæ‚hâ "nbÚ Tî V? W ÆèÛ¢p'Z%È8`BÚÞìÊ/êYd¯ d¯O ++¨Ƚ߉0G0ð S"%Êð ÚÂÀB%Ð =( $Þ©%žZß ++0 ÈÐ(Šå,Šå0 Šå$ñ]%š\:"·ÐP¦ ++4ÀoàåpžÝpPø<qÀO#YòTã4 Jâ4Šå8am ax±ax=DaxOšåHˆ¢üüEH›H Jâ@@ŠåŒK½1à€ ++Ø çð€å& ã p ;µp1<@ŠuÏð@™þ¾Ø(ez 1 àžgõ ã<šåLbÑ ÄýÌ¢üÿ%LLÎL¤ KÿY4Ì(jQ{ {Hˆ8œ8À3 ãÐ!%D'ô1|F'ô@vDpSH`ŠåT@AˆPH1TàŠ+öâXàŠå0šåDšå4 P_(àå jìÏ up”KÏ ¹DÎÚ/@š•yVüDüü ++õw ˜w. @™w/áñŒDt:Ìœ ++ 08¹ßõb ƒå –T^ãfÛ%0ŠÐÐjœË EŒ? 0šrÆœU P€4rÅ‘ƒ_É ¹tpt 8]x öx H)!0ùDÜV @¼ ++ ’ y@@`¾LL _ÅL¼0L_< šå,L?Òb,Q, Jâ(ž ðh h V@ك휉rÆ@Ü -t P•y ”îØ”5XA ”€(€ˆ\ˆA áˆ0ŠåP Šâ,Œ ¢üÏ P_P JâLH°äôÈ',`\„ÌOß…„ÈŠ|V&Ü }1 0‚,_à‚åˆ/sá– ŒBå 0ÀZPÀZTL ++ZßY ++  `¾L˜ ,-œ!@ƒ$ 2 žÇû=ž ++2]H‡P‡ó à‡å ‡å‡å‡eƒ3‡å ØÔY¸@$|ÄZß 9 à,8 €_?ðpÇä­Ð†¼oIP .¯ý@ýÿêÑx@&` ã @‚ ++e—› ’å&Rã?äy€Ø ++ ++Zÿ Ø ++e€ à!à(ää dÇLoþÉöÈèØ|ü ++Zý‰ üø "øø øÄ.ðüü=Uç×ûý?`Šåô*ø"`]‚k€®˜zdh_Šå4ˆ V< ˜4ä ?šåIp°BüÿêʺB%Îí¡0 ÎÊèZÂäÎxùù@€Xâu/—Þ#& Äp°^$0šå!Œ4 j×_Ú×ê$/€$ô0B%Ì øTΰ&Sã ++&Q½P& ã 1À*u`šåðyKI8e!à‘æªq “å ‘'ÜQa%¿äª‰xy@!Ua@p á3Ü=0“%5n0å pÕHT: ÿæ]¸ Eó1¨? àOÙûÜý+mý00šåÁîƒö®ÿÿê":%Ì ++è<H}B ò6â´âR%Î8 ++%Ðp/N(š/N^B  ®Ê ++> ++„> ++„> ++„> ++„> ++„> ++„> ++ë¯à ‚Î6!Tò¨HB%Ò ¸òpê wb\éRé?2µ©2 Z$N+/ î öRè (ô/©ô®Rÿ§ÿÿêàåL^ã¡ÿÿ@ ãË—ìøR.°'8ÆÜÌì-? ++tSj%Ò>PCS`B¸dBˆ’ôö&0§ïð8%ÔØ'¢%Ö2C<ÜÊî@f†! &nf(L?à 'fà !š "¦Ö¥ ÂðB%ê I@ NF!€4à á»‚Ôcf ++ zÃˆí °Š @ã0ŠÊrã  á(F'°@!àšŒí±Àšå šåà›P!à›å,¤í-@› "F " ò [‹!‡f ¦à‡å@‡å0  L1 à›F.i4 î1›å8 î0›åô„" O0„å0\"ñÿ ¾ ^)Á^û ++.å ++àMÀ.uFýÿ꘢+Ì›I/ÒZJ!úhà8''&¸uº,:!1w?ZÒæë P'  ß/Æà!³ v,ÒÜæÊäèúIoZÆÐÊÆÖ 9%îbè#XˆB%ø  P ³ñùV° á ¡v^¡v Iã(% ãé°ÞÕÑ âÕ/ué/°šu#*Ì+a@å îœ@FÇÂ!S,bÖ  a €_! _!1_!? à—[*•h-…<E;°0[ã{0 ã°ƒà ùDÜÌì̘< ++‡P('>0$ ++«PX;%Ðe(ú%Ð T!r =*$_>P+®'B§P$dt8tqp©= "p`­*'@§PL§P(¨ª€õ! 'B§PR€B'D '@# Ä †F Øò¹T JŠ7/Š,e6Š7 Ç` b¶Aâ'Fz6L@tTž±9THÂó'J °1D ¤Ð‚X÷ìÄJÜJ ÄJ@Rá¢XßqQÜJ! ’ ÜJRr@ “å¿õƒ ++PRã< +Ë晓å p“å“/ Ö¸ÅÇ" ¨@˜MÙ''àA)pÏq E) +Y¯00šå)Œ@<àâ`KÂ2S^ã@ ++°M±WlÅlëÿÿêÐRãdðKRã øU WrMc<†3 s2í[à†â S Žç *`{ÈH# °.Õ /ô ›Çô.Mxë¬@Q5X$/“²oÊ»°ôƒ/Pà1,ø.EøËø Gè`,/áP¿t¬H¬/ «pH«Vm4p ++P›%šÄgÊ'J`:r¢'J@juju2¤Ðæguˆ€ ++ud ©pñ"¨€H L0'L0 :ÜÞ@ÚÂèÆÐÒÜÎ@ÆØÂêæÊ@ÌÞä@ÒÜàêè1ÅñÔ ++ üæ @ÒÜ@ä1KææÞäÀ L(ˆ D ++Œ  ª˜ žžÙJs&€PIP%œ&%¢)K¹T…0@ÒæM¹ràÞÜæÒÄØ·†Ëly‡'H>UÚ'JlG#\ ++Pl%-ŠÊz¨ÐB'P ð,À?p—n_&mn_é8PjB'N6`0ð *‡3Ì?¢äÊÎÒæèÊäæB¡†2.õP_1Pã)_0Sã',@€Xâ¹eH@å) xy‚x'¥[ ×v“å åéÇb–^)0ùÅùV.©[@5@ ++ ++˜ ++;"¢'N8²`@/ºÊÙA¾4ò'^Pæ TÑx](Ä‹l¨ú// ++ pq]-à€pˆ ]±¡¨ 0`šB'RÕ^(Ð^È•"UýB•^0Çy$0•^ •^#ýW •^ •^‚•^ð`)0ƒâ@½^0{&(å·9«}¤‡P‚ÚìB Š^Ù Š^g'R ++(æ4T ++ $qCz'TXæhX 8ë``CK[ ++O#‹ˆÒþ3˜`˜K  á÷ %U¬a å 0Õ{Ûàåà—åàåG *3à‚j‚é{C1ŠYD š[ ++ ++BÔ¾ÆZO#_c_ šå ³"B °ØE“TãOaÏ50žå´DiE;-}Oàžå4(4hPŽâ0,É`vb ¹9>Ke4ðšå4Á ÅôƒÉ IнkJ ++ ++p^ÖL€B'V è Š9 R¯€° ++m° ++Opšåêx@rB(ÊV° ++vP€ ++0ò„R2'XÍ/˜Ë$pBD<~7Òì€> P0†(0V_Ó~/n ++¬Ïs <@0v0/‚¹X†Cïm º:UUp3 ¯ÝžÙ ¹¥ýdŠlªŸ'Z`'\h‘zKx$ =‚¶òQ ð¨'Z¨B'^  ¨öš U Š`0å!à¼:2â«î ++ô·}3*) “î(Bï`P\jjœ­’!>.öïc_œ: ÖÑt`Š /e¿ Š -ÕŠ†QwÂ@= ++®ð&"B@= úñofâ#\XàÈgÏbâ'^hO%"€ ¬G¬ÒpB'` _@ ˆ¬@ZÈÞZð~@AÓ["Û’ Æ ++)àœN*³+. ˜Þ 1PãNÇ3ã·ÅG@@â\"À™EQÍ1Š" xP|ér À¡E]Í1špå§akd!/Mdq}\ ©\¢Tã²ÿÿ ++ pÞ.àÑ~/:/#3.`xxP‰}1àœD8?%=!œþãÿ f ¬$„(/0àÈ/=œ .¬Ü 9¹ /›9¹ /Ž9¹, 0( Ë–( œåàœÓ1* 0"E`À¦^â/7±¹ /*¼ ++.ò®÷ ®÷ @/þ $º#( v¾# È/é æ ‚å ‚å¢%/Õw2 0’!ïl3(š!,š!l:â»e "ü}~#h>â P@“mœ+¼,= œ4ƒ°&ŒàP ++.0Œ"qÜD°$#c°hFè/V°F?pï`# `|åM)/-U/ ++U /ýU8 Ô/æà yØ(`mV) /¾P,„D˜„„0,h(/Làp/ p/ap/Pp /C„pHˆ0.Dà´ŒÑÜà 8@¤0/<àD/8è0>œ´ P,"À  YµY /¨40k!ü0œå œå%œå!œåÀœå•‰S{:P·tÔL, ++â°†å†å†å!À­T‡t@ áé‚3ijpþÝå‚ ž,WP@Œ<ä´/B DÌÜ.<L<H|@Å\¦` Í‚‚ l /’+ +@l 9‡ª,<` ’ìq<<š+?@šX ? áX _øìÉXûoX ++ ä ì  oØìY/™è ++,_˜Ìép 84ú.¯g [˜ y¯g œHÚ\N64v0Ð ++ ­Æ ø Ì ++x8| ÅT±‰`7.÷þà.Ëþ ·(.¢þj~<.QþfD6d.ÞýP.¶ý<©(.˜ý¼a.;ýxP.üüx.ïü(.Þüdº.£ü@–ˆvP$Œûöÿ.æûÜ.ÏûxÂ.´ûŒk(^(Mx .âú¿ïá á Žà°€â% œô/ ôì0p ãþ7.¤úB1î¬8S *›Cä%̈úÿênª°$°$)_'j ++iB3°+ÎÌÒðÊÈ«†Pæì8—Zî£?äÂ~bê%/%ÐÔqê'` ² E€BS ++¶'d ˜æèÂäè/;''bH KQ6l '.'b' ++I.'d"73ÑÂäÎ"ÌìZïm#ZZ^1 bäÊÎT% %d›) @fÇMpf Ú'h^O0> LZ$Df'h4j³K æR'ÆX¼LslïÓ$ËdyE?n˜^FQn7Í %"ú 5\ˆuË6P6}ÙQ/'p§GÓ*ÄêÚàZðàZÂÜÈZùmÈæ UP Ïq<'p¡Yðϧ| ++Ÿ×Y`«ôLËSrRp|brvÍPr>BmrBò’Y/¦’`qÀ?'t‡rq[:'tÙkdÅB'x %ÐÓ'€rQ€r >õ23Pãkhqƒb[¨k- —'/P“1à×'²:Û'@8B¢Q g,¯ Ïô>; k(M.˜PþQ?—]2.Íÿã©Ó!—å0—å—,/ÃC! ["±û$£O–þ¸ÔÝ/à—*¬/n¬¬!„@/H0‡(ð ll/!úU #ÙDŒ, v»,ËeìÑ5(Þ /Ûw$ /Î/$¬*€å¬Ž€å °€å7$·” & 0¨ø÷(UE ŒÑD +ÙÑDŸ#?  áX Œ\*5\€wì €€ô%_T͘àKiG˜//e0!°4/ý°R3Ø„¾•‚(.Bÿ+Tß(. ÿ×.Øþd±‹.cþdVHK" pQHR *Y \" pIH¸ŸĨýÿê’Ê#X°.Ä8mP'4 (W/(ÁQ?v ++d#"+ ++t"A "pš= ”ª€!v°bvì]pshv]Pq ++q&Cv&: `ÁÿZèXÛJ8, ¼25ž#h)%ò×CV ¢älD#ò/p5G'z ++`5&z5¨¡D Ú Ø~i A€UŽâ'‚f?!'|#· 5Æ`È%pBr/ ++í~, ˆ'€â'6Þ rqŒf 1hBs¢ýäàB'„ @C¤mÂ`àžåQŒ| ª(Ê T>€> L>&L> ¤DC/ ++âÁ[pΞO Šâ »xÛ?/ÙÛ?0Û?"@Ó¤”ŠIw6+”+0ا"@ «_à„å ß$õ¹B@%´¼@ {¤1 ++ê? U´' ++h;l>„ÅrH¨Qˆ ÌäáÜ  äÊÎZèTÌY¡?ZèTä6À#h' %jž) lç†T؆Ï(,¨?'ªê""\'¬+ ŠAæÐÒÌš©æ¾m}@)TEEOØÞÆæ‹d‹ - L§ep n* Q?Šmtm ++!ˆÙm€b QŠ,ev@ýl"Š½ 6\x`'x²w€ƒúw†eŒÐa˜ÐalI àMS;=“ÀÄ ‡äÄ ++äÄqSP)à‘壉b8ÉSbTgbT/©b/¹zÊHÞ ++&b ++‰Oj'Œ&b=VŽ1ÿÿŽ1 1N`’Y ò “Y%1ÚÞ |ÁÜÕ Õ G’Õ Ô 5XBžQ¶XÕ$ÂÞN â"’N &;úZ”Zw<” |® S˜ ~T_%À'–á ++#?'Ìç $Î-ÐþxpÐ ++ nóÄ7'ÒYÔùÄ"‹#£[Â9˜ÚÔ&GÂÔà4 K ++2Uš4ÿÆš4'ˆ]j˜lœ—ÿÿœÈ ++ ž1ÿÿžÈ ++–>HHÜQó@'¤ØÂæèZàÂÒäD\(ìšÈ›UÎB¸Ü@B¸/' B¸ÿß?'8<¸!' =<¸W'¢ø8ªhhÕh@Õh˜@íer€gjœxjX'¤XÕ ++°€ö…S'¦'8, Ü ? ++e¨{eÛ ++AÒ QèÆT&> ++R i'ª'¬Ï '\u“'º C ýh‹×".¤sùþI ++S>FS†SP>J?)à’‹)*%@xo[@"@’å¼ÚU-Œ§p ã3œL pRõŠÎJpvõ |$C°†å D ?*oLpO óXL ØÈ0=’ÿ4|Šö *#Šö /LÊOJ>n’å /ý /ì  /ß´'/?à’6Q*¼þQ,DpvWD". À`––K°S-‹d/"…8/ °x`ÀN - ¨(Ap’åèÀD\D" 0/0À´À´#!h^À†å°TTRp†å°ŽV0½…*/íïÜ O¨,2 °’̦T8/¹¦T/«/0 /žÜ°¦T/‡¦T ¦Tˆ.r´3à‹²G[‹å ‹K_‹å‹˜.-€:“2P )È/ žW/€H¤/” % †Jüx«/øS  á†U0 1øÇÏ"00·/‚U äÙS0–¡ˆ0 ++_å0¨ ++˜ _pñ˜·Ñw1Ð'o` ‡s1 ÖMs1"_ ^ ($-K¡ bL6&L>O ++›Ï&LšU.L).L ×7Ãñà rIO ôW2.ÝþÖI.Ðþ´.¿þNž‡Pr.[þo3N@d (.åý´Ø.ÊýP(t(.cý2J( (.üü.ãü<Ö(Å¡<.Šü}o]1p ã¶a0p‡â´#SüòŸ HEüÿê•ÉÈl ' ×ê&L‚ãûÿê¢ .àIÜ1I_'® Wë”ß5È—ÆPÒQ°’@®’@ )°85ÒEj3kö`ÒE ÒEp‚3=AU?'²¾P65Q²/Ìm²65\EdçE?´˜½Q?'´uD{ Ê ++OŒH?¶ÿ€?'¶µL€¼6O8#€…JQ ++ûPq ++q[?˜L9 ÑMrƒ¨'¸Ó[Dšhƒ& pÓLÛ¤Œæ‚'væ‚*悸ƒšÛ8î9!¾?€`9½X|YC'º:Pe;=ìqGì€È•¼’ÿ©¼í“ ¾Ûÿ©¾Û ÀÛÿ©ÀÛXÈ•‰ ÌŽÒŽCÂm=Ÿ'Ä ¨ Ã$Â|s…K+.‘Ê .‘åG“z"p‹Êo Šå$ ‹Ê k€Ñ‹Êp‹Ê"‘Q$ šåÌ‘âr†€†!Xý0Uº'ÄP§Á@ —B6%›— ŽãPƬ—`¬—aÐ8⤗͉‹Càå‹PL—X—"àh—£P!àl"T—FtA˜l‘Ä&uT—q‰[üuð T—ð“P"aÌT— T—ð“[<Á˜ò_ô“,”ä“Æp$à“.ܬ— D/ŽT—ŒT—xoL®qžq [LíÔdPØ“oL% ¬•T—Ú¿LPgèä ,Ñä  á¼5ò ÇÂœ«S§S © |Géóx—ˆ-ˆ ˆ•ÀÀˆwO% ž€œˆ ŠhISP„%0žàš& °””"°œ˜Z±¬˜x—^œ x—(˜hš  wO€ +€   $PL .L+ ÚܲÜ0* ÜžKR x—x—.þˆt—/òh—B– X7PÍ–-)P-À¦Ù–S ox YR'Æ·EXï~Ó–ª–Ζ6 ›B ++9 Ζ%U’<=õ€)LØÒæèZÐÊÂÈXèˆÈ‘1è‘15vM1nê [7ãQvš„?R†š„j" Z˜ O¬ Ñ­ZfÒ ª„@~$RE Öº¨Ô‚ÕÔ‚’X‹r0ªÑÛD%'ºõ„ ¸1iÂ'È ++(hÿ2%ÐF?Õ ·L&¥"Ù?Cà2n §²55 @‘bbÆÂÜNè,‘aÊ@ÂÜòèþ‘ð Äêè@àØÂÒÜ@ìÂÜÒØØÂ@èòàÊæ@òÊèG‘„@2 ++pkR`8­B&<5'NE*E' ++˜*³—‰:µ°B'Ö ˆV<¯í™…ت4g/™…™…®÷ò<È…k-B8ò4°B8[¨°# @°‘åº à á žYmÀ‹âàŒ–Š'vr4-À‹/iõz ï.¼rÊ* 06^@¾ÿÿêFò)n<p=l FÈ“¡@冈é.à—ívS+(sáv !Ð+ 0_¢ ;%!.²ÿ#ø‚Dé)è¤à"FÿN>. N>K&gK& ÔÐ$10—+Å ++! šÍh÷O@—ålAlUˆ–;>Ü$²ê&;Ø ++ˆ ‰RX¨'Ø;$ü6VÊõ¼—6¹º¿ÂÈÈZÆàæÊè ½ g!ºj»N(zSÄÒÜÈá–æ@Úƒ$,óŒŒ ++# ßÌ'Î'Ð'Ò'ÔÀC8 ²»(a ++(% .(¹¬¢'Ö'Øe XÄÕ _8ÃÀƒ¢'Ú>!’ÞìÊäÌØÞÞȉË'fô½ p¹sR 8yR@Ú rWX¢ý†D3! ++0; &½ÒOx'Ü/H7'ÞIáG%Ç2oß1uðZ>öp êìÂäZäÊÌÊäÊÜÆÊÈ~i>y!àûáDéD W0’ê t8RX5Ç•ð¢'à˜)b'ä<ÁØÂÚÄÈÂt†Âæʘ Šðàä\bbd+£ r+£+.'â.K D/bfD bæJQ'âZ»Ó \»( §Å.\»*¢\»äà# v 'à ++ j .ˆÒ’« b8 'æ02,àt@`t@%t@#t@T(!|@Þ|@ *µ,|@8|@HŸžÿP.ø042–ÿvÊ=xê rx4–&È…"À…±¯ ++çà—å àž¥ŒçŠÜ[PàŠåŸ4/ŸsœãsœŸ0šåLpŠåT< ++1 0é’"TæT JâLpšå4@Šå4@ߥW`0ñD‰ý@nTêTŠåXŠå\ ŠåLpGžd`¤ ’`ðQ``¤ã®B&L®Bã®B*<@Ÿd@Šå×0—åÛaÒ&,„"\e¸h%ƒ ’`ð h»#h¼`lD@àŽâxÛœ-àƒH¨?·à—-.@³à—埿L,i»¾i,ßÇ—åð—åÏÀ—åˈ ,?Óà—w8*øHø@£:.gH§Ì †â@§Gù€€†âà†å0Ðøð†â#à†å'†å(à†â+à†å/°†å0à†â3à†å7Àúq†â;à†å?&Ú‚†âCà†åG7:Kúƒ`Šå¯0—å« ”& Чql`Šåhàš["fÔ‹lYp`l,l [±àt˜¢pð?éttÜ"t@ôûS@ ãt8ï:t1,°š¡Ô"¢L‰'¡ ›å’åHQ© 0 TPPª@„âÑÒPÝÒ@SPQã ÍÕ0âN40 ã4å4â ßÿÿê`QãRœõ! ’cì¬üg"<@8ðxo0’|ðñíx#x1°šÑƒ"<@Hðl,küðñYll1Š”ë0&R_ Ð  ãRã/Ê3³€&Qã ++ ß$1 ðÜiå`ðS Vá ä S Pã?SOîÿÿÔäý"$ܱ†Z÷ñ-ÔÐ×Q$šåÓ™ ++È.iÈYÈÈÈ OóñõÈÈ )o¼ðñex $®À šå"! á Âã Ö’àÎãàŽàt2Úà$¼ùGt ‚â Âã4,º ÿÿêåÀ‘ë \µšñ ‘å‘åQãÂÿÿ´UK¥PãBà2RðÁã¡ áÁã„à\ðIÊ âRãD (ø0Sã«'˜0 „á ++ü®`”àjÃ'”æMÕ P`À n<ððµ À&0PçHR„l„ Å„$/9 ++„00 ãÈW  ã¹Ü¨tO ã¨”/”  Qã+ÿÿ0t ÊL@@„àP&”þ\‘K0  ã¼@@ ‚âh"éþs8Ð›å ‘åRãÌ` ‘å R*âl<ªðTD|þÿê"wþà5øÿÿD@îÿÿ ++À ,P Oñ‰ ”c^þÿê<@XpàšåŽá á$1"‡À| áRT¿ ${$SxàŠåpH;9€1 áàƒàx px@0àƒà” ™¡žå`^㨠“!ž€ bq €€èÄb&Tã‹ ˜#:0ºt@QÊ@( ++NᓪKª  s yŸ[“å“ó0Qá<00“å4<´"@q›€œ/% ´"@m›ÞM¤.ÿ ¤/ï ¤¤,ɤ¬/TÈ_ § ,£ 0l ++#U ù§p ƒåàƒâù§3ƒp ++;ƒåS#*D ü2à†”Aà†åŸ§1†åå§ †åìT D Q @ ã@—(p„âàÎã€4 4°‚à„àŠå„ šå€0À‚à|8|y :D`Š)q Žå? —51 Žb 0ŽåC0q0Žåh0š S0ŽåGS0Žå S0Žål$S0Žåp S#0Žå S'0Žåx S+0Žå S/0Žå| S30Žå€ 170Ž''@àŒà @ŽàDD à< Aè 8 0` ãåݤÌ1@ ã·-À½+ä@Æ ++‰+1 ÀšT¤§)•‘”| Aú ++°°‘åHPã„teL `^ã0ªPA Œâ'! š³1 @šEÞŒ ë» ôô“ô"Àðb¯à—åà™ ºY“¥‘@ ÅàõPê{âà‚â Îã à‚â$à(\< HÌ" Ì/’Ì ÌS á t",°ü¼ŸÀŠå( ŠåˆÈ b‘ˆˆt",°bÀšå( á Q°ÿÿ ++~h 0Pãµ!šL‚(c( O@Œâ(!#(8;( 8# 8 ++ X/± £€ä! 4ø/@00 T4-/½þøÚ‘Pãè ‘ÿ20@Ü/ùHl /@p*ipt1@šÚ^ 8"¡ˆ qˆŠåˆš¤ D2Ê @; ++ 1 ‘4ü$P ++@Pã*@L‘å`` V·G ` | d»Àë0 øŒ¨ bYŒŒ` ìøØ&0ظ  Ø/ØØ Ø0/1Ø@5/©@Ôo=)°<ðƒâÁã0âSè¼!xpPã5ªˆØp0€à0Câ $ô Ìb0‚à$0Hb0à0hЈ 80 Ú0 œ ++\G\& h ++@/­ý@8 0`7ÃãÄ&À_8° °/ý$°“Ä0ƒâ˜c-ƒ„âÁã Èd¬ `ƒà`Fâa¨V¨x` ã ‚àðf ‚à ì?0ƒ¨ ++øÐüB¬Ö]S‚à$À)š¨¤M¤€L5þþÿ˜ ÄP}ˆšå@TPŒŠåŒ 0ŽàÀ@ÊâQã‡Ða ã šoQÀ1„âÀãôH Œàà t&A!@Œ šåHÀH/ÆüœQ@Œà×,_Dâ€Ì ++EÐ ++¿3! ‚Ð*3’à'ÔèÜ Ü$/‹üÜ" {4 t b¥tÁ\@@ ã¿@ ãvX?à‚à, LQ/EüL 9T*÷ý Wóýÿˆ(@+Ê44O@ ãˆøXøô¨ <¬a/Úû¬Àˆ ˜À ûÿ€ŠåWýÿê$3åðq å Q±º €X€+̨O 0‚â¨)Ÿ ä  — hH 0â O0€â¨"¨/mûlP¤h1Sã.x/‚âhĨ"0¨ ++",°¬ ++'`" ßÍ#¨ ++ਠ++"0˜ ++¸ä4äàH ‚âàUñÀÔÀ!/$À7À5œÿÿ@8ÿÿ ++ì H,  µ¤°¤ˆ÷À€/¥4„´80à#X#°\`P .ƒ51àƒà QàƒåÃä1ƒå+d1ƒå›@ƒÈ1àƒ8±àƒå/à—åàƒ¼1#àƒ1'àƒ€ñ +àƒå3à—å/àƒå7à—å3àƒå;à—å7àƒ¼1;àƒp±?àƒå|àšåCàƒL!1Gàƒè1KàƒÌh@hžu§žåG—åÏbŒ/GZ#6»]x 3W/)-²aÌQã`  ãT T&T`Ì2@" I§»L0’/—´ Ô"`Ä TÌ ìÔèj¨û.œLÊ“Xè ++\ oˆûé.ø.00/U—B¶øt" àðê&8ü*oû‰/ü(ü_óå\ \_òA0X z™ú¥@#Ìà¥@SŤ ­@æ/b ,”Œ*_â1Ô ”¼µ¯ ++ÿa ,_µ1Ð4Ð_‚2\ \N€m\ Tb(Ä=È ++sPN< X ƒc8D81°à $àg…C<@Bƒå ¥Äטü1.žy¬î5'DàˆÕ„„å„åÈ=y¬ P4Õ(Á«<—= (ÿô.¤þÀ4 bþô^ )  /Á4  ;þ"óQœüL/ 5L*(þÌ'¸'TlBî= ++×埰—åÀàò/0„ ++kÀ q/ q/Aö¯iO  áÊD6ð@.ÝÿÏdÉP" x /$Ð oüÿ1u6Ð  € |ìØÌ _—å°L04°àLLD ¸A{Dð`.Ýÿ+eÉt!TýÜ,ဆ<€˜_÷1õ8€„0L€$ñ¿/°ü€, `„P+§gP°šå00€9šÐ)WVƒ Šå°)‹ëa ”å @”Ø-,9V!°›´¬´90l0¬˜ü:° |0t0Eœ öœ & ^ž.ÎÿäïX  n܃1E;PÀ#@†Œq½.Ìû<.@< /á;< ++<üb¼O"=ûp10p1#2ûãi8ÿ |6_0Šå(´ _oñ­=´p6O0šå(8¨o8`Šå’ú8;kP6®ìùÿê\  ãåùX.Ðù€.Ãù@.²ùÄv(i(DTùÿê$!&H`Ä *Í?(!&H`À@!ôÿê,n °žåô.Ùó.µó¤O¤óÿê2- 8&À1&¹Ù ¤+H‹ÈÈ0¼1¤+3|¸1è/èÿTëÞž ++C“Rá*óÿ ÇV¬4"&ó¸3/@d3*Ad3"0ܸ3ü`4åè/üKüŸü ,Oü› ,S``†åWà—åØ[`1†å_`1†åc`1†åg`1†åk`1†åo`à†åsà—å?à†åwà—å>ó{à—åGà†åà—åKà†åƒà—åOà†å‡à—åS„Wh @†,å2á&0€0€Çl&¦òlÔ/¤ÿÿ ++¡òÿê06p5!0“ô1\"nò|H P H›Hl´ì€0h—h/éòh ¨8,\ ÂDÛòÿê¨7(è#z¨7aàžå ^@&´5}/´5H ´5§Tä—HØNÒFÌ>Ì$̈ÄfÄñÄ"ãÿ¤:9ÌÿÿôQ‚ÿÿ ++Ç<2ð9"‚ñ :¢vñÿêààãÃïHsl`šå `–HVØ$|AŸ h D .’ïD.ïôVôF.ñî@/Íî,¼­H j°OZîÿê´ ªP.!G´.@î€9 @ØÚB'è €ÛIIÖWAÖW0#‰…Ý"mF‰ â' æ R¸ .%¸¿®à @iz¨­YÀÉHKXb'èK*XÊîŒè ++'êPyÆàR ŽY/ì ´’ÿÅì1\°XS/'îr XS\'ð–[S>) ++ $?g1ÊÊZìÂOÌàäÊ  @Ìà%È/ Ò &ge?VØäqS xZ) ++ÊO'òQ?'ôöø@ÈÞÂ/ÆÖ `ÆÞêÜèáV¡b$ØÞÂÈHZÂÈÈäÊæ*!ÈÜÜ/êØžTˆy5/XˆyLú'ürŠþŠ/)Š?)øs/)RR¤/)R ++RPR.#dRØV/) O ++dhB!±`C°#SqP aÈ!0¨ r° !Cˆ)- SXB,Ð !Ø: /*:ñx#P@ÿãñ>& &‘Æ! Pþ5b-€ 7ªKP#RE(°v.# Ûe)d86)f;&¨;f;?hp.)Û ++kX.)"Ÿ¥/#ä“z³|€›rtT dÖ2)Šž\~\€/’‚Q Pc›)ÜJ2X!‰$A#Ž‰/)BRZ7·,\/Ö7‚Ü?)„ì†ìBêR.?)ˆÄó’)B"æòÜèÐÊæÒôÊZÌÒäæè~&äÊèêäÜ­_ÞÌÌæÊžÈ$?)Pª(.%žPOy¸B  ++ S@ˆ”'_0Žâ8,˜Tˆé.°ˆ$i° °ÄUh^ÄÐ,@—å‚ ++¸p…l1!d¸öl É(¤”» 8"‚ÄÄ Ä]F) €¯ Ìïèx©|%% ‰<) Ó©{Æd»éÈB)* ~b+°áòð  +++à›å'0›å3 ›å/›å7›åàŽàö6±àŽà Žàà›æL#›å6/¶#"7g.4/ñþ- , ß"3mÑ“g½‚å ‚å›Z/Ã>1Í‹ü Ý&nå|š0p0‡)“‡å ‡å ‡) ‡åt1 ›f2™vìÂÿÐ + |°¦^oÈGî ++å @åàX\*¶ï"&½rO0 áPB.!  ¾/¾d ².8ppTžI ÊB·.¡P.Šÿˆ_(Nx6$((‰ö²P°ÙÁ:ü^°šåÖþ ++ÿ>ú)8)$ÒÜÌÞZìàêæÐÊ ++ f>_S–_h)"£ä^!¤ ½^ )$–ÑÌøm€@p)&sL˜B"Ð  `ƒ–)(4Z_¡Ó"ÆZ¨ Ÿt¨ÂÒØ\bbjq h§T%Ú §_M?£_ " Ì(ÌÂ0X#u_?c›a-!H®_Rš)*©˜èB  xÓ}È0—b½emn0‚å0/¬ŽÏ—å°—åÀ—åAÜ’Àc•/‡‡•*y‡• #l”ˆ ++? °—»rV ”ú^°—åp„8Hâ±ê #7“—™*P}å p´ ++ ´ˆ ++PÜöÏFÂ(±(›¤"€rAÜM‚.<ÿ ++`(Š#H‰H$ ++@J8×G),&… i>L€ÜqØ'6L ++Ð/ ×ÿÿÿR?),ËQòÛ ++ÿÿûrC?¹ÿÿÿT.¹^¹ÿÿÿT.¹_ù¹°áÿÿÿ®Ø!ˆÚ š vÝ ˆ5!öð!¸!Ð ++ÿÿÿþ]Ê"!À`ûþazF˜)Nòþ xxB FZÍ'! —B³@Mæ ‚ ê;¢æ$#-OLÒ|îå-Ú¦ µ'ðÞٕ̾¬Ž:’–¿Æ/ ++HT /˜ÙÿÆ/(Úÿº¨/ˆ³ÿÅ8!0’ÿÇ’ÿÅQpB,L c ++ÿÿ÷N5 À¨ÿÆH¨اÿƨ€ÿÇPÚx%’hHt!—åÞ[Œ- 0VøCGÎ( Ž ü}Ì>o—åpŽâ. ¾ . â(1’3.$Ž ïž–Ã’- - ˆÿÿÁØB)4 À 92ÒÜèo3&Ž Qà„åî<1„å `A„„¯à„å„å&ˆ°B0r=3)‡"z=3¥B"$1 0ž©yh§.p«/ZÜÂH «$*:(ÁËÎ ·¿±_Ÿÿÿê@¬ÿ™1€S-l¨! —A‹€ D ð€ ИB <&0$´Á~‘\Í6 Ù6Ù6œÿÿÿÿŒ,™ ß ++0‚Ú!0+(`ä#r×3/€CtCxdä .PÄÚ XêÜÊðàÊÆèÊÈ@; 0@Ìà PÊÎÊä@Ï>ñ@üæ(!8垨 /)0ã./)2ã8Zã ++êÜæÒÎÜÊÈäp^… rGS )6…!"õÎP! ++&©¸B)4 )6€MÒþ%3ïá„`Íÿ¹¸ÈB)N $)øÕ=&˜M"õJS ++G_AKä/rº' KdPC—å?80à€á‚ÀU@àSjÏ ‰ºÏgk‡Y[q4(ƒ‰.Õh. ¼/Æ®Ê#&à®ÊO ‹å 8³õ µý ++jÆ.&œÞ'ãfûßfb« ªN" °öª;"ôÕ=îªÇ[ÙK °§†¤n¤ °ƒg¤œ [ड़ "ÈFÇX—d 2<"ÈÓB<<¢éNÈ /Ûÿ·U ÿ³„‹]Fß3ÿÿê;—å7—å;£r>ö+£r .-£rÈ&2Í ¥7bõeð2 ÙEÌ”@»ÿÿê ++ü" ++"-ô©“F‹fR, ++A«sºÐî¨" ++b; —å7ØÈÐÌn€å @€åÈÖÐ;^&eCK^8‹tg- ¾©È+¯H,'/H,¿vŽÔ)wŠÔ p'K`€ €åà€âGsó €åà€âà€å°€åà€âà€åÀ€pe€å#—åÑR@ÑRò± ÙR -ÿÝRKc&&à@È°,v/Áý°É (®ÝS¶Ë / ++ ­^0šåšýD/‡ýNV.a ++NVpP.iýÈ ++`–Â)8Ç €]¤8AXp× ++­ù°#ö&(† @^ÜB K/C÷')>C÷(1 ++ŠV†UŠ”àäÊZàÂÈEWàÞæèWÌØÞÂ!§àC ¸ßÒÒÜèÒÈÄØͪDD{ !pc% @r @ @˜O)B|SØQ""¢U <ôDOFO@OHOBOJO Eè)L¦¶Kpp4ħV ø©Y)Ú)N¨'¸¯¯hxô€Õ­ Õ­C¤ù5])Z$  ÆZÒÜÒèšY4ÆdðIN­2||q Cl``›' ObƺEl`dÙ) @fêPêP5%äÆà \ç$RþðRþðRþX#l`Rþð' Rþ) lR…RRþ*.ºb›!•uW!)TuW£\ ++ßæÊØÌZØÂÄÊäá\!m)V)XÁ°È˜;)Z¿j³ ÇaÊø'xbÐN õ ++d×Búxý á ;(ð`=(=`\*HàE'#\ 4.ïÿŒ †š#X ++P-'pxø8$¯ˆË*^§PË(( /0((@0Ýó? ++šÝ'þ@CÊ0þêÊxÅÔP !pÛD\Kù PË‹\Ð WÌWÁ'ø  ++4ÜC Úð$x1ÂqÔð8B)^   ,ÚÂÖÊZ¶T4æÊâ­TAlb@ IW+ '++5r¶TiÃV@B)^ÖÂ2Lx¥ '8à><\h=UÔ@Û#lÛ@r@‡UO¸p¤)`PL̪fSÂÄØÊZ¸î¸pÌ nB¶X¸[a¸!)`S¶la¸$¹| )b ++Xó ¢Åc`B#°(çˆÆoø!`DÛ‚dx- /0YåYB.3#âÄh/'P‡ÖÀÖhg|ïÚ'ê ++@L/`«/÷r« 8 ++(­ƒ" ÿ²²Xíse/Æj)d)f)h¸ B)v  ˜!&¬!¤ Ïc“ ++nUtnPTã¡4IL¹L]¡ ÃÎ¥‰ÑŽ*m¹6 †LмH"—bÄH >Wà) Eà)7>pìHëp^^' R $ ™ ¤' fìH ´¢6Œús #/IÿÿE0-# h.”+`hV.±h.\þÙ .UþÙ 6b’xm¥@)lHÌèÈU*~‘ÿH#r8ee ØÄ Ÿ)näÊàùjplr%mtzgjfFäˆÓ+ –+ ++¦()0H)l9t9c?)n+¯)p)r)tö:82@æ æB»Þ,åXz)vå+ ++Gì ++ÀoãN©PB)x ,ó Q,[`90âD~ž©# }9}"äµ0Ÿ1W —‰* ­*}*é*¡*ȪÅ*$å*É#;Õ‘#5)Y#5)PšÀ”`šØ¿@Cà—åÛØ1?à—x´h~Ó<àŠåG—åS—åO'€³[ð: Œ¼Œ¼Œ¼Í(&à0”(5'à†4” ¢˜~˜¼ò&7àœ¼(øš ¼,øšg1†âK8š˜~@Pà†â˜~4˜~SXà†â[Ü_,šQ†âcà†¬gܼ@à†âk€†åpà†âsü~€†åxà†â{ø~°›ƒä~!—_…®à„b“ ++°A“ˆO£øƒ~CÀ—娨úhSˆ S]:( W(P$(($$(IÒ ($(hšî=õ,¶£÷‘*Q‹å À‹ð1à‹Û Ž „Î ¼Ÿpà ã ‚àÐÏ!`|†O4«Ü@ `žå€@¢NySŒ‡ " °(ÎâOðî= º«œúh_À—å€qJyÖ(¶Óü\±RVy"‹Öx‚RxO | Ĺãó0 Šø ¸XTó%/º8†HngC:)xl8b%˜]”H(È°R- —g/G$0@2L,5/à~ $î7 ~ x2L/¶ïL æ âWÕ(Ä«/²ÿv}6V Û]è!Û ++p¤B`·ÿ£!HzPµ ”X -D RR#€2k/ˆI/7Š\ ÿz)|)~)€)‚)„)†)ˆv;Šv8`E™ç e<?® €pÇ-x*& ++¡LEV“Ù ]8rR B?)ŒÒxÿ3¬ØÞ3®ÐÒj! M/X‚uVŒvGFðXû9 ++@[k8Pü#Hƒ@8-79 ØÎreP.Š+H`ŸÁÙ* æ"… r(ú'ê˜ÞÑã0ZÉ(/ hàЕ¬`ˆ ++XÕ ,!xÛ &%B÷ÐñH)ŽXB)”  wÈ™èv…q ++ á™ £ë! É0D›_à€âˆÛ'ÙŠ…©À‹å° á0™Õ3PPáÍ°­ø¥¸¿Â*"à* h¨a1çè•4E4!4%S)à†å-2xb1à†å5°-6 ?IhŽâžç Vw † ZwqÜ <"‚ìD0 ñ5@ áüÆãŒjlýãŒà]3Ø pL0à áQ3/0¾LÜ#AM95fw @…9""ž :ž b ++ž ÄÛæÓ&æÓÑ9ë6 ++×rľL w 7O ã0Ê ++„ ‘8XÅ9 _ à‚åŒîbˆyé.çþ`€àþÿê6»ÔX»ÔPˆ ÈÞ¨³04˜B–‚Pƒ°)Ewˆ VZØÒìÊ /jjè ³÷EwMxEw*"xÄ B'`8Ÿ &”²t”)’0ªw ¨w˜! rõw°K®’éBK"x’!puE ö‰Q ++)”u1(8‡&'‚‡@()–Ú#)”))¢˜)+š)-âœ)1ž'3"P)  Ó"BÆÆ`è&Z×.ðn×%ˆ›ÁP L@) ž/p˜üPO)¢ ++í"/†À††?Äf'f-'`†/b`' ++!b`¸?Ê3._ da ZÞs a2™-B8)¢• ++5)¬tÚ< .êÄ?¤5.¤‚þH€)®ˆ ++ˆ 0/ƒ.)¤&‹æþJ ++vq˜q¬q.³)QâÃL?¦˜)ˆQÞBà#ºG6ˆ-^0i?)¨?ðÉ Ã ++Ã"1C¨B°&¨0%R[gªP)¬.N€)®“Ðxëù²)´  À ÈÞßùP‡à ++à›”*? à›œ* ô†˜A# nJ ħB(Äq÷W@">à›çBNš(S&/ °ÌFÌ †9¸‡#\งm ‡å ‡&^ ±$¯ [J ¯Iö ¶ @åÓ,ÀŠ³º¦<#aÿø…ûïe­÷°>Ë*Öéz"O_)° ++Ï ++4?8k Pd ++O_)²88°G B  ?)²…3!OR ) ++O@à%èÝJ¾0\`Ä1 Ä1/ ++ ^ ++¿æP â)´¬Q‚yç$R"†82""˜ ²k?¶àÂ?Är?)¶0 P ++{ ovÿÿÿ * ½Eqâ§ÄS^qÿóAÄh6pBÓ oÿÿù=ÎÔ ++#4Â^ŸXŒiü)¸)Þ +* ++ÜêÂèÊ B@Uá|Á| %(ºP¦ ++7 À(@qJo`'z€ÉQ¨Š#'Rb)º)Ì<’)àÈÞêÜÈ£>o4bÐ9ÐO?)¼÷$x¢Q¼  ÞP¼ÞO%Øhì]`™@œw/x»"B"Xx Q¢TH75¸0(€ŽˆðÉe `"%òe;Ï—/pý, ++$,N,4B_ %ˆ›I Q#qj™¤(`9BÍ(!@R")ÿj¯!0¾N2bÆÆó/ ¢!¾¢! x?ÆøÀ)Â)Ä–€| VÆP h8QÆÆ·¨Ò‡ ÆŠË.$€® dÀÁ0 2 ³€@ ++O1 Â{_)Ȇ ++kžHÈ*vÿÿ¬ RÈKqaST`dqŸë« ++œekÊeÈë‰ÊtßRÊÈ“PÊqXh v\&h ++ ++oàÿÿýÎÒ^º)Ì~B?ûýΫ"/ñÎá ++5)Î*Ên ++/)l/áJ" (ÁBh"‘,L+º+V_)Ð" µ>÷ðâûI?)Ò·Ðy]ÒqÛÝoÒu_þÿûÍu*_þÿ»Í  ++"†u Ô*‚*8D)ÿðƒ?)Ô¥ Ôa rË  ‡ ++/É ++ fîÿ»Á8š ¼' dIÖI!ìÒQ2‰olpaïIÖd]Öd{Öïï+B/Îå S)Xz  Ø*/‰Ü ØJ ÚJJ / ++OÚŠ°%QêQ{ ++'â'ݘä?£( " /½’?à='/=p1)Ü%&9%ç 5GLÜg/1Ž+!Žê>)Þ×Bi'põQÆ„p«3P«3‰€±H‚.h6#  T., ², (¡(S › ž,¹ )ú9)rÇ?à¢?'VìPRÐ=B0îÒ$cZÈêÚÚò¥?á m?)âÃ?"RVª>8] ++Sâ#ÁáB+& ,P Ø&RZÐÊØàìNQD}H" }H[ñ ++Fz/ç)GH¯8H01HQUxÄxPx¡xPx~xP x[xPÔx8xPŒŠ}Þ1M ž"Y0.U‘æ/\Š yY€00 áH>Qàž‹; ;(/馇/Û¦‡ .ÎÈTȦ‡™YÐð(:ˆàŠh h/¡h  ¡Zh„˜EÀ/†ÀIÀ<`ÀRÀ EÀ ‘ZÐÀ(0À?Aàž'?*D.= ¨Õ. ÇV, /ø, /ëÊ‚,,,4'(àH,,9àP=/žd ƒd I] o?lHwýì4œ9è5DD"6ÓÈ V éù0F‡8à1à $/$/ý¨ /ð¨<Ü,/Ƭ@ŒLžŒŒDŒ/- ˆ/…QH òa ƒå ƒ„6àƒDWD(D"9”#YœpœYì ¹Î$Zˆ"D7\$6CC 8~Š/OZ " †aäì0/|à7!<%”,únËÁû/À"’/®/ , /“¼x¤)\0$;\,Ð/Z¨  Ì,5X2Œ Œ Œd(`øHPÔ&/1pø7/éø/Þø+Ìø˜º'¾à¹°à¹/±Ôp¤˜\ø(X¤-Umõ/„< C†åð<T˜<-?PàŠ¼ 2D.1( /Jc.9GJ$/,‘_†åL`ä7Mää/ñä /ä ä'L,D{L(D.=À(.©}ir–= à‹0*˜sL (/‹ Àǧp¤/t¡~ Op†åd, a8"Ô4 h@/LZ’XD€D€0/7SMæ Õ ++Ž—N‡åcM/ /M  ÕüÈ/MÌ/MÄî bíÄÄz Œ/øŒ PÑüL9ó”  *} r—/Ð$ ö9]h9]@-þ/¼Q\È1‚å`<1‚å\È‚@/§”XTT±ó.H/’al²—8dx<kt  8t¸4/pàH3l4 8M(/!(/¼ /¼ /L`ä7 2¢œ¯ ã^ã­ºX1¸ ++Yô/ÃS\œ PA( Ô*&gî•€ü/Y<\`n ‚å 4/F÷Rp4+*±4 P@@ï ãŒ Šâˆàåpžå@ bñŒŒ%cT45/ý9ààè -dP)`0Aˆ 0% ++À*#£d @ˆÇÿT@ŠåX0Šå\pŠå` ŠåŒD ,õÿ áT@šåX0šå\pšå` šå´|mpå /rcV 0cV/_8 @/V * 0 /30´¾ŸÜ dP / 0+.É L È/÷ÔW L P .@à/áÌ ++t – Ð+/™!¬/´¬<¬/ŸÀ ++Ð  ,"ä/qÀ ä\ä\/a#ä-ä.ä&+îä4Ø/ØÐ 44/ (+/‰$(/Õ(/)î /ÀØlè 0/e%Ü”Ü,Ü @x4/A&Ü/Sà Ü>Ü DÜ4/'ÜÜ` /ýÜ pÜ4ùÜ ÌÕŒæŒxŒ 0t¹| +/™(|L50žå4/¦È8È0.-)”P OHšåT /)ˆàià |ˆ<ä0/*ô/<ô& ++íôÈÈ/%hO/ñ*XH /øHH/ãàO/Ñ+À/¸´À¡àP/±,àvà*P ]LH(P/Ù- /"   4  È (˜$˜0/©.(/ã 0,0*9/'€@È@/§È/–È ‰PȌȤ,?TàŠÌ6&PÌ/2Ì4OàžåP¤8¤ìÁ/ç¤3 hÿ ãL0Šå ŠâŒàå R1H.L0ùx/¸([/‰2à/Žœ˜;/!3˜c˜ T˜@¹˜€M+L/#&/l* /|l*”|-40/ípˆ ++˜P5¸"°?Àž¬6„0)4"0„10h"Ž!ÙŒ&°ÕŒ&ÀÑŒ&0ÍŒ&' ÉŒP/†å3 *ZVãÞ´”°. 0Ü/Ïί4&€ Pè%àžxìF¨,)<#0%´ì*[l:TÉŽððR†å3pðH¹ } L/¬ Äà t /˜ 0! T-€)5$ /p $ ŒÌ/[ †#H@/œ`¬ ++7 ¬ ++/" ¬ ++/ ¬ ++ / ¬ ++Ää6  /ç IXUÀž9Ä° °`Z /$0#%Ä ++ÈÈ| ++%Ä.Ýÿ9ÄcL ŠåTÄQOŠåœœ bµpœœŒ'S šåTÀQ“šåªÿÿê0Tt/U°Tpœ2tT0Tä à.¸ñhðh.Ýÿ¨Éh.ñ¤A*ñÿêP0HR‘IÆÁÇT¤/’P3/l#¤ ++D##0¤ àPoPŠåT  +Us °0šåPšåT šå‚î#L„gL´x_LLœ¼^0‚å•ðÜð`Ý)È œ.kðœ .ñïdä.Öï<–.kïd`Aïÿê0(#@“å ˜0®’åànâ áÿÄ”  ¤N0 á¨ÿÄ ø ®ûÿÿà áó,ä(/Éîˆ.¨î$pDc(.Rît.íí.×íP.±í°.œíŒƒ<X(A(d(.ÔìP.½ìÈ.ì<S($(.üëd.çë(»(¦(z(e(9($(.ùê,.äê<.Ëê<(ˆ(Z(.Eê@P.ÛéP.Æé<š(.‡éPzV.üè.³èH. èx’@lèÿê54‘  P2œc.MèÔ  % ‚ _à á-Ø.öç°.éç(ØŽzPg(.RçP.=çÜ)P.Ùæ .Â挭.˜æü….næa(PŒ((.÷å.Íå<À(¯.uåð.Hå@;d-.åœ#åœ h.ÇähŸ.fä<YK.9ä//ä,.çã@.Ðã4Ã.µã . ãœ.tãx[3  .üâ(ë.Ðâ<Ã.µâ´Pv<i[<((.ðá.´á<§™sPX+<.êà@Áž{X5OàÿêÛ *!€ÛHƒùßÿê蚦ÁÖ‚ÿ)ì˜ÆÞàòZæèÂÆ!1ê !¿ÈÞîÜZìÂØêÊæ&1è&/êà$2æk"×ä˜ÚêØèÒæÐÞè ++«–ìi])î yð )ä)æ)è)ê)ìÖ+&> }‚ *R·*0·'¡šRîU„Ò¼€ƒêëªëC?ðÄ?ìJð©„™mð†Q‘•`qG_)ò!"dMò™š9ªTsô:b› b›ÁLô* va¨ó¬”l”7U¿ˆ¥˜C”!Iôæ‰[_)öÝ]½/öc§J×ÄIÕª”?)øÔ?)úû £I :)ø˜§TúbúÎ]üÓúÎ;üÎ ðö›Hú± ++Ýg´iØè ‚«…-î ÇSXp¯ ˜“4³@ˆ%"÷0¾81óX¢ÃQ8B#Þf—c ?ÿÿþe—HÀö0!Ÿ!¡ó#xþÛ—3NpNŸ—SqMµ ô""UKþ( ›” ++ ++¤»» 7)þT¨£ÆžÆbšDÁ?Û²HBÈ +õ8©O?+¦Ò^Ìì`2 ++TÁÈ. šP.+ÈqWXb.O) *Oc°B ¢ßž°È8ÈÑ®`Pî5+ÿœG%(p 2+÷I ð£9ˆ@W.'öŸS h¸§&&&(&¾ ++;€P& &XGD !8ÅO ‰ $ª˜<gÁÊ @¡EK «¨1É@T sîNˆp ++Ì«Ò«OÖ¤  %xƒ¤Tá‘PÀÈÿð XÂèèÊÚàè@èÞ@ÒÜìÞÖÊ@úQ@ÞÜÊZ PÆÞÜèÒúš5ÒÞÜôÿùYÁ@Nê// l¡›_ ++@@`lq?+ ¤)r Ø P+±Ã _âxÆÌZ?+é WœW°WÚWyWŒEØØ@#L0cQô Lm  } ++}F ++}C ++}C ++}1ø}dZh r/+ ¦ ò¢sÂ'€Ã ++,Óª ++td_+Ø«[/+.  ++îæC«tqK_+!"ššB>+â„bÕq ++“,4"+9p ++¨Q ³y.<akB_+V"â+Ù€ÎQ?+ JHú]¡ ®€qàWC ’ÎHHvš˜<ıHVû¾°Xàx¦-OAö‘##8Ô ++˜!q?+·àYY?+9 .v£`!q agœ°gpº%Ìv*³/¤hF·˜)`0+cWÿ¾?ác%Vš·&5+ %"F¾a ++«Uÿ¾aHH###/%(#æó€— ++Q ì— ++; ¢$hå·p–òý NaH £K j"9 I€+Q"Œm"³#;˜Œ[%%"`\]#.`>90Á¾Ä¦ÄžH0Áž€¦û #† (6†i0ž„(\s) #x-„›?ï+‡¼¾_€0ó!€‚@'zöIˆ%ò ÿ㸸+Jÿ¢ 0Váx‘, ++P&Q`B`P~ …Â+&ˆ9Å/ ++Hk0Xk»0ÍÂk€kØÙ2.¸õ¼øÒÛ‘•ÿ烾`Z+& ++(Âÿ pƒ¦+(2wÿÿäàZÐÊÂÈÊätŠÌÌÊÆè\bbhbœü bÃÿ îµÉÃÿL=Äÿ"–Äÿ !Z  \ "Þÿ +(Þÿx&¼ )Æ/8Å/8ŠÊh. `ÊÃ(-ÞÀ`à0 6 À8vÀ ++ù(Y|À +*yiÞ ‚iÞ(è#qÀ°P&< 6ÛpJ kÛ&+&b=cˆB'`· r_+, I1½/+ÏÀ.-`h£s,»1¨ XQ,´!.' ++”]½' `îàP/+,qy$! OX—/O˜ßLæ‚?è0…É-é'*éAT%mêXöHàªÉF ++Ûp"%ò¢ ++XEæ q ++K ,ÑÆ,O¥ËÆ XƒÔ+0DöÿÐÂÜÈZÆÞÈÊÈt†ÂæʘÂÚÄÈŠðàä\bbddK dKT+.KU=T"'T:`0 ++@Ã!(Ú 2êÜÊðàÊÆèÊÈ@U BÝ„L ˜BZ³ƒÚ+4.›àØÂÄÊØæt äÞÎäÂÚ`å få+6+2 D=b" hm æÓ" C8A+'¤ ¾¢ ^¢ '8¢ *d¢ 4¢ õH+6؆H g¸ ÔóÜë üæ @Äêè@ÎÞèÀ L(ˆ Š1ŒXyÐ œ1PHŒQAR+8€ú7( ++0húTC*+8í$ííJ/ ++(idðXB-0 X ,ÜàZÌØ-ÜZÆÂæÊZØ ]È`Tãd’_ áà—áx*?à—¡}:/9y.+yQUµg…o#0µ“Ð&&ö¸9« Eq/è° …V½—å °—åÀ—ÍVcÍ:¹VXÀ)’3 ãXÀà’åD^ã·qXÛ  ++ °’å À’åL.”µ´Àà€å0€åà—åÑ®€ à—åà€åDÿà€å€å  á Šå°ŠåõJH]xRý Jâ šå°šå0’Ük4D™[@EZ ef0âSã ++ôñ 0”åSáW ++ âRã0“@Q ++DúÿÿË"GË64 È.,Er½“@ÔÌ1àŠùÉ%hH ãQQL ŠâpHxbùÍheZ´ YLÍÿÿê@Šå¥L *i¥Ln@šå¹ÿ©L²Ég %RŽiPe|0pŠå4Ÿ 0ŠåŠåˆ<]›Rˆ0pšå<› 0šåšåIhÈ  R,¬.ÿ‘NÛÁgÎh àg\z+:Þ ++IP+<Å"ïB D +>Pz.0 ++9L gA+@ $ ö+@HB-"  ++!p ]"]@ pŠåeýÀ^ã9 ++@^ã 0’j#€àjj E“ñÿÿê€^ãXO ’ånjÀ\/ nj= -"À-ñ¯ ++ ’å à’åàŠrz1žq àžåàŠîpâv@ ++1àžryS‹(“ ãyÎy0Dt<@qÞ†Ñ" "p"°ê`]-0¾]úTÀ†å(1?p á‰  º©‰n^€@ ãTã@¤ÆP­4  áXP0Šå )í±4ºmõc0šå š\ýŽâ@åã ++,°™å Uá*°Kâ,°‰å‹ (@(Úlšl0î)€àÿÿêGïO< m œÿÿê  ã&@|  áÉqàŠåŠVtDð ++øQ.š3žå!Õ @@š¾ ÿ0šå “åéÿÿêŠå Šå Ø¢üõ  ™0šåY@èÿÿê1 “àå`^ã©x”Mñàå$àŠå 0åàå,àŠåbnÂw€ÿ(0Šå pŠå0 Šâ$àåN¡’ü…0'0n(0šå pul½r½&ƒ€*¥j½1 p€¦¤qà€å@€‚y"5ÌÂx ¤,jô!œ˜ÀO$šå@Oa@,èu8,*œ òoìn•8 (‰ ++\æpÞabÔ`TÞ….¬ÿ’WbÜH´OŠå$¸ ’­$$(_ šåWØ„/ ððoÂþÿê(àüdd<_0 áµþ œ€01sþÿ01 ž ^Y –rÔ Ttpb¼.@þ|9é dƒ„+Fd² /`nR j"PH+DfdDl) lKB)J0D0‰× ‰F‰ xƒ†+JB[ÌøOÂÄØÊZí níDH ¯T=®'éÜ»J»HD’D ^ðøB+ü  ++)`Tb ++òÀ á° ápŠå&\ãX ++àœå0žå`Ç ++·D  á¶ "?¶ *Â’ž À à’åàŠåà’åŠ@0’åœgâ ›å ÀŠå°Šå 0š–_àåÆ Z鞢 Àšå°šå 0¦ Æ/è‰tutdhwQ@†å[õSã:ªã%ààã #àšå áÀ¼ú ¼/¥¼ð šå!à”åàâ^ãâš ñR㸠++ œå ›l#0,CpådŒufÌ`Z@¡p@p ál\ð|œ+¼w؃/€Ø„ ++ Ÿ/nðŠ#`¨œN ¬µxØx  ÈH ++oO@€åñÚõ:.½ÿô_¦tj™‹yÿÿê*îO ++0šåj/0Š+íL<0šåO á" *´j.0mGü€ üy ++ê LøyXï´´j'Œ’ +%8n„EÈþÿêhd"nþd/id H  á ` ¡(D. p`` “ |†8‰aØ/8‰T`8‰0`=`  &dd/d#/=dg¼¥<˜ŒŠxd TDøýÿê</ 3*e ><x.Áý´@ºýÿêÄ.0Ä/!˜¢ 84TH„,ƒH& ã¼ àêôØ ŠX ÒHñ ò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@PÜÂÜÞàÂææ+w@P˜bb\j ++†+ãR@PÆÂä@ÆØTR@PP?÷PPêÜâêÞèÊ@ðTR@\\\RUØÞÆÂØ7ÚÆà—ÒÜèÊäÌÂÆÊòèØÄÞÈòRR@PØÊè@PPr@PâêÂæÒ#ÏPÊÜèäòZàÞÒÜè…´ȵƒUP¨ÂÒØu–@PÒÌ@PÌðxŸ%@`÷ÌÒðÊÈZÂäÎæ@PØÞÎÜÞèƶKðêìÂäZäÊÌÊäÊÜÆÊÈ~@PØÒæèF@ðT@Q*RRæÆæÊâ@PÈÞZäÊæè± ++0 6R ++Èz3ɤdÀ@PÚÂòÄÊZÆÞÜæ€@PÂààÊÜÈ”¼MÖZ8rPPÜÊðèZ%@ (TÌ@PÆÈ($ÆÈ~Rw@^ 'Ò̺¦JÒÜØÒÜÊ@êx0JÂÆãŸÒÚÚÊÈÒÂèÊ8: ++À P‹?Êâ~§êð@Âè@ÆÐÂäÂÆèÊä@àÞæÒÏ(Ô@jbprb`@ÞÌ@ÆàG2\ææ¾ÒðB+d pÚUà ++””’|`, ++”Q”&&”ð0’å<àâ^ã ++ ++ #0 ++ñ¶p ++TSã ++”Sã\ ++ÔSã8Ÿ'Ÿ/-’‡ø +åø±/ áw/EïwŒ„bq  4uv?ESk/Uïk %B81x4’åÜ?p%Ø.Qà@ @ŠåO Ù ++@gÿÿê+…‡ ++Ôë ë ï ¸.À¾ D·ÿÿê,R,A,/},D 0½…Ùz08q@Šå’I 4@ÿÿêŸ,é  d”d% ?„ålíl.}®l§ €€Xâ ++ LxélëX0/AXøHRÒB+^ ØpÕú ±ÑeÑ^šåìÿ¤ðbB+j  Ð ¨äÒìZ|Û× /•×.×6T .T(T„à’åH^ã&C’å*'Hà³þÔx#p_ðšåL³/LೌX ŒX?ÌSv "Ìv D(Õð,JÒ¨Òè+Z+N(¬aÚäÊÌt˜d ++Ÿhó p$€ƒ+LA<l< r BLD+¹A+'bX(dA+vA+NePeW+\ "hj¢ ++@ˆƒB0R*‰€ØÒèÊäÂØtÔŠj ++"d`C€+T+PB:l: bA ++@?PS¶F*FRF‘p+Ø+Vß7 PlÌ t.T˜Jš*všVàR^+Xšk-4Pnš fšÖJÌ'dtìËXËcWa0§9+Z’2+\! @i-aâ+^ (/!/V'/‚PƒX+bÞµ æt¬O\b`pa h›Sf+`›:l5 j›@›`›iµ2*€gbg!H,ðú+dh- +h$fEÎÞèÞd® ×f®E©d©h©2ÂÒØåÚˆB+v OpâoòK·^ã\ ++\^ãV ++œ^ã@ ++Ü^ã* ++G^ã$ ++W^ã ++g^ã ++w^ãü ++‡^ã½ ++—^ã` ++§^ã ++Ç' ++@` ++»Óâ1 0’^*&«“™'K*í ++ ² ++H/@þ, tß­þ,R =@š›õo÷o w -/ðš;~ W*2 ´: /é: ¬v éÒ=òþÿÿê×^ãJ ++ç^ãŠ4^#^^-?pšå[† +ÑZ-R ++A%S ++R]æÌÿ”ôMô"<Ó &àp Ípà/ @$+–à á @šå: ‰&‰&ì ê/ÜìxµÒ³X¬X?X.ª2@ÃþÿêX/Ê"¶þÊ/IÊ'/çïÊ;ÕÀÁ ºÊ0/A,Ê"jþÊ/yÊ"]þÊ/­Ê'/×ïÊC/AÊ+ÎOp’åÒ/ p ,µlFšå pÚÿ ÇB/ p%-t”.IbÄÿÿê `s ++óó–ÛüFöF!à–ó äóŽ–å –åoð× ž"×üÞ ˜—ÞSPSãPÄ?ä*3p¬ 8ß× ÷"3ää.Pàä” ,·Oø' @´ ‚4ïF34<*} ++4Ó°ÿÿêS ++  ++ ++ ++/ È k|ý ++È  ++_@ŠåHøß¡R ˜ ++g¦ã¹ ++ ++\  ++W +ù LÂ7 ++Ð.M д#ò"£ò¡ ++ÐSãaÜ/S$ ++*K¸:0  0  +ý H0 /@¬+E LOà á0  *î( ôî.Ý µà®D5P$ÄxL D*IL jÐkÔy.kø.ÕøËøÄøø ð *9d/¨þœ.qœâœÛœ(Õdœ/ œ 2"1ï*È„Oþÿêó§¼þ©5$ pwpÀgÀ  ƒ @r ++ô©8ÿ.!ÿ.%ÿ. /"$à` )R<a2($¢ì1((è@@Æ;D [ÜuD‡+ @$x [x¹Dtt(„pÜt p$ttˆbà†å@ˆ_à†å!¸æÿÿê Šø ++kôm<šå@Šåžl .­d } v£+@zƒlƒi6+j:l: £n£vn£ Hƒ(+t,} Úìh3çN/`pÆ nßRx+p½<?`lr< p½Bãpã86»? å 'Ö¿!%À " !+r * 2ptp€ haJE(r ’+v@ŽôŸTNd‡-‡zd7èÂÒÊbˆG dxKGM*`Mz¶–FR Ò+v–F&ˆïÜ|Üv|ÜT¹p*+~8‹ÌÞäÊÒÎÜZ'¦ &f`]-O ++5 [¨v*€5~p%‚  Ö#h1€+Ä+€&7æÊâ„Z &fbÓ&F‹PÊ*F%€<&Â<ð€B+‚ È  äÊÈZ|‡ðX^ão ++˜^ãi ++Øÿ  ++F^ãÐ ++V^ム++f^ãm ++v‡,WsF;"Öÿ;.É£" 0Â/-©FÒ/«0 .= ¯_0šå vó' @æ·ï ÌÃ.é ©Ã¢S ++fS ++á(-¥á(Rá(Ùá((V<eá( O,>üüÅÕ( Õ(ýÕ(ü /1 'F DÅ—±`ª 8/9 //Øà ;/Í “>PÊ ¨Ö¨XB+„ ðT&Ï)=p—–§IÂ*mºŸIOšåé`SjB+‚Ï Cò+„AQX`ƒXƒN+ˆ÷%Î"tÓ_\b`rf… d: RŠ+†":lt /ff"@6 †ó% µ¾'êô'^¾ó%ˆXPRê+‚—`ƒL+Œ2"}@ f2R/+Š2"E2"Œ2"… 9v8Z „ƒJ+Ž" \îA &fj¡X DV *hV ŽV % âO ++p¿oB‘SEdtÒÌzF &fl¾# CSS„½ *¾Ê`Ý ++¢PP ’P v’P @,‚X+Ú+”ðó3pH n_G@ /¼@ ”-òb8²+‚ ƒF+–1 FÌÂØæur p¼rFx”–xL…RD+˜þ6èäê>µ r„Eƒ˜ƒ?,8/ƒ+Ü+š$ì Â& hE3'FÐ*ZК3%šS 3œ3vœ3‡ƒ&+ž,ì>) /hbcI77ž7 !ªÁ5* à+ZPÒÈn nv ¡wî+¢&%0¤ÐæZ+ä h>,''@kFhæh¢UY‚pƒ$+¤GGæÊèBÉò. /hf¼Gg(´¨¨g¤¼Pb8+ ü¦üv¦l¨£v¨£OH+ª9 1²oh* * #¤ÐÌ:„¬ôv¬„9+®Á(7ÒÌ‚P+ø+°‰SÂØØÞÆupº &hh»Eô-™°H»;Ïp»!8/=ú %A2+ ++(ƒ/¦^d0R"+²d0hàäÞÌÒØâP /hjJ# š# ²U.¸è.0´Ç pÇ Gâ ¸¿¥`ƒ+º*s2N/`r· h\H–ºUR+¼®7ÜÞàO® /j`³F°¼°@®ØA¾A?òBp¾B0Bk;À¤wÀæÔPB+ä ¸ "ï`"ÚìœE0æ´ê0.P[ß'ÊF4ÄwÊF "4{-e` D Ã- ++H´T ×0ˆ¤Zs“*žp“å›å$.f蜺ÈnP@WãßnPCãÆnP@p'àúÛnP°€R ŠåpêKrP "|äÚI" °Œj šåpvPîI!@šŒ}vP‘›å “å ’t"@xtpqAh`'@ ++LžÑ(ÿ*|N ++L *¼ æK"<î ++L$/.^Ý ! ++LjP *×ïº/@ &<Ø&˽<«u`òNzJGjÊ?påc13 „êL?„åaŒÏ,òN*/, üí` ,8p á ó$L#ÿÿêô ð"¸þð*Að'pèúÞ(D ~ßOè ñe/=f//&ß "è öÝk+ /×ïòNìk+ ×8ÊfN <ª¢RJÊ \·.xk+·.`x7+ñqþÿê^¢+Âh+Ä0Y r+Æ:$RÊääÞä¤L j /jbc P m Æm 1.`ž>+È«i•ƒ+ʲVMb. /jdP Œº*dÊÀB°+ÌÉj!Т PícÆqdtQ+àCKÊBK77?Ð ++2?+Î+_+â0Ð[ º8d ᱺ±R†Þà^†#3-TÐ @$Pˆ–ÒÔ)Ü4P LŒ$O ++%Rla '1Ö(+Òo‚ LX2 Z¦+\p¤ÐæZ|P>ˆ 2bbpE>+ÔÕü$F rF?®Â H_ ++/d`_!ê?¤ÐæD bD ßC"Z|J dJ  èn#Z| L fLž dϘÈÞÚìØÊèÊää.R`/+Ö2/²V L-/  ++ i”h+Øð+Ú°’(+ÜÀ@`-ÞcÏRƒ /jfcJ*+ÎÞM´& ++P¥bhBlW* pŸ__v?+à§/+⧠`¡ 0€q8ª+ä1ç|‚Hƒ+æÏHÚìæÊy´ &jhÃHÏ H?=-:4Þ :'Ð Bæ o?{%Or?)8¿-9 è­!;Dß j€D­!D­!*! è­!G:+dï‚„e-+ê³!€ô jDE ³!C€'É*αê³!ж@B+ð È „Nx}<r}<<îV' V'Z +½’(V' PV'/ Ž+QŽV'-<=F1;Ñf,=F ¾ ;s=F-<=F8/ );ÍÆ+=F Ð.!Ð-<-<¸O«R ll«R… ++   ¢o ++Îbdb¿# !l`‰2-Ó«(`0-6 ++|6°$ °~--YT -^¬/-ÑA#Ž.-BO/-–æ ++7=‚ Lñ?-æ ê2L F. ++@¾Ÿ ÆØTЩj."¨Þ7N `Q- à !o--Ç @-xJ¶?( / ++ 2 07HP6¨ý@X-^: ++Xfn0ˆúþ ”Œþvo--;ä(/lbä"ldä%-ä/-ä ?-ÿ €ÿ-$ ++ Ý‚`8%â+üC_b p-‰H9p8 b-"T1Á @ 8ÈÒäÊÆèß?Z¨Z8j ++r!@L å 0b¨ jRù‡‚¨ƒ‚-$H* ‡Òv*) &lf&wøQ ·/.¢)-$/G¬@f!gw-"èÔBg`-& ÌHÌ@P-’’O- ++P r–09m/ê9m`b:m&b¯j?ÞÞàŠjjbþk ÌlbƒmRDbRRR¼lúmmcD ÷R RVÅj>bbnÅj!.@XBb‡H:!+ØW|÷[€vØÒÄæàÊÆ ÒÚæ@ÆØÞæêäGkQÊÈÊÈX¥‹ÜÞ@ÌäÊÊ@ìÜ,òÄØÊæ@ÌÞä@üæ(xH„H/ÜÞK<ÐÂæLüOQPÂS!R-"a (¹ ]^Wx-,[_ÆŒ/`n l`^b-.-*@=l= c^ CÖ"Q-*Ö"¾„* -,  OP-.„C’„Xê-0„)œbú-08&Š)*ò ¸B-ä  ¨ (ÜàZÒÜæÊäèZèäÂà ++0hÎþ½—å —åp—Ò&Àlu#HäApƒå6…$ƒåc‹«µ˜|pXe ºDŒc‹/ º@.ÕT/ pC‹ p¬C‹Ô/C‹[/…C‹?mL0(^D0àUX€h ´9UØ42B-Ü  hÖ†i1'Š!/@à'ŠG€ÁçŠHé5eé)é"à—£HU á/UUûŠ> HÐ] … /ùùCO šå¸]! `Á ªƒ-6Hw ++Zƒ ++d’ lÏr8-42Q FbÜ l–O-<-2F7} 5&.? š„•7«@_•H$<–„)-6¶hr-:F]D„dR 6'-8."Vt9 a+%-:t9¸ˆB-Ø  [ /`ûL+C0$b°’åÀU„ø4“À0Glð'I0ü@“.À  ý`Î^ŽË.íi½ñ¶=¯rˆ 66†nGÀÀB-V p \ $#ƒwíÔÿƒw]/EïǃwÍ”ƒwÿQTƒwÿ,/-P–i?-\ƒwÿÿÿ{‚-L-@,— ++ÌvdÛ0 nBv‚v->"C>bV/ n+8'-< D >I¿‹w*%-@–.!(º ++?-N‹wQ-¾-°’‹ ×vd›B nÙR‚-F-BD<b‡ fI BGBP¼C*CD“wd-º-H‹ Kwd@D nq1'-FœL—w(-Hádà-Jž OwfI &njž×L 1d›w-f“ˆ›w )-L¢:-N›w/-P›wdÔ-Tö ++èvfo nUX-R«<bÙ n«B«óyq»;*€oTo£wÒ-VhÖ-Z(hÎ`wfÌ *-X“GG¹d¹Z¹ ++§wy-f E°§w{w"F£w"@£w"*£w"£w#›w›w"ò›w"z›w";›w@Û ++ów£wy9 ++h£wH£w,*é* £wH@ßm§wçlÝšå’å!’å% ’3fo·w˜†å!†å%@^ Cç†1/ †1ªz ¤Ãw(Y2‡Ãw“yQ/Ù“y3/!V3'ÇÜГy4/Õ“y?/)“yŸç^ãI ++÷ b,3n “yy .¹yW /çïW Ñ/AÑÍlÆÐ Ú3y/µy3/ýÚ3+ôDÚ3l•ûwÚ3A‡yÀ6K‡y/õ´Ò4>‡y)wΧpbx/¹Ä¿(¸(U(B(p ++/)4 H<"ïýÚe <Þ4"âýÚ/™Ú'—ˆbÁ-/1 «x¤b8/© b/‡›y<.= ++¨ûrml\ «yQ¼‚ ++âP!‘Q“:­“å “å0“/-«y¬NàIÀr/- r+/wïs Ø ̧sÄ. Ä“ÌŒ‹rKs\/ÜàKs;/œàÀȼ ++Y³@ œöœ/à0Rbà ãà¬} —å —¶šÜ6%P ++ËP ¾¤P¤P§lOæ™ Q àåì)³Ž˜.Là Sœ |œ  |&xt àcP/§ïÀd6(LlT ¤T=—à8´Q&D¤ L—ˆ0TŒøWw ük ŸÙÁ­O–(}k<R(; ž.(1%P€úþÿêòrFÉ’j6-\å^…</-`£v`â=„h-d4 OGjA r‰Tl-b>d8 /p`DbP8 À?HL!à B#.J<d<˜å=/-\å=Q Ê-fT?/-h,vhÏj£vj£¤H-À-n0 \w/`jY pl¥wK§wD)-n§w4 j4@Ž§wFxB-d”-pp bw/`j4 &pdOI«w%-pQj2Sš-fáˆórrrvrÀ@’’-t<^w/`j° &pfa7Q ¯w*,-tK Bƒ¯w‚-Â-v*kw/`jÙU &ph×6H°L ³w&-v°LD&ŠD€B-x ³wÿÿÿÿÿw/-z³wv%-x³w/-z³weÆ-~'& wh‰ j¨ T€-|1"<.É /pl1"B¤ |#&»»w*/-~»w%-x»wiÄ-‚J"A3 p/#€J"GJ"‚¿w+-fVj 6„&" ^5 &pp¥h FÃw&-„f Ãw/-xÃw 2†$}‚whJK &pr”t EÇw*/-†Çw'-x”t/-ˆl vˆ&sd-È-Šârn /r`cIËw*)-Š5Ëw"-xFwd¾-ŒM ‡whˆ &rbÀˆHŽ˜ŒÏwd¼-ŽŒwf  /rdˆG‡ŽÓwx?d-Ê-–w/`j¨ rBGC×w - ++{w %%zw C’Cv ++{dŽ-”! w/`jj /rhgKÛw*-{ )’õPÛw‚-LxB-œÅZ÷`ãÄZÿÿÿÿÿÿ]/-–òv–5 ë št ++ ~f4 8r¢-˜B;bÓ r7 A6ô_¸Ï~*,-š\Rº-œ…žÏvž… £v …‰Ø-¤*:º  rp¢‚HE¤w Z-œ`  2@‘˜\ ++ئÅv¦ØÜ-¨6‡ƒ“ pËÍN Ò+¨ÝV*-œI]&-\ÚTÚ-ªfmfÿ rÓiG´)-ª6ß]¿@°Uò-œË-¬ Lƒ/`jk ++?n``žI•ƒ%-¬Ï+ ++(8R=%1u¥TŒ-®9 ÿ?`jbÏ b¥LK€+-®ö}‚Š-°@Uü?`j`¨ M SL°+q® -Ä£Tˆ-²Þ €?`hr› f›K“²“ŽkT†-´ €?`hp‹ hs! Iz´W€e„-¶'= ++€/hn™ j™Jš¶e1-ÌÅkX¸? €/hlž lÂH¿¸õvA8W–©Ù`-Î ++ʉvâ`@20)¸°þ#-ºëD -¼ÆöÀ ˜-¾h-À`Â0-ÄWXÆ4X0È0ßZAðó² *`Ê@-Ìî[Â9)"(kÚl-ÎbmXÒ-Ðm;c n\;mFƒn/-Ѓn'-VÂxƒngÐ-Òs‚jÈ $<sE‡n*/-Ò‡n'-VלªdG-V8%·r|-ÖD¡Zt»KøV~ ²)¼WÔÝH)æ /nb¼)N ì ÔŸß÷ ++ Fe/.Fe'8÷ ++*¢÷ ++ÖªhÚQê-ØIÿXPå £Pƒ-ÚJ³$äÇ\d‹ /bb¦OXh * ++eÚ™!PmT ++-Üß>TÔ 0iø-àÑAQYdU xèt-â-ÞÌ?bA €CE…ÞqÄZ+àZâZCˆZ_ "-äZô ôZ ÷Y¡ B1 ÷YÜÞäÚÂØÒô ^FèÊðèÌ ÛîQL>0 ã=3Ï®&—Ye3N€å•3Zbƒå ZS(^ã®(™ Z‡‡cà†å0±3‰Üð¯ $œ¸ÿZÿ-Z\Z1 ©2l—ø#0Ó.!Ó"Nå 3KZ ;*èØ6RB1  xiˆ‹U$+ZDD+ZL!dͺ 7Ì +m+Z {é3Z]3ZdÎb=/b=¶y! `3Z`h-ê0ÝbõXr=Ä nFïq-ì-è" Clô œpð-æµ/rlw l*Z–æP¥=P{"0$ZêCKQj-îŽÌY/rnF Î ì{ ++Sv ++*dv ++îZi1 ñèg$R  áUŽS8SãVÛCÛýžå žå žåžå°ž,yŽ À,ŒTŒ &M;sàåÀ;å+H,-ä¡0†å†å †Oÿà†å°†åŠå ã`±[mˆåÔÓ•ˆÅ à y.ZOàšåª æ/ð"B €ØË“Tã) ñf0žå t=© ‚âà‚åTè'Tè" ‹4P Žâ0,ªj>¶Ö7Q44 ¹0ô[á_Ó@ ++B(j! ++0.jé Ö`B1  X ç5D‚ <‚ !#2—ÏCN Šât\ ++î ²cpšå 0—Ÿžå—å—|\ 1Ú+|\ óJ»CV .¨ÄV ½SɪB/è kxÅÓ¢$ /Ž¢$*ˆ¢$€tSã[ ++ºâ !$íðS㌠++ Sã< ++ÀSãì ++ Sã­ ++Sãæ$ð Sã{ ++ Sã( ++€Sãí ++àâ^ãÔHìR^ãÒ–\4ÿàS㺠++SãZ ++ Þ!+DA2PF/a„G£A2/•R[SÄ%ª¼Yµ„G0/•„GTY2+Ñ<„GG^[/^[[/„G~^=^[-]¶[`-/µ`w/A`H%g _½s¸”@¢þÿêôï+™”-pšM82 !p€c2&,` á@šåBà. rr xÞÐ/m%g XE5(GȘ ­Ö g/ àÌ w¼É!ìOè(ï»NàO°4™|0MÉEô2OÀè"éýè}0MÀ– ÜWÜp Eªã / @Ò(ðàÝ8Q8M»X´8›8/µ 8/œà8‹/‰ ++8,ý ýX!˽%˽ ˽ ˽ýYý$¬jø5 ì<4ÿD [ìyDø½+ÔIÌ ..{½ƒ½1!à†Põ/%à_Îè  kô™ Дê¬íNnœ/ï"¬10ì }ì žà @w(@žå§Éÿ (1èO0 «ÉP¸‚ ++pâW0 !3P«ÉP,^ãQšž–å p–å°«ÉDP àø d  ;# —Ä"0˜" `T ¶ë ÈV iSÄ„M /µÿ_Ã#/$@f21à“àVSà“å x¼QqŠå “ôœ±“å0šå0“pœ›â0! Š¸/$  ”ì*¹Ìœú ÃhTã…ª(1 £ˆb žåRˆ&¸! ’ˆR¸qžå,Sãd"àð ˆWˆ éà>xäž jرým|oÊ ÌW D|~3†ò|~3   Ô ø´0S¢$" àN1  f ` N  A /  î0.¹î0 Pt'‡ï¨¡@ P ¬ÚȸÈ$·Óб/‰Ð÷Ì.¹ÌÑÎî@ÊýÿêJ6:‘àâ^ãb—Ì0Pá\ø)à—˜D^áç&oÑd*iÐÑ X$ðS# 0Ðè<¤ è ðSøéÔ ++ÕÜ ?ŠåÐ+iÐ4šå/ªÿ¤^¤X¤R¤=¤$/ ¤HU¤h VÙ”/ý”Š8ü íz)ždSQáB(ä0SiñG5.¥„ Š=I€.9€Äø$h-/Åh!|û8[˜pcH#) hiö kX hô œô–ôD uDo8Àf ++0Sã` ++ê?¢Z ++pSãTzw@N ++`Q`"X"³X"cX"$X"XÄhb4Sã`l`"f êhÑhÏhÍh·hWh0 àb ìôX¼Éæ#4(4‰ô !\Äh«\ ¸€ .Äàb!p/ý4 p:\.9<\-¬ô\(§p\x.Ì\5/Üà\OÅ\`lM=˜`l)/‰`l7Ç`lp/Y`l?/­`lßÔ›ˆpp ¨Cp+ü pnpè }Ðgp |$²,p\‡ ++3à‡Xa‡Ü`0Dà‡å*ý/ pV*.94 |/ px·UxÞØ‹0/5 0eX^@ëÚ¬° ˜ °h;Öž¬t"Ô³Û <(²@`ª€P€ºG *= ++´€ø lô 7߀!€è€h°/÷ï°nþTp *i è ´ qF q4 žI' ,nžI!p/É p¯\. \ÐŒ!ÿÛ=4!1˜üÿ4/Á 4!'Ä 4!T ++/YÃß4!$.àÀ "YüÀ *½À 4!”„ü$8.‘84!!8 8/õ8/œà8‹/É8,*:Ü]ÜWÜP1Ü $Ü "L<`wä+ 0XD`ÈÜ < \Õ\0ˆ$p„OÁ*|%­|$/A| —|<vŒ i( |P|(/9|/}Dü |ü hÄ .eÄ¢,4$œ*8 . "µþ0çLœ L ++¨L#¬ .u¬L# Pq`ÈàuK’1Qáü’pü ++<:<4<.0ˆ ˆ§lˆ% °|  ++¼˜`O^*ô@” md( áüså„5+7: À# Ë6©Žâ`€å˜5*d5-‹ ärÌàdw ++< ð8pÜÈÎÏ=¿ð›Œ 0 /ù0 ©b-à-¥Ô h!täˆèøè)¨‹Ga/H-ôTH ++áiÚá "nbŒG /á‡òhS</rn‰F “Nð«; A£;ò£; ÄH ¶—jôÄHFFS 2-öFFú€B/ ½X?` ”j× /o ×*i úŠ ü ++×@^ã ++×@^ãr ++×@^ãl ++—@^ãðQ“@^ãíÏ@^ãÏ@^ãMÏ@^ãÏ0^ãâ3A ^ãÜ1^ãÖ1^ã@^ã³Ï ^ãÛ*šêŸ×'1&^S1 àž ÿ —ÁÆo ++[ ++p4¼<:D±£Ä&›w¶B" àŸ ¶B ++ÓºBÛ µô8 ˆ¢D ++ǃ';àƒSƒå @ƒx ƒå—v= —T T“‚å‚å ‚“"‚åëwLà‚åcWëw `E`'Æ7ô}àƒå ƒo ++'„ÓÈÌw„/àï!V  ï! ÒçÂ(´¢× ++‹Pq(H(x`žå0ƒâ_>ÿÿ ++ú@31Q“1Uÿÿê o^o^×:^×:b/)×:±[‚]âû(mÄ/í×:#1–?4ôtƒƒ/QË:eâû›7oX$m/Á$m[lYǃ1–pHYØq¼¼ 7Üq ,Øq/ØqoÍ'„0§Ø ·5l/Ý ·5//! ++·5“`"·50/A ·5?/• ·5 W·5F·5ø ·5%û„·5sL·5F·5(Ã;$/a; ­;<Œ; ˆ ;f;(/Y;/D;7;<c@&÷ï$˜]Û“.Ý“ŒzW6è/‡4_"W6ÿ/ÑÐ÷l W6©W6¢W6ô10l·+°'3[·80åã0 S‹ ++û4q/ùû4g/Vïû4_/éû4“/‘ì|/%û471Št ++Ì ã ÐÈÔ.½ü H/0·+ Lp-³ ðP «ŸS@†å «R-`‚«R «‚« ¼ ˜ÇŽ. hlìÔŸƒå @ƒå ƒÊ\X_G}@‚å ‚Ð:sà4#HF¤ ++8¨/ Û/VïýX Ö↓²¡(w#TiZÈð/ùðOšå˜/«L/H cw+1Áøÿ4/w+'°w+\//µ«LG"‚ø¼/«LWV?*!8/í«LG48/Q«L!8‹/% 8#ø8åô ++ÿ2ˆ/ ä.¡ ¨ d0, 0 0/9!˜0d*î#30ÿÿ/)$˜qƒì&^tìì/Btp0 ì±}$0” (|L Ü%Lÿ(¯7oU ++p«7mTLCªÔ9Ô  œ/àܘ @À(/p;ë.É&\ë_ Œ¤Œ#0†$ŒƒŒ”Œ-0‹x‡¤. ÿÑ r<pd©Ã( ;î ô)ü( /¬þè/*è.þÌ.ˆþØ+¡()4÷£éi)à“4ä# $P$`? —|(6Tˆ(4¯î 'T È w0F˜ w0$ÒÅ|(î¶\*Y \     0 d ÒxÅ(´h¨$Üeø1 ø X,È%ø˜!œ›0Àh äÊèêäÜ?s@(1±óúÌÂÜÆòZäÂÈÒð ÆÎÞæ`ÆrêÌÒbäâZÌÊ-0øïs0ás(Îñ/Ðñ/† ÆÞØÞÜ~çsVÂè~ésY0úY0±sä R L@'µ¢@èÞ@æÒÜÎØÊ@Â@Asßs% bÛ/üä<&(tH¦z@lxŽzˆ/-þ¬ ++\¸/rn} #d`›1p-üA9lÂ| /db™1 ?—1ü:m³-m*-mþou²¸/"/fn ½¸/rp0y d®~+/ˆ}I¹!/ÝÒF P/œ/˜ _ `— òv'/>yI)„D /aH vð/&(2 l ++p// âÑb”rÅô #nd pb// ++v9n /djv?v*/ ++ 4 ¯;•/÷Q8/2Ò~Q./!¥%’/rr} ¯p+/!¥ ++DÒÒ,~ X¬4#x/hêP :-ö\~9/5wò/ ++(5– ++ö’a/x/—˜î•?rrf nË B/–*,/ì’%ÊÈFR2/Ô ˜ríö 6ndp¸QD:%/rV©n//ÒšvC/HÒš'/B}ÒšR4//8šrð ?ndrüFZš*,/Zšò” /*Ɉ?òʈc?/,ÌÅP;‘ÌÅ9,¤ÃŒ0ÌÅDPÌÅDpÌÅ|(ÕÌÅc/&/ Ó Å/rn. fg bô/=;l== /fb=Aõ# C ++¶ÀÅ*%/ =!(E?/(ÀÅ3/ÞxFp/"éxRF/$' ÞÃ/rp ++ f¿ Ü Iâ d&Ä%/$Ôx.(! &Ä)/&:/(&Ä#/*…Ž0Wƒ_._j6/,¤.`“H/¶/0¯‰ €¯`ö Æ ʯHȯk /0Î ¹Ø/8/2 ++(bÝ?/,%‘/  PÒ/:{`Ç“/rl½  rN/6A:f }1ù14:?\rfp }’<×q ++ž46pq é//8‘/‡Ö#@/&H@<@w<@H òXB/Ö ¨ äÐæZ  ­˜*G`µpG4WáZGoX_^áTGJ. >6˜@0œ@ ++”@ / -† /+§/ê ÞÙÄÃÄSIC=3;¸LÜ/·ï ++ 4`0Æ434-4'4wHÄwH wH ÜÜ6 ++ <j ++0VRt/>. ++ÕõF /fn FÉ¥*/âÏ’€/B/@< ++•`Æ &fpß~ G`•!/@^|"PwB¡ X/”/DQŒ ¥`b &frº  EM¥*%/D , ++(!H&'wp/F,àƒn /h`ÈI®¤* /F‘xƒ|X/H ++HÞtÞSf/L¢ ++|õ 3nhb pV/J?B9 /hd. >»Ð  ¯@’!/Ll8/B-Y ó(êÜäÊÆÞÎÜÒôÊÈ@àäÒÚªé„ ™ ++j s˜ TØ/PŠ ++Oœ/rj5 ¨ NnGlEPóÀ/ÈÊÄêÎZØÊìÊØî8ð hð Rð wRYœÔ T¤wTÔ TÔ R`/X–âp– h·˜'/V)E'EX'r /’/9Ò ¡º”ö 6nhj0 ++‚ Gèº/9Ò/pœ'@; ´@ÚopB/bí©N³iñ¨Q+ÕØ-ñ¨$/ñ¨Ÿ+Ñ|8ñ¨0/%ñ¨Yã[kñ¨1‘lCR/l" /l1¬9/1¬.•¬9/”í©ÿÿË »\·¥ºd\^ ¨//^£vÈFH/``§;w b/b`LR :/bà ++dÞvdFX/fÅŸ¨Bº0É ¨(/,ÀhâvhÁ P/ˆ/je¤ʧ/rp“ l# C´K¨*//j¨&/bR¡&/,ÀålÎ"˧/rpâ &hnÍâDßƹl\¨¹@¤Cò/Ú¢ @~xo P] E&!`Ÿ U"ɧÛ`Á8Ónñ wn¶oH/p€ö!X8 [êÍXºÓr¦vrˆtˆ ab Q 2 cv®wv‚@ ¨#ì`è/fºpB /t•¦@`/xŽ(ŠŽ(R0/zÝ;»/rr »&;EBÔz»0/2Ÿ ••†%&q ++†%(R T§P/ÊèR/|9 À©`{) hìIð| ªžP/Ì/~u©«`W /j`—JÚ«//~š$a0/ÎH¸!€âÊ£«`¯ /jbPQ X€XÎ+w‚c*írÐ/‚41+-Âàbï /jduMxŠ1>ÒÞÆ}‚}- ++P](/{òÈR¾/„Î c«/rr_! /jfÎ Go*„·%b·'˜X(N†Nw†NˆN?/ŠÍ4&‘jÍ°3Œ3wŒ3¤Ž¤wŽ§ T/X `°/’pÙ ++G¨8à7¸U5!X+©:áhHÙ3XoP/h£h£Œ w'?&xJ1XE*Ã9/”/%"Ye’`/¼/–J ±/rrÚ /jh#F"–‘/P@B/I¹A °J,?c' ÿR›NRá‘ÿR'‹ÿRk “å4R³Q“å “‡<1 “¶p³“7O³0³“³Z/×ï³=“vk³0³ß8/0³ 0³³×0³ 0³1R㡳R³­ “å p“å“.y³" ³0³—öÜp/b³0³ 0³>Rã ³"â·“·\· -·-0šx·u·,/çï· x. xµ8·MP<Ѭ2/=ѬßO8œNVðFÜw܃Þ¤wÞƒ!Èø'ŸR YáŸàówàŸq2Hž1n'@€/”“âi'7â ++( P*X §@ ++îÂæèÊPø( O0 ŒB¯($ ++(^â. i ++.(p _!kb« Z/â8XVö/æ*ZƒÕ?rpn´ nDSê/ä \9n  p \?ç ++Dä*Z¯øÖ,/æ4Žè5è ++(¦5,ìe1/ì6YØF j×0ê6YBòÖ*&/ìóÎ%RÎ6YW@/î6Yv§) &l`¸6YD¥)î¥)g9–pÒ/è@ïðü vð°‚P>/òì*5æ0 &lbE¿F¯7€Âò¯7¼Ø'/è ô w&/è ô Í eø Øñí\#ínÝ YíOl @†åí.‘µ—j#œà—j?ƒåí)f¿ íí£M¨ Ƭ(/”àƬ GMÐKÊïøpŽ¸+ Ù¸+wŽ’º¦0²)0xQö3 ?ö ++P– ++RÊ/ø–' ++ &ò(¥6™öJ/Ê*K@P/Ì@ öBK5öÀ %!Jh À º./%º.¾.&+*Äô\ú wú9Wü¤wüª ++Vª ++>¶Øð\V3T.pJþôwþ« ++íT6/Öûi/À9 /1÷v/19 /1¤w9 / ++€—J:?nö81Ø‹?&oö81‹? WŠ« ‹?Vƒ?/1€w¶ +1×R  š? ]ê hm@/1 ++êw ++m@ù Ü eÜX,RÜ u/1 þDiŽv@'HŠ k¢< P‚hú1æ×ãb~= #ld^`Rö1¹D F/rn…> /lf1K=*1ðã×îãD&1îãÔC:1ÂCîã|x€ ++0u!P¥S ++1/ 60ãÆ& 2ã`Ç Ql1Òåæã /rnÓ /lhÂÙU:ä%1å ++:äD1 ++:ä W^1ßatã/rný lè^R1 <l8 lÏ BÆ V».ä*"1Ê^/1.äC9 .äOR1 .äXôñ$1 O%.ä ' ++(4äö pB1Æ 0 ÜàZàêæÐZÚäìæÂß,äÓ,ä. pvvÃ;ÿƒå pƒå ƒåà ãà<äcý3; <ä(<äì=<ä\­<äp1;;" Ï<ä56þ`&<ä_rB1¾<ä>$Q<ä=D<äÈ/dà<䯂À1&F9\ãëô lô`1(1$Ï ++`wîEÌö #nl*1"Ï ++K j’Úèã(1&èã‚Â1*D\—ãïö lû*1(( ++U ( ++*d( ++*( ++ìãºìãÿÿ ¸ìãŽ8Ùìã}¦16 E(Ü¡^?pŠû$/#û$*¥^e["ÓXÈ"Þ,ÈïXÈ&´XÈ"›XÈ"™JE"—ÄÈ]ŒÈä" ÌÈ"ËÜÈqxÈ'xÈ«s/îâ,É]ƒf•?àÈîDpå机’> + a©4"ÿqåG/íe©¦.qÀÁ¡ºÚ;O > T /Ñ 8 $FÈÈ/ Ù_U© 49$ä=ÈÈ(/îY© `.ѱŽ`3`"½‘ Pûµ«/5P'/ìP;Á9_ÍðÆAªàê @ «@/u@'/Àà@;/@ð/ð–ièqÈâ.]–€ € àáàÑàÊ_0Mú=_Üæ Ñ`/¥Ñ`–ó=ä.1äÜæäÓÜæÑ" ¯3@äýÿêbN*‘³3¦LÇDÌÕD"0‚?S 2 ž›3= žµ ‰”`¥ ªNo-‘†å†å0›-H/ža´2p áLS‡å 0‡L‘‡å ‡å‡'tÊ/0ÅŒ È ÌÈ"0€&  ã&` ã$@p áK0&Wuª ++ÞL“°—åà›åŒ#`R$rp—åòÿÿê(Ë‹Ú$#= R Šå°Ñ¨´@wýÿêÁ¨*E ++Á¨ = m šå°ší•Š °¤É[.õè ++$ À‘ + X Ä=tŠMp N%µfîÀqf%Zð.Ñ ðð´ê´*Ù-­x-­r-­" )­dHý´à, `'1Z'1I'1 '8,'1âC È @Çüÿê 7+ È ²CS+A l1  á„ Ð Ÿ "àN(2 š/pž`ëì  '8€ ¹ ´œ´œQÛ2!¯´!‘Û2Q´“Û2!“FQ?0“Û2,v1Žõg/É$+`$ xÛ2 :P Ì.ÌÌÌጠ++ É #ü 8È/4Ç*E@A˜ dè .±áÐ 0/Ð 0ÖR:Q¢°1–1.,ˆÎ_|h/ n3‚‚101,C;f  /nbü Aò,ò¹„`&1.å@81p¸?ƒÎ12*UjaTjÎ1 n­_'10ÒHÙ2Ù À­#‚ðÀ‚1n14$h2‰/ &nf­‹EJ2 ~À&14J2«Hfú16 ++ æ+*pÁrš18"|$ÒÌ{w! &nhÀ!D!¿y,18;D&ºÌ¨ÀE˜1\Ö`þ! /njƒG…dÆf…:…%š¹²`1r1<&lf\k8j &nl²ª\ F3%1<|Kr”1@2RãbX j /nnPLU(1>U`U@U&˜Ãr’1B:w Yd{ /npeP o ++ v%1Bo JÚ¾+^1Uo_è1D!^¼!^¶!^\bK$» “å¥Z×!à“Wˆ¶ ,%^_¹N@¤ .ÑÇÕ]4· +@ÂÕ]_*o*°/CëY.Ñ!Y¤Í]D/=Í]ùÍ]@/­Í]//tàÍ];AÍ]_b ++´Õ]láCÕ]$)Õ],6Õ]×Rÿ *:)÷Ñ.)÷NP4H€8P •"*É•"„8\_ šåÙþÔ3 à±'‚¸!"1oJ"=ÿò-ý,/pšþÔòF .•FF& àúÔ žF „:ÓL/EÓLþÔ E0˜0˜e+~ÁÜa+/±a+Lô/9ôLÉbÂ|W åì¡5-5-Uô/-ôbÂ`…2+DPD/áD'/ìD?/qDôô/Õý2Tô/eô#ì?4ôPàå0¬! á€)0Š"ÒýÝ%Ù¥öºÉá2Šà"ÅýÝ2. Ý2J@/¥ @ì?,ð0å å åå2Φß(P‘—å° á à› 5-+ Ó°›åÀ ãÀ‹åõ¨#0ˆ´-à ++Ù \üa*ÚpÆÛ”"È--ÚàzŸ›˜ýã°Žå°—å À—å p—ZÚîµ@æo#„^½ü„å0„å°„å!À„å%p„åº4}!ïS(/a ¼ç`)/Á OT`` Œ *! HX éÀ4/ À .ëüðsÝüÿê”Òüçúˆ. B1ˆ €%ìÞ^>D. 0² +†=1àÄ‚=D ã›+V°Û ++Ÿ++/íAA,Ý 58;R0¢…!1jk|Óy 1†v&V àV;ƒåc.¹¥Qà‚å°=1‚å?Ý‚åà—åà‚傇 |.DìWÓ ˆ— +#`žU!0Šåæ? —Ü  ã”1@€âDïéä Æá‘ý”%ÉDíVt/ L/?ß Ñ"V£¡0‚BÑað>wIï—ý2sƒ°Hj<  ãà_P *0þæÊç†ÊçÐh Í2H"!F¦ç /mà‚å ‚–%'–%/ 0¦ç ž%àh Š  í2¼®Ú ±<šs—å žå’ ŒB‹ù0ºA»¯lxæ¸ æ¸ô zÒÜÆÞääÊÆè@ÜêÚÄÊä@ÞÌ°»€äÊÆÊÒìÊÈeÚêØèÒà»»´»Wh òKN/ØHo U¹ˆ1n01poK¹KòLXB1€ à ÐZ¦Tãuíi&p/ÔiOÈ`Z ++04†µJŽŽ41ž&K#‰I3* ++#@Â/Ošå D_( 6)@ŠŒHj¼HŒ"äÈGDSãž0 â7ÃÒ ‘?« ‚á ++1 à‚­66Â3 ë_(šm ++=p3H\`H\pƒ'ª/ƒåKÏà´§« ‡Çìí/¬~0‚å ‚åµ‡ÝR<2 öì¼D?àž¿È–¿È(ÃÈ*…ÃȘxéFÜãŽá áàŽâ0Îã(jFó YX4%†UãÁû«B  ÿÈüŸD ¢:+¢:¢:à ‡å ‡å@‡å š:‡âo ã 0y*½š \ &í4qoK\ fÎ\·È "Cää e„àŽâ&PãÒ 04scÂqo *ÙL—/È.þÅÐNÒe¶ØÒæèZɤãE0+ÌO[%)L @p1rr!1vaô "ÄêÒØÈZÂææÒÎÜÚÊÜèæ!aP»GA#Êq1  D”,û ˜é1Oóÿÿ ++y&`àÌÊ O@ áÖ Ÿ7Ý>P <-/0C>5c ++"@i" <"0î1çõ \v ð: ¤ò1x1tìÍ­0¹M /ppxF®"1t”G1n ++P h­‚1v1x" øG1x@ˆ €LH1rx/HX *’02i° 1jh1z0âaR¦úÅð`1xøB1~ ÈUdä1q /q ó ++ “å “å0â² ¦ÿ:V°†å Àÿ: ÷L PJà ´–æK°â‹=€°ƒå,àâ.æx3‚¾ _‚å —{ÿt“= g: b"§ÿ—=…" ŒÖ_0—å xF > m\1ð3à`Så 0Ê$å‘*à¼.¼- ]£HŽø 0ü ïüÈ9³¶NXalíS0—åôLÀI= ++'`à= ++"‚È—å,â\µ,g/\µÈ ++9 Ð+ Š€\µ l°†V&šî°Ð0“ Œ2òw.Ñþˆ Êþÿê@Â1TG`x2N—Ò¯7Xˆ@h‚wiÞ1|   .ÚÂÖÊZ; @7ïï ê!ã5råÎ8Xöñ0x€È€ ++8A@Ö21|W/ ++¬ &Aº1~ÖÚx ²`H˜@GQÊ1€qÍ^‘"‚‚   €STã-Ñ$B ++†.åƹ 1 ‚’[± ¢p/Ápp .S£#¢® ++Ø%7v ++ ¹\@š1Š¥#ôxB1„  (ÌÒÜÈZD'ZD'10° áñ l¬" {ÿ ++&[ãÖ`À›å\h6ðª`àãÀ,à PáªÄù1 °›wFðWNô‘I m. ðlè\, ++,T;G1žƒG,r ã<­! Š‚T1°ŠÔô T"ü¾u ä°ç1°šÁP7BÊC o ++1„ ++P¶ a†u ++3 {'„ ˆ{'5£1Š81r;ŒqZu 1ž äâ°* ŠrwÞ7Ê/n!RÞXRÞHRÞF;v R÷ø(Š/@6#/]6cѾU°kÔ/AÔv„~oÿÿêróŸ_1xÀBÇums š1Œ ++(k31ˆt ª1ŠÈq/1Žqw%1Šq/1Ž ‚ 1 0õ2Af•D &prâ 2 ++HB`Ë*|A-A- ©nU¢1ŠŸvC1pˆÞ/1x(%Š($ #7” ++P#&rKH`1–kÍ.˜./úQn#&!â#À‡CW1š ++`)%'b)1« )Ú.†°Ê1œÃ¹&Å! g- &r`™kÅGjÅk 1œÙÜ~#1†¬-,A Çd01ž#T<%::¨ ++¶&{†ƒ0¢¿$ ++ Ù‹CR1 Ñ"/šÑ31Œ$1Z$$3 ¢ ++1(R ++È*p: -*¾.Nh1¢Á ++!H#/GE‘x31¨ÂF £¹dï3 r•5Pæ1¦~½`8À #rd8pÈ1¤€pƦ /rf—ÆŽ¹5¤¹5Ú½š2¦2­ ë1(`ë1¨ª¨ánD1TR€;1 HjzØ;Ž Öl0/Ú~L"?„åÓ Ç‡Š1x ++HÊ.ñ²eAˆ š ŽÆÖC° ++ úÍPpØ_Æ‡å °‡å ‡å²= Ò<+#0j$%/°n+½°,0j%¸Ò–ÖÊB1¬ _@1ªa ++oE /…É.. /D/°D/ªD‰Q/ƒQ/Ýgy- f¤—ºT ÈT" NO © © 9‚ {@{÷# / )!">Uu 4 á! ++Õ&°+  ý U sÊÕ ++¹Cé ++Éé ++‡é ++€1“1"¹50"·1"j1"1"Á1"‚Ù0" 1ß1" 1"e1¾^$ 1“©,:a1“~[B+/m1¨æ$q/}´q‰qqyq lq U8=Í Z/  w¼ ¤È5Opÿÿêèå/åè˜ ÿµq/¼~.ÕþtOÎþÿêù3“ù31Ãýÿ4/ ù3P / Ð ù3ÏNG“åì"ˆýÁ1/ ++ù3Xô/‘ ++ôÌôÅôKô/õ ++©3Xô/… ô# ++]8“]8“]8“]8" ý]8+õ û]8D/] ]8xˆ/ ˆ§ˆ |"¬ü|/q |'/í|?/|#Fô3ô€™ml ++[+qp²Z-5-5"_ü-5+¥°-5Q</=<º<³Å2BgTÒ “å“å °“å ÀÆ] "ûOìÍ.#p$R°ŠåÀ¨o% +åo%p,b°šåÀ´ T3à€”ò€å °€å À€å0€å €å@€=5à Q3gÇl/©l«X¬tÔ³±.ä (u0ä *_-—$$ #0€TB€å(¸ ,  Ké$ Ñ,/Õ,¶,Dô6 %ÈïîÈW"L L0L'ÛÃ`/5`© » ¨$/™ÿx/%Ϙ/1˜E„>pÿ5/¥pG ++J’: ø“5G 1®q%jØ?ØÀ¾ d ¬Þeè1phã%p”"/ˆ*  àp: !pÀ?1®´& #‚´&Ø%'R×Ø.+:# Í&/"#¸Ã °Ã x¬Ã °Ã  .52û ¥+9û¥%=’)fðB"­¤:Ø ++p{¢b8Cj1¬ˆúkP " GÂ"€"è" (M/P™@Ú%YzÚ _b. p/y’1² ++ 1/‰Q#H G›&1\³‡ 5 G›&?R÷a¸Kr ++1Ò 9²)(CzqaïMEPm‰Od2¶B!˜ˆ/rlEb "rhåRc´‘PGfø j¾TMß´r‰Üs‰5*fs‰¶s‰¸s‰ºTs‰#ƒÄ1¼H ‰jã lMWw‰¼PO w‰¾w‰!i¶1ÂïU¾ˆjÈ! ‚QÀ@h>f> {DÑÀ°!Á‰+‰ĉC‚‰Or1Ɖbz1Æ0ð‰öˆB3F  0ÜàZäÊÚÞìÊZÆÞÚàØÊðZÞàÊäÂTÑÛ‹‰Ï‹‰ (À4bƒå {‰,{‰\,íù3{‰ÿ-{‰\{‰p!{‰L9–*{‰_RB3>{‰ÿÿ=Qh1ÌÚ ++Ÿˆ b‚^ rÓ`1¨qÊÏ_ CYÓ $p`ˆ,ÈYÓIÊ_Ôs‰Ì _§_Ðu•`‰/bpê esÎ$ ++S ++*d ++Ð ++ì:o‰ ++/(o‰²¿žå°žå& ão‰ÿÿ^ 38ùLxiKHo‰@& /o‰A­Ožå‰/y‰“!GNÀ ++ ¹c€‚ ++1Ò­`ö _x…‰î9,U}½ ++¥ ++O½ ++I½ ++qˆ,::? ã¤[ ¡‘ ©€[‚:@¡ 5  Qy=pš£.åMy ™ ++ |?tàO”"pd.W pÆ)N/ qˆ àåà^ãc@\@^ã?+0^ã«ã-P ^ãp+ð^ãB ++"^ãÝ ++ ^ãŠ_+^+P ^ãR|]Á ^ã­ ++^ã5½Š^µŠ0^4—a ++@^㟈\Ÿ^ãc ++ ++ ^—+?&^ \/í, ++ %/­ //ñ _/e  1 ˆ[[$“'1ÿÿ8/Å“''`Ü è/MèÏèÈŠp"`XTYK%ð"Ûþo¨µFr'$€o¨ø/Eønçø ø/­ø'Àø@/=øˆ\+*.HmHZH Z"0;%`ÿädSDþÿêlRrÔdV‹LÖx /U¨,¨ŸLšù Šu~E0§›Žš›ÝÛ,ì>DÌ-(“(ŒØšØ‡ b bщ3å(bÜÜPÍýÿêìÝi‡"p¡ • fß) !àš@4[/pü \xZ ü*@T _žåP|…‰V! áÞ /žDõD @Žâ@§P §P ¸K3 _(_( ++Io(MgêÜ4“´/ñ ++ŒfX_ŒµŒ¢d}´ T@/ýÿê5X/e p9X´/ @L­H"àœ# @“ m0ƒâàƒÎ oÀgR6NÂw 9Ì y+°¢“å 0“å&Õ”ÿ¯—!/ ° lã, ø#0E¸ ü&î[%<' Ô>¸# /í @'&îÈ@ /@(.… (&@,š ‰ø/é øKøD\ ôa° è0| d|@?Œe~pˆ`/áX(¼; û, ~€ùÛ-àz€¥ÖK#îÖKk@å 0&‹W Ħ"/Fï\+/Á\#HØ5ØL*0Ø ùûO=¸0ÿ0Üc 8@ëûÿê€u¯,ˆ È ++8/D¸D±DZDGD1 ¸L"¦ûx ++/‰L L `"—û¹’Å<€È>k0@Šûÿê4/ùk170ç370 Œ/‘Œ¦ŒŸC)†L de†LaQå ` ++Ä/UÄÕ°%ó)°°= =eo €å 0€9a ++c)óDàä/9äÈäAË1øf°øf*†ú' ô ô O°å¨sT`T"U Ð T0/T¶Vt…0Œ/0Ý ˜*@7[7\S/m/ Ä,/õhªd£Ð´. ¸e“ q †å †Àˆœ ì4/ÁÌ©@8J‰gÖÐB1ú C°1ÔEXï|“ /¤|“&ž|“D vÀ“pÀ“fßS2 w V9 .ùL’ w «O3J6«O #áÏ/šš”˜¢2–/+ #}`šåð#ò:/¬ÕñUD+=÷ @‡ “»q“å0^㸠u1^㟠u@^ã†"DB^ãk›"泇s· ¯@c  ¯T5/MT/áT›/‘T¼T¼?’@Ê=´6“ÑTà› ++aÁTà· f;à3 "³þ· Ukt?@χSÐk90å€Cdß {©Ž .èO¬§¥tzte¾<ññ  ‹ jþIŽOyëLëT'( Ä®;ÙsÀ&0šd-@‚¿'d ¤ïg}a‘[ +y@*ü/šô ++ß¼Ö:/Sï //  †|7Œ6I ,6p61 0€$ ôO –I `P6< \ê@\0\(XþIAC ++tœ$!à“4VMSþIt/Á t/U ++ts ++""‘w"Ü"Ö" ”/¨¡ Ô ¨¡# ++jµ # 0j¥_ ä@˜ Ø× ˜#à,Ïà¢&„3€¨;ƒå“ì1 D¨q2PrJPlJP `/0È ô× ÈôôJô:ôÁ\”ø ¬ ++ ˜üðV; '€,€ãQ€å €fm1à€x 'ÝP¾\¤6nÓûu\HS3@&0 ãH@/ /­ ¨²J—}hWsè3^ã êR ++0¤R' !!…•)i¼!à—¼ü ô8 5/…Ä/8 ›É¢8 4ÂRí=°é:`ðB1ø+P0›‹ ++ã+w 6?0Úðµ)C2+©+pC2ùØÿÿê ++ŠB1ò Ú1O¨ž) /Š„µñD 'S!S GL*'&Wƒ4ÿwƒ4÷/ ¾04B)s0âS…SS…SSY/ àYJ)@ ++ R˜c#&ß!0—& ë|"62§í§Ú&#" °ŒÐ{ ++7ÅBˆM 6 Ø°ê6 }V-°šF"šlYr ++¡r@ƒå @õBƒå ›å ›T€9C Fyâ3Xl0‚cWhnyIô"àʉ Ì9ÅE ny  YN + †¬jþ4 /îþ4°j É.þc¢ƒyî# ä4(À`žå0ƒâX*¡sàó1 É¢†„ ÈgHl(A `§ ++ìÕɧ:ô 8O’°@ÊðàäÊææÒÞÜïÊp(=áv¨1Ú1ØF>r/`l`5 L`Pî1ÖúÙ`9?prr9 fƒ6 ?y6Öy6Ì5°·rؽ5S°1Ú °¸ äÊèêäÜm>€(1ÜT>äVr$ Ld|uèÞ@æÒÜÎY|7`|‚>% bP/üä<&0²>@P2l¼F1ê1àˆd —/dd} Cb1â1Þ¶9/`f9 j¶?¶Þ/8³É—à@²¸1ì1äÿ8 y—dÆ 9Bâ^˜I—ä AP P3ÃèjštÀbj’  ’Hæ0jš C? ++f-³èHâ~êâ~C`1ÚPoìßIr31ðßp/bhß lBî´Ý ++Cj«ð–C!€îAQª1ò(€HwpôhžcejßåánBj1ø / ++€ÔGª˜úÔGAÐ3n­Q‚1üÆw ++$­by rSŠF‘<ü´H°0á¯.Pï Þ%:Þ!`7;hö7ß ÒAî5HPDªúI@(À /j 8¸¨B1þ 9\§ Wi[#’m  – ®’¶+/ á0¬_0„å x öTq¶ëå€Xq/ FŒ L7¢šh…hvâ1þ ++8ØG#¼*8Ä'@%!2ŠIRL3c @œdò &b`còI‰œ%3vl£4ì ++X ê ˆ¿ ö 3ø3o€Ò˜! ‚N3Ç äŸ/db( Äia83YŸ;`Å /bdŒ AŽ*3¾G¶š * 3£xj ++p- ++8Ap}&;r}oXÞ°‡!%Cª‡–önA 3 ú˜bÐql F6æÊâŠu 9’ ”ÛvëiI‚3MQB¸Œ=H•K4Ê1ªëP03R€3 ++í ++ê³b\ &bf* ++ G1´%3 ++£A'Úg1ú8 ‚d?3 Ð% âÐ(°€t36‰Ö¯`ÚA /bh×N $°&3ÞËp²ºð²€v3.l W±`÷ /bj ++ J¡±&3¡±bq¢¿Rz3nnf³bª lºE«³,3µ&’þ‚`x3˜c³dù ?pbnDd €×!`ŒPþËÒ1öh3¨' ++ íH~r &ˆM©PB3 øÚS%D®ƒ/—åÞS)/q:èÞSrº !HÚ ++Fú3C&TçQ Wx ÂààÊÜÈ+q&P¿ ” |3ÝpØär.Û 'pb3  E Át'Þ¨'à )â )3µ W&+úJ8t&Xç7(PáXÅßHP£ 7"S8k\V%7êe"˜` 9òŠxH± U`X3@z z&?šzhzh‹¸œ„&E"/x/ ++þê`~3óÙ`t¸b} b¹ þê B¶¸*%3! ++Î'K:ÎAB3 ÖEý)kE“ µ6d@·-²Yð"鵯ׯ¢ ++’r3€ ++ =¢`MJ ++?pd`ÖFƒ¢)3…"E‚3 ¨¡03"Ú0@ ++ …¹6bÝ*&@ÅZ¢bà ++@EŸ¦~-U9Šm99@…É/S“å .!.¿:Ä Gvn'@lª i>d2£6“·1ž-óÎ!P*”0 ++p Wó!8óP7D)D#D^߈ô ‹~ [ô‘Hà. Æ"õ¢…/'ª#O“åš#ôÆ,Ü°Ü°ÙÏ&àZ +’Z PZ ’Z nÌÿÿ ++@ˆˆ„yNÆsî'ƒû?š®" ++Œ!>F#Î* 9០‘1!E ö( .%D 9 " /`æ$ì*‰Ø" ~%"`ê$&~ÆB*—sb3"hy&À # ++x—ƒJÞ ++ î"„##`‚U 3 F¸8Áz*3" ++8Îë~[AÂ1öÊ&ʘÊ,Ê™ÿŒ-~)´Â(" ”_ Ö líÖÁÖÔÖrªH3\Ùÿªdk &dbT ©WKJ«*-3$íCš3&í €BÆ Y $ QŠÆ¨˜B3*  Æ…+410—aM ÂÅ LÊa :hÊÅÊÓÊhš3( ++xC¢3*H'– 3, ¨ .  "Ö × / ½UìÉÒÛpOª3,0 W2 ˆ!Yx rD3.ª¬d> &dd ++K Dî¬3OÅ/˜*]‘ ++2ôô+ˆ ¢ ìù ýèÕùrF30ÿ cÒÜØÒÜÊ]˜ ++ f½E·//8·0_P6a%32Ëb‡faD ¨`p>36>•Ê_f§ d¦`R:34éE`á d•K4¢`Ö  `D-36 `OZ38 ` 3:’_v `'Ql3<ëßG` ++b 0zVUœ`3GÆHœ`$3> ++œ`"W^3BþÙ_d× š`3@ <`h /dpÎ BÅ@Ø»”`*"3B”`/3D”`Cvê/3Fê 3F”`v”`ÒB3L  ¨  VêÜÌÒðƒ/Î+>Í*8Í*•¤K¡h1?@ 9' ÷ûN ++ñ(ÌÓ ìÖß[\)+;LÛSÑWÄ8›OÀõ%›O@ÆÜÌ  0,RL/1¸3y#ö¦`¨¨0ª^¦]OX3H,!ùÓpB3N  X ,°îÂàZÞÄÔÊÆèZL' `PT㞈>@Tã˜/C° áá " <0 ++Ê [៥?—îqÀq+^  á ã ++Y-, x®o9,D¢o $6V/ 0 ÖýB$[:$ˆ.HìtÞÐp µÙ– (48 ++Ä6sžå Qáµ/øˆÚK^ãµD$½#ˆ½#Os ++8h8°3 òý#4“öŽþ<@<ÿ µ(‘wE œ4Š jx”:zdxtqÝ-°Ý-GÄLÿM Z|p –ünø‰ü&°XTè_ðáX”#àe¬AãÅþgÔ/]Ô ´Ô­4Þtjšp>pûK;"Ìý' ãMùXA CQ&0;#×SdŒ <_:þÿêH`B˜8– øØC=€"„Âdix­ðbŠ3dÈÞêÄØÊZÌØÞ´û ¦,.A€ ë) ä3JêÜ@¤ŽÊÈZlh .ö ++(#t3PÒÜèÊÎÊäZdh3TVfd3VWh`3ZFp3^Vjl3b‡lh)23R¡‡dhæ3XS\Gp3`ðjl3J L`3f ÌÒðÜêÚGss¦xR3Lä(h?æ žx23N ++0>, ^üIèòàÊo1O3t i, €¨  x =Z|îÒÈèÐzÌ”; ~ed Ed0@0`0¤€t 0À0àÔ0.Lt! jð 2J#r()0(]âÆÐÂä8#tP283 +++ 3R ++ÒT(æ(3¤ž2S@83V'X ++Z ++\ ++^ ++` ++b ++JPd8 ’f8]à ++îsH3ŒÝIÈUÖÜÞîÜ12¤œ£3” '3hi< iOÈZÂä ëEvÄOÌÒØØ'òÄÊZÂÈÈZS!'IØÞÜêÚæ~& /Òð& zÊ‚˜2ž/êÜ  ÜÊîZØTPàèäZœ 4]ê×ÒÜèZØÞÂgŒE Z|×ð#»Ž&3”0–Ò~¯ÈÒäèòZæèÞäò&§s|˜+Ü!± ÜÞZÜÊÊÈZèÞªÌ Ç ++~ÒÜæÊäè¡«OÊâì~à rHäÊÂØZ|‹à ?ÂÜÈ! /ÆÈ»¡ÆÞÜæèÂÜèZ23«^+3„¥R]ø c ?äÊÌ‹ ?Êâ~! /ÜÞ_/êÔ"a)¿ZÂäÎæZØÒÚÒèÒ†ˆV3œ"¢ Ën^ #ÆÄ á$_àÂÒä~#   #/´6$ÿHÒÜÊðÂÆèÜêÚZÒÚÂÎZàÂä–@2ÞÌÌ“V1E2äÊÌ1<)0 ¦ò÷?@/ ++H]& #Z|J0ÈÊÌRYP|Ê}OÐèd?ÆÂ昘OÐèfõZ ÛZ( ?3Šä æÒ$ˆ?ZÞä@ŒŽ…9¦"q}E  L¦ˆ’XVh  ++ B"73’˜`h%4 %¶Q ‰'hvH}\W`#ÀJP#ÂÄW#Æ¡ 0#È-€êÂQ@XäÉ”Ä>ä ++P¾JX#ÌþÎÐ Ò ?Ô ++@e ++â(3ˆ *ÆÂÜNè@£ @íÝ/ ++0@(Ú+S'"3”¼hB3š £h C0€b :{T,BSr?Sáp®*f¼œêÝ*=—¢S®% ·SSA: þ$ò?p á¤ž/ pH%j%lº* ++f% ›Q*ïF'âÔ^Ç(¸¦*¡r ØìÞ</â&<ÿ–.%ì .(#./d&é.*"áú% Ì$®šõÑ ’z^àã{à‘âyjÀa@‘â_jê&?Èê&|"pÎ& ~ ·½N' yw0â&ª&$î%-pšdÓMhO0Šå(l ®Üí(lP(lC° á(l. 0p pÀ£,t ®ìa,tP÷,Ž&pУš .ç§À&àgÆ 0/Öº/ Éš o †å,`Šœ±œ œ “œ =0`Šø|˜ÛÁ ++få‚@‚@.g[_Qy ++@@@"RZŒ ++@Œ|ŒâŒ .?¦ $1$À* "$Ž º"O á‡É ˆ# ‡ÉÔ üõ@À@Fd ˜âŽ04Œ$#ÓDÀà/Æ /¹«Î  x–1¸ ++‡‡Je‡Üƒ, tÄpœgp Zp¢ ˆ/Mˆ¾$ ¢ ^!8#D# íHBÆk„= p8DN=&Ý |l€(hDžˆ& (06$pš$ †!ÖÊ/ ¬\Ÿâ’d©…(vdc<Nš!3<&(ð<.ðþ<â.Õþ<Ⱥ<.§þ¢.’þn1}<fY<H(0#<*þ ++  -A ã „ eá j¼ñeá| .j”[‰ýÿêXT o¸ET ` ápýÿê< ++pà‘SXL ++–rp@‘âjj4"àhG!kýWÈ „Ü _ø͈t.“Ü/!Ü SXPqPb"/ý’3 p&04 ’39ýNp&è( "Ê( "´ o²j@ 'ÌÚ/• "“ 'Ê  $ VýŒh_q$|  | oìi| &N|  /0 >¢,- }°‚å ‚ä l . ¬ , ,ôì ++@€@€@ß4 l Ì$ ¶' #¾l ° ±H  T¤:$p ++•p ++ p ++:(.°p ++€p ++$m€ ++>_l ++ R EChNƒå ;h/7p °d ++#d ++ d ++ü , ++_ ü , ++Z9È0 , ++ Õá ð´Ü .§ÿtšŒ<y  d<UH<;-<, ++¶,.ðþ(ÙP Ì»d `à /Qà"8þ ÒCS@‘âøô3Â{l½lè˜/ L.þ¨&üýßmêÕ·¡Ÿ0/­€O°BU[BU±BU@cS8 $%Mùö@Pãÿí -™n‚èH } 0ð)} Á"ø]£3 ã!%)-15T3 ã9="Aà\oG‚ å åVƒ ð } 5µÿÿ xexe5¯ÿÿ  Sªÿÿ ++ùôdeª1žÿÿ¢‘3V!à’?f™ÿÿ ++AãF3ݺLy] i\dL€Tã‰ÿÿ ++lÖLâ=¹š’P dÙ,ÒAîQØk!àž| P`ÿÿ ++gº†a^ã]ÿÿ–’P[ÿÿ ++bªOÀ ++ÀfPMÿÿ ++T8RáJÿÿ ++Q1â0BÒßT0Ž@‘j `#rªv1§¯È@_2¦¯ » ++'±‰(Ïó)®/ó) á{\_"ö ++PæU) ++HÈ.(B3–Cò!è Ë8B|ÒÚÚ0:ò]J8>øjò˜6ØxN"NO5¶Â=TƒB/Á“‰‡¶Âÿàâ^ãAýLãEQ0ãˆà1 á  ãÂàÁRÔš7âX@‘âjðÄ£ k ˆe™–XêàTàT¹T0àšå¸Ð¡< õÛ ++=ºBx”ÄJ9RÂæÐý`aÚ3–Ð â D B,Y_Š3@B©Á˜0¢\BŠ3˜ ++Oà¸Þ8*3šPHaP˜8XXꈤ35`˜¤3p@hÏ ã` ++Aæ`Þx¡2 € ˆäO")0 à–äxäˆh”1ƒp(Ú3šhH ò  Î_,¦p ØÇ[Aú3šÑP¯&êÜæêààÞäèÐP13œ!}¨ ×%GRûH,I" Ij)€ã ã ØÄÄcG(Iê{'I &GBˆXg  r%e*r' D,g‚D,iRD.k*D ':IbG(k6'iB /grC/ƒÂC,‡C,‡êC,‰ÂC jC‹'‰²6‡/‡ ++C%£ZC!XvÒ3N ++8ve` B3ž×º/ °<¨T4b 44b.ã¶$* * N Šâ Ú ÷+÷ ”ëhéëh7­Õ b@ÏÿÿæoÌŽ Îr—â p[ @ 剀(‚q1B® x:€Aê3ž;e}¤.83N˜4P`8:þã80(SU¢ ?zü)`"®)`"¨)`‹8)`!àš³× ++ó 3[á ++ ++Zè¨O šå …ZM\.±}Z[0šåäï ˆ,Js4o[á ++å^ å^Rå^&_u ++/å^/j2ÀÞó û1}"0ëq\3í^ ½ãsñ^Cñ^«'5 / £(K7 ±cç0í^P 3ß÷Ö çÄ(¶sí^œ/MœxXå^zIÄ4å^ ^/A ^ŒÕ P+Ý^ •TÝ^8"àá^á^^  á'á^Ð/|·úH)çæÇ# XO Šâ#Å^ •(¹ÃøÅ^8Oy#—hh Ü»éyØy`œp¨Ëh žþ/ ƒ0ºÑQ@.#À ©`°ƒ‹‹0˜ Nÿ__|o5°¸.pìg¸3à‹ì‹ìÀTcFo6ß ëäS6 à+à -VpO63 5 Ñ 3€Øª X¸t wâ³4ÎÀ':ÿuVï4}<n PP?U ++^.ÿÿêßÇzw, &/Ý ×//ÐþÈ?/] ++ÈS/Å ++ÈçÈ,Èÿ!/5 Èÿ\/¥ÈihQ/9ih3/*üih;/Ñih'þÖŠhr3   ++)€ vR1°†à§c@w ++JÆAß»c]v7Ó" àÙƒ*°’"J’/1uƒ¾ÇÀo\1ƒ ²1ƒ ¿¢Qé'+f²-6_°å'¡­@Ú05B& ¡>5 莲3â3 (pž!( º/ݺĺ00 á–ÏÕ.`‘(6¢¹e) ¦ž¢žl.0¶”>&(.° …= ±¹@0H Ìgbi&H. °ŽOLR ”8ëa _H"$0œb  ã`j}6²[Ðõ¾‹Ó¤è88ÀËÖ•‡>/]> ›_ª¹@ …†tÆ_eÿÿê©ÆË"£dz˘(uöw˜DåþU˜ <Fœ´Ý;´/©´#/á´/´ dÊ /îL~B  X.fþºX…B^GþÿêÞú ++_°€åT$YMô9MH ±, ¥+9ÄðÐã;©Þ rüýÿ ’×Ü0r °çxz ++ L B|!0šÖÈ °æØ¥%@ãýÿ ++Ò @  áRϤt!}t.¶ýô¯™ôpV%Œ _äéllƒ šåŒýÿêb»yR›*= ++Ëkj»"à¼qrýÿê~‚¯—¦© h(<#ðË)z @ ÐÏ  áh‚ 8! °%‚‰s@U, ++H®%" ™˜/ ˜#/ í˜'(ä˜Æb.Ð2!HEwâ3 XE ÂÈkWE ++`ÀU8'|.p4I‡*Hà,›#4 Àƒ/˜p X, ++ v XàA,šˆ#3–m°I'’I"`ÔUaê3 p )’ e•Rz3¢6qó&(3¤( #r#t3P3T3V3Z3^3b)0)23Ræ3X3\3`ïtmq¢ /€çt  çt=“ ²3¢ ++(çt13¦ÏtUB3¨n$ÎV š_ :_0‘ÎRà "@p#HÆW7HhL6 èž!8 &ß%‰!5!— B3¢ ω%'Ò# Ä,)âÄ/+²Äs,)ÒÄ%;bÄó!p3ž8=š+ ?º+ ¹øB3ª /x _`Ê#è  -ÞÉLÉ ++îÙ¿\s ++Â5š.äk’.0¦..`8"îö ,Á "ˆÿÉ  ¡­ ‰ # b÷¨»p tþ-‘"dù l“'‰ UT/àƒ #D¹ ^0‚å °µ /7µ P#E ++"™/0À™/™# t/ê›'Ù·TwËê8ƒ6T´œ  _Ò/¡! ]U üp,s,üp<]†:ø #O*Z°*BZ¤<%u*°‚öUcá_ `Šå,,-á3%@!Ÿ$àŠå°—å+XÍÿ °L`$° ¸Ôu @g. p|¤Á ˆo&€p€Ž€  @» {8 ¶ThîT $#Ôw ;g A8 08¬.88è ++èk&Ñô¼ >" àfþå@óÖ Ù %¢;ŠËq¸¥‘o~«k:KAë,<â}Ôi.·þdªœXP.Eþ .< <(.øý.èýÜ.ÚýP.Âý̵/¤ýV<0 ¾:Àu°Àu/™ Àu€…."ý£H°´²ø %J½ú3“7ú0Î Y3ªr úGx3ÀÙ Ü1°uÿÿÿþX 2 ÂIi”p%0¯e*%24¾e'%6¾e/%8¶vS?¼$'Øv_3¬3®Ùv$o ++Îbbb“ €r3´ ÈÞ§<€3°è &£n°vC3f`s' b’²’ 'h’O²'h’"¦” Qfd3´nõýk7fýhý¶ý¶ýN%Jn½o3®3¬n$Gyg3¸3º|P3jQ¼qih‰kxÆBVpm8#pêÙ>” Ùj8}Tê3ªO4% ++  -4v/J3ª ++0:ïðB3¾ 7 Ò!ZQ¿ "P.;.1 ++V „/$ú!¶el to<&×Îl+ß>ÈÅ ++"·)×'U¿©x zG l+’I#C2„ ++H.' œ u” ü;@]4L4>4!?  á¨ 8 9Á!8Æh0L0ŠånL(ç& küñæHúEšå$šå'H*ô‡A (/åÊ /Øp# `/Á5 5zg¼/®X… ªLW( /*˜5S2DO@Šå#@Š,Äm Ô\`8 Nd öm?6ä¤*/$ûC/æn/ €„¬,…(T1Ä)O°—å/€`°.€/£ ï-&ˆ€H#/{%*#`àÏä! / N`A(€°¬€ä€RŠQ €"O@/2€* ¸¥5$’”~”.kÿhV€ dã€Õ.¸þ´«0.Kþ8(!.þT^O À»œ­.œýü„(.uýÔg<P<B1Ü1 |#ÈüÜ0Ü/a Ü0Ü.°üÜ.©üÜÌܾΠòx¥>o 'ø¯'3À@•Cwb3¾p"èæZ@%TÝVXìZì\ìSÈìe/`r&½ $fjä63ÂäÂnDlçn’ÄçÄä#/`rH¬ $fpõýk7rý#h`ýÆýÆäÿÈqihä€ xäpä}@(Rp³/ ++(âC¾Y5Ú3¾– °B Ð ¶†þ3ÏÓ=D/.ÑÿbO Œ§àpB50 ¨ (ÜàRI1ÂÜÈ ŒfÒèÒìÊæÐR§ UM ++UQƒåà—]u!]GðÕ déU/,¡! ++Å’&0ÍÓ<9¾mäÂ’å °’åÀ’å& Ë» JÕ¯XFû¡Û3„(;„åÿ“‘ #V@ðí±Ú1àÚ[àåi.~ Ó^a‚å À‚81à‚Hµà‚å°‚å0‚c`ÊÕí“ Q ++ò7ò7”Ú7W%JQ5KG|64 0.,Å@à†âtüGADEÊÖ ÂÖ.í˜Rߺy ‰ ÍïV@DS]Ýç^@šå¹ÿÙ ²@H{fµ XJXµ ºÚ/ Ù  Õ)-ˆ& Ü.öþŸ@Û¦3Ð oàÜi"õi´W´WO¿ ++§: /G§:&Aµ 0ƒ3pSãÓ ++€æð! ++ Sãõ ++@Sã« ++`Sã ++ SãÅ ++ÀS㯠++àSã—.P Sã"ë@SãBd}â^ãn°¤cK;]Y0$•D•1&pî Qôr«Þ*© "pÞ ñ= ’8"’ÿ‰ôá84=0’. ®Ò@2L/ðšÎÂ/p²Ð/yмNªtÐ Sã ++Sã)·=ð Sãê ++Sム++ Sã3 ++S£Ûa ++"Sãsíeû1&SH3 ’±/ í’±! ++ Ýñ,$A./Å 4 Hx<ùꪙöê ++/‰Ä¼b¸=KRÂì("Ïþ(/í( <@Àþÿê‰/)< @¶ë;’åÒìø`]íø*ìdø lõÌ®l§lXlEl!à’QM_ ’åž âòë/pÒ/™pWp/Íp'/îp ,Áà¨X¡„E„2„¼¼/åLL/L'/í¼G/±Ì»v8\8I("Åý(/ dŸ 0’å°’åô.ô#@‘E°Ê!Íÿ +‘ Î 9ÿE/°š¸#îÂ@†22' ¸ Ôî”/E ++0¤””§×!Ì°"`ý°/© ++°'/í°?/9 ô§×ôYôFÀ"!ýÀ¥lˆ+ˆ/@Åú+ ø@à áêì|/î4 ++ 0Έ/Á §X ˆ8ÉIˆ!à’¯> "¿ü/- 'H/Å Ȥ€"€ü€/)€'/î€?/¹€ð /ìð PO ’å?*ààf9@¨*¾.à8Íþq4F/°8,IŽ/ ‘$°‘ ì4/õ<µz<†ý =4†ý74†ýÊûX€%“ô*0ø"£ûø/¨\ @)@Š´@’ûÿêWC+á˜]YHÜ=0“X*X>'4„8"rû8,a8qC8 Î Ï V+€D/9œs€²ñ)[ˆ4 („ ++Õ/Éh+@hèx/m4¹ø ø²”)Ë-—àc¦:0æ$p–)Xèqà’å0—äžmQá‘–ö   (S‡³î„)]0 1Sã^óžh}€žTÇK1à*;| | îžöa ìA^ád`p â^ãaÍj?íp ++/ øòý.AøÔ¬ 5'' ++ˆqå °å¢'*'ÝG&ìº&/° ++*€à^' Ï@° ++ •UîlÜu)`?íHw H <Sh/Õh;à`àOUm.-Um ++*œH ¤‰pŽ-¦¯Ž)¬ 1 Ìpd 9” Œ.iˆ œ™‘d "xù4/I "jù / ƒ/ $¼O0†åE Ù¤ q`zŽç÷HÒ ”5 "JÌæIÌ(¨6Þ¹3þ3Î$˜r@æ/pfÝß höæ¥y´3̘r:°Ü #hdZÎÏÒ3Ê ˜r\p`m KÒ&.QÎ? ‚CÎÊCÎyÎ ++›4ÌwÎÐÞFsÎ(ZsÎ NçÎÐÞS ++3ÐpJÚyì3Ö&˜rÓåpvî h~Ò£3Ø3Ô˜r8ð hqÒ'3Ò*>(Ô(ã°ƒæÖ‘ã 8Cíayî3Ú…üì/pdÖ #hlÆØÆE͆ÚÍA0 4ľ1YÑ)¨0á¦yê3ܘrùîpJë &hn§HÒ B;ï,3Üuå%*S/ ëá¥yè3Þ˜r¨ápgñ &hpº Aéá+Þ%ÆYÚXà ðxwvÖyOå'mnéOåSjR3ÐêOEò3àbÖOåhQæ3â#çäpÏó /hri Bj/ŠMè˜Õjâj P‰*°ÈRä3äìi܉&@ /j`ËEø×8ä8+#zþq§æ>‚æ>X>±Xyâ3è"+ø˜@ &jbofçDeç8èI+)¢CQà3êÓcêpx× /jd0Dgקê ++ê2+-Šü¾Ýì4‚ìlÞ4ÊPyÞ3î0˜rà$ì/ /jfªK° ~|°î5+3š‚5@Ü3 ödrtØÞÞàV ++ /jhÌ CBºBðt7óQÚ3òó‰Þ|Ê /jjó ++DZÚ„³òó;ó‘`5 3ôw ++Ëùïw ++ jy ++ F ++* ++ô ++0hyÉ ++Wö*˜rgôNf jf H¯ôö¢H¤ôq53ø¢lúZN /jp6HE  ++´ú'3øÖîOB3ú·‚ú) VëQÖ3ü[ àù& /jr[ ESà «ü4 ŽÝE™ ++`XÒøÆ/ódh3þ˜ŽQÔ5ºÐþpèð /l`¸ Cÿ ú%5´Æ!(å 258ßö1MÆâ/5E'5üÞÞayÒ5EêìpÀó /lbpEl|rr$çò8`yÐ5ÎÁòp#õ /ld3 Cõ ó%5.pÈŒP6Ñ€’pSR Hè:Â2ìÊØ»Ù2 ++ Ñòr ++@ Uñ20l`5 h55pȽ /lfN CÆÿ "Õ M +5 ð0B5 Èò„"0kF ++à“å”! U2âœ- žvÐÜ”0à“åØ 2 S àžå 2 àžH#Pywˆ 03àŠP«°žåæâ^ãÃX¥°à ã šå’å0î¼0@  ãœ |Œ "üzI|Œ@p áœ {c0Wã8T_c I5{PL{l‹  ãÂCAsœ/šì' ++pàì' "çôˆC  ¦=0žX6X%ø¬.56ÕrX?ƒå ªH P # †ä$” T XL+ÛT ª D ? žœŽE¼   ++Lá5¤´œ= p“À" o&‹nS *¾]é4†Bn|ªBD/pÿ‚ÊAp ãøtà ã:ÿÿêPq “å ’E4 " `P^ã:Œ@Ü]“åžh -øo à“åà$(n8U'H"’Ë ´ $O@†å¼ìÀÌÐA* "ž#Ëj/“åd. /Œ°hø„!.m„!ö©þÿê<ŠŽ@B¾_‡ pwxwpwl`5 ++hÉh é0Ë2 ++x _àB5x ‚½ Hâp¥xÑQ<(@×ò5(B5 ++  _Âdxje)XD) ++@³eG5 ++@Jç eê± ++h%(ïÖ ++Ü93þ¯&mJühtô>¦5& ¸˜"p\7°S$^ãœ4\(D¼#SD^ãH5Œ$)"A<€¹8ð+ýØ$d$$Ða9Ì /¡Ì1 šåúG®Ï `À²yÈ5>ð \Ë ßë/pd± ‘a5"5& B`È l›H¥!5ØÜ Ð é dé é ©ˆB5 ½W%(Õ ,?Õ ,Õ1"’Ù©1Îw púðÑå/©1(}$©1@Á ÝYÝÁm º½2rÆ3ï ++%&°²GŸÂ5<˜r.ðpñ #ll Ÿ²5.˜rDñ /ln÷Jù6þ¸ Ó ñôðôð"Æ ++*ýôðIÊ5 ‹iP¼ŸÊ5$B˜rLð p ø lQ'5"ïT ð/5$ÚSZ5&X ð"@-åîÂHB °Øð“TãOöPNSŠd*iaâ஋ó ++,°™å Uá;*°Kâ,°‰å‹å 44(4haŽâ0î,`¡0Žâ ƒåÖ‹>­“4440‹å ;0ôûáø н/¬ ++ ++B¬ ++0ªS–5,  @ ‹a€P ++—åñé/pk +]k pÓ´÷P“åS0“åPàpAµ·6àpA¯™h•po/1 .' "ps/MX1 "+,àË7Ç71<.™< Ó¹,6’dü!"8Ž&"}V¸5*cZó/pf rÝQ.5(J";`á /n`ß AÖ(Öð¸ô* 5*áXg ÛeJ5, ®öÞóO5.5ôC”5ô^ Ò505ôÇæ **ö• ¢Hÿ°5:54 ++ÄØÞÆÖ§ qhq‘ü 8D _ä5<ÊÌÌÊÆèT h‚5>æäÆô@àæÊêÈÞZæäÆ GÂ5BÒÜZØÒÜÖ0RøÞ 2#bDÌàZ’:`FØÒì“ÎBH ++ÈÊàèÐJ0JZÐÊÂÈÊäæR!Ä Z !52 bvNùð565T58©? ¯ˆùAø7nùfÌäÞÚ¤FèÞ=…7VÚæè-PÆÞêPÚ)—7Þà ùq58 øºKö˜ àâÒÜÒèÒÂØÒôÊ  ,½K €âRã° i ¶Iõ  ãà„å µ*Àõÿÿê à‚âàÎã.ˆP•à *=‚T‚ñ RCÐ ++ Bâà†â0Žç…ŸÕ»Ý= òcrêp¸óP`B7lËs 8 &ÜàZ›Ôª(6ÒÜÎ ++Àª S@^ã°ào‘o  °K€ÀK?à€¦&65@¤&?5BÇ'65D¼'65F³'65H¬'?5Jž' VyZ ++4(jú&L²'  5V5P'?h?5N Š5ZÜÊðè P 1ˆ ++ݺD¢dÊðÒè¸a* 5RøB5r}Åé#QÃ"l>1¶/—åˆ8­$uˆ8¤Êˆ8ázB5n ' ÈÞ!*{t”º ´ ++X…1†Iˆd#$= “àÕ… ¹` ƒâ`œP *.œðÇj© ƒ , ³oPÓŒ$ ‘$0$&î$Ë$Å$»½(qª ++9“ü¬}KV"ÿ/_/í}?9 ƒd"Ž@A“å—dtd/Qd==“xqc[Ô)l/@h \ßj?>€1@šT=5 ž|Jw[ðtàx·>E·>àx#| | $h=!‚ôÇ(.0ƒÜó2X>,ó2üÔ.¯ÿäˆ@jp)@l2 /LCp/<ÿKçw0˜1¾¦=—0¨soknØ(/ˆÿ(d/dÐ\ÉO@Oä<| ncm/i| d `VH.ÉH=H=H6HÄØ`/aø±t~­D9üü/ÅD /þþü/÷þD//ED#ä5äÞsn.©ä5äÅä¾ä0/) ä8/àýÊ.»ýXÿ ¡ýÿêlr5T°5VH5z5\Ôw jw xw p4_5Xw ‹1NÅ3jZr~ \~ ÏH5|5`ÒÌ l !ˆ „ O^ Œ4V  ‘EŒèäêÊrrŠ ++ÌÂØæzA5jÀ5"Þê» $‚>`>¿~5fèÂÒØ@nL?bLŽPABæF:5dRfÿ€5lÜÊîÌäÂÚÊpX eOh&XŒ/e77äàTNc=ôäàH!8Š ++C’XjšlCl IFÈX/5p"~35n­:S5pg@hX7 ? ++@î=N:#¬N:QR5n.¬*.¬v /¬Q"ÂÈȨZ(@äÈæB?¬G' ++p^%^eÀ$' ++0*&Ú* H/!¢ &%jÄ(ô=r[(X=;«pê5RœOòv ø àäÞàÂÎÂèÊZÌØÞî#VfÁrNz;Ì ++NS˜M50.i_©¦@‡[à ã> Æ6Éš?O–$9ìn ++Ì’SÂb&Rãÿ?ã i¯ÍÆ-p0“åâ8"ôÿ¶ </ @3 ’@3Rãó@¬F½f0 ã j&åÙIT0‚àöLàUfè²é@b@ ‚Z.ž6_àŽà~  ++øø&*øø%Úx;dddL= å‚1h@àâh3 ²9?åcB ++òØ<JØd<1d¢ËªGÍk.qÍkê¾g’06Š ˜“´xµ1ÙÐP¨§DTØ ‚1šL@À(5tXº5v0XÓx è ÈÒìÒÈÿéµ1QãÔn0’å õ*!ƒAE1[=± (if,jû E +ÅE r۸Ѱ€Aâ@à¯/Àÿ¹/ ¤© ++œ.Ãÿ÷èj0 ++ʨRxZB' ++ ¹QÚ5xq(€B5x-1H¨Sê5vðdH5z ++€ 4| ++  ~€ " &^´-I ú{éB@8R_Ä@B5v8Ê5Rq‚5RॠB5„ ÝsâêàÈÂèʵá*ep áà—’1ô‡Ó9Q‰ñusà ÉO “åà€âàžçò'Ž32ÒÊ0ATaHX˜¹¢LˆLT”¹ ©é|»"p†Æ3m0€à`ƒŠ ++$—Â3…B$‡$…1ÖéP ÜÍ|Ñmt¾ ,|€,R(>ÊG ‘U˜)q¨\äÝŽâ ‚Ö4Lî¼/4 B/4JHàÌ „,¬øùÙ‡ðO šåˆv@ ãN2€"RB5‚•€BÐÊÂàñ¡î áààÎá áá áw700“ç6åDCÚmP½àâp€à0‡“6 G'p37B“å0Ô©P pÃã>-pƒo7‰ ˜O áÔBñq?ƒãèiÚb0Ý ++5Ý ++f‚:L"@¿J@ ++šˆ! ++@Žh> T‚5‚& Hi %h[„cUO(ðB1  ++i Ê70 #ªPB5„8%2 ƒ ᆠ @ àâÈÞîÜîi¾"@³ ð ++¡> á0àÃ1 á1 áSឺ„× ðRᙪ0‚âp€â0—ç@p—çùDŒç0± ã¶p Àœå \ds"º Šª|·îî]90]9*ÐÉõìÞI)#  MýÊpeÊ ü¢¦Ã#wA@šå°ðð‰ð;3^áB)>>?Tã> Ç_ ‚âƒôëÝ©Ì|»Á)\^ µÌ¾’°“å °›åmÛH#ãfF ++òþO¾Yâ5†S 5†™"H -` ²²5R85VX#/zz#1B|63"#H ’~1#5Z€ 7" @ó ÚæèZèÞàì ¿ 9šB “#¬ÿL=p‡p°B5¦ÚJàgÁ]10‘šÏ( á¢ b-*ौ'l)„/ !‰+ ý¦è´0 WàîáX"P)Ô?]ð êB5¤ CÈ "ÚÂòÄÊZzL1 ‘"¤ðôU‘å0‘7T 5çGÍiPá["°õ!7[á"Ò$&ÌHÇl} $1QáÁÍ=¾û{ q‘åX^㺴b‘“ÈP^ᶻ à´a3^ã Àa>©ÝIëŸ Ô| ++Š¬Š¬'Î ùQ‰Èa ÈaP[qLPL/ E—_àó_à‡å&­6N™—& p„V¤ &§ïœ} sÌ Š0  áècå$ c à €qÞ %ß ++ ì› ++ÝA^å Ûš‰L †å†åÜ4ô¸<«(šˆpÀZà ++@à ãG ’ ŠËá}¿ ¿ XÑHðHðÜí A JO ’åÈ„T"FfP 0—å°T'íJ/+t÷t÷ñJŒñJŒ'ŒñJŒñJŒñJŒñJŒñJŒñJ-1=5àŒÍ2/$e1Àƒ6(ƒƒ(ƒ(sƒå`’å  Ð|£Ò–|1Páï–Øc~Òtrª±=}Œâ`€`*O…J`†âÀ((?(? (/(?ƒ((  N¬ÀH5(-0€\ ++*ò(@à’åi2#$è RÀŠå 0˜h=:[u hP4šåô OÀšå ÛÒÉߨ‚/0‚üº•5Ä­ìg ++<ƒ<ƒ´/—"¯"¯ ++¸‚é53 à‚¼‚”~¸ l|¿Ó *[F® ¸N¸ 0¸¥0 á œåàœ¸)¸¼? 0Œ¼/O íÛ'` Ý›gèYJo ‘å ‘ì ì0†å†åÏiRôˆØž({¬b¨Lì>¤0¸ .öþD/çþ,Ùɹ©t…ùÈ/UˆE( ©9/8LQ‚ÄÄ! €ô^rù&O‹åkD/õÿåÁ,³£„ù!8"Îý„ é&(# ï ,•-Þ" ÷$x&ˆýãÇãÁµ( %0Ô *ºÔ ( :t( ìppu( p€( / ç<( l ,( 1Ââs*15~¤Ð   ÌÂÒØÊÈ@Âæî[ðÒÞÜ@PÜÞè@PÆÐÊÆÖæZÆÆ~@}]`RR@Âè@0xð@bfddjX@ÆÐÂä@ff@ÞÌ@ÆàÜÂÜÞàÂææ\ææG‡5š&P`ZìÒÞØ ++èmÇ_E56`Ilåh5ž5Ž,˜bj {¨äÒì\bdn8j n[aq5ŒC;lf #p`;p”5Š;6gj pw ++T‡®„aŠÔ^¹a Ÿ5Œ5·v#| 5Žÿ(ñp5 785’0O;{Q- d)šK‡{!5’æòH˜5¢5˜.Q–z$aO\bdrÞz #pfÈqò5– D=n= Â8”§ C©–8i¾1i" È·0*E 0**€1i˜Ñg8ª ++ðþž' "˜óœó*èÞñ/f`ñ 05šÜVH:Ü.b°*hk³'5œk³Sˆ’ÂcøYp@h5ž^p ®¢îçõ 6 B ++!ðÁv ++ÊðÈÆØÅ/ ++ÈH èq–Q7B5¤?(H…&/db…aQ?#P0ÌnSÚ5¦O*¦ Q7€M%1@ å*&èÞT%x2 @‹ 8%bZ*8¶ƒp 5¨ H/@ÚÄØò/2àêèI&ð¨`ð 5ºÈÒæàØÂòXIF` t[Q´8K"ð5´àäÊèèò^æêÌÌÒðÊii¬ Vkë‡Û%pŠ+â%!ÓïJL•&*i•&Ÿ8< D&Ÿ #<d7< <xÃQ"ê ßK“IH H|ÀÙ"§BD©DDíDD.1DC0ŽâÓYÓY.BOZ 8 8 8.8888888#5ÞÊoöÝ) ±Þ©þ ++0ô0Š5²àäÒÜèZÎÊÜæòÚXf2°×®1fØÊÜÎèЪ1DÎäÂà`85ªX›£¬05®Xj S°Xò ¥²X z5¬ ++“ ++×%qjwx7t (jn>€.‰zOýÓ„'D/*$¿/B\"àƒ1àå pžå‹1 ¡‹1B\l@ Ç`X ùXÓëÊëÔB5¼ /hÓ+cLÄÄ]ëÑiÆ+S$.¸®‡³ ++q ,¨ëR d[³«R) o˜$Ú+@9>+ CV‹i y†¯4­²+XÇN¥0–)*!àš__* 0ìÀ ¤†Oµ x/x¤ ¤/hTD0‚å Á*¤<å(UäQ 0—å™(ºz àN;«ür@à†âïa¼Å*h.`Xh/jW´ °%àš"54V.µXO@žåz6¾4µD‘8Ê o" QÃ@[·K$šåòž!°ÔÍ [W¥°Ç1”7Dñò¯ÃSvÃSÃSÃS¬Yç@&ñ4¤/MïSÐ=êd µ¦€ïS@ 9 ž`à 9@ cZ˜ËÐM.ÁÌ1àî:†/šåF¡;M,, ++,,m4M4F?5ž  ++ì *Ý  ¤/@Q+!Q4@šå, °ˆeDt/ ++tH 4 ´H@/% H//i H//­ HW±6¿Jµ6E p"êþ7qó( .Õ ++ £a¸Z¯.ƒþ0T0ôZ†ƒ3R#Jþ3R i Q×BA3uí ++ œîðýÿê¸z5´B5¶:¨–N–Eqs–%ÞØ ‘t Ò7j1" ={@´ < 9²Ë§²Xz5¶ ++˜” ’”ó?¸þ…p”gvV+—ÙŠÚn í%HA& ++¥ƒ¥ƒ2j:i!È4 "q# šu åå¯ ++¤×ű}±}™'ËÆ5ÂêÜÖÜÞîÜO¸¤{05ÄtŒ ++0=m(|Cz5¸(|H(|ó(5ºXŠ5¼ t@¦Q ++5¼×Ò¸21` 6/9ATÓð<5ð<ZÃ#0„ФyT=d>Bh@à„âh3 „>]ˆ><˜dq5r¼>m"b5V ++€9< .< DŒNÀNÿgÀNÀNÆNÿ»?5ÂE?5ÄAÆA€8 Tˆ ++ð!ó5Ì5ÈæÒÚàØÊZò ÆÎÞæ`ÆrêÌÒbäâZÊè!'-øØ! 3Î!(ÎÏ!ÐÏ! !È !Çü  ¡,P5Î5ÊîäÒèÊZäÂÈÒð~Ð~P~0?{‚7ÄÂæpŠ6î?!dàÆ pK2Æ24Ò sK” ++æÒÎÜ~ wK7‚BÚÚÂæJæÊ›#@ üÈáiÑ , ±,@ ¥,Õ%5Ì‘L(5ÐÌ%ÓÌ üÂPüÈRüÂ΄³„s¼0 X@ T‚5¼‚œ|7p ++ !@8 º=ÿ€ @ÒÜzP5Î¥ !é,l`5Ð 73üÈt úm R˜B5Ò+ ++dØ !àA¨7!A"ôiíîSzdwej? 0žÅ ++/gÅ/YÅ/IÅÅ Á 9ù@§D 99€¥ˆ ½ .åy˜ ò]ä]/Ô˜7µØˆl®Ô ÔÔÑ(‰Ô´z,Šåô¹@ *Ù}õ8t ¢C™€@Y@ã-ô/™ô+Ù@€€ðû˜­­­­ ÀiÀYK %(<.°þ( ’ptpfpVD8/ùÜ/=ÈYÜ!åh hŠc3/ ++ ùx.yþ£8“…%p iEïý¥ò4„ʯÔ¯ÿgÔ¯Ô¯Ö¯ÿÿ Ö¯@¯± "@@@˜ÒÜÖ@ŠC@@èÞ@Ö ´vO1Ø0 b  8@ÆÞÚàê×i’2b@ÞèÐÊä:æÑ+ â, .Ú.ÿgÚ.Ú.Ü.ÿÿ Ü.(ÕÞÕÿgÞÕÞÕàÕÿÿ àÕT0 @@è»PØ"JõD@Z|   Z  @ÎX¤WL9$8nânÿgânânänÿÿ äq M„êÚàq &’q =߸BL8! ++5Ø ++}$!ê@(8µ9Ø‘Áð 5¼ ?~B5ö Ãð êÜàÂäæÊZ+<$ 9"5 ³A$ ++¿@D)/Šåƒš /ä ++ƒš&Þ ++ƒšD /b D/\ D7D1D/ŸD/™DwDqD/˜D/’D/ðD/êD/“D/D/D/D/öDðçœ5àD.8 y#NS( (ÚE”†Ð^@vp“H2ãÑà”åàâ^ãmSr7ã$$4È OÈ/I =D7DŽX¶ßL )L#L$àPàôù*Õ|A9+ô ô4?Ÿ»Ü- ++  ++,- ++ß@rÿÿ ++€/@wuHO@šåÕ‚Üdd6…i$ /»$q$ Ÿ¨˜S˜BÎÏ(”åÌ0r@&þÿê4 g0p= ”g.²ó.²/ .² É).²'àÕ)O0„å.² ­3­8¦zÖ/d,$, ˆ+5 “¢“Ž$e¥ óÈÕÅè2À)citXt"‰ýt+ ++Lä –Þ<?uz"áM2°„0„ è` ¯„+½ ++¯ªS ûˆ ++„œ:L3'à :p0†åà†â :H7/#à ²è—u´.y ´—È1È Èˆ1ýÿ8/Õ  &àÄ ™-&àè.a èÏè‹| / /Å$‚$/ó$‹$5$ßÀc$ûä˜"müp/ä[/ñä‹/‘äpxpgpp/ñà"üà-²á<®å<<óáišâ< Þ¿¸ *ÙüF,¸F'à _0†å#@C.•ˆVî"û/õã/1@sûÿê¬*i ŒŒ)¬ ,ç|.|ª|£|j|Y|1|/q|"|/­€€+é€<›«<8@ûÿêH+!DJL(¼, Àné3„âvéw’3„âo’Râs„â#à„å'|+|ãÌ.ÝÌ–Ìl nÝ3Ì"¾úÌ/=ÌÈ@°úÿêÀ+uÈTHET44ë4nÝ4q4/q4c4/©4‡/E4°$4/¥4 4"ú4/á°"ú°/°“/Á°}|l|"Åù|/!|"¶ù|/]| °"§ù°/™0 50 0+ è4  á4 ìì,'0è è ý;äD Ä.Ùƒ|`1@ùÿ8/5`w/Á`èè/èw/©è?1Ìøÿ8/èw/‘0ÈMX"{ø(/I("lø(/…("]ø(/ÁX[/1X§/íX\ VD6ô0Ô%DD|^š.p#5”.!”êÄe„T„"š÷„/Í!„"‹÷„. "` ¼,¼0/y"¼ºÐ¼/@ºÐÍ8.%#¤›8”x-/•#è |èv !4FØ "îö°/}$°"ßö°/¹$Ø "ÑöØ /ñ$Ø “/™%Ø hØ ØGwœ—'è@MRY‰"A‹?\ ˜Î×L[L.É&0€N4ý4ðsð Ð/i'ì¬Qtt$/Ý'ÔD.M(Ôq 4¨†þö0"Âõ0/-)°"³õ°/i)°|O? +Ý) ôtZtÙƒ .Q*0t9p /0¢m ð *¢mC  áx0l¤@@(à„â¼/È3Èà˜À„Ÿ}0.É+Ì.®þP§ß¶ÄKÄÄ‚ù`"êô`/,`$m$,óA/-@8$L€$ qp€ÓÆßÎH ¦€¹H ZQ:˜›/;³d *@Œ¼]d ++ pÝüÐŒZÝ b /­.€°_D0+!/¸   >p / *‘/ؾ÷ óÈä Õ´, &0  , Ô`3š 0ÐëÐ#äþ ‡t* .é0i@Ëóÿê“LÊóÿ ++4Ñxz7`5æ":m—Ð?bdlôÖ /pjµmD¶mæDmƒˆ7N5èo íÕ?bdl—Ñ /pl‚K‰è‰qJ5ê>PˆêÚÚò5·í /pn€ BwêwS25ì/o°÷?bdloq /pp/oCyìy05~ Ó1î;0¤Ðægo-Ù /pr{ ++@xîñS&5ð#r@ äÊÈ4¹Ó /r`t Auðí¤òˆ5ø5ôr0ÂÒØ9ôì /rbzAzôz`Ò¨°è“ÞP ++0 V0tè.nÀ0–ˆð˜ð»o`:ˆ °*">þ˜u876LÆNÈ &rjšŠÛN „Û)"„Û7Ðí5(y7J“ 0dp`·p¨ ÒÜìÂØÒÈí$¨Ùœ/7zä ++zäVEj5özä'76Ýîô*#†ÜO;%#r“´ì/7Ñ‚ÃîjH# ++0Ѧb8'¢5ö˜Âû¨ׂ¨`@?ê=- ++®%/ ++®7ñ`H?¦ø' ++P)&1Új¡HGf7>R@ÞìÊäC–Zbt¢vp‹ ìò>R D) ÈD#7Dxd7 ++@R-ÞÈS n¥S¦ ++¦qb7 RSäZ> p¯\¸ ¸q\7:\NgZàÞÒÜèP> r¬ìxP éï'šô'–òx)Lòx#7ÇrZ74w•Úth ++6r``Ä®MÝ–Á'ZÁ)\µ#7´U`7{QÚÞìÊZ¤jp· b·P !mz­­s^7H]÷æèÞäÊZØÞÆÂØZæÂìÊædr´ d´W»»SX7–æÐÒÌèZÂäÎZ/r`± fàMÏ{'Œ÷|"ÁÝÁ@T7õèt¿öob¼ hØHˆ ++´ˆ ++¨Óª?zƒHGJ7õ œZ"¦mfµ j"N  õ õ õ L• Œdnr7ç ?‚ç V=`Aó &?:E ( .  ï‚ . B7, m0 /GBëpcFG7" ++˜/M ïU=b' ++°@,SÒ@4?d&ø' ++p>/Y:>8fê 7/]¢ä ++U?ôÞ ï/cš  $ ‚$ø8hŠ- ++¨/kÊ? ?ö0m  S /oš=;øY ++ 4-sj49ô#)w:ª Sl7(D‚d/pdO   '7&ÀHŠ‚¼Š‚+7(Xda pa u*u‚*~?7,v)òÓxR70(‹«pÖ Í '7.ÖGÕ(æÑ*€Õ0Ä‘17244ˆÒ?¤ÐæÑ nѶPB76 àäH†Ìš•U¨†•/J†•Dð1P%Qd%= ’Ô@"* P@ /¡€,S <;KWßä2 ÉðKßè28e/Ù8/}88¿d+ô' ’å$$Èxô'Pô' +DD + t †t€¬(  £ä)å§N¨(/’åÐ/MÐ{_ HX •w¼H2’¶ ( /Õþûp%,@ˆ.p%/…8ô"å§óŸL°9°ýx¬/ @0@.=¸%3aL!Pä/áä´\|!bß¹1žPIX»E74 ++P81(PfP¢7684:4! 4sG<7<ÈáïDZäÊÌŒpü p׋Kˆ'dnì‡<`[ \ l\¯Ç0Ìs7F7>! Ú˜rný Á-72% HP 'bâ/dÜð>ð67Hz\ì jì&ˆù*H7@ ++6÷S"765gP7B ++p5&Ú5@R/‡AD• ‚D• p• %b• œS#76ï#! ) 7F¨H¢ 5@F(—JÕc?Ð7L È…!‹!na ++#rb'7JìHóyÃÉ(A ++4d L †A… hü“P7„7P8ùObdnj× ½$7NÖñ8RðñÑ  ¢.¢±=úÊÜèäòZñtTúoW; õñ"7PÅ,( ++‘1 f-0À›ª;ph5ö R6‚R6ôñT®‚T®’V®‚V¥2^ î/ U‘Xß‚X;Z®‚Z;\®‚\¶!O7^ ++È3€(¯ªnh7˜7b ++æ)/nh¬ µ'7`# K5ú*"7bu:Zn dn}dÏ‚d}f®‚f} µ•À.®u± ûp~ïï Ÿ7ò”6 ++º…øËa#X‰oˆ7h ++p9 jZ‚jl®‚l}0bHA, ‹/ ++p(ÃJé × Ãêã0O]û ++ 9¸7nÆÞØêÚÜèäÂÆÖ¡z&Ìâ¡z 0¡z6fP7n‚yP27(-Á@9º7râ š &{d…@…oò{ &¤, ·æêÄØÒæèæ~ {÷êæÊZäÊÚÂÒÜÒÜÎ~,{ Âõ”‚ÂæèZÞÜÆÊ:Ñrq üúÐe ·a0), £ & L~zÃüö@@@üæüJüú‚z š;a@Pœ@X5z€¾ËšF|PR×?fÃa !Z80ÿe !â‹aÿe P›³4%%ê4$'r4<?@ ÀÅàõ•^%ýc' ++0— +ÂW€@BT8-:×{MbXSb$/r$³(8Z7t8BCef ++7t ++ e!`àb!OÚÊšüšQ€ $ÈÒ³@ ¤žŒ’˜Š@ö=g SJ-ô ++ ,@@@ÜÞÈÊ@¶æÐÂàÊ@z@ÄÞðºv&S4€ –|Uˆ…Â7|  Ð?‚ (_‚|>›zZæèäÒÜÎÌÅ‘[/€_• sêd_• /e_•/UJèvvíCÒu£g)G6&_W - +^}T.T.Ñä 8Ø Ð¤‡6”/†ÿO4.]O4ooúý3$j­i/7v­iÿf,7v­i,7v­i/7x­iÿÿ.7x­ib ?ˆQ Z|¯–P7z ++æêÄ37z `?Š."Z|</ ++01 ++v Ò7| ++ ½¢Œ"WÂLÅC»8ƒ8[»¯xB7~  ȃÎo¿û‚«üÇÓ{ c|àœ'| €@+ì<?ê”= Å8Ÿ|€/€H.M€ÐI (![}Á÷‚Ÿ„CÄE ÌX>/€³} ;³}O€)/C€`Ì ÝÄcê$)œ¡º~*]œ2Îq+ÿÿê4¢Ä ¯mP27~¤)7|ÈT"7~Cr²,0, š,ó0 @¶ÆÞØÞäzäÊȺ J4aøBTXn Ò-4 -TÄØÂÆÖ/" jcc *Í #]Ê8ÀS7~8_ƒ $ú• _^ @€B7ŠÅ$¸R“ɾQàW15à“>55á€ËC ‹å&IP|||Â9|9|î îÀõp*p$p½îyÜ0=0¾ · ½î¸¸d²W9àƒåŸ0]0W F=Üð 7iÝ º0‰Â}ÝÙÝ`A A f`_` Ø´Ü.eÜ©„màl.» V², ¬ª4z ++ |¥«0~` f 7€89& ++Ð'!PW  â7‚ ++HvÄ(i.ŽÖ48a’¹Q‚8c]Î0yÖ gÒt 7„ ++ˆm ”‰-Š[ S`8m @T8mwÅ"8 ê$"obz oâyÍ !X0sÏ „+u*¨ ˜B7” Ä=1™'b0M?Å nªLo:‘z/@Š8eÌ %|Ep0šå  áÍÕ"~ĦÀ‰- ’‚¶$%nµ#0îµ F j»>µÜQö~‚ ­•Û‡&Û‡Ö<õ¤D/ð« @pË@0šå¢ØF¶Å7_&0 ã˜œ# ƒ ?ƒåŽ`œðRÚ`7ŠB7Œ¯Ø¶h ÄêÒØÈZÞà¹!ø£ᘠ€UØ @ 3Tã<„2‘F¾N¾0@ ãjñ#DA á@‚åƒâ &º‚ Gæ@‹å"Ä- ƒ( 7ø'îô:ºGæ×ÝÇ,QT(¹ü ¦T(€à“å^ád$!’æ[å&0ˆ'Ä ,-D”' öà'íPL@ á¢"0gôÄ /5Ä0¼*Ä3Tã ÚÌU"@’ľ¸%à à:àìK4/!4Ü „</q<<<<¯ü¦üô/ôGX@: 0ë2ˆ.Ê€Êò$ÄjìÜÜÞÚrÐhÞhêÜò`Zó! &w 5 &! ++V 7†&zˆ ++"8ð&¨‚µi(7Š@ÁÝü7Ž ¸ ÊðÒèZÞàæˆ ?´ ++9ˆ a“åPo›&w®,Þ~0 ‘¶1 Öœw.wÔ&ÚX 9 4/ _/  Ê­0Y/Í0_/A<ƒ/Ù _/M „ lTXZ[=|"|Œî Ú0/QÚ0 † !ªª/ͪŠqü ü ++ ++õ€/M€¨6 ++Q¡ÿÿêXcR7Œ×hªÊŽë&œÓ)) :)|~.) š.€)%²)Üå?E'¸[ˆ/x m(—n¼$R`B7Ž ½' ++ÀGvB7Œ ++(ƒ'@EIˆ7’ ä¸õ$Äèj`ÜòÊÆ`ÞäÞèÞÊÄZ`€ŸF,|Fw ++æäÊÆæ{"*7Fá¿' ++€fxœógj7” ++¨V¼¿”D¼Áyü ü hÖÜ«$}zF÷–  àäÞÆÊææ÷1 0‘~ÑVÄH;ƒö/3ƒö/$ƒöí$»$y$$M$Gƒö?ú,§ðæ V²ö=Y ¤ L,/6 ~O „å„îËt0–/ÿ™O0šåÁ–º‹ô„ ++=¤* à ]@HÿÿêL L H à‡˜ÒÏ à:à/9à†d/}dGò ä „¤ݤ]¤/!¤H\Ù¤"¤5¤"èþ¤/¤4¤¨ɨP½×$`Ôþÿê}î!4å^C> ++Èz3$˜~$Mä–ëì ˆX°^5´%Y'˜,Z‰ ª0°ìM– I/AÛA* ++(  ++k#…²•bxb@P7˜ð`؆H ÊðàÊÆÀ– +++!¿ @Äêè@ÎÞè@D!#Š)å 1l18 ûS Ú7š¦0÷1:!(:E $êÜŒ/80†!ñð^€9ÂäÚfdÿïð˜)º0 7œFªð9VÂÄæ B7 ø $¼SeÒÜÆZÆÆbÛ Þè0Tãø¤´Eì °ZàÖ ì`×,!°BÎa? p›ü·xìhaR á°>ÎÄL¬»L ¸! ð`L’ÎL/ Pœ4 à°† P¼”â$’$ý›åàƒå ƒå ƒå ›ø€¶Íý ‡å ‡å @‡åà ãà‡hp$3à†dFÍ@ ãe)" ð"0Ô"4? ì_ Áå<¨dN$ øIÍ)VÜAhâÔœ¤! >2>Œ?gà ãà(> – C†å *Ï\C€(.Û(@ ãL!R ñþÍâz ÇØ°‰<yveˆ`/td*Ù`\¼` üà2ÊB7ž p >cZ|äÂÜÈä  FŽB{0† w0†à’åH^ã8&E¡0’å ’å ’ø'`ß1z@æD  öx ºz@ FB`îuFBl þû1bL^ãkàܽd)Æ * Ž&PQá&òKžåBó1 @ ++àPÞC†žïìÐÞÃèÖF)>Z á~¾Z¡+ ++/©âÊ&².ñ‚ " ØÔצÐFþnŒ/³¤vGAPÌ^ãB`¿íd62@àƒâ23ƒXƒ”ç;ô Ö#Ì# †$^Žâ`‚×â‰/þ ++òÖ¶ ð® îF ++06jf_3Xß*p 9J;¯BCXÄ»³@`74Æ F4 ++Ÿ ù€HÆZÚÂÖÊZÆØÞæêäÊ<_Q ú7ž]S(( Ò€\Ïyð xXDÅ ++&W  ó ð $ Už h ¯6 º  ÈÞ3å6^ÆÆ=¢$q* ++à—¤ ‘&àÊaàžå 0—–Ä(Pmð?  ãúR\ ¡ð Šå\DD‘îø ` Œvp ++Ãàñrvp7¼ÂÈÈÒ(3ð°   ÄÒÜÂäòZÒÚÚA û  LŠå ŠåM¯í&@ Dêi)žˆ‘ @÷ÂHV#î$Î"<P Œßt² ÕæÁ0@ŠåÚí\%­ʯžå0 ãpàj8 x"p‚hp .th—hO@ ãd\4mdC@Šå k]Ö+  ãV Py<½¬êÊ ++„šåT ã– H : "Înhv,1àŠý11àŠž* àÂF- d¤/iªj  " @$ê"@Þ’ êÇ Pá²? ã +øpJGÊmX ^o$â &L  îz@ à†âfLÓ'p†å(à†â+à†å/¦%3t (n`Šåãþ´’R‘å°æ¿ò@  jü1Ä2‡ò.¼þ6 °µþÿêNúB7¨®%Ä° ÌêÜÖòbdÉ'U#ƒ+0 Tµ'*OgöñNÍ•)+•Ñ'<ú˜Ä£húª€0à€áMàà¬j£ñûŒ× ++Œ/!ŒEÎãL×%q1%P•'°€hÀ^ã~*€0aâƒ3­ó ƒáü1wÙ—cÿÄã a%ÌY0/í]¿à`Ÿ/àŠÆ.=2@Žáwûƒ./h‰3!oÄãÍ$š&¼»` àaâŽãøŽ/ ˆü O 1 ! ùƒfÿàã\ã /uˆŠ— Ç ï.í~”Å”E?'á  /pT2ÿÿ ++(u*» O@šåùotòþÿê8šÿj67¢÷jp` ++C*ô¦*ÄÒèîÒæÊZÌÒäæèZÄÒèZæʺ6dH7¤<"²ÂäÒèÐÚÊèÒÆZi\UäÒÎÐèÍØO7ª:+5ØÊÌUT7¤XM¦ 0/ÙDd8b%`ü &,„78ˆ ¨.7@HŒâªL&FŒH 8 ƒP7² ++7v"¶7´ØÞÜÎ ++ ½ êÀˆ7® ++ÊÂzR17¬m?X#=7®C0$1Ú@ÊäZÒŠ0ÜÂØ ‘ A@Üzü¦ÖX7¶ÂæÚ ++†!pQz7°Q/±(X; ÂÈÈç ôÆCÐ V ã ÿß Kx0ß Òþß *àI.Q^á× ‘`»# à« +«  « +ÑG  « ’« ’« 5« <…« 4/Í« O1« µ « Ç€Kû > û û û û .Üþ{öû pû +û Iû pû 8µû …{2RÂ|‘"87²‰>7´ƒ`/ ++X#_X7¶cgª7¸ ++HÄHû&ºDA¨ÈB7¾ P?J#†rÕ Oà ãb,/Ýa ++š7¼x;°ÙSR7¾8¯%òÀ #Ø ÈÞZØÈä1FŠåM?"00"Ú­%Bª nâYM3°›ù5ÛˆÂO Šå ¥ ²¥8ÕÙ<ÇìÉ5ÕÙ±\pWu p@pô"ü©Ûô"pÛ)4\Lø[|‰”P  à°ø(ø´ÕÖl¸ ´ /* ÈñÒ9pšˆ @ð—åÈYeÛ0&ý00 0oÃ@0/š0l± ù 0.]0l\û:l( ( À­H9}  @‹\ !  Ý”m „t= —±”  }!y† ¨L'•!"+àà+/ A`ŠåÈÂ-*í¥)àšð ++e€"0Y€P à€åâx0/Ïþ0ü0@0$! †Ô.ýýö“0 0TéÑØpÜ ++ 0.ÝäÌ ++ÐäÂpÉýÿê€ò¯ ++X™ ++0Ê ++09`EQE6(vî´!)/MP A@9LM’ í ++ % ÷h7¶09NØÈäÒ ++ÐT`9Zbæè`íX#Ò7ÀS1Œ2´ˆ9°7êÄÜÊÒøB' “ ++vÊ7 ++0*`ˆB7Æ›ç0¨  )bØÞÎÜÞèÓ ++“N. “N¸“Öc"ã? p—`(4‹ëê3Cà áL/àL8ð©L"à›*à ®n–ƒ³_<ÿ/án0Ë6 ô_B @K Oýø>«ó Aÿÿê*‚Œ¨B7Ê òO@€XâÏ?-%0—üu1ü×-¿Ì !¥î. ᥵E˜EIàÑ9 ‚¶@js@CžåX#S;|@àQjhG3…3-@ƒè•2-'—%ñi2å‘2 ô(@—åŽ Îð á•2 i²kXMG/®b@ šåœ£1Àp laæTM;²c/‘²cÉö32ªØP< äÊ=~b`tÐ7ܯBý`ã˜ÍxÍpÚÄØð´È— ØÀ ÂðZÚÞìfd—_Oâ .8A/.ý4ƒå ÖV õ/õ?*õ 1ôÊ ø3 *6ä• *6eÉÀC ¼x& චѧ`äz§ L4—y!Ž ð'àžvðy ++Žx@. Sá†@q 0å“ú‹DEf ^ÕP3bv 0­'Qo0žà ÍÛ ÆQn è"mB±'/ @(F+±Ü(FÌ‘!«æ^ Ü€ùbR(=(0(Ú+ ør .ÞþPËš? S š *IÚO ±hPªþÿêJì´– ++Ó&At€ÄäÂÒÀ! Å¡Á¸ ØÈäØÒè°!Yù ++Åx Û=±'> ++4%`™ 1È ++8\>!.!¡>p:7ÊX?ñ@#d&, L BŠ Ú) y`.00@7Ì&OúÈÊTê&&8Eñ ÚÂòÄʼ…pZäš2' L¢À7ÎÔÚàZèÚà±/&¦‘7Ì9: ++ë`Ì7Î%&>² °7Ð7Ò’®6!`9ÑØÈä^àÞæèÒÈðüO`Û„ð ØÞÂÈ°4Í(q,Šå0 Šü"0Â>2oP TE/³QãNªàaâ o 3<DY( &õY(,6¬8("\s¾?"88”"09$Ô4»ŽQd"¯Ý2ŒCåì~É!$ý d²Y,¨8ÄÕvu4/!½4$Uq Œ •ì{¨p¤C.•^"@à &@qÿÿê<R±,ˆd pà 07ÚËܹ ˆ® H® _M±KIÈÊæè\M0!Ì9« RB7ÞÀŠ"âÁA2à 쟋’FÌØäìB.U RMf:ÔA‡/BÞ" ` "$àªr."pæ¶ H" b. `²%—å.â. Á,Ád[ë Ê»0 I DGBª ++³2¬¤3ªN0¼X/È’Á9ìØÈä\ÈÄز"Jß@@ V^ìæèäY6U6°1ÀU6ˆ ýŽdÀà›å€^ãõª®Oup0Ããàâ¢Ö">q,á áàÎœ` =6/(0€ j,¹€  (Æ_ Šåêa0TP"< ``7åà'0÷``$ÍY` [,Ej#Àô<"ÙT4ƒåü{/àž³Ng ³k3k{$ûL,D(´?D"$ÜøDPdP$/pžÕ3Ƨ«sÀô"0™( * .AÀ.ýþl.öþË7@Ú­.P H  ++CqúÆÚàÒt›´æ  ÆÚà­@ÅÖ. Õ¤¼Ò.S‘}¨ ++ýÈjY   ++ Z ±8L93±8/ 4 ¤%eýš.a!ø yùH4 !4 4 ¤ €\$x"P °/PÿP Ü~zØ>þ-@ð *ið ä>ø`+p$Á%ÊB7¨8ù ++î ++@07ìñ ++/ñ ++,È“âfgê7æ ++@ù4±87ö ++æèäÊðBèe1è  ++3 ™R3/ú•Ræ3÷2¿¥!àž·-–õÉË2Í•$põaR\aR/3´§4™/3PÑ/3y/3•/3/3(Õ/3ˆRyËyù˜pù§3/øþ©§3§3p§3Õš +§3ÈÑéÊAR/ºFF¬3·?? ¼ ++@FEÍ3XÂ7èØ<#Áê?ÆÚàý€î %À ? ++\< ++"0Rƒ< ++òšc< ++¬< ++9…9/àè#\ ++Ð$ ++ÅàæÁÈ ++( ++( ++@e( ++ÿ ²8¨ ++Œ¨ ++Ð °5Ш ++#0¬ ++¬ ++Ù¬ ++#0° ++ÔH+\ÿÿêó °­P.÷ ý­P›àÖà›­PdÐc¬¶<éç$©PŤ" ´]C ++ EP+Õâ9C ++^C ++©P[tyd©P/ ©P*ÁüC ++©P8*%§ ++FK ++  È%X; ãLBÒ_ ãE[  ã>ÄÊH°©PW#HpS ++/°† \&Þ_ ++Ö \ _ ++°/= ¤\-M 8.µþï9­P?Žªg ++@ì'FÈ6 ++RÊ7î6 ++ ¨–_@ P¿ ++GQµ%ð0¢8¤8kâäÞä(ððkä "êÜæêààÞäû" Þàù" èøF %’èP €7ü ++ØÈ P8B7ò$D1X M ++ÿ æ » í ++”àí ++¡Q!'ZÕ.uXëduà«?M MM  M (¡M UQ-ÿ%õ]&õL/õpúëCß%30?>íR:7ò ++@É5 *kš7ô ++(ØJþÉ,2( ØJ&ÆÖÖJÞì7Šå þ”Ô'ÁÚJ˜)% .u±¤â”D "8& Ä79 ( ¹R`IÊ”Í 4ac h/à WBèX /i% i DhD½ ViP iT€:+uTx:,X%4#?4ÂiŽöè±(9\ ++ÚÞìÒbøÓ˜0˜ 5ZÂb ++  È߯ ƒ ó0óóPó/éó?=ÿ& œ/à*]*Ûw*1s Ð8p1ÿÿê.¢5'ùÐ oz7ø ++@ 17úæ!A7üL}ò+ \7þ+ 9‰K(`''ÌØS¾*SµG &‹*?p—& ++qË S×W&LSÏ¢"0—Ê<6ª) †2ª) Y ++*v´š5 S@’;à‚JD(‚åº5!`m—å —‡:£H$¹  0Mú"(<,0s0 ã ƒJÃHë÷Üö¿¶$€¦.ñ4ªKDª*ÀTIX9ç*X:BCëÅ/õGðìÆìè\æfdZ|ÈÄØìÚÞì\ÎàäZ|æfdO29³Ò@  Üõà÷“ÞE2Ó ‘å€RãÖª¢à%20 âö§ö}/0}kL¥àmà0}"XI2 dò*J_M$+"•3U  "$†ñ",ú¬"¬':‚ù±<àâ"" á Âc'ÀÀõµ&À ûÿÿê6®1!Oá) ½&6¦=_9« ${J9 ++0à/9  ø €VèäêÜÆ‚¸Ùq‚¯ïš‚"pD:6 T‚ Ü0D:¬pHL¬ Hüj/p2.\ »VL ^ƒ^! —òU ^=^!dX XX$i:: ++3èÃ$ ó¼ZìhQ` /ÙhO šåQ`JjX*]3E0Îàä &91vív1ÈÄØdúŸ!9}3௠MÊ9¯ ++/ HbXWÌØæâä2 °Zœ¤°/h°2 ”àü¢< 2  àØ5¬9 Ü5@Ì,1´× 2 W2 <>2 L!2 2 Ô'@Ø0Ø ÄçÄØB »G^ Ø/ Zœ Ø@B 6Ì ++ìq?(ÄY 9 ++IJB9 ¨tRæÚêØØg bTã®öbÑmU7w  d$b ++0ë è ôàDóX Ø2‘4Õ6 ++T(Üß ø:ImD p쀜" ‡*ÒLä$U)u0Ë* 56' Œ!8ˆU!žÊ mœ!0œ!°Uàÿ+0ê00Á1)|$&[•¥7TEl”l†l”[Œ&w[8@‰Z@LÉm;i ?0?0(/Å?0«tkl@Ã0ÿH .åþ| #Áþ¨‹'.µ4Œ.`þÔYÌ%ðÉ9PŒpl/ð&MH q%Xl? l@3 :0]‚9 b 06ÚêØ”_Øs”"0µÐ> µøD? ++4 xAd ²)0šï:´?”0@ì/ŠåLØo0L, ×ú £é÷×!Ö› úÞ×¬× ×ƒ×¼Q \1òÓIÓ@¦;" DvÊ&/àc$ c$vßÿ~#[@ÿþÿêpµ•/y0!µø ߧß>ZÒ+Ó?ÚêÑ(áô&Á ¥R[ ++9¥u Ø9¸q6ðÞäòGÑiŠ“3à„RРž ÓïÎö‚B9  9(zW1 oSZ ++€e¿ èc' Œ„eà0L)üL" 0WG‰r/ 0[x( àT, xRE 0“å0“}lDE44l/o ++ ìEØlOšå‘”ŠÓ%¶“ÒóƒvPÊÞä Iq8ÊÞä ¸þXÚ9Áv ++3  ++ g  ÿ8p  0 ¦(Þä .Þä  ð9Ö à ÜàZÎÊܦˆ±&ÈÊõÌ8|  á> ãIéX3ƒÛȃ’Ÿ8$Û’Ÿ9(NÕ î–Õ 1à—í…@à—åÕ 1à—°@à—åÙ 1#à—{@'à—åÝ P+à—å/å 0à—åá O@^ãâß!"`Œ§t”æµ’ 1 à’ˆ1à’LH‡p y(€eŽµp, ]$ÁǸ5.Ť"pø\ ðW0¸[ ~#€¸€% ++Mˆ³Ê¨?×ÊX1×Êq åÜ1àì1à1LàåLô÷Êa‚@ôT‚L1à‚a1à‚` C@‚å'Ë dÊൠ++Ⱥ¬tžQnŠ% /©°gO šåYTR€(|ö.ÒB9 1Ñ"ùÑa`aCãàî† ÍÑž`’å’å žÙ"0~Ê0A/É%0N'«500 á뼉À‘:€à á žå‹·/^@€Xâ®Càžå¾@õÿÿ ++³'qŽå Ž‚Oµ¥]íÀO‹åæ ߸ðàvE ¹Eð"àvÑú¸ °”  ã Žå ¸‚¸׬*\Áž. H"N6! : /@ýA å3­1/.å53‚å åå=‚11à‚11#à‚11'à‚x3+à‚9‚9s‚å70‚åöf=™Èuª‡5fSjSÇe1-àž?¦q10“å 0Š¤qf$á™ €`0 ãD mº>™0@ ãL!L10“»¿1µã5“ÖP‚R%f$èv%fTy ü ª‰ ©@ ü 6 ­åeÀ: î0ë\ñ 0 ‚âÜWÉÿÿ ++úò„¨ì®TµO3“å sÆT䆑`^ãIª7î ß0àãSà4jÙg*9ŠSÊ–`@tâLPàšå@ÁodãÖÿÿ ++ÆTÔ[øTaÌÑBUKÉ<4±Œ à@. @º~@QH»5p"xy,Œ Z•m]"(àÉŸQÛÿÿ ++ÔÌ7ô6VÌ"Ì[ðYTÌ/•Ì'@/ÕÌ/H/Ì+oôaÌ °œ ¥ˆ‹@šåÿÿêé7#Ä9ц9ц9ц9цå$`Šå¨>o/ Y¨ñœþÿê0šåÄ0ƒâ$0Šp{ì( S 0“å, =)0“)tà- Ù¬{0ø Z lÑ ++âW140Š ¨8›jôé mÐ@ ++°€$1à€"8ì Z{M ++d*éf/ñn[ü{™L9$ð(Ð1†å,sÎ`†å0àšåô4€B†åð.,þ ë) @¹ÿÿêˆ@00ŠåF–pI)Ë–‰.¹ýl/«ý姜,&Ný=  f +á V= . ýì.ý §ŠzP 2©e ++Pæq§% |Á0 ++@¬§Ÿ5€Š9Hx)€ÂÖ)Æ—ô à !žå‰/ ‚o·Y©…©ÑÔ^Ö ^Ö l'Æ„áÂ6 ++BE³k¨hB9| ? ÖfÙpX"Ðÿ "Á“ "&`Ç 7÷ `,°X ï `×<§× Áà ¬Ã #p“k 3žåƒ ++Sàžå àÝŠ$3žå$ Sàžå( S#àžå, S'àžå0 1+ž"/°[3Àžå× S†:›› ›$›’p†å†å Ç!Ç%Çó)à†å-†å1°†å5À†åh—‚1 —¸"pxGp !x· ˜Îˆ€¼&°XË œ/°³Q*—3T¯0¬"°Ó0 Ã@äB†å °”M àå ŽàÀ£4 \ã —} pŒâ ‡&É 3 p‹åàœå^”m#°% p<*Ž)ìM÷1?“ågìM <*3<0?^ïO4&@P4ÿ/ás#2$‰$" 0lh?; Ü@Ý: „ 10ŽÄ“XR0Žå0c D½ ++4Í f`b± Žåp ã&À ãÀ!ÀŠˆIÕ I)”ÀÀüMàÐÀ^ã ++ @žå€T²[½‘µ½U<™<Ńà‘åp‡à NÌ$A}‚â0€Ú*0!‹ðȱ ++ 4p4d!‹¥ dd`bÀ†åÀ ¬® ïd ++Î<|PrgU .Í´„Lrü@|n|h|O4 ‘åÆÍ}`€â0†p@<`p3å^®1à‘|åƒÄ@ s@Q&@Ùc#Ù#k|åc8    Kcà¸È$/•È˜È›È•È|+:v`‘åà¢À4OP¬A ++à‘L?†dbd–˜k`V:+¾ø/’ddÈCÈd\!\ /Üþ\äÄud(/I d7/²þdµ–|$/ ++|k|b|\|C¬@ ‘åH/`‚D4D’è¬è4o$‘å¬=/ °/° ùè.°XFX°Ę$/© ˜¤ß  ¤3Rã ++¤˜AL &~ü! ’;~üR~üq%q%4kXÌHh/ ô ++.© ô ++Ûô ++cÀ ápÄ@0ƒâŸ áÀýÿê8à´  Œè/ÌýèÐ$/y ÐØ4< ++PI„ hoa „ Ô@ ++ü ô ˜` á& ãÛ€l!ð;ØX]GŒ¼x &=YG”p0W® G È7Y*Ð*¥•+6ÅÄìˆ Ü!Ì ++ +Hˆ ¤.wOýÿêà è*ià .0üH.)ü§s˜ÊB„D!ç@B94 •PT¢½ÀˆØýa0œå% œåœž #TŒÀ–0‡å ‡å ŒÀÒàœå0âS㲇 RWÖŽNœå5–K"À”À c‹ *Ù—I"ÀŒÀº;Œ!9Œ(/eŒŒHq ++(/)( # Qœå5 žQØ^ãÈÂœ² -m’1®j }0—..05%àœv$Ö/ ã>>_ˆœå œåÞ ~á .OÃJ Þ> *O { # €ö?€åÌ ++ õÃJ¼¥"Àt•|Å* *J"Àx•ýYcPô /Yô TÊó-m èv ˜,ÿÿ"/=,3/…,›¯X^ãl ++Fé$+VB(CB( VÂT7Ԛ šÂ €#hÈ@àâ]#À„à ãàåàâb'30| å "À¼?pœª ++ß3/E À8’†Õ</Á <ªzD|f"|\^„XJÆ^ žå ¨Kî*œ?!àœ6Ä8³–$6Ä(6Ä ì/ 0Ì/ Ì'ÞtÀÐÁ QšŒHŒBŒ0àžå¾ÇÞÇ®Ç3”0"0 / ,//q `|â 4‚WD ’å€ € ñ€„uNâ8h’Û ¸8>ž†&ž†$¸( ++ES|ÌÞH¤ñßp/@Y) ˆˆY)à@¶†ÇñMtˆ²ˆ;>Ûxˆ üˆ 4"(4¾B0,/L ++= œ0 Ι0ƒåª‘"ýª‘KðÆðŽ[ó;žè:C´z¼§=L¼êƒb?<@pløûYl±¼Î2/9¼’i. *$àÌ´–ld;ܱ A/õã®à ± àð.ßþ¸P´ ¼-žœ/AŒ- ƒ,14^‚å èÕt" ¦`Z`50!0Š0 ” ŽMD%D .5Ä.þh.ÙÿDÈl¸4pp /1p ír/æül_/Ñl?0œåÜÝu„üsô=2! ž(9 Æ"‘‚n! ++­+)å/0’,‚d 50$ó“å\^ã0à“å “å0œåi3/Àp /A¦¦ÀêX_ Žà„þO r R%…(p† h× NoÌÃÉ Ô/ÔÔÄÞˆ8.y¨|uÀ&¥ùÈÛ-6Èþ$)’ÈD p á¤Þ@ŒùÿêpñÜÞ'"°Üîë"$ØÜ1p’'»PÔ^ãæ3½°¸@—å/É´ÇGD ®°pWƒÛ¼*‰²"À"°±5.ü"‘p ++(]‡å @‡,c¼ í,1[Å9)œ } ++)°œP îè!°P °ÐÔ°ø Ç$80 á¨¦•¶|@œ~S ¤B:/¨ ++È}¼`m,hBhY®)Ø©1 Ør<Ðͬ¼ Ѭ/YѬ ¨/.²Q#¨ ¨ Dap€å 0€¬ØÛà ÜåàË Œ|jx]C#Hþ :+% € <p ) ã#°@°/°ž¯¬°E3!á!D]‹âà†µ/Kž$ ØzW" ( /*–©,¨¨ Ö" .Ôþ˜ö„éÀÏzWú$­T(‰.xþ.hþ 3¬qà‡â à‡€óà‡åà‡âà‡å‡ˆN‡åKþZ.ëœ÷PT^㙎ó  !„@Ž:”"àú1 0†Æ-^0(2092Þ%|P ++- ž‚'v›Â(r(l(2 —¨ƒpžå ‘å-¼²)^Ò% á@ ê$Ê{ê$ /Á"8lã.pF0=F0Ô,l®-$8bà„à àýd&ô.F1Dµ6*y#Ü" à0ã ”å ‚àÝ@Ô, ó8 ++Í¢^­´.[ª)”PP —å  ++? áBÈ ,u$%/ á„h {6  H /%è%¢%€ýÿêøúËðPHB92A”È` ÈÞZÎÞèÞ¯Cõ½wå๠¹ €XÁ"pWž ?HG÷ [ž³30à”å䳉 l±e#ô°*!QW«½õ ¶F;`’B460—pH|tFÔêÚà˜ø& 86¾Y«X0!à“VÔãL^Sà‚â –ýE!‚â;A#0‚Š R8ú Îþ "eÑ k8òƒ0šå “åÌ3zj+v Ì3©R ök@òà„å„å „å 0„å  Yk@ vîš r¬^@BàNV"Ê‹=1ã4à2PAâ>^sAbºþ#àãò ++oÊ ã,œ"œ /˜?/i˜˜jí &[¸®ßD¯: /¯:O0šåB¬ð;ÿÿê,Âx9.ÄäÂâ)ð  ð ÄäÂÜÆÐZØÂÄÊØlfM/@š©jŽjuzÎ’¡:rˆ ++f÷qØ OØ ôSàCâ.¾ž@ÿ#Îãb,pVƒ9? ×Ú›Ú, O ++ ãÿÛ/aÒ£–¤q ª¶8•p%PÚ, ]ªf&p %PrïkLp0(R* ØTðx[&vè€ Ö£Ì=S Ò9¹jÁ£ 9¤TlU’9  Hc3Òôʆ-1&P`Ÿ=–p0å å.Ì<~_AßH ++ 0ê` ãàŽàöP0 ãûùàù¸áüàýª Òþ´E0@Žà0´0¢áb(9"âð0ÂÄæ$òðar(9€Ò©aÚ9 8709"$ mPñ `9Š9, ÎÆÐêÜÖ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZlrbfaùŸ9Z9( ++2h“ù39&Žù8ôŠùÌŠù&(606O* ++6 !d  ¡9j ++ØÂÈÈä"álÜÊðèZÞÌÌæÊè*ûù 9,ûùXóÂp9.@B92c( XÜÞ@ãƒP@ÌÞä@[Qõ @ÞÄÔÊÆèæ@|@fdš„@ÒÜ@ØÊÜÎèÐ05 !¼5ffB90 ++(ßv' ++˜ëWwZ92 ++(XÕpÊ94PMüTHB92oÕâ|8~p´ ++´) ‡³‚³C(96Í» 6¨`ÈP¼}8Äð ++ np³v:94X}µPY ++eµ eµ1Oê´ø?96ð?98ì/’ìH˜C ÿê2ÂÒØŽCÒô x9$˜B9>  ++:Äg Wëé²Ã;Ñ /à—Ù ++½Ù-] £€Á –› .€Á$j'R½.P'F]> @ ô0 á%ðY#&¾ôtÁ§¾þIol ôðÍá ô³|/0EéØ`"pqé ++wðxÁ}cVÕ ++FHm_Q'š94(‡²X9D.˜bltx@äÊÌt—ð_\bhdn ++ j< pF9BD:/bl: l: t9@˜bl5d5 n5d.D Q Â* þû ++l @l (4B4 48>¨ µ ì † ‘D p9¾a› 'ò¡PCì9H*€gò~j$ p$&9Fž ++H² ++Æ&± ++ºHºà¹¹)Pºtbb'96v±°$¿`…x }¨5Jx1½VÕ H +9L›Õ؉6¨NHÕH´2Ä€©€`9^ØÈ×u09Pä½1 ä½BÞàT°D é¨ ®~U…i&:í…" )Ýšåš:,¼:,0s¸¯*ÑïP´2,‚2,óR"l­æ di©°"xÈ\ í¨°¡ß! ++ÓF ², ½`°*n{~4–²,´v`°ÕÝ/qÕ݇²,ñ6Ô¢&-Å ›,ÒJöº+"pÂ&#0Ìò ++UqkX"p¾& `«!_¤þÿêVÕæ\½@`m"cOui\¨ Bú9´­š ++' "¹;æäÆù¸¬&Yzc ++IP5€Ù [º¬ð *êÜäÊÆÞÎÜÒôÊÈ@ÄÉ ++Y!PÀ`¨BX€¨B\8aªG_º>H `@ äÊÈ}dPBXeR±Ì1H@¦ g ++B D¾0¨iSØ9Rœh½ i!˜îò Úäì@àÞÒÜètpÌäÂÚÊ@àt 7¶9T@ðZèÞàZØÒÜÖ LX9T LP5Φ p üÄ| ++¡ , ±,þ`(ˆ $V0Œßîk¨ØÒìÊÚÂæÖtf—)`9Vxî/ ++Ø7 ++Á ++ O@XlØ9V ++p‡ * ++uX¸B9 Þò9ZØB9r @ $)»@èêäÜòüBäÊææ©T; ",åP5 àžu_?P©Í"Iå“à‚åÌà ã‰c ¹c1 à‚†Š}J©Gti _!L!0ž£"@a +{4™S035yda a ÈÌ^"à¹i10„°_Å ^ éÅ°ÅÊs0àNàO)€àCàNâq¹M0 ++QñS* /èýè"€[{“$ó9€qâfjë,doPã*`/]`$ß-#L!|à T±TQ00q—ÿjÉ  o= 9º"@YK$#3/(à!¶„ M ^U„:“A? ãÕJ "|éeë%»;ÉJÃDí$‡(?šå‡ˆ .9ˆhx0xxPx.Íx/Üþƒ:Ï Jr.Åþp¾þÿêBò\2kbf Cpª#BÚÞìÊʃÎÄ"$5" ƒ"pV yÀ kÄmÁ“wpR LT/0TȺm& T#0! ÂODÚ ²„ 6 ++ b†4f¹Š‚H&h<ÔŠ ++é ÔmŒ ¨=Ô" ,­Céóúààã!àl/l@ô`‚nʃ4øK!/©ý ¨ˆ/è¸O¸-“/DZ×ï0& ß|"&D"KÚC@†åÓÿF…KÚãýÉárT T ?ÿL#ž&óì>²%x½ûïì–Å¡$êEå \¡*rdð6Ø>/ ¬9 ++ÉHûz ++_ <;ëï/%œ–}öÂX#<6$-‘È>ˆ¢<öÖÄ>Ì $.úþL3°>P#àT`«/@|>XåÀÕ¼4@ <'0ZLLA NoXØ’ˆ ØkØ Ø“Ø†,.õ ++,† ò²Ø/Y ÃõØ„/¡ ØØ0/ý îÿŒØ D)Ø[ Ø’Ø\DØØ0Ø Ø0 Ø~Œx4/ ø Ì üIô jh/ÜûXwûÿê²c|p} 8Ž a@ÚÞìZ|†Ä vxÿ¿'  ¯|È à ÚìÜÒ(B7ø»Ñ#lTBP9\P 74¡"ä#/èË# ± p¬ 9™¬ ?¬ Ȭ ¦ P¦ 9^<M9P ++ ygP9d XaaÆÞÚÄÒÜç3@ÞÌ?@ÂÜÓ\‹©#`IbmJæèä"=9dô/ ++Xª0vCZ9f ++8‰'PÏX9®9nä¢.r$DZ@)%_9hm. µp.Õ$i.iÒÜÆäf.$!9j 2 l :@$n€.€%'˜~ˆ pʆo!9p¿°˜À0 '0Èž´ÕÓ>øwJ9r ++ô E2§¡´z  ++Ðòw,HH—YDI!DIi—}ÌGp=! ’ÔGH;:7: ™7:(ëìä;:Ô@*|à=„$V«:/ tz~Øqd§l°‚Cè9x ¹&pÂæÚt¤Ðæ´&p÷ ++"d`U(€C²9v=9bÈ( #db0t1( ?0(v0((3 ¯?c' '#Žn!€ "=£x ˆBZçW°B9f„'B1Pú9z¨D9z ++ þ4CT86¾`ŠÌÌÊÆèPB0gú H!%•J¿—8’9|¿h9ˆ9€ ØŒ&ddŒ Œ~C)ù2€K,8s4H ++ ÿ*© *9|`B9‚_'0Ð ý@ÌÒðê\Á&ÜÈ-„!sÁ5`áàâ!m¾Ž¾ŽÃ ër‡ 4|@à„â# 30„{ / r‡tpt ÏàŽâ0žç„QX„ƒ!à—µhµh@È1Tãã@,’å› ”@à„â”+V  ? qìÿÿê @”})+k;„‡K ú/ç:¥zñþ/CYL/0Ê?íHÕçÎx"xt0’å `!’ÓZ^‘åh l@à„âl3„}žx Oé  2@ž4 ¤~³Pm4 ++@  —OQ%k k0Qá&ã&%k!‘ %kQ%kÓI« ¿Jv1 OåÀ E؂؂ ì Ê3Ø‚Ђ¤z‰ »…†¯‰† Ìëd  E¡á+Ù7@@šå‚P"ðš 4³Pz)¸p)¸£ (k6Ep)ºñ ^82èÐäÊÂÈZÆÞÜèÊðè$_û ++ó ++,ÐÂÜÈØÊZÂààØòZÞìÊäÌØÞÞÈ& ÈÞLäƒZÊääÞä':î CÞÈ4óÜÞÜàäÞÆÊÈêäÊZæòÚÄÞØ|ðØÒæè æàØÒèZÂÜÈ<àÑÒôÊ äÂîZÆÞØØÂäPÞÜÈðèÆZÚêèÊðÂÆèÒì#‹HM"ÈÊ,êÜÊcìÂØêÊæÊ$SÚìØÊèÍ3ÂäÎðÌÞäÊÒÎÜZÊÜèäò*ÒÜæèsØÒÄäÂäòWÚýà‘äÞÞÚ.)4ÜèÒЋZu:2¦ÿ%1 ¦W0ÞÜÊþRêØè"3ÂÜò†æX^ ++P}a°9J ++h hŠH®ñäÊÎæ(HÂÆ`0 ++ðb8HæÌà@HÆ `HHÊæ ++PPH X ++ñ`HäÊèh ++HèäPpHð PxHò `€Hèu ˆ ++È ++’HäÊÂؾK°˜$HìÒäèêÂq2`ÎÒæèÊä3Â"HÎêÂäÈÒÂ\!ÒÊ  HÆÆÐÂÒÜA(*H=ðäÂÜÎÊæZèÞZÌØêæÐà0HäÂÜÈÞÚZæÊÊ~Q8HüÊð@HæÆÐÊÚÊZæèÂÆÖAHH QZÆÂÆÐ'3PÓ(9X$9%?ƒ`HîÒÜÈÄPhHª PpH¬ PxH® P€H° PˆH² UðÞÚÊèÐÒÜÎZàÊÜÈÒÜÎá˜HèÒÚÊäZèÒÆÖY  HÈÒæÂÄØ< êÜŒø¨2HæÒÎÜÂØZÒÜèÊääêàèH>°. AâêÊê»Ï¸6HÖÊòÄÞÂäÈ@BÀH0 ÜÞñÈHÆêääÊÜèZÒÜàê…5Ð3ÞêèØ+7qàURH+ÆÊAèUX’³eðU^>!Úæ|¡øUdHèÂäYPÂÆÐÒÜÇrHÌð®=0ZÄìó&HÌðÌÒäæèZÄÒèZæÊè€,HÜêØؾÖ!êèNAìÊÆèŸL0&Ìð< 4FÄòèÊ!(]2æèäLð0HÚÊèÂZØÊìÊØñ8U> HÆÞÚàÒØÊZàäÞÌÒØÓE@>HúAÒÜæàcqZÒÜÌÞäÚ‡&6HL&W\ÞêäÆÊ-9P.-kZ"^ÖXHÞàèÒÚÒôÊ¡`1êÄæÉÈšphUL8H??©*`ZàäÒÚÒ^cZÒÜØÒÜìÀp>HÈÊÌÂêØèZø,PäÈZÊâð¦&-þz0S0âr@0“åN^!  UÖHÖSÖý+PPP7P!>P1P50 ãÒ1 ÈMw…Ö1;P(C³ r;PÚ1 " Þ1!SP‘a–2Ž²0¶®PA`Ÿ—,0-  ã›}Ð.=ÐWš$8$/‘Tåz0 Éz0czOŽà<&</øÉ# (ôa20Aea½ |È|~2»ˆatˆ”õ”¸$T.ITl.¼0¼Sx xµlYiX X. XÖXþ” Ð?p«€ ++a¿„0à áÂ/àP<"à1ƒØDáDÜ-/¯Üœ¥u  <‡¶àP™P_sþÿêÌ8@(”.-”/Nþ84TT/9þ8,àíl80X.E X8,/™ 8'/Õ 8// ++8+, ++<.¹ý80PÑP/¥ý8C”.e ”.€ý88¹T/ký84à.% l/Pý8(X}X/:ý8+/Ñ 8'/ 8//Q 8+8.¹ <OëüÿêÜ%. P/×ü8Cä”O²üÿêÄ)ñT/ü8-.]l‚ÀÈ,µX/lü8+/ 8'/E8//‰8+Œ.ñ<8ˆ.AP 8D”Õ”OäûÿêÄ).)T/Ïû8-•l´ÀÈ,íX/žû8+/A8'/}8//Á8+(<OOûÿêÜ%yP/;û8}8,ˆ.ˆ/û$ ta`Œ8$/µ$#/í$'/)$„.…$.¸ú$ %¬. ˆ/–ú   m`/~ú +/Á #/ù '/5 $%.‘$5 8Ð.ˆ   y`/ûù +/Í #/ '/A ¨%.$/²ù<k.1”¸è …T/xù<Cñl/]ù/.IX/Gù\ +/\ '/Ù\ //<S.…</øø'ÕP/äø” CÐ.i”/¿ø+½T/ªø8$à.)l/ø/X/yø8+/Õ8'/ 8//U 8+t.½ <*8ä . !P/ø” 7 •ˆ/ô÷¸7õ`/Ü÷|+/I"|#/"|'/½"¸G.#$/“÷|?ðy  à )Uu.÷k'ñúöÿê\âB9’  P /3ÈÒæ¬6YsŠ10ž" ++ƒ‚‚"'ê"!š"iZm ©ôerC ++/ ã6gdRØ2:è° @à,T!s@ss33àãø6oÊ ãœœÚßM” êµrDb BøYG8 &ó9Çb ?Àþ>BpÌ' ¨ € l-ÀBoP29å=ø9’8ò9P`H9¦ÄÜÊ‚ljŠø øÐX1” ++ˆ·x9–ÄÊâH70Êl&8>"@{ *{I@9–*04Zp°(iªÄÆæ’Š09¬ÄØ@X9˜,Ƈ9šÄÐÒ @P âIX9˜gO(9š®T®l¢ÄÎÊ® ®Ê®œè®žBè®#)R®œ®ž®;X`,0=LX9 ‰¢š#5š š¢š¨%%§0ˆé 1bÆñ*ža AQá6Y@ž8ˆb á ž™ ŽüÇq ñ¹.ùþ" ~ü %5@_°†å@°OöÆ\ 0€åU A?ói? `|ð$ð5ÄQ¡a ?sQ@ TPTPØYC¨ òý?âýà DPrz  ¿ƒ=jŽà”Ÿà ãøÿÿêÞµCƒõyC§rOV7H qú9²sLb¦G›g!(¥y— L ++0õz'xºGr 9² ++(‰ 9¢–HB ¨ ÷F´±CCF ÏÏ|8 š†"Z˜!3:†ARäÊÚà:#H.=&6' ++0’K =ê88ñÀ€X ¢9 õ¿Oi¶  ð>·>®÷Ÿ>(µê<5r¥+ <4± =û‘>>­ˆ)!ýCDmDD±D?ì˃_ Ÿ‘.?À0$Ìeý 88888‰?1Þʹ?*áxRcK3&¹?F 5° ®Ï?p®Xj9U"#ò ¶²Xz9¶ ++€•s Úô?!ŒhÆ hô?H 10 …µ¤KO “å—e—° ‡å ‡å“å¿eº} ñ4M¼? ­ÀªÛ8p ++ÊB9À¼@I° ÈåŒ1à0P/È@ N 8;  ÆK΀MÔ€€åp€å0“ Åé¤@0J} 匡Š" tÏÈô ++¢B9¾  ++ ˆLѧ™ h; @° á"âP €oùI ++ H[\ ìQ):øx÷ C¸)žx_üñüQÄ" .pïž ÐÔÍ4V¨C@Pà¦V³™@?6 üÃb,”ötÞ>@¤ÏRµˆÿ­Ð‘$1à41^ Çó ++,‰x €¼|‹ì\Í\"0žLQLÃÔoÎ M4®xažå àS •Â¦0Žâ 0€å S H0Žçˆ ñŒ— *Ù—èx³™ß@á )ƒ´" °ª‚GDmD.ôþœ.íþ“B ++RB h¶ð9¸27p@9º^‰z üúxEò0 ++9¼ ++ÂÄÞäè ÆÎÞæ`ÆrêÌÒbäâZÌè„D&-øž‰*¢‰'ΈD'ЈD'¤ˆD'Ú‡Dv æêàÊä~“‰ÚD¼4X.•¼ëE• X@ LAt LFñ5Ð( üöüæü¼X@üút ++vQú9¾ïÀW-È ++nFûé,0 ++9Ä9ÂèÂÄêØÂèÊ'/ÊÖ'-*‡ ÆÞØÜêÚ/7ÒÜÆ4PäÊØÂ7K 7©°" ürè±È ä 5̳E¡ üÂ0 ++9Ä&Qüdhè¦' ++IpÈtürèüÂ"!(II!¨Z  0’!0 ²p@ÎX Jr0l ¨~ʯT8Ê9¾ ++©\Dùò(( j`C^¹ƒ%ºËáGCr9ÆáGx Âç ˆé é& L÷ xÊÜÈ ?ž9ÈßF-^Â4Ü 2ƒ 3æY¶ÆÞÜæÊâêÊÜèïYðÈ[[ª üº ,ìW L |"2 (Ùŧü€¶@üÂüº|3I/ ++( "PÃC*9´–v¢9´ ++ ²Ç_4 zo%dOóH &8-CPBˆC.W #b"¡H9Ð9ÊRâNõ ++0ÎäpplÂÊnÒêîhîèrÌèhìðòÚZd¾ŽÃ5Äš±'ú±WÌäÊʵ\'½ZäàÒæ‚ŽÊ·[x8P˜4—[Ìê$XR Âx0Ѿ(‹É=ž¢ ++€ àƒâàÎãGˆP•à *ŠZƒ7ø$1Sãj CâàG€à†â Žçñ^`MD0ƒâÅ¥At… ++ š yjUpejzzÚ×W˜&¯M ²x"¾\)s„àƒâ0‚àKNú ºòCN0 Ü&Ý Úú0ª /< É™ÿÿêrê ++¸¯}V‘?ÂÜÜÞèÔQ~+ ++(~†¬@? ++*1ZÊðQTÒÞÜXi*”fR9Ì ++(Ã:0|W"Z|ÊR1ˆ@B tu'#àbý—å0Cà å åøŸ ÇIß0„å „å „å§I𭿺9Îäàý ++é` µ`3¬`¼ˆ ÷P=ˆx~ ++²`ÎíH´ã¤#ÄP‰6p ¨ßÍÉC0åZªm 1’2(– ZæÞäèBX+J ++f@9Ð ++xØ–@ ’9 '` ýÑÍX/Ú9©"ðBa$Y€SÞÎäÂÚ¼ÚV€ò)‰ä€à\(\( 3à„؄؄؄Ø"„å¢\(H /ÿ» š ¢ZXSZÌêÜƽ(UÕbP@ÙS@5¨9:9 à”@uß@Ò‘dÕým€âà€Ø_9Ì 44L44494œ/ŽÍÌ(”éS/ ƒñÒ 0Œ,!ƒD~ŒEá@» 濬™§F ++âAE”hÒ Gú!sñ­âÓ!O<D0žå+ã)ç‡s Ë!€sŸË00“åwã×^4ó®z0< .õB Üž#0 7Økž†½ì"ô"/ /# Á}É‹_ [T"8Qr ++ìÿ“?a“ßà å10àšåÓ@Ó# !ªÃ×#9± Ë% 0@šå°7±£áŒÔ1&T‡"p·"@¼å@ð—åx™ @¾² D@8Ù¸/ži <.DÙ cÀ@ .aȸñ ¸.¸}CZIRp íPLCA, ++b%`­`9Ò›†X 7Ô´¡ø äÊæÞØìÊÈBäÊØBž5 àVgß»í¢X¢e 5 ’Z†%K!? €Ü|ÜTôàBà å„àŽâàŽàÁruiPjo7 ++Hø€¥((_ù\ ++¦( Òk0 â½)ÀÔ8 Z9Òð J¡€ Ê9Ò0" a‡_Z¬)@X R7ö " ÚCù' ++ å ò¡"˜nYR;Aj9Ö(,ñHB;Ü  È (æÊËc’] êÆ® &æBjñ²qC°šå?­$³¢ž#ƒá á;Nâ;AàŽâë…‡^žº®AèÃAèò}3—å7À—œ Wˆ:”¬öÜu†åÀ†”¬"ÑûtõÙ ñD €åõ#0€Bí€ýè1à€ýèA°€å;éQ€å+À€ é/=ÄÀ 0—å7°—åÀ—å¶ñ ‰MÄ!0†ŠÜ" À“p†å†å8È'o&`f²Ô±\"à$(8J>ë#7 ïéؤJD@š@ )è(@ JâÁ|x .axÌrÅ´¯î…(qs^á á0Œ"àŒ1]ÿÿŒ[Ú0‚–æ 'ðâ'!wÊ'Ê)“0žåWSãV{àÔ" 0nÅqÀžå°“.Üï_åc †å P°†åÀ°ß ++k7 k7œ£ ZZª­@àœå ++°UZ¶0œå àœå œY °ŠtÜá‡ú­ ~ƼøßQ\Š|TÔñ Ìô2 ªÈSgSã dRÊ-°jÈ ªº››lêˆôŒ/ŒNr@GSã¶*& 0€ ¶ -ÌEFï ãÂ-Ö|# W ‚%”’¶*1\Sª‡Í]a0—嬪@°üÿÿSáÚL ++€ÖžŠ)—h+HN‡àH.MH" LýfœSãP´)Ê &àúAÓS. ++—ŠÏ%1!“ „óL!<D \ƒ [0þ&XXÅX¨Hl×"1à€Û 9 à€Óà€å@€åà ã!$%")à–Ï-15D3 ã9="A࢑¢`ã$ÌÌ“Gò`!0ƒâÏ(ƒ“%q°žå/À—˜;!rF*Qàå<]å 0²)`6„'ÀrËrËt!ž‚1Àž ä! ,Ò´&ÀI .À°/´#&à´ÀŒì" ¼Þ¬M°°ý?+`û *q=@¬u@#°@9—Sèåʼj™¹ ‡Í uceVD"Œ/‘Ì.¿þÄ“¸þÿêÜSãB1#0—P5'„!0“œÜ 1¢ $C☠(0<i/‰ < Øÿ0Câ SãÏÿÿª 0 ãÍ&¶ ”€v".ßi–ä  p%ì‰{•=0—wJ@À1 ¸ {y{{ ++Û?p—z'© ëûÛ ÁÓðpšåÓÿÿê ++Òª B9âB)ø kq(lBÊ€óAëõ¤°Èÿv‡uôná#p'v®4 4ˆë"p­FdB5¢.. p ++#pë÷Ö—v"3°ÝF*í!G#p÷÷édè¯%{)özæ1à0¸¸ êÜîäÂà¿·.œ æŠ @ U8 HÄP æ/$à4 ÞÅnǦâÒ°¿À ‚B9Ü ˆ(z*"Th‚*Rñ ++&ðMš%6QÆ0V^~ô ++}ÜéÍ2½:—‰À…Àž'y6 _ò<>àæ+"(Q”K æ' 6úTF xÝ2—gå?åq0B:Ý» ]n.H¾Dá¼”ÔE ¥Ù¼Ã)»©n¹1Ghº+ž„P ++- ++$)®x ž:1Qá#{“¡4Ã- €bÔ8/•8p pä1ÕO“å p” '”p.-ˆ"pÃ/à/uà8sÑ0ý ÑãíO šå£x(0(ï&=ØI" 0£*=u‰ö˜+å[;€gCã ¶/êþ+åä/µäÐ]”A4 ++RÿÒ°B9Ú  81Ôë"༠}á+ ž§8R$#$ëæ°dÙXj, Ì#Ù +ÉGÕ ÍÑÁ ++¨œ Àp†|W“çC“ç°ï0LSÏ‹'ïÌàD“ì :!`|Á0à ${ò -˜º+BDlLàL/L!àš;éÌ0r3 AHÞC&ÄØ  8 èäÊÊÉvÛšñTã ++xQã ªBáeôòãî á@„átàaâNá á1àã39Tí:À@ª’b• ++¡à080 R\4#ª¬ú"&è|Œ@·…[¾ ++„[€ BàAàtp¿p/%pOÇO„å 0pÀ 0”å0Šå0”å6ô@(ªrôºNˆPÿÿêdl3 ¾{»^9PAÆ(^㌇),Lšå¨s¨/U¨¨ üS¨4d y‚É"‚VS ++O(B@zT }'x L'ɬ&€ Ô·A"9Øï2(P™,@ª9Ú[¥€.B9Ø…‰"9Ø´ *Õ,U B9ÚQ» ZRb9Ü0%xãP¸B9ÞB1Dö ++O OÈ*5êž²­Ó É Ð&é:é‘E–TS-** %¼& W>Âþ ¹!šŠäš/‘äOàšåÔP$KX1/X0Jm B/7ÞàT0ZB:9Þy'@6V "9Þùº!¬sNÞ¢Uˆº¨Ny¨š9ÜyA&‚q8Ò9àP=R¢9àÝ"p»Jò9âê/Aš9ä`wâˉä0Q ++9æ è 3À (;Êˉ<@*Ÿ$H+^…*7%&à+Š˜€k' 'à#‡í'd1Š‰?l/ p˜TÕp¸vàTÐÌW¢BVÅI2àhDeÂ9èPçò æ€AÂ9ì4˜bjÈtäàZÐÊÂÈÊät‹O\bfnUŒ hŸxê4+Mó‹'–G+&ZG+:\A+ìA+`G¨(4ðL;z M¾M‹ö  ++ p *m„bZÆÐÊÆÖ@ _/x"° G…¡ÙŠâm ›å›Z~¦L¦ Zš$F‚i§º6Æ‚‚TÌ9 ›ÿU6? p›P™i D.òC@ áu6xÚq$pŠå›ÀCW&  ã xáx ÐF·9 |á ÂLXL@΢= ñ åîò³\â…>KÖüóý(B#°ŒÄ¤7 ¡a #°ˆÄŒ_¨àXÿÿê Â;ò9ò ·@jÆtÚ‰·˜0_\bfhb¼  ¸AÜÁ1ð B=fn¸ d£¸€;p9î=?\bf„ ¤¸¶@ ¡7ðÂ/‰1Ø bÐ3d•*v•ò }È»Îô— $à ˆDàäÊÈ~ ¨ &0c‘cz†2eR3ÏcïÙb}"0 d/OàWUšåàž*|8¬ d †+õ  ç<f #L5F07ž‘õ?  áD  k Šš/0Æ,ÅÐÂë¥ùjK/0”Y# §ÈO0šåonrhÿÿê"¢í’gò9ôè ++H cRà.–´Nôü‹ðX fÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@PÜÂÜÞàÂææZÆÂæÊ@PøU² R@ùð@PPÂæÚ@PêÜâêÞèÊ@H3RGàäÞÆðèTR@\\\R@PÌÞØÈZØÊÌè@Ž»@@ÞêèñRR@Âè@ÆÐÂäÂÆèÊä@àÞæK9p@p`njbr`™$Æà‘2\æær1@h ++T Ê9ôE˜Q*9ö`±è§S‘A¼9ø>À ++)Åc¼ &dp ù9R 3½&êˆ:|ï“øÞ ++ 7 ++ 6)î“Îw Z9ö ++8¡Ÿ;5æÐ&ÀOœ&À°`Å/ È`Å"/ ++"‚M_ ++Îbdø¾ !dr 0; ++£/&ÉÀ  Èî TÓÀHÐ ?Dì0Í ,@ Lî?ÂÎÊ ++-?'LFˈOêèÊZm ++?®²Yq,ÚÂòÄÊZÔš‰.Jᆠ.SNaS9úó „ s%9ú?;`D/üØ  MüMM.þ¥KþKK*;L';LLVC;d…; L9þúü EQ P› ; ++Üm?X!R-; ZÙ,\"^7o‚ LÖP6‚ LŽ± ;=ø¯·!fÌÞäÆ~(%&Y© ++4;lƵµÙoÚÈZ¸';ÔÔ%§§ ÒÚÚ~‰ßkÒÚÚZ|ÒÚÚ##´Â€D?¬:6,RàC0 ØÞýpêÜæàÒØØzŽ3o ÒÚÚfd®D;¾"Ž#Z| ++–#;?;$H/o ++ÒÚÚ`~o ++æÂÚÊú "¤6`ÄêÒØÈ7B"Á„;n=üRîO;m/;ma8îÒèÐZýf@ÔŽ îäH?;f#D0F( ußÊìÊäòÄÞÈòZÐÞ??;"ô*?=;//7;$""$ÉO;&—( B*1 °8°°²¯²Ý0ý=;,å,7.E;,òU. L²01"–!B÷@æÐDÞÜÌØÒÆèæ624XQHÂÈÈ·B;6Š 8»:Sh£’1<½‘ ]ZÆæÊè<R³1>HÌw“G>GVG0@=G~C@CdC4B"¸«BJBJ^J9D&J/êÜLDLTLF–àFJZJ9H$JI ++ KHKfK1Jn^ÚÊäÎÊÙJD`D1LDMÆÞàòBLBXB2Nô}ÞäZÊÂÆÐFNFbF`P"ÊðèÌZ· JPJ\JU ;<<R^ ;T>VLXFZP\B^J`Nb@dHfô0¬Ë±âk OìÂäæ%qàÞÒæÞܺ#pÚÂðZÌ怛£ h£' T`" ? ;ÃBäÊÚÞæ''$0êÜ·E0"1ÜÞÈ ++W L¦ÆÏCho Âo„3/;jE¨0/#fÀOºŒˆÐW;l;nÂcPˆX—e%’ ÞPêðàE^цø;„;t0?PÒÚÚÊÈ€!Î?fhf• ++fm§;ø;rE;f; o§';pü Aú!;rúÙλÜÎ)vÜÎ";t×';v=õ 8;x€B9öSª·-²/ ++(ÅB ²>£†å °†å À<%0†æ>ø7Žfg`ËX žf)+ܨ;à .ÁƒgÙ  ++À…/‡ €å @€å @7H2&f.(i.WP5 “åÛJXà’å —å6¿}+¬6!C WÇK/0H¿Y. (L´õB? ãà„6…•N7 ãLì`ìZà3ʯp’å °’å ©ì›Û´=ܘ€7 ã$,:ÛÍO¤}5 ƒâ‚H Dn áäþÔìl‰y ?]<Ì^å Ð/•ÐÐ8( x/%&`à^ãÄŒJ±5’åÔÔµë/ ¸$q$kb-Ì ý.&‘“üSÇ*y/`Ä  0<0Rã?LØGØ`D Ü `Ÿ*1 á&’¼œ\œ{\"`ù%˜-`‚ô;˜>˜g Z²"àm/m/SP0Rá—ø&°A! ’‘m/ ¤=…²$ Ϊ#‚¤=‚¤=‚¤=‚¤=‚¤=ò$GΨ=‚¨=‚¨= -15í9=A6ü¨=P¦f¨=¨=@¨=.°²$2 \ = °‚¨= ¨= ++çPH/å íàÞ$ÿÀŽåVÏ ãÀŽå Žå °ŽåŽå` á(¦$îèþÿÇé3¸©@tx‚ å<àâ ¢úD/Õ ++DD]0HPPRãÃ\! ,£b êÁ2mdC ̲&Pþ'. 44\4è»ñ´Ø  ÿ®/@þ kSÐRã'’W–)Ðâ*è%è ):Þèÿ±/†ýèk1^†f¼¬'Gï¬_ ã‡ý¬1 ^< œ 0o{ýÿê`t*œàtjt  5/5    \_Gýÿê,¤ 9QlD+%Ü.=û4ð6ûÿêè¢5VH5z€;¼¸ù8H6m¯–Pâæ[B5Vø€(°;‚`B;†=¿X"z?­ "!‘¾çG(7ãG ++üYwVi…Ñ"`r7 KE D ƒã—>pB0›Î+" pÏ·¿`¢;„€è!;„«D `…:è ++ a¾dz;†8¸7…Òñ|  ¢ÌÂÒØÊÈ@ÂææÊäS*aPÜÞè@P}RæZÆÆ~zÝ‚*Û%q@bjdlbXŽ*?@fn|* 5š-5w8ïÛ!5|¨¾€ô8²;‚¡ÃÑ}´}/;¢Ý R>X*@óïˆ8PXB;Ìå¯nè1ž‡ 8L^O 8I 8D DP8 1  u\¥JÆû † îͳåP^ãæÿÿ }Ñ 5âÿÿqÁ Ãx%/i1Ü.„Lt³š`B.ˆ¡¸;Œ;Š&½<&tÏïO\bfp9 h;·ˆ;È;l|, /fjt Asˆ;¶6*¨6ŠRó!p÷_àbkŒEôag‚;Œ ++Xoa@B;zqÆ!ˆ ÚÊÚZ|ÚÊÚ4ñOû ++ò  ò ßR ®÷®Dóÿÿ ++“ÖKP ã ++/Ìã ++“ ’` ã ++D—:½ º_-`ƒã ++*‡£ %.zÝÒ;àƒ« ++ƒ ++ °È[È°È[ŒbÀ â\È!°›Œ[ŒÓG4‹RÖ" °ÇU ßS. áWÀþ¾ ; ùà \óP MPGPD ‘ØÊè@PPê@P—(RèÚà@PÑêFVæÊâ@P81ñ:êR@ :ìÀ ++:"ì(G@FÌR ++Ã& E¼êþ9`RR¸ä¼R?æêļ0~¯+rM@PÒÌ*ü?ê@`ÆEê MðbRRxç;@nlpfiTÂäÚfdà;ç&¸kF8;Žj&Oýì ++ “å“åp“å°“åÀ“aÝì$ apa|#ùf3Ë@ XX. Ï~4jWIöÿÿú‹ § ,]=?€å0]4?à“*ßr±þ$Ž ÐBÐ c €å 0€€3€åmÙ xÒE± X CNRC LõCHY’D=á/®ž Ór¨?À ¸/´ü/,"p5 c+·( >Fý Àp9 . ;‹v†.uK|s"0¥Ž  oˆT0b à†å @h¤/X¤D dC” ”VÖ˜ôÅ/I˜“&/ ß·.N0€åN3ßLM3#ö˜ ,¶@¡Š´}nçEP.ßþ.Íþ</·þw©šì.eþ?$\”\&å\\/Õ\ /È\€O Ç)Ç) *} ÐO áN? —Ð/м¦¥$}w pp¸4ÈÈ <EHyr¸ŒP/ P /0“ /“ “ X´X Õ“ ,|n\6Z/1ÿ”#@ü/ ãT /½ û6/ýØÿl/UØÿp/ÙØÿ /Úûì.©@O©ûÿê<å<‹¾£:;š;’> ++Vn“% l“%QÄ;*WÈ=lgW /fn•% C—%ÌV¼U[ÆV?dÀV ;’³%`Ȥ ++sê Að;ªê025ˆ%—¡6`;°;–*AÈo@n¿Q #fp\TÀ;”ï&;l; rï&AX”*A»*A–*Aƒh;¨;˜_;áSg@ /h`E]Hë' Èë'´ë*¨ë˜ª²¨;š˜Š;œY~, ++ :líE /hdà ++@¤²^í* ;¦+0ª`;¨oEPš º5ôª. ++˜qX ++Fh<;ªe‡"iö‡¬‡?æêćM®‡¬‡ÿ8H‡ ‡¥$9p‡]æêĉ®‰—`;°ð;²ƒ€ƒ6¨-*¸¨ƒw!’0ê ‚?;´Ÿ/?ÚŸ>$ ++(·\2–©b8Gâ;œˆ±1˜~’ˆv0*v0 íiw ‡„å 0„å ª’ = ïtÙt5 ‚m lh;¨ ++P(‡‰&;¶Ì_Ÿ;œ8 r;¸Š f 65S:;¸a ++ºLª6( ˜&$>gªpB  ++##Dp áác3ù #¯ #/¥õ“ <p < <` <HS#/ 0}7 ¡q, t##1.ü"1ü" ‘¹‘ü"|P °aw ¥y°´™¦I ˜‰ T'Jÿ,+•ãp,@0šå " ZÞ*+âPs€ Š;º¸hn B<zn@Ò; ¨F,2;¼ò– F0.t¶W;Ê *ì97] ++†¾!;¾†¾ñ2x;Î;Â,í 0­‡ hPÀøIö*ör P@;À 4Ĩ:*(P_¢;Æ /uÈH  ++ª¢¿ @Äêè@ÎÞè@ë3Š¢<¿D-BÖÿ-;Ês/ ++0!Ò¢pê;Ì8J§;¸]g€]g®²#¬/?  Wg‡9R@èÂÒØ@PP™9R+èP++g*g ++?n`l*g ! ½:ðsÐêèÚàÆe˜;ŒhËö + ++X1µq +Òhf‹òiô@P;η?Œ ++H Ð{+“pAÌ;ÒœØæÁZ>ëž h4ÌgKÅg'dqìÄg ;ÒBpûEƒhAº;ÖÛ3Û3ã”\5óÿÿ\\5íÿÿ\\Pèÿÿ ++ùD†0°“å$‡ ›Dƒ˜¤Àþ°\á’)¼.!ÀÐ>Œð ++{4P Vá†(À(ƒ\Z@ 0 átÚÇW„ƒ>×Y&°>Dr*§VÊ£°§V ‡ZèH'àt’t ’t t8tÏQ<$<W#Èò#0H/@f–¶ -¿ wà2( ‹Õg3ÁŸ<Ë3PÀ ãw@  ãkä_^0*[{X Ð[ãwª 0—å Ç,kâtj% À#’ XG’ $J[ÀÀ=%0O0 áp% <à"Çþ/< ¶Ô¼¯¡@ÿÿêì4G^Ü:ŸŸP Ü(¸Ü  œ Ü$‡ìôßÑÊ¿6hS”@/)”@ôî°3 0ŠÂÇd7“(Z(P(~(x<aà—å5àžÈ‰SXSãf@Qȉ@"À¡@Ø1 MŸMŸR€å ã[,3°' ä¬.'T,3=°šôµ~ )q°†å@†åðÐ*† &† 0Ý(¶W" [P .y P" ÷š`»” š ” 4 žå¬¼O0’åe p`p d5¬ÿÿddÏ:`õáëSëSçœw_À°cT¸¸&î¸Ðtò®¬ „:Ž %L` {[ ÜŒ.… Ü,ÇTàO@†å™Üñœ œ/ œ • Ât—›T^PœúÒq “U2P ƒå’È 8L+¼—¹T; /±Èu¡ ‘ÜX“IØœØÈXñ¢XÜX²XSW^ãX" qé 0À™ /u‘1,@ÝQe?Sြ¤zÝQR<0â·ŒA ++ S<]¬¨ ¿.¨@¸Q ƒQ ƒ11ƒå@ƒå@È@TL m°’å’Q /Q  Q  —Ãä0M ìÅ M /0I  ++­ ¦¨Ò³QïÊA Ì.éÌ”‹ÿÿêw^ã@<­°“åÀ“å“x2x" Р/À3„ qà}ý Ì >ÀšÐ]p'gïXÏ°ƒåÀƒå@ƒå¥é1î€Ç„/phE+e³Ä?pšåíMð&þÿêfº5D ÈÄ/ôL0®0 :ÜÞ@ÚÂèÆÐÒÜΉÔÝLÒÜàêg ×ݼ„_ÊææÞä…FD(…e ;( …™Qj;äl„Æ„/hn ++jfrSè;â‰=/fl= hr CQâ@1Æ ÷* È÷äéq,æ,hÉxl;ê@j-ÞÈk€Š jo-è½S¾êµ@¬qn;ìRY2ÌÆÂ'vZ 2 /jfµ\¾ì¾xAp;îÆÆjä &jh¯ M*%;îqZÔG“ô  ;ðqQ t÷”÷&mQ÷Ž÷‡(ç à²U’å ’Øu€ h›[. )ä:dVV8Àåø1 \V5)°BÙ|B[ã[Û­1 Uh A[áO˜Q—å°—Þ‹èÀè@è (XÐ" °—-Ð \ p ++D&#LàD&Ÿ„å 0„å D& Û´¹j! P à á¢à0° ãô_0 ãŽG œ-l ô7 ++1)@’IôC¦1à44”4Œ¿¯ t”t?Nà8|'8“ f¾ÖO(RJÒØ›"åÞ€Êx;òp ++l€;ò ++P Ü#(©w»8+'OhE@ÚÞpÒðB;öSПÔuÔoÔ„0’å<àâ äú˜ÿ .` ”/Á” ¬õTP¤ì$¸P¸à« X XÐðî; Çf­ÁÐl ðX ¨5/i¨  ô„ÀB;ôP„˜ ;ö!Qz;ú†)Æ=)hÁ$ j\%ø†)I,$úw6;„ÄS~;ü½| ¬&hÏ6 &jl¥ ÷&K÷&üß$(ß$2äÒì(HzD ê;o|ƒH= ;þ€" ++";jD" /jnœHj;+þU=¨€B= øu-q. 5£dq€m£ ècrB;ö³*Eú=á1”¡P==(ÎŒX8h‚d já#Q\= ++9Æ:fu ß# ++@Œ *= ++9µ 9/æ 9%=e ++( ++(¹¹#¤ÐH+%hB¬üü†üxü¨`Ar=.Gß &l``@ËJNËb(bJË¡GË/=¡€„7Râ= ++Ø(m%ÈàÀàlx= ˜š ª6P= ++ ¥jBð=$7h> >6 4„è>/ ++@-µ50Qj;æul Pµl@P5€|°B=Œ†ŒV‘•xv=*BkÔÞ l“=S^=ƒ;fÄ /ldƒA‹:θø¼øÅÐ- ++¸r/  ' ++ 0dUl(~ Qb=-ƹ,j2. l¢t==î„;fà /lhmAm„¾ K #=] L°.Qd=°.Æd.jÕ lï +=°.LéšéYQh=Ó/Æ/j lˆ Ó/ FÓ/&=t ++Á  . (˜Bµ cAf= »YljŽ n» ++Fˆ ++ ± ¨‰ ++%= ‰ ++/1}ý?( ++XP/(eÃÛˆ?܆TÂ="b/A=y›`="8’ b/^=$b/<   ð "ÂæÃaZ¾˜]/BÕ¤€Tã7Y¤eqØr ÛÙøÈ°Ij#!ðƒ 1+X:Çݼl…#’¡žËÝ ÁUYtÊUÑ w/“ž¦d(±!pžå pâW8…"{‘ðÿÿ=pžå9¢ê[©%º ÿ{‡ã!ÀŽâpŒåãæ "OÀ‹åß±±õñÑ#¹¥ˆ€ÜA˜… ±l@Lµ¥ˆ€C šåÈÖé°! žå âRÁ ++"+4;P= žå9ð W¤º `+‚ã!p=²‡=²¥Ü-p‹!˜–êÁg,Â!0ž¹k© .° žå!à’åëâ·Û=½#àÎã!‚âàñÇÀ< =ã 0ÌÜu ×Û"àF¶Ø5!à“´”Ë \´/ ƒ¥È€`\ O2 Ý@ág2`g2èï  ô^½&0g2@ 8Q@~èÚæxÌxÅam%Sü.éþ¥.ØþH ++ *0À=&  ++{PCp = ð r4"£ùê!pŠc#7!"80@¼ ++³Ð  ++‡^ㆠ++·0l/ Ë"@ã‡KÇ€÷!PR14ÖF.â÷ »>Gg(–âSG ³Î" N4J4 J4Ôk@%G&0*3b²*0pa@  ++ ºò½È“N(«š0s4x_$óE øÃA‡Û‹r®/Þÿìl]=äÔÌ-è/@à ô]ñ à"š±ø)828¸8OBÿÿ ++0¥´ªá0¸b²S! iH_@Íð ×úáÃ'!—%ï%ð/{& Ú³ ”ãW''&)Ú'&×&$GW"Ä×&MÎ ++‡&‡&/% ¿"ƒåƒå¨p‡&"\"¬ ++—^ã4`“å£&,àS&ˆ–pôS&î\–\Üà­0–å –å–àÏH 0à6/`ë&•˜ë&bë&R` ++T ++ç7_ÌB’å pS&Ô¼p¤½sÅ&¬¼Ð1 lTlpO'ß$O'O'O'³‚¼+©+&O šå®ä-(O ++ ÷ )ˆ_µ¸.a ¸â\œ%ÅdŽœýœ ã *|›&d“%ÿÿê§^ã? # # Ü¿°ë'\" x ++/°h+Ñ ++h·';)°·'wøRpƒå°·'i·'ÿ .i ÿ 4!( ¢êç'0M0zó.Œq_ó.1€£. éx +•ÒX¡/É Xc/AXË/!Xc/™XË/yXc/ñXË/ÑXc/IX{Xj  bp“å“$Æì»CxP àå Ï?+Ѩ ì»S ?0žüä<pl)DpNål ,L pˆ€$d¤9/gï´mÔ>ä 7áT=ø~µ” ++ *Y\ ++…~¥”-ÿ1 0“¬$%ÿ1…ÿ1îò"àÃRçX/@Š¦ó.@@ïX@âl= ++l=w8;,À=´ óS1’Ç›4Ê&@„ÊÀ ++ ,‘À ++CT"@ˆÊ)¸‚*»T ˆ. ƒh ¤hS4x¸TLCáÏüʨ¸ .µÊ l=Ut¸.¸[‹T¸q¸ä1 “7"¸ ?àš¸ ++°*‰ "°2 ‘híÜ-nüC>Ó9 mƒå ƒ4+ ++L0B44&ÜàœhB ¼=”@à„â”"  /àÜ*ò$àά»è.ùèèˆè\o< Kl “å´AüHÛ"0jJÈà´+…´àë7¾J\/ Å@‹æë+¤? ã< +Daàšåpžk" Ì0WãÒs¡0¡1Sã> Ò3Wãsh"@¿Ó" (?$x¢üy$$P·Ó ÌDIç¡Qxìð ÌM˜Ä ++ÀJ  þ8CZòKdB)A!021ÄÌF,4E@È0 à+Ï ÁØ  Ðôa—Ùä8Ã!°34K 3€u 5°0ˆKô6:° xä0FöD20 XÏŠå(pŠå,àŠå0d ’Ý00t`£$šå(pšå,àS !p<Ï,4!ñ!Üp BÜpÜ9öJÜ; P-0žå)ì0à á¼DlPZÀo ++à× jøÕ× ë  . ä#îþ„x ×*Mxpàç”.”.¤þÐÏT´ ++*ï``òø =&XÂr=* è ÑÏ8°ÑÏ._ñ’› ³’¨ß 1pÃ.u" ƒWÖärB=(  %e#°•]p@šåã S[ã+ºö(†f ++o‡âžçRoš ¥¨®ö]<RoâGÆ lwØž ++âG¸Ø~ µ!:£àÐ@Îã ¾ö"›Y‚°€µ©ÎKSºÿÿêøˆÌ–Q‚°ZH°šå ‚àCàÄ@ ›åQ `/@†× läÌŠµ!C[ã,¤î3 ⩨°?0žçm_*0°«(O°ÎãêhóØÔEâ/yÔÐÔ´A ++;'`+p¢=(è'$ RÏ!=(¿(7( ++Ð*D ++=ÁY=*¹—28 H˜K±)R@·]0ìÊ@«² (,hWSðB˜K2y@=. 6N`üæ@Òæ@t˜EÅxB=, P ÓÓ)êÜÕÓÝSÜmT¯ÝÓ ++ÝÓø ààát0aâC1 á!àã23 á0Ãã@àñ+:ÑÓÉÓÉÓÞ9O©YÓŽªÒÉÓÂpÉÓÉÓaÒ… ýÏ]Ò³Ë +&j1 à”N(1à”îDh=Ô ƒ•Ó•Ó•Óóû=Ôþ&ÿ"_L=ÔEY¨½=ÔcK/S¨=Ô=m=Ô&j)T¬ t1@`GbUÔaÔ$P•Ñ#=,.,àsÔ ò*0X,'xjØ`O@=.MW=,8ÝûSê=&3x?ì=4™BÄÓAbhA l6a=6=2™BÄ=`­. r=Q>=0[Ì_Ä\bdrs /n`[̲<00S/ ÷B ¡72÷B$ {A =4†.ˆëBa=€=8ëBĘBb6B nßC+=6ëBS ++²8ëBa?î=:ëBÄBdBCB@B |;¼Ñx* =BXcèPÒðB=R Øó6?jèÞsHsHOšåìã6PbB=ZŠÝ0Ð Ø< Z|.Æ@¦%(Æ@9ƒT .T(îDö?îDfB"žCfBú$iéFAÿ.(Õ,ºD0¨ÒN;4D ++P·6o,=P—DˆA=HåAÄœA’Î n/~a=J=F9Ä;`J9 /nn\ AZFœ¹ ++9HáA)LJBÄ"}bÏ pÏJm}Km})=LªJS=Nœ ›Bbœ9 &nrœ æBKæB)=NæB,æB/0š5=P”k‘b8â=R =@=a?þ=V§AÄò@bU9 p9Na?Ú=T§AÄ:`6 /pb¡ ++@ T§A µ§A+Vùƒx=z=X ++×Cd¹ /pdÐ HªD%=XD' ++(åÞP#j=&,P,]B½ úí;:%%Ú½ -p%)+ ++(b>€$ \$ i6=Zè\èHèQð=^“BÄIBdƒ p¤ “BJ“B8^™NÝ-f?,™Bp€=`¢R_"H¥R^,¥R3P ++=bŸPŒv¢p(9š¢@=d¢œs+?Jœfœw+CúÚñhš–L©q%Iª©üæ“=x ¸ ,^6Ñ3ÜÊî?Ç#ìãø ++Ýjì¦! —ñÜQšåàž‡82ž3ÿ»!†Q#ã "0[ ˜v˜<¨" 0¿9" =ž *cl~?&$`ˆSˆPàŽâ(’>ÀààãŽâÔ ·3Šx(l0àƒàsÄ3š{?åÛ!jômƒ 8A& ++ÄÃÞ,@@†å0`f÷¤£©"`{åņ=0á `Vw=O`Šå4mo "ü?ç"44ˆ`§81çÿÿÒ>¼=ì?pšè ++.UèSìÿÿ ++K9BA0^´ºfÅ/0ŽÆû*†s!L0¦= [ÔåD'D_DD1,šxh+Mh`OH$< jБ # t €à$æü-àƒ^? “"é ï(@? ®‚oàšå%0Žùn;“"hd .±dTrŒ ++*TPOŠå,P¢ìU,,ø;!ˆXq0‘å ‘s#%±7 +++“ƒnPà")0>`0^¢Cªþ@"à˜ /,0 #*õD"àL@,0šåÿf ˆˆQˆ"´þˆ²‹!0à ãàXä_¦þÿ ++úu .–þÕƒD@ûÿÿ0rHà`îÀ ²]Z«5#j€D²B=l󵂀 ++ÆÞÞØ~é@&plB@F*þÏt6@²/²0Sƪ/àxB+úÖ2”å7Dµp³ruhÕTz5,0ƒâuúù¢X.-XÀ¶æ ]+³orSÚBÈD ÈpB=j ˆ Kó~wë#sP²W ++…þ3ÅþÇWåò3ömÐ"/›‘)&›áÙ P ++‡ ¾q ++$I1úž V:=jJºHIr=lb”øB=n Ð+ÆÆ>N>N¾E/m>N=wsjB=lI Fò=nu‡ ÀèB=v ˜ ŸÕdÞÌÌæÊètxúCþ.A»!I#ªS×!ƒ ++£C1H 7ùEOàå f- í1>C¡“å) â@‚ïcÁF'p p{­ ++YJ@Žâ]§«¦'€Ê)/0ÜÁd¸Ë±É¿0 ++"iK'¬Q¨B=t*ZP êàÈ”½ÆX×æì…D{éQ+1 àœ& Nïm ‘å ‘ž Bq.m0? Œý£/pHˆH&àipà—å 0œå¥ø­,8d¨ñeëw@ ÜHÉó·ðÇž<^°þÀÔ„à1*Åz(ÀØ„j 5 ŽãÙm Ùm´"”— +UsqŸjyE°Ò=Þ=p ØŸ Š»16 &ôŒ †$ Wp7cür  p ©"Û$úÝïQSᇤ=1Tã…1Sゾ¤q9&| ++ì ++@ƒátàb ++úgSRá$á$ØG#à“ñ$ßi¢&C Bà‘÷1@ŠåyðM$Ä5"ìú p/pÿª"@m "J)wÐLO ’)"ü’) è+ L" po›Š9%1WøZ § É$ô/?Wù ++Kl_ „å p÷ˆÌ&¿¬ÔO šå™’:4ðšåà@ êZôV' ~$X :=rúP@Q«rŒêT Â=t<RÒ=v7%š P â=xIR!=v³êB=xP q:=x€d¾¸»ß.›¹ »½ Ga›4N£   r rkÁhYØj(RXóQÂwz=x ++ #"Ò!¿Rˆ }X$†]@`8." ++K.PX0D˜fx=z ++ 4n%QÊ@(h| 6a»~!åÎ  X'u XçuzB=jH|+|ùR%Xg&À¶&…`÷  [‚ñ8&]:CPPx8_*Iƒp=ª=~$#Ìà9 ++bÂV &pjaHM¨T*vKÚôlh=€ ++¨ô ë&e ++èÀè g"E0R A‘0=‚/#¸ éædÚÂæÖ Á…5CPã^P’àŽâ<àŽâNâý.PQã=ëpòÈP²qÙvq$ ÆSOH"Nâ÷„,rÖð3 á ‡â ’ç ‚á0 4ƒçì+ÎTà~S> ݸ0Ë$ˆ.L1€ àâàÎã ++ˆP•à*gH á\Ž¸~"Ê@ ++àN¶ŽAã0†\øG3/á¯gH10 áx% “OT³`Rá÷ÿÿº:UõM/àŠê0 s~ ++$šåîæCRá~dW ÿÿ ¢šOvøëAÒ=‚Xƒe„ (ß"© 0Qg±ªp`+ÚSˆàŽâ@žçƒOƒ>‰2“û Aà_;c‚ààÂp4på­ !2*¡ˆË89 J/à‡=í”L ,à-v„·v¿% q 0àŽá@S§A †+‰dOšå±Œª”1R~B@7ª•#pq”Qd@R*=„! ++È—Àë 2ëx Câ=‚Š%¸B ß=Š ++ÆèäàÒr `#O 4=†’'Y'šY'ú½*=ˆ“ºÆl =ŒbÒAµ±+»!sÒHPÀB=Ž7TÀ ¡11à••‘•'Ü‘/H ++O0Nâ 7n3¿ 4 ++;à‘l^´k1)à‘$lh5bjÊœ¸Œš‹ 9=Žr.#y²“V`8{2² ++™/ ++p.z= ++XÙ^q b=П]S =”ì! ++чbk, #pn#QÖ=’‹ˆÄ<`?+ /pp# B#o£6º<¤¶¢$\ ++Ñah¨ %¸‘ˆ"L D; ++Vw6à·ÄÂá +$%Âá,ì,N k ²@¼W¼Qÿ:à“C3XR¢užuk€_o Âà/pòvü}7é7 Æà.pövôþ ÃB?€^Üœ—ôÞÊÛl|lvlT Rã5lHX¤ .õ'CP×AàH@G@à€R€2R€/ ž€`´º\WB/`T&îT½T,/ý"“ìÀ qq ô/éôCšåMC2%pODßCÛk†Ã ++œ/®®Ø & D'µ·! K1 ào@"·þ‰Ðšø -<‹@ÔK ++)å  ã 'U@sB +h/U"@#EÃIBt9"?å»x[G Ü#E0‚£Ë? *1ã,#(…/)þ( ãB( ®b/p¬Që† ¦bPQ°Dò1ˆ7Wwƒm ÏTQï†.´ýÐt­ýÿê|ª ++ØØbk hL+–L+v–L+PßmƒX?ú=š2 ++›jb˜9 p˜9c?Ü=˜×0;`p. /r`×0A0 ˜Sk¸Sk8š¸+°ö ¿/Ak@P5~á›%=Zéha?æ=žéhÄ£hd_ r²ld= =œ62;`ƒ /rd62A_œ_ Yi ¶YižC Jka?ä=¢JkÄþjdB Ç- JkLA ¢î¡P`?â=¤ólÄ5ld1 &rh ƒlNy3¤Ý2ƒh?è=¦H¦kd  jšFìk¦’Ç2ìkÝpsê=¨x±çª B=® ¨ PúžG ++n?& G ++1Páh¯5E¦&àÇ-‘4ë+QUU‹Ÿ‡å ‡å-…áží¤ “Û—4.¹-< §ÇFl$/¹Fl$¯`¨- 4jÖ{¶ÈB=¬  8íÞ00 áÊptr@“å4¬3åqÇ¥1 ©­O ‚àu·-'ÞDåR×~Ūá'á5 0Øl´OÚG e•¹IÄ DÕ¹êD¸È¦ Š%‹#Š%ÞDŸ/—„§ n„§¿Gr˜²=¬¡¥& ++ˆ-¤%H&¬‘(vp8ê=®Ú4:°PšTŠ=®{ "§`§LÐP®8z)X) u~!º=¨ ++0e¤Kp¡C4%NQ:=9pP¨8º à5 * 9p ++±Ep.ÂÑ°3@ Ep/1ª ++¿2“E*w-f¿ šå±ló0&Xó0 þÖu s ++:T ++îYoŽ ++$)/ á| .4ÖN(¼Ÿ ª ØD/0ŽÜJŽ—c)+ÞZOšå‰Õ‚^ 0 êÞ h² Hß !BWmAã-àœ00*pq’åp“P­-°‘“P ,$ $<ƒ!‘å â ++ ’å0ƒà†ßæ Ý)üÐÀ«#lHöŸª²Cz¨ã˜÷6² ++xœ'0¢ Ó"6p ºnöƒ ‘mLÚÈ+ ¯"0’[ó ?>ØÒæèZæÞäèN!B0BØp<ä÷=À € ÌÒÜÈZÐÞÚÊæž &‰ID&N bKq2“|† CøÜW'°WÓVÀ†å ž£_° á8‘2À†‹tTÀ'°Ö£`^ào(0oøª£ ãÜ­Ù ÿèê*±,†8+® ³pÎl† ¨©©)0•QO šåžá‚ ++?$ìÞÒÈIR`´  ++  ï!kutRàå@à` ÿ!Q)ú"ó1¼,°p R]û°y¶Opšå. |ï-Zv®rƒå ƒå¼Žã!À€âàŒc4(íuÂÑGæ\š(iªž* Š(€B:C†å pöVÆ(1à†›7×à†å!°†å%À†åHÀ£?-*æ ÀРBB/ BBÂ^  ++=´² °¶  ++ P?(  é´–@ *Î 1žŠ6b ++Ú Z8 (4~—R à”å× œ*uÓšÎ7iWÇRU_!0“Æ! VOZ!X-! ++L-ž#Rî!%Ï ++ ö!"0ˆ2ÅVBƒâDØ B"IƒS^ÜQÓ5WS àžåJ8¶Or:1) Žî!Œv Ï®†8 «ý{¤ íð–ð0*šP ü-ÞOp/àjY©r½@E+‘ž6u .–VbzP7º0&àBÝ2`øB=t8ò=¶ ++@¥*CÊ=¶Š Rd 4¸D)òp?2 ÆØÊÂäZæÊÊÜB&*–E!à—„<~CàÎã0— 9y!0‹0U ++ó ¥ ±K³4 ++ê¶*¨Cz=¸DƒT—¾  P=ºÎàA€Xâ“/1^ãY4žHz€™Ž oz wŸ —å!°—å%kÕŸ&p-ø=£Sà†åo. kÚ &Ú ?Ïÿÿ$fÉÿÿ)àU§E[ J8[Šá1#ìUÑ" ++ _=¥+¶Ý\7QãŸÕ¨–‘¥W%*†††b¿ë.)^%ðÂäÀÔÖ:° ©¤1:X 4‚ƒ P¨$pPô=¼  0 èäòZÌ›M$4|å ++iÍe\YÄè8dy ++t +}tÉ hI&¤(/ ‚”|8€¨tù|1à—t 0h;6 ++¤™E  ":@  %áò—d`Ä9 —å —hŒ/ „¸åÔ6ÒH’ø ++=¼°Btò=¼ ++@|!¬­¾® *(ã& 0B  8p=´ø j+# Bg¿d¶ , ++ Ý·Z[¬´8"=ÀxO·Îrj=À ++8Lˆ¶' ++09.X "=‡'[áó=à P ,ÈÞZæàÒSX7|‚"c]}WÀ á $ ++XÕîÙ N¡Ð1‚KVs 0‚åÀ‚l‚‚%iy<:`Š(<2Ž²k!Ž1 Ž_±¬ŠŽuo^•Œâpžç!à—K"ýºÒ’CUf> ‡œ½ F$0‹å]•¥F$Ò 3%àž\û]ÀAb\?Šå(Ü¢üµ((Ï#À9bpÅe—/:$È YÑ  ½¤7O‹å¶õâ,, " *Í"v{ñÙ59<$­e$ l1àžçd,à,ßø/ € ÅÑ}øÏoZDŸX N¬‚$H žå~&XÆ ++*v"àˆ [ŒM}dØ9áØ9ÚØ9 ”/à .ݳ ¯ý>"—TH ·©lCÞÃTAõ;5T1Z ñöÛ}úwjÈ*C@ á(^ ‹h k9®n ++ Q-Ï ++ÈRŽ<65 à’ŒJ 7„´Ÿ®’6 v ++ ·ò& €% —²^Å3›´Â 5š &d [¼E¾ &H¨/‰¨;¯pDÊÿÿ ++ â¤"@ÆAƒ~è &/-‹~`QÁÿÿ ++ÏhKqO ã0h'…XP4LH ˆ.͈œr?—à6 /žå˜/˜®/ ŠHeHQLLÆE;}…Ú , dä‘ÌöÛ›ää\. ^‘P ®ÇR¡h! †¦‹x.&Š@5*r*Š" à{ˆoÞ$M ù+ùà*Š?“åØK ¸*A¸Ä’‹q yx*ŠÄö§€P ”ÀJšÒB=Øn8D˜1DÈõû  ÖÖ°Ê!ƒZž//02! “¶ ÎÎ\-0“Š;­mŠ À ß¾,RRã¾Q8R/p:?XT ¥TÕ.;{$ƒÿ`¸)&~™EÖ ±½ê–5iJ¬H÷_€Ð  8 î& ‡F‡C á`p³¡@¨ ++H·@¤Àª!0žå;â°C…Wžª!ûºû¡@à‚à[ª' ·/0kÌm-O9n·ì¢`Ëû$h$êrB¿ t8Ô" °|¬| âx" pM>/°Å YOÍxDi?°šåŒá. / êïÁ·” $ 08/ƒà˜é £L.L&àPA×p2B=ÄÙN€H=Ê ÂÆ:Ä o" ¡93 &g; QI• u@<š¢¤# [¥ g Àç¡Ô(9ØçŸ&#6Ä ++(á SÈ ðÞN‚ÌÞäZÊÂÆÐ×Ë1×Õ9à~Ú) ++ ôïÖ#Ø~ ©AäíM€=Æ  ¸§ @Wre1Àšh_rŒ_rT¬;£q``ÎãR•@º\%‡âÚà‡àLà BàÙÀÊsq:$wq‰âTYñ0*L#NàƒÅurð#°2 Óp!ÀŠry f@ËH+õŒ°6 % šä@`šåE"âUâJ x² q¦:|ºn-LR3Rá)hªWB áÀxt=p¥ãœ|×"Àlh@p‡â! PÄT/5T×À  ++† ++ yä€6*‡à;QqL1 á àD“0#à0 àS K@(+s0âSã[PJP Ú:"àFS€â®ºBnuLš /EPØ ðLú=Ư^1(hYâú=ÆàÚ=Æp#‚%@G0@ 3!h ¢8¶ÇGÈ‹h–Ì =ÊËKË·!àŽ0üœ®[ï ï ï™ï ïh)ï./ ++ðIj=Ìð&`B”©hB=Î À”q””0”“” ++_”JƒŽ)+¼pŠ)‹×%! ‹•‘40Üx  ÷@°Ð$®*/½­ª(š,F,'¸8ÅL3g’=Î ++0>6KÈ8²=ÐÓÒÓP?5Cá;(«@àŽâÛ§/}§Oý / ý ų¾³Òz²O*=Ò²% ++((ÔÿBÔpoq J=ÐH ±ê=Ö8º=ØÖ5Ö@bzØ”1s8Ú=Úêu%7ÚÓOñÐÒÈB=Ð8 ¢=ÚäPVØ8 *6¨ r x™2 " X ² hÝuÖ âEÉqX)& ++àHèV2Ü"a FPÜ8¾"HB š á2  ++¿M& ++€9/XÐ=Þ´¥&Ü °' ++(àp ²=àˆ#¨(4w¢=àØæ=x’H ++ø="(^â=৥ñpB?  Ð "ÈÞó{ˆZÂÜÂØòæÒÓ“¹RÓ6¿žœ‹=°ž/„6ÐîÒ/)Q‘pÞÒ/ %" Œ 4JÿòÿÿàåàŽã0€3&í/ O^Á{ Lp´%æ-`/ qû]\ÅÕbè±)ð #'šï& ++r?1ª3±)Ç ‰€„uý@ZÍãøƒî  ++Sè “7g1à-)fWºÇ_6"P?g5i£ ++{a¿!6›I ++VžÿÕ)É Îã­-õ& ñ 1!“¦ˆ—‚µß DHrÍ?Žãù£ý&I.ѱë|.]A.Ç ++èæ/Úÿ#bÁdý ¬¬Oö ++,',*U,0,)0… øN0šå‘*ø!0‹ô_ ãvïX*X×¢øÇDG°¾ËM"¯8A/!‡j =à”9 9¿j÷j æSxŒ(–?ŽãŒ*…Œm#ÃR@íþÿêýÃm¿hg-(šåU$?Š,Š DŠ¨4š/ €ÄÄ"0‘°Á°Z‘#0…ÀŠˆÀ€×5 àŠ\& dÇF›š9ø"!D/ª° ¬‚¬*¬@@(ä?Žã@*Ó@]”­”0.´æŒfÐ" àÛ$1!žES#áã°Id…3¨„ ++8L%@žÃlBN¥RÏm` *y`p,M 3Qá2‹÷ƒTpÍT[ƒ”yd§ T 3#Tb ++à*—l ++î‹Ð1!“|ˆ" e>” ,¥Ø‹XHpp> D! ê^F_/à 6*) @"@èjÎNa ++è* ?"½³X$áóµ6i5É .¥ ŒâÅBh+é hß<lÖã"¤X“#À­M6*Ó *M ++¨ 63¨•*@ÕÞÔESo¶¼4$žåÕjC>0|<@D‘°D! 0‡AÀ: ¼W$²v0z›q †å†×om`å8u–å `–ïoeÜŶ=§x9¹µ ++¹÷"^áH ’¥?Žãɵ–Á2.ž" y7 "iûWa.}Ö¨¼0”0w”ƒ”h””D”/” ¸ošåtEt”O!’å .‘ A ,/å A P ×+ ³å4?ƒåŸ$b$?‚åq8*í;8s4ÿÿêê‚0Áð6àB=ð  ++?À àäÞàÂÎJp!«"ë$S"ím"Ü‘X%¡ +iù%@(|uIi , ++,H,A¡0 á$Y9 ++ w5ŸF±!ÉÉ{)‰T&=¼! Á¢D Á 4/o4h5ºÛ¢X^ãCàñš aFKà“å 7² ½0.¹ P5Õz.Ïz.LgLaLÅF5 XQX‰;7¹ *õ¡ £µ.Í D°î8DÔ. ÔIA• I\3UvBdô0 78[›ÿÿ ++e~'Á@öÿÿ ++"]© n¼á"à{)a/ 0ˆ^*)ˆ^at×a ga Í ¬ [´-ÈU¨î; @a = X-l Ñ!0’ l¢1p( [¼Q°_pãp/$ Ò=*™Ò=p#$ ÑX8p"øþpÞ1´t° k´°R áåþ¬¨ nôA¨¤Ý^pÐÏÐÈÐäj{1Ï©ØõT.]T4™«¢è€ HÉÇæÕRäÕmù Èè¼D ๠¨.m ¤ª  9­œàà’H´&_ ã’ÿpC/9 ++p3/ ++p`p ݤNp/ p"p p6pD/© p3/ñ pp .M ¤/òþp/ p‹è~2HéO&ÚDl, Ô ƒyd .) Ü»eÆ.ÌÌ­uÌ.õ ÌÌ«Ä ++n¸Q¤™ Ä.‘ÄPm!!!!Ll.Õl.ü ³ üÿêƪB„D(PXIÑXâ`ò`B=è Ø?L ÖwT{…&©t ,W-x'=Â! M0'…'/†;„&i\ Y"âV¥?3È âB=æ +ðär XÇ‘9D0Á/0‘5Dn™h™? à‘xð´ötS÷† Ï5à‘å¬À! ‘1[0-6"šú/pX.5·/­AL L©h .}øÝxú&s6£ý© éy"@ÿ_­ ¦Õ tOp‡Pd‘å0‘å Ó>‡dÎ']wÔïõ 5àÆ P›Iw?  ++)Ew?ÏJ"‡å×?“×?ùŒ xõìù(è-‚e ?ÌäðÖ@*¨4%@Š÷O|; ½ë¡%@š'аŠã4/4yéCŒdû‘ >‘å~š10õ_éP9‡P/ µ/% x ¸²LÙiÕ"@¼h9YìÍ„2Mÿÿ„ m  Íà÷˜ Ü–=m š&ƒQ*I ++Ñ š& m ÉC@ ád^ °¬ Ô E¤  "%é œß àÙþÿêjrÒ°7Fêl&9Yc ¥(B=ä èvH+ ++…£zHéc››·p·¿.­·"·Ï T9 ++l1/lï ®Z ++ïçÏÏ¥4ŸÏóP9P3P jI xO €_£ .™« ë ãÉGßg/Ç ß´¡# ]­1Cß–C‹Ìo ‡½¨† ic/ùà! šÎZ§²D£%µ uŸÒ£/ ½ÐO`£+£¬ T“Ȭ¤/ \.] £¤i«¡êþÿê>J.r†â+’0Uì"àÖQ6`9¬cRfA ++pªj9V9D  DôM•{'1LSÚRc/Lw'DÑ `¿gE9I $·¸®ZSK¸áÓ*‰5Ây/™1Â}P. ž± Uy€çr/€ jpRÒˆ6-dF9Ø`× §]qJ=âx$µêÖŒAr=ä«=ñJ=ä`)& p<%=â0)ª<))ÀZ ÒˆZ># ++0 > ’0H$ ++8ßd?Sê=æÉ< ÐB$!` HTFG¹ RB_= !€¶Op@ !&@q#r=æpy2 %bP ÆM¬Ð )ª*+üá?æ`Ámè (;&PHB=ê o…“CæÂÚʘ›TbMl@Sáxtˆd¹)òN+ ++\EäD† `QNo#08D¸tæw1N‰Ôg" :% ew“å ’åÚL›P•< å\Ø=ìþ R‘A"LÕYâ=êdP˜B=ìûMX,vFŽF3¸œ(å*Ô7åô> ++$Û;•D¬FÚºÚº Fc*Éã½ ÕöB(HGšåº®&‘ bj=ì?5î ++ Ø@‘HìÇp²~r!˜YxwP è ÿVª=ðS Xj=ðˆA6 ²ƒ J˜0 šfrÜÊðèSBäà ++4T ¬\\i@ E+ /X+ ++â ÌÞäƸ-pZÒÜB6 3< Lâ-'p?Bäʵ~OZìÂäLëW?=öòQ¿ÈÒÌÌÊäÊÜè~" êOø=úê°=ü¦4’X/Úê}6=þOpPB?ÇÐL¯,/à2•®" K9s*Ý " 0 &ð7U° |,.Y|š àŸMaQÒ?3J,vYÊ?z VPB? &È-q)9ØIT 5Êa8ñHP!I#9Š0#¬2R ;bKhµ!=ÒŠHÔ¡1x"EC&8 ÁN&G‚axì0Kn( M:>ÈøÛk×µg%SògÔ )?E Qú?xNîœ z/8«}P`o2{Pð`²„ z"‚o4 ¨ ð„2ØÞà# F<n¹@à„å¹züY„óR=_XårB? @ $q–ZÒÜèÊäÜÂØùká1X" ™ ++ßÔÁ ¿7÷&?p—d< +++}n06`l6 úL |ÉÉL öš  dDu‘ R—å\È´@v“sò! 1î"@t Ž I\9‘_ÀE/%*à%hÕh?  áˆ  1R ò Ùu „|(|.9|߯&”ëI/ƒ.}´\,ÿ%îK>ëP&7žÌ%7ž°!Œ¬@vP7ú„O#7æ‘8Œ@?îÖº78 8w ÚæÊÆÞÜÈ@ÞàÊäÂÜž 7!œu 78 67_ÌÒäæè6 fX?ŽTü ² ++þÿÿÿ“ù>ùý¿aïÿÿø‹ûQB?– :b `äÈZÒÜæˆ!ÞäA´0äÚÂ1 ƒ›S-0åYca­Ü1 v'üA!†v-%žaž~ ƒm?0ƒ™V; Ò‘•VEÞ&"º`³¤ •l?™ú-÷e91 ++"¥ ++ ’3šH "ˆ½£ã2¯AŸ $(@Tá f?—å)ÚH"wq589PTØ].ý9e}›| ´¦ž" @Ä150Ž ž@ £.H*Iuž fµ ++aþ$ºIí¹µ”ì"@´c" 099VN0ƒàPÖrÑlrØ4ZË!°"”ô{? v;WFHL/ñ_/eÃ/=+¸*¸ž¼@Ýþÿêp.­¸dÀä ++1 @ž/MŒ™Œ * ++& pR@ Z ]=i …ú ++TÑT‘Z?@š¬Ú0" @"? 0Ž´Ú'DÜ ÀÀ À ,Ñ€ÒD\\í -æM\%7 N /qôO@Šå„5|)žî ++´ºM Ù¬þ ðD.D ˜)~#vN0‹åwT*(o °&öþ0iè*@0"ÑýìÝå91à á€­à4IrH$ álø/] €|ÛPl©L8{,M©Ge‚šå@žåtý</94.© ++Œ=4"[ýÃ…­Ô üpŽ%ª ++$Ž4ß‚¶· A@â0AœBâ0Ž%ªY ¬ä ++òvÒy ÆØÞæêäÊ$ÆÊÈÞôÈÌlêâèÚÆÔÔèZd8@?4°C>° ¸I9&PDÀ]' ++(Q@Q&0 Ž`8B? c§§Ð ÎÊèZÜÂÚa3a+¥ qX1ÁKÿ¾€ .f ?ú“ H@h_`Í`Õ¿Î9 6’O|Uv²? ++ +'8^ŽC0?xx²±«¨W‚/ ++Ø¥-h£+j?@ê±Ö WdZ_{¢? ++0_ƒ ˆ "˜’„äÊÎÒæèÊ䆎PTãj“?0ÜG_¿Ã"P“9 îÄQ!Dàžå}i^ jë î/ßÃê†$P“t ++6#:¼’ "ðÛb +: & ˆ’k: @I@6›*qN@›ñžµNÆ08•"”«z½½†µ;; *½;;WC¬ûzr’å ’H0ãB* ;BL$e!N0„à1¡„FF6@ d¨ ++ä/à².¡5€äk<+í_Cg<ä äè1Ž Ô`–i‰Ø Øùn$þ*È_XAYvQàƒâ$¨^b ++M'“ ‚â’罂ŒM  * 2 V_žç ¿x [è]ïF Ncø›ûH#à‡æ2"‡å‡3à‡™„‡* ¶s/àðù䮼™ÐyÛÜÀ .aÒäþ«?ʣ  ­·+.¡þœ.šþ¯4Jºg/„g-;jæ J? ++éï ++êìÂäZîÊÒÎÐèIßàÒÆÖZìÒÆèÒÚæã50þ”/ ÿ ÆÞÚàêèÊZÈÊÎäÊÊæ(?'|± ‘ØÂÚÄÈÂzò?F ìÂäìÊÆ?HêÜ a!66! ¸}–}–]P=à‘å9”2óàCà=0å9 å0Bà–ª–²7¹8P ¶P°B?9)&Ð ßâVÆÞêÜè=)>®¼Ž–2ç ÷³hÃÈŸ,® éÙ'}Ù'ÜÀàåò•i)Û®;µ_ hE@„àQ)™ ‘‹0 3ï Âôࢽ/ áw ++0w +++qw ++0¢6: ++س² A ++?Ÿ( ++K(Fú?Z)?i/pB(  ++ 0/ºÝ(?–"PHB?3m>  èJÃ-™ò1à•2àGtŒ–"‹ t t tñÎP îG½A¬/A¬ÂNu@¢BCF 1ªŒ â€n00žç^‘F!1 Q7Žâ1YÙ1 ý^ C¬@^o2?yrÁy m ++$×5 ÚÄ|/ú}7ãmŠwn)à?8B?P`ø__SEK+”0cV? ++ $=Dš?j$PB?1`?8Ò ¥˜B? ò-TÈ 0& ucñ Rñ " 0Q_‘ D„ÑŸú f/7{÷ 7{÷u„Îp,& SœQWE¸®‰!™ ¢q" ‘åß1ß00‘册1&R‰ëñ 0’å ’å!p’åpâW6Æð =på9°åpKà=°’å9À’å °Là[=YÊ„&11p’›Â@éÿÿÚ9#cn.0"6t5Ub½aÈ€5]b∟4T¯ÂQ ++qX&Mí7? *Ußä¯ wBÄŸå!3„åUY9!Z\!.±è›ô-¤(Ð9Q á @žÁhT/àŠ™ ++9@€Ñ Ê™ `X mXÓ  O·K>ì9¤%M^ðS=ì¡ìý¨ C>ý˜Uj" á>„D˜– œ8ù> 'A/½b(¸HÉHãö |ý4¤^0? .9äœã <.Âþ]["µþÀR *½ Ñ@J*¯0p ¬ç3 ~¹1åë„^H Õ¢äH5tXâ? ˆ°xs? P’a †,"ð $ ½-Bþ ÿKžNž\%`BD ?"P¦…D "D Â? ¸ zûÓ&:‡ž'Ø ½Éw'17— }&,w¼ *ú^¥gÚÊù ¯o‡å 0‡z¥w¼7ñ;k€  ++?$·¢ ?&̦¸à¤_à¤T¯Ÿठ2à¤,à¤D °—åR§ Š.°Ä¤_À†å0°¤ì°¤ܬÇè°¤ÙÀ, °¤Š°¤!?&ù’.  ?(„¡ÍQ›* {‰2Nâ9gºHJ?Q—å0“á)8ë qƒâ “矵nw‹/áè»OÞÖÕ཭½àLÈL2Õ!À?“ç2 0’YTä/‘ä¥$3—³)?Žãz *Q8î;…HQ.méÎä U&2B?ž/`/?,5ì!/"n7 c4ÁŽˆ6!,}c bäÊØÂèÊŠ.kg&¬ä *ÿ‘&Ð ˆ ++p ++]©¿/ ‡–P–<ƒ„ ÿÔ0 C ±q …=ß! ‹ðŽ©KÖ™Å= þ=ߨ© ++Ù© ++]߉6r.¹;À , ++ˆÅ6¶ RÊ?*ƒ /0¹-7?,‘Xø÷S?. ++#1,l¡UÊÈ@êÜv¡ ++1!?0T1«›¨!?4›¨??2Ž¨¼$?4Ž¨­B?8  ðŽ¨‡Ž¨MŽ¨ —å°—å =v¨" S ^¨Û^¨Õ^¨8Â^¨D¼^¨|/ù^¨k/y—O‚d^¨D"^¨&^¨?6  P ^¨>äÊÎh`hMt‚ ++íF½bu ++µ‡/‰u ++(k¨k¨ ”…3¨üX_Jç§ ˆY·(™” I™Ñbêï§@"?6HD?* ++ â§$?8ÁFJ?6â§&?6â§`?&ø +++ Bæ â§/ ++ â§}&±ú?:8 B? =4:@þ#? C¸ô@8%P š+C)<Ï·yÏ·•+Ï·)?<Ï·8Ï·H>?>Ä·ÉK`Š?  =  ª5?(ÅEX ++?„~%ÚºŠ rÃ)ÿ€B?@ %È 0ÈÞZêÜ+ªpÚ€ LTãR­]Hß LG*§#=§§ úË-, :í›)® ¢`RãX ++ÎÖ =ã"ºð¨Nð¨a€â`€á.è™0O‹åá3ËFrЬà²/ c(…“)zÐpv@ šåü“BÎ/Öð / ‚FÏ*Â)®O}(2à’s(l•ŽÚ ++÷….DX©GQáA¤©°‚â°›çЫÀÐ\—q `‹âà†ýæÄO`‹åßÄ J áÄÀ Y5Ýà(+MJmpÄ! š¥5#+!š6Øc)¾Ú /W  ÐCÐDTD9DD„%(«DDvõD</ â [|Á/*4˜•4/ód#ß] 2à“ôfÝTµi"lp ŽâR ++¤ ò/çp´ç´àäSp  pNnV\ /5tƒCvVÄàƒà‰|$u|!àÎíœã,(ã,Wƒ($®‚³€ã,…ƒâ‘ç¨ß O)šÐã, àL/žçD [ mD®&ô£ ¬ŠZ lÙl¶?“åŽZ À.-Tþ2D/mD–Uop,,.µþ/¢þ,6~.#þT.Ìý¼.²ý£ ++Kd²û’OP"?@1ä8ިNJ)3/"M_ ;È9-L?“-vMq ++@D@Ìô-*aUæZ|êæÍ ++ù- (-,VèÂèÒÆ& , …X±¹l?²8._ZÐÒÜèÀõ?vÖÌì?tÖ—Ç?F=øAúÖ®•?H;õ.9i <5/(È…–@ñ ²mb–<×F š#h# #(M$‚³ SJHψ²œ*. û© "7adPdz%±K\šÏW° ³¬à[O ‹åÙO˳ ˜à[1-©šAl¹lO0šåŸh˜h-gOH\j˜RŠ?J¿q8j?@ÖPJ8ò ¨ B?d  8æ.ÑËœ‹°Ôà'0à$0à/ ¸( ö" G@j||ì„Ü#M·œ±AXàh˜€15 “ûnûk@’å&‹|É|]–<¯AMpÈ‘»˜0( ût]ÿÿê*šTÙ6€X{s4g ?RVB¸?L>" Z PT î ++™KäD7 ++A;JaQVSã—ré„,úk#oô §ECRái­! žÕ"AŽ´µ*à̃/ p|ÿekp͇PPP"ÇJœcäw \Ô! œ-¯r+ÉÔ/,䞧ŒM‰š(.E(.•†Ì4f @{ªTe •8@áH,,RÙ .è…Nc0ÊŸ¸h5¸h/¸hÈP ™¸-xH H /ÙH#.HlHg?Íÿÿ*£H¡À-ˆëHL/ á˜/õ˜#-‰;©½¾? Li uHΜ๜.œ|}X'¼10ÿûE· .K !ž¬2/0|YÀ¶'0î ¸‘¾þÿêØSã:{ž¼h ·þíª!¸ 0l/à°+=°à°Ù9° .y°’”¶ù¹|"zp.T˜Sã'·´!žz0 É:]Õ/0Gð!J"0,˜L· .eògpWþÿêXSx\œè Q ±¯r¬ mŽ@Ðýÿê0á0. œ+œ!š,ä°¾ U@ºM“u³ýÿêzúÇ  ö0?P6U/P ݘ @ å'9 šX# q,’ Ü7ª¸°G«¤X5_9²  ¡=$²„6j|¨ °G æX#ßBB?N p‡<dýQaoO­ã®ì uü!O­. õ#h¸ñíªÜ( 9ªý9ªP CÊÊ "/©4œU•¸jµ,ر û"Dj?NÄ1Q‚?P&"4N@zª*?P2ª(RE$TòØ®¼4tø 4t:m¿<¥×¿<ê0t8è%0‘› øa+’¼ô_-³ðpôÜÈ./Üà—¨péL-/ñLμ&=eV  ø°pQôQô'ã7$1û4$-$'ã‘2 #O3‘O3 £2.0Æ K§ UÞ(mô QÞ è-|ézÂQL^ãc¶Õ€¤m$!P-’Ö’’$$’$ $S—Aì $4$ $’-’'7å ++¸“¸“”©–*%ö ¸ ¹Åä·05jª6 ++·$ 8ÀØ,(²d~jPb?T¾%?Vx3?V%S?T×'8”'4ú?â%t:(TP8 Ò¼X£Pf$ó À $ Æ/0[B$0PlÆ ·B\Ù\Õ2 Ò°ÆBXB#=®ZTÊ?Xu B?R0I@ˆÒFù ?Zö.Ð …| ++à ++T ++" ðX ++©T˜À>K^&—A ++0‘718«~Ï .¥,·1&·1[ -Mt .ð [ p S ¸ ++ñ«1`$¡) $ ($ /=OÞ·\.Ý~vWP ‡Pÿÿê"p ++°3! ++0Ö€$Û2KT Ò?ZK J³5^ ¨ sGŽ ö SO#ýÂ"àŠEĨ#âÄ æ[¢ö|Õ¢™Zg¦É ++ŠB?\ ÈS·r»¥¼KdnLi3‰Oª­¼/ 0 +¥#yt Ê ';¯:? —t–³6TÑ® »©ê»Ÿd˜»"3`vêF?\ ++0û,'€"¸ù¾‚Â?^8Ê(pPxB?Z8Z!pB+$+PX8r Xíl"8>"ú­>sz?R ++[mo;yÓ° Hm ŠO˜ª!šP â `•@`#ÚP0B?b<0Bè?`-#K(—9ø “ &!ŠÊü $ PCü  Wâx @ü Í!²/GðoÏ º ++Eb` Ew0;S8 #%Â\üO!5|l bêôÏux/ ++`èìVvT :?d‡ ÊÅ d !r!ã & ++($#  ¶0ðEF " *ÜàZÂØØÞÆ ++t~ZÜÜS@^ãÌN9¹D@Q’å ’H /­\LŠ0!à€Á1 à€V-Qà€åÿZ€åà—åà€åà—åà€åà—åà€å#à—å#à€å'à—å'à€å+à—å+à€å/à—å/à€å3à—å3à€å7à—å7à€å;à—å;à€å?à—å?à€åCà—åCà€åGà—åGà€e€!ea= ’›ºkŠ+@Dý0„ÿ# * ®®”–W®QLÖGu689„,”'àa­@œœ, ÁîõD” @‹i NpJþ0 HÍíWô ++ Ñô ++O@šå¹T ++²~Ž~L™D /QG0 šåi¥2 `º2ÂBEB "cû PD^ã°!é\q@’åà’Ó&"­[= ’Êájó˜G¨ÜTI^)l ‚âØ $N¿e7 0´4ÀsàŒå0ŒÎ.dŒå° ã¡q=@ŠÈžÈCÀ†åtÁ[ $$°$.°õG‚!7# „(„Ht°€Œ(Œ(Se:Y\tQ0(V„ÿBà‚å<Ñ‚å À‚å@‚å°‚ú21à‚ø1à‚ø1à‚ø1#à‚ø1'à‚ø1+à‚l`l6¦ ¦ #ÏGЮ œ†œ†d1à†Œ$1#à†¬1'à†”1+à†´1/à†´33à†œ†\1;à†Ä?0šåCa†åK†ÔO…]SþæqWà†å[0†F4® ã á X< *.ÃÄ£”…_¾wi5[25"Eÿ°8Ql00ƒâø _:ÿÿ ++ú¬€/1€/üþ€/O,¸E/x¬}§{JžERL?j7$N7ð@?f ¤‚àÂææri%?f£,8?hgA‚ L¿E%¨-?h L L1š 1ZàäÕw .!^+?j]- Løñ ++ÚÂðZÌì`.=úÏ- ++Æ-­ ++f "ù|_Ò ++ù|‚ ª ++ÎbdbfOý lÍ1?l™ ./ ¥~³  äÞÎäÂÚZ| ‰ !bjÈLlÜ©1P¦n!/Œã/XRonZª,\/Ö73"\/ ö¨=ÞB  @ØÒD@Á@1ÀžhØhHª8üCÌMê9ê§ê9 44”44'444#4´C`‹å4+4[4`áP†ËHJü( ñ,9éô4¬Ä0쌢gB0ä,À,u3áп ®èŠwdQðD ++ ‚RÖÐB?p ,( w&¾[k¶‹[ø ¥ ++Wà—åS0—å[ —åàŽààŽàE9!ê1:M<UÙ=@’åB;Q<øP-Œ_øP½àâÀƒàŒ_,_ââiôkž]¸ŒjÌ{+Y)Äd~¯)Åá:è‚è,‰=è? ƒànž,xzWˆ3PáNT­=[5 €àÐÐo Šâp—w) ++*)‡'ÐÐ}„â ;á2à‚ÈÄ >€âÌ8°S&ŸØ/C  ãSÔML8L"W‚ÝWŽà;;™@8~žçÀâœÈ€âƒà€ ¡=9×Ù R!/ 0¼S/IHO šå³Ui÷ ÷ -0‚SW !à õÙ ++$I»Y- 9„;‚‚ ‚åôQà‚åW3‚凇‡‡#‡'‚û 13à‚ë 7Ç;Ç?ÇCÇGÇ1Kà‚;bOà‚åS0 ñWà‚åKà—å[à‚åOà—å_à‚#)# ×À@¢¢|/Ýþ|"Ìþés sD+Uˆ00†<s@0 ájps/p3.ùcLJP.Cþk—BÂê ++(@pf‡FphІ- ++èR† ?p ++h ++aP š=4 T EÈÞS,#f(_ALX/?FX ?=ø ++H£AHæîÂày r”/'hç ++Ï hÏ n&j& p&l& r&n&Bn```&p& @b ++7 Or& C2 ?ß?t?vÖäÊÎ{l#6?x¼ $`.’0?pkg†z ` Õsxî¤:´îdb­?§.ÅH!ÉH ,`4P'-dÈ* q!à“õ¶(úEW ƒå„8…>0Žçô x¬Q´(ì.õ/žå¤ѤÌÔ¯me6&òÈR< ++‚â ƒäïñ¿ÃC0‚ç¸R0Üd|4 e.i˜ôÙåd\/àøÁXüÓ£>ÜÜØx.A€yÔàI"‘P×rE@D/Õ€eXh .)TþiÐ6š êæÊØÊææ@ж8?z x¿‘tªçà( @êÜÒÜÒèÒÂØ#Pr?zÀOLÂ#=*ÓpØÎX ê€xBL8 šK¨ !h : ÀSÂ?zY* j EÛp|@3ؽTù5•?KÁ<í©z.ué&ŠxÖp  ù ]!8„QWE';¢ UØAµ…® ÚÁtˆ ÐXä0ˆ0&4| ++˜ ,± ÂÙPMYY .…W>½"5½"&fÁ1W0ž²+’l ŒNãË‚­µÙ>jK9 ¤Ÿ+µo `ú7 0û”sX?GpžÇ ++ b*[ÜSÜ/ÜÜ?/‘ÜYàíàÁàžåú^ãAÚð"W[ZZ FZ—Aà†â:R †â6$#(/©G/S#Wp(N@ à†â"'p+(/Å .?ea ×P ÷"ùQƒ (/Õ/.-O+"ÂÈ-/ÈÈõÈWð.[è/…b$0ô ôôô//¹_Ú=ºB+è>è &ÁÌ ¿Ê…×ÖÌÜ\Ð Êá\ÄÄP1’>ú l‚`4Tã: qKÖšˆ6gy]6+ëëÚ / 0J? ×Ú " 0 66 šD/¼Ô7 /¯Àhæ+ ¬À íX*L/[¿Í1!ˆ C³ƒ?Q>&"0„ µ„"@JOB ++àÚCè ÁØ&È/útÖS„ ëØqÆÁútD¤µDô-/ Põ ÓÜrÌ€È }xL.[0l @±:& lp  REl ßRÁl$l5; žXl è×@OåO.7"[ #Ü"W|@w ++aãt¼Vãp "i`` ++0p /7qX@@# ++ÎH£!ÃZ$¥”  ã*z—0‚âSᢳóŽâ ç ã!‚åô£à# ÆÉO0Šå,¢ü ,,«à" ÎÉ$(0¬X5@0 ãß×¼3¼Ò'"îê*FoÒ p,, B‡ Jd# pÈ] Šå,Šå0P ’]00ê" pÀ]_( šå, /| ‡ k,¼ Ì ++S¼ #W°Ü ++Àh8d"Tgddd°Ð ++p0†å(à†âÐ ++/p†å0à†âþ*Àˆ;ˆH`_Œ [¥'ŠD(2 ž¬ǃ” kìÓŠpÎHOüú0/ìÔø €$]*™( €€Ø.ñ˜?À8\@lòBªr„  ã ƒåõ3Œ*e`" 0È`êV“ƒvMã 0Ž/ + $/¼H*oH"g@)îs´Q 4_ .©Gæ"æÿ•’[Âе`8ˆX°”¸ |,%´ùW1 @” PH ü.m|CÇáL ++a@Œ_ a†˜G%1€aÿpƒâà—ç pŽâ‡ 0p‹å`aéõWà ¼c+IÛ‹02l ²ÑBØ`´cºuOà“ç v).¸d ++¨)¨/0è+ èáY¨)ì_&O@šåø”(>-Ž#& tp!‹TøtpRàŠå@øÔ áÔy¾@ø / ŽõsÄ&  ++ | %* /+ 4 Kx éhÐ ++ TXGŒ *AX/\üM õsä@˜ß/@.ñHÐ"µþä)|O¨þÿ ++Œ _õ:Œ Ô<*|Ôä!é\x ö6$ (  šq*ÂÑ*µtžq[+  ¨1'àž60SPã$|ꄤ#H+1¤"˜ª7 „åÉ™ÌPH yHK}H x ++Q;~€ó ++ƒåàƒâ àƒå ƒåàƒâàƒåƒ€ ++;ƒåP<¦< 1à€„p-&Yà¹ÊÝp N<ɬQà„å`R<Äå 0„å „å ¿o ¼ɬ>tàO”.t½”Œ °.ôü&7/¥üØ/ü„y|üÿê àƒC)C)³ƒ?)@ ?)¢ ã †â‚?)@p áh³80 ã¢7# ü¢7Ð(œ!û·)>ã‰ûx/Hû"%ûä Ü.ÅTOÔúÿê€ ý8.¯ú/Júœ<.»ù$k.tù(.7ùh.ùø.«øP.bø8Oá÷ÿê„ ¤*ý „.Ë÷˜.Ä÷e!q¬ú?~>HÄ£°#¤‚W8£°m-O„å £°z¼ ø Ì…ÉézWD!—üFÍü,.u,èj"Ú‚B?€ ;È [9$Óª"–À:"­<ärž ++èà™ÏÌú„[ðð(‹H -±¨E" œZ cRÊp0! U1‚=%P ñ$º %Piü3Ì < aP&_Õ ++/-µP T}T.T.ÑäƤ ]¤©L†6†Ö +]ÖOšåoetÛa$j5´@¾„Ê5¨Ê5NÊ5E‹R¾5 ¾5i¾5.²5 ++ Y²5u=²5»^´HeŠ5²×° ú„ª5’ ª5†Ø‘pª5g V ÉüÿŠ ŽH…—9àƒ43àƒÞ 01àƒä^!nc ÃÐ ´TÈ å圤×űeA±È™`²ø©7ÂkÔ0ú !¸ý?±Ô ++ üæ Nª`ˆ ?š^ŒþW“9Rz?†“9U@€8%?ˆ‘´.7z k?Š ++0AX3‰çcŒºX°PºX¢Ãó8 @¶ÆÞØÞäzäÊȺÎ" bÎ6?Œ4pV¨B?Ž<§ Ì8Ç´0XË! —O ++s eXÞ{/ á ‹ ‹¯¬›/ݬ›Ð?É6¢!' ++h ÜŠŽÆY&@l‹&8T¬¯ªZ4z ++€ 4| ++  7€°3x3~ÑZ!?ŠÐ£h?’ @@@ÍÍú!2ÿ„?” @Z|#&Â# J±fPT8!’ Pp<#; C(?’6#6!%JY3?”&%Ú'pTà ú‡ );˜ +² hßÅ‹i– àëàâˆÓà(Äþ< Da{ ++<I4á< <t—<÷˜”i3eCyD©DDíDD.1D\Ò¼ )4B:ç 8 8 8.8888888Ø¡6ÞʶT *±HPP0T F 5° ® ªu ¡ªXâ?–0"#j S°Xò 0²XÀÎ5– ++¼ ++&%¬ ¨hB?º x¬ H‘©¦"È«@ ø}@t`b$öˆ /àDt¹ÉöˆDtà. TDtÍ„ ½AÉŸJB?  CÛ°"*² KŒ / ++RM/üRM ,/ì D0‚å œs( 2³¤s9%“©@Ëó* /%+À34Ÿ;§/Y k Y  §h} ÈÈ/ÁÈ@ “å~ÐP‘v ++H Ü}ø9 àC¡˜Ý—Ý‘0p—嵬 ‚þO/t¬/d¬ ¬¨ª¡ª B™b K,)K/`% ]`=ëäÐÐ.qÐ ÖΡJ‡e } ¡J ++È*§ ·xw …EWl9l¬/ lo/‘l7/Ýl§/l"TÉ—.ˆK9p—j @§@KiK Šåá!/¬ôGw¬¬æ¬¬Ö%cMµ¨È̬ }.¹Øep z¿0à‡âÝ3@‡°?‡å=¼ œ¼Ž¼~¼JEÉ0ò¼\™ ë-#@ƒ>ƒåÕøN ++§83= W//`)N*¡ ++è ìúOåD …! y y„. ±‘ ${k]<EÅ#<(tKàEàG—å5upd.Q q ++øO3ø ™H-´úŠüáH í ô ¬Õ/)o/­7/ù ¥®|.|üP@9üÿê¥#22. üØ.ýûïŸ1¸/Á Öû1tÏûÿêðr„˜„ÿg˜„˜„œ„ÿã??š€œ€P€!ÀÈ\P5ÌRÚ @PÈÊàèÐ@z@l¦\P?ž(ñº X@àÂäÒÂÐ L RtŽ†5Ð <üÂGTüæü€¶+ÀüºRt0ŒXÍy7 X¬§0`gð9¸27p@9º0wAúß  ),Xm & LŒPüö@@…3JüúyP Z? Pw4V8Ö¢Öÿg¢Ö¢Ö¤Öÿÿ ¤ÖHÖa@?¦H))R´8bòPÎXúvz\& ++ p ¯ ¨ÿg¨¨ªÿÿ ªšEZÔÞèÞ %: /Ò 4|xú&¬&ÿg¬&¬&ˆÆ®&ÿÿ ® H@PÚ°Úÿg°Ú°²Úÿÿ ²Úbp?´€ÿ@ÿ+0ÿ +âÿ¨ÿ¹,!ˆnd 3Jd8d 3Úd0B /&5€k ¶kÿg¶k¶k¸kÿÿ ¸…%;re /= ++e / ++Pü0$bŠÄ<8NÊÎCrô•QŠ?ºë‹2 @÷m2?º ++ ûIh€`!`-1A3ú?JªRL85Šo3Q1&7Q178w&7ú$#9r â®üZ CÒ?€ž@ƒv?¼ ˜öf÷!;6ˆÒôÀ  Ø HðàÂææ ̪ør̪& ®b™ŒÒ«#-U/¾Q@jð×ì¤&­‡"¸Ø L>ä=n“sòUFÒd E ++ˆZNp^ã? ++¸@¹p˜Iz /EX—4IO w$ÄŒ ß × Í@¤@.šO! ý ´"cƒ" Å°Ø ¸/e¸K"jfR0nS„¥/Ù„¥Y6¸? `Kõæ²B?¾ è èе¯©Ú¦M?—¦M".m~ê¦MSrBP¸cò?¾ È“2P›¡ÀÜôü  Þêèàêè@ÞÌF ¿êÀF 2 q t0ð²?À` ?À ++1ÒÁpP@Hù•ZèÒÚÊX òe' ++@ë Ê0 2ˆXO6?ÄS2TÂ0?È[œ3ø "ÌúPÆÂØØZsBiÂ@8'?&Pgœ ++ÓÙ#1fÆ ÓÙ'1D8.á¡k¥ @8¨êB?Æ @1I  áϲ-“ÉŸ¿ (r肶_ ++5p“åI“À"Îß±pK‘.¥þ(‰˜=gÌÒ&( áU¿)Ww”a!à ¼%^=œ¼rïÿÿ!àœµi/Œe ^a[61±ßÿÿ=àœå—}b@ðAa á° ã›fÀàÆPKE§@ŽáU]žàj­Á0ãw3Gáàã=„ÈÕ¿Á7 ++¶L`"@§/À§ WÞóp"@³1Àš×œ£³ dàWC+yWCh7H±èš„€’1 äõäx"à|p±ÀÁ¢2Á¢, ¢‘l¡¢™< 'è’<_<1<°3ÀàÃPáZ³x 0<^¬0žà'j<0„ƒ„É ?0‡ù :âç¥SP¤_ ·¬/÷@ƒ"àìè\GæõX«´,/Q´8 \Ó ©ÅqÃz \v(#_ÿïFb&’0 b&.Žþü r‡þÿê6r>z­žôz›7 4 ' ++Pïp ?Æh4$¦ ‘ŸvR?ÆpF¶Þ ºxR5ªU:?Æ/ A*?Èœƈ BÚ?{œ ?8£9?Âø;4;ò Ê   ÒÈÊÜèÒÌòZàÞÒæÞÜB™ Ýâ™®Ù&0!"›Ä ÙK*+\6bɹQO ãïx*‚= ¢ó€< ãì ã~ñ•”10NÝM1˜@;ª°*Q  Q Wm ½K’b,àŠå0`€~ð¾‰Úò*uAS$óf_0ƒàÔv½~XÍXCj\©šÞö± Áínòƒ†BªžÂàÀRá>¦@ãÿ_! =á€'_»_VlŒžx©W ÅVíÀ­Xo  ChÅFó' ²B? =ˆ *ˆÑ¢Û6zC'h„ +Q„hÒˆ ˆÅ Ÿñ»Ÿ ´ŸQ“å 0“HÄûãs u·æííK x!®€8€0 aåä§0g£ z"ôþf6 µî^0šåßþ8Ø9€ :$Þöø0ÀBä8ä£@òþâp žçAà’åJ.SSã .ë ·Ü#‹Ç\žˆëÒ>8 Ìe‹åA ‚8Ì Ì  ÌDínÎ×&ÊÊ  ø¢ 8‘†ʳ`AÊ(  Þ¢ EHBð º@ˆDÎÜÈ4Ñ F°LkF°/Õ¿J¢*«PÚB?ÌøF¸âå¯'¬@—^㩯 ¯Ÿ7Ÿ“å®U5 à‘‹Ø8_- ž ++3†Ö—£P@H®pjÒÀ/ 3}­ÌKJ¥Î ¥Î $ Ú( ‚ " / 2:P$ R$B Aø·Ó! _öÛ ¾è—ã ÿ œ¼ÓÌÓÄÓF(Rÿ ²Œ ++¦$¯ # #xˉ ?Ð$A.â ôà ŸP êÜàÂäæÊZ˜bjÄ ½"á vAÐ ++D@O“¡ /\'Š\D /D/D/ãD/ÝDKDED#DD/DD/>D/œD/–D/D/ÿDþ|/øDìDæDÚDÔD1à8 ++øS(( ( ”Ä^@vHH‚à”åàâç ++$$$ Œ4   = 7 ’ 2íqL )L#LàœP€m&UK ü€T#¦’<úfU ++>A9Ô!@šÀ@„ÿÿ ++€PR IH@€Ø  ²d$¥$O$ T¨œ1œ§À1 ”wü11þÿ<+qÖV`Qïh çh@à„âW¥30„f;ˆÜïÝu ++ +ýu ++O@šåÏ´ÈììDè3èlôü@öýÿêX+]`\ÖB <8 èý+Ç<•÷À$šI$  ®@`„åà„â(44ë4.1 4¼4µÛ¤È, 1¦ýÿ4/ ,w/) ++,l ///ì$©$f$/þ$–DPxg\\/¹ \‚A`"ýWÄ+õ `<H<<@ýÿêZ1Ç_0<=”ž@0jÙ)r– K^*¡ ^ÃÊ ¬&’@ ¶Dª ++ºD#ˆè7j4.] 4ˆ4`VE"žü/½ "ü/ù @üÿê€.1…Œ ßbŒ#@FFÕ¿ç|.Ù|ª|£|?|/9|0|/u|"|/­|“/U| 1áûÿ8/±w/=@ è §è/™èw/%è?mè/èw/  C"2û4/m "$û /¥ ‡/A @ q"ÏúŒ/ùÀ"ÀúÀ/5@ "±ú@ /q@ [/á@ §/@ \ V6Ì0L%DDT^:+±h)”.1”êe„T„"îù„/}„"ßù„.¹<H,H ó. | .)[. „ H_0†å8ìC¾8.Õ¤›8i1/Eè |èvx4Fô B°/-°3°/iô "%ùô /¡ô “/Iô ü Øx @è!@MRÞ&"A‡¦8˜ÖL"¯øL.y0€¢4­4ðsð Ð/ì¬Qtt$/Ô Ô0.ýÔ )/0\ Y„ ºn00/Ý°"ø°/ °|¶% Q‚ttZtö& ,!ö&t9p }ˆ?t,q!Ws3 áx۾РÜ`„åà„âÔ Â)ò à„å à„â#à„å'0„å(à„â+à„å/ ü /3à¼kÅïô¯ „Ÿ}0.y"Ì.®þP§Y‹ÄKÄć—È`">÷`/=#`$ @m$,ù‰/±#@ pLp  $*!$pMô, á·¬-† iH ©ŽQ:˜Ð=ãyd *@Œžed ++ pÝü­(“ä "¶ö /]%€°_D0+Ñ%¸ t>p / *A&Ø”1 ³Æ+® /…&à/&0  à Ô•Aš 'ÐëÐä'áP! .™'rv@öÿê¨9=öÿ?ÚÐzA ?Ò"¿'t$À_\bdrrK² þdP¬=>‚Dð ++þ  ++ L(ñ?Ò ˆA?Ô07ÿ†ÂæʘÂÚÄÈŠðàä\bf``‚ f‚K‰Ô‰0?ÖØIïJ ++ÚÜ6P ˆð0Ö ¨ô×sP ++0 V2tèø«ð–˜ð 5:ˆ ´¼qÞƒAòBp‘ 7¢(X¢)‹3Bª?àU*PX?âÊEäæEè(k)O¨ÂÒØ‘ldpr7v% F' ++PÅ*%!p#$p)7ê ++p)&%z™ƒ(# LNIH# U&)j,@H=ªNì ++€ ++î ++ŒŒëd?ð(Ô/òÖ pÖ¨³xÁDXò ðàtN2ú=pt+m¬pté>j$H>ò&,P XB@7,—, [,,5Ò–xœg87" ++˜//;Ê/ )?ô/&AÂ/˜Â)?öÂ/E’#ø#.Ib#)ô#/M2])5D](Qš1(?úçO äÊÈ nü‚ü)[R!3þ(¥Ø’4ˆ/?¤Ðæ. l.3DvA àÂ-B¨äÒì)" 8aÒ;JF ’F DM1~Q’ý̶@"* ]/¡âSñ‹/Ê+EÊÊ8e/Ù8/}88¿’"’ ++$^B"P"NDD D·˜:t †t€Ú   Ö˜ VÚNÖ/’åÐ/MÐ ++y H† •‰ïHo’å@V .Õæ/@ž,@¶ž/…8"VÚ—6L°9°ýx¬/ @¥».=æ& @¥zIä/áä´\ªbrAP¦X•eH74 ++P•1(Pï¢AHA4:4# 46(¾ }¿ j¿J 0 v=D(A ++E o˜ìÂØêÊG hG&ˆ·Ã*HÏ7@ ++cMS"AÛ5gP7B ++p5&Ú5ÒLaW *˜° /A° /A° p° gc T7#Aïui¢?à ¸?A ++½ ++ë @¼ q APA Œ „A L _ˆêÚÚò fwPA>6Ø2= ++ hˆTA8ˆR 8  !  !   . " !=ú * !; 2ÐPAÐ4(, ++{ d0Àw ++`hwr?à_[/A˜‚˜Ã/A®‚®ô®‚ô^¤  {…ׂ3®‚3®‚3P3È3Ú'‹ ++ãCA"fØÂÄÊØæQ/f`àÇ j‹ Äj K=„(^„8„!d "j"j¬^Ö8dpbcz$Ì‚$z&®‚&z `@6À ®Q‹ñ ' â#ò”6 ++ºQW(‰X‰oˆ7h ++p6 (Z‚(*®‚*}09HA2 (ª8 Ï ŸJÛ F žB,žBLhA."&‡L A4îDcðA0 $ÅT€ÌàZÞÌÌæÊkì¼»ôÂT!ç¦/àš,…2= ++ÂTHFò.ÝòÂTôâBA2 A0ù2à’“&œô’å‚â'Ô*Š'ÔÝ-’ºÌ>!)¼¾S&uJ‹T[*êé€\^ãöÿÿ~ñ@àˆ¯ BXoÕ+ñ‹ FXsÕ丫l`El\5’å»pÁ ]¾ÌlÂÝ  GG19’š„• Ù|íQtÄ„$ ¹$–$Gˆ1sèoèP/ÙèIè0àà½9=Îó×&@;ÿÿêT.5\‡T "Ì#ŠôX*à\Fš2ÍŸRí@˜˜Í<AÌD/à¸/„Êq¶´/mx#LqôîìE‰¿aÉz ýe7´X¥¿T´Èl0"‰þ0ùo=’å€þÜ/IÜ´Ü­:žHCnþÿê[ymPÚ5Và…qúA2  ÁÒA2P5zp ʶîgï“øi]aA2¸ ‚ :0x²Mï! B x AòA2ãN(c!;&âî!C bb0°V`Q"VÔcx\PoõEÒÜÎ@ @=O@ÌÞäo‘8"A48¾@1•/A4M!ÚêL ++ˆ+ ÷S)àå-HæL/ëæLªæL' ++ØñØ #êxØ ++øL 'ò"š¡ h ÆÂÆÐÊZöVZÒÜÌÞ«†½þ!-0v ++$ $Hk 0å²¥²/0¢ull·« åa÷ ++ p ³,òteól ›$äYV`wÁ`A:A8 Äf lÂ& Ô&4A6½&)5<¾&uA8 ++0°s¿hA>ÒÌZkn-E:lI<l V ü>x8x~xDèÂÒØzpz@z*AB{D{>h!AF)0Ì™/@hë.OAü5/A‘Ü2AH‹Ü/AJ‹ÜóÛž ?ÜdL) Pb`NJÜ èê †Û&AL†Û!0I ++/ñ4N0l? žð_0„å ð pŠš=Þ ++8sôG8"'`ˆBAPƒn0µc†Ì€ξ¡l  ++4 ++3Y¤þÕ‡‡S på — nÕ †n0lÚ ÛX}ä/0W ”̽.ß[pêBANÊXFx1ªÚHÊXC0žç)ºUÖd81%Iª]ÿ^ž7W‘}ù]ÿ>AAÈAÁpúrû' ++ˆ…_wRAN ++(A QXB?+h!APZ GB*A8€(8-ú?ÂÓaAP8/‚m ðAýU€š1@ dVVÚÞìÊTÊ>2-@l c bÈ0ˆRi` “0÷UÆ÷U÷U ÷U̳UƳUJ+UD+UDD÷oUñoUÏDÉDï³Ué³UGDAD÷U/D/ÿDù÷=ƒ _TÿUÿÿÿ  ÿU4QÿUûUÙ0ûUuûUx/ëJCõŸRaûUçûU™ûUˆ5ûUP¥ûU¡ûUx-ûU×Uÿ&'8™×U ×UÕ×U  ×U×U\×U¨=×UD¦[T×U "—üÙ×U‰[T×U”¹×UDG|×U 8|U×U*|×U”5×U@éT‘×Ux×U@¯èy×Ux/è?uèa×Uxíè q÷U ÷U/V Œ"ûŒ/á "û / [/ §/I£T7WÀ*p/$€D€$$­_R)/­_Rˆ(§TB+X/-ˆ3+X+iˆ§TL/Ù§T—/…§T[õ»V\4/Q\çRås3U/içRf4/çRW/ çR_/}çR[/íçRÃÚçR/Í ËçR/ çR_+}` çRP/ñçR[/açRó/içR§`/- `çRI/¡ çR[/!çR3/Y!çR×zU/M"çR_/Á"çR[/1#çR/.u#øçR/9$çR;.‰$õ6ãçRâçR äçRQ–ATçRÆ=d?) "bb«*+;pçR ++D^R#ATçRQ†AVÔ=Æ Cf›) d‚K‰VçR AX`Zˆ;ø ++\^èçR€¨HäR?0ðíR!¸íRFºA`ÍDb:dfhíR/rpíRpíR ‚™íRr,@HAjlnpèR ++rèRr×P/At~/Áp ++[/1p ++—/Ýp ++·KþëO4/ù ++å>[/i å> / E9"ýüE9/A å>[/± å>—/] Pÿn¡N/}¡Nw/ PO0ø/uøw/P?öhŠ]8Œxéè  £]P/>]P—ŠL L {LILáN câ0câáN‘/)áNO(ˆ/•Ð4É4ÐL/9ÐØõKÕ?â ÉŠ/Ð[/З/-áN­Mj¸/­M[/ýÄgp/­MQPp/ýQPQP5ßáQPu/ÑQP| N°!`/D ++ ½NN/½NolŒY4/Ñ[/A /ݽN/[/‰—/5½N[/¥½NG/\½NµùHGYL/ùH_*ùHMýpùH%/E ùH׿K/9!ùH_/­!ùH[/"ùH//a", ++/ùHm/%#ùH;.u#ùH"(÷ùH/'÷X‹¡ÚzCbCùHÊ.pC dÖŠCAþ>6j6 ,{&.H? ¾HþG·¢8"CWIC^C7 553/ Bv'Cy BwwqLC 5•8665 jx CyyQJC I Êt†84=J /dlw AuuqFC ++4¤Ðæ\bfr /dnt ++@s ++sS6C aïE/rbv paCy yT,Ca0ÂÒØ4dw raAuuS$Cu8J/rfu ++/f`uAuuQCw2Ê°7rüJ /fbK‰Òq>axCP. jC(éK ÀéKSêCg3QPCù8ʧ8/hbb fè'Cn3R Lß8ß8u3/Cß8')bl ++L@zCØ8CEÐw%CÇ0CEÐ/C®‚EÐhî2/C Ë‚ y"®‚"£9!H&)HC‚C&ìOʧO/hbÑ fÕ+C$ìO EìO*/C&ìO(bjâV+¢Cî?/C(Á‚(î? /C*Ë‚*î?)5Ò†q¤C.&ACÔêÚà*/h`’ f» ++,•ÁF§Á é9¨¦Á C.n¤HCžC06Í•ZÆZäÊèêäÜNO /fj”N œ*œ0œu C22N Lq &flš¥L¦‹2‹S¢C4³EÎÞèÞ9 /fn³ ++F*d4!R/bhR&=*›R AMR)Cêêq’C8*ñEæÊèB‹ /h`W fÎ 6 RHR(´×<¨R#C8ÔSˆC: ++çÞìÊäÌØÞîZÆÐÊÆÖ_‰ r§R ±'ê±*|±:±tŒC<(ÄT° &h`¦ÀGÂ+<¨qŽC>4a—äàZÐÊÂÈÊägC /hb®M×>–´'Z´*\´)ÇT.bfTÔS &Mj7:¸OB§@Ü‚@§!BË‚B§&Yr©S/CDׂDS+_R׫T¬Vp))cº½u–CH"(½/h`% h%F¾Di+Hµ Ceí!CLF²NC7È/Ø^Tÿÿ›>^T^Tå!:TWm:Tx/ù:T+9:T/Ý:TÁHrCzCN,ytØÒèÊäÂØòr9 hîJ´ IÎ aN P¾X/8ÇT CP~S|CR¡…ÒÚÚÊÈÒÂèµûø /hhÃK| vÅRÅXU ÅS~CTÅ’ICZäÊÌzh>ù &hjÅ\ KU 'dQìT TC>XðUhðU ÌU­/éÌU75ÌU0yÌU˜%ÌU ÌUƒPCrCVÚ·ór_ #hlLN ++HR ++ bàR ++©lV*b`lV&ClV P-lVIbCXlV ò9lV*bblV†Hz lVYÒCPlV i:zlVbí*kR×Z5 ‚Z×!\Ë‚\×%u‚× lV#CPó wbRS@BCXyá“@CnC`±È!!r¤ hñ^vHr`ŠêV#rêV(Cd{ Qrƒ ~bwKXQ*/CdXQ?f`pXQ/Cfª‚fªXh®‚hXQ¯/CjZ‚jl®‚lXQ¦(bïÏ ÛXQ„ëðC¨ 8 8ÌÒÜÂØÒô¼höÎÒæèÊäZØÞÆÂèÒÞÜæBõ@‹ëQBHÒ<2ˆÛ€à á žå4vçže î( +î(vçž9ÉqÔé ++t .tÎá ++DZ0b€MøCn"BC¦ €ÇÜy= ++ “õ.&¦ì0Ÿe¡0šå ƒâ@‚áINRýë NR” + “” RNR$ $$ ++NR,U,Í35vÜp žå`RãìŒÞy pžåž$#00pœ œ 4[ pšåØ` ðà†å\à ãà†å †å p†å@†å50ƒâ`zRzR2 ­3Ý@ 1 ++dd{da “åà’‘è6Qœ^ã%l’øߘMSßÿÿêÜ¡Lôz{_G^㸸&Fï¸Ðlò´( ĸ.¸ÀXxO@†å …0òÔÙÖT <¨ÖTB ”ìÛå.,.I,p²þÿêPb¬–˜ èCp‘€6@ ás똧NSV^ãöë10ZÚž+ÛÚ$°$-0ž¶ªÿ3LL—˜e0å —ñ35¾Q35)óñiÇîÎ'à4“4øá<û0©c9@ðái2 v:f O7#öÿû0Ši ‚‚СÉp'ímä%/uäg/ñää%/Yäg/Õä D7J²&k ++Xh¾mÖ¨BC„ (â} ++1à““4 ++X^ãti cûå… R… 4/•… 0… y  á “”/ ï!·ˆ±n=õ蔌„ùè/ 0n= ÉÕ $).õ)‚8Re ++Øûä"+u ^ p“å@І*eÐÌH• HÔHOp„åL/ïÿ-.ùbÄÿÿêFÆWô“å0“å¤'E襤 2óïÜÅM³Ÿˆ2õýY ++Í?‚[ ÌNVNVaÁ ++ Ò9ô /ÇàÙx³ ¬ £Xï’ ++ “å “å lEy ++! šÏ»u'$@!y!¨ É'tí" (T(¢;X à†å § i´ bT^ã+>üy p’å’,ÂBpÁ 8Á ++>"p>P01 „åS‰S<àâËì_ ^ã X!’W¨ù ”).‰°]°pVÿÿêzºÑ €™ïÀèîd% OšåìõPbBCv²d0˜ k+Z|3'ú$Ï/w$š.­š¬=€0’å<àâ ++h1/hSPSã. ’ÖLÖ1 ++_ñÿÿêX ŒXTÐSãÞ+æÌŠTF: 4"j§ ++ç@BCx  ;ð^"Jx4$5.ïH*$$”ñ)¬ @2HÁðšåà”åL^ãq»Q”å ”7G ì-“ÛÿìBì T/’4TT±H'/! m ++næ$ 8/ü„Ct >ÜÞ@•Ð@ÂææÒÎÜÊÈ@èÞ@?ò üóg$ˆj=8r ++P›÷=Ct1/ ++X!0 Ò "êÜÊðàÊÆèÊÈ@,##H PrCv^h#CxÁBCvhCz ++@^CpC| BxC~‚!’' ^‘&\câC€ Ì5VÇ!@C‚XO†Oi6C„¨†¨8¨ˆo"ó9Cœöý9RR(p C„hàŠàkvàŠà@àdXCŒ ++PÓ$ ++ºCxCŽt(Bu3¸!€Cb±%ðL0®0 :ÜÞ@ÚÂèÆÐÿRÆØÂêæÿQÒÜàêè'úñÔ ++ üæ @ÒÜ@UŒKææÞä –þ`ˆ D ++Œ¾j ™„' ++0OSÊC„O€Òm#,3CvC8C’@”­v”­T­–­pÅí' ¢S¤ÐæU`8*4 ^&Q 2C˜ß(h% xK\%ú\/p$&Â$(õ%ºE! Wm `¬š¬všá$ ++¸9mH2Cœ8n37ž ++¨%8‘¿ l`C¢ ++@g2ÂÒØâ ++B@C¤4 ++ÏÒý&;on!PÙÁªC¦82C¨w& ª 8·yC¨ ++ ·ôq ++ ++þ ++(n¦m(7Cªôlãq"o‚ãqWÈ8eDøs ++?ÂðBE ++ (AA  ++ àå àXû{žåà—å!Yæ"%/‰æ"âi0 ++Šé†¼ ‡à ´ml³ms³mb³m"çl/ÏT÷x¹ñx¹ÏDÉD§D¡D}³mw³mÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«m™“Ók/éä„m%mvm]m”mP1ˆqmú¬Lm€ágj±m Òmí¼º¬J]m˜/ p¼Cs¸/ilel.¡´lu/=lÿ,}§ùDYËßj/ ˜¾4/=˜[­Üº€{ /I˜ll/…˜[õܺ˜¡Üº\/lGm\p lܬl/…l_ù›úlLi<ºl%/±l×$ /¥l_+ ”lL/‰ l//Í , ++/lm/‘!l;.á!q$lŒlÄlPþC¬nil×H/hbù\ h­¯tni ++Cûg¬„hPúC®ùhlJ/hbÊ\ /j`w Au®uPêC°4ll>N/hbJ /jbv Bw°yµ 9Fœ%²RÜC´Æ\b“S /jdB´øPÒC¶Çklv`bES /jfu ++@s¶sRÊC¸s$edóR /jhs@s¸sp¾Cº.3 idºZ /jj}J‡ºÕj¼Õj ÄÕj¼¾¶€E>CÀ<§…jfdQ jdQ¾íLQ ¿[Öj ++ÀÖj',djÖj¼ÖjÂEJw¼EJÂóJÄ®‚ÄÖj!ÆË‚ÆyÈ®‚ÈÖj!¼©_`ECÌ©_ljfªQ jªQÊ©_ D©_+ÌÔj,dhÔj¼VTο‚ÎVT!ÐË‚ÐÔj„P4CÔZmljfçg jiSÒ©[EÒjÔ~fE=tÖ~flƒjfÙ ++ /jr’M]ÖšP8CØ“Tlƒjfú ++ &l`˜tsKŸ‰؉R:CÚ­‡jf /lb­ ++EÌjÚÌj/dfÌj¼Ìj¼ÌjâPCÞ~ilƒjdH leÜÈ]GÊjÞÐP"CàžllÑifo &lfšF+à¦èvâÏmlÉifž /lh¬Lj+âj/ddj"€:¸Múèä‚äè!æË‚æèYU>i ']’/SCè(öêcaî¡hÿÿÿÿù1Cìc¼Og?¼8h îBRCðÞ Èg/hdï lÞF½ ++Jhðh Ãh‰îH9X(ôugÿÿGbECò° ,g/hdj ê.vGsg+òsg rsg¼sg¼sg¼sg ôsgîsg+d`sg¼sg¼sg îsg csg(db*e*5 öj ‚ö5 !øË‚ø5 %oZ sgîó q:Rü@ôò‚@E Cü¯ *g/hd± lÈúGüqg'(bpqgrEDE  (g/hd ++ l ++þvJrg*/Erg /bnrg/E©.E©W/E®‚rg¯/EZ‚®‚rg¦(‡:îÏ ‡ÚÛ0GSB?€R*E ++_Q@;~gúE< Ð :ÊðàÞæÊZ:€Z]G@æB¢E ++'i¢\C †å'¶N $[$$ $SM: R'Ò%(1&R®); $"žö%! ž+ q`šåðwX3 43 ÒAh! žPh.&Opåþà ³ ÏD3 Opšå»Z xÉ˃  vá‘x2?Ŭ· Š@:±H E LhPÐBE.:ÑLhd6Š*#Xh@ áPh/0]i²?0š(hŽ\(h ø£^iª*(hËyds(h`3#H.±H àfàf 8A ß_@høhÖ@hجh˃^¬h%»l¿þTt:0:/ñ:^0šåÊþÈòÃþÿêLªBE, /0?L2 ŠH0pŠå@Ñ ++m|] +l *a åq 0Žâ@ƒ‹I•1µq¥* à’¿ç@’å»h”Åkh5 àí/oí🠊åpŠå à¢üA  ø_ šåí/Mc ×// ëç Ü¿-ëç" „8„'„„±  É3 ãÙ! % )-1ñ5à†å`Šåàšå50Ž{À »Á*ö4ÿàžåàŽã0šå0ƒóÁâ8H/Õoð19à†Ô=H“Aà†å `Šå $ ääžäŒO@Šå$$"x h"$$8P@šå õpP}ˆÄ!ql,Ã0‚žå šå Ù ++$»KjX¬L|G|dðHH44S0‚â ” ”"\ \\ dd0<ÐÙ ,ïІd ++/ÝÐ /ÐÐOЪÐÐÐ.˜=0žµ‰•  • e 0&SÅq2 ++àYtpû]s à“å&^e B“åàle l|ape “@¡@ §@C:ÀLL«†`.-°SU4ll70†<lœ0šåU fpšåãýÿêäñy ++/Üÿ,Ë ¶™à ¬. ¬hp|`N”),/ ÿÃ4,.Öþé ++Ä0±Œ{.Zþ¤$ŒD.Òý,/¬ý± #Ÿñ \¿; Ÿñ 9@A@åðÈÄ2˜ _Týÿê-.¡ ×7²ýÿꀚB†K! ++ˆ÷Ç=Æ/Er[i0E†dúf 7°"1kdWË’WËUH§V–eC’å,$ sc$i”l% FgO^ãعL¶gDŒ¶gD̶g|,‡dv˜EÁaoEdÁ622EExCìd%EdG9X ++H0d 'E&_[@EP\&\?ò]em €sxmïä¡`“å “åàlÂl–l¼ãZ`„n@‹ ++ŒSP^ãPé?¨#àm,/Ùàmàm$)Øn- ôÛåŸò X*C šå°lndn ++Ç_@(% L°nQQ²Ì.‰ÌâÔœ%íd‹œ/%œ7à–Xž–å –å–X8H8¢ 0†å †å-lp,7X œ ”duÔdu‹ íë¦b{?šåÍ2 Áj_4ÿ/áˆuwd¯SdA0 û³"êÙȵ¢.˜þœ HÄ-`°  ©‚ó ++9E ‹^[ n —åp·6./'+•³!pš¤*Ðáÿÿê ++BBü87 ®'8 O9*k?;FasG? á4 •4êx¸ å¸  ++m @öšBEL € N|3f\jP|_€Xâ>H|/þ´d/øød/íD/çDUDOD-D'D/i D/c D/É D/à D«Œ|¥Œ| H|/ðyùD Üz=/â Ü0g” (Ðð”<š^@vÖ˜Ö‡l|„ìnl|&: {)]uahOcø|ô OôIÐ|DL ;L5L}1*L L©X| Y}/@r5mO@šåhraœ|/%|q¼Äqr$ $/¥˜u“1þÿ</ÅÁNSc/Q t˜nßüx/±˜n"Ñý˜néx|˜nt/… ˜nLt’4/å 4<8"ƒýìk+! ++8Lt "uýLt/Y ++Lt“/ Lt×Þ3|a`0˜gtn9Ѹ|hp/q ×Þd/d,$, † /ù 4d$ .óÈÕ‰||ÀtWtFt"–üt/Õ tƒD/Et ÝRƒMl.õl©¼¢€6€/U€[/Å€›/u€d /ÿˆ ò$å$V$/Ç$_$$/Ù$q$$L¤ ?$2$ʤ t$1$îÈ «$V$F$u±ÔI/ÍÔ{/]Ô )Cˆ20x0x H|H*å œt<Ã</!\ w.­P½<D‰è/ èw/•ä‚?Oèñèx/}è?è/Ùèw/eCÚÌz/Å"ÌùýËêˆ/™C4/ù~|/5"pù/m“/ èzlˆ½œ¬¸T¸ ¨#¨/¡¨¨.Ýà¨}IMÇétTΠy/õT"¿øT/1T[/¡ü~—MOêC8<è`¸/­è"Røè/åè‡/èC4/áìì {è "ö÷è/U è“/ý ü€ "µ÷€ /Y!€ w/å!h ++?{è/A"èw/Í"èL@÷ë/-#L"1÷L/i#L#L/¡#L“/I$L}|l|"áö|/©$|"Òö|/å$|<€@ÃöÿêI*!%€ðð5ð ?0ŠJ ++p®Z%Jô(l°@à„â´Ó0„å à„â#à„å'ì+ìäÄ.a&ƒ|4a,œ0ù˜OŠå @>öÿꌅ+5'ŒÌ#0ö 'ÌØ&íK‚+õV.Å'à„0/0„ ´Ó˜/y(d ¬ ¿²$¥$=$/ç$¤p"P†xu"}õ/9*´[´ê] +­*è | :ó1+ó0+œc¿º`,œzPs0 ++"ïô0 ++/q,0 ++w/ý,˜C"´ô$/]-°"¦ô°/•-°‡/1.°Cg4/‘.4 è "Xôè +Í.8d "Jô˜//d “/­/˜o#ýó0¨"îó¨.u0àDI/å0˜‹¨T/1T™T/É1T[/92Ts8/å2˜d /% $. 6$.0h.%DDp«^€”1/4€”¼%"Îòh/õ4h"¿òh/15h[/¡5¼‹yT/I6TjT/…6T[/õ6¼—/¡7¼{j3Ä/ 8° ++"úñ° ++/E8° ++cÐ"ÔñÐÝÐÆÐ/9€ ‡.±9…~š4/!:ôX |Xvˆ7ÐFx I,/ ;À":ñÀ+E;0x ",ñx /};x “/%h"`ðh/­>h”C”c *!?¤t”¬@5ðÿêÈ+Y?ȔĔ ÄRDÈ0È ´ã­f.)@²BD ¸Ÿn#Ðï@|¸ŸI+aA@¸ŸL.ÑAí_/ ¸Ÿ.Bœ¸ŸÅH / C¸Ÿ_.CÔ¸ŸI/ñCÔ//5Dp/&0Ø Ø¸ŸY/ùD¸Ÿ;.IE†Eð±îÿê€j¦ˆEHðöpTˆä ++° ++„b˜ÀÊ–]20ÒiœsP ++0 V?t _œ$€“œˆ—œóE¸æÞêäÆÊZÞÄÔÊÆè~(F0 ¨­œ!x NT‚EL–œÐÌHENHÐ ++`PHúœú“/dlú“%!º ¥GER ++p),'") ¦‘´¦‘+-/@T@tFZEL@Tj…(# j…×%1ú×opBEVÑ‚=V(ÇjH# ++0Ñ¥b87*EL˜¢XÑ‚X¢MEZ ++h¢/=y\ׂ\×/?ê×Cל^``bH– ++d ++’ ++fhj;®òlnJž7 à< EpÈÝr5‚rÝ/=`Ý@QÒE™‡–(dl–0¸SâB£5œ Lhn)5œE&Wrt™)AB#.[B# ‹._#)#/aâ®/gJ®mžš EtшæEðÜÞà L°FRv‚vjŠ ‚„ 5‹/ExË‚xË¿.y²j—/ )=b…’)=d’/‡â#f#‹žà™ ++/‘ª/°z°‚zÍ =h_[ °%™ÚãoˆBE|Ñ‚|ѺÀ ++# é¡HEúÜÊîZ©^& ++Pô ú*£ ++i"?öi3?ø 0ô ⇠êÕ~€œ—´‚„£ž&ªæR0REª”ñÆÌØÂèèÊÜZæÊ‌²a@TkTNw&.w:'¼ :'†$$ þc-  ++./@vb/ÍvbžcÓiJ$f.Rb µñ?@šå^@Ìæ06Ø5? ”ø™ø‘o‘Œ1@“@:U1ü.1üÊüÃÀ`"šERác¨pÖà#a8BEª—uT9sU‚Eªö€0E¬± –x ÐÊØàÊä¬~’ úP‚P{pâRã"2)žþ0Q®z “åàl'@åÿÿêî:"à˜'W žå0ÙFá‚ Š5¬ Ô01ƒ yû€“°¹°=ÊÊ""FoõÕƒ±¤Ÿð(úbºER !`†í– HREª8' ++hÊXzE¬ì™€ ++ÄÊÎÒÜ)t& z>/u-òG.àäÊèèòZàäÒÜèP"HâE®1‚t0t(w2¡BE°hBG2@n/ ?n/G0?nÿº?n( êh=n/±=nq=nk=n`µmZµm/È D/ D D/š =nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnÿ6yn<×kÑn ÈÅl n\}nŒ‚T%n sTan\Ñn˜}n l4/í7 lËÖ l/Õ8°"Çñ°9nD ++ ¹ l/I9D ++“/ñ9 l«]ä/¹: lP4í4ˆ l1/Y; l'¹p/‘;ü c lü l/=ïÿêhj<–[²`´ˆv ++¶ ++b"l/ l>6E¸ùk¬ùkº*Q E¼OH¾ÀÂÄÆÈùk/nbùkºùk ++)ùk / MÊ Mwº MÊùkºùkÌÑ‚ÌÑùk5º˜¢ÎÑ‚ÎùkyÐׂÐùkºRSÒÔÖØÚÜÞÌkaEâHüäæl ++ºðèqeìÝî5‚îùkºùk,n`ùkºùkºùkºùkºùkºùkºùkºùk?Eð‚dò‚òZ!ôË‚ôËôkôkºôkºôkºôkºôk/°ö°‚öôkºôkøÑ‚ªùôkVEú ++Pé ékºék ¸I¥`þHGékrék/GlG·õë/G ++®‚ ++7X‹/G ák ++ºákºákºákºák/Gù‚_ /GË‚Ëákw Cà(7´ÜkpÜk/GÜkÿÿÿÿÿÿÿ!G¨kºåjºÜk Gè4Ük4 GÎh´Ük-lnÜkp(GÜk+llÜk·Ã§kºÜk'GÜk5Ük*GÜk™ { ++° ‚{ ++!Ë‚{ ++ß œk#Gº!ßòÕƒ<Gîœk (çúr/Gœk$'ljw0ÀëŠP hëœk/G €‚ €œk/G"Ñ‚"œkùI/G$›k/lh›k/G&‚&(®‚(›k¯/G*Z‚*,®‚,›k§( ¢µÐ6 B¥0grG.P7LâG0°fz°f G2–G§…/0°f °fJâ¸f)¸fXßÿÿê¸f4¸fýOR5ö40rOñ v  ˜ ,ÜàZÊðàÞæÊZÄÂæÒÆZaàäܬ]a 7ôs’å@^ãœÝ‹×ó Óó/ å.}‡ñå·÷k_ñ@_ñS@†å x Í/ WÍ/Q¤UGU6·ï, - ++žåJl«ï §ï½( ù& ,< ¹­1­ -äm¹­#ôECŽŸóh •h1 šå¨Ú¬ \00’÷hr ¸F&°áD`õ,˜Î+r‡ ++à’n)"à’–+#à’j-’Äÿ ++E &½v-ܲ@h†-qŠåà2,0á %.Y5=Sà ã  0 à†å0†âSéÑ ++Ké*4Ké`0€â`(($(†+@0žåÃo¿Ão‚  ãà á&®hb ++0žåüûC ++ àž“ê3^ã²ÆÖ+¢¨:†å xõZ*H#ÞšÆ7löaà á ž÷êd0žå© üÞ>R©š@< øÞR <p†/Éx%š/s:¹ÔHŽgì9ñžåà’å àÎã ‚âà‚?ì” ë ‹åà áë)ÞëÏ@ŠåàŠå0Šå 4 ’‘  EEà@0šåà2à“ ßì §ë ø-D-Äùn0 -¹ šåðê6 â v ++ ìàù0 .0_AQ¯qp ŠåRÿÿê«r1 0“Ì7Ìæ9žðpâWãòÿÿp‘åWÉàñ ++°â[ãìÿÿp—íWãçÿÿ ++ùsì2:<ñâÝ=à#öÿN, üOàŠå$ ’‘$$ò" -âkÉÿÿê0Ø­‘Qãüþÿ““îØðqöþÿ‘/ñþØ0Ø.çþØöè/ÔþÄj-* þV8 .Á hp.aþ" ++1Prí Èç@°BG R+ØÚ Qp á,þð—åw^㜠++g^ã` ++W^ã  ++\^ãb ++œ^ã²6a —å p—@tƒê/1à€d1à€)   “à€åà ã9à€! % )-b1à€å5 z9à€å—\!  ++! ++3 ‘åóA ++°4! ++! ’@\R! ++ Î04æ@‚åÊmô !í †å †å ‡â`‚$ D6Kaå 0 }`šåðôÈæ°_;ÿ/áØ Åÿÿê9 €â¨UãÛÿÿ¨¨ÔlõvÿÿêÜ^ã^E DSDl&5àH &tà¡ †„Ük ÓrhGä̈TˆŒ'ˆ#îˆO†å Œq HÒÝ pþ¥ñ V8ž¹¥ÌÌÐ ++ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌR ë;à‡Ä ‡@2 à‡u! ŠE/p;*m} B6]šåpš…)\ äp…?5 `` t p0†å áœd ó8låÐx§¤z×ö/E×öb8[ÚDJœÌ ++2 à—.=pà—å—åÎ9,Ò8ÛRo&µ°AÀ!Šà ?}@@Ëýÿê$ õq@@  "9ƒŠå šåÕë fB?@àO˜L/‘ L¶L¯vNLHŠr/ù D  á 8è,/y ++èÏèÈöC Ôx%ñxí"0vêœö`ÿ­€5:¸B ˜öÖûŽïBú1 Ï! ++Ê}ô+OL ++ lô€Rp5~¼o¨G6 ++à3(x'?8 ++è'û(G:ÄêÒØÈZÎäÂàÐ7ó.9}öU ˜S °5ˆ 56 “N  Ð1ÔK  Ã8&•s ç ””0’åLSã# ++-0’/(Qà„åP£?„å =R_ñÿÿêŒX Xq<àâ^© .(aà’åH^a|0 ++´L´T „åár /ïp Ü%TÌSã  P œÐœys´(xÕ£,JÒØ5ž]úCp78 £@Òè7F ++Pwú G:ø‚7> "Üy%œ%gG< ++H- ++¤ú6äÒìÄ% Y1G>oXG@ ++øq' ++(`%Q!¢GBð(¸#’GB€%GBf±D 5H?` W¡° áŠå Šóð!à›å”^ãÏ ++Ô^ã[ ++T^ã2 ++U^ãô ++e^ãÙ ++E^ã“*Wu^ãqDñi* à›å ›å ›åŠv(W*˜@Š&"$rò¶3*É·€ÿÿêôÑòzX. z°K!“~ Vb_$Šå(æ"üƒˆ(c#(0C" àb`$šå¿®·A‹å† šåz¿j ++ãÔeŠåš’‡„!0ŠØA/***ÌàAôB.; 2 NJ ;J ›– ++•›å›å 0ŠÈž ++à\àG±ÒàA!â0TT¢ ++P_ɯÿ® ++/þ"þ0² ++ãö_8ÿÿê8” "°›ö ̛Â1°š|²«¾ ›¾ x¾  Ÿ-xè ++ 3 ÀG›å¼ÜH"îþ /ihh ++T,.éTë÷ÆT^¡›å p›å À›‡H‡.Ž1à‚*3à‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚Ú‚f19à‚â=HA 1àžÂ'Â/ÏÂO„mŽâ`€²©O‹å° ˜°P°r° { eŸ°‹¤‹¤‹´GP´G2 €ÈŽ Àä/°ìc |#¾ø š Àì.°†*dX†ÿ°†å p†åÀ†å@†å5‚â`Š Šê êŠ — ++Š ++ ,Ï,©”’T†,a,O,*XOóþÿê°/™ °@Úþÿê¬8Hg0.Y,.¸ 8¸U/ Žzk;þ /’ÿÈÈÈpȘð˜²ÊGDBGF@)ò ++È ,äÊæÞØìÊZîÂÒèÒÜÎZØÒÜÖæB­–+¡4ˆ#K“ ++ò B Žâ8!œ! ! 1Ô"àr î[È"œ#† "0á59pž*ŠSð—åV) Ý5!0šÄ"êW@<Š*!<Âàù7,YQ6?šåÐÔ@ ++ ++ П)¡FxZGF8TÊGFÍ’P‚GDÿB ¬·2#HîL 0 ++?Ÿ¥ÚA¥°Ð ŠGD  *xE0l, BK(k,òGV ð ÂÈÈZÎÞèÞ*Ê JJ2/fZ)`JQ0[ƒ[ƒ[ƒ[ƒ¯ƒ[ƒ[ƒ[ƒ[ƒ[ƒ[ƒ[ƒ[ƒ« ++ƒ…ƒQ`oíƒí'0ùí- ,ÒU$¥×ƒ|t;p•!•!—}!G•!A•!5•!0•!W•!p•!"•!p•!€ào Û ×nŒp¬?ãÚ™!Ólõ8™!ˆ$Bø¸CHCBX5V'xM 5M[(M&1 230¸ú3†7¼L ‡Àâ%ôQÆ^ãm ++¶^ãã ++X^㘠++˜^ãM ++Ø^ã ++F^ãk ++v^ã ++†^ãÑ ++V^ã‚ ++f^ã5 ++–^ãä ++Ö^ãË ++—Ø^ᣘ…X÷ é ++ö^ã­ ++¦^ãM ++æ^ã\@,öA5 ?à 5 ++g g Õ¿ '·ï¡!0†å`= “T!,ƒÛ Ë||Ë !ãÏ— ºP­!æ»ÑÅ-.À ã ++ÃÃç ++‹¼‹ç ++‹ç ++‹ç ++,‹å, ø-"U=50”v!"”‡”‡”‡”‡”‡”‡”‡”‡”‡”‡”‡”{‡å50‡åà÷Z'p ++2C†åm*Ñ,°ñ´9éjÀŠåpPáþÿêd.5¯"¯Á ¯@Àšåå" GLSÎþÿê({!!! ¤§¿¯k4÷Z |ƒ|Y6Å"¶C+ñ½  $``k`—å p—©,F¸!–‘,Pÿr&E©,"J©,^–^ý8 –å –å°–û+Ñ1*Là<{°†å`Š˜˜—€/è˜(â˜s—åP^ã›ò5ÞEb—å °ü p y%0€Œ&°Ü …%UXTÝ/ ”AÔ  ++6|—Ôm0/@Ü| ,Í츤<€µ0ä}'/e }'Apšåe:!2â ÛŠ" ++ã™ ++d)'dø  á”¬8g ++¬lô/Y ++ôÙhÈ À1Ñx<À/ ÀHo<ÿ/áÎþ, ÈÔ.Éþù&4  =(@ýÿêG/Õ ìì0çA(L_ýÿê4ñ& `/Q `P ++ ù&ù&|ðÍ|* ;pL[p?ƒ' M€„ È*U ˆ Ô /LÈ&»&»&»Ð †Ð †Ð †Ð †Ð †Ð †Ð `†å50†åÀ· ++ · %6·Ê€T«¨/™Hx‰H8/H)0 Ô  ÔT=8PàŽãp-à=8p)DS °—åå4DM.‡ïÜ /pD| àD$<ü=üWüø(øø( (Dß@ÑÜBR¥6 l;g 0&Gï”" °0/4Ä t»œ¬Qw˜Œz¬,Xg,° ð@à—å  †eAP"p´Px/c“kb5°€å90=AHEIAMà€å!pƒ´ð%BP&Qãä°ð0 ã=p€â0‡åãÒCQãl?U iÀ‘åpœl?°[x‚ ++` âV!°›3[T'€à‹å0‹T ++ä°TmpŒâ`‡ää!p‹{+_ ‘åÆß#ó80ˆ ÀhŒhèOÀ‹åá( ++e5´ ++Ä *IÄ0 ++¸ ++”]-šåÉ@'0\‘D!pñ?\A\0¬_ƒåƒ•= ++"¼ñ ½D ï!?0‹å8 =1:רAeE/ƒ™= 0™= 4Op‹å%„4 ô¥B'ŒBL `´àÕB Üð\p"tNL/0eC*½Ÿ&" pxZL"0¬˜20 áœƒå pƒåäiAõ .ÓþÄ–s''Ð DÀ™:Üxz™: Œ/»ÿ$Sœ$ÿ\$­O€Xâr¸ e¸/°$/= $¸8M§x  |¥-4/Í!4OyÿÿêÈTvJÓ:¿6MJ ++8"(7('o&;¨;#  ÊÔ`úòW5úP$#˜ ++ðXbGL˜úGLX™'&0±'/ ++ ƒ!XÏ'<(ð8Òà7FPÒøBGP¨U?ò©UnFBGN©U U`‹phXGR€„OT ++ ¢b8%âGLXœœ2¤Ðæ0¨)Ý,PBô%+ ++% N +ú)?‚8¢Grxˆ&^ˆöðBGt ˆ ++ÚÂäÖB+ÅÓÂàâ^ã _Žã ƒTú÷,!àÍi'+ “Íi3Rá?D215“_ò; üV/³ î·p_9“åÅp/-p p¡D$ *$$ì´R*à"0÷ ã £/`µ] k!]Zæ·LH[!nWÆ.i<=È °T“  á à’å&×#1’T*àXX¨3?ÁX"ಋ<Jù8SA“åB /à¯/=|ÍP}@­·/¦‡!p pàÙ\_=“å ++œ.@âœÛ“ Dþþÿê¬c8ê5V£’Gt@5z#r|ø{âA5~ ++`;83 ðäÊÆÞÎÜÒôÊÈ@ÌäÞÚ3 s(¨^Р êGt° šcp ++Gt`  pSGt856˜Ê%JŒ 8 ÒGr@BQ08 J8b1p ï4fZæÊÊÜ~¶5à*®‚ j0’´R(Rº‚Û Ï :wfÀ7„ ++ˆ(ÙQ2Gr´¹I1: ++Ø9::@, ++(ž (Šr=ÉH<Ë$šS e@M@P7˜Å`؆H 4 û Ô ++ üæ @Äêè@ÎÞè ìL ŠŒ°ƒÊGB ++0äbS rGv—blbBGv ¹V ++Õ6VgJ8L ÚbARGxÆÚbŸzÚbÿ$zÚbŠÚb„Úbò4ÜàZäÊÚÞìÊZäÊàÊÂèÊäÎ8/æBÞbÿÿÈY~ Á WÞb8?Þb.ÞbÞbV`îbîb`va"vaP ++¢`!žÙva/á+õ€Bva¤I*1<œ/Ùœ'/‘œ'Í<‚?Qa¸ÊÒaBV /Òa„ÈqÉ1±òÿÿ ++‚‽:‹åâ õ?ãä9?‹å Ž9: å½:±žå@âQ8 I4Ö­:!ž‰:bíL6b¨“6b1à“a 1Rá&aƒÜQÜc!0‚U"(Aò<YØ oÔ¥êc"±ÓîcØ©4 Lx=@š•$ccc!'0þb Rê $·½ù^X² žå@ âRü!  xP5 žå–üT.åT<.!<"àþ^c& ]cxý6Á .ºþÂBzaŠza` BG|ÇÖôGÞ àÂèÐZÆÞÚàäÊæ¦uÒSà”å@} 5Zmš •”ÏÝÏ] ý€yBÄ}d_Žã0„we"{5°ØZ£ÓêÖÕÿ }’IQ?5 „ii‰ jÛ‰Öîu¬Ù¾áÝ15@”¬S‘Š5V0Ì ˆu µ UG|ºCAG~cP|8z ƈBG€ ( '"!•þq5 “o)W5à’å59g™E1 ¬!¬œ9œ 9œ<”7”1” ++ŒåŠ=Ô =Ô<òÚìjìd¼ SAô@ô*“ø ìÙ.ñìÙ=p@pd ++Ad AdT¸ìÚ.ñœ¸ý‘b.j5Vn­1z ++Ø vP5| ++Xöb€ÀG‚;SGä [J:×Ù25@Y:&8¡6 ++zv¨b8úG€@Y*Yò ZŠZ48:¥·€8²G~ ++@b˜Ø× òG~G‚8Lv3ˆl  ++îuQå^å,4ªË04€z„ ++è!›"âÁá'Z ÒÌídŠí„í„íŠí†íÛó(è„V}C ++1™ ’ ôà™åM ¡*6pa/`)' O-7ƒH*Q ¡” ++/ Yä×_æÿÿ ++ÆËŒ ¹i`ª®€j ˆ~ˆÈÿ$ˆÈÈÈ@(ÜàZM›_ÞêäÆÊÂÿÿÉŒDÐDSxR¬þSÆAŒRïå ++Z3HR!€40 á%çÖ“ ¥ àÖ“Fá<:Ît.tÎ\y¯G}€"BGŽñép}ñðà™å Nâð ‰åô0™åàÈ ++8®+[pQá2¨,€på&Wã(ší ã?Áã át.:"05oW †å9xø 2 §d:° ã p—åâ¸QÒÿÿ ++ú¸ ¸ ðæÂ,ƒ·,Wë ã¬, ,Zf_Ÿõt*/D G1‚%bGŠ ±ð20ÎÄîÆèî`ÚÂÐêäÄêÒÊÎànêâfZ`P¬  ‚Ú ++S¾æÌÈ  ++QÄÌàÊ1 L;tGŠ ++¨) ?z¨%|D*X) p) ) QbGŒ) PŽ8Ú ®UcJGŒ ++ ‰U/ó  Î ++ X    ¤ ãhGÄ(HàäÞÌÒØÊ©RÈÂèÂ~‡( ++8xŒBêG’ìà œ°Ÿ”è ++ÿ$”è ++|è ++šŠ‚ÿàäÞàÂÎÂèÊZàÂäÒÂÐèòê ++ÿÿÉ–“+€F. ê ++÷v]ž1àžx ¼ñ>Í4Æ€? z*R3‘å”"+%GÉCîøçäõqG;‘åLÛLÔLÚ]ÁK ]>.Q/)N06N0mN0,­N0@à/ N0/þþœIN00ìf0G:Jg0IòG˜g0Òg0|h0 0P˜° úcp jG˜¼  q;TrG˜h0&*%ªªq8 JG–=P˜8  = 2Š2»!0“I|IšIšI|Ùœh    =IsÑ ++éø$éwùù¬ù ‚ êuuÔs@ZÚ ++µ0 ¨K ž‘ÿ$ž‘6l(×°C"G °:•ª°Ÿ¢ÿ$¢\°¨° ˜$ÒÜCmªÿÿǦ”ÿjd¤ `}0,-0ö! ,]å0’û •0¹•‚X;3Û¬E¬?œ+¬3¬?$¤=øt,tQÆ$ž$˜$Œ$}$!0J³3[3= ‘pQ—åŠì÷/åÿ÷ ŒçQ”Ç-Ç!š‘ ?}5\4A\ ,{,mˆX 9X|¬ÿ !g0:bP-J!HK-x* ++(7€ ++à ¸Ž rG¤ ++€7Czr\ö ¦¹¤ö ¦ö ¦ ö \­\­¨­¨­\­ªhBGÀŸ¬ÿ$¬Z¾Ã ¿7ïêèÊZØÞÞàZÈÊàèÐÿÿÉh° !HFP © s@Ow@ Qè* ¡Ÿ3žåû !+ .&0À]"×À]Ô&`‡@%¡*¾"à Opåƒ ƒ | ++è…@ tà ûÌžŒ" Aˆ ++¨ 6>¸  ãÿ ‡  ++-Žó>‹!_à‚âì!ô… t]àŸ?Ÿ? l]"à‡ -ÙR- ƒ”JèaìW@Å"[t¡„@v·X'C0à ãä 88 °,B :O„K?K?@à ãMp/ïp`0 d=£pC@/pš@u¤Á?@ ÑBÂ:Ï@" à9¥@$h¨Ì$[ Ì ([*M([Ì@ 0M£ ûÏ£# Ø'ý¤Mà¡\ðŒ`£#F8 ðð8tð 4á ð“$ “$ ² œ .ÙœG7P  .)¨P.ìþ¸Þ€…¨ ‚âä@ûÿÿŒ/ÒþèO®þÿê/' l½Pw"iþ{Eg' .õä1ˆ."þà.þj 1Vz5 2Ž„®ÞÁF T”$ ++ =˜$«˜$r¨$c¨$t# /0˜#$Ãà#M$—$‘« ‰V xè!9Dpåì!°T’a¦† \#"Ai\#\# ì" \"™ÿÐÚ½\–’˜Š˜ù<AÌ}…B 4Ep&. &(]@Pà•DÙ / L˜D•) I@w%p-4 &f+ÈÈ"þþ0.)à=4ñè“]4rP™<ÕP΀%œÊœù`Kœ.5<€%œ5œ£œ•`$œÑœ4"•þÑu€Ì%ÔÁ ++/ žådú«$/0Ž©JãÔ&ÓÿØ&@N*7±#HÀ&~À€ ÚG®¸’0x ++hÄ® _Ö+£&C*G®è ª$èPõZõ1¨jh ÒPNB%JPF  ++'‚&B&º‚Ú&,P¬q8:G°Ë\®ª,°b#W¢ RG°°?× CIe² !Ð"w”Dä ++QÇÌ _"q®DsA½²ÿP£\ ŽãcçÈ ++’á²€Œ€…5[œ ›"Áÿ¥+¸ ++À| - ¹3Rãeö&¬€\0)àž›DÙ! ++ Ìž| ;Nßä,Ž<<¬ €›, (88 8)œ-@ƒxH 1Ó „м›D" Üè *ä‹„ DD 9D0D.aDmd1d*ddÅd!@Š¤=4Å\@ù41šå8 8.9Ø7؊؃=tä"Þþ°©Ð3 áÇ ++h 8"Ðþ_ýá8"àÃà„€ì|.%ì€1úþÿ€„¼>gèR` ØH¨¦¨/‰'„‚ɤ pŠP/ù,p·ÿà u<?šå±X?(/ EdOfþÿê Ií¬N°"Gþ0o]µHD ã¬ Xt ½t d"¤;žå`Œo„t%à€\ —ä0 <  ãˆ 0/çÿ,*u¸³ Q`Ò5L"5V©Ã% ++Œ>,5=,ïÁC5zxø"5| Ý %=rF5€Æ&P,È/,`€ SG²¿¥@ü ½D ++ ªB `B9Ø8ôQ’G²ô–´ P1ªKÃ#¯;¨—åàŽâàžç” †/Th ƒc XhXç\hºÏÜ-SJG´ÛÜ-ô¸ ø èäÊÊZÌÞØÈZØÊÌè õ‘ Qƒ~qz°ãÍa »*yaz°Ð!šqÀrBG¶  ú ++§&@¦ ++“c)!5ZS[ã2ÙíLó¡à áàÎã ƒàAà @Šå ›å °Šå0Ç»%4’}X*‘>P °šåbà…è5›…¤w ŒU# °Âwù@n # °¾w@o)[N(y;Þþ‡šz9pEYã™h«™ qà`ƒ0ƒâNâææ´lúPD@šåØ¿C[ã,°2 â6¼/ °¼ X†… ¼«ÜC°ÎããxÀ\¿gT@|2" fF12tŒPòV¶¤h jØpËe¶ DÖ$Q ++G¸*1P@#¼D8 š ßàBGº p Î¥:©99%@“s,^íKäX ³ƒ(("$9'—2YD.÷å ++*Y—4/ˆË D• /@Öh"£‘%‘s?ãàÕ LÆF A "ào›:D@@á G(+#/ý |Ñ|z° ¦f$ /$9Lià” e‘ L@Çÿÿ ++g t$tt1”Ç   8ù Í´f1 @”€ PH€*HžåÝ} .Q€"@É%¸Œ³-Q¿´Óˆ@öÿÿ ++6J/@ ½uÕ„{"@®"PX/ÿ$*%ÿ$"L þ´š¬1|ÿÿÀb"¬.¬j¤œ _ÌÁœ”/ÞÿC% èý|ÜCÕó$Dó$Xó$SxGÄëP@BGÔ_`# L¸G°°@“C„ågº £9Œ Tzõf'( îă f^0ƒ "U|"@ž ++ñ ++ûžò  ‚âàŽâ‹’훞íI‹´îúñîŽ%†M’þ%“å‹vº ã% ÉÅ-$31 ƒ˜¬‚l ÝÙö%,)^þ %]*»%jH·+ mh+Î#æzHH b%HN& .J,à,Ú_Mu5/aà“åž÷<@0€áYm¶Rp@àj1EWAàã!ú$1ó/à‰ }ÌÐà!ä@ä:tP ^ã4Ñn/“ü%¸üP,”,tuܘ /MØ/2þQàO@ŠåþŸ??—å{“Ðð ‚â Žâà†â‹í›’í ‹ˆî‹Ží/¢ @ O"â4‘4ÀžíÈ‹½îêîáì ++NŠåïý55×'/q '0'.«ý.¤ý@ ++ôrš¨M†Êðàè'Æ(BGÊ  Ÿ+З^ã ++§^㾧*6óÚ&@±*Ê3 ^7YX»“»v/ 0»64 ï.A»8.y»/0ÿ±³ »“»–«‡­qS»`*/ ` SQà ðOÿÑR“åà¦% Ž$x …xàa 7 ¾´pžåRá߈&dÈ! ’Ù¾´D  DDÌ¡ žå<0â S N&h1TRà 9àžÃ Ý- à Œ/ à'/I#/+¹8à Æ/µK/` /0dyd^0šåðþlpéþÿêTúñó.ØBGÆ ;ð¢à±î ˲& ¯îÅ2D Dö10ž†Ï— ++ÍžŒ) G[Á PG[3 à 0ã_(K@à]™ 9Þ xªhBöEBöXL%’p˜ ?90‚ :€?'ÿ% 1Ç6û%/ š M .q§|ÅþÜ?«¬¬" 0°++á+pKx(´ Pü .-üLx¢œ10úE ø3žå%ŽGà/Iàà.‰¦34R¦ó(ˆXGÈ ²ÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@PÜÂÜÞàÂææZÆÂæÊ@P˜bjÂ/Ð1R@Øö@PPêÜâêÞèÊ@ðR@PàäÞÆÊææZìÂä@ðRR@PPÚäÊÌ@$'bR d LÒÚÚRAbôdRRR@Âè@ÆÐÂäÂÆèÊä@àÞæÒèÒÞÜ@ndphdl@ÞÌ@Æà·R\ææbrÞàÞK!pÅ!P zGÆÑ!.g##x"Ú`!0/2GÈSPN*ªNò8šGÊ8BGÆ8 ++ ·#dzGÊ(/Ð"Ã+ r'HS 2GÊ{ ˜L "@@È&ˆ~%'ª~&~/Š~,‚~ BP% ++ý~Ì´š0Ê8³65Ì8Ú6m — ¢2—¾Ì]‚>— z'—s:GÌ ++Xæ6¹#àÃç,· d-$ ++øþ$,?öD5~PuÀc/ ++XC7`S% !²™(‹™@ ›(ð°› %ú'ï%–$:ÓÀÂG΀BGÎòPºGÎÉðˆGÒ {‚yåP¥Žµ,\#)\#êH#dŠGÐa-AGÒ‰ŽL={£00BGÔë0Ð ²ë' ë ë8ý×xGÖ ++ÌØÚÂðXd* b#C`GÖç%&šFGÎ ++ƒ&cXƒ&؃&؃&Xƒ&Ú“/ìƒ&Ÿ܃&ÿ/C¼ƒ&܃&4ƒ&êƒ&@úŽoZÂÎÂÒÜŽ&ÿÿÉâŽ& ÞñP`,87S' ++ øŽI& ðŽq *åq TŽ: +!­ œ/Öœ'/œ'.½!JðŽÕç3 5 Ýž&W4 ðŽ^ðŽNðŽ>ðŽ¶Ø $$ÚØðŽê#¡Ä.áU=GŒ E ©Í©OIäŽîñº ++ªäŽ›äŽIH.ÉH<.<ãäŽAäŽÈÖ&ÁäŽ4äŽPBGàè OøGÞÔŽWÔŽÔŽÔŽÈŽMÖÈŽÉÈŽŒ/iÈŽ'ÈŽ {àØm ++â\0à8¨ÒâÈŽæÈŽÿÿÿÿÄèÈŽ?Gä¿Ž\æ¿Ž4¿Žœætâ¿ŽAÒGâ¿Žè¿Ž`fPE> ++`°: ++¿ŽªÁ¦" šÌ ²EDPCþ²C4²ê²ê²4²ì5:ú²Ÿî²ÿ$î²2²ø²´0ÜàZÞàèÒÚÒô@…_ÞäÈÊäªÿÿÉöHH*<ª,á¹F“ 0’å’å •Ö³‡å 0‡å ‡‹_ëÕOq)ë¿? “T ++Úë!.Õ!Ô!0õBGð #à=º Û+°Ÿ%— !ÈÀÈ"+ 60sðÁ„å À„åp„å („å3EL­ ö]ĵÀ á0Œå °Œå7E½ ++€u *ä` a $Ú€V1ÀŠåÂÉS°ëØï/ÀŠ8£98£Z/&0xî1Àš˜”9”¡”$Í”/”ý” ä ++=@“å9°] ›¼Û± ”Ô*1Q\^ãÄ33“å 4å’%1à”åC cä[ª½Â"@0Wô ÅÞ0  áðî½Â@@O áL@`10›å1`œVœ0` ã ‚0 ãVáEMOºV¸.¸,@?Sˆ°ˆˆ ˆ°ˆˆ/üþ@ ´+ p´°’<Ì" ` $È¢ü•$$ÿ* pÈ"°²<à" ` €/$àÐò*Ðò/€$ÁÓPh¤!ºs  ++Þ·Y& ARŒ/šþ#/éE°?W-AÕ¿•q!†]<°¬´¬¨ë,.VþÅÅÞ@$/ $Á$$$$@é¿ , Ó /@¤í±¤œ"@ âÔ^±Ç.þùS( ( Ð( /Ù(¸âÅÊ€ÎýÿêZºôƒ3QŠGðÈ#²|ËJ´¼GP ++ð  `¨BGò0%2` ` ƒÒÜZÈÊÎäÊ®  àwãáV@ ã0%Wœ`K% 0T… â@õÿÿŸMóà %àŠT_å) +•å)@Áv>¨ ˜d#ðÞC2NCBGòÈ # ++x s®(? ÖÚ)l?êR@'WPPÂæÚœ)7ÜÌÞ«)“)ðèTR@\\\R@PæÂÌÊZÂææÊäè@P5QZÆÞÜÈ )bZÆÞÈÊ~JR¥ZÒÜìÊäèÒÄØ(ì)opjhlfpì)! #ê(s€ÀB"PÕ¾#2#~húôô  ð &ÜÊðèZîÞäÖØÒæèZÊÜèäòŠ Ä|„íy‡ÎQ^ãn7ß ˆ< ++0—åÊ*µRš²d>ò’ëÒ’"p.Ž# àr: +é:p6Ž" ànÖ›j+³@ 0—åïÕ"Âú/*b.u*bÊO  áeý`eýÍø ¾ ,?žåS$›Ï “åîw Î/ Œ.uŒ Ò" ßG ++BPµêGôàB†5ÅFE> ++Pm+ð0+1ðX5 5 _zGðw2&XšxN #ÊN8~ %PÂGö%2,0î]2îøîøÉî úZþïR î  îxˆæ(•æá—ðæü+1@ Ü/‡æZàäÒÜèÊ!Z P):虹 ¨)™¨ß”ó z ÜÞ@ÞêèàêèB´(õY4ü ‰È®QBGþÛ[€P8*I<, ü=#PÒ  ++0Ï-@,A¨ä, I32È ‡WTãR{J$7w)à‹"Ó?  .U"Ó?<7/£G½HR à‘åà!Å ++0Žâ 0å ‘…>0ŽçòWÐ E˜VW¶…¯Kq‚ Fx¦PØÞÂÈ@œð´8I8ÎX’I• ++L@Y¢IÂò Ð@ ++ ~ÿÿÿþÿ?ýù>ùý¿þòïÿÿø‡À00ñ"˜¨ñ&ñŽ(ó pàå0åø1!0b&1%0¿u10'_ / àB³*•¾ = ìÎ&H± W6lr /Il„l lŒÝ:lWl |LUÅ!ë7l*l ùÁ/ÁK& É.$O HÐ °.e°œHÌ’“ HoHõHB…/5áú&óÆ'T4 á ãCBIãÒ € %ª %‚ % Z R 2I€XBL8 R â &r  ?W?%Ú?• IÅÀ?1·‚d/ ¡%n‘ ²e+æß?F c !;FϬUªÍðÌÞäÊÒÎÜ ?ž( pº , P5Ìa L ù," j5Ð .@€ü€¶@üÂüºü“GŒ ++0‘_ÂI£!‰š£ÿ/IÓ Óÿ9¨FxØÒèÊäÂØÑÑÑ’$ ‹Zïay¨$HƒòêÜäÞØØZØÒÚÒèxB0(1Ò ++±–ˆI ÚÞÒ*·0 þ ø-Dà†åø§aõè (îrufµ—"ufÖt@ ŠBü ¨ü C L& ¡Sn0—å Ý .«^â.0êÙ C@C=T z(ð?Ö{1 ++ ++b@¶X ˜À ++HÒ gшS‚I ++0x0BÈ S=S1ªr_ I SNˆI )) ¸c(Ôà¼c1ìL ±/¹c)P’BIådx,, ++v'ªîŸU`àd®kLf "ÙÞ¬Ñ /…&Ù+[3 //—Fè 0. >íyu.0Ï Œ Œ# àÛ0œ³MßFèòc0õ/©$ ý1ñâI  è äÊØÞàZØÊÜÎèÐ ýFJjkhNikk"0°jlà7F7F%Rž5kÿ.7Fã¯:`âTT¿ã½JTTHA‘å – A ‘Ê4 ++hR¯ñ"º1&/Ê©D X“X'X“X"XX@Ú4ÇR_tŒ\*ùÐ\¯óâ"|¨¦ex/qx °ÿÿêZBIe88 ”bJŒå ÍÍNJÍQ€^ãNfL‘¤EHPxsBQXÑ]Ǩ{< 0‘]žÍAS ^á1ï"aæâ!]!]R°øê ++=&–0‡å °‡å =&/ ++ ÷7M °n79 ´nîlÓÉ0B´E²ØŽxWv »°ÈBI I°"n©TõPSã©C —¯ ++"Þ X÷Û Ú!ààG9æghˆ>0ò+n)þþ  þ00Ù Ú(þ (ÎÝ¥>üG8 ã,&pB+ B æ— `öt Vѯ 2 $fTìújž‚å ‚å* ++G* ++T†Thµ 8ü v ++/¤â0P³å å å,ôÿWCâN7\x± h¢ Ôì""îÔìÇ9 ++DìÜì1@€QW•a ® é”õ ²Ž7¤o“ÿÿê{ïø//ÁR[´Tî¬">ÈJp"¸P¸Ed4¸ '`0.þ &"îŠ ++ð ++/à ++ ++éú Å(´ ¿ ª ,/­ Ž €¼o a  JH#"î0+ †¼†¼tG"?þt/%t3; @€¼t$  ++˜tŠÀ效0/IˆA´:ˆd;†fÄ5/Q Äÿ"kýP/u ++Äû/… Ä\@/ \ÿ\"¨ü / \ÿ/¥\ ¨ù5ð ++/Sá”Í$ 0ˆS¯Š¬ ˜" í˜> „, -ðš@íd0 ÿ6ˆ ¸Jx tq òIe)`¦`¦&œ¨0ª ++8Î&PX2†*æ3˜8BIpI3øí÷‚§@”@I^< ++@T×@tïQšI¨0( f fh[G8I[i  IlfÆ/‚Æ``«I I`ÕHHIz)Û %!ªÛ•V ˆ*9Þà@±+!3jðV`¸/%Ê~?Ir&/"r$/1:$ ?I&;boŒaxä8ˆ’|¼# p.ªD PpPB£$ ++ ßåbÖC#Ic!`êIHð¨–X ðB '8YÅ€.S úI7-ø$`3~%IPòÝ!CŠI î?H`¡#º¡"ÞBx¡(ÊÊ¡ Ê™±™Ø™kÒ”1{70#(\0\ 0íØÖ ++Èœ8Ê/à|¶ hCzI"hß8HÖÊÊàZØÒìÊrýr‘rPàBI6r¨r. <"nÉ.D" ®ö1*ÁA ®O šåÒL"ˆI4 @# >Aì àS3Šåé o—å ;0" p¬/Õ‰°" p¨"È7×"*½ôšBI$ O0I@ ÎÞ@¾“Q8Ÿ °¸ ÔO"Ø&ÃØ " (‡×,"p_)Op›åÃ, .…¸ˆ"0ŽûÃOª .$|i&¿ ++DD—,/–D&D ð"p1T? p›’¤ ++qÏ{ ++@oET'y Žü p` p @øJ p@K_y5‹p z=n£p&V #/n‹0‚å ‚åÁ""3ªý0à€âÀ#3p€ôE(€å,b Šå$ u> 4 Z¹y>4½ šå$ šå›ZùÖúõ9•Aö• T{TÝC‚¤ü%"àü%ü%T+bxp$T´#p† š€è& ’/0Æ.P/ í”?np @€å €RÒÜHp áF¦jKµ#|ØŽ á&Ë!X²Ž¥—P~] ðY<@2 %<  x@íÔ|ǹP ((.×þB ʼИ w<ß$Smþÿ B/jþT//ÅTWTPP 0.IFð 8Ð o ƒå ƒd/*d ì/<# €”€ K€0!E, kìå%Epá@W€ Ç<ܓ܉Ä<pÄbªpš UÄ%ÆÄ<Ä ”& ++ +@†â R$ 0š0 €å,êøÓ½„¤ ‰PpyP%P< P jU æs5_<ÿ/áÏa] °Ó*1ßüÿú(ôOÜüÿØ Ø ´. 4 ôØ ô/ä pä ô2øôpô ô ô*Ùô ô ô„¸ U¸ <<Ð 0ôHô ô0ô„ ÿô~ ô ÁôQØÃ? /….(û„`!ûÿê¹2O8(t@.âPÌ0 ++IvFóêI$xBI&   ÄêÒØÈZÌÒðÜêÚæTÿ&¿4ê#׿4KÛœ9DqDpèhTA \L;q 0”å ”ŽI¸Û€E·JžI Ã0ï4Ï ]  t#Ôkì§ßÑ0éwÅ¥0 –Hp:$^$*Pç $C$ó/ "40É 0"0 ¯6"( §ð;©›þ5·d</Áx÷ `qÿÿê2rN`B êÔMfæèÂÜè~4Hwª©~1VåFý ++1 à˜L÷EŸ`2R€vm4(A¤`(¾5(<@<f¢I&ðýø / ++(R· &Á›–h^xQ;–0ŒHiЀ(2;åð )¸I( I8Ìðz!xŽ;äGâ{l/ ++0’ /Pv*v¹>Ìðz~'$w@(ÚJ+UH ú o ²GpI,Èw#I&QpÑ?I.Ô:I(9X8"08"Ê +!T?I2ƒ*E2/¢8!7š8?I,,=I. ?I0.?I2â/%7Šâ!XJBO"Iâqæw*I4P|j!QšI6J"³dOI88s t@•:Àvw/Iw #—:w FÕDw  žB ðI@s …ˆ ±NM §"àGAÅÂc àåpžk ++}k "0c ?Š‡ àå pžƒ ++/Õƒl× dÀ ½.h Ï=ÏJÏËeÇàå pžË ++Ë ÇÎN?žËÿà Ëÿÿ¦&ðxp .ípO”xHþÿê\ÒÒ0ª-àO7BH! óKGBp H_x!|OsNŠxŠ(E 2 ’ Š% M{òIB ++ p Dl ++Fl ++Hp #™ºp Lm ++ÕJp  BJLNp ›ç,TÕRp  Pp p ÿÿÿÿÿÿåPp Pp 1Vý _z!„q V0\ ++tr 0r 6Pr Pr Pr Rn ++Tn ++Vr ŸâZo ++ÕXr  PXZ\r ¡âbÕ`r  ^r ? r ÿÿÿÿÿÿã^r ^r 1dr |r ˆr Vjr |r 4r 6^r ^r ^r `n ++bn ++dr £äho ++Õfr  ^fhjr ¥äpÕnr  lr r ÿÿÿÿÿÿålr lr 1rT%_|!€q Vxå p ,p 6lp lp lp nl ++pl ++rp ©âvm ++Õtp  ltvxp «P°BI„Nr?ÀI.x ˆZ 1p†Vr/àé Í Ïh|  ++øÔTÀZ"/„ÀZëV¸?p—`^`^ /Õ`^ùp [vƒ ++vƒÿu÷nƒãÛ0  *y ãÛ3vó;<‚BU‹Z`PBIz®oXq Úmt½2t/uª_tõ™t"?šYhJIz ++0þ@ÂI|Ú‡0 ¯‚‹X€8 "äÊÈêÆ1‹°ÊâêÂØÒèò€€Ž5°šÃ½:ì“ JÆÊ+ì@ ‡J—"ÀŒ ++;I“†åp†å(Ùöô ++ ¯Ü&²t È®Šßß1°Šˆ@ JÎ *él ߃šåšåèË™Xìð` á `–åàŽâ&Vã¿ÿÿ ++ú&‹÷BI~  ++ pTÔ‹V° á ¾ÂU­ä†>[ã=§erA" °e ++Q V|’áC&{eÊ 1 à‚uß1 ›Ò?Ÿd ++¸Ò àZò|Wd//œàócøô%I/}ôQô_ —åaB.BOƒåæA4vB.„‹/ ˆÑ*!n«€‹. ˆ?fq å @Š™€Op án© /… =åQÅݧ/î«e °§%n«Ý^°šå>ÿ Oé7(šã v:I~؃ – 7H( ã"I~B„8Aà0I€áÒˆIž ÆÞÚàÂäÊê"0› ++Z v‰Žvaɤ:L3—åE½`I* 0“0v¢J' *ž#††ü& AhÞl‹ 69“5%ŽÊùìd €fädë—½Ù°„ ++Ç’/Å„ @0šå‘îß6’ÔæÑ`?”Hƒa âjC>€8Õ bR bI~6 x'$I‚Nn ++I|hB C²I„B @š3#­šFˆC 8~—o†åpC …†C 0Rß ß ,/qß ?ß—å—å —å ß 0ß sjBIzÐ EúI†Ï Ÿ_BI†ŸˆŸ54#¯ªáŽááŒáÿ–Šá.5Üáÿ¢ŠáŒ±ŒŽÙ.#³ ++±’±á±ÿŠ±±Ÿ’Ÿt/#µ±¢±á–±ÿ–”±–Š±ÿ°”±–’ƒ˜  ˜ ’   VVÃœ~‰I¶IŸ~ÞL ˆ%/¥ˆ%"ƒˆ%"%&p öî<© 1ôe$paà’`&$pl€¥Ü(Š– ^(hSA(ŸeÌ#Ô GS3:##“„"ôp"Ø'Œæ[ & [  á< P$K=0,\Ge 0[moeO á FX®Šùzb£tÀ.ÀJ¡"Cÿ&Ý „§#‘À3Qã6À8(Úg"IrI˜ãu RîSP@BIš{Ž10 ŤfÄÒÜÈÊäò@° á„¾¤( ãÕ1žd[u`šåðqZŠ ›±Ðj/?0Í70°šåpW ›åQPÌÿÿêÀµº(*T"$³bI ~1à Ÿàå 0ålç@&#àä[G (lç '¬jFu}d ++ŽL˜ˆf¤ƒj ++1Ò¨a±bIš¨ ++Iš4 œ– ++¸³+²—#¢Â]ç ʶ]]¶]"Ï(y ö Ou Ý0y“0 ++Ê ðXjIœò–- ++˜v0tVs Iš ++8 Ñò"I˜èBI   IžrËh4¨]ÙÏ{–& ++Ö+@à‚âè3‚Ÿ‚\§ó Æïc‚nH* °d=d°d&ptÿ$d é ÿj“å ¼/1d ¼±õ 0r$|‘{ ++òD0o/x[k ÿÿ,`o-0¡Y JI˜yûZ–»¢»Y#·zZ¦Zá¤Zÿ”Z¤Z˜Z¤Ÿ¦Ÿ°Y#¹ŠZ¬ZáªZÿ–¨ZZÿ²¨Zª ª¬r;#»ê±°±á®±ÿ¨±® ®Ÿ°Ÿ <#½ú±¶±á´±ÿ–²±±ÿ²²±´±´¶³6#ÁZ±º±á¸±ÿ²±¸±¸ŸºŸN7#Ãjû‹Àžád¾  ++HžtFü«¿0¿¿¿ ΔP ß?ÑBDÏ÷& &"  "QÁ  â¸7RÔOˆ0 Þ‚¼  ð î ++EäS&Sã¯à$à¢âr ++ þ´> øPürü"àÌD Î3àÐ _äÌDRD" á'"0(6@@ áI§Ä8`w#gôɧ‘šš@š@Ä<6«õ –jÔ­x·ÛøO  ãÙ¯À" @gÜ "øä„w" @gÈL°  á  DC+M  DCYy ˜à@ *Éà@#°^ßWJ2 Òl/¼~:—82I¼P¦5€w@²Ï1Y ªI¼h :–¾0°·À·ïHIöÌðØÞÎÂÜÈÁ#ÅzÁÄÁáÂÁÿÔ7I¼TÂT ++ÄTþvPQ#ÇŠQÈQáÆQÿ­Q!ÆQ ++ÈQ?IÊJ#ÉšJÎJáÌJÿâÌJ ++Λæï ?ÒÞäT#˪TÒTáÐTÿâÐT ++ÒTîï Q#ͺQÖQáÔQÿâÔQ ++ÖQ#K¥ðT#ÏÊTÚTáØTÿâØT ++ÚT¥Q#ÑÚQâSÈQ2uä QQ MYY["èU ÑU ÎUoÜ  ++)8U ¤K6b&RãrÓ(Ó"eÓ/RزO Šâñ cÇkS5×69L”¯žå ãp52´½"8³±1K@Qã ™Œ ‘åL+/°y!e0³[e€eB€å °®šÔQ!.ìÿ–’ßeøJÓW eW&p+óÝ(¯¥"+±,°,'£x´-°‚[^–"˜W‘ ôJ¤ ìYÀ½¤@k)Ò¦ ß_]&™&L±3ë_Ø´>&™$b&Sã(ÔÄ°‰\MApd.}do†å pO] p£âeÙO ++ƒ/ƒåw_·'0w_¸ ¸O0€å w_Å«ù =Pw_) ¥57”(|É50^ãf0À0ZsÀ€å p€”€4€4C€åp¼O?0žå‹_à²/0‹_,‹_~Ÿæ‹_ |Ç‹_Ÿ§•Ì&Ì$b›L+1ôêàÓ‹<#‹BPãÑþ‹ 0»·_­œ_` XcHçH(? ádd Ù°/ñ Ù°/›ýØýTì™TBSã‡ýT†Í ! ++ äÏá0Òñ ÜH ++ŒHBIÞ  ØÞÎZàÂäèªã` Ü ++&0+@´*KX" /#jX UÐ')“4 pŒÊW1–pŒÊW(¹F ++°ŒÊ!p—O#W– x øß„UãÌíe–‘e–êî­˜˜˜rò0Ph÷2ˆ½…âq:9 póšìü m("[ii:ì¸P ‘åäY0 ã± "0“YW 'iW"0ƒYl –ÿ*œà wëK@3Rã9H Ÿê  Ï›Izò p-´X&ÀàÏfx ›?-´DÁÜ !Xˆ‰’å ’ål ù, Eÿÿêª.‰úO¸Q.ÿ"ªù”ÂIÞ9™˜BH¦G¶#@ÒIÞÌ)!(Žÿ_IÜ@]"hi#â)Û,'@.B ÚpÀ˜ ˜#d Í˜˜ à3dIÊ#¡d*e?Ià’dƒ? SÉlIÊ ++I`ÃdR ÊIܶd- ++ 58J  ëÔÜâdQ'úIÜ,>(påCºIâåX(#ÓúÞêÞåäÞÿÿÿÿÿÿÿÿÿÿFäÞ2IÞx äx äx äx :èx _æ%„x Qèx ?æx äx äx äx äx ++êx æx #×x òx åìx ÿÿÿÿÿÿÿÿÿÿFìx ìx ìx ìx :ðx _î'\x Qðx ?îx ìx ìx ìx ìx ++òx îx #Ù:x úx 8/)Nx oô  ++#Øx %/&¡D x x @/éx ?àx *"Èx "`8 DP`®ëxƒM |)N #x`²ë" Ð «ÌÏP Ô MÔ 2†ì ¨ Û/°¨ Ô °,/ ¤ NÔO†åÔvíðàÒà<R@Šå LcÁýDp@b@šå PP°šå³Z!Ø #Mz°Ô #?0¨ /2L 0Ô ®}0—å q¬õ Ø- ’Ð/YżH(/ ;\ 0”Ç ¨ ++"Ô 0 ðà ÌË ¤ j#.íÿD ×c3¾ ++±( (ˆ¤ Z%Ÿ’å à’å ¤  …ŠÔ^‚å pÔ%ü<¤ !‡ò¸ |Ô(ǹ¤ œ&œ$¤ L+=ôêÌ/ÓÿP ݤ   Ç4 .ºþ¨ @¬þÿêPÈH X/ÁH çH àH ÓH rH ˆH ôH ŠH 7ôˆ‡‹/0T pÀ ++… šIô+ Y ˜+  + ø+ Zö# + W½, ++h}pÞ ±% ø% ?ö%  ô ô #F ++ú ö "ÛZ /K åü ÿÿÿÿÿÿÿÿÿü ü !ü ,#K _þ'd J/K ?þ ü ü ü &K þ Ý¿W/K ++ ä/K Ê„% ÿÿÿÿÿÿÿÿ T$ K Ž /K /K - oK# K >/K 'K ,K /K ++ ++ /K ß*]/K å  ÿÿÿÿÿÿÿÿÿ    !  - _'` K ?       ++  á‹b Kݯx (  ZN 3à€ ++ /€åî ZNþ/±þØÞ  ’BÎÀyè^Ás O ++‹83>^RzKµq8KtaOèÊæè>ã>DåY  +++²¼R™" 1«ÈS9ë»/$/ °þ<!«þ<þP1(^#ÿÿêëyŒ ++ˆ‚A * ñd’pÇ4 wÀþÿêB¢g:Y:KsëPKó eë; ++hà ‹¹~K%t+ ++.˜h:#8¥ *ª Œy2K ++0¥ ¥ gå‹e/K¥ ¿Ø»‡6¥ Ÿò± Ÿα 9 ‚‘x¨¾ ¾  2k/ÜÞ½ çV"‹IäxK  ++° ½ ¹ ¹ /õÍ'Í"Ú͸. ýÍýõ ++#¼é^ƒå °8ö¯õ Y0h˜˜*‡GH/° œ°GG/ °gC`Y 4IQÅ ++9 $P&D Õ<pý Ií]ב¾°õ™  5rad.Jÿq=^,ÿÿêá<ž‰/Iæøõsñþÿê<šYõI*K ÷5ˆ ä`tC¿Øû_ &û-“_ªK“ ++"î ˜é›]/K$îÿ÷$î(ÌpëëS*ëå&ëÿÿÿÿh&ëI_(hëR&ë ++*ë(˜ïY K.µzˆ˜*[Ë ë Dóìó¹óÖó0K,ö—x ¢Ç@/…˜˜ü/©˜!â˜CjK,H× CŠK.× H ++HÌðêF•#ñ*<2ñ}à/K0ñ}ÿá K0!ñ}%K24‹/ÚJóR/K4"ÿÞ4X¿JäläætÌðV=õ=6®ÿî 6Vr×bR÷RN< pÖ­ ©Qà€å¹/€å­jÉjpÖ% o8 E$ ++cvÏs¥"` Ð V‹`"à¡& à©0$Ü`ôß M$°à?pžâÏ ++/Q$#îÎÿb¿aÀàh lxh&ýÀàD·a ðLĶu$%0€u$" 0e$àåpži$ ++õi$Ø"@œ ±.Ëg_B½: ±1*-  ÊÐ ôàp üœÝ¥2p‡@¼°0ôàz¨°0Mb} ++A1‚åQÒ; à‚𧂔KQ 00Q u$[àñຠ°,h ü¬Üðßb<B€å @…30¼@Í ++¥5O á%àqÍ9®m—Ù0Žµ$ Á¼<.h/ ÿ±// hA£þÿê05 ý5%" £f.þÀð†þÿêXÊø KT ˜ÌÂØæÊw.0ú Kßw2K8PwK8ØL%èË'@§ â:fß  ðK:k Ž7ê@ ‰·I%8ÂxY%/8_<_ ò°/%" `ƒ`8K8h~CªK<~hU/V~|"ùjYé/KD)8Í,)“@)àY@' ++Üß߀¬m¨é,ße +¡0Ñ,ßäù1 , DÙâ]ÏÙ(/1Ù´Ù -¨! —Õ! ƒ) í‰Ù$/ q9&à9=¼Y)q9…‡å °‡åiœ ip] i&¡ i0ßki9q9 q9 Pp¼b_Qÿÿê»A,aApZÿÿê>%°xBK> 9° “4=G&0p?Ö Ã ¹ P # Ãí ¼d1["‚Ÿ¨ïÃÔ1  ‹ kí aŸ¨`kí  Sü=×Ã+í£+ óí küé£Æbpšå$@Š­À ".VlÀ=  ä>¤ Ý  / 3ìwÈŸï GÕ¿ÇtéÈcÈ Û ,LÃL‡îk ï+ª”X=œ Æp$ ˜Žç<uç$D_DCÊ#;(;"€d1÷É;;($; kÊZ±ß ëî;) š„ãk]O#6¯/íŸç!ÙË/¦þŸ?P@þÿêo 0°E¬E *}`Dp*Ÿs#þÿêj²ŸZ˜ØÒÄIK>_êK> ( Ò:phÕ=2KB/"mÚ!p/"?êxÑ$/ ++(ï*Úï ++ ïxK> ++(I·cZK@Pp"Æ_ŠK@U#hw??KBZ#5 ++N#OÚK@N# ++D0L/Äš÷·ý³Ø/KHªîÔ KF§:ŽIŽ ’î ŠBвnKFPìEšKH’î/KJ©#ÿ ++%Nþ!8õ¾•|KL  ++ °žž Î)Æ µžfÜž¿º"À.» Â"Ù¿ Â"/YÂ" 9Ê2` ++& - ++HÍ"O ÊKÇ"N¸ ^ÄõZ$R)P ¾.ˆ ñÏ°#Å]3/8ƒ!Pƒ!hÙ#JJRÙ#ÿ÷RVlÙ#RRXÙ#ÕVÙ#ÿÿÿÿÿÿ?KTÑ#VÑ#VÑ#VÑ#tVÑ#VÑ#VÑ# ++XÑ#ZÑ#3JÑ#bÕh` 0á ++vËDü/ … HãÇ “I/!$`8z o BK\i ÿÿui ÿÿÿÿÿ ?KZc \c \c \c *B_^!t` z\` \` 4\ ++(¤?r p"K`pB0„ Z?`PÀbÀ?^8¬3 ʬf™ Õd™ ™ õ‰ zŒdŒdŒfŒh$ ;À Kn˜Ø‹4£‹í ‹‡Œõ1œ/à£æ£ Ù£ Ì£hj  0£&L˜ … { P  p—>_  % E>_ Í1&7Š^ ++~^A2 œ/uœ.²!@Šrg …/…J_&ï. ü/ø¬7én i²pϬ2/ÁE • °æC *M§*M4Ì  ‚N_<iq DSq ¥ <Ð?q fMq p ++ ˜ q  q ¤p q q þ_ /ìÿa  º¦ wi2NR(^8ÿÿêÖ\4›m .ôþãÂ-  (/~þX/‰Xh¹ aþÿê^º @ 7jÀû Xû  _ úKj x—N_lä / ++hü B ++ï S*Kjï €E CÊKnE OhKlE  cUtE ípE ÿÿE ÿÿÿÿ¢pE "pE 0_ràE npE pE ++tE rE ú*ÀXBKv  `T-ïðã`áàãSHÂ+Ú&x~SçBL@ ++m6m" ý@à‚âT`C! z ã—ÁàÀQ»g á•þÜæt+Ý.0Ùï* “?„å èV@Äñï/àY í-¼VÎ'Ó*$Ãù 0A+…A0A­X™dO`å`R©OàãH/-HÜX@{ÿÿ ++¬@r#$ ++hKæ4Ã' ++(ÉY"Kv8ÿPâKv/ò·*Ë|Ž6˜û ,û ËgØ+Ð+/êÿ3/Á3ÔÐ+hz  xÐ+ÊC H¯ êÆRêÆ êÆ1Rá ÒZRâPêÆ! ’ "RêÆÊ–Æ ++V‚©Þq” ++ ‘ÎVG ++ :Æ Û ø0B.XtL ”åS-F&Àà». ++_Z[Qš©FCõF$/ Ý/Ý/0—/0Ý/0 ú[Ý/ú[ (ζ¨š-FLã+!ŠH#W+ P÷`&Z.YDKxXêq¦‘¬h4fBëQ ZKzi7(X¯P9|a(X[f_ÈÒì0É#âù€Ä_Åh~  ðö¹ïJ)ŠÖ 0öSö0öSö! ö!0“öSö˜ö…ö ö£'öö ®. ö 4°ËYÜ€àPâWjdP‡fIð N;N @*)NB04dÞÐßJ\¼ ü³ð—¶/á_šåhÿ) ²"²%ˆ†Ì@½/¦ v0\ …  ÚK~ ++(&a€&a_ÌðÚÞÈŸ`òÀß*Š(aሠù€(a!?  ã! Èx €ÄæÄ`d/1Ä`ŸMòpBK† à ÄêÒØÈZÌðT_"0X"c³ñà“åàŠå à“åàŠåà“åàŠåà“å àŠå°“åÀ“å!@“#(‡N"P3 ‡x‡r(1 à‡ 3üà‡å àšåà‡å°‡åÀ‡å!@‡å@à ãà‡å°“å À“å0“ådó‡fp†å °¨ÑÀ†å0†å†å8D†ç ççpó Ò2Ÿ (<×4ó‡«íp0ð †ÿÿêÚ.BK„ /x%ì zÝ ++0—K& ( 3ñKëKáG`EâHÓ×=S ++Öƒ# ; àƒ3ƒ;ƒ;2“àƒåà ã!(%) -15H3 ã9=jAàƒå ¸  ÿ úeNl ÿà—å^ãd—åì XcóJV/ .=ó$ h&Œ:î*@  ++¾"î¾# 0^i² P ïžáÓŒ ¼W¯(_¡ÿÿê”(””  ”$™¬ìÔß(Ñ& "±ÿÿêà—åàžã@ó1 žç@Âàá/Eàÿÿ¡¨á/í¨ÿÿ¡Ý^Ù^ &Å Ù^É^ ý„Âö€ÐÞPÞŒ7†øR3L r ++>ö ++Pù ˆ3/ ++@((þ[ó‚ -H ÌðTZÆÞÜæèÂÜè‹C á{q}PÉÉ à)Pù/ .K .Kœ1PÈH/0ë4 ëäQëoþ6'é ++ Pã…©ÐaÐa /eÐajÐa^bMPÄa_ —åF%A;pÓ p*”ÇëÇ0ØÕŽ ++ þ#ž$ Ë•—ÝÏš#¸Ï©_›ÿÿêqÂ#_(Pã» (/…   ”p, ++ƒ,ûuû$Ñ&]~˜‚$O ,B½~ƒ¼³ Õ·~&ª(œø„äv_eÿÿê§ø!  %/u¥ )EÇ-0—É:É hÆQŒˆ{  <@¿ÿÿê|? ”À  Œ• /ù „Î(_ûýÿê ”ÿOgTr!r! 'h'*W òK‚ ð8H8„)'8P 2PÉ^ðn hzHÎh€"Â/`'}"R) ++K‚}"/X`hk a/pá bç=P/¢K„–PK‚(B & ++ 0 (DòK†mRKˆ ++@\ZPzKˆ$)}ŠbZ”bZTRR#Âñ#ŽW»xKŒ øè#=u A`'rBêoKŒ8“VŽ“V éXÑ#Â$Nšõqå–õqÿË/ Ã5pP/ Ã5 õqÿ‚ <‰õqª÷o ðŒQ± žB;”ŒQ¨]ŒQT;ŒQ1&ŒQ/.ŒQïY&àQŒQ%ˆQ"ÛD  ãèP èP *1°N£D4Q}4Q 0QÜ0V;ÀÄÛZ4QÛZ¨‚—‚—À«c—[#à‡/‡å4Qÿ:/µ4QY4Q™ <N054QW ËøP@eøP*é²=øP.OþÀ¿àdøPøPøP XM Î k "< )\’)\]q˜°;_”%@ýPbëPëP·; Kq?–PKq– ” Kq˜KqF–Kq ++šKqOK”8#bŸQžŸQÕœKqˆKq?œPÿPžÿP !ìoBK¦Mqá¤K“8˜S˜Sd1_I‘pl2 ,T’¶_f¢  ! €2^2š+°šÄ1 Ä1›a0Zy0T«8N8 Dñ( ƒÂ ñ(jé(š$°Š 6 ž N‚å ¬HŽ&€à¡'”„ ?„å–ê† Èo @µ¯˜9à›ï9¨â#žÖ ‹ï9 ›åQ)\°b Ê j *!j d°ï9‹¡ë-0”Z– pÎ*" j/‘ÊRÊÐʈ 0Ü`Sã[Á} —åxÀcF öÆ ^À†åÀä<À<$Ö®nÀµ † ÉÕ(R²RÞ!¤¤<a å .%. ±•”‘^=0ƒX}X f%k-*]É^ƒå bPÄÅ:#8Ú''F#zF#$˜†jt­Œ¬ò ÚÒÚÁ&œPŽ|®#ddU<G<0 Œ7#Pÿÿê¾#?CâÒ Ò ^% á,  !^ áÉþì0ßÑ/¿ÿ¾(Š /A .bþHs[þÿêfb -ÿ Ž!B Ó&¨g «X@JK¢\¦Ù *hFh3À‰!€E r-ã ðÄ —( :K¢ “]!šK¢P`¤Ä]¢Ä]>¤ ++PâœR*³¦Ý @°j`ß ++#%ËªÞ á¨Þ ÿª5G¨G¨G¨GªG¿ÌðâêÞèÒÊÜèN#'*N®èW0 OBðW÷¿/èWh¬  p1ÝwÔ ¿‰ ª‰ erû¿$"ŽxWawû¿6pl ÷¿õlm÷¿Dà áäW!0—, ÐA"?È" —¦" àD D eMwÄà&  á‹Pƒ$׿ èp ++ H8  Ù6R1…w0 ¸B4 ¶®+m”§¾ Ý|Ï 8 /î*•õu/%º+O0šåAP ]:ÿÿê*¾8¬XÎ`K¬¨ùÎÐ S10©½ bK¬ ++0ÀS®'ï`ÌðäÊÚÂÒÜÈÊäÊS)jë_°BK´%(½I²  LÏB!(,/qBŽçújBK° 8 ÈÞZÌðæØØ8 ++òòÚÌ°òQòÆkD¼¾§•Ò ë<òë< 4iz#0$[ð.Nɲ$ñT ++Ò(g}õT×<² «úž(â\l1/Ml1D`i²1àº`F 0ÓC/åô2ÿ<ÿv/1<ÿD/‰<0XRFàn24xÇ 'hy2ào2 ++ïUB²K°Þ l"r3€ŽG%*Žu"oúK²8Ì0´Ì0a0W€ ++ÒTs#+ªœ¸u ++½¶u ++u6K°É¶É¸Éÿ ++„.ÌðÂäÒèÐÚÊèÒÆZæÐÒÌèZØÊÌÁ¾3-ªt4¼c]Íhº #(ë ißÔ /Ô þÔ ô˜ߘÕ˜”˜¡˜“˜ †˜$œ b ê?pšå \ Nü@ü Ü@Ü'î,£G;^Í (¹P sxf(X$x/5x `´ =W/ 0´  (”^L ^"Œc_ì´ "¾©Ÿ¨k] PT.¼ -  ++·*¼ 8©Dœ(ŽäZD/yDB`; ++?dbÄ p6 /€Ëb-` X‚Kºî ¶î  ¸. ++XCŽ ++%# ++Žkc¼ AXKÊã /äØ /«}_ÐBKÂâ ½ÀWw¾ƒ W.äÂWƒ ù ƒ Œ ÜÝ ƒ ‹ƒ ÿ-ƒ , ƒ ÿÕ ƒ Œ ƒ ÿIqƒ ?dR{ wOrK¾{ v%!úŽiÀ  "KÒ† Âi#3:iƇ ½Äiw¾ÉÄÉÆÉ?Ú0iOäÒÎÐj5~ÅiÎ  Û9ít!߬i©¡$B-þ€å0€å€åà—å#”{âµrÐh×&0ô)ȯšBKÈ 7ðïé"oÃOZ ++€8 Ã7 &½7 3ê #8* Í8*.8*3ê l 7/98*z¢'08* G/lÛ [¬ ++ES ++/Nñ¡€+" ¨*¨* /¨*o0šå š7ó/(_ ++ ÷/é - ††E7|, áäŒ+ ýä „æ! ¨Øy£@ €å‡Ó. °0/Èß ü4±t°3à‹¨‹È /ú /“9#—åp—£/M èc{ ++hƒU3 ²š?pƒåûë”ûë] TG& gúT- /ÍT- X០˦F²« ++¤(–öFfƒ Y(H(ì!¿ èK .Ñþ(.«þóžjG0$>ÿ@þÿ à›åã=þÿ^ã;þÿºx^ã9þÿÊ)/åeKñ$ /UA°+0¸@& 1q! ›A~,88Y~'&Y~»U „‰/ ° .% ("0,,Ð>A~ä` *Ö/ X,ˆ.Ç°Ë ++\ÓŸÓ ’Ü>œo—åSòÈ \Sò°_ TžaSòX„@à>X /% X ‹˸²D¥(—(€dg0Z(Id1ç#<GàþÿêD` ›åÖSýO  ãÔ80°”/å Çò.‘üÜpŠüÿ긚‡¹4JÂKȹ4šp€XøO‰ ቔ@Ir*𠘌L/ ¤M ̤MZÊ#‹Lz.ME (^MÈ­M%² 'x=%òOô !ÒPcx Eä+/p*=ô?KÌYG`! %â Sô7Õ˜ª6aòKÎ8OˆKÊç#7ŠçÖçÿÐçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐçÐçsÔç_Ò#çqÐçÐçÐçÐçNÔç_ÐçÐçÐç ++ÖçÒç#9ÚçÞçÿØçÿÿÿÿÿÿÿtçÿÿÿÿÿÿØçØçðçdÜç_Ú'pçqØçØçØçØçNÜç_ØçØçØç ++ÞçÂÿ3=*çà€0×}·€X  ++èÈO8¶Ÿ YòmSòmM$Ú/ Ä#0  œœÄW¼îmir^ ¼¸îmݧÐ 0ê ãËxSTŒ*¶¶ @>° @k?°ƒå B5tØ  @ (Ñ @ðwààã^á~ªSã|0&nq, _,—­—‚—­8/°ÙC, ˆ ¨¨ÙC+°ÌÙA t ßöp ̶¨<šˆ<"ÜþÚ&Øþ2<8?ØBäB^Kâ$4<0'ÅÊ#/ UWÊ ˆ?âxà3OXKâ3#?J3èÈfH©ÈfYæ  ùx"Ýß­Àf±¥! “š/Z²TÙ²8uRâBúf‚å ú€ú€ú€+Ö8u>/ƒJ J0J ìÒ™R”J“J@rب1x*Q ^á*\Š ºx SF`Xu.K„h¬gèeÀ ht/Mþ+þnP0šåÀVlg¾°¾Œö æÝæ"° ¾÷¾ å¾צ °¾ɾ8±¾ ¾'¾›¬/À  ³àåå ÀHÂÜ/å æ/°ÌrH¾%ì D/¾Dòƒ¾ ++Æà"ʱþ¤<–Ð (Hd0 "<ߦ†Œ e7J. þ¼™Ê 5Ò ZfTÒ ?Kä² Èrt ÂKæès»¿/‰ s z¼= ²Ïf_âKæÞk ++èž¿3 ++ Az(_PBKî÷H½ìÑ ++$à$È°„oIଠ++¢ /}¢ਠ++(åÿIñ ‚BKê hKü ÈÞÌðØÞÎÄÒè`‘T&7écÚOP ++ø ¬ø¦øuR Ì l!‚ VxÈ¡›è +¹îzp~.°l!„l!v® ++ ++Þ¶ ++ ZeÍP!ÉSÊ| ƒÉSÜ!Œ)¶ 0Õ¸’qÉSNÕ¸ ¹ê «Ê”(ƒuASD Wÿ@‘@@Tÿÿ8@Rÿÿ*§” €zø‘¹? ãíº*­rãX€§C@$àA»PýP \<9» `ddd„' àh ¾së` ½? á M_°šP~¶‚~C ã€jÎ¥j ++j ++ ¬p–þÿêFrôØ UÈXq¨ê¶QµE. ¦»H 8±»´Qy"l«!xbQbKêIŒoKì8£Oî¡š5úâ‰#Ej­ôy½òy„˜ð ˜Myby)yy„y~yu u[hµuq^qPqÿ,½ª‰Ù|ÙzÙn`hÙ( ‰ÉMÉÿ ‘”‘’‘/½‘בRÐþÿê:‘Б˜‘P‡# {({ˆo]’Kðoòoôo&MoboGoøÓÇÅUö ÃØkwaa’ÏÇ°a[ÏÇ’ÍúÕ’Õ?÷ÿÿdBdŠ&)o×Sú%Œ!®¼O,¬Ö’þ -8Küé"°ù†uÚþ"º* O§ ++U –11»1& 0ªþªþ /ɽo½ªþªþ >¨h*Mªþ^ ++ÃÈDŠåžýâ M& 矴.þ ++þ T/ƒ%`¤. £/ 1 |ô›¶ l/æ9$ lÏÉÁa— ±˜ L`ŠåtšH/ठ/‰3; /|3;p" S÷¥ZÇ¥p1 šV´!9ß œ%$)›‚å @‚å ‚Ð‚ÉI" T9p®9jÄÝH5"­ ¢ÿé‰@žÿ +M+ žÿ ŸŽàºW£`}<p_PH(8d*<<ÄîÜ΋82E%m‹8“ "jþrOhþÿ*\-/%\.â\  Îa'Èa'Ö>!›ɃõŒ·¢·X.!X H „ö °r°d°T” °=`™$4Ÿ«P øG: w94´@H ´yœ ³9à4?šåi$ ¥ŽuŽìؼ¥(•<‡(u߀ї .™ ++xC¨ìV3“å4V_2ÿÿêéõŽ"°í#5 * 5"°é#.FýÌP?ýÿꎔ k6 ++5Å,þÀ§oŠKþ’`#N ¸¦/è¤6h¤6#€—§(69zÕ(6ª 'h  r H#¨/Xf×Æ&¸Ü#x-[§'PØh˜Q-2Kþ$4( ++ am"nªMPR$CšMR$O8KújM{ö/M .Õ ++.ÿÿ²oM%."¯M  )`M. .l.o.i..$H..$&..4./ö.ºÿ„/‘ºÃiº\/Ùºãõ’8”’‘’’À/‰ÀÎ’ º’´’,-’‚!/u‚ÿ /©‚'/å‚Ë BHB_FÿÿêÕB,/! ++BB_zýÿê‚B,MB/MBP8‰,'M,/M, :ö ,8,Bp _)ZM  ++  /M O Š$¸ 0ø“ ¾<¦>b¥(ê( É( Ð(h  °¢$‘¢$thdb¢$,.& ØØØÐÄŠ~~$Ôî$¼1 ¼@/-¼ :%š:%˜$:%/àºhV 2÷Gºÿ3M½_'€½ HBóúM€7ÿË?M+")M+~ rM`CªMOHMl)QÝ_/M§,Ä M[`½° ¡__^.‹¢K ++ ãp•¯ i• y˜+º6Ë©Jì ‚Ž9àX  ©J8ðšå,À /¡(¢Ø2sÊBID ` Š‰ !Xi _ZMó &M±,¯0ÌðôÊäÞ~B#SêBBÅB"Bÿ·B ++B6ì®àÞæÒèÒìÊF#UúF FÅF"Fÿ·F ++ FÏ<ÌðÜÞÜÜÊÎÂI#Y ++I$IÅ"I"?àIÿµ"I ++$IBF##[F(FÅ&F"Fÿ·&F ++(FHØ #]V^/M*IÃFˆFlÖ2eÒ2[" BÀBë*9Crr0üS0 Ÿ‡·2[ —Îzè°Ýf Hf*fN}OÊìÊÜ__j—/M,_ÿÿ¼_2,_T ÌðÞÈÈ^aà]/M2à]@:eà]ŠM.   . ++-å&ÍJ"EÌ\  cK"2 ++ý†ó–n åÕ \O7\Ñ.pÁ+Õ½Í+ ++Ä'¤.Y¶[YŸÆ+ ²o =$¦ ñ¿§# !0šÂÈ®tM'Æ UŠt% 5Jt[Z /&~w œHŽ Ñ&+0€LO€å zô Ó½ì®t PZ(C5C¨O7N fÁ=æ.ÚþtwÓþÿêBÒN IðÒM.hú 'Àß&h ++Øú1Z0èäZG&'8g1 `>IÜJ'8×ZšM. ++(×Z%M2×Z/M0*#cz*8*ío4  Ð* *ù-*9ã*@È* »*ª* PÞ4¥Þ ,u¢$*`*4I*;*&ûìKžb0Öír×®ûì°š™€d\®O_>ÿÿêÏÂ0YÂôÂíƒQ ++4Â7¹`sÃ^6ì§a, ++`¥_ÊM4¥ ++8¥6¥#eª¥>¥í:¥"¥ÿÿÿÿN:¥>_<ø¥F:¥ ++>¥<¥g‘+D¥í@¥"è!¥ÿÿÿÿK@¥>_Bð¥F@¥ ++D¥B¥ke(J¥íF¥"¥ÿÿÿÿNF¥>_Hô¥FF¥ ++J¥H¥m%P¥@ž™ ML¾!¥,¥Þ}QQ QüQ ï ¾} Ø?ýdQý pÎÁ 0½ o 0€å0¬–®¬–4—¬–†¬–å'0˜0’}åÿ² *}s(b(K < +/ ++ÿ}%Ù%Ô%xÍþÿêDšI*ML²!P‰( =/˜0!_Nü05ßH Î TH_ÊMLI ++PINIoËl/MVIíRIÿÿÿÿøRII#_TIMRIRI ++VITI¯qšÀðBM\ƒ{¼/MZƒ{ƒ¨MX  ++?¨Mdƒ{~Ø £z“V¬O¬O@Qá>V+yP¬O!‘ 8¬OQ¬OD /ÀD&ºDÑØ°·]+›·]'X“@/]X&WX" 0j ¡ EäOƒ7 ¡° ¡·]Þ°—  ¡ µ½pŽÀóãT? —o]w||„ uó3Àßyo]"˜”o]û/°ˆ”ÁæŒ7¶‹@7°@Q\ ‚ p‚å @‚åÆMü§À¯YãW \#~ zôU#\ø€Àšåšå_ ¨Ø/@rs£ ßÀ‹å ‹å—å + d_p†å°ü¦Mp ++.2#p ++p(/Ap[ ++R2  O +++]0 Šâ „ +ýã „  ÿáÃÊý(¬(•(†ÿx’/0ÌXÌß<ž,ṗ ‡ 0ß„#ß$× %°€¨«× °ÖtÉ<ž (¡’8„=c$ ãp'ÀtYn Ynl&ÀpÉ\âÿÿ ++F/^0“åøò ;Xô Ã=/øþC0Š /a #^0šåPý€DIýÿêPY`Cýÿ 0[`ã@ýÿÎ8pPã<ýÿÚÜ G?·Ü Il·ÑX¨pSšåpœÀ/! ÀŒfÚüÿ ++œÿ´&Åüä\"Âüt­ÄÀüÿºp^ã¾üÿÊÀ ˜0HNƒ ++w† q k dÇc,*ä dHMH d;d )³³ˆÈ ƒ†X³ˆ <[ 4]C’å‘ëb‚ /Á hRaÿÿêÈŒ]ˆ°’©Y²MXC¨ ’€ñ°&à:!'€cøï±s@t(‚MXåb%¢ vªäÀÌhž0+ê?hßh'(G 6sÆ". ++ˆàà/"Q-ÚMXG?(¨öJp» 3ºNChB"ÜÈùc ø^ˆ•%?š•^ˆOMZ8^ˆ%M\pß Mb#…¯ÄÒèZæÊè~8>á"u*>á/M`K½^>áv%MX>á/M^Î`Îl,ŠgFwÌoBMjÂuÕhÂuÿ(Âuÿo_b'|Âu#’f 5øMdéù°ÂuR/À/?Âu/@Ro&:RoD mvgvã/ °Ø€ ãFv[¹4‡uv$v ++ooÀ.®oø†t/ °‡*U‹ ß *pÒ†t!®»õH . êu0àà 5kï“Š–…"v 2 ž ˆˆtË(€îH˜ L / x?À$þu¥þu0úu# ài¦þu ¸†! cºØ­(œ(…(tfx>d'(°.óþâ81–þÿ3S"“þ[¥[OþÿÚT/0À£Ív†v" ¯¾°x#gÏ^ å ËZê&Í  L Y Õ  Öy(6w3à‡”‡”³‡å ‡å‡å‘ "@ì”kD9”à8X2uJ%pusÃôŸô’_ÿÿê(3·cÀq *I q WÀ¯WØýÿ ++G;&Ãý—"Àý¯"¾ý¯O¼ýÿÊ-/Õ y Àòy9ÆxywÿHÁHy^ y yPt ++\Ty.õ Tj€Ty /1 yÿ$/m $.®üŒR§üÿê¨yˆyYBMfy hÀ¿ À¿ `NèîX̶/˜yFUMf-2 (xyÂãp?8hªŽ)ï7 Df 'Òqƒy__5òMfƒy>hPø)CšMjø)O0Mb®#yÚ®páÕnáˆá x! ÝÇxA/½ x? ++’Õh¦uÿOÕ_l%x¯u#fJO’MnJpJl+{Jt`˜Ia>ˆÕÌ}ÁÔor  k5²p /Ÿk5ï4 k5 „k5/pÍ má ++/j,wb. °ä"Y ¼À HÌ% ï3C5Hi&*p -¥ä* ï3 ´*í %&¾±P (*Í‹¥ ++ƒ3/ñNpÕ*ƒ3rµ?`Å h“ ++(  · . S úMr3XCšMtX ++ÌðÂÄæÖ}ýsxÆfÀÖ1ÖÖJ  p+ m:/à+ é+ Í+ Ï+ kv  ++êA@ CD†&@3* $ ¥Url1 —N×Ç7 D pŠå,# µ# pGš¢lâJ ++æÚ«’–’†Í- -~2/zŠÓ#~2 ›†´ð.pºJ6È<‹?°‚åF0*böF0:/­F04 j½_¯ÿÿê_Vn ÖÏ/yN&O°šåUvŠÔ. ++’B `BI¼íg‚Mvp W&bø&n0ë$S ++MvV$hF ++C²MxF ++Ht?ÚÒÜtÃM|táztÿ¸0ttÿ¬ztztzt1zt ++|t/ÂðtƒVx€IEcÓFå$cÓ¶ ÉÆÆd~ 8hÆ°FŠå0È÷ÈâÈ\ Rk$ /‘\Å\R n2·’::˜È¨@À’:¨‘VÛ̃ð/ °Zv®<4_G(Q—!‚[S/ pÞÔd$µ·ÖâgTÒâëS! ŠH* XÝžϬ¸˜ÖÑ <ƒÚv.1@_4ÿ/áQPoBÿÿê3îø°|˜  ~<²?l ÜPÉ74ªÎuJM~ÀÎèn”, ++PÜ'8_*M~P"€îhÌðÒÌ…Ut„º/½Y‚  íªr¼o“ ‘o“‘o“Ó“h`dZd?  ã GHAH€ ãRá8›; „Mr/„åÝ _pQã!ºlÄÚxRãªÕEÍ —:˜í Í Qù ++ñ Í ãŒæ¼»@ ¹6! ’CGà @³“Ðò…qP€Bavð˜ 2ÊðèäÂÆèZêÜæÒÎÜÊÈÞ¸pÌÒÊØÈ ö=90PãÍ™Úpà ã°Nàƪ`‹à[u—# ++ 1º¸B# 7¦7˜7 ‹7$ ÄsÄ ÿ  aoSÄÄFÍ;%@Qã¦V‚5@‚X ß‚ Â#³ÿ¦˜ÉC nwaSA=°à‹àNâ6ÿÿꙟÑ0(Âý!õâ –7)xgÐ2|'q“oºM‚8ø5„28Ã7 ‡ Œ ½dŠ  À PTã“ð>àe1°åý°Í[©ÀÔê\ý!°›©[©0 à© dd’d ’d’dPdJd  7H1H Â×&¹$¹"¹²cx0 ã0nàÅ&p$&ìù( BÙ–à(J0 šåP> ÈÍËÍÐC€Í²Í°@>Z͘'öMˆ qh ÒÜæÊäè« €™?$àñ@@PãØeF@[ãLUâlbâ‚âà/@à€.•G°•G' lÆGÄÉñóÑLn °—åÀÐø° À†åÀ áÝóÀÀÝóÀ€ /ËÈ#.°t³t ¡t“t I…:d$} —åx blÌ ZEBLEB^4'È=å0±‹0qã;ùÒ,$ Ñ^4 ŸètÃÚXF.×!P.èþØ .Ùþd ++Ë(&¹þ#àüZÀj ++ àBàxànâF€à‹â Bàí|Y D"à3Š0 j¼Õ3]D"à~ºÀ4Tâ2jsT lh^=Åhd5⺠Äû ++1 Á)é Û5F:5±MÌÌ\\´ýMÀýMŠ11Q¡˜“˜/ °`,°`p`¨='`r`H H­Ÿ`/ PE-`L("þþv¼ |9 t/± ++tåP/<X [ F8S8c´þÿêpÍN°øN °&°X<xC[ãJd  /?  H-` ` ` !4° áEÝ \ ,ÀhŒÐoŒå Œå\ &°\ °\ ,“\ ¼€\ ÿÿ[ <\ é4 Ú Ì@ºþÿê<}Q€ kØ/FØ+4Ø” ++&ÚD-â/šB @.€Ðþt ìtÞ€ Ñ\À—å[ãxª|?pk|pË |pï |p|t |8| ˆ ßÑ@x ++.ìQ¶ÿÿÚ ì.Kâuöì(ìì  ì$ƒ$ìüßÑ¿ˆ( .ûþP.âþTÓ<ų¬…¬n¬œ/°4 /q 8<œS:j œl!Ýl ¤ÿ¤ @íŽEh ß4ÝU^Ф(T@^ã2HÀ-°nˆ²P  ¸’P¸ ++'À´€´ÿÎ tT ++gYG,)|.ÿ ú´/iŒ ß¼\Å\¼`¬¼ /´ {8ŠtþÿêZ²{à/p¥ ++ ð¦ US¨M†VC%xaCpÏÀk*`/é0 Zˆ}?(h»èŠhC ˆª. RÁZ¹$ˆC€CxϘÀC`hC€C%qRCÚ1_ :MŠê#Œê# Ðàï# ‰ï#i’ èï#6ï##ï#(tQý171€åRwÿ€åà—åà€å#à—å#'$à'$é'$ Gj'$o AÀãA" ++¦ ÷WÞœ<…fHl.Ú¯A1àƒE ; àƒ/EƒÇE ++n“àƒå à ã!(%) -15H3 ã9=ŸAàƒå#—åV .¥² 0ž"J "ësF_`Šå ü#æ 0æ h/¾ hMpiptyü 'X×eÆKœ  VKj@Vo .Õ Q"pB®@šå,àŠåô.V*º # Å8@´[/ÿ‚_`Šåœ/çœ'ÖÕ>œÉœ  ,œ±œ œ “œ /$`Ô{œ/jÔ ]œ (ÔEœ48 'œ P//þ /ñZ# œ.Ùþ 'r Èœ^T»:°¾­À°Ä/–#ˆ®.VÌŠ/zL ÆcH`HƒL 2/8/PhW`hWQ @‡å(àR,‡å</<ž|" °. „/)Í=Ù¥ €.Ü3à¼qå 0å ¼.åøø/êøø<×Å>$ê#üˆü¿„ 8/¬´ l/™ll² øÔ\È O.Tmî_Ô , KrP/@Ïq/B¤ ì1ì&îž/ °ÐÔ  P ++¾xC„å 0²ê2ï¢ÜþÈb·<©&šŒt:`(Mx:"´(û’.çþ(.ÐþP½(©–<q.cþL>1P ûkr.êýÒÑÅ´<œ(~<f(YH<0(#<úðXí.ÜüT®.¡üh(x(j(.Tü5?/üp/QÔ.öûXóïûÿêÜ’M” äÊæêØè@BMŽ uö "ÚÂÖÊZÂæÔ9QèÚà •0€Xâ¯9Ñ 5#ÝÅ xq#„)S„å„„„„„„„„„„Í;QzHUS&SøR0šåÏ` ++R2¨YAÞ ++"H"T:MŽ„pÞPÞ 7†z6€Ð¡P'x [\[@[ //€?  ž( AQ1à—ä)0 Û``VxpL<pÖ­|"@"Xä'9”H"¤<12öx1.ö AÿöAQAºM>(¨ ++CêM’ ++¿¨ÌðØÊÜÎèÐ#‹ºi˜ ø8%D_'à—å' ++Þ ++ñnž  ++_– A_¶ ++ëLò°  _0 á°/Ô† † ݇݇" ‡é‡‡õ‡õ‡õ‡õ‡õ‡õ‡õ‡õ‡õ‡õ‡‡M  +I?'p›+I ++/•+I"Œ+I³N$ 3I=#›Š |¦½X"k¢ 6 /^fÖœFœ5fœ/(jd#œœ#ÿ„œ/òŒã#œ/ڜɜ ¼$Ô¤œ/“Ô †$Ônœ]8 P$Ô8œ'œ œ ,vgH ¦jò ,"pœ,=›î/äœ0pþà›å4àŠå ›å›å'À\È\ nÀ†åAî ã*.³ 23àŒô2T¢:0>œ=/”x= /‡ä,# hp@.'bF•bUŒ4º  š.=Ô ‹` ‹3 p‚&‚<)¦$:</®#t OpåtîX4`X4#0ŒêŒ<Ú 8Ç",0¯L f—Ð 08<ƒjH " X&L \&*á ++\&4 \&&t/0H OÓPopƒå ƒ81¤HB$" 0(¨)¬ Žl"t ϾO0€åšl.éÿâÕ.Èÿ~¨Äª(/œÿOQÜ•J2´)( Œ÷&.äþ(.ÐþÒ¼(¤(—(‰x.rþÈeW<F(1( .öý<ßîÁ(©î‹(sîU(=î(î.éü(ÑÄ<³(›Ž</}üÎv x%úÀAú¼ûú ôûÿêÞšM”=e«X«ÈIZiRM–ˆc@/þ/€ (ÿK`d¨H*?€ˆÀèª) žx­À '‡ØP ³€<ˆ§*ûr(BM–¸q( ++ ½CšM–½¸½CúM˜½‘¸ÌðÌÒäæKz†ÄU©šµN»X XFÚo $;m ´Z 0I3=R^ /Ïÿæ‹:‚·ÆOî í- v-šv-ÄÞÞØÊÂÑ‘¨œ¨¾(بF×|ˆ¹Th h.œñ‹TœT¯ÄîàZÞÄÔÊÆ«‰“Wžÿÿÿ,Œ ÿ%ž«_ ++ÆÐÂ䥕¥ üÿÃlû  û?ÊÞÌû"—V¢VÿÃV ¢V?¤L™L¤GÿÿGF&¤öÌØÞÜêÚò›¦¦òÿÃLò ¦˜ OÜêØØPP¨öÿÿö4¨¤?àÂÒ< Ÿ¤ª¤ÿÿ ++¤4ª¤ßsÜàäÞÆÊÈêä\衬¬¬ÿÿ¬4¬F ++_æòÚÄÞö£¦®F ++ÿÃq]hÿF/&U# Hå ‘¼ ++í1å o;å.»ÿe#®ž¦¤å o<^Š³1xô/Õô•']ÿÿê8êˆ<°hÈ"7 X> ¨ ‰h{"  +‰_ÂM°\ó ++²þOHM´ï§BL¸ïŶïÿÿÿó¶ïÓ/þð}¶ð ++¸ð_ÄÞðâ #©Zó¼ð“Íoº HûÛûÈð“@­ûû û,‹  Ï Ïÿâ (n\-»,•»%»²ƒ »º»€»°¬d ++¦OBMºÁ” ++¼Á”ŸÚêèÂÄØÊZ®«ñÀ®Í¾®ÿÿÿ³¾®¯x¾¯ ++À¯?ÒÚ±&#­š±ÄRÅÂRÿÿÿóÂRÚQ}ÂQ ++ÄQ¯ÄòèÊìÊÆèÞç$#¯ªùÈùÅÆùÿÿÿóÆù ù}Æù ++Èù&ó $±ŒSÌÅÊÿÿÿóÊ ++‹Ê ++Ì?*ÒÚ-#³ÊÐÅÎÿÿÿóÎ|çO#~Î ++Ð_ HÆÞÈ44µA·Ô£ÍÒ£ÿÿÿ³Ò£/¬£wÒ£ ++Ô£HÊðÂÆèA·¸Ø¢ ÅÖ¢ ÿÿÿóÖ¢ ¥‹Ö¡ ++Ø¡ ?Ìð™!»›¸Ü÷ÅÚ÷ÿÿÿóÚ÷ ÷}Ú÷ ++Ü÷"šÿ#½&¹àÿÅÞÿÿÿÿóÞÿÿ‹Þÿ ++àÿ?&ÒÚ+#¿*ä¤Íâ¤ÿÿÿ³â¤l£w⣠++ä£OHÒÜ¥#Á–Fè®Íæ®ÿÿÿ³æ®/ܯwæ¯ ++误äèÈZÆÞêÜèæ¯#Ãj¯ì^Åê^ÿÿÿóê^)<Ù÷(~ê` ++ì`?°ñÅ•FðñÅîñÿÿÿóîñ ñ ñ~îñ ++ðñ'X#ÇŠñôñÅòñÿÿÿóòñ<Ø4Œòð ++ôð¬ðÉÅLøÍöÿÿÿ³ö,€wö€ ++ø€?äÂ*ËtFü™ Åú™ ÿÿÿóú™ Ï4‹ú˜ ++ü˜ ŸHäÊÆÞäÈöÍgF/OöÅþöÿÿÿóþöö‹þö %OöæèäÒÜÎõÏgF/OõÄ/Oõÿÿÿò/OõÄ4Š/Oõ ++õÂ4ý!#ÑêýýÅýÿÿÿóýý‹ý ++ý?"ÒÚÿ)Ó¶L/O ÿÅ ++ÿÿÿÿó ++ÿ/|b/‹/O ++ ++ ŸHæòæèÊÚZ`X×¼L/O#Ì/O#ÿÿÿ²/O;¼Ž#v/OŽ# %OŽ#_ ++HèØƨÙdF/O¨Í¨ÿÿÿ³¨§w§ ++§ L!Û_F/O©Í©ÿÿÿ³©©w© ++©þ±!ÝaF/OÿÅÿÿÿÿóÿð(Š/Oý ++þÿ#ßoF/O ° Í° ÿÿÿ³œ± w± ++ Z_èÐäÊ™4á8@/O"© ÃX Ÿ\¡¦O —å Äú/Púé0úés ƒå ƒ+ƒ‹©„É‹©É§òä?§ ó§ #ßÏ9§¾w©9§0’mx0À~¤©Å"¯ÄÒÎàÞæÒèÒìÂÒãªÀ8:Ææìntñ7îíúZÂÆÆÊææÒÄØÊ~BO$ Ç×8*›Ö " úö +uÛO šåèð¤ ++bB pñ)Ž ¾1Í yÍqD qHB„å v© ++øð%Ú%0 ++zAÆãÚTÆ' ++H "@úAO$ÅLé#åb(ª ++Ío& @ª ++:û/'ª ++?& ++ª ++ Ïþ? 0‹ú 0/ 0 ++ÝÛ`ƒå ÿÏûÿÊ L·r  r °/¢uê‘wÿ°Pr /ƒkÔr`sÔbr Àùé çÓr Aê.p\=“ú &ƒÒ¤ ++n Hº 0ëÐ º $ j ¼¦ ¤sЗ‡ëÐhxWB*ê ++  (.ûþCÎ& %/0.Æþx]¿þÿêL& ?&`ž¼l`K ,XFâ(ÍA—(O& ƒ _:O&ƒ ++(ƒ /Æc½!#ç‚„,„Ío*  ˜„Å.².@—.ê„z„j„ñ\ êU/ êk×êL ((ê/žïÖ+=Ö;p]4ÿÿê0°?*`d ++˜Ðr. Ê_ ’O*G ++,G¯HÒÚÚÊÈÒÂè·#é¢J.g¸¿ »&g¸;¸N ÞÉ1ÒQêO42 ++8#¸%O.¸*“kŸZäÊÂØZàÂä®Óë0ÿ:0OÒÚÂÎí6t Í2t t ²t Ÿt @„t x ¤ i X2HH ;H %À#ÀH  À  „ ˆ< ( í¸Ö( ¾±¡¸_ÿÿê‹( ,/ñNp]Gÿÿê*( >2¸°IŸ!O4Ÿ& ++h°  _ úO2 ++6 OÆÌØó$#ïÂÞ<ÞÍ8ÞÞµÞ¢Þ@‡Þ{Þë%M&ÿG  _~ÿÿêŽê,ýêKp]Dÿÿê,ê8ê:A’ý/ ++@#OO8ú ++<úØ ##ñâú@í »ˆO>  àÚ[·¯ âRã ++ì` ‘åR±þñ ++âPã ’Ø ŒRãúÿÿ~  '0à­þA„åÄæðà‘å ^ãv ‘åã€pEîUî@üà —å ã0Šåœ&`<Sp–嬀@ ã ð–åœ*…¤@0šå|°ãà”L?j@íÿ '0à?ê@1@†åôíÿˆ ã á¸T /5°ט0Šå ŠåH³ëR}G$œ0šå šå«òpÐEÊÐ Z.¸€ ++X9&ˆ ax9RXcåpR`B,yå"X} `O> ++0ƒ&X(n@nßHÆØÞæêäÊZäÊÌóB]$Æ(ˆ| L]$@ ]$  ]$BË 1$ˆ (ά¹¼Í $B[Ë  $ ++B $ÂÌCÃ#õòÃDÃÿTÃð?3Àº&Dº ÞžRZÌäÊÊé{½!ùÆ&`θ&F¸&~$PTãÝ ± \d7R” - < ++&F ++& ùº-2?$H¶|H !ûrL:âGJ(¶l(J( ýTDN ½hL ð k&°o/E( e o" °‰ sP‰… s@ü @ŠåÀL °šålD  áý p ®,ùpWÚ ŒHÀͱ'Qà‹åŒ ; à‹Y&ñ'1à‹-(!(%) -15H3 ã9=LAà‹åxšwo^°‚åÀ‰Ù °<úÙ(À´ t@`@À‹4/0ù'`| pˆú|p|K| p.88/- 8%8 0p" œDp á‰Ãf0”„@ šåœ44[ Á40\ù ÔÁ™](…p=__,ÿÿêá/(`é /åé HÑ(pÊþÿê@¢WHWg:OLX:ö p[öE2ð)Ùh 4h )/ /ÑH  ( 'î ?„åÑ Ð<ÑÊ b p¦  1÷mhö ++P$  X£5Œö ++‘ö0ä˜ç”<$ ++0B ¦  "Lú(PõRâOL0%N%/=ÿ&R&½oP `‘þ£ë‡‘® ‘ Б ªĪ¤‘~MNƒå .€. ƒ0 ¾k.  %4 ¶T¶¶?¶$,¶$8  p"@‚”Ã(¶‹ à†Írº¥Žyºh_5ÿÿê×µ,/!@ï/6µ?PhLÿ L( b7ZÀúBZOGRG/–G$GVG½TGÿÿÿÿ@TGÿWHITH ++VHeÄÞðZÄITTZT½dX hTTa‡À á ŠåÉÜÉÇÉ]T°Šå À]›h4¬F]"¨]PŠåÍ^°šå ÀÍ pl lN^lP…ECŠål 5@ šåhh ®Üih¢c Jâd @.V <†<†=<†<†<†<†<†<†<†<†<†<†<†<Á èl#:pè‡åÀ‡å0›¸.a3à‚¼±‚å À‚å 0‚å4¼‚Düü 5üª@Dæ P*#0àP*cÀ€å @€ÌN€å°DЈ D°†å$ˆ@»4 ++`4 ++€ @‹åàšå0 ++ <§H 8„ “Œ Ö@ 8/€¼`¼+‚À ‚¸j¸ D0†å ¸0€VA À8C8 °e 80$* í„L" ° fày° ­[À­40äLpšå0f@ÝÜ0Ý ø,ÉÝ!¶£ö:yÝfRZ2>()x.ýþŒç©Ö£NA -#°f)Àk<¡¡°f)OÀšå$èwþÿêh²kwROXX *Pú ü ++øü ++ÿ ü ++ `ã ++E€ ++ˆò ++£<äx E¼Hp#F䈼.`ÂÚB5RêOXàG  %B ú_ZOXú ++Zk ¯HÚÂÖÊZèØÆg g bg ½E` ¨/ {×”./p—“u“òšåéÿÿê ++BBü8BO\  @ ÄêÒØÈZØÒæèð>?&R$ö ¸V¥Vµ[‰VŠVr  »"P&Sã}üà ãŽá áàŽâÎã¢o’À’‚]l’4Ú4"60Sø Æ/³#5³#“#î@—å¬J;!f ð‡å °‡å ‡åà ãà‡åÿ_ ã f ;!* f" Žo!¸A0£!;! /ð௠ ¼œ¼Š0à ãN€ ’åàŽâ Ÿ|ÿÿ ++úÿÿê‘>,/ÃH4A$:Z¶3LPL"Išñ \Ù*‹¦`b0Ò'8}ñ*O\àBO^ =º‚Aà á@7ÿžåžå0‚â °—å q$/ q$Ð ++/ | ü †å `Šå&PãU 0—å —å, ‚âˆ/HˆL/ ˆ4 . ¼-# í- - 8r8„„ Ö@Š2ï*ÜÊÅ´ ++±–4£VîŽ ++ ‚â0—å Àè(À(O'°z °Q.a$"À†&O°š T¼9R0†å°ð/, À/:À˜:L: ô„"`–@'ÿÿê *…ÆL ƒå @ƒåjïÜ ÓÜ ¿d (˜Šdx½/h +h þ_šå]ØVt.íþœrÙþÿê<¢í/ V@:€ô ++* î ++/ ++P› ++:5¦è:xI € .@<ì5R2O^ ++,8)%c' ++ Bp·:ð5`þ ++OO` b Py0r   j ½hÑ0Ï#ý8*‹5 ð(/™ð(0šåP*ç= Q‚B = dàfd I@4 &0éÊÔ  , ++–/y, ++¸, ++Ûß-?0šå‚p Û- å~—Û-  Š | j 4dø |. ++"B ++·/`û5´2 Z ‡å  CcC  ã6‡"*mîD°šåò ” `.ò"ÿ,Ñø ÿ, oÇÿÿêIïÄ }Ä oÄ O¿Ü 0×/½× ÐÃ6wÿÿê2‚© öSdJè òè  âOdèBOfè ˜è ¹d¯à á žåè !è (/ dì ?QãRì Eì (1ì / à §È @´ÿÿê¢¥ä °ä ŽZ´:]å °ä qÀ 5: cä Ia ÜVä ä ¼<0 ä (ä 0šåÍ4ì &ì ‰ì 8gì  FÑ° ½ì £(–ˆdv• ° ++ ê+‘& ++_šå[ØTÐìì WØþÿê:ì   ++€Þ  Þ Þ (O:OfÞ /`ä 0ôR’OdTÒ OJOhê j ++ç Tè  è nè ½lè œ¸ílíníOÆÞÜæí ítí½op  ˆn< ”J `$¼0@© ++2 ++ D=p ãV h$pý”# ++V ­V ƒ5;h$´Mqá áàŽâæ  æ p¤À¤Ø^æ 1ô/0`%ì.¥â zzô~/›åz#p¸#†æ T+z/ Œ ² 1² zé9¶ e¶ ¬z›`_‰ÿÿêŠö @p ã¼ Ãàžåp‡â&^ãYÎ /°T+5T°TDŒ=´M’?0ê‹Hüxš B‚Op4hš š # QrOp‚er  ð‚ò   Ò FëD  lnà—åŽ!/: B z . V –i\ X ð"Üʾ³æ`ÒK ++0âdävQ 0ú ++°ò = ì)(: wâ å: ’Pr)rÒ ^ ^  ºÐ* vQç/åç ¤§=$ŸFˆ?Á ++Vk ¼ ++Ü!­ ++H­ ++• ++R âOrA ++g"€gÕÜ, ++t„?@€ €~€½_x €úL›E@à áœu0à“åÜ.*P“0 6QQNQ`’åQb0 ++°fQ[NQ!‘ ++QNQá ++q0’å S 0@Qã÷ÿÿtEßÿÿîàî/îºàšåÌÿÿê0“å ++R ++RÛp! “òQ¿SÔ5Õÿÿ ++R ++RQÐÿÿ ++ù¶Q“¶Q̸ƒà“åãɸ¾"-/Éè¾"#Ovq`. a@0x8PØBOz… ++¨Ü"6¹ˆ¦Z ++°Z ++p/A$}V ++‹E V ++ n \<5ª(> qR ++4R ++ðF N ++°b5N ++%/ùN ++-N ++ ØN ++ìN ++_‹ÿÿê"Îw'°N ++!°‹N ++\N ++X,Gìx@ÿÿê(’º"O"Oz8 ++ÒA ++Oz`|á{@8 ++|8 ++p8 ++  ïã; @‘â9jH ++@H ++”  H ++ D`&ø¥ ++0ø 4VLP íŠO0šåŸP‰à ++œÚà ++›/à ++,à ++¨à ++ !hLPbO|¿ ++.² ++÷ ++!_2O|÷ ++%IOz^!_ªOx ~^!DO„WÙ  ‚ ½€Ñ ,A/Ñ  ++Ñ zzQ#O2O€ó‚ö /O„éé_°BOŒé½†ö ˜ö !Nö /ö P“ÿ0âSãöB Þú ú Ëú Úú Ôú Ïú Ëú Ÿÿàâ^ãÇþ 4Ñþ )7pþ R"O†þ Öˆã/ þ &À ½ªª ¡ À ? pœ\ ++… „ À q _ 1À ø ++\} ++ 6 ++ Vp áÀ ++ } œå œ   H!C†å   p &  dp  A ² ô šö ++ˆâi ++X ÀÚ/$À>C < šJO2OˆJõ"OˆðBOŠ ( ð.' _ —å  @ ` œ©  ñ $œl‡ Tàâàš $“å|¢ T–)a”p® —å—å pˆi¦¨<ÀÌ>² €å $UU^D$0D$G0j0 : p  -ð}ƒå ƒ „$j€ > ++be ¶ ÙäÌÔ1¿ò ²¤< ++oØ/Ød@"]ÿGMjOŠ!¸ü hD!xÀ#ž`äæ`º#"IOŠ.`.J:Oˆ.OºO†; Œ; b0O’ Ĭ/8C  D Æ_hBOD ½Ž-‘'7p-ˆ-Žòò?O’-¯‘–åd¸é0/q £n ++å†å‘†å †å†éd"à'/q% ¥/ÉC)ñ9 ?`ŠBO”Ìø°%gO1H"½k /ßç×F 0Oàƒå0Ci1 ý· ß· 0 3Ñå0›q À›q+°\p^O ‚åc‘¢/k+LŠ• °@À^ž á À—åpHsH"Àéà3†åH¯HÏ ñ€ ·8 lNl€´p 'I/° P57wDCŒ{p³µwUÚĉ«“,†(oW¢˜ û9(^(ÿÿêæ#/åþí3P.Ïþã ðÈþÿêFÂø Oš˜Êääà0ú (g”xOžæ8oXO ‡ ° ØŒH'Ѐ(2nð )¸ O˜ÆÂäLOäHâ ++>êp|x i "P™ CòO”] `_`_AªO–6œÓ/O˜_ŒÙ/O¢_Ýoœ h_ß_Ì_ÂÞ3 ++[2NÃ*N ++[4_[ù["Œ[y.€4H’ /oh‡+_h‡ÖV/Q‚#L/9S@SœŽF3"H*ÀSæ?+ ð‡ýS °p S&WäSDÎSÂ5 ++<кW ÖTØŽMÐÉx x;  6| |K.zW /àˆK/i$$YŒŠ°¢/L 7/4 k î î îk  k  ËÚbYÅ ­R ( 6| @?T+¿ .üþî6.×þPÀ¨c .šþû Š(y¦O 47 ++/¥ ++!Œqþÿênº ++7Oš ++0^Z(`œ`Ož ù (P¤ÆÂú /¤ú ax” ” ++Y0œpX˜nˆÂh±‚ ++/ ++(sN*m ++Oœ l ++_bOœl ++ ++¢l ++¤l ++Шl ++Ýo¦ )èl ++"l ++.|l ++.r4l ++‘/<l ++/0l ++/l ++/l ++/L7él ++4Òl ++4»l ++/­l ++;/”l ++//~l ++'/jl ++Ÿ/5l ++ /(l ++/l ++/l ++ úl ++8âl ++,Íl ++€ I/Ý;/-€ ÿÿV ¤,hÿ| .òþ(â(Ñ0  H\{e L>, 'P.øýÔ.êý, Ú(/Éý, /‡ý, /e ++, qŒ_jýÿê–, ¦, 2Rª ++ÆÂ- ´- ¦- ;.‚;h [x(JO¦P / ++(Ÿ -¦Ÿ _)âO¦Ÿ ++¨Ÿ ªŸ #ªŸ ®Ÿ Ý_¬ 5 "?Ÿ .,Ÿ ."SŸ ‘ìŸ àŸ ÏŸ ¿Ÿ ±Ÿ 8/™Ÿ 3/‚Ÿ 3/kŸ /]Ÿ ;/DŸ //.Ÿ '/Ÿ ŸåŸ ØŸ ÇŸ ·Ÿ /ª 7/’  /}‹ #/jŸ ‰³ÿ°/ñ;/A³ÿÿÿ ¬|pgO„B(2(!¬ .ßý\Ë.µýKœ.Žý_wP`.HýÔ:_*(_ /×ü_/% _.ÁüŒ_ºüÿê¾_¬_2S° ÆÂ`Ô`¬`';$.!ª;›]rO¬ Ò!7Ò*¬Ò_5bO¬Ò ++®Òʆ#Ðö/O´ÒݲÒÿÿÿÿÿÿÿÿÿG,Òÿÿÿÿ²Ò2S¶ ÆÈÒôÒ²Ò'²Ò'²Òp²Ò#7Ò*²Ò²Ò ++´Ò¶Ò#ÊÒºÒݸC/ÿÿÿÿÿÿÿ1¾ÿßC/ÿg¸2R¼ ++ÆÈĸ'¸C/p¸Ÿ ;¸C/¸Ÿ ++ºŸ ¼Ÿ #!ÚŸ ÀŸ ݾqÿÿÿÿÿÿÿ1,C/ÿÿÿÿÿÿ¾_2ÂC/`ä`¾`'¾q'¾qp?¾ Ò!7Ò*¾q¾Ò ++ÀÒÂÒ##êÒÆÒÝÄÒÿÿÿÿÿÿÿÿÿGC/ÿÿÿÿÄÒ2ÈC/Ò/ÒÄÒ'ÄÒ'ÄÒpÄÒ#7Ò*ÄÒÄÒ ++ÆÒÈÒ#%úÒÌÒÝÊòhÿÿÿÿÿª ÿ3òhÿgÊR 2PÎÆÈP /¬P ÊÚ ++jl ++ ÊòhÊl ++ ++Ìl ++Îl ++#) ++l ++Òl ++ÝЯ9ÿÿÿÿÿ,¯9ÿÿ¯9ÿÿÿYÐ, 2Ôòh- ¼- Ð}'Я9pÐ ;Я9П ++ÒŸ ÔŸ #+Ÿ ØŸ ÝÖÝ(ÿÿÿÿÿ,òhÿÿÿÿÿÿÿÿ2Ö_2Úòh`Ü`Ö`'ÖÝ('ÖÝ(p?Ö Ò!7Ò*ÖÝ(ÖÒ ++ØÒÚÒ-D©ÞÒÝÜÒÿÿÿÿÿÿÿÿÿG,ÒÿÿÿÿÜÒ2àòhÒüÒÜÒ'ÜÒ'ÜÒpÜÒ#7Ò*ÜÒÜÒ ++ÞÒàÒ#/:ÒäÒÝâC/ÿÿÿÿÿÿÿ1¾ÿßC/ÿgâ2æòhÌâ'âC/p⟠;âC/⟠++äŸ æŸ #1JŸ êŸ Ýèqÿÿÿÿÿÿÿ1òhÿÿÿÿÿÿè_2ìòh`ì`è`'èq'èqp?è Ò!7Ò*èqèÒ ++êÒìÒ#3ZÒðÒÝîÒÿÿÿÿÿÿÿÿÿGC/ÿÿÿÿîÒ2òòhÒ/ ÒîÒ'îÒ'îÒpîÒ#7Ò*îÒîÒ ++ðÒòÒ#5jÒöÒÝôCÙÿÿ– CÙÿÿâ ++š =Ù5ôx£š'PøÆÈ%Ù%Ù]ôA ++öAøA7„àüAÝú3pÿ÷,%ÙÿÿÿÿÿÏú“2þ%Ùú /¨‘új­ ú3púl ++ ++ül ++þl ++9‘ã/Ql ++Ü/Qð@ÿ÷,%Ùÿÿÿÿÿÿÿÿ‘/Q, 1!Q%Ù- ¸- /Q¾&/Qð@o/QL:/Qð@/QŸ %QŸ /QŸ ;Äæ/QŸ Ý0ÿ÷,0ÿÿÿ3pÿÿÿÿÿÿÿÿ1/Q_2 ++%Ù`Ø``'0&/Q0oOQ Ò!7Ò*0/QÒ ++Ò ++Ò#=ªÒÒÝ ÒÿÿÿÿÿÿÿÿÿG,Òÿÿÿÿ Ò2%ÙÒøÒ Ò' Ò' Òp Ò#7Ò* Ò Ò ++ÒÒ?÷é/QÒÝC/ÿÿÿÿÿÿÿ1¾ÿßC/ÿg2%ÙÈ'C/pŸ ;C/Ÿ ++Ÿ Ÿ AÄæ/QŸ Ýqÿÿÿÿÿÿÿ1,C/ÿÿÿÿÿÿ_2%Ù`è``'q'qp? Ò!7Ò*qÒ ++ÒÒC÷é/Q ÒÝÒÿÿÿÿÿÿÿÿÿGC/ÿÿÿÿÒ2"%ÙÒ/ÒÒ'Ò'ÒpÒ#7Ò*ÒÒ ++ Ò"ÒE÷é/Q&ÒÝ$òhÿÿÿÿÿª ÿ3òhÿf/Q$R 2(%Ù"°P $Ú ++jl ++ $òh/Q$l ++ ++&l ++(l ++G‘ã/Q,l ++Ý*¯9ÿÿÿÿÿ,¯9Þü)ÿÿÿ¯9ÿg*, 2.%Ù- À- *}'*¯9p* ;*¯9*Ÿ ++,Ÿ .Ÿ KÄæ/Q2Ÿ Ý0Ý(ÿÿÿÿÿ,òhÿÿÿÿÿÿÿÿ20_24%Ù`à`0`'0Ý('0Ý(p?0 Ò!7Ò*0Ý(0Ò ++2Ò4ÒM÷é/Q8ÒÝ6ÒÿÿÿÿÿÿÿÿÿG¯9ÿÿÿÿ6Ò2:%Ù¯9Ò6Ò'6Ò'6Òp6Ò#7Ò*6Ò6Ò ++8Ò:ÒO÷é/Q>ÒÝŸ @Ÿ QÄæ/QDŸ ÝBqÿÿÿÿÿÿÿ1òhÿÿÿÿÿÿB_2F%Ù`ð`B`'Bq'Bqp?B Ò!7Ò*BqBÒ ++DÒFÒS÷é/QJÒÝHÒÿÿÿÿÿÿÿÿÿGC/ÿÿÿÿHÒ2L%ÙC/ÒHÒ'HÒ'HÒpHÒ#7Ò*HÒHÒ ++JÒLÒU÷éyQN xÒ(ÒÒ ºe¢3à€Ö/€åÂ/îÿn/±nزh’B Ø®n0ªÈ@j„®“„å „å 0„€"„åî ++~È ++„Š€ ++X‡&PʬazQN(¬O8O˜¬W¬P¬¾(ˆ­,­!W 0)ë  ñ [0„å ñ 1  ƒØ3‚± ++/ ++(P¤YR¾(8B70T ++3 TV ØhÂh hˆms Rsªs[sTs¿ O5XsMs07s·° ÂˬËËÐÖTÖ°Ö]ÖVÖÿÙ,Ö”VÖ¶Ö_ÖXÿ•,uXs¼sasZIÿ‘,ÜZÖÂÖcÖ\ÖÿÙ•\ÖÈÖeÖ^NÿQN &Ø&N^Îg`/ ++ÿMx6/ ++u`sÔsisbYÿM,·.NßbÖÚÖkÖdÖÿÙ,Ö”dÖàÖmÖfÿ•,ufsæsoshIÿ‘NÝhÖìÖqÖjÖÿÙ•jÖmÿsÖlH&ÿ ,H&7l¬Øùu¬núÿ ÐV Øún|ñwpÛ ÿ m2ú½psPæysr ÿ , 0úÿ!rÖTØ{ÖtÖÿÙ,Ö”tÖXÊ}Övÿ•,uvs,¿sxIÿ‘,ÜxÖ0±ÖzÖÿÙ•zÖ4£ƒÖ|NÿQN &Ø&N|Øš…~/ ++ÿM,N½~s¬‡s€YÿM,Nÿ!€Ö°‰Ö‚ÖÿÙ/ ++•‚Ö´s‹Ö„ÿ•,u„sˆhs†Iÿ‘N݆֌ZÖˆÖÿÙ•ˆÖL‘ÖŠH&ÿ H&7Š¬¯QÀ ++êÜÄÞ𳓳Œ³ÿ D³7Œ³ïHæòÚÄÞØZÜÂÚÊ·•·Ž·ÿ 4·7Ž·*·ßàäÞàÊäèòZØÒæèÀ—ÀÀÿ TÀ7ÀOæèÊÚÀ(™À’Àÿ dÀ7’7OÐÂæз›·”¡ÿW”·ÿ HäÂèÒÞZÜêÚÊäÂèÞä»»–»ÿ $»7–»$»ÈÊÜÞÚÒܽŸ½˜xÿW˜½ÿ&HÊðÂÆèÜêÚZäÊÂØZàÂäí¡¾š{ÿWš¾OÒÚÂξ£¾œ¾ÿ t¾7œ¾ÿ 0ÄÒÜÂäòZàÞäèZÒÜàêèZÄêÌÌÊ?¥ÃžÃÿWžÃ2èÊðèêÂØÄ,§Ä ò ÿW Ä‡?ÞêèÄ$©Ä¢ÄÿW¢Ä4ˆÅ'«Å¤;ÿW¤ÅoHÆÞÈÊ𭵦§ÿW¦¹µ¯ÂäÒèòZÚÂæÖ»¯»¨+ÿW¨pOÒÜÌÞµ±µªr ++ÿWªàµà¶T·³·¬·ÿ L·7¬%pÆÞÜèÒÜê+_ÜZØÒÜ)µ½®½ÿ l½7® ½oîÒÜÈÊäòL·À°Àÿ À7°Àÿ ++6ÆæìntäÊÆÞäÈZèòàÊZÈÊæÆäÒૹƲÆÿW²Æ/.HÂ0»Â´ÂÿW´ÂÁ/äèÑ^½µ¶"ÿW¶µ!HT_ÐÂÜÈØN¿¸¸¸ÿ „¸7¸m¸Þ Áµºµÿ ”µ7ºµ´ô¼!ÿW¼iŸèÐäÊÂÈZèƵŵÂsŠÝo¾ ØsŠm“âOZ ++û‰³‚ ®³‚S=¸U/0†0þ/ —‚«„ ó‚‚ó‚‚ó‚ ++… G‚ \ç„#0 |°sƒ/ì€/Û€"Ë¿‰ <¾sƒD°†åh°ˆ¦L¿ƒ ”Cƒ  Ð KŠ„/w D †åO‹pH/`O‹pO‹p/IO‹/;O‹pO‹/"O‹#ׄF .×ÿw‚¾.°ÿÛ‚™(‚j<S;.Â3 ç„ .ïþ<ÞÉ;„Ñ/ÝÑ“³„wŒþÿêTšƒS*Q¾ ‚ù‚§¦`XGþ¨T‚ ++g`”@'? Xhƒ}QÀ `ƒª‚DŸ‚å °‚å°ÂD† Ül°@3à‹ ‹ÌNÅ# °¼O—å M§ù¨_À†å° ©¢,À Œ Œ ѨR°†å ÀP ¨Ę˜".­83à‹í ‹í ‹šª tœ£”&”„,/v,,#‚Ì4‚å0ÌR^ÈP– / †–´ t7–DøP å¨0äá¢À3€åᢵ @€å0€åpš¬ €ì”…V Щ›<ƒ†_rL(.5ÿ¡((((ñÖ.àþ(.ÉþÈ»ª%¢ 4.tþ0 ++\\.Nþ`>(/-þ­¡éÞÂ/ÝÝ Ó9¢_Ìýÿꀭ¡9Ðpf`¿¡p Xó  =h/ * ÊT¡¨T¡X¸_Òl¢€½PÃ_ òQÐ<¡¡ +¡S#ÒQÐô€ X 1ÊQˆLxQÒ Õê±iÚ À 1  Ù  ù çù Ñù Ï]ù oÖ  ++%Xù =ù *ù  ù lù $êù Üù Ëù »ù ­ù $Í•ù 8ù $lù _¤§( Np% ÿÿ1-% % ÿÿ¿ <«(š9 d9 L\>9 .(9 Ù9 / 9 Ã9 _¼ýÿê„9 Ö9 ) ++=?X=hG A_بG jM ÖM ÖM S%RQÖM pM CºQÚM OhQØM #×zM àM áÜM ÿÿÿÿÿÿÿÿÿUÜM ) ++=M h_ÞxM vÜM ÜM ÜM ++àM zC#ÙªM æM áâM ÿÿÿÿÿÿÿÿÿUâM ) ++=M ? á$XùÆÔM vâM âM âM ++æM |Q#ÛÚM ê­4ÈM 2M M =^LÔ2A ^LE fLèfL ÑfL à2fLoè  ++àQ îfLÛfLfL$¾fLÏ±Õ - " t5íΓ5 ++íÎ. M{L0æJ¡  fy ++U  5 ++E¥ ++ O  áM/7Y ++&€e ++À€%  < ½ Í ++u×ñi  ”Ú™ ++ °Ð © Ø/ÃØ/²Ø¢ ®Œå °Œå@”€™  ™ ++ÿ‹å @‹åÀ‹åÀ—å †M{*ÀM %†M"dÀ„V†M0P=Ô Ô˜&µ # à–Mdí:A ; 0€L`€å €åý I ­ êÞMÓ¼• ++£•Ñ ++~5 e<WG<6(x.ðþã.Óþd´¤q “~.fþ‰ ++YHjN8/á x] þÿêtjN?èh¶ ++ ‚N á ++>N2(  ñ ŽÌØÒÜèÊÎÊä~+ Ä LXdPIP ++d8I` ++& ++@ ++kÒNèÒN_ÚQè÷ ++`÷ ++êÒNOXQì÷ ++#Ýú÷ ++ð¤?ËQî 0ß ++˜ß ++…ß ++ß ++$hß ++ °ÌD[´Jß ++°á<ã ++$ l%àà\\P°‚å äÈö¨àß¼´È€È/ÎÈȾ @°Œå “  °óÌ€Ì<!À€TW—'0àÓpw ‡ ‚Ÿ ++qŸ ++aã p pÿT« pH× × Æ o¼¥7 ˜ˆ<w(.bÿ$/IÿÉW+<(.ÿLõœåtÔ(½û¯ž‡ 8/‰¨hx]aþÿêb‡ oîhQô!9:Qö) ?Qø¹ 9QúOXQüX j€ˆQþ” 7SÌ `^ {F îF MF 2EðýH¿WôÜêÚÄÊä~O "áO /SO ÍòO ÿÿÿÿÿÿªòôkö8øá Qúü QþXSûòûòû %S-NÆÞÚàØÊðù#ã:ùRk»0SÑéuÐ¥ï€Xâ ++ ãp—Õ*y**&æÿCPtzB3 ºO ++Sqk%SÍ–ÏS:æÊèZÆÂäBÕåÕ ++Õ½Õ,ÕjÕ ++Õ@ÕÈÕçÕÕ½ ÕÕj ÕÕ*Õ?ÄÞðÕéÕ /¨Õ.¾" ¦S!¾"íÉíÒíd À퀫(VÀ á°ˆ"hˆ.Qˆ& [*"°f#(o W,•j#”Uz#€{*L°šåô$ *$*$¤¹†å°Šå`Šà ++€àŠå áÓ*b  ã À¹´µ*I½@ Àšå¼ ( —)ÕÿÿêèàO⸠V0Šå À8q ++ž$R0šå À$˜¤ ++p‘ÿÿêªÈ XÈ `RSxyY`   óTã›0 á°šå »ê*Ž À¡ "0Q" #{B-i$ m$À» `,/ °S ¶ór0'FÉ$É$/9—$ã!L&Õ$ t ÅY* íÑ¡µYðÖ+Ø.Àÿÿ ³{ ¦»n Œñ  <kç` ’¦¡t: `¨0S0£Pð`¤) ;*>ä ++HÍ ® ô S2B   ÄêÒØÈZÆÂæZæÊâ-ÿ ”#6.. —/0[*"îDv ++'LvìÀÖ\0zÆ*8ýn = *p`Â3 %4$ ++8§vAHX QªS>(h¤CªSrhS4ÄÞði¤ë=n/Sy ½y Dy jy y 0"Hw A¢ÛíÛÛ½Û4ÛjÛÛ4Û e¢äïää½äTäjä䉢äñä"ä½ ä„äj ä"ääà¤ÙóÙ&Ù½$Ù”Ùj$Ù&ÙØyõØ,øØØ4ØØ÷> €|¾3q†å†ü¾3¾3Ù¾3 ̾3xS(    £”Ž”/ °2d‰pŸ?= °š—> xp ,@t"Ltèx/À ¦°à‰/'ð#ÙP>—C>z3/÷z3çyz3Ú Àã>€ ”.«3àŒ]›Œå Œå Œ]ŒåTÜ@OÀŠå  ¢üY ’ šå°šåÀG>P!yü"0œ€`æk/ ¨" TÔ G63 g>.g>$”L ÄÀ'>  ß?k ý$? áW> áT˲H¥—8 €NE7æ2C> ã¬ÒÀ—= Ø°D/µD ]ÀwVþÿê^¢Z=R:S(l=P©=NS(€‚2hE5xB3ªO r=jS*!r= !}0Ñø5R ++S(øE * "P A‚S(€ ++$b`$bCS,8==/S*‡ #÷š‡ i6  ‡ b90 ++!‹ (ƒ$’Iß0€å€åà—å#“  ûâ› 0› /í»› ÈŸ› ¤šBS. !P› «„£ ù£ ä£ 7 °w¸?#p›×4«Å7 £ ++§ °‹ §  pl lÓ>H¢>HS Šål  ++Hhh fÜi«hS€{ ++"p =# ›¯q ++öD±=_*_*# ñrm  á›Û Ÿ ++, ++X0+*€c‹Ü$ Ø ++H.dõc*$ HÞ ++ _Œå  ++ ÇÇs›s3›å òF÷ [(0Šå,w10àŠ 1#›w¬Ñ0ŠåpŠå ÀŠå$c ++¸¢ü!$$Hþ°šå0šåpšå Àšå ›åL“L* Ï _ ++´|; ++¨ŒTn: (0$Ð$ ó RîH<9‡ ++0#‡ ++ˆ ƒ ++kÀå' 0 áLpšå0k@’J§ ³ ++ÖŸ ++Àø§™‹}Û ++fx2(‹ ++ìŸ ++Þ.Îþ ½³ ++¯(žˆÛ ++0 &°û < +<°÷ .þtwþÿêr²é ++ó .gH *Púx °   /Hm!ÿÿ?S0^!/f`S2x9 n@/h_41ˆJ/` K DêS.' %B %!%˜%CòS6%?ˆSÆÏù€/S)¤ ¤$ ¤$¤$.é¤GV/Ú /É P6¹\~0å 7|”Œ”‚Œå Œå||(/1|gX|ÿi/Õ|˜ ¸@P0(OíOâM/!ÂóTF8?8€|Sä>/ˆà$_:#œàA&8»8–ZS8 ++0H%S<HS†Ôýàƒ/SB–å>–ÿÏ,–ÿÿÿa>–>–L_@# –M>–>– ++B–©Ù#ÿ*–D°(»Îpk)¢¨_'0àB#0†å¹Ÿ  '`à Ž2ð &Ûÿå(Ö(V`é(De0oÍì($ FµªÿV%SF¼¿HèØÆZÖÊòìÂòv$ ¶HðÉÿV%SH¶¶ÐäÉ$ ²JÔÂÿV%SJ²²?ÜÊð´´Nà/½L5ŒLÓNÓ÷×ô ØXž°Ø/ØØÄU&Y&Ô@éÛoÉÛoÑôhT x¬@Ê¢"0—D.m—n"0Ò 7k› †å(à ãš 0âSã ++Hp0’åSá,1ñâQã0“aSãúÿÿtp0/ ` ñð `šåëÿÿêà’å ^ãt 0’åàâ^ãZü¸ð “å&PãR ++ ååPá¶ü ‘å÷ÿÿêà‘å àâ^ã* ++( _ ++/à¾k ++0&ìk ++$ñg ++DÙÿÿêjj̱(/]8Q#ç8QC0 á fm.ؤPwpwp ¬ ,/ "±š¤j< ++“ÔKpD±/…Kp#PPmLÂb ++ ++\PUæàêpêgP & 0¸°ÛoÛo P¼D/šåè°ášˬ ²¤ŒÖtÈI%Uÿÿê.îOâƒmo!ÿÿêîïtElY,OëÆäà ã±þÿêà-/ÑàX//)X &>þ°ð`Ú. BSP  ++8%ìVf¾f­fD —åjj q¢V.j …ws+…w==`Š:^¿,d ++Mk, ´=!w ^/k,!wL/ª3ì |V!w*ð!wdkâRöW Ñ$i b½u*ª½u½u%°Ú½u/¹½u ½u4½uØ´ ++< ÃG½u j½u¡ (d½u/÷ï¦.âþ¼.ÊþT.¼þà¬(›x>W>  & XB ++x;þÿêfrÐa ++SPp3u§èØìZÌÂÒØ:uP`(u âX ¥<ót,3SV_R\ötF/8Åt})CúSP6@6B:S/2(@/øúSTXTÌØÂÎæT¨20lpCX'XÏXA”˜J+'8“XQÊST$('#SP wºST8 j*[ õudªSX0gR_ Üš/SZë¾( `@*‡D70üäƧ  üRüü˜I1à E*ÁNÀ•$F\L4 …R.Àµ/ˆ`& Z§ §`úň§*§§à ¯ì¯¹¯Öòo\  Є& ++>2ˆ&ŠÎVuÎV›4 v? p›ˆ& ++/vYvC;@ 0šåZC{<Z"p|&ó8 ++|&/ñÿ4!š €. 0ë85Þ0ý$Ò ++`z4ßRD ++< # íœ$o@€å 0€ ï ÄzØ#c6 Ì> +U°t¸v` xoÿÿê ªè gBS\€#Â@€V›Zdw #iŒw q^0B:/ ++P =#S ÂS\=#H/CŠS`/bHSh*EßÞàZØÊìÊØZìÂØê,J# @Ê/SfFÅhb   F¯ø> ”f!èQ7#‚ ++âP!‘Q–° à°°Oöÿÿ¦=í¦P/Q¦ÿPµ¦ p0"j˜'´_Sb´?SdŠ_ ‚SbŠ ++fŠ?ShsŸNjsÃI  2‚×h nh hh . è ++[”;>· >·>‚E, Æ4V-€”'<$° M[ I[; à„fØ éTÒr,Å(.´ÿž¨ U ¨ #ìN ƒå´¨ d dò~Ù\2N\,¨ \-<Ô?ˆjh Iç .j.6"H± _ÄÞêÜÈTjq zÀ0à^TÈ eiÅ&ì! Úà+7’ ++@ >†¡ X_†?v, ŠðŠÅ> Š(°ŠADoX`ƒrsƒå ƒ°:!àÒ,4z#’z#/,z# @^ã×Æ ÂÐ#&€àê˜„å „åp®@íÆ &` ±p–å@ ã ð–XæÐ æL*p3ªàŠå`Šå| ˆˆ l•û6)À xTàäÒÚfT)¼1Œ ++`„ ( 4 (êÜ"ÞpÎÜÒôÊÈ@'r@üæã¢8 2ÒÜìÂØÒ`ÒèÒìÊ@eW'‘(LG ++0fÿ HÚÂÖÊZÌÚèZ|Êðàä@´ƒ 0 ¸§0Stšböö -K‹;8!/¡'+µ‘ ++¡'Ö38ri 8¯*¯ Ú"À h“ j| ++°Oc—å /ÀY ]g©g¾ À] hÿ¿VZJ4?uEM 2/ÀUE%_< Ž ?Àéí ÔÇ(ºm c‡Ü/…Ü m…$À" ++bB h¸‰ óp Ø àÂäæÊZÌÞäÚÂèI)0š pW» pWb°â[» !p—WAò‡)= p’”MÅ¡p»xO0‚å  *cYg~ ¶¹HÚÿÿê}D¹D!DýDD.AD@|!ÆP PË+‘Ó1à á@/àŠ”ÓÕ6nàåQÀ@ŠåàŠåàšå‚*àÕPžå®nxx*M¼?Õ *…°k­dÚ°(¢(ÂææÊäè¸ìAìÒÞØÂì1~XÙ30"ñZÆÞÜÈÒ$ÚÊææÂÎÊ®(ÒääÒèÂÜèæ5H&Z(rað ü~@ÒÜ@ÆÂØØ@èÞÔ 0H¾w0ÒØʲ’4còÞêäÆÊZîÂäÜÒÜÎX ²Sn8ùa"Sn ++ù÷ ˜@ HÎêÂäÈçÐ:ÃÚSp8jSr ++KG Ôl¸ ++`F T%`”rŠk@í@‚StD,LJß– ++ K@rÀvà̯ ++z¯ ++Åx¯ ++ÿÿ¢USv`Brxr/Svs#xs ++zs! *s"\~\Å|\ÿÿ¢[|[Z#|Z ++~Z"âͲ€HÒÚàÞÞàæe„eÅ‚Áÿÿ£€f‚Á€g#‚g ++„g!"šgB†î?( Šgňgægÿ¨†gˆg†g#ˆg ++Šg!"Rg4Œ"®™ppÅŽ@%óp 0¢Säq• á šåpš>´|l™ ++ p|–‡³&0þRb ŠåpSS *¹S" `±fþRˆd= –pS4YS/ p¨Lb È° 2è xÈÈl Ô ÇÈ­ ¤aO‰ÿÿêT%/ TL|QEÿÿê&ƒ €SŒhaŠSŽx Œ!p  2SŽ ++H  !! ++4"S’ù–ùÅ”ùþùÿÿ!’ù”ù’ù/”ù ++–ù"Âù"5Ðùšù;GtýÅ ++13/0'/ ] ++1/0;$0'/Ùt˜`<ÐZ&0R(Ýo ++ RÚ! ‘Ú!x]é Õé]Ø­ÞN¦ cX5Ð@­C:S˜z1QÂS˜ƒ?(03:?š(M!eÌ S v ‘v1 @r1Z$HìÃ` ÁéF$ÒPžE$`_x€Xâ ++èWM¿èURM58Ô ­ÔM5$SÝÿÿê ++'H'Â0BSœ ˜ ÒŒ¥& €Ü>v³;$æÇI@× ++Ÿ"¢$àŠåšå› ¨"üS" ±  Jâ @Šå àšË,5Ö&Y%lë"•S sQžå0õ2aU‹àâ^ãO-710, Ã-C0šå 3/H%3&B%3L+L%L 7! šÎtàå pžÒt ++&µÒt7@âtà á(ŠVx¨_, Šâh ž,hSå,8$àšå4àŠå8(ñšåšå šå,pŠå0Uå pžo$S%“ü}0``0 Jâ,p3TãµP å2§ g/ à)1ƒåGGo/9q×HÌ0‚—G‚8{£c3à8¼P àå ¼a ŠåŠ_àå€jÌ$¸ daq@]5÷c5ƒ 8bv$_*:$ @  ] “0 u5MqêL ++ÝÏÁµP´(¦w~ ÿ&Rðý•,ævfü p,Ü  áæv*½Úx:v;ñPÓH <žB,Q×þÿ¼ž"Óþf,å (º(=¶þÿ¬J¬,ä- ž|/$ 'ìå˜è&ÿMœV $ÜLÊ8¯7@L *Å(gJrþÿêVÊ ++¹;ÀÍ6˜ á;s’SœHMd¶Iš8 bSœÀ!d@ ’ ++’ˆf|rS¨˜ ˆ¡x 9_ šS¨™ª™.ˆ™>#'º˜º>HŸÙPx%ØDzbRCàª^0‡å ‡åh óLÄ ¥Ä9šåkâ²BS¬ X1ª&@óHëb ëb a>ô8rì8A ^ãdI’ITIœt5N3IFñ3D!à’Î Í1 ’¥1³C‘ 5 š E*&îÞÍBmX}1@†åš Bm ½ݽ/ὺ{€¨0 ßJAÆÁ]¼,Á]=*5-0ž…—â0õ°0Žâ`ƒåã#hý,°™å Uá‡*°Kâ,°‰å0‹Æz$£D!ƒ±.„fFm „V„ ++  Qá©  œBàB&Ba ×Fȸ÷GìhT* ¬Ù&x¢%[“@@qb@=Œ X =òˆS®HÐÂÜÈZÆÞÈÊÈS° 2üæ@Òæ@ÜÞè@Â@âêÞèÊÈ@Bq´BýXà!Zk8àpïKiQÚS¬±((S®S°A0xåZ8ÐÆàZÖøyÆS²@˜rt¡ÿ6t†ÂæʘÂÚÄÈŠðàä\pdn<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZn`lrP¬5"‚Sñ ++þ  ++ !'   LS²@ @Ø+*Ý^´¶þLþ#PÝG4ÝGO¬ ++0 ++6 n _bS¸ Hº9M®n 1n #)Ên ¼™Y¾0b Ú X@—å& ?8 ¼RmOHèÆO+O/UO¾(á÷O>A"&ÝðDq#×"/Zî”Y p=Yp\/íp[Qà\/ìp[Oà\Np\Mp\ \Kà\Jp\Ip\À\Gà\Fp\Ep\À\Cà\Bp\Ap\/ëp[?à\>p\=p\€\;à\:p\9p\À\7à\6p\5p\ À\3à\2p\1p\\/à\.p\-p\ €\*à\)p\%p\ À\#à\p b!Ñ/»&°ÉW/£)Ë!ða/ZîË,Ìž ±6 ¼9Y¼¨/í¼§Qx¨/켧Ox¨N¼¨M¼¨/í¼§Kx¨J¼¨I¼¨ð¨Gx¨F¼¨E¼¨ð¨Cx¨B¼¨A¼¨/뼧?x¨>¼¨=¼¨/í¼§;x¨:¼¨9¼¨ð¨7x¨6¼¨5¼¨ ð¨3x¨2¼¨1¼¨/켧/x¨.¼¨-¼¨/ í¼§*x¨)¼¨%¼¨ ð¨#x¨¼\ ø"¬"ôƒ¸¸SÀ ++¦¤†„¬¼‚(S ++ˆ¦¨ÛÄàÂäÂÚÊèÊäæ0ÆVuBäÊææÍ‚ 5È ­T !°Ê:ÈÊÌÂêØèZ°!äÈþ­©ÚkÆÊÈêäÊ/;ÌÉI]o/U@LÿGLPGL@ƒ%#KªƒBLÿKLGBÒÉMo/UDLÿKLPKLDƒ%O"FLÿ/íLFFÉÐÉQ‰"HLÿ/íLO/íLœHƒ%S‰"JLÿM˜GJÉ/ULÉUt"NLÿ/MîLOM˜Nƒ%Yt"PLÿ˜GPÉRÉ[`"TLÿ/íLO˜Tƒ%]`"VLÿ=˜GVÉXÉ_`"ZLÿ/=îLO=˜Zƒ%a`"\Lÿ>LG\É^Éc`"`Lÿ>LP>L`ƒ%e`"bLÿ?LGbÉdÉg`"fLÿ?LP?Lfƒ%i`"hLÿ*LGh¤3Dl&H¥3DÞku"jaÿ*aP*ajalƒ#mªƒnaÿ/ íaFna5r aHÛo‡"p^ÿ/ í^O/ í^œp^rƒq‡"t^ÿN¿GtÉ/SÌÉs‡"vLÿ/NîLONªvƒ%u‡"xLÿOLGxÉÊÉw‡"zLÿOLPOLzƒ%{‡"~ƒà U}È#³œç7é8¶& (®"^› é| ++¬¿ ¹½ ö4W±¬BæÔ3Šåó÷L °šåp pl l[Òsö"Ãsö ¯.ph‚Ôœ´h fÜe ´h@¡°´QåÇøH8/“™ þš ,¶›©þšSà ã!(%) -1"5àr™9=A <À áæ”`¸;¤@À†å S¡÷ž j/NjÑ]¥Á7H ?÷H?  áD!D ÀD#0àD^ á D D D†å D^ á @DõCø0Cøs À‹å @‹›N‹å pD/߈ p×öˆ@ÂÊ  ++„‡ÂQ‡å @‡öžL à‡å<¶‘ç Ô. t£8 ÀnbŸ  Y_8} °`÷øA°‚åä$°i$°<Qå ­= à<U° °B8 p8/ˆ Ýè Ýè”®jà5p¹Ô0= p0À0 `k@•¯úH á'ùT­ ·å`¤(¸­|(iVȺCh°/(>ž.îþÈØ.Âþ «$®™fù -¹ç© *•ÿ¦¹^°šåæý°sßýÿêrªÐ®wïIJU|Á÷ "Pò€pÞPÜå@2ðÿš(Øå±ã÷è)Ø¡3 ƒj°ƒ$é 6³X¡*îÔ /Ð {ì.ÞÿòÐþ  Êa¯qb @¦‘ð7 ç ʬöìS h‡ Œ Aì  'p äs¨5VxFäˆ °?ŸGr(âU|†°G  %: ëì_#BU|ëì 'U~½ç„ÒÜæèÂØØZ”_} };-‚} Åk€ àu»} )  È½í¡º.Øy #p2Ê¡ i‰ˆ½¡ "º ++ñ¡ FÊå á ùµõá —á ­ ‰Q ++  ŒV  D 4- 0 0 0ë 0/Õ +À  ++Vï ª $— $„ $q (]  I $6 $#  ´°+͵ µ O Šâ ɸý0å Ö Ãå °(œ ˆ(ub½ Oå 9($Ñ øÑ â.Ìþ µÑ £på Å # XÜÄ /ÝÜÄ–öÈw þÿêh¢¡ k €Å ³ ÿc8NO¬H ¼ `EU€¯ * ¯ _ÒU€¯ ++‚¯ .¯ _Ìèòàʵ #m6†}¹˜µ ,µ µ µ …¹½ ê½ Á½ Ô½ k„ 8e¹ ½ ¹ 9¹ /&ÃüWëI [ëÉI D kë BÃýÝ 0NÀì0" 0  ,Ü]oƒå ƒÕ ++ÎÛø$ɸ¶+ý  Œ´É °¡  °0r €å °€¹¶°˜äR°†åñ ++­ ++iä p¹ ÅT­ ++3à‡è‡ C"Ðp\3œ³ &ìa #"î k0€å €ñ €åºÇM IêÁәƶ<¥((_<ÿ/áx± iXPC+)Q (ü ,/ ,lj pÀþÿêJš×@ég*U„`b ++}ú ++šú:B°ˆG!|XJ#þ˜Çún@I ++8Q‡/SU„zHzt2U„ ++(€Ã zCšU†z4Xk~l JóÐ,,ÐrItÑiUˆ ø††þ¶ŠR/ õñuõñO šåè61 ++byú@ó!ÑÌH \#7Rའ _ßÄAAUˆqL4#ƒ ŠU#Ǩ•/PÌ"вÌ¿Ì=#¡#"ž0žF°ã@^¿*½#á áŽâ¦  -$_„åÉiïu#ÂÀ…# ++|ØŠ#?ÿ/ ++P#Š¬.<Ž ®¿#…¿i Ø¿4¿¿_¼/”»†»‚†å†åàįà†åà—åàäÄ昿äÄ/ÙäÄ ÌäÄxUŒ  êO{·¿/L·¿.Fî%ð)Ú8Ë %Ë Ë ÍË Ë   ù{ ++ÞJƒå ”ÿyÌßüâ=Ì=ÌÔ¹Ù /0†€/ |»´ ' ++  /¤è R€  ~à®å °å Àpp°3à‹X‹0_S °S RS À[ [ :LCp†å Ñ ”#H'"î£  H ç ç 10€ÍÚÛ íŸ ÖÒ¿§Äš(‰({jUŸ >(%(Ç /ÿÇ 7UÇ ÈÇ DÁþÿê›Ä“Ä –c0—å––$</Ÿþ–"˜þ&–þ–2NZ–h @ÂUŒÔ? ÐÓÜð )¸ UŽV¿~zÜÜ~W€U˜W w€°Ušh  ++`r 7Uœ*8z>” ++`M } *J²UŒ} ü®À¸Ÿ€ÑÈCÊUÑÈOhUŽ#‡B’L Æ(øžzL LL FL 0^7Sã-Ø)X ‘.ê‘.%‘. Û¤ h%Æhô ¾^( u°$Ÿ­^C0 ã˜–ô ô ès/%`/° 2 ’ ++ 0–*…  B‚#‰R‚ž íh”  ­Û C#— !ÿ ¹ 0Q᪠bâP¹!‘¤ Q¹­_Qã‹# # j# °O?p›§# ++å§#L§#Ap á§#°§#°Täp «#/U«#(«# l }0›å ›­÷!"0“ ©ëŠ#› p› ó› <Ú› "Û p› ˆ®÷! Û Ó ›Ó .ŠÓ @på × -À›£ |ª¢X€0kÓ pÝÓ ^Ó &hFÓ 4/Ó 4Ó +" /Ý+" kÓ  ÊÇ ³(› Ž¢}³ o^K6((.øþ(áï!1°ï!+ï!°ï! Ozþÿê1 Á³e#/ðÿ b›å›1 ~1 h"pì/Aþ1 R ã:þ8 0bj1 ðà"gòU”X·. Ò¡ Ø¡ _–¡ ‹!U˜°Uš 1Uœ /£!Eu(ÂU”‘!â ‘!RU”‘!.X: ++¥ ž¥ –# ++!‹‚%"HþŽCZØÒæ ®¡ì€^t , , !:;3ÜÞ2¢2~øþ æf#"îf+„Á*âÔÒé 0‚_8é  •¢•!ò•¡(ÚÞæèZÜÊΫ”bÌÒðÜêÚ¦¤ó¶N…ˤ6 'ª6MàÞæÒ6¦6¶ù 6¦6 "‘b<YØÊÂæè.¨d̨. !“.{ÎäÊÂèÊ1ª_̪1!Ò_(RZîÒÈè¾ò/U¬.¶<*¬* !•Š*""Üîê–bÂÜÜÊææ/®/µ½g2 ØÒèèØÊ8®8 !—B8A&ÈÒäš@òZæÊ¥œ*š:°:µ= ½,2°2!uG_ÐBUºúó0šî9æ:ìúóYxU´ P:#:@Šåå5-ö¸* H"pÊó/: ö"pÆó€šåäÿÿêh!€à€ €& „O  áˆb pŠåàˆ4* 4b pšåàŒÎàùI=çŒG<ð² ˆU ÎÞd B ?9"pÇ!$;"® Äò ’»h*U²P»ôU²(BUÆ ÐjùÆÐÂäæ~Á* /*¡ø70D‘,©n£n 1 X; )†3v3ã1µ0”RÄ% ++AÄ u1Uô. y$Ä ”  › ¦+ÛOìQÕÝȸ(§%ƒ(s(b±‘±ÿZÿÿ à‘åÿàâ^ãV¤;¤*¤,x(˜ ++ä„ä„å p„åcæì ßÏ4¾"1üþÿ"4/øþMGxWx•¬¶¬=²ÿÿ‘ 0NB툰ö,×3Ž3`'µ3 i/ˆg f44.`ÒD1Yø —O (þ 1U¸PU¼ amx~#€ ?”ˆ×'_7H0E(S‚U²Â4Ã$ðU´ˆBU¶ ÈUÊù 0f@ð­R@0 áu J°šåu#u#$“å—ëu#'u#FГ”ú”“”ö(' h›h ›h›hÍ wÍ `Í ‡ÿ"°i ? p—e ++Y1SA1SÏ›"0T i 2-# ++ˆ9# 0/! ¡ &$0_ ‚å 0/= <d/¼¼Þ$À1Œå Œå8FÐH ŒD ŒD ++”¿å @åÀåÔ/¸S;/°G;ª;pØ/õ"Hˆ ++ ©"l ©"oH¥¥ <V(ÉHÛïü;¥ p¥"¥0¤0 ¥¤0 ×¾e±£É#Š(s\àE¡)6+( (.öþ|.èþ<Ø(ÇÝ#t& x)„5 ¥S`¸‰œR‚þÿêVÙ"ÐøIÚU¶«U¸Y0ä"BCÊU¶×"X×"d²U¶ ++8î<|ù2,PÍ"CšUºÍ"o0U¼8žÜý›4r_hBUÀŸÕ¾Ÿÿ Ÿ£¸ ++@¾ˆB¶ž¾žÀž¢Wäläætv I#jIЪÕÈIÿ)ÄI?UÂDÿÿÿÿÍÄDÄD?UÆ%Î1Ò£zˆRÄÈÌ?UÊÿÿÿÿÿÿúÌZÎkÌÌÈwÐÒ#ŸÚÖkÕÔÿ)ij ++ÔÌžÔžÖ6z#¡Úà«ÕÚÿ)ØÿÿÿÿÕØØ,Þâ/&|RØÚÜÿÿÿÿÿÿÿÜZÞkÜÜÚwàâ#¥JæjÕäÿ)س ++äÜžäžæ**&#§JðªÕêÿ)èÿÿÿÿÕèè,îò*&|ŒRèêìÿÿÿÿÿÿÿìZîkììêwðò#©ºökÕôÿ)è³ ++ôìžôžö6*&|"«º/W«Õúÿ)øÿÿÿÿÕøø,þ"W*&|„RøúüÿÿÿÿÿÿÿüZþküüúw%W/W"¯*/WjÔ/Wÿ)ø³ ++!Wüž/WžB*&|±ª_°BW ŸÄxW ++ ˜ÕppŠ Š *[/ íÕpÅpíî3® ª (²[û N]‚ ++ òÖ[_0„å æ^Ö[ÑVª >r/±r å¨%r>ä8r/øF[°PBW xî²Õ}&°c•"ã< .Î< ° /°´ Ý±ÝÝ•­Ixp P\ñp"™­f Ý#‚H 0˜ @t:q&à¢Ç”eÇ”Lp6M¼ ?¼ 2(c p p 0O”¸U±©*¡É ±© ¬ Þ˜ Ç4 º¬ø ++”(…_wÿÿê–Í.Í<ˆ{°.©" 0—”wÿÿê2Šá ++Z*Wz ++%à ++ð `.hŽ‚†ywjW ++0[ ++zW ++H¶ƒ#W ¶ƒ@¯V#³Š[ ++±Åq’ÐK ++MMÌ M0MM‹ ++O5 ++4W– ++O²WÙÙ/W‰ ++#µš‰ ++Øʼn ++ÿÿ‰ ++ÿÿÿ̉ ++‰ ++S‰ ++°‰ ++#N#·ú‰ ++±Å‰ ++ÿ†‰ ++Ù‰ ++‰ ++»¡À/W$ØÅ"‰ ++ÿÿ ‰ ++ÿÿÿÌ ‰ ++ ‰ ++S ‰ ++"°$QÈ/Uâ°½Ô»/W(°Å&ˆ ++ÿ† ˆ ++&Ø(Ø/W*Ø¿š0ØÅ.ˆ ++ÿÿ,ˆ ++ÿÿÿÌ,ˆ ++,ˆ ++S,ˆ ++.°0 ++=Áš4±Å2‰ ++ÿ†,‰ ++2Ù46‰ ++Ú<ØÅ:‰ ++ÿÿ8‰ ++ÿÿÿÌ8‰ ++8‰ ++S8‰ ++:°<°~4Åš@±Å>‰ ++ÿ†8‰ ++>Ù@Ù›° É ++{œ1Liœ_WD ÞÞ Ý\7öT7îÖRŠå¬6¨6 µ¨6bšå¬6ÖL7I ÁÓóÛàí”3^ãîí”Éèã²æâ^ãâ=@(ÚÙË/ °\Çf †å °Ù<i=O·þE©º l©I=  I=ŒAVã—Ý7 ++Ü Ó/„F° Üq‘mÉ”F°_/€·´t„‰”@ „å²MÌAÌ4*ÊG*YA\Çì+#êÝi’ >¸K¶ ªš@ŒÒu„¨/á› ++ P8B(\ÇS` ãRTˆ†Û½Ø¸Ø²È)àDÍA Èž ° ‡È q¾yDq¾°;lR³%èZè‰ÕNèpè7ŽI)è ( ÐÂÄ«ôl Ìà€Dr([ŠˆcßNrŽPO˜`ǯÐÚÂàZÆÂäØo@B8Oø?à?`Èä eôl ++Ê ‚² “‚å p‚å ‚ò ‚L_0Šå P ®ü¥ PS iòHíO! ›µõ ´ '0à6 À6À`*÷Z.0$é$ÀÌØÜO †  Q÷/ÄÐp@, Ê ¯. @8œSE ++ü‹. ‹Â ,‹å8‰.  ¶ jv² 02 T PfðíH8| xU¬Þ#pƒì(G(/à,8 ‰ÀÚsU]å@@ z 6: üz # 0v O€å‘Q.íÿ¢ ÙZ ÁвФƒâ p(]J5P‚ í’  ü³Ú ›> Ž}pâ D"þÿê /µ÷þÿêpÊê WWl@Ï 0¦YÒWn²‡L£‡pž ËR! r/ ì h€Å ! pàåRp$PÔ ­‡Ax( bWn‹ øö ++%HSQ!Wn%(cPp© ++oHÂææPh#ߺ¤ ++it ˜¤ ++,¤ ++¤ ++¤ ++ȇ¬ ++ê¬ ++Á¬ ++ÔĬ ++hr #¨(¬ ++*¨ ++&NN/ ¨ ++c¤ ++ _Lõ¤ ++.œ ++L klAL@’< Vx#°ÕV\ø ++ ¡ø ++¬ø ++ô ++" 0t ø ++œd‘/‹úT ~ø ++ ªg ªVŠ H Ä /H¦ Ä /3ò ` .º3àŒÔŒ0"7" À hhÀ¬Ôê˜ ++ ä. °PÖ[Þ°ˆ¾Ú ÚÚ „«° ++ °u[Àt„é $ $ 4„\ ¤qð8vcø / ô .V@9 E |”. pè ++8è ++ì„é, àœ ñ\ ž ++¬ ªÝ™é4 ÕÁH ´Ž–(ˆT bä ++N(;#P.øþ.ëþ<.ÚþÈƱ£< ’d{n<]x "îýx è +ÉèO°šåÚZÓýÿê~ÂZIèZÜA ƒ @YjWrúçLyè5L¨j ³ 0‡  ‘ 3”x– 7äø;î ê<ö€¨ 6 ++@1 lm_ZWr_t#ªWr ++ ÷^ ¯ CšWt¯ OXWv¬  áÚØ(2WxÏ(|Ï(Æ/øÄø ¿ 2@ÂUÉ-ÿ2š@^°—å À@Ž7*_°ƒå À7*Á!§#à{. #^.¡"Pñ°Cçš%3 $ $˜ (϶<©7›§ IkÆh:/ @e)RmˆOzÉ+Ox#w. e? wLz›è&7/L\,?|0\,!ã’Õ3b ++ÂààØò*~*Æ/ÈË3ÿÿ«µHÿžTTãw°!0šÍn°žå À´h´_°†å À´¾Q´Cypø ÔY÷ ++Ô0ô•ûÔ°Ô÷ê6ÐpÃÀ¶¨‘c7Dc7 _`%PY74RêJa ++êJXåJaŒ à^NfUÐF8 ~ "åJ9€ ‚8Ç ÿ6™Xt ^€#æÔ ‚Ô "çÔ„Ô†ÔÿÿH_„'lÔ†Ô! Š1+¸Î0 m Ή †‰ †å†åÞ orɈ, orÐæ8 Èš Ÿd —åÂ=XÂ=$2P/?Z#:î6ïÅ .º} ++¡ ++‚_0—å‚ÿ) ’?˜¹%Ò ˆeµ²ŒÈÒæàØÂòZcB?!ÛZ/pã i ++`ä`ädªWŠ8ééQð<ÆÂØØZîÒèÐZÆêääÊÜèàl’èÒÜêÂèÒÞÜÚŽ¶Bÿÿ 2W¨_) °¸BŽ¡ ëO¸2^ÆÆ¡’¡ÿÿ ?W–’– íÇL–b—”—ÿÿ 5O¾Ÿ”Ÿ!ò,kSHÊìÊÜc˜Æ(À¼!3¯'Õ- 'y'&X‚é- Òi ++G˜ –a8[˜[ "ïªêLòš ÊâZÐÂæÐèÂÄØÊZäÊÌhœÇ$$ºÿb%ƒŠÀ~Wš7¤o{œ  "ñb 9ž, f RÂÒÜæ~& =ÿÿH^ž'¨òì  ì "óì9¢"ìBæÊèBç¤ ÿÿ|_¢7° %¤!!Ò!9¦(!cêàÈÂèÊ$¨$Æ$p$w$ÿž`?šÕ!oW¦Gùq,¨f "õŠfª‡$ÆÊø¬‡ÿÿ|_ª7¬‡%¬! "÷B!®‡EÈÊØʇ°’ ÿÿH_®'¸’ °ê!úꟲ(æòÚÄÞØ¢´ÿÿ|_²7¼%´$ "ù²$=¶4$ ¦¸ÿÿH_¶'À¸ð "ûjð=º*ðª¼ÿÿ|Oº7or&¼% "ý"%=¾0% ®À®ÿÿ¸_¾GÌdj ++Àj!Új²Äÿÿ|NÂ7Uy%Ä% "ÿ’%Æ ++¶È¢ ÿÿH_Æ'Т Èî2 JîsÊ$Äòèʤw'æpŸ Ìÿÿ|_Ê5à%Ì" ""Î"ê"Ð"ÿÿ|_Î5ä"%Ð"!º=ÒÔ ÿÿHOÒ%è ÔÓ #rœ=àœ=8R†å¤=/àÝœ=YWÞ åh0Ûx&p‹wåhD ++ô&0‰"õô ‘‰‘"00­êúRO ãX áXÓ°kð ³è¸µï­µï ++ùïD’,WDQD_r1 žgr?žPô PP^&¡]‚2PI$ ùYÝP1à’1ñ¬1ñ!’Ai / @™ÿÿ ++>ž{´HH{´+O„å@ì,ß{´ÅòP,“,/-,T=ÿÿ ++³ ¯/ðšTT.ìþŽ4ðåþÿê2êBWØ #( ÊâìÞàZÜêØØZÌàèä³7 0ƒ¯3Sã ++ƒ¯w¯ˆó ëR!0“ˆóSˆóñå€^ã}àå0P wPžÓ¯ñqàå&^ãn ++ àž kq0å žHô›q^á`Tôç³+ZŸ'0Ì‘Ì&[Ì ++‘÷QO´p‘å^ãLÃ!—8ë Ã@N9.C³ƒå ƒå ƒåN9 zb/Ž (Î~9¹¿€·µ5à‘/è·µ1à‘&ßÜ10‘_OûNz “‡ñ¾®ü ++A¾¯ e’} 3a¬dS’¤o­¾ ­¾¿Ñõ»pp¿Àn³/a,d ° a4n½/Ko pD"¡¾(¡¾Y¾à€àzØmÐm+- ++ nY¾ _ÑsP ±®"qûw1¾/™ï1¾i°?* ?i˜=¼6¼4Œƒ¹4/‡˜ ++d ‘HoHiHcH`H]H! ‘6 HRÈ’HLN?@X X4  ¿ (Î(0\B¯õØ ´ñxWÖ*ÌèòàÊZàÞÒÜèÊäZÂÈÈäÊææHÕõ)HIxWÚ+b¨Ÿ½ûG‡ŽxWÖˆenY êWØHn Êx{$[.xåzýÀQ2WØ66(°éŠ®nO€WÚÀžcuxI«c .¥ðö(?Wê+ ßWâÊâì~#˜2 ô pRWÜ x ÊâÞÖZÐÊØà~oBHȹ!u#Ñ[ÿàâ99&P[÷àâ4 ++Ý/Pá1>x6NSPã Ì á `Õ ñLð ++ ++7p8ê8<ÀOvMJ#LÛ¤Ç SpRWÜpcSWÞpŸJàŸJp¿ ‚ÀÐBWðì8„Oì‹oî 8ì„èXa ++GØ|`"p¥å ©+}è p83Ü"ø PÍP@}vbàŠåÙXX /%XOP¨È}p½‘l¨‹OsÒBWØh#`xBWì¢ùò˜ ðÌÞäÚZÊâêÂØ~<‹*0- °¡[®°¡[®bÀ â\®!°›®[®i9ÿ ++ ’å°—å À—å ^ c:°J ân“p†å(à ãt&Ö€àŠå áñM  ãi ÅZAçÿÿêÚù0ŠåGË" ~ ‚ý nø=‚ý¢šåšå v ÇlGJ ·HB @ 8žg Úc1b€çŒä  ++X ++©¢SG° áÞŒ?S*SEÉžƒ qsEÉËÌãgöƒàâ^ãd ¯Àh’à“åàâX ++ ++`nü ++@XÚ(P^ãSü ¬¨©Ì s6©Ì¼”t)l{ÃÀAp‹åUQ‹å0‹Oòà‹å‹åà—åà‹åŒ{_ Nâýg œzü ++“å å À} tA“åsÂh ++ T/ôàü  8 ++,X” &ì” 8 _ —å Ð DÆC¨-‹Ì Ì ì€ìEÍ”€IÍ10€¢çÈ à ç¸ Úꈵ´ƒ= —= @@ ,%8 ”qÜ  O¼ÿÿê¨/¨Áxpvºþÿê:º ++'ÐÔ øbWäpBWè ˜æ“6É ,êQàƒåÍ 1ƒåRqƒåƒåÑ pƒåà—å–F#°Æv:z”? ž]â )Í‚/}="‰ ð,4ÈšBWæ  ++ ``D¥º% ++@ˆ ++4X.°¸Í|p.àV€Ž/àÝc[^j‚Nj‚$. ä6Òv  ‚ Gm. ”bu †€ ++#p% f  .Á"¹ "ˆ ++Ú/«/ Ž°}í ° .Ìé c`\Ä¡&ºOžXOÌN ++Ò$X ++ „s!X¢R 2Wæór0tŠpBWä ++ /‚b8’Wèš ’Œ, ++hc–7’xø>Wê_Æ X3ZP² ++ J›²Nh›•E#Wì0~?î ++ „ð„2@ … ‰ B=ó 0BWÜ0BWö ˆ ÚÊÚTÞÖ•ðoà„å¡Ùót±rBWò À_7âÞÖô@q—I=/ ¹P3?K "ã‘`€9p–ß@ ð–å)wÑ€"å *wš0à á@% ++`°Ržåà`}àåpž7P+)XàX £ç P»HyPLÛÿÿêT/L.Åô°ÿ©ÿ1Zà `ÖXâ!°èhâb ++Wò` f¢Wò ++ ÐEÌT`8 ++Wô‹x/WößÕ‹Y ˜ ûbZ|ÊT~æn <'þŸ„å „åpñaø  (jvâZ|Êâ~æØžÕ r€†4…Šƒ0‘å ã©#HQâPÉ4˜0QªÁy0âòòn ++! Š8 #àüv ++ ùÒz ++àü(Õ ¥T¥ ‚p„ ++‚/—å ò#¹Œ. 8 —€ ‡å ‡å8 0í6õ â_äÿÿꨦ x´ .id ++p¬F ¥| P½2p¦g ++Wø€ê`WøÎàúT9dÐTc?&S\yájá®%- “ë LÑ #ìÑ ! G!û n• i n’ú"-@Šx)c ‹Ž!“&lP,0c Ø úà} ++„Z’O™S!íë á­õ 0ê/Ù(–lqÿÿêZ3€’ ~’¹•õˆ1’€ NH”ûˆÌQÊWú( ' ++8ö$S êWøë ñ* ++@_åÃÛþ…ˆÍoü P``»õDª ++× œW J_.u ¨˜¡% ɈŽ‰…ɈNpm“9}ˆyˆât`]Duˆó/0šÄ.5O¡, ˆé "H)# D¹©ˆ íGœ ++Üé†n0Œå ù‡&Ïs¡Hw¡Á´‘› 3 ±A’ A’ ++쟋å @‹åÀ‹Ž3/™¼ 3  „3 8qˆÚ~ p ©‡p…”p¹% ƒ_0†åp 7< +°†Ñ†ûŸ’ ™‡ Å“0@M‡~ Ù›®vÛˆ9‡`'HY8*(( (.õþçH,ÙÄÕ† "kþð,/p .¨.Eþ´t>þÿêbú²O’ŸjJWüxÓ#Y`YZ€&H<’Eg”8Y ++:4 X®†­w†JO:Wü&’_RWüw† ++þw†PYÞ ‹¤ ¤ 2 4yY Ø¥ 4¥ ¥ šÑq¡ 3†å"o†å%"æ%" Ù%"  ++%"Y  !€öœ Å "Å Jî ++88’ DÎ ++u38&È8š7pÐèÎh ++ß—å—å\l *hq ++/!h™u ++u ++`Èy ++ íy ++Ðäy ++# N“/Ey ++  Ыy ++y ++t y ++Äy ++ y ++8y ++ÿÕ y ++ÿ}jy ++Œ'#5þõ8À ++ /åÄ"þÿ ++:þÿêL/1Lÿ¶‘Pøýÿêl(M3.è]ÿY  P ÈÞZÚÊÚìò³~¡¿m ++ šåšâ ++iîSšå80š â44O3ö°• 7ë 7.±vp†"®$fd¡/ žpl Í‹°•+¢  óR‚TV®pªBY‹©0X @ÄìÅsB%O ãsB½ /­½ sB1 ++zcBï  ÄêÒØÈZÊT~lBÿ2 ŽNET!0€#(­Ž:YVBBrY$h¬O 8ÆB1Y_ì#”›2 kBRYê!ˆkXf¢^ ²Y?Y ?Y ++ÿ_Y ¢Yÿx2§Q!zY1>(€•"0ÊYaº OhY#2i  ++ð7Lê­ ® €m(¯à€å€å0Æ mäTå0ʯšBY %07/$/þ<<Ã9Œ/"Œ/ŒŒE5:0<M*_—å¥í 1áÿÿÃ9€ãòÿÿ ++/:SSãï ;:uØÿÿàžÃ/Qèÿÿ ++ÓÑéùé¸/Åé#é /ééÿ©/péÿÿÿv/ÿýé/½Ä/ìýé/ LÉé Âý®é&0ôXBYÌ #_ bYÌ ¢_ RYÌ S%*YÌ ˆÌ CâYÌ ÏxY" ÚÊÚÄÊäÔ ÚO/Y’º¼YY ]þÏ8+ì1·/i·é¬)1ª¥oêY8bº#Y“O8Y´´2'È´2å´ü ¢?x …è… Ñ… Î…o  ++¸J'H+7+/p  qåAB?J?  ÅT$ áì8¼ ++ê' .¤Ø„Å Q<¸S±’0#òwBäJ³!@¤SºY{ p¤CºY¤Xp#’è u @V†åè=u …o  HðZðIðð)ð%‘/Lh½LØ—å—M8/ 8#8]üÆ8™<¦8RŸÿÿê8#˜Ä2>JY ++ ® ®">>6°ÂÀBY(Ú¨>.À & ›#ì& Á& Ò&&8‹"³3ì20à ãOC*àÔ6 $Es<Ý´^ `& 1aN{Îß$6!Š5CðØ 6êÜæÂÌÊZØÞÞÖÂÐÊÂÈL_0ØÒÄÐŒ±TrJr*à‹j "3›”;%'© %0†Ã'©Ãg1 / í¾Lg1 [ ÔƧ¯7‚»к/&º@ôžL`d O0âM ð8BY$  /øI@€ðSŠå:Ã&0“3"ò×"ÝsD·Ñ ·"°ðE2Á =ųS˜ÞR1 Š†@š¶/‰³4÷.$`¨A$ šå¬0 Ñ° ++¤? Ñ"_ ÑSp á,°=0šì/P“'?.ÃO‚å æÂ/1/@0`Šå~@šå Ç¥pŠå4 Šâ(p¿¿¢,?=44]è1(pšÞEßé p/33 @†y:áèî›d›.Ù/6/àÇȧ P»P"pàÑn ›å¸¬ËTÑ.•ï_ 0#„“cP Pw˜ ˜NHänC ++ ®¹\h"Kðp/ ¨>@$ €/'ß$€</« ´´HB0HÐe@€å €ˆÖPÐk$½lÖ!„€O£ ++D×D DD/ÂܱpÁ à*¡p.p\“€‚€râG /eˆp;°/M°`ðD Ð   H* àœ/ Ë €¼H á Ë æHËJÃQ"´<”£‡w<fdXH<7"ù·æ.Òþx.»þÈ.®þdP‚<u(d(Md><1( . þô.öýP.Èý(º/©ýÏ „p4 WôW=_`Šå*ÇÖ$ì?BÊŽÌ +é FÊ(ì?.ý”pýÿꤲß@ßRBY$ß`Ù4!¢YÁCåênXˆ(è(`ä)0>Gh3ÀþG1λä1”¨hpcG<XGþ¨tHh£Ç!³Ÿx(’Y$íE(2"H÷&KZ÷' ++0™HB/êY†ZÈnJY&P23šY„?¯68.@|E3 b~,@Õ*@@2>ÿ¥"</Ø<C*,?Y.!2Õ0Cw*‰?ÎÊèÿÿ—´Oüû)0û2 28 l#6Õ4&ÿŸÿ/àÿ)4ÿ6ú8=%ö_ðBY>öÕ<<¡:‚OÆÐÂäÿ”*¼O@o:  ++-H@¼@§@@@$b@S@<@$)@@ @/û@/Í@Œè/·ì DL¢„‘„¤ü¤ÿ²!¤¤ÿÿÿÿ uPh(WBh,(þTðßh ¦hˆ/`ýh/h.Dýø]=ýÿê˜h:h:hˆhØh æhˆ'Ù Y YìG:G:G]-:Y:G<<>;:D¦ C#'òCBMÕ@I¡6Kÿ§&IäS:@BSD)J¶9áhF  ++"¼6ø”i/0óÈdKEò0Eò"9îEò¨) Ö‹p {íkÊæÚHa/}û0¢cDpYH0”OàÊÊÖÿ™ ·ODýë@òYFu8H_YFè;4J8c\5PŒ, #-%N%åL%ò%|  &4Lh?,=ÿ¢;H8 ++%LNAP/vQT?ÕR…'¡.Ñ%þÿ˜¶O7)R7TN4Zn 1 X ÕV‹'¡*ÿ¡ì)VX<Zû3û` å\ Z<Œ<v^<ä<<ÿ’·O<</\<^ \ `<Ofäh##5R%d%åb%ò%|  &b<=<ÿ‘;@<)bd<fÇ1#7rÇ1l2ÕjûP)S%2ƒV "" "pR“/R“ jÄ¡R“"pJ“ubÜ>’CH 2-êÜB »b’‡šÉW4@» *23/ /´ ‘'Ç(¹C¢‹RiD"ñO'G ++2`h  ++A¨ ++2 -ŠåŠåßj2 2"2Oò ++³© ߊ†³©&Ù³©Ñ$ûˆb-D ++/ .É-e.¿-n(=(>2Ÿ°Šå 0Šå,:2 ®øm,:2Pˆ,¤0Šå:2}°šå 0šl¦1p0¦2 éƒ.0lSe0V30lV3VP0V34D4 šå8° ž‰8°—,8 Jâ8.¶..†.}‚¿' wmpwm"ÿˆ ++-‡B.‡-Ÿ‡å ‡å ‡Lç¢4tŒ0/Ò’/*ÁY //³/#|.ÀPšä Àš3Àä…´À´$wØÀ1jÔ$ h+SÌ ++½*E·o–5/7Yf Yf ++”‘Œå Œå Œ0“HàŠåšåž5L×Ù¦6T`_O ++LµÈ&àºä 0/¤3\&””t/ È/†º2'o&6a‹ 2—ÐŒ/\¡h 64 á”D~ŽLDL3 % 4 $/û  tà .6 ãL.6ή5/½¬®5­.6Ÿ€Ž€~.6 /q.67/YT'HB.64+.6ˆ€.6H ++@f @ ++0@,^6.áÿj4Ôœ·æ5 (¹k{k<ZdL<<+<.þþ(.ëþ(Ô.Æþ,µ(dŠ(seUxDd(.ôýõ.Âý(´B5.¦ýÌ.ýÕm‚t_PF8Œ'.ý@.úüÜí/Üüb7£4T@:üÿêÜf(àŠåPüÓ·"$üñt1ÿàs«S üÿ|Düÿê` ,~:7 ZA*=d (.ùûXtòûÿêØ’–­ n5 ›mxYhXÚ f7! : 7¨´6 ++75 ++ $7%ê›$ÀD7êùm"”ze j,67'þ\h+n7” #l"˜¬7[.˜—®Ïz( *Yh8%ÊK ò !Àù7SAšYhù7€mOZYj¦!l«%_rêÜ­%#;1‹p{Õnu« *¿?{)‚9› 9›dzë{P0 ãà{/àŠ¿q›ì8z‘GèÃÊã/ ãÂ0ðj7°è.æÿÜäèä!ᘫ_*YnÃpi&r·=·xD!åtD!0t*ܯ&D!/>D!/†+ ñß·/¼ ZõÐ*è¨Ç222/˜ O‘O"SÜ\!DxYvR4IF!U[ ULU® (UV$òO!ÔX$ ¡w£YtxYvu_:Yt¦!xÄ&_€êÜÆ&$#?"‚~‚åzR­ø‚xøeE ++‡¨.‡¨(E ++ÆAÆ4©Õ¡ ++¡ ++ѸD~]/ñ~45 5 ð™†5 5 )5 5 æ/õæ5 0 b5 Èë|ë0éÿÝ ç/'øç*Ç€à ýqúYzP°9Y|w _ Yz~¨(€¨($AB¬x†.Õ„©(­.¸&/êpÁÿÎ ïO%ø¥(#o‚  A@¥("ú¥(å¥(Ï¥(É¥( ¹¥(¯¥(p¥($x¥( ¥($U¥(;zF¥(<¥($¥( # ¥(/ü¥( ï¥($[v¥(,/ "±¥(•!£Ñ'$|.ÀPŠ¥(,u¥(g¥( ZÔ$ hC¥(5¥( *'¥( /õ¥('á‘&¥(Í¥(`DĸL¥Y' y(Ù y(ÿ y(ÿÿš/í y(ÿ± dTP,(.þ³.Òý(ÄÅ'.¶ý¸Ÿ=(’„oPVHŒ7."ý@ ++Üýe(ìe( ³e(@Je(`e(&4üV@1üÿíÌÄ/üÿºÿ^ã-üÿÊq(,q( q(.üd_ÿûÿêÔq(‚q(‚q(‚(q( q(.7YP/úf(5f(ÿ;`(‚`(‚`( "Ø`(M2Y‚`(„#†&d0YŒP/8%@CâÀ4½/YŠ0Õˆ^(80B0,^(„@"éÿ@"çÿ@@åÿÿÊtäj(j(¿j(*§ÿÚ¥/'Ü'#1‚°±_BYˆÉŠÉ?YŒïE¾oBY”¿Õ’ï­¯t/àêFhp ÿVíO' ë#oŽ 9ëçsçD^ ++;57›64»¯"p þuMš"øøþu"þu(pp‹l "ü ¹š‹"ñ‹ ‹^pšå0Ô%âï å¥$ç0#0#v° ++V?½Ï°@¸ßS° á8° w.ªŸ©"™Ÿ°ƒå ƒå ª‹kšÔ1<`ŠDÛ°Šå@ Šâ0Ó‚½@@ 4°¤Ë]pA$ËäHäDË8Ðb@Šå0Øà ZþàDà áäP@šåðU‡ / ü#üŸ *ï=—p #Ð×Ã4¬Bw0ÐŒE—ˆ0™€Žw  ªm# <Žw@Ûp+ Šwn\tØO¥ ++FÀ H/0”/ÄÄdÞ¤¤/ð€_à: ï Ò›$ ˜/º˜'H£ 0ç.Œ\ | ++yçÃ~Ò.a` ++ P ™¯nƒå ƒåô˜-,V ++ü,ø(5×Ö ˜<€dm(VM®?' xøSêÚSɳŒPyb(M(6)  ++dýSíòx .±ýdœPn(rx/Oý[ „4vy€Fƒ­kàË+í ËpË`w†üÿê¾ÒŸYjYŽ±nŽ±hÈ¢p§ˆy¸e`ð–T¨R3Uí°4èÙ– €—òÊh‚G<`‚  ‚Xò)Y››Àz(’YŽw%2  MŽäy]7òYŽ‹’”‹_š àê‰#I’‰˜ÊÕ–‰ÿ'&AÿØ?ð…#Ž…–Ø…š…#K’^ ºÕžs5µ.àê4FEÿÁïO'ˆ#oœ  ++7ЈmˆXˆ1ˆ.ˆˆ$ˆ ˆ$눧4ˆˆܤ›+„O0ˆ$²ˆ ¢/£˜’à° [/„LŒ.D0ˆ/ 0ŒÁŒ/ 0Uì@쌘"+×.äÏ.¤/  ' # *ÿÀ.¬/ño/à0r/Ó÷1»¼0<. °§ˆ,ˆ¾$}0% €4 /½4 ++ZTÈ2?(/.È'È2 ++ó€/ÿ€ï2 â|°2ˆÊ|$ H³ 2œ“ 0‰0 O0w3 ˜À`æô\ì/Ý \\ (™(ˆ(px](F4/(.ÿ«1 ++úl.éþdÛË<º¥| idR(=(.&þÜxÜ[.úýdí.ÝýPÎ.¹ýd¤Pu(g/Výÿ24p„/³üp/Õp“`Œpœpœ!3pœø’¸`°Ðdd “`ø’  æ2æ22d \`\|È‚œ‚œ‚œ‚MÂYœ‚ž¿ m[_¦àêk[!O2Q¤ÊÕ¢k[ÿ*5ÿÚ3à |œg[¢½¤g[¦³Q³¬åUå¨g[J:g[ÿ?ª¡x_îäÒèÊ¡xÿÚñO!LV$ e[¨…Tªse[¨cT¬e[6´“2 ++#SB²å®d[Ž:d[¤:d[ÿ¬ ¡gæ¡gÿË äPä*<€Ý b[®b[°r b[®ÿ²b[´óUȹºóå¶r @‰:ø)r ÷(/à;Ü1ÿ7!ýz Æ-‰&)û/àÿ&3› ÀSðÉÛ—z Pá’ ),@Y¸¢Cà ,™ ++~ÜÊîØÒÜÊ¡U¡? šå7‰ÿTŠ7‰ ++¹NTkI H|Y¶H,3Y¸Z'_RY¶ZºY 3Àšc#W‚c¾cå¼cÿcŒ7 d¼d(‹ÿ¤‰X‰\¼\¾¶ ++À¤0ùY¢ÀÐBYÈ ¸R0ZRR â_†åJêJ ÉJ ÐJhÄ  JVÓTJn8n$ ¸    ¢@àžå®j `Šå `$R8¸V“ V“ɸ7ì!ìì/à;âà/ä dÊ”ä&Ò”Z¦ D7"R¤ 0p'ùFP ùcùWùm†ã"ýÕÕÈ .¹ÿX ¦ 1YÆ©ov!,‘'@°À ++1Ò8K4µÒY hYÖ eû[ÌðÞà~GÂÝGÂ" %2L ++Q%ƒ,Q%= e1"0A%àå pža1@ùA%a1@LY%bŠå$ôy2á2h å2akÂ**å2ÆU.Âó@à€âßÀÝ*ùrù%*_àå ð Zé1*1,@Š ….=(pe*1ôuþ….M-@þ"Bá:Ĺ+0“ Óû ™+‚²‚Þòœ à‚å0‚åi3y˜ W´ùܘ&ª¸hjô¬ à’ñ‚Ø‚>¤-žö†‰,† VÇ ++"U"pyì=$pâèjhÙ¼Æúÿ  Ô.^q/Ìb53mI_å @» Pe R €å )J° Í,Z…¬  ,m- JXœ ,ÉJ(q-V)È(q-$q-Óœ %ÍÛ¯f›(sf~\ÿÿê±ïOäÓ&@¤ ++/Üþt^?OvþÿêÛ½*¥Û½×½` -rYþÿê\²Ÿ(/¸&^xYÂP£êYÂØBI&¢ëh‰*Ðü)@+¾ @@pðö½4¨ȹôêÅ*ˆ8.*x.*&8)¤) Ú§Š\ ++ X`8bYÂ2(Æ$?Äx+ ++ÿË?YÆ ++(H ++< Ë+ÔaòYÄPì`ÚCªYÈÚ?@v8E#]"8EÎ,8 Ú,‹Ê,èâ5ö0 â?à—ö6Ö /ýòÌÖ4ààÖÔ/åÊÕÊÍÊÊÊÿÏÌÊ_”!4Ê,i@K’³P¦ÊéÿÏÌ?h0ãCÂYÊ㹸Îã?P”ã#_JãÔ½ÝhÐ Ð])¹¡)/µ/ ¡#/ $‡«/¡»Ñ¡ ~û*×?ŠÁÿÍÒÁ_r!0k )(ÌÇ®ÐÇÿÏÒ°=OºYЪÔªrƒ#aZƒÜÆÝhÚ ˆÆ,ÞÞÞ ++ø‚â‚â‚ƺëðOŠå è" M<"  èVšåÕÿñ#0 ++šRvÕVR r$ž# ž#.a2½ž#’ž#¿YÞbZl*$âPBYØ ØYÖ®5N@0 á2ÈoÈZÈPÈP?`Š`ò°¨  -O"lÌÌSÌÄ°-O ÁJ÷ ++øÉ0-OêýI =`Šœ/Ӝœ “µáJ € h  ¼  fô™À @ŒÐðšå 0šåáM/}$…!‡$Pà‡åHA Šå  ðÌ ¡]EP šå µPp4S4ƒ¤n àƒå @…J?4 Rp€å 0-N`ˆ °jÀñ 8 88   8ìÙàº(¦k ^|ÿÿê“ôdD¡{Ü (ð 4D©þÿêà/ 0¾/Ù¾°0‘ùIè}?TªPØàGf` ÂG 4 ZBÏG ðK:½K  jÚ  I ++Y؃F}ÊYØ ++0´AÚ Ü OHYÞ÷/#cÚ÷/â" Ýà" ÿÿr¯äZbV<# " àâi@#eêèÝæÿÿr¿êæêÄb8/æèê#gúîÝìÿÿr0ð8/h/ìîð#k ++ôÝòÿÿr`öÂÈÈ84/òôö’@mÀ0Wùø^BYü ˆ%*%1 %d@î%%O Šå)ˆ>µÜ>))_ šåÖ X  H ++P5D55 -ýj r/àveS„å 0„œ„eC„å  ê ò ̵Â"MI AI H†I ++*I ¥@iÝφ¸Ù+$eØAXV" úv`Yø!¨ f~\O  V úD'@Œ5 q‚Yü0‡ŸÒÀàB[ ++v[Ô [«00‘Eï&@p¾C ;‡&2 20h ‡&ä… G `þ ;øòmƒCS Šåñm"pÐ;±õm@ž ++4b á04„_àåT9|­ E0<ÐT㇠ãþ \Ý\o\M•R½P´ “åRáQ ++0¤½P! ’KÿR½P ++DD—,/+D&%DÌ‘ ˜: ™&Å™,[Ì ˜<X=øQl#ã·ÿpP0Ö“PÒȈé‚»d&0Ü<&pØ< ¡p cè<KÄ(}n" =k.;/’El'H{H <4†åt‡'Hbld¤TÕjp ”Gß ß 0ß /.)m ,e† R@€å `€áSãHÈ  ØáìËâ.²ÿg¥—P~(g(>n1_#ÿÿêêô| 1à—QU ØþQUO^ãÕþ¨//m¨#ñ¨Ô! %ŒäÐ"H ++ÓÒ  ƒå ƒÀÄÀ˜¸ ˆ# €˜4€åã6Ÿbô"Œ ø"*‘ !D.~šå0šim<<p<b;VpÐU<% <<<d&Em @H/ ଄ +0€L”#B`êèÓ½t¤` ‰PpL<5&oÿÿê>ît1à“T ²ýT“TO¯ýÿä T x•  ++È'TT+ge/‚T7hTpT ãþTåçþàT TxU<<0THT T0T°pDT µ /í.Oüx²HüÿêÂÚBWØÜCs€Iˆ0[ˆ'w²YþP† ŠYþp$D ++^nO (ç []pÒ!WXW%`&'Wn)"8D¾oþ­mXÅ ×Gh[ 4°É'ÈßXÕ?[o*[ÌXToI8[oo‚on8I ++@½ç! Ú!+ªÚ?[Î=[¯?[£?(x;òYþ ++(on[PEš[ ++σOÒ83"qRo;/[Õ z‘ü üü äläætz#sR8_†å…¨,è * Ÿ' ''#è< ½<äÔÌ? ++’S<ÿÌ"[_T!l rñHB[ [ ÄS"Êäø/„&p÷5"õïäÔg!à—# _P“´}´"0?Î_ô„/Õ[&².76Àÿ76/=o’o ks„7g vWQb0å ¸€Ëi "0˜ÿZ"0 |…çB_5 "[5/ @[5RjÄ©—xž" @³ %p4·Q¢_*!' Hƒ¯4áÛ· ?ƒ_uÿÿê™»/¹ï /04.ý€ ¯zÿÿê2Òó Æ3wÒ[HJ _¢[é ËP­  0H Q[÷(ƒO’[  T #uÒ  Õ ¶ ÿå?[ !VPPe xe wõ""UÕ e ÿÿ²$e _X!$e #e ?[\ \ ÿÿÿò\ \ J\  "\ X\ {l( Õ&\ ÿÿ²$\ #P&P(\ \ Â}Â.VÕ,] ÿÿ²0] _\!(] #*] ? ] ÿÿÿð*] *] J*] , .] \] ¹4 Õ2] ÿÿ²0] #*P2P4] |] º:VÕ8] ÿÿ²<] _Z! ] #6] ] ÿÿÿò6] 6] J6] 8 :] Z] …º@ Õ>] ÿÿ²Ü[ ] 6P>P@(|\ "‡R®S/[D®S0Q]5à†ù]ê®SYx[B è¤OXðE_2 œ;\O[à†â Ôìé{†å`Šåêqo  ãp’S¥’S… ++_T$ùTD…^T0—å:fTp áQ  ¾ x /q^TYšå¨ÿ¢¡ Mp@@ZæM%¾Û ' ++h Rú[B` R#[DÿH[dàÞæÒèÒìÊ~‰u˜/[HÝFÿ‚\\ ++FH¯jÜÞÜÜÊÎÂ#‹rLÝJÿ‚TT ++JL?p#G™/[PÝNÿ‚XX ++NPv5Q ##’\'_Ø4,Ðs¿Ó`7‡8_,æ, Ù, Ì,hR  O ,¦È«Û"æÛ@Ó ++ˆV"ðP" 4Är 8/}8 ´+½€V'0=§’=§=§=§  O ŠâœXu ¼ ³ôØú¬ «è4M  Â׈Q‘ÛRÉ]½$ l²œ °0¡^ðœ“øt$n°—åpPzPo°†å p>,McÀà0Mp µG0M*D0M 0M„Q\ zÓ½ÌL0M–a¾fXGd0„Q"oÿÿêûï˜Qñ’å€^ã‰à’å0ˆ uˆžH|ñoà’å&^ãl ++ àž i D žå÷dmÁÏ·“æâ^ãL–a–a@,0Þy,b+n ++åà  / àD „å" ìß6Î("ô%/ ôÿÿÿö@%/M @ÿÿÿÿ//@ÿÿÿö H| /ÁD.ût›ûÿêÒB¨[£[†Ÿ¯Z[R`[T¥ÊVà‚GmØs"![=Ê rß[^ ++ôÊäÞ~dêZZêZE2'Xå"WÖuËF€WÚÔ/ ++8<'04!B48[T(?[V?[X([ZáF(«/-«–?VŠ!Pc)SOš[R„\€ CÊ[\ Oh[^’#‘Â’bQ)x’(…tŠ Š3à€–/€å…t‚±ÆØZb˜’B[` ða‰x(/)=xu=xè‘0z"Hªg[`8Âzsz[b(È/[d“Âh½f ÂbfÂhÂj•Ân½l ÂZÂ_lÂnÂp—Ât½r ÂbrÂtÂvÂÂ"™Â(—/[~cÕz…Ò¸Á¦"—c·áo¶ » / pØ0ªØ ¯ßI0!” +dˆ!/Œ 4Y6Œ;dàà9:)¦óµ)HC [|µÆ_[€ ¨ÆÿËoŒ%d1Ô8B[x €[’îµpØÞÎÞà@(ý¡´8À áíµ#%˜L ++1" Àů©—œ!z5ò\9’è? Àšyµp l "ø¥¢ lÑu–C0 á lO œåI—*0% дá´Mp Ô¦ ˜ Th$ü "üíµ$ü"}ݶ"°Ý´h ©nq]~æ=œO$ÀŒŒ Œ òŒå Œå Œå00Šåšå¼ÀP$°Šå(a(Àúé$>èjíñ¶@$°šå"á. À#A ÏÀ€å °€å@€å$Å´K]yzx „:[½—0„: å(Öpªéœ_‹ÿÿê!yo TS@EI—6Tù-´õ³¼Â [ü­Ùy¸ù³Ýù³xÖþÿê>’Ã:J*[xêÞ/Ζ ú ++—In$°Cnݳ/`ç: À– ù:–Sr[x*ÝH‚ ++`zX[|\Á#[x™ ++s’[zPe†À6~_;>Œ8¶ ++;#2;†· ++Õ‚· ++ÿx„· ++?[€® ++ÿÄÿ[ˆ ØÞÎÒÞä%ˆ· ++!‚„‚ ++†/[ˆ#Ÿ:ŽÕŠÿxŒÿбÄÒèîÒæÊZ#/'P#/Š#Œ#Š# ++Ž#÷#¡:÷š"Õ–"ÿeˆ"ˆ"˜"ÿÎoŠ%`î#š” ˆ[’áÁþŽäùNOÑ ++)‰áµ=N_0 á¾^ˆ©Ná”V«áá†›Ý x©N k©N Óðþ©NZÁfÇÛð$%–©ND©N$&0 YY"(@UK aU±N_(@šå ±N0- /Ù- ±NµÃŽÃ~È›Õ/]Ré *µé" P–ˆ.唧ƒå”¨N¨¨N-{‚[” ++(¯–o ˜o ”o –o ++šo Š‘#£ª‘ o Õœo ÿxž‘ÿТ‘oÂÜÈ'èë#'[”"sø-[ž"œ" ++ ‘¢‘#¥ª‘ª"Õ¦³ÿx¨‘ÿÏ_Ž%h‘#¤‘ÿÿÿÔ¤‘¤‘J¤‘¦o ¨o ¤o ¦o ++ªo Ž‘#©‘°o Õ¬o ÿx®‘ÿв‘ð"*î ‘¤"¬"®"¬" ++°‘²‘#«Û3¶‰aêØ4rbÏT³QêØ‚x[´  ++°4«Qn.õü ++ŸB/ŸBÚŸB= —ØÍB¼£B°ëïŸB4˜˜‡ŸBŸByŸB$ëBŸB`ŸB4IŸB;ŸB<"ŸB0 ŸB {ž<KB  í, ׿A¾°#B™€Ò-radJä=_,ÿÿêᤠk8/Ik8.øþpwñþÿê<š—?Œ ´íœºÆ !B¼!B ++^lBâÄ(8!iCª[´è ¤×%[¶aï¾##­:œ¾œå¸œÿÿÿÿh¸jEº?[¼„!6[À# ÜÞèX’R¸’ ++óõ/[À“¯pÖo B[ÆR8¢oŠÄ}ˆ¢o± ’oš“oÿÂ{ïÈØÞÎÄÒè~%€¡x#… 7È “>Oó­xl²¸*]U™w!0ú\ S j±naDo ++¸†ai†a¿Öa.c±xß±x!;4Öbç Eʷرx­x!­x$$úÖ VÖòÖ"-é>!‚T×$ƒ0ƒ& 0î®Mz ¹xg" 0段x VóÒm?$ H»® . ù¾×0™yýà |“fõ …ö× ?žÝyt(Ú°/]HÃLx?À$x­|\qz[m·2±þÖ @iz /Ýiz ‹à× µ­(œ(…tfU>d'(×ó–ÖâFô1ð»!àž‚´QÜQžåàŠÖØPãÔd!àšš´@Ѻ p^ãÎÊp%O!/­p+°O!1 ã±B &`L9p–œ@ ð–å  .¸k P? ãHQHmàšåž\/}À'lhíD/_€'LHH&Àà€+6õ À*(C"( /Ã!#ˆ²¾pg"Œj|ù["ž¾.$pñ bùpŒŒ¼*i ŒäDÄýÿ45Ä à 4N¾Ú4  /á  ¢¹sŒ¤“d/‚¤ ud$ h^˜.M||>(°ð‹¤‹¤•‹å ‹å‹|"peE/° (yJ¸paE.°„„ °!G*é O%ýÿê}ó Ó»t¬6û„œw© Ïúüÿêšåp ã *Ñ èh_íÿÿ ++-‡´.àþÜ.ÑþÜÃ(±(šŒ|  "ðþãµ  *Ý .”üPüÿê¶q8.¸H%gÚ[ÂH‚7Âh°Zð âµIÓ”@I`R3L èßÞ È‚H´û, (] ºû%Ê '°ã ‚ãc`9RX0ß P©4'¦ÔHÃPR&'pa 'êaåH? 5¸SÌßýH. ++æ·  „)9 %r,M·7Ò[ ++,„ĺ!ƺ!ÈÝ&³Ý&Ì‹ÕÊ‹ ‹/1&¨vwRa@ á¤—&ãêô0—É—0ðÒŠÓ—e& —¾—ÿ4Î `ÄÒèZæÊ /'x JXB[cïÌwÊiÌiÎôµ#&iÔ h;€#€(´ ZÞw€ˆ1à€Öwq0€å€5ýþà€åà—å#à€åà—å':Z1Pਜõœ0œÆœ¨šB[Ð 5hœ« (=(.(/É(Ã(½(£1' å¸ SŸ(¶Ï„ d 0/I„ ~VÎ =” 2ž(òÈšÄd ++±Q±QêÈ Ð+\Ð.N§+"àÊ 0 tÇ +'ñUh'ŽÊ!ƒ0ˆ ++”4ódâd„'3Ô¨+3ü0e Ì ­ÑT0e쬈˜ 8•° "t"(?pžrk7" rkß4["+Ud?p‚åÊÏ6hÊÏDS4Îî,8íæì0 ávûrkáÊÏ r¤(–|dd<M(% <ïC".Òþ<»<«@SH MöÕ`^ãKºLI€?àŠÌ</Ì*̸!à@ ã@ÜKbÈ& ˆH½HOàšå#äöè'åˆ/Ø€# /Áˆ/¯ˆ¡  –Õ1ØwØ4`ØRØDØ<+Ø0&q" Øì ++Ø*Å ˜.1ý´äÎ3: ̧(™Ì‚(gXŒJ(8(.!ÿh/ÿl"æü¸Oäüÿê *- hÃl}¼üÿꮢlJò[Ðlgº[Ð<˜2P4ø>Wè(š`šÊÞ3[ÒÐÖg$_b%˜<Í K@(ª!Ïâ DÎ !RXhÏ €&?[Ò¬ù/%!BìR5r[Ð-¨þ<ÔO˜[Ö#·ziÜ  =%0À%«0Ž€å0€å_#à—å+Þ ý ÄoØ 9` }lîèâ"pÌ?+p— ++áÄ»B hh¢P ++°apšå —⌰hó1L" °p  d q Oƒå‚…`!xI#ƒ | ++;lW2$„°"|#¾4ñ¤ ¤ ++/à4)ÒŒ°Œl<)? p—8) è&p@)$/ª¼#'ö|<)Ho—åö| ¬ „°„? p€„ß3 „,„ „„ /U„H (¤–<| f<O('0 <ñ4.ãþ<.Õþ<¾<.°þ´™(ˆz¬@l¬f¬d¬b¬X/à\Ì¥¬C\\°¼°l. ` °Ì&äãààã@$àÈ`m`'§9õ('äÄP/×À# hÀÌ `®àÀ ým?#—È+\y4b8p|^ç¸.€F<-0À ÔÄ*m \Èâ˜ÌŒ³^ç <—: (gÔYÔK(9("ëK ó ++°Ü H/µ HØ|'¨"¦üX# .%¸ƒ}|üÿ꺚kê[ØPØ èð¸Æ:ð"&`"Ú"Þ"_`%”"k.Ø.Ú . #rnx#h.ƒò/[Úï( È' "làE(#b÷!`99s>(¸9C[Ü9O¨[Þ9#¹ê9âÔB81#›ÔBƒoà  ++@ %&°ØB9ØB/$ØBé ¨‰µµ±µ. °¹ ‡ìꮽ /ùa ++&ä 4Çð ÇðÄBo0‹å ‹Çð ½²±E% 1 Ñ1¶±Y4_°šåÀi õm €=¯€å À€å°€åsŒy8C4bl Çð Á ++ypÇðgí ++‘ ù7Çðy/ÁyPU ËÇði Çð P1(ÇðëÇð$”C°õ. õ" pÇ]xÀþÿêB¢øI:[à]æ‡[àx±pvh–*jj%|~Xm02øçWD7à ax2[à ++0§Câ§Cje#½ ++e戢/e š!eÁEÉÈ„/È„äH¹X)JýÁ[ê)J)J$Ï)J0µ•0N ͵00 ámJš' DD †å(DÍ—ñ‰ñ^P÷þ#È/f#R ýEœ$œ-œœ  l÷ä’Ýò ´%§P÷œîbdM»~ÖýI,ýI&]üþÿê8ýIä8€yî€WMê ? ˆ^, ++H ++ÔI+CR[äÔIh‰Bª[æ1¿hHÌØÐÂæÐ4¿mPè4ÓX  ¨1n°0¥= ++”= fO=™›x›Å paÀ7 ++PÀÁC](A¤Æ ¶<©(˜(©r<eA&TÿO7g&‚[êñ0[ì™ä3T þ"Ú>ÿøÑ–Ö"¾è¾_ÌØØà»#Áj»î»ÿÿÿº4[ê )[ì¢:¢ Jî ßHÌØÞÜêÚZæÒÎܨ#Ú¨ð¨ÿÿÿÔ$¨I Kð© ©ÊðàÞÜÊÜè­#ÅÊ­ò蹈­*W ­^C¹Ö8 І_Õ µÊµ . D´D ÅDñŸµ‘  ˆƒY(I§j °^ á pDT pD±?×6?*1×6må p„$„zB„å 0 ++ ++Õ¥Èýº^ J(vhZ’/1?*‚[p’hn"+H+CŠ[ò+H2OÊâì~"#ÇÚÌxö"À"1"Ï mË Ÿ†å†åpÇ éÇ ÍÇ ÏÇ ôÇ io  è*2Ÿ ++o:Ä4 ùn_ž"º ñn, *Åñn"žâè ‹!cdóZ‹!C l/M‹!/׋!‹!  ‹! ½H3kvÈ4ÍH¨¨ðPðP  Q1à‹©“à‹åà ã!(%) -15H3 ã9=[Aà‹åíuø* ôJ"°w_ " d™3°ŒEŒ$V"J. Àödö' í<*!°€× ‰rÑ× ð ! /„0›p½…d8_4ÿ/á£(•]HROQÿÿêkvÞ^Ç :cd7BRºÂô ++`B `BI¼“a¢[ô0“`õ YÂ[ôõ *6aÞP¨H¬0ðBOTØ ptÂ)¦@.6 Is” â ++ûû/ïïÊÞ¨  ÅñÊ[ú b @¦å!7  Y?ö ++PTL¤)äš*.h"xí!ôí!hí!C²[öí!_H0Q#ËZª üˆáøˆÿÿÿÿÿ.OÿŒøŒøŒøŒû?[úegøe ++üeeÍd ]¸1Ðe3eÛÌ÷Ï"pqqt×Ìçm Õm Ími]  tü@ ++7*Ñ¿m¿Cšåé€&­bݵ §Ï¿)µ,/ µ ¥$¥ …¥<¥ õ¥ø¥ô q¥=¥ôE¥ ÄDjB[þ ð ¯RÌØÜÊÎNÎ/”g/Î/ Î/ qÎ/"dÎ/_ óWÀF§ïû4“5 ++ï†ï†ï†ï†ï†ï†ï†ï†ï†ï†ïçyÀG “°†å `Šå è  y/ýD° ®!çm ). ¿Ñ¿ ++N ++ËœA#à×À·°S™?â ++$‹õ" ìŒA}¤S$ LeÀ é ‹P@`¼.8=8 {û*C8/ 83¬GHÁ‚0ÜD38â—ϼ驔|n`_I9<(±.üþðæ Õ¢A2"/i2"lxxeþÿêVz*2o ++[þhøù2` :9>X„3XÊBh5b€Vp@äxdˆcBQ‡(ú[þ ¹3Yê[þmò] ++XsY2]jm" $mÿs¢ÈmxmEÂ]¿;m#ÏŠmÒ0mÒ‚x]  ++#eO; ++1,/­C½C %<½C •øô©ª /Ýó/åæÙ´@ÆHÝŠ/iæ«´@ âŸ3à‚ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂÐlç ++Ð ƒå÷.°Ð[œ3 ‡Ð/‡å&xÐpÐ@7 ÜÜ0E‹H^næVZS ¨²*… ++ ÜqŠ àzɹ˜¬(žó w,²”ú /uú 'p~ ÿÿêl ++‚"Ir]¯  R$¯ ÿrRâ]¯ '`È ú¤h¤ÿàD (XûPä8I8AìB #«(Ç%]Ç Z у9/] ++Ö4Ã0]Ù4¸>  ++IÉV¶VÔ%  ++I ›VV¤\êVVKV=V*/q*8 ஶ_jÿÿê¢,/Ml7p¢Û*:H/]ÿAàX$ RV ²]… 6#] ++o?H"Rÿ ÓªÀ8] ÌØäÞêÜÈB] aa Û»‡=§+ÔË/ —µÏË aŠ7;((^@Ð ²42Õ£ Õ£Õ£ 2’ðªoì&€àìp9/ êÜÅã8? ’¡œ‚] pG ++¿@§Ý|A‚]Ô ++L£Õèý ]¼'˜”Ì”=€xB¤êýÁýÔýo ý9"ý 9"ø9"09"09"0/ 9"×9"89"ÿ-Ñ9"ÿ•y9" ) 9"ÿ\9"¦Î9"Y]:"S ++]µ Xµ Cš]ûX ++ÌØÂÄæ ++¯×‚ÀàB]Öà¼(]ÖàÖà¦1ãŠ Ý  /qÍÙ çÖàÄjB] )ø 2Æ,ôZÚÂÖÊZäÊÆèÂÜÎêØÂäÔ,'0Ÿ ++Ÿ ++/: 0©: y­£ ++.a¬uäšÙÛpl ,0‡6 ">6  a .0w¯ v  ý G †åL-0/첌$0"Û¹H ++™_å00/ʇ?0€0¹añI¨Ó  „Ï °' /“— °*ðn`ŠåÀ.|j" ++"= à‹0k´v_À†å °û¨'^Ln$ Çe/O æc À†å°@¸:¸)¸ "L ´´ ´°´ùð/à˜o#è´ƒ [Û: ¸ol/̸¸S n—åp¼¶¼¥?¶¼#˜p ´‹´$Ôs³ "p1(àŠ9,àŠ#ô#0,˜À]àã½ZaåÞ"00˜ Uß  ã CÀ†å tr ¼J8 ‹878 08S /$S ðŸ0)nd/Y>)0´E?p“>) ++>);êž0xIYl1’—.06). •21àŒÙ  ; àŒé Œ… ++Œ:)Œ:)Œ:)Œ:)Œ:)Œ:)Œ:)Œ:)Œ:)Œ:)Œ:)ŒJ=Ù‰á=mÀ‡å “QÈ)'0à²$ ^%Y ™@D²œJ0œJb À‹å @dJŒJ.0Dœˆ D0†åˆ@Ò$‡m )Qƒå @ƒ ++šq <sÑ2 ü taÑ' í8À8MÅ&`àZ¾ ++®)/€åú%98…3¹ Ö¾0аJ/}ú% Âa¬™Z%†˜x (]xGí ´ /íþ¦$00K \0K’n%‹œª”$IB]2¦$ h¦$ÿ  ¦$ XM3—$\3 "3 «$D¬HÎ#¼G­—*E ++]2c#2 c#Sâ]2c#X#4X#!HV#ÊðÂÆèÜêÚk åk 8ŸSáh6  ++ ˆÀ_;#3ß(Ð w~ÓT w~_0„å Zy ßkÑ´oT ++oTÕsT sT ¬*…¬“ ¼8e8R8(ùc#7 Û *p¼Ÿ.pƒ¼#E ¼Ýø/øàÐ+5IF›p”IF/"€³HB hBI˜vw"]6p ø}ŽEO‚]6aK ++8aKf#çº  ==ÿÿÿL‚=>=>=>Ñø`@ø`b$ë¤/]D=áB=ÿ¤‚=B=D=n=x=#íúH=éF=#))X ]=ÿÿ F=F=F= ++H=]tÌØ|*ñ­Ï/]LCáJCðC–JCLCzC|C#ó*PCéN€ÿÿÿvNCNCNC ++P€d$#õJ$T=áR€ÿ°R=T=„,Tx¾÷dŽ/]X>éVÿÿÿvV>V>V> ++XŠi z+ùÏ/]\EáZ‚ÿ°ZE\EE|Eû×|`Eü¿àl]^  ++ü8FVQGK_|¶ç2.¡í_|©ç2ƒÀDºp_ë29À/Qh>+C\9‘ò,ˆ>¨8 0/%Ø9‘Y&ø8? °6¥/Õoè. °Fï˜f/Þ˜f ,΢¸f/ÁÈÀ4áÐ'"îéY \ø°ÑÊ,°Ä:hÁ1Ô?hÁ¸hÁ3hÁ‘± ++ e⥠++uY -eâ5 hÁ. gO£38+P ++ò3.äþÈÔ(.Ãþƶ/¨þ­X84+!4.Jþ1 xCþÿêdâ4Iz]^s{ Zá2?X<p&˜÷ÊX:ZÂ_f!œôÊqu(J]^A3j A3<‘ $]` .#ýªû fû åbû —Gë e™ë \ ë ÿÿÿÿë ÿáë "Âë JZ]bë :ë yo]d'8ì tE*]bì J ì =ì ++fì ]Gÿë4jí åhèÿÿÿÿÿÿÿGhèhý z_b! èwhèhèhü ++jÂ9$$ Â9pû ålèÿÿÿÿÿÿÿ7lèlè{_n'<èwlèlèlì ++pèní gà/]ví årèÿ40ý èÿÿÿÿÿÖrèrý {_t!¤éwrérérý ++vý tý PB|ý åxêãí VêÿÿÿÿÿÖxêxí {_z'@êwxêxêxí ++|í Ô>$ G€í å~Ò'ÿÿÿÿÿÿÿG~ê~ý z_d!¨éw~é~é~ü ++€Q$$ ©~†û å‚Ò'ÿÿÿÿÿÿÿ7‚è‚è{_„'Dèw‚è‚è‚ì ++†è„í  ¢OŒí åˆÒ'ÿÿÿÿÿÿÿGˆèˆý {_Š!¬éwˆéˆéˆý ++Œý Šý #ªý ’ý åŽÒ'ÿÿÿÿÿÿÿ7ŽêŽí {_'HêwŽêŽêŽí ++’í í ¤O_ÐB]˜¦f0Ñk¦f…h”  ++øæ®é )ñ ùjbµÜùj5Àxýj/c5À ++1oàGoà?à á5À/à ++¡ ++%oàñ ++Tš•„ á áH` ”´›@ ”ïÞ/5 °)kN³¬Å·/±Å·.ˆÿQ D1m/5mm"੼àlˆ L‰l"àˆ½ltl,íl/¼ÿÔ£=6 ++‚ŠÕ¡7”xÙ ŠÙòj]”ˆB]– ?˜ âÃQÆÌØzÓà O ++&èûma”_ —å 7 /Ø7  ++ ¿¿"Àù˜&gÀ p²p/À o g›:°W $#W °Ã ++€Œ ü=`ŠøipYp8Ap3p4pp p H/ê7ûÀ0 ¼ Oq.ÑÀ t/ü# l+¬Ç $ž ++ÛBƒå X Tœ$ W/uÕ/gk# l"PãÂT B‚å °‚å T4$ HXEœ T_`ŠåTÄñ™ôk0#ä°^ƒå °¬/× ¿l/±3/š/Œ/{7&cŒ/U3/>0ï/"3/ H H.óH $åÕ{ /Øh3/Á'É.°¨3É Tt°· ’ÇÇqÇDdóß$/LEìÛ ”5 ¤ <!< õ¢(/àMŸLN„å àuMŸ ت®Ä­]ì ?ˆx·YIŒ8(!ðP.îþ<×Éß»<¤<–<~Sm<_<H<:("(((.ôý(.Üýð.Åý´·<©<’<„<.lý [<M<6<(<<.øü´ë.Ýüø.ÆüP¸<. ü <y<l^ŒGP9<!ŒtüÿêØÂ0¬:¬%耸X¬:4è²H² F tºX¤¬ðô`$°h.wãhr¨Žh`x˜^­ t¤ÿ&&8j¥-@üì_ z]”üì ’ÅUpB]–=À+ ò6(& ˜@V¹T@#Bo"i¤ Ø‚4µ µo"$ †o"W„æŽ ÙŽ V¸Žo   Àç¼7ž-  )Ä  #tª)Ä>í® "³áÂÞà šåšåÓÿÿêT-:^ €ÊÎÊ»ÏƒÊ qσ Ê"0Ê Û"“K50€/Ô ¡ÊJ Ê/íÊ¡ÊBº2áp0 " ù¬ã D Y” ¸!Hð= p€˜;ï  ï Ð ï "ï p ´ï @fµ #… í« × ¾(± <.‰ÿt _fÿÿê§åÆ,Q>µ.2ÿÌó <ðÂ!xhÁTP ø&cç¼Wç¼ ¡02÷'•<&/2ç¼ %• 0• „# âÐ Q„Å °í§Ôǹ=¢=?Š÷ 2]¢ú P!Œù `ù î -­ÓXB]š  $äPÐÊÆÖÊÎÞAÞàh´0 )’¹¼T).?¼"TO°ŠåË lÆ»Ä@ Ò¹" ©Ël)pl Ü´ lSý0l?ï ßÚa€åà€âŽ½DŠ½Q0Šå ¶ˆ¢ôu   %±-@Š¶Í;ßv;ßš¶/‡Î +ðâ¼#0œÏ'oKœN‚å Oa0iÍ ++œáÿœ# íœ !Ï † n¼yL þ "@8Ã'<[ȵ< à4?šå¤H ²¼@;(oÛ€(2 ÏÏEµà@°˜+ŠÎ _,/ ++ÿ‡'/~#𮾠*m®¾f#Ø.¬þ w¥þÿêFŠœ ½8šXÀ  ]šØB]žµ4Ð äbÞÜêÚæ~µ&z 0z ‚ .v &`9p–‚S ð–å*åz 9&Þ &  /Ù „ ‘Û€ÿÿêrBüǶ–È0âSã ++l `0åSÙñ ++ âRã0“j#USãúÿÿ,:qàå ^ÿ àåàâ^ãöÿÿü R.àV`(ARX—'(² ó (B]œ  PT¼à¸î_žå0žüÁ ++ Jk0/ ,[vþN¢Àp„å0„å&Pã’Só@V5˜@" ++‚ š j )r ”J –Ý Çí ë.Ü% ÉOšåˬÄŽ«Y ++žŽüÁ9‚´`Œ+%°Áº$ ++(K·`8ª]œ?( ++(ÂË`8Ê]ž(VÁ¡¹øiÿÿ ( ã,Œì!xJXµ,˜µ,' (Ùßš, ,6 ++ôÈcÚ] Py,N  ++SÀB]ží`  ‚ ƒÉ ¢-/ ++`Ê|à Cº] Â€ÂCÊ]¤Â?h¾#r¾ª¾í¦¾ÿÿÿÿm'ÐÂÿϨÂ_!”Â!É Ã¦Ã¦Ã šÒǨÇ:¦Ç ++ªÇÇ#¢Ç®æHc0€å€Ï€Ï“Ò/àæh¬  65»$»»Zæ»@É»È@³Ò³¿@¡(Q³¤sÓ–·½ ³ͳ>å"@L @6ƒ6!@šÍ rË/ :+Iy-_× „>"„>0ׄ> ûÒ n‚ׯ¾A ‚™ª_cÿÿê«Ã,AÃ.Ã'ÿÿê8š¯ÿˬ_!¬2gª]¬˜¦XÊ]¬¦ æh¤Ø£`ÌØÜÊjÔOÌ®# ++¨Oš]¬'æ ++®'æ&æ§#⧴®>.Û“ O§n^ê^ É^ Ð^h° @‹/— ¤/IIB3Nè“Bôž?‹"pðÒ@¥‰/‰K #?’ŠÿͲÞ_ !˜Þ.HI'(òP[+?°pJÿË?]²1~*]°`mEª]´ÄÍ m#òm¸P˜m,m¼® ›â mˆ /Áˆ ÔZÜh¶  à]‹âŽ{SC‡à ‹â `.T?ËçËçOá0-{ Ô° ¾Ô°R ŽÝÌ(µ˜ „Lg,/a€rp]kÿÿê"Çà7¶¸+3$3ÀâñÖ°† S Ú]¶† X×Cš]¸Ž2X$Z|ÌÒðÜêÚ'#!'¼'Íoº H'Û'È'@­'; à ÿÿ*‰mã ++ ƒåÜ@l žåh ½¸ t 8)¢KcZ ;í^@‚å pí.w R0*à¶J4½ƒÚæc GâËý¾°×ŒØ<-"æ,•ÖI%p]ÿÿê.[?ºhz$ù?]ÀÞÞ¡$ ++c`R3Ly3:¬$›$¾ _B]º¾ ++¼¾"Òð¾/ØÞ¾##2¾ÄùH„í_0€åù‘h¾ !Àê"YõŽC'0+”+/+&ú+*ð2Ý2i°.?p›. ++Å.+¿mm°šå›¸/°¸ 0Ÿ0r0ãnn0/‚àí# hkÄ¿ ++Z˜m‚囜Lœ .`ž25HH–v –/ž2" ‡M°”b ŠåpŠ1 ¬\üq’1°˜P šåý  #ÛÁ\ ]4#@]¾EÀ¢H¢©ø ¢]ZÖ2â0+yï_ ›åŒ†T&Û4/ 4Ù'^=^ÀðQç w ç ++8T&0"nGx𹆠++0R½½ ++4¼ðÁ Á¹¨(›4s.PÿîC9,d÷Š3.Äþx­(ŸŽ<w(j(Z(I=\¨@~ +)~ °^@šåþp ++q þÿêà”ú2 þú2”ú2Hÿýÿ.ˆlb.¸B\o²]¾x£0 \8¨eDc0ø/]À p è h0 ++'”]ÂäÊÂØy  ' 2]È6j]Â%ìjÇ0=þló‡]Vw¢]¾ † _!j]¾Ê ++ÄÊ/]Ây %90Ì—¨y .77 x ËbgÃìà Áà ÒÃÊ U a  a I]!ŠM.¡þÏ?9_ Šåa5wé÷ šåM } œ‚Æ 8 &9HÖ  ¯2ô ÷'0 ’è `1 ++ Q + !  ï.°ò—  ð<]?£ôp/0?ø^?Î?h)hÁF üÿjRÒQ ÒQÐ !°‚C‰f* ++Q` {H08` ” ++‰f°‰fÜ0?°€å‰f63‰f*D ‰f2R „ ++ºR“óN>/¡N> ¾áÒ þM²$ ++‰f P~(g§Y(I(ÒQÕ}÷R>nCR>.åR>" ßÄ ØÄ ’Ä ÒÄ ’Ä PÎþÿÏmðšåBZÀ Iª]Æ)_;_?Æpfm//(: ÈB 9) †7MQâ]ÆT(€n]ÊPCš]Ì98H—'ÔÆû½ÒÑEce ++m?/p—5º ‰¶<Òõ ++bB 8B]Î H  BÆÞäÈ}# je¾/ èæc²u›J+î]üfe ¹ ^eÝ"Î"hP&SãÁ üà ãàŽâá áàŽâÎã&²ÒQà‚åÀz3‚å $¤ /îâ `ö/Õ4H"y4HRf\ R.k“p3àíû“å å p-üèVmü`mü#‹ôXÌZBpO!0p án@ ãj"°¦ øèx)2^=°š¤#3 ΰæ&gk`9ÊVgFWn+iE Wn Öz·V£A/ì> ,Y–Qû0à ãh@ ’åŸ&Rã8ÿÿ ++ú²õh0/‘·h.âþìxÛþÿê>‚ôE]ÎÜ6"Iš¶ÎöU‹¦`b0ú'8? Ò-x÷ù€VÀB]Ð(`rD¢C1 @—¹_!PJ ++ øÑ­(>0!(# †¼) ÿ @*—â å*D) ê=*D½y(ò q(ï¬Ð»‘× /סtšÿÿêÂÏ$ŒCäXýwR]Ð ++0»CP‚B`n J ' ++ p\ J:]Î\ n*]Ò8ôEz]Ô¹û˜V )V Ú«$ÍhØ xl «$Ãa§L§£"7«$ ,l C7? šåV(/@™ J(û UJ($N€ ã'0çÚ[Ì•¯ ©IAŸ{ëL?Ú\!ò @B]ô )À êÜæÒÎÜÊÈZ|àèä–ÖŸxRã6Êv×+¿ Çß‘Á{1à—ìJX ² ++·D ¨L L èCj+.5 ++©zO 0å- z/â ¤ ,/ð#ÄÄPÄ"€RãFH HRH" @°@[@" @À@\2 ögÀÖe"þŠm/ ÀÄ"ñ:hvf lä¤&Ô€H ¬ÆH Ñ{ ´.°d®PàŒD Z ™Â þ ”X+vܸx3VhRòT3à‡´öTA|pd/4*h# HÞgÈ " ßðð\ÜŨ¸(§Z ƒ`PK3%ög.ûþ¯íþÿê Rã$¿/S$E$ 8$L$ $$.µþì,ÞÁ@´¦Ÿ ++  üøæg.äýx Äz¶ýÿꬊ™2 Và»ð@ö ++&, LrñBŠ ÚŒ3†.0' Ò+&"‚"]]Ö ++ypŠ% !&6z ·/XnÀ3¸3º’g‹ ++B7]ÖƒeXVx\X€]G`%JP%W% 0%Š"¨µ/hB_/äv_h` ª6(ZX%024Ÿ6Ÿ?8 ++@e ++ÿ(3Ž *ÆÂÜNè@ÐÂÜÈØÊ@îÒÈèÐ@üæD/ ++ —oj]Ø ++0 0Ú 0ÿHÞÄÔÊÆèZÂÈÈäÊææ4#+’4ÞáS¨#‹ 40`‹<É<¨#<oÜ  < ë6’@}ë60~ ¢ §[a m€ÊIÐd/ à¨4Óa 6`!0—M€)S# hóóà@õ"A+*3v B;@eB;&05R [ } êmÝEƒ¿5 0œ% /qO šånxQ!8 ¢\ ¤:]ÜB3”÷F¼(ìyS ú]ÜAhACª]ÞACh H:"Z|JB#-ÂBü̽dú `*ÐgÐ)à ˆ1 '#'båQA_b°â[#'!‘A_QA_0A_™SãN ½8}FL°0å°“å[á®í÷æ' S?^I ++ “Uá84P4C0“åø4í™8¼ Dâ(! ŠÁ"â(_àŠå ¡F÷'•¡FOƒ ¥FÙ9@0 ã÷‚ ¥F·#ò]þ&2Òàèä3T7†æ ++ìÞÒÈT AÒÜè$w†"8ÅæÐÞäè#t )2a´KÂBØÞÜÎ= i3b$$ó JîÆÐÂä¾è]à æÒôʾ#æfƒàèäÈÒÌÌ`!03¤3ðÈÞêÄØÊ3d Lp.3d3¤#r)0#t)23P3R3ð3V3X3Z3\3^3`3b3J3f]â]à]äÄÞÞØÊÂÜS€]â(]àâähB]æ &—x d"ŸTäÊÌ`Gi&K"d dPK ++ /i=u4O Šâ¬ðc­)"/ ­)Å…" p="‰4"¹‡h õ70Qbó[Ã=9àƒ˜ƒmƒåM›•FuÀÉ{f¹ 83=)$ŒFWzóK$yÄ/' àåÙ g=ï­{=ÔÆ”³ãb ¬L= ++.¦." Q:Xb8+>dè «ð‰°ÒÜèZØÞÂÈ€p&@Šå×H¸¼åP½Pd!3Sá{¼!Ld ++˜Zœ Ç£µ<ÅN À¬à5$_':˜ ˜ ( ¼  ° Òv ÔàÒ—  ÅNP@‘\R0Šå$ A‹(ø¢¸)((3H’pšå 0šå$ I‹D ¤#@7H@ÿ_i@..ü.þù.d_.Ê/Ÿ5›ÁU"“X@| ++œð ^ã>ã&@‘â$jÐ à‘âjl2àX `*úƒŽ= àŠdœ_$ Šâü+"üp&.$\SÙ$È(pÈÀEh0 l fÜi¤lA¶´h=$0š¸/¨GN ++Ð&‚‚¿¯ü/’d #/qÔüdP}0Œå Œ„ Wœ  ž å °åÀGNC qV‚TgO/0NÀNä.!= $#t  . À=BôÀ°L `à¸ÏœP@à—å¨&—«¿QAD/¨€ ++Ô‹ÔO‹å pÔˆ ˆˆƒª d8¸lv À°AY^rC\ ˜ˆ_= ƒ¨(7kQ Jp 3—j 1 l Ì,c—œOa0(ÜÑìÄ„¶¢ƒª(zƒª È Q(:*<x<.÷þê.ÜþdÉ:¿ ( ¢P•ˆzPgxQ$0 ì, € /@„ j¼í „ ˜: ˆ ž@šåÞýÿêdä /Mä 1Bì¢"@‘â üÈ;pà‘âj¸"@`4_¿ýÿê ˆì oøÙì"@7ì /9ì È$ T .mýô/fý- ŒP¨-9‡óX&pð ++"Pð ++8šÈR@‘â6à ++Ü ++*Ü ++Ü ++ Ü ++ VÙ0p ++S  Ü ++$Ü ++ ¼(Ü ++ VE¸lSè(GX| Ü ++ÚÀÄ@$±Ü/£Ü ++ –ü0}0„å „ˆ/‰Ü ++ ž°å Àå@Ü ++uØ a  N @ 3 &œ WYpŒhS(ßj Á4" )(“Y[õ40$” œ8.ÓÿÆ̹«<˜.„ÿTp%cVHP5^ÿÿêïYœ¬ÓœL/…ø "²þ8?S@‘â(”B°t ùt æÀ /MT .yþÀOrþÿê@/@W/…@ÿd@ë/@/5@ÿ|/Å@@ #@?/@+1zÙ@¹@"¡<Ÿ@“@8/Y@r@@/Å@"O@\@A@@ /.LP P@0²Õ¯Çò}X.@rÕ° ÍÜ Y. ”¾<<§ ++ôôà‘Ä,$~àpà cà V¼ < B<$4°0€'<" °l(h.i!408_™!d àÒœÅg D£d–‰{<hxR(;È]yrÕ(ùì.Þþ<ËÀ¸À<Pj° $/©# IäDä$/$ä?qT ä äuä`äBä,$*äÀ!¼p&À À À /0ˆoÜ…%ˆ"êˆÀÜ0Æ$³¥ ˜ ‹(wHÙ$pV („$$K=40 l‚nPaTFP3_ÿÿêñ$ô D^µ)D@À‹Çl/!*llXLmL.‹þø„ev20jà*@)0`-+p(+8(+~~us j]è8%+ +@)2(w+T'"êT 3bTJ~+R~+Xo+\t+2`À ++µ+Oo "NPw úx!,h¥*xµ'€L^7 °¤=#)2=0$ >€B«mt0(`|°% Ñ00n,äWˆ àp×WQ?2]è`(b-ð8 &êÜæêààÞäèÊÈ@èòàÊu\À(]ê‚\" Æ)#t²,CÚ²/E²² x&˜ŽÅz5ÄXI CÊ+62h ++°%Y²"˜· ™,]Zç/_2çq+]Jç )s2çPçuÎwÎâ@âk$xkcG(w¢G/uÊ5&‘ú5 +•—  thR•&XÒ  `Ý ©òÝ}õ(HB]ð ;˜]ò  1†f¬d¸£3@r’ ++'—†”E[ iE[^xŒo_7ÊŒo,‹ »Àf‹.od.ÞÿKQÍÿÿê\ž³ ¬g!?#D,D¸k(k„éª bz+]7k„ p,2—ÈDQüh2/ÚÏ Ìq/ “ /¿/9Ó;-.<—Œq$†Ü yÜ Üø(1àŠ8q_½(, Tl,t=ƒ*u_ ô#h¸ ¸ä¤*K€x T/=“4/ l¬( Ðð(Ô,Èpô›gK ãKë`Öw/o Ï¿§>¿«£5 ÈÜ |–|G>¸‚ÓYË=Qƒå ƒÝa æÝn¼q x<W ¼X‡`‡#H§2«`«&}N€ </ÿ> 7?8 M°rÎ}ð_ÝW7ÊÓ/ L ¡‹#0w(cdN:#o(x.¼þ®‘ë„vs½SC/E /8K// #>T –´s# l€sssb:<-OýÿêH.±i]AV Ã@eªB3¨ººO3À°¨s’rQ?]ì†siôr/œâ°¼q!ìqh m@ÐQ?î‚îqàõt[ì½s€h*%@ÇsBDÖsFÖsH¸9/Pl`žwÜváuô2”CVptÿuHvT8VXGZG\v‚v#iÌQ;z]ðÊq(¾q( ++°Í²’G8f"3R!È\¾ë8!]èKö‚¸FÐ]ò@30¦[‡*u‘p(—åuü m‰qëIŽ9p\vO0šåÖÐ8÷6²\c8B]ô{3s7ö ++({@{"{'3fIPI/€N|ñøñpî 'ŸPft 'ê-ªú*ª1rX#H`p@ µ¼SñÀSt('Ú]æC%' ++ A,=â(/?²(ð(ÿ0h#-F€ˆ-0E’äæ B€Aù ˆxJÄŽ !k'?¢ƒ%=Ò ‰ÑR]Š]æÎ'h•,_ª•/az½ÿÝ'aj:/_š½%wr(Ó"yJ£P½ÿ>³6€¸("¸ x¬U%x;!® G(y:e,wbŸ%•JŸ6(ú‹! —Z@±´¼OB]úé“üé“&Hyw}/w}/_w}¼/_w}ÿ#w}|?]þm|2?]äd|€h/_h%_h HæîÂàZm$1mZ—Ìx_   }¯à · }}}5à–}ŽL!à}^}ž—3&^}ž}#àž}^}vy$D&K'] H&†Â… bM‘yF3#,–aÝä&†Ú… tªj Ú…Ý¡Àå<Ð *]A& *]/ÌàR… ¥ ÐR…ŸkŸt"P'pª ZJ_Í…»'8Ãò__ b_ò‰ $_¦ ŸÌÞäÊÒÎÜÈ3aÌ/_ ++5½U  5PTã§Ð :5íäϬíä ++Ž¸)0 Q&Qㆸ‘›)„*‘¸0¸4Q¸ŠZD´V´?ð" %°&Š* .…o©" °œã€TàÚ”v‹€/ ½o€ ã /%  &X0ÿÿ ++š|\\ ª˜£˜|˜5 Q 6°P3dP;Ê3¢?/ü "€‹B_4/X  ++X À OæÊèBŒ5ŒT Íh 8œ@RŸx AvI= à “ÿ#5Q¡   ¸/S P P P £0¯¤@ž ++*c/ œ ˜" ŒzŒ@Ú¤ Ä tàåpž W\ý|À U©Jƒ6q½¥d ø€Éîˆ6¹ñà¹ñÉÑ ++àyï>å \ ¾ƒ,½Mï—$‚àLL\€ ¾±Qï/9¦gL ++ôL ++¶ 84.µ4 @tÿÿ ++BDùDQ™J"?6bO@‚e@Ew "_ Hà ++x ê_ €Ã ++8&8´ ýPÛ ++ ++_ ++ Û ++Û ++Û ++P#9P»ˆP*r¸ PHìH¹HÖHh Pº”&¥b¸ ¤4Ï£0&0{–G[ à ã{.70€‘h ü€P€€p‘à‘å€^ã_+£Q‘å0\ V\ž€&Q@à‘åp"Md J10‘9à“x .XÀ à“åæâ^¨ ++”XO0*¨ ++D ™ª„¾CZCΕ/ °¸  / ÿ¸ øH“0úA€ ; àŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>qŒ>q?Œå¹, ”@‚åÀû¸àŸ…Ø öp°êqîa //ŠS1 °g/. @|v¢C€€‹å À‹å @²Q€O‹å pLá0'¤p‰÷ÀÀKÀ 8‹Ã xÀ8%Îo p m~C0³·Ü*ª]±+¹P+ ]±nÁ®:C™k£jv Z©¹“0÷vC$ €:`ø Ø'vþ¼î«/¡ê˜ î«&\þÜ0TÒíõðB_ @%ìÂ&°M&>I-k¶D ›å)Ë )Ë u)Ë)Ë h h»²l [±Û¶ hš/à´P*´Pš‚š‚š‚š‚š‚š‚š‚š‚š‚š‚š‚š‚š‚š‚š/­1Ê È„œÚ ­6š56‡Ú š|sþ0þs Œå ŒZŒ. ê š"À: [øé6 Hó›3´e0  ˆµéý¾ ++0’å’å’å°’°ló0‡å ‡å ‡å°‡º'Y‡åà’T T@š,¨–´“  40Ì€“å’åÚ2LÞ' ++n†'‘†'‚'pb ñ ? p’ñ +++Yæte Æ-&/–8“~8OÄ&¾(–8I–81’! & @; Ié#;‘ " @;/0|0à@Ôoà&¬µåUì"…Îrr)V01´ÿÿf)1^‘ 8‰) 4%/ ¥+M¥° šå1ÿÿê$ ++tbÐ_8tLp©HB_*  ¸%LÅ ++€»,µÄ±® «¨ äW’å Üøž •_—å —4z#@²+ô ++ ôŠ;²+“°e!\\\ ,7QáVSP/  ,²+ 6FÝ1 1 ü‘ Ú -õ. ˆ¬ ++ +0à<#œÎû t/„à«Ù/ÃÿÊ''4z%- eˆApšå*È‚‡¸ ++°h ++e& `h ++ÀCù/2à'$—åˆÀnŒ q¹ È3ú"àdP"€=  ]ó\"à†*ÌtÊ<@.%@½=[8r]g_&p|1H)"_b_&)"()"T&)"()"P r_*§ 6€ ++h•^ EO¾P,,RP â_*èA#_.{# bÈ Ã`¨OT_* ++ W0²_xk˜x _.Pþ2ÚÉ ¢‚€IÚÐO ++9 ++—00 /G"p\>Oº_" Ä %_2 Ä"PRÞÌÌæÊSÈ ö EÂ!6Õd4  }š"°‚có“9ôâÉ£w8?pžÁ ++•ÁÃ7B-;Bl ã8ã8¢ã8# à¬Ýà+Û8 +]™œr}rw÷½%0“v"0Ù+9;ñ9zzT£F 9z$ h"i,5@2h5šì 9¡/í9¡/9¡ ˜&õÀ³¥†@½ÿÿ ++Au©»Ê°ât‹ ³2!0šX = xÿÿê2²³+IR_4Å+w*_4€éçØç¨B]Î8v*'pnÁV_4 ++(6?_8õ#GBõ<õÕo: õ PÒí¿ ++ž‹ç Ùy٧ٽ\ë<9éˆd[ñX"p·· ôFÎ J# g qdF: 9†,^@ƒå h,»i Úkû ‘¨ @/…@ }ä5Ív ÀzÇ7ð P_’ÿÿêQ/®ï2 / iuv2p\6.Äs'ÿÿê.Ê™¤I_:× Yâ_:dPÝs ++Ë cV--8i__:i ++iIãåy_B  ++¸i0iii$_à—åqæqÑqÐqo@  ++ˆq"0éAb aS8"Nu&0R ?pžóå3µ\#> }M+Ù" -   ¾ DL%Š ]FZïmDÜ!’ щ÷ãd)Dd WÜíb dDÄ…D j 1·µ 2-À2-Ðmƒß€æ OÀžåX÷kŸ '‚; Þ uMpã´/^hS Pó)§ž - 0§ž ”w«ž';*$ ÷KûËAF 5a ÑÒ§ž é›Ó “*w->j<Y _BÿÿêËYêE>% /0±µ™?ûéþ s˜þÿêPÚ±i*_@xì½Yr_@’F,: M€æØâ?€ÂZ3  ¡@RZ—@ÿS‚_@)x)Cº_B)7x[G7 ¯K²ÀÐB_HøQ½FÑ +O5 vÿC5~ÿp÷~ÿâK5 z#r B_D³îeH &HÈÞ! zZÒÜØÒÜʃÿª® ¨Q\<v# ++È&pC+: ++†·//+¹&àCÿ¤ RÁb ¼AHXV" àLÒÕ Ë/-Ë /Èà/üz²°K.‘ÄQ"0åZ¤ì rÎ7’v¸6Dˆ¸ÝU²DòO_F8^QH^Q'&H+èÊÎÊäZpúúOd7Lú½JúŽP)0 B#óJóLó(óÚôQôPô½NîtôNôPôç/blôSôTô½Rè2ôRôTô*èõUõXõ½Võé{VõXõ2õbî%Wù\ù½ZùŽîZù\ù4ùó&Yú`ú½^èŽ-3Pú^ú`Ü /dhô[ôdô½bôRôbôdÜ ++õ]õhõ½fãŽéfõhÜî&_ùlù½jùîjùlÜó'aúpú½nèTúnúpÜ /fdôcôtô½rôŽ-æôrôtÜ ++õeõxõ½vãévõxÜî&gù|ù½zùŽîzù|Üó'iú€ú½~ÜVú~ú€Ü /h`ôkô„ô½‚ôXô‚ô„Ü ++õmõˆõ½†Üé†õˆÜî&oùŒù½ŠùîŠùŒÜó'qúú½ŽèZúŽúÜ ++d!sô”ô½’ô\ô’ô”Ü õuõ˜õ½–ãé–õ˜Üî&wùœù½šùîšùœÜó'yú ú½žè^úžú Ü jd!{ô¤ô½¢ô`ô¢ô¤Ü ++õ}õ¨õ½¦ãé¦õ¨Üî&ù¬ù½ªùîªù¬Üó'ú°ú½®èbú®ú°Ü ld!ƒô´ô½²ôJô²ô´Ü ++õ…õ¸õ½¶ãé¶õ¸Üî&‡ù¼ù½ºùîºù¼Üó'‰úÀú½¾èdú¾úÀú,úÏÈÞêÄØÊZÌØÞÂèö‹öÄö½ÂðöÂöÄö6ðû'ûÈû½Æñ¤ûÆûÈñOæÒÜÎö#öÌö½ÊñöÊöÌñû'‘ûÐ@’Íλg†u ,D•,D@€ ++³GRlP ö[…ö[ JbÞgõV ++QdQ? ƒå yBKlQy¾ (·J¨/—ÿЇy pЇk`dŠc¢æB@»II@_Ò2¦_ÆG`_Ô,­!XKE_ ++_Î(› ++ÐMmOÆÐÂä`“ÔVØ`ÍÖ`ÿÿŒ*æ`8_ÒT?_ÔH&ÖH ++ØHHîI#•bIÜIÍÚI&Iÿÿ­ÚI ++ÜI(þ N #—‚Nàu‚ÅoÞ  8FyFd  F!ÊÎEJ4èc 'B0Má0ª|"ÇñŠ ++„Q’%pª|¥ß <´Ö Ö‡Ö^€ÿÿê ÖHa 5 ßhu¼8™  å _ *_ÞB ++àB"åÄÞÞØÊÂÜâ#™’âäâÅââ&âÿÿLââ ++äâ,Çç"#›¢ç軽æ±f»æ»èC²öoÌÒðÜêÚððìð½ê«ðêðìz$æõy]Ÿõ_°B_òüÍîüPåªÔÝ\&0Ù\šÜ…Ù\/0Áj¬eiþpÙ\€nqpé\p ++©/ýeGeîql€dù\1$Š•¥á‚ eEke³ ”0Å ]¥\ c#±>#!/ÑR€#lh@±@!/Ó ++€B±B"€ ++"D"±D"!/Õz€ #F#±F#!×Ì#JvÍHvÿÿ¶HvHëdv'Hv ++Jv.H\h ++^h*“m!#ãºmbºÍo`  º³ežºD‚e°º s1 ++¥‚ás[‚å 0‚ás‚ás/‚å° ++M_°šå °//½/ñ!m ,o†ÿÿê‰ï/ùM]Fÿÿê,õ<`€2u2u7(3 Â3 ++ûO ++a`E ++bE$ûauø#åÚøføÍdøÿÿÿdødø2dø ++f=^zý#çúýjýÍh¯ÿÿ¶h¯h¯f¯'hr ++jr"råzl#ëlnlÍllÿÿ¶llll,ll ++n HVÐÜ#í:qråÜxap  ++H@Dyþô0‘1ø1ïpžåPár°â[1ï!¡PøC)  aíEï qï0ã÷úù dd“d “d“dÿdùd_  ã0_PáæHàH0à ãöú@Ùºÿñ×Ú€RãÕÊ0BàxŠþÚÔÍ%àŠÆ³ì"pé?p—mñ í…›´ÝC  áõ] Qed|d0R~`ƒCšå®} E =ñ*Á~®} ì[ìu‘Hì:3‘ -ì  ì "$`ô„„ç B/ñB ÝÙãÌ‹‘¿±-_žÿÿꃽ¢Â/¹.͹_šå:Ä3À…åñ2ü0žå@à ãò<<G  ã@…4j.È`ñ#PøI*ap-ì_ òap-ì )0-ìPpBa||³¨ .ÊðèäÂÆèZÈ4‚ÄÒèÌÒÊØÈÝá @¡àPãÏxà ã°Nàȉ` ‹à[¹> ++ 0ºµ\çÀƒü-°€°¨èš¼Œ`è õ†ô!a„åRÌ. Ìså üŒ ¨a½Ì $S´• ÁFÌ"„•@Qã͈‰/—引 ¼•0Ž¼•+úõ¼• ߌ㕦(˜(†Ìèl_Q©ð?ÿÿêà‹à Nâ4ÿÿê€à ãð0(Ê™ð¶èøxÔˆÛ•'/8ïûïçQ²apïç%arïç4|Š^ÒÄÒèæ â* #ïz* x* Ýt* ÿŠº* ÿÿÿ¦t* t* ?av9(t9 ++x9ê9*ñ5%~9ÝzcÿÿÿÿÿEz9z929|9(z9 ++~96r/bl:óz"‚:Ý€sÿÿÿÿÿE€:€:s1€: ++‚:ê:+÷× †:Ý„tÿÿÿÿÿE„:„:t.„: ++†:@t ++ V?ùìŠ?݈yÿÿÿÿÿEˆ?ˆ?y.ˆ? ++Š?ê?0ûò?ÝhŒ  ++ˆ? ?Ÿ; ++++?’å××!0’·×0@×d ždždÈdÂó ¯H©H0;±S㢺^á ;^”HŠÊ NàxRzà3;;|;/ý×d;8a;E;ï7S1à†8X*ŒËr5:à†wO`Šå$?® ¢¨ý$${ `C­Q á$0ŠWn(àŠå,`¥µ¯a¯ D*oÂÿÿêîGk_,/í_q_j_¨C@0’åS@0 ãQ_ {:{8@?*b_ J"aŒ_PêaŒO.ŽC9P ŒSTã|Iµ?ÂO —åEµ/(}(_šåå(0Š"H‡BaŽ‡'X5‡X8B]èþæ_òaŒæ ++™/dháý™–áÝ’áÿ†ºáÿÿÉ’á’á”áˆvá”á-’á ++–@á*$@œáݘ ÿÿÿ áÿG˜á˜ášÂ ”šá-˜á ++œç æ'ç¢æÝžÇ ÿÿÿ æÿHžæžæ Ç ” æ-žæ ++¢Žæ0Ž¦æݤ *ÿÿÿÿÿE¤ÆOòa¤Í"/æ€81¤? ++¦ç/fd:çª:ݨ*ÿÿÿÿÿE¨:¨:€81¨: ++ª@:+ @®:ݬtÿÿÿÿÿE¬:¬:€81¬: ++®™?? ™²?Ý°yÿÿÿÿÿE°?°?€81°? ++²ò??Ÿ "h`„´„±´„#Ÿò#¶#±¶#! ŸÛ (¸(±¸("*ŸÄ (º(±º(!/š– p#¼#±¼#!/R– #¾#±¾#!/ ++–(À(±À("–(Â(±Â(!/z– "jl#Ä#±Ä#!/2– #Æ#±Æ#"ê–(È(±È(!/¢–(Ê(±Ê(!/!Z– "lh#Ì#±Ì#!/#– #Î#±Î#"Ê–(Ð(±Ð(!/%‚–(Ò(±Ò(!'Ö iÖ  È2— _—,_à—åŸäŸÙŸΟdÔ  !xo“Tã ++Ÿõ£p“W£Kd£:/Äd/¾£«H.¥£"ž£"œ£/š££"‹£"z£àåpž³¼|’?"`¾£§øŸ`` ‡÷e`@`_Šå åÿ¨6d WôÉ6dA6@Šå$)þÏšå( ŠâàåT’Ü(S!(¤, áLL iL Sñ(£@p á2€=ž[â[[DvÏ7 hv qÁ:àš7/ x³¤•0¤•¦¤•$ð.°ðpÀP3àŒôŒô°Œå à ã4àŠå8tVàšå<à³Ð šå0Šå(pŠå,—ÏÀŠå0 Šâ$àå °¢`0ý0 Jâ0šå(pšå,°šåÀšÜw\¬wh N$ÀÐw Aˆ$3y x&ˆz z ++Œ‘€å °€å0€ ƒk!0 á”6ƒjQŒ90 ÿ (9ÓÃƸ« P(l;S<F(8*<_ÿÿê>ð9t Aœ ý *éþ„nšåuþ·/nþ·"Wþ·.Uþ·">þ·<@?`r· k2aÔH·~„w ºaÔpÉ 0 ú0xÛ@GrcÈBMˆ=.p&&p¹„%’ ªaÔ ( â " !@FQêaÔ:>(ˆFCÊaÖF'ˆ,´ ++ ++/pBè ++#)Šè ++Úè ++åØè ++ÿÿÿÿž@è ++ÿÿÿ­Øè ++Øè ++Øè ++ ++Øè ++2è ++2è ++JØè ++Øè ++Øè ++Øè ++ ++Úè ++6è ++/blé +++ØÞé ++åÜé ++ÿÿÿÿÿÿÿÿ`Üé ++Üé ++Üé ++ ++Üé ++é ++é ++GÜé ++Üé ++Üé ++Üé ++ ++Þé ++@é ++ ++!î ++/¾äî ++åhà  `î ++"gî ++/ pûVÚ † ++ûV)dûV#"¢ ++¢ ++ H.ûVüûVúûVøûVûVé^:/Øê ++Š ++/Àê ++3a`/¢ê ++7Åê ++/ƒê ++'ê ++8eê ++Uê ++ ê ++T(Ö: ÷W ïWž ûW" SàžåX±à†åàšåà† ++ #81,àŠ_0àŠå4še5pŠ,àj E,3V/ áB /uB /¥B Ö:zŠÂ:©Çb.]bê:cX"ùþcX.÷þcXà~Þb>ê:àbêbO²aàbøòaàhBaâ 8“X@p8€% ++`à ã°ì àþ<’ €—å —ål¦> =…•¥hXò®#à—åàŠå @ÌYxYÈ$¥ xYÈÌÁX7âs HYS(B3š ÿô5J‡5JôvL"(;"\Kw'ö'±ö'!ÚI Íüø"±ø" /=’I'ú'±ú' /?JI –úü"±ü" /AI'þ'±þ'!ºI _ø/c"°/c" /CrI''±' Ew1/c¢äÔ c¢ä^^ÜЩqÄ"¯Ÿ&”0”÷! y˜S– u¬C0šå\" ÍgÛ!Ýi 4ùß!L" Õg/ ’Æm’Æ0’Æ/ 0ÑF²Æ 9YÝiˆ- —L!)jØÍ 0 Ñ _ 0„å ’Æð¥ØUÀ‹#³<¦’Æû%¼%TE+5@Ò¨_ šå<Èr5ÿÿê*Êøycˆ‡†Â0±Æh¦° ð` ÎpzÑHq‰ !PbQ ‚cÝiä%ciänßÏØÞÆÖÊÈZÈÊÆäB0G:ï/c ++0Õ0ÿÿÿR0_0 ++ ++0/ÒÜ0I®Q©ÐBc x0(00 0 î±ØX ðϸ—SS/qSSçz-pjBc ¯Ûr ÆØʬ –& ¨“  iz40 á10  É0W® Nå#ÀàNå-‚ÂEÃжt ++4©©'ªÑÑ.«ÑÛìeßåp_7ÿ/áÅ(´P_¢ÿÿê-  Ú/µÚ ÚX¥QÙÛ"ª-Iúc ,`,`Öä)(3T ++8#S ‚c #núc8.Czc.0/ôAÒÜÒè‡>B8,`à KÒ‰_hBc,½,u@ÐÐÐÐ"êÜÍùMŸ‹/c) Õ) ) | šë ) º" +•‡" |- Ê#?pžˆ ++Õˆ#L L &!L¤XÉâð6. "KŠ{p8} T*: ‚!˜p$ ^ƒå p Íä‚! ++ ‚!þ#&! r êøݬÏÁ<_®ÿÿê_¬Ží ùÀé Mr!3(Òé o"cxíqjchû Hû / ++H±0×z ++c ++(Ú Ú Ú ÚQ3D*äc  %"4æ.$*æ Ü€ê8îæ8P%î#Ñ·ç0d)¬ d‡4 _l‘5ž"®4 „l :¾¶“àåà ã  0=àx}x°x‹x‹x‹x‹x‹x‹x‹x‹®/Z* &0àxò1 ‚Z/à6 ¨(3àŒfŒ0#46 žÀ†å`Šå ¾ &Tü(æ\"`(âÀ¾"à/ Àè)ø¶ – ël‚ H®; |Ó_(. PºûÔ ¯¢Œp„‡•h}à‡å ‡¸´* ¸= °Œ´~´ôôÏ†å †å p†åÀ¤j<& íEá/ ‹W88°l8Dp°. @.ð +0†äõ(,0Œf È‘€å €å 0€0= p¬*j@¹ôƒ,¬*â *˵¢š @[4ÿ/á{T_<ÿ/ái<W?x&dŒ.ôþ.æþ<Ó(Å(.´þ ++Ÿ|YH+L|æ ++/õÓ.ÌýÀXÅýÿê†ÓÅ…(ê ++grcP˜í Jxø  ZÕ0ú P^9€€ó¨2,ã ++@Âh`÷@xäêI#<âX1÷|,>êˆ=+W@(:O`+'b % ++ ¸%c ++0m+%cm+­OæàÒÜ  SsJyc ˆ *  ÷ å ìå ¹å Ö-å E ƒª(D@LÎ. š@4 ++®ƒf ±ƒå ƒå ƒåâƒ_çœR‹\1 \ ìb\Έ¹~0’¹®æº¯æ .HÆCŠcÆOH®·U=l/c ·Æ(X·f·Z·S3·'} $ Hÿ&"îŒ ++‰ „mÿgéS S Ÿ Ó¾”8I I(4 4²4#Wš4"ëÿÿ)!ë'"·ïàÞäèZÆØÞæÊÈ~Â#YªÂ(¹ûÌxc& ˜š"Í.0Í.q'0àž0˜O– õ7>‘åPápΕj²>. _ð] ¤Lv”" p5 ?%%}(h¡Ž Ñ>º‡ð­(œÚ“¿à‘å ^ã6 ++°+°°  °$’Àìèß(Ŧ;Œ&Ïóƒ‘å  ã Ä"<`<5p–n€@ ã ð–åf&¨ ‚T/‚þå @å\uñ8Ԙ +Â4šå”Å4¾8&÷þÕ06ŠÕXé:G¸c$Ý ¨ðæ Vpc$=- ++@!ex9RX –"!XìRRc&ì$ ++(•ý%c(•ý! HBPÌØÂÎæ2E[$P c,E÷Ñ U"19†I\¶³Ñ+! ¯<÷œ û/!÷PŠBc*ÿœð* ÷m&P«CO= ++S£ 1313çS ¸_°—åÙÙ ±ýa&3à‚å'ì·@ ßá°Ú W/ÇÜ G †å4K Ü.²‹3à‹Ü‹Ü¡ '°P.°”“à?n°—å pPzPs°†å p†4†åäyc ú lUl€Pp ++"7†åPúá†å ?^š™# ùS š>INí"™# II/0; ®0/ ‹'ÅJ^‚åZ/ÉJ_`ŠåLé]"#‚j ‚põ#)¥ m)¥Àõ#õ#.³/±x°L Ün‚å °L/“HP?^B z² ++ 06 Ö °e©#T)#°)#°:Gà°”.°|/œ¬/ Àñ#ñ# ðš ++’ š ++èš ++4Ñ2 „¾ Ú ++%š ++ªš ++D”]#[, <Ð€Ö ++  Ö ++04 Hi„#"î„kƒå ƒƒ‹R* àÌ/ _*"î^" HMNjpA¡#    hyö ]PB€å @›-$ììÙŸº: §<* yeOÚ 6(Ú øÙ#ë.Ûþ<ʲ<¥(”.þÈf)$ H=$ 4.þøÙ#.êýìÚ(/Éý„ /…ý /m ++& .oýdrhýÿ꘺<$KP$0ˆ$gc.p– J6! ûºO=xr 1Gˆc0† kG<XOþ˜Ž Œ -ÔŒ ?êx‘ ˜PÂ{1”˜o8;, ++hi %aR òc.Û / ++ + + +++%)C € CÊc2 Ohc4aV[/c6"ÿ4"ð!%6"¿ÒÜàêèZÊÚàèò¾cÏ38½ÿ$ß!ûÞ!'8Æ0ÞêèÇOÌêØØÆeþžðc: P .ÄêÒØÈZäÊúMö4B!@Ã’¯5¹¸¤¸y" ""†"®å@ä/wäÀ¦OÀ—åÏ`w4L“‹å ‹å ‹L ++O4 /`Qá!€“åQá«á!ù!á!!‘¥á!Qá! Ñp—0(€0†«3 /yÚpN4bñ:Œõ:/T l=ö/°·"ŒÀŒ ^6@&*`à Sî?×?Ê(¼¥<—(.€ÿj s(bÍ"“Í"éq1 “Ý!" /_"°[\á! jèUc\" +_ °{9îãààã@$àõ!WÀWO@ƒåsüõ!< á° ¨ý¨¢A P ?  2 4   $4ìˆÞ(Ç„º(©¢.™þ‚T$+$p$G€.@þ@ 7^’õP*c:€®1€Pú^9c H *hfbfXfCf f$%f4OffHÿ¥ ++0¥ ++s „å „H„f…ffG*r['3à6.å°O} ö&ö4@öl°ö"ö= ¥ì˜(‡Î+Îg/@Ò*Á*@0 á"g/@¿)Rt~¿)K+´ 1 K+.´gK1 ˜1 ++úÐãâ€ÝâNÀc@âØ*Ø*ÃLéE`c@˜¶ª>ª ª_€BcDõ0ÍB‹8E~D‰~ÿÿÿ/É~ÿ­‰~ 8H¢nM:cBn blJ*cBbbn2Dn2 /@ TiaA_pBcH@RÕFº@Ç«E‰«ì ã˜@ ‡ºJy«ÿ­ ³«rPa«8]«”/« tQ @ 2 « „«¹P¨«d « \K F›À gh€J*cFO2cF¾b ++H¾b/äÊ… )#kÊ… L#ÃcJ  ¨²3§%?/”Ô;ðò Ô; &yÔ; Ð;l5Ð; ++¾/ H/U­ Mß#!<;J.!8;!0‰[Ø9 î×MÊ(¹(.¤ÿ&,oÿÿêìEbä/ÅäY ]Rÿÿê&09J9IP!qI'8o8Q ¢cJ(ð$Lð$WÚÂäÖZÓF›m``_ðBcT-b½XR øÏ ++, ã1b-/u1bæ1bÒrBcP  ++(I@`‰M´` ƒCË&ìÝ2E7½ 0—å°—åÀ—"Z:V"0]lëbÀ†å£ 0Ü Sô 0Ü Sp0 ++ Rô !0“ô Lš.pàðEx €à‘å^ã 0p—åJ3Pp—åú!D ` ˶: /‘: °F€z’À€œNä‡`%ì³Âú3é3D —åÆÆ qÆËšBß«S à—嵃p]]p á;p§]]"0jò™Ÿ_À—埂Ÿ1—¿ ä!0ŠÍ‡bÀŠå °ûÇ küÙmƒRpšå0ù„nÀšå °".SÒ _G ™„çI309 ²AëH ~ë%€<Lp á\64.7/@ˆˆ "t凄;Ü­àˆ Îz / °ˆ·…\0…\cŒå ŒLŒˆ„_°Šå À„"øK„€R°šå ÀO|Op² @l^wLZ ++Pº}Àå (CZ ++/,Œè8.¡è8¬°8 °8¸8Ÿ à€å@€å Kë¢ ++Ͷë©(›(‰ïXÏP/­P .nÿ8B€_+ÿÿêãËf À.êþÔÓƸ¦^w(`'µ\#[} +[}‘åþxÿýÿêjr7h ++cN`êpIæg ++;&ß\H¶‡ Aˆ'*ðA\\ @h7pg &h_, ++8… 7XDÚcNH\³ ´‡Q!cNOG\ m17—\Ú ocR8NmTNm‹>ÄÞØoth #qŠoXî ½Vî /+î [ ++ÒVÒXÒ?ÊÞÌ@^s‰[\ZÅ_Z  ZÇZ´Z@™Z ŒZdZVvÜ tÜ  ++$Å‘ Sou£ËD‚!$•êêg7oV vÝÀÌ(Åe¦˜ƒÚomÿÿê ++íÚ+/Ed9KÒM,ÚZëL%j`å> ++¨_o ë_ ¢cZë ++\ë—.èÊðèêÂØZ©;OæÒôÊ1u†]`Ï)Í^ÄZX9ý9ê99$Ï9<[Â9"l¬9,—9‰9Á/ sS94c9R9 E˜ ñ€ÕÎ ´­§(–((pb<üto7ÿÿêÖï+/<§S8^õ)'; ¹Z?^ ++(E(`E(,ÄÒÜÂäò:)#wº:dk Åbk ¶Dk 0Tk ÿÿTbk [bk ++dk 0k ND2yë_hl Ífl ¶Dl 0Tl ÿÿÿ-fl …fl ++hl .l ;${ ^l;Íj;fx#ý;@â; Õ§0¿§,ª;p\'œ¼]!°‚A  (\2*$ p.vÐ#f eÄf ŸX˜ Y;üdY*0à9~]ë† úesŠë† ûÃm¡0 ”I  (lK]<xY:<_$ÿÿêé‡,i‡ðÐ]éþÿê:‡j‡h™ ˜ªW/7…Oêcj… ++l…0,_ÒÜÈÊð†# ++†p=:Õon °ŽHŽ/5ŽŽ$œlŽ/ Žq:õŽ,àŽ$ÒÉ Ä- $.°- .¬Jdpm ›  ºŽ&0± .°ìut °Ž `Ž ÿd ™„Úk(^(Md5'dîV'n&I|l¸n±ÀA nnnì^nO7I 7n Ÿ_ªcn6 ++pR8 $ž$¬Xt$Ír$¶D$0T$ÿa$$ÿÿr$ƒr$ ++t$2å‡ ƒË¦x%Õv%¶D%0T%ÿa$%ÿÿäv%¢v%v% ++x%0IŸ…"3|·'Åoz  `~}"k·'@P»'B"0ã&/0? yLàƒå ƒåKV ÚK s_·ÿÿêWÖ ,!ØE‚˜G˜gz::Ðc–X2‰ _ Zczn& ++|n&_ÆÞêÜèé‡Ú1‚Ío~  ñ´ñ¡@† yí,dí< Ví" ƒ…p+ÿ. Ø£$ •®RÉ,ùÉL˜E ² É~0 nÐc€`I% %+8+¦~p ++‚%æ(‰†0†ÏńϺ$Ïÿo„ÏŠÏ,„Ï ++†ÏXê!‹>/ŒÐ͈ж$ÐÿÿLˆÐŠÐJˆÐ ++ŒÐ ç #êS”“F½’Ñ ”F€à áÔhØÇŠL¨FિPd ¨Fিã¨Fƒrc¬Û(BcŽ  ++% 4q0;Bœ4G¦N&°›6ŠŒ.!›ÄiàfªQ ,£ªQ.¯"°ˆÙõàXgqnâRã3l€R㩪 ¢…b*†/fNÞ+‹ã+#}r °×pR+‹+"R= ‹†P h/ 0ŠP\ïÓ°DŒµcd8:S=  ãKVOh.oR/Ú‹. ÀD/ø^R3áH`Œ­È/ÍÈdÈ/À¾QD À¼*0·®èË‚+Ët[$LOÙëN§ A$ T* 0£® £®£®/±£® ÏG ¸G «³…w·® WibB(,<(.ëþÚ~QŸÌþÿê$  ãņQ @/‰þ·® (nS\þÿêºU0:¼ /(¤/¤ / ¤#UÜì€ß¡ ¿Ø›& 0xZ .õêW" 0`ʪ‹wÃýÿêxŠ€¯£ `ŽXc_5¦ø£ 8& ú&P& `Ü× UVxð€Rð(ä`¯S8êcŽCŠ )X®Ì„ã°L%Pz¯ŽÅ2ÂW?’8CQ”CQ8® ++G¶ ++/8$S#‘z$S˜‘ ½–‘ 2  U&ó'cŽ–˜6žÔ c’#“z’ž½œ1c‰š‰6‰dŠÿÿ’$Š´DŠ0!+Šÿÿÿÿÿ_šŠšŠ­šŠ8šŠšŠœ‡ ž‡ :Š ‹#— ++‹¤Š ½¢Š  ƒšü¢ü¤†ƒ û„#™ ++ý!¨ý!Íh¦ ° ++ ý!& ïÐ'Q6Q6r†…l *÷«~‰5é¡! Ù˜ –›{z/°—LÑQ"  ++_  á ÀÀ;ºÀ;p¥ÅÈ3à‡¤‡ì ++”ì ++‡¶È ++‡Ü ˜pT bPT  –°ŒÄ=>¸0¸Ò¼Ë~ ¬ âªvË~ªv `É(»¤ Ë~‰r, ¼¤T(?T (U#/ÿ¨ J/ÉJ^ šåÙþxxÒþÿê@¢Í#e2c¦x>wx° ++»…ðp|¬56g"c¦ $_ªc¦ $ ++¨ $:€°5û›IŸ¬P=Õoª x²…`K/ 0²…+-²…/¿‘!S w_tпÅê_ .°N†££O á#»D ­!W/¦÷­*•Ë­7£n£‹/—奎.×n†ƒv/HM~.O£n†) {M~¼?¥+—‰n† d<S(>£ ÷ð/Ûþß/ 0ã©™ €â„LN„ªç€¥+›0ˆÿ ++Ào„½=HI*cª_jcª4„ ++¬½= %`E° Í® Â$ 4D 4T ÿÿÿ® ® ®  ++° <ü#ŸÖ´ Õ² Æ" Ȥ (T ÿÿÿɲ «² ²  ++´ :$`¡ªÀà'+PHBc¸:ê‹ 6ÚÂÖÊZ,+ÄêÌÌÊäB HØèL`Eâ0Hê@$±„å0„å „å„{‹Pà„å£7Çó „åà—åà„åà—å#à„å'„åà—å+à4µ ¸HêÖzBc¶ +Ð H®5¼ì@³k+"°˜Žõë+“ë+ s#+|é ‰ë+të+k,ë+? °šó*l |é/õï*"Qï*W,‹Å·‡€^ãq‚E'—åÜ0™#pkÜe%¢S$0@ŠåÏ O+_·+¬?,«Æ p—è†Ó," 8 ÷Å>ž4Ü` Ð ++/Ot /Bä#Ì ++\ WüQ¤\@üD° áü K-ìÌ°¤ï¬ .°  ¿,£Æ€ ++ À´"ºƒŽØ#^¬ °` ­Ñž*  /+ c^ˆD ›Ä# Èüsë+ Üé+ 0^€Là€I€ k,6k,  ++ðjà9Ô ÷Åd ¿Å_ÆÓ,¡ê ဠ++À ++°à ›†0 ++q[M?” ++(< ++Üù—,ò—, .·þð.ªþd™(‚(sŒ ++.bþÈ@MþÿêL.+ @/ 0Ýš/+D¸ / D#mï, Hï,Κ0.'4ÈÈ È Ÿ0†å`ŠåÓý ¬/ÛÿŒèë³-.Å ++³-"0( ++X³-Q H8–šÃ-I:c¶,dzc¶¨B3  0»-`EÀ? °HI @X Êj.oX2¨&M} ."Vpª€ó-?äþ-?@8 ºþ  ,`p? ?¡ $`Ú( ++P%‚  ¶X+¢c¶5² ++¨8ê-=H× ?c¸¼œ5.¼.½Xº èÏ  Í€Å/mÅè.1²ÇOòcºõ-¼Þ?8<Æ ßž#§ÚñÀÔ½¾Ôx¾ÔÀÔ>ÄÕ%©Õ_°BcÊÕ½UÈ ºQÇ1¿1¸OàŠå¿1Ú‚û" >¤x² Ž 2Ñ šåšå šåáQ˜3TãˆÌŸx,9×ýx åj1bs0’ „ Ó>Æ°WØ¡’  ø ÑÚô,†åT¢“x àŠå -Ÿ/`t  ++û2pŠåŠå b" X(@ˆ"((=ØÒpšåšå šå$  4ª@ ‚Bú+˜ »#gS!# gS [ È·/`à¶î[ ++£ íÿ "‚¸xV8cÌ> W[0@7pÀ )à LJÐ0'ò&pöö |¢ö" °¼?p*Ý@(*@^Ð1(Š! î_, Šâd  $.,dÿ=, Jâ Šå,ŠåQŸ_0 Šâ`®ôE0`S0¶0` _4 ŠâÀ ž;¥4`ßý4 Jâ$Šå4`P šå8@`®ø8`PÝ8®ê!Š'HçÐŽ' ÕÝ ÙØÝݦ"àÞ!(%) -15H3 ã9=AŸ Ü/܃0†å<`Šåß×  ã80Šå@ Šâ,i>¢¼ÿ=@q@ Jâ80š@D$šå@"@D0D[ÜûD@p áH=@š—júYŸ3‚å„þ ÚZ @3†å”ß=$`ŠD>ÑB ™£0™£#0H1åHÕ /(02%% ê,€åg)DÀ…=YÙ‹8ÿ2 !°†Uà 8ì8 ÑÙ<<Ø^ <1`ŠÔ"Dà9HàŠ‚X@ á`"pXj¼}Ý\ÚO  á` O áX jœ}5X ö˜–)" í–)Ž]ƒå @ƒ(„($Æ,ÆoÝ/ \8><H$ æ æ!0€æfxˆ8æ04éB_x½04F)&íH4000VØ00,0VMh,0(yC±ß.ÿ^Š(uR(a<!š Vg½.çþ<ÑÞ».¥þ´(\¢(/)þ: m 0”   jüa ++  "0í©q’]jýÿê’ÅÅ8ÂP¬)òH,²,r 2‘hÞP¨=Ü!ð TØ ô_ãç@q)Ò& ·2·tT ++% &î% ÖÖïÞÐî1 ÁÊ b @¦“Ü7 ? P5ö…J `ÜxX³Àˆ¦#"p¦ ++!VcÄC@8Cäpá ++Eä€Ö.`ìCKt( "cÂx'b '¢ (â  Á+Q)ÚcÂS4( ++ ¦÷bâcÆX v"cÈ`BtÈ-ÊÒ 10Hº /þÈ &#­"&Ò&½Ð&ÿÎ&+ &+ !1`Š9àŠ &  d«« "˜««& &I]n&z?cÌx B² ¬άЬάЬÒ¬2¬Ö­¯¯jÀÐBcØ­½Ö­­­ }7-(/ ¿À ô­É"”¯1š3¶­­x*ü­x­Ô‘9 ­@Ó· $"x u  y¼ Û ++ _Œ{ h0šC1G2cÔ=Ö=Ô=Ö=Ø=>é^CÝK`±ÒÀ@hJô)5) Ü­½ÚUxÚ?ÜU .(û3·b(àÓ½ÞÓxÞÓàüÚ/Ô"#¹b æÔ½ä ÿâ'P'ÿn O<h âÄäÄâÄä²æÄ.Ä´¬«#»ª«ì«½ê«ÿè¬D¬ÿ/<¬è«ê«è«ê«ìX«h ¬#½ò«ò¬½ð«ÿî« «}î<ð<î<ð<ò<<çªt<ÁKoBcøt€Åôt€4Ùy†|/dvD  vD$H~K]zD r<<ÿ\p  ùâ<&&Íhp(]€ á áv3d° ]hÊ3l Ê7 œÊÖ¼ /´àz{O’{Ú@/ Ú@‡Ô ++|,Ú@7ôX¼3QcôBË‚ö  7¸ 0î>òÌðìÊÆèÞäZäÊÌZÆÐÊÆÖHt`"l`LU ++ê.Kˆ&¾‘ /:b; n=*\Ÿ‚å ‚åê5/Ž6a…ÈÌ T'N>l_°Šå0yɉejÚv? v?â?;0š Ü Ü›Ü/€ Ü&z Ü*`PãlÎ0—åŽz>?"O\P €å ™gO—åÞF/@ÞF3/)zG*zG ‚!/ HôæF¼æåÉ°åÉÙb9'vGÁôì XÚ/° „ *: ++A/’ ++A#ØÐqÁ tgÐ&°Ä"`_  Šât"ÈGó"  „$` `+H¸¹ÊáË/ È,0X1€ËZ> ++L> ÁÕjx¥ "R$ˆ(;„å ­ ­ ë|Èb$±[’ÿÿêŒ ÈAà€âþM0ÔúM‰¬'ò¬'gYIP8 è(d.îþ¶>.áþ(Ð(.¹þdªÊHÑh® õÎ ìp ¶ "pTî,à„ããÛ@õ/Ðè-Ñ ¾   °‚L D¢‚L4‹ z j \ (.+| CD0Ä&   Øh ++Æ $  ØÖ@ ”€   T+€ Õ Ð Žеn(Wp;\Ì)ÿÿê, ã áÔ‚Ì/Å Ìtã›ü×EtãQ›å€ã$ÛjpPã º( ++ÀáàãPáxýÿº ++ˆvýÿêàãÔ ++# jœjüa dÀ ++" nÀTãäÿÿ ++\ýÿêpZ,/ p"Ñp"Âÿp>x/<ý`- .õüÔ.ÝüÍ.Ïüð¿(#®üLüâA âAø”hwüÿê´ªÓ+9X ýNEÐöÙ+9.ØÆA°ûN/QÆWpò@scÀBI&÷+´H”@IX ++&hHHI -?PïÑÜ1xç"dbcB B¨B( p*cöµB!`¥,Q7¢cö¤pC„!@É,0nBU/?ô ++0ø.(Hy~«$ÅŽnþÅúÿÿ.úúü2OæÊèBÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ü>È‚üüú ++þ.*Hz"Ç/eF+¼he ðú½* u6/qu6ç6æ jBe à¦*P ê'‚’j/}‚.w‚8 & º *0àEPLE¤¾TS? ++bJ[6 ¼/Ä0%î« à”l?j@ÚE : ¾]@p†å1îðv ÚE/0tÉ°׸0î,b Ÿ/b0ê,.¬ÿ^¥v’vmv’vhv8v4v"{ÿv@yÿÿê¬Eð °Á°" ´ÎT/T VSÐÿÿ ++KVIÀ(l ? ÀÕÀšÀpÿÿê(RílЀ ++Xþp+,lX C:e ø£ šepB) #*.OúeR.#eEh8eI?É? ++B¸?0Åy E¨ä8ù "I4íÅy?÷/Éý ?÷éI¿ŠBe Z ßUÕrï^Ò àåpž^ ++^ÓÝy-6Zh ,ÍjV*³$—0N±^àå` ©6*U}°LH@½ ¬ I2¡ k¥x<ò¡@šåàšå ž?žoÚ"Ä5ÏQÈ5cU/oÚ/0¥ UõL†ï¯G€S” )KQ.‡Q -Dugq@é«qY/I áé˲ŤoÚ ±gºrÚ†9Ey‚þ‘÷7Úª‚gBePQetòöêt`Be8L  ŒH? Ѐ(2†Nó)¸ e%  ++dä[ â!c”æc'8¼ MQŠe7(`w`ˆ/e¨ ½ÑIf7åuå å± ` è± ±\3 –± ± µoh" 0EX­ ê R;/ é ðjÛý Zý Cý  R/iE ++/  's+qwP_šå¦¼Ÿ‹u‹p < 8 b `U U °¸²/)¸& °¼  \…\e SÌÿÿ ++.] ,Ð,ùt - Ð/UÐ’Ð"øþ öþSç5 ȳ>ø²)xE@ h@ h@ Búe vʦb8 je €A °# ++* ç÷/eB B 9‰ÚÍÚC ÝpÌpú C xG =G *€ß ¥ã ¶[•ã * x/ °xë h l”C $"ë $àC $ d@  xa d#Ì v1  áà!œ« *½˜ H@„C« Z ŒCt!P « ”« 4}Pðqö^è†X'0î<‡SÏ %´ŸŸÏ D ˆÏ R0€å ¬uÏ À w? áp#  tu ÿ Õ ¿0î F˜(Š|˜‡Óû òÞ]AP *)P5.Ãþäw¼þÿêF²]ZRe3"H§êe€BcüE EhE_5¤EC\!Q  üë[_je^ ++^ ++CÏrÚ/e/Äoe  ô§è ”‹¿. ‹¿ yô lRIÓ†oÒ Hëw @¯$Ö ++/³$o….ûÍk¿ î Ê+x (¤{oÿÿêìÄ/äÅW¿Yê\Rÿÿê&W¿"eW¿,v? f„'8‰_ ¢e4Ä %e£0£ŸZÒÚÚêèÂÄØ6¢#ÑJªG/e ¡Å©38©3x¥c©3DG©3\%©3T ++©3/ ¥3Y¥3 ¥3¥3¥3 °¥3N¥30/ G!#ˆü ¥3,e¥3óeˆBe  1à ,”†WèäÒÜΤGŒ!Vž3.ý"*/óC/âž3/Òž3/ÄCž3ž3¬pž3*0i³b/òƒi³°i³ –3b âRc0 “åÆ„.œ,#c! ’(–3RcV–3zhK’3&:b/’3 +’34’3’3 /ö’33ß’3Ñ’30’3òÜ"`­h ++$ ´.œô/ ÄŒV4‚.~J/4gz.:Q/z.jèá‚6Q/†3  z.†3"†3 ¥ò†3!†3! †3  ’¦.{®m<](L(5(((>3.ÿ3.öþ(å>3.Îþd.¿þŒ®>3"° ++/‘C°šå(63£63s ++À–œ@>n†Š¨xŠ ð. ìj´E!.|/RH =¶Ž /1a³ /$D/ ~2$ýHìÔÕœ=¶ (§8J ++ <ss(3ìî /u ++äIÓÃAÃ$“å»"ÃÃÊN2ÈN20jW æ2" 0˜‹Sæÿÿ ++°Î1®F2hqhÆó”p’>2 .Mýˆ.5ýØ.'ý('ýþ¾ /] ¾ ðî62yçüÿꦚ(2`62é q*ePI*62 ++"â\E°62!M8H++02I˜2*'`2ð 2˜ 2ohe 2×+1Òe ++0 2O*e 2 %e j,$Hâ F#Óú&dÅ"dÿÿ*"d"d$d.dFeÿÿÿÿÿÿÿÿÿÿÿÿ«$e>eÂe_$e$e"e ++&e&epD%"× ++bt/e,È7½*pDwo(  pD/¿7ý¿7÷QãC {8{Ë ++';)F¡; '³ s„s„å „å0¯ 'ßó(Ò(bÁÿÿê Ž¥ð ++ã…Aá á° ã›îÀàÎPá€w ++l@ãSŽ|@‘âQj‡ ++GÏ @ã 57lp“ll4 l“ ²¢lÄk ²0D" 0º4:wd•r/ A•>" 0º4:w6w8 ãTP <‘Pƒ¨/X¨éX&\¨+9¬TˆFoˆFjK ++:K ++6K ++K ++ª áóÓ7V ãñþøœ¨|E᨜¨s9T/5T ÐE"ÍÿÀÁÀ(¡l  TõÀ˜À‘ˆª¹Râ  ++É ‚äæ :9/ À$ /82!pRA še\±.çx#ê6! Ú óF#Z óF*±9,Æf0e0-/8vx"ÙZ»Ñ e2zvÈÀ2º¹ ®9"‘†å†å†¾¹¶9º¹¶9*Ñ@ ¶9ζ9o.  ++ˆF ²9²9îùF ùF$ÒùFùF$²ùF& 0õF \ =QõF–9 ++OõF J9õFÿmEõF„¹^ÙõF,5õFÿ›øõF.õF.°8'e°8(õF _0#põF=C‚e.4p—8Aºe26oLPe0-#Ûz-8-½6õF€o4 0õF6.6P6E>7¥ ê ° Vzê Â@´ÿÿêB”bbbbW`j (µ”¿ áŒ_ B¬4Œ_  p X  –ßÒ‘ÅyH.¥ÿ> " þé \¤¾ ¥Fê & žTP XõF Pt¨(/Q¨ ¨¡,A8 áTEIwIrž>ž:žÙ&×þIHÓàŽíG /Mü#° ¦\©\IHÉî£Ð,/t ¶Ð/yÐÐo¨üµD¾)¿à!ÈÅp8 Ë^je4Ë#ºË  ² }I#R}I6Ì8Ì7<”Í#ÝÊÍ>‡ÉØ` 4`  ÍgÁ‘†å†å†‹ÉÕæÕ Ùô ÌÕh:  H ‹I¸Ù¥‹I‹I$†‹I‹I$/d‹I‹I$/C‹I‹I Œ 0ÙS£ ++0ÙS£ ++&Ð(!0“£ ++S£ ++{IÃÊ0»ø§ ++0è¤ÛL"ÉĘ& 0Y_ ãJ™ _aãJ ™ãJ,ãJÿQ+-eãJ ]SnãJˆ x5<e((&ðþAÿæþÿ à’åÿàâ^ã'ÿÿ ++áþ# wKB/wK.Hþx]AþÿêbwK:wK:wK:Ç$è É ÀÈ ,b"'þc"`c"opBe4­K _<3t­K5 @hÚíѧ à:ÙKB€BCÊe>BO`e<9GßÔ4BÔ4Å@ÙKÿÿâ@ÙKI?@ ++( ++'B ++', ++'×K$ã 'àHŸÅD€ÿÿ--eDw9D€teF  -xÛK“"Ä^­z9£®8} ’z9‚z9/t}7\z91ê]},2}(ØUÒU‚9=Ý|~9/öu/ç~93/Ð~9/¿~9 ²~94›~9º8izº8$Ž[­~ò/Qå| å|N Ê8 "À› µ~~8"@i~­Íi~U î~8¨U~Œ ++p@à€âpJ:_à€åŸQ ++ï28zöl<^<Gn8:()(dŒéÐ Ž45y~µÒ&p5yv8Žv8ƒ… qÞ›%½ ~U¨(4U‚*HœI}f< Г( U œ œ$‡qú ++ Ïa  aÆa ¤–<•BWvÿÿê"8 † ˜/% ˜\Ý| A" þ*8Tþÿê*8°m|*Á Œ  m|W ãþ28p/1 ++Ý|æ:8ä:8 .ý …8.wýðg(V:8üÖ +%  øVêŽëŽX§€ÝoT 0ý 7–7/ƒêC#epýŸ:îý*BD_¯:sÿù¢ ++ö/aÿ:°Ä6 Ä6›¬6¤þ¬_Ä6žúSú’ÐY0ÐYcpƒå °ƒºƒ”55 ž=G œ5/y+÷/ 5G:b4Z.›@.pä^1G t51G*1G"0t51G /…1GH›@ —<€NgZbZ1IP92 ž®$ÝI  ¶ Ê J@°åIÂ0ãÂC0‘âMR¾pL\>4ŠÄ† +I¼0¼Ón´Œ6¾ ++X./ûþX6.y/‰EIjÚ]cþÿêREI;TPurT˜BeFJ$ †!˜F6F6_V#`CI)&˜é€Ã‰ÿâ@( ++ÈL62 L6_*eT%‚ ++X%‚V ŽI#íŠ ^ ½\ŽI€jZ  ŽIK€XâgÉ%.+%P™‚ ++°â[+!+P+" ˜êÿ ±é Eé O ++4 û E3*óí ïó+óØ!© ÂE0”•>j5e |g ytcxäñ(  €œ"ýà!€"„‚öÍ5 € r3 h%`Bä & Í!@.NDW eZZD\- ^- >bÕ,ï,d'Tåh`  ++hTRD<: )RDRD$ ++RDRD$êÝRD$ËÝÞRDš RD“T RDàöBÙòBV V •V 4.kÎB$öBöBöB‚ S‚ &öBÑÙÙI (öB ({(_dÿÿêÒ(ñÙL%ÙĘ ½Ù`bB`bB`bBL.3eZQ hæ pæ _b3hÙG`´ _be`BU ++d´ OXebˆ#ñªˆh›,ÅfBÿÿâfBB1?f ++(àhBØ' ¯óºÀàBenS½lSèÜA/uèÜSej ÙÜSÉS&S S DÌ  Ì Ì §ø8`Šå(& à[ ) ¼åœw³Ø”ZxLM*ˆCˆ0 ã—ù%`týf>%`K K ”â jìN—åìg ˜$ ò 8  á”ÝÀ ++¶/®ÔiôÐ YÜ H ôyß%¼0Ûp°B  ÷Ü 3@›ú25°šúŽ)k ÔOÀ—åº* €°úmz/° `£[°² S~=0†FüR^ƒå üR9ZÄ/ ªàL&B d¥' í!d¥ØÀ ++³¦*¦®.™@Œ~<kÆ1 ’)Y¸Z ++ S0£䘢F¢PS28Â3 i/€ÿÿóhÿÿⶠÒ3?(P&ÿÿòW"ej×l×n1br×=ÆÂæ1b/V+#÷:1bt×åhp  ++`Øׂv×{×h×A*o•oIÁa××Üœês*'s ×| ×¼àÅ{d@‹ê d!$ßd føÅ—dAç§eŠå$Š<;üê; ²ëã90àŠˆŸ(@Šå, Šâ$C ²",,C"(@nDCC¯C4†CX‰:C${gmg g_g<Fg00g$7€)c3 O á 0L‘+Ð0KÁ¹Š0—Éb³/š(Œ(~p<a(_Jÿÿêî“ AÔj„ .!Îvx…Ó]~þÿêVÓpÓpÓ ++Y²epåYhBejå¸å_rCdåa'#8ø`Ú« apap_Zep ++3t8 ++ -erfVf#ùZxf½Uv  ýÐÐI8Ñ0Ñ*Ñ O2ŸºŸºL "Ûù|•8 ¼ SaÒ [M DΕ8 Ñ'ô*Õô*TÅ/p»?¶8À8+ /¸Õ¥8`ÆÝtÇ §2Ožÿÿêè-UèÒ $­8°‡¹¹/` ’¹R Òevž+%P>¸8x‹+7|$nÌÒðÜêÚBû~À8Ýoz ¸Š+æ³ ÓŠ+Š+$´g¹T’ìŠ+& 0yk¹ eŽ+pào ê^ê^“Ò^èAê^&âê^ ‰Ö7 2Z02ZzJSå 0í/å‚HpD‡™‡å ‡å ‡€$/ p,,# 0V,Y‡ë¹ “¡€4|N÷ n¡ï ,Á€ …SÁ€<:Á€0,pÁ€, /U,…,  Œ“¿¦í,‹}f(9i#T“`i T“Fè9pè9 $ä9_±$    på@åü@8î èà/m¼Ô ¸ аí\4¹\”puÍ”p_]þÿêd_z_8zH:ò ++:ã 5B\ap`P_|5œapA/-: `Š ++X x(âezzz_²ez:: ++~::|| ++èký [oBe†½„Ñ\ ++Ð19ôÎVï),xÊEï) ãï)ÂzBe‚ Ø 4]YMÄòèÊ(j?†"à*ò% ++0žå žå žåžåpžå°žåÀ®0ª„'#0ìO`g1p†ÞQà†åºÊ‘šå!à†å%À†Jž€)à†åPà ãÚŠ Î ú ‹„'/à™õ.0àšåø-ðZBe€ O(1ª ++|C|CdC |C|C|4àA` ++ ^ã^0aàå0XXžÄL” „ Je7Lpàå àžå¶(1 ¡Î6PJé•ì œ d d "&îd  0Éœ e‰ØðÄþ)/¤ÍÊIp3€¶X¯@QãîP^+òÚN1 á£= á0ŽàÃ2 á;…ù 9A1 á  ãCÂàÄRá4T¨–\"'¬þ  ++Cá á®í áàƒàÎâ áá áàx )ÎJpô%z260t Sð  F F D!htl x/1°&Í _HÐB 0 ¾V]€ ++­†]*®Z†]Ëí _`Šå%LwËí ?°‚å†] 2, x Wì©ßx"N F,Àà—å^ãþP©FP© }P©*?$`Š ¨NV^HV^"¾¤ DNâ™@(  Z=ã|L „ã/že$\/Œ¢]#~ô0ôöp/plTa^ãö/0Hõ\ ¶] v^$°΋å ‹å —å p¸Ôq$Í°. $½t ++¤‹¤‹¤¬ƒŠP X/ŸPp¼ˆÝ%à¼z`nå pmŒ0Z ÔVÈ H#"îHk ƒå ƒ¤ì?X $<v^ß  k xx x@©pK+! ++\ pK° غ€£`Œ`~8q°Z‰&M(<(%(Œÿÿê°—å4 Šå,°Šå0<¢øy 00<('î?°šåôù (`Ù%Xd€dB€å °4³@ìïÑ@‰ì{xmA[þÿêÈpNâà€á ÉœPààmPC á ào¸M î_Gî_+;\ª )ªBàà|àƒàÎƒå ƒåƒåÀþÔà |оmtì l.¹l|©<õ<"ÙH‚ÌZÌU^=^9^!^LªP€ À@àTã¢ýÿ ++x E ýÿê4ÿ&÷& *¡÷&(Cšåè¢]‹‚^XùXSèÿÿ ++Ê`sr^`/Y`­`[b^.Yý@P© (P©ü /<ü /+ü /ü / ü #.ÿüøìpÞˆÎ(/½ÿÒ_‚„jB_.\üøL(/;ü8Q0 0 /í ^0šåÙû˜"Òû'’'’#àý! +Qý!ÐŒ4L¬ /™¬ àšå¤ûÿêøB–aèà¸äBXàH/P/!`'€½(.'  R Šx!¬# z=˜ò``¸ï=8õèØ2E¦øE°r«ˆ@an«$P aa@n#ž3XÆ—3J€à[J'Xò`@P#S“&`w“ aˆ a/ ++`R/X¿ü/ ++@>(je€_aE( z+  ]C€s%Kò¶!hg Mº$X:”„HTe‚ì1Oe„8$†ì1OÐ,HúË<$3÷1ŠÀ½ˆÀ ++Àh ++ëˆëŠë(.èsc©°À`BgÊ;‚˜ ÚÂÖÊZ@QÌÒØØO­ÿ0—å —å°—åÀ— j ôG„À†å†å(ì00 á*(4*‘à„å„å!41„åR–q„å„å %4„èA1à„ ++_à„å#å›ç×5v!àúBeœ p ä&ÊäÜ"M+°1àŠè&1àŠ£4SàŠå®r àØÝŠå—å°—å#À—"ï1 \.q#.ó ++ àšåà†å!†å%°†å)À†å- †åXBÝ+ Ý+Ý+‹F.p„/`œ 4AµTS`šåë‘+WÀ^ã‘+„T À‚º@Pã€Êœ(&|'sø„^ ++ áM*”#Åw /ÙI*rDöKXX /1/ "hn —å° 0È Ð`p^ãºí*„ œ”…+€ œ&KtŸ àŽâÎãèoÙÿÿêØàÒJÅ+¬! /QÁ+ †kž„)/Å„X0/X B ++Påy1zªWàBe– 3%ìS&°/Åx"¬.H+/ý›(›( ; à‡ë1à‡ÿ “à‡å à ã!(%) -15H3 ã9=[Aà‡åœÊïû¼(Ã(Ã( ++´ ++"àÅG“-›å°Šå ¨.O)p›å¯ ™äY_°šå pX%X ñX"€Ÿdl=! ›£qŸç ++"`Ç/p>/S>#.œ;}zI{ **Ò£ ƒ/Ÿ# GH`Ïa8}›åÀ›$ñ'0§*cÀG|/Ý|‘s8Êz_ _· 8/·g!p¤8 ¡#$»cw®\º›å0PÙs 0…t '"ƒ<ˆô»+פ/p½}û)Û3G¿Ï ó ]Rí÷ i ++у {©g/›Ë /u/o/.Àb³Qaª;_ ›å @BŽ4+ŽŽo+<A ìëß(Î(·(¨cg€à›åàžå/ 3gã%W- ·Ažâ+ì` ++M@Ás è÷+À=‹€„ñÿÿêàãðó/ {À+å /à÷©W@  ã†ª\A­‰D ++`»8ðÿ)/…þðg @UŒ.Bþ(/(.þŒ.þx.óý<ÜÏ[.¾ýP.¦ý×™/ˆýó 4/Hü x°Z™Z &} ™Z˜.èüPàáüÿꤢÞPë 7†[`ø H.úiúóe  ++'À æêàÊäZæÒôÊ0+@($ÈÇ*”O—åô'g ++…*° ++ü$ðL(#QÜ B|7 &”u& ++uø/ `ü í M  ø”T@ ++ÑÏ0”åà`%@Š ++ P^ãf{D ^ìM@@ã;è€üÿ@à] @{@ ¨ "÷D HŽb¸š„! ° YQ±@ ]- H JâÈð@ @·x!+Õ^šå¢ÿ!_›ÿÿê'L*!&0} ++u"àWÉIH ÌÄ l [ qKÿOÐ /Ù &p!/5\ \b(*…èT8½8qOÿ ã8 õ8¦X.-X”X|-/™| i¼ì00!”ô-#@jÔ /õ k"@jm ¼0ØÀèmH"?ã]¨(/L 8¨(/݃.u8­8¹ðå8´ ;Ä)Œ4/Q¡ô*¡¼“Dá@Éôt°/¥ „!@i¼ Í ++ø¨ ’þ”$2ÄUŽ ¸Ã^D ++Q¸22+e0pšåBpbBeŒt ++6€ t ++RZÊðàäy ++eýM ÙM Ñ-n¾ ++ ѳÅr /¢zS /•r ‰0 Šâ!/; !Õ rmf½?ô &PôR ƒå ` Ý A¹/ê*ê”>á)j ¥DÁ+¶ÀOf ê•-ÝÏÞ¸©½?/îäL zd@WF]E1! /q1!Ošå/X( |fí/Sì/Hì/7ì /*ì[/ ì"ìËðóðâðÙ ðÓì!ð¼ð”®ð ð.¡ž•7 •7 ++¡7/0#•Œ &™( ÷k xmˆ\xMx46x(x x$tî˜ð+”¹.šÞ”Ñè¬èŒ÷k=,Xêë=&|»¡Õ, @.ÏþHÂ/±þ@/± @šXw“þÿêŽÊn)7ÿþ/+@ålYjeŒš)> °2Ÿ/ ++HŒR©)9,Q úeŒ(VCñ8 .êÜÊðàÊÆèÊÈ@ÊØè;Aüæ@üæ(Ÿ ++jˆ¼´Û BÛh·¯Û'84/Z.xõ+Ä*2eŒ F ++%'zF!@(CâeŽ …Reøù+dh¦ ++HÙ*Ý+HÑ+8Wx Âe ++ ?e’ We”£1ÒÚÚ¢HE>{T8 ++‘%r‘œãPJe”U#3–0Pçpp{ /€ª/MV8e’0e”ô"`¢bº0KÀc0ã.Y ++e– /? ¼Ÿ·!VœF x ++@xÂèä±/(”Qêöš-Qi.Àe˜Y/¨/>eš%/µ- ¾Ñ% ++@Nâ€NGHxe˜p>ešdQ~(úe–~!HÖw3e– ++ x¿šeœøBeÜŠÒðBež XTY@@â,mP0Žà yy[y*0àW"m8/F?#K"¤m PÃU> 0D ++Sb tš,ï.-W ++ ++ NEc‰5jD]Ú] / ¢uw&ò-ãÑÜy[ !žB8gb0€€h3$ˆ3oež ++(î>J8Ø‘u ºeœ ++0Ø–N ¢08 R* ™bn“f.ƒ(Be¤N0½¢YèŒxXY+XÚB  ÂÂjHÆ9 Æ9§ƒ à/$0^ãôîåà‘åàâ^ãðÿÿ)µ§!5!àãæ+ÎL‘ù0ò8@×ÿÿ ++FB­Ç - Q€­ ++xY }l°pfpx>pÜ—tLmÈ‘°xOÕÿÿ ++Œ£ì ›ìàÖ‹eã÷ÿÿÀ0þÿÿ<aòÿÿÊÿì#Êød L /m…:30j=C@X3 òHBe  C $ÈÞZÒ2 MÒ2°V"­$LÆ /ÎLÆ&È Lö&¾r· DXò_àå!DV04½,{e,'-¯dÅ,/ˆEXJ–ÅŒH@+/º¬©«W1 ž #f/—1&7€W/o|C bW!˜Kpò! DXI<"D”Y/(ž¡H |¬‡ ++/† óÌZœ‡œ‘‡å ‡å ‡Y_“@Šå 0Šå$TBSi\ [Q\B, @šå 0šå$ *ÆlE0·ÌE© ++LÖ¢ =/šn /î'.pl„$J¼I.!°t í.°<Ip ´^" °-/ 8KQ|88'îN‚?ò£.î<Ê ÈI " à;H[ é{ÕF Á.®ÿ ›…<u_ŒPB3(Ó.ùþ(/èþü¿®A+—dŠ(y(bP ?þr7n€ ôb« :·gL!L ·` "tQÌ`«"¶}¤!¨9 pž® ”RŒqj·œ!Ûk ó„¡0oöýÿê”àÚ¥,.ÌýÜ»],v¥,E‘+a ž O šåBp&;ýÍ"5ýÍZ 12ýÿ”UD0ýÿº4P@œ9/?ýÿÊ” /+” %àÑp ãWã&9.pWS ì½ à‡âàŽâ0Îu1ö & ¤ä³/8 ”/õ 8 ¼=µ0üÔ4 ++¬´üT0üT‡èV<Žâü•0 è¾ `\ L> H6 7€å4PôOt_Ž‰ À81`Š\eÜ Ð'ä ¼>T!T &T >‘älÆè`èjÈY¬è8Hc‰0¸'/˜àW¤v⎠<$Q/Ãïh@® .i¦ìð&åþü(@ p’åƒÜ¤TÕþÿêØ"£q¢e h¸11 èó½1óÈgòèìÊÆ0Bì÷PÁÍ€UÈͨ? 0ý¨DxR3=að@b0 ¦0aD °ja#p"ö1ö€ÙHYž’*€CE? /½å ß` !ß`0r:$Hþï;¦ˆ;ê0¦ˆ#7 ÷_’e¦Ï­ ++¨iO@eªop$ œ®[à¨X.*~ X_à€ƒIhèhÉhÒho¬ ø$Ák û$Á $Á$ßðTž b" _Il ð ¾I h•° Bã/š'‰F*Ö*/{±¿4œ ‰f)ùŽp‹J„ PyP [ámÐDà áˆ ó\Ë è Ç °Se— &à”¦)Ó[{I  w . @ßpOpå£]qp£] À>/JïC~\p __IÿÿêÅh/æï ç3/i §ð‡léþÿê>€Ã;¬X¬w €³(c%,`# ++ë ++v e¬¨%´sT7ä8G||Ti( -8b´Sêe¬“h“Cªe®“6h ô ŸPBìP {–oBe¸‡"½d° ÈŠ |Q&PãZ!  áÁh‘ à“å&^ã5åj“J &ÿ2QG &°]P!‘’FG 0å 0@G G SG xØ¢¦‚ ++à&: Ù¤íO0“å "5Ôÿÿ "!5Îÿÿ!!WÉÿÿ ++ù=]Å!“ÁÂÔ0!3Sá½!»Ôù;j )/éj õ‘ ++BBü`L  ++(C"e°^ |oŒ²  X n$! NP&Rã_÷R/PÄ;gHM?p›Ä ++Ä&«LM› ›/ “×4ù+D8Nì ô /Q/‘L ÐL mÇô .  F¿X " À°T  ßlóãšGá á ` ã–ÀàÁPá•ó;E%Œ@‘â{j(qlH 4_Çû>q$KU€ ›å ›åäG}p›å°›hP.ô#.àqp”°†åÀ†å8cDpÔ0Sã1È0 ãü _$  ãn°m àà  W{f™Øë±@ ãàº`žåâ¾_Èÿÿ ++ú G´#€uÓ›b°ÄÀç°³lY’†°¬"Àã°@mÿÿê^×=\µÿ± `QÌ××ü @/îþ°¾äž .}€R" Ø°©Ã4 ãä!p‡ä"šþä;Dzåv³Iš8be²þ08 _ J-0à2Ç/A€e´ 9Ø!.!.QŠåÀ 5pŠŽÈT*}m)–ö«éY`0Ãã\ƒGNÔP° áöÀÀ Ï/ 0oy j¬¥oy"À‹" 01àžL€ \áUÚw!€ Žà àLàë"(p# °ÓVà§z.!|" °œ0 `$Ì U._ ÄiH=$@Š<ÇpøÃ'B(`Šå Bžå,à Sàžå0 nàžå4à\/(¯"A8`Šå710 ãÒ 0  ã\@ÖÊPì& ·@_pŠå<È"ÜÿÍ*"<<4à á& Ç@1/ [ḺpŠå Z@\ãWºLj§0°ƒâ_Db ÀŠå<àˆº‰@Ø¢¤ÿù@@K b Àšå<àˆÎ‰1ÀL€§BCp ã 0Ï 0žå@0ŠåžåCv /å£ßCvlHÌ" À`ÔŸD Šâ(àåï¢üÿÍDD8PÔ" ÀhÜ?ø‡0 àëÏ°|.<`0Ÿ 1€L£%¼‘P P ++| /]Qåõ,{hb á@àšå 3[ã3È È øo¸#Àà˜°­Ï]*;O$@£'Ð HP²úìR„å„%?žåûl&@k˜JûO„å¡ó$ìßÑ6û ªœý¬h(ZÀ³yÒ 'x5ÿÿì ø'ŒUA*;ÿ` _bqÿâà‚ûFT ÄAÅþÿêï^LDPkTÿ½ðÔDðæH \/ ` n\ÿP `PÉL×CåÁÂùÛn¤&0@|jœÿ™ œ&(}Ý0Tãt” ðjàÀtŒ-„XX4XŒQJ:8ƒ*¸™$ƒk4$ w¾0$;`¤(¬,Kbs)97|$t97 ÙËY .¯ÿø ++¡uÍÀ Ø- žÔ«% x™< ‹’A@D~<a „å0„á8a)5C…à/0žs .ï‡ç0#0„å „å,ˆìßÑ‡è ³}4\ ++ j ýÉ \ ++(4D.   ++H, o’ÿÿ ++ñþq³ Ànì`NP ++|À áDýÿê¬ ` Ü ++h ÕÈh  ¯)ö@VDÚüÿêd b$àŠåÑüÄ Ì ¤ê™Ìˆr`ñküÿê–Šæ)2)0 L˜Ùb´ e¶:"#Wm ä½…s¦ÈB„µ(À2…7.ðÑ ¨AJA¸àÍ/çl%#há"»?ˆw>ÀÜ #JÜ€€ €vÙ;/ ++(¡m \nˆ[m@P3ªe´a“/ ++@¼m")LT ‚oÚv9Úe´ ++ EÎ'“B ö? ‘H€B4€: (Ò‡7² /Ve²Â b8êe°7$¸7$>¾2$ m#Z2$¼8½_º à7Ã1/uÃÃm>5²HÑ ºÌ¼Ì?e¾ø“Ä¿™"ñ% “ “ñ%“+Á) “Ò“U  ‹²™""_&0Ù°™%›­O —åªØsžÝg 9tzÌt }% "¼«¡ ì1 Ôt"k¡H [èæ½. ¨6Ð- ý FA Õ ‘¥ù +© / 0¥ } ++t‘© €© C„†Ý&CéÉÛµΑ¥ÊB Pìj=bpÐ<à.1b í¹"" pñ"P­!a"Ú ÛTÀcÅ`ðg¼  sZÞÌÌæÊè0W=@AQ?;Q?œ5ià+Ð$Ð$¸ .p ¸  (A?LA9DA@pŒ*1$@‘ß‘ï‘Ä{Y*ì{Y¥œñ@&žÿçx)çx%uAišå$ 9C÷ /m÷C0šå vvtÿÿêJ<ìáO¨Ë ° ++’NJxP beÀE-.P  ¿À™/¨Ñ@PgÀQŽ?tãZÆÞàòB!B · (!XŽ S òeÂŽ PCAšeÄ× 9L8½#vÅÅÈ^*ÕhÆ #^*A-î'°ª=Ò/n~.hµB^Ö!/Iš*¯Cš* ÅÖ!+Ö!/pšùšbž*5R!&ÁÓz ù/ù‘?è7"°ý~! /Ú-@#LÂL*0à†mæ!°­~hœö®" À©>_ À—åŒT½‰4v½‰e½‰ X¶i@ 6A¾" 9@8MÔ * É?PU?/ ?PUñ ++/Mb"PUËäZ ¡‚"”(ƒ(l]?L7LU øËH/ÝV ¢"&›þeÕ&•þIO’þÿø v—v 0ê'Sê' ++†q®0,/Ù}† ’? —ñ×0Œ ê&ƒ<0<0. 4Æ& 8  ¸±y ÕBîÛÉñ×/î†.//‘´?0šå×ü&sÿ´ ++@0›åeæ ++C0 ãcî ++}5vbé:¯.J²eÆ/ò’pÐ:hÇ.?¨Lƒ®T}:xs:8O%.pHWÊS/U‚eÆ›¢ ÊFÒeÆÒÞ:P%!ÚÂ/ç9pç9j/k%#:kd/Èd/(§ èäêÜÆÂèÊ«  6Ìa9ÅÊ‚Êÿÿâ3Êh}‚Ê@4Ê ++(Ñ œEŠeÌ‚Ê4ó„†Ê¢#š¢iÔ  ¢9ÀU!¦¸„Q$À„þ€å0€å€åà—å#ΈÆâÎ0>í>0>ÈÞ¯šBeÎ X×: :«ÛAÈþã ?#pžþã"*ªÛ:×:ž«h×:ˆ9 bSz{ÆOSà†â §+ àè 3†âNŸêúRg+9žë°}¸ö ¥S_VæšP õVSpPòQWã2 ´Z¬* Œî–P¬.0ú•/ ++"H Jø3 ê»)/ ã#ÝÉRHš« R/ËR3´ ++£ ++ –˜œðð{Š¬4dΕ UT”_€å p€þå˜ ÚV&+þå&DþåB"±4/…±áNË  (VI•<ɹc(V(E(.ÚI<ï³3£8‹*G~k? ?_?+¯?A0 á¾g? á¹/~þåW*….%þ$]þÿêjå;ÎP>8Îhj`ˆeБ %¼?b ++û"úÒ  H ÄìZÒÜÈÊð;N§ 4N§..$2 â K:&Ús<@$ ã'`šåðåq;®"Ü& Õû,ÏG.Ì<0?.ír‘Š#jo4yÜ/)äN§äß@ ++¥n V{eØ .Î .QÌÿÿêÞ•&Ж'&uêeÒ ++(1ú á•7ÒHÕ ²¿`3'Xu Ê`ä#rç6G`3ÀŽ €É­(É­XeÖ"Z p8“O%ØÜ­+?1R ¢eÎ$ÚiE(è C SReÎC ˜†CòeÔ†OˆeÖ* #ê* Ú* ÿØ* ÿÿÿÿÿÿÿ¿Ø* Ø* !2eÒ© ++Ø© ++/)0© ++,Ü© ++ê© ++Ü© ++_Ø© ++Ø© ++Ø© ++Ø© ++ ++Ú© ++Ü© ++#:© ++à¨Ð˜© ++,íÂH~¥ ++í™Á}Ô}ÞÝ/8u ++rR¹KIú…/¾*Ü%˜ y˜©‹{­/~­l­^­ Q*-êÔ ÓrB è!Ê-Ê-Ê-4 Ê-‚9 ißÍ/ (·(Þ›}"9’Q © á / š-Gxr@ÿÿê(ÊqeÞh@9r-Îj!t *eÞ ++0ÖZ ÎCšeàÎX‹-äâÍââÿÿÿ&ââ/)0â@ââ ++äâÄ #!zâèâÍæâÿÿÿ&æÄ tâ@æâ ++èâ(27blZÜÂèÒìÊ–ú#‘&ìúÍêúÿÿÿ&êÜ 2ú@êú ++ìúêú&#%ºúð-0Åoî H% ò;ò{õ5CÁ# 0ò©# ©pÍ"'" ¾]åEPâh˜/] ׯˆ¨_1½ú÷îX3T b]æ0­_:eîÌh ++ð9. §/fd­$#'Ê­ô­Åò­ÿ,oòXæ­ò­ ++ô­ê­&#)Ú­ø­Åö­ÿ,öZb­ö­ ++øZ/lh­$+h&ü­Åú­ÿ,ú­J­ú­ ++üZ­&"-ú­/g­Åþ­ÿ,þ­¤­þ­ %g­B­¿ÒÊÊÊZæÒÜÎØʵ$#1 ++µµÄ/gµÿ+ gµdµ/gµ ++µOÈÞêĵµÌ gàø´y½&C.¦½‘½ ,½&xç×9@Xi  R áSá"°–ôU ؽg-»'"°… ºKC¬_p5(c/ 4]pïÊc+¤_ô°|Q ïÊ4] ôÄ<¶(_ÿÿêÌÈ /1½¸ë" 4ZiSƒSiƒE7¦€ [.h–#/ ++8½_ ’g½ %g™/Wʇ5](/g ‡Í ++‡ÿÿÙ ++‡/)0‡% ++‡ ++ ‡·7(/g‡Í‡ÿÿÙ‡H‡ ++‡, JΖ9¶'/g–Í–ÿÿÙ¤ t–%– ++–4[' ;\'/g Í ÿÿÙ6 2 %  ++ ê '='/g™Å™x˜&0™A˜*™0˜ 8sÙœœ1à á0´"\“¤ûû/ Õ¦\© 0©%­0­˜æ¸±Ò@"gú)‘T0b3¢0Å•eQbgû°Å>H4'Å!?'/g ÅÅÅÿD0`2'ÅÅ ++ ÅêÅ'AÚÀ84Ò$N¹Bg" øã`•f‹ó·/ eM+ueM `• ›› ++bB 0˜‹ ‡ADP@fq!g"™AL -C’ ê $ ±$ #EJ(¤jØ4Þˆ irmr1†n -Kßrær.Ù¦ rÌrg&  - & Ž ±1œê3 Ž -ƒ-õ r1• cúpt-NŽ“aŽ“`e¡ ppl ìmŸÒ l@ÅŸCà álð@$0ŠåTj1—¨à } "ÜR5sÈŽÓX*(@i;RÔ‘s "€• \9 íI€ íq0íIGŠ eŠÊ3 /íÊ3OF XHÿÿê*ñ&êdzHÚHzH_g*D & êShB]Æ 8€&HU'8Þ@~“„“S òg&÷ €˜GAÊg(' oLhg*G.í,ÿÿÿ ++,,,?0Dk( d, ++.0#Iª6’Íh4 ðôaéÄ7Ñè’¹è ÑèÑ軸’»¸’Œ0^2  ++ïs\ïlØlù&Ÿ x ø!°àø°ø0[áªøÀØo\ø!°›¤ø[ø8à ãT*ŸÑV nµ} ¢å â <{ª öi6Z$[?DNn>@—åЕü?¤o?$ ? Ê4Ê ? (Î=Tº<«WÀ ~µ}" Øo Õª0à’å É V&Ÿ\t /Y`Tô ++tp6]«’%L(g2{pg4H@g2¼9†ä #tXm?x^?*'€ÙÊg4 ++8c6c$?/K–:iÍ8iÿÿÿÿ’8i/)2iN8i ++:iêiM¿=/g>ÿÅ<i€a/‹aaaJ{$a0awa aa 1 A9  ž×_à ãñ)æ)_äÿÿêÜû4/!û Ÿ)˜))<)bH3P(’9xÛ_ Zg< ++> D ++/dhÛOí>BÛÅ@ÛÿÿX@ÛRÛ@Û ++BÛêÛS@FÛÅDÛÿÿXDÛTÛDÛ ++F¶/fdÛU9AJÛÅHÛÿÿXHÛ/æÛHÛ ++J¶Û#W*ÛNÛÅLÛÿÿXL¶VÛLÛ ++N¶/h`ÛYhDRÛÅPÛÿÿXPÛXÛPÛ ++R¶Û[.VÛÅTÛÿÿXTÛZÛTÛ ++V¶pÛ]—GZÛÅXÛÿÿXXÛ\ÛXÛ ++Z¶Û#_jÛ^ÛÅ\ÛÿÿX\Û^Û\Û ++^¶j³"a™4bÛÅ`ÛÿÿX`Û`Û`Û ++b¶Ûcœ/gfÛÅdÛÿÿXdÛbÛdÛ ++f¶l³"eÍMjÛÅhÛÿÿXhÛJÛhÛ ++j¶Û#gªÛnÛÅhl XÛæÛ Ò¯' tÄφÓ!÷tĆÓÍó1–{ç@óÿÿºcyŒ@âTãî½– Ôˆ g ƒôSƒg?Qƒå ƒnÕ²ÙÑœ [´ñr]Ñ.0n]Dn]6÷> G?')­ý0r] r]q І]Ã(µú\‘æØÐT/ÁÐÿT¬93“å 9/ ÿ1›"pÙ¡œ} ++}„&ˆ.ÃþA&¼þ…?DbA@"gt]ðAíš/p/d0JJ—`gt Ð_BgtA ++vA&}GOZmAzçÍxçÿÿÿÿÿÏxç/)2ç5/)2çxçxç ++zçêç qFA~çÍh|  øçšK,°ë ë›ç&À§ç ++ ++Kço×VŸ?ë wß;F[Ë" Ï”“ÀÄ0\á%b` âV!Àœ\' M0 P«¾3jZçe 0  0 tP¯@›åݯ0 ãzÄ/Bï“ &\« /Y&H‘ôá ¯˜¯e*g|X¯8@I\f$0 1Nh*~² Êg| ++@*~ /dh*sº=‚*Í€*ÿÿ”€*R*R*€* ++‚T* u.:†*Í„*ÿÿ”„*T*T*„* ++†T/fd*w¢6Š*͈*ÿÿ”ˆ*%æ*/æ*ˆ* ++ŠT* !yŠ¾q q'h`·qŒ·q‡·qŒ·q-{BꎱŽ ú2p±/}²2’±’.j2'jl”±”."2 –±– Ú2'lh˜±˜.ƒ’2 š±š…žRtíhœ  u&]Û.; ?7ã.H* ã.ØX4tJu ó!" 0* Ju X. Ju† §ÆÞJupJuolåJu  JupJu/pJuoøQJulJu_àJu "¼‡ØîtÈJu Ju/!Ju/QJuSpž xÇ" 0¸ÿJuû/hÞ ÿßÈ *Up<,6 `j /±Ì\/øþ¼+/¼·0`!q`·0W·þÿ ++ÂK!?@r·0Igœêv%òêvœêv? 6í5÷{/Yâgœ+1_Âgœ+1 :+1wžw Ô‡G¤Ôí¢ÔŽÔÿÿÿ³Ôÿ:¢Ô¢Ô¢Ô?¦6L8·~/Ô¢Ô¢Ô¢Ô¤Ô¦ÔÔ¯‰ªÀ°Bg¬²óÔxgª  ¼¼+àž'°ÇFRžå[,&À ¢!°›ÇF,!ž.,ažå´d /Td*N+GÓ^ãp ++^ã"¬ ‘ÛÖ©ÚÆòÖbpŠå0ÿ=/ ,*U`"pfƒRƒ@ šå§-” ”8é” ””8/}”,ÒïÐ4 ¹–tp’ p2ÈŸÈ„. X¿‘áy áyqáy dáyU·ÖË0>íy ·Ö- ÷0 ˜ð¿ € ?1" í?1_ „å ¿ðÙzÌ(»(WÕ ýyˆz^hÿÿꦨ X"/ÕX 0¼)ë1&ž¾ Ràžå®þë1¬DH6 ÈðÐ#t0Bg¨  p "ÂÜòÒÜèI@ZÐÊØàÊä@D]ß…z ++MÜK6@@G7 ò!â" ÿMWH ++ «2m{4 xÿML.LÞ"Ã2¤7ÀÞ"P“å \cØ Þ"Þ"0Þ"SlþNóÖÒ"P0 ãõì°<[ìC0“åêæò\Ô»D Ï3(l ª"Ó3ŸÿM÷M¨¢"(PòM“"FRg¨“"pb8ÂgÜíì&CBg¨#êbr gª°p ++$pµÇ²áhÐòHí3¤ ++þ3±/ ++8îò#g¬V#`yƒ*8æ ++ æ ++ ç ++Õ/_hBg°ç ++Õ®ç ++ÿÿÿÿÿÿ))2K1®h + K-3JK®K®K/)0KK®K ++°KêK0K1Hj_ÐBg¶JÕd´ àJTTãWíÔ@“-àù ù žá  ù ù R°Â °RRd /*d'$dRQR%´ *DVõádé< „[ðe«–ýá9 }Û^   y5y5y5 üó“‚ Q5çVŸ ãåÿÿêäàH ++ ­8S 1‘œ$›’_”ÿÿêvF²"F§@þ.8?5Czg²¬±tâg´x¬²r "g´¸^ x˜¦ˆ€Fp¡G ++; ++zg´ ++@; ++¶; ++(† ‡‡#‘ú‡º= ++Õ¸= ++ÿÿÿÿÿ}))2o†4¸x熸†¸†/)0†0¸† ++º†Ác=/ Â#•*ó$ÄNc¸…0AAÇ,_†å·,ê·, É·, з,h Xݨ¹¿,# ™ZŽUJE ++4ÿ4ÿ’ÿã©!c,4ÿÝ4ÿ00 ãÃ*üΪ÷ª÷ª÷D `Šåc" …$+ ’!$$$ÿ Ñ#0 T/X[øyXTÁ@&V-—ቴjø ++xzT} ƒå pƒPkL4TŒ$FŠTBT_9:fT +h/ 0ð®TNƒå ôY^ù`„å àšå~TP„bù?„åuéBTÛˆ À³¥Žxp±+oS)€’åã¨àó/0^ãKÀðà‘åàâ^ãG$ ñAá áÀ ãœÃàÀSá+0ã';,jd#°$ó-`€5p–ÿ-€@ ã ð–匙û," p¾¬ðZW^@ƒåëþ ñï! äþ ¨, .9Ÿ.¤¾\"ÍþOËþÿê`/™¦ÌsŸþÿê<ªÉô ¨Bg¾ °g¼ï 7' ã“Ëx›þ1ãrãZ-lŸ {b›.çÿe '—6&­ï“ï¥ï¡ïxï¡ ãîÂàÎRÁ\‚0 IÔHp‘âGj;Orÿÿê³×Û¡X/é`‹¤ &ÀàGK<˜è}è³× ˆ¾2h~èå~è*L¤ +-DhLœ$/œœÉœœeÞÀ qÜþÿê8J÷i ¥¦`°?`(–£`9RXÏ à£~ PQtg¾ ++0 b±1¾.‡1p#6SxBg¾, p½ü ÀKþnPgÀ ++0ª?ÈFpB4H2$CJgÂÓ`C2AªgÄ“ ÿL@æèäÒÜÎZÆÞàò[ #—‚":ÈàÕhÆ #ÏÜo- ¹p'0 / › /n/ &h/ 7^‡ [I ++~8"pÈŸ 7ÅÄ(S+ȶ<°šål ¶ðp «5$O#$O° Ý`ùÃ$èHŒ°‚å ‚åcÚ (¯ÂL0L" 0@¯°­h3àŒäŒœ¼ÞÀ†å° á À—åp˜ä_p†å°_v  È#à‹ ‹ e Cp†å P T X˜VÀ†åpHüAH`xÔ.8.8' í8\ ++ ¸ `à€å"î<Y€å €Àq à€å0€ Lp á;ôMǪ);  ++Þ¿&˸¡@4Û (ƒ(l]kL74 c ø°ä/Ýä ¢— D›þÿê &•þ–?O’þÿø '—'PSã@U€4†p /q0/ÙDU ‚;. lG T ¼  áâ á0Žâœ0—+ ˜ Ð8  ¸@|  îÛÉpÎ> ++´0´/‘´O0šåzü &sÿ´8C0›åeÏc”vó =Y²gÆD= ’ß ++8¨Û)9€ˆü ++ ˜@`V>*ä9Î7”8Ž=P7ppÐ ++. )q(‚gÆáLUH ¢ ª=RÒgÆ8 “3 •'P%!Úû+hÐ/ ++` ++k%#:kÈ3h £ èäêÜÆÂèʧ ¯™²À`BgÊ0vBgЀ|ÅdÎ °Ç XTã§Oè ˜ y˜!š”„Ž#!éJë5ëž  >% ëuû"àx“ º${  D ‹*]“ 77 áK/€à ++´  û/Å“O šå¶û¯Ê$7gÒ|ò, BgÌ 9ˆ ÈÞZÚÂÖÊZ[  Ê "ù /{Ò.uÊ "kË/XËû² /¹²";²ÎÃÆ þH—l-:Î ++ ; à!y ++1à 1àî!(%) -15H3 ã9=:AàF#p9 Ñ!5"Ëy. q.åaYâ ƒ0/Ô0Ö/Ææ  Ò `÷%šåè> )> ?[ì¹f#äµ.@Š:JN#‹JÞ‚å 0‚å0—å °þ |ì°N :j"T ++#j „G˜0˜08 ÈÈî‹å ‹å —åÀ8/ ++°ò"BèB 8/Û¼°Ä17¶^Pì§ä&Ø Ò ™¸/ƒ^%^tl0~ö ~ _¾ ¶ L¶ Ÿs/ à”8< & Àˆ<$< Ø<: >  Õ>Á­’ šæ…v`æR^C5<d((.éþd.Úþ,É(.²þd¥(”(}dn6]P3%<OÌýÿêS ++ / ++N.•ýx&ŽýY!"ˆý Qþ1…ýÿŒQDƒýÿº4"@œzO~ýÿÊH ++ ìæÕ/ — ±1#‹âàŽâ δz , Œ¢p · Nô ++ ù&/­ Jyng&À· ,N®i®4R® @®$/-° À° 1 °< ++"ÀP8 ++H9? "À0"¸# íò0€å @€å " Ì› ¹§¾/ì; ,W@Eú  /_+Ô$g”C0’åVuÿÿê¸RN@N@šgÌåðÞP ++èæÒôÊ07†Àèæèä(#ìB`cB! Xd 00Ð@b0 ¦ î+¨å€°ö€º@%. ++@ÿ{ (EŠÌûHQ)2gÌ?(ûä8) /‚í€ã!˜ÂP!X--' ++ 3%9J£"H'g ++gΈ•¨5Î S&gÌB‹u¢gÎ ++0<–Ðug@gØ"/8st#Ÿû4iÖ xD(lD‰ D<î<±<Ø <hÔ  È<ZónÔF@›'  ›'~9Lß%Yß%ðy¿* ã!à›%›%ù0‰U@×ÿÿ ++(…( 9Û‘<€§<w0’x`xx8x“| /uì°€OÕÿÿ ++â;ì ++â;‘ÿàâ^ãöq\0 á ÍàÁàƒ/]è‹Ÿ0 jC@Xú$`8gÒ ã¿(¿R ++gÔ·'H-G.è-ÉD~ ÒgÔ8CzgÖN0gØjò9#¡%Ü%ÕhÚ 0% ×%×Ö$Ö$,/‰/æÖ$CŸÄúsè ú,´>$ Œ @Ÿ$À€HŽ” ÞŽ-œ/œP  hœWAKÀ8˜J˜˜¯< d '—É¿•°·SÂ#.ýÂ#_ Šâ ø^$ -,0ì  9 +0„,­2í0¯0¢(‘(z(k\Zx Ë69íº#/…º#é4wâþÿê>¢# Z:gÚÝ €Å e&h^¡7ä8/|Ý -8C^_"gÚ. ++Ü. Ñ+OÌÒØØ* /£B* $â* Åà* ÿØä²* „Þ 3X * "Ìð‰<, , , , ò , )Õò-.-‘< /e.t²T ä¡Œm0‚å °‚°/”p †å`Šåê|tè½7tX Öãä.º.j8"Yä¯0å å pJpT3p#"< ++°P œ ˜ ˜þì<"= à˜íÆ7 á0—å8/Þ83/Ç8/¶8 /©¨ ˜’ >¼" \ ++„´hnØ$_$,J$ ˜7$  ’D/ ä08ä!ä) L äÂÐ.¯ÿTš‹.uÿ4 g(P ä2(( û.äþP×(Æ(.¯þd ¼Pe(X/Gþ”7uâ-û”ô”î”ë”é”ä”ÿ-/ ++”c ”¸/Y ”ÿ/ ”7¨”™ÞHèÌðìX¨P?˜?¨¨€p{OOv ++@c{Þc_#gÞc/Ovc )R¼cB%3£càcàcÞcàc ++âc9ê[e#§¢eèe½æeÀeÿnve_xx7e¬ÒzaÂaYaŒa äaÞaæaà-aOÊgæaèaêa#©¢aîaÕìaÿÿÿÿ¨ìaìaa{ìa ++îa¯ c.«Òcc _øBgöbÅôbÿØøbfð  /°Œ>`!áVLÛVLÑ ¾``$¡`°`7`"O°šåÔ=~| ç#m<^°ƒå QX`Ð= `œHœ7œ *œ P ü°ü0t> ¡t>"°ÝZÌ Ÿ ‚ð‚̰̾ Ì , Ç ÌE/pÌ_¸<<6²M @Ë #Ð  ¿  v¡Ð/ 0Ì Ì Xê¤ÖÃÌA » ÌB ð x.ûþ(Ï? ±<™(Œ{8/¥ /x&(þ„&"þ"þ.þ/þëåÔÇ Á³ ¡@ /E 7x. ðhð Oƒ1 áŒµ/… ++Œ§W/ïŒX@FN /­ ó ,Ô%ŒŒ_ÿÿ꜌oðHgò‰Hy¡°@<q1xq ¦OOê ++@_ið__bgð_/ê_ %²­_<%/r£_ô_ô_ð_ô_ ++ö_þÂ;]j ±Â;ü]½hú @r÷“~ˆ7 ñYpññ0±kS(ƒp!PÕHZáîàõLàšåå`àaEòàaùa˜/˜qS°ÿÿ ++»Ž90 7Ï–?žåÏ–Ï– ”R”6” ++tt“t “t åtˆø›.ðV/é¤0øø½n +AXÅV¨W“ÿÿ ++ž$7‰Qgø“ð9Sgú°a ¢ X7“¤è™ð3 ê'‚“# š?j“ªüªþè¸#³ ++›©$J›1€åJ›gägÙgÎgxi  1 geµš "š [õ ++.ë& n/ à3n ++ºR ++}à†å`Šª ±+ñÜd ò/ c.=cleR/¢R5#‘R^ƒå R/„R_`Šåœlœ[œ /NŠ# h7˜ 0˜*&S_ 0—åb/\b# p.ôy ïSÒ/âS O  á£pÊ’2U¹:4.U/¬4.Uœ”œƒœ vœ .H_˜Çn0ÇnQ ƒå¨ƒn/J°^ 87æ5Qà‹å <1‹åš2‹È$pþ†²QÜw–T x° y"Êü˜_ °8é& 0ØÖ $È€¦T„¹N&@B ¨« h•z¶†lÆ@¶deqŽ !p†Ö <]<tÎIÌ p8* ò°</"ð¾5†òL ++a#'îØz,p Y#ïB×* Š°œˆsdN@•#1#<d.ýþê.ÕþP¯žš(ƒv<e(M@<./þ< ++(.ùý(.âý0Ó6.ÂýP«(ž<u(hW"ýh d .E d .úüPðóüÿꬺø •„0ú ã( ++èZÒÈð8BMŽ  XPXDQ& ++%e:˜=exe ”ì2OäP¦ê«x3 ê(6ö ++P”ÅS1¢i“-ˆÝCÊiÝAˆ&H(dÊâÐÂæÐ/ï#µbïó¿Ìi 8×8&9ØÓm$çƒ Ü*ï´áS ° ‰"/ýï ì0’|&Üy?Ž|/ Ö~·TL¶  °/¡}Cq €å °€à.°˜•#³ /p; q"®~,p‡è‡ C {p 9CD.cp¼&ì…"+ wpIà€å³l ³…"Ó“ ƶ<¥(Ï .xÿ?iX5_.+ÿ7  (ü ", / ,.ÇþxxÀþÿêJšäI*iK ++: €?B°km) |** þ[n”@I&y„2Ii„2i ++(>Ã%i>ÃÿHÆÞÜèÒÜêÂèÒÞÜ~p·{x/iž»H Ø\›04 w0}O‰,8{îfbŠ€Õ ++#i¸984¸ßZæèÂÆÖZØÊÜÎèÐÄ¹Ä ++Äÿ <Ä7 ++Ä6ÄÆÅ»Åù ++Í_  Ðõ ++Çf'´µO —åù¨ñ D0†å\ñ± ++“ÁÔ ++‚ü‚ u± ++!¾'Õ /]Õ 'MÕ <?<<* 0õ å g‰­ 4€4¹ /0­  ÐÝ… Ïoºÿÿêî ++'„‰ w'fQ`q4/Aq49èf,<,Âõ˜ @J Pâi ç€ý³‚HŠ% T%_ ši µ ++µ29¿äÊèêäÜZÆÞÈÊ7½È=/i7˺šè4O˜Ø^  áDw¸x x1/ààxôˆ= C $ôˆÆ ¶ôˆ ½‚(lÜA‚'G9€x]+§¤P†2262oÞÌÌæÊè4#¿Â40 ¾(ˆ$,1 !$Du 0è?$ìîtØtt',” ” :)ØÒìÊÚÂæÖ+Á++¿€ D++ ++'"#œ ·˜ 'ˆ''.» ب! ++Ã!· Í· ˜°“œ/²°?/—°‹× à z°j°\£%.p— êp3ý:í[`pË&`V ÓôÆ ê èß<(_nÿÿêžüD\/=\;p“œ0àÒ,/þj_ , ±/'8†_ ’iÑ ++†ÏÌÞäÊÒÎÜZÆÐÂä†#ÅâFg¾(X3Fg ï;2 *0š {Ó¾ #_0„å ¾  ¾ Ï”O?‚Ýü ++ü­î®Ç®,° A,° %B ++Þ · K_ ++· »,· ),· ,· ++.· /h`· #Ó²· 2· Ù0· ÿÿÿÿÿÿÿÿÿÿ>0· A0· (/ÿ¸ T/¹ ¼0¹ )0¹ 0¹ ++2¹ 5#ÕÒ¹ 6¹ Ù4¹ ÿÿÿÿÿÿÿÿÿÿ>4¹ A4¹ (/ÿº U/ » ½4» )4» 4» ++6» jØ<#×ò» :» Ù8» ÿÿÿÿÿÿÿÿÿÿ>8» A8» (/ÿ¼ V/½ ¾8½ )8½ 8½ ++:½ l˜DÛP<`¿ ùm66YÈe ++Yˆ÷òzn ‚aXBeØX<ØXPi@ÑX#Z|UQÝQohl‰æLã÷a†å†1à†& æLë÷ÑTˆ ë÷Îë÷i>  ++0 •y•yöL$êöLÀhÝ^L'ÌÚ °ˆm/¿Ö # h.¨Ò ºœ —Æ\ć\"MMyyMy/ °ê`P"°PƒJ â "àF ¼Ix¤" ;º p º Pœƒ / í’M” ¶ Z—¶ ² ò Ê íÞ ׎ ¾œƒ™€\rPb(Q(.:ÿ ++-_ÿÿêñ1b,/‰!è> ]áþÿê@ªM> ++b "b?,XIbN ++ØÍ Ã i@Ö ä>âÁ , ++h­# àMÜH pñbºiB8H ?i@ì#ß2ìD§Ã§pâiiø_ɉo‘øÿ+ ¨š ++OT % ++ Ƀ 7 ++CŠiD7 ++1H ++4 ++@áWF@Ç MoÝûLÿ|—Lhz_Ò©T?_ÔG2FGÊ|PO#ãROJOÀO1‰ { K o†åpw éw Íw Ïw hH  ++®3ó(²ç’Ñ ®*O täf ++ ++¯“£w'– ÚšHpŠå0¤ }#—}§&5¼v³HB hBI˜Ð~iHh  C²iJ  ¿HÄÞÞØÊÂÜzååŠNáLÿ°LNæòÚÄÞØç•ZP€ Æ€ Lù0 @X ±|±|t­ƒ|Ç ¡¹So’¼{ÿóPóÿ&äÊÆÞäÈZèòàÊZÞàÂâêÊÈéø„RÈÿÿ) È&RÈoæÊÂØÊÈÈëuRTÈÿÿ)È&TÈ.ÈŸÎÊÜÊäÂèÒì”íU…o@Bi^ÍÃ0iXàÀÐØ”¨D¨±‡/m±‡éé ++Y ©ÈC Ç,«‘Æ $©$©Æ,«ýÅ´1à‘?¯ö»ºu!* ‘¿×& À¨ñÆñÆ) Me¥#0Í |¨µÚÿÿ ++àåÈ ý ˜ÿ- ÙB¼Gšå¨lòjBiV ð ÄêÒØÈZ(4~$¼Ú”ÚÚ Ú qÚdo—Ø» kÃùáFà+6à+ k(à+ o `Šå 0¬÷P- P- H½l Ý F h/Þh/Íh/½h/¯hT_°—å P–P'0à¨*# †m´ +˜/p:§ cŠ$ HL‚ ++|*T2¥dl˜++aëÄL+„øx- xL+Ž Ǽ÷ ––‰(x(c2Jñ<ò,(F*.éþm Ñ*.Ãþ|³(.¢þT*Ê%/i‰l£8bzÊo ++iVh<*= â=y*€ ++ ž¶†I I¼);Ç$@·)Åm)ëp) i(úiV])YêiVüµ@òiX[*â.˜BiZ /˜ &è"êÜÎ ZZÒæÂ~Äæ5çæ5.Ô<¯Ê.5<¯=<¯Æ,rj\í0Dp áÊ,¢4$pʺ¢4t«´¢4"¢4¹Í²6.pl4pÏ t *â&¹*ât@Z:â p.0Ö/K€&/:€&c'*Nã^‚å 3/· ”­ V7+0&ó÷^ "p/é /ÒX/ÁX±ÈX£È $– ++Â6‹L0h'* P®>Ü® `@. è.c( $#UÊÅžpå åÀ/GjuxL p/6767 œÀ dú63àŒ€¯ŒÊ4Œç®5 . ++€ÈÐH Hd ȹ”­ NÅd¦®Æ52 ’¼$<* zL L &bÜ–æ àSt'0à*7Ťª > Î 0ô® Ø* <Ê Ê 0Ê =p…Òk€µ&é ++8F7ݪ É»¾ ¦¯—gSx@¤+)7(ÿ27è.Ûþ<Ê.²þ´¤–ƒndVn H<8('P(.ôý<.Ýý(.ÏýŒ¿(®b7  ê /¸®Ð ++ÒA ½"ÄÌ ++.ýB ýÿꪪÀ®W¨@¼®0f7R²iZ< X< š€. X< ð[-0 ++h[®/®7 ˜-¸®8"X” 3X›®¥®‰ U7@7@5€ÈdÄH· . ++0e “r(ŠiZE ¢ ÄC’iZ´ÄJ€if ²ÈÊæÆäÒàèÞä~mÜÒhBi\ ¨ ")'Û ++/õÛ±DÔ±ÙÛl Û Û é$p·ÝÉO /ª÷ /™Ï3*‰ð±Ð/{E#%Ï3b[ p[ /Mà ?Š?2Ô0H‡ / ƒÅ¡Ò¢Â0 ákYÞ}W£ ¬÷—.~ÿ£p}`(_Oÿÿê¾U/íàÚ/AàÚöñwïþÿê<‚Š÷«\àÚ úJpir]?itÌ (p°ùØÚ$Rši\0ÉyŸá_ÊiX—^BÉCijr.8Š›æ"ñ’>É/ibä<»i` à]@jBW??`8Z<bÂ0äläætÄ!#óšÄhN ÅdN ðN a_N F  F cæ6 —«>í‰O) ++F )EF õÏ€N ?N  ¤ÔM R Âd»f U1d@sÉCifw ++€xBi\0BÅ ++ˆÎOÒidˆÎ $ihF_ij0{Î#õª”&n=½Xl ð/p/q¯/çE\ªOúilEnwšf Hb(÷΄k¢Íop H†AÛÈk¢@­|Žº0º@"€@"k¢rG ²A/°—øŽY@" PŽPŽPŽ@"4PŽF¯¢ ã Æ(µ( Ï .‡ÿ? yi(º-<Ž,•<Ž%p]ÿÿê4’@`p`irty JJði‚ ++ÊâZÐè0ÒÆÎêêpÚØÐÚbònòîæÂÒäðÆÖZ`P¬)ô |Ðè$ÄêpbbôdÞÜÌrÞlèÌÆZl 0xvÀ^èÂÄØÊ'GÖ ‚/ñ ++Ü  ++ !iv 0 L-1ix=0=piz ++5 âi~ìÊÆ ‘€ ÚÒÜØÊÜ"4!ô *i|i8i? m ++6i~h?i€` PæêÄ:2sPi‚à©5 ÃAtBip ++(2C¤„0Xë”#ùʈd Åo† à.¨Á* $/þÁ* ñàÐ>? ñ/ÂÁ*#. 0LÁ*DÁ* l p ++íÁ*„Á*Jwlfl³HV»· I$`® «˜)/=)h ¡°E£(“(íT‹)).Oÿó7T)¸(/ÿ))7/áÒ8ˆ€)), ==˜ )@>p)è(3 †é(Úi† ++(ˆø3ÎÊÜæòÚ5#ûÚ5œ ½UŠ #á²PTãS¶T!TA]EBZ/!EIï E™EZ >L Då˜>xM/làö +/Ih¾ ƒE&À0Ðu"¿@+H0µ&- 8+ í@+é"à–!(%) -1"5àÔ¾9=A¸O 肸DB@p†å$)- œ"q5÷8„pƒå ƒåd÷8/ œb_  (TŠD/E¢]0¢]ƒp‹å ‹å4ž]D/ˆ P&ˆ *@D/i#0à~peA N€åÀDˆ À°)@L'îL(`L(; @ŒÄ&,ŒåDØÔÕ °'.°ˆ/ÂÜ× D0D¬P( Á8™| F3. DƒÌ( 0|p8 °8]} `} +‚¸îïG´$4| || À|\ "êÙ ‰ ++ £<îù Ûå Å(²(œ‰± ++v`ô'M7!  (.öþjàÊ.´þb_ˆwbDþÿêÀ  &µ OÀšå0Px)þÿêxÊý ++PZiŠ· ’Ž +8I@Å:&".Š€§0Œ/M=`Š7/=‹#ƒØË;Þ/(¯ ‡,x/7 0½Ãà'74 àê3Dàv à·o  ‹â h§[ '#€k €@/’ãÄT @}c  c -ñ×  _  S@D@$@>@W Û0/)[á ¨=`Šd/W (DýÅñ`Åñ+Hœ10àŠ*4àw7" pÑù,¿¢ü,,¿S8pÑù õñϤ 0¤  ++Z- . p˜/¤k1ƒå(Nƒå @ # k2N‚å p /|øW2 „ec c eô 8€<>Ÿ c9=pšë1hµpÅità . íÅi    Ÿ2_2.íÿ‹Ù/ ++»eô g ”(}ÑU<*.üþ.æþC ++л¦.‘þ­|· gRB.þ.ùý(ä¿1Ñ5i ¬y§1˜&=i$#cXñ\ýÿêšÞP¨Œ1%ðçeÐ4RJ è)¨/ ép   oä ¿È/Joä.ÞÿüÐ @!Ê€àdb‹à‹à–?hjàõ`ïàpd2 ++72Ptù?iww0w€x†7i’Q3<P”pk–µ@@Vì %cÄ„ñ'˜='8'H4 Vt-š˜k iŒ ÛPãd€äˆ˜k, ++`w=)Q+2iŽ(ã÷@TªiŠ4 ù?iä hÐ ++ˆ‘Si’H ++”â4i–U˜dxš« ++°úWV9 #‚9æ0Ó)œrk2¢ |{ý{ {½hž !Ð{={5Žø%b0âS¨.b0åS¨.! À.¨.!0“¨.S¨.¨.øaàå0PîNÿàžåàâ^ãòÿÿŒ/2íŒ/ S#ÿÿÿÿÿÿÿ0]#0nbÿM‚BiŽH¨ oòiž°ù ÿÿ_!Òižù ++ ù ?i¢ñ ÿñ ¦¡. ñ -ñ ¡.j‡ý ëý e 7 Áb‡Ó ¤ÝðÂ5; (Ýð@ nY#0^‡!pš4f é-üÍ0Ío0‚å ‚é- ++a:¬ P-í-Õí-CȤC ·C§\\w ™’5$õð n6#°†™) ++El5.  €Z6. p€W@1 i „a /pñCõ0°1Üw%0P5/ q/)/„¹)/ 5 Èwáª6Ⱥ¢©xÝCRdB(Pû/7î1/ý ++X8åðÅÁ]¾þÿêFá.<¤€ ‚ ‚p».xJ ùB àÜw€ Žæ·Å2B ZJ.˜#JÊW'Ê.¤Ê.SBi¤Ê.Pcši¦0Ê.kZ|æèäÒÜÎe3êe¨•tÿÿ™ ÍGɈf$f¨,2¿HÌðÂÈÈäÊææ^#ú^¬ÏÕªÏÇ ++Ò/2¿/2Ï%.¤Ç ++¡´”‰?ƒ‰? võ÷ #  # ‰# M OO' _ ++øE‡sRŠå°k\O3 ðt9oU‡snšå°(%*Ü Œ#ø ¨}@£ /•£ …âqÏ×ð @ƒW ví_eÿÿê«÷€,qe@.Ä'(ã0ª€sì ßð- ³:iªR3L"«f,ˆñ£7 Ë>_ úiªnÎ ++¬G¯HæÊèZèÒÚƒ‡ ++ñd#*d®»uÔ‰áÊ?½,Ì t®tð(ÈÒäÊÆèÞäòZæÊàÂäÂÒT` `´x½h² HJdMH@KM1ø0Pº0M<'T? á;:+áüxŒ™  ‹ïx0‹ï(M(MOšåĽ8KqZ´ip°³€ ÂÈÈZÆÈäæ‚W Pšî ++B¡ˆ'0à,pI@@â_ é^î*"L/¹"LPÕÿÿꎚîJühìEŠi°Ù%güXai² ++0´/+Ìø ø¸ø½¶Ñøø:h" ˆ øøø0ø7Sã!øø@Ê@[>ã`d"à\å^à\æHPTøBi°3Oâi¶K¸K/e¶KØ *À8"ÚÂÖÊZ±G¯BiÀ {{ ÃA"î”aì}a µaè}ÖŒ¾~°T@w/Gé"p#ƒôƒdƒda0.(\gM9€9¨„œ?„å$ êýÚɇY ++Á #u#uR ãàŠÝ]/pøq1Õµ"pôæ’’/ˆµ ghiÂ1@XN4iºQŸ! FñpBi¼  ø ÎÞb F Ÿ§‡P§p+'W§!§PŸ’Ÿŧ‘’åà€á££ª£µ£ aXr"0]&û% Vç!rB á ã@ @a@ K3a†Ào&#@ƒæ3 ã Ÿx yv ÷5=<À@Î +ò  Ö 4Ú¸ îÜ <¼î˜(Xr OXÒGXa³^CXK`Dê1*JžW@ðEp.HÉrZæÒôÊZ|©O¹Wt(9RXüG;¦XøOPiºGï w Úi¼ ++0Ép~Âi¾@"@‚iÀ¥/L«â«,«OîÊÂÖ°Æ°ÅÄ°ÿg°kchi¤’gpBi¼zÄzÆz!šz6% àÐÊÚÊäÞÜÊÅÈÿgk%ÈÊO‘ЫØ_4__êw_ŸÊž¯/àæBŽ /Ù/aBŽ̇hÌ  -  ÌCa1TãmR˜àS}0žå °žû[ ° /0(\'p“R%6lê—+# ÓÎ&ÇhÝë-Ð_õ%žw<b0 á°SÌ PN)=N)b  á°làåpž7l ++&Mt‡"7l" s.°þy£lAh Âzµ ¯"üjz jzà . ¤ë¤ ¤~y@Ô:V;" `€9žü_  ã$¼"üL]"$@$ JâÛd@¹PP åPò{SWã–6XO0žåsmØ`öu/@Rm JucX :) $H´/ 0$:°;Z,_(è$ ³¯*€àÚuL€X÷Ck@ª}O áƒCÛóÍh¿±£¬Œöusm×"Ä ã šå  ŠâäÀ¢ü Q  Jâ[ì? áVÌ%|ˆî~t-È°T*-TÄÌ.°þA©þÿêtó#ê8×r¦ ¸&±ÀüS¼ d r. d¬ø 7LŒ± ø"`j• ¤à¨ #D Òxp×i_yTP ø›i PøWø ÐLÈ` >/ h.h hh h»G ç»G (ËÏj <­ü_ šåüxB— ++àšü•Tdüó6ÃS$«. ;³ „pÿÿꌺ¿ / ú¤ 1iÎý¤áiÒàêèZÄòèÊì‰!~Gå 'ˆéqw ÂiÌP°$ ’ˆ@ÈQä¶%¼¿x øó$ ˆ¼PëCoÎpã-!!€6 §\T ‚iÌŽw% ² ê-SriÌtCh¯% ŠÞ‹.ÀÍ@Þ  ~ðá/ ++@É Ù%%-µ.€®™bÊiÐ8Ù%?i҉ߖ؉íÔ‰ÿÿÿÿÿÿÿÿÿÿÿ>Ö‰:Ú&‰ŸZæÞÚÊGŽ%ÔŽÔŽAÖŽ>ÔŽÔŽÔŽÔŽDÖŽ1ÔŽ ++ØŽÚŽcçàŽíÜŽÿÿÿÿÿÿÿÿÿÿÿ>ÞŽ0⎲IOG…%Ü…Ü…Þ…Þ…&Þ…>Ü…Ü…Ü…Ü…Þ…Þ…)Þ…1Ü… ++à…â…#â…è…íä…ÿÿÿÿÿÿÿÿÿÿÿ>æ…6ê…”Š%äŠäŠAæŠ>äŠäŠäŠäŠDæŠ1äŠ ++èŠêŠ!ŠðØî5Åìmb…=ÖéO ++õŽ*ä!0€Æþ_€ ãç»ff ÑOÑ\Qšj¨D]ô ++ YÔ?ìH Yî Ya0HäÊÂÈ©SïZæèÂÚàZÆÞêÜèÊäI#"Iò›™Í_ð †’ O i IÌ°¡rBk8 !Ž‡Kkf)°Ä" Ä¢ ++0—åÀ-Àrû:†ZnƒÀ†åà ãÏ ++´1àŠƒn àŠåÀmãì»ú~" 0™² LD_$àŠåLÎŒH‚* àL 8»Âqp?Ÿ %Ï[°O7 ·L›ŸL` ++À·L\·L·L—“o³ ++bà›å¸Â1 ›Wík 1 ŠU¸#J`ç ùæ[ÂBQšå¸0šå/J`û @Ûÿÿ ++O ¨mè W°†å(ð à»M^aI’ 0QÅ ++$ $<¤pèpH3Qã ++H<l`&ÎR!‘fpQpD WDQD'D!D ÌL*¬& lÚDcN’\˜m ËMÃM'OQP^ãÜ:vß’åàžå^ãØÿÿí ”Qå0É´´0í |“L^ãäÿÿ ++«8 ++”9Ï”‘( .vÁØØ2v§k€2v€2v€.t!(%) -135à€2v€2v€2v€ .[#†$‘Žâ`åp,°™å U*„ï*°Kâ,°‰å‹å„n p ‡¡½‡‡¬#0þHp·+=0þH-pš(Fß Il'VïCòp‚å@‚åü ð„|Á„‹| a L_ „å öºxz°Lpq €å 0€ Q}`šåð‚`oôÿÿê¬àqi³Z`‹›|‹m«î8ÿÿêÐ^ã1ÿÿ ++Âþ ++s.Œþ¿>(+AþýÿêRI¤¹¿ ++ô“^I àNƒ.Ùýœ ö\BBk.  ++#piô ÜÊðè„ 'göVŠå0#à+„Ê'̑̃T ̸ ++?p“„ÊÌO‘å0[Ý[0W´?áÿÿ¼-¼'¼T|†åà†â“¨B<Ö< /< SÁÿÿ ++ P siPL½ “å“åp“l8 8%šåõ½@oó< p<  ++$< 8 ÿepåà“8 ?p“8 2Î8 À8 ” 8 ‹8 $08 ƒ8 {8 ^0‹å08 m–Ž ++8 ¬è„8 .™>P„ Ž8 j£8 8 4 /4 ô+ }4 n,94 n2ÿÿ ++Ãþ4²{|/•|.ãýô ÜÔ3lŠÑÉ¢k 5ðiôÒvr\ƒ"RÎO; ++j /„j&~jòàœåàŠå œå œåpx ¾4“"°“íYp†å0ââ+ “¾Rââ$¬â ' èb“ÈfâàffèbD WDQD'D!Dâ /0âI“â“â&1àœâ°?pœÖâ“â“â“â² / â# †$â‚â ! ‹Œqâ-â Ê  *©æâ  âàX#Vï‰`ø†1@ƒj/ 0â/)â 0â0â ¥ âÜ–0â_0€å â( bâ n=!âR ++`þÿ  h@ã9caqâŽj´‚_°Šå 0+É–Àšå°šå 0† Ldþÿ ++d8kB # °> \p†å > \ÿÿÿÂ/ \k/… \ÿ8Ž? ã@+ @® DYL‰X/a ˜ .®üøq§üÿꘂ1g@H²‡òÞ0Biþ  8;ŽÓcî “å“åp“å°é¡& £q+O0p á1 éÙžµk((Á. o 0Æ+¯!ý/#nh"p’ U y…¥¥HnHhH(H"H?0“å9m™©Ú=5 àž­Õˬ'I‡?p“I,/),¬'БWÐÿÿ ++“••Âà ìvËãÝg%ʺm­¡„­ $­W³&­ 4ì… Q³&­1/0l )•l† ­|­- ­­°Ä/íÄ#X_ÿÿ ++cé¡0Rú;–Ÿõxeü  ++H;ÄgÔ×—Иÿ0×;Sá ( (GR—åÏ ¦"O±O G§G”GrG#0†$2b2#¶*ÔÑ 8È0µ;Ò”B“{$—åó¶ /Q÷´ €·ã–)ÃRH-©˜‚yÿÿê*‚Ãôú  0k äÐæÕu[⛧„§Ñ9¾$: à›K A^á^Ýu ;â®óá á ’"+Ù9{׺9GÞ9>vÙt¹:)7T@­:<T•#Vï5>p× ïXÛ:ÎÀÂ$d š¥5˜î$Ñ9 °À Š! ¨ehó^ÿÿê$ª5ˆ 568|(|iø~ L`Biö[.žð;²€;¨)–´(~(iø ++03£`8 iú ++8`4x—!;ªx—r˜Biú_!X„ÊŒ…—*½  ,  ++ƒÂ ²7 9%‚]h9\—mÚ±;¶8 Êiü ++€¨|†-¬ 6(³/Sjiüà2Piþ04. ++¸3ð!8k ++ *êÜÊðàÊÆèÊÈ@ÞàÊäÂÜÈ@üæ(k ÆÞÊäƹ÷øÜȸBk  ÈÒJƒ<&ÉÒ¶y ¬2”L/y wy $y gy ½ZÔ  ++½‚‚)  µnc/0E¾/í2´ ¥´‘ ŸF‘‚@M…2 E2O0šå7X0=9(².5MAX;¨7Òü»Â/k; A 4 ¢<MYHB;Æ4 jS+˜6Ýök   ÒÚÚZ|ÒÚÚ½ Ç'-0’‰ Ç'ï$éòFH®$¨( ø70q¦”Y¦Mq¦Gq¦D O®< ½ïŸ} x<âC?@Š¸:+-¸:O@šå¹Áw×( Ü$  *nÏ0’å<àâ ^ãB¸$¸¬PPSãy-0’” ++PæJ.Ðþ;_ñÿÿêX XºXSÐSãX. \ \ÐeŒ.¢þ_ð% À4hjgqÅ0;Àˆ;Ĩ(¥€;ÈH þ ++±@ûÔ ++ üæ @Äêè@ÎÞè` L(ê ŠŒà´kB ++0_>PArk>1(@"Wk "u ˜ê::X˜ 7 $#IÚäÊÌ• k5pÐP)kI>k5Bx;ÎkASp;° cxAÌ ++Hµ *' ‚A¨äÒìZ”ŒB;¨po_Riþo$ ò<oˆ ¥ ˆ$ ++°É ++É † õ)† ÿÿÿ†þ† † († /Ày <k£þ8zkŒ‘c B7¨TàÔ uk  ++Ø™&ÆQQÆQ@ ++0—å™&x . ( —dƒ6_5˜Ô¬aà—å ž)"î)oìjp¡iïB)¾ÿÿ ++—åD­D œ1Aç;1%¥%% %/i%_/Ý%ÿ •&t!̦¸çF §.¯þ”¨§zÈòkLÜÊÎÂèÊZÌêÜÖòbd L0k" ,ÆÂÜÜÞè@Äk@üæ@èÞM O ++éÑPBk ˆ Â\É¢¸ 'Ñ!a¨9™H!à±ÜÉ!­»­|@qâ¹j& ++¯æ «Iÿõ/=I[­I J‹@€Xâ ÏYl+l1šå!8*Qª¢m7LBc°k ,üæ@Òæ@/ÈÂÜ@ÒÚÚÊÈÒÂèÊ,Uo˜;°@xdxQrkà 7( ++(*ŒPJkþ 2ê$ ++@a2ÃË!!kË!?kÆ!ÿÿ£&kÆ!/;´Æ!,kÆ!#kÆ!PÆ!/kÆ!ñ_âky ÿ0£Æ±ÚAÈ ÿÿÿ…"k ( 4Œ//2'h®x 5ÚM8p88°P#>k"…€…³Èz*/ÿÿÿ±uk(  H D 9à›!öÆ ŸcT âà‡å à›åà‡å 0H =à‡ÛOs ++/°  ¯£/  °ý: ó ++7  ™4ÎÀ€\ ˜S Ø؈8 ¦0 ã†ÿÿêR² &² öHBk$   ÂæÚZäæÄ–[z(>el&oá ++SZ ++Å^^ è^^ZÉõiH=L ð>_ LD=`à ájô«0ºP ¥e*ºø«i) “â0RÄ  Ÿ;V0“å@l:@L ã‚_Î^4 4l/~[ ìÄ°lOšå‘bŠy sÂB7ž8` h /vPäæÄÒ]ý‘7°8äæÄ ¸a BÚkfea %xÅ è+ 7&å0/k(å0ô/k* å0/k*,ÿÿÿ†*,(,5*8Zk.$´« #BBEhŶ èÓûd4M$0M$/D ãtÿÿÿÿÿÿÿ,/kBÐEÿÿÿ²@G5ÿÿ£xG5xk>zS zG5>G5@Þt/k@ùCõBG5 ùC4BHÞt.kDÞtS5_¸BkFS5ÿÿÿ†BS5FS5(FS5ºt.kDºtD Bäl/kDäl'/kDäl)H°ÿÿÿ†D°H°(HµH5D8rkJµH$˜¬W.kL`C1g–¬WRÜÿÿÿ²PÜðäWÜÿNÜ/iöÜNÜPÜPÜõR‰ ƒ ÜR T ÿÿÿ†R T (T 5_R85B '`édp !G =zX0¨˜,zZ,zÿÿÿÿÿ|ÓPÓ ++3VXì ÿÿ¬V)VX3VXtõZtZ>V#\ÿÿÿ†Z\(\5Z8’k^t5 :M8aBkhU XL%oÀ"UoÀ ³¿oÀT+¿ø+¿ /Õ+¿ ãgÀÿ /gÀ;aPLgÀÿÿÿÿ ‘gÀlgÀÿi/|ågÀÞUjgÀøÔ|Hd(%ÿÿÿ²b(%ÿÿ¬`7)`b(%b(%õd (%d f ÿÿÿ†d f (f 5d8Jkhýz+2B0’/`ýz nýzÿÿÿÿÿjlÊ$ÿÿ¬j²)j²lÊ$lýzõnýz"n¿$#p²ÿÿÿ†n²p²(p²1Œ_Škr²#/ ++(ýz "Z@ª/ ++pýz ý–z1xýzt4 g4zýztýz)ýG3¸°Bk| P€z"ÓäÿÞ  í“å °“åÀ“å@“ i°´a¡‡å ‡å °‡Ôø€à‡åÀ‡åÐý•à‡å@‡å8Àa6#+ ô ¨i$$ŸZy§ Ý«Tj [|" «Tñò ++<<! ïY€ZzZD kDeDði+=ª\~#~#ăZ †#‚#œ í»Vj»s ++Õ¾#ƒZ—Î#n¾ä}{ZȾyq‚‚‚‚‚‚‚‚‚‚‚‚‚‚â#‰ â# y¸ l œ/0 ++( sZ ?0šÉp (¬Lj‰LjµÉ PÉ_pq;¸/å¸{Z”Äb.IþñITBŒox HÇa ++.À4¸Ëaãã ÐpÏaô/0Ïaÿ¬LÏaA/1ÏaÿÏa$Ïa‡ÏalÏaÿEõÏa) r AþÏa) ++WVv  Ð<!b(\nR` ++# +o°—åp—< /Cp†å ‰$°ïiÀú"S „åà ŒïƒÛÁ£ÎÀø §ƒœ ùœï𠔨ºð 0kg¨ªð ŒÀŒ…Œ)ÀŒjŒ(V4 4 d d/a-÷.ÿx‚t¼\XN?@ ++}X/ }OšåôÐtíþÿêHj7%Xg/à /€ªøBox;¨€°é_êkv½ *T½„aO"kx„azÚÿÿÿ†vÚzÚ(zÚ„az/„av8bkx™$ <„a¼oJk|(– _¨Bk~¼ÿÿÿ†x¼~¼(~¼@¼>ÂÎÓ?|ðŒ'`»P˜_:k|˜N/ â<0»ž¸àBkŠ  ØóÔó ï1“C}°“åÀ“J‰p 3šA <÷®<pr!°† ˉˉ# uI# ÿ¥# H]# ÿ # # „9# l¹# ÿI/# , CK.7þ’IV¢7 †þÿÿÿÿÿÿÿ.„úJÿÿÿ²e‚ ÈH<"c G/L‚GzGGGGGGGGGGGGGGÉ?# <É? /î úî >å6Õ! ++  þTÊþ Ì<ÃS¶”Ð. °í" DcÀ áŒF Œ$@’:ÃWY®^À†åÀ#[„:$ Ù"v# ++@.°H_ˆ°> – K<5¯5¯ 5¯.pà8$*¸>Ù#¸Øpå#ÒMÄK@à„â=±_ „å&óõ"ÜÏÁ.®ÿfš#ƒugPYêCŒ/(‡.ÿþ(<ñ.âþ@­þÿêD‚`#ð0ª mÜB @ 7Ë`ÖÒØؤÛîß! á¨ 0bh`%€[%8\`a#xBk€ Ü]R‘ËÆGI£ D4 ++AË"ÝA àndqñÊ"AËËàLpäñL* àXW\V"@T¯Ÿ( ã|  ãñÊõXolAÐ\·-.°ÿ?ºñÊó  ¤0ÆÚà^æÐÒÌè027îåvšk€ ++0åQøAÀÏ& ++˜{9 ++ÕP‚Põ„$ ++I P„‡†%ˆÓ ÿÿÿ†„Ó ˆÓ (ˆ‡†%„‡†‡(†%OªkŠ%Œ¼ÿÿÿ††¼Œ¼(Œ% Ò/%†8škŠ%$ B<%Ì ÈBkÊ #@–%! Àçj"ÿ À &ô¯1ù¿ÿbÙù¿ÿÿÿÿ4,ù¿_¡„ù¿ÿo (ù¿$uù¿èù¿áù¿PzBk¸ù¿X¡s"äG XÚÿ=,ásÆ’Æír ÆAm?p›ñ¿Æñ¿óã‘ààã@ à·°~V/õ~V õ¿¯›åp›åÀ›õ¿ŸÉpÎ õ¿Î/0‘Ë°Ë°‘Ë°Ë°C°*Ë°ÿ^Ë°DWDQDù;ÊI‘Ê‘Ê æ ++pM›â ++¬Ë°‘Ê‘Ar‘Ar´Ë°$Ar,¿Ar< D.1Ü&Ar8 0D.?  áAr/±Æ´ /Œÿ}nˆArõ¿º\/1< ZT …T .&þâFí¿rP˜Bkœí¿¿Ç _{Ãé¿/®_{/ƒ¾&}¾ÿ“å p“å °“åÀ“é¿öp{y6°6 6 R6$6' N5‘é¿Âé¿DWDQD'DÖ56°9à“6v.6à.$6ˆ/¡6k!6õ ü.6&Œþp"€þ€– +– í¿ Ž /fþSÛP/¡P'/P ¼gPL™À_ “ågÿÿôñ¿“gþgð4€/g6ñ¿lñ¿õð , ðg-|LL/Ù³ L/%L.=üb6á¿zá¿/– ã=ÿÿÿÿÿÿÿ-”ã=ÿÿÿ²o’  ˜+zˆ¢q¢–gg%sx z z ¹â7 z zÿ Ç’ßy 5ßy xhVqÿÿêßyð€Bkº ¨kŽ ³:fØÞÎÂÜÈÎí6 ÎíÎíù ÊíÙï¾í–  kŽ¶-zÅ:fŠå¾-oëSZ ++jN,Æè¶%R,nLNÉ:0Lð:L" 0;Ašå˜àî,P x•:"àT9 “o0R†Ï  1 V0“å@lý @ ã —åÞ*44l/¾- ì'ÐlOšå‘6.ŠÿX?Âe;'hq;À0vPÂÜÈÒ·u‘7°8ÂÜÈ ¸Ï0vÚk ++0Ï0 :Dµ|' ++(¬|_ ‚k’^‹’O;õ”ä1 ++Þ1 O;”O;–O;˜“6ÿÿÿ†”“6˜“6(˜O;–O;”O;–O;(–O;h_Bkš°ÿÿÿ†–°š°(š°PhPŒ_jkœ$ :ÿk®ØÞÎÜÞèZÌêÜÖòbdÕŠ¨Jók  ˆ ÒÚÚZ|D2ÒÚÚÇ ++£0£0£0C_v(ÜÙ!$#»!$<0 àƒ¯» ˆ &àˆ ++”MGD 'ÿÿÿ²¼>'ÿÿW?kº²&¼X$¼X$õ¾² X$¾X$À¦ÿÿÿ†¾¦À¦(ÀX$5¾!ÊÂX$'!Ê? ++0!ÊÆ!ÊÿÿÿÿÿjÄü#ÿÿYJ'Äü#ĹÉõÆü#¹ÉƹÉ#ÈJÿÿÿ†ÆJÈJ(ÈJ1Œ_jkÊJ#/ ++(¹É Z@bAHŒK†Ú  ++Øk<æ;²r¼æ;æ;–“q„å„å Ò‚„² 1à„š þ;éþ;hÔ  ;À„D±|] &0<¥²s²s,!/,!'‡,!"à›J„òà›åàŠå›å›åÀ›å@ðz(s Ê^„‡å 0‡åàšå àÊÊA‘ñà‡å‡å‡å!À‡å%@‡åHÌ")‡åÈ"/0’]GÈ"$È"'0ýG{&ùc{DWDQD'DmJÈ"´7à›È"{ È"à{$È"[«È"+ÙJ¯È"U/YÈ"ô d Ô È" É&†þp"vþp#°Ž‚ÕA} *å}#°†‚0^?aþÿ¼-è''è' *a’*</!< *d&°P qd$"°L@Šå ›ðqûÑ à à' àÒõ‡å‡åÀ‡å!@‡å@èè •kÂ{Â{“Â{Â{Ö& “Â{ákÂ{DWDQD˜±elm7à“è“è.èÜè“è“è“è· è èñkX`r$ñk 8ýG P v$ñk1ÐÍQ &A ÍQ èÝQo0oñk°è ˆnŠœ/½œ.[ü”.Tü—0®š5)c*oÐ  ÏaŠ@É ++a†Ÿý0—å —å—å—å!°—å%À—½ns­­³‘¸£†å°†å!À†µ†M 7/w7&qÁ ! (p›¡°sç'm°H\HVH(H"H‚so—‚s—‚s %%§¦3å%ë‘Ð/ ë&s—:sWâÿÿ ++¥:s1 ++¤ˆ5¿5”%#Š%#zlX¸/ 01íó‚" 0ï‘ï‚" -Opšå1 /m1 01LÞE ]³ñ~o:1j3ÿÿ ++»þ`‹ [#/å[#Ayþÿ ++@@ X+%@Y4ü —ƒ/BþG .… &G aŠ@VJ¶° 9oÌ ȵ¯µ/ž$2#{(u¢k¢9 f@XáÏs "pŠÝA Šâê/]ª;î. îÙ ¼2Ä2EÒ:e‚±/‚åIÒ_ dŠŠ ¡IÒ_  qŸ¿ÿÿêà—å¥yŽÓ] ¡/ ++•¡ ++¿m!¡Õq0O0†å!¡Å¡ õ¸ààä:+ñÇ!Ûy"0šä°¯†ùéä°1Œ®jä¡Ò‡/-÷¡Ò .ÿz‚¶sXAþ3$@ï Ù©Q JþÿêPš¡Ò_8Œ«$Ñ?PX›L˜L´Òï_‚kÌ gÉ$ ÊTÉ$(Êq_¨BkÎÉ$ÿÿÿ†ÌÉ$ÎÉ$(ιHØÉ$`(-B;¨€Œ_kÐŒ‚-HZ4 B¯ÁËHЊ)#ÒÁÿÿÿ†ÐÁÒÁ(ÒÔ75Ð8ÚkÔÔ7$xŒD:)*Öuÿ$/pq,A¿u™ ÍuÿÒuþCxäuÿÊ uÿÿÖÿuÖ´ #Ø´ ÿÿÿ†Ö´ Ø´ (Ø´ 5^Ö85ª´ ˆE ;’B0’Nñ ++ pÿÿý ù>ñý¿ø}ÿþïýÿø0Ž|p,kÚ433¸°BkÞ 1ȼl²44í  á p’å°’åÀ’™¬tà»îFQÀ#X-*kæõ6sDR= (Âü è°‚õêÔ$ ‹8 °‚êƒ)O¢kìsÁîƒ)ÿÿÿ†êƒ)îƒ)(î4=; ú/sÁê8âkì™$ ‚<™ð¼OÈU`8!r$Bæüðc.òàÿÿÿ†ìàòà(òæüðc.ìæüðæü(ðc.ð &B¿&B&B¢8Bkô4x4?¤043?½xZBhø =ZBcË°ZB t 6 ©h! ›%/ /%&/%W/÷û2°',;“å"7 €hàx횀Ú7'D ®D¨D ÷. Ó.R÷.$ s'.p‹ /)û.Éû.s'ì /€ì/z0kDeD'D¼íû.¤ ¤W-W'F;W'í“#ÚÝû.âû.êû.¤ÿ.'/ Rm„ÿ. ÿ.yR l¨‹ ÷Qàÿ.½ÿ.ûQÿ.oQ²^0ÿ.=ÎAÿ.w 0w  w ] Tÿ. Ô;¼ÿ./™¼W''+Žz¨*Uþ¨DQþÿ ++pt`/=`ç`}o."þ´¨›$núýÿ C-§Ny ‡å °‡åt$k61/9 k6p pDpDp²k6Ë.p´.M ´k6-lÿv/) lk/© lÿH/l#k6 ¬RW6a´j.hVö Ý-Æ"'Ù-(0(*20 2%_ „å2æÛæ Àæ¸Q;o Q; æ—Q;©3Ma}]"}] ¥.µ /}]È £Maæ Q;|I/…|I%XÉ>:zŒI Ì/€A/XvIî_ ZköLê "Bê%H|Òc@Rkö'_ªkø'_ Bkú'ÿÿÿƒÔ'ú'(ú ' Ò/ø'˜_¢kø'$ J<'ÎoA;ÆPŒ !’N)¨AWü ? C€Xâm L7§F‚îc/©crØÿÿê ++‚û õ üÐ8k"SjküŸ.%ŠŸÆ!þÆ!ÿÿÿ†üŸþŸ(þÆ! -²/Æ!_ü87zŸ'%="Ÿ)P`ÐBmƒc˜)!̃c}p’å°’~½˜O0C4”O 4r«O¬J°ÌO„Ox/)¯cÿÿ/=¯cÿÈ„Ol/™„OÿHõ¯c- ]AN<„Obô vm 8GGÒG2’2 G ° G¦V =¯q=¯a"pLHG ÕG`IGÉ ¤—ˆ¨SIR R ¡R KšåG»` ðG|& ƒ|³ƒ|"¢­– 0ûKJ¡®úL «h,ÓNÛN««««««««««««««?å ÌŒG ¼ ¯ @šË&àB.0ìGˆÿ 5 òt°C{"H÷ã3 ü*GÞFâ<T" S{ RgH”ë Ð+W~ †?" $ ,O{(\ ‚ zg÷ ++öjfáW~ ¿±¯…ë° _çî (<-@Løþÿêxwx$&0êIt V?+5ºGÄZ?= —|M| à;K ¤$-/ ¨Nƒå : ¤ ¤ d™# „¨O„å0„îÌÚÏÌ(¾¬q í ¸.MþŒF–'ºåƒ`Q °N%€ÙSxB;´:o| @ ++éÐ'phˆøÖ?XI $HJûOm ++ ˜Â_Bmè?òOºm“ ++¤ ++è?DZm;OjmB/mBÿÿÿ…!mB/mB'/m; ’/B˜_ZmB$ <;`àBmHÈKSÒìhPÁPähäh´A`ÿÿU`ÿÉ1`l±`ÿI ähA `8`’`o  8äh/·ähœh€*ýÌ /0œhÿÿ /)œhÿØœhl•œhÿE.íÄœh L*¬8Rúèc/m ++«gÿÿÿ±um #ø«g£ & § 3Åe."¦.v [†[†[†[†[†[†[†[†[†[†[†[†[†[†[ ++S &ã™<S *Ó¦10Šâ|S žå³!gc AfE\³!8³!ú/.í<@//—h/!= O ë®ò¯ %ÁaO Šå « ’É  HO0šåFɯg® _º:§ ¬/ à³ •® ³ €¾„s»,/".MÌ»+"Iˆˆ/"ÿ P°² †(yxdM?P0x(.òþ.àþÇËg"ç0¨00/ù0_ šå0g"  C";±Žg"Ü€g"</ ¼ð¸g" Ìg" ‚# %H"áý #) ñ5ëOpšåÍ­c{Æýÿêpª´!°·"§"ˆ?"è:"`0ª`%È%Ì"?Þ"`=9#ð"#úm ++ ˆå/mØbô/m ++Øb'&m ++[Œ/m Øb/mð"ÿÿÿ† ++ð"ð"(ÑB; j/Øb™_Rm ™$)7 ++(3<´bOšm¬'¼ÿÿÿ† ¼¼(¬' Â/¬' 8Šm¬'%2<¬'uGœ.  ‘kxm  ¨yAÎyA‘ ¾‘ 8¥A¥1‘ÿÿ/E‘ÿÈ!!(l¡!(ÿIýAA 5(;(!(r!(Aÿÿÿª‰ˆA ›WqW¦ ×Aß3à‚ó ‚ó ‚ó ‚ç¨ A?ç¨0º3P½$¸ët¢ÿÿêrÌ ¸hBm   Õ ­ê¤i D ++ˆ&0Þ(¹‡ 8Qˆ) )â(P"@QP +ÅQ;bT1@š²JŠ2@h} Oj ã’UDkD0nD0oDœÙp4/ </©4¼Ö\ìUV4õhéñ8œ8æðèÄ(Bm ð ÊðèÊÜÈZÞà@·08&@Z‹ò×Z—š ¬jƒÆ„‘)A^á…Æ„‘N…M=à’Õ\$’‚„ʉL ‚„  J DP ãN L ]Æ΄ʃ*à TÆ„*e6Æ„/ „\ €€K €/†ˆ†ˆ' ‚ˆ #àCf ++@rˆ5Ãö"Üÿ&„"¡&LGoŠå@í'.ÙzŽvŽPGÔB e#2<ª4ƒGŒP)ƒ 04ƒOyà4ƒ84ƒfX7¶ ++ÈI!p)sÊm ++HÑžÁ°Ð(Bm(¨êÓª$‘÷ êÜÊðàÊÆèÊÈ@Þà@üæ„ !`„ñv jm ++84%ÀžCx†C†Cõ+ ++% †CÚOzmÚÚÿÿÿ†ÚÚ(Ú ¢/Ú8jmÚ%<Ž~";¹xMY~0ˆžÚa/m 3X3¨3 3ª3¿~>©M¾~’mF  6 TãÛÜŒMDý0 á “å“åp“å°“åÀ“DÈá<°$ÁÜ”'àDï*“å°“å H±Âvø#‡_-t‡å°‡åü÷ ð8 ðPêv@Î ?* $6 êvÿ• êv†t-;/y£çPUï÷çêvm êv êv`/ 0t+U×:7/ 0Pêv$/Õêvÿ¸/1¸êv HP1PÚPeB hP|”"0­f “åyDTºœ£ p}DœWÀ†å8œ#‰D‰D‰D(Ž&0‰D‰D4‰D4‰D4‰Dp‰D‰D4p ‰D !pÅKL ýèS±´ÉM±´ÿ½LHyL5ŒÿaLeŒlåŒÿE=±´8‘´)Å‘´<‘´ Xü‘´êÅ ‘´ym<  hu{Ùü+$(O%4ŠåæL/ , ´,ª„p0muÓFe"0®8ç, ¯ Ç')ç Ïcý, ø/acýÃöL“„OEØ!pŠ § ¹œpœ§,Ä…°PBm:  à,x_ßp€XâA ++{[°žå+ 5ï#à§#à†ä+$ Ó7Ë.#­"°¹OC ++0[·W ++’*@ áÿˆ HHÓ $ @ãÿÿê«.áÿ+1SÄÿÿêüEl?ñ$ [øiÞL€ElG¦Q´¸’Bm. Ðö+bÀw‰_/d-d-d-d-„,‚å3 ñ#;µúÛ§À .Àm&Í©nÀÐ- À ++ÞJ³fLü-œ7w$ ++°w$E* ,ðm*…ßr“ Th†"2—4@Šå* n- /=¿1"@“ ++n—åp¬<³/pïÕ.l0lákN#ß"@3°· ++ Gâ±(Ë(½[¦"ˆ[ ½~"O@šå{Xt€]*-Fx9— ,xñö:ŠBm( o@ "ÂæÚZØÞÂÈZÒÜèÊäÜÂØ1\\\l$dd/ dÿ Œ1d)'0&4T¹ ++öŒ1ø$/õþTo/å ++TO/I TS/± T3/ù TO/] TÿÿÉ/9TO/TS/T3/MTO/±Tÿÿ]i/S.!/MG/©ÿÿZ£Ept£¤24šå/ kXÕx”,0èS Sá¤!c0 ã0"«àˆØŸ  ã  ã hTá1!à›ù $ù —kMéù —¹ÒåU 0-(Y "x¹Ø(U#(Ñ*]©Ò µ «x“q ljt-lhÙ qÙ q d\l‘dp@Šå$šåN$D"|ÉU ] €  á šåXÔµ›Ki1Óµ µÝ(Å Å /‰Å «A HÙ rpAW ûN0- 1p1O 1.Îþm?ö?9å #ÿNÌ ++(ý jüüí }?x¥½[žG’ ÒÇh¼0× Ÿ0òO`m"í8í# & ++àe!x›Hs2m$ ++PLO`)2P†ÒmÐ$#rÒÄ#)0'Äù/ ++PL«5X ^0óJôÊäÞ@ÒÜÈÊð@Þä@`6 @X@ÎÞ; O@ÂÜÈJM8m&0PBomyI½O{J%(,qh,qmP ¨ ¤'FæîÂàse[O "àÐ*"à// oe7/ï[e,†X4p "p(¡,§§Nž+‡—X|0—X4—X´€0›XT/àëXÉTPÓ,  4Rá ËWàh ÏW/, ÓWLkLœ`/ X‡/ X/‘È"Ðbà.[ÿ,0XpF 01 c@ ++äÊì1 °*  äÊì( €ù=L"0e]   êƒX‘Ý ƒX˜ƒXÁ /0¸ œ¡?µé) ÅÚ\ ¸X¨ ++8ZÞY=Ld ++L ++IãÝU ++/µ¹4T ++! T ++ T ++ Ô ÏXÿ0ÏX#_ `Šå"ÏX´ l#0uaÍÄ Z)a° t ûT ++pôþÿê@²  `°  —Oy=ª @ÚXvjm* ++HŽ !bl{ 5*(vb@äÊì H Dƒ |ÂäÎêÚÊÜ„lãXH:m,ãXWª°Sz& ++˜»ŽSX’m.?Ö¡ €ð(#tm6)2m8 r lt m2 kÀ Zb^æèÞäÊ91mR"àR7vŸ ++0%;PQÍQ$/$610šVc=10šå&7”õ7…à5ð—¨ÿ-;õ=? ¥| 5gÀb6iN5g°MO £|  ]| ‘ ++[Ü5¬ƒ û\.0|z%PœüQlqN‚å ÜX^¨ƒPGåO L*$…<5pÄœ¼/MíO´ ,²™ ++›…?(TV(àH9@*úþ IF1’åt˜&¹5!‘ ¹5Q¹5( ++ñ0’åSãM ’4 q+” € Qã: 6°qâjã'@ Tã%x È";†9´‚h‚å ‚å@] !G¸U <.<ö4i@}‰TÁÙp$<<±<<¤E<"p|f/@x .ux N=.ØyØ €L€(Sj:µ" l \HH!F°,‹Lp‹å ‹å ·Ž!‹ÍAb—å°…%@X½1 @h/°@°IAIA/°@°IA ì@ ++ , ´€€í#U@G8,.ùþ&ÞþÍÊEß*½,:@ *Y ++tí"·  ¢•(oqâ jX±Xy#¯opÜ‚EE:ÐŽ EE/*\b /\b²A@‰ö@ö¡uð$ Ì3Rá<Ä | /É | Ñ(<õ<HÜŒt 8 P_óÿÿê¨8 t¡ô!tÈ *ý ˆpz`Ä C á Ž? Ä /X"G…` ++‡\Ñ‡å ‡å 0‡å‡|*T "pô L0yJèL˜@/pŒp@a$ Ì L`L¨Ä - \Å[|XP.ñþ</ÜþÀο˜ŠtŽè" ++0IPÕ Å@ 8·ŒÈ ++/@Ä ++<+9<Ö¨@Ä ++ ”€ @T{xp$m( = p€x_~G<Hx x xEO=pšxIL/IL p pILp p , ı¸š,Œ(~(lB43$ ï|/ ãˆ +++9T Œ ++/Ký ÿp/Ù ÿ@/- ÿm /ü´/í<EÛúÿê°a QãÛúÿ°"°"°ïûûÿ TãÓúÿ:øû|/i|è@t"p¬&/à³uáx! šÐ„Lùÿê:ŠÍeÿXm0;°HxØn•àÍpXm0hóŠ2án ++ón(sö/Xm4 öÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@PÜÂÜÞàÂææZÆÂæÊ@P˜bjÈ@¨äÒìR@î@PPB1ãPêÜâêÞèÊ@ÒÚÚRRðÂè@ÆÐÂäÂÆèÊä@àÞæÒèÒÞÜ@dhjpf@ÞÌ@ÂäÚfd\ææBï–>°Øæ¹&O¨#B8ðÙ—/xœºfm0`3º– –(P`‘ÔØç&ó =RCˆC˜Ù׺õ‘]pBiö ˜ šOs%†q0`˜¢˜™ ++/a‚™8«rBXB2y%À !(=1m4À!`¾rpkÚm2  `(m6  )B(m8W"hwnêm:hLš/m:zxòOêm<ÄzxDŠm"™@zxÿÿÿ†™$ ’<™°`èûÈU`8!B$ ++èûOBmBàDàÿÿÿ†>àDà(Dà š/à>8‚mBà%"<ðOâmF‚H¼ÿÿÿ†B¼H¼(H‚ œ F‚B8ÒmF‚%z<0»¬ÈBmf  ++pPÇPÛ$" ¸yº÷ bÀ“å@hr×;´Ob à‡å ¢à‡å‡å°1!@‡Ï=_%à‡åH|)ÿ¥H/=ÿ | „+}g\™ÿI/õ;.EþeTÑÞnb ¨!à“f1 à“7Gÿ “å“å“å°“å!À“å%\¾\ \\Ó'dˆÖ‡å°‡å!À‡å%@X €5 ÿÉ ”y_…N KX $yS‡"¤S‡?'~X°K"R\"—N/~W‡ ++'ÃW‡Œ *îQ3›å.c"°#ž@Ûp "ìS‡ ++zI3 á.cDRUÖ d"ã#d S‡d#A!š\acPáEW‡$"^»_ ùÎ AQãóSvaSvSv½Sv âh–SvÜŽ] \p¡†V0Ji:^âhdndDSv!W‡H/©ŽhT:^ÅOvX#Gz0hhº&hªBövÊÌO‡" »~/a»~×»~»~ »~/ 0¿~¥g‡p˜pÇ~¿†"_p^pÃ~udÃ~%½k‡P/!xÿŒ¿~:¾bl?y@&¿~Vb€•/! €O/… €3/Í €G/) €ÿÿRË~r`Q㈀” s1˜ Øæ ‡&à ¸,üQü Qá®·}÷1×~l,llØA_~­æ_~Ñ0& , :[øbV,& $.iûø.bûJI.¢_~L_~hÛi˜_~h_~Pk/9þ| k#_~ CmX˜ŸQt.mRs€sOçv2mT ++ ð(p‰mV‰mm‡N7V ++0DTrmX†CObmZBH\†Cÿÿÿ†X†C\†C(\BH º/BHX8¢mZ™$ B<BH_m^¼`¼ÿÿÿ†Z¼`¼(`¼ )ï^¼Z8Rm^¼%ò<ÞQZÔ %!¢$ ++ÞQO‚mbàdàÿÿÿ†^àdà(dœ Ú/à^8Âmbà%b<ÞQOjmfÞQh¼ÿÿÿ†b¼h¼(hôÓ ’/ÞQb8ZmfÞQ%<0»Èï1À4…JÈïÏmž ÌÊÌÌÊÆèÑï33„ú·Ñ  ;𠊸ðv"˜’| °|[ +++а‘å[áÔ ++À"+\ +++!°›Î)C[ +++Cà—åê "6!„†B·„†}°—åÀ—d;¸!űRð~þ"à(/1yÌ£0†å!°†å%À†éCH ð¹R $ h;.pÕ<Uê0ü3!ð0h;½Rÿ‡!0Ú¹½R—½R¾b•!ðê½Rì½RàÔËÔÁÌÔĽRmHŒ½RH|H oøD; ´ˆ@;!ðq@;†)@;H ½R½R\ÁR õÁR  oÁR+æP$ $ ,{( xz´( o üŠ¾'|ÉRmÐ8Ä/YÄ `T;_ÿÿ ++‘eÌAC‘è /þÄüƒÿã,þÿ ++^ã*þÿ* ã(þ\+X| x6``ï0†å°†å!À†å%\‡/Ý\ÿÿ/ñ ++\ÿÈ/Í \o/Q \ÿP/µ\? h0¨jJ% *ZÅB€*Z[1J•/à*Zÿÿe%nRH*Zÿ%9J$*ZÿÿÂ|QÿÿÑ%QÿqdQÿÿÇez Èd#ïQP.ÜÜÒ½N‘O  á!Õ&Õ!Õ*Õ. ½N/í’ y!Å¥•Q .¹à ® šå—å;:T•.0ë<#FäUQ/9éN' IQ</%á#  ÝN0ý50—œqS —ÜéO9‹ Ý›ÕOpšåS;7K>ýN &ÙN ì/µN' 0©N„+@Ñ•0+@ `áÓ•R ¸¸q¡ Œ0´.m´"0°°)5‚yQ $Œ/s´<_‘Q  ‘Q ¤ aU UQ¬Í– %D ‘¢Ø ++Ø ´#0|O0 áK€Aâ”ÔUQÑŒ†xPj_CAd.ÔþP.Àþų.¥þxzPTk\@/'þ'Õ$X{ ++þÿê^š' üˆè~:x'ÒùÐx ° àÒÆÖZZQ@Þà3;0‘ïP"A ´W.@Ô& Ô&üQ0Ð& Ð&´Wt(&0D'D't ` Ô . 0ÌR XîZøJ4(0XBmn  ++#Z„ž°¯ "¯ "ú²&pzQ0V d²G'pnQ@izTP pUåP"@ ̹"ÒÂQâ0žå€Sãʪ£àbMW0âIþHˆúH”zM.]˜@¢H\’XTĹlW±¨¯TªHï/p¨ Tx¨ O¢H 9(2`šåµÈµÈ ²L_3(ºDղDŽ«à!†åzÞ_ ¨ª¶Go —å —ŽLK_— !°†€F_ ”¸ŽLP<â#’P00Î㜓di/Ád?/d?/id{,dÿž²Ipè0#/ ++RO/]è4#.ïý°.èý(!|Í·hFW04¨€GúFßFeë¹+’(ßF@@7´'”ðv`mtìØÈä\æÎØF!7à³ P@ml "ÂðíH™ZÈÂèÂ@ÊÂzËE mjà5& ++x€1!`ðFmpìÆìèUyZ|ÈÄØ ++°“E0­ /­:9£?mlyÈÄØZ|æΈGû$êÜäÊÆÞÎÜÒôÊÈ@Þà¶FØ®³Y!Òmn®³hE1(L9 ++hr  ++¸9 ++0Ad9d'è9 ++x õ$t .qt .¼@H Á%.¹~¼@}d ++—RSáÆ0” ¯Rp0”å0“åa# ‡M¶¼å¸,ûMÖn 2í ÚnQ|Q‡ Îãâ Q¹)ãMõiõ!¥·dL©" @õd‡Sž`+]h—W)@šTTP+±PàížÄ‰0‰+ê¥/ @Óè ã­ñ& 0ÎãÝa™+@G™qHäà ++," à.Ùþ‘Ò¹'7Jº‘X‘Là@€vh9Pµ¨“\mpÈù7½k€ùP…M«pq<`ÓÜÓ`Ó|Šmr ++0ÓÏhv A¨ÏÊbºb"îÏ#pçÓÓ uÓ‰ò&@ÛTÛß Â&0TãâX"žâX›´ ØšX{tQãϪ¡Ì !àVYÐ ˜±Á€"á áàÎãø¿:YH¿.‘¥„:YòXõ J]XJ]„ \ªîHJ]Eìü¿ :Yê :Y!7:Y :Y Ô ¾X.ß¾X ¾X_`ŠåB³öÖà Bâ!â $.Ba|p/ |O/q|3/¹|G/|ÿÿa/‰|O/í|3/5 |G/‘ |ÿÿa/ |O/i |3/± |G/ |ÿÙ ++atei ¸C*-(´dûr`ôr`ê¥Ï8C_@2ÀÌ^?Ù)Ì^%09mt`?X.--+9J-Qìæè ˆHˆ /6`€ÛÔd_$ÊYArmvÊ4}Hß°I¨AÀ¾(‹PÏ$S˜BmxPWÓÌ2µLSÂmzµL*_|ŽU~ÒPÿÿÿ†zÒP~ÒP(~*_|ŽUz*_|*_(|ŽUO‚m€¼‚¼ÿÿÿ†|¼‚¼(‚JZ€¼|JZ€JZ(€æcOm„JZ†¼ÿÿÿ†€¼†¼(†(¬ B/JZ€˜Sm„˜¸JZÊ<JZq¥JŠ1CK'ä1Cÿÿf!1Cÿq!1C!1CÿÿÇeˆ XdI/!¡. ÎWÎW Œ.¸$Œ(¸$Œ!ö¸Êˆ{E®•ìÔ¬b”ŠZ"ÐÿŠZ1ÎÿÿŠZÌð|]0k ++!—Ä.u$ ++‚:Ì!BC!B!BìÍraX0—å —åõA $úWQ@ ++B™.õÄM?õA P b””`Ô¹/›`ÄPb”¶íB$"0þ \"|’è B!ô}!0š íB ++“ñB~T`qíB(]íB íBpíBAh 4tåB ++åBH:”˜åBÅÀœPˆFY{Pl–"Ct>”%@ðB¬ !}B„±1}6õR° êîÞäÈp ž1-k"c&àE'xµà§X2^}×Bèú* ¯ps{Zmˆ ++ ÜŠ Œdÿÿÿ†ˆdŒd(ŒÜŠ ˆÜŠÜ(Š /#Ò  Ž¼ÿÿÿ†Š¼Ž¼(Ž  /+ú  _Š85Ê '+;‚ G(Nñ ++ pÿ¿ý Ù>ñý‰ ÿþoýÿøŸˆ08Bm3 Ý3L3Õ3J33H33233.3 2Å2ÈBmš 0™SY?pœOY½»L&0>[Yyn= à€0h"6 Þ[—µ0HDº ž0º ÏYòRXÙ»BðÕæRðj0jjI ,µµ žž ‘(€UJäG8NÇù#ÀiïPò *mò DÀšå´.ëþ`äþÿê4ª<î`Y> ʨ Òm’ù òNùATŠm”| Om–| ˜Àÿÿÿ†”À˜À(˜| Z/| ”8Bm–™$ â<| _*mš| œ¼ÿÿÿ†–¼œ¼(œ| R/æ“–8mš˜ƒ Â<æ“1h醴 ømžÝ“s9ŸÝ“=l&Ý“Ç1à„+/#ÁN Áåí“°È2Àí“SÑ°Ræ!à“4aQŒ“o³ó “å“å°“åÀ“å#G:0UŒvG:ä„W.€} S:ò ‡å‡å!°‡å%À‡å)@…_-à‡åXzæTøQøÿÿeøÿÉ/AøkÁøÿI/ø, šAø²øo¬ èPŒ!à“1Wˆÿ “å“å!“å%°“å)À“å-|Â`Œ||ª ‡å‡åxxpŒ*U¯ ++pŒÿ® pŒHX pŒù X  pŒŒmX líX ÿEEÛA87ÛAªY ¨”¨”””„ ä“!"Àp*!àä“Ì'/5Ì'ÿÿaÌ'ÿÙä“ÿÿ(i¦ ÈÍ'%Ä(ÜÄÍ' Í' Í' 1à1àqàå#ÓH'àå%—ý'Þý'/éý'Èý'0m¤ùøŸ8¤ #'ŸF<ñ 0`’Bm¢è6# #à0Ê+á X¾ßK —åEME3àƒƒƒƒƒŽƒå#—åpe*2ue* $$p‡'…*A_ „å 0…* ÕÇq¬~á v‡ˆ%W* =}!v‡& v‡r‡\=} Š/)n‡H tj, H!@ŠJâD»)ýD4õ1 @Š­pÓÍ /(àE}llhnl‚‡ ®„®„NmÙz& E}nE}- $Î|NU| AŒ& àšl… @,`ŒðÐ/(@B„ŒH5ød¦„d\1 Íp¸=«*O‹ÿÿêVEX% Oÿÿ ++µ ++`õŽö¦nœL t´tì$ttÿ=/Çþt/¾þt@¾‡tg1°dR /¡0O šå߶‡ض‡x%&P ,P(R ˆnpìÂÈÈè ‡ Xn`ãÅ-°‡1@‡ ?%F0T:æêÄT/888ÚêØ8?E-8 87ÈÒì8é8/ ++XçnôÂv#Zm  ++0¦&>xû4 Ð& ¨BÍ/Œ+Sêm¢¸Oúm¤Gêm¦Ÿi¨0ªG+ÿÿÿ†¦G+ªG+(ªŸi¨0¦Ÿi¨Ÿi(¨0OÂm¬¼®¼ÿÿÿ†¨¼®¼(®¼ /¼¨8m¬¼%¢<¼Oºm°¿4²¼ÿÿÿ†¬¼²¼(²¿4 â/¿4¬8ªm°¿4$ R< ¿4( ++ ;U"¿ T ++T&Áï §Í Ž–Š d p–Š 'VïD„嚉 ¸2Ûˆš>µn5‚^¸Çgo€;¨ ++PÄ7 ++`#,y’mÂh,rBmÂ"ˆXB ˆË*Ë Ë? —åc"c•Ž ;Ù; ;h6kŸ;¶8 ºmÄ ++ ™ì/GZmÄøÆÂÈÂÿÿÿ†ÄÂÈÂ(ÈøÆÂÄøÆø(ÆÂ(>f§Ú0d¯o0 ++ÌàäÊÈ7d;ÔÐ;d;d/#7d Ö7d d 3d3d3d3dд=(3U3U·\°é#du=y/ÿÿ+QÀy/ÿ¹-#dl­y/ÿI #d<Ey/ŠdnÒ h\Æ¥p“å!°“å%­6º0ÿ# < ƒp†å°†å±6Æ›8°™/*h ++/0™/ÿÿ /A™/ÿØ-™/l/­X´ X´™/lo\) Ý6?™/)*š/iÐ ¨š/!Ä ½-o\1_Z²/â( /Ùâ.̲/Îé Õ.ððà [\Ê/äè0ÎÊ/8 8õ`?[ ¡U& ý …!QAM »£#0‚-‚-‚-‚-‚·SÍ(yN0 N05 q`}€å 0å ?2iå& ã1 ÞìF0ßÑ•¸­ ¤U ŠðxBmÊ¡ØP° @µSTã/‰v""Þ"0ö†"ó…S  ++ šÞäZ Pô} BÞ –Þ,[Þ!pHøÚâ H’Ç!—‚– pÆnÓ RÒõØ"ãøUŒ­&0 ã¢dU dURdZV0äU€éíåØ@—å  fg’Æ-åØŒ©J%Ðø;øµžÈøZd[/$0øZܦ.íÜllÈ[h  q 0 áˆå ¾&¯>’åyúl(WÉÉb̬¤§Á3 ƒ9?ƒå6}²ÉÉb8††oüµ8^šåÞþø×Þ?@ÒxWS`B9dp’Veïé ¨dë¥-’x½VlÆÚà0sWPH* ++8Ž"PTíÌàæÆäZ|Âàæä ++ˆ´x‚mÊ ++0ÐVo(mÌ ++hV âˆ/6CÊmΘÐÏOBmÒM6ÔÏÿÿÿ†ÐÏÔÏ(ÔM6 š/M6Ð8‚mÒ™$ "<M6O’mÖ‹"ؼÿÿÿ†Ò¼ؼ(Ø‹" º/‹"Ò»Ö‹"%*<öQ \QÁ\Q\Q#á8Q1bQÚ2ï2?d021ë1¿Qè¿Q8ŒkÀz"z"1ÃQ^" ÃQ J"ÿ¥J"H!J"ÿ J"J"„ýÃQl}J"ÿIÙÃQS*J"eæ  ðöèÕH¢Â ++ 0—å à»}°—åÀ—<³R"0 ^†å8„Á/wÁ&qÒ<J7J7ª5-pš˜°sÀÁ'm°H\HVH(H"HJ"mœ ++-†—J" TT,¿^ „?—å rë—"Wâÿÿ ++¥"=Τ1ˆÿÿ‡3¿¤kb9ŠkO0†åb9z‹Î=-¸ Î=8Ù}  Ê=FÊ=®.¥ò?pšåñó /M»Ÿ Î=0»ŸÀ Î=T³Î= ~oL:¬j3ÿÿ ++»þ`#‹þü!ž(× .Å×Tãyþÿ ++@¢# J"¼ü P/Fþž /iž .+þ$Á  ++ ++°:âàÓ À ++ 0—å wæN—å°Ð7²™ñ ™(• •4ß>A™ •4 •4 •4 •p • •8 ï$• • • •ÿM •Å•lE•ÿ) • •½• •/ý• “EG•a•-•&•ú”ÞJM@åϘ¾˜­p¬/£†'€ï,€€€€€€€€€€€€€€§*€&nA%€.^/Q%“&!&  „ÿ ++€† N†å`µÎêµÎ$G/)œ á$*á$O/`0šå °$¸½°‘º*¯$°º*Å(´­H‹   <w8ˆ€ˆ ++ @ X\”Û<I<GÑ(`õ(B9:„ Õ$+õ˜.D 1Ï ˆ=Ï´ @à„â>_„åLDóZ,Ü}ÎÀ²í(‚(n.Wÿ#LJ<|.úþŒPìÝ´/¨þš‹@VÙÏI×BP;D¢¸uo|êd¼S~êbˆF6¯ð(¯%€A mÜaXAÀªí? ++&8H$ËÞb?(((á#àá#ÿÿÿ†Þá#àá#(àá#Pá#/Ø(Õ#HËÞ8²mâŒRB7¨N&HZ% ¯´(Ú`(Á!äÁÿÿÿ†âÁäÁ(äÁ5â8ÂmæÁ:âÁê` 8÷O2mèo-êÍÿÿÿ†æÍêÍ(êo- Z/o-æ8"mèo-$ Ê<¼chò 8XO:àV+'0b‘YÓqqPqÍqD 7D1\bš+ Ê9' ¾9Z<†$_ ‘åIÌí‘EÈé•Â ùYà*ž:Û?/†å` a[¤-D'¤(n;|HÖ|ÒV-åE[@B\`^)Y-\Q `šååò%‘m_àÿÿ ++¡€$_xÿÿ ++/Â:0R`ú ++8oj *ÜÞ@ÚÂèÆÐ@ÌÞêÜÈ@ÌÞä'’(|PBmðÐ0•)5×…-ÏhS¼ ++õ• y°ø!àð! ð!4 ð! ð! ð! ð!4 ð!4 ð!4 ð!p ð! ð!0ð! ÷Eëå˜ ð! ð! ð!¸ð!ð!\ ð!½ð!l=ð!ÿ) ð! ð!µð!@ð! õð! Ið!Yð!1¬.*þÏ0XêÏ ++"Wì ßg tÎ<œ)"ÃZ lÍ”dÍ”‡”‡”‡”‡”‡”‡”‡”‡”‡”‡”‡”‡”‡”ˆƒœêÝ¥# †$Ú Í @/¸L#CPü üËp؉¥? pœ½ï ++£Ìpè./Q´ç }L0x p°Î4Yx oe<OœåðÎ @áòx0ε€À ¿VÜ p  p O0„å8}óäß)É4 ðΠ‰|nxAá@'ÚþÏá + P .ÄþX_½þÿê@Ï%`O€ï ä4#;¨X (%_2mìô#î'ÿÿÿ†ì'î'(îô5ì8¢mðô:ìôÊ`°,XéÚÊÚQõá"PdÊmò ++P×$òLÐBmü ð oÃw•où ++\9&àC/0‘ày$Y$SálIZ?­Ø Ú> óí ‚= Z?" *% Ôn> 7×ý °üìP=,txn·i §.°­ ++™\ €°¾A öú /YÂAh°ÆAnp‚pS‚å @‚p'V - °Òûèt ü°år’T Y1 WW0Wèt] @£œ‹œ`<¼QB@ u/Ùu‘Š4NšAB'X>Oðmú H ÂæÚZäÊÂÈZÆÞêÜß lø  l lè œl¡ø T T ôlPð®CÈlôpøèøÓ @Ó ïÓ Ú 2V@|V³  Úµ €0ù @=.Y@TMD ãÄ ÉUÞÑ\ÕÈNE)à“e/I08ižå0 ãt{h ÈlÌŠFñ´LLÉ&‰Éq6°$ @ÎY1Sã0šÜ ô@^Y/ àDõ6°¥nÖ± ¼62[ &à>[f<à ãàâ±x 'à%> †â汓/0†å0à†â3,7 h3†â;ÙžÓ?à†å@à†âCà†åGàKðÌ" ¼_`ŠåFc öàh!yÙKd!yè ++k 8±‚Y1ªX f(ŒP‰Yƒáù=8 vg87´ ++ á PK'7®~ 7¬~ !`lYþmöÚäÆ0ÂØ ++("vÊmô ++0é V!åhø ˆ("AÊ)p¥8À¥8öILàå pžåT uX’ºO ŠâD 8’º 15žøD´¬” ‰4¬”¬ x° <£Æ | R á@WãïX#Ìð=|x žàêjÄàŒ R_ Îøñà/¥à+/à wà@p=|8àràhà °6ìœSœY@œgà ãGà 57*`Иì0ì@h ã)8/pžŸéô Ú¦‘<à@” MÅ&à8^  áv‚Q@G ì+À /þþo d8d„ dl¢a >ƒå‚€  Áì ¹Ø ,%µ@l9ì 7`ÂŽa¹HXˆaˆ€Ú0möÕ Êâ. 7úW,7æÿìBhB,i/ ++`5/ ++03(XŽ_ÜÊ ++@g³øL ++Pù¢pì€/X˜úG`é/xá€â`á€_Úmüµ ÊH¹¶xo A ++Sûö^Ž cJ pÇ&WÇ&º(O0’å ++ 0k ++„9 ++ÿÿM ++ÿÉ)’{ ++X© ++ÿI/ ++?Ü"Cþ¸ÿã@þÿ ^ã>þÿ*œ .-H¦1"æ ¦1Gü&Öÿü"ÓÿüDÑÿÿ*ÔàZ@Ë ++°Ž/±B/šåB‰$ƒî˜˜”€â4 x<00”0Wþ0”åSãº0 ãÒ* ++ä‡*cƒâÇ(p/’åØ * ++ "»(Ò60Ò pÒ0†b ×Òœ l/l˜úællúÖú°1P&p°!P*§ÛUP™%€âtˆs’Ž ++*1 €Ç0pŽL. @LŽpX( Ž0ŽpŽ ’Ž ++/1Ž pˆpˆˆ/pˆpˆ ú·\£HÐ cL ŽÜ Dx"\Ü(t¼à.åà"ä ÚÚ0Òb!&( b/o»˜ÿÿÿªeþ ð»˜+^uh`h€N›˜08+¡X›˜’%/è?‚6˜!  ++B˜þ: ØÊû/£ÿã™åËã™F&v„ÿÿêš,êp˜p Œ- ++(e Râmþe —˜þ—˜ô/o¶ ++¤ —˜$oHOŠoH/ov2ÿÿÿ…!ov2/ov2'/oH ²/H˜_zoH$ "<H*hY2¯êÜæÒÎÜÊÈp_2À˜@A,÷ðOXo  ++ÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@PÜÂÜÞàÂææZÆÂæÊ@P˜bjÈ@¨äÒìR@ð@PPÒÚÚÊÈÒÂèÊ@PêÜâêÞèÊ@ÒÚÚRR@PÌðÚÒÜ ù$@bRRR@Âè@ÆÐÂäÂÆèÊä@àÞæÒèÒÞÜ@fbfph@ÞÌ@ÂäÚfd\ææB|/mú(Î2oF`ª`ò$#ÿ/9Š¾…/ ++0Ù%?âÙpKxo  ++ .ýbèÍFÞ0—å —å°—åÀ=+Úqi Êqiü'Þ ºRÞ $"âx&E²E¨ý”ýsýýcý"pv I8~ /I† ’ 3/‘ 3È ’¬•†•Q.Gÿötf /f µ.ªm5`  ++!Pz fèSï ++Ð1RÔb@!0’å’€ˆ”—ŠL! dX,,9d":xP 2P/EP ¬œžD_@ƒåš4f!&h!$¨¨X)f‹å! ‚â0Ð(.HÍ ,/;mCah‚Øah 0ØöÕ éÕ @Ô  ++@( Ö¿ª ++-fV :X¤m lö”Du” °•ghah°h‹h‹hB‹å À=pÚmG <Ô/ È/ * À%G < !°†à,& à@¥Fg0g ÞʽژÅf„(i(U(:z%Ð(ø.óþ@/¾þQ/°þX ;]g.ePñ+ùýÿêl’@#d&, L BŠ Ú) 3.00 7/&+ooô.%pÒ ++ !&((‚ co>Ì ºû¢3o2ð  @0$ÈÊÌÒÜÊZÒÜæèäêÆÛ0ß §_ LER€ÚäÊÌZ|"ß LÚÊÚZ|ÚÊÚ ¿ÒÜÌÞZÆÆZÊâ"¯ÆÞÊäÆÒÄØÊ~†¯ØìÂØêÊZ|êäDUÒÚÚZt~&OÚÊÚ?k5 ¾=½&yïØÞÎÜÞèZÌêÜÖòbd~/ ++Ø;p; LWÆÞÜæèÂÜ賞jæÊèZêäz·1´_êîÞäQF# ?k Õ<3  $RæÐÒÌè;?~† oÜÊÎÂèÊS ð Jo ++ L Lo;l;ng’ho CHˆÁ2CH’ PÈÿoêØä07†ØßK*X¨kØKxçKékx¸ß%ŽÅk!Ro ++ _˜Boê”_ Jo' ++(Ìqo0y_ðBoyÿÿÿÿi  ++/ yŠWÙ}/Èc3µ vwˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ†ˆ°ŠW#‰]-ŠW*yŒ+S àœå“4¹àœ™8œ™+À¿3™ ñ@ÀÃ3™PAA ++eP @f™’œ™2™œ™"™™þ/‘+ðFX ÛÂyDÀ‘  ù•«˜D;/œzß0zß l|•@àœå ðb[(¯ø/¥A°Šå >*b["ü‘L"  t0+¥±pšå°šå œlž^& a B=:µD$b[Np $ʼ±¯P}».iPN(9(ŽZ XôÁæÁÖÇqL“þÿêì­–  ø˜™Q ++À¥Q}¥Q X©Q ØhÄļ _.• _¼# ´„:”š~ X,” ”<œ ”º^Ø ++RöèáÍ¿üö&|(aÊ/Lÿ8.ýpþ";ý^á +… áOÀšå'P{ ýÿ꘢°ññ3.;ªÃ.¶£oooÞ#5oÙÉ`qˆÝ2`Bo"øTÂØÒÄäÂäòZÆÂØØä 4”{00àƒâ%H3ƒç<;ƒåô IH„à ã I1&àíVˆ ITó6_0„åìñ°Ù°Ågªðr)ºp9 Bo}Ê`o *-) ZÒDUTÜÂØÁE@:Ú—L(i" lk<4/ ’.}3Q9?O šåä’s‚B7ÖÕ.RoÎ+ ++@ø>H/ÜG ++o/X¹ b#oŸ°ž¸Qb"J_/"oJJõJ.Jh( 3¸NH0›%"'.. >zyª×ªÇ D‹{]1 ·&0ÎppiP @8·&·&/ôä¯% ׯ%,Â,­†D’,}˜DbâœÒ‹å ‹å 0‹å‹& Þ°8Ž · *•8ŽÒ!°šX&6|›U)þƒVoƒå ƒåŽ¬ŒX@Ž°Ž "Ð.— l (g(à4"./ÿfõfOÁþÿê0.!à’|0a/I0;/™0/à0§/¬0œ0Œ0 ,¶j¶DO¶\\T U?*é ++P/0L&è¯[N‚å ´, &, á”Ó(ª(\zPlÐ\MD(1V"/íü7*.Á 7*.ÙüP.Òüf ?¨ªf f _o$kTI+N”6¡b˜Bo&,",B-ÿ"-To ˆ,& (" èqó¸@H -?o$9 ä½%o&¤DOAÀ ++ ï'/ ++(…{3šo( ++ ç;h. )X$*„${B$jB$/`$«+$$ $Š$ÿ%7$¨$óô ãô Ö$,Á$,¬ŒD‘$,|˜Da$$@ t7hç7 Á (›7 ¼ }(hä  d8… #ø P ö †#~´Ð%iÐDNРЕ b.'È!OÌÒ(«({|ÝtÎt/™ýt. ++t…P.~ýâ †t Ú" oÿb,oÆZæÒÚàØÊœ"`o„&^o*o- 4+ž"ˆ*ˆ àˆŒ"P¼k/ ìz):o. ++ Í`03†D ¸o00æfg0æú[fgæxo> 9èzjW–¥R…!Ix ++'’^‘z^/’^{Šj’^.âÃäk“p#8p#8 ++$#8 ›5ä& 5’ äRòfF ++Žb ++Ãfv_NÃDWDQD'D’Ã#± <–EÜ<–JjxÞ #8#p†Ðå+8xÞ–Säÿÿ ++«4•´”‘¡’Þ–TåÞ xå {¡’má’×îinÕ.nÕ&0™$îišhí Þ îi0 fa/ îikŒÞ ¥ÞŽin2ÿÿ ++Ãþg:&Žþp‚Ži"‘®Õ„LG ,©_<€ƒ Á’?mþÿŒ-eÎiPt›ŽÎi</å< 1Áÿÿ/0P.5PLŒ“å“å(iA“#@Ç6#‡ÙšÜí¸+’”Q¸¸$̸ ªÊD8¸0!‘¸QtDWDQD'D!D¸ ¸I’¸’¸ ¹ Œí.¸¬¸’¸’¸’¸·¸¸4Y,…0Ìå¦q*U ¸¸ÌåD¼ï‚å ‚å 0‚å@‚å¦q&Õ  ¦qª d´Ìå¸ , ¸ ó6DMl/Ql.süql#0®‚o[%08B­0Bo:  ++ÀVÃV¡0—å —V¡ V¡4 ji ji V¡ V¡4 V¡4 V¡4 V¡p V¡ V¡0 V¡ Fà V¡ V¡ V¡¸ V¡ V¡\ V¡µV¡l5V¡ÿ) V¡XV¡­V¡@i íV¡PQV¡0VÚ… F¡yo6  F¡ˆxºhû~; —Ô;RáI$f"o÷ÏY +Y ++fL/ „ëz 0„ë `D„ëŸå @å0„ë À¦žÑ õÄ ++Ä& ÀÀ§Xïvg/ùvgˆ\àÿÿêz`(o2n…%o4!)Qæw`ð ++PAgQ ++o6È/o8Rkÿÿÿ†6Rk8Rk(?8 ++(È2Œ_’o:È9Go6 ++ ° º`°/ piC<Áÿÿÿ†:Á<Á(<ÁÀÎêPŒ_bo>Œ1#&xÇ)8p?#ùo€ý–¨”@ œ!/  ^1 © ¯@O(BOÿÿÿ†@OBO(B*òOòŒ/3ÒO'ƒt 9ºB0’' ++`bí+}0í0ãþì#/í0ˆpL–/oD1á1T1 1Z1ö1X1Ö1\10Æ0/°,M,M3àƒe£Nƒå N2„ ˜#062œë,Mp ++‚BoFA¥1è .f-–ÐÊÆÖZÌØÂÎc-H+6‹&°,b ++ 8¤P á =2 +y¿< áß °€™*ÍÇ[ °ÏÔ‡Í6 Ê ++û!p9v²oF ++89 hpeN!ð/oR!ðÿÿÿÿÿÿÿ-?oP !ðÿÿÿÿÿÿÿŽ/oL!ðÿÿÿÿÿÿÿ† oHÆz ” ”øîpÿ,|©| HœÄåM Ž=" áM.Ô€Ç ++LS3k!%ï¨6!ï •*•"p¤6¬6 XU¼ù]ï>(!î0]ï #ˆ9LH E< ì 2¡í'oÖÉ»¼¤y(k]ÙO@@/ ÿt/Ataazîþÿê4š§p mÌ0$#UpBkº§ P0I”8#L_šoHm/#J]#ÿÿÿ†H]#J]#(Jm/5Hêì/oLm/:<êì/oLÁ#NÁÿÿÿ†LÁNÁ(NÁ5Lêì/oPÁ:Lêì,oPêìOoR(M¤TÍÿÿÿ†PÍTÍ(Têì/oRM¤Pêì/oR˜êì.oRêì§Vj@h§V\`§Vÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’/\ §VÿÿÿÿÿÿÿvoX €—JfS—J¯K ã›J—J  —Jd“J+£V£V 4)ŸJé… Ü@Îÿÿê€)²ˆ/±$š’“ÿÿêzl+'±HBob ° oÞÎèÊæèt 3 rqCl?_èîp V  ( @lPTãž` ”ø Ê0«k‘kD| ++P`yCô2q`y×ÞTœ/àL¬yÉL" p|†–§ÓRÞ¤_ÝÈy@0Šå ³åhé `1¶´@p 3 ++;ã1Sá<~—â1àŠ *à `âš «ä¦ ¹+ä,D)šãh h.!hÎr" {ô÷nüq¨PohŸ7"Ò÷Þ` ˜‡EÐ@vPèæèÒ© $7æ*QèæèîùOûv úoV ++0“) ++X~sÇ** ++PGAP`@_zoX±%#Zä ÿÿÿ†Xä Zä (Z±%5XßY\±%:XßY\ßY#^Áÿÿÿ†\Á^Á(^ßY5\ßY`ßY€dH˜ÛY ÛYHë?ob d‘Y#fÿÿÿ†df(f‘Y5d‘Y`‘Y.`‘YÍX(áÌX›l0Boh0/*¡ËX0oz@ÊœVHü˜Váñû,܈,ü%’ä%;ü%5ü%ü%üV ª† ª†0No(#È4&’%ü¨«X ™ð"0Š¸4&@³ÿÿ ++?ý à[Y¼-.@(Xo&,X‡8" à&õ°‡åÀ‡å@‡å ‡å8&Ð-ÿØÐ-ÿÐ-Ð-`} &íeîlmD,&ªÐ-a &Š¥åP/éP.þ&.þ 5`’ # ++  'oj h„9yet HyRÿ “å“åp“å°“åê^¸A& æ^æ^ ¦Êº Ý%RÑO((î^0"0&Y÷ ++ Í"0"YAO “åž,n…n^†HnHhH(H"H/0“Pp“P“M&à?B-B-*,/1,yHÐ ++_“•&=êìv_Ê—Ž–Ž$— Ž_ ‹å Ž¦-ä ¦-4Þ4 Ž/ ¦-©K’Òƒå ƒå ƒå@ƒ../0Šõ$^5 ç• ´¦- ŽÄ.õÄ_¶5SAþÿêRhÆ&¥@Bor  PDáÙ ’_ ++,.,(,,Ì–5_5(Ô¬5(/Y5(Âÿÿ ++—DD ’ .šå*îÀ<aO^¡×ó=ÚCqe=Ú ab¡ PS|˜á¶îî_ 0å5Z4`åƒåÉPlƒåƒåø")Ýà¹P1`Š‘,R10Ðsî ÁÞf•,p k ôM ™ (·(¦Ÿ*î *î-PàÑ*wÙþÿê>z%ÆP\ Ç›¤;°H°ð¿º5 h$Ÿ†ø`ÆîŸ*gîŸ4. ÔKÉR îŸ? —¾´ ½T (À"’¯ˆÊŸ ™S”©ÄÂ&ß8Ѿ´®<’ð}o 0¼`XÀQAÀà(TôxBop  ØÊÂZ|äÊÎ Š5Î@šåÉ#Ïfmpœå °œ™V5 ÜG°†å DàœåŸ;/Ò.ÒöÙ ƒXmáÍ ±Á^.#†$ˆú±ˆú  ¤Êê §9*p¦È- ++³9/p‡¦wJÞå i½" \zW²/3°;F<¥ /1ŒÈ ý‚æÞäGc§ù‘ âw™Ç‹<0É™É *ù™ÉDÀšåàÜðö Äþÿê8úBol ˆ ÂÈÈZÞÌÌæÊè¨#</ —«« «6þ s k8S^ãjh8ª5ð—› þƒ×ôf” ¿p ¯ f¢k]*0oú ++^ÿ/awÜ\vSbÓ hóÏ [b4Db bm°˜^q^µ ,µ"ž ++‘ƒšWO I:Jû^M² /0— /Ij#R±þÿê@jÿåò?n öäòîäò ÚòNjjnjÚòØñOUxB;´e7^¨ ++ol[# m#À3¢ñn“PªolhŸ€ŸŒ$l8 Šop¥5 "hœB ++op|+ ++@*•§ QRor„©U@"ot¿Å4_¸Bov)ÿÿÿ†r)v)(v)"P©Uz//)r8bot™$ <(÷ù´4x°ÿÿÿ†t°x°(x´45t8oz³-* êB0ô°1X8ÁC†Œ  ++ØmžMZ ¬3MZáA“_à„å!'éíAhŠ  !(Ý-þÝ-óKÞÝ-9Ý-3Ý- Ý-_*ÿ‘Q%%Õ- ÊÕ- M…'.‘ HÕ-µÕ-!à“ÑAÝ-(øqÝ-ºWáÿ°‡åÀ‡å@‡å! ‡å@å-ÿÿÿ£ µ[õW&µ[X/uµ[ÿ) å-Oˆþÿê`/ñ` på-^å-  á- ++&TV„ y! å-Ï“åp“å°“å!é-ºé-#À›…£p†å°†åÀ†£4†ñ-†&ñ-ÿ®ñ-H/Añ-ÿšñ-Œ-ñ-l­ñ-ÿE/ñ-7?ñ-*ñ-e‚  ¸T ñ-‹Qñ-4ñ-ˆñ-ñ-/p8 ñ-ËQñ-?—DR *VÀ†  I,ÆI-"àƒ,2`Šº‚?šåªZ椴.Qøs)ŸØ$¥+/‰HB À}+@‘Ø( €†¾ ò€‡l‡€‡€‡€‡€‡€‡€‡€‡€‡€‡€‡€‡€‡€‡€_‡åàœ[Q{ÐpÆV$*A /4|ú"ÿˆ( .ïhâ] @ÍÑ-,¸ª# ++Í-†Í-N†å°º#j À+. <‰”Dna. T,õÉZf"àœ)1!àœàSàœå| ®"E8 cÑTp *2p'Ó¹.°½ñcÑD0„åÙÊ ¼ó$KÏýô´N.Ÿÿ<‹ç• (\(A,ò=õ.úþ@/Åþ@·¨@s²2PŠå%o|e~u`+ð ¬/€¬/Ø6"T›Ùø Y[H:D5 ++¹ô àåpžÅxòž$+ô-!@Šà @.D ¸Öˆ [@Šåšå@ØÖˆ @+[ü1 àŠïZ*$àÀ fh ã ` `jÔ]` ÔãÕÎ@èÿÿkÝÎÒ_[ðØ ++ ËåÎ ++ ++° ++f_ààãàj °ö*0@ á8 ]Î (¡*(H.$@DD¡(0úó[4```ˆ` T(ˆëÓž’P^á%c]||@à ã$(„P ã  ã„…„Pdx-pžD´´H´9ä.¥4ˆ/0žn lXIÄ.Oÿÿêø/.MÔ,¸Ü±Ü7TÊï]P H w87úPó]@7´7¶›Óê©$ !A87öè 8`7¼°@7ü ¦P7ò0=(9p WR÷8 êÜÊðàÊÆèÊÈ@Þà@üæ- !ì- , (Ä [„8€ ++(2 H^6˜;% µ S!A!Z7p ++ 2*Q ºo‚2*OBo„2*†‚%ÿÿÿ†‚‚%†‚%(†2* š/2*‚8‚o„2*%"<2*(ˆ°ÿÿÿ†„°ˆ°(ˆ2*5„8oŠ2*+úB0’% ++€åWL p=åW äW6äWŒ/.AãW°ž !p €ØPÐi *ûÑæ *C *= *(èW *Qà†âÑ@šåàù@B†â#àã'Á"+àXuÀ3*8«Ó# P¢ü½  ”ã3*«3*À…°“åÀ“å#*se#*X0&à#*9Ÿ!@‡å% ‡åH+*ÿáì¯+*ÿ ‘"Xh,|Ôƒ?XQ™Xÿ9O†þÿêX/X+*/þýXš+*àXR) 9 /*m˜ ¨/*Ï&ö àŠå à“åàŠå “å“å;*%ê¾ê ê^a ‡å‡#/ æ‡å°‡å!À‡å%@æO*O*O*(5O*O*4O*4O*4O*pO*O*4!O* O*<aO*O*O*O*Ì!¾!O*\O*MO*lÍO*ÿE%O*) ;O*jO*Z– !@XÒÿî_î ++%Ð.Ð(Ð%ÐS*€9%à“S*DXî]œ&0S*?%“D¡DS @Šå ü ;3 a!ü}üüb ‡å î⒇將åÀÞ$ /%àü+ ++(ô rPlh[HU°è¨% d_ãÿÿ ++¦dÏd‰Pÿ/P=‡.)6ŽP5.€€ =‡/©=‡ P0PP°»ø|6Ž| .|.þpúýÿêb‚À[.%(Šþþˆþ þö¼ö úû@ö&àúÿ@ =:€%=:ÿ½!=:HQ=:5îÿa=:=îl½îÿEî8=îJîfŽ ˜7C€XâÄ4úd±8&­8sJµ8eo —å! c“ä¹8/ +Ñ pA,ÙÎÿÿê ++zB  ++øk8@˜Z ®/’6„gm?à—®#XO0…FŽ%.HŽ%/;G•&¶ ö–& é² @ÔÖ&,¿×7D¤%\ ×7<”Du>ÿ8n°—åÀ‰]_O3 ++Ú#QÒ0 A]/À 7¥º0é]s8%%àš´ÕÙÔ/p8gÝÄp¶(s8s8S „å0Fs8 Fß»1Ï›8s8A] 78¨š¯8„Œi(³b=]%¢óÐ/¾þ@°¡«2.lþN‡8IcèAÀk(7 ”(22Ð-TºoŽ 2Obo 2’[-ÿÿÿ†Ž[-’[-(’ 2 º/ 2Ž8¢o™$ B< 2²•”°ÿÿÿ†°”°(”°/Ø£8zo– 2$j; !RB j;O‚o˜_ š¯ÿÿÿ†–¯š¯(š_ Ú/_ –8Âo˜_ %b<j;(œ°ÿÿÿ†˜°œ°(œj;5˜8Zožj;* !BB0’ˆÈB @{P&'-ðš{0b7L¢±2 §§"½µW4ý á ’åp’å°’åÀ’q¬ð\pO[¿»é0—éSe ++»é$»é1»é!0^± ++Œ€€""xVzxVD kDeD'D!D»é½1à’ƒ"?p’›»é æ»é »éUÍ“|»é”}$ñyñN±*/’ñN±/’]/q:×»é Ô;¸/͸#`»é M»éí9ýli   ++@y2["ÀBŽ·8y 1!0ï­„$z ,e! •ó ˜VJ,,^~@4@ô' ©!ƒ£#žÚ© 1 1p0Õ… «$âd҉ů,”T<,_¥P_” ++x,d f}(l $dG°/šHHQH XD_@ƒå4 $Ô÷-!,0,Uãüþÿ,,/õþhõ€äÕ¼¡¹ 0 Ä[PpTÿÿêDjߊñ @#d&, L BŠ Ú) 3.00 7/&+/Š+"pÒ ++ !&((‚ `Ac>ž ºø¢°oo?’xˉX]! ]!hSWxo ]c@ˆXXT#’ HÞ o„TD† ++¸˜“}ZBo ÷Oo¢<Ó¤Gÿÿÿ† G¤G(¤<Ó B/<Ó 8 ++o¢˜M ²<0<Ó!ðÿx‡(mr“ÿ¦)»3à„µ ++“„å „å 0„ ÷îßÜ ++ÿ¨ ++ÿ ÐQj ++ ++ñA‹ ã’‘ /ø./…ø.ã¤jàÞàÚU7Ó¦   ++àÚZÞà²`@ÍO·ž6—v>_‘>_/˜y" z_@&RãD¯ À  á^" •» ++ ñ" t*@+é»TÎ :¼PÔ­Žàð  õ°à ã0’å ’åD1Ø`0“åC16’± ã3 áàŽàóµ»é¼" @v/@²]²]"é¼" Hv¾ t@  ãtO ŽàŠ® Þ ++h2' FŽœéœ"p¶FŽO@šåIppBÿÿê ²^Cè7ª¡ Ó( ++i(vgP7´ ++éÐéw ²o¦ ++pB¼ ê@¶ S"o¨ZpV ++XM+/° ¦ª’`a ++àêæÐÚ&U¦©ª©ˆÙ*Ç. ­­ O †å±M  Û±¨ŠBo¬  èض²@& ­&ðš ++à—å0žå€Sã’ª£àÄbÎã0âà„e@^Æz Žà|CŠå0•ä/­-› 4DX ã¸L À*ùÀ" xÎ* à•& &M& Àf@$/šå® a2 ìõâqáÿÿê —IšTy ÊcW"â"#à”Ö è8È ÈôÙÿÿê<â#â á0Îãk8@/ÕO@šåSL$œ ++@ 0eÓi- 8 !`Zd1 ìW' ++°:pHÂo¬± /xcÜ®cÿÿÿ/Ëéc ++ìØ b®b ‰ "O0—å%F 5Š›•8–:4¢0c ++k4A™NÚo!  ++#Vï0„å „å£rïÄÉ&¡X/!2:7NÒY$¯3Oiz¾9, ++P—ø ˜HÜàZÆÞÚàÒØÊ@Bƒò >'Ð Y&"sqr2La ++IlW:ÀŒ† ; àŒ»ŒUƒ1àŒI(=!àŒtI/6¡p¡p‹pµp‹¾±(=!à‹p/›+› p€p€p€p/ôýp@‘y‘ypppp/Óspk ž žp‚p‚p‚p²C,)€p3ƒå9%% p*‘"e l†l†l1†å,l@†åîl†l†l]†å`Šppp(0p"ìpppOp(p/àààp.p(pPp= `Š: ++" :Aõ(?$`Š|°$ $ñ£$$ãk#€(€$Õ ++H6 ++Çî ++(„+þ8)#Œ(Œ(ª ¦(‹(3þ›y#(ƒ(QŒ: $Äxò X(}Ù) ßÚ­ñ°åÀå@å å4gQ#àå gñJå$àšå+àå[à—å/àå_à—å3àåcà—å7àågà—å;àåkà—å?àåoà—åCàåsà—åGàåwà—åKàå{à—åOàåà—åSà°ˆ°L;1à‚C1à‚®1 à‚ @à‚åú Qà‚åPH‚ÒEñà‚åà—åà‚åà—å#à‚å#à—å'à‚å'à—å+à‚å+È1‚å/È1‚å3È1‚å7È1‚å;È1‚å?È1‚åCÈ1‚åGÈ1‚åKÈ1‚åOÈñ‚åSà—åWà‚åWà—å[à‚(1_à‚(1cà‚(1gà‚(1kà‚(1oà‚(1sà‚(1wà‚(1{à‚(1à‚(ƒy)1Šå7È â ú Ž ­â |mÊ ^O@P2$×n æCú-(ì˪‰.hþÜG&.äýÃ"¢ýgJ .á cŽPc»KB#d ++$o° ++%#ˆ ++ª ++‚ ++C̈ ++˜” ++œ ++ðöˆB (Ø_ ++€Tã‹ 1`ž SÀžåG$'K½ ?v!C&Þ7™¥Z; õ/ 3 /Éù3°—å@‹âà„åš!c½JC@‹å 4/4P44;4=4474*44C444?444K4*ñ4#4G4Þ4'4S4Ë4+4O4¸40@Žâ"à‰ 4/¥C@Žâ44/’C@Žâ 4 4/C@Žâ44/l@€(„€(,/[j j,Jj,©´),9,#,,,(,',À,,,àÃj]>544 ‡0$áп.®ÿ§¯ŒyfS@-/ôþáλ¨.•þ¿J. òä(U!0Á `Bƒð @ÜrÜ"ÇS¶ ++ƒ¼)‰!É,MŒ÷ 0# ‚â 3‚íb_ ++°){°,w(/,¹KÅRJ$J$c\ù|!€_D,ÐkD, gD,žsD,NžoD,8ƒTmÄ°@[Ä'À@\&0*'{^v c~Ÿ†OuãynËvsâ†å!†å%°†å)À‹/àÌ3tëfZ&$¶&XP‹Ê° ‚¢JH:}½1 1à+S PL2   #'+/37;?CGKO£ Ç+¯+¡“/…ÿÛÿ€.®þümŠèec +1æ(Opšå9Ì4v‚ï¢o°o¶ò÷ ++¼oÈo²–5o¸;7oº ¼J!AHJ0o´m.'hE¾9À9ò( ++Îbddb<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZn`n`&d& b&f& d&h& f&j& h&l& j&n& l&p& n&r& p&/f`& r&| p|f| p|f| p|f| p|f| p|f| p|f| p|f| p|f| p|h| Ppr(pO´&…9(à ä5oºdâoĽô¾ÄbÄdZWð8Q 7¦PE8–¶J8 ú o¸oºo¼o¾oÀoÂâoÄl°l‚l/%Œl#تlžl-ˆl/oÆl#Èl/ölD$Ô!/œl°l-”lªl-˜l¬l-ÌlÒl$`XX`ÄPÙ ++lÈØ|f™øB  àØSu°ÀTÁ`m€âà€ì_ Å4L4494œ´Å-0€T(”TÐTÐJ0ˆ/ÐÿP¿¬.™ÿ´ N ++â ,¨˜Bƒî & @+¡¸3S ++O7©7 ~"Sƒ:@³R%ýÂún@àNâÁ0†âƒçøýå‹nâ!`÷R÷ ÓDÓÃ0å ååGÓKÓOÓ!?,Ó„»Í»µ§™»‹ï/vÿ“.™“_ßOâÿÿhè  /â5ÙaN"Ñ‚2.ÀQO¶p*2à€!!à€z¶’*£˜'¢3?¢3P 0’0000p00_00N0( Â4=0>\( h*8(00,0000/÷040æ0$8`E ?Šå<&4΢üÿí<=Opšå/P.(ý@qŒªBq.DQò‚• 9é 7D š!?D-•?DÔ ø ++BBü8Bq :&9@ 1Â> –?åwa„êƒ4 •4 ++>>n+ån^šåÏÿÀÈô šBoÎ S˜ êÜàÂäæÊZ˜b Zz€! ++ ãè?×±70]”w]Ï´ÉÓ]D¦D DDDP?'à‹_”g_¹µ. ºJRnR¼ˆ> ”¶ ++–1p€Ô>Ž0+ÉŽ0éJ"p´@„ ”å áPP,àDA S´D°“D<S+0Ò …Õ L@L@ ¾ ¾ '@H@aK ÿ[ç@+ @øXÞ„úšt}t„” O; ++$ 1$/ì$!$/³$Y$/ÿ$_$L$/ò$˜$B$ $EÚ ++ ++ÄÀ ÀÀ˜ ¼1/9¼øDø1°0WãMˆDê5^  0<Y<É< `A *àÿ³£-rBïP/Y ¼Pµ4H4Bù ´ øEĈæøð Vš²ð4Û-4 ¼S3 „â8DDëD/D¸D±D "ÊýD/ D"»ýD/A D‹/á D¨¬ lŽl{_lol/q ++l  _ £] +é ++¨ x t=tLJp /Y DJ°– / \/&0X X \ ´š„/e „rXkÈ "Øü\/Í È"ÉüÈ/ È‹/© K‡D/DxD/MD‹/íD#\DID 6D/UDŒ "%üŒ +™LŒ "üŒ /ÕŒ o”/”¤””¹”¦\ ++L\ ++œ"Ïûœñp <À<+-<0”D"DÜP ++ÔP„í% <×>ø‚ø/%Ð'"qûÐ.i< +</0€+Ù€ý`Œ _0†åá[ì`Î/‰˜GâC3® "û /é {/yðÍðÆ!ðšt.ÕôÎúÿêj<ˆ¬ˆoÊ°oÌ(0ö±†ÂæʘÂÚÄȆ4å¨1@lblfKºyBîxXÐ ðW?–.ÚI%Ú/mÎbm .cjZoÎ[EòoФu2T+b!ˆx¥RRq $æ. ++˜¦bC*oΓRzŽÔ  à ,3BŠðàäünd‰7à9’ YU œù‰1Qã@’5'/ TÅT_RÓ-0’$_€åï/1}Œ }/ 0móqÄj5* / @Ñ9a Ža ûªb_@†å0ð/ádß]ÿÿê.roÒ(G dG¢è˜¼ß8¢oÔXBoÖT‚Ö¨~TpHoÚWê!ZØú' ++0MXÙ*ØØØ‚Ø,¯I=Ú ++Pw ÚoÔ ++(%bRoÎ!lHŽHoÜ oàâäæèêìîðû7aEt L §$TJb‘C€#oÔš Š}0¨2¡¢5œ Lh·W5œ ++PÙ%Êñ'¨(gHš ++p)/#R))oò)%'Ú)n€< ÚÞÒ 91Qô L _hBoö‚öo`Boø®‚ø› }ÀÓ|šY s ’ô ì ò”6 ++ºW¸+X‰fH7h ++pL R/1âP)7"P/7j))ER),;ò) ùW?´ ++˜/&C/0¸Cú4xîúî‚úî& ++hZ&€öÆüÆ‚ü´m@oþ ++p%O ++$˜ö‹Y#%S ++#Fm%SÂ}e0REª ++Æ#G.5wâq ++ z]£¸(B?À©PBq¨ q~ßa?0 ì"ì"2~ô")ô"'–ô"Jô"ÿwq [(ô"dô"“ô"©ß¬ ɬð"¡D›ô" iRXô"MO Ú+Øô"%”%á@Šì"ì"\<\|è"=è"€m30.ùt—PŸü…n" Ù ‚pià"êÜ"³¸"©$ $ÊÜ"$žÜ"H$ò¸"V$B$/ì$–$A# Ü-/EÜC@2 ++Ô5^#˜\eÄ"/™# <V<Õ#X aü"½h¶,$3ȼ ô"øô ð"ùð"h4 •ì",$4Îx!/õ4Àà"/- 4‡/É 4„Ü"Š`yÜ"`v`UØ"Ô" Ô" ÉÔ"Ð">p ++Ô"9Ô"0}Ô"t»šxAÐ"vPo¬ã@ /¡ ¬Õ€!/Ù ¬‡/u àC–4/Õ 4ˆ4/ 4‡/©4V4E4I4/ 4 @ : "/E@ ,œ"}œ"t| %("ª|£|²|¡ô Iô ˆç`!‘l 4Ú4Å4P!L!#ü ++Œ"5Œ"LÞ²(ô/¹°Ž€"õÀ0 ,, €"e€"pÍì|"NìŒ"2˜ 0x"mx"Xè ùè2 ++"õú /Y ++_/Í ++[/= ++// ++¯/E ++¼$.Ö\¼$ð*jq"q˜dt /\lªX ÿr`P¬qq ˜d\lY !rb3ñ.‚ ^ ++þ  ++ LVq (™2ú ˆqq ++*˜dt+!/\lXY "rd¡'qyHƒ ++ƒyq .;÷%?\ld;X /rf…J‡ ‡Ò°qvq<˜dt„%D1X #rhŽD(ŽQ 8• !º  !8 f "¼Pq¼8'&l8'/q•v%q•/q8'#p?Mq ++˜óU ++qó?q0'ÿÿÿqzqB§4& ÆR] #rjûD ûT=þ'þ" ++þññà'"jà'!qà' q'/qü‚‘!H' Ó'&qÓ'/q Ë‚ Ó'%që,@v êq@Ó'ôqrq$˜dtØÊèîC` #rl¥"  B‘'Š“/`‘$ ôHqdq&"˜dtâêÞèÊ^½` &rn  D=¢"Ì¢ˆ&ˆqpq( ‰$ØØCÌ p' C( »(P(F(( Ãbq*˜dtÒÌ[c /rrž AU PœFœZœ*œQ`q,b4æÊâ\‰c ++6b`` Bõž‘,‘Q^q.ÍDæÊèBPd’ b’ C“õ“.“r\q0$D4äÊÆRf• dÄEŒ/hŒ0¤QVq2È4ÚÞÒ\h¡ f¡X BP w2wôTq4&˜dtÌÞäÊÒÎÜ9j{ h±F< ´4™QPq6ó ÌÒ4ÂÄØ\©e ?b`j›H6QLq86VàäÞÌÒSn› l;F=*š=8ŒQNq:ÝdàÂäÒÂÐEp‹ n<E?:}|./q|.h|.SPBqC ¢&0¨JJ|.= %Ú= ' l |.)/#B))oò)%'ª)V@q¹‚>¹g @®‚@g w.Ž"/1šK)7"K/7))ER),;j) ++8w./&Ab/0¸C:/hîBî‚Bî w.xöÆDÆ‚D´w.¤&M:¤ w.#+Q ++ö\Fú‚F\H®‚H\ŠqÀØÊèa%Y¢0%[R:0 J00¬Ì/ö |   ÜàZäÊÆÞÎÜÒôÊZØÊè·mÜ/eùTò(y +]‚(¢) >¢)8y¯^© › ++à†õw* `O1ž/µd]…¯A] ¾!vncÖ.µÖ›”{p ’BqXÀ1:H ì-Û%h蜖|ž \/å'P<.q»N=U/Í p "GþC&/d":þd/9d'@dD.Í\²\Qô, , ›[¼ .‰¼ëral±—?*ƒ*Ö é½dÀ#Eº¸!à •d*à/àQÜ*E Ÿ'†‹9@Š½ çç_Rá:Ñß4Ñß*oPÁbcä¹t Q #( /ý Ä'0 Ð/àÄð0žåS㯠0žå&Sãã)1 “ˆ©v¹œ$“åÝr,“H¿è@,9á# Ûé!“fX\¬±§ãSá&DPIýÿêh ++© üii‰˜¹˜üø¹˜L@å„&¾ æ4@ ä!ä/ ä//á ä[tÿ@šå @”å0ƒâ&Tãÿÿ ++úè"çüè/… è//É è[” t ÈÍÈ!0“ ÊàÇ"Ä0" ¼10Š!i"0Ö‘W0Šå âŸüÿêü¥ `€0šå@Šåk£/à¥ö Ÿ|é @™µö" ‹Ùp0šåP|  ++°{°/5°//y°[ Ê&Våh]˜]˜G%˜Ek Š¼8z&3à€¬€¬€4 ÿ-M H!©xpšÚÄl†å†•/ápø/é´ 8 j¼دvÁEk²³3/ ++íÈ´ h#áû0h[ Ì®Ì/iÌ//­Ì\D”Ø .aØ .Žý &‡ý³/5øjý%S qLÍ8î}rqN` ÓÓ‹ ++#¨,)qP,X jqR,#T#% B#!(n`V@`¶XZ ص È .e ì›SbBqXÛaâqZ 8›ÜGq\ ++`Ñ/êô^ô&Â#˜L`),ú)p/b{&²LC`qd׶@Ì°#*qRˆBqh^B  Â!eü ú•&y?à áT  MIT PT T t¹˜ ++t=Ñ*h3žå ˜#`³ƒ6 Ev/Õ \³ÓôKCOª&†Â_à áÃ",Oª À¤L q»GœÃT  ž$˜‚.Bqf£$æÊâæZÂÜÈZ|##æ~8>Ê  ÅÅL{êÈ` ^ã0^ˆ{ ++p$$,1å h/ñ·`ÿ,Á}œ\T °dmmÜþ.X‘ ++B.P”µS:qfeÚ' ++«ªrúqh ++H# HœjœpdRj–1.È @qt²n@F qlKÏ5ÏÜî/.*aÛ280.P±±//k W¹kËÄW0šW;-!q`ö5-vúqn ++(©oD¸8‹p‹s˜oÌÀe!pqrXqt¡!¸dP½C/ "$žòPqh87—/˜6 Ìøqpˆq\H&¦- ++(æ)?H`f à0(#$¶1H@_&IÚêÝÕ)qv z¢qx ++ ‚&V±4z ++H/‚ÂDqX¶2‰À‡D(¥°ŒH 2ІûÔ ++ üæ @Äêè@ÎÞèÀ L(ˆ ŠŒ¯Ò WB ++0QY‚q|Ï …QARq~Z#ð…QŸÂ…QÿvŽ Yˆ …Qf…Q…QÿÿÿkŸJ!•$ù=Q¶$ò=QŠ$4$ÞaQÿq!aQ8n%QuaQ _<±aQx=aQD$†aQaQÕaQˆqaQD×PÑaQÉaQ aQˆ/¥ 41GŠ45Q`y5Q\/é ++1G/-5Q°/ñ 5QC÷ÍNQ5QéP‰5Qˆ%5QDª4…5Qœ4/½ 4‡Y5QD]4/¹4 ð #Nü…N jð @5Q-5Q”/Õ5QOû PA5Qî4u5Q\/å5Qg±ô/i°¢5Q¥5Q\5Q˜/Á5Q?D5Q5Qx©5QD   5Q`}5Q\/í ++/15Q°/õ5QCM5Qp5Q$5Q“œq‚˜fAhºD p5QÏ„q€ ˜f\lhE r5QbùO€5Q™2‚²P’q†*˜fÓJhùD b F„5QHƒ†ƒŸŠqˆ.˜fVPÝD /bb…J‡ˆ5QŸèqŒ<˜fäPjºC b FŠ5QQ ++5Q+Œ5Q*r5Q«=wŽ«=5Q'Ž5Q–5QÿÿÿŸìq”B˜fáP ++jPI bfJ’5QT 5Q”5Q(p5QŽ5Q–§B˜ü‚˜5QŽrCšË‚š5Q–5QŽ5Q—âqž˜fóPhL bLœ5Q ++B5Q+žpK™Äq "˜fñPhE j 5Q D5Q ˆ˜Úq¢ ˜fòPhÇ l' C5Q+¢ –Øq¤˜fôPh”L /bnž A5Q+¤œQÖq¦bóP/hr p B5Q¦‘QÐq¨ÍòP/j`’ r’ C5Q¨“šæqª$˜fðPjÝ /d`ÄE5Q+ª¤›Ôq¬&˜fxPjµ /db:F!P¬™QÒq®| vPj| /dd›H®QÊq°6 ++xPj’ /dfÄF¾P°ŒQÌq²f yPjï dïE}²¾P’¾Pn¾P–̯0¨Ó¾P’Æ ¾P .!ú)¾Pb)TL´4‚´TL¶®‚¶°P¦/=°P5=°P,9Ê)°P ++&?Â/0¸Aš!hî¸î‚¸°PºÆ‚º°PK—°P /Oj\¼ú‚¼\¾®‚¾\‹/qÀ\Yè «P%Y²°«P «P´«PîM7ö° "ÜàZÈÒæÆÞìÊäZÜÂÚÊæ³o/gp"Vù-O  ãø +eÕ'´PÀI´P`½G6™œ’´PP¢BqÆýdh±&0›P[¬@H ++O. <!0€FO/ Ì™¿Psšå!à’åR+}!‚â0´³'T³Tô $?'àô@V!ðl³âÜ>½žOüò‰q ¡ª¥X ɺBqê àÕ7U'Q8=ö*'Q°'Q.J¬k!°g*¹go!/°/Q(°/Q !ï·ê/QM í:l›7Q´7Q ¨BqÈ CH7Q7Q(8? Šåi. Ñ/?QQ"¬3Q"H3Q"3Q°3Q"cQ"Q¾CQo;Q+Q9ûI7@SÏQ ‰.û<[B1 +eT@  ïQÃJ2°X  XÀGR@ q(O!à”/ /à\Á°!"¼¯5"K£Q/õcOWÀ nãPq(F–Cà”å%ò* (Pÿÿê(I,E"3C0=׃РŸº Gº$ ¿¿õÎà ïGºX.½<º<³<I<8<"¿þ<*%<i(a7HE€HX.H·H°HBH1&& àD¸H"mþ(.m¬!@¦¾`=3óG*¥€÷Q!°0Ä.1,¾,·,S,B, 0WLŠ4ˆü þ¦ìN¡¸4NPþÿê\γ÷4@Šå¼? 4ðÞ`Î~4/0 Rh Rp .¡p­p¦p"/p@ ++l10È Ò”ž”@Ì@&Sã< àçL1^ãÆ ž Ão%à“L¿L¹L, ×O”æ 1 ”í'" 3MÔž´ºh3âÚð àT, 3  ++ï/07ù*ù ì"083D ˆ@}ýÿêÀ¶.- ++I.o (ûEÐqÔQ:ý(®øûId ß<Ñ(ï ( 5çPMçP - *é*ª $` OQõ*æó 00\¬"î4Ì íoO/m S/Õ s ++ à.ÑþP&ÊþàYPHÄGà”å 2 äPŒüÿêpI5 ø ¤¾„ Õ3 ˆ/]ˆ+ˆ_0†å@ˆËh. ˆ§P/ ÿˆ+*ˆ/yˆW/åˆ+pˆX/‘ˆ|eðšåÊz/$CðqıFShBqÆŠpâqÈhƒOIpqÊŽO1ÌØF´ŽOUb΄E@ Z|ˆZb÷OÔ0ñG }"EG@šåî€Aƒã¥àâ^ãDC!@”rLÒV;*L¢LË! æP!hisqÎÐH°ð@Òæ@ÜÞè@Â@0H èOÐXSqÈX°#F qÒÄö#¬8,’)O¸qÔ)+")É*qÖz)ÀP7Ø ++`/%#Z/ x{‘˜qd€Shhi`BqÎílÐqÚ ++`=hôóiqÜ ø/VAל%qœèœSrBqÈœCúqÜXÚ' ++ÖÊÞʇÞÊé+7ÜàAJà’5ª[Íü,—Â^Ip‚>Ÿ 4hc+Íc`hÔÔ6 H6²ß!8\Ðf²qà ++0Ð'`@OPqâc/=*cäcüÆcäc æcrÈ N7è ++P+wºqê ++(XP Nf°qì ++P_wM¢b8*qÆ(÷N’NC´NO’qîN ++ðÁ /s^Nž/s0Nÿs¤Ã6SØ NhN)NÿÿÿkI"?$£óM`$œóMÿ¹/ý”óM!w·MQóM ÂR9¶ ‡AAóMD-óMyóMóM±óMˆMóMD"àý4­óMÒóM/å4‡óMD“4/á ïC_/U ++ïC[ÅóM0 óM°ÍóMDL-óMò¿L/e €‡/ ¿LC³¿LaóM ˜ "¤ü˜ ê˜ –¿L/Õ ˜ o|/}¿LOQˆ/é¿LD4_M¿LL/¿Lgô/°ø¿LMqk¿LJ/½¿L—/i¿L?š¿L/Å8 w/Q¿LC_¿L/±Ð_/%Ð[/•Ð//ÙЯ/¿LCõ°ÂÆ¿LPjs§œTô˜h=Ö@ #dj¿LÏöqò ˜h\lj¦A /dl¿L ++Lò¿L™2ô/s ++ü‚ ++¿L&s?/s Ë‚ Ç¿L,s¿L)s¿L§sPs˜h}Ll¥ ‘Hs”¥ B¿L*"sqG©sJs"˜h{Ll@ &fd ¿L D¿L#sˆ˜Hs ˜h|Ll‚H /ff' C¿L*#s –Ds˜h~Ll•H /fhž A¿L*#sœQBsb}LlN &fj B¿L#s‘š@s$˜hçKlŽN /fl1E,L*#s¤›:s&˜hæKlï /fn9FK#s™Q6sé äKl½ /fp›HQ2s 6 ++æKn„ /fr1F,L#s ŒQ4s"f çKnŠ &h`‹Š E… }",L/s,L*n`,L$s,L0¨º@,LJ3 ,L ²),L)'$¡‚$ÐG/s&®‚&,L§=L5=L &;/ ¸;1 %hÅ(Å‚(L/s*Æ‚*LE—L /Iº3,ú‚,3.®‚.L¦%SRL%Uô L,s0LÀL"s\®œÿ,ÜàZÆÞÜìÊäèZÂææÒÎÜÚÊÜèæ´œÿÉ/s<´œÿCxsT  àó• *K4}{l}!à’è- ¸œ/àŠ´œÏGïBK= í<ŽcTãC“!0 'ø@Eû:ÕK s@ÙKû: m/ n‡*©%q¤'=2N‹ †å“ûÅÖŒ¤/JïÂŒ‘.U‘ƒÛ|Û&LÀÄos8 7Ä.÷-"$…LML"¯…LÌ@ ++KêÌ—Ì>™LõÄ<ÄÌ€5K‚ ĉpÄhì´5/‘Ÿ" Pš´Å´( ]M EHD Y´ Èœ Û¬›µ\ÈœÎÈœ/éÈœwuäÈœ-”/ÑÈœ†O0/ xyÈœ/=Èœ/ÑÈœ¼ ++,;,.5L§(ð/ 0~ /³)* 0œ* ¼ ž€Ñ ž ‹ìz¨YI ¼¬ =17šå : 0"­ý0m:€Ð/š±H/¥ f Cf P/a ++f t<. <uønP ›;ä"-ý„m_1 4žBXš ++¨1ƒå  €š)N .B:[*B†å $-| ++Ðð H ì¸ÞÚ"ÐáQÀ.Õ È›;¤!¸7âÎG  4œ<œxO dÞX¸D™$s2¶I0sb¹IPs4P¹IÀG™,s6G™(s8À#:G™# h>><™j%s<Ÿ”.s>Ÿ”.Gs@ ++`Æ&Êé ++™)sBï,)p/DX&º/d($F$k8$F$wPsH ++XÆ!äF`sJß™o#éL¡–ÞeLÞ#`-FósN  ( $àÂäèÒèÒÞÜ8#ÊÈL¨S$@& ã˜šW&  ã<™X“X‚U!“ÝT¬™Xê˜yÏ ¡ <5!àžèÉ ®)}Dk0H 0€åœ ä`ó/ -~ aO¬@ àÎã›}!€âà€åY'/åYO‹åÏõpÐ]‡å ‡$$m@‚å ‚ "@,9  á lòlå$bÏõ (¡ÜoÉÿÿêîÈ0ß.‰ šm”|±sN ++Àä@(¨‹ì"ìß< ++ˆxëM@õ– *B—08'r»B€sPõ!(H(¨¡NiWðDd<+ ++H dß“öK: ø°‚ ˜sXµI sJj#ï <¨sH8sR ++0Èo@°H»`+™å,-2½@s!0cÿ ŽS:!t Lv &3 ˆMèLpO˜!ôLL°8€N8sTxVxÿa?sXl9Y ÂsT=L ++#›,sZ#›$s<’ ++ M/s MCÀ#›/s\ M !s^Ê!t MŸ` Mþ}!`}!®}!r}!(ÜàZæÂÜÒè*¾ÄÒÜÈÒÜÎ{!ÿË¥{!ÿ>p/¾ÿ`®k od +¸k «N"¡k c !`c pc €c c D c d£w•c x!c Dhìc x c h‰c c ½c €Qc @ÝG­c Ðc /ác wmc @–Éc ˆ7c {c 5c €Éc H=,-c 8/yc / c §Éc |ìkc 05c ¯c e #V ++;&¥ ÜKSTã2K"p¬l+½W² H"Ë`ËSp†å ÜiP eõ@ö ++» ö ++0&°;w/äà' '.É ++„¼}VHSS0sb¸®JOZsdJ 2#Jh&kfHhJºéJ ++,ò)J ª/Jj$kd$jJä Jo#élJÞelJGâ³t PT91p ==0à ã>EEµŠ¢E2 —pv"æÿv‰fþ@Œ~"Àú 9°—zr` âV?``›åVžq‚ ++@âT?!`–"?V?-°—A¹q°‡å ‡¾r™P0†å ‚rRÀŠåŸH™ qä]Ã!à›M1âíà›å°“å%`‹âà†u"u!`‹UÀÀÀÀ0 †åâ7+ ¼ ¶ó¼åÞ¨¨RXq/“ïÅ„þ ª |K±DÍç":snP. ++@,PÂ, ++èµUC Js"¶Îdk@s@ ¬P5²+Píf,sVø´/spÕfÕm®ÕrÕ ++tÕ†ÕŸvÕÿ$vÕ¼Õ„Õ0¸ 8Õ÷êààäÊææZàäÞÆÊÈêäÊZÆÐÊÆÖÝpkhkW"ç açO½åC`‡œ| éÁé˜G‘é(i~ :¸d‡ ̆üÇ’{Ó@x*à¿^N5{;… ‡± “å0’åSúo:i Ñ©XSTã÷ùä† 5 ?ÿý/=ÿ0àšå¤*èÃ'Å ++ÿW’•=ì…I|7/àª9'ñ?ÙÀ ßD p(*Bs3Ù&7ˆg 'àC—CcÒ9$ IW ++'0[—C'[![ \*O&pB#S)`9 &OÀà—å ^ã  ++†€†—† ++r†8†%††u œ—/±z åz`/EzÈz$zzàXRÒ8n§n,í=Ün0‡¡l3^㢠1à ‰VÐ 0Ráƒ(4à“åVÆVÆ (y 0v•êÍsƒ€žë€oë€ihñ —åà’å0žåà—å —WÂ1 ’u€ ’å 0“å¾Æü0Rê&¡0âSãA†,0^ãŒxzÏ 0Ž—#ã üt-üîÍ ®,£à“„.¡“„340ÔÑ0Óc§ˆ. h t7~p„qpÐT)ÅTQ@^㜯1^ãUþÜ1^ãó·1^ã‹·1^ãZ·1^ã)·^Ä „mX&ï ++b)—PPåk.áPP ++¬X€.E€Úç Œ¼!¼/¼O/¼]¼L¼aà—å0—Å"Ð"Ø6èèP .•Çéôš ++ ¨¹*Åb1Êýÿ0/ù\,È]¹Y˜ .™ ˜£˜œ˜W˜F˜˜0€ (€…i.! ++Ä€0t¶8/Q ++€ j€/y ++€Oݼ¿€. €©€¢€<€+ —儨_‚ý†3`7¨³88/± 8+t,(.- ĽQ@#0Y ä ++ãh•ùkä*ä ++T"ÕüT.Í TT ˆ"ÈüP‘kP)pÀh(.• h¯h¨i ¶O(ë°¡9ñ‚ .êÜÐÂÜÈØÊÈ@ÊðlãÒÞÜ@üæ(˜P@Ãx±AH ?sz¾'Xó ¢sx˜ BE@ S òsxQ6sz;¥HžŽSJ¼`R8ZJ0`ºJ8DD*s%Ë]7¸€ HòàÑ`ŽO‚  0–‚‚ ++\? .i& ++*@ú)ú† ++É`ú¹! .šK¾  ++¦ ”.]”ÆŽp(.™C ÊyšòªBs| !P  äÞÆ‚mZæ þ·w$ Oó ++(Ò=Õ^ •*B^ãC^ "æn "‰&…¾ ΘѨM/]¨ñ¨DI:¢:,/¥¨G `ÔR¤AÆ ]å0^ +^ (qÑ)^ /­Þ èèq1œ. œbm.Im®lFlU/Ýl'/l ¸&/Al#/yl'/µlGl68×1 äŸ-•0´.-ÐÐPà ++ ++o…*e…)m•}šd™+‘y*H †‹NðšåˆP #.õ@¹@)* ©Ö$xØy#¢8  8‚ \Hø(.íø©Öä69^4„1%@9nbæ ++0Àk ++y8Ús|· ++f ++š ++ ú!x. ²   ++Obs|  ++"à4" ú4 srs|PèAA#2S 4ªsÿÔ”ÐBs~8Ò>\~8J>& ++>&‚>˜o z1½&X×¼&1ˆ1%ê1'(+%ò+“!1Tªs€Þ " x2"ÒDgJs€ ++ ig úŸ #0B$@b8 $ ++øË(‚d 0˜â5 Â¢Ú LZ&!ù P#b  % LP%9"%Ò&\aJd"ð)^ )9+9+9-9  /+Fp/‚208&1r,1°3J,3e ++`›'Þ!à " â *µÛƒsØs¨(m×n &hp´^G‚ÛPsÚsÛÀ_p rZEY ¤(Ö¤PY*FY*Ûsäs¬"lÄp´ /j`VD™’+3ÛcsÞs®®W’p;“ &jb¤jŽ F’"Ûsàs° F¾‘p$“ /jd- C’+6Ûcsâs²ÎÁ‘pB &jf¡ƒD’²•Sös´¼ ‘p /jh¼ G ’+´¨us¶*a ++Å‘pÞ /jjAHp‘¶Ss¸} Ç‘pô /jlŸJ¡¸¡Ssº> ++Í‘pW /jn©H’ºSs¼v Ò‘p2 j2"G¼’š’f’žÉ ¢¬0¨JÐ’ÚÇ ' ö ’.#B)’ª)æ¾1 ‚¾æÀ®‚À’¦1=’ =’ ë6[u/?rÂá‚ÂÄ®‚Äu¦I¼@¸Iâ/h“Æs‚Æ“[”ÑÈÑ‚Èѵ'W:µ&YµKMsÊ ++p9)sÊ9/aRΰ5x%(.+Ne. þ ++þ!à—‘  ÕØÙi±iù? 0¹4Ìô‚̯&u•:7NzsÎœÐÌ‚вÒ®‚Òn30B5b¿ÛWa ~ ¾' ²n n é ô& ++Ò¾v9Lv9pHu` ++Ú,»- ++(%kúÈ?–mBíZÔíZÂíZ"u(ÂtBâ`äÊÆÞÎÜÃt?Úäì¿tÿËò¿tÿC/u$¿tÿ`¿toÖ 1¿t÷r8í¿t£tÐ*¿WÙz Xt`X”ÖFqKÙn k/Ù" à+Ù ++%¾FPXHà‘åÉdP^áÿ’à‘åæâpÑÝ_ ‚*Aà†åIe0†å˜˜X,V Ý =e‚*W ãåú%S8*OmWmB'7p¯r­âL Sr'N .ñR(Î#z+ ÏÖ ¿Ó:€†ÃÓ/0z+ ªÁ\/±//õw/@þ¥Wu 0ÿ"*FSãÆ x"­ xxM°Þx}ÒIÙ·t(Ãärz'À/exC—ì/Åì'ì0,e,eOv ++$ +>ÞWÅ ++0$mvE+QÝ! ’ gÝRÝÔ]ŸæL6X ?{·å *ýî0ybQ_pŠå@ìÆj"n Jâp@ .!@ ¯æ} ++@ ~Œ†~Œ2Œ/ÒŒ ÒŒ1 ƒðÎŒSpƒåÖ5—Ïyð"‘ ++L‚€  .àR‘×PÃ,!pM= àÉP 5 † …/°t ++ÄÄÄXÄÄÄ—µ3p€Ä€$‰IUt.£,y, Ìi /†PPP¯{ + †ZŽ7†ådØ9Çâ" ÃâŸè&`3p‚L4.™È ++ + +|b ÷áï,Ó(ÀÞ“©v€pPbxI(0("È Ä.ñþØ ++H(*%($.£þx œþqx“ÿ"n]"Ä^]"kn]  €^㪠þ–6V@¾‘6¾‘@ƒ@¾‘ ÈÈP|;€p; ܤ…öØ1/ÕØ+/Øÿÿÿÿ×/ý ؘ3/m ˜+/­ ˜ÿÿÿÿ×/•˜ à!à“®B@ “å”wØ/ àh ü hp1@Š!†1$0Š}ê#(0«‹ªEG šå ôÓ1ûÿê€] H X$ôô\.ñ\²Ô/«ÿ\C/q\+"Úú\/¹\'@\D/M\ jg0“ålz/ àl¹l¢EH H$HHˆHHØØ @.@¹@²,œd’ ˆ10‡Œ3 à‡ ‡ 1à‡ Óà‡å(à ãà‡å .jL# L#4Rã|¸{ø{x cü1QárD#€#oŒ#l8|3žå Ô{1 ’à{1®¢OPãHz&{o?*0—öÉJ ü'‰üDQ:2H( $ ¤@¤0 ×ö ïØàÒºà1 ãácÒ&à*é "pñ‹" à¸õ_ÿÿ ++  |gÌ.YÌS¸ H/$° ;° °0°'C1%à“Ü ü¬òÈ<ÙÈx æ¯À| <§| 0| ™| <€t| 5gYP 0| I°}àƒå ƒ9| %ü  | HCE | 0®´CE ++ LÙX À0 °( ’dy(`(RØ9( (@ÿÿê‹ýÆ®Xž"N³ý0 +++… ++0 ++XLbÔ0 ã3G m/1/jìÙ ++¤[žåðF¥46O¼”«G ÈkðM” ++«G|a žå$@Šl ++(( A0[ ­`S ¼j·„ì ++†\PÐ ˜2:X³0 ãÜÿ ‘å€â&Qã—ÿÿ ++ú.u Æ®Ižz+pv°'¨8ȮԮFsÖ8¸¬`¨sؘ ++@àsÚ>Aèx¬dsÜ+x¬!`%0sêòl sÞ#Aõ BÂèèÊÚàè@èÞ@ÂààØò@ÜÞÜZÕp{FXsì2C Xhîhc1Bà¿{ð1|~âsäÅ354RbsæÒ3#ÐÒ«ŒÞpsØ ++X3/P]3sèG0sêØì3sîý?sðñY&5ñб&KBÐpˆnôí—lòí—ôí—t:ö—™+OúÇøÇlÖÇøÇ äÇ%U²Ç&€M/7â ++P/&[2öõsV¨Bsú  ++°ó~á8øBå ++5 3žå I*€ÓxAr ++Þ–9%i%½SRáLoïÿÿàÕ'.¥Kwà©HO*µŒ õŒ¯µ?ž"—/5–qµC0žåQý*0m } C· PP åpD ýÿÿÿå (.ñþØ ªþÇq“ý7?£þÿý7Eþÿ… ñ5L'}l¤ H] *ÉÅ-HH‰ 4ü© =@ M@¼/0ž¹6¼  ¹6ð åU2m20nÊò}?pbsú8‘ ++0‘ ++x ++ ‘ ++ ‘ ++‚# ++(U AsV@A@Â<ú} â} r=bž C C/C 0CÈ›üŒ ++w=ü ¤3HsÈF(wâsú`<ØúX²W`BS»4ú ++ £ ++€b8eÊsæa $h’`’P’Œ52 u5?·p ÚÂÖÊZèÚàyBGyB4&:`Pã:ºÄ0SSã6&„*#¼#–ø2/‰ø2‡Y “oC †å [_CâÛ/õЄ ’‡D@šåʤ2?`â 6º{0ªÀ@Ž' ++€Wv2u ++@ D'@E"P‡BØÒæè›D0PBô2 !}G00—åÛ2¢j"0f‚ „F ++„F ++³Z‡’  ++hK`ÁH;Pè  ®ŽQ@­& ã@ ù>î¢oŠsÚ ++XêE8õx!€—&ƒZA*u¿Füu ?8  äÞÈêÆÊ3" m/Ò®3”$/VÒ3/¡Ò3.›Ò3‘¢– Z'B ¼Ê3 B1@ŠZ'V' 9Æ3J gMMõ I ÞNv3à€QS€å €ÿ"€å^! Qà€åˆC$šåj5p..>Pð—åP­ f î9 *9 ¹ 9 Ò(«(’&hÿ¢0DTúÄ8Š e’¶_H$’å´þ’þe#/©¬0àšå´Ë)/'/=Ã/ÿ5à’Ú"?aÿÿÒž@[ÿÿæ%ò%Ø  jÜ•²€ošå @P$P ’å$$¨4  áTŒW ++$ ++Ú$4Ê0 ++$1à‡"$=à‡&?Ú‚4â&š4=àƒ@*BGf#<†<†q$ ŠåpŠè_`Šå( ¢p(Á( Jâ$ šåpšå "`šö?`PXÊ? š“M ++ ÏR ++ (¼‘& ¾$pJ*PRz Þ&Ì .Í&(Þ&Þ& Þ&W šåÞ& ÃýRŸJ Þ&!Þ&QRã= ++&,)%/Å ))…øÆ@ Š) )`5 +++E z+/¬/­ ¬'/é ¬Ã/Á ¬ð (.¯þ2(*¸j'…ÌÜÜ.0Ø™È ÀèUjÔ#°Ô{ø.¥øzüÿ꾊å"‰ uè༠@¼ ?ÚÈÿ ++½ ’`8¯ju@ug$L@ú($#CtX`u  ++ oSpS•‘š«ˆÑ&wìqì!0š×Õ}% „âà‚j·Xj·0 ‹å¸Ý…p…9Hr“å “LpÔ=p“sk) QH5F`@w p`#€`P€U)Ô.EÔxhqØ<‚U UŽaè!#PƒÕP‡¡(uY¸˜Bu ++ ¸•ZX´SÃ!à‘åI[’pA[#T^»1 —@j“ L g²< q`3 $ƒ?Ý ÄP ‰0S?ÝÏŽ^ ,¹\’^/ X´7²7µ_'ˆH(Á(‹•gŠu ++ ++0?™Jh °†b/?'?Ñ_7ë 73+C‹ ¹Ñ_ ;Ò;6 ¢;!pvŠu ++(/P?#P^„1ð– ++ƒˆ& XÎtv/u'µ|(v/u|(/(ÞD9 ++DÛeR?bu'!°mOw? Ä×Ú@ed»»w»ˆ¤bsÖðu¨ÅøâPu`j›®Å)uà)XâsÖ-e##†þÖ®Å.uŠÄCd®Å ++¿+s®Å ++ò*,#z) ®ÅàX&)2G`sÞèÄ© +ª´`; ;td ; ++3,&1 ++AÁ,u"AÁ(u$ê )8AÁ-u&AÁò°AÁšžCžAÁ/u(ž u*¹f uh1  ž  U ++.à  `ý%•ýS  ý/ufýÿ—u. s  ýnþ/"þÿÿÿj/Bd8$õþ~$(Fž4¾FžÏŒe3$/ð$ˆ$/2"žÿ(i"ž81\þÿ\½"ž M<ù"žx…"ž Ö•"ž/åÖ•_+YTÖ•L/ÉÖ•/. GÖ•œ/Ñ º›C b/1 ++º›q:Ÿ/i ++\/º›E/ º›C24/e œ "#ýœ /¡ œ "ýœ /Ù b’“/ º›?Ôº›/Ý äw/i º›C™º›/É ä_/=ä[/­ä//ñä¯/µº›OX/!"˜öfš/UXf ðçfš.‘ º›I/º›‹¡T/©D’T/åD<<"ƒûº›*! º›M/‘º›§/Mº›O/¹˜þ(º›"û¼ /%º›{ܺ›/½ͺ›/ùX ¿º›/1X “/Ùº›C}|9žº›E/­º›_!Sº›L+‘º›0åTT º›q/­º›ÜÈŽž/ Ü"ºù /E c4/áÜñ4{4/A„"lù„.}8Céì A/íì s¸.™¸ñ"ù/õw/ŽŸ.ÙðÍøÿêxj¼ˆˆu,L'p/u0…v%u.….u0… <ˆ&u./u2ÿÿÿ?Lœ%nLœ‘u.8¢u2í04L‚4Lœ'u.¸16Ë‚6Lœ,u2Lœ(u.Lœ0u8q:Hu@ú”`êH ++èBDFHJº•/º•lº•#u277@¨’>º• %"ÃŽ/uLM‚L'/uN®‚Nh•¦+'ºh•-=h• &3/h•/5êPá‚PR®‚Rh•¦&?‚ ¸AÖ&hmsTs‚Tsh•/uVÑ‚Vh•'M²µ&OŠµKh•/WÊZh•»/uXô‚Xh• /uZh•/u\Ì‚\²^®‚^h••8u`Ð Á/crR)R,gÚ)b¦‚bMud ++p.oJ )š s# ³PsüŠ–,ufŠ–8ª(I2¯BuhpBwNО/u¾Q2ÿÑîG0 Q2pR2ôR2ÿÿÿk/¢0/ ++v2ÿÿµv28SÞîv2D</zw©v2D v2/ ’,_}v2\ív201v2°õv2DvB1Uv2hv2v2ˆ)v2D)4‰v2 v2Åv2 v2ýv2”¥v2@ËÞîänv2D0ív2`av2\Ñv20/ä¯Ùv2Púª.Ev2í4yv2 Þ"1µv2\%v2Œ˜TÍv2 ‰T/ D<<zv2Ev2\µv2¨qv2PÝv24/v2ù0ÎIv2|Óú0/áÄv2/X ¶v2Uv2”ýv2Dt|]v2`Ñv2`Ev2\µv2@ ª… !v2qÑv2D¿B11v2±v2iv2ˆ/v2Cr4ev2 cv2¡v2\/v2—½v2@v2/w¥v2èÀè¯4 SÃ^8H Pà¤"¬ø/}l "žøL/µLc¢¥€ sä/a>0/Õ¸ "Hø¸ / ¸ o $.É€@P9š5.! ^ òû÷ÿê ju†ul1 ð./nbÝÈ lÉ’unuj<?\nb¸É /lb,ÕÉÄZuj,Õ ¡6l§Ôƒu|up25 ++!2?\nb4É l4É+un§ÔL‹p‹}tur6?OÔ/nb É /lfN r6ÕsØuvDAåÔ/nf4Ì lÉ'utÉU:Õ*/uv:Õ)+pb:8zA&wxA&zA&:8x:8€:ÕÿÿÿtÜu~J«æÔ/nd«Ë lxÍ'u|=6X>Õ/u~>Õ'+p`ò8xò8€E+‚‚‚ò8x¶-„Ë‚„ò8€ò8xò8“uúuˆ(gDØÞÞà ÏÐ l‡Ï+u†ÏÐ G8Óº£ˆÏUêuŠ êÏ/nbÓÐ &ln­•ÏL™Ï)™Ï#uŠ˜tîuŒ8L!ÑZèÔ/nbÏÐ /lpHO ++PÔÐ |PŒ¸QèuŽáÐp:/nbä: &lr± ÒHå:ŽUæu×/nbD &n`{ÖH××7#u·uâu’,o’×/ndÿ ++ /nbIÛ×*#u’¬UÄu”øau /ndbGß×7#u”µsàu–&n×/nd` /nf^F«`«–¦UÔu˜¾Ÿ×/nd( /nh§Hç×#u˜sÒuš$H¦×/nd( /nj5Eë×*#uš¤UÐuœÚ©×/nd† /nlFï×#uœ™UôužÔª×/ndu /nnÔ Ió×*#už¬sÊu .c oÖ/nd‡ /np{J¹Ö#u ”UÌu¢@tÖ/ndi ni©I¤…¢½Ö/u|ArA€H 2+ ++0¨ÚO AjJ^:¤^ ++‚¤Â8¦®‚¦A¦+)A =A b/A/72¨á‚¨ª®‚ªA§Ê0¸A¢Ý A¬s‚¬A'®Ñ‚®Aúµ&OÒµA!/Y²A¼°ô‚°A ++²A´Ì‚´²¶®‚¶A¸ºRA,i")¸¦‚¸A’ÝA# o Buºô‚ºô.uªß.æ¼Ò‚¼Æ/‚ô ¬B¢¬B ¾¬BÄ[˜"w6Ù$6Ù«7ÙÿÊ/uü7ÙÿC wWÈfR ++7Ù4:{)}p7Ù&m²0P…;Ù /µ;Ùp;Ù(pYÄ;ÙI;ÙÆÏ¿;ÙoÄuÖ>ÙÛ`À y€>Ù>ÙX h@ \Ë e ++0^ã'ÖÚB^ãÂ^Ë sÎÚ`^ã ++>äÖÚ1^ãÎÖÚ‘^ãs ++ ^æÚ?À^æÚЉ¶Ô?Ð^æÚ>@‰/0" à4*àÜ-g4D…öØá¦(” ¼."Zþ¼..¹¼.  ++þÛ  –X0"ETE&¶¹dP$?$þßÝŒ,* àÈ2"þÈ2±îÙÄ,.Sþÿê, ++xT\ À."þÀ..„€•zÜ\ €• ¸Fd°d©Ú×Ú×Ò  ae–ÙÒ E6×ñŒ8@šåð2I˜Tü[”åàø @1 ]ˆE¬dLD/‘ ++|'€Ø|4%´E·º 8®ÙH $ÀE/‘ 8žÙ ¸EŠÛp.Y h 8 Z4IVå|xœš €PÕüÿêx¸@ „˜ h.4 ¤/5 ¤'²Ò#@†l¨/à¤ËÀåF¦PŸŒ3Œ"˜:"vü/I'@<.ÕðÍðÆ, ,HL ÄÌ"$üÌ/‘æ//Õ¸6;/˜ 0H 6¿œî.mH "@H"/ˆÀ&óªÅSð ¢é 0CSãêÆØ2æ(£Xi·à@­·Ý@Ú@/ÖHÐ@ÌhÆ(PÂP"¼ä Ô~Æ ì£†Æ‘€žåŠåI¸1 ’ªð ‘å Šå ‘å žå$¸Qžå(Šøó,àŠå,àšå^ác¼!™ÖÞã„£ ^á\!àÚ×_Îã!ƒì*Mì0?ìŽ0;0 Ô¬E_ Šå0@¢ø­00°E" Œ<¨;Ì4à áä*:®¨2!ààa€âà€°5òÿÿ°Ì!‹†á ¬,ú­¼àŠå4Šå8Ä"ü¸E"88Ä0àšå4šåÖÌU¤‘„T*àT #4&ÓâÄÁI˜°0x¯ûÿêü \ 襬¨ _ÜULô/@L [ü¡L8 P5@šôH0T,šåø2øøPpå°á¹We2!à›@mp‹âà‡`på›?å祶0ôÐ! ŠNíŸ4Šå8Šå<à ’ÿ<<,Ü10 š<Ÿb4šå8‚è@åÀÃ6Ä€$.L¨PàâÈ €  °€<$ ++lDÖ¬K 3¨ @’åpä%Pã„„Uà!‡¸´‹å ’åä¼´#à¸OŠå4° ’?144°Œ"0 ªãl" ¸ ¯È‘8È_à! až„È Üw £!»Ì¥Ðk8R9ž9ž 0 Dll8 `0`Ì"ì$`(Ì,¸ÁžÀd#ä ¸Áž×ÈK (µ(§‚P0tÀ¦\« kpý«\ Ì 4¨ ¿€¿TS‚å ‚PÈÈÕ¹o †å ð¥€ñ½¤ ++ ïÛhÅ(h.¬þ€/&þ,/½ýO«ýÿêl-/Él" ùl/ýl'Àl h ++zÈ!àŽzÈ"`ý¤.ɨC/ý[¼‘F.Àü$ "¹ü!2!à”0­¤ƒ˜ !0‹0(0ˆ/à<<Ø ˜JVr§ˆ‘;Î $«›ÉP 1˜feY জ—$Dh ".i "ë$CBuÀÀ1CêuÂ6šHÞ™vuÄ ++`þ£³¸F¬ÀlÆÆ{Æp'uÄ&6(¸¿È¿{È¿B&PšuÀW¿)uÊ0žaÌp ˆ0uÎt)°œ)uÐÿ'v¢uÀ ++ V'`/Ò2œ%#j/S`uÔ|HMÚ# N#ÿV4uÖç"6uÀÌØì_ªuÚÌ ÜÌ 'úc Þ({ÞãžuÆŸ/-bà)â ŸÊ)u£`@Buä<* ù=*d=*äÀX)æ,&7âØ+¢è);ÂÕêÕ(ì{ì(IPuîÑ&AòÖØÒ|€P)zP†vèuðHC! ++èâªhN2DÀ0¶40uò/ tòÑ!ÒxÒ!W2"h'!@„¨!]zöHuØØuÜÀuÄ uô ++PU ¬30 uEÏVøuö1C*Î0Cû  Y, iY,!/Žãé 1| å|ЦÉÏÂ@z ++èZ-aÇ! ++x~H¨-7ø ++›œE°Xuà€uúx¾Xx* ++0 Mª?uþ§k&uü¢¤þ¿ ôÅ €V+µv/wµÍ%w:zƒ‰˜/w˜Suüä d¥/u|d¥CÄd¥/wd¥ w˜1/w’sž/wZsÿ”w ‡( G@˜s#Ss s#-wÅ0Sáan&Å#-.[ÓrD/ŸD/™D DDÞOIgRVô ŽNK÷! / þN  —#ä_DÏ‹sÆN —” '~s5s€®¨ ( .ñ(™P/»I“áÞ·Y<öQ° |"ÿ%.±À/ æQTÖ +¢æQ5 hæQôâ+/¥ôÖQô/ @ÖQ/ÖQX¶Ä.µmPfÄÚ/u$ Ï$$/½$G$/ò$6$/$/¡$$/Ã$]$$/m$$ $wuð$Ót’›_ä‡J„Ót<Õ</ÙÀï'×_°.e °Ót ‰0xïn š“+/Å ülf|º57-?l /@§b.¡ ++Ð×*@ˆøØ /é ++ënsºšH.­ èwPpKxhH/ D ++ @ ++ûW+/A X/ïe"0/Ý xT0C0¼gr/= 0 t "®üt /u t "¡üt /© kkpt.Q¬t¥«eÔ`Ãt/­Ôw.9è«eÔ%\/™Ô[/ ÔW/uÔ3/½Ô¯/ÔÚHÉL `<ópíl 4ƒ4/!ˆäugs.YPP-P0Å—s/@Ïj,O@†åï2ÌÌ/P/q4!P/©4 88³t+áˆ1ˆ /@@*Mß4ˆˆ³t6_@†å#0³t „Œ. œ&PŒ—Œ†Œ?Œ­3r/yŒ 4/­Œ 8“¯t/á  cm_«t±÷r< R§t/å< “.i€b€ª€™° ++t/ít€T0/]¬Ä$Ÿt ÍÛsì?ì09ù"ì›t2Ÿt.‘Ìä ++Ÿt!Ä yÌ.YlVPO¬]ks/¹¬P›t/í c0/‰¬dŒÍ00/ép—t!·, “tÈ C/È w´.=TœP•ì"¥øì/™ìw/%ì½è¬ H*lGü ¤L³s/ýP ?“t/1Dc l²d à/Ýð=ð0/M œ "ë÷œ / œ o ¼!`CPD<ÿÿêh 'R.!Ö!œ“tÔ¼jw"w ++˜îsf/f ptßw w ˜j\nfg p‹tv;s*w‹t™2 ++üsºww*˜jtü$?\nf[f p·gwyHƒƒŸw.˜jsSf /pf…J‡‡¿¸wdw<˜tjti png'w eQ ot*/wot*hxoot/wçWv%wª-/wçW/hot S úw½,¿HwhwB˜ùp h l pÂh'whTMq/wMq(fÕßÀzwPBwÜ‚«+HGqˆZÅ Å‚ Aq•'‚•5q™wŠw$ ˜êpf«j p«j'w"o C-q*"w$uiawˆw&' Ýpf´j &pn¥‚lH%q#w&†w(0˜Òpfšj /pp8Kq*#w(°Š‚w*"˜Ñpf°j &pr©oDq#w*•Q€w,•Épf &r`•¯oD q7#w,¯‹|w.$˜Àph• /rbîEq*#w.¤Qzw0È]ë /rdR Cýp7#w0­ˆvw2˜³phÊ ++ /rfN Bõp*#w2žQrw4ž©ph– ++ /rhoDíp#w4ˆ‡pw6˜¤ph– ++ /rj% Aåp*#w6œQnw8›ph6 /rlU BÝp#w8‘Qlw:¤ ph% /rn¤ EÕp*#w:¤Œ\w<&˜‡ph7 /rp[FÍp#w<ŒQ^w>0 €ph r÷ Eò }>ÅpÀp'pd^ ++o¸#Rw®p%%âô$ f/w@Ë ‚@Ë y ++B®‚Bn}8®p+/r/h®p,3Ò) ++û ®p&9º/®p/=ŠDá‚DF®‚F‹®p&Gh¸GòwisHs‚HsH®ppÑJÑ‚JÑ®p'U2µ&W ++µh®p ++9 ®p/_2N®p»/wLô‚L®p w–¸œPÌ‚P²R®‚R®p‰(®p/iÊR ®p,o*)T¦‚T®p&u’Ý®p%yb#®p/wVô‚ ¹·.{ªß®pXÒ‚XÆ/h®p …Ì!hF‡p ®p,wZ®p¶®pó ++  x 0ÜàZÜÂÚÊZÂÜÞÜòÚÞêæº1¨±=!à¶n™=ˆäb_å 0äb/uäbjäb(l W(lQ}>-!G-!64 q|­ q8„].„]¹!±Kh].…]g\S/è \00ŠéŽdBÀõDQGM892(Èqg!CMCM/±CMgCM CM BTg$’ ECMÇúÀCMo¶w`Gp ˜Bwb CHGpGpp ˱@ ++Ëo·"f_k@% ++ok"gk¼gk"gk")óoÜok"†gk"3gk"gk@Ä ++#p{okýÐwkDàwk@Hµ7sfKUƒTͶÿm¸%"ˆÿ·b èBKU KU KUñ •ë¸šD>D-—khÜ&ÿèB \$çg0&@?ÿÿê,%\B0³l #e .±Â»N=/  „ ÷ˆB/Ex"êþx/yx' xD. \²\««l@ =/Ù”…”/ ”'€”D/¡ KD:D%à”ü*@Ô-E£o. p€G¢ 'd.YG¢ s_kj#] cu°-GnPµ8HPBP1Pó0?/U|æ m/‰ mso¾,·|l"ªýly[p$£x t#0ýp|*Õ |Å ++t,/pšßwPßw P/m ++|2JS|¨"Uý¨/Í ++¨'@¨<.Y ìÎìÇü hh.½ ð§<»zù  °B/ 0õ  @0@#a+!ºLrf'…/y'mPy ++X'('ê "y ++ 7 ++HÍt-ªwø G1 à 1²;PS&3².Ø5âBy  ˆT2`` áÀx0Vã~ò Ô¢ÔÌŽ–å —å ”¨”픸!ÀŠBÛ +++ñ ++ÄÀŠÛ¬ ++”Œœå —ålÍ UÍ d@&Sã[xpÂäppì #à¡ì /Ýì,"à0âˆd Ìœ`{(.5`DÔ ˜c àç| ±HfÔ^ØWó„7 ++B'púy‹á'ØRÒy[NÐ!XQ zyë@›l9HyÙ,Q%9âQ·- yy ånzvz`z! ++Ð$`Ë?Kxî1ø/CšK%EšúÎH IjwÀBy8Kr&Ø>yHn#„‹8 {-QyO%Sj€ UJЈBy  0 ÿýsäÈZäÊÌBÉÁ pp á“å“ã  u—?÷À›ª —åàá@zðjxQãh*Aá áPî á+ ++>Zý_f  ã 0° JíÍL*¹Ñ Õ` ‡â@oâ-#-m ‹å —Á sâ é@‡â`FÒÁÀ‡ã40‹å ©‡ã dzäëà]g "ÓÝK /Å "Û¦™ŸóñÙp/5p P…P €Tãpÿÿ ++1gh9* ä/09*Gò$* ÄÒèîÒæÊZÆÞàòZÄÒèB-< ++ †Ó!a¢y ++8wpUP ‚y#zP€= 0 8ìÞ<óÄØÊ@üÂ@ØÞæè@Òèæ@ÄÒÜÈÒÜÎ(<-"è7ørW¤r ¸By8 Š!P P wð A8R ²wð)×÷Py y  2 ++Ðý- 2, ÒÚ-'PjrBxy"þ" €T’y  8IC Šy3’* ++(6)rb‚y(P byZ P8jy/w¦÷ÒC¾âr# ++X¼¡4ÌÞêÜÈ@êÜÄÊæýß º³)HI_ šy$8Ó !y&£ Frž/y(rþ11,y(11º11ñ D   .ÜàZÞàèÒÚÒôÊZÈÒäÊÆè3GfmfefT. ].Õ0ÁAÕ0<6.µ6›6”6p ’Ry>J:x öd”ÿ6y™5\|TQ.-<„+Xp’åp{ Ù  t{ÀŠ,…ÀŠõQÄà½x{º~*¿¨By* _x†•Þ_*Ô_*G*"8G*åg*"fKHU ++õñô@#&b ”å pw:)à“—Z^á»R" /0Ï   ++ò%òð,‡® # æä_0„å["" Wêb*%/Û"võN@#ß/Ž× gÀ,K´ K$.K /ïWð ‘å‘å á&Pãu-œ`QãÛªøÓq€pàã!àQö@ª{Q åðØ1@  ãÇ1! Ž 1š^j<í; 15@ŠPLl´0 c**@B& Tý3 …¯*ì—(srr À/î‰Zç(& L 0³fŠ#@Eö# .+ ¼´/>šÝñŸ)!0ÿ%6•à( ÿ%׎¹Ÿ<†_ ðë$ç$.ÉÜÃ"ã$%? CQáç-7hxÛ.=°tçÕô$‚ #p. l , #£) "Mþ/íc…7‰–#080à ãœMøñBPãƒþñ <x+Öë›-·+¤‚– •/ @‚–,†•‚–c-Ä%/¿ÿ Ãçt/ 7/a s/ @û{ wôšÇu¤ "Ÿ"ŸÖó3€ó3Ÿàó3Êó3qŸ¤ Ö ,8Gx+A ,/}¯24+‚—u¢•0ã3Cô~•Ö ñŠØ/]  8"ãü¨•8¸4ÖïsÉ¿w³3(s0 \.] \Ö«3H Ú—Ö/ @9/)”q”/]”'”D.ñ”Ö †œÀ3À/U,&,‰ãv33,D.,†œ $êßsy*Ø †œ"0?/ptÕ7+?Æ`†œ P.mP†œX"•ûX/Ís4Sì nØ †œ h"Yûh/½D †œ/0s £v34LD.D†œ4H”ƒ1" 04H) ƒâ\5à‚Ò%" „øèÛu.x4@ƒ¬ ¬$ ¢š°* Ó”/1”DD؈ !”Ë2ëJm®H»&M 0’åhD ¿&Pð ++ \ ã%‚åñ« "Ë// Ë%*-ð"Ï/lDÖð 0¤1Sã7ì ’¸:% ƒtC0‡w& à¡ÿL@UúÿêøÍGwÜK- h K-L…Htd.•dpdi"1%à”§r$?'%k-'*Ÿœ˜ !ë•/y,ôkCy*@ì•'y,Õ–ß €¨+ $È&¹+Søe¶2 4@)hOLø/y.Lø] Áç m¹ëÙ€ ++b¨—”#8¨POy.|þð  yH Žy0!ô‚ L•— .–y˜y ++X¾!# ª]° R’y*LhüTL"!Q*y*^˜.y2˜#d2ç™ Ë- º4ºv4ºŠ" )2®øó/0y6ê/ºê/ ++ÁXê/Ö 1Ö½œê//%5Ò/ê/+™/y8Pv8PÑ)yÑ&;ú ++÷›)y)+AR)]#:õv:"£/Æ&EòÆ ›0#+IÊ.<év<.Œ0ÆO¯†0uxx0' ++`0(û#&Uz9!X?y@W X YržipBy>~`!,! ++x‰(Z2y@?|_é [šIPyÁYºyB¨& ++[š,y"¡$y>¡µú¾'Eº šµú/yD}' ++F}'p}'ŸH}'ÿ$H}'²}'n}'ÿÜàZÒÈÊÜèÒÌòZæÆÆu'ÿÇ@ByTB:H <²*Z||'=/qñ|']/ý|'30‚Jll'ÿl²l'Jò¼˜l''ò¼½l'ê¼*Òê¼iÈ,ê¼Öȉê¼ÐÅ_8DŸW8¥þ Šºþ³’¦»ÙǞРx Æ®e¼Ð s]] .´"Jÿäùâÿ–·=¾.-ÜÐT  \Á½Ðn¦»%/”ئ»Á:½(”D/Uªµ¤D¦»˜$%.Á$ 8ò¼$)° $P/¥¦»GFÏ / |9|/=|'p|D/Ѧ»?ý$$+-\¦»8/‰¦» LP/! ¦»C¨¦»‡ž ¨  ­9dP )0´´³´+“´?Qá­´0´¤]+ö7ÒÁSy` `juryb`B89:wpyb89² Ì&;ËÄByh Pí1àþ(D,†. ~ ++&dÇ# ƒ‚ ++?ƒå&(yX¦ ++/ & Å_ŒLp á… â°’,‡O/%‡O¼äKö bByd ¸ èÂäÔÂÜ\&pe@Q,*YžÑ S0‚â ãÈ ãÈ*D@@-0ž_L" c7 0†(Ž#NX.øX˜;Ý1` 0“å0.ƒ˜â@Y-küRAÄ,m WÄ b €S"u Dpå•"¬ÿÜhqIq"0¤X€à’ååé@ñºà á‚âà¼?ÙÿÿïO‹åÒìZï3àTq@. "à¤-:9!$|r Q kl¹u$S C0å„\¼\¼<¸<SŒB-?šåh6Ôav ‡å 0‡l/ž;5íqÐ3@Ð ÐóP2 âGÃ/ ýœ­+ ‘„bôt /qüq´\/ðþ,ßq÷Íþÿê(òúyd ++¨Tñ :ydÈ ydHByf sX10¸@1àƒS€Xq  à1U  ³‚³ø2«X7°öTA Ë\ ÈA"p"Íÿl7.í¼Ù^ @1@FpžRË\ ŸË\F ++"…)û  &QzyfÑ )& ++àã ' ++(& ª! ++0¼nUÎ(0 ++R àMH îPbyh8=êM!HB ?j ôUµ Byj È(0°Ó†UiZ w¸v hB ¬# XFƒ*у èFH' äFÇ" @= žû¶/¿I4„3ÔÏ`„3ï Ý —n qÿÿê²Ý 3@  &ZðŒò2 @t f=b LLTM M)*ØÊMM 0N†²,%@{Z1j ++)$Ar¢Ž#C Š´Ó,lÓ,DyTÓ, Í,N²Í,nÍ, ++•pP…$H@Rrƒ%X `o¦  ì,  ì, ‚ä,(/•ä,á¶ä,¤ä,þ yÊÏ6ß vÆnvÆ/Ð vÆ/ÖîÅ/Ð2Æ/‰D/ƒD/àDÚþÆ/ŸD/™þÆCL yLsÈ-âÄH’½t#']#'! š“æ®Ú±ä ++Ç 3"Yÿºª/ÉV´“/q’½ÉQk‚&®_…Üýï$9¾Åžªlžª,=©~ pz«L.Æú° ,lƒA«+²ªH vÆ ”¬Q:˜…^Í3' ˆ1^±Í^/àKKÝ­Oÿÿêw/Q*¿[ÁÿN*¿H-…ä*¿%u÷'*¿ž.9èî®OçþÿêÒÍ­/% È´sO/] È øÌ"¦ýf•_O/ ÒÍ"™ý£ÉryÒÍ­/™ ++ÒÍ7°:ÉöÍj,Ë(}²ÆöÍB+å n öÍYïL/q öÍW/Ý öÍ/ öÍpyphp2p|/í ¦»ƒïP/!¬/²À9]Ì/¹ÌPÌíÌd.‰Ð‡€ð/â ðŸ$:$/å$/ë$$E$?.øø&Öû$ WD 1ÍûÿP/ù7/Ò» ÀÙšÆÁü/€H/„H{H/AH‹/áH#¬²ÒÝŽÒg$$VÖÒ­²Ò$/Ï$i$$¿œ ‚Ú $¨D DQë$ ++б€×P/-t  r&È/eÐe&È/™Ð“/AÐ >NÕ!"ú€/ÁNÕ </ý¼SH/‰NÕCÑrÅé¢ÆÄ¢Æ/0 ++‡/¹NÕC…0/ìw¢Æ/Qì#jùvÂì“/-NÕ?)bƉbÆx/NÕCîJÃ/u$[/å$W/Q$3™ÚÆ0&0x$a/]NÕÂÑ(YT/ÉÂÑL4/ýˆrÈ?rÈ/1{°" ø°/ °"þ÷°/5 °“/Ý ÂÑC"¼÷t/=!t\ÂÑ1/­!ÂÑ[+"ÌÂÑH+‰"ÀÈ4áÄX ÂÑq/©#ÂÑC Ì/ $ "üö /=$ c0/Ù$ÂÑC"½ö0/9%p"¯öp.q%ÄÂÑE/Ý%ÂÑ›.&TÂÑÚÐh/1'ÚÐ2,/e'h%\/™'\cÚÐ"úõà/E(ÚÐ[/µ(´"Ñõ´/é(´oÚÐ%/¥)ÚÐ$(‡Ì/*"zõ¬/E* {TÌÝÌGÌ/+Ô‡/­+$0/ ,0"ûô0/A,0‡/Ý,»0ª8S8"¹ô</I-< "«ô/-W/í-wPeP/™.PWP/Ñ.PW/=/` ›.í/TEP>è×g ,!à’B= "óó.a0Äæ4/•0à €ERž%šDð"Õó7i+Ù0œòæ0,0.E1 4@@ ãÙY  ‹l/2l¤ vöóvö2¤(¤I¤´(@lóÿê‹7+}2ôç$ `él¤ç¤ç4´ÀÄ.±3ÄX"óx/4#úò ++4Dx/á4S0B0"»ò0/A5Ð(W/­5Ð(.Q6L0¦$"`ò$/­6$w/97$ŠÛ.‘7Ê7`òÿêÆ|N°JˆÀˆyr ++õʈ ˜Ò¨€(y†Ã7OìÂØêÙ 'rd¾Ì¨{NI87@)ÈR úyt,:”X„(o äÞÎäÂÚp b×)Á/yv¿v%yt¿/yv;À/yx®‚x€Ì‰lˆA, ++p¿@ ¼Ä/yzZ‚z|®‚|‰H]&!Š]OHrÞÝ&*r`ÞÝ/y~ª‚~ª-p„ÞÝ(+J- ü2F3Ý%r–Q/ytá€7‚€3Ý/y‚Å‚‚¦3Ý%7ê)¸Fš ++pî @)?**`ŽHÂÀ,VŒ¨¦šv'7:ŒÎsGvP@þ<-4-"KÚ- b-_îêðèö’”äàYS0„(Þ_ˆÒˆ’ÕpÎ%0 ?y†ì&]š88Ö0¨_âÕct/ âÕ ,gŠ)âÕ ++&mr/˜âÕ+qBRZˆ‚ˆZŠ®‚ŠâÕ¦&yÒ¸{ªyth-Ô&/ƒÒaŽìÌ»/yŒƒ‚ŒìÌ /yŽOœÌ‚ý’®‚’-Ô·.j-Ô/“ʦ”¦‚”¦-Ô%›2ÝS¦–Ñ‚–Ñ.z¼ ++Ô/y˜Ò‚˜£ ++Ô /§b )/°¶ @/¯rï)7B),³ÒiïšL‚šï.7,˜˂œË¨&¿ò¨6ÈÁÚˆäžä‚ž°Þ˜‚ Ñ Ñ‚ °ÞàT/Ïz†"†+ÓÚ)¢‚¢ÆM1Ò ++Pµ.Ùºº )?¦º Ý !Xc ß:Ý}|¤}|˜ÃQ¡By¦hBy¬XGJùPòp/ëtQg-g-G|QÊS 6X?'›/` R 0 êù®d^ ¸òp Dc’y¨| ˆ]RªAÿĪĚīTéX6¬ ++()ŽÔ°zT—®ÿ$® á° /{ –/{…Vÿv¶ íP …Vr…V#¸…V@…Vñ‚/òñ‚.ìBD/_D/YD/²D/¬D/mD/gD/ÕDÏiBpâ^ã²!ðšªi   (ˆ¬ˆÎ±§õCLžL˜LRŽR}L¡Fãzt€TÀà”åàâ^ãÌ íS* Œ|†´Ý`~h1YìVìMì/G;D5D:à à/½à?””uE$Œ r.rrÆ&kÿrô |äv|åE`¹!VE¤{e% dy§ÅU*‘ÅÌ| <P~.Í¥&É9@Ù7 }" t>p / *y ++Ø'È eŒ•+ /½ ++©Cs»šÔ. ÔëÍYäÍYÐK}¨l¨øah ð/q à"àüà­UV à*@51"Ñü51+é <wÂ=”ÝY"ÃüÝY!¸}ÝY„˜p.ñ pƒP/|ÿp>eP$ ±€ ¸LZhLÉVýÉVðZ2/e=/ZCôôñ¦è)¤ /a胑 ¨‘ Ð.Z {pjp3p"°û|/müø¢Ü¦/¥å=eÐ|Ð/=ÐnÐ/uÐc.…~E34ø0±W/mE3>èùè2/v ä$/»$/¾$&ï$E$‰Y À,Ãú‰YغÍS/EØS‰Yì.åì‰YH PH0qHhH/H‹/-H#zм/¨$1$/Û$$/q$Õ ++m$$/Â$µÌ%Ì8_Ì´tÉV/]  ì eÍV™ÍVÌ WÑVÑÑVqL/y̹Z#hñV/õ¹Z <"ÿø</1Äw.½Da> D0ƒëÀÄÙS/à ++¶©T/Uà ++‡.ñ4¼4(“ôw4/QôhU/ô"Zøô/Åô“/mô|Š|­`||/Í8_AÅV8K/± 8//õ  /&0œ8a.¹!LvPoLš“ç,@¸‚¡T.%"l 4u4/Y"Œ<"g÷</‘"ì{AÐ/)#Ø"2÷Ø/e#Ø$íY/#Ø“.E$ fŒ_Œ¬óåTâÅS/¥$|hØ0/%´L$õY 5VLL / ™I*ý%ÜLùYõY+Q&Ä ++ õY!L xÔ.'ÔTPM\ ++-Ô/y'\ ++V±Vd4/M(\ ++y«4à%S/­(„…V…V 8¼œ»ë¨ !)¡P*O0†å¡ gí¸.*¸y«¸À¸¯­SH80©¤0…V „ F‰V‰Vdhž˜ä/Á+„ 05yVÐ "ðôÐ/m,Ðo8$.)-€@P9((¦U/•-"˜ô¸/Í-< {rÐ/e.ÐdÐ/.ì‡/9/( %…W/44/Ñ/4‡/m0 e`TD…V …V@ ,Æ™U.1D,I/…1,sT€T/-2TqT/i2T[/Ù2€ —.…3e` ëÚhZ0¥  +ù3/@šÄ4-mVø!Z Œ'"îò!Z*u4œ  Œ,0.å4Œ,  4̤Å!Z¤ "¤òp/5p¬d"•òð(+Ù5dð()ZÉY…~ò)Z.!6)¬0¬” ‘p¬)Z6_0†å#@)Z ;ö¼ÁÐ.U7ÐÐùX/µ7-Z/í7‡/‰8 ++-Z4"Ññ4é`ø(L/Y9ø(‹.ù9p-Z$"vñ$/U:$w/á:è&j;.1;j;ð7ñÿêèj3؈5"%Z² ++. ++`´à ++Q-Zõø‘ 7¢(XyÈ£ðˆð E¸á0–ˆ „?Þ̨$xÜé$y¶QfQ 3þZðZn•Q •Q°F•Q&rvOPy¸ZlpÉôº_Dw¶_DºÐM¼®‚¼Z¬¾Z‚¾À®‚À}0Z&/]OHyÂZ'jfZĪ‚Ī-x„Z)7ú-ÆÈʆZ$(rh›Q=y¶ûIÌ<‚̆Z«ÎÅ‚ΆZHïEO†Z @&M:@Kù{DÐÂÜÈZÆÞÈÊÈ K)Q ++^ÐÒÔmY ++Ö ++°Z PWây¶«¯Ø- °Z #]r-Ú_Üì±yZâœZ yæèÉZ yìî`Z´«Z&rfó%0E ?yð o.0«Z qЫZ &s’™åS«Z,wú) ++” «Z+}ò/aò‚òaô®‚ôa‹ˆZ&‡Šc¸‰by¶ºQpˆZ ++a ˆZ/‘¢aøˆZ¼öƒ‚öˆZ ++øOœúÌ‚úýü®‚üˆZ‰ ˆZ/Jz ˆZ/¡²z¦þ¦‚þ¦@ˆZ%©"݈Z/{Ñ*{Ñ.«j¼ˆZ_`B{Ò‚£/pˆZ /µj  ˆZ @/½Šï ˆZ,Áòiï/{L‚ïˆZË˂˨ϺFÈÑ ++ää‚äˆZxÑ ++Ñ‚ ++шZ/݆ ++ˆZ+ã*) ‚ ˆZÈé+ˆZ%ëÚ# ízݧU ,{§U”§U {§U/}Ùž/{’¯Uÿ…{ ÷8 ðF˜r\j±U/U±Uö±Uð±Uc±U]±U¶±U°±U/qDk±U/ÙDÓi=W÷àâ±UÁUÿB/íÁUËÍÁU¼ÁUè£ÝS¡ÁU ”ÁUÝÁU†ÁUÁU”½ÁU¬*ä…ÁU`ùÁU\iÁU4±ÁUØ¢ÁU¥ÁU`ÁU\‰ÁU0ÍÁU°‘ÁUÜÁU "Üüà½ÁU ÍÁUùÁU¿ÁU1ÁU¼/ÁUïHÍT ÍTÁUDuÁUp ô+ôÉ,LqÁUŒÁUP¬ñT}ÁUžñTµÁU|xÐMÁUjÐ…ÁUˆ!ÁU@,ÁU}ÁUx/ ÁU7/ ++ä¹ÁU VÒ­ÁT¤ÁT VŒ/= Vg[HRHå VŒ… Vÿÿÿ^ Vµ V O Vñ VA V/)“Ñ V`øÍU/M Vé<‰ Vx/ VC®YSu V  V­ Vˆ/I VCa4© V R Vå VD V/ô“Å VD|/% €_™ V\/ !€//M! /&0œ€a/" VOlU} V_4± VQ Vé V|+Ð V  V½ V Võ V” VDÌ5Sý V`/q% V_å V\/U& V?© V´q VDÔÑ V V/ (\ ++‡¥ VDÊõR/)„» V.A)8‰LI± V˜] V/+ V>0/5+„0 Vm Vä/,„ 0 VÚ VÅ V¨/- VOT/í-"‚ô¸/%.< {\Ð/½.ÐNÐõ Vˆ‘ VD4ñ V4/)04‡Å VP¿µT/11@ ,°ñRm V\Ý VŒjT… V [TÁ V\/13€ —Ý VX÷eTQÕU/@šÄê4… V,Ø VÍ V\.=5Ô,  V\Žpõ V  V+16d Vm Vy V\é V°­ VD V/ 8"úñ/E8‡á VD» VAùT@)L± VŒ/Q: V?` V­ Vx/9;0'±aX/™;ŒŒ/Ñ;Œ‡/m<Œ "Ùð/É<w/U=%X;.¥=à=ðšðÿêj{F{³=t¨NO\pfh&û d&û{{:O\pff5 f5a.\û †ûþZû! L!{„û(4ñ ˆ{8{.3 ++uRO\pfj¥ h¥'{}J‡‡{2{2=3TO\pfl‰ j‰L‹‹q&{ ?YO\pfn‚ l‚ Cyyq"{6ZO\pfpx nx Bww/ßZ*ˆßZHR{ ßZ‘{r{$(–EÚäÊÌ›l` pÝD"(ÝG8â (FrþZrþ!v "Uþ {$ O({t‚[?d`dlR&’ƒP}{(xfØÂÄÊØæ*lR r&J'^(8d(+\?d`b+\/{*Fv&{ F*F°F,®‚,+\¯/{.Z‚.0®‚0+\§:¡H}{4@¼Æ¡²l, #f`D20S> ++3º''Ê%"'f *%4%ó\":d``ó\/{6r‚6r-xõó\)9õq ++{:D¢ÇZ 4 ++/l`÷ b÷D8÷U=ù!' Ò:Ò¡H} {<BUžÌÆÂØØÂÄØÊTb© d© ©T=¨(Ôd µ<µq{>FaaÆÂæÊZØXcd· f·V¹* ++¹>@ü^"rlP=2{ ü^/{@E‚@ü^/{BÅ‚Bü^íü^#z tO){DtO(Q*[{¦{H8¦äÞìÊäÌØÞîZÆÐÊÆÖrõ ÓFUO ++O*`OHš{¤{J0OIèäÂàKhï jšK„(1>=`„J£qÔ{L$XDÎÞèÞRã l7E-d-LŠSÒ{N6Ž æG¸ n)Gb|%N›S´{P%DæÊèBR¨ p™E—/´¼P—SÊ{R—YRN &fr—? E1 .(ÖIP1 F1 R±SÄ{TãdÒÜØÒÜÊn &h`³  Gþ µ/þ|þT¨S {V¬…ÒÚÚÊÈÒÂèd› /hbJvOV ¼c Yi˜@{ž{XcZ6mÐ /hd¬J±'deì°XWrœ{Z*VUÒèÊäÂnö /hfUHS*S?Z âd #_"SqÀ{\&kTÂØØÞÆiW /hhOF“ ü\LS¾{^üCØÞÞàRjU /hjIEG(Š—ºGfG^¤q¼{`4_‡ÌÞäÊÒÎÜZcjd /hl¬Mû/`û`´v¸{b&ú`… /hnñ ++F<*fñb™S²{d™TÚìØÊèS… /hpîF `™'Þ?'àï*âïd³T®{fì­¢ /hrï GôFôZôf¨q¬{h"a” j”DJ`Jh¢S¨{j£Ò‰jŠ /jb¡ C /PBj S¢{lB4æÊâ^t jtD2¢•l•S˜{nodàäÞÌÒØzjo /jfo HšonSš{pdàÂäÒÂÐGM jMôGùp0({ëtxkpxk {rKtxkº¶ xk²fxk &uBxk ++,yª)xk +++¢/®v„‚v®x®‚xxk¦‰Á_‹{ xk(/“Ra|xk»/{zƒ‚zxk {ûÏœ~Ì‚~ý€®‚€xk¸úzxk/£bz¦‚¦‚‚xkÒÝxk„Ñ‚„Ñ­‚xk†Ò‚†£xk ·vxk"¿ýxk ++Ã: xkˆL‚ˆxk!ŠË‚ŠË¨Ϻ0Èу xkŒä‚Œxk'ŽÑ‚Žxk.ßr†xkÚ)‚xk+xk/íŠ#)ö#.ñòL)ôL%õÂ#Äk÷ÍÄk’Äkõ xB} H 4ÜàZàØÂÆÊZH¥ »œâú 4  áŽ-ÙŽ-ÈPK0 ã ++ ½! ° á0‹å~a‹pá"°ÀêCÆ.™ß °Z41Tã¡Š ¾- €”Š ð°€å €åà’å,^ã‚Ú9R0’å pÐáÒ vö3ñà†å°†å †å†åP1 áLà¢1 5+Y‚/xã‹0šå ’åQ ++R|óà†å,à ãà†å 0†å @†å V4ÆQ >ÆQ8ÆQ Î,c Ö†îQê5 ÝÇl./ìì+…¶/ rK D< Y 7Ê2§üA<ÿ/áÞ^ªRBS peD8\1V9/ Þ/‰¶iO šå'.0 Èñ:ê.ÎÊÜÊäÂèÊZÒÜèÊääêàèÆ-Èú¨B}  z‹Þ&Sd^ãMŠ@: ++úä2².ì ÿ à—å à€åà—åà€å0€å0¾ ØØ4Ø4Qà„åd6„å 0„å Ø4Ë|*ä/Ub@ šå³°2C^ãf ´´$´p2”ñÿÿêD^ã¾BD ++! ö ÂB{Ö 'ˆò]"j]qà—å àž:@c ++ ã` ++¥Ž0’å(Sã AV‹›SG* +ë2 à’5D"à’Ñc!à’yJÝÀ. ++šå ãù Šâp—åùü5A •mum$S è‹1à—å#@0Žåài¡0R+M 0—IWeU å.ô'@'DS à†å «µ=ñm_Qá \Ø\ \ T&ë`Å:pë‡ë ‡å& XMô5:TD€&^ã& ++ é1 à“—ÉY! “‘ËßQ’å0“%p Õ¯êÿÿ@Šåàœ ðáœb@šåàeãë‹ ‚‹| ZqDkD`DZDODID›º/å›7» ++¶ˆñ€±> *e±>tÿÒ/Yt7 è/4DD@-o u  e ee< p(pa< UA MAXà†åAA Ôë½ Ù' Cà ð5Fàmad0“å à“Àcà“åÐuþÿ à“X`{þÿ ++yþäŽ^ãwþÿ ++wþ¨4Ám!*þ(À/pÀ.¡ \.Áýp@²ýÿêü.ý[ 1z²3Ü 6êÜÊðàÊÆèÊÈ@I2ƒåâØB{” åˆÜ?ú l Šåp/zª’’ | ùªQª&v ªÒð> Sã- ++@Sã ++€Sãñ ++ ++ Sã ++Sãx ++ SãÒ ++Sã“ ++ Sã ++`Sã× ++Sã;;cû1 SãÏ ++Sã‘ ++ Sãú ++"Sã^ ++ÀSã@ ++àSã  ++ Sã ++àâ^ãÇb Ü/´Ü®† ?0^ "þ ++•™„yñ q0’å0Š– " à¹Dpå;?"•ÿFͱÞ ++@kÁ¢ŠåŠå ãE@ áT†PPÿÿêä7]. "Q. =0šö ++7£N<-¢0¢šV ž ++ x`šåð¢ r „Ý)Ù ôÁú‹`?îOþ/rï ó.Õykbd óÆ$_ SãK`à€å ++í„o€å 0€åd nñ!&R/eL €ØØ0t&ît/ x '»Hè/ìè/ؑ؀Ø|Ða÷z/ÐiÐÐL šåÐPMþÿêà7SÐOÐ 5Ð(Ð Ð.&îÐÈ íÈßÈÛÈÃÈ_¿ÿÿêV°/íÈGV.oÈhhŒ»{/{@"àM "ÅýM& M @`#MŠåŠå¼pW  ŠâPß±ýÿêÜ] PSD ÀgJ1šåH€0Šå$ Šå(PÖ Ÿè­ (Pú(( Jâ° áà á 0šå$ 'kRá ++x@^áp|À8\È*å< ++ E"*@*O@{¬UX8S %K’S*‡! D2ìðxüO'OÚ– QÊÖ0SZY@h{®=– ++@&W*< ÐY %H– olWo°  8¥"u¥b¥H —å% ¼) ©0Ò©Ù©ÿ! ©‹ˆ„©ò©¿B{°˜Ú{°©2+©[3Ç;²pÌ' ++ AÒ_a€hÒc¢†2¸eZÞ ¿ÎRrÈibÌŸ ?´ ++`F¿ / ++ pz {¶4ABXsIXýòuÄ0°w ++¼tP{¸ ++`d ¬( G¬@)'{º7"}ªdûÉUº ÿÿ"º º º÷FSˆ{¼``Q/…òQ™/‹²™L }šä ++&¢ƒ‡x ‘ê|¾ ç Ax{¾— ++&¾mJ#¬ú'™Âú#›¢'=À ++h/Ÿw .(æÂæÿÿ"ÂæÂæÂæ'£ ++U úbÄP H­/§êõ M/­ºúZ&±jZÀÒˆB{ÈU`xòDà"e$1T #1àž|1 °“1 0“h 1`“@" (o°Šå`*™»V˜o°šå`à/* ”m[\5 /)˜" ˜@p áœD!( ¨0VãÝ€BÀ¨`¨L ¸”Ê:°†å¤Àì@¤@ B†åÀäKhà <@“å 0ŠT8Sã9$`t^$  èêè <\ É"ÀàüCüC€V•DôCP &É"ÀìDOšåÇL€3 iD ÜD_æW´q0› ì!Ø-^-8#Ø€T㪦O¼DÔóÅ3à ã³’,?Ü ++ä"å” Så °&ÀååpåàÜ0^ãP è9 ’Q ã/ á/º QŠT Œ@ ˆ \(ÂY‘ 0žåãxÄ2žâYLŽãœk(2;“prR|X``~ShDoà ãà¾R@LŒKŒ€.ü0üü*Mü(ÄK!ËT¹ " ¬ŽÂV* ãО82SPã\'èèÐ èèL£ÿÿêàå ‹°0àå| €Zž<¤@"ÿîR0-.ôLø/Eø$ °Ëì/žþx*þ‹ñQ4ÿ/á/êTļÀ$ ô _øÜJ4D8À áÄØo þÿê4à1#/ {` _Å€›.Uv”ýÿêŠê/ @/ _pB{Æ/ ÿÿ"Æ/ Æ/ Æ/ tz{Èp"è™ ¨ ‘ B4XùC˜/Ûb¸{Êx °{Ì   î؃"èÆãW @:d—³ ÿ ƒ1Á_!ƒ—šÐ>cÞb{3›L 1Zðf”f —å0gH7C% ¯J«H.òÿËJ _ é—$à$C%Ôj"@Šž²à*G% *•G%äj ¾ †3É!›Ÿ /!0‡& ˜ 7&‰ ++Ð5$Š"ÃÂj/p7 ++hÎjB{ÌH¹ l,{¦ë'òˆ p20)¸? pÃ@ú`c%k@C0 ~RgòÒÜÎ@ÒÜìÂØÒÈ@ØÒÄæàÊÆ@ÌÞä@üæ@èÐÂè@ÈÞÊæ@ÜÞè@ Ð@ÐÊÂÈäÞÞÚ 00.ÀŽ¨‰)8óB2Px&r%b{Èpa j  t't`Þ0±×ÞÞίÿÿ"ίίί%¹JM3@{zÙP zp%¿Ï#8`(¶oAb8ÃYxì ++Ðÿÿ"ÐÐÐ%ÅÚì?Ò ++hì/˪ì8/Ñzì)Õ*(ø6 ++Ô·'Ô(Ê(Ë·( Ý:L> ÝÚ«'²(8)å:«¡•8 ++{ÖxH'h ++À¦ÀB{Ø wàÙb|"@Ùb/ Ý/úƒf'ôÁ,!0”Ùb"±Ùb"hyb"ž¹bY©b"çÁb"²ùb"dùb"áb"q¡b"[ c"C c"- c&ì¹bC¼ j?gd}-”}- üÃ,J=7ä¡r à”å0”½Ú ++#p& õY1Ù+µñ6p ++ %@Šm[D<݈ÙL R   ÿf0ÿfMQ„å 0„‘8ÿ} Q/íú ´¹*‰4•O@šå¶•¯ê Ùd" ++Ñd"ÑdHÑdÞ\ S‘7 ++as( ++ ++ S´p/”å´p/ ++í´p"*‡m Ä$)F$<¥PÜ"ÿéMÝ ¬ªHH¥HXPÿÿê@â$X] ++(y_ÌÓtº/º³@Z<G<"Æþ</ <Hœ"´þœQÇlHص P¤þÿêÀ³ '* 턹O„å0 //)Œ¦ŒŸŒ_ŒLŒGà”åP·} Õhu#p€ÁR‘Tdu€´Œ/ÝŒ#AŒ/Œ'/"îŒ} /É ¡XнŒ/à”ì"ùýì/=`#"éý`/}`'/ììG/ ŒLbLOx¨Mcl0DŸ ”å°”å010¹8/°™A jÀ ++a±8O°šåmG&îiz †å°†çn ©îȬ/Á ++¬ž¬—˜ø;ø.5 (x¬.¬ 8*µ 8,+˜ $o!c*e$ôÅK†`%|“†é0/Â<»5"s‡* ¸¼"*ù•W*y ¿…\ ±r&ñø/ øËø¼T°"ÆøÔÙb ÈT"·øT.Eà Tq/ÝT"^…Gx»þ{ÜBæèäÒàZäÊÈêÜÈÂÜè?‘¨Gæ¨Gi"&Д=®4r ++`ü›œ)B*{Ø VØ{˜¹EU&/{Ü1GVæ–€V7¢ ++PV%RV&°”/¨…%j/©˜B{Þ 1ý̆@ ++·A… /p—»“&/u»“结SzB{Ø×#S{Þ¼“p¼“Û¬÷>á&ªÀ/® +++%B9ôþ/{àŒàxÌ”/{² ++++š ++ošâáŒâáhá=¼ ++Xá+1ÚÂåÀ%5Ò#NJ5œ ++@nJ% ++HdJo€B{äŒäVXH;P@b8?ë XC ˜.4r°X´—!(‡2{æF*hD%I:DoxB{è#ŒèBVB ++ï—#!MÂ#`{ê<² § À¬& 2¨4?¦"¨&†§VÞÆ~%¨VèÆ~'¨Ádê ++è¯CWš°‘C@úˆ¨ÜCPÜC@@™+W²á%HG@&[ÊÈ9-!)¸ÆìÆ Ö‘Ç{ìêÇp .hm*þµ0B{ð °¨=è› Qà—å˜=Q—å 0“C `6lV§ ++>S@{ _—垟7• 7• 7•Ï ¤X+ÁÏ^0 á@ó à Ç Ç/0ƒÎ ãÈA*0Ržå y1"pŸÑI £‘9™/pšÇäæó Y— +áY—pHêB{îÆHÈp¶ˆ5 #œQÚ{ð07ð ++ Í i20°)¨1,&mB, 7¦ ++Hü&q2,Í) Ü ++wh²1 Ú…)e0{Fˆ¬ ¥°BH ö ++`Ô¢üë üæ @Äêè@ÎÞèp L(ˆS¥ŠŒù-´CB ++0ý€{ò YHå)¾Œ- /-* ¶Œ…)@¶ ++å)1 å)eÍ)"ÓÍ)Xz&G¦e¦eb+b9’a* 4À–*-*  !’iý>[úUÄúí ++Az ú Ò9@¨ÿÿê1+"9a+#9+ 9+"õ9+¸)+j)+_5Y¦X<@Ñ/ÑL éæš[NÝüµÌ 4"DÿmÎ.4Õ 0 îÄ¥”ÀÆ>lé,"÷9-"ºê"dA-"+"Æ+"o+'+½› +/& +%=,"Ðþ/á0 Äþ~bK*é* )" ø.¼Ãø¼`L;Š/ù"}þ.-4·9ÐÌ@qþÿêd+]Æý* íL  ñÄ´T­TGT6Zm©* ++|/  /m@!@/@'/"î@C.1Ĺ@²@A@0@h"ãýh/•("×ý(/Å('/ì(CYJA¿(¸(K(:¼"›ý¼µ\nBL°’å "@–B/°  1)0iÕp†Bå)S@†å på)0.© ++ôµP®P2P!xø"Fýø/ ø'/íø;.• ìÎìÇìH­-d ++dùd<“?㧠+A |0à áƒ?/0A/î4 C.Ù à¸è0"ºü0/9 0'/î0;/Å 0Ø I*-¥I*3’I*>+f~-p’ì#0(ð ,1lbM *$pa-Ä؇Øvp° 1Qá9º=ÒoPÈ !‘3È Qv„Tv„¨D å) å) l ++0 ã8 ¡á"àû+¡p4 á@h=0“˜*œ ˜dÕ)`ä"Áûä,äÍ)D Õ!Ï ‚¨,.ñŒy,r4'40v.]@‘)Aø.éøÈh/`àhtIt8|L–y È ++"%ûÈ ++jŒž”¸¢ i' Œ  ,Ù„.m„·P°A"l‡"¶ú” /IP"©ú/}l/l@J"c8B{ô>¼LÒìu/F.eóßì8qbB{ò@ßAâ{ôHÙ7/ˆ+2òˆß" ö"ÒÜæÊäèZnÉÎ"oæ}wjß´hóïBSb{òvAðÏ"öjV`Ï"V%RV&˜,`Ï"/&ú…h­ø­vø­º"`º"Æ&!zõ¨)®)+%Êݾ?{úõv=ú tÔÎc Æ&+jÆ éç¹ÙBÃÃ?{üévüÞ§"é/3ÊéÀé%7¢#¡" Pþvþ@Œ"!H(?ágPÒðA`…"˜…"hö}ùhGéHê¸u/}–p" KêX/G@ê!8”F€¶!' ++(&Qòó&Y:z’ƒXöƒ#Pㆦ`} ++xèîÅG|#š{Ö ++°—(ú{Ö ðG 'Z+Ýu ++$"OP}ë#£Â}p} ++MCx} c/L/ 2 «¹tH Š(láo&°†H='xH) ++0#±$±,ãz(lP³H*}:¼c B?À£PR}$( }H&ÈR0 ‚+M ++) e@ ++U… ++­ g!^a +½ û]£¤€ ++BBü¥ i} ò!O9iê1eê¢Y .a¢Y4 •4 Œ Œ åiê @0š¸ÌH¾,}H¾ŽH¾F  ˆ 0Ü -öÄÒÜÈZÞÜZäêÒÜÊÈZàÂèÐgÊhº.>G¶¾Ñ¡3ƒG¶ƒ¶½«¯˜‡ p@Œì3"0€ |ß.ÅU~. p— Ñ^ ²½p“ 0 W0QÏ ·²|ƽ8/@÷+u÷@Žm®½1P.õíw1PUXs ´;«€4B}DŸRhÀ†Á½¼¥y¾Hé5x=óy¾=ó.U=óe¾Qв(0ùe¾¸]! `? ªÝPˆB}Üá(X^dþ$Q á0ž¢½S¦@ôc! žè)=Àžƒ=2 ÄX,ÒQå°Ö_ àå$† ­Ãa †å 0†4£÷¡À†å†å«4/ã>" L–ç<ÕÇÒàÒmÒàõÒliÖÒB €Ø»,PTã)a¾àø\¾ Ó*0 ‚⛑9ö=:>4P Žâ0,Óc>ËU%ðš×‘4 z70ôÚ=áòD ++Bù."¬V w ++†@  ++` çEÄ  %\¿@r—å—Ù JWô¿ ^-}4)á.—/ (%; Ö,Ö, % @ÏÒB} sÐí*/Ày.º£·"DšT®/›²‘¢Ap¢A ¯‹ ù* þ;MP’åà<¤`kƒ_’!à“åàâå¹ ++Pin\*pý«Q)/u” %0šˆ'ˆ!ˆ"ìˆ_Žã! ƒ¸3¸C%C C‚CHöA KŸz< üâÔ,ÅYƒ¢œm/¨p šåRÿÿê*"!*"_6UÁ-"ÓÁ-½Á-sU,iôVÉ- É-É-8É- åF /@æþ.í~Bé- ÚA2Íý-”0ßnT¥ÚTˆí$ëà/ýàúNý-"¹ý-£ý-"‹6Y"u6Y6 .n ( c¨]¡<Jü1¡qˆÁ*/ ©* … z‰)9É*©  ©ÔÑÐJü±..."Þ.w.'Y’Yj E2û˜HÔ"þY" 5*<i*œPøýÿê0í&!)i* ÒF/Ù»í,¼8I<¹1(/= d& 0y* ÄÞR ++ñ#ŸŽ°Ì+¹ Ì e(룙*!0™*PнîÞR”/m ++0¤””4…(Ì1""Tý*D+Ñ ++˜µ*  …( ô/a ôÌÄôYôFÀ"ýÀ/Í Àˆ+ˆ_:ø9ªTà56å* 0Έ/é ˆ§X ˆ8ˆ%ˆ¯ "³üUÊT}$G/í ÈÁ€"tü€/Q€'/î€?/ဠ,ìšR_’å °’4/ 0Q1*q" 0I1/ -,$°-, ì4/<µ04‘(,  .™ºSQÑ /= ¹E*HŒ"QûŒ/ÝŒ'/@àŒ?/m #Bq)# à_ø].ÕhàÔ žK,,/ ,'&¸@/™,¾,·,·,¤¯•"0oÌ* àdƸ T"pÿ€X48&p*[í*èí*ÖL@Hn@0—åt;\t$ F“å!à ýüýÿÿà à!ÀâàŒÌ„-À‹ÈÈ[m—€á¯õ'¯ßä0`!a "üÒTbZø"0h!ÈT(Ð5Tp1š¨vN›]úÿê\­>UÌ!üé<á@ ·Â øJP.ôÃI\B^X g»q/ ¨E¨/p:V*A8"p ÈvO .xÔ¤"ÝùX /­X '/"îX (À/YÀ^X Ìf"p³„6WJ6WD˜'†S0žå ƒežåà6Tá(/p /.-Ôì'V ñ0™1( ( "VJVô)/!ô Ä“¡1Š#ù#úø„#"^±1ÒB}»”èîK[”5b?ê‚÷ A÷;÷a9b³ë” /½ó/[L Ï.  ++§ä/\8 0§ä ´ÝQ—å ž” ЙÐè8p8  — ++ ÊP# O.i¬l›Cä³"zÒØB}ˆ)` /'ˆ/)?}Ÿ3Ç)R ê}Ç)iysÞPB}öT@2| `\P\sP (+-Ï R} B}Ñé ++pÑéV)Ñé#}¾,H5ÌW (Øq}K/\V}DøpÛLRº}H-Ðè4/Žè4¸¡/ ++~V%#ÊV@ë_hB}o‚oXÕ3' ++(×+)ò×Û3#&-Ú#°:ì/} ú‚ iæ3 ú+3ê×S7À;°V/}"8‚"rí48Ab8Em_xB}$Ë‚$lNV I’``ä3å¤åM¨% ++Ü[&SJ)\6 ++(À V YšKØò ++@B}&  ÂÈÈZàäÊÌÒðTBZQ&P㛦Ì@ á 3…3PãR×=j%0žË$?õÿÿË$9ïÿÿË$?ëÿÿË$ Ë$Ýg?ÓÿÿÝgÌÝg ++$Øò)7eÎTö)7°GD>&8&2&#DDã)0ã)Pã)äPV+L œªÞ ++@Š!`Fqâ}&X$X$08[h.~7¨ ++h<ÃT_1í(S äXTr(W HB}&8cÈXâ^ e;`{Ê=e> ˜ñ Ý ,&nc¬.U 1—±Gá4"‚3‚/.?‚å&("$_‚ °øW.@å îj 0çÝ S.C.3 O.Êd3ƒƒ1T/â3‘Éç$DÉçDÉçDÉçDÉç>5O/}57‡† …Fü(€,½.àNg À ¸Ô mHð( ç˜ÎË… -/UÖ5.óþhäõTÉG.AÉGÏPuÈþÿêF¢g«Ž1Ð’ <討1.Ž1&JLÝ# ݧ.iâ0IGžåPˆ/pɹPÚ’ÓûÆ ªB}* q°21 Ü9„ü…~21„… D.ü@†"¾š."š."iš."Ž1/‡¢.|ok\$”å¢.7¢.40 ãh}""°t dKèr‡\!ž.*0†W3ž.""¥ž.”Û)@Š–„H„.–"p/¢.êΓ.m^& @¢.ÍŸ\·Ø‡ŸØ‡‰Ø‡&J¢.p؇fN/`„l? ´…n}Þ.uSS To <"ÿª.±ÓË”®xl ~à/Mà´…ª."“ª."/ª."ðª.‰Ø‡8؇Ô¿\u؇¤ ++ú"$"¢þ$/™$8”ß\Ñß\U/aú"T,A,W,/Å,@G*0/@w,9…¿2& x…ÿ\(+t/Õt¬t¥¦-”<9f!¤t/yt"Üýt/±6!/t 0Àˆ/] ˆ¦- L/à”Ä ++–.//É PˆP/ ++ò2)ÄG/™ ++Lò28"Iý8ý^1h €‡X€#0æš° ++}L†8}ò2p‡(Ì”/- ”ò2”Àäw[/‘ §]Tô/! ôò2Ä "¥üÄ/ ˆ*ˆz5ÜüýÚ1n5–- |p/îH ++ ˆψ/©L# ++ò2ˆ/à”"Cü/ò2)G/­ò2€€/÷^Tô/¡€ ò2-H‰—8H‰Ð¸4 1$†´8‰UÎ</Ý<µz8‰>ÿ&8ÿ&Yÿ&" @»&ø'_/…øû&D)0Š¸"û¼Í|†H.0ó&O_0âó&8ï&<"õú</Mß&TO_ß&#D/!Ds€lJ5‰J5ª.±ª/ J5W4/U4¹øJ5DäK¨/õä'/@àä?/…äô0ôì ì1úÿ4+ážìö*ä/iäÐä ҧܑ"´ùT/QÜ#¥ùb܇/)Ü1àó#‚¸ â1|ã#”ó#}¤1)à”˜>«ÌŒjŒWÔÈ/ñl?) „Ú56l´( æ6_à! „Ü!£$•ï/@²J ð Ôðæ×Â/E–l„V¢0PˆÒ±#,î(w*š$,î(@Z-0Z-R ò}*Z-ñ}.ÎÂèÐÊäZäÊÌbb81…¨^™€' ++Xé$S²}*é$øz-/}.1… Ð- ++U)%ÚV& U)/p1…%Â/1…/}0¸‚0q+R&/pE& &%Ò°/ ++©.++J/'…/}2‚2©.…+1rש.+5Z#¥R4ú‚4©.6…+;jש.? ©.C©.68‚6©.K2O…øg‰/hÉb ++¤4}8”¯9U9ö.:‚:ö.Y!ö.&_"U#W%#&aêU‚€A-i×5² ¨@BìÀ4 ++è$Âô$ÿ€¢ 1Z/YŠ}<'_¿P€X}>Ú€Y Ýax0B P:¿1)@:m2)à€ 5r´e)H\Ò<¬ ++Xá¬& ++ !HSš}>e irŸ-5%ˆßR3}>( mZÅ, :¬’5s’5›)}eYB}@µFh€ü”ÄSò}Br7/ 6dR†ØÂêæ¶-04udT ++}DX_d V_dØ_dAŽP8R }F8- ++0Ï Ï}d `dHD/`dŸÂ`dþô ++}X é¨ êÜàÂäæÊZ˜r\nj _‰Aƒ ++d-0@ áÔ,â /öâ/ðV)/cD/]D/¶D/°D/qD/kD/ÙDÓòH÷àâ>‚9žž À»˜ ²˜¬˜oȧe6L žL˜&eŽe}š ì ++ÔL[„à”åàân—ëÈ*ïŠd‹ø )í’dàE~òìVìMì/G;D5DMà;ÊJ¯à?””ØwÊŽ Œ Bf.BfrÙÃÝ\ô |äväŒ` –,VE– Z£Z¡ …ÔpM<R)žÝŠ)V%*àG"†þàG6¯ö ßc¸3 ²ú-3†â. à>s†âà†åêh/#à¸Içbhô ½dZ/@‹Ž£ÖØE@7"íx‡BŸä*ä/…äÆ(mŠteg/@ ,Áf*t pLp / 0pR.ipR* 45O áH  F) ’(5˜h" à5¾0 ŽkÀ"0H/à¾0 tÝŠ­(ⶠ¢àZ/¥ °_ æ* b( t>p / ‰Î)š!7¬S Í)å ~ ྜ€„â à„å0ú$3„â¤L3à„JëÔÜ\šÔ.‘ Ô.ëþPOäþÿêÐM}¨l¨øah ð/ à"Üüà½á… à*@r""Íür"ù8[6·<®¯"¿ü¢,1 ú*d(d $hhSà„âZ¦Æ‚„â#à„å'0„+„ãp˜p.pƒP/|ÿp>, $ ±€ ¸L“¸&‚ˆ<Ò$l "Hüh ­„ð$ø 5.uÚ £ÁD Ò ó´½Aô ô….0èÝo øÝo/qPY$ ¨Ýo.m\fÎ"{pjp3p¬ X/}üøž$X/µè/ „/0èÐxÐ/MÐjÐ/…Ðc.!…~E4â$",ûâ$/}Î% (AÎ%è. èE/= ä/ç$¤$?$/é$/ì$$Eõ.  &­ú(II ¤'/ S5‡4.=4Á /~H/[HRH/åH‹/…H#/¨´1$/Û$$/q$Õ$ ++m$$Âl ++µð%4ð\_ð´gY/‘D "XùÍ")ð JÐ\/ð“/­ð @C”n\«ÛD"ùD*)D \<"òø</eèw.ñD½Dn® È[F-À"·øÀ/Q "©ø /‰ ‡.%4È[ôj4/…ô"[øô/Áô"Møô/ùô“/¡ô|Š|FÌ\ |/ \_/u \[/å \//)! /&0œ\a.í!LvPoLšL‰,@Ü"u÷X.Y"l 4h4/"Œ<"Z÷</Å"{4Ð/]#Ø"%÷Ø/™#Ø"÷Ø/Ñ#Ø“.y$ fŒ_Œ¬Œ›T"Õö|/Ù$|hØ0/M%´L$¸g *Á%ðLL / Ài+1&NL"à>Íè'ŒU0+…&Ä ++ ÀÖ8L xÔ.M'ÔTPM\ ++ Ô/­'\ ++"ö /å' c4/(\ ++e\k4"Óõ4/á(„"Äõ„.)8ÒD,¨ $!.)ÖD¸  À¼ vQ͸.9*¸›¸”((bÄ/¥*ø"Tõø/Ý*{.Ð/u+Ð Ð/­+ȇ/I,(ü"áô4/©,4"Óô4/á,4‡/}-ü½4¬DTD‘@/é-"‚ô/%.[/•.sTO\plp§ p§'}NK‰P‰|j}R4>û>O\plr‹ r‹MRr^}T"@a>O\pn`„ ++/l`„D{T{rZ}V 7¯HO\pnbz bz CyVyð ++0Ò˜Òø‘§e7¢(X–ú£ðˆð E¸â0–ˆ Œ?Þ¡@xÎ"}XÍ?ò8Ò¨}¦}\*—EÚäÊÌœrE #ldßDZ(ßH8ä &FÉ1Z  v " P}\ e(}¨X>[Ÿld`n7(DCBg87@ ++˜è@&’„P }`‚fØÂÄÊØæ/r) #lf^K'^(8d`$Y lÎ/}bxF ++xFVFZ}XxFbÈJjd®‚d®! ˜EAÀ Iûp=Ån'‘‘ %ò”7 ++ºoCƒX‰HˆA,·M%xfZ‚fh®‚h}0Hh¯:0H­O2lB½ƪ»/rj hDj0T> ++7º''Ê'"'f *'l'0' o0 j0L‚nt‚nt-xùmHq ++°÷(9÷‚}Ä}rF£ÐëÖ]ÆÞÈÊÈA ++/rdù jùDpùV=û!' ÔrÔ¢H}Æ}tDVžÌÆÂØØÂÄØÊUf« l« «UíѪ(ÜdèÑ·t·‚}vHbaÆÂæÊZØYdh¹ n¹W»* ++»vF,FSD ht¿=2}XPB}xK‚x=QmHoÚ ++02„zÅ‚z„PÅHþEõ)¸-Fš ++pî @Mz †¶gH{D ++P#)Q*Xr}~:§TÛSÆÐÊÆÖ%n[ ç|[P U*`U~žr}€2P¹ ++LL rœ“Lˆ(1>C`ˆ€úrÒ}‚&Y­ÖS2 /n`;F1d1‚ŒTþ}„HŸ æH /nb-Hl|)„TÔ}†)DæÊèBSÉ /nd›F™/´Â†™TÌ}ˆ™fS| &nf™Q FC 2(Ö]PC FC ˆ³Tø}ŠédÒÜØÒÜÊo™ &nhµ 1 H ·/|ŠªTô}ŒÄ…ÒÚÚÊÈÒÂèe» /nj$K)v)cŒ È'7:PVœ½Yƒ™@}ò}Ž}9[npð /nl´K¹'di츎[sð},WTÒèÊäÂup /nnYIW*WW4W#_"Wrî}’(lTÂØØÞÆjk /npSG¡ ’Prì}”6T‡ÌÞäÊÒÎÜZÊpq /nr[N a/`a”¶wè}–(]a /p`Q ++G *fQ–›Tæ}˜›TÚìØÊèTŽ /pbZGž`›'ÞC'à[*â[˜µUâ}šŒì²© /pd[ HúFúZúšªrà}œ$b· /pf§E¤/Šžf¤œ¤TÜ}ž/Òô¥ p¥D¢/PFž¢TÖ} F4æÊâ_› /pj>E<¤— —TØ}¢ÝdàäÞÌÒØër} /plÝ I4šÝ¢’TÚ}¤dàÂäÒÂÐHn pn„H‰ƒ¤ƒB(}ZÏ[$ýófóÆ@¨}¦K¨š&or: À0Et L¨qjÖ…5œ L0Œ)5œv &sú™  Â )ER ,yb) ++”)?´”+Z/:ª‚ª:¬®‚¬:‹/qÀ:&‡ò‰¸‰Ê}Xhs)sÊL ++a)sÊa/“ ++a°'\x´(V! #\A s$ ++Hº Að ‡±øåô 00[®ƒ‚®úT„ï]_z}°Oœ²Ì‚²ý´®‚´®×aÙƬÙÆ Ô$Ü#' ýÄ$Ä$é ô& ++Ò +`Lb GHu`j /²z)z/£z¦¶¦‚¶¦m@ud ++p/©ŠY)/°  @/±ªF)7B),·iF¸F‚¸F7š+x˺˂ºË¨&ÃB¨6ÈÅ*%ä¼ä‚¼ä)oþ¯˜ÙѾт¾Ñµ h/Ñâ†"†+×J)À‚À1Ñiµ.Ý*ß)?¦i ßi )ö#.åbL)ôLé ¶Ò éÒ)¼È¼ÈŒ¼Èñ  ˜ "ÜàZÌÒÜÂØÒôÊòÒ擬H ++\ÅÈœ£‹Ø=Æ}£=Æ/ mÈs½…z Ã+mÈÈ/½mÈ[-mÈ ;0ŽYÈh .•)|dôÅ000’òh ++ ètv=È´%›µÛ /0µ£1°ÁB|È .½ È 0ýÇÄýÇÆØ X¼j ,ÓT(¯¨,1ಢ6+—(Pz‰J à—œí< ÌÉ>$5þ›É> ØP à| " p\4 P ?¸í¸@¸ Ô.‰"X…HáCxB†}Qà /àðõ"œ_àšå@d>J›/)#dd4YH˜ Ž‹ ” 4/€àd'.é#dHá Ut&D¬ ð*àõ’˜Mf›$.Kóhú‡䞘&‘$œD |YQh `|x`Ôx(/a%@ €¤dl"„ö|/&d+*Q&ðd/ àdSJè/ù&d+9~›d-/‰'”Cà’å8Œ 1^ì@ ä@ùD0/%(D€4RÒ; I-P*+c’1[ÓJa«Ç$Ç ÷ ­ãëÝó 4,St/!t3:2.:2¥;ž&*6zý)¡8‚ ++*³  ÄÂä * € € •P ; „„ „„ &. ì)ÿ+ð ++B$îäÂààÊä|6Ü<&_5è}ô€ ( Ž6 56H ó"jó2!@23_2R6A}Ì ++€+.HDX jXKŽ3nOX ¢ %cR òæ<XÓB8Ë+Ü<%p~+:a$(0PÊH@ê;xÌ¥;Pª(ûHÈ,úÈ86R!*Ô%X›,#’›F/Øÿ¹Ø Ø8›@ìØ/;ÚØ %?|â@B Ð;ð`*¡1‚H10L dµ8/PÃÌ© ?àžuÞ/šåÙ- çìØC<Ý /žÉ ¦ô ô A€†ý@ TñÌ ÌGÌA• Q / ¹ '¹ 8*M¹ ÈFa Á© /0àÑ%'¸L¹ '¾¹ q|/½||.ý|ñ*T´P *MP«ý8 ÔF=J¸ ++üÝ+hCª H• ++", B"PB $v . ¡ ++Ÿ,¢)S8†ÞC ++S{ ?ƒ$`Û?PC"7î7/Eò7 I»mEXmE`> 1"1ÿ¹"1 "1"iHØE`òC O‚©ØEMë ++.S‚´.´/WR´ /Ybà ?P[Â\< ++X\/_‚\ &a’\G /e2º?XgÊ>PkZ”.}ÜÖ/o:Ö/qŠÖ#sù0hwôAˆw²"y:I"$›@& (Ý5Ü8P±' ++(’H`&DíE <&ƒ"PpjšVgN!*R hNSÿ¨*S *S*S ++¾H"}ø @,,~ÿ¹,+ ,+,+~‹ìùP/.cÿº.8 .8.çChz¦à<%ê¶A¨‘Â7#“J1Ö° í/•Úà/™JÔõ/\Ÿ¸! d  "¡bI:0e8‚N jÓ *. k L«N2âM„«N„«N4«N4É«N6«No  «N  «N O —å£N)/•£Ná­%£NŽ[âÿ <]F4P ‹6˜b`Yâ&ø Yâ*pzºM/•3/‰ÉøYâòYâ®Yâ¨YâD ++DçÚáâ¾D¸DãËÝeʵâ ãÿR—F¥­ ãµ/} ã»/M ãÕÍM«¼˜Ü/ü ôpzEááȧõÉÃjx/* .½?xÅ#”pç/"Kþq¶aáDeÜD£/@:þÿê¼y+E¼yDmÃD<P+þÿêðÂC<Y°0,Q±©Ü Ààšå'à„å(à„â­Ü/™°3ã# "ßg÷Ÿþ4yÄv0UXN+'+'títé`4/M `Ì ‚Ì|ÒX\,I ³ø«)|–"ƒ,=Íųmáa=âˆ#ü‡+ÉS@­ä=ÖqÅøuøYeâ0„ (¬ @ /ɹ¾cÑ/m jhcw4€|m|5| „/Ý  ˜ íã//•Ë%ØÞ|w/µØ"ÏúØñØd$/‘$€$y$3$ɾD«Dñ­âTð/ðÍðÆmáüá”$O$/õ$°$V$“%$Ë,u$ $ø†är+ ˆ6D0D)⢈1/Õˆ -Ä1TYà 8YàYà <r</et{/õ -Ä‚5  4óG/]¨"%ù¨/™¨‹/9D‚dã×F/¡DdÒ}à+åLdÃà/!d—/Íd”±”ž” ~”/5” à ‚Ø0/­È½Ûx$*%PP½Û*•P½Û0éÄ„ ½Û!P wè/µ èOXHÀ Äà/!Àµíà/Y!À‹/ù!À#h YâYâôy/é"h 4 74/Q#4(4/#4‹/-$4C"èö4/$4{/%4#VI4ªŸG…h,L/õ%,/™&|Ué° K|­á° <I=±áhD/Ý'°k(.1(k(ð ÷õÿêøj1îˆ1Έ3Dˆ8âæ:¨Þ¨wÍ*wÍU²<5/>ŠÆ&*bhŠÆ/@[¨v%<[¨.@[¨ohBB®‚B®'ˆx8ÇÐl5!y # ++á(e?fP Ax­*6¤ÐæÁ¡Õ7àá’½Ý$ /g$/Ž$/Ñ$UÅ'Èq5ˆX/µÍœ$DDD ùln¥K] UÐM.u‡êjY4OaŸXuXW D¹ ¹dqøe Ù-Ù € Q .%é /@Fà,_@†å0M Ì-‰­`–q& Õ(š»BÞØ.Mx @@@/ @… /ÍÄgù!M0@Ô/ùÔbßÔ^ß ‰bßÐ¥m¡Õ(ÐÇжÐYÐ/¨//a¨W/ͨwh/…h//ÉhW/5 ›åÅ¡9P2 ˜@9@/] ++Ð/ ++Г/E è+/… ègà/% ˜@ú@é@p1¬ Ü¥¹¡`å@è Ø0}0 0.e 0 004æç8¸ ,q¸M¡Ä!/i„È5 ­È=È1ÈE +-•2È4 –è$_@†å#04 „:Ø  ÊéõÈH± 11¡” ÿþÿêÞr3(aD`FH3 ++2H(Å#8¥ÆyQ fQ»Ž•J Ð æÆF¨äÒì»h+J+DÔ1ïcç ÿÛA"*û@* /¡|S {×0¯» õ†C¸!c «¿‡C&H C%DC*t †t€`4  R‡)acNô/9ôs ŠÓK‚H€©G /Áƒs8/q8Ÿ„˜ˆš°t­9°éx¬_ ++/)_ ++gä.Íät­ZTG¼ÿpœ/=œSŒÉŒTŒ/YŒ¦Œühr1êP¥X/8ßԔɠ¢JH1ì mE,8¬ÎÆ d¬ÎN(\uç'bbOˆ¼È*HÔ7@ ++JSúJà5PýÆ5&²5€^$E¨¯– ++u×@&Ê@ÑSw RPxP ¹Þ/RÌ‚RÌ/H›ÈSÂPJH˜ÝÙT + wÁÍ ÏPÛGsÊ ++q-bqZTZ‚TZ äÇX×VׂV×À.'âÀ$ÁÊX#X1¨)+3b‰oxBXB‚XB/oþ`%ãZã‚Zãã¬L&AzÙ£d #òXS@BJ%!%(r6\ã -°‡Õ¼%-ê{¯L^ í-b` í« `‰‚`|Ñ/b®‚b›cËÔk í€dZ‚df®‚f íŽ]&Aº]@Hhjlé%rn¿EÚ<XBn¹‚nÕUé€~pÅ‚p~ éï%MòïEÓðè/€@&W:@ é#([R 1ÚMrtvxz|~è ++€3‚(Ü" ¶( ++û ÜpŒpTP5 gÂÊ0¨ij›bÜÑ&mô¨)ER,qŠ) ++ØbÜ/+w²/†Ú»/„3‚„Ú /†Þ)ˆÌ‚ˆ+Š®‚Š­ÚŸÁ/ƒ‚)‰=+^Ô#/‹êLöL.‘rL)ôL+•RLŒ‚Œ¼¤Õ×/›J#)7"#%ŸÒ)– &¡zº ¦Ž¦8v(jY¯BpBòjY—ðjYÿ‡– Á jY&\jlY&ð lYߟTAvlYplY/ãDÝlY/žD˜(YDD/ÞDØ(Y¶D°lYÿÿÿÿ£¼’lY‡- ×%/@lY'xAetp ++ Y/ù Y/= Yt»šÔYëYäY>Ð,$ ±YP“ð&‚£üÈœV Y€$ð 5uYTÕ@)ô‹ôYx)ø ++èEqYdÐYm\fD+{pjp3p,|/}l h Y/µäEcÐø€ÐÐêY…Yh !üX…~E4ø¬øX}øXXè  ôXEðX/ÕätÌX$¹¨Xv$ $Ýà‡$$É(tYÿmT-/}THCH2XY T—ØX/ÑY <ˆ</ w.™½¶@Z3èMY/ù¬?Y1Yh4 .Í4@Z4/-4 ñðX+i8 ãìX/¡“/I°¡àX/©°"“ø°/á°‡/}°\ "UøÌ/ÙÌw/e\ /Å /ý‡/™ ?ÎX/õ w/!SèB“üWá`àL/Q"à‹ñtY(¦ŒlYŒ)hY‰hYh4 /%$ŒO»«&>¼ ++ ¿F”  0"åö0+™$O@šå%´þ|0|X"´_ Šå!tÜt$t ’y%$$ð_ Šåtºt-Lít¼t˜t,oœa&tl¨`vt,_ÜÕt&àëFM@#40 ã”Ü$ˆªCöÿêð!'LÐ Ì5$Þ@Ð0l ++ ˆ$$a ( ! š,Þ 0aD¿GR'  <Þh07G/@h » +G¼4«öõÿêìU(€t£4°a?Dûþÿêd0/0//5)0$0óÔ(t ’©)((0 0Ñt-[*tH0¯t-O‘t0t,oœ+t0«Š¤áì(6OUPø8›(õÿêð8 h=­ Ü‘ƒåàƒâ àƒl1àƒÔ›àƒåàšå(p $,´ìt Œ,¨.0hFä„´$4†å#‚Óð éÄeˆˆ¯ÔôÿêÌÝ,ˆÄ,~ J(/ÿ4` .…-` ±Ó¬&ªý` †” ++u” ++"’ô” ++å` ' [T 0/Y.Ði:Ð0/É.Ð/+ /´ h!¿‹œ .Á/<zPsLa.0M0`ÿóÿêlLa0}8(Ä‚8’ ++PNˆ//”La1”La–La˜La&+dbLaš4w–4šÀ6œ®‚œ®'xpLa D%!Òá¿HB¤ =PLa(/CYOª(aÿy/ù(aCQ(a0*•[I(aœ±(aX^ñœ«Vä/Õ>äñœI*I?äñœM¹pñœ%.@œñœÅ"Îï /õ@ñœ_.iAÄñœI/ÙAÄ//Bø/&0ô ñœ`/áBñœïø/íCd S/UDd o"Óîô+áDôd L/QEd ‹/ñEñœOt|/]Fp "fîp /•Fp cÐ@Ð/-GÐ2Ð/eGÐc/Hñœ?"ôíÌ/]HÌw/éHÌtI.9ItI°µíÿê°j-ìcZcZô/ƒVêö>ƒ1 PV0tP[ƒˆWƒ&˜WƒVòøWƒúWƒ&+f`Wƒü®Mwø®Mü¥Pþ®‚þWƒ/&'á@H t¾¼ ++Ð ++ ++:] /Bp?] /H¶œ(’¾F/’(íkoŠÌÌÊÆè ++dÿÀ µ)AB\%3‚©Õ\úO/ž.ž/@Bk9gpÈ;Úøë[/ ++Ø‚ ++S*/ ´‚ i"ASi/Ý‚i #—º‚ i"—A'QrA$SZAö‚e/®‚®Z»/~‚Z /œÌ‚®®‚,_›üY%_ /}‚+ ®‚ ®$#¼"~‚"# ++$œ&Ì‚&®(®‚(%_Û,w2ƒk/{š¬k&’/`ÎÛ*ù‚*Û.7,‚Ë,Ë‚,˨.ºk&“*)o°“úøÝm%—Š3wnfô L3@(4H ++¿‚?ÂÒØ© n«s?Hhš-îhšjhšÿÿÿg(—1/)@–+iPû”/è+/Q(—‹/ñ(—kq­Ì(—I/Ý(—C5ùÌä(—A¡lxZ5.ùÜ* t#x-/@h-(—E/Á(—{/Q (—C*© ¸Xè(—íD(—F/Y ++ŒZC±8š(—²/‰ (—?/Ý (—”¢9Uäû ++/™  ++W/  ++wh/½ h//hW/ml ›/”¢hšf§`¢?&;ˆ(¢hšlhš/Dhšÿÿÿÿÿÿÿy!/“ø¨’øhš D"?F(©hš -djhšo/&(›ú+dhhš¼Èæ–øhš'Dhš5hš5€^ hšøhš,DhšGHxP  +J ‚J hš'H¨˜j ¨˜# X&úX¨)6L6‚L6üýNº‚N¨˜'ø¨˜/Pã‚P¨˜™©RÆ‚R¨˜' ©e./Ò½¦T ‚çý×Vׂçý&=RÀhš Õªãx$'ÙRa!$Û*‘1X‚Xë”<Ò ++0\!°ZÅ‚Žýƒ’ãÉ(/çšV#í®!:ö#H*ïž3’œ#Dñ% · ?\’œ'ù2"/àý/df’œ/`Û‚àý‰b®‚b’œ¯/dZ‚df®‚f’œ¦9 Ú=h©áý%(ddo4òn»‚n”œ/pÅ‚p”œ ¥-•œ(>!Ì* –œ5#ê$ %÷-R,rRpRtxBƒR–/ƒ Rÿ zR(!(e÷be÷/óTeT_T TTˆÌŒ‚ÌŒDZD8D2DTToTiT/ØDÒTDÿÂTÒDÿ­DÌD¼]DäUD`ÉD  ++DD ûDADíDyDàmD U/ò ÿØe÷e÷/ìPs DÓ /á D]"ÄüD] \ ˜9 X`­ X 41 i \/Ù¨2C1  Ð /í„ i 4— +ÑX ä <ˆ  \} D/Õ ¯# ¡ D/ù Wð m X/Ù _M `Á `5 `© 0N /õ w? Š"ú ) Ì `+}ì‰ Pñt Pe `/Ù 3A ) 3 a €/õ Ÿß ± ”Y D싹  ñu÷ˆ DPTŽ4 ¼ ++A ) 3 a ” PîŠu ßÌ‹± \! Œ™TÉ ŠT \u ˜! D+¸  ¹ ˆU LÜ Š½ Í<ù<i… (8Œ%‹0x0èQèéèx/u'8Œÿ„"Æõ”/)8Œ_‰¹÷ 8ŒK/ù)tu/=ìŒT 8Œ]/ñ*8Œ?"8õd/M+dw/Ù+L¸ý|‰/9,¸"ïô¸/q,¸‡/ -€C°4ml ¤ ¡8Œ©p€ “8Œ/á-€“/‰.€ONˆ/õ.ˆ?ˆ1‰÷, I/¡/€‹ù8ŒIŒ ê8Œ…Œ\õŒt/¡18Œÿÿy/-48Œ+î8Œ/u4( w/58ŒO°D‹/m5Ô~SÕ˜Ô~Ysôa,Ô~L/Ñ6Ô~‹/q78ŒCp/Ñ7˜ " ò˜ / 8˜ ‡/¥8˜ C"Êñ4/9¼"»ñ¼Ap˜ ­8Œ/y9˜ “/!:8Œ[/‘:8ŒGí\8ŒµÐ/Õ;ÐÐ/<Ðù8Œ/I<Г/ñ<8Œ«8Œ/¹=ä8ŒI*->ä8ŒM/>8Œ3.å>œ8ŒÅ /Ù?8Œ_.M@Ä8ŒI/½@Ä//Aø/&0ô 8Œ`/ÅA8ŒïW8Œ/ÑBd S/9Cd oôÅ,d L/5Dd ‹/ÕD8ŒO»h‹/AEp ­h‹/yEp cЇÐyÐId/åF8Œ?";îÌ/AGÌw/ÍG8Œ;.HZHü8Œ¢8Œ°8ˆ-âˆv ++F¢X€lx8Œ h8Œ&œ8ŒEÒz8Œ/|8Œ'r8Œ/~lLv&zlL~¸}€®‚€®-xtS8Œ ++&%òá@H‚„†ˆŠ`ŒH-Æ ++Ž ++†é-Ýë ++ìë‹é/”3Œ/fp3Œ¤¾T³N–™‚–3ŒŠÝaÈ;rzPP˜Ø‚˜3Œ ++š´‚š©\" 3ŒœÝ‚œ3Œžº‚ž3Œ6 ++A$QòA ö‚ `¢®‚¢®¦‡¼¤~‚¤‡ ++¦œ¨Ì‚¨®ª®‚ª3ŒÓ¬}‚¬+®®‚®®²#¼°~‚°# ++²œ´Ì‚´®¶®‚¶3ŒÛ,uʃ3Œ2¬jc&*/ À†¸ù‚¸õ…+x˺˂ºË¨:í÷Â)o°“’z3Œ"33Œ/ Œ ›hŒ*ŸXŒžž -È ++¼ËÄÆŒ/fnŒÈð‚ÝüžÊ®‚ÊŒ¦.«úœ Œ¯PµP»PÌç‚ÌP!ÎË‚Î˨Ç:Œ­¢ÒÔ3Ö( F Œ+flŒâŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@-LØÚ;Ü(¢Œ+fjŒÞŒÿÿÿÿÿÿÿyA-¾PæXŒÞXº ?à(©Œ -fhŒ -LŒöŒ*ffŒ¼È*HԌތ5ŒÞŒ/zŒ/zŒ ÞŒ7âx“†ä ‚ä ŒâSˆjŒ# ŒâŒ"zŒâ6æ6‚æ6üý躂èŒ&-zŒêã‚ꌙ©ìÆ‚ìŒ& ++©Œ½¦î ‚îŒ×ðׂð׌âŒÑ…4x$ÕŒ5%¸Õn1ò‚òëŒ ôÅ‚ôÌŒ/ÝúV#/ãbV#é®!Œâ* ë:ªŒÞ% · ?öŒ'óú"?øŒ/fdŒúÛ‚úÛ‰ü®‚üŒ°þZ‚þ/ƒ®/ƒŒ§(¢î<ƒÉƒÉ/ƒŒ$(fbo3 º/ƒ»‚Œ/ƒ ++Å‚ ++Œ-Œ"&âAŒ%²$Œ&!R3 ++Œ,ƒ ŒˆŒ ƒ«5/ƒŽŒ—ŒŒÿ ƒŒ&Ðn*6˜bdŒ/HŒÊ‹‡Ê‹HB‹BB‹/° D/ª DˆD‚D`DZD/² ++D/¬ ++D/D/Ê‹;D /óDíD‹ŒåH  HšŒ• LŒL†Œ|$kŒhŒpGŒDìÊ‹RIÊ‹”/@PÆ‹„P}Æ‹èèäê‡{$gˆ$$$Ô2ˆ‘$„$w$"$/Ì$ýl/•.‰ÛÆ.‰/ âMw/¡ .‰C"‹ýþO+ ++`þO<P"|ý:Z+= ++àÆeL/­ ++Æe—/Y .‰W+Í .‰H9*0.‰é.‰*‰ F,.‰M/ù Æ/C/Q Æ/‹„"ˆü.‰/ „.‰i/¡.‰3"Oü.‰*ñÖ-ä <"@ü.‰.-<.‰I/²/C/õ.‰¯Û.‰/Á.‰C/.‰¶e"­ûxy`vW "ŸûvW±>ŒvWx/M¶eC`4/­4 "Qû+é8æb "Cûæb/!æb“/ÉNqO"þúˆ/5ˆïŒ/q4 ++[/á4 ++sT©T/‰TšT/ÅT[/5ˆ —/áÎC;¸/AÈ#-ú^ȇ/ÎK"ìùh/}ÎÝ<¹<¤i/EÎ_›/Áw/M¬è aè/©èw/5Î'ø#ø/¡øw/-àÔDñ ++È!Ðæz‰/•¬ / à&ÕÊ“0+ "/Ü ³Ê“0}t& ‘Ê“0/ñÊ“¸g¸$¬"{ø&’/AP°8"mø’“y8Ø@ð *‘‚åà‚â à‚H 3à‚*‚S "Ž“/  oŒýô0t2 š¢dˆ ’¢’¢&'Ž¢k àšå/à’¢ Z>áü¹Ì˜6_Ù˜Ô‰´hF$,Y^Œþ@÷@WFª¥; p ° Á~‰/)!° c 0¾€.Ù!€©P¢r†ÿ]-ŒyŒ r†DíBŒr†L/]$®o/.¡$x r†]/U%r†?ŸÖŠ/±% ++w=¾‹ \"dö$/&¬"Vö¬/Õ&¬c4/q'$C4/Ñ'4 x "öx + (8$ "úõ$/E($“/í($OµRŒ/Y)ˆ#¦õ )ÀÐI/*$‹`T/­*TQT/é*T[/Y+$—/,r† @ ++–†ÿ÷/µ.–†+"LôL /ý.L w/‰/–†O/2yS/]0`2yYÑ®Œ鮌2yL/Y12y‹/ù1–†Cup/Y2¼ "gó¼ /‘2¼ ‡/-3¼ C(4/3àR+É38¼ " ó¼ /4¼ “/©4¼ }|lPaP0/A5´"¬ò´/}5´<¸"ò¹*¹5¸¹ä'@òÿêü%+ñ5ä'`(`†¹ '€+€ãÈL.Á6Žª|Rˆ4/17®ˆG\®ˆµ/u84"ßñ4/±8èÑ~‹/é8è“/‘9®ˆ«uä/Y:䮈I+Í:®ˆL/=;®ˆ3.…;œ®ˆÅí®ˆ/y<®ˆ_.í<®ˆI/]=0= /œ ¬ Ô®ˆ)/e>®ˆ7ܬ™ìP>†/ø/q? "!ð /©? cÐûŠˆ/A@Ð"íïÐ/y@Ðc°/A>†?"¯ït/qAtw/ýAtÀè¯øSøq(i¦‹ä!D/ÕB””H”/ C”cä!xP/¹CxÐ@0-Œ| "òî| /eD| oЗE¸@P9b‰.qE¬E°§îÿêvj+HBpð.ˆƒˆ+Tˆ'@ ++fŠx‰Àa‰ Pa‰]‰ ]‰pHRBƒHP`ƒ‰JEYPH+¢u ƒ såƒH ƒ&ÜÀuƒÙJ*A(‹‡/hn‹‡%'Z³9P.J,.Jv&ƒ.J,‹‡&-ÊÝaÈ/²ƒËK.Ø‚.‹‡ /ƒ0´‚0$X" ‹‡/ƒ2Ý‚2‹‡/ƒ4º‚4‹‡5,EJ€T/I²G€T&Oª/ Öw/ƒ6S‚6 w+xË8Ë‚8˨.[Ú&}aú°cƒ&}%e¢3&}ih&}*m‚X&}O™ÈÞZäÊæè2'qr½Û<ñƒ»/ƒ:‚:ñƒ .ƒ<«œ>Ì‚>®@®‚@ñƒ ‰@¸ $4 =bŠTX ƒÀb- ++(n¯ oˆBƒB8‚B8ÿÚìÊÜèäòZàÞÒÜèQ)‡Ê1BääÞä1*}ƒ‚ñ ƒF ƒm ƒHJLNÏ/hlÏ/ƒPZ‚P@GR®‚RϦ&•ÂðÏ/™’ù /úù /£òù Tç‚Tù !VË‚Vù %±"¨Ï-¥ -áX ++3 (~T’Ô*hjÔ/ƒ`Ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ +îLªø;®(¢Ô*hhÔ/ƒ\ÔÿÿÿÿÿÿÿyAƒZPëXÔ ƒ\å‰Oƒ^(©Ô -hfÔ+Z(ƒvÔ*hdÔ¼È*HÔ Ô&ƒ\Ô5Ô5€^Ô/ƒÔ,ƒ\ÔGƒ`xP t(b‚bÔ&ƒ`~jÔ# Ô&ƒ`Ô!ƒÔ!ƒ`6d6‚d6üfº‚fÔ&,ƒÔ/ƒhã‚hÔ™©jÆ‚jÔ& ++©Ô½¦l ‚lÔ×nׂn×Ô)ƒ`Ô»æ(&)'¿*f!$Áø.p‚pëÔ/ƒrÅ‚rÔ/É ++[#/Ír[#*Ój>'t)‚t)-xÝ8HH'°E%ÛšíÁ‚#ƒ` ÝznS@Bƒ\ ß2, ¤ ++?ƒvÁ‚'ç: #?ƒxÁ‚/hbÁ‚/ƒzŸ‚zŸv|®‚|Á‚¯/ƒ~Z‚~€®‚€Á‚¦&ùâ]0Hƒ®¿ƒ®¿/ƒ†À‚$,h`n!Ë1!& $D¸ êbˆ‚ˆþO7^ ++p˜ŠË‚ŠË8˘a A ++Ì‚´+Ì‚ŒÌ‚’Ì‚ŽÌ‚æÌ‚—äÌ‚ÿ’Ì‚(¸Ì‚fÌ‚/…Ì‚/E\K/?LUñÌ‚ëÌ‚YDSD1D+D/m D/g D/Í D/Ç D/¯D/©D/D. ˆ‚È( à/æ à”Dƒ¥ÔœÔ‹|‚ˆ|‚T]|‚0iŒŒŒÔƒSôMÔƒH L?L/9$-D',ƒ(©,ƒÕ ++ …ø‚0/@€Eü‚d€]€O%È\¼¤\r$ $/¥Œ“1þÿ</Õ0Iw/a0I4YÛŒÁ`LK "Íý¸H+ù”LKx/• 4YCŽ4/õ 4<801À‚ÐH "qýÐHiˆ‚LT…/ 4YS|B|/|q`T]L/á T]‹. p S¦0X/˜Zx_2/ 4dx_5.™ /Àÿøot"’üt/å t-t0/Ut ì$ r \ „ÌeÌl/øo€2€/e€[/Õ€›/…€d ÿ Œò$å$V$Ç|Œ_$$ÙÄŒq$$LèŒ42$ʤ t$1$îÈ «$V$F$@OÔE/ÝÔ{/mÔ )D"Îú /õD¿</1\ w/½DD…è/èw/¥Dè Kè/èw/è?èéèx/uC"Öùp /Õ#ÈùÌXÜx/©C‰4/ "zù/E"lù/}“/%`d¬„ $u%¨/±¨¨.íàÐsI/]$u‹"ÊøT/T»xƒ/AT[/±Ts8/]HŠC\¸/½è"Nøè/õè‡/‘èC4/ñìì/- è#ò÷Ì^ è“/ !ü€ "±÷€ /i!€ w/õ!h ++?wè/Q"èw/Ý"èL<‚/=#LÌ‚Ì‚LL/±#L“/Y$|r,|Ý´/¹$|δ/õ$|<€"¿öDr*1%€ð4œ5ð ?0ŠfI%VFô€r° €r'0|r |r ìäÄ/q&|r ”tD ‚OŠå @:öÿêDo+E'ŒÌ#,ö 'ÌØ&ŠH"Ô ++'à„†!Ó”t(/‰(d 8!¿/²œ‰ÿyh‚/I*œ‰_½ ‚œ‰L/-+œp//q+œ‰Ÿ/%,œ‰?ëP€/,0 ++w/ -˜C°D€/m-°"¢ô°/¥-°‡/A.°Cc4/¡.4 è "Tôè +Ý.8d "Fô˜//d “/½/˜oùˆ/I0¨êˆ.…0àDI/õ0˜‹¤T/1T•T/Ù1T[/I2Ts8/õ2˜d /% Ĉÿ2/­4ĈxŽ("Êòh‚ »‚/A5h[/±5¼‹uT/Y6TfT/•6T[/7¼—/±7Tx{%Ä/8° ++"öñ° ++/U8° ++cÐÐ`íÐÂÐ/%9€ ‡/Á9x{Ì…5:„p…µE,/;À"6ñÀ+U;0x (p…/;x “/5¼S‚/á>¼c ~(P/?t"ðt/É?t”C”8 *=@°P "îïP+u@ÔP„¶¨E‚PP|Šn‰ ‚|ŠI+}B@|ŠL/íB|Š3.5C¨|ŠÅ /)D|Š_.Dà|ŠI/ Eà//QEp/&0Ø Ø|ŠY/F|Š F.eF FjÀƒ`Žj+6.rÀƒðˆ! ++ˆ#øˆúòîˆ%ÚÀÊPkZ²ƒσ Âƒ€³ƒZ˜ðˆËƒGP ¤ÆƒxüHU¢ƒ’ñOp%èH'”K”–`zH%ò?Ø(ár.jj’ƒ ½S%!Ú R ,'B) R +++-:/ÑM˜çJw’çJ˜OS/# OS%3×JšÑ‚šåTVÑjH# ++0Ñ¥b87Jƒ’˜¢œÑ‚œ¢MEZ ++h¢/="yž×‚ž×/?ê×C× ¢¤" ++ '6¦ ++Zw_ ƒ¨ø ++#Ï{—g ƒ¬Áý #NTP%ˆ'% ƒ®°Ý²5‚²Ý/=`ÝQòƒ’ Lj'jh50¸UB]‚ &W’t˜úˆ.[b# {._2# n‚/c®/gj®mžÆ‚tƒÏ‚°AM´‚´;{!¶Ë‚¶Ëº.yÒ4…/: )=b…)=d/‰#f#/‹Ò‡ ôu/‘Ê/°¸°‚¸ÈM=h ++¨°%™úã8[ºÑ‚ºÑº `fHEú ++Pé ï*£*Y#?öY#?ø ‰‡0@#õçƒðƒ› %R5fò} ƒÀˆ‚/jfˆ‚Äl‚ÄlëÆ®‚ƈ‚¦±‚/µ2_/¹š_+¿’_Š_Œ_Èù‚È_!ÊË‚Ê˺(Íw %6 2p(</ƒÒr+jds‚oÌ àÒrÿJ8]/Ù8/}8æsÿš/Mæs3• ‚æs/Õæs›/…æsc/ýæs+/=æs/áæsabr#öMk’_k’ZrÌJ4:4# 4]ô/ƒ‰r-jb‰r #X‰rÒ‰r+j`‰r·ÃÇp’‰rW"ƒÌ‰r5 ‰r&Ú5Ir Ór/ € ++ε ‚΀ ++!ÐË‚Ѐ ++&ßzi ++æÙr/x@ç© ºjÌúéX% Ã<ƒÒ3¨j (ñ‚· )b¥ÔFf%r¨ f'÷R ùV0hùW  ++fÖè‚Öè ++f ++fØÑ‚ØÑ 9m9¢·ÚÏlpÏl܂܆ޮ‚ÞÏl‹(7h!/ ++(7iàZ‚à⮂âÏl¦8BÞÐ6â njänj†njðæ HBP8!Rƒè ++ØiCQ #2wA:ìôj—êôjþ?yt‘ꑤ‘ì"5K -â˃0€ ++0B\ bJƒî <`<HSzƒðH„cœR'Úƒòœú`B0 HÜàZÄÞÞèZÆÞÈÊ@B… "%ð @W× [E ++‘,j;:À@àŒå3 9 àŒƒóàŒå8à ãàŒå@à ã(L!àŒåpp°p‹p‹p‹p‹p1‹å p1‹å0p‹p‹p‹p.ùA)3à€p€p€p€pi)p1€å p€p€p€p"ØÝF ++ppppp1åp1åpppp"·Ó ++p‚p‚p‚p‚pp(=!à‚p–p0pƒpƒpƒpƒp1ƒåp1ƒå€p1ƒåpƒpƒp*uS3à†l†l†l†l1†å,l@†åîl†l†l]†å`ŠpTp(0p"ìppp3p(p/àààpp(pPpL `Šå5.“ñ:À†å1.$$ã$°$ $Ù×&$$Ç--3€(€$¹H H< $«k ++#0„(„H"8‰-Œ(Œ("Žð(‹(‹("Xa/ƒ(ƒ(Sp: …/Äx9.X=L9."å<ñå 0å°åÀå@å ååàšå#à‘ÖñL'àå$àšå+àå#à—å/àå'à—å3àå+à—å7àå/à—å;àå3à—å?àå7à—åCàå;à—åGàå?à—åKàåCà—åOàåGà—åSà°P°.0È3à‚b¨‚ñ.ñ×1 à—ñ×1à—ñ×ñà—åà‚åà—åà‚åà—åà‚åà—å#à‚¸1'à‚¸1+à‚¸1/à‚¸13à‚¸17à‚¸1;à‚¸1?à‚¸1Cà‚¸1Gà‚¸1Kà‚wL ãå ÷ ƒ É© iN˜‰×Hk\PN@Û”K‘&°;Ù×] ++[<ÿ/ámE4Ð .çþÆ¥„/cB!.ßý"¾ýžªåO û.ªý‰ 0`šÓ/bP#d ++$o° ++%#ˆ ++ª ++‚ ++C̈ ++˜” ++œ ++ñöˆB (Ø« €Tã‹O3@`žåS!Àž»PžåK!žÛ1 žÛ10žû1àž5;  Ük SàŠå3 3àŠ“ðžå3°—å@‹âà„å¦ó ++,°™å Uác*°Kâ,°‰å@‹å 4/4P44;4=4474*44C444?444K4*ñ4#4G4Þ4'4S4Ë4+4O4¸40@Žâ’–0 4/¥C@Žâ44/’C@Žâ 4 4/C@Žâ44/lP@Žâ0ü,/[©0Žâ ƒå,J,0ø,,,9,#,,,(,',À,,,+,`,ð¬>Ñ44 š0ô„7áп.®ÿ§¯ŒyfS@-/ôþáλ¨.•þ¿¯. òB¬ ++0]öL`B… ++ $ Ü"«ÂSš ++K¼*# Üy# § G Ž%@! žp‡&0œâ3‚ž_ ++°)C°,??Pð&ê!g/:0Þ!Þ!Þ!40 á\´=|!€'D, ÄD% D%d D%æ7D,?àŠTnÄ°@[Ä'À@\@"Øå@u:& ó3šå ª¢s šå'â†å!†å%°†å)ÀSWX{"JX`?$<$$K áö&.ÿ#û! Ä1à ã›´B›Ô  “““3 ã»Ë»½¯/¡ÿkÿ.ÊþŒ#‰þ¹¸¸ Á,~OpšåU\ð&v‚@o°ƒö Ú&, L BŠ QoÈ;µ.0ƒø37ƒú üB!AHB0ƒôE.'hEþ9$…9( ++Îbdhb0!Bndpp&d& r&f& ++"r`&h& b&j& d&l& f&n& h&p& j&r& l&/j`& n&| r|j| r|j| ++"f`|/jh& |/jj& |/jl& |/jn& |/jp& |/jr& |/l`& !n43_ƒô&…9(à ä5…ºàâoĦ4’Ph!#dh?ƒöe,) ÿƒøƒúƒüƒþ……l°l‚l/%Œl#تlžl-ˆl/oÆl#Èl/ölD$Xl/œl°l-”lªl-˜l¬l-ÌlÒl$`XX`ÄPx ++lÈØ|l™øB  àSuß ¿]€âà€_ ¿4L4¿494œƒ€ƒ(”ƒÿƒÿJ0·/Ðÿ¿¬.™ÿS N ++âO[¨˜B…  ++ èZ–6(Ž6(P} ++’<  ãE!Sq:@ê$æÿ ++àNâ ã0†âƒçøÿÿêÂ\© N.@. ++2 ++Ã0å åå ++ ++ ++æ ++òŽþ ++f È:? @”Ð+ßǹ«¯/ˆÿò.Yòr± @O¶ÿÿh ¶ZÒ/"IÈ–L0 ã"=²3‚&‚j/Fú!F 0* éÚØÊë¼Ú.}Ú¦ÃP2B-/ Æµ-1™å !™¶5 ቎2በ2 ^‚^ Ö ãM ++bŽžh  Ž{ŽŽa„`>ý*+0%+þ€!ƒ’Q'0®..)„)" bWZ#‚\-+ U},@},¿ 0€å €å€11 °ë»ÝØËѾl™ì…/ð’ø ˜ÒÜìÞÖÊ`úQ70ú˜´9ϸƒÚPRI ++ /S … /PŸ/ /S…/BX€ Uj š0Y Ê…š0€]0'Sš… ++Ž¾cœS%ú… ]0#€]0C0ˆèäÂÆÊäxq0•ØÂæèZàÂææ :H(öÖZÈòÜÂÚÒÆZÆØÞæêäÊZÆÞêÜè'8'OæèÂè&`p…@ÏÔ( $HÞàèÒÚÒôÊ-4æb˜¤#ž ++ß0Ø™€æ¿ 03Qƒâàƒ·31ç,èJ6! ++@HϽx ++Õ $ Y, H*6 f PŠB1N HD9ÀQ N.*B * <P ŽP< ÿC0ePF,"P ÿ ,< ÿ*#$  * 5P0L $: ,6"  / ”*$ q* "P ;RP ôMP Ž* ÿÎ6* è* ï*< P "* Y6A*  kv$ *F L6  L6Y P0dP$ :`P6 ²#P * ÿþ6P ÿÿÿÿÿ»* _P X* ÿÿ5 ¸P0L *d), * .* ÿ&ÿˆ)P$ÿ»ÿÿ˜€. Üè ÿà!@á6SƒâÀRP(B,chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* # ^,Rö+ ¾B ++ 'p  L$à™åZáe*€XâV ++Ÿåê Šâ`ðp–åàâàŠå@ ã ð– i,ö Jâ`EâP…â,à™å^á;:0 áàLˆàƒå@ƒåp'|O0Šå€€xb駠Jâ0šå 88‚â|ø àå,°™å Uá*°Kâ,°‰å‹å(? à‚H/öH3ÞH4ÆH4®H4–H @J‚:<ô†å0†å0‚â`ƒåã ++lpl0l0; ƒ´‚´XH HƒH@H4(H4H4/øH3àH4ÈH4°H4˜H4€H4hH4PH48H4 H4H ˆ>@ ãðšå¨@1ÿ/á@OðÿÿêØÀ¨x`H0/èþи ˆwH0,bJ2Hêýÿêt€3ÿ/á¾ýÿêP  À&À @ÿ/á*± H ›Hñ”ýÿêÊj $PÆæRØÞÞÖêà¾Æ¾ÊÜèäò HÌÞäÊÒÎÜZðXB$@B ð àü ªTã@˜ ð à‰å4€‰å(P‰å ‰åãD á0—å„Á4€™å(P™å ™å@ ¨P áò$ èó>Z ++ˆB80BL(@ àäÊØÊð0ÎäàÚÐèôâÂrÄÌØðÌÎÎÌêlààZ`P 0‚l3ñ- ++ ++ÌØÈÜÂÚÊ æÆÐÊÚÊZÞÄÔÊÆè ++ ++ ++ÌØÂÎæ ð2 æÞêäÆÊ ‘ÞàÊäÂÜÈ("2 Hê\ð* L B  `€TãX Œ ++åÌ ++Ä ++ŠåŠå ¢ u  è ++šåšåçhò j¾ ++îäÒèÊXBb8(u‘äÊÆÞäÈZ!ðäXê ++*HÆÞÚàÒØÊZÐÞæèZØÒÄäÂ[¿Bn à # ÷„TãU[ "M[ H: ++ç× çmï  ++/_ ,,/K ++ÿ†å †å@†å á á«§ ++n2ÿ/áëÿ£OÛÿÿêÓ/Qä³X¬çð’z*HÞàÊÜZÌ•£ÒÜàêèZàÞäèÿ@PB ÿ÷ û›=—›ß "p‡ įq Opšåé“"ÆØÞæÊ !P—Pú  –ªZ$ «tpŠåSð*&  ã&0 ã&p ãÇÐö ++àšåžå³0Šå Šå¢x‰ð Jâpšå0šå šå6Tã]'€àâ^ã;)”›Qá ›À:@†å 0†å£.Óÿ¾öL h3Qã ++h\!§ÑâPã‘Ï ++QãúÿÿD D ++Dä*p†åp ášä8 †å  áŒ8Ø)/aØ„&WãÖ P&RãR  ++{žåžå¼Csð  á‚å@à ãà‚å¨1 ž&°¬ ¬oh ¬ ï|ïxmàžåà÷ 44ï€å0€å p€å@€åóì¨ Ú¶¼”¿àŠåà—åàŠò= ’„‡üj\UHô.õþW.ëþ«ò6ÊvÌÂæØZäÊÂÈK´X4äÊñÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP²²;:2PÒÚQZäÊâT†®–ÒÜÆØêÈÊyñ$ ++pBP(B˜ÊðàÂÜÈ0ÌÎònìdîäìÔ`æÞhäÞpÖìÐâÞZfòÜÂÜÞàÂææZõ ++0ÈhnÌpÞÚÎØêÞØlÞèäîbòìêjZ`ÄÄ ;1ÅbèÂμ¤J:¡2)-J óˆ:˜æäÆ$ÆôæÂbÌÆÌôÈÊÐhrfÜÂ'T*Q. ++õ¨< àäÒÚäÊÌ0Â`ðØèØäÆàÊòÎæÂÐÞàÖàØÆÜZdè ®31]—D > ++q ++ÂäÒèòœ œ¢ñX"X Ú$X ++†H¬çÞàèÒÞÜ樈,Å>ÞêèÆX& øÆÆN ãÇÊuÊèÊÁrŠÈÊØÊèʲ$Pc ++&ͨhBj à³ ++L< ++æ2æ?à—â!â0€~µ à€å à—åà€‰ ++ Ù5  bØÍ Ç% ++“.U| ++_ªB(û t%"ï ("@`B2ï 8Ÿï ÷%èã 5ž$|  ã [@yß ; ++0 ãPL žå›È›´ †å&à ã à†åƒ“`Šå Šå×t{ítÀ`šå šå0šåÐ@š ++LT@  ác“a’åà‡ ?«+‘‡ ?Pá9‡ /3€¸B€å&pèC&p— ++  @†å  à†X $$C†å$P @’åÈûp¬_7ÿ/áõ±°;C MÊ7 ++)’q/ €|>û וû ++bp á «?,àOLO ál X! g ++@Šå š¤ ++[Ló ?šç[TM<ßE á$ ¯/@ŠÀ@­œ8@šåÄO°O1ÿÿêŒ Ÿ  ÍCð 6ÊB* È ÊÚÒèZÐÊÂÈÊä0:R@ ++úm ++n0 á FHä ++NÐà‘å®à áàÎã²Ï  ãŠå 0ŠåÊ¢<•âº± Æ@ _,Õ@ošå88<ð àå^ã› ++0Žâ 0€å å(0 ã0Îç0é 0^ãƒ$A€Xâný Sã0 ++ 0@0SãWó ƒâ €åå  ã Ãç°žå0›å#1 ápÃã0 ãSáHL/Çð ‹à ’å" áÿQã Ê ÀX1\ãXŒX@A! á\€ Ìç0ƒâU ø¼1 °Š= ¦zä@ °šåA È0šåæÿÿê ãø õ‰ „!„`¸ÿÿê0–¥žåžÿÿꀠãlì .ýì`š4O0ŠåH’EG(¨t0šå}ÿÿê@@)@)¤f ++ ` Ð¸ .ÉÌXÈt/ t Xò \ _8e\î! š×A2š@ðchezhB8B*HB.0 ¶ BêàèäPp á(@€Xâ*!\0R² º² ++O$· H´  ‡+¹w$° šåTãßÿÿ ++² ++L/LóÃÿÿê’B,  `p Ì00 á–còã&Sã$ʃà áF Žáž1 0ž––R ŽåAáÀu ’åàÞk§~©z‚ ,FWFFËs áàãzI ‚+‚0pU á HS på<S´ÿÿê& 888OOâ„4,ô@ ãÊV .íœþÌŽ .%Ô©Æ¢T2*_0j,=  hVÂæÐ €pº,¸€HB`8À8B`8 b, ++v s( š"…ääZÒÜèÊäÜÂØ F¼ñ@äÊÆÊÒìÊÈ@ÜÊÎÂèÒìÊ@Uà@üæ0 ++HÞÞàæ*e`žÐ".8Â*@B p:*Ø”ð 8 J*H ŽÆÂÜÜÞè@ÐÂÜÈØÊ@ÄÞÞè@@Yð@ÆÐÂäÂÆèÊä@üæ@îÐÞæzñ èÊÎÊä@ÆÞÈÊ@ÊðÆÊÊÈæ@djj0pÝb R*ˆfa *X$ ¢"H!ª­P** ++ (òâ*8 ++2°B„Úqˆ4 ++XÊ(@0 @Ä@B8 #x $æÎRÐÊØàbû‘™ "$SO ++G Gs*e;¶‰O àÂO^ã:L±LC ~/ËõDGÿ /.9D1 à‘‘Q¾ ++‘Uå ‘` ++0Žçì.쨨á¨Ãè„!÷¼Y8t´<•<šÔ ++,Ép‡r0âSbò0åSá- ++ âRb!0“"'e ¦DDD DD1àc8 ++c0Sáú) h /ñh/ë¬àDÚDÏDÉD¾D¸D­D/§xœx“h¬‚D|DqDkD`DZDODID>D8Dt,M à †â"?9à†ä* `· x-x-*m0$ ¼Ò o@Íÿÿê'V .áˆ4 .4©€O pšå ð ++ lO7þÿê4 µ4Üx%²Õýÿêp‚6Ä£3@6 ++r ,vv@%@%P@ÌÞä@Š ++õ ´880ðÈÒæàØÂòXŠ8pBÓ0øHêÜÆàäÊàõ (àäÊèèòZàäÒÜèX Z87º "ÌØêæÐ?0 Bl%ñ@ ˜ žêèÊäZ| &, Ý!’ U!W ! UÝ’Ýð ++à’å ^ãê ++@^㢠++`^ãf ++€^ã'RàâH` ++^ãÝ ^¯c ++^ãÃA ++û Õ/ »YK šåëÔ{É ++1 J?’åí' +•½K0 áaÔ ¡'Qà„å€s `„å 0„åÀ 4 ñ¿.ÏØè%/}è'`è4/è=è,èhœ1æ%?]\—@Šå ’å 0%Ž; ++@t_ à„å ï¼Ã¼?0’å¸ ¸À-/ÕÀõ DJ:¨<ÐB>  X‚ ++’ÜÜï@ïï”×.%S.%8 ïêÿl lÀ©ðšåà”å0^÷ ”å ”¾#/@K1 @÷S(^ãløhpq ”åà”y xx©xå‹C^ãxxt"0„"p€$pˆˆáDðšåOó0È ++*HÄêÒØÈZÒÜìÞÖÊZàäÞÎäÂÚÞµz>hh<'TæèÂØØ(+@^ÆèZÌ0Ÿj>ˆ0ä0b z>@k“B@ l’ãñ êÜÊðàÊÆèÊÈ@æón ++ÊääÞäxB>Ü“H`F4—#t-ïtäÊìÒæÒèZÞÜØò6K$"Zf2#yHDB45N$'BÀ# ;?\frÌ#DH%:6­C#hnW%&²#PJ ++Ò  D%F¨#@ÌB J@()p)jdL0)'"dhóH½6G»l»)J´L´$ ´ ˜¯$`µjfN&µ_ÎäÞêà°%bl° %,B<«j%«0 Þb%d%NÃPÃwœ`öP8”7'apn>+DÇhr@ äÆ$ xPx%@B…CÂ@&¦HˆZR“b;?\h`R-'›„(\T; “xhx$=?\hfzT§'d^V"52ä蘯tft(??\hdvVvF`XvÆvdvÆvbvXfZjÇ\ˆ^ˆ`ˆ 1° ++PeH ~òjhæÒÚàØÊn1ñ ÆÎÞæ`ÆrêÌÒbäâZÊ椻žbÌÚè!.ÌÈI*'>*§dìÂäÒÂÜèð€fÈÒäÊÆ¿ÈJbI š d~f>h>ð ++ üæ @Äêè@ÎÞèé$j Õ3õX ÌÞäÚÂè Z ,%üæ7 üæ„\ HÈÞÌÚM‘ln ++0m@PB–]¤ ++æèÂäèñ!8( “ ++8(ÿp á‡å ‡å ‡åà ãà‡å  ˆ °ˆ [ˆ ˆ @@àåÇ@A!O å+%@ †å7O%Î+% `8(]2 œ.Iü"-¯• ô ªˆB² À” ÊØæÊZèÐgg ++ž—å—å —C )(/i)(öjB„  H ÆÞÚÚÞÜà“à‰à_ ‡å ààÔ    =XE#X)à´1°Ldb°žå[ÜbÀ â\d!°›Ü[Ü'0œžÜ8= Á €˜„< p</¥<sXÿÿê"ªk²(B’ ° Ô — ++$ï @à áy%q1 ++ ž£'ä+ðp@W p@1Wáû@@!p—õDW¸8 ++¸OWáêhjhdhX/*ÿ  B ãà64 X=XX&X  ãPÇ*°£*'83°ƒ+ƒÃh€h_ p†å #+Ô0¾4 | Üóó*àkÒ(¼,I¡ÿÿê|p|Ç+O á`d|Üÿz Ì ÌPÌR0†å ½:.ãþPœ@#0Î%_Šåi'Õ '"0Ö% ¥*.Ñþ0U´13à44444,åX:0Ô$ÔÓ/w0 0c0„å óæ9 /-ãÕ¿9u¤ÿÿêJ‚— а†vàäʼóZØÂÚÄÈÂ0ÊdfàÖìÞjÄèÎÂàÜôÞÚâÎÊÎÚƒæp4-d€ T€5Ä6græäÆ‚ §t ++æÊðàä @ pÂ?;(®"t r€ t©?¦xØÒÄæàÊÆ©?&¢?˜5œ?v¿ ð @ˆxÚÂÒÜpŠ|886at†Âæʘ{†ØÂêæÊtÆ(z6!Zj^z*;4à:~0=?\bj‚z0(Í>¥EXfpE]8WúðT“õ&(ÌÂï@‚üÄÞÈÈ6"A|AcÐŒ‚ö“ŠðàätÆÂæʲ*öeŽ~7!`!1?\bh~©7S•>/df¢'€ 9Æؘ¾‚ ˆB„ ++ ò& ÿP†@ˆpŠÐŒ9–PªK?æÊâCdŽç 63æÊâß`ßvèÊ`äyêÊbç`Å3’hÏhÏ/ ++Ê ++ 6‚˜ ”.9 0—ÝÕÙ õ í  µ7 Y OSp6p0pm0—å —= "Ù1à—>1ÙÁ ½Õ Ù È3&@”,eO- @×ÿÿê,±àžå$^ã<,<5D[ÅÿÿêdÀDC0—å¾P (P"P%*‘I ++Ù`+>/ ˜!#E0ðà È0Ráà&è ! ’àR 1 ++ 9-hÔ,ó½ 2“å$Ô A 0“Då¬1ãÿÿ‘€Ìl5Ì8 ˆì.ø! &ô ¤¤@.úþ@.õþ@"ðþ8îøm6±°±‚0B–H03☾QÈ ++¸ ++\8¢ &0˜ò (š¤ ü€¶üÂt@üºü~¦>ZFˆ.!`€ ++b¨œþÆÐêÜÖ<ÔÆlêlhôbÚÄÜØlôÄàôdôÞôàØbØZnj`l[@=ûAž ++ œÃ8°|® äÊ~n~ ++?{žy yr ++`G"¢2a¤¦@@0B¬/?è ++ȯz­t­hÑDMÑ07Ñ)Ñ ÔÔý2 ãéÐÂ(¬P‘í(jí`|'ÅpÅÅÅ!p¤¤ ° Wi)ÅÙ%/2ÿÙäÿ·Ìÿ½q/1q :qeqDJ ˜4˜q &q  - æ‰ÓůPp”ÿÿên‚­ ++8op¨pu{[ nXª ++PU=.CLz¬CH. ++x7 Cf B˜8/ ++°/ ++?äÊ1 ++ÿÿz€1 ++ÿÿÿÿÿÿ~®1 ++AU=.1 ++°1 ++®1 ++qÃCC b„—.Qê² ++˜I(B²&Bª–².&0éCg+áì h ØÞÞà@t ++0à áKM1 Šh ++”cMp^ã{ ++ìXY @fo:pŒ}F`bàšåà1PQà†å0¶)†íP#¹ íP?RáíP€Y3‚P‚ÜÅPåPXø_ šåÉ”ôÙæ˜['0¦(‘Q+i%z>D~B1ž¨ 6*)‘¬$% Š9€] M¾CÜÿ+R­PMºE˜€ DíXÁX?\dXXXü<¬T HòD ìÑ PLÞE¨a¥ Žâ å‘-9î>H ŽçÈ‘IÀ Œº% À@PœWPP@3P0Tã^ô!à”[”/””iX8¡öE <Ý<?š}*}<.F ûO.IZG?N>H ~@…<RGf,e>r`šåðfGÀ ¬ø¸ ++T&Y_ @€å‰È  ++†A/0ˆ Ì=øKh€] &àü  .µ "à¤ÆWþÿê^*4 ++È/ð(¨ˆ® ++D ìÂØêÊæµ-ó¼  +è„ ÌÒÜÒæÐZ#6¨Ns X±±J  bu-- “» 82h¶êÒÈ©.3BE Ûh´w0ƒ(ú¸E†óÊb`ìònèÆÒlÄâôlàÚÜðÎìØâ\@ *1 81‡üàÂèЇ¦þìÊäæÒÞÜ4/(¶10†FÄØÊ~1@¸¥ò˜Â4HÊÜÂÄØÊZÆÐÊÆÖZ”rZdrÑ>¨XBº édøD€Xâ ˆe”Åg)}k=æZ>p ++jÄÊ1tÀZÆàìÂØÒÈÆràÊFcº ¸s?Ê(+q(ÀH"jÿèÒÚÊX¼HB¾‡puSHõ—f¾Ù4Ä4 À`O&‹iÈÏfÄƪÈÑ20ÊÈö ¼ˆBÒ  x vÈ—iÀúLÏT0à—å¸`=0Žš ++ º*¶vŽ] *N»I<£iå&n nn jaÇJ š ++Lt ++,#/Õ,'/,,@kKa “T?;­‹Y½`He/n3Ošå@X9vo8ÂBÌ×vuHÆà`ÓÌÓoÎÆà`ÏÐÏ‚ÎÏÐÏ@ÚÒÝzÔ€uÅÚHÆàØÊèäÊÆ„Ô·DÖ‰؉‚Ö‰ØX?2Òû"P¥L3RÒp`(=Ô@$äêÜZÆà`ÄaO`BܵnuÚÇÜK/Ö½Þ½‘Þ½" àÆv4(„ ++àCâˆäˆ‚âˆäˆ@r¼Îæˆv0,ˆ–I5ÒôÊŒæ»Gè!ê‚èêäʼ(DHÜààÐHÆZÚÂÖÊZÓ|#êäQ!¸V!N¸Bì")rX0 Ó€ñQÀlbQC+ê¼bQx(B ¸ÿ $*$ *Woà„å „³ óî6‚ôX7SæèêÌÌ×MLÄ"¼‘]?ò # ++ g2î,ã8^§wJÚÒôÊô]3Xî ++6( >ô]. ý]Hý]ð BìHðX âìpVh  hý1ÆÐIQ^ã® ++hK@^á/] AÅ 9Å (ª#§[.™§[æ&yà„â à„ÿñà„åà„âà„å0„ß/àZé˜KÞ =0XOšåÇ© Àn~*(&n'*‡;1ˆ%/!ˆ/ňüw=Hh.-hìÕð8rò(ôpB$t2ˆ Ñ$NPÿl&MÞOk< <) t)l. ++z¾„„„„$„Ý‚ñp8DpÁpLdp¥p~Q '`'!Úe.i¬1`16Y@2å&„ƒ‚ ++ 0žå&S%àžE à+ ž1Rá 14=AL8_žåUp€mv.MvåAÒFr4Pö@ø6·HÀÞ]/ôÌ`ÖÞÊÐdôÜlÂÔØêÔÌòÞòÌyYDú@© ;1…ü¦/þpŠüJ! * " ãT‚2:w Ó©Px:ŠZt§„[räZ@K EåZpyXËH0Ø#9^Æèq‹$ ++Hw ++-_õÌpläèÚnÊÌÚìðÆìäÚÐnè`ÄZf0ä ++$|L# ++M_~ Mu]nNäNrNäN N0±zn4±Ôî^j®úC«/j`«mŒ ++à€]&«S( ++°ÀDG <ÁD~ ä &üæšC]"›r®CR Š ++ˆS7ÍC  / ++XEU²2`ôÊìÂØZîÐÊÜ0Ò9) Lÿ^R’ž ž0P8 *êܱ^ÎY!È@« Ëcs'xB‡2|?„ ++z% ¢z 89@0R r¸j#TQ ô ÅXXêì© XÒì\08 @ h ´H ++ÄÊÎÒÜ ++0%1SL8ÒÓ¦ta‚ìP!#×jÆ`#‚8 ++'`8 2>OH@ƒ@0BV~/h´t0d > ++4Xo"ý& à*ßà Ð`W9ž¾²/%;‚*‘·"/@ö T!"  --@ŠŽSš:7(×S `Šå5~Ö0"÷L€œ[0à á†wŸ·F¤&+“ dH ÁZpS£(Ê4hŒ ²H ¸ ƸwRZÌÂæØÒGŒdk\w-1™>T1pà ã 1™å¾N‹Xp0 ã0ƒáóƒ›XG4/0÷3\y' ” ++æ:68.|gr‡å 0‡9%‰* d–86Ü Ë4” Ê=P†å” ˆe€r S-ËÀ ++10 ã~@0à ãO-Ï *ÕÏ•ŽËÀŠ2€ÄHôZ_ ++`B4 18 ++÷qB ê,^ Ê’©Ý#pHC¸: ‘¹"p@CI ˆ,ˆ˜[e²¸/ —²ÍuÈ/YÈÔÈ*Èó( ÄÀìÀ/ÀÖÿ` J0ÿ:RÊÈ_P:4Ò 3L ƒ•X6 ð– ¶ • - p×kO":„zB4@ª 6ª bHFΕÄØÈZÎäÂàÐùm-#ÊØ08u&x< (ÖD鋺JGZNp" pút ¡b‚bà“å 01 “  e0“å0Š1Œÿ1 Ë ++[ü᜴ LH[ô)ò>D_tmXDDDT‡ ì@ø \¿22æL¥;•x›”C  Å_àåµ EÍdÞµdj ?íÿÿŒ"ÑŒÛ*Š/”. X#Œ,€¤£`¨P¥ /0¥  ¿|¼çH¨Q/5¨€/bJyBž.îþò`Br8$\±:XÚ<8 j 0 ò z €ˆ>ÂÄ_Œp48 ¢à(@ÂäÚfdZÂÄc3BB@ÆÂØØDDÔêÚà?q º<8ó # *n4>`Q`82b0@BD! ‚DVx ++< ++ É+9F²! JzP2HY*xb €â$)òò0—å —å#HH# †æq †å0(´FE7ï0*µ.0×Ìp ++ÒBJùd0˜ º6ÞÄÔHƒ=à’yÍ| Js"0—œbO ’å÷LÈ‹M[/ pÂ’°<+¡L;p¹á 5”"u’' D—å– ++– –$. 4½…Ž”óD •t" pŠ”¡ì/ìËì9ì&ìììH üNŽžåà+ 8ü/Eüãü/‰üÇü0ü<ü/Aü//…ü/üg’³ ³ D à—ås"¤‚þv[" èÔ/YÔÑÔLÔ9Ð-!0žH   Ý ++°!Àž ( øQÿ †å0†å°†åÀ†å†å#p†å'H @_4ÿ/áÞH/¡H´sP/؇0JRo bpR¡ 4Þêèm @ZJ.1F ++j¯P B.!bO#J #2*3H¯!'À,& ¢,# *,J¾<û1& š1!"1n£NŽ2˜ ¶ATã-€˜ÊŒã™#ã™ã™  B 0 OB ã4¹e¤À˜Ž!°Îô/ADµôPBxH…TŠN’# ®š  D`\Ü?îäÌÜ#ÊÀØ8BP SPÁD#Ìž*"· Õ“µ óÊINqƒå“å Ê3Î瑪 ¢J@RãÙ(0à‚âÓ´ Aሂ“åàÂçŒÓŒ›+Án–˜DD.DbŒŸv£†˜% šPƒ. <X X$µX X$/ XXXX+enk€ ã&` ã„zš àšå'pžå Š¥Vá2Jž›þB­¥P šå¥«¢¤ NCQáW–B–p’åÿâ p1Pã)b€˜#A!på Àç'$ á Âãÿ, ," "`íM1ŽJ@ pžåyXxwANZyã÷"åHpÛ [üÅÛ LP pšåƺL L/L ›ÂCQá8t#/’åH!H~H/ÁHø/ øÈø.‰?’å´/u´ 8ÐÙÐÒÐrÐ]È\ò€áãB@à.žá/i’ Hàã@O& H/½Hœ/ _Ôþÿê/m\à¹LŽà9ÅS/šå /%°ŒQS`…`ÔÈÂÈ­¨!p’f @ BàX& 0</ | P@Ø*|ØØ _ B % e_NJ#p‚)N‚å'Ù´"  .$þòŸã&T/@ /Y ++P"@ýZT!­T¬T$/ TT$UTrè/¡ è>ó P$;$°$”0pBâ Gà(°Šå$pŠå(,‚5 (m$(à^°šå$pˆ°°°/b°X¬.yý¬ó¬ä\/ý \°|X@XX$/ X[#XD/UXC X$/åX[/ÍüXC/­X^ Ò²€ãÓ 0„ ^K0jD@à‚á ·¨ R 'Ovû#Ö° ì nXqìß¿# â°*­{<</@),íVQ´ šåä%ì#¾Q97,!†3Ÿˆ2#:˜È&! žÈ&2”ó•æQ/, ˜+…˜@Ef1 @”#T—ž/ üéd" øÎÜ& eÀ!`š5fÓ –å `–å&Vãû—@ ’å"\Žz€  ãàŽàìS  ãûà–Z ++.‘ X@`šå9cMâÿÿêtGŽà^t¸6UŬ´¬ Ï2.=¬" ê\@Ýÿÿ ++ª|œ àP H ÍÄ. "û@,ÄD QDOÿúÿê<<.èú8.áúAèZïª1šÛûª0"÷º"R§, &‚ ' 2 â Ó LîÞäÈP´ª" ++6 ¢ –:2Â0PÄòèÊø$2šìfS`8*$qRØÞÜÎ!@pT 8 «¯8fdZì_«¯£¯H´NŠv+à€2BÀç"ä:´5ÿ,Y,è,(,'Bì,¶+¶i0“åàÂø®–0U*ëb ÿ0^ÅÜ\\ R±ö qy’ŸkdL«° ¨ §˜!/ ˜3/Q˜„˜$¡˜4é˜SÃg¥e,’“²5{§hµüÿ@àÿ¨_¨$4Îã(C(ÚA?àãÄ*R±ýCÎ%Æ/Dä<ôt´…/]t0@šåÙ%¼/¥¼®Hv/ñPG@šå² ++ð¤/I¤^DD.[ÿ¾ ‚Tÿÿê:ú_@:T_B `úXŠ Š h' *& º' Z³ êT8Vš-Ð]}$Ò,Yb Šxxi² %r2T ++(v3 ‹Ê‹ñTâêÂÈ@ ++ÿÿÿþ²=aT8ê[n‹XK'˜k#ŠR0V'²ZèÞàZØÒÜÖp9 !b9ˆ-#0(n ¢X HäÊØÞÆj ++¤²1Lhâ)±"p '+r (- “2/Z$?c@˜X]\—!5ºm&( ++#9Â(D( "?r ++F^ äÙ³q` 6ÒÜÐY‰@ÂææÊÚÄØ@6?ð¶ AúÍ >H øBZ ®K ɶYbY’¬1 à“s –«5Š ++ã “C @ãÐ& °x0[ã.©+ ‹#» Ëç$á(iÏ 4dÏ "p'ˆtOÅ%/pµ#Éœ. 4.0¤£¨Ç¨8tLé ¥ Hž÷—W 2J¯ ++eŠZ`¯ ++Z,q$Jü¶ ++ZaTbZÖG'7ZFAGº†!àK ++AÆð3Ÿ‘ BîäÞèÊiòèÊæX@ŒF`B"A0ŠR`8O²}еQA °#Qº¼@`8S ¦)I°\| #Z| ^ÈB`y' ++ S‚b=DXÊt0„' ++0„üTÂH…A¥8Àd80  LS¶# ÉPˆBhRÈ*Ú <<9+p<4Ù<p ÚBfø +"›#Çͱ0Xl5Nˆ²Ýš,Œ,/'#Åä'#Ò=ž1bòV:RH ô ++F2HHF±¢f8hf¢RÊh¢q8ÊdhX zdf$ š$å@h ++à¥gÀ ++0çDw Ú* ++ = r[D72 ++8#I"2_À`lHäÊæÊè÷§è‚SXÊYj "xYÂjˆN8lØtP `¼ý%G vÚF·n*‘Ì`@ÌäÞÚ@ªDðèÐÂè@ÂØæÞ@ÆÞÜèÂÒÜæØ LËWÂ$ ++0‡H‡"P°fºn ++()`PB0ì;4p*ŸEîÐÞØø¨Ô~ +¨ #${@"¬o™Ýnñ=9@"Ží }§:i(LN@l1àž`^ãg ++9$V$HQ‡"]ÅT &ÍT=ÆÀ@5dF~8qà ãàŠ z F ÷3#Ä 9.3lbTã©Æ@6"Ãx"Î3Ë * BF_ šå$‰ "üï;û f´; *@ è/.ÓÇ=0üO@¤| Ë="ÁL} ++Ë=`ƒåàƒâX}3 ƒË=d}/­$~. ~š8°¨ X~è{=$`Š×"ƒ‡> ¼€ >?€å(H FE Kõh00žå}‘®za “è šå(@Šå,\ ’½,,–F"(@Ï!˜ ù˜ à/6°$)BO†å @ð|"ýn3àô| å½æ6„ .Ä8Õ8t /D0žå  ›@/ï›@ 0ÞS 04Ì ~4 ºc ++P$‚åÄÔp 0‚å @‚pS?ã  [lõë$7<</1< <m<C` á!0ËF2á ¶9^89;$V¦äU (´T@4ÔÝÑñß! ++¨y0èÏ$0@šåô 1 ¬7à ,%à 0àp1(àŠ´ _,àŠå0 S/ Ø j@EØ ð | Ô|‚ (?-¤ ++(×8.ÃþZKv#$._þ€L€8*&þ(W€ Ô¹ˆ@  4  m¥oŒ .rýø'kýò§íG  ++Í  Tý}]TãSýÿÆZp®2pùÄ |¥¬0 ž …ÝÌJzkë:Î'}@qŽ4± +A|w¬.Üÿ9K"- ‘ Kp’Bx­2:<Œ"0.õÚ. ÖH"à—CDÖŸ¿UZêÌÚm2m2Äm2 r¸Õ&r¨ßxt !¡*üÌIó[ADä ++Ì1 ëP¡ ++v$ áD ¥4"¿¥4P 0€å‘DÀàÞçA áŒT㇌ 0¤0_„Tã{0H‰ ++(1€TŠœP¼TãooB_G·` MVD!Jâe…4p á¶Ë$=’9ŽÖt#’9 " ! õ1“ØO("ó(ó €å å0ÓçA á6ðm¹ ++À(0‚â 0ŽåD1uèÑ0Âç(…5 Açÿÿnp+-‘3UpÍD4$vu©ßð& @44¯­ "<,"&0%â&jˆªóÈýÐ .â;RãC÷UÊyá’½á$D½á½á ~Á½áC †å 1 ´…ázÙÜ& ÄQžÐ/Hšåñ‚ý™æ…°HN”' ¶èî{Å r:ì"@bcËPiP×T ¤ÇB½TÔÔ/Ô½ƒèh%LMLÎLŒL™L³ñ ++”È*¤- Z2( .EJi<<P<½</5þOõ8 Y .þ5bš "Ïâ@àÞæÒäà¼Q@6æàî ê  ’ VPBüÁ% ² ?1(-h H8 Z$nL0BX te&ôÕ\/ü ûEY!tÍPP!FxÚEz€È0ÊjFQZîÒèÐ( ++0:D|"PÂ~Qâp8B¨ ð àÀãK5€u'p`Ž&°õ±; ++œpŽ½Z] "0¯Ù&°Ï-Ü1Ep"0³Ù"°Û-&]"r3‘… ä#dË.0Ë. P`V:°ˆ v],S0†å(ðF.°ŒB<h08 4x ”C/Ìt"0»/O p áû"Ôu'(=ß@ä(•A',„C ++( "  †÷4MSê:$]Byà÷-S£5"à-ÑIX “Ëè "<Ò ìàz^“@[(Õ@ÔACÔ¡sV–äü˜ "(1E lq0Žâ@ƒšñöø*€öø¶_h¶_,Iƒü\$Ñ(¶_@ " ã<@0,‡ " ++˜g ¤<‰< Ä,0HÑHË i,Ë 0  á!á¿ ++1 0šPÈ"(……'áã ++Lu⌠.]Œ‡¤&ö ¿º/àh 0.Å0h³7s ' ,Ë Aƒ .·þÇ £@•(H‡þÿêPŽ åèŽDOt°HþÿêZ’ ++€‘`–îÊâ~HZ_i&p¤  ++ È Mƒ’ÆÊææZÒäTBDD&05@Ì*òåKÑ JŒ¿öå¹¹±5•$$*£" `¬" Z" " p"°"À)0L‹åM ½˜Iý’p†å0†å°á!E–b%à†å)ÀX;S-à†åXõ"`F$$´e2$2$ Õ…#d 2$£d x–Ž 45õ_&¤-ÍÍd^àåOR [Y1SdJMHDpúë D@ XÛ##H!Têuœ•@èÞ@ØÞÆÂè¹ "µ¹d$ 8:$n±â‚`¨Bš$q0x  PäÈZäè;"À° °d'áq/ä3œå v D&À£rÍ´+y¸‚ À¯r#°lPB ”åN‚ ++”Z ++ ä#""À (6P †å%°v„nnŒ/ðšjô#˜+® ++é ààMˆp0‚âÀpp ãp ¢%à’å œå°'Ê­‡¼!/5¼vBSÊBƆœ˜m ÷b¡ÏQ–P«Iì@?¬ —ÄÒÜÂäò~²1 Æèú„ÓÒ6 ä܇3ÆèØЇ$ä:—† B"ÌÚ J_˜ð! ++°8X „  RÒÜ@ü™`ÐÂÈ@ÂØõ(ò@."Òè&•ø€GC‚šÅàn/&S%r’i>Z BžèÆèÅà/àèkèè×?œûTžû%+ ++ûOæ€B -P38øs)58 ¸u%Þäž\㚎J@ÊìÊØ[FäÈ ÞÜÉ Ö¹ˆ_Z ŒÓäPn` ++¡C€’8’ ;#HçB AÓ X *, R*% *¶° ú €z&0);7( ++èGzG’»Œ' ++ Ó(Ó*°€¢8"¤žR ª ¤˜B¦ @ˆ6"àÁY?Ç4hU hc J Wv8j?/ “ ++*8•Tê 8‹ 9 ª ++l ++4X @$ @ (FL"ÒÜ6æ¹ +NS/AFA¤xV ² @s<¤ ++ 8(Tµ¨€BØ µHV ‹!V¯ /i¯ èåõbB° 3( ÆÐÂæFR#·p¡»A ++D"!žT"ù‘ P p…  ø7PãWÿ¿w1!àq’E_!à€åFI ÎISå*â„èûˆ L% Á)à trr ++ˆ$P8³‰@"àžý> E+#y˜itDa-•õEa-|@ãÞO§4/=ô+/}ô;/Íô.jô¸Ç€¤”<zŠp D%žA.žp¥-û50†ÀTk+<(Ñ»•˜&x9d=PLl¢° ÓyL"àÍEI,2“BàúSð5 5<;%BPVüƒ½¾ZM„„,) $¶T p@./@ÆùTÕ0]? “r ´ ++Œ.±IÜ` ndП" .!@ ¤¨(‡"\_1 ++ÃŽ)u,q¼"¬\D¢´%Jy¼„„>\ü`*Ýü@:@/ í¿*aÄÞN<¥DÝ¿Ó|Is0åÝÂ0E½10Ž´=*Åþ]½ü *øíð:˜”b Üd dl/‡ÿX9|ÌÌ á`@!@¹t¹2 ÜTgÔ,\*= \l\@\Ž$/£þ œ¸w ÐПA *©ÌÜÍå n hñ¸ R‹ üˆ_CCq 7F¥:'3333³d!$[Í$Œ8 ‹² °àÂ*L€/žHÀÕHX7Q% . €ȱ ÀTD?ÿÿ ++`t\" àü9š…5ž”[c C ©™(ïT<\h²-h.õ£C=X˜,‹E.A4˜?ûþÿ˜¸L"êþÁ`¸ ÅsD ¸™¹`p:BªöYØìJ4±!ÈÍæ(¨ *]¨` à”åà¨Q„âàƒLlÄMIõ`3á±ÌAJ7 ’Í/a1¬X–‡ªi@#V$“勬š6ˆ º˜JG:4:× ,e»ßÊ ++tRm ƒâà‚R0(RGÝ//@†¢?Ñ`è†äc5©3ê·Ž7¢ŽàæB¬` A‚¬„L<#º*î]ã@B®r®`°8 2 X  qˆÿZäÀ² HæòæèÊÚºC"`<P®wB²&2T&¢Tdh¶$PPÊðèÊÜñæÄ›´<ü|K'­C=2‚]dF] ¨L% Õ< \F¹HÀ– ­Ù"@Ìø®0Ç«õÇ«-O­½Õ¶J€ššN¿EZäÞÞ»ý£ \îàÞ y Âàæ ( ++h]fr´ ++ “D'0i¢e(¸&+ ++ÊþDÞäÒÊÜtHºH!öæÊÂäÆÐXÚ°p¶˜¸3PºX  °€“hÈ  ++Hf{á4 ‚P%‚P  ()‚P"à—8…€†åà—åš_à—åàšPä²ÔÎ.9¾šP¼šP€¼šPhÄ  x¡hšP__FPšPšP(Õû&¼Ë"& *?xxÞN.é†N‚Núi:¾i:¸¦ Þ™:W^ã°ر: _å @že‚¬ð8öä˜æäÆtŠðàätâêÞèÊ*ÆôæÂbÌÆÌôÈÊÐhrfÜѹd94Ž#¹$83>/\b»*ȹðä p <HÚÂäÖZm‘ÒÜÎB!B 0æƘvøì¢ÍY¡%hh¡MÕ"72 $dl‰; '€'»(è(»8ê †;ì™8¹ñÌÞäZÊÂÆÐ!1t† L›/ô:«"` ¡³¼àÂèÆÐZÊÜìJvyQa*Z^…©'@’Xõ'RliR›v =® iRD ÉÉUÑ/.in«(¬ .¥ vy3ròT0î| " ++«òxädð Xø6  ‡qd0ÝqQ,^ãT´µ1“åÍn^÷­ ++xQÒÐ+ð—³åYŒh5 =| *©ý\5öC0—åárÚLI õLÉP¨ðȸ óÜ ‚„"3®éx‰/ÎG8ô*BÊ8jð@ uxBÈHŸ€Áð8ÜÂÜÞÙ0ÆÂæ|ù ++²ÊÚàèò@ÊØæÊ@ÆØÂêæÊ@ÐÒè@P)#@P@¿X>9R@PÍÿ9@ ++FR@PPÀA@PêÜT9>‰ÈØTR@\\\ÄìÊ^„ÄÞÈòRR@PÈ€@PØÂÚÄÈ ÄÊØ@ìÂäR@P¿@P½¸ç´@â@8 RR®ŠôRR@Âè@ÆÐÂäÂÆèÊä@a`@lfb`jc’ \æ}nvzŸzðh ¬y6ò ++ ¥|ôòŽô&&ê ú}7ô ++ ª¸@B p7 Çu¾*-¾@÷up“å°“>3½± …[t}j:0+Ç /wkæUAà†â|gò/àûqZC&3à€Ò:€'w€Ó`/G#w#w§t0ã÷ 88 °j?0Oa ++QËQà„å <´„å „å p„årk¨ ܶ Éà _<ÿ/á²(Ÿ(Ž|– f6Y´6/°Š-å.4Æo2Æ1=°šð.F‡y3àƒ(ƒ( 3àƒGõƒP-ÀGõ`#À&!ìÀ0t$Cú;w" À(ŠXðâœäãZ œ!/œpz\â „ëx óx‚˜x p4 wwY ¬'0 6!†â"6ƒÊ/à¸3î?ô3xh/ C|€ °P°_0„å $ðpÙµ ÆB]² ‰w$ÜbZºbà^ìÞÒÈ#Ä0 LDh0öÐÃ@høI ü7!0H^7ØØZÉa<úöXªpªxNþ"ý†ÛT`(:5j&úx0ÊTüþ‹CPj|PB°2 *Liï?B TH z! S “åD "à­y¬A¡7ߊ 1š¼( §‹ýY´)P´)$ ˜0˜" | $ #{Ô& ØW<'î—û8 ˜ D„˜ x|˜ ++ô*ð$ x (µ´¢Ž|x0¢X¦` ++OäÊÌ(p  52äÊÌ\bnèRÚÂòÄÊZæäÆBTð #! ¬v"<“CÆèÊZÖÌÔ?ØÞƹ.nd¥BGB¶/ff¶XÄÞð­JÊ­­˜p˜Ì *H­n–\Œ’ï° øö1ô |ÌÞØÈZäÒÎÐètïZ  X½îZ‚ÈØ@ÈÄ@Èì%â@PÒÌ@ÈØ@PâêÂæÒ>FPæÊâLP0@àäÒÚÆ"@P¯RHå+RR"_1§ÄR@PäÊÌ@FÌ!ìR îRö±Ä Odfhl¶jÿ˜fÿƒ!hòRšG"(R/ìR»½Õ+@PN HI T{h› û­PUüì ö6 R@,9ZàäV“ÆÞÚÄÒÜÊÈZ_R@Nhdpd@1$öˆ ++àõ#HÈîÙ8 ++^`ª ++Hlï v%¸Çs0^ 1H ++ ++L€€òm®.c‚.!†Ü=¹" " ++ g g”ófaÙœz g80F8 Z*Ê " ,<Ç. @. Â(C ‰„@EjH;"I‹  ¬<¦/Íš–\ .\€Xyª/ u˜ ëïPL‡”” A ++Z”ŸhPþ ++°OP á””‘ÚÈDžDÂ[2”å&É;ÑÚ¼ÑÚ¸@²@-¢$@ ”å*`;0’.`S¨¢ 0âSãU  ++%/@â^¨0"0á!¢+ôOµ•r ³ ’å à’åëâHª@Žã d d d ?‹åÚ Ú †Úxž˜ê˜ß:.O‹åØLõr@F*”\2 ”ß1@hdh.™\"p&›=”•=*Å<op€å0 ++¸ Á:d!  p°püŸ à„å 0„åxîÆ Ïþ<</Õ<[/E<ƒ$, /V(p@šåÒþÿê[mòx ++^ãÖ ++ ^ã4WmP. ++0¹à‹mP¹ ++P}’’ ++p^ãf“mð ++À^ãÝ ++Ð^㌠++à®Ñ€ ++ð^ãÈ ƒð ^ã‚ ++^ã* ++^ãë ++^ã¢b_0 ^ãð±1^~h1^´³$fa0`(”åOk‚dFÒü Ð0ÙŒØ&î„Zñ¤/©¤i@ÉOk/”娨‰ ŒS2þÿê0H$Œ ”å”å$ ¤/í$¶ |í\‰ > + !à”è@íýÿê^ú*u0S ”å )Ì*î Eàv_ „åë/! »4!($@©ýÿê.… $ dr.îÄïô/ ++ô¢ÅôMô:!à”7¼ @fýÿêº.‘ ++„P€|­W”å8@XýÿêgÛɤH D 'Њr<ôOTu”;ø ++XÄ 5( ËË‚ËY&Â" h>„!G :H[®r!˜MwH.½'àx´ZÈÊÌÊä*Z(p<4¶';¯'n<9< W,@slRj Øh` -0àäÞBœhœ -5–l–r••ñ‰6&‰Ìš&/ÂÄ‹–-»÷,<7jÂ÷ ˆ)‡ ++ÆÞÜìT£<&›-0_ÝvÎZèòàÊTÖ÷±äÊæêØè*ÔÔ`i%!"i%¸æ oÌÞäÊÒÎÜä%nlä8o5âNh Ûu.&Ï6$ú1 2Ï ÏpÏ&%ZÏ àW" ++P#&)B#Ð#!p)x8$*Y+Úq²%ü.lpü0b+9d†&äèÈU(´æˆ* ++ÒÜÈÊð¸ùêzHÊd$ˆô&-òôÀî=,(î?äÊÌíhÍ.íV,/fbÎ8&Ç(í*í¯,ÉxÉ&3É°».»‚.»l2 wsÖ1&so`Õ1 ++o8äèÈZ`qy0Û1 2lVr9!oˆB4l‚4lPl%pà660rBÒÚÚêÄ;ðz.jl—.6A ++<‚/dr‘.^ ++¸k6F3k?ÝÃ=:&¬Æ8.jd8,«Æ;/dp;XäÆÈ»8™È:N-CŠO;4 4S&Sã=|) ,#àž,Ž,6ŠT,à­I,ž, Ø ðñã/ãtàm§&r> 6ì Q†Âæʘ•.†0.x¤6( æ-Ĉ<;ðåÿëâè áÿ/â ‚á¤O ú#0|>#„<=„>z².€âž¨O ¤9Ýwº@ ++°œN  `@P 2Š˜ÿ±úBH ++D J“¾ ++§w 2B ++(^HbjPŒ ++H4Pb8KÚ– ˆ(FoàÂäÒÂÐ d 4HdìF•„88˜J)ªÿ+Q*°(€.–ðJ¯Ò ++.blt[JÒm6r}:è­(êkHkJk'W"2öª cL"7?ÚÞÒ"7h_˜3ÚÞÒµl\L\?pKåÔ ++'Xt `9b8NR__š R &aÒÌxSÿlP >/fl9 4Ü/dh> Ä ++‘ ++>TP äiä+kÒÝ ++˜¨îVãMm/dhãMf/db RÒTÎ ++Vc§0PG`8q‹ð"8ÁS1ŽÒŠQX<Î2eH š!:±j ++ üæ :ÎÞè LÐ7X':Z\"PêMn ++0gY B^¨Pà8ª€`XBl\rÈ ,ÂÈÈZQ‡4ØÒÄý6T®5ÊLRQ–b,*àAN’ ¤Bœé&§Ç/à—T*³‚ ôÃà> ÕTþ ++ÎLÍÎL j¯OØÉ@ì— j~ñtpžå0—å(SâLÆž ÛÈ@ —å2Ÿl—h 2 ˜êF ¼>@¼> ‚SÌÈ<"0Ö {†S!@Þûm#@"6Gøz  0Fv @0F:y# âß b¦6¦A0øÂb@dhfŽhf] ++JRja;/ a;Æa;Æa;Æa;!Êðð\-ÒÈ,; ++]·:æÆq:É:H;Æ;Ñ‹‚siÙ:»:_jpdp`û<ÇAjH|XÂlÑM%l%=p`nµ°`pfhBÛº"àèÄDæÍþ&ÆOì. 쉜ìf€r ¾Q Ì.‰g ˆc/p¦Ùà–áX" ÎÓôËôPêBzâ ô™5 à‘Óa‰S•(‚:¤3‘å  ïN810Š­À1!0‘®1W(¾:ÃqŠØ "ø?Yx6¶„= žŠ1H’¤Žv ..–§ h.T$œ Ð  ++â% 6Þ%N' ÝËŠ±Þ~å!š>˜*=˜¨œˆÖ}ŸF9A¡k¤z9ô"Bv è "äÊâêÒäÊÚÊÜèæZÔÞÒ/[4p áS¹S•‚³</yƒ‚ø‚Bt  Pp¸[‰B|:¥ °ÈH›L]›å ž+Y+0 €åzÍaÐ" °zX Í ‚ÔT3°šå{œ‰e . ÚL!0«" Rl ~hÄ"p(‚ÙTp Tp p\0!|"X0`‚n ¬0JÙ Žp}ÿÿêòYpÔ"~SC0—åëÿ_’bFFPÚ0\pØr çõ Êâ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZ`ô–W2Eü5 þ4 ¶Cfr €q4 ( ++8„ BJt³¢V ++v¾ `À¨x³;dp~ X•¼ˆ]Y zT0Bz-IÚ|W@B|žB‚äò€Üðß|j^} "Ø“MÉS #D €yƒ2%Žiq¤j&B-–8˜~à -] ê€-€-‚B˜öH@f ò!ºX!x `p î6ÒŸf;º ²TCø„1º Ñì7’px5ºqEX`Càžåþ ++üfI: TP¿q#‰€°P‚ˆP‚*½´:@,D3¬ ¤#‘Íøè-‚Vv%ÔGb †åp¡#à†ûR0†å@úT/Nv ¶VæÖÞVôè,¸ƒ /á$„& 5µr† ˆ­öúhŒ øîuC!$çFüG“vuÐRp^4Š£PŒ¿•vx°  §]‡z{9DËI:× yxQx}x)÷ ++0€x€x€H3à€…x€…x•€åà—åà€#2cù+x ´У@§|{9 @ªBŽÙx#ŽD™%h® °¡/¡8„[‚𘾂ð1à‚1à‚[™?—'†å ÑÑ »J–’  ++ Hä ¢- ++Ž’à´ðb’—åà‘å®àþãÈ}—Ìóˆ /…ˆ Ôô= —œ h™Ô` åÇïŽUø y à… Œ OP°Yk‹2z^€AÝ3€$€$3 ¹¼Î|¼ å å°åQ¬#0‚U]]MO ã˜æLÔƬ/¸¤ª<‘œ™œ_¹ò ++ âB8"’` ”,Ór²Ä¡þ$ÄÈÄìhæfÐÖjÔÂnäâØZÂV<ff† ØÊÜÎèÐlZÆäÆo”†Uö¾ÂäÚfdØÊ B H æîÂà^±ð ™åô0™åüà™“‘åü‰å Sô‰å 3ð‰$ 2(q15 —«,,,o¨ U:‰2 Êá2Ы4 ++Úy>ƒ™h–  ˆ¯Šó‚óqÊh&È©>‚.}<¨þ.3S$|„®ò þ& L1—å@& @æ•1;ˆP\ž# ƒº&/ƒåØa~ $‚$ ›p'#0 ++r& äâ\à .)`~h0_€²¢(û^ÊȆ1\Z€BX–3…P*8ª AHB85ée– Bá é 8ˆtx j– ++ SáøÌÈòÜÂÚÒÆZîÒÜÈ'ÀS J’‘!Á€B¬  $CÈrÆÞìÊäÂÎÜ+c(ø(é\b'`¡*¢5šåzÐ/šå{Š½_ ê…ŠÍ° <$ ^8>®âT–YP›¬€à4Dàc&@~UrU/àŠUÊHŠUä *= æ8y< 0Ap30‚Œ‚Ü4@ŠåŠUÈ”ÎQxš ö‡,åÊ  ï Òo€å @€å¦VìˆÛ¸°×pŒ€ Ç Ä€PMºÐŠx(ÎÊÜÊäÂè.®1ìÒÜ1±yaP؇ˆŠØ#PÚ c ˜Ê|Aœ ++E& D0šOðœ0¢ æÒÚà~ òÒæàØÂò ÆÎÞæ`ÆrêÌÒbäâZÊèK%'ž$7 37d7f ô®" )¨$@ ¹,¸$%¢¹$¨Þ ++üÂ\üÂÀ$ð v$ÆêääÊÜèZèäÂÜæ8 çw!5ÖpÈ ++ÄØÞÆÖ@AŤA†¤ýª0ÚЧSN K¬N A0R ++RAý ÚSyMµP®¦€¦¨ ]=&fò‰(J Í6F ™®ë”šýê‡NVÞ ¥F ”¨? žŽ) ](J <Š $"GwPw5àxb¨(  Ü$Þ] ++¨@ÒXºªýêO²ªýê3 ++õ§B*¬i$ ++ MBº®ó! {“°{Y°{p{óaRÚ²’&@8!¢Ï~ B¶   6Å%?!éµ6r|&n–n…‘x F ãVZi ‘x¢¬"&@ŒŠ&Dª\2­pd*6w òd* â¡nD/Y~ÿàœ(²4"&@ºÛ"¼¼h.Á4‰¼øý<¦8ø J69 À"@ayC#ðj cŒ*/zayPÀB´K•8›+-6,—& ª…¤ê/@E_/}E_9«}ª/0“G•'èzõDÎ ùD jr ++ÒBÂÃ' ++¨ó”WR´S)´ç@ʶ°| ¸f(f‘ãâj³`,… Êb9^^Â^#Ê#4¸ ++_'Bùd e Šeqv ++¶ ++ #/ ++(p,/Rp,´¶8R@Pº%ZÒœ·T,W… l, }g„frËx/ ++0Õ B(Š³uH ² " Y$›Œ¯Š"Â@˜•ž·’)¬' ++ E+ñ…8 ò,º òع0y¼ 1( #EyþèñM"ôMåòÔòÏò¾ò¹òSÎÃã"žÕ& ÝÃ[ ++  !š;5UXò*›¨€ *enËHòm´ò;¥0#M!]MÉ  ã|/0»Á»"0 Û o /B'ÐÈò "|ç³4# ¹M  I XXtŒØ&;Õ @ž ‡¥.Ñdó/ Tð* tÜ=$@Šs7ì4ñW¶yƒ7†_¶"(``Ùò¡ÜÙ! á@OŠå0 ˬ"0}0 Jâ,šØ±¸ó™s`1zTÛ]ƒå@ƒ`/›Ÿ(ñ98Š'Ló_00Šå4˜ ’-¡4n4 Jâ00YtwòPò? @Þ¤ÁUÜÔ&ë D0p‡H= à‡ˆ1õ X·¸‘° á&Rãã\\mtßNÃ@ú  ôì,(å}Ùu p˜-z$d÷.ÑT)¨¸w ¼ô!@ƒåh *9hØ*sª¤u<|±<G` ádó/0dóŸ"@³&$⨠±Œò"@«& dó`$µ9ló,Q ¿°Ø j ‰ ØLdó& A¡  <.ÿþk(cèhÃD%š00ƒâ„_àþÿ ++úD.Èþµ¤.•þ¨‚^<H <·7¬€ ++¡³«  ´óU@ ý+e ¬ó.ý»’¼º8Ý•P¢¼IC5Ö$9îàÞ@1¨Ê…!¼–âOŒ)Àµ7°\&¯tŠ£ÎÎ…|pWYžå “´SRá D1àžå‘¿KM/¹MMê`G_Öæ!`h v<\ ?¡”ô  $À4  ) ÅY" `Jìèºè,Õ / pJ ©”bP(¤/¹¤]õVø2¤¥0ÐFKóÂÜòÒfØÊ ++è aÜè  ++aÌÄ  Þ ++ À ++ÒfÞæðUš QÂl`C ++è R ++Âl D è ,M , "aæd$ &‚ ++(‚ **¡,* .Ö ++0Ö 2* ++4* 6õ8 :Ö âÜž<Ö ³>¾@èB'“BààÆ CDè ó#¾z¾PŠÀ*îpÀHBμ˜¼L];p00**.^¤a$ ü.0ø/¹1,ä)Ô)Tk Ùi3ÐEд¤¨`b¾-8JøÂá3ü0™ÚRžåüà‰ $Ôa( a(I(ô’7 ++ê$(BDhÆ  @þ¡Ö™zˆ¨(_SÀD"pšÂ"0žúN>—à ,¦ÌBDCè‚O áêŠ+ðÐÑç4ÌB5ÌBó4ÌB 6¬ )˜î3žÍ’˜ FÚû1`Š´/ RëÃ`€( …€(gP`Àc"ŠÄh ¨>6FR‚ÆÑ5±p:X²Ær hÈ  ±;ë&Í/ æ9õó5È? —륫ŸäZ CŠRˆš,¢OHÊ^Y "Æ^OPÌ^»S¢λB8Ð EÁ¢À@²"H)ñÌÂæØZèÂäÎÊè0Ò"ÐÞæèZÚÂÆÐÒÜʱSÚ$PÔ 8êÜh;sÎÜÒôÊÈ@ @ ~£E¾i¢@(ÒÔŠ7 •' ++(Ì(@ ¡è  —f ©)æ­ש)Ðœ©)8‰©)<p©)|}q)=q)@q)])•3 ó•a)0ç ƒå7é¹  ])w ãëa)Vä‰a)‚a)Áe*P—ÑÖü(ØMÚ9)ÜϤ7)Ü7)¸(É(7ÞÂ(!£(ˆ—( à—(†5à Á æ—(ÿiâ—(€â—(Xä Ø àzY" 7Ìã”e”ì”1¢kâä ¯'æ¯'æÖ@¯'Ršè¯'øÐG¼‡$(‡$ ++êðœQˆ æZ‰¦^ß¡SçøÞ9W¢È0[ãPÈaÀ›å àœ 5¤ð•Mé1 ›GêôúÒœvGœ*Í¬Ý ++H˜ À˜ x; ˜ °” Àä4ß/Àÿ ++'ÀÀ4" ŠØ fïÓBá—õ¬4ð/ Ì&Á ðs’ÿÿê ++ê©’å#@ºê ++¯!ìE3 æ\*( óû'Mûaû*YI»* ¿/ÀÎ ­AÏ¿›ö¦“{Ísguÿ @cs/ >D "X.¶°. ¬¬!@B" à°Ê= ñu¬ @o §6¨Ã)#@€”€! §u_/ /u—"@ëC¢CRìÜeS B†u&zxBê ++ $&†PXG„ ++ ( H00$SVšêoQ³ÿªP@  ++5V‘ÌxÊÜêÚÕ4 `ú 1Ð%Mk,&°ü¤"bLú ++ò/ð  ++J"‡J"‡ò‡ò‡J"‡aLÇVBd8î#+5;5d‚d‚d‚dÿ Ë•¶ §<@p†å{-À‘@ô OšÀwœ4@â:*I ¡ŒÀn ¨о!À<Œ¤L àŒåt/½Ê ÀÏ•²I„¥„ „. ˆ/‘·Qh°õÚ |||-pŒä*hç$`Z`$G`  ++K$Xcžb# RK H"ÀÈ1 ‘•@"p4ô$ áÙOnè%Òž & ++ S ž$ü1BLŠ!îÀ¢ÛÕB ++8‹8‹8‹‹‹n$2‹å&ã¼>Àj$/¸j$ ¬/àn$£ø•n$ º"Ÿ °% Q‹/p +)šW?\tps ++ ¨N, ¦$¦$     /6 ++&/+ ++&FNÇ¡0œÓ[‰~ ++M}Ó[ âüA/Îÿ~"/Ãÿ~"rHwUKdVo¢b#À”!ÀŒ”6” lØ .ýþ3 .ïþ€È.²þ¼Ÿ(‘(}(h(T(<()(<.ðý.Üý,LÁýÿêðð¶+¨tÙi |f|ltÒ)0 á¢SNk ÈCÈ ÌèÐÈ,ÃC Ôp p È`È °ÑÑ>å¡ìYyž.Íÿ$kî¡ÿ”! ‚”«” D“l…(ï5A ýÿêeã06RU-‰°µX^šåñü`qêüÿê’ªž ¢öÒÈ𨭠è¨0 ++x÷xØž£™°Êâì~+ôi"Ç£  ++oRî=À3CˆðDsèY™’†°ŠÈŒe™P>2 ²(n«9b«!p†ðè¢)b«00—åñ5p—b«]B¦zw B¦°ÏhÓ°¡-ZÿJ«°²¡¹,J«J«J«p8J«Ì{Ìï—ÜÓJ« (ŸP‘(Îc‘µxJ«— &pƒÁJ«§  šåpšå”S” | N'7 F¤”$ ”4 \ @Ø\8KF" øÙ(Æ NÎ;ä!/¥äophbe €0Bòx¸©ò¸‘ž.ÈB ©>NóWcB®ˆu?òÑ£T¡Jbôóe/ T¡ÿgf|¡1¡ ' ;%/RR ++DÆØêæèÊäi¡Njhhpå:'¡&- ++Ha`($Q!P"  P†¸ŠáPø˜Œw?î ++X¤¡#w1Âú ++0X[PHî=zþ7¹VAV#Ut-JOT@/Zm GìGS† ++E*Ŷ&pŠ ++7Òß -yšB  ++}6ä hõFµ®°V\  ‡ ®« Fµ®«‰&°R (®«ŠÏ. 0DW/¢«à„WÈ p$ {X/mY9#Ze8 ° NµK %CCz·&\<Dp‡|p‘9Ð €çDrnð/â(Ì|³ð  <Œ<~(l(W‘08jîn¨È¨?üò§%X8K €œªôt)¸˜154þ8{*ø^¼H0ªÀ¢`Š´Àz pürªòr*n f?‚ôa #z½5ôa&ºôaߎnP²8'*¸5$ BéCôí6D( NMÉ4ÌÒÜwÍ!ÒÊÎÏ ++{Î&É"âœmC’ ûºmC ++ …#X1¼hKaCQHÆZÂKÜOUC  J) 0 $S Tã  MC ªR m6¸ë ‡àâ^ãˆ,DB%ÂâPã? –ÔPø4œ© 0N·çQf3†â7ð†â#à†å'†å(à†â+à†å/ Àð†â3à†å7†å8à†â;à†å?p?ó†âCà†åG°†åHà†âKà†åOSl/0ƒ8÷3 'TMø´œ8$c ++0”~Ò¹OÀŠå(Ñ+"øJ0"((±,/0¬K"0ª0t÷" !’JlhâÀ6÷p7]E©-5àYE1vÿÿQDt4¦8 ++xªyô˜(HÎÊÜæòÚZ|àäÊèèòZܯÐ$ ùG!8(pR Þz5X fØÞæêäÊh0$Õ!@¶- Yn áÅQeÁzM1 ÝãMŽ†’L ++ˆ)0aGC>1 þ¤@  Ð4 $ ö˜Lk4Tã’  2"ˆ»upk&0S¯  qx«bT³6pD. ÛF7/p€Ã`8k Û6pÃ`*‘Ý. p@+ê…3 UÙÓ6 ¹wô ®/ ++Í) ÿ ++àîσÁ; ³3§¹'ƒ/MÌx°q×&25XqÙ=01™Ë­5Ú{S.å{S§D.)DmÚe+ a8lðÄÿÿê4ºÊÜìÒäÞÜTs~/0¾à³) v8xKa z8 ô†8a! ç`a  ²8AÇáùD ++b«Ñ8x +õ,*™‹U"(. /wÔøKÄK bô.µE-Š) é4 ++³³³K"8 4ü¹à!Š5iÞ )T™ß? 40Ñ8¨j ++»V$.Hwåˆ/YÁ:%šî6 49/ áD/ÝD#+¼t8Q< ^/s^$Å(ÍâOÍâ  .Ad )¼`|7$O]‡°_ `hàëpÐx0•aßY€L´T/@P#*P Ä/îp;…p Íp<õpT/1`/|/y`'@/¹`/ ýD`„/=`8/u`#<±t$.éptn@.)@ø:|S <e<<á5~0@$„åKë òø , .êþ.¸þ_ ª("†þ>2»»O+é ì »8/‚ý” *i ++tp@Ji@Jp®²BŒ ” ++‰7‰70—åxY³G ++¤ .y7ç18bz ØW:E ++«7c ÀP0B‹?BHÙ{ ++ Ê{ ++Ä{ ++/{ ++¹îJh'h!hwZ*»²"ÃBÃnI¿@àåη=ªBàâô" ++Â$ ++ “{)^ 9ë¹Ó:¢Jl{ ?£. ++£1å ȪÜf#<‰‡!0š \s0ZW²J«"«Œ.EŒ_ÎKô)/­ôQ8B:¶ŒQ( ++°ñg8 8R”Ý"1Ùå‘š¤¦¦CP B ên` äÐæ{-NÝ´Þ»ûÃA±øû(.¼p  åtq å0§||.-|åF,*¨||x"pˆ"„¾{ŒŒ¹Œàp0Œ8ŒŒSp ++°@z\ß#h rCR Š ]8ÚúçVŠ''»œ`q–. ¢=³?S8B USr’<‘ãHøXJ6¬’80HÜÞü ê!50øjX ÒA° X ºLl/“Au%”A#Y 60ÄX ö "²cð˜JW¾CO/<£u-0Ž^ /Š/n 2 Ýn ÒÒ– OLÊ­TF +Y÷©R±Xª°ÂB;v;;7(Î;ê ¯uÚ® ®}ÖÀ ++0°CwÊ" ++(åCfH$X¨šºD/&Ý€&Ý ++‹*:v(¯*¯â¯.¯v,¯.¯è¯C î ++E80 ++î"’î!z$0ýePÒÜèÊäñZ(sD㌠HÂææÊÚÄØòjð#Xe$02’0 ÆÐÊÂè~´Ç ÚÇ ¿ ++¿ ++EŒG ++1Â%Æ"ƒ%Æ"T!ËPp C0å MþSSúùX"ö€ö *ùTð}"b2*àæ+ ×ö×ö£ "´ÿµ·.QýäRëä@<¥ß .Š@ñÿÿ ++_p( Í|ÏuP…[$Œ» z».9»Aê¸çpdÛ ++‰Û ++ÜàÕ¼#´ƒ " k *0¤K¤õG¼¼ð>ð îì¨5ìô}Û¼m2$bû"” ++S ++2Î ++xÞD’v²2 ++ 3­32+ *'hD˜&8>DB HdqÄÂÆÖÊÜÈÎX: àqe©.—e©iiië]©06ÃFÈ4j ++Òn;áuû ÅÂÂ’ªÉÂQ ³Y<"›§â¥âtâJâ>" 6âWu"ƒ§+½ Á =àee³†.]Da/ Á O šåÊeWH§¨ $$*à¶|¶s¨S'È.yÈ¿!¸O &  10’¾¢R¢á¢7àšåb¦G7)E¼.5¼`Px‘B @’åŽ?’åªï2.z‚w8 $ë_úÒú°B68$¢ƒ  ++ÂààØò: ò6rQ08¨Ÿ(6˜p"'°¬% ‚Aoä4é÷":v . ++8œ,<ý ;¦ü sq[)êów"Ì7`q6©0å,'Ü@%%zXY ²@‹ òX– æòæèÊÚ0˜&HZC¹a0š.K ++ ÂÆX6$"8€ÚiÉ=*B‹ b ++d-ˆ 7¦ªIz¡ d K/†Þl ç ++Á3çkÉ1DBU½4c. ›GäG€äGp 0€å €ù=/ã. /en%®<.¡Ú ¼+.& 9 @p 6pAe¼+ )²¤Ô ++›àsÒ-Ñ nŠ PXð*²†@ˆhŠØŒBD  '™`(À) µ‡f ~Û(V~;™ .Ù™ ÏhŽh\ èóó¤U ++!m‡ê ++árBN A ÚÖÅ1¿." ¤œ;à’Lgl^áø ++ݹ‚.‚ à’åÐgžˆñ ’å°’å ’å ‘³L#Àa`‘å p‘U" pB1 @“Í ++!ðšr&`•."ýW±Þ ++0ÀŠå4ŠÉq1 •NXã* ++®a÷ÊÒ.l(@¸.ˆ."!Ây/B.#'ª.D.-Õ ^½`a§„åˆ B0.ÆaäÊØÞÆÂÛ‹PBX1z ×15! ++€;ˆ3Â# ++XfOl#ºHPH&A¯pC`C93æÕ˜Z*HØÞÞÖêàöŽºg'XÂ&=b4CxZU"?Yx A2 @`Æ"\÷ñ@ ++^ ++0HÌØêæÐ)µ"äêÏuÆÂÆÐÊ Zq!H?UÊ`@t$ÈÒæÂÄU"PäêàèæQ;"ÊÜJ/ ++(Ðw jb ++ „Ex„A1dAeÄÞÞèZÌ‹A؆B+h $ˆ®L&Á ²ü¹ ¥B§ ä*¾Ô ++ 6Ÿ8X .¥9"ë?ß”p ++RB &d8p¾Bf†Wk( "ÈÞZé@éA,c° á0ÇÙÀ¾!"7[ J) ðKî%à›?D î‹F\„ ðÓíQ á°Š­…©iN —U³S@°šåÄ‚¬Ÿ'~h0Wã8PàŒáƒÛ+&$· hÏ e âRŸnMñÿÿ¤à’ha©  "à* Ó3L o1 Ú$Hðÿÿ‹qìÿÿ&\´ƒ ìxôóEûaâQþ# £  0 ŠåäŠÄ„ *yúh C šå5’¬P!Z¬%à’ðVp! ˆrˆrG‡M&ˆrä/ ||/=| „!\°ð©÷ߢ À€å0€å°´rà©œ { ++è+ Ø (lR,@ ,ŒïW/ýÀ .Éþ Âþ`sâow@X &çiæ%D1k˜ÚfH 6L(ULvLoÖyXãd([­LVÕq'.u­'q!ž „¿ [M„!ù„,/9„H‚£%•\¥ÝžÓ£ ‚ÊääÞäAaLbpHÜà† TäH8‚n 1:p"!Š"q(H7„0ÄÂæcÈÉYBnÂ+@ Ò{T âlÒ{ôJr8BÐ  ++ +;*dvc½¾80«Ú‹ ]3@‚k.‚å Ý- ƒ 0ï       b €å‚ †ð Á0 ‡L/’  TÑ ÜŒd /ñ„ŠXd¯Vzb_˜Btb ++Rú¦bD"atahÄ 0¦WB©@ ++q ¾€¦W|UDjLA–1“†0€’³Tò¥< yK¶¥U ØHMHD/0ŽØ'Øt7 ++T)=|É|1àžè ô¾žn¦@Sàžå ’ÙWãá– ¼\\˜+a\¦Ôl;^ãcmKX&PX131 0ŠÛ ŒR|16T>¶& @øTZŒ;8LId| × ++§ ++@ ±U ›/UI5 bÔ ýÔ¡ áàšåN1 áàƒâàÎçrˆP•à*É ƒá¹¥Ž„àÈÉ„ ++ §yN.ãþÂd<¢¾Z‡o <.HºÇ/vÑCE >° ÈZRÐd  \"ÂÈ™µ” ˜ "3haÐÊØàO`"—$ ç+_Ø ++$3"ü59T›_L@ŠåP<ÅP;oP JâH<;á<D<2¨<@Àá™å<àŠå$á™å8Ä_á™å4àTKÃqT0Kã­<,<Kóé<(<!ûÀÆ<™ /$@Kÿe@$\¢!™£¯ø0™å Àšå°‚C:LDVb=L`Š([,:H(H([:D(D(È @(@([ÿ:<(<([ð:8(8([á:4(4([Ò:0(0([Ã:,( ([´:(((¥i3‡(‡$—îƒä_‰6«i' $Ú6*m˜X.0$_%ˆ$À$Q™N3°„(„ïH ++y ;s§Áñ @‹å À‹å0‹å ‹å‹å‹åp‹g21#à‹€@'à‹å´@+à‹åä@/à‹å@3à‹åD@7à‹åt@;à‹å¤@?à‹åÔ@Cà‹å=Gà‹Ç ƒ2{ “‚,Ì+ ‚¯)Ì"°RèVàƒi¶Ce¨šŒ~p(abPaTE6'Ãj .úþëÜÍO¾þÿê°¢ *Å\o¦þÿêVŠx<¸3zB-#UÆäÞææé#–ÞàèÒÚÒôÂèR¹s |$HH$æ5~.™Ÿ|#”¸àÐp€,Æà`ßEqÊäZêÜäÞÙ6ÚÒèG0‚#\æÆÞäÊ0„ 0ÊÌÌ-Ù ËHLF‚†ÈÊÄêÎúrÉ ˆBˆ "-0A¿¥`"¶Ý/§0¶'¡L<ÝL;#L¡<; á<@<Ý<<Ý8Ý4Ý/0àTKàqT,Kð­<(<Køé<$<!üÝ< <Kþa<­1,á™õ#1ðà™Œ1øà™¾Ù1ôà™ü¡OÅaA«<±0/µH 3žåøð",áhL´jüÿ!À° DeD#D©D'DíD+D.1D/d d3$7;t¥t?DéDCD.-DGDqD,|; *F4 C0Žâ 8 8288888888 ++8888.ö8D88â88 8 8Î8#8$8$8º8'8(8(8¦8+8,8,8’8/80808~8384848j8788888V8;8<8<8B8?8@8@8.8C8D8D88G8H8H8ÙGËÞʶ¢ŽzfR>*/îþÚÆ/²þ=a* ˜ ++JŒ7C=ar) 6z | ~œ&€‚ „ž C † !( q Zˆ0## â S„Xj S‚Xò P€Xz #bS|Xê SzXr ¶xXúˆ ++ YG~ -s~¹(BŠ  Eò¥WA| "8| @) ++€| ë"• yí.ÜÐ1Ȭ/ÿ¸«¸«/à5+ D„ „ˆ” ÜØ .QØغØ@/ÕØØ*)T"&p‰¸xDÁbr ++pŸ%"`—22x_žåÔ|!mt<Ÿ6^ã% ++ ü­q ôOò@.%@â@e@@ÒWKa0HäCi0H‹6dš`ÅŸLùL 1g/ ´*=Ñ <;<ä DD1 à‘¤yQ½P0Žâ 0‘   ++&ú?Žçn/gt¬/Yt¬ ,/I½ $ç& x*qx°©8Ý ð Kå< §L 䣛Ñr ͼ.eͼô.¡ôa//Õĸ |a¸år@/]ì#/•ô“ô@*|äÀ,¼(?TeTOŸ hX.µÙ¾ G  ¿* œ 8)MrÜ&ààB ô/ „´"$`ÄKÜ@ ÍèC"$`àBìü„´œ. ++ td =7 . ++d4D8 &¹ ++TÆ×SdU|8° áX ++KDÄ/™ÄÄ X· E%‘H ROPáÄ1 °Šè€\NÐDD#Pä  Nq9æÜ hèn| th DE9]! ‡´]+)!°‚Ý $`ð"5Å‘@žâiýÿzàBšP ++" L€ú¤ *Õ 8 ++"`ÔK<€.Týg.ÜÎ.1æg!($ P°.±ïªÙ¡3$|- PÐ}²f$î´.°ýX &’ýÜÜ 4 *µ4L|ýÿêØ<+œ€Ø?€åD  Ä Dôáx暤 ++X¤ ¥v8 ´±8 ¤Gª´ TäG < äGÄ&Ïx° /MÖ÷|/wüÄ,<(à * ¼.ÈûÜ.Áû„BÊÑÜe ++Š0?³s´bŠpS¹º"&Â" j"0`þ&F0ÀÜdŒújæd@ p vv@§2R´8’}àðXŠèB^j¨hN²1EAààÊÈ! "Öä ’â–C@ÅFy” ++ åj"Ì6ŠË h â±[œÍ± ²ãJU|°A ++2å„ mÍI‡×8ê¹  Ü¡xâptõtáQ´ ¥c´2¿:¸„½@Š–…6´XÞxI8š¤_zrœ ++˜lyd ÂXÂà žú”©o2 > ++Ù@)}7æé ++PkTÆ|2EžypÊË R‚(7k"Ò× ×›êÜÆàäÊàÝ Ý !:ÒpP¢X!TBH$o.wÊâZÐÂæÐvÚãµzÞ%úÁ>+¼’úyüi> ‘Õ4­Mq…Û&¢X!5Ò!5Ú5pºB²¤@¤Š‘’ Û ³âª À îÐÂÆÖBØ–uûIŠŠx§e§˜œuû¯ZB¨ K|/múK|ï„m ++„mhÉùÅ!ðˆm 0Ï{1SãÀÏ{1Sã¾Ï{1Sã¼mZ3SãºÂhqn ++`^ÖI€n‡LÝ+Q wmÉ7ÝPY ±"IéP ++`…`s/Å|Y@ …YÐ%/-ÐS/•Ð#A¿|IAªhHªh&lÔ›8IA®h<9ˆ¶I)x(,/½(}Ç|p/-pê\0‰\ +} ‘4râRØ‚¦¡zBA%{?²qªq1rqwDwDo â+åÇË!“š 8²ÜCUÖnqU‹DЋç“ôô Jâ¦pR¦¦ D¦vo¼J¨$Hp>A¢¨M>¬“><8 z%% B%¶° "¨x š&0,&’Qàz1¦HM r0 *HöºPª8%k º>°bÉÿê ¬þ ºJã{>bÉ58—åRÈä<ãF·¸-šBPåDNÈ'ê:È yq/pã{:ÈHÈQŠ¬ ®Èš&®oÈ9VYÒ¬xPpCÈ#°E HÈ!'²@ t²X)R ´0 ;0 #0 I$0 %?0 :p /ýp Ê¢ p 4¦8~Y#¬¯ ´v +Ÿ<8Éà ŠK¥/º$ÿë¶$ÿŠ¶$¸$›¸$ ¶$º$ï]/Mx$ 1"ÖShB, RÎ& ++0ø/ ++ % ++/ ++(PL8;‚\»¼äÒ^™^‘aP"è ´K12Ù }ê5B)¶!vG ɼR¼8(âEAãH¦"U—å žu}<.I}}'ÿ–/•µ*ò&±¶x ·{¥íc"l´œ ‘| .eœofh«V$Š w @Fj´Ó¼áS¾Xª TÀhFZõŽaBñ_cA… "9á` @ÞÜ@ØÒÜÊ@@^ òA(¾êP5HPmM¼1H*pÑý‚BZèÞZèYb$ ++ ;b8Gb 0ïû!XgAN ++8Û.0Ò§YE*Š˜?aP!@V¢Âò ¬éF1 ¨FµÄêÌÌÊäZæÒôÊzá p ++"ÎÊèÁd’ìÊÆèÞäZÜB%€cø8 jÄxBÎ h¨*®ý¬î®(¢ÑbÐ: `þ€0Žå 0 ã S0Žå&*êíÓ(/9Ó¸Ø TPG£œLŽ¦&äÑÓ tžl7—ÓY .qzl>®'>B2Ú# `h*ÑŒ¥Œ@kÐ"ûÒn"è/qn"(kУ…êK_ @žå}à )Ž"*´h.üþ\FîvÕÒ˜UÓ /ÆŽü8WÓ/ÆWÓ'ê ÈùÏzä{ÊÈ]€Ê£QOÌ HR«™úHRB<ùBYRÌ— ZÑ\ úÎZÑÊ@ÊYRÎYpŪ@Û ö ׂ1b7¸ HÎêÂäÈ ++0_gÄ ++&ÄÊ?ùNÒб ++VSúЪ^'rU#ÐYxbr ++ ;V ++(k@ºÑ ¿iÒ:”ÒOúÔ”ÒgòÔ ++ ½X”Òa"ÖÒ38 :ÅNäçƒ@2caØÞÂÈÊÈNc8Jc^òÚÄÞØ  ¯O(Qf¯ƒë\bج«OÚH)jÜ)j,x  ú– (*jUi×éQ…2j¹·"àíd 4à- *©¬)"àíd" Þ 2j 2jÞ#Ú÷$f jjÜ86Þ ‚^ ì -À Kk1!0ò¸ Ô fLÔËckò¸"0wk/ *Ñó"0wk ³à ©wk1xÈwk‰à  &wkGÓ#puk%°šª ++ת ++À~WŸ!³J%à—i&¯qk.¢qk“Rü![7! k`!j/@,CpçÑ°|t5k*8.S# pïÑ°tt„ajSjOj@jZ¼ÐiòÙJ ¸Ð1¾ é®å»0€å °€åjìB Ð1¹Ð1èÍi(7 m`©¼+u}¨ X)p"ÿÿê2ÒIO°ê®i Xà®i˜®i â®i†⪠Yè WU×M<™ Y92ÍÑ!Ñ©]©] ©]–irgg— Ø ÇC.U|³P¬–iäÎ €ä–iOæ  Î . b‡ :„zBl@¢æ€ ++`€ ++OÊè€ ++IÂè€ ++8€ ++B(êR€ ++0€ ++0€ ++ và ++8üþg Lºì† ++îx h ð7·/"Hi $Š ++ † ++‚ ++Æ.hÜ5 5 àVÇjyz ++¬tîz ++à°LRðò†˜ÜÈ5ÜÂèÅ„ ækÌ? Ø &!Ô!pcDz– ++¨Vhtƒå ƒå£ •£ ‘ƒ 0Sã7F ƒ *ƒ ƒ ¥§R)±à/1ËØÃ! šÇ:Ö O ¼­(Œ ++&ž”WdÅ7k `{8½)Õ5à áü@sfªÐ&pÀøïl÷;Š*„þéß ªÐÔ07  àQÚ Iˆæ‘O šå9ê2á6á¯Pò Z 8 zôx ++ö‡âE˜8‡âå†ú ðør˜? 8˜ 8&€9ú—FpüðƦ§3 à‘ó,ž§Ó™*’³þN¨ô   x ÒÜZØÞÞàlŽ8pĽ¯y3RãdÕ•/púŽ#òàgêµ#\hvd  G#0¡@uw— ++ª#— ++ — ++ — ++p /0t éuw+ ++*°q™# ¤ ÐÎÚ/%Å ÔΔ#R  ,,&°( ¿ cp€å0`i¬ ŸæT@--± )±<`[6.²x÷p¬8× þ× †þ³ _  % 4@#×  …wß áß Öïžß .]| %ß / ß ' ,Y ±y»±¼2²%f_£ ++OÌP ©ÌPÄ-¸¹1·õ<´A;h?/9€#4u< M ++HgâþLÕ c ÷xpbà€â à1~€ìzq¨ .!¨èG­ (2!ÁE3E3oàåpžÀw ++.‘~$v¯¿¤D ´ÕD ²rü/Y¹#U8ÜDl© " Ty\Œ\!0ž½ŸdlAHmˆl71)š}ô,lhOŒD €l¸EèTØD YLt$ ¸+™¸0àšåAóx ÑxºìI$-$ˆ$$˜$$a }LØ/šP ÍPÄU6é .lck9\m @™J\má6.‘.éþPÃPI/±þƒ©ñ`NHG"d³F ‰‰,oB.:«084|Ï#ãu° Z ¨B Aï˜$ Θ&ÓÉMèž:gnó0šå0“åàÞç! á6Rã_3NŽ—Ã`%.•¶t B'0“9”¦—¦ˆ¶'8 †!µË vp @ÂqJ *qê«–Òn8J .Å0†p¡3 ³ÀŽ ++ýŸÐAO  á~Ô{eâv2$€ú¨X†hixdú  ++né9#  2 ùZ×î : :½PB 8  ¤0  LÅx RE z è ++¦)"ÊLP"XJX‘: ºh/ 3 "È&²4w"  ++˜æª- ++ v* ú ¬#2OÚ 2KÒ à/²"6òH%P ð €ói  ð û Gò ã<Â)¡ ++*ÃH (3$@hgj ^*¾/™9àž ‹„õ=u“ñ5Û/àÌ3 æä%3“å à TP­PF½ ++ÄDÄ– -“`HA3t.!tä ÜTP"+ø0™= žäRóçF7S å Pe" 4OpžåI/àÎ ì. ì&/àìkÁ @¢œ58däI ñ¨216:š°v8M0H4M&l(A H r  & Z¢ ú ˜B Òºäº2‘ ª0 % `«#äÊsP@ÒÜÌÞvàAæèÂäD‹òüæX@ÌÞêÜÈ@üÂ(0w² FÚÒææÒÜÎ@÷«EÈï×(1 ++hÖåØ jÀ0 !(qV Ø( ++0Kfªô ++0tÆC ­àwÕ‰  #0 4øB"Kb ++ R`@ì ++&_ò Õ®z*¾¹G ¥(&šx˜ö#‰Âbz@x& zDÿf€àà.mš}<\ <<<Q,‹àžå ++ãƒ^[*]U` ++` _'V H28DPŽ Ø,ØØ*5Ø ª ×kÉ   Ì<V(»-0š¨&Op”‰,/E"`Jb *$†Þ[*•Þ[Î5iˆ†[$[¼áL\(P ,àG“š¢q14@ŠM®¾q²/ Š] [A&bü bzbg³±p  ÈP㶫GaRã´ÿÿ¬_²ÿÿê RÈ. ¾^nwä3 4T4 4 4 4 4 –Z åªbhŽHaþÿêUÿ [Ü9 ++b#¢ q šåFþÿê7«–Š,ì/>Š,7"Ÿ–-nSŠåÚ,JZtšš Ì@#þ5°sç8šÊ*oç'ÿýþìZP ÆË!ë\ðTãêýÿ ++Tãìýÿ ++TãîýÞÝTãòýÿ ++Tãôýÿ=L0zº.+Á ( &Š³œ;qÊÈZîÂäÜû:@ ++X Ø+1 ºž@ ÈB ¢0H. vR Z~ê~ÊY"  ¡ˆBÂ8š90 2!F` ¶lh  H¼ rÄÒÜÂäò@®;@jb@Þä@FÌÍ'1(*(JèÊðèêÂØ{¬$P‚Þu‚@u‚5 |* ' A RA ?A *)A *A ûA âA “"¿1ÕA .¼<("²ãñqFúþo!c¤:°sè ï«–÷"0c@Ò0šå„€€&¢ÿ«^"0AXC"Ù*IÙ"0MàoÔ!àí _ž*“é é 0à“­,ž“å æ3 Æ3¬­[|õ¬ ++¨ Rã!Ì°(_öœ½—#Wã#g3,/ —½ ++"ì)ÔÔS2Ì"xsôÌÄÑ ÜÑ ÑÑ ÀÑ ­Ù ++V[ã!àŸ›¼/ ›"‘ Á  Og"@ÈÚ­<ës+f "p…É<žÜ»³ É a+ mV&” #H—G/0Ô‚8ø‚ P*R” ,UJ gm MJNÃß P.5bÃ?@“èßã Á3#OîCª²7  žå ·´+ ,5d ƒ£g ++.UþGÅ „! ÅÍ  €+p$5 /-5  5 /y5 /ðý5 /Å5 /Ùý5 / 5 Â5 /Y 5 ®5 ­5 ¯5 ±5 µ5 ·5 „5 &š bÀ (@ B *+ ¸0 šÐ8+ ¢f˜ v"#÷àäÞÎäÂÚ ²Nt ” "…AÆÞØØGF$¬c¦«N.Fe=Qj{3 ÊNòÊN( .sfÿT¡ ,$HäÊâêÒ †1ð! ,zf, .zf( .ET2È ++}¾$iÈpB 0 "Å<ÈÞZÿ –:^:qM ++à—^ ++198ÌS î…Pa—­“10—™@2 0—î@`Šå%eƒ0àŠåI˜ñ/* õ/n É^é/¬Ï?—[g ++ ++S2Ü9µ9,‘<¢ž›)'!²¨  ² ÈÞÚ‘MŠ4(6º  ‰º ƒâ(€ \€°² Û6 ++¯"¸wPª 0±3 ++0×% $õÏ8S: 0S!:ÇG 2 ”ÆX‚ *_!¼D ûÅ/ ((Å(Å (Ŭ$Å5Å+.+aàäÞàÊ䵨*(.R$h½MG * ++@ÊS!r *²'# ++ ¢ %: 0 %Ê Ê84¯”Ç\õ)P $^E òÄ: ˆ&δH¯×/ VE› hÔ:REû XÞÿÿêœ œíÏ"0“ ù£8. 0¨¤; ++`   œÙ?& 6L ;#,Ó9A(_ò|4áß`jvic -dxR3 ++à O·ʹÁ­&÷,š 4(B 8 8 ˜Ð €Ñ"<yû™&êd"Ü<™Øœ&É-$Ä$øµ- šG¨¤4º«*Õð "0\± 4ˆY[±Oûy_¼Wøw‰¹O¹OB*$`åT«¸]OüúÔ ¸¬ |He;‚ H üEç 7ü  ì¬Ø«u`€K0íOç %0€è [½] ã Ò´q#v °d ,),P DëH .<€þþÿê<*íh8 j(=tZÚÊææÂÎ*UR¨  % ++XP0 @ŒV+èÞ Ñ  6ÆÞÜÈ^ñÂØ^Âè ÆÎÞæ`ÆrêÌÒbäâZÌÜ raž r;31Ùq5d r5f r±ÆÞÜæÊâêÊÜèûqS 6crÿ üº "@PÐÞæè³€ ¥, L ),3Q! 6tVÌ p,üÂõ]üÂü€¶XPüÂRüº¯áoQv2 88Î+_B :£„' :Ó+Y@ õV&†ï9~ˆ@m ++ô®³Ežsü  ¦L"p‹ËD8(Ó+ D¾ F(£ LHË¢(ïN 7 õ%@6ƒã©W””™”ܘ!žNÜÙ1"ô³…Ä 0€å0å@žçØ #” Tᬠ8Õ8 !8§8¶8  8Þo"/Å%L  ãPiP5aO< kN@ ‘œ6jà³|T»-ë7"pUF*ã/ù@ »¤`ô´•%´.MT«<"àDDFJ ÿ°ßHȽ&pNP@{5/½hDÇ/pHÜ/7 l" @¡2m ÏM ¤¤/a¤ŒH¬ ¥DÙð!õPs7€@”/9”;D}DDÁDý؇"Ðþ\X ¤.X‚a%.{þ^eD¢ <¿3&vb#> ÐP#"¼bv ++ @P…#¬HB X ðˆó " Ò:‹c/!q÷ X‹jD jDsI: †fD_·ë°×  üŸ× Ǭ>Cèg/‚>C Mà ñ ++†å †åp†å0†å†å°†å@†¦Éá ’´æK ++Öº´°¯,¿ ++ /Ý$„ˆÊ;!ŠVC QC_hB BQC…# Bb PPB V^ [~]QCU»DQC:æ QC ùËQCÖº fiCù+iCп0.u|Ã9¤iCDy7€DiChT  €¡‰¡xí?—m¹=À—&ch:0zLq¹TÀ†å0†LÆ"â ++Ö#? ã‘zÀNËï9W?9WRiºÕI!QCÈw5W@W< 9W 5Wí5Wº«î¤‘.9iwi€*B J3½¨?¼0€XâÀ% Vã­‘n#‚#³‚#³‚#³3‚å(½R‚å—å0½m=Zx/ÙZxÊ¸É ++‚B H Ø(½4?ñ ñ‚o/¾ñ<ñ<áñ)¾ FHÝÎgÎ!Á¶*Ѧ*Á?Ñ5D­U A³/ „)¾' ¾ ++gš "HTBJ F5'˜T`rGÚ HèlÊ J8iY›LA†LýRžpЧSAKA:A0Êøe AÑMøe)É/M… P®N€NP¿àq5 JÜÍ) Pe_º R+Ag² R ++ U;0+A(;n÷CŠ Ti i_ ++ ViY Vipi°SÒ X°`ˆ|E @X]q!€ ÚcPB<8ò rGª— \'uƤ øs#øs 6¤< 8 ûÓg.hD( ]H,3>r:l bPPPðËÓ…/¹Ó‹/YÓ3/¡Ó¾^ `âd) 8ÇÎ$tÿó1 f8(üæ¢2SZ b§0~° dÀB ^…ËB d0d6 b?`?[dç hÙ6? fÒ Òw ôT h-À’A,+ ¿"C, g;,/ ;,' ++gš 4wSš# à…lC šåà;,";, ³„'+/0'+/ à"60– ˜”£oJX9o*o&o©3,3,%\“X.u“¶¯+,AŠ h+,ÙÑ0 œÝ ºœÝH8ê6i*'I&UI,¹K$ÉK$ÿ;Q4,°ÝBßp,ø%|Ü ++Ð6 ++±€/%"Ä+<À+iDˆ­DˆñD׫/w׫ :l„]a ü>@ü> ‰  ÃÍ…°,°,°, °,"0Ä,Â/0LÀæ“ L”-/“®Û }™ ø+O´6ü>Ï£ç\ * ~¬Ý5J ++,),‰K_¢ä*äÊ-\CL:þj#-ΡRb lΡ ê  -+%r+ ú €,_ˆB n,…n,Y  b“,‹)Az ++#",že ¦"@Ý?‚ –¹ø~FL , L,5, ,,””™”A++A+Vàžç0,QELx8/á8!8j8MÁ ++0 0g ++"/Y‹ ++¹ìkJìk˜g" ".Í4)E(QÇ13G%G%G%#;" 0QÇtõ  ++hLh ++íp´Z +9Y¹J9,„òtPªAÊp·& p€ plmá\%™²0ðY /ar(-H©HHñH/ïþ9,/ÃþbØu}.nþ’J9,1€Â!Â!3,pÂ!†p¦h€ 0§_Â!WFÂ!)C{þÝ-°#f '– 4åtp$”„ hl8 *©G *Q#*Û?69/@ œÚÚ ë6Ø2XT Ú1ãó6XT°°7×/•¸ çíX Y¼0/Q¼#/\ ¼ï\7Qâ¬/ Ç™,æý Œ|/i¼ à µL„Îþÿê„ ãPI- /Lb¸ŒHIH”‘HvÙHO[þÿêD/DAê :– DL‚:¶P tP ++¤8ˆ½)x’.<ˆ*sz  â®wK;P$.<ç 4ç @¨sÕ(ü§] ¸Ø ++Þ_„å0„ŸK'óÿÀQÉn+é?Y#¹ÌyA´‚ë9¸ xÌè œ*Y:x@P*þÆnzÖ &v9pž&g©m$  ‡ƒI D9äË÷ÿÿê&Pãp/ðšA­é¯¯_à„å ¯ `5 ++e>`nz©Ÿ0êš$ ++hhÎ|›8v ++0µ-Hâ xà ´hvê z ++0S-v Ò tpA- BxB 8ò  º €r tP ¤QØ ÎÊ©i$ÈÊí,æÇi„ÆÐÂäÂÆèÊ-èÞÞ@ØÂäÎʲ@ÆÞàò ÖLU8 TêÜMj@ÊÞÌ@Í ++]1ÞÜ@6!‹ ê¥`Ý-`° X ª (: Ê !wR t ++(8¸æ2Cú |°æ2¤!Cê ~/°/O €/I €‰!˜//( Œ/ ‚u†‚)Žu~#x; uæ„u€„LŠ† ¨ VWLFL5­¼ý!) ™8ÈÈÈÈ#È ¾öá{ïĺ³}1¢=3Ɔ#Œ¶9;/ á÷¶9kZŠ ÕHß÷?zãsg:ÑUm !2 —„M“}%/‘I 8%%%/ A”/ÚÿÕ ÁV= D1¢È È 4 ˆÕIR Še:Œ `ñ) †Q…Ž…Žõ5—6SPBdXo ( ++0L6I² Wˆ‹ ’Ÿ Cy!µ  ++ÆÐÚÞÈrç R' b6_ C Šòb6cB ’`Â!hÀ01lHTr ’¥* z)@)ª*hé0O ’é06 ˜Bhð :*ž\ù,@ ;*& G·‘ m‘ & ^1Aá^1h/]^1“/^1'p&bB œC±/ S&pbwbb¢“fWc’—'I“f‹é9ûè3‹P‹è šÌç'°l>|©ÐH“fÔ--—f (9 ËJ—f «èÞgTÎÓèÀ(°á ++RpÊ/ñÊpʉ`‚zõ"ê™b? ”†b…–†bÿSgb rb–rb9– ++Æa š K± &` ¬®ÃPÇn ++—lDZ^| ‰¶NãrÄA‚ ˜2³™U* š´™ð_X¢ œ²/ ++(ÄŤG œ ++0Edò žPÀ25œHß žä2â$0$:˜:_ " ž:ž¢$ÚÂòÄÊZ¸^ 79/( $ pdZKTã^lCLl5l1l/‰l[1O0“åW1²ë·6Sˆ¼X.¼CLŒ• S@1-œ¡]¡]½  Š[4daœ·½0ýk-€ ++0d ++b> ×K­~r¦ÿÿê6ꯀ:  @ ++Â<@( ¢KvN¤&HMvX  Ð¢´6I  ÐÈi¿0 ¤X Ú  N ®] ® bk ];´'\W|¼  $Q"ï#Ê}Wþµé/"ß5›ïY¬O“©^À ]¬æ<·R|§¦£˜W ++¢|/’¢|Œa›ýo‡{„ô{þzwu¢K0 ãËlÒ¤°n~Ҥ瓒¦ Ù&F{UF{G³F{7F{©4F{jý/pB{#/­B{àíÐ&i²É <+$A†^¦U4›Ë) Ès/!s(/ûþîx/}%"åþîx.äþÎxF@ ++Éx ¸x ˜ v˜B ¶©tˆ ÎÞ¢Y°" 0 ++Gx  º= `Š]¥ ó /äÿRb.ÍRb°2z°t: ².#§t}a´“4X ++ Â5o² ¶˜Ž¸ÿg¸¸O'ºzm6 ¶YwnÈÌX r ¼i $ ++(·w´|v!´ ++ ´pv 3“ Z®0ív ¼8ˆ/¬K*£J 'z ++ ++B(chezI>()$>,Pû3äÊÆÞÚàÒØÊZÒÜÌÞ0ÌÜêðìÖêìæpð`ðÄÆlpÐfÐÚlZbP ‚9ó, ++ÌØÈÒÚàÞäèZäÊâT æÆÐÊÚÊZÞÄÔÊÆè ++ ++ÒÜÆØêÈÊ'ð L L L$* #ð,hñ!B    L$à™åZá+*€Xâ ++àŸåꆞ堊â`ðp–åàâàŠå@ ã ð–rmH JâH¦0 ã0Žå0± 0Žå>@ ãðšd T&À$@ÿ/áÉ\HÕÿÿêLó 3ÿ/áÎÿÿêj ++ÆÞÚàÒØÊ(ÆêääÊÜèZÊìÂØXò(H!ðäZÒæZØÞÂÈÊÈ~(B0HB`8ª ++B( +\ No newline at end of file +diff --git a/boot/arm32le/scheme.h b/boot/arm32le/scheme.h +new file mode 100644 +index 0000000..afd3c28 +--- /dev/null ++++ b/boot/arm32le/scheme.h +@@ -0,0 +1,261 @@ ++/* scheme.h for Chez Scheme Version 9.5.4 (arm32le) */ ++ ++/* Do not edit this file. It is automatically generated and */ ++/* specifically tailored to the version of Chez Scheme named */ ++/* above. Always be certain that you have the correct scheme.h */ ++/* for the version of Chez Scheme you are using. */ ++ ++/* Warning: Some macros may evaluate arguments more than once. */ ++ ++/* Enable function prototypes by default. */ ++#ifndef PROTO ++#define PROTO(x) x ++#endif ++ ++/* Specify declaration of exports. */ ++#ifdef _WIN32 ++# if __cplusplus ++# ifdef SCHEME_IMPORT ++# define EXPORT extern "C" __declspec (dllimport) ++# elif SCHEME_STATIC ++# define EXPORT extern "C" ++# else ++# define EXPORT extern "C" __declspec (dllexport) ++# endif ++# else ++# ifdef SCHEME_IMPORT ++# define EXPORT extern __declspec (dllimport) ++# elif SCHEME_STATIC ++# define EXPORT extern ++# else ++# define EXPORT extern __declspec (dllexport) ++# endif ++# endif ++#else ++# if __cplusplus ++# define EXPORT extern "C" ++# else ++# define EXPORT extern ++# endif ++#endif ++ ++/* Chez Scheme Version and machine type */ ++#define VERSION "9.5.4" ++#define MACHINE_TYPE "arm32le" ++ ++/* All Scheme objects are of type ptr. Type iptr and */ ++/* uptr are signed and unsigned ints of the same size */ ++/* as a ptr */ ++typedef void * ptr; ++typedef int iptr; ++typedef unsigned int uptr; ++ ++/* String elements are 32-bit tagged char objects */ ++typedef unsigned int string_char; ++ ++/* Bytevector elements are 8-bit unsigned "octets" */ ++typedef unsigned char octet; ++ ++/* Type predicates */ ++#define Sfixnump(x) (((uptr)(x)&0x3)==0x0) ++#define Scharp(x) (((uptr)(x)&0xFF)==0x16) ++#define Snullp(x) ((uptr)(x)==0x26) ++#define Seof_objectp(x) ((uptr)(x)==0x36) ++#define Sbwp_objectp(x) ((uptr)(x)==0x4E) ++#define Sbooleanp(x) (((uptr)(x)&0xF7)==0x6) ++#define Spairp(x) (((uptr)(x)&0x7)==0x1) ++#define Ssymbolp(x) (((uptr)(x)&0x7)==0x3) ++#define Sprocedurep(x) (((uptr)(x)&0x7)==0x5) ++#define Sflonump(x) (((uptr)(x)&0x7)==0x2) ++#define Svectorp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x3)==0x0)) ++#define Sfxvectorp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x3)) ++#define Sbytevectorp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x3)==0x1)) ++#define Sstringp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x2)) ++#define Sbignump(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x1F)==0x6)) ++#define Sboxp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7F)==0xE)) ++#define Sinexactnump(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ ((uptr)((*((ptr *)((uptr)(x)+1))))==0x36)) ++#define Sexactnump(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ ((uptr)((*((ptr *)((uptr)(x)+1))))==0x56)) ++#define Sratnump(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ ((uptr)((*((ptr *)((uptr)(x)+1))))==0x16)) ++#define Sinputportp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x1FF)==0x11E)) ++#define Soutputportp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x2FF)==0x21E)) ++#define Srecordp(x) ((((uptr)(x)&0x7)==0x7) &&\ ++ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x7)) ++ ++/* Accessors */ ++#define Sfixnum_value(x) ((iptr)(x)/4) ++#define Schar_value(x) ((string_char)((uptr)(x)>>8)) ++#define Sboolean_value(x) ((x) != Sfalse) ++#define Scar(x) (*((ptr *)((uptr)(x)+7))) ++#define Scdr(x) (*((ptr *)((uptr)(x)+11))) ++#define Sflonum_value(x) (*((double *)((uptr)(x)+6))) ++#define Svector_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>3)) ++#define Svector_ref(x,i) (((ptr *)((uptr)(x)+5))[i]) ++#define Sfxvector_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>4)) ++#define Sfxvector_ref(x,i) (((ptr *)((uptr)(x)+5))[i]) ++#define Sbytevector_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>3)) ++#define Sbytevector_u8_ref(x,i) (((octet *)((uptr)(x)+9))[i]) ++/* Warning: Sbytevector_data(x) returns a pointer into x. */ ++#define Sbytevector_data(x) &Sbytevector_u8_ref(x,0) ++#define Sstring_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>4)) ++#define Sstring_ref(x,i) Schar_value(((string_char *)((uptr)(x)+5))[i]) ++#define Sunbox(x) (*((ptr *)((uptr)(x)+5))) ++EXPORT iptr Sinteger_value PROTO((ptr)); ++#define Sunsigned_value(x) (uptr)Sinteger_value(x) ++EXPORT int Sinteger32_value PROTO((ptr)); ++#define Sunsigned32_value(x) (unsigned int)Sinteger32_value(x) ++EXPORT long long Sinteger64_value PROTO((ptr)); ++#define Sunsigned64_value(x) (unsigned long long)Sinteger64_value(x) ++ ++/* Mutators */ ++EXPORT void Sset_box PROTO((ptr, ptr)); ++EXPORT void Sset_car PROTO((ptr, ptr)); ++EXPORT void Sset_cdr PROTO((ptr, ptr)); ++#define Sstring_set(x,i,c) ((void)((((string_char *)((uptr)(x)+5))[i]) = (string_char)(uptr)Schar(c))) ++#define Sfxvector_set(x,i,n) ((void)(Sfxvector_ref(x,i) = (n))) ++#define Sbytevector_u8_set(x,i,n) ((void)(Sbytevector_u8_ref(x,i) = (n))) ++EXPORT void Svector_set PROTO((ptr, iptr, ptr)); ++ ++/* Constructors */ ++#define Sfixnum(x) ((ptr)(uptr)((x)*4)) ++#define Schar(x) ((ptr)(uptr)((x)<<8|0x16)) ++#define Snil ((ptr)0x26) ++#define Strue ((ptr)0xE) ++#define Sfalse ((ptr)0x6) ++#define Sboolean(x) ((x)?Strue:Sfalse) ++#define Sbwp_object ((ptr)0x4E) ++#define Seof_object ((ptr)0x36) ++#define Svoid ((ptr)0x3E) ++EXPORT ptr Scons PROTO((ptr, ptr)); ++EXPORT ptr Sstring_to_symbol PROTO((const char *)); ++EXPORT ptr Ssymbol_to_string PROTO((ptr)); ++EXPORT ptr Sflonum PROTO((double)); ++EXPORT ptr Smake_vector PROTO((iptr, ptr)); ++EXPORT ptr Smake_fxvector PROTO((iptr, ptr)); ++EXPORT ptr Smake_bytevector PROTO((iptr, int)); ++EXPORT ptr Smake_string PROTO((iptr, int)); ++EXPORT ptr Smake_uninitialized_string PROTO((iptr)); ++EXPORT ptr Sstring PROTO((const char *)); ++EXPORT ptr Sstring_of_length PROTO((const char *, iptr)); ++EXPORT ptr Sstring_utf8 PROTO((const char*, iptr)); ++EXPORT ptr Sbox PROTO((ptr)); ++EXPORT ptr Sinteger PROTO((iptr)); ++EXPORT ptr Sunsigned PROTO((uptr)); ++EXPORT ptr Sinteger32 PROTO((int)); ++EXPORT ptr Sunsigned32 PROTO((unsigned int)); ++EXPORT ptr Sinteger64 PROTO((long long)); ++EXPORT ptr Sunsigned64 PROTO((unsigned long long)); ++ ++/* Miscellaneous */ ++EXPORT ptr Stop_level_value PROTO((ptr)); ++EXPORT void Sset_top_level_value PROTO((ptr, ptr)); ++EXPORT void Slock_object PROTO((ptr)); ++EXPORT void Sunlock_object PROTO((ptr)); ++EXPORT int Slocked_objectp PROTO((ptr)); ++EXPORT void Sforeign_symbol PROTO((const char *, void *)); ++EXPORT void Sregister_symbol PROTO((const char *, void *)); ++ ++/* Support for calls into Scheme */ ++EXPORT ptr Scall0 PROTO((ptr)); ++EXPORT ptr Scall1 PROTO((ptr, ptr)); ++EXPORT ptr Scall2 PROTO((ptr, ptr, ptr)); ++EXPORT ptr Scall3 PROTO((ptr, ptr, ptr, ptr)); ++EXPORT void Sinitframe PROTO((iptr)); ++EXPORT void Sput_arg PROTO((iptr, ptr)); ++EXPORT ptr Scall PROTO((ptr, iptr)); ++/* Warning: Sforeign_callable_entry_point(x) returns a pointer into x. */ ++#define Sforeign_callable_entry_point(x) ((void (*) PROTO((void)))((uptr)(x)+33)) ++#define Sforeign_callable_code_object(x) ((ptr)((uptr)(x)-33)) ++ ++/* Customization support. */ ++EXPORT const char * Skernel_version PROTO((void)); ++EXPORT void Sretain_static_relocation PROTO((void)); ++EXPORT void Sset_verbose PROTO((int)); ++EXPORT void Sscheme_init PROTO((void (*)(void))); ++EXPORT void Sregister_boot_file PROTO((const char *)); ++EXPORT void Sregister_boot_file_fd PROTO((const char *, int fd)); ++EXPORT void Sregister_heap_file PROTO((const char *)); ++EXPORT void Scompact_heap PROTO((void)); ++EXPORT void Ssave_heap PROTO((const char *, int)); ++EXPORT void Sbuild_heap PROTO((const char *, void (*)(void))); ++EXPORT void Senable_expeditor PROTO((const char *)); ++EXPORT int Sscheme_start PROTO((int, const char *[])); ++EXPORT int Sscheme_script PROTO((const char *, int, const char *[])); ++EXPORT int Sscheme_program PROTO((const char *, int, const char *[])); ++EXPORT void Sscheme_deinit PROTO((void)); ++ ++/* Features. */ ++#define FEATURE_ICONV ++#define FEATURE_EXPEDITOR ++ ++/* Locking macros. */ ++#define INITLOCK(addr) \ ++ __asm__ __volatile__ ("mov r12, #0\n\t"\ ++ "str r12, [%0, #0]\n\t"\ ++ : \ ++ : "r" (addr)\ ++ :"memory", "r12") ++ ++#define SPINLOCK(addr) \ ++ __asm__ __volatile__ ("0:\n\t"\ ++ "ldrex r12, [%0, #0]\n\t"\ ++ "cmp r12, #0\n\t"\ ++ "bne 1f\n\t"\ ++ "mov r12, #1\n\t"\ ++ "strex r11, r12, [%0]\n\t"\ ++ "cmp r11, #0\n\t"\ ++ "beq 2f\n\t"\ ++ "1:\n\t"\ ++ "ldr r12, [%0, #0]\n\t"\ ++ "cmp r12, #0\n\t"\ ++ "beq 0b\n\t"\ ++ "b 1b\n\t"\ ++ "2:\n\t"\ ++ : \ ++ : "r" (addr)\ ++ : "cc", "memory", "r12", "r11") ++ ++#define UNLOCK(addr) \ ++ __asm__ __volatile__ ("mov r12, #0\n\t"\ ++ "str r12, [%0, #0]\n\t"\ ++ : \ ++ : "r" (addr)\ ++ :"memory", "r12") ++ ++#define LOCKED_INCR(addr, ret) \ ++ __asm__ __volatile__ ("mov %0, #0\n\t"\ ++ "0:\n\t"\ ++ "ldrex r12, [%1, #0]\n\t"\ ++ "add r12, r12, #1\n\t"\ ++ "strex r11, r12, [%1]\n\t"\ ++ "cmp r11, #0\n\t"\ ++ "bne 0b\n\t"\ ++ "cmp r12, #0\n\t"\ ++ "moveq %0, #1\n\t"\ ++ : "=&r" (ret)\ ++ : "r" (addr)\ ++ : "cc", "memory", "r12", "r11") ++ ++#define LOCKED_DECR(addr, ret) \ ++ __asm__ __volatile__ ("mov %0, #0\n\t"\ ++ "0:\n\t"\ ++ "ldrex r12, [%1, #0]\n\t"\ ++ "sub r12, r12, #1\n\t"\ ++ "strex r11, r12, [%1]\n\t"\ ++ "cmp r11, #0\n\t"\ ++ "bne 0b\n\t"\ ++ "cmp r12, #0\n\t"\ ++ "moveq %0, #1\n\t"\ ++ : "=&r" (ret)\ ++ : "r" (addr)\ ++ : "cc", "memory", "r12", "r11") diff -Nru chezscheme-9.5+dfsg/debian/patches/0007-build-with-marm-on-armhf.patch chezscheme-9.5.4+dfsg/debian/patches/0007-build-with-marm-on-armhf.patch --- chezscheme-9.5+dfsg/debian/patches/0007-build-with-marm-on-armhf.patch 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0007-build-with-marm-on-armhf.patch 2020-09-07 17:08:14.000000000 +0000 @@ -0,0 +1,21 @@ +From: =?utf-8?q?G=C3=B6ran_Weinholt?= +Date: Sat, 5 Sep 2020 19:10:09 +0200 +Subject: build with -marm on armhf + +--- + c/Mf-arm32le | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/c/Mf-arm32le b/c/Mf-arm32le +index 699f49a..f5bbed1 100644 +--- a/c/Mf-arm32le ++++ b/c/Mf-arm32le +@@ -17,7 +17,7 @@ m = arm32le + Cpu = ARMV6 + + mdclib = -lm -ldl ${ncursesLib} -lrt -luuid +-C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS} ++C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 -marm ${CFLAGS} + o = o + mdsrc = arm32le.c + mdobj = arm32le.o diff -Nru chezscheme-9.5+dfsg/debian/patches/0008-Add-usr-share-r6rs-to-the-library-path.patch chezscheme-9.5.4+dfsg/debian/patches/0008-Add-usr-share-r6rs-to-the-library-path.patch --- chezscheme-9.5+dfsg/debian/patches/0008-Add-usr-share-r6rs-to-the-library-path.patch 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/0008-Add-usr-share-r6rs-to-the-library-path.patch 2020-09-07 17:08:14.000000000 +0000 @@ -0,0 +1,22 @@ +From: =?utf-8?q?G=C3=B6ran_Weinholt?= +Date: Sat, 5 Sep 2020 21:02:49 +0200 +Subject: Add /usr/share/r6rs to the library path + +--- + s/syntax.ss | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/s/syntax.ss b/s/syntax.ss +index 75aee67..ed2ac1f 100644 +--- a/s/syntax.ss ++++ b/s/syntax.ss +@@ -5653,7 +5653,8 @@ + (set-who! library-directories + (rec library-directories + ($make-thread-parameter +- '(("." . ".")) ++ '(("." . ".") ++ ("/usr/share/r6rs" . "/usr/share/r6rs")) + (lambda (x) + (cond + [(string? x) (parse-string x (library-directories) values)] diff -Nru chezscheme-9.5+dfsg/debian/patches/series chezscheme-9.5.4+dfsg/debian/patches/series --- chezscheme-9.5+dfsg/debian/patches/series 2018-05-18 20:35:50.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/patches/series 2020-09-07 17:08:14.000000000 +0000 @@ -1,6 +1,8 @@ -0001-Dynamically-link-with-the-system-s-installed-zlib.patch 0003-Support-using-the-system-s-installed-stex-and-nanopa.patch 0004-Remove-the-need-for-files-removed-in-dfsg-cleaning.patch 0002-configure-Do-not-download-dependencies.patch -0005-Fix-from-upstream-for-removed-xlocale.h.patch -0006-Double-FMTBUFSIZE-to-fix-ftbfs-with-gcc-8.patch +0005-continuation-repair-for-return-arity-error.patch +0006-make-arm32-return-address-encoding-montonic-w.r.t.-o.patch +0007-Add-arm32le-boot-files-missing-in-the-release-tarbal.patch +0007-build-with-marm-on-armhf.patch +0008-Add-usr-share-r6rs-to-the-library-path.patch diff -Nru chezscheme-9.5+dfsg/debian/README.Debian chezscheme-9.5.4+dfsg/debian/README.Debian --- chezscheme-9.5+dfsg/debian/README.Debian 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/README.Debian 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -Chez Scheme for Debian ----------------------- - -The full documentation is in the -doc package. - -Chez Scheme consists of: the executables (scheme-script, scheme, and -petite), the kernel library (kernel.o), and the boot files -(petite.boot and scheme.boot). The executable sets up the process and -instructs the kernel to load and start boot images. Chez Scheme has -good integration with C, so there are also C header files. - -Users and packagers may compile Scheme code to produce object files. -The format of these files is specific to the _compiler version_ and -machine type (e.g. ta6le = threaded Linux amd64) they were produced by -and can not be loaded by other runtimes. If Scheme programs are going -to be packaged, then previous compiler versions need to be kept around -as long as any package depends on them. This is handled by -chezschemeX.Y. - -If you are packaging a Scheme program for Debian, then remember to -change the shebang of compiled programs to "#!/usr/bin/chezschemeX.Y ---program", where X.Y is the version used to compile the package. Use -dpkg-query to find the version, so that the package is bin-NMU-able. - -Users may link with the Chez Scheme kernel library to create custom -executables. Traditionally users will statically link in the kernel. -This use case is covered by chezschemeX.Y-dev. - -Traditionally upstream has distributed four different builds from -these combinations: with/without compiler, with/without threading. The -Debian package comes with the compiler and with threading. The -exception is armel/armhf where upstream does not have a threaded -machine type for ARM. - - -- Göran Weinholt , Sun, 17 Dec 2017 19:33:40 +0100 diff -Nru chezscheme-9.5+dfsg/debian/README.source chezscheme-9.5.4+dfsg/debian/README.source --- chezscheme-9.5+dfsg/debian/README.source 2018-05-19 08:49:31.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/README.source 2020-09-05 17:56:46.000000000 +0000 @@ -18,25 +18,30 @@ * Build chezscheme again to build everything, including documentation. -Once stex and nanopass are in the archive then it is from that point -possible to build as usual. +When stex and nanopass are in the archive it is possible to build as +usual. Upstream provides an extensive test suite that can be used after patching source code in c/ or s/. The tests take many hours to run and are overkill for regular builds. They are enabled with DEB_BUILD_OPTIONS="fullcheck". -Chez Scheme can be crosscompiled to armhf: +Upstream does not distribute the arm32le boot files and therefore we +need to build them ourselves: + + ./configure --workarea=crossbuilder + make -C crossbuilder + ./workarea arm32le + make -C arm32le/s -f Mf-cross m=a6le xm=arm32le base=$PWD/crossbuilder + +Another possibility is to crosscompile the Debian initial armhf +upload, but this has turned out to not be practical: dpkg --add-architecture armhf apt update apt-get install crossbuild-essential-armhf apt-get build-dep -aarmhf chezscheme - # Or: apt-get install zlib1g-dev:armhf libx11-dev:armhf libncurses5-dev:armhf DEB_BUILD_PROFILES=cross CONFIG_SITE=/etc/dpkg-cross/cross-config.armhf \ dpkg-buildpackage -aarmhf -B -Upstream does not distribute the arm32le boot files and therefore the -initial upload of a new upstream version needs to cross-compiled. - - -- Göran Weinholt , Sat, 19 May 2018 10:49:31 +0200 + -- Göran Weinholt , Sat, 5 Sep 2020 15:41:10 +0200 diff -Nru chezscheme-9.5+dfsg/debian/rules chezscheme-9.5.4+dfsg/debian/rules --- chezscheme-9.5+dfsg/debian/rules 2018-09-30 11:16:41.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/rules 2020-09-17 19:24:49.000000000 +0000 @@ -29,15 +29,12 @@ endif # Avoid using /usr/bin/scheme to run stex -ifeq ($(wildcard /usr/bin/chezscheme),) - INSTALLED_CHEZ=/usr/bin/chezscheme9.5 -else - # Available since 9.5+dfsg-6 - INSTALLED_CHEZ=/usr/bin/chezscheme -endif +INSTALLED_CHEZ=/usr/bin/chezscheme LIBDIR=usr/lib/csv$(CHEZ_VERSION)/$(HOST_MACHINE_TYPE) +fix_conf = sed -i -e 's,^ncursesLib=.*,ncursesLib=-lncurses -lz -llz4,g' + %: dh $@ @@ -47,13 +44,19 @@ cp -r /usr/lib/csv$(CHEZ_VERSION)/$(HOST_MACHINE_TYPE) boot/$(HOST_MACHINE_TYPE); \ touch boot/$(HOST_MACHINE_TYPE)/.debian-cleanup; \ fi - CC=$(CC) ./configure --workarea=build -m=$(HOST_MACHINE_TYPE) --installprefix=/usr --temproot=$(shell pwd)/debian/tmp + CC=$(CC) ./configure --workarea=build -m=$(HOST_MACHINE_TYPE) --installprefix=/usr --temproot=$(shell pwd)/debian/tmp ZLIB= LZ4= else - ./configure --workarea=crossbuilder --threads --installprefix=/usr --temproot=$(shell pwd)/debian/tmp + ./configure --workarea=crossbuilder --threads --installprefix=/usr --temproot=$(shell pwd)/debian/tmp ZLIB= LZ4= + $(fix_conf) crossbuilder/c/Mf-config make -C crossbuilder ./workarea $(HOST_MACHINE_TYPE) mv $(HOST_MACHINE_TYPE) build + echo "ncursesLib=-lncurses -lz -llz4" >> build/c/Mf-config + echo 'Kernel=$${KernelO}' >> build/c/Mf-config + echo 'KernelLinkDeps=$${KernelOLinkDeps}' >> build/c/Mf-config + echo 'KernelLinkLibs=$${KernelOLinkLibs}' >> build/c/Mf-config endif + $(fix_conf) build/c/Mf-config (cd build/s; ln -s ../../s/primdata.ss primdata.ss) cp -a release_notes/ build/ cp -a csug/ build/ @@ -75,7 +78,7 @@ endif override_dh_auto_build-indep: -ifneq (,$(filter chezscheme$(CHEZ_VERSION)-doc,$(DOPACKAGES))) +ifneq (,$(filter chezscheme-doc,$(DOPACKAGES))) make -C build/release_notes Scheme=$(INSTALLED_CHEZ) STEXLIB=/usr/share/stex make -C build/csug Scheme=$(INSTALLED_CHEZ) STEXLIB=/usr/share/stex endif @@ -86,12 +89,12 @@ else make -C build -f ../crossbuilder/Mf-install m=$(HOST_MACHINE_TYPE) endif - sed -e 's,^\\fI\(Chez Scheme\)\\fP,chezscheme$(CHEZ_VERSION) \- Chez Scheme,' \ - -e 's,^\\fI\(Petite Chez Scheme\)\\fP,petite$(CHEZ_VERSION) \- Petite Chez Scheme,' \ - build/scheme.1 > build/chezscheme$(CHEZ_VERSION).1 + sed -e 's,^\\fI\(Chez Scheme\)\\fP,chezscheme \- Chez Scheme,' \ + -e 's,^\\fI\(Petite Chez Scheme\)\\fP,petite \- Petite Chez Scheme,' \ + build/scheme.1 > build/chezscheme.1 override_dh_auto_install-indep: -ifneq (,$(filter chezscheme$(CHEZ_VERSION)-doc,$(DOPACKAGES))) +ifneq (,$(filter chezscheme-doc,$(DOPACKAGES))) make -C build/release_notes Scheme=$(INSTALLED_CHEZ) STEXLIB=/usr/share/stex INSTALL=../installsh \ installdir=$(shell pwd)/debian/tmp/usr/share/doc/chezscheme-doc/ \ install @@ -102,26 +105,18 @@ ln -sf ../csug.css debian/tmp/usr/share/doc/chezscheme-doc/html/canned/csug.css endif +ifneq (,$(filter chezscheme,$(DOPACKAGES))) override_dh_link: - dh_link $(LIBDIR)/petite.boot $(LIBDIR)/petite$(CHEZ_VERSION).boot \ - $(LIBDIR)/scheme.boot $(LIBDIR)/chezscheme$(CHEZ_VERSION).boot \ - $(LIBDIR)/scheme.boot $(LIBDIR)/chezscheme.boot \ + dh_link $(LIBDIR)/scheme.boot $(LIBDIR)/chezscheme.boot \ $(LIBDIR)/scheme.boot $(LIBDIR)/scheme-script.boot \ - $(LIBDIR)/scheme.boot $(LIBDIR)/scheme-script$(CHEZ_VERSION).boot \ - /usr/share/man/man1/chezscheme$(CHEZ_VERSION).1.gz \ - /usr/share/man/man1/petite$(CHEZ_VERSION).1.gz \ - /usr/share/man/man1/chezscheme$(CHEZ_VERSION).1.gz \ - /usr/share/man/man1/scheme-script$(CHEZ_VERSION).1.gz - dh_link -pchezscheme \ - /usr/bin/chezscheme$(CHEZ_VERSION) usr/bin/chezscheme \ - /usr/bin/chezscheme$(CHEZ_VERSION) usr/bin/petite \ - /usr/share/man/man1/chezscheme$(CHEZ_VERSION).1.gz \ - /usr/share/man/man1/petite.1.gz \ - /usr/share/man/man1/chezscheme$(CHEZ_VERSION).1.gz \ - /usr/share/man/man1/chezscheme.1.gz + /usr/share/man/man1/chezscheme.1.gz \ + /usr/share/man/man1/petite.1.gz \ + /usr/share/man/man1/chezscheme.1.gz \ + /usr/share/man/man1/scheme-script-chez.1.gz +endif override_dh_auto_clean: - rm -f Makefile + rm -f Makefile csug/Makefile release_notes/Makefile dh_auto_clean if [ -f boot/$(HOST_MACHINE_TYPE)/.debian-cleanup ]; then \ rm -rf boot/$(HOST_MACHINE_TYPE); \ @@ -134,4 +129,4 @@ dh_installchangelogs LOG override_dh_installman-arch: - dh_installman build/chezscheme$(CHEZ_VERSION).1 + dh_installman build/chezscheme.1 diff -Nru chezscheme-9.5+dfsg/debian/watch chezscheme-9.5.4+dfsg/debian/watch --- chezscheme-9.5+dfsg/debian/watch 2018-05-03 19:48:55.000000000 +0000 +++ chezscheme-9.5.4+dfsg/debian/watch 2020-09-05 14:59:41.000000000 +0000 @@ -1,3 +1,3 @@ version=4 -opts="mode=git" https://github.com/cisco/ChezScheme.git \ - refs/tags/v([\d\.]+) dversionmangle=s/\+dfsg\d*$// debian uupdate +opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/chezscheme-$1\.tar\.gz/,dversionmangle=auto,repacksuffix=+dfsg \ + https://github.com/cisco/ChezScheme/tags .*/v?(\d\S+)\.tar\.gz diff -Nru chezscheme-9.5+dfsg/examples/ez-grammar.ss chezscheme-9.5.4+dfsg/examples/ez-grammar.ss --- chezscheme-9.5+dfsg/examples/ez-grammar.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/examples/ez-grammar.ss 2020-08-31 02:35:12.000000000 +0000 @@ -44,7 +44,7 @@ ;;; See ez-grammar-test.ss for an example. (module (define-grammar - is sat peek seq ++ +++ many many+ ? + is sat item peek seq ++ +++ many many+ ? parse-consumed-all? parse-result-value parse-result-unused grammar-trace ) @@ -54,6 +54,7 @@ (define-record-type parse-result (nongenerative parse-result) + (sealed #t) (fields value unused)) ;; to enable $trace-is to determine the ending file position (efp) of a parse @@ -144,7 +145,7 @@ (define ($trace-is name proc head) (lambda (unused) (let ([res (proc (token-bfp (current-token head)) (token-efp (preceding-token unused)))]) - (when (and 'name (grammar-trace)) (printf "<<~s = ~s~%" 'name res)) + (when (and name (grammar-trace)) (printf "<<~s = ~s~%" name res)) (stream (make-parse-result res unused))))) (define-syntax trace-is @@ -203,6 +204,46 @@ (define (+++ p q) (first (++ p q))) ;; choose first match, cut backtracking + (define-syntax infix-expression-parser + (lambda (x) + (syntax-case x () + [(_ ((L/R ?op-parser) ...) ?term-parser ?receiver) + (with-syntax ([(op-parser ...) (generate-temporaries #'(?op-parser ...))]) + #`(let ([op-parser ?op-parser] ... [term-parser (lambda (inp) (?term-parser inp))] [receiver ?receiver]) + #,(let f ([ls #'((L/R op-parser) ...)]) + (if (null? ls) + #'term-parser + #`(let ([next #,(f (cdr ls))]) + #,(syntax-case (car ls) (LEFT RIGHT) + [(LEFT op-parser) + #'(let () + (define-record-type frob (nongenerative) (sealed #t) (fields op y efp)) + (trace-is binop-left (lambda (bfp ignore-this-efp) + (fold-left + (lambda (x f) (receiver bfp (frob-efp f) (frob-op f) x (frob-y f))) + x f*)) + (where + [x <- next] + [f* <- (rec this + (optional + (is (cons f f*) + (where + [f <- (trace-is binop-left-tail (lambda (bfp efp) (make-frob op y efp)) + (where + [op <- op-parser] + [y <- next]))] + [f* <- this])) + '()))])))] + [(RIGHT op-parser) + #'(rec this + (+++ + (trace-is binop-right (lambda (bfp efp) (receiver bfp efp op x y)) + (where + [x <- next] + [op <- op-parser] + [y <- this])) + next))]))))))]))) + (define (format-inp inp) (if (no-more-tokens? inp) "#" @@ -210,43 +251,132 @@ (define-syntax define-grammar (lambda (x) - (define-record-type production + (define-record-type grammar + (nongenerative) + (sealed #t) + (fields title paragraph* section*)) + (define-record-type section (nongenerative) - (fields name elt* receiver)) + (sealed #t) + (fields title paragraph* suppressed? clause*)) (define-record-type clause (nongenerative) - (fields id prod*)) + (fields id alias* before-paragraph* after-paragraph*)) + (define-record-type regular-clause + (nongenerative) + (sealed #t) + (parent clause) + (fields prod*)) + (define-record-type binop-clause + (nongenerative) + (sealed #t) + (parent clause) + (fields level* term receiver) + (protocol + (lambda (pargs->new) + (lambda (nt alias* before-paragraph* after-paragraph* level* term src? receiver) + ((pargs->new nt alias* before-paragraph* after-paragraph*) level* term + #`(lambda (bfp efp op x y) + #,(if src? + #`(#,receiver (make-src bfp efp) op x y) + #`(#,receiver op x y)))))))) + (define-record-type terminal-clause + (nongenerative) + (sealed #t) + (fields term*)) + (define-record-type terminal + (nongenerative) + (sealed #t) + (fields parser alias* paragraph*)) + (define-record-type production + (nongenerative) + (sealed #t) + (fields name paragraph* elt* receiver) + (protocol + (let () + (define (check-elts elt*) + (for-each (lambda (elt) (unless (elt? elt) (errorf 'make-production "~s is not an elt" elt))) elt*)) + (lambda (new) + (case-lambda + [(name elt* receiver) + (check-elts elt*) + (new name #f elt* receiver)] + [(name paragraph* elt* receiver) + (check-elts elt*) + (new name paragraph* elt* receiver)]))))) + (define-record-type elt + (nongenerative)) + (define-record-type sep-elt + (nongenerative) + (sealed #t) + (parent elt) + (fields +? elt sep)) + (define-record-type opt-elt + (nongenerative) + (sealed #t) + (parent elt) + (fields elt default)) + (define-record-type kleene-elt + (nongenerative) + (sealed #t) + (parent elt) + (fields +? elt)) + (define-record-type constant-elt + (nongenerative) + (sealed #t) + (parent elt) + (fields k)) + (define-record-type id-elt + (nongenerative) + (sealed #t) + (parent elt) + (fields id)) + (define paragraph? + (lambda (x) + (syntax-case x (include) + [(include filename) (string? (datum filename))] + [(str ...) (andmap string? (datum (str ...)))]))) (define (gentemp) (datum->syntax #'* (gensym))) (define (elt-temps elt*) + (for-each (lambda (elt) (unless (elt? elt) (errorf 'elt-temps "~s is not an elt" elt))) elt*) (fold-left (lambda (t* elt) - (if (constant? elt) t* (cons (gentemp) t*))) + (if (constant-elt? elt) t* (cons (gentemp) t*))) '() elt*)) - (define parse-production - (lambda (cl) - (syntax-case cl (:: src =>) - [[name :: src elt ... => receiver] - (make-production #'name #'(elt ...) - (with-syntax ([(t ...) (elt-temps #'(elt ...))]) - #'(lambda (bfp efp t ...) - (receiver (make-src bfp efp) t ...))))] - [[name :: elt ... => receiver] - (make-production #'name #'(elt ...) - (with-syntax ([(t ...) (elt-temps #'(elt ...))]) - #'(lambda (bfp efp t ...) - (receiver t ...))))]))) (define (left-factor clause*) (define syntax-equal? (lambda (x y) (equal? (syntax->datum x) (syntax->datum y)))) + (define (elt-equal? x y) + (cond + [(sep-elt? x) + (and (sep-elt? y) + (eq? (sep-elt-+? x) (sep-elt-+? y)) + (elt-equal? (sep-elt-elt x) (sep-elt-elt y)) + (syntax-equal? (sep-elt-sep x) (sep-elt-sep y)))] + [(opt-elt? x) + (and (opt-elt? y) + (elt-equal? (opt-elt-elt x) (opt-elt-elt y)) + (syntax-equal? (opt-elt-default x) (opt-elt-default y)))] + [(kleene-elt? x) + (and (kleene-elt? y) + (eq? (kleene-elt-+? x) (kleene-elt-+? y)) + (elt-equal? (kleene-elt-elt x) (kleene-elt-elt y)))] + [(constant-elt? x) + (and (constant-elt? y) + (syntax-equal? (constant-elt-k x) (constant-elt-k y)))] + [(id-elt? x) + (and (id-elt? y) + (syntax-equal? (id-elt-id x) (id-elt-id y)))] + [else #f])) (let lp1 ([clause* clause*] [new-clause* '()]) (if (null? clause*) (reverse new-clause*) (let ([clause (car clause*)]) - (let lp2 ([prod* (clause-prod* clause)] [new-prod* '()] [clause* (cdr clause*)]) + (let lp2 ([prod* (regular-clause-prod* clause)] [new-prod* '()] [clause* (cdr clause*)]) (if (null? prod*) - (lp1 clause* (cons (make-clause (clause-id clause) (reverse new-prod*)) new-clause*)) + (lp1 clause* (cons (make-regular-clause (clause-id clause) (clause-alias* clause) '() '() (reverse new-prod*)) new-clause*)) (let ([prod (car prod*)] [prod* (cdr prod*)]) (let ([elt* (production-elt* prod)]) (if (null? elt*) @@ -256,7 +386,7 @@ (lambda (prod) (let ([elt* (production-elt* prod)]) (and (not (null? elt*)) - (syntax-equal? (car elt*) elt)))) + (elt-equal? (car elt*) elt)))) prod*)]) (if (null? haves) (lp2 prod* (cons prod new-prod*) clause*) @@ -269,15 +399,15 @@ (if (ormap null? elt**) '() (let ([elt (caar elt**)]) - (if (andmap (lambda (elt*) (syntax-equal? (car elt*) elt)) (cdr elt**)) - (cons (caar elt**) (f elt**)) + (if (andmap (lambda (elt*) (elt-equal? (car elt*) elt)) (cdr elt**)) + (cons elt (f elt**)) '()))))))]) (let ([t (gentemp)] [n (length prefix)] [t* (elt-temps prefix)]) (lp2 have-nots - (cons (make-production #f (append prefix (list t)) + (cons (make-production #f (append prefix (list (make-id-elt t))) #`(lambda (bfp efp #,@t* p) (p bfp #,@t*))) new-prod*) - (cons (make-clause t + (cons (make-regular-clause t '() '() '() (map (lambda (prod) (let ([elt* (list-tail (production-elt* prod) n)]) (make-production (production-name prod) elt* @@ -287,54 +417,325 @@ (#,(production-receiver prod) bfp efp #,@t* #,@u*))))))) haves)) clause*))))))))))))))))) - (define (nt-helper clause*) - (define (elt-helper x) - (syntax-case x (SEP+ SEP* OPT K* K+) - [(SEP+ p sep) #`(sepby1 #,(elt-helper #'p) (sep->parser sep))] - [(SEP* p sep) #`(sepby #,(elt-helper #'p) (sep->parser sep))] - [(OPT p dflt) #`(optional #,(elt-helper #'p) dflt)] - [(K* p) #`(many #,(elt-helper #'p))] - [(K+ p) #`(many+ #,(elt-helper #'p))] - [k (constant? #'k) #'(constant->parser 'k)] - [p #'p])) - (let loop ([clause* clause*] [binding* '()]) - (if (null? clause*) - binding* - (loop - (cdr clause*) - (cons - #`[#,(clause-id (car clause*)) - #,(let f ([prod* (clause-prod* (car clause*))]) - (if (null? prod*) - #'zero - (with-syntax ([name (production-name (car prod*))] - [(elt ...) (production-elt* (car prod*))] - [receiver (production-receiver (car prod*))]) - (with-syntax ([(x ...) (generate-temporaries #'(elt ...))]) - (with-syntax ([([y _] ...) (filter (lambda (pr) (not (constant? (cadr pr)))) #'([x elt] ...))]) - (with-syntax ([(where-nt ...) (map elt-helper #'(elt ...))]) - #`(+++ ;; use +++ if you don't ever need to backtrack to a previous production for the same non-terminal - (lambda (inp) - (when (and 'name (grammar-trace)) (printf ">>~s(~a)~%" 'name (format-inp inp))) - (let ([res ((trace-is name (lambda (bfp efp) (receiver bfp efp y ...)) (where [x <- where-nt] ...)) inp)]) - (when (and 'name (grammar-trace)) - (if (stream-null? res) - (printf "<<~s(~a) failed~%" 'name (format-inp inp)) - (printf "<<~s(~a) succeeded~%" 'name (format-inp inp)))) - res)) - #,(f (cdr prod*)))))))))] - binding*))))) - (syntax-case x () - [(_ init-nt [nt prod prods ...] ...) - (with-syntax ([(binding ...) - (nt-helper - (left-factor - (map (lambda (nt prod*) (make-clause nt (map parse-production prod*))) - #'(nt ...) - #'((prod prods ...) ...))))]) - #'(define init-nt - (letrec (binding ...) - (make-top-level-parser init-nt))))]))) + (define (make-env tclause* clause*) + (let ([env (make-hashtable (lambda (x) (symbol-hash (syntax->datum x))) free-identifier=?)]) + (define (insert parser) + (lambda (name) + (let ([a (hashtable-cell env name #f)]) + (when (cdr a) (syntax-error name "duplicate terminal/non-terminal name")) + (set-cdr! a parser)))) + (for-each + (lambda (tclause) + (for-each + (lambda (term) + (let ([parser (terminal-parser term)]) + (for-each (insert parser) (cons parser (terminal-alias* term))))) + (terminal-clause-term* tclause))) + tclause*) + (for-each + (lambda (clause) + (let ([id (clause-id clause)]) + (for-each (insert id) (cons id (clause-alias* clause))))) + clause*) + env)) + (define (lookup id env) + (or (hashtable-ref env id #f) + (syntax-error id "unrecognized terminal or nonterminal"))) + (define (render-markdown name grammar mdfn env) + (define (separators sep ls) + (if (null? ls) + "" + (apply string-append + (cons (car ls) + (map (lambda (s) (format "~a~a" sep s)) (cdr ls)))))) + (define (render-paragraph hard-leading-newline?) + (lambda (paragraph) + (define (md-text s) + (list->string + (fold-right + (lambda (c ls) + (case c + [(#\\) (cons* c c ls)] + [else (cons c ls)])) + '() + (string->list s)))) + (syntax-case paragraph (include) + [(include filename) + (string? (datum filename)) + (let ([text (call-with-port (open-input-file (datum filename)) get-string-all)]) + (unless (equal? text "") + (if hard-leading-newline? (printf "\\\n") (newline)) + (display-string text)))] + [(sentence ...) + (andmap string? (datum (sentence ...))) + (let ([sentence* (datum (sentence ...))]) + (unless (null? sentence*) + (if hard-leading-newline? (printf "\\\n") (newline)) + (printf "~a\n" (separators " " (map md-text sentence*)))))]))) + (define (format-elt x) + (cond + [(sep-elt? x) + (let* ([one (format-elt (sep-elt-elt x))] + [sep (constant->markdown (syntax->datum (sep-elt-sep x)))] + [seq (format "~a  ~a  `...`" one sep)]) + (if (sep-elt-+? x) + seq + (format "OPT(~a)" seq)))] + [(opt-elt? x) + (format "~a~~opt~~" (format-elt (opt-elt-elt x)))] + [(kleene-elt? x) + (let ([one (format-elt (kleene-elt-elt x))]) + (if (kleene-elt-+? x) + (format "~a  `...`" one) + (format "OPT(~a)" one)))] + [(constant-elt? x) (constant->markdown (syntax->datum (constant-elt-k x)))] + [(id-elt? x) (format "[*~s*](#~s)" + (syntax->datum (id-elt-id x)) + (syntax->datum (lookup (id-elt-id x) env)))] + [else (errorf 'format-elt "unexpected elt ~s" x)])) + (define (render-elt x) + (printf "  ~a" (format-elt x))) + (define (render-production prod) + (unless (null? (production-elt* prod)) + (printf " : ") + (for-each render-elt (production-elt* prod)) + (printf "\n")) + (when (and (null? (production-elt* prod)) + (not (null? (production-paragraph* prod)))) + (errorf 'render-production "empty production must not have description: ~a" (production-paragraph* prod))) + (for-each (render-paragraph #t) (production-paragraph* prod))) + (define (render-clause clause) + (define (render-aliases alias*) + (unless (null? alias*) + (printf " \naliases: ~{*~a*~^, ~}\n" (map syntax->datum alias*)))) + (if (terminal-clause? clause) + (for-each + (lambda (term) + (printf "\n#### *~a* {#~:*~a}\n" (syntax->datum (terminal-parser term))) + (render-aliases (terminal-alias* term)) + (for-each (render-paragraph #f) (terminal-paragraph* term))) + (terminal-clause-term* clause)) + (let ([id (syntax->datum (clause-id clause))]) + (printf "\n#### *~a* {#~:*~a}\n" id) + (render-aliases (clause-alias* clause)) + (for-each (render-paragraph #f) (clause-before-paragraph* clause)) + (printf "\nsyntax:\n") + (if (binop-clause? clause) + (let ([level* (binop-clause-level* clause)]) + (let loop ([level* level*] [first? #t]) + (unless (null? level*) + (let ([level (syntax->datum (car level*))] [level* (cdr level*)]) + (let ([L/R (car level)] [op* (cdr level)]) + (printf " : _~(~a~)-associative" L/R) + (if first? + (if (null? level*) + (printf ":_\n") + (printf ", highest precedence:_\n")) + (if (null? level*) + (printf ", lowest precedence:_\n") + (printf ":_\n"))) + (for-each + (lambda (op) (printf " : ~s ~a ~s\n" id (constant->markdown op) id)) + op*)) + (loop level* #f)))) + (printf " : _leaves:_\n") + (printf " : ") + (render-elt (binop-clause-term clause)) + (printf "\n")) + (for-each render-production (or (regular-clause-prod* clause) '()))) + (for-each (render-paragraph #f) (clause-after-paragraph* clause))))) + (define (render-section section) + (unless (section-suppressed? section) + (printf "\n## ~a\n" (or (section-title section) "The section")) + (for-each (render-paragraph #f) (section-paragraph* section)) + (for-each render-clause (section-clause* section)))) + (with-output-to-file mdfn + (lambda () + (printf "# ~a\n" (or (grammar-title grammar) "The grammar")) + (for-each (render-paragraph #f) (grammar-paragraph* grammar)) + (for-each render-section (grammar-section* grammar))) + 'replace)) + (module (parse-grammar) + (define parse-elt + (lambda (elt) + (syntax-case elt (SEP+ SEP* OPT K* K+) + [(SEP+ p sep) (make-sep-elt #t (parse-elt #'p) #'sep)] + [(SEP* p sep) (make-sep-elt #f (parse-elt #'p) #'sep)] + [(OPT p default) (make-opt-elt (parse-elt #'p) #'default)] + [(K+ p) (make-kleene-elt #t (parse-elt #'p))] + [(K* p) (make-kleene-elt #f (parse-elt #'p))] + [k (constant? #'k) (make-constant-elt #'k)] + [id (identifier? #'id) (make-id-elt #'id)] + [_ (syntax-error elt "invalid production element")]))) + (define parse-production + (lambda (prod) + (define (finish name src? paragraph* elt* receiver) + (let ([elt* (map parse-elt elt*)]) + (make-production name paragraph* elt* + (with-syntax ([(t ...) (elt-temps elt*)]) + #`(lambda (bfp efp t ...) + #,(if src? + #`(#,receiver (make-src bfp efp) t ...) + #`(#,receiver t ...))))))) + (syntax-case prod (:: src =>) + [[name :: src elt ... => receiver] + (finish #'name #t '() #'(elt ...) #'receiver)] + [[name :: elt ... => receiver] + (finish #'name #f '() #'(elt ...) #'receiver)]))) + (define (parse-terminal term) + (syntax-case term (DESCRIPTION) + [(parser (alias ...) (DESCRIPTION paragraph ...)) + (and (identifier? #'parser) (andmap identifier? #'(alias ...)) (andmap paragraph? #'(paragraph ...))) + (make-terminal #'parser #'(alias ...) #'(paragraph ...))] + [(parser (alias ...)) + (and (identifier? #'parser) (andmap identifier? #'(alias ...))) + (make-terminal #'parser #'(alias ...) '())])) + (define (parse-clause clause nt alias* before-paragraph* after-paragraph* stuff*) + (syntax-case stuff* (BINOP :: src =>) + [((BINOP src (level ...) term) => receiver) + (make-binop-clause nt alias* before-paragraph* after-paragraph* #'(level ...) (parse-elt #'term) #t #'receiver)] + [((BINOP (level ...) term) => receiver) + (make-binop-clause nt alias* before-paragraph* after-paragraph* #'(level ...) (parse-elt #'term) #f #'receiver)] + [(prod prods ...) + (make-regular-clause nt alias* before-paragraph* after-paragraph* (map parse-production #'(prod prods ...)))] + [else (syntax-error clause)])) + (define (parse-top top* knull kgrammar ksection kclause) + (if (null? top*) + (knull) + (let ([top (car top*)] [top* (cdr top*)]) + (syntax-case top (GRAMMAR SECTION SUPPRESSED DESCRIPTION BINOP TERMINALS src =>) + [(GRAMMAR title paragraph ...) + (andmap paragraph? #'(paragraph ...)) + (kgrammar top* (datum title) #'(paragraph ...))] + [(SECTION SUPPRESSED title paragraph ...) + (andmap paragraph? #'(paragraph ...)) + (ksection top* (datum title) #'(paragraph ...) #t)] + [(SECTION title paragraph ...) + (andmap paragraph? #'(paragraph ...)) + (ksection top* (datum title) #'(paragraph ...) #f)] + [(TERMINALS term ...) + (kclause top* (make-terminal-clause (map parse-terminal #'(term ...))))] + [(TERMINALS term ...) + (kclause top* (make-terminal-clause (map parse-terminal #'(term ...))))] + [(nt (alias ...) (DESCRIPTION paragraph1 ...) stuff ... (DESCRIPTION paragraph2 ...)) + (and (identifier? #'nt) (andmap identifier? #'(alias ...)) (andmap paragraph? #'(paragraph1 ...)) (andmap paragraph? #'(paragraph2 ...))) + (kclause top* (parse-clause top #'nt #'(alias ...) #'(paragraph1 ...) #'(paragraph2 ...) #'(stuff ...)))] + [(nt (alias ...) (DESCRIPTION paragraph ...) stuff ...) + (and (identifier? #'nt) (andmap identifier? #'(alias ...)) (andmap paragraph? #'(paragraph ...))) + (kclause top* (parse-clause top #'nt #'(alias ...) #'(paragraph ...) '() #'(stuff ...)))] + [(nt (alias ...) stuff ... (DESCRIPTION paragraph ...)) + (and (identifier? #'nt) (andmap identifier? #'(alias ...)) (andmap paragraph? #'(paragraph ...))) + (kclause top* (parse-clause top #'nt #'(alias ...) '() #'(paragraph ...) #'(stuff ...)))] + [(nt (alias ...) stuff ...) + (and (identifier? #'nt) (andmap identifier? #'(alias ...))) + (kclause top* (parse-clause top #'nt #'(alias ...) '() '() #'(stuff ...)))])))) + (define (parse-grammar top*) + (define (misplaced-grammar-error top) + (syntax-error top "unexpected GRAMMAR element after other elements")) + (define (s1 top*) ; looking for GRAMMAR form, first SECTION form, or clause + (parse-top top* + (lambda () (make-grammar #f '() '())) + (lambda (top* title paragraph*) + (make-grammar title paragraph* (s2 top*))) + (lambda (top* title paragraph* suppressed?) + (make-grammar #f '() + (s3 top* title paragraph* suppressed? '() '()))) + (lambda (top* clause) + (make-grammar #f '() + (s3 top* #f '() #f (list clause) '()))))) + (define (s2 top*) ; looking for first SECTION form or clause + (parse-top top* + (lambda () '()) + (lambda (title paragraph*) (misplaced-grammar-error (car top*))) + (lambda (top* title paragraph* suppressed?) + (s3 top* title paragraph* suppressed? '() '())) + (lambda (top* clause) + (s3 top* #f '() #f (list clause) '())))) + (define (s3 top* title paragraph* suppressed? rclause* rsection*) ; steady state: looking for remaining SECTION forms and clauses + (define (finish-section) + (cons (make-section title paragraph* suppressed? (reverse rclause*)) rsection*)) + (parse-top top* + (lambda () (reverse (finish-section))) + (lambda (title paragraph*) (misplaced-grammar-error (car top*))) + (lambda (top* title paragraph* suppressed?) + (s3 top* title paragraph* suppressed? '() (finish-section))) + (lambda (top* clause) + (s3 top* title paragraph* suppressed? (cons clause rclause*) rsection*)))) + (s1 top*))) + (define (go init-nts top* mddir) + (let ([grammar (parse-grammar top*)]) + (let* ([clause* (apply append (map section-clause* (grammar-section* grammar)))] + [terminal-clause* (filter terminal-clause? clause*)] + [binop-clause* (filter binop-clause? clause*)] + [regular-clause* (left-factor (filter regular-clause? clause*))] + [env (make-env terminal-clause* (append binop-clause* regular-clause*))]) + (define (elt-helper x) + (cond + [(sep-elt? x) #`(#,(if (sep-elt-+? x) #'sepby1 #'sepby) #,(elt-helper (sep-elt-elt x)) (sep->parser #,(sep-elt-sep x)))] + [(opt-elt? x) #`(optional #,(elt-helper (opt-elt-elt x)) #,(opt-elt-default x))] + [(kleene-elt? x) #`(#,(if (kleene-elt-+? x) #'many+ #'many) #,(elt-helper (kleene-elt-elt x)))] + [(constant-elt? x) #`(constant->parser '#,(constant-elt-k x))] + [(id-elt? x) (lookup (id-elt-id x) env)] + [else (errorf 'elt-helper "unhandled elt ~s\n" x)])) + (define (binop-helper clause) + #`[#,(clause-id clause) + (infix-expression-parser + #,(map (lambda (level) + (syntax-case level () + [(L/R op1 ... op2) + (or (free-identifier=? #'L/R #'LEFT) (free-identifier=? #'L/R #'RIGHT)) + #`(L/R #,(fold-right (lambda (op next) #`(++ (binop->parser '#,op) #,next)) #'(binop->parser 'op2) #'(op1 ...)))])) + (binop-clause-level* clause)) + #,(elt-helper (binop-clause-term clause)) + #,(binop-clause-receiver clause))]) + (define (nt-helper clause) + #`[#,(clause-id clause) + #,(let f ([prod* (regular-clause-prod* clause)]) + (if (null? prod*) + #'zero + (let ([elt* (production-elt* (car prod*))]) + (with-syntax ([name (production-name (car prod*))] + [(elt ...) elt*] + [receiver (production-receiver (car prod*))]) + (with-syntax ([(x ...) (generate-temporaries elt*)]) + (with-syntax ([([y _] ...) (filter (lambda (pr) (not (constant-elt? (cadr pr)))) #'([x elt] ...))]) + (with-syntax ([(where-nt ...) (map elt-helper elt*)]) + #`(+++ ;; use +++ if you don't ever need to backtrack to a previous production for the same non-terminal + (lambda (inp) + (when (and 'name (grammar-trace)) (printf ">>~s(~a)~%" 'name (format-inp inp))) + (let ([res ((trace-is name (lambda (bfp efp) (receiver bfp efp y ...)) (where [x <- where-nt] ...)) inp)]) + (when (and 'name (grammar-trace)) + (if (stream-null? res) + (printf "<<~s(~a) failed~%" 'name (format-inp inp)) + (printf "<<~s(~a) succeeded~%" 'name (format-inp inp)))) + res)) + #,(f (cdr prod*))))))))))]) + (with-syntax ([(init-nt ...) + (syntax-case init-nts () + [(id1 id2 ...) (andmap identifier? #'(id1 id2 ...)) #'(id1 id2 ...)] + [id (identifier? #'id) (list #'id)])]) + (when mddir + (for-each + (lambda (init-nt) + (let ([mdfn (format "~a/~a.md" mddir (syntax->datum init-nt))]) + (render-markdown init-nt grammar mdfn env))) + #'(init-nt ...))) + (with-syntax ([((lhs rhs) ...) + (append + (map binop-helper binop-clause*) + (map nt-helper regular-clause*))]) + #'(module (init-nt ...) + (module M (init-nt ...) (define lhs rhs) ...) + (define init-nt + (let () + (import M) + (make-top-level-parser init-nt))) + ...)))))) + (syntax-case x (markdown-directory) + [(_ init-nts (markdown-directory mddir) top ...) + (string? (datum mddir)) + (go #'init-nts #'(top ...) (datum mddir))] + [(_ init-nts top ...) (go #'init-nts #'(top ...) #f)]))) (indirect-export define-grammar result @@ -347,6 +748,7 @@ many many+ +++ + infix-expression-parser grammar-trace format-inp diff -Nru chezscheme-9.5+dfsg/examples/ez-grammar-test.ss chezscheme-9.5.4+dfsg/examples/ez-grammar-test.ss --- chezscheme-9.5+dfsg/examples/ez-grammar-test.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/examples/ez-grammar-test.ss 2020-08-31 02:35:12.000000000 +0000 @@ -97,7 +97,7 @@ (export state-case eof) (import (chezscheme)) - ;;; from Chez Scheme Version 9.4 cmacros.ss + ;;; from Chez Scheme Version 9.5.1 cmacros.ss (define-syntax state-case (lambda (x) (define state-case-test @@ -162,7 +162,7 @@ (unread-char c ip)) (define ($ws!) (set! $prev-pos $pos)) (define ($make-token type value) - (let ([tok (make-token type value $prev-pos (- $pos 1))]) + (let ([tok (make-token type value $prev-pos $pos)]) (set! $prev-pos $pos) tok)) (define ($lex-error c) @@ -198,7 +198,7 @@ [eof stream-nil] [char-whitespace? ($ws!) (lex)] [char-numeric? (lex-number c)] - [#\/ (seen-/)] + [#\/ (seen-slash)] [identifier-initial? (put-char sp c) (lex-identifier)] [#\( (return-token 'lparen #\()] [#\) (return-token 'rparen #\))] @@ -206,6 +206,9 @@ [#\+ (seen-plus)] [#\- (seen-minus)] [#\= (seen-equals)] + [#\* (return-token 'binop '*)] + [#\, (return-token 'sep #\,)] + [#\; (return-token 'sep #\;)] [else (lex-error c)]) (module (lex-identifier) (define (id) (return-token 'id (string->symbol (get-buf)))) @@ -215,22 +218,22 @@ [else ($unread-char c) (id)]) (define (lex-identifier) (next))) (define-state-case seen-plus c - [eof (lex-error c)] + [eof (return-token 'binop '+)] [char-numeric? (lex-signed-number #\+ c)] - [else (lex-error c)]) + [else (return-token 'binop '+)]) (define-state-case seen-minus c - [eof (lex-error c)] + [eof (return-token 'binop '-)] [char-numeric? (lex-signed-number #\- c)] - [else (lex-error c)]) + [else (return-token 'binop '-)]) (define-state-case seen-equals c - [eof (lex-error c)] + [eof (return-token 'binop '=)] [#\> (return-token 'big-arrow #f)] - [else (lex-error c)]) + [else (return-token 'binop '=)]) (module (lex-number lex-signed-number) (define (finish-number) (let ([str (get-buf)]) (let ([n (string->number str 10)]) - (unless n (errorf 'parse-ftc "unexpected number literal ~a" str)) + (unless n (errorf 'lexer "unexpected number literal ~a" str)) (return-token 'integer n)))) (define (num) (let ([c ($get-char)]) @@ -246,11 +249,11 @@ [eof (assert #f)] [char-numeric? (put-char sp c) (num)] [else (assert #f)]))) - (define-state-case seen-/ c - [eof (lex-error c)] + (define-state-case seen-slash c + [eof (return-token 'binop '/)] [#\* (lex-block-comment)] [#\/ (lex-comment)] - [else (lex-error c)]) + [else (return-token 'binop '/)]) (define-state-case lex-comment c [eof (lex)] [#\newline ($ws!) (lex)] @@ -281,34 +284,53 @@ (wr (token-efp x) p))) ) -(library (parser) - (export parse) +(module parser () + (export parse *sfd*) (import (chezscheme) (streams) (lexer)) + (define *sfd*) (module (define-grammar is sat parse-consumed-all? parse-result-value grammar-trace make-src) (define (sep->parser sep) (cond - [(char? sep) (sat (lambda (x) (eq? (token-value x) sep)))] + [(char? sep) (sat (lambda (x) (and (eq? (token-type x) 'sep) (eq? (token-value x) sep))))] [(symbol? sep) (sat (lambda (x) (eq? (token-type x) sep)))] [else (errorf "don't know how to parse separator: ~s" sep)])) (meta define (constant? x) (let ([x (syntax->datum x)]) (or (string? x) (char? x)))) (define constant->parser - (let () + (lambda (const) (define (token-sat type val) (sat (lambda (x) (let ([ans (and (token? x) (eqv? (token-type x) type) (eqv? (token-value x) val))]) (when (grammar-trace) (printf " ~s is [~s, ~a]? => ~s~%" x type val ans)) ans)))) - (lambda (const) - (if (string? const) - (case const - ["=>" (token-sat 'big-arrow #f)] - [else (token-sat 'id (string->symbol const))]) - (case const - [#\( (token-sat 'lparen const)] - [#\) (token-sat 'rparen const)] - [#\! (token-sat 'bang const)] - [else (errorf 'constant->parser "don't know how to construct a parser for ~a" const)]))))) - (define make-src (lambda (bfp efp) (and (<= bfp efp) (cons bfp efp)))) + (if (string? const) + (case const + [else (token-sat 'id (string->symbol const))]) + (case const + [#\( (token-sat 'lparen const)] + [#\) (token-sat 'rparen const)] + [#\! (token-sat 'bang const)] + [else (errorf 'constant->parser "don't know how to construct a parser for ~a" const)])))) + (meta define (constant->markdown k) + (format "~a" k)) + (define binop->parser + (lambda (binop) + (define (binop-sat type val) + (is val + (where [x <- item] (and (token? x) (eq? (token-type x) type) (eq? (token-value x) val))))) + (define (unexpected) (errorf 'binop->parser "don't know how to construct a parser for ~a" binop)) + (if (string? binop) + (binop-sat 'binop + (case binop + ["=" '=] + ["+" '+] + ["-" '-] + ["*" '*] + ["/" '/] + [else (unexpected)])) + (unexpected)))) + (define make-src + (lambda (bfp efp) + (make-source-object *sfd* bfp efp))) (include "ez-grammar.ss")) (define token @@ -330,102 +352,219 @@ (when (grammar-trace) (printf " ~s is [~s, ~s]? => ~s~%" x type val ans)) ans)))]))])) - (define-grammar expr - (expr - [integer :: src (token 'integer) => + (define identifier (token 'id)) + + (define integer (token 'integer)) + + (define-grammar expr (markdown-directory ".") + (TERMINALS + (identifier (x y) (DESCRIPTION ("An identifier is ..."))) + (integer (i) (DESCRIPTION ("An integer literal is ...")))) + (expr (e) + (BINOP src ((RIGHT "=") (LEFT "+" "-") (LEFT "*" "/")) t) => + (lambda (src op x y) + (make-annotation `(,op ,x ,y) src `(,op ,(annotation-stripped x) ,(annotation-stripped y))))) + (term (t) + [test-SEP+ :: src "sepplus" #\( (SEP+ e #\;) #\) => + (lambda (src e+) + (make-annotation `(SEP+ ,@e+) src `(SEP+ ,@(map annotation-stripped e+))))] + [test-SEP* :: src "sepstar" #\( (SEP* e #\,) #\) => + (lambda (src e*) + (make-annotation `(SEP* ,@e*) src `(SEP* ,@(map annotation-stripped e*))))] + [test-OPT :: src "opt" #\( (OPT e #f) #\) => + (lambda (src maybe-e) + (if maybe-e + (make-annotation `(OPT ,maybe-e) src `(OPT ,(annotation-stripped maybe-e))) + (make-annotation `(OPT) src `(OPT))))] + [test-K+ :: src "kplus" #\( (K+ e) #\) => + (lambda (src e+) + (make-annotation `(K+ ,@e+) src `(K+ ,@(map annotation-stripped e+))))] + [test-K* :: src "kstar" #\( (K* e) #\) => + (lambda (src e*) + (make-annotation `(K* ,@e*) src `(K* ,@(map annotation-stripped e*))))] + [varref :: src x => + (lambda (src id) + (make-annotation `(id ,id) src `(id ,id)))] + [intref :: src i => (lambda (src n) - `(int ,src ,n))] - [becomes :: src "=>" expr => - (lambda (src e) - `(=> ,src ,e))] - [becomes! :: src "=>" #\! expr => - (lambda (src e) - `(=>! ,src ,e))] - [group :: src #\( expr #\) => + (make-annotation `(int ,n) src `(int ,n)))] + [group :: src #\( e #\) => (lambda (src e) `(group ,src ,e))])) (define parse - (lambda (fn) - (let ([ip (open-input-file fn)]) - (dynamic-wind - void - (lambda () - (let ([token-stream (lexer fn ip)]) - (define (oops) - (let ([last-token (stream-last-forced token-stream)]) - (if last-token - (errorf 'parse "parse error at or before character ~s of ~a" (token-bfp last-token) fn) - (errorf 'parse "no expressions found in ~a" fn)))) -;;; return the first result, if any, for which the input stream was entirely consumed. - (let loop ([res* (expr token-stream)]) - (if (null? res*) - (oops) - (let ([res (car res*)]) - (if (parse-consumed-all? res) - (parse-result-value res) - (loop (cdr res*)))))))) - (lambda () (close-input-port ip)))))) - ) + (lambda (fn ip) + (let ([token-stream (lexer fn ip)]) + (define (oops) + (let ([last-token (stream-last-forced token-stream)]) + (if last-token + (errorf 'parse "parse error at or before character ~s of ~a" (token-bfp last-token) fn) + (errorf 'parse "no expressions found in ~a" fn)))) + ;;; return the first result, if any, for which the input stream was entirely consumed. + (let loop ([res* (expr token-stream)]) + (if (null? res*) + (oops) + (let ([res (car res*)]) + (if (parse-consumed-all? res) + (parse-result-value res) + (loop (cdr res*)))))))))) + +(define run + (lambda (fn) + (import parser) + (let* ([ip (open-file-input-port fn)] + [sfd (make-source-file-descriptor fn ip #t)] + [ip (transcoded-port ip (native-transcoder))]) + (fluid-let ([*sfd* sfd]) + (eval + `(let () + (define-syntax define-ops + (lambda (x) + (syntax-case x () + [(_ op ...) + #`(begin + (define-syntax op + (lambda (x) + (let ([src (annotation-source (syntax->annotation x))]) + (with-syntax ([bfp (source-object-bfp src)] [efp (source-object-efp src)]) + (syntax-case x () + [(_ e (... ...)) #'`(op (bfp . efp) ,e (... ...))]))))) + ...)]))) + (define-ops SEP+ SEP* OPT K+ K* id int group) + (define-ops = + - * /) + (define x 'x) + (define y 'y) + (define z 'z) + ,(dynamic-wind + void + (lambda () (parse fn ip)) + (lambda () (close-input-port ip))))))))) (define (ez-grammar-test) - (import (parser)) - (with-output-to-file "ez-grammar-test1" - (lambda () - (for-each display - '( - "1347\n" - ))) - 'replace) - - (with-output-to-file "ez-grammar-test2" - (lambda () - (for-each display - '( - "\n" - "/* hello */ => ( => 1253) /* goodbye\n" - " 111111111122222222223333333333\n" - "123456789012345678901234567890123456789\n" - "*/\n" - ))) - 'replace) - - (with-output-to-file "ez-grammar-test3err" - (lambda () - (for-each display - '( - "\n" - "/* hello */ => (=> 1253 =>) /* goodbye\n" - " 111111111122222222223333333333\n" - "123456789012345678901234567890123456789\n" - "*/\n" - ))) - 'replace) - - (with-output-to-file "ez-grammar-test4err" - (lambda () - (for-each display - '( - "3 /*\n" - ))) - 'replace) - - (unless (guard (c [else #f]) (equal? (parse "ez-grammar-test1") (quote (int (0 . 3) 1347)))) - (printf "test 1 failed\n")) - (delete-file "ez-grammar-test1") - (unless (guard (c [else #f]) (equal? (parse "ez-grammar-test2") (quote (=> (13 . 25) (group (16 . 25) (=> (18 . 24) (int (21 . 24) 1253))))))) - (printf "test 2 failed\n")) - (delete-file "ez-grammar-test2") - (unless (guard (c [else (and (equal? (condition-message c) "parse error at or before character ~s of ~a") (equal? (condition-irritants c) (quote (25 "ez-grammar-test3err"))))]) (parse "ez-grammar-test3err") #f) - (printf "test 3 failed\n")) - (delete-file "ez-grammar-test3err") - (unless (guard (c [else (and (equal? (condition-message c) "unexpected ~a at character ~s of ~a") (equal? (condition-irritants c) (quote ("eof" 6 "ez-grammar-test4err"))))]) (parse "ez-grammar-test4err") #f) - (printf "test 4 failed\n")) - (delete-file "ez-grammar-test4err") - (printf "end of tests\n")) + (define n 0) + (define test + (lambda (line* okay?) + (set! n (+ n 1)) + (let ([fn (format "testfile~s" n)]) + (with-output-to-file fn + (lambda () (for-each (lambda (line) (printf "~a\n" line)) line*)) + 'replace) + (let ([result (parameterize ([compile-profile #t] [compile-interpret-simple #f]) + (guard (c [else c]) (run fn)))]) + (guard (c [else #f]) (profile-dump-html)) + (delete-file fn) + (delete-file "profile.html") + (delete-file (format "~a.html" fn)) + (unless (okay? result) + (printf "test ~s failed\n" n) + (printf " test code:") + (for-each (lambda (line) (printf " ~a\n" line)) line*) + (printf " result:\n ") + (if (condition? result) + (begin (display-condition result) (newline)) + (parameterize ([pretty-initial-indent 4]) + (pretty-print result))) + (newline)))))) + + (define-syntax returns + (syntax-rules () + [(_ k) (lambda (x) (equal? x 'k))])) + + (define-syntax oops + (syntax-rules () + [(_ (c) e1 e2 ...) + (lambda (c) (and (condition? c) e1 e2 ...))])) + + (test + '( + "1347" + ) + (returns + (int (0 . 4) 1347))) + + (test + '( + "3 /*" + ) + (oops (c) + (equal? (condition-message c) "unexpected ~a at character ~s of ~a") + (equal? (condition-irritants c) '("eof" 6 "testfile2")))) + + (test + '( + "3 / 4 + 5 opt(6)" + ) + (oops (c) + (equal? (condition-message c) "parse error at or before character ~s of ~a") + (equal? (condition-irritants c) '(10 "testfile3")))) + + (test + '( + "x = y = 5" + ) + (returns + (= + (0 . 9) + (id (0 . 1) x) + (= (4 . 9) (id (4 . 5) y) (int (8 . 9) 5))))) + + (test + '( + "x = y = x + 5 - z * 7 + 8 / z" + ) + (returns + (= + (0 . 29) + (id (0 . 1) x) + (= + (4 . 29) + (id (4 . 5) y) + (+ + (8 . 29) + (- + (8 . 21) + (+ (8 . 13) (id (8 . 9) x) (int (12 . 13) 5)) + (* (16 . 21) (id (16 . 17) z) (int (20 . 21) 7))) + (/ (24 . 29) (int (24 . 25) 8) (id (28 . 29) z))))))) + + (test + '( + "opt(opt(opt()))" + ) + (returns + (OPT (0 . 15) (OPT (4 . 14) (OPT (8 . 13)))))) + + (test + '( + "kstar(3 4 kplus(1 2 3 kstar()))" + ) + (returns + (K* (0 . 31) + (int (6 . 7) 3) + (int (8 . 9) 4) + (K+ (10 . 30) + (int (16 . 17) 1) + (int (18 . 19) 2) + (int (20 . 21) 3) + (K* (22 . 29)))))) + + (test + '( + "sepplus( opt() ; opt(5) ; sepstar(17, 34) ; sepstar())" + ) + (returns + (SEP+ (0 . 54) + (OPT (9 . 14)) + (OPT (17 . 23) (int (21 . 22) 5)) + (SEP* (26 . 41) (int (34 . 36) 17) (int (38 . 40) 34)) + (SEP* (44 . 53))))) + + (delete-file "expr.md") + (printf "~s tests ran\n" n) + ) #!eof -The following should print only "end of tests". +The following should print only " tests ran". -echo '(ez-grammar-test)' | scheme -q ez-grammar-test.ss +echo '(ez-grammar-test)' | ../bin/scheme -q ez-grammar-test.ss diff -Nru chezscheme-9.5+dfsg/examples/Makefile chezscheme-9.5.4+dfsg/examples/Makefile --- chezscheme-9.5+dfsg/examples/Makefile 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/examples/Makefile 2020-08-31 02:35:12.000000000 +0000 @@ -25,4 +25,4 @@ all: ; echo "(time (for-each compile-file (map symbol->string '(${src}))))" | ${Scheme} -clean: ; /bin/rm -f $(obj) +clean: ; /bin/rm -f $(obj) expr.md diff -Nru chezscheme-9.5+dfsg/examples/socket.ss chezscheme-9.5.4+dfsg/examples/socket.ss --- chezscheme-9.5+dfsg/examples/socket.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/examples/socket.ss 2020-08-31 02:35:12.000000000 +0000 @@ -16,7 +16,7 @@ ;;; Requires from C library: ;;; close, dup, execl, fork, kill, listen, tmpnam, unlink (case (machine-type) - [(i3le ti3le) (load-shared-object "libc.so.6")] + [(i3le ti3le a6le ta6le) (load-shared-object "libc.so.6")] [(i3osx ti3osx a6osx ta6osx) (load-shared-object "libc.dylib")] [else (load-shared-object "libc.so")]) @@ -217,7 +217,7 @@ (printf "client:~%~a~%server:~%" (utf8->string bv)))))) > (get) client: -Chez Scheme Version 9.4.1 +Chez Scheme Version 9.5.1 Copyright 1984-2017 Cisco Systems, Inc. > diff -Nru chezscheme-9.5+dfsg/.gitignore chezscheme-9.5.4+dfsg/.gitignore --- chezscheme-9.5+dfsg/.gitignore 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.gitignore 2020-08-31 02:35:12.000000000 +0000 @@ -17,3 +17,35 @@ /ti3nt/ /ti3osx/ /xc-*/ +*.*run +/csug/math/csug/ +/csug/Makefile +/csug/*.aux +/csug/*.html +/csug/*.tex +/csug/csug.ans +/csug/csug.bbl +/csug/csug.blg +/csug/*.haux +/csug/csug.htoc +/csug/*.idx +/csug/csug.ilg +/csug/csug.ind +/csug/csug.pdf +/csug/*.rfm +/csug/csug.sfm +/csug/csug.toc +/csug/*.hidx +/csug/libslisted* +/csug/libsrecorded* +/csug/*.log +/release_notes/math/release_notes/ +/release_notes/Makefile +/release_notes/*.tex +/release_notes/*.aux +/release_notes/*.haux +/release_notes/*.html +/release_notes/*.htoc +/release_notes/*.htoc +/release_notes/*.log +/release_notes/release_notes.pdf diff -Nru chezscheme-9.5+dfsg/.gitmodules chezscheme-9.5.4+dfsg/.gitmodules --- chezscheme-9.5+dfsg/.gitmodules 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.gitmodules 2020-08-31 02:35:12.000000000 +0000 @@ -7,3 +7,6 @@ [submodule "stex"] path = stex url = https://github.com/dybvig/stex +[submodule "lz4"] + path = lz4 + url = https://github.com/lz4/lz4.git diff -Nru chezscheme-9.5+dfsg/LOG chezscheme-9.5.4+dfsg/LOG --- chezscheme-9.5+dfsg/LOG 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/LOG 2020-08-31 02:35:12.000000000 +0000 @@ -207,7 +207,7 @@ c/Mf-*, c/Makefile.*nt - removed unnecessary datestamp.c target c/Mf.*nt -- fixed unnessesary blocking in expeditor on Windows. +- fixed unnecessary blocking in expeditor on Windows. c/expeditor.c - eliminated a couple of thread-safety issues and limitations on the sizes of pathnames produced by expansion of tilde (home-directory) @@ -260,7 +260,7 @@ (and palette) and update CSUG to match. update the CSUG screenshots to reflect the refined look. s/pdhtml.ss - csug/system.stex + csug/system.stex csug/canned/profilehtml-orig.png csug/canned/profilehtml.png csug/canned/fatfibhtml-orig.png @@ -481,7 +481,7 @@ primdata.ss - more optimizations for map and for-each with explicit list extend the reductions for map and for-each when the arguments are - explicit lists like (list 1 2 3 ...) or '(1 2 3 ...). + explicit lists like (list 1 2 3 ...) or '(1 2 3 ...). cp0.ss, 4.ms - reverted to the preceding version of cp0 due to failure to preserve @@ -609,3 +609,1513 @@ release-notes.stex, syntax.stex - updated install target to do something more sensible release_notes/Makefile + +9.5.1 changes: +- updated version to 9.5.1 + bintar BUILDING NOTICE makefiles/Mf-install.in scheme.1.in + c/Makefile.i3nt c/Makefile.a6nt c/Makefile.ti3nt c/Makefile.ta6nt + workarea c/scheme.rc s/7.ss s/cmacros.ss + release_notes/release_notes.stex csug/csug.stex csug/use.stex + examples/ez-grammar-test.ss examples/socket.ss + wininstall/Makefile wininstall/*nt.wxs +- Added setting of CHEZSCHEMELIBDIRS to s and mats make files so that + an existing setting will not interfere with the build process, and + added a note to BUILDING that CHEZSCHEMELIBDIRS should be unset in + Version 9.5 and before. + s/Mf-base, mats/Mf-base, BUILDING +- the $case macro used by r6rs:case and case now unconditionally trims + redundant keys and expands into exclusive-cond rather than cond. + it catches references to => before expanding into exclusive-cond + to avoid supporting => as an undocumented and useless extension + of the case syntax. the r6rs:case and case macros now require + multiple clauses rather than leaving the enforcement to exclusive-cond, + and the exclusive-cond macro now requires multiple clauses rather + than leaving the enforcement to cond. + syntax.ss, + 4.ms, root-experr*, patch* +- ifdef'd out include of xlocale.h for glibc, since the glibc + locale.h includes xlocale.h or, in glibc 2.26, its replacement. + expeditor.c +- Updated CSUG to replace \INSERTREVISIONMONTHSPACEYEAR with the current + month and year at the time of generation. + csug.stex, copyright.stex +- Updated configuration to set machine types in the CSUG and release notes + make files, and updated distclean target to remove these files. + configure, makefiles/Makefile-csug.in (renamed from csug/Makefile), + makefiles/Makefile-release_notes.in + (renamed from release_notes/Makefile), + makefiles/Makefile +- added pass-time tracking for pre-cpnanopass passes to compile. + compile.ss +- added inline handler for fxdiv-and-mod + cp0.ss, primdata.ss +- changed order in which return-point operations are done (adjust + sfp first, then store return values, then restore local saves) to + avoid storing return values to homes beyond the end of the stack + in cases where adjusting sfp might result in a call to dooverflood. + cpnanopass.ss, np-languages.ss +- removed unused {make-,}asm-return-registers bindings + cpnanopass.ss +- corrected the max-fv value field of the lambda produced by the + hand-coded bytevector=? handler. + cpnanopass.ss +- reduced live-pointer and inspector free-variable mask computation + overhead + cpnanopass.ss +- moved regvec cset copies to driver so they aren't copied each + time a uvar is assigned to a register. removed checks for + missing register csets, since registers always have csets. + cpnanopass.ss +- added closure-rep else clause in record-inspector-information!. + cpnanopass.ss +- augmented tree representation with a constant representation + for full trees to reduce the overhead of manipulating trees or + subtress with all bits set. + cpnanopass.ss +- tree-for-each now takes start and end offsets; this cuts the + cost of traversing and applying the action when the range of + applicable offsets is other than 0..tree-size. + cpnanopass.ss +- introduced the notion of poison variables to reduce the cost of + register/frame allocation for procedures with large sets of local + variables. When the number of local variables exceeds a given + limit (currently hardwired to 1000), each variable with a large + live range is considered poison. A reasonable set of variables + with large live ranges (the set of poison variables) is computed + by successive approximation to avoid excessive overhead. Poison + variables directly conflict with all spillables, and all non-poison + spillables indirectly conflict with all poison spillables through + a shared poison-cset. Thus poison variables cannot live in the + same location as any other variable, i.e., they poison the location. + Conflicts between frame locations and poison variables are handled + normally, which allows poison variables to be assigned to + move-related frame homes. Poison variables are spilled prior to + register allocation, so conflicts between registers and poison + variables are not represented. move relations between poison + variables and frame variables are recorded as usual, but other + move relations involving poison variables are not recorded. + cpnanopass.ss, np-languages.ss +- changed the way a uvar's degree is decremented by remove-victim!. + instead of checking for a conflict between each pair of victim + and keeper and decrementing when the conflict is found, remove-victim! + now decrements the degree of each var in each victim's conflict + set. while this might decrement other victims' degrees unnecessarily, + it can be much less expensive when large numbers of variables are + involved, since the number of conflicts between two non-poison + variables should be small due to the selection process for + (non-)poison variables and the fact that the unspillables introduced + by instruction selection should also have few conflicts. That + is, it reduces the worst-case complexity of decrementing degrees + from O(n^2) to O(n). + cpnanopass.ss +- took advice in compute-degree! comment to increment the uvars in + each registers csets rather than looping over the registers for + each uvar asking whether the register conflicts with the uvar. + cpnanopass.ss +- assign-new-frame! now zeros out save-weight for local saves, since + once they are explicitly saved and restored, they are no longer + call-live and thus have no save cost. + cpnanopass.ss +- desensitized the let-values source-caching timing test slightly + 8.ms +- updated allx, bullyx patches + patch* +- attempt to stabilize timing tests let-values source-caching + test and ephemeron gc test while resensitizing the former + 8.ms, 4.ms +- various formatting and comment corrections + workarea, + s/Mf-base, bytevector.ss, cpnanopass.ss, date.ss, + 5_6.ms, examples.ms +- updated newrelease to handle mats/Mf-*nt + newrelease mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt mats/Mf-ti3nt +- fixed gather-filedata's sort of profile entries. for any two + entries x and y in the list produced by the sort call, if x's + bfp = y's bfp, x should come before y if x's efp < y's efp. + The idea is that enclosing entries should always come later + in the list. this affects only languages where two expressions + can start at the same character position. + pdhtml.ss +- expanded capability of ez-grammar with support for simpl + parsing of binary operators w/precedence and associativity + and automatically generated markdown grammar descriptions. + ez-grammar-test.ss now also doubles as a test of pdhtml for + algebraic languages. + mats/examples.ms, + examples/ez-grammar.ss, examples/ez-grammar-test.ss, + examples/Makefile +- maybe-compile-{file,program,library} and automatic import + compilation now treat a malformed object file as if it were + not present and needs to be regenerated. A malformed object + file (particularly a truncated one) might occur if the compiling + processes is killed or aborts before it has a chance to delete + a partial object file. + syntax.ss, + 7.ms +- fix signature of bytevector-[u/s]16-native-set! + primdata.ss +- fix enumerate signature + primdata.ss +- added support for Visual Studio 2017.15.5 + wininstall/locate-vcredist.bat +- fixed substring-fill! and vector-fill! to return void, reflecting the + documented return value of unspecified value. Also changes substring-fill! + to use define-who instead of repeating 'substring-fill! in all the error + messages. + 5_4.ss, 5_6.ss +- fix mat of substring-fill! + after the recent change, the result of substring-fill! is void + 5_5.ms +- fix a few signatures + primdata.ss +- fix comment about Sscheme_program + main.c +- fix even? and odd? to error on exceptional flonums + 5_3.ss, 5_3.ms, fl.ms, root-experr*, patch* +- fix bug in date->time-utc caused by incorrect use of difftime in Windows + stats.c, date.ms, release_notes.stex +- Check that first argument of map is a procedure in cp02 expansion + to raise the same error that the non expanded version + cp0.ss +- avoid building the result list in a map that is called for effect + cp0.ss +- added tests to ensure the optimize-level version 2 of map and for-each raise + a non-procedure exception when the first argument is not a procedure, even + when the rest of the program is compiled at optimize level 3. + 4.ms, root-experr-compile-0-f-f-f, patch-compile-0-t-f-f, + patch-compile-0-f-t-f, patch-interpret-0-f-t-f, patch-interpret-0-f-f-f, + patch-interpret-3-f-t-f, patch-interpret-3-f-f-f +- fix bounds checking with an immediate index on immutable vectors, + fxvectors, strings, and bytevectors + cpnanopass.ss, 5_5.ms, 5_6.ms, bytevector.ms +- fix a few signatures + primdata.ss +- more staid and consistent Mf-cross main target + Mf-cross +- cpletrec now replaces the incoming prelexes with new ones so + that it doesn't have to alter the flags on the incoming ones, since + the same expander output is passed through the compiler twice while + compiling a file with macro definitions or libraries. we were + getting away without this just by luck. + cpletrec.ss +- pure? and ivory? now return #t for a primref only if the prim is + declared to be a proc, since some non-proc prims are mutable, e.g., + $active-threads and $collect-request-pending. + cp0.ss +- $error-handling-mode? and $eol-style? are now properly declared to + be procs rather than system state variables. + primdata.ss +- the new pass $check-prelex-flags verifies that prelex referenced, + multiply-referenced, and assigned flags are set when they + should be. (it doesn't, however, complain if a flag is set + when it need not be.) when the new system parameter + $enable-check-prelex-flags is set, $check-prelex-flags is + called after each major pass that produces Lsrc forms to verify + that the flags are set correctly in the output of the pass. + this parameter is unset by default but set when running the + mats. + cprep.ss, back.ss, compile.ss, primdata.ss, + mats/Mf-base +- removed the unnecessary set of prelex referenced flag from the + build-ref routines when we've just established that it is set. + syntax.ss, compile.ss +- equivalent-expansion? now prints differences to the current output + port to aid in debugging. + mat.ss +- the nanopass that patches calls to library globals into calls to + their local counterparts during whole-program optimization now + creates new prelexes and sets the prelex referenced, multiply + referenced, and assigned flags on the new prelexes rather than + destructively setting flags on the incoming prelexes. The + only known problems this fixes are (1) the multiply referenced + flag was not previously being set for cross-library calls when + it should have been, resulting in overly aggressive inlining + of library exports during whole-program optimization, and (2) + the referenced flag could sometimes be set for library exports + that aren't actually used in the final program, which could + prevent some unreachable code from being eliminated. + compile.ss +- added support for specifying default record-equal and + record-hash procedures. + primdata.ss, cmacros.ss, cpnanopass.ss, prims.ss, newhash.ss, + gc.c, + record.ms +- added missing call to relocate for subset-mode tc field, which + wasn't burning us because the only valid non-false value, the + symbol system, is in the static generation after the initial heap + compaction. + gc.c +- added a lambda-commonization pass that runs after the other + source optimizations, particularly inlining, and a new parameter + that controls how hard it works. the value of commonization-level + ranges from 0 through 9, with 0 disabling commonization and 9 + maximizing it. The default value is 0 (disabled). At present, + for non-zero level n, the commonizer attempts to commonize + lambda expressions consisting of 2^(10-n) or more nodes. + commonization of one or more lambda expressions requires that + they have identical structure down to the leaf nodes for quote + expressions, references to unassigned variables, and primitives. + So that various downstream optimizations aren't disabled, there + are some additional restrictions, the most important of which + being that call-position expressions must be identical. The + commonizer works by abstracting the code into a helper that + takes the values of the differing leaf nodes as arguments. + the name of the helper is formed by concatenating the names of + the original procedures, separated by '&', and this is the name + that will show up in a stack trace. The source location will + be that of one of the original procedures. Profiling inhibits + commonization, because commonization requires profile source + locations to be identical. + cpcommonize.ss (new), compile.ss, interpret.ss, cprep.ss, + primdata.ss, s/Mf-base, + mats/Mf-base +- cpletrec now always produces a letrec rather than a let for + single immutable lambda bindings, even when not recursive, for + consistent expand/optimize output whether the commonizer is + run or not. + cpletrec.ss, + record.ms +- trans-make-ftype-pointer no longer generates a call to + $verify-ftype-address if the address expression is a call to + ftype-pointer-address. + ftype.ss +- Remove special case for (#2%map p '()) in cp0 + so the reduced version checks that p is a procedure. + Also make the same change for #2%for-each. + cp0.ss, 4.ms +- Mitigate a race condition in Windows when deleting files and directories. + windows.c +- add (& ftype) argument/result for foreign-procedure, which supports + struct arguments and results for foreign calls + syntax.ss, ftype.ss, cpnanopass.ss, x86.ss, x86_64.ss, + base-lang.ss, np-languages.ss, cprep.ss, primdata.ss, + schlib.c, prim.c, externs.h + mats/foreign4.c, mats/foreign.ms mats/Mf-* + foreign.stex, release_notes.stex +- reworked the S_call_help/S_return CCHAIN handling to fix a bug in which + the signal handler could trip over the NULL jumpbuf in a CCHAIN record. + schlib.c +- install equates.h, kernel.o, and main.o on unix-like systems + Mf-install.in +- standalone export form now handles (import import-spec ...) + 8.ms, syntax.ss, release_notes.stex +- add collect-rendezvous + prim.c, 7.ss, primdata.ss, 7.ms, smgmt.stex, release_notes.stex +- added identifier? checks to detect attempts to use non-identifier + field names in define-record-type field specs. + syntax.ss, + record.ms, root-experr* +- fixed an issue with the library system where an exception that occurs + during visit or revisit left the library in an inconsistent state that + caused it to appear that it was still in the process of running. This + manifested in it raising a cyclic dependency exception, even though + there really is not a cyclic dependency. The various library + management functions involved will now reset the part of the library + when an exception occurs. This also means that if the library visit + or revisit failed for a transient reason (such as a missing or + incorrect library version that can be fixed by updating the + library-directories) it is now possible to recover from these errors. + expand-lang.ss, syntax.ss, interpret.ss, compile.ss, cprep.ss, + 8.ms +- Added -Wno-implicit-fallthrough flag to macOS C makefiles. + c/Mf-a6osx, c/Mf-i3osx, c/Mf-ta6osx, c/Mf-ti3osx +- handle compiled library code in boot files once base boot is loaded + globals.h, scheme.c, 7.ss, 7.ms, primdata.ss +- add newline to (import-notify) message in compile-whole-library and + compile-whole-program + compile.ss +- add a __collect_safe convention for foreign procedures and callables + to automate thread [de]activation + syntax.ss, ftype.ss, x86.ss, x86_64.ss, ppc32.ss, + cmacros.ss, base-lang.ss, np-languages.ss, cprep.ss, cpcommonize.ss, + cp0.ss, cpcheck.ss, cpvalid.ss, interpret.ss, cpletrec.ss, + thread.c, prim.c, externs.h, foreign.stex, release_notes.stex, + mats/Mf-t*, foreign.ms, foreign4.c +- Don't install equates.h + Mf-install.in, wininstall/*nt.wxs +- Windows install now sets HeapSearchPath in the registry + wininstall/product.wxs +- Use Windows path separator character when finding boot files on Windows. + scheme.c +- Propagate enable-check-prelex-flags to separate-eval sub-process in tests. + mats.ss +- Reject attempts to visit libraries that compile-whole-program has rendered + invisible due to libs-visible? flag. + compile.ss, 7.ms, root-experr-compile-0-f-f-f, root-experr-compile-2-f-f-f, + patch-compile-0-f-t-f, patch-compile-0-t-f-f, patch-interpret-0-f-f-f, + patch-interpret-0-f-t-f, patch-interpret-3-f-f-f, patch-interpret-3-f-t-f +- Double FMTBUFSIZE to fix compilation with gcc-8 + c/prim5.c +- Improved Unicode support for command-line arguments, environment + variables, the C interface and error messages, and the Windows + registry, DLL loading, and process creation + scheme.h, alloc.c, externs.h, fasl.c, foreign.c, io.c, main.c, + prim5.c, scheme.c, schlib.c, schsig.c, stats.c, system.h, + version.h, windows.c, foreign.stex, system.stex, mkheader.ss, + prims.ss +- Repair x86_64 `&` foreign-procedure result type handling for types of a + small size that is not a multiple of the word size + x86_64.ss, foreign.ms, foreign4.c +- Avoid an occasional invalid memory violation on Windows in S_call_help + schlib.c +- Updated csug socket code to match that in examples folder + csug/foreign.stex, examples/socket.ss +- add an option --disable-x11 + c/version.h, configure +- allow s_ee_get_clipboard to use the pastebuffer on macOS even when X11 is not + available. + expeditor.c +- Adjust cp0 to not replace a procedure name from a let wrapper + cp0.ss, misc.ms +- allx now runs all up to three (rather than two) times to eliminate + bootstrap failures after small changes like the recent change to + procedure names, so we don't have to rebuild the boot files as often. + Mf-base +- Fix tests for cp0 procedure-name change + misc.ms, patch-compile-0-f-t-f, patch-interpret-0-f-t-f +- add load-compiled-from-port and Sregister_boot_file_fd for loading modes + based on open files instead of paths + 7.ss, primdata.ss, mkheader.ss, scheme.c + 7.ms, foreign.stex, system.stex +- auto-config improvement, detect if X11 exist on Mac OS X + configure +- added box-cas! and vector-cas! + prims.ss, cpnanopass.ss, np-languages.ss, + cmacros.ss, library.ss, primdata.ss + x86_64.ss x86.ss, ppc32.ss, arm32.ss, + 5_6.ms, 5_8.ms, root-experr*, + objects.stex, release_notes.stex +- add generate-procedure-source-information + cmacros.ss, compile.ss, cpnanopass.ss, inspect.ss, + primdata.ss, prims.ss, misc.ms, + system.stex, release_notes.stex +- fix boot_call and the invoke code object to handle multiple values + scheme.c, cpnanopass.ss, 7.ms, release_notes.stex, system.stex +- the compiler now uses a temporary variable to hold the return + value of a nested call across the restore-local-saves form to + properly handle the case where the destination lvalue is an mref + whose base and/or index is a local save. + cpnanopass.ss, + misc.ms +- flush expand-output and expand/optimize-output ports + compile.ss +- clarify "unknown module" error message in determine-module-imports + syntax.ss +- restore the import code on reset to provide consistent error message + syntax.ss, 8.ms +- add uninstall target + Makefile.in, Makefile-workarea.in, Mf-install.in +- add PDB files for Windows + c/*nt, wininstall/*nt.wxs +- use uuid_generate on unix-like systems for S_unique_id + BUILDING, c/Mf-*le, stats.c, objects.stex, release_notes.stex +- when thread_get_room exhausts the local allocation area, it now + goes through a common path with S_get_more_room to allocate a new + local allocation area when appropriate. this can greatly reduce + the use of global allocation (and the number of tc mutex acquires + in threaded builds) when a lot of small objects are allocated by + C code with no intervening Scheme-side allocation or dirty writes. + alloc.c, types.h, externs.h +- made Windows filename handling in directory-list, file-access-time, + file-change-time, file-directory?, file-exists?, file-modification-time, + get-mode, and path-absolute more consistent with + https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file + 6.ss, 6.ms, io.stex, release_notes.stex +- fix handling of calling code's address for locking around a callable, + where the cp register copy in the thread context could be changed + in the callable prep before S_call_help gets it + cpnanopass.ss, x86_64.ss, x86.ss, foreign2.c, foreign.ms +- added initialization of seginfo sorted and trigger_ephemerons fields. + segment.c +- redirecting output of first two checkboot runs to /dev/null so the + ignored exception, if any, does not show up in the make output. + s/Mf-base +- fixed 7.ms to specify the relative path of testfile.boot + 7.ms +- profile counts are now maintained even for code that has been + reclaimed by the collector and must be released explicitly by the + programmer via (profile-release-counters). + pdhtml.ss, primdata.ss, + globals.h, externs.h, fasl.c, prim5.c, prim.c, alloc.c, scheme.c, + misc.ms, + release_notes.stex, system.stex +- clarified required use of scheme-start to start an application + packaged as a boot file and added a short "myecho" example. + use.stex +- fixed a bug in cp0 bug that could fold the apply of a primitive, where + the last argument is not a list, as if it were a call to the primitive + with those arguments + cp0.ss, cp0.ms +- fix allocation of string/bytevector for a foreign-callable argument + or foreign-call return + cpnanopass.ss, foreign.ms, foreign2.c +- foreign-callable code objects are now flagged as "templates", and + the collector now refuses to discard relocation information for + code objects marked as templates when copying them to the static + generation. + cmacros.ss, cpnanopass.ss, + gc.c, + 7.ms +- add hashtable-cells and add a size argument to hashtable-keys, + hashtable-values, and hashtable-entries + newhash.ss, primdata.ss, + hash.ms, root-experr*, patch*, + objects.stex, release_notes.stex +- the body of load-library is now wrapped in a $pass-time with + to show the time spent loading libraries separately from the time + spent in expand. + syntax.ss +- interpret now plays the pass-time game + interpret.ss +- added compile-time-value? predicate and + compile-time-value-value accessor + syntax.ss, primdata.ss, + 8.ms, primvars.ms, root-experr* +- $pass-stats now returns accurrate stats for the currently timed + pass. + 7.ss +- compile-whole-program and compile-whole-library now propagate + recompile info from the named wpo file to the object file + to support maybe-compile-program and maybe-compile-library in + the case where compile-whole-{program,library} overwrites the + original object file. + compile.ss, + 7.ms, mat.ss, primvars.ms +- replaced the ancient and unusable bintar with one that creates + a useful tarball for binary installs + bintar +- generated Mf-install InstallBin (InstallLib, InstallMan) now + correctly indirects through InstallPrefix if the --installbin + (--installlib, --installman) configure flag is not present. + configure +- removed definition of generate-procedure-source-information + patch.ss +- guardian tconc cells are now allocated in generation 0 in the hope + that they can be released more quickly. + gc.c +- added ftype-guardian syntax: (ftype-guardian A) creates a new + guardian for ftype pointers of type A, the first base field (or + one of the first base fields in the case of unions) of which must + be a word-sized integer with native endianness representing a + reference count. ftype pointers are registered with and retrieved + from the guardian just like objects are registered with and + retrieved from any guardian. the difference is that the garbage + collector decrements the reference count before resurrecting an + ftype pointer and resurrects only those whose reference counts + become zero, i.e., are ready for deallocation. + ftype.ss, cp0.ss, cmacros.ss, cpnanopass.ss, prims.ss, primdata.ss, + gc.c, + 4.ms, root-experr* +- fixed a bug in automatic recompilation handling of missing include + files specified with absolute pathnames or pathnames starting with + "./" or "..": was erroring out in file-modification-time with a + file-not-found or other exception rather than recompiling. + syntax.ss, + 7.ms, root-experr*, patch* +- changed inline vector-for-each and string-for-each code to + put the last call to the procedure in tail position, as was + already done for the library definitions and for the inline + code for for-each. + cp0.ss, + 5_4.ms, 5_6.ms +- the compiler now generates better inline code for the bytevector + procedure. instead of one byte memory write for each argument, + it writes up to 4 (32-bit machines) or 8 (64-bit machines) bytes + at a time, which almost always results in fewer instructions and + fewer writes. + cpnanopass.ss, + bytevector.ms +- packaged unchanging implicit reader arguments into a single record + to reduce the number of arguments. + read.ss +- recoded run-vector to handle zero-length vectors. it appears + we're not presently generating empty vectors (representing empty + groups), but the fasl format permits them. + 7.ss +- reverted the earlier change to restore indirection through + InstallPrefix, since it didn't and can't play well with the + generated config.h. Instead removed InstallPrefix entirely so + it isn't an attractive hazzard. + configure, makefiles/Mf-install.in +- fixed bug in inline-lists: wasn't setting multiply-referenced flag + on p to account for the procedure? check at optimize-level 2. + cpletrec.ss +- fixed bug in check-prelex-flags: was hardwiring $cpcheck-prelex-flags + "after" argument to 'uncprep rather than passing along its argument. + compile.ss +- commented out local definition of sorry! so that problems detected + by $cpcheck-prelex-flags actually result in a raised exception. + cprep.ss +- exposed the default-library-search-handler and a library-search-handler + parameter to permit more control over the search for libraries during + import, compile-whole-library, and compile-whole-program + syntax.ss, primdata.ss, + 8.ms, + libraries.stex +- added fix for whole program/library compilation bug with help from + @owaddell who originally reported the problem in issue 386. this bug + arises from the way the parts of the combined library, and their + binary dependencies, are invoked when one of the constituent libraries + is invoked. consider, for example, a combined library that contains + (A) and (B), where (B) depends on a binary library (C). depending on + the sort order of (A) and (B), which may be unconstrained in the + partial ordering established by library dependencies, invoking (A) may + result in the invoke code for (B) being run first, without (B) ever + being explicitly invoked. this can result in bindings required from + (C) by the invoke code in (B) to be unbound. even in the case where + (A) comes before (B) in the topological sort, if they are combined + into the same cluster, (B)'s invoke code will be run as part of + invoking (A). the solution is two part: first we extend the invoke + requirements of the first library in the cluster to include the binary + libraries that precede it in the topological sort and add a dependency + on the first library in the cluster to all of the other libraries in + the cluster. this means no matter which library in the cluster is + invoked first, it will cause the first library to be invoked, in turn + ensuring the binary libraries that precede it are invoked. when there + are multiple clusters, a dependency is added from each cluster to the + first library in the cluster that precedes it. this ensures that + invoking a library in a later cluster first, will still cause all of + the dependencies of the previous clusters to be invoked. ultimately, + these extra dependencies enforce an ordering on the invocation of the + source and binary libraries that matches the topological sort, even if + the topological sort was under constrained. to maintain the property + that import requirements are a superset of the invoke and visit + requirements, we also extend the import requirements to include the + extended invoke requirements. the import requirements are also added + to the dependency graph to further constrain the topological sort and + ensure that we do not introduce artificial cycles in the import graph. + compile.ss, + 7.ms, + root-experr*, patch* +- fixed failure to install examples for tarball installs + Mf-install.in +- improved packaging support: + replaced bintar script with bintar directory and make file; + tarballs are created via "make create-tarball" and are placed in + the workarea's bintar directory. added rpm directory and make + file for creating RPMs via "make create-rpm". added pkg directory + and make file for creating OSX packages via "make create-pkg". + bintar (removed), bintar/Makefile (new), rpm/Makefile (new), + pkg/Makefile (new), pkg/rmpkg (new), workarea, checkin, newrelease, + Makefile.in, Makefile-workarea.in. +- improved error message for compile-whole-program and + compile-whole-library when a top-level expression is discovered while + processing a wpo file. + compile.ss +- minor build and new-release updates + checkin, newrelease, Makefile.in, Makefile-workarea.in +- added library-search-handler, compile-whole-library, and improved + packaging to the release notes. + release_notes/release_notes.stex + +9.5.2 changes: +- updated version to 9.5.2 + bintar/Makefile rpm/Makefile pkg/Makefile BUILDING NOTICE + makefiles/Mf-install.in makefiles/Makefile-csug.in scheme.1.in + c/Makefile.a6nt c/Makefile.i3nt c/Makefile.ta6nt c/Makefile.ti3nt + mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt mats/Mf-ti3nt workarea + c/scheme.rc s/7.ss s/cmacros.ss release_notes/release_notes.stex + csug/copyright.stex csug/csug.stex rpm/Makefile pkg/Makefile + wininstall/Makefile wininstall/a6nt.wxs wininstall/i3nt.wxs + wininstall/ta6nt.wxs wininstall/ti3nt.wxs +- fixed handling of bintar, rpm, pkg make files + newrelease +- fixed a bug in the fasl representation and reading of mutually + recursive ftypes where one of the members of the cycle is the + parent of another, which manifested in the fasl reader raising + bogus "incompatible record type" exceptions. (The bug could also + affect other record-type descriptors with cycles involving parent + rtds and "extra" fields.) object files created before this fix + are incompatible with builds with this fix, and objects files + created after this fix are incompatible builds without this fix. + fasl.ss, strip.ss, + fasl.c, + ftype.ms, + release_notes.stex + +9.5.3 changes: +- updated version to 9.5.3 + BUILDING NOTICE makefiles/Mf-install.in makefiles/Makefile-csug.in + scheme.1.in c/Makefile.a6nt c/Makefile.i3nt c/Makefile.ta6nt + c/Makefile.ti3nt mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt + mats/Mf-ti3nt workarea c/scheme.rc s/7.ss s/cmacros.ss + release_notes/release_notes.stex csug/copyright.stex csug/csug.stex + bintar/Makefile rpm/Makefile pkg/Makefile wininstall/Makefile + wininstall/a6nt.wxs wininstall/i3nt.wxs wininstall/ta6nt.wxs + wininstall/ti3nt.wxs +- fixed welcome text and copyright year in macOS package + newrelease pkg/Makefile release_notes.stex +- update Windows spin-loop count for deleting files and directories + windows.c +- install a file containing revision information alongside boot files; + embed git revision in exported source archives + bintar/Makefile Mf-install.in wininstall/*nt.wxs + s/Mf-base s/.gitattributes s/update-revision +- ignore multiple-value return from interleaved init expressions in + top-level-program + syntax.ss, 8.ms +- add name fields for mutexes and condition variables, now `make-mutex` and + `make-condition` accept an optional argument `name`, which must be a + symbol or #f. The name, if not #f, is printed every time the object is + printed, which is useful for debugging + primdata.ss prims.ss print.ss + thread.ms threads.stex +- change the default compression mode to LZ4 and add a compress-format + parameter to select a compression format for output; input infers the + compression format + io.ss, bytevector.ss, back.ss, primdata.ss, + compress.c (new), new-io.c, fasl.c, scheme.c, compress.h (new), + externs.h, system.h, expeditor.c, configure, Mf-*, Makefile.*nt, + workarea, mat.ss, io.ms, io.stex, objects.stex, release_notes.stex, + root-experr*, patch* +- added compress-level parameter to select a compression level for + file writing and changed the default for lz4 compression to do a + better job compressing. finished splitting glz input routines + apart from glz output routines and did a bit of other restructuring. + removed gzxfile struct-as-bytevector wrapper and moved its fd + into glzFile. moved DEACTIVATE to before glzdopen_input calls + in S_new_open_input_fd and S_compress_input_fd, since glzdopen_input + reads from the file and could block. the compress format and now + level are now recorded directly the thread context. replaced + as-gz? flag bit in compressed bytevector header word with a small + number of bits recording the compression format at the bottom of + the header word. flushed a couple of bytevector compression mats + that depended on the old representation. (these last few changes + should make adding new compression formats easier.) added + s-directory build options to choose whether to compress and, if + so, the format and level. + compress-io.h, compress-io.c, new-io.c, equates.h, system.h, + scheme.c, gc.c, + io.ss, cmacros.ss, back.ss, bytevector.ss, primdata.ss, s/Mf-base, + io.ms, mat.ss, bytevector.ms, root-experr*, + release_notes.stex, io.stex, system.stex, objects.stex +- improved the effectiveness of LZ4 boot-file compression to within + 15% of gzip by increasing the lz4 output-port in_buffer size to + 1<<18. With the previous size (1<<14) LZ4-compressed boot files + were about 50% larger. set the lz4 input-port in_buffer and + out_buffer sizes to 1<<12 and 1<<14. there's no clear win at + present for larger input-port buffer sizes. + compress-io.c +- To reduce the memory hit for the increased output-port in_buffer + size and the corresponding increase in computed out_buffer size, + one output-side out_buffer is now allocated (lazily) per thread + and stored in the thread context. The other buffers are now + directly a part of the lz4File_out and lz4File_in structures + rather than allocated separately. + compress-io.c, scheme.c, gc.c, + cmacros.ss +- split out the buffer emit code from glzwrite_lz4 into a + separate glzemit_lz4 helper that is now also used by gzclose + so we can avoid dealing with a NULL buffer in glzwrite_lz4. + glzwrite_lz4 also uses it to writing large buffers directly and + avoid the memcpy. + compress-io.c +- replaced lz4File_out and lz4File_in mode enumeration with the + compress format and inputp boolean. using switch to check and + raising exceptions for unexpected values to further simplify + adding new compression formats in the future. + compress-io.c +- replaced the never-defined struct lz4File pointer in glzFile + union with the more specific struct lz4File_in_r and Lz4File_out_r + pointers. + compress-io.h, compress-io.c +- added free of lz4 structures to gzclose. also changed file-close + logic generally so that (1) port is marked closed before anything is + freed to avoid dangling pointers in the case of an interrupt or + error, and (2) structures are freed even in the case of a write + or close error, before the error is reported. also now mallocing + glz and lz4 structures after possibility of errors have passed where + possible and freeing them when not. + compress-io.c, + io.ss +- added return-value checks to malloc calls and to a couple of other + C-library calls. + compress-io.c +- corrected EINTR checks to look at errno rather than return codes. + compress-io.c +- added S_ prefixes to the glz* exports + externs.h, compress-io.c, new-io.c, scheme.c, fasl.c +- added entries for mutex-name and mutex-thread + threads.stex +- fix record-ref reduction in cp0 + in expressions like + (record-ref ... (begin (newline) (record ...))) + the reduction was dropping the possible side effect expressions + in this case the (newline). + cp0.ss +- zero?, fxzero?, positive?, fxpositive?, etc., now go through + (a suitably modified) relop-length so that, for example, + (zero? (length x)) results in the same code as (null? x). added + correctness tests for these and all of the other predicates that + go through relop-length. + cpnanopass.ss, 5_2.ms +- assertion-violationf and friends now show the who, message, and + irritants in the original call when who or message is found not to + be of the right type. + exceptions.ss +- fix incorrect uses of fxzero? x86.ss backend, since a 32-bit + immediate is not necessarily a fixnum + x86.ss +- added MinGW/MSYS build support for Windows and configuration for + Travis-CI testing of all Windows builds + BUILDING, .travis*, wininstall/Makefile +- fix multiply of -2^30 with itself on 64-bit platforms + number.c, 5_3.ms, release_notes.stex +- fixed typo in description of case macro + csug/control.stex +- fix signatures of $annotation-options, $fasl-strip-options, + $file-options, and $library-requirements-options + primdata.ss +- small fix in relop-length to enable the optimization + cpnanopass.ss +- make test for relop-length more sensitive + 5_2.ms +- added support for Microsoft Visual Studio 2019 on Windows + BUILDING, c/vs.bat, wininstall/locate-vcredist.bat +- fixed open-string-input-port on immutable strings + cpnanopass.ss, io.ms, release_notes.stex +- use setenv rather than putenv on non WIN32 environments + prim5.c, system.stex +- restore {Free,Open,Net}BSD build, support Windows cross-compile + via MinGW, add configuration options, and add helper makefile targets + expeditor.c, thread.c, stats.c, statics.c, scheme.c, main.c, types.h, + externs.h, globals.h, nocurses.h, version.h, system.h, segment.h, + a6ob.def, ta6ob.def, a6nb.def, ta6nb.def, i3nt.def, ti3nt.def, + c/Mf-*, build.bat, makefiles/Makefile.in, makefiles/Mf-install.in, + s/update-revision, BUILDING +- export `ee-backward-delete-sexp` binding in the expression-editor module. + expeditor.ss +- fix ee_read_char to handle ^@ properly + expeditor.c +- prevent access before start of array + scheme.c +- remove dead stores in files + compress-io.c, new-io.c +- fixed tab character in makefiles + c/Mf-*nt +- use case-insensitive search for ".exe" on Windows + c/scheme.c +- fix __collect_safe for x86_64 and floating-point arguments or results + x86_64.ss, foreign.ms, release_notes.stex +- annotations are now preserved in object files for debug + only, for profiling only, for both, or not at all, depending + on the settings of generate-inspector-information and + compile-profile. in particular, when inspector information + is not enabled but profiling is, source information does + not leak into error messages and inspector output, though it is + still available via the profile tools. The mechanics of this + involved repurposing the fasl a? parameter to hold an annotation + flags value when it is not #f and remaking annotations with + new flags if necessary before emitting them. + compile.ss, fasl.ss, misc.ms +- altered a number of mats to produce correct results even + when the 's' directory is profiled. + misc.ms, cp0.ms, record.ms +- profile-release-counters is now generation-friendly; that is, + it doesn't look for dropped code objects in generations that have + not been collected since the last call to profile-release-counters. + also, it no longer allocates memory when it releases counters. + pdhtml.ss, + gc.c, gcwrapper.c, globals.h, prim5.c +- removed unused entry points S_ifile, S_ofile, and S_iofile + alloc.c, externs.h +- mats that test loading profile info into the compiler's database + to guide optimization now weed out preexisting entries, in case + the 's' directory is profiled. + 4.ms, mat.ss, misc.ms, primvars.ms +- counters for dropped code objects are now released at the start + of each mat group. + mat.ss +- replaced ehc (enable-heap-check) option with hci (heap-check-interval) + option that allows heap checks to be performed periodically rather + than on each collection. hci=0 is equivalent to ehc=f (disabling + heap checks) and hci=1 is equivalent to ehc=t (enabling heap + checks every collection), while hci=100 enables heap checks only + every 100th collection. allx and bullyx mats use this feature + to reduce heap-checking overhead to a more reasonable level. this + is particularly important when the 's' directory is profiled, + since the amount of static memory to be checked is greatly increased + due to the counters. + mats/Mf-base, mat.ss, primvars.ms +- added a mat that calls #%show-allocation, which was otherwise not + being tested. + misc.ms +- removed a broken primvars mat and updated two others. in each case, + the mat was looking for information about primitives in the wrong + (i.e., old) place and silently succeeding when it didn't find any + primitives to test. the revised mats (along with a few others) now + check to make sure at least one identifier has the information they + look for. the removed mat was checking for library information that + is now compiled in, so the mat is now unnecessary. the others were + (not) doing argument-error checks. fixing these turned up a handful of + problems that have also been fixed: a couple of unbound variables in the + mat driver, two broken primdata declarations, a tardy argument check + by profile-load-data, and a bug in char-ready?, which was requiring + an argument rather than defaulting it to the current input port. + primdata.ss, pdhtml.ss, io.ms, + primdvars.ms, 4.ms, 6.ms, misc.ms, patch* +- added initial support for recording coverage information. when the + new parameter generate-covin-files is set, the compiler generates + .covin files containing the universe of all source objects for which + profile forms are present in the expander output. when profiling + and generation of covin files are enabled in the 's' directory, the + mats optionally generate .covout files for each mat file giving + the subset of the universe covered by the mat file, along with an + all.covout in each mat output directory aggregating the coverage + for the directory and another all.covout in the top-level mat + directory aggregating the coverage for all directories. + back.ss, compile.ss, cprep.ss, primdata.ss, s/Mf-base, + mat.ss, mats/Mf-base, mats/primvars.ms +- support for generating covout files is now built in. with-coverage-output + gathers and dumps coverage information, and aggregate-coverage-output + combines (aggregates) covout files. + pdhtml.ss, primdata.ss, compile.ss, + mat.ss, mats/Mf-base, primvars.ms +- profile-clear now adjusts active coverage trackers to avoid losing + coverage information. + pdhtml.ss, + prim5.c +- nested with-coverage calls are now supported. + pdhtml.ss +- switched to a more compact representation for covin and covout files; + reduces disk space (compressed or not) by about a factor of four + and read time by about a factor of two with no increase in write time. + primdata.ss, pdhtml.ss, cprep.ss, compile.ss, + mat.ss, mats/Mf-base +- added support for determining coverage for an entire run, including + coverage for expressions hit during boot time. 'all' mats now produce + run.covout files in each output directory, and 'allx' mats produce + an aggregate run.covout file in the mat directory. + pdhtml.ss, + mat.ss, mats/Mf-base +- profile-release-counters now adjusts active coverage trackers to + account for the counters that have been released. + pdhtml.ss, + prim5.c +- replaced the artificial "examples" target with a real "build-examples" + target so make won't think it always has to mats that depend upon + the examples directory having been compiled. mats make clean now + runs make clean in the examples directory. + mats/Mf-base +- importing a library from an object file now just visits the object + file rather than doing a full load so that the run-time code for + the library is not retained. The run-time code is still read + because the current fasl format forces the entire file to be read, + but not retaining the code can lower heap size and garbage-collection + cost, particularly when many object-code libraries are imported. + The downside is that the file must be revisited if the run-time + code turns out to be required. This change exposed several + places where the code was failing to check if a revisit is needed. + syntax.ss, + 7.ms, 8.ms, misc.ms, root-experr* +- fixed typos: was passing unquoted load rather than quoted load + to $load-library along one path (where it is loading source code + and therefore irrelevant), and was reporting src-path rather than + obj-path in a message about failing to define a library. + syntax.ss +- compile-file and friends now put all recompile information in + the first fasl object after the header so the library manager can + find it without loading the entire fasl file. The library manager + now does so. It also now checks to see if library object files + need to be recreated before loading them rather than loading them and + possibly recompiling them after discovering they are out of date, since + the latter requires loading the full object file even if it's out of + date, while the former takes advantage of the ability to extract just + recompile information. as well as reducing overhead, this eliminates + possibly undesirable side effects, such as creation and registration + of out-of-date nongenerative record-type descriptors. because the + library manager expects to find recompile information at the front of + an object file, it will not find all recompile information if object + files are "catted" together. also, compile-file has to hold in memory + the object code for all expressions in the file so that it can emit the + unified recompile information, rather than writing to the object file + incrementally, which can significantly increase the memory required + to compile a large file full of individual top-level forms. This does + not affect top-level programs, which were already handled as a whole, + or a typical library file that contains just a single library form. + compile.ss, syntax.ss +- the library manager now checks include files before library dependencies + when compile-imported-libraries is false (as it already did when + compile-imported-libraries is true) in case a source change affects + the set of imported libraries. (A library change can affect the set + of include files as well, but checking dependencies before include + files can cause unneeded libraries to be loaded.) The include-file + check is based on recompile-info rather than dependencies, but the + library checks are still based on dependencies. + syntax.ss +- fixed check for binding of scheme-version. (the check prevents + premature treatment of recompile-info records as Lexpand forms + to be passed to $interpret-backend.) + scheme.c +- strip-fasl-file now preserves recompile-info when compile-time info + is stripped. + strip.ss +- removed include-req* from library/ct-info and ctdesc records; it + is no longer needed now that all recompile information is maintained + separately. + expand-lang.ss, syntax.ss, compile.ss, cprep.ss, syntax.ss +- changed the fasl format and reworked a lot of code in the expander, + compiler, fasl writer, and fasl reader to allow the fasl reader + to skip past run-time information when it isn't needed and + compile-time information when it isn't needed. Skipping past + still involves reading and decoding when encrypted, but the fasl + reader no longer parses or allocates code and data in the portions + to be skipped. Side effects of associating record uids with rtds + are also avoided, as are the side effects of interning symbols + present only in the skipped data. Skipping past code objects + also reduces or eliminates the need to synchronize data and + instruction caches. Since the fasl reader no longer returns + compile-time (visit) or run-time (revisit) code and data when not + needed, the fasl reader no longer wraps these objects in a pair + with a 0 or 1 visit or revisit marker. To support this change, + the fasl writer generates separate top-level fasl entries (and + graphs) for separate forms in the same top-level source form + (e.g., begin or library). This reliably breaks eq-ness of shared + structure across these forms, which was previously broken only + when visit or revisit code was loaded at different times (this + is an incompatible change). Because of the change, fasl "groups" + are no longer needed, so they are no longer handled. + 7.ss, cmacros.ss, compile.ss, expand-lang.ss, strip.ss, + externs.h, fasl.c, scheme.c, + hash.ms +- the change above is surfaced in an optional fasl-read "situation" + argument (visit, revisit, or load). The default is load. visit + causes it to skip past revisit code and data; revisit causes it + to skip past visit code and data; and load causes it not to skip + past either. visit-revisit data produced by (eval-when (visit + revisit) ---) is never skipped. + 7.ss, primdata.ss, + io.stex +- to improve compile-time and run-time error checking, the + Lexpand recompile-info, library/rt-info, library-ct-info, and + program-info forms have been replaced with list-structured forms, + e.g., (recompile-info ,rcinfo). + expand-lang.ss, compile.ss, cprep.ss, interpret.ss, syntax.ss +- added visit-compiled-from-port and revisit-compiled-from-port + to complement the existing load-compiled-from-port. + 7.ss, primdata.ss, + 7.ms, + system.stex +- increased amount read when seeking an lz4-compressed input + file from 32 to 1024 bytes at a time + compress-io.c +- replaced the fasl a? parameter value #t with an "all" flag value + so it's value is consistently a mask. + cmacros.ss, fasl.ss, compile.ss +- split off profile mats into a separate file + misc.ms, profile.ms (new), root-experr*, mats/Mf-base +- added coverage percent computations to mat allx/bullyx output + mat.ss, mats/Mf-base, primvars.ms +- replaced coverage tables with more generic and generally useful + source tables, which map source objects to arbitrary values. + pdhtml.ss, compile.ss, cprep.ss, primdata.ss, + mat.ss, mats/Mf-base, primvars.ms, profile.ms, + syntax.stex +- reduced profile counting overhead by using calls to fold-left + instead of calls to apply and map and by using fixnum operations + for profile counts on 64-bit machines. + pdhtml.ss +- used a critical section to fix a race condition in the calculations + of profile counts that sometimes resulted in bogus (including + negative) counts, especially when the 's' directory is profiled. + pdhtml.ss +- added discard flag to declaration for hashtable-size + primdata.ss +- redesigned the printed representation of source tables and rewrote + get-source-table! to read and store incrementally to reduce memory + overhead. + compile.ss +- added generate-covin-files to the set of parameters preserved + by compile-file, etc. + compile.ss, + system.stex +- moved covop argument before the undocumented machine and hostop + arguments to compile-port and compile-to-port. removed the + undocumented ofn argument from compile-to-port; using + (port-name ip) instead. + compile.ss, primdata.ss, + 7.ms, + system.stex +- compile-port now tries to come up with a file position to supply + to make-read, which it can do if the port's positions are character + positions (presently string ports) or if the port is positioned + at zero. + compile.ss +- audited the argument-type-error fuzz mat exceptions and fixed a + host of problems this turned up (entries follow). added #f as + an invalid argument for every type for which #f is indeed invalid + to catch places where the maybe- prefix was missing on the argument + type. the mat tries hard to determine if the condition raised + (if any) as the result of an invalid argument is appropriate and + redirects the remainder to the mat-output (.mo) file prefixed + with 'Expected error', causing them to show up in the expected + error output so developers will be encouraged to audit them in + the future. + primvars.ms, mat.ss +- added an initial symbol? test on machine type names so we produce + an invalid machine type error message rather than something + confusing like "machine type #f is not supported". + compile.ss +- fixed declarations for many primitives that were specified as + accepting arguments of more general types than they actually + accept, such as number -> real for various numeric operations, + symbol -> endianness for various bytevector operations, + time -> time-utc for time-utc->date, and list -> list-of-string-pairs + for default-library-search-handler. also replaced some of the + sub-xxxx types with specific types such as sub-symbol -> endianness + in utf16->string, but only where they were causing issues with + the primvars argument-type-error fuzz mat. (this should be done + more generally.) + primdata.ss +- fixed incorrect who arguments (was map instead of fold-right, + current-date instead of time-utc->date); switched to using + define-who/set-who! generally. + 4.ss, date.ss +- append! now checks all arguments before any mutation + 5_2.ss +- with-source-path now properly supplies itself as who for the + string? argument check; callers like load now do their own checks. + 7.ss +- added missing integer? check to $fold-bytevector-native-ref whose + lack could have resulted in a compile-time error. + cp0.ss +- fixed typo in output-port-buffer-mode error message + io.ss +- fixed who argument (was fx< rather than fx maybe-timeout) + primdata.ms +- added "invalid code page ~s" to set of messages considered valid + argument-type-check error messages, for Windows multibyte->string + and string->multibyte. + primvars.ms +- used with-object-file to restore accidentally dropped close-port in + compile-whole-program and compile-whole-library + compile.ss +- initialized variable to enable compilation with gcc 9.1.0 at -O3 + c/scheme.c +- added missing Inner wrappers around the library/ct-info and + library-rt-info records in the code for compile-whole-xxx. + compile.ss, + 7.ms +- local-eval-hook now calls eval rather than interpret when profiling + is enabled, so local transformer code can be profiled. + syntax.ss, + profile.ms +- fix compiler bug related to call-with-values and a first argument + whose body result is compiled to an allocation, inline form, or + foreign call + cpnanopass.ss, 3.ms +- improved error reporting for library compilation-instance errors: + now including the name of the object file from which the "wrong" + compilation instance was loaded, if it was loaded from (or compiled + to) an object file and the original importing library, if it was + previously loaded from an object file due to a library import. + syntax.ss, 7.ss, interpret.ss, + 8.ms, root-experr* +- removed situation and for-input? arguments from $make-load-binary, + since the only consumer always passes 'load and #f. + 7.ss, + scheme.c +- $separate-eval now prints the stderr and stdout of the subprocess + to help in diagnosing separate-eval and separate-compile issues. + mat.ss +- added unregister-guardian, which can be used to unregister + the unressurected objects registered with any guardian. guardian? + can be used to distinguish guardian procedures from other objects. + cp0.ss, cmacros.ss, cpnanopass.ss, ftype.ss, primdata.ss, + prims.ss, + gcwrapper.c, prim.c, externs.h, + 4.ms, primvars.ms + release_notes.stex + smgmt.stex, threads.stex +- added verify-loadability. given a situation (visit, revisit, + or load) and zero or more pathnames (each of which may be optionally + paired with a library search path), verity-loadability checks + whether the set of object files named by those pathnames and any + additional object files required by library requirements in the + given situation can be loaded together. it raises an exception + in each case where actually attempting to load the files would + raise an exception and additionally in cases where loading files + would result in the compilation or loading of source files in + place of the object files. if the check is successful, + verity-loadability returns an unspecified value. in either case, + although portions of the object files are read, none of the + information read from the object files is retained, and none of + the object code is read, so there are no side effects other than + the file operations and possibly the raising of an exception. + library and program info records are now moved to the top of each + object file produced by one of the file compilation routines, + just after recompile info, with a marker to allow verity-loadability + to stop reading once it reads all such records. this change is + not entirely backward compatible; the repositioning of the records + can be detected by a call to list-library made from a loaded file + before the definition of one or more libraries. it is fully + backward compatible for typical library files that contain a + single library definition and nothing else. adding this feature + required changes to the object-file format and corresponding + changes in the compiler and library manager. it also required + moving cross-library optimization information from library/ct-info + records (which verity-loadability must read) to the invoke-code + for each library (which verity-loadability does not read) to + avoid reading and permanently associating record-type descriptors + in the code with their uids. + compile.ss, syntax.ss, expand-lang.ss, primdata.ss, 7.ss, + 7.ms, misc.ms, root-experr*, patch*, + system.stex, release_notes.stex +- fixed a bug that bit only with the compiler compiled at + optimize-level 2: add-library/rt-records was building a library/ct-info + wrapper rather than a library/rt-info wrapper. + compile.ss +- fixed a bug in visit-library that could result in an indefinite + recursion: it was not checking to make sure the call to $visit + actually added compile-time info to the libdesc record. it's not + clear, however, whether the libdesc record can be missing + compile-time information on entry to visit-library, so the code + that calls $visit (and now checks for compile-time information + having been added) might not be reachable. ditto for + revisit-library. + syntax.ss + syntax.ss, primdata.ss, + 7.ms, root-experr*, patch*, + system.stex, release_notes.stex +- added some argument-error checks for library-directories and + library-extensions, and fixed up the error messages a bit. + syntax.ss, + 7.ms, root-experr* +- compile-whole-program now inserts the program record into the + object file for the benefit of verify-loadability. + syntax.ss, + 7.ms, root-experr* +- changed 'loading' import-notify messages to the more precise + 'visiting' or 'revisiting' in a couple of places. + syntax.ss, + 7.ms, 8.ms +- added concatenate-object-files + compile.ss, primdata.ss + 7.ms, root-experr* + system.stex, use.stex, release_notes.stex +- added invoke-library + syntax.ss, primdata.ss, + 8.ms, root-experr*, + libraries.stex, release_notes.stex +- updated the date + release_notes.stex +- libraries contained within a whole program or library are now + marked pending before their invoke code is run so that invoke + cycles are reported as such rather than as attempts to invoke + while still loading. + compile.ss, syntax.ss, primdata.ss, + 7.ms, root-experr* +- the library manager now protects against unbound references + from separately compiled libraries or programs to identifiers + ostensibly but not actually exported by (invisible) libraries + that exist only locally within a whole program. this is done by + marking the invisibility of the library in the library-info and + propagating it to libdesc records; the latter is checked upon + library import, visit, and invoke as well as by verify-loadability. + the import and visit code of each invisible no longer complains + about invisibility since it shouldn't be reachable. + syntax.ss, compile.ss, expand-lang.ss, + 7.ms, 8.ms, root-experr*, patch* +- documented that compile-whole-xxx's linearization of the + library initialization code based on static dependencies might + not work for dynamic dependencies. + system.stex +- optimized bignum right shifts so the code (1) doesn't look at + shifted-off bigits if the bignum is positive, since it doesn't + need to know in that case if any bits are set; (2) doesn't look + at shifted-off bigits if the bignum is negative if it determines + that at least one bit is set in the bits shifted off the low-order + partially retained bigit; (3) quits looking, if it must look, for + one bits as soon as it finds one; (4) looks from both ends under + the assumption that set bits, if any, are most likely to be found + toward the high or low end of the bignum rather than just in the + middle; and (5) doesn't copy the retained bigits and then shift; + rather shifts as it copies. This leads to dramatic improvements + when the shift count is large and often significant improvements + otherwise. + number.c, + 5_3.ms, + release_notes.stex +- threaded tc argument through to all calls to S_bignum and + S_trunc_rem so they don't have to call get_thread_context() + when it might already have been called. + alloc.c, number.c, fasl.c, print.c, prim5.c, externs.h +- added an expand-primitive handler to partially inline integer?. + cpnanopass.ss +- added some special cases for basic arithmetic operations (+, -, *, + /, quotient, remainder, and the div/div0/mod/mod0 operations) to + avoid doing unnecessary work for large bignums when the result + will be zero (e.g,. multiplying by 0), the same as one of the + inputs (e.g., adding 0 or multiplying by 1), or the additive + inverse of one of the inputs (e.g., subtracting from 0, dividing + by -1). This can have a major beneficial affect when operating + on large bignums in the cases handled. also converted some uses + of / into integer/ where going through the former would just add + overhead without the possibility of optimization. + 5_3.ss, + number.c, externs.h, prim5.c, + 5_3.ms, root-experr, patch*, + release_notes.stex +- added a queue to hold pending signals for which handlers have + been registered via register-signal-handler so up to 63 (configurable + in the source code) unhandled signals are buffered before the + handler has to start dropping them. + cmacros.ss, library.ss, prims.ss, primdata.ss, + schsig.c, externs.h, prim5.c, thread.c, gc.c, + unix.ms, + system.stex, release_notes.stex +- bytevector-compress now selects the level of compression based + on the compress-level parameter. Prior to this it always used a + default setting for compression. the compress-level parameter + can now take on the new minimum in addition to low, medium, high, + and maximum. minimum is presently treated the same as low + except in the case of lz4 bytevector compression, where it + results in the use of LZ4_compress_default rather than the + slower but more effective LZ4_compress_HC. + cmacros,ss, back.ss, + compress_io.c, new_io.c, externs.h, + bytevector.ms, mats/Mf-base, root-experr* + io.stex, objects.stex, release_notes.stex +- fix fasl-read signature + primdata.ss +- console I/O on Windows now supports Unicode characters in the BMP + expeditor.c, new-io.c, release_notes.stex +- the collector now releases bignum temporaries in the collector + rather than relocating them so we don't keep around huge bignum + temporaries forever. + gc.c +- removed the presumably useless vector-handling code from load() + which used to be required to handle fasl groups. + scheme.c +- object files are no longer compressed as a whole, and the parameter + compile-compressed is no longer defined. instead, the individual + fasl objects within an object file are compressed whenever the + new parameter fasl-compressed is set to its default value, #t. + this allows the fasl reader to seek past portions of an object + file that are not of interest, i.e., visit-only code and data + when "revisiting" an object file and revisit-only code and data + when "visiting" an object file. the compressed portions are + compressed using the format and level specified by the compress-format + and compress-level parameters. the C-coded fasl reader and + boot-file loader no longer handle compressed files; these are + handled, less efficiently, by the Scheme entry point (fasl-read). + a warning exception is raised the first time a program attempts + to create or read a compressed fasl file. + 7.ss, s/Mf-base, back.ss, bytevector.ss, cmacros.ss, compile.ss, + fasl-helpers.ss, fasl.ss, primdata.ss, strip.ss, syntax.ss, + externs.h, fasl.c, gc.c, scheme.c, thread.c, + mats/6.ms, mats/7.ms, mats/bytevector.ms, mats/misc.ms, patch*, + root-experr*, + intro.stex, use.stex, io.stex, system.stex, + release_notes.stex +- added begin wrappers around many of the Scheme source files that + contained multiple expressions to cut down the number of top-level + fasl objects and increase compressibility. also removed the + string filenames for debugging at the start of each file that had + one---these are best inserted universally by a modified compile-file + during a debugging session when desired. also removed unnecessary + top-level placeholder definitions for the assignments that follow. + 4.ss, 5_1.ss, 5_2.ss, 5_3.ss, 5_7.ss, 6.ss, 7.ss, bytevector.ss, + cafe.ss, cback.ss, compile.ss, cp0.ss, cpcommonize.ss, cpletrec.ss, + cpnanopass.ss, cprep.ss, cpvalid.ss, date.ss, engine.ss, enum.ss, + env.ss, event.ss, exceptions.ss, expeditor.ss, fasl.ss, foreign.ss, + format.ss, front.ss, ftype.ss, inspect.ss, interpret.ss, io.ss, + library.ss, mathprims.ss, newhash.ss, pdhtml.ss, pretty.ss, + prims.ss, primvars.ss, print.ss, read.ss, record.ss, reloc.ss, + strnum.ss, syntax.ss, trace.ss +- updated bullyx patches + patch* +- fixed csug copyright year substititions and changed revisiondate + to not be generated, making the csug build reproducible + newrelease csug/csug.stex +- fixed Windows build using MSYS2 + c/Mf-a6nt, c/Mf-i3nt, c/Mf-ta6nt, c/Mf-ti3nt, mats/Mf-a6nt, + mats/Mf-i3nt, mats/Mf-ta6nt, mats/Mf-ti3nt +- fixed build on Linux with musl libc + expeditor.c +- extended primitive folding to primitives that return multiple + values. + cp0.ss, primdata.ss, + cp0.ms +- fix handling of calling code's address for locking around a callable + that has a u8*, u16*, or u32* argument, which could cause the + cp register copy in the thread context to be changed before + S_call_help gets it + cpnanopass.ss, schlib.c, foreign2.c, foreign.ms +- the collector now promotes objects one generation higher at a time + by default. previously, it promoted every live oldspace object to + the selected target generation, which could result in objects + prematurely skipping one or more generations and thus being + retained longer than their ages justify. the biggest cost in + terms of code complexity and performance is the recording of + pointers from older newspace objects to younger newspace objects + that could not previously occur. + gc.c, alloc.c, externs.h +- the collect procedure now takes an additional optional minimum + target generation argument to allow the new default behavior to + be overridden. + 7.ss, primdata.ss, + gcwrapper.c, + 7.ms, root-experr* +- added cn flag to control collect-notify + mats/Mf-base +- resweep_weak_pairs now sets sweep_loc to orig_next_loc rather than + first_loc since the latter could result in unnecessary sweeping of + existing target-generation weak pairs. + gc.c +- added set of S_child_processes[newg] to S_child_processes[oldg] + in S_do_gc code handling decreases in the maximum generation. + gcwrapper.c +- a specialized variant of the collector is used in the common case + where the max copied generation is 0, the min and max target + generations are 1, and there are no locked generation 0 objects + is now used. with the default collection parameters and no locking + of generation 0 objects, these collections account for 3/4 of all + collections. + gc.c, gc-011.c (new), gcwrapper.c, externs.h, c/Mf-base +- maybe-fire-collector no longer tries to be so precise and instead + just counts the number of generation-bytes allocated since the + last gc. surprisingly, rebuilding the s directory requires about + the same number of collections with this coarser (and less + expensive) measurement. this change also fixes a problem with + too-frequent collections when the maximum-generation is set to + zero. to make the determination even less expensive, a running + total of bytes in each generation is now maintained in a new + bytes_of_generation vector, and maybe-fire-collector is no longer + called when the collector is running. + alloc.c, gc.c, gcwrapper.c, globals.h +- copy now copies two pairs at once only if they are in the same + segment, which saves a few memonry references and tests and turns + out not to reduce the number of opportunities significantly in + tested programs. + gc.c +- occupied_segments, first_loc, base_loc, next_loc, bytes_left, + bytes_of_space, sweep_loc, and orig_next_loc are now indexed + by [g][s] rather than [s][g] to improve locality in the default + (and common) case where there are only a handful of active + generations. + globals.h, types.h, segment.c, gc.c, gcwrapper.c, prim5.c +- documented change to collect procedure + smgmt.stex, release_notes.stex +- now maintaining 16-byte architectural stack alignment (if the + incoming stack is so aligned) on all x86 platforms except + i3nt/ti3nt. more recent versions of gcc sometimes generate sse + instructions that require 16-byte stack alignment. + x86.ss +- added missing #ifndef WIN32 + gcwrapper.c +- added initialization of __to_g to make gcc 7.5.0 happy + gc.c +- updated Windows makefiles + c/Makefile.*nt +- use lowercase for Windows include files + segment.c, windows.c +- proper unicode handling when retrieving error messages from the OS + on Windows + windows.c +- repair collector handling of an ephemerons that refers to a + younger object during incremental promotion + gc.c, 4.ms +- added textual-output-port checks for record-writer write argument + print.ss, + record.ms, root-experr* +- now using 64-bit arithmetic for seconds in S_condition_wait to + prevent a potential 2038 bug, at least on platforms where time_t + is 64 bits. also now rounding rather than truncating nanoseconds + in the coversion to milliseconds on Windows. + thread.c +- fixed a bug in arm32 that caused an error when generating + instructions with immediate operands where the immediate was larger + than 8 bits. + arm32.ss +- fixed formatting in arm32.ss + arm32.ss +- disabled unsupported mats for arm32le + foreign.ms, misc.ms +- fixed callee-save floating point registers for arm32 + arm32.ss, ftype.ss, np-languages.ss, primdata.ss +- added a mat for the add-with-immediate bug + misc.ms, + mats/arm-immediate-1.ss (new), mats/arm-immediate-2.ss (new) +- added a note about arm32 targets requiring a kernel module for the + time stamp counter + prims.ss +9.5.4 changes: +- updated version to 9.5.4 + BUILDING NOTICE makefiles/Mf-install.in makefiles/Makefile-csug.in + scheme.1.in c/Makefile.a6nt c/Makefile.i3nt c/Makefile.ta6nt + c/Makefile.ti3nt mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt + mats/Mf-ti3nt workarea c/scheme.rc s/7.ss s/cmacros.ss + release_notes/release_notes.stex csug/copyright.stex csug/csug.stex + bintar/Makefile rpm/Makefile pkg/Makefile wininstall/Makefile + wininstall/a6nt.wxs wininstall/i3nt.wxs wininstall/ta6nt.wxs + wininstall/ti3nt.wxs diff -Nru chezscheme-9.5+dfsg/makefiles/Makefile-csug.in chezscheme-9.5.4+dfsg/makefiles/Makefile-csug.in --- chezscheme-9.5+dfsg/makefiles/Makefile-csug.in 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/makefiles/Makefile-csug.in 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,159 @@ +m = $(m) +Scheme=../$m/bin/$m/scheme -b ../$m/boot/$m/petite.boot -b ../$m/boot/$m/scheme.boot +STEXLIB=../stex +installdir=/tmp/csug9.5 +INSTALL=../$m/installsh + +x = csug +latex = pdflatex +stexmacrofiles = tspl4-prep +bib = $(x).bib +index=yes +TSPL=tspl4 +DIR=$(shell basename `pwd`) + +target: logcheck1 logcheck2 checklibs $(x).html $(x).pdf + +install: target + $(INSTALL) -m 2755 -d $(installdir) + $(INSTALL) -m 0644 --ifdiff *.html *.css $(installdir) + $(INSTALL) -m 0644 --ifdiff csug.pdf $(installdir)/csug9_5.pdf + $(INSTALL) -m 2755 -d $(installdir)/canned + $(INSTALL) -m 0644 --ifdiff canned/* $(installdir)/canned + $(INSTALL) -m 2755 -d $(installdir)/gifs + $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs + $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) + $(INSTALL) -m 0644 --ifdiff $(mathdir)/*.gif $(installdir)/$(mathdir) + (cd $(installdir); ln -s -f $(x).html index.html) + +# thrice is not enough when starting from scratch +logcheck1: $(x).thirdrun + @if [ -n "`grep 'Warning: Label(s) may have changed' $(x).log`" ] ; then\ + /bin/rm -f $(x).thirdrun ;\ + $(MAKE) $(x).thirdrun;\ + fi + +rerun: $(x).thirdrun + +logcheck2: $(x).thirdrun + @if [ -n "`grep Warning $(x).log | grep -v pdftex.map`" ] ; then\ + echo "`grep Warning $(x).log | grep -v pdftex.map`";\ + false;\ + fi + @if [ -n "`grep Overfull $(x).log | grep -v pdftex.map`" ] ; then\ + echo "`grep Overfull $(x).log | grep -v pdftex.map`";\ + false;\ + fi + +include $(STEXLIB)/Mf-stex + +stexsrc = csug.stex title.stex copyright.stex contents.stex\ + preface.stex intro.stex use.stex expeditor.stex debug.stex foreign.stex\ + binding.stex control.stex objects.stex numeric.stex io.stex\ + libraries.stex syntax.stex system.stex smgmt.stex threads.stex\ + compat.stex bibliography.stex summary.stex +texsrc = ${stexsrc:%.stex=%.tex} + +title.tex contents.tex bibliography.tex: + /bin/rm -f $*.tex + echo "%%% DO NOT EDIT THIS FILE" > $*.tex + echo "%%% Edit the .stex version instead" >> $*.tex + echo "" >> $*.tex + cat $*.stex >> $*.tex + chmod -w $*.tex +title.tex: title.stex +contents.tex: contents.stex +bibliography.tex: bibliography.stex + +$(x).firstrun: $(x).prefirstrun +$(x).prefirstrun: tspl.aux tspl.rfm tspl.idx + touch $x.sfm + cat tspl.aux > $x.aux + cat tspl.rfm > $x.rfm + cat tspl.idx > $x.idx + touch $(x).prefirstrun + +$(x).secondrun: $(x).presecondrun +$(x).presecondrun: $(x).firstrun + cat tspl.aux >> $x.aux + cat tspl.rfm >> $x.rfm + echo '(summary-make "$x")' | $(Scheme) setup.ss summary.ss + cat tspl.idx >> $x.idx + touch $(x).presecondrun + +$(x).thirdrun: $(x).prethirdrun canned/cisco-logo.png +$(x).prethirdrun: $(x).secondrun + cat tspl.aux >> $x.aux + cat tspl.rfm >> $x.rfm + echo '(summary-make "$x")' | $(Scheme) setup.ss summary.ss + cat tspl.idx >> $x.idx + touch $(x).prethirdrun + +$(x).hfirstrun: $(x).hprefirstrun csug8.hcls +$(x).hprefirstrun: $(x).thirdrun tspl.haux in.hidx + cat tspl.aux >> $x.aux + cat tspl.rfm >> $x.rfm + cat tspl.idx >> $x.idx + cat tspl.haux > $x.haux + touch $(x).hprefirstrun + +$(x).hsecondrun: $(x).hpresecondrun +$(x).hpresecondrun: $(x).hfirstrun + cat tspl.haux >> $x.haux + touch $(x).hpresecondrun + +$(x).hthirdrun: $(x).hprethirdrun +$(x).hprethirdrun: $(x).hsecondrun + cat tspl.haux >> $x.haux + touch $(x).hprethirdrun + +$(x).prefirstrun: $(texsrc) csug8.cls csug810.clo + +$(x).firstrun: scheme.sty + +tspl.aux: ${TSPL}/tspl.aux + cat ${TSPL}/*.aux | grep '\\newlabel' | \ + sed -e 's/\\newlabel{\(.*\){\([^}]*\)}}/\\newlabel{TSPL:\1{t\2}}/' > tspl.aux + +tspl.haux: ${TSPL}/tspl.haux + sed -e 's/(putprop (quote /(putprop (quote |TSPL|:/' ${TSPL}/tspl.haux | \ + sed -e 's;url) ";url) "http://scheme.com/${TSPL}/;' > tspl.haux + +tspl.rfm: ${TSPL}/tspl.rfm + sed -e 's/\\pageref{/\\pageref{TSPL:/' ${TSPL}/tspl.rfm > tspl.rfm + +# this version leaves tspl entries out of the printed index +#tspl.idx: +# echo -n > tspl.idx + +# this version includes tspl entries in the printed index +tspl.idx: ${TSPL}/tspl.idx + sed -e 's/{\([1-9][0-9]*\)}$$/{t\1}/' ${TSPL}/tspl.idx | \ + sed -e 's/{\([ivx][ivx]*\)}$$/{t\1}/' > tspl.idx + +in.hidx: ${TSPL}/out.hidx + sed -e 's;"\(.*\)\.html#;"http://scheme.com/${TSPL}/\1.html#;' ${TSPL}/out.hidx | \ + sed -e 's/"")$$/"t")/' > in.hidx + +$(texsrc): tspl4-prep.stex priminfo.ss ../s/primdata.ss + +checklibs: $(x).thirdrun + sort libsrecorded | uniq > libsrecorded.sort + sort libslisted | uniq > libslisted.sort + diff libsrecorded.sort libslisted.sort + +code: $(stexsrc) + extract.pl $(stexsrc) > code + echo '(load "code" pretty-print)' | $(Scheme) -q + +$(x).clean: + -/bin/rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\ + $(x).prethirdrun $(x).ans\ + $(x).hprefirstrun $(x).hpresecondrun $(x).hprethirdrun\ + tspl.aux tspl.haux tspl.rfm tspl.idx in.hidx\ + libsrecorded{,.sort} libslisted{,.sort}\ + code + +$(x).reallyclean: + +$(x).reallyreallyclean: diff -Nru chezscheme-9.5+dfsg/makefiles/Makefile.in chezscheme-9.5.4+dfsg/makefiles/Makefile.in --- chezscheme-9.5+dfsg/makefiles/Makefile.in 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/makefiles/Makefile.in 2020-08-31 02:35:12.000000000 +0000 @@ -15,28 +15,73 @@ MAKEFLAGS += --no-print-directory +.PHONY: build build: (cd $(workarea) && $(MAKE) build) +.PHONY: run +run: + env SCHEMEHEAPDIRS=$(workarea)/boot/$(m) $(workarea)/bin/$(m)/scheme + +.PHONY: install install: (cd $(workarea) && $(MAKE) install) +.PHONY: uninstall +uninstall: + (cd $(workarea) && $(MAKE) uninstall) + +.PHONY: test test: (cd $(workarea) && $(MAKE) test PREFIX=$(workarea)/) +.PHONY: coverage +coverage: + (cd $(workarea) && $(MAKE) coverage) + +.PHONY: bootfiles bootfiles: (cd $(workarea) && $(MAKE) bootfiles) +# Supply XM= to build boot files for +.PHONY: boot +boot: build + mkdir -p boot/$(XM) + (cd $(workarea) && $(MAKE) -f Mf-boot $(XM).boot) + +# Supply ORIG=

to build using existing at +.PHONY: from-orig +from-orig: + (cd $(m)/s && $(MAKE) -f Mf-cross m=$(m) xm=$(m) base=$(ORIG)/$(m)) + $(MAKE) build + +.PHONY: docs docs: build (cd csug && $(MAKE) m=$(m)) (cd release_notes && $(MAKE) m=$(m)) +.PHONY: bintar +bintar: + (cd $(workarea) && $(MAKE) bintar) + +.PHONY: rpm +rpm: + (cd $(workarea) && $(MAKE) rpm) + +.PHONY: pkg +pkg: + (cd $(workarea) && $(MAKE) pkg) + +.PHONY: clean clean: (cd $(workarea) && $(MAKE) clean) +.PHONY: distclean distclean: - (cd csug ; make reallyreallyclean) - (cd release_notes ; make reallyreallyclean) + (cd csug && if [ -e Makefile ] ; then $(MAKE) reallyreallyclean ; fi) + rm -f csug/Makefile + (cd release_notes && if [ -e Makefile ] ; then $(MAKE) reallyreallyclean ; fi) + rm -f release_notes/Makefile rm -rf $(workarea) rm -f Makefile rm -f Make.out diff -Nru chezscheme-9.5+dfsg/makefiles/Makefile-release_notes.in chezscheme-9.5.4+dfsg/makefiles/Makefile-release_notes.in --- chezscheme-9.5+dfsg/makefiles/Makefile-release_notes.in 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/makefiles/Makefile-release_notes.in 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,55 @@ +m = $(m) +Scheme=../$m/bin/$m/scheme -b ../$m/boot/$m/petite.boot -b ../$m/boot/$m/scheme.boot +STEXLIB=../stex +installdir=/tmp/csv9 +INSTALL=../$m/installsh + +# define default document pathname here +# override on command line with 'make x=newdoc' +x = release_notes + +# define latex processor: latex or pdflatex +latex = pdflatex + +# define stex macro files here +stexmacrofiles = + +# list bibliography files here +bib = + +# define index if an index is to be generated +# index=yes + +include $(STEXLIB)/Mf-stex + +# define or override suffixes here + +# define any additional targets here + +install: $x.pdf $x.html + $(INSTALL) -m 2755 -d $(installdir) + $(INSTALL) -m 0644 --ifdiff $x.html $x.pdf $(installdir) + $(INSTALL) -m 0644 --ifdiff releasenotes.css $(installdir) + (X=`echo canned/*` ;\ + if [ "$$X" != "canned/*" ] ; then\ + $(INSTALL) -m 2755 -d $(installdir)/canned ;\ + $(INSTALL) -m 0644 --ifdiff canned/* $(installdir)/canned ;\ + fi) + $(INSTALL) -m 2755 -d $(installdir)/gifs + $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs + $(INSTALL) -m 2755 -d $(installdir)/math + -/bin/rm -rf $(installdir)/$(mathdir) + $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) + if [ -e $(mathdir)/0.gif ] ; then $(INSTALL) -m 0644 $(mathdir)/*.gif $(installdir)/$(mathdir) ; fi + +# define any dependencies here + +$(x).firstrun: macros.tex + +# define cleanup targets here: + +$(x).clean: + +$(x).reallyclean: + +$(x).reallyreallyclean: diff -Nru chezscheme-9.5+dfsg/makefiles/Makefile-workarea.in chezscheme-9.5.4+dfsg/makefiles/Makefile-workarea.in --- chezscheme-9.5+dfsg/makefiles/Makefile-workarea.in 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/makefiles/Makefile-workarea.in 2020-08-31 02:35:12.000000000 +0000 @@ -16,24 +16,55 @@ MAKEFLAGS += --no-print-directory PREFIX= +.PHONY: build build: - (cd c ; $(MAKE)) - (cd s ; $(MAKE) bootstrap) + (cd c && $(MAKE)) + (cd s && $(MAKE) bootstrap) +.PHONY: install install: build $(MAKE) -f Mf-install +.PHONY: uninstall +uninstall: + $(MAKE) -f Mf-install uninstall + +.PHONY: test test: build - (cd mats ; $(MAKE) allx) + (cd mats && $(MAKE) allx) @echo "test run complete. check $(PREFIX)mats/summary for errors." +.PHONY: coverage +coverage: + rm -f s/bootstrap + (cd c && $(MAKE)) + (cd s && $(MAKE) bootstrap p=t c=t) + (cd mats && $(MAKE) allx c=t) + +.PHONY: bootfiles bootfiles: build $(MAKE) -f Mf-boot +.PHONY: bintar +bintar: build + (cd bintar && $(MAKE)) + +.PHONY: rpm +rpm: bintar + (cd rpm && $(MAKE)) + +.PHONY: pkg +pkg: bintar + (cd pkg && $(MAKE)) + +.PHONY: clean clean: rm -f petite.1 scheme.1 - (cd s ; $(MAKE) clean) - (cd c ; $(MAKE) clean) - (cd mats ; $(MAKE) clean) - (cd examples ; $(MAKE) clean) + (cd s && $(MAKE) clean) + (cd c && $(MAKE) clean) + (cd mats && $(MAKE) clean) + (cd examples && $(MAKE) clean) + (cd bintar && $(MAKE) clean) + (cd rpm && $(MAKE) clean) + (cd pkg && $(MAKE) clean) rm -f Make.out diff -Nru chezscheme-9.5+dfsg/makefiles/Mf-install.in chezscheme-9.5.4+dfsg/makefiles/Mf-install.in --- chezscheme-9.5+dfsg/makefiles/Mf-install.in 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/makefiles/Mf-install.in 2020-08-31 02:35:12.000000000 +0000 @@ -22,18 +22,14 @@ # The following variables determine where the executables, boot files, # example programs, and manual pages are installed. -# InstallPrefix is the final destination base and will be reflected -# in the generated manual page -InstallPrefix=/usr - # executable directory -InstallBin=${InstallPrefix}/bin +InstallBin=/usr/bin # library directory -InstallLib=${InstallPrefix}/lib +InstallLib=/usr/lib # man page directory -InstallMan=${InstallPrefix}/man/man1 +InstallMan=/usr/man/man1 # installation owner InstallOwner= @@ -41,7 +37,8 @@ # installation group InstallGroup= -# Files are actually installed at ${TempRoot}${InstallPrefix} +# Files are actually installed at ${TempRoot}${InstallBin}, +# ${TempRoot}${InstallLib}, and ${TempRoot}${InstallMan}. # This useful for testing the install process and for building # installation scripts TempRoot= @@ -54,14 +51,22 @@ InstallPetiteName=petite InstallScriptName=scheme-script +# Whether to install "kernel.o" or "libkernel.a" +InstallKernelTarget=installkernellib + +# Maybe install libz.a and liblz4.a by setting to "installzlib" and "installliz4" +InstallZlibTarget= +InstallLZ4Target= + ############################################################################### # no changes should be needed below this point # ############################################################################### -Version=csv9.5 +Version=csv9.5.4 Include=boot/$m PetiteBoot=boot/$m/petite.boot SchemeBoot=boot/$m/scheme.boot +Revision=boot/$m/revision Scheme=bin/$m/scheme Petite=bin/$m/petite InstallLibExamples=${InstallLib}/${Version}/examples @@ -76,20 +81,15 @@ SchemePath=${Bin}/${InstallSchemeName} SchemeScriptPath=${Bin}/${InstallScriptName} -install: bininstall libbininstall maninstall liblibinstall +install: bininstall libbininstall maninstall liblibinstall ${InstallKernelTarget} uninstall: - @echo To uninstall all machine types: - @echo rm -rf ${Lib} - @echo rm -f ${PetitePath} - @echo rm -f ${SchemePath} - @echo rm -f ${Man}/${InstallPetiteName}.1'{,.gz}' - @echo rm -f ${Man}/${InstallSchemeName}.1'{,.gz}' - @echo "" - @echo To uninstall just machine-type $m - @echo rm -rf ${Lib}/$m - @echo rm -f ${PetitePath} - @echo rm -f ${SchemePath} + rm -rf ${Lib} + rm -f ${PetitePath} + rm -f ${SchemePath} + rm -f ${SchemeScriptPath} + rm -f ${Man}/${InstallPetiteName}.1{,.gz} + rm -f ${Man}/${InstallSchemeName}.1{,.gz} scheme.1 petite.1: scheme.1.in sed -e "s;{InstallBin};${InstallBin};g" \ @@ -122,8 +122,22 @@ /bin/rm -f ${LibBin}/${InstallSchemeName}.boot;\ ln -f ${LibBin}/scheme.boot ${LibBin}/${InstallSchemeName}.boot;\ fi - ln -sf ${LibBin}/scheme.boot ${LibBin}/${InstallScriptName}.boot; + ln -f ${LibBin}/scheme.boot ${LibBin}/${InstallScriptName}.boot; + $I -m 444 ${Include}/main.o ${LibBin} $I -m 444 ${Include}/scheme.h ${LibBin} + $I -m 444 ${Revision} ${LibBin}/revision + +installkernelobj: ${LibBin} + $I -m 444 ${Include}/kernel.o ${LibBin} + +installkernellib: ${LibBin} ${InstallZlibTarget} ${InstallLZ4Target} + $I -m 444 ${Include}/libkernel.a ${LibBin} + +installzlib: ${LibBin} + $I -m 444 zlib/libz.a ${LibBin} + +installlz4: ${LibBin} + $I -m 444 lz4/lib/liblz4.a ${LibBin} maninstall: scheme.1 petite.1 ${Man} $I -m 444 scheme.1 ${Man}/${InstallSchemeName}.1 @@ -132,7 +146,7 @@ if [ ${GzipManPages} = yes ] ; then gzip -f ${Man}/${InstallPetiteName}.1 ; fi liblibinstall: ${LibExamples} - $I -m 444 ../examples/* ${LibExamples} + $I -m 444 examples/* ${LibExamples} ${Lib}: $I -d -m 755 ${Lib} diff -Nru chezscheme-9.5+dfsg/mats/3.ms chezscheme-9.5.4+dfsg/mats/3.ms --- chezscheme-9.5+dfsg/mats/3.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/3.ms 2020-08-31 02:35:12.000000000 +0000 @@ -2069,6 +2069,24 @@ (lambda l (equal? l '((7))))) #t #f) + + ; regression test for handling mvcall with inline form + (equal? + '(result x) + (let ([bx (box #f)]) + (define-record-type thing + (fields pos) + (nongenerative #{thing hlg584lmg5htbdauw7dkid2sh-0})) + (set-box! bx (make-thing 'x)) + (let ([posx (unbox bx)]) + (cons 'result + (call-with-values + (lambda () + (if (thing? posx) + ;; compiled as inline load: + (thing-pos posx) + (do-something-else))) + list))))) ) (mat let-values diff -Nru chezscheme-9.5+dfsg/mats/4.ms chezscheme-9.5.4+dfsg/mats/4.ms --- chezscheme-9.5+dfsg/mats/4.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/4.ms 2020-08-31 02:35:12.000000000 +0000 @@ -370,6 +370,8 @@ ) (mat cond + (error? ; invalid syntax + (cond)) (let ((a 'a)) (and (begin (set! a 3) (cond ((= a 4) #f) ((= a 3) #t) (else #f))) @@ -395,6 +397,8 @@ (mat exclusive-cond (error? ; invalid syntax (exclusive-cond [a . b])) + (error? ; invalid syntax + (exclusive-cond)) (let ((a 'a)) (and (begin (set! a 3) (exclusive-cond ((= a 4) #f) ((= a 3) #t) (else #f))) @@ -448,7 +452,7 @@ ; make sure no collection occurs before profile data is dumped (parameterize ([compile-profile #t] [collect-request-handler void]) (load "testfile.ss" compile) - (profile-dump-data "testfile.pd")) + (profile-dump-data "testfile.pd" (remp preexisting-profile-dump-entry? (profile-dump)))) ; make sure collections are restarted (collect))) "(11 10 1 10 0)\n") @@ -463,168 +467,299 @@ (begin (profile-clear-database) #t) - ) - -(mat case - (error? ; invalid syntax - (case 3 [a . b])) - (eq? (case 'a [a 'yes] [b 'no]) 'yes) - (let ((a 'a)) - (and - (begin (set! a 'a) - (case a (a #t) ((b c) #f)) - (case a (a #t) ((b c) #f) (else #f))) - (begin (set! a 'b) - (case a (a #f) ((b c) #t)) - (case a (a #f) ((b c) #t) (else #f))) - (begin (set! a 'c) - (case a (a #f) ((b c) #t)) - (case a (a #f) ((b c) #t) (else #f))) - (begin (set! a 'd) - (case a (a #f) ((b c) #f) (else #t))))) - (let ([f (lambda (x) - (case x - (#\a 'case1) - (1/2 'case2) - (999999999999999 'case3) - (3.4 'case4) - (else 'oops)))]) - (and (eq? (f (string-ref "abc" 0)) 'case1) - (eq? (f (exact 0.5)) 'case2) - (eq? (f (- 1000000000000000 1)) 'case3) - (eq? (f (+ 3.0 4/10)) 'case4) - (eq? (f 'b) 'oops))) - (case '() [() #f] [else #t]) - (case '() [(()) #t] [else #f]) - (case "meow" ["meow" #t] [else #f]) - (case '(1 2 3) [((1 2 3) (3 2 1)) #t] [else #f]) - (case 'a [1 6] ["meow" #f] [(a b c) #t]) - (case #\: [1 6] ["meow" #f] [(a b c) #f] [(#\; #\9 #\: #\4) #t]) - (case (/ 12.0 3.0) [(4 5 6) #f] [("bla") #f] [(a b c) #f] [(1 5.8 4.9 4.0) #t] [else #f]) - (begin - (with-output-to-file "testfile.ss" - (lambda () - (pretty-print - '(define foo - (lambda (x) - (case x - [("three" 4) 'B] - [("three" 5) 'A] - [else #f])))) - (pretty-print - '(begin - (do ([i 10 (fx- i 1)]) ((fx= i 0)) (write (foo 5))) - (write (foo "three"))))) - 'replace) - (profile-clear-database) - #t) - ; verify no reordering w/no profile information - (let ([x (let* ([ip (open-file-input-port "testfile.ss")] - [sfd (make-source-file-descriptor "testfile.ss" ip #t)] - [ip (transcoded-port ip (native-transcoder))]) - (let-values ([(x efp) (get-datum/annotations ip sfd 0)]) - (close-port ip) - (parameterize ([optimize-level 2] [enable-cp0 #f] [#%$suppress-primitive-inlining #f]) (expand/optimize x))))]) - ; redundant keys might or might not be pruned, so allow it both ways - (or (equivalent-expansion? - x - '(begin - (set! foo - (lambda (x) - (let ([t x]) - (if (#2%member t '("three" 4)) - 'B - (if (#2%member t '("three" 5)) - 'A - #f))))) - (#2%void))) - (equivalent-expansion? - x - '(begin - (set! foo - (lambda (x) - (let ([t x]) - (if (#2%member t '("three" 4)) - 'B - (if (#2%member t '(5)) - 'A - #f))))) - (#2%void))))) - (equal? - (with-output-to-string - (lambda () - (parameterize ([compile-profile #t]) (load "testfile.ss" compile)))) - "AAAAAAAAAAB") (begin - (profile-dump-data "testfile.pd") - (profile-load-data "testfile.pd") + (profile-load-data "testfile.pd" "testfile.pd") #t) (equal? (with-output-to-string (lambda () (load "testfile.ss" compile))) - "AAAAAAAAAAB") - ; verify reordering based on profile information - (equivalent-expansion? - (let* ([ip (open-file-input-port "testfile.ss")] - [sfd (make-source-file-descriptor "testfile.ss" ip #t)] - [ip (transcoded-port ip (native-transcoder))]) - (let-values ([(x efp) (get-datum/annotations ip sfd 0)]) - (close-port ip) - (parameterize ([optimize-level 2] [enable-cp0 #f] [#%$suppress-primitive-inlining #f]) (expand/optimize x)))) - '(begin - (set! foo - (lambda (x) - (let ([t x]) - (if (#2%member t '(5)) - 'A - (if (#2%member t '("three" 4)) - 'B - #f))))) - (#2%void))) + "(1 11 1 10 0)\n") (begin (profile-clear-database) #t) -) + ) +(mat case + (error? ; invalid syntax + (case 3 [a . b])) + (eq? (case 'a [a 'yes] [b 'no]) 'yes) + (let ((a 'a)) + (and + (begin (set! a 'a) + (case a (a #t) ((b c) #f)) + (case a (a #t) ((b c) #f) (else #f))) + (begin (set! a 'b) + (case a (a #f) ((b c) #t)) + (case a (a #f) ((b c) #t) (else #f))) + (begin (set! a 'c) + (case a (a #f) ((b c) #t)) + (case a (a #f) ((b c) #t) (else #f))) + (begin (set! a 'd) + (case a (a #f) ((b c) #f) (else #t))))) + (let ([f (lambda (x) + (case x + (#\a 'case1) + (1/2 'case2) + (999999999999999 'case3) + (3.4 'case4) + (else 'oops)))]) + (and (eq? (f (string-ref "abc" 0)) 'case1) + (eq? (f (exact 0.5)) 'case2) + (eq? (f (- 1000000000000000 1)) 'case3) + (eq? (f (+ 3.0 4/10)) 'case4) + (eq? (f 'b) 'oops))) + (case '() [() #f] [else #t]) + (case '() [(()) #t] [else #f]) + (case "meow" ["meow" #t] [else #f]) + (case '(1 2 3) [((1 2 3) (3 2 1)) #t] [else #f]) + (case 'a [1 6] ["meow" #f] [(a b c) #t]) + (case #\: [1 6] ["meow" #f] [(a b c) #f] [(#\; #\9 #\: #\4) #t]) + (case (/ 12.0 3.0) [(4 5 6) #f] [("bla") #f] [(a b c) #f] [(1 5.8 4.9 4.0) #t] [else #f]) + (begin + (with-output-to-file "testfile.ss" + (lambda () + (pretty-print + '(define foo + (lambda (x) + (case x + [("three" 4) 'B] + [("three" 5) 'A] + [else #f])))) + (pretty-print + '(begin + (do ([i 10 (fx- i 1)]) ((fx= i 0)) (write (foo 5))) + (write (foo "three"))))) + 'replace) + (profile-clear-database) + #t) + ; verify no reordering w/no profile information + (let ([x (let* ([ip (open-file-input-port "testfile.ss")] + [sfd (make-source-file-descriptor "testfile.ss" ip #t)] + [ip (transcoded-port ip (native-transcoder))]) + (let-values ([(x efp) (get-datum/annotations ip sfd 0)]) + (close-port ip) + (parameterize ([optimize-level 2] [enable-cp0 #f] [#%$suppress-primitive-inlining #f]) (expand/optimize x))))]) + ; redundant keys might or might not be pruned, so allow it both ways + (or (equivalent-expansion? + x + '(begin + (set! foo + (lambda (x) + (let ([t x]) + (if (#2%member t '("three" 4)) + 'B + (if (#2%member t '("three" 5)) + 'A + #f))))) + (#2%void))) + (equivalent-expansion? + x + '(begin + (set! foo + (lambda (x) + (let ([t x]) + (if (#2%member t '("three" 4)) + 'B + (if (#2%member t '(5)) + 'A + #f))))) + (#2%void))))) + (equal? + (with-output-to-string + (lambda () + (parameterize ([compile-profile #t]) (load "testfile.ss" compile)))) + "AAAAAAAAAAB") + (begin + (profile-dump-data "testfile.pd" (remp preexisting-profile-dump-entry? (profile-dump))) + (profile-load-data "testfile.pd") + #t) + (equal? + (with-output-to-string + (lambda () + (load "testfile.ss" compile))) + "AAAAAAAAAAB") + ; verify reordering based on profile information + (equivalent-expansion? + (let* ([ip (open-file-input-port "testfile.ss")] + [sfd (make-source-file-descriptor "testfile.ss" ip #t)] + [ip (transcoded-port ip (native-transcoder))]) + (let-values ([(x efp) (get-datum/annotations ip sfd 0)]) + (close-port ip) + (parameterize ([optimize-level 2] [enable-cp0 #f] [#%$suppress-primitive-inlining #f]) (expand/optimize x)))) + '(begin + (set! foo + (lambda (x) + (let ([t x]) + (if (#2%member t '(5)) + 'A + (if (#2%member t '("three" 4)) + 'B + #f))))) + (#2%void))) + (begin + (profile-clear-database) + #t) + (equivalent-expansion? + (parameterize ([optimize-level 2] [enable-cp0 #f] [#%$suppress-primitive-inlining #f]) + (expand/optimize '(lambda (x) (case x [(a b a 7) 'one] [(c a 7 9) 'two] [else 'three])))) + '(lambda (x) + (let ([t x]) + (if (#2%member t '(a b 7)) + 'one + (if (#2%member t '(c 9)) + 'two + 'three))))) + ; ensure we don't miss syntax errors through case discarding unreachable clause bodies + (error? ; invalid syntax (if) + (lambda (x) + (case x + [(a) 'one] + [(b c) 'two] + [(a b c) (if)] + [else #f]))) + ; ensure expansion into cond doesn't cause => to "work" for case + (error? ; invalid syntax => + (lambda (x) + (case x + [(a b c) => values]))) + (error? ; invalid syntax => + (lambda (x) + (case x + [(a b c) #f] + [(d e f) => values]))) + (error? ; invalid syntax => + (lambda (x) + (case x + [(a b c) #f] + [(a b c) => values]))) + (error? ; invalid syntax => + (lambda (x) + (case x + [(a b c) => values] + [else #f]))) + (error? ; invalid syntax => + (lambda (x) + (case x + [(a b c) #f] + [(d e f) => values] + [else #f]))) + (error? ; invalid syntax => + (lambda (x) + (case x + [(a b c) #f] + [(a b c) => values] + [else #f]))) + (error? ; invalid syntax (case) + (case)) +) (mat r6rs:case - (error? ; invalid syntax - (r6rs:case 'a [a 'yes] [b 'no])) - (error? ; invalid syntax - (let () - (import (only (rnrs) case)) - (case 'a [a 'yes] [b 'no]))) - (let ((a 'a)) + (error? ; invalid syntax + (let () (import (only (rnrs) case)) - (and - (begin (set! a 'a) - (case a ((a) #t) ((b c) #f)) - (case a ((a) #t) ((b c) #f) (else #f))) - (begin (set! a 'b) - (case a ((a) #f) ((b c) #t)) - (case a ((a) #f) ((b c) #t) (else #f))) - (begin (set! a 'c) - (case a ((a) #f) ((b c) #t)) - (case a ((a) #f) ((b c) #t) (else #f))) - (begin (set! a 'd) - (case a ((a) #f) ((b c) #f) (else #t))))) - (let ([f (lambda (x) - (import (only (rnrs) case)) - (case x - ((#\a) 'case1) - ((1/2) 'case2) - ((999999999999999) 'case3) - ((3.4) 'case4) - (else 'oops)))]) - (and (eq? (f (string-ref "abc" 0)) 'case1) - (eq? (f (exact 0.5)) 'case2) - (eq? (f (- 1000000000000000 1)) 'case3) - (eq? (f (+ 3.0 4/10)) 'case4) - (eq? (f 'b) 'oops))) - (case '() [() #f] [else #t]) - (case '() [(()) #t] [else #f]) - ) + (case 'a [a 'yes] [b 'no]))) + (error? ; invalid syntax + (let () + (import (only (rnrs) case)) + (case 'a [a 'yes] [b 'no]))) + (let ((a 'a)) + (import (only (rnrs) case)) + (and + (begin (set! a 'a) + (case a ((a) #t) ((b c) #f)) + (case a ((a) #t) ((b c) #f) (else #f))) + (begin (set! a 'b) + (case a ((a) #f) ((b c) #t)) + (case a ((a) #f) ((b c) #t) (else #f))) + (begin (set! a 'c) + (case a ((a) #f) ((b c) #t)) + (case a ((a) #f) ((b c) #t) (else #f))) + (begin (set! a 'd) + (case a ((a) #f) ((b c) #f) (else #t))))) + (let ([f (lambda (x) + (import (only (rnrs) case)) + (case x + ((#\a) 'case1) + ((1/2) 'case2) + ((999999999999999) 'case3) + ((3.4) 'case4) + (else 'oops)))]) + (and (eq? (f (string-ref "abc" 0)) 'case1) + (eq? (f (exact 0.5)) 'case2) + (eq? (f (- 1000000000000000 1)) 'case3) + (eq? (f (+ 3.0 4/10)) 'case4) + (eq? (f 'b) 'oops))) + (let () + (import (only (rnrs) case)) + (case '() [() #f] [else #t])) + (let () + (import (only (rnrs) case)) + (case '() [(()) #t] [else #f])) + (equivalent-expansion? + (parameterize ([optimize-level 2] [enable-cp0 #f] [#%$suppress-primitive-inlining #f]) + (expand/optimize '(lambda (x) + (import (only (rnrs) case)) + (case x [(a b a 7) 'one] [(c a 7 9) 'two] [else 'three])))) + '(lambda (x) + (let ([t x]) + (if (#2%memv t '(a b 7)) + 'one + (if (#2%memv t '(c 9)) + 'two + 'three))))) + ; ensure we don't miss syntax errors through case discarding unreachable clause bodies + (error? ; invalid syntax (if) + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a) 'one] + [(b c) 'two] + [(a b c) (if)] + [else #f]))) + ; ensure expansion into cond doesn't cause => to "work" for case + (error? ; invalid syntax => + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a b c) => values]))) + (error? ; invalid syntax => + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a b c) #f] + [(d e f) => values]))) + (error? ; invalid syntax => + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a b c) #f] + [(a b c) => values]))) + (error? ; invalid syntax => + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a b c) => values] + [else #f]))) + (error? ; invalid syntax => + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a b c) #f] + [(d e f) => values] + [else #f]))) + (error? ; invalid syntax => + (lambda (x) + (import (only (rnrs) case)) + (case x + [(a b c) #f] + [(a b c) => values] + [else #f]))) + (error? ; invalid syntax (case) + (let () + (import (only (rnrs) case)) + (case))) +) (mat record-case (record-case '(a b c) @@ -956,7 +1091,23 @@ ; make sure compiler doesn't bomb w/two few args (procedure? (lambda (x) (map x))) (error? ; nonprocedure + (map 3 '())) + (error? ; nonprocedure + (map 3 '() '())) + (error? ; nonprocedure (map 3 '(a b c))) + (error? ; nonprocedure + (parameterize ([optimize-level 3]) + (eval '(#2%map 3 '(a b c))))) + (error? ; nonprocedure + (parameterize ([optimize-level 3]) + (eval + '(let () + (define (f p b) + (unbox b) + (#2%map p (if (box? b) '() '(1 2 3))) + (list p (procedure? p))) + (f 7 (box 0)))))) (error? ; improper list (map pretty-print 'a)) (error? ; improper list @@ -1285,6 +1436,10 @@ (procedure? (lambda (x) (fold-left x))) (procedure? (lambda (x) (fold-left x y))) (error? ; nonprocedure + (fold-left 3 0 '())) + (error? ; nonprocedure + (fold-left 3 0 '() '())) + (error? ; nonprocedure (fold-left 3 0 '(a b c))) (error? ; improper list (fold-left cons 0 'a)) @@ -1409,6 +1564,10 @@ (procedure? (lambda (x) (fold-right x))) (procedure? (lambda (x) (fold-right x y))) (error? ; nonprocedure + (fold-right 3 0 '())) + (error? ; nonprocedure + (fold-right 3 0 '() '())) + (error? ; nonprocedure (fold-right 3 0 '(a b c))) (error? ; improper list (fold-right list 0 'a)) @@ -1587,7 +1746,23 @@ ; make sure compiler doesn't bomb w/two few args (procedure? (lambda (x) (for-each x))) (error? ; nonprocedure + (for-each 3 '())) + (error? ; nonprocedure + (for-each 3 '() '())) + (error? ; nonprocedure (for-each 3 '(a b c))) + (error? ; nonprocedure + (parameterize ([optimize-level 3]) + (eval '(#2%for-each 3 '(a b c))))) + (error? ; nonprocedure + (parameterize ([optimize-level 3]) + (eval + '(let () + (define (f p b) + (unbox b) + (#2%for-each p (if (box? b) '() '(1 2 3))) + (list p (procedure? p))) + (f 7 (box 0)))))) (error? ; improper list (for-each pretty-print 'a)) (error? ; improper list @@ -2094,6 +2269,10 @@ ; make sure compiler doesn't bomb w/two few args (procedure? (lambda (x) (ormap x))) (error? ; nonprocedure + (ormap 3 '())) + (error? ; nonprocedure + (ormap 3 '() '())) + (error? ; nonprocedure (ormap 3 '(a b c))) (error? ; improper list (ormap not 'a)) @@ -2195,6 +2374,10 @@ ; make sure compiler doesn't bomb w/two few args (procedure? (lambda (x) (andmap x))) (error? ; nonprocedure + (andmap 3 '())) + (error? ; nonprocedure + (andmap 3 '() '())) + (error? ; nonprocedure (andmap 3 '(a b c))) (error? ; improper list (andmap values 'a)) @@ -2296,6 +2479,10 @@ ; make sure compiler doesn't bomb w/two few args (procedure? (lambda (x) (exists x))) (error? ; nonprocedure + (exists 3 '())) + (error? ; nonprocedure + (exists 3 '() '())) + (error? ; nonprocedure (exists 3 '(a b c))) (error? ; improper list (exists not 'a)) @@ -2397,6 +2584,10 @@ ; make sure compiler doesn't bomb w/two few args (procedure? (lambda (x) (for-all x))) (error? ; nonprocedure + (for-all 3 '())) + (error? ; nonprocedure + (for-all 3 '() '())) + (error? ; nonprocedure (for-all 3 '(a b c))) (error? ; improper list (for-all values 'a)) @@ -3288,8 +3479,275 @@ (error #f "no static-generation fraz in object-counts list")) (pretty-print (cons g x)) ; keep 'em live #t) + + (parameterize ([collect-request-handler void]) + (define (get-all g) (let ([q (g)]) (if q (cons q (get-all g)) '()))) + (module (insist) + (define ($insist e? expr expected got) + (unless (e? got expected) + (errorf #f "expected ~s to return ~s, got ~s" expr expected got))) + (define-syntax insist + (syntax-rules () + [(_ ?e? ?expr ?expected) + ($insist ?e? '?expr ?expected ?expr)]))) + (let ([g1 (make-guardian)] [g2 (make-guardian)]) + (let ([x (box (cons 'a 'b))] [y (box (cons 'c 'd))]) + (insist eq? (unregister-guardian g1) '()) + (insist eq? (unregister-guardian g2) '()) + (g1 (unbox x)) + (g1 (unbox y)) + (g2 (unbox x)) + (g1 (unbox y)) + (g1 (unbox x)) + (collect 0 0) + (g2 (unbox x)) + (g1 (cons 'e 'f)) + (g2 (unbox x)) + (g1 (unbox x)) + (g2 (cons 'g 'h)) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (let ([q (unregister-guardian g2)]) + (unless (and (= (length q) 4) (equal? (remove '(g . h) q) (list (unbox x) (unbox x) (unbox x)))) + (errorf #f "expected (unregister-guardian g2) to contain x = (a . b), x = (a . b), and (g . h), got ~s" q))) + (insist eq? (unregister-guardian g2) '()) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (collect 0 0) + (insist equal? (get-all g1) '((e . f))) + (insist eq? (get-all g2) '()) + (g2 (unbox x)) + (set-box! x #f) + (collect 0 0) + (insist equal? (get-all g1) '((a . b) (a . b) (a . b))) + (insist equal? (get-all g2) '((a . b))) + (insist equal? (unregister-guardian g1) '((c . d) (c . d))) + (insist eq? (unregister-guardian g2) '()) + (pretty-print (list g1 g2 x y)))) ; keep 'em live + #t) ) +(mat refcount-guardians + (error? ; unrecognized ftype + (ftype-guardian NO!)) + (error? ; first element must be a word-sized integer with native endianness + (let () + (define-ftype A (struct)) + (ftype-guardian A))) + (error? ; first element must be a word-sized integer with native endianness + (let () + (define-ftype A (union [u1 (struct (refcount char))] [u2 (struct (foo (* A)))])) + (ftype-guardian A))) + (error? ; invalid ftype-guardian argument + (let () + (define-ftype A (struct (refcount iptr) (x int))) + (define g (ftype-guardian A)) + (g (cons 'ka 'blooie)))) + (error? ; invalid ftype-guardian argument + (let () + (define-ftype A (struct (refcount iptr) (x int))) + (define g (ftype-guardian A)) + (g (make-ftype-pointer iptr 0)))) + (eq? + (let () + (define-ftype A (struct (refcount iptr) (x int))) + (define g (ftype-guardian iptr)) + (g (make-ftype-pointer A 0))) + (void)) + (with-interrupts-disabled + (let () + (define-ftype A (struct (refcount iptr) (x int))) + (define g (ftype-guardian A)) + (define a (make-ftype-pointer A (foreign-alloc (ftype-sizeof A)))) + (ftype-set! A (refcount) a 0) + (assert (not (ftype-locked-incr! A (refcount) a))) + (assert (eqv? (ftype-ref A (refcount) a) 1)) + (g a) + (set! a #f) + (collect 0 0) + (assert (eqv? (ftype-ref A (refcount) (g)) 0)) + (assert (not (g))) + #t)) + (with-interrupts-disabled + (let () + (define-ftype A (struct (refcount uptr) (x int))) + (define g (ftype-guardian A)) + (define addr (foreign-alloc (ftype-sizeof A))) + (define a1 (make-ftype-pointer A addr)) + (define a2 (make-ftype-pointer A addr)) + (define wpa1 (weak-cons a1 '())) + (define wpa2 (weak-cons a2 '())) + (ftype-set! A (refcount) a1 0) + (ftype-set! A (x) a1 17) + (assert (eqv? (ftype-ref A (x) a1) 17)) + (assert (eqv? (ftype-ref A (x) a2) 17)) + (assert (eqv? (ftype-ref A (refcount) a1) 0)) + (assert (eqv? (ftype-ref A (refcount) a2) 0)) + (assert (not (ftype-locked-incr! A (refcount) a1))) + (assert (not (ftype-locked-incr! A (refcount) a2))) + (assert (eqv? (ftype-ref A (refcount) a1) 2)) + (assert (eqv? (ftype-ref A (refcount) a2) 2)) + (g a1) + (g a2) + (collect 0 0) + (assert (not (g))) + (set! a1 #f) + (collect 0 0) + (assert (not (g))) + (set! a2 #f) + (collect 0 0) + (set! a2 (g)) + (assert (eq? (car wpa2) a2)) + (assert (not (g))) + (assert (eqv? (ftype-ref A (refcount) a2) 0)) + #t)) + (with-interrupts-disabled + (let () + (define-ftype A (struct (refcount iptr) (x int))) + (define g (ftype-guardian A)) + (define regular-g (make-guardian)) + (define addr (foreign-alloc (ftype-sizeof A))) + (define a (make-ftype-pointer A addr)) + (ftype-set! A (refcount) a 0) + (assert (not (ftype-locked-incr! A (refcount) a))) + (assert (eqv? (ftype-ref A (refcount) a) 1)) + (regular-g a) + (g a) + (regular-g a) + (set! a #f) + (collect 0 0) + (assert (eqv? (ftype-ref A (refcount) (regular-g)) 0)) + (assert (eqv? (ftype-ref A (refcount) (regular-g)) 0)) + (assert (eqv? (ftype-ref A (refcount) (g)) 0)) + (assert (not (regular-g))) + (assert (not (g))) + #t)) + (with-interrupts-disabled + (let () + (define-ftype A (struct (refcount uptr) (x int))) + (define g (ftype-guardian A)) + (define regular-g (make-guardian)) + (define addr (foreign-alloc (ftype-sizeof A))) + (define a (make-ftype-pointer A addr)) + (ftype-set! A (refcount) a 0) + (assert (not (ftype-locked-incr! A (refcount) a))) + (assert (not (ftype-locked-incr! A (refcount) a))) + (assert (eqv? (ftype-ref A (refcount) a) 2)) + (regular-g a) + (g a) + (regular-g a) + (set! a #f) + (collect 0 0) + (assert (eqv? (ftype-ref A (refcount) (regular-g)) 1)) + (assert (eqv? (ftype-ref A (refcount) (regular-g)) 1)) + (assert (not (regular-g))) + (assert (not (g))) + #t)) + (with-interrupts-disabled + (let () + (define-ftype A (struct (refcount iptr) (x int))) + (define g (ftype-guardian A)) + (define regular-g (make-guardian)) + (define addr (foreign-alloc (ftype-sizeof A))) + (define a (make-ftype-pointer A addr)) + (ftype-set! A (refcount) a 0) + (assert (not (ftype-locked-incr! A (refcount) a))) + (assert (not (ftype-locked-incr! A (refcount) a))) + (assert (eqv? (ftype-ref A (refcount) a) 2)) + (regular-g a) + (g a) + (g a) + (regular-g a) + (set! a #f) + (collect 0 0) + (assert (eqv? (ftype-ref A (refcount) (regular-g)) 0)) + (assert (eqv? (ftype-ref A (refcount) (regular-g)) 0)) + (assert (eqv? (ftype-ref A (refcount) (g)) 0)) + (assert (not (regular-g))) + (assert (not (g))) + #t)) + + (parameterize ([collect-request-handler void]) + (define-ftype A (struct (refcount iptr) (uid int))) + (define (get-all g) + (let ([a (g)]) + (if a + (begin + (unless (eqv? (ftype-ref A (refcount) a) 0) + (errorf 'get-all "nonzero refcount ~s, uid ~s" (ftype-ref A (refcount) a) (ftype-ref A (uid) a))) + (cons a (get-all g))) + '()))) + (module (insist) + (define ($insist e? expr expected got) + (unless (e? got expected) + (errorf #f "expected ~s to return ~s, got ~s" expr expected got))) + (define-syntax insist + (syntax-rules () + [(_ ?e? ?expr ?expected) + ($insist ?e? '?expr ?expected ?expr)]))) + (define (get-uid a) (ftype-ref A (uid) a)) + (define (fritter addr refcount uid) + (let ([a (make-ftype-pointer A addr)]) + (ftype-set! A (refcount) a refcount) + (ftype-set! A (uid) a uid) + (box a))) + (let ([x-addr (foreign-alloc (ftype-sizeof A))] [y-addr (foreign-alloc (ftype-sizeof A))] [z-addr (foreign-alloc (ftype-sizeof A))]) + (let ([x1 (fritter x-addr 6 73)] [x2 (box (make-ftype-pointer A x-addr))] [y (fritter y-addr 2 57)] [z (fritter z-addr 2 91)]) + (let ([g1 (ftype-guardian A)] [g2 (ftype-guardian A)]) + (insist eq? (unregister-guardian g1) '()) + (insist eq? (unregister-guardian g2) '()) + (g1 (unbox x1)) + (g2 (unbox x1)) + (g1 (unbox x1)) + (g1 (unbox x2)) + (g2 (unbox x1)) + (g1 (unbox y)) + (g1 (unbox y)) + (g2 (unbox z)) + (g1 (unbox z)) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (let ([q (unregister-guardian g2)]) + (define (decr-refcount! a) (ftype-locked-decr! A (refcount) a)) + (unless (and (= (length q) 3) (memq (unbox x1) (memq (unbox x1) q)) (memq (unbox z) q)) + (errorf #f "expected (unregister-guardian g2) to contain x/uid 73, x/uid 73, and z/uid 91, got ~s" (map get-uid q))) + (map decr-refcount! q)) + (insist eq? (unregister-guardian g2) '()) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (pretty-print z) ; keep it live + (set-box! z #f) + (collect 0 0) + (insist equal? (map get-uid (get-all g1)) '(91)) + (insist eq? (get-all g2) '()) + (g2 (unbox x1)) + (pretty-print x1) ; keep it live + (set-box! x1 #f) + (collect 0 0) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (insist eq? (unregister-guardian g2) '()) + (insist eqv? (ftype-ref A (refcount) (unbox x2)) 1) + (pretty-print x2) ; keep it live + (set-box! x2 #f) + (collect 0 0) + (insist equal? (map get-uid (get-all g1)) '(73)) + (insist equal? (map get-uid (get-all g2)) '()) + (insist eq? (unregister-guardian g2) '()) + (pretty-print y) ; keep it live + (set-box! y #f) + (collect 0 0) + (insist equal? (map get-uid (get-all g1)) '(57)) + (insist equal? (map get-uid (get-all g2)) '()) + (insist eq? (unregister-guardian g1) '()) + (insist eq? (unregister-guardian g2) '()) + (pretty-print (list g1 g2 x y)))) ; keep 'em live + (foreign-free x-addr) + (foreign-free y-addr) + (foreign-free z-addr)) + #t) + ) + (mat weak-cons (procedure? weak-cons) (procedure? weak-pair?) @@ -3372,7 +3830,7 @@ ;; ---------------------------------------- ;; Stress test to check that the GC doesn't suffer from quadratic ;; behavior - (begin + (let () (define (wrapper v) (list 1 2 3 4 5 v)) ;; Create a chain of ephemerons where we have all @@ -3408,21 +3866,24 @@ ;; off the end of the discover-ephemerons-one-at-a-time ;; chain, which is the most complex case for avoiding ;; quadratic GC times - (define-values (key es) (mk n (gensym) '())) - (define-values (root holds) (mk* n key es)) - - (define start (current-time)) - (collect (collect-maximum-generation)) - (let ([delta (time-difference (current-time) start)]) - ;; Sanity check on ephemerons - (for-each (lambda (e) - (when (eq? #!bwp (ephemeron-key e)) - (error 'check "oops"))) - es) - ;; Keep `root` and `holds` live: - (keep-alive (cons root holds)) - ;; Return duration: - delta)) + (parameterize ([collect-request-handler void] [collect-maximum-generation (max (collect-maximum-generation) 2)]) + (collect 2) + (let*-values ([(key es) (mk n (gensym) '())] + [(root holds) (mk* n key es)]) + (let ([start (current-time)]) + (collect 0 1) + (collect 1 2) + (collect 2 2) + (let ([delta (time-difference (current-time) start)]) + ;; Sanity check on ephemerons + (for-each (lambda (e) + (when (eq? #!bwp (ephemeron-key e)) + (error 'check "oops"))) + es) + ;; Keep `root` and `holds` live: + (keep-alive (cons root holds)) + ;; Return duration: + delta))))) (define N 10000) @@ -3434,11 +3895,14 @@ (define dummy2 (set! dummy #f)) (define t2 (measure-time N keep-alive)) (define (duration->inexact t) (+ (* (time-second t) 1e9) - (time-nanosecond t))) + (inexact (time-nanosecond t)))) (set! dummy #f) - (or (< (/ (duration->inexact t1) (duration->inexact t2)) 20) - (and (positive? tries) - (loop (sub1 tries)))))) + (let ([t1 (duration->inexact t1)] [t2 (duration->inexact t2)]) + (or (< (/ t1 t2) 20) + (begin + (printf "t1 = ~s, t2 = ~s, t1/t2 = ~s\n" t1 t2 (/ t1 t2)) + (and (positive? tries) + (loop (sub1 tries)))))))) ;; ---------------------------------------- ;; Check interaction of mutation and generations @@ -3466,6 +3930,24 @@ (eq? #!bwp (ephemeron-value e))))))))) ;; ---------------------------------------- + ;; Check interaction of mutation and incremental generation promotion + + (with-interrupts-disabled + (let ([key "key"]) + (let ([e (ephemeron-cons key #f)]) + (collect 0 1 1) + (let ([key2 (gensym key)]) + ;; e is gen 1, key2 is gen 0: + (set-car! e key2) + (collect 1 1 2) + ;; Now, e is gen 1, key2 is gen 0 + (and (eq? (car e) key2) + (begin + (collect 1 2 2) + ;; Check that the GC update the reference to `key2` in `e`: + (eq? (car e) key2))))))) + + ;; ---------------------------------------- ;; Check fasl: (let ([s (gensym)]) (define-values (o get) (open-bytevector-output-port)) diff -Nru chezscheme-9.5+dfsg/mats/5_2.ms chezscheme-9.5.4+dfsg/mats/5_2.ms --- chezscheme-9.5+dfsg/mats/5_2.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/5_2.ms 2020-08-31 02:35:12.000000000 +0000 @@ -165,6 +165,97 @@ (mat length (= (length '(1 2 3 4 5)) 5) (= (length '()) 0) + ; check that expand-primitives doesn't generate incorrect code. + ; we don't check that it optimizes, however. + (let ([ls* (map make-list '(0 1 2 3 4 5 8 9 10 99 100 101 1000))]) + (define-syntax test1 + (syntax-rules () + [(_ prim) + (let () + (define (f x) + (and + (prim (#3%length x)) + (prim (#3%length x)))) + (andmap + (lambda (x) + (let ([n (length x)]) + (equal? + (f x) + (prim n)))) + ls*))])) + (define-syntax test2 + (syntax-rules () + [(_ prim) + (let () + (define (f x) + (list + (prim (#3%length x) 0) + (prim 0 (#3%length x)) + (prim (#3%length x) 1) + (prim 1 (#3%length x)) + (prim (#3%length x) 4) + (prim 4 (#3%length x)) + (prim (#3%length x) 9) + (prim 9 (#3%length x)) + (prim (#3%length x) 100) + (prim 100 (#3%length x)))) + (andmap + (lambda (x) + (let ([n (length x)]) + (equal? + (f x) + (list + (prim n 0) + (prim 0 n) + (prim n 1) + (prim 1 n) + (prim n 4) + (prim 4 n) + (prim n 9) + (prim 9 n) + (prim n 100) + (prim 100 n))))) + ls*))])) + (and + (test1 zero?) + (test1 positive?) + (test1 nonnegative?) + (test1 negative?) + (test1 nonpositive?) + (test1 fxzero?) + (test1 fxpositive?) + (test1 fxnonnegative?) + (test1 fxnegative?) + (test1 fxnonpositive?) + (test2 eq?) + (test2 eqv?) + (test2 equal?) + (test2 <) + (test2 <=) + (test2 =) + (test2 >=) + (test2 >) + (test2 r6rs:<) + (test2 r6rs:<=) + (test2 r6rs:=) + (test2 r6rs:>=) + (test2 r6rs:>) + (test2 r6rs:<) + (test2 r6rs:<=) + (test2 r6rs:=) + (test2 r6rs:>=) + (test2 r6rs:>) + (test2 fx<) + (test2 fx<=) + (test2 fx=) + (test2 fx>=) + (test2 fx>) + (test2 fx=?) + (test2 fx>?) + (test2 #%$fxu<))) ) (mat list-ref diff -Nru chezscheme-9.5+dfsg/mats/5_3.ms chezscheme-9.5.4+dfsg/mats/5_3.ms --- chezscheme-9.5+dfsg/mats/5_3.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/5_3.ms 2020-08-31 02:35:12.000000000 +0000 @@ -1599,6 +1599,30 @@ (error? (* 'a 3 4)) (error? (* 3 5 'a 4)) (eqv? (* 1 2) 2) + (eqv? (* 23170 23170) 536848900) + (eqv? (* 23170 -23170) -536848900) + (eqv? (* -23170 23170) -536848900) + (eqv? (* -23170 -23170) 536848900) + (eqv? (* 23171 23170) 536872070) + (eqv? (* 23171 -23170) -536872070) + (eqv? (* -23171 23170) -536872070) + (eqv? (* -23171 -23170) 536872070) + (eqv? (* 23171 23171) 536895241) + (eqv? (* 23171 -23171) -536895241) + (eqv? (* -23171 23171) -536895241) + (eqv? (* -23171 -23171) 536895241) + (eqv? (* #x3FFFFFFF #x3FFFFFFF) #xFFFFFFF80000001) + (eqv? (* #x3FFFFFFF #x-3FFFFFFF) #x-FFFFFFF80000001) + (eqv? (* #x-3FFFFFFF #x3FFFFFFF) #x-FFFFFFF80000001) + (eqv? (* #x-3FFFFFFF #x-3FFFFFFF) #xFFFFFFF80000001) + (eqv? (* #x40000000 #x3FFFFFFF) #xFFFFFFFC0000000) + (eqv? (* #x40000000 #x-3FFFFFFF) #x-FFFFFFFC0000000) + (eqv? (* #x-40000000 #x3FFFFFFF) #x-FFFFFFFC0000000) + (eqv? (* #x-40000000 #x-3FFFFFFF) #xFFFFFFFC0000000) + (eqv? (* #x40000000 #x40000000) #x1000000000000000) + (eqv? (* #x40000000 #x-40000000) #x-1000000000000000) + (eqv? (* #x-40000000 #x40000000) #x-1000000000000000) + (eqv? (* #x-40000000 #x-40000000) #x1000000000000000) (fl~= (* 1.0 2) 2.0) (fl~= (* 1 2.0) 2.0) (eqv? (* 3/5 2/5) 6/25) @@ -1876,6 +1900,8 @@ (error? (even? 3.2)) (error? (even? 3.0+1.0i)) (error? (even? 1+1i)) + (error? (even? +inf.0)) + (error? (even? +nan.0)) ) (mat odd? @@ -1891,6 +1917,8 @@ (error? (odd? 3.2)) (error? (odd? 3.0+1.0i)) (error? (odd? 3+1i)) + (error? (odd? +inf.0)) + (error? (odd? +nan.0)) ) (mat 1+ @@ -2849,6 +2877,107 @@ (eqv? (ash #x-8000000000000000 -31) #x-100000000) (eqv? (ash #x-8000000000000000 -32) #x-80000000) (eqv? (ash #x-8000000000000000 -33) #x-40000000) + (begin + (define ($test-right-shift srl) + (define ($go q x n expected) + (let ([got (srl x n)]) + (unless (eqv? got expected) + (syntax-error q (format "expected ~x, got ~x" expected got))))) + (define-syntax go + (lambda (q) + (syntax-case q () + [(_ x n expected) #`($go #'#,q x n expected)]))) + (let* ([$x (expt 2 1024)] + [$-x (- $x)] + [$x+1 (+ $x 1)] + [$-x-1 (- $x+1)] + [$x-1 (- $x 1)] + [$-x+1 (- $x-1)] + [$x+8 (+ $x 8)] + [$-x-8 (- $x+8)] + [$x+2^31 (+ $x (expt 2 32))] + [$-x-2^31 (- $x+2^31)] + [$x+2^32 (+ $x (expt 2 32))] + [$-x-2^32 (- $x+2^32)] + [$x+2^40 (+ $x (expt 2 40))] + [$-x-2^40 (- $x+2^40)] + [$x+2^63 (+ $x (expt 2 63))] + [$-x-2^63 (- $x+2^63)] + [$x+2^65 (+ $x (expt 2 65))] + [$-x-2^65 (- $x+2^65)] + [$x*3/2 (ash 3 1023)] + [$-x*3/2 (- $x*3/2)] + ; answers + [$2^64 (expt 2 64)] + [$-2^64 (- $2^64)] + [$-2^64-1 (- -1 $2^64)] + [$x>>64 (expt 2 (- 1024 64))] + [$-x>>64 (- $x>>64)] + [$-x>>64-1 (- -1 $x>>64)] + [$x>>64+2 (+ $x>>64 2)] + [$-x>>64-2 (- $x>>64+2 )] + [$x>>80 (expt 2 (- 1024 80))] + [$-x>>80 (- $x>>80)] + [$-x>>80-1 (- -1 $x>>80)] + ) + (go $x 1024 1) + (go $-x 1024 -1) + (go $x 1025 0) + (go $-x 1025 -1) + (go $x+1 1024 1) + (go $-x-1 1024 -2) + (go $x+1 1025 0) + (go $-x-1 1025 -1) + (go $x (- 1024 64) $2^64) + (go $-x (- 1024 64) $-2^64) + (go $x+1 (- 1024 64) $2^64) + (go $-x-1 (- 1024 64) $-2^64-1) + (go $x+8 (- 1024 64) $2^64) + (go $-x-8 (- 1024 64) $-2^64-1) + (go $x+2^32 (- 1024 64) $2^64) + (go $-x-2^32 (- 1024 64) $-2^64-1) + (go $x+2^65 (- 1024 64) $2^64) + (go $-x-2^65 (- 1024 64) $-2^64-1) + (go $x 64 $x>>64) + (go $-x 64 $-x>>64) + (go $x+1 64 $x>>64) + (go $-x-1 64 $-x>>64-1) + (go $x+8 64 $x>>64) + (go $-x-8 64 $-x>>64-1) + (go $x+2^31 64 $x>>64) + (go $-x-2^31 64 $-x>>64-1) + (go $x+2^40 64 $x>>64) + (go $-x-2^40 64 $-x>>64-1) + (go $x+2^63 64 $x>>64) + (go $-x-2^63 64 $-x>>64-1) + (go $x+2^65 64 $x>>64+2) + (go $-x-2^65 64 $-x>>64-2) + (go $x 80 $x>>80) + (go $-x 80 $-x>>80) + (go $x+1 80 $x>>80) + (go $-x-1 80 $-x>>80-1) + (go $x+8 80 $x>>80) + (go $-x-8 80 $-x>>80-1) + (go $x+2^31 80 $x>>80) + (go $-x-2^31 80 $-x>>80-1) + (go $x+2^32 80 $x>>80) + (go $-x-2^32 80 $-x>>80-1) + (go $x+2^40 80 $x>>80) + (go $-x-2^40 80 $-x>>80-1) + (go $x+2^63 80 $x>>80) + (go $-x-2^63 80 $-x>>80-1) + (go $x+2^65 80 $x>>80) + (go $-x-2^65 80 $-x>>80-1) + (go $x*3/2 1023 3) + (go $-x*3/2 1023 -3) + (go $x*3/2 1024 1) + (go $-x*3/2 1024 -2) + (go $x*3/2 1025 0) + (go $-x*3/2 1025 -1) + ) + #t) + #t) + ($test-right-shift (lambda (x n) (ash x (- n)))) ) (mat bitwise-arithmetic-shift @@ -2894,6 +3023,7 @@ (eqv? (bitwise-arithmetic-shift #x-8000000000000000 -31) #x-100000000) (eqv? (bitwise-arithmetic-shift #x-8000000000000000 -32) #x-80000000) (eqv? (bitwise-arithmetic-shift #x-8000000000000000 -33) #x-40000000) + ($test-right-shift (lambda (x n) (bitwise-arithmetic-shift x (- n)))) ) (mat bitwise-arithmetic-shift-left/right @@ -2939,6 +3069,7 @@ (eqv? (bitwise-arithmetic-shift-right #x-8000000000000000 31) #x-100000000) (eqv? (bitwise-arithmetic-shift-right #x-8000000000000000 32) #x-80000000) (eqv? (bitwise-arithmetic-shift-right #x-8000000000000000 33) #x-40000000) + ($test-right-shift (lambda (x n) (bitwise-arithmetic-shift-right x n))) ) (mat bitwise-bit-field @@ -6249,3 +6380,564 @@ '((0 . 3/5) (0 . -3/5) (0 . 3/5) (0 . -3/5) (5 . 2/7) (-5 . -2/7) (-5 . 2/7) (5 . -2/7))) ) + +(mat special-cases ; test special cases added Feb 2020 + (begin + (define $n 40910371311673474504209841881478505181983799806634563) + (define $-n (- $n)) + (define $q 40910371311673474504209841881478505181983799806634563/7312893582423593745243587) + (define $-q (- $q)) + (define $x 1.499423325079378e100) + (define $-x (- $x)) + (define $ez 3+4i) + (define $-ez (- $ez)) + (define $iz 3.0-4.0i) + (define $-iz (- $iz)) + #t) + (error? ; not a number + (div-and-mod 'bogus 1)) + (error? ; not a number + (div-and-mod 'bogus -1)) + (error? ; domain error + (div-and-mod $n 4+3i)) + (error? ; domain error + (div-and-mod 4+3i $n)) + (error? ; domain error + (div-and-mod 0 0)) + (error? ; domain error + (div-and-mod $n 0)) + (error? ; domain error + (div-and-mod $q 0)) + (error? ; not a number + (div 'bogus 1)) + (error? ; not a number + (div 'bogus -1)) + (error? ; domain error + (div $n 4+3i)) + (error? ; domain error + (div 4+3i $n)) + (error? ; domain error + (div 0 0)) + (error? ; domain error + (div $n 0)) + (error? ; domain error + (div $q 0)) + (error? ; not a number + (mod 'bogus 1)) + (error? ; not a number + (mod 'bogus -1)) + (error? ; domain error + (mod $n 4+3i)) + (error? ; domain error + (mod 4+3i $n)) + (error? ; domain error + (mod 0 0)) + (error? ; domain error + (mod $n 0)) + (error? ; domain error + (mod $q 0)) + (error? ; not a number + (div0-and-mod0 'bogus 1)) + (error? ; not a number + (div0-and-mod0 'bogus -1)) + (error? ; domain error + (div0-and-mod0 $n 4+3i)) + (error? ; domain error + (div0-and-mod0 4+3i $n)) + (error? ; domain error + (div0-and-mod0 0 0)) + (error? ; domain error + (div0-and-mod0 $n 0)) + (error? ; domain error + (div0-and-mod0 $q 0)) + (error? ; not a number + (div0 'bogus 1)) + (error? ; not a number + (div0 'bogus -1)) + (error? ; domain error + (div0 $n 4+3i)) + (error? ; domain error + (div0 4+3i $n)) + (error? ; domain error + (div0 0 0)) + (error? ; domain error + (div0 $n 0)) + (error? ; domain error + (div0 $q 0)) + (error? ; not a number + (mod0 'bogus 1)) + (error? ; not a number + (mod0 'bogus -1)) + (error? ; domain error + (mod0 $n 4+3i)) + (error? ; domain error + (mod0 4+3i $n)) + (error? ; domain error + (mod0 0 0)) + (error? ; domain error + (mod0 $n 0)) + (error? ; domain error + (mod0 $q 0)) + (error? ; not a number + (quotient 'bogus 1)) + (error? ; not a number + (quotient 'bogus -1)) + (error? ; domain error + (quotient $n 4+3i)) + (error? ; domain error + (quotient 4.5 $n)) + (error? ; domain error + (quotient 0 0)) + (error? ; domain error + (quotient $n 0)) + (error? ; domain error + (quotient 4.0 0)) + (error? ; not a number + (remainder 'bogus 1)) + (error? ; not a number + (remainder 'bogus -1)) + (error? ; domain error + (remainder $n 4+3i)) + (error? ; domain error + (remainder 4.5 $n)) + (error? ; domain error + (remainder 0 0)) + (error? ; domain error + (remainder $n 0)) + (error? ; domain error + (remainder 4.0 0)) + (error? ; not a number + (modulo 'bogus 1)) + (error? ; not a number + (modulo 'bogus -1)) + (error? ; domain error + (modulo $n 4+3i)) + (error? ; domain error + (modulo 4.5 $n)) + (error? ; domain error + (modulo 0 0)) + (error? ; domain error + (modulo $n 0)) + (error? ; domain error + (modulo 4.0 0)) + (error? ; not a number + (/ 'bogus 1)) + (error? ; not a number + (/ 'bogus -1)) + (error? ; domain error + (/ 0 0)) + (error? ; domain error + (/ $n 0)) + (error? ; domain error + (/ $q 0)) + (error? ; domain error + (/ $ez 0)) + (error? ; not a number + (* 'bogus 0)) + (error? ; not a number + (* 'bogus 1)) + (error? ; not a number + (* 'bogus -1)) + (error? ; not a number + (* 0 'bogus)) + (error? ; not a number + (* 1 'bogus)) + (error? ; not a number + (* -1 'bogus)) + (error? ; not a number + (+ 'bogus 0)) + (error? ; not a number + (+ 0 'bogus)) + (error? ; not a number + (- 'bogus 0)) + (error? ; not a number + (- 0 'bogus)) + (equal? (call-with-values (lambda () (div-and-mod $n 1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (div-and-mod $n -1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div-and-mod $-n 1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div-and-mod $-n -1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div $n 1) (mod $n 1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div $n -1) (mod $n -1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div $-n 1) (mod $n 1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div $-n -1) (mod $n -1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $n 1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $n -1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $-n 1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $-n -1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div0 $n 1) (mod0 $n 1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div0 $n -1) (mod0 $n -1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div0 $-n 1) (mod0 $n 1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div0 $-n -1) (mod0 $n -1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (quotient $n 1) (remainder $n 1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (quotient $n -1) (remainder $n -1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (quotient $-n 1) (remainder $n 1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (quotient $-n -1) (remainder $n -1))) cons) `(,$n . 0)) + (equal? (modulo $n 1) 0) + (equal? (modulo $n -1) 0) + (equal? (modulo $-n 1) 0) + (equal? (modulo $-n -1) 0) + (equal? (/ $n 1) $n) + (equal? (/ $n -1) $-n) + (equal? (/ $-n 1) $-n) + (equal? (/ $-n -1) $n) + (equal? (/ 0 $n) 0) + (equal? (/ 0 $-n) 0) + (equal? (/ $q 1) $q) + (equal? (/ $q -1) $-q) + (equal? (/ $-q 1) $-q) + (equal? (/ $-q -1) $q) + (equal? (/ $x 1) $x) + (equal? (/ $x -1) $-x) + (equal? (/ $-x 1) $-x) + (equal? (/ $-x -1) $x) + (equal? (/ $ez 1) $ez) + (equal? (/ $ez -1) $-ez) + (equal? (/ $-ez 1) $-ez) + (equal? (/ $-ez -1) $ez) + (equal? (/ $iz 1) $iz) + (equal? (/ $iz -1) $-iz) + (equal? (/ $-iz 1) $-iz) + (equal? (/ $-iz -1) $iz) + (equal? (* $n 1) $n) + (equal? (* $n -1) $-n) + (equal? (* $-n 1) $-n) + (equal? (* $-n -1) $n) + (equal? (* $n 0) 0) + (equal? (* $-n 0) 0) + (equal? (* $q 1) $q) + (equal? (* $q -1) $-q) + (equal? (* $-q 1) $-q) + (equal? (* $-q -1) $q) + (equal? (* $q 0) 0) + (equal? (* $-q 0) 0) + (equal? (* $x 1) $x) + (equal? (* $x -1) $-x) + (equal? (* $-x 1) $-x) + (equal? (* $-x -1) $x) + (equal? (* $x 0) 0) + (equal? (* $-x 0) 0) + (equal? (* $ez 1) $ez) + (equal? (* $ez -1) $-ez) + (equal? (* $-ez 1) $-ez) + (equal? (* $-ez -1) $ez) + (equal? (* $ez 0) 0) + (equal? (* $-ez 0) 0) + (equal? (* $iz 1) $iz) + (equal? (* $iz -1) $-iz) + (equal? (* $-iz 1) $-iz) + (equal? (* $-iz -1) $iz) + (equal? (* $iz 0) 0) + (equal? (* $-iz 0) 0) + (equal? (* 1 $n) $n) + (equal? (* -1 $n) $-n) + (equal? (* 1 $-n) $-n) + (equal? (* -1 $-n) $n) + (equal? (* 0 $n) 0) + (equal? (* 0 $-n) 0) + (equal? (* 1 $q) $q) + (equal? (* -1 $q) $-q) + (equal? (* 1 $-q) $-q) + (equal? (* -1 $-q) $q) + (equal? (* 0 $q) 0) + (equal? (* 0 $-q) 0) + (equal? (* 1 $x) $x) + (equal? (* -1 $x) $-x) + (equal? (* 1 $-x) $-x) + (equal? (* -1 $-x) $x) + (equal? (* 0 $x) 0) + (equal? (* 0 $-x) 0) + (equal? (* 1 $ez) $ez) + (equal? (* -1 $ez) $-ez) + (equal? (* 1 $-ez) $-ez) + (equal? (* -1 $-ez) $ez) + (equal? (* 0 $ez) 0) + (equal? (* 0 $-ez) 0) + (equal? (* 1 $iz) $iz) + (equal? (* -1 $iz) $-iz) + (equal? (* 1 $-iz) $-iz) + (equal? (* -1 $-iz) $iz) + (equal? (* 0 $iz) 0) + (equal? (* 0 $-iz) 0) + (equal? (+ $n 0) $n) + (equal? (+ $-n 0) $-n) + (equal? (+ 0 $n) $n) + (equal? (+ 0 $-n) $-n) + (equal? (+ $q 0) $q) + (equal? (+ $-q 0) $-q) + (equal? (+ 0 $q) $q) + (equal? (+ 0 $-q) $-q) + (equal? (+ $x 0) $x) + (equal? (+ $-x 0) $-x) + (equal? (+ 0 $x) $x) + (equal? (+ 0 $-x) $-x) + (equal? (+ $ez 0) $ez) + (equal? (+ $-ez 0) $-ez) + (equal? (+ 0 $ez) $ez) + (equal? (+ 0 $-ez) $-ez) + (equal? (+ $iz 0) $iz) + (equal? (+ $-iz 0) $-iz) + (equal? (+ 0 $iz) $iz) + (equal? (+ 0 $-iz) $-iz) + (equal? (- $n 0) $n) + (equal? (- $-n 0) $-n) + (equal? (- 0 $n) $-n) + (equal? (- 0 $-n) $n) + (equal? (- $q 0) $q) + (equal? (- $-q 0) $-q) + (equal? (- 0 $q) $-q) + (equal? (- 0 $-q) $q) + (equal? (- $x 0) $x) + (equal? (- $-x 0) $-x) + (equal? (- 0 $x) $-x) + (equal? (- 0 $-x) $x) + (equal? (- $ez 0) $ez) + (equal? (- $-ez 0) $-ez) + (equal? (- 0 $ez) $-ez) + (equal? (- 0 $-ez) $ez) + (equal? (- $iz 0) $iz) + (equal? (- $-iz 0) $-iz) + (equal? (- 0 $iz) $-iz) + (equal? (- 0 $-iz) $iz) + (equal? (- 0 (most-negative-fixnum)) (+ (most-positive-fixnum) 1)) +) + +(mat benchmarks + (let () + ; revert to the original values for benchmarking + (define runs 1 #;10) + (define iter 1 #;100000) + (define min-ns 0 #;#e25e7) + + (define time->ns + (lambda (t) + (+ (* (time-second t) 1000000000) (time-nanosecond t)))) + + (define mean + (lambda (ls) + (assert (not (null? ls))) + (/ (apply + ls) (length ls)))) + + (define stddev + (lambda (m ls) + (define (square x) (* x x)) + (sqrt (mean (map (lambda (x) (square (- x m))) ls))))) + + (define ($run-one expr th expected) + (define (do-big-iter) + (collect 0 0) + (let ([t0 (current-time 'time-monotonic)]) + (do ([iter iter (#3%fx- iter 1)] [ans #f (th)]) + ((#3%fx= iter 0) + (let ([t (time-difference t0 (current-time 'time-monotonic))]) + (unless (equal? ans expected) (errorf #f "oops ~s != ~s for ~s" ans expected expr)) + t))))) + (parameterize ([collect-request-handler void]) + (collect (collect-maximum-generation)) + ; warm up and calibrate number of ITERATIONS to at least meet min-ns + (let ([ITER (let loop ([ITER 1] [t (make-time 'time-duration 0 0)]) + (let ([t (time-difference t (do-big-iter))]) + (if (>= (time->ns t) min-ns) + ITER + (loop (fx+ ITER 1) t))))]) + (do ([run runs (#3%fx- run 1)] + [t* '() (cons + (let loop ([ITER ITER] [t (make-time 'time-duration 0 0)]) + (do ([ITER ITER (#3%fx- ITER 1)] + [t (make-time 'time-duration 0 0) (time-difference t (do-big-iter))]) + ((#3%fx= ITER 0) t))) + t*)]) + ((#3%fx= run 0) + (let ([ns* (map time->ns (reverse t*))]) + (let ([m (mean ns*)]) + (printf "~s\n" (vector expr (/ m ITER) (if (= m 0) 0 (/ (stddev m ns*) m)) ITER)) + (flush-output-port)))))))) + + (let () + (define (run sra) + (define-syntax run-one + (lambda (x) + (define prettify + (lambda (x) + (let-values ([(neg? x) (if (< x 0) (values #t (- x)) (values #f x))]) + (let ([s (format "~{~a~^+~}" + (let loop ([x x] [k 0] [ls '()]) + (let ([b (bitwise-first-bit-set x)]) + (if (= b -1) + ls + (let ([k (+ k b)]) + (loop (bitwise-arithmetic-shift-right x (fx+ b 1)) (fx+ k 1) + (cons (if (= k 0) "1" (format "2^~a" k)) ls)))))))]) + (if neg? (format "-(~a)" s) s))))) + (syntax-case x () + [(_ sra x k expected) + (with-syntax ([n (eval (datum x))]) + (with-syntax ([expr (format "(sra ~a ~s)" (prettify (datum n)) (datum k))]) + #'($run-one expr (lambda () (sra n k)) expected)))]))) + (printf "((iter . ~s) (min-ns . ~s))\n" iter min-ns) + (printf "(\n") + (run-one sra 1 1 0) + (run-one sra (ash 1 1024) 1024 1) + (run-one sra (ash 1 1024) 512 (ash 1 512)) + (run-one sra (- (ash 1 1024)) 1024 -1) + (run-one sra (- (ash 1 1024)) 512 (- (ash 1 512))) + (run-one sra (+ (ash 1 1024) 1) 1024 1) + (run-one sra (+ (ash 1 1024) 1) 512 (ash 1 512)) + (run-one sra (- (+ (ash 1 1024) 1)) 1024 -2) + (run-one sra (- (+ (ash 1 1024) 1)) 512 (- -1 (ash 1 512))) + (run-one sra (- (ash 1 1024)) 1024 -1) + (run-one sra (- (ash 1 1024)) 512 (- (ash 1 512))) + (run-one sra (ash 1 1024) 1025 0) + (run-one sra (- (ash 1 1024)) 1025 -1) + (run-one sra (ash 3 1023) 1024 1) + (run-one sra (- (ash 3 1023)) 1024 -2) + (run-one sra (ash 3 1023) 1025 0) + (run-one sra (- (ash 3 1023)) 1025 -1) + (run-one sra (ash 1 1000000) 1000000 1) + (run-one sra (- (ash 1 1000000)) 1000000 -1) + (run-one sra (ash 1 1000000) 1000001 0) + (run-one sra (- (ash 1 1000000)) 1000001 -1) + (run-one sra (ash 3 1000000) 1000001 1) + (run-one sra (- (ash 3 1000000)) 1000001 -2) + (run-one sra (ash 3 1000000) 1000002 0) + (run-one sra (- (ash 3 1000000)) 1000002 -1) + ; worst-case---only shifted-off one bit is in the middle + (run-one sra (- (+ (ash 1 1024) (ash 1 512))) 1024 -2) + ; shift by one bit + (run-one sra (ash 3 1000000) 1 (ash 3 999999)) + (run-one sra (- (ash 3 1000000)) 1 (- (ash 3 999999))) + (printf ")\n")) + + (run bitwise-arithmetic-shift-right) + (run (lambda (x k) (bitwise-arithmetic-shift x (- k)))) + (run (lambda (x k) (ash x (- k))))) + + (let () + (define (run) + (define $x 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789) + (define $y (* (most-positive-fixnum) 2)) + (define-syntax run-one + (syntax-rules () + [(_ expr expected) + ($run-one 'expr (lambda () expr) expected)] + [(_ expr expected ...) + ($run-one 'expr (lambda () (call-with-values (lambda () expr) list)) (list expected ...))])) + (define $2x (* 2 $x)) + (define $x+2 (+ $x 2)) + (define $-x (- $x)) + (define $x^4 (* $x $x $x $x)) + (define $-x^4 (- $x^4)) + (define $2y (* $y 2)) + (define $y+2 (+ $y 2)) + (printf "((iter . ~s) (min-ns . ~s) ($x . ~s) ($y . ~s))\n" iter min-ns $x $y) + (printf "(\n") + (run-one 0 0) + (run-one (* $x 0) 0) + (run-one (* $x^4 0) 0) + (run-one (* $x 1) $x) + (run-one (* $x^4 1) $x^4) + (run-one (* $x -1) $-x) + (run-one (* $x^4 -1) $-x^4) + (run-one (* 1 $x) $x) + (run-one (* 1 $x^4) $x^4) + (run-one (* -1 $x) $-x) + (run-one (* -1 $x^4) $-x^4) + (run-one (/ $x 1) $x) + (run-one (/ $x^4 1) $x^4) + (run-one (/ $x -1) $-x) + (run-one (/ $x^4 -1) $-x^4) + (run-one (+ $x 0) $x) + (run-one (+ $x^4 0) $x^4) + (run-one (- $x 0) $x) + (run-one (- $x^4 0) $x^4) + (run-one (+ 0 $x) $x) + (run-one (+ 0 $x^4) $x^4) + (run-one (- 0 $x) $-x) + (run-one (- 0 $x^4) $-x^4) + (run-one (quotient $x 1) $x) + (run-one (quotient $x^4 1) $x^4) + (run-one (quotient $x -1) $-x) + (run-one (remainder $x 1) 0) + (run-one (remainder $x^4 1) 0) + (run-one (remainder $x -1) 0) + (run-one (div-and-mod $x 1) $x 0) + (run-one (div-and-mod $x^4 1) $x^4 0) + (run-one (div-and-mod $x -1) $-x 0) + (run-one (div0-and-mod0 $x 1) $x 0) + (run-one (div0-and-mod0 $x^4 1) $x^4 0) + (run-one (div0-and-mod0 $x -1) $-x 0) + (run-one (div $x 1) $x) + (run-one (div $x^4 1) $x^4) + (run-one (div $x -1) $-x) + (run-one (div0 $x 1) $x) + (run-one (div0 $x^4 1) $x^4) + (run-one (div0 $x -1) $-x) + (run-one (mod $x 1) 0) + (run-one (mod $x^4 1) 0) + (run-one (mod $x -1) 0) + (run-one (mod0 $x 1) 0) + (run-one (mod0 $x^4 1) 0) + (run-one (mod0 $x -1) 0) + ; these should not improve and we hope not slow down measurably + (run-one (* $y 2) $2y) + (run-one (/ $2y 2) $y) + (run-one (+ $y 2) $y+2) + (run-one (- $y -2) $y+2) + (run-one (quotient $y 2) (ash $y -1)) + (run-one (remainder $y 2) (logand $y 1)) + (run-one (div-and-mod $2y 2) $y 0) + (run-one (div0-and-mod0 $2y 2) $y 0) + (run-one (div $2y 2) $y) + (run-one (div0 $2y 2) $y) + (run-one (mod $2y 2) 0) + (run-one (mod0 $2y 2) 0) + (printf ")\n")) + + (run)) + + ; use with --program to compare results + #;(top-level-program + (import (chezscheme)) + + (unless (= (length (command-line-arguments)) 3) + (fprintf (current-error-port) "usage: ~a: \n" (car (command-line))) + (exit 1)) + + (let ([reportfn (car (command-line-arguments))] + [beforefn (cadr (command-line-arguments))] + [afterfn (caddr (command-line-arguments))]) + (let-values ([(before-info before) (with-input-from-file beforefn (lambda () (let ([info (read)]) (values info (read)))))] + [(after-info after) (with-input-from-file afterfn (lambda () (let ([info (read)]) (values info (read)))))]) + (with-output-to-file reportfn + (lambda () + (unless (equal? before-info after-info) (errorf #f "before info ~s and after info ~s differ" before-info after-info)) + (let ([iter (cond [(assq 'iter before-info) => cdr] [else (errorf #f "expected to find binding for iter in info\n")])]) + (printf "Results ~a
\n" (machine-type)) + (printf "

~{~a~^
~}

" (map (lambda (a) (format "~s = ~s" (car a) (cdr a))) before-info)) + (printf "
\n" iter iter) + (for-each + (lambda (before after) + (define EXPR 0) + (define MEAN-NS 1) + (define STDDEV 2) + (define ITER 3) + (for-each + (lambda (i) + (unless (equal? (vector-ref before i) (vector-ref after i)) + (errorf #f "comparing apples to oranges: ~s, ~s" before after))) + (list EXPR)) + (printf "\n" + (vector-ref before EXPR) + (* (/ (- (vector-ref before MEAN-NS) (vector-ref after MEAN-NS)) (vector-ref before MEAN-NS)) 100) + (vector-ref before STDDEV) + (vector-ref after STDDEV) + (/ (vector-ref before MEAN-NS) (expt 10 9)) + (/ (vector-ref after MEAN-NS) (expt 10 9)) + (vector-ref before ITER) + (vector-ref after ITER) + )) + before + after) + (printf "
expressionspeedupbefore stddevafter stddevbefore time (x~s)after time (x~s)before iterationsafter iterations
~a~5,2f%~7,4f%~7,4f%~10,8f~10,8f~s~s
\n"))) + 'replace)))) + #t) +) diff -Nru chezscheme-9.5+dfsg/mats/5_4.ms chezscheme-9.5.4+dfsg/mats/5_4.ms --- chezscheme-9.5+dfsg/mats/5_4.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/5_4.ms 2020-08-31 02:35:12.000000000 +0000 @@ -927,6 +927,40 @@ "apkf1" "bqlg2" "crmh3" "dsni4" "etoj5" "uapkf1" "vbqlg2" "wcrmh3" "xdsni4" "yetoj5" "aupkf1" "bvqlg2" "cwrmh3" "dxsni4" "eytoj5")) + ; check for proper tail recursion + (equal? + (list + (let ([s (statistics)]) + (let ([k 100000] [str "abc"]) + (let ([n k] [m 0]) + (define (f) (unless (fx= n 0) (string-for-each foo str))) + (define (foo x) + (set! m (+ m 1)) + (when (char=? x (string-ref str (fx- (string-length str) 1))) + (set! n (- n 1)) + (f) + 17)) ; blow tail recursion here + (f) + (list (> (sstats-bytes (sstats-difference (statistics) s)) + 10000) + (eqv? n 0) + (eqv? m (* k (string-length str))))))) + (let ([s (statistics)]) + (let ([k 100000] [str "abc"]) + (let ([n k] [m 0]) + (define (f) (unless (fx= n 0) (string-for-each foo str))) + (define (foo x) + (set! m (+ m 1)) + (when (char=? x (string-ref str (fx- (string-length str) 1))) + (set! n (- n 1)) + (f))) + (f) + (list (<= 0 + (sstats-bytes (sstats-difference (statistics) s)) + 1000) + (eqv? n 0) + (eqv? m (* k (string-length str)))))))) + '((#t #t #t) (#t #t #t))) ) (mat string-xcase-errors diff -Nru chezscheme-9.5+dfsg/mats/5_5.ms chezscheme-9.5.4+dfsg/mats/5_5.ms --- chezscheme-9.5+dfsg/mats/5_5.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/5_5.ms 2020-08-31 02:35:12.000000000 +0000 @@ -428,17 +428,31 @@ ) (mat $string-ref-check? - (let ([s (make-string 3)] [not-s (make-vector 3)]) + (let ([s (make-string 3)] [imm-s (string->immutable-string (make-string 3))] [not-s (make-vector 3)]) (let ([i-1 -1] [i0 0] [i1 1] [i2 2] [i3 3] [ifalse #f] [ibig (+ (most-positive-fixnum) 1)]) (and (not (#%$string-ref-check? not-s i0)) (not (#%$string-ref-check? s ifalse)) (not (#%$string-ref-check? s i-1)) + (not (#%$string-ref-check? imm-s i-1)) + (#%$string-ref-check? s 0) + (#%$string-ref-check? s 1) + (#%$string-ref-check? s 2) + (#%$string-ref-check? imm-s 0) + (#%$string-ref-check? imm-s 1) + (#%$string-ref-check? imm-s 2) (#%$string-ref-check? s i0) (#%$string-ref-check? s i1) (#%$string-ref-check? s i2) + (#%$string-ref-check? imm-s i0) + (#%$string-ref-check? imm-s i1) + (#%$string-ref-check? imm-s i2) + (not (#%$string-ref-check? s 3)) (not (#%$string-ref-check? s i3)) - (not (#%$string-ref-check? s ibig))))) + (not (#%$string-ref-check? s ibig)) + (not (#%$string-ref-check? imm-s 3)) + (not (#%$string-ref-check? imm-s i3)) + (not (#%$string-ref-check? imm-s ibig))))) ) (mat string-ref @@ -699,8 +713,12 @@ (error? (substring-fill! 'a 0 1 #\a)) (error? (substring-fill! "hi" 0 'a #\a)) (error? (substring-fill! "hi" 1 0 #\a)) - (equal? (substring-fill! "hitme!" 0 5 #\a) "aaaaa!") - (eqv? (substring-fill! "" 0 0 #\a) "") + (let ([s (string-copy "hitme!")]) + (substring-fill! s 0 5 #\a) + (equal? s "aaaaa!")) + (let ([s ""]) + (substring-fill! s 0 0 #\a) + (eqv? s "")) (let ([s (string-copy "ABCDE")]) (and (begin (substring-fill! s 0 0 #\$) diff -Nru chezscheme-9.5+dfsg/mats/5_6.ms chezscheme-9.5.4+dfsg/mats/5_6.ms --- chezscheme-9.5+dfsg/mats/5_6.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/5_6.ms 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,4 @@ -;;; 5-5.ms +;;; 5_6.ms ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,19 +38,35 @@ ) (mat $vector-ref-check? - (let ([v (make-vector 3)] [not-v (make-fxvector 3)]) + (let ([v (make-vector 3)] [imm-v (vector->immutable-vector (make-vector 3))] [not-v (make-fxvector 3)]) (let ([i-1 -1] [i0 0] [i1 1] [i2 2] [i3 3] [ifalse #f] [ibig (+ (most-positive-fixnum) 1)]) (and (not (#%$vector-ref-check? not-v i0)) (not (#%$vector-ref-check? v ifalse)) + (not (#%$vector-ref-check? imm-v ifalse)) (not (#%$vector-ref-check? v i-1)) + (not (#%$vector-ref-check? imm-v i-1)) + (#%$vector-ref-check? v 0) + (#%$vector-ref-check? v 1) + (#%$vector-ref-check? v 2) + (#%$vector-ref-check? imm-v 0) + (#%$vector-ref-check? imm-v 1) + (#%$vector-ref-check? imm-v 2) (#%$vector-ref-check? v i0) (#%$vector-ref-check? v i1) - (#%$vector-ref-check? v i2) + (#%$vector-ref-check? v i2) + (#%$vector-ref-check? imm-v i0) + (#%$vector-ref-check? imm-v i1) + (#%$vector-ref-check? imm-v i2) + (not (#%$vector-ref-check? v 3)) (not (#%$vector-ref-check? v i3)) - (not (#%$vector-ref-check? v ibig))))) + (not (#%$vector-ref-check? v ibig)) + (not (#%$vector-ref-check? imm-v 3)) + (not (#%$vector-ref-check? imm-v i3)) + (not (#%$vector-ref-check? imm-v ibig))))) ) + (mat vector-ref (eqv? (vector-ref '#(a b c) 0) 'a) (eqv? (vector-ref '#(a b c) 1) 'b) @@ -191,17 +207,31 @@ ) (mat $fxvector-ref-check? - (let ([fv (make-fxvector 3)] [not-fv (make-vector 3)]) + (let ([fv (make-fxvector 3)] [imm-fv (fxvector->immutable-fxvector (make-fxvector 3))] [not-fv (make-vector 3)]) (let ([i-1 -1] [i0 0] [i1 1] [i2 2] [i3 3] [ifalse #f] [ibig (+ (most-positive-fixnum) 1)]) (and (not (#%$fxvector-ref-check? not-fv i0)) (not (#%$fxvector-ref-check? fv ifalse)) (not (#%$fxvector-ref-check? fv i-1)) + (not (#%$fxvector-ref-check? imm-fv i-1)) + (#%$fxvector-ref-check? fv 0) + (#%$fxvector-ref-check? fv 1) + (#%$fxvector-ref-check? fv 2) + (#%$fxvector-ref-check? imm-fv 0) + (#%$fxvector-ref-check? imm-fv 1) + (#%$fxvector-ref-check? imm-fv 2) (#%$fxvector-ref-check? fv i0) (#%$fxvector-ref-check? fv i1) (#%$fxvector-ref-check? fv i2) + (#%$fxvector-ref-check? imm-fv i0) + (#%$fxvector-ref-check? imm-fv i1) + (#%$fxvector-ref-check? imm-fv i2) + (not (#%$fxvector-ref-check? fv 3)) (not (#%$fxvector-ref-check? fv i3)) - (not (#%$fxvector-ref-check? fv ibig))))) + (not (#%$fxvector-ref-check? fv ibig)) + (not (#%$fxvector-ref-check? imm-fv 3)) + (not (#%$fxvector-ref-check? imm-fv i3)) + (not (#%$fxvector-ref-check? imm-fv ibig))))) ) (mat fxvector-ref @@ -978,6 +1008,40 @@ (u a p k f 1) (v b q l g 2) (w c r m h 3) (x d s n i 4) (y e t o j 5) (a u p k f 1) (b v q l g 2) (c w r m h 3) (d x s n i 4) (e y t o j 5))) + ; check for proper tail recursion + (equal? + (list + (let ([s (statistics)]) + (let ([k 100000] [v '#(a b c)]) + (let ([n k] [m 0]) + (define (f) (unless (fx= n 0) (vector-for-each foo v))) + (define (foo x) + (set! m (+ m 1)) + (when (eq? x (vector-ref v (fx- (vector-length v) 1))) + (set! n (- n 1)) + (f) + 17)) ; blow tail recursion here + (f) + (list (> (sstats-bytes (sstats-difference (statistics) s)) + 10000) + (eqv? n 0) + (eqv? m (* k (vector-length v))))))) + (let ([s (statistics)]) + (let ([k 100000] [v '#(a b c)]) + (let ([n k] [m 0]) + (define (f) (unless (fx= n 0) (vector-for-each foo v))) + (define (foo x) + (set! m (+ m 1)) + (when (eq? x (vector-ref v (fx- (vector-length v) 1))) + (set! n (- n 1)) + (f))) + (f) + (list (<= 0 + (sstats-bytes (sstats-difference (statistics) s)) + 1000) + (eqv? n 0) + (eqv? m (* k (vector-length v)))))))) + '((#t #t #t) (#t #t #t))) ) (define $merge-sort @@ -1190,3 +1254,49 @@ (error? (fxvector-set! immutable-123-fxvector 0 1)) (error? (fxvector-fill! immutable-123-fxvector 0)) ) + +(mat vector-cas! + (begin + (define vec1 (vector 1 2 3)) + (define vec2 (vector 'apple 'banana 'coconut)) + (eq? 1 (vector-ref vec1 0))) + (not (vector-cas! vec1 0 0 1)) + (eq? 1 (vector-ref vec1 0)) + (vector-cas! vec1 0 1 4) + (eq? 4 (vector-ref vec1 0)) + (not (vector-cas! vec1 0 1 5)) + + (not (vector-cas! vec1 1 0 1)) + (eq? 2 (vector-ref vec1 1)) + (vector-cas! vec1 1 2 5) + (eq? 5 (vector-ref vec1 1)) + + (not (vector-cas! vec2 0 'banana 'donut)) + (vector-cas! vec2 0 'apple 'donut) + (not (vector-cas! vec2 0 'apple 'eclair)) + (eq? 'donut (vector-ref vec2 0)) + + (not (vector-cas! vec2 1 'apple 'fig)) + (vector-cas! vec2 1 'banana 'fig) + (not (vector-cas! vec2 1 'banana 'grape)) + (eq? 'fig (vector-ref vec2 1)) + + (error? (vector-cas! vec1)) ; arity + (error? (vector-cas! vec1 1)) ; arity + (error? (vector-cas! vec1 1 2)) ; arity + (error? (vector-cas! 1 vec1 2 3)) ; not a vector + (error? (vector-cas! (vector->immutable-vector vec1) 1 2 3)) ; not a mutable vector + (error? (vector-cas! vec1 vec1 2 3)) ; not a fixnum + (error? (vector-cas! vec1 (expt 2 100) 2 3)) ; not a fixnum + (error? (vector-cas! vec1 -1 2 3)) ; out of range + (error? (vector-cas! vec1 5 2 3)) ; out of range + + ;; make sure `vector-cas!` works with GC generations: + (begin + (collect 0) + (let ([g1 (gensym)]) + (and (vector-cas! vec2 2 'coconut g1) + (begin + (collect 0) + (eq? g1 (vector-ref vec2 2)))))) +) diff -Nru chezscheme-9.5+dfsg/mats/5_8.ms chezscheme-9.5.4+dfsg/mats/5_8.ms --- chezscheme-9.5+dfsg/mats/5_8.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/5_8.ms 2020-08-31 02:35:12.000000000 +0000 @@ -30,3 +30,37 @@ (set-box! x 4) (and (equal? x '#&4) (equal? (unbox x) 4))) ) + +(mat box-cas! + (begin + (define bx1 (box 1)) + (define bx2 (box 'apple)) + (eq? 1 (unbox bx1))) + (not (box-cas! bx1 0 1)) + (eq? 1 (unbox bx1)) + (box-cas! bx1 1 2) + (eq? 2 (unbox bx1)) + + (not (box-cas! bx2 #f 'banana)) + (box-cas! bx2 'apple 'banana) + (not (box-cas! bx2 'apple 'banana)) + (eq? 'banana (unbox bx2)) + + (not (box-cas! (box (bitwise-arithmetic-shift-left 1 40)) + (bitwise-arithmetic-shift-left 2 40) + 'wrong)) + + (error? (box-cas! bx1)) ; arity + (error? (box-cas! bx1 1)) ; arity + (error? (box-cas! 1 bx1 2)) ; not a box + (error? (box-cas! (box-immutable 1) 1 2)) ; not a mutable box + + ;; make sure `box-cas!` works with GC generations: + (begin + (collect 0) + (let ([g1 (gensym)]) + (and (box-cas! bx2 'banana g1) + (begin + (collect 0) + (eq? g1 (unbox bx2)))))) + ) diff -Nru chezscheme-9.5+dfsg/mats/6.ms chezscheme-9.5.4+dfsg/mats/6.ms --- chezscheme-9.5+dfsg/mats/6.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/6.ms 2020-08-31 02:35:12.000000000 +0000 @@ -727,6 +727,11 @@ (eqv? (read-char x) #\a) (char-ready? x) (eof-object? (read-char x)))) + (parameterize ([current-input-port (open-input-string "a")]) + (and (char-ready?) + (eqv? (read-char) #\a) + (char-ready?) + (eof-object? (read-char)))) ) (mat clear-input-port ; test interactively @@ -882,6 +887,26 @@ ) (mat fasl + (error? + (separate-eval '(let ([op (open-file-output-port "testfile.ss" (file-options compressed replace))]) + (fasl-write 3 op)))) + (error? + (separate-eval '(let ([ip (open-file-input-port "testfile.ss" (file-options compressed))]) + (fasl-read ip)))) + (equal? + (separate-eval '(with-exception-handler + (lambda (c) (unless (warning? c) (raise-continuable c))) + (lambda () + (let ([op (open-file-output-port "testfile.ss" (file-options compressed replace))]) + (fasl-write 3 op))))) + "") + (equal? + (separate-eval `(with-exception-handler + (lambda (c) (unless (warning? c) (raise-continuable c))) + (lambda () + (let ([ip (open-file-input-port "testfile.ss" (file-options compressed))]) + (fasl-read ip))))) + "3\n") (pretty-equal? (begin (call-with-port @@ -921,10 +946,10 @@ (open-file-input-port "testfile.ss") (get-stuff fasl-read)) (call-with-port - (open-file-input-port "testfile.ss" (file-options compressed)) + (open-file-input-port "testfile.ss" (file-options #;compressed)) (get-stuff fasl-read)) (call-with-port - (open-file-input-port "testfile.ss" (file-options compressed)) + (open-file-input-port "testfile.ss" (file-options #;compressed)) (get-stuff (lambda (p) (when (eof-object? (lookahead-u8 p)) (printf "done\n")) (fasl-read p)))) @@ -1614,25 +1639,24 @@ #t) (error? (let* ([ip (open-file-input-port "testfile.ss")] - [sfd (#%$source-file-descriptor "testfile.ss" ip)] + [sfd (make-source-file-descriptor "testfile.ss" ip #t)] [ip (transcoded-port ip (native-transcoder))]) (dynamic-wind void - (lambda () (read-token ip sfd)) + (lambda () (read-token ip sfd 0)) (lambda () (close-input-port ip))))) (let () (with-output-to-file "testfile.ss" (lambda () (display "\neat\n")) 'replace) #t) - ; $transcoded-source-port is no more - #;(equal? + (equal? (let-values ([vals (let* ([ip (open-file-input-port "testfile.ss")] - [sfd (#%$source-file-descriptor "testfile.ss" ip)] - [ip (#%$transcoded-source-port ip (native-transcoder))]) + [sfd (make-source-file-descriptor "testfile.ss" ip #t)] + [ip (transcoded-port ip (native-transcoder))]) (dynamic-wind void - (lambda () (read-token ip sfd)) + (lambda () (read-token ip sfd 0)) (lambda () (close-input-port ip))))]) vals) '(atomic eat 1 4)) @@ -1673,7 +1697,7 @@ (begin (define-record $acyclic ((immutable notme))) (record-reader '$acyclic (type-descriptor $acyclic))) (xmat - "; Test error \"fasl object created by different release\"\n; This one is the list (a b c d) created by version 5.9b\n\n#@5.9babcd\f&\n" + "; Test error \"fasl object created by different release\"\n; This one is the list (a b c d) created by version 5.9b\n\n#@\x2;\x4;\x0;\x0;\x0;5.9b\x0;\x4;\x0;\x0;\x0;\x2;\x1;\x0;\x0;\x0;a\x2;\x1;\x0;\x0;\x0;b\x2;\x1;\x0;\x0;\x0;c\x2;\x1;\x0;\x0;\x0;d\f&\x0;\x0;\x0;\n" ) (xmat @@ -2858,7 +2882,7 @@ (or (not (windows?)) (> (length (directory-list "\\\\?\\c:\\")) 0)) (or (not (windows?)) - (> (length (directory-list "\\\\?\\c:")) 0)) + (> (length (directory-list "\\\\?\\C:\\")) 0)) (file-directory? "/") (file-directory? "/.") (file-exists? ".") @@ -2869,7 +2893,7 @@ (file-directory? "c:/.")) (not (file-directory? "c:"))) (if (windows?) - (and (file-directory? "\\\\?\\c:") + (and (not (file-directory? "\\\\?\\c:")) (file-directory? "\\\\?\\c:\\")) (not (file-directory? "\\\\?\\c:"))) (if (windows?) @@ -2878,7 +2902,7 @@ (file-exists? "c:/.")) (not (file-exists? "c:"))) (if (windows?) - (and (file-exists? "\\\\?\\c:") + (and (not (file-exists? "\\\\?\\c:")) (file-exists? "\\\\?\\c:\\")) (not (file-exists? "\\\\?\\c:"))) (if (windows?) @@ -2899,9 +2923,9 @@ (and (logtest m #o400) (not (logtest m #o111))))) (or (not (windows?)) - (and (fixnum? (get-mode "c:")) - (eqv? (get-mode "c:") (get-mode "c:/")) - (eqv? (get-mode "c:") (get-mode "c:/.")))) + (and (fixnum? (get-mode "c:/")) + (eqv? (get-mode "c:/") (get-mode "C:\\")) + (eqv? (get-mode "c:/") (get-mode "c:\\.")))) (if (or (windows?) (embedded?)) (fixnum? (get-mode "../mats")) (eqv? (logand (get-mode "../mats") #o700) #o700)) @@ -2930,9 +2954,9 @@ (time? (file-change-time "c:/")) (time? (file-modification-time "c:/")))) (or (not (windows?)) - (and (time? (file-access-time "\\\\?\\c:")) - (time? (file-change-time "\\\\?\\c:")) - (time? (file-modification-time "\\\\?\\c:")))) + (and (time? (file-access-time "\\\\?\\C:\\")) + (time? (file-change-time "\\\\?\\C:\\")) + (time? (file-modification-time "\\\\?\\C:\\")))) (or (not (windows?)) (and (time? (file-access-time "\\\\?\\c:\\")) (time? (file-change-time "\\\\?\\c:\\")) @@ -3120,9 +3144,7 @@ (eq? (path-absolute? "/abc") #t) (eq? (path-absolute? "foo") #f) (eq? (path-absolute? "foo/bar/a.b") #f) - (eq? - (path-absolute? "c:abc") - (and (windows?) #t)) + (eq? (path-absolute? "c:abc") #f) (equal? (path-parent "") "") (equal? (path-parent "a") "") @@ -3275,17 +3297,17 @@ ; windows (if (windows?) (table - ("c:" "t" "c:" "" "c:" "" "c:" "") + ("c:" "f" "c:" "" "c:" "" "c:" "") ("c:/" "t" "c:/" "" "c:/" "" "c:/" "") - ("c:.." "t" "c:" ".." "c:" ".." "c:.." "") - ("c:../" "t" "c:" "../" "c:.." "" "c:../" "") - ("c:../a" "t" "c:" "../a" "c:.." "a" "c:../a" "") - ("c:." "t" "c:" "." "c:" "." "c:." "") - ("c:./" "t" "c:" "./" "c:." "" "c:./" "") - ("c:./a" "t" "c:" "./a" "c:." "a" "c:./a" "") + ("c:.." "f" "c:" ".." "c:" ".." "c:.." "") + ("c:../" "f" "c:" "../" "c:.." "" "c:../" "") + ("c:../a" "f" "c:" "../a" "c:.." "a" "c:../a" "") + ("c:." "f" "c:" "." "c:" "." "c:." "") + ("c:./" "f" "c:" "./" "c:." "" "c:./" "") + ("c:./a" "f" "c:" "./a" "c:." "a" "c:./a" "") ("c:/abc" "t" "c:/" "abc" "c:/" "abc" "c:/abc" "") - ("c:abc" "t" "c:" "abc" "c:" "abc" "c:abc" "") - ("c:abc/def" "t" "c:" "abc/def" "c:abc" "def" "c:abc/def" "") + ("c:abc" "f" "c:" "abc" "c:" "abc" "c:abc" "") + ("c:abc/def" "f" "c:" "abc/def" "c:abc" "def" "c:abc/def" "") ("c:/abc/def" "t" "c:/" "abc/def" "c:/abc" "def" "c:/abc/def" "") ("//abc" "t" "//abc" "" "//abc" "" "//abc" "") ("//abc/" "t" "//abc" "" "//abc" "" "//abc/" "") diff -Nru chezscheme-9.5+dfsg/mats/7.ms chezscheme-9.5.4+dfsg/mats/7.ms --- chezscheme-9.5+dfsg/mats/7.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/7.ms 2020-08-31 02:35:12.000000000 +0000 @@ -47,7 +47,7 @@ (set! aaaaa 0) (load "testfile.so") (eqv? aaaaa 7)) - (parameterize ([compile-compressed #f]) + (parameterize ([fasl-compressed #f]) (printf "***** expect \"compile-file\" message:~%") (compile-file "testfile") (set! aaaaa 0) @@ -62,7 +62,7 @@ (load "testfile.so") (eqv? aaaaa -7)) (let ((ip (open-input-string "(let ((x -3) (y -4)) (set! aaaaa (+ x y)))")) - (op (open-file-output-port "testfile.so" (file-options replace compressed)))) + (op (open-file-output-port "testfile.so" (file-options replace #;compressed)))) (compile-port ip op) (close-input-port ip) (close-port op) @@ -98,7 +98,7 @@ 'replace) #t) (equal? - (call-with-port (open-file-output-port "testfile.so" (file-options replace compressed)) + (call-with-port (open-file-output-port "testfile.so" (file-options replace #;compressed)) (lambda (op) (parameterize ([compile-imported-libraries #t]) (compile-to-port @@ -112,6 +112,34 @@ "6\n") ) +(mat load-compiled-from-port + (begin + (define-values (o get) (open-bytevector-output-port)) + (compile-to-port '((define lcfp1 'worked) 'loaded) o) + (eq? 'loaded (load-compiled-from-port (open-bytevector-input-port (get))))) + (begin + (define lcfp-bv + (let-values ([(o get) (open-bytevector-output-port)]) + (compile-to-port + '((printf "revisit\n") + (define-syntax $lcfp-a (begin (printf "visit\n") (lambda (x) 0))) + (eval-when (visit revisit) (printf "visit-revisit\n")) + (eval-when (visit) 'visit-return) + 'revisit-return) + o) + (get))) + #t) + (equal? + (with-output-to-string (lambda () (printf "result = ~s\n" (load-compiled-from-port (open-bytevector-input-port lcfp-bv))))) + "revisit\nvisit\nvisit-revisit\nresult = revisit-return\n") + (equal? + (with-output-to-string (lambda () (printf "result = ~s\n" (visit-compiled-from-port (open-bytevector-input-port lcfp-bv))))) + "visit\nvisit-revisit\nresult = visit-return\n") + (equal? + (with-output-to-string (lambda () (printf "result = ~s\n" (revisit-compiled-from-port (open-bytevector-input-port lcfp-bv))))) + "revisit\nvisit-revisit\nresult = revisit-return\n") +) + (mat compile-to-file (begin (delete-file (format "testfile.~s" (machine-type))) @@ -278,19 +306,6 @@ ) (mat maybe-compile - (begin - (define touch - (lambda (objfn srcfn) - (let loop () - (let ([p (open-file-input/output-port srcfn (file-options no-fail no-truncate))]) - (put-u8 p (lookahead-u8 p)) - (close-port p)) - (when (file-exists? objfn) - (unless (time>? (file-modification-time srcfn) (file-modification-time objfn)) - (sleep (make-time 'time-duration 1000000 1)) - (loop)))) - #t)) - #t) (error? ; not a procedure (compile-program-handler 'ignore)) (procedure? (compile-program-handler)) @@ -775,25 +790,15 @@ "testdir/testfile-mc-1b") #t) (error? ; can't find testfile-mc-1a.ss - (let ([mt* (map file-modification-time '("testdir/testfile-mc-1b.so"))]) - (separate-compile 'maybe-compile-library "testdir/testfile-mc-1b") - (map - (lambda (x y) (if (time=? x y) '= (if (time))) - (map file-modification-time '("testdir/testfile-mc-1b.so")) - mt*))) - ; make sure maybe-compile-file doesn't wipe out b.so when it fails to find a.ss - (file-exists? "testdir/testfile-mc-1b.so") - (equal? - (let ([mt* (map file-modification-time '("testdir/testfile-mc-1b.so"))]) - (separate-compile '(lambda (x) - (parameterize ([source-directories (cons "testdir" (source-directories))]) - (maybe-compile-library x))) - "testdir/testfile-mc-1b") - (map - (lambda (x y) (if (time=? x y) '= (if (time))) - (map file-modification-time '("testdir/testfile-mc-1b.so")) - mt*)) - '(=)) + (separate-compile 'maybe-compile-library "testdir/testfile-mc-1b")) + ; make sure maybe-compile-file wipes out b.so when it fails to find a.ss + (or (= (optimize-level) 3) (not (file-exists? "testdir/testfile-mc-1b.so"))) + (begin + (separate-compile '(lambda (x) + (parameterize ([source-directories (cons "testdir" (source-directories))]) + (maybe-compile-library x))) + "testdir/testfile-mc-1b") + #t) (touch "testdir/testfile-mc-1b.so" "testdir/testfile-mc-1a.ss") (equal? (let ([mt* (map file-modification-time '("testdir/testfile-mc-1b.so"))]) @@ -820,20 +825,220 @@ '(>)) (delete-file "testdir/testfile-mc-1a.ss") (error? ; maybe-compile-library: can't find testfile-mc-1a.ss - (let ([mt* (map file-modification-time '("testdir/testfile-mc-1b.so"))]) - (separate-compile '(lambda (x) - (parameterize ([source-directories (cons "testdir" (source-directories))]) - (maybe-compile-library x))) - "testdir/testfile-mc-1b") - (map - (lambda (x y) (if (time=? x y) '= (if (time))) - (map file-modification-time '("testdir/testfile-mc-1b.so")) - mt*))) - ; make sure maybe-compile-file doesn't wipe out b.so when it fails to find a.ss - (file-exists? "testdir/testfile-mc-1b.so") + (separate-compile '(lambda (x) + (parameterize ([source-directories (cons "testdir" (source-directories))]) + (maybe-compile-library x))) + "testdir/testfile-mc-1b")) + ; make sure maybe-compile-file wipes out b.so when it fails to find a.ss + (or (= (optimize-level) 3) (not (file-exists? "testdir/testfile-mc-1b.so"))) (begin (rm-rf "testdir") #t) + ; make sure maybe-compile-file handles incomplete fasl files + (begin + (mkfile "testfile-mc-2a.ss" + '(library (testfile-mc-2a) + (export q) + (import (chezscheme)) + (define f + (lambda () + (printf "running f\n") + "x")) + (define-syntax q + (begin + (printf "expanding testfile-mc-2a\n") + (lambda (x) + (printf "expanding q\n") + #'(f)))))) + (mkfile "testfile-mc-2.ss" + '(import (chezscheme) (testfile-mc-2a)) + '(define-syntax qq + (begin + (printf "expanding testfile-mc-2\n") + (lambda (x) + (printf "expanding qq\n") + #'q))) + '(printf "qq => ~a\n" qq)) + (delete-file "testfile-mc-2a.so") + (delete-file "testfile-mc-2.so") + (display-string (separate-compile '(lambda (x) (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [fasl-compressed #f]) (maybe-compile-program x))) 'mc-2)) + #t) + (begin + (let ([p (open-file-input/output-port "testfile-mc-2a.so" (file-options no-create no-fail no-truncate))]) + (set-port-length! p 73) + (close-port p)) + (display-string (separate-compile '(lambda (x) (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [fasl-compressed #f] [import-notify #t]) (maybe-compile-program x))) 'mc-2)) + #t) + (begin + (let ([p (open-file-input/output-port "testfile-mc-2.so" (file-options no-create no-fail no-truncate))]) + (set-port-length! p 87) + (close-port p)) + (display-string (separate-compile '(lambda (x) (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [fasl-compressed #f] [import-notify #t]) (maybe-compile-program x))) 'mc-2)) + #t) + ; make sure maybe-compile-file handles missing include files gracefully + (begin + (mkfile "testfile-mc-3a.ss" + "hello from 3a!") + (mkfile "testfile-mc-3b.ss" + '(library (testfile-mc-3b) + (export q) + (import (chezscheme)) + (define-syntax q + (begin + (printf "expanding testfile-mc-3b\n") + (lambda (x) + (printf "expanding q\n") + (include "./testfile-mc-3a.ss")))))) + (mkfile "testfile-mc-3.ss" + '(import (chezscheme) (testfile-mc-3b)) + '(define-syntax qq + (begin + (printf "expanding testfile-mc-3\n") + (lambda (x) + (printf "expanding qq\n") + #'q))) + '(printf "qq => ~a\n" qq)) + (delete-file "testfile-mc-3b.so") + (delete-file "testfile-mc-3.so") + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t]) + (maybe-compile-program x))) + 'mc-3) + #t) + (begin + (delete-file "testfile-mc-3a.ss") + #t) + (error? ; separate-compile: no such file or directory: testfile-mc-3a.ss + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t]) + (maybe-compile-program x))) + 'mc-3)) + ; make sure maybe-compile-file handles missing include files gracefully + (begin + (define-record-type hash-bang-chezscheme) + (record-writer (type-descriptor hash-bang-chezscheme) (lambda (x p wr) (display-string "#!chezscheme"))) + (mkfile "testfile-mc-4a.ss" + "hello from 4a!") + (mkfile "testfile-mc-4b.ss" + (make-hash-bang-chezscheme) + '(library (testfile-mc-4b) + (export b) + (import (chezscheme)) + (define-syntax q + (lambda (x) + (if (file-exists? "testfile-mc-4a.ss") + (begin + (printf "HEY!\n") + (#%$require-include "./testfile-mc-4a.ss") + (call-with-input-file "testfile-mc-4a.ss" read)) + (begin + (printf "BARLEY!\n") + "testfile-mc-4a is no more")))) + (define (b) q))) + (mkfile "testfile-mc-4.ss" + '(import (chezscheme) (testfile-mc-4b)) + '(printf "q => ~a\n" (b))) + (delete-file "testfile-mc-4b.so") + (delete-file "testfile-mc-4.so") + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t]) + (maybe-compile-program x))) + 'mc-4) + #t) + (equal? + (separate-eval '(load-program "testfile-mc-4.so")) + "q => hello from 4a!\n") + (begin + (mkfile "testfile-mc-4a.ss" + "goodbye from 4a!") + (touch "testfile-mc-4.so" "testfile-mc-4a.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [import-notify #t]) + (maybe-compile-program x))) + 'mc-4) + #t) + (equal? + (separate-eval '(load-program "testfile-mc-4.so")) + "q => goodbye from 4a!\n") + (begin + (delete-file "testfile-mc-4a.ss") + #t) + (begin + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [import-notify #t]) + (maybe-compile-program x))) + 'mc-4) + #t) + (equal? + (separate-eval '(load-program "testfile-mc-4.so")) + "q => testfile-mc-4a is no more\n") + ; make sure maybe-compile-file handles missing include files gracefully + (begin + (define-record-type hash-bang-chezscheme) + (record-writer (type-descriptor hash-bang-chezscheme) (lambda (x p wr) (display-string "#!chezscheme"))) + (mkfile "testfile-mc-5a.ss" + "hello from 5a!") + (mkfile "testfile-mc-5b.ss" + (make-hash-bang-chezscheme) + '(library (testfile-mc-5b) + (export q) + (import (chezscheme)) + (define-syntax q + (lambda (x) + (if (file-exists? "testfile-mc-5a.ss") + (begin + (printf "HEY!\n") + (#%$require-include "./testfile-mc-5a.ss") + (call-with-input-file "testfile-mc-5a.ss" read)) + (begin + (printf "BARLEY!\n") + "testfile-mc-5a is no more")))))) + (mkfile "testfile-mc-5.ss" + '(import (chezscheme) (testfile-mc-5b)) + '(define-syntax qq (lambda (x) #'q)) + '(printf "qq => ~a\n" qq)) + (delete-file "testfile-mc-5b.so") + (delete-file "testfile-mc-5.so") + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t]) + (maybe-compile-program x))) + 'mc-5) + #t) + (equal? + (separate-eval '(load-program "testfile-mc-5.so")) + "qq => hello from 5a!\n") + (begin + (mkfile "testfile-mc-5a.ss" + "goodbye from 5a!") + (touch "testfile-mc-5.so" "testfile-mc-5a.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [import-notify #t]) + (maybe-compile-program x))) + 'mc-5) + #t) + (equal? + (separate-eval '(load-program "testfile-mc-5.so")) + "qq => goodbye from 5a!\n") + (begin + (delete-file "testfile-mc-5a.ss") + #t) + (begin + (separate-compile + '(lambda (x) + (parameterize ([compile-file-message #f] [compile-imported-libraries #t] [import-notify #t]) + (maybe-compile-program x))) + 'mc-5) + #t) + (equal? + (separate-eval '(load-program "testfile-mc-5.so")) + "qq => testfile-mc-5a is no more\n") ) (mat make-boot-file @@ -876,10 +1081,7 @@ "testfile-5.ss")) (let-values ([(to-stdin from-stdout from-stderr pid) (open-process-ports - (format "~a -b testfile.boot -q" - (if (windows?) - (list->string (subst #\\ #\/ (string->list *scheme*))) - *scheme*)) + (format "~a -b ./testfile.boot -q" (patch-exec-path *scheme*)) (buffer-mode block) (native-transcoder))]) (close-output-port to-stdin) @@ -892,6 +1094,28 @@ "hello 1\nhello 2\nhello 3\nhello 4\nhello 5\n") (equal? (begin + (parameterize ([optimize-level 2]) + (compile-to-file + '((library (A) (export a) (import (scheme)) (define a 'aye)) + (library (B) (export b) (import (A) (scheme)) (define b (list a 'captain)))) + "testfile-libs.so") + (make-boot-file "testfile.boot" '("petite") "testfile-libs.so")) + (let-values ([(to-stdin from-stdout from-stderr pid) + (open-process-ports + (format "~a -b ./testfile.boot -q" (patch-exec-path *scheme*)) + (buffer-mode block) + (native-transcoder))]) + (pretty-print '(let () (import (B)) (printf "~s\n" b)) to-stdin) + (close-output-port to-stdin) + (let ([out (get-string-all from-stdout)] + [err (get-string-all from-stderr)]) + (close-input-port from-stdout) + (close-input-port from-stderr) + (unless (eof-object? err) (error 'bootfile-test1 err)) + out))) + "(aye captain)\n") + (equal? + (begin (unless (or (embedded?) (equal? *scheme* (format "../bin/~a/scheme~a" (machine-type) (if (windows?) ".exe" "")))) (errorf #f "not testing boot file based on ../boot/~a/petite.boot, since *scheme* isn't ../bin/~a/scheme~a" (machine-type) (machine-type) (if (windows?) ".exe" ""))) @@ -905,10 +1129,7 @@ "testfile-5.so")) (let-values ([(to-stdin from-stdout from-stderr pid) (open-process-ports - (format "~a -b testfile.boot -q" - (if (windows?) - (list->string (subst #\\ #\/ (string->list *scheme*))) - *scheme*)) + (format "~a -b ./testfile.boot -q" (patch-exec-path *scheme*)) (buffer-mode block) (native-transcoder))]) (close-output-port to-stdin) @@ -919,6 +1140,33 @@ (unless (eof-object? err) (error 'bootfile-test2 err)) out))) "hello 1\nhello 2\nhello 3\nhello 4\nhello 5\n") + ; regression test to verify that we can evaluate a foreign-callable form inside the procedure to + ; which scheme-start is set, which was failing because its relocation information was discarded + ; by the static-generation collection. + (equal? + (begin + (unless (or (embedded?) (equal? *scheme* (format "../bin/~a/scheme~a" (machine-type) (if (windows?) ".exe" "")))) + (errorf #f "not testing boot file based on ../boot/~a/petite.boot, since *scheme* isn't ../bin/~a/scheme~a" + (machine-type) (machine-type) (if (windows?) ".exe" ""))) + (mkfile "testfile.ss" + '(scheme-start + (lambda () + (let ([x 0]) + (printf "~s\n" (foreign-callable (lambda () (set! x (+ x 1)) x) () void)))))) + (make-boot-file "testfile.boot" '("petite") "testfile.ss") + (let-values ([(to-stdin from-stdout from-stderr pid) + (open-process-ports + (format "~a -b ./testfile.boot -q" (patch-exec-path *scheme*)) + (buffer-mode block) + (native-transcoder))]) + (close-output-port to-stdin) + (let ([out (get-string-all from-stdout)] + [err (get-string-all from-stderr)]) + (close-input-port from-stdout) + (close-input-port from-stderr) + (unless (eof-object? err) (error 'bootfile-test2 err)) + out))) + "#\n") ) (mat hostop @@ -926,10 +1174,10 @@ (separate-compile `(lambda (x) (call-with-port - (open-file-output-port (format "~a.so" x) (file-options compressed replace)) + (open-file-output-port (format "~a.so" x) (file-options #;compressed replace)) (lambda (op) (call-with-port - (open-file-output-port (format "~a.host" x) (file-options compressed replace)) + (open-file-output-port (format "~a.host" x) (file-options #;compressed replace)) (lambda (hostop) (compile-to-port '((library (testfile-hop1) @@ -940,7 +1188,7 @@ (define b1 "23.5") (define-syntax b2 (identifier-syntax (cons b1 b1)))) (define c (lambda (x) (import b) (vector b2 x))))) - op #f #f ',(machine-type) hostop)))))) + op #f #f #f ',(machine-type) hostop)))))) "testfile-hop1") (with-output-to-file "testfile-hop2.ss" (lambda () @@ -1557,6 +1805,13 @@ "testfile-wpo-prog") "()\n") + (equal? + (separate-compile + '(lambda (x) + (compile-whole-program (format "~a.wpo" x) (format "~a-none.so" x) #f)) + "testfile-wpo-prog") + "()\n") + (delete-file "testfile-wpo-lib.ss") (delete-file "testfile-wpo-lib.so") (delete-file "testfile-wpo-lib.wpo") @@ -1565,6 +1820,9 @@ (separate-eval '(load-program "testfile-wpo-prog-all.so")) "3628800\n3628800\n") + (error? + (separate-eval '(load-program "testfile-wpo-prog-none.so"))) + (begin (with-output-to-file "testfile-wpo-a3.ss" (lambda () @@ -1741,6 +1999,11 @@ (separate-eval '(load-program "testfile-wpo-prog4-all.so")) "40320\n") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-wpo-prog4-all.so")) + "") + (delete-file "testfile-wpo-c4.so") (error? ; library (testfile-wpo-c4) not found @@ -1856,14 +2119,28 @@ (separate-eval '(load-program "testfile-wpo-prog6-all.so")) "invoke a\ninvoke b\n==== (3 14 17) ======== (3 19 17) ====") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-wpo-prog6-all.so")) + "") + (begin + (with-output-to-file "testfile-wpo-aa7.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-aa7) + (export ax) + (import (chezscheme)) + (define ax (gensym)) + (printf "invoking aa\n")))) + 'replace) (with-output-to-file "testfile-wpo-a7.ss" (lambda () (pretty-print '(library (testfile-wpo-a7) (export x) - (import (chezscheme)) - (define x (gensym)) + (import (chezscheme) (testfile-wpo-aa7)) + (define x (cons ax (gensym))) (printf "invoking a\n")))) 'replace) (with-output-to-file "testfile-wpo-b7.ss" @@ -1902,7 +2179,7 @@ (equal? (separate-eval '(load "testfile-wpo-ab7.so")) - "invoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") + "invoking aa\ninvoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") (delete-file "testfile-wpo-c7.ss") (delete-file "testfile-wpo-c7.wpo") @@ -1917,7 +2194,7 @@ (equal? (separate-eval '(load "testfile-wpo-ab7-all.so")) - "invoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") + "invoking aa\ninvoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") (begin (with-output-to-file "testfile-wpo-extlib.chezscheme.sls" @@ -1990,6 +2267,275 @@ (lambda (ip) (get-bytevector-n ip (string-length $hash-bang-line)))) (string->utf8 $hash-bang-line)) + + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-wpo-c8-all.so")) + "") + + (begin + (mkfile "testfile-wpo-a9.ss" + '(library (testfile-wpo-a9) + (export x) + (import (chezscheme)) + (define x (eval 'x (environment '(testfile-wpo-a9)))))) + (mkfile "testfile-wpo-b9.ss" + '(import (chezscheme) (testfile-wpo-a9)) + '(printf "x = ~s\n" x)) + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #t] [compile-imported-libraries #t]) + (compile-program x))) + 'wpo-b9) + (separate-compile + '(lambda (x) + (compile-whole-program (format "~a.wpo" x) (format "~a-all.so" x) #t)) + 'wpo-b9) + (separate-compile + '(lambda (x) + (compile-whole-library (format "~a.wpo" x) (format "~a-all.so" x))) + 'wpo-a9) + #t) + + (error? ; invoke cycle + (separate-eval + '(load-library "testfile-wpo-a9.so") + '(let () (import (testfile-wpo-a9)) x))) + + (error? ; invoke cycle + (separate-eval + '(load-library "testfile-wpo-a9-all.so") + '(let () (import (testfile-wpo-a9)) x))) + + (error? ; invoke cycle + (separate-eval + '(load-program "testfile-wpo-b9.so"))) + + (error? ; invoke cycle + (separate-eval + '(load-program "testfile-wpo-b9-all.so"))) + + (begin + (mkfile "testfile-wpo-a10.ss" + '(library (testfile-wpo-a10) + (export ax) + (import (chezscheme)) + (define ax (cons 'a '())))) + (mkfile "testfile-wpo-b10.ss" + '(library (testfile-wpo-b10) + (export bx) + (import (chezscheme) (testfile-wpo-a10)) + (define bx (cons 'b ax)))) + (mkfile "testfile-wpo-c10.ss" + '(library (testfile-wpo-c10) + (export cx) + (import (chezscheme) (testfile-wpo-b10)) + (define cx (cons 'c bx)))) + (mkfile "testfile-wpo-d10.ss" + '(import (chezscheme) (testfile-wpo-c10)) + '(printf "d: cx = ~s\n" cx)) + (mkfile "testfile-wpo-e10.ss" + '(import (chezscheme) (testfile-wpo-a10)) + '(printf "e: ax = ~s\n" ax)) + (mkfile "testfile-wpo-f10.ss" + '(import (chezscheme) (testfile-wpo-c10)) + '(printf "f: cx = ~s\n" cx)) + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #t] + [compile-imported-libraries #t]) + (compile-program x))) + 'wpo-d10) + (separate-compile 'compile-program 'wpo-e10) + (separate-compile 'compile-program 'wpo-f10) + #t) + + ; cause b10 to be excluded from the whole program + (delete-file "testfile-wpo-b10.wpo") + + (equal? + (separate-eval + '(compile-whole-program "testfile-wpo-d10.wpo" + "testfile-wpo-d10-all.so" #f)) + "((testfile-wpo-b10))\n") + + (equal? + (separate-eval '(verify-loadability 'visit "testfile-wpo-d10-all.so")) + "") + + (equal? + (separate-eval '(verify-loadability 'revisit "testfile-wpo-d10-all.so")) + "") + + (equal? + (separate-eval '(verify-loadability 'load "testfile-wpo-d10-all.so")) + "") + + (equal? + (separate-eval '(load-program "testfile-wpo-d10-all.so")) + "d: cx = (c b a)\n") + + ; library a10 must be visible for (excluded library) + ; b10's benefit, so e10 can reference its export + (equal? + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(load-program "testfile-wpo-e10.so")) + "d: cx = (c b a)\ne: ax = (a)\n") + + ; library c10 need not and should not be visible, so f10 + ; shouldn't be able to reference its export. + (error? + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(load-program "testfile-wpo-f10.so"))) + + (error? ; testfile-wpo-c10 is not visible + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(import (testfile-wpo-c10)))) + + (equal? + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(verify-loadability 'visit "testfile-wpo-f10.so")) + "d: cx = (c b a)\n") + + ; verify-loadability should error out trying to invoke + ; c10 because c10 is not visible + (error? ; not visible + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(verify-loadability 'revisit "testfile-wpo-f10.so"))) + + (error? ; not visible + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(verify-loadability 'load "testfile-wpo-f10.so"))) + + (begin + (mkfile "testfile-wpo-a11.ss" + '(library (testfile-wpo-a11) + (export ax) + (import (chezscheme)) + (define ax (cons 'a '())) + (printf "invoking a\n"))) + (parameterize ([generate-wpo-files #t]) + (compile-library "testfile-wpo-a11")) + #t) + + (equal? + (compile-whole-library "testfile-wpo-a11.wpo" "testfile-wpo-a11-all.so") + '()) + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11.so")) + "") + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11.so") + '(let () (import (testfile-wpo-a11)) ax)) + "invoking a\n(a)\n") + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11-all.so")) + "") + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11-all.so") + '(let () (import (testfile-wpo-a11)) ax)) + "invoking a\n(a)\n") + + (begin + (mkfile "testfile-wpo-a12.ss" + '(library (testfile-wpo-a12) + (export ax) + (import (chezscheme)) + (define ax (cons 'a '())))) + (mkfile "testfile-wpo-b12.ss" + '(library (testfile-wpo-b12) + (export bx) + (import (chezscheme) (testfile-wpo-a12)) + (define bx (eval 'cx (environment '(testfile-wpo-c12)))))) + (mkfile "testfile-wpo-c12.ss" + '(library (testfile-wpo-c12) + (export cx) + (import (chezscheme) (testfile-wpo-b12)) + (define cx (cons 'c bx)))) + (mkfile "testfile-wpo-d12.ss" + '(import (chezscheme) (testfile-wpo-c12)) + '(printf "d: cx = ~s\n" cx)) + (parameterize ([generate-wpo-files #t] + [compile-imported-libraries #t]) + (compile-program "testfile-wpo-d12")) + #t) + + (error? ; cyclc + (separate-eval '(load-program "testfile-wpo-d12.so"))) + + ; cause b12 to be excluded from the whole library and program + (delete-file "testfile-wpo-b12.wpo") + + (equal? + (separate-eval + '(compile-whole-library "testfile-wpo-c12.wpo" + "testfile-wpo-c12-all.so")) + "((testfile-wpo-b12))\n") + + (equal? + (separate-eval + '(compile-whole-program "testfile-wpo-d12.wpo" + "testfile-wpo-d12-all.so" #t)) + "((testfile-wpo-b12))\n") + + (equal? + (separate-eval + '(load-library "testfile-wpo-c12-all.so")) + "") + + (error? ; cycle + (separate-eval + '(load-library "testfile-wpo-c12-all.so") + '(let () (import (testfile-wpo-c12)) cx))) + + (error? ; cycle + (separate-eval '(load-program "testfile-wpo-d12-all.so"))) + + ; verify-loadability doesn't catch (dynamic) cycles + (equal? + (separate-eval + '(verify-loadability 'visit "testfile-wpo-c12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'revisit "testfile-wpo-c12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'load "testfile-wpo-c12.so")) + "") + + ; verify-loadability doesn't catch (dynamic) cycles + (equal? + (separate-eval + '(verify-loadability 'visit "testfile-wpo-d12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'revisit "testfile-wpo-d12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'load "testfile-wpo-d12.so")) + "") ) (mat compile-whole-library @@ -2046,6 +2592,11 @@ (printf ">~s\n" (y)))) "invoke a\ninvoke b\n>(3 14 17)\n>(3 19 17)\n") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-cwl-b1.so")) + "") + (error? ; library (testfile-cwl-a1) not found (separate-eval '(begin @@ -2125,6 +2676,11 @@ (main))) "3628800\n") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-cwl-b2.so")) + "") + (equal? (separate-compile '(lambda (x) @@ -2472,14 +3028,14 @@ "testfile-cwl-b5") "()\n") - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(let () (import (testfile-cwl-c5)) (import (testfile-cwl-b5)) (list (fib+fact 10) (ack+fact 3 4))))) - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(eval '(list (fib+fact 10) (ack+fact 3 4)) (environment '(chezscheme) '(testfile-cwl-c5) '(testfile-cwl-b5))))) @@ -2500,7 +3056,7 @@ (separate-compile 'cwl-d5) #t) - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) with uid #{testfile-cwl-a5 ???} + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(load "testfile-cwl-d5.so"))) (begin @@ -2525,14 +3081,14 @@ (delete-file "testfile-cwl-a5.so") (delete-file "testfile-cwl-a5.wpo") - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) with uid #{testfile-cwl-a5 ???} + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(let () (import (testfile-cwl-c5)) (import (testfile-cwl-b5)) (list (fib+fact 10) (ack+fact 3 4))))) - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) with uid #{testfile-cwl-a5 ???} + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(let () (import (testfile-cwl-b5)) @@ -3121,24 +3677,1595 @@ (equal? (separate-eval '(let () (import (testfile-wpo-extlib-2)) (p))) "(9 . 5)\n") -) - - -;;; section 7.2: - -(mat top-level-value-functions - (error? (top-level-bound? "hello")) - (error? (top-level-bound?)) - (error? (top-level-bound? 45 'hello)) - (error? (top-level-bound? 'hello 'hello)) - (error? (top-level-bound? (scheme-environment) (scheme-environment))) - (error? (top-level-mutable? "hello")) - (error? (top-level-mutable?)) - (error? (top-level-mutable? 45 'hello)) - (error? (top-level-mutable? 'hello 'hello)) - (error? (top-level-mutable? (scheme-environment) (scheme-environment))) - (error? (top-level-value "hello")) + ;; regression tests from @owaddell generated to fix problems he encountered + ;; with compile-whole-library from a test generator. + (begin + (with-output-to-file "testfile-wpo-coconut.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-coconut) + (export coconut apple->coconut) + (import (scheme)) + (define $init (list '_)) + (define apple->coconut (cons 'apple->coconut $init)) + (define coconut (list 'coconut apple->coconut $init))))) + 'replace) + (with-output-to-file "testfile-wpo-banana.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-banana) + (export banana apple->banana) + (import (scheme)) + (define $init (list '_)) + (define apple->banana (cons 'apple->banana $init)) + (define banana (list 'banana apple->banana $init))))) + 'replace) + (with-output-to-file "testfile-wpo-apple.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-apple) + (export apple) + (import (scheme) (testfile-wpo-banana) (testfile-wpo-coconut)) + (define $init + (list + '_ + (cons 'apple->banana apple->banana) + (cons 'apple->coconut apple->coconut))) + (define apple (list 'apple $init))))) + 'replace) + (with-output-to-file "testfile-wpo-main.ss" + (lambda () + (pretty-print '(import (scheme) (testfile-wpo-banana) (testfile-wpo-coconut) (testfile-wpo-apple))) + (pretty-print '(pretty-print banana)) + (pretty-print '(pretty-print coconut)) + (pretty-print '(pretty-print apple))) + 'replace) + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] + [generate-wpo-files #t]) + (compile-program x))) + 'wpo-main) + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #f]) + (compile-whole-library (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-coconut) + "()\n") + + (begin + (delete-file "testfile-wpo-coconut.wpo") + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #f]) + (compile-whole-library (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-apple) + "((testfile-wpo-coconut))\n") + + (begin + (delete-file "testfile-wpo-banana.wpo") + (delete-file "testfile-wpo-apple.wpo") + (delete-file "testfile-wpo-banana.so") + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (if (equal? name '(testfile-wpo-banana)) + '(testfile-wpo-apple) + name) + dirs exts)))]) + (compile-whole-program (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-main) + "((testfile-wpo-apple)\n (testfile-wpo-banana)\n (testfile-wpo-coconut))\n") + + (equal? + (separate-eval + '(parameterize ([library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (if (equal? name '(testfile-wpo-banana)) + '(testfile-wpo-apple) + name) + dirs exts)))]) + (load-program "testfile-wpo-main.so"))) + (string-append + "(banana (apple->banana _) (_))\n" + "(coconut (apple->coconut _) (_))\n" + "(apple\n (_ (apple->banana apple->banana _)\n (apple->coconut apple->coconut _)))\n")) + + (begin + ;; clean-up to make sure previous builds don't get in the way. + (delete-file "testfile-wpo-coconut.ss") + (delete-file "testfile-wpo-coconut.so") + (delete-file "testfile-wpo-coconut.wpo") + + (delete-file "testfile-wpo-banana.ss") + (delete-file "testfile-wpo-banana.so") + (delete-file "testfile-wpo-banana.wpo") + + (delete-file "testfile-wpo-apple.ss") + (delete-file "testfile-wpo-apple.so") + (delete-file "testfile-wpo-apple.wpo") + + (delete-file "testfile-wpo-main.ss") + (delete-file "testfile-wpo-main.so") + (delete-file "testfile-wpo-main.wpo") + + #t) + + (begin + (with-output-to-file "testfile-wpo-coconut.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-coconut) + (export coconut banana->coconut apple->coconut) + (import (scheme)) + (define $init (list '_)) + (define banana->coconut (cons 'banana->coconut $init)) + (define apple->coconut (cons 'apple->coconut $init)) + (define coconut + (list 'coconut banana->coconut apple->coconut $init))))) + 'replace) + (with-output-to-file "testfile-wpo-date.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-date) + (export date apple->date) + (import (scheme)) + (define $init (list '_)) + (define apple->date (cons 'apple->date $init)) + (define date (list 'date apple->date $init))))) + 'replace) + (with-output-to-file "testfile-wpo-apple.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-apple) + (export apple) + (import (scheme) (testfile-wpo-date) (testfile-wpo-coconut)) + (define $init + (list + '_ + (cons 'apple->date apple->date) + (cons 'apple->coconut apple->coconut))) + (define apple (list 'apple $init))))) + 'replace) + (with-output-to-file "testfile-wpo-banana.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-banana) + (export banana) + (import (scheme) (testfile-wpo-coconut)) + (define $init + (list '_ (cons 'banana->coconut banana->coconut))) + (define banana (list 'banana $init))))) + 'replace) + (with-output-to-file "testfile-wpo-main.ss" + (lambda () + (pretty-print '(import (scheme) (testfile-wpo-date) + (testfile-wpo-banana) (testfile-wpo-coconut) + (testfile-wpo-apple))) + (pretty-print '(pretty-print date)) + (pretty-print '(pretty-print banana)) + (pretty-print '(pretty-print coconut)) + (pretty-print '(pretty-print apple))) + 'replace) + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] + [generate-wpo-files #t]) + (compile-program x))) + 'wpo-main) + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #f]) + (compile-whole-library (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-coconut) + "()\n") + + (begin + (delete-file "testfile-wpo-coconut.wpo") + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #f]) + (compile-whole-library (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-apple) + "((testfile-wpo-coconut))\n") + + (begin + (delete-file "testfile-wpo-date.wpo") + (delete-file "testfile-wpo-apple.wpo") + (delete-file "testfile-wpo-date.so") + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (if (equal? name '(testfile-wpo-date)) + '(testfile-wpo-apple) + name) + dirs exts)))]) + (compile-whole-program (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-main) + "((testfile-wpo-apple)\n (testfile-wpo-date)\n (testfile-wpo-coconut))\n") + + (equal? + (separate-eval + '(parameterize ([library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (if (equal? name '(testfile-wpo-date)) + '(testfile-wpo-apple) + name) + dirs exts)))]) + (load-program "testfile-wpo-main.so"))) + (string-append + "(date (apple->date _) (_))\n" + "(banana (_ (banana->coconut banana->coconut _)))\n" + "(coconut (banana->coconut _) (apple->coconut _) (_))\n" + "(apple\n" + " (_ (apple->date apple->date _)\n" + " (apple->coconut apple->coconut _)))\n")) + + (begin + ;; clean-up to make sure previous builds don't get in the way. + (delete-file "testfile-wpo-coconut.ss") + (delete-file "testfile-wpo-coconut.so") + (delete-file "testfile-wpo-coconut.wpo") + + (delete-file "testfile-wpo-date.ss") + (delete-file "testfile-wpo-date.so") + (delete-file "testfile-wpo-date.wpo") + + (delete-file "testfile-wpo-banana.ss") + (delete-file "testfile-wpo-banana.so") + (delete-file "testfile-wpo-banana.wpo") + + (delete-file "testfile-wpo-apple.ss") + (delete-file "testfile-wpo-apple.so") + (delete-file "testfile-wpo-apple.wpo") + + (delete-file "testfile-wpo-main.ss") + (delete-file "testfile-wpo-main.so") + (delete-file "testfile-wpo-main.wpo") + + #t) + + (begin + (with-output-to-file "testfile-wpo-date.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-date) + (export date apple->date) + (import (scheme)) + (define $init (list '_)) + (define apple->date (cons 'apple->date $init)) + (define date (list 'date apple->date $init))))) + 'replace) + (with-output-to-file "testfile-wpo-eel.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-eel) + (export eel coconut->eel apple->eel) + (import (scheme)) + (define $init (list '_)) + (define coconut->eel (cons 'coconut->eel $init)) + (define apple->eel (cons 'apple->eel $init)) + (define eel (list 'eel coconut->eel apple->eel $init))))) + 'replace) + (with-output-to-file "testfile-wpo-coconut.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-coconut) + (export coconut banana->coconut apple->coconut) + (import (scheme) (testfile-wpo-eel)) + (define $init (list '_ (cons 'coconut->eel coconut->eel))) + (define banana->coconut (cons 'banana->coconut $init)) + (define apple->coconut (cons 'apple->coconut $init)) + (define coconut + (list 'coconut banana->coconut apple->coconut $init))))) + 'replace) + (with-output-to-file "testfile-wpo-apple.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-apple) + (export apple) + (import (scheme) (testfile-wpo-date) (testfile-wpo-coconut) + (testfile-wpo-eel)) + (define $init + (list + '_ + (cons 'apple->date apple->date) + (cons 'apple->coconut apple->coconut) + (cons 'apple->eel apple->eel))) + (define apple (list 'apple $init))))) + 'replace) + (with-output-to-file "testfile-wpo-banana.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-banana) + (export banana) + (import (scheme) (testfile-wpo-coconut)) + (define $init + (list '_ (cons 'banana->coconut banana->coconut))) + (define banana (list 'banana $init))))) + 'replace) + (with-output-to-file "testfile-wpo-main.ss" + (lambda () + (pretty-print '(import (scheme) (testfile-wpo-date) + (testfile-wpo-banana) (testfile-wpo-coconut) + (testfile-wpo-apple) (testfile-wpo-eel))) + (pretty-print '(pretty-print date)) + (pretty-print '(pretty-print banana)) + (pretty-print '(pretty-print coconut)) + (pretty-print '(pretty-print apple)) + (pretty-print '(pretty-print eel))) + 'replace) + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] + [generate-wpo-files #t]) + (compile-program x))) + 'wpo-main) + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #f]) + (compile-whole-library (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-coconut) + "()\n") + + (begin + (delete-file "testfile-wpo-eel.wpo") + (delete-file "testfile-wpo-coconut.wpo") + (delete-file "testfile-wpo-eel.so") + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #f] + [library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (if (equal? name '(testfile-wpo-eel)) + '(testfile-wpo-coconut) + name) + dirs exts)))]) + (compile-whole-library (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-apple) + "((testfile-wpo-coconut) (testfile-wpo-eel))\n") + + (begin + (delete-file "testfile-wpo-date.wpo") + (delete-file "testfile-wpo-apple.wpo") + (delete-file "testfile-wpo-date.so") + #t) + + (equal? + (separate-compile + '(lambda (x) + (parameterize ([library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (cond + [(equal? name '(testfile-wpo-date)) '(testfile-wpo-apple)] + [(equal? name '(testfile-wpo-eel)) '(testfile-wpo-coconut)] + [else name]) + dirs exts)))]) + (compile-whole-program (format "~a.wpo" x) (format "~a.so" x)))) + 'wpo-main) + "((testfile-wpo-apple)\n (testfile-wpo-date)\n (testfile-wpo-coconut)\n (testfile-wpo-eel))\n") + + (equal? + (separate-eval + '(parameterize ([library-search-handler + (let ([lsh (library-search-handler)]) + (lambda (who name dirs exts) + (lsh who (cond + [(equal? name '(testfile-wpo-date)) '(testfile-wpo-apple)] + [(equal? name '(testfile-wpo-eel)) '(testfile-wpo-coconut)] + [else name]) + dirs exts)))]) + (load-program "testfile-wpo-main.so"))) + (string-append + "(date (apple->date _) (_))\n" + "(banana\n" + " (_ (banana->coconut\n" + " banana->coconut\n" + " _\n" + " (coconut->eel coconut->eel _))))\n" + "(coconut\n" + " (banana->coconut _ (coconut->eel coconut->eel _))\n" + " (apple->coconut _ (coconut->eel coconut->eel _))\n" + " (_ (coconut->eel coconut->eel _)))\n" + "(apple\n" + " (_ (apple->date apple->date _)\n" + " (apple->coconut\n" + " apple->coconut\n" + " _\n" + " (coconut->eel coconut->eel _))\n" + " (apple->eel apple->eel _)))\n" + "(eel (coconut->eel _) (apple->eel _) (_))\n")) + + (begin + ;; clean-up to make sure previous builds don't get in the way. + (delete-file "testfile-wpo-coconut.ss") + (delete-file "testfile-wpo-coconut.so") + (delete-file "testfile-wpo-coconut.wpo") + + (delete-file "testfile-wpo-eel.ss") + (delete-file "testfile-wpo-eel.so") + (delete-file "testfile-wpo-eel.wpo") + + (delete-file "testfile-wpo-date.ss") + (delete-file "testfile-wpo-date.so") + (delete-file "testfile-wpo-date.wpo") + + (delete-file "testfile-wpo-banana.ss") + (delete-file "testfile-wpo-banana.so") + (delete-file "testfile-wpo-banana.wpo") + + (delete-file "testfile-wpo-apple.ss") + (delete-file "testfile-wpo-apple.so") + (delete-file "testfile-wpo-apple.wpo") + + (delete-file "testfile-wpo-main.ss") + (delete-file "testfile-wpo-main.so") + (delete-file "testfile-wpo-main.wpo") + + #t) + + (begin + (with-output-to-file "testfile-deja-vu-one.ss" + (lambda () + (pretty-print + '(library (testfile-deja-vu-one) + (export a) + (import (scheme)) + (define a 3)))) + 'replace) + (with-output-to-file "testfile-deja-vu-two.ss" + (lambda () + (pretty-print + '(library (testfile-deja-vu-two) + (export b) + (import (scheme) (testfile-deja-vu-one)) + (define b (list 'b a))))) + 'replace) + (with-output-to-file "testfile-deja-vu-dup.ss" + (lambda () + (pretty-print + '(library (testfile-deja-vu-dup) + (export d) + (import (scheme) (testfile-deja-vu-one)) + (define d (list a 'd))))) + 'replace) + (with-output-to-file "testfile-deja-vu-main.ss" + (lambda () + (for-each pretty-print + '((import (scheme) (testfile-deja-vu-one) (testfile-deja-vu-two) (testfile-deja-vu-dup)) + (pretty-print (list a b d))))) + 'replace) + (separate-eval + '(parameterize ([generate-wpo-files #t]) + (compile-library "testfile-deja-vu-one") + (compile-library "testfile-deja-vu-two") + (compile-library "testfile-deja-vu-dup") + (compile-program "testfile-deja-vu-main") + (compile-whole-library "testfile-deja-vu-one.wpo" "testfile-deja-vu-one.done") + (compile-whole-library "testfile-deja-vu-two.wpo" "testfile-deja-vu-two.done") + (compile-whole-library "testfile-deja-vu-dup.wpo" "testfile-deja-vu-dup.done"))) + #t) + + (error? + (separate-eval + '(compile-whole-program "testfile-deja-vu-main.wpo" "testfile-deja-vu-main.done"))) + + (begin + (do ([stem '("one" "two" "dup" "main") (cdr stem)]) ((null? stem)) + (do ([ext '("ss" "so" "wpo" "done") (cdr ext)]) ((null? ext)) + (delete-file (format "testfile-deja-vu-~a.~a" (car stem) (car ext))))) + #t) + + ; verify compatibility of generate-covin-files and generate-wpo-files + (begin + (mkfile "testfile-cwl-a14.ss" + '(library (testfile-cwl-a14) (export a) (import (scheme)) (define a 123))) + (parameterize ([generate-covin-files #t] + [generate-wpo-files #t]) + (compile-library "testfile-cwl-a14") + (compile-whole-library "testfile-cwl-a14.wpo" "testfile-cwl-a14.library")) + #t) + + (file-exists? "testfile-cwl-a14.covin") + + (eqv? + (let () (import (testfile-cwl-a14)) a) + 123) + + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-cwl-a14.library")) + "") +) + +(mat maybe-compile-whole + (begin + (delete-file "testfile-mcw-a1.so") + (delete-file "testfile-mcw-a1.wpo") + (delete-file "testfile-mcw-b1.so") + (delete-file "testfile-mcw-b1.wpo") + (delete-file "testfile-mcw-c1.so") + (delete-file "testfile-mcw-c1.wpo") + (with-output-to-file "testfile-mcw-ha1.ss" + (lambda () + (pretty-print + '(define minor-msg-number 97))) + 'replace) + (with-output-to-file "testfile-mcw-hb1.ss" + (lambda () + (pretty-print + '(define major-msg-number 113))) + 'replace) + (with-output-to-file "testfile-mcw-a1.ss" + (lambda () + (pretty-print + '(library (testfile-mcw-a1) + (export a) + (import (chezscheme)) + (define a "hello from a")))) + 'replace) + (with-output-to-file "testfile-mcw-b1.ss" + (lambda () + (pretty-print + '(library (testfile-mcw-b1) + (export b) + (import (chezscheme) (testfile-mcw-a1)) + (include "testfile-mcw-ha1.ss") + (define b (lambda () (format "~a and b [~s]" a minor-msg-number)))))) + 'replace) + (with-output-to-file "testfile-mcw-c1.ss" + (lambda () + (for-each pretty-print + '((import (chezscheme) (testfile-mcw-b1)) + (include "testfile-mcw-hb1.ss") + (printf "~a and c [~s]\n" (b) major-msg-number)))) + 'replace) + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (compile-program x))) + 'mcw-c1) + #t) + + (equal? + (separate-eval '(load-program "testfile-mcw-c1.so")) + "hello from a and b [97] and c [113]\n") + + (begin + (with-output-to-file "testfile-mcw-a1.ss" + (lambda () + (pretty-print + '(library (testfile-mcw-a1) + (export a) + (import (chezscheme)) + (define a "greetings from a")))) + 'replace) + (touch "testfile-mcw-a1.so" "testfile-mcw-a1.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (maybe-compile-program x))) + 'mcw-c1) + #t) + + (equal? + (separate-eval '(load-program "testfile-mcw-c1.so")) + "greetings from a and b [97] and c [113]\n") + + (begin + (separate-compile + '(lambda (x) + (compile-whole-program (format "~a.wpo" x) (format "~a.so" x)) #f) + 'mcw-c1) + #t) + + (equal? + (separate-eval '(load-program "testfile-mcw-c1.so")) + "greetings from a and b [97] and c [113]\n") + + (begin + (with-output-to-file "testfile-mcw-a1.ss" + (lambda () + (pretty-print + '(library (testfile-mcw-a1) + (export a) + (import (chezscheme)) + (define a "salutations from a")))) + 'replace) + (touch "testfile-mcw-a1.so" "testfile-mcw-a1.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (parameterize ([compile-program-handler + (lambda (ifn ofn) + (compile-program ifn ofn) + (compile-whole-program (format "~a.wpo" (path-root ofn)) ofn #t))]) + (maybe-compile-program x)))) + 'mcw-c1) + #t) + + (equal? + (separate-eval '(load-program "testfile-mcw-c1.so")) + "salutations from a and b [97] and c [113]\n") + + (begin + (with-output-to-file "testfile-mcw-a1.ss" + (lambda () + (pretty-print + '(library (testfile-mcw-a1) + (export a) + (import (chezscheme)) + (define a "goodbye from a")))) + 'replace) + (touch "testfile-mcw-a1.so" "testfile-mcw-a1.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (parameterize ([compile-program-handler + (lambda (ifn ofn) + (compile-program ifn ofn) + (compile-whole-program (format "~a.wpo" (path-root ofn)) ofn #t))]) + (maybe-compile-program x)))) + 'mcw-c1) + #t) + + (equal? + (separate-eval '(load-program "testfile-mcw-c1.so")) + "goodbye from a and b [97] and c [113]\n") + + (begin + (with-output-to-file "testfile-mcw-hb1.ss" + (lambda () + (pretty-print + '(define major-msg-number 773))) + 'replace) + (touch "testfile-mcw-c1.so" "testfile-mcw-hb1.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (parameterize ([compile-program-handler + (lambda (ifn ofn) + (compile-program ifn ofn) + (compile-whole-program (format "~a.wpo" (path-root ofn)) ofn #t))]) + (maybe-compile-program x)))) + 'mcw-c1) + #t) + + (equal? + (separate-eval '(load-program "testfile-mcw-c1.so")) + "goodbye from a and b [97] and c [773]\n") + + (begin + (with-output-to-file "testfile-mcw-a1.ss" + (lambda () + (pretty-print + '(library (testfile-mcw-a1) + (export a) + (import (chezscheme)) + (define a "hello again from a")))) + 'replace) + (touch "testfile-mcw-a1.so" "testfile-mcw-a1.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (parameterize ([compile-library-handler + (lambda (ifn ofn) + (compile-library ifn ofn) + (compile-whole-library (format "~a.wpo" (path-root ofn)) ofn))]) + (maybe-compile-library x)))) + 'mcw-b1) + #t) + + (equal? + (separate-eval '(let () (import (testfile-mcw-b1)) (printf "~a\n" (b)))) + "hello again from a and b [97]\n") + + (begin + (with-output-to-file "testfile-mcw-ha1.ss" + (lambda () + (pretty-print + '(define minor-msg-number -53))) + 'replace) + (touch "testfile-mcw-a1.so" "testfile-mcw-a1.ss") + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (parameterize ([compile-library-handler + (lambda (ifn ofn) + (compile-library ifn ofn) + (compile-whole-library (format "~a.wpo" (path-root ofn)) ofn))]) + (maybe-compile-library x)))) + 'mcw-b1) + #t) + + (equal? + (separate-eval '(let () (import (testfile-mcw-b1)) (printf "~a\n" (b)))) + "hello again from a and b [-53]\n") +) + +(mat library-manager + (begin + (with-output-to-file "testfile-lm-a.ss" + (lambda () + (pretty-print + '(library (testfile-lm-a) + (export ct-a rt-a) + (import (scheme)) + (meta define ct-a (begin (display "ct-a rhs\n") 123)) + (define rt-a (begin (display "rt-a rhs\n") 456))))) + 'replace) + (with-output-to-file "testfile-lm-b.ss" + (lambda () + (pretty-print + '(library (testfile-lm-b) + (export b) + (import (scheme) (testfile-lm-a)) + (define-syntax (use-ct-val x) (if (odd? ct-a) #'"odd" #'"even")) + (define b use-ct-val)))) + 'replace) + (with-output-to-file "testfile-lm-c.ss" + (lambda () + (pretty-print + '(library (testfile-lm-c) + (export c) + (import (scheme) (testfile-lm-a)) + (define use-rt-val rt-a) + (define c use-rt-val)))) + 'replace) + (with-output-to-file "testfile-lm-combined.ss" + (lambda () + (pretty-print + '(begin + (include "testfile-lm-a.ss") + (include "testfile-lm-b.ss") + (include "testfile-lm-c.ss")))) + 'replace) + (with-output-to-file "testfile-lm-use-b.ss" + (lambda () + (pretty-print + '(library (testfile-lm-use-b) + (export x) + (import (scheme) (testfile-lm-b)) + (meta define x b)))) + 'replace) + (with-output-to-file "testfile-lm-use-c.ss" + (lambda () + (pretty-print + '(library (testfile-lm-use-c) + (export x) + (import (scheme) (testfile-lm-c)) + (define-syntax (x x) c)))) + 'replace) + #t) + (equal? + (separate-eval + '(import-notify #t) + '(compile-library "testfile-lm-a")) + (string-append + "compiling testfile-lm-a.ss with output to testfile-lm-a.so\n" + "ct-a rhs\n")) + (equal? + (separate-eval + '(import-notify #t) + '(library-extensions '((".ss" . ".so"))) + '(compile-library "testfile-lm-b") + '(printf "b = ~s\n" (let () (import (testfile-lm-b)) b))) + (string-append + "compiling testfile-lm-b.ss with output to testfile-lm-b.so\n" + "import: found source file \"testfile-lm-a.ss\"\n" + "import: found corresponding object file \"testfile-lm-a.so\"\n" + "import: object file is not older\n" + "import: visiting object file \"testfile-lm-a.so\"\n" + "ct-a rhs\n" + "b = \"odd\"\n")) + (equal? + (separate-eval + '(import-notify #t) + '(library-extensions '((".ss" . ".so"))) + '(compile-library "testfile-lm-c") + '(printf "c = ~s\n" (let () (import (testfile-lm-c)) c))) + (string-append + "compiling testfile-lm-c.ss with output to testfile-lm-c.so\n" + "import: found source file \"testfile-lm-a.ss\"\n" + "import: found corresponding object file \"testfile-lm-a.so\"\n" + "import: object file is not older\n" + "import: visiting object file \"testfile-lm-a.so\"\n" + "attempting to 'revisit' previously 'visited' \"testfile-lm-a.so\" for library (testfile-lm-a) run-time info\n" + "rt-a rhs\n" + "c = 456\n")) + (equal? + ;; library manager revisits object file containing a single library + ;; to resolve dependencies after earlier visit + (separate-eval + '(import-notify #t) + '(library-extensions '((".ss" . ".so"))) + '(visit "testfile-lm-a.so") + '(let () (import (testfile-lm-c)) c)) + (string-append + "import: found source file \"testfile-lm-c.ss\"\n" + "import: found corresponding object file \"testfile-lm-c.so\"\n" + "import: object file is not older\n" + "import: visiting object file \"testfile-lm-c.so\"\n" + "import: attempting to 'revisit' previously 'visited' \"testfile-lm-c.so\" for library (testfile-lm-c) run-time info\n" + "import: attempting to 'revisit' previously 'visited' \"testfile-lm-a.so\" for library (testfile-lm-a) run-time info\n" + "rt-a rhs\n" + "456\n")) + (equal? + ;; library manager visits object file containing a single library + ;; to resolve dependencies after earlier revisit + (separate-eval + '(import-notify #t) + '(library-extensions '((".ss" . ".so"))) + '(revisit "testfile-lm-a.so") + '(let () (import (testfile-lm-b)) b)) + (string-append + "import: found source file \"testfile-lm-b.ss\"\n" + "import: found corresponding object file \"testfile-lm-b.so\"\n" + "import: object file is not older\n" + "import: visiting object file \"testfile-lm-b.so\"\n" + "import: attempting to 'visit' previously 'revisited' \"testfile-lm-a.so\" for library (testfile-lm-a) compile-time info\n" + "import: attempting to 'revisit' previously 'visited' \"testfile-lm-b.so\" for library (testfile-lm-b) run-time info\n" + "\"odd\"\n")) + (equal? + (separate-eval + '(import-notify #t) + '(library-extensions '((".ss" . ".so"))) + '(compile-file "testfile-lm-combined")) + (string-append + "compiling testfile-lm-combined.ss with output to testfile-lm-combined.so\n" + "ct-a rhs\n")) + (equal? + ;; library manager revisits object file containing related libraries + ;; to resolve dependencies after earlier visit + (separate-eval + '(import-notify #t) + '(visit "testfile-lm-combined.so") + '(let () + (import (testfile-lm-a)) + (define-syntax (foo x) ct-a) + (printf "foo = ~s\n" foo)) + '(let () (import (testfile-lm-c)) c)) + (string-append + "ct-a rhs\n" + "foo = 123\n" + "import: attempting to 'revisit' previously 'visited' \"testfile-lm-combined.so\" for library (testfile-lm-c) run-time info\n" + "rt-a rhs\n" + "456\n")) + (equal? + ;; library manager visits object file containing related libraries + ;; to resolve dependencies after earlier revisit + (separate-eval + '(import-notify #t) + '(revisit "testfile-lm-combined.so") + '(let () + (import (testfile-lm-a)) + (define foo rt-a) + (printf "foo = ~s\n" foo)) + '(let () (import (testfile-lm-b)) b)) + (string-append + "import: attempting to 'visit' previously 'revisited' \"testfile-lm-combined.so\" for library (testfile-lm-a) compile-time info\n" + "rt-a rhs\n" + "foo = 456\n" + "\"odd\"\n")) + (equal? + ;; library manager does not revisit due to earlier load + (separate-eval + '(import-notify #t) + '(load "testfile-lm-combined.so") + '(let () + (import (testfile-lm-a)) + (define-syntax (foo x) ct-a) + (printf "foo = ~s\n" foo)) + '(let () (import (testfile-lm-c)) c)) + (string-append + "ct-a rhs\n" + "foo = 123\n" + "rt-a rhs\n" + "456\n")) + (equal? + ;; library manager does not revisit due to earlier load + (separate-eval + '(import-notify #t) + '(load "testfile-lm-combined.so") + '(let () + (import (testfile-lm-a)) + (define foo rt-a) + (printf "foo = ~s\n" foo)) + '(let () (import (testfile-lm-b)) b)) + (string-append + "rt-a rhs\n" + "foo = 456\n" + "\"odd\"\n")) + ) + +(mat verify-loadability + (error? ; invalid argument + (verify-loadability 'never)) + (error? ; invalid argument + (verify-loadability 'never "hello.so")) + (error? ; invalid argument + (verify-loadability #f "hello.so" "goodbye.so")) + (error? ; invalid argument + (verify-loadability 'load 'hello)) + (error? ; invalid argument + (verify-loadability 'load '(a . "testdir"))) + (error? ; invalid argument + (verify-loadability 'load '#("a" "testdir"))) + (error? ; invalid argument + (verify-loadability 'load "testfile1.so" "testfile2.so" 'hello)) + (error? ; invalid argument + (verify-loadability 'load "testfile1.so" "testfile2.so" '(a . "testdir"))) + (error? ; invalid argument + (verify-loadability 'load '("a" . hello))) + (error? ; invalid argument + (verify-loadability 'load '("a" . ("src" . "obj")))) + (error? ; invalid argument + (verify-loadability 'load '("a" . (("src" "obj"))))) + (error? ; invalid argument + (verify-loadability 'load '("a" . ((("src" "obj")))))) + (begin + (define install + (lambda (dir . fn*) + (for-each + (lambda (fn) + (call-with-port (open-file-input-port fn) + (lambda (ip) + (call-with-port (open-file-output-port (format "~a/~a" dir (path-last fn))) + (lambda (op) + (put-bytevector op (get-bytevector-all ip))))))) + fn*))) + #t) + (eq? (verify-loadability 'visit) (void)) + (eq? (verify-loadability 'revisit) (void)) + (eq? (verify-loadability 'load) (void)) + (error? ; not found + (verify-loadability 'load "probably not found")) + (begin + (mkfile "testfile-clA.ss" + '(import (chezscheme) (testfile-clB) (testfile-clC)) + '(printf "~a, ~a\n" b c)) + (mkfile "testfile-clB.ss" + '(library (testfile-clB) + (export b) + (import (chezscheme) (testfile-clB1)) + (define-syntax go (lambda (x) (datum->syntax #'* (b1)))) + (define b (go)))) + (mkfile "testfile-clB1.ss" + '(library (testfile-clB1) + (export b1) + (import (chezscheme)) + (define b1 (lambda () "hello from B1")))) + (mkfile "testfile-clC.ss" + '(library (testfile-clC) + (export c) + (import (chezscheme) (testfile-clC1)) + (define c (c1)))) + (mkfile "testfile-clC1.ss" + '(library (testfile-clC1) + (export c1) + (import (chezscheme)) + (define-syntax c1 (syntax-rules () [(_) "hello from C1"])))) + (rm-rf "testdir-obj1") + (rm-rf "testdir-obj2") + (mkdir "testdir-obj1") + (mkdir "testdir-obj2") + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj1"))] [compile-imported-libraries #t]) + (compile-program "testfile-clA.ss" "testdir-obj1/testfile-clA.so"))) + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj2"))] [compile-imported-libraries #t]) + (compile-program "testfile-clA.ss" "testdir-obj2/testfile-clA.so"))) + #t) + (begin + (rm-rf "testdir-dist1") + (mkdir "testdir-dist1") + (install "testdir-dist1" "testdir-obj1/testfile-clA.so" "testdir-obj1/testfile-clB.so" "testdir-obj1/testfile-clC.so") + #t) + (eqv? + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'visit "testfile-clA.so") + (verify-loadability 'revisit "testfile-clA.so") + (verify-loadability 'load "testfile-clA.so"))) + "") + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (load-program "testfile-clA.so"))) + "hello from B1, hello from C1\n") + (error? ; missing B1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'visit "testfile-clB.so")))) + (error? ; missing B1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'load "testfile-clB.so")))) + (error? ; missing C1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'visit "testfile-clC.so")))) + (error? ; missing C1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'load "testfile-clC.so")))) + (begin + (rm-rf "testdir-dist2") + (mkdir "testdir-dist2") + (install "testdir-dist2" "testdir-obj2/testfile-clA.so" "testdir-obj2/testfile-clB.so" "testdir-obj2/testfile-clC.so") + #t) + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist2"]) + (load-program "testfile-clA.so"))) + "hello from B1, hello from C1\n") + (error? ; mismatched compilation instance + (separate-eval + '(verify-loadability 'revisit + '("testdir-dist1/testfile-clA.so" . "testdir-dist1") + '("testdir-dist2/testfile-clA.so" . "testdir-dist2")))) + (error? ; mismatched compilation instance + (separate-eval + '(verify-loadability 'load + '("testdir-dist1/testfile-clA.so" . "testdir-dist1") + '("testdir-dist2/testfile-clA.so" . "testdir-dist2")))) + (begin + (rm-rf "testdir-dist3") + (mkdir "testdir-dist3") + (install "testdir-dist3" "testdir-obj1/testfile-clA.so" "testdir-obj1/testfile-clB.so" "testdir-obj2/testfile-clC.so") + #t) + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (load-program "testfile-clA.so")))) + (eqv? ; no compile-time requirements, so no problem + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (verify-loadability 'visit "testfile-clA.so"))) + "") + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (verify-loadability 'revisit "testfile-clA.so")))) + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (verify-loadability 'load "testfile-clA.so")))) + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (unless (guard (c [else (printf "yes\n")]) (verify-loadability 'load "testfile-clA.so") #f) + (errorf #f "oops"))) + '(parameterize ([cd "testdir-dist1"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(parameterize ([cd "testdir-dist2"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1))))) + '(parameterize ([cd "testdir-dist1"]) + (load-program "testfile-clA.so")) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1)))))) + "yes\n#\n#\n(#f #f #f #f)\nhello from B1, hello from C1\n(#t #f #t #f)\n") + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (unless (guard (c [else (printf "yes\n")]) (verify-loadability 'load "testfile-clA.so") #f) + (errorf #f "oops"))) + '(parameterize ([cd "testdir-dist1"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(parameterize ([cd "testdir-dist2"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1))))) + '(parameterize ([cd "testdir-dist2"]) + (load-program "testfile-clA.so")) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1)))))) + "yes\n#\n#\n(#f #f #f #f)\nhello from B1, hello from C1\n(#t #f #t #f)\n") + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([library-directories '(("testdir-dist1" . "testdir-dist1"))]) + (verify-loadability 'load "testdir-dist2/testfile-clA.so")))) + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([library-directories '(("testdir-dist1" . "testdir-dist1"))]) + (verify-loadability 'load "testdir-dist1/testfile-clA.so" "testdir-dist2/testfile-clA.so")))) + (begin + (mkfile "testfile-clPD.ss" + '(import (chezscheme) (testfile-clD)) + '(printf "~s\n" (make-Q))) + (mkfile "testfile-clPE.ss" + '(import (chezscheme) (testfile-clE)) + '(printf "~s\n" (make-Q 73))) + (mkfile "testfile-clD.ss" + '(library (testfile-clD) (export make-Q Q? Q-x) (import (chezscheme) (testfile-clF)) + (define-record-type Q + (nongenerative Q) + (fields x) + (protocol (lambda (new) (lambda () (new f))))))) + (mkfile "testfile-clE.ss" + '(library (testfile-clE) (export make-Q Q? Q-x) (import (chezscheme) (testfile-clG)) + (define-record-type Q + (nongenerative Q) + (fields x y) + (protocol (lambda (new) (lambda (y) (new g y))))))) + (mkfile "testfile-clF.ss" + '(library (testfile-clF) (export f) (import (chezscheme)) (define f 77))) + (mkfile "testfile-clG.ss" + '(library (testfile-clG) (export g) (import (chezscheme)) (define g 123))) + (rm-rf "testdir-obj") + (mkdir "testdir-obj") + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-program "testfile-clPD.ss" "testdir-obj/testfile-clPD.so"))) + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-program "testfile-clPE.ss" "testdir-obj/testfile-clPE.so"))) + #t) + (begin + (rm-rf "testdir-dist") + (mkdir "testdir-dist") + (install "testdir-dist" "testdir-obj/testfile-clPD.so" "testdir-obj/testfile-clD.so" "testdir-obj/testfile-clF.so") + (install "testdir-dist" "testdir-obj/testfile-clPE.so" "testdir-obj/testfile-clE.so" "testdir-obj/testfile-clG.so") + #t) + (error? ; incompatible record-type Q + (separate-eval + '(cd "testdir-dist") + '(load-program "testfile-clPD.so") + '(load-program "testfile-clPE.so"))) + (equal? + (separate-eval + '(cd "testdir-dist") + '(verify-loadability 'visit "testfile-clPD.so" "testfile-clPE.so") + '(verify-loadability 'visit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'visit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'revisit "testfile-clPD.so" "testfile-clPE.so") + '(verify-loadability 'revisit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'revisit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clPE.so") + '(verify-loadability 'load "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'load "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clPE.so" "testfile-clD.so" "testfile-clE.so" "testfile-clF.so" "testfile-clG.so") + '(load-program "testfile-clPD.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clE.so")) + "#[Q 77]\n") + (equal? + (separate-eval + '(cd "testdir-dist") + '(verify-loadability 'visit "testfile-clPD.so" "testfile-clE.so") + '(verify-loadability 'visit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'visit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'revisit "testfile-clPD.so" "testfile-clE.so") + '(verify-loadability 'revisit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'revisit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clE.so") + '(verify-loadability 'load "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'load "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clPE.so" "testfile-clD.so" "testfile-clE.so" "testfile-clF.so" "testfile-clG.so") + '(load-program "testfile-clPE.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clE.so")) + "#[Q 123 73]\n") + (begin + (mkfile "testfile-clH0.ss" + '(library (testfile-clH0) (export h0) (import (chezscheme)) + (define h0 (lambda (x) (cons x 'a))))) + (mkfile "testfile-clH1.ss" + '(top-level-program + (import (chezscheme) (testfile-clH0)) + (printf "~s\n" (h0 73)))) + (mkfile "testfile-clH2.ss" + '(include "testfile-clH0.ss") + '(top-level-program + (import (chezscheme) (testfile-clH0)) + (printf "~s\n" (h0 37)))) + (rm-rf "testdir-obj") + (mkdir "testdir-obj") + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-file "testfile-clH1.ss" "testdir-obj/testfile-clH1.so"))) + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-file "testfile-clH2.ss" "testdir-obj/testfile-clH2.so"))) + #t) + (equal? + (separate-eval + '(parameterize ([library-directories '(("testdir-obj" . "testdir-obj"))]) + (revisit "testdir-obj/testfile-clH1.so"))) + "(73 . a)\n") + (equal? + (separate-eval + '(parameterize ([library-directories '(("testdir-obj" . "testdir-obj"))]) + (revisit "testdir-obj/testfile-clH2.so"))) + "(37 . a)\n") + (eqv? + (separate-eval + '(let ([libdirs '(("testdir-obj" . "testdir-obj"))]) + (verify-loadability 'revisit (cons "testdir-obj/testfile-clH1.so" libdirs) (cons "testdir-obj/testfile-clH2.so" libdirs)))) + "") + (error? ; mismatched compilation instance + (separate-eval + '(let ([libdirs '(("testdir-obj" . "testdir-obj"))]) + (verify-loadability 'revisit (cons "testdir-obj/testfile-clH2.so" libdirs) (cons "testdir-obj/testfile-clH1.so" libdirs))))) + + ; make sure verify-loadability respects eval-when forms + (begin + (mkfile "testfile-clI0.ss" + '(library (testfile-clI0) (export x) (import (chezscheme)) (define x 10) (printf "invoking I0\n"))) + (mkfile "testfile-clI1.ss" + '(eval-when (visit) + (top-level-program + (import (chezscheme) (testfile-clI0)) + (printf "running I1, x = ~s\n" x)))) + (separate-eval + '(parameterize ([compile-imported-libraries #t]) + (compile-file "testfile-clI1"))) + #t) + (equal? + (separate-eval '(visit "testfile-clI1.so")) + "invoking I0\nrunning I1, x = 10\n") + (equal? + (separate-eval '(revisit "testfile-clI1.so")) + "") + (equal? + (separate-eval '(load "testfile-clI1.so")) + "invoking I0\nrunning I1, x = 10\n") + (eq? + (verify-loadability 'visit "testfile-clI1.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clI1.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clI1.so") + (void)) + (delete-file "testfile-clI0.ss") + (delete-file "testfile-clI0.so") + (error? + (verify-loadability 'visit "testfile-clI1.so")) + (eq? + (verify-loadability 'revisit "testfile-clI1.so") + (void)) + (error? + (verify-loadability 'load "testfile-clI1.so")) + + ; make sure compile-whole-program perserves the information verify-loadability needs + (begin + (mkfile "testfile-clJ0.ss" + '(library (testfile-clJ0) (export x0) (import (chezscheme)) (define x0 'eat) (printf "invoking J0\n"))) + (mkfile "testfile-clJ1.ss" + '(library (testfile-clJ1) (export x1) (import (chezscheme) (testfile-clJ0)) (define x1 (list x0 'oats)) (printf "invoking J1\n"))) + (mkfile "testfile-clJ2.ss" + '(library (testfile-clJ2) (export x2) (import (chezscheme) (testfile-clJ1)) (define x2 (cons 'mares x1)) (printf "invoking J2\n"))) + (mkfile "testfile-clJ3.ss" + '(import (chezscheme) (testfile-clJ2)) + '(printf "running J3, x2 = ~s\n" x2)) + (separate-eval + '(parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (compile-program "testfile-clJ3"))) + #t) + + (equal? + (separate-eval '(verify-loadability 'load "testfile-clJ3.so")) + "") + + (equal? + (separate-eval '(load-program "testfile-clJ3.so")) + "invoking J0\ninvoking J1\ninvoking J2\nrunning J3, x2 = (mares eat oats)\n") + + (delete-file "testfile-clJ0.ss") + (delete-file "testfile-clJ0.wpo") + (delete-file "testfile-clJ2.ss") + (delete-file "testfile-clJ2.wpo") + + ((lambda (x ls) (and (member x ls) #t)) + (separate-eval + '(compile-whole-program "testfile-clJ3.wpo" "testfile-clJ3-all.so")) + '("((testfile-clJ0) (testfile-clJ2))\n" + "((testfile-clJ2) (testfile-clJ0))\n")) + + (delete-file "testfile-clJ1.ss") + (delete-file "testfile-clJ1.wpo") + (delete-file "testfile-clJ1.so") + + (equal? + (separate-eval '(verify-loadability 'load "testfile-clJ3-all.so")) + "") + + (equal? + (separate-eval '(load-program "testfile-clJ3-all.so")) + "invoking J0\ninvoking J1\ninvoking J2\nrunning J3, x2 = (mares eat oats)\n") + + (eq? + (rename-file "testfile-clJ0.so" "testfile-clJ0.sav") + (void)) + + (error? ; missing testfile-clJ0.so + (separate-eval '(verify-loadability 'load "testfile-clJ3-all.so"))) + + (error? ; missing testfile-clJ0.so + (separate-eval '(load-program "testfile-clJ3-all.so"))) + + (eq? + (rename-file "testfile-clJ0.sav" "testfile-clJ0.so") + (void)) + + (delete-file "testfile-clJ2.so") + + (error? ; missing testfile-clJ2.so + (separate-eval '(verify-loadability 'load "testfile-clJ3-all.so"))) + + (error? ; missing testfile-clJ2.so + (separate-eval '(load-program "testfile-clJ3-all.so"))) + + (begin + (mkfile "testfile-clK0.ss" + '(library (testfile-clK0) (export x0) (import (chezscheme)) (define x0 "chocolate") (printf "invoking K0\n"))) + (mkfile "testfile-clK1.ss" + '(library (testfile-clK1) (export x1) (import (chezscheme) (testfile-clK0)) (define x1 (format "~a chip" x0)) (printf "invoking K1\n"))) + (mkfile "testfile-clK2.ss" + '(import (chezscheme) (testfile-clK1)) + '(printf "running K2, x1 = ~s\n" x1)) + (separate-eval + '(parameterize ([compile-imported-libraries #t]) + (compile-program "testfile-clK2"))) + #t) + (eq? + (verify-loadability 'visit "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'visit "testfile-clK1.so" "testfile-clK2.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clK1.so" "testfile-clK2.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clK1.so" "testfile-clK2.so") + (void)) + (eq? + (verify-loadability 'visit "testfile-clK2.so" "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clK2.so" "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clK2.so" "testfile-clK1.so") + (void)) + (equal? + (separate-eval + '(visit "testfile-clK1.so") + '(let () (import (testfile-clK1)) x1)) + "invoking K0\ninvoking K1\n\"chocolate chip\"\n") + (equal? + (separate-eval '(revisit "testfile-clK2.so")) + "invoking K0\ninvoking K1\nrunning K2, x1 = \"chocolate chip\"\n") + (eq? + (strip-fasl-file "testfile-clK0.so" "testfile-clK0.so" + (fasl-strip-options compile-time-information)) + (void)) + (error? ; missing compile-time info for K0 + (verify-loadability 'visit "testfile-clK1.so")) + (eq? + (verify-loadability 'revisit "testfile-clK1.so") + (void)) + (error? ; missing compile-time info for K0 + (verify-loadability 'load "testfile-clK1.so")) + (error? ; missing compile-time info + (separate-eval + '(visit "testfile-clK1.so") + '(let () (import (testfile-clK1)) x1))) + (equal? + (separate-eval '(revisit "testfile-clK2.so")) + "invoking K0\ninvoking K1\nrunning K2, x1 = \"chocolate chip\"\n") +) + +(mat concatenate-object-files + (begin + (define install + (lambda (dir . fn*) + (for-each + (lambda (fn) + (call-with-port (open-file-input-port fn) + (lambda (ip) + (call-with-port (open-file-output-port (format "~a/~a" dir (path-last fn))) + (lambda (op) + (put-bytevector op (get-bytevector-all ip))))))) + fn*))) + (define test-isolated-load + (lambda (fn lib val) + (rm-rf "testdir-isolated") + (mkdir "testdir-isolated") + (install "testdir-isolated" fn) + (separate-eval + `(cd "testdir-isolated") + `(load ,fn) + `(let () + (import ,lib) + ,val)))) + #t) + (begin + (mkfile "testfile-catlibA.ss" + '(library (testfile-catlibA) + (export a) + (import (chezscheme)) + (define a 1))) + (mkfile "testfile-catlibB.ss" + '(library (testfile-catlibB) + (export a b) + (import (chezscheme) (testfile-catlibA)) + (define b 2))) + (mkfile "testfile-catlibC.ss" + '(library (testfile-catlibC) + (export c) + (import (chezscheme) (testfile-catlibB)) + (define c (+ a b)))) + (separate-eval + '(compile-library "testfile-catlibA.ss" "testfile-catlibA.so")) + (separate-eval + '(compile-library "testfile-catlibB.ss" "testfile-catlibB.so")) + (separate-eval + '(compile-library "testfile-catlibC.ss" "testfile-catlibC.so")) + #t) + (eqv? + (separate-eval + '(begin + (concatenate-object-files "testfile-catlibAB.so" "testfile-catlibA.so" "testfile-catlibB.so") + (concatenate-object-files "testfile-catlibBC.so" "testfile-catlibB.so" "testfile-catlibC.so") + (concatenate-object-files "testfile-catlibABC.so" "testfile-catlibA.so" "testfile-catlibB.so" "testfile-catlibC.so"))) + "") + (equal? + (test-isolated-load "testfile-catlibA.so" '(testfile-catlibA) 'a) + "1\n") + (error? ; can't find (testfile-catlibA) + (test-isolated-load "testfile-catlibB.so" '(testfile-catlibB) 'b)) + (error? ; can't find (testfile-catlibA) + (test-isolated-load "testfile-catlibBC.so" '(testfile-catlibC) 'c)) + (equal? + (test-isolated-load "testfile-catlibABC.so" '(testfile-catlibA) 'a) + "1\n") + (equal? + (test-isolated-load "testfile-catlibABC.so" '(testfile-catlibB) 'b) + "2\n") + (equal? + (test-isolated-load "testfile-catlibABC.so" '(testfile-catlibC) 'c) + "3\n") + (equal? + (test-isolated-load "testfile-catlibAB.so" '(testfile-catlibB) 'b) + "2\n") + (begin + (mkfile "testfile-cof1A.ss" + '(library (testfile-cof1A) (export a) (import (chezscheme)) + (define-syntax a (identifier-syntax 45)))) + (mkfile "testfile-cof1B.ss" + '(library (testfile-cof1B) (export b) (import (chezscheme) (testfile-cof1A)) + (define b (lambda () (* a 2))))) + (mkfile "testfile-cof1P.ss" + '(import (chezscheme) (testfile-cof1A) (testfile-cof1B)) + '(printf "a = ~s, (b) = ~s\n" a (b))) + (mkfile "testfile-cof1foo.ss" + '(printf "hello from foo!\n")) + (mkfile "testfile-cof1bar.ss" + '(printf "hello from bar!\n")) + (parameterize ([compile-imported-libraries #t]) (compile-program "testfile-cof1P")) + (compile-file "testfile-cof1foo") + (compile-file "testfile-cof1bar") + (let () + (define fake-concatenate-object-files + (lambda (outfn infn . infn*) + (call-with-port (open-file-output-port outfn (file-options #;compressed replace)) + (lambda (op) + (for-each + (lambda (infn) + (put-bytevector op + (call-with-port (open-file-input-port infn (file-options #;compressed)) get-bytevector-all))) + (cons infn infn*)))))) + (fake-concatenate-object-files "testfile-cof1fooP.so" "testfile-cof1foo.so" "testfile-cof1P.so") + (fake-concatenate-object-files "testfile-cof1barB.so" "testfile-cof1bar.so" "testfile-cof1B.so")) + #t) + ; using separate-eval since A and B already loaded in the compiling process: + (equal? + (separate-eval '(load "testfile-cof1fooP.so")) + "hello from foo!\na = 45, (b) = 90\n") + (equal? + (separate-eval + '(load "testfile-cof1barB.so") + '(printf "~s\n" (and (member '(testfile-cof1B) (library-list)) 'yes))) + "hello from bar!\nyes\n") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so")) "") + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") + (delete-file "testfile-cof1A.so") + ; NB: this should be an error, but isn't because we're using the fake concatenate-object-files + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so")) "") ; requires testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") ; doesn't require testfile-cof1A.so + + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (delete-file "testfile-cof1B.so") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so or testfile-cof1B.so + ; NB: this should be an error, but isn't because we're using the fake concatenate-object-files + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so")) "") ; requires testfile-cof1B.so + + ; now with the real concatenate-object-files + (begin + (separate-eval '(parameterize ([compile-imported-libraries #t]) (compile-program "testfile-cof1P"))) + (concatenate-object-files "testfile-cof1fooP.so" "testfile-cof1foo.so" "testfile-cof1P.so") + (concatenate-object-files "testfile-cof1barB.so" "testfile-cof1bar.so" "testfile-cof1B.so") + #t) + ; using separate-eval since A and B already loaded in the compiling process: + (equal? + (separate-eval '(load "testfile-cof1fooP.so")) + "hello from foo!\na = 45, (b) = 90\n") + (equal? + (separate-eval + '(load "testfile-cof1barB.so") + '(printf "~s\n" (and (member '(testfile-cof1B) (library-list)) 'yes))) + "hello from bar!\nyes\n") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so")) "") + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") + (delete-file "testfile-cof1A.so") + (error? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so"))) ; requires testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") ; doesn't require testfile-cof1A.so + + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (delete-file "testfile-cof1B.so") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so or testfile-cof1B.so + (error? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so"))) ; requires testfile-cof1B.so +) + +;;; section 7.2: + +(mat top-level-value-functions + (error? (top-level-bound? "hello")) + (error? (top-level-bound?)) + (error? (top-level-bound? 45 'hello)) + (error? (top-level-bound? 'hello 'hello)) + (error? (top-level-bound? (scheme-environment) (scheme-environment))) + (error? (top-level-mutable? "hello")) + (error? (top-level-mutable?)) + (error? (top-level-mutable? 45 'hello)) + (error? (top-level-mutable? 'hello 'hello)) + (error? (top-level-mutable? (scheme-environment) (scheme-environment))) + (error? (top-level-value "hello")) (error? (top-level-value)) (error? (top-level-value 'hello 'hello)) (error? (top-level-value (scheme-environment) (scheme-environment))) @@ -3262,9 +5389,7 @@ 'replace) ; compile in a separate Scheme process (if (windows?) - (system (format "echo (compile-file \"testfile\") | ~a" - (list->string - (subst #\\ #\/ (string->list *scheme*))))) + (system (format "echo (compile-file \"testfile\") | ~a" (patch-exec-path *scheme*))) (system (format "echo '(compile-file \"testfile\")' | ~a" *scheme*))) (load "testfile.so") (list (top-level-bound? '$notfribblefratz) (top-level-value '$notfribblefratz))) @@ -3355,6 +5480,35 @@ (error? ; unexpected return from handler (parameterize ([exit-handler values]) (exit 5))) + (begin + (define (exit-code expr) + (if (windows?) + (system (format "echo ~s | ~a -q" expr (patch-exec-path *scheme*))) + (system (format "echo '~s' | ~a -q" expr *scheme*)))) + #t) + (eqv? (exit-code '(exit)) 0) + (eqv? (exit-code '(exit 15)) 15) + (eqv? (exit-code '(exit 0)) 0) + (eqv? (exit-code '(exit 24 7)) 24) + (eqv? (exit-code '(exit 0 1 2)) 0) + (eqv? (exit-code '(exit 3.14)) 1) + (eqv? (exit-code '(exit 9.8 3.14)) 1) + (begin + (with-output-to-file "testfile-exit.ss" + (lambda () + (for-each pretty-print + '((import (scheme)) + (apply exit (map string->number (command-line-arguments)))))) + 'replace) + #t) + (eqv? (system (format "~a --script testfile-exit.ss" (patch-exec-path *scheme*))) 0) + (eqv? (system (format "~a --script testfile-exit.ss 5" (patch-exec-path *scheme*))) 5) + (eqv? (system (format "~a --script testfile-exit.ss 0 1 2" (patch-exec-path *scheme*))) 0) + (eqv? (system (format "~a --script testfile-exit.ss 3 4 5" (patch-exec-path *scheme*))) 3) + (eqv? (system (format "~a --program testfile-exit.ss" (patch-exec-path *scheme*))) 0) + (eqv? (system (format "~a --program testfile-exit.ss 2" (patch-exec-path *scheme*))) 2) + (eqv? (system (format "~a --program testfile-exit.ss 0 1 2" (patch-exec-path *scheme*))) 0) + (eqv? (system (format "~a --program testfile-exit.ss 6 7 8" (patch-exec-path *scheme*))) 6) ) (mat abort @@ -3444,6 +5598,75 @@ (collect (collect-maximum-generation)) (let ([b3 (bytes-allocated)]) (and (> b2 b1) (< b3 b2)))))) + (error? ; invalid generation + (collect 'static 1 'static)) + (error? ; invalid generation + (collect 'static 1 'static)) + (error? ; invalid generation + (parameterize ([collect-maximum-generation 4]) + (collect 17 1 17))) + (error? ; invalid generation + (collect -1 1 'static)) + (error? ; invalid maximum target generation + (parameterize ([collect-maximum-generation 4]) + (collect 3 1 2))) + (error? ; invalid maximum target generation + (parameterize ([collect-maximum-generation 4]) + (collect 3 1 'dynamic))) + (error? ; invalid minimum target generation + (parameterize ([collect-maximum-generation 4]) + (collect 0 0 3))) + (error? ; invalid minimum target generation + (parameterize ([collect-maximum-generation 4]) + (collect 0 'static 3))) + (error? ; invalid minimum target generation + (parameterize ([collect-maximum-generation 4]) + (collect 0 2 1))) + (error? ; invalid minimum target generation + (parameterize ([collect-maximum-generation 4]) + (collect 0 2 0))) + (error? ; invalid minimum target generation + (parameterize ([collect-maximum-generation 4]) + (collect (collect-maximum-generation) 0 'static))) + (error? ; invalid minimum target generation + (parameterize ([collect-maximum-generation 4]) + (collect (collect-maximum-generation) -1 'static))) + (parameterize ([collect-maximum-generation (max (collect-maximum-generation) 2)]) + (with-interrupts-disabled + (collect (collect-maximum-generation)) + (let ([b0-0 (bytes-allocated 0)] + [b1-0 (bytes-allocated 1)] + [bm-0 (bytes-allocated (collect-maximum-generation))]) + (let* ([v (make-vector 2000)] [n (compute-size v)]) + (let ([b0-1 (bytes-allocated 0)] + [b1-1 (bytes-allocated 1)] + [bm-1 (bytes-allocated (collect-maximum-generation))]) + (unless (>= (- b0-1 b0-0) n) (errorf 'oops1 "b0-0 = ~s, b0-1 = ~s, b0-2 = ~s" b0-0 b0-1 b0-2)) + (unless (< (- b1-1 b1-0) n) (errorf 'oops2 "b1-0 = ~s, b1-1 = ~s, b1-2 = ~s" b1-0 b1-1 b1-2)) + (unless (< (- bm-1 bm-0) n) (errorf 'oops3 "bm-0 = ~s, bm-1 = ~s, bm-2 = ~s" bm-0 bm-1 bm-2)) + (collect (collect-maximum-generation) 1 (collect-maximum-generation)) + (let ([b0-2 (bytes-allocated 0)] + [b1-2 (bytes-allocated 1)] + [bm-2 (bytes-allocated (collect-maximum-generation))]) + (unless (< (- b0-2 b0-0) n) (errorf 'oops4 "b0-0 = ~s, b0-1 = ~s, b0-2 = ~s" b0-0 b0-1 b0-2)) + (unless (>= (- b1-2 b1-0) n) (errorf 'oops5 "b1-0 = ~s, b1-1 = ~s, b1-2 = ~s" b1-0 b1-1 b1-2)) + (unless (< (- bm-2 bm-0) n) (errorf 'oops6 "bm-0 = ~s, bm-1 = ~s, bm-2 = ~s" bm-0 bm-1 bm-2)) + (parameterize ([print-vector-length #t]) (pretty-print v)) + #t)))))) + (parameterize ([collect-maximum-generation 4] + [collect-generation-radix 4] + [collect-trip-bytes (expt 2 20)]) + (collect (collect-maximum-generation)) + (let ([b0 (maximum-memory-bytes)]) + (define tail-spin + (lambda (n) + (do ([i 1 (fx+ i 1)] [next (cons 0 '()) (cdr next)]) + ((fx= i n)) + (set-cdr! next (cons i '()))))) + (tail-spin 50000000) + (let ([b1 (maximum-memory-bytes)]) + (or (< (- b1 b0) (expt 2 24)) + (errorf #f "b0 = ~s, b1 = ~s, b1-b0 = ~s" b0 b1 (- b1 b0)))))) ) (mat object-counts @@ -3470,7 +5693,7 @@ (assert (assp record-type-descriptor? hc)) #t)) ; a few idiot checks including verification of proper behavior when changing collect-maximum-generation - (parameterize ([enable-object-counts #t]) + (parameterize ([enable-object-counts #t] [collect-maximum-generation (collect-maximum-generation)]) (pair? (with-interrupts-disabled (let ([cmg (collect-maximum-generation)]) @@ -3548,6 +5771,45 @@ (or (not a) (not (assq 'static (cdr a))))) ) +(mat collect-rendezvous + (begin + (define (check-working-gc collect) + (with-interrupts-disabled + (let ([p (weak-cons (gensym) #f)]) + (collect) + (eq? (car p) #!bwp)))) + (and (check-working-gc collect) + (check-working-gc collect-rendezvous))) + + (or (not (threaded?)) + (let ([m (make-mutex)] + [c (make-condition)] + [done? #f]) + (fork-thread + (lambda () + (let loop () + (mutex-acquire m) + (cond + [done? + (condition-signal c) + (mutex-release m)] + [else + (mutex-release m) + (loop)])))) + (and (check-working-gc collect-rendezvous) + ;; End thread: + (begin + (mutex-acquire m) + (set! done? #t) + (condition-wait c m) + (mutex-release m) + ;; Make sure the thread is really done + (let loop () + (unless (= 1 (#%$top-level-value '$active-threads)) + (loop))) + ;; Plain `collect` should work again: + (check-working-gc collect))))) + ) ;;; section 7.6: diff -Nru chezscheme-9.5+dfsg/mats/8.ms chezscheme-9.5.4+dfsg/mats/8.ms --- chezscheme-9.5+dfsg/mats/8.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/8.ms 2020-08-31 02:35:12.000000000 +0000 @@ -6111,6 +6111,8 @@ (lambda (r) (r #'a #'frip "extra stuff")))) a)) + (error? ; not a compile-time value + (compile-time-value-value 17)) (begin (with-output-to-file "testfile-mctv0.ss" (lambda () @@ -6132,6 +6134,7 @@ (begin (import (testfile-mctv0)) #t) + (compile-time-value? (make-compile-time-value 'fred)) (begin (define-syntax frob (make-compile-time-value 'rabf)) #t) @@ -6180,6 +6183,7 @@ (define-syntax x (make-compile-time-value 'xow))) #t) (eq? (let () (import (mctv l1)) (get-ctv x)) 'xow) + (eq? (compile-time-value-value (top-level-syntax 'x (environment '(mctv l1)))) 'xow) (begin (with-output-to-file "testfile-mctv1.ss" (lambda () @@ -6190,6 +6194,19 @@ (for-each separate-compile '(mctv1)) #t) (eq? (let () (import (testfile-mctv1)) (get-ctv x)) 'xuko1) + (compile-time-value? (top-level-syntax 'x (environment '(testfile-mctv1)))) + (eq? (compile-time-value-value (top-level-syntax 'x (environment '(testfile-mctv1)))) 'xuko1) + (begin + (with-output-to-file "testfile-mctv1a.ss" + (lambda () + (pretty-print + '(library (testfile-mctv1a) (export x) (import (chezscheme)) + (define-syntax x (make-compile-time-value 'xuko1))))) + 'replace) + (for-each separate-compile '(mctv1a)) + #t) + (eq? (compile-time-value-value (top-level-syntax 'x (environment '(testfile-mctv1a)))) 'xuko1) + (eq? (let () (import (testfile-mctv1a)) (get-ctv x)) 'xuko1) (begin (with-output-to-file "testfile-mctv2.ss" (lambda () @@ -7976,6 +7993,19 @@ (equal? (let () (import ($l3)) (f (f 3))) 3) + (begin + ;; (export import-spec ...) empty case + (library ($empty) (export) (import (chezscheme)) (export (import))) + #t) + (begin + (library ($l4-A) (export a) (import (chezscheme)) (define a 1)) + (library ($l4-B) (export b) (import (chezscheme)) (define b 2)) + #t) + (equal? '(1 2) (let () (import ($l4-A) ($l4-B)) (list a b))) + (begin + ;; (export import-spec ...) multiple imports case + (library ($l4-C) (export) (import (chezscheme)) (export (import ($l4-A) ($l4-B)))) + (equal? '(1 2) (let () (import ($l4-C)) (list a b)))) ) (mat library2 @@ -8457,7 +8487,7 @@ "inside testfile-a3-9\n") (equal? (with-output-to-string (lambda () (load "testfile-a3-10.so"))) - "outside (testfile-a3-8)\ninside testfile-a3-10\n") + "inside testfile-a3-10\n") ) (mat library4 @@ -8717,6 +8747,468 @@ "revisiting testfile-l6-prog1\n#((10 . 12))\n") ) +(mat library7 + (begin + (mkfile "testfile-l7-a1.ss" + '(library (testfile-l7-a1) (export a-macro a) (import (chezscheme)) (define-syntax a-macro (identifier-syntax 'aaa)) (define (a x) (+ x (* x x))))) + (mkfile "testfile-l7-b1.ss" + '(library (testfile-l7-b1) (export b) (import (chezscheme) (testfile-l7-a1)) (define (b x) (cons 'b a-macro)))) + (mkfile "testfile-l7-c1.ss" + '(library (testfile-l7-c1) (export c) (import (chezscheme) (testfile-l7-a1)) (define (c x) (cons 'c (a x))))) + (mkfile "testfile-l7-d1.ss" + '(library (testfile-l7-d1) (export d) (import (chezscheme) (testfile-l7-a1)) (define (d x) (list 'd a-macro (a x))))) + (separate-compile + '(lambda (x) (for-each compile-library x)) + '(list "testfile-l7-a1" "testfile-l7-b1" "testfile-l7-c1" "testfile-l7-d1")) + #t) + (equal? + (separate-eval + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (begin + (separate-compile + '(lambda (x) (for-each compile-library x)) + '(list "testfile-l7-a1" "testfile-l7-b1" "testfile-l7-c1")) + #t) + (equal? + (separate-eval + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (equal? + (separate-eval + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-d1)) (d 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-b1)) (b 7))) + "(d aaa 56)\n(c . 56)\n(b . aaa)\n") + (error? ; expected different compilation instance + (separate-eval + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) + (error? ; expected different compilation instance + (separate-eval + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) + (equal? + (separate-eval + '(load-library "testfile-l7-b1.ss") + '(let () (import (testfile-l7-b1)) (b 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-c1)) (c 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (error? ; expected different compilation instance + (separate-eval + '(load-library "testfile-l7-b1.ss") + '(load-library "testfile-l7-c1.ss") + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) + (begin + (delete-file "testfile-l7-a1.so") + #t) + (equal? + (separate-eval + '(parameterize ([compile-imported-libraries #t]) (compile-library "testfile-l7-b1.ss")) + '(let () (import (testfile-l7-b1)) (b 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-d1)) (d 7))) + "compiling testfile-l7-b1.ss with output to testfile-l7-b1.so\ncompiling testfile-l7-a1.ss with output to testfile-l7-a1.so\n(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (begin + (delete-file "testfile-l7-a1.so") + #t) + (error? ; expected different compilation instance + (separate-eval + '(parameterize ([compile-imported-libraries #t]) (compile-library "testfile-l7-b1.ss")) + '(load-library "testfile-l7-c1.so") + '(let () (import (testfile-l7-c1)) (c 7)))) + (equal? + (separate-eval + '(library (testfile-l7-a1) (export a-macro a) (import (chezscheme)) (define-syntax a-macro (identifier-syntax 'aaa2)) (define (a x) (* x 11))) + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa2)\n(c . 77)\n(d aaa2 77)\n") + (error? ; expected different compilation instance + (separate-eval + '(library (testfile-l7-a1) (export a-macro a) (import (chezscheme)) (define-syntax a-macro (identifier-syntax 'aaa2)) (define (a x) (* x 11))) + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) +) + +(mat library-regression + ; test that failing invoke code does not result in cyclic dependency problem on re-run + (equal? + (separate-eval + '(begin + (library (invoke-fail) + (export x) + (import (chezscheme)) + (define x #f) + (error #f "failed to load library (invoke-fail)")) + (guard (e [else + (guard (e2 [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval 'x (environment '(chezscheme) '(invoke-fail))))]) + (eval 'x (environment '(chezscheme) '(invoke-fail)))))) + "Exception: failed to load library (invoke-fail)\nException: failed to load library (invoke-fail)\n") + + ; test that true cyclic dependency will always report the same thing + (equal? + (separate-eval + '(begin + (library (invoke-cyclic) + (export x y) + (import (chezscheme)) + (define x #f) + (define y (eval '(if x 5 10) (environment '(chezscheme) '(invoke-cyclic))))) + (guard (e [else + (guard (e2 [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval 'x (environment '(chezscheme) '(invoke-cyclic))))]) + (eval 'x (environment '(chezscheme) '(invoke-cyclic)))))) + "Exception: cyclic dependency involving invocation of library (invoke-cyclic)\nException: cyclic dependency involving invocation of library (invoke-cyclic)\n") + + (begin + ; library to help make it easier to cause a failure in the visit-code that + ; does not lead to failure during compilation of the file. + (with-output-to-file "testfile-lr-l1.ss" + (lambda () + (pretty-print + '(library (testfile-lr-l1) + (export make-it-fail) + (import (chezscheme)) + (define make-it-fail (make-parameter #f (lambda (x) (and x #t))))))) + 'replace) + ; simple test to define one macro and potentially to raise an error when + ; defining the second one. + (with-output-to-file "testfile-lr-l2.ss" + (lambda () + (pretty-print + '(library (testfile-lr-l2) + (export M1 M2) + (import (chezscheme) (testfile-lr-l1)) + (define-syntax M1 + (identifier-syntax #f)) + + (define-syntax M2 + (if (make-it-fail) + (error 'M2 "user requested failure with (make-it-fail) parameter") + (lambda (x) + (syntax-case x () + [(_ expr) #'expr]))))))) + 'replace) + ; more complete test that attempts to create the various types of things + ; that can be defined in visit code so that we can verify things are being + ; properly reset. + (with-output-to-file "testfile-lr-l3.ss" + (lambda () + (pretty-print + '(library (testfile-lr-l3) + (export a b c d e f g h) + (import (chezscheme) (testfile-lr-l1)) + + (module a (x) (define x 5)) + (alias b cons) + (define-syntax c (make-compile-time-value 5)) + (define d 5) + (meta define e 5) + (define-syntax f (identifier-syntax #f)) + (define $g (make-parameter #f)) + (define-syntax g + (make-variable-transformer + (lambda (x) + (syntax-case x () + [(set! _ v) #'($g v)] + [_ #'($g)] + [(_ e* ...) #'(($g) e* ...)])))) + (define-property f g 10) + (define-syntax h + (if (make-it-fail) + (error 'h "user requested failure with (make-it-fail) parameter") + (lambda (x) + (syntax-case x () + [(_ expr) #'expr]))))))) + 'replace) + (separate-compile + '(lambda (x) + (parameterize ([compile-imported-libraries #t]) + (for-each compile-library x))) + '(list "testfile-lr-l1" "testfile-lr-l2" "testfile-lr-l3")) + #t) + + (equal? + (separate-eval + '(begin + (import (testfile-lr-l2) (testfile-lr-l1)) + (make-it-fail #t) + (guard (e [else + (guard (e2 + [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval 'M1 (environment '(testfile-lr-l2))))]) + (eval 'M1 (environment '(testfile-lr-l2)))))) + "Exception in M2: user requested failure with (make-it-fail) parameter\nException in M2: user requested failure with (make-it-fail) parameter\n") + + ; module is defined as part of import code, run time bindings are setup as part of invoke code + (equal? + (separate-eval + '(begin + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (import a) + x)) + "5\n") + + ; alias is part of module binding ribcage, set up by import code + (equal? + (separate-eval + '(begin + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (b 'a 'b))) + "(a . b)\n") + + ; compile-time-value is set in visit code, should show same error each time it is referenced + (equal? + (separate-eval + '(begin + (library (lookup) + (export lookup) + (import (chezscheme)) + (define-syntax lookup + (lambda (x) + (syntax-case x () + [(_ id) (lambda (rho) #`'#,(rho #'id))] + [(_ id key) (lambda (rho) #`'#,(rho #'id #'key))])))) + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (guard (e [else + (guard (e2 + [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval '(lookup c) (environment '(testfile-lr-l3) '(lookup))))]) + (eval '(lookup c) (environment '(testfile-lr-l3) '(lookup)))))) + "Exception in h: user requested failure with (make-it-fail) parameter\nException in h: user requested failure with (make-it-fail) parameter\n") + + ; defines are set up as part of invoke code + (equal? + (separate-eval + '(begin + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + d)) + "5\n") + + ; meta defines are set up as part of visit code + (equal? + (separate-eval + '(begin + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (guard (e [else + (guard (e2 + [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval '(let () + (define-syntax get-e + (lambda (x) + (syntax-case x () + [(_) #`'#,e]))) + (get-e)) + (environment '(chezscheme) '(testfile-lr-l3))))]) + (eval '(let () + (define-syntax get-e + (lambda (x) + (syntax-case x () + [(_) #`'#,e]))) + (get-e)) + (environment '(chezscheme) '(testfile-lr-l3)))))) + "Exception in h: user requested failure with (make-it-fail) parameter\nException in h: user requested failure with (make-it-fail) parameter\n") + + ; macros are set up as part of visit code + (equal? + (separate-eval + '(begin + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (guard (e [else + (guard (e2 + [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval 'f (environment '(testfile-lr-l3))))]) + (eval 'f (environment '(testfile-lr-l3)))))) + "Exception in h: user requested failure with (make-it-fail) parameter\nException in h: user requested failure with (make-it-fail) parameter\n") + + ; variable transformer macros are set up as part of visit code + (equal? + (separate-eval + '(begin + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (guard (e [else + (guard (e2 + [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval 'g (environment '(testfile-lr-l3))))]) + (eval 'g (environment '(testfile-lr-l3)))))) + "Exception in h: user requested failure with (make-it-fail) parameter\nException in h: user requested failure with (make-it-fail) parameter\n") + + ; properties are setup as part of visit code. + (equal? + (separate-eval + '(begin + (library (lookup) + (export lookup) + (import (chezscheme)) + (define-syntax lookup + (lambda (x) + (syntax-case x () + [(_ id) (lambda (rho) #`'#,(rho #'id))] + [(_ id key) (lambda (rho) #`'#,(rho #'id #'key))])))) + (import (testfile-lr-l3) (testfile-lr-l1)) + (make-it-fail #t) + (guard (e [else + (guard (e2 + [else + (display-condition e) (newline) + (display-condition e2) (newline)]) + (eval '(lookup f g) (environment '(testfile-lr-l3) '(lookup))))]) + (eval '(lookup f g) (environment '(testfile-lr-l3) '(lookup)))))) + "Exception in h: user requested failure with (make-it-fail) parameter\nException in h: user requested failure with (make-it-fail) parameter\n") + + ;; re-arm import code if it complains about a library that is not visible + (begin + (with-output-to-file "testfile-lr-l4.ss" + (lambda () + (pretty-print + '(library (testfile-lr-l4) + (export x) + (import (chezscheme)) + (define x 123)))) + 'replace) + (with-output-to-file "testfile-lr-p4.ss" + (lambda () + (for-each pretty-print + '((import (testfile-lr-l4) (scheme)) + (define (run args) + (guard (c [#t (display-condition c) (newline)]) + (pretty-print (top-level-value (car args) (environment (cdr args)))))) + (when (> x 0) ;; reference export + (let ([args (map string->symbol (command-line-arguments))]) + (if (= (length args) 2) + (begin + (run args) + (run args)) + (error #f "expected 2 args"))))))) + 'replace) + (separate-eval + '(parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (compile-program "testfile-lr-p4.ss") + (compile-whole-program "testfile-lr-p4.wpo" "testfile-lr-p4-visible" #t) + (compile-whole-program "testfile-lr-p4.wpo" "testfile-lr-p4-not-visible" #f))) + (equal? + (separate-eval + '(parameterize ([command-line-arguments '("x" "testfile-lr-l4")]) + (load-program "testfile-lr-p4-visible") + (load-program "testfile-lr-p4-not-visible"))) + (string-append + "123\n" + "123\n" + "Exception in environment: attempt to import invisible library (testfile-lr-l4)\n" + "Exception in environment: attempt to import invisible library (testfile-lr-l4)\n")))) + +(mat invoke-library + (error? ; invalid library reference + (invoke-library '(testfile-il1 (<= 3)))) + (error? ; invalid library reference + (invoke-library '(testfile-il1 (what?)))) + (error? ; invalid library reference + (invoke-library '())) + (error? ; invalid library reference + (invoke-library 'hello)) + (error? ; invalid library reference + (invoke-library '(3 2 1))) + (begin + (mkfile "testfile-il1.ss" + '(library (testfile-il1 (2)) (export a) (import (chezscheme)) (define a 3) (printf "invoked (testfile-il1)\n"))) + #t) + (equal? + (separate-eval + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\n3\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1)) + '(printf "hello\n") + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\nhello\n3\n") + (equal? + (separate-eval + '(let () (import (testfile-il1)) a) + '(printf "hello\n") + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n3\nhello\n") + (begin + (separate-eval '(compile-library "testfile-il1")) + #t) + (delete-file "testfile-il1.ss") + (equal? + (separate-eval + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\n3\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1)) + '(printf "hello\n") + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\nhello\n3\n") + (equal? + (separate-eval + '(let () (import (testfile-il1)) a) + '(printf "hello\n") + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n3\nhello\n") + (error? ; version mismatch + (separate-eval '(invoke-library '(testfile-il1 (3))))) + (error? ; version mismatch + (separate-eval + '(invoke-library '(testfile-il1 ((>= 3)))))) + (equal? + (separate-eval + '(invoke-library '(testfile-il1 ((>= 2))))) + "invoked (testfile-il1)\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1 (2)))) + "invoked (testfile-il1)\n") +) + (mat cross-library-optimization (begin (with-output-to-file "testfile-clo-1a.ss" @@ -9249,6 +9741,16 @@ ) (mat library-directories + (error? ; invalid argument + (library-directories '("a" . hello))) + (error? ; invalid argument + (library-directories '("a" . ("src" . "obj")))) + (error? ; invalid argument + (library-directories '("a" . (("src"))))) + (error? ; invalid argument + (library-directories '("a" . (("src" "obj"))))) + (error? ; invalid argument + (library-directories '("a" . ((("src" "obj")))))) (let ([x (library-directories)]) (and (list? x) (andmap (lambda (x) (and (pair? x) (string? (car x)) (string? (cdr x)))) x))) @@ -9288,6 +9790,14 @@ ) (mat library-extensions + (error? ; invalid argument + (library-extensions '.a1.sls)) + (error? ; invalid argument + (library-extensions '((".foo")))) + (error? ; invalid argument + (library-extensions '((".foo" ".bar")))) + (error? ; invalid argument + (library-extensions '(((".junk"))))) (let ([x (library-extensions)]) (and (list? x) (andmap (lambda (x) (and (pair? x) (string? (car x)) (string? (cdr x)))) x))) @@ -9310,6 +9820,144 @@ (equal? (library-extensions) `(,@'((".a1.sls" . ".a1.so") (".boo" . ".booso") (".crud" . ".junk")) ,@default))))) ) +(mat library-search-handler + (procedure? (library-search-handler)) + (eq? (library-search-handler) default-library-search-handler) + (error? (default-library-search-handler "not-symbol" '(lib) '() '())) + (error? (default-library-search-handler 'import 'bad-library-name '() '())) + (error? (default-library-search-handler 'import '(lib) '(("invalid" "path" "list")) '())) + (error? (default-library-search-handler 'import '(lib) '(("foo" . "bar")) '(("bad") ("extensions")))) + (error? + (parameterize ([library-search-handler + (lambda (who path dir* all-ext*) + (values '(bad source path) #f #f))]) + (eval '(import (foo))))) + (error? + (parameterize ([library-search-handler + (lambda (who path dir* all-ext*) + (values #f '(bad object path) #f))]) + (eval '(import (foo))))) + (error? + (parameterize ([library-search-handler + (lambda (who path dir* all-ext*) + (values #f #f #t))]) + (eval '(import (foo))))) + (begin + (mkdir "lsh-testdir") + (mkdir "lsh-testdir/src1") + (mkdir "lsh-testdir/src2") + (mkdir "lsh-testdir/obj") + #t) + (begin + (with-output-to-file "lsh-testdir/src1/lib.ss" + (lambda () + (pretty-print + '(library (lib) (export a) (import (scheme)) + (define a "src1 provided this a")))) + 'replace) + (with-output-to-file "lsh-testdir/src2/lib.ss" + (lambda () + (pretty-print + '(library (lib) (export a) (import (scheme)) + (define a "a from src2")))) + 'replace) + (with-output-to-file "lsh-testdir/src2/foo.ss" + (lambda () + (pretty-print + '(library (foo) (export a) (import (scheme) (lib))))) + 'replace) + (parameterize ([generate-wpo-files #t] + [compile-imported-libraries #t] + [library-directories '(("src2" . "obj"))]) + (compile-file "lsh-testdir/src2/lib.ss" "lsh-testdir/obj/lib.so") + (compile-file "lsh-testdir/src2/foo.ss" "lsh-testdir/obj/foo.so")) + #t) + (equal? + "a from src2\n" + (separate-eval + '(cd "lsh-testdir") + '(library-extensions '((".ss" . ".so"))) + '(library-directories '(("src2" . "obj") ("src1" . "obj"))) + '(library-search-handler + (lambda (who path dir* all-ext*) + (let-values ([(src-path obj-path obj-exists?) + (default-library-search-handler who path dir* all-ext*)]) + (assert (equal? src-path "src2/lib.ss")) + (assert (equal? obj-path "obj/lib.so")) + (assert obj-exists?) + (values src-path obj-path obj-exists?)))) + '(printf "~a\n" (let () (import (lib)) a)))) + (equal? + "src1 provided this a\n" + (separate-eval + '(cd "lsh-testdir") + '(library-extensions '((".ss" . ".so"))) + '(library-directories '(("src2" . "obj") ("src1" . "obj"))) + '(library-search-handler + (lambda (who path dir* all-ext*) + (assert (eq? who 'import)) + (assert (equal? path '(lib))) + (assert (equal? dir* (library-directories))) + (assert (equal? all-ext* (library-extensions))) + ;; switcheroo + (values "src1/lib.ss" #f #f))) + '(printf "~a\n" (let () (import (lib)) a)))) + (equal? + (string-append + "compiling src1/lib.ss with output to obj/lib-compiled.so\n" + "src1 provided this a\n") + (separate-eval + '(cd "lsh-testdir") + '(compile-imported-libraries #t) + '(library-search-handler + (lambda (who path dir* all-ext*) + (values "src1/lib.ss" "obj/lib-compiled.so" #f))) + '(printf "~a\n" (let () (import (lib)) a)))) + ;; the default library-search-handler finds obj/lib.wpo + ;; so no libraries are needed at run time + (equal? + "()\n" + (separate-eval + '(cd "lsh-testdir") + '(library-extensions '((".ss" . ".so"))) + '(library-directories '(("src1" . "obj") ("src2" . "obj"))) + '(compile-whole-library "obj/foo.wpo" "foo.library"))) + (equal? + "((lib))\n" + (separate-eval + '(cd "lsh-testdir") + '(library-extensions '((".ss" . ".so"))) + '(library-directories '(("src1" . "obj") ("src2" . "obj"))) + '(define (check who path dir*) + (assert (eq? who 'compile-whole-library)) + (assert (equal? path '(lib))) + (assert (equal? dir* (library-directories)))) + '(library-search-handler + (lambda (who path dir* all-ext*) + (check who path dir*) + (assert (equal? all-ext* '((".ss" . ".wpo")))) + ;; default search finds the wpo file, but ... + (let-values ([(src-path obj-path obj-exists?) + (default-library-search-handler who path dir* all-ext*)]) + ;; user reordered library-directories since compiling the wpo file + (assert (equal? src-path "src1/lib.ss")) + (assert (equal? obj-path "obj/lib.wpo")) + (assert obj-exists?)) + ;; ... we install a new handler that returns the object file instead + (library-search-handler + (lambda (who path dir* all-ext*) + (check who path dir*) + (assert (equal? all-ext* (library-extensions))) + (values #f "obj/lib.so" #t))) + ;; ... and report no .wpo file found so we fall back to the + ;; library-search-handler just installed + (values #f #f #f))) + '(compile-whole-library "obj/foo.wpo" "foo.library"))) + (begin + (rm-rf "lsh-testdir") + #t) +) + (mat compile-imported-libraries (not (compile-imported-libraries)) (begin @@ -9924,7 +10572,7 @@ (parameterize ([console-output-port (open-output-string)]) (eval '(lambda () (import (testfile-imno2)) y)) (get-output-string (console-output-port))) - "import: did not find source file \"testfile-imno2.chezscheme.sls\"\nimport: found source file \"testfile-imno2.ss\"\nimport: did not find corresponding object file \"testfile-imno2.so\"\nimport: loading source file \"testfile-imno2.ss\"\nimport: did not find source file \"testfile-imno1.chezscheme.sls\"\nimport: found source file \"testfile-imno1.ss\"\nimport: found corresponding object file \"testfile-imno1.so\"\nimport: object file is not older\nimport: loading object file \"testfile-imno1.so\"\n") + "import: did not find source file \"testfile-imno2.chezscheme.sls\"\nimport: found source file \"testfile-imno2.ss\"\nimport: did not find corresponding object file \"testfile-imno2.so\"\nimport: loading source file \"testfile-imno2.ss\"\nimport: did not find source file \"testfile-imno1.chezscheme.sls\"\nimport: found source file \"testfile-imno1.ss\"\nimport: found corresponding object file \"testfile-imno1.so\"\nimport: object file is not older\nimport: visiting object file \"testfile-imno1.so\"\nattempting to 'revisit' previously 'visited' \"testfile-imno1.so\" for library (testfile-imno1) run-time info\n") (eq? (import-notify #f) (void)) ) @@ -10258,6 +10906,18 @@ (remprop 'tlp-spam 'spam) (remprop 'tlp-spam 'tlp) #t)) + ; make sure we ignore return value(s) of interleaved init expressions + (equal? + (with-output-to-string + (lambda () + ; prevent cp0 from fixing the problem + (parameterize ([run-cp0 (lambda (f x) x)]) + (eval '(top-level-program (import (scheme)) + (define (f) (printf "hello\n") (values 1 2 3)) + (f) + (define x 'world) + (pretty-print x)))))) + "hello\nworld\n") ) (mat library-meta @@ -11093,18 +11753,22 @@ (lambda () (pretty-print (make-expr n))) 'truncate) - (let ([start (current-time)]) - (load "testfile.ss") - (let ([delta (time-difference (current-time) start)]) - (+ (time-second delta) - (* 1e-9 (time-nanosecond delta)))))) + (collect) + (parameterize ([collect-request-handler void]) + (let ([start (current-time)]) + (load "testfile.ss" expand) + (let ([delta (time-difference (current-time) start)]) + (+ (* #e1e9 (time-second delta)) + (time-nanosecond delta)))))) (let loop ([tries 3]) (when (zero? tries) (error 'source-cache-test "loading lots of `let-values` forms seems to take too long")) - (or (> (* 20 (time-expr 100)) - (time-expr 1000)) - (loop (sub1 tries))))) + (let ([t1000 (time-expr 1000)] [t10000 (time-expr 10000)]) + (or (> (* 20 t1000) t10000) + (begin + (printf "t1000 = ~s, t10000 = ~s, t10000 / t1000 = ~s\n" t1000 t10000 (inexact (/ t10000 t1000))) + (loop (sub1 tries))))))) (begin (define sfd-to-cache diff -Nru chezscheme-9.5+dfsg/mats/bytevector.ms chezscheme-9.5.4+dfsg/mats/bytevector.ms --- chezscheme-9.5+dfsg/mats/bytevector.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/bytevector.ms 2020-08-31 02:35:12.000000000 +0000 @@ -111,6 +111,9 @@ (eqv? (bytevector) (make-bytevector (- 4 4) (+ 1 1))) (eqv? (bytevector) (make-bytevector (- 4 4) (+ 1 1))) (equal? (bytevector 1) #vu8(1)) + (equal? (bytevector -1) #vu8(255)) + (equal? (bytevector -1 2) #vu8(255 2)) + (equal? (bytevector 2 -1) #vu8(2 255)) (equal? (letrec-syntax ([z (syntax-rules () [(_) (list (bytevector))] @@ -135,29 +138,76 @@ #vu8(1) #vu8())) (equal? - (let ([a 1] [c 3] [d 4] [e 5] [f 6] [h 8] [k 11] [l 12] [p 16] [q 17]) + (letrec-syntax ([z (syntax-rules () + [(_) (list (bytevector))] + [(_ x ... y) (cons (bytevector x ... y) (z x ...))])]) + (z -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17)) + '(#vu8(255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240 239) + #vu8(255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240) + #vu8(255 254 253 252 251 250 249 248 247 246 245 244 243 242 241) + #vu8(255 254 253 252 251 250 249 248 247 246 245 244 243 242) + #vu8(255 254 253 252 251 250 249 248 247 246 245 244 243) + #vu8(255 254 253 252 251 250 249 248 247 246 245 244) + #vu8(255 254 253 252 251 250 249 248 247 246 245) + #vu8(255 254 253 252 251 250 249 248 247 246) + #vu8(255 254 253 252 251 250 249 248 247) + #vu8(255 254 253 252 251 250 249 248) + #vu8(255 254 253 252 251 250 249) + #vu8(255 254 253 252 251 250) + #vu8(255 254 253 252 251) + #vu8(255 254 253 252) + #vu8(255 254 253) + #vu8(255 254) + #vu8(255) + #vu8())) + (equal? + (let ([a 1] [c -3] [d -4] [e 5] [f 6] [h -8] [k 11] [l -12] [p -16] [q 17]) (letrec-syntax ([z (syntax-rules () [(_) (list (bytevector))] [(_ x ... y) (cons (bytevector x ... y) (z x ...))])]) - (z a 2 c d e f 7 h 9 10 k l 13 14 15 p q))) - '(#vu8(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17) - #vu8(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) - #vu8(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) - #vu8(1 2 3 4 5 6 7 8 9 10 11 12 13 14) - #vu8(1 2 3 4 5 6 7 8 9 10 11 12 13) - #vu8(1 2 3 4 5 6 7 8 9 10 11 12) - #vu8(1 2 3 4 5 6 7 8 9 10 11) - #vu8(1 2 3 4 5 6 7 8 9 10) - #vu8(1 2 3 4 5 6 7 8 9) - #vu8(1 2 3 4 5 6 7 8) - #vu8(1 2 3 4 5 6 7) - #vu8(1 2 3 4 5 6) - #vu8(1 2 3 4 5) - #vu8(1 2 3 4) - #vu8(1 2 3) + (z a 2 c d e f -7 h 9 -10 k l -13 -14 15 p q))) + '(#vu8(1 2 253 252 5 6 249 248 9 246 11 244 243 242 15 240 17) + #vu8(1 2 253 252 5 6 249 248 9 246 11 244 243 242 15 240) + #vu8(1 2 253 252 5 6 249 248 9 246 11 244 243 242 15) + #vu8(1 2 253 252 5 6 249 248 9 246 11 244 243 242) + #vu8(1 2 253 252 5 6 249 248 9 246 11 244 243) + #vu8(1 2 253 252 5 6 249 248 9 246 11 244) + #vu8(1 2 253 252 5 6 249 248 9 246 11) + #vu8(1 2 253 252 5 6 249 248 9 246) + #vu8(1 2 253 252 5 6 249 248 9) + #vu8(1 2 253 252 5 6 249 248) + #vu8(1 2 253 252 5 6 249) + #vu8(1 2 253 252 5 6) + #vu8(1 2 253 252 5) + #vu8(1 2 253 252) + #vu8(1 2 253) #vu8(1 2) #vu8(1) #vu8())) + (equal? + (let ([a -1] [c 3] [d 4] [e -5] [f -6] [h 8] [k -11] [l 12] [p 16] [q -17]) + (letrec-syntax ([z (syntax-rules () + [(_) (list (bytevector))] + [(_ x ... y) (cons (bytevector x ... y) (z x ...))])]) + (z a -2 c d e f 7 h -9 10 k l 13 14 -15 p q))) + '(#vu8(255 254 3 4 251 250 7 8 247 10 245 12 13 14 241 16 239) + #vu8(255 254 3 4 251 250 7 8 247 10 245 12 13 14 241 16) + #vu8(255 254 3 4 251 250 7 8 247 10 245 12 13 14 241) + #vu8(255 254 3 4 251 250 7 8 247 10 245 12 13 14) + #vu8(255 254 3 4 251 250 7 8 247 10 245 12 13) + #vu8(255 254 3 4 251 250 7 8 247 10 245 12) + #vu8(255 254 3 4 251 250 7 8 247 10 245) + #vu8(255 254 3 4 251 250 7 8 247 10) + #vu8(255 254 3 4 251 250 7 8 247) + #vu8(255 254 3 4 251 250 7 8) + #vu8(255 254 3 4 251 250 7) + #vu8(255 254 3 4 251 250) + #vu8(255 254 3 4 251) + #vu8(255 254 3 4) + #vu8(255 254 3) + #vu8(255 254) + #vu8(255) + #vu8())) (equal? (apply bytevector (make-list 20000 #xc7)) (u8-list->bytevector (make-list 20000 #xc7))) (let ([n0 1] [n1 -2] [n4 5]) @@ -175,6 +225,187 @@ (eqv? (bytevector-u8-ref x 3) 252) (eqv? (bytevector-s8-ref x 4) 5) (eqv? (bytevector-u8-ref x 4) 5)))) + (begin + (define $bv-f + (lambda (a b c d e f g h i j k l m n o p q r s t u v w x y z) + (letrec-syntax ([foo (syntax-rules () + [(_) (list (bytevector))] + [(_ x ... y) (cons (bytevector x ... y) (foo x ...))])]) + (foo a b c d e f g h i j k l m n o p q r s t u v w x y z)))) + #t) + (equal? + ($bv-f 101 -102 103 -104 -105 106 107 -108 -109 -110 111 112 113 114 -115 -116 -117 -118 119 120 121 -122 -123 124 -125 126) + '(#vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131 126) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112) + #vu8(101 154 103 152 151 106 107 148 147 146 111) + #vu8(101 154 103 152 151 106 107 148 147 146) + #vu8(101 154 103 152 151 106 107 148 147) + #vu8(101 154 103 152 151 106 107 148) + #vu8(101 154 103 152 151 106 107) + #vu8(101 154 103 152 151 106) + #vu8(101 154 103 152 151) + #vu8(101 154 103 152) + #vu8(101 154 103) + #vu8(101 154) + #vu8(101) + #vu8())) + (begin + (define $bv-g + (lambda (a c e g i k m o q s u w y) + (letrec-syntax ([foo (syntax-rules () + [(_) (list (bytevector))] + [(_ x ... y) (cons (bytevector x ... y) (foo x ...))])]) + (foo a -102 c -104 e 106 g -108 i -110 k 112 m 114 o -116 q -118 s 120 u -122 w 124 y 126)))) + #t) + (equal? + ($bv-g 101 103 -105 107 -109 111 113 -115 -117 119 121 -123 -125) + '(#vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131 126) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112) + #vu8(101 154 103 152 151 106 107 148 147 146 111) + #vu8(101 154 103 152 151 106 107 148 147 146) + #vu8(101 154 103 152 151 106 107 148 147) + #vu8(101 154 103 152 151 106 107 148) + #vu8(101 154 103 152 151 106 107) + #vu8(101 154 103 152 151 106) + #vu8(101 154 103 152 151) + #vu8(101 154 103 152) + #vu8(101 154 103) + #vu8(101 154) + #vu8(101) + #vu8())) + (begin + (define $bv-h + (lambda (b d f h j l n p r t v x z) + (letrec-syntax ([foo (syntax-rules () + [(_) (list (bytevector))] + [(_ x ... y) (cons (bytevector x ... y) (foo x ...))])]) + (foo 101 b 103 d -105 f 107 h -109 j 111 l 113 n -115 p -117 r 119 t 121 v -123 x -125 z)))) + #t) + (equal? + ($bv-h -102 -104 106 -108 -110 112 114 -116 -118 120 -122 124 126) + '(#vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131 126) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112) + #vu8(101 154 103 152 151 106 107 148 147 146 111) + #vu8(101 154 103 152 151 106 107 148 147 146) + #vu8(101 154 103 152 151 106 107 148 147) + #vu8(101 154 103 152 151 106 107 148) + #vu8(101 154 103 152 151 106 107) + #vu8(101 154 103 152 151 106) + #vu8(101 154 103 152 151) + #vu8(101 154 103 152) + #vu8(101 154 103) + #vu8(101 154) + #vu8(101) + #vu8())) + (begin + (define $bv-i-ls* '()) + (define $bv-i + (lambda (b d f h j l n p r t v x z) + (define this) + (define (init!) (set! $bv-i-ls* (cons '() $bv-i-ls*)) (set! this 0)) + (define (bump!) (set! this (fx+ this 1)) (set-car! $bv-i-ls* (cons this (car $bv-i-ls*)))) + (define-syntax plink (syntax-rules () [(_ x) (begin (bump!) x)])) + (letrec-syntax ([foo (syntax-rules () + [(_) (list (bytevector))] + [(_ x ... y) (cons (begin (init!) (bytevector (plink x) ... (plink y))) (foo x ...))])]) + (foo 101 b 103 d -105 f 107 h -109 j 111 l 113 n -115 p -117 r 119 t 121 v -123 x -125 z)))) + #t) + (equal? + ($bv-i -102 -104 106 -108 -110 112 114 -116 -118 120 -122 124 126) + '(#vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131 126) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124 131) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133 124) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134 133) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121 134) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120 121) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119 120) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138 119) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139 138) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140 139) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141 140) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114 141) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113 114) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112 113) + #vu8(101 154 103 152 151 106 107 148 147 146 111 112) + #vu8(101 154 103 152 151 106 107 148 147 146 111) + #vu8(101 154 103 152 151 106 107 148 147 146) + #vu8(101 154 103 152 151 106 107 148 147) + #vu8(101 154 103 152 151 106 107 148) + #vu8(101 154 103 152 151 106 107) + #vu8(101 154 103 152 151 106) + #vu8(101 154 103 152 151) + #vu8(101 154 103 152) + #vu8(101 154 103) + #vu8(101 154) + #vu8(101) + #vu8())) + (equal? + (sort (lambda (ls1 ls2) (fx<= (length ls1) (length ls2))) $bv-i-ls*) + '((1) + (2 1) + (3 2 1) + (4 3 2 1) + (5 4 3 2 1) + (6 5 4 3 2 1) + (7 6 5 4 3 2 1) + (8 7 6 5 4 3 2 1) + (9 8 7 6 5 4 3 2 1) + (10 9 8 7 6 5 4 3 2 1) + (11 10 9 8 7 6 5 4 3 2 1) + (12 11 10 9 8 7 6 5 4 3 2 1) + (13 12 11 10 9 8 7 6 5 4 3 2 1) + (14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) + (26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1))) ) (mat bytevector-syntax @@ -203,19 +434,33 @@ ) (mat $bytevector-ref-check? - (let ([bv (make-bytevector 3)] [not-bv (make-fxvector 3)]) + (let ([bv (make-bytevector 3)] [imm-bv (bytevector->immutable-bytevector (make-bytevector 3))] [not-bv (make-fxvector 3)]) (let ([i-1 -1] [i0 0] [i1 1] [i2 2] [i3 3] [ifalse #f] [ibig (+ (most-positive-fixnum) 1)]) (and (not (#%$bytevector-ref-check? 8 not-bv i0)) (not (#%$bytevector-ref-check? 8 bv ifalse)) (not (#%$bytevector-ref-check? 8 bv i-1)) + (not (#%$bytevector-ref-check? 8 imm-bv i-1)) + (#%$bytevector-ref-check? 8 bv 0) + (#%$bytevector-ref-check? 8 bv 1) + (#%$bytevector-ref-check? 8 bv 2) + (#%$bytevector-ref-check? 8 imm-bv 0) + (#%$bytevector-ref-check? 8 imm-bv 1) + (#%$bytevector-ref-check? 8 imm-bv 2) (#%$bytevector-ref-check? 8 bv i0) (#%$bytevector-ref-check? 8 bv i1) (#%$bytevector-ref-check? 8 bv i2) + (#%$bytevector-ref-check? 8 imm-bv i0) + (#%$bytevector-ref-check? 8 imm-bv i1) + (#%$bytevector-ref-check? 8 imm-bv i2) + (not (#%$bytevector-ref-check? 8 bv 3)) (not (#%$bytevector-ref-check? 8 bv i3)) - (not (#%$bytevector-ref-check? 8 bv ibig))))) + (not (#%$bytevector-ref-check? 8 bv ibig)) + (not (#%$bytevector-ref-check? 8 imm-bv 3)) + (not (#%$bytevector-ref-check? 8 imm-bv i3)) + (not (#%$bytevector-ref-check? 8 imm-bv ibig))))) (let ([n 128]) - (let ([bv (make-bytevector n)] [not-bv (make-fxvector n)]) + (let ([bv (make-bytevector n)] [imm-bv (bytevector->immutable-bytevector (make-bytevector n))] [not-bv (make-fxvector n)]) (and (let ([i 0]) (and (not (#%$bytevector-ref-check? 8 not-bv i)) @@ -228,30 +473,48 @@ (not (#%$bytevector-ref-check? 16 bv i)) (not (#%$bytevector-ref-check? 32 bv i)) (not (#%$bytevector-ref-check? 64 bv i)) + (not (#%$bytevector-ref-check? 8 imm-bv i)) + (not (#%$bytevector-ref-check? 16 imm-bv i)) + (not (#%$bytevector-ref-check? 32 imm-bv i)) + (not (#%$bytevector-ref-check? 64 imm-bv i)) (f (fx* i 2))))) (let f ([i 0]) (or (fx= i n) (and (#%$bytevector-ref-check? 8 bv i) (if (and (fx= (modulo i 2) 0) (fx<= (fx+ i 2) n)) - (#%$bytevector-ref-check? 16 bv i) - (not (#%$bytevector-ref-check? 16 bv i))) + (and (#%$bytevector-ref-check? 16 bv i) + (#%$bytevector-ref-check? 16 imm-bv i)) + (not (or (#%$bytevector-ref-check? 16 bv i) + (#%$bytevector-ref-check? 16 imm-bv i)))) (if (and (fx= (modulo i 4) 0) (fx<= (fx+ i 4) n)) - (#%$bytevector-ref-check? 32 bv i) - (not (#%$bytevector-ref-check? 32 bv i))) + (and (#%$bytevector-ref-check? 32 bv i) + (#%$bytevector-ref-check? 32 imm-bv i)) + (not (or (#%$bytevector-ref-check? 32 bv i) + (#%$bytevector-ref-check? 32 imm-bv i)))) (if (and (fx= (modulo i 8) 0) (fx<= (fx+ i 8) n)) - (#%$bytevector-ref-check? 64 bv i) - (not (#%$bytevector-ref-check? 64 bv i))) + (and (#%$bytevector-ref-check? 64 bv i) + (#%$bytevector-ref-check? 64 imm-bv i)) + (not (or (#%$bytevector-ref-check? 64 bv i) + (#%$bytevector-ref-check? 64 imm-bv i)))) (f (fx+ i 1))))) (let ([i n]) - (not (#%$bytevector-ref-check? 8 bv i)) - (not (#%$bytevector-ref-check? 16 bv i)) - (not (#%$bytevector-ref-check? 32 bv i)) - (not (#%$bytevector-ref-check? 64 bv i))) + (and (not (#%$bytevector-ref-check? 8 bv i)) + (not (#%$bytevector-ref-check? 16 bv i)) + (not (#%$bytevector-ref-check? 32 bv i)) + (not (#%$bytevector-ref-check? 64 bv i)) + (not (#%$bytevector-ref-check? 8 imm-bv i)) + (not (#%$bytevector-ref-check? 16 imm-bv i)) + (not (#%$bytevector-ref-check? 32 imm-bv i)) + (not (#%$bytevector-ref-check? 64 imm-bv i)))) (let ([i (+ (most-positive-fixnum) 1)]) - (not (#%$bytevector-ref-check? 8 bv i)) - (not (#%$bytevector-ref-check? 16 bv i)) - (not (#%$bytevector-ref-check? 32 bv i)) - (not (#%$bytevector-ref-check? 64 bv i)))))) + (and (not (#%$bytevector-ref-check? 8 bv i)) + (not (#%$bytevector-ref-check? 16 bv i)) + (not (#%$bytevector-ref-check? 32 bv i)) + (not (#%$bytevector-ref-check? 64 bv i)) + (not (#%$bytevector-ref-check? 8 imm-bv i)) + (not (#%$bytevector-ref-check? 16 imm-bv i)) + (not (#%$bytevector-ref-check? 32 imm-bv i)) + (not (#%$bytevector-ref-check? 64 imm-bv i))))))) ) (mat bytevector-s8-ref @@ -11012,16 +11275,17 @@ (number? (bytevector-ieee-double-native-ref immutable-100-bytevector 0)) ) - (mat bytevector-compress + (parameters [compress-format 'gzip 'lz4] [compress-level 'minimum 'low 'medium 'high 'maximum]) (error? (bytevector-compress 7)) (error? (bytevector-compress "hello")) (error? (bytevector-uncompress 7)) (error? (bytevector-uncompress "hello")) (begin (define (round-trip-bytevector-compress bv) - (equal? (bytevector-uncompress (bytevector-compress bv)) - bv)) + (and + (equal? (#%$bytevector-uncompress (#%$bytevector-compress bv 0) (bytevector-length bv) 0) bv) + (equal? (bytevector-uncompress (bytevector-compress bv)) bv))) (round-trip-bytevector-compress (string->utf8 "hello"))) (round-trip-bytevector-compress '#vu8()) (round-trip-bytevector-compress (apply bytevector @@ -11030,6 +11294,8 @@ '() (cons (bitwise-and i 255) (loop (+ i 1))))))) + (round-trip-bytevector-compress + (call-with-port (open-file-input-port "prettytest.ss") get-bytevector-all)) (error? ;; Need at least 8 bytes for result size (bytevector-uncompress '#vu8())) @@ -11037,19 +11303,6 @@ ;; Need at least 8 bytes for result size (bytevector-uncompress '#vu8(0 0 0 0 0 0 255))) (error? - ;; Fail if the uncompressed result is too big - (bytevector-uncompress (let ([bv (bytevector-compress (string->utf8 "hello"))]) - (bytevector-u64-set! bv 0 (sub1 (bytevector-u64-ref bv 0 (endianness big))) (endianness big)) - bv))) - (error? - ;; Fail if the uncompressed result is too small - (bytevector-uncompress (let ([bv (bytevector-compress (string->utf8 "hello"))]) - (bytevector-u64-set! bv 0 (add1 (bytevector-u64-ref bv 0 (endianness big))) (endianness big)) - bv))) - (error? - ;; Compressed data always starts with 0x78, so this one isn't valid: - (bytevector-uncompress '#vu8(0 0 0 0 0 0 0 255 1 2 3))) - (error? ;; Claming a too-large size in the header should fail with a suitable message: (bytevector-uncompress '#vu8(255 255 255 255 255 255 255 255 1 2 3))) ) diff -Nru chezscheme-9.5+dfsg/mats/cp0.ms chezscheme-9.5.4+dfsg/mats/cp0.ms --- chezscheme-9.5+dfsg/mats/cp0.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/cp0.ms 2020-08-31 02:35:12.000000000 +0000 @@ -367,6 +367,21 @@ (begin (b) (c))) (x) (y)))) + (error? (apply zero? 0)) + (error? (if (apply eof-object 1 2) 3 4)) + ; test for folding of multiple-value primitives + (equivalent-expansion? + (expand/optimize '(lambda () (div-and-mod 7 3))) + '(lambda () (#3%values 2 1))) + (equivalent-expansion? + (expand/optimize '(lambda () (exact-integer-sqrt 19))) + '(lambda () (#3%values 4 3))) + (equivalent-expansion? + (expand/optimize + '(call-with-values + (lambda () (div-and-mod 7 3)) + (lambda (x y) (#2%cons (* x 10) (/ y 10))))) + '(#2%cons 20 1/10)) ) (cp0-mat cp0-mrvs @@ -663,6 +678,25 @@ (test-cp0-expansion `(#3%apply #3%apply #3%+ '(1 (2 3 4))) 10) + (test-cp0-expansion + `(apply apply apply + 1 '(2 3 (4 5 (6 7)))) + 28) + (test-cp0-expansion + `(let ([f apply]) (f f f * 1 '(2 3 (4 5 (6))))) + 720) + (test-cp0-expansion + `(lambda (x) (apply (lambda (prim ls) (apply prim ls)) zero? (list x))) + (if (eqv? (optimize-level) 3) + '(lambda (x) (#3%apply #3%zero? x)) + '(lambda (x) (#2%apply #2%zero? x)))) + (test-cp0-expansion + `(apply (lambda (prim ls) (apply prim ls)) zero? (list (cons 0 '()))) + #t) + (test-cp0-expansion + `(apply (lambda (prim ls) (apply prim ls)) zero? (cons 0 '())) + (if (eqv? (optimize-level) 3) + '(#3%apply #3%zero? 0) + '(#2%apply #2%zero? 0))) ) (mat expand/optimize @@ -855,7 +889,7 @@ 'a) ; verify optimization of or pattern (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2] [compile-profile #f]) (expand/optimize '(lambda (x y) (if (not (or (fx< x y) (fx> y x))) x y)))) '(lambda (x.0 y.1) @@ -863,7 +897,7 @@ y.1 x.0))) (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2] [compile-profile #f]) (expand/optimize '(lambda (x y) (if (or (fx< x y) (fx> y x)) x y)))) '(lambda (x y) (if (if (#2%fx< x y) #t (#2%fx> y x)) x y))) @@ -1974,6 +2008,31 @@ (if (= (optimize-level) 3) '(((#3%write 'a)) ((#3%write 'b)) ((#3%write 'c) (#3%write 'd) (#3%write 'e))) '(((#2%write 'a)) ((#2%write 'b)) ((#2%write 'c) (#2%write 'd) (#2%write 'e))))))) + (equivalent-expansion? + (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) + (expand/optimize '(let ([x (cons 0 (list))]) (#%apply #%zero? x)))) + #t) + (equivalent-expansion? + (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) + ;; don't fold primitive in value context with bad apply convention + (expand/optimize '(#%apply #%zero? 0))) + (if (= (optimize-level) 3) + '(#3%apply #3%zero? 0) + '(#2%apply #2%zero? 0))) + (equivalent-expansion? + (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) + ;; don't fold primitive in test context with bad apply convention + (expand/optimize '(if (#%apply #%eof-object 1 2 3) 4 5))) + (if (= (optimize-level) 3) + '(if (#3%apply #3%eof-object 1 2 3) 4 5) + '(if (#2%apply #2%eof-object 1 2 3) 4 5))) + (equivalent-expansion? + (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) + ;; don't fold primitive in effect context with bad apply convention + (expand/optimize '(begin (#%apply #%box? 'step) 3))) + (if (= (optimize-level) 3) + '(begin (#3%apply #3%box? 'step) 3) + '(begin (#2%apply #2%box? 'step) 3))) ) (mat cp0-car/cdr @@ -2661,7 +2720,7 @@ ; does push (make-message-condition y) because it is pure, even though one of the vars (z) is assigned '(lambda (y) (let ([z #f]) (#3%list (lambda () (set! z 15) z) (#3%make-message-condition y))))) (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2] [compile-profile #f]) (expand/optimize '(let () (define-record foo ((immutable boolean x))) @@ -2674,7 +2733,7 @@ #t e2)) (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 3]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 3] [compile-profile #f]) (expand/optimize '(let () (define-record foo ((immutable boolean x))) diff -Nru chezscheme-9.5+dfsg/mats/date.ms chezscheme-9.5.4+dfsg/mats/date.ms --- chezscheme-9.5+dfsg/mats/date.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/date.ms 2020-08-31 02:35:12.000000000 +0000 @@ -622,9 +622,11 @@ (sleep (make-time 'time-duration 0 1)) (timetime-utc (current-date)))) (let ([t (current-time)]) - (time=? - (date->time-utc (time-utc->date t -14400)) - (date->time-utc (time-utc->date t 0)))) + (and + (time=? (date->time-utc (time-utc->date t)) t) + (time=? (date->time-utc (time-utc->date t -86400)) t) + (time=? (date->time-utc (time-utc->date t 0)) t) + (time=? (date->time-utc (time-utc->date t 86400)) t))) ) (mat time&date-printing diff -Nru chezscheme-9.5+dfsg/mats/examples.ms chezscheme-9.5.4+dfsg/mats/examples.ms --- chezscheme-9.5+dfsg/mats/examples.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/examples.ms 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -;; examples .ms ;;; examples.ms ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -21,7 +20,7 @@ (begin (mat name (begin - (parameterize ((current-directory *examples-directory*)) + (parameterize ((source-directories (cons *examples-directory* (source-directories)))) (load (format "~a/~a.ss" *examples-directory* file)) ...) #t) @@ -589,5 +588,5 @@ (examples-mat ez-grammar-test ("ez-grammar-test") (equal? (with-output-to-string ez-grammar-test) - "end of tests\n") + "8 tests ran\n") ) diff -Nru chezscheme-9.5+dfsg/mats/fl.ms chezscheme-9.5.4+dfsg/mats/fl.ms --- chezscheme-9.5+dfsg/mats/fl.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/fl.ms 2020-08-31 02:35:12.000000000 +0000 @@ -805,6 +805,8 @@ (error? (fleven? 3.2)) (error? (fleven? 3.0+1.0i)) (error? (fleven? 1+1i)) + (error? (fleven? +inf.0)) + (error? (fleven? +nan.0)) (not (fleven? -3.0)) (fleven? 2.0) (not (fleven? 1208312083280477.0)) @@ -821,6 +823,8 @@ (error? (flodd? 3.2)) (error? (flodd? 3.0+1.0i)) (error? (flodd? 3+1i)) + (error? (flodd? +inf.0)) + (error? (flodd? +nan.0)) (flodd? -3.0) (not (flodd? 2.0)) (flodd? 1208312083280477.0) diff -Nru chezscheme-9.5+dfsg/mats/foreign2.c chezscheme-9.5.4+dfsg/mats/foreign2.c --- chezscheme-9.5+dfsg/mats/foreign2.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/foreign2.c 2020-08-31 02:35:12.000000000 +0000 @@ -424,3 +424,41 @@ EXPORT i64 ifoo64b(i32 x, i64 a, i64 b, i64 c, i64 d, i64 e, i64 f, i64 g) { return (i64)x + (a - b) + (c - d) + (e - f) + g; } + +EXPORT void call_many_times(void (*f)(iptr)) +{ + int x; + iptr a = 1, b = 3, c = 5, d = 7; + iptr e = 1, g = 3, h = 5, i = 7; + iptr j = 1, k = 3, l = 5, m = 7; + iptr big = (((iptr)1) << ((8 * sizeof(iptr)) - 2)); + + /* The intent of the loop is to convince the C compiler to store + something in the same register used for CP (so, compile with + optimization). */ + for (x = 0; x < 1000000; x++) { + f(big|(a+e+j)); + a = b; b = c; c = d; d = e; + e = g; g = h; h = i; i = j; + j = k+2; k = l+2; l = m+2; m = m+2; + } +} + +EXPORT void call_many_times_bv(void (*f)(char *s)) +{ + /* make this sensible as u8*, u16*, and u32* */ + char buf[8] = { 1, 2, 3, 4, 0, 0, 0, 0 }; + int x; + + for (x = 0; x < 1000000; x++) { + buf[0] = (x & 63) + 1; + f(buf); + } +} + +typedef void (*many_arg_callback_t)(int i, const char* s1, const char* s2, const char* s3, + const char* s4, int i2, const char* s6, const char* s7, int i3); +EXPORT void call_with_many_args(many_arg_callback_t callback) +{ + callback(0, "this", "is", "working", "just", 1, "fine", "or does it?", 2); +} diff -Nru chezscheme-9.5+dfsg/mats/foreign3.c chezscheme-9.5.4+dfsg/mats/foreign3.c --- chezscheme-9.5+dfsg/mats/foreign3.c 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/foreign3.c 2020-08-31 02:35:12.000000000 +0000 @@ -178,6 +178,10 @@ } #ifdef WIN32 +EXPORT int __stdcall sum_stdcall(int a, int b) { + return a + b; +} + EXPORT ptr Sinvoke2_stdcall(ptr code, ptr x1, iptr x2) { return (*((ptr (__stdcall *) PROTO((ptr, iptr)))Sforeign_callable_entry_point(code)))(x1, x2); } diff -Nru chezscheme-9.5+dfsg/mats/foreign4.c chezscheme-9.5.4+dfsg/mats/foreign4.c --- chezscheme-9.5+dfsg/mats/foreign4.c 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/foreign4.c 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,399 @@ +/* foreign4.c + * Copyright 1984-2017 Cisco Systems, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#if defined(_REENTRANT) || defined(_WIN32) +# ifdef _WIN32 +# include +# define SCHEME_IMPORT +# include "scheme.h" +# else +# include +# include "scheme.h" +# endif +# undef EXPORT +#endif + +typedef signed char i8; +typedef unsigned char u8; +typedef unsigned short u16; +#ifdef _WIN32 +typedef __int64 i64; +# define EXPORT extern __declspec (dllexport) +#else +typedef long long i64; +# define EXPORT +#endif + +/* To help make sure that argument and result handling doesn't + read or write too far, try to provide functions that allocate + a structure at the end of a memory page (where the next page is + likely to be unmapped) */ + +#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) + +# include +# include +# include +# include + +EXPORT void *malloc_at_boundary(int sz) +{ + intptr_t alloc_size = getpagesize(); + char *p; + p = mmap(NULL, 2 * alloc_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + mprotect(p + alloc_size, alloc_size, PROT_NONE); + return p + alloc_size - sz; +} + +EXPORT void free_at_boundary(void *p) +{ + intptr_t alloc_size = getpagesize(); + munmap((void *)(((intptr_t)p) & ~(alloc_size-1)), 2 * alloc_size); +} + +#elif defined(_WIN32) + +EXPORT void *malloc_at_boundary(int sz) +{ + SYSTEM_INFO si; + char *p; + DWORD dummy; + GetSystemInfo(&si); + p = VirtualAlloc(NULL, 2 * si.dwPageSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + VirtualProtect(p + si.dwPageSize, si.dwPageSize, PAGE_NOACCESS, &dummy); + return p + si.dwPageSize - sz; +} + +EXPORT void free_at_boundary(void *p) +{ + SYSTEM_INFO si; + GetSystemInfo(&si); + VirtualFree((void *)(((intptr_t)p) & ~(si.dwPageSize-1)), 0, MEM_RELEASE); +} + +#else + +EXPORT void *malloc_at_boundary(int sz) +{ + return malloc(sz); +} + +EXPORT void free_at_boundary(void *p) +{ + free(p); +} + +#endif + +#if defined(_REENTRANT) || defined(_WIN32) + +typedef struct in_thread_args_t { + double (*proc)(double arg); + double arg; + int n_times; +} in_thread_args_t; + +void *in_thread(void *_proc_and_arg) +{ + in_thread_args_t *proc_and_arg = _proc_and_arg; + int i; + + for (i = 0; i < proc_and_arg->n_times; i++) { + proc_and_arg->arg = proc_and_arg->proc(proc_and_arg->arg); + } + + return NULL; +} + +#if defined(_WIN32) +# define os_thread_t unsigned +# define os_thread_create(addr, proc, arg) (((*(addr)) = _beginthread(proc, 0, arg)) == -1) +# define os_thread_join(t) WaitForSingleObject((HANDLE)(intptr_t)(t), INFINITE) +#else +# define os_thread_t pthread_t +# define os_thread_create(addr, proc, arg) pthread_create(addr, NULL, in_thread, proc_and_arg) +# define os_thread_join(t) pthread_join(t, NULL) +#endif + +#ifdef FEATURE_PTHREADS +EXPORT double call_in_unknown_thread(double (*proc)(double arg), double arg, int n_times, + int do_fork, int do_deactivate) { + os_thread_t t; + in_thread_args_t *proc_and_arg = malloc(sizeof(in_thread_args_t)); + + proc_and_arg->proc = proc; + proc_and_arg->arg = arg; + proc_and_arg->n_times = n_times; + + if (do_fork) { + if (!os_thread_create(&t, in_thread, proc_and_arg)) { + if (do_deactivate) + Sdeactivate_thread(); + os_thread_join(t); + if (do_deactivate) + Sactivate_thread(); + } + } else { + in_thread(proc_and_arg); + } + + arg = proc_and_arg->arg; + free(proc_and_arg); + + return arg; +} +#endif /* FEATURE_PTHREADS */ +#endif + +EXPORT unsigned spin_a_while(int amt, unsigned a, unsigned b) +{ + int i; + + /* A loop that the compiler is unlikely to optimize away */ + for (i = 0; i < amt; i++) { + a = a + 1; + b = b + a; + } + + return a; +} + +#define GEN(ts, init, sum) \ + EXPORT ts f4_get_ ## ts () { \ + ts r = init; \ + return r; \ + } \ + EXPORT double f4_sum_ ## ts (ts v) { \ + return sum(v); \ + } \ + EXPORT double f4_sum_two_ ## ts (ts v1, ts v2) { \ + return sum(v1) + sum(v2); \ + } \ + EXPORT double f4_sum_pre_double_ ## ts (double v0, ts v) { \ + return v0 + sum(v); \ + } \ + EXPORT double f4_sum_pre_double_double_ ## ts (double v0, double v1, ts v) { \ + return v0 + v1 + sum(v); \ + } \ + EXPORT double f4_sum_pre_double_double_double_double_ ## ts (double v0, double v1, double v2, double v3, ts v) { \ + return v0 + v1 + v2 + v3 + sum(v); \ + } \ + EXPORT double f4_sum_pre_double_double_double_double_double_double_double_double_ ## ts \ + (double v0, double v1, double v2, double v3, double v4, double v5, double v6, double v7, ts v) { \ + return v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7 + sum(v); \ + } \ + EXPORT double f4_sum_ ## ts ## _post_double (ts v, double v0) { \ + return v0 + sum(v); \ + } \ + EXPORT double f4_sum_pre_int_ ## ts (int v0, ts v) { \ + return (double)v0 + sum(v); \ + } \ + EXPORT double f4_sum_pre_int_int_ ## ts (int v0, int v1, ts v) { \ + return (double)v0 + (double)v1 + sum(v); \ + } \ + EXPORT double f4_sum_pre_int_int_int_int_ ## ts (int v0, int v1, int v2, int v3, ts v) { \ + return (double)v0 + (double)v1 + (double)v2 + (double)v3 + sum(v); \ + } \ + EXPORT double f4_sum_pre_int_int_int_int_int_int_ ## ts (int v0, int v1, int v2, int v3, int v4, int v5, ts v) { \ + return (double)v0 + (double)v1 + (double)v2 + (double)v3 + (double)v4 + (double)v5 + sum(v); \ + } \ + EXPORT double f4_sum_ ## ts ## _post_int (ts v, int v0) { \ + return (double)v0 + sum(v); \ + } \ + EXPORT double f4_cb_send_ ## ts (double (*cb)(ts)) { \ + ts r = init; \ + return cb(r) + 1.0; \ + } \ + EXPORT double f4_cb_send_two_ ## ts (double (*cb)(ts, ts)) { \ + ts r1 = init; \ + ts r2 = init; \ + return cb(r1, r2) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_int_ ## ts (double (*cb)(int, ts)) { \ + ts r = init; \ + return cb(8, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_int_int_ ## ts (double (*cb)(int, int, ts)) { \ + ts r = init; \ + return cb(8, 9, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_int_int_int_int_ ## ts (double (*cb)(int, int, int, int, ts)) { \ + ts r = init; \ + return cb(8, 9, 10, 11, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_int_int_int_int_int_int_ ## ts (double (*cb)(int, int, int, int, int, int, ts)) { \ + ts r = init; \ + return cb(8, 9, 10, 11, 12, 13, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_double_ ## ts (double (*cb)(double, ts)) { \ + ts r = init; \ + return cb(8.25, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_double_double_ ## ts (double (*cb)(double, double, ts)) { \ + ts r = init; \ + return cb(8.25, 9.25, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_double_double_double_double_ ## ts (double (*cb)(double, double, double, double, ts)) { \ + ts r = init; \ + return cb(8.25, 9.25, 10.25, 11.25, r) + 1.0; \ + } \ + EXPORT double f4_cb_send_pre_double_double_double_double_double_double_double_double_ ## ts \ + (double (*cb)(double, double, double, double, double, double, double, double, ts)) { \ + ts r = init; \ + return cb(8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, r) + 1.0; \ + } \ + EXPORT double f4_sum_cb_ ## ts (ts (*cb)()) { \ + ts v = cb(); \ + return sum(v); \ + } + +#define TO_DOUBLE(x) ((double)(x)) +GEN(i8, -11, TO_DOUBLE) +GEN(u8, 129, TO_DOUBLE) +GEN(short, -22, TO_DOUBLE) +GEN(u16, 33022, TO_DOUBLE) +GEN(long, 33, TO_DOUBLE) +GEN(int, 44, TO_DOUBLE) +GEN(i64, 49, TO_DOUBLE) +GEN(float, 55.0, TO_DOUBLE) +GEN(double, 66.0, TO_DOUBLE) + +/* Some ABIs treat a struct containing a single field different that + just the field */ +#define GEN_1(t1, v1) \ + typedef struct struct_ ## t1 { t1 x; } struct_ ## t1; \ + static double _f4_sum_struct_ ## t1 (struct_ ## t1 v) { \ + return (double)v.x; \ + } \ + static struct_ ## t1 init_struct_ ## t1 = { v1 }; \ + GEN(struct_ ## t1, init_struct_ ## t1, _f4_sum_struct_ ## t1) + +GEN_1(i8, -12) +GEN_1(u8, 212) +GEN_1(short, -23) +GEN_1(u16, 33023) +GEN_1(long, 34) +GEN_1(int, 45) +GEN_1(i64, 48) +GEN_1(float, 56.0) +GEN_1(double, 67.0) + +#define GEN_2(t1, t2, v1, v2) \ + typedef struct struct_ ## t1 ## _ ## t2 { t1 x; t2 y; } struct_ ## t1 ## _ ## t2; \ + static double _f4_sum_struct_ ## t1 ## _ ## t2 (struct_ ## t1 ## _ ## t2 v) { \ + return (double)v.x + (double)v.y; \ + } \ + static struct_ ## t1 ## _ ## t2 init_struct_ ## t1 ## _ ## t2 = { v1, v2 }; \ + GEN(struct_ ## t1 ## _ ## t2, init_struct_ ## t1 ## _ ## t2, _f4_sum_struct_ ## t1 ## _ ## t2) + +#define GEN_2_SET(t, x) \ + GEN_2(t, i8, 1+x, 10) \ + GEN_2(t, short, 2+x, 20) \ + GEN_2(t, long, 3+x, 30) \ + GEN_2(t, i64, 5+x, 50) \ + GEN_2(short, t, 6, 60+x) \ + GEN_2(long, t, 7, 70+x) \ + GEN_2(i64, t, 9, 90+x) \ + GEN_2(i8, t, 10, 100+x) + +GEN_2_SET(int, 0) +GEN_2_SET(float, 0.5) +GEN_2_SET(double, 0.25) + +GEN_2(int, int, 4, 40) +GEN_2(float, float, 4.5, 40.5) +GEN_2(double, double, 4.25, 40.25) + +#define GEN_3(t1, t2, t3, v1, v2, v3) \ + typedef struct struct_ ## t1 ## _ ## t2 ## _ ## t3 { t1 x; t2 y; t3 z; } struct_ ## t1 ## _ ## t2 ## _ ## t3; \ + static double _f4_sum_struct_ ## t1 ## _ ## t2 ## _ ## t3 (struct_ ## t1 ## _ ## t2 ## _ ## t3 v) { \ + return (double)v.x + (double)v.y + (double)v.z; \ + } \ + static struct_ ## t1 ## _ ## t2 ## _ ## t3 init_struct_ ## t1 ## _ ## t2 ## _ ## t3 = { v1, v2, v3 }; \ + GEN(struct_ ## t1 ## _ ## t2 ## _ ## t3, init_struct_ ## t1 ## _ ## t2 ## _ ## t3, _f4_sum_struct_ ## t1 ## _ ## t2 ## _ ## t3) + +#define GEN_3_SET(t, x) \ + GEN_3(t, i8, int, 1+x, 10, 100) \ + GEN_3(t, short, int, 2+x, 20, 200) \ + GEN_3(t, long, int, 3+x, 30, 300) \ + GEN_3(t, i64, int, 5+x, 50, 500) \ + GEN_3(short, t, int, 6, 60+x, 600) \ + GEN_3(long, t, int, 7, 70+x, 700) \ + GEN_3(i64, t, int, 9, 90+x, 900) \ + GEN_3(i8, t, int, 10, 100+x, 1000) + +GEN_3_SET(int, 0) +GEN_3_SET(float, 0.5) +GEN_3_SET(double, 0.25) + +GEN_3(i8, i8, i8, 4, 38, 127) +GEN_3(short, short, short, 4, 39, 399) +GEN_3(int, int, int, 4, 40, 400) +GEN_3(float, float, float, 4.5, 40.5, 400.5) +GEN_3(double, double, double, 4.25, 40.25, 400.25) + +typedef struct struct_i8_i8_i8_i8_i8 { i8 x, y, z, w, q; } struct_i8_i8_i8_i8_i8; +static double _f4_sum_struct_i8_i8_i8_i8_i8 (struct_i8_i8_i8_i8_i8 v) { + return (double)v.x + (double)v.y + (double)v.z + (double)v.w + (double)v.q; +} +static struct struct_i8_i8_i8_i8_i8 init_struct_i8_i8_i8_i8_i8 = { 1, 2, 3, 4, 5 }; +GEN(struct_i8_i8_i8_i8_i8, init_struct_i8_i8_i8_i8_i8, _f4_sum_struct_i8_i8_i8_i8_i8) + +typedef struct struct_i8_i8_i8_i8_i8_i8_i8 { i8 x, y, z, w, q, r, s; } struct_i8_i8_i8_i8_i8_i8_i8; +static double _f4_sum_struct_i8_i8_i8_i8_i8_i8_i8 (struct struct_i8_i8_i8_i8_i8_i8_i8 v) { + return (double)v.x + (double)v.y + (double)v.z + (double)v.w + (double)v.q + (double)v.r + (double)v.s; +} +static struct struct_i8_i8_i8_i8_i8_i8_i8 init_struct_i8_i8_i8_i8_i8_i8_i8 = { 1, 2, 3, 4, 5, 6, 7 }; +GEN(struct_i8_i8_i8_i8_i8_i8_i8, init_struct_i8_i8_i8_i8_i8_i8_i8, _f4_sum_struct_i8_i8_i8_i8_i8_i8_i8) + +/* Some ABIs treat a union containing a single field different that + just the field */ +#define GEN_U1(t1, v1) \ + typedef union union_ ## t1 { t1 x; } union_ ## t1; \ + static double _f4_sum_union_ ## t1 (union_ ## t1 v) { \ + return (double)v.x; \ + } \ + static union_ ## t1 init_union_ ## t1 = { v1 }; \ + GEN(union_ ## t1, init_union_ ## t1, _f4_sum_union_ ## t1) + +GEN_U1(i8, -17) +GEN_U1(u8, 217) +GEN_U1(short, -27) +GEN_U1(u16, 33027) +GEN_U1(long, 37) +GEN_U1(int, 47) +GEN_U1(i64, 49) +GEN_U1(float, 57.0) +GEN_U1(double, 77.0) + +#define GEN_U2(t1, t2, v1) \ + typedef union union_ ## t1 ## _ ## t2 { t1 x; t2 y; } union_ ## t1 ## _ ## t2; \ + static double _f4_sum_union_ ## t1 ## _ ## t2 (union_ ## t1 ## _ ## t2 v) { \ + return (double)v.x; \ + } \ + static union_ ## t1 ## _ ## t2 init_union_ ## t1 ## _ ## t2 = { v1 }; \ + GEN(union_ ## t1 ## _ ## t2, init_union_ ## t1 ## _ ## t2, _f4_sum_union_ ## t1 ## _ ## t2) + +GEN_U2(i8, int, 18) +GEN_U2(short, int, 28) +GEN_U2(long, int, 38) +GEN_U2(int, int, 48) +GEN_U2(i64, int, 43) +GEN_U2(float, int, 58.0) +GEN_U2(double, int, 68.0) diff -Nru chezscheme-9.5+dfsg/mats/foreign.ms chezscheme-9.5.4+dfsg/mats/foreign.ms --- chezscheme-9.5+dfsg/mats/foreign.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/foreign.ms 2020-08-31 02:35:12.000000000 +0000 @@ -2018,7 +2018,7 @@ (foreign-callable (lambda (x y) (collect) - (let ([ls (make-list 20000 #\z)]) + (let ([ls (map (lambda (x) (make-vector 200 x)) (make-list 100))]) (collect) (collect) (collect) @@ -2028,8 +2028,13 @@ (scheme-object iptr) scheme-object)) (define (go) (Sinvoke2 Fcons 4 5)) - (go)) - '(20000 4 . 5)) + (define initial-result (go)) + (let loop ([i 100]) + (if (zero? i) + initial-result + (and (equal? initial-result (go)) + (loop (sub1 i)))))) + '(100 4 . 5)) (eqv? (let () (define Sinvoke2 @@ -2486,6 +2491,101 @@ (ftype-pointer-address fptr))) *m*) (+ $stack-depth $base-value))) + ;; Make sure that a callable is suitably locked, and that it's + ;; unlocked when the C stack is popped by an escape + (equal? + (let () + (define Sinvoke2 + (foreign-procedure "Sinvoke2" + (scheme-object scheme-object iptr) + scheme-object)) + (define Fcons + (foreign-callable + (lambda (k y) + ;; Escape with locked, which should be #t + ;; because a callable is locked while it's + ;; called: + (k (locked-object? Fcons))) + (scheme-object iptr) + scheme-object)) + (list + ;; Call and normal callable return: + (let ([v (Sinvoke2 Fcons (lambda (x) x) 5)]) + (list v (locked-object? Fcons))) + ;; Escape from callable: + (let ([v ($with-exit-proc (lambda (k) (Sinvoke2 Fcons k 5)))]) + (list v (locked-object? Fcons))))) + '((#t #f) (#t #f))) + + ;; Make sure the code pointer for a call into a + ;; foreign procedure is correctly saved for locking + ;; when entering a callback as a callable: + (equal? + (let () + (define v 0) + (define call_many_times (foreign-procedure "call_many_times" (void*) void)) + (define work + (lambda (n) + ;; This loop needs to be non-allocating, but + ;; causes varying numbers of ticks + ;; to be used up. + (let loop ([n (bitwise-and n #xFFFF)]) + (unless (zero? n) + (set! v (add1 v)) + (loop (bitwise-arithmetic-shift-right n 1)))))) + (define handler (foreign-callable work (long) void)) + (lock-object handler) + (call_many_times (foreign-callable-entry-point handler)) + (unlock-object handler) + v) + 14995143) + + (equal? + (let () + (define v 0) + (define call_many_times_bv (foreign-procedure "call_many_times_bv" (void*) void)) + (define work + (lambda (bv) + (set! v (+ v (bytevector-u8-ref bv 0))) + ;; Varying work, as above: + (let loop ([n (bitwise-and (bytevector-u8-ref bv 1) #xFFFF)]) + (unless (zero? n) + (set! v (add1 v)) + (loop (bitwise-arithmetic-shift-right n 1)))))) + (define handlers (list (foreign-callable work (u8*) void) + (foreign-callable work (u16*) void) + (foreign-callable work (u32*) void))) + (map lock-object handlers) + (for-each (lambda (handler) + (call_many_times_bv (foreign-callable-entry-point handler))) + handlers) + (map unlock-object handlers) + v) + 103500000) + + ;; regression test related to saving registers that hold allocated + ;; callable argument + (let* ([call-with-many-args (foreign-procedure "call_with_many_args" (void*) boolean)] + [result #f] + [cb (foreign-callable + (lambda (i s1 s2 s3 s4 i2 s6 s7 i3) + (set! result + (and (eqv? i 0) + (equal? (string->utf8 "this") s1) + (equal? (string->utf8 "is") s2) + (equal? (string->utf8 "working") s3) + (equal? (string->utf8 "just") s4) + (eqv? i2 1) + (equal? (string->utf8 "fine") s6) + (equal? (string->utf8 "or does it?") s7) + (eqv? i3 2)))) + (int u8* u8* u8* u8* int u8* u8* int) + void)]) + (lock-object cb) + (call-with-many-args (foreign-callable-entry-point cb)) + (unlock-object cb) + result) + ) (machine-case @@ -2586,60 +2686,504 @@ (eqv? pid^ pid))))))) ) -(mat varargs +;; varargs ABI not supported for arm32le (yet) +(unless (memq (machine-type) '(arm32le tarm32le)) + (mat varargs + (begin + (define load-libc + (machine-case + [(i3ob ti3ob a6ob ta6ob a6s2 ta6s2 i3s2 ti3s2 i3qnx ti3qnx i3nb ti3nb a6nb ta6nb) + '(load-shared-object "libc.so")] + [(i3le ti3le a6le ta6le arm32le tarm32le ppc32le tppc32le) + '(load-shared-object "libc.so.6")] + [(i3fb ti3fb a6fb ta6fb) + '(load-shared-object "libc.so.7")] + [(i3nt ti3nt a6nt ta6nt) + '(load-shared-object "msvcrt.dll")] + [(i3osx ti3osx a6osx ta6osx) + '(load-shared-object "libc.dylib")] + [else (error 'load-libc "unrecognized machine type ~s" (machine-type))])) + #t) + (equal? + (with-input-from-string + (separate-eval + `(begin + ,load-libc + (define f (foreign-procedure "printf" (string double) int)) + (f "(%g)" 3.5) + (void))) + read) + '(3.5)) + (equal? + (with-input-from-string + (separate-eval + `(begin + ,load-libc + (define f (foreign-procedure "printf" (string double double double double double double) int)) + (f "(%g %g %g %g %g %g)" 3.5 2.5 -1.5 6.75 8.25 -9.5) + (void))) + read) + '(3.5 2.5 -1.5 6.75 8.25 -9.5)) + (equal? + (with-input-from-string + (separate-eval + `(begin + ,load-libc + (define f (foreign-procedure "printf" (string double double double double double double double double) int)) + (f "(%g %g %g %g %g %g %g %g)" 3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5) + (void))) + read) + '(3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5)) + (equal? + (with-input-from-string + (separate-eval + `(begin + ,load-libc + (define f (foreign-procedure "printf" (string double double double double double double double double double double) int)) + (f "(%g %g %g %g %g %g %g %g %g %g)" 3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5 7.25 -0.5) + (void))) + read) + '(3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5 7.25 -0.5)))) + +(mat structs (begin - (define load-libc - (machine-case - [(i3ob ti3ob a6ob ta6ob a6s2 ta6s2 i3s2 ti3s2 i3qnx ti3qnx i3nb ti3nb a6nb ta6nb) - '(load-shared-object "libc.so")] - [(i3le ti3le a6le ta6le arm32le tarm32le ppc32le tppc32le) - '(load-shared-object "libc.so.6")] - [(i3fb ti3fb a6fb ta6fb) - '(load-shared-object "libc.so.7")] - [(i3nt ti3nt a6nt ta6nt) - '(load-shared-object "msvcrt.dll")] - [(i3osx ti3osx a6osx ta6osx) - '(load-shared-object "libc.dylib")] - [else (error 'load-libc "unrecognized machine type ~s" (machine-type))])) + (define-ftype i8 integer-8) + (define-ftype u8 unsigned-8) + (define-ftype u16 unsigned-16) + (define-ftype i64 integer-64) + (define-syntax check* + (syntax-rules () + [(_ (conv ...) T s [vi ...] [T-ref ...] [T-set! ...]) + (let () + (define-ftype callback (function conv ... ((& T)) double)) + (define-ftype callback-two (function conv ... ((& T) (& T)) double)) + (define-ftype pre-int-callback (function conv ... (int (& T)) double)) + (define-ftype pre-double-callback (function conv ... (double (& T)) double)) + (define-ftype callback-r (function conv ... () (& T))) + (define get (foreign-procedure conv ... (format "f4_get~a" s) + () (& T))) + (define sum (foreign-procedure conv ... (format "f4_sum~a" s) + ((& T)) double)) + (define sum_two (foreign-procedure conv ... (format "f4_sum_two~a" s) + ((& T) (& T)) double)) + (define sum_pre_int (foreign-procedure conv ... (format "f4_sum_pre_int~a" s) + (int (& T)) double)) + (define sum_pre_int_int (foreign-procedure conv ... (format "f4_sum_pre_int_int~a" s) + (int int (& T)) double)) + (define sum_pre_int_int_int_int (foreign-procedure conv ... (format "f4_sum_pre_int_int_int_int~a" s) + (int int int int (& T)) double)) + (define sum_pre_int_int_int_int_int_int (foreign-procedure conv ... (format "f4_sum_pre_int_int_int_int_int_int~a" s) + (int int int int int int (& T)) double)) + (define sum_post_int (foreign-procedure conv ... (format "f4_sum~a_post_int" s) + ((& T) int) double)) + (define sum_pre_double (foreign-procedure conv ... (format "f4_sum_pre_double~a" s) + (double (& T)) double)) + (define sum_pre_double_double (foreign-procedure conv ... (format "f4_sum_pre_double_double~a" s) + (double double (& T)) double)) + (define sum_pre_double_double_double_double (foreign-procedure conv ... (format "f4_sum_pre_double_double_double_double~a" s) + (double double double double (& T)) double)) + (define sum_pre_double_double_double_double_double_double_double_double + (foreign-procedure conv ... (format "f4_sum_pre_double_double_double_double_double_double_double_double~a" s) + (double double double double double double double double (& T)) double)) + (define sum_post_double (foreign-procedure conv ... (format "f4_sum~a_post_double" s) + ((& T) double) double)) + (define cb_send (foreign-procedure conv ... (format "f4_cb_send~a" s) + ((* callback)) double)) + (define cb_send_two (foreign-procedure conv ... (format "f4_cb_send_two~a" s) + ((* callback-two)) double)) + (define cb_send_pre_int (foreign-procedure conv ... (format "f4_cb_send_pre_int~a" s) + ((* pre-int-callback)) double)) + (define cb_send_pre_double (foreign-procedure conv ... (format "f4_cb_send_pre_double~a" s) + ((* pre-double-callback)) double)) + (define sum_cb (foreign-procedure conv ... (format "f4_sum_cb~a" s) + ((* callback-r)) double)) + (define-syntax with-callback + (syntax-rules () + [(_ ([id rhs]) + body) + (let ([id rhs]) + (let ([v body]) + (unlock-object + (foreign-callable-code-object + (ftype-pointer-address id))) + v))])) + (and (let ([v (make-ftype-pointer T (malloc_at_boundary (ftype-sizeof T)))]) + (get v) + (and (= (T-ref v) vi) + ... + (begin + (free_at_boundary (ftype-pointer-address v)) + #t))) + (let ([a (make-ftype-pointer T (malloc_at_boundary (ftype-sizeof T)))]) + (T-set! a) ... + (and (= (+ vi ...) (sum a)) + (= (+ vi ... vi ...) (sum_two a a)) + (= (+ 8 vi ...) (sum_pre_int 8 a)) + (= (+ 8 9 vi ...) (sum_pre_int_int 8 9 a)) + (= (+ 8 9 10 11 vi ...) (sum_pre_int_int_int_int 8 9 10 11 a)) + (= (+ 8 9 10 11 12 13 vi ...) (sum_pre_int_int_int_int_int_int 8 9 10 11 12 13 a)) + (= (+ 8 vi ...) (sum_post_int a 8)) + (= (+ 8.25 vi ...) (sum_pre_double 8.25 a)) + (= (+ 8.25 9.25 vi ...) (sum_pre_double_double 8.25 9.25 a)) + (= (+ 8.25 9.25 10.25 11.25 vi ...) (sum_pre_double_double_double_double 8.25 9.25 10.25 11.25 a)) + (= (+ 8.25 9.25 10.25 11.25 12.25 13.25 14.25 15.25 vi ...) + (sum_pre_double_double_double_double_double_double_double_double + 8.25 9.25 10.25 11.25 12.25 13.25 14.25 15.25 a)) + (= (+ 8.25 vi ...) (sum_post_double a 8.25)) + (= (+ 1.0 vi ...) (with-callback ([cb (make-ftype-pointer + callback + (lambda (r) + (exact->inexact (+ (T-ref r) ...))))]) + (cb_send cb))) + (= (+ 1.0 vi ... vi ...) (with-callback ([cb (make-ftype-pointer + callback-two + (lambda (r1 r2) + (exact->inexact (+ (T-ref r1) ... + (T-ref r2) ...))))]) + (cb_send_two cb))) + (= (+ 1.0 8 vi ...) (with-callback ([cb (make-ftype-pointer + pre-int-callback + (lambda (v r) + (exact->inexact (+ v (T-ref r) ...))))]) + (cb_send_pre_int cb))) + (= (+ 1.0 8.25 vi ...) (with-callback ([cb (make-ftype-pointer + pre-double-callback + (lambda (v r) + (exact->inexact (+ v (T-ref r) ...))))]) + (cb_send_pre_double cb))) + (= (+ vi ...) (with-callback ([cb (make-ftype-pointer + callback-r + (lambda (r) + (T-set! r) ...))]) + (sum_cb cb))) + (begin + (free_at_boundary (ftype-pointer-address a)) + #t)))))])) + (define-syntax check*t + (syntax-rules () + [(_ arg ...) + (and (check* () arg ...) + (check* (__collect_safe) arg ...))])) + (define-syntax check-n + (syntax-rules () + [(_ [ni ti vi] ...) + (let () + (define-ftype T (struct [ni ti] ...)) + (define s (apply string-append + "_struct" + (let loop ([l '(ti ...)]) + (cond + [(null? l) '()] + [else (cons (format "_~a" (car l)) + (loop (cdr l)))])))) + (check*t T s + [vi ...] + [(lambda (a) (ftype-ref T (ni) a)) ...] + [(lambda (a) (ftype-set! T (ni) a vi)) ...]))])) + (define-syntax check + (syntax-rules () + [(_ t1 v1) + (check*t t1 (format "_~a" 't1) + [v1] + [(lambda (a) (ftype-ref t1 () a))] + [(lambda (a) (ftype-set! t1 () a v1))])])) + (define-syntax check-union + (syntax-rules () + [(_ [n0 t0 v0] [ni ti vi] ...) + (let () + (define-ftype T (union [n0 t0] [ni ti] ...)) + (define s (apply string-append + "_union" + (let loop ([l '(t0 ti ...)]) + (cond + [(null? l) '()] + [else (cons (format "_~a" (car l)) + (loop (cdr l)))])))) + (check*t T s + [v0] + [(lambda (a) (ftype-ref T (n0) a))] + [(lambda (a) (ftype-set! T (n0) a v0))]))])) + (define-syntax check-1 + (syntax-rules () + [(_ t1 v1) + (check-n [x t1 v1])])) + (define-syntax check-2 + (syntax-rules () + [(_ t1 t2 v1 v2) + (check-n [x t1 v1] [y t2 v2])])) + (define-syntax check-2-set + (syntax-rules () + [(_ t x) + (and + (check-2 t i8 (+ 1 x) 10) + (check-2 t short (+ 2 x) 20) + (check-2 t long (+ 3 x) 30) + (check-2 t i64 (+ 5 x) 50) + (check-2 short t 6 (+ 60 x)) + (check-2 long t 7 (+ 70 x)) + (check-2 i64 t 9 (+ 90 x)) + (check-2 i8 t 10 (+ 100 x)))])) + (define-syntax check-3 + (syntax-rules () + [(_ t1 t2 t3 v1 v2 v3) + (check-n [x t1 v1] [y t2 v2] [z t3 v3])])) + (define-syntax check-3-set + (syntax-rules () + [(_ t x) + (and + (check-3 t i8 int (+ 1 x) 10 100) + (check-3 t short int (+ 2 x) 20 200) + (check-3 t long int (+ 3 x) 30 300) + (check-3 t i64 int (+ 5 x) 50 500) + (check-3 short t int 6 (+ 60 x) 600) + (check-3 long t int 7 (+ 70 x) 700) + (check-3 i64 t int 9 (+ 90 x) 900) + (check-3 i8 t int 10 (+ 100 x) 1000))])) + (define malloc_at_boundary (foreign-procedure "malloc_at_boundary" + (int) uptr)) + (define free_at_boundary (foreign-procedure "free_at_boundary" + (uptr) void)) #t) - (equal? - (with-input-from-string - (separate-eval - `(begin - ,load-libc - (define f (foreign-procedure "printf" (string double) int)) - (f "(%g)" 3.5) - (void))) - read) - '(3.5)) - (equal? - (with-input-from-string - (separate-eval - `(begin - ,load-libc - (define f (foreign-procedure "printf" (string double double double double double double) int)) - (f "(%g %g %g %g %g %g)" 3.5 2.5 -1.5 6.75 8.25 -9.5) - (void))) - read) - '(3.5 2.5 -1.5 6.75 8.25 -9.5)) - (equal? - (with-input-from-string - (separate-eval - `(begin - ,load-libc - (define f (foreign-procedure "printf" (string double double double double double double double double) int)) - (f "(%g %g %g %g %g %g %g %g)" 3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5) - (void))) - read) - '(3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5)) - (equal? - (with-input-from-string - (separate-eval - `(begin - ,load-libc - (define f (foreign-procedure "printf" (string double double double double double double double double double double) int)) - (f "(%g %g %g %g %g %g %g %g %g %g)" 3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5 7.25 -0.5) - (void))) - read) - '(3.5 2.5 -1.5 6.75 8.25 -9.5 1e32 -4.5 7.25 -0.5)) + (check i8 -11) + (check u8 129) + (check short -22) + (check u16 33022) + (check long 33) + (check int 44) + (check i64 49) + (check float 55.0) + (check double 66.0) + (check-1 i8 -12) + (check-1 u8 212) + (check-1 short -23) + (check-1 u16 33023) + (check-1 long 34) + (check-1 int 45) + (check-1 i64 48) + (check-1 float 56.0) + (check-1 double 67.0) + (check-2-set int 0) + (check-2-set float 0.5) + (check-2-set double 0.25) + (check-2 int int 4 40) + (check-2 float float 4.5 40.5) + (check-2 double double 4.25 40.25) + (check-3-set int 0) + (check-3-set float 0.5) + (check-3-set double 0.25) + (check-3 i8 i8 i8 4 38 127) + (check-3 short short short 4 39 399) + (check-3 int int int 4 40 400) + (check-3 float float float 4.5 40.5 400.5) + (check-3 double double double 4.25 40.25 400.25) + (check-n [x i8 1] [y i8 2] [z i8 3] [w i8 4] [q i8 5]) + (check-n [x i8 1] [y i8 2] [z i8 3] [w i8 4] [q i8 5] [r i8 6] [s i8 7]) + (check-union [x i8 -17]) + (check-union [x u8 217]) + (check-union [x short -27]) + (check-union [x u16 33027]) + (check-union [x long 37]) + (check-union [x int 47]) + (check-union [x i64 49]) + (check-union [x float 57.0]) + (check-union [x double 77.0]) + (check-union [x i8 18] [y int 0]) + (check-union [x short 28] [y int 0]) + (check-union [x long 38] [y int 0]) + (check-union [x int 48] [y int 0]) + (check-union [x i64 43] [y int 0]) + (check-union [x float 58.0] [y int 0]) + (check-union [x double 68.0] [y int 0]) + + ;; Check that `__collect_safe` saves argument and result floating-point registers + ;; while activating and deactivating a thread + (let () + (define-ftype T (struct [d double] [i integer-8] [n int])) + (define sum_pre_double_double_double_double_double_double_double_double + (foreign-procedure __collect_safe + "f4_sum_pre_double_double_double_double_double_double_double_double_struct_double_i8_int" + (double double double double double double double double (& T)) + double)) + (let* ([p (foreign-alloc (ftype-sizeof T))] + [a (make-ftype-pointer T p)]) + (ftype-set! T (d) a 1.25) + (ftype-set! T (i) a 10) + (ftype-set! T (n) a 100) + (let loop ([i 1000000]) + (cond + [(zero? i) (foreign-free p) #t] + [else + (let ([v (sum_pre_double_double_double_double_double_double_double_double 8.25 9.25 10.25 11.25 12.25 13.25 14.25 15.25 a)]) + (and (= 205.25 v) + (loop (sub1 i))))])))) + (let () + (define-ftype T (struct [d double] [i integer-8] [n int])) + (define-ftype callback (function __collect_safe ((& T)) double)) + (define cb_send (foreign-procedure __collect_safe + "f4_cb_send_struct_double_i8_int" + ((* callback)) double)) + (let ([cb (make-ftype-pointer + callback + (lambda (r) + (+ (ftype-ref T (d) r) + (ftype-ref T (i) r) + (ftype-ref T (n) r))))]) + (let loop ([i 1000000]) + (cond + [(zero? i) + (unlock-object + (foreign-callable-code-object + (ftype-pointer-address cb))) + #t] + [else + (let ([v (cb_send cb)]) + (and (= v 112.25) + (loop (sub1 i))))])))) + ) + +(mat collect-safe + (error? (foreign-procedure __collect_safe "unknown" (utf-8) void)) + (error? (foreign-procedure __collect_safe "unknown" (utf-16be) void)) + (error? (foreign-procedure __collect_safe "unknown" (utf-16le) void)) + (error? (foreign-procedure __collect_safe "unknown" (utf-32be) void)) + (error? (foreign-procedure __collect_safe "unknown" (utf-32le) void)) + (error? (foreign-procedure __collect_safe "unknown" (string) void)) + (error? (foreign-procedure __collect_safe "unknown" (wstring) void)) + (error? (foreign-callable __collect_safe (lambda () #f) () utf-8)) + (error? (foreign-callable __collect_safe (lambda () #f) () utf-16le)) + (error? (foreign-callable __collect_safe (lambda () #f) () utf-16be)) + (error? (foreign-callable __collect_safe (lambda () #f) () utf-32le)) + (error? (foreign-callable __collect_safe (lambda () #f) () utf-32be)) + (error? (foreign-callable __collect_safe (lambda () #f) () string)) + (error? (foreign-callable __collect_safe (lambda () #f) () wstring)) + (begin + (define-ftype thread-callback-T (function __collect_safe (double) double)) + (define (call-with-thread-callback cb-proc proc) + (let ([callback (make-ftype-pointer thread-callback-T cb-proc)]) + (let ([r (proc callback)]) + (unlock-object + (foreign-callable-code-object + (ftype-pointer-address callback))) + r))) + (define (call-in-unknown-thread-1 proc arg n-times) + ;; Baseline implementation that uses the current thread + (let loop ([i 0] [arg arg]) + (cond + [(= i n-times) arg] + [else (loop (fx+ i 1) (proc arg))]))) + (define call-in-unknown-thread-2 + ;; Call in the current thread, but through the foreign procedure + (if (and (threaded?) + (foreign-entry? "call_in_unknown_thread")) + (let ([call (foreign-procedure "call_in_unknown_thread" + ((* thread-callback-T) double int boolean boolean) + double)]) + (lambda (proc arg n-times) + (call-with-thread-callback + proc + (lambda (callback) (call callback arg n-times #f #t))))) + call-in-unknown-thread-1)) + (define call-in-unknown-thread-3 + ;; Call in a truly unknown thread: + (if (and (threaded?) + (foreign-entry? "call_in_unknown_thread")) + (let ([call (foreign-procedure "call_in_unknown_thread" + ((* thread-callback-T) double int boolean boolean) + double)]) + (lambda (proc arg n-times) + (call-with-thread-callback + proc + (lambda (callback) (call callback arg n-times #t #t))))) + call-in-unknown-thread-1)) + (define call-in-unknown-thread-4 + ;; In an truly unknown thread, but also using `__collect_safe` to + ;; deactivate the current thread instead of using `Sdeactivate_thread` + ;; within the foreign function: + (if (and (threaded?) + (foreign-entry? "call_in_unknown_thread")) + (let ([call (foreign-procedure __collect_safe "call_in_unknown_thread" + ((* thread-callback-T) double int boolean boolean) + double)]) + (lambda (proc arg n-times) + (call-with-thread-callback + proc + (lambda (callback) (call callback arg n-times #t #f))))) + call-in-unknown-thread-1)) + #t) + ;; These tests will pass only if `collect` can run, where `collect` + ;; can run only if a single thread is active + (equal? (call-in-unknown-thread-1 (lambda (n) (collect 0) (+ n 1.0)) 3.5 1) + 4.5) + (equal? (call-in-unknown-thread-2 (lambda (n) (collect 0) (+ n 1.0)) 3.5 2) + 5.5) + (equal? (call-in-unknown-thread-3 (lambda (n) (collect 0) (+ n 1.0)) 3.5 3) + 6.5) + (equal? (call-in-unknown-thread-4 (lambda (n) (collect 0) (+ n 1.0)) 3.5 4) + 7.5) + (equal? (let loop ([n 10.0]) + (call-in-unknown-thread-4 + (lambda (n) + (cond + [(zero? n) (collect) 0.5] + [else (+ 1.0 (loop (- n 1.0)))])) + n + 1)) + 10.5) + ;; Try to crash a `__collect_safe` foreign-procedure call by moving the + ;; return address out from under the foreign procedure. This attempt + ;; should fail, because deactivating a thread first locks the + ;; current code object. + (or (not (threaded?)) + (let ([m (make-mutex)] + [done? #f] + [ok? #t]) + (fork-thread (lambda () + (let loop ([i 10]) + (unless (zero? i) + (let ([spin (eval '(foreign-procedure __collect_safe "spin_a_while" (int unsigned unsigned) unsigned))]) + (spin 1000000 0 1)) + (loop (sub1 i)))) + (mutex-acquire m) + (set! done? #t) + (mutex-release m))) + (let loop () + (mutex-acquire m) + (let ([done? done?]) + (mutex-release m) + (unless done? + (let loop ([i 10]) + (unless (zero? i) + (eval '(foreign-procedure "spin_a_while" () void)) + (loop (sub1 i)))) + (loop)))) + ok?)) ) + +(machine-case + [(i3nt ti3nt) + (mat i3nt-stdcall-collect-safe + (equal? + (let () + (define sum (foreign-procedure __collect_safe __stdcall "_sum_stdcall@8" (int int) int)) + (sum 3 7)) + 10) + (equal? + (let () + (define Sinvoke2 + (foreign-procedure __collect_safe "Sinvoke2_stdcall" + (scheme-object scheme-object iptr) + scheme-object)) + (define Fcons + (foreign-callable __collect_safe __stdcall + (lambda (x y) (cons x y)) + (scheme-object iptr) + scheme-object)) + (Sinvoke2 Fcons 41 51)) + '(41 . 51))) + (mat i3nt-com-thread + (eqv? + (let () + (define com-instance ((foreign-procedure "get_com_instance" () iptr))) + ((foreign-procedure __collect_safe __com 0 (iptr int) int) com-instance 3) + ((foreign-procedure __collect_safe __com 4 (iptr int) int) com-instance 17)) + 37))]) diff -Nru chezscheme-9.5+dfsg/mats/ftype.ms chezscheme-9.5.4+dfsg/mats/ftype.ms --- chezscheme-9.5+dfsg/mats/ftype.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/ftype.ms 2020-08-31 02:35:12.000000000 +0000 @@ -557,9 +557,9 @@ [(a6osx a6osx) (system (format "cc -m64 -dynamiclib -o ~a ~a" testfile.so testfile.c))] [(a6nt ta6nt) - (system (format "..\\c\\vs.bat amd64 && cl /DWIN32 /Fe~a /LD /MD /nologo ~a" testfile.so testfile.c))] + (system (format "set cl= && ..\\c\\vs.bat amd64 && cl /DWIN32 /Fe~a /LD /MD /nologo ~a" testfile.so testfile.c))] [(i3nt ti3nt) - (system (format "..\\c\\vs.bat x86 && cl /DWIN32 /Fe~a /LD /MD /nologo ~a" testfile.so testfile.c))] + (system (format "set cl= && ..\\c\\vs.bat x86 && cl /DWIN32 /Fe~a /LD /MD /nologo ~a" testfile.so testfile.c))] [(arm32le tarm32le) (system (format "cc -fPIC -shared -o ~a ~a" testfile.so testfile.c))] [else ; this should work for most intel-based systems that use gcc... @@ -2876,6 +2876,42 @@ (ftype-set! fcf-B (next) x (make-ftype-pointer fcf-B 0)) (ftype-pointer? (ftype-ref fcf-B (next) x))) (lambda () (foreign-free addr)))) + ; regression test: verify that we can fasl in a cyclic ftd that's already registered on its uid + (begin + (mkfile "testfile-ftype3.ss" + '(define-ftype + [ftype3-A (* ftype3-B)] + [ftype3-B (struct [h ftype3-A])])) + (compile-file "testfile-ftype3") + #t) + (begin ; once should prove it + (load "testfile-ftype3.so") + (ftype-pointer? ftype3-A (make-ftype-pointer ftype3-B 0))) + (begin ; twice for that warm fuzzy feeling + (load "testfile-ftype3.so") + (ftype-pointer? ftype3-A (make-ftype-pointer ftype3-B 0))) + (begin + (mkfile "testfile-ftype4.ss" + '(define-ftype + [ftype4-A (struct [q (* ftype4-B)])] + [ftype4-B (struct [h (* ftype4-A)])])) + (compile-file "testfile-ftype4") + #t) + (begin ; once should prove it + (load "testfile-ftype4.so") + (ftype-pointer? ftype4-A (make-ftype-pointer ftype4-A 0))) + (begin ; twice for that warm fuzzy feeling + (load "testfile-ftype4.so") + (ftype-pointer? ftype4-B (make-ftype-pointer ftype4-B 0))) + (begin + (mkfile "testfile-ftype5.ss" + '(define-ftype + [ftype5-A (struct [q (* ftype4-A)])])) + (compile-file "testfile-ftype5") + #t) + (begin + (load "testfile-ftype5.so") + (ftype-pointer? ftype5-A (make-ftype-pointer ftype5-A 0))) ) (mat ftype-bits diff -Nru chezscheme-9.5+dfsg/mats/hash.ms chezscheme-9.5.4+dfsg/mats/hash.ms --- chezscheme-9.5+dfsg/mats/hash.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/hash.ms 2020-08-31 02:35:12.000000000 +0000 @@ -291,17 +291,77 @@ (each-in? v1 v2) (each-in? v2 v1))))) -(define $equal-entries? - (lambda (keys1 vals1 keys2 vals2) - (and - (same-elements? keys1 keys2) - (same-elements? vals1 vals2)))) +(define equal-entries? + (lambda (ht keys vals) + (define-syntax same-entries? + (syntax-rules () + [(_ e1 keys2 vals2) + (let-values ([(keys1 vals1) e1]) + (and + (same-elements? keys1 keys2) + (same-elements? vals1 vals2)))])) -(define-syntax equal-entries? - (syntax-rules () - [(_ e1 e2 e3) - (let-values ([(keys1 vals1) e1]) - ($equal-entries? keys1 vals1 e2 e3))])) + (and + (same-elements? (hashtable-keys ht) keys) + (same-elements? (hashtable-values ht) vals) + (same-entries? (hashtable-entries ht) keys vals) + (same-elements? (hashtable-cells ht) (vector-map cons keys vals)) + + (same-elements? (r6rs:hashtable-keys ht) keys) + (same-entries? (r6rs:hashtable-entries ht) keys vals) + + ;; Check requested sizes > hash table size + (andmap (lambda (size) + (and + (same-elements? (hashtable-keys ht size) keys) + (same-elements? (hashtable-values ht size) vals) + (same-entries? (hashtable-entries ht size) keys vals) + (same-elements? (hashtable-cells ht size) (vector-map cons keys vals)))) + (list (add1 (hashtable-size ht)) + (expt 2 1000))) + + ;; Make sure request of 0 always works: + (same-elements? (hashtable-keys ht 0) '#()) + (same-elements? (hashtable-values ht 0) '#()) + (same-entries? (hashtable-entries ht 0) '#() '#()) + (same-elements? (hashtable-cells ht 0) '#()) + + (or + (< (hashtable-size ht) 2) + ;; Check request of size 2: + (let ([twos (lambda (v) + (let i-loop ([i 0]) + (cond + [(= i (vector-length v)) + '()] + [else + (let j-loop ([j (add1 i)]) + (cond + [(= j (vector-length v)) + (i-loop (add1 i))] + [else + (cons (vector (vector-ref v i) (vector-ref v j)) + (j-loop (add1 j)))]))])))]) + (let ([keyss (twos keys)] + [valss (twos vals)]) + (and + (let ([got-keys (hashtable-keys ht 2)]) + (ormap (lambda (keys) + (same-elements? got-keys keys)) + keyss)) + (let ([got-vals (hashtable-values ht 2)]) + (ormap (lambda (vals) + (same-elements? got-vals vals)) + valss)) + (let-values ([(got-keys got-vals) (hashtable-entries ht 2)]) + (ormap (lambda (keys vals) + (and (same-elements? got-keys keys) + (same-elements? got-vals vals))) + keyss valss)) + (let ([got-cells (hashtable-cells ht 2)]) + (ormap (lambda (keys vals) + (same-elements? got-cells (vector-map cons keys vals))) + keyss valss))))))))) (mat hashtable-arguments ; make-eq-hashtable @@ -487,23 +547,58 @@ (error? ; wrong argument count (hashtable-keys)) (error? ; wrong argument count - (hashtable-keys $ht 72)) + (hashtable-keys $ht 72 43)) (error? ; not a hashtable (hashtable-keys '(hash . table))) + (error? ; bad size + (hashtable-keys $ht -79)) + (error? ; bad size + (hashtable-keys $ht 'not-an-unsigned-integer)) + (error? ; wrong argument count + (r6rs:hashtable-keys)) + (error? ; wrong argument count + (r6rs:hashtable-keys $ht 72)) + (error? ; not a hashtable + (r6rs:hashtable-keys '(hash . table))) ; hashtable-values (error? ; wrong argument count (hashtable-values)) (error? ; wrong argument count - (hashtable-values $ht 72)) + (hashtable-values $ht 72 43)) (error? ; not a hashtable (hashtable-values '(hash . table))) + (error? ; bad size + (hashtable-values $ht -79)) + (error? ; bad size + (hashtable-values $ht 'not-an-unsigned-integer)) ; hashtable-entries (error? ; wrong argument count (hashtable-entries)) (error? ; wrong argument count - (hashtable-entries $ht 72)) + (hashtable-entries $ht 72 43)) (error? ; not a hashtable (hashtable-entries '(hash . table))) + (error? ; bad size + (hashtable-entries $ht -79)) + (error? ; bad size + (hashtable-entries $ht 'not-an-unsigned-integer)) + (error? ; wrong argument count + (r6rs:hashtable-entries)) + (error? ; wrong argument count + (r6rs:hashtable-entries $ht 72)) + (error? ; not a hashtable + (r6rs:hashtable-entries '(hash . table))) + ; hashtable-cells + (error? ; wrong argument count + (hashtable-cells)) + (error? ; wrong argument count + (hashtable-cells $ht 72 43)) + (error? ; not a hashtable + (hashtable-cells '(hash . table))) + (error? ; bad size + (hashtable-cells $ht -79)) + (error? ; bad size + (hashtable-cells $ht 'not-an-unsigned-integer)) ; hashtable-hash-function (error? ; wrong argument count (hashtable-hash-function)) @@ -916,9 +1011,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h 'a 'aval) (void)) (equal? (list @@ -941,9 +1034,7 @@ (hashtable-contains? h 'c)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#(a b c)) - (same-elements? (hashtable-values h) '#(bval cval aval)) - (equal-entries? (hashtable-entries h) '#(b c a) '#(bval cval aval)) + (equal-entries? h '#(b c a) '#(bval cval aval)) #;(same-elements? (list->vector (hashtable-map h cons)) '#((a . aval) (b . bval) (c . cval))) #;(same-elements? (let ([v (make-vector 3)] [i 0]) @@ -960,9 +1051,7 @@ (equal? (hashtable-ref h 'c 'nope) 'cval) (eqv? (hashtable-delete! h 'b) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#(a c)) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#(a c) '#(aval cval)) + (equal-entries? h '#(a c) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -975,9 +1064,7 @@ (eq? (hashtable-hash-function h2) #f) (eq? (hashtable-equivalence-function h2) eq?) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -986,9 +1073,7 @@ (hashtable-ref h 'b #f) (hashtable-ref h 'c 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -996,9 +1081,7 @@ (hashtable-ref h2 'b #f) (hashtable-ref h2 'c 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-update! h 'q (lambda (x) (+ x 1)) @@ -1060,9 +1143,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h ka 'aval) (void)) (equal? (list @@ -1085,9 +1166,8 @@ (hashtable-contains? h kc)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#((a) (b) (c))) - (same-elements? (hashtable-values h) '#(bval cval aval)) - (equal-entries? (hashtable-entries h) '#((a) (b) (c)) '#(aval bval cval)) + (equal-entries? h '#((a) (b) (c)) '#(aval bval cval)) + (andmap weak-pair? (vector->list (hashtable-cells h))) #;(same-elements? (list->vector (hashtable-map h cons)) '#(((a) . aval) ((b) . bval) ((c) . cval))) #;(same-elements? (let ([v (make-vector 3)] [i 0]) @@ -1104,9 +1184,7 @@ (equal? (hashtable-ref h kc 'nope) 'cval) (eqv? (hashtable-delete! h kb) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#((a) (c))) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#((a) (c)) '#(aval cval)) + (equal-entries? h '#((a) (c)) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -1117,9 +1195,7 @@ (eq? (hashtable-hash-function h2) #f) (eq? (hashtable-equivalence-function h2) eq?) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -1128,9 +1204,7 @@ (hashtable-ref h kb #f) (hashtable-ref h kc 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -1138,9 +1212,7 @@ (hashtable-ref h2 kb #f) (hashtable-ref h2 kc 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) (eqv? (hashtable-update! h kq (lambda (x) (+ x 1)) @@ -1154,17 +1226,14 @@ (void)) (equal? (hashtable-ref h kq #f) 19) (equal? (hashtable-size h) 1) - (same-elements? (hashtable-keys h) '#((q))) - (same-elements? (hashtable-values h) '#(19)) + (equal-entries? h '#((q)) '#(19)) (eqv? (begin (set! kq (void)) (collect (collect-maximum-generation)) (hashtable-size h)) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) #;(eqv? (hashtable-map h (lambda args (error #f "oops"))) '()) #;(eqv? (hashtable-for-each h (lambda args (error #f "oops"))) (void)) #;(eqv? (hashtable-for-each-cell h (lambda args (error #f "oops"))) (void)) @@ -1178,10 +1247,8 @@ (hashtable-update! h kz list 'frog) (void)) (equal? (hashtable-ref h kz #f) '(frog)) - (same-elements? (hashtable-keys h) (vector ky kz)) - (same-elements? (hashtable-values h) (vector (hashtable-ref h kz #f) 'toad)) (equal-entries? - (hashtable-entries h) + h (vector kz ky) (vector (hashtable-ref h kz #f) 'toad)) (eqv? (hashtable-ref h '(zippo) 'nil) 'nil) @@ -1192,31 +1259,23 @@ (not (hashtable-mutable? h3)) (eq-hashtable-weak? h3) (hashtable-weak? h3))) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-keys h3) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (same-elements? (hashtable-values h3) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) + (equal-entries? h3 '#((a) (c)) '#(aval cval)) (equal? (begin (set! ka (void)) (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) '(1 1)) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-keys h3) '#((c))) - (same-elements? (hashtable-values h2) '#(cval)) - (same-elements? (hashtable-values h3) '#(cval)) - (equal-entries? (hashtable-entries h2) '#((c)) '#(cval)) - (equal-entries? (hashtable-entries h3) '#((c)) '#(cval)) + (equal-entries? h2 '#((c)) '#(cval)) + (equal-entries? h3 '#((c)) '#(cval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) 1) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-values h2) '#(cval)) - (equal-entries? (hashtable-entries h2) '#((c)) '#(cval)) + (equal-entries? h2 '#((c)) '#(cval)) ; test for proper shrinkage (eqv? @@ -1258,7 +1317,7 @@ (hashtable-set! ht wk4 wk2) (collect (collect-maximum-generation)) (and - (same-elements? (hashtable-keys ht) '#((1) (2) (3) (4))) + (equal-entries? ht '#((1) (2) (3) (4)) '#((1) (1) (3) (2))) (equal? (hashtable-ref ht wk1 #f) wk1) (equal? (hashtable-ref ht wk2 #f) wk1) (equal? (hashtable-ref ht wk3 #f) wk3) @@ -1269,12 +1328,12 @@ (set! wk3 #f) (collect (collect-maximum-generation)) (and - (same-elements? (hashtable-keys ht) '#((1) (2) (3) (4))) + (equal-entries? ht '#((1) (2) (3) (4)) '#((1) (1) (3) (2))) (equal? (hashtable-ref ht wk4 #f) '(2)) (begin (set! wk4 #f) (collect (collect-maximum-generation)) - (same-elements? (hashtable-keys ht) '#((1) (2) (3)))))))) + (equal-entries? ht '#((1) (2) (3)) '#((1) (1) (3)))))))) ) (mat ephemeron-eq-hashtable @@ -1296,9 +1355,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h ka ka) (void)) (equal? (list @@ -1321,9 +1378,8 @@ (hashtable-contains? h kc)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#((a) (b) (c))) - (same-elements? (hashtable-values h) '#((a) (b) (c))) - (equal-entries? (hashtable-entries h) '#((a) (b) (c)) '#((a) (c) (b))) + (equal-entries? h '#((a) (b) (c)) '#((a) (c) (b))) + (andmap ephemeron-pair? (vector->list (hashtable-cells h))) #;(same-elements? (list->vector (hashtable-map h cons)) '#(((a) . a) ((b) . c) ((c) . b))) #;(same-elements? (let ([v (make-vector 3)] [i 0]) @@ -1340,9 +1396,7 @@ (equal? (hashtable-ref h kc 'nope) '(b)) (eqv? (hashtable-delete! h kb) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#((a) (c))) - (same-elements? (hashtable-values h) '#((a) (b))) - (equal-entries? (hashtable-entries h) '#((a) (c)) '#((a) (b))) + (equal-entries? h '#((a) (c)) '#((a) (b))) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -1353,9 +1407,7 @@ (eq? (hashtable-hash-function h2) #f) (eq? (hashtable-equivalence-function h2) eq?) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#((a) (b))) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#((a) (b))) + (equal-entries? h2 '#((a) (c)) '#((a) (b))) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -1364,9 +1416,7 @@ (hashtable-ref h kb #f) (hashtable-ref h kc 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -1374,9 +1424,7 @@ (hashtable-ref h2 kb #f) (hashtable-ref h2 kc 'nope)) '(2 (a) #f (b))) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#((a) (b))) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#((a) (b))) + (equal-entries? h2 '#((a) (c)) '#((a) (b))) (eqv? (hashtable-update! h kq (lambda (x) (+ x 1)) @@ -1390,17 +1438,14 @@ (void)) (equal? (hashtable-ref h kq #f) 19) (equal? (hashtable-size h) 1) - (same-elements? (hashtable-keys h) '#((q))) - (same-elements? (hashtable-values h) '#(19)) + (equal-entries? h '#((q)) '#(19)) (eqv? (begin (set! kq (void)) (collect (collect-maximum-generation)) (hashtable-size h)) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) #;(eqv? (hashtable-map h (lambda args (error #f "oops"))) '()) #;(eqv? (hashtable-for-each h (lambda args (error #f "oops"))) (void)) #;(eqv? (hashtable-for-each-cell h (lambda args (error #f "oops"))) (void)) @@ -1414,10 +1459,8 @@ (hashtable-update! h kz list 'frog) (void)) (equal? (hashtable-ref h kz #f) '(frog)) - (same-elements? (hashtable-keys h) (vector ky kz)) - (same-elements? (hashtable-values h) (vector (hashtable-ref h kz #f) 'toad)) (equal-entries? - (hashtable-entries h) + h (vector kz ky) (vector (hashtable-ref h kz #f) 'toad)) (eqv? (hashtable-ref h '(zippo) 'nil) 'nil) @@ -1428,31 +1471,23 @@ (not (hashtable-mutable? h3)) (eq-hashtable-ephemeron? h3) (hashtable-ephemeron? h3))) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-keys h3) '#((a) (c))) - (same-elements? (hashtable-values h2) '#((a) (b))) - (same-elements? (hashtable-values h3) '#((a) (b))) + (equal-entries? h2 '#((a) (c)) '#((a) (b))) + (equal-entries? h3 '#((a) (c)) '#((a) (b))) (equal? (begin (set! ka (void)) (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) '(1 1)) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-keys h3) '#((c))) - (same-elements? (hashtable-values h2) '#((b))) - (same-elements? (hashtable-values h3) '#((b))) - (equal-entries? (hashtable-entries h2) '#((c)) '#((b))) - (equal-entries? (hashtable-entries h3) '#((c)) '#((b))) + (equal-entries? h2 '#((c)) '#((b))) + (equal-entries? h3 '#((c)) '#((b))) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) 1) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-values h2) '#((b))) - (equal-entries? (hashtable-entries h2) '#((c)) '#((b))) + (equal-entries? h2 '#((c)) '#((b))) ; test for proper shrinkage (eqv? @@ -1494,7 +1529,7 @@ (hashtable-set! ht wk4 wk2) (collect (collect-maximum-generation)) (and - (same-elements? (hashtable-keys ht) '#((1) (2) (3) (4))) + (equal-entries? ht '#((1) (2) (3) (4)) '#((1) (1) (3) (2))) (equal? (hashtable-ref ht wk1 #f) wk1) (equal? (hashtable-ref ht wk2 #f) wk1) (equal? (hashtable-ref ht wk3 #f) wk3) @@ -1505,12 +1540,12 @@ (set! wk3 #f) (collect (collect-maximum-generation)) (and - (same-elements? (hashtable-keys ht) '#((1) (2) (4))) + (equal-entries? ht '#((1) (2) (4)) '#((1) (1) (2))) (equal? (hashtable-ref ht wk4 #f) '(2)) (begin (set! wk4 #f) (collect (collect-maximum-generation)) - (same-elements? (hashtable-keys ht) '#())))))) + (equal-entries? ht '#() '#())))))) ) (mat eq-hashtable-cell @@ -1627,9 +1662,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (eq-hashtable-set! h 'a 'aval) (void)) (equal? (list @@ -1652,17 +1685,13 @@ (eq-hashtable-contains? h 'c)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#(a b c)) - (same-elements? (hashtable-values h) '#(bval cval aval)) - (equal-entries? (hashtable-entries h) '#(b c a) '#(bval cval aval)) + (equal-entries? h '#(b c a) '#(bval cval aval)) (equal? (eq-hashtable-ref h 'a 1) 'aval) (equal? (eq-hashtable-ref h 'b #f) 'bval) (equal? (eq-hashtable-ref h 'c 'nope) 'cval) (eqv? (eq-hashtable-delete! h 'b) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#(a c)) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#(a c) '#(aval cval)) + (equal-entries? h '#(a c) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -1671,9 +1700,7 @@ (not (eq-hashtable-weak? h2)) (not (hashtable-weak? h2)))) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -1682,9 +1709,7 @@ (eq-hashtable-ref h 'b #f) (eq-hashtable-ref h 'c 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -1692,9 +1717,7 @@ (eq-hashtable-ref h2 'b #f) (eq-hashtable-ref h2 'c 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (eq-hashtable-update! h 'q (lambda (x) (+ x 1)) @@ -1771,9 +1794,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (eq-hashtable-set! h ka 'aval) (void)) (equal? (list @@ -1796,17 +1817,14 @@ (eq-hashtable-contains? h kc)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#((a) (b) (c))) - (same-elements? (hashtable-values h) '#(aval bval cval)) - (equal-entries? (hashtable-entries h) '#((a) (b) (c)) '#(aval bval cval)) + (equal-entries? h '#((a) (b) (c)) '#(aval bval cval)) + (andmap weak-pair? (vector->list (hashtable-cells h))) (equal? (eq-hashtable-ref h ka 1) 'aval) (equal? (eq-hashtable-ref h kb #f) 'bval) (equal? (eq-hashtable-ref h kc 'nope) 'cval) (eqv? (eq-hashtable-delete! h kb) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#((a) (c))) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#((a) (c)) '#(aval cval)) + (equal-entries? h '#((a) (c)) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -1815,9 +1833,7 @@ (hashtable-weak? h2) (eq-hashtable-weak? h2))) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -1826,9 +1842,7 @@ (eq-hashtable-ref h kb #f) (eq-hashtable-ref h kc 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -1836,9 +1850,7 @@ (eq-hashtable-ref h2 kb #f) (eq-hashtable-ref h2 kc 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) (eqv? (eq-hashtable-update! h kq (lambda (x) (+ x 1)) @@ -1852,17 +1864,14 @@ (void)) (equal? (eq-hashtable-ref h kq #f) 19) (equal? (hashtable-size h) 1) - (same-elements? (hashtable-keys h) '#((q))) - (same-elements? (hashtable-values h) '#(19)) + (equal-entries? h '#((q)) '#(19)) (eqv? (begin (set! kq (void)) (collect (collect-maximum-generation)) (hashtable-size h)) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (eq-hashtable-ref h ky #f) #f) (eqv? (eq-hashtable-set! h ky 'toad) @@ -1873,10 +1882,8 @@ (eq-hashtable-update! h kz list 'frog) (void)) (equal? (eq-hashtable-ref h kz #f) '(frog)) - (same-elements? (hashtable-keys h) (vector ky kz)) - (same-elements? (hashtable-values h) (vector (eq-hashtable-ref h kz #f) 'toad)) (equal-entries? - (hashtable-entries h) + h (vector kz ky) (vector (eq-hashtable-ref h kz #f) 'toad)) (eqv? (eq-hashtable-ref h '(zippo) 'nil) 'nil) @@ -1887,31 +1894,23 @@ (not (hashtable-mutable? h3)) (eq-hashtable-weak? h3) (hashtable-weak? h3))) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-keys h3) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (same-elements? (hashtable-values h3) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) + (equal-entries? h3 '#((a) (c)) '#(aval cval)) (equal? (begin (set! ka (void)) (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) '(1 1)) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-keys h3) '#((c))) - (same-elements? (hashtable-values h2) '#(cval)) - (same-elements? (hashtable-values h3) '#(cval)) - (equal-entries? (hashtable-entries h2) '#((c)) '#(cval)) - (equal-entries? (hashtable-entries h3) '#((c)) '#(cval)) + (equal-entries? h2 '#((c)) '#(cval)) + (equal-entries? h3 '#((c)) '#(cval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) 1) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-values h2) '#(cval)) - (equal-entries? (hashtable-entries h2) '#((c)) '#(cval)) + (equal-entries? h2 '#((c)) '#(cval)) ; test for proper shrinkage (eqv? @@ -1961,9 +1960,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (eq-hashtable-set! h ka 'aval) (void)) (equal? (list @@ -1986,17 +1983,14 @@ (eq-hashtable-contains? h kc)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#((a) (b) (c))) - (same-elements? (hashtable-values h) '#(aval bval cval)) - (equal-entries? (hashtable-entries h) '#((a) (b) (c)) '#(aval bval cval)) + (equal-entries? h '#((a) (b) (c)) '#(aval bval cval)) + (andmap ephemeron-pair? (vector->list (hashtable-cells h))) (equal? (eq-hashtable-ref h ka 1) 'aval) (equal? (eq-hashtable-ref h kb #f) 'bval) (equal? (eq-hashtable-ref h kc 'nope) 'cval) (eqv? (eq-hashtable-delete! h kb) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#((a) (c))) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#((a) (c)) '#(aval cval)) + (equal-entries? h '#((a) (c)) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -2005,9 +1999,7 @@ (hashtable-ephemeron? h2) (eq-hashtable-ephemeron? h2))) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -2016,9 +2008,7 @@ (eq-hashtable-ref h kb #f) (eq-hashtable-ref h kc 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -2026,9 +2016,7 @@ (eq-hashtable-ref h2 kb #f) (eq-hashtable-ref h2 kc 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#((a) (c)) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) (eqv? (eq-hashtable-update! h kq (lambda (x) (+ x 1)) @@ -2042,17 +2030,14 @@ (void)) (equal? (eq-hashtable-ref h kq #f) 19) (equal? (hashtable-size h) 1) - (same-elements? (hashtable-keys h) '#((q))) - (same-elements? (hashtable-values h) '#(19)) + (equal-entries? h '#((q)) '#(19)) (eqv? (begin (set! kq (void)) (collect (collect-maximum-generation)) (hashtable-size h)) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (eq-hashtable-ref h ky #f) #f) (eqv? (eq-hashtable-set! h ky 'toad) @@ -2063,10 +2048,8 @@ (eq-hashtable-update! h kz list 'frog) (void)) (equal? (eq-hashtable-ref h kz #f) '(frog)) - (same-elements? (hashtable-keys h) (vector ky kz)) - (same-elements? (hashtable-values h) (vector (eq-hashtable-ref h kz #f) 'toad)) (equal-entries? - (hashtable-entries h) + h (vector kz ky) (vector (eq-hashtable-ref h kz #f) 'toad)) (eqv? (eq-hashtable-ref h '(zippo) 'nil) 'nil) @@ -2077,31 +2060,23 @@ (not (hashtable-mutable? h3)) (eq-hashtable-ephemeron? h3) (hashtable-ephemeron? h3))) - (same-elements? (hashtable-keys h2) '#((a) (c))) - (same-elements? (hashtable-keys h3) '#((a) (c))) - (same-elements? (hashtable-values h2) '#(aval cval)) - (same-elements? (hashtable-values h3) '#(aval cval)) + (equal-entries? h2 '#((a) (c)) '#(aval cval)) + (equal-entries? h3 '#((a) (c)) '#(aval cval)) (equal? (begin (set! ka (void)) (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) '(1 1)) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-keys h3) '#((c))) - (same-elements? (hashtable-values h2) '#(cval)) - (same-elements? (hashtable-values h3) '#(cval)) - (equal-entries? (hashtable-entries h2) '#((c)) '#(cval)) - (equal-entries? (hashtable-entries h3) '#((c)) '#(cval)) + (equal-entries? h2 '#((c)) '#(cval)) + (equal-entries? h3 '#((c)) '#(cval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) 1) - (same-elements? (hashtable-keys h2) '#((c))) - (same-elements? (hashtable-values h2) '#(cval)) - (equal-entries? (hashtable-entries h2) '#((c)) '#(cval)) + (equal-entries? h2 '#((c)) '#(cval)) ; test for proper shrinkage (eqv? @@ -2305,9 +2280,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eqv?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h 'a 'aval) (void)) (equal? (list @@ -2330,9 +2303,7 @@ (hashtable-contains? h 'c)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#(a 3.4 c)) - (same-elements? (hashtable-values h) '#(bval cval aval)) - (equal-entries? (hashtable-entries h) '#(3.4 c a) '#(bval cval aval)) + (equal-entries? h '#(3.4 c a) '#(bval cval aval)) #;(same-elements? (list->vector (hashtable-map h cons)) '#((a . aval) (3.4 . bval) (c . cval))) #;(same-elements? (let ([v (make-vector 3)] [i 0]) @@ -2349,9 +2320,7 @@ (equal? (hashtable-ref h 'c 'nope) 'cval) (eqv? (hashtable-delete! h 3.4) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#(a c)) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#(a c) '#(aval cval)) + (equal-entries? h '#(a c) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -2361,9 +2330,7 @@ (eq? (hashtable-hash-function h2) #f) (eq? (hashtable-equivalence-function h2) eqv?) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -2372,9 +2339,7 @@ (hashtable-ref h 3.4 #f) (hashtable-ref h 'c 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -2382,9 +2347,7 @@ (hashtable-ref h2 3.4 #f) (hashtable-ref h2 'c 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-update! h 'q (lambda (x) (+ x 1)) @@ -2448,9 +2411,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eqv?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h ka 'aval) (void)) (equal? (list @@ -2512,9 +2473,7 @@ (hashtable-contains? h ko)) '(#t #t #t #t #t #t)) (equal? (hashtable-size h) 6) - (same-elements? (hashtable-keys h) `#((a) (b) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h) '#(aval bval cval mval nval oval)) - (equal-entries? (hashtable-entries h) `#((a) (b) (c) -5.75 17 ,ko) '#(aval bval cval mval nval oval)) + (equal-entries? h `#((a) (b) (c) -5.75 17 ,ko) '#(aval bval cval mval nval oval)) #;(same-elements? (list->vector (hashtable-map h cons)) `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) @@ -2536,9 +2495,7 @@ (eq? (hashtable-ref h (+ (most-positive-fixnum) 7 -2) 'ugh) 'oval) (eqv? (hashtable-delete! h kb) (void)) (equal? (hashtable-size h) 5) - (same-elements? (hashtable-keys h) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h) '#(aval cval mval nval oval)) - (equal-entries? (hashtable-entries h) `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -2547,9 +2504,7 @@ (eq? (hashtable-hash-function h2) #f) (eq? (hashtable-equivalence-function h2) eqv?) (equal? (hashtable-size h2) 5) - (same-elements? (hashtable-keys h) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h) '#(aval cval mval nval oval)) - (equal-entries? (hashtable-entries h) `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -2561,9 +2516,7 @@ (hashtable-ref h kn 'nope) (hashtable-ref h ko 'nope)) '(0 1 #f nope nope nope nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -2574,9 +2527,7 @@ (hashtable-ref h2 (- (+ kn 1) 1) 'nope) (hashtable-ref h2 (- (+ ko 1) 1) 'nope)) '(5 aval #f cval mval nval oval)) - (same-elements? (hashtable-keys h2) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h2) '#(aval cval mval nval oval)) - (equal-entries? (hashtable-entries h2) `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (eqv? (hashtable-update! h kq (lambda (x) (+ x 1)) @@ -2590,16 +2541,14 @@ (void)) (equal? (hashtable-ref h kq #f) 19) (equal? (hashtable-size h) 1) - (same-elements? (hashtable-keys h) '#((q))) + (equal-entries? h '#((q)) '#(19)) (eqv? (begin (set! kq (void)) (collect (collect-maximum-generation)) (hashtable-size h)) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (hashtable-ref h ky #f) #f) (eqv? (hashtable-set! h ky 'toad) @@ -2610,10 +2559,8 @@ (hashtable-update! h kz list 'frog) (void)) (equal? (hashtable-ref h kz #f) '(frog)) - (same-elements? (hashtable-keys h) (vector ky kz)) - (same-elements? (hashtable-values h) (vector (hashtable-ref h kz #f) 'toad)) (equal-entries? - (hashtable-entries h) + h (vector kz ky) (vector (hashtable-ref h kz #f) 'toad)) (eqv? (hashtable-ref h '(zippo) 'nil) 'nil) @@ -2622,8 +2569,8 @@ (and (hashtable? h3) (not (hashtable-mutable? h3)) (hashtable-weak? h3))) - (same-elements? (hashtable-keys h2) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-keys h3) `#((a) (c) -5.75 17 ,ko)) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h3 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (equal? (begin (set! ka (void)) @@ -2633,21 +2580,15 @@ (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) '(4 4)) - (same-elements? (hashtable-keys h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5))) - (same-elements? (hashtable-keys h3) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5))) - (same-elements? (hashtable-values h2) '#(cval mval nval oval)) - (same-elements? (hashtable-values h3) '#(cval mval nval oval)) - (equal-entries? (hashtable-entries h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) - (equal-entries? (hashtable-entries h3) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + (equal-entries? h3 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) 4) - (same-elements? (hashtable-keys h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5))) - (same-elements? (hashtable-values h2) '#(cval mval nval oval)) - (equal-entries? (hashtable-entries h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) ; test for proper shrinkage (equal? @@ -2700,9 +2641,7 @@ (eq? (hashtable-hash-function h) #f) (eq? (hashtable-equivalence-function h) eqv?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h ka 'aval) (void)) (equal? (list @@ -2764,9 +2703,7 @@ (hashtable-contains? h ko)) '(#t #t #t #t #t #t)) (equal? (hashtable-size h) 6) - (same-elements? (hashtable-keys h) `#((a) (b) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h) '#(aval bval cval mval nval oval)) - (equal-entries? (hashtable-entries h) `#((a) (b) (c) -5.75 17 ,ko) '#(aval bval cval mval nval oval)) + (equal-entries? h `#((a) (b) (c) -5.75 17 ,ko) '#(aval bval cval mval nval oval)) #;(same-elements? (list->vector (hashtable-map h cons)) `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) @@ -2788,9 +2725,7 @@ (eq? (hashtable-ref h (+ (most-positive-fixnum) 7 -2) 'ugh) 'oval) (eqv? (hashtable-delete! h kb) (void)) (equal? (hashtable-size h) 5) - (same-elements? (hashtable-keys h) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h) '#(aval cval mval nval oval)) - (equal-entries? (hashtable-entries h) `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -2799,9 +2734,7 @@ (eq? (hashtable-hash-function h2) #f) (eq? (hashtable-equivalence-function h2) eqv?) (equal? (hashtable-size h2) 5) - (same-elements? (hashtable-keys h) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h) '#(aval cval mval nval oval)) - (equal-entries? (hashtable-entries h) `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -2813,9 +2746,7 @@ (hashtable-ref h kn 'nope) (hashtable-ref h ko 'nope)) '(0 1 #f nope nope nope nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -2826,9 +2757,7 @@ (hashtable-ref h2 (- (+ kn 1) 1) 'nope) (hashtable-ref h2 (- (+ ko 1) 1) 'nope)) '(5 aval #f cval mval nval oval)) - (same-elements? (hashtable-keys h2) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-values h2) '#(aval cval mval nval oval)) - (equal-entries? (hashtable-entries h2) `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (eqv? (hashtable-update! h kq (lambda (x) (+ x 1)) @@ -2842,16 +2771,14 @@ (void)) (equal? (hashtable-ref h kq #f) 19) (equal? (hashtable-size h) 1) - (same-elements? (hashtable-keys h) '#((q))) + (equal-entries? h '#((q)) '#(19)) (eqv? (begin (set! kq (void)) (collect (collect-maximum-generation)) (hashtable-size h)) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (hashtable-ref h ky #f) #f) (eqv? (hashtable-set! h ky 'toad) @@ -2862,10 +2789,8 @@ (hashtable-update! h kz list 'frog) (void)) (equal? (hashtable-ref h kz #f) '(frog)) - (same-elements? (hashtable-keys h) (vector ky kz)) - (same-elements? (hashtable-values h) (vector (hashtable-ref h kz #f) 'toad)) (equal-entries? - (hashtable-entries h) + h (vector kz ky) (vector (hashtable-ref h kz #f) 'toad)) (eqv? (hashtable-ref h '(zippo) 'nil) 'nil) @@ -2874,8 +2799,8 @@ (and (hashtable? h3) (not (hashtable-mutable? h3)) (hashtable-ephemeron? h3))) - (same-elements? (hashtable-keys h2) `#((a) (c) -5.75 17 ,ko)) - (same-elements? (hashtable-keys h3) `#((a) (c) -5.75 17 ,ko)) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h3 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) (equal? (begin (set! ka (void)) @@ -2885,21 +2810,15 @@ (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) '(4 4)) - (same-elements? (hashtable-keys h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5))) - (same-elements? (hashtable-keys h3) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5))) - (same-elements? (hashtable-values h2) '#(cval mval nval oval)) - (same-elements? (hashtable-values h3) '#(cval mval nval oval)) - (equal-entries? (hashtable-entries h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) - (equal-entries? (hashtable-entries h3) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + (equal-entries? h3 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) 4) - (same-elements? (hashtable-keys h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5))) - (same-elements? (hashtable-values h2) '#(cval mval nval oval)) - (equal-entries? (hashtable-entries h2) `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) ; test for proper shrinkage (equal? @@ -3219,9 +3138,7 @@ (eq? (hashtable-hash-function h) symbol-hash) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (hashtable-set! h 'a 'aval) (void)) (equal? (list @@ -3244,9 +3161,7 @@ (hashtable-contains? h 'c)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#(a b c)) - (same-elements? (hashtable-values h) '#(bval cval aval)) - (equal-entries? (hashtable-entries h) '#(b c a) '#(bval cval aval)) + (equal-entries? h '#(b c a) '#(bval cval aval)) #;(same-elements? (list->vector (hashtable-map h cons)) '#((a . aval) (b . bval) (c . cval))) #;(same-elements? (let ([v (make-vector 3)] [i 0]) @@ -3263,9 +3178,7 @@ (equal? (hashtable-ref h 'c 'nope) 'cval) (eqv? (hashtable-delete! h 'b) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#(a c)) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#(a c) '#(aval cval)) + (equal-entries? h '#(a c) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -3277,9 +3190,7 @@ (eq? (hashtable-hash-function h2) symbol-hash) (eq? (hashtable-equivalence-function h2) eq?) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -3288,9 +3199,7 @@ (hashtable-ref h 'b #f) (hashtable-ref h 'c 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -3298,9 +3207,7 @@ (hashtable-ref h2 'b #f) (hashtable-ref h2 'c 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-update! h 'q (lambda (x) (+ x 1)) @@ -3354,9 +3261,7 @@ (eq? (hashtable-hash-function h) symbol-hash) (eq? (hashtable-equivalence-function h) eq?) (equal? (hashtable-size h) 0) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (eqv? (symbol-hashtable-set! h 'a 'aval) (void)) (equal? (list @@ -3379,9 +3284,7 @@ (symbol-hashtable-contains? h 'c)) '(#t #t #t)) (equal? (hashtable-size h) 3) - (same-elements? (hashtable-keys h) '#(a b c)) - (same-elements? (hashtable-values h) '#(bval cval aval)) - (equal-entries? (hashtable-entries h) '#(b c a) '#(bval cval aval)) + (equal-entries? h '#(b c a) '#(bval cval aval)) #;(same-elements? (list->vector (hashtable-map h cons)) '#((a . aval) (b . bval) (c . cval))) #;(same-elements? (let ([v (make-vector 3)] [i 0]) @@ -3398,9 +3301,7 @@ (equal? (symbol-hashtable-ref h 'c 'nope) 'cval) (eqv? (symbol-hashtable-delete! h 'b) (void)) (equal? (hashtable-size h) 2) - (same-elements? (hashtable-keys h) '#(a c)) - (same-elements? (hashtable-values h) '#(aval cval)) - (equal-entries? (hashtable-entries h) '#(a c) '#(aval cval)) + (equal-entries? h '#(a c) '#(aval cval)) (begin (define h2 (hashtable-copy h #t)) (and (hashtable? h2) @@ -3412,9 +3313,7 @@ (eq? (hashtable-hash-function h2) symbol-hash) (eq? (hashtable-equivalence-function h2) eq?) (equal? (hashtable-size h2) 2) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (hashtable-clear! h 4) (void)) (equal? (list @@ -3423,9 +3322,7 @@ (symbol-hashtable-ref h 'b #f) (symbol-hashtable-ref h 'c 'nope)) '(0 1 #f nope)) - (same-elements? (hashtable-keys h) '#()) - (same-elements? (hashtable-values h) '#()) - (equal-entries? (hashtable-entries h) '#() '#()) + (equal-entries? h '#() '#()) (equal? (list (hashtable-size h2) @@ -3433,9 +3330,7 @@ (symbol-hashtable-ref h2 'b #f) (symbol-hashtable-ref h2 'c 'nope)) '(2 aval #f cval)) - (same-elements? (hashtable-keys h2) '#(a c)) - (same-elements? (hashtable-values h2) '#(aval cval)) - (equal-entries? (hashtable-entries h2) '#(a c) '#(aval cval)) + (equal-entries? h2 '#(a c) '#(aval cval)) (eqv? (symbol-hashtable-update! h 'q (lambda (x) (+ x 1)) @@ -3538,9 +3433,7 @@ (not (hashtable-ephemeron? $ght)) (eqv? (hashtable-size $ght) (vector-length $ght-keys1)) (eqv? (#%$hashtable-veclen $ght) 8) - (same-elements? (hashtable-keys $ght) $ght-keys1) - (same-elements? (hashtable-values $ght) $ght-vals1) - (equal-entries? (hashtable-entries $ght) $ght-keys1 $ght-vals1) + (equal-entries? $ght $ght-keys1 $ght-vals1) (begin (define $ght-keys2 '#((a . b) (1 . 2) 3/4 3.4 3.5 1e23 #e1e50 1+1i 3+3.2i -15 #e1e-50 #1=(a . #1#) (#2=(#2# b c)))) (define $ght-vals2 '#(a b c d e f g h i j k l m)) @@ -3550,9 +3443,7 @@ $ght-vals2) (eq? (hashtable-size $ght) (+ (vector-length $ght-keys1) (vector-length $ght-keys2)))) (> (#%$hashtable-veclen $ght) 8) - (same-elements? (hashtable-keys $ght) ($vector-append $ght-keys1 $ght-keys2)) - (same-elements? (hashtable-values $ght) ($vector-append $ght-vals1 $ght-vals2)) - (equal-entries? (hashtable-entries $ght) ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2)) + (equal-entries? $ght ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2)) #;(same-elements? (list->vector (hashtable-map $ght cons)) (vector-map cons ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2))) @@ -3607,29 +3498,21 @@ (lambda (k) (hashtable-delete! $ght k)) $ght-keys1) #t) - (same-elements? (hashtable-keys $ght) $ght-keys2) - (same-elements? (hashtable-values $ght) $ght-vals2) - (equal-entries? (hashtable-entries $ght) $ght-keys2 $ght-vals2) + (equal-entries? $ght $ght-keys2 $ght-vals2) (eqv? (hashtable-size $ght) (vector-length $ght-keys2)) (begin (vector-for-each (lambda (k) (hashtable-delete! $ght k)) $ght-keys2) #t) - (same-elements? (hashtable-keys $ght) '#()) - (same-elements? (hashtable-values $ght) '#()) - (equal-entries? (hashtable-entries $ght) '#() '#()) + (equal-entries? $ght '#() '#()) (eqv? (hashtable-size $ght) 0) (eqv? (#%$hashtable-veclen $ght) 8) ; make sure copies are unaffected by deletions (eq? (hashtable-size $ght2) (+ (vector-length $ght-keys1) (vector-length $ght-keys2))) - (same-elements? (hashtable-keys $ght2) ($vector-append $ght-keys1 $ght-keys2)) - (same-elements? (hashtable-values $ght2) ($vector-append $ght-vals1 $ght-vals2)) - (equal-entries? (hashtable-entries $ght2) ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2)) + (equal-entries? $ght2 ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2)) (eq? (hashtable-size $ght3) (+ (vector-length $ght-keys1) (vector-length $ght-keys2))) - (same-elements? (hashtable-keys $ght3) ($vector-append $ght-keys1 $ght-keys2)) - (same-elements? (hashtable-values $ght3) ($vector-append $ght-vals1 $ght-vals2)) - (equal-entries? (hashtable-entries $ght3) ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2)) + (equal-entries? $ght3 ($vector-append $ght-keys1 $ght-keys2) ($vector-append $ght-vals1 $ght-vals2)) (begin (hashtable-clear! $ght3) (and @@ -3672,9 +3555,7 @@ (set-cdr! a (cons (cdr a) 'vb)) a) '(#vu8(1 2 3) . (bv . vb))) - (same-elements? (hashtable-keys $ght3) '#((a . b) 1e23 #vu8(1 2 3))) - (same-elements? (hashtable-values $ght3) '#(161 14 (bv . vb))) - (equal-entries? (hashtable-entries $ght3) '#((a . b) 1e23 #vu8(1 2 3)) '#(161 14 (bv . vb))) + (equal-entries? $ght3 '#((a . b) 1e23 #vu8(1 2 3)) '#(161 14 (bv . vb))) (let () ; carl's test program, with a few additions (define cov:prof-hash (lambda (V) @@ -3858,19 +3739,20 @@ (with-output-to-file "testfile.ss" (lambda () (pretty-print - '(begin - (define-syntax $feh-ls + '(module ($feh-ls $feh-ht) + (define-syntax ls (let ([ls '(1 2 3)]) (lambda (x) #`(quote #,(datum->syntax #'* ls))))) + (define $feh-ls ls) (define $feh-ht (let () (define-syntax a (let ([ht (make-eq-hashtable)]) (eq-hashtable-set! ht 'q 'p) - (eq-hashtable-set! ht $feh-ls (cdr $feh-ls)) - (eq-hashtable-set! ht (cdr $feh-ls) (cddr $feh-ls)) - (eq-hashtable-set! ht (cddr $feh-ls) $feh-ls) + (eq-hashtable-set! ht ls (cdr ls)) + (eq-hashtable-set! ht (cdr ls) (cddr ls)) + (eq-hashtable-set! ht (cddr ls) ls) (lambda (x) #`(quote #,(datum->syntax #'* ht))))) a))))) 'replace) diff -Nru chezscheme-9.5+dfsg/mats/io.ms chezscheme-9.5.4+dfsg/mats/io.ms --- chezscheme-9.5+dfsg/mats/io.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/io.ms 2020-08-31 02:35:12.000000000 +0000 @@ -105,17 +105,21 @@ (let ([c (get-u8 p)]) (cons (integer->char c) (f))))))))) "a b c d e") - (equal? (call-with-port - (open-file-input-port "testfile.ss") - (lambda (p) - (list->string - (let f () - (let ([c (lookahead-u8 p)]) - (if (eof-object? c) - '() - (let ([c (get-u8 p)]) - (cons (integer->char c) (f))))))))) - "a b c d e") + (andmap (lambda (p) + (equal? (call-with-port + p + (lambda (p) + (list->string + (let f () + (let ([c (lookahead-u8 p)]) + (if (eof-object? c) + '() + (let ([c (get-u8 p)]) + (cons (integer->char c) (f))))))))) + "a b c d e")) + (list (open-file-input-port "testfile.ss") + (open-bytevector-input-port '#vu8(97 32 98 32 99 32 100 32 101)) + (open-bytevector-input-port (bytevector->immutable-bytevector '#vu8(97 32 98 32 99 32 100 32 101))))) ; test various errors related to input ports (begin (set! ip (open-file-input-port "testfile.ss")) (and (port? ip) (input-port? ip))) @@ -1292,21 +1296,24 @@ (define $bop (let-values ([(op get) (open-bytevector-output-port)]) (set-binary-port-output-buffer! op #vu8(1 2 3 4 5)) op)) #t) ; textual input - (equal? - (let ([ip (open-string-input-port "hello")]) - (let ([buffer0 (textual-port-input-buffer ip)] - [index0 (textual-port-input-index ip)] - [size0 (textual-port-input-size ip)] - [count0 (textual-port-input-count ip)]) - (read-char ip) - (list - (list buffer0 index0 size0 count0) - (list - (textual-port-input-buffer ip) - (textual-port-input-index ip) - (textual-port-input-size ip) - (textual-port-input-count ip))))) - '(("hello" 0 5 5) ("hello" 1 5 4))) + (andmap (lambda (str) + (equal? + (let ([ip (open-string-input-port str)]) + (let ([buffer0 (textual-port-input-buffer ip)] + [index0 (textual-port-input-index ip)] + [size0 (textual-port-input-size ip)] + [count0 (textual-port-input-count ip)]) + (read-char ip) + (list + (list buffer0 index0 size0 count0) + (list + (textual-port-input-buffer ip) + (textual-port-input-index ip) + (textual-port-input-size ip) + (textual-port-input-count ip))))) + '(("hello" 0 5 5) ("hello" 1 5 4)))) + (list "hello" + (string->immutable-string "hello"))) (equal? (let ([ip (open-string-input-port "hello")]) (let ([buffer0 (textual-port-input-buffer ip)] @@ -2126,7 +2133,63 @@ (= q (custom-port-buffer-size))))) ) +(mat compress-parameters + (error? ; unsupported format + (compress-format 'foo)) + (error? ; unsupported format + (compress-format "gzip")) + (eq? (compress-format) 'lz4) + (eq? (parameterize ([compress-format 'gzip]) (compress-format)) 'gzip) + (eq? (parameterize ([compress-format 'lz4]) (compress-format)) 'lz4) + (error? ; unsupported level + (compress-level 'foo)) + (error? ; unsupported level + (compress-level 1)) + (eq? (compress-level) 'medium) + (eq? (parameterize ([compress-level 'low]) (compress-level)) 'low) + (eq? (parameterize ([compress-level 'medium]) (compress-level)) 'medium) + (eq? (parameterize ([compress-level 'high]) (compress-level)) 'high) + (eq? (parameterize ([compress-level 'maximum]) (compress-level)) 'maximum) + (begin + (define (fnlength ifn) (call-with-port (open-file-input-port ifn) port-length)) + (define (compress-file ifn ofn fmt lvl) + (call-with-port (open-file-input-port ifn) + (lambda (ip) + (call-with-port (parameterize ([compress-format fmt] [compress-level lvl]) + (open-file-output-port ofn (file-options compressed replace))) + (lambda (op) (put-bytevector op (get-bytevector-all ip)))))) + (fnlength ofn)) + (define (compress-file-test fmt) + (let ([orig (fnlength "prettytest.ss")] + [low (compress-file "prettytest.ss" "testfile.ss" fmt 'low)] + [medium (compress-file "prettytest.ss" "testfile.ss" fmt 'medium)] + [high (compress-file "prettytest.ss" "testfile.ss" fmt 'high)] + [maximum (compress-file "prettytest.ss" "testfile.ss" fmt 'maximum)]) + (define-syntax test1 + (syntax-rules () + [(_ level) + (unless (< level orig) (errorf #f "~s ~s did not compress" fmt 'level))])) + (define-syntax test2 + (syntax-rules () + [(_ level1 level2) + (unless (<= level2 level1) (errorf #f "~s ~s did worse than ~s" fmt 'level2 'level1))])) + (test1 low) + (test1 medium) + (test1 high) + (test1 maximum) + (test2 low medium) + (test2 medium high) + (test2 high maximum) + (unless (< maximum low) (errorf #f "~s maximum didn't do better than low" fmt)))) + (compress-file-test 'lz4) + (compress-file-test 'gzip) + #t) +) + (mat compression + (parameters [compress-format 'gzip 'lz4] [compress-level 'low 'medium 'high 'maximum]) + (and (memq (compress-format) '(gzip lz4)) #t) + (and (memq (compress-level) '(low medium high maximum)) #t) (let () (define cp (lambda (src dst) @@ -3071,6 +3134,7 @@ ) (mat compression-textual + (parameters [compress-format 'gzip 'lz4] [compress-level 'low 'medium 'high 'maximum]) (let () (define cp (lambda (src dst) diff -Nru chezscheme-9.5+dfsg/mats/mat.ss chezscheme-9.5.4+dfsg/mats/mat.ss --- chezscheme-9.5+dfsg/mats/mat.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/mat.ss 2020-08-31 02:35:12.000000000 +0000 @@ -19,7 +19,17 @@ (eval-when (load eval) (define-syntax mat (lambda (x) - (syntax-case x () + (syntax-case x (parameters) + [(_ x (parameters [param val ...] ...) e ...) + #'(let f ([p* (list param ...)] [v** (list (list val ...) ...)]) + (if (null? p*) + (mat x e ...) + (let ([p (car p*)]) + (for-each + (lambda (v) + (parameterize ([p v]) + (f (cdr p*) (cdr v**)))) + (car v**)))))] [(_ x e ...) (with-syntax ([(source ...) (map (lambda (clause) @@ -30,8 +40,6 @@ (define enable-cp0 (make-parameter #f)) -(define mat-run) -(define mat-file) (define-syntax mat/cf (syntax-rules (testfile) [(_ (testfile ?path) expr ...) @@ -45,9 +53,9 @@ #t)] [(_ expr ...) (mat/cf (testfile "testfile") expr ...)])) -(let () +(define mat-output (make-parameter (current-output-port))) -(define *mat-output* (current-output-port)) +(let () (define mat-load (lambda (in) @@ -64,8 +72,8 @@ (if (warning? c) (raise-continuable c) (begin - (fprintf *mat-output* "Error reading mat input: ") - (display-condition c *mat-output*) + (fprintf (mat-output) "Error reading mat input: ") + (display-condition c (mat-output)) (reset)))) (lambda () (load in)))))))) @@ -164,10 +172,10 @@ (call-with-values (lambda () (#%$locate-source sfd fp #t)) (case-lambda - [() (fprintf *mat-output* "~a at char ~a of ~a~%" msg fp (source-file-descriptor-path sfd))] - [(path line char) (fprintf *mat-output* "~a at line ~a, char ~a of ~a~%" msg line char path)])))) - (fprintf *mat-output* "~a~%" msg)) - (flush-output-port *mat-output*)))) + [() (fprintf (mat-output) "~a at char ~a of ~a~%" msg fp (source-file-descriptor-path sfd))] + [(path line char) (fprintf (mat-output) "~a at line ~a, char ~a of ~a~%" msg line char path)])))) + (fprintf (mat-output) "~a~%" msg)) + (flush-output-port (mat-output))))) (define ununicode ; sanitizer for expected exception messages to make sure we don't end up @@ -182,6 +190,38 @@ [(fx> (char->integer c) 127) (fprintf op "U+~x" (char->integer c)) (f)] [else (write-char c op) (f)])))))) +(define store-coverage + (lambda (universe-ct ct path) + (call-with-port + (open-file-output-port path + (file-options replace compressed) + (buffer-mode block) + (current-transcoder)) + (lambda (op) + (put-source-table op + (if (eq? universe-ct ct) + ct + (let ([new-ct (make-source-table)]) + (for-each + (lambda (p) + (let ([src (car p)] [count (cdr p)]) + (when (source-table-contains? universe-ct src) + (source-table-set! new-ct src count)))) + (source-table-dump ct)) + new-ct))))))) + +(define load-coverage + (lambda (ct) + (lambda (path) + (call-with-port + (open-file-input-port path + (file-options compressed) + (buffer-mode block) + (current-transcoder)) + (lambda (ip) (get-source-table! ip ct +)))))) + +(set! coverage-table (make-parameter #f)) + (set! mat-file (lambda (dir) (unless (string? dir) @@ -189,109 +229,156 @@ (unless (file-exists? dir) (mkdir dir)) (lambda (mat) (unless (string? mat) - (errorf 'mat-file "~s is not a string" fn)) + (errorf 'mat-file "~s is not a string" mat)) (let ([ifn (format "~a.ms" mat)] [ofn (format "~a/~a.mo" dir mat)]) (printf "matting ~a with output to ~a~%" ifn ofn) (delete-file ofn #f) - (fluid-let ([*mat-output* (open-output-file ofn)]) + (parameterize ([mat-output (open-output-file ofn)]) (dynamic-wind (lambda () #f) - (lambda () (mat-load ifn)) - (lambda () (close-output-port *mat-output*)))))))) + (lambda () + (let ([go (lambda () (mat-load ifn))] [universe-ct (coverage-table)]) + (if universe-ct + (let-values ([(ct . ignore) (with-profile-tracker go)]) + (store-coverage universe-ct ct (format "~a/~a.covout" dir mat))) + (go)))) + (lambda () (close-output-port (mat-output))))))))) + +(set! record-run-coverage + (lambda (covout th) + (let ([universe-ct (coverage-table)]) + (if universe-ct + (let-values ([(ct . ignore) (with-profile-tracker #t th)]) + (store-coverage universe-ct ct covout)) + (th))))) + +(set! load-coverage-files + (lambda path* + (let ([ct (make-source-table)]) + (for-each (load-coverage ct) path*) + ct))) + +(set! combine-coverage-files + (lambda (covout covout*) + (let ([ct (make-source-table)]) + (for-each (load-coverage ct) covout*) + (store-coverage ct ct covout)))) + +(set! coverage-percent + (lambda (covout . covin*) + (let ([n (source-table-size (load-coverage-files covout))] + [d (source-table-size (apply load-coverage-files covin*))]) + (printf "~a: covered ~s of ~s source expressions (~s%)\n" + covout n d (round (/ (* n 100) d)))))) (set! mat-run - (case-lambda - [(name) - (fprintf *mat-output* "Warning: empty mat for ~s.~%" name)] - [(name . clauses) - (fprintf *mat-output* "~%Starting mat ~s.~%" name) - (do ([clauses clauses (cdr clauses)] - [count 1 (+ count 1)]) - ((null? clauses) 'done) - (let ([clause (caar clauses)] [source (cadar clauses)]) - (with-exception-handler - (lambda (c) - (if (warning? c) - (raise-continuable c) - (begin - (fprintf *mat-output* "Error printing mat clause: ") - (display-condition c *mat-output*) - (reset)))) - (lambda () - (pretty-print clause *mat-output*) - (flush-output-port *mat-output*))) - (if (and (list? clause) - (= (length clause) 2) - (memq (car clause) '(sanitized-error? error? warning?))) - (let ([expect (case (car clause) [(sanitized-error? error?) 'error] [(warning?) 'warning])]) - (if (and (= (optimize-level) 3) (eq? expect 'error)) - (fprintf *mat-output* "Ignoring error check at optimization level 3.~%") - (let ([ans (mat-one-exp expect (lambda () (eval (cadr clause))) (eq? (car clause) 'sanitized-error?))]) - (cond - [(and (pair? ans) (eq? (car ans) expect)) - (fprintf *mat-output* - "Expected ~s in mat ~s: \"~a\".~%" - expect name (ununicode (cdr ans)))] - [else - (mat-error source "Bug in mat ~s clause ~s" name count)])))) - (let ([ans (mat-one-exp #f (lambda () (eval clause)) #f)]) + (case-lambda + [(name) + (fprintf (mat-output) "Warning: empty mat for ~s.~%" name)] + [(name . clauses) + (fprintf (mat-output) "~%Starting mat ~s.~%" name) + ; release counters for reclaimed code objects between mat groups to reduce gc time + (when (compile-profile) (profile-release-counters)) + (do ([clauses clauses (cdr clauses)] + [count 1 (+ count 1)]) + ((null? clauses) 'done) + (let ([clause (caar clauses)] [source (cadar clauses)]) + (with-exception-handler + (lambda (c) + (if (warning? c) + (raise-continuable c) + (begin + (fprintf (mat-output) "Error printing mat clause: ") + (display-condition c (mat-output)) + (reset)))) + (lambda () + (pretty-print clause (mat-output)) + (flush-output-port (mat-output)))) + (if (and (list? clause) + (= (length clause) 2) + (memq (car clause) '(sanitized-error? error? warning?))) + (let ([expect (case (car clause) [(sanitized-error? error?) 'error] [(warning?) 'warning])]) + (if (and (= (optimize-level) 3) (eq? expect 'error)) + (fprintf (mat-output) "Ignoring error check at optimization level 3.~%") + (let ([ans (mat-one-exp expect (lambda () (eval (cadr clause))) (eq? (car clause) 'sanitized-error?))]) (cond - [(pair? ans) - (mat-error source - "Error in mat ~s clause ~s: \"~a\"" - name - count - (cdr ans))] - [(eq? ans 'false) - (mat-error source - "Bug in mat ~s clause ~s" - name - count)] - [(eq? ans 'true) (void)] - [else - (mat-error source - "Bug (nonboolean, nonstring return value) in mat ~s clause ~s" - name - count)])))))])) - + [(and (pair? ans) (eq? (car ans) expect)) + (fprintf (mat-output) + "Expected ~s in mat ~s: \"~a\".~%" + expect name (ununicode (cdr ans)))] + [else + (mat-error source "Bug in mat ~s clause ~s" name count)])))) + (let ([ans (mat-one-exp #f (lambda () (eval clause)) #f)]) + (cond + [(pair? ans) + (mat-error source + "Error in mat ~s clause ~s: \"~a\"" + name + count + (cdr ans))] + [(eq? ans 'false) + (mat-error source + "Bug in mat ~s clause ~s" + name + count)] + [(eq? ans 'true) (void)] + [else + (mat-error source + "Bug (nonboolean, nonstring return value) in mat ~s clause ~s" + name + count)])))))])) + );let (define equivalent-expansion? ; same modulo renaming of gensyms ; procedure in either input is used as predicate for other (lambda (x y) - (let ([alist '()]) - (let e? ([x x] [y y]) - (cond - [(procedure? x) (x y)] - [(procedure? y) (y x)] - [(eqv? x y) #t] - [(pair? x) - (and (pair? y) (e? (car x) (car y)) (e? (cdr x) (cdr y)))] - [(or (and (gensym? x) (symbol? y)) - (and (gensym? y) (symbol? x))) - (cond - [(assq x alist) => (lambda (a) (eq? y (cdr a)))] - [else (set! alist (cons `(,x . ,y) alist)) #t])] - [(string? x) (and (string? y) (string=? x y))] - [(bytevector? x) (and (bytevector? y) (bytevector=? x y))] - [(vector? x) - (and (vector? y) - (fx= (vector-length x) (vector-length y)) - (let f ([i (fx- (vector-length x) 1)]) - (or (fx< i 0) - (and (e? (vector-ref x i) (vector-ref y i)) - (f (fx1- i))))))] - [(fxvector? x) - (and (fxvector? y) - (fx= (fxvector-length x) (fxvector-length y)) - (let f ([i (fx- (fxvector-length x) 1)]) - (if (fx< i 0) - k - (and (fx= (fxvector-ref x i) (fxvector-ref y i)) - (f (fx1- i))))))] - [(box? x) (and (box? y) (e? (unbox x) (unbox y)))] - [else #f]))))) + (let ([alist '()] [oops? #f]) + (or (let e? ([x x] [y y]) + (or (cond + [(procedure? x) (x y)] + [(procedure? y) (y x)] + [(eqv? x y) #t] + [(pair? x) + (and (pair? y) (e? (car x) (car y)) (e? (cdr x) (cdr y)))] + [(or (and (gensym? x) (symbol? y)) + (and (gensym? y) (symbol? x))) + (cond + [(assq x alist) => (lambda (a) (eq? y (cdr a)))] + [else (set! alist (cons `(,x . ,y) alist)) #t])] + [(string? x) (and (string? y) (string=? x y))] + [(bytevector? x) (and (bytevector? y) (bytevector=? x y))] + [(vector? x) + (and (vector? y) + (fx= (vector-length x) (vector-length y)) + (let f ([i (fx- (vector-length x) 1)]) + (or (fx< i 0) + (and (e? (vector-ref x i) (vector-ref y i)) + (f (fx1- i))))))] + [(fxvector? x) + (and (fxvector? y) + (fx= (fxvector-length x) (fxvector-length y)) + (let f ([i (fx- (fxvector-length x) 1)]) + (or (fx< i 0) + (and (fx= (fxvector-ref x i) (fxvector-ref y i)) + (f (fx1- i))))))] + [(box? x) (and (box? y) (e? (unbox x) (unbox y)))] + [else #f]) + (begin + (unless oops? + (set! oops? #t) + (printf "failure in equivalent-expansion?:\n") + (pretty-print x) + (printf "is not equivalent to\n") + (pretty-print y)) + #f))) + (begin + (printf "original expressions:\n") + (pretty-print x) + (printf "is not equivalent to\n") + (pretty-print y) + #f))))) (define *fuzz* 1e-14) @@ -352,7 +439,7 @@ (list->string (subst #\\ #\/ (string->list p))) p))) -(module (separate-eval run-script separate-compile) +(module separate-eval-tools (separate-eval run-script separate-compile) (define (slurp ip) (with-output-to-string (lambda () @@ -366,11 +453,16 @@ (open-process-ports (format "~a -q" (patch-exec-path *scheme*)) (buffer-mode block) (native-transcoder))]) + (pretty-print `(#%$enable-check-prelex-flags ,(#%$enable-check-prelex-flags)) to-stdin) (for-each (lambda (expr) (pretty-print expr to-stdin)) expr*) (close-port to-stdin) (let* ([stdout-stuff (slurp from-stdout)] [stderr-stuff (slurp from-stderr)]) - (unless (string=? stderr-stuff "") (errorf who "~a" stderr-stuff)) + (when (string=? stderr-stuff "") + (printf "$separate-eval command succeeeded with\nSTDERR:\n~a\nSTDOUT:\n~a\nEND\n" stderr-stuff stdout-stuff)) + (unless (string=? stderr-stuff "") + (printf "$separate-eval command failed with\nSTDERR:\n~a\nSTDOUT:\n~a\nEND\n" stderr-stuff stdout-stuff) + (errorf who "~a" stderr-stuff)) (close-port from-stdout) (close-port from-stderr) stdout-stuff))) @@ -396,6 +488,7 @@ [(x) (separate-compile 'compile-file x)] [(cf x) ($separate-eval 'separate-compile `((,cf ,(if (symbol? x) (format "testfile-~a" x) x))))]))) +(import separate-eval-tools) #;(collect-request-handler (begin @@ -427,12 +520,13 @@ (define test-cp0-expansion (rec test-cp0-expansion (case-lambda - [(expr result) (test-cp0-expansion equivalent-expansion? expr result)] - [(equiv? expr result) - (equiv? - (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) - (expand/optimize `(let () (import scheme) ,expr))) - result)]))) + [(expr expected) (test-cp0-expansion equivalent-expansion? expr expected)] + [(equiv? expr expected) + (let ([actual (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) + (expand/optimize `(let () (import scheme) ,expr)))]) + (unless (equiv? actual expected) + (errorf 'test-cp0-expansion "expected ~s for ~s, got ~s\n" expected expr actual)) + #t)]))) (define rm-rf (lambda (path) @@ -449,3 +543,33 @@ (with-output-to-file filename (lambda () (for-each pretty-print expr*)) 'replace))) + +(define touch + (lambda (objfn srcfn) + (let loop () + (let ([p (open-file-input/output-port srcfn (file-options no-fail no-truncate))]) + (put-u8 p (lookahead-u8 p)) + (close-port p)) + (when (file-exists? objfn) + (unless (time>? (file-modification-time srcfn) (file-modification-time objfn)) + (sleep (make-time 'time-duration 1000000 1)) + (loop)))) + #t)) + +(define preexisting-profile-dump-entry? + (let ([ht (make-eq-hashtable)]) + (for-each (lambda (x) (eq-hashtable-set! ht (car x) #t)) (profile-dump)) + (lambda (x) (eq-hashtable-contains? ht (car x))))) + +(define heap-check-interval (make-parameter 0)) + +(collect-request-handler + (let ([counter 0]) + (lambda () + (parameterize ([#%$enable-check-heap + (let ([interval (heap-check-interval)]) + (and (not (fx= interval 0)) + (let ([n (fxmod (fx+ counter 1) interval)]) + (set! counter n) + (fx= n 0))))]) + (collect))))) diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6fb chezscheme-9.5.4+dfsg/mats/Mf-a6fb --- chezscheme-9.5+dfsg/mats/Mf-a6fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6fb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = a6fb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6le chezscheme-9.5.4+dfsg/mats/Mf-a6le --- chezscheme-9.5+dfsg/mats/Mf-a6le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = a6le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m64 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m64 -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6nb chezscheme-9.5.4+dfsg/mats/Mf-a6nb --- chezscheme-9.5+dfsg/mats/Mf-a6nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6nb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = a6nb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6nt chezscheme-9.5.4+dfsg/mats/Mf-a6nt --- chezscheme-9.5+dfsg/mats/Mf-a6nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6nt 2020-08-31 02:35:12.000000000 +0000 @@ -15,14 +15,17 @@ m = a6nt -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so -mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj foreign2.obj foreign3.obj +mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj foreign2.obj foreign3.obj foreign4.obj include Mf-base +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + foreign1.so: $(fsrc) - cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)" + cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv954.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /MD /nologo $<" diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6ob chezscheme-9.5.4+dfsg/mats/Mf-a6ob --- chezscheme-9.5+dfsg/mats/Mf-a6ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6ob 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = a6ob -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6osx chezscheme-9.5.4+dfsg/mats/Mf-a6osx --- chezscheme-9.5+dfsg/mats/Mf-a6osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6osx 2020-08-31 02:35:12.000000000 +0000 @@ -15,7 +15,7 @@ m = a6osx -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base diff -Nru chezscheme-9.5+dfsg/mats/Mf-a6s2 chezscheme-9.5.4+dfsg/mats/Mf-a6s2 --- chezscheme-9.5+dfsg/mats/Mf-a6s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-a6s2 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = a6s2 -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - gcc -m64 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + gcc -m64 -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c gcc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-arm32le chezscheme-9.5.4+dfsg/mats/Mf-arm32le --- chezscheme-9.5+dfsg/mats/Mf-arm32le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-arm32le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = arm32le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -fomit-frame-pointer -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-base chezscheme-9.5.4+dfsg/mats/Mf-base --- chezscheme-9.5+dfsg/mats/Mf-base 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-base 2020-08-31 02:35:12.000000000 +0000 @@ -47,10 +47,12 @@ ExeSuffix = endif -# Scheme is the scheme executable to test, and SCHEMEHEAPDIRS tells -# it where to find its boot files +# Scheme is the scheme executable to test, SCHEMEHEAPDIRS tells +# it where to find its boot files, and CHEZSCHEMELIBDIRS tells +# it where to find libraries. Scheme = ../bin/$m/scheme${ExeSuffix} export SCHEMEHEAPDIRS=.${dirsep}../boot/%m +export CHEZSCHEMELIBDIRS=. # Include is the directory holding scheme.h. Include = ../boot/$m @@ -82,6 +84,10 @@ defaultctb = (collect-trip-bytes) ctb = $(defaultctb) +# cn defines the value to which collect-notify is set: f for #f, t for #t +defaultcn = f +cn = $(defaultcn) + # cgr is the value to which collect-generation-radix is set. defaultcgr = (collect-generation-radix) cgr = $(defaultcgr) @@ -104,17 +110,32 @@ defaultspi = f spi = $(defaultspi) -# ehc defines the value to which $enable-check-heap is set: -# f for #f, t for #t -defaultehc = f -ehc = $(defaultehc) +# hci defines the value to which heap-check-interval (mat.ss) is set: +# 0 to disable, > 0 to enable +defaulthci = 0 +hci = $(defaulthci) # eoc determines whether object counts are enabled defaulteoc = t eoc = $(defaulteoc) +# cl determines the commonization level +defaultcl = (commonization-level) +cl = $(defaultcl) + +# ecpf determines whether the compiler checks prelex flags +defaultecpf = t +ecpf = $(defaultecpf) + +# c determines whether mat coverage (.covout) files are created +defaultc = f +c = $(defaultc) + +# set of coverage files to load +coverage-files = ../boot/$m/petite.covin ../boot/$m/scheme.covin + # set of mats to run -mats = primvars 3 4 5_1 5_2 5_3 5_4 5_5 bytevector thread\ +mats = primvars 3 4 5_1 5_2 5_3 5_4 5_5 bytevector thread profile\ misc cp0 5_6 5_7 5_8 6 io format 7 record hash enum 8 fx fl cfl foreign\ ftype unix windows examples ieee date exceptions oop @@ -130,25 +151,29 @@ # prettysrc is src to use for pretty-print test; we leave out mat files # with cycles, e.g., primvars.ms, misc.ms, 4.ms, 5_1.ms, hash.ms -prettysrc = 3.ms 5_3.ms 5_4.ms 5_5.ms bytevector.ms\ - thread.ms 5_6.ms 5_7.ms 5_8.ms 6.ms io.ms format.ms 7.ms record.ms enum.ms 8.ms\ +prettysrc = 3.ms 5_3.ms 5_4.ms 5_5.ms bytevector.ms thread.ms profile.ms\ + 5_6.ms 5_7.ms 5_8.ms 6.ms io.ms format.ms 7.ms record.ms enum.ms 8.ms\ fx.ms fl.ms cfl.ms foreign.ms unix.ms windows.ms examples.ms ieee.ms date.ms\ exceptions.ms $(objdir)/%.mo : %.ms mat.so echo '(optimize-level $o)'\ '(#%$$suppress-primitive-inlining #${spi})'\ - '(#%$$enable-check-heap #${ehc})'\ + '(heap-check-interval ${hci})'\ + '(#%$$enable-check-prelex-flags #${ecpf})'\ '(compile-profile #$p)'\ + '(collect-notify #${cn})'\ '(collect-trip-bytes ${ctb})'\ '(collect-generation-radix ${cgr})'\ '(collect-maximum-generation ${cmg})'\ '(enable-object-counts #${eoc})'\ + '(commonization-level ${cl})'\ '(compile-interpret-simple #${cis})'\ '(set! *examples-directory* "${Examples}")'\ '(enable-cp0 #${cp0})'\ '(set! *scheme* "${Scheme}")'\ '(current-eval ${eval})'\ + '(when #$c (coverage-table (load-coverage-files ${coverage-files:%="%"})))'\ '(time ((mat-file "$(objdir)") "$*"))'\ '(unless (= (#%$$check-heap-errors) 0)'\ ' (fprintf (console-error-port) "check heap detected errors---grep standard output for !!!\n")'\ @@ -159,17 +184,21 @@ %.mo : %.ms mat.so echo '(optimize-level $o)'\ '(#%$$suppress-primitive-inlining #${spi})'\ - '(#%$$enable-check-heap #${ehc})'\ + '(heap-check-interval ${hci})'\ + '(#%$$enable-check-prelex-flags #${ecpf})'\ '(compile-profile #$p)'\ + '(collect-notify #${cn})'\ '(collect-trip-bytes ${ctb})'\ '(collect-generation-radix ${cgr})'\ '(collect-maximum-generation ${cmg})'\ '(enable-object-counts #${eoc})'\ + '(commonization-level ${cl})'\ '(compile-interpret-simple #${cis})'\ '(set! *examples-directory* "${Examples}")'\ '(enable-cp0 #${cp0})'\ '(set! *scheme* "${Scheme}")'\ '(current-eval ${eval})'\ + '(when #$c (coverage-table (load-coverage-files ${coverage-files:%="%"})))'\ '(time ((mat-file ".") "$*"))'\ '(parameterize ([source-directories (quote ("." "../s"))]) (when #${pdhtml} (profile-dump-html)))'\ '(unless (= (#%$$check-heap-errors) 0)'\ @@ -211,6 +240,21 @@ $(MAKE) doerrors $(MAKE) doreport +docoverage: mat.so + if [ "$c" = "t" ] ; then\ + echo '(reset-handler abort) (combine-coverage-files "$(objdir)/all.covout" (quote ($(mats:%="$(objdir)/%.covout"))))' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "$(objdir)/all.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "$(objdir)/run.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + fi + +doallcoverage: mat.so + if [ "$c" = "t" ] ; then\ + echo '(reset-handler abort) (combine-coverage-files "all.covout" (map symbol->string (quote ($(shell echo */all.covout)))))' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "all.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (combine-coverage-files "run.covout" (map symbol->string (quote ($(shell echo */run.covout)))))' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "run.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + fi + partialx: $(MAKE) allxhelp o=0 $(MAKE) allxhelp o=3 @@ -220,16 +264,17 @@ allx: prettyclean $(MAKE) allxhelp o=0 $(MAKE) allxhelp o=3 - $(MAKE) allxhelp o=0 cp0=t - $(MAKE) allxhelp o=3 cp0=t + $(MAKE) allxhelp o=0 cp0=t cl=3 + $(MAKE) allxhelp o=3 cp0=t cl=3 $(MAKE) allxhelp o=0 spi=t rmg=2 p=t $(MAKE) allxhelp o=3 spi=t rmg=2 p=t - $(MAKE) allxhelp o=0 eval=interpret - $(MAKE) allxhelp o=3 eval=interpret + $(MAKE) allxhelp o=0 eval=interpret cl=6 + $(MAKE) allxhelp o=3 eval=interpret cl=6 $(MAKE) allxhelp o=0 eval=interpret cp0=t rmg=2 $(MAKE) allxhelp o=3 eval=interpret cp0=t rmg=2 - $(MAKE) allxhelp o=0 eoc=f ehc=t - $(MAKE) allxhelp o=3 eval=interpret ehc=t rmg=2 + $(MAKE) allxhelp o=0 eoc=f hci=101 cl=9 + $(MAKE) allxhelp o=3 eval=interpret hci=101 rmg=2 + $(MAKE) doallcoverage just-reports: for EVAL in compile interpret ; do\ @@ -250,16 +295,17 @@ bully: -$(MAKE) allxhelpnotall spi=t cp0=f - -$(MAKE) allxhelp spi=f cp0=f ctb='(/ (collect-trip-bytes) 64)' ehc=t + -$(MAKE) allxhelp spi=f cp0=f cl=9 ctb='(/ (collect-trip-bytes) 64)' hci=503 -$(MAKE) allxhelp spi=t cp0=f cis=t cmg=1 - -$(MAKE) allxhelp spi=f cp0=f cis=t cmg=6 ehc=t + -$(MAKE) allxhelp spi=f cp0=f cis=t cmg=6 hci=101 -$(MAKE) allxhelp spi=t cp0=t ctb='(/ (collect-trip-bytes) 64)' cgr=6 - -$(MAKE) allxhelp spi=t cp0=f p=t eoc=f ehc=t - -$(MAKE) allxhelp spi=f cp0=t p=t ehc=t + -$(MAKE) allxhelp spi=t cp0=f p=t eoc=f hci=101 + -$(MAKE) allxhelp spi=f cp0=t cl=9 p=t hci=101 -$(MAKE) allxhelp eval=interpret spi=f cp0=f -$(MAKE) allxhelp eval=interpret spi=f cp0=t - -$(MAKE) allxhelp eval=interpret spi=t cp0=f ctb='(/ (collect-trip-bytes) 64)' ehc=t - -$(MAKE) allxhelp eval=interpret spi=t cp0=t cgr=2 ehc=t p=t + -$(MAKE) allxhelp eval=interpret spi=t cp0=f ctb='(/ (collect-trip-bytes) 64)' hci=503 + -$(MAKE) allxhelp eval=interpret spi=t cp0=t cgr=2 hci=101 p=t + $(MAKE) doallcoverage allxhelp: $(MAKE) doheader @@ -269,7 +315,8 @@ doheader: printf "%s" "-------- o=$o" >> summary if [ "$(spi)" != "$(defaultspi)" ] ; then printf " spi=$(spi)" >> summary ; fi - if [ "$(ehc)" != "$(defaultehc)" ] ; then printf " ehc=$(ehc)" >> summary ; fi + if [ "$(hci)" != "$(defaulthci)" ] ; then printf " hci=$(hci)" >> summary ; fi + if [ "$(ecpf)" != "$(defaultecpf)" ] ; then printf " ecpf(ecpf)" >> summary ; fi if [ "$(cp0)" != "$(defaultcp0)" ] ; then printf " cp0=$(cp0)" >> summary ; fi if [ "$(cis)" != "$(defaultcis)" ] ; then printf " cis=$(cis)" >> summary ; fi if [ "$p" != "$(defaultp)" ] ; then printf " p=$p" >> summary ; fi @@ -278,6 +325,7 @@ if [ "$(cgr)" != "$(defaultcgr)" ] ; then printf " cgr=$(cgr)" >> summary ; fi if [ "$(cmg)" != "$(defaultcmg)" ] ; then printf " cmg=$(cmg)" >> summary ; fi if [ "$(eoc)" != "$(defaulteoc)" ] ; then printf " eoc=$(eoc)" >> summary ; fi + if [ "$(cl)" != "$(defaultcl)" ] ; then printf " cl=$(cl)" >> summary ; fi if [ "$(hdrmsg)" != "" ] ; then printf " $(hdrmsg)" >> summary ; fi dosummary: @@ -293,39 +341,47 @@ $(MAKE) doheader hdrmsg="not all" -$(MAKE) $(MAKE) dosummary + $(MAKE) docoverage all0: ; $(MAKE) all o=0 all1: ; $(MAKE) all o=1 all2: ; $(MAKE) all o=2 all3: ; $(MAKE) all o=3 -all: makescript$o $(src) oop.ss ht.ss mat.so cat_flush ${fobj} m4test.in m4test.out prettytest.ss ftype.h freq.in freq.out ${patchfile} examples +all: makescript$o $(src) oop.ss ht.ss mat.so cat_flush ${fobj} m4test.in m4test.out prettytest.ss ftype.h freq.in freq.out ${patchfile} build-examples ${Scheme} --verbose -q mat.so ${patchfile} < script.all$o $(MAKE) doerrors $(MAKE) doreport + $(MAKE) docoverage script.all$o: Mf-base script.all$o makescript$o: echo '(optimize-level $o)'\ '(#%$$suppress-primitive-inlining #${spi})'\ - '(#%$$enable-check-heap #${ehc})'\ + '(heap-check-interval ${hci})'\ + '(#%$$enable-check-prelex-flags #${ecpf})'\ '(compile-profile #$p)'\ + '(collect-notify #${cn})'\ '(collect-trip-bytes ${ctb})'\ '(collect-generation-radix ${cgr})'\ '(collect-maximum-generation ${cmg})'\ '(enable-object-counts #${eoc})'\ + '(commonization-level ${cl})'\ '(compile-interpret-simple #${cis})'\ '(set! *examples-directory* "${Examples}")'\ '(enable-cp0 #${cp0})'\ '(set! *scheme* "${Scheme}")'\ '(current-eval ${eval})'\ - '(time (for-each (mat-file "$(objdir)")'\ - ' (quote ($(mats:%="%")))))'\ - '(parameterize ([source-directories (quote ("." "../s"))]) (when #${pdhtml} (profile-dump-html)))'\ - '(unless (= (#%$$check-heap-errors) 0)'\ - ' (fprintf (console-error-port) "check heap detected errors---grep standard output for !!!\n")'\ - ' (abort))'\ + '(when #$c (coverage-table (load-coverage-files ${coverage-files:%="%"})))'\ + '(record-run-coverage "$(objdir)/run.covout"'\ + ' (lambda ()'\ + ' (time (for-each (lambda (x) (time ((mat-file "$(objdir)") x)))'\ + ' (quote ($(mats:%="%")))))'\ + ' (parameterize ([source-directories (quote ("." "../s"))]) (when #${pdhtml} (profile-dump-html)))'\ + ' (unless (= (#%$$check-heap-errors) 0)'\ + ' (fprintf (console-error-port) "check heap detected errors---grep standard output for !!!\n")'\ + ' (abort))))'\ > script.all$o source: @@ -355,23 +411,26 @@ mat.so: ${patchfile} foreign.mo ${objdir}/foreign.mo: ${fobj} thread.mo ${objdir}/thread.mo: ${fobj} -examples.mo ${objdir}/examples.mo: m4test.in m4test.out freq.in freq.out examples +examples.mo ${objdir}/examples.mo: m4test.in m4test.out freq.in freq.out build-examples 6.mo ${objdir}/6.mo: prettytest.ss +bytevector.mo ${objdir}/bytevector.mo: prettytest.ss io.mo ${objdir}/io.mo: prettytest.ss unix.mo ${objdir}/unix.mo io.mo ${objdir}/io.mo 6.mo ${objdir}/6.mo: cat_flush oop.mo ${objdir}/oop.mo: oop.ss ftype.mo ${objdir}/ftype.mo: ftype.h hash.mo ${objdir}/hash.mo: ht.ss -examples: +build-examples: ( cd ../examples && ${MAKE} Scheme=${Scheme} ) + touch build-examples prettyclean: - rm -f *.o ${mdclean} *.so *.mo experr* errors* report* summary testfile* testscript\ + rm -f *.o ${mdclean} *.so *.mo *.covout experr* errors* report* summary testfile* testscript\ ${fobj} prettytest.ss cat_flush so_locations\ - script.all? *.html experr*.rej experr*.orig + build-examples script.all? *.html experr*.rej experr*.orig rm -rf testdir* rm -rf output-* + ( cd ../examples && ${MAKE} Scheme=${Scheme} clean ) clean: prettyclean rm -f Make.out diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3fb chezscheme-9.5.4+dfsg/mats/Mf-i3fb --- chezscheme-9.5+dfsg/mats/Mf-i3fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3fb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = i3fb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3le chezscheme-9.5.4+dfsg/mats/Mf-i3le --- chezscheme-9.5+dfsg/mats/Mf-i3le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = i3le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3nb chezscheme-9.5.4+dfsg/mats/Mf-i3nb --- chezscheme-9.5+dfsg/mats/Mf-i3nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3nb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = i3nb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3nt chezscheme-9.5.4+dfsg/mats/Mf-i3nt --- chezscheme-9.5+dfsg/mats/Mf-i3nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3nt 2020-08-31 02:35:12.000000000 +0000 @@ -15,14 +15,17 @@ m = i3nt -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj foreign2.obj foreign3.obj include Mf-base +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + foreign1.so: $(fsrc) - cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)" + cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv954.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat x86 && cl /DWIN32 /MD /nologo $<" diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3ob chezscheme-9.5.4+dfsg/mats/Mf-i3ob --- chezscheme-9.5+dfsg/mats/Mf-i3ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3ob 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = i3ob -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3osx chezscheme-9.5.4+dfsg/mats/Mf-i3osx --- chezscheme-9.5+dfsg/mats/Mf-i3osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3osx 2020-08-31 02:35:12.000000000 +0000 @@ -15,7 +15,7 @@ m = i3osx -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3qnx chezscheme-9.5.4+dfsg/mats/Mf-i3qnx --- chezscheme-9.5+dfsg/mats/Mf-i3qnx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3qnx 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = i3qnx -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-i3s2 chezscheme-9.5.4+dfsg/mats/Mf-i3s2 --- chezscheme-9.5+dfsg/mats/Mf-i3s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-i3s2 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = i3s2 -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - gcc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + gcc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c gcc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ppc32le chezscheme-9.5.4+dfsg/mats/Mf-ppc32le --- chezscheme-9.5+dfsg/mats/Mf-ppc32le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ppc32le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ppc32le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6fb chezscheme-9.5.4+dfsg/mats/Mf-ta6fb --- chezscheme-9.5+dfsg/mats/Mf-ta6fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6fb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ta6fb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6le chezscheme-9.5.4+dfsg/mats/Mf-ta6le --- chezscheme-9.5+dfsg/mats/Mf-ta6le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ta6le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m64 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m64 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6nb chezscheme-9.5.4+dfsg/mats/Mf-ta6nb --- chezscheme-9.5+dfsg/mats/Mf-ta6nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6nb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ta6nb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6nt chezscheme-9.5.4+dfsg/mats/Mf-ta6nt --- chezscheme-9.5+dfsg/mats/Mf-ta6nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6nt 2020-08-31 02:35:12.000000000 +0000 @@ -15,14 +15,17 @@ m = ta6nt -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj foreign2.obj foreign3.obj include Mf-base +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + foreign1.so: $(fsrc) - cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)" + cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv954.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /MD /nologo $<" diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6ob chezscheme-9.5.4+dfsg/mats/Mf-ta6ob --- chezscheme-9.5+dfsg/mats/Mf-ta6ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6ob 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ta6ob -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6osx chezscheme-9.5.4+dfsg/mats/Mf-ta6osx --- chezscheme-9.5+dfsg/mats/Mf-ta6osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6osx 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ta6osx -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m64 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc} + cc -m64 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ta6s2 chezscheme-9.5.4+dfsg/mats/Mf-ta6s2 --- chezscheme-9.5+dfsg/mats/Mf-ta6s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ta6s2 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ta6s2 -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - gcc -m64 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + gcc -m64 -D_REENTRANT -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c gcc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3fb chezscheme-9.5.4+dfsg/mats/Mf-ti3fb --- chezscheme-9.5+dfsg/mats/Mf-ti3fb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3fb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ti3fb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3le chezscheme-9.5.4+dfsg/mats/Mf-ti3le --- chezscheme-9.5+dfsg/mats/Mf-ti3le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ti3le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3nb chezscheme-9.5.4+dfsg/mats/Mf-ti3nb --- chezscheme-9.5+dfsg/mats/Mf-ti3nb 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3nb 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ti3nb -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3nt chezscheme-9.5.4+dfsg/mats/Mf-ti3nt --- chezscheme-9.5+dfsg/mats/Mf-ti3nt 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3nt 2020-08-31 02:35:12.000000000 +0000 @@ -15,14 +15,17 @@ m = ti3nt -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj foreign2.obj foreign3.obj include Mf-base +export MSYS_NO_PATHCONV=1 +export MSYS2_ARG_CONV_EXCL=* + foreign1.so: $(fsrc) - cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)" + cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv954.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat x86 && cl /DWIN32 /MD /nologo $<" diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3ob chezscheme-9.5.4+dfsg/mats/Mf-ti3ob --- chezscheme-9.5+dfsg/mats/Mf-ti3ob 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3ob 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ti3ob -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3osx chezscheme-9.5.4+dfsg/mats/Mf-ti3osx --- chezscheme-9.5+dfsg/mats/Mf-ti3osx 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3osx 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ti3osx -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m32 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc} + cc -m32 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-ti3s2 chezscheme-9.5.4+dfsg/mats/Mf-ti3s2 --- chezscheme-9.5+dfsg/mats/Mf-ti3s2 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-ti3s2 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = ti3s2 -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - gcc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + gcc -m32 -D_REENTRANT -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c gcc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/Mf-tppc32le chezscheme-9.5.4+dfsg/mats/Mf-tppc32le --- chezscheme-9.5+dfsg/mats/Mf-tppc32le 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/Mf-tppc32le 2020-08-31 02:35:12.000000000 +0000 @@ -15,13 +15,13 @@ m = tppc32le -fsrc = foreign1.c foreign2.c foreign3.c +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c fobj = foreign1.so include Mf-base foreign1.so: ${fsrc} ../boot/$m/scheme.h - cc -m32 -fPIC -shared -I${Include} -o foreign1.so foreign1.c foreign2.c foreign3.c + cc -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc} cat_flush: cat_flush.c cc -o cat_flush cat_flush.c diff -Nru chezscheme-9.5+dfsg/mats/misc.ms chezscheme-9.5.4+dfsg/mats/misc.ms --- chezscheme-9.5+dfsg/mats/misc.ms 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/misc.ms 2020-08-31 02:35:12.000000000 +0000 @@ -272,6 +272,18 @@ (case-lambda [() (q 0)] [(x) (q)]))) + ; regression tests for non-tail-call mref lvalue destination + (begin + (define (c1-f a) + (let ([x (fxvector 0)]) + (lambda (v) (fxvector-set! x 0 (modulo v a)) x))) + #t) + (equal? ((c1-f 7) 10) #vfx(3)) + (begin + (define (c1-id x) x) + (define (c1-g x) (vector-set-fixnum! x 0 (c1-id 17))) + #t) + (equal? (let ([v (vector 3)]) (c1-g v) v) '#(17)) ) (mat compiler2 ; random tests @@ -1499,520 +1511,28 @@ 0)) ) -(mat compile-profile - (error? ; invalid argument - (compile-profile 'src)) - (eqv? - (parameterize ([compile-profile #t]) - (compile-profile)) - 'source) - (eqv? - (parameterize ([compile-profile 'source]) - (compile-profile)) - 'source) - (eqv? - (parameterize ([compile-profile 'block]) - (compile-profile)) - 'block) - (error? ; incorrect argument count - (profile-dump '())) - (error? ; incorrect argument count - (profile-clear '())) - (error? ; incorrect argument count - (profile-dump-list #t '() 3)) - (error? ; invalid dump - (profile-dump-list #f 17)) - (error? ; invalid dump - (profile-dump-list #f '(17))) - (error? ; invalid dump - (profile-dump-list #f '((a . 17)))) - (error? ; invalid dump - (profile-dump-list #f `((,(make-source-object (source-file-descriptor "abc" 34) 0 3) . q)))) - (error? ; incorrect argument count - (profile-dump-html "" '() 3)) - (error? ; not a string - (profile-dump-html '(prefix))) - (error? ; invalid dump - (profile-dump-html "profile" 17)) - (error? ; invalid dump - (profile-dump-html "profile" '(17))) - (error? ; invalid dump - (profile-dump-html "profile" '((a . 17)))) - (error? ; invalid dump - (profile-dump-html "profile" `((,(make-source-object (source-file-descriptor "abc" 34) 0 3) . q)))) - (error? ; incorrect argument count - (profile-dump-data)) - (error? ; incorrect argument count - (profile-dump-data "profile.data" '() 'q)) - (error? ; not a string - (profile-dump-data #t)) - (error? ; invalid dump - (profile-dump-data "profile.data" 17)) - (error? ; invalid dump - (profile-dump-data "profile.data" '(17))) - (error? ; invalid dump - (profile-dump-data "profile.data" '((a . 17)))) - (error? ; invalid dump - (profile-dump-data "profile.data" `((,(make-source-object (source-file-descriptor "abc" 34) 0 3) . q)))) - (error? ; not a string - (profile-load-data 'what?)) - (eqv? (parameterize ([compile-profile #t]) - (compile - '(let () - (define (f x) (if (= x 0) 1 (* x (f (- x 1))))) - (f 3)))) - 6) - (eqv? (parameterize ([compile-profile #t]) - (compile - '(let () - (define fat+ - (lambda (x y) - (if (zero? y) - x - (fat+ (1+ x) (1- y))))) - (define fatfib - (lambda (x) - (if (< x 2) - 1 - (fat+ (fatfib (1- x)) (fatfib (1- (1- x))))))) - (fatfib 20)))) - 10946) - (equal? - (parameterize ([compile-profile #t]) - (compile - '(let () - (define $values (lambda (n) (lambda () (apply values (make-list n))))) - (define foo - (lambda (n) - (call/cc - (lambda (k) - (with-exception-handler - (lambda (c) (collect) (k 'okay)) - (lambda () - (define f (case-lambda)) - (let ([x (random 10)]) - (call-with-values ($values n) f)))))))) - (list (foo 0) (foo 1) (foo 3) (foo 10) (foo 100) (foo 1000))))) - '(okay okay okay okay okay okay)) - ; no longer recording (useless) profiling information when source file & position aren't available - #;(let ([ls (profile-dump)]) - (and (list? ls) - (not (null? ls)))) - (eqv? (profile-clear) (void)) - (or (eq? (compile-profile) 'source) (andmap zero? (map cdr (profile-dump)))) - (begin (set! cp-fatfib (void)) #t) ; release fatfib - - (begin (define $old-cp (compile-profile)) #t) - ; this collect is here to make it more likely that we won't get a generation 1 - ; collection cementing in place the code that defines cp-fact - (begin (collect 1) #t) - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile 'source)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (eq? (compile-profile) $old-cp) - ; drop code that defines cp-fact so it won't show up in profile-dump-list in - ; hopes of resolving potential issue with comparison to pdl further down - (begin (collect (collect-maximum-generation)) #t) - (= (cp-fact 10) 3628800) - (begin - (define-values (pdl pdl2) - (with-interrupts-disabled - (values - (profile-dump-list #t (profile-dump)) - (profile-dump-list)))) - #t) - (equal? pdl pdl2) - (not (null? pdl)) - (begin - (rm-rf "testdir") - (mkdir "testdir") - (parameterize ([gensym-prefix 0]) (profile-dump-html "testdir/" (profile-dump))) - #t) - (file-exists? "testdir/profile.html") - (file-exists? "testdir/testfile.ss.html") - - (begin (define $old-cp (compile-profile)) #t) - (mat/cf (testfile "testfile-block") - (eval-when (compile) (compile-profile 'block)) - (define (cp-fact-block x) (if (= x 0) 1 (* x (cp-fact-block (- x 1)))))) - (eq? (compile-profile) $old-cp) - (= (cp-fact-block 10) 3628800) - (or (equal? (compile-profile) 'source) (equal? (profile-dump-list) pdl)) - (begin - (profile-dump-html) - #t) - (file-exists? "profile.html") - (file-exists? "testfile.ss.html") - (not (file-exists? "testfile2.ss.html")) - - (eqv? (profile-clear) (void)) - - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile #t)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (= (cp-fact 10) 3628800) - (eqv? (profile-dump-data "testfile1.pd") (void)) - (file-exists? "testfile1.pd") - (eqv? (profile-load-data "testfile1.pd") (void)) - (begin - (define $cp-ip (open-file-input-port "testfile.ss")) - (define $cp-sfd (make-source-file-descriptor "testfile.ss" $cp-ip)) - (define $qw (lambda (bfp efp) (profile-query-weight (make-source-object $cp-sfd bfp efp)))) - #t) - - (eqv? (close-port $cp-ip) (void)) - - (eqv? ($qw 0 0) 0.0) ; bfp, efp combination not in database - (eqv? ; file not in database - (let* ([ip (open-file-input-port "Mf-base")] - [sfd (make-source-file-descriptor "Mf-base" ip)]) - (close-port ip) - (profile-query-weight (make-source-object sfd 0 0))) - #f) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0))) #t)) ($qw 0 42)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0))) #t)) ($qw 43 102)) - (eqv? ($qw 63 101) 1.0) - (eqv? ($qw 75 76) (fl/ 1.0 11.0)) - (eqv? ($qw 77 100) (fl/ 10.0 11.0)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0))) #t)) ($qw 103 127)) - (eqv? ($qw 119 126) 0.0) - (eqv? ($qw 120 125) 0.0) - (eqv? (profile-clear) (void)) - (= (cp-fact 5) 120) - (eqv? (profile-dump-data "testfile2.pd") (void)) - (eqv? (profile-load-data "testfile2.pd") (void)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0) (fl/ (/ 1.0 11.0) 2.0))) #t)) ($qw 0 42)) - (eqv? ($qw 21 40) 0.0) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0) (fl/ (/ 1.0 11.0) 2.0))) #t)) ($qw 43 102)) - (eqv? ($qw 63 101) 1.0) - (eqv? ($qw 75 76) (fl/ (fl+ (/ 1.0 11.0) (fl/ 1.0 6.0)) 2.0)) - (eqv? ($qw 77 100) (fl/ (fl+ (fl/ 10.0 11.0) (fl/ 5.0 6.0)) 2.0)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0) (fl/ (/ 1.0 11.0) 2.0))) #t)) ($qw 103 127)) - (eqv? ($qw 119 126) 0.0) - (eqv? ($qw 120 125) 0.0) - (eqv? (profile-clear) (void)) - - ; make sure all is well when compiled with source profile info - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile 'block)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (eqv? (profile-dump-data "testfile3.pd") (void)) - (file-exists? "testfile3.pd") - (eqv? (profile-load-data "testfile3.pd") (void)) - ; and again with block profile info - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile #f)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (= (cp-fact 5) 120) - - (eqv? (profile-clear-database) (void)) - (eqv? ($qw 0 42) #f) - (eqv? ($qw 77 100) #f) - - ; make sure record-ref, record-type, and record-cd are properly handled by - ; find-source in pdhtml - (mat/cf - (eval-when (compile) (compile-profile #t)) - (library (A) (export make-foo foo? foo-x) (import (chezscheme)) (define-record-type foo (fields x))) - (let () - (import (A)) - (define add-foo-xs - (lambda ls - (let f ([ls ls] [sum 0]) - (if (null? ls) sum (f (cdr ls) (+ (foo-x (car ls)) sum)))))) - ; make sure this is still around when we call profile-dump-list - (set! $add-foo-xs add-foo-xs) - (pretty-print (add-foo-xs (make-foo 1) (make-foo 2) (make-foo 3))))) - (not (null? (profile-dump-list))) - (eqv? (profile-clear) (void)) - (begin (set! $add-foo-xs #f) #t) - - (vector? (profile-palette)) - (vector? - (parameterize ([profile-palette (vector-map - (lambda (p) (cons "white" (car p))) - (profile-palette))]) - (profile-palette))) - (parameterize ([profile-palette - '#(("black" . "white") - ("red" . "white") - ("blue" . "black"))]) - (= (vector-length (profile-palette)) 3)) - (error? (profile-palette '#())) - (error? (profile-palette '#(("black" . "white")))) - (error? (profile-palette '#(("black" . "white") ("red" . "white")))) - (error? - (profile-palette - '#(("black" . "white") - #("red" "white") - ("blue" . "black")))) - (error? - (profile-palette - '#(("black" . "white") - ("red" . "white") - ("blue" . black)))) - (error? - (profile-palette - '#(("black" . "white") - ("red" . "white") - (#x0000ff . "black")))) - ; test for proper counts in the presence of control operators - (begin - (define $return) - (define $retry) - (with-output-to-file "testfile-cp1.ss" - (lambda () - (display-string "\ -(define $frumble - (lambda (ls) - (if (null? ls) - 1 - (let ([n (car ls)]) - (if (eqv? n 0) - (call/cc (lambda (k) (set! $retry k) ($return 0))) - (let ([q ($frumble (cdr ls))]) - (add1 (* q n)))))))) -")) - 'replace) - (profile-clear) - (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f] [optimize-level 2] [compile-profile #t]) - (load "testfile-cp1.ss" compile)) - #t) - (eqv? - ($frumble (make-list 100 5)) - 9860761315262647567646607066034827870915080438862787559628486633300781) - (andmap - ; if counts for define and lambda on the first two lines are available (haven't - ; been tossed by the collector), check that they are 1 - (lambda (x) (= (car x) 1)) - (filter (lambda (x) (and (equal? (cadr x) "testfile-cp1.ss") (<= (list-ref x 4) 2))) (profile-dump-list))) - (equal? - (filter (lambda (x) (and (equal? (cadr x) "testfile-cp1.ss") (>= (list-ref x 4) 3))) (profile-dump-list)) - '((101 "testfile-cp1.ss" 36 258 3 5) - (101 "testfile-cp1.ss" 40 50 3 9) - (101 "testfile-cp1.ss" 41 46 3 10) - (101 "testfile-cp1.ss" 47 49 3 16) - (100 "testfile-cp1.ss" 69 257 5 9) - (100 "testfile-cp1.ss" 78 86 5 18) - (100 "testfile-cp1.ss" 79 82 5 19) - (100 "testfile-cp1.ss" 83 85 5 23) - (100 "testfile-cp1.ss" 99 256 6 11) - (100 "testfile-cp1.ss" 103 113 6 15) - (100 "testfile-cp1.ss" 104 108 6 16) - (100 "testfile-cp1.ss" 109 110 6 21) - (100 "testfile-cp1.ss" 111 112 6 23) - (100 "testfile-cp1.ss" 193 255 8 15) - (100 "testfile-cp1.ss" 202 221 8 24) - (100 "testfile-cp1.ss" 203 211 8 25) - (100 "testfile-cp1.ss" 212 220 8 34) - (100 "testfile-cp1.ss" 213 216 8 35) - (100 "testfile-cp1.ss" 217 219 8 39) - (100 "testfile-cp1.ss" 240 254 9 17) - (100 "testfile-cp1.ss" 241 245 9 18) - (100 "testfile-cp1.ss" 246 253 9 23) - (100 "testfile-cp1.ss" 247 248 9 24) - (100 "testfile-cp1.ss" 249 250 9 26) - (100 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 59 60 4 9) - (0 "testfile-cp1.ss" 128 178 7 15) - (0 "testfile-cp1.ss" 129 136 7 16) - (0 "testfile-cp1.ss" 137 177 7 24) - (0 "testfile-cp1.ss" 149 164 7 36) - (0 "testfile-cp1.ss" 162 163 7 49) - (0 "testfile-cp1.ss" 165 176 7 52) - (0 "testfile-cp1.ss" 166 173 7 53) - (0 "testfile-cp1.ss" 174 175 7 61))) - (eqv? - (call/cc - (lambda (k) - (set! $return k) - (let ([ans ($frumble (append (make-list 50 5) (list 0) (make-list 50 7)))]) - ($return ans)))) - 0) - (andmap - (lambda (x) (= (car x) 1)) - (filter (lambda (x) (and (equal? (cadr x) "testfile-cp1.ss") (<= (list-ref x 4) 2))) (profile-dump-list))) - (equal? - (filter (lambda (x) (and (equal? (cadr x) "testfile-cp1.ss") (>= (list-ref x 4) 3))) (profile-dump-list)) - '((152 "testfile-cp1.ss" 36 258 3 5) - (152 "testfile-cp1.ss" 40 50 3 9) - (152 "testfile-cp1.ss" 41 46 3 10) - (152 "testfile-cp1.ss" 47 49 3 16) - (151 "testfile-cp1.ss" 69 257 5 9) - (151 "testfile-cp1.ss" 78 86 5 18) - (151 "testfile-cp1.ss" 79 82 5 19) - (151 "testfile-cp1.ss" 83 85 5 23) - (151 "testfile-cp1.ss" 99 256 6 11) - (151 "testfile-cp1.ss" 103 113 6 15) - (151 "testfile-cp1.ss" 104 108 6 16) - (151 "testfile-cp1.ss" 109 110 6 21) - (151 "testfile-cp1.ss" 111 112 6 23) - (150 "testfile-cp1.ss" 193 255 8 15) - (150 "testfile-cp1.ss" 202 221 8 24) - (150 "testfile-cp1.ss" 203 211 8 25) - (150 "testfile-cp1.ss" 212 220 8 34) - (150 "testfile-cp1.ss" 213 216 8 35) - (150 "testfile-cp1.ss" 217 219 8 39) - (100 "testfile-cp1.ss" 240 254 9 17) - (100 "testfile-cp1.ss" 241 245 9 18) - (100 "testfile-cp1.ss" 246 253 9 23) - (100 "testfile-cp1.ss" 247 248 9 24) - (100 "testfile-cp1.ss" 249 250 9 26) - (100 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 59 60 4 9) - (1 "testfile-cp1.ss" 128 178 7 15) - (1 "testfile-cp1.ss" 129 136 7 16) - (1 "testfile-cp1.ss" 137 177 7 24) - (1 "testfile-cp1.ss" 149 164 7 36) - (1 "testfile-cp1.ss" 162 163 7 49) - (1 "testfile-cp1.ss" 165 176 7 52) - (1 "testfile-cp1.ss" 166 173 7 53) - (1 "testfile-cp1.ss" 174 175 7 61))) - (eqv? - (call/cc - (lambda (k) - (set! $return k) - ($retry 1))) - 111022302462515654042363166809082031) - (andmap - (lambda (x) (= (car x) 1)) - (filter (lambda (x) (and (equal? (cadr x) "testfile-cp1.ss") (<= (list-ref x 4) 2))) (profile-dump-list))) - (equal? - (filter (lambda (x) (and (equal? (cadr x) "testfile-cp1.ss") (>= (list-ref x 4) 3))) (profile-dump-list)) - '((152 "testfile-cp1.ss" 36 258 3 5) - (152 "testfile-cp1.ss" 40 50 3 9) - (152 "testfile-cp1.ss" 41 46 3 10) - (152 "testfile-cp1.ss" 47 49 3 16) - (151 "testfile-cp1.ss" 69 257 5 9) - (151 "testfile-cp1.ss" 78 86 5 18) - (151 "testfile-cp1.ss" 79 82 5 19) - (151 "testfile-cp1.ss" 83 85 5 23) - (151 "testfile-cp1.ss" 99 256 6 11) - (151 "testfile-cp1.ss" 103 113 6 15) - (151 "testfile-cp1.ss" 104 108 6 16) - (151 "testfile-cp1.ss" 109 110 6 21) - (151 "testfile-cp1.ss" 111 112 6 23) - (150 "testfile-cp1.ss" 193 255 8 15) - (150 "testfile-cp1.ss" 202 221 8 24) - (150 "testfile-cp1.ss" 203 211 8 25) - (150 "testfile-cp1.ss" 212 220 8 34) - (150 "testfile-cp1.ss" 213 216 8 35) - (150 "testfile-cp1.ss" 217 219 8 39) - (150 "testfile-cp1.ss" 240 254 9 17) - (150 "testfile-cp1.ss" 241 245 9 18) - (150 "testfile-cp1.ss" 246 253 9 23) - (150 "testfile-cp1.ss" 247 248 9 24) - (150 "testfile-cp1.ss" 249 250 9 26) - (150 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 59 60 4 9) - (1 "testfile-cp1.ss" 128 178 7 15) - (1 "testfile-cp1.ss" 129 136 7 16) - (1 "testfile-cp1.ss" 137 177 7 24) - (1 "testfile-cp1.ss" 149 164 7 36) - (1 "testfile-cp1.ss" 162 163 7 49) - (1 "testfile-cp1.ss" 165 176 7 52) - (1 "testfile-cp1.ss" 166 173 7 53) - (1 "testfile-cp1.ss" 174 175 7 61))) - (eqv? (profile-clear) (void)) +(mat generate-procedure-source-information (begin - (with-output-to-file "testfile.ss" - (lambda () - (pretty-print - '(define f (lambda () 0)))) - 'replace) - (parameterize ([compile-profile #t]) (load "testfile.ss")) - #t) - (begin - (with-output-to-file "testfile.ss" - (lambda () - (pretty-print - '(define f (lambda () 1)))) - 'replace) - #t) - (eqv? (f) 0) - (warning? ; unmodified source file not found - (profile-dump-list)) - (warning? ; unmodified source file not found - (profile-dump-list #t)) - (warning? ; unmodified source file not found - (profile-dump-list #t (profile-dump))) - (warning? ; unmodified source file not found - (profile-dump-list #t (profile-dump))) - (guard (c [else #f]) - (profile-dump-list #f) - #t) - (guard (c [else #f]) - (profile-dump-list #f (profile-dump)) - #t) - (eqv? (profile-clear) (void)) -) - -(mat profile-form - (error? ; invalid syntax - (profile)) - (error? ; invalid syntax - (profile 1 2 3)) - (error? ; not a source object - (profile 3)) - (begin - (define str "(ugh (if \x3b2;))") - (define bv (string->utf8 str)) - (define ip (open-bytevector-input-port bv)) - (define sfd (make-source-file-descriptor "foo" ip #t)) - #t) - (eq? (eval `(profile ,(make-source-object sfd 2 3))) (void)) - (begin - (define compile-triv-file - (lambda (ifn ofn) - (define insert-profile-forms - (lambda (x) - (unless (annotation? x) (errorf 'compile-triv-file "expected an annotation, got ~s" x)) - (let ([src (annotation-source x)] [exp (annotation-expression x)]) - `(begin (profile ,src) - ,(syntax-case exp () - [(?do-times n e) - (eq? (annotation-expression #'?do-times) 'do-times) - (let ([n (annotation-expression #'n)]) - `(do ([i ,n (fx- i 1)]) ((fx= i 0)) ,(insert-profile-forms #'e)))] - [(?print string) - (eq? (annotation-expression #'?print) 'print) - `(printf "~a\n" ,(annotation-expression #'string))] - [else (syntax-error exp)]))))) - (define parse - (lambda (ifn) - (let ([ip (open-file-input-port ifn)]) - (let ([sfd (make-source-file-descriptor ifn ip #t)]) - (let ([ip (transcoded-port ip (native-transcoder))]) - (let f ([bfp 0]) - (let-values ([(x bfp) (get-datum/annotations ip sfd bfp)]) - (if (eof-object? x) - (begin (close-port ip) '()) - (cons x (f bfp)))))))))) - (parameterize ([compile-profile 'source] [generate-profile-forms #f]) - (compile-to-file (list `(define (triv) ,@(map insert-profile-forms (parse ifn)))) ofn)))) - #t) - (begin - (with-output-to-file "testfile-triv.ss" - (lambda () - (pretty-print '(do-times 10 (print "hello"))) - (pretty-print '(do-times 5 (print "goodbye")))) - 'replace) - (compile-triv-file "testfile-triv.ss" "testfile-triv.so") - (load "testfile-triv.so") - #t) - (equal? - (with-output-to-string triv) - "hello\nhello\nhello\nhello\nhello\nhello\nhello\nhello\nhello\nhello\ngoodbye\ngoodbye\ngoodbye\ngoodbye\ngoodbye\n") - (equal? - (sort - ; sort by bfp - (lambda (x y) (< (list-ref x 2) (list-ref y 2))) - (filter (lambda (x) (equal? (list-ref x 1) "testfile-triv.ss")) (profile-dump-list))) - '((1 "testfile-triv.ss" 0 29 1 1) - (10 "testfile-triv.ss" 13 28 1 14) - (1 "testfile-triv.ss" 30 60 2 1) - (5 "testfile-triv.ss" 42 59 2 13))) - (eqv? (profile-clear) (void)) + (define the-source + (let ([sfd (make-source-file-descriptor "the-source.ss" (open-bytevector-input-port '#vu8()))]) + (make-source-object sfd 10 20))) + (define (make-proc full-inspect?) + (parameterize ([generate-inspector-information full-inspect?] + [generate-procedure-source-information #t]) + (let ([e '(lambda (x) x)]) + (compile (make-annotation e the-source e))))) + (define proc-i (make-proc #t)) + (define proc-n (make-proc #f)) + (and (procedure? proc-i) + (procedure? proc-n))) + (equal? (((inspect/object proc-i) 'code) 'source-object) + the-source) + (equal? (((inspect/object proc-n) 'code) 'source-object) + the-source) + (equal? ((((inspect/object proc-i) 'code) 'source) 'value) + '(lambda (x) x)) + (equal? (((inspect/object proc-n) 'code) 'source) + #f) ) (mat strip-fasl-file @@ -2060,12 +1580,16 @@ 'replace) (with-output-to-file "testfile-sff-1c.ss" (lambda () + (pretty-print '(define preexisting-entries (length (profile-dump)))) (pretty-print '(eval-when (compile) (import (add-prefix (testfile-sff-1a) sff-1a-)))) (pretty-print '(eval-when (compile) (import (add-prefix (testfile-sff-1b) sff-1b-)))) (pretty-print '(pretty-print (list (sff-1a-x 3) sff-1b-y))) (pretty-print '(pretty-print (not (((inspect/object sff-1a-x) 'code) 'source)))) - (pretty-print '(pretty-print (null? (profile-dump-list))))) + (pretty-print '(pretty-print (= (length (profile-dump)) preexisting-entries)))) 'replace) + (delete-file "testfile-sff-1a.so") + (delete-file "testfile-sff-1b.so") + (delete-file "testfile-sff-1c.so") (separate-compile '(lambda (x) (parameterize ([generate-inspector-information #t] @@ -2074,65 +1598,50 @@ (compile-file x))) 'sff-1c) #t) + (begin + (define (go) + (separate-eval + '(define preexisting-entries + (with-exception-handler + (lambda (c) (unless (warning? c) (raise-continuable c))) + (lambda () (length (profile-dump-list))))) + '(import (testfile-sff-1a)) + '(import (testfile-sff-1b)) + '(define-syntax so? + (lambda (x) + (syntax-case x () + [(_ q) (and (syntax->annotation #'q) #t)]))) + '(list a (b so?) (x 3) y) + '(not (((inspect/object x) 'code) 'source)) + '(define all-entries + (with-exception-handler + (lambda (c) (unless (warning? c) (raise-continuable c))) + (lambda () (length (profile-dump-list))))) + '(= all-entries preexisting-entries))) + #t) (equal? - (separate-eval - '(import (testfile-sff-1a)) - '(import (testfile-sff-1b)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #t 6 24)\n#f\n#f\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options inspector-source)) (strip-and-check "testfile-sff-1b.so" "testfile-sff-1b.so" (fasl-strip-options inspector-source)) (equal? - (separate-eval - '(import (testfile-sff-1a)) - '(import (testfile-sff-1b)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #t 6 24)\n#t\n#f\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options profile-source)) (strip-and-check "testfile-sff-1b.so" "testfile-sff-1b.so" (fasl-strip-options profile-source)) (equal? - (separate-eval - '(import (testfile-sff-1b)) - '(import (testfile-sff-1a)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #t 6 24)\n#t\n#t\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options source-annotations)) (strip-and-check "testfile-sff-1b.so" "testfile-sff-1b.so" (fasl-strip-options source-annotations)) (equal? - (separate-eval - '(import (testfile-sff-1b)) - '(import (testfile-sff-1a)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #f 6 24)\n#t\n#t\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options compile-time-information)) @@ -2148,8 +1657,8 @@ '(expand 'b) '(load "testfile-sff-1c.so") '(guard (c [else (display-condition c) (newline) #t]) (eval '(import (testfile-sff-1b))))) - "Exception: loading testfile-sff-1b.so did not define compile-time information for library (testfile-sff-1b)\n#t\n\ - Exception: loading testfile-sff-1a.so did not define compile-time information for library (testfile-sff-1a)\n#t\n\ + "Exception: loading testfile-sff-1b.so did not define library (testfile-sff-1b)\n#t\n\ + Exception: loading testfile-sff-1a.so did not define library (testfile-sff-1a)\n#t\n\ a\nb\n\ (6 24)\n#t\n#t\n\ Exception: loading testfile-sff-1b.so did not define compile-time information for library (testfile-sff-1b)\n#t\n\ @@ -2214,6 +1723,53 @@ (strip-fasl-file "testfile-sff-3.so" "testfile-sff-3.so" (fasl-strip-options compile-time-information)) (= (object-file-size "testfile-sff-3.so") n)) + (begin + (mkfile "testfile-sff-4.ss" + '(library (testfile-sff-4) (export a b c) (import (chezscheme)) + (define-syntax a (identifier-syntax 12)) + (define b 13) + (meta define c 14))) + (mkfile "testfile-sff-4p.ss" + '(import (chezscheme) (testfile-sff-4)) + '(write b)) + (separate-compile + '(lambda (x) (parameterize ([compile-imported-libraries #t]) (compile-program x))) + 'sff-4p) + #t) + (equal? + (separate-eval + '(let () + (import (testfile-sff-4)) + (define-syntax cc (lambda (x) c)) + (printf "a = ~s, b = ~s, c = ~s\n" a b cc))) + "a = 12, b = 13, c = 14\n") + (equal? + (separate-eval + '(let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval 'a (environment '(testfile-sff-4)))))) + "b = 13, a = 12\n") + (begin + (strip-fasl-file "testfile-sff-4.so" "testfile-sff-4.so" + (fasl-strip-options compile-time-information)) + #t) + (error? ; no compile-time info + (separate-eval + '(let () + (import (testfile-sff-4)) + (list a b)))) + (error? ; no compile-time info + (separate-eval + '(let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval 'a (environment '(testfile-sff-4))))))) + (error? ; no compile-time info + (separate-eval + '(let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval '(let () (import (testfile-sff-4)) a)))))) + (error? ; no compile-time info + (separate-eval + '(parameterize ([import-notify #t]) + (let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval '(let () (import (testfile-sff-4)) a))))))) ) (mat $fasl-file-equal? @@ -4881,34 +4437,35 @@ (#2%display 1)))) ) -(mat $read-time-stamp-counter +;; #%$read-time-stamp-counter requires a kernel module on arm32le +(unless (memq (machine-type) '(arm32le tarm32le)) + (mat $read-time-stamp-counter - (let ([t (#%$read-time-stamp-counter)]) - (and (integer? t) (exact? t))) + (let ([t (#%$read-time-stamp-counter)]) + (and (integer? t) (exact? t))) - (let () - ;; NB: pulled from thread.ms, to use as a delay - (define fat+ - (lambda (x y) - (if (zero? y) - x - (fat+ (1+ x) (1- y))))) - (define fatfib - (lambda (x) - (if (< x 2) - 1 - (fat+ (fatfib (1- x)) (fatfib (1- (1- x))))))) - (let loop ([count 10] [success 0]) - (if (fx= count 0) - (>= success 9) - (let ([t0 (#%$read-time-stamp-counter)]) - (fatfib 26) - (let ([t1 (#%$read-time-stamp-counter)]) - (loop (fx- count 1) - (if (< t0 t1) - (fx+ success 1) - success))))))) -) + (let () + ;; NB: pulled from thread.ms, to use as a delay + (define fat+ + (lambda (x y) + (if (zero? y) + x + (fat+ (1+ x) (1- y))))) + (define fatfib + (lambda (x) + (if (< x 2) + 1 + (fat+ (fatfib (1- x)) (fatfib (1- (1- x))))))) + (let loop ([count 10] [success 0]) + (if (fx= count 0) + (>= success 9) + (let ([t0 (#%$read-time-stamp-counter)]) + (fatfib 26) + (let ([t1 (#%$read-time-stamp-counter)]) + (loop (fx- count 1) + (if (< t0 t1) + (fx+ success 1) + success))))))))) (mat procedure-arity-mask (equal? (procedure-arity-mask (lambda () #f)) 1) @@ -4948,6 +4505,27 @@ (procedure-arity-mask 17)) ) +(mat procedure-name + (begin + (define (procedure-name f) + (((inspect/object f) 'code) 'name)) + (define (ok-name? name expect) + (or (equal? name expect) + ;; interpreter currently doesn't keep names + (eq? (current-eval) interpret))) + (define should-be-named-f (let ([f (lambda (x) x)]) f)) + (define should-be-named-g (letrec ([g (lambda (x) x)]) g)) + (define should-be-named-h (let ([f (let ([h (lambda (x) x)]) h)]) f)) + (define should-be-named-i (letrec ([f (let ([i (lambda (x) x)]) i)]) f)) + (define should-be-named-j (let ([f (letrec ([j (lambda (x) x)]) j)]) f)) + #t) + (ok-name? (procedure-name procedure-name) "procedure-name") + (ok-name? (procedure-name should-be-named-f) "f") + (ok-name? (procedure-name should-be-named-g) "g") + (ok-name? (procedure-name should-be-named-h) "h") + (ok-name? (procedure-name should-be-named-i) "i") + (ok-name? (procedure-name should-be-named-j) "j")) + (mat fasl-immutable (begin (define immutable-objs (list (vector->immutable-vector '#(1 2 3)) @@ -4992,5 +4570,72 @@ (mutable-fxvector? '#vfx()) (mutable-string? "") (mutable-bytevector? '#vu8()) - + ) + +(mat show-allocation + (begin + (#%$show-allocation #t) + #t) +) + +; regression test for a bug in arm32 targets that improperly handled +; add-with-immediate instructions when the immediate operand didn't fit +; into 8 bits +; h/t @weinholt on Github +(mat arm32-immediate-operand + (begin + (with-output-to-file "testfile-ai-1.ss" + (lambda () + (pretty-print + '(library (arm-immediate-1) + (export x y) + (import (rnrs)) + (define (x) '(a)) + (define (y . _) '(a))))) + 'replace) + (compile-library "testfile-ai-1.ss") + (with-output-to-file "testfile-ai-2.ss" + (lambda () + (pretty-print + '(library (arm-immediate-2) + (export) + (import (rnrs) (arm-immediate-1)) + (define a + (y (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x))) + (define b + (y (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) + (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x) (x)))))) + 'replace) + (compile-library "testfile-ai-2.ss") + #t)) diff -Nru chezscheme-9.5+dfsg/mats/patch-compile-0-f-f-t chezscheme-9.5.4+dfsg/mats/patch-compile-0-f-f-t --- chezscheme-9.5+dfsg/mats/patch-compile-0-f-f-t 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/patch-compile-0-f-f-t 2020-08-31 02:35:12.000000000 +0000 @@ -1,7 +1,49 @@ -*** errors-compile-0-f-f-f 2017-06-06 15:52:54.089820649 -0400 ---- errors-compile-0-f-f-t 2017-06-06 15:55:15.167428881 -0400 +*** errors-compile-0-f-f-f 2020-02-28 00:39:54.092147000 -0500 +--- errors-compile-0-f-f-t 2020-02-28 00:49:23.793545013 -0500 *************** -*** 8461,8473 **** +*** 3887,3893 **** + misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1". + misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"". + misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure". +! misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation 5". + misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation oldgen". + misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1". + misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #". +--- 3887,3893 ---- + misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1". + misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"". + misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure". +! misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation 7". + misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation oldgen". + misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1". + misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #". +*************** +*** 7426,7436 **** + 7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1". +! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 5". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation ". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation #f". +! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 5". +! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 5". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". +--- 7426,7436 ---- + 7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1". +! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 7". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation ". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation #f". +! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 7". +! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 7". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". + 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". +*************** +*** 8890,8902 **** fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -15,7 +57,7 @@ fx.mo:Expected error in mat r6rs:fx*: "fx*: is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". ---- 8461,8473 ---- +--- 8890,8902 ---- fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". diff -Nru chezscheme-9.5+dfsg/mats/patch-compile-0-f-t-f chezscheme-9.5.4+dfsg/mats/patch-compile-0-f-t-f --- chezscheme-9.5+dfsg/mats/patch-compile-0-f-t-f 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/patch-compile-0-f-t-f 2020-08-31 02:35:12.000000000 +0000 @@ -1,7 +1,7 @@ -*** errors-compile-0-f-f-f 2017-07-06 20:31:25.000000000 -0600 ---- errors-compile-0-f-t-f 2017-07-06 19:50:33.000000000 -0600 +*** errors-compile-0-f-f-f 2020-02-28 19:40:51.000000000 -0800 +--- errors-compile-0-f-t-f 2020-02-28 19:05:59.000000000 -0800 *************** -*** 125,131 **** +*** 178,184 **** 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable c". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable m". @@ -9,7 +9,7 @@ 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable y". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". ---- 125,131 ---- +--- 178,184 ---- 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable c". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable m". @@ -18,7 +18,7 @@ 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". *************** -*** 144,150 **** +*** 197,203 **** 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable b". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable a". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable g". @@ -26,7 +26,7 @@ 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable f". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable c". 3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x". ---- 144,150 ---- +--- 197,203 ---- 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable b". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable a". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable g". @@ -35,7 +35,7 @@ 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable c". 3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x". *************** -*** 191,200 **** +*** 244,253 **** 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -46,7 +46,7 @@ 3.mo:Expected error in mat mrvs: "variable $mrvs-foo is not bound". 3.mo:Expected error in mat mrvs: "attempt to apply non-procedure 17". 3.mo:Expected error in mat mrvs: "returned two values to single value return context". ---- 191,200 ---- +--- 244,253 ---- 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -58,41 +58,7 @@ 3.mo:Expected error in mat mrvs: "attempt to apply non-procedure 17". 3.mo:Expected error in mat mrvs: "returned two values to single value return context". *************** -*** 249,255 **** - 4.mo:Expected error in mat r6rs:case: "invalid syntax (r6rs:case (quote a) (a (quote yes)) (b (quote no)))". - 4.mo:Expected error in mat r6rs:case: "invalid syntax (case (quote a) (a (quote yes)) (b (quote no)))". - 4.mo:Expected error in mat named-let: "incorrect argument count in call ((letrec ((...)) x) 3 4)". -! 4.mo:Expected error in mat map: "map: 3 is not a procedure". - 4.mo:Expected error in mat map: "map: a is not a proper list". - 4.mo:Expected error in mat map: "map: (a . b) is not a proper list". - 4.mo:Expected error in mat map: "map: (a a a a a a ...) is circular". ---- 249,255 ---- - 4.mo:Expected error in mat r6rs:case: "invalid syntax (r6rs:case (quote a) (a (quote yes)) (b (quote no)))". - 4.mo:Expected error in mat r6rs:case: "invalid syntax (case (quote a) (a (quote yes)) (b (quote no)))". - 4.mo:Expected error in mat named-let: "incorrect argument count in call ((letrec ((...)) x) 3 4)". -! 4.mo:Expected error in mat map: "attempt to apply non-procedure 3". - 4.mo:Expected error in mat map: "map: a is not a proper list". - 4.mo:Expected error in mat map: "map: (a . b) is not a proper list". - 4.mo:Expected error in mat map: "map: (a a a a a a ...) is circular". -*************** -*** 319,325 **** - 4.mo:Expected error in mat fold-right: "fold-right: (a a a a a a ...) is circular". - 4.mo:Expected error in mat fold-right: "fold-right: (a a a a a a ...) is circular". - 4.mo:Expected error in mat fold-right: "fold-right: (a a a a a a ...) is circular". -! 4.mo:Expected error in mat for-each: "for-each: 3 is not a procedure". - 4.mo:Expected error in mat for-each: "for-each: a is not a proper list". - 4.mo:Expected error in mat for-each: "for-each: (a . b) is not a proper list". - 4.mo:Expected error in mat for-each: "for-each: (a a a a a a ...) is circular". ---- 319,325 ---- - 4.mo:Expected error in mat fold-right: "fold-right: (a a a a a a ...) is circular". - 4.mo:Expected error in mat fold-right: "fold-right: (a a a a a a ...) is circular". - 4.mo:Expected error in mat fold-right: "fold-right: (a a a a a a ...) is circular". -! 4.mo:Expected error in mat for-each: "attempt to apply non-procedure 3". - 4.mo:Expected error in mat for-each: "for-each: a is not a proper list". - 4.mo:Expected error in mat for-each: "for-each: (a . b) is not a proper list". - 4.mo:Expected error in mat for-each: "for-each: (a a a a a a ...) is circular". -*************** -*** 3655,3661 **** +*** 3929,3935 **** misc.mo:Expected error in mat cpletrec: "foreign-procedure: no entry for "foo"". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable q". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable bar". @@ -100,7 +66,7 @@ misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable a". ---- 3655,3661 ---- +--- 3929,3935 ---- misc.mo:Expected error in mat cpletrec: "foreign-procedure: no entry for "foo"". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable q". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable bar". @@ -109,7 +75,7 @@ misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable a". *************** -*** 7105,7112 **** +*** 7436,7443 **** 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". 7.mo:Expected error in mat error: "a: hit me!". 7.mo:Expected error in mat error: "f: n is 0". @@ -118,7 +84,7 @@ record.mo:Expected error in mat record2: "invalid value 3 for foreign type double-float". record.mo:Expected error in mat record2: "3 is not of type #". record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)". ---- 7105,7112 ---- +--- 7436,7443 ---- 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". 7.mo:Expected error in mat error: "a: hit me!". 7.mo:Expected error in mat error: "f: n is 0". @@ -128,7 +94,7 @@ record.mo:Expected error in mat record2: "3 is not of type #". record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)". *************** -*** 7114,7128 **** +*** 7445,7459 **** record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)". record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car". record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound". @@ -144,7 +110,7 @@ record.mo:Expected error in mat record9: "record-reader: invalid input #f". record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". ---- 7114,7128 ---- +--- 7445,7459 ---- record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)". record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car". record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound". @@ -161,7 +127,7 @@ record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". *************** -*** 7135,7160 **** +*** 7466,7491 **** record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -188,7 +154,7 @@ record.mo:Expected error in mat foreign-data: "foreign-alloc: 0 is not a positive fixnum". record.mo:Expected error in mat foreign-data: "foreign-alloc: is not a positive fixnum". record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum". ---- 7135,7160 ---- +--- 7466,7491 ---- record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -216,7 +182,7 @@ record.mo:Expected error in mat foreign-data: "foreign-alloc: is not a positive fixnum". record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum". *************** -*** 7285,7323 **** +*** 7616,7654 **** record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #". @@ -256,7 +222,7 @@ record.mo:Expected error in mat record?: "record?: 4 is not a record type descriptor". record.mo:Expected error in mat record?: "record?: a is not a record type descriptor". record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor". ---- 7285,7323 ---- +--- 7616,7654 ---- record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #". @@ -297,7 +263,7 @@ record.mo:Expected error in mat record?: "record?: a is not a record type descriptor". record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor". *************** -*** 7332,7388 **** +*** 7663,7719 **** record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: invalid protocol flimflam". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure not-a-procedure". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure spam". @@ -305,8 +271,8 @@ ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". - record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". - record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". +! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". +! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: record constructor descriptor # is not for parent of record type #". @@ -355,14 +321,14 @@ record.mo:Expected error in mat r6rs-records-syntactic: "define-record-type: incompatible record type cpoint - different parent". record.mo:Expected error in mat r6rs-records-syntactic: "define-record-type: incompatible record type cpoint - different parent". record.mo:Expected error in mat r6rs-records-syntactic: "cannot extend define-record-type parent fratrat". ---- 7332,7388 ---- +--- 7663,7719 ---- record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: invalid protocol flimflam". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure not-a-procedure". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure spam". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". - record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". - record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". +! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". +! record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments to #". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect argument count in call (ccons 1)". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect argument count in call (ccons 1 2 3)". ! record.mo:Expected error in mat r6rs-records-procedural: "incorrect argument count in call (n (+ z 7) w "what?")". diff -Nru chezscheme-9.5+dfsg/mats/patch-compile-0-t-f-f chezscheme-9.5.4+dfsg/mats/patch-compile-0-t-f-f --- chezscheme-9.5+dfsg/mats/patch-compile-0-t-f-f 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/mats/patch-compile-0-t-f-f 2020-08-31 02:35:12.000000000 +0000 @@ -1,7 +1,7 @@ -*** errors-compile-0-f-f-f 2017-07-06 20:31:25.000000000 -0600 ---- errors-compile-0-t-f-f 2017-07-06 19:59:12.000000000 -0600 +*** errors-compile-0-f-f-f 2020-02-28 19:40:51.000000000 -0800 +--- errors-compile-0-t-f-f 2020-02-28 19:14:24.000000000 -0800 *************** -*** 93,99 **** +*** 146,152 **** 3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #". @@ -9,7 +9,7 @@ 3.mo:Expected error in mat letrec: "variable f is not bound". 3.mo:Expected error in mat letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat letrec: "attempt to assign undefined variable b". ---- 93,99 ---- +--- 146,152 ---- 3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #". @@ -18,7 +18,7 @@ 3.mo:Expected error in mat letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat letrec: "attempt to assign undefined variable b". *************** -*** 191,202 **** +*** 244,255 **** 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -31,7 +31,7 @@ 3.mo:Expected error in mat mrvs: "returned two values to single value return context". 3.mo:Expected error in mat mrvs: "returned two values to single value return context". 3.mo:Expected error in mat mrvs: "cdr: a is not a pair". ---- 191,202 ---- +--- 244,255 ---- 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -45,7 +45,7 @@ 3.mo:Expected error in mat mrvs: "returned two values to single value return context". 3.mo:Expected error in mat mrvs: "cdr: a is not a pair". *************** -*** 233,240 **** +*** 286,293 **** 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let-values: duplicate bound identifier x in (let*-values (((...) (...))) (list x w))". @@ -54,7 +54,7 @@ 4.mo:Expected error in mat apply: "apply: 3 is not a proper list". 4.mo:Expected error in mat apply: "apply: 4 is not a proper list". 4.mo:Expected error in mat apply: "apply: (3 4 5 6 7 8 . 9) is not a proper list". ---- 233,240 ---- +--- 286,293 ---- 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let-values: duplicate bound identifier x in (let*-values (((...) (...))) (list x w))". @@ -64,7 +64,7 @@ 4.mo:Expected error in mat apply: "apply: 4 is not a proper list". 4.mo:Expected error in mat apply: "apply: (3 4 5 6 7 8 . 9) is not a proper list". *************** -*** 493,500 **** +*** 589,596 **** 4.mo:Expected error in mat $primitive: "invalid primitive name fubar". 4.mo:Expected error in mat $primitive: "incorrect argument count in call (car (quote a) (quote b))". 4.mo:Expected error in mat $primitive: "car: 3 is not a pair". @@ -73,7 +73,7 @@ 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". ---- 493,500 ---- +--- 589,596 ---- 4.mo:Expected error in mat $primitive: "invalid primitive name fubar". 4.mo:Expected error in mat $primitive: "incorrect argument count in call (car (quote a) (quote b))". 4.mo:Expected error in mat $primitive: "car: 3 is not a pair". @@ -83,7 +83,7 @@ 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". *************** -*** 504,511 **** +*** 600,607 **** 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". @@ -92,7 +92,7 @@ 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". ---- 504,511 ---- +--- 600,607 ---- 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". @@ -102,7 +102,7 @@ 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". *************** -*** 547,554 **** +*** 643,650 **** 5_2.mo:Expected error in mat c....r-errors: "cddadr: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cdddar: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cddddr: incorrect list structure (a . b)". @@ -111,7 +111,7 @@ 5_2.mo:Expected error in mat list-ref: "list-ref: a is not a proper list". 5_2.mo:Expected error in mat list-ref: "list-ref: (a b . c) is not a proper list". 5_2.mo:Expected error in mat list-ref: "list-ref: index 4 is out of range for list (a b)". ---- 547,554 ---- +--- 643,650 ---- 5_2.mo:Expected error in mat c....r-errors: "cddadr: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cdddar: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cddddr: incorrect list structure (a . b)". @@ -121,7 +121,7 @@ 5_2.mo:Expected error in mat list-ref: "list-ref: (a b . c) is not a proper list". 5_2.mo:Expected error in mat list-ref: "list-ref: index 4 is out of range for list (a b)". *************** -*** 635,647 **** +*** 731,743 **** 5_2.mo:Expected error in mat append!: "append!: (b a b a b a ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (c d a b a b ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (a b . c) is not a proper list". @@ -135,7 +135,7 @@ 5_2.mo:Expected error in mat reverse!: "reverse!: a is not a proper list". 5_2.mo:Expected error in mat reverse!: "reverse!: (a b . c) is not a proper list". 5_2.mo:Expected error in mat reverse!: "reverse!: (a b a b a b ...) is circular". ---- 635,647 ---- +--- 731,743 ---- 5_2.mo:Expected error in mat append!: "append!: (b a b a b a ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (c d a b a b ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (a b . c) is not a proper list". @@ -150,7 +150,7 @@ 5_2.mo:Expected error in mat reverse!: "reverse!: (a b . c) is not a proper list". 5_2.mo:Expected error in mat reverse!: "reverse!: (a b a b a b ...) is circular". *************** -*** 654,671 **** +*** 750,767 **** 5_2.mo:Expected error in mat find: "find: improper list (a b . c)". 5_2.mo:Expected error in mat find: "find: improper list (a b c . d)". 5_2.mo:Expected error in mat find: "find: a is not a procedure". @@ -169,7 +169,7 @@ 5_2.mo:Expected error in mat member: "member: improper list a". 5_2.mo:Expected error in mat member: "member: cyclic list (a b a b a b ...)". 5_2.mo:Expected error in mat member: "member: improper list (a b . c)". ---- 654,671 ---- +--- 750,767 ---- 5_2.mo:Expected error in mat find: "find: improper list (a b . c)". 5_2.mo:Expected error in mat find: "find: improper list (a b c . d)". 5_2.mo:Expected error in mat find: "find: a is not a procedure". @@ -189,7 +189,7 @@ 5_2.mo:Expected error in mat member: "member: cyclic list (a b a b a b ...)". 5_2.mo:Expected error in mat member: "member: improper list (a b . c)". *************** -*** 708,717 **** +*** 804,813 **** 5_2.mo:Expected error in mat assv: "assv: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". @@ -200,7 +200,7 @@ 5_2.mo:Expected error in mat sort: "sort: 3 is not a proper list". 5_2.mo:Expected error in mat sort: "sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort: "sort: (1 2 . 3) is not a proper list". ---- 708,717 ---- +--- 804,813 ---- 5_2.mo:Expected error in mat assv: "assv: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". @@ -212,7 +212,7 @@ 5_2.mo:Expected error in mat sort: "sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort: "sort: (1 2 . 3) is not a proper list". *************** -*** 720,729 **** +*** 816,825 **** 5_2.mo:Expected error in mat sort: "sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat sort: "sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat sort: ">: b is not a real number". @@ -223,7 +223,7 @@ 5_2.mo:Expected error in mat list-sort: "list-sort: 3 is not a proper list". 5_2.mo:Expected error in mat list-sort: "list-sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat list-sort: "list-sort: (1 2 . 3) is not a proper list". ---- 720,729 ---- +--- 816,825 ---- 5_2.mo:Expected error in mat sort: "sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat sort: "sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat sort: ">: b is not a real number". @@ -235,7 +235,7 @@ 5_2.mo:Expected error in mat list-sort: "list-sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat list-sort: "list-sort: (1 2 . 3) is not a proper list". *************** -*** 732,741 **** +*** 828,837 **** 5_2.mo:Expected error in mat list-sort: "list-sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat list-sort: "list-sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat list-sort: ">: b is not a real number". @@ -246,7 +246,7 @@ 5_2.mo:Expected error in mat sort!: "sort!: 3 is not a proper list". 5_2.mo:Expected error in mat sort!: "sort!: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort!: "sort!: (1 2 . 3) is not a proper list". ---- 732,741 ---- +--- 828,837 ---- 5_2.mo:Expected error in mat list-sort: "list-sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat list-sort: "list-sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat list-sort: ">: b is not a real number". @@ -258,7 +258,7 @@ 5_2.mo:Expected error in mat sort!: "sort!: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort!: "sort!: (1 2 . 3) is not a proper list". *************** -*** 764,781 **** +*** 860,877 **** 5_2.mo:Expected error in mat iota: "iota: -1 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 1000000000000000000000000000000 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 3/4 is not a nonnegative fixnum". @@ -277,7 +277,7 @@ 5_3.mo:Expected error in mat r6rs:string->number: "string->number: a is not a string". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 0 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 37 is not a valid radix". ---- 764,781 ---- +--- 860,877 ---- 5_2.mo:Expected error in mat iota: "iota: -1 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 1000000000000000000000000000000 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 3/4 is not a nonnegative fixnum". @@ -297,7 +297,7 @@ 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 0 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 37 is not a valid radix". *************** -*** 786,792 **** +*** 882,888 **** 5_3.mo:Expected error in mat r6rs:string->number: "string->number: is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 36 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: a is not a valid radix". @@ -305,7 +305,7 @@ 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". ---- 786,792 ---- +--- 882,888 ---- 5_3.mo:Expected error in mat r6rs:string->number: "string->number: is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 36 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: a is not a valid radix". @@ -314,7 +314,7 @@ 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". *************** -*** 822,828 **** +*** 918,924 **** 5_3.mo:Expected error in mat r6rs:number->string: "number->string: a precision is specified and radix 16 is not 10". 5_3.mo:Expected error in mat exact?: "exact?: a is not a number". 5_3.mo:Expected error in mat inexact?: "inexact?: () is not a number". @@ -322,7 +322,7 @@ 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". ---- 822,828 ---- +--- 918,924 ---- 5_3.mo:Expected error in mat r6rs:number->string: "number->string: a precision is specified and radix 16 is not 10". 5_3.mo:Expected error in mat exact?: "exact?: a is not a number". 5_3.mo:Expected error in mat inexact?: "inexact?: () is not a number". @@ -331,7 +331,7 @@ 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". *************** -*** 831,837 **** +*** 927,933 **** 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". @@ -339,7 +339,7 @@ 5_3.mo:Expected error in mat <: "<: a is not a real number". 5_3.mo:Expected error in mat <: "<: a is not a real number". 5_3.mo:Expected error in mat <: "<: a is not a real number". ---- 831,837 ---- +--- 927,933 ---- 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". @@ -348,7 +348,7 @@ 5_3.mo:Expected error in mat <: "<: a is not a real number". 5_3.mo:Expected error in mat <: "<: a is not a real number". *************** -*** 851,857 **** +*** 947,953 **** 5_3.mo:Expected error in mat <: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat <: "<: 3+1i is not a real number". @@ -356,7 +356,7 @@ 5_3.mo:Expected error in mat <=: "<=: a is not a real number". 5_3.mo:Expected error in mat <=: "<=: a is not a real number". 5_3.mo:Expected error in mat <=: "<=: a is not a real number". ---- 851,857 ---- +--- 947,953 ---- 5_3.mo:Expected error in mat <: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat <: "<: 3+1i is not a real number". @@ -365,7 +365,7 @@ 5_3.mo:Expected error in mat <=: "<=: a is not a real number". 5_3.mo:Expected error in mat <=: "<=: a is not a real number". *************** -*** 871,877 **** +*** 967,973 **** 5_3.mo:Expected error in mat <=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 3+1i is not a real number". @@ -373,7 +373,7 @@ 5_3.mo:Expected error in mat >: ">: a is not a real number". 5_3.mo:Expected error in mat >: ">: a is not a real number". 5_3.mo:Expected error in mat >: ">: a is not a real number". ---- 871,877 ---- +--- 967,973 ---- 5_3.mo:Expected error in mat <=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 3+1i is not a real number". @@ -382,7 +382,7 @@ 5_3.mo:Expected error in mat >: ">: a is not a real number". 5_3.mo:Expected error in mat >: ">: a is not a real number". *************** -*** 891,897 **** +*** 987,993 **** 5_3.mo:Expected error in mat >: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat >: ">: 3+1i is not a real number". @@ -390,7 +390,7 @@ 5_3.mo:Expected error in mat >=: ">=: a is not a real number". 5_3.mo:Expected error in mat >=: ">=: a is not a real number". 5_3.mo:Expected error in mat >=: ">=: a is not a real number". ---- 891,897 ---- +--- 987,993 ---- 5_3.mo:Expected error in mat >: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat >: ">: 3+1i is not a real number". @@ -399,7 +399,7 @@ 5_3.mo:Expected error in mat >=: ">=: a is not a real number". 5_3.mo:Expected error in mat >=: ">=: a is not a real number". *************** -*** 911,918 **** +*** 1007,1014 **** 5_3.mo:Expected error in mat >=: ">=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 2+1i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 3+1i is not a real number". @@ -408,7 +408,7 @@ 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". ---- 911,918 ---- +--- 1007,1014 ---- 5_3.mo:Expected error in mat >=: ">=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 2+1i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 3+1i is not a real number". @@ -418,7 +418,7 @@ 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". *************** -*** 920,927 **** +*** 1016,1023 **** 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". @@ -427,7 +427,7 @@ 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". ---- 920,927 ---- +--- 1016,1023 ---- 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". @@ -437,7 +437,7 @@ 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". *************** -*** 932,939 **** +*** 1028,1035 **** 5_3.mo:Expected error in mat r6rs:<: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 3+1i is not a real number". @@ -446,7 +446,7 @@ 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". ---- 932,939 ---- +--- 1028,1035 ---- 5_3.mo:Expected error in mat r6rs:<: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 3+1i is not a real number". @@ -456,7 +456,7 @@ 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". *************** -*** 944,951 **** +*** 1040,1047 **** 5_3.mo:Expected error in mat r6rs:<=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 3+1i is not a real number". @@ -465,7 +465,7 @@ 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". ---- 944,951 ---- +--- 1040,1047 ---- 5_3.mo:Expected error in mat r6rs:<=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 3+1i is not a real number". @@ -475,7 +475,7 @@ 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". *************** -*** 956,963 **** +*** 1052,1059 **** 5_3.mo:Expected error in mat r6rs:>: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 3+1i is not a real number". @@ -484,7 +484,7 @@ 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". ---- 956,963 ---- +--- 1052,1059 ---- 5_3.mo:Expected error in mat r6rs:>: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 3+1i is not a real number". @@ -494,7 +494,7 @@ 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". *************** -*** 977,983 **** +*** 1073,1079 **** 5_3.mo:Expected error in mat +: "oops". 5_3.mo:Expected error in mat +: "+: #f is not a number". 5_3.mo:Expected error in mat +: "+: #f is not a number". @@ -502,7 +502,7 @@ 5_3.mo:Expected error in mat -: "-: a is not a number". 5_3.mo:Expected error in mat -: "-: a is not a number". 5_3.mo:Expected error in mat -: "-: a is not a number". ---- 977,983 ---- +--- 1073,1079 ---- 5_3.mo:Expected error in mat +: "oops". 5_3.mo:Expected error in mat +: "+: #f is not a number". 5_3.mo:Expected error in mat +: "+: #f is not a number". @@ -511,7 +511,7 @@ 5_3.mo:Expected error in mat -: "-: a is not a number". 5_3.mo:Expected error in mat -: "-: a is not a number". *************** -*** 990,996 **** +*** 1086,1092 **** 5_3.mo:Expected error in mat *: "*: a is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". @@ -519,7 +519,7 @@ 5_3.mo:Expected error in mat /: "/: a is not a number". 5_3.mo:Expected error in mat /: "/: a is not a number". 5_3.mo:Expected error in mat /: "/: a is not a number". ---- 990,996 ---- +--- 1086,1092 ---- 5_3.mo:Expected error in mat *: "*: a is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". @@ -528,7 +528,7 @@ 5_3.mo:Expected error in mat /: "/: a is not a number". 5_3.mo:Expected error in mat /: "/: a is not a number". *************** -*** 1004,1067 **** +*** 1100,1167 **** 5_3.mo:Expected error in mat infinite?: "infinite?: a is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3+4i is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3.0-0.0i is not a real number". @@ -565,12 +565,16 @@ 5_3.mo:Expected error in mat even?: "even?: 3.2 is not an integer". 5_3.mo:Expected error in mat even?: "even?: 3.0+1.0i is not an integer". 5_3.mo:Expected error in mat even?: "even?: 1+1i is not an integer". + 5_3.mo:Expected error in mat even?: "even?: +inf.0 is not an integer". + 5_3.mo:Expected error in mat even?: "even?: +nan.0 is not an integer". ! 5_3.mo:Expected error in mat odd?: "incorrect argument count in call (odd?)". ! 5_3.mo:Expected error in mat odd?: "incorrect argument count in call (odd? 0 1)". 5_3.mo:Expected error in mat odd?: "odd?: a is not an integer". 5_3.mo:Expected error in mat odd?: "odd?: 3.2 is not an integer". 5_3.mo:Expected error in mat odd?: "odd?: 3.0+1.0i is not an integer". 5_3.mo:Expected error in mat odd?: "odd?: 3+1i is not an integer". + 5_3.mo:Expected error in mat odd?: "odd?: +inf.0 is not an integer". + 5_3.mo:Expected error in mat odd?: "odd?: +nan.0 is not an integer". ! 5_3.mo:Expected error in mat \x31;+: "incorrect argument count in call (\x31;+)". ! 5_3.mo:Expected error in mat \x31;+: "incorrect argument count in call (\x31;+ 0 1)". 5_3.mo:Expected error in mat \x31;+: "1+: a is not a number". @@ -593,7 +597,7 @@ 5_3.mo:Expected error in mat quotient: "quotient: a is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: a is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2/5 is not an integer". ---- 1004,1067 ---- +--- 1100,1167 ---- 5_3.mo:Expected error in mat infinite?: "infinite?: a is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3+4i is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3.0-0.0i is not a real number". @@ -630,12 +634,16 @@ 5_3.mo:Expected error in mat even?: "even?: 3.2 is not an integer". 5_3.mo:Expected error in mat even?: "even?: 3.0+1.0i is not an integer". 5_3.mo:Expected error in mat even?: "even?: 1+1i is not an integer". + 5_3.mo:Expected error in mat even?: "even?: +inf.0 is not an integer". + 5_3.mo:Expected error in mat even?: "even?: +nan.0 is not an integer". ! 5_3.mo:Expected error in mat odd?: "incorrect number of arguments to #". ! 5_3.mo:Expected error in mat odd?: "incorrect number of arguments to #". 5_3.mo:Expected error in mat odd?: "odd?: a is not an integer". 5_3.mo:Expected error in mat odd?: "odd?: 3.2 is not an integer". 5_3.mo:Expected error in mat odd?: "odd?: 3.0+1.0i is not an integer". 5_3.mo:Expected error in mat odd?: "odd?: 3+1i is not an integer". + 5_3.mo:Expected error in mat odd?: "odd?: +inf.0 is not an integer". + 5_3.mo:Expected error in mat odd?: "odd?: +nan.0 is not an integer". ! 5_3.mo:Expected error in mat \x31;+: "incorrect number of arguments to #". ! 5_3.mo:Expected error in mat \x31;+: "incorrect number of arguments to #". 5_3.mo:Expected error in mat \x31;+: "1+: a is not a number". @@ -659,7 +667,7 @@ 5_3.mo:Expected error in mat quotient: "quotient: a is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2/5 is not an integer". *************** -*** 1074,1083 **** +*** 1174,1183 **** 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2.0+1.0i is not an integer". @@ -670,7 +678,7 @@ 5_3.mo:Expected error in mat remainder: "remainder: a is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: a is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2/5 is not an integer". ---- 1074,1083 ---- +--- 1174,1183 ---- 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2.0+1.0i is not an integer". @@ -682,7 +690,7 @@ 5_3.mo:Expected error in mat remainder: "remainder: a is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2/5 is not an integer". *************** -*** 1088,1096 **** +*** 1188,1196 **** 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: -3+2i is not an integer". @@ -692,7 +700,7 @@ 5_3.mo:Expected error in mat modulo: "modulo: a is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: a is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: 3/5 is not an integer". ---- 1088,1096 ---- +--- 1188,1196 ---- 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: -3+2i is not an integer". @@ -703,7 +711,7 @@ 5_3.mo:Expected error in mat modulo: "modulo: a is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: 3/5 is not an integer". *************** -*** 1100,1145 **** +*** 1200,1245 **** 5_3.mo:Expected error in mat modulo: "modulo: 3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3+2i is not an integer". @@ -750,7 +758,7 @@ 5_3.mo:Expected error in mat min: "min: a is not a real number". 5_3.mo:Expected error in mat min: "min: a is not a real number". 5_3.mo:Expected error in mat min: "min: a is not a real number". ---- 1100,1145 ---- +--- 1200,1245 ---- 5_3.mo:Expected error in mat modulo: "modulo: 3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3+2i is not an integer". @@ -798,7 +806,7 @@ 5_3.mo:Expected error in mat min: "min: a is not a real number". 5_3.mo:Expected error in mat min: "min: a is not a real number". *************** -*** 1198,1220 **** +*** 1298,1320 **** 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". @@ -822,7 +830,7 @@ 5_3.mo:Expected error in mat random: "random: invalid argument a". 5_3.mo:Expected error in mat random: "random: invalid argument -3". 5_3.mo:Expected error in mat random: "random: invalid argument 0". ---- 1198,1220 ---- +--- 1298,1320 ---- 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". @@ -847,7 +855,7 @@ 5_3.mo:Expected error in mat random: "random: invalid argument -3". 5_3.mo:Expected error in mat random: "random: invalid argument 0". *************** -*** 1227,1265 **** +*** 1327,1365 **** 5_3.mo:Expected error in mat random-seed: "random-seed: invalid argument 0". 5_3.mo:Expected error in mat random-seed: "random-seed: invalid argument -1". 5_3.mo:Expected error in mat random-seed: "random-seed: invalid argument ". @@ -887,7 +895,7 @@ 5_3.mo:Expected error in mat imag-part: "imag-part: a is not a complex number". 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: a is not a real number". 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: b is not a real number". ---- 1227,1265 ---- +--- 1327,1365 ---- 5_3.mo:Expected error in mat random-seed: "random-seed: invalid argument 0". 5_3.mo:Expected error in mat random-seed: "random-seed: invalid argument -1". 5_3.mo:Expected error in mat random-seed: "random-seed: invalid argument ". @@ -928,7 +936,7 @@ 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: a is not a real number". 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: b is not a real number". *************** -*** 1269,1345 **** +*** 1369,1445 **** 5_3.mo:Expected error in mat make-polar: "make-polar: b is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". @@ -1006,7 +1014,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: 35.0 is not an exact integer". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 8.0". ---- 1269,1345 ---- +--- 1369,1445 ---- 5_3.mo:Expected error in mat make-polar: "make-polar: b is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". @@ -1085,7 +1093,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 8.0". *************** -*** 1350,1360 **** +*** 1450,1460 **** 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index ". @@ -1097,7 +1105,7 @@ 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: a is not an exact integer". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 2.0". ---- 1350,1360 ---- +--- 1450,1460 ---- 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index ". @@ -1110,7 +1118,7 @@ 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 2.0". *************** -*** 1367,1377 **** +*** 1467,1477 **** 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". @@ -1122,7 +1130,7 @@ 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: a is not an exact integer". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 2.0". ---- 1367,1377 ---- +--- 1467,1477 ---- 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". @@ -1135,7 +1143,7 @@ 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 2.0". *************** -*** 1385,1394 **** +*** 1485,1494 **** 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". @@ -1146,7 +1154,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: 35.0 is not an exact integer". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index 8.0". ---- 1385,1394 ---- +--- 1485,1494 ---- 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". @@ -1158,7 +1166,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index 8.0". *************** -*** 1399,1422 **** +*** 1499,1522 **** 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index 5 is greater than end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index is greater than end index ". @@ -1183,7 +1191,7 @@ 5_3.mo:Expected error in mat bitwise-first-bit-set: "bitwise-first-bit-set: 3.0 is not an exact integer". 5_3.mo:Expected error in mat bitwise-first-bit-set: "bitwise-first-bit-set: a is not an exact integer". 5_3.mo:Expected error in mat $quotient-remainder: "incorrect number of arguments to #". ---- 1399,1422 ---- +--- 1499,1522 ---- 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index 5 is greater than end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index is greater than end index ". @@ -1209,7 +1217,7 @@ 5_3.mo:Expected error in mat bitwise-first-bit-set: "bitwise-first-bit-set: a is not an exact integer". 5_3.mo:Expected error in mat $quotient-remainder: "incorrect number of arguments to #". *************** -*** 1542,1597 **** +*** 1642,1697 **** 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.0 is not an exact integer". @@ -1266,7 +1274,7 @@ 5_3.mo:Expected error in mat real->flonum: "real->flonum: a is not a real number". 5_3.mo:Expected error in mat real->flonum: "real->flonum: 3+4i is not a real number". 5_3.mo:Expected error in mat div-and-mod: "div-and-mod: undefined for 0". ---- 1542,1597 ---- +--- 1642,1697 ---- 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.0 is not an exact integer". @@ -1324,10 +1332,10 @@ 5_3.mo:Expected error in mat real->flonum: "real->flonum: 3+4i is not a real number". 5_3.mo:Expected error in mat div-and-mod: "div-and-mod: undefined for 0". *************** -*** 1624,1784 **** - 5_3.mo:Expected error in mat div0-and-mod0: "mod0: undefined for 0". - 5_3.mo:Expected error in mat div0-and-mod0: "mod0: undefined for a". - 5_3.mo:Expected error in mat div0-and-mod0: "mod0: undefined for (a)". +*** 1803,1963 **** + 5_3.mo:Expected error in mat special-cases: "+: bogus is not a number". + 5_3.mo:Expected error in mat special-cases: "-: bogus is not a number". + 5_3.mo:Expected error in mat special-cases: "-: bogus is not a number". ! 5_4.mo:Expected error in mat char=?/char-ci=?: "incorrect argument count in call (char=?)". 5_4.mo:Expected error in mat char=?/char-ci=?: "char=?: a is not a character". 5_4.mo:Expected error in mat char=?/char-ci=?: "char=?: a is not a character". @@ -1486,10 +1494,10 @@ 5_4.mo:Expected error in mat integer->char: "integer->char: a is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: #f is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: #\a is not a valid unicode scalar value". ---- 1624,1784 ---- - 5_3.mo:Expected error in mat div0-and-mod0: "mod0: undefined for 0". - 5_3.mo:Expected error in mat div0-and-mod0: "mod0: undefined for a". - 5_3.mo:Expected error in mat div0-and-mod0: "mod0: undefined for (a)". +--- 1803,1963 ---- + 5_3.mo:Expected error in mat special-cases: "+: bogus is not a number". + 5_3.mo:Expected error in mat special-cases: "-: bogus is not a number". + 5_3.mo:Expected error in mat special-cases: "-: bogus is not a number". ! 5_4.mo:Expected error in mat char=?/char-ci=?: "incorrect number of arguments to #". 5_4.mo:Expected error in mat char=?/char-ci=?: "char=?: a is not a character". 5_4.mo:Expected error in mat char=?/char-ci=?: "char=?: a is not a character". @@ -1649,7 +1657,7 @@ 5_4.mo:Expected error in mat integer->char: "integer->char: #f is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: #\a is not a valid unicode scalar value". *************** -*** 1797,1809 **** +*** 1976,1988 **** 5_4.mo:Expected error in mat integer->char: "integer->char: 1114112 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: 1179648 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: is not a valid unicode scalar value". @@ -1663,7 +1671,7 @@ 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". ---- 1797,1809 ---- +--- 1976,1988 ---- 5_4.mo:Expected error in mat integer->char: "integer->char: 1114112 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: 1179648 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: is not a valid unicode scalar value". @@ -1678,7 +1686,7 @@ 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". *************** -*** 1818,1963 **** +*** 1997,2142 **** 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "" and "x" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". @@ -1825,7 +1833,7 @@ 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". ---- 1818,1963 ---- +--- 1997,2142 ---- 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "" and "x" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". @@ -1973,7 +1981,7 @@ 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". *************** -*** 1965,2003 **** +*** 2144,2182 **** 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". @@ -2013,7 +2021,7 @@ 5_5.mo:Expected error in mat string-copy!: "string-copy!: 0 is not a string". 5_5.mo:Expected error in mat string-copy!: "string-copy!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-copy!: "string-copy!: invalid start value -1". ---- 1965,2003 ---- +--- 2144,2182 ---- 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". @@ -2054,7 +2062,7 @@ 5_5.mo:Expected error in mat string-copy!: "string-copy!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-copy!: "string-copy!: invalid start value -1". *************** -*** 2021,2029 **** +*** 2200,2208 **** 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 4 + count 1 is beyond the end of "1234"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 0 + count 500 is beyond the end of "abcdefghi"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 500 + count 0 is beyond the end of "abcdefghi"". @@ -2064,7 +2072,7 @@ 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: 0 is not a mutable string". 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: invalid new length -1 for "abcdefghi"". ---- 2021,2029 ---- +--- 2200,2208 ---- 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 4 + count 1 is beyond the end of "1234"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 0 + count 500 is beyond the end of "abcdefghi"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 500 + count 0 is beyond the end of "abcdefghi"". @@ -2075,7 +2083,7 @@ 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: invalid new length -1 for "abcdefghi"". *************** -*** 2035,2087 **** +*** 2214,2266 **** 5_5.mo:Expected error in mat string-append: "string-append: b is not a string". 5_5.mo:Expected error in mat string-append: "string-append: b is not a string". 5_5.mo:Expected error in mat string-append: "string-copy: a is not a string". @@ -2129,7 +2137,7 @@ bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: -1 is not a valid bytevector length". bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: -1 is not a valid bytevector length". bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: is not a valid bytevector length". ---- 2035,2087 ---- +--- 2214,2266 ---- 5_5.mo:Expected error in mat string-append: "string-append: b is not a string". 5_5.mo:Expected error in mat string-append: "string-append: b is not a string". 5_5.mo:Expected error in mat string-append: "string-copy: a is not a string". @@ -2184,7 +2192,7 @@ bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: -1 is not a valid bytevector length". bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: is not a valid bytevector length". *************** -*** 2098,2127 **** +*** 2277,2306 **** bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value -500". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 1e100". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000". @@ -2215,7 +2223,7 @@ bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: 3 is not a valid index for #vu8(3 4 5)". ---- 2098,2127 ---- +--- 2277,2306 ---- bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value -500". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 1e100". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000". @@ -2247,7 +2255,7 @@ bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: 3 is not a valid index for #vu8(3 4 5)". *************** -*** 2130,2139 **** +*** 2309,2318 **** bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value -129". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value 128". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value d". @@ -2258,7 +2266,7 @@ bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: 3 is not a valid index for #vu8(3 4 5)". ---- 2130,2139 ---- +--- 2309,2318 ---- bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value -129". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value 128". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value d". @@ -2270,7 +2278,7 @@ bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: 3 is not a valid index for #vu8(3 4 5)". *************** -*** 2142,2150 **** +*** 2321,2329 **** bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value 256". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value d". @@ -2280,7 +2288,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2142,2150 ---- +--- 2321,2329 ---- bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value 256". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value d". @@ -2291,7 +2299,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2152,2160 **** +*** 2331,2339 **** bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2301,7 +2309,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2152,2160 ---- +--- 2331,2339 ---- bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2312,7 +2320,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2162,2171 **** +*** 2341,2350 **** bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2323,7 +2331,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2162,2171 ---- +--- 2341,2350 ---- bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2335,7 +2343,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2179,2188 **** +*** 2358,2367 **** bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value 32768". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value -32769". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value "hello"". @@ -2346,7 +2354,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2179,2188 ---- +--- 2358,2367 ---- bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value 32768". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value -32769". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value "hello"". @@ -2358,7 +2366,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2196,2204 **** +*** 2375,2383 **** bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value 65536". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value "hello"". @@ -2368,7 +2376,7 @@ bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2196,2204 ---- +--- 2375,2383 ---- bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value 65536". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value "hello"". @@ -2379,7 +2387,7 @@ bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2208,2216 **** +*** 2387,2395 **** bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness #t". @@ -2389,7 +2397,7 @@ bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2208,2216 ---- +--- 2387,2395 ---- bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness #t". @@ -2400,7 +2408,7 @@ bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2220,2229 **** +*** 2399,2408 **** bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness #t". @@ -2411,7 +2419,7 @@ bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2220,2229 ---- +--- 2399,2408 ---- bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness #t". @@ -2423,7 +2431,7 @@ bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2239,2248 **** +*** 2418,2427 **** bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness #t". @@ -2434,7 +2442,7 @@ bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2239,2248 ---- +--- 2418,2427 ---- bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness #t". @@ -2446,7 +2454,7 @@ bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2258,2267 **** +*** 2437,2446 **** bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness #t". @@ -2457,7 +2465,7 @@ bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2258,2267 ---- +--- 2437,2446 ---- bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness #t". @@ -2469,7 +2477,7 @@ bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2271,2280 **** +*** 2450,2459 **** bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness #t". @@ -2480,7 +2488,7 @@ bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2271,2280 ---- +--- 2450,2459 ---- bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness #t". @@ -2492,7 +2500,7 @@ bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2284,2294 **** +*** 2463,2473 **** bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness #t". @@ -2504,7 +2512,7 @@ bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2284,2294 ---- +--- 2463,2473 ---- bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness #t". @@ -2517,7 +2525,7 @@ bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2302,2312 **** +*** 2481,2491 **** bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2529,7 +2537,7 @@ bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2302,2312 ---- +--- 2481,2491 ---- bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2542,7 +2550,7 @@ bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2320,2328 **** +*** 2499,2507 **** bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2552,7 +2560,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2320,2328 ---- +--- 2499,2507 ---- bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2563,7 +2571,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2334,2342 **** +*** 2513,2521 **** bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2573,7 +2581,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2334,2342 ---- +--- 2513,2521 ---- bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2584,7 +2592,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2348,2357 **** +*** 2527,2536 **** bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2595,7 +2603,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2348,2357 ---- +--- 2527,2536 ---- bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2607,7 +2615,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2378,2387 **** +*** 2557,2566 **** bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value "hello"". @@ -2618,7 +2626,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2378,2387 ---- +--- 2557,2566 ---- bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value "hello"". @@ -2630,7 +2638,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2408,2417 **** +*** 2587,2596 **** bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value "hello"". @@ -2641,7 +2649,7 @@ bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2408,2417 ---- +--- 2587,2596 ---- bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value "hello"". @@ -2653,7 +2661,7 @@ bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2421,2430 **** +*** 2600,2609 **** bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness #t". @@ -2664,7 +2672,7 @@ bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2421,2430 ---- +--- 2600,2609 ---- bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness #t". @@ -2676,7 +2684,7 @@ bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2434,2444 **** +*** 2613,2623 **** bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness #t". @@ -2688,7 +2696,7 @@ bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2434,2444 ---- +--- 2613,2623 ---- bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness #t". @@ -2701,7 +2709,7 @@ bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2453,2463 **** +*** 2632,2642 **** bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2713,7 +2721,7 @@ bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2453,2463 ---- +--- 2632,2642 ---- bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2726,7 +2734,7 @@ bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2472,2481 **** +*** 2651,2660 **** bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2737,7 +2745,7 @@ bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2472,2481 ---- +--- 2651,2660 ---- bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2749,7 +2757,7 @@ bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2485,2494 **** +*** 2664,2673 **** bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness #t". @@ -2760,7 +2768,7 @@ bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2485,2494 ---- +--- 2664,2673 ---- bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness #t". @@ -2772,7 +2780,7 @@ bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2498,2508 **** +*** 2677,2687 **** bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness #t". @@ -2784,7 +2792,7 @@ bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2498,2508 ---- +--- 2677,2687 ---- bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness #t". @@ -2797,7 +2805,7 @@ bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2516,2526 **** +*** 2695,2705 **** bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2809,7 +2817,7 @@ bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2516,2526 ---- +--- 2695,2705 ---- bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2822,7 +2830,7 @@ bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2534,2543 **** +*** 2713,2722 **** bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2833,7 +2841,7 @@ bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2534,2543 ---- +--- 2713,2722 ---- bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2845,7 +2853,7 @@ bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2547,2556 **** +*** 2726,2735 **** bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness #t". @@ -2856,7 +2864,7 @@ bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2547,2556 ---- +--- 2726,2735 ---- bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness #t". @@ -2868,7 +2876,7 @@ bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2560,2570 **** +*** 2739,2749 **** bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness #t". @@ -2880,7 +2888,7 @@ bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2560,2570 ---- +--- 2739,2749 ---- bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness #t". @@ -2893,7 +2901,7 @@ bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2578,2588 **** +*** 2757,2767 **** bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2905,7 +2913,7 @@ bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2578,2588 ---- +--- 2757,2767 ---- bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2918,7 +2926,7 @@ bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2596,2605 **** +*** 2775,2784 **** bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2929,7 +2937,7 @@ bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2596,2605 ---- +--- 2775,2784 ---- bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2941,7 +2949,7 @@ bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2609,2618 **** +*** 2788,2797 **** bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness #t". @@ -2952,7 +2960,7 @@ bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2609,2618 ---- +--- 2788,2797 ---- bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness #t". @@ -2964,7 +2972,7 @@ bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2622,2632 **** +*** 2801,2811 **** bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness #t". @@ -2976,7 +2984,7 @@ bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2622,2632 ---- +--- 2801,2811 ---- bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness #t". @@ -2989,7 +2997,7 @@ bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2640,2650 **** +*** 2819,2829 **** bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3001,7 +3009,7 @@ bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2640,2650 ---- +--- 2819,2829 ---- bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3014,7 +3022,7 @@ bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2658,2666 **** +*** 2837,2845 **** bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3024,7 +3032,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2658,2666 ---- +--- 2837,2845 ---- bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3035,7 +3043,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2690,2698 **** +*** 2869,2877 **** bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3045,7 +3053,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2690,2698 ---- +--- 2869,2877 ---- bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3056,7 +3064,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2722,2731 **** +*** 2901,2910 **** bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3067,7 +3075,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2722,2731 ---- +--- 2901,2910 ---- bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3079,7 +3087,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2759,2768 **** +*** 2938,2947 **** bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value "hello"". @@ -3090,7 +3098,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2759,2768 ---- +--- 2938,2947 ---- bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value "hello"". @@ -3102,7 +3110,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2796,2805 **** +*** 2975,2984 **** bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value "hello"". @@ -3113,7 +3121,7 @@ bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2796,2805 ---- +--- 2975,2984 ---- bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value "hello"". @@ -3125,7 +3133,7 @@ bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2815,2824 **** +*** 2994,3003 **** bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness 1e23". @@ -3136,7 +3144,7 @@ bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2815,2824 ---- +--- 2994,3003 ---- bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness 1e23". @@ -3148,7 +3156,7 @@ bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2834,2844 **** +*** 3013,3023 **** bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness 1e23". @@ -3160,7 +3168,7 @@ bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2834,2844 ---- +--- 3013,3023 ---- bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness 1e23". @@ -3173,7 +3181,7 @@ bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2857,2867 **** +*** 3036,3046 **** bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #t". @@ -3185,7 +3193,7 @@ bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2857,2867 ---- +--- 3036,3046 ---- bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #t". @@ -3198,7 +3206,7 @@ bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2880,2888 **** +*** 3059,3067 **** bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #t". @@ -3208,7 +3216,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2880,2888 ---- +--- 3059,3067 ---- bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #t". @@ -3219,7 +3227,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2918,2926 **** +*** 3097,3105 **** bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 38 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 39 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3229,7 +3237,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2918,2926 ---- +--- 3097,3105 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 38 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 39 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3240,7 +3248,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2960,2969 **** +*** 3139,3148 **** bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 70 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 71 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3251,7 +3259,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 2960,2969 ---- +--- 3139,3148 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 70 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 71 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3263,7 +3271,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 2997,3006 **** +*** 3176,3185 **** bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: "oops" is not a real number". @@ -3274,7 +3282,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 2997,3006 ---- +--- 3176,3185 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: "oops" is not a real number". @@ -3286,7 +3294,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3046,3055 **** +*** 3225,3234 **** bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: "oops" is not a real number". @@ -3297,7 +3305,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: invalid index -1 for bytevector #vu8(0 0 0 0 199 0 ...)". ---- 3046,3055 ---- +--- 3225,3234 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: "oops" is not a real number". @@ -3309,7 +3317,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: invalid index -1 for bytevector #vu8(0 0 0 0 199 0 ...)". *************** -*** 3061,3070 **** +*** 3240,3249 **** bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness 35". @@ -3320,7 +3328,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3061,3070 ---- +--- 3240,3249 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness 35". @@ -3332,7 +3340,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3080,3090 **** +*** 3259,3269 **** bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness 35". @@ -3344,7 +3352,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 3080,3090 ---- +--- 3259,3269 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness 35". @@ -3357,7 +3365,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3101,3111 **** +*** 3280,3290 **** bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness #\newline". @@ -3369,7 +3377,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 3101,3111 ---- +--- 3280,3290 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness #\newline". @@ -3382,7 +3390,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3126,3136 **** +*** 3305,3315 **** bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness #\newline". @@ -3394,7 +3402,7 @@ bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3126,3136 ---- +--- 3305,3315 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness #\newline". @@ -3407,7 +3415,7 @@ bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3165,3175 **** +*** 3344,3354 **** bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size byte". @@ -3419,7 +3427,7 @@ bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3165,3175 ---- +--- 3344,3354 ---- bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size byte". @@ -3432,7 +3440,7 @@ bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3207,3218 **** +*** 3386,3397 **** bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size for bytevector #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size byte". @@ -3445,7 +3453,7 @@ bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3207,3218 ---- +--- 3386,3397 ---- bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size for bytevector #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size byte". @@ -3459,7 +3467,7 @@ bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3271,3282 **** +*** 3450,3461 **** bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size byte". @@ -3472,7 +3480,7 @@ bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3271,3282 ---- +--- 3450,3461 ---- bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size byte". @@ -3486,7 +3494,7 @@ bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3335,3350 **** +*** 3514,3529 **** bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size byte". @@ -3503,7 +3511,7 @@ bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: 0 is not a bytevector". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: #(1 2 3) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: invalid start value -1". ---- 3335,3350 ---- +--- 3514,3529 ---- bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size byte". @@ -3521,7 +3529,7 @@ bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: #(1 2 3) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: invalid start value -1". *************** -*** 3368,3376 **** +*** 3547,3555 **** bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 4 + count 1 is beyond the end of #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 0 + count 500 is beyond the end of #vu8(255 254 253 252 251 250 ...)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 500 + count 0 is beyond the end of #vu8(255 254 253 252 251 250 ...)". @@ -3531,7 +3539,7 @@ bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: 0 is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: "abc" is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length -1 for #vu8(1 2 3 4 5 6 ...)". ---- 3368,3376 ---- +--- 3547,3555 ---- bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 4 + count 1 is beyond the end of #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 0 + count 500 is beyond the end of #vu8(255 254 253 252 251 250 ...)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 500 + count 0 is beyond the end of #vu8(255 254 253 252 251 250 ...)". @@ -3542,7 +3550,7 @@ bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: "abc" is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length -1 for #vu8(1 2 3 4 5 6 ...)". *************** -*** 3378,3418 **** +*** 3557,3597 **** bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length 1000 for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length a for #vu8(1 2 3 4 5 6 ...)". @@ -3584,7 +3592,7 @@ bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: (1 2 . 3) is not a proper list". ---- 3378,3418 ---- +--- 3557,3597 ---- bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length 1000 for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length a for #vu8(1 2 3 4 5 6 ...)". @@ -3627,7 +3635,7 @@ bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: (1 2 . 3) is not a proper list". *************** -*** 3451,3459 **** +*** 3630,3638 **** bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size "oops"". @@ -3637,7 +3645,7 @@ bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: (1 2 . 3) is not a proper list". ---- 3451,3459 ---- +--- 3630,3638 ---- bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size "oops"". @@ -3648,7 +3656,7 @@ bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: (1 2 . 3) is not a proper list". *************** -*** 3492,3500 **** +*** 3671,3679 **** bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size "oops"". @@ -3658,7 +3666,7 @@ bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: unrecognized endianness spam". ---- 3492,3500 ---- +--- 3671,3679 ---- bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size "oops"". @@ -3669,7 +3677,7 @@ bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: unrecognized endianness spam". *************** -*** 3514,3522 **** +*** 3693,3701 **** bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 50". @@ -3679,7 +3687,7 @@ bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: unrecognized endianness spam". ---- 3514,3522 ---- +--- 3693,3701 ---- bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 50". @@ -3690,7 +3698,7 @@ bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: unrecognized endianness spam". *************** -*** 3536,3544 **** +*** 3715,3723 **** bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 50". @@ -3700,7 +3708,7 @@ bytevector.mo:Expected error in mat bytevector=?: "bytevector=?: a is not a bytevector". bytevector.mo:Expected error in mat bytevector=?: "bytevector=?: "a" is not a bytevector". bytevector.mo:Expected error in mat tspl/csug-examples: "invalid endianness "spam"". ---- 3536,3544 ---- +--- 3715,3723 ---- bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 50". @@ -3711,8 +3719,53 @@ bytevector.mo:Expected error in mat bytevector=?: "bytevector=?: "a" is not a bytevector". bytevector.mo:Expected error in mat tspl/csug-examples: "invalid endianness "spam"". *************** -*** 3585,3596 **** +*** 3823,3843 **** + bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: invalid data in source bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: bytevector #vu8(255 255 255 255 255 255 ...) claims invalid uncompressed size ". + profile.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump (quote ()))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-clear (quote ()))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-list #t (quote ()) 3)". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-html "" (quote ()) 3)". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data)". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data "profile.data" (quote ()) (quote q))". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". +--- 3823,3843 ---- + bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: invalid data in source bytevector #vu8(0 0 0 0 0 0 ...)". + bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: bytevector #vu8(255 255 255 255 255 255 ...) claims invalid uncompressed size ". + profile.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". +*************** +*** 3859,3870 **** + profile.mo:Expected error in mat profile-form: "profile subform is not a source object 3". misc.mo:Expected error in mat compiler1: "variable i-am-not-bound is not bound". misc.mo:Expected error in mat compiler1: "attempt to apply non-procedure oops". ! misc.mo:Expected error in mat compiler1: "incorrect argument count in call (g (list))". @@ -3724,8 +3777,8 @@ misc.mo:Expected error in mat compiler3: "incorrect argument count in call (consumer 1 2) at line 3, char 19 of testfile.ss". misc.mo:Expected error in mat compiler3: "incorrect argument count in call (consumer 1 2)". misc.mo:Expected error in mat compiler3: "variable goto is not bound". ---- 3585,3596 ---- - bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: bytevector #vu8(255 255 255 255 255 255 ...) claims invalid uncompressed size ". +--- 3859,3870 ---- + profile.mo:Expected error in mat profile-form: "profile subform is not a source object 3". misc.mo:Expected error in mat compiler1: "variable i-am-not-bound is not bound". misc.mo:Expected error in mat compiler1: "attempt to apply non-procedure oops". ! misc.mo:Expected error in mat compiler1: "incorrect argument count in call (g (($top-level-value (...))))". @@ -3738,69 +3791,24 @@ misc.mo:Expected error in mat compiler3: "incorrect argument count in call (consumer 1 2)". misc.mo:Expected error in mat compiler3: "variable goto is not bound". *************** -*** 3662,3682 **** - misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". - misc.mo:Expected error in mat cpletrec: "attempt to assign undefined variable b". - misc.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump (quote ()))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-clear (quote ()))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-list #t (quote ()) 3)". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-html "" (quote ()) 3)". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data)". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data "profile.data" (quote ()) (quote q))". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". ---- 3662,3682 ---- - misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". - misc.mo:Expected error in mat cpletrec: "attempt to assign undefined variable b". - misc.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments to #". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". -*************** -*** 3709,3715 **** +*** 3952,3958 **** misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". - misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 2". + misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 4". ! misc.mo:Expected error in mat cost-center: "incorrect argument count in call (make-cost-center (quote foo))". misc.mo:Expected error in mat cost-center: "with-cost-center: foo is not a cost center". misc.mo:Expected error in mat cost-center: "with-cost-center: bar is not a procedure". misc.mo:Expected error in mat cost-center: "cost-center-instruction-count: 5 is not a cost center". ---- 3709,3715 ---- +--- 3952,3958 ---- misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". - misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 2". + misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 4". ! misc.mo:Expected error in mat cost-center: "incorrect number of arguments to #". misc.mo:Expected error in mat cost-center: "with-cost-center: foo is not a cost center". misc.mo:Expected error in mat cost-center: "with-cost-center: bar is not a procedure". misc.mo:Expected error in mat cost-center: "cost-center-instruction-count: 5 is not a cost center". *************** -*** 3763,3770 **** +*** 4006,4013 **** misc.mo:Expected error in mat apropos: "apropos: 3 is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos: (hit me) is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos-list: b is not an environment". @@ -3809,7 +3817,7 @@ misc.mo:Expected error in mat apropos: "variable $apropos-unbound1 is not bound". misc.mo:Expected error in mat apropos: "variable $apropos-unbound2 is not bound". misc.mo:Expected error in mat simplify-if: "textual-port?: a is not a port". ---- 3763,3770 ---- +--- 4006,4013 ---- misc.mo:Expected error in mat apropos: "apropos: 3 is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos: (hit me) is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos-list: b is not an environment". @@ -3819,20 +3827,20 @@ misc.mo:Expected error in mat apropos: "variable $apropos-unbound2 is not bound". misc.mo:Expected error in mat simplify-if: "textual-port?: a is not a port". *************** -*** 3790,3798 **** - cp0.mo:Expected error in mat cp0-regression: "source-object-efp: #f is not a source object". - cp0.mo:Expected error in mat cp0-regression: "source-object-sfd: #f is not a source object". +*** 4035,4043 **** cp0.mo:Expected error in mat cp0-regression: "condition: #f is not a condition". + cp0.mo:Expected error in mat cp0-regression: "apply: 0 is not a proper list". + cp0.mo:Expected error in mat cp0-regression: "apply: 2 is not a proper list". ! cp0.mo:Expected error in mat expand/optimize: "incorrect argument count in call (expand/optimize)". cp0.mo:Expected error in mat expand/optimize: "expand/optimize: b is not an environment". ! cp0.mo:Expected error in mat expand/optimize: "incorrect argument count in call (expand/optimize (quote a) (quote b) (quote c))". cp0.mo:Expected error in mat expand-output: "expand-output: #t is not a textual output port or #f". cp0.mo:Expected error in mat expand-output: "expand-output: # is not a textual output port or #f". cp0.mo:Expected error in mat expand/optimize-output: "expand/optimize-output: #t is not a textual output port or #f". ---- 3790,3798 ---- - cp0.mo:Expected error in mat cp0-regression: "source-object-efp: #f is not a source object". - cp0.mo:Expected error in mat cp0-regression: "source-object-sfd: #f is not a source object". +--- 4035,4043 ---- cp0.mo:Expected error in mat cp0-regression: "condition: #f is not a condition". + cp0.mo:Expected error in mat cp0-regression: "apply: 0 is not a proper list". + cp0.mo:Expected error in mat cp0-regression: "apply: 2 is not a proper list". ! cp0.mo:Expected error in mat expand/optimize: "incorrect number of arguments to #". cp0.mo:Expected error in mat expand/optimize: "expand/optimize: b is not an environment". ! cp0.mo:Expected error in mat expand/optimize: "incorrect number of arguments to #". @@ -3840,7 +3848,7 @@ cp0.mo:Expected error in mat expand-output: "expand-output: # is not a textual output port or #f". cp0.mo:Expected error in mat expand/optimize-output: "expand/optimize-output: #t is not a textual output port or #f". *************** -*** 3856,3864 **** +*** 4101,4109 **** 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 . 3) is not a proper list". 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 3 2 3 2 ...) is circular". 5_6.mo:Expected error in mat fxvector->list: "fxvector->list: (a b c) is not an fxvector". @@ -3850,7 +3858,7 @@ 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". ---- 3856,3864 ---- +--- 4101,4109 ---- 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 . 3) is not a proper list". 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 3 2 3 2 ...) is circular". 5_6.mo:Expected error in mat fxvector->list: "fxvector->list: (a b c) is not an fxvector". @@ -3861,7 +3869,7 @@ 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". *************** -*** 3873,3881 **** +*** 4118,4126 **** 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". @@ -3871,7 +3879,7 @@ 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". ---- 3873,3881 ---- +--- 4118,4126 ---- 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". @@ -3882,7 +3890,7 @@ 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". *************** -*** 3890,3907 **** +*** 4135,4152 **** 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". @@ -3901,7 +3909,7 @@ 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: 3 is not a mutable vector". 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: (1 2 3) is not a mutable vector". 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: #(a b c) is not a procedure". ---- 3890,3907 ---- +--- 4135,4152 ---- 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". @@ -3921,7 +3929,47 @@ 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: (1 2 3) is not a mutable vector". 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: #(a b c) is not a procedure". *************** -*** 3969,3990 **** +*** 4157,4165 **** + 5_6.mo:Expected error in mat vector->immutable-vector: "vector-sort!: #(1 2 3) is not a mutable vector". + 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-set!: #vfx(1 2 3) is not a mutable fxvector". + 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-fill!: #vfx(1 2 3) is not a mutable fxvector". +! 5_6.mo:Expected error in mat vector-cas!: "incorrect argument count in call (vector-cas! vec1)". +! 5_6.mo:Expected error in mat vector-cas!: "incorrect argument count in call (vector-cas! vec1 1)". +! 5_6.mo:Expected error in mat vector-cas!: "incorrect argument count in call (vector-cas! vec1 1 2)". + 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: 1 is not a mutable vector". + 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a mutable vector". + 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a valid index for #(4 5 3)". +--- 4157,4165 ---- + 5_6.mo:Expected error in mat vector->immutable-vector: "vector-sort!: #(1 2 3) is not a mutable vector". + 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-set!: #vfx(1 2 3) is not a mutable fxvector". + 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-fill!: #vfx(1 2 3) is not a mutable fxvector". +! 5_6.mo:Expected error in mat vector-cas!: "incorrect number of arguments to #". +! 5_6.mo:Expected error in mat vector-cas!: "incorrect number of arguments to #". +! 5_6.mo:Expected error in mat vector-cas!: "incorrect number of arguments to #". + 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: 1 is not a mutable vector". + 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a mutable vector". + 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a valid index for #(4 5 3)". +*************** +*** 4188,4195 **** + 5_7.mo:Expected error in mat putprop-getprop: "getprop: 3 is not a symbol". + 5_7.mo:Expected error in mat putprop-getprop: "putprop: "hi" is not a symbol". + 5_7.mo:Expected error in mat putprop-getprop: "property-list: (a b c) is not a symbol". +! 5_8.mo:Expected error in mat box-cas!: "incorrect argument count in call (box-cas! bx1)". +! 5_8.mo:Expected error in mat box-cas!: "incorrect argument count in call (box-cas! bx1 1)". + 5_8.mo:Expected error in mat box-cas!: "box-cas!: 1 is not a mutable box". + 5_8.mo:Expected error in mat box-cas!: "box-cas!: #&1 is not a mutable box". + 6.mo:Expected error in mat port-operations: "open-input-file: failed for nonexistent file: no such file or directory". +--- 4188,4195 ---- + 5_7.mo:Expected error in mat putprop-getprop: "getprop: 3 is not a symbol". + 5_7.mo:Expected error in mat putprop-getprop: "putprop: "hi" is not a symbol". + 5_7.mo:Expected error in mat putprop-getprop: "property-list: (a b c) is not a symbol". +! 5_8.mo:Expected error in mat box-cas!: "incorrect number of arguments to #". +! 5_8.mo:Expected error in mat box-cas!: "incorrect number of arguments to #". + 5_8.mo:Expected error in mat box-cas!: "box-cas!: 1 is not a mutable box". + 5_8.mo:Expected error in mat box-cas!: "box-cas!: #&1 is not a mutable box". + 6.mo:Expected error in mat port-operations: "open-input-file: failed for nonexistent file: no such file or directory". +*************** +*** 4227,4248 **** 6.mo:Expected error in mat port-operations: "clear-output-port: not permitted on closed port #". 6.mo:Expected error in mat port-operations: "current-output-port: a is not a textual output port". 6.mo:Expected error in mat port-operations: "current-input-port: a is not a textual input port". @@ -3938,13 +3986,13 @@ 6.mo:Expected error in mat port-operations: "with-output-to-string: (this too?) is not a procedure". ! 6.mo:Expected error in mat port-operations: "incorrect argument count in call (eof-object #!eof)". 6.mo:Expected error in mat port-operations: "read: unexpected end-of-file reading quote at char 0 of #". - 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) on #". - 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket on #". + 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) before file-position 15 of #; the character position might differ". + 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket before file-position 11 of #; the character position might differ". ! 6.mo:Expected error in mat port-operations1: "incorrect argument count in call (open-input-output-file)". 6.mo:Expected error in mat port-operations1: "open-input-output-file: furball is not a string". 6.mo:Expected error in mat port-operations1: "open-input-output-file: failed for /probably/not/a/good/path: no such file or directory". 6.mo:Expected error in mat port-operations1: "open-input-output-file: invalid option compressed". ---- 3969,3990 ---- +--- 4227,4248 ---- 6.mo:Expected error in mat port-operations: "clear-output-port: not permitted on closed port #". 6.mo:Expected error in mat port-operations: "current-output-port: a is not a textual output port". 6.mo:Expected error in mat port-operations: "current-input-port: a is not a textual input port". @@ -3961,14 +4009,14 @@ 6.mo:Expected error in mat port-operations: "with-output-to-string: (this too?) is not a procedure". ! 6.mo:Expected error in mat port-operations: "incorrect number of arguments to #". 6.mo:Expected error in mat port-operations: "read: unexpected end-of-file reading quote at char 0 of #". - 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) on #". - 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket on #". + 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) before file-position 15 of #; the character position might differ". + 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket before file-position 11 of #; the character position might differ". ! 6.mo:Expected error in mat port-operations1: "incorrect number of arguments to #". 6.mo:Expected error in mat port-operations1: "open-input-output-file: furball is not a string". 6.mo:Expected error in mat port-operations1: "open-input-output-file: failed for /probably/not/a/good/path: no such file or directory". 6.mo:Expected error in mat port-operations1: "open-input-output-file: invalid option compressed". *************** -*** 3993,3999 **** +*** 4251,4257 **** 6.mo:Expected error in mat port-operations1: "truncate-file: all-the-way is not a valid length". 6.mo:Expected error in mat port-operations1: "truncate-file: # is not an output port". 6.mo:Expected error in mat port-operations1: "truncate-file: animal-crackers is not an output port". @@ -3976,7 +4024,7 @@ 6.mo:Expected error in mat port-operations1: "truncate-file: not permitted on closed port #". 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". ---- 3993,3999 ---- +--- 4251,4257 ---- 6.mo:Expected error in mat port-operations1: "truncate-file: all-the-way is not a valid length". 6.mo:Expected error in mat port-operations1: "truncate-file: # is not an output port". 6.mo:Expected error in mat port-operations1: "truncate-file: animal-crackers is not an output port". @@ -3985,7 +4033,7 @@ 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". *************** -*** 4010,4017 **** +*** 4268,4275 **** 6.mo:Expected error in mat string-port-file-position: "file-position: -1 is not a valid position". 6.mo:Expected error in mat fresh-line: "fresh-line: 3 is not a textual output port". 6.mo:Expected error in mat fresh-line: "fresh-line: # is not a textual output port". @@ -3993,8 +4041,8 @@ ! 6.mo:Expected error in mat pretty-print: "incorrect argument count in call (pretty-format (quote foo) (quote x) (quote x))". 6.mo:Expected error in mat pretty-print: "pretty-format: 3 is not a symbol". 6.mo:Expected error in mat pretty-print: "pretty-format: invalid format (bad 0 ... ... 0 format)". - 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "~a~~~s" in call to format". ---- 4010,4017 ---- + 6.mo:Expected error in mat fasl: "separate-eval: Warning in fasl-write: fasl file content is compressed internally; compressing the file (#) is redundant and can slow fasl writing and reading significantly +--- 4268,4275 ---- 6.mo:Expected error in mat string-port-file-position: "file-position: -1 is not a valid position". 6.mo:Expected error in mat fresh-line: "fresh-line: 3 is not a textual output port". 6.mo:Expected error in mat fresh-line: "fresh-line: # is not a textual output port". @@ -4002,9 +4050,9 @@ ! 6.mo:Expected error in mat pretty-print: "incorrect number of arguments to #". 6.mo:Expected error in mat pretty-print: "pretty-format: 3 is not a symbol". 6.mo:Expected error in mat pretty-print: "pretty-format: invalid format (bad 0 ... ... 0 format)". - 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "~a~~~s" in call to format". + 6.mo:Expected error in mat fasl: "separate-eval: Warning in fasl-write: fasl file content is compressed internally; compressing the file (#) is redundant and can slow fasl writing and reading significantly *************** -*** 6495,6526 **** +*** 6755,6786 **** io.mo:Expected error in mat port-operations: "put-u8: not permitted on closed port #". io.mo:Expected error in mat port-operations: "put-bytevector: not permitted on closed port #". io.mo:Expected error in mat port-operations: "flush-output-port: not permitted on closed port #". @@ -4037,7 +4085,7 @@ io.mo:Expected error in mat port-operations1: "open-file-input/output-port: failed for /probably/not/a/good/path: no such file or directory". io.mo:Expected error in mat port-operations1: "invalid file option uncompressed". io.mo:Expected error in mat port-operations1: "invalid file option truncate". ---- 6495,6526 ---- +--- 6755,6786 ---- io.mo:Expected error in mat port-operations: "put-u8: not permitted on closed port #". io.mo:Expected error in mat port-operations: "put-bytevector: not permitted on closed port #". io.mo:Expected error in mat port-operations: "flush-output-port: not permitted on closed port #". @@ -4071,7 +4119,7 @@ io.mo:Expected error in mat port-operations1: "invalid file option uncompressed". io.mo:Expected error in mat port-operations1: "invalid file option truncate". *************** -*** 6531,6537 **** +*** 6791,6797 **** io.mo:Expected error in mat port-operations1: "set-port-length!: all-the-way is not a valid length". io.mo:Expected error in mat port-operations1: "truncate-port: # is not an output port". io.mo:Expected error in mat port-operations1: "truncate-port: animal-crackers is not an output port". @@ -4079,7 +4127,7 @@ io.mo:Expected error in mat port-operations1: "truncate-port: not permitted on closed port #". io.mo:Expected error in mat port-operations3: "file-port?: "not a port" is not a port". io.mo:Expected error in mat port-operations3: "port-file-descriptor: oops is not a port". ---- 6531,6537 ---- +--- 6791,6797 ---- io.mo:Expected error in mat port-operations1: "set-port-length!: all-the-way is not a valid length". io.mo:Expected error in mat port-operations1: "truncate-port: # is not an output port". io.mo:Expected error in mat port-operations1: "truncate-port: animal-crackers is not an output port". @@ -4088,7 +4136,7 @@ io.mo:Expected error in mat port-operations3: "file-port?: "not a port" is not a port". io.mo:Expected error in mat port-operations3: "port-file-descriptor: oops is not a port". *************** -*** 6714,6726 **** +*** 6974,6986 **** io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: #vu8(1 2 3) is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: -1 is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: 6 is not a valid size for #". @@ -4102,7 +4150,7 @@ io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: shoe is not a positive fixnum". io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: 0 is not a positive fixnum". io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: -15 is not a positive fixnum". ---- 6714,6726 ---- +--- 6974,6986 ---- io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: #vu8(1 2 3) is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: -1 is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: 6 is not a valid size for #". @@ -4117,8 +4165,8 @@ io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: 0 is not a positive fixnum". io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: -15 is not a positive fixnum". *************** -*** 6728,6743 **** - io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: 1024.0 is not a positive fixnum". +*** 7006,7021 **** + io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". io.mo:Expected error in mat compression: "port-file-compressed!: # is not a file port". io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". ! io.mo:Expected error in mat bytevector-input-port: "incorrect argument count in call (open-bytevector-input-port)". @@ -4134,8 +4182,8 @@ io.mo:Expected error in mat custom-binary-ports: "unget-u8: cannot unget 255 on #". io.mo:Expected error in mat custom-binary-ports: "put-u8: # is not a binary output port". io.mo:Expected error in mat custom-binary-ports: "port-length: # does not support operation". ---- 6728,6743 ---- - io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: 1024.0 is not a positive fixnum". +--- 7006,7021 ---- + io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". io.mo:Expected error in mat compression: "port-file-compressed!: # is not a file port". io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". ! io.mo:Expected error in mat bytevector-input-port: "incorrect number of arguments to #". @@ -4152,7 +4200,7 @@ io.mo:Expected error in mat custom-binary-ports: "put-u8: # is not a binary output port". io.mo:Expected error in mat custom-binary-ports: "port-length: # does not support operation". *************** -*** 6809,6824 **** +*** 7087,7102 **** io.mo:Expected error in mat current-ports: "console-output-port: # is not a textual output port". io.mo:Expected error in mat current-ports: "console-error-port: # is not a textual output port". io.mo:Expected error in mat current-transcoder: "current-transcoder: # is not a transcoder". @@ -4169,7 +4217,7 @@ io.mo:Expected error in mat utf-16-codec: "utf-16-codec: invalid endianness #f". io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 0 of #". io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 15 of #". ---- 6809,6824 ---- +--- 7087,7102 ---- io.mo:Expected error in mat current-ports: "console-output-port: # is not a textual output port". io.mo:Expected error in mat current-ports: "console-error-port: # is not a textual output port". io.mo:Expected error in mat current-transcoder: "current-transcoder: # is not a transcoder". @@ -4187,26 +4235,26 @@ io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 0 of #". io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 15 of #". *************** -*** 6989,6995 **** +*** 7268,7274 **** 7.mo:Expected error in mat eval-when: "invalid syntax visit-x". 7.mo:Expected error in mat eval-when: "invalid syntax revisit-x". 7.mo:Expected error in mat compile-whole-program: "compile-whole-program: failed for nosuchfile.wpo: no such file or directory". ! 7.mo:Expected error in mat compile-whole-program: "incorrect argument count in call (compile-whole-program "testfile-wpo-ab.wpo")". + 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception in environment: attempt to import invisible library (testfile-wpo-lib) 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-a4) not found 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-c4) not found - 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: attempt to invoke library (testfile-wpo-c5) while it is still being loaded ---- 6989,6995 ---- +--- 7268,7274 ---- 7.mo:Expected error in mat eval-when: "invalid syntax visit-x". 7.mo:Expected error in mat eval-when: "invalid syntax revisit-x". 7.mo:Expected error in mat compile-whole-program: "compile-whole-program: failed for nosuchfile.wpo: no such file or directory". ! 7.mo:Expected error in mat compile-whole-program: "incorrect number of arguments to #". + 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception in environment: attempt to import invisible library (testfile-wpo-lib) 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-a4) not found 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-c4) not found - 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: attempt to invoke library (testfile-wpo-c5) while it is still being loaded *************** -*** 7003,7029 **** - 7.mo:Expected error in mat compile-whole-library: "separate-eval: Exception: library (testfile-cwl-c6) not found - 7.mo:Expected error in mat compile-whole-library: "separate-compile: Exception in compile-whole-library: encountered visit-only run-time library (testfile-cwl-a9) while processing file "testfile-cwl-a9.wpo" +*** 7334,7360 **** + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1A) + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1B) 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: "hello" is not a symbol". ! 7.mo:Expected error in mat top-level-value-functions: "incorrect argument count in call (top-level-bound?)". 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: 45 is not a symbol". @@ -4232,9 +4280,9 @@ 7.mo:Expected error in mat top-level-value-functions: "define-top-level-value: hello is not an environment". 7.mo:Expected error in mat top-level-value-functions: "define-top-level-value: # is not a symbol". 7.mo:Expected error in mat top-level-value-functions: "variable i-am-not-bound-i-hope is not bound". ---- 7003,7029 ---- - 7.mo:Expected error in mat compile-whole-library: "separate-eval: Exception: library (testfile-cwl-c6) not found - 7.mo:Expected error in mat compile-whole-library: "separate-compile: Exception in compile-whole-library: encountered visit-only run-time library (testfile-cwl-a9) while processing file "testfile-cwl-a9.wpo" +--- 7334,7360 ---- + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1A) + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1B) 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: "hello" is not a symbol". ! 7.mo:Expected error in mat top-level-value-functions: "incorrect number of arguments to #". 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: 45 is not a symbol". @@ -4261,7 +4309,7 @@ 7.mo:Expected error in mat top-level-value-functions: "define-top-level-value: # is not a symbol". 7.mo:Expected error in mat top-level-value-functions: "variable i-am-not-bound-i-hope is not bound". *************** -*** 7420,7513 **** +*** 7759,7869 **** hash.mo:Expected error in mat old-hash-table: "hash-table-for-each: ((a . b)) is not an eq hashtable". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments to #". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments to #". @@ -4334,14 +4382,31 @@ hash.mo:Expected error in mat hashtable-arguments: "hashtable-clear!: # is not mutable". hash.mo:Expected error in mat hashtable-arguments: "hashtable-clear!: invalid size argument #t". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-keys)". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-keys $ht 72 43)". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: not-an-unsigned-integer is not a valid length". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-keys)". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-keys $ht 72)". hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: (hash . table) is not a hashtable". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-values)". -! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-values $ht 72)". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-values $ht 72 43)". hash.mo:Expected error in mat hashtable-arguments: "hashtable-values: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-values: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-values: not-an-unsigned-integer is not a valid length". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-entries)". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-entries $ht 72 43)". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: not-an-unsigned-integer is not a valid length". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-entries)". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-entries $ht 72)". hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: (hash . table) is not a hashtable". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-cells)". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-cells $ht 72 43)". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-cells: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-cells: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-cells: not-an-unsigned-integer is not a valid length". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-hash-function)". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect argument count in call (hashtable-hash-function $ht $ht)". hash.mo:Expected error in mat hashtable-arguments: "hashtable-hash-function: (hash . table) is not an eq hashtable". @@ -4356,7 +4421,7 @@ hash.mo:Expected error in mat hashtable-arguments: "hashtable-ephemeron?: (hash . table) is not a hashtable". hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value 3.5 for any". ---- 7420,7513 ---- +--- 7759,7869 ---- hash.mo:Expected error in mat old-hash-table: "hash-table-for-each: ((a . b)) is not an eq hashtable". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments to #". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments to #". @@ -4431,12 +4496,29 @@ ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: not-an-unsigned-integer is not a valid length". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-keys: (hash . table) is not a hashtable". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". hash.mo:Expected error in mat hashtable-arguments: "hashtable-values: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-values: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-values: not-an-unsigned-integer is not a valid length". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: not-an-unsigned-integer is not a valid length". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". hash.mo:Expected error in mat hashtable-arguments: "hashtable-entries: (hash . table) is not a hashtable". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". +! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-cells: (hash . table) is not a hashtable". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-cells: -79 is not a valid length". + hash.mo:Expected error in mat hashtable-arguments: "hashtable-cells: not-an-unsigned-integer is not a valid length". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". ! hash.mo:Expected error in mat hashtable-arguments: "incorrect number of arguments to #". hash.mo:Expected error in mat hashtable-arguments: "hashtable-hash-function: (hash . table) is not an eq hashtable". @@ -4452,7 +4534,7 @@ hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value 3.5 for any". *************** -*** 7527,7633 **** +*** 7883,7989 **** hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 3.5 for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 1+2i for any". @@ -4560,7 +4642,7 @@ hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument -1". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #t". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #f". ---- 7527,7633 ---- +--- 7883,7989 ---- hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 3.5 for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 1+2i for any". @@ -4669,7 +4751,7 @@ hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #t". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #f". *************** -*** 7635,7650 **** +*** 7991,8006 **** hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". @@ -4686,7 +4768,7 @@ hash.mo:Expected error in mat hash-functions: "string-ci-hash: hello is not a string". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". ---- 7635,7650 ---- +--- 7991,8006 ---- hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". @@ -4704,7 +4786,7 @@ hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". *************** -*** 7760,7767 **** +*** 8116,8123 **** 8.mo:Expected error in mat with-syntax: "invalid syntax a". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". @@ -4713,7 +4795,7 @@ 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: improper list structure (a b . c)". 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: cyclic list structure (a b c b c b ...)". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #". ---- 7760,7767 ---- +--- 8116,8123 ---- 8.mo:Expected error in mat with-syntax: "invalid syntax a". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". @@ -4723,7 +4805,7 @@ 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: cyclic list structure (a b c b c b ...)". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #". *************** -*** 8349,8364 **** +*** 8734,8749 **** 8.mo:Expected error in mat rnrs-eval: "attempt to assign unbound identifier foo". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #))". 8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". @@ -4740,7 +4822,7 @@ 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: hello is not an environment". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: # is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #". ---- 8349,8364 ---- +--- 8734,8749 ---- 8.mo:Expected error in mat rnrs-eval: "attempt to assign unbound identifier foo". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #))". 8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". @@ -4758,14 +4840,14 @@ 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: # is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #". *************** -*** 8437,8459 **** +*** 8842,8864 **** fx.mo:Expected error in mat fx=?: "fx=?: (a) is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: <-int> is not a fixnum". ! fx.mo:Expected error in mat fx=?: "incorrect argument count in call (fx=? 1)". - fx.mo:Expected error in mat fx is not a fixnum". - fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". ! fx.mo:Expected error in mat fx?: "fx>?: "hi" is not a fixnum". fx.mo:Expected error in mat fx>?: "fx>?: is not a fixnum". @@ -4782,14 +4864,14 @@ fx.mo:Expected error in mat $fxu<: "incorrect number of arguments to #". fx.mo:Expected error in mat $fxu<: "incorrect number of arguments to #". fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". ---- 8437,8459 ---- +--- 8842,8864 ---- fx.mo:Expected error in mat fx=?: "fx=?: (a) is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: <-int> is not a fixnum". ! fx.mo:Expected error in mat fx=?: "incorrect number of arguments to #". - fx.mo:Expected error in mat fx is not a fixnum". - fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". ! fx.mo:Expected error in mat fx". fx.mo:Expected error in mat fx>?: "fx>?: "hi" is not a fixnum". fx.mo:Expected error in mat fx>?: "fx>?: is not a fixnum". @@ -4807,7 +4889,7 @@ fx.mo:Expected error in mat $fxu<: "incorrect number of arguments to #". fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". *************** -*** 8485,8497 **** +*** 8890,8902 **** fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -4821,7 +4903,7 @@ fx.mo:Expected error in mat r6rs:fx*: "fx*: is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". ---- 8485,8497 ---- +--- 8890,8902 ---- fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -4836,7 +4918,7 @@ fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". *************** -*** 8541,8553 **** +*** 8946,8958 **** fx.mo:Expected error in mat fx1+: "fx1+: <-int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: a is not a fixnum". @@ -4850,7 +4932,7 @@ fx.mo:Expected error in mat fxmax: "fxmax: a is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <-int> is not a fixnum". ---- 8541,8553 ---- +--- 8946,8958 ---- fx.mo:Expected error in mat fx1+: "fx1+: <-int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: a is not a fixnum". @@ -4865,7 +4947,7 @@ fx.mo:Expected error in mat fxmax: "fxmax: is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <-int> is not a fixnum". *************** -*** 8645,8654 **** +*** 9050,9059 **** fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and ". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". @@ -4876,7 +4958,7 @@ fx.mo:Expected error in mat fxbit-field: "fxbit-field: 35.0 is not a fixnum". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 5.0 is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 8.0 is not a valid end index". ---- 8645,8654 ---- +--- 9050,9059 ---- fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and ". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". @@ -4888,7 +4970,7 @@ fx.mo:Expected error in mat fxbit-field: "fxbit-field: 5.0 is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 8.0 is not a valid end index". *************** -*** 8662,8695 **** +*** 9067,9100 **** fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". @@ -4923,7 +5005,7 @@ fx.mo:Expected error in mat fxif: "fxif: a is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: 3.4 is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: (a) is not a fixnum". ---- 8662,8695 ---- +--- 9067,9100 ---- fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". @@ -4959,7 +5041,7 @@ fx.mo:Expected error in mat fxif: "fxif: 3.4 is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: (a) is not a fixnum". *************** -*** 8699,8742 **** +*** 9104,9147 **** fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". @@ -5004,7 +5086,7 @@ fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: 3.4 is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: is not a fixnum". ---- 8699,8742 ---- +--- 9104,9147 ---- fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". @@ -5050,7 +5132,7 @@ fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: is not a fixnum". *************** -*** 8745,8755 **** +*** 9150,9160 **** fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index -1". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". @@ -5062,7 +5144,7 @@ fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3.4 is not a valid start index". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end index". ---- 8745,8755 ---- +--- 9150,9160 ---- fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index -1". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". @@ -5075,7 +5157,7 @@ fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3.4 is not a valid start index". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end index". *************** -*** 8809,8818 **** +*** 9214,9223 **** fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: (a) is not a fixnum". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". @@ -5086,7 +5168,7 @@ fx.mo:Expected error in mat fx+/carry: "fx+/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.0 is not a fixnum". ---- 8809,8818 ---- +--- 9214,9223 ---- fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: (a) is not a fixnum". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". @@ -5098,7 +5180,7 @@ fx.mo:Expected error in mat fx+/carry: "fx+/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.0 is not a fixnum". *************** -*** 8828,8837 **** +*** 9233,9242 **** fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". @@ -5109,7 +5191,7 @@ fx.mo:Expected error in mat fx-/carry: "fx-/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.0 is not a fixnum". ---- 8828,8837 ---- +--- 9233,9242 ---- fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". @@ -5121,7 +5203,7 @@ fx.mo:Expected error in mat fx-/carry: "fx-/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.0 is not a fixnum". *************** -*** 8847,8856 **** +*** 9252,9261 **** fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". @@ -5132,7 +5214,7 @@ fx.mo:Expected error in mat fx*/carry: "fx*/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.0 is not a fixnum". ---- 8847,8856 ---- +--- 9252,9261 ---- fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". @@ -5144,7 +5226,7 @@ fx.mo:Expected error in mat fx*/carry: "fx*/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.0 is not a fixnum". *************** -*** 8866,8876 **** +*** 9271,9281 **** fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". @@ -5156,7 +5238,7 @@ fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: a is not a fixnum". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.0". ---- 8866,8876 ---- +--- 9271,9281 ---- fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". @@ -5169,7 +5251,7 @@ fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.0". *************** -*** 8893,8902 **** +*** 9298,9307 **** fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: count 1 is greater than difference between end index 5 and start index 5". @@ -5180,7 +5262,7 @@ fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: a is not a fixnum". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.0". ---- 8893,8902 ---- +--- 9298,9307 ---- fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: count 1 is greater than difference between end index 5 and start index 5". @@ -5192,7 +5274,7 @@ fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.0". *************** -*** 8912,8929 **** +*** 9317,9334 **** fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index ". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index <-int>". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: start index 7 is greater than end index 5". @@ -5211,7 +5293,7 @@ fl.mo:Expected error in mat fl=: "fl=: (a) is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". ---- 8912,8929 ---- +--- 9317,9334 ---- fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index ". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index <-int>". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: start index 7 is greater than end index 5". @@ -5231,7 +5313,7 @@ fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". *************** -*** 8931,8937 **** +*** 9336,9342 **** fl.mo:Expected error in mat fl=: "fl=: 3 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". @@ -5239,7 +5321,7 @@ fl.mo:Expected error in mat fl<: "fl<: (a) is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". ---- 8931,8937 ---- +--- 9336,9342 ---- fl.mo:Expected error in mat fl=: "fl=: 3 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". @@ -5248,7 +5330,7 @@ fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". *************** -*** 8939,8945 **** +*** 9344,9350 **** fl.mo:Expected error in mat fl<: "fl<: 3 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". @@ -5256,7 +5338,7 @@ fl.mo:Expected error in mat fl>: "fl>: (a) is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". ---- 8939,8945 ---- +--- 9344,9350 ---- fl.mo:Expected error in mat fl<: "fl<: 3 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". @@ -5265,7 +5347,7 @@ fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". *************** -*** 8947,8953 **** +*** 9352,9358 **** fl.mo:Expected error in mat fl>: "fl>: 3 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". @@ -5273,7 +5355,7 @@ fl.mo:Expected error in mat fl<=: "fl<=: (a) is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". ---- 8947,8953 ---- +--- 9352,9358 ---- fl.mo:Expected error in mat fl>: "fl>: 3 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". @@ -5282,7 +5364,7 @@ fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". *************** -*** 8955,8961 **** +*** 9360,9366 **** fl.mo:Expected error in mat fl<=: "fl<=: 3 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". @@ -5290,7 +5372,7 @@ fl.mo:Expected error in mat fl>=: "fl>=: (a) is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". ---- 8955,8961 ---- +--- 9360,9366 ---- fl.mo:Expected error in mat fl<=: "fl<=: 3 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". @@ -5299,7 +5381,7 @@ fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". *************** -*** 8963,9002 **** +*** 9368,9407 **** fl.mo:Expected error in mat fl>=: "fl>=: 3 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". @@ -5340,7 +5422,7 @@ fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: 3 is not a flonum". ---- 8963,9002 ---- +--- 9368,9407 ---- fl.mo:Expected error in mat fl>=: "fl>=: 3 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". @@ -5382,7 +5464,7 @@ fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: 3 is not a flonum". *************** -*** 9006,9012 **** +*** 9411,9417 **** fl.mo:Expected error in mat fl+: "fl+: (a . b) is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 1 is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 2/3 is not a flonum". @@ -5390,7 +5472,7 @@ fl.mo:Expected error in mat fl-: "fl-: (a . b) is not a flonum". fl.mo:Expected error in mat fl-: "fl-: 1 is not a flonum". fl.mo:Expected error in mat fl-: "fl-: a is not a flonum". ---- 9006,9012 ---- +--- 9411,9417 ---- fl.mo:Expected error in mat fl+: "fl+: (a . b) is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 1 is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 2/3 is not a flonum". @@ -5399,7 +5481,7 @@ fl.mo:Expected error in mat fl-: "fl-: 1 is not a flonum". fl.mo:Expected error in mat fl-: "fl-: a is not a flonum". *************** -*** 9016,9098 **** +*** 9421,9503 **** fl.mo:Expected error in mat fl*: "fl*: (a . b) is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 1 is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 2/3 is not a flonum". @@ -5483,7 +5565,7 @@ fl.mo:Expected error in mat flround: "flround: a is not a flonum". fl.mo:Expected error in mat flround: "flround: 2.0+1.0i is not a flonum". fl.mo:Expected error in mat flround: "flround: 2+1i is not a flonum". ---- 9016,9098 ---- +--- 9421,9503 ---- fl.mo:Expected error in mat fl*: "fl*: (a . b) is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 1 is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 2/3 is not a flonum". @@ -5568,7 +5650,7 @@ fl.mo:Expected error in mat flround: "flround: 2.0+1.0i is not a flonum". fl.mo:Expected error in mat flround: "flround: 2+1i is not a flonum". *************** -*** 9112,9160 **** +*** 9517,9552 **** fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3/4 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi is not a flonum". @@ -5605,20 +5687,7 @@ fl.mo:Expected error in mat fleven?: "fleven?: a is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3 is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". - fl.mo:Expected error in mat fleven?: "fleven?: 3.0+1.0i is not a flonum". - fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". -! fl.mo:Expected error in mat flodd?: "incorrect argument count in call (flodd?)". -! fl.mo:Expected error in mat flodd?: "incorrect argument count in call (flodd? 0.0 1.0)". - fl.mo:Expected error in mat flodd?: "flodd?: a is not a flonum". - fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". - fl.mo:Expected error in mat flodd?: "odd?: 3.2 is not an integer". - fl.mo:Expected error in mat flodd?: "flodd?: 3.0+1.0i is not a flonum". - fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". -! fl.mo:Expected error in mat flmin: "incorrect argument count in call (flmin)". - fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". - fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". - fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". ---- 9112,9160 ---- +--- 9517,9552 ---- fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3/4 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi is not a flonum". @@ -5655,21 +5724,44 @@ fl.mo:Expected error in mat fleven?: "fleven?: a is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3 is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". - fl.mo:Expected error in mat fleven?: "fleven?: 3.0+1.0i is not a flonum". +*************** +*** 9554,9561 **** fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". + fl.mo:Expected error in mat fleven?: "fleven?: +inf.0 is not an integer". + fl.mo:Expected error in mat fleven?: "fleven?: +nan.0 is not an integer". +! fl.mo:Expected error in mat flodd?: "incorrect argument count in call (flodd?)". +! fl.mo:Expected error in mat flodd?: "incorrect argument count in call (flodd? 0.0 1.0)". + fl.mo:Expected error in mat flodd?: "flodd?: a is not a flonum". + fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". + fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". +--- 9554,9561 ---- + fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". + fl.mo:Expected error in mat fleven?: "fleven?: +inf.0 is not an integer". + fl.mo:Expected error in mat fleven?: "fleven?: +nan.0 is not an integer". ! fl.mo:Expected error in mat flodd?: "incorrect number of arguments to #". ! fl.mo:Expected error in mat flodd?: "incorrect number of arguments to #". fl.mo:Expected error in mat flodd?: "flodd?: a is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". - fl.mo:Expected error in mat flodd?: "odd?: 3.2 is not an integer". - fl.mo:Expected error in mat flodd?: "flodd?: 3.0+1.0i is not a flonum". + fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". +*************** +*** 9563,9569 **** + fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". + fl.mo:Expected error in mat flodd?: "flodd?: +inf.0 is not an integer". + fl.mo:Expected error in mat flodd?: "flodd?: +nan.0 is not an integer". +! fl.mo:Expected error in mat flmin: "incorrect argument count in call (flmin)". + fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". + fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". + fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". +--- 9563,9569 ---- fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". + fl.mo:Expected error in mat flodd?: "flodd?: +inf.0 is not an integer". + fl.mo:Expected error in mat flodd?: "flodd?: +nan.0 is not an integer". ! fl.mo:Expected error in mat flmin: "incorrect number of arguments to #". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". *************** -*** 9162,9168 **** +*** 9571,9577 **** fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0+1i is not a flonum". @@ -5677,7 +5769,7 @@ fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 3 is not a flonum". ---- 9162,9168 ---- +--- 9571,9577 ---- fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0+1i is not a flonum". @@ -5686,7 +5778,7 @@ fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 3 is not a flonum". *************** -*** 9170,9183 **** +*** 9579,9592 **** fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0+1i is not a flonum". @@ -5701,7 +5793,7 @@ fl.mo:Expected error in mat fldenominator: "fldenominator: a is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 3 is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i is not a flonum". ---- 9170,9183 ---- +--- 9579,9592 ---- fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0+1i is not a flonum". @@ -5717,7 +5809,7 @@ fl.mo:Expected error in mat fldenominator: "fldenominator: 3 is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i is not a flonum". *************** -*** 9223,9229 **** +*** 9632,9638 **** cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". @@ -5725,7 +5817,7 @@ cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". ---- 9223,9229 ---- +--- 9632,9638 ---- cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". @@ -5734,7 +5826,7 @@ cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". *************** -*** 9233,9246 **** +*** 9642,9655 **** cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". @@ -5749,7 +5841,7 @@ foreign.mo:Expected error in mat load-shared-object: "load-shared-object: invalid path 3". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". ---- 9233,9246 ---- +--- 9642,9655 ---- cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". @@ -5765,7 +5857,7 @@ foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". *************** -*** 9275,9282 **** +*** 9684,9691 **** foreign.mo:Expected error in mat foreign-procedure: "id: invalid foreign-procedure argument foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle abcde". foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". @@ -5774,7 +5866,7 @@ foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier i-am-not-a-type". foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier 1". foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". ---- 9275,9282 ---- +--- 9684,9691 ---- foreign.mo:Expected error in mat foreign-procedure: "id: invalid foreign-procedure argument foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle abcde". foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". @@ -5784,7 +5876,7 @@ foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier 1". foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". *************** -*** 9760,9772 **** +*** 10183,10195 **** unix.mo:Expected error in mat file-operations: "file-access-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-change-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-modification-time: failed for "testlink": no such file or directory". @@ -5798,7 +5890,7 @@ windows.mo:Expected error in mat registry: "get-registry: pooh is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". ---- 9760,9772 ---- +--- 10183,10195 ---- unix.mo:Expected error in mat file-operations: "file-access-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-change-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-modification-time: failed for "testlink": no such file or directory". @@ -5813,7 +5905,7 @@ windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". *************** -*** 9794,9865 **** +*** 10217,10288 **** ieee.mo:Expected error in mat flonum->fixnum: "flonum->fixnum: result for -inf.0 would be outside of fixnum range". ieee.mo:Expected error in mat flonum->fixnum: "flonum->fixnum: result for +nan.0 would be outside of fixnum range". ieee.mo:Expected error in mat fllp: "fllp: 3 is not a flonum". @@ -5886,7 +5978,7 @@ date.mo:Expected error in mat time: "time>=?: 3 is not a time record". date.mo:Expected error in mat time: "time>=?: # is not a time record". date.mo:Expected error in mat time: "time>=?: types of

Chez Scheme Version $(version)

' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '

Copyright © 2020 Cisco Systems, Inc.

' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '

Chez Scheme is a programming language and an implementation of that language, with supporting tools and documentation.

' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + chmod 644 $(BUILDROOT)/Resources/en.lproj/Welcome.html + +$(BUILDROOT)/Resources/en.lproj/License.txt: $(BUILDROOT)/Resources/en.lproj + cat ../../NOTICE ../../LICENSE > $(BUILDROOT)/Resources/en.lproj/License.txt + chmod 644 $(BUILDROOT)/Resources/en.lproj/License.txt + +$(BUILDROOT)/Resources/en.lproj: $(BUILDROOT)/Resources + install -d $(BUILDROOT)/Resources/en.lproj + +$(BUILDROOT)/Resources: $(BUILDROOT) + install -d $(BUILDROOT)/Resources + +$(BUIDROOT)/Root/bin $(BUILDROOT)/Root/lib $(BUILDROOT)/Root/man: $(BUILDROOT)/Root $(RELEASE) + ( cd $(RELEASE); sudo make install InstallGroup=wheel TempRoot=../$(BUILDROOT)/Root ) + +$(BUILDROOT)/Root: $(BUILDROOT) + install -d $(BUILDROOT)/Root + +$(RELEASE): $(BUILDROOT) ../bintar/$(TARBALL) + tar -xzf ../bintar/$(TARBALL) + +$(BUILDROOT): + install -d $(BUILDROOT) + +clean: + rm -rf $(PKG) $(BUILDROOT) $(RELEASE) diff -Nru chezscheme-9.5+dfsg/pkg/rmpkg chezscheme-9.5.4+dfsg/pkg/rmpkg --- chezscheme-9.5+dfsg/pkg/rmpkg 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/pkg/rmpkg 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,37 @@ +#! /bin/csh -f + +# rmpkg +# Copyright 1984-2017 Cisco Systems, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if ( $#argv != 1) then + echo "Usage: sudo $0 release" + echo " e.g.,: sudo $0 8.4" + exit 1 +endif + +if ( `id -u` != 0 ) then + echo "$0 must be run as root (e.g., via sudo)" + exit 1 +endif + +set R = $1 + +if (!(-e /usr/local/lib/csv$R)) then + echo "(Petite) Chez Scheme Version $R doesn't appear to be installed" + exit +endif + +/bin/rm -rf /usr/local/bin/petite /usr/local/bin/scheme /usr/local/bin/scheme-script /usr/local/lib/csv$R /usr/local/share/man/man1/petite.1.gz /usr/local/share/man/man1/scheme.1.gz +pkgutil --forget chezscheme diff -Nru chezscheme-9.5+dfsg/README.md chezscheme-9.5.4+dfsg/README.md --- chezscheme-9.5+dfsg/README.md 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/README.md 2020-08-31 02:35:12.000000000 +0000 @@ -1,3 +1,5 @@ +[![Build Status](https://travis-ci.org/cisco/ChezScheme.svg?branch=master)](https://travis-ci.org/cisco/ChezScheme) + Chez Scheme is both a programming language and an implementation of that language, with supporting tools and documentation. @@ -48,7 +50,7 @@ which also includes an introduction to Scheme and a set of example programs. Chez Scheme's additional language, run-time system, and programming environment features are described in the -[Chez Scheme User's Guide](http://cisco.github.io/ChezScheme/csug9.4/csug.html). +[Chez Scheme User's Guide](http://cisco.github.io/ChezScheme/csug9.5/csug.html). The latter includes a shared index and a shared summary of forms, with links where appropriate to the former, so it is often the best starting point. diff -Nru chezscheme-9.5+dfsg/release_notes/Makefile chezscheme-9.5.4+dfsg/release_notes/Makefile --- chezscheme-9.5+dfsg/release_notes/Makefile 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/release_notes/Makefile 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -m = a6le -Scheme=../$m/bin/$m/scheme -b ../$m/boot/$m/petite.boot -b ../$m/boot/$m/scheme.boot -STEXLIB=../stex -installdir=/tmp/csv9 -INSTALL=../$m/installsh - -# define default document pathname here -# override on command line with 'make x=newdoc' -x = release_notes - -# define latex processor: latex or pdflatex -latex = pdflatex - -# define stex macro files here -stexmacrofiles = - -# list bibliography files here -bib = - -# define index if an index is to be generated -# index=yes - -include $(STEXLIB)/Mf-stex - -# define or override suffixes here - -# define any additional targets here - -install: $x.pdf $x.html - $(INSTALL) -m 2755 -d $(installdir) - $(INSTALL) -m 0644 --ifdiff $x.html $x.pdf $(installdir) - $(INSTALL) -m 0644 --ifdiff releasenotes.css $(installdir) - (X=`echo canned/*` ;\ - if [ "$$X" != "canned/*" ] ; then\ - $(INSTALL) -m 2755 -d $(installdir)/canned ;\ - $(INSTALL) -m 0644 --ifdiff canned/* $(installdir)/canned ;\ - fi) - $(INSTALL) -m 2755 -d $(installdir)/gifs - $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs - $(INSTALL) -m 2755 -d $(installdir)/math - -/bin/rm -rf $(installdir)/$(mathdir) - $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) - if [ -e $(mathdir)/0.gif ] ; then $(INSTALL) -m 0644 $(mathdir)/*.gif $(installdir)/$(mathdir) ; fi - -# define any dependencies here - -$(x).firstrun: macros.tex - -# define cleanup targets here: - -$(x).clean: - -$(x).reallyclean: - -$(x).reallyreallyclean: diff -Nru chezscheme-9.5+dfsg/release_notes/release_notes.stex chezscheme-9.5.4+dfsg/release_notes/release_notes.stex --- chezscheme-9.5+dfsg/release_notes/release_notes.stex 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/release_notes/release_notes.stex 2020-08-31 02:35:12.000000000 +0000 @@ -1,9 +1,9 @@ \documentclass{releasenotes} -\thisversion{Version 9.5} +\thisversion{Version 9.5.4} \thatversion{Version 8.4} -\pubmonth{October} -\pubyear{2017} +\pubmonth{June} +\pubyear{2020} \begin{document} @@ -58,15 +58,386 @@ %----------------------------------------------------------------------------- \section{Functionality Changes}\label{section:functionality} -\subsection{Record equality and hashing (9.5)} +\subsection{Incremental promotion of collected objects (9.5.3)} -The new procedures \scheme{record-type-equal-procedure} and +In previous versions of {\ChezScheme}, the collector always promoted +surviving objects from every collected generation into a single +target generation. +For example, when the target generation was 3, it promoted not only +surviving objects from generation 2 to generation 3 but also surviving +objects from generations 0 and 1 directly to generation 3. +This caused some prematurely promoted objects to be subjected to +collection less frequently than their ages justified, potentially +resulting in substantial inappropriate storage retention. +This is particularly problematic when side effects result in pointers +from the inappropriately retained objects to younger objects, as +can happen with nonfunctional queues and lazy streams. + +Unless directed to do otherwise, the collector now promotes objects +up only one generation at a time. +That is, generation 0 objects that survive collection are promoted +to generation 1, generation 1 objects are promoted to generation +2, and so on. +(Objects that survive a maximum nonstatic collection are promoted +back into the maximum nonstatic collection.) +Most applications should exhibit lower peak memory usage and possibly +lower run times with this change. +Applications that are adversely affected, if any, might benefit +from a custom collect-request handler or custom values for the +collection parameters that affect the behavior of the default +handler. + +\subsection{Unicode Basic Multilingual Plane console I/O in Windows (9.5.3)} + +Console I/O now supports characters from the Unicode Basic +Multilingual Plane in Windows. Windows consoles do not yet support the +supplementary planes. + +\subsection{Incompatible fasl-format and compiled-file compression changes (9.5.3)} + +The fasl (fast-load) format now supports per-object compression. +Whether the fasl writer actually performs compression is determined +by the new \scheme{fasl-compressed} parameter, whose value defaults +to \scheme{#t}. +The compression format and level are determined by the +\scheme{compress-format} and \scheme{compress-level} +parameters. + +The \scheme{compile-compressed} parameter has been eliminated. +Since compiled files are written in fasl format, the +\scheme{fasl-compressed} parameter also now controls whether compiled +files are compressed. + +Because individual portions of a fasl file are already compressed +by default, attempting to compress a fasl file as a whole is often +ineffective as well as inefficient both when writing and reading +fasl objects. +Thus, in particular, the \var{output-port} and \scheme{wpo-port} +supplied to \scheme{compile-port} and \scheme{compile-to-port} +should not be opened for compression. +Similarly, external tools should not expect compiled files to be +compressed as a whole, nor should they compress compiled files. + +Because compression of fasl files was previously encouraged and is +now discouraged, the first attempt to write fasl data to or read +fasl data from a compressed port will cause a warning to be issued, +i.e., an exception with condition type \scheme{&warning} to be +raised. + +The rationale for this change is to allow the fasl reader to seek +past, without reading, portions of an object file that contain +compile-time code at run time and run-time code at compile time. + +\subsection{Bytevector compression and compression level (9.5.3)} + +The procedure \scheme{bytevector-compress} now selects the level of +compression based on the \scheme{compress-level} parameter. +Prior to this it always used a default setting for compression. + +The \scheme{compress-level} parameter can now take on the new value +\scheme{minimum} in addition to \scheme{low}, \scheme{medium}, +\scheme{high}, and \scheme{maximum}. + +\subsection{Combining object files (9.5.3)} + +In previous versions of Chez Scheme, multiple object files could +be combined by concatinating them into a single file. To support faster +object file loading and loadability verification (described later in this +document), recompile information and information about libraries and +top-level programs within an object file is now placed at the top of the +file. The new \scheme{concatenate-object-files} procedure can be used to +combine multiple object files while moving this information to the +top of the combined file. + +\subsection{Explicitly invoking libraries (9.5.3)} + +The new procedure \scheme{invoke-library} can be used to force +the evaluation of a library's body expressions (variable definition +right-hand sides and initialization expresisons) before they might +otherwise be needed. +It is generally useful only for libraries whose body expressions +have side effects. + +\subsection{Verifying loadability of libraries and programs (9.5.3)} + +The new procedure \scheme{verify-loadability} can be used to +determine, without actually loading any object code or defining any +libraries, whether a set of object files and the object files +satisfying their library dependencies, direct or indirect, are +present, readable, and mutually compatible. + +To support loadability verification, information about libraries +and top-level programs within an object file is now placed at the +top of the file, just after recompile information. This change can +be detected by unusual setups, e.g., a source file that interleaves +library definitions and top-level forms that call library-list, but +is backward compatible for standard use cases in which each file +contains one or more libraries possibly followed by a top-level +program. + +\subsection{Unregistering objects from guardians (9.5.3)} + +The set of as-yet unresurrected objects registered with a guardian +can be unregistered and retrieved by means of the new primitive +\scheme{unregister-guardian}. +Consult the user's guide for usage and caveats. +Guardians can now be distinguished from other procedures (and other +objects) via the new primitive \scheme{guardian?}. + +\subsection{Coverage support and source tables (9.5.3)} + +When the new parameter \scheme{generate-covin-files} is set to \scheme{#t} +rather than the default \scheme{#f}, file compilation routines such as +\scheme{compile-file} and \scheme{compile-library} produce coverage +information (\scheme{.covin}) files that can be used in conjunction with +profile information to measure coverage of a source-code base. +Coverage information is also written out when the optional \var{covop} +argument is supplied to \scheme{compile-port} and \scheme{compile-to-port}. + +A covin file contains a printed representation of a \emph{source +table} mapping each profiled source object in the code base to a +count of zero. +Source tables generally associate source objects with arbitrary values +and are allocated and manipulated with hashtable-like operations specific +to source tables. + +Profile information can be tracked even through releasing and clearing +of profile counters via the new procedure \scheme{with-profile-tracker}, +which produces a source table. + +Coverage of a source-code base can thus be achieved by comparing +the set of source objects in the covin-file source tables for one +or more source files with the set of source objects in the source +tables produced by one or more runs of tests run with profile +information tracked by \scheme{with-profile-tracker}. + +\subsection{Importing a library from an object file now visits the file (9.5.3)} + +As described in Section~\ref{sec:faster-object-file-loading}, +importing a library from an object file now causes the object file +to be visited rather than fully loaded. +If the run-time information is needed, i.e., if the library is +invoked, the file will be revisited. +This is typically transparent to the program, but problems can arise +if the program changes its current directory (via +\scheme{current-directory}) prior to invoking a library, and the +object file cannot be found. + +\subsection{Recompile information (9.5.3)} + +As described in Section~\ref{sec:faster-object-file-loading}, all +recompile information is now placed at the front of each object +file where it can be read without the need to scan through the +remainder of the file. +Because the library manager expects to find recompile information +at the front of an object file, it will not find all recompile +information if object files are concatenated together via some +mechanism other than then new \scheme{concatenate-object-files} +procedure. + +Also, the compiler has to hold in memory the object code for all +expressions in a file so that it can emit the unified recompile +information, rather than writing to the object file incrementally, +which can significantly increase the memory required to compile a +large file full of individual top-level forms. +This does not affect top-level programs, which were already handled +as a whole, or a typical library file that contains just a single +library form. + +\subsection{Optional new \protect\scheme{fasl-read} situation argument (9.5.3)} + +It is now possible to direct \scheme{fasl-read} to read only visit +(compile-time) or revisit (run-time) objects via the optional new +situation argument. +Situation \scheme{visit} causes the fasl reader to skip over +revisit (run-time-only) objects, while +\scheme{revisit} causes the fasl reader to skip over +visit (compile-time-only) objects. +Situation \scheme{load} doesn't skip over any objects. + +\subsection{Optional \protect\scheme{read-token} \protect\var{sfd} and \protect\var{bfp} arguments (9.5.3)} + +In addition to the optional input-port argument, \scheme{read-token} now takes +optional \var{sfd} (source-file-descriptor) and \var{bfp} (beginning-file-position) +arguments. +If either is provided, both must be provided. +Specifying \var{sfd} and \var{bfp} improves the quality of error messages, +guarantees the \scheme{read-token} \var{start} and \var{end} return values can be determined, +and eliminates the overhead of asking for a file position on each call +to \scheme{read-token}. +\var{bfp} is normally 0 for the first call +to \scheme{read-token} at the start of a file, +and the \var{end} return value of the preceding +call for each subsequent call. + +\subsection{Compression format and level (9.5.3)} + +Support for LZ4 compression has been added. +LZ4 is now the default format when compressing files (including +object files produced by the compiler) and bytevectors, while {\tt +gzip} is still supported and can be enabled by setting +the new \scheme{compress-format} parameter to the symbol \scheme{gzip} instead of the +default \scheme{lz4}. Reading in compressed mode +infers the format, so reading {\tt gzip}-compressed files will still +work without changing \scheme{compress-format}. Reading LZ4-format +files tends to be much faster than reading {\tt gzip}-format files, +while {\tt gzip}-compressed files tend to be smaller. +In particular, object files created by the compiler now tend to be +larger but load more quickly. + +The new \scheme{compress-level} parameter can be used to control +the amount of time spent on file and bytevector compression. +It can be set to one of the symbols \scheme{minimum}, \scheme{low}, +\scheme{medium}, \scheme{high}, and \scheme{maximum}, which are +listed in order from shortest to longest compression time and least +to greatest effectiveness. +The default value is \scheme{medium}. + +\subsection{Mutexes and condition variables can have names (9.5.3)} + +The procedures \scheme{make-mutex} and \scheme{make-condition} now +accept an optional argument \scheme{name}, which must be a symbol +that identifies the object or \scheme{f} for no name. The name is +printed every time the mutex or condition object is printed, which +is useful for debugging. + +\subsection{Improved packaging support (9.5.1)} + +The Chez Scheme \scheme{Makefile} has been enhanced with new targets for +creating binary packages for Unix-like operating systems. +The \scheme{create-tarball} target generates a binary tarball package for +distribution, the \scheme{create-rpm} target generates a Linux RPM package, and +the \scheme{create-pkg} target generates a macOS package file. + +\subsection{Library search handler (9.5.1)} + +The new \scheme{library-search-handler} parameter controls how library source +or object code is located when \scheme{import}, \scheme{compile-whole-program}, +or \scheme{compile-whole-library} are used to load a library. +The value of the \scheme{library-search-handler} parameter must be a procedure +expecting four arguments: the \var{who} argument is a symbol that provides +context in \scheme{import-notify} messages, the \var{library} argument is the +name of the desired library, the \var{directories} is a list of source and +object directory pairs in the form returned by \scheme{library-directories}, +and the \var{extensions} parameter is a list of source and object extension +pairs in the form returned by \scheme{library-extensions}. +The default vaue of the \scheme{library-search-handler} is the newly exposed +\scheme{default-library-search-handler} procedure. + +\subsection{Ftype guardians (9.5.1)} + +Applications that manage memory outside the Scheme heap can leverage +new support for ftype guardians to help perform reference counting. +An ftype guardian is like an ordinary guardian except that it does +not necessarily save from collection each ftype pointer registered +with it but instead decrements (atomically) a reference count at +the head of the object to which the ftype pointer points. +If the reference count becomes zero as a result of the decrement, +it preserves the object so that it can be retrieved from the guardian +and freed; otherwise it allows it to be collected. + +\subsection{Recompile information and whole-program optimization (9.5.1)} + +\scheme{compile-whole-program} and \scheme{compile-whole-library} +now propagate recompile information from the named \scheme{wpo} +file to the object file to support \scheme{maybe-compile-program} +and \scheme{maybe-compile-library} in the case where the new object +file overwrites the original object file. + +\subsection{Directly accessing the value of compile-time values (9.5.1)} + +The value of a compile-time value created by \scheme{make-compile-time-value} +can be retrieved via the new procedure \scheme{compile-time-value-value}. +The new predicate \scheme{compile-time-value?} can be used to determine if +an object is a compile-time value. + +\subsection{Extracting a subset of hashtable entries (9.5.1)} + +The new \scheme{hashtable-cells} function is similar to +\scheme{hashtable-entries}, but it returns a vector of cells instead +of two vectors. An optional argument to \scheme{hashtable-keys}, +\scheme{hashtable-values}, \scheme{hashtable-entries}, or \scheme{hashtable-cells} +limits the size of the result vector. + +\subsection{Profile data retained for reclaimed code (9.5.1)} + +Profile data is now retained indefinitely even for code objects +that have been reclaimed by the garbage collector. +Previously, the counters holding the data were reclaimed by the +collector along with the code objects. +This makes profile output more complete and accurate, but it does +represent a potential space leak in programs that create or load +and release code dynamically. +Such programs can avoid the potential space leak by releasing the +counters explicitly via the new procedure +\scheme{profile-release-counters}. + +\subsection{Procedure source location without inspector information (9.5.1)} + +When \scheme{generate-inspector-information} is set to \scheme{#f} and +\scheme{generate-procedure-source-information} is set to \scheme{#t}, +source location information is preserved for a procedure, even though +other inspector information is not preserved. + +\subsection{Atomic compare-and-set (9.5.1)} + +The new procedures \scheme{box-cas!} and \scheme{vector-cas!} +atomically update a box or vector with a given new value when the +current content is \scheme{eq?} to a given old value. Atomicity is +guaranteed even if multiple threads attempt to update the same box or +vector. + +\subsection{Foreign-procedure thread activation (9.5.1)} + +A new \scheme{__collect_safe} foreign-procedure convention, which can +be combined with other conventions, causes a foreign-procedure call to +deactive the current thread during the call so that other threads can +perform a garbage collection. Similarly, the \scheme{__collect_safe} +convention modifier for callables causes the current thread to be +activated on entry to the callable, and the activation state is +reverted on exit from the callable; this activation makes callables +work from threads that are otherwise unknown to the Scheme system. + +\subsection{Garbage collection and threads (9.5.1)} + +A new \scheme{collect-rendezvous} function performs a garbage +collection in the same way as when the system determines that a +collection should occur. For many purposes, +\scheme{collect-rendezvous} is a variant of \scheme{collect} that +works when multiple threads are active. More precisely, the +\scheme{collect-rendezvous} function invokes the collect-request +handler (in an unspecified thread) after synchronizing all active +threads and temporarily deactivating all but the one used to call the +collect-request handler. + +\subsection{Foreign-procedure struct arguments and results (9.5.1)} + +A new \scheme{(& \var{ftype})} form allows a struct or union to be +passed between Scheme and a foreign procedure. The Scheme-side +representation of a \scheme{(& \var{ftype})} argument is the +same as a \scheme{(* \var{ftype})} argument, but where +\scheme{(& \var{ftype})} passes an address between the Scheme and C +worlds, \scheme{(& \var{ftype})} passes a copy of the data at the +address. When \scheme{(& \var{ftype})} is used as a result type, +an extra \scheme{(* \var{ftype})} argument must be provided to receive +the copied result, and the directly returned result is unspecified. + +\subsection{Record equality and hashing (9.5, 9.5.1)} + +Several new procedures and parameters allow a program to control what +\scheme{equal?} and \scheme{equal-hash} do when applied +to structures containing record instances. +The procedures \scheme{record-type-equal-procedure} and \scheme{record-type-hash-procedure} can be used to customize the -handling of records by \scheme{equal?} and \scheme{hash}, and -the new procedures \scheme{record-equal-procedure} and +handling of records of specific types by \scheme{equal?} and \scheme{hash}, and +the procedures \scheme{record-equal-procedure} and \scheme{record-hash-procedure} can be used to look up the applicable (possibly inherited) equality and hashing procedures for specific record instances. +The parameters \scheme{default-record-equal-procedure} and +\scheme{default-record-hash-procedure} can be used to control +the default behavior when comparing or hashing records without +type-specific equality and hashing procedures. \subsection{Immutable vectors, fxvectors, bytevectors, strings, and boxes (9.5)} @@ -1535,6 +1906,214 @@ %----------------------------------------------------------------------------- \section{Bug Fixes}\label{section:bugfixes} +\subsection{Buffering signals (9.5.3)} + +Prior to this release, only one unhandled signal was buffered for +any signal for which a handler has been registered via +\scheme{register-signal-handler}, so two signals delivered in +quick succession could be seen as only one. +The system now buffers a much larger number (63 in this release) of +signals, and the fact that signals can be dropped has now been +documented. + +\subsection{Clear-output bug (9.5.3)} + +A bug has been fixed in which a call to \scheme{clear-output-port} +on a port could lead to unexpected behavior involving the port, +including loss of buffering or suppression of future output to the +port. + +\subsection{Various argument type-error issues (9.5.3)} + +A variety of primitive argument type-checking issues have been +fixed, including missing checks, misleading error messages, +and checks made later than appropriate, i.e., after the primitive +has already had side effects. + +\subsection{\protect\scheme{__collect_safe}, x86\_64, and floating-point arguments or results (9.5.3)} + +The \scheme{__collect_safe} mode for a foreign call or callable now +correctly preserves floating-point registers used for arguments or +results while activating or deactivating a thread on x86\_64. + +\subsection{\protect\scheme{putenv} memory leak (9.5.3)} + +\scheme{putenv} now calls the host system's \scheme{setenv} instead of +\scheme{putenv} on non-Windows hosts and avoids allocating memory that +is never freed, although \scheme{setenv} might do so. + +\subsection{String ports from immutable strings (9.5.4)} + +A bug that miscalculated the buffer size for +\scheme{open-string-input-port} given an immutable string has been +fixed. + +\subsection{Multiplying $-2^{30}$ with itself on 64-bit platforms (9.5.3)} + +A bug that produced the wrong sign when multiplying $-2^{30}$ with +itself on 64-bit platforms has been fixed. + +\subsection{Compiler dropping affects from record-accessor calls (9.5.3)} + +A bug that could cause the source optimizer to drop effects within +the argument of a record-accessor call has been fixed. + +\subsection{Welcome text in macOS package file (9.5.2)} + +The welcome text and copyright year in the macOS package file was +corrected. + +\subsection{Fasl representation change for recursive ftypes (9.5.2)} + +A bug in the reading of mutually recursive ftype definitions from +compiled files has been fixed. +The bug was triggered by recursive ftype definitions in which one +of the mutually recursive ftypes is a subtype of another, as in: + +\schemedisplay +(define-ftype + [A (* B)] + [B (struct [h A])])) +\endschemedisplay + +It manifested in the fasl reader raising bogus "incompatible record +type" exceptions when two or more references to one of the ftypes +occur in in separate compiled files or in separate top-level forms +of a file compiled via \scheme{compile-file}. +The bug could also have affected other record-type descriptors with +cycles involving parent rtds and ``extra'' fields as well as fasl +output created via \scheme{fasl-write}. + +\subsection{Unbound object resulting from libraries combined with \protect\scheme{compile-whole-library} (9.5.1)} + +A bug in \scheme{compile-whole-library} that allowed the invoke code for a +library included in the combined library body to be executed without first +invoking its binary library dependencies has been fixed. +This bug could arise when a member of a combined library was invoked without +invoking the requirements of the other libraries it was combined with. For +instance, consider the case where libraries \scheme{(A)} and \scheme{(B)} are +combined and \scheme{(B)} has dependencies on library \scheme{(A)} and binary +library \scheme{(C)}. +One possible sort order of this graph is \scheme{(C)}, \scheme{(A)}, +\scheme{(B)}, where the invoke code for \scheme{(A)} and \scheme{(B)} are +combined into a single block of invoke code. If library \scheme{(A)} is +invoked first, it will implicitly cause the invoke code for \scheme{(B)} to be +invoked without invoking the code for \scheme{(C)}. +We address this by adding explicit dependencies between \scheme{(A)} and all +the binary libraries that precede it and all of the other libraries clustered +with \scheme{(A)} and \scheme{(A)}, such that no matter which library clustered +with \scheme{(A)} is invoked firts, \scheme{(A)} will be invoked, causing all +binary libraries that precede \scheme{(A)} to be invoked. +It is also possible for a similar problem to exist between clusters, where +invoking a later cluster may invoke an earlier cluster without invoking the +binary dependencies for the earlier cluster. +We address this issue by adding an invoke requirement between each cluster and +the first library in the cluster that precedes it. +These extended invoke requirements are also added to the import requirements +for each library, and the dependency graph is enhanced with import requirement +links to ensure these are taken into account during the topological sort. + + +\subsection{Automatic recompilation and missing include files (9.5.1)} + +A bug in automatic recompilation involving missing include files +has been fixed. +The bug caused automatic recompilation to fail, often with an +exception in \scheme{file-modification-time}, when a file specified +by an absolute pathname or pathname starting with "./" or "../" was +included via \scheme{include} during a previous compilation run and +is no longer present. + +\subsection{Invalid memory reference instantiating \protect\scheme{foreign-callable} code object (9.5.1)} + +A bug that caused evaluation of a \scheme{foreign-callable} expression in +code that has been collected into the static generation (e.g., when the +\scheme{foreign-callable} form appears in code compiled to a boot file) +to result in an invalid memory reference has been fixed. + +\subsection{Invalid constant-folding of some calls to \protect\scheme{apply} (9.5.1)} + +A bug in the source optimizer (cp0) allowed constant-folding of some calls to +\scheme{apply} where the last argument is not known to be a list. For example, +cp0 incorrectly reduced +\scheme{(apply zero? 0)} to \scheme{#t} +and reduced +\scheme{(lambda (x) (apply box? x) x)} to \scheme{(lambda (x) x)}, +but now preserves these calls to \scheme{apply} so that they may raise an +exception. + +\subsection{Disk-relative filenames in Windows (9.5.1)} + +In Windows, filenames that start with a disk designator but no +directory separator are now treated as relative paths. For example, +\scheme{(path-absolute? "C:")} now returns \scheme{#f}, and +\scheme{(directory-list "C:")} now lists the files in the current +directory on disk C instead of the files in the root directory of disk +C. + +In addition, \scheme{file-access-time}, \scheme{file-change-time}, +\scheme{file-directory?}, \scheme{file-exists?}, +\scheme{file-modification-time}, and \scheme{get-mode} no longer +remove trailing directory separators on Windows. + +\subsection{Globally unique names on non-Windows systems no longer contain the IP address (9.5.1)} + +The globally unique names of gensyms no longer contain the IP address +on non-Windows systems. Windows systems already used a universally +unique identifier. + +\subsection{Invalid memory reference from \protect\scheme{fxvector} calls (9.5)} + +A compiler bug that could result in an invalid memory reference or +some other unpleasant behavior for calls to \scheme{fxvector} in +which the nested subexpression to compute the new value to be stored +is nontrivial has been fixed. +This bug could also affect calls to \scheme{vector-set-fixnum!} and possibly +other primitive operations. + +\subsection{Incorrect return code when \protect\scheme{exit} is called with multiple arguments (9.5)} + +A bug in the implementation of the default exit handler with multiple +values has been fixed. + +\subsection{Boot files containing compiled library code fail to load (9.5)} + +Compiled library code may now appear within fasl objects loaded during +the boot process, provided that they are appended to the end of the base boot +file or appear within a later boot file. + +\subsection{Misleading cyclic dependency error (9.5)} + +The library system no longer reports a cyclic dependency error +during the second and subsequent attempts to visit or invoke a +library after the first attempt fails for some reason other than +an actual cyclic dependency. +The fix also allows a library to be visited or invoked successfully +on the second or subsequent attempt if the visit or invoke failed +for a transient reason, such as a missing or incorrect version in +an imported library. + +\subsection{Incomplete handling of import specs within standalone export forms (9.5)} + +A bug that limited the \scheme{(import \var{import-spec} \dots)} form within a +standalone \scheme{export} form to \scheme{(import \var{import-spec})} has been +fixed. + +\subsection{Permission denied after deleting files or directories in Windows (9.5)} + +In Windows, deleting a file or directory briefly leaves the file or +directory in a state where a subsequent create operation fails with +permission denied. This race condition is now mitigated. +[This bug applies to all versions up to 9.5 on Windows 7 and later.] + +\subsection{Incorrect handling of offset in +\protect\scheme{date->time-utc} on Windows (9.5)} + +A bug when \scheme{date->time-utc} is called on Windows with a +date-zone-offset smaller than the system's time-zone offset has been +fixed. +[This bug dated back to Version 9.5.] + \subsection{Compiler mishandling of fx /carry operations (9.5)} A bug in the source optimizer that caused an internal compiler error when @@ -1760,6 +2339,99 @@ %----------------------------------------------------------------------------- \section{Performance Enhancements}\label{section:performance} +\subsection{Special-cased basic arithmetic operations (9.5.3)} + +The basic arithmetic operations (addition, subtraction, multiplication, +division) are now much faster when presented with certain special +cases, e.g., multiplication of a large integer by 1 or -1 or addition +of large integer and 0. + +\subsection{Faster right-shift of large integers (9.5.3)} + +Right shifting a large integer is now much faster in most cases +where the shift count is a significant fraction of the number of +bits in the large integer. + +\subsection{Faster object-file loading (9.5.3)}\label{sec:faster-object-file-loading} + +Visiting an object file (to obtain only compile-time information and +code) and revisiting an object file (to obtain only run-time information +and code) is now faster, because revisions to the fasl format, fasl +writer, and fasl reader allow run-time code to be seeked past when +visiting and compile-time code to be seeked past when revisiting. +For compressed object files (the default), seeking still requires +reading all of the data, but the cost of parsing the fasl format and +building objects in the skipped portions is avoided, as are certain +side effects, such as associating record type descriptors with their +uids. + +Similarly, recompile information is now placed at the front of each +object file where it can be loaded separately from +the remainder of an object file without even seeking past the other +portions of the file. +Recompile information is used by \scheme{import} (when +\scheme{compile-imported-libraries} is \scheme{#t}) and by maybe-compile +routines such as \scheme{maybe-compile-program} to help determine +whether recompilation is necessary. + +Importing a library from an object file now causes the object file +to be visited rather than fully loaded. (Libraries were already +just revisited when required for their run-time code, e.g., when +used from a top-level program.) + +Together these changes can significantly reduce compile-time and +run-time overhead, particularly in applications that make use of +a large number of libraries. + +\subsection{Faster \protect\scheme{profile-release-counters} (9.5.3)} + +\scheme{profile-release-counters} is now generation-friendly, meaning +it does not incur any overhead for code objects in generations that +have not been collected since the last call to\scheme{profile-release-counters}. +Also, it no longer allocates memory when counters are released. + +\subsection{Reduced cost for obtaining profile counts (9.5.3)} + +The cost of obtaining profile counts via \scheme{profile-dump} and +other mechanisms has been reduced significantly. + +\subsection{Better code for \protect\scheme{bytevector} (9.5.1)} + +The compiler now generates better inline code for the \scheme{bytevector} +procedure. +Instead of one byte memory write for each argument, it writes up +to four (32-bit machines) or eight (64-bit machines) bytes at a +time, which almost always results in fewer instructions and fewer +writes. + +\subsection{\protect\scheme{vector-for-each} and \protect\scheme{string-for-each} improvement (9.5.1)} + +The last call to the procedure passed to \scheme{vector-for-each} +or \scheme{string-for-each} is now reliably implemented as tail +call, as was already the case for \scheme{for-each}. + +\subsection{Lambda commonization (9.5.1)} + +After running the main source optimization pass (cp0), the +compiler optionally runs a \emph{commonization} pass, which +commonizes code for similar lambda expressions. +The parameter \scheme{commonization-level} controls whether the +commonization pass is run and, if so, how aggressive it is. +The parameter's value must be a nonnegative exact integer ranging +from 0 through 9. When the parameter is set to 0, the default, +commonization is not run. Otherwise, higher values result in more +commonization. + +\subsection{Improved compile times (9.5.1)} + +Compile times are now lower, sometimes by an order of magnitude or +more, for procedures with thousands of parameters, local variables, +and compiler-introduced temporaries. +For such procedures, the register/frame allocator proactively spills +variables with large live ranges, cutting down on the size and cost +of building the conflict graph used to represent pairs of variables +that are live at the same time and therefore cannot share a location. + \subsection{Improved oblist management (9.3.3)} As a result of improvements in the handing of the oblist (symbol table), diff -Nru chezscheme-9.5+dfsg/release_notes/scheme.sty chezscheme-9.5.4+dfsg/release_notes/scheme.sty --- chezscheme-9.5+dfsg/release_notes/scheme.sty 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/release_notes/scheme.sty 2020-08-31 02:35:12.000000000 +0000 @@ -12,14 +12,14 @@ \newskip\schemeindent \schemeindent=0pt {\obeyspaces\global\let =\ } -\def\schtilde{\raisebox{-.5ex}{\hbox to .5em{\hss\large\rm\char`\~\hss}}} -\def\schdot{\hbox to .5em{\hfil\large\bf.\hfil}} +\def\schtilde{\raisebox{-.5ex}{\hbox{\char`\~}}} +\def\schdot{.} \def\schcarat{\char`\^} \def\schbackslash{\char`\\} -\def\schatsign{\hbox to .5em{\hss\footnotesize\rm\char`\@\hss}} -\def\schunderscore{\hbox to .5em{\hss\large\_\hss}} -\def\schlbrace{$\{$} -\def\schrbrace{$\}$} +\def\schatsign{\char`\@} +\def\schunderscore{\char`\_} +\def\schlbrace{\char`\{} +\def\schrbrace{\char`\}} \def\scheme#1{\mbox{\ttfamily\ninefivett\frenchspacing\spaceskip=\ttglue#1}} \def\schemeblankline{\par\beforeschemedisplay} diff -Nru chezscheme-9.5+dfsg/rpm/Makefile chezscheme-9.5.4+dfsg/rpm/Makefile --- chezscheme-9.5+dfsg/rpm/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/rpm/Makefile 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,84 @@ +# Makefile +# Copyright 1984-2017 Cisco Systems, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +version = 9.5.4 +release = 1 +m := $(shell find ../bin/* -type d | xargs basename) +arch := $(shell if test "$(m)" == "i3le" ; then echo i686 ; elif test "$(m)" == "a6le" ; then echo x86_64 ; else echo UNKNOWN ; fi) +DOTUSER := $(shell ls -ld . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') +DOTGROUP := $(shell ls -ldg . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') +TMP := $(shell pwd)/tmp +SPEC = $(TMP)/ChezScheme-$(version)-$(arch)-$(release).spec +RELEASE = csv$(version) +TARBALL = $(RELEASE)-$(m).tar.gz +RPM = ChezScheme-$(version)-$(release).$(arch).rpm + + +$(RPM): $(TMP)/$(RPM) + sudo install -m 644 -o $(DOTUSER) -g $(DOTGROUP) $(TMP)/${RPM} . + +$(TMP)/$(RPM): $(SPEC) $(TMP)/$(TARBALL) + sudo setarch $(arch) rpmbuild\ + --target $(arch)\ + --define "_topdir $(TMP)" \ + --define "_srcrpmdir $(TMP)" \ + --define "_rpmdir $(TMP)" \ + --define "_sourcedir $(TMP)" \ + --define "_builddir $(TMP)" \ + --define "_rpmfilename %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm" \ + --quiet -ba $(SPEC) + +$(SPEC): $(TMP) + echo 'Summary: Chez Scheme: A high-performance version of Scheme' > $(SPEC) + echo 'Name: ChezScheme' >> $(SPEC) + echo 'Version: $(version)' >> $(SPEC) + echo 'Release: $(release)' >> $(SPEC) + echo 'Provides: ChezScheme-runtime-{VERSION}' >> $(SPEC) + echo 'License: Apache 2.0' >> $(SPEC) + echo 'URL: http://github.com/cisco/chezscheme' >> $(SPEC) + echo 'Group: Development/Languages' >> $(SPEC) + echo 'Source0: $(TARBALL)' >> $(SPEC) + echo 'BuildRoot: %{_tmppath}/%{name}' >> $(SPEC) + echo '%description' >> $(SPEC) + echo 'Chez Scheme is a programming language and an implementation of that language,' >> $(SPEC) + echo 'with supporting tools and documentation.' >> $(SPEC) + echo '' >> $(SPEC) + echo '%prep' >> $(SPEC) + echo '' >> $(SPEC) + echo '%setup -T -b 0 -n $(RELEASE)' >> $(SPEC) + echo '' >> $(SPEC) + echo '#%build' >> $(SPEC) + echo '' >> $(SPEC) + echo '%install' >> $(SPEC) + echo 'make install TempRoot=%{buildroot}' >> $(SPEC) + echo '' >> $(SPEC) + echo '%files' >> $(SPEC) + echo '#%doc NOTICE' >> $(SPEC) + echo '#%doc LICENSE' >> $(SPEC) + echo '/usr/lib/$(RELEASE)' >> $(SPEC) + echo '/usr/bin/petite' >> $(SPEC) + echo '/usr/bin/scheme' >> $(SPEC) + echo '/usr/bin/scheme-script' >> $(SPEC) + echo '/usr/share/man/man1/petite.1.gz' >> $(SPEC) + echo '/usr/share/man/man1/scheme.1.gz' >> $(SPEC) + +$(TMP)/$(TARBALL): $(TMP) ../bintar/$(TARBALL) + cp ../bintar/$(TARBALL) $(TMP) + +$(TMP): + mkdir $(TMP) + +clean: + rm -rf $(TMP) $(RPM) diff -Nru chezscheme-9.5+dfsg/s/4.ss chezscheme-9.5.4+dfsg/s/4.ss --- chezscheme-9.5+dfsg/s/4.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/4.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"4.ss" ;;; 4.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,7 +13,8 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. -(define apply +(begin +(define-who apply (let () (define-syntax build-apply (lambda (x) @@ -24,7 +24,7 @@ [(p r) (unless (procedure? p) ($oops #f "attempt to apply non-procedure ~s" p)) - (let ([n ($list-length r 'apply)]) + (let ([n ($list-length r who)]) (case n [(0) (p)] [(1) (p (car r))] @@ -35,8 +35,8 @@ [(p x . r) (unless (procedure? p) ($oops #f "attempt to apply non-procedure ~s" p)) - (let ([r (cons x ($apply list* ($list-length r 'apply) r))]) - ($apply p ($list-length r 'apply) r))])] + (let ([r (cons x ($apply list* ($list-length r who) r))]) + ($apply p ($list-length r who) r))])] [(_ (s1 s2 ...) cl ...) (with-syntax ((m (length #'(s1 s2 ...)))) #'(build-apply @@ -44,7 +44,7 @@ [(p s1 s2 ... r) (unless (procedure? p) ($oops #f "attempt to apply non-procedure ~s" p)) - (let ([n ($list-length r 'apply)]) + (let ([n ($list-length r who)]) (case n [(0) (p s1 s2 ...)] [(1) (p s1 s2 ... (car r))] @@ -55,12 +55,6 @@ cl ...))]))) (build-apply (x1 x2 x3 x4)))) -(define ormap) -(define andmap) -(define map) -(define for-each) -(define fold-left) -(define fold-right) (let () (define length-error (lambda (who l1 l2) @@ -153,22 +147,22 @@ (set-who! andmap (do-andmap who)) (set-who! for-all (do-andmap who))) - (set! map + (set-who! map (case-lambda [(f ls) - (unless (procedure? f) (nonprocedure-error 'map f)) - ($list-length ls 'map) + (unless (procedure? f) (nonprocedure-error who f)) + ($list-length ls who) ; library map cdrs first to avoid getting sick if f mutates input (#3%map f ls)] [(f ls1 ls2) - (unless (procedure? f) (nonprocedure-error 'map f)) - (unless (fx= ($list-length ls1 'map) ($list-length ls2 'map)) - (length-error 'map ls1 ls2)) + (unless (procedure? f) (nonprocedure-error who f)) + (unless (fx= ($list-length ls1 who) ($list-length ls2 who)) + (length-error who ls1 ls2)) ; library map cdrs first to avoid getting sick if f mutates input (#3%map f ls1 ls2)] [(f ls . more) - (unless (procedure? f) (nonprocedure-error 'map f)) - (length-check 'map ls more) + (unless (procedure? f) (nonprocedure-error who f)) + (length-check who ls more) (let map ([f f] [ls ls] [more more]) (if (null? ls) '() @@ -200,22 +194,22 @@ (let ([tail (map f (cdr ls) (#3%map cdr more))]) (cons (apply f (car ls) (#3%map car more)) tail))))])) - (set! for-each + (set-who! for-each (case-lambda [(f ls) - (unless (procedure? f) (nonprocedure-error 'for-each f)) + (unless (procedure? f) (nonprocedure-error who f)) (unless (null? ls) - (let for-each ([n ($list-length ls 'for-each)] [ls ls]) + (let for-each ([n ($list-length ls who)] [ls ls]) (if (fx= n 1) (f (car ls)) (begin (f (car ls)) (let ([ls (cdr ls)]) - (unless (pair? ls) (mutation-error 'for-each)) + (unless (pair? ls) (mutation-error who)) (for-each (fx- n 1) ls))))))] [(f ls . more) - (unless (procedure? f) (nonprocedure-error 'for-each f)) - (let ([n (length-check 'for-each ls more)]) + (unless (procedure? f) (nonprocedure-error who f)) + (let ([n (length-check who ls more)]) (unless (fx= n 0) (let for-each ([n n] [ls ls] [more more] [cars (map car more)]) (if (fx= n 1) @@ -223,28 +217,28 @@ (begin (apply f (car ls) cars) (let ([ls (cdr ls)]) - (unless (pair? ls) (mutation-error 'for-each)) - (let-values ([(cdrs cars) (getcxrs more 'for-each)]) + (unless (pair? ls) (mutation-error who)) + (let-values ([(cdrs cars) (getcxrs more who)]) (for-each (fx- n 1) ls cdrs cars))))))))])) - (set! fold-left + (set-who! fold-left (case-lambda [(combine nil ls) - (unless (procedure? combine) (nonprocedure-error 'fold-left combine)) + (unless (procedure? combine) (nonprocedure-error who combine)) (cond [(null? ls) nil] [else - ($list-length ls 'fold-left) + ($list-length ls who) (let fold-left ([ls ls] [acc nil]) (let ([cdrls (cdr ls)]) (if (pair? cdrls) (fold-left cdrls (combine acc (car ls))) (if (null? cdrls) (combine acc (car ls)) - (mutation-error 'fold-left)))))])] + (mutation-error who)))))])] [(combine nil ls . more) - (unless (procedure? combine) (nonprocedure-error 'fold-left combine)) - (length-check 'fold-left ls more) + (unless (procedure? combine) (nonprocedure-error who combine)) + (length-check who ls more) (if (null? ls) nil (let fold-left ([ls ls] [more more] [cars (map car more)] [acc nil]) @@ -252,26 +246,26 @@ (if (null? cdrls) (apply combine acc (car ls) cars) (let ([acc (apply combine acc (car ls) cars)]) - (unless (pair? cdrls) (mutation-error 'fold-left)) - (let-values ([(cdrs cars) (getcxrs more 'fold-left)]) + (unless (pair? cdrls) (mutation-error who)) + (let-values ([(cdrs cars) (getcxrs more who)]) (fold-left cdrls cdrs cars acc)))))))])) - (set! fold-right + (set-who! fold-right (case-lambda [(combine nil ls) - (unless (procedure? combine) (nonprocedure-error 'fold-right combine)) - ($list-length ls 'fold-right) + (unless (procedure? combine) (nonprocedure-error who combine)) + ($list-length ls who) ; #3%fold-right naturally does cdrs first to avoid mutation sickness (#3%fold-right combine nil ls)] [(combine nil ls1 ls2) - (unless (procedure? combine) (nonprocedure-error 'fold-right combine)) - (unless (fx= ($list-length ls1 'map) ($list-length ls2 'map)) - (length-error 'fold-right ls1 ls2)) + (unless (procedure? combine) (nonprocedure-error who combine)) + (unless (fx= ($list-length ls1 who) ($list-length ls2 who)) + (length-error who ls1 ls2)) ; #3%fold-right naturally does cdrs first to avoid mutation sickness (#3%fold-right combine nil ls1 ls2)] [(combine nil ls . more) - (unless (procedure? combine) (nonprocedure-error 'fold-right combine)) - (length-check 'fold-right ls more) + (unless (procedure? combine) (nonprocedure-error who combine)) + (length-check who ls more) (let fold-right ([combine combine] [nil nil] [ls ls] [more more]) (if (null? ls) nil @@ -391,10 +385,10 @@ ;;; make-promise and force -(define $make-promise +(define-who $make-promise (lambda (thunk) (unless (procedure? thunk) - ($oops '$make-promise "~s is not a procedure" thunk)) + ($oops who "~s is not a procedure" thunk)) (let ([value (void)] [set? #f]) (lambda () (case set? @@ -419,8 +413,9 @@ (set! set? 'multiple) (apply values x)])]))]))))) -(define force +(define-who force (lambda (promise) (unless (procedure? promise) - ($oops 'force "~s is not a procedure" promise)) + ($oops who "~s is not a procedure" promise)) (promise))) +) diff -Nru chezscheme-9.5+dfsg/s/5_1.ss chezscheme-9.5.4+dfsg/s/5_1.ss --- chezscheme-9.5+dfsg/s/5_1.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/5_1.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"5_1.ss" ;;; 5_1.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -16,6 +15,7 @@ ;;; type and generic predicates +(begin (define boolean? (lambda (x) (or (eq? x #t) (eq? x #f)))) @@ -332,3 +332,4 @@ (or (null? s*) (and (#3%symbol=? (car s*) s1) (f (cdr s*))))))])) +) diff -Nru chezscheme-9.5+dfsg/s/5_2.ss chezscheme-9.5.4+dfsg/s/5_2.ss --- chezscheme-9.5+dfsg/s/5_2.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/5_2.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"5_2.ss" ;;; 5_2.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -16,6 +15,7 @@ ;;; list and pair functions +(begin (define atom? (lambda (x) (not (pair? x)))) @@ -266,20 +266,26 @@ (if (null? xr) x1 (append x1 (f (car xr) (cdr xr)))))]))) (define-who append! - (rec append! + (let () + (define (do-append! x1 x2) + (if (null? x1) + x2 + (let f ([ls x1]) + (if (null? (cdr ls)) + (begin (set-cdr! ls x2) x1) + (f (cdr ls)))))) (case-lambda [() '()] [(x1 x2) ($list-length x1 who) - (if (null? x1) - x2 - (let f ([ls x1]) - (if (null? (cdr ls)) - (begin (set-cdr! ls x2) x1) - (f (cdr ls)))))] + (do-append! x1 x2)] [(x1 . xr) (let f ([x1 x1] [xr xr]) - (if (null? xr) x1 (append! x1 (f (car xr) (cdr xr)))))]))) + (if (null? xr) + x1 + (begin + ($list-length x1 who) ; make sure all checks occur before first set-cdr! + (do-append! x1 (f (car xr) (cdr xr))))))]))) (define-who reverse (lambda (ls) @@ -786,3 +792,4 @@ (set! enumerate (lambda (ls) ($iota (fx- ($list-length ls 'enumerate) 1) '())))) +) diff -Nru chezscheme-9.5+dfsg/s/5_3.ss chezscheme-9.5.4+dfsg/s/5_3.ss --- chezscheme-9.5+dfsg/s/5_3.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/5_3.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"5_3.ss" ;;; 5_3.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -24,6 +23,7 @@ ;;; dangerous: -0.0, +inf.0, -inf.0, 1e100, 1e-100, 0.1 ;;; safe: 0.0, +nan.0, 1.0, 2.0, 0.5 +(begin (eval-when (compile) (define-constant max-float-exponent @@ -77,6 +77,7 @@ (define big< (foreign-procedure "(cs)s_big_lt" (scheme-object scheme-object) boolean)) +(define big-negate (schemeop1 "(cs)s_big_negate")) (define integer-ash (schemeop2 "(cs)s_ash")) (define integer+ (schemeop2 "(cs)add")) (define integer* (schemeop2 "(cs)mul")) @@ -898,6 +899,19 @@ [else (nonexact-integer-error who x)])] [else (nonexact-integer-error who n)]))) +(define $negate + (lambda (who x) + (type-case x + [(fixnum?) + (if (fx= x (most-negative-fixnum)) + (let-syntax ([a (lambda (x) (- (constant most-negative-fixnum)))]) a) + (fx- x))] + [(bignum?) (big-negate x)] + [(flonum?) (fl- x)] + [(ratnum?) (integer/ (- ($ratio-numerator x)) ($ratio-denominator x))] + [($exactnum? $inexactnum?) (make-rectangular (- (real-part x)) (- (imag-part x)))] + [else (nonnumber-error who x)]))) + (set! integer? (lambda (x) (type-case x @@ -1573,31 +1587,35 @@ [(ratnum?) (quotient ($ratio-numerator x) ($ratio-denominator x))] [else (nonreal-error who x)]))) -(set! quotient - (let ([f (lambda (x y) (truncate (/ x y)))]) - (lambda (x y) - (type-case y - [(fixnum?) - (when (fx= y 0) (domain-error 'quotient y)) - (type-case x - [(fixnum?) (if (and (fx= y -1) (fx= x (most-negative-fixnum))) - (- (most-negative-fixnum)) - (fxquotient x y))] - [(bignum?) (intquotient x y)] - [else - (unless (integer? x) (noninteger-error 'quotient x)) - (f x y)])] - [(bignum?) +(set-who! quotient + (let ([f (lambda (x y) (truncate (/ x y)))]) + (lambda (x y) + (type-case y + [(fixnum?) + (when (fx= y 0) (domain-error who y)) + (cond + [(fx= y 1) (unless (integer? x) (noninteger-error who x)) x] + [(fx= y -1) (unless (integer? x) (noninteger-error who x)) ($negate who x)] + [else (type-case x - [(fixnum? bignum?) (intquotient x y)] - [else - (unless (integer? x) (noninteger-error 'quotient x)) - (f x y)])] - [else - (unless (integer? y) (noninteger-error 'quotient y)) - (unless (integer? x) (noninteger-error 'quotient x)) - (when (= y 0) (domain-error 'quotient y)) - (f x y)])))) + [(fixnum?) (if (and (fx= y -1) (fx= x (most-negative-fixnum))) + (- (most-negative-fixnum)) + (fxquotient x y))] + [(bignum?) (intquotient x y)] + [else + (unless (integer? x) (noninteger-error who x)) + (f x y)])])] + [(bignum?) + (type-case x + [(fixnum? bignum?) (intquotient x y)] + [else + (unless (integer? x) (noninteger-error who x)) + (f x y)])] + [else + (unless (integer? y) (noninteger-error who y)) + (unless (integer? x) (noninteger-error who x)) + (when (= y 0) (domain-error who y)) + (f x y)])))) (set-who! div-and-mod (lambda (x y) @@ -1609,15 +1627,19 @@ ($fxdiv-and-mod x y #f)] [(flonum?) ($fldiv-and-mod x (fixnum->flonum y))] [(bignum?) - (when (fx= y 0) (domain-error who y)) - (let ([q.r (intquotient-remainder x y)]) - (if ($bigpositive? x) - (values (car q.r) (cdr q.r)) - (if (eq? (cdr q.r) 0) - (values (car q.r) 0) - (if (fx< y 0) - (values (+ (car q.r) 1) (fx- (cdr q.r) y)) - (values (- (car q.r) 1) (fx+ (cdr q.r) y))))))] + (cond + [(fx= y 1) (values x 0)] + [(fx= y -1) (values (big-negate x) 0)] + [else + (when (fx= y 0) (domain-error who y)) + (let ([q.r (intquotient-remainder x y)]) + (if ($bigpositive? x) + (values (car q.r) (cdr q.r)) + (if (eq? (cdr q.r) 0) + (values (car q.r) 0) + (if (fx< y 0) + (values (+ (car q.r) 1) (fx- (cdr q.r) y)) + (values (- (car q.r) 1) (fx+ (cdr q.r) y))))))])] [(ratnum?) (when (fx= y 0) (domain-error who y)) ($exdiv-and-mod x y)] @@ -1664,14 +1686,18 @@ [(flonum?) ($fldiv x (fixnum->flonum y))] [(bignum?) (when (fx= y 0) (domain-error who y)) - (if ($bigpositive? x) - (intquotient x y) - (let ([q.r (intquotient-remainder x y)]) - (if (eq? (cdr q.r) 0) - (car q.r) - (if (fx< y 0) - (+ (car q.r) 1) - (- (car q.r) 1)))))] + (cond + [(fx= y 1) x] + [(fx= y -1) (big-negate x)] + [else + (if ($bigpositive? x) + (intquotient x y) + (let ([q.r (intquotient-remainder x y)]) + (if (eq? (cdr q.r) 0) + (car q.r) + (if (fx< y 0) + (+ (car q.r) 1) + (- (car q.r) 1)))))])] [(ratnum?) (when (fx= y 0) (domain-error who y)) ($exdiv x y)] @@ -1716,14 +1742,17 @@ [(flonum?) ($flmod x (fixnum->flonum y))] [(bignum?) (when (fx= y 0) (domain-error who y)) - (if ($bigpositive? x) - (intremainder x y) - (let ([q.r (intquotient-remainder x y)]) - (if (eq? (cdr q.r) 0) - 0 - (if (fx< y 0) - (fx- (cdr q.r) y) - (fx+ (cdr q.r) y)))))] + (cond + [(or (fx= y 1) (fx= y -1)) 0] + [else + (if ($bigpositive? x) + (intremainder x y) + (let ([q.r (intquotient-remainder x y)]) + (if (eq? (cdr q.r) 0) + 0 + (if (fx< y 0) + (fx- (cdr q.r) y) + (fx+ (cdr q.r) y)))))])] [(ratnum?) (when (fx= y 0) (domain-error who y)) ($exmod x y)] @@ -1766,7 +1795,14 @@ (when (fx= y 0) (domain-error who y)) ($fxdiv0-and-mod0 x y #f)] [(flonum?) ($fldiv0-and-mod0 x (fixnum->flonum y))] - [(bignum? ratnum?) + [(bignum?) + (cond + [(fx= y 1) (values x 0)] + [(fx= y -1) (values (big-negate x) 0)] + [else + (when (fx= y 0) (domain-error who y)) + ($exdiv0-and-mod0 x y)])] + [(ratnum?) (when (fx= y 0) (domain-error who y)) ($exdiv0-and-mod0 x y)] [else (domain-error who x)])] @@ -1802,7 +1838,14 @@ (when (fx= y 0) (domain-error who y)) ($fxdiv0 x y #f)] [(flonum?) ($fldiv0 x (fixnum->flonum y))] - [(bignum? ratnum?) + [(bignum?) + (cond + [(fx= y 1) x] + [(fx= y -1) (big-negate x)] + [else + (when (fx= y 0) (domain-error who y)) + (exdiv0 x y)])] + [(ratnum?) (when (fx= y 0) (domain-error who y)) (exdiv0 x y)] [else (domain-error who x)])] @@ -1838,7 +1881,13 @@ (when (fx= y 0) (domain-error who y)) ($fxmod0 x y)] [(flonum?) ($flmod0 x (fixnum->flonum y))] - [(bignum? ratnum?) + [(bignum?) + (cond + [(or (fx= y 1) (fx= y -1)) 0] + [else + (when (fx= y 0) (domain-error who y)) + (exmod0 x y)])] + [(ratnum?) (when (fx= y 0) (domain-error who y)) (exmod0 x y)] [else (domain-error who x)])] @@ -1860,64 +1909,69 @@ [else (domain-error who x)])] [else (domain-error who y)]))) -(set! remainder - (let ([f (lambda (x y) - (let ([r (- x (* (quotient x y) y))]) - ;;; filter out outrageous results - ;;; try (remainder 1e194 10.0) without this hack... - (if (if (negative? y) (> r y) (< r y)) - r - 0.0)))]) - (lambda (x y) - (type-case y - [(fixnum?) - (when (fx= y 0) (domain-error 'remainder y)) - (type-case x - [(fixnum?) (fxremainder x y)] - [(bignum?) (intremainder x y)] - [else - (unless (integer? x) (noninteger-error 'remainder x)) - (f x y)])] - [(bignum?) +(set-who! remainder + (let ([f (lambda (x y) + (let ([r (- x (* (quotient x y) y))]) + ;;; filter out outrageous results + ;;; try (remainder 1e194 10.0) without this hack... + (if (if (negative? y) (> r y) (< r y)) + r + 0.0)))]) + (lambda (x y) + (type-case y + [(fixnum?) + (when (fx= y 0) (domain-error who y)) + (cond + [(or (fx= y 1) (fx= y -1)) (unless (integer? x) (noninteger-error who x)) 0] + [else (type-case x - [(fixnum? bignum?) (intremainder x y)] - [else - (unless (integer? x) (noninteger-error 'remainder x)) - (f x y)])] - [else - (unless (integer? y) (noninteger-error 'remainder y)) - (unless (integer? x) (noninteger-error 'remainder x)) - (when (= y 0) (domain-error 'remainder y)) - (f x y)])))) + [(fixnum?) (fxremainder x y)] + [(bignum?) (intremainder x y)] + [else + (unless (integer? x) (noninteger-error who x)) + (f x y)])])] + [(bignum?) + (type-case x + [(fixnum? bignum?) (intremainder x y)] + [else + (unless (integer? x) (noninteger-error who x)) + (f x y)])] + [else + (unless (integer? y) (noninteger-error who y)) + (unless (integer? x) (noninteger-error who x)) + (when (= y 0) (domain-error who y)) + (f x y)])))) -(set! even? +(set-who! even? (lambda (x) (type-case x [(fixnum?) (fxeven? x)] [(bignum?) (not (bigodd? x))] [(flonum?) + (when (exceptional-flonum? x) (noninteger-error who x)) (let ([y (fl* ($flfloor (fl/ x 2.0)) 2.0)]) (cond [(fl= x y) #t] [(fl= (fl+ y 1.0) x) #f] - [else (noninteger-error 'even? x)]))] + [else (noninteger-error who x)]))] [else - (unless (integer? x) (noninteger-error 'even? x)) + (unless (integer? x) (noninteger-error who x)) (even? (real-part x))]))) -(set! odd? +(set-who! odd? (lambda (x) (type-case x [(fixnum?) (fxodd? x)] [(bignum?) (bigodd? x)] [(flonum?) + (when (exceptional-flonum? x) (noninteger-error who x)) (let ([y (fl* ($flfloor (fl/ x 2.0)) 2.0)]) (cond [(fl= x y) #f] [(fl= (fl+ y 1.0) x) #t] - [else (noninteger-error 'odd? x)]))] + [else (noninteger-error who x)]))] [else - (unless (integer? x) (noninteger-error 'odd? x)) + (unless (integer? x) (noninteger-error who x)) (odd? (real-part x))]))) (set-who! round @@ -2046,185 +2100,227 @@ [else (nonreal-error who x)]))) (set! $+ - (lambda (who x y) - (type-case x - [(fixnum? bignum?) - (type-case y - [(fixnum? bignum?) (integer+ x y)] - [(ratnum?) - (let ([d ($ratio-denominator y)]) - (/ (+ (* x d) ($ratio-numerator y)) d))] - [(flonum?) (exact-inexact+ x y)] - [($exactnum? $inexactnum?) - (make-rectangular (+ x (real-part y)) (imag-part y))] - [else (nonnumber-error who y)])] - [(ratnum?) - (type-case y + (lambda (who x y) + (define (exint-unknown+ who x y) + (type-case y + [(fixnum? bignum?) (integer+ x y)] + [(ratnum?) + (let ([d ($ratio-denominator y)]) + (integer/ (+ (* x d) ($ratio-numerator y)) d))] + [(flonum?) (exact-inexact+ x y)] + [($exactnum? $inexactnum?) + (make-rectangular (+ x (real-part y)) (imag-part y))] + [else (nonnumber-error who y)])) + (cond + [(eqv? y 0) (unless (number? x) (nonnumber-error who x)) x] + [else + (type-case x + [(fixnum?) + (cond + [(fx= x 0) (unless (number? y) (nonnumber-error who y)) y] + [else (exint-unknown+ who x y)])] + [(bignum?) (exint-unknown+ who x y)] + [(ratnum?) + (type-case y [(fixnum? bignum?) (let ([d ($ratio-denominator x)]) - (/ (+ (* y d) ($ratio-numerator x)) d))] + (integer/ (+ (* y d) ($ratio-numerator x)) d))] [(ratnum?) (let ([xd ($ratio-denominator x)] [yd ($ratio-denominator y)]) - (/ (+ (* ($ratio-numerator x) yd) - (* ($ratio-numerator y) xd)) - (* xd yd)))] + (integer/ + (+ (* ($ratio-numerator x) yd) (* ($ratio-numerator y) xd)) + (* xd yd)))] [($exactnum? $inexactnum?) (make-rectangular (+ x (real-part y)) (imag-part y))] [(flonum?) (exact-inexact+ x y)] [else (nonnumber-error who y)])] - [(flonum?) - (type-case y + [(flonum?) + (type-case y [(cflonum?) (cfl+ x y)] [(fixnum? bignum? ratnum?) (exact-inexact+ y x)] [($exactnum?) (make-rectangular (+ x (real-part y)) (imag-part y))] [else (nonnumber-error who y)])] - [($exactnum? $inexactnum?) - (type-case y + [($exactnum? $inexactnum?) + (type-case y [(fixnum? bignum? ratnum? flonum?) (make-rectangular (+ (real-part x) y) (imag-part x))] [($exactnum? $inexactnum?) (make-rectangular (+ (real-part x) (real-part y)) - (+ (imag-part x) (imag-part y)))] + (+ (imag-part x) (imag-part y)))] [else (nonnumber-error who y)])] - [else (nonnumber-error who x)]))) + [else (nonnumber-error who x)])]))) (set! $* - (lambda (who x y) - (type-case x - [(fixnum? bignum?) - (type-case y - [(fixnum? bignum?) (integer* x y)] - [(ratnum?) (/ (* x ($ratio-numerator y)) ($ratio-denominator y))] - [($exactnum? $inexactnum?) - (make-rectangular (* x (real-part y)) (* x (imag-part y)))] - [(flonum?) (exact-inexact* x y)] - [else (nonnumber-error who y)])] - [(ratnum?) - (type-case y + (lambda (who x y) + (define (exint-unknown* who x y) + (type-case y + [(fixnum? bignum?) (integer* x y)] + [(ratnum?) (integer/ (* x ($ratio-numerator y)) ($ratio-denominator y))] + [($exactnum? $inexactnum?) + (make-rectangular (* x (real-part y)) (* x (imag-part y)))] + [(flonum?) (exact-inexact* x y)] + [else (nonnumber-error who y)])) + (cond + [(and (fixnum? y) ($fxu< (#3%fx+ y 1) 3)) + (cond + [(fx= y 0) (unless (number? x) (nonnumber-error who x)) 0] + [(fx= y 1) (unless (number? x) (nonnumber-error who x)) x] + [else ($negate who x)])] + [else + (type-case x + [(fixnum?) + (cond + [($fxu< (#3%fx+ x 1) 3) + (cond + [(fx= x 0) (unless (number? y) (nonnumber-error who y)) 0] + [(fx= x 1) (unless (number? y) (nonnumber-error who y)) y] + [else ($negate who y)])] + [else (exint-unknown* who x y)])] + [(bignum?) (exint-unknown* who x y)] + [(ratnum?) + (type-case y [(fixnum? bignum?) - (/ (* y ($ratio-numerator x)) ($ratio-denominator x))] + (integer/ (* y ($ratio-numerator x)) ($ratio-denominator x))] [(ratnum?) - (/ (* ($ratio-numerator x) ($ratio-numerator y)) - (* ($ratio-denominator x) ($ratio-denominator y)))] + (integer/ + (* ($ratio-numerator x) ($ratio-numerator y)) + (* ($ratio-denominator x) ($ratio-denominator y)))] [($exactnum? $inexactnum?) (make-rectangular (* x (real-part y)) (* x (imag-part y)))] [(flonum?) (exact-inexact* x y)] [else (nonnumber-error who y)])] - [(flonum?) - (type-case y + [(flonum?) + (type-case y [(cflonum?) (cfl* x y)] [(fixnum? bignum? ratnum?) (exact-inexact* y x)] [($exactnum?) (make-rectangular (* x (real-part y)) (* x (imag-part y)))] [else (nonnumber-error who y)])] - [($exactnum? $inexactnum?) - (type-case y + [($exactnum? $inexactnum?) + (type-case y [(fixnum? bignum? ratnum? flonum?) (make-rectangular (* (real-part x) y) (* (imag-part x) y))] [($exactnum? $inexactnum?) (let ([a (real-part x)] [b (imag-part x)] [c (real-part y)] [d (imag-part y)]) - (make-rectangular (- (* a c) (* b d)) (+ (* a d) (* b c))))] + (make-rectangular (- (* a c) (* b d)) (+ (* a d) (* b c))))] [else (nonnumber-error who y)])] - [else (nonnumber-error who x)]))) + [else (nonnumber-error who x)])]))) (set! $- - (lambda (who x y) - (type-case x - [(fixnum? bignum?) - (type-case y - [(fixnum? bignum?) (integer- x y)] - [(ratnum?) - (let ([d ($ratio-denominator y)]) - (/ (- (* x d) ($ratio-numerator y)) d))] - [($exactnum? $inexactnum?) - (make-rectangular (- x (real-part y)) (- (imag-part y)))] - [(flonum?) (exact-inexact- x y)] - [else (nonnumber-error who y)])] - [(ratnum?) - (type-case y + (lambda (who x y) + (define (exint-unknown- who x y) + (type-case y + [(fixnum? bignum?) (integer- x y)] + [(ratnum?) + (let ([d ($ratio-denominator y)]) + (integer/ (- (* x d) ($ratio-numerator y)) d))] + [($exactnum? $inexactnum?) + (make-rectangular (- x (real-part y)) (- (imag-part y)))] + [(flonum?) (exact-inexact- x y)] + [else (nonnumber-error who y)])) + (cond + [(eqv? y 0) (unless (number? x) (nonnumber-error who x)) x] + [else + (type-case x + [(fixnum?) + (cond + [(eqv? x 0) ($negate who y)] + [else (exint-unknown- who x y)])] + [(bignum?) (exint-unknown- who x y)] + [(ratnum?) + (type-case y [(fixnum? bignum?) (let ([d ($ratio-denominator x)]) - (/ (- ($ratio-numerator x) (* y d)) d))] + (integer/ (- ($ratio-numerator x) (* y d)) d))] [(ratnum?) (let ([xd ($ratio-denominator x)] [yd ($ratio-denominator y)]) - (/ (- (* ($ratio-numerator x) yd) - (* ($ratio-numerator y) xd)) - (* xd yd)))] + (integer/ + (- (* ($ratio-numerator x) yd) (* ($ratio-numerator y) xd)) + (* xd yd)))] [($exactnum? $inexactnum?) (make-rectangular (- x (real-part y)) (- (imag-part y)))] [(flonum?) (exact-inexact- x y)] [else (nonnumber-error who y)])] - [(flonum?) - (type-case y + [(flonum?) + (type-case y [(cflonum?) (cfl- x y)] [(fixnum? bignum? ratnum?) (inexact-exact- x y)] [($exactnum?) (make-rectangular (- x (real-part y)) (- (imag-part y)))] [else (nonnumber-error who y)])] - [($exactnum? $inexactnum?) - (type-case y + [($exactnum? $inexactnum?) + (type-case y [(fixnum? bignum? ratnum? flonum?) (make-rectangular (- (real-part x) y) (imag-part x))] [($exactnum? $inexactnum?) (make-rectangular (- (real-part x) (real-part y)) - (- (imag-part x) (imag-part y)))] + (- (imag-part x) (imag-part y)))] [else (nonnumber-error who y)])] - [else (nonnumber-error who x)]))) + [else (nonnumber-error who x)])]))) (set! $/ - (lambda (who x y) - (type-case y - [(fixnum? bignum?) - (type-case x - [(fixnum? bignum?) - (when (eq? y 0) (domain-error who y)) - (integer/ x y)] - [(ratnum?) - (when (eq? y 0) (domain-error who y)) - (/ ($ratio-numerator x) (* y ($ratio-denominator x)))] - [($exactnum?) - (when (eq? y 0) (domain-error who y)) - (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] - [($inexactnum?) - (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] - [(flonum?) (inexact-exact/ x y)] - [else (nonnumber-error who x)])] - [(ratnum?) - (type-case x - [(fixnum? bignum?) - (integer/ (* x ($ratio-denominator y)) ($ratio-numerator y))] - [(ratnum?) - (integer/ (* ($ratio-numerator x) ($ratio-denominator y)) - (* ($ratio-denominator x) ($ratio-numerator y)))] - [($exactnum? $inexactnum?) - (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] - [(flonum?) (inexact-exact/ x y)] - [else (nonnumber-error who x)])] - [(flonum?) - (type-case x - [(cflonum?) (cfl/ x y)] - [(fixnum? bignum? ratnum?) (exact-inexact/ x y)] - [($exactnum?) - (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] - [else (nonnumber-error who x)])] - [($exactnum? $inexactnum?) - (type-case x - [(fixnum? bignum? ratnum? flonum?) - ;; a / c+di => c(a/(cc+dd)) + (-d(a/cc+dd))i - (let ([c (real-part y)] [d (imag-part y)]) - (let ([t (/ x (+ (* c c) (* d d)))]) - (make-rectangular (* c t) (- (* d t)))))] - [($exactnum? $inexactnum?) - ;; a+bi / c+di => (ac+bd)/(cc+dd) + ((bc-ad)/(cc+dd))i - (let ([a (real-part x)] [b (imag-part x)] - [c (real-part y)] [d (imag-part y)]) - (let ([t (+ (* c c) (* d d))]) - (make-rectangular (/ (+ (* a c) (* b d)) t) - (/ (- (* b c) (* a d)) t))))] - [else (nonnumber-error who x)])] - [else (nonnumber-error who y)]))) + (lambda (who x y) + (define (unknown-exint/ who x y) + (type-case x + [(fixnum?) + (when (eqv? y 0) (domain-error who y)) + (if (eqv? x 0) 0 (integer/ x y))] + [(bignum?) + (when (eqv? y 0) (domain-error who y)) + (integer/ x y)] + [(ratnum?) + (when (eqv? y 0) (domain-error who y)) + (integer/ ($ratio-numerator x) (* y ($ratio-denominator x)))] + [($exactnum?) + (when (eqv? y 0) (domain-error who y)) + (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] + [($inexactnum?) + (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] + [(flonum?) (inexact-exact/ x y)] + [else (nonnumber-error who x)])) + (type-case y + [(fixnum?) + (cond + [(fx= y 1) (unless (number? x) (nonnumber-error who x)) x] + [(fx= y -1) (unless (number? x) (nonnumber-error who x)) ($negate who x)] + [else (unknown-exint/ who x y)])] + [(bignum?) (unknown-exint/ who x y)] + [(ratnum?) + (type-case x + [(fixnum? bignum?) + (integer/ (* x ($ratio-denominator y)) ($ratio-numerator y))] + [(ratnum?) + (integer/ (* ($ratio-numerator x) ($ratio-denominator y)) + (* ($ratio-denominator x) ($ratio-numerator y)))] + [($exactnum? $inexactnum?) + (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] + [(flonum?) (inexact-exact/ x y)] + [else (nonnumber-error who x)])] + [(flonum?) + (type-case x + [(cflonum?) (cfl/ x y)] + [(fixnum? bignum? ratnum?) (exact-inexact/ x y)] + [($exactnum?) + (make-rectangular (/ (real-part x) y) (/ (imag-part x) y))] + [else (nonnumber-error who x)])] + [($exactnum? $inexactnum?) + (type-case x + [(fixnum? bignum? ratnum? flonum?) + ;; a / c+di => c(a/(cc+dd)) + (-d(a/cc+dd))i + (let ([c (real-part y)] [d (imag-part y)]) + (let ([t (/ x (+ (* c c) (* d d)))]) + (make-rectangular (* c t) (- (* d t)))))] + [($exactnum? $inexactnum?) + ;; a+bi / c+di => (ac+bd)/(cc+dd) + ((bc-ad)/(cc+dd))i + (let ([a (real-part x)] [b (imag-part x)] + [c (real-part y)] [d (imag-part y)]) + (let ([t (+ (* c c) (* d d))]) + (make-rectangular (/ (+ (* a c) (* b d)) t) + (/ (- (* b c) (* a d)) t))))] + [else (nonnumber-error who x)])] + [else (nonnumber-error who y)]))) (set! conjugate (lambda (x) @@ -2521,15 +2617,15 @@ [(and (bignum? n) (#%$bigpositive? n)) (big-integer-sqrt n)] [else ($oops who "~s is not a nonnegative exact integer" n)]))) -(set! $quotient-remainder - (lambda (x y) - (type-case y - [(bignum? fixnum?) - (when (eq? y 0) (domain-error '$quotient-remainder y)) - (type-case x - [(fixnum? bignum?) (intquotient-remainder x y)] - [else (nonexact-integer-error '$quotient-remainder x)])] - [else (nonexact-integer-error '$quotient-remainder y)]))) +(set-who! $quotient-remainder + (lambda (x y) + (type-case y + [(fixnum? bignum?) + (when (eq? y 0) (domain-error who y)) + (type-case x + [(fixnum? bignum?) (intquotient-remainder x y)] + [else (nonexact-integer-error who x)])] + [else (nonexact-integer-error who y)]))) (set! random (let ([fxrandom (foreign-procedure "(cs)s_fxrandom" @@ -2655,20 +2751,22 @@ (set-who! fleven? (lambda (x) (unless (flonum? x) ($oops who "~s is not a flonum" x)) + (when (exceptional-flonum? x) (noninteger-error who x)) (let ([y (fl* ($flfloor (fl/ x 2.0)) 2.0)]) (cond [(fl= x y) #t] [(fl= (fl+ y 1.0) x) #f] - [else (noninteger-error 'fleven? x)])))) + [else (noninteger-error who x)])))) (set-who! flodd? (lambda (x) (unless (flonum? x) ($oops who "~s is not a flonum" x)) + (when (exceptional-flonum? x) (noninteger-error who x)) (let ([y (fl* ($flfloor (fl/ x 2.0)) 2.0)]) (cond [(fl= x y) #f] [(fl= (fl+ y 1.0) x) #t] - [else (noninteger-error 'odd? x)])))) + [else (noninteger-error who x)])))) (set-who! flmin (let ([$flmin (lambda (x y) (if (or (fl< x y) ($nan? x)) x y))]) @@ -2974,3 +3072,4 @@ [k (- end start) (- k w-1)]) ((<= k w-1) (logor (sll m^ k) ($fxreverse m k)))))))) ))))))) +) diff -Nru chezscheme-9.5+dfsg/s/5_4.ss chezscheme-9.5.4+dfsg/s/5_4.ss --- chezscheme-9.5+dfsg/s/5_4.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/5_4.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"5_4.ss" ;;; 5_4.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -16,6 +15,7 @@ ;;; character and string functions +(begin (define substring (lambda (s1 m n) (unless (string? s1) @@ -120,19 +120,19 @@ ($string-set-immutable! v2) v2)]))) -(define substring-fill! +(define-who substring-fill! (lambda (s m n c) (unless (mutable-string? s) - ($oops 'substring-fill! "~s is not a mutable string" s)) + ($oops who "~s is not a mutable string" s)) (unless (char? c) - ($oops 'substring-fill! "~s is not a character" c)) + ($oops who "~s is not a character" c)) (let ([k (string-length s)]) (unless (and (fixnum? m) (fixnum? n) (fx<= 0 m n k)) - ($oops 'substring-fill! + ($oops who "~s and ~s are not valid start/end indices for ~s" m n s)) (do ([i m (fx+ i 1)]) - ((fx= i n) s) + ((fx= i n)) (string-set! s i c))))) (set! string-for-each @@ -829,3 +829,4 @@ ($compose ($decompose s #f)))) ) ) +) diff -Nru chezscheme-9.5+dfsg/s/5_6.ss chezscheme-9.5.4+dfsg/s/5_6.ss --- chezscheme-9.5+dfsg/s/5_6.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/5_6.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"5_6.ss" ;;; 5_6.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -85,7 +84,7 @@ (unless (mutable-vector? v) ($oops who "~s is not a mutable vector" v)) (let ([n (vector-length v)]) (do ([i 0 (fx+ i 1)]) - ((fx= i n) v) + ((fx= i n)) (vector-set! v i obj))))) (set! fxvector->list diff -Nru chezscheme-9.5+dfsg/s/5_7.ss chezscheme-9.5.4+dfsg/s/5_7.ss --- chezscheme-9.5+dfsg/s/5_7.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/5_7.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"5_7.ss" ;;; 5_7.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -16,6 +15,7 @@ ;;; symbol functions +(begin (define property-list (lambda (s) (unless (symbol? s) @@ -79,14 +79,10 @@ (set-cdr! prev (cdr (cdr pl))) ($set-system-property-list! s (cdr (cdr pl)))) (rp (cdr (cdr pl)) (cdr pl))))))) +) (eval-when (compile) (optimize-level 3)) -(define $gensym->pretty-name) -(define gensym-prefix) -(define gensym-count) -(define gensym->unique-string) -(define gensym) (let ([prefix "g"] [count 0]) (define generate-unique-name ; a-z must come first in alphabet. separator must not be in alphabet. diff -Nru chezscheme-9.5+dfsg/s/6.ss chezscheme-9.5.4+dfsg/s/6.ss --- chezscheme-9.5+dfsg/s/6.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/6.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"6.ss" ;;; 6.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (define with-output-to-string (lambda (th) (unless (procedure? th) @@ -128,15 +128,7 @@ (let ([x (fp path follow?)]) (if (fixnum? x) x - (if-feature windows - (let ([y (let ([n (string-length path)]) - (and (fx> n 0) - (fp (if (directory-separator? (string-ref path (fx- n 1))) - (substring path 0 (fx- n 1)) - (string-append path "\\")) - follow?)))]) - (if (fixnum? y) y (err x))) - (err x))))])))) + (err x)))])))) (let () (define file-x-time @@ -155,18 +147,7 @@ (let ([x (path-fp file follow?)]) (if (pair? x) (make-time 'time-utc (cdr x) (car x)) - (if-feature windows - (let ([y (let ([n (string-length file)]) - (and (fx> n 0) - (path-fp - (if (directory-separator? (string-ref file (fx- n 1))) - (substring file 0 (fx- n 1)) - (string-append file "\\")) - follow?)))]) - (if (pair? y) - (make-time 'time-utc (cdr y) (car y)) - (path-err file x))) - (path-err file x)))) + (path-err file x))) (let ([x (fd-fp (port-file-descriptor file))]) (cond [(pair? x) (make-time 'time-utc (cdr x) (car x))] @@ -208,9 +189,9 @@ (and (not (char=? (string-ref path i) #\*)) (nostars? (fx+ i 1)))))) ($oops who "invalid directory name ~s" path)) - (wl (if (directory-separator? (string-ref path (fx- n 1))) - (format "~a*" path) - (format "~a\\*" path)))))) + (wl (if (memv (string-ref path (fx- n 1)) '(#\\ #\/ #\:)) + (string-append path "*") + (string-append path "\\*")))))) (foreign-procedure "(cs)directory_list" (string) scheme-object))]) (lambda (path) (unless (string? path) ($oops who "~s is not a string" path)) @@ -237,15 +218,7 @@ [(path) (file-exists? path #t)] [(path follow?) (unless (string? path) ($oops who "~s is not a string" path)) - (if-feature windows - (or (fp path follow?) - (let ([n (string-length path)]) - (and (fx> n 0) - (fp (if (directory-separator? (string-ref path (fx- n 1))) - (substring path 0 (fx- n 1)) - (string-append path "\\")) - follow?)))) - (fp path follow?))])))) + (fp path follow?)])))) (define-who #(r6rs: file-exists?) (lambda (path) @@ -267,15 +240,7 @@ [(path) (file-directory? path #t)] [(path follow?) (unless (string? path) ($oops who "~s is not a string" path)) - (if-feature windows - (or (fp path follow?) - (let ([n (string-length path)]) - (and (fx> n 0) - (fp (if (directory-separator? (string-ref path (fx- n 1))) - (substring path 0 (fx- n 1)) - (string-append path "\\")) - follow?)))) - (fp path follow?))])))) + (fp path follow?)])))) (define-who file-symbolic-link? (let ([fp (foreign-procedure "(cs)file_symbolic_linkp" (string) boolean)]) @@ -376,7 +341,7 @@ (char=? (string-ref s 1) #\:) (let ([c (string-ref s 0)]) (or (char<=? #\a c #\z) (char<=? #\A c #\Z)))) - (if (and (>= n 3) (directory-separator? (string-ref s 2))) 3 2)] + (if (and (fx>= n 3) (directory-separator? (string-ref s 2))) 3 2)] [(and windows? (fx>= n 4) (char=? (string-ref s 0) #\\) @@ -388,7 +353,7 @@ (char=? (string-ref s 5) #\:) (let ([c (string-ref s 4)]) (or (char<=? #\a c #\z) (char<=? #\A c #\Z)))) - (if (and (>= n 7) (char=? (string-ref s 6) #\\)) 7 6)] + (if (and (fx>= n 7) (char=? (string-ref s 6) #\\)) 7 6)] [(and windows? (fx>= n 8) (char-ci=? (string-ref s 4) #\U) @@ -427,22 +392,16 @@ (set-who! path-absolute? (lambda (s) - (define directory-separator? (directory-separator-predicate s)) (unless (string? s) ($oops who "~s is not a string" s)) (let ([n (string-length s)]) (or (and (fx>= n 1) (directory-separator? (string-ref s 0))) (and (fx>= n 1) (char=? (string-ref s 0) #\~)) (and windows? - (fx>= n 2) + (fx>= n 3) (char=? (string-ref s 1) #\:) (let ([c (string-ref s 0)]) - (or (char<=? #\a c #\z) (char<=? #\A c #\Z)))) - (and windows? - (fx>= n 4) - (char=? (string-ref s 0) #\\) - (char=? (string-ref s 1) #\\) - (char=? (string-ref s 2) #\?) - (char=? (string-ref s 3) #\\)))))) + (or (char<=? #\a c #\z) (char<=? #\A c #\Z))) + (directory-separator? (string-ref s 2))))))) (set-who! path-extension (lambda (s) @@ -543,3 +502,4 @@ [else (loop (fx+ i 1))])) (substring s (skip-sep s base n) n))))) ) +) diff -Nru chezscheme-9.5+dfsg/s/7.ss chezscheme-9.5.4+dfsg/s/7.ss --- chezscheme-9.5+dfsg/s/7.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/7.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"7.ss" ;;; 7.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -16,6 +15,7 @@ ;;; system operations +(begin (define scheme-start (make-parameter (lambda fns (for-each load fns) (new-cafe)) @@ -96,8 +96,8 @@ (define-who with-source-path (lambda (whoarg fn p) (unless (or (eq? whoarg #f) (string? whoarg) (symbol? whoarg)) ($oops who "invalid who argument ~s" whoarg)) + (unless (string? fn) ($oops who "~s is not a string" fn)) (unless (procedure? p) ($oops who "~s is not a procedure" p)) - (unless (string? fn) ($oops whoarg "~s is not a string" fn)) (let ([dirs (source-directories)]) (if (or (equal? dirs '("")) (equal? dirs '(".")) ($fixed-path? fn)) (p fn) @@ -118,9 +118,16 @@ (p path) (loop (cdr ls)))))))))) -(set! fasl-read +(set! $compressed-warning + (let ([warned? #f]) + (lambda (who p) + (unless warned? + (set! warned? #t) + (warningf who "fasl file content is compressed internally; compressing the file (~s) is redundant and can slow fasl writing and reading significantly" p))))) + +(set-who! fasl-read (let () - (define $fasl-read (foreign-procedure "(cs)fasl_read" (ptr boolean ptr) ptr)) + (define $fasl-read (foreign-procedure "(cs)fasl_read" (int fixnum ptr) ptr)) (define $bv-fasl-read (foreign-procedure "(cs)bv_fasl_read" (ptr ptr) ptr)) (define (get-uptr p) (let ([k (get-u8 p)]) @@ -129,48 +136,92 @@ (let ([k (get-u8 p)]) (f k (logor (ash n 7) (fxsrl k 1)))) n)))) - (define (malformed p) ($oops 'fasl-read "malformed fasl-object header found in ~s" p)) + (define (get-uptr/bytes p) + (let ([k (get-u8 p)]) + (let f ([k k] [n (fxsrl k 1)] [bytes 1]) + (if (fxlogbit? 0 k) + (let ([k (get-u8 p)]) + (f k (logor (ash n 7) (fxsrl k 1)) (fx+ bytes 1))) + (values n bytes))))) + (define (malformed p what) ($oops who "malformed fasl-object found in ~s (~a)" p what)) (define (check-header p) (let ([bv (make-bytevector 8 (constant fasl-type-header))]) (unless (and (eqv? (get-bytevector-n! p bv 1 7) 7) (bytevector=? bv (constant fasl-header))) - (malformed p))) + (malformed p "invalid header"))) (let ([n (get-uptr p)]) (unless (= n (constant scheme-version)) - ($oops 'fasl-read "incompatible fasl-object version ~a found in ~s" + ($oops who "incompatible fasl-object version ~a found in ~s" ($format-scheme-version n) p))) (let ([n (get-uptr p)]) (unless (or (= n (constant machine-type-any)) (= n (constant machine-type))) (cond [(assv n (constant machine-type-alist)) => (lambda (a) - ($oops 'fasl-read "incompatible fasl-object machine-type ~s found in ~s" + ($oops who "incompatible fasl-object machine-type ~s found in ~s" (cdr a) p))] - [else (malformed p)]))) + [else (malformed p "unrecognized machine type")]))) (unless (and (eqv? (get-u8 p) (char->integer #\()) ;) (let f () (let ([n (get-u8 p)]) (and (not (eof-object? n)) ;( (or (eqv? n (char->integer #\))) (f)))))) - (malformed p))) - (lambda (p) + (malformed p "invalid list of base boot files"))) + (define (go p situation) + (define (go1) + (if (and ($port-flags-set? p (constant port-flag-file)) + (or (not ($port-flags-set? p (constant port-flag-compressed))) + (begin ($compressed-warning who p) #f)) + (eqv? (binary-port-input-count p) 0)) + ($fasl-read ($port-info p) situation (port-name p)) + (let fasl-entry () + (let ([ty (get-u8 p)]) + (cond + [(eof-object? ty) ty] + [(eqv? ty (constant fasl-type-header)) + (check-header p) + (fasl-entry)] + [(eqv? ty (constant fasl-type-visit)) + (go2 (eqv? situation (constant fasl-type-revisit)))] + [(eqv? ty (constant fasl-type-revisit)) + (go2 (eqv? situation (constant fasl-type-visit)))] + [(eqv? ty (constant fasl-type-visit-revisit)) + (go2 #f)] + [else (malformed p "invalid situation")]))))) + (define (go2 skip?) + (let ([n (get-uptr p)]) + (if skip? + (begin + (if (and (port-has-port-position? p) (port-has-set-port-position!? p)) + (set-port-position! p (+ (port-position p) n)) + (get-bytevector-n p n)) + (go1)) + (let ([compressed-flag (get-u8 p)]) + (cond + [(or (eqv? compressed-flag (constant fasl-type-gzip)) (eqv? compressed-flag (constant fasl-type-lz4))) + (let-values ([(dest-size dest-size-bytes) (get-uptr/bytes p)]) + (let* ([src-size (- n 1 dest-size-bytes)] + [bv (get-bytevector-n p src-size)] + [bv ($bytevector-uncompress bv dest-size + (if (eqv? compressed-flag (constant fasl-type-gzip)) + (constant COMPRESS-GZIP) + (constant COMPRESS-LZ4)))]) + ($bv-fasl-read bv (port-name p))))] + [(eqv? compressed-flag (constant fasl-type-uncompressed)) + ($bv-fasl-read (get-bytevector-n p (- n 1)) (port-name p))] + [else (malformed p "invalid compression")]))))) (unless (and (input-port? p) (binary-port? p)) - ($oops 'fasl-read "~s is not a binary input port" p)) - (if (and ($port-flags-set? p (constant port-flag-file)) - (eqv? (binary-port-input-count p) 0)) - ($fasl-read ($port-info p) - ($port-flags-set? p (constant port-flag-compressed)) - (port-name p)) - (let fasl-entry () - (let ([ty (get-u8 p)]) - (cond - [(eof-object? ty) ty] - [(eqv? ty (constant fasl-type-header)) - (check-header p) - (fasl-entry)] - [(eqv? ty (constant fasl-type-fasl-size)) - ($bv-fasl-read (get-bytevector-n p (get-uptr p)) (port-name p))] - [else (malformed p)]))))))) + ($oops who "~s is not a binary input port" p)) + (go1)) + (case-lambda + [(p) (go p (constant fasl-type-visit-revisit))] + [(p situation) + (go p + (case situation + [(visit) (constant fasl-type-visit)] + [(revisit) (constant fasl-type-revisit)] + [(load) (constant fasl-type-visit-revisit)] + [else ($oops who "invalid situation ~s" situation)]))]))) (define ($compiled-file-header? ip) (let ([pos (port-position ip)]) @@ -184,39 +235,34 @@ (let () (define do-load-binary - (lambda (who fn ip situation for-import?) - (module (Lexpand? visit-stuff? visit-stuff-inner revisit-stuff? revisit-stuff-inner - recompile-info? library/ct-info? library/rt-info? program-info?) - (import (nanopass)) - (include "base-lang.ss") - (include "expand-lang.ss")) - (define unexpected-value! - (lambda (x) - ($oops who "unexpected value ~s read from ~a" x fn))) - (let loop () - (let ([x (fasl-read ip)]) - (define run-inner - (lambda (x) - (cond - [(procedure? x) (x)] - [(library/rt-info? x) ($install-library/rt-desc x for-import? fn)] - [(library/ct-info? x) ($install-library/ct-desc x for-import? fn)] - [(program-info? x) ($install-program-desc x)] - [else (unexpected-value! x)]))) - (define run-outer - (lambda (x) - (cond - [(recompile-info? x) (void)] - [(revisit-stuff? x) (when (memq situation '(load revisit)) (run-inner (revisit-stuff-inner x)))] - [(visit-stuff? x) (when (memq situation '(load visit)) (run-inner (visit-stuff-inner x)))] - [else (run-inner x)]))) - (cond - [(eof-object? x) (close-port ip)] - [(vector? x) (vector-for-each run-outer x) (loop)] - [(Lexpand? x) ($interpret-backend x situation for-import? fn) (loop)] - [else (run-outer x) (loop)]))))) + (lambda (who fn ip situation for-import? importer) + (let ([load-binary (make-load-binary who fn situation for-import? importer)]) + (let ([x (fasl-read ip situation)]) + (unless (eof-object? x) + (let loop ([x x]) + (let ([next-x (fasl-read ip situation)]) + (if (eof-object? next-x) + (load-binary x) + (begin (load-binary x) (loop next-x)))))))))) + + (define (make-load-binary who fn situation for-import? importer) + (module (Lexpand? recompile-info? library/ct-info? library/rt-info? program-info?) + (import (nanopass)) + (include "base-lang.ss") + (include "expand-lang.ss")) + (lambda (x) + (cond + [(procedure? x) (x)] + [(library/rt-info? x) ($install-library/rt-desc x for-import? importer fn)] + [(library/ct-info? x) ($install-library/ct-desc x for-import? importer fn)] + [(program-info? x) ($install-program-desc x)] + [(recompile-info? x) (void)] + [(Lexpand? x) ($interpret-backend x situation for-import? importer fn)] + ; NB: this is here to support the #t inserted by compile-file-help2 after header information + [(eq? x #t) (void)] + [else ($oops who "unexpected value ~s read from ~a" x fn)]))) - (define (do-load who fn situation for-import? ksrc) + (define (do-load who fn situation for-import? importer ksrc) (let ([ip ($open-file-input-port who fn)]) (on-reset (close-port ip) (let ([fp (let ([start-pos (port-position ip)]) @@ -232,13 +278,14 @@ fp (loop fp)))))) (begin (set-port-position! ip start-pos) 0)))]) - (port-file-compressed! ip) (if ($compiled-file-header? ip) - (do-load-binary who fn ip situation for-import?) (begin - (when ($port-flags-set? ip (constant port-flag-compressed)) - ($oops who "missing header for compiled file ~s" fn)) - (unless ksrc ($oops who "~a is not a compiled file" fn)) + (do-load-binary who fn ip situation for-import? importer) + (close-port ip)) + (begin + (unless ksrc + (close-port ip) + ($oops who "~a is not a compiled file" fn)) (unless (eqv? fp 0) (set-port-position! ip 0)) (let ([sfd ($source-file-descriptor fn ip (eqv? fp 0))]) (unless (eqv? fp 0) (set-port-position! ip fp)) @@ -246,15 +293,38 @@ (set! ip (transcoded-port ip (current-transcoder))) (ksrc ip sfd ($make-read ip sfd fp))))))))) + (set! $make-load-binary + (lambda (fn) + (make-load-binary '$make-load-binary fn 'load #f #f))) + + (set-who! load-compiled-from-port + (lambda (ip) + (unless (and (input-port? ip) (binary-port? ip)) + ($oops who "~s is not a binary input port" ip)) + (do-load-binary who (port-name ip) ip 'load #f #f))) + + (set-who! visit-compiled-from-port + (lambda (ip) + (unless (and (input-port? ip) (binary-port? ip)) + ($oops who "~s is not a binary input port" ip)) + (do-load-binary who (port-name ip) ip 'visit #f #f))) + + (set-who! revisit-compiled-from-port + (lambda (ip) + (unless (and (input-port? ip) (binary-port? ip)) + ($oops who "~s is not a binary input port" ip)) + (do-load-binary who (port-name ip) ip 'revisit #f #f))) + (set-who! load-program (rec load-program (case-lambda [(fn) (load-program fn eval)] [(fn ev) + (unless (string? fn) ($oops who "~s is not a string" fn)) (unless (procedure? ev) ($oops who "~s is not a procedure" ev)) (with-source-path who fn (lambda (fn) - (do-load who fn 'load #f + (do-load who fn 'load #f #f (lambda (ip sfd do-read) ($set-port-flags! ip (constant port-flag-r6rs)) (let loop ([x* '()]) @@ -271,10 +341,11 @@ (case-lambda [(fn) (load-library fn eval)] [(fn ev) + (unless (string? fn) ($oops who "~s is not a string" fn)) (unless (procedure? ev) ($oops who "~s is not a procedure" ev)) (with-source-path who fn (lambda (fn) - (do-load who fn 'load #f + (do-load who fn 'load #f #f (lambda (ip sfd do-read) ($set-port-flags! ip (constant port-flag-r6rs)) (let loop () @@ -288,11 +359,11 @@ ; like load, but sets #!r6rs mode and does not use with-source-path, ; since syntax.ss load-library has already determined the path. ; adds fn's directory to source-directories - (lambda (fn situation) + (lambda (fn situation importer) (define who 'import) (let ([fn (let ([host-fn (format "~a.~s" (path-root fn) (machine-type))]) (if (file-exists? host-fn) host-fn fn))]) - (do-load who fn situation #t + (do-load who fn situation #t importer (lambda (ip sfd do-read) ($set-port-flags! ip (constant port-flag-r6rs)) (parameterize ([source-directories (cons (path-parent fn) (source-directories))]) @@ -308,10 +379,11 @@ (case-lambda [(fn) (load fn eval)] [(fn ev) + (unless (string? fn) ($oops who "~s is not a string" fn)) (unless (procedure? ev) ($oops who "~s is not a procedure" ev)) (with-source-path who fn (lambda (fn) - (do-load who fn 'load #f + (do-load who fn 'load #f #f (lambda (ip sfd do-read) (let loop () (let ([x (do-read)]) @@ -321,20 +393,20 @@ (close-port ip)))))]))) (set! $visit - (lambda (who fn) - (do-load who fn 'visit #t #f))) + (lambda (who fn importer) + (do-load who fn 'visit #t importer #f))) (set! $revisit - (lambda (who fn) - (do-load who fn 'revisit #t #f))) + (lambda (who fn importer) + (do-load who fn 'revisit #t importer #f))) (set-who! visit (lambda (fn) - (do-load who fn 'visit #f #f))) + (do-load who fn 'visit #f #f #f))) (set-who! revisit (lambda (fn) - (do-load who fn 'revisit #f #f)))) + (do-load who fn 'revisit #f #f #f)))) (let () (module sstats-record (make-sstats sstats? sstats-cpu sstats-real @@ -631,7 +703,7 @@ (define $scheme-greeting (lambda () - (format "~a\nCopyright 1984-2017 Cisco Systems, Inc.\n" + (format "~a\nCopyright 1984-2020 Cisco Systems, Inc.\n" (scheme-version)))) (define $session-key #f) @@ -655,23 +727,23 @@ (define gc-count 0) (define start-bytes 0) (define docollect - (let ([do-gc (foreign-procedure "(cs)do_gc" (int int) void)]) + (let ([do-gc (foreign-procedure "(cs)do_gc" (int int int) void)]) (lambda (p) (with-tc-mutex (unless (= $active-threads 1) ($oops 'collect "cannot collect when multiple threads are active")) - (let-values ([(trip g gtarget) (p gc-trip)]) + (let-values ([(trip g gmintarget gmaxtarget) (p gc-trip)]) (set! gc-trip trip) (let ([cpu (current-time 'time-thread)] [real (current-time 'time-monotonic)]) (set! gc-bytes (+ gc-bytes (bytes-allocated))) (when (collect-notify) (fprintf (console-output-port) "~%[collecting generation ~s into generation ~s..." - g gtarget) + g gmaxtarget) (flush-output-port (console-output-port))) (when (eqv? g (collect-maximum-generation)) ($clear-source-lines-cache)) - (do-gc g gtarget) + (do-gc g gmintarget gmaxtarget) ($close-resurrected-files) (when-feature pthreads ($close-resurrected-mutexes&conditions)) @@ -713,14 +785,15 @@ (docollect (lambda (gct) (let ([gct (+ gct 1)]) - (let loop ([g (collect-maximum-generation)]) - (if (= (modulo gct (expt (collect-generation-radix) g)) 0) - (if (fx= g (collect-maximum-generation)) - (values 0 g g) - (values gct g (fx+ g 1))) - (loop (fx- g 1))))))))) + (let ([cmg (collect-maximum-generation)]) + (let loop ([g cmg]) + (if (= (modulo gct (expt (collect-generation-radix) g)) 0) + (if (fx= g cmg) + (values 0 g (fxmin g 1) g) + (values gct g 1 (fx+ g 1))) + (loop (fx- g 1)))))))))) (define collect2 - (lambda (g gtarget) + (lambda (g gmintarget gmaxtarget) (docollect (lambda (gct) (values @@ -734,21 +807,46 @@ (+ gct (modulo (- n gct) n)))) (let ([next (trip g)] [limit (trip (fx+ g 1))]) (if (< next limit) next (- limit 1))))) - g gtarget))))) + g gmintarget gmaxtarget))))) (case-lambda [() (collect0)] [(g) - (unless (and (fixnum? g) (fx<= 0 g (collect-maximum-generation))) - ($oops who "invalid generation ~s" g)) - (collect2 g (if (fx= g (collect-maximum-generation)) g (fx+ g 1)))] + (let ([cmg (collect-maximum-generation)]) + (unless (and (fixnum? g) (fx<= 0 g cmg)) + ($oops who "invalid generation ~s" g)) + (let ([gtarget (if (fx= g cmg) g (fx+ g 1))]) + (collect2 g gtarget gtarget)))] [(g gtarget) - (unless (and (fixnum? g) (fx<= 0 g (collect-maximum-generation))) - ($oops who "invalid generation ~s" g)) - (unless (if (fx= g (collect-maximum-generation)) - (or (eqv? gtarget g) (eq? gtarget 'static)) - (or (eqv? gtarget g) (eqv? gtarget (fx+ g 1)))) - ($oops who "invalid target generation ~s for generation ~s" gtarget g)) - (collect2 g (if (eq? gtarget 'static) (constant static-generation) gtarget))]))) + (let ([cmg (collect-maximum-generation)]) + (unless (and (fixnum? g) (fx<= 0 g cmg)) + ($oops who "invalid generation ~s" g)) + (unless (if (fx= g cmg) + (or (eqv? gtarget g) (eq? gtarget 'static)) + (or (eqv? gtarget g) (eqv? gtarget (fx+ g 1)))) + ($oops who "invalid target generation ~s for generation ~s" gtarget g))) + (let ([gtarget (if (eq? gtarget 'static) (constant static-generation) gtarget)]) + (collect2 g gtarget gtarget))] + [(g gmintarget gmaxtarget) + (let ([cmg (collect-maximum-generation)]) + (unless (and (fixnum? g) (fx<= 0 g cmg)) + ($oops who "invalid generation ~s" g)) + (unless (if (fx= g cmg) + (or (eqv? gmaxtarget g) (eq? gmaxtarget 'static)) + (or (eqv? gmaxtarget g) (eqv? gmaxtarget (fx+ g 1)))) + ($oops who "invalid maximum target generation ~s for generation ~s" gmaxtarget g)) + (unless (or (eqv? gmintarget gmaxtarget) + (and (fixnum? gmintarget) + (fx<= 1 gmintarget (if (fixnum? gmaxtarget) gmaxtarget cmg)))) + ($oops who "invalid minimum target generation ~s for generation ~s and maximum target generation ~s" gmintarget g gmaxtarget))) + (collect2 g + (if (eq? gmintarget 'static) (constant static-generation) gmintarget) + (if (eq? gmaxtarget 'static) (constant static-generation) gmaxtarget))]))) + +(set! collect-rendezvous + (let ([fire-collector (foreign-procedure "(cs)fire_collector" () void)]) + (lambda () + (fire-collector) + ($collect-rendezvous)))) (set! keyboard-interrupt-handler ($make-thread-parameter @@ -1323,7 +1421,7 @@ (set! $pass-stats (lambda () - (let-values ([(namev psv) (with-tc-mutex (hashtable-entries stats-ht))]) + (define (build-result namev psv) (vector->list (vector-map (lambda (name ps) @@ -1333,7 +1431,23 @@ (pass-stats-gc-cpu ps) (pass-stats-bytes ps))) namev - psv))))) + psv))) + (with-tc-mutex + (if outer-ps + (let ([cpu (current-time 'time-thread)] + [gc-cpu (current-time 'time-collector-cpu)] + [bytes (+ (bytes-deallocated) (bytes-allocated))]) + (set-time-type! cpu 'time-duration) + (set-time-type! gc-cpu 'time-duration) + (pass-stats-cpu-set! outer-ps (add-duration (pass-stats-cpu outer-ps) cpu)) + (pass-stats-gc-cpu-set! outer-ps (add-duration (pass-stats-gc-cpu outer-ps) gc-cpu)) + (pass-stats-bytes-set! outer-ps (+ (pass-stats-bytes outer-ps) bytes)) + (let ([result (call-with-values (lambda () (hashtable-entries stats-ht)) build-result)]) + (pass-stats-cpu-set! outer-ps (subtract-duration (pass-stats-cpu outer-ps) cpu)) + (pass-stats-gc-cpu-set! outer-ps (subtract-duration (pass-stats-gc-cpu outer-ps) gc-cpu)) + (pass-stats-bytes-set! outer-ps (- (pass-stats-bytes outer-ps) bytes)) + result)) + (call-with-values (lambda () (hashtable-entries stats-ht)) build-result))))) (let () (define who '$print-pass-stats) @@ -1414,3 +1528,4 @@ [() (print-pass-stats #f ($pass-stats))] [(key) (print-pass-stats key ($pass-stats))] [(key psl*) (print-pass-stats key psl*)])))) +) diff -Nru chezscheme-9.5+dfsg/s/a6nb.def chezscheme-9.5.4+dfsg/s/a6nb.def --- chezscheme-9.5+dfsg/s/a6nb.def 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/a6nb.def 2020-08-31 02:35:12.000000000 +0000 @@ -24,7 +24,7 @@ (define-constant size_t-bits 64) (define-constant ptrdiff_t-bits 64) (define-constant wchar-bits 32) -(define-constant time-t-bits 32) +(define-constant time-t-bits 64) (define-constant max-float-alignment 8) (define-constant max-integer-alignment 8) (define-constant asm-arg-reg-max 5) diff -Nru chezscheme-9.5+dfsg/s/a6ob.def chezscheme-9.5.4+dfsg/s/a6ob.def --- chezscheme-9.5+dfsg/s/a6ob.def 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/a6ob.def 2020-08-31 02:35:12.000000000 +0000 @@ -24,7 +24,7 @@ (define-constant size_t-bits 64) (define-constant ptrdiff_t-bits 64) (define-constant wchar-bits 32) -(define-constant time-t-bits 32) +(define-constant time-t-bits 64) (define-constant max-float-alignment 8) (define-constant max-integer-alignment 8) (define-constant asm-arg-reg-max 5) diff -Nru chezscheme-9.5+dfsg/s/arm32.ss chezscheme-9.5.4+dfsg/s/arm32.ss --- chezscheme-9.5+dfsg/s/arm32.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/arm32.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,12 +1,12 @@ ;;; arm32.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. -;;; +;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); ;;; you may not use this file except in compliance with the License. ;;; You may obtain a copy of the License at -;;; +;;; ;;; http://www.apache.org/licenses/LICENSE-2.0 -;;; +;;; ;;; Unless required by applicable law or agreed to in writing, software ;;; distributed under the License is distributed on an "AS IS" BASIS, ;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -101,7 +101,7 @@ [%Cfparg8 %d7 %s14 #f 14] [%Cfparg8b %s15 #f 15] [%flreg1 %d8 %s16 #f 16] - [%flreg2 %d9 %s18 #f 18] + [%flreg2 %d9 %s18 #f 18] ; etc. #;[ %d16 #f 32] ; >= 32: high bit goes in D, N, or M bit, low bits go in Vd, Vn, Vm #;[ %d17 #f 33] @@ -219,20 +219,20 @@ (cond [(and (eq? x1 %zero) (or (unsigned12? imm) (unsigned12? (- imm)))) (return x0 %zero imm)] - [(funky12 imm) => + [(funky12 imm) ; NB: dubious value? check to see if it's exercised - (lambda (imm) - (let ([u (make-tmp 'u)]) - (seq - (build-set! ,u (asm ,null-info ,(asm-add #f) ,x0 (immediate ,imm))) - (return u x1 0))))] - [(funky12 (- imm)) => + ; NB: might should safe-assert x1 is %zero + (let ([u (make-tmp 'u)]) + (seq + (build-set! ,u (asm ,null-info ,(asm-add #f) ,x0 (immediate ,imm))) + (return u x1 0)))] + [(funky12 (- imm)) ; NB: dubious value? check to see if it's exercised - (lambda (imm) - (let ([u (make-tmp 'u)]) - (seq - (build-set! ,u (asm ,null-info ,(asm-sub #f) ,x0 (immediate ,imm))) - (return u x1 0))))] + ; NB: might should safe-assert x1 is %zero + (let ([u (make-tmp 'u)]) + (seq + (build-set! ,u (asm ,null-info ,(asm-sub #f) ,x0 (immediate ,imm))) + (return u x1 0)))] [else (let ([u (make-tmp 'u)]) (seq @@ -742,7 +742,7 @@ `(set! ,(make-live-info) ,z (asm ,info ,asm-get-tc ,u ,ulr))))]) (define-instruction value (asmlibcall) - [(op (z ur)) + [(op (z ur)) (let ([u (make-tmp 'u)]) (if (info-asmlib-save-ra? info) (seq @@ -845,7 +845,16 @@ (seq `(set! ,(make-live-info) ,u1 (asm ,null-info ,asm-kill)) `(set! ,(make-live-info) ,u2 (asm ,null-info ,asm-kill)) - `(asm ,null-info ,(asm-lock+/- op) ,r ,u1 ,u2)))))])) + `(asm ,null-info ,(asm-lock+/- op) ,r ,u1 ,u2)))))]) + (define-instruction effect (cas) + [(op (x ur) (y ur) (w funky12) (old ur) (new ur)) + (lea->reg x y w + (lambda (r) + (let ([u1 (make-tmp 'u1)] [u2 (make-tmp 'u2)]) + (seq + `(set! ,(make-live-info) ,u1 (asm ,null-info ,asm-kill)) + `(set! ,(make-live-info) ,u2 (asm ,null-info ,asm-kill)) + `(asm ,info ,asm-cas ,r ,old ,new ,u1 ,u2)))))])) (define-instruction effect (pause) ; NB: user sqrt or something like that? @@ -867,6 +876,9 @@ (define-instruction effect (vpush-multiple) [(op) `(asm ,info ,(asm-vpush-multiple (info-vpush-reg info) (info-vpush-n info)))]) + (define-instruction effect (vpop-multiple) + [(op) `(asm ,info ,(asm-vpop-multiple (info-vpush-reg info) (info-vpush-n info)))]) + (define-instruction effect save-flrv [(op) `(asm ,info ,asm-save-flrv)]) @@ -879,28 +891,28 @@ ;;; SECTION 3: assembler (module asm-module (; required exports - asm-move asm-move/extend asm-load asm-store asm-swap asm-library-call asm-library-call! asm-library-jump - asm-mul asm-smull asm-cmp/shift asm-add asm-sub asm-rsb asm-logand asm-logor asm-logxor asm-bic - asm-pop-multiple asm-shiftop asm-logand asm-lognot - asm-logtest asm-fl-relop asm-relop asm-push-multiple asm-vpush-multiple - asm-indirect-jump asm-literal-jump - asm-direct-jump asm-return-address asm-jump asm-conditional-jump asm-data-label asm-rp-header - asm-indirect-call asm-condition-code - asm-fl-load/store - asm-fl-load/cvt asm-fl-store/cvt asm-flt asm-trunc - asm-lock asm-lock+/- - asm-flop-2 asm-flsqrt asm-c-simple-call - asm-save-flrv asm-restore-flrv asm-return asm-size - asm-enter asm-foreign-call asm-foreign-callable - asm-read-counter - asm-inc-cc-counter - funky12 - shift-count? unsigned8? unsigned12? - ; threaded version specific - asm-get-tc - ; machine dependent exports - asm-kill - info-vpush-reg info-vpush-n) + asm-move asm-move/extend asm-load asm-store asm-swap asm-library-call asm-library-call! asm-library-jump + asm-mul asm-smull asm-cmp/shift asm-add asm-sub asm-rsb asm-logand asm-logor asm-logxor asm-bic + asm-pop-multiple asm-shiftop asm-logand asm-lognot + asm-logtest asm-fl-relop asm-relop asm-push-multiple asm-vpush-multiple asm-vpop-multiple + asm-indirect-jump asm-literal-jump + asm-direct-jump asm-return-address asm-jump asm-conditional-jump asm-data-label asm-rp-header + asm-indirect-call asm-condition-code + asm-fl-load/store + asm-fl-load/cvt asm-fl-store/cvt asm-flt asm-trunc + asm-lock asm-lock+/- asm-cas + asm-flop-2 asm-flsqrt asm-c-simple-call + asm-save-flrv asm-restore-flrv asm-return asm-c-return asm-size + asm-enter asm-foreign-call asm-foreign-callable + asm-read-counter + asm-inc-cc-counter + funky12 + shift-count? unsigned8? unsigned12? + ; threaded version specific + asm-get-tc + ; machine dependent exports + asm-kill + info-vpush-reg info-vpush-n) (define-record-type info-vpush (nongenerative) (parent info) @@ -1060,9 +1072,10 @@ (define-op bls branch-label-op (ax-cond 'ls)) (define-op bhi branch-label-op (ax-cond 'hi)) - (define-op popm pm-op #b10001011) + (define-op popm pm-op #b10001011) (define-op pushm pm-op #b10010010) - (define-op vpushm vpushm-op) + (define-op vpushm vpm-op #b11010 #b10) + (define-op vpopm vpm-op #b11001 #b11) (define-op vldr.sgl vldr/vstr-op #b1010 #b01) (define-op vldr.dbl vldr/vstr-op #b1011 #b01) @@ -1120,7 +1133,7 @@ (emit-code (shift-type dest-ea src0-ea src1-ea code*) [28 (ax-cond 'al)] [21 #b0001101] - [20 #b0] + [20 #b0] [16 #b0000] [12 (ax-ea-reg-code dest-ea)] [8 (ax-ea-reg-code src1-ea)] @@ -1155,10 +1168,12 @@ (emit-code (op set-cc? dest-ea opnd-ea n code*) [28 (ax-cond 'al)] [21 opcode] - [20 (if set-cc? #b1 #b0)] + [20 (if set-cc? #b1 #b0)] [16 (ax-ea-reg-code opnd-ea)] [12 (ax-ea-reg-code dest-ea)] - [0 (funky12 n)]))) + [0 (or (funky12 n) + ($oops 'assembler-internal + "binary-imm-op n=~s" n))]))) (define binary-op (lambda (op opcode set-cc? dest-ea opnd0-ea opnd1-ea code*) @@ -1404,14 +1419,15 @@ [12 #b1111] [0 #b101000010000]))) - (define vpushm-op - (lambda (op flreg n code*) + (define vpm-op + (lambda (op opcode opcode2 flreg n code*) (let-values ([(d vd) (ax-flreg->bits flreg)]) (emit-code (op flreg n code*) [28 (ax-cond 'al)] - [23 #b11010] + [23 opcode] [22 d] - [16 #b101101] + [20 opcode2] + [16 #b1101] [12 vd] [8 #b1011] [0 (fxsll n 1)])))) @@ -1753,23 +1769,25 @@ [else (sorry! who "unexpected op ~s" op)]))))) (module (asm-add asm-sub asm-rsb asm-logand asm-logor asm-logxor asm-bic) - (define-syntax asm-binop + (define-syntax define-asm-binop (syntax-rules () - [(_ opi op) - (lambda (set-cc?) - (lambda (code* dest src0 src1) - (Trivit (dest src0 src1) - (record-case src1 - [(imm) (n) (emit opi set-cc? dest src0 n code*)] - [else (emit op set-cc? dest src0 src1 code*)]))))])) - - (define asm-add (asm-binop addi add)) - (define asm-sub (asm-binop subi sub)) - (define asm-rsb (asm-binop rsbi rsb)) - (define asm-logand (asm-binop andi and)) - (define asm-logor (asm-binop orri orr)) - (define asm-logxor (asm-binop eori eor)) - (define asm-bic (asm-binop bici bic))) + [(_ name opi op) + (define name + (lambda (set-cc?) + (rec name + (lambda (code* dest src0 src1) + (Trivit (dest src0 src1) + (record-case src1 + [(imm) (n) (emit opi set-cc? dest src0 n code*)] + [else (emit op set-cc? dest src0 src1 code*)]))))))])) + + (define-asm-binop asm-add addi add) + (define-asm-binop asm-sub subi sub) + (define-asm-binop asm-rsb rsbi rsb) + (define-asm-binop asm-logand andi and) + (define-asm-binop asm-logor orri orr) + (define-asm-binop asm-logxor eori eor) + (define-asm-binop asm-bic bici bic)) (define asm-mul (lambda (code* dest src0 src1) @@ -1956,6 +1974,22 @@ [(locked-decr!) (emit subi #f tmp1 tmp1 1 code*)] [else (sorry! who "unexpected op ~s" op)]))))))) + (define-who asm-cas + ; tmp = ldrex src + ; cmp tmp, old + ; bne L (+2) + ; tmp2 = strex new, src + ; cmp tmp2, 0 + ; L: + (lambda (code* src old new tmp1 tmp2) + (Trivit (src old new tmp1 tmp2) + (emit ldrex tmp1 src + (emit cmp tmp1 old + (emit bnei 1 + (emit strex tmp2 new src + (emit cmpi tmp2 0 + code*)))))))) + (define asm-fl-relop (lambda (info) (lambda (l1 l2 offset x y) @@ -2001,6 +2035,11 @@ (lambda (code*) (emit vpushm reg n code*)))) + (define asm-vpop-multiple + (lambda (reg n) + (lambda (code*) + (emit vpopm reg n code*)))) + (define asm-save-flrv (lambda (code*) (let ([sp (cons 'reg %sp)]) @@ -2277,6 +2316,8 @@ ; NB: reads from %lr...should be okay if declare-intrinsics sets up return-live* properly (define asm-return (lambda () (emit bx (cons 'reg %lr) '()))) + (define asm-c-return (lambda (info) (emit bx (cons 'reg %lr) '()))) + (define-who asm-shiftop (lambda (op) (lambda (code* dest src0 src1) @@ -2291,7 +2332,7 @@ (emit mvn dest src code*)))) (define asm-enter values) - + (define-who asm-inc-cc-counter (lambda (code* addr val tmp) (Trivit (addr val tmp) @@ -2310,53 +2351,112 @@ (lambda (code*) (emit addi #f tmp tmp 1 code*)) code*)))))) - + (module (asm-foreign-call asm-foreign-callable) (define align (lambda (b x) (let ([k (- b 1)]) (fxlogand (fx+ x k) (fxlognot k))))) + (define (double-member? m) (and (eq? (car m) 'float) + (fx= (cadr m) 8))) + (define (float-member? m) (and (eq? (car m) 'float) + (fx= (cadr m) 4))) + (define (indirect-result-that-fits-in-registers? result-type) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + (let* ([members ($ftd->members ftd)] + [num-members (length members)]) + (or (fx<= ($ftd-size ftd) 4) + (and (fx= num-members 1) + ;; a struct containing only int64 is not returned in a register + (or (not ($ftd-compound? ftd)))) + (and (fx<= num-members 4) + (or (andmap double-member? members) + (andmap float-member? members)))))] + [else #f])) + (define sgl-regs (lambda () (list %Cfparg1 %Cfparg1b %Cfparg2 %Cfparg2b %Cfparg3 %Cfparg3b %Cfparg4 %Cfparg4b + %Cfparg5 %Cfparg5b %Cfparg6 %Cfparg6b %Cfparg7 %Cfparg7b %Cfparg8 %Cfparg8b))) (define-who asm-foreign-call (with-output-language (L13 Effect) (define int-regs (lambda () (list %Carg1 %Carg2 %Carg3 %Carg4))) - (define sgl-regs (lambda () (list %Cfparg1 %Cfparg1b %Cfparg2 %Cfparg2b %Cfparg3 %Cfparg3b %Cfparg4 %Cfparg4b %Cfparg5 %Cfparg5b %Cfparg6 %Cfparg6b %Cfparg7 %Cfparg7b %Cfparg8 %Cfparg8b))) (letrec ([load-double-stack - (lambda (offset) - (lambda (x) ; requires var - (%seq - (inline ,(make-info-loadfl %flreg1) ,%load-double ,x ,%zero ,(%constant flonum-data-disp)) - (inline ,(make-info-loadfl %flreg1) ,%store-double ,%sp ,%zero (immediate ,offset)))))] + (lambda (offset) + (lambda (x) ; requires var + (%seq + (inline ,(make-info-loadfl %flreg1) ,%load-double ,x ,%zero ,(%constant flonum-data-disp)) + (inline ,(make-info-loadfl %flreg1) ,%store-double ,%sp ,%zero (immediate ,offset)))))] [load-single-stack - (lambda (offset) - (lambda (x) ; requires var - (%seq - (inline ,(make-info-loadfl %flreg1) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp)) - (inline ,(make-info-loadfl %flreg1) ,%store-single ,%sp ,%zero (immediate ,offset)))))] + (lambda (offset) + (lambda (x) ; requires var + (%seq + (inline ,(make-info-loadfl %flreg1) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp)) + (inline ,(make-info-loadfl %flreg1) ,%store-single ,%sp ,%zero (immediate ,offset)))))] [load-int-stack - (lambda (offset) - (lambda (rhs) ; requires rhs - `(set! ,(%mref ,%sp ,offset) ,rhs)))] + (lambda (offset) + (lambda (rhs) ; requires rhs + `(set! ,(%mref ,%sp ,offset) ,rhs)))] [load-int64-stack - (lambda (offset) - (lambda (lorhs hirhs) ; requires rhs - (%seq - (set! ,(%mref ,%sp ,offset) ,lorhs) - (set! ,(%mref ,%sp ,(fx+ offset 4)) ,hirhs))))] + (lambda (offset) + (lambda (lorhs hirhs) ; requires rhs + (%seq + (set! ,(%mref ,%sp ,offset) ,lorhs) + (set! ,(%mref ,%sp ,(fx+ offset 4)) ,hirhs))))] + [load-int-indirect-stack + (lambda (offset from-offset size) + (lambda (x) ; requires var + (case size + [(3) + (%seq + (set! ,(%mref ,%sp ,offset) (inline ,(make-info-load 'integer-16 #f) ,%load ,x ,%zero (immediate ,from-offset))) + (set! ,(%mref ,%sp ,(fx+ offset 2)) (inline ,(make-info-load 'integer-8 #f) ,%load ,x ,%zero (immediate ,(fx+ from-offset 2)))))] + [else + `(set! ,(%mref ,%sp ,offset) ,(case size + [(1) `(inline ,(make-info-load 'integer-8 #f) ,%load ,x ,%zero (immediate ,from-offset))] + [(2) `(inline ,(make-info-load 'integer-16 #f) ,%load ,x ,%zero (immediate ,from-offset))] + [(4) (%mref ,x ,from-offset)]))])))] + [load-int64-indirect-stack + (lambda (offset from-offset) + (lambda (x) ; requires var + (%seq + (set! ,(%mref ,%sp ,offset) ,(%mref ,x ,from-offset)) + (set! ,(%mref ,%sp ,(fx+ offset 4)) ,(%mref ,x ,(fx+ from-offset 4))))))] [load-double-reg - (lambda (fpreg) - (lambda (x) ; requires var - `(inline ,(make-info-loadfl fpreg) ,%load-double ,x ,%zero ,(%constant flonum-data-disp))))] + (lambda (fpreg fp-disp) + (lambda (x) ; requires var + `(inline ,(make-info-loadfl fpreg) ,%load-double ,x ,%zero (immediate ,fp-disp))))] [load-single-reg - (lambda (fpreg) - (lambda (x) ; requires var - `(inline ,(make-info-loadfl fpreg) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp))))] + (lambda (fpreg fp-disp single?) + (lambda (x) ; requires var + `(inline ,(make-info-loadfl fpreg) ,(if single? %load-single %load-double->single) ,x ,%zero (immediate ,fp-disp))))] [load-int-reg - (lambda (ireg) - (lambda (x) - `(set! ,ireg ,x)))] + (lambda (ireg) + (lambda (x) + `(set! ,ireg ,x)))] [load-int64-reg - (lambda (loreg hireg) - (lambda (lo hi) - (%seq - (set! ,loreg ,lo) - (set! ,hireg ,hi))))] + (lambda (loreg hireg) + (lambda (lo hi) + (%seq + (set! ,loreg ,lo) + (set! ,hireg ,hi))))] + [load-int-indirect-reg + (lambda (ireg from-offset size) + (lambda (x) + (case size + [(3) + (let ([tmp %lr]) ; ok to use %lr here? + (%seq + (set! ,ireg (inline ,(make-info-load 'integer-16 #f) ,%load ,x ,%zero (immediate ,from-offset))) + (set! ,tmp (inline ,(make-info-load 'integer-8 #f) ,%load ,x ,%zero (immediate ,(fx+ from-offset 2)))) + (set! ,tmp ,(%inline sll ,tmp (immediate 16))) + (set! ,ireg ,(%inline + ,ireg ,tmp))))] + [else + `(set! ,ireg ,(case size + [(1) `(inline ,(make-info-load 'integer-8 #f) ,%load ,x ,%zero (immediate ,from-offset))] + [(2) `(inline ,(make-info-load 'integer-16 #f) ,%load ,x ,%zero (immediate ,from-offset))] + [(4) (%mref ,x ,from-offset)]))])))] + [load-int64-indirect-reg + (lambda (loreg hireg from-offset) + (lambda (x) + (%seq + (set! ,loreg ,(%mref ,x ,from-offset)) + (set! ,hireg ,(%mref ,x ,(fx+ from-offset 4))))))] [do-args (lambda (types) ; sgl* is always of even-length, i.e., has a sgl/dbl reg first @@ -2369,23 +2469,99 @@ (if (null? sgl*) (let ([isp (align 8 isp)]) (loop (cdr types) - (cons (load-double-stack isp) locs) - live* int* '() #f (fx+ isp 8))) + (cons (load-double-stack isp) locs) + live* int* '() #f (fx+ isp 8))) (loop (cdr types) - (cons (load-double-reg (car sgl*)) locs) - live* int* (cddr sgl*) bsgl isp))] + (cons (load-double-reg (car sgl*) (constant flonum-data-disp)) locs) + live* int* (cddr sgl*) bsgl isp))] [(fp-single-float) (if bsgl (loop (cdr types) - (cons (load-single-reg bsgl) locs) - live* int* sgl* #f isp) + (cons (load-single-reg bsgl (constant flonum-data-disp) #f) locs) + live* int* sgl* #f isp) (if (null? sgl*) (loop (cdr types) - (cons (load-single-stack isp) locs) - live* int* '() #f (fx+ isp 4)) + (cons (load-single-stack isp) locs) + live* int* '() #f (fx+ isp 4)) (loop (cdr types) - (cons (load-single-reg (car sgl*)) locs) - live* int* (cddr sgl*) (cadr sgl*) isp)))] + (cons (load-single-reg (car sgl*) (constant flonum-data-disp) #f) locs) + live* int* (cddr sgl*) (cadr sgl*) isp)))] + [(fp-ftd& ,ftd) + (let ([size ($ftd-size ftd)] + [members ($ftd->members ftd)] + [combine-loc (lambda (loc f) + (if loc + (lambda (x) (%seq ,(loc x) ,(f x))) + f))]) + (case ($ftd-alignment ftd) + [(8) + (let* ([int* (if (even? (length int*)) int* (cdr int*))] + [num-members (length members)] + [doubles? (and (fx<= num-members 4) + (andmap double-member? members))]) + ;; Sequence of up to 4 doubles that fits in registers? + (cond + [(and doubles? + (fx>= (length sgl*) (fx* 2 num-members))) + ;; Allocate each double to a register + (let dbl-loop ([size size] [offset 0] [sgl* sgl*] [loc #f]) + (cond + [(fx= size 0) + (loop (cdr types) (cons loc locs) live* int* sgl* #f isp)] + [else + (dbl-loop (fx- size 8) (fx+ offset 8) (cddr sgl*) + (combine-loc loc (load-double-reg (car sgl*) offset)))]))] + [else + ;; General case; for non-doubles, use integer registers while available, + ;; possibly splitting between registers and stack + (let obj-loop ([size size] [offset 0] [loc #f] + [live* live*] [int* int*] [isp isp]) + (cond + [(fx= size 0) + (loop (cdr types) (cons loc locs) live* int* sgl* bsgl isp)] + [else + (if (or (null? int*) doubles?) + (let ([isp (align 8 isp)]) + (obj-loop (fx- size 8) (fx+ offset 8) + (combine-loc loc (load-int64-indirect-stack isp offset)) + live* int* (fx+ isp 8))) + (obj-loop (fx- size 8) (fx+ offset 8) + (combine-loc loc (load-int64-indirect-reg (car int*) (cadr int*) offset)) + (cons* (car int*) (cadr int*) live*) (cddr int*) isp))]))]))] + [else + (let* ([num-members (length members)] + [floats? (and (fx<= num-members 4) + (andmap float-member? members))]) + ;; Sequence of up to 4 floats that fits in registers? + (cond + [(and floats? + (fx>= (fx+ (length sgl*) (if bsgl 1 0)) num-members)) + ;; Allocate each float to register + (let flt-loop ([size size] [offset 0] [sgl* sgl*] [bsgl bsgl] [loc #f]) + (cond + [(fx= size 0) + (loop (cdr types) (cons loc locs) live* int* sgl* bsgl isp)] + [else + (flt-loop (fx- size 4) (fx+ offset 4) + (if bsgl sgl* (cddr sgl*)) + (if bsgl #f (cadr sgl*)) + (combine-loc loc (load-single-reg (or bsgl (car sgl*)) offset #t)))]))] + [else + ;; General case; use integer registers while available, + ;; possibly splitting between registers and stack + (let obj-loop ([size size] [offset 0] [loc #f] + [live* live*] [int* int*] [isp isp]) + (cond + [(fx<= size 0) + (loop (cdr types) (cons loc locs) live* int* sgl* bsgl isp)] + [else + (if (or (null? int*) floats?) + (obj-loop (fx- size 4) (fx+ offset 4) + (combine-loc loc (load-int-indirect-stack isp offset (fxmin size 4))) + live* int* (fx+ isp 4)) + (obj-loop (fx- size 4) (fx+ offset 4) + (combine-loc loc (load-int-indirect-reg (car int*) offset (fxmin size 4))) + (cons (car int*) live*) (cdr int*) isp))]))]))]))] [else (if (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] @@ -2395,66 +2571,120 @@ (if (null? int*) (let ([isp (align 8 isp)]) (loop (cdr types) - (cons (load-int64-stack isp) locs) - live* '() sgl* bsgl (fx+ isp 8))) + (cons (load-int64-stack isp) locs) + live* '() sgl* bsgl (fx+ isp 8))) (loop (cdr types) - (cons (load-int64-reg (car int*) (cadr int*)) locs) - (cons* (car int*) (cadr int*) live*) (cddr int*) sgl* bsgl isp))) + (cons (load-int64-reg (car int*) (cadr int*)) locs) + (cons* (car int*) (cadr int*) live*) (cddr int*) sgl* bsgl isp))) (if (null? int*) (loop (cdr types) - (cons (load-int-stack isp) locs) - live* '() sgl* bsgl (fx+ isp 4)) + (cons (load-int-stack isp) locs) + live* '() sgl* bsgl (fx+ isp 4)) (loop (cdr types) - (cons (load-int-reg (car int*)) locs) - (cons (car int*) live*) (cdr int*) sgl* bsgl isp)))]))))]) + (cons (load-int-reg (car int*)) locs) + (cons (car int*) live*) (cdr int*) sgl* bsgl isp)))]))))] + [add-fill-result + (lambda (fill-result-here? result-type args-frame-size e) + (cond + [fill-result-here? + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + (let* ([members ($ftd->members ftd)] + [num-members (length members)] + ;; result pointer is stashed on the stack after all arguments: + [dest-x %r2] + [init-dest-e `(seq ,e (set! ,dest-x ,(%mref ,%sp ,args-frame-size)))]) + (cond + [(and (fx<= num-members 4) + (or (andmap double-member? members) + (andmap float-member? members))) + ;; double/float results are in floating-point registers + (let ([double? (and (pair? members) (double-member? (car members)))]) + (let loop ([members members] [sgl* (sgl-regs)] [offset 0] [e init-dest-e]) + (cond + [(null? members) e] + [else + (loop (cdr members) + (if double? (cddr sgl*) (cdr sgl*)) + (fx+ offset (if double? 8 4)) + `(seq + ,e + (inline ,(make-info-loadfl (car sgl*)) ,(if double? %store-double %store-single) + ,dest-x ,%zero (immediate ,offset))))])))] + [else + ;; result is in %Cretval and maybe %r1 + `(seq + ,init-dest-e + ,(case ($ftd-size ftd) + [(1) `(inline ,(make-info-load 'integer-8 #f) ,%store ,dest-x ,%zero (immediate 0) ,%Cretval)] + [(2) `(inline ,(make-info-load 'integer-16 #f) ,%store ,dest-x ,%zero (immediate 0) ,%Cretval)] + [(3) (%seq + (inline ,(make-info-load 'integer-16 #f) ,%store ,dest-x ,%zero (immediate 0) ,%Cretval) + (set! ,%Cretval ,(%inline srl ,%Cretval (immediate 16))) + (inline ,(make-info-load 'integer-8 #f) ,%store ,dest-x ,%zero (immediate 2) ,%Cretval))] + [(4) `(set! ,(%mref ,dest-x ,0) ,%Cretval)] + [(8) `(seq + (set! ,(%mref ,dest-x ,0) ,%Cretval) + (set! ,(%mref ,dest-x ,4) ,%r1))]))]))])] + [else e]))]) (lambda (info) (safe-assert (reg-callee-save? %tc)) ; no need to save-restore - (let ([arg-type* (info-foreign-arg-type* info)] - [result-type (info-foreign-result-type info)]) - (with-values (do-args arg-type*) - (lambda (frame-size locs live*) - (let* ([frame-size (align 8 frame-size)] + (let* ([arg-type* (info-foreign-arg-type* info)] + [result-type (info-foreign-result-type info)] + [fill-result-here? (indirect-result-that-fits-in-registers? result-type)]) + (with-values (do-args (if fill-result-here? (cdr arg-type*) arg-type*)) + (lambda (args-frame-size locs live*) + (let* ([frame-size (align 8 (+ args-frame-size + (if fill-result-here? + 4 + 0)))] [adjust-frame (lambda (op) (lambda () (if (fx= frame-size 0) `(nop) `(set! ,%sp (inline ,null-info ,op ,%sp (immediate ,frame-size))))))]) (values - (adjust-frame %-) - (reverse locs) - (lambda (t0) - `(inline ,(make-info-kill*-live* (reg-list %r0) live*) ,%c-call ,t0)) - (nanopass-case (Ltype Type) result-type - [(fp-double-float) - (lambda (lvalue) - `(inline ,(make-info-loadfl %Cfpretval) ,%store-double ,lvalue ,%zero - ,(%constant flonum-data-disp)))] - [(fp-single-float) - (lambda (lvalue) - `(inline ,(make-info-loadfl %Cfpretval) ,%store-single->double ,lvalue ,%zero - ,(%constant flonum-data-disp)))] - [(fp-integer ,bits) - (case bits - [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline sext8 ,%r0)))] - [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline sext16 ,%r0)))] - [(32) (lambda (lvalue) `(set! ,lvalue ,%r0))] - [(64) (lambda (lvlow lvhigh) - `(seq - (set! ,lvhigh ,%r1) - (set! ,lvlow ,%r0)))] - [else (sorry! who "unexpected asm-foreign-procedures fp-integer size ~s" bits)])] - [(fp-unsigned ,bits) - (case bits - [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline zext8 ,%r0)))] - [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline zext16 ,%r0)))] - [(32) (lambda (lvalue) `(set! ,lvalue ,%r0))] - [(64) (lambda (lvlow lvhigh) - `(seq - (set! ,lvhigh ,%r1) - (set! ,lvlow ,%r0)))] - [else (sorry! who "unexpected asm-foreign-procedures fp-unsigned size ~s" bits)])] - [else (lambda (lvalue) `(set! ,lvalue ,%r0))]) - (adjust-frame %+))) + (adjust-frame %-) + (let ([locs (reverse locs)]) + (cond + [fill-result-here? + ;; stash extra argument on the stack to be retrieved after call and filled with the result: + (cons (load-int-stack args-frame-size) locs)] + [else locs])) + (lambda (t0) + (add-fill-result fill-result-here? result-type args-frame-size + `(inline ,(make-info-kill*-live* (reg-list %r0) live*) ,%c-call ,t0))) + (nanopass-case (Ltype Type) result-type + [(fp-double-float) + (lambda (lvalue) + `(inline ,(make-info-loadfl %Cfpretval) ,%store-double ,lvalue ,%zero + ,(%constant flonum-data-disp)))] + [(fp-single-float) + (lambda (lvalue) + `(inline ,(make-info-loadfl %Cfpretval) ,%store-single->double ,lvalue ,%zero + ,(%constant flonum-data-disp)))] + [(fp-integer ,bits) + (case bits + [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline sext8 ,%r0)))] + [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline sext16 ,%r0)))] + [(32) (lambda (lvalue) `(set! ,lvalue ,%r0))] + [(64) (lambda (lvlow lvhigh) + `(seq + (set! ,lvhigh ,%r1) + (set! ,lvlow ,%r0)))] + [else (sorry! who "unexpected asm-foreign-procedures fp-integer size ~s" bits)])] + [(fp-unsigned ,bits) + (case bits + [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline zext8 ,%r0)))] + [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline zext16 ,%r0)))] + [(32) (lambda (lvalue) `(set! ,lvalue ,%r0))] + [(64) (lambda (lvlow lvhigh) + `(seq + (set! ,lvhigh ,%r1) + (set! ,lvlow ,%r0)))] + [else (sorry! who "unexpected asm-foreign-procedures fp-unsigned size ~s" bits)])] + [else (lambda (lvalue) `(set! ,lvalue ,%r0))]) + (adjust-frame %+))) ))))))) (define-who asm-foreign-callable @@ -2463,23 +2693,31 @@ +---------------------------+ | | | incoming stack args | - sp+36+X+Y+Z: | | - +---------------------------+<- 8-byte boundary - | | - | saved float reg args | 0-16 words - sp+36+X+Y: | | + sp+52+R+X+Y+Z+W: | | +---------------------------+<- 8-byte boundary - | | + | | | saved int reg args | 0-4 words - sp+36+X: | | + sp+52+R+X+Y+Z: | | +---------------------------+ - | | + | | + | pad word if necessary | 0-1 words + sp+52+R+X+Y: | | + +---------------------------+<- 8-byte boundary + | | + | saved float reg args | 0-16 words + sp+52+R+X: | | + +---------------------------+<- 8-byte boundary + | | + | &-return space | up to 8 words + sp+52+R: | | + +---------------------------+<- 8-byte boundary + | | | pad word if necessary | 0-1 words - sp+36: | | + sp+52: | | +---------------------------+ | | - | callee-save regs + lr | 9 words - sp+0: | | + | callee-save regs + lr | 13 words + sp+0: | callee-save fpregs | +---------------------------+<- 8-byte boundary X = 0 or 4 (depending on whether pad is present) @@ -2523,10 +2761,14 @@ (%seq (set! ,lolvalue ,(%mref ,%sp ,offset)) (set! ,hilvalue ,(%mref ,%sp ,(fx+ offset 4))))))) + (define load-stack-address + (lambda (offset) + (lambda (lvalue) + `(set! ,lvalue ,(%inline + ,%sp (immediate ,offset)))))) (define count-reg-args - (lambda (types) + (lambda (types synthesize-first?) ; bsgl? is #t iff we have a "b" single (second half of double) float reg to fill - (let f ([types types] [iint 0] [idbl 0] [bsgl? #f]) + (let f ([types types] [iint (if synthesize-first? -1 0)] [idbl 0] [bsgl? #f]) (if (null? types) (values iint idbl) (nanopass-case (Ltype Type) (car types) @@ -2540,6 +2782,34 @@ (if (fx< idbl 8) (f (cdr types) iint (fx+ idbl 1) #t) (f (cdr types) iint idbl #f)))] + [(fp-ftd& ,ftd) + (let* ([size ($ftd-size ftd)] + [members ($ftd->members ftd)] + [num-members (length members)]) + (cond + [(and (fx<= num-members 4) + (andmap double-member? members)) + ;; doubles are either in registers or all on stack + (if (fx<= (fx+ idbl num-members) 8) + (f (cdr types) iint (fx+ idbl num-members) #f) + ;; no more floating-point registers should be used, but ok if we count more + (f (cdr types) iint idbl #f))] + [(and (fx<= num-members 4) + (andmap float-member? members)) + ;; floats are either in registers or all on stack + (let ([amt (fxsrl (align 2 (fx- num-members (if bsgl? 1 0))) 1)]) + (if (fx<= (fx+ idbl amt) 8) + (let ([odd-floats? (fxodd? num-members)]) + (if bsgl? + (f (cdr types) iint (+ idbl amt) (not odd-floats?)) + (f (cdr types) iint (+ idbl amt) odd-floats?))) + ;; no more floating-point registers should be used, but ok if we count more + (f (cdr types) iint idbl #f)))] + [(fx= 8 ($ftd-alignment ftd)) + (f (cdr types) (fxmin 4 (fx+ (align 2 iint) (fxsrl size 2))) idbl bsgl?)] + [else + (let ([size (align 4 size)]) + (f (cdr types) (fxmin 4 (fx+ iint (fxsrl size 2))) idbl bsgl?))]))] [else (if (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] @@ -2551,12 +2821,16 @@ (define do-stack ; all of the args are on the stack at this point, though not contiguous since ; we push all of the int reg args with one push instruction and all of the - ; float reg args with another (v)push instruction - (lambda (types saved-reg-bytes pad-bytes int-reg-bytes float-reg-bytes) - (let* ([int-reg-offset (fx+ saved-reg-bytes pad-bytes)] - [float-reg-offset (fx+ int-reg-offset int-reg-bytes)] - [stack-arg-offset (fx+ float-reg-offset float-reg-bytes)]) - (let loop ([types types] + ; float reg args with another (v)push instruction; the saved int regs + ; continue on into the stack variables, which is convenient when a struct + ; argument is split across registers and the stack + (lambda (types saved-reg-bytes pre-pad-bytes return-bytes float-reg-bytes post-pad-bytes int-reg-bytes + synthesize-first?) + (let* ([return-space-offset (fx+ saved-reg-bytes pre-pad-bytes)] + [float-reg-offset (fx+ return-space-offset return-bytes)] + [int-reg-offset (fx+ float-reg-offset float-reg-bytes post-pad-bytes)] + [stack-arg-offset (fx+ int-reg-offset int-reg-bytes)]) + (let loop ([types (if synthesize-first? (cdr types) types)] [locs '()] [iint 0] [idbl 0] @@ -2565,22 +2839,26 @@ [float-reg-offset float-reg-offset] [stack-arg-offset stack-arg-offset]) (if (null? types) - (reverse locs) + (let ([locs (reverse locs)]) + (if synthesize-first? + (cons (load-stack-address return-space-offset) + locs) + locs)) (nanopass-case (Ltype Type) (car types) [(fp-double-float) (if (< idbl 8) (loop (cdr types) - (cons (load-double-stack float-reg-offset) locs) - iint (fx+ idbl 1) bsgl-offset int-reg-offset (fx+ float-reg-offset 8) stack-arg-offset) + (cons (load-double-stack float-reg-offset) locs) + iint (fx+ idbl 1) bsgl-offset int-reg-offset (fx+ float-reg-offset 8) stack-arg-offset) (let ([stack-arg-offset (align 8 stack-arg-offset)]) (loop (cdr types) - (cons (load-double-stack stack-arg-offset) locs) - iint 8 #f int-reg-offset float-reg-offset (fx+ stack-arg-offset 8))))] + (cons (load-double-stack stack-arg-offset) locs) + iint 8 #f int-reg-offset float-reg-offset (fx+ stack-arg-offset 8))))] [(fp-single-float) (if bsgl-offset (loop (cdr types) - (cons (load-single-stack bsgl-offset) locs) - iint idbl #f int-reg-offset float-reg-offset stack-arg-offset) + (cons (load-single-stack bsgl-offset) locs) + iint idbl #f int-reg-offset float-reg-offset stack-arg-offset) (if (< idbl 8) (loop (cdr types) ; with big-endian ARM might need to adjust offset +/- 4 since pair of @@ -2590,12 +2868,73 @@ (loop (cdr types) (cons (load-single-stack stack-arg-offset) locs) iint 8 #f int-reg-offset float-reg-offset (fx+ stack-arg-offset 4))))] + [(fp-ftd& ,ftd) + (let* ([size ($ftd-size ftd)] + [members ($ftd->members ftd)] + [num-members (length members)]) + (cond + [(and (fx<= num-members 4) + (andmap double-member? members)) + ;; doubles are either in registers or all on stack + (if (fx<= (fx+ idbl num-members) 8) + (loop (cdr types) + (cons (load-stack-address float-reg-offset) locs) + iint (fx+ idbl num-members) #f int-reg-offset (fx+ float-reg-offset size) stack-arg-offset) + (let ([stack-arg-offset (align 8 stack-arg-offset)]) + (loop (cdr types) + (cons (load-stack-address stack-arg-offset) locs) + iint 8 #f int-reg-offset #f (fx+ stack-arg-offset size))))] + [(and (fx<= num-members 4) + (andmap float-member? members)) + ;; floats are either in registers or all on stack + (let ([amt (fxsrl (align 2 (fx- num-members (if bsgl-offset 1 0))) 1)]) + (if (fx<= (fx+ idbl amt) 8) + (let ([odd-floats? (fxodd? num-members)]) + (if bsgl-offset + (let ([dbl-size (align 8 (fx- size 4))]) + (loop (cdr types) + (cons (load-stack-address bsgl-offset) locs) + iint (fx+ idbl amt) (if odd-floats? #f (+ bsgl-offset size)) int-reg-offset + (fx+ float-reg-offset dbl-size) stack-arg-offset)) + (let ([dbl-size (align 8 size)]) + (loop (cdr types) + (cons (load-stack-address float-reg-offset) locs) + iint (fx+ idbl amt) (and odd-floats? (fx+ float-reg-offset size)) int-reg-offset + (fx+ float-reg-offset dbl-size) stack-arg-offset)))) + (loop (cdr types) + (cons (load-stack-address stack-arg-offset) locs) + iint 8 #f int-reg-offset float-reg-offset (fx+ stack-arg-offset size))))] + [(fx= 8 ($ftd-alignment ftd)) + (let ([int-reg-offset (if (fxeven? iint) int-reg-offset (fx+ int-reg-offset 4))] + [iint (align 2 iint)] + [amt (fxsrl size 2)]) + (if (fx< iint 4) ; argument starts in registers, may continue on stack + (loop (cdr types) + (cons (load-stack-address int-reg-offset) locs) + (fxmin 4 (fx+ iint amt)) idbl bsgl-offset (fx+ int-reg-offset size) float-reg-offset + (fx+ stack-arg-offset (fxmax 0 (fx* 4 (fx- (fx+ iint amt) 4))))) + (let ([stack-arg-offset (align 8 stack-arg-offset)]) + (loop (cdr types) + (cons (load-stack-address stack-arg-offset) locs) + iint idbl bsgl-offset int-reg-offset float-reg-offset (fx+ stack-arg-offset size)))))] + [else + (let* ([size (align 4 size)] + [amt (fxsrl size 2)]) + (if (fx< iint 4) ; argument starts in registers, may continue on stack + (loop (cdr types) + (cons (load-stack-address int-reg-offset) locs) + (fxmin 4 (fx+ iint amt)) idbl bsgl-offset (fx+ int-reg-offset size) float-reg-offset + (fx+ stack-arg-offset (fxmax 0 (fx* 4 (fx- (fx+ iint amt) 4))))) + (loop (cdr types) + (cons (load-stack-address stack-arg-offset) locs) + iint idbl bsgl-offset int-reg-offset float-reg-offset (fx+ stack-arg-offset size))))]))] [else (if (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] [(fp-unsigned ,bits) (fx= bits 64)] [else #f]) - (let ([iint (align 2 iint)]) + (let ([int-reg-offset (if (fxeven? iint) int-reg-offset (fx+ int-reg-offset 4))] + [iint (align 2 iint)]) (if (fx= iint 4) (let ([stack-arg-offset (align 8 stack-arg-offset)]) (loop (cdr types) @@ -2611,44 +2950,138 @@ (loop (cdr types) (cons (load-int-stack (car types) int-reg-offset) locs) (fx+ iint 1) idbl bsgl-offset (fx+ int-reg-offset 4) float-reg-offset stack-arg-offset)))])))))) + (define do-result + (lambda (result-type synthesize-first? return-stack-offset) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + (let* ([members ($ftd->members ftd)] + [num-members (length members)]) + (cond + [(and (fx<= 1 num-members 4) + (or (andmap double-member? members) + (andmap float-member? members))) + ;; double/float results returned in floating-point registers + (values + (lambda () + (let ([double? (and (pair? members) (double-member? (car members)))]) + (let loop ([members members] [sgl* (sgl-regs)] [offset return-stack-offset] [e #f]) + (cond + [(null? members) e] + [else + (loop (cdr members) + (if double? (cddr sgl*) (cdr sgl*)) + (fx+ offset (if double? 8 4)) + (let ([new-e + `(inline ,(make-info-loadfl (car sgl*)) ,(if double? %load-double %load-single) + ,%sp ,%zero (immediate ,offset))]) + (if e `(seq ,e ,new-e) new-e)))])))) + '() + ($ftd-size ftd))] + [else + (case ($ftd-size ftd) + [(8) + (values (lambda () + `(seq + (set! ,%Cretval ,(%mref ,%sp ,return-stack-offset)) + (set! ,%r1 ,(%mref ,%sp ,(fx+ 4 return-stack-offset))))) + (list %Cretval %r1) + 8)] + [else + (values (lambda () + (case ($ftd-size ftd) + [(1) + (let ([rep (if ($ftd-unsigned? ftd) 'unsigned-8 'integer-8)]) + `(set! ,%Cretval (inline ,(make-info-load rep #f) ,%load ,%sp ,%zero (immediate ,return-stack-offset))))] + [(2) + (let ([rep (if ($ftd-unsigned? ftd) 'unsigned-16 'integer-16)]) + `(set! ,%Cretval (inline ,(make-info-load rep #f) ,%load ,%sp ,%zero (immediate ,return-stack-offset))))] + [else `(set! ,%Cretval ,(%mref ,%sp ,return-stack-offset))])) + (list %Cretval) + 4)])]))] + [(fp-double-float) + (values (lambda (rhs) + `(inline ,(make-info-loadfl %Cfpretval) ,%load-double + ,rhs ,%zero ,(%constant flonum-data-disp))) + '() + 0)] + [(fp-single-float) + (values (lambda (rhs) + `(inline ,(make-info-loadfl %Cfpretval) ,%load-double->single + ,rhs ,%zero ,(%constant flonum-data-disp))) + '() + 0)] + [(fp-void) + (values (lambda () `(nop)) + '() + 0)] + [else + (cond + [(nanopass-case (Ltype Type) result-type + [(fp-integer ,bits) (fx= bits 64)] + [(fp-unsigned ,bits) (fx= bits 64)] + [else #f]) + (values (lambda (lo hi) + `(seq + (set! ,%Cretval ,lo) + (set! ,%r1 ,hi))) + (list %Cretval %r1) + 0)] + [else + (values (lambda (x) + `(set! ,%Cretval ,x)) + (list %Cretval) + 0)])]))) (lambda (info) (define callee-save-regs+lr (list %r4 %r5 %r6 %r7 %r8 %r9 %r10 %r11 %lr)) + (define callee-save-fpregs (list %flreg1 %flreg2)) ; must be consecutive (define isaved (length callee-save-regs+lr)) - (let ([arg-type* (info-foreign-arg-type* info)] - [result-type (info-foreign-result-type info)]) - (let-values ([(iint idbl) (count-reg-args arg-type*)]) - (let ([saved-reg-bytes (fx* isaved 4)] - [pad-bytes (if (fxeven? (fx+ isaved iint)) 0 4)] + (define fpsaved (length callee-save-fpregs)) + (let* ([arg-type* (info-foreign-arg-type* info)] + [result-type (info-foreign-result-type info)] + [synthesize-first? (indirect-result-that-fits-in-registers? result-type)]) + (let-values ([(iint idbl) (count-reg-args arg-type* synthesize-first?)]) + (let ([saved-reg-bytes (fx+ (fx* isaved 4) (fx* fpsaved 8))] + [pre-pad-bytes (if (fxeven? isaved) 0 4)] [int-reg-bytes (fx* iint 4)] + [post-pad-bytes (if (fxeven? iint) 0 4)] [float-reg-bytes (fx* idbl 8)]) - (values - (lambda () - (%seq - ; save argument register values to the stack so we don't lose the values - ; across possible calls to C while setting up the tc and allocating memory - ,(if (fx= idbl 0) `(nop) `(inline ,(make-info-vpush %Cfparg1 idbl) ,%vpush-multiple)) - ,(if (fx= iint 0) `(nop) `(inline ,(make-info-kill*-live* '() (list-head (list %Carg1 %Carg2 %Carg3 %Carg4) iint)) ,%push-multiple)) - ; pad if necessary to force 8-byte boundardy after saving callee-save-regs+lr - ,(if (fx= pad-bytes 0) `(nop) `(set! ,%sp ,(%inline - ,%sp (immediate 4)))) - ; save the callee save registers & return address - (inline ,(make-info-kill*-live* '() callee-save-regs+lr) ,%push-multiple) - ; set up tc for benefit of argument-conversion code, which might allocate - ,(if-feature pthreads - (%seq - (set! ,%r0 ,(%inline get-tc)) - (set! ,%tc ,%r0)) - `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0)))))) - ; list of procedures that marshal arguments from their C stack locations - ; to the Scheme argument locations - (do-stack arg-type* saved-reg-bytes pad-bytes int-reg-bytes float-reg-bytes) - (lambda (fv* Scall->result-type) - (in-context Tail - (%seq - ; restore the callee save registers - (inline ,(make-info-kill* callee-save-regs+lr) ,%pop-multiple) - ; deallocate space for pad & arg reg values - (set! ,%sp ,(%inline + ,%sp (immediate ,(fx+ pad-bytes int-reg-bytes float-reg-bytes)))) - ; tail call the C helper that calls the Scheme procedure - (jump (literal ,(make-info-literal #f 'entry Scall->result-type 0)) - (,callee-save-regs+lr ... ,fv* ...)))))))))))))) + (let-values ([(get-result result-regs return-bytes) (do-result result-type synthesize-first? + (fx+ saved-reg-bytes pre-pad-bytes))]) + (let ([return-bytes (align 8 return-bytes)]) + (values + (lambda () + (%seq + ; save argument register values to the stack so we don't lose the values + ; across possible calls to C while setting up the tc and allocating memory + ,(if (fx= iint 0) `(nop) `(inline ,(make-info-kill*-live* '() (list-head (list %Carg1 %Carg2 %Carg3 %Carg4) iint)) ,%push-multiple)) + ; pad if necessary to force 8-byte boundary, and make room for indirect return: + ,(let ([len (+ post-pad-bytes return-bytes)]) + (if (fx= len 0) `(nop) `(set! ,%sp ,(%inline - ,%sp (immediate ,len))))) + ,(if (fx= idbl 0) `(nop) `(inline ,(make-info-vpush %Cfparg1 idbl) ,%vpush-multiple)) + ; pad if necessary to force 8-byte boundardy after saving callee-save-regs+lr + ,(if (fx= pre-pad-bytes 0) `(nop) `(set! ,%sp ,(%inline - ,%sp (immediate 4)))) + ; save the callee save registers & return address + (inline ,(make-info-kill*-live* '() callee-save-regs+lr) ,%push-multiple) + (inline ,(make-info-vpush (car callee-save-fpregs) fpsaved) ,%vpush-multiple) + ; set up tc for benefit of argument-conversion code, which might allocate + ,(if-feature pthreads + (%seq + (set! ,%r0 ,(%inline get-tc)) + (set! ,%tc ,%r0)) + `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0)))))) + ; list of procedures that marshal arguments from their C stack locations + ; to the Scheme argument locations + (do-stack arg-type* saved-reg-bytes pre-pad-bytes return-bytes float-reg-bytes post-pad-bytes int-reg-bytes + synthesize-first?) + get-result + (lambda () + (in-context Tail + (%seq + ; restore the callee save registers + (inline ,(make-info-vpush (car callee-save-fpregs) fpsaved) ,%vpop-multiple) + (inline ,(make-info-kill* callee-save-regs+lr) ,%pop-multiple) + ; deallocate space for pad & arg reg values + (set! ,%sp ,(%inline + ,%sp (immediate ,(fx+ pre-pad-bytes int-reg-bytes post-pad-bytes float-reg-bytes return-bytes)))) + ; done + (asm-c-return ,null-info ,callee-save-regs+lr ... ,result-regs ...))))))))))))))) ) diff -Nru chezscheme-9.5+dfsg/s/back.ss chezscheme-9.5.4+dfsg/s/back.ss --- chezscheme-9.5+dfsg/s/back.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/back.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"back.ss" ;;; back.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (define-who trace-output-port ($make-thread-parameter (console-output-port) @@ -119,6 +119,16 @@ (lambda (x) (and x #t)))) +(define-who generate-covin-files + ($make-thread-parameter #f + (lambda (x) + (and x #t)))) + +(define $enable-check-prelex-flags + ($make-thread-parameter #f + (lambda (x) + (and x #t)))) + (define-who run-cp0 ($make-thread-parameter (default-run-cp0) @@ -127,7 +137,7 @@ ($oops who "~s is not a procedure" x)) x))) -(define compile-compressed +(define fasl-compressed ($make-thread-parameter #t (lambda (x) (and x #t)))) (define compile-file-message @@ -150,6 +160,42 @@ (unless (procedure? x) ($oops who "~s is not a procedure" x)) x))) +(define-who compress-format + (case-lambda + [() + (let ([x ($tc-field 'compress-format ($tc))]) + (cond + [(eqv? x (constant COMPRESS-GZIP)) 'gzip] + [(eqv? x (constant COMPRESS-LZ4)) 'lz4] + [else ($oops who "unexpected $compress-format value ~s" x)]))] + [(x) + ($tc-field 'compress-format ($tc) + (case x + [(gzip) (constant COMPRESS-GZIP)] + [(lz4) (constant COMPRESS-LZ4)] + [else ($oops who "~s is not a supported format" x)]))])) + +(define-who compress-level + (case-lambda + [() + (let ([x ($tc-field 'compress-level ($tc))]) + (cond + [(eqv? x (constant COMPRESS-MIN)) 'minimum] + [(eqv? x (constant COMPRESS-LOW)) 'low] + [(eqv? x (constant COMPRESS-MEDIUM)) 'medium] + [(eqv? x (constant COMPRESS-HIGH)) 'high] + [(eqv? x (constant COMPRESS-MAX)) 'maximum] + [else ($oops who "unexpected $compress-level value ~s" x)]))] + [(x) + ($tc-field 'compress-level ($tc) + (case x + [(minimum) (constant COMPRESS-MIN)] + [(low) (constant COMPRESS-LOW)] + [(medium) (constant COMPRESS-MEDIUM)] + [(high) (constant COMPRESS-HIGH)] + [(maximum) (constant COMPRESS-MAX)] + [else ($oops who "~s is not a supported level" x)]))])) + (define-who debug-level ($make-thread-parameter 1 @@ -162,3 +208,4 @@ ($make-thread-parameter #t (lambda (x) (and x #t)))) (set! $scheme-version (string->symbol ($format-scheme-version (constant scheme-version)))) +) diff -Nru chezscheme-9.5+dfsg/s/base-lang.ss chezscheme-9.5.4+dfsg/s/base-lang.ss --- chezscheme-9.5+dfsg/s/base-lang.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/base-lang.ss 2020-08-31 02:35:12.000000000 +0000 @@ -155,7 +155,7 @@ (define convention? (lambda (x) - (or (eq? x #f) (symbol? x)))) + (symbol? x))) (define-record-type preinfo (nongenerative #{preinfo e23pkvo5btgapnzomqgegm-2}) @@ -184,7 +184,7 @@ ; language of foreign types (define-language Ltype - (nongenerative-id #{Ltype czp82kxwe75y4e18-0}) + (nongenerative-id #{Ltype czp82kxwe75y4e18-1}) (terminals (exact-integer (bits)) ($ftd (ftd))) @@ -199,7 +199,8 @@ (fp-fixnum) (fp-double-float) (fp-single-float) - (fp-ftd ftd))) + (fp-ftd ftd) + (fp-ftd& ftd))) (define arity? (lambda (x) @@ -210,7 +211,7 @@ ; source language used by the passes leading up to the compiler or interpreter (define-language Lsrc - (nongenerative-id #{Lsrc czsa1fcfzdeh493n-2}) + (nongenerative-id #{Lsrc czsa1fcfzdeh493n-3}) (terminals (preinfo (preinfo)) ($prelex (x)) @@ -247,8 +248,8 @@ (record-ref rtd type index e) (record-set! rtd type index e1 e2) (cte-optimization-loc box e) - (foreign conv name e (arg-type* ...) result-type) - (fcallable conv e (arg-type* ...) result-type) + (foreign (conv* ...) name e (arg-type* ...) result-type) + (fcallable (conv* ...) e (arg-type* ...) result-type) (profile src) => (profile) ; used only in cpvalid (cpvalid-defer e)) diff -Nru chezscheme-9.5+dfsg/s/bytevector.ss chezscheme-9.5.4+dfsg/s/bytevector.ss --- chezscheme-9.5+dfsg/s/bytevector.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/bytevector.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,13 +1,12 @@ -"bytevector.ss" ;;; bytevector.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. -;;; +;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); ;;; you may not use this file except in compliance with the License. ;;; You may obtain a copy of the License at -;;; +;;; ;;; http://www.apache.org/licenses/LICENSE-2.0 -;;; +;;; ;;; Unless required by applicable law or agreed to in writing, software ;;; distributed under the License is distributed on an "AS IS" BASIS, ;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -320,7 +319,7 @@ (little-ref v i))] [else #`(little-ref v i)])] [else (unrecognized-endianness who eness)])))]))) - + (define $bytevector-s16-ref (bytevector-*-ref s 16)) (define $bytevector-u16-ref (bytevector-*-ref u 16)) (define $bytevector-s24-ref (bytevector-*-ref s 24)) @@ -769,7 +768,7 @@ ($oops who "index ~s + count ~s is beyond the end of ~s" i2 k v2)) ; whew! (#3%bytevector-copy! v1 i1 v2 i2 k)))) - + (set-who! bytevector->immutable-bytevector (lambda (v) (cond @@ -829,11 +828,11 @@ (lambda (v i eness) ($bytevector-u24-ref v i eness who))) - (set-who! bytevector-s32-ref + (set-who! bytevector-s32-ref (lambda (v i eness) ($bytevector-s32-ref v i eness who))) - (set-who! bytevector-u32-ref + (set-who! bytevector-u32-ref (lambda (v i eness) ($bytevector-u32-ref v i eness who))) @@ -861,67 +860,67 @@ (lambda (v i eness) ($bytevector-u56-ref v i eness who))) - (set-who! bytevector-s64-ref + (set-who! bytevector-s64-ref (lambda (v i eness) ($bytevector-s64-ref v i eness who))) - (set-who! bytevector-u64-ref + (set-who! bytevector-u64-ref (lambda (v i eness) ($bytevector-u64-ref v i eness who))) - (set-who! bytevector-s16-set! + (set-who! bytevector-s16-set! (lambda (v i k eness) ($bytevector-s16-set! v i k eness who))) - (set-who! bytevector-u16-set! + (set-who! bytevector-u16-set! (lambda (v i k eness) ($bytevector-u16-set! v i k eness who))) - (set-who! bytevector-s24-set! + (set-who! bytevector-s24-set! (lambda (v i k eness) ($bytevector-s24-set! v i k eness who))) - (set-who! bytevector-u24-set! + (set-who! bytevector-u24-set! (lambda (v i k eness) ($bytevector-u24-set! v i k eness who))) - (set-who! bytevector-s32-set! + (set-who! bytevector-s32-set! (lambda (v i k eness) ($bytevector-s32-set! v i k eness who))) - (set-who! bytevector-u32-set! + (set-who! bytevector-u32-set! (lambda (v i k eness) ($bytevector-u32-set! v i k eness who))) - (set-who! bytevector-s40-set! + (set-who! bytevector-s40-set! (lambda (v i k eness) ($bytevector-s40-set! v i k eness who))) - (set-who! bytevector-u40-set! + (set-who! bytevector-u40-set! (lambda (v i k eness) ($bytevector-u40-set! v i k eness who))) - (set-who! bytevector-s48-set! + (set-who! bytevector-s48-set! (lambda (v i k eness) ($bytevector-s48-set! v i k eness who))) - (set-who! bytevector-u48-set! + (set-who! bytevector-u48-set! (lambda (v i k eness) ($bytevector-u48-set! v i k eness who))) - (set-who! bytevector-s56-set! + (set-who! bytevector-s56-set! (lambda (v i k eness) ($bytevector-s56-set! v i k eness who))) - (set-who! bytevector-u56-set! + (set-who! bytevector-u56-set! (lambda (v i k eness) ($bytevector-u56-set! v i k eness who))) - (set-who! bytevector-s64-set! + (set-who! bytevector-s64-set! (lambda (v i k eness) ($bytevector-s64-set! v i k eness who))) - (set-who! bytevector-u64-set! + (set-who! bytevector-u64-set! (lambda (v i k eness) ($bytevector-u64-set! v i k eness who))) @@ -1454,61 +1453,64 @@ ) (let () - ;; Store uncompressed size as u64: + ;; Store uncompressed size as u64, using low bits to indicate compression format: (define uncompressed-length-length (ftype-sizeof integer-64)) ;; Always big-endian, so that compressed data is portable. - ;; It might be useful somehow that valid compressed data always starts - ;; with a 0 byte; otherwise, the expected size would be unrealistically big. (define uncompressed-length-endianness (endianness big)) - (define $bytevector-compress-size - (foreign-procedure "(cs)bytevector_compress_size" (iptr) uptr)) - (define $bytevector-compress - (foreign-procedure "(cs)bytevector_compress" (scheme-object iptr iptr scheme-object iptr iptr) scheme-object)) - (define $bytevector-uncompress - (foreign-procedure "(cs)bytevector_uncompress" (scheme-object iptr iptr scheme-object iptr iptr) scheme-object)) - - (set-who! bytevector-compress - (lambda (bv) - (unless (bytevector? bv) (not-a-bytevector who bv)) - (let* ([dest-max-len ($bytevector-compress-size (bytevector-length bv))] - [dest-alloc-len (min (+ dest-max-len uncompressed-length-length) - ;; In the unlikely event of a non-fixnum requested size... - (constant maximum-bytevector-length))] + (define fp-bytevector-compress-size + (foreign-procedure "(cs)bytevector_compress_size" (iptr int) uptr)) + (define fp-bytevector-compress + (foreign-procedure "(cs)bytevector_compress" (scheme-object iptr iptr scheme-object iptr iptr int) scheme-object)) + (define fp-bytevector-uncompress + (foreign-procedure "(cs)bytevector_uncompress" (scheme-object iptr iptr scheme-object iptr iptr int) scheme-object)) + + (let () + (define (compress who bv fmt offset) + (let* ([dest-max-len (fp-bytevector-compress-size (bytevector-length bv) fmt)] + [dest-alloc-len (min (+ dest-max-len offset) (constant maximum-bytevector-length))] [dest-bv (make-bytevector dest-alloc-len)]) - (let ([r ($bytevector-compress dest-bv - uncompressed-length-length - (fx- dest-alloc-len uncompressed-length-length) - bv - 0 - (bytevector-length bv))]) + (let ([r (fp-bytevector-compress dest-bv offset (fx- dest-alloc-len offset) bv 0 (bytevector-length bv) fmt)]) + (if (string? r) + ($oops who r bv) + (bytevector-truncate! dest-bv (fx+ r offset)))))) + + (set-who! $bytevector-compress + (lambda (bv fmt) + (compress who bv fmt 0))) + + (set-who! bytevector-compress + (lambda (bv) + (unless (bytevector? bv) (not-a-bytevector who bv)) + (let* ([fmt ($tc-field 'compress-format ($tc))] + [dest-bv (compress who bv fmt uncompressed-length-length)]) + (let ([tag (bitwise-ior + (bitwise-arithmetic-shift-left (bytevector-length bv) (constant COMPRESS-FORMAT-BITS)) + fmt)]) + ($bytevector-u64-set! dest-bv 0 tag uncompressed-length-endianness who) + dest-bv))))) + + (let () + (define (uncompress who bv dest-length fmt offset) + (unless (and (fixnum? dest-length) ($fxu< dest-length (constant maximum-bytevector-length))) + ($oops who "bytevector ~s claims invalid uncompressed size ~s" bv dest-length)) + (let ([dest-bv (make-bytevector dest-length)]) + (let ([r (fp-bytevector-uncompress dest-bv 0 dest-length bv offset (fx- (bytevector-length bv) offset) fmt)]) (cond - [(string? r) - ($oops who r bv)] - [else - ($bytevector-u64-set! dest-bv 0 (bytevector-length bv) uncompressed-length-endianness who) - (bytevector-truncate! dest-bv (fx+ r uncompressed-length-length))]))))) - - (set-who! bytevector-uncompress - (lambda (bv) - (unless (bytevector? bv) (not-a-bytevector who bv)) - (unless (>= (bytevector-length bv) uncompressed-length-length) - ($oops who "invalid data in source bytevector ~s" bv)) - (let ([dest-length ($bytevector-u64-ref bv 0 uncompressed-length-endianness who)]) - (unless (and (fixnum? dest-length) - ($fxu< dest-length (constant maximum-bytevector-length))) - ($oops who "bytevector ~s claims invalid uncompressed size ~s" bv dest-length)) - (let* ([dest-bv (make-bytevector dest-length)] - [r ($bytevector-uncompress dest-bv - 0 - dest-length - bv - uncompressed-length-length - (fx- (bytevector-length bv) uncompressed-length-length))]) - (cond - [(string? r) ($oops who r bv)] - [(fx= r dest-length) dest-bv] - [else - ($oops who "uncompressed size ~s for ~s is smaller than expected size ~a" r bv dest-length)])))))) - + [(string? r) ($oops who r bv)] + [(fx= r dest-length) dest-bv] + [else ($oops who "uncompressed size ~s for ~s is smaller than expected size ~s" r bv dest-length)])))) + + (set-who! $bytevector-uncompress + (lambda (bv dest-length fmt) + (uncompress who bv dest-length fmt 0))) + + (set-who! bytevector-uncompress + (lambda (bv) + (unless (bytevector? bv) (not-a-bytevector who bv)) + (unless (>= (bytevector-length bv) uncompressed-length-length) ($oops who "invalid data in source bytevector ~s" bv)) + (let* ([tag ($bytevector-u64-ref bv 0 uncompressed-length-endianness who)] + [fmt (logand tag (fx- (fxsll 1 (constant COMPRESS-FORMAT-BITS)) 1))] + [dest-length (bitwise-arithmetic-shift-right tag (constant COMPRESS-FORMAT-BITS))]) + (uncompress who bv dest-length fmt uncompressed-length-length)))))) ) diff -Nru chezscheme-9.5+dfsg/s/cafe.ss chezscheme-9.5.4+dfsg/s/cafe.ss --- chezscheme-9.5+dfsg/s/cafe.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cafe.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"cafe.ss" ;;; cafe.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (define default-prompt-and-read (lambda (n) (unless (and (integer? n) (>= n 0)) @@ -214,3 +214,4 @@ (lambda () (waiter ($cafe) eval))))))))])))) ) +) diff -Nru chezscheme-9.5+dfsg/s/cback.ss chezscheme-9.5.4+dfsg/s/cback.ss --- chezscheme-9.5+dfsg/s/cback.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cback.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"cback.ss" ;;; cback.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,5 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (current-eval compile) (define $compiler-is-loaded? #t) +) diff -Nru chezscheme-9.5+dfsg/s/cmacros.ss chezscheme-9.5.4+dfsg/s/cmacros.ss --- chezscheme-9.5+dfsg/s/cmacros.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cmacros.ss 2020-08-31 02:35:12.000000000 +0000 @@ -328,7 +328,7 @@ [(_ foo e1 e2) e1] ... [(_ bar e1 e2) e2]))))]))) -(define-constant scheme-version #x00090500) +(define-constant scheme-version #x00090504) (define-syntax define-machine-types (lambda (x) @@ -434,7 +434,7 @@ (define-constant fasl-type-gensym 19) (define-constant fasl-type-exactnum 20) ; 21 -(define-constant fasl-type-fasl-size 22) +; 22 (define-constant fasl-type-record 23) (define-constant fasl-type-rtd 24) (define-constant fasl-type-small-integer 25) @@ -445,15 +445,20 @@ (define-constant fasl-type-weak-pair 30) (define-constant fasl-type-eq-hashtable 31) (define-constant fasl-type-symbol-hashtable 32) -(define-constant fasl-type-group 33) +; 33 (define-constant fasl-type-visit 34) (define-constant fasl-type-revisit 35) +(define-constant fasl-type-visit-revisit 36) -(define-constant fasl-type-immutable-vector 36) -(define-constant fasl-type-immutable-string 37) -(define-constant fasl-type-immutable-fxvector 38) -(define-constant fasl-type-immutable-bytevector 39) -(define-constant fasl-type-immutable-box 40) +(define-constant fasl-type-immutable-vector 37) +(define-constant fasl-type-immutable-string 38) +(define-constant fasl-type-immutable-fxvector 39) +(define-constant fasl-type-immutable-bytevector 40) +(define-constant fasl-type-immutable-box 41) + +(define-constant fasl-type-uncompressed 42) +(define-constant fasl-type-gzip 43) +(define-constant fasl-type-lz4 44) (define-constant fasl-fld-ptr 0) (define-constant fasl-fld-u8 1) @@ -531,6 +536,16 @@ (define-constant SEOF -1) +(define-constant COMPRESS-GZIP 0) +(define-constant COMPRESS-LZ4 1) +(define-constant COMPRESS-FORMAT-BITS 3) + +(define-constant COMPRESS-MIN 0) +(define-constant COMPRESS-LOW 1) +(define-constant COMPRESS-MEDIUM 2) +(define-constant COMPRESS-HIGH 3) +(define-constant COMPRESS-MAX 4) + (define-constant SICONV-DUNNO 0) (define-constant SICONV-INVALID 1) (define-constant SICONV-INCOMPLETE 2) @@ -586,10 +601,6 @@ (define-constant ERROR_VALUES 7) (define-constant ERROR_MVLET 8) -;;; object-file tags -(define-constant visit-tag 0) -(define-constant revisit-tag 1) - ;;; allocation spaces (define-constant space-locked #x20) ; lock flag (define-constant space-old #x40) ; oldspace flag @@ -695,17 +706,18 @@ ;;; note: for type-char, leave at least fixnum-offset zeros at top of ;;; type byte to simplify char->integer conversion -(define-constant type-boolean #b00000110) -(define-constant ptr sfalse #b00000110) -(define-constant ptr strue #b00001110) -(define-constant type-char #b00010110) -(define-constant ptr sunbound #b00011110) -(define-constant ptr snil #b00100110) -(define-constant ptr forward-marker #b00101110) -(define-constant ptr seof #b00110110) -(define-constant ptr svoid #b00111110) -(define-constant ptr black-hole #b01000110) -(define-constant ptr sbwp #b01001110) +(define-constant type-boolean #b00000110) +(define-constant ptr sfalse #b00000110) +(define-constant ptr strue #b00001110) +(define-constant type-char #b00010110) +(define-constant ptr sunbound #b00011110) +(define-constant ptr snil #b00100110) +(define-constant ptr forward-marker #b00101110) +(define-constant ptr seof #b00110110) +(define-constant ptr svoid #b00111110) +(define-constant ptr black-hole #b01000110) +(define-constant ptr sbwp #b01001110) +(define-constant ptr ftype-guardian-rep #b01010110) ;;; on 32-bit machines, vectors get two primary tag bits, including ;;; one for the immutable flag, and so do bytevectors, so their maximum @@ -749,6 +761,8 @@ (define-constant code-flag-system #b0001) (define-constant code-flag-continuation #b0010) +(define-constant code-flag-template #b0100) +(define-constant code-flag-guardian #b1000) (define-constant fixnum-bits (case (constant ptr-bits) @@ -835,6 +849,10 @@ (fxlogor (constant type-code) (fxsll (constant code-flag-continuation) (constant code-flags-offset)))) +(define-constant type-guardian-code + (fxlogor (constant type-code) + (fxsll (constant code-flag-guardian) + (constant code-flags-offset)))) ;; type checks are generally performed by applying the mask to the object ;; then comparing against the type code. a mask equal to @@ -910,6 +928,9 @@ (define-constant mask-continuation-code (fxlogor (fxsll (constant code-flag-continuation) (constant code-flags-offset)) (fx- (fxsll 1 (constant code-flags-offset)) 1))) +(define-constant mask-guardian-code + (fxlogor (fxsll (constant code-flag-guardian) (constant code-flags-offset)) + (fx- (fxsll 1 (constant code-flags-offset)) 1))) (define-constant mask-thread (constant byte-constant-mask)) (define-constant mask-tlc (constant byte-constant-mask)) @@ -1344,6 +1365,7 @@ [ptr timer-ticks] [ptr disable-count] [ptr signal-interrupt-pending] + [ptr signal-interrupt-queue] [ptr keyboard-interrupt-pending] [ptr threadno] [ptr current-input] @@ -1362,13 +1384,21 @@ [ptr meta-level] [ptr compile-profile] [ptr generate-inspector-information] + [ptr generate-procedure-source-information] [ptr generate-profile-forms] [ptr optimize-level] [ptr subset-mode] [ptr suppress-primitive-inlining] + [ptr default-record-equal-procedure] + [ptr default-record-hash-procedure] + [ptr compress-format] + [ptr compress-level] + [void* lz4-out-buffer] [U64 instr-counter] [U64 alloc-counter] - [ptr parameters])) + [ptr parameters] + [ptr DSTBV] + [ptr SRCBV])) (define tc-field-list (let f ([ls (oblist)] [params '()]) @@ -1385,6 +1415,10 @@ (cons (string->symbol (substring str 3 (- n 5))) params) params)))))) +(define-constant unactivate-mode-noop 0) +(define-constant unactivate-mode-deactivate 1) +(define-constant unactivate-mode-destroy 2) + (define-primitive-structure-disps rtd-counts type-typed-object ([iptr type] [U64 timestamp] @@ -1471,8 +1505,9 @@ (with-syntax ([type (datum->syntax #'* (filter-scheme-type 'string-char))]) #''type))) -(define-constant annotation-debug 1) -(define-constant annotation-profile 2) +(define-constant annotation-debug #b0001) +(define-constant annotation-profile #b0010) +(define-constant annotation-all #b0011) (eval-when (compile load eval) (define flag->mask @@ -2334,6 +2369,7 @@ (cdr #f 1 #t #t) (unbox #f 1 #t #t) (set-box! #f 2 #t #t) + (box-cas! #f 3 #t #t) (= #f 2 #f #t) (< #f 2 #f #t) (> #f 2 #f #t) @@ -2417,6 +2453,7 @@ (map2 #f 3 #f #t) (for-each1 #f 2 #f #t) (vector-ref #f 2 #t #t) + (vector-cas! #f 4 #t #t) (vector-set! #f 3 #t #t) (vector-length #f 1 #t #t) (string-ref #f 2 #t #t) @@ -2622,6 +2659,9 @@ split-and-resize raw-collect-cond raw-tc-mutex + activate-thread + deactivate-thread + unactivate-thread handle-values-error handle-mvlet-error handle-arg-error @@ -2631,16 +2671,7 @@ scan-remembered-set instantiate-code-object Sreturn - Scall->ptr - Scall->fptr - Scall->bytevector - Scall->fixnum - Scall->int32 - Scall->uns32 - Scall->double - Scall->single - Scall->int64 - Scall->uns64 - Scall->void + Scall-one-result + Scall-any-results )) ) diff -Nru chezscheme-9.5+dfsg/s/compile.ss chezscheme-9.5.4+dfsg/s/compile.ss --- chezscheme-9.5+dfsg/s/compile.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/compile.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"compile.ss" ;;; compile.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -16,15 +15,9 @@ ;;; use fixnum arithmetic in code building & output routines -(define compile) -(define $compile-backend) -(define compile-file) -(define $c-make-code) -(define make-boot-header) -(define make-boot-file) - (let () (import (nanopass)) +(include "types.ss") (include "base-lang.ss") (include "expand-lang.ss") @@ -231,171 +224,46 @@ (lambda (x t a?) (let build ([x x]) (record-case x - [(object) (x) ($fasl-enter x t a?)] - [(closure) func - ($fasl-bld-graph x t a? - (lambda (x t a?) - (build ($c-func-code-record func))))] - [(code) stuff - ($fasl-bld-graph x t a? - (lambda (x t a?) - (record-case x - [(code) (func subtype free name arity-mask size code-list info pinfo*) - ($fasl-enter name t a?) - ($fasl-enter arity-mask t a?) - ($fasl-enter info t a?) - ($fasl-enter pinfo* t a?) - (for-each - (lambda (x) - (record-case x - [(abs) (n x) (build x)] - [else - (constant-case architecture - [(x86) - (record-case x - [(rel) (n x) (build x)] - [else (void)])] - [(x86_64) - (record-case x - [(x86_64-jump x86_64-call) (n x) (build x)] - [else (void)])] - [(arm32) - (record-case x - [(arm32-abs arm32-call arm32-jump) (n x) (build x)] - [else (void)])] - [(ppc32) - (record-case x - [(ppc32-abs ppc32-call ppc32-jump) (n x) (build x)] - [else (void)])])])) - code-list)])))] - [(group) elt* (for-each build elt*)] - [(revisit-stuff) elt (build elt)] - [(visit-stuff) elt (build elt)])))) + [(object) (x) ($fasl-enter x t a?)] + [(closure) func + ($fasl-bld-graph x t a? + (lambda (x t a?) + (build ($c-func-code-record func))))] + [(code) stuff + ($fasl-bld-graph x t a? + (lambda (x t a?) + (record-case x + [(code) (func subtype free name arity-mask size code-list info pinfo*) + ($fasl-enter name t a?) + ($fasl-enter arity-mask t a?) + ($fasl-enter info t a?) + ($fasl-enter pinfo* t a?) + (for-each + (lambda (x) + (record-case x + [(abs) (n x) (build x)] + [else + (constant-case architecture + [(x86) + (record-case x + [(rel) (n x) (build x)] + [else (void)])] + [(x86_64) + (record-case x + [(x86_64-jump x86_64-call) (n x) (build x)] + [else (void)])] + [(arm32) + (record-case x + [(arm32-abs arm32-call arm32-jump) (n x) (build x)] + [else (void)])] + [(ppc32) + (record-case x + [(ppc32-abs ppc32-call ppc32-jump) (n x) (build x)] + [else (void)])])])) + code-list)])))])))) (include "fasl-helpers.ss") -(define (c-faslcode x p t a?) - (record-case x - [(code) (func subtype free name arity-mask size code-list info pinfo*) - (put-u8 p (constant fasl-type-code)) - (put-u8 p subtype) - (put-uptr p free) - (put-uptr p size) - ($fasl-out name p t a?) - ($fasl-out arity-mask p t a?) - ($fasl-out info p t a?) - ($fasl-out pinfo* p t a?) - (let prf0 ([c* code-list] - [a (constant code-data-disp)] - [r* '()] - [ra 0] - [x* '()]) - (if (null? c*) - (begin - (let ([actual-size (- a (constant code-data-disp))]) - (unless (= actual-size size) - ($oops 'c-faslcode - "wrote ~s bytes, expected ~s bytes" - actual-size size))) - (put-uptr p (fold-left (lambda (m r) (fx+ m (if (reloc-long? r) 3 1))) 0 r*)) - (for-each - (lambda (r x) - (let ([item-offset (reloc-item-offset r)]) - (put-u8 p - (let* ([k (fxsll (reloc-type r) 2)] - [k (if (eqv? item-offset 0) k (fxlogor k 2))]) - (if (reloc-long? r) (fxlogor k 1) k))) - (put-uptr p (reloc-code-offset r)) - (unless (eqv? item-offset 0) (put-uptr p item-offset)) - (c-faslobj x t p a?))) - (reverse r*) - (reverse x*))) - (let ([c (car c*)]) - (record-case c - [(word) n - (put16 p n) - (prf0 (cdr c*) (fx+ a 2) r* ra x*)] - [(byte) n - (put8 p n) - (prf0 (cdr c*) (fx+ a 1) r* ra x*)] - [(long) n - (put32 p n) - (prf0 (cdr c*) (fx+ a 4) r* ra x*)] - [(quad) n - (put64 p n) - (prf0 (cdr c*) (fx+ a 8) r* ra x*)] - [(code-top-link) () - (constant-case ptr-bits - [(64) - (put64 p a) - (prf0 (cdr c*) (fx+ a 8) r* ra x*)] - [(32) - (put32 p a) - (prf0 (cdr c*) (fx+ a 4) r* ra x*)])] - [(abs) (n x) - (let ([r ($reloc (constant reloc-abs) n (fx- a ra))]) - (constant-case ptr-bits - [(64) - (put64 p 0) - (prf0 (cdr c*) (fx+ a 8) (cons r r*) a (cons x x*))] - [(32) - (put32 p 0) - (prf0 (cdr c*) (fx+ a 4) (cons r r*) a (cons x x*))]))] - [else - (constant-case architecture - [(x86) - (record-case c - [(rel) (n x) - (put32 p 0) - (let ([r ($reloc (constant reloc-rel) n (fx- a ra))]) - (prf0 (cdr c*) (fx+ a 4) (cons r r*) a (cons x x*)))] - [else (c-assembler-output-error c)])] - [(arm32) - (record-case c - [(arm32-abs) (n x) - ; on ARMV7 would be 8: 4-byte movi, 4-byte movt - (let ([a1 (fx- a 12)]) ; 4-byte ldr, 4-byte bra, 4-byte value - (let ([r ($reloc (constant reloc-arm32-abs) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [(arm32-call) (n x) - ; on ARMV7 would be 12: 4-byte movi, 4-byte movt, 4-byte blx - (let ([a1 (fx- a 16)]) ; 4-byte ldr, 4-byte bra, 4-byte value, 4-byte blx - (let ([r ($reloc (constant reloc-arm32-call) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [(arm32-jump) (n x) - ; on ARMV7 would be 12: 4-byte movi, 4-byte movt, 4-byte bx - (let ([a1 (fx- a 16)]) ; 4-byte ldr, 4-byte bra, 4-byte value, 4-byte bx - (let ([r ($reloc (constant reloc-arm32-jump) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [else (c-assembler-output-error c)])] - [(ppc32) - (record-case c - [(ppc32-abs) (n x) - (let ([a1 (fx- a 8)]) - (let ([r ($reloc (constant reloc-ppc32-abs) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [(ppc32-call) (n x) - (let ([a1 (fx- a 16)]) - (let ([r ($reloc (constant reloc-ppc32-call) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [(ppc32-jump) (n x) - (let ([a1 (fx- a 16)]) - (let ([r ($reloc (constant reloc-ppc32-jump) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [else (c-assembler-output-error c)])] - [(x86_64) - (record-case c - [(x86_64-jump) (n x) - (let ([a1 (fx- a 12)]) ; 10-byte moviq followed by 2-byte jmp - (let ([r ($reloc (constant reloc-x86_64-jump) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [(x86_64-call) (n x) - (let ([a1 (fx- a 12)]) ; 10-byte moviq followed by 2-byte call - (let ([r ($reloc (constant reloc-x86_64-call) n (fx- a1 ra))]) - (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] - [else (c-assembler-output-error c)])] - [else (c-assembler-output-error c)])]))))])) - (define c-assembler-output-error (lambda (x) ($oops 'compile-internal @@ -403,7 +271,7 @@ x))) (define (c-faslobj x t p a?) - (let f ([x x]) + (let faslobj ([x x]) (record-case x [(object) (x) ($fasl-out x p t a?)] [(entry) (i) @@ -420,29 +288,138 @@ (lambda (x p t a?) (put-u8 p (constant fasl-type-closure)) (put-uptr p (constant code-data-disp)) - (f ($c-func-code-record func))))] - [(code) stuff - ($fasl-wrf-graph x p t a? c-faslcode)] - [(group) elt* - (let ([n (length elt*)]) - (if (fx= n 1) - (f (car elt*)) - (begin - (put-u8 p (constant fasl-type-group)) - (put-uptr p n) - (for-each f elt*))))] - [(visit-stuff) elt - (put-u8 p (constant fasl-type-visit)) - (f elt)] - [(revisit-stuff) elt - (put-u8 p (constant fasl-type-revisit)) - (f elt)] + (faslobj ($c-func-code-record func))))] + [(code) (func subtype free name arity-mask size code-list info pinfo*) + ($fasl-wrf-graph x p t a? + (lambda (x p t a?) + (put-u8 p (constant fasl-type-code)) + (put-u8 p subtype) + (put-uptr p free) + (put-uptr p size) + ($fasl-out name p t a?) + ($fasl-out arity-mask p t a?) + ($fasl-out info p t a?) + ($fasl-out pinfo* p t a?) + (let prf0 ([c* code-list] + [a (constant code-data-disp)] + [r* '()] + [ra 0] + [x* '()]) + (if (null? c*) + (begin + (let ([actual-size (- a (constant code-data-disp))]) + (unless (= actual-size size) + ($oops 'c-faslcode + "wrote ~s bytes, expected ~s bytes" + actual-size size))) + (put-uptr p (fold-left (lambda (m r) (fx+ m (if (reloc-long? r) 3 1))) 0 r*)) + (for-each + (lambda (r x) + (let ([item-offset (reloc-item-offset r)]) + (put-u8 p + (let* ([k (fxsll (reloc-type r) 2)] + [k (if (eqv? item-offset 0) k (fxlogor k 2))]) + (if (reloc-long? r) (fxlogor k 1) k))) + (put-uptr p (reloc-code-offset r)) + (unless (eqv? item-offset 0) (put-uptr p item-offset)) + (faslobj x))) + (reverse r*) + (reverse x*))) + (let ([c (car c*)]) + (record-case c + [(word) n + (put16 p n) + (prf0 (cdr c*) (fx+ a 2) r* ra x*)] + [(byte) n + (put8 p n) + (prf0 (cdr c*) (fx+ a 1) r* ra x*)] + [(long) n + (put32 p n) + (prf0 (cdr c*) (fx+ a 4) r* ra x*)] + [(quad) n + (put64 p n) + (prf0 (cdr c*) (fx+ a 8) r* ra x*)] + [(code-top-link) () + (constant-case ptr-bits + [(64) + (put64 p a) + (prf0 (cdr c*) (fx+ a 8) r* ra x*)] + [(32) + (put32 p a) + (prf0 (cdr c*) (fx+ a 4) r* ra x*)])] + [(abs) (n x) + (let ([r ($reloc (constant reloc-abs) n (fx- a ra))]) + (constant-case ptr-bits + [(64) + (put64 p 0) + (prf0 (cdr c*) (fx+ a 8) (cons r r*) a (cons x x*))] + [(32) + (put32 p 0) + (prf0 (cdr c*) (fx+ a 4) (cons r r*) a (cons x x*))]))] + [else + (constant-case architecture + [(x86) + (record-case c + [(rel) (n x) + (put32 p 0) + (let ([r ($reloc (constant reloc-rel) n (fx- a ra))]) + (prf0 (cdr c*) (fx+ a 4) (cons r r*) a (cons x x*)))] + [else (c-assembler-output-error c)])] + [(arm32) + (record-case c + [(arm32-abs) (n x) + ; on ARMV7 would be 8: 4-byte movi, 4-byte movt + (let ([a1 (fx- a 12)]) ; 4-byte ldr, 4-byte bra, 4-byte value + (let ([r ($reloc (constant reloc-arm32-abs) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [(arm32-call) (n x) + ; on ARMV7 would be 12: 4-byte movi, 4-byte movt, 4-byte blx + (let ([a1 (fx- a 16)]) ; 4-byte ldr, 4-byte bra, 4-byte value, 4-byte blx + (let ([r ($reloc (constant reloc-arm32-call) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [(arm32-jump) (n x) + ; on ARMV7 would be 12: 4-byte movi, 4-byte movt, 4-byte bx + (let ([a1 (fx- a 16)]) ; 4-byte ldr, 4-byte bra, 4-byte value, 4-byte bx + (let ([r ($reloc (constant reloc-arm32-jump) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [else (c-assembler-output-error c)])] + [(ppc32) + (record-case c + [(ppc32-abs) (n x) + (let ([a1 (fx- a 8)]) + (let ([r ($reloc (constant reloc-ppc32-abs) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [(ppc32-call) (n x) + (let ([a1 (fx- a 16)]) + (let ([r ($reloc (constant reloc-ppc32-call) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [(ppc32-jump) (n x) + (let ([a1 (fx- a 16)]) + (let ([r ($reloc (constant reloc-ppc32-jump) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [else (c-assembler-output-error c)])] + [(x86_64) + (record-case c + [(x86_64-jump) (n x) + (let ([a1 (fx- a 12)]) ; 10-byte moviq followed by 2-byte jmp + (let ([r ($reloc (constant reloc-x86_64-jump) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [(x86_64-call) (n x) + (let ([a1 (fx- a 12)]) ; 10-byte moviq followed by 2-byte call + (let ([r ($reloc (constant reloc-x86_64-call) n (fx- a1 ra))]) + (prf0 (cdr c*) a (cons r r*) a1 (cons x x*))))] + [else (c-assembler-output-error c)])] + [else (c-assembler-output-error c)])]))))))] [else (c-assembler-output-error x)]))) -(define (c-print-fasl x p) - (let ([t ($fasl-table)] [a? (or (generate-inspector-information) (eq? ($compile-profile) 'source))]) +(define (c-print-fasl x p situation) + (let ([t ($fasl-table)] + [a? (let ([flags (fxlogor + (if (generate-inspector-information) (constant annotation-debug) 0) + (if (eq? ($compile-profile) 'source) (constant annotation-profile) 0))]) + (and (not (fx= flags 0)) flags))]) (c-build-fasl x t a?) - ($fasl-start p t + ($fasl-start p t situation (lambda (p) (c-faslobj x t p a?))))) (define-record-type visit-chunk @@ -453,68 +430,6 @@ (nongenerative) (fields chunk)) -(define-who expand-Lexpand - (lambda (e) - ; we might want to export expand-Inner from syntax.ss instead of $build-install-library/ct-code - ; and $build-install-library/rt-code - (define-pass expand-Inner : Lexpand (ir) -> Lexpand () - (Inner : Inner (ir) -> Inner () - [,lsrc lsrc] ; NB: workaround for nanopass tag snafu - [(program ,uid ,body) ($build-invoke-program uid body)] - [(library/ct ,uid ,import-code ,visit-code) - ($build-install-library/ct-code uid import-code visit-code)] - [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) - ($build-install-library/rt-code uid dl* db* dv* de* body)] - [else ir])) - (with-output-language (Lsrc Expr) - (define (lambda-chunk lsrc) - ; pretending main is a library routine to avoid argument-count check - `(case-lambda ,(make-preinfo-lambda #f #f (lookup-libspec main)) - (clause () 0 ,lsrc))) - (define (visit lsrc e* rchunk*) - (define (rchunks) (cons (make-visit-chunk (lambda-chunk lsrc)) rchunk*)) - (if (null? e*) - (rchunks) - (let f ([e (car e*)] [e* (cdr e*)]) - (nanopass-case (Lexpand Outer) e - [(group ,outer1 ,outer2) (f outer1 (cons outer2 e*))] - [(visit-only ,lsrc2) (visit `(seq ,lsrc ,lsrc2) e* rchunk*)] - [else (common e e* (rchunks))])))) - (define (revisit lsrc e* rchunk*) - (define (rchunks) (cons (make-revisit-chunk (lambda-chunk lsrc)) rchunk*)) - (if (null? e*) - (rchunks) - (let f ([e (car e*)] [e* (cdr e*)]) - (nanopass-case (Lexpand Outer) e - [(group ,outer1 ,outer2) (f outer1 (cons outer2 e*))] - [(revisit-only ,lsrc2) (revisit `(seq ,lsrc ,lsrc2) e* rchunk*)] - [else (common e e* (rchunks))])))) - (define (visit-revisit lsrc e* rchunk*) - (define (rchunks) (cons (lambda-chunk lsrc) rchunk*)) - (if (null? e*) - (rchunks) - (let f ([e (car e*)] [e* (cdr e*)]) - (nanopass-case (Lexpand Outer) e - [(group ,outer1 ,outer2) (f outer1 (cons outer2 e*))] - [,lsrc2 (visit-revisit `(seq ,lsrc ,lsrc2) e* rchunk*)] - [else (common e e* (rchunks))])))) - (define (common e e* rchunk*) - (nanopass-case (Lexpand Outer) e - [(visit-only ,lsrc) (visit lsrc e* rchunk*)] - [(revisit-only ,lsrc) (revisit lsrc e* rchunk*)] - [,lsrc (visit-revisit lsrc e* rchunk*)] - [else (let ([rchunk* (cons (nanopass-case (Lexpand Outer) e - [(visit-only ,inner) (make-visit-chunk inner)] - [(revisit-only ,inner) (make-revisit-chunk inner)] - [else e]) - rchunk*)]) - (if (null? e*) rchunk* (start (car e*) (cdr e*) rchunk*)))])) - (define (start e e* rchunk*) - (nanopass-case (Lexpand Outer) e - [(group ,outer1 ,outer2) (start outer1 (cons outer2 e*) rchunk*)] - [else (common e e* rchunk*)])) - (reverse (start (expand-Inner e) '() '()))))) - (define-who (host-machine-type) (let ([m (machine-type)]) (let lookup ([ra* (constant machine-type-alist)]) @@ -524,7 +439,7 @@ (define with-whacked-optimization-locs (lambda (x1 th) - (define ht (make-hashtable symbol-hash eq?)) + (define ht (make-eq-hashtable)) (define-pass whack! : Lexpand (ir f) -> * () (Outer : Outer (ir) -> * () [,inner (Inner ir)] @@ -533,21 +448,28 @@ [(revisit-only ,[]) (values)] [else (values)]) (Inner : Inner (ir) -> * () - [,linfo/ct (for-each f (library/ct-info-clo* linfo/ct)) (values)] + [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) + (for-each f db*) + (values)] [else (values)])) (whack! x1 - (lambda (x) - (let ([b (cdr x)]) - (symbol-hashtable-set! ht (car x) (unbox b)) - (set-box! b '())))) + (lambda (db) + (when db + (eq-hashtable-set! ht db (unbox db)) + (set-box! db '())))) (th) (whack! x1 - (lambda (x) - (set-box! (cdr x) (symbol-hashtable-ref ht (car x) '())))))) + (lambda (db) + (when db + (set-box! db (eq-hashtable-ref ht db '()))))))) + +(define check-prelex-flags + (lambda (x after) + (when ($enable-check-prelex-flags) + ($pass-time 'cpcheck-prelex-flags (lambda () (do-trace $cpcheck-prelex-flags x after)))))) (define compile-file-help - (lambda (op hostop wpoop machine sfd do-read outfn) - (include "types.ss") + (lambda (op hostop wpoop source-table machine sfd do-read outfn) (parameterize ([$target-machine machine] [$sfd sfd] [$current-mso ($current-mso)] @@ -559,91 +481,152 @@ [cp0-score-limit (cp0-score-limit)] [cp0-outer-unroll-limit (cp0-outer-unroll-limit)] [generate-inspector-information (generate-inspector-information)] + [generate-procedure-source-information (generate-procedure-source-information)] [$compile-profile ($compile-profile)] [generate-interrupt-trap (generate-interrupt-trap)] [$optimize-closures ($optimize-closures)] - [enable-cross-library-optimization (enable-cross-library-optimization)]) - (emit-header op (constant machine-type)) - (when hostop (emit-header hostop (host-machine-type))) - (when wpoop (emit-header wpoop (host-machine-type))) - (let cfh0 ([n 1]) + [enable-cross-library-optimization (enable-cross-library-optimization)] + [generate-covin-files (generate-covin-files)]) + (emit-header op (constant scheme-version) (constant machine-type)) + (when hostop (emit-header hostop (constant scheme-version) (host-machine-type))) + (when wpoop (emit-header wpoop (constant scheme-version) (host-machine-type))) + (let cfh0 ([n 1] [rrcinfo** '()] [rlpinfo** '()] [rfinal** '()]) (let ([x0 ($pass-time 'read do-read)]) - (unless (eof-object? x0) - (let () - (define source-info-string - (and (or ($assembly-output) (expand-output) (expand/optimize-output)) - (with-output-to-string - (lambda () - (printf "expression #~s" n) - (when (and (annotation? x0) (fxlogtest (annotation-flags x0) (constant annotation-debug))) - (let ((s (annotation-source x0))) - (call-with-values - (lambda () ((current-locate-source-object-source) s #t #t)) - (case-lambda - [() (void)] - [(path line char) (printf " on line ~s" line)])))))))) - (when ($assembly-output) - (when source-info-string - (fprintf ($assembly-output) "~%;; ~a\n" source-info-string)) - (parameterize ([print-graph #t]) - (pretty-print (if (annotation? x0) (annotation-stripped x0) x0) - ($assembly-output))) - (flush-output-port ($assembly-output))) - (let ([x1 ($pass-time 'expand + (if (eof-object? x0) + (compile-file-help2 op (reverse rrcinfo**) (reverse rlpinfo**) (reverse rfinal**)) + (let () + (define source-info-string + (and (or ($assembly-output) (expand-output) (expand/optimize-output)) + (with-output-to-string + (lambda () + (printf "expression #~s" n) + (when (and (annotation? x0) (fxlogtest (annotation-flags x0) (constant annotation-debug))) + (let ((s (annotation-source x0))) + (call-with-values + (lambda () ((current-locate-source-object-source) s #t #t)) + (case-lambda + [() (void)] + [(path line char) (printf " on line ~s" line)])))))))) + (when ($assembly-output) + (when source-info-string + (fprintf ($assembly-output) "~%;; ~a\n" source-info-string)) + (parameterize ([print-graph #t]) + (pretty-print (if (annotation? x0) (annotation-stripped x0) x0) + ($assembly-output))) + (flush-output-port ($assembly-output))) + (let ([x1 ($pass-time 'expand + (lambda () + (expand x0 (if (eq? (subset-mode) 'system) ($system-environment) (interaction-environment)) #t #t outfn)))]) + (check-prelex-flags x1 'expand) + ($uncprep x1 #t) ; populate preinfo sexpr fields + (check-prelex-flags x1 'uncprep) + (when source-table ($insert-profile-src! source-table x1)) + (when wpoop + ; cross-library optimization locs might be set by cp0 during the expander's compile-time + ; evaluation of library forms. since we have no need for the optimization information in + ; the wpo file, we temporarily whack the optimization locs while writing the wpo file. + (with-whacked-optimization-locs x1 + (lambda () + ($with-fasl-target (host-machine-type) (lambda () - (expand x0 (if (eq? (subset-mode) 'system) ($system-environment) (interaction-environment)) #t #t outfn)))]) - ($uncprep x1 #t) ; populate preinfo sexpr fields - (when wpoop - ; cross-library optimization locs might be set by cp0 during the expander's compile-time - ; evaluation of library forms. since we have no need for the optimization information in - ; the wpo file, we temporarily whack the optimization locs while writing the wpo file. - (with-whacked-optimization-locs x1 - (lambda () + (parameterize ([$target-machine (machine-type)]) + (let ([t ($fasl-table)]) + ($fasl-enter x1 t (constant annotation-all)) + ($fasl-start wpoop t (constant fasl-type-visit-revisit) (lambda (p) ($fasl-out x1 p t (constant annotation-all))))))))))) + (let-values ([(rcinfo* lpinfo* final*) (compile-file-help1 x1 source-info-string)]) + (when hostop + ; the host library file contains expander output possibly augmented with + ; cross-library optimization information inserted by cp0. this write must come + ; after cp0, at least, so that cp0 has a chance to insert that information. ($with-fasl-target (host-machine-type) (lambda () (parameterize ([$target-machine (machine-type)]) (let ([t ($fasl-table)]) - ($fasl-enter x1 t #t) - ($fasl-start wpoop t (lambda (p) ($fasl-out x1 p t #t)))))))))) - (compile-file-help1 x1 op source-info-string) - (when hostop - ; the host library file contains expander output possibly augmented with - ; cross-library optimization information inserted by cp0. this write must come - ; after cp0, at least, so that cp0 has a chance to insert that information. - ($with-fasl-target (host-machine-type) - (lambda () - (parameterize ([$target-machine (machine-type)]) - (let ([t ($fasl-table)]) - ($fasl-enter x1 t #t) - ($fasl-start hostop t (lambda (p) ($fasl-out x1 p t #t))))))))) - (cfh0 (+ n 1))))))))) + ($fasl-enter x1 t (constant annotation-all)) + ($fasl-start hostop t (constant fasl-type-visit-revisit) (lambda (p) ($fasl-out x1 p t (constant annotation-all))))))))) + (cfh0 (+ n 1) (cons rcinfo* rrcinfo**) (cons lpinfo* rlpinfo**) (cons final* rfinal**))))))))))) (define library/program-info? (lambda (x) (or (program-info? x) (library-info? x)))) (define-who compile-file-help1 - (lambda (x1 op source-info-string) + (lambda (x1 source-info-string) + (define-who expand-Lexpand + (lambda (e) + ; we might want to export expand-Inner from syntax.ss instead of $build-install-library/ct-code + ; and $build-install-library/rt-code + (define-pass expand-Inner : Lexpand (ir) -> Lexpand () + (Inner : Inner (ir) -> Inner () + [,lsrc lsrc] ; NB: workaround for nanopass tag snafu + [(program ,uid ,body) ($build-invoke-program uid body)] + [(library/ct ,uid (,export-id* ...) ,import-code ,visit-code) + ($build-install-library/ct-code uid export-id* import-code visit-code)] + [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) + ($build-install-library/rt-code uid dl* db* dv* de* body)] + [else ir])) + (with-output-language (Lsrc Expr) + (define (lambda-chunk lsrc) + ; pretending main is a library routine to avoid argument-count check + `(case-lambda ,(make-preinfo-lambda #f #f (lookup-libspec main)) + (clause () 0 ,lsrc))) + (define (visit lsrc e* rchunk*) + (define (rchunks) (cons (make-visit-chunk (lambda-chunk lsrc)) rchunk*)) + (if (null? e*) + (rchunks) + (let f ([e (car e*)] [e* (cdr e*)]) + (nanopass-case (Lexpand Outer) e + [(group ,outer1 ,outer2) (f outer1 (cons outer2 e*))] + [(visit-only ,lsrc2) (visit `(seq ,lsrc ,lsrc2) e* rchunk*)] + [else (common e e* (rchunks))])))) + (define (revisit lsrc e* rchunk*) + (define (rchunks) (cons (make-revisit-chunk (lambda-chunk lsrc)) rchunk*)) + (if (null? e*) + (rchunks) + (let f ([e (car e*)] [e* (cdr e*)]) + (nanopass-case (Lexpand Outer) e + [(group ,outer1 ,outer2) (f outer1 (cons outer2 e*))] + [(revisit-only ,lsrc2) (revisit `(seq ,lsrc ,lsrc2) e* rchunk*)] + [else (common e e* (rchunks))])))) + (define (visit-revisit lsrc e* rchunk*) + (define (rchunks) (cons (lambda-chunk lsrc) rchunk*)) + (if (null? e*) + (rchunks) + (let f ([e (car e*)] [e* (cdr e*)]) + (nanopass-case (Lexpand Outer) e + [(group ,outer1 ,outer2) (f outer1 (cons outer2 e*))] + [,lsrc2 (visit-revisit `(seq ,lsrc ,lsrc2) e* rchunk*)] + [else (common e e* (rchunks))])))) + (define (unwrap-inner e) + (nanopass-case (Lexpand Inner) e + [(library/ct-info ,linfo/ct) linfo/ct] + [(library/rt-info ,linfo/rt) linfo/rt] + [(program-info ,pinfo) pinfo] + [else e])) + (define (common e e* rchunk*) + (nanopass-case (Lexpand Outer) e + [(visit-only ,lsrc) (visit lsrc e* rchunk*)] + [(revisit-only ,lsrc) (revisit lsrc e* rchunk*)] + [,lsrc (visit-revisit lsrc e* rchunk*)] + [else (let ([rchunk* (cons (nanopass-case (Lexpand Outer) e + [(visit-only ,inner) (make-visit-chunk (unwrap-inner inner))] + [(revisit-only ,inner) (make-revisit-chunk (unwrap-inner inner))] + [(recompile-info ,rcinfo) rcinfo] + [,inner (unwrap-inner inner)] + [else (sorry! who "unexpected Outer ~s" e)]) + rchunk*)]) + (if (null? e*) rchunk* (start (car e*) (cdr e*) rchunk*)))])) + (define (start e e* rchunk*) + (nanopass-case (Lexpand Outer) e + [(group ,outer1 ,outer2) (start outer1 (cons outer2 e*) rchunk*)] + [else (common e e* rchunk*)])) + (reverse (start (expand-Inner e) '() '()))))) (when (expand-output) (when source-info-string (fprintf (expand-output) "~%;; expand output for ~a\n" source-info-string)) - (pretty-print ($uncprep x1) (expand-output))) - (let loop ([chunk* (expand-Lexpand x1)] [rx2b* '()] [rfinal* '()]) - (define finish-compile - (lambda (x1 f) - (let* ([x2 ($pass-time 'cpvalid (lambda () (do-trace $cpvalid x1)))] - [x2a (let ([cpletrec-ran? #f]) - (let ([x ((run-cp0) - (lambda (x) - (set! cpletrec-ran? #t) - (let ([x ($pass-time 'cp0 (lambda () (do-trace $cp0 x)))]) - ($pass-time 'cpletrec (lambda () (do-trace $cpletrec x))))) - x2)]) - (if cpletrec-ran? x ($pass-time 'cpletrec (lambda () (do-trace $cpletrec x))))))] - [x2b ($pass-time 'cpcheck (lambda () (do-trace $cpcheck x2a)))] - [x7 (do-trace $np-compile x2b #t)] - [x8 ($c-make-closure x7)]) - (loop (cdr chunk*) (cons (f x2b) rx2b*) (cons (f x8) rfinal*))))) + (pretty-print ($uncprep x1) (expand-output)) + (flush-output-port (expand-output))) + (let loop ([chunk* (expand-Lexpand x1)] [rx2b* '()] [rfinal* '()] [rlpinfo* '()] [rrcinfo* '()]) (if (null? chunk*) (begin (when (expand/optimize-output) @@ -651,11 +634,16 @@ (fprintf (expand/optimize-output) "~%;; expand/optimize output for ~a\n" source-info-string)) (let ([e* (map (lambda (x2b) (define (finish x2b) - (if (or (recompile-info? x2b) (library/program-info? x2b)) - ($uncprep x2b) - (nanopass-case (Lsrc Expr) x2b - [(case-lambda ,preinfo (clause () ,interface ,[$uncprep : body])) body] - [else (sorry! 'compile-file-help "unexpected optimizer output ~s" x2b)]))) + ($uncprep + (cond + [(recompile-info? x2b) (with-output-language (Lexpand Outer) `(recompile-info ,x2b))] + [(library/ct-info? x2b) (with-output-language (Lexpand Inner) `(library/ct-info ,x2b))] + [(library/rt-info? x2b) (with-output-language (Lexpand Inner) `(library/rt-info ,x2b))] + [(program-info? x2b) (with-output-language (Lexpand Inner) `(program-info ,x2b))] + [else + (nanopass-case (Lsrc Expr) x2b + [(case-lambda ,preinfo (clause () ,interface ,body)) body] + [else (sorry! 'compile-file-help "unexpected optimizer output ~s" x2b)])]))) (if (pair? x2b) (case (car x2b) [(visit-stuff) `(eval-when (visit) ,(finish (cdr x2b)))] @@ -663,57 +651,162 @@ [else (sorry! who "unrecognized stuff ~s" x2b)]) (finish x2b))) rx2b*)]) - (pretty-print (if (fx= (length e*) 1) (car e*) `(begin ,@(reverse e*))) (expand/optimize-output)))) - ($pass-time 'pfasl (lambda () (c-print-fasl `(group ,@(reverse rfinal*)) op)))) - (let ([x1 (car chunk*)]) + (pretty-print (if (fx= (length e*) 1) (car e*) `(begin ,@(reverse e*))) (expand/optimize-output)) + (flush-output-port (expand/optimize-output)))) + (values (reverse rrcinfo*) (reverse rlpinfo*) (reverse rfinal*))) + (let ([x1 (car chunk*)] [chunk* (cdr chunk*)]) + (define finish-compile + (lambda (x1 f) + (if (library/program-info? x1) + (loop chunk* (cons (f x1) rx2b*) rfinal* (cons (f `(object ,x1)) rlpinfo*) rrcinfo*) + (let* ([waste (check-prelex-flags x1 'before-cpvalid)] + [x2 ($pass-time 'cpvalid (lambda () (do-trace $cpvalid x1)))] + [waste (check-prelex-flags x2 'cpvalid)] + [x2a (let ([cpletrec-ran? #f]) + (let ([x ((run-cp0) + (lambda (x) + (set! cpletrec-ran? #t) + (let* ([x ($pass-time 'cp0 (lambda () (do-trace $cp0 x)))] + [waste (check-prelex-flags x 'cp0)] + [x ($pass-time 'cpletrec (lambda () (do-trace $cpletrec x)))] + [waste (check-prelex-flags x 'cpletrec)]) + x)) + x2)]) + (if cpletrec-ran? + x + (let ([x ($pass-time 'cpletrec (lambda () (do-trace $cpletrec x)))]) + (check-prelex-flags x 'cpletrec) + x))))] + [x2b ($pass-time 'cpcheck (lambda () (do-trace $cpcheck x2a)))] + [waste (check-prelex-flags x2b 'cpcheck)] + [x2b ($pass-time 'cpcommonize (lambda () (do-trace $cpcommonize x2b)))] + [waste (check-prelex-flags x2b 'cpcommonize)] + [x7 (do-trace $np-compile x2b #t)] + [x8 ($c-make-closure x7)]) + (loop chunk* (cons (f x2b) rx2b*) (cons (f x8) rfinal*) rlpinfo* rrcinfo*))))) (cond - [(or (recompile-info? x1) (library/program-info? x1)) - (loop (cdr chunk*) (cons x1 rx2b*) (cons `(object ,x1) rfinal*))] - [(visit-chunk? x1) - (let ([x1c (visit-chunk-chunk x1)]) - (define (visit-stuff x) `(visit-stuff . ,x)) - (if (library/program-info? x1c) - (loop (cdr chunk*) (cons (visit-stuff x1c) rx2b*) (cons (visit-stuff `(object ,x1c)) rfinal*)) - (finish-compile x1c visit-stuff)))] - [(revisit-chunk? x1) - (let ([x1c (revisit-chunk-chunk x1)]) - (define (revisit-stuff x) `(revisit-stuff . ,x)) - (if (library/program-info? x1c) - (loop (cdr chunk*) (cons (revisit-stuff x1c) rx2b*) (cons (revisit-stuff `(object ,x1c)) rfinal*)) - (finish-compile x1c revisit-stuff)))] + [(recompile-info? x1) (loop chunk* (cons x1 rx2b*) rfinal* rlpinfo* (cons x1 rrcinfo*))] + [(visit-chunk? x1) (finish-compile (visit-chunk-chunk x1) (lambda (x) `(visit-stuff . ,x)))] + [(revisit-chunk? x1) (finish-compile (revisit-chunk-chunk x1) (lambda (x) `(revisit-stuff . ,x)))] [else (finish-compile x1 values)])))))) -(define (out->wpo out) - (let ([ext (path-extension out)]) - (cond - [(string=? ext "") (format "~a.wpo" out)] - [(string=? ext "wpo") (format "~a.wpo" out)] - [else (format "~a.wpo" (path-root out))]))) +(define compile-file-help2 + (lambda (op rcinfo** lpinfo** final**) + (define (libreq-hash x) (symbol-hash (libreq-uid x))) + (define (libreq=? x y) (eq? (libreq-uid x) (libreq-uid y))) + (let ([import-ht (make-hashtable libreq-hash libreq=?)] + [include-ht (make-hashtable string-hash string=?)]) + (for-each + (lambda (rcinfo*) + (for-each + (lambda (rcinfo) + (for-each + (lambda (x) (hashtable-set! import-ht x #t)) + (recompile-info-import-req* rcinfo)) + (for-each + (lambda (x) (hashtable-set! include-ht x #t)) + (recompile-info-include-req* rcinfo))) + rcinfo*)) + rcinfo**) + (let ([import-req* (vector->list (hashtable-keys import-ht))] + [include-req* (vector->list (hashtable-keys include-ht))]) + ; the first entry is always a recompile-info record with recompile information for the entire object file + ($pass-time 'pfasl + (lambda () + (c-print-fasl `(object ,(make-recompile-info import-req* include-req*)) op (constant fasl-type-visit-revisit)) + (for-each + (lambda (final*) + (for-each + (lambda (x) + (record-case x + [(visit-stuff) x (c-print-fasl x op (constant fasl-type-visit))] + [(revisit-stuff) x (c-print-fasl x op (constant fasl-type-revisit))] + [else (c-print-fasl x op (constant fasl-type-visit-revisit))])) + final*)) + ; inserting #t after lpinfo as an end-of-header marker + (append lpinfo** (cons (list `(object #t)) final**))))))))) + +(define (new-extension new-ext fn) + (let ([old-ext (path-extension fn)]) + (format "~a.~a" + (if (or (string=? old-ext "") (string=? old-ext new-ext)) fn (path-root fn)) + new-ext))) + +(module (with-object-file with-host-file with-wpo-file with-coverage-file) + (define call-with-port/cleanup + (lambda (ofn op p) + (on-reset (delete-file ofn #f) + (on-reset (close-port op) + (p op)) + (close-port op)))) + + (define with-object-file + (lambda (who ofn p) + (call-with-port/cleanup ofn + ($open-file-output-port who ofn + (file-options replace)) + p))) + + (define with-host-file + (lambda (who ofn p) + (if ofn + (call-with-port/cleanup ofn + ($open-file-output-port who ofn + (file-options replace)) + p) + (p #f)))) + + (define with-wpo-file + (lambda (who ofn p) + (if (generate-wpo-files) + (let ([ofn (new-extension "wpo" ofn)]) + (call-with-port/cleanup ofn + ($open-file-output-port who ofn + (file-options replace)) + p)) + (p #f)))) + + (define with-coverage-file + (lambda (who ofn p) + (if (generate-covin-files) + (let ([ofn (new-extension "covin" ofn)]) + (call-with-port/cleanup ofn + ($open-file-output-port who ofn + (file-options compressed replace) + (buffer-mode block) + (current-transcoder)) + (lambda (op) + (let ([source-table (make-source-table)]) + (p source-table) + (put-source-table op source-table))))) + (p #f))))) (set! $compile-host-library (lambda (who iofn) - (let ([ip ($open-file-input-port who iofn (file-options compressed))]) + (let ([ip ($open-file-input-port who iofn)]) (on-reset (close-port ip) - (let loop ([x1* '()] [other* '()]) + (let loop ([rx1* '()] [rcinfo* '()] [rother* '()]) (let ([x1 (fasl-read ip)]) (cond [(eof-object? x1) (close-port ip) - (unless (null? x1*) - (unless (null? other*) ($oops 'compile-library "unexpected value ~s read from file ~s" (car other*) iofn)) - (let ([op ($open-file-output-port who iofn - (if (compile-compressed) - (file-options replace compressed) - (file-options replace)))]) - (on-reset (delete-file iofn #f) - (on-reset (close-port op) - (emit-header op (constant machine-type)) - (for-each - (lambda (x1) (compile-file-help1 x1 op "host library")) - (reverse x1*))) - (close-port op))))] - [(Lexpand? x1) (loop (cons x1 x1*) other*)] - [else (loop x1* (cons x1 other*))]))))))) + (unless (null? rx1*) + (unless (null? rother*) ($oops 'compile-library "unexpected value ~s read from file ~s that also contains ~s" (car rother*) iofn (car rx1*))) + (with-object-file who iofn + (lambda (op) + (emit-header op (constant scheme-version) (constant machine-type)) + (let loop ([x1* (reverse rx1*)] [rrcinfo** (list rcinfo*)] [rlpinfo** '()] [rfinal** '()]) + (if (null? x1*) + (compile-file-help2 op (reverse rrcinfo**) (reverse rlpinfo**) (reverse rfinal**)) + (let-values ([(rcinfo* lpinfo* final*) + (let ([x1 (car x1*)]) + (if (recompile-info? x1) + (values (list x1) '() '()) + (compile-file-help1 (car x1*) "host library")))]) + (loop (cdr x1*) (cons rcinfo* rrcinfo**) (cons lpinfo* rlpinfo**) (cons final* rfinal**))))))))] + [(recompile-info? x1) (loop rx1* (cons x1 rcinfo*) rother*)] + [(Lexpand? x1) (loop (cons x1 rx1*) rcinfo* rother*)] + [else (loop rx1* rcinfo* (cons x1 rother*))]))))))) (let () (define-record-type node (nongenerative) @@ -736,12 +829,12 @@ (program-info-invoke-req* (program-node-pinfo node)))) (define-record-type library-node (nongenerative) (parent node) - (fields binary? (mutable ctinfo) (mutable rtinfo) (mutable ctir) (mutable rtir) (mutable visible?)) + (fields binary? (mutable ctinfo) (mutable rtinfo) (mutable ctir) (mutable rtir) (mutable visible?) fn) (protocol (lambda (pargs->new) - (lambda (binary? ctinfo rtinfo visible?) + (lambda (binary? ctinfo rtinfo visible? fn) (safe-assert (or ctinfo rtinfo)) - ((pargs->new) binary? ctinfo rtinfo #f #f visible?))))) + ((pargs->new) binary? ctinfo rtinfo #f #f visible? fn))))) (define library-node-path (lambda (node) (library-info-path (or (library-node-ctinfo node) (library-node-rtinfo node))))) @@ -781,7 +874,6 @@ (loop))))) (get-bv)) (begin (set-port-position! ip start-pos) #f)))]) - (port-file-compressed! ip) (if ($compiled-file-header? ip) (let loop ([rls '()]) (let ([x (fasl-read ip)]) @@ -800,7 +892,7 @@ (begin (when (and src-path (time (lambda (fn) (let*-values ([(hash-bang-line ir*) (read-input-file who fn)] - [(no-program node*) (process-ir*! ir* fn #f libs-visible?)]) + [(no-program node* ignore-rcinfo*) (process-ir*! ir* fn #f libs-visible?)]) (values fn node*)))] [(find-library who path "so" (library-extensions)) => (lambda (fn) (values fn (read-binary-file path fn libs-visible?)))] [else ($oops who "unable to locate expanded library file for library ~s" path)]))) (define read-binary-file (lambda (path fn libs-visible?) - (call-with-port ($open-file-input-port who fn (file-options compressed)) + (call-with-port ($open-file-input-port who fn) (lambda (ip) (on-reset (close-port ip) (if ($compiled-file-header? ip) (let ([libs-in-file '()]) (let loop! () (let ([x (fasl-read ip)]) - (define read-inner! - (lambda (x situation) - (cond - [(procedure? x)] - [(library/ct-info? x) - (let ([node (record-ct-lib! x #t situation fn libs-visible?)]) - (when node (set! libs-in-file (cons node libs-in-file))))] - [(library/rt-info? x) - (let ([node (record-rt-lib! x #t situation fn libs-visible?)]) - (when node (set! libs-in-file (cons node libs-in-file))))] - [(program-info? x) ($oops who "found program while looking for library ~s in ~a" path fn)] - [else ($oops who "unexpected value ~s read from ~a" x fn)]))) - (define read-outer! - (lambda (x) - (cond - [(recompile-info? x) (void)] - [(revisit-stuff? x) (read-inner! (revisit-stuff-inner x) 'revisit)] - [(visit-stuff? x) (read-inner! (visit-stuff-inner x) 'visit)] - [else (read-inner! x 'load)]))) - (cond - [(eof-object? x) - (for-each - (lambda (node) - (unless (library-node-ctinfo node) - ($oops who "missing compile-time information for ~s" (library-node-path node))) - (unless (library-node-rtinfo node) - ($oops who "missing run-time information for ~s" (library-node-path node)))) - libs-in-file) - libs-in-file] - [(vector? x) (vector-for-each read-outer! x) (loop!)] - [(Lexpand? x) ($oops who "found non-binary element in binary file ~s" fn)] - [else (read-outer! x) (loop!)])))) + (if (eof-object? x) + (begin + (for-each + (lambda (node) + (unless (library-node-ctinfo node) + ($oops who "missing compile-time information for ~s" (library-node-path node))) + (unless (library-node-rtinfo node) + ($oops who "missing run-time information for ~s" (library-node-path node)))) + libs-in-file) + libs-in-file) + (begin + (cond + [(recompile-info? x)] + [(procedure? x)] + [(library/ct-info? x) + (let ([node (record-ct-lib! x #t fn libs-visible?)]) + (when node (set! libs-in-file (cons node libs-in-file))))] + [(library/rt-info? x) + (let ([node (record-rt-lib! x #t fn libs-visible?)]) + (when node (set! libs-in-file (cons node libs-in-file))))] + [(program-info? x) ($oops who "found program while looking for library ~s in ~a" path fn)] + ; NB: this is here to support the #t inserted by compile-file-help2 after header information + [(eq? x #t)] + [else ($oops who "unexpected value ~s read from ~a" x fn)]) + (loop!)))))) ($oops who "malformed binary input file ~s" fn))))))) (define process-ir*! (lambda (ir* ifn capture-program? libs-visible?) - (let ([libs-in-file '()] [maybe-program #f]) + (define outer-who who) + (let ([libs-in-file '()] [maybe-program #f] [rcinfo* '()]) (define-pass process-ir! : Lexpand (ir) -> * () (Outer : Outer (ir situation) -> * () - [,rcinfo (values)] + [(recompile-info ,rcinfo) (set! rcinfo* (cons rcinfo rcinfo*)) (values)] [(group ,[] ,[]) (values)] [(visit-only ,[inner 'visit ->]) (values)] [(revisit-only ,[inner 'revisit ->]) (values)]) (Inner : Inner (ir situation) -> * () - [,lsrc ($oops who "encountered bare lsrc item while processing wpo file ~s" ($uncprep lsrc))] - [,linfo/ct (let ([node (record-ct-lib! linfo/ct #f situation ifn libs-visible?)]) - (when node (set! libs-in-file (cons node libs-in-file)))) - (values)] - [,linfo/rt (let ([node (record-rt-lib! linfo/rt #f situation ifn libs-visible?)]) - (when node (set! libs-in-file (cons node libs-in-file)))) - (values)] - [,pinfo - (unless capture-program? ($oops who "found program while reading library wpo file ~a" ifn)) - (when (eq? situation 'visit) ($oops who "encountered visit-only program while processing wpo file ~s" ifn)) - (when maybe-program ($oops who "found multiple programs in entry file ~a" ifn)) + [,lsrc ($oops outer-who "expected program or library form, but encountered top-level expression ~s processing file ~a" ($uncprep lsrc) ifn)] + [(library/ct-info ,linfo/ct) + (let ([node (record-ct-lib! linfo/ct #f ifn libs-visible?)]) + (when node (set! libs-in-file (cons node libs-in-file)))) + (values)] + [(library/rt-info ,linfo/rt) + (let ([node (record-rt-lib! linfo/rt #f ifn libs-visible?)]) + (when node (set! libs-in-file (cons node libs-in-file)))) + (values)] + [(program-info ,pinfo) + (unless capture-program? ($oops outer-who "found program while reading library wpo file ~a" ifn)) + (when (eq? situation 'visit) ($oops outer-who "encountered visit-only program while processing file ~s" ifn)) + (when maybe-program ($oops outer-who "found multiple programs in entry file ~a" ifn)) (set! maybe-program (make-program-node pinfo)) (values)]) (Program : Program (ir situation) -> * () [(program ,uid ,body) - (unless capture-program? ($oops who "found program while reading library wpo file ~a" ifn)) - (when (eq? situation 'visit) ($oops who "encountered visit-only program while processing wpo file ~s" ifn)) - (unless maybe-program ($oops who "unable to locate program descriptor for ~s" uid)) + (unless capture-program? ($oops outer-who "found program while reading library wpo file ~a" ifn)) + (when (eq? situation 'visit) ($oops outer-who "encountered visit-only program while processing file ~s" ifn)) + (unless maybe-program ($oops outer-who "unable to locate program descriptor for ~s" uid)) (unless (eq? uid (program-node-uid maybe-program)) - ($oops who "expected code for program uid ~s, but found code for program uid ~s" (program-node-uid maybe-program) uid)) + ($oops outer-who "expected code for program uid ~s, but found code for program uid ~s" (program-node-uid maybe-program) uid)) (program-node-ir-set! maybe-program ir) (values)]) (ctLibrary : ctLibrary (ir situation) -> * () - [(library/ct ,uid ,import-code ,visit-code) - (when (eq? situation 'revisit) ($oops who "encountered revisit-only compile-time library ~s while processing wpo file ~s" (lookup-path uid) ifn)) + [(library/ct ,uid (,export-id* ...) ,import-code ,visit-code) + (when (eq? situation 'revisit) ($oops outer-who "encountered revisit-only compile-time library ~s while processing file ~s" (lookup-path uid) ifn)) (record-ct-lib-ir! uid ir) (values)]) (rtLibrary : rtLibrary (ir situation) -> * () [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) - (when (eq? situation 'visit) ($oops who "encountered visit-only compile-time library ~s while processing wpo file ~s" (lookup-path uid) ifn)) + (when (eq? situation 'visit) ($oops outer-who "encountered visit-only run-time library ~s while processing file ~s" (lookup-path uid) ifn)) (record-rt-lib-ir! uid ir) (values)]) (when capture-wpo? (set! wpo* (cons ir wpo*))) @@ -920,27 +1008,31 @@ (unless (library-node-rtir node) ($oops who "missing run-time code for ~s" (library-node-path node)))) libs-in-file) - (values maybe-program libs-in-file)))) + (values maybe-program libs-in-file rcinfo*)))) (define record-ct-lib! - (lambda (linfo/ct binary? situation ifn libs-visible?) - (when (eq? situation 'revisit) ($oops who "encountered revisit-only compile-time library ~s while processing file ~s" (library-info-path linfo/ct) ifn)) + (lambda (linfo/ct binary? ifn libs-visible?) (let* ([uid (library-info-uid linfo/ct)] [cell (symbol-hashtable-cell libs uid #f)] [node (cdr cell)]) (if node - (begin (unless (library-node-ctinfo node) (library-node-ctinfo-set! node linfo/ct)) #f) - (let ([node (make-library-node binary? linfo/ct #f (or libs-visible? binary?))]) + (if (library-node-ctinfo node) + ($oops who "encountered library ~s in ~a, but had already encountered it in ~a" + (library-info-path linfo/ct) ifn (library-node-fn node)) + (begin (library-node-ctinfo-set! node linfo/ct) #f)) + (let ([node (make-library-node binary? linfo/ct #f (or libs-visible? binary?) ifn)]) (set-cdr! cell node) node))))) (define record-rt-lib! - (lambda (linfo/rt binary? situation ifn libs-visible?) - (when (eq? situation 'visit) ($oops who "encountered visit-only run-time library ~s while processing file ~s" (library-info-path linfo/rt) ifn)) + (lambda (linfo/rt binary? ifn libs-visible?) (let* ([uid (library-info-uid linfo/rt)] [cell (symbol-hashtable-cell libs uid #f)] [node (cdr cell)]) (if node - (begin (unless (library-node-rtinfo node) (library-node-rtinfo-set! node linfo/rt)) #f) - (let ([node (make-library-node binary? #f linfo/rt (or libs-visible? binary?))]) + (if (library-node-rtinfo node) + ($oops who "encountered library ~s in ~a, but had already encountered it in ~a" + (library-info-path linfo/rt) ifn (library-node-fn node)) + (begin (library-node-rtinfo-set! node linfo/rt) #f)) + (let ([node (make-library-node binary? #f linfo/rt (or libs-visible? binary?) ifn)]) (set-cdr! cell node) node))))) (define record-ct-lib-ir! @@ -970,16 +1062,26 @@ ($oops who "~s does not define expected compilation instance of library ~s" fn path)) (for-each chase-library-dependencies! node*)))])))) (define find-dependencies - (lambda (req*) - (map (lambda (req) - (let ([node (symbol-hashtable-ref libs (libreq-uid req) #f)]) - (node-use-count-set! node (fx+ (node-use-count node) 1)) - node)) - req*))) + (lambda (req* maybe-import-req*) + (let ([dep* (map (lambda (req) + (let ([node (symbol-hashtable-ref libs (libreq-uid req) #f)]) + (node-use-count-set! node (fx+ (node-use-count node) 1)) + node)) + req*)]) + (if maybe-import-req* + (fold-right (lambda (req dep*) + (let ([node (symbol-hashtable-ref libs (libreq-uid req) #f)]) + (if node + (begin + (node-use-count-set! node (fx+ (node-use-count node) 1)) + (cons node dep*)) + dep*))) + dep* maybe-import-req*) + dep*)))) (define chase-program-dependencies! (lambda (node) (for-each (lambda (req) (chase-library req libs-visible?)) (program-node-invoke-req* node)) - (node-depend*-set! node (find-dependencies (program-node-invoke-req* node))))) + (node-depend*-set! node (find-dependencies (program-node-invoke-req* node) #f)))) (define chase-library-dependencies! (lambda (node) (if (library-node-visible? node) @@ -992,14 +1094,18 @@ (lambda (req) (chase-library req (library-node-visible? node))) (library-node-invoke-req* node))) (unless (node-depend* node) - (node-depend*-set! node (find-dependencies (library-node-invoke-req* node)))))) - (let-values ([(maybe-program node*) (process-ir*! ir* ifn capture-program? libs-visible?)]) + (node-depend*-set! node + (find-dependencies + (library-node-invoke-req* node) + (and (library-node-visible? node) (library-node-import-req* node))))))) + (let-values ([(maybe-program node* rcinfo*) (process-ir*! ir* ifn capture-program? libs-visible?)]) (when capture-program? (unless maybe-program ($oops who "missing entry program in file ~a" ifn)) (unless (program-node-ir maybe-program) ($oops who "loading ~a did not define expected program pieces" ifn)) (chase-program-dependencies! maybe-program)) (for-each chase-library-dependencies! node*) - (values maybe-program (filter library-node-visible? (vector->list (hashtable-values libs))) wpo*))))) + (let-values ([(visible* invisible*) (partition library-node-visible? (vector->list (hashtable-values libs)))]) + (values maybe-program visible* invisible* rcinfo* wpo*)))))) (define topological-sort (lambda (program-entry library-entry*) @@ -1023,30 +1129,17 @@ (define build-install-library/ct-code (lambda (node) (nanopass-case (Lexpand ctLibrary) (library-node-ctir node) - [(library/ct ,uid ,import-code ,visit-code) - ($build-install-library/ct-code uid - (if (library-node-visible? node) import-code void-pr) - (if (library-node-visible? node) visit-code void-pr))]))) + [(library/ct ,uid (,export-id* ...) ,import-code ,visit-code) + (if (library-node-visible? node) + ($build-install-library/ct-code uid export-id* import-code visit-code) + void-pr)]))) (define build-void (let ([void-rec `(quote ,(void))]) (lambda () void-rec))) - (define build-cluster* - (lambda (node*) - (define (s-entry/binary node* rcluster*) - (if (null? node*) - (reverse rcluster*) - (let ([node (car node*)]) - (if (library-node-binary? node) - (s-entry/binary (cdr node*) rcluster*) - (s-source (cdr node*) (list node) rcluster*))))) - (define (s-source node* rnode* rcluster*) - (if (null? node*) - (reverse (cons (reverse rnode*) rcluster*)) - (let ([node (car node*)]) - (if (library-node-binary? node) - (s-entry/binary (cdr node*) (cons (reverse rnode*) rcluster*)) - (s-source (cdr node*) (cons node rnode*) rcluster*))))) - (s-entry/binary node* '()))) + (define gen-var (lambda (sym) (make-prelex sym 0 #f #f))) + (define build-let + (lambda (ids exprs body) + `(call ,(make-preinfo) ,(build-lambda ids body) ,exprs ...))) (define build-lambda (lambda (ids body) @@ -1062,17 +1155,69 @@ (syntax-rules () [(_ ?name ?arg ...) (build-call (lookup-primref 3 ?name) ?arg ...)])) + (define-syntax build-primref + (syntax-rules () + [(_ ?level ?name) (lookup-primref ?level ?name)])) + (define build-install-library/rt-code (lambda (node thunk) (build-primcall '$install-library/rt-code `(quote ,(library-node-uid node)) thunk))) (define-pass patch : Lsrc (ir env) -> Lsrc () + (definitions + (define with-initialized-ids + (lambda (old-id* proc) + (let ([new-id* (map (lambda (old-id) + (let ([new-id (make-prelex + (prelex-name old-id) + (let ([flags (prelex-flags old-id)]) + (fxlogor + (fxlogand flags (constant prelex-sticky-mask)) + (fxsll (fxlogand flags (constant prelex-is-mask)) + (constant prelex-was-flags-offset)))) + (prelex-source old-id) + #f)]) + (prelex-operand-set! old-id new-id) + new-id)) + old-id*)]) + (let-values ([v* (proc new-id*)]) + (for-each (lambda (old-id) (prelex-operand-set! old-id #f)) old-id*) + (apply values v*))))) + (define build-ref + (case-lambda + [(x) (build-ref #f x)] + [(src x) + (let ([x (prelex-operand x)]) + (safe-assert (prelex? x)) + (if (prelex-referenced x) + (set-prelex-multiply-referenced! x #t) + (set-prelex-referenced! x #t)) + `(ref ,src ,x))]))) (Expr : Expr (ir) -> Expr () + [(ref ,maybe-src ,x) (build-ref maybe-src x)] [(call ,preinfo ,pr (quote ,d)) (guard (eq? (primref-name pr) '$top-level-value) (symbol? d)) (cond - [(symbol-hashtable-ref env d #f) => (lambda (x) `(ref ,(preinfo-src preinfo) ,x))] - [else ir])])) + [(symbol-hashtable-ref env d #f) => (lambda (x) (build-ref (preinfo-src preinfo) x))] + [else ir])] + [(set! ,maybe-src ,x ,[e]) + (let ([x (prelex-operand x)]) + (safe-assert (prelex? x)) + (set-prelex-assigned! x #t) + `(set! ,maybe-src ,x ,e))] + [(letrec ([,x* ,e*] ...) ,body) + (with-initialized-ids x* + (lambda (x*) + `(letrec ([,x* ,(map Expr e*)] ...) ,(Expr body))))] + [(letrec* ([,x* ,e*] ...) ,body) + (with-initialized-ids x* + (lambda (x*) + `(letrec* ([,x* ,(map Expr e*)] ...) ,(Expr body))))]) + (CaseLambdaClause : CaseLambdaClause (ir) -> CaseLambdaClause () + [(clause (,x* ...) ,interface ,body) + (with-initialized-ids x* + (lambda (x*) + `(clause (,x* ...) ,interface ,(Expr body))))])) (define build-top-level-set!* (lambda (node) @@ -1082,87 +1227,81 @@ (lambda (dl db dv body) (if dl `(seq ,(build-primcall '$set-top-level-value! `(quote ,dl) - ;; not using build-ref here because we don't want to change the ref/multiply refed flags `(cte-optimization-loc ,db (ref #f ,dv))) ,body) body)) (build-void) dl* db* dv*)]))) (define make-patch-env - (lambda (node*) + (lambda (cluster*) (let ([patch-env (make-hashtable symbol-hash eq?)]) (for-each - (lambda (node) - (unless (library-node-binary? node) - (nanopass-case (Lexpand rtLibrary) (library-node-rtir node) - [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) - (for-each (lambda (label var) - (when label - (symbol-hashtable-set! patch-env label var))) - dl* dv*)]))) - node*) + (lambda (cluster) + (for-each + (lambda (node) + (unless (library-node-binary? node) + (nanopass-case (Lexpand rtLibrary) (library-node-rtir node) + [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) + (for-each (lambda (label var) + (when label + (symbol-hashtable-set! patch-env label var))) + dl* dv*)]))) + cluster)) + cluster*) patch-env))) (define build-combined-program-ir (lambda (program node*) - (let ([patch-env (make-patch-env node*)]) - (fold-right - (lambda (node combined-body) - (if (library-node-binary? node) - `(seq - ,(build-primcall '$invoke-library - `(quote ,(library-node-path node)) - `(quote ,(library-node-version node)) - `(quote ,(library-node-uid node))) - ,combined-body) - (nanopass-case (Lexpand rtLibrary) (library-node-rtir node) - [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) - `(letrec* ([,dv* ,(map (lambda (de) (patch de patch-env)) de*)] ...) - (seq ,(patch body patch-env) - (seq - ,(build-install-library/rt-code node - (if (library-node-visible? node) - (build-lambda '() (build-top-level-set!* node)) - void-pr)) - ,combined-body)))]))) - (nanopass-case (Lexpand Program) (program-node-ir program) - [(program ,uid ,body) (patch body patch-env)]) - node*)))) + `(seq + ,(build-primcall 'for-each + (build-primref 3 '$mark-pending!) + `(quote ,(map library-node-uid (remp library-node-binary? node*)))) + ,(patch + (fold-right + (lambda (node combined-body) + (if (library-node-binary? node) + `(seq + ,(build-primcall '$invoke-library + `(quote ,(library-node-path node)) + `(quote ,(library-node-version node)) + `(quote ,(library-node-uid node))) + ,combined-body) + (nanopass-case (Lexpand rtLibrary) (library-node-rtir node) + [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) + `(letrec* ([,dv* ,de*] ...) + (seq ,body + (seq + ,(build-install-library/rt-code node + (if (library-node-visible? node) + (build-lambda '() (build-top-level-set!* node)) + void-pr)) + ,combined-body)))]))) + (nanopass-case (Lexpand Program) (program-node-ir program) + [(program ,uid ,body) body]) + node*) + (make-patch-env (list node*)))))) (define build-combined-library-ir - (lambda (node*) - (define gen-var (lambda (sym) (make-prelex sym 0 #f #f))) - (define build-let - (lambda (ids exprs body) - `(call ,(make-preinfo) ,(build-lambda ids body) ,exprs ...))) - (define build-ref - (lambda (x) - (when (prelex-referenced x) - (set-prelex-multiply-referenced! x #t)) - (set-prelex-referenced! x #t) - `(ref #f ,x))) - (define build-set! - (lambda (x e) - (set-prelex-assigned! x #t) - `(set! #f ,x ,e))) + (lambda (cluster*) (define build-mark-invoked! (lambda (node) (build-primcall '$mark-invoked! `(quote ,(library-node-uid node))))) - (let ([patch-env (make-patch-env node*)]) - (define build-cluster - (lambda (node* cluster-body) - (fold-right - (lambda (node cluster-body) - (nanopass-case (Lexpand rtLibrary) (library-node-rtir node) - [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) - `(letrec* ([,dv* ,(map (lambda (de) (patch de patch-env)) de*)] ...) - (seq ,(patch body patch-env) - (seq - ,(if (library-node-visible? node) - `(seq ,(build-top-level-set!* node) ,(build-mark-invoked! node)) - (build-mark-invoked! node)) - ,cluster-body)))])) - cluster-body node*))) + + (define build-cluster + (lambda (node* cluster-body) + (fold-right + (lambda (node cluster-body) + (nanopass-case (Lexpand rtLibrary) (library-node-rtir node) + [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) + `(letrec* ([,dv* ,de*] ...) + (seq ,body + (seq + ,(if (library-node-visible? node) + `(seq ,(build-top-level-set!* node) ,(build-mark-invoked! node)) + (build-mark-invoked! node)) + ,cluster-body)))])) + cluster-body node*))) + (patch ; example: D imports C; C imports A, B; B imports A; A imports nothing ; have wpos for D, A, B; obj for C ; (let ([lib-f (void)]) @@ -1186,143 +1325,219 @@ ; ($install-library/rt-code 'B-uid (lambda () (lib-f 0))) ; ($install-library/rt-code 'D-uid (lambda () (lib-f 1))) ; (void)) - (let ([cluster* (build-cluster* node*)] [lib-f (gen-var 'lib-f)]) + (let ([lib-f (gen-var 'lib-f)]) (let ([cluster-idx* (enumerate cluster*)]) (build-let (list lib-f) (list (build-void)) `(seq - ,(build-set! lib-f - (let f ([cluster* cluster*] [cluster-idx* cluster-idx*]) + (set! #f ,lib-f + ,(let f ([cluster* cluster*] [cluster-idx* cluster-idx*]) (let ([idx (gen-var 'idx)]) (build-lambda (list idx) (build-cluster (car cluster*) (let ([cluster* (cdr cluster*)]) (if (null? cluster*) (let ([idx (gen-var 'idx)]) - (build-set! lib-f (build-lambda (list idx) (build-void)))) + `(set! #f ,lib-f ,(build-lambda (list idx) (build-void)))) (let ([t (gen-var 't)]) (build-let (list t) (list (f cluster* (cdr cluster-idx*))) - `(if ,(build-primcall 'eqv? (build-ref idx) `(quote ,(car cluster-idx*))) - ,(build-set! lib-f (build-ref t)) - ,(build-call (build-ref t) (build-ref idx)))))))))))) + `(if ,(build-primcall 'eqv? `(ref #f ,idx) `(quote ,(car cluster-idx*))) + (set! #f ,lib-f (ref #f ,t)) + ,(build-call `(ref #f ,t) `(ref #f ,idx)))))))))))) ,(fold-right (lambda (cluster cluster-idx body) (fold-right (lambda (node body) `(seq ,(build-install-library/rt-code node (if (library-node-visible? node) (build-lambda '() - (build-call (build-ref lib-f) `(quote ,cluster-idx))) + (build-call `(ref #f ,lib-f) `(quote ,cluster-idx))) void-pr)) ,body)) body cluster)) - (build-void) cluster* cluster-idx*))))))))) + (build-void) cluster* cluster-idx*))))) + (make-patch-env cluster*))))) (with-output-language (Lexpand Outer) - (define add-library-records - (lambda (node* visit-lib* body) + (define add-recompile-info + (lambda (rcinfo* body) + (fold-left + (lambda (body rcinfo) + `(group (recompile-info ,rcinfo) ,body)) + body + rcinfo*))) + + (define requirements-join + (lambda (req* maybe-collected-invoke-req*) + (define (->libreq node) + (make-libreq + (library-node-path node) + (library-node-version node) + (library-node-uid node))) + (if maybe-collected-invoke-req* + (let f ([invoke-req* maybe-collected-invoke-req*]) + (if (null? invoke-req*) + req* + (let* ([invoke-req (car invoke-req*)] [uid (library-node-uid invoke-req)]) + (if (memp (lambda (req) (eq? (libreq-uid req) uid)) req*) + (f (cdr invoke-req*)) + (cons (->libreq invoke-req) (f (cdr invoke-req*))))))) + req*))) + + (define add-library/rt-records + (lambda (maybe-ht node* body) (fold-left (lambda (body node) (if (library-node-binary? node) body - `(group (revisit-only - ,(let ([info (library-node-rtinfo node)]) - (make-library/rt-info - (library-info-path info) - (library-info-version info) - (library-info-uid info) - (library/rt-info-invoke-req* info)))) - ,body))) - (fold-left - (lambda (body visit-lib) - (if (library-node-binary? visit-lib) - body + (let* ([info (library-node-rtinfo node)] + [uid (library-info-uid info)]) + `(group (revisit-only + (library/rt-info + ,(make-library/rt-info + (library-info-path info) + (library-info-version info) + uid + (library-node-visible? node) + (requirements-join + (library/rt-info-invoke-req* info) + (and maybe-ht (symbol-hashtable-ref maybe-ht uid #f)))))) + ,body)))) + body node*))) + + (define add-library/ct-records + (lambda (maybe-ht visit-lib* body) + (fold-left + (lambda (body visit-lib) + (if (library-node-binary? visit-lib) + body + (let* ([info (library-node-ctinfo visit-lib)] + [uid (library-info-uid info)]) `(group (visit-only - ,(let ([info (library-node-ctinfo visit-lib)]) - (make-library/ct-info + (library/ct-info + ,(make-library/ct-info (library-info-path info) (library-info-version info) - (library-info-uid info) - (library/ct-info-include-req* info) - (library/ct-info-import-req* info) + uid + (library-node-visible? visit-lib) + (requirements-join + (library/ct-info-import-req* info) + (and maybe-ht (symbol-hashtable-ref maybe-ht uid #f))) (library/ct-info-visit-visit-req* info) - (library/ct-info-visit-req* info) - (if (library-node-visible? visit-lib) - (library/ct-info-clo* info) - '())))) - ,body))) - body visit-lib*) - node*))) + (library/ct-info-visit-req* info)))) + ,body)))) + body visit-lib*))) + + (define add-program-record + (lambda (node body) + `(group (revisit-only + (program-info + ,(make-program-info + (program-node-uid node) + ; NB: possibly list direct or indirect binary library reqs here + (program-node-invoke-req* node)))) + ,body))) (define add-visit-lib-install* (lambda (visit-lib* body) (fold-left (lambda (body visit-lib) - (if (library-node-binary? visit-lib) - body - `(group (visit-only ,(build-install-library/ct-code visit-lib)) ,body))) - body visit-lib*))) + (if (library-node-binary? visit-lib) + body + `(group (visit-only ,(build-install-library/ct-code visit-lib)) ,body))) + body visit-lib*))) + + (define build-cluster* + (lambda (node* ht) + (define (add-deps! node deps) + (symbol-hashtable-set! ht (library-node-uid node) deps)) + (define (s-entry/binary node* rcluster* deps) + (if (null? node*) + (reverse rcluster*) + (let ([node (car node*)]) + (if (library-node-binary? node) + (s-entry/binary (cdr node*) rcluster* (cons node deps)) + (begin + (add-deps! node deps) + (s-source (cdr node*) (list node) rcluster* (list node))))))) + (define (s-source node* rnode* rcluster* deps) + (if (null? node*) + (reverse (cons (reverse rnode*) rcluster*)) + (let ([node (car node*)]) + (if (library-node-binary? node) + (s-entry/binary (cdr node*) (cons (reverse rnode*) rcluster*) + (cons node deps)) + (begin + (add-deps! node deps) + (s-source (cdr node*) (cons node rnode*) rcluster* deps)))))) + (s-entry/binary node* '() '()))) (define build-program-body - (lambda (program-entry node* visit-lib*) - (add-library-records node* visit-lib* - (add-visit-lib-install* visit-lib* - `(revisit-only ,(build-combined-program-ir program-entry node*)))))) + (lambda (program-entry node* visit-lib* invisible* rcinfo*) + (add-recompile-info rcinfo* + (add-library/rt-records #f node* + (add-library/ct-records #f visit-lib* + (add-library/ct-records #f invisible* + (add-program-record program-entry + (add-visit-lib-install* visit-lib* + (add-visit-lib-install* invisible* + `(revisit-only ,(build-combined-program-ir program-entry node*))))))))))) (define build-library-body - (lambda (node* visit-lib*) - (add-library-records node* visit-lib* - (add-visit-lib-install* visit-lib* - `(revisit-only ,(build-combined-library-ir node*))))))) + (lambda (node* visit-lib* rcinfo*) + (let* ([collected-req-ht (make-hashtable symbol-hash eq?)] + [cluster* (build-cluster* node* collected-req-ht)]) + (add-recompile-info rcinfo* + (add-library/rt-records collected-req-ht node* + (add-library/ct-records collected-req-ht visit-lib* + (add-visit-lib-install* visit-lib* + `(revisit-only ,(build-combined-library-ir cluster*)))))))))) (define finish-compile (lambda (who msg ifn ofn hash-bang-line x1) - (let ([op ($open-file-output-port who ofn (file-options replace))]) - (on-reset (delete-file ofn #f) - (on-reset (close-port op) - (when hash-bang-line (put-bytevector op hash-bang-line)) - (when (compile-compressed) (port-file-compressed! op)) - (parameterize ([$target-machine (constant machine-type-name)] - ; dummy sfd for block-profile optimization - [$sfd (source-file-descriptor ifn #xc7c7c7)] - [$block-counter 0]) - (emit-header op (constant machine-type)) - (compile-file-help1 x1 op msg))) - (close-port op))))) + (with-object-file who ofn + (lambda (op) + (with-coverage-file who ofn + (lambda (source-table) + (when hash-bang-line (put-bytevector op hash-bang-line)) + (parameterize ([$target-machine (constant machine-type-name)] + ; dummy sfd for block-profile optimization + [$sfd (make-source-file-descriptor ifn #xc7 #xc7c7)] + [$block-counter 0]) + (when source-table ($insert-profile-src! source-table x1)) + (emit-header op (constant scheme-version) (constant machine-type)) + (let-values ([(rcinfo* lpinfo* final*) (compile-file-help1 x1 msg)]) + (compile-file-help2 op (list rcinfo*) (list lpinfo*) (list final*)))))))))) (define write-wpo-file (lambda (who ofn ir*) - (when (generate-wpo-files) - (let* ([wpoout (out->wpo ofn)] - [wpoop ($open-file-output-port who wpoout - (if (compile-compressed) - (file-options replace compressed) - (file-options replace)))]) - (on-reset (delete-file wpoout #f) - (on-reset (close-port wpoop) - (emit-header wpoop (host-machine-type)) - ($with-fasl-target (host-machine-type) - (lambda () - (parameterize ([$target-machine (machine-type)]) - (let ([t ($fasl-table)]) - (let ([x (fold-left (lambda (outer ir) (with-output-language (Lexpand Outer) `(group ,outer ,ir))) - (car ir*) (cdr ir*))]) - ($fasl-enter x t #t) - ($fasl-start wpoop t (lambda (p) ($fasl-out x p t #t))))))))) - (close-port wpoop)))))) + (with-wpo-file who ofn + (lambda (wpoop) + (when wpoop + (emit-header wpoop (constant scheme-version) (host-machine-type)) + ($with-fasl-target (host-machine-type) + (lambda () + (parameterize ([$target-machine (machine-type)]) + (let ([t ($fasl-table)]) + (let ([x (fold-left (lambda (outer ir) (with-output-language (Lexpand Outer) `(group ,outer ,ir))) + (car ir*) (cdr ir*))]) + ($fasl-enter x t (constant annotation-all)) + ($fasl-start wpoop t (constant fasl-type-visit-revisit) (lambda (p) ($fasl-out x p t (constant annotation-all)))))))))))))) (define build-required-library-list (lambda (node* visit-lib*) - (fold-left (lambda (ls visit-lib) - (if (library-node-binary? visit-lib) - (let ([path (library-node-path visit-lib)]) - (if (member path ls) - ls - (cons path ls))) - ls)) - (fold-left (lambda (ls node) - (if (library-node-binary? node) - (cons (library-node-path node) ls) - ls)) - '() node*) - visit-lib*))) + (let ([ht (make-hashtable symbol-hash eq?)]) + (fold-left + (lambda (ls node) + (if (and (library-node-binary? node) (not (symbol-hashtable-contains? ht (library-node-uid node)))) + (cons (library-node-path node) ls) + ls)) + (fold-left + (lambda (ls node) + (if (library-node-binary? node) + (begin + (symbol-hashtable-set! ht (library-node-uid node) #t) + (cons (library-node-path node) ls)) + ls)) + '() node*) + visit-lib*)))) ;; TODO: Add automatic recompliation ala scheme import/load-library (set-who! compile-whole-program @@ -1333,12 +1548,12 @@ (unless (string? ifn) ($oops who "~s is not a string" ifn)) (unless (string? ofn) ($oops who "~s is not a string" ofn)) (let*-values ([(hash-bang-line ir*) (read-input-file who ifn)] - [(program-entry lib* no-wpo*) (build-graph who ir* ifn #t #f libs-visible?)]) + [(program-entry lib* invisible* rcinfo* no-wpo*) (build-graph who ir* ifn #t #f libs-visible?)]) (safe-assert program-entry) (safe-assert (null? no-wpo*)) (let ([node* (topological-sort program-entry lib*)]) (finish-compile who "whole program" ifn ofn hash-bang-line - (build-program-body program-entry node* lib*)) + (build-program-body program-entry node* lib* invisible* rcinfo*)) (build-required-library-list node* lib*)))]))) (set-who! compile-whole-library @@ -1346,14 +1561,15 @@ (unless (string? ifn) ($oops who "~s is not a string" ifn)) (unless (string? ofn) ($oops who "~s is not a string" ofn)) (let*-values ([(hash-bang-line ir*) (read-input-file who ifn)] - [(no-program lib* wpo*) (build-graph who ir* ifn #f (generate-wpo-files) #t)]) + [(no-program lib* invisible* rcinfo* wpo*) (build-graph who ir* ifn #f (generate-wpo-files) #t)]) (safe-assert (not no-program)) + (safe-assert (null? invisible*)) (safe-assert (or (not (generate-wpo-files)) (not (null? wpo*)))) (when (null? lib*) ($oops "did not find libraries in input file ~s" ifn)) (let ([node* (topological-sort #f lib*)]) (write-wpo-file who ofn wpo*) (finish-compile who "whole library" ifn ofn hash-bang-line - (build-library-body node* lib*)) + (build-library-body node* lib* rcinfo*)) (build-required-library-list node* lib*)))))) (set! $c-make-code @@ -1392,8 +1608,8 @@ (Inner : Inner (ir) -> Expr () [,lsrc lsrc] [(program ,uid ,body) ($build-invoke-program uid body)] - [(library/ct ,uid ,import-code ,visit-code) - ($build-install-library/ct-code uid import-code visit-code)] + [(library/ct ,uid (,export-id* ...) ,import-code ,visit-code) + ($build-install-library/ct-code uid export-id* import-code visit-code)] [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) ($build-install-library/rt-code uid dl* db* dv* de* body)] [else (sorry! who "unexpected Lexpand record ~s" ir)]) @@ -1403,22 +1619,25 @@ [else (sorry! who "unexpected Lexpand record ~s" ir)])) (unless (environment? env-spec) ($oops who "~s is not an environment" env-spec)) ((parameterize ([$target-machine (constant machine-type-name)] [$sfd #f]) - (let* ([x1 (expand-Lexpand (expand x0 env-spec #t))] + (let* ([x1 (expand-Lexpand ($pass-time 'expand (lambda () (expand x0 env-spec #t))))] [waste ($uncprep x1 #t)] ; populate preinfo sexpr fields [waste (when (and (expand-output) (not ($noexpand? x0))) - (pretty-print ($uncprep x1) (expand-output)))] - [x2 ($cpvalid x1)] + (pretty-print ($uncprep x1) (expand-output)) + (flush-output-port (expand-output)))] + [x2 ($pass-time 'cpvalid (lambda () ($cpvalid x1)))] [x2a (let ([cpletrec-ran? #f]) (let ([x ((run-cp0) (lambda (x) (set! cpletrec-ran? #t) - (let ([x ($cp0 x)]) - ($cpletrec x))) + (let ([x ($pass-time 'cp0 (lambda () ($cp0 x)))]) + ($pass-time 'cpletrec (lambda () ($cpletrec x))))) x2)]) - (if cpletrec-ran? x ($cpletrec x))))] - [x2b ($cpcheck x2a)]) + (if cpletrec-ran? x ($pass-time 'cpletrec (lambda () ($cpletrec x))))))] + [x2b ($pass-time 'cpcheck (lambda () ($cpcheck x2a)))] + [x2b ($pass-time 'cpcommonize (lambda () ($cpcommonize x2b)))]) (when (and (expand/optimize-output) (not ($noexpand? x0))) - (pretty-print ($uncprep x2b) (expand/optimize-output))) + (pretty-print ($uncprep x2b) (expand/optimize-output)) + (flush-output-port (expand/optimize-output))) (if (and (compile-interpret-simple) (not ($assembly-output)) (cheat? x2b)) @@ -1432,16 +1651,17 @@ (let () (define emit-boot-header (lambda (op machine bootfiles) - (emit-header op (constant machine-type) (map path-root (map path-last bootfiles))) + (emit-header op (constant scheme-version) (constant machine-type) (map path-root (map path-last bootfiles))) (when (null? bootfiles) (parameterize ([$target-machine machine] [$sfd #f]) - (c-print-fasl ($np-boot-code 'error-invoke) op) - (c-print-fasl ($np-boot-code 'invoke) op) + (c-print-fasl ($np-boot-code 'error-invoke) op (constant fasl-type-visit-revisit)) + (c-print-fasl ($np-boot-code 'invoke) op (constant fasl-type-visit-revisit)) ($fasl-base-rtd #!base-rtd op))))) (define do-make-boot-file (lambda (who outfn machine bootfile* infn*) (unless (string? outfn) ($oops who "~s is not a string" outfn)) + (unless (symbol? machine) ($oops who "~s is not a symbol" machine)) (unless (eq? machine (constant machine-type-name)) ($oops who "compiler for ~s is not loaded" machine)) (unless (and (list? bootfile*) (andmap string? bootfile*)) @@ -1449,49 +1669,54 @@ (for-each (lambda (infn) (unless (string? infn) ($oops who "~s is not a string" infn))) infn*) - (let ([op ($open-file-output-port who outfn - (if (compile-compressed) - (file-options replace compressed) - (file-options replace)))]) - (on-reset (delete-file outfn #f) - (on-reset (close-port op) - (unless (and (eq? who 'make-boot-file) (null? bootfile*)) - (emit-boot-header op machine bootfile*)) - (for-each - (lambda (infn) - (let ([ip ($open-file-input-port who infn (file-options compressed))]) - (on-reset (close-port ip) - (if ($compiled-file-header? ip) - (let* ([bufsiz (file-buffer-size)] [buf (make-bytevector bufsiz)]) - (let loop () - (let ([n (get-bytevector-n! ip buf 0 bufsiz)]) - (unless (eof-object? n) - (put-bytevector op buf 0 n) - (loop))))) - (let ([sfd ($source-file-descriptor infn ip)]) - ; whack ip so close-port calls close the text port - (set! ip (transcoded-port ip (current-transcoder))) - (compile-file-help op #f #f machine sfd ($make-read ip sfd 0) outfn)))) - (close-port ip))) - infn*)) - (close-port op))))) + (with-object-file who outfn + (lambda (op) + (with-coverage-file who outfn + (lambda (source-table) + (unless (and (eq? who 'make-boot-file) (null? bootfile*)) + (emit-boot-header op machine bootfile*)) + (for-each + (lambda (infn) + (let ([ip ($open-file-input-port who infn)]) + (on-reset (close-port ip) + (if ($compiled-file-header? ip) + (begin + (let* ([bufsiz (file-buffer-size)] [buf (make-bytevector bufsiz)]) + (let loop () + (let ([n (get-bytevector-n! ip buf 0 bufsiz)]) + (unless (eof-object? n) + (put-bytevector op buf 0 n) + (loop))))) + (when source-table + (guard (c [else (void)]) + (let ([ip ($open-file-input-port who (new-extension "covin" infn) + (file-options compressed) + (buffer-mode block) + (current-transcoder))]) + (on-reset (close-port ip) + (get-source-table! ip source-table)) + (close-port ip))))) + (let ([sfd ($source-file-descriptor infn ip)]) + ; whack ip so close-port calls close the text port + (set! ip (transcoded-port ip (current-transcoder))) + (compile-file-help op #f #f source-table machine sfd ($make-read ip sfd 0) outfn)))) + (close-port ip))) + infn*))))))) (define do-make-boot-header ; create boot loader (invoke) for entry into Scheme from C (lambda (who out machine bootfiles) (unless (string? out) ($oops who "~s is not a string" out)) + (unless (symbol? machine) ($oops who "~s is not a symbol" machine)) (unless (eq? machine (constant machine-type-name)) ($oops who "compiler for ~s is not loaded" machine)) (for-each (lambda (x) (unless (string? x) ($oops who "~s is not a string" x))) - bootfiles) - (let ([op ($open-file-output-port who out - (if (compile-compressed) - (file-options replace compressed) - (file-options replace)))]) - (emit-boot-header op machine bootfiles) - (close-port op)))) + bootfiles) + (with-object-file who out + (lambda (op) + (emit-boot-header op machine bootfiles))))) (set-who! make-boot-file (lambda (outfn bootfile* . infn*) @@ -1512,65 +1737,153 @@ (lambda (out machine . bootfiles) (do-make-boot-header who out machine bootfiles)))) +(let () + (define (libreq-hash x) (symbol-hash (libreq-uid x))) + (define (libreq=? x y) (eq? (libreq-uid x) (libreq-uid y))) + (define do-concatenate-object-files + (lambda (who outfn infn*) + (unless (string? outfn) ($oops who "~s is not a string" outfn)) + (for-each (lambda (infn) (unless (string? infn) ($oops who "~s is not a string" infn))) infn*) + (let ([import-ht (make-hashtable libreq-hash libreq=?)] + [include-ht (make-hashtable string-hash string=?)]) + (let in-loop ([infn* infn*] [rip* '()]) + (if (null? infn*) + (let ([ip* (reverse rip*)]) + (with-object-file who outfn + (lambda (op) + (emit-header op (constant scheme-version) (constant machine-type)) + (c-print-fasl `(object ,(make-recompile-info + (vector->list (hashtable-keys import-ht)) + (vector->list (hashtable-keys include-ht)))) + op (constant fasl-type-visit-revisit)) + (for-each (lambda (ip) + (let loop () ;; NB: This loop consumes one entry past the last library/program info record, + ;; which we presume is the #t end-of-header marker. + (let ([ty (lookahead-u8 ip)]) + (unless (eof-object? ty) + ;; perhaps should verify ty here. + (let ([x (fasl-read ip)]) + (when (or (library-info? x) (program-info? x)) + (c-print-fasl `(object ,x) op ty) + (loop))))))) + ip*) + ;; inserting #t after lpinfo as an end-of-header marker + (c-print-fasl `(object #t) op (constant fasl-type-visit-revisit)) + (let* ([bufsiz (file-buffer-size)] [buf (make-bytevector bufsiz)]) + (for-each (lambda (ip) + (let loop () + (let ([n (get-bytevector-n! ip buf 0 bufsiz)]) + (unless (eof-object? n) + (put-bytevector op buf 0 n) + (loop)))) + (close-port ip)) + ip*))))) + (let* ([fn (car infn*)] + [ip ($open-file-input-port who fn)]) + (on-reset (close-port ip) + ;; NB: Does not currently support files beginning with a #! line. Add that here if desired. + (unless ($compiled-file-header? ip) ($oops who "missing header for compiled file ~s" fn)) + (let ([rcinfo (fasl-read ip)]) + (unless (recompile-info? rcinfo) ($oops who "expected recompile info at start of ~s, found ~a" fn rcinfo)) + (for-each + (lambda (x) + ;; NB: this could be enhanced to perform additional checks for compatible versions + (hashtable-set! import-ht x x)) + (recompile-info-import-req* rcinfo)) + (for-each + (lambda (x) (hashtable-set! include-ht x #t)) + (recompile-info-include-req* rcinfo)) + (in-loop (cdr infn*) (cons ip rip*)) + )))))))) + + (set-who! concatenate-object-files + (lambda (outfn infn0 . infn*) + (do-concatenate-object-files who outfn (cons infn0 infn*)))) + ) + (set-who! compile-port (rec compile-port (case-lambda - [(ip op) (compile-port ip op #f #f (constant machine-type-name) #f)] - [(ip op sfd) (compile-port ip op sfd #f (constant machine-type-name) #f)] - [(ip op sfd wpoop) (compile-port ip op sfd wpoop (constant machine-type-name) #f)] - [(ip op sfd wpoop machine) (compile-port ip op sfd wpoop machine #f)] - [(ip op sfd wpoop machine hostop) + [(ip op) (compile-port ip op #f)] + [(ip op sfd) (compile-port ip op sfd #f)] + [(ip op sfd wpoop) (compile-port ip op sfd wpoop #f)] + [(ip op sfd wpoop covop) (compile-port ip op sfd wpoop covop (constant machine-type-name))] + [(ip op sfd wpoop covop machine) (compile-port ip op sfd wpoop covop machine #f)] + [(ip op sfd wpoop covop machine hostop) (unless (and (input-port? ip) (textual-port? ip)) ($oops who "~s is not a textual input port" ip)) (unless (and (output-port? op) (binary-port? op)) ($oops who "~s is not a binary output port" op)) + (when ($port-flags-set? op (constant port-flag-compressed)) ($compressed-warning who op)) (when sfd (unless (source-file-descriptor? sfd) ($oops who "~s is not a source-file descriptor or #f" sfd))) (when wpoop (unless (and (output-port? wpoop) (binary-port? wpoop)) - ($oops who "~s is not a binary output port or #f" wpoop))) + ($oops who "~s is not a binary output port or #f" wpoop)) + (when ($port-flags-set? wpoop (constant port-flag-compressed)) ($compressed-warning who wpoop))) + (when covop + (unless (and (output-port? covop) (textual-port? covop)) + ($oops who "~s is not a textual output port or #f" covop))) + (unless (symbol? machine) ($oops who "~s is not a symbol" machine)) (unless (eq? machine (constant machine-type-name)) ($oops who "compiler for ~s is not loaded" machine)) (when hostop (unless (and (output-port? hostop) (binary-port? hostop)) - ($oops who "~s is not a binary output port or #f" hostop))) - (compile-file-help op hostop wpoop machine sfd ($make-read ip #f #f) #f)]))) + ($oops who "~s is not a binary output port or #f" hostop)) + (when ($port-flags-set? hostop (constant port-flag-compressed)) ($compressed-warning who hostop))) + (let ([source-table (and covop (make-source-table))]) + (let ([fp (and (port-has-port-position? ip) + (let ([fp (port-position ip)]) + (if ($port-flags-set? ip (constant port-flag-char-positions)) + fp + (and (eqv? fp 0) fp))))]) + (compile-file-help op hostop wpoop source-table machine sfd ($make-read ip sfd fp) #f) + (when covop (put-source-table covop source-table))))]))) (set-who! compile-to-port (rec compile-to-port (case-lambda - [(sexpr* op) (compile-to-port sexpr* op #f #f (constant machine-type-name) #f)] - [(sexpr* op sfd) (compile-to-port sexpr* op sfd #f (constant machine-type-name) #f)] - [(sexpr* op sfd wpoop) (compile-to-port sexpr* op sfd wpoop (constant machine-type-name) #f)] - [(sexpr* op sfd wpoop machine) (compile-to-port sexpr* op sfd wpoop machine #f)] - [(sexpr* op sfd wpoop machine hostop) (compile-to-port sexpr* op sfd wpoop machine hostop #f)] - [(sexpr* op sfd wpoop machine hostop ofn) + [(sexpr* op) (compile-to-port sexpr* op #f)] + [(sexpr* op sfd) (compile-to-port sexpr* op sfd #f)] + [(sexpr* op sfd wpoop) (compile-to-port sexpr* op sfd wpoop #f)] + [(sexpr* op sfd wpoop covop) (compile-to-port sexpr* op sfd wpoop covop (constant machine-type-name))] + [(sexpr* op sfd wpoop covop machine) (compile-to-port sexpr* op sfd wpoop covop machine #f)] + [(sexpr* op sfd wpoop covop machine hostop) (define do-compile-to-port (lambda () - (compile-file-help op hostop wpoop machine sfd - (lambda () - (if (null? sexpr*) - (eof-object) - (let ([x (car sexpr*)]) - (set! sexpr* (cdr sexpr*)) - x))) - ofn))) + (let ([source-table (and covop (make-source-table))]) + (compile-file-help op hostop wpoop source-table machine sfd + (lambda () + (if (null? sexpr*) + (eof-object) + (let ([x (car sexpr*)]) + (set! sexpr* (cdr sexpr*)) + x))) + (port-name op)) + (when covop (put-source-table covop source-table))))) (unless (list? sexpr*) ($oops who "~s is not a proper list" sexpr*)) (unless (and (output-port? op) (binary-port? op)) ($oops who "~s is not a binary output port" op)) + (when ($port-flags-set? op (constant port-flag-compressed)) ($compressed-warning who op)) (when sfd (unless (source-file-descriptor? sfd) ($oops who "~s is not a source-file descriptor or #f" sfd))) (when wpoop (unless (and (output-port? wpoop) (binary-port? wpoop)) - ($oops who "~s is not a binary output port or #f" wpoop))) + ($oops who "~s is not a binary output port or #f" wpoop)) + (when ($port-flags-set? wpoop (constant port-flag-compressed)) ($compressed-warning who wpoop))) + (when covop + (unless (and (output-port? covop) (textual-port? covop)) + ($oops who "~s is not a textual output port or #f" covop))) + (unless (symbol? machine) ($oops who "~s is not a symbol" machine)) (unless (eq? machine (constant machine-type-name)) ($oops who "compiler for ~s is not loaded" machine)) (when hostop (unless (and (output-port? hostop) (binary-port? hostop)) - ($oops who "~s is not a binary output port or #f" hostop))) + ($oops who "~s is not a binary output port or #f" hostop)) + (when ($port-flags-set? hostop (constant port-flag-compressed)) ($compressed-warning who hostop))) (if (and (= (length sexpr*) 1) (pair? (car sexpr*)) (eq? (caar sexpr*) 'top-level-program)) (let ([library-collector (make-parameter '())]) (parameterize ([$require-libraries library-collector]) @@ -1587,35 +1900,20 @@ [else (values in (format "~a.so" (path-root in)))]))) (define (do-compile-to-file who out hostout machine sfd do-read) - (let ([op ($open-file-output-port who out - (if (compile-compressed) - (file-options replace compressed) - (file-options replace)))]) - (on-reset (delete-file out #f) - (on-reset (close-port op) - (let ([hostop (and hostout - ($open-file-output-port who hostout - (if (compile-compressed) - (file-options replace compressed) - (file-options replace))))]) - (on-reset (when hostout (delete-file hostout #f)) - (on-reset (when hostop (close-port hostop)) - (let* ([wpoout (and (generate-wpo-files) (out->wpo out))] - [wpoop (and wpoout - ($open-file-output-port who wpoout - (if (compile-compressed) - (file-options replace compressed) - (file-options replace))))]) - (on-reset (when wpoout (delete-file wpoout #f)) - (on-reset (when wpoop (close-port wpoop)) - (compile-file-help op hostop wpoop machine sfd do-read out))) - (when wpoop (close-port wpoop)))) - (when hostop (close-port hostop))))) - (close-port op)))) + (with-object-file who out + (lambda (op) + (with-host-file who hostout + (lambda (hostop) + (with-wpo-file who out + (lambda (wpoop) + (with-coverage-file who out + (lambda (source-table) + (compile-file-help op hostop wpoop source-table machine sfd do-read out)))))))))) (define (do-compile-file who in out hostout machine r6rs?) (unless (string? in) ($oops who "~s is not a string" in)) (unless (string? out) ($oops who "~s is not a string" out)) + (unless (symbol? machine) ($oops who "~s is not a symbol" machine)) (unless (eq? machine (constant machine-type-name)) ($oops who "compiler for ~s is not loaded" machine)) (when (compile-file-message) (printf "compiling ~a with output to ~a~@[ (host output to ~a)~]\n" in out hostout)) (let ([ip ($open-file-input-port who in)]) @@ -1653,26 +1951,26 @@ (f (cons x form*)))))))) (unless (string? in) ($oops who "~s is not a string" in)) (unless (string? out) ($oops who "~s is not a string" out)) + (unless (symbol? machine) ($oops who "~s is not a symbol" machine)) (unless (eq? machine (constant machine-type-name)) ($oops who "compiler for ~s is not loaded" machine)) (when (compile-file-message) (printf "compiling ~a with output to ~a\n" in out)) (let ([ip ($open-file-input-port who in)]) (on-reset (close-port ip) (let ([sfd ($source-file-descriptor in ip)]) - ; whack existing ip so close-port calls close the text port + ; whack existing ip so close-port calls close the text port (set! ip (transcoded-port ip (current-transcoder))) (when r6rs? ($set-port-flags! ip (constant port-flag-r6rs))) (let ([start-pos (port-position ip)]) (if (and (eqv? (read-char ip) #\#) (eqv? (read-char ip) #\!) (memv (lookahead-char ip) '(#\space #\/))) - ; copy #! line. open output file w/o compression - (let ([op ($open-file-output-port who out (file-options replace))]) - (on-reset (delete-file out #f) - (on-reset (close-port op) - (let* ([wpoout (and (generate-wpo-files) (out->wpo out))] - [wpoop (and wpoout ($open-file-output-port who wpoout (file-options replace)))]) - (on-reset (when wpoout (delete-file wpoout #f)) - (on-reset (when wpoop (close-port wpoop)) + ; copy #! line + (with-object-file who out + (lambda (op) + (with-wpo-file who out + (lambda (wpoop) + (with-coverage-file who out + (lambda (source-table) (put-u8 op (char->integer #\#)) (put-u8 op (char->integer #\!)) (when wpoop (put-u8 wpoop (char->integer #\#))) @@ -1690,34 +1988,18 @@ (when wpoop (put-u8 wpoop n))) (let ([fp (+ fp 1)]) (if (char=? c #\newline) fp (loop fp)))))]) - ; compress remainder of file if requeseted - (when (compile-compressed) - (port-file-compressed! op) - (when wpoop (port-file-compressed! wpoop))) - (compile-file-help op #f wpoop machine sfd ((if r6rs? $make-read-program $make-read) ip sfd fp) out))) - (when wpoop (close-port wpoop))))) - (close-port op))) - ; no #! line. open output file w/ compression, if so directed - (let ([op ($open-file-output-port who out - (if (compile-compressed) - (file-options replace compressed) - (file-options replace)))]) - (on-reset (delete-file out #f) - (on-reset (close-port op) - (set-port-position! ip start-pos) - (let* ([wpoout (and (generate-wpo-files) (out->wpo out))] - [wpoop (and wpoout - ($open-file-output-port who wpoout - (if (compile-compressed) - (file-options replace compressed) - (file-options replace))))]) - (on-reset (when wpoout (delete-file wpoout #f)) - (on-reset (when wpoop (close-port wpoop)) - (compile-file-help op #f wpoop machine sfd ((if r6rs? $make-read-program $make-read) ip sfd 0) out)) - (when wpoop (close-port wpoop))))) - (close-port op))))))) + (compile-file-help op #f wpoop source-table machine sfd ((if r6rs? $make-read-program $make-read) ip sfd fp) out)))))))) + ; no #! line + (with-object-file who out + (lambda (op) + (set-port-position! ip start-pos) + (with-wpo-file who out + (lambda (wpoop) + (with-coverage-file who out + (lambda (source-table) + (compile-file-help op #f wpoop source-table machine sfd ((if r6rs? $make-read-program $make-read) ip sfd 0) out))))))))))) (close-port ip)) - (unless-feature windows (chmod out #o755))) + (unless-feature windows (chmod out #o755))) (set-who! compile-file (case-lambda diff -Nru chezscheme-9.5+dfsg/s/cp0.ss chezscheme-9.5.4+dfsg/s/cp0.ss --- chezscheme-9.5+dfsg/s/cp0.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cp0.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"cp0" ;;; cp0.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -933,7 +932,7 @@ [(seq ,e1 ,e2) (pure-call? e1 e2)] [else (pure-call? #f e)]))] [(quote ,d) #t] - [,pr #t] + [,pr (all-set? (prim-mask proc) (primref-flags pr))] [(case-lambda ,preinfo ,cl* ...) #t] [(if ,e1 ,e2 ,e3) (memoize (and (pure? e1) (pure? e2) (pure? e3)))] [(seq ,e1 ,e2) (memoize (and (pure? e1) (pure? e2)))] @@ -949,13 +948,13 @@ [(record-cd ,rcd ,rtd-expr ,e) (memoize (pure? e))] [(letrec ([,x* ,e*] ...) ,body) (memoize (and (andmap pure? e*) (pure? body)))] [(record-type ,rtd ,e) (memoize (pure? e))] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) (memoize (pure? e))] + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (memoize (pure? e))] [(letrec* ([,x* ,e*] ...) ,body) (memoize (and (andmap pure? e*) (pure? body)))] [(immutable-list (,e* ...) ,e) (memoize (and (andmap pure? e*) (pure? e)))] [(profile ,src) #t] [(cte-optimization-loc ,box ,e) (memoize (pure? e))] [(moi) #t] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) (memoize (pure? e))] + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (memoize (pure? e))] [(pariah) #t] [else ($oops who "unrecognized record ~s" e)])))) @@ -991,7 +990,7 @@ [(seq ,e1 ,e2) (ivory-call? e1 e2)] [else (ivory-call? #f e)]))] [(quote ,d) #t] - [,pr #t] + [,pr (all-set? (prim-mask proc) (primref-flags pr))] [(case-lambda ,preinfo ,cl* ...) #t] [(if ,e1 ,e2 ,e3) (memoize (and (ivory? e1) (ivory? e2) (ivory? e3)))] [(seq ,e1 ,e2) (memoize (and (ivory? e1) (ivory? e2)))] @@ -1008,13 +1007,13 @@ [(record-cd ,rcd ,rtd-expr ,e) (memoize (ivory? e))] [(letrec ([,x* ,e*] ...) ,body) (memoize (and (andmap ivory? e*) (ivory? body)))] [(record-type ,rtd ,e) (memoize (ivory? e))] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) (memoize (ivory? e))] + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (memoize (ivory? e))] [(letrec* ([,x* ,e*] ...) ,body) (memoize (and (andmap ivory? e*) (ivory? body)))] [(immutable-list (,e* ...) ,e) (memoize (and (andmap ivory? e*) (ivory? e)))] [(profile ,src) #t] [(cte-optimization-loc ,box ,e) (memoize (ivory? e))] [(moi) #t] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) (memoize (ivory? e))] + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (memoize (ivory? e))] [(pariah) #t] [else ($oops who "unrecognized record ~s" e)])))) @@ -1052,14 +1051,14 @@ [(record-cd ,rcd ,rtd-expr ,e) (memoize (simple? e))] [(record-ref ,rtd ,type ,index ,e) (memoize (simple? e))] [(record-set! ,rtd ,type ,index ,e1 ,e2) #f] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) (memoize (simple? e))] + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (memoize (simple? e))] [(record-type ,rtd ,e) (memoize (simple? e))] [(record ,rtd ,rtd-expr ,e* ...) (memoize (and (simple? rtd-expr) (andmap simple? e*)))] [(pariah) #f] [(profile ,src) #f] [(cte-optimization-loc ,box ,e) (memoize (simple? e))] [(moi) #t] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) (memoize (simple? e))] + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (memoize (simple? e))] [else ($oops who "unrecognized record ~s" e)])))) (define-who simple/profile? @@ -1097,14 +1096,14 @@ [(record-cd ,rcd ,rtd-expr ,e) (memoize (simple/profile? e))] [(record-ref ,rtd ,type ,index ,e) (memoize (simple/profile? e))] [(record-set! ,rtd ,type ,index ,e1 ,e2) #f] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) (memoize (simple/profile? e))] + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (memoize (simple/profile? e))] [(record-type ,rtd ,e) (memoize (simple/profile? e))] [(record ,rtd ,rtd-expr ,e* ...) (memoize (and (simple/profile? rtd-expr) (andmap simple/profile? e*)))] [(pariah) #t] [(profile ,src) #t] [(cte-optimization-loc ,box ,e) (memoize (simple/profile? e))] [(moi) #t] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) (memoize (simple/profile? e))] + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (memoize (simple/profile? e))] [else ($oops who "unrecognized record ~s" e)])))) (define-who boolean-valued? @@ -1137,8 +1136,8 @@ [(profile ,src) #f] [(set! ,maybe-src ,x ,e) #f] [(moi) #f] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) #f] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) #f] + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) #f] + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) #f] [(pariah) #f] [else ($oops who "unrecognized record ~s" e)]))))) @@ -1622,33 +1621,40 @@ (define fold-primref (lambda (pr ctxt sc wd name moi) - (let ([opnds (app-opnds ctxt)] [outer-ctxt (app-ctxt ctxt)]) - (let ([flags (primref-flags pr)]) - (cond - [(and (eq? outer-ctxt 'effect) - (if (all-set? (prim-mask unsafe) flags) - (all-set? (prim-mask discard) flags) - (and (all-set? (prim-mask (or unrestricted discard)) flags) - (arity-okay? (primref-arity pr) (length opnds))))) - (residualize-seq '() opnds ctxt) - void-rec] - [(and (eq? outer-ctxt 'test) - (all-set? - (if (all-set? (prim-mask unsafe) flags) - (prim-mask (or discard true)) - (prim-mask (or unrestricted discard true))) - flags)) - (residualize-seq '() opnds ctxt) - true-rec] - [(and (eq? outer-ctxt 'test) - (all-set? (prim-mask true) flags)) - (make-seq outer-ctxt - (fold-primref2 pr (primref-name pr) opnds flags ctxt sc wd name moi) - true-rec)] - [else (fold-primref2 pr (primref-name pr) opnds flags ctxt sc wd name moi)]))))) + (let ([opnds (app-opnds ctxt)]) + (convention-case (app-convention ctxt) + [(call) + (let ([flags (primref-flags pr)] [outer-ctxt (app-ctxt ctxt)]) + (cond + [(and (eq? outer-ctxt 'effect) + (if (all-set? (prim-mask unsafe) flags) + (all-set? (prim-mask discard) flags) + (and (all-set? (prim-mask (or unrestricted discard)) flags) + (arity-okay? (primref-arity pr) (length opnds))))) + (residualize-seq '() opnds ctxt) + void-rec] + [(and (eq? outer-ctxt 'test) + (all-set? + (if (all-set? (prim-mask unsafe) flags) + (prim-mask (or discard true)) + (prim-mask (or unrestricted discard true))) + flags)) + (residualize-seq '() opnds ctxt) + true-rec] + [(and (eq? outer-ctxt 'test) + (all-set? (prim-mask true) flags)) + (make-seq outer-ctxt + (fold-primref2 pr (primref-name pr) opnds flags ctxt sc wd name moi) + true-rec)] + [else (fold-primref2 pr (primref-name pr) opnds flags ctxt sc wd name moi)]))] + [(apply2 apply3) + ; handler for apply will have turned the apply into a call if the last + ; argument is discovered to be a list. nothing more we can do here. + (residualize-primcall pr #f opnds ctxt sc)])))) (define fold-primref2 (lambda (pr sym opnds pflags ctxt sc wd name moi) + (safe-assert (convention-case (app-convention ctxt) [(call) #t] [else #f])) (let ([handler (or (and (all-set? (prim-mask unsafe) pflags) (all-set? (prim-mask cp03) pflags) ($sgetprop sym 'cp03 #f)) @@ -1656,27 +1662,35 @@ ($sgetprop sym 'cp02 #f)))]) (or (and handler (let ([level (if (all-set? (prim-mask unsafe) pflags) 3 2)]) - (convention-case (app-convention ctxt) - [(call) (handler level opnds ctxt sc wd name moi)] - ; handler for apply will have turned the apply into a call if the last - ; argument is discovered to be a list. nothing more we can do here. - [(apply2 apply3) #f]))) + (handler level opnds ctxt sc wd name moi))) (let ([args (value-visit-operands! opnds)]) (cond [(and (all-set? (prim-mask mifoldable) pflags) (let ([objs (objs-if-constant args)]) - (and objs (guard (c [#t #f]) `(quote ,(apply ($top-level-value sym) objs)))))) => + (and objs (guard (c [#t #f]) + (call-with-values + (lambda () (apply ($top-level-value sym) objs)) + (case-lambda + [(v) `(quote ,v)] + [v* `(call ,(app-preinfo ctxt) ,(lookup-primref 3 'values) + ,(map (lambda (x) `(quote ,x)) v*) + ...)])))))) => (lambda (e) (residualize-seq '() opnds ctxt) e)] [else - (residualize-seq opnds '() ctxt) - (bump sc 1) - (let ([preinfo (app-preinfo ctxt)]) - (convention-case (app-convention ctxt) - [(call) `(call ,preinfo ,pr ,args ...)] - [(apply2) (build-primcall preinfo 2 'apply (cons pr args))] - [(apply3) (build-primcall preinfo 3 'apply (cons pr args))]))])))))) + (residualize-primcall pr args opnds ctxt sc)])))))) + + (define residualize-primcall + (lambda (pr args opnds ctxt sc) + (let ([args (or args (value-visit-operands! opnds))]) + (residualize-seq opnds '() ctxt) + (bump sc 1) + (let ([preinfo (app-preinfo ctxt)]) + (convention-case (app-convention ctxt) + [(call) `(call ,preinfo ,pr ,args ...)] + [(apply2) (build-primcall preinfo 2 'apply (cons pr args))] + [(apply3) (build-primcall preinfo 3 'apply (cons pr args))]))))) (define objs-if-constant (lambda (e*) @@ -2058,8 +2072,8 @@ [(set! ,maybe-src ,x0 ,e0) (list e)] [(case-lambda ,preinfo ,cl* ...) (list e)] [,pr (list e)] - [(foreign ,conv ,name ,e0 (,arg-type* ...) ,result-type) (list e)] - [(fcallable ,conv ,e0 (,arg-type* ...) ,result-type) (list e)] + [(foreign (,conv* ...) ,name ,e0 (,arg-type* ...) ,result-type) (list e)] + [(fcallable (,conv* ...) ,e0 (,arg-type* ...) ,result-type) (list e)] [(record-type ,rtd0 ,e0) (list e)] [(record-cd ,rcd0 ,rtd-expr0 ,e0) (list e)] [(immutable-list (,e0* ...) ,e0) (list e)] @@ -2514,7 +2528,8 @@ (and (okay-to-handle?) (visit-and-maybe-extract* bytevector? ([dx x]) (visit-and-maybe-extract* (lambda (y) - (and (exact? y) + (and (integer? y) + (exact? y) (nonnegative? y) (= (modulo y align) 0))) ([dy y]) @@ -2594,6 +2609,20 @@ (define-inline-carry-op fx-/carry -) (define-inline-carry-op fx*/carry (lambda (x y z) (+ (* x y) z)))) + (define-inline 3 fxdiv-and-mod + [(x y) + (and likely-to-be-compiled? + (cp0-constant? (result-exp (value-visit-operand! y))) + (cp0 + (let ([tx (cp0-make-temp #t)] [ty (cp0-make-temp #t)]) + (let ([refx (build-ref tx)] [refy (build-ref ty)]) + (build-lambda (list tx ty) + (build-primcall 3 'values + (list + (build-primcall 3 'fxdiv (list refx refy)) + (build-primcall 3 'fxmod (list refx refy))))))) + ctxt empty-env sc wd name moi))]) + (define-inline 2 $top-level-value [(x) (nanopass-case (Lsrc Expr) (result-exp (value-visit-operand! x)) @@ -3349,8 +3378,8 @@ (nanopass-case (Lsrc Expr) xres [(case-lambda ,preinfo ,cl ...) #t] [,pr (all-set? (prim-mask proc) (primref-flags pr))] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) #t] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) #t] + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) #t] + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) #t] [(record-set! ,rtd ,type ,index ,e1 ,e2) #t] [(immutable-list (,e* ...) ,e) #t] [else #f]))) @@ -3574,6 +3603,9 @@ (lambda (?p ?ls ?ls* lvl map? ctxt sc wd name moi) ; (map/for-each proc (list a11 a12 ... a1m) (list a21 a22 ... a2m) ... (list an1 an2 ... anm)) => ; (let ([p proc]) + ; (if (procedure? p) + ; (void) + ; ($oops 'map/for-each "~s is not a procedure" p)) ; (let ([t11 a11] ... [t1m a1m]) ; ... ; (let ([tn1 an1] ... [tnm anm]) @@ -3585,28 +3617,42 @@ (if (null? ls*) (and (apply = (map length e**)) (or (not all-quoted?) (fx<= (length (car e**)) 4)) - (let ([p (cp0-make-temp (fx> (length (car e**)) 1))] + (let ([p (cp0-make-temp (or (fx= lvl 2) (fx> (length (car e**)) 1)))] [temp** (map (lambda (e*) (map (lambda (x) (cp0-make-temp #f)) e*)) e**)]) (residualize-seq (list* ?p ?ls ?ls*) '() ctxt) (build-let (list p) (list (value-visit-operand! ?p)) - (let f ([t** temp**] [e** (reverse e**)] [ls* (cons ?ls ?ls*)]) - (if (null? t**) - (let ([results - (let ([preinfo (app-preinfo ctxt)]) - (let g ([t** temp**]) - (if (null? (car t**)) - '() - (cons `(call ,preinfo (ref #f ,p) - ,(map (lambda (t*) (build-ref (car t*))) t**) ...) - (g (map cdr t**))))))]) - (if map? - (build-primcall lvl 'list results) - (make-seq* ctxt results))) - (non-result-exp (value-visit-operand! (car ls*)) - (build-let (car t**) (car e**) - (f (cdr t**) (cdr e**) (cdr ls*))))))))) + (let ([main + (let f ([t** temp**] [e** (reverse e**)] [ls* (cons ?ls ?ls*)]) + (if (null? t**) + (let ([results + (let ([preinfo (app-preinfo ctxt)]) + (let g ([t** temp**]) + (if (null? (car t**)) + '() + (cons `(call ,preinfo (ref #f ,p) + ,(map (lambda (t*) (build-ref (car t*))) t**) ...) + (g (map cdr t**))))))]) + (if (and map? (not (eq? (app-ctxt ctxt) 'effect))) + (if (null? results) + null-rec + (build-primcall lvl 'list results)) + (if (null? results) + void-rec + (make-seq* (app-ctxt ctxt) results)))) + (non-result-exp (value-visit-operand! (car ls*)) + (build-let (car t**) (car e**) + (f (cdr t**) (cdr e**) (cdr ls*))))))]) + (if (fx= lvl 2) + (make-seq (app-ctxt ctxt) + `(if ,(build-primcall 2 'procedure? (list `(ref #f ,p))) + ,void-rec + ,(build-primcall 3 '$oops (list `(quote ,(if map? 'map 'for-each)) + `(quote "~s is not a procedure") + `(ref #f ,p)))) + main) + main))))) (nanopass-case (Lsrc Expr) (result-exp (value-visit-operand! (car ls*))) [(quote ,d) (and (list? d) (loop (cdr ls*) (cons (map (lambda (x) `(quote ,x)) d) e**) all-quoted?))] @@ -3615,11 +3661,7 @@ [else #f]))))) (define-inline 2 map [(?p ?ls . ?ls*) - (if (andmap null-rec? (cons ?ls ?ls*)) - (begin - (residualize-seq '() (list* ?p ?ls ?ls*) ctxt) - null-rec) - (inline-lists ?p ?ls ?ls* 2 #t ctxt sc wd name moi))]) + (inline-lists ?p ?ls ?ls* 2 #t ctxt sc wd name moi)]) (define-inline 3 map [(?p ?ls . ?ls*) (cond @@ -3669,15 +3711,18 @@ (build-lambda (cons p ls*) (let f ([n n] [ls* ls*] [ropnd* '()]) (if (fx= n 1) - (build-primcall 3 'list - (reverse - (cons - `(call ,(app-preinfo ctxt) (ref #f ,p) - ,(map (lambda (x) - (build-primcall 3 'car - (list (build-ref x)))) - ls*) ...) - ropnd*))) + (let ([opnd* + (reverse + (cons + `(call ,(app-preinfo ctxt) (ref #f ,p) + ,(map (lambda (x) + (build-primcall 3 'car + (list (build-ref x)))) + ls*) ...) + ropnd*))]) + (if (eq? ctxt 'effect) + (make-seq* ctxt opnd*) + (build-primcall 3 'list opnd*))) (let ([tls* (map (lambda (x) (cp0-make-temp #t)) ls*)]) (build-let tls* (map (lambda (x) @@ -3695,12 +3740,7 @@ (define-inline 2 for-each [(?p ?ls . ?ls*) - (cond - [(andmap null-rec? (cons ?ls ?ls*)) - (residualize-seq '() (list* ?p ?ls ?ls*) ctxt) - void-rec] - [else - (inline-lists ?p ?ls ?ls* 2 #f ctxt sc wd name moi)])]) + (inline-lists ?p ?ls ?ls* 2 #f ctxt sc wd name moi)]) (define-inline 3 for-each [(?p ?ls . ?ls*) (cond @@ -3902,26 +3942,29 @@ (let ([p (cp0-make-temp #t)] [n (cp0-make-temp #t)] [i (cp0-make-temp #t)] + [j (cp0-make-temp #t)] [do (cp0-make-temp #t)] [v (cp0-make-temp #t)] [v* (map (lambda (x) (cp0-make-temp #f)) ?v*)]) (build-lambda (cons* p v v*) - (build-let (list n) - (list (build-primcall 3 'vector-length - (list (build-ref v)))) - (build-named-let do (list i) (list `(quote 0)) - `(if ,(build-primcall 3 'fx= - (list (build-ref i) (build-ref n))) - ,void-rec - ,(make-seq 'value - `(call ,(app-preinfo ctxt) (ref #f ,p) - ,(map (lambda (x) - (build-primcall 3 'vector-ref - (list (build-ref x) (build-ref i)))) - (cons v v*)) ...) - `(call ,(make-preinfo) (ref #f ,do) - ,(build-primcall 3 'fx1+ - (list (build-ref i)))))))))) + (build-let (list n) (list (build-primcall 3 'vector-length (list (build-ref v)))) + `(if ,(build-primcall 3 'fx= (list (build-ref n) `(quote 0))) + ,void-rec + ,(build-named-let do (list i) (list `(quote 0)) + (build-let (list j) (list (build-primcall 3 'fx1+ (list (build-ref i)))) + `(if ,(build-primcall 3 'fx= (list (build-ref j) (build-ref n))) + (call ,(app-preinfo ctxt) (ref #f ,p) + ,(map (lambda (x) + (build-primcall 3 'vector-ref + (list (build-ref x) (build-ref i)))) + (cons v v*)) ...) + ,(make-seq 'value + `(call ,(app-preinfo ctxt) (ref #f ,p) + ,(map (lambda (x) + (build-primcall 3 'vector-ref + (list (build-ref x) (build-ref i)))) + (cons v v*)) ...) + `(call ,(make-preinfo) (ref #f ,do) (ref #f ,j)))))))))) ctxt empty-env sc wd name moi))])]) (define-inline 3 string-for-each ; should combine with vector-for-each @@ -3974,26 +4017,29 @@ (let ([p (cp0-make-temp #t)] [n (cp0-make-temp #t)] [i (cp0-make-temp #t)] + [j (cp0-make-temp #t)] [do (cp0-make-temp #t)] [s (cp0-make-temp #t)] [s* (map (lambda (x) (cp0-make-temp #f)) ?s*)]) (build-lambda (cons* p s s*) - (build-let (list n) - (list (build-primcall 3 'string-length - (list (build-ref s)))) - (build-named-let do (list i) (list `(quote 0)) - `(if ,(build-primcall 3 'fx= - (list (build-ref i) (build-ref n))) - ,void-rec - ,(make-seq 'value - `(call ,(app-preinfo ctxt) (ref #f ,p) - ,(map (lambda (x) - (build-primcall 3 'string-ref - (list (build-ref x) (build-ref i)))) - (cons s s*)) ...) - `(call ,(make-preinfo) (ref #f ,do) - ,(build-primcall 3 'fx1+ - (list (build-ref i)))))))))) + (build-let (list n) (list (build-primcall 3 'string-length (list (build-ref s)))) + `(if ,(build-primcall 3 'fx= (list (build-ref n) `(quote 0))) + ,void-rec + ,(build-named-let do (list i) (list `(quote 0)) + (build-let (list j) (list (build-primcall 3 'fx1+ (list (build-ref i)))) + `(if ,(build-primcall 3 'fx= (list (build-ref j) (build-ref n))) + (call ,(app-preinfo ctxt) (ref #f ,p) + ,(map (lambda (x) + (build-primcall 3 'string-ref + (list (build-ref x) (build-ref i)))) + (cons s s*)) ...) + ,(make-seq 'value + `(call ,(app-preinfo ctxt) (ref #f ,p) + ,(map (lambda (x) + (build-primcall 3 'string-ref + (list (build-ref x) (build-ref i)))) + (cons s s*)) ...) + `(call ,(make-preinfo) (ref #f ,do) (ref #f ,j)))))))))) ctxt empty-env sc wd name moi))])]) (define-inline 3 fold-right @@ -4349,18 +4395,24 @@ [(?x) (mtp ctxt empty-env sc wd name moi #f 3)] [(?x ?p) (mtp ctxt empty-env sc wd name moi ?p 3)])))) - (define-inline 2 make-guardian - [() (and likely-to-be-compiled? + (let () + (define inline-make-guardian + (lambda (ctxt empty-env sc wd name moi formal* make-setter-clauses) + (and likely-to-be-compiled? (cp0 (let* ([tc (cp0-make-temp #t)] [ref-tc (build-ref tc)]) - (build-lambda '() + ; if the free variables of the closure created for a guardian changes, the code + ; for unregister-guardian in prims.ss might also need to be updated + (build-lambda formal* (build-let (list tc) (list (let* ([x (cp0-make-temp #t)] [ref-x (build-ref x)]) (let ([zero `(quote 0)]) (build-let (list x) (list (build-primcall 3 'cons (list zero zero))) (build-primcall 3 'cons (list ref-x ref-x)))))) - (build-case-lambda (preinfo-call->preinfo-lambda (app-preinfo ctxt)) - (list + (build-case-lambda (let ([preinfo (app-preinfo ctxt)]) + (make-preinfo-lambda (preinfo-src preinfo) (preinfo-sexpr preinfo) #f #f + (constant code-flag-guardian))) + (cons (list '() (let* ([x (cp0-make-temp #t)] [ref-x (build-ref x)]) (let ([y (cp0-make-temp #f)]) @@ -4374,19 +4426,45 @@ (seq (seq ,(build-primcall 3 'set-car! (list ref-tc - (build-primcall 3 'cdr (list ref-x)))) + (build-primcall 3 'cdr (list ref-x)))) ,(build-primcall 3 'set-car! (list ref-x false-rec))) ,(build-primcall 3 'set-cdr! (list ref-x false-rec))) (ref #f ,y)))))))) - (let* ([obj (cp0-make-temp #t)] [ref-obj (build-ref obj)]) - (list (list obj) - (build-primcall 3 '$install-guardian - (list ref-obj ref-obj ref-tc)))) - (let ([obj (cp0-make-temp #f)] [rep (cp0-make-temp #f)]) - (list (list obj rep) - (build-primcall 3 '$install-guardian - (list (build-ref obj) (build-ref rep) ref-tc))))))))) - ctxt empty-env sc wd name moi))])) + (make-setter-clauses ref-tc)))))) + ctxt empty-env sc wd name moi)))) + + (define-inline 2 make-guardian + [() (inline-make-guardian ctxt empty-env sc wd name moi '() + (lambda (ref-tc) + (list + (let* ([obj (cp0-make-temp #t)] [ref-obj (build-ref obj)]) + (list (list obj) + (build-primcall 3 '$install-guardian + (list ref-obj ref-obj ref-tc)))) + (let ([obj (cp0-make-temp #f)] [rep (cp0-make-temp #f)]) + (list (list obj rep) + (build-primcall 3 '$install-guardian + (list (build-ref obj) (build-ref rep) ref-tc)))))))]) + + (define-inline 2 $make-ftype-guardian + [(?ftd) + (let ([ftd (cp0-make-temp #f)]) + (inline-make-guardian ctxt empty-env sc wd name moi + (list ftd) + (lambda (ref-tc) + (list + (let* ([obj (cp0-make-temp #t)] [ref-obj (build-ref obj)]) + (list (list obj) + (let ([e (build-primcall 3 '$install-ftype-guardian + (list ref-obj ref-tc))]) + (if (fx= level 3) + e + (let ([ref-ftd (build-ref ftd)]) + `(seq + (if ,(build-primcall 3 'record? (list ref-obj ref-ftd)) + ,void-rec + ,(build-primcall 3 '$ftype-guardian-oops (list ref-ftd ref-obj))) + ,e))))))))))]))) ) ; with-output-language (define-pass cp0 : Lsrc (ir ctxt env sc wd name moi) -> Lsrc () @@ -4513,7 +4591,9 @@ (let-values ([(e args) (lift-let e e*)]) (cp0-call preinfo e (build-operands args env wd moi) ctxt env sc wd name moi)))] [(case-lambda ,preinfo ,cl* ...) - (when (symbol? name) + (when (and (symbol? name) + ;; Avoid replacing a name from an optimized-away `let` pattern: + (not (preinfo-lambda-name preinfo))) (preinfo-lambda-name-set! preinfo (let ([x ($symbol-name name)]) (if (pair? x) (cdr x) x)))) @@ -4584,13 +4664,13 @@ true-rec (begin (bump sc 1) pr))] [(app) (fold-primref pr ctxt sc wd name moi)])] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (context-case ctxt - [(value app) (bump sc 1) `(foreign ,conv ,name ,(cp0 e 'value env sc wd #f moi) (,arg-type* ...) ,result-type)] + [(value app) (bump sc 1) `(foreign (,conv* ...) ,name ,(cp0 e 'value env sc wd #f moi) (,arg-type* ...) ,result-type)] [(effect test) (cp0 `(seq ,e ,true-rec) ctxt env sc wd #f moi)])] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (context-case ctxt - [(value app) (bump sc 1) `(fcallable ,conv ,(cp0 e 'value env sc wd #f moi) (,arg-type* ...) ,result-type)] + [(value app) (bump sc 1) `(fcallable (,conv* ...) ,(cp0 e 'value env sc wd #f moi) (,arg-type* ...) ,result-type)] [(effect) (cp0 e 'effect env sc wd #f moi)] [(test) (make-seq ctxt (cp0 e 'effect env sc wd #f moi) true-rec)])] [(record ,rtd ,rtd-expr ,e* ...) @@ -4624,26 +4704,27 @@ (cp0 rtd-expr 'effect env sc wd #f moi) (map (lambda (e) (cp0 e 'effect env sc wd #f moi)) e*))) true-rec)])] - [(record-ref ,rtd ,type ,index ,e) + [(record-ref ,rtd ,type ,index ,e0) (context-case ctxt - [(effect) (cp0 e 'effect env sc wd name moi)] + [(effect) (cp0 e0 'effect env sc wd name moi)] [else - (let ([e (cp0 e 'value env sc wd name moi)]) - (or (nanopass-case (Lsrc Expr) (result-exp e) + (let ([e0 (cp0 e0 'value env sc wd name moi)]) + (or (nanopass-case (Lsrc Expr) (result-exp e0) [(quote ,d) (and (record? d rtd) - (make-seq ctxt e `(quote ,((csv7:record-field-accessor rtd index) d))))] + (make-seq ctxt e0 `(quote ,((csv7:record-field-accessor rtd index) d))))] [(record ,rtd1 ,rtd-expr ,e* ...) (let loop ([e* e*] [re* '()] [index index]) (and (not (null? e*)) - (if (= index 0) + (if (fx= index 0) (let ([e (car e*)] [e* (rappend re* (cdr e*))]) - (if (null? e*) - e - (make-seq ctxt (make-seq* 'effect e*) e))) + (non-result-exp e0 + (if (null? e*) + e + (make-seq ctxt (make-seq* 'effect e*) e)))) (loop (cdr e*) (cons (car e*) re*) (fx- index 1)))))] [else #f]) - (nanopass-case (Lsrc Expr) (result-exp/indirect-ref e) + (nanopass-case (Lsrc Expr) (result-exp/indirect-ref e0) [(record ,rtd1 ,rtd-expr ,e* ...) (and (> (length e*) index) (not (fld-mutable? (list-ref (rtd-flds rtd) index))) @@ -4654,9 +4735,9 @@ [,pr (all-set? (prim-mask proc) (primref-flags pr))] [else #f]) ; recur to cp0 to get inlining, folding, etc. - (cp0 e ctxt env sc wd name moi))))] + (non-result-exp e0 (cp0 e ctxt env sc wd name moi)))))] [else #f]) - (begin (bump sc 1) `(record-ref ,rtd ,type ,index ,e))))])] + (begin (bump sc 1) `(record-ref ,rtd ,type ,index ,e0))))])] [(record-set! ,rtd ,type ,index ,[cp0 : e1 'value env sc wd #f moi -> e1] ,[cp0 : e2 'value env sc wd #f moi -> e2]) `(record-set! ,rtd ,type ,index ,e1 ,e2)] [(record-type ,rtd ,e) (cp0 e ctxt env sc wd name moi)] diff -Nru chezscheme-9.5+dfsg/s/cpcheck.ss chezscheme-9.5.4+dfsg/s/cpcheck.ss --- chezscheme-9.5+dfsg/s/cpcheck.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cpcheck.ss 2020-08-31 02:35:12.000000000 +0000 @@ -130,11 +130,11 @@ [(set! ,maybe-src ,x ,[e #f -> e]) `(set! ,maybe-src ,x ,e)] [(seq ,[e1 #f -> e1] ,[e2]) `(seq ,e1 ,e2)] [(if ,[e1 #f -> e1] ,[e2 #f -> e2] ,[e3 #f -> e3]) `(if ,e1 ,e2 ,e3)] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (check! ctxt (list (length arg-type*))) - `(foreign ,conv ,name ,(Expr e #f) (,arg-type* ...) ,result-type)] - [(fcallable ,conv ,[e #f -> e] (,arg-type* ...) ,result-type) - `(fcallable ,conv ,e (,arg-type* ...) ,result-type)] + `(foreign (,conv* ...) ,name ,(Expr e #f) (,arg-type* ...) ,result-type)] + [(fcallable (,conv* ...) ,[e #f -> e] (,arg-type* ...) ,result-type) + `(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type)] [(call ,preinfo0 (case-lambda ,preinfo1 (clause (,x* ...) ,interface ,body) diff -Nru chezscheme-9.5+dfsg/s/cpcommonize.ss chezscheme-9.5.4+dfsg/s/cpcommonize.ss --- chezscheme-9.5+dfsg/s/cpcommonize.ss 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cpcommonize.ss 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,579 @@ +;;; cpcommonize.ss +;;; Copyright 1984-2017 Cisco Systems, Inc. +;;; +;;; Licensed under the Apache License, Version 2.0 (the "License"); +;;; you may not use this file except in compliance with the License. +;;; You may obtain a copy of the License at +;;; +;;; http://www.apache.org/licenses/LICENSE-2.0 +;;; +;;; Unless required by applicable law or agreed to in writing, software +;;; distributed under the License is distributed on an "AS IS" BASIS, +;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;;; See the License for the specific language governing permissions and +;;; limitations under the License. + +(begin +(define-who commonization-level + ($make-thread-parameter + 0 + (lambda (x) + (unless (and (fixnum? x) (<= 0 x 9)) + ($oops who "invalid level ~s" x)) + x))) + +(define $cpcommonize + (let () + (import (nanopass)) + (include "base-lang.ss") + + (define-record-type binding + (nongenerative) + (sealed #t) + (fields x (mutable e) size helper-box (mutable helper-b) (mutable helper-arg*)) + (protocol + (lambda (new) + (lambda (x e size helper-box) + (new x e size helper-box #f #f))))) + + (define-language Lcommonize1 (extends Lsrc) + (terminals + (+ (fixnum (size)))) + (Expr (e body rtd-expr) + (- (letrec ([x* e*] ...) body)) + (+ (letrec ([x* e* size] ...) body)))) + + (define-language Lcommonize2 (extends Lcommonize1) + (terminals + (- (fixnum (size))) + (+ (binding (b helper-b)))) + (Expr (e body rtd-expr) + (- (letrec ([x* e* size] ...) body)) + (+ (letrec (helper-b* ...) (b* ...) body)))) + + (define-syntax iffalse + (syntax-rules () + [(_ e1 e2) e1 #;(or e1 (begin e2 #f))])) + + (define-syntax iftrue + (syntax-rules () + [(_ e1 e2) e1 #;(let ([t e1]) (and t (begin e2 t)))])) + + (define Lcommonize1-lambda? + (lambda (e) + (nanopass-case (Lcommonize1 Expr) e + [(case-lambda ,preinfo ,cl* ...) #t] + [else #f]))) + + (define-pass cpcommonize0 : Lsrc (ir) -> Lcommonize1 () + (Expr : Expr (ir) -> Expr (1) + [(set! ,maybe-src ,x ,[e size]) + (values `(set! ,maybe-src ,x ,e) (fx+ 1 size))] + [(seq ,[e1 size1] ,[e2 size2]) + (values `(seq ,e1 ,e2) (fx+ size1 size2))] + [(if ,[e1 size1] ,[e2 size2] ,[e3 size3]) + (values `(if ,e1 ,e2 ,e3) (fx+ size1 size2 size3))] + [(foreign (,conv* ...) ,name ,[e size] (,arg-type* ...) ,result-type) + (values `(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (fx+ 1 size))] + [(fcallable (,conv* ...) ,[e size] (,arg-type* ...) ,result-type) + (values `(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (fx+ 1 size))] + ; ($top-level-value 'x) adds just 1 to the size + [(call ,preinfo ,pr (quote ,d)) + (guard (eq? (primref-name pr) '$top-level-value)) + (values `(call ,preinfo ,pr (quote ,d)) 1)] + ; (let ([x* e*] ...) body) splits into letrec binding unassigned variables to lambdas plus a let for the remaining bindings + [(call ,preinfo1 (case-lambda ,preinfo2 (clause (,x* ...) ,interface ,[body size])) ,[e* -> e* size*] ...) + (guard (fx= (length e*) interface)) + (define-record-type fudge (nongenerative) (sealed #t) (fields x e size)) + (let-values ([(lb* ob*) (partition + (lambda (b) + (and (not (prelex-assigned (fudge-x b))) + (Lcommonize1-lambda? (fudge-e b)))) + (map make-fudge x* e* size*))]) + (values + (let ([body (if (null? ob*) + body + `(call ,preinfo1 + (case-lambda ,preinfo2 + (clause (,(map fudge-x ob*) ...) ,(length ob*) ,body)) + ,(map fudge-e ob*) ...))]) + (if (null? lb*) + body + `(letrec ([,(map fudge-x lb*) ,(map fudge-e lb*) ,(map fudge-size lb*)] ...) ,body))) + (apply fx+ size size*)))] + [(call ,preinfo ,[e size] ,[e* size*] ...) + (values `(call ,preinfo ,e ,e* ...) (apply fx+ size size*))] + [(case-lambda ,preinfo (clause (,x** ...) ,interface* ,[body* size*]) ...) + (values `(case-lambda ,preinfo (clause (,x** ...) ,interface* ,body*) ...) (apply fx+ 1 size*))] + [(letrec ([,x* ,[e* size*]] ...) ,[body size]) + (values `(letrec ([,x* ,e* ,size*] ...) ,body) (apply fx+ size size*))] + [(record-ref ,rtd ,type ,index ,[e size]) + (values `(record-ref ,rtd ,type ,index ,e) (fx+ size 1))] + [(record-set! ,rtd ,type ,index ,[e1 size1] ,[e2 size2]) + (values `(record-set! ,rtd ,type ,index ,e1 ,e2) (fx+ size1 size2 1))] + [(record ,rtd ,[rtd-expr size] ,[e* size*] ...) + (values `(record ,rtd ,rtd-expr ,e* ...) (apply fx+ size size*))] + [(cte-optimization-loc ,box ,[e size]) + (values `(cte-optimization-loc ,box ,e) size)] + [(immutable-list (,[e* size*] ...) ,[e size]) + (values `(immutable-list (,e* ...) ,e) (apply fx+ size size*))] + [(quote ,d) (values `(quote ,d) 1)] + [(ref ,maybe-src ,x) (values `(ref ,maybe-src ,x) 1)] + [,pr (values pr 1)] + [(moi) (values `(moi) 1)] + [(pariah) (values `(pariah) 0)] + [(profile ,src) (values `(profile ,src) 0)] + [else (sorry! who "unhandled record ~s" ir)]) + (let-values ([(e size) (Expr ir)]) e)) + + (define-pass cpcommonize1 : Lcommonize1 (ir worthwhile-size) -> Lcommonize2 () + (definitions + (define worthwhile-size? + (lambda (expr-size) + (fx>= expr-size worthwhile-size))) + (define worthwhile-ratio? + (lambda (expr-size subst-count) + (or (fx= subst-count 0) + (fx>= (div expr-size subst-count) 4)))) + (define-record-type subst + (nongenerative) + (sealed #t) + (fields t e1 e2)) + (define-record-type frob + (nongenerative) + (sealed #t) + (fields subst* e b)) + (define ht (make-hashtable values fx=)) + (define make-sym + (lambda x* + (string->symbol (apply string-append (map (lambda (x) (if (prelex? x) (symbol->string (prelex-name x)) x)) x*))))) + (define same-preinfo? + (lambda (p1 p2) + ; ignore differences in src and sexpr + #t)) + (define same-preinfo-lambda? + (lambda (p1 p2) + ; ignore differences src, sexpr, and name + (eq? (preinfo-lambda-libspec p1) (preinfo-lambda-libspec p2)))) + (define-who same-type? + (lambda (ty1 ty2) + (nanopass-case (Ltype Type) ty1 + [(fp-integer ,bits1) + (nanopass-case (Ltype Type) ty2 + [(fp-integer ,bits2) (= bits1 bits2)] + [else #f])] + [(fp-unsigned ,bits1) + (nanopass-case (Ltype Type) ty2 + [(fp-unsigned ,bits2) (= bits1 bits2)] + [else #f])] + [(fp-void) + (nanopass-case (Ltype Type) ty2 + [(fp-void) #t] + [else #f])] + [(fp-scheme-object) + (nanopass-case (Ltype Type) ty2 + [(fp-scheme-object) #t] + [else #f])] + [(fp-u8*) + (nanopass-case (Ltype Type) ty2 + [(fp-u8*) #t] + [else #f])] + [(fp-u16*) + (nanopass-case (Ltype Type) ty2 + [(fp-u16*) #t] + [else #f])] + [(fp-u32*) + (nanopass-case (Ltype Type) ty2 + [(fp-u32*) #t] + [else #f])] + [(fp-fixnum) + (nanopass-case (Ltype Type) ty2 + [(fp-fixnum) #t] + [else #f])] + [(fp-double-float) + (nanopass-case (Ltype Type) ty2 + [(fp-double-float) #t] + [else #f])] + [(fp-single-float) + (nanopass-case (Ltype Type) ty2 + [(fp-single-float) #t] + [else #f])] + [(fp-ftd ,ftd1) + (nanopass-case (Ltype Type) ty2 + [(fp-ftd ,ftd2) (eq? ftd1 ftd2)] + [else #f])] + [else (sorry! who "unhandled foreign type ~s" ty1)]))) + (define okay-to-subst? + (lambda (e) + (define free? + (lambda (x) + (and (not (prelex-operand x)) #t))) + (nanopass-case (Lcommonize1 Expr) e + [(ref ,maybe-src1 ,x1) (and (not (prelex-assigned x1)) (free? x1))] + [(quote ,d) #t] + [,pr (all-set? (prim-mask proc) (primref-flags pr))] + [else #f]))) + (define constant-equal? + (lambda (x y) + (define record-equal? + (lambda (x y e?) + (let ([rtd ($record-type-descriptor x)]) + (and (eq? ($record-type-descriptor y) rtd) + (let f ([field-name* (csv7:record-type-field-names rtd)] [i 0]) + (or (null? field-name*) + (and (let ([accessor (csv7:record-field-accessor rtd i)]) + (e? (accessor x) (accessor y))) + (f (cdr field-name*) (fx+ i 1))))))))) + (parameterize ([default-record-equal-procedure record-equal?]) + ; equal? should be okay since even mutable constants aren't supposed to be mutated + (equal? x y)))) + (define same? + (lambda (e1 e2) + (nanopass-case (Lcommonize1 Expr) e1 + [(ref ,maybe-src1 ,x1) + (nanopass-case (Lcommonize1 Expr) e2 + [(ref ,maybe-src2 ,x2) + (or (eq? x1 x2) + (eq? (prelex-operand x1) x2))] + [else #f])] + [(quote ,d1) + (nanopass-case (Lcommonize1 Expr) e2 + [(quote ,d2) (constant-equal? d1 d2)] + [else #f])] + [,pr1 + (nanopass-case (Lcommonize1 Expr) e2 + [,pr2 (eq? pr1 pr2)] + [else #f])] + [(moi) + (nanopass-case (Lcommonize1 Expr) e2 + [(moi) #t] + [else #f])] + [(pariah) + (nanopass-case (Lcommonize1 Expr) e2 + [(pariah) #t] + [else #f])] + [(profile ,src1) + (nanopass-case (Lcommonize1 Expr) e2 + [(profile ,src2) (eq? src1 src2)] + [else #f])] + [(call ,preinfo1 ,pr1 (quote ,d1)) + (guard (eq? (primref-name pr1) '$top-level-value)) + (nanopass-case (Lcommonize1 Expr) e2 + [(call ,preinfo2 ,pr2 (quote ,d2)) + (guard (eq? (primref-name pr2) '$top-level-value)) + (and (same-preinfo? preinfo1 preinfo2) (eq? d1 d2))] + [else #f])] + [else #f]))) + (define-who unify + (lambda (e1 e2) + (module (with-env) + (define $with-env + (lambda (x1* x2* th) + (dynamic-wind + (lambda () (map (lambda (x1 x2) (prelex-operand-set! x1 x2) (prelex-operand-set! x2 #t)) x1* x2*)) + th + (lambda () (map (lambda (x1 x2) (prelex-operand-set! x1 #f) (prelex-operand-set! x2 #f)) x1* x2*))))) + (define-syntax with-env + (syntax-rules () + [(_ x1* x2* e) ($with-env x1* x2* (lambda () e))]))) + (call/cc + (lambda (return) + (let ([subst* '()]) + (define lookup-subst + (lambda (e1 e2) + (define same-subst? + (lambda (x) + (and (same? (subst-e1 x) e1) (same? (subst-e2 x) e2)))) + (cond + [(find same-subst? subst*) => + (lambda (subst) + (let ([t (subst-t subst)]) + (set-prelex-multiply-referenced! t #t) + t))] + [else #f]))) + (let ([e (with-output-language (Lcommonize1 Expr) + (let () + (define fclause + (lambda (cl1 cl2) + (nanopass-case (Lcommonize1 CaseLambdaClause) cl1 + [(clause (,x1* ...) ,interface1 ,body1) + (nanopass-case (Lcommonize1 CaseLambdaClause) cl2 + [(clause (,x2* ...) ,interface2 ,body2) + (if (fx= interface1 interface2) + (with-env x1* x2* + (with-output-language (Lcommonize1 CaseLambdaClause) + `(clause (,x1* ...) ,interface1 ,(f body1 body2)))) + (return (iffalse #f (printf "lambda interfaces don't match\n")) '()))])]))) + (define f + (case-lambda + [(e1 e2) (f e1 e2 #f)] + [(e1 e2 call-position?) + (or (cond + [(same? e1 e2) e1] + [(and (not call-position?) (okay-to-subst? e1) (okay-to-subst? e2)) + `(ref #f ,(or (lookup-subst e1 e2) + (let ([t (make-prelex*)]) + (set-prelex-referenced! t #t) + (set! subst* (cons (make-subst t e1 e2) subst*)) + t)))] + [else + (nanopass-case (Lcommonize1 Expr) e1 + [(ref ,maybe-src1 ,x1) #f] + [(quote ,d) #f] + [,pr #f] + [(moi) #f] + [(profile ,src1) #f] + ; reject non-same top-level-value calls with constant symbol so they + ; don't end up being abstracted over the symbol in the residual code + [(call ,preinfo ,pr (quote ,d)) + (guard (eq? (primref-name pr) '$top-level-value)) + #f] + ; don't allow abstraction of first (type) argument to $object-ref, foreign-ref, etc., + ; since they can't be inlined without a constant type. + ; ditto for $tc-field's first (field) argument. + ; there are many other primitives we don't catch here for which the compiler generates + ; more efficient code when certain arguments are constant. + [(call ,preinfo1 ,pr1 (quote ,d1) ,e1* ...) + (guard (memq (primref-name pr1) '($object-ref $swap-object-ref $object-set foreign-ref foreign-set! $tc-field))) + (nanopass-case (Lcommonize1 Expr) e2 + [(call ,preinfo2 ,pr2 (quote ,d2) ,e2* ...) + (guard (eq? pr2 pr1) (eq? d1 d2)) + (and (same-preinfo? preinfo1 preinfo2) + (fx= (length e1*) (length e2*)) + `(call ,preinfo1 ,pr1 (quote ,d1) ,(map f e1* e2*) ...))] + [else #f])] + [(call ,preinfo1 ,e1 ,e1* ...) + (nanopass-case (Lcommonize1 Expr) e2 + [(call ,preinfo2 ,e2 ,e2* ...) + (and (fx= (length e1*) (length e2*)) + (same-preinfo? preinfo1 preinfo2) + `(call ,preinfo1 ,(f e1 e2 #t) ,(map f e1* e2*) ...))] + [else #f])] + [(if ,e10 ,e11 ,e12) + (nanopass-case (Lcommonize1 Expr) e2 + [(if ,e20 ,e21 ,e22) + `(if ,(f e10 e20) ,(f e11 e21) ,(f e12 e22))] + [else #f])] + [(case-lambda ,preinfo1 ,cl1* ...) + (nanopass-case (Lcommonize1 Expr) e2 + [(case-lambda ,preinfo2 ,cl2* ...) + (and (fx= (length cl1*) (length cl2*)) + (same-preinfo-lambda? preinfo1 preinfo2) + `(case-lambda ,preinfo1 ,(map fclause cl1* cl2*) ...))] + [else #f])] + [(seq ,e11 ,e12) + (nanopass-case (Lcommonize1 Expr) e2 + [(seq ,e21 ,e22) `(seq ,(f e11 e21) ,(f e12 e22))] + [else #f])] + [(set! ,maybe-src1 ,x1 ,e1) + (nanopass-case (Lcommonize1 Expr) e2 + [(set! ,maybe-src2 ,x2 ,e2) + (and (eq? x1 x2) + `(set! ,maybe-src1 ,x1 ,(f e1 e2)))] + [else #f])] + [(letrec ([,x1* ,e1* ,size1*] ...) ,body1) + (nanopass-case (Lcommonize1 Expr) e2 + [(letrec ([,x2* ,e2* ,size2*] ...) ,body2) + (and (fx= (length x2*) (length x1*)) + (andmap fx= size1* size2*) + (with-env x1* x2* + `(letrec ([,x1* ,(map f e1* e2*) ,size1*] ...) ,(f body1 body2))))] + [else #f])] + [(foreign (,conv1* ...) ,name1 ,e1 (,arg-type1* ...) ,result-type1) + (nanopass-case (Lcommonize1 Expr) e2 + [(foreign (,conv2* ...) ,name2 ,e2 (,arg-type2* ...) ,result-type2) + (and (equal? conv1* conv2*) + (equal? name1 name2) + (fx= (length arg-type1*) (length arg-type2*)) + (andmap same-type? arg-type1* arg-type2*) + (same-type? result-type1 result-type2) + `(foreign (,conv1* ...) ,name1 ,(f e1 e2) (,arg-type1* ...) ,result-type1))] + [else #f])] + [(fcallable (,conv1* ...) ,e1 (,arg-type1* ...) ,result-type1) + (nanopass-case (Lcommonize1 Expr) e2 + [(fcallable (,conv2* ...) ,e2 (,arg-type2* ...) ,result-type2) + (and (equal? conv1* conv2*) + (fx= (length arg-type1*) (length arg-type2*)) + (andmap same-type? arg-type1* arg-type2*) + (same-type? result-type1 result-type2) + `(fcallable (,conv1* ...) ,(f e1 e2) (,arg-type1* ...) ,result-type1))] + [else #f])] + [(cte-optimization-loc ,box1 ,e1) + (nanopass-case (Lcommonize1 Expr) e2 + [(cte-optimization-loc ,box2 ,e2) + (and (eq? box1 box2) + `(cte-optimization-loc ,box1 ,(f e1 e2)))] + [else #f])] + [else (sorry! who "unhandled record ~s" e1)])]) + (return (iffalse #f (parameterize ([print-level 3] [print-length 5]) (printf "unify failed for ~s and ~s (call-position ~s)\n" e1 e2 call-position?))) '()))])) + (f e1 e2)))]) + (values e subst*))))))) + (define sort-substs + ; reestablish original argument order for substituted variables where possible + ; so the arguments to an abstracted procedure aren't shuffled around in the + ; call to the generated helper. + (lambda (subst0* x1* x2*) + (define (this? x x*) (and (not (null? x*)) (eq? x (car x*)))) + (define (next x*) (if (null? x*) x* (cdr x*))) + (let-values ([(new-subst* subst*) (let f ([x1* x1*] [x2* x2*] [subst* subst0*] [n (length subst0*)]) + (cond + [(fx= n 0) (values '() subst*)] + [(find (lambda (subst) + (define (is-this-arg? e x*) + (nanopass-case (Lcommonize1 Expr) e + [(ref ,maybe-src ,x) (this? x x*)] + [else #f])) + (or (is-this-arg? (subst-e1 subst) x1*) + (is-this-arg? (subst-e2 subst) x2*))) + subst*) => + (lambda (subst) + (let-values ([(new-subst* subst*) (f (next x1*) (next x2*) (remq subst subst*) (fx- n 1))]) + (values (cons subst new-subst*) subst*)))] + [else + (let-values ([(new-subst* subst*) (f (next x1*) (next x2*) subst* (fx- n 1))]) + (values (cons (car subst*) new-subst*) (cdr subst*)))]))]) + (safe-assert (null? subst*)) + (safe-assert (fx= (length new-subst*) (length subst0*))) + new-subst*))) + (define find-match + (lambda (b1 ht) + (and (iffalse (worthwhile-size? (binding-size b1)) (printf "skipping b1: under worthwhile size ~s ~s\n" (binding-size b1) worthwhile-size)) + (ormap (lambda (b2) + (iffalse #f (printf "checking ~s & ~s:" (prelex-name (binding-x b1)) (prelex-name (binding-x b2)))) + (nanopass-case (Lcommonize1 Expr) (binding-e b1) + ; NB: restricting to one clause for now...handling multiple + ; NB: clauses should be straightforward with a helper per + ; NB: common clause. + [(case-lambda ,preinfo1 (clause (,x1* ...) ,interface1 ,body1)) + ; NB: no rest interface for now. should be straightforward + (guard (fxnonnegative? interface1)) + (and + (nanopass-case (Lcommonize1 Expr) (binding-e b2) + [(case-lambda ,preinfo2 (clause (,x2* ...) ,interface2 ,body2)) + (guard (fxnonnegative? interface2)) + (let-values ([(e subst*) (unify body1 body2)]) + (and e + (iffalse (worthwhile-ratio? (binding-size b1) (length subst*)) (printf " no, not worthwhile ratio ~s ~s\n" (binding-size b1) (length subst*))) + (let ([subst* (sort-substs subst* x1* x2*)]) + (iffalse #f (printf " yes\n")) + (make-frob subst* e b2))))] + [else (iffalse #f (printf " no, b2 does not meet lambda restrictions\n"))]))] + [else (iffalse #f (printf " no, b1 does not meet lambda restrictions\n"))])) + (hashtable-ref ht (binding-size b1) '()))))) + (define record-helper! + (lambda (b next e*) + (binding-helper-b-set! b next) + (binding-helper-arg*-set! b e*))) + (define build-helper + (lambda (t t* body size helper-box) + (make-binding t + (with-output-language (Lcommonize1 Expr) + `(case-lambda ,(make-preinfo-lambda) (clause (,t* ...) ,(length t*) ,body))) + size + helper-box))) + (define commonize-letrec + (lambda (x* e* size* body) ; e* and body have not been processed + (define (prune-and-process! b) + (let ([b* (remq b (hashtable-ref ht (binding-size b) '()))]) + (if (null? b*) + (hashtable-delete! ht (binding-size b)) + (hashtable-set! ht (binding-size b) b*))) + (unless (binding-helper-b b) (binding-e-set! b (Expr (binding-e b))))) + (if (null? x*) + body + (let ([helper-box (box '())]) + (let ([b* (map (lambda (x e size) (make-binding x e size helper-box)) x* e* size*)]) + (let ([body (let f ([b* b*]) + (if (null? b*) + (Expr body) + (let ([b (car b*)]) + (let ([frob (find-match b ht)]) + (if frob + (let* ([outer-b (frob-b frob)] + [helper-box (binding-helper-box outer-b)] + [helper-b (let ([t (make-prelex* (make-sym (binding-x b) "&" (binding-x outer-b)))]) + (build-helper t (map subst-t (frob-subst* frob)) (frob-e frob) (binding-size outer-b) helper-box))]) + (set-box! helper-box (cons helper-b (unbox helper-box))) + (record-helper! b helper-b (map subst-e1 (frob-subst* frob))) + (record-helper! outer-b helper-b (map subst-e2 (frob-subst* frob))) + (hashtable-update! ht (binding-size outer-b) (lambda (b*) (cons helper-b (remq outer-b b*))) '()) + (f (cdr b*))) + (begin + (hashtable-update! ht (binding-size b) (lambda (b*) (cons b b*)) '()) + (let ([body (f (cdr b*))]) + (prune-and-process! b) + body)))))))]) + (let ([helper-b* (unbox helper-box)]) + (for-each prune-and-process! helper-b*) + (with-output-language (Lcommonize2 Expr) + `(letrec (,helper-b* ...) (,b* ...) ,body)))))))))) + (Expr : Expr (ir) -> Expr () + [(letrec ([,x* ,e* ,size*] ...) ,body) + ; only unassigned lambda bindings post-cpletrec + (safe-assert (andmap (lambda (x) (not (prelex-assigned x))) x*)) + (safe-assert (andmap (lambda (e) (Lcommonize1-lambda? e)) e*)) + (commonize-letrec x* e* size* body)] + [(letrec* ([,x* ,e*] ...) ,body) + ; no letrec* run post-cpletrec + (assert #f)])) + + (define-pass cpcommonize2 : Lcommonize2 (ir) -> Lsrc () + (definitions + (define build-caller + (lambda (e helper-b helper-arg*) + (define-who Arg + (lambda (e) + (with-output-language (Lsrc Expr) + (nanopass-case (Lcommonize1 Expr) e + [(ref ,maybe-src ,x) `(ref ,maybe-src ,x)] + [(quote ,d) `(quote ,d)] + [else (sorry! who "unexpected helper arg ~s" e)])))) + (define propagate + (lambda (alist) + (lambda (e) + (nanopass-case (Lsrc Expr) e + [(ref ,maybe-src ,x) + (cond + [(assq x alist) => cdr] + [else e])] + [else e])))) + (nanopass-case (Lcommonize1 Expr) e + [(case-lambda ,preinfo (clause (,x* ...) ,interface ,body)) + (with-output-language (Lsrc Expr) + `(case-lambda ,preinfo + (clause (,x* ...) ,interface + ,(let loop ([helper-b helper-b] [e* (map Arg helper-arg*)]) + (if (binding-helper-b helper-b) + (nanopass-case (Lcommonize1 Expr) (binding-e helper-b) + [(case-lambda ,preinfo (clause (,x* ...) ,interface ,body)) + (loop (binding-helper-b helper-b) (map (propagate (map cons x* e*)) (map Arg (binding-helper-arg* helper-b))))]) + `(call ,(make-preinfo) + ,(let ([t (binding-x helper-b)]) + (if (prelex-referenced t) + (set-prelex-multiply-referenced! t #t) + (set-prelex-referenced! t #t)) + `(ref #f ,t)) + ,e* ...))))))]))) + (define maybe-build-caller + (lambda (b) + (let ([helper-b (binding-helper-b b)] [e (binding-e b)]) + (if helper-b + (build-caller e helper-b (binding-helper-arg* b)) + (Expr e)))))) + (Expr : Expr (ir) -> Expr () + [(letrec (,helper-b* ...) (,b* ...) ,[body]) + (let loop ([rb* (reverse helper-b*)] [x* (map binding-x b*)] [e* (map maybe-build-caller b*)]) + (if (null? rb*) + `(letrec ([,x* ,e*] ...) ,body) + (let ([b (car rb*)] [rb* (cdr rb*)]) + (if (prelex-referenced (binding-x b)) + (loop rb* (cons (binding-x b) x*) (cons (maybe-build-caller b) e*)) + (loop rb* x* e*)))))])) + + (lambda (x) + (let ([level (commonization-level)]) + (if (fx= level 0) + x + (let ([worthwhile-size (expt 2 (fx- 10 level))]) + (cpcommonize2 (cpcommonize1 (cpcommonize0 x) worthwhile-size)))))))) +) diff -Nru chezscheme-9.5+dfsg/s/cpletrec.ss chezscheme-9.5.4+dfsg/s/cpletrec.ss --- chezscheme-9.5+dfsg/s/cpletrec.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cpletrec.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"cpletrec.ss" ;;; cpletrec.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -109,14 +108,24 @@ (define-pass cpletrec : Lsrc (ir) -> Lsrc () (definitions - (define initialize-id! - (lambda (id) - (prelex-flags-set! id - (let ([flags (prelex-flags id)]) - (fxlogor - (fxlogand flags (constant prelex-sticky-mask)) - (fxsll (fxlogand flags (constant prelex-is-mask)) - (constant prelex-was-flags-offset))))))) + (define with-initialized-ids + (lambda (old-id* proc) + (let ([new-id* (map (lambda (old-id) + (let ([new-id (make-prelex + (prelex-name old-id) + (let ([flags (prelex-flags old-id)]) + (fxlogor + (fxlogand flags (constant prelex-sticky-mask)) + (fxsll (fxlogand flags (constant prelex-is-mask)) + (constant prelex-was-flags-offset)))) + (prelex-source old-id) + #f)]) + (prelex-operand-set! old-id new-id) + new-id)) + old-id*)]) + (let-values ([v* (proc new-id*)]) + (for-each (lambda (old-id) (prelex-operand-set! old-id #f)) old-id*) + (apply values v*))))) (define (Expr* e*) (if (null? e*) (values '() #t) @@ -243,9 +252,7 @@ (cond [(and (not (prelex-referenced/assigned lhs)) (binding-pure? b)) body] [(and (not (prelex-assigned lhs)) (lambda? rhs)) - (if (binding-recursive? b) - (build-letrec (list lhs) (list rhs) body) - (build-let (make-preinfo) (make-preinfo-lambda) (list lhs) (list rhs) body))] + (build-letrec (list lhs) (list rhs) body)] [(not (memq b (node-link* b))) (build-let (make-preinfo) (make-preinfo-lambda) (list lhs) (list rhs) body)] [else (grisly-letrec '() b* body)])) @@ -272,32 +279,34 @@ (and body-pure? (andmap binding-pure? b*))))))))) (Expr : Expr (ir) -> Expr (#t) [(ref ,maybe-src ,x) - (safe-assert (not (prelex-operand x))) - (safe-assert (prelex-was-referenced x)) - (when (prelex-referenced x) - (safe-assert (prelex-was-multiply-referenced x)) - (set-prelex-multiply-referenced! x #t)) - (set-prelex-seen/referenced! x #t) - (values ir (not (prelex-was-assigned x)))] + (let ([x (prelex-operand x)]) + (safe-assert (prelex? x)) + (safe-assert (prelex-was-referenced x)) + (when (prelex-referenced x) + (safe-assert (prelex-was-multiply-referenced x)) + (set-prelex-multiply-referenced! x #t)) + (set-prelex-seen/referenced! x #t) + (values `(ref ,maybe-src ,x) (not (prelex-was-assigned x))))] [(quote ,d) (values ir #t)] [(call ,preinfo0 (case-lambda ,preinfo1 (clause (,x* ...) ,interface ,body)) ,e* ...) (guard (fx= (length e*) interface)) - (for-each initialize-id! x*) - (let-values ([(body body-pure?) (Expr body)]) - (let-values ([(pre* lhs* rhs* pure?) - (let f ([x* x*] [e* e*]) - (if (null? x*) - (values '() '() '() #t) - (let ([x (car x*)]) - (let-values ([(e e-pure?) (Expr (car e*))] - [(pre* lhs* rhs* pure?) (f (cdr x*) (cdr e*))]) - (if (prelex-referenced/assigned x) - (values pre* (cons x lhs*) (cons e rhs*) (and e-pure? pure?)) - (values (if e-pure? pre* (cons e pre*)) - lhs* rhs* (and e-pure? pure?)))))))]) - (values - (build-seq pre* (build-let preinfo0 preinfo1 lhs* rhs* body)) - (and body-pure? pure?))))] + (with-initialized-ids x* + (lambda (x*) + (let-values ([(body body-pure?) (Expr body)]) + (let-values ([(pre* lhs* rhs* pure?) + (let f ([x* x*] [e* e*]) + (if (null? x*) + (values '() '() '() #t) + (let ([x (car x*)]) + (let-values ([(e e-pure?) (Expr (car e*))] + [(pre* lhs* rhs* pure?) (f (cdr x*) (cdr e*))]) + (if (prelex-referenced/assigned x) + (values pre* (cons x lhs*) (cons e rhs*) (and e-pure? pure?)) + (values (if e-pure? pre* (cons e pre*)) + lhs* rhs* (and e-pure? pure?)))))))]) + (values + (build-seq pre* (build-let preinfo0 preinfo1 lhs* rhs* body)) + (and body-pure? pure?))))))] [(call ,preinfo ,pr ,e* ...) (let () (define (arity-okay? arity n) @@ -321,24 +330,28 @@ [(seq ,[e1 e1-pure?] ,[e2 e2-pure?]) (values `(seq ,e1 ,e2) (and e1-pure? e2-pure?))] [(set! ,maybe-src ,x ,[e pure?]) - (safe-assert (prelex-was-assigned x)) - ; NB: cpletrec-letrec assumes assignments to unreferenced ids are dropped - (if (prelex-was-referenced x) - (begin - (set-prelex-seen/assigned! x #t) - (values `(set! ,maybe-src ,x ,e) #f)) - (if pure? (values `(quote ,(void)) #t) (values `(seq ,e (quote ,(void))) #f)))] + (let ([x (prelex-operand x)]) + (safe-assert (prelex? x)) + (safe-assert (prelex-was-assigned x)) + ; NB: cpletrec-letrec assumes assignments to unreferenced ids are dropped + (if (prelex-was-referenced x) + (begin + (set-prelex-seen/assigned! x #t) + (values `(set! ,maybe-src ,x ,e) #f)) + (if pure? (values `(quote ,(void)) #t) (values `(seq ,e (quote ,(void))) #f))))] [(letrec ([,x* ,e*] ...) ,body) - (for-each initialize-id! x*) - (cpletrec-letrec #f x* e* body)] + (with-initialized-ids x* + (lambda (x*) + (cpletrec-letrec #f x* e* body)))] [(letrec* ([,x* ,e*] ...) ,body) - (for-each initialize-id! x*) - (cpletrec-letrec #t x* e* body)] - [(foreign ,conv ,name ,[e pure?] (,arg-type* ...) ,result-type) - (values `(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) + (with-initialized-ids x* + (lambda (x*) + (cpletrec-letrec #t x* e* body)))] + [(foreign (,conv* ...) ,name ,[e pure?] (,arg-type* ...) ,result-type) + (values `(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (and (fx= (optimize-level) 3) pure?))] - [(fcallable ,conv ,[e pure?] (,arg-type* ...) ,result-type) - (values `(fcallable ,conv ,e (,arg-type* ...) ,result-type) + [(fcallable (,conv* ...) ,[e pure?] (,arg-type* ...) ,result-type) + (values `(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (and (fx= (optimize-level) 3) pure?))] [(record-ref ,rtd ,type ,index ,[e pure?]) (values `(record-ref ,rtd ,type ,index ,e) #f)] @@ -367,9 +380,10 @@ [else (sorry! who "unhandled record ~s" ir)]) (CaseLambdaClause : CaseLambdaClause (ir) -> CaseLambdaClause () [(clause (,x* ...) ,interface ,body) - (for-each initialize-id! x*) - (let-values ([(body pure?) (Expr body)]) - `(clause (,x* ...) ,interface ,body))]) + (with-initialized-ids x* + (lambda (x*) + (let-values ([(body pure?) (Expr body)]) + `(clause (,x* ...) ,interface ,body))))]) (let-values ([(ir pure?) (Expr ir)]) ir)) (lambda (x) diff -Nru chezscheme-9.5+dfsg/s/cpnanopass.ss chezscheme-9.5.4+dfsg/s/cpnanopass.ss --- chezscheme-9.5+dfsg/s/cpnanopass.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cpnanopass.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,13 +1,12 @@ -"cpnanopass.ss" ;;; cpnanopass.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. -;;; +;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); ;;; you may not use this file except in compliance with the License. ;;; You may obtain a copy of the License at -;;; +;;; ;;; http://www.apache.org/licenses/LICENSE-2.0 -;;; +;;; ;;; Unless required by applicable law or agreed to in writing, software ;;; distributed under the License is distributed on an "AS IS" BASIS, ;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -250,12 +249,17 @@ (bytevector-u16-native-ref bv n)) count)))))))) - (module (empty-tree tree-extract tree-for-each tree-fold-left tree-bit-set? tree-bit-set tree-bit-unset tree-bit-count tree-same? tree-merge) + (module (empty-tree full-tree tree-extract tree-for-each tree-fold-left tree-bit-set? tree-bit-set tree-bit-unset tree-bit-count tree-same? tree-merge) ; tree -> fixnum | (tree-node tree tree) ; 0 represents any tree or subtree with no bits set, and a tree or subtree ; with no bits set is always 0 (define empty-tree 0) + ; any tree or subtree with all bits set + (define full-tree #t) + + (define (full-fixnum size) (fxsrl (most-positive-fixnum) (fx- (fx- (fixnum-width) 1) size))) + (define compute-split (lambda (size) (fxsrl size 1) @@ -269,7 +273,7 @@ (meta-cond [(fx= (optimize-level) 3) - (module (make-tree-node tree-node-left tree-node-right) + (module (make-tree-node tree-node? tree-node-left tree-node-right) (define make-tree-node cons) (define tree-node? pair?) (define tree-node-left car) @@ -298,55 +302,87 @@ (define tree-extract ; assumes empty-tree is 0 (lambda (st size v) (let extract ([st st] [size size] [offset 0] [x* '()]) - (if (fixnum? st) + (cond + [(fixnum? st) (do ([st st (fxsrl st 1)] [offset offset (fx+ offset 1)] [x* x* (if (fxodd? st) (cons (vector-ref v offset) x*) x*)]) - ((fx= st 0) x*)) + ((fx= st 0) x*))] + [(eq? st full-tree) + (do ([size size (fx- size 1)] + [offset offset (fx+ offset 1)] + [x* x* (cons (vector-ref v offset) x*)]) + ((fx= size 0) x*))] + [else (let ([split (compute-split size)]) (extract (tree-node-right st) (fx- size split) (fx+ offset split) - (extract (tree-node-left st) split offset x*))))))) + (extract (tree-node-left st) split offset x*)))])))) (define tree-for-each ; assumes empty-tree is 0 - (lambda (st size action) - (let f ([st st] [size size] [offset 0]) - (if (fixnum? st) - (do ([st st (fxsrl st 1)] [offset offset (fx+ offset 1)]) - ((fx= st 0)) - (when (fxodd? st) (action offset))) - (let ([split (compute-split size)]) - (f (tree-node-left st) split offset) - (f (tree-node-right st) (fx- size split) (fx+ offset split))))))) + (lambda (st size start end action) + (let f ([st st] [size size] [start start] [end end] [offset 0]) + (cond + [(fixnum? st) + (unless (eq? st empty-tree) + (do ([st (fxbit-field st start end) (fxsrl st 1)] [offset (fx+ offset start) (fx+ offset 1)]) + ((fx= st 0)) + (when (fxodd? st) (action offset))))] + [(eq? st full-tree) + (do ([start start (fx+ start 1)] [offset offset (fx+ offset 1)]) + ((fx= start end)) + (action offset))] + [else + (let ([split (compute-split size)]) + (when (fx< start split) + (f (tree-node-left st) split start (fxmin end split) offset)) + (when (fx> end split) + (f (tree-node-right st) (fx- size split) (fxmax (fx- start split) 0) (fx- end split) (fx+ offset split))))])))) (define tree-fold-left ; assumes empty-tree is 0 (lambda (proc size init st) (let f ([st st] [size size] [offset 0] [init init]) - (if (fixnum? st) + (cond + [(fixnum? st) (do ([st st (fxsrl st 1)] [offset offset (fx+ offset 1)] [init init (if (fxodd? st) (proc init offset) init)]) - ((fx= st 0) init)) + ((fx= st 0) init))] + [(eq? st full-tree) + (do ([size size (fx- size 1)] + [offset offset (fx+ offset 1)] + [init init (proc init offset)]) + ((fx= size 0) init))] + [else (let ([split (compute-split size)]) (f (tree-node-left st) split offset - (f (tree-node-right st) (fx- size split) (fx+ offset split) init))))))) + (f (tree-node-right st) (fx- size split) (fx+ offset split) init)))])))) (define tree-bit-set? ; assumes empty-tree is 0 (lambda (st size bit) (let loop ([st st] [size size] [bit bit]) - (if (fixnum? st) + (cond + [(fixnum? st) (and (not (eqv? st empty-tree)) ; fxlogbit? is unnecessarily general, so roll our own - (fxlogtest st (fxsll 1 bit))) + (fxlogtest st (fxsll 1 bit)))] + [(eq? st full-tree) #t] + [else (let ([split (compute-split size)]) (if (fx< bit split) (loop (tree-node-left st) split bit) - (loop (tree-node-right st) (fx- size split) (fx- bit split)))))))) + (loop (tree-node-right st) (fx- size split) (fx- bit split))))])))) (define tree-bit-set ; assumes empty-tree is 0 (lambda (st size bit) ; set bit in tree. result is eq? to tr if result is same as tr. - (if (fx< size (fixnum-width)) - (fxlogbit1 bit st) + (cond + [(eq? st full-tree) st] + [(fx< size (fixnum-width)) + (let ([st (fxlogbit1 bit st)]) + (if (fx= st (full-fixnum size)) + full-tree + st))] + [else (let ([split (compute-split size)]) (if (eqv? st empty-tree) (if (fx< bit split) @@ -357,19 +393,32 @@ (let ([new-lst (tree-bit-set lst split bit)]) (if (eq? new-lst lst) st - (make-tree-node new-lst rst))) + (if (and (eq? new-lst full-tree) (eq? rst full-tree)) + full-tree + (make-tree-node new-lst rst)))) (let ([new-rst (tree-bit-set rst (fx- size split) (fx- bit split))]) (if (eq? new-rst rst) st - (make-tree-node lst new-rst)))))))))) + (if (and (eq? lst full-tree) (eq? new-rst full-tree)) + full-tree + (make-tree-node lst new-rst))))))))]))) (define tree-bit-unset ; assumes empty-tree is 0 (lambda (st size bit) ; reset bit in tree. result is eq? to tr if result is same as tr. - (if (fixnum? st) - (if (eqv? st empty-tree) - empty-tree - (fxlogbit0 bit st)) + (cond + [(fixnum? st) + (if (eqv? st empty-tree) + empty-tree + (fxlogbit0 bit st))] + [(eq? st full-tree) + (if (fx< size (fixnum-width)) + (fxlogbit0 bit (full-fixnum size)) + (let ([split (compute-split size)]) + (if (fx< bit split) + (make-tree-node (tree-bit-unset full-tree split bit) full-tree) + (make-tree-node full-tree (tree-bit-unset full-tree (fx- size split) (fx- bit split))))))] + [else (let ([split (compute-split size)] [lst (tree-node-left st)] [rst (tree-node-right st)]) (if (fx< bit split) (let ([new-lst (tree-bit-unset lst split bit)]) @@ -383,40 +432,52 @@ st (if (and (eq? lst empty-tree) (eq? new-rst empty-tree)) empty-tree - (make-tree-node lst new-rst))))))))) + (make-tree-node lst new-rst))))))]))) (define tree-bit-count ; assumes empty-tree is 0 - (lambda (st) - (if (fixnum? st) - (fxbit-count st) - (fx+ (tree-bit-count (tree-node-left st)) - (tree-bit-count (tree-node-right st)))))) + (lambda (st size) + (cond + [(fixnum? st) (fxbit-count st)] + [(eq? st full-tree) size] + [else + (let ([split (compute-split size)]) + (fx+ + (tree-bit-count (tree-node-left st) split) + (tree-bit-count (tree-node-right st) (fx- size split))))]))) (define tree-same? ; assumes empty-tree is 0 (lambda (st1 st2) - (or (eq? st1 st2) ; assuming fixnums are eq-comparable - (and (not (fixnum? st1)) - (not (fixnum? st2)) + (or (eq? st1 st2) ; assuming fixnums and full trees are eq-comparable + (and (tree-node? st1) + (tree-node? st2) (tree-same? (tree-node-left st1) (tree-node-left st2)) (tree-same? (tree-node-right st1) (tree-node-right st2)))))) - (define tree-merge ; assumes empty-tree is 0 + (define tree-merge ; merge tr1 and tr2. result is eq? to tr1 if result is same as tr1. - (lambda (st1 st2) + (lambda (st1 st2 size) (cond - [(eq? st1 st2) st1] - [(fixnum? st1) (if (fixnum? st2) (fxlogor st1 st2) st2)] - [(eq? st2 empty-tree) st1] + [(or (eq? st1 st2) (eq? st2 empty-tree)) st1] + [(eq? st1 empty-tree) st2] + [(or (eq? st1 full-tree) (eq? st2 full-tree)) full-tree] + [(fixnum? st1) + (safe-assert (fixnum? st2)) + (let ([st (fxlogor st1 st2)]) + (if (fx= st (full-fixnum size)) + full-tree + st))] [else (let ([lst1 (tree-node-left st1)] [rst1 (tree-node-right st1)] [lst2 (tree-node-left st2)] [rst2 (tree-node-right st2)]) - (let ([l (tree-merge lst1 lst2)] [r (tree-merge rst1 rst2)]) + (let ([split (compute-split size)]) + (let ([l (tree-merge lst1 lst2 split)] [r (tree-merge rst1 rst2 (fx- size split))]) (cond [(and (eq? l lst1) (eq? r rst1)) st1] [(and (eq? l lst2) (eq? r rst2)) st2] - [else (make-tree-node l r)])))])))) + [(and (eq? l full-tree) (eq? r full-tree)) full-tree] + [else (make-tree-node l r)]))))])))) (define-syntax tc-disp (lambda (x) @@ -546,12 +607,6 @@ [else (with-syntax ([%mref (datum->syntax x '%mref)]) #'(%mref ,%sfp 0))]))) - ; asm-return-registsrs, L-doargerr, etc., encapsulate registers and must be - ; created fresh for each compiler run, so we just define makers here. - (define make-asm-return-registers - (lambda () - ; these registers are preserved by each hand-coded library routine that returns to its caller - (reg-cons* %cp %ret (append arg-registers extra-registers)))) (define make-Ldoargerr (lambda () (make-libspec-label 'doargerr (lookup-libspec doargerr) @@ -768,7 +823,7 @@ (define-record-type info-kill*-live* (nongenerative) (parent info-kill*) (fields live*) - (protocol + (protocol (lambda (new) (case-lambda [(kill* live*) @@ -782,7 +837,7 @@ (fields libspec save-ra?) (protocol (lambda (new) - (case-lambda + (case-lambda [(kill* libspec save-ra? live*) ((new kill* live*) libspec save-ra?)] [(kill* libspec save-ra?) @@ -842,9 +897,9 @@ (constant-case ptr-bits [(32) (declare-intrinsic dofretuns64 dofretuns64 (%ts %td %xp) (%ac0 %ac1) (%ac0))] [(64) (declare-intrinsic dofretuns64 dofretuns64 (%ts %td %xp) (%ac0) (%ac0))]) - (declare-intrinsic dofretu8* dofretu8* (%ac0 %ts %td %cp) (%ac0) (%xp)) - (declare-intrinsic dofretu16* dofretu16* (%ac0 %ts %td %cp) (%ac0) (%xp)) - (declare-intrinsic dofretu32* dofretu32* (%ac0 %ts %td %cp) (%ac0) (%xp)) + (declare-intrinsic dofretu8* dofretu8* (%ac0 %ts %td %cp %ac1) (%ac0) (%xp)) + (declare-intrinsic dofretu16* dofretu16* (%ac0 %ts %td %cp %ac1) (%ac0) (%xp)) + (declare-intrinsic dofretu32* dofretu32* (%ac0 %ts %td %cp %ac1) (%ac0) (%xp)) (declare-intrinsic get-room get-room () (%xp) (%xp)) (declare-intrinsic scan-remembered-set scan-remembered-set () () ()) (declare-intrinsic dooverflow dooverflow () () ()) @@ -858,7 +913,7 @@ (export dorest-intrinsic-max) (define (list-xtail ls n) (if (or (null? ls) (fx= n 0)) - ls + ls (list-xtail (cdr ls) (fx1- n)))) (define dorest-intrinsics (let () @@ -884,11 +939,11 @@ (define-record-type info-foreign (nongenerative) (parent info) (sealed #t) - (fields conv arg-type* result-type (mutable name)) + (fields conv* arg-type* result-type (mutable name)) (protocol (lambda (pargs->new) - (lambda (conv arg-type* result-type) - ((pargs->new) conv arg-type* result-type #f))))) + (lambda (conv* arg-type* result-type) + ((pargs->new) conv* arg-type* result-type #f))))) (define-record-type info-literal (nongenerative) (parent info) @@ -916,9 +971,19 @@ (fields type reversed? invertible?)) (define-record-type info-c-simple-call (nongenerative) + (parent info-kill*-live*) + (sealed #t) + (fields save-ra? entry) + (protocol + (lambda (new) + (case-lambda + [(save-ra? entry) ((new '() '()) save-ra? entry)] + [(live* save-ra? entry) ((new '() live*) save-ra? entry)])))) + + (define-record-type info-c-return (nongenerative) (parent info) (sealed #t) - (fields save-ra? entry)) + (fields offset)) (module () (record-writer (record-type-descriptor info-load) @@ -979,12 +1044,12 @@ [(call ,preinfo ,e ,[e*] ...) `(call ,(make-info-call (preinfo-src preinfo) (preinfo-sexpr preinfo) (fx< (optimize-level) 3) #f #f) ,(Expr e) ,e* ...)] - [(foreign ,conv ,name ,[e] (,arg-type* ...) ,result-type) - (let ([info (make-info-foreign conv arg-type* result-type)]) + [(foreign (,conv* ...) ,name ,[e] (,arg-type* ...) ,result-type) + (let ([info (make-info-foreign conv* arg-type* result-type)]) (info-foreign-name-set! info name) `(foreign ,info ,e))] - [(fcallable ,conv ,[e] (,arg-type* ...) ,result-type) - `(fcallable ,(make-info-foreign conv arg-type* result-type) ,e)]) + [(fcallable (,conv* ...) ,[e] (,arg-type* ...) ,result-type) + `(fcallable ,(make-info-foreign conv* arg-type* result-type) ,e)]) (CaseLambdaExpr ir #f)) (define find-matching-clause @@ -1134,7 +1199,7 @@ ; can't use a guard, since body isn't bound in guard. (if (eq? body x1) (build-seq* profile1* - (build-seq* profile2* + (build-seq* profile2* `(letrec ([,x1 ,le*]) (call ,info1 ,x1 ,e* ...)))) `(call ,info1 ,(build-seq* profile1* (Expr e)) ,e* ...))] [else @@ -1801,7 +1866,7 @@ [(fcallable ,info) (let ([label (make-local-label 'fcallable)]) (set! gl* (cons label gl*)) - (set! gle* (cons (in-context CaseLambdaExpr `(fcallable ,info)) gle*)) + (set! gle* (cons (in-context CaseLambdaExpr `(fcallable ,info ,label)) gle*)) `(label-ref ,label 0))]) (nanopass-case (L6 CaseLambdaExpr) ir [(case-lambda ,info ,[CaseLambdaClause : cl #f -> cl] ...) @@ -1877,9 +1942,9 @@ (define add-raw-counters (lambda (free** e) (if (track-dynamic-closure-counts) - (let f ([x** free**] [alloc 0] [raw 0]) + (let f ([x** free**] [alloc 0] [raw 0]) (if (null? x**) - (add-counter '#{raw-create-count bhowt6w0coxl0s2y-2} (length free**) + (add-counter '#{raw-create-count bhowt6w0coxl0s2y-2} (length free**) (add-counter '#{raw-alloc-count bhowt6w0coxl0s2y-3} alloc (add-counter '#{raw-ref-count bhowt6w0coxl0s2y-1} raw e))) (let ([x* (car x**)]) @@ -1942,7 +2007,7 @@ (+ (static-closure-info-wk-borrowed-count ci) 1))] [(closure) (static-closure-info-nwk-closure-count-set! ci - (+ (static-closure-info-nwk-closure-count ci) 1)) + (+ (static-closure-info-nwk-closure-count ci) 1)) (static-closure-info-nwk-closure-free-var-count-set! ci (+ (static-closure-info-nwk-closure-free-var-count ci) (length (closure-free* c))))] @@ -2056,7 +2121,7 @@ `(let ([,(closure-name c) ,(%primcall #f #f cons ,(map build-free-ref (closure-free* c)) ...)]) ,body)] [(vector) - `(let ([,(closure-name c) ,(%primcall #f #f vector ,(map build-free-ref (closure-free* c)) ...)]) + `(let ([,(closure-name c) ,(%primcall #f #f vector ,(map build-free-ref (closure-free* c)) ...)]) ,body)] [else (safe-assert (eq? (closure-type c) 'closure)) @@ -2100,7 +2165,7 @@ (with-frob-location (cadr free*) (add-ref-counter (%mref ,mcp ,(constant pair-cdr-disp))) (Expr body index bank)))] [else - (safe-assert (memq type '(vector closure))) + (safe-assert (memq type '(vector closure))) (let f ([free* free*] [i (if (eq? type 'vector) (constant vector-data-disp) (constant closure-data-disp))]) (if (null? free*) (Expr body index bank) @@ -2188,7 +2253,7 @@ ; find closures w/free variables (non-constant closures) and propagate (when (ormap (lambda (c) (not (null? (closure-free* c)))) c*) (for-each - (lambda (c) + (lambda (c) (closure-free*-set! c (append (closure-sibling* c) (closure-free* c)))) c*)) @@ -2268,7 +2333,7 @@ [(fcallable ,info) (let ([label (make-local-label 'fcallable)]) (set! gl* (cons label gl*)) - (set! gle* (cons (in-context CaseLambdaExpr `(fcallable ,info)) gle*)) + (set! gle* (cons (in-context CaseLambdaExpr `(fcallable ,info ,label)) gle*)) `(label-ref ,label 0))] [(let ([,x* ,[e*]] ...) ,body) (with-offsets index x* @@ -2360,7 +2425,7 @@ (let-values ([(out ...) (proc (car ls1) (car ls2) ...)] [(out* ...) (f (cdr ls1) (cdr ls2) ...)]) (values (cons out out*) ...))))))))]))) - (define-who loop-unroll-limit + (define-who loop-unroll-limit ($make-thread-parameter 0 ; NB: disabling loop unrolling for now (lambda (x) @@ -2372,14 +2437,14 @@ ;; Code growth computation is a little restrictive since it's measured ;; per loop... but maybe since new-size is weighted when profiling is ;; enabled it's fine. - #;(define CODE-GROWTH-FACTOR (fx1+ (loop-unroll-limit))) + #;(define CODE-GROWTH-FACTOR (fx1+ (loop-unroll-limit))) (define-syntax delay (syntax-rules () [(_ x) (lambda () x)])) (define (force x) (if (procedure? x) (x) x)) (define-who analyze-loops ;; -> (lambda () body) size new-weighted-size (lambda (body path-size unroll-count) - (with-output-language (L7 Expr) + (with-output-language (L7 Expr) ;; Not really a loop, just didn't want to pass around path-size and unroll-count when unnecessary (let loop ([body body]) (if (not body) @@ -2393,7 +2458,7 @@ (values (delay `(mref ,(force e1-promise) ,(force e2-promise) ,imm)) (fx+ e1-size e2-size 1) (fx+ e1-new-size e2-new-size 1))] - [,lvalue (values body 1 1)] + [,lvalue (values body 1 1)] [(profile ,src) (values body 0 0)] [(pariah) (values body 0 0)] [(label-ref ,l ,offset) (values body 0 0)] @@ -2415,23 +2480,23 @@ [query-count (if (or (not query-count) (< query-count .1)) 0 (exact (truncate (* query-count 1000))))] ;; allow path-size to increase up to 300 [adjusted-path-size-limit (fx+ PATH-SIZE-LIMIT (fx/ (or query-count 0) 5))] - ;; allow unroll limit to increase up to 4 + ;; allow unroll limit to increase up to 4 [adjusted-unroll-limit (fx+ (loop-unroll-limit) (fx/ (or query-count 0) 300))]) (if (or (fxzero? query-count) (fxzero? (fx+ unroll-count adjusted-unroll-limit)) (fx> path-size adjusted-path-size-limit)) - (begin + (begin (values (delay `(call ,info ,mdcl ,x ,(map force e*-promise) ...)) (fx1+ (apply fx+ size*)) - (fx1+ (apply fx+ new-size*)))) + (fx1+ (apply fx+ new-size*)))) (let*-values ([(var*) (car (uvar-location x))] [(loop-body-promise body-size new-size) (analyze-loops (cdr (uvar-location x)) (fx1+ path-size) (fx1- unroll-count))] [(new-size) ((lambda (x) (if query-count (fx/ x query-count) x)) (fx+ (length e*-promise) new-size))] [(acceptable-new-size) (fx* (fx1+ adjusted-unroll-limit) body-size)]) ;; NB: trying code growth computation here, where it could be per call site. - (values + (values (if (<= new-size acceptable-new-size) - (delay (fold-left + (delay (fold-left (lambda (body var e-promise) `(seq (set! ,var ,(force e-promise)) ,body)) (rename-loop-body (force loop-body-promise)) @@ -2455,7 +2520,7 @@ (values (delay `(foreign-call ,info ,(force e-promise) ,(map force e*-promise) ...)) (fx+ 5 e-size (apply fx+ size*)) (fx+ 5 e-new-size (apply fx+ new-size*)))] - [(label ,l ,[loop : body -> e size new-size]) + [(label ,l ,[loop : body -> e size new-size]) (values (delay `(label ,l ,(force e))) size new-size)] [(mvlet ,[loop : e -> e-promise e-size e-new-size] ((,x** ...) ,interface* ,body*) ...) (let-values ([(body*-promise body*-size body*-new-size) (mvmap 3 (lambda (e) (analyze-loops e (fx+ e-size path-size) unroll-count)) body*)]) @@ -2473,7 +2538,7 @@ (values (delay `(let ([,x* ,(map force e*-promise)] ...) ,(force body-promise))) (fx+ 1 body-size (apply fx+ size*)) (fx+ 1 body-new-size (apply fx+ new-size*))))] - [(if ,[loop : e0 -> e0-promise e0-size e0-new-size] ,e1 ,e2) + [(if ,[loop : e0 -> e0-promise e0-size e0-new-size] ,e1 ,e2) (let-values ([(e1-promise e1-size e1-new-size) (analyze-loops e1 (fx+ path-size e0-size) unroll-count)] [(e2-promise e2-size e2-new-size) (analyze-loops e2 (fx+ path-size e0-size) unroll-count)]) (values (delay `(if ,(force e0-promise) ,(force e1-promise) ,(force e2-promise))) @@ -2500,7 +2565,7 @@ [else ($oops who "forgot a case: ~a" body)])))))) (define-pass rename-loop-body : (L7 Expr) (ir) -> (L7 Expr) () - (definitions + (definitions (define-syntax with-fresh (syntax-rules () [(_ rename-ht x* body) @@ -2514,15 +2579,15 @@ [,x (eq-hashtable-ref rename-ht x x)] [(mref ,[e1] ,[e2] ,imm) `(mref ,e1 ,e2 ,imm)]) (Expr : Expr (ir rename-ht) -> Expr () - [(loop ,x (,[Lvalue : x* rename-ht -> x*] ...) ,body) - ;; NB: with-fresh is so well designed that it can't handle this case + [(loop ,x (,[Lvalue : x* rename-ht -> x*] ...) ,body) + ;; NB: with-fresh is so well designed that it can't handle this case (let*-values ([(x) (list x)] [(x body) (with-fresh rename-ht x (values (car x) (Expr body rename-ht)))]) `(loop ,x (,x* ...) ,body))] - [(let ([,x* ,[e*]] ...) ,body) - (with-fresh rename-ht x* + [(let ([,x* ,[e*]] ...) ,body) + (with-fresh rename-ht x* `(let ([,x* ,e*] ...) ,(Expr body rename-ht)))] - [(mvlet ,[e] ((,x** ...) ,interface* ,body*) ...) + [(mvlet ,[e] ((,x** ...) ,interface* ,body*) ...) (let* ([x**/body* (map (lambda (x* body) (with-fresh rename-ht x* (cons x* (Expr body rename-ht)))) x** body*)] @@ -2544,7 +2609,7 @@ (begin #;(printf "Opt: ~a\n" x) `(loop ,x (,x* ...) ,(force e-promise))) - (begin + (begin #;(printf "New size: ~a, old size: ~a\n" new-size size) ir)))])) (set! $loop-unroll-limit loop-unroll-limit)) @@ -2908,11 +2973,14 @@ (define build-dirty-store (case-lambda [(base offset e) (build-dirty-store base %zero offset e)] - [(base index offset e) + [(base index offset e) (build-dirty-store base index offset e + (lambda (base index offset e) `(set! ,(%mref ,base ,index ,offset) ,e)) + (lambda (s r) `(seq ,s ,r)))] + [(base index offset e build-assign build-seq) (if (nanopass-case (L7 Expr) e [(quote ,d) (ptr->imm d)] [else #f]) - `(set! ,(%mref ,base ,index ,offset) ,e) + (build-assign base index offset e) (let ([a (if (eq? index %zero) (%lea ,base offset) (%lea ,base ,index offset))]) @@ -2924,17 +2992,28 @@ (bind #f ([e e]) ; eval a second so the address is not live across any calls (bind #t ([a a]) - `(seq - (set! ,(%mref ,a 0) ,e) - ,(%inline remember ,a)))) + (build-seq + (build-assign a %zero 0 e) + (%inline remember ,a)))) (bind #t ([e e]) ; eval a second so the address is not live across any calls (bind #t ([a a]) - `(seq - (set! ,(%mref ,a 0) ,e) - (if ,(%type-check mask-fixnum type-fixnum ,e) + (build-seq + (build-assign a %zero 0 e) + `(if ,(%type-check mask-fixnum type-fixnum ,e) ,(%constant svoid) ,(%inline remember ,a))))))))])) + (define make-build-cas + (lambda (old-v) + (lambda (base index offset v) + `(seq + ,(%inline cas ,base ,index (immediate ,offset) ,old-v ,v) + (inline ,(make-info-condition-code 'eq? #f #t) ,%condition-code))))) + (define build-cas-seq + (lambda (cas remember) + `(if ,cas + (seq ,remember ,(%constant strue)) + ,(%constant sfalse)))) (define build-$record (lambda (tag args) (bind #f (tag) @@ -3138,7 +3217,7 @@ (goto ,Lbig) ,(build-fix lo)) (label ,Lbig - ,(%seq + ,(%seq (set! ,%ac0 ,lo) (set! ,(ref-reg %ac1) ,hi) (set! ,%ac0 (inline ,(intrinsic-info-asmlib dofretuns64 #f) ,%asmlibcall)) @@ -3558,7 +3637,7 @@ (%inline logor ,e (immediate ,type)))))) (define-syntax build-ref-check (syntax-rules () - [(_ type-disp maximum-length length-offset type mask) + [(_ type-disp maximum-length length-offset type mask immutable-flag) (lambda (e-v e-i maybe-e-new) ; NB: caller must bind e-v, e-i, and maybe-e-new (safe-assert (no-need-to-bind? #t e-v)) @@ -3571,7 +3650,7 @@ [(expr->index e-i 1 (constant maximum-length)) => (lambda (index) (let ([e (%inline u< - (immediate ,(logor (ash index (constant length-offset)) (constant type))) + (immediate ,(logor (ash index (constant length-offset)) (constant type) (constant immutable-flag))) ,t)]) (if (and (eqv? (constant type) (constant type-fixnum)) (eqv? (constant mask) (constant mask-fixnum))) @@ -3634,61 +3713,65 @@ (if (null? e*) e (reduce #f (moi src sexpr (list e (car e*))) (cdr e*))))))))) - (define-who relop-length - (lambda (op e1 e2) - (define (mirror op) - (case op - [(<) '>] - [(<=) '>=] - [(>=) '<=] - [(>) '<] - [else op])) - (define go - (lambda (n e r?) - (define op-error - (lambda (op) - (sorry! who "unexpected op ~s" op))) - (let ([op (if r? (mirror op) op)]) - (let f ([n n] [e e]) - (if (fx= n 0) - (case op - [(= <=) (build-null? e)] - [(<) `(seq ,e (quote #f))] - [(>) (build-not (build-null? e))] - [(>=) `(seq ,e (quote #t))] - [else (op-error op)]) - (case op - [(= >) (bind #t (e) - (build-and - (build-not (build-null? e)) - (f (fx- n 1) (build-cdr e))))] - [(<) (if (fx= n 1) - (build-null? e) - (bind #t (e) - (build-simple-or - (build-null? e) - (f (fx- n 1) (build-cdr e)))))] - [(<=) (bind #t (e) - (build-simple-or - (build-null? e) - (f (fx- n 1) (build-cdr e))))] - [(>=) (if (fx= n 1) - (build-not (build-null? e)) - (bind #t (e) - (build-and - (build-not (build-null? e)) - (f (fx- n 1) (build-cdr e)))))] - [else (op-error op)])))))) - (define try - (lambda (e1 e2 r?) - (nanopass-case (L7 Expr) e1 - [(call ,info ,mdcl ,pr ,e) - (guard (and (eq? (primref-name pr) 'length) (all-set? (prim-mask unsafe) (primref-flags pr)))) - (nanopass-case (L7 Expr) e2 - [(quote ,d) (and (fixnum? d) (fx<= 0 d 4) (go d e r?))] - [else #f])] - [else #f]))) - (or (try e1 e2 #f) (try e2 e1 #t)))) + (module (relop-length RELOP< RELOP<= RELOP= RELOP>= RELOP>) + (define RELOP< -2) + (define RELOP<= -1) + (define RELOP= 0) + (define RELOP>= 1) + (define RELOP> 2) + (define (mirror op) (fx- op)) + (define go + (lambda (op e n) + (let f ([n n] [e e]) + (if (fx= n 0) + (cond + [(or (eqv? op RELOP=) (eqv? op RELOP<=)) (build-null? e)] + [(eqv? op RELOP<) `(seq ,e (quote #f))] + [(eqv? op RELOP>) (build-not (build-null? e))] + [(eqv? op RELOP>=) `(seq ,e (quote #t))] + [else (sorry! 'relop-length "unexpected op ~s" op)]) + (cond + [(or (eqv? op RELOP=) (eqv? op RELOP>)) + (bind #t (e) + (build-and + (build-not (build-null? e)) + (f (fx- n 1) (build-cdr e))))] + [(eqv? op RELOP<) + (if (fx= n 1) + (build-null? e) + (bind #t (e) + (build-simple-or + (build-null? e) + (f (fx- n 1) (build-cdr e)))))] + [(eqv? op RELOP<=) + (bind #t (e) + (build-simple-or + (build-null? e) + (f (fx- n 1) (build-cdr e))))] + [(eqv? op RELOP>=) + (if (fx= n 1) + (build-not (build-null? e)) + (bind #t (e) + (build-and + (build-not (build-null? e)) + (f (fx- n 1) (build-cdr e)))))] + [else (sorry! 'relop-length "unexpected op ~s" op)]))))) + (define relop-length1 + (lambda (op e n) + (nanopass-case (L7 Expr) e + [(call ,info ,mdcl ,pr ,e) + (guard (and (eq? (primref-name pr) 'length) (all-set? (prim-mask unsafe) (primref-flags pr)))) + (go op e n)] + [else #f]))) + (define relop-length2 + (lambda (op e1 e2) + (nanopass-case (L7 Expr) e2 + [(quote ,d) (and (fixnum? d) (fx<= 0 d 4) (relop-length1 op e1 d))] + [else #f]))) + (define relop-length + (case-lambda + [(op e) (relop-length1 op e 0)] + [(op e1 e2) (or (relop-length2 op e1 e2) (relop-length2 (mirror op) e2 e1))]))) (define make-ftype-pointer-equal? (lambda (e1 e2) (bind #f (e1 e2) @@ -3728,7 +3811,9 @@ [(e) e] [e* `(values ,(make-info-call src sexpr #f #f #f) ,e* ...)]) (define-inline 2 eq? - [(e1 e2) (%inline eq? ,e1 ,e2)]) + [(e1 e2) + (or (relop-length RELOP= e1 e2) + (%inline eq? ,e1 ,e2))]) (define-inline 2 $keep-live [(e) (%seq ,(%inline keep-live ,e) ,(%constant svoid))]) (let () @@ -3741,7 +3826,7 @@ (build-libcall #t src sexpr fx=? e1 e2) (build-libcall #t src sexpr fx= e1 e2))))) (define (go src sexpr e1 e2 r6rs?) - (or (relop-length '= e1 e2) + (or (relop-length RELOP= e1 e2) (cond [(constant? (lambda (x) (eqv? x 0)) e1) (bind #t (e2) (zgo src sexpr e2 e1 e2 r6rs?))] @@ -3765,7 +3850,7 @@ [(_ op r6rs:op length-op inline-op) (let () (define (go src sexpr e1 e2 r6rs?) - (or (relop-length 'length-op e1 e2) + (or (relop-length length-op e1 e2) (bind #t (e1 e2) `(if ,(build-fixnums? (list e1 e2)) ,(%inline inline-op ,e1 ,e2) @@ -3782,17 +3867,17 @@ ; TODO: 3-operand case requires 3-operand library routine #; [(e1 e2 e3) (go3 src sexpr e1 e2 e3 #t)] [(e1 e2 . e*) #f]))])) - (fx-pred fx< fx= fx>=? >= >=) - (fx-pred fx> fx>? > >)) + (fx-pred fx< fx= fx>=? RELOP>= >=) + (fx-pred fx> fx>? RELOP> >)) (let () ; level 3 fx=, fx=?, etc. (define-syntax fx-pred (syntax-rules () [(_ op r6rs:op length-op inline-op) (let () (define (go e1 e2) - (or (relop-length 'length-op e1 e2) + (or (relop-length length-op e1 e2) (%inline inline-op ,e1 ,e2))) (define reducer (if (eq? 'inline-op 'eq?) @@ -3805,11 +3890,11 @@ (define-inline 3 r6rs:op [(e1 e2) (go e1 e2)] [(e1 e2 . e*) (reducer src sexpr moi e1 e2 e*)]))])) - (fx-pred fx< fx= fx>=? >= >=) - (fx-pred fx> fx>? > >)) + (fx-pred fx< fx= fx>=? RELOP>= >=) + (fx-pred fx> fx>? RELOP> >)) (let () ; level 3 fxlogand, ... (define-syntax fxlogop (syntax-rules () @@ -3870,7 +3955,7 @@ [() `(immediate ,(fix base))] [e* (and (fx<= (length e*) (fx- inline-args-limit 1)) (list-bind #t (e*) - ;; NB: using inline-op here because it works when target's + ;; NB: using inline-op here because it works when target's ;; NB: fixnum range is larger than the host's fixnum range ;; NB: during cross compile (let-values ([(e e* nc*) (log-partition inline-op base e*)]) @@ -3910,7 +3995,7 @@ (fxlognotop fxlognot) (fxlognotop fxnot)) (define-inline 3 $fxu< - [(e1 e2) (or (relop-length '< e1 e2) + [(e1 e2) (or (relop-length RELOP< e1 e2) (%inline u< ,e1 ,e2))]) (define-inline 3 fx+ [() `(immediate 0)] @@ -4354,15 +4439,15 @@ (build-libcall #t src sexpr fxcopy-bit e1 e2)))] [else #f]))])) (define-inline 3 fxzero? - [(e) (%inline eq? ,e (immediate 0))]) + [(e) (or (relop-length RELOP= e) (%inline eq? ,e (immediate 0)))]) (define-inline 3 fxpositive? - [(e) (%inline > ,e (immediate 0))]) + [(e) (or (relop-length RELOP> e) (%inline > ,e (immediate 0)))]) (define-inline 3 fxnonnegative? - [(e) (%inline >= ,e (immediate 0))]) + [(e) (or (relop-length RELOP>= e) (%inline >= ,e (immediate 0)))]) (define-inline 3 fxnegative? - [(e) (%inline < ,e (immediate 0))]) + [(e) (or (relop-length RELOP< e) (%inline < ,e (immediate 0)))]) (define-inline 3 fxnonpositive? - [(e) (%inline <= ,e (immediate 0))]) + [(e) (or (relop-length RELOP<= e) (%inline <= ,e (immediate 0)))]) (define-inline 3 fxeven? [(e) (%inline eq? ,(%inline logand ,e (immediate ,(fix 1))) @@ -4373,32 +4458,37 @@ (immediate ,(fix 1)))]) (define-inline 2 fxzero? - [(e) (bind #t (e) - (build-simple-or - (%inline eq? ,e (immediate 0)) - `(if ,(build-fixnums? (list e)) - ,(%constant sfalse) - ,(build-libcall #t src sexpr fxzero? e))))]) + [(e) (or (relop-length RELOP= e) + (bind #t (e) + (build-simple-or + (%inline eq? ,e (immediate 0)) + `(if ,(build-fixnums? (list e)) + ,(%constant sfalse) + ,(build-libcall #t src sexpr fxzero? e)))))]) (define-inline 2 fxpositive? - [(e) (bind #t (e) - `(if ,(build-fixnums? (list e)) - ,(%inline > ,e (immediate 0)) - ,(build-libcall #t src sexpr fxpositive? e)))]) + [(e) (or (relop-length RELOP> e) + (bind #t (e) + `(if ,(build-fixnums? (list e)) + ,(%inline > ,e (immediate 0)) + ,(build-libcall #t src sexpr fxpositive? e))))]) (define-inline 2 fxnonnegative? - [(e) (bind #t (e) - `(if ,(build-fixnums? (list e)) - ,(%inline >= ,e (immediate 0)) - ,(build-libcall #t src sexpr fxnonnegative? e)))]) + [(e) (or (relop-length RELOP>= e) + (bind #t (e) + `(if ,(build-fixnums? (list e)) + ,(%inline >= ,e (immediate 0)) + ,(build-libcall #t src sexpr fxnonnegative? e))))]) (define-inline 2 fxnegative? - [(e) (bind #t (e) - `(if ,(build-fixnums? (list e)) - ,(%inline < ,e (immediate 0)) - ,(build-libcall #t src sexpr fxnegative? e)))]) + [(e) (or (relop-length RELOP< e) + (bind #t (e) + `(if ,(build-fixnums? (list e)) + ,(%inline < ,e (immediate 0)) + ,(build-libcall #t src sexpr fxnegative? e))))]) (define-inline 2 fxnonpositive? - [(e) (bind #t (e) - `(if ,(build-fixnums? (list e)) - ,(%inline <= ,e (immediate 0)) - ,(build-libcall #t src sexpr fxnonpositive? e)))]) + [(e) (or (relop-length RELOP<= e) + (bind #t (e) + `(if ,(build-fixnums? (list e)) + ,(%inline <= ,e (immediate 0)) + ,(build-libcall #t src sexpr fxnonpositive? e))))]) (define-inline 2 fxeven? [(e) (bind #t (e) `(if ,(build-fixnums? (list e)) @@ -4973,8 +5063,17 @@ (def-len fxvector-length mask-fxvector type-fxvector fxvector-type-disp fxvector-length-offset) (def-len string-length mask-string type-string string-type-disp string-length-offset) (def-len bytevector-length mask-bytevector type-bytevector bytevector-type-disp bytevector-length-offset)) - ; TODO: consider adding integer?, integer-valued?, rational?, rational-valued?, + ; TODO: consider adding integer-valued?, rational?, rational-valued?, ; real?, and real-valued? + (define-inline 2 integer? + [(e) (bind #t (e) + (build-simple-or + (%type-check mask-fixnum type-fixnum ,e) + (build-simple-or + (%typed-object-check mask-bignum type-bignum ,e) + (build-and + (%type-check mask-flonum type-flonum ,e) + `(call ,(make-info-call src sexpr #f #f #f) #f ,(lookup-primref 3 'flinteger?) ,e)))))]) (let () (define build-number? (lambda (e) @@ -4997,6 +5096,10 @@ [(e1 e2) (build-dirty-store e1 (constant pair-cdr-disp) e2)]) (define-inline 3 set-box! [(e1 e2) (build-dirty-store e1 (constant box-ref-disp) e2)]) + (define-inline 3 box-cas! + [(e1 e2 e3) + (bind #t (e2) + (build-dirty-store e1 %zero (constant box-ref-disp) e3 (make-build-cas e2) build-cas-seq))]) (define-inline 3 $set-symbol-name! [(e1 e2) (build-dirty-store e1 (constant symbol-name-disp) e2)]) (define-inline 3 $set-symbol-property-list! @@ -5013,6 +5116,12 @@ `(if ,(%typed-object-check mask-mutable-box type-mutable-box ,e-box) ,(build-dirty-store e-box (constant box-ref-disp) e-new) ,(build-libcall #t src sexpr set-box! e-box e-new)))]) + (define-inline 2 box-cas! + [(e-box e-old e-new) + (bind #t (e-box e-old e-new) + `(if ,(%typed-object-check mask-mutable-box type-mutable-box ,e-box) + ,(build-dirty-store e-box %zero (constant box-ref-disp) e-new (make-build-cas e-old) build-cas-seq) + ,(build-libcall #t src sexpr box-cas! e-box e-old e-new)))]) (define-inline 2 set-car! [(e-pair e-new) (bind #t (e-pair e-new) @@ -5072,7 +5181,7 @@ `(seq ,(build-dirty-store e-sym (constant symbol-value-disp) e-value) (set! ,(%mref ,e-sym ,(constant symbol-pvalue-disp)) - (literal + (literal ,(make-info-literal #f 'library (lookup-libspec nonprocedure-code) (constant code-data-disp))))))) @@ -5268,6 +5377,7 @@ (define-tc-parameter current-output-port current-output) (define-tc-parameter current-error-port current-error) (define-tc-parameter generate-inspector-information generate-inspector-information) + (define-tc-parameter generate-procedure-source-information generate-procedure-source-information) (define-tc-parameter generate-profile-forms generate-profile-forms) (define-tc-parameter $compile-profile compile-profile) (define-tc-parameter optimize-level optimize-level) @@ -5279,6 +5389,8 @@ (define-tc-parameter $target-machine target-machine) (define-tc-parameter $current-stack-link stack-link) (define-tc-parameter $current-winders winders) + (define-tc-parameter default-record-equal-procedure default-record-equal-procedure) + (define-tc-parameter default-record-hash-procedure default-record-hash-procedure) ) (define-inline 3 $install-guardian @@ -5292,6 +5404,29 @@ (set! ,(%mref ,t ,(constant guardian-entry-next-disp)) ,(%tc-ref guardian-entries)) (set! ,(%tc-ref guardian-entries) ,t))))]) + (define-inline 3 $install-ftype-guardian + [(e-obj e-tconc) + (bind #f (e-obj e-tconc) + (bind #t ([t (%constant-alloc typemod (constant size-guardian-entry))]) + (%seq + (set! ,(%mref ,t ,(constant guardian-entry-obj-disp)) ,e-obj) + (set! ,(%mref ,t ,(constant guardian-entry-rep-disp)) (immediate ,(constant ftype-guardian-rep))) + (set! ,(%mref ,t ,(constant guardian-entry-tconc-disp)) ,e-tconc) + (set! ,(%mref ,t ,(constant guardian-entry-next-disp)) ,(%tc-ref guardian-entries)) + (set! ,(%tc-ref guardian-entries) ,t))))]) + + (define-inline 2 guardian? + [(e) + (bind #t (e) + (build-and + (%type-check mask-closure type-closure ,e) + (%type-check mask-guardian-code type-guardian-code + ,(%mref + ,(%inline - + ,(%mref ,e ,(constant closure-code-disp)) + ,(%constant code-data-disp)) + ,(constant code-type-disp)))))]) + (define-inline 2 virtual-register-count [() `(quote ,(constant virtual-register-count))]) (let () @@ -5404,7 +5539,7 @@ (define (go3 e1 e2 e3) (bind #t (e2) (bind #f (e3) - (build-and + (build-and (go2 e1 e2) (go2 e2 e3))))) (define-inline 3 op @@ -5615,6 +5750,7 @@ (define eqvok? (e*ok? eqvok-help?)) (define-inline 2 eqv? [(e1 e2) (or (eqvop-null-fptr e1 e2) + (relop-length RELOP= e1 e2) (if (or (eqok? e1) (eqok? e2)) (build-eq? e1 e2) (build-eqv? src sexpr e1 e2)))]) @@ -5643,6 +5779,7 @@ [else #f]))) (define-inline 2 equal? [(e1 e2) (or (eqvop-null-fptr e1 e2) + (relop-length RELOP= e1 e2) (xform-equal? src sexpr e1 e2) (xform-equal? src sexpr e2 e1))])) (let () @@ -6107,7 +6244,7 @@ ,(build-libcall #t src sexpr = e1 e2)))) (define (go src sexpr e1 e2) (or (eqvop-null-fptr e1 e2) - (relop-length '= e1 e2) + (relop-length RELOP= e1 e2) (cond [(constant? (lambda (x) (eqv? x 0)) e1) (bind #t (e2) (zgo src sexpr e2 e1 e2))] @@ -6130,7 +6267,7 @@ (let () (define builder (lambda (e1 e2 libcall) - (or (relop-length 'relop e1 e2) + (or (relop-length relop e1 e2) (bind #t (e1 e2) `(if ,(build-fixnums? (list e1 e2)) ,(%inline op ,e1 ,e2) @@ -6147,33 +6284,38 @@ (lambda (e1 e2) (build-libcall #t src sexpr name e1 e2)))] ; TODO: handle 3-operand case w/3-operand library routine [(e1 e2 . e*) #f]))])) - (define-relop-inline < r6rs:< < <) - (define-relop-inline <= r6rs:<= <= <=) - (define-relop-inline >= r6rs:>= >= >=) - (define-relop-inline > r6rs:> > >)) + (define-relop-inline < r6rs:< RELOP< <) + (define-relop-inline <= r6rs:<= RELOP<= <=) + (define-relop-inline >= r6rs:>= RELOP>= >=) + (define-relop-inline > r6rs:> RELOP> >)) (define-inline 3 positive? ; 3 so opt-level 2 errors come from positive? [(e) (handle-prim src sexpr 3 '> (list e `(quote 0)))]) - (define-inline 3 nonnegative? ; 3 so opt-level 2 errors come from positive? + (define-inline 3 nonnegative? ; 3 so opt-level 2 errors come from nonnegative? [(e) (handle-prim src sexpr 3 '>= (list e `(quote 0)))]) - (define-inline 3 negative? ; 3 so opt-level 2 errors come from positive? + (define-inline 3 negative? ; 3 so opt-level 2 errors come from negative? [(e) (handle-prim src sexpr 3 '< (list e `(quote 0)))]) - (define-inline 3 nonpositive? ; 3 so opt-level 2 errors come from positive? + (define-inline 3 nonpositive? ; 3 so opt-level 2 errors come from nonpositive? [(e) (handle-prim src sexpr 3 '<= (list e `(quote 0)))]) (define-inline 2 zero? [(e) - (nanopass-case (L7 Expr) e - [(call ,info ,mdcl ,pr ,e) - (guard - (eq? (primref-name pr) 'ftype-pointer-address) - (all-set? (prim-mask unsafe) (primref-flags pr))) - (make-ftype-pointer-null? e)] - [else - (bind #t (e) - (build-simple-or - (%inline eq? ,e (immediate ,(fix 0))) - `(if ,(%type-check mask-fixnum type-fixnum ,e) - ,(%constant sfalse) - ,(build-libcall #t src sexpr zero? e))))])]) + (or (relop-length RELOP= e) + (nanopass-case (L7 Expr) e + [(call ,info ,mdcl ,pr ,e) + (guard + (eq? (primref-name pr) 'ftype-pointer-address) + (all-set? (prim-mask unsafe) (primref-flags pr))) + (make-ftype-pointer-null? e)] + [else + (bind #t (e) + (build-simple-or + (%inline eq? ,e (immediate ,(fix 0))) + `(if ,(%type-check mask-fixnum type-fixnum ,e) + ,(%constant sfalse) + ,(build-libcall #t src sexpr zero? e))))]))]) + (define-inline 2 positive? [(e) (relop-length RELOP> e)]) + (define-inline 2 nonnegative? [(e) (relop-length RELOP>= e)]) + (define-inline 2 negative? [(e) (relop-length RELOP< e)]) + (define-inline 2 nonpositive? [(e) (relop-length RELOP<= e)]) (let () (define-syntax define-logorop-inline (syntax-rules () @@ -7559,9 +7701,9 @@ (build-dirty-store e-p ibuffer-disp e-b)) ,(bind #t ([e-length (if (eq? port-type 'textual) (translate - (%inline logxor + (%inline logand ,(%mref ,e-b ,(constant string-type-disp)) - ,(%constant type-string)) + (immediate ,(fx- (expt 2 (constant string-length-offset))))) (constant string-length-offset) (constant string-char-offset)) (%inline srl @@ -7674,8 +7816,8 @@ [(e-name e-handler e-ib e-ob) (go e-name e-handler e-ib e-ob `(quote #f))] [(e-name e-handler e-ib e-ob e-info) (go e-name e-handler e-ib e-ob e-info)])))) (let () - (define build-fxvector-ref-check (build-ref-check fxvector-type-disp maximum-fxvector-length fxvector-length-offset type-fxvector mask-fxvector)) - (define build-fxvector-set!-check (build-ref-check fxvector-type-disp maximum-fxvector-length fxvector-length-offset type-mutable-fxvector mask-mutable-fxvector)) + (define build-fxvector-ref-check (build-ref-check fxvector-type-disp maximum-fxvector-length fxvector-length-offset type-fxvector mask-fxvector fxvector-immutable-flag)) + (define build-fxvector-set!-check (build-ref-check fxvector-type-disp maximum-fxvector-length fxvector-length-offset type-mutable-fxvector mask-mutable-fxvector fxvector-immutable-flag)) (define-inline 2 $fxvector-ref-check? [(e-fv e-i) (bind #t (e-fv e-i) (build-fxvector-ref-check e-fv e-i #f))]) (define-inline 2 $fxvector-set!-check? @@ -7720,10 +7862,10 @@ (let () (define build-string-ref-check (lambda (e-s e-i) - ((build-ref-check string-type-disp maximum-string-length string-length-offset type-string mask-string) e-s e-i #f))) + ((build-ref-check string-type-disp maximum-string-length string-length-offset type-string mask-string string-immutable-flag) e-s e-i #f))) (define build-string-set!-check (lambda (e-s e-i) - ((build-ref-check string-type-disp maximum-string-length string-length-offset type-mutable-string mask-mutable-string) e-s e-i #f))) + ((build-ref-check string-type-disp maximum-string-length string-length-offset type-mutable-string mask-mutable-string string-immutable-flag) e-s e-i #f))) (define-inline 2 $string-ref-check? [(e-s e-i) (bind #t (e-s e-i) (build-string-ref-check e-s e-i))]) (define-inline 2 $string-set!-check? @@ -7778,8 +7920,8 @@ (define-inline 3 $string-set-immutable! [(e-s) ((build-set-immutable! string-type-disp string-immutable-flag) e-s)]))) (let () - (define build-vector-ref-check (build-ref-check vector-type-disp maximum-vector-length vector-length-offset type-vector mask-vector)) - (define build-vector-set!-check (build-ref-check vector-type-disp maximum-vector-length vector-length-offset type-mutable-vector mask-mutable-vector)) + (define build-vector-ref-check (build-ref-check vector-type-disp maximum-vector-length vector-length-offset type-vector mask-vector vector-immutable-flag)) + (define build-vector-set!-check (build-ref-check vector-type-disp maximum-vector-length vector-length-offset type-mutable-vector mask-mutable-vector vector-immutable-flag)) (define-inline 2 $vector-ref-check? [(e-v e-i) (bind #t (e-v e-i) (build-vector-ref-check e-v e-i #f))]) (define-inline 2 $vector-set!-check? @@ -7817,6 +7959,21 @@ (define-inline 3 $vector-set-immutable! [(e-fv) ((build-set-immutable! vector-type-disp vector-immutable-flag) e-fv)])) (let () + (define (go e-v e-i e-old e-new) + (nanopass-case (L7 Expr) e-i + [(quote ,d) + (guard (target-fixnum? d)) + (build-dirty-store e-v %zero (+ (fix d) (constant vector-data-disp)) e-new (make-build-cas e-old) build-cas-seq)] + [else (build-dirty-store e-v e-i (constant vector-data-disp) e-new (make-build-cas e-old) build-cas-seq)])) + (define-inline 3 vector-cas! + [(e-v e-i e-old e-new) (go e-v e-i e-old e-new)]) + (define-inline 2 vector-cas! + [(e-v e-i e-old e-new) + (bind #t (e-v e-i e-old e-new) + `(if ,(build-vector-set!-check e-v e-i #f) + ,(go e-v e-i e-old e-new) + ,(build-libcall #t src sexpr vector-cas! e-v e-i e-old e-new)))])) + (let () (define (go e-v e-i e-new) `(set! ,(nanopass-case (L7 Expr) e-i @@ -7836,42 +7993,42 @@ (let () (define build-bytevector-ref-check (lambda (e-bits e-bv e-i check-mutable?) - (nanopass-case (L7 Expr) e-bits - [(quote ,d) - (guard (and (fixnum? d) (fx> d 0) (fx= (* (fxquotient d 8) 8) d))) - (let ([bits d] [bytes (fxquotient d 8)]) - (bind #t (e-bv e-i) - (build-and - (%type-check mask-typed-object type-typed-object ,e-bv) - (bind #t ([t (%mref ,e-bv ,(constant bytevector-type-disp))]) - (build-and - (if check-mutable? - (%type-check mask-mutable-bytevector type-mutable-bytevector ,t) - (%type-check mask-bytevector type-bytevector ,t)) - (cond - [(expr->index e-i bytes (constant maximum-bytevector-length)) => - (lambda (index) - (%inline u< - (immediate ,(logor (ash (+ index (fx- bytes 1)) (constant bytevector-length-offset)) - (constant type-bytevector))) - ,t))] - [else - (build-and - ($type-check (fxlogor (fix (fx- bytes 1)) (constant mask-fixnum)) (constant type-fixnum) e-i) + (nanopass-case (L7 Expr) e-bits + [(quote ,d) + (guard (and (fixnum? d) (fx> d 0) (fx= (* (fxquotient d 8) 8) d))) + (let ([bits d] [bytes (fxquotient d 8)]) + (bind #t (e-bv e-i) + (build-and + (%type-check mask-typed-object type-typed-object ,e-bv) + (bind #t ([t (%mref ,e-bv ,(constant bytevector-type-disp))]) + (build-and + (if check-mutable? + (%type-check mask-mutable-bytevector type-mutable-bytevector ,t) + (%type-check mask-bytevector type-bytevector ,t)) + (cond + [(expr->index e-i bytes (constant maximum-bytevector-length)) => + (lambda (index) (%inline u< - ; NB. add cannot overflow or change negative to positive when - ; low-order (log2 bytes) bits of fixnum value are zero, as - ; guaranteed by type-check above - ,(if (fx= bytes 1) - e-i - (%inline + ,e-i (immediate ,(fix (fx- bytes 1))))) - ,(%inline logand - ,(translate t - (constant bytevector-length-offset) - (constant fixnum-offset)) - (immediate ,(- (constant fixnum-factor))))))]))))))] - [(seq (profile ,src) ,[e]) (and e `(seq (profile ,src) ,e))] - [else #f]))) + (immediate ,(logor (ash (+ index (fx- bytes 1)) (constant bytevector-length-offset)) + (constant type-bytevector) (constant bytevector-immutable-flag))) + ,t))] + [else + (build-and + ($type-check (fxlogor (fix (fx- bytes 1)) (constant mask-fixnum)) (constant type-fixnum) e-i) + (%inline u< + ; NB. add cannot overflow or change negative to positive when + ; low-order (log2 bytes) bits of fixnum value are zero, as + ; guaranteed by type-check above + ,(if (fx= bytes 1) + e-i + (%inline + ,e-i (immediate ,(fix (fx- bytes 1))))) + ,(%inline logand + ,(translate t + (constant bytevector-length-offset) + (constant fixnum-offset)) + (immediate ,(- (constant fixnum-factor))))))]))))))] + [(seq (profile ,src) ,[e]) (and e `(seq (profile ,src) ,e))] + [else #f]))) (define-inline 2 $bytevector-ref-check? [(e-bits e-bv e-i) (build-bytevector-ref-check e-bits e-bv e-i #f)]) (define-inline 2 $bytevector-set!-check? @@ -7951,6 +8108,50 @@ (let () (define build-bytevector (lambda (e*) + (define (find-k n) + (let loop ([bytes (constant-case ptr-bits [(32) 4] [(64) 8])] + [type* (constant-case ptr-bits + [(32) '(unsigned-32 unsigned-16 unsigned-8)] + [(64) '(unsigned-64 unsigned-32 unsigned-16 unsigned-8)])]) + (let ([bytes/2 (fxsrl bytes 1)]) + (if (fx<= n bytes/2) + (loop bytes/2 (cdr type*)) + (values bytes (car type*)))))) + (define (build-chunk k n e*) + (define (build-shift e shift) + (if (fx= shift 0) e (%inline sll ,e (immediate ,shift)))) + (let loop ([k (constant-case native-endianness + [(little) (fxmin k n)] + [(big) k])] + [e* (constant-case native-endianness + [(little) (reverse (if (fx<= n k) e* (list-head e* k)))] + [(big) e*])] + [constant-part 0] + [expression-part #f] + [expression-shift 0] + [mask? #f]) ; no need to mask the high-order byte + (if (fx= k 0) + (if expression-part + (let ([expression-part (build-shift expression-part expression-shift)]) + (if (= constant-part 0) + expression-part + (%inline logor ,expression-part (immediate ,constant-part)))) + `(immediate ,constant-part)) + (let ([k (fx- k 1)] + [constant-part (ash constant-part 8)] + [expression-shift (fx+ expression-shift 8)]) + (if (null? e*) + (loop k e* constant-part expression-part expression-shift #t) + (let ([e (car e*)] [e* (cdr e*)]) + (if (fixnum-constant? e) + (loop k e* (logor constant-part (logand (constant-value e) #xff)) expression-part expression-shift #t) + (loop k e* constant-part + (let* ([e (build-unfix e)] + [e (if mask? (%inline logand ,e (immediate #xff)) e)]) + (if expression-part + (%inline logor ,(build-shift expression-part expression-shift) ,e) + e)) + 0 #t)))))))) (let ([len (length e*)]) (if (fx= len 0) `(quote ,(bytevector)) @@ -7960,16 +8161,19 @@ `(seq (set! ,(%mref ,t ,(constant bytevector-type-disp)) (immediate ,(+ (* len (constant bytevector-length-factor)) - (constant type-bytevector)))) - ,(let f ([e* e*] [offset (constant bytevector-data-disp)]) - (let ([e (car e*)] [e* (cdr e*)]) + (constant type-bytevector)))) + ; build and store k-octet (k = 4 on 32-bit machines, k = 8 on 64-bit + ; machines) chunks, taking endianness into account. for the last + ; chunk, set k = 1, 2, 4, or 8 depending on the number of octets + ; remaining, padding with zeros as necessary. + ,(let f ([e* e*] [n (length e*)] [offset (constant bytevector-data-disp)]) + (let-values ([(k type) (find-k n)]) `(seq - (inline ,(make-info-load 'unsigned-8 #f) ,%store - ,t ,%zero (immediate ,offset) - ,(if (fixnum-constant? e) - `(immediate ,(constant-value e)) - (build-unfix e))) - ,(if (null? e*) t (f e* (fx+ offset 1))))))))))))) + (inline ,(make-info-load type #f) ,%store ,t ,%zero (immediate ,offset) + ,(build-chunk k n e*)) + ,(if (fx<= n k) + t + (f (list-tail e* k) (fx- n k) (fx+ offset k))))))))))))) (define-inline 2 bytevector [e* (and (andmap @@ -9009,7 +9213,7 @@ ,(u32xu32->ptr t-hi %real-zero)))])]) (define-inline 3 $read-performance-monitoring-counter - [(e) + [(e) (constant-case architecture [(x86) (%seq @@ -9219,7 +9423,7 @@ (unless (uvar-in-prefix? x) (uvar-in-prefix! x #t) (set! prefix* (cons x prefix*)))))) - (define add-prefix*! (lambda (x*) (for-each add-prefix! x*))) + (define add-prefix*! (lambda (x*) (for-each add-prefix! x*))) (define reset-prefix*! (lambda (orig-prefix*) (let loop ([ls prefix*] [diff* '()]) @@ -9384,7 +9588,7 @@ (define build-seq* (lambda (x* y) (fold-right build-seq y x*))) (with-output-language (L10 Expr) (define build-seq (lambda (x y) `(seq ,x ,y))) - (define Rhs + (define Rhs (lambda (ir lvalue) (Expr ir (lambda (e) @@ -9554,7 +9758,7 @@ (let ([tmp (make-tmp 't)]) `(seq (set! ,tmp ,rhs) - (mvcall ,(make-info-call (info-call-src info) (info-call-sexpr info) #f #f #f) #f ,consumer ,tmp ())))] + ,(k `(mvcall ,(make-info-call (info-call-src info) (info-call-sexpr info) #f #f #f) #f ,consumer ,tmp ()))))] [else ; set! & mvset `(seq ,e ,(k `(mvcall ,(make-info-call (info-call-src info) (info-call-sexpr info) #f #f #f) #f ,consumer ,(%constant svoid) ())))]))))) (CaseLambdaClause : CaseLambdaClause (ir) -> CaseLambdaClause () @@ -9658,7 +9862,7 @@ ,(Pvalues #f (list tmp))))] [else ; set! & mvset `(seq ,e ,(Pvalues #f (list (%constant svoid))))])]) - (let-values ([(label* body*) + (let-values ([(label* body*) (let loop ([label* label*] [body* body*] [rlabel* '()] [rbody* '()]) (if (null? label*) (values rlabel* rbody*) @@ -9853,7 +10057,7 @@ (pariah) (mvcall ,(make-info-call #f #f #f #t #f) #f (literal ,(make-info-literal #f 'library - (if ioc + (if ioc (lookup-does-not-expect-headroom-libspec event) (lookup-libspec event)) 0)) @@ -9960,7 +10164,6 @@ (import (only asm-module asm-foreign-call asm-foreign-callable asm-enter)) (define newframe-info-for-mventry-point) (define Lcall-error (make-Lcall-error)) - (define asm-return-registers (make-asm-return-registers)) (define dcl*) (define local*) (define max-fv) @@ -10298,6 +10501,7 @@ (safe-assert cnfv) (%seq (remove-frame ,newframe-info) + (restore-local-saves ,newframe-info) (set! ,(ref-reg %cp) ,cnfv) ,(build-shift-args newframe-info)))) ,(build-consumer-call tc (in-context Triv (ref-reg %cp)) #f)) @@ -10305,9 +10509,10 @@ `(seq ,(build-nontail-call info mdcl t0 t1* tc* '() mrvl #t (lambda (newframe-info) - `(seq - (remove-frame ,newframe-info) - ,(build-shift-args newframe-info)))) + (%seq + (remove-frame ,newframe-info) + (restore-local-saves ,newframe-info) + ,(build-shift-args newframe-info)))) ,(build-consumer-call tc #f #f)))))))) (define build-mv-return (lambda (t*) @@ -10413,7 +10618,23 @@ (set! ,x ,t) ,(toC (in-context Rhs (%mref ,x ,(constant record-data-disp))))))] + [(fp-ftd& ,ftd) + (let ([x (make-tmp 't)]) + (%seq + (set! ,x ,t) + (set! ,x ,(%mref ,x ,(constant record-data-disp))) + ,(toC x)))] [else ($oops who "invalid parameter type specifier ~s" type)]))) + (define Scheme->C-for-result + (lambda (type toC t) + (nanopass-case (Ltype Type) type + [(fp-void) (toC)] + [(fp-ftd& ,ftd) + ;; pointer isn't received as a result, but instead passed + ;; to the function as its first argument (or simulated as such) + (toC)] + [else + (Scheme->C type toC t)]))) (define C->Scheme ; ASSUMPTIONS: ac0, ac1, and xp are not C argument registers (lambda (type fromC lvalue) @@ -10481,6 +10702,15 @@ ,(e1 `(goto ,Lbig)) (seq (label ,Lbig) ,e2))))) (e1 e2)))))) + (define (alloc-fptr ftd) + (%seq + (set! ,%xp + ,(%constant-alloc type-typed-object (fx* (constant ptr-bytes) 2) #f)) + (set! + ,(%mref ,%xp ,(constant record-type-disp)) + (literal ,(make-info-literal #f 'object ftd 0))) + (set! ,(%mref ,%xp ,(constant record-data-disp)) ,%ac0) + (set! ,lvalue ,%xp))) (nanopass-case (Ltype Type) type [(fp-void) `(set! ,lvalue ,(%constant svoid))] [(fp-scheme-object) (fromC lvalue)] @@ -10528,15 +10758,17 @@ (set! ,lvalue ,%xp))] [(fp-ftd ,ftd) (%seq - ,(fromC %ac0) ; C integer return might be wiped out by alloc - (set! ,%xp - ,(%constant-alloc type-typed-object (fx* (constant ptr-bytes) 2) #f)) - (set! - ,(%mref ,%xp ,(constant record-type-disp)) - (literal ,(make-info-literal #f 'object ftd 0))) - (set! ,(%mref ,%xp ,(constant record-data-disp)) ,%ac0) - (set! ,lvalue ,%xp))] + ,(fromC %ac0) ; C integer return might be wiped out by alloc + ,(alloc-fptr ftd))] + [(fp-ftd& ,ftd) + (%seq + ,(fromC %ac0) + ,(alloc-fptr ftd))] [else ($oops who "invalid result type specifier ~s" type)])))) + (define (pick-Scall result-type) + (nanopass-case (Ltype Type) result-type + [(fp-void) (lookup-c-entry Scall-any-results)] + [else (lookup-c-entry Scall-one-result)])) (define build-foreign-call (with-output-language (L13 Effect) (lambda (info t0 t1* maybe-lvalue new-frame?) @@ -10556,14 +10788,20 @@ (ccall t0) t1* arg-type* c-args)) ,(let ([e (deallocate)]) (if maybe-lvalue - `(seq ,(C->Scheme result-type c-res maybe-lvalue) ,e) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + ;; Don't actually return a value, because the result + ;; was instead installed in the first argument. + `(seq (set! ,maybe-lvalue ,(%constant svoid)) ,e)] + [else + `(seq ,(C->Scheme result-type c-res maybe-lvalue) ,e)]) e))))]) (if new-frame? (sorry! who "can't handle nontail foreign calls") e)))))) (define build-fcallable (with-output-language (L13 Tail) - (lambda (info) + (lambda (info self-label) (define set-locs (lambda (loc* t* ebody) (fold-right @@ -10578,27 +10816,33 @@ (if (null? frame-x*) (begin (set! max-fv (fxmax max-fv i)) '()) (let ([i (fx+ i 1)]) - (cons (get-fv i) (f (cdr frame-x*) i)))))]) + (cons (get-fv i) (f (cdr frame-x*) i)))))] + [cp-save (meta-cond + [(real-register? '%cp) (make-tmp 'cp)] + [else #f])]) ; add 2 for the old RA and cchain (set! max-fv (fx+ max-fv 2)) - (let-values ([(c-init c-args c-scall) (asm-foreign-callable info)]) - ; c-init save C callee-save registers and restores tc + (let-values ([(c-init c-args c-result c-return) (asm-foreign-callable info)]) + ; c-init saves C callee-save registers and restores tc ; each of c-args sets a variable to one of the C arguments - ; c-scall restores callee-save registers and tail-calls C - ; Three reasons to tail call: - ; (1) let C deal with return value conversion - ; (2) avoid need to lock target code object - ; (3) let C deal with longjmp & cchain + ; c-result converts C results to Scheme values + ; c-return restores callee-save registers and returns to C (%seq ,(c-init) ,(restore-scheme-state - (in) ; save just the required registers, e.g., %sfp - (out %ac0 %ac1 %cp %xp %yp %ts %td scheme-args extra-regs)) + (in %cp) ; to save and then restore just before S_call_help + (out %ac0 %ac1 %xp %yp %ts %td scheme-args extra-regs)) ; need overflow check since we're effectively retroactively turning ; what was a foreign call into a Scheme non-tail call (fcallable-overflow-check) ; leave room for the RA & c-chain (set! ,%sfp ,(%inline + ,%sfp (immediate ,(fx* (constant ptr-bytes) 2)))) + ; stash %cp and restore later to make sure it's intact by the time + ; that we get to S_call_help + ,(meta-cond + [(real-register? '%cp) `(set! ,cp-save ,%cp)] + [else `(nop)]) + ; convert arguments ,(fold-left (lambda (e x arg-type c-arg) `(seq ,(C->Scheme arg-type c-arg x) ,e)) (set-locs fv* frame-x* (set-locs (map (lambda (reg) (in-context Lvalue (%mref ,%tc ,(reg-tc-disp reg)))) reg*) reg-x* @@ -10607,31 +10851,23 @@ ; cookie (0) will be replaced by the procedure, so this ; needs to be a quote, not an immediate (set! ,(ref-reg %ac1) (literal ,(make-info-literal #f 'object 0 0))) + (set! ,(ref-reg %ts) (label-ref ,self-label 0)) ; for locking + ,(meta-cond + [(real-register? '%cp) `(set! ,%cp ,cp-save)] + [else `(nop)]) ,(save-scheme-state - (in %ac0 %ac1) - (out %cp %xp %yp %ts %td scheme-args extra-regs)) - ,(c-scall fv* - (nanopass-case (Ltype Type) result-type - [(fp-scheme-object) (lookup-c-entry Scall->ptr)] - [(fp-void) (lookup-c-entry Scall->void)] - [(fp-fixnum) (lookup-c-entry Scall->fixnum)] - [(fp-integer ,bits) - (case bits - [(8 16 32) (lookup-c-entry Scall->int32)] - [(64) (lookup-c-entry Scall->int64)] - [else ($oops 'foreign-callable "unsupported result type specifier integer-~s" bits)])] - [(fp-unsigned ,bits) - (case bits - [(8 16 32) (lookup-c-entry Scall->uns32)] - [(64) (lookup-c-entry Scall->uns64)] - [else ($oops 'foreign-callable "unsupported result type specifier unsigned-~s" bits)])] - [(fp-double-float) (lookup-c-entry Scall->double)] - [(fp-single-float) (lookup-c-entry Scall->single)] - [(fp-u8*) (lookup-c-entry Scall->bytevector)] - [(fp-u16*) (lookup-c-entry Scall->bytevector)] - [(fp-u32*) (lookup-c-entry Scall->bytevector)] - [(fp-ftd ,ftd) (lookup-c-entry Scall->fptr)] - [else ($oops 'compiler-internal "invalid result type specifier ~s" result-type)])))))))))))) + (in %ac0 %ac1 %ts %cp) + (out %xp %yp %td scheme-args extra-regs)) + ; Scall-{any,one}-results calls the Scheme implementation of the + ; callable, locking this callable wrapper (as communicated in %ts) + ; until just before returning + (inline ,(make-info-c-simple-call fv* #f (pick-Scall result-type)) ,%c-simple-call) + ,(restore-scheme-state + (in %ac0) + (out %ac1 %cp %xp %yp %ts %td scheme-args extra-regs)) + ; assuming no use of %cp from here on that could get saved into `(%tc-ref cp)`: + ,(Scheme->C-for-result result-type c-result %ac0) + ,(c-return))))))))))) (define handle-do-rest (lambda (fixed-args offset save-asm-ra?) (with-output-language (L13 Effect) @@ -10943,11 +11179,11 @@ (safe-assert (nodups local*)) (for-each (lambda (local) (uvar-location-set! local #f)) local*) `(lambda ,info ,max-fv (,local* ...) ,tlbody))))] - [(fcallable ,info) + [(fcallable ,info ,l) (let ([lambda-info (make-info-lambda #f #f #f (list (length (info-foreign-arg-type* info))) - (info-foreign-name info))]) + (info-foreign-name info) (constant code-flag-template))]) (fluid-let ([max-fv 0] [local* '()]) - (let ([tlbody (build-fcallable info)]) + (let ([tlbody (build-fcallable info l)]) `(lambda ,lambda-info ,max-fv (,local* ...) ,tlbody))))] [(hand-coded ,sym) (case sym @@ -11154,20 +11390,22 @@ (handle-do-rest fixed-args frame-args-offset #f))] ; TODO: get internal error when , is missing from ,l [(mventry-point (,x* ...) ,l) - (let f ([x* x*]) - (if (null? x*) - (%seq - (remove-frame ,newframe-info-for-mventry-point) - (goto ,l)) - (let ([x (car x*)]) - (if (uvar-referenced? x) - `(seq (set! ,x ,(uvar-location x)) ,(f (cdr x*))) - (f (cdr x*))))))] + (%seq + (remove-frame ,newframe-info-for-mventry-point) + ,(let f ([x* x*]) + (if (null? x*) + (%seq + (restore-local-saves ,newframe-info-for-mventry-point) + (goto ,l)) + (let ([x (car x*)]) + (if (uvar-referenced? x) + `(seq (set! ,x ,(uvar-location x)) ,(f (cdr x*))) + (f (cdr x*)))))))] [(mvcall ,info ,mdcl ,t0? ,t1* ... (,t* ...)) (let ([mrvl (make-local-label 'mrvl)]) (build-nontail-call info mdcl t0? t1* t* '() mrvl #f (lambda (newframe-info) - `(seq (label ,mrvl) (remove-frame ,newframe-info)))))] + (%seq (label ,mrvl) (remove-frame ,newframe-info) (restore-local-saves ,newframe-info)))))] [(mvset ,info (,mdcl ,t0? ,t1* ...) (,t* ...) ((,x** ...) ...) ,ebody) (let* ([frame-x** (map (lambda (x*) (set-formal-registers! x*)) x**)] [nfv** (map (lambda (x*) (map (lambda (x) @@ -11184,7 +11422,12 @@ [(set! ,[lvalue] (mvcall ,info ,mdcl ,t0? ,t1* ... (,t* ...))) (build-nontail-call info mdcl t0? t1* t* '() #f #f (lambda (newframe-info) - `(seq (set! ,lvalue ,%ac0) (remove-frame ,newframe-info))))] + (let ([retval (make-tmp 'retval)]) + (%seq + (remove-frame ,newframe-info) + (set! ,retval ,%ac0) + (restore-local-saves ,newframe-info) + (set! ,lvalue ,retval)))))] [(foreign-call ,info ,[t0] ,[t1*] ...) (build-foreign-call info t0 t1* #f #t)] [(set! ,[lvalue] (foreign-call ,info ,[t0] ,[t1*] ...)) @@ -11247,7 +11490,6 @@ (definitions (import (only asm-module asm-enter)) (define Ldoargerr (make-Ldoargerr)) - (define asm-return-registers (make-asm-return-registers)) (define-$type-check (L13.5 Pred)) (define make-info (lambda (name interface*) @@ -11726,7 +11968,6 @@ (set! ,%xp (literal ,(make-info-literal #f 'object #vu8() 0))) (asm-return ,return-live* ...)) ,(%seq - ; TODO: avoid use of ac1 by insisting that get-room preserve ts & td (set! ,(ref-reg %ac1) ,%td) (set! ,%td ,(%inline + ,%td (immediate @@ -12032,7 +12273,7 @@ `(lambda ,(make-info "$install-library-entry" '(2)) 0 () ,(%seq ,(with-saved-ret-reg - (%seq + (%seq ,(save-scheme-state (in scheme-args) (out %ac0 %ac1 %cp %xp %yp %ts %td extra-regs)) @@ -12045,9 +12286,10 @@ (jump ,%ref-ret (,%ac0))))] [(bytevector=?) (let ([bv1 (make-tmp 'bv1)] [bv2 (make-tmp 'bv2)] [idx (make-tmp 'idx)] [len2 (make-tmp 'len2)]) + (define (argcnt->max-fv n) (max (- n (length arg-registers)) 0)) (let ([Ltop (make-local-label 'Ltop)] [Ltrue (make-local-label 'Ltrue)] [Lfail (make-local-label 'Lfail)]) (define iptr-bytes (in-context Triv (%constant ptr-bytes))) - `(lambda ,(make-info "bytevector=?" '(2)) 0 (,bv1 ,bv2 ,idx ,len2) + `(lambda ,(make-info "bytevector=?" '(2)) ,(argcnt->max-fv 2) (,bv1 ,bv2 ,idx ,len2) ,(%seq (set! ,bv1 ,(make-arg-opnd 1)) (set! ,bv2 ,(make-arg-opnd 2)) @@ -12140,13 +12382,16 @@ (label ,Lret) (rp-header ,Lmvreturn ,(* 2 (constant ptr-bytes)) 1) ; cchain is live at sfp[ptr-bytes] (set! ,(ref-reg %ac1) (immediate 1)) ; single-value as expected - (label ,Lexit) ,(save-scheme-state (in %ac0 %ac1) (out %cp %xp %yp %ts %td scheme-args extra-regs)) + (label ,Lexit) (inline ,(make-info-c-simple-call #f (lookup-c-entry Sreturn)) ,%c-simple-call) (label ,Lmvreturn) (set! ,(ref-reg %ac1) ,%ac0) + ,(save-scheme-state + (in %ac0 %ac1 scheme-args) + (out %cp %xp %yp %ts %td extra-regs)) (goto ,Lexit))))] [else ($oops who "unrecognized hand-coded name ~s" sym)])])) @@ -12370,7 +12615,7 @@ (define add-instr! (lambda (block ir) (block-effect*-set! block (cons ir (block-effect* block))))) - + (define add-label-link! (lambda (from l setter) (let ([x (local-label-block l)]) @@ -12384,7 +12629,7 @@ (safe-assert (not (block? x))) (when x (for-each (lambda (add-link!) (add-link! to)) x)) (local-label-block-set! l to)))) - + (define-pass build-graph : (L14 Tail) (ir) -> * (block block*) (definitions (define add-goto-block @@ -12436,6 +12681,10 @@ (let ([block (make-tail-block)]) (tail-block-tail-set! block (with-output-language (L15a Tail) `(asm-return ,reg* ...))) (values block (cons block block*)))] + [(asm-c-return ,info ,reg* ...) + (let ([block (make-tail-block)]) + (tail-block-tail-set! block (with-output-language (L15a Tail) `(asm-c-return ,info ,reg* ...))) + (values block (cons block block*)))] [else ($oops who "unexpected Tail ~s" ir)]) (Effect : Effect (ir target block*) -> * (target block*) [(nop) (values target block*)] @@ -12465,6 +12714,9 @@ [(remove-frame ,info) (add-instr! target (with-output-language (L15a Effect) `(remove-frame ,(make-live-info) ,info))) (values target block*)] + [(restore-local-saves ,info) + (add-instr! target (with-output-language (L15a Effect) `(restore-local-saves ,(make-live-info) ,info))) + (values target block*)] [(return-point ,info ,rpl ,mrvl (,cnfv* ...)) (add-instr! target (with-output-language (L15a Effect) `(return-point ,info ,rpl ,mrvl (,cnfv* ...)))) (block-return-point! target #t) @@ -12591,7 +12843,7 @@ (include "types.ss") (let ([n (fx- ($block-counter) 1)]) ($block-counter n) - (block-pseudo-src-set! block + (block-pseudo-src-set! block (make-source ($sfd) n (block-checksum block))))) block*) ir])) @@ -12674,7 +12926,7 @@ [(lambda ,info ,max-fv (,local* ...) (,entry-block* ...) (,block* ...)) (safe-assert (not (ormap block-seen? block*))) ; optimistically assume all blocks are pariahs, then un-pariah anything reachable from - ; the entry block without going through a known pariah block + ; the entry block without going through a known pariah block (for-each (lambda (b) (if (block-pariah? b) (block-seen! b #t) (block-pariah! b #t))) block*) (for-each propagate! entry-block*) (for-each (lambda (b) (block-seen! b #f)) block*) @@ -12801,7 +13053,7 @@ [else (sorry! who "unrecognized block ~s" block)])]) (safe-assert (not (null? links))) ; AWK: we are missing the notion of those instructions that usually - ; succeed (dooverflow, dooverflood, call-error, fx+? and fx-? in + ; succeed (dooverflow, dooverflood, call-error, fx+? and fx-? in ; the original blocks.ss code) (let-values ([(pariah* non-pariah*) (partition (lambda (link) (block-pariah? (link-to link))) links)]) @@ -12948,7 +13200,7 @@ (cons* (car effect*) ir (cdr effect*)) (cons ir effect*)))))) (with-output-language (L15a Effect) - (add-instr! block + (add-instr! block `(inline ,(make-live-info) ,null-info ,%inc-profile-counter (literal ,(make-info-literal #t 'object counter (constant record-data-disp))) (immediate 1)))))) @@ -13006,8 +13258,8 @@ ; op -> counter | (plus-counter* . minus-counter*) ; plus-counter* -> (op ...) ; minus-counter* -> (op ...) - (define make-op - (lambda (plus minus) + (define make-op + (lambda (plus minus) ; optimize ((op) . ()) => op (if (and (null? minus) (fx= (length plus) 1)) (car plus) @@ -13047,7 +13299,7 @@ (link-op-set! l counter) counter))]))) (define (filter-src* block) - (cond + (cond [(eq? ($compile-profile) 'source) (block-src* block)] [(block-pseudo-src block) => list] [else '()])) @@ -13265,7 +13517,7 @@ [(newframe-block? block) (fprintf p " ~s\n" `(goto ,(block->pretty-name (newframe-block-next block))))] [else (sorry! who "unrecognized block ~s" block)])) block*))))) - + (define-pass np-add-in-links! : L15a (ir) -> L15a () (CaseLambdaExpr : CaseLambdaExpr (ir) -> CaseLambdaExpr () [(lambda ,info ,max-fv (,local* ...) (,entry-block* ...) (,block* ...)) @@ -13298,7 +13550,7 @@ (lambda (b) (unless (block-finished? b) (if (block-seen? b) - (begin + (begin (block-loop-header! b #t) (set! lh* (cons b lh*))) (begin @@ -13350,11 +13602,11 @@ [(if-block? b) ; must follow same order as loop above so we find the same loop headers (let ([lhs (f (if-block-true b))]) - (tree-merge lhs (f (if-block-false b))))] + (tree-merge lhs (f (if-block-false b)) tree-size))] [(newframe-block? b) ; must follow same order as loop above so we find the same loop headers - (fold-left (lambda (lhs b) (tree-merge lhs (f b))) - (let ([lhs (f (newframe-block-next b))]) (tree-merge lhs (f (newframe-block-rp b)))) + (fold-left (lambda (lhs b) (tree-merge lhs (f b) tree-size)) + (let ([lhs (f (newframe-block-next b))]) (tree-merge lhs (f (newframe-block-rp b)) tree-size)) (newframe-block-rp* b))] [else (sorry! who "unrecognized block ~s" b)]))]) (unless (or (block-loop-header? b) (eqv? (block-loop-headers b) empty-tree)) @@ -13746,6 +13998,7 @@ [else (sorry! who "unrecognized block ~s" block)])))) (Tail : Tail (ir chunk* offset) -> * (code* chunk* offset) [(asm-return) (values (asm-return) chunk* offset)] + [(asm-c-return ,info) (values (asm-c-return info) chunk* offset)] [(jump (label-ref ,l ,offset0)) (values (asm-direct-jump l offset0) chunk* offset)] [(jump (literal ,info)) @@ -13816,6 +14069,11 @@ (list->vector (ctci-rpi* ctci)))]) (vector-sort! (lambda (x y) (fx< (rp-info-offset x) (rp-info-offset y))) v) v)))] + [(and (generate-procedure-source-information) + (info-lambda-src info)) => + (lambda (src) + (include "types.ss") + (make-code-info src #f #f #f #f))] [else #f]) (info-lambda-pinfo* info)) (lambda (p) (c-trace (info-lambda-name info) code-size trace* p)))]) @@ -13891,13 +14149,14 @@ (define-threaded unspillable*) (define-threaded max-fv) (define-threaded max-fs@call) + (define-threaded poison-cset) (define no-live* empty-tree) (define union-live ; union live1 and live2. result is eq? to live1 if result is same as live1. - (lambda (live1 live2) - (tree-merge live1 live2))) + (lambda (live1 live2 live-size) + (tree-merge live1 live2 live-size))) (define same-live? (lambda (live1 live2) @@ -13933,15 +14192,22 @@ new) live*))))) - (module (make-cset conflict-bit-set! conflict-bit-unset! conflict-bit-set? conflict-bit-count cset-merge! cset-copy cset-for-each extract-conflicts) + (module (make-empty-cset make-full-cset cset-full? conflict-bit-set! conflict-bit-unset! conflict-bit-set? conflict-bit-count cset-merge! cset-copy cset-for-each extract-conflicts) (define-record-type cset (nongenerative) - (fields size (mutable tree)) - (protocol - (lambda (n) - (case-lambda - [(size) (n size empty-tree)] - [(size tree) (n size tree)])))) + (fields size (mutable tree))) + + (define make-empty-cset + (lambda (size) + (make-cset size empty-tree))) + + (define make-full-cset + (lambda (size) + (make-cset size full-tree))) + + (define cset-full? + (lambda (cset) + (eq? (cset-tree cset) full-tree))) (define conflict-bit-set! (lambda (cset offset) @@ -13959,11 +14225,11 @@ (define conflict-bit-count (lambda (cset) - (tree-bit-count (cset-tree cset)))) + (tree-bit-count (cset-tree cset) (cset-size cset)))) (define cset-merge! (lambda (cset1 cset2) - (cset-tree-set! cset1 (tree-merge (cset-tree cset1) (cset-tree cset2))))) + (cset-tree-set! cset1 (tree-merge (cset-tree cset1) (cset-tree cset2) (cset-size cset1))))) (define cset-copy (lambda (cset) @@ -13971,7 +14237,7 @@ (define cset-for-each (lambda (cset proc) - (tree-for-each (cset-tree cset) (cset-size cset) proc))) + (tree-for-each (cset-tree cset) (cset-size cset) 0 (cset-size cset) proc))) (define extract-conflicts (lambda (cset v) @@ -14023,6 +14289,9 @@ [(asm-return ,reg* ...) (safe-assert (eq? out no-live*)) (fold-left add-var no-live* reg*)] + [(asm-c-return ,info ,reg* ...) + (safe-assert (eq? out no-live*)) + (fold-left add-var no-live* reg*)] [(jump ,live-info ,t (,var* ...)) (let ([out (fold-left add-var out var*)]) (live-info-live-set! live-info out) @@ -14057,10 +14326,11 @@ (let ([out (if (info-kill*? info) (fold-left remove-var out (info-kill*-kill* info)) out)]) (live-info-live-set! live-info out) (let ([out (fold-left Triv out t*)]) - (if (info-kill*-live*? info) + (if (info-kill*-live*? info) (fold-left add-var out (info-kill*-live*-live* info)) out)))] [(remove-frame ,live-info ,info) (live-info-live-set! live-info out) out] + [(restore-local-saves ,live-info ,info) (live-info-live-set! live-info out) out] [(shift-arg ,live-info ,reg ,imm ,info) (live-info-live-set! live-info out) out] [(overflow-check ,live-info) (live-info-live-set! live-info out) out] [(overflood-check ,live-info) (live-info-live-set! live-info out) out] @@ -14121,7 +14391,7 @@ (force-live-in! true-block) (force-live-in! false-block) (block-seen! block #f) - (let ([out (union-live (block-live-in true-block) (block-live-in false-block))]) + (let ([out (union-live (block-live-in true-block) (block-live-in false-block) live-size)]) (when (different? out (if-block-live-out block)) (if-block-live-out-set! block out) (propagate-live! block out))))] @@ -14154,7 +14424,7 @@ (let ([call (add-var (fold-left (lambda (live* x*) (fold-left remove-var live* x*)) - rp + rp (cons* ; could base set of registers to kill on expected return values (reg-cons* %ret %ac0 arg-registers) @@ -14164,9 +14434,10 @@ (newframe-block-live-call-set! block call) call)))]) (let ([out (union-live - (fold-left (lambda (live b) (union-live (block-live-in b) live)) + (fold-left (lambda (live b) (union-live (block-live-in b) live live-size)) (block-live-in next-block) rp-block*) - (fold-left add-var call (info-newframe-cnfv* newframe-info)))]) + (fold-left add-var call (info-newframe-cnfv* newframe-info)) + live-size)]) (when (different? out (newframe-block-live-out block)) (newframe-block-live-out-set! block out) (propagate-live! block out))))))] @@ -14221,7 +14492,7 @@ (uvar-spilled! x #t) (unless (block-pariah? block) (uvar-save-weight-set! x - (fixnum + (fixnum (+ (uvar-save-weight x) (* (info-newframe-weight newframe-info) 2))))))) call-live*) @@ -14234,23 +14505,55 @@ (define $add-move! (lambda (x1 x2 weight) (when (uvar? x1) - (uvar-move*-set! x1 - (call-with-values - (lambda () - (let f ([move* (uvar-move* x1)]) - (if (null? move*) - (values (cons x2 weight) move*) - (let ([move (car move*)] [move* (cdr move*)]) - (if (eq? (car move) x2) - (values (cons (car move) (fx+ (cdr move) weight)) move*) - (let-values ([(move2 move*) (f move*)]) - (if (fx> (cdr move2) (cdr move)) - (values move2 (cons move move*)) - (values move (cons move2 move*))))))))) - cons))))) + (when (or (not (uvar-poison? x1)) (fv? x2)) + (uvar-move*-set! x1 + (call-with-values + (lambda () + (let f ([move* (uvar-move* x1)]) + (if (null? move*) + (values (cons x2 weight) move*) + (let ([move (car move*)] [move* (cdr move*)]) + (if (eq? (car move) x2) + (values (cons (car move) (fx+ (cdr move) weight)) move*) + (let-values ([(move2 move*) (f move*)]) + (if (fx> (cdr move2) (cdr move)) + (values move2 (cons move move*)) + (values move (cons move2 move*))))))))) + cons)))))) - (define-who do-spillable-conflict! + (define-who identify-poison! (lambda (kspillable varvec live-size block*) + (define kpoison 0) + (define increment-live-counts! + (lambda (live) + (tree-for-each live live-size 0 kspillable + (lambda (offset) + (let ([x (vector-ref varvec offset)]) + (let ([range (fx+ (uvar-live-count x) 1)]) + (when (fx= range 2) + (uvar-poison! x #t) + (set! kpoison (fx+ kpoison 1))) + (uvar-live-count-set! x range))))))) + (define Effect + (lambda (live* e) + (nanopass-case (L15a Effect) e + [(set! ,live-info ,x ,rhs) + (guard (uvar? x)) + (if (live-info-useless live-info) + live* + (cons (live-info-live live-info) live*))] + [else live*]))) + (let ([vlive (list->vector (fold-left (lambda (live* block) (fold-left Effect live* (block-effect* block))) '() block*))]) + (let ([nvlive (vector-length vlive)]) + (let refine ([skip 64] [stride 64]) + (do ([i (fx- skip 1) (fx+ i stride)]) + ((fx>= i nvlive)) + (increment-live-counts! (vector-ref vlive i))) + (unless (or (fx= stride 16) (< (* (fx- kspillable kpoison) (fx* stride 2)) 1000000)) + (refine (fxsrl skip 1) skip))))))) + + (define-who do-spillable-conflict! + (lambda (kspillable kfv varvec live-size block*) (define remove-var (make-remove-var live-size)) (define add-move! (lambda (x1 x2) @@ -14259,19 +14562,42 @@ ($add-move! x2 x1 2)))) (define add-conflict! (lambda (x out) + ; invariants: + ; all poison spillables explicitly point to all spillables + ; all non-poison spillables implicitly point to all poison spillables via poison-cset (let ([x-offset (var-index x)]) (when x-offset - (tree-for-each out live-size - (let ([cset (var-spillable-conflict* x)]) - (if (fx< x-offset kspillable) - (lambda (y-offset) - ; x is a spillable. if y is also a spillable, point x at y - (when (fx< y-offset kspillable) (conflict-bit-set! cset y-offset)) - ; point y at the spillable x regardless - (conflict-bit-set! (var-spillable-conflict* (vector-ref varvec y-offset)) x-offset)) - (lambda (y-offset) - ; x is fixed. if y is a spillable, point x at y - (when (fx< y-offset kspillable) (conflict-bit-set! cset y-offset)))))))))) + (if (and (fx< x-offset kspillable) (uvar-poison? x)) + (tree-for-each out live-size kspillable (fx+ kspillable kfv) + (lambda (y-offset) + ; frame y -> poison spillable x + (conflict-bit-set! (var-spillable-conflict* (vector-ref varvec y-offset)) x-offset))) + (let ([cset (var-spillable-conflict* x)]) + (if (fx< x-offset kspillable) + (begin + (tree-for-each out live-size 0 kspillable + (lambda (y-offset) + (let ([y (vector-ref varvec y-offset)]) + (unless (uvar-poison? y) + ; non-poison spillable x -> non-poison spillable y + (conflict-bit-set! cset y-offset) + ; and vice versa + (conflict-bit-set! (var-spillable-conflict* y) x-offset))))) + (tree-for-each out live-size kspillable live-size + (lambda (y-offset) + (let ([y (vector-ref varvec y-offset)]) + ; frame or register y -> non-poison spillable x + (conflict-bit-set! (var-spillable-conflict* y) x-offset))))) + (if (fx< x-offset (fx+ kspillable kfv)) + (tree-for-each out live-size 0 kspillable + (lambda (y-offset) + ; frame x -> poison or non-poison spillable y + (conflict-bit-set! cset y-offset))) + (tree-for-each out live-size 0 kspillable + (lambda (y-offset) + (unless (uvar-poison? (vector-ref varvec y-offset)) + ; register x -> non-poison spillable y + (conflict-bit-set! cset y-offset)))))))))))) (define Rhs (lambda (rhs live) (nanopass-case (L15a Rhs) rhs @@ -14301,7 +14627,19 @@ (for-each (lambda (x) (add-conflict! x live)) (info-kill*-kill* info))) (cons e new-effect*)] [else (cons e new-effect*)]))) - (vector-for-each (lambda (x) (var-spillable-conflict*-set! x (make-cset kspillable))) varvec) + (do ([i 0 (fx+ i 1)]) + ((fx= i kspillable)) + (let ([x (vector-ref varvec i)]) + (if (uvar-poison? x) + (begin + (conflict-bit-set! poison-cset i) + ; leaving each poison spillable in conflict with itself, but this shouldn't matter + ; since we never ask for the degree of a poison spillable + (var-spillable-conflict*-set! x (make-full-cset kspillable))) + (var-spillable-conflict*-set! x (make-empty-cset kspillable))))) + (do ([i kspillable (fx+ i 1)]) + ((fx= i live-size)) + (var-spillable-conflict*-set! (vector-ref varvec i) (make-empty-cset kspillable))) (for-each (lambda (block) (block-effect*-set! block @@ -14334,13 +14672,11 @@ ; tempting to set to cset2 rather than (cset-copy cset2), but this would not be ; correct for local saves, which need their unaltered sets for later, and copying ; is cheap anyway. - (var-spillable-conflict*-set! fv (cset-copy cset2)))))) + (var-spillable-conflict*-set! fv (cset-copy cset2)))) + (unless (uvar-poison? spill) (cset-merge! (var-spillable-conflict* fv) poison-cset)))) (define assign-frame! - (lambda () - (define spillable? - (lambda (x) - (and (uvar? x) (not (uvar-unspillable? x))))) + (lambda (spill*) (define sort-spill* ; NB: sorts based on likelihood of successfully assigning move-related vars to the same location ; NB: probably should sort based on value of assigning move-related vars to the same location, @@ -14360,15 +14696,12 @@ w))]) ((null? move*) (cons x w)))) spill*))))) - (define conflict? - (lambda (x fv-offset) - (conflict-fv? x (get-fv fv-offset)))) - (define conflict-fv? - (lambda (x fv) - (let ([cset (var-spillable-conflict* fv)]) - (and cset (conflict-bit-set? cset (var-index x)))))) (define find-move-related-home (lambda (x0 succ fail) + (define conflict-fv? + (lambda (x fv) + (let ([cset (var-spillable-conflict* fv)]) + (and cset (conflict-bit-set? cset (var-index x)))))) (let f ([x x0] [work* '()] [clear-seen! void]) (if (uvar-seen? x) (if (null? work*) (begin (clear-seen!) (fail)) (f (car work*) (cdr work*) clear-seen!)) @@ -14394,31 +14727,36 @@ (loop move* (cons var work*)))) (loop move* work*))))))))))) (define find-home! - (lambda (spill max-fv) + (lambda (spill max-fv first-open) (define return - (lambda (home max-fv) + (lambda (home max-fv first-open) (uvar-location-set! spill home) (update-conflict! home spill) - max-fv)) + (values max-fv first-open))) (find-move-related-home spill - (lambda (home) (return home max-fv)) + (lambda (home) (return home max-fv first-open)) (lambda () - (let f ([fv-offset 1]) - (if (conflict? spill fv-offset) - (f (fx+ fv-offset 1)) - (return (get-fv fv-offset) (fxmax fv-offset max-fv)))))))) + (let f ([first-open first-open]) + (let* ([fv (get-fv first-open)] [cset (var-spillable-conflict* fv)]) + (if (and cset (cset-full? cset)) + (f (fx+ first-open 1)) + (let ([spill-offset (var-index spill)]) + (let f ([fv-offset first-open] [fv fv] [cset cset]) + (if (and cset (conflict-bit-set? cset spill-offset)) + (let* ([fv-offset (fx+ fv-offset 1)] [fv (get-fv fv-offset)] [cset (var-spillable-conflict* fv)]) + (f fv-offset fv cset)) + (return fv (fxmax fv-offset max-fv) first-open))))))))))) (define find-homes! - (lambda (spill* max-fv) - (let f ([spill* spill*] [max-fv max-fv]) - (if (null? spill*) - max-fv - (let ([spill (car spill*)]) - (f (cdr spill*) (find-home! spill max-fv))))))) + (lambda (spill* max-fv first-open) + (if (null? spill*) + max-fv + (let-values ([(max-fv first-open) (find-home! (car spill*) max-fv first-open)]) + (find-homes! (cdr spill*) max-fv first-open))))) ; NOTE: call-live uvars should be sorted so that those that are call-live with few other ; variables are earlier in the list (and more likely to get a low frame location); ; additionally if they are live across many frames they should be prioritized over those ; live across only a few (only when setup-nfv?) - (set! max-fv (find-homes! (sort-spill* (filter uvar-spilled? spillable*)) max-fv)))) + (set! max-fv (find-homes! (sort-spill* spill*) max-fv 1)))) (define-pass assign-new-frame! : (L15a Dummy) (ir lambda-info live-size varvec block*) -> (L15b Dummy) () (definitions @@ -14457,25 +14795,41 @@ (for-each (lambda (nfv*) (set-offsets! nfv* arg-base)) nfv**) base) (loop (fx+ base 1)))))))) + (define build-mask + (lambda (index*) + (define bucket-width (if (fx> (fixnum-width) 32) 32 16)) + (let* ([nbits (fx+ (fold-left (lambda (m index) (fxmax m index)) -1 index*) 1)] + [nbuckets (fxdiv (fx+ nbits (fx- bucket-width 1)) bucket-width)] + [buckets (make-fxvector nbuckets 0)]) + (for-each + (lambda (index) + (let-values ([(i j) (fxdiv-and-mod index bucket-width)]) + (fxvector-set! buckets i (fxlogbit1 j (fxvector-ref buckets i))))) + index*) + (let f ([base 0] [len nbuckets]) + (if (fx< len 2) + (if (fx= len 0) + 0 + (fxvector-ref buckets base)) + (let ([half (fxsrl len 1)]) + (logor + (bitwise-arithmetic-shift-left (f (fx+ base half) (fx- len half)) (fx* half bucket-width)) + (f base half)))))))) (define build-live-pointer-mask (lambda (live*) - (define set-lpm-bit - (lambda (fv lpm) - (let ([i (fv-offset fv)]) - (if (fx= i 0) - lpm - (logbit1 (fx- i 1) lpm))))) - (fold-left - (lambda (lpm live) - (cond - [(fv? live) - ; assuming call-live frame variables are ptrs for the time being - ; they should all be products of tail-frame optimization on (ptr) arguments - (set-lpm-bit live lpm)] - [(and live (eq? (uvar-type live) 'ptr)) - (set-lpm-bit (uvar-location live) lpm)] - [else lpm])) - 0 live*))) + (build-mask + (fold-left + (lambda (index* live) + (define (cons-fv fv index*) + (let ([offset (fv-offset fv)]) + (if (fx= offset 0) ; no bit for fv0 + index* + (cons (fx- offset 1) index*)))) + (cond + [(fv? live) (cons-fv live index*)] + [(eq? (uvar-type live) 'ptr) (cons-fv (uvar-location live) index*)] + [else index*])) + '() live*)))) (define (process-info-newframe! info) (unless (info-newframe-frame-words info) (let ([call-live* (info-newframe-call-live* info)]) @@ -14491,23 +14845,25 @@ (cond [(and call-live* (info-lambda-ctci lambda-info)) => (lambda (ctci) - (let ([mask (fold-left - (lambda (mask x) - (cond - [(and (uvar? x) (uvar-iii x)) => - (lambda (index) - (let ([name.offset (vector-ref (ctci-live ctci) index)]) - (unless (logbit? (fx- (cdr name.offset) 1) lpm) - (sorry! who "bit ~s not set for ~s in ~s" (cdr name.offset) (car name.offset) lpm))) - (logor (ash 1 index) mask))] - [else mask])) - 0 call-live*)]) + (let ([mask (build-mask + (fold-left + (lambda (i* x) + (cond + [(and (uvar? x) (uvar-iii x)) => + (lambda (index) + (safe-assert + (let ([name.offset (vector-ref (ctci-live ctci) index)]) + (logbit? (fx- (cdr name.offset) 1) lpm))) + (cons index i*))] + [else i*])) + '() call-live*))]) (when (or src sexpr (not (eqv? mask 0))) (ctci-rpi*-set! ctci (cons (make-ctrpi rpl src sexpr mask) (ctci-rpi* ctci))))))])))) (Pred : Pred (ir) -> Pred ()) (Tail : Tail (ir) -> Tail () [(jump ,live-info ,[t] (,var* ...)) `(jump ,live-info ,t)] - [(asm-return ,reg* ...) `(asm-return)]) + [(asm-return ,reg* ...) `(asm-return)] + [(asm-c-return ,info ,reg* ...) `(asm-c-return ,info)]) (Effect : Effect (ir) -> Effect ()) (foldable-Effect : Effect (ir new-effect*) -> * (new-effect*) [(return-point ,info ,rpl ,mrvl (,cnfv* ...)) @@ -14521,12 +14877,16 @@ (process-info-newframe! info) (with-output-language (L15b Effect) (let ([live (live-info-live live-info)]) + (cons* + `(fp-offset ,live-info ,(fx- (fx* (info-newframe-frame-words info) (constant ptr-bytes)))) + `(overflood-check ,(make-live-info live)) + new-effect*)))] + [(restore-local-saves ,live-info ,info) + (with-output-language (L15b Effect) + (let ([live (live-info-live live-info)]) (let loop ([x* (filter (lambda (x) (live? live live-size x)) (info-newframe-local-save* info))] [live live] - [new-effect* (cons* - `(fp-offset ,live-info ,(fx- (fx* (info-newframe-frame-words info) (constant ptr-bytes)))) - `(overflood-check ,(make-live-info live)) - new-effect*)]) + [new-effect* new-effect*]) (if (null? x*) new-effect* (let* ([x (car x*)] [live (remove-var live x)]) @@ -14556,7 +14916,7 @@ (lambda (x) ; NB: experiment with different comparisions. might want ref weight ; NB: to be at least more than save weight to relieve register pressure. - (when (and (uvar-spilled? x) (fx>= (uvar-ref-weight x) (uvar-save-weight x))) + (when (and (uvar-spilled? x) (not (uvar-poison? x)) (fx>= (uvar-ref-weight x) (uvar-save-weight x))) (uvar-local-save! x #t))) spillable*) (for-each @@ -14587,7 +14947,8 @@ (lambda (x) (when (uvar-local-save? x) (uvar-location-set! x #f) - (uvar-spilled! x #f))) + (uvar-spilled! x #f) + (uvar-save-weight-set! x 0))) spillable*) `(dummy)))) @@ -14610,7 +14971,7 @@ (let ([effect* (block-effect* block)]) (block-fp-offset-set! block cur-off) (cond - [(goto-block? block) + [(goto-block? block) (record-fp-offsets! (goto-block-next block) (fold-left Effect cur-off effect*))] [(joto-block? block) (record-fp-offsets! (joto-block-next block) 0)] @@ -14771,7 +15132,7 @@ (define-pass literal@->literal : (L15c Triv) (ir) -> (L15d Triv) () (Triv : Triv (ir) -> Triv () [(literal ,info) - `(literal + `(literal ,(make-info-literal #f (info-literal-type info) (info-literal-addr info) (info-literal-offset info)))] [else (sorry! who "unexpected literal ~s" ir)])) @@ -14840,7 +15201,7 @@ (if force-overflow? (fxmax (fx- (fx* max-fs@call (constant ptr-bytes)) 0) - (fx- (fx* (fx+ max-fv 1) (constant ptr-bytes)) (fx- (constant stack-slop) (fx* (constant stack-frame-limit) 2)))) + (fx- (fx* (fx+ max-fv 1) (constant ptr-bytes)) (fx- (constant stack-slop) (fx* (constant stack-frame-limit) 2)))) (fxmax (fx- (fx* max-fs@call (constant ptr-bytes)) (constant stack-frame-limit)) (fx- (fx* (fx+ max-fv 1) (constant ptr-bytes)) (fx- (constant stack-slop) (constant stack-frame-limit))))))) @@ -14901,7 +15262,8 @@ (Tail : Tail (ir) -> Tail () [(jump ,live-info ,t) (handle-jump t (live-info-live live-info))] [(goto ,l) (values '() `(goto ,l))] - [(asm-return) (values '() `(asm-return))]) + [(asm-return) (values '() `(asm-return))] + [(asm-c-return ,info) (values '() `(asm-c-return ,info))]) (Effect : Effect (ir new-effect*) -> * (new-effect*) [(set! ,live-info ,lvalue ,rhs) (Rhs rhs lvalue new-effect* (live-info-live live-info))] [(inline ,live-info ,info ,effect-prim ,t* ...) @@ -14986,7 +15348,7 @@ (define add-us->s-conflicts! (lambda (x out) ; x is an unspillable (let ([x-offset (var-index x)] [cset (var-spillable-conflict* x)]) - (tree-for-each out live-size + (tree-for-each out live-size 0 live-size (lambda (y-offset) (let* ([y (vector-ref varvec y-offset)] [y-cset (var-unspillable-conflict* y)]) (when y-cset @@ -15074,8 +15436,8 @@ [(move-related ,x1 ,x2) (add-move-hint! x1 x2) unspillable*] [(overflow-check ,p ,e* ...) (Effect* (reverse e*) '()) (Pred p)] [else unspillable*]))))) - (for-each (lambda (x) (var-spillable-conflict*-set! x (make-cset kspillable))) unspillable*) - (let ([f (lambda (x) (var-unspillable-conflict*-set! x (make-cset kunspillable)))]) + (for-each (lambda (x) (var-spillable-conflict*-set! x (make-empty-cset kspillable))) unspillable*) + (let ([f (lambda (x) (var-unspillable-conflict*-set! x (make-empty-cset kunspillable)))]) (vector-for-each f regvec) (for-each f spillable*) (vector-for-each f unvarvec)) @@ -15091,75 +15453,73 @@ block*))) (define-who assign-registers! - (lambda (lambda-info) + (lambda (lambda-info varvec unvarvec) + (define k (vector-length regvec)) + (define uvar-weight + (lambda (x) + (fx- (uvar-ref-weight x) (uvar-save-weight x)))) ; could also be calculated when the conflict set is built, which would be more ; efficient for low-degree variables - (define compute-degree! - ; NB: it would probably be faster to go through the registers and - ; NB: increment the degrees for each spillable and unspillable with - ; NB: which it conflicts, rather than go through each register for - ; NB: each uvar as we are currently doing - (lambda (x) - (let ([x-offset (var-index x)]) - (let loop ([n (vector-length regvec)] [degree 0]) - (if (fx= n 0) - (uvar-degree-set! x - (fx+ degree - ; spills have been trimmed from the var-spillable-conflict* sets - (conflict-bit-count (var-spillable-conflict* x)) - (conflict-bit-count (var-unspillable-conflict* x)))) - (let ([n (fx- n 1)]) - (let ([reg (vector-ref regvec n)]) - (let ([cset (if (uvar-unspillable? x) (var-unspillable-conflict* reg) (var-spillable-conflict* reg))]) - (if (and cset (conflict-bit-set? cset x-offset)) - (loop n (fx+ degree 1)) - (loop n degree)))))))))) - (define conflict? - (lambda (reg x) - (let ([cset (if (uvar-unspillable? x) (var-unspillable-conflict* reg) (var-spillable-conflict* reg))]) - (and cset (conflict-bit-set? cset (var-index x)))))) - (define update-conflict! - (lambda (reg x) - (let ([cset1 (var-spillable-conflict* reg)] - [cset2 (var-spillable-conflict* x)]) - (if cset1 - (cset-merge! cset1 cset2) - ; we copy spillable conflicts to avoid ruining a uvar's cset for the next iteration of the big loop - (var-spillable-conflict*-set! reg (cset-copy cset2)))) - (let ([cset1 (var-unspillable-conflict* reg)] - [cset2 (var-unspillable-conflict* x)]) - (if cset1 - (cset-merge! cset1 cset2) - ; NB: do we need to copy unspillable conflicts? we recreate them each time through the big loop - (var-unspillable-conflict*-set! reg (cset-copy cset2)))))) - (define find-move-related-home - (lambda (x0 succ fail) - (let f ([x x0] [work* '()] [clear-seen! void]) - (if (uvar-seen? x) - (if (null? work*) (begin (clear-seen!) (fail)) (f (car work*) (cdr work*) clear-seen!)) - (let ([clear-seen! (lambda () (uvar-seen! x #f) (clear-seen!))]) - (uvar-seen! x #t) - (let loop ([move* (uvar-move* x)] [work* work*]) - (if (null? move*) - (if (null? work*) (begin (clear-seen!) (fail)) (f (car work*) (cdr work*) clear-seen!)) - (let ([var (caar move*)] [move* (cdr move*)]) - (define try-reg - (lambda (reg) - (if (conflict? reg x0) - (loop move* work*) - (begin (clear-seen!) (succ reg))))) - (if (reg? var) - (try-reg var) - (if (uvar? var) - (let ([reg (uvar-location var)]) - (if (reg? reg) - (try-reg reg) - (loop move* (cons var work*)))) - (loop move* work*))))))))))) + (define compute-degrees! + (lambda (x*) + ; account for uvar -> uvar conflicts + (for-each + (lambda (x) + (uvar-degree-set! x + (fx+ + ; spills have been trimmed from the var-spillable-conflict* sets + (conflict-bit-count (var-spillable-conflict* x)) + (conflict-bit-count (var-unspillable-conflict* x))))) + x*) + ; account for reg -> uvar conflicts + (vector-for-each + (lambda (reg) + (cset-for-each (var-spillable-conflict* reg) + (lambda (x-offset) + (let ([x (vector-ref varvec x-offset)]) + (unless (uvar-location x) + (uvar-degree-set! x (fx+ (uvar-degree x) 1)))))) + (cset-for-each (var-unspillable-conflict* reg) + (lambda (x-offset) + (let ([x (vector-ref unvarvec x-offset)]) + (uvar-degree-set! x (fx+ (uvar-degree x) 1)))))) + regvec))) (define-who find-home! (lambda (x) + (define conflict? + (lambda (reg x) + (let ([cset (if (uvar-unspillable? x) (var-unspillable-conflict* reg) (var-spillable-conflict* reg))]) + (conflict-bit-set? cset (var-index x))))) + (define find-move-related-home + (lambda (x0 succ fail) + (let f ([x x0] [work* '()] [clear-seen! void]) + (if (uvar-seen? x) + (if (null? work*) (begin (clear-seen!) (fail)) (f (car work*) (cdr work*) clear-seen!)) + (let ([clear-seen! (lambda () (uvar-seen! x #f) (clear-seen!))]) + (uvar-seen! x #t) + (let loop ([move* (uvar-move* x)] [work* work*]) + (if (null? move*) + (if (null? work*) (begin (clear-seen!) (fail)) (f (car work*) (cdr work*) clear-seen!)) + (let ([var (caar move*)] [move* (cdr move*)]) + (define try-reg + (lambda (reg) + (if (conflict? reg x0) + (loop move* work*) + (begin (clear-seen!) (succ reg))))) + (if (reg? var) + (try-reg var) + (if (uvar? var) + (let ([reg (uvar-location var)]) + (if (reg? reg) + (try-reg reg) + (loop move* (cons var work*)))) + (loop move* work*))))))))))) (define set-home! (lambda (home) + (define update-conflict! + (lambda (reg x) + (cset-merge! (var-spillable-conflict* reg) (var-spillable-conflict* x)) + (cset-merge! (var-unspillable-conflict* reg) (var-unspillable-conflict* x)))) (uvar-location-set! x home) (update-conflict! home x))) (find-move-related-home x @@ -15173,99 +15533,73 @@ (sorry! who "spilled unspillable ~s" x))] [(conflict? (vector-ref regvec offset) x) (f (fx- offset 1))] [else (set-home! (vector-ref regvec offset))])))))) - (define k (vector-length regvec)) - (define low-degree? (lambda (x) (fx< (uvar-degree x) k))) - (define update-spillable-degree! - (lambda (x offset) - (when (conflict-bit-set? (var-spillable-conflict* x) offset) - (uvar-degree-set! x (fx- (uvar-degree x) 1))))) - (define update-unspillable-degree! - (lambda (x offset) - (when (conflict-bit-set? (var-unspillable-conflict* x) offset) - (uvar-degree-set! x (fx- (uvar-degree x) 1))))) - (define remove-victim! - (lambda (victim x*) - (let ([offset (var-index victim)]) - (if (uvar-unspillable? victim) - (for-each (lambda (x) (update-unspillable-degree! x offset)) x*) - (for-each (lambda (x) (update-spillable-degree! x offset)) x*))))) - (define sort-victims - ; NB: sorts based on likelihood of successfully assigning move-related vars to the same register - ; NB: probably should sort based on value of assigning move-related vars to the same register, - ; NB: i.e., taking into account the ref-weight or uvar-weight - (lambda (victim*) - (map car - (list-sort - (lambda (x y) (fx> (cdr x) (cdr y))) - (map (lambda (x) - (define relevant? - (lambda (x) - (or (reg? x) (and (uvar? x) (not (uvar-spilled? x)))))) - (do ([move* (uvar-move* x) (cdr move*)] - [w 0 (let ([move (car move*)]) - (if (relevant? (car move)) - (fx+ w (cdr move)) - w))]) - ((null? move*) (cons x w)))) - victim*))))) - (define uvar-weight - (lambda (x) - (fx- (uvar-ref-weight x) (uvar-save-weight x)))) - (define pick-potential-spill - ; x* is already sorted by ref weight, so this effectively picks uvar with - ; the highest degree among those with the lowest ref weight - (lambda (x*) - (let ([x (let f ([x* (cdr x*)] [max-degree (uvar-degree (car x*))] [max-x (car x*)]) - (if (null? x*) - max-x - (let ([x (car x*)] [x* (cdr x*)]) - (if (or (uvar-unspillable? x) (fx> (uvar-weight x) (uvar-weight max-x))) - max-x - (let ([degree (uvar-degree x)]) - (if (fx> degree max-degree) - (f x* degree x) - (f x* max-degree max-x)))))))]) - (values x (remq x x*))))) (define pick-victims (lambda (x*) + (define low-degree? (lambda (x) (fx< (uvar-degree x) k))) + (define pick-potential-spill + ; x* is already sorted by weight, so this effectively picks uvar with + ; the highest degree among those with the lowest weight + (lambda (x*) + (let ([x (let f ([x* (cdr x*)] [max-degree (uvar-degree (car x*))] [max-x (car x*)]) + (if (null? x*) + max-x + (let ([x (car x*)] [x* (cdr x*)]) + (if (or (uvar-unspillable? x) (fx> (uvar-weight x) (uvar-weight max-x))) + max-x + (let ([degree (uvar-degree x)]) + (if (fx> degree max-degree) + (f x* degree x) + (f x* max-degree max-x)))))))]) + (values x (remq x x*))))) + (define remove-victim! + (lambda (victim) + (cset-for-each (var-spillable-conflict* victim) + (lambda (offset) + (let ([x (vector-ref varvec offset)]) + (uvar-degree-set! x (fx- (uvar-degree x) 1))))) + (cset-for-each (var-unspillable-conflict* victim) + (lambda (offset) + (let ([x (vector-ref unvarvec offset)]) + (uvar-degree-set! x (fx- (uvar-degree x) 1))))))) + (define sort-victims + ; NB: sorts based on likelihood of successfully assigning move-related vars to the same register + ; NB: probably should sort based on value of assigning move-related vars to the same register, + ; NB: i.e., taking into account the ref-weight + (lambda (victim*) + (map car + (list-sort + (lambda (x y) (fx> (cdr x) (cdr y))) + (map (lambda (x) + (define relevant? + (lambda (x) + (or (reg? x) (and (uvar? x) (not (uvar-spilled? x)))))) + (do ([move* (uvar-move* x) (cdr move*)] + [w 0 (let ([move (car move*)]) + (if (relevant? (car move)) + (fx+ w (cdr move)) + w))]) + ((null? move*) (cons x w)))) + victim*))))) (let-values ([(victim* keeper*) (partition low-degree? x*)]) (if (null? victim*) (let-values ([(victim keeper*) (pick-potential-spill x*)]) ; note: victim can be an unspillable if x* contains only precolored unspillables - (remove-victim! victim keeper*) + (remove-victim! victim) (values (list victim) keeper*)) (begin (unless (null? keeper*) ; tried creating a mask from victim*, logand with bv for each x, count the bits, ; and subtract from x's uvar-degree-set!. code in chaff. didn't help at this point. ; perhaps if fxbit-count were implemented better it would - (for-each (lambda (victim) (remove-victim! victim keeper*)) victim*)) + (for-each remove-victim! victim*)) (values (sort-victims victim*) keeper*)))))) - (define find-homes! - (lambda (x*) - (for-each compute-degree! x*) - (let f ([x* x*]) - (unless (null? x*) - (let-values ([(victim* x*) (pick-victims x*)]) - (f x*) - (for-each find-home! victim*)))))) - (let (#;[time0 (cpu-time)]) - ; NB: consider taking into account the size of the live region, perhaps - ; NB: estimated by the length of the uvar's name :). - (let ([x* (append (sort (lambda (x y) (fx< (uvar-weight x) (uvar-weight y))) spillable*) unspillable*)]) - (find-homes! x*) - #;(let ([ms (- (cpu-time) time0)]) - (define lengths - (lambda (x*) - (let f ([x* x*] [ulen 0] [slen 0]) - (cond - [(null? x*) (values ulen slen)] - [(uvar-unspillable? (car x*)) (f (cdr x*) (fx+ ulen 1) slen)] - [else (f (cdr x*) ulen (fx+ slen 1))])))) - (let-values ([(ulen slen) (lengths x*)]) - (when (> (fx+ ulen slen) 1000) - (printf "ran assign-registers for ~a (~d unspillables, ~d spillables, ~d spilled) in ~d ms\n" - (info-lambda-name lambda-info) ulen slen (- (length spillable*) slen) ms)))))))) + (let ([x* (append (sort (lambda (x y) (fx< (uvar-weight x) (uvar-weight y))) spillable*) unspillable*)]) + (compute-degrees! x*) + (let f ([x* x*]) + (unless (null? x*) + (let-values ([(victim* x*) (pick-victims x*)]) + (f x*) + (for-each find-home! victim*))))))) (define everybody-home? (lambda () @@ -15322,7 +15656,8 @@ (let ([v (f (fx+ i 1) (cdr spillable*))]) (uvar-iii-set! spillable i) (vector-set! v i (cons (unannotate source) (fv-offset (uvar-location spillable)))) - v)]) + v)] + [else (f i (cdr spillable*))]) (let ([v (f (fx+ i 1) (cdr spillable*))]) (uvar-iii-set! spillable i) (vector-set! v i (cons (unannotate source) (fv-offset (uvar-location spillable)))) @@ -15474,8 +15809,8 @@ [(_ ?unparser pass-name ?arg ...) #'(xpass pass-name (RAprinter ?unparser) (list ?arg ...))])))) (safe-assert (andmap (lambda (x) (eq? (uvar-location x) #f)) local*)) - (fluid-let ([spillable* local*] [unspillable* '()] [max-fv max-fv0] [max-fs@call 0]) - (let ([kfv (fx+ max-fv 1)] [kreg (vector-length regvec)] [kspillable (length spillable*)]) + (let ([kspillable (length local*)] [kfv (fx+ max-fv0 1)] [kreg (vector-length regvec)]) + (fluid-let ([spillable* local*] [unspillable* '()] [max-fv max-fv0] [max-fs@call 0] [poison-cset (make-empty-cset kspillable)]) (let* ([live-size (fx+ kfv kreg kspillable)] [varvec (make-vector live-size)]) ; set up var indices & varvec mapping from indices to vars (fold-left (lambda (i x) (var-index-set! x i) (vector-set! varvec i x) (fx+ i 1)) 0 spillable*) @@ -15489,10 +15824,12 @@ ; rerun intra-block live analysis and record (fv v reg v spillable) x spillable conflicts (RApass unparse-L15a record-call-live! block* varvec) ;; NB: we could just use (vector-length varvec) to get live-size - (RApass unparse-L15a do-spillable-conflict! kspillable varvec live-size block*) + (when (fx> kspillable 1000) ; NB: parameter? + (RApass unparse-L15a identify-poison! kspillable varvec live-size block*)) + (RApass unparse-L15a do-spillable-conflict! kspillable kfv varvec live-size block*) #;(show-conflicts (info-lambda-name info) varvec '#()) ; find frame homes for call-live variables; adds new fv x spillable conflicts - (RApass unparse-L15a assign-frame!) + (RApass unparse-L15a assign-frame! (filter uvar-spilled? spillable*)) #;(show-homes) (RApass unparse-L15a record-inspector-information! info) ; determine frame sizes at nontail-call sites and assign homes to new-frame variables @@ -15500,19 +15837,25 @@ (let ([dummy (RApass unparse-L15b assign-new-frame! (with-output-language (L15a Dummy) `(dummy)) info live-size varvec block*)]) ; record fp offset on entry to each block (RApass unparse-L15b record-fp-offsets! entry-block*) + ; assign frame homes to poison variables + (let ([spill* (filter (lambda (x) (and (not (uvar-location x)) (uvar-poison? x))) spillable*)]) + (unless (null? spill*) + (for-each (lambda (x) (uvar-spilled! x #t)) spill*) + (RApass unparse-L15b assign-frame! spill*))) ; on entry to loop, have assigned call-live and new-frame variables to frame homes, determined frame sizes, and computed block-entry fp offsets - (let ([v (vector-map var-spillable-conflict* regvec)] + (let ([saved-reg-csets (vector-map (lambda (reg) (cset-copy (var-spillable-conflict* reg))) regvec)] [bcache* (map cache-block-info block*)]) (let loop () (for-each (lambda (spill) ; remove each spill from each other spillable's spillable conflict set - (let ([spill-index (var-index spill)] [cset (var-spillable-conflict* spill)]) - (cset-for-each cset - (lambda (i) - (let ([x (vector-ref varvec i)]) - (unless (uvar-location x) - (conflict-bit-unset! (var-spillable-conflict* x) spill-index)))))) + (unless (uvar-poison? spill) + (let ([spill-index (var-index spill)]) + (cset-for-each (var-spillable-conflict* spill) + (lambda (i) + (let ([x (vector-ref varvec i)]) + (unless (uvar-location x) + (conflict-bit-unset! (var-spillable-conflict* x) spill-index))))))) ; release the spill's conflict* set (var-spillable-conflict*-set! spill #f)) (filter uvar-location spillable*)) @@ -15530,7 +15873,7 @@ ; rerun intra-block live analysis and record (reg v spillable v unspillable) x unspillable conflicts (RApass unparse-L15d do-unspillable-conflict! kfv kspillable varvec live-size kunspillable unvarvec block*) #;(show-conflicts (info-lambda-name info) varvec unvarvec) - (RApass unparse-L15d assign-registers! info) + (RApass unparse-L15d assign-registers! info varvec unvarvec) ; release the unspillable conflict sets (for-each (lambda (x) (var-unspillable-conflict*-set! x #f)) spillable*) (vector-for-each (lambda (x) (var-unspillable-conflict*-set! x #f)) regvec) @@ -15552,11 +15895,11 @@ `(lambda ,info (,entry-block* ...) (,block* ...)))) (begin (for-each restore-block-info! block* bcache*) - (vector-for-each var-spillable-conflict*-set! regvec v) + (vector-for-each var-spillable-conflict*-set! regvec saved-reg-csets) (for-each (lambda (x) (uvar-location-set! x #f)) spillable*) (for-each uvar-move*-set! spillable* saved-move*) (set! unspillable* '()) - (RApass unparse-L15b assign-frame!) + (RApass unparse-L15b assign-frame! (filter uvar-spilled? spillable*)) (loop)))))))))))))))]))) ; NB: commonize with earlier @@ -15767,6 +16110,6 @@ (set! $track-dynamic-closure-counts track-dynamic-closure-counts) (set! $track-static-closure-counts track-static-closure-counts) -) -(define $optimize-closures (make-parameter #t (lambda (x) (and x #t)))) + (set! $optimize-closures (make-parameter #t (lambda (x) (and x #t)))) +) diff -Nru chezscheme-9.5+dfsg/s/cprep.ss chezscheme-9.5.4+dfsg/s/cprep.ss --- chezscheme-9.5+dfsg/s/cprep.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cprep.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"cprep.ss" ;;; cprep.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -17,6 +16,7 @@ (let () (import (nanopass)) + (include "types.ss") (include "base-lang.ss") (include "expand-lang.ss") @@ -26,15 +26,16 @@ (Inner : Inner (ir) -> * (val) [,lsrc (go lsrc)] [(program ,uid ,body) (go ($build-invoke-program uid body))] - [(library/ct ,uid ,import-code ,visit-code) - (go ($build-install-library/ct-code uid import-code visit-code))] + [(library/ct ,uid (,export-id* ...) ,import-code ,visit-code) + (go ($build-install-library/ct-code uid export-id* import-code visit-code))] [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) (go ($build-install-library/rt-code uid dl* db* dv* de* body))] - [,linfo/ct `(library/ct-info ,(library-info-uid linfo/ct) ,(library/ct-info-import-req* linfo/ct) - ,(library/ct-info-include-req* linfo/ct) ,(library/ct-info-visit-visit-req* linfo/ct) - ,(library/ct-info-visit-req* linfo/ct))] - [,linfo/rt `(library/rt-info ,(library-info-uid linfo/rt) ,(library/rt-info-invoke-req* linfo/rt))] - [,pinfo `(program-info ,(program-info-invoke-req* pinfo))]) + [(library/ct-info ,linfo/ct) + `(library/ct-info ,(library-info-uid linfo/ct) ,(library/ct-info-import-req* linfo/ct) + ,(library/ct-info-visit-visit-req* linfo/ct) + ,(library/ct-info-visit-req* linfo/ct))] + [(library/rt-info ,linfo/rt) `(library/rt-info ,(library-info-uid linfo/rt) ,(library/rt-info-invoke-req* linfo/rt))] + [(program-info ,pinfo) `(program-info ,(program-info-invoke-req* pinfo))]) (Inner ir)) (let ([x* (let f ([x x] [x* '()]) (nanopass-case (Lexpand Outer) x @@ -42,7 +43,7 @@ [(visit-only ,inner) (cons `(eval-when (visit) ,(go-Inner inner)) x*)] [(revisit-only ,inner) (cons `(eval-when (revisit) ,(go-Inner inner)) x*)] [,inner (cons (go-Inner inner) x*)] - [,rcinfo (cons `(recompile-requirements ,(recompile-info-import-req* x) ,(recompile-info-include-req* x)) x*)] + [(recompile-info ,rcinfo) (cons `(recompile-requirements ,(recompile-info-import-req* rcinfo) ,(recompile-info-include-req* rcinfo)) x*)] [else (sorry! who "unexpected language form ~s" x)]))]) (safe-assert (not (null? x*))) (cond @@ -85,11 +86,14 @@ (uncprep-sequence e2 ls))] [else (cons (uncprep x) ls)]))) (define uncprep-fp-conv - (lambda (x) - (case x - [(i3nt-stdcall) '__stdcall] - [(i3nt-com) '__com] - [else #f]))) + (lambda (x*) + (map (lambda (x) + (case x + [(i3nt-stdcall) '__stdcall] + [(i3nt-com) '__com] + [(adjust-active) '__collect_safe] + [else #f])) + x*))) (define-who uncprep-fp-specifier (lambda (x) (nanopass-case (Ltype Type) x @@ -115,7 +119,8 @@ [(fp-fixnum) 'fixnum] [(fp-double-float) 'double-float] [(fp-single-float) 'single-float] - [(fp-ftd ,ftd) 'ftype]))) + [(fp-ftd ,ftd) 'ftype] + [(fp-ftd& ,ftd) 'ftype]))) (define uncprep (lambda (x) (define keyword? @@ -183,12 +188,12 @@ [(letrec* ([,x* ,[e*]] ...) ,body) `(letrec* ,(map (lambda (x e) `(,(get-name x) ,e)) x* e*) ,@(uncprep-sequence body '()))] - [(foreign ,conv ,name ,[e] (,arg-type* ...) ,result-type) - `($foreign-procedure ,(uncprep-fp-conv conv) ,name ,e + [(foreign (,conv* ...) ,name ,[e] (,arg-type* ...) ,result-type) + `($foreign-procedure ,(uncprep-fp-conv conv*) ,name ,e ,(map uncprep-fp-specifier arg-type*) ,(uncprep-fp-specifier result-type))] - [(fcallable ,conv ,[e] (,arg-type* ...) ,result-type) - `($foreign-callable ,(uncprep-fp-conv conv) ,e + [(fcallable (,conv* ...) ,[e] (,arg-type* ...) ,result-type) + `($foreign-callable ,(uncprep-fp-conv conv*) ,e ,(map uncprep-fp-specifier arg-type*) ,(uncprep-fp-specifier result-type))] [(record-ref ,rtd ,type ,index ,[e]) `(record-ref ,rtd ',type ,e ,index)] @@ -215,14 +220,15 @@ (lambda (who cte? x env) (define (go x) ($uncprep - ($cpcheck - (let ([cpletrec-ran? #f]) - (let ([x ((run-cp0) - (lambda (x) - (set! cpletrec-ran? #t) - ($cpletrec ($cp0 x $compiler-is-loaded?))) - ($cpvalid x))]) - (if cpletrec-ran? x ($cpletrec x))))))) + ($cpcommonize + ($cpcheck + (let ([cpletrec-ran? #f]) + (let ([x ((run-cp0) + (lambda (x) + (set! cpletrec-ran? #t) + ($cpletrec ($cp0 x $compiler-is-loaded?))) + ($cpvalid x))]) + (if cpletrec-ran? x ($cpletrec x)))))))) (unless (environment? env) ($oops who "~s is not an environment" env)) ; claim compiling-a-file to get cte as well as run-time code @@ -243,4 +249,57 @@ (unless (environment? env) ($oops who "~s is not an environment" env)) ; claim compiling-a-file to get cte as well as run-time code - ($uncprep (expand x env #t #t))]))))) + ($uncprep (expand x env #t #t))])))) + + (set-who! $cpcheck-prelex-flags + (lambda (x after-pass) + (import (nanopass)) + (include "base-lang.ss") + + (define-pass cpcheck-prelex-flags : Lsrc (ir) -> Lsrc () + (definitions + #;(define sorry! + (lambda (who str . arg*) + (apply fprintf (console-output-port) str arg*) + (newline (console-output-port)))) + (define initialize-id! + (lambda (id) + (prelex-flags-set! id + (let ([flags (prelex-flags id)]) + (fxlogor + (fxlogand flags (constant prelex-sticky-mask)) + (fxsll (fxlogand flags (constant prelex-is-mask)) + (constant prelex-was-flags-offset)))))))) + (Expr : Expr (ir) -> Expr () + [(ref ,maybe-src ,x) + (when (prelex-operand x) (sorry! who "~s has an operand after ~s (src ~s)" x after-pass maybe-src)) + (unless (prelex-was-referenced x) (sorry! who "~s referenced but not so marked after ~s (src ~s)" x after-pass maybe-src)) + (when (prelex-referenced x) + (unless (prelex-was-multiply-referenced x) (sorry! who "~s multiply referenced but not so marked after ~s (src ~s)" x after-pass maybe-src)) + (set-prelex-multiply-referenced! x #t)) + (set-prelex-referenced! x #t) + `(ref ,maybe-src ,x)] + [(set! ,maybe-src ,x ,[e]) + (unless (prelex-was-assigned x) (sorry! who "~s assigned but not so marked after ~s (src ~s)" x after-pass maybe-src)) + (set-prelex-assigned! x #t) + `(set! ,maybe-src ,x ,e)] + [(letrec ([,x* ,e*] ...) ,body) + (for-each initialize-id! x*) + `(letrec ([,x* ,(map Expr e*)] ...) ,(Expr body))] + [(letrec* ([,x* ,e*] ...) ,body) + (for-each initialize-id! x*) + `(letrec* ([,x* ,(map Expr e*)] ...) ,(Expr body))]) + (CaseLambdaClause : CaseLambdaClause (ir) -> CaseLambdaClause () + [(clause (,x* ...) ,interface ,body) + (for-each initialize-id! x*) + `(clause (,x* ...) ,interface ,(Expr body))])) + (Lexpand-to-go x cpcheck-prelex-flags))) + + (set-who! $insert-profile-src! ; called from compiler only + (lambda (st x) + ; NB: the output should be *, but nanopass won't autogenerate the pass + (define-pass record-coverage-info! : Lsrc (ir) -> Lsrc () + (Expr : Expr (ir) -> Expr () + [(profile ,src) (source-table-set! st src 0) `(profile ,src)])) + (Lexpand-to-go x record-coverage-info!))) + ) diff -Nru chezscheme-9.5+dfsg/s/cpvalid.ss chezscheme-9.5.4+dfsg/s/cpvalid.ss --- chezscheme-9.5+dfsg/s/cpvalid.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/cpvalid.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"cpvalid.ss" ;;; cpvalid.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -17,10 +16,10 @@ ;;; see comments relating to both cpvalid and cpletrec at front of ;;; cpletrec.ss +(begin (define undefined-variable-warnings ($make-thread-parameter #f (lambda (x) (and x #t)))) -(define $cpvalid) (let () (import (nanopass)) (include "base-lang.ss") @@ -328,10 +327,10 @@ (let-values ([(e* vals-dl?) (undefer* e* proxy dl?)]) (defer-or-not (or body-dl? vals-dl?) `(letrec* ([,x* ,e*] ...) ,body)))] - [(foreign ,conv ,name ,[undefer : e dl?] (,arg-type* ...) ,result-type) - (defer-or-not dl? `(foreign ,conv ,name ,e (,arg-type* ...) ,result-type))] - [(fcallable ,conv ,[undefer : e dl?] (,arg-type* ...) ,result-type) - (defer-or-not dl? `(fcallable ,conv ,e (,arg-type* ...) ,result-type))] + [(foreign (,conv* ...) ,name ,[undefer : e dl?] (,arg-type* ...) ,result-type) + (defer-or-not dl? `(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type))] + [(fcallable (,conv* ...) ,[undefer : e dl?] (,arg-type* ...) ,result-type) + (defer-or-not dl? `(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type))] [(cte-optimization-loc ,box ,[undefer : e dl?]) (defer-or-not dl? `(cte-optimization-loc ,box ,e))] [(pariah) (values x #f)] @@ -547,10 +546,10 @@ (defer-or-not (or dl0? dl1? dl2?) `(if ,e0 ,e1 ,e2))] [(seq ,[cpvalid : e1 dl1?] ,[cpvalid : e2 dl2?]) (defer-or-not (or dl1? dl2?) `(seq ,e1 ,e2))] - [(foreign ,conv ,name ,[cpvalid : e dl?] (,arg-type* ...) ,result-type) - (defer-or-not dl? `(foreign ,conv ,name ,e (,arg-type* ...) ,result-type))] - [(fcallable ,conv ,[cpvalid : e dl?] (,arg-type* ...) ,result-type) - (defer-or-not dl? `(fcallable ,conv ,e (,arg-type* ...) ,result-type))] + [(foreign (,conv* ...) ,name ,[cpvalid : e dl?] (,arg-type* ...) ,result-type) + (defer-or-not dl? `(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type))] + [(fcallable (,conv* ...) ,[cpvalid : e dl?] (,arg-type* ...) ,result-type) + (defer-or-not dl? `(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type))] [(cte-optimization-loc ,box ,[cpvalid : e dl?]) (defer-or-not dl? `(cte-optimization-loc ,box ,e))] [(pariah) (values x #f)] @@ -562,3 +561,4 @@ (set! $cpvalid (lambda (x) (if (= (optimize-level) 3) x (cpvalid x))))) +) diff -Nru chezscheme-9.5+dfsg/s/date.ss chezscheme-9.5.4+dfsg/s/date.ss --- chezscheme-9.5+dfsg/s/date.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/date.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"date.ss" ;;; date.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -96,7 +95,7 @@ (scheme-object) scheme-object)) - (define $mktime ; dtvec -> tspair (returns #f on error) + (define $mktime ; dtvec -> tspair (returns #f on error) (foreign-procedure "(cs)mktime" (scheme-object) scheme-object)) @@ -211,87 +210,87 @@ (fprintf p "#" ($asctime (dt-vec x))))) - (set! make-time + (set-who! make-time (lambda (type nsec sec) - (let ([typeno (ts-type->typeno 'make-time type)]) - (check-nsec 'make-time nsec) - (check-ts-sec 'make-time sec) + (let ([typeno (ts-type->typeno who type)]) + (check-nsec who nsec) + (check-ts-sec who sec) (make-ts typeno (cons sec nsec))))) (set! time? (lambda (x) (ts? x))) - (set! time-type + (set-who! time-type (lambda (ts) - (check-ts 'time-type ts) + (check-ts who ts) (ts-typeno->type (ts-typeno ts)))) - (set! time-second + (set-who! time-second (lambda (ts) - (check-ts 'time-second ts) + (check-ts who ts) (ts-sec ts))) - (set! time-nanosecond + (set-who! time-nanosecond (lambda (ts) - (check-ts 'time-nanosecond ts) + (check-ts who ts) (ts-nsec ts))) - (set! set-time-type! + (set-who! set-time-type! (lambda (ts type) - (check-ts 'set-time-type! ts) - (ts-typeno-set! ts (ts-type->typeno 'set-time-type! type)))) + (check-ts who ts) + (ts-typeno-set! ts (ts-type->typeno who type)))) - (set! set-time-second! + (set-who! set-time-second! (lambda (ts sec) - (check-ts 'set-time-second! ts) - (check-ts-sec 'set-time-second! sec) + (check-ts who ts) + (check-ts-sec who sec) (set-ts-sec! ts sec))) - (set! set-time-nanosecond! + (set-who! set-time-nanosecond! (lambda (ts nsec) - (check-ts 'set-time-nanosecond! ts) - (check-nsec 'set-time-nanosecond! nsec) + (check-ts who ts) + (check-nsec who nsec) (set-ts-nsec! ts nsec))) - (set! time=? + (set-who! time=? (lambda (t1 t2) - (check-ts 'time=? t1) - (check-ts 'time=? t2) - (check-same-type 'time=? t1 t2) + (check-ts who t1) + (check-ts who t2) + (check-same-type who t1 t2) (and (= (ts-sec t1) (ts-sec t2)) (= (ts-nsec t1) (ts-nsec t2))))) - (set! time=? + (set-who! time>=? (lambda (t1 t2) - (check-ts 'time>=? t1) - (check-ts 'time>=? t2) - (check-same-type 'time>=? t1 t2) + (check-ts who t1) + (check-ts who t2) + (check-same-type who t1 t2) (or (> (ts-sec t1) (ts-sec t2)) (and (= (ts-sec t1) (ts-sec t2)) (>= (ts-nsec t1) (ts-nsec t2)))))) - (set! time>? + (set-who! time>? (lambda (t1 t2) - (check-ts 'time>? t1) - (check-ts 'time>? t2) - (check-same-type 'time>? t1 t2) + (check-ts who t1) + (check-ts who t2) + (check-same-type who t1 t2) (or (> (ts-sec t1) (ts-sec t2)) (and (= (ts-sec t1) (ts-sec t2)) (> (ts-nsec t1) (ts-nsec t2)))))) @@ -348,51 +347,51 @@ [else (let ([typeno (ts-type->typeno who type)]) (make-ts typeno ($clock-gettime typeno)))])])) - (set! current-date + (set-who! current-date (case-lambda [() (let ([dtvec ($gmtime #f #f)]) - (unless dtvec ($oops 'current-date "failed")) + (unless dtvec ($oops who "failed")) (make-dt dtvec))] [(tz) - (check-tz 'current-date tz) + (check-tz who tz) (let ([dtvec ($gmtime tz #f)]) - (unless dtvec ($oops 'current-date "failed")) + (unless dtvec ($oops who "failed")) (make-dt dtvec))])) - (set! date-and-time ; ptime|#f -> string + (set-who! date-and-time ; ptime|#f -> string (case-lambda - [() (or ($asctime #f) ($oops 'date-and-time "failed"))] + [() (or ($asctime #f) ($oops who "failed"))] [(dt) - (check-dt 'date-and-time dt) + (check-dt who dt) (or ($asctime (dt-vec dt)) - ($oops 'date-and-time "failed for date record ~s" dt))])) + ($oops who "failed for date record ~s" dt))])) - (set! make-date + (set-who! make-date (let ([do-make-date (lambda (nsec sec min hour day mon year tz tz-provided?) - (check-nsec 'make-date nsec) - (check-sec 'make-date sec) - (check-min 'make-date min) - (check-hour 'make-date hour) + (check-nsec who nsec) + (check-sec who sec) + (check-min who min) + (check-hour who hour) ; need more accurate check for day based on year and month - (check-day 'make-date day) - (check-mon 'make-date mon) - (check-year 'make-date year) + (check-day who day) + (check-mon who mon) + (check-year who year) (when tz-provided? - (check-tz 'make-date tz)) + (check-tz who tz)) ; keep in sync with cmacros.ss declarations of dtvec-nsec, etc. (let ([dtvec (vector nsec sec min hour day mon (- year 1900) 0 #f 0 tz #f)]) (unless ($mktime dtvec) ; for effect on dtvec - ($oops 'make-date "invalid combination of arguments")) + ($oops who "invalid combination of arguments")) (unless (fx= (vector-ref dtvec (constant dtvec-mday)) day) - ($oops 'make-date "invalid day ~s for month ~s and year ~s" day mon year)) + ($oops who "invalid day ~s for month ~s and year ~s" day mon year)) (make-dt dtvec)))]) (case-lambda - [(nsec sec min hour day mon year tz) - (do-make-date nsec sec min hour day mon year tz #t)] - [(nsec sec min hour day mon year) - (do-make-date nsec sec min hour day mon year #f #f)]))) + [(nsec sec min hour day mon year tz) + (do-make-date nsec sec min hour day mon year tz #t)] + [(nsec sec min hour day mon year) + (do-make-date nsec sec min hour day mon year #f #f)]))) (set! date? (lambda (x) (dt? x))) @@ -418,15 +417,15 @@ (date-getter date-zone-offset (constant dtvec-tzoff)) (date-getter date-zone-name (constant dtvec-tzname))) - (set! date-year + (set-who! date-year (lambda (dt) - (check-dt 'date-year dt) + (check-dt who dt) (+ (vector-ref (dt-vec dt) (constant dtvec-year)) 1900))) - #;(set! date-week-number + #;(set-who! date-week-number (lambda (dt dowsw) (unless (or (eq? dossw 0) (eq? dossw 1)) - ($oops 'date-week-number "invalid week starting day" dossw)) + ($oops who "invalid week starting day" dossw)) ???)) (set-who! time-utc->date @@ -440,7 +439,7 @@ [(t tz) (unless (and (ts? t) (eq? (ts-typeno t) (constant time-utc))) ($oops who "~s is not a utc time record" t)) - (check-tz 'current-date tz) + (check-tz who tz) (let ([dtvec ($gmtime tz (ts-pair t))]) (unless dtvec ($oops who "failed")) (make-dt dtvec))])) diff -Nru chezscheme-9.5+dfsg/s/engine.ss chezscheme-9.5.4+dfsg/s/engine.ss --- chezscheme-9.5+dfsg/s/engine.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/engine.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"engine.ss" ;;; engine.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -29,10 +28,6 @@ ;;; *timer* the saved timer interrupt handler -(define make-engine) -(define engine-block) -(define engine-return) - (let () (define-threaded *exit*) diff -Nru chezscheme-9.5+dfsg/s/enum.ss chezscheme-9.5.4+dfsg/s/enum.ss --- chezscheme-9.5+dfsg/s/enum.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/enum.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"enum.ss" ;;; enum.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -27,24 +26,6 @@ ;; should throw an error if its argument is not a symbol. We have chosen to ;; not include that check, but if the standard is updated, this may need to be changed. -(define $enum-set-members) - -(define enum-set?) -(define make-enumeration) -(define enum-set-universe) -(define enum-set-indexer) -(define enum-set-constructor) -(define enum-set->list) -(define enum-set-member?) -(define enum-set-subset?) -(define enum-set=?) -(define enum-set-union) -(define enum-set-intersection) -(define enum-set-difference) -(define enum-set-complement) -(define enum-set-projection) - - (let () ;;;;;;;; diff -Nru chezscheme-9.5+dfsg/s/env.ss chezscheme-9.5.4+dfsg/s/env.ss --- chezscheme-9.5+dfsg/s/env.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/env.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"env.ss" ;;; env.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,5 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin ($make-base-modules) ($make-rnrs-libraries) +) diff -Nru chezscheme-9.5+dfsg/s/event.ss chezscheme-9.5.4+dfsg/s/event.ss --- chezscheme-9.5+dfsg/s/event.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/event.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"event.ss" ;;; event.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,10 +13,6 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. -(define set-timer) -(define enable-interrupts) -(define disable-interrupts) - (let () (define stop-event-timer (lambda () diff -Nru chezscheme-9.5+dfsg/s/exceptions.ss chezscheme-9.5.4+dfsg/s/exceptions.ss --- chezscheme-9.5+dfsg/s/exceptions.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/exceptions.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"exceptions.ss" ;;; exceptions.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -29,6 +28,7 @@ - deal with error? and warning? mats |# +(begin (let () (define (warning-only? c) (and (warning? c) (not (serious-condition? c)))) @@ -608,9 +608,9 @@ (define (error-help warning? who whoarg message irritants basecond) (unless (or (eq? whoarg #f) (string? whoarg) (symbol? whoarg)) - ($oops who "invalid who argument ~s" whoarg)) + ($oops who "invalid who argument ~s (message = ~s, irritants = ~s)" whoarg message irritants)) (unless (string? message) - ($oops who "invalid message argument ~s" message)) + ($oops who "invalid message argument ~s (who = ~s, irritants = ~s)" message whoarg irritants)) (let ([c (if whoarg (if irritants (condition basecond @@ -640,7 +640,9 @@ (lambda (whoarg message . irritants) (error-help #f who whoarg message irritants favcond))) - (set! $oops assertion-violationf) + (set-who! $oops + (lambda (whoarg message . irritants) + (error-help #f who whoarg message irritants favcond))) (set-who! $oops/c (lambda (whoarg basecond message . irritants) @@ -732,3 +734,4 @@ (condition fwcond ($make-src-condition src start?)) fwcond)))) ) +) diff -Nru chezscheme-9.5+dfsg/s/expand-lang.ss chezscheme-9.5.4+dfsg/s/expand-lang.ss --- chezscheme-9.5+dfsg/s/expand-lang.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/expand-lang.ss 2020-08-31 02:35:12.000000000 +0000 @@ -29,29 +29,27 @@ (sealed #t)) (define-record-type library-info - (nongenerative #{library-info e10vy7tci6bqz6pmnxgvlq-2}) + (nongenerative #{library-info e10vy7tci6bqz6pmnxgvlq-3}) (fields (immutable path) (immutable version) - (immutable uid))) + (immutable uid) + (immutable visible?))) (define-record-type library/ct-info (parent library-info) (fields - ; NB: include-req* should go away with new recompile support that uses recompile-info - (immutable include-req*) (immutable import-req*) (immutable visit-visit-req*) - (immutable visit-req*) - (immutable clo*)) - (nongenerative #{library/ct-info fgf0koeh2zn6ajlujfyoyf-3}) + (immutable visit-req*)) + (nongenerative #{library/ct-info fgf0koeh2zn6ajlujfyoyf-4}) (sealed #t)) (define-record-type library/rt-info (parent library-info) (fields (immutable invoke-req*)) - (nongenerative #{library/rt-info ff86rtm7efmvxcvrmh7t0b-2}) + (nongenerative #{library/rt-info ff86rtm7efmvxcvrmh7t0b-3}) (sealed #t)) (define-record-type program-info @@ -59,12 +57,6 @@ (nongenerative #{program-info fgc8ptwnu9i5gfqz3s85mr-0}) (sealed #t)) -(define (revisit-stuff? x) (and (pair? x) (eqv? (car x) (constant revisit-tag)))) -(define (revisit-stuff-inner x) (cdr x)) - -(define (visit-stuff? x) (and (pair? x) (eqv? (car x) (constant visit-tag)))) -(define (visit-stuff-inner x) (cdr x)) - (module (Lexpand Lexpand?) (define library-path? (lambda (x) @@ -80,10 +72,10 @@ (define maybe-label? (lambda (x) (or (not x) (gensym? x)))) (define-language Lexpand - (nongenerative-id #{Lexpand fgy7v2wrvj0so4ro8kvhqo-1}) + (nongenerative-id #{Lexpand fgy7v2wrvj0so4ro8kvhqo-3}) (terminals (maybe-label (dl)) - (gensym (uid)) + (gensym (uid export-id)) (library-path (path)) (library-version (version)) (maybe-optimization-loc (db)) @@ -96,21 +88,21 @@ (library/rt-info (linfo/rt)) (program-info (pinfo))) (Outer (outer) - rcinfo + (recompile-info rcinfo) (group outer1 outer2) (visit-only inner) (revisit-only inner) inner) (Inner (inner) - linfo/ct + (library/ct-info linfo/ct) ctlib - linfo/rt + (library/rt-info linfo/rt) rtlib - pinfo + (program-info pinfo) prog lsrc) (ctLibrary (ctlib) - (library/ct uid import-code visit-code)) + (library/ct uid (export-id* ...) import-code visit-code)) (rtLibrary (rtlib) (library/rt uid (dl* ...) diff -Nru chezscheme-9.5+dfsg/s/expeditor.ss chezscheme-9.5.4+dfsg/s/expeditor.ss --- chezscheme-9.5+dfsg/s/expeditor.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/expeditor.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"expeditor.ss" ;;; expeditor.ss ;;; R. Kent Dybvig ;;; August 2007 @@ -82,8 +81,8 @@ ee-beginning-of-entry ee-end-of-entry ee-delete-to-eol ee-delete-line ee-delete-between-point-and-mark ee-set-mark - ee-delete-entry ee-reset-entry ee-delete-sexp ee-redisplay - ee-yank-kill-buffer ee-yank-selection + ee-delete-entry ee-reset-entry ee-delete-sexp ee-backward-delete-sexp + ee-redisplay ee-yank-kill-buffer ee-yank-selection ee-string-macro ee-eof ee-delete-char ee-eof/delete-char ee-backward-delete-char ee-insert-paren ee-flash-matching-delimiter ee-goto-matching-delimiter diff -Nru chezscheme-9.5+dfsg/s/fasl-helpers.ss chezscheme-9.5.4+dfsg/s/fasl-helpers.ss --- chezscheme-9.5+dfsg/s/fasl-helpers.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/fasl-helpers.ss 2020-08-31 02:35:12.000000000 +0000 @@ -135,8 +135,8 @@ (define emit-header (case-lambda - [(p mtype) (emit-header p mtype '())] - [(p mtype bootfiles) + [(p version mtype) (emit-header p version mtype '())] + [(p version mtype bootfiles) (define (put-str p s) (let ([n (string-length s)]) (do ([i 0 (fx+ i 1)]) @@ -146,7 +146,7 @@ ($oops #f "cannot handle bootfile name character ~s whose integer code exceeds 255" c)) (put-u8 p k))))) (put-bytevector p (constant fasl-header)) - (put-uptr p (constant scheme-version)) + (put-uptr p version) (put-uptr p mtype) (put-u8 p (char->integer #\()) ; ) (let f ([bootfiles bootfiles] [sep? #f]) diff -Nru chezscheme-9.5+dfsg/s/fasl.ss chezscheme-9.5.4+dfsg/s/fasl.ss --- chezscheme-9.5+dfsg/s/fasl.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/fasl.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"fasl.ss" ;;; fasl.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -68,6 +67,9 @@ (define bld-record (lambda (x t a?) (unless (eq? x #!base-rtd) + (when (record-type-descriptor? x) + ; fasl representation for record-type-descriptor includes uid separately and as part of the record + (bld (record-type-uid x) t a?)) (really-bld-record x t a?)))) (define really-bld-record @@ -153,9 +155,12 @@ [(pair? x) (bld-graph x t a? bld-pair)] [(vector? x) (bld-graph x t a? bld-vector)] [(or (symbol? x) (string? x)) (bld-graph x t a? bld-simple)] + ; this check must go before $record? check [(and (annotation? x) (not a?)) (bld (annotation-stripped x) t a?)] + ; this check must go before $record? check [(eq-hashtable? x) (bld-graph x t a? bld-ht)] + ; this check must go before $record? check [(symbol-hashtable? x) (bld-graph x t a? bld-ht)] [($record? x) (bld-graph x t a? bld-record)] [(box? x) (bld-graph x t a? bld-box)] @@ -296,7 +301,7 @@ (wrf-bytevector-loop (fx+ i 1)))))))) ; Written as: fasl-tag rtd field ... -(module (wrf-record really-wrf-record) +(module (wrf-record really-wrf-record wrf-annotation) (define maybe-remake-rtd (lambda (rtd) (if (eq? (machine-type) ($target-machine)) @@ -423,10 +428,22 @@ (cond [(record-type-descriptor? x) (put-u8 p (constant fasl-type-rtd)) + (wrf (record-type-uid x) p t a?) (wrf-fields (maybe-remake-rtd x) p t a?)] [else (put-u8 p (constant fasl-type-record)) - (wrf-fields x p t a?)])))) + (wrf-fields x p t a?)]))) + + (define wrf-annotation + (lambda (x p t a?) + (define maybe-remake-annotation + (lambda (x a?) + (if (fx= (annotation-flags x) a?) + x + (make-annotation (annotation-expression x) (annotation-source x) (annotation-stripped x) a?)))) + (put-u8 p (constant fasl-type-record)) + (wrf-fields (maybe-remake-annotation x a?) p t a?))) +) (define wrf-eqht (lambda (x p t a?) @@ -543,11 +560,16 @@ [(string? x) (wrf-graph x p t a? wrf-string)] [(fxvector? x) (wrf-graph x p t a? wrf-fxvector)] [(bytevector? x) (wrf-graph x p t a? wrf-bytevector)] - [(and (annotation? x) (not a?)) - (wrf (annotation-stripped x) p t a?)] - ; this check must go before $record? check + ; this check must go before $record? check + [(annotation? x) + (if a? + (wrf-graph x p t a? wrf-annotation) + (wrf (annotation-stripped x) p t a?))] + ; this check must go before $record? check [(eq-hashtable? x) (wrf-graph x p t a? wrf-eqht)] + ; this check must go before $record? check [(symbol-hashtable? x) (wrf-graph x p t a? wrf-symht)] + ; this check must go before $record? check [(hashtable? x) ($oops 'fasl-write "invalid fasl object ~s" x)] [($record? x) (wrf-graph x p t a? wrf-record)] [(vector? x) (wrf-graph x p t a? wrf-vector)] @@ -567,7 +589,18 @@ [else ($oops 'fasl-write "invalid fasl object ~s" x)]))) (define start - (lambda (p t proc) + (lambda (p t situation proc) + (define (append-bvs bv*) + (let f ([bv* bv*] [n 0]) + (if (null? bv*) + (if (fixnum? n) + (make-bytevector n) + ($oops 'fasl-write "fasl output is too large to compress")) + (let ([bv1 (car bv*)]) + (let ([m (bytevector-length bv1)]) + (let ([bv2 (f (cdr bv*) (+ n m))]) + (bytevector-copy! bv1 0 bv2 n m) + bv2)))))) (dump-graph) (let-values ([(bv* size) (let-values ([(p extractor) ($open-bytevector-list-output-port)]) @@ -577,24 +610,40 @@ (put-uptr p n))) (proc p) (extractor))]) - (put-u8 p (constant fasl-type-fasl-size)) - (put-uptr p size) - (for-each (lambda (bv) (put-bytevector p bv)) bv*)))) + (put-u8 p situation) + (if (and (>= size 100) (fasl-compressed)) + (let* ([fmt ($tc-field 'compress-format ($tc))] + [bv (append-bvs bv*)] + [uncompressed-size-bv (call-with-bytevector-output-port (lambda (bvp) (put-uptr bvp (bytevector-length bv))))] + [bv ($bytevector-compress bv fmt)]) + (put-uptr p (+ 1 (bytevector-length uncompressed-size-bv) (bytevector-length bv))) + (put-u8 p + (cond + [(eqv? fmt (constant COMPRESS-GZIP)) (constant fasl-type-gzip)] + [(eqv? fmt (constant COMPRESS-LZ4)) (constant fasl-type-lz4)] + [else ($oops 'fasl-write "unexpected $compress-format value ~s" fmt)])) + (put-bytevector p uncompressed-size-bv) + (put-bytevector p bv)) + (begin + (put-uptr p (+ size 1)) + (put-u8 p (constant fasl-type-uncompressed)) + (for-each (lambda (bv) (put-bytevector p bv)) bv*)))))) (module (fasl-write fasl-file) - ; when called from fasl-write or fasl-file, pass #t for a? to preserve annotations; + ; when called from fasl-write or fasl-file, always preserve annotations; ; otherwise use value passed in by the compiler (define fasl-one (lambda (x p) (let ([t (make-table)]) - (bld x t #t) - (start p t (lambda (p) (wrf x p t #t)))))) + (bld x t (constant annotation-all)) + (start p t (constant fasl-type-visit-revisit) (lambda (p) (wrf x p t (constant annotation-all))))))) (define-who fasl-write (lambda (x p) (unless (and (output-port? p) (binary-port? p)) ($oops who "~s is not a binary output port" p)) - (emit-header p (constant machine-type-any)) + (when ($port-flags-set? p (constant port-flag-compressed)) ($compressed-warning who p)) + (emit-header p (constant scheme-version) (constant machine-type-any)) (fasl-one x p))) (define-who fasl-file @@ -610,7 +659,7 @@ (delete-file out #f)) (on-reset (close-port op) - (emit-header op (constant machine-type-any)) + (emit-header op (constant scheme-version) (constant machine-type-any)) (let fasl-loop () (let ([x (read ip)]) (unless (eof-object? x) @@ -621,10 +670,10 @@ (define fasl-base-rtd (lambda (x p) - (emit-header p (constant machine-type-any)) + (emit-header p (constant scheme-version) (constant machine-type-any)) (let ([t (make-table)]) (bld-graph x t #f really-bld-record) - (start p t (lambda (p) (wrf-graph x p t #f really-wrf-record)))))) + (start p t (constant fasl-type-visit-revisit) (lambda (p) (wrf-graph x p t #f really-wrf-record)))))) ($fasl-target (make-target bld-graph bld wrf start make-table wrf-graph fasl-base-rtd fasl-write fasl-file)) ) @@ -638,13 +687,12 @@ (set! $fasl-bld-graph (lambda (x t a? handler) ((target-fasl-bld-graph (fasl-target)) x t a? handler))) (set! $fasl-enter (lambda (x t a?) ((target-fasl-enter (fasl-target)) x t a?))) (set! $fasl-out (lambda (x p t a?) ((target-fasl-out (fasl-target)) x p t a?))) - (set! $fasl-start (lambda (p t proc) ((target-fasl-start (fasl-target)) p t proc))) + (set! $fasl-start (lambda (p t situation proc) ((target-fasl-start (fasl-target)) p t situation proc))) (set! $fasl-table (lambda () ((target-fasl-table (fasl-target))))) (set! $fasl-wrf-graph (lambda (x p t a? handler) ((target-fasl-wrf-graph (fasl-target)) x p t a? handler))) (set! $fasl-base-rtd (lambda (x p) ((target-fasl-base-rtd (fasl-target)) x p))) (set! fasl-write (lambda (x p) ((target-fasl-write (fasl-target)) x p))) (set! fasl-file (lambda (in out) ((target-fasl-file (fasl-target)) in out)))) -) (when ($unbound-object? (#%$top-level-value '$capture-fasl-target)) (let ([ht (make-hashtable values =)]) @@ -661,3 +709,4 @@ [else ($oops who "unrecognized machine type ~s" mt)]))))) ($capture-fasl-target (constant machine-type)) +) diff -Nru chezscheme-9.5+dfsg/s/foreign.ss chezscheme-9.5.4+dfsg/s/foreign.ss --- chezscheme-9.5+dfsg/s/foreign.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/foreign.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"foreign.ss" ;;; foreign.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,10 +13,6 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. -"foreign.ss" -(define remove-foreign-entry) -(define load-shared-object) -(define foreign-entry?) (let () (define $foreign-address-name (foreign-procedure "(cs)foreign_address_name" (void*) diff -Nru chezscheme-9.5+dfsg/s/format.ss chezscheme-9.5.4+dfsg/s/format.ss --- chezscheme-9.5+dfsg/s/format.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/format.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"format.ss" ;;; format.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; diff -Nru chezscheme-9.5+dfsg/s/front.ss chezscheme-9.5.4+dfsg/s/front.ss --- chezscheme-9.5+dfsg/s/front.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/front.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"front.ss" ;;; front.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (define-who make-parameter (case-lambda [(init guard) (#2%make-parameter init guard)] @@ -249,3 +249,4 @@ [(x env-spec records? compiling-a-file outfn) ((current-expand) x env-spec records? compiling-a-file outfn)])) (define $compiler-is-loaded? #f) +) diff -Nru chezscheme-9.5+dfsg/s/ftype.ss chezscheme-9.5.4+dfsg/s/ftype.ss --- chezscheme-9.5+dfsg/s/ftype.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/ftype.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"ftype.ss" ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); @@ -56,7 +55,7 @@ (array length ftype) (bits (field-name signedness bits) ...) (function (arg-type ...) result-type) - (function conv (arg-type ...) result-type) + (function conv ... (arg-type ...) result-type) (packed ftype) (unpacked ftype) (endian endianness ftype) @@ -228,6 +227,7 @@ appropriate size for int and unsigned. |# +(begin (let () (include "types.ss") (define-syntax rtd/fptr @@ -322,7 +322,7 @@ (define-ftd-record-type array #{rtd/ftd-array a9pth58056u34h517jsrqv-5} length ftd) (define-ftd-record-type pointer #{rtd/ftd-pointer a9pth58056u34h517jsrqv-6} (mutable ftd)) (define-ftd-record-type bits #{rtd/ftd-ibits a9pth58056u34h517jsrqv-9} swap? field*) - (define-ftd-record-type function #{rtd/ftd-function a9pth58056u34h517jsrqv-10} conv arg-type* result-type) + (define-ftd-record-type function #{rtd/ftd-function a9pth58056u34h517jsrqv-11} conv* arg-type* result-type) (module (pointer-size alignment pointer-alignment native-base-ftds swap-base-ftds) (define alignment (lambda (max-alignment size) @@ -527,7 +527,7 @@ [(function-kwd (arg-type ...) result-type) (eq? (datum function-kwd) 'function) (f #'(function-kwd #f (arg-type ...) result-type) #f stype funok?)] - [(function-kwd conv (arg-type ...) result-type) + [(function-kwd conv ... (arg-type ...) result-type) (eq? (datum function-kwd) 'function) (let () (define filter-type @@ -539,7 +539,7 @@ (make-ftd-function rtd/fptr (and defid (symbol->string (syntax->datum defid))) stype #f #f - ($filter-conv 'function-ftype #'conv) + ($filter-conv 'function-ftype #'(conv ...)) (map (lambda (x) (filter-type r x #f)) #'(arg-type ...)) (filter-type r #'result-type #t)))] [(packed-kwd ftype) @@ -560,21 +560,32 @@ (define expand-fp-ftype (lambda (who what r ftype def-alist) (syntax-case ftype () - [(*-kwd ftype-name) - (and (eq? (datum *-kwd) '*) (identifier? #'ftype-name)) - (let ([stype (syntax->datum ftype)]) - (cond - [(assp (lambda (x) (bound-identifier=? #'ftype-name x)) def-alist) => - (lambda (a) - (if (ftd? (cdr a)) - (make-ftd-pointer rtd/fptr #f stype pointer-size pointer-alignment (cdr a)) - (let ([ftd (make-ftd-pointer rtd/fptr #f stype pointer-size pointer-alignment #f)]) - (set-cdr! a (cons ftd (cdr a))) - ftd)))] - [(expand-ftype-name r #'ftype-name #f) => - (lambda (ftd) - (make-ftd-pointer rtd/fptr #f stype pointer-size pointer-alignment ftd))] - [else (syntax-error #'ftype-name (format "unrecognized ~s ~s ftype name" who what))]))] + [(*/&-kwd ftype-name) + (and (or (eq? (datum */&-kwd) '*) + (eq? (datum */&-kwd) '&)) + (identifier? #'ftype-name)) + (let* ([stype (syntax->datum ftype)] + [ftd + (cond + [(assp (lambda (x) (bound-identifier=? #'ftype-name x)) def-alist) => + (lambda (a) + (if (ftd? (cdr a)) + (make-ftd-pointer rtd/fptr #f stype pointer-size pointer-alignment (cdr a)) + (let ([ftd (make-ftd-pointer rtd/fptr #f stype pointer-size pointer-alignment #f)]) + (set-cdr! a (cons ftd (cdr a))) + ftd)))] + [(expand-ftype-name r #'ftype-name #f) => + (lambda (ftd) + (make-ftd-pointer rtd/fptr #f stype pointer-size pointer-alignment ftd))] + [else (syntax-error #'ftype-name (format "unrecognized ~s ~s ftype name" who what))])]) + ;; Scheme-side argument is a pointer to a value, but foreign side has two variants: + (if (eq? (datum */&-kwd) '&) + (cond + [(ftd-array? (ftd-pointer-ftd ftd)) + (syntax-error ftype (format "array value invalid as ~a ~s" who what))] + [else + (box ftd)]) ; boxed ftd => pass/receive the value (as opposed to a pointer to the value) + ftd))] ; plain ftd => pass/receive a pointer to the value [_ (cond [(and (identifier? ftype) (expand-ftype-name r ftype #f)) => (lambda (ftd) @@ -586,11 +597,14 @@ [else (syntax->datum ftype)])]))) (define-who indirect-ftd-pointer (lambda (x) - (if (ftd? x) - (if (ftd-pointer? x) - (ftd-pointer-ftd x) - ($oops who "~s is not an ftd-pointer" x)) - x))) + (cond + [(ftd? x) + (if (ftd-pointer? x) + (ftd-pointer-ftd x) + ($oops who "~s is not an ftd-pointer" x))] + [(box? x) + (box (indirect-ftd-pointer (unbox x)))] + [else x]))) (define-who expand-ftype-defns (lambda (r defid* ftype*) (define patch-pointer-ftds! @@ -715,7 +729,7 @@ ;; (foreign-callable-entry-point code-object) [(procedure? x) (let ([co #,($make-foreign-callable 'make-ftype-pointer - (ftd-function-conv ftd) + (ftd-function-conv* ftd) #'x (map indirect-ftd-pointer (ftd-function-arg-type* ftd)) (indirect-ftd-pointer (ftd-function-result-type ftd)))]) @@ -728,7 +742,10 @@ [else x])) #'?addr)]) #`($make-fptr '#,ftd - #,(if (fx= (optimize-level) 3) + #,(if (or (fx= (optimize-level) 3) + (syntax-case #'addr-expr (ftype-pointer-address) + [(ftype-pointer-address x) #t] + [else #f])) #'addr-expr #'(let ([addr addr-expr]) ($verify-ftype-address 'make-ftype addr) @@ -926,6 +943,80 @@ (set! $ftd? (lambda (x) (ftd? x))) + (set! $ftd-as-box? ; represents `(& )` from `$expand-fp-ftype` + (lambda (x) + (and (box? x) (ftd? (unbox x))))) + (set! $ftd-size + (lambda (x) + (ftd-size x))) + (set! $ftd-alignment + (lambda (x) + (ftd-alignment x))) + (set! $ftd-compound? + (lambda (x) + (or (ftd-struct? x) + (ftd-union? x) + (ftd-array? x)))) + (set! $ftd-unsigned? + (lambda (x) + (and (ftd-base? x) + (case (ftd-base-type x) + [(unsigned-8 unsigned-16 unsigned-32 unsigned-64) #t] + [else #f])))) + (set! $ftd->members + (lambda (x) + ;; Currently used for x86_64 and arm32 ABI: Returns a list of + ;; (list 'integer/'float size offset) + (let loop ([x x] [offset 0] [accum '()]) + (cond + [(ftd-base? x) + (cons (list (case (ftd-base-type x) + [(double double-float float single-float) + 'float] + [else 'integer]) + (ftd-size x) + offset) + accum)] + [(ftd-struct? x) + (let struct-loop ([field* (ftd-struct-field* x)] [accum accum]) + (cond + [(null? field*) accum] + [else (let* ([fld (car field*)] + [sub-ftd (caddr fld)] + [sub-offset (cadr fld)]) + (struct-loop (cdr field*) + (loop sub-ftd (+ offset sub-offset) accum)))]))] + [(ftd-union? x) + (let union-loop ([field* (ftd-union-field* x)] [accum accum]) + (cond + [(null? field*) accum] + [else (let* ([fld (car field*)] + [sub-ftd (cdr fld)]) + (union-loop (cdr field*) + (loop sub-ftd offset accum)))]))] + [(ftd-array? x) + (let ([elem-ftd (ftd-array-ftd x)]) + (let array-loop ([len (ftd-array-length x)] [offset offset] [accum accum]) + (cond + [(fx= len 0) accum] + [else (array-loop (fx- len 1) + (+ offset (ftd-size elem-ftd)) + (loop elem-ftd offset accum))])))] + [else (cons (list 'integer (ftd-size x) offset) accum)])))) + (set! $ftd-atomic-category + (lambda (x) + ;; Currently used for PowerPC32 ABI + (cond + [(ftd-base? x) + (case (ftd-base-type x) + [(double double-float float single-float) + 'float] + [(unsigned-short unsigned unsigned-int + unsigned-long unsigned-long-long + unsigned-8 unsigned-16 unsigned-32 unsigned-64) + 'unsigned] + [else 'integer])] + [else 'integer]))) (set! $expand-fp-ftype ; for foreign-procedure, foreign-callable (lambda (who what r ftype) (indirect-ftd-pointer @@ -1112,8 +1203,8 @@ [(ftd-base? ftd) (do-base (filter-foreign-type (ftd-base-type ftd)) (ftd-base-swap? ftd) offset)] [(ftd-pointer? ftd) #`(#3%$fptr-fptr-ref #,fptr-expr #,offset '#,(ftd-pointer-ftd ftd))] [(ftd-function? ftd) - ($make-foreign-procedure - (ftd-function-conv ftd) + ($make-foreign-procedure 'make-ftype-pointer + (ftd-function-conv* ftd) #f #`($fptr-offset-addr #,fptr-expr offset) (map indirect-ftd-pointer (ftd-function-arg-type* ftd)) @@ -1222,7 +1313,33 @@ (trans #'ftype #'(a ...) #'fptr-expr 0)] [(_ ftype (a ...) fptr-expr ?idx) (identifier? #'ftype) - (trans #'ftype #'(a ...) #'fptr-expr #'?idx)])))) + (trans #'ftype #'(a ...) #'fptr-expr #'?idx)]))) + (set! $trans-ftype-guardian + (lambda (q) + (lambda (r) + (syntax-case q () + [(_ ftype) + (identifier? #'ftype) + (let ([ftd (expand-ftype-name r #'ftype)]) + (unless (let lockable? ([ftd ftd]) + (cond + [(ftd-base? ftd) + (let ([type (filter-foreign-type (ftd-base-type ftd))]) + (and (memq type + (constant-case ptr-bits + [(64) '(unsigned-64 integer-64)] + [(32) '(unsigned-32 integer-32)])) + (not (ftd-base-swap? ftd))))] + [(ftd-struct? ftd) + (let ([ls (ftd-struct-field* ftd)]) + (if (null? ls) + #f + (lockable? (caddr (car ls)))))] + [(ftd-union? ftd) (ormap lockable? (map cdr (ftd-union-field* ftd)))] + [(ftd-array? ftd) (lockable? (ftd-array-ftd ftd))] + [else #f])) + (syntax-error q "first field must be a word-sized integer with native endianness")) + #`(($primitive #,(if (fx= (optimize-level) 3) 3 2) $make-ftype-guardian) '#,ftd))]))))) ; procedural entry point for inspector to simplify bootstrapping (set! $ftype-pointer? (lambda (x) ($fptr? x))) (set! $make-fptr @@ -1930,6 +2047,7 @@ (define-syntax make-ftype-pointer (lambda (x) ($trans-make-ftype-pointer x))) (define-syntax ftype-pointer? (lambda (x) ($trans-ftype-pointer? x))) (define-syntax ftype-sizeof (lambda (x) ($trans-ftype-sizeof x))) +(define-syntax ftype-guardian (lambda (x) ($trans-ftype-guardian x))) (define-syntax ftype-&ref (lambda (x) ($trans-ftype-&ref x))) (define-syntax ftype-ref (lambda (x) ($trans-ftype-ref x))) (define-syntax ftype-locked-incr! (lambda (x) ($trans-ftype-locked-op! #'ftype-locked-incr! x #'$fptr-locked-incr!))) @@ -1939,3 +2057,4 @@ (define-syntax ftype-spin-lock! (lambda (x) ($trans-ftype-locked-op! #'ftype-spin-lock! x #'$fptr-spin-lock!))) (define-syntax ftype-unlock! (lambda (x) ($trans-ftype-locked-op! #'ftype-unlock! x #'$fptr-unlock!))) (define-syntax ftype-set! (lambda (x) ($trans-ftype-set! x))) +) diff -Nru chezscheme-9.5+dfsg/s/.gitattributes chezscheme-9.5.4+dfsg/s/.gitattributes --- chezscheme-9.5+dfsg/s/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/.gitattributes 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1 @@ +update-revision export-subst diff -Nru chezscheme-9.5+dfsg/s/i3nt.def chezscheme-9.5.4+dfsg/s/i3nt.def --- chezscheme-9.5+dfsg/s/i3nt.def 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/i3nt.def 2020-08-31 02:35:12.000000000 +0000 @@ -38,8 +38,8 @@ (define-constant typedef-u16 "unsigned short") (define-constant typedef-i32 "int") (define-constant typedef-u32 "unsigned int") -(define-constant typedef-i64 "__int64") -(define-constant typedef-u64 "unsigned __int64") +(define-constant typedef-i64 "long long") +(define-constant typedef-u64 "unsigned long long") (define-constant typedef-string-char "unsigned int") (define-constant thread-handle-uptrs 1) (define-constant native-endianness 'little) diff -Nru chezscheme-9.5+dfsg/s/inspect.ss chezscheme-9.5.4+dfsg/s/inspect.ss --- chezscheme-9.5+dfsg/s/inspect.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/inspect.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"inspect.ss" ;;; inspect.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -29,8 +28,7 @@ ; ---port info should include file descriptor, perhaps provide access ; location in file -(define inspect) - +(begin (let () (define-syntax make-dispatch-table @@ -2187,7 +2185,7 @@ [len ($continuation-stack-length x)] [lpm ($continuation-return-livemask x)]) (cond - [(and (code-info? info) (find-rpi offset (code-info-rpis info))) => + [(and (code-info? info) (code-info-rpis info) (find-rpi offset (code-info-rpis info))) => (lambda (rpi) (let ([cookie '(chocolate . chip)]) (let ([vals (make-vector len cookie)] [vars (make-vector len '())] [live (code-info-live info)]) @@ -2880,3 +2878,4 @@ [(x g) ($compute-composition x (filter-generation who g))]))) (define object-counts (foreign-procedure "(cs)object_counts" () ptr)) +) diff -Nru chezscheme-9.5+dfsg/s/interpret.ss chezscheme-9.5.4+dfsg/s/interpret.ss --- chezscheme-9.5+dfsg/s/interpret.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/interpret.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"interpret.ss" ;;; interpret.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -459,7 +458,7 @@ [(seq ,e1 ,e2) (let ((e1 (ip2 e1)) (e2 (ip2 e2))) ($rt lambda () ($rt e1) ($rt e2)))] - [(foreign ,conv ,name ,e (,arg-type* ...) ,result-type) + [(foreign (,conv* ...) ,name ,e (,arg-type* ...) ,result-type) (unless $compiler-is-loaded? ($oops 'interpret "cannot compile foreign-procedure: compiler is not loaded")) (let ([p ($compile-backend @@ -468,11 +467,11 @@ (with-output-language (Lsrc Expr) `(case-lambda ,(make-preinfo-lambda) (clause (,t) 1 - (foreign ,conv ,name (ref #f ,t) + (foreign (,conv* ...) ,name (ref #f ,t) (,arg-type* ...) ,result-type))))))]) (let ([e (ip2 e)]) ($rt lambda () ((p) ($rt e)))))] - [(fcallable ,conv ,e (,arg-type* ...) ,result-type) + [(fcallable (,conv* ...) ,e (,arg-type* ...) ,result-type) (unless $compiler-is-loaded? ($oops 'interpret "cannot compile foreign-callable: compiler is not loaded")) (let ([p ($compile-backend @@ -481,7 +480,7 @@ (with-output-language (Lsrc Expr) `(case-lambda ,(make-preinfo-lambda) (clause (,t) 1 - (fcallable ,conv (ref #f ,t) (,arg-type* ...) ,result-type))))))]) + (fcallable (,conv* ...) (ref #f ,t) (,arg-type* ...) ,result-type))))))]) (let ([e (ip2 e)]) ($rt lambda () ((p) ($rt e)))))] [else (unexpected-record x)]))) @@ -645,40 +644,44 @@ (c-var-index-set! (car vars) i) (loop (cdr vars) regs (fx+ i 1))]))))) -(define-pass interpret-Lexpand : Lexpand (ir situation for-import? ofn eoo) -> * (val) +(define-pass interpret-Lexpand : Lexpand (ir situation for-import? importer ofn eoo) -> * (val) (definitions (define (ibeval x1) ($rt (parameterize ([$target-machine (machine-type)] [$sfd #f]) - (let* ([x2 ($cpvalid x1)] + (let* ([x2 ($pass-time 'cpvalid (lambda () ($cpvalid x1)))] [x2a (let ([cpletrec-ran? #f]) (let ([x ((run-cp0) (lambda (x) (set! cpletrec-ran? #t) - ($cpletrec ($cp0 x #f))) + (let ([x ($pass-time 'cp0 (lambda () ($cp0 x #f)))]) + ($pass-time 'cpletrec + (lambda () ($cpletrec x))))) x2)]) - (if cpletrec-ran? x ($cpletrec x))))] - [x2b ($cpcheck x2a)]) + (if cpletrec-ran? x ($pass-time 'cpletrec (lambda () ($cpletrec x))))))] + [x2b ($pass-time 'cpcheck (lambda () ($cpcheck x2a)))] + [x2b ($pass-time 'cpcommonize (lambda () ($cpcommonize x2b)))]) (when eoo (pretty-print ($uncprep x2b) eoo)) - (ip2 (ip1 x2b)))) + (let ([x ($pass-time 'ip1 (lambda () (ip1 x2b)))]) + ($pass-time 'ip2 (lambda () (ip2 x)))))) ([a0 0] [a1 0] [fp 0] [cp 0])))) (Inner : Inner (ir) -> * (val) [,lsrc (ibeval lsrc)] [(program ,uid ,body) (ibeval ($build-invoke-program uid body))] - [(library/ct ,uid ,import-code ,visit-code) - (ibeval ($build-install-library/ct-code uid import-code visit-code))] + [(library/ct ,uid (,export-id* ...) ,import-code ,visit-code) + (ibeval ($build-install-library/ct-code uid export-id* import-code visit-code))] [(library/rt ,uid (,dl* ...) (,db* ...) (,dv* ...) (,de* ...) ,body) (ibeval ($build-install-library/rt-code uid dl* db* dv* de* body))] - [,linfo/rt ($install-library/rt-desc linfo/rt for-import? ofn)] - [,linfo/ct ($install-library/ct-desc linfo/ct for-import? ofn)] - [,pinfo ($install-program-desc pinfo)] + [(library/rt-info ,linfo/rt) ($install-library/rt-desc linfo/rt for-import? importer ofn)] + [(library/ct-info ,linfo/ct) ($install-library/ct-desc linfo/ct for-import? importer ofn)] + [(program-info ,pinfo) ($install-program-desc pinfo)] [else (sorry! who "unexpected language form ~s" ir)]) (Outer : Outer (ir) -> * (val) ; can't use cata since (Outer outer1) might return 0 or more than one value [(group ,outer1 ,outer2) (Outer outer1) (Outer outer2)] [(visit-only ,inner) (unless (eq? situation 'revisit) (Inner inner))] [(revisit-only ,inner) (unless (eq? situation 'visit) (Inner inner))] - [,rcinfo (void)] + [(recompile-info ,rcinfo) (void)] [,inner (Inner inner)] [else (sorry! who "unexpected language form ~s" ir)]) (Outer ir)) @@ -693,16 +696,18 @@ (interaction-environment)))] [(x0 env-spec) (unless (environment? env-spec) ($oops 'interpret "~s is not an environment" env-spec)) - (let ([x1 (parameterize ([$target-machine (machine-type)] [$sfd #f]) - (expand x0 env-spec #t))]) + (let ([x1 ($pass-time 'expand + (lambda () + (parameterize ([$target-machine (machine-type)] [$sfd #f]) + (expand x0 env-spec #t))))]) ($uncprep x1 #t) ; populate preinfo sexpr fields (when (and (expand-output) (not ($noexpand? x0))) (pretty-print ($uncprep x1) (expand-output))) - (interpret-Lexpand x1 'load #f #f (and (not ($noexpand? x0)) (expand/optimize-output))))]))) + (interpret-Lexpand x1 'load #f #f #f (and (not ($noexpand? x0)) (expand/optimize-output))))]))) (set! $interpret-backend - (lambda (x situation for-import? ofn) - (interpret-Lexpand x situation for-import? ofn (expand/optimize-output)))) + (lambda (x situation for-import? importer ofn) + (interpret-Lexpand x situation for-import? importer ofn (expand/optimize-output)))) +(current-eval interpret) ) -(current-eval interpret) diff -Nru chezscheme-9.5+dfsg/s/io.ss chezscheme-9.5.4+dfsg/s/io.ss --- chezscheme-9.5+dfsg/s/io.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/io.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"io.ss" ;;; io.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -80,6 +79,7 @@ so we instead use an input-mode flag in the port header. |# +(begin (set-who! file-buffer-size ($make-thread-parameter $c-bufsiz (lambda (x) @@ -641,18 +641,21 @@ (define binary-file-port-clear-output (lambda (who p) - (set-binary-port-output-size! p 0))) + (set-binary-port-output-index! p 0))) (define binary-file-port-close-port (lambda (who p) - (unregister-open-file p) - (let ([msg ($close-fd ($port-info p) (port-gz-mode p))]) - (unless (eq? #t msg) (port-oops who p msg))) - (mark-port-closed! p) (when (input-port? p) (set-port-eof! p #f) (set-binary-port-input-size! p 0)) - (when (output-port? p) (set-binary-port-output-size! p 0)))) + (when (output-port? p) (set-binary-port-output-size! p 0)) + (unregister-open-file p) + ; mark port closed before closing fd. if an interrupt occurs, we'd prefer + ; that the fd's resources never be freed than to have an open port floating + ; around with fd resources that have already been freed. + (mark-port-closed! p) + (let ([msg ($close-fd ($port-info p) (port-gz-mode p))]) + (unless (eq? #t msg) (port-oops who p msg))))) (define-syntax binary-file-port-port-position (syntax-rules () @@ -4058,7 +4061,7 @@ (set-who! output-port-buffer-mode (lambda (output-port) (unless (output-port? output-port) - ($oops who "~s is not an output-port" output-port)) + ($oops who "~s is not an output port" output-port)) (cond [($port-flags-set? output-port (constant port-flag-block-buffered)) (buffer-mode block)] @@ -4326,9 +4329,7 @@ [new-buffer (make-bytevector new-length)]) (bytevector-copy! old-buffer 0 new-buffer 0 (fxmin (bytevector-length old-buffer) old-size)) - (set-binary-port-output-buffer! p new-buffer) - ;; set size to one less than real size so 'put' always has room - (set-binary-port-output-size! p (fx1- new-length))))) + (set-binary-port-output-buffer! p new-buffer)))) (define port-length (lambda (who p) @@ -4441,7 +4442,6 @@ (binary-port-output-buffer p) (port-length #f p))]) (set-binary-port-output-buffer! p #vu8()) - (set-binary-port-output-size! p 0) (let ([info ($port-info p)]) (bytevector-output-port-info-index-set! info 0) (bytevector-output-port-info-length-set! info 0)) @@ -4642,9 +4642,7 @@ [new-buffer (make-string new-length)]) (string-copy! old-buffer 0 new-buffer 0 (fxmin (string-length old-buffer) old-size)) - (set-textual-port-output-buffer! p new-buffer) - ;; set size to one less than real size so 'put' always has room - (set-textual-port-output-size! p (fx1- new-length))))) + (set-textual-port-output-buffer! p new-buffer)))) (define port-length (lambda (who p) @@ -4766,7 +4764,6 @@ (textual-port-output-buffer p) (port-length #f p))]) (set-textual-port-output-buffer! p "") - (set-textual-port-output-size! p 0) (let ([info ($port-info p)]) (string-output-port-info-index-set! info 0) (string-output-port-info-length-set! info 0)) @@ -5557,13 +5554,18 @@ ($oops who "invalid count argument ~s" n)) ($block-write who p s n)]))) - (set-who! char-ready? - (lambda (input-port) - (unless (and (input-port? input-port) (textual-port? input-port)) - ($oops who "~s is not a textual input port" input-port)) + (let () + (define ($char-ready? input-port who) (or (not (port-input-empty? input-port)) (port-flag-eof-set? input-port) - (call-port-handler ready? who input-port)))) + (call-port-handler ready? who input-port))) + (set-who! char-ready? + (case-lambda + [() ($char-ready? (current-input-port) who)] + [(input-port) + (unless (and (input-port? input-port) (textual-port? input-port)) + ($oops who "~s is not a textual input port" input-port)) + ($char-ready? input-port who)]))) (set-who! clear-input-port (rec clear-input-port @@ -6305,3 +6307,4 @@ ; utf8->string, etc., are in prims.ss, since they are used by ; foreign procedures argument and return values ) +) diff -Nru chezscheme-9.5+dfsg/s/library.ss chezscheme-9.5.4+dfsg/s/library.ss --- chezscheme-9.5+dfsg/s/library.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/library.ss 2020-08-31 02:35:12.000000000 +0000 @@ -27,8 +27,6 @@ (generate-interrupt-trap #f) ($track-dynamic-closure-counts #f)) -"library.ss (includes # just before)" - (eval-when (compile) (define-syntax define-library-entry (lambda (x) @@ -131,8 +129,6 @@ ;;; set up $nuate for overflow (define $nuate ($closure-code (call/1cc (lambda (k) k)))) -"making closure counters!" - (set! #{raw-ref-count bhowt6w0coxl0s2y-1} '#[#{profile-counter b5vnnom9h4o4uny0-2} 0]) (set! #{raw-create-count bhowt6w0coxl0s2y-2} '#[#{profile-counter b5vnnom9h4o4uny0-2} 0]) (set! #{raw-alloc-count bhowt6w0coxl0s2y-3} '#[#{profile-counter b5vnnom9h4o4uny0-2} 0]) @@ -304,6 +300,11 @@ (define-library-entry (vector-length v) (vector-oops 'vector-length v)) + (define-library-entry (vector-cas! v i old-x new-x) + (if (mutable-vector? v) + (index-oops 'vector-cas! v i) + (mutable-vector-oops 'vector-cas! v))) + (define-library-entry (fxvector-ref v i) (if (fxvector? v) (index-oops 'fxvector-ref v i) @@ -416,6 +417,9 @@ (define-library-entry (set-box! b v) ($oops 'set-box! "~s is not a mutable box" b)) +(define-library-entry (box-cas! b old-v new-v) + ($oops 'box-cas! "~s is not a mutable box" b)) + (let () (define (fxnonfixnum1 who x) ($oops who "~s is not a fixnum" x)) @@ -450,7 +454,7 @@ (define-library-entry (fx<= x y) (fxnonfixnum2 'fx<= x y)) (define-library-entry (fx>= x y) (fxnonfixnum2 'fx>= x y)) (define-library-entry (fx=? x y) (fxnonfixnum2 'fx=? x y)) -(define-library-entry (fx? x y) (fxnonfixnum2 'fx>? x y)) (define-library-entry (fx<=? x y) (fxnonfixnum2 'fx<=? x y)) (define-library-entry (fx>=? x y) (fxnonfixnum2 'fx>=? x y)) @@ -1067,7 +1071,7 @@ (let ([handler $signal-interrupt-handler]) ($tc-field 'signal-interrupt-pending ($tc) #f) (keyboard) - (handler x)) + (for-each handler ($dequeue-scheme-signals ($tc)))) (keyboard)))) (define (keyboard) (if ($tc-field 'keyboard-interrupt-pending ($tc)) diff -Nru chezscheme-9.5+dfsg/s/mathprims.ss chezscheme-9.5.4+dfsg/s/mathprims.ss --- chezscheme-9.5+dfsg/s/mathprims.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/mathprims.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"mathprims.ss" ;;; mathprims.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (eval-when (compile) (define-syntax define-relop @@ -766,3 +766,4 @@ [else (noncflonum-error 'cfl-conjugate x)]))) ) +) diff -Nru chezscheme-9.5+dfsg/s/Mf-base chezscheme-9.5.4+dfsg/s/Mf-base --- chezscheme-9.5+dfsg/s/Mf-base 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/Mf-base 2020-08-31 02:35:12.000000000 +0000 @@ -24,12 +24,23 @@ # d is the debug level at which the system should be built d = 0 +# cl determines the commonization level +cl = (commonization-level) + # i determines whether inspector-information is generated: f for false, t for true i = f -# cp0 (xcp0) determines the number of cp0 (source optimizer) iterations run +# cp0 determines the number of cp0 (source optimizer) iterations run cp0 = 2 -xcp0 = 2 + +# fc determines whether fasl objects are compressed +fc = t + +# xf determines the compression foramt +xf = (compress-format) + +# xl determine the compression level +xl = (compress-level) # p (xp) determines whether source profiling is enabled: f for false, t for true. p = f @@ -39,6 +50,9 @@ bp = f xbp = f +# c determines whether covin files are generated: f for false, t for true. +c = f + # loadspd determines whether source-profile data is loaded: f for false, t for true loadspd = f @@ -61,7 +75,7 @@ # gac determines whether cost-center allocation counts are generated: f for false, t for true gac = f -# gac determines whether cost-center instruction counts are generated: f for false, t for true +# gic determines whether cost-center instruction counts are generated: f for false, t for true gic = f # pps determines whether pass timings are printed @@ -79,6 +93,7 @@ # implementation Scheme = ../bin/$m/scheme${ExeSuffix} export SCHEMEHEAPDIRS=../boot/%m +export CHEZSCHEMELIBDIRS=. # Define the libdirs separator character ifeq ($(OS),Windows_NT) @@ -93,6 +108,7 @@ SchemeBoot = ../boot/$m/scheme.boot Cheader = ../boot/$m/scheme.h Cequates = ../boot/$m/equates.h +Revision = ../boot/$m/revision # The following controls the patch files loaded before compiling, typically used only # to load a new compiler for cross compilation @@ -101,7 +117,7 @@ # putting cpnanopass.patch early for maximum make --jobs=2 benefit patchobj = patch.patch cpnanopass.patch cprep.patch cpcheck.patch\ - cp0.patch cpvalid.patch cpletrec.patch\ + cp0.patch cpvalid.patch cpcommonize.patch cpletrec.patch\ reloc.patch\ compile.patch fasl.patch syntax.patch env.patch\ read.patch interpret.patch ftype.patch strip.patch\ @@ -123,7 +139,7 @@ strnum.ss bytevector.ss 5_4.ss 5_6.ss 5_7.ss\ event.ss 4.ss front.ss foreign.ss 6.ss print.ss newhash.ss\ format.ss date.ss 7.ss cafe.ss trace.ss engine.ss\ - interpret.ss cprep.ss cpcheck.ss cp0.ss cpvalid.ss cpletrec.ss inspect.ss\ + interpret.ss cprep.ss cpcheck.ss cp0.ss cpvalid.ss cpcommonize.ss cpletrec.ss inspect.ss\ enum.ss io.ss read.ss primvars.ss syntax.ss costctr.ss expeditor.ss\ exceptions.ss pretty.ss env.ss\ fasl.ss reloc.ss pdhtml.ss strip.ss ftype.ss back.ss @@ -148,28 +164,32 @@ np-languages.ss # doit uses a different Scheme process to compile each target -doit: ${PetiteBoot} ${SchemeBoot} ${Cheader} ${Cequates} +doit: ${PetiteBoot} ${SchemeBoot} ${Cheader} ${Cequates} ${Revision} -# doit uses a single Scheme process to compile all targets. this is typically +# all uses a single Scheme process to compile all targets. this is typically # faster when most of the targets need to be recompiled. -all: bootall ${Cheader} ${Cequates} +all: bootall ${Cheader} ${Cequates} ${Revision} -# allx runs all up to two times and checks to see if the new boot file is the +# allx runs all up to three times and checks to see if the new boot file is the # same as the last, i.e., the system is properly bootstrapped. allx: prettyclean saveboot $(MAKE) all - if $(MAKE) checkboot; then echo fine ; else\ - $(MAKE) prettyclean saveboot &&\ - $(MAKE) all &&\ - $(MAKE) checkboot ;\ - fi + if $(MAKE) checkboot > /dev/null 2>&1; then echo fine ; else\ + $(MAKE) prettyclean saveboot &&\ + $(MAKE) all &&\ + if $(MAKE) checkboot > /dev/null 2>&1; then echo fine ; else\ + $(MAKE) prettyclean saveboot &&\ + $(MAKE) all &&\ + $(MAKE) checkboot ;\ + fi\ + fi $(MAKE) restoreboot ifneq ($(OS),Windows_NT) $(MAKE) resetbootlinks endif # bootstrap runs allx if any sources have changed since the last bootstrap -bootstrap: ${allsrc} +bootstrap: ${allsrc} | ${Revision} $(MAKE) allx touch bootstrap @@ -204,6 +224,10 @@ echo '(reset-handler abort)'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(when #$p (compile-profile (quote source)))'\ '(when #$(bp) (compile-profile (quote block)))'\ '(when #$(loadspd) (profile-load-data "${ProfileDumpSource}"))'\ @@ -211,12 +235,14 @@ '(generate-inspector-information #$i)'\ '(generate-allocation-counts #${gac})'\ '(generate-instruction-counts #${gic})'\ + '(generate-covin-files #$c)'\ '(run-cp0 (lambda (cp0 x)'\ ' (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\ ' ((fx= i 0) x))))'\ '(collect-trip-bytes (expt 2 24))'\ '(collect-request-handler (lambda () (collect 0 1)))'\ '(collect 1 2)'\ + '(delete-file "$*.covin")'\ '(time (${compile} "$*.ss" "$*.$m" (quote $m)))'\ '(when #${pdhtml} (profile-dump-html))'\ '(when #${dumpspd} (profile-dump-data "${ProfileDumpSource}"))'\ @@ -227,6 +253,10 @@ echo '(reset-handler abort)'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(when #$p (compile-profile (quote source)))'\ '(when #$(bp) (compile-profile (quote block)))'\ '(when #$(loadspd) (profile-load-data "${ProfileDumpSource}"))'\ @@ -234,6 +264,7 @@ '(generate-inspector-information #$i)'\ '(generate-allocation-counts #${gac})'\ '(generate-instruction-counts #${gic})'\ + '(generate-covin-files #$c)'\ '(run-cp0 (lambda (cp0 x)'\ ' (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\ ' ((fx= i 0) x))))'\ @@ -241,6 +272,7 @@ '(collect-request-handler (lambda () (collect 0 1)))'\ '(collect 1 2)'\ '(print-gensym (quote pretty/suffix))'\ + '(delete-file "$*.covin")'\ '(compile-with-asm "$*.ss" "$*.$m" (quote $m))'\ '(when #${pdhtml} (profile-dump-html))'\ '(when #${dumpspd} (profile-dump-data "${ProfileDumpSource}"))'\ @@ -253,6 +285,10 @@ '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(generate-inspector-information #$i)'\ '(subset-mode (quote system))'\ '(compile-file "$*.ss" "$*.so")'\ @@ -262,6 +298,10 @@ echo '(reset-handler abort)'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(when #$(xp) (compile-profile (quote source)))'\ '(when #$(xbp) (compile-profile (quote block)))'\ '(generate-inspector-information #$i)'\ @@ -314,12 +354,16 @@ ${PetiteBoot}: ${macroobj} ${patchfile} ${baseobj} echo '(reset-handler abort)'\ + '(generate-covin-files #$c)'\ + '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\ ' (map symbol->string (quote (${baseobj}))))'\ | ${Scheme} -q ${macroobj} ${patchfile} ${SchemeBoot}: ${macroobj} ${patchfile} ${compilerobj} echo '(reset-handler abort)'\ + '(generate-covin-files #$c)'\ + '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\ ' (map symbol->string (quote (${compilerobj}))))'\ | ${Scheme} -q ${macroobj} ${patchfile} @@ -330,6 +374,10 @@ '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(generate-inspector-information #$i)'\ '(subset-mode (quote system))'\ '(compile-file "$*.ss" "$*.so")'\ @@ -341,6 +389,10 @@ '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(generate-inspector-information #$i)'\ '(subset-mode (quote system))'\ '(compile-file "$*.ss" "$*.so")'\ @@ -353,6 +405,10 @@ '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(generate-inspector-information #$i)'\ '(subset-mode (quote system))'\ '(compile-file "$*.ss" "$*.so")'\ @@ -364,6 +420,10 @@ '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(generate-inspector-information #$i)'\ '(collect-trip-bytes (expt 2 24))'\ '(collect-request-handler (lambda () (collect 0 1)))'\ @@ -386,6 +446,10 @@ '(for-each load (command-line-arguments))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(when #$p (compile-profile (quote source)))'\ '(when #$(bp) (compile-profile (quote block)))'\ '(when #$(loadspd) (profile-load-data "${ProfileDumpSource}"))'\ @@ -394,11 +458,13 @@ '(generate-allocation-counts #${gac})'\ '(generate-instruction-counts #${gic})'\ '(#%$$enable-pass-timing #${pps})'\ + '(generate-covin-files #$c)'\ '(run-cp0 (lambda (cp0 x)'\ ' (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\ ' ((fx= i 0) x))))'\ '(collect-trip-bytes (expt 2 24))'\ '(collect-request-handler (lambda () (collect 0 1)))'\ + '(for-each (lambda (x) (delete-file (string-append (path-root (symbol->string x)) ".covin"))) (quote (${obj})))'\ '(time (for-each (lambda (x y)'\ ' (collect 1 2)'\ ' (${compile} (symbol->string x)'\ @@ -407,8 +473,10 @@ ' (quote (${src}))'\ ' (quote (${obj}))))'\ '(when #${pps} (#%$$print-pass-stats))'\ + '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\ ' (map symbol->string (quote (${baseobj}))))'\ + '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\ ' (map symbol->string (quote (${compilerobj}))))'\ '(when #${pdhtml} (profile-dump-html))'\ @@ -421,17 +489,25 @@ '(for-each load (command-line-arguments))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(when #$p (compile-profile (quote source)))'\ '(when #$(bp) (compile-profile (quote block)))'\ '(generate-inspector-information #$i)'\ '(generate-allocation-counts #${gac})'\ '(generate-instruction-counts #${gic})'\ + '(generate-covin-files #$c)'\ '(run-cp0 (lambda (cp0 x)'\ ' (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\ ' ((fx= i 0) x))))'\ + '(for-each (lambda (x) (delete-file (string-append (path-root (symbol->string x)) ".covin"))) (quote (${obj})))'\ '(compile-with-setup-closure-counts (quote (${closure-opt})) (quote (${src})) (quote (${obj})) (quote $m) #$r)'\ + '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\ ' (map symbol->string (quote (${baseobj}))))'\ + '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\ ' (map symbol->string (quote (${compilerobj}))))'\ '(when #${pdhtml} (profile-dump-html))'\ @@ -442,17 +518,25 @@ '(for-each load (command-line-arguments))'\ '(optimize-level $o)'\ '(debug-level $d)'\ + '(commonization-level $(cl))'\ + '(fasl-compressed #$(fc))'\ + '(compress-format $(xf))'\ + '(compress-level $(xl))'\ '(when #$p (compile-profile (quote source)))'\ '(when #$(bp) (compile-profile (quote block)))'\ '(generate-inspector-information #$i)'\ '(generate-allocation-counts #${gac})'\ '(generate-instruction-counts #${gic})'\ + '(generate-covin-files #$c)'\ '(run-cp0 (lambda (cp0 x)'\ ' (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\ ' ((fx= i 0) x))))'\ + '(for-each (lambda (x) (delete-file (string-append (path-root (symbol->string x)) ".covin"))) (quote (${obj})))'\ '(compile-with-closure-counts (quote (${closure-opt})) (quote (${src})) (quote (${obj})) (quote $m) #$r)'\ + '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\ ' (map symbol->string (quote (${baseobj}))))'\ + '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\ '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\ ' (map symbol->string (quote (${compilerobj}))))'\ '(when #${pdhtml} (profile-dump-html))'\ @@ -497,11 +581,15 @@ then mv -f ${Cequates}.bak ${Cequates};\ else rm -f ${Cequates}.bak; fi) +.PHONY: ${Revision} +${Revision}: update-revision + @./update-revision > ${Revision} + examples: ( cd ../examples && ${MAKE} all Scheme="${Scheme} ../s/${patchfile}" ) prettyclean: - rm -f *.$m xpatch ${patch} *.patch *.so *.asm script.all header.tmp *.html + rm -f *.$m xpatch ${patch} *.patch *.so *.covin *.asm script.all header.tmp *.html rm -rf nanopass profileclean: prettyclean diff -Nru chezscheme-9.5+dfsg/s/Mf-cross chezscheme-9.5.4+dfsg/s/Mf-cross --- chezscheme-9.5+dfsg/s/Mf-cross 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/Mf-cross 2020-08-31 02:35:12.000000000 +0000 @@ -20,7 +20,7 @@ what = all examples base = ../.. -doitformebaby: xboot +xdoit: xboot include Mf-${xm} diff -Nru chezscheme-9.5+dfsg/s/mkheader.ss chezscheme-9.5.4+dfsg/s/mkheader.ss --- chezscheme-9.5+dfsg/s/mkheader.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/mkheader.ss 2020-08-31 02:35:12.000000000 +0000 @@ -334,6 +334,7 @@ (export "ptr" "Smake_uninitialized_string" "(iptr)") (export "ptr" "Sstring" "(const char *)") (export "ptr" "Sstring_of_length" "(const char *, iptr)") + (export "ptr" "Sstring_utf8" "(const char*, iptr)") (export "ptr" "Sbox" "(ptr)") (export "ptr" "Sinteger" "(iptr)") (export "ptr" "Sunsigned" "(uptr)") @@ -371,6 +372,7 @@ (export "void" "Sset_verbose" "(int)") (export "void" "Sscheme_init" "(void (*)(void))") (export "void" "Sregister_boot_file" "(const char *)") + (export "void" "Sregister_boot_file_fd" "(const char *, int fd)") (export "void" "Sregister_heap_file" "(const char *)") (export "void" "Scompact_heap" "(void)") (export "void" "Ssave_heap" "(const char *, int)") @@ -388,6 +390,14 @@ (export "int" "Sdestroy_thread" "(void)") ) + (when-feature windows + (nl) (comment "Windows support.") + (pr "#include ~%") + (export "char *" "Sgetenv" "(const char *)") + (export "wchar_t *" "Sutf8_to_wide" "(const char *)") + (export "char *" "Swide_to_utf8" "(const wchar_t *)") + ) + (nl) (comment "Features.") (for-each (lambda (x) (pr "#define FEATURE_~@:(~a~)~%" (sanitize x))) diff -Nru chezscheme-9.5+dfsg/s/newhash.ss chezscheme-9.5.4+dfsg/s/newhash.ss --- chezscheme-9.5+dfsg/s/newhash.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/newhash.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"newhash.ss" ;;; newhash.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -50,6 +49,7 @@ (define hashtable-clear!) ; hashtable [k], k >= 0 (define hashtable-keys) ; hashtable (define hashtable-entries) ; hashtable +(define hashtable-cells) ; hashtable (define hashtable-equivalence-function) ; hashtable (define hashtable-hash-function) ; hashtable (define hashtable-mutable?) ; hashtable @@ -91,6 +91,7 @@ (define $eq-hashtable-keys) ; eq-hashtable (define $eq-hashtable-values) ; eq-hashtable (define $eq-hashtable-entries) ; eq-hashtable +(define $eq-hashtable-cells) ; eq-hashtable (define $eq-hashtable-copy) ; eq-hashtable [mutableflag] (define $eq-hashtable-clear!) ; eq-hashtable [fxminlen] @@ -258,51 +259,70 @@ (ht-size-set! h 0))) (define $ht-hashtable-keys - (lambda (h) - (let ([keys (make-vector (ht-size h))] - [vec (ht-vec h)]) - (let ([n (vector-length vec)]) - (let f ([i 0] [ikey 0]) - (unless (fx= i n) - (let g ([b (vector-ref vec i)] [ikey ikey]) - (if (null? b) - (f (fx+ i 1) ikey) - (begin - (vector-set! keys ikey (caar b)) - (g (cdr b) (fx+ ikey 1)))))))) - keys))) + (lambda (h max-sz) + (let ([size (fxmin max-sz (ht-size h))]) + (let ([keys (make-vector size)] + [vec (ht-vec h)]) + (let ([n (vector-length vec)]) + (let f ([i 0] [ikey 0]) + (unless (or (fx= i n) (fx= ikey size)) + (let g ([b (vector-ref vec i)] [ikey ikey]) + (if (or (null? b) (fx= ikey size)) + (f (fx+ i 1) ikey) + (begin + (vector-set! keys ikey (caar b)) + (g (cdr b) (fx+ ikey 1)))))))) + keys)))) (define $ht-hashtable-values - (lambda (h) - (let ([vals (make-vector (ht-size h))] - [vec (ht-vec h)]) - (let ([n (vector-length vec)]) - (let f ([i 0] [ival 0]) - (unless (fx= i n) - (let g ([b (vector-ref vec i)] [ival ival]) - (if (null? b) - (f (fx+ i 1) ival) - (begin - (vector-set! vals ival (cdar b)) - (g (cdr b) (fx+ ival 1)))))))) - vals))) + (lambda (h max-sz) + (let ([size (fxmin max-sz (ht-size h))]) + (let ([vals (make-vector size)] + [vec (ht-vec h)]) + (let ([n (vector-length vec)]) + (let f ([i 0] [ival 0]) + (unless (or (fx= i n) (fx= ival size)) + (let g ([b (vector-ref vec i)] [ival ival]) + (if (or (null? b) (fx= ival size)) + (f (fx+ i 1) ival) + (begin + (vector-set! vals ival (cdar b)) + (g (cdr b) (fx+ ival 1)))))))) + vals)))) (define $ht-hashtable-entries - (lambda (h) - (let ([keys (make-vector (ht-size h))] - [vals (make-vector (ht-size h))] - [vec (ht-vec h)]) - (let ([n (vector-length vec)]) - (let f ([i 0] [ikey 0]) - (unless (fx= i n) - (let g ([b (vector-ref vec i)] [ikey ikey]) - (if (null? b) - (f (fx+ i 1) ikey) - (let ([a (car b)]) - (vector-set! keys ikey (car a)) - (vector-set! vals ikey (cdr a)) - (g (cdr b) (fx+ ikey 1)))))))) - (values keys vals)))) + (lambda (h max-sz) + (let ([size (fxmin max-sz (ht-size h))]) + (let ([keys (make-vector size)] + [vals (make-vector size)] + [vec (ht-vec h)]) + (let ([n (vector-length vec)]) + (let f ([i 0] [ikey 0]) + (unless (or (fx= i n) (fx= ikey size)) + (let g ([b (vector-ref vec i)] [ikey ikey]) + (if (or (null? b) (fx= ikey size)) + (f (fx+ i 1) ikey) + (let ([a (car b)]) + (vector-set! keys ikey (car a)) + (vector-set! vals ikey (cdr a)) + (g (cdr b) (fx+ ikey 1)))))))) + (values keys vals))))) + + (define $ht-hashtable-cells + (lambda (h max-sz) + (let ([size (fxmin max-sz (ht-size h))]) + (let ([cells (make-vector size)] + [vec (ht-vec h)]) + (let ([n (vector-length vec)]) + (let f ([i 0] [icell 0]) + (unless (or (fx= i n) (fx= icell size)) + (let g ([b (vector-ref vec i)] [icell icell]) + (if (or (null? b) (fx= icell size)) + (f (fx+ i 1) icell) + (let ([a (car b)]) + (vector-set! cells icell a) + (g (cdr b) (fx+ icell 1)))))))) + cells)))) (define eqv-generic? (lambda (x) @@ -351,7 +371,7 @@ ($eq-hashtable-copy (eqv-ht-eqht h) mutable?) ($gen-hashtable-copy (eqv-ht-genht h) mutable?)))) - (module ($eqv-hashtable-keys $eqv-hashtable-values $eqv-hashtable-entries) + (module ($eqv-hashtable-keys $eqv-hashtable-values $eqv-hashtable-entries $eqv-hashtable-cells) (define vector-append (lambda (v1 v2) (let ([n1 (vector-length v1)] [n2 (vector-length v2)]) @@ -368,22 +388,27 @@ (vector-set! v j (vector-ref v2 i))) v)))))) (define $eqv-hashtable-keys - (lambda (h) - (vector-append - ($eq-hashtable-keys (eqv-ht-eqht h)) - ($ht-hashtable-keys (eqv-ht-genht h))))) + (lambda (h max-sz) + (let* ([keys1 ($eq-hashtable-keys (eqv-ht-eqht h) max-sz)] + [keys2 ($ht-hashtable-keys (eqv-ht-genht h) (fx- max-sz (vector-length keys1)))]) + (vector-append keys1 keys2)))) (define $eqv-hashtable-values - (lambda (h) - (vector-append - ($eq-hashtable-values (eqv-ht-eqht h)) - ($ht-hashtable-values (eqv-ht-genht h))))) + (lambda (h max-sz) + (let* ([vals1 ($eq-hashtable-values (eqv-ht-eqht h) max-sz)] + [vals2 ($ht-hashtable-values (eqv-ht-genht h) (fx- max-sz (vector-length vals1)))]) + (vector-append vals1 vals2)))) (define $eqv-hashtable-entries - (lambda (h) - (let-values ([(keys1 vals1) ($eq-hashtable-entries (eqv-ht-eqht h))] - [(keys2 vals2) ($ht-hashtable-entries (eqv-ht-genht h))]) + (lambda (h max-sz) + (let*-values ([(keys1 vals1) ($eq-hashtable-entries (eqv-ht-eqht h) max-sz)] + [(keys2 vals2) ($ht-hashtable-entries (eqv-ht-genht h) (fx- max-sz (vector-length keys1)))]) (values (vector-append keys1 keys2) - (vector-append vals1 vals2)))))) + (vector-append vals1 vals2))))) + (define $eqv-hashtable-cells + (lambda (h max-sz) + (let* ([cells1 ($eq-hashtable-cells (eqv-ht-eqht h) max-sz)] + [cells2 ($ht-hashtable-cells (eqv-ht-genht h) (fx- max-sz (vector-length cells1)))]) + (vector-append cells1 cells2))))) (define number-hash (lambda (z) @@ -477,7 +502,7 @@ (lambda (h p) (unless (eq-ht? h) ($oops who "~s is not an eq hashtable" h)) (unless (procedure? p) ($oops who "~s is not a procedure" p)) - (let-values ([(keys vals) ($eq-hashtable-entries h)]) + (let-values ([(keys vals) ($eq-hashtable-entries h (most-positive-fixnum))]) (let f ([i (vector-length keys)] [ls '()]) (if (fx= i 0) ls @@ -488,7 +513,7 @@ (lambda (h p) (unless (eq-ht? h) ($oops who "~s is not an eq hashtable" h)) (unless (procedure? p) ($oops who "~s is not a procedure" p)) - (let-values ([(keys vals) ($eq-hashtable-entries h)]) + (let-values ([(keys vals) ($eq-hashtable-entries h (most-positive-fixnum))]) (vector-for-each p keys vals)))) (set-who! make-eq-hashtable @@ -775,31 +800,73 @@ ($ht-hashtable-clear! (eqv-ht-genht h) minlen)] [else ($ht-hashtable-clear! h minlen)]))]))) - (set! hashtable-keys - (lambda (h) - (unless (xht? h) - ($oops 'hashtable-keys "~s is not a hashtable" h)) - (case (xht-type h) - [(eq) ($eq-hashtable-keys h)] - [(eqv) ($eqv-hashtable-keys h)] - [else ($ht-hashtable-keys h)]))) + (let () + (define (invalid-length who max-sz) + ($oops who "~s is not a valid length" max-sz)) + (define (invalid-table who h) + ($oops who "~s is not a hashtable" h)) - (set-who! hashtable-values - (lambda (h) - (unless (xht? h) ($oops who "~s is not a hashtable" h)) - (case (xht-type h) - [(eq) ($eq-hashtable-values h)] - [(eqv) ($eqv-hashtable-values h)] - [else ($ht-hashtable-values h)]))) + (define-syntax hashtable-content-dispatch + (syntax-rules () + [(_ who $eq-hashtable-content $eqv-hashtable-content $ht-hashtable-content) + (let () + (define (dispatch h max-sz) + (unless (xht? h) (invalid-table who h)) + (case (xht-type h) + [(eq) ($eq-hashtable-content h max-sz)] + [(eqv) ($eqv-hashtable-content h max-sz)] + [else ($ht-hashtable-content h max-sz)])) + (case-lambda + [(h max-sz) + (cond + [(fixnum? max-sz) + (unless (fx>= max-sz 0) (invalid-length who max-sz)) + (dispatch h max-sz)] + [(bignum? max-sz) + (unless (>= max-sz 0) (invalid-length who max-sz)) + (dispatch h (most-positive-fixnum))] + [else (invalid-length who max-sz)])] + [(h) (dispatch h (most-positive-fixnum))]))])) + + (set-who! hashtable-keys + (hashtable-content-dispatch who + $eq-hashtable-keys + $eqv-hashtable-keys + $ht-hashtable-keys)) - (set! hashtable-entries - (lambda (h) - (unless (xht? h) - ($oops 'hashtable-entries "~s is not a hashtable" h)) - (case (xht-type h) - [(eq) ($eq-hashtable-entries h)] - [(eqv) ($eqv-hashtable-entries h)] - [else ($ht-hashtable-entries h)]))) + (set-who! #(r6rs: hashtable-keys) + (lambda (h) + (unless (xht? h) (invalid-table who h)) + (case (xht-type h) + [(eq) ($eq-hashtable-keys h (most-positive-fixnum))] + [(eqv) ($eqv-hashtable-keys h (most-positive-fixnum))] + [else ($ht-hashtable-keys h (most-positive-fixnum))]))) + + (set-who! hashtable-values + (hashtable-content-dispatch who + $eq-hashtable-values + $eqv-hashtable-values + $ht-hashtable-values)) + + (set-who! hashtable-entries + (hashtable-content-dispatch who + $eq-hashtable-entries + $eqv-hashtable-entries + $ht-hashtable-entries)) + + (set-who! #(r6rs: hashtable-entries) + (lambda (h) + (unless (xht? h) (invalid-table who h)) + (case (xht-type h) + [(eq) ($eq-hashtable-entries h (most-positive-fixnum))] + [(eqv) ($eqv-hashtable-entries h (most-positive-fixnum))] + [else ($ht-hashtable-entries h (most-positive-fixnum))]))) + + (set-who! hashtable-cells + (hashtable-content-dispatch who + $eq-hashtable-cells + $eqv-hashtable-cells + $ht-hashtable-cells))) (set! hashtable-size (lambda (h) @@ -985,50 +1052,64 @@ (include "hashtable-types.ss") (set! $eq-hashtable-keys - (lambda (h) - (let ([vec (ht-vec h)] [size (ht-size h)]) + (lambda (h max-sz) + (let ([vec (ht-vec h)] [size (fxmin max-sz (ht-size h))]) (let ([n (vector-length vec)] [keys (make-vector size)]) (let outer ([i 0] [j 0]) - (if (fx= i n) + (if (or (fx= i n) (fx= j size)) keys (let inner ([b (vector-ref vec i)] [j j]) - (if (fixnum? b) + (if (or (fixnum? b) (fx= j size)) (outer (fx+ i 1) j) (let ([keyval ($tlc-keyval b)]) (vector-set! keys j (car keyval)) (inner ($tlc-next b) (fx+ j 1))))))))))) (set! $eq-hashtable-values - (lambda (h) - (let ([vec (ht-vec h)] [size (ht-size h)]) + (lambda (h max-sz) + (let ([vec (ht-vec h)] [size (fxmin max-sz (ht-size h))]) (let ([n (vector-length vec)] [vals (make-vector size)]) (let outer ([i 0] [j 0]) - (if (fx= i n) + (if (or (fx= i n) (fx= j size)) vals (let inner ([b (vector-ref vec i)] [j j]) - (if (fixnum? b) + (if (or (fixnum? b) (fx= j size)) (outer (fx+ i 1) j) (let ([keyval ($tlc-keyval b)]) (vector-set! vals j (cdr keyval)) (inner ($tlc-next b) (fx+ j 1))))))))))) (set! $eq-hashtable-entries - (lambda (h) - (let ([vec (ht-vec h)] [size (ht-size h)]) + (lambda (h max-sz) + (let ([vec (ht-vec h)] [size (fxmin max-sz (ht-size h))]) (let ([n (vector-length vec)] [keys (make-vector size)] [vals (make-vector size)]) (let outer ([i 0] [j 0]) - (if (fx= i n) + (if (or (fx= i n) (fx= j size)) (values keys vals) (let inner ([b (vector-ref vec i)] [j j]) - (if (fixnum? b) + (if (or (fixnum? b) (fx= j size)) (outer (fx+ i 1) j) (let ([keyval ($tlc-keyval b)]) (vector-set! keys j (car keyval)) (vector-set! vals j (cdr keyval)) (inner ($tlc-next b) (fx+ j 1))))))))))) + (set! $eq-hashtable-cells + (lambda (h max-sz) + (let ([vec (ht-vec h)] [size (fxmin max-sz (ht-size h))]) + (let ([n (vector-length vec)] [cells (make-vector size)]) + (let outer ([i 0] [j 0]) + (if (or (fx= i n) (fx= j size)) + cells + (let inner ([b (vector-ref vec i)] [j j]) + (if (or (fixnum? b) (fx= j size)) + (outer (fx+ i 1) j) + (let ([keyval ($tlc-keyval b)]) + (vector-set! cells j keyval) + (inner ($tlc-next b) (fx+ j 1))))))))))) + (set! $eq-hashtable-copy (lambda (h1 mutable?) (let ([subtype (eq-ht-subtype h1)]) @@ -1145,14 +1226,15 @@ (let () (define (lookup-equal-procedure record1 record2) (let ([e/h (lookup-equal/hash record1 'equal-proc)]) - (and e/h - (let ([proc (equal/hash-maybe-proc e/h)]) - (and proc - (let ([rtd (equal/hash-rtd e/h)]) - (let ([e/h (lookup-equal/hash record2 'equal-proc)]) - (and e/h - (eq? (equal/hash-rtd e/h) rtd) - proc)))))))) + (let ([proc (equal/hash-maybe-proc e/h)]) + (if proc + (and + (eq? (equal/hash-rtd (lookup-equal/hash record2 'equal-proc)) (equal/hash-rtd e/h)) + proc) + (let ([default-proc (default-record-equal-procedure)]) + (and default-proc + (not (equal/hash-maybe-proc (lookup-equal/hash record2 'equal-proc))) + default-proc)))))) (set-who! $record-equal-procedure (lambda (record1 record2) (lookup-equal-procedure record1 record2))) @@ -1163,8 +1245,8 @@ (lookup-equal-procedure record1 record2)))) (let () (define (lookup-hash-procedure record) - (let ([e/h (lookup-equal/hash record 'hash-proc)]) - (and e/h (equal/hash-maybe-proc e/h)))) + (or (equal/hash-maybe-proc (lookup-equal/hash record 'hash-proc)) + (default-record-hash-procedure))) (set-who! $record-hash-procedure (lambda (record) (lookup-hash-procedure record))) diff -Nru chezscheme-9.5+dfsg/s/np-languages.ss chezscheme-9.5.4+dfsg/s/np-languages.ss --- chezscheme-9.5+dfsg/s/np-languages.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/np-languages.ss 2020-08-31 02:35:12.000000000 +0000 @@ -21,12 +21,13 @@ uvar-referenced? uvar-referenced! uvar-assigned? uvar-assigned! uvar-was-closure-ref? uvar-was-closure-ref! uvar-unspillable? uvar-spilled? uvar-spilled! uvar-local-save? uvar-local-save! - uvar-seen? uvar-seen! uvar-loop? uvar-loop! + uvar-seen? uvar-seen! uvar-loop? uvar-loop! uvar-poison? uvar-poison! uvar-in-prefix? uvar-in-prefix! uvar-location uvar-location-set! uvar-move* uvar-move*-set! uvar-conflict* uvar-ref-weight uvar-ref-weight-set! uvar-save-weight uvar-save-weight-set! + uvar-live-count uvar-live-count-set! uvar fv-offset var-spillable-conflict* var-spillable-conflict*-set! @@ -77,10 +78,6 @@ (import (nanopass)) (include "base-lang.ss") - ; convention is a symbol or #f (we're assuming the front end already verified - ; the convention is a valid one for this machine-type - (define convention? (lambda (x) (or (symbol? x) (eq? #f x)))) - ; r6rs says a quote subform should be a datum, not must be a datum ; chez scheme allows a quote subform to be any value (define datum? (lambda (x) #t)) @@ -161,6 +158,7 @@ (loop #b00001000000) (in-prefix #b00010000000) (local-save #b00100000000) + (poison #b01000000000) ) (define-record-type (uvar $make-uvar uvar?) @@ -178,13 +176,14 @@ (mutable iii) ; inspector info index (mutable ref-weight) ; must be a fixnum! (mutable save-weight) ; must be a fixnum! + (mutable live-count) ; must be a fixnum! ) (nongenerative) (sealed #t) (protocol (lambda (pargs->new) (lambda (name source type conflict* flags) - ((pargs->new) name source type conflict* flags #f #f '() #f #f 0 0))))) + ((pargs->new) name source type conflict* flags #f #f '() #f #f 0 0 0))))) (define prelex->uvar (lambda (x) ($make-uvar (prelex-name x) (prelex-source x) 'ptr '() @@ -413,7 +412,7 @@ (Program (prog) (+ (labels ([l* le*] ...) l) => (labels ([l* le*] ...) (l)))) (CaseLambdaExpr (le) - (+ (fcallable info) => (fcallable info))) + (+ (fcallable info l) => (fcallable info l))) (Lvalue (lvalue) (+ x (mref e1 e2 imm))) @@ -485,10 +484,14 @@ (declare-primitive asmlibcall! effect #f) (declare-primitive c-call effect #f) (declare-primitive c-simple-call effect #f) + (declare-primitive c-simple-return effect #f) + (declare-primitive deactivate-thread effect #f) ; threaded version only (declare-primitive fl* effect #f) (declare-primitive fl+ effect #f) (declare-primitive fl- effect #f) (declare-primitive fl/ effect #f) + (declare-primitive fldl effect #f) ; x86 + (declare-primitive flds effect #f) ; x86 (declare-primitive flsqrt effect #f) ; not implemented for some ppc32 (so we don't use it) (declare-primitive flt effect #f) (declare-primitive inc-cc-counter effect #f) @@ -515,7 +518,10 @@ (declare-primitive store-single effect #f) (declare-primitive store-single->double effect #f) (declare-primitive store-with-update effect #f) ; ppc + (declare-primitive unactivate-thread effect #f) ; threaded version only (declare-primitive vpush-multiple effect #f) ; arm + (declare-primitive vpop-multiple effect #f) ; arm + (declare-primitive cas effect #f) (declare-primitive < pred #t) (declare-primitive <= pred #t) @@ -541,8 +547,10 @@ (declare-primitive -/eq value #f) (declare-primitive asmlibcall value #f) (declare-primitive fstpl value #f) ; x86 only + (declare-primitive fstps value #f) ; x86 only (declare-primitive get-double value #t) ; x86_64 (declare-primitive get-tc value #f) ; threaded version only + (declare-primitive activate-thread value #f) ; threaded version only (declare-primitive lea1 value #t) (declare-primitive lea2 value #t) (declare-primitive load value #t) @@ -829,6 +837,7 @@ (return-point info rpl mrvl (cnfv* ...)) (rp-header mrvl fs lpm) (remove-frame info) + (restore-local-saves info) (shift-arg reg imm info) (set! lvalue rhs) (inline info effect-prim t* ...) => (inline info effect-prim t* ...) @@ -845,6 +854,7 @@ (jump t (var* ...)) (joto l (nfv* ...)) (asm-return reg* ...) + (asm-c-return info reg* ...) (if p0 tl1 tl2) (seq e0 tl1) (goto l))) @@ -949,6 +959,7 @@ (return-point info rpl mrvl (cnfv* ...)) (rp-header mrvl fs lpm) (remove-frame live-info info) + (restore-local-saves live-info info) (shift-arg live-info reg imm info) (set! live-info lvalue rhs) (inline live-info info effect-prim t* ...) @@ -956,7 +967,8 @@ (Tail (tl) (goto l) (jump live-info t (var* ...)) - (asm-return reg* ...))) + (asm-return reg* ...) + (asm-c-return info reg* ...))) (define-language L15b (extends L15a) (terminals @@ -967,15 +979,18 @@ (label (l)))) (Effect (e) (- (remove-frame live-info info) + (restore-local-saves live-info info) (return-point info rpl mrvl (cnfv* ...)) (shift-arg live-info reg imm info) (check-live live-info reg* ...)) (+ (fp-offset live-info imm))) (Tail (tl) (- (jump live-info t (var* ...)) - (asm-return reg* ...)) + (asm-return reg* ...) + (asm-c-return info reg* ...)) (+ (jump live-info t) - (asm-return)))) + (asm-return) + (asm-c-return info)))) (define ur? (lambda (x) diff -Nru chezscheme-9.5+dfsg/s/pdhtml.ss chezscheme-9.5.4+dfsg/s/pdhtml.ss --- chezscheme-9.5+dfsg/s/pdhtml.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/pdhtml.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"pdhtml.ss" ;;; pdhtml.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -56,18 +55,171 @@ ;;; source annotation around the transformer output so that the source info for t> ;;; when expression is transferred to the generated if expression. +(begin (let () (include "types.ss") + (module (make-tracker tracker-profile-ct) + (define-record-type tracker + (nongenerative) + (fields profile-ct))) + (define-record-type cc + (nongenerative) + (fields (mutable cookie) (mutable total) (mutable current) (mutable preceding))) + (define-record-type (source-table $make-source-table $source-table?) + (nongenerative) + (sealed #t) + (opaque #t) + (fields ht) + (protocol + (lambda (new) + (lambda () + (define sfd-hash + (lambda (sfd) + (source-file-descriptor-crc sfd))) + (define sfd=? + (lambda (sfd1 sfd2) + (and (fx= (source-file-descriptor-crc sfd1) (source-file-descriptor-crc sfd2)) + (= (source-file-descriptor-length sfd1) (source-file-descriptor-length sfd2)) + (string=? (source-file-descriptor-name sfd1) (source-file-descriptor-name sfd2))))) + (new (make-hashtable sfd-hash sfd=?)))))) + (define *local-profile-trackers* '()) (define op+ car) (define op- cdr) - (define find-pcode - (foreign-procedure "(cs)find_pcode" () scheme-object)) - (define find-pinfo - (lambda (x who) - (cond - [(procedure? x) ($code-pinfo* ($closure-code x))] - [($code? x) ($code-pinfo* x)] - [else ($oops who "could not find profiling info in ~s" x)]))) + (define count+ (constant-case ptr-bits [(32) +] [(64) fx+])) + (define count- (constant-case ptr-bits [(32) -] [(64) fx-])) + (define count< (constant-case ptr-bits [(32) <] [(64) fx<])) + (define get-counter-list (foreign-procedure "(cs)s_profile_counters" () ptr)) + (define release-counters (foreign-procedure "(cs)s_profile_release_counters" () ptr)) + + (define rblock-count + (lambda (rblock) + (let sum ((op (rblock-op rblock))) + (if (profile-counter? op) + (profile-counter-count op) + ; using #3%fold-left in case the #2% versions are profiled + (#3%fold-left + (lambda (a op) (count- a (sum op))) + (#3%fold-left (lambda (a op) (count+ a (sum op))) 0 (op+ op)) + (op- op)))))) + + (define profile-counts + ; like profile-dump but returns ((count . (src ...)) ...) + (case-lambda + [() (profile-counts (get-counter-list))] + [(counter*) + ; disabiling interrupts so we don't sum part of the counters for a block before + ; an interrupt and the remaining counters after the interrupt, which can lead + ; to inaccurate (and possibly negative) counts. we could disable interrupts just + ; around the body of rblock-count to shorten the windows during which interrupts + ; are disabled, but doing it here incurs less overhead + (with-interrupts-disabled + (fold-left + (lambda (r x) + (fold-left + (lambda (r rblock) + (cons (cons (rblock-count rblock) (rblock-srecs rblock)) r)) + r (cdr x))) + '() counter*))])) + + (define (snapshot who uncleared-count* cleared-count*) + (lambda (tracker) + (define cookie (cons 'vanilla 'wafer)) + ; set current corresponding to each src to a total of its counts + (let ([incr-current + (lambda (count.src*) + (let ([count (car count.src*)]) + (for-each + (lambda (src) + (let ([a ($source-table-cell (tracker-profile-ct tracker) src #f)]) + (when (count< count 0) (errorf who "negative profile count ~s for ~s" count src)) + (let ([cc (cdr a)]) + (if cc + (if (eq? (cc-cookie cc) cookie) + (cc-current-set! cc (count+ (cc-current cc) count)) + (begin + (cc-cookie-set! cc cookie) + (cc-current-set! cc count))) + (set-cdr! a (make-cc cookie 0 count 0)))))) + (cdr count.src*))))]) + (for-each incr-current uncleared-count*) + (for-each incr-current cleared-count*)) + ; then increment total of each affected cc by the delta between current and preceding + (source-table-for-each + (lambda (src cc) + (when (eq? (cc-cookie cc) cookie) + (let ([current (cc-current cc)]) + (let ([delta (count- current (cc-preceding cc))]) + (unless (eqv? delta 0) + (when (count< delta 0) (errorf who "total profile count for ~s dropped from ~s to ~s" src (cc-preceding cc) current)) + (cc-total-set! cc (count+ (cc-total cc) delta)) + (cc-preceding-set! cc current)))))) + (tracker-profile-ct tracker)) + ; then reduce preceding by cleared counts + (for-each + (lambda (count.src*) + (let ([count (car count.src*)]) + (for-each + (lambda (src) + (let ([a ($source-table-cell (tracker-profile-ct tracker) src #f)]) + (let ([cc (cdr a)]) + (if cc + (cc-preceding-set! cc (count- (cc-preceding cc) count)) + (set-cdr! a (make-cc cookie 0 0 0)))))) + (cdr count.src*)))) + cleared-count*))) + + (define adjust-trackers! + (lambda (who uncleared-counter* cleared-counter*) + (let ([local-tracker* *local-profile-trackers*]) + (unless (null? local-tracker*) + (let ([uncleared-count* (profile-counts uncleared-counter*)] + [cleared-count* (profile-counts cleared-counter*)]) + (let ([snapshot (snapshot who uncleared-count* cleared-count*)]) + (for-each snapshot local-tracker*))))))) + + (define $source-table-contains? + (lambda (st src) + (let ([src-ht (hashtable-ref (source-table-ht st) (source-sfd src) #f)]) + (and src-ht (hashtable-contains? src-ht src))))) + + (define $source-table-ref + (lambda (st src default) + (let ([src-ht (hashtable-ref (source-table-ht st) (source-sfd src) #f)]) + (if src-ht (hashtable-ref src-ht src default) default)))) + + (define $source-table-cell + (lambda (st src default) + (define same-sfd-src-hash + (lambda (src) + (source-bfp src))) + (define same-sfd-src=? + (lambda (src1 src2) + (and (= (source-bfp src1) (source-bfp src2)) + (= (source-efp src1) (source-efp src2))))) + (let ([src-ht (let ([a (hashtable-cell (source-table-ht st) (source-sfd src) #f)]) + (or (cdr a) + (let ([src-ht (make-hashtable same-sfd-src-hash same-sfd-src=?)]) + (set-cdr! a src-ht) + src-ht)))]) + (hashtable-cell src-ht src default)))) + + (define $source-table-delete! + (lambda (st src) + (let ([ht (source-table-ht st)] [sfd (source-sfd src)]) + (let ([src-ht (hashtable-ref ht sfd #f)]) + (when src-ht + (hashtable-delete! src-ht src) + (when (fx= (hashtable-size src-ht) 0) + (hashtable-delete! ht sfd))))))) + + (define source-table-for-each + (lambda (p st) + (vector-for-each + (lambda (src-ht) + (let-values ([(vsrc vcount) (hashtable-entries src-ht)]) + (vector-for-each p vsrc vcount))) + (hashtable-values (source-table-ht st))))) + (set-who! profile-clear (lambda () (define clear-links @@ -77,33 +229,209 @@ (begin (for-each clear-links (op+ op)) (for-each clear-links (op- op)))))) - (for-each - (lambda (x) - (for-each (lambda (node) (clear-links (rblock-op node))) - (find-pinfo x who))) - (find-pcode)))) + (let ([counter* (get-counter-list)]) + (adjust-trackers! who '() counter*) + (for-each + (lambda (x) + (for-each + (lambda (node) (clear-links (rblock-op node))) + (cdr x))) + counter*)))) + + (set-who! profile-release-counters + (lambda () + ; release-counters prunes out (and hands back) the released counters + (let* ([dropped-counter* (release-counters)] + [kept-counter* (get-counter-list)]) + (adjust-trackers! who kept-counter* dropped-counter*)))) + (set-who! profile-dump + ; like profile-counts but returns ((src . count) ...), which requires more allocation + ; profile-dump could use profile-counts but that would require even more allocation (lambda () - (define rblock-count - (lambda (rblock) - (let sum ((op (rblock-op rblock))) - ; using #3%apply and #3%map in case the #2% versions are profiled, - ; to avoid possible negative counts - (if (profile-counter? op) - (profile-counter-count op) - (- (#3%apply + (#3%map sum (op+ op))) - (#3%apply + (#3%map sum (op- op)))))))) - (fold-left - (lambda (r code) - (fold-left - (lambda (r rblock) - (fold-left + ; could disable interrupts just around each call to rblock-count, but doing it here incurs less overhead + (with-interrupts-disabled + (fold-left + (lambda (r x) + (fold-left + (lambda (r rblock) (let ([count (rblock-count rblock)]) - (lambda (r inst) - (cons (cons inst count) r))) - r (rblock-srecs rblock))) - r (find-pinfo code who))) - '() (find-pcode))))) + (fold-left + (lambda (r src) + (cons (cons src count) r)) + r (rblock-srecs rblock)))) + r (cdr x))) + '() (get-counter-list))))) + + (set-who! make-source-table + (lambda () + ($make-source-table))) + + (set-who! source-table? + (lambda (x) + ($source-table? x))) + + (set-who! source-table-size + (lambda (st) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (let ([vsrc-ht (hashtable-values (source-table-ht st))]) + (let ([n (vector-length vsrc-ht)]) + (do ([i 0 (fx+ i 1)] [size 0 (fx+ size (hashtable-size (vector-ref vsrc-ht i)))]) + ((fx= i n) size)))))) + + (set-who! source-table-contains? + (lambda (st src) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (unless (source? src) ($oops who "~s is not a source object" src)) + ($source-table-contains? st src))) + + (set-who! source-table-ref + (lambda (st src default) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (unless (source? src) ($oops who "~s is not a source object" src)) + ($source-table-ref st src default))) + + (set-who! source-table-set! + (lambda (st src val) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (unless (source? src) ($oops who "~s is not a source object" src)) + (set-cdr! ($source-table-cell st src #f) val))) + + (set-who! source-table-delete! + (lambda (st src) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (unless (source? src) ($oops who "~s is not a source object" src)) + ($source-table-delete! st src))) + + (set-who! source-table-cell + (lambda (st src default) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (unless (source? src) ($oops who "~s is not a source object" src)) + ($source-table-cell st src default))) + + (set-who! source-table-dump + (lambda (st) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (let* ([vsrc-ht (hashtable-values (source-table-ht st))] + [n (vector-length vsrc-ht)]) + (do ([i 0 (fx+ i 1)] + [dumpit* '() + (let-values ([(vsrc vcount) (hashtable-entries (vector-ref vsrc-ht i))]) + (let ([n (vector-length vsrc)]) + (do ([i 0 (fx+ i 1)] + [dumpit* dumpit* + (cons (cons (vector-ref vsrc i) (vector-ref vcount i)) dumpit*)]) + ((fx= i n) dumpit*))))]) + ((fx= i n) dumpit*))))) + + (set-who! put-source-table + (lambda (op st) + (unless (and (output-port? op) (textual-port? op)) ($oops who "~s is not a textual output port" op)) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (fprintf op "(source-table") + (let-values ([(vsfd vsrc-ht) (hashtable-entries (source-table-ht st))]) + (vector-for-each + (lambda (sfd src-ht) + (let-values ([(vsrc vval) (hashtable-entries src-ht)]) + (let ([n (vector-length vsrc)]) + (unless (fx= n 0) + (fprintf op "\n (file ~s ~s" + (source-file-descriptor-name sfd) + (source-file-descriptor-checksum sfd)) + (let ([v (vector-sort (lambda (x1 x2) (< (vector-ref x1 0) (vector-ref x2 0))) + (vector-map (lambda (src val) (vector (source-bfp src) (source-efp src) val)) vsrc vval))]) + (let loop ([i 0] [last-bfp 0]) + (unless (fx= i n) + (let ([x (vector-ref v i)]) + (let ([bfp (vector-ref x 0)] [efp (vector-ref x 1)] [val (vector-ref x 2)]) + (let ([offset (- bfp last-bfp)] [len (- efp bfp)]) + (fprintf op " (~s ~s ~s)" offset len val)) + (loop (fx+ i 1) bfp)))))) + (fprintf op ")"))))) + vsfd vsrc-ht)) + (fprintf op ")\n"))) + + (set-who! get-source-table! + (rec get-source-table! + (case-lambda + [(ip st) (get-source-table! ip st #f)] + [(ip st combine) + (define (nnint? x) (and (integer? x) (exact? x) (nonnegative? x))) + (define (token-oops what bfp) + (if bfp + ($oops who "expected ~a at file position ~s of ~s" what bfp ip) + ($oops who "malformed source table reading from ~a" ip))) + (define (next-token expected-type expected-value? what) + (let-values ([(type val bfp efp) (read-token ip)]) + (unless (and (eq? type expected-type) (expected-value? val)) (token-oops what bfp)) + val)) + (unless (and (input-port? ip) (textual-port? ip)) ($oops who "~s is not a textual input port" ip)) + (unless ($source-table? st) ($oops who "~s is not a source table" st)) + (unless (or (not combine) (procedure? combine)) ($oops who "~s is not a procedure" combine)) + (next-token 'lparen not "open parenthesis") + (next-token 'atomic (lambda (x) (eq? x 'source-table)) "identifier 'source-table'") + (let file-loop () + (let-values ([(type val bfp efp) (read-token ip)]) + (unless (eq? type 'rparen) + (unless (eq? type 'lparen) (token-oops "open parenthesis" bfp)) + (next-token 'atomic (lambda (x) (eq? x 'file)) "identifier 'file'") + (let* ([path (next-token 'atomic string? "string")] + [checksum (next-token 'atomic nnint? "checksum")]) + (let ([sfd (#%source-file-descriptor path checksum)]) + (let entry-loop ([last-bfp 0]) + (let-values ([(type val bfp efp) (read-token ip)]) + (unless (eq? type 'rparen) + (unless (eq? type 'lparen) (token-oops "open parenthesis" bfp)) + (let* ([bfp (+ last-bfp (next-token 'atomic nnint? "file position"))] + [efp (+ bfp (next-token 'atomic nnint? "file position"))] + [val (get-datum ip)]) + (next-token 'rparen not "close parenthesis") + (let ([a ($source-table-cell st (make-source-object sfd bfp efp) #f)]) + (set-cdr! a + (if (and (cdr a) combine) + (combine (cdr a) val) + val))) + (entry-loop bfp))))))) + (file-loop))))]))) + + (set-who! with-profile-tracker + (rec with-profile-tracker + (case-lambda + [(thunk) (with-profile-tracker #f thunk)] + [(include-existing-counts? thunk) + (define extract-covered-entries + (lambda (profile-ct) + (let ([covered-ct ($make-source-table)]) + (source-table-for-each + (lambda (src cc) + (let ([count (cc-total cc)]) + (unless (eqv? count 0) + ($source-table-cell covered-ct src count)))) + profile-ct) + covered-ct))) + (unless (procedure? thunk) ($oops who "~s is not a procedure" thunk)) + (let* ([profile-ct ($make-source-table)] + [tracker (make-tracker profile-ct)]) + (unless include-existing-counts? + ; set preceding corresponding to each src to a total of its dumpit counts + ; set total to zero, since we don't want to count anything from before + (for-each + (lambda (count.src*) + (let ([count (car count.src*)]) + (for-each + (lambda (src) + (let ([a ($source-table-cell profile-ct src #f)]) + (let ([cc (cdr a)]) + (if cc + (cc-preceding-set! cc (count+ (cc-preceding cc) count)) + (set-cdr! a (make-cc #f 0 0 count)))))) + (cdr count.src*)))) + (profile-counts))) + ; register for possible adjustment by profile-clear and profile-release-counters + (let-values ([v* (fluid-let ([*local-profile-trackers* (cons tracker *local-profile-trackers*)]) (thunk))]) + ; increment the recorded counts by the now current counts. + ((snapshot who (profile-counts) '()) tracker) + (apply values (extract-covered-entries profile-ct) v*)))])))) (let () (include "types.ss") @@ -204,7 +532,7 @@ (let ([entry* (sort (lambda (x y) (or (> (entrydata-bfp x) (entrydata-bfp y)) (and (= (entrydata-bfp x) (entrydata-bfp y)) - (> (entrydata-efp x) (entrydata-efp y))))) + (< (entrydata-efp x) (entrydata-efp y))))) (filedata-entry* fdata))]) #;(assert (not (null? entry*))) (let loop ([entry (car entry*)] [entry* (cdr entry*)] [new-entry* '()]) @@ -371,6 +699,10 @@ (with-tc-mutex (populate! x)) (f))))) (close-port ip))) + (for-each + (lambda (ifn) + (unless (string? ifn) ($oops who "~s is not a string" ifn))) + ifn*) (for-each load-file ifn*))) (set! $profile-show-database (lambda () @@ -1203,3 +1535,4 @@ (unless (or (eq? color #f) (string? color)) ($oops who "~s is not a string or #f" color)) color))) ) +) diff -Nru chezscheme-9.5+dfsg/s/ppc32.ss chezscheme-9.5.4+dfsg/s/ppc32.ss --- chezscheme-9.5+dfsg/s/ppc32.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/ppc32.ss 2020-08-31 02:35:12.000000000 +0000 @@ -57,7 +57,7 @@ [%xp %r20 #t 20] [%ts %r14 #t 14] [%td %r15 #t 15] - [%ac1 %r12 #f 12] + [%ac1 %r12 %deact #f 12] [%ret %r17 #t 17] [%cp %r24 #t 24] [%yp %r27 #t 27] @@ -668,6 +668,30 @@ `(set! ,(make-live-info) ,u (asm ,null-info ,asm-kill)) `(set! ,(make-live-info) ,z (asm ,info ,asm-get-tc ,u))))]) + ;; like get-tc + (define-instruction value (activate-thread) + [(op (z ur)) + (safe-assert (eq? z %Cretval)) + (let ([u (make-tmp 'u)]) + (seq + `(set! ,(make-live-info) ,u (asm ,null-info ,asm-kill)) + `(set! ,(make-live-info) ,z (asm ,info ,asm-activate-thread ,u))))]) + + (define-instruction effect (deactivate-thread) + [(op) + (let ([u (make-tmp 'u)]) + (seq + `(set! ,(make-live-info) ,u (asm ,null-info ,asm-kill)) + `(asm ,info ,asm-deactivate-thread ,u)))]) + + (define-instruction effect (unactivate-thread) + [(op (z ur)) + (safe-assert (eq? z %Carg1)) + (let ([u (make-tmp 'u)]) + (seq + `(set! ,(make-live-info) ,u (asm ,null-info ,asm-kill)) + `(asm ,info ,asm-unactivate-thread ,u)))]) + (define-instruction value (asmlibcall) [(op (z ur)) (let ([u (make-tmp 'u)]) @@ -762,7 +786,15 @@ (let ([u (make-tmp 'u)]) (seq `(set! ,(make-live-info) ,u (asm ,null-info ,asm-kill)) - `(asm ,null-info ,(asm-lock+/- op) ,base ,index ,u)))))])) + `(asm ,null-info ,(asm-lock+/- op) ,base ,index ,u)))))]) + (define-instruction effect (cas) + [(op (x ur) (y ur) (w shifted-integer16 integer16) (old ur) (new ur)) + (lea->reg x y w + (lambda (base index) + (let ([u (make-tmp 'u)]) + (seq + `(set! ,(make-live-info) ,u (asm ,null-info ,asm-kill)) + `(asm ,info ,asm-cas ,base ,index ,old ,new ,u)))))])) (define-instruction effect (pause) [(op) `(asm ,info ,asm-isync)]) @@ -807,10 +839,10 @@ asm-direct-jump asm-return-address asm-jump asm-conditional-jump asm-data-label asm-rp-header asm-indirect-call asm-condition-code asm-trunc asm-flt - asm-lock asm-lock+/- + asm-lock asm-lock+/- asm-cas asm-fl-load/store asm-flop-2 asm-c-simple-call - asm-save-flrv asm-restore-flrv asm-return asm-size + asm-save-flrv asm-restore-flrv asm-return asm-c-return asm-size asm-enter asm-foreign-call asm-foreign-callable asm-read-counter asm-read-time-base @@ -823,7 +855,7 @@ shift-count? asm-isync ; threaded version specific - asm-get-tc + asm-get-tc asm-activate-thread asm-deactivate-thread asm-unactivate-thread ; machine dependent exports asm-kill) @@ -1753,6 +1785,21 @@ (emit bne -3 (emit cmpi tmp `(imm 0) code*)))))))))) + (define-who asm-cas + ; tmp = lwarx [base,index] + ; cmp tmp, old + ; bc (ne) L 2 + ; stwcx. new [base,index] -- also sets condition code + ; L: + (lambda (code* base index old new tmp) + (assert (not (eq? tmp %real-zero))) + (Trivit (base index old new tmp) + (emit lwarx tmp base index + (emit cmpl tmp old + (emit bne 2 + (emit stwcx. new base index + code*))))))) + (define asm-fl-relop (lambda (info) (lambda (l1 l2 offset x y) @@ -1906,6 +1953,21 @@ (lambda (code* dest tmp . ignore) ; dest is ignored, since it is always Cretval (asm-helper-call code* target #f tmp)))) + (define asm-activate-thread + (let ([target `(ppc32-call 0 (entry ,(lookup-c-entry activate-thread)))]) + (lambda (code* dest tmp . ignore) ; dest is ignored, since it is always Cretval + (asm-helper-call code* target #f tmp)))) + + (define asm-deactivate-thread + (let ([target `(ppc32-call 0 (entry ,(lookup-c-entry deactivate-thread)))]) + (lambda (code* tmp . ignore) + (asm-helper-call code* target #f tmp)))) + + (define asm-unactivate-thread + (let ([target `(ppc32-call 0 (entry ,(lookup-c-entry unactivate-thread)))]) + (lambda (code* tmp . ignore) + (asm-helper-call code* target #f tmp)))) + (define-who asm-return-address (lambda (dest l incr-offset next-addr) (make-rachunk dest l incr-offset next-addr @@ -2077,6 +2139,10 @@ (lambda () (emit blr '()))) + (define asm-c-return + (lambda (info) + (emit blr '()))) + (define asm-lognot (lambda (code* dest src) (Trivit (dest src) @@ -2129,19 +2195,54 @@ (define align (lambda (b x) (let ([k (- b 1)]) (fxlogand (fx+ x k) (fxlognot k))))) (define gp-parameter-regs (lambda () (list %Carg1 %Carg2 %Carg3 %Carg4 %Carg5 %Carg6 %Carg7 %Carg8))) (define fp-parameter-regs (lambda () (list %Cfparg1 %Cfparg2 %Cfparg3 %Cfparg4 %Cfparg5 %Cfparg6 %Cfparg7 %Cfparg8))) + (define fp-result-regs (lambda () (list %Cfpretval))) + (define (indirect-result-that-fits-in-registers? result-type) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) (not ($ftd-compound? ftd))] + [else #f])) + (define (indirect-result-to-pointer? result-type) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) ($ftd-compound? ftd)] + [else #f])) + + (module (push-registers pop-registers) + ;; stack offset must be 8-byte aligned if fp-reg-count is non-zero + (define (move-registers regs fp-reg-count fp-regs load? offset e) + (with-output-language (L13 Effect) + (cond + [(fx> fp-reg-count 0) + ;; Push floating-point first to get correct alignment + (let ([offset (align 8 offset)]) + (move-registers regs (fx- fp-reg-count 1) (cdr fp-regs) load? (fx+ offset 8) + (cond + [load? `(seq ,e (inline ,(make-info-loadfl (car fp-regs)) ,%load-double ,%sp ,%zero (immediate ,offset)))] + [else `(seq (inline ,(make-info-loadfl (car fp-regs)) ,%store-double ,%sp ,%zero (immediate ,offset)) ,e)])))] + [(pair? regs) + (move-registers (cdr regs) 0 '() load? (fx+ offset 4) + (cond + [load? `(seq ,e (set! ,(car regs) ,(%mref ,%sp ,offset)))] + [else `(seq (set! ,(%mref ,%sp ,offset) ,(car regs)) ,e)]))] + [else e]))) + ;; Add "pushes" before e + (define (push-registers regs fp-reg-count fp-regs offset e) + (move-registers regs fp-reg-count fp-regs #f offset e)) + ;; Add "pops" after e + (define (pop-registers regs fp-reg-count fp-regs offset e) + (move-registers regs fp-reg-count fp-regs #t offset e))) + (define-who asm-foreign-call (with-output-language (L13 Effect) (define load-double-stack - (lambda (offset) + (lambda (offset fp-disp) (lambda (x) ; requires var (%seq - (inline ,(make-info-loadfl %flreg1) ,%load-double ,x ,%zero ,(%constant flonum-data-disp)) + (inline ,(make-info-loadfl %flreg1) ,%load-double ,x ,%zero (immediate ,fp-disp)) (inline ,(make-info-loadfl %flreg1) ,%store-double ,%sp ,%zero (immediate ,offset)))))) (define load-single-stack - (lambda (offset) + (lambda (offset fp-disp single?) (lambda (x) ; requires var (%seq - (inline ,(make-info-loadfl %flreg1) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp)) + (inline ,(make-info-loadfl %flreg1) ,(if single? %load-single %load-double->single) ,x ,%zero (immediate ,fp-disp)) (inline ,(make-info-loadfl %flreg1) ,%store-single ,%sp ,%zero (immediate ,offset)))))) (define load-int-stack (lambda (offset) @@ -2153,25 +2254,39 @@ (%seq (set! ,(%mref ,%sp ,(fx+ offset 4)) ,lorhs) (set! ,(%mref ,%sp ,offset) ,hirhs))))) + (define load-indirect-int-stack + (lambda (offset size) + (lambda (rhs) ; requires rhs + (let ([int-type (case size + [(1) 'integer-8] + [(2) 'integer-16] + [else 'integer-32])]) + `(set! ,(%mref ,%sp ,offset) (inline ,(make-info-load int-type #f) ,%load ,rhs ,%zero (immediate ,0))))))) + (define load-indirect-int64-stack + (lambda (offset) + (lambda (x) ; requires var + `(seq + (set! ,(%mref ,%sp ,offset) ,(%mref ,x 0)) + (set! ,(%mref ,%sp ,(fx+ offset 4)) ,(%mref ,x 4)))))) (define load-double-reg - (lambda (fpreg) + (lambda (fpreg fp-disp) (lambda (x) ; requires var - `(inline ,(make-info-loadfl fpreg) ,%load-double ,x ,%zero ,(%constant flonum-data-disp))))) + `(inline ,(make-info-loadfl fpreg) ,%load-double ,x ,%zero (immediate ,fp-disp))))) (define load-soft-double-reg - (lambda (loreg hireg) + (lambda (loreg hireg fp-disp) (lambda (x) (%seq - (set! ,loreg ,(%mref ,x ,(fx+ (constant flonum-data-disp) 4))) - (set! ,hireg ,(%mref ,x ,(constant flonum-data-disp))))))) + (set! ,loreg ,(%mref ,x ,(fx+ fp-disp 4))) + (set! ,hireg ,(%mref ,x ,fp-disp)))))) (define load-single-reg - (lambda (fpreg) + (lambda (fpreg fp-disp single?) (lambda (x) ; requires var - `(inline ,(make-info-loadfl fpreg) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp))))) + `(inline ,(make-info-loadfl fpreg) ,(if single? %load-single %load-double->single) ,x ,%zero (immediate ,fp-disp))))) (define load-soft-single-reg - (lambda (ireg) + (lambda (ireg fp-disp single?) (lambda (x) (%seq - (inline ,(make-info-loadfl %flreg1) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp)) + (inline ,(make-info-loadfl %flreg1) ,(if single? %load-single %load-double->single) ,x ,%zero (immediate ,fp-disp)) (inline ,(make-info-loadfl %flreg1) ,%store-single ,%tc ,%zero (immediate ,(constant tc-ac0-disp))) (set! ,ireg ,(%tc-ref ac0)))))) (define load-int-reg @@ -2184,12 +2299,35 @@ (%seq (set! ,loreg ,lo) (set! ,hireg ,hi))))) + (define load-indirect-int-reg + (lambda (ireg size category) + (lambda (rhs) ; requires var + (let ([int-type (case category + [(unsigned) (case size + [(1) 'unsigned-8] + [(2) 'unsigned-16] + [else 'unsigned-32])] + [else (case size + [(1) 'integer-8] + [(2) 'integer-16] + [else 'integer-32])])]) + `(set! ,ireg (inline ,(make-info-load int-type #f) ,%load ,rhs ,%zero (immediate ,0))))))) + (define load-indirect-int64-reg + (lambda (loreg hireg) + (lambda (x) ; requires var + `(seq + (set! ,hireg ,(%mref ,x 0)) + (set! ,loreg ,(%mref ,x 4)))))) (define do-args (lambda (types) ;; NB: start stack pointer at 8 to put arguments above the linkage area - (let loop ([types types] [locs '()] [live* '()] [int* (gp-parameter-regs)] [flt* (fp-parameter-regs)] [isp 8]) + (let loop ([types types] [locs '()] [live* '()] [int* (gp-parameter-regs)] [flt* (fp-parameter-regs)] [isp 8] + ;; needed when adjusting active: + [fp-live-count 0] + ;; configured for `ftd-fp&` unpacking of floats: + [fp-disp (constant flonum-data-disp)] [single? #f]) (if (null? types) - (values isp locs live*) + (values isp locs live* fp-live-count) (nanopass-case (Ltype Type) (car types) [(fp-double-float) (if (constant software-floating-point) @@ -2197,38 +2335,91 @@ (if (null? int*) (let ([isp (align 8 isp)]) (loop (cdr types) - (cons (load-double-stack isp) locs) - live* '() flt* (fx+ isp 8))) + (cons (load-double-stack isp fp-disp) locs) + live* '() flt* (fx+ isp 8) fp-live-count + (constant flonum-data-disp) #f)) (loop (cdr types) - (cons (load-soft-double-reg (cadr int*) (car int*)) locs) - (cons* (car int*) (cadr int*) live*) (cddr int*) flt* isp))) + (cons (load-soft-double-reg (cadr int*) (car int*) fp-disp) locs) + (cons* (car int*) (cadr int*) live*) (cddr int*) flt* isp fp-live-count + (constant flonum-data-disp) #f))) (if (null? flt*) (let ([isp (align 8 isp)]) (loop (cdr types) - (cons (load-double-stack isp) locs) - live* int* '() (fx+ isp 8))) + (cons (load-double-stack isp fp-disp) locs) + live* int* '() (fx+ isp 8) fp-live-count + (constant flonum-data-disp) #f)) (loop (cdr types) - (cons (load-double-reg (car flt*)) locs) - live* int* (cdr flt*) isp)))] + (cons (load-double-reg (car flt*) fp-disp) locs) + live* int* (cdr flt*) isp (fx+ fp-live-count 1) + (constant flonum-data-disp) #f)))] [(fp-single-float) (if (constant software-floating-point) (if (null? int*) ; NB: ABI says singles are passed as doubles on the stack, but gcc/linux doesn't (loop (cdr types) - (cons (load-single-stack isp) locs) - live* '() flt* (fx+ isp 4)) + (cons (load-single-stack isp fp-disp single?) locs) + live* '() flt* (fx+ isp 4) fp-live-count + (constant flonum-data-disp) #f) (loop (cdr types) - (cons (load-soft-single-reg (car int*)) locs) - (cons (car int*) live*) (cdr int*) flt* isp)) + (cons (load-soft-single-reg (car int*) fp-disp single?) locs) + (cons (car int*) live*) (cdr int*) flt* isp fp-live-count + (constant flonum-data-disp) #f)) (if (null? flt*) ; NB: ABI says singles are passed as doubles on the stack, but gcc/linux doesn't (let ([isp (align 4 isp)]) (loop (cdr types) - (cons (load-single-stack isp) locs) - live* int* '() (fx+ isp 4))) + (cons (load-single-stack isp fp-disp single?) locs) + live* int* '() (fx+ isp 4) fp-live-count + (constant flonum-data-disp) #f)) (loop (cdr types) - (cons (load-single-reg (car flt*)) locs) - live* int* (cdr flt*) isp)))] + (cons (load-single-reg (car flt*) fp-disp single?) locs) + live* int* (cdr flt*) isp (fx+ fp-live-count 1) + (constant flonum-data-disp) #f)))] + [(fp-ftd& ,ftd) + (cond + [($ftd-compound? ftd) + ;; pass as pointer + (let ([pointer-type (with-output-language (Ltype Type) `(fp-integer 32))]) + (loop (cons pointer-type (cdr types)) locs live* int* flt* isp fp-live-count + (constant flonum-data-disp) #f))] + [else + ;; extract content and pass that content + (let ([category ($ftd-atomic-category ftd)]) + (cond + [(eq? category 'float) + ;; piggy-back on unboxed handler + (let ([unpacked-type (with-output-language (Ltype Type) + (case ($ftd-size ftd) + [(4) `(fp-single-float)] + [else `(fp-double-float)]))]) + (loop (cons unpacked-type (cdr types)) locs live* int* flt* isp fp-live-count + ;; no floating displacement within pointer: + 0 + ;; in case of float, load as single-float: + (= ($ftd-size ftd) 4)))] + [(and (memq category '(integer unsigned)) + (fx= 8 ($ftd-size ftd))) + (let ([int* (if (even? (length int*)) int* (cdr int*))]) + (if (null? int*) + (let ([isp (align 8 isp)]) + (loop (cdr types) + (cons (load-indirect-int64-stack isp) locs) + live* '() flt* (fx+ isp 8) fp-live-count + (constant flonum-data-disp) #f)) + (loop (cdr types) + (cons (load-indirect-int64-reg (cadr int*) (car int*)) locs) + (cons* (car int*) (cadr int*) live*) (cddr int*) flt* isp fp-live-count + (constant flonum-data-disp) #f)))] + [else + (if (null? int*) + (loop (cdr types) + (cons (load-indirect-int-stack isp ($ftd-size ftd)) locs) + live* '() flt* (fx+ isp 4) fp-live-count + (constant flonum-data-disp) #f) + (loop (cdr types) + (cons (load-indirect-int-reg (car int*) ($ftd-size ftd) category) locs) + (cons (car int*) live*) (cdr int*) flt* isp fp-live-count + (constant flonum-data-disp) #f))]))])] [else (if (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] @@ -2239,62 +2430,143 @@ (let ([isp (align 8 isp)]) (loop (cdr types) (cons (load-int64-stack isp) locs) - live* '() flt* (fx+ isp 8))) + live* '() flt* (fx+ isp 8) fp-live-count + (constant flonum-data-disp) #f)) (loop (cdr types) (cons (load-int64-reg (cadr int*) (car int*)) locs) - (cons* (car int*) (cadr int*) live*) (cddr int*) flt* isp))) + (cons* (car int*) (cadr int*) live*) (cddr int*) flt* isp fp-live-count + (constant flonum-data-disp) #f))) (if (null? int*) (loop (cdr types) (cons (load-int-stack isp) locs) - live* '() flt* (fx+ isp 4)) + live* '() flt* (fx+ isp 4) fp-live-count + (constant flonum-data-disp) #f) (loop (cdr types) (cons (load-int-reg (car int*)) locs) - (cons (car int*) live*) (cdr int*) flt* isp)))]))))) + (cons (car int*) live*) (cdr int*) flt* isp fp-live-count + (constant flonum-data-disp) #f)))]))))) + (define do-indirect-result-from-registers + (lambda (ftd offset) + (let ([tmp %Carg8]) + (%seq + (set! ,tmp ,(%mref ,%sp ,offset)) + ,(cond + [(and (not (constant software-floating-point)) + (eq? 'float ($ftd-atomic-category ftd))) + `(inline ,(make-info-loadfl %Cfpretval) ,(if (= 4 ($ftd-size ftd)) %store-single %store-double) + ,tmp ,%zero (immediate 0))] + [else + (case ($ftd-size ftd) + [(1) `(inline ,(make-info-load 'integer-8 #f) ,%store ,tmp ,%zero (immediate 0) ,%Cretval)] + [(2) `(inline ,(make-info-load 'integer-16 #f) ,%store ,tmp ,%zero (immediate 0) ,%Cretval)] + [(4) `(inline ,(make-info-load 'integer-32 #f) ,%store ,tmp ,%zero (immediate 0) ,%Cretval)] + [(8) + (%seq + (inline ,(make-info-load 'integer-32 #f) ,%store ,tmp ,%zero (immediate 0) ,%Cretval-high) + (inline ,(make-info-load 'integer-32 #f) ,%store ,tmp ,%zero (immediate 4) ,%Cretval-low))] + [else (sorry! who "unexpected result size")])]))))) + (define (add-deactivate t0 offset live* fp-live-count result-live* result-fp-live-count e) + (let ([save-and-restore + (lambda (regs fp-count fp-regs e) + (cond + [(and (null? regs) (fx= 0 fp-count)) e] + [else + (pop-registers regs fp-count fp-regs offset + (push-registers regs fp-count fp-regs offset + e))]))]) + (%seq + (set! ,%deact ,t0) + ,(save-and-restore (cons %deact live*) fp-live-count (fp-parameter-regs) (%inline deactivate-thread)) + ,e + ,(save-and-restore result-live* result-fp-live-count (fp-result-regs) `(set! ,%Cretval ,(%inline activate-thread)))))) (lambda (info) (safe-assert (reg-callee-save? %tc)) ; no need to save-restore - (let ([arg-type* (info-foreign-arg-type* info)] - [result-type (info-foreign-result-type info)]) - (with-values (do-args arg-type*) - (lambda (frame-size locs live*) + (let* ([arg-type* (info-foreign-arg-type* info)] + [result-type (info-foreign-result-type info)] + [fill-result-here? (indirect-result-that-fits-in-registers? result-type)] + [adjust-active? (if-feature pthreads (memq 'adjust-active (info-foreign-conv* info)) #f)]) + (with-values (do-args (if fill-result-here? (cdr arg-type*) arg-type*)) + (lambda (orig-frame-size locs live* fp-live-count) ;; NB: add 4 to frame size for CR save word - (let ([frame-size (align 16 (fx+ frame-size 4))]) + (let* ([fill-stash-offset orig-frame-size] + [base-frame-size (fx+ orig-frame-size (if fill-result-here? 4 0))] + [deactivate-save-offset (if (and adjust-active? (fx> fp-live-count 0)) + (align 8 base-frame-size) ; for `double` save + base-frame-size)] + [frame-size (align 16 (fx+ 4 ; for CR save + (if adjust-active? + (fx+ deactivate-save-offset + (fx* fp-live-count 8) + (fx* (length live*) 4)) + deactivate-save-offset)))]) (values (lambda () (%inline store-with-update ,%Csp ,%Csp (immediate ,(fx- frame-size)))) - (reverse locs) + (let ([locs (reverse locs)]) + (cond + [fill-result-here? + ;; stash extra argument on the stack to be retrieved after call and filled with the result: + (cons (load-int-stack fill-stash-offset) locs)] + [else locs])) (lambda (t0) - (if (constant software-floating-point) + (define (make-call result-live* result-fp-live-count) + (cond + [adjust-active? + (add-deactivate t0 deactivate-save-offset live* fp-live-count result-live* result-fp-live-count + `(inline ,(make-info-kill*-live* result-live* live*) ,%c-call ,%deact))] + [else `(inline ,(make-info-kill*-live* result-live* live*) ,%c-call ,t0)])) + (if (constant software-floating-point) (let () (define handle-64-bit (lambda () - `(inline ,(make-info-kill*-live* (reg-list %Cretval-high %Cretval-low) live*) ,%c-call ,t0))) + (make-call (reg-list %Cretval-high %Cretval-low) 0))) (define handle-32-bit (lambda () - `(inline ,(make-info-kill*-live* (reg-list %Cretval) live*) ,%c-call ,t0))) + (make-call (reg-list %Cretval) 0))) (define handle-integer-cases (lambda (bits) (case bits [(8 16 32) (handle-32-bit)] [(64) (handle-64-bit)] - [else (sorry! who "unexpected asm-foriegn-procedures fp-integer size ~s" bits)]))) + [else (sorry! who "unexpected asm-foreign-procedures fp-integer size ~s" bits)]))) + (define (handle-ftd&-case ftd) + (cond + [fill-result-here? + (%seq + ,(if (> ($ftd-size ftd) 4) + (handle-64-bit) + (handle-32-bit)) + ,(do-indirect-result-from-registers ftd fill-stash-offset))] + [else (make-call (reg-list) 0)])) (nanopass-case (Ltype Type) result-type [(fp-double-float) (handle-64-bit)] [(fp-single-float) (handle-32-bit)] [(fp-integer ,bits) (handle-integer-cases bits)] [(fp-integer ,bits) (handle-integer-cases bits)] - [else `(inline ,(make-info-kill*-live* (reg-list %Cretval) live*) ,%c-call ,t0)])) + [(fp-ftd& ,ftd) (handle-ftd&-case ftd)] + [else (make-call (reg-list %Cretval) 0)])) (let () (define handle-integer-cases (lambda (bits) (case bits - [(8 16 32) `(inline ,(make-info-kill*-live* (reg-list %Cretval) live*) ,%c-call ,t0)] - [(64) `(inline ,(make-info-kill*-live* (reg-list %Cretval-high %Cretval-low) live*) ,%c-call ,t0)] - [else (sorry! who "unexpected asm-foreign-procedures fp-integer size ~s" bits)]))) + [(8 16 32) (make-call (reg-list %Cretval) 0)] + [(64) (make-call (reg-list %Cretval-high %Cretval-low) 0)] + [else (sorry! who "unexpected asm-foreign-procedures fp-integer size ~s" bits)]))) + (define (handle-ftd&-case ftd) + (cond + [fill-result-here? + (%seq + ,(if (not (eq? 'float ($ftd-atomic-category ftd))) + (handle-integer-cases (* 8 ($ftd-size ftd))) + (make-call (reg-list) 1)) + ,(do-indirect-result-from-registers ftd fill-stash-offset))] + [else `(inline ,(make-info-kill*-live* (reg-list) live*) ,%c-call ,t0)])) (nanopass-case (Ltype Type) result-type - [(fp-double-float) `(inline ,(make-info-kill*-live* (reg-list) live*) ,%c-call ,t0)] - [(fp-single-float) `(inline ,(make-info-kill*-live* (reg-list) live*) ,%c-call ,t0)] + [(fp-double-float) (make-call (reg-list) 1)] + [(fp-single-float) (make-call (reg-list) 1)] [(fp-integer ,bits) (handle-integer-cases bits)] [(fp-unsigned ,bits) (handle-integer-cases bits)] - [else `(inline ,(make-info-kill*-live* (reg-list %Cretval) live*) ,%c-call ,t0)])))) + [(fp-ftd& ,ftd) (handle-ftd&-case ftd)] + [else (make-call (reg-list %Cretval) 0)])))) (nanopass-case (Ltype Type) result-type [(fp-double-float) (lambda (lvalue) @@ -2396,40 +2668,39 @@ +---------------------------+ | | | lr | 1 word - sp+184: | | + sp+X+4: | | +---------------------------+ | | | back chain | 1 word - sp+180: | | - +---------------------------+ + sp+X: | | + +---------------------------+ <- 16-byte aligned +---------------------------+ + +---------------------------+ <- 16-byte aligned | | - | floating-point regs | 0 words - sp+180: | | - +---------------------------+ + | &-return space | 2 words, if needed | | - | integer regs | 18 words - sp+108: | | + +---------------------------+ <- 8-byte aligned + | unactivate mode | 1 word, if needed +---------------------------+ | | - | control register | 1 word - sp+104: | | - +---------------------------+ + | callee-save regs | | | - | local variable space | 24 words: 8 words for gp arg regs, 8 double words for fp arg regs, 0 for padding - sp+8: | (and padding) | +---------------------------+ | | - | parameter list | 0 words - sp+8: | | - +---------------------------+ + | floating-point arg regs | + | | + +---------------------------+ <- 8-byte aligned + | | + | integer argument regs | Also used to stash results during unactivate + | | + sp+8: +---------------------------+ <- 8-byte aligned | | | lr | 1 word (place for get-thread-context to store lr) - sp+4: | | + | | +---------------------------+ | | | back chain | 1 word - sp+0: | [sp+176] | + sp+0: | [sp+X-4] | +---------------------------+ FOR foreign callable (nb: assuming flreg1 & flreg2 are caller-save): @@ -2438,14 +2709,14 @@ save fp arg regs (based on number declared by foreign-callable form) at sp+40 don't bother saving cr save callee-save gp registers at sp+108 (could avoid those we don't use during argument conversion, if we knew what they were) - save lr at sp[180] (actually sp 4, before sp is moved) + save lr at sp[188] (actually sp 4, before sp is moved) if threaded: call get-thread-context else tc <- thread-context endif ... - restore lr from sp[180] + restore lr from sp[188] INVARIANTS stack grows down @@ -2488,9 +2759,22 @@ (%seq (set! ,lolvalue ,(%mref ,%sp ,(fx+ offset 4))) (set! ,hilvalue ,(%mref ,%sp ,offset)))))) + (define load-stack-address + (lambda (offset) + (lambda (lvalue) + `(set! ,lvalue ,(%inline + ,%sp (immediate ,offset)))))) + (define load-stack-address/convert-float + (lambda (offset) + (lambda (lvalue) + (%seq + ;; Overwrite argument on stack with single-precision version + ;; FIXME: is the callee allowed to do this if the argument is passed on the stack? + (inline ,(make-info-loadfl %flreg1) ,%load-double->single ,%sp ,%zero (immediate ,offset)) + (inline ,(make-info-loadfl %flreg1) ,%store-single ,%sp ,%zero (immediate ,offset)) + (set! ,lvalue ,(%inline + ,%sp (immediate ,offset))))))) (define count-reg-args - (lambda (types gp-reg-count fp-reg-count) - (let f ([types types] [iint 0] [iflt 0]) + (lambda (types gp-reg-count fp-reg-count synthesize-first-argument?) + (let f ([types types] [iint (if synthesize-first-argument? -1 0)] [iflt 0]) (if (null? types) (values iint iflt) (cond @@ -2498,11 +2782,14 @@ (nanopass-case (Ltype Type) (car types) [(fp-double-float) #t] [(fp-single-float) #t] + [(fp-ftd& ,ftd) (eq? 'float ($ftd-atomic-category ftd))] [else #f])) (f (cdr types) iint (if (fx< iflt fp-reg-count) (fx+ iflt 1) iflt))] [(or (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] [(fp-unsigned ,bits) (fx= bits 64)] + [(fp-ftd& ,ftd) (and (not ($ftd-compound? ftd)) + (fx= 8 ($ftd-size ftd)))] [else #f]) (and (constant software-floating-point) (nanopass-case (Ltype Type) (car types) @@ -2515,8 +2802,9 @@ ; all of the args are on the stack at this point, though not contiguous since ; we push all of the int reg args with one push instruction and all of the ; float reg args with another (v)push instruction - (lambda (types gp-reg-count fp-reg-count int-reg-offset float-reg-offset stack-arg-offset) - (let loop ([types types] + (lambda (types gp-reg-count fp-reg-count int-reg-offset float-reg-offset stack-arg-offset + synthesize-first-argument? return-space-offset) + (let loop ([types (if synthesize-first-argument? (cdr types) types)] [locs '()] [iint 0] [iflt 0] @@ -2524,7 +2812,11 @@ [float-reg-offset float-reg-offset] [stack-arg-offset stack-arg-offset]) (if (null? types) - (reverse locs) + (let ([locs (reverse locs)]) + (if synthesize-first-argument? + (cons (load-stack-address return-space-offset) + locs) + locs)) (cond [(and (not (constant software-floating-point)) (nanopass-case (Ltype Type) (car types) @@ -2564,7 +2856,49 @@ (loop (cdr types) (cons (load-soft-single-stack stack-arg-offset) locs) iint iflt int-reg-offset float-reg-offset (fx+ stack-arg-offset 4)))] - [(nanopass-case (Ltype Type) (car types) + [(nanopass-case (Ltype Type) (car types) + [(fp-ftd& ,ftd) (not ($ftd-compound? ftd))] + [else #f]) + ;; load pointer to address on the stack + (let ([ftd (nanopass-case (Ltype Type) (car types) + [(fp-ftd& ,ftd) ftd])]) + (case (and (not (constant software-floating-point)) + ($ftd-atomic-category ftd)) + [(float) + (let ([load-address (case ($ftd-size ftd) + [(4) load-stack-address/convert-float] + [else load-stack-address])]) + (if (fx< iflt fp-reg-count) + (loop (cdr types) + (cons (load-address float-reg-offset) locs) + iint (fx+ iflt 1) int-reg-offset (fx+ float-reg-offset 8) stack-arg-offset) + (let ([stack-arg-offset (align 8 stack-arg-offset)]) + (loop (cdr types) + (cons (load-address stack-arg-offset) locs) + iint iflt int-reg-offset float-reg-offset (fx+ stack-arg-offset 8)))))] + [else + (case ($ftd-size ftd) + [(8) + (let ([iint (align 2 iint)]) + (if (fx< iint gp-reg-count) + (let ([int-reg-offset (align 8 int-reg-offset)]) + (loop (cdr types) + (cons (load-stack-address int-reg-offset) locs) + (fx+ iint 2) iflt (fx+ int-reg-offset 8) float-reg-offset stack-arg-offset)) + (let ([stack-arg-offset (align 8 stack-arg-offset)]) + (loop (cdr types) + (cons (load-stack-address stack-arg-offset) locs) + iint iflt int-reg-offset float-reg-offset (fx+ stack-arg-offset 8)))))] + [else + (let ([byte-offset (- 4 ($ftd-size ftd))]) + (if (fx< iint gp-reg-count) + (loop (cdr types) + (cons (load-stack-address (+ int-reg-offset byte-offset)) locs) + (fx+ iint 1) iflt (fx+ int-reg-offset 4) float-reg-offset stack-arg-offset) + (loop (cdr types) + (cons (load-stack-address (+ stack-arg-offset byte-offset)) locs) + iint iflt int-reg-offset float-reg-offset (fx+ stack-arg-offset 4))))])]))] + [(nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] [(fp-unsigned ,bits) (fx= bits 64)] [else #f]) @@ -2616,48 +2950,143 @@ (if (null? regs) inline (%seq ,inline ,(f regs (fx+ offset 4)))))))))) + (define do-result + (lambda (result-type return-space-offset int-reg-offset) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + (case ($ftd-atomic-category ftd) + [(float) + (values + (lambda () + (case ($ftd-size ftd) + [(4) `(inline ,(make-info-loadfl %Cfpretval) ,%load-single ,%sp ,%zero (immediate ,return-space-offset))] + [else `(inline ,(make-info-loadfl %Cfpretval) ,%load-double ,%sp ,%zero (immediate ,return-space-offset))])) + '() + 1)] + [else + (cond + [($ftd-compound? ftd) + ;; return pointer + (values + (lambda () `(set! ,%Cretval ,(%mref ,%sp ,int-reg-offset))) + (list %Cretval) + 0)] + [(fx= 8 ($ftd-size ftd)) + (values (lambda () + (%seq + (set! ,%Cretval-high ,(%mref ,%sp ,return-space-offset)) + (set! ,%Cretval-low ,(%mref ,%sp ,(fx+ return-space-offset 4))))) + (list %Cretval-high %Cretval-low) + 0)] + [else + (values + (lambda () + (case ($ftd-size ftd) + [(1) `(set! ,%Cretval (inline ,(make-info-load 'integer-8 #f) ,%load ,%sp ,%zero (immediate ,return-space-offset)))] + [(2) `(set! ,%Cretval (inline ,(make-info-load 'integer-16 #f) ,%load ,%sp ,%zero (immediate ,return-space-offset)))] + [else `(set! ,%Cretval ,(%mref ,%sp ,return-space-offset))])) + (list %Cretval) + 0)])])] + [(fp-double-float) + (values (lambda (x) + `(inline ,(make-info-loadfl %Cfpretval) ,%load-double ,x ,%zero ,(%constant flonum-data-disp))) + '() + 1)] + [(fp-single-float) + (values (lambda (x) + `(inline ,(make-info-loadfl %Cfpretval) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp))) + '() + 1)] + [(fp-void) + (values (lambda () `(nop)) + '() + 0)] + [else + (cond + [(nanopass-case (Ltype Type) result-type + [(fp-integer ,bits) (fx= bits 64)] + [(fp-unsigned ,bits) (fx= bits 64)] + [else #f]) + (values (lambda (lo-rhs hi-rhs) + (%seq + (set! ,%Cretval-low ,lo-rhs) + (set! ,%Cretval-high ,hi-rhs))) + (list %Cretval-high %Cretval-low) + 0)] + [else + (values (lambda (rhs) + `(set! ,%Cretval ,rhs)) + (list %Cretval) + 0)])]))) + (define (unactivate unactivate-mode-offset result-regs result-num-fp-regs stash-offset) + (let ([e (%seq + (set! ,%Carg1 ,(%mref ,%sp ,unactivate-mode-offset)) + ,(%inline unactivate-thread ,%Carg1))]) + (pop-registers result-regs result-num-fp-regs (fp-result-regs) stash-offset + (push-registers result-regs result-num-fp-regs (fp-result-regs) stash-offset + e)))) (lambda (info) (define callee-save-regs (list %r14 %r15 %r16 %r17 %r18 %r19 %r20 %r21 %r22 %r23 %r24 %r25 %r26 %r27 %r28 %r29 %r30 %r31)) (define isaved (length callee-save-regs)) (let ([arg-type* (info-foreign-arg-type* info)] + [result-type (info-foreign-result-type info)] [gp-reg-count (length (gp-parameter-regs))] [fp-reg-count (length (fp-parameter-regs))]) - (let-values ([(iint iflt) (count-reg-args arg-type* gp-reg-count fp-reg-count)]) + (let-values ([(iint iflt) (count-reg-args arg-type* gp-reg-count fp-reg-count (indirect-result-that-fits-in-registers? result-type))]) (let* ([int-reg-offset 8] ; initial offset for calling conventions - [float-reg-offset (fx+ (fx* gp-reg-count 4) int-reg-offset)] + [float-reg-offset (align 8 (fx+ (fx* gp-reg-count 4) int-reg-offset))] [callee-save-offset (if (constant software-floating-point) float-reg-offset (fx+ (fx* fp-reg-count 8) float-reg-offset))] - [stack-size (align 16 (fx+ (fx* isaved 4) callee-save-offset))] + [synthesize-first-argument? (indirect-result-that-fits-in-registers? result-type)] + [adjust-active? (if-feature pthreads (memq 'adjust-active (info-foreign-conv* info)) #f)] + [unactivate-mode-offset (fx+ (fx* isaved 4) callee-save-offset)] + [return-space-offset (align 8 (fx+ unactivate-mode-offset (if adjust-active? 4 0)))] + [stack-size (align 16 (fx+ return-space-offset (if synthesize-first-argument? 8 0)))] [stack-arg-offset (fx+ stack-size 8)]) - (values - (lambda () - (%seq - ,(%inline save-lr (immediate 4)) - ,(%inline store-with-update ,%Csp ,%Csp (immediate ,(fx- stack-size))) - ,(save-regs (list-head (gp-parameter-regs) iint) int-reg-offset) - ,(save-fp-regs (list-head (fp-parameter-regs) iflt) float-reg-offset) - ; not bothering with callee-save floating point regs right now - ; not bothering with cr, because we don't update nonvolatile fields - ,(save-regs callee-save-regs callee-save-offset) - ,(if-feature pthreads - (%seq - (set! ,%Cretval ,(%inline get-tc)) - (set! ,%tc ,%Cretval)) - `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0)))))) - ; list of procedures that marshal arguments from their C stack locations - ; to the Scheme argument locations - (do-stack arg-type* gp-reg-count fp-reg-count int-reg-offset float-reg-offset stack-arg-offset) - (lambda (fv* Scall->result-type) - (in-context Tail - (%seq - ; restore the lr - (inline ,null-info ,%restore-lr (immediate ,(fx+ stack-size 4))) - ; restore the callee save registers - ,(restore-regs callee-save-regs callee-save-offset) - ; deallocate space for pad & arg reg values - (set! ,%Csp ,(%inline + ,%Csp (immediate ,stack-size))) - ; tail call the C helper that calls the Scheme procedure - (jump (literal ,(make-info-literal #f 'entry Scall->result-type 0)) - (,callee-save-regs ... ,fv* ...)))))))))))))) + (let-values ([(get-result result-regs result-num-fp-regs) (do-result result-type return-space-offset int-reg-offset)]) + (values + (lambda () + (%seq + ,(%inline save-lr (immediate 4)) + ,(%inline store-with-update ,%Csp ,%Csp (immediate ,(fx- stack-size))) + ,(save-regs (list-head (gp-parameter-regs) iint) int-reg-offset) + ,(save-fp-regs (list-head (fp-parameter-regs) iflt) float-reg-offset) + ; not bothering with callee-save floating point regs right now + ; not bothering with cr, because we don't update nonvolatile fields + ,(save-regs callee-save-regs callee-save-offset) + ,(if-feature pthreads + ((lambda (e) + (if adjust-active? + (%seq + (set! ,%Cretval ,(%inline activate-thread)) + (set! ,(%mref ,%sp ,unactivate-mode-offset) ,%Cretval) + ,e) + e)) + (%seq + (set! ,%Cretval ,(%inline get-tc)) + (set! ,%tc ,%Cretval))) + `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0)))))) + ; list of procedures that marshal arguments from their C stack locations + ; to the Scheme argument locations + (do-stack arg-type* gp-reg-count fp-reg-count int-reg-offset float-reg-offset stack-arg-offset + synthesize-first-argument? return-space-offset) + get-result + (lambda () + (in-context Tail + ((lambda (e) + (if adjust-active? + (%seq + ,(unactivate unactivate-mode-offset result-regs result-num-fp-regs int-reg-offset) + ,e) + e)) + (%seq + ; restore the lr + (inline ,null-info ,%restore-lr (immediate ,(fx+ stack-size 4))) + ; restore the callee save registers + ,(restore-regs callee-save-regs callee-save-offset) + ; deallocate space for pad & arg reg values + (set! ,%Csp ,(%inline + ,%Csp (immediate ,stack-size))) + ; done + (asm-c-return ,null-info ,callee-save-regs ... ,result-regs ...))))))))))))))) ) diff -Nru chezscheme-9.5+dfsg/s/pretty.ss chezscheme-9.5.4+dfsg/s/pretty.ss --- chezscheme-9.5+dfsg/s/pretty.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/pretty.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"pretty.ss" ;;; pretty.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -24,6 +23,7 @@ ;;;; EXPORTED VARIABLES ;;; pretty tries to fit things within line length +(begin (define pretty-line-length ($make-thread-parameter 75 @@ -797,3 +797,4 @@ (wr (prty-obj x) p) (write-char #\> p))) ) +) diff -Nru chezscheme-9.5+dfsg/s/primdata.ss chezscheme-9.5.4+dfsg/s/primdata.ss --- chezscheme-9.5+dfsg/s/primdata.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/primdata.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,12 +1,12 @@ ;;; primdata.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. -;;; +;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); ;;; you may not use this file except in compliance with the License. ;;; You may obtain a copy of the License at -;;; +;;; ;;; http://www.apache.org/licenses/LICENSE-2.0 -;;; +;;; ;;; Unless required by applicable law or agreed to in writing, software ;;; distributed under the License is distributed on an "AS IS" BASIS, ;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -55,7 +55,7 @@ ((r6rs: fx*) [sig [(fixnum fixnum) -> (fixnum)]] [flags arith-op partial-folder]) ; restricted to 2 arguments ((r6rs: fx+) [sig [(fixnum fixnum) -> (fixnum)]] [flags arith-op partial-folder]) ; restricted to 2 arguments ((r6rs: fx-) [sig [(fixnum) (fixnum fixnum) -> (fixnum)]] [flags arith-op partial-folder]) ; restricted to 1 or 2 arguments - (fxdiv-and-mod [sig [(fixnum fixnum) -> (fixnum fixnum)]] [flags discard]) + (fxdiv-and-mod [sig [(fixnum fixnum) -> (fixnum fixnum)]] [flags discard cp03]) (fxdiv [sig [(fixnum fixnum) -> (fixnum)]] [flags arith-op cp02]) (fxmod [sig [(fixnum fixnum) -> (fixnum)]] [flags arith-op cp02]) (fxdiv0-and-mod0 [sig [(fixnum fixnum) -> (fixnum fixnum)]] [flags discard]) @@ -112,10 +112,10 @@ (fl- [sig [(flonum flonum ...) -> (flonum)]] [flags arith-op partial-folder]) (fl/ [sig [(flonum flonum ...) -> (flonum)]] [flags arith-op partial-folder]) (flabs [sig [(flonum) -> (flonum)]] [flags arith-op mifoldable discard]) - (fldiv-and-mod [sig [(flonum flonum) -> (flonum flonum)]] [flags discard]) + (fldiv-and-mod [sig [(flonum flonum) -> (flonum flonum)]] [flags mifoldable discard]) (fldiv [sig [(flonum flonum) -> (flonum)]] [flags arith-op mifoldable discard]) (flmod [sig [(flonum flonum) -> (flonum)]] [flags arith-op mifoldable discard]) - (fldiv0-and-mod0 [sig [(flonum flonum) -> (flonum flonum)]] [flags discard]) + (fldiv0-and-mod0 [sig [(flonum flonum) -> (flonum flonum)]] [flags mifoldable discard]) (fldiv0 [sig [(flonum flonum) -> (flonum)]] [flags arith-op mifoldable discard]) (flmod0 [sig [(flonum flonum) -> (flonum)]] [flags arith-op mifoldable discard]) (flnumerator [sig [(flonum) -> (flonum)]] [flags arith-op mifoldable discard]) @@ -216,21 +216,21 @@ (- [sig [(number number ...) -> (number)]] [flags arith-op partial-folder ieee r5rs]) (/ [sig [(number number ...) -> (number)]] [flags arith-op partial-folder ieee r5rs]) (abs [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (div-and-mod [sig [(number number) -> (number number)]] [flags discard]) - (div [sig [(number number) -> (number)]] [flags arith-op mifoldable discard]) - (mod [sig [(number number) -> (number)]] [flags arith-op mifoldable discard]) - (div0-and-mod0 [sig [(number number) -> (number number)]] [flags discard]) - (div0 [sig [(number number) -> (number)]] [flags arith-op mifoldable discard]) - (mod0 [sig [(number number) -> (number)]] [flags arith-op mifoldable discard]) - (gcd [sig [(number ...) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (lcm [sig [(number ...) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (div-and-mod [sig [(real real) -> (real real)]] [flags mifoldable discard]) + (div [sig [(real real) -> (real)]] [flags arith-op mifoldable discard]) + (mod [sig [(real real) -> (real)]] [flags arith-op mifoldable discard]) + (div0-and-mod0 [sig [(real real) -> (real real)]] [flags mifoldable discard]) + (div0 [sig [(real real) -> (real)]] [flags arith-op mifoldable discard]) + (mod0 [sig [(real real) -> (real)]] [flags arith-op mifoldable discard]) + (gcd [sig [(integer ...) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) + (lcm [sig [(integer ...) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) (numerator [sig [(rational) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) (denominator [sig [(rational) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) - (floor [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (ceiling [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (truncate [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (round [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (rationalize [sig [(number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (floor [sig [(real) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) + (ceiling [sig [(real) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) + (truncate [sig [(real) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) + (round [sig [(real) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) + (rationalize [sig [(real real) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) (exp [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) (log [sig [(number) (number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) (sin [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) @@ -238,15 +238,15 @@ (tan [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) (asin [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) (acos [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (atan [sig [(number) (number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (atan [sig [(number) (real real) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) (sqrt [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (exact-integer-sqrt [sig [(integer) -> (integer integer)]] [flags arith-op mifoldable discard]) + (exact-integer-sqrt [sig [(exact-integer) -> (exact-integer exact-integer)]] [flags arith-op mifoldable discard]) (expt [sig [(number number) -> (number)]] [flags pure discard true cp02 ieee r5rs]) ; can take too long to fold - (make-rectangular [sig [(number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (make-polar [sig [(number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (real-part [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (imag-part [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (magnitude [sig [(number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (make-rectangular [sig [(real real) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (make-polar [sig [(real real) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (real-part [sig [(number) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) + (imag-part [sig [(number) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) + (magnitude [sig [(number) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) (angle [sig [(number) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) ((r6rs: number->string) [sig [(number) (number sub-ufixnum) (number sub-ufixnum sub-ufixnum) -> (string)]] [flags alloc ieee r5rs]) ; radix restricted to 2, 4, 8, 16 ((r6rs: string->number) [sig [(string) (string sub-ufixnum) -> (maybe-number)]] [flags discard ieee r5rs]) ; radix restricted to 2, 4, 8, 16 @@ -329,7 +329,7 @@ (vector [sig [(ptr ...) -> (vector)]] [flags unrestricted alloc ieee r5rs cp02]) (vector-length [sig [(vector) -> (length)]] [flags pure true ieee r5rs mifoldable discard]) (vector-ref [sig [(vector sub-index) -> (ptr)]] [flags ieee r5rs mifoldable discard cp02]) - (vector-set! [sig [(vector sub-index ptr) -> (ptr)]] [flags true ieee r5rs]) + (vector-set! [sig [(vector sub-index ptr) -> (void)]] [flags true ieee r5rs]) (vector->list [sig [(vector) -> (list)]] [flags alloc ieee r5rs]) (list->vector [sig [(list) -> (vector)]] [flags alloc ieee r5rs]) (vector-fill! [sig [(vector ptr) -> (void)]] [flags true ieee r5rs]) @@ -364,52 +364,52 @@ (bytevector-s8-set! [sig [(bytevector sub-index s8) -> (void)]] [flags true]) (bytevector->u8-list [sig [(bytevector) -> (list)]] [flags alloc]) (u8-list->bytevector [sig [(sub-list) -> (bytevector)]] [flags alloc]) - (bytevector-uint-ref [sig [(bytevector sub-index symbol sub-length) -> (uint)]] [flags true mifoldable discard]) - (bytevector-sint-ref [sig [(bytevector sub-index symbol sub-length) -> (sint)]] [flags true mifoldable discard]) - (bytevector-uint-set! [sig [(bytevector sub-index sub-uint symbol sub-length) -> (void)]] [flags true]) - (bytevector-sint-set! [sig [(bytevector sub-index sub-uint symbol sub-length) -> (void)]] [flags true]) - (bytevector->uint-list [sig [(bytevector symbol sub-index) -> (list)]] [flags alloc]) - (bytevector->sint-list [sig [(bytevector symbol sub-index) -> (list)]] [flags alloc]) - (uint-list->bytevector [sig [(sub-list symbol sub-index) -> (bytevector)]] [flags alloc]) - (sint-list->bytevector [sig [(sub-list symbol sub-index) -> (bytevector)]] [flags alloc]) - (bytevector-u16-ref [sig [(bytevector sub-index symbol) -> (u16)]] [flags true mifoldable discard]) - (bytevector-s16-ref [sig [(bytevector sub-index symbol) -> (s16)]] [flags true mifoldable discard]) + (bytevector-uint-ref [sig [(bytevector sub-index endianness sub-length) -> (uint)]] [flags true mifoldable discard]) + (bytevector-sint-ref [sig [(bytevector sub-index endianness sub-length) -> (sint)]] [flags true mifoldable discard]) + (bytevector-uint-set! [sig [(bytevector sub-index sub-uint endianness sub-length) -> (void)]] [flags true]) + (bytevector-sint-set! [sig [(bytevector sub-index sub-sint endianness sub-length) -> (void)]] [flags true]) + (bytevector->uint-list [sig [(bytevector endianness sub-index) -> (list)]] [flags alloc]) + (bytevector->sint-list [sig [(bytevector endianness sub-index) -> (list)]] [flags alloc]) + (uint-list->bytevector [sig [(sub-list endianness sub-index) -> (bytevector)]] [flags alloc]) + (sint-list->bytevector [sig [(sub-list endianness sub-index) -> (bytevector)]] [flags alloc]) + (bytevector-u16-ref [sig [(bytevector sub-index endianness) -> (u16)]] [flags true mifoldable discard]) + (bytevector-s16-ref [sig [(bytevector sub-index endianness) -> (s16)]] [flags true mifoldable discard]) (bytevector-u16-native-ref [sig [(bytevector sub-index) -> (u16)]] [flags true cp02]) (bytevector-s16-native-ref [sig [(bytevector sub-index) -> (s16)]] [flags true cp02]) - (bytevector-u16-set! [sig [(bytevector sub-index u16 symbol) -> (void)]] [flags true]) - (bytevector-s16-set! [sig [(bytevector sub-index s16 symbol) -> (void)]] [flags true]) - (bytevector-u16-native-set! [sig [(bytevector sub-index symbol) -> (void)]] [flags true]) - (bytevector-s16-native-set! [sig [(bytevector sub-index symbol) -> (void)]] [flags true]) - (bytevector-u32-ref [sig [(bytevector sub-index symbol) -> (u32)]] [flags true mifoldable discard]) - (bytevector-s32-ref [sig [(bytevector sub-index symbol) -> (s32)]] [flags true mifoldable discard]) + (bytevector-u16-set! [sig [(bytevector sub-index u16 endianness) -> (void)]] [flags true]) + (bytevector-s16-set! [sig [(bytevector sub-index s16 endianness) -> (void)]] [flags true]) + (bytevector-u16-native-set! [sig [(bytevector sub-index u16) -> (void)]] [flags true]) + (bytevector-s16-native-set! [sig [(bytevector sub-index s16) -> (void)]] [flags true]) + (bytevector-u32-ref [sig [(bytevector sub-index endianness) -> (u32)]] [flags true mifoldable discard]) + (bytevector-s32-ref [sig [(bytevector sub-index endianness) -> (s32)]] [flags true mifoldable discard]) (bytevector-u32-native-ref [sig [(bytevector sub-index) -> (u32)]] [flags true cp02]) (bytevector-s32-native-ref [sig [(bytevector sub-index) -> (s32)]] [flags true cp02]) - (bytevector-u32-set! [sig [(bytevector sub-index u32 symbol) -> (void)]] [flags true]) - (bytevector-s32-set! [sig [(bytevector sub-index s32 symbol) -> (void)]] [flags true]) + (bytevector-u32-set! [sig [(bytevector sub-index u32 endianness) -> (void)]] [flags true]) + (bytevector-s32-set! [sig [(bytevector sub-index s32 endianness) -> (void)]] [flags true]) (bytevector-u32-native-set! [sig [(bytevector sub-index u32) -> (void)]] [flags true]) (bytevector-s32-native-set! [sig [(bytevector sub-index s32) -> (void)]] [flags true]) - (bytevector-u64-ref [sig [(bytevector sub-index symbol) -> (u64)]] [flags true mifoldable discard]) - (bytevector-s64-ref [sig [(bytevector sub-index symbol) -> (s64)]] [flags true mifoldable discard]) + (bytevector-u64-ref [sig [(bytevector sub-index endianness) -> (u64)]] [flags true mifoldable discard]) + (bytevector-s64-ref [sig [(bytevector sub-index endianness) -> (s64)]] [flags true mifoldable discard]) (bytevector-u64-native-ref [sig [(bytevector sub-index) -> (u64)]] [flags true cp02]) (bytevector-s64-native-ref [sig [(bytevector sub-index) -> (s64)]] [flags true cp02]) - (bytevector-u64-set! [sig [(bytevector sub-index u64 symbol) -> (void)]] [flags true]) - (bytevector-s64-set! [sig [(bytevector sub-index s64 symbol) -> (void)]] [flags true]) + (bytevector-u64-set! [sig [(bytevector sub-index u64 endianness) -> (void)]] [flags true]) + (bytevector-s64-set! [sig [(bytevector sub-index s64 endianness) -> (void)]] [flags true]) (bytevector-u64-native-set! [sig [(bytevector sub-index u64) -> (void)]] [flags true]) (bytevector-s64-native-set! [sig [(bytevector sub-index s64) -> (void)]] [flags true]) - (bytevector-ieee-single-ref [sig [(bytevector sub-index symbol) -> (flonum)]] [flags true mifoldable discard]) + (bytevector-ieee-single-ref [sig [(bytevector sub-index endianness) -> (flonum)]] [flags true mifoldable discard]) (bytevector-ieee-single-native-ref [sig [(bytevector sub-index) -> (flonum)]] [flags true mifoldable discard]) - (bytevector-ieee-double-ref [sig [(bytevector sub-index symbol) -> (flonum)]] [flags true mifoldable discard]) + (bytevector-ieee-double-ref [sig [(bytevector sub-index endianness) -> (flonum)]] [flags true mifoldable discard]) (bytevector-ieee-double-native-ref [sig [(bytevector sub-index) -> (flonum)]] [flags true mifoldable discard]) - (bytevector-ieee-single-set! [sig [(bytevector sub-index real symbol) -> (void)]] [flags true]) + (bytevector-ieee-single-set! [sig [(bytevector sub-index real endianness) -> (void)]] [flags true]) (bytevector-ieee-single-native-set! [sig [(bytevector sub-index real) -> (void)]] [flags true]) - (bytevector-ieee-double-set! [sig [(bytevector sub-index real symbol) -> (void)]] [flags true]) + (bytevector-ieee-double-set! [sig [(bytevector sub-index real endianness) -> (void)]] [flags true]) (bytevector-ieee-double-native-set! [sig [(bytevector sub-index real) -> (void)]] [flags true]) (string->utf8 [sig [(string) -> (bytevector)]] [flags alloc]) - (string->utf16 [sig [(string) (string symbol) -> (bytevector)]] [flags alloc]) - (string->utf32 [sig [(string) (string symbol) -> (bytevector)]] [flags alloc]) + (string->utf16 [sig [(string) (string endianness) -> (bytevector)]] [flags alloc]) + (string->utf32 [sig [(string) (string endianness) -> (bytevector)]] [flags alloc]) (utf8->string [sig [(bytevector) -> (string)]] [flags alloc]) - (utf16->string [sig [(bytevector sub-symbol) (bytevector sub-symbol ptr) -> (string)]] [flags alloc]) - (utf32->string [sig [(bytevector sub-symbol) (bytevector sub-symbol ptr) -> (string)]] [flags alloc]) + (utf16->string [sig [(bytevector endianness) (bytevector endianness ptr) -> (string)]] [flags alloc]) + (utf32->string [sig [(bytevector endianness) (bytevector endianness ptr) -> (string)]] [flags alloc]) ) (define-symbol-flags* ([libraries (rnrs) (rnrs control)] [flags keyword]) @@ -521,7 +521,7 @@ (make-eqv-hashtable [sig [() (uint) -> (hashtable)]] [flags alloc]) (make-hashtable [sig [(procedure procedure) (procedure procedure uint) -> (hashtable)]] [flags alloc]) (hashtable? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) - (hashtable-size [sig [(hashtable) -> (length)]] [flags true]) + (hashtable-size [sig [(hashtable) -> (length)]] [flags discard true]) (hashtable-ref [sig [(hashtable ptr ptr) -> (ptr)]] [flags discard]) (hashtable-set! [sig [(hashtable ptr ptr) -> (void)]] [flags true]) (hashtable-delete! [sig [(hashtable ptr) -> (void)]] [flags true]) @@ -529,8 +529,8 @@ (hashtable-update! [sig [(hashtable ptr procedure ptr) -> (void)]] [flags]) (hashtable-copy [sig [(hashtable) (hashtable ptr) -> (hashtable)]] [flags alloc]) (hashtable-clear! [sig [(hashtable) (hashtable sub-uint) -> (void)]] [flags true]) - (hashtable-keys [sig [(hashtable) -> (vector)]] [flags alloc]) - (hashtable-entries [sig [(hashtable) -> (vector vector)]] [flags alloc]) + ((r6rs: hashtable-keys) [sig [(hashtable) -> (vector)]] [flags alloc]) ; no size argument + ((r6rs: hashtable-entries) [sig [(hashtable) -> (vector vector)]] [flags alloc]) ; no size argument (hashtable-equivalence-function [sig [(hashtable) -> (ptr)]] [flags]) (hashtable-hash-function [sig [(hashtable) -> (ptr)]] [flags]) (hashtable-mutable? [sig [(hashtable) -> (boolean)]] [flags mifoldable discard]) @@ -731,9 +731,9 @@ (define-symbol-flags* ([libraries (rnrs r5rs)] [flags primitive proc]) (exact->inexact [sig [(number) -> (inexact-number)]] [flags arith-op mifoldable discard ieee r5rs]) (inexact->exact [sig [(number) -> (exact-number)]] [flags arith-op mifoldable discard ieee r5rs]) - (quotient [sig [(number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (remainder [sig [(number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) - (modulo [sig [(number number) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (quotient [sig [(integer integer) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (remainder [sig [(integer integer) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) + (modulo [sig [(integer integer) -> (number)]] [flags arith-op mifoldable discard ieee r5rs]) (force [sig [(procedure) -> (ptr)]] [flags r5rs]) (null-environment [sig [(sub-fixnum) -> (environment)]] [flags alloc ieee r5rs]) (scheme-report-environment [sig [(sub-fixnum) -> (environment)]] [flags alloc ieee r5rs]) @@ -839,9 +839,9 @@ (define-symbol-flags* ([libraries (chezscheme csv7)] [flags primitive proc]) ; csv7 compatibility ((csv7: record-field-accessible?) [sig [(rtd sub-ptr) -> (boolean)]] [flags pure mifoldable discard cp02]) - ((csv7: record-field-accessor) [sig [(rtd sub-ptr) -> (boolean)]] [flags pure alloc cp02]) + ((csv7: record-field-accessor) [sig [(rtd sub-ptr) -> (procedure)]] [flags pure alloc cp02]) ((csv7: record-field-mutable?) [sig [(rtd sub-ptr) -> (boolean)]] [flags pure mifoldable discard cp02]) - ((csv7: record-field-mutator) [sig [(rtd sub-ptr) -> (boolean)]] [flags pure alloc cp02]) + ((csv7: record-field-mutator) [sig [(rtd sub-ptr) -> (procedure)]] [flags pure alloc cp02]) ((csv7: record-type-descriptor) [sig [(record) -> (rtd)]] [flags pure mifoldable discard true cp02]) ((csv7: record-type-field-decls) [sig [(rtd) -> (list)]] [flags pure mifoldable discard true cp02]) ((csv7: record-type-field-names) [sig [(rtd) -> (list)]] [flags pure mifoldable discard true cp02]) @@ -867,7 +867,7 @@ (date-year [sig [(date) -> (fixnum)]] [flags pure mifoldable discard true]) (date-zone-offset [sig [(date) -> (fixnum)]] [flags pure mifoldable discard true]) (date-zone-name [sig [(date) -> (ptr)]] [flags pure mifoldable discard]) - (date->time-utc [sig [(date) -> (time)]] [flags alloc]) + (date->time-utc [sig [(date) -> (time-utc)]] [flags alloc]) (make-date [sig [(sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-fixnum) -> (date)] [(sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum sub-ufixnum) -> (date)]] [flags alloc]) @@ -888,7 +888,7 @@ (time-nanosecond [sig [(time) -> (uint)]] [flags mifoldable discard true]) (time-second [sig [(time) -> (fixnum)]] [flags mifoldable discard true]) (time-type [sig [(time) -> (symbol)]] [flags mifoldable discard true]) - (time-utc->date [sig [(time) (time sub-fixnum) -> (date)]] [flags alloc]) + (time-utc->date [sig [(time-utc) (time-utc sub-fixnum) -> (date)]] [flags alloc]) ) (define-symbol-flags* ([libraries] [flags primitive proc]) ; constant parameters @@ -917,13 +917,15 @@ (collect-trip-bytes [sig [() -> (ufixnum)] [(ufixnum) -> (void)]] [flags]) (command-line [sig [() -> (list)] [(sub-list) -> (void)]] [flags]) ; not restricted to 1 argument (command-line-arguments [sig [() -> (list)] [(sub-list) -> (void)]] [flags]) - (compile-compressed [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) + (commonization-level [sig [() -> (ufixnum)] [(sub-ufixnum) -> (void)]] [flags]) (compile-file-message [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (compile-interpret-simple [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (compile-imported-libraries [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (compile-library-handler [sig [() -> (procedure)] [(procedure) -> (void)]] [flags]) (compile-profile [sig [() -> (ptr)] [(ptr) -> (void)]] [flags unrestricted]) (compile-program-handler [sig [() -> (procedure)] [(procedure) -> (void)]] [flags]) + (compress-format [sig [() -> (symbol)] [(sub-symbol) -> (void)]] [flags]) + (compress-level [sig [() -> (symbol)] [(sub-symbol) -> (void)]] [flags]) (console-error-port [sig [() -> (textual-output-port)] [(textual-output-port) -> (void)]] [flags]) (console-input-port [sig [() -> (textual-input-port)] [(textual-input-port) -> (void)]] [flags]) (console-output-port [sig [() -> (textual-output-port)] [(textual-output-port) -> (void)]] [flags]) @@ -943,17 +945,23 @@ (custom-port-buffer-size [sig [() -> (ufixnum)] [(sub-fixnum) -> (void)]] [flags]) (debug-level [sig [() -> (ufixnum)] [(sub-ufixnum) -> (void)]] [flags]) (debug-on-exception [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) + (default-library-search-handler [sig [(symbol library-path list-of-string-pairs list-of-string-pairs) -> (maybe-string maybe-string boolean)]] [flags]) + (default-record-equal-procedure [sig [() -> (maybe-procedure)] [(maybe-procedure) -> (void)]] [flags]) + (default-record-hash-procedure [sig [() -> (maybe-procedure)] [(maybe-procedure) -> (void)]] [flags]) (enable-cross-library-optimization [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (enable-object-counts [sig [() -> (boolean)] [(ptr) -> (void)]] [flags]) (eval-syntax-expanders-when [sig [() -> (list)] [(sub-list) -> (void)]] [flags]) (expand-output [sig [() -> (maybe-textual-output-port)] [(maybe-textual-output-port) -> (void)]] [flags]) (expand/optimize-output [sig [() -> (maybe-textual-output-port)] [(maybe-textual-output-port) -> (void)]] [flags]) (exit-handler [sig [() -> (procedure)] [(procedure) -> (void)]] [flags]) + (fasl-compressed [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (file-buffer-size [sig [() -> (ufixnum)] [(sub-fixnum) -> (void)]] [flags]) (generate-allocation-counts [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) + (generate-covin-files [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (generate-inspector-information [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (generate-instruction-counts [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (generate-interrupt-trap [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) + (generate-procedure-source-information [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (generate-profile-forms [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (generate-wpo-files [sig [() -> (boolean)] [(ptr) -> (void)]] [flags]) (gensym-count [sig [() -> (uint)] [(uint) -> (void)]] [flags]) @@ -962,6 +970,7 @@ (import-notify [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) (interaction-environment [sig [() -> (environment)] [(environment) -> (void)]] [flags ieee r5rs]) (internal-defines-as-letrec* [sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) + (invoke-library [sig [(ptr) -> (void)]] [flags true]) (keyboard-interrupt-handler [sig [() -> (procedure)] [(procedure) -> (void)]] [flags]) (library-directories [sig [() -> (list)] [(sub-ptr) -> (void)]] [flags]) (library-exports [sig [(sub-list) -> (list)]] [flags]) @@ -969,6 +978,7 @@ (library-object-filename [sig [(sub-list) -> (maybe-string)]] [flags]) (library-list [sig [() -> (list)]] [flags]) (library-requirements [sig [(sub-list) -> (list)] [(sub-list library-requirements-options) -> (list)]] [flags]) + (library-search-handler [sig [() -> (procedure)] [(procedure) -> (void)]] [flags]) (library-version [sig [(sub-list) -> (list)]] [flags]) (optimize-level [sig [() -> (ufixnum)] [(sub-ufixnum) -> (void)]] [flags]) (pretty-initial-indent [sig [() -> (ufixnum)] [(ufixnum) -> (void)]] [flags]) @@ -1046,6 +1056,7 @@ (fluid-let-syntax [flags]) (foreign-callable [flags]) (foreign-procedure [flags]) + (ftype-guardian [flags]) (ftype-init-lock! [flags]) (ftype-lock! [flags]) (ftype-locked-decr! [flags]) @@ -1137,6 +1148,7 @@ (block-write [sig [(textual-output-port string) (textual-output-port string length) -> (void)]] [flags true]) (box [sig [(ptr) -> (box)]] [flags unrestricted alloc]) (box? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) + (box-cas! [sig [(box ptr ptr) -> (boolean)]] [flags]) (box-immutable [sig [(ptr) -> (box)]] [flags unrestricted alloc]) (break [sig [(ptr ...) -> (ptr ...)]] [flags]) (bwp-object? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) @@ -1147,21 +1159,21 @@ (bytevector-truncate! [sig [(bytevector length) -> (bytevector)]] [flags true]) (bytevector->immutable-bytevector [sig [(bytevector) -> (bytevector)]] [flags alloc]) (bytevector-s24-ref [sig [(bytevector sub-index symbol) -> (s24)]] [flags true mifoldable discard]) - (bytevector-s24-set! [sig [(bytevector sub-index symbol s24) -> (void)]] [flags true]) + (bytevector-s24-set! [sig [(bytevector sub-index s24 symbol) -> (void)]] [flags true]) (bytevector-s40-ref [sig [(bytevector sub-index symbol) -> (s40)]] [flags true mifoldable discard]) - (bytevector-s40-set! [sig [(bytevector sub-index symbol s40) -> (void)]] [flags true]) + (bytevector-s40-set! [sig [(bytevector sub-index s40 symbol) -> (void)]] [flags true]) (bytevector-s48-ref [sig [(bytevector sub-index symbol) -> (s48)]] [flags true mifoldable discard]) - (bytevector-s48-set! [sig [(bytevector sub-index symbol s48) -> (void)]] [flags true]) + (bytevector-s48-set! [sig [(bytevector sub-index s48 symbol) -> (void)]] [flags true]) (bytevector-s56-ref [sig [(bytevector sub-index symbol) -> (s56)]] [flags true mifoldable discard]) - (bytevector-s56-set! [sig [(bytevector sub-index symbol s56) -> (void)]] [flags true]) + (bytevector-s56-set! [sig [(bytevector sub-index s56 symbol) -> (void)]] [flags true]) (bytevector-u24-ref [sig [(bytevector sub-index symbol) -> (u24)]] [flags true mifoldable discard]) - (bytevector-u24-set! [sig [(bytevector sub-index symbol u24) -> (void)]] [flags true]) + (bytevector-u24-set! [sig [(bytevector sub-index u24 symbol) -> (void)]] [flags true]) (bytevector-u40-ref [sig [(bytevector sub-index symbol) -> (u40)]] [flags true mifoldable discard]) - (bytevector-u40-set! [sig [(bytevector sub-index symbol u40) -> (void)]] [flags true]) + (bytevector-u40-set! [sig [(bytevector sub-index u40 symbol) -> (void)]] [flags true]) (bytevector-u48-ref [sig [(bytevector sub-index symbol) -> (u48)]] [flags true mifoldable discard]) - (bytevector-u48-set! [sig [(bytevector sub-index symbol u48) -> (void)]] [flags true]) + (bytevector-u48-set! [sig [(bytevector sub-index u48 symbol) -> (void)]] [flags true]) (bytevector-u56-ref [sig [(bytevector sub-index symbol) -> (u56)]] [flags true mifoldable discard]) - (bytevector-u56-set! [sig [(bytevector sub-index symbol u56) -> (void)]] [flags true]) + (bytevector-u56-set! [sig [(bytevector sub-index u56 symbol) -> (void)]] [flags true]) (bytevector-compress [sig [(ptr) -> (ptr)]] [flags]) (bytevector-uncompress [sig [(ptr) -> (ptr)]] [flags]) (call/1cc [sig [(procedure) -> (ptr ...)]] [flags]) @@ -1193,27 +1205,32 @@ (chmod [sig [(pathname sub-ufixnum) -> (void)]] [flags]) (clear-input-port [sig [() (input-port) -> (void)]] [flags true]) (clear-output-port [sig [() (output-port) -> (void)]] [flags true]) - (collect [sig [() (sub-ufixnum) (sub-ufixnum ptr) -> (void)]] [flags true]) + (collect [sig [() (sub-ufixnum) (sub-ufixnum ptr) (sub-ufixnum ptr ptr) -> (void)]] [flags true]) + (collect-rendezvous [sig [() -> (void)]] [flags]) (collections [sig [() -> (uint)]] [flags unrestricted alloc]) (compile [sig [(sub-ptr) (sub-ptr environment) -> (ptr ...)]] [flags]) (compile-file [sig [(pathname) (pathname pathname) (pathname pathname sub-symbol) -> (void)]] [flags true]) (compile-library [sig [(pathname) (pathname pathname) (pathname pathname sub-symbol) -> (void)]] [flags true]) - (compile-port [sig [(textual-input-port binary-output-port) (textual-input-port binary-output-port maybe-sfd) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port sub-symbol) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port sub-symbol maybe-binary-output-port) -> (void)]] [flags true]) + (compile-port [sig [(textual-input-port binary-output-port) (textual-input-port binary-output-port maybe-sfd) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port maybe-textual-output-port) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port maybe-textual-output-port sub-symbol) (textual-input-port binary-output-port maybe-sfd maybe-binary-output-port maybe-textual-output-port sub-symbol maybe-binary-output-port) -> (void)]] [flags true]) (compile-program [sig [(pathname) (pathname pathname) (pathname pathname sub-symbol) -> (list)]] [flags true]) (compile-script [sig [(pathname) (pathname pathname) (pathname pathname sub-symbol) -> (void)]] [flags true]) + (compile-time-value? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) + (compile-time-value-value [sig [(compile-time-value) -> (ptr)]] [flags pure mifoldable discard]) (compile-to-file [sig [(list pathname) (list pathname maybe-sfd) -> (ptr)]] [flags true]) - (compile-to-port [sig [(list binary-output-port) (list binary-output-port maybe-sfd) (list binary-output-port maybe-sfd maybe-binary-output-port) (list binary-output-port maybe-sfd maybe-binary-output-port sub-symbol) (list binary-output-port maybe-sfd maybe-binary-output-port sub-symbol maybe-binary-output-port) (list binary-output-port maybe-sfd maybe-binary-output-port sub-symbol maybe-binary-output-port maybe-pathname) -> (ptr)]] [flags true]) + (compile-to-port [sig [(list binary-output-port) (list binary-output-port maybe-sfd) (list binary-output-port maybe-sfd maybe-binary-output-port) (list binary-output-port maybe-sfd maybe-binary-output-port maybe-textual-output-port) (list binary-output-port maybe-sfd maybe-binary-output-port maybe-textual-output-port sub-symbol) (list binary-output-port maybe-sfd maybe-binary-output-port maybe-textual-output-port sub-symbol maybe-binary-output-port) -> (ptr)]] [flags true]) (compile-whole-program [sig [(string string) (string string ptr) -> (void)]] [flags]) (compile-whole-library [sig [(string string) -> (void)]] [flags]) (compute-composition [sig [(ptr) -> (list)] [(ptr sub-ufixnum) -> (list)]] [flags alloc]) (compute-size [sig [(ptr) -> (uint)] [(ptr sub-ufixnum) -> (uint)]] [flags alloc]) + (concatenate-object-files [sig [(pathname pathname pathname ...) -> (void)]] [flags true]) (condition-broadcast [feature pthreads] [sig [(condition-object) -> (void)]] [flags true]) (condition-continuation [sig [(continuation-condition) -> (ptr)]] [flags pure mifoldable discard]) + (condition-name [feature pthreads] [sig [(condition-object) -> (maybe-symbol)]] [flags pure]) (condition-signal [feature pthreads] [sig [(condition-object) -> (void)]] [flags true]) - (condition-wait [feature pthreads] [sig [(condition-object mutex) (condition-object mutex timeout) -> (boolean)]] [flags]) + (condition-wait [feature pthreads] [sig [(condition-object mutex) (condition-object mutex maybe-timeout) -> (boolean)]] [flags]) (conjugate [sig [(number) -> (number)]] [flags arith-op mifoldable discard]) (continuation-condition? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) - (copy-environment [sig [(environment) (environment ptr) (environment ptr sub-list) -> (environment)]] [flags alloc]) + (copy-environment [sig [(environment) (environment ptr) (environment ptr list-of-symbols) -> (environment)]] [flags alloc]) (copy-time [sig [(time) -> (time)]] [flags alloc]) (cosh [sig [(number) -> (number)]] [flags arith-op mifoldable discard]) (cost-center? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) @@ -1244,7 +1261,7 @@ (enable-interrupts [sig [() -> (uint)]] [flags true]) (engine-block [sig [() -> (ptr)]] [flags]) (engine-return [sig [(ptr ...) -> (bottom)]] [flags abort-op]) - (enumerate [sig [(list) -> (ufixnum)]] [flags alloc]) + (enumerate [sig [(list) -> (list)]] [flags alloc]) (enum-set? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (environment? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (environment-mutable? [sig [(environment) -> (boolean)]] [flags pure mifoldable discard]) @@ -1267,7 +1284,7 @@ (expand/optimize [sig [(ptr) (ptr environment) -> (ptr)]] [flags]) (expt-mod [sig [(integer integer integer) -> (integer)]] [flags arith-op mifoldable discard]) (fasl-file [sig [(pathname pathname) -> (void)]] [flags true]) - (fasl-read [sig [(binary-input-port) -> (ptr)]] [flags true]) + (fasl-read [sig [(binary-input-port) (binary-input-port sub-symbol) -> (ptr)]] [flags]) (fasl-write [sig [(sub-ptr binary-output-port) -> (void)]] [flags true]) (file-access-time [sig [(pathname) (pathname ptr) -> (time)]] [flags discard]) (file-change-time [sig [(pathname) (pathname ptr) -> (time)]] [flags discard]) @@ -1343,7 +1360,7 @@ (fxvector [sig [(fixnum ...) -> (fxvector)]] [flags alloc cp02]) (fxvector->list [sig [(fxvector) -> (list)]] [flags alloc]) (fxvector-copy [sig [(fxvector) -> (fxvector)]] [flags alloc]) - (fxvector-fill! [sig [(fxvector fixnum) -> (fxvector)]] [flags true]) + (fxvector-fill! [sig [(fxvector fixnum) -> (void)]] [flags true]) (fxvector->immutable-fxvector [sig [(fxvector) -> (fxvector)]] [flags alloc]) (fxvector-length [sig [(fxvector) -> (length)]] [flags pure mifoldable discard true]) (fxvector-ref [sig [(fxvector sub-index) -> (fixnum)]] [flags mifoldable discard cp02]) @@ -1358,16 +1375,21 @@ (get-mode [sig [(pathname) (pathname ptr) -> (fixnum)]] [flags]) (get-output-string [sig [(sub-textual-output-port) -> (string)]] [flags true]) (get-registry [feature windows] [sig [(string) -> (maybe-string)]] [flags discard]) + (get-source-table! [sig [(textual-input-port source-table) (textual-input-port source-table maybe-procedure) -> (void)]] [flags true]) (get-string-some [sig [(textual-input-port) -> (ptr)]] [flags true]) (get-string-some! [sig [(textual-input-port string length length) -> (ptr)]] [flags true]) (getenv [sig [(string) -> (maybe-string)]] [flags discard]) (getprop [sig [(symbol ptr) (symbol ptr ptr) -> (ptr)]] [flags discard]) + (guardian? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (hash-table? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (hashtable-ephemeron? [sig [(hashtable) -> (boolean)]] [flags pure mifoldable discard]) (hash-table-for-each [sig [(old-hash-table procedure) -> (void)]] [flags]) (hash-table-map [sig [(old-hash-table procedure) -> (list)]] [flags true]) (hashtable-cell [sig [(old-hash-table ptr ptr) -> ((ptr . ptr))]] [flags true]) - (hashtable-values [sig [(hashtable) -> (vector)]] [flags alloc]) + (hashtable-cells [sig [(hashtable) -> (vector)] [(hashtable uint) -> (vector)]] [flags alloc]) + (hashtable-entries [sig [(hashtable) -> (vector vector)] [(hashtable uint) -> (vector vector)]] [flags alloc]) ; has size argument + (hashtable-keys [sig [(hashtable) -> (vector)] [(hashtable uint) -> (vector)]] [flags alloc]) ; has size argument + (hashtable-values [sig [(hashtable) -> (vector)] [(hashtable uint) -> (vector)]] [flags alloc]) (hashtable-weak? [sig [(hashtable) -> (boolean)]] [flags pure mifoldable discard]) (iconv-codec [feature iconv] [sig [(sub-string) -> (codec)]] [flags pure true]) (ieee-environment [sig [() -> (environment)]] [flags unrestricted alloc]) @@ -1392,8 +1414,8 @@ (list-head [sig [(sub-ptr sub-index) -> (ptr)]] [flags alloc]) (literal-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard cp03]) (load [sig [(pathname) (pathname procedure) -> (void)]] [flags true ieee r5rs]) + (load-compiled-from-port [sig [(ptr) -> (ptr ...)]] [flags]) (load-library [sig [(pathname) (pathname procedure) -> (void)]] [flags true]) - (profile-load-data [sig [(pathname) -> (void)]] [flags true]) (load-program [sig [(pathname) (pathname procedure) -> (void)]] [flags true]) (load-shared-object [sig [(maybe-pathname) -> (void)]] [flags true]) (locate-source [sig [(sfd uint) (sfd uint ptr) -> ()] [(sfd uint) (sfd uint ptr) -> (string uint uint)]] [flags]) @@ -1413,28 +1435,29 @@ (make-annotation [sig [(ptr source-object ptr) (ptr source-object ptr annotation-options) -> (annotation)]] [flags pure true mifoldable discard]) (make-boot-file [sig [(pathname sub-list pathname ...) -> (void)]] [flags true]) (make-boot-header [sig [(pathname pathname pathname ...) -> (void)]] [flags true]) - (make-compile-time-value [sig [(ptr) (ptr ptr) -> (ptr)]] [flags pure unrestricted alloc]) - (make-condition [feature pthreads] [sig [() -> (condition-object)]] [flags pure unrestricted alloc]) + (make-compile-time-value [sig [(ptr) -> (compile-time-value)]] [flags pure unrestricted alloc]) + (make-condition [feature pthreads] [sig [() (maybe-symbol) -> (condition-object)]] [flags pure unrestricted alloc]) (make-continuation-condition [sig [(ptr) -> (condition)]] [flags pure unrestricted mifoldable discard]) (make-cost-center [sig [() -> (cost-center)]] [flags unrestricted alloc]) + (make-source-table [sig [() -> (source-table)]] [flags unrestricted alloc]) (make-ephemeron-eq-hashtable [sig [() (uint) -> (eq-hashtable)]] [flags alloc]) (make-ephemeron-eqv-hashtable [sig [() (uint) -> (hashtable)]] [flags alloc]) (make-engine [sig [(procedure) -> (engine)]] [flags pure alloc]) (make-format-condition [sig [() -> (condition)]] [flags pure unrestricted mifoldable discard]) (make-fxvector [sig [(length) (length fixnum) -> (fxvector)]] [flags alloc]) - (make-guardian [sig [() -> (procedure)]] [flags alloc cp02]) + (make-guardian [sig [() -> (procedure)]] [flags unrestricted alloc cp02]) (make-hash-table [sig [() (ptr) -> (old-hash-table)]] [flags unrestricted alloc]) (make-input-port [sig [(procedure string) -> (textual-input-port)]] [flags alloc]) (make-input/output-port [sig [(procedure string string) -> (textual-input/output-port)]] [flags alloc]) (make-list [sig [(length) (length ptr) -> (list)]] [flags alloc]) - (make-mutex [feature pthreads] [sig [() -> (mutex)]] [flags unrestricted alloc]) + (make-mutex [feature pthreads] [sig [() (maybe-symbol) -> (mutex)]] [flags unrestricted alloc]) (make-object-finder [sig [(procedure) (procedure ptr) (procedure ptr sub-ufixnum) -> (procedure)]] [flags alloc]) (make-output-port [sig [(procedure string) -> (textual-output-port)]] [flags alloc]) (make-parameter [sig [(ptr) (ptr procedure) -> (procedure)]] [flags true cp02 cp03]) (make-record-type [sig [(sub-ptr sub-list) (maybe-rtd sub-ptr sub-list) -> (rtd)]] [flags pure alloc cp02]) (make-source-condition [sig [(ptr) -> (condition)]] [flags pure unrestricted mifoldable discard]) - (make-source-file-descriptor [sig [(string binary-input-port) (string binary-input-port ptr) (string binary-input-port ptr ptr) -> (sfd)]] [flags true]) - (make-source-object [sig [(sfd uint uint) (sfd uint uint uint uint) -> (source-object)]] [flags pure true mifoldable discard]) + (make-source-file-descriptor [sig [(string binary-input-port) (string binary-input-port ptr) -> (sfd)]] [flags true]) + (make-source-object [sig [(sfd uint uint) (sfd uint uint nzuint nzuint) -> (source-object)]] [flags pure true mifoldable discard]) (make-sstats [sig [(time time exact-integer exact-integer time time exact-integer) -> (sstats)]] [flags alloc]) (make-thread-parameter [feature pthreads] [sig [(ptr) (ptr procedure) -> (ptr)]] [flags true cp02 cp03]) (make-weak-eq-hashtable [sig [() (uint) -> (eq-hashtable)]] [flags alloc]) @@ -1454,11 +1477,12 @@ (mutable-bytevector? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (mutable-vector? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (mutex-acquire [feature pthreads] [sig [(mutex) (mutex ptr) -> (ptr)]] [flags]) ; can return #f if optional block? arg is #f + (mutex-name [feature pthreads] [sig [(mutex) -> (maybe-symbol)]] [flags pure]) (mutex-release [feature pthreads] [sig [(mutex) -> (void)]] [flags true]) (mutex? [feature pthreads] [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (new-cafe [sig [() (procedure) -> (ptr ...)]] [flags]) - (nonnegative? [sig [(number) -> (boolean)]] [flags pure mifoldable discard]) - (nonpositive? [sig [(number) -> (boolean)]] [flags pure mifoldable discard]) + (nonnegative? [sig [(real) -> (boolean)]] [flags pure mifoldable discard]) + (nonpositive? [sig [(real) -> (boolean)]] [flags pure mifoldable discard]) (number->string [sig [(number) (number sub-ufixnum) (number sub-ufixnum sub-ufixnum) -> (string)]] [flags alloc]) ; radix not restricted to 2, 4, 8, 16 (object-counts [sig [() -> (ptr)]] [flags alloc]) (oblist [sig [() -> (list)]] [flags alloc]) @@ -1507,23 +1531,26 @@ (printf [sig [(string sub-ptr ...) -> (void)]] [flags true]) (procedure-arity-mask [sig [(procedure) -> (sint)]] [flags mifoldable discard true]) (process [sig [(string) -> (list)]] [flags]) - (profile-clear-database [sig [() -> (void)]] [flags true]) (profile-clear [sig [() -> (void)]] [flags true]) + (profile-clear-database [sig [() -> (void)]] [flags true]) (profile-dump [sig [() -> (list)]] [flags discard true]) (profile-dump-data [sig [(pathname) (pathname sub-list) -> (void)]] [flags true]) - (profile-dump-list [sig [() (ptr) (ptr sub-list) -> (list)]] [flags discard true]) (profile-dump-html [sig [() (pathname) (pathname sub-list) -> (void)]] [flags true]) + (profile-dump-list [sig [() (ptr) (ptr sub-list) -> (list)]] [flags discard true]) + (profile-load-data [sig [(pathname ...) -> (void)]] [flags true]) + (profile-release-counters [sig [() -> (void)]] [flags true]) (property-list [sig [(symbol) -> (list)]] [flags discard true]) (put-bytevector-some [sig [(binary-output-port bytevector) (binary-output-port bytevector length) (binary-output-port bytevector length length) -> (uint)]] [flags true]) (put-hash-table! [sig [(old-hash-table ptr ptr) -> (void)]] [flags true]) + (put-source-table [sig [(textual-output-port source-table) -> (void)]] [flags true]) (put-registry! [feature windows] [sig [(string string) -> (void)]] [flags true]) (put-string-some [sig [(textual-output-port string) (textual-output-port string length) (textual-output-port string length length) -> (uint)]] [flags true]) (putprop [sig [(symbol ptr ptr) -> (void)]] [flags true]) (putenv [sig [(string string) -> (void)]] [flags true]) - (profile-query-weight [sig [(ptr) -> (maybe-flonum)]] [flags discard true]) + (profile-query-weight [sig [(ptr) -> (maybe-flonum)]] [flags unrestricted discard]) (random [sig [(sub-number) -> (number)]] [flags alloc]) (ratnum? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) - (read-token [sig [() (textual-input-port) (textual-input-port sfd) -> (symbol ptr maybe-uint maybe-uint)]] [flags]) + (read-token [sig [() (textual-input-port) (textual-input-port sfd uint) -> (symbol ptr maybe-uint maybe-uint)]] [flags]) (real-time [sig [() -> (uint)]] [flags unrestricted alloc]) (record? [sig [(ptr) (ptr rtd) -> (boolean)]] [flags pure mifoldable discard cp02]) (record-constructor [sig [(sub-ptr) -> (procedure)]] [flags cp02]) ; accepts rtd or rcd @@ -1548,6 +1575,7 @@ (reset-maximum-memory-bytes! [sig [() -> (void)]] [flags true]) (reverse! [sig [(list) -> (list)]] [flags true]) (revisit [sig [(pathname) -> (void)]] [flags true]) + (revisit-compiled-from-port [sig [(ptr) -> (ptr ...)]] [flags]) (s8-list->bytevector [sig [(sub-list) -> (bytevector)]] [flags alloc]) (sc-expand [sig [(ptr) (ptr environment) (ptr environment ptr) (ptr environment ptr ptr) (ptr environment ptr ptr maybe-string) -> (ptr)]] [flags]) (scheme-environment [sig [() -> (environment)]] [flags unrestricted alloc]) @@ -1591,7 +1619,7 @@ (sort! [sig [(procedure list) -> (list)]] [flags true]) (source-condition? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (source-condition-form [sig [(source-condition) -> (ptr)]] [flags pure mifoldable discard]) - (source-file-descriptor [sig [(sfd uint) -> (sfd)]] [flags alloc]) + (source-file-descriptor [sig [(string uint) -> (sfd)]] [flags alloc]) (source-file-descriptor? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) (source-file-descriptor-checksum [sig [(sfd) -> (ptr)]] [flags pure mifoldable discard true]) (source-file-descriptor-path [sig [(sfd) -> (ptr)]] [flags pure mifoldable discard true]) @@ -1601,6 +1629,14 @@ (source-object-efp [sig [(source-object) -> (uint)]] [flags pure mifoldable discard]) (source-object-line [sig [(source-object) -> (ptr)]] [flags pure mifoldable discard]) (source-object-sfd [sig [(source-object) -> (sfd)]] [flags pure mifoldable discard]) + (source-table? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard]) + (source-table-contains? [sig [(source-table source-object) -> (boolean)]] [flags discard]) + (source-table-cell [sig [(source-table source-object ptr) -> ((ptr . ptr))]] [flags true]) + (source-table-delete! [sig [(source-table source-object) -> (void)]] [flags true]) + (source-table-dump [sig [(source-table) -> (list)]] [flags alloc]) + (source-table-ref [sig [(source-table source-object ptr) -> (ptr)]] [flags discard]) + (source-table-set! [sig [(source-table source-object ptr) -> (void)]] [flags true]) + (source-table-size [sig [(source-table) -> (length)]] [flags discard true]) (sstats-bytes [sig [(sstats) -> (exact-integer)]] [flags mifoldable discard]) (sstats-cpu [sig [(sstats) -> (time)]] [flags mifoldable discard]) (sstats-difference [sig [(sstats sstats) -> (sstats)]] [flags mifoldable discard true]) @@ -1648,7 +1684,7 @@ (symbol-hashtable-update! [sig [(symbol-hashtable symbol procedure ptr) -> (void)]] [flags]) (syntax->annotation [sig [(ptr) -> (ptr)]] [flags pure unrestricted mifoldable discard]) (syntax->list [sig [(ptr) -> (list)]] [flags alloc]) - (syntax->vector [sig [(ptr) -> (list)]] [flags alloc]) + (syntax->vector [sig [(ptr) -> (vector)]] [flags alloc]) (syntax-error [sig [(ptr string ...) -> (bottom)]] [flags abort-op]) (syntax-object->datum [sig [(ptr) -> (ptr)]] [flags pure unrestricted mifoldable discard]) (system [sig [(string) -> (ptr)]] [flags]) @@ -1675,19 +1711,23 @@ (truncate-file [sig [(output-port) (output-port sub-ptr) -> (void)]] [flags]) (truncate-port [sig [(output-port) (output-port sub-ptr) -> (void)]] [flags]) (unbox [sig [(box) -> (ptr)]] [flags mifoldable discard]) - (unget-u8 [sig [(binary-input-port u8) -> (void)]] [flags true]) - (unget-char [sig [(textual-input-port char) -> (void)]] [flags true]) + (unget-u8 [sig [(binary-input-port ptr) -> (void)]] [flags true]) + (unget-char [sig [(textual-input-port ptr) -> (void)]] [flags true]) (unlock-object [sig [(ptr) -> (void)]] [flags unrestricted true]) (unread-char [sig [(char) (char textual-input-port) -> (void)]] [flags true]) + (unregister-guardian [sig [(guardian) -> (list)]] [flags true]) (utf-16-codec [sig [() -> (codec)] [(sub-symbol) -> (codec)]] [flags pure true]) ; has optional eness argument (utf-16le-codec [sig [() -> (codec)]] [flags pure unrestricted true]) (utf-16be-codec [sig [() -> (codec)]] [flags pure unrestricted true]) + (vector-cas! [sig [(vector sub-index ptr ptr) -> (boolean)]] [flags]) (vector-copy [sig [(vector) -> (vector)]] [flags alloc]) (vector->immutable-vector [sig [(vector) -> (vector)]] [flags alloc]) (vector-set-fixnum! [sig [(vector sub-index fixnum) -> (void)]] [flags true]) + (verify-loadability [sig [(sub-symbol sub-ptr ...) -> (void)]] [flags true]) (virtual-register [sig [(sub-index) -> (ptr)]] [flags discard]) (virtual-register-count [sig [() -> (length)]] [flags pure unrestricted true cp02]) (visit [sig [(pathname) -> (void)]] [flags true]) + (visit-compiled-from-port [sig [(ptr) -> (ptr ...)]] [flags]) (void [sig [() -> (void)]] [flags pure unrestricted mifoldable discard true]) (warning [sig [(who string sub-ptr ...) -> (ptr ...)]] [flags]) (warningf [sig [(who string sub-ptr ...) -> (ptr ...)]] [flags]) @@ -1698,6 +1738,7 @@ (with-input-from-string [sig [(string procedure) -> (ptr ...)]] [flags]) (with-output-to-file [sig [(pathname procedure) (pathname procedure sub-ptr) -> (ptr ...)]] [flags]) ; has options argument (with-output-to-string [sig [(procedure) -> (string)]] [flags]) + (with-profile-tracker [sig [(procedure) (ptr procedure) -> (ptr ptr ...)]] [flags]) (with-source-path [sig [(who pathname procedure) -> (ptr ...)]] [flags]) ) @@ -1705,7 +1746,6 @@ ($address-in-heap? [flags]) ($address->object [flags]) ($allocate-thread-parameter [feature pthreads] [flags alloc]) - ($annotation-options [flags]) ($apply [flags]) ($assembly-output [flags]) ($as-time-goes-by [flags]) @@ -1716,10 +1756,12 @@ ($build-install-library/rt-code [flags]) ($build-invoke-program [flags]) ($byte-copy! [flags]) + ($bytevector-compress [flags]) ($bytevector-ref-check? [flags]) ($bytevector-set!-check? [flags]) ($bytevector-set! [flags]) ($bytevector-set-immutable! #;[sig [(bytevector) -> (ptr)]] [flags true]) + ($bytevector-uncompress [flags]) ($capture-fasl-target [flags]) ($c-error [flags]) ($check-heap-errors [flags]) @@ -1746,6 +1788,7 @@ ($compile-host-library [flags]) ($compound-condition-components [flags discard true]) ($compound-condition? [flags pure unrestricted mifoldable discard]) + ($compressed-warning [flags]) ($compute-composition [flags]) ($compute-size [flags]) ($constituent? [flags]) @@ -1761,6 +1804,8 @@ ($continuation-winders [flags]) ($cp0 [flags]) ($cpcheck [flags]) + ($cpcheck-prelex-flags [flags]) + ($cpcommonize [flags]) ($cpletrec [flags]) ($cpvalid [flags]) ($c-stlv! [flags]) @@ -1768,11 +1813,14 @@ ($c-tlv [flags]) ($current-stack-link [flags]) ($current-winders [flags]) + ($dequeue-scheme-signals [flags]) ($distinct-bound-ids? [flags]) ($dofmt [flags]) ($do-wind [flags]) ($dynamic-closure-counts [flags alloc]) ; added for closure instrumentation ($enum-set-members [flags]) + ($eol-style? [flags]) + ($eq-hashtable-cells [flags discard]) ($eq-hashtable-clear! [flags true]) ($eq-hashtable-copy [flags true discard]) ($eq-hashtable-entries [flags discard]) @@ -1780,6 +1828,7 @@ ($eq-hashtable-values [flags true discard]) ($errno [flags]) ($errno->string [flags]) + ($error-handling-mode? [flags]) ($event [flags]) ($exactnum? [flags]) ($exactnum-imag-part [flags]) @@ -1794,10 +1843,8 @@ ($fasl-file-equal? #;[sig [(pathname pathname) (pathname pathname ptr) -> (boolean)]] [flags]) ($fasl-out [flags]) ($fasl-start [flags]) - ($fasl-strip-options [flags]) ($fasl-table [flags]) ($fasl-wrf-graph [flags]) - ($file-options [flags]) ($filter-conv [flags]) ($filter-foreign-type [flags]) ($fixed-path? [flags]) @@ -1967,6 +2014,14 @@ ($fptr-unlock! [flags]) ($fp-type->pred [flags]) ($ftd? [flags]) + ($ftd-alignment [flags]) + ($ftd-as-box? [flags]) + ($ftd-atomic-category [flags]) + ($ftd-compound? [flags]) + ($ftd-size [flags]) + ($ftd-unsigned? [flags]) + ($ftd->members [flags]) + ($ftype-guardian-oops [flags]) ($ftype-pointer? [flags]) ($fxaddress [flags unrestricted alloc]) ($fx-? [flags]) @@ -1993,6 +2048,8 @@ ($inexactnum? [flags]) ($inexactnum-imag-part [flags]) ($inexactnum-real-part [flags]) + ($insert-profile-src! [flags]) + ($install-ftype-guardian [flags]) ($install-guardian [flags]) ($install-library-clo-info [flags]) ($install-library/ct-code [flags]) @@ -2021,7 +2078,6 @@ ($keep-live [flags]) ($last-new-vector-element [flags]) ($lexical-error [flags]) - ($library-requirements-options [flags]) ($library-search [flags]) ($list-length [flags]) ($load-library [flags]) @@ -2056,8 +2112,10 @@ ($make-foreign-callable [flags]) ($make-foreign-procedure [flags]) ($make-fptr [flags pure mifoldable discard true]) + ($make-ftype-guardian [flags alloc cp02]) ($make-graph-env [flags]) ($make-library-requirements-options [flags pure discard true]) + ($make-load-binary [flags]) ($make-object-finder [flags]) ($make-promise [flags alloc]) ($make-read [flags]) @@ -2076,6 +2134,7 @@ ($make-vtable [flags]) ($map [flags]) ($mark-invoked! [flags]) + ($mark-pending! [flags]) ($maybe-compile-file [flags]) ($noexpand? [flags]) ($np-boot-code [flags]) @@ -2207,6 +2266,7 @@ ($track-static-closure-counts [flags alloc]) ; added for closure instrumentation ($trans-define-ftype [flags]) ($transformer->binding [flags]) + ($trans-ftype-guardian [flags]) ($trans-ftype-locked-op! [flags]) ($trans-ftype-pointer? [flags]) ($trans-ftype-&ref [flags]) @@ -2232,6 +2292,13 @@ ($xscript-port? [flags]) ) +(define-symbol-flags* ([libraries] [flags system]) ; system options sets + ($annotation-options [flags]) + ($fasl-strip-options [flags]) + ($file-options [flags]) + ($library-requirements-options [flags]) +) + (define-symbol-flags* ([libraries] [flags system proc]) ; system parameters ($block-counter [flags]) ($cafe [flags]) @@ -2240,6 +2307,7 @@ ($cp0-polyvariant #;[sig [() -> (boolean)] [(ptr) -> (void)]] [flags unrestricted]) ($current-mso [flags]) ($enable-check-heap [flags]) + ($enable-check-prelex-flags [flags]) ($enable-expeditor [feature expeditor] [flags]) ($enable-pass-timing [flags]) ($expeditor-history-file [feature expeditor] [flags]) @@ -2259,9 +2327,7 @@ ($console-error-port [flags]) ($console-input-port [flags]) ($console-output-port [flags]) - ($eol-style? [flags]) ($eq-ht-rtd [flags]) - ($error-handling-mode? [flags]) ($heap-reserve-ratio [flags]) ($interrupt [flags]) ($nuate [flags]) diff -Nru chezscheme-9.5+dfsg/s/prims.ss chezscheme-9.5.4+dfsg/s/prims.ss --- chezscheme-9.5+dfsg/s/prims.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/prims.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"prims.ss" ;;; prims.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -19,6 +18,7 @@ (run-cp0 (default-run-cp0)) (generate-interrupt-trap #f)) +(begin ;;; hand-coded primitives (define-who $hand-coded @@ -88,6 +88,11 @@ () scheme-object)) +(define $dequeue-scheme-signals + (foreign-procedure "(cs)dequeue_scheme_signals" + (ptr) + ptr)) + (define-who $show-allocation (let ([fp (foreign-procedure "(cs)s_showalloc" (boolean string) void)]) (case-lambda @@ -1070,6 +1075,10 @@ (lambda (v i x) (#2%vector-set! v i x))) +(define vector-cas! + (lambda (v i old-x new-x) + (#2%vector-cas! v i old-x new-x))) + (define vector-set-fixnum! (lambda (v i x) (#2%vector-set-fixnum! v i x))) @@ -1148,6 +1157,12 @@ (set-box! b v) ($oops 'set-box! "~s is not a mutable box" b)))) +(define-who box-cas! + (lambda (b old-v new-v) + (if (mutable-box? b) + (box-cas! b old-v new-v) + ($oops who "~s is not a mutable box" b)))) + (define mutable-box? (lambda (b) (#3%mutable-box? b))) @@ -1399,11 +1414,44 @@ (define-who $install-guardian (lambda (obj rep tconc) - (unless (and (pair? tconc) (pair? (car tconc)) (pair? (cdr tconc))) ($oops who "~s is not a tconc" tconc)) + ; tconc is assumed to be valid at all call sites (#3%$install-guardian obj rep tconc))) +(define-who $install-ftype-guardian + (lambda (obj tconc) + ; tconc is assumed to be valid at all call sites + (#3%$install-ftype-guardian obj tconc))) + +(define guardian? + (lambda (g) + (#3%guardian? g))) + +(define-who unregister-guardian + (let ([fp (foreign-procedure "(cs)unregister_guardian" (scheme-object) scheme-object)]) + (define probable-tconc? ; full tconc? could be expensive ... + (lambda (x) + (and (pair? x) (pair? (car x)) (pair? (cdr x))))) + (lambda (g) + (unless (guardian? g) ($oops who "~s is not a guardian" g)) + ; at present, guardians should have either one free variable (the tcond) or two(the tconc and an ftd) + ; but we just look for a probable tconc among whatever free variables it has + (fp (let ([n ($code-free-count ($closure-code g))]) + (let loop ([i 0]) + (if (fx= i n) + ($oops #f "failed to find a tconc among the free variables of guardian ~s" g) + (let ([x ($closure-ref g i)]) + (if (probable-tconc? x) + x + (loop (fx+ i 1))))))))))) + +(define-who $ftype-guardian-oops + (lambda (ftd obj) + ($oops 'ftype-guardian "~s is not an ftype pointer of the expected type ~s" obj ftd))) + (define make-guardian (lambda () (#2%make-guardian))) +(define $make-ftype-guardian (lambda (ftd) (#2%$make-ftype-guardian ftd))) + (define $address-in-heap? (foreign-procedure "(cs)s_addr_in_heap" (uptr) boolean)) @@ -1463,10 +1511,12 @@ (define fork-thread) (define make-mutex) (define mutex?) +(define mutex-name) (define mutex-acquire) (define mutex-release) (define make-condition) (define thread-condition?) +(define condition-name) (define condition-wait) (define condition-signal) (define condition-broadcast) @@ -1491,15 +1541,29 @@ (define cs (foreign-procedure "(cs)condition_signal" (scheme-object) void)) (define-record-type (condition $make-condition $condition?) - (fields (mutable addr $condition-addr $condition-addr-set!)) + (fields (mutable addr $condition-addr $condition-addr-set!) + (immutable name $condition-name)) (nongenerative) (sealed #t)) (define-record-type (mutex $make-mutex $mutex?) - (fields (mutable addr $mutex-addr $mutex-addr-set!)) + (fields (mutable addr $mutex-addr $mutex-addr-set!) + (immutable name $mutex-name)) (nongenerative) (sealed #t)) +(define make-mutex-no-check + (lambda (name) + (let ([m ($make-mutex (mm) name)]) + (mutex-guardian m) + m))) + +(define make-condition-no-check + (lambda (name) + (let ([c ($make-condition (mc) name)]) + (condition-guardian c) + c))) + (define mutex-guardian (make-guardian)) (define condition-guardian (make-guardian)) @@ -1518,16 +1582,22 @@ (t) (void)))))))) -(set! make-mutex - (lambda () - (let ([m ($make-mutex (mm))]) - (mutex-guardian m) - m))) +(set-who! make-mutex + (case-lambda + [() (make-mutex-no-check #f)] + [(name) + (unless (or (not name) (symbol? name)) ($oops who "~s is not a symbol or #f" name)) + (make-mutex-no-check name)])) (set! mutex? (lambda (x) ($mutex? x))) +(set-who! mutex-name + (lambda (m) + (unless (mutex? m) ($oops who "~s is not a mutex" m)) + ($mutex-name m))) + (set! mutex-acquire (case-lambda [(m) (mutex-acquire m #t)] @@ -1550,16 +1620,22 @@ ($oops 'mutex-release "mutex is defunct")) (mr addr)))) -(set! make-condition - (lambda () - (let ([c ($make-condition (mc))]) - (condition-guardian c) - c))) +(set-who! make-condition + (case-lambda + [() (make-condition-no-check #f)] + [(name) + (unless (or (not name) (symbol? name)) ($oops who "~s is not a symbol or #f" name)) + (make-condition-no-check name)])) (set! thread-condition? (lambda (x) ($condition? x))) +(set-who! condition-name + (lambda (c) + (unless (thread-condition? c) ($oops who "~s is not a condition" c)) + ($condition-name c))) + (set! condition-wait (case-lambda [(c m) (condition-wait c m #f)] @@ -1619,8 +1695,8 @@ ($condition-addr-set! c 0))) (f)))))) -(set! $tc-mutex ($make-mutex ($raw-tc-mutex))) -(set! $collect-cond ($make-condition ($raw-collect-cond))) +(set! $tc-mutex ($make-mutex ($raw-tc-mutex) '$tc-mutex)) +(set! $collect-cond ($make-condition ($raw-collect-cond) '$collect-cond)) )) (let () @@ -1644,9 +1720,11 @@ (define-tc-parameter $sfd (lambda (x) (or (eq? x #f) (source-file-descriptor? x))) "a source-file descriptor or #f" #f) (define-tc-parameter $current-mso (lambda (x) (or (eq? x #f) (procedure? x))) "a procedure or #f" #f) (define-tc-parameter $target-machine symbol? "a symbol") - (define-tc-parameter optimize-level (lambda (x) (and (fixnum? x) (fx<= 0 x 3))) "valid optimize level" 0) - (define-tc-parameter $compile-profile (lambda (x) (memq x '(#f source block))) "valid compile-profile flag" #f) - (define-tc-parameter subset-mode (lambda (mode) (memq mode '(#f system))) "valid subset mode" #f) + (define-tc-parameter optimize-level (lambda (x) (and (fixnum? x) (fx<= 0 x 3))) "a valid optimize level" 0) + (define-tc-parameter $compile-profile (lambda (x) (memq x '(#f source block))) "a valid compile-profile flag" #f) + (define-tc-parameter subset-mode (lambda (mode) (memq mode '(#f system))) "a valid subset mode" #f) + (define-tc-parameter default-record-equal-procedure (lambda (x) (or (eq? x #f) (procedure? x))) "a procedure or #f" #f) + (define-tc-parameter default-record-hash-procedure (lambda (x) (or (eq? x #f) (procedure? x))) "a procedure or #f" #f) ) (define-who compile-profile @@ -1672,6 +1750,7 @@ [(x) (name (and x #t))])) (name init))]))) (define-boolean-tc-parameter generate-inspector-information #t) + (define-boolean-tc-parameter generate-procedure-source-information #f) (define-boolean-tc-parameter generate-profile-forms #t) (define-boolean-tc-parameter $suppress-primitive-inlining #f) ) @@ -1753,16 +1832,16 @@ (when-feature windows (define get-registry (let ([fp (foreign-procedure "(windows)GetRegistry" - (string) + (wstring) scheme-object)]) (lambda (s) (unless (string? s) ($oops 'get-registry "~s is not a string" s)) (let ([x (fp s)]) - (and x (utf8->string x)))))) + (and x (utf16->string x (constant native-endianness))))))) (define put-registry! (let ([fp (foreign-procedure "(windows)PutRegistry" - (string string) + (wstring wstring) void)]) (lambda (s1 s2) (unless (string? s1) ($oops 'put-registry! "~s is not a string" s1)) @@ -1771,7 +1850,7 @@ (define remove-registry! (let ([fp (foreign-procedure "(windows)RemoveRegistry" - (string) + (wstring) void)]) (lambda (s) (unless (string? s) ($oops 'remove-registry! "~s is not a string" s)) @@ -1835,14 +1914,14 @@ [(fx<= b1 #x7f) ; one-byte encoding (string-set! s j (integer->char b1)) (loop (fx+ i 1) (fx+ j 1))] - [(fx<= #xc2 b1 #xdf) ; two-byte encoding + [(fx<= #xc0 b1 #xdf) ; two-byte encoding (if (fx< i (fx- n 1)) ; have at least two bytes? (let ([b2 (bytevector-u8-ref bv (fx+ i 1))]) (if (fx= (fxsrl b2 6) #b10) ; second byte a continuation byte? (begin (string-set! s j (let ([x (fxlogor (fxsll (fxlogand b1 #b11111) 6) (fxlogand b2 #b111111))]) - (if (fx<= x #x7f) #\x8ffd (integer->char x)))) + (if (fx<= x #x7f) #\xfffd (integer->char x)))) (loop (fx+ i 2) (fx+ j 1))) ; second byte is not a continuation byte (begin @@ -2194,6 +2273,7 @@ (type-check who fixnum x) (#3%$read-performance-monitoring-counter x))) +; TODO for arm32 targets, a kernel module is required to read the time stamp counter (define $read-time-stamp-counter (lambda () (#3%$read-time-stamp-counter))) @@ -2236,3 +2316,4 @@ (unless (string? str) ($oops who "~s is not a string" str)) (wctmb cp (string->utf16 str 'little)))))) ) +) diff -Nru chezscheme-9.5+dfsg/s/primvars.ss chezscheme-9.5.4+dfsg/s/primvars.ss --- chezscheme-9.5+dfsg/s/primvars.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/primvars.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"primvars.ss" ;;; primvars.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; diff -Nru chezscheme-9.5+dfsg/s/print.ss chezscheme-9.5.4+dfsg/s/print.ss --- chezscheme-9.5+dfsg/s/print.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/print.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"print.ss" ;;; print.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (eval-when (compile) (define-constant cycle-node-max 1000) @@ -163,7 +163,9 @@ [(and ($record? x) (not (eq? x #!base-rtd))) (when (print-record) ((record-writer ($record-type-descriptor x)) x (bit-sink) - (lambda (x p) ; could check for p == (bit-sink) + (lambda (x p) + (unless (and (output-port? p) (textual-port? p)) + ($oops 'write "~s is not a textual output port" p)) (find-dupls x (decr lev) len))))] [(box? x) (find-dupls (unbox x) (decr lev) len)] [(eq? x black-hole) (find-dupls x (decr lev) len)])] @@ -204,7 +206,9 @@ (call/cc (lambda (k) ((record-writer ($record-type-descriptor x)) x (bit-sink) - (lambda (x p) ; could check for p == (bit-sink) + (lambda (x p) + (unless (and (output-port? p) (textual-port? p)) + ($oops 'write "~s is not a textual output port" p)) (if (cyclic? x (fx+ curlev 1) 0) (k #t)))) #f)))))] @@ -283,7 +287,9 @@ (call/cc (lambda (k) ((record-writer ($record-type-descriptor x)) x (bit-sink) - (lambda (x p) ; could check for p == (bit-sink) + (lambda (x p) + (unless (and (output-port? p) (textual-port? p)) + ($oops 'write "~s is not a textual output port" p)) (if (down x (fx- xlev 1)) (k #t)))) #f)))] [(box? x) (down (unbox x) (fx- xlev 1))] @@ -587,15 +593,19 @@ (define wrhelp (lambda (x r lev len d? env p) (define void? (lambda (x) (eq? x (void)))) - (define black-hole? (lambda (x) (eq? x '#0=#0#))) + (define black-hole? (lambda (x) (eq? x '#3=#3#))) (define base-rtd? (lambda (x) (eq? x #!base-rtd))) (if-feature pthreads (begin (define $condition? thread-condition?) - (define $mutex? mutex?)) + (define $condition-name condition-name) + (define $mutex? mutex?) + (define $mutex-name mutex-name)) (begin (define $condition? (lambda (x) #f)) - (define $mutex? (lambda (x) #f)))) + (define $condition-name (lambda (x) #f)) + (define $mutex? (lambda (x) #f)) + (define $mutex-name (lambda (x) #f)))) (cond [($immediate? x) (type-case x @@ -651,15 +661,31 @@ [(bytevector?) (wrvector bytevector-length bytevector-u8-ref "vu8" x r lev len d? env p)] [(flonum?) (wrflonum #f x r d? p)] ; catch before record? case - [($condition?) (display-string "#" p)] - [($mutex?) (display-string "#" p)] + [($condition?) + (cond + (($condition-name x) => + (lambda (name) + (display-string "#string name) p) + (write-char #\> p))) + (else (display-string "#" p)))] + [($mutex?) + (cond + (($mutex-name x) => + (lambda (name) + (display-string "#string name) p) + (write-char #\> p))) + (else (display-string "#" p)))] [(base-rtd?) (display-string "#!base-rtd" p)] [($record?) (if (print-record) (if (limit? lev) (display-string "#[...]" p) ((record-writer ($record-type-descriptor x)) x p - (lambda (x p) ; could check for p == old p + (lambda (x p) + (unless (and (output-port? p) (textual-port? p)) + ($oops 'write "~s is not a textual output port" p)) (wr x r (decr lev) len d? env p)))) (let ([rtd ($record-type-descriptor x)]) (cond ; keep in sync with default-record-writer @@ -1321,3 +1347,4 @@ (unless (or (not x) (and (fixnum? x) (fx> x 0)) (and (bignum? x) ($bigpositive? x))) ($oops 'print-precision "~s is not a positive exact integer or #f" x)) x))) +) diff -Nru chezscheme-9.5+dfsg/s/read.ss chezscheme-9.5.4+dfsg/s/read.ss --- chezscheme-9.5+dfsg/s/read.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/read.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"read.ss" ;;; read.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -18,21 +17,29 @@ ;(define read) ;(define $read) +(begin (let () (include "types.ss") +(define-record-type rcb + (nongenerative) + (sealed #t) + (fields + ip ; input port + sfd ; a source-file descriptor or #f + a? ; if true, wrap s-expressions with source annotations + who ; who's calling (read, read-token) + )) + ;;; xdefine, xcall, xmvlet, and xvalues manage implicit arguments and ;;; return values for most of the procedures defined in this file. This ;;; simplifies the code and makes it much easier to add new arguments ;;; universally. The implicit variables are: -;;; [i ] ip input port +;;; [i ] rcb reader control block ;;; [io] fp current file position or #f ;;; [i ] bfp beginning file position or #f ;;; [io] tb token buffer ;;; [io] it insert table (for marks and references) -;;; [i ] sfd a source file descriptor or #f -;;; [i ] a? if true, wrap s-expressions with source annotations -;;; [i ] who who's calling (read, read-token) ;;; i: input (xcall argument) ;;; o: output (xvalues return value) @@ -40,22 +47,22 @@ (lambda (x) (syntax-case x () ((key args b1 b2 ...) - (with-implicit (key ip fp bfp tb it sfd a? who) - #'(lambda (ip fp bfp tb it sfd a? who . args) b1 b2 ...)))))) + (with-implicit (key rcb fp bfp tb it) + #'(lambda (rcb fp bfp tb it . args) b1 b2 ...)))))) (define-syntax xdefine (lambda (x) (syntax-case x () ((key (name . args) b1 b2 ...) - (with-implicit (key ip fp bfp tb it sfd a? who) - #'(define (name ip fp bfp tb it sfd a? who . args) b1 b2 ...)))))) + (with-implicit (key rcb fp bfp tb it) + #'(define (name rcb fp bfp tb it . args) b1 b2 ...)))))) (define-syntax xcall (lambda (x) (syntax-case x () ((key p arg ...) - (with-implicit (key ip fp bfp tb it sfd a? who) - #'(p ip fp bfp tb it sfd a? who arg ...)))))) + (with-implicit (key rcb fp bfp tb it) + #'(p rcb fp bfp tb it arg ...)))))) (define-syntax xmvlet (lambda (x) @@ -150,24 +157,26 @@ (syntax-case x () ((key id b1 b2 ...) (identifier? #'id) - (with-implicit (key ip fp) - #'(let ((id (read-char ip)) (fp (and fp (+ fp 1)))) b1 b2 ...)))))) + (with-implicit (key rcb fp) + #'(let ([id (read-char (rcb-ip rcb))]) + (let ((fp (and fp (+ fp 1)))) + b1 b2 ...))))))) (define-syntax with-peek-char (lambda (x) (syntax-case x () ((key id b1 b2 ...) (identifier? #'id) - (with-implicit (key ip) - #'(let ((id (peek-char ip))) b1 b2 ...)))))) + (with-implicit (key rcb) + #'(let ((id (peek-char (rcb-ip rcb)))) b1 b2 ...)))))) (define-syntax with-unread-char (lambda (x) (syntax-case x () [(key ?c b1 b2 ...) - (with-implicit (key ip fp) + (with-implicit (key rcb fp) #'(let ([c ?c]) - (unless (eof-object? c) (unread-char c ip)) + (unless (eof-object? c) (unread-char c (rcb-ip rcb))) (let ([fp (and fp (- fp 1))]) b1 b2 ...)))]))) (define-record-type delayed-record @@ -267,11 +276,16 @@ (make-source sfd bfp efp)))]))) (xdefine (rd-error ir? start? msg . args) - (cond - [(eq? ip (console-input-port)) ($lexical-error who msg args ip ir?)] - [(not fp) ($lexical-error who "~? on ~s" (list msg args ip) ip ir?)] - [sfd ($lexical-error who msg args ip ($make-source-object sfd bfp fp) start? ir?)] - [else ($lexical-error who "~? at char ~a of ~s" (list msg args (if start? bfp fp) ip) ip ir?)])) + (let ([ip (rcb-ip rcb)]) + (cond + [(eq? ip (console-input-port)) ($lexical-error (rcb-who rcb) msg args ip ir?)] + [(not fp) + (let ([pos (and (port-has-port-position? ip) (port-position ip))]) + (if pos + ($lexical-error (rcb-who rcb) "~? before file-position ~s of ~s; the character position might differ" (list msg args pos ip) ip ir?) + ($lexical-error (rcb-who rcb) "~? on ~s" (list msg args ip) ip ir?)))] + [(rcb-sfd rcb) ($lexical-error (rcb-who rcb) msg args ip ($make-source-object (rcb-sfd rcb) bfp fp) start? ir?)] + [else ($lexical-error (rcb-who rcb) "~? at char ~a of ~s" (list msg args (if start? bfp fp) ip) ip ir?)]))) (xdefine (rd-eof-error s) (xcall rd-error #f #t "unexpected end-of-file reading ~a" s)) @@ -286,8 +300,8 @@ (lambda (x) (syntax-case x () [(k str) - (with-implicit (k ip xcall) - #'(when ($port-flags-set? ip (constant port-flag-r6rs)) + (with-implicit (k rcb xcall) + #'(when ($port-flags-set? (rcb-ip rcb) (constant port-flag-r6rs)) (xcall rd-nonstandard-error str)))]))) (xdefine (rd-nonstandard-delimiter-error c) @@ -297,8 +311,8 @@ (lambda (x) (syntax-case x () [(k c) - (with-implicit (k ip xcall) - #'(when ($port-flags-set? ip (constant port-flag-r6rs)) + (with-implicit (k rcb xcall) + #'(when ($port-flags-set? (rcb-ip rcb) (constant port-flag-r6rs)) (xcall rd-nonstandard-delimiter-error c)))]))) (define-state (rd-token) @@ -440,7 +454,7 @@ [#\[ (nonstandard "#[...] record") (state-return record-brack #f)] [#\{ (nonstandard "#{...} gensym") (*state rd-token-gensym)] [#\& (nonstandard "#& box") (state-return box #f)] - [#\; (if (eq? who 'read-token) + [#\; (if (eq? (rcb-who rcb) 'read-token) (state-return quote 'datum-comment) (xmvlet (() (xcall rd-expression-comment)) (*state rd-token)))] [#\! (*state rd-token-hash-bang)] @@ -453,12 +467,12 @@ (with-read-char c (*state rd-token-symbol c 0 #f (state-lambda (n slashed?) - (state-return atomic (list '$primitive (maybe-fold/intern ip tb n slashed?))))))] + (state-return atomic (list '$primitive (maybe-fold/intern (rcb-ip rcb) tb n slashed?))))))] [#\: (nonstandard "#: gensym") (with-read-char c (*state rd-token-symbol c 0 #f (state-lambda (n slashed?) - (state-return atomic (maybe-fold/gensym ip tb n slashed?)))))] + (state-return atomic (maybe-fold/gensym (rcb-ip rcb) tb n slashed?)))))] [#\| (*state rd-token-block-comment 0)] [else (xcall rd-error #f #t "invalid sharp-sign prefix #~c" c)]))) @@ -489,7 +503,7 @@ (with-read-char c (state-case c [eof (xcall rd-eof-error "gensym")] - [(#\}) (state-return atomic (maybe-fold/intern ip tb n m slashed1? slashed2?))] + [(#\}) (state-return atomic (maybe-fold/intern (rcb-ip rcb) tb n m slashed1? slashed2?))] [else (with-unread-char c (xcall rd-error #f #f "expected close brace terminating gensym syntax"))]))))])))))]))) @@ -539,7 +553,7 @@ (with-read-char c (*state rd-token-symbol c 0 #f (state-lambda (m slashed?) - (state-return atomic (list '$primitive n (maybe-fold/intern ip tb m slashed?))))))] + (state-return atomic (list '$primitive n (maybe-fold/intern (rcb-ip rcb) tb m slashed?))))))] [else (xcall rd-error #f #t "invalid sharp-sign prefix ~a~a" (substring tb 0 i) c)]))) @@ -624,15 +638,15 @@ [else #f])) (with-unread-char c (state-return atomic - (or (let ([x (maybe-fold/intern ip tb n #f)]) - (if ($port-flags-set? ip (constant port-flag-r6rs)) + (or (let ([x (maybe-fold/intern (rcb-ip rcb) tb n #f)]) + (if ($port-flags-set? (rcb-ip rcb) (constant port-flag-r6rs)) (r6rs-char-name x) (char-name x))) (let ([s (substring tb 0 n)]) (if (and (with-peek-char c (eof-object? c)) (valid-prefix? s (map symbol->string - (if ($port-flags-set? ip (constant port-flag-r6rs)) + (if ($port-flags-set? (rcb-ip rcb) (constant port-flag-r6rs)) (map car r6rs-char-names) (let-values ([(keys vals) (hashtable-entries char-name-table)]) (apply append (vector->list vals))))))) @@ -665,18 +679,19 @@ (cond [(ormap (lambda (a) (and (fx= (string-length (car a)) i) a)) undelimited*) => (lambda (a) - (case (cdr a) - [(r6rs) ($set-port-flags! ip (constant port-flag-r6rs)) (*state rd-token)] - [(fold-case) - ($reset-port-flags! ip (constant port-flag-no-fold-case)) - ($set-port-flags! ip (constant port-flag-fold-case)) - (*state rd-token)] - [(no-fold-case) - ($reset-port-flags! ip (constant port-flag-fold-case)) - ($set-port-flags! ip (constant port-flag-no-fold-case)) - (*state rd-token)] - [(chezscheme) ($reset-port-flags! ip (constant port-flag-r6rs)) (*state rd-token)] - [else (xcall rd-error #f #t "unexpected #!~s" (car a))]))] + (let ([ip (rcb-ip rcb)]) + (case (cdr a) + [(r6rs) ($set-port-flags! ip (constant port-flag-r6rs)) (*state rd-token)] + [(fold-case) + ($reset-port-flags! ip (constant port-flag-no-fold-case)) + ($set-port-flags! ip (constant port-flag-fold-case)) + (*state rd-token)] + [(no-fold-case) + ($reset-port-flags! ip (constant port-flag-fold-case)) + ($set-port-flags! ip (constant port-flag-no-fold-case)) + (*state rd-token)] + [(chezscheme) ($reset-port-flags! ip (constant port-flag-r6rs)) (*state rd-token)] + [else (xcall rd-error #f #t "unexpected #!~s" (car a))])))] [else (with-read-char c (state-case c @@ -874,14 +889,14 @@ (xcall rd-error #f #t "invalid character ~c in string hex escape" c1)))]))) (xdefine (rd-make-number-or-symbol n) - (let ([z ($str->num tb n 10 #f ($port-flags-set? ip (constant port-flag-r6rs)))]) + (let ([z ($str->num tb n 10 #f ($port-flags-set? (rcb-ip rcb) (constant port-flag-r6rs)))]) (cond [(number? z) z] [(eq? z 'norep) (xcall rd-error #t #t "cannot represent ~a" (substring tb 0 n))] [(eq? z '!r6rs) (xcall rd-nonstandard-error (format "~a number" (substring tb 0 n)))] [else (nonstandard (format "~a symbol" (substring tb 0 n))) - (maybe-fold/intern ip tb n #f)]))) + (maybe-fold/intern (rcb-ip rcb) tb n #f)]))) (define-state (rd-token-number-or-symbol i) (with-read-char c @@ -907,7 +922,7 @@ [else (*state rd-token-symbol c i #f rd-token-intern-nonstandard)]))) (xdefine (rd-make-number n) - (let ([z ($str->num tb n 10 #f ($port-flags-set? ip (constant port-flag-r6rs)))]) + (let ([z ($str->num tb n 10 #f ($port-flags-set? (rcb-ip rcb) (constant port-flag-r6rs)))]) (cond [(number? z) z] [(and (eq? z #f) (with-peek-char c (eof-object? c))) (xcall rd-eof-error "number")] @@ -938,11 +953,11 @@ (*state rd-token-number (fx+ i 1)))]))) (define-state (rd-token-intern n slashed?) - (state-return atomic (maybe-fold/intern ip tb n slashed?))) + (state-return atomic (maybe-fold/intern (rcb-ip rcb) tb n slashed?))) (define-state (rd-token-intern-nonstandard n slashed?) (nonstandard (format "~a symbol" (substring tb 0 n))) - (state-return atomic (maybe-fold/intern ip tb n slashed?))) + (state-return atomic (maybe-fold/intern (rcb-ip rcb) tb n slashed?))) (define-state (rd-token-symbol c i slashed? next) (state-case c @@ -1026,7 +1041,7 @@ [else #f]) (values value fp) (if (and (or (eq? type 'rparen) (eq? type 'rbrack)) - (eq? ip (console-input-port))) + (eq? (rcb-ip rcb) (console-input-port))) (call-with-token rd-top-level) (xmvlet ((x stripped-x) (xcall rd type value)) (values (if it (xcall rd-fix-graph x) x) fp))))) @@ -1142,8 +1157,8 @@ (xdefine (rd type value) (xmvlet ((x stripped) (xcall rd-help type value)) (xvalues - (if (and a? (not (procedure? x))) ; don't annotate code - (make-annotation x ($make-source-object sfd bfp fp) stripped) + (if (rcb-a? rcb) + (make-annotation x ($make-source-object (rcb-sfd rcb) bfp fp) stripped) x) stripped))) @@ -1191,7 +1206,7 @@ (xmvlet ((rest stripped-rest) (xcall rd-paren-tail expr-bfp)) (xvalues (cons first rest) - (and a? (cons stripped-first stripped-rest)))))])))) + (and (rcb-a? rcb) (cons stripped-first stripped-rest)))))])))) (xdefine (rd-paren-tail expr-bfp) (with-token (type value) @@ -1218,7 +1233,7 @@ (xmvlet ((rest stripped-rest) (xcall rd-paren-tail expr-bfp)) (xvalues (cons first rest) - (and a? (cons stripped-first stripped-rest)))))]))) + (and (rcb-a? rcb) (cons stripped-first stripped-rest)))))]))) (xdefine (rd-brack-list) (let ([expr-bfp bfp]) @@ -1232,7 +1247,7 @@ (xmvlet ((rest stripped-rest) (xcall rd-brack-tail expr-bfp)) (xvalues (cons first rest) - (and a? (cons stripped-first stripped-rest)))))])))) + (and (rcb-a? rcb) (cons stripped-first stripped-rest)))))])))) (xdefine (rd-brack-tail expr-bfp) (with-token (type value) @@ -1259,7 +1274,7 @@ (xmvlet ((rest stripped-rest) (xcall rd-brack-tail expr-bfp)) (xvalues (cons first rest) - (and a? (cons stripped-first stripped-rest)))))]))) + (and (rcb-a? rcb) (cons stripped-first stripped-rest)))))]))) (xdefine (rd-quote kind) (let ([expr-bfp bfp]) @@ -1269,7 +1284,7 @@ [else (xmvlet ((x stripped-x) (xcall rd type value)) (xvalues (list kind x) - (and a? (list kind stripped-x))))])))) + (and (rcb-a? rcb) (list kind stripped-x))))])))) (xdefine (rd-record) (let ([expr-bfp bfp]) @@ -1302,7 +1317,7 @@ (if (null? fds) (xvalues (apply (record-constructor rtd) vals) - (and a? (apply (record-constructor rtd) stripped-vals))) + (and (rcb-a? rcb) (apply (record-constructor rtd) stripped-vals))) (if (and (apply (lambda (m t n) (or (eq? m 'immutable) (not (eq? (filter-foreign-type t) 'scheme-object)))) @@ -1311,7 +1326,7 @@ (delayed-record? (car vs)))) (xvalues (make-delayed-record rtd vals expr-bfp fp) - (and a? (make-delayed-record rtd stripped-vals expr-bfp fp))) + (and (rcb-a? rcb) (make-delayed-record rtd stripped-vals expr-bfp fp))) (loop (cdr fds) (cdr vs)))))))))] [else (xcall rd-error #f #t "unrecognized record name ~s" name)])])))) @@ -1332,25 +1347,25 @@ (xmvlet ((rest stripped-rest) (xcall rd-record-tail expr-bfp (- n 1) name)) (xvalues (cons first rest) - (and a? (cons stripped-first stripped-rest))))))]))) + (and (rcb-a? rcb) (cons stripped-first stripped-rest))))))]))) (xdefine (rd-vector expr-bfp i) (with-token (type value) (case type - [(rparen) (xvalues (make-vector i) (and a? (make-vector i)))] + [(rparen) (xvalues (make-vector i) (and (rcb-a? rcb) (make-vector i)))] [(eof) (let ([bfp expr-bfp]) (xcall rd-eof-error "vector"))] [else (xmvlet ((x stripped-x) (xcall rd type value)) (xmvlet ((v stripped-v) (xcall rd-vector expr-bfp (fx+ i 1))) (vector-set! v i x) - (when a? (vector-set! stripped-v i stripped-x)) + (when (rcb-a? rcb) (vector-set! stripped-v i stripped-x)) (xvalues v stripped-v)))]))) (xdefine (rd-sized-vector n) (unless (and (fixnum? n) (fxnonnegative? n)) (let ([bfp (and bfp (+ bfp 1))] [fp (and fp (- fp 1))]) (xcall rd-error #f #t "invalid vector length ~s" n))) - (xcall rd-fill-vector bfp (make-vector n) (and a? (make-vector n)) 0 n)) + (xcall rd-fill-vector bfp (make-vector n) (and (rcb-a? rcb) (make-vector n)) 0 n)) (xdefine (rd-fill-vector expr-bfp v stripped-v i n) (with-token (type value) @@ -1468,24 +1483,24 @@ [(eof) (let ([bfp expr-bfp]) (xcall rd-eof-error "box"))] [else (xmvlet ((x stripped-x) (xcall rd type value)) - (xvalues (box x) (and a? (box stripped-x))))])))) + (xvalues (box x) (and (rcb-a? rcb) (box stripped-x))))])))) (xdefine (rd-mark n) (let ([a (eq-hashtable-cell it n #f)]) ; set up insert(s) if not already present - (unless (cdr a) (set-cdr! a (cons (make-insert n bfp fp) (and a? (make-insert n bfp fp))))) + (unless (cdr a) (set-cdr! a (cons (make-insert n bfp fp) (and (rcb-a? rcb) (make-insert n bfp fp))))) ; check for duplicate marks (when (insert-seen (cadr a)) (xcall rd-error #f #t "duplicate mark #~s= seen" n)) ; mark seen before reading so that error comes from second duplicate (insert-seen-set! (cadr a) #t) - (when a? (insert-seen-set! (cddr a) #t)) + (when (rcb-a? rcb) (insert-seen-set! (cddr a) #t)) (let ([expr-bfp bfp]) (with-token (type value) (case type [(eof) (let ([bfp expr-bfp]) (xcall rd-eof-error "graph mark"))] [else (xmvlet ((obj stripped-obj) (xcall rd type value)) - (if a? + (if (rcb-a? rcb) (let ([ins (cadr a)] [stripped-ins (cddr a)]) (if (eq? stripped-obj stripped-ins) (begin @@ -1503,8 +1518,8 @@ (xdefine (rd-insert n) (let ([a (eq-hashtable-cell it n #f)]) ; set up insert(s) if not already present - (unless (cdr a) (set-cdr! a (cons (make-insert n bfp fp) (and a? (make-insert n bfp fp))))) - (xvalues (cadr a) (and a? (cddr a))))) + (unless (cdr a) (set-cdr! a (cons (make-insert n bfp fp) (and (rcb-a? rcb) (make-insert n bfp fp))))) + (xvalues (cadr a) (and (rcb-a? rcb) (cddr a))))) (xdefine (rd-expression-comment) ; called from scanner (let ([expr-bfp bfp]) @@ -1515,30 +1530,33 @@ (xmvlet ((x stripped-x) (xcall rd type value)) (xvalues))])))) -(set! read-token - (let ([who 'read-token]) +(set-who! read-token + (let () (define read-token - (lambda (ip sfd) + (lambda (ip sfd fp) (when (port-closed? ip) ($oops who "not permitted on closed port ~s" ip)) - (let ([fp (and (port-has-port-position? ip) - ($port-flags-set? ip (constant port-flag-char-positions)) - (port-position ip))]) - (let ([tb ""] [bfp fp] [it #f] [a? #f]) + (let ([fp (or fp + (and ($port-flags-set? ip (constant port-flag-char-positions)) + (port-has-port-position? ip) + (port-position ip)))]) + (let ([rcb (make-rcb ip sfd #f who)] [tb ""] [bfp fp] [it #f]) (with-token (type value) (values type value bfp fp)))))) (case-lambda - [() (read-token (current-input-port) #f)] + [() (read-token (current-input-port) #f #f)] [(ip) (unless (and (input-port? ip) (textual-port? ip)) ($oops who "~s is not a textual input port" ip)) - (read-token ip #f)] - [(ip sfd) + (read-token ip #f #f)] + [(ip sfd fp) (unless (and (input-port? ip) (textual-port? ip)) ($oops who "~s is not a textual input port" ip)) - (unless (or (not sfd) (source-file-descriptor? sfd)) + (unless (source-file-descriptor? sfd) ($oops who "~s is not a source-file descriptor" sfd)) - (read-token ip sfd)]))) + (unless (and (integer? fp) (exact? fp) (>= fp 0)) + ($oops who "~s is not a valid file position" fp)) + (read-token ip sfd fp)]))) (let () (define do-read @@ -1546,10 +1564,10 @@ (when (port-closed? ip) ($oops who "not permitted on closed port ~s" ip)) (let ([fp (or fp - (and (port-has-port-position? ip) - ($port-flags-set? ip (constant port-flag-char-positions)) + (and ($port-flags-set? ip (constant port-flag-char-positions)) + (port-has-port-position? ip) (port-position ip)))]) - (let ([tb ""] [bfp fp] [it #f] [a? (and a? sfd fp #t)]) + (let ([rcb (make-rcb ip sfd (and a? sfd fp #t) who)] [tb ""] [bfp fp] [it #f]) (call-with-token rd-top-level))))) (set-who! get-datum (lambda (ip) @@ -1567,7 +1585,7 @@ (lambda (ip sfd fp) (unless (and (input-port? ip) (textual-port? ip)) ($oops who "~s is not a textual input port" ip)) - (unless (or (not sfd) (source-file-descriptor? sfd)) + (unless (source-file-descriptor? sfd) ($oops who "~s is not a source-file descriptor" sfd)) (unless (and (integer? fp) (exact? fp) (>= fp 0)) ($oops who "~s is not a valid file position" fp)) @@ -1651,17 +1669,17 @@ (let loop ([fp 0] [accum '(0)]) (let ([ch (read-char ip)]) (cond - [(eof-object? ch) - (close-input-port ip) - (list->vector (reverse accum))] - [(eqv? ch #\newline) - (let ([fp (fx+ fp 1)]) - (loop fp (cons fp accum)))] - [else - (loop (fx+ fp 1) accum)])))) + [(eof-object? ch) + (close-input-port ip) + (list->vector (reverse accum))] + [(eqv? ch #\newline) + (let ([fp (fx+ fp 1)]) + (loop fp (cons fp accum)))] + [else + (loop (fx+ fp 1) accum)])))) (when use-cache? (with-tc-mutex - (hashtable-set! source-lines-cache sfd (cons name table)))) + (hashtable-set! source-lines-cache sfd (cons name table)))) (binary-search table name))] [else (values)]))) @@ -1781,7 +1799,6 @@ ; make c entry for x ($sputprop x '*char-name* c)) (else ($oops 'char-name "~s is not a character" c))))]))) - ) ;let (define source-directories @@ -1855,3 +1872,4 @@ (char-name 'alarm #\bel) (char-name 'nel #\nel) (char-name 'ls #\ls)) +) diff -Nru chezscheme-9.5+dfsg/s/record.ss chezscheme-9.5.4+dfsg/s/record.ss --- chezscheme-9.5+dfsg/s/record.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/record.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"record.ss" ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; ;;; Licensed under the Apache License, Version 2.0 (the "License"); diff -Nru chezscheme-9.5+dfsg/s/reloc.ss chezscheme-9.5.4+dfsg/s/reloc.ss --- chezscheme-9.5+dfsg/s/reloc.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/reloc.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"reloc.ss" ;;; reloc.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -14,6 +13,7 @@ ;;; See the License for the specific language governing permissions and ;;; limitations under the License. +(begin (define $reloc (lambda (type item-offset code-offset) (make-reloc type item-offset code-offset @@ -57,8 +57,6 @@ (bitwise-arithmetic-shift-left (reloc-item-offset r) (constant reloc-item-offset-offset)))) (mkc1 r* (fx+ n 1)))))))))) -(define $make-cinst) -(define $make-vtable) (let () (set! $make-cinst (lambda (build-sinst vtable) @@ -100,3 +98,4 @@ r) (constant ptr-bytes))))))) ) +) diff -Nru chezscheme-9.5+dfsg/s/strip.ss chezscheme-9.5.4+dfsg/s/strip.ss --- chezscheme-9.5+dfsg/s/strip.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/strip.ss 2020-08-31 02:35:12.000000000 +0000 @@ -19,7 +19,7 @@ (define-threaded fasl-count) (define-datatype fasl - (entry fasl) + (entry situation fasl) (header version machine dependencies) (pair vfasl) (tuple ty vfasl) @@ -28,7 +28,7 @@ (vector ty vfasl) (fxvector ty viptr) (bytevector ty bv) - (record ty size nflds rtd pad-ty* fld*) + (record maybe-uid size nflds rtd pad-ty* fld*) ; maybe-uid => rtd (closure offset c) (flonum high low) (small-integer iptr) @@ -38,10 +38,7 @@ (code flags free name arity-mask info pinfo* bytes m vreloc) (atom ty uptr) (reloc type-etc code-offset item-offset fasl) - (indirect g i) - (group vfasl) - (visit fasl) - (revisit fasl)) + (indirect g i)) (define-datatype field (ptr fasl) @@ -92,6 +89,14 @@ (let ([k (read-byte p)]) (f k (logor (ash n 7) (fxsrl k 1)))) n))))) + (define read-uptr/bytes + (lambda (p) + (let ([k (read-byte p)]) + (let f ([k k] [n (fxsrl k 1)] [bytes 1]) + (if (fxlogbit? 0 k) + (let ([k (read-byte p)]) + (f k (logor (ash n 7) (fxsrl k 1)) (fx+ bytes 1))) + (values n bytes)))))) (define read-byte-or-eof (lambda (p) (get-u8 p))) @@ -104,6 +109,12 @@ (let ([y (read-byte p)]) (unless (eqv? y x) (bogus "expected byte ~s, got ~s from ~a" x y (port-name p))))) + (define read-bytevector + (lambda (p n) + (let ([bv (make-bytevector n)]) + (do ([i 0 (fx+ i 1)]) + ((fx= i n) bv) + (bytevector-u8-set! bv i (read-byte p)))))) (define read-string (lambda (p) (let ([n (read-uptr p)]) @@ -118,10 +129,23 @@ ty (fasl-type-case ty [(fasl-type-header) (read-header p)] - [(fasl-type-fasl-size) - (let ([size (read-uptr p)]) - (fasl-entry (read-fasl p #f)))] - [else (bogus "expected header or entry in ~a" (port-name p))])))) + [(fasl-type-visit fasl-type-revisit fasl-type-visit-revisit) + (let* ([situation ty] + [size (read-uptr p)] + [compressed-flag (read-byte p)]) + (fasl-type-case compressed-flag + [(fasl-type-gzip fasl-type-lz4) + (let-values ([(dest-size dest-size-bytes) (read-uptr/bytes p)]) + (let* ([src-size (- size 1 dest-size-bytes)] + [bv (read-bytevector p src-size)] + [bv ($bytevector-uncompress bv dest-size + (if (eqv? compressed-flag (constant fasl-type-gzip)) + (constant COMPRESS-GZIP) + (constant COMPRESS-LZ4)))]) + (fasl-entry situation (read-fasl (open-bytevector-input-port bv) #f))))] + [(fasl-type-uncompressed) (fasl-entry situation (read-fasl p #f))] + [else (bogus "expected compression flag in ~a" (port-name p))]))] + [else (bogus "expected header or situation in ~a" (port-name p))])))) (define (read-header p) (let* ([bv (constant fasl-header)] [n (bytevector-length bv)]) (do ([i 1 (fx+ i 1)]) @@ -172,6 +196,13 @@ (vector-set! v i (let ([key (read-fasl p g)]) (cons key (read-fasl p g)))))))) + (define (read-record p g maybe-uid) + (let* ([size (read-uptr p)] [nflds (read-uptr p)] [rtd (read-fasl p g)]) + (let loop ([n nflds] [rpad-ty* '()] [rfld* '()]) + (if (fx= n 0) + (fasl-record maybe-uid size nflds rtd (reverse rpad-ty*) (reverse rfld*)) + (let* ([pad-ty (read-byte p)] [fld (read-fld p g (fxlogand pad-ty #x0f))]) + (loop (fx- n 1) (cons pad-ty rpad-ty*) (cons fld rfld*))))))) (define (read-fasl p g) (let ([ty (read-byte p)]) (fasl-type-case ty @@ -194,21 +225,10 @@ ((fx= i n) v) (vector-set! v i (read-iptr p))))))] [(fasl-type-bytevector fasl-type-immutable-bytevector) - (fasl-bytevector - ty - (let ([n (read-uptr p)]) - (let ([bv (make-bytevector n)]) - (do ([i 0 (fx+ i 1)]) - ((fx= i n) bv) - (bytevector-u8-set! bv i (read-byte p))))))] + (fasl-bytevector ty (read-bytevector p (read-uptr p)))] [(fasl-type-base-rtd) (fasl-tuple ty '#())] - [(fasl-type-rtd fasl-type-record) - (let* ([size (read-uptr p)] [nflds (read-uptr p)] [rtd (read-fasl p g)]) - (let loop ([n nflds] [rpad-ty* '()] [rfld* '()]) - (if (fx= n 0) - (fasl-record ty size nflds rtd (reverse rpad-ty*) (reverse rfld*)) - (let* ([pad-ty (read-byte p)] [fld (read-fld p g (fxlogand pad-ty #x0f))]) - (loop (fx- n 1) (cons pad-ty rpad-ty*) (cons fld rfld*))))))] + [(fasl-type-rtd) (read-record p g (read-fasl p g))] + [(fasl-type-record) (read-record p g #f)] [(fasl-type-closure) (let* ([offset (read-uptr p)] [c (read-fasl p g)]) @@ -277,9 +297,6 @@ (let ([n (read-uptr p)]) (or (vector-ref g n) (fasl-indirect g n)))] - [(fasl-type-group) (fasl-group (read-vfasl p g (read-uptr p)))] - [(fasl-type-visit) (fasl-visit (read-fasl p g))] - [(fasl-type-revisit) (fasl-revisit (read-fasl p g))] [else (bogus "unexpected fasl code ~s in ~a" ty (port-name p))])))) (define read-script-header @@ -326,9 +343,9 @@ (define fasl-record? (lambda (uname x) (fasl-case (follow-indirect x) - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (fasl-case (follow-indirect rtd) - [record (rtd-ty rtd-size rtd-nflds rtd-rtd rtd-pad-ty* rtd-fld*) + [record (rtd-uid rtd-size rtd-nflds rtd-rtd rtd-pad-ty* rtd-fld*) (and (> (length rtd-fld*) uid-index) (field-case (list-ref rtd-fld* uid-index) [ptr (fasl) @@ -351,7 +368,7 @@ (unless (fasl-record? uname x) (sorry! "unexpected type of object ~s" x)) (fasl-case (follow-indirect x) - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (unless (> (length fld*) index) (sorry! "fewer fields than expected for ~s" x)) (let ([fld (list-ref fld* index)]) @@ -392,7 +409,7 @@ (lambda () (vector-for-each (lambda (fasl) (build! fasl t)) vfasl)))) (fasl-case x - [entry (fasl) (sorry! "unexpected fasl-record-type entry")] + [entry (situation fasl) (sorry! "unexpected fasl-record-type entry")] [header (version machine dependencies) (sorry! "unexpected fasl-record-type header")] [pair (vfasl) (build-graph! x t (build-vfasl! vfasl))] [tuple (ty vfasl) (build-graph! x t (build-vfasl! vfasl))] @@ -401,11 +418,12 @@ [vector (ty vfasl) (build-graph! x t (build-vfasl! vfasl))] [fxvector (ty viptr) (build-graph! x t void)] [bytevector (ty viptr) (build-graph! x t void)] - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (if (and strip-source-annotations? (fasl-annotation? x)) (build! (fasl-annotation-stripped x) t) (build-graph! x t (lambda () + (when maybe-uid (build! maybe-uid t)) (build! rtd t) (for-each (lambda (fld) (field-case fld @@ -442,150 +460,144 @@ (vector-for-each (lambda (reloc) (build! reloc t)) vreloc)))] [atom (ty uptr) (void)] [reloc (type-etc code-offset item-offset fasl) (build! fasl t)] - [indirect (g i) (build! (vector-ref g i) t)] - [group (vfasl) ((build-vfasl! vfasl))] - [visit (fasl) (build! fasl t)] - [revisit (fasl) (build! fasl t)]))) + [indirect (g i) (build! (vector-ref g i) t)]))) + + (include "fasl-helpers.ss") (define write-entry (lambda (p x) + (define (append-bvs bv*) + (let f ([bv* bv*] [n 0]) + (if (null? bv*) + (if (fixnum? n) + (make-bytevector n) + ($oops 'fasl-write "fasl output is too large to compress")) + (let ([bv1 (car bv*)]) + (let ([m (bytevector-length bv1)]) + (let ([bv2 (f (cdr bv*) (+ n m))]) + (bytevector-copy! bv1 0 bv2 n m) + bv2)))))) (fasl-case x [header (version machine dependencies) - (write-header p version machine dependencies)] - [entry (fasl) + (emit-header p version machine dependencies)] + [entry (situation fasl) (let ([t (make-table)]) (build! fasl t) - (let ([bv (call-with-bytevector-output-port - (lambda (p) - (let ([n (table-count t)]) - (unless (fx= n 0) - (write-byte p (constant fasl-type-graph)) - (write-uptr p n))) - (write-fasl p t fasl)))]) - (write-byte p (constant fasl-type-fasl-size)) - (write-uptr p (bytevector-length bv)) - (put-bytevector p bv)))] + ($fasl-start p t situation + (lambda (p) (write-fasl p t fasl))))] [else (sorry! "unrecognized top-level fasl-record-type ~s" x)]))) - (define write-header - (lambda (p version machine dependencies) - (put-bytevector p (constant fasl-header)) - (write-uptr p version) - (write-uptr p machine) - (write-byte p (char->integer #\()) - (let f ([dependencies dependencies]) - (unless (null? dependencies) - (write-byte p (car dependencies)) - (f (cdr dependencies)))) - (write-byte p (char->integer #\))))) - (define write-graph (lambda (p t x th) (let ([a (eq-hashtable-ref (table-ht t) x #f)]) (cond [(not a) (th)] [(cdr a) - (write-byte p (constant fasl-type-graph-def)) - (write-uptr p (car a)) + (put-u8 p (constant fasl-type-graph-def)) + (put-uptr p (car a)) (set-cdr! a #f) (th)] [else - (write-byte p (constant fasl-type-graph-ref)) - (write-uptr p (car a))])))) + (put-u8 p (constant fasl-type-graph-ref)) + (put-uptr p (car a))])))) (define write-fasl (lambda (p t x) (fasl-case x - [entry (fasl) (sorry! "unexpected fasl-record-type entry")] + [entry (situation fasl) (sorry! "unexpected fasl-record-type entry")] [header (version machine dependencies) (sorry! "unexpected fasl-record-type header")] [pair (vfasl) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-pair)) - (write-uptr p (fx- (vector-length vfasl) 1)) + (put-u8 p (constant fasl-type-pair)) + (put-uptr p (fx- (vector-length vfasl) 1)) (vector-for-each (lambda (fasl) (write-fasl p t fasl)) vfasl)))] [tuple (ty vfasl) (write-graph p t x (lambda () - (write-byte p ty) + (put-u8 p ty) (vector-for-each (lambda (fasl) (write-fasl p t fasl)) vfasl)))] [string (ty string) (write-graph p t x (lambda () - (write-byte p ty) + (put-u8 p ty) (write-string p string)))] [gensym (pname uname) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-gensym)) + (put-u8 p (constant fasl-type-gensym)) (write-string p pname) (write-string p uname)))] [vector (ty vfasl) (write-graph p t x (lambda () - (write-byte p ty) - (write-uptr p (vector-length vfasl)) + (put-u8 p ty) + (put-uptr p (vector-length vfasl)) (vector-for-each (lambda (fasl) (write-fasl p t fasl)) vfasl)))] [fxvector (ty viptr) (write-graph p t x (lambda () - (write-byte p ty) - (write-uptr p (vector-length viptr)) - (vector-for-each (lambda (iptr) (write-iptr p iptr)) viptr)))] + (put-u8 p ty) + (put-uptr p (vector-length viptr)) + (vector-for-each (lambda (iptr) (put-iptr p iptr)) viptr)))] [bytevector (ty bv) (write-graph p t x (lambda () - (write-byte p ty) - (write-uptr p (bytevector-length bv)) + (put-u8 p ty) + (put-uptr p (bytevector-length bv)) (put-bytevector p bv)))] - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (if (and strip-source-annotations? (fasl-annotation? x)) (write-fasl p t (fasl-annotation-stripped x)) (write-graph p t x (lambda () - (write-byte p ty) - (write-uptr p size) - (write-uptr p nflds) + (if maybe-uid + (begin + (put-u8 p (constant fasl-type-rtd)) + (write-fasl p t maybe-uid)) + (put-u8 p (constant fasl-type-record))) + (put-uptr p size) + (put-uptr p nflds) (write-fasl p t rtd) (for-each (lambda (pad-ty fld) - (write-byte p pad-ty) + (put-u8 p pad-ty) (field-case fld [ptr (fasl) (write-fasl p t fasl)] - [byte (n) (write-byte p n)] - [iptr (n) (write-iptr p n)] - [single (n) (write-uptr p n)] + [byte (n) (put-u8 p n)] + [iptr (n) (put-iptr p n)] + [single (n) (put-uptr p n)] [double (high low) - (write-uptr p high) - (write-uptr p low)])) + (put-uptr p high) + (put-uptr p low)])) pad-ty* fld*))))] [closure (offset c) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-closure)) - (write-uptr p offset) + (put-u8 p (constant fasl-type-closure)) + (put-uptr p offset) (write-fasl p t c)))] [flonum (high low) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-flonum)) - (write-uptr p high) - (write-uptr p low)))] + (put-u8 p (constant fasl-type-flonum)) + (put-uptr p high) + (put-uptr p low)))] [large-integer (sign vuptr) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-large-integer)) - (write-byte p sign) - (write-uptr p (vector-length vuptr)) - (vector-for-each (lambda (uptr) (write-uptr p uptr)) vuptr)))] + (put-u8 p (constant fasl-type-large-integer)) + (put-u8 p sign) + (put-uptr p (vector-length vuptr)) + (vector-for-each (lambda (uptr) (put-uptr p uptr)) vuptr)))] [eq-hashtable (mutable? subtype minlen veclen vpfasl) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-eq-hashtable)) - (write-byte p mutable?) - (write-byte p subtype) - (write-uptr p minlen) - (write-uptr p veclen) - (write-uptr p (vector-length vpfasl)) + (put-u8 p (constant fasl-type-eq-hashtable)) + (put-u8 p mutable?) + (put-u8 p subtype) + (put-uptr p minlen) + (put-uptr p veclen) + (put-uptr p (vector-length vpfasl)) (vector-for-each (lambda (pfasl) (write-fasl p t (car pfasl)) @@ -594,12 +606,12 @@ [symbol-hashtable (mutable? minlen equiv veclen vpfasl) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-symbol-hashtable)) - (write-byte p mutable?) - (write-uptr p minlen) - (write-byte p equiv) - (write-uptr p veclen) - (write-uptr p (vector-length vpfasl)) + (put-u8 p (constant fasl-type-symbol-hashtable)) + (put-u8 p mutable?) + (put-uptr p minlen) + (put-u8 p equiv) + (put-uptr p veclen) + (put-uptr p (vector-length vpfasl)) (vector-for-each (lambda (pfasl) (write-fasl p t (car pfasl)) @@ -608,10 +620,10 @@ [code (flags free name arity-mask info pinfo* bytes m vreloc) (write-graph p t x (lambda () - (write-byte p (constant fasl-type-code)) - (write-byte p flags) - (write-uptr p free) - (write-uptr p (bytevector-length bytes)) + (put-u8 p (constant fasl-type-code)) + (put-u8 p flags) + (put-uptr p free) + (put-uptr p (bytevector-length bytes)) (write-fasl p t name) (write-fasl p t arity-mask) (if strip-inspector-information? @@ -621,96 +633,44 @@ (write-fasl p t (fasl-atom (constant fasl-type-immediate) (constant snil))) (write-fasl p t pinfo*)) (put-bytevector p bytes) - (write-uptr p m) + (put-uptr p m) (vector-for-each (lambda (reloc) (write-fasl p t reloc)) vreloc)))] [small-integer (iptr) - (write-byte p (constant fasl-type-small-integer)) - (write-iptr p iptr)] + (put-u8 p (constant fasl-type-small-integer)) + (put-iptr p iptr)] [atom (ty uptr) - (write-byte p ty) - (write-uptr p uptr)] + (put-u8 p ty) + (put-uptr p uptr)] [reloc (type-etc code-offset item-offset fasl) - (write-byte p type-etc) - (write-uptr p code-offset) - (when (fxlogtest type-etc 2) (write-uptr p item-offset)) - (write-fasl p t fasl)] - [indirect (g i) (write-fasl p t (vector-ref g i))] - [group (vfasl) - (write-byte p (constant fasl-type-group)) - (write-uptr p (vector-length vfasl)) - (vector-for-each (lambda (fasl) (write-fasl p t fasl)) vfasl)] - [visit (fasl) - (write-byte p (constant fasl-type-visit)) + (put-u8 p type-etc) + (put-uptr p code-offset) + (when (fxlogtest type-etc 2) (put-uptr p item-offset)) (write-fasl p t fasl)] - [revisit (fasl) - (write-byte p (constant fasl-type-revisit)) - (write-fasl p t fasl)]))) - - (define write-byte - (lambda (p x) - (put-u8 p x))) - - (define-who write-uptr - (lambda (p n) - (unless (>= n 0) - (sorry! "received negative input ~s" n)) - (let f ([n n] [cbit 0]) - (if (and (fixnum? n) (fx<= n 127)) - (write-byte p (fxlogor (fxsll n 1) cbit)) - (begin - (f (ash n -7) 1) - (write-byte p (fxlogor (fxsll (logand n #x7f) 1) cbit))))))) - - (define write-iptr - (lambda (p x) - (let f ([n (if (< x 0) (- x) x)] [cbit 0]) - (if (and (fixnum? n) (fx<= n 63)) - (write-byte p (fxlogor (if (< x 0) #x80 0) (fxsll n 1) cbit)) - (begin - (f (ash n -7) 1) - (write-byte p (fxlogor (fxsll (logand n #x7f) 1) cbit))))))) + [indirect (g i) (write-fasl p t (vector-ref g i))]))) (define write-string (lambda (p x) (let ([n (string-length x)]) - (write-uptr p n) + (put-uptr p n) (do ([i 0 (fx+ i 1)]) ((fx= i n)) - (write-uptr p (char->integer (string-ref x i))))))) + (put-uptr p (char->integer (string-ref x i))))))) - (module (fasl-program-info? fasl-library/rt-info?) + (module (fasl-program-info? fasl-library/rt-info? fasl-recompile-info?) (import (nanopass)) (include "base-lang.ss") (include "expand-lang.ss") (define fasl-program-info? (fasl-record-predicate (record-type-descriptor program-info))) - (define fasl-library/rt-info? (fasl-record-predicate (record-type-descriptor library/rt-info)))) + (define fasl-library/rt-info? (fasl-record-predicate (record-type-descriptor library/rt-info))) + (define fasl-recompile-info? (fasl-record-predicate (record-type-descriptor recompile-info)))) (define keep-revisit-info (lambda (x) - (define revisit-record? - (lambda (x) - (or (fasl-program-info? x) (fasl-library/rt-info? x)))) - (define revisit-stuff? - (lambda (x) - (fasl-case x - [closure (offset c) #t] - [revisit (fasl) #t] - [record (ty size nflds rtd pad-ty* fld*) (revisit-record? x)] - [else #f]))) (fasl-case x - [entry (fasl) - (fasl-case fasl - [closure (offset c) x] - [revisit (fasl) x] - [record (ty size nflds rtd pad-ty* fld*) (and (revisit-record? fasl) x)] - [group (vfasl) - (let ([fasl* (filter revisit-stuff? (vector->list vfasl))]) - (and (not (null? fasl*)) - (fasl-entry - (if (null? (cdr fasl*)) - (car fasl*) - (fasl-vector (constant fasl-type-vector) (list->vector fasl*))))))] - [else #f])] + [entry (situation fasl) + (and (or (eqv? situation (constant fasl-type-revisit)) + (eqv? situation (constant fasl-type-visit-revisit))) + x)] [header (version machine dependencies) x] [else (sorry! "expected entry or header, got ~s" x)]))) @@ -724,7 +684,6 @@ (on-reset (close-port ip) (let* ([script-header (read-script-header ip)] [mode (and script-header (unless-feature windows (get-mode ifn)))]) - (port-file-compressed! ip) (let loop ([rentry* '()]) (set! fasl-count (fx+ fasl-count 1)) (let ([entry (read-entry ip)]) @@ -752,7 +711,6 @@ (on-reset (delete-file ofn #f) (on-reset (close-port op) (when script-header (put-bytevector op script-header)) - (when (compile-compressed) (port-file-compressed! op)) (for-each (lambda (entry) (write-entry op entry)) entry*) (close-port op) (unless-feature windows (when mode (chmod ofn mode))))))))))))) @@ -814,7 +772,7 @@ (begin (set-cdr! a entry2) (cmp-case fasl-case entry1 entry2 - [entry (fasl) (fasl=? fasl1 fasl2)] + [entry (situation fasl) (and (= situation1 situation2) (fasl=? fasl1 fasl2))] [header (version machine dependencies) (and (equal? version1 version2) (equal? machine1 machine2) @@ -831,8 +789,10 @@ [vector (ty vfasl) (and (eqv? ty1 ty2) (vandmap fasl=? vfasl1 vfasl2))] [fxvector (ty viptr) (and (eqv? ty1 ty2) (vandmap = viptr1 viptr2))] [bytevector (ty bv) (and (eqv? ty1 ty2) (bytevector=? bv1 bv2))] - [record (ty size nflds rtd pad-ty* fld*) - (and (eqv? ty1 ty2) + [record (maybe-uid size nflds rtd pad-ty* fld*) + (and (if maybe-uid1 + (and maybe-uid2 (fasl=? maybe-uid1 maybe-uid2)) + (not maybe-uid2)) (eqv? size1 size2) (eqv? nflds1 nflds2) (fasl=? rtd1 rtd2) @@ -898,10 +858,7 @@ (eqv? code-offset1 code-offset2) (eqv? item-offset1 item-offset2) (fasl=? fasl1 fasl2))] - [indirect (g i) (sorry! "unexpected indirect")] - [group (vfasl) (vandmap fasl=? vfasl1 vfasl2)] - [visit (fasl) (fasl=? fasl1 fasl2)] - [revisit (fasl) (fasl=? fasl1 fasl2)]))))))) + [indirect (g i) (sorry! "unexpected indirect")]))))))) (set-who! $fasl-file-equal? (rec fasl-file-equal? @@ -923,19 +880,16 @@ (let ([script-header1 (read-script-header ip1)] [script-header2 (read-script-header ip2)]) (if (equal? script-header1 script-header2) - (begin - (port-file-compressed! ip1) - (port-file-compressed! ip2) - (let loop () - (set! fasl-count (fx+ fasl-count 1)) - (let ([entry1 (read-entry ip1)] [entry2 (read-entry ip2)]) - (if (eof-object? entry1) - (or (eof-object? entry2) - (and error? (bogus "~a has fewer fasl entries than ~a" ifn1 ifn2))) - (if (eof-object? entry2) - (and error? (bogus "~a has fewer fasl entries than ~a" ifn2 ifn1)) - (and (fluid-let ([cmp-ht (make-eq-hashtable)] - [gensym-table (make-hashtable string-hash string=?)]) - (fasl=? entry1 entry2)) - (loop))))))) + (let loop () + (set! fasl-count (fx+ fasl-count 1)) + (let ([entry1 (read-entry ip1)] [entry2 (read-entry ip2)]) + (if (eof-object? entry1) + (or (eof-object? entry2) + (and error? (bogus "~a has fewer fasl entries than ~a" ifn1 ifn2))) + (if (eof-object? entry2) + (and error? (bogus "~a has fewer fasl entries than ~a" ifn2 ifn1)) + (and (fluid-let ([cmp-ht (make-eq-hashtable)] + [gensym-table (make-hashtable string-hash string=?)]) + (fasl=? entry1 entry2)) + (loop)))))) (and error? (bogus "script headers ~s and ~s differ" script-header1 script-header2)))))))))))]))))) diff -Nru chezscheme-9.5+dfsg/s/strnum.ss chezscheme-9.5.4+dfsg/s/strnum.ss --- chezscheme-9.5+dfsg/s/strnum.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/strnum.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"strnum.ss" ;;; strnum.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -94,6 +93,7 @@ an exception. |# +(begin (let () ;; (mknum-state ;; @@ -529,3 +529,4 @@ (unless (inexact? x) ($oops who "a precision is specified and ~s is not inexact" x)) (parameterize ([print-radix r] [print-precision m]) (format "~a" x))])) +) diff -Nru chezscheme-9.5+dfsg/s/syntax.ss chezscheme-9.5.4+dfsg/s/syntax.ss --- chezscheme-9.5+dfsg/s/syntax.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/syntax.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"syntax.ss" ;;; syntax.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; @@ -406,9 +405,9 @@ (eval `(,noexpand ,x)))) (define local-eval-hook - ; for local macro transformers, use interpreter + ; for local macro transformers, use interpreter unless profiling is enabled (lambda (x) - (interpret `(,noexpand ,x)))) + ((if (compile-profile) eval interpret) `(,noexpand ,x)))) (define define-top-level-value-hook $set-top-level-value!) @@ -582,9 +581,9 @@ (define build-lexical-reference (lambda (ae prelex) - (when (prelex-referenced prelex) - (set-prelex-multiply-referenced! prelex #t)) - (set-prelex-referenced! prelex #t) + (if (prelex-referenced prelex) + (set-prelex-multiply-referenced! prelex #t) + (set-prelex-referenced! prelex #t)) (build-profile ae `(ref ,(ae->src ae) ,prelex)))) (define build-lexical-assignment @@ -679,20 +678,24 @@ [(integer-40 integer-48 integer-56 integer-64) `(fp-integer 64)] [(unsigned-40 unsigned-48 unsigned-56 unsigned-64) `(fp-unsigned 64)] [(void) (and void-okay? `(fp-void))] - [else (and ($ftd? x) `(fp-ftd ,x))]) + [else + (cond + [($ftd? x) `(fp-ftd ,x)] + [($ftd-as-box? x) `(fp-ftd& ,(unbox x))] + [else #f])]) ($oops #f "invalid ~a ~a specifier ~s" who what x))))) (define build-foreign-procedure - (lambda (ae conv foreign-name foreign-addr params result) + (lambda (ae conv* foreign-name foreign-addr params result) (build-profile ae - `(foreign ,conv ,foreign-name ,foreign-addr + `(foreign (,conv* ...) ,foreign-name ,foreign-addr (,(map (lambda (x) (build-fp-specifier 'foreign-procedure 'parameter x #f)) params) ...) ,(build-fp-specifier 'foreign-procedure "result" result #t))))) (define build-foreign-callable - (lambda (ae conv proc params result) + (lambda (ae conv* proc params result) (build-profile ae - `(fcallable ,conv ,proc + `(fcallable (,conv* ...) ,proc (,(map (lambda (x) (build-fp-specifier 'foreign-callable 'parameter x #f)) params) ...) ,(build-fp-specifier 'foreign-callable "result" result #t)))))) @@ -813,9 +816,26 @@ (define build-recompile-info (lambda (import-req* include-req*) - (make-recompile-info - (remp (lambda (x) (libdesc-system? (get-library-descriptor (libreq-uid x)))) import-req*) - include-req*))) + (with-output-language (Lexpand Outer) + `(recompile-info + ,(make-recompile-info + (remp (lambda (x) (libdesc-system? (get-library-descriptor (libreq-uid x)))) import-req*) + include-req*))))) + +(define build-library/ct-info + (lambda (linfo/ct) + (with-output-language (Lexpand Inner) + `(library/ct-info ,linfo/ct)))) + +(define build-library/rt-info + (lambda (linfo/rt) + (with-output-language (Lexpand Inner) + `(library/rt-info ,linfo/rt)))) + +(define build-program-info + (lambda (pinfo) + (with-output-language (Lexpand Inner) + `(program-info ,pinfo)))) (define build-top-library/rt (lambda (uid dl* db* dv* de* init*) @@ -824,9 +844,10 @@ ,(build-sequence no-source init*))))) (define build-top-library/ct - (lambda (uid import-code* visit-code*) + (lambda (uid export-id* import-code* visit-code*) (with-output-language (Lexpand ctLibrary) `(library/ct ,uid + (,export-id* ...) ,(build-lambda no-source '() (build-sequence no-source import-code*)) ,(if (null? visit-code*) @@ -961,8 +982,8 @@ (nongenerative #{g0 cz18zz6lfwg7mc7m-a}) (sealed #t)) -(define-record-type (compile-time-value $make-compile-time-value compile-time-value?) - (fields (immutable value)) +(define-record-type (compile-time-value $make-compile-time-value $compile-time-value?) + (fields (immutable value $compile-time-value-value)) (nongenerative #{g0 c0f3a5187l98t2ef-a}) (sealed #t)) @@ -1007,7 +1028,7 @@ (lambda (b) (case (binding-type b) [(visit) - (visit-library (binding-value b)) + (visit-loaded-library (binding-value b)) (get-global-definition-hook label)] [else b]))] [else (make-binding 'global label)]))) @@ -1072,7 +1093,7 @@ [(procedure? x) (make-binding 'macro x)] [(core-transformer? x) (core-transformer-binding x)] [(variable-transformer? x) (make-binding 'macro! (variable-transformer-procedure x))] - [(compile-time-value? x) (make-binding 'ctv x)] + [($compile-time-value? x) (make-binding 'ctv x)] [else ($oops who "invalid transformer ~s" x)]))) (define defer-or-eval-transformer @@ -2338,24 +2359,25 @@ (immutable path) (immutable version) (immutable outfn) ; string if imported from or compiled to an object file, else #f + (immutable importer) ; string if we know why this was imported, for error messages (immutable system?) + (immutable visible?) (immutable ctdesc) (immutable rtdesc)) - (nongenerative #{libdesc c9z2lszhwazzhbi56x5v5p-1}) + (nongenerative #{libdesc c9z2lszhwazzhbi56x5v5p-3}) (sealed #t)) (define-record-type ctdesc (fields - (immutable include-req*) ; libraries included when this library was compiled (immutable import-req*) ; libraries imported when this library was imported (immutable visit-visit-req*) ; libraries that must be visited (for meta definitions) when this library is visited (immutable visit-req*) ; libraries that must be invoked (for regular definitions) when this library is visited - (mutable clo*) ; cross-library optimization information (mutable loaded-import-reqs) (mutable loaded-visit-reqs) + (mutable export-id*) ; ids that need to be reset when visit-code raises an exception (mutable import-code) (mutable visit-code)) - (nongenerative #{ctdesc bthma8spr7lds76z4hlmr9-1}) + (nongenerative #{ctdesc bthma8spr7lds76z4hlmr9-4}) (sealed #t)) (define-record-type rtdesc @@ -2366,12 +2388,12 @@ (nongenerative #{rtdesc bthtzrrbhp7w9d02grnlh7-0}) (sealed #t)) -(module (libdesc-import-req* libdesc-include-req* libdesc-visit-visit-req* libdesc-visit-req* +(module (libdesc-import-req* libdesc-visit-visit-req* libdesc-visit-req* libdesc-loaded-import-reqs libdesc-loaded-import-reqs-set! libdesc-loaded-visit-reqs libdesc-loaded-visit-reqs-set! libdesc-import-code libdesc-import-code-set! libdesc-visit-code libdesc-visit-code-set! - libdesc-clo* libdesc-clo*-set!) + libdesc-visit-id* libdesc-visit-id*-set!) (define get-ctdesc (lambda (desc) (or (libdesc-ctdesc desc) @@ -2379,9 +2401,6 @@ (define libdesc-import-req* (lambda (desc) (ctdesc-import-req* (get-ctdesc desc)))) - (define libdesc-include-req* - (lambda (desc) - (ctdesc-include-req* (get-ctdesc desc)))) (define libdesc-visit-visit-req* (lambda (desc) (ctdesc-visit-visit-req* (get-ctdesc desc)))) @@ -2412,12 +2431,12 @@ (define libdesc-visit-code-set! (lambda (desc x) (ctdesc-visit-code-set! (get-ctdesc desc) x))) - (define libdesc-clo* + (define libdesc-visit-id* (lambda (desc) - (ctdesc-clo* (get-ctdesc desc)))) - (define libdesc-clo*-set! + (ctdesc-export-id* (get-ctdesc desc)))) + (define libdesc-visit-id*-set! (lambda (desc x) - (ctdesc-clo*-set! (get-ctdesc desc) x)))) + (ctdesc-export-id*-set! (get-ctdesc desc) x)))) (module (libdesc-invoke-req* libdesc-loaded-invoke-reqs libdesc-loaded-invoke-reqs-set! @@ -2442,44 +2461,81 @@ (lambda (desc x) (rtdesc-invoke-code-set! (get-rtdesc desc) x)))) -(define visit-library +(define-syntax with-message + (syntax-rules () + [(_ msg e1 e2 ...) + (begin + (when (import-notify) (fprintf (console-output-port) "~a\n" msg)) + e1 e2 ...)])) + +(define visit-loaded-library ; library must already have been loaded, as well as those in its visit-req* list (lambda (uid) + (define (go desc) + (cond + [(libdesc-visit-code desc) => + (lambda (p) + (when (eq? p 'loading) + ($oops #f "attempt to visit library ~s while it is still being loaded" (libdesc-path desc))) + (when (eq? p 'pending) + ($oops #f "cyclic dependency involving visit of library ~s" (libdesc-path desc))) + (libdesc-visit-code-set! desc 'pending) + (on-reset + (begin + (for-each (lambda (id) ($sc-put-cte id (make-binding 'visit uid) #f)) (libdesc-visit-id* desc)) + (libdesc-visit-code-set! desc p)) + (for-each (lambda (req) (visit-loaded-library (libreq-uid req))) (libdesc-visit-visit-req* desc)) + (for-each (lambda (req) (invoke-loaded-library (libreq-uid req))) (libdesc-visit-req* desc)) + (p)) + (libdesc-visit-code-set! desc #f) + (libdesc-visit-id*-set! desc '()))])) (cond [(get-library-descriptor uid) => (lambda (desc) - (cond - [(libdesc-visit-code desc) => - (lambda (p) - (when (eq? p 'loading) - ($oops #f "attempt to visit library ~s while it is still being loaded" (libdesc-path desc))) - (when (eq? p 'pending) - ($oops #f "cyclic dependency involving visit of library ~s" (libdesc-path desc))) - (libdesc-visit-code-set! desc 'pending) - (for-each (lambda (req) (visit-library (libreq-uid req))) (libdesc-visit-visit-req* desc)) - (for-each (lambda (req) (invoke-library (libreq-uid req))) (libdesc-visit-req* desc)) - (p) - (libdesc-visit-code-set! desc #f))]))] + (unless (libdesc-visible? desc) ($oops #f "attempt to visit invisible library ~s" (libdesc-path desc))) + (if (libdesc-ctdesc desc) + (go desc) + (let ([fn (libdesc-outfn desc)]) + ; this probably can't happen...we have probably already imported the library + ; for us to encounter something that forces us to visit the library + (with-message (format "attempting to 'visit' previously 'revisited' ~s for library ~s compile-time info" fn (libdesc-path desc)) + ($visit #f fn #f)) + (let ([desc (get-library-descriptor uid)]) + (unless (libdesc-ctdesc desc) + ($oops #f "visiting ~a did not define compile-time information for library ~s" fn (libdesc-path desc))) + (go desc)))))] [else ($oops #f "library ~:s is not defined" uid)]))) -(define invoke-library +(define invoke-loaded-library ; library must already have been loaded, as well as those in its invoke-req* list (lambda (uid) + (define (go desc) + (cond + [(libdesc-invoke-code desc) => + (lambda (p) + (when (eq? p 'loading) + ($oops #f "attempt to invoke library ~s while it is still being loaded" (libdesc-path desc))) + (when (eq? p 'pending) + ($oops #f "cyclic dependency involving invocation of library ~s" (libdesc-path desc))) + (libdesc-invoke-code-set! desc 'pending) + (on-reset (libdesc-invoke-code-set! desc p) + (for-each (lambda (req) (invoke-loaded-library (libreq-uid req))) (libdesc-invoke-req* desc)) + (p)) + (libdesc-invoke-code-set! desc #f))])) (cond [(get-library-descriptor uid) => (lambda (desc) - (cond - [(libdesc-invoke-code desc) => - (lambda (p) - (when (eq? p 'loading) - ($oops #f "attempt to invoke library ~s while it is still being loaded" (libdesc-path desc))) - (when (eq? p 'pending) - ($oops #f "cyclic dependency involving invocation of library ~s" (libdesc-path desc))) - (libdesc-invoke-code-set! desc 'pending) - (for-each (lambda (req) (invoke-library (libreq-uid req))) (libdesc-invoke-req* desc)) - (p) - (libdesc-invoke-code-set! desc #f))]))] - [else ($oops #f "library ~:s is not defined" uid)]))) + (unless (libdesc-visible? desc) ($oops #f "attempt to invoke invisible library ~s" (libdesc-path desc))) + (if (libdesc-rtdesc desc) + (go desc) + (let ([fn (libdesc-outfn desc)]) + (with-message (format "attempting to 'revisit' previously 'visited' ~s for library ~s run-time info" fn (libdesc-path desc)) + ($revisit #f fn #f)) + (let ([desc (get-library-descriptor uid)]) + (unless (libdesc-ctdesc desc) + ($oops #f "revisiting ~a did not define run-time information for library ~s" fn (libdesc-path desc))) + (go desc)))))] + [else ($oops #f "library ~:s is not defined" uid)]))) (define-threaded require-invoke (lambda (uid) @@ -2511,22 +2567,30 @@ (let ([req* '()]) (case-lambda [(uid) - (cond - [(get-library-descriptor uid) => - (lambda (desc) - (when invoke-now? - (cond - [(libdesc-invoke-code desc) => - (lambda (p) - (when (eq? p 'pending) - ($oops #f "cyclic dependency involving invocation of library ~s" (libdesc-path desc))) - (libdesc-invoke-code-set! desc 'pending) - (for-each (lambda (req) (invoke-library (libreq-uid req))) (libdesc-invoke-req* desc)) - (p) - (libdesc-invoke-code-set! desc #f))])) - (unless (memp (lambda (x) (eq? (libreq-uid x) uid)) req*) - (set! req* (cons (make-libreq (libdesc-path desc) (libdesc-version desc) uid) req*))))] - [else ($oops #f "library ~:s is not defined" uid)])] + (let retry () + (cond + [(get-library-descriptor uid) => + (lambda (desc) + (when invoke-now? + (cond + [(not (libdesc-visible? desc)) + ($oops #f "attempt to invoke invisible library ~s" (libdesc-path desc))] + [(not (libdesc-rtdesc desc)) + (with-message (format "attempting to 'revisit' previously 'visited' ~s for library ~s run-time info" (libdesc-outfn desc) (libdesc-path desc)) + ($revisit #f (libdesc-outfn desc) #f)) + (retry)] + [(libdesc-invoke-code desc) => + (lambda (p) + (when (eq? p 'pending) + ($oops #f "cyclic dependency involving invocation of library ~s" (libdesc-path desc))) + (libdesc-invoke-code-set! desc 'pending) + (on-reset (libdesc-invoke-code-set! desc p) + (for-each (lambda (req) (invoke-loaded-library (libreq-uid req))) (libdesc-invoke-req* desc)) + (p)) + (libdesc-invoke-code-set! desc #f))])) + (unless (memp (lambda (x) (eq? (libreq-uid x) uid)) req*) + (set! req* (cons (make-libreq (libdesc-path desc) (libdesc-version desc) uid) req*))))] + [else ($oops #f "library ~:s is not defined" uid)]))] [() req*])))) (define propagating-library-collector @@ -2621,8 +2685,8 @@ (vthunk) ; might as well do this now. visit-req* have already been invoked (install-library library-path library-uid ; import-code & visit-code is #f because vthunk invocation has already set up compile-time environment - (make-libdesc library-path library-version outfn #f - (make-ctdesc include-req* import-req* visit-visit-req* visit-req* '() #t #t #f #f) + (make-libdesc library-path library-version outfn #f #f #t + (make-ctdesc import-req* visit-visit-req* visit-req* #t #t '() #f #f) (make-rtdesc invoke-req* #t (top-level-eval-hook (build-lambda no-source '() @@ -2640,18 +2704,15 @@ ,(rt-eval/residualize rtem build-void (lambda () - (make-library/rt-info library-path library-version library-uid - invoke-req*))) + (build-library/rt-info + (make-library/rt-info library-path library-version library-uid #t + invoke-req*)))) ,(ct-eval/residualize ctem build-void (lambda () - (make-library/ct-info library-path library-version library-uid - include-req* import-req* visit-visit-req* visit-req* - (fold-left (lambda (clo* dl db) - (if dl - (cons (cons dl db) clo*) - clo*)) - '() dl* db*)))) + (build-library/ct-info + (make-library/ct-info library-path library-version library-uid #t + import-req* visit-visit-req* visit-req*)))) ,(rt-eval/residualize rtem build-void (lambda () @@ -2662,14 +2723,29 @@ build-void (lambda () (build-top-library/ct library-uid - ; setup code + ; visit-time exports (making them available for reset on visit-code failure) + (fold-left (lambda (ls x) + (let ([label (car x)] [exp (cdr x)]) + (if (and (pair? exp) (eq? (car exp) 'visit)) + (cons label ls) + ls))) + '() env*) + ; import code `(,(build-cte-install bound-id (build-data no-source interface-binding) '*system*) - ,@(if (null? env*) - '() - `(,(build-sequence no-source - (map (lambda (x) - (build-cte-install (car x) (build-data no-source (cdr x)) #f)) - env*))))) + ,@(let ([clo* (fold-left (lambda (clo* dl db) + (if dl + (cons (cons dl db) clo*) + clo*)) + '() dl* db*)]) + (if (null? clo*) + '() + `(,(build-primcall #f 3 '$install-library-clo-info (build-data #f clo*))))) + ,@(if (null? env*) + '() + `(,(build-sequence no-source + (map (lambda (x) + (build-cte-install (car x) (build-data no-source (cdr x)) #f)) + env*))))) ; visit code vcode*))))))))) (let ([mb (car mb*)] [mb* (cdr mb*)]) @@ -2782,7 +2858,7 @@ (lambda () (build-primcall no-source 3 '$install-program-desc (build-data no-source pinfo))) - (lambda () pinfo)) + (lambda () (build-program-info pinfo))) ,(rt-eval/residualize rtem (lambda () (build-top-program prog-uid @@ -2803,7 +2879,8 @@ [interleaved-init (frob) (process-bindings mb* r (cons (build-lexical-var no-source 't) dv*) - (cons frob de*))] + (cons (make-frob #`(begin #,(frob-e frob) (void)) (frob-meta? frob)) + de*))] [else (process-bindings mb* r dv* de*)])))))))) (define chi-top-module @@ -3633,7 +3710,7 @@ "first argument to lookup procedure is not an identifier")) (let ([b (lookup (id->label id empty-wrap) r)]) (case (binding-type b) - [(ctv) (compile-time-value-value (binding-value b))] + [(ctv) ($compile-time-value-value (binding-value b))] [else #f]))] [(id key-id) (unless (identifier? id) @@ -4044,7 +4121,7 @@ ; (and *) ; (or *) ; (not ) - (define (determine-module-imports what mid tid) + (define (determine-module-imports what who mid tid) (let ([binding (lookup (id->label mid empty-wrap) r)]) (case (binding-type binding) [($module) @@ -4060,7 +4137,7 @@ (values mid tid (make-import-interface x (diff-marks (id-marks tid) (interface-marks (get-indirect-interface x))))))] - [else (syntax-error mid "unknown module")]))) + [else (syntax-error who (format "unknown ~a" what))]))) (define (impset x) (syntax-case x () [(?only *x id ...) @@ -4195,13 +4272,13 @@ [else (f (cdr imps) o.n* (cons a new-imps))]))))))))] [mid (and (not std?) (id? #'mid)) - (determine-module-imports "module" #'mid #'mid)] + (determine-module-imports "module" #'mid #'mid #'mid)] [(?library-reference lr) (sym-kwd? ?library-reference library-reference) (let-values ([(mid tid) (lookup-library #'lr)]) - (determine-module-imports "library" mid tid))] + (determine-module-imports "library" #'lr mid tid))] [lr (let-values ([(mid tid) (lookup-library #'lr)]) - (determine-module-imports "library" mid tid))])) + (determine-module-imports "library" #'lr mid tid))])) (syntax-case impspec (for) [(?for *x level ...) (sym-kwd? ?for for) @@ -4276,14 +4353,18 @@ (append #'(old-id ...) exports) (append #'(old-id ...) exports-to-check) (fold-right resolve&add-id new-exports #'(old-id ...) #'(new-id ...)))] - [(?import impspec) + [(?import impspec ...) (sym-kwd? ?import import) - (let-values ([(mid tid imps) (help-determine-imports #'impspec r #f)]) - (let ([imps (if (import-interface? imps) (module-exports imps) imps)]) - (values - (append (map car imps) exports) - exports-to-check - (fold-right add-id new-exports (map cdr imps)))))] + (let process-impspecs ([impspec* #'(impspec ...)]) + (if (null? impspec*) + (values exports exports-to-check new-exports) + (let-values ([(_mid _tid imps) (help-determine-imports (car impspec*) r #f)] + [(exports exports-to-check new-exports) (process-impspecs (cdr impspec*))]) + (let ([imps (if (import-interface? imps) (module-exports imps) imps)]) + (values + (append (map car imps) exports) + exports-to-check + (fold-right add-id new-exports (map cdr imps)))))))] [_ (syntax-error x "invalid export spec")])))))]) (g (cdr expspec**) exports exports-to-check new-exports)))))) ) @@ -4507,7 +4588,7 @@ (module (install-library install-library/ct-desc install-library/rt-desc install-library/ct-code install-library/rt-code uninstall-library create-library-uid load-library lookup-library) - (module (search-loaded-libraries record-loaded-library! delete-loaded-library! list-loaded-libraries) + (module (search-loaded-libraries record-loaded-library delete-loaded-library list-loaded-libraries loaded-libraries-root) (module (make-root insert-path delete-path search-path list-paths) (define-record-type dir (fields (immutable name) (immutable dir*) (immutable file*)) @@ -4585,50 +4666,57 @@ (Dir '() root '())))) (define root (make-root)) (define search-loaded-libraries - (lambda (path) - (search-path root path))) - (define delete-loaded-library! - (lambda (path) - (set! root (delete-path root path)))) - (define record-loaded-library! - (lambda (path uid) - (set! root (insert-path root path uid)))) + (case-lambda + [(path) (search-path root path)] + [(root path) (search-path root path)])) + (define delete-loaded-library + (case-lambda + [(path) (set! root (delete-path root path))] + [(root path) (delete-path root path)])) + (define record-loaded-library + (case-lambda + [(path uid) (set! root (insert-path root path uid))] + [(root path uid) (insert-path root path uid)])) (define list-loaded-libraries - (lambda () - (list-paths root)))) + (case-lambda + [() (list-paths root)] + [(root) (list-paths root)])) + (define loaded-libraries-root + (lambda () root))) (define install-library/ct-desc - (lambda (path version uid outfn ctdesc) + (lambda (path version uid outfn importer visible? ctdesc) (with-tc-mutex - (record-loaded-library! path uid) + (record-loaded-library path uid) (put-library-descriptor uid - (make-libdesc path version outfn #f - ctdesc - (let ([desc (get-library-descriptor uid)]) + (let ([desc (get-library-descriptor uid)]) + (make-libdesc path version outfn (or (and desc (libdesc-importer desc)) importer) #f visible? + ctdesc (and desc (libdesc-rtdesc desc)))))))) (define install-library/rt-desc - (lambda (path version uid outfn rtdesc) + (lambda (path version uid outfn importer visible? rtdesc) (with-tc-mutex - (record-loaded-library! path uid) + (record-loaded-library path uid) (put-library-descriptor uid - (make-libdesc path version outfn #f - (let ([desc (get-library-descriptor uid)]) - (and desc (libdesc-ctdesc desc))) - rtdesc))))) + (let ([desc (get-library-descriptor uid)]) + (make-libdesc path version outfn (or (and desc (libdesc-importer desc)) importer) #f visible? + (and desc (libdesc-ctdesc desc)) + rtdesc)))))) (define install-library (lambda (path uid desc) (with-tc-mutex - (record-loaded-library! path uid) + (record-loaded-library path uid) (when desc (put-library-descriptor uid desc))))) (define-who install-library/ct-code - (lambda (uid import-code visit-code) + (lambda (uid export-id* import-code visit-code) (let ([desc (get-library-descriptor uid)]) (unless desc (sorry! who "unable to install visit code for non-existent library ~s" uid)) (let ([ctdesc (libdesc-ctdesc desc)]) (unless ctdesc (sorry! who "unable to install visit code for revisit-only library ~s" uid)) + (ctdesc-export-id*-set! ctdesc export-id*) (ctdesc-import-code-set! ctdesc import-code) (ctdesc-visit-code-set! ctdesc visit-code))))) @@ -4644,7 +4732,7 @@ (lambda (path uid) (with-tc-mutex (rem-library-descriptor uid) - (delete-loaded-library! path)))) + (delete-loaded-library path)))) (define create-library-uid (lambda (name) @@ -4661,6 +4749,17 @@ (define library-search (lambda (who path dir* all-ext*) + (let-values ([(src-path obj-path obj-exists?) ((library-search-handler) who path dir* all-ext*)]) + (unless (or (not src-path) (string? src-path)) + ($oops 'library-search-handler "returned invalid source-file path ~s" src-path)) + (unless (or (not obj-path) (string? obj-path)) + ($oops 'library-search-handler "returned invalid object-file path ~s" obj-path)) + (when (and obj-exists? (not obj-path)) + ($oops 'library-search-handler "claimed object file was found but returned no object-file path")) + (values src-path obj-path obj-exists?)))) + + (define internal-library-search + (lambda (who path dir* all-ext*) (define-syntax with-message (syntax-rules () [(_ msg e1 e2 ...) @@ -4728,8 +4827,34 @@ [else (with-message (format "did not find corresponding object file ~s" obj-path) #f)])))) (with-message (format "did not find source file ~s" src-path) (src-loop (cdr ext*)))))))))))))) + (define load-recompile-info + (lambda (who fn) + (let ([fn (let ([host-fn (format "~a.~s" (path-root fn) (machine-type))]) + (if (file-exists? host-fn) host-fn fn))]) + (let ([ip ($open-file-input-port who fn)]) + (on-reset (close-port ip) + (let ([fp (let ([start-pos (port-position ip)]) + (if (and (eqv? (get-u8 ip) (char->integer #\#)) + (eqv? (get-u8 ip) (char->integer #\!)) + (let ([b (get-u8 ip)]) (or (eqv? b (char->integer #\space)) (eqv? b (char->integer #\/))))) + (let loop ([fp 3]) + (let ([b (get-u8 ip)]) + (if (eof-object? b) + fp + (let ([fp (+ fp 1)]) + (if (eqv? b (char->integer #\newline)) + fp + (loop fp)))))) + (begin (set-port-position! ip start-pos) 0)))]) + (if ($compiled-file-header? ip) + (let ([x (fasl-read ip)]) + (close-port ip) + (unless (recompile-info? x) ($oops who "expected recompile info at start of ~s, found ~a" fn x)) + x) + ($oops who "missing header for compiled file ~s" fn)))))))) + (define load-library - (lambda (path version-ref needed-uid importer-path check-includes? ct? load-deps) + (lambda (who path version-ref needed-uid importer-path ct? load-deps) (define-syntax with-message (syntax-rules () [(_ msg e1 e2 ...) @@ -4740,25 +4865,36 @@ (lambda (found-uid src-file-path) (when needed-uid (unless (eq? found-uid needed-uid) - (if src-file-path - ($oops/c #f ($make-recompile-condition importer-path) - "compiled ~s requires different compilation instance of ~s from one found in ~a" - (or importer-path 'program) path src-file-path) - ($oops/c #f ($make-recompile-condition importer-path) - "compiled ~s requires different compilation instance of ~s from one already loaded" - (or importer-path 'program) path)))))) + (let ([c ($make-recompile-condition importer-path)] [importer-path (or importer-path 'program)]) + (if src-file-path + ($oops/c who c + "loading ~a yielded a different compilation instance of ~s from that required by compiled ~s" + src-file-path + path + importer-path) + (let-values ([(outfn original-importer) + (let ([desc (get-library-descriptor found-uid)]) + (if desc + (values (libdesc-outfn desc) (libdesc-importer desc)) + (values #f #f)))]) + ($oops/c who c + "compiled ~s requires a different compilation instance of ~s from the one previously ~:[compiled~;~:*loaded from ~a~]~@[ and originally imported by ~a~]" + importer-path + path + outfn + original-importer)))))))) (define do-load-library (lambda (file-path situation) (parameterize ([source-directories (cons (path-parent file-path) (source-directories))]) - ($load-library file-path situation)) + ($load-library file-path situation importer-path)) (cond [(search-loaded-libraries path) => (lambda (found-uid) - (verify-version path version-ref found-uid file-path file-path) + (verify-version who path version-ref found-uid file-path file-path) (load-deps found-uid) (verify-uid found-uid file-path) found-uid)] - [else ($oops #f "loading ~a did not define library ~s" file-path path)]))) + [else ($oops who "loading ~a did not define library ~s" file-path path)]))) (define do-compile-library (lambda (src-path obj-path) (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) @@ -4766,106 +4902,150 @@ (cond [(search-loaded-libraries path) => (lambda (found-uid) - (verify-version path version-ref found-uid obj-path src-path) + (verify-version who path version-ref found-uid obj-path src-path) (load-deps found-uid) (verify-uid found-uid src-path) found-uid)] - [else ($oops #f "compiling ~a did not define library ~s" src-path path)]))) - (define do-load/reload/recompile-library - (lambda (src-path obj-path compile-file?) - (let ([found-uid (guard (c [(and ($recompile-condition? c) (eq? ($recompile-importer-path c) path)) - (with-message (format "re~:[loading~;compiling~] ~s because a dependency has changed" compile-file? src-path) - (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) - (if compile-file? - ((compile-library-handler) src-path obj-path) - ($load-library src-path load)))) - (cond - [(search-loaded-libraries path) => - (lambda (found-uid) - (verify-version path version-ref found-uid obj-path src-path) - (load-deps found-uid) - found-uid)] - [else ($oops #f "re~:[loading~;compiling~] ~a did not define library ~s" compile-file? src-path path)])]) - (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) - ($load-library obj-path (if ct? 'load 'revisit))) - (cond - [(search-loaded-libraries path) => - (lambda (found-uid) - (verify-version path version-ref found-uid obj-path src-path) - (load-deps found-uid) - (when check-includes? - (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) - (let ([obj-time (file-modification-time obj-path)]) - (for-each - (lambda (include-req) - ((guard (c [else (with-message (format "missing include file ~a" include-req) - ($oops/c #f ($make-recompile-condition path) - "can't find include file ~a included by ~a when building ~a" - include-req src-path obj-path))]) - (with-source-path 'include include-req - (lambda (include-req) - (lambda () - (when (time>? (file-modification-time include-req) obj-time) - (with-message (format "include file ~a is newer than ~a" include-req obj-path) - ($oops/c #f ($make-recompile-condition path) - "include file ~a is newer than ~a" - include-req obj-path))))))))) - (libdesc-include-req* (get-library-descriptor found-uid)))))) - found-uid)] - [else ($oops #f "loading ~a did not define library ~s" src-path path)]))]) - (verify-uid found-uid src-path) - found-uid))) - (cond - [(search-loaded-libraries path) => - (lambda (found-uid) - (verify-version path version-ref found-uid #f #f) - (verify-uid found-uid #f) - (let ([desc (get-library-descriptor found-uid)]) - (if ct? - (unless (libdesc-ctdesc desc) - (with-message (format "attempting to 'visit' previously 'revisited' ~s for library ~s compile-time info" (libdesc-outfn desc) path) - ($visit #f (libdesc-outfn desc)))) - (unless (libdesc-rtdesc desc) - (with-message (format "attempting to 'revisit' previously 'visited' ~s for library ~s run-time info" (libdesc-outfn desc) path) - ($revisit #f (libdesc-outfn desc)))))) - ; need to call load-deps even if our library was already loaded, - ; since we might, say, have previously loaded its invoke dependencies and - ; now want to load its import dependencies - (load-deps found-uid) - found-uid)] - [else - (let-values ([(src-path obj-path obj-exists?) (library-search 'import path (library-directories) (library-extensions))]) - (if src-path - (if obj-exists? - (if (equal? obj-path src-path) - (with-message "source path and object path are the same" - (with-message (format "loading ~s" src-path) - (do-load-library src-path 'load))) - (if (time>=? (file-modification-time obj-path) (file-modification-time src-path)) - (with-message "object file is not older" - (with-message (format "loading object file ~s" obj-path) - (do-load/reload/recompile-library src-path obj-path - (and (compile-imported-libraries) $compiler-is-loaded?)))) - (with-message "object file is older" - (if (and (compile-imported-libraries) $compiler-is-loaded?) - (with-message (format "compiling ~s to ~s" src-path obj-path) - (do-compile-library src-path obj-path)) - (with-message (format "loading source file ~s" src-path) - (do-load-library src-path 'load)))))) - (if (and (compile-imported-libraries) $compiler-is-loaded?) - (with-message (format "compiling ~s to ~s" src-path obj-path) - (let f ([p obj-path]) - (let ([p (path-parent p)]) - (unless (or (string=? p "") (file-exists? p)) - (f p) - (with-message (format "creating subdirectory ~s" p) (mkdir p))))) - (do-compile-library src-path obj-path)) - (with-message (format "loading source file ~s" src-path) - (do-load-library src-path 'load)))) - (if obj-exists? - (with-message (format "loading object file ~s" obj-path) - (do-load-library obj-path (if ct? 'load 'revisit))) - ($oops #f "library ~s not found" path))))]))) + [else ($oops who "compiling ~a did not define library ~s" src-path path)]))) + (define do-recompile-or-load-library + (lambda (src-path obj-path) + (let ([compiled? #f]) + (parameterize ([source-directories (cons (path-parent src-path) (source-directories))] + [compile-library-handler + (let ([clh (compile-library-handler)]) + (lambda (src-path obj-path) + (clh src-path obj-path) + (set! compiled? #t)))]) + (maybe-compile-library src-path obj-path) + (unless compiled? + (with-message (format "no need to recompile, so loading ~s" obj-path) + ($load-library obj-path (if ct? 'visit 'revisit) importer-path)))) + (cond + [(search-loaded-libraries path) => + (lambda (found-uid) + (verify-version who path version-ref found-uid obj-path src-path) + (load-deps found-uid) + (verify-uid found-uid src-path) + found-uid)] + [else + (if compiled? + ($oops who "compiling ~a did not define library ~s" src-path path) + ($oops who "loading ~a did not define library ~s" obj-path path))])))) + (define do-load-library-src-or-obj + (lambda (src-path obj-path) + (define (load-source) + (with-message "object file is out-of-date" + (with-message (format "loading source file ~s" src-path) + (do-load-library src-path 'load)))) + (let ([obj-path-mod-time (file-modification-time obj-path)]) + (if (time>=? obj-path-mod-time (file-modification-time src-path)) + ; NB: combine with $maybe-compile-file + (let ([rcinfo (guard (c [else (with-message (with-output-to-string + (lambda () + (display-string "failed to process object file: ") + (display-condition c))) + #f)]) + (load-recompile-info 'import obj-path))]) + (if (and rcinfo + (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) + (andmap + (lambda (x) + ((guard (c [else (with-message (with-output-to-string + (lambda () + (display-string "failed to find include file: ") + (display-condition c))) + (lambda () #f))]) + (with-source-path 'import x + (lambda (x) + (lambda () + (and (file-exists? x) + (time<=? (file-modification-time x) obj-path-mod-time)))))))) + (recompile-info-include-req* rcinfo)))) + ; NB: calling load-deps insures that we'll reload obj-path if one of + ; the deps has to be reloaded, but it will miss other libraries that might have + ; contributed to the generated code. For example, if the source file imports + ; (a) and (b) but only (b) is one of the dependencies, we won't necessarily + ; reload if a.ss is newer than a.so. + (with-message "object file is not older" + (let ([found-uid (guard (c [(and ($recompile-condition? c) (eq? ($recompile-importer-path c) path)) + (with-message (format "reloading ~s because a dependency has changed" src-path) + (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) + ($load-library src-path 'load importer-path))) + (cond + [(search-loaded-libraries path) => + (lambda (found-uid) + (verify-version who path version-ref found-uid obj-path src-path) + (load-deps found-uid) + found-uid)] + [else ($oops who "reloading ~a did not define library ~s" src-path path)])]) + (parameterize ([source-directories (cons (path-parent src-path) (source-directories))]) + (guard (c [(and (irritants-condition? c) (member obj-path (condition-irritants c))) + (with-message (with-output-to-string + (lambda () + (display-string "failed to load object file: ") + (display-condition c))) + ($oops/c who ($make-recompile-condition path) + "problem loading object file ~a ~s" obj-path c))]) + (let ([situation (if ct? 'visit 'revisit)]) + (with-message (format "~sing object file ~s" situation obj-path) + ($load-library obj-path situation importer-path))))) + (cond + [(search-loaded-libraries path) => + (lambda (found-uid) + (verify-version who path version-ref found-uid obj-path src-path) + (load-deps found-uid) + found-uid)] + [else ($oops who "loading ~a did not define library ~s" obj-path path)]))]) + (verify-uid found-uid src-path) + found-uid)) + (load-source))) + (load-source))))) + ($pass-time 'load-library + (lambda () + (cond + [(search-loaded-libraries path) => + (lambda (found-uid) + (verify-version who path version-ref found-uid #f #f) + (verify-uid found-uid #f) + (let ([desc (get-library-descriptor found-uid)]) + (if ct? + (unless (libdesc-ctdesc desc) + (with-message (format "attempting to 'visit' previously 'revisited' ~s for library ~s compile-time info" (libdesc-outfn desc) path) + ($visit #f (libdesc-outfn desc) importer-path))) + (unless (libdesc-rtdesc desc) + (with-message (format "attempting to 'revisit' previously 'visited' ~s for library ~s run-time info" (libdesc-outfn desc) path) + ($revisit #f (libdesc-outfn desc) importer-path))))) + ; need to call load-deps even if our library was already loaded, + ; since we might, say, have previously loaded its invoke dependencies and + ; now want to load its import dependencies + (load-deps found-uid) + found-uid)] + [else + (let-values ([(src-path obj-path obj-exists?) (library-search 'import path (library-directories) (library-extensions))]) + (if src-path + (if obj-exists? + (if (equal? obj-path src-path) + (with-message "source path and object path are the same" + (with-message (format "loading ~s" src-path) + (do-load-library src-path 'load))) + (if (and (compile-imported-libraries) $compiler-is-loaded?) + (do-recompile-or-load-library src-path obj-path) + (do-load-library-src-or-obj src-path obj-path))) + (if (and (compile-imported-libraries) $compiler-is-loaded?) + (with-message (format "compiling ~s to ~s" src-path obj-path) + (let f ([p obj-path]) + (let ([p (path-parent p)]) + (unless (or (string=? p "") (file-exists? p)) + (f p) + (with-message (format "creating subdirectory ~s" p) (mkdir p))))) + (do-compile-library src-path obj-path)) + (with-message (format "loading source file ~s" src-path) + (do-load-library src-path 'load)))) + (if obj-exists? + (let ([situation (if ct? 'visit 'revisit)]) + (with-message (format "~sing object file ~s" situation obj-path) + (do-load-library obj-path situation))) + ($oops who "library ~s not found" path))))]))))) (define version-okay? (lambda (version-ref version) @@ -4893,14 +5073,14 @@ (version-okay? version-ref version))) (define verify-version - (lambda (path version-ref found-uid file-path src-file-path) + (lambda (who path version-ref found-uid file-path src-file-path) (let ([desc (get-library-descriptor found-uid)]) - (unless desc ($oops #f "cyclic dependency involving import of library ~s" path)) + (unless desc ($oops who "cyclic dependency involving import of library ~s" path)) (let ([version (libdesc-version desc)]) (unless (version-okay? version-ref version) (if src-file-path - ($oops #f "library ~s version mismatch: want ~s but found ~s at ~a" path version-ref version src-file-path) - ($oops #f "library ~s version mismatch: want ~s but ~s already loaded" path version-ref version))))))) + ($oops who "library ~s version mismatch: want ~s but found ~s at ~a" path version-ref version src-file-path) + ($oops who "library ~s version mismatch: want ~s but ~s already loaded" path version-ref version))))))) (define version-ref? (lambda (x) @@ -4950,10 +5130,191 @@ (lambda (who path dir* all-ext*) (library-search who path dir* all-ext*))) + (set-who! default-library-search-handler + (lambda (caller path dir* all-ext*) + (define (string-pair? x) (and (pair? x) (string? (car x)) (string? (cdr x)))) + (unless (symbol? caller) ($oops who "~s is not a symbol" caller)) + (guard (c [else ($oops who "invalid library name ~s" path)]) + (unless (list? path) (raise #f)) + (let-values ([(path version uid) (create-library-uid path)]) + (void))) + (unless (and (list? dir*) (andmap string-pair? dir*)) + ($oops who "invalid path list ~s" dir*)) + (unless (and (list? all-ext*) (andmap string-pair? all-ext*)) + ($oops who "invalid extension list ~s" all-ext*)) + (internal-library-search caller path dir* all-ext*))) + + (set-who! library-search-handler + ($make-thread-parameter default-library-search-handler + (lambda (x) (unless (procedure? x) ($oops who "~s is not a procedure" x)) x))) + (set! library-list (lambda () (list-loaded-libraries))) + (set-who! verify-loadability + (lambda (situation . input*) + (define (parse-inputs input*) + (let ([default-libdirs (library-directories)]) + (let loop ([input* input*] [rlibdirs* '()] [rfn* '()]) + (if (null? input*) + (values (reverse rlibdirs*) (reverse rfn*)) + (let ([input (car input*)] [input* (cdr input*)]) + (cond + [(string? input) (loop input* (cons default-libdirs rlibdirs*) (cons input rfn*))] + [(and (pair? input) (string? (car input)) (guard (c [else #f]) (parameterize ([library-directories (cdr input)]) #t))) + (loop input* (cons (cdr input) rlibdirs*) (cons (car input) rfn*))] + [else ($oops who "invalid input ~s: expected either a string or a pair of a string and a valid library-directories value" input)])))))) + (define (get-lpinfo fn situation) + (let ([fn (let ([host-fn (format "~a.~s" (path-root fn) (machine-type))]) + (if (file-exists? host-fn) host-fn fn))]) + (let ([ip ($open-file-input-port who fn)]) + (on-reset (close-port ip) + (let ([fp (let ([start-pos (port-position ip)]) + (if (and (eqv? (get-u8 ip) (char->integer #\#)) + (eqv? (get-u8 ip) (char->integer #\!)) + (let ([b (get-u8 ip)]) (or (eqv? b (char->integer #\space)) (eqv? b (char->integer #\/))))) + (let loop ([fp 3]) + (let ([b (get-u8 ip)]) + (if (eof-object? b) + fp + (let ([fp (+ fp 1)]) + (if (eqv? b (char->integer #\newline)) + fp + (loop fp)))))) + (begin (set-port-position! ip start-pos) 0)))]) + (unless ($compiled-file-header? ip) ($oops who "missing header for compiled file ~s" fn)) + (let ([x (fasl-read ip)]) + (unless (recompile-info? x) ($oops who "expected recompile info at start of ~s, found ~a" fn x))) + (let loop ([rlpinfo* '()]) + (let ([x (fasl-read ip situation)]) + (if (or (library-info? x) (program-info? x)) + (loop (cons x rlpinfo*)) + (begin (close-port ip) (reverse rlpinfo*)))))))))) + (unless (memq situation '(load visit revisit)) ($oops who "invalid situation ~s; should be one of load, visit, or revisit" situation)) + (let-values ([(libdirs* fn*) (parse-inputs input*)]) + (let ([root (loaded-libraries-root)] [uid-ht (make-eq-hashtable)]) + (define (check-ctdesc-libreqs! ctdesc importer) + (unless (ctdesc-loaded-import-reqs ctdesc) + (for-each (check-libreq! #t importer) (ctdesc-import-req* ctdesc)) + (ctdesc-loaded-import-reqs-set! ctdesc #t)) + (unless (ctdesc-loaded-visit-reqs ctdesc) + (for-each (check-libreq! #t importer) (ctdesc-visit-visit-req* ctdesc)) + (for-each (check-libreq! #f importer) (ctdesc-visit-req* ctdesc)) + (ctdesc-loaded-visit-reqs-set! ctdesc #t))) + (define (check-rtdesc-libreqs! rtdesc importer) + (unless (rtdesc-loaded-invoke-reqs rtdesc) + (for-each (check-libreq! #f importer) (rtdesc-invoke-req* rtdesc)) + (rtdesc-loaded-invoke-reqs-set! rtdesc #t))) + (define (check-libreq! visit? importer) + (lambda (libreq) + (let ([path (libreq-path libreq)]) + (define (check-uid! found-uid obj-path) + (unless (eq? found-uid (libreq-uid libreq)) + (if obj-path + ($oops who + "loading ~a yielded a different compilation instance of ~s from that required by ~a" + obj-path + path + importer) + (let-values ([(outfn original-importer) + (let ([desc (get-library-descriptor found-uid)]) + (if desc + (values (libdesc-outfn desc) (libdesc-importer desc)) + (values #f #f)))]) + ($oops who + "~a requires a different compilation instance of ~s from the one previously ~:[compiled~;~:*loaded from ~a~]~@[ and originally imported by ~a~]" + importer + path + outfn + original-importer))))) + (cond + [(search-loaded-libraries root path) => + (lambda (found-uid) + (with-message (format "~s is already loaded...checking for compatibility" path) + (check-uid! found-uid #f) + (let ([desc (or (hashtable-ref uid-ht found-uid #f) (get-library-descriptor found-uid))]) + (unless desc ($oops who "cyclic dependency involving import of library ~s" path)) + (unless (libdesc-visible? desc) + ($oops who "attempting to ~:[invoke~;import or visit~] invisible library ~s" visit? path)) + (if visit? + (cond + [(libdesc-ctdesc desc) => (lambda (ctdesc) (check-ctdesc-libreqs! ctdesc importer))] + [else + (with-message "~s compile-time info for ~s has not yet been loaded...loading now" + (check-fn! 'visit (libdesc-outfn desc) importer) + (let ([desc (hashtable-ref uid-ht found-uid #f)]) + (unless (and desc (libdesc-ctdesc desc)) + ($oops who "visiting ~s does not define compile-time information for ~s" (libdesc-outfn desc) path))))]) + (cond + [(libdesc-rtdesc desc) => (lambda (rtdesc) (check-rtdesc-libreqs! rtdesc importer))] + [else + (with-message "~s run-time info for ~s has not yet been loaded...loading now" + (check-fn! 'revisit (libdesc-outfn desc) importer) + (let ([desc (hashtable-ref uid-ht found-uid #f)]) + (unless (and desc (libdesc-rtdesc desc)) + ($oops who "revisiting ~s does not define run-time information for ~s" (libdesc-outfn desc) path))))])))))] + [else + (let-values ([(src-path obj-path obj-exists?) (library-search who path (library-directories) (library-extensions))]) + (unless obj-exists? ($oops who "cannot find object file for library ~s" path)) + (check-fn! (if visit? 'visit 'revisit) obj-path importer) + (let ([found-uid (search-loaded-libraries root path)]) + (unless found-uid ($oops who "loading ~s did not define library ~s" obj-path path)) + (check-uid! found-uid obj-path) + (let ([desc (hashtable-ref uid-ht found-uid #f)]) + (if visit? + (unless (and desc (libdesc-ctdesc desc)) + ($oops who "visiting ~s does not define compile-time information for ~s" obj-path path)) + (unless (and desc (libdesc-rtdesc desc)) + ($oops who "revisiting ~s does not define run-time information for ~s" obj-path path))))))])))) + (define (check-fn! situation fn importer) + (with-message (format "checking ~aability of ~a" situation fn) + ; register each of the libraries in the file before chasing any of the dependencies + ; to handle out-of-order info records and whole programs or libraries that depend on a + ; binary library which in turn depends on an embedded library. this also more closely + ; mirrors what happens when the file is actually loaded + ((fold-left + (lambda (th lpinfo) + (cond + [(library/ct-info? lpinfo) + (with-message (format "found ~a import-req* = ~s, visit-visit-req* = ~s, visit-req* = ~s" fn + (map libreq-path (library/ct-info-import-req* lpinfo)) + (map libreq-path (library/ct-info-visit-visit-req* lpinfo)) + (map libreq-path (library/ct-info-visit-req* lpinfo))) + (let ([ctdesc (make-ctdesc + (library/ct-info-import-req* lpinfo) + (library/ct-info-visit-visit-req* lpinfo) + (library/ct-info-visit-req* lpinfo) + #f #f '() 'loading 'loading)]) + (let ([path (library-info-path lpinfo)] [uid (library-info-uid lpinfo)]) + (set! root (record-loaded-library root path uid)) + (hashtable-set! uid-ht uid + (let ([desc (or (hashtable-ref uid-ht uid #f) (get-library-descriptor uid))]) + (make-libdesc path (library-info-version lpinfo) fn (or (and desc (libdesc-importer desc)) importer) #f #t + ctdesc + (and desc (libdesc-rtdesc desc)))))) + (lambda () (th) (check-ctdesc-libreqs! ctdesc fn))))] + [(library/rt-info? lpinfo) + (with-message (format "found ~a invoke-req* = ~s" fn + (map libreq-path (library/rt-info-invoke-req* lpinfo))) + (let ([rtdesc (make-rtdesc (library/rt-info-invoke-req* lpinfo) #f 'loading)]) + (let ([path (library-info-path lpinfo)] [uid (library-info-uid lpinfo)]) + (set! root (record-loaded-library root path uid)) + (hashtable-set! uid-ht uid + (let ([desc (or (hashtable-ref uid-ht uid #f) (get-library-descriptor uid))]) + (make-libdesc path (library-info-version lpinfo) fn (or (and desc (libdesc-importer desc)) importer) #f #t + (and desc (libdesc-ctdesc desc)) + rtdesc)))) + (lambda () (th) (check-rtdesc-libreqs! rtdesc fn))))] + [(program-info? lpinfo) + (with-message (format "found ~a invoke-req* = ~s" fn + (map libreq-path (program-info-invoke-req* lpinfo))) + (lambda () (th) (for-each (check-libreq! #f fn) (program-info-invoke-req* lpinfo))))] + [else ($oops who "unexpected library/program info record ~s" lpinfo)])) + void + (get-lpinfo fn situation))))) + (for-each (lambda (libdirs fn) (parameterize ([library-directories libdirs]) (check-fn! situation fn #f))) libdirs* fn*))))) + (let () (define maybe-get-lib (lambda (who libref) @@ -5048,67 +5409,70 @@ (let () (define make-load-req - (lambda (loader path) + (lambda (who loader path) (lambda (req) - (loader (libreq-path req) (libreq-version req) (libreq-uid req) path)))) + (loader who (libreq-path req) (libreq-version req) (libreq-uid req) path)))) (define load-invoke-library - (lambda (path version-ref uid importer-path) - (load-library path version-ref uid importer-path #f #f + (lambda (who path version-ref uid importer-path) + (load-library who path version-ref uid importer-path #f (lambda (uid) (let ([desc (get-library-descriptor uid)]) (unless (libdesc-rtdesc desc) - ($oops #f "loading ~a did not define run-time information for library ~s" (libdesc-outfn desc) path)) + ($oops who "loading ~a did not define run-time information for library ~s" (libdesc-outfn desc) path)) (case (libdesc-loaded-invoke-reqs desc) [(#t) (void)] [(#f) (libdesc-loaded-invoke-reqs-set! desc 'pending) - (for-each (make-load-req load-invoke-library path) (libdesc-invoke-req* desc)) + (on-reset (libdesc-loaded-invoke-reqs-set! desc #f) + (for-each (make-load-req who load-invoke-library path) (libdesc-invoke-req* desc))) (libdesc-loaded-invoke-reqs-set! desc #t)] - [(pending) ($oops #f "cyclic dependency involving invocation of library ~s" (libdesc-path desc))])))))) + [(pending) ($oops who "cyclic dependency involving invocation of library ~s" (libdesc-path desc))])))))) (define load-visit-library - (lambda (path version-ref uid importer-path) - (load-library path version-ref uid importer-path #f #t + (lambda (who path version-ref uid importer-path) + (load-library #f path version-ref uid importer-path #t (lambda (uid) (let ([desc (get-library-descriptor uid)]) (unless (libdesc-ctdesc desc) - ($oops #f "loading ~a did not define compile-time information for library ~s" (libdesc-outfn desc) path)) + ($oops who "loading ~a did not define compile-time information for library ~s" (libdesc-outfn desc) path)) (case (libdesc-loaded-visit-reqs desc) [(#t) (void)] [(#f) (libdesc-loaded-visit-reqs-set! desc 'pending) - (for-each (make-load-req load-visit-library path) (libdesc-visit-visit-req* desc)) - (for-each (make-load-req load-invoke-library path) (libdesc-visit-req* desc)) + (on-reset (libdesc-loaded-visit-reqs-set! desc #f) + (for-each (make-load-req who load-visit-library path) (libdesc-visit-visit-req* desc)) + (for-each (make-load-req who load-invoke-library path) (libdesc-visit-req* desc))) (libdesc-loaded-visit-reqs-set! desc #t)] - [(pending) ($oops #f "cyclic dependency involving visit of library ~s" (libdesc-path desc))])))))) + [(pending) ($oops who "cyclic dependency involving visit of library ~s" (libdesc-path desc))])))))) (define load-import-library - (lambda (path version-ref uid importer-path) - (load-library path version-ref uid importer-path #t #t + (lambda (who path version-ref uid importer-path) + (load-library #f path version-ref uid importer-path #t (lambda (uid) (let ([desc (get-library-descriptor uid)]) (unless (libdesc-ctdesc desc) - ($oops #f "loading ~a did not define compile-time information for library ~s" (libdesc-outfn desc) path)) + ($oops who "loading ~a did not define compile-time information for library ~s" (libdesc-outfn desc) path)) (case (libdesc-loaded-import-reqs desc) [(#t) (void)] [(#f) (libdesc-loaded-import-reqs-set! desc 'pending) - (for-each (make-load-req load-import-library path) (libdesc-import-req* desc)) + (on-reset (libdesc-loaded-import-reqs-set! desc #f) + (for-each (make-load-req who load-import-library path) (libdesc-import-req* desc))) (libdesc-loaded-import-reqs-set! desc #t)] - [(pending) ($oops #f "cyclic dependency involving import of library ~s" (libdesc-path desc))])))))) + [(pending) ($oops who "cyclic dependency involving import of library ~s" (libdesc-path desc))])))))) (define import-library (lambda (uid) (cond [(get-library-descriptor uid) => (lambda (desc) + (unless (libdesc-visible? desc) ($oops #f "attempt to import invisible library ~s" (libdesc-path desc))) (cond [(libdesc-import-code desc) => (lambda (p) - (when (eq? p 'loading) - ($oops #f "attempt to import library ~s while it is still being loaded" (libdesc-path desc))) + (when (eq? p 'loading) + ($oops #f "attempt to import library ~s while it is still being loaded" (libdesc-path desc))) (libdesc-import-code-set! desc #f) - (for-each (lambda (req) (import-library (libreq-uid req))) (libdesc-import-req* desc)) - ($install-library-clo-info (libdesc-clo* desc)) - (libdesc-clo*-set! desc '()) - (p))]))] + (on-reset (libdesc-import-code-set! desc p) + (for-each (lambda (req) (import-library (libreq-uid req))) (libdesc-import-req* desc)) + (p)))]))] [else ($oops #f "library ~:s is not defined" uid)]))) ; invoking or visiting a possibly unloaded library occurs in two separate steps: @@ -5118,120 +5482,94 @@ ; recompilation or reloading does occur (set! $invoke-library (lambda (path version-ref uid) - (invoke-library (load-invoke-library path version-ref uid #f)))) + (invoke-loaded-library (load-invoke-library #f path version-ref uid #f)))) (set! $visit-library (lambda (path version-ref uid) - (visit-library (load-visit-library path version-ref uid #f)))) + (visit-loaded-library (load-visit-library #f path version-ref uid #f)))) (set! $import-library (lambda (path version-ref uid) - (let ([uid (load-import-library path version-ref uid #f)]) + (let ([uid (load-import-library #f path version-ref uid #f)]) (import-library uid) uid))) + (set-who! invoke-library + (lambda (name) + (define (go path version-ref) + (invoke-loaded-library (load-invoke-library who path version-ref #f #f))) + (syntax-case name () + [(dir-id ... file-id) + (and (andmap symbol? #'(dir-id ...)) (symbol? #'file-id)) + (go #'(dir-id ... file-id) '())] + [(dir-id ... file-id version-ref) + (and (andmap symbol? #'(dir-id ...)) (symbol? #'file-id) (version-ref? #'version-ref)) + (go #'(dir-id ... file-id) #'version-ref)] + [_ ($oops who "invalid library reference ~s" name)]))) (let () - (define load-recompile-info - (lambda (who fn) - (let ([fn (let ([host-fn (format "~a.~s" (path-root fn) (machine-type))]) - (if (file-exists? host-fn) host-fn fn))]) - (let ([ip ($open-file-input-port who fn)]) - (on-reset (close-port ip) - (let ([fp (let ([start-pos (port-position ip)]) - (if (and (eqv? (get-u8 ip) (char->integer #\#)) - (eqv? (get-u8 ip) (char->integer #\!)) - (let ([b (get-u8 ip)]) (or (eqv? b (char->integer #\space)) (eqv? b (char->integer #\/))))) - (let loop ([fp 3]) - (let ([b (get-u8 ip)]) - (if (eof-object? b) - fp - (let ([fp (+ fp 1)]) - (if (eqv? b (char->integer #\newline)) - fp - (loop fp)))))) - (begin (set-port-position! ip start-pos) 0)))]) - (port-file-compressed! ip) - (if ($compiled-file-header? ip) - (let () - (define unexpected-value! - (lambda (x) - ($oops who "unexpected value ~s read from ~a" x fn))) - (let loop ([rcinfo* '()]) - (let ([x (fasl-read ip)]) - (define scan-outer - (lambda (x rcinfo*) - (cond - [(recompile-info? x) (cons x rcinfo*)] - [else rcinfo*]))) - (cond - [(eof-object? x) (close-port ip) (reverse rcinfo*)] - [(vector? x) - (let ([n (vector-length x)]) - (let vloop ([i 0] [rcinfo* rcinfo*]) - (if (fx= i n) - (loop rcinfo*) - (vloop (fx+ i 1) (scan-outer (vector-ref x i) rcinfo*)))))] - [(Lexpand? x) (loop rcinfo*)] - [else (loop (scan-outer x rcinfo*))])))) - ($oops who "missing header for compiled file ~s" fn)))))))) - (set! $maybe-compile-file - (lambda (who ifn ofn handler) - (define with-new-who - (lambda (who th) - (with-exception-handler - (lambda (c) - (raise-continuable - (if (condition? c) - (apply condition (cons (make-who-condition who) (remp who-condition? (simple-conditions c)))) - c))) - th))) - (define-syntax with-message - (syntax-rules () - [(_ msg e1 e2 ...) - (begin - (when (import-notify) (fprintf (console-output-port) "~s: ~a\n" who msg)) - e1 e2 ...)])) - (unless $compiler-is-loaded? ($oops '$maybe-compile-file "compiler is not loaded")) - (if (file-exists? ofn) - (let ([ofn-mod-time (file-modification-time ofn)]) - (if (time>=? ofn-mod-time (with-new-who who (lambda () (file-modification-time ifn)))) - (with-message "object file is not older" - (let ([rcinfo* (load-recompile-info who ofn)]) - (if (andmap - (lambda (rcinfo) - (andmap - (lambda (x) - (with-source-path who x - (lambda (x) - (time<=? (with-new-who who (lambda () (file-modification-time x))) ofn-mod-time)))) - (recompile-info-include-req* rcinfo))) - rcinfo*) - (if (compile-imported-libraries) - (guard (c [(and ($recompile-condition? c) (eq? ($recompile-importer-path c) #f)) - (with-message (format "recompiling ~s because a dependency has changed" ifn) - (handler ifn ofn))]) - (for-each - (lambda (rcinfo) - (for-each (make-load-req load-import-library #f) (recompile-info-import-req* rcinfo))) - rcinfo*) - #f) - (if (andmap (lambda (rcinfo) - (andmap - (lambda (x) - (let ([path (libreq-path x)]) - (cond - [(search-loaded-libraries path) => - (lambda (found-uid) - (verify-version path (libreq-version x) found-uid #f #f) - (eq? found-uid (libreq-uid x)))] - [else - (let-values ([(src-path obj-path obj-exists?) (library-search who path (library-directories) (library-extensions))]) - (and obj-exists? - (time<=? (file-modification-time obj-path) ofn-mod-time)))]))) - (recompile-info-import-req* rcinfo))) - rcinfo*) - #f - (handler ifn ofn))) - (handler ifn ofn)))) - (handler ifn ofn))) - (handler ifn ofn))))))) + (set! $maybe-compile-file + (lambda (who ifn ofn handler) + (define with-new-who + (lambda (who th) + (with-exception-handler + (lambda (c) + (raise-continuable + (if (condition? c) + (apply condition (cons (make-who-condition who) (remp who-condition? (simple-conditions c)))) + c))) + th))) + (define-syntax with-message + (syntax-rules () + [(_ msg e1 e2 ...) + (begin + (when (import-notify) (fprintf (console-output-port) "~s: ~a\n" who msg)) + e1 e2 ...)])) + (unless $compiler-is-loaded? ($oops '$maybe-compile-file "compiler is not loaded")) + (if (file-exists? ofn) + (let ([ofn-mod-time (file-modification-time ofn)]) + (if (time>=? ofn-mod-time (with-new-who who (lambda () (file-modification-time ifn)))) + (with-message "object file is not older" + (let ([rcinfo (guard (c [else (with-message (with-output-to-string + (lambda () + (display-string "failed to process object file: ") + (display-condition c))) + #f)]) + (load-recompile-info who ofn))]) + (if (and rcinfo + (andmap + (lambda (x) + ((guard (c [else (with-message (with-output-to-string + (lambda () + (display-string "failed to find include file: ") + (display-condition c))) + (lambda () #f))]) + (with-source-path who x + (lambda (x) + (lambda () + (and (file-exists? x) + (time<=? (file-modification-time x) ofn-mod-time)))))))) + (recompile-info-include-req* rcinfo))) + (if (compile-imported-libraries) + (guard (c [(and ($recompile-condition? c) (eq? ($recompile-importer-path c) #f)) + (with-message (format "recompiling ~s because a dependency has changed" ifn) + (handler ifn ofn))]) + (for-each (make-load-req who load-import-library #f) (recompile-info-import-req* rcinfo)) + #f) + (if (andmap + (lambda (x) + (let ([path (libreq-path x)]) + (cond + [(search-loaded-libraries path) => + (lambda (found-uid) + (verify-version who path (libreq-version x) found-uid #f #f) + (eq? found-uid (libreq-uid x)))] + [else + (let-values ([(src-path obj-path obj-exists?) (library-search who path (library-directories) (library-extensions))]) + (and obj-exists? + (time<=? (file-modification-time obj-path) ofn-mod-time)))]))) + (recompile-info-import-req* rcinfo)) + #f + (handler ifn ofn))) + (handler ifn ofn)))) + (handler ifn ofn))) + (handler ifn ofn))))))) (set-who! $build-invoke-program (lambda (uid body) @@ -5240,9 +5578,10 @@ (build-lambda no-source '() body)))) (set-who! $build-install-library/ct-code - (lambda (uid import-code visit-code) + (lambda (uid export-id* import-code visit-code) (build-primcall no-source 3 '$install-library/ct-code (build-data no-source uid) + (build-data no-source export-id*) import-code visit-code))) @@ -5300,7 +5639,7 @@ (s2 i (fx+ i 1))))) (s0 0))) - (define (parse-list who ls make-obj) + (define (parse-list who what ls make-obj) (let f ([ls ls]) (if (null? ls) '() @@ -5309,7 +5648,7 @@ [(string? x) (cons (cons x (make-obj x)) (f (cdr ls)))] [(and (pair? x) (string? (car x)) (string? (cdr x))) (cons (cons (car x) (cdr x)) (f (cdr ls)))] - [else ($oops who "invalid input-list element ~s" x)]))))) + [else ($oops who (format "invalid ~a element ~~s" what) x)]))))) (set-who! library-directories (rec library-directories @@ -5318,7 +5657,7 @@ (lambda (x) (cond [(string? x) (parse-string x (library-directories) values)] - [(list? x) (parse-list who x values)] + [(list? x) (parse-list who "path-list" x values)] [else ($oops who "invalid path list ~s" x)]))))) (set-who! library-extensions @@ -5335,8 +5674,8 @@ (string-append (path-root src-ext) ".so"))) (cond [(string? x) (parse-string x (library-extensions) default-obj-ext)] - [(list? x) (parse-list who x default-obj-ext)] - [else ($oops who "invalid path list ~s" x)])))))) + [(list? x) (parse-list who "extension-list" x default-obj-ext)] + [else ($oops who "invalid extension list ~s" x)])))))) (set! $install-program-desc (lambda (pinfo) @@ -5360,32 +5699,32 @@ clo*))) (set! $install-library/ct-desc - (lambda (linfo/ct for-import? ofn) + (lambda (linfo/ct for-import? importer ofn) (let ([uid (library-info-uid linfo/ct)]) (when for-import? (when (let ([desc (get-library-descriptor uid)]) (and desc (libdesc-ctdesc desc))) ($oops #f "attempting to re-install compile-time part of library ~s" (library-info-path linfo/ct)))) - (install-library/ct-desc (library-info-path linfo/ct) (library-info-version linfo/ct) uid ofn + (install-library/ct-desc (library-info-path linfo/ct) (library-info-version linfo/ct) uid ofn importer + (library-info-visible? linfo/ct) (make-ctdesc - (library/ct-info-include-req* linfo/ct) (library/ct-info-import-req* linfo/ct) (library/ct-info-visit-visit-req* linfo/ct) (library/ct-info-visit-req* linfo/ct) - (library/ct-info-clo* linfo/ct) - #f #f 'loading 'loading))))) + #f #f '() 'loading 'loading))))) (set! $install-library/rt-desc - (lambda (linfo/rt for-import? ofn) + (lambda (linfo/rt for-import? importer ofn) (let ([uid (library-info-uid linfo/rt)]) (when for-import? (when (let ([desc (get-library-descriptor uid)]) (and desc (libdesc-rtdesc desc))) ($oops #f "attempting to re-install run-time part of library ~s" (library-info-path linfo/rt)))) - (install-library/rt-desc (library-info-path linfo/rt) (library-info-version linfo/rt) - uid ofn (make-rtdesc (library/rt-info-invoke-req* linfo/rt) #f 'loading))))) + (install-library/rt-desc (library-info-path linfo/rt) (library-info-version linfo/rt) uid ofn importer + (library-info-visible? linfo/rt) + (make-rtdesc (library/rt-info-invoke-req* linfo/rt) #f 'loading))))) (set! $install-library/ct-code - (lambda (uid import-code visit-code) - (install-library/ct-code uid import-code visit-code))) + (lambda (uid export-id* import-code visit-code) + (install-library/ct-code uid export-id* import-code visit-code))) (set! $install-library/rt-code (lambda (uid invoke-code) @@ -5409,6 +5748,13 @@ (lambda (desc) (libdesc-invoke-code-set! desc #f))] [else ($oops #f "library ~:s is not defined" uid)]))) +(set! $mark-pending! + ; library must already have been loaded + (lambda (uid) + (cond + [(get-library-descriptor uid) => + (lambda (desc) (libdesc-invoke-code-set! desc 'pending))] + [else ($oops #f "library ~:s is not defined" uid)]))) (set! $transformer->binding (lambda (x) @@ -5460,8 +5806,8 @@ (define-who install-system-library (lambda (path uid) (install-library path uid - (make-libdesc path (if (eq? (car path) 'rnrs) '(6) '()) #f #t - (make-ctdesc '() '() '() '() '() #t #t #f #f) + (make-libdesc path (if (eq? (car path) 'rnrs) '(6) '()) #f #f #t #t + (make-ctdesc '() '() '() #t #t '() #f #f) (make-rtdesc '() #t #f))))) (set! $make-base-modules (lambda () @@ -5974,9 +6320,9 @@ (global-extend 'core '$foreign-procedure (lambda (e r w ae) (syntax-case e () - ((_ conv foreign-name foreign-addr (arg ...) result) + ((_ conv* foreign-name foreign-addr (arg ...) result) (build-foreign-procedure ae - (strip (syntax conv) w) + (strip (syntax conv*) w) (strip (syntax foreign-name) w) (chi (syntax foreign-addr) r w) (map (lambda (x) (strip x w)) (syntax (arg ...))) @@ -5985,9 +6331,9 @@ (global-extend 'core '$foreign-callable (lambda (e r w ae) (syntax-case e () - ((_ conv proc (arg ...) result) + ((_ conv* proc (arg ...) result) (build-foreign-callable ae - (strip (syntax conv) w) + (strip (syntax conv*) w) (chi (syntax proc) r w) (map (lambda (x) (strip x w)) (syntax (arg ...))) (strip (syntax result) w)))))) @@ -6409,7 +6755,7 @@ (record-writer (type-descriptor compile-time-value) (lambda (x p wr) (display "#" p))) (record-writer syntax-object-rtd ; from types.ss @@ -6469,7 +6815,7 @@ [(primitive) #t] [(global immutable-global) ($top-level-bound? (binding-value b))] [(library-global) - (invoke-library (car (binding-value b))) + (invoke-loaded-library (car (binding-value b))) ($top-level-bound? (cdr (binding-value b)))] [else #f])))] [else #f]))) @@ -6498,7 +6844,7 @@ [(primitive) (#3%$top-level-value (binding-value b))] [(global immutable-global) (#2%$top-level-value (binding-value b))] [(library-global) - (invoke-library (car (binding-value b))) + (invoke-loaded-library (car (binding-value b))) (#2%$top-level-value (cdr (binding-value b)))] [else ($oops 'top-level-value "~s is not a variable" sym)])))] [else ($oops #f "variable ~s is not bound" sym)]))) @@ -6748,7 +7094,7 @@ (unless (environment? env) ($oops 'copy-environment "~s is not an environment" env)) (unless (and (list? syms) (andmap symbol? syms)) - ($oops 'copy-environment "~s is not an environment" env)) + ($oops 'copy-environment "~s is not a list of symbols" syms)) (copy-environment env mutable? syms)]))) (set! interaction-environment @@ -6774,10 +7120,17 @@ (initial-mode-set '(eval) #f) (env-top-ribcage env) #f))))))) - (let ([env ($make-environment (gensym) #t)]) - (for-each (eval-import (datum->syntax #'* (cons 'environment import-spec*)) env) import-spec*) - (top-ribcage-mutable?-set! (env-top-ribcage env) #f) - env))) + (with-exception-handler + (lambda (c) + (raise-continuable + (if (who-condition? c) + c + (condition (make-who-condition 'environment) c)))) + (lambda () + (let ([env ($make-environment (gensym) #t)]) + (for-each (eval-import (datum->syntax #'* (cons 'environment import-spec*)) env) import-spec*) + (top-ribcage-mutable?-set! (env-top-ribcage env) #f) + env))))) (set-who! #(r6rs: eval) (lambda (x env) @@ -6933,6 +7286,15 @@ (lambda (x) ($make-compile-time-value x))) +(set-who! compile-time-value? + (lambda (x) + ($compile-time-value? x))) + +(set-who! compile-time-value-value + (lambda (x) + (unless ($compile-time-value? x) ($oops who "~s is not a compile-time value" x)) + ($compile-time-value-value x))) + (set! $syntax->src (lambda (x) (let f ([x x] [n 0] [k (lambda () (values #f #t))]) @@ -7117,6 +7479,7 @@ (current-expand sc-expand) +(begin ;;; syntax-rules/syntax-case aux keywords (define-syntax ... (lambda (x) @@ -7252,7 +7615,7 @@ #`(cond #,@(map clause-clause (sort-em (map parse-clause clause*))) . #,els?))) (syntax-case x (else) [(_ m1 ... [else e1 e2 ...]) (helper #'(m1 ...) #'([else e1 e2 ...]))] - [(_ m1 ...) (helper #'(m1 ...) #'())]))) + [(_ m1 m2 ...) (helper #'(m1 m2 ...) #'())]))) (define-syntax do (lambda (orig-x) @@ -7520,62 +7883,71 @@ (define-syntax $case (lambda (x) + (define-record-type clause + (nongenerative) + (fields (mutable keys) (immutable body))) + (define parse-clause + (lambda (atomic-keys?) + (lambda (clause) + (syntax-case clause () + ; a case clause eventually expands into an exclusive-cond clause. the e1 e2 ... body + ; structure must remain intact so exclusive-cond can use e1's profile count, if any, + ; to determine the clause's position in the output. but naively leaving e1 e2 ... + ; in place results in case inappropriately supporting cond's => syntax, so we explicitly + ; weed out uses of => here. + [(k arrow e1 e2 ...) + (and (identifier? #'arrow) (free-identifier=? #'arrow #'=>)) + (syntax-error #'arrow "misplaced aux keyword")] + [((k ...) e1 e2 ...) (make-clause #'(k ...) #'(e1 e2 ...))] + [(k e1 e2 ...) atomic-keys? (make-clause #'(k) #'(e1 e2 ...))] + [_ (syntax-error clause "invalid case clause")])))) + (define trim-keys! + (let ([ht (make-hashtable equal-hash equal?)]) + (lambda (clause) + ; remove keys already seen in the same or a previous clause. we must remove + ; keys seen in a previous clause before expanding to exclusive-cond, which + ; might reorder clauses, and removing those in the same clause doesn't do any + ; harm and might be beneficial if the compiler doesn't do it for us. + (clause-keys-set! clause + (let f ([keys (clause-keys clause)]) + (if (null? keys) + '() + (let ([key (car keys)]) + (let ([datum-key (syntax->datum key)]) + (if (hashtable-ref ht datum-key #f) + (f (cdr keys)) + (begin + (hashtable-set! ht datum-key #t) + (cons key (f (cdr keys))))))))))))) (define helper - (lambda (mem key-expr clause* els?) - (define-record-type clause - (nongenerative) - (fields (mutable keys) (immutable body))) - (define parse-clause - (lambda (clause) - (syntax-case clause () - [((k ...) e1 e2 ...) (make-clause #'(k ...) #'(e1 e2 ...))] - [(k e1 e2 ...) (make-clause #'(k) #'(e1 e2 ...))] - [_ (syntax-error clause "invalid case clause")]))) - (define emit - (lambda (kcond clause*) - #`(let ([t #,key-expr]) - (#,kcond - #,@(map (lambda (clause) - #`[(#,mem t '#,(clause-keys clause)) #,@(clause-body clause)]) - clause*) - . #,els?)))) - (let ([clause* (map parse-clause clause*)]) - (if ($profile-source-data?) - (let () - (define ht (make-hashtable equal-hash equal?)) - (define trim-keys! - (lambda (clause) - (clause-keys-set! clause - (let f ([keys (clause-keys clause)]) - (if (null? keys) - '() - (let ([key (car keys)]) - (let ([datum-key (syntax->datum key)]) - (if (hashtable-ref ht datum-key #f) - (f (cdr keys)) - (begin - (hashtable-set! ht datum-key #t) - (cons key (f (cdr keys)))))))))))) - (for-each trim-keys! clause*) - (emit #'exclusive-cond clause*)) - (emit #'cond clause*))))) + (lambda (mem atomic-keys? key-expr clause* else*) + (let ([clause* (map (parse-clause atomic-keys?) clause*)]) + (for-each trim-keys! clause*) + #`(let ([t #,key-expr]) + (exclusive-cond + #,@(map (lambda (clause) + ; the compiler reduces memv or member calls like those we produce here + ; to less expensive code (using memq or eqv? or eq?) when the elements + ; of the constant second argument (keys in this case) allow. + #`[(#,mem t '#,(clause-keys clause)) #,@(clause-body clause)]) + ; we could remove keyless clauses here but don't because that would suppress + ; various compile-time errors in the clause body. cp0 will optimize away the + ; code we produce for keyless clauses anyway. + clause*) + #,@else*))))) (syntax-case x (else) - [(_ mem e clause ... [else e1 e2 ...]) - (helper #'mem #'e #'(clause ...) #'([else e1 e2 ...]))] - [(_ mem e clause ...) - (helper #'mem #'e #'(clause ...) #'())]))) + [(_ mem atomic-keys? e clause ... [else e1 e2 ...]) + (helper #'mem (datum atomic-keys?) #'e #'(clause ...) #'([else e1 e2 ...]))] + [(_ mem atomic-keys? e clause1 clause2 ...) + (helper #'mem (datum atomic-keys?) #'e #'(clause1 clause2 ...) #'())]))) (define-syntax r6rs:case - ; case in Chez Scheme allows atomic keys. rule them out here. - (syntax-rules (else) - [(_ e [(k** ...) e1* e2* ...] ... [else e1 e2 ...]) - ($case memv e [(k** ...) e1* e2* ...] ... [else e1 e2 ...])] - [(_ e [(k** ...) e1* e2* ...] ...) - ($case memv e [(k** ...) e1* e2* ...] ...)])) + (syntax-rules () + [(_ e clause1 clause2 ...) ($case memv #f e clause1 clause2 ...)])) (define-syntax case (syntax-rules () - [(_ e clause ...) ($case member e clause ...)])) + [(_ e clause1 clause2 ...) ($case member #t e clause1 clause2 ...)])) ;;; case aux keywords #;(define-syntax else ; defined above for cond @@ -8486,7 +8858,9 @@ (constant-case native-endianness [(little) 'utf-32le] [(big) 'utf-32be])])] - [else (and ($ftd? type) type)]))) + [else + (and (or ($ftd? type) ($ftd-as-box? type)) + type)]))) (define $fp-type->pred (lambda (type) @@ -8512,30 +8886,51 @@ [else ($oops '$fp-type->pred "unrecognized type ~s" type)])]))) (define $filter-conv - (lambda (who conv) + (lambda (who conv*) (define squawk (lambda (x) (syntax-error x (format "invalid ~s convention" who)))) - (let ([c (syntax->datum conv)]) - (if (not c) - #f - (case ($target-machine) - [(i3nt ti3nt) - (case c - [(__stdcall) #'i3nt-stdcall] - [(__cdecl) #f] - [(__com) #'i3nt-com] - [else (squawk conv)])] - [(ppcnt) - (case c - [(__stdcall __cdecl) #f] - [else (squawk conv)])] - [else (squawk conv)]))))) + (let loop ([conv* conv*] [accum '()] [keep-accum '()]) + (cond + [(null? conv*) (datum->syntax #'filter-conv keep-accum)] + [else + (let* ([orig-c (car conv*)] + [c (syntax->datum orig-c)] + [c (cond + [(not c) #f] + [(eq? c '__collect_safe) 'adjust-active] + [else + (case ($target-machine) + [(i3nt ti3nt) + (case c + [(__stdcall) 'i3nt-stdcall] + [(__cdecl) #f] + [(__com) 'i3nt-com] + [else (squawk orig-c)])] + [(ppcnt) + (case c + [(__stdcall __cdecl) #f] + [else (squawk orig-c)])] + [else (squawk orig-c)])])]) + (when (member c accum) + (syntax-error orig-c (format "redundant ~s convention" who))) + (unless (or (null? accum) + (eq? c 'adjust-active) + (and (eq? 'adjust-active (car accum)) + (null? (cdr accum)))) + (syntax-error orig-c (format "conflicting ~s convention" who))) + (loop (cdr conv*) (cons c accum) + (if c + (cons c keep-accum) + keep-accum)))])))) (define $make-foreign-procedure - (lambda (conv foreign-name ?foreign-addr type* result-type) + (lambda (who conv* foreign-name ?foreign-addr type* result-type) (let ([unsafe? (= (optimize-level) 3)]) - (with-syntax ([conv conv] + (define (check-strings-allowed) + (when (memq 'adjust-active (syntax->datum conv*)) + ($oops who "string argument not allowed with __collect_safe procedure"))) + (with-syntax ([conv* conv*] [foreign-name foreign-name] [?foreign-addr ?foreign-addr] [(t ...) (generate-temporaries type*)]) @@ -8577,6 +8972,7 @@ (err ($moi) x)))) (unsigned-32))])] [(utf-8) + (check-strings-allowed) #`(() ((if (eq? x #f) x @@ -8587,6 +8983,7 @@ (err ($moi) x))))) (u8*))] [(utf-16le) + (check-strings-allowed) #`(() ((if (eq? x #f) x @@ -8597,6 +8994,7 @@ (err ($moi) x))))) (u16*))] [(utf-16be) + (check-strings-allowed) #`(() ((if (eq? x #f) x @@ -8607,6 +9005,7 @@ (err ($moi) x))))) (u16*))] [(utf-32le) + (check-strings-allowed) #`(() ((if (eq? x #f) x @@ -8617,6 +9016,7 @@ (err ($moi) x))))) (u32*))] [(utf-32be) + (check-strings-allowed) #`(() ((if (eq? x #f) x @@ -8627,10 +9027,11 @@ (err ($moi) x))))) (u32*))] [else #f]) - (if ($ftd? type) - #`(#,(if unsafe? #'() #`((unless (record? x '#,type) (err ($moi) x)))) - (x) - (#,type)) + (if (or ($ftd? type) ($ftd-as-box? type)) + (let ([ftd (if ($ftd? type) type (unbox type))]) + #`(#,(if unsafe? #'() #`((unless (record? x '#,ftd) (err ($moi) x)))) + (x) + (#,type))) (with-syntax ([pred (datum->syntax #'foreign-procedure ($fp-type->pred type))] [type (datum->syntax #'foreign-procedure type)]) #`(#,(if unsafe? #'() #'((unless (pred x) (err ($moi) x)))) @@ -8662,15 +9063,36 @@ [(unsigned-48) #`((lambda (x) (mod x #x1000000000000)) unsigned-64)] [(integer-56) #`((lambda (x) (mod0 x #x100000000000000)) integer-64)] [(unsigned-56) #`((lambda (x) (mod x #x100000000000000)) unsigned-64)] - [else #`(values #,(datum->syntax #'foreign-procedure result-type))])]) - #`(let ([p ($foreign-procedure conv foreign-name ?foreign-addr (arg ... ...) result)] + [else + (cond + [($ftd-as-box? result-type) + ;; Return void, since an extra first argument receives the result, + ;; but tell `$foreign-procedure` that the result is actually an & form + #`((lambda (r) (void)) #,(datum->syntax #'foreign-procedure result-type))] + [else + #`(values #,(datum->syntax #'foreign-procedure result-type))])])] + [([extra ...] [extra-arg ...] [extra-check ...]) + ;; When the result type is `(& )`, the `$foreign-procedure` result + ;; expects an extra argument as a `(* )` that it uses to store the + ;; foreign-procedure result, and it returns void. The extra argument is made + ;; explicit for `$foreign-procedure`, and the return type is preserved as-is + ;; to let `$foreign-procedure` know that it needs to fill the first argument. + (cond + [($ftd-as-box? result-type) + #`([&-result] + [#,(unbox result-type)] + #,(if unsafe? + #`[] + #`[(unless (record? &-result '#,(unbox result-type)) (err ($moi) &-result))]))] + [else #'([] [] [])])]) + #`(let ([p ($foreign-procedure conv* foreign-name ?foreign-addr (extra-arg ... arg ... ...) result)] #,@(if unsafe? #'() #'([err (lambda (who x) ($oops (or who foreign-name) "invalid foreign-procedure argument ~s" x))]))) - (lambda (t ...) check ... ... (result-filter (p actual ... ...))))))))) + (lambda (extra ... t ...) extra-check ... check ... ... (result-filter (p extra ... actual ... ...))))))))) (define-syntax foreign-procedure (lambda (x) @@ -8680,25 +9102,29 @@ (or ($fp-filter-type ($expand-fp-ftype 'foreign-procedure what r x) result?) (syntax-error x (format "invalid foreign-procedure ~s type specifier" what)))))) (syntax-case x () - [(_ ?name (arg ...) result) - #'(foreign-procedure #f ?name (arg ...) result)] - [(_ conv ?name (arg ...) result) + [(_ c ... ?name (arg ...) result) (lambda (r) - ($make-foreign-procedure - ($filter-conv 'foreign-procedure #'conv) + ($make-foreign-procedure 'foreign-procedure + ($filter-conv 'foreign-procedure #'(c ...)) (let ([x (datum ?name)]) (and (string? x) x)) #'($foreign-entry ?name) (map (lambda (x) (filter-type r x #f)) #'(arg ...)) (filter-type r #'result #t)))]))) (define $make-foreign-callable - (lambda (who conv ?proc type* result-type) - (when (eq? conv 'i3nt-com) ($oops who "unsupported convention ~s" conv)) + (lambda (who conv* ?proc type* result-type) + (for-each (lambda (c) + (when (eq? (syntax->datum c) 'i3nt-com) + ($oops who "unsupported convention ~s" c))) + (syntax->list conv*)) (let ([unsafe? (= (optimize-level) 3)]) - (with-syntax ([conv conv] [?proc ?proc]) + (define (check-strings-allowed) + (when (memq 'adjust-active (syntax->datum conv*)) + ($oops who "string result not allowed with __collect_safe callable"))) + (with-syntax ([conv* conv*] [?proc ?proc]) (with-syntax ([((actual (t ...) (arg ...)) ...) (map - (lambda (type) + (lambda (type) (or (case type [(boolean) (with-syntax ([(x) (generate-temporaries #'(*))]) @@ -8788,12 +9214,13 @@ (with-syntax ([(x) (generate-temporaries #'(*))]) #`(x (x) (#,(datum->syntax #'foreign-callable type)))))) type*)] - [(result-filter result) + [(result-filter result [extra-arg ...] [extra ...]) (case result-type [(boolean) #`((lambda (x) (if x 1 0)) #,(constant-case int-bits [(32) #'integer-32] - [(64) #'integer-64]))] + [(64) #'integer-64]) + [] [])] [(char) #`((lambda (x) #,(if unsafe? @@ -8802,7 +9229,8 @@ (let ([x (char->integer x)]) (and (fx<= x #xff) x))) (err x)))) - unsigned-8)] + unsigned-8 + [] [])] [(wchar) (constant-case wchar-bits [(16) #`((lambda (x) @@ -8812,15 +9240,18 @@ (let ([x (char->integer x)]) (and (fx<= x #xffff) x))) (err x)))) - unsigned-16)] + unsigned-16 + [] [])] [(32) #`((lambda (x) #,(if unsafe? #'(char->integer x) #'(if (char? x) (char->integer x) (err x)))) - unsigned-16)])] + unsigned-16 + [] [])])] [(utf-8) + (check-strings-allowed) #`((lambda (x) (if (eq? x #f) x @@ -8829,8 +9260,10 @@ #'(if (string? x) ($fp-string->utf8 x) (err x))))) - u8*)] + u8* + [] [])] [(utf-16le) + (check-strings-allowed) #`((lambda (x) (if (eq? x #f) x @@ -8839,8 +9272,10 @@ #'(if (string? x) ($fp-string->utf16 x 'little) (err x))))) - u16*)] + u16* + [] [])] [(utf-16be) + (check-strings-allowed) #`((lambda (x) (if (eq? x #f) x @@ -8849,8 +9284,10 @@ #'(if (string? x) ($fp-string->utf16 x 'big) (err x))))) - u16*)] + u16* + [] [])] [(utf-32le) + (check-strings-allowed) #`((lambda (x) (if (eq? x #f) x @@ -8859,8 +9296,10 @@ #'(if (string? x) ($fp-string->utf32 x 'little) (err x))))) - u32*)] + u32* + [] [])] [(utf-32be) + (check-strings-allowed) #`((lambda (x) (if (eq? x #f) x @@ -8869,31 +9308,47 @@ #'(if (string? x) ($fp-string->utf32 x 'big) (err x))))) - u32*)] + u32* + [] [])] [else - (if ($ftd? result-type) - (with-syntax ([type (datum->syntax #'foreign-callable result-type)]) - #`((lambda (x) - #,@(if unsafe? #'() #'((unless (record? x 'type) (err x)))) - x) - type)) - (with-syntax ([pred (datum->syntax #'foreign-callable ($fp-type->pred result-type))] - [type (datum->syntax #'foreign-callable result-type)]) - #`((lambda (x) - #,@(if unsafe? #'() #'((unless (pred x) (err x)))) - x) - type)))])]) - ; use a gensym to avoid giving the procedure a confusing namej + (cond + [($ftd? result-type) + (with-syntax ([type (datum->syntax #'foreign-callable result-type)]) + #`((lambda (x) + #,@(if unsafe? #'() #'((unless (record? x 'type) (err x)))) + x) + type + [] []))] + [($ftd-as-box? result-type) + ;; callable receives an extra pointer argument to fill with the result; + ;; we add this type to `$foreign-callable` as an initial address argument, + ;; which may be actually provided by the caller or synthesized by the + ;; back end, depending on the type and architecture + (with-syntax ([type (datum->syntax #'foreign-callable result-type)] + [ftd (datum->syntax #'foreign-callable (unbox result-type))]) + #`((lambda (x) (void)) ; callable result is ignored + type + [ftd] + [&-result]))] + [else + (with-syntax ([pred (datum->syntax #'foreign-callable ($fp-type->pred result-type))] + [type (datum->syntax #'foreign-callable result-type)]) + #`((lambda (x) + #,@(if unsafe? #'() #'((unless (pred x) (err x)))) + x) + type + [] []))])])]) + ; use a gensym to avoid giving the procedure a confusing name (with-syntax ([p (datum->syntax #'foreign-callable (gensym))]) - #`($foreign-callable conv + #`($foreign-callable conv* (let ([p ?proc]) (define (err x) ($oops 'foreign-callable "invalid return value ~s from ~s" x p)) #,@(if unsafe? #'() #'((unless (procedure? p) ($oops 'foreign-callable "~s is not a procedure" p)))) - (lambda (t ... ...) (result-filter (p actual ...)))) - (arg ... ...) + (lambda (extra ... t ... ...) (result-filter (p extra ... actual ...)))) + (extra-arg ... arg ... ...) result))))))) (define-syntax foreign-callable @@ -8904,12 +9359,10 @@ (or ($fp-filter-type ($expand-fp-ftype 'foreign-callable what r x) result?) (syntax-error x (format "invalid foreign-callable ~s type specifier" what)))))) (syntax-case x () - [(_ proc (arg ...) result) - #'(foreign-callable #f proc (arg ...) result)] - [(_ conv ?proc (arg ...) result) + [(_ c ... ?proc (arg ...) result) (lambda (r) ($make-foreign-callable 'foreign-callable - ($filter-conv 'foreign-callable #'conv) + ($filter-conv 'foreign-callable #'(c ...)) #'?proc (map (lambda (x) (filter-type r x #f)) #'(arg ...)) (filter-type r #'result #t)))]))) @@ -9221,6 +9674,7 @@ (define (parse-field x i) (syntax-case x (immutable mutable) [(immutable field-name accessor-name) + (and (identifier? #'field-name) (identifier? #'accessor-name)) (make-field-desc (datum field-name) i @@ -9228,6 +9682,7 @@ #'accessor-name #f)] [(mutable field-name accessor-name mutator-name) + (and (identifier? #'field-name) (identifier? #'accessor-name) (identifier? #'mutator-name)) (make-field-desc (datum field-name) i @@ -9235,10 +9690,12 @@ #'accessor-name #'mutator-name)] [(immutable field-name) + (identifier? #'field-name) (make-field-desc (datum field-name) i x (construct-name name name "-" #'field-name) #f)] [(mutable field-name) + (identifier? #'field-name) (make-field-desc (datum field-name) i x (construct-name name name "-" #'field-name) (construct-name name name "-" #'field-name "-set!"))] @@ -9844,3 +10301,4 @@ (set-who! $annotation-options (make-enumeration '(debug profile))) (set-who! $make-annotation-options (enum-set-constructor $annotation-options)) +) diff -Nru chezscheme-9.5+dfsg/s/ta6nb.def chezscheme-9.5.4+dfsg/s/ta6nb.def --- chezscheme-9.5+dfsg/s/ta6nb.def 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/ta6nb.def 2020-08-31 02:35:12.000000000 +0000 @@ -24,7 +24,7 @@ (define-constant size_t-bits 64) (define-constant ptrdiff_t-bits 64) (define-constant wchar-bits 32) -(define-constant time-t-bits 32) +(define-constant time-t-bits 64) (define-constant max-float-alignment 8) (define-constant max-integer-alignment 8) (define-constant asm-arg-reg-max 5) diff -Nru chezscheme-9.5+dfsg/s/ta6ob.def chezscheme-9.5.4+dfsg/s/ta6ob.def --- chezscheme-9.5+dfsg/s/ta6ob.def 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/ta6ob.def 2020-08-31 02:35:12.000000000 +0000 @@ -24,7 +24,7 @@ (define-constant size_t-bits 64) (define-constant ptrdiff_t-bits 64) (define-constant wchar-bits 32) -(define-constant time-t-bits 32) +(define-constant time-t-bits 64) (define-constant max-float-alignment 8) (define-constant max-integer-alignment 8) (define-constant asm-arg-reg-max 5) diff -Nru chezscheme-9.5+dfsg/s/ti3nt.def chezscheme-9.5.4+dfsg/s/ti3nt.def --- chezscheme-9.5+dfsg/s/ti3nt.def 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/ti3nt.def 2020-08-31 02:35:12.000000000 +0000 @@ -38,8 +38,8 @@ (define-constant typedef-u16 "unsigned short") (define-constant typedef-i32 "int") (define-constant typedef-u32 "unsigned int") -(define-constant typedef-i64 "__int64") -(define-constant typedef-u64 "unsigned __int64") +(define-constant typedef-i64 "long long") +(define-constant typedef-u64 "unsigned long long") (define-constant typedef-string-char "unsigned int") (define-constant thread-handle-uptrs 2) (define-constant native-endianness 'little) diff -Nru chezscheme-9.5+dfsg/s/trace.ss chezscheme-9.5.4+dfsg/s/trace.ss --- chezscheme-9.5+dfsg/s/trace.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/trace.ss 2020-08-31 02:35:12.000000000 +0000 @@ -1,4 +1,3 @@ -"trace.ss" ;;; trace.ss ;;; Copyright 1984-2017 Cisco Systems, Inc. ;;; diff -Nru chezscheme-9.5+dfsg/s/update-revision chezscheme-9.5.4+dfsg/s/update-revision --- chezscheme-9.5+dfsg/s/update-revision 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/update-revision 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,22 @@ +#!/bin/sh +if [ -d ../../.git ]; then + git describe --always --exclude='*' --abbrev=40 --dirty + echo 'git' +elif [ -d ../../.hg ]; then + DIRTY="$(hg status -n --color never --pager never | head -1)" + hg log --limit 1 --template '{node}' --pager never + if [ -n "${DIRTY}" ]; then + echo '-dirty' + else + echo '' + fi + echo 'hg' +elif [ -f ../../.hg_archival.txt ]; then + # hg archive and hgweb embed this file by default (see .hgrc archivemeta) + sed -n 's/^node: \(.*\)/\1/p' < ../../.hg_archival.txt + echo 'hg' +else + # use export-subst git attribute to populate revision for git archive + echo '15902558e93fe7402d95c97e0c673189ec52e675' + echo 'git' +fi diff -Nru chezscheme-9.5+dfsg/s/x86_64.ss chezscheme-9.5.4+dfsg/s/x86_64.ss --- chezscheme-9.5+dfsg/s/x86_64.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/x86_64.ss 2020-08-31 02:35:12.000000000 +0000 @@ -28,7 +28,7 @@ [%xp %r12 #t 12] [%ts %rax %Cretval #f 0] [%td %rbx #t 3] - [%ac1 %r10 #f 10] + [%ac1 %r10 %deact #f 10] [%yp %r11 #f 11] [%cp %r15 #t 15] [#;%ret %rsi #t 6] @@ -57,7 +57,7 @@ [%xp %r12 #t 12] [%ts %rax %Cretval #f 0] [%td %rbx #t 3] - [%ac1 %r10 #f 10] + [%ac1 %r10 %deact #f 10] [%yp %r11 #f 11] [%cp %r15 #t 15] [#;%ret %r8 %Carg5 #f 8] @@ -824,6 +824,20 @@ (safe-assert (eq? z %rax)) `(set! ,(make-live-info) ,z (asm ,info ,asm-get-tc))]) + (define-instruction value activate-thread + [(op (z ur)) + (safe-assert (eq? z %rax)) ; see get-tc + `(set! ,(make-live-info) ,z (asm ,info ,asm-activate-thread))]) + + (define-instruction effect deactivate-thread + [(op) + `(asm ,info ,asm-deactivate-thread)]) + + (define-instruction effect unactivate-thread + [(op (x ur)) + (safe-assert (eq? x %Carg1)) + `(asm ,info ,asm-unactivate-thread ,x)]) + ; TODO: risc architectures will have to take info-asmlib-save-ra? into account (define-instruction value asmlibcall [(op (z ur)) @@ -925,6 +939,15 @@ [(op (x ur) (y ur) (w imm32)) `(asm ,info ,asm-locked-decr ,x ,y ,w)]) + (define-instruction effect (cas) + [(op (x ur) (y ur) (w imm32) (old ur) (new ur)) + (let ([urax (make-precolored-unspillable 'urax %rax)]) + (with-output-language (L15d Effect) + (seq + `(set! ,(make-live-info) ,urax ,old) + ;; NB: may modify %rax: + `(asm ,info ,asm-locked-cmpxchg ,x ,y ,w ,urax ,new))))]) + (define-instruction effect (pause) [(op) `(asm ,info ,asm-pause)]) @@ -975,14 +998,14 @@ asm-direct-jump asm-return-address asm-jump asm-conditional-jump asm-data-label asm-rp-header asm-lea1 asm-lea2 asm-indirect-call asm-condition-code asm-fl-cvt asm-fl-store asm-fl-load asm-flt asm-trunc asm-div - asm-exchange asm-pause asm-locked-incr asm-locked-decr + asm-exchange asm-pause asm-locked-incr asm-locked-decr asm-locked-cmpxchg asm-flop-2 asm-flsqrt asm-c-simple-call - asm-save-flrv asm-restore-flrv asm-return asm-size + asm-save-flrv asm-restore-flrv asm-return asm-c-return asm-size asm-enter asm-foreign-call asm-foreign-callable asm-inc-profile-counter asm-inc-cc-counter asm-read-time-stamp-counter asm-read-performance-monitoring-counter ; threaded version specific - asm-get-tc + asm-get-tc asm-activate-thread asm-deactivate-thread asm-unactivate-thread ; machine dependent exports asm-sext-rax->rdx asm-store-single->double asm-kill asm-get-double) @@ -1113,6 +1136,8 @@ (define-op locked-dec (#;b *) locked-unary-op #b1111111 #b001) (define-op locked-inc (#;b *) locked-unary-op #b1111111 #b000) + (define-op locked-cmpxchg (*) locked-cmpxchg-op) + ; also do inc-reg dec-reg ; the following are forms of the call instruction and push the return address @@ -1256,6 +1281,21 @@ (ax-ea-sib dest-ea) (ax-ea-addr-disp dest-ea)))) + (define locked-cmpxchg-op + (lambda (op size dest-ea new-reg code*) + (begin + (emit-code (op dest-ea new-reg code*) + (build byte #xf0) ; lock prefix + (ax-ea-rex (if (eq? size 'quad) 1 0) dest-ea new-reg size) + (build byte #x0f) + (build byte + (byte-fields + [1 #b1011000] + [0 (ax-size-code size)])) + (ax-ea-modrm-reg dest-ea new-reg) + (ax-ea-sib dest-ea) + (ax-ea-addr-disp dest-ea))))) + (define pushi-op (lambda (op imm-ea code*) (if (ax-range? -128 imm-ea 127) @@ -1991,6 +2031,10 @@ (emit addi '(imm 8) (cons 'reg %sp) (emit ret '())))) + (define asm-c-return + (lambda (info) + (emit ret '()))) + (define asm-locked-incr (lambda (code* base index offset) (let ([dest (build-mem-opnd base index offset)]) @@ -2001,6 +2045,11 @@ (let ([dest (build-mem-opnd base index offset)]) (emit locked-dec dest code*)))) + (define asm-locked-cmpxchg + (lambda (code* base index offset old-v new-v) + (let ([dest (build-mem-opnd base index offset)]) + (emit locked-cmpxchg dest (cons 'reg new-v) code*)))) + (define asm-pause (lambda (code*) (emit pause code*))) @@ -2215,6 +2264,21 @@ (lambda (code* jmp-reg) ; dest is ignored, since it is always the first C argument (rax in this case) (asm-helper-call code* target jmp-reg)))) + (define asm-activate-thread + (let ([target `(x86_64-call 0 (entry ,(lookup-c-entry activate-thread)))]) + (lambda (code* jmp-reg) + (asm-helper-call code* target jmp-reg)))) + + (define asm-deactivate-thread + (let ([target `(x86_64-call 0 (entry ,(lookup-c-entry deactivate-thread)))]) + (lambda (code*) + (asm-helper-call code* target %rax)))) + + (define asm-unactivate-thread + (let ([target `(x86_64-call 0 (entry ,(lookup-c-entry unactivate-thread)))]) + (lambda (code* arg-reg) + (asm-helper-call code* target %rax)))) + (define asm-indirect-call (lambda (code* t . ignore) ; NB: c-call is already required to be a register or memory operand, so @@ -2408,6 +2472,134 @@ (define make-vint (lambda () (vector %Carg1 %Carg2 %Carg3 %Carg4 %Carg5 %Carg6))) (define make-vfp (lambda () (vector %Cfparg1 %Cfparg2 %Cfparg3 %Cfparg4 %Cfparg5 %Cfparg6 %Cfparg7 %Cfparg8))))) + (define (align n size) + (fxlogand (fx+ n (fx- size 1)) (fx- size))) + + (define (classify-type type) + (nanopass-case (Ltype Type) type + [(fp-ftd& ,ftd) (classify-eightbytes ftd)] + [else #f])) + + (define (classified-size type) + (nanopass-case (Ltype Type) type + [(fp-ftd& ,ftd) ($ftd-size ftd)] + [else #f])) + + ;; classify-eightbytes: returns '(memory) or a nonemtpy list of 'integer/'sse + (if-feature windows + ;; Windows: either passed in one register or not + (define (classify-eightbytes ftd) + (cond + [($ftd-compound? ftd) + (if (memv ($ftd-size ftd) '(1 2 4 8)) + '(integer) + '(memory))] + [(eq? 'float (caar ($ftd->members ftd))) + '(sse)] + [else '(integer)])) + ;; Non-Windows: SYSV ABI is a more general classification of + ;; 8-byte segments into 'integer, 'sse, or 'memory modes + (define (classify-eightbytes ftd) + (define (merge t1 t2) + (cond + [(eq? t1 t2) t1] + [(eq? t1 'no-class) t2] + [(eq? t2 'no-class) t1] + [(eq? t1 'memory) 'memory] + [(eq? t2 'memory) 'memory] + [else 'integer])) + (cond + [(or (> ($ftd-size ftd) 16) ; more than 2 eightbytes => passed in memory + (fx= 0 ($ftd-size ftd))) + '(memory)] + [else + (let ([classes (make-vector (fxsrl (align ($ftd-size ftd) 8) 3) 'no-class)]) + (let loop ([mbrs ($ftd->members ftd)]) + (cond + [(null? mbrs) + (vector->list classes)] + [else + (let ([kind (caar mbrs)] + [size (cadar mbrs)] + [offset (caddar mbrs)]) + (cond + [(not (fx= offset (align offset size))) + ;; misaligned + '(memory)] + [else + (let* ([pos (fxsrl offset 3)] + [class (vector-ref classes pos)] + [new-class (merge class (if (eq? kind 'float) 'sse 'integer))]) + (cond + [(eq? new-class 'memory) + '(memory)] + [else + (vector-set! classes pos new-class) + (loop (cdr mbrs))]))]))])))]))) + + (define (count v l) + (cond + [(null? l) 0] + [(eq? (car l) v) (fx+ 1 (count v (cdr l)))] + [else (count v (cdr l))])) + + ;; A result is put in registers if it has up to two + ;; eightbytes, each 'integer or 'sse. On Windows, + ;; `result-classes` always has only one item. + (define (result-fits-in-registers? result-classes) + (and result-classes + (not (eq? 'memory (car result-classes))) + (or (null? (cdr result-classes)) + (null? (cddr result-classes))))) + + ;; An argument is put in registeres depending on how many + ;; registers are left + (define (pass-here-by-stack? classes iint ints ifp fps) + (or (eq? 'memory (car classes)) + (fx> (fx+ iint ints) 6) + (fx> (fx+ ifp fps) 8))) + + (module (push-registers pop-registers push-registers-size) + (define (move-registers regs load?) + (define vfp (make-vfp)) + (define (fp-reg? reg) + (let loop ([i (fx- (vector-length vfp) 1)]) + (or (eq? reg (vector-ref vfp i)) + (and (fx> i 0) (loop (fx- i 1)))))) + (with-output-language (L13 Effect) + (let loop ([regs regs] [offset 0]) + (let* ([reg (car regs)] + [e (cond + [(fp-reg? reg) + `(inline ,(make-info-loadfl reg) ,(if load? %load-double %store-double) ,%sp ,%zero (immediate ,offset))] + [load? `(set! ,reg ,(%mref ,%sp ,offset))] + [else `(set! ,(%mref ,%sp ,offset) ,reg)])] + [regs (cdr regs)]) + (if (null? regs) + e + `(seq ,e ,(loop regs (fx+ offset 8)))))))) + (define (push-registers-size regs) + (align (fx* 8 (length regs)) 16)) + (define (push-registers regs) + (with-output-language (L13 Effect) + (%seq + (set! ,%sp ,(%inline - ,%sp (immediate ,(push-registers-size regs)))) + ,(move-registers regs #f)))) + (define (pop-registers regs) + (with-output-language (L13 Effect) + (%seq + ,(move-registers regs #t) + (set! ,%sp ,(%inline + ,%sp (immediate ,(push-registers-size regs)))))))) + + (define (as-c-call e) + (if-feature windows + (with-output-language (L13 Effect) + (%seq + (set! ,%sp ,(%inline - ,%sp (immediate 32))) + ,e + (set! ,%sp ,(%inline + ,%sp (immediate 32))))) + e)) + (define asm-foreign-call (with-output-language (L13 Effect) (letrec ([load-double-stack @@ -2452,70 +2644,296 @@ ; x is a non-triv right-hand-side [else (%seq (set! ,ireg ,x) (set! ,ireg ,(%inline zext32 ,ireg)))])] [else `(set! ,ireg ,x)])))] + [load-content-stack + (lambda (offset len) + (lambda (x) ; requires var + (let loop ([offset offset] [x-offset 0] [len len]) + (cond + [(= len 0) `(nop)] + [(>= len 8) + `(seq + (set! ,(%mref ,%sp ,offset) (inline ,(make-info-load 'integer-64 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + ,(loop (fx+ offset 8) (fx+ x-offset 8) (fx- len 8)))] + [(>= len 4) + `(seq + (set! ,(%mref ,%sp ,offset) (inline ,(make-info-load 'integer-32 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + ,(loop (fx+ offset 4) (fx+ x-offset 4) (fx- len 4)))] + [(>= len 2) + `(seq + (set! ,(%mref ,%sp ,offset) (inline ,(make-info-load 'integer-16 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + ,(loop (fx+ offset 2) (fx+ x-offset 2) (fx- len 2)))] + [else + `(set! ,(%mref ,%sp ,offset) (inline ,(make-info-load 'integer-8 #f) + ,%load ,x ,%zero (immediate ,x-offset)))]))))] + [load-content-regs + (lambda (classes size iint ifp vint vfp) + (lambda (x) ; requires var + (let loop ([size size] [iint iint] [ifp ifp] [classes classes] [x-offset 0]) + (cond + [(null? classes) `(nop)] + [(eq? 'sse (car classes)) + (cond + [(fx= size 4) + ;; Must be the last element + `(inline ,(make-info-loadfl (vector-ref vfp ifp)) ,%load-single ,x ,%zero (immediate ,x-offset))] + [else + `(seq + (inline ,(make-info-loadfl (vector-ref vfp ifp)) ,%load-double ,x ,%zero (immediate ,x-offset)) + ,(loop (fx- size 8) iint (fx+ ifp 1) (cdr classes) (fx+ x-offset 8)))])] + ;; Remaining cases are integers: + [(>= size 8) + `(seq + (set! ,(vector-ref vint iint) (inline ,(make-info-load 'integer-64 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + ,(loop (fx- size 8) (fx+ iint 1) ifp (cdr classes) (fx+ x-offset 8)))] + ;; Remaining cases must be the last element + [else + (let loop ([reg (vector-ref vint iint)] [size size] [x-offset x-offset]) + (cond + [(= size 4) + `(set! ,reg (inline ,(make-info-load 'unsigned-32 #f) + ,%load ,x ,%zero (immediate ,x-offset)))] + [(= size 2) + `(set! ,reg (inline ,(make-info-load 'unsigned-16 #f) + ,%load ,x ,%zero (immediate ,x-offset)))] + [(= size 1) + `(set! ,reg (inline ,(make-info-load 'unsigned-8 #f) + ,%load ,x ,%zero (immediate ,x-offset)))] + [(> size 4) + ;; 5, 6, or 7: multiple steps to avoid reading too many bytes + (let ([tmp %rax]) ;; ?? ok to use %rax? + (%seq + ,(loop reg (fx- size 4) (fx+ x-offset 4)) + (set! ,reg ,(%inline sll ,reg (immediate 32))) + ,(loop tmp 4 x-offset) + (set! ,reg ,(%inline + ,reg ,tmp))))] + [else + ;; 3: multiple steps to avoid reading too many bytes + (let ([tmp %rax]) ;; ?? ok to use %rax? + (%seq + ,(loop reg (fx- size 2) (fx+ x-offset 2)) + (set! ,reg ,(%inline sll ,reg (immediate 16))) + ,(loop tmp 2 x-offset) + (set! ,reg ,(%inline + ,reg ,tmp))))]))]))))] + [add-regs + (lambda (ints ir vr regs) + (cond + [(fx= 0 ints) regs] + [else + (add-regs (fx- ints 1) (fx+ ir 1) vr + (cons (vector-ref vr ir) regs))]))] [do-args (lambda (types vint vfp) (if-feature windows - (let loop ([types types] [locs '()] [regs '()] [i 0] [isp 0]) + (let loop ([types types] [locs '()] [regs '()] [fp-regs '()] [i 0] [isp 0]) (if (null? types) - (values isp 0 locs regs) + (values isp 0 locs regs fp-regs) (nanopass-case (Ltype Type) (car types) [(fp-double-float) (if (< i 4) (let ([reg (vector-ref vint i)]) (loop (cdr types) (cons (load-double-reg2 (vector-ref vfp i) reg) locs) - (cons reg regs) (fx+ i 1) isp)) + (cons reg regs) (cons (vector-ref vfp i) fp-regs) (fx+ i 1) isp)) (loop (cdr types) (cons (load-double-stack isp) locs) - regs i (fx+ isp 8)))] + regs fp-regs i (fx+ isp 8)))] [(fp-single-float) (if (< i 4) (loop (cdr types) (cons (load-single-reg (vector-ref vfp i)) locs) - regs (fx+ i 1) isp) + regs (cons (vector-ref vfp i) fp-regs) (fx+ i 1) isp) (loop (cdr types) (cons (load-single-stack isp) locs) - regs i (fx+ isp 8)))] + regs fp-regs i (fx+ isp 8)))] + [(fp-ftd& ,ftd) + (cond + [(memv ($ftd-size ftd) '(1 2 4 8)) + ;; pass as value in register or as value on the stack + (cond + [(< i 4) + ;; pass as value in register + (cond + [(and (not ($ftd-compound? ftd)) + (eq? 'float (caar ($ftd->members ftd)))) + ;; float or double + (loop (cdr types) + (cons (load-content-regs '(sse) ($ftd-size ftd) i i vint vfp) locs) + (add-regs 1 i vint regs) (add-regs 1 i vfp fp-regs) (fx+ i 1) isp)] + [else + ;; integer + (loop (cdr types) + (cons (load-content-regs '(integer) ($ftd-size ftd) i i vint vfp) locs) + (add-regs 1 i vint regs) fp-regs(fx+ i 1) isp)])] + [else + ;; pass as value on the stack + (loop (cdr types) + (cons (load-content-stack isp ($ftd-size ftd)) locs) + regs fp-regs i (fx+ isp (align ($ftd-size ftd) 8)))])] + [else + ;; pass by reference in register or by reference on the stack + (cond + [(< i 4) + ;; pass by reference in a register + (let ([reg (vector-ref vint i)]) + (loop (cdr types) + (cons (load-int-reg (car types) reg) locs) + (cons reg regs) fp-regs (fx+ i 1) isp))] + [else + ;; pass by reference on the stack + (loop (cdr types) + (cons (load-int-stack isp) locs) + regs fp-regs i (fx+ isp 8))])])] [else (if (< i 4) (let ([reg (vector-ref vint i)]) (loop (cdr types) (cons (load-int-reg (car types) reg) locs) - (cons reg regs) + (cons reg regs) fp-regs (fx+ i 1) isp)) (loop (cdr types) (cons (load-int-stack isp) locs) - regs i (fx+ isp 8)))]))) - (let loop ([types types] [locs '()] [regs '()] [iint 0] [ifp 0] [isp 0]) + regs fp-regs i (fx+ isp 8)))]))) + (let loop ([types types] [locs '()] [regs '()] [fp-regs '()] [iint 0] [ifp 0] [isp 0]) (if (null? types) - (values isp ifp locs regs) + (values isp ifp locs regs fp-regs) (nanopass-case (Ltype Type) (car types) [(fp-double-float) (if (< ifp 8) (loop (cdr types) (cons (load-double-reg (vector-ref vfp ifp)) locs) - regs iint (fx+ ifp 1) isp) + regs (cons (vector-ref vfp ifp) fp-regs) iint (fx+ ifp 1) isp) (loop (cdr types) (cons (load-double-stack isp) locs) - regs iint ifp (fx+ isp 8)))] + regs fp-regs iint ifp (fx+ isp 8)))] [(fp-single-float) (if (< ifp 8) (loop (cdr types) (cons (load-single-reg (vector-ref vfp ifp)) locs) - regs iint (fx+ ifp 1) isp) + regs (cons (vector-ref vfp ifp) fp-regs) iint (fx+ ifp 1) isp) (loop (cdr types) (cons (load-single-stack isp) locs) - regs iint ifp (fx+ isp 8)))] + regs fp-regs iint ifp (fx+ isp 8)))] + [(fp-ftd& ,ftd) + (let* ([classes (classify-eightbytes ftd)] + [ints (count 'integer classes)] + [fps (count 'sse classes)]) + (cond + [(pass-here-by-stack? classes iint ints ifp fps) + ;; pass on the stack + (loop (cdr types) + (cons (load-content-stack isp ($ftd-size ftd)) locs) + regs fp-regs iint ifp (fx+ isp (align ($ftd-size ftd) 8)))] + [else + ;; pass in registers + (loop (cdr types) + (cons (load-content-regs classes ($ftd-size ftd) iint ifp vint vfp) locs) + (add-regs ints iint vint regs) (add-regs fps ifp vfp fp-regs) + (fx+ iint ints) (fx+ ifp fps) isp)]))] [else (if (< iint 6) (let ([reg (vector-ref vint iint)]) (loop (cdr types) (cons (load-int-reg (car types) reg) locs) - (cons reg regs) + (cons reg regs) fp-regs (fx+ iint 1) ifp isp)) (loop (cdr types) (cons (load-int-stack isp) locs) - regs iint ifp (fx+ isp 8)))])))))]) + regs fp-regs iint ifp (fx+ isp 8)))])))))]) + (define (add-deactivate adjust-active? t0 live* result-live* e) + (cond + [adjust-active? + (let ([save-and-restore + (lambda (regs e) + (cond + [(null? regs) e] + [else (%seq ,(push-registers regs) ,e ,(pop-registers regs))]))]) + (%seq + (set! ,%deact ,t0) + ,(save-and-restore (cons %deact live*) (as-c-call (%inline deactivate-thread))) + ,e + ,(save-and-restore result-live* (as-c-call `(set! ,%rax ,(%inline activate-thread))))))] + [else e])) + (define (add-save-fill-target fill-result-here? frame-size locs) + (cond + [fill-result-here? + ;; The callee isn't expecting a pointer to fill with the result. + ;; Stash the pointer as an extra argument, and then when the + ;; function returns, we'll move register content for the result + ;; into the pointer's target + (values (fx+ frame-size (constant ptr-bytes)) + (append locs + (list + (lambda (x) ; requires var + `(set! ,(%mref ,%sp ,frame-size) ,x)))))] + [else + (values frame-size locs)])) + (define (add-fill-result c-call saved-offset classes size) + (let loop ([classes classes] [offset 0] [iregs (reg-list %rax %rdx)] [fpregs (reg-list %Cfparg1 %Cfparg2)] [size size]) + (cond + [(null? classes) + `(seq + ,c-call + (set! ,%rcx ,(%mref ,%sp ,saved-offset)))] + [(eq? 'sse (car classes)) + `(seq + ,(loop (cdr classes) (fx+ offset 8) iregs (cdr fpregs) (fx- size 8)) + ,(case size + [(4) `(inline ,(make-info-loadfl (car fpregs)) ,%store-single ,%rcx ,%zero (immediate ,offset))] + [else `(inline ,(make-info-loadfl (car fpregs)) ,%store-double ,%rcx ,%zero (immediate ,offset))]))] + [else + `(seq + ,(loop (cdr classes) (fx+ offset 8) (cdr iregs) fpregs (fx- size 8)) + ,(let ([ireg (car iregs)]) + (case size + [(1) `(inline ,(make-info-load 'integer-8 #f) ,%store + ,%rcx ,%zero (immediate ,offset) ,ireg)] + [(2) `(inline ,(make-info-load 'integer-16 #f) ,%store + ,%rcx ,%zero (immediate ,offset) ,ireg)] + [(3) (%seq + (inline ,(make-info-load 'integer-16 #f) ,%store + ,%rcx ,%zero (immediate ,offset) ,ireg) + (set! ,ireg ,(%inline srl ,ireg (immediate 16))) + (inline ,(make-info-load 'integer-8 #f) ,%store + ,%rcx ,%zero (immediate ,(fx+ 2 offset)) ,ireg))] + [(4) `(inline ,(make-info-load 'integer-32 #f) ,%store + ,%rcx ,%zero (immediate ,offset) ,ireg)] + [(5 6 7) (%seq + (inline ,(make-info-load 'integer-32 #f) ,%store + ,%rcx ,%zero (immediate ,offset) ,ireg) + (set! ,ireg ,(%inline srl ,ireg (immediate 32))) + ,(case size + [(5) + `(inline ,(make-info-load 'integer-8 #f) ,%store + ,%rcx ,%zero (immediate ,(fx+ 4 offset)) ,ireg)] + [(6) + `(inline ,(make-info-load 'integer-16 #f) ,%store + ,%rcx ,%zero (immediate ,(fx+ 4 offset)) ,ireg)] + [(7) + (%seq + (inline ,(make-info-load 'integer-16 #f) ,%store + ,%rcx ,%zero (immediate ,(fx+ 4 offset)) ,ireg) + (set! ,ireg ,(%inline srl ,ireg (immediate 16))) + (inline ,(make-info-load 'integer-8 #f) ,%store + ,%rcx ,%zero (immediate ,(fx+ 6 offset)) ,ireg))]))] + [else `(set! ,(%mref ,%rcx ,offset) ,ireg)])))]))) + (define (get-result-regs fill-result-here? result-type result-classes) + (if fill-result-here? + (let loop ([classes result-classes] [iregs (reg-list %rax %rdx)] [fpregs (reg-list %Cfparg1 %Cfparg2)]) + (cond + [(null? classes) '()] + [(eq? 'sse (car classes)) + (cons (car fpregs) (loop (cdr classes) iregs (cdr fpregs)))] + [else + (cons (car iregs) (loop (cdr classes) (cdr iregs) fpregs))])) + (nanopass-case (Ltype Type) result-type + [(fp-double-float) (list %Cfpretval)] + [(fp-single-float) (list %Cfpretval)] + [(fp-void) '()] + [else (list %rax)]))) (define returnem (lambda (frame-size locs ccall r-loc) ; need to maintain 16-byte alignment, ignoring the return address @@ -2535,51 +2953,65 @@ `(set! ,%sp ,(%inline + ,%sp (immediate ,frame-size))))))))) (lambda (info) (safe-assert (reg-callee-save? %tc)) ; no need to save-restore - (let ([conv (info-foreign-conv info)] - [arg-type* (info-foreign-arg-type* info)] - [result-type (info-foreign-result-type info)]) - (with-values (do-args arg-type* (make-vint) (make-vfp)) - (lambda (frame-size nfp locs live*) - (returnem frame-size locs - (lambda (t0) - (if-feature windows - (%seq - (set! ,%sp ,(%inline - ,%sp (immediate 32))) - (inline ,(make-info-kill*-live* (reg-list %rax) live*) ,%c-call ,t0) - (set! ,%sp ,(%inline + ,%sp (immediate 32)))) - (%seq - ; System V ABI varargs functions require count of fp regs used in %al register. - ; since we don't know if the callee is a varargs function, we always set it. - (set! ,%rax (immediate ,nfp)) - (inline ,(make-info-kill*-live* (reg-list %rax) (cons %rax live*)) ,%c-call ,t0)))) - (nanopass-case (Ltype Type) result-type - [(fp-double-float) - (lambda (lvalue) - `(inline ,(make-info-loadfl %Cfpretval) ,%store-double ,lvalue ,%zero - ,(%constant flonum-data-disp)))] - [(fp-single-float) - (lambda (lvalue) - `(inline ,(make-info-loadfl %Cfpretval) ,%store-single->double ,lvalue ,%zero - ,(%constant flonum-data-disp)))] - [(fp-integer ,bits) - (case bits - [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline sext8 ,%rax)))] - [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline sext16 ,%rax)))] - [(32) (lambda (lvalue) `(set! ,lvalue ,(%inline sext32 ,%rax)))] - [(64) (lambda (lvalue) `(set! ,lvalue ,%rax))] - [else ($oops 'assembler-internal - "unexpected asm-foreign-procedures fp-integer size ~s" - bits)])] - [(fp-unsigned ,bits) - (case bits - [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline zext8 ,%rax)))] - [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline zext16 ,%rax)))] - [(32) (lambda (lvalue) `(set! ,lvalue ,(%inline zext32 ,%rax)))] - [(64) (lambda (lvalue) `(set! ,lvalue ,%rax))] - [else ($oops 'assembler-internal - "unexpected asm-foreign-procedures fp-unsigned size ~s" - bits)])] - [else (lambda (lvalue) `(set! ,lvalue ,%rax))]))))))))) + (let* ([conv* (info-foreign-conv* info)] + [arg-type* (info-foreign-arg-type* info)] + [result-type (info-foreign-result-type info)] + [result-classes (classify-type result-type)] + [result-size (classified-size result-type)] + [fill-result-here? (result-fits-in-registers? result-classes)] + [adjust-active? (if-feature pthreads (memq 'adjust-active conv*) #f)]) + (with-values (do-args (if fill-result-here? (cdr arg-type*) arg-type*) (make-vint) (make-vfp)) + (lambda (frame-size nfp locs live* fp-live*) + (with-values (add-save-fill-target fill-result-here? frame-size locs) + (lambda (frame-size locs) + (returnem frame-size locs + (lambda (t0) + (let* ([t (if adjust-active? %deact t0)] ; need a register if `adjust-active?` + [c-call + (add-deactivate adjust-active? t0 (append fp-live* live*) + (get-result-regs fill-result-here? result-type result-classes) + (if-feature windows + (%seq + (set! ,%sp ,(%inline - ,%sp (immediate 32))) + (inline ,(make-info-kill*-live* (reg-list %rax %rdx) live*) ,%c-call ,t) + (set! ,%sp ,(%inline + ,%sp (immediate 32)))) + (%seq + ;; System V ABI varargs functions require count of fp regs used in %al register. + ;; since we don't know if the callee is a varargs function, we always set it. + (set! ,%rax (immediate ,nfp)) + (inline ,(make-info-kill*-live* (reg-list %rax %rdx) (cons %rax live*)) ,%c-call ,t))))]) + (cond + [fill-result-here? + (add-fill-result c-call (fx- frame-size (constant ptr-bytes)) result-classes result-size)] + [else c-call]))) + (nanopass-case (Ltype Type) result-type + [(fp-double-float) + (lambda (lvalue) + `(inline ,(make-info-loadfl %Cfpretval) ,%store-double ,lvalue ,%zero + ,(%constant flonum-data-disp)))] + [(fp-single-float) + (lambda (lvalue) + `(inline ,(make-info-loadfl %Cfpretval) ,%store-single->double ,lvalue ,%zero + ,(%constant flonum-data-disp)))] + [(fp-integer ,bits) + (case bits + [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline sext8 ,%rax)))] + [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline sext16 ,%rax)))] + [(32) (lambda (lvalue) `(set! ,lvalue ,(%inline sext32 ,%rax)))] + [(64) (lambda (lvalue) `(set! ,lvalue ,%rax))] + [else ($oops 'assembler-internal + "unexpected asm-foreign-procedures fp-integer size ~s" + bits)])] + [(fp-unsigned ,bits) + (case bits + [(8) (lambda (lvalue) `(set! ,lvalue ,(%inline zext8 ,%rax)))] + [(16) (lambda (lvalue) `(set! ,lvalue ,(%inline zext16 ,%rax)))] + [(32) (lambda (lvalue) `(set! ,lvalue ,(%inline zext32 ,%rax)))] + [(64) (lambda (lvalue) `(set! ,lvalue ,%rax))] + [else ($oops 'assembler-internal + "unexpected asm-foreign-procedures fp-unsigned size ~s" + bits)])] + [else (lambda (lvalue) `(set! ,lvalue ,%rax))]))))))))))) (define asm-foreign-callable #| @@ -2592,15 +3024,17 @@ +---------------------------+ <- 16-byte boundary | | | space for register args | four quads - sp+80: | | + sp+80/96: | | +---------------------------+ <- 16-byte boundary | incoming return address | one quad incoming sp: +---------------------------+ + sp+72: | active state | zero or two quads + +---------------------------+ | | | callee-save registers | RBX, RBP, RDI, RSI, R12, R13, R14, R15 (8 quads) | | +---------------------------+ - | pad word | one quad + | pad word / indirect space | one quad sp+0: +---------------------------+<- 16-byte boundary @@ -2609,11 +3043,14 @@ +---------------------------+ | | | incoming stack args | - sp+176: | | + sp+192: | | +---------------------------+ <- 16-byte boundary | incoming return address | one quad +---------------------------+ - | pad word | one quad + sp+176: | pad word / active state | one quad + +---------------------------+ + | indirect result space | two quads + sp+160: | (for & results via regs) | +---------------------------+<- 16-byte boundary | | | saved register args | space for Carg*, Cfparg* (14 quads) @@ -2661,6 +3098,10 @@ "unexpected load-int-stack fp-unsigned size ~s" bits)])] [else `(set! ,lvalue ,(%mref ,%sp ,offset))])))) + (define load-stack-address + (lambda (offset) + (lambda (lvalue) ; requires lvalue + `(set! ,lvalue ,(%inline + ,%sp (immediate ,offset)))))) (define save-arg-regs (lambda (types) (define vint (make-vint)) @@ -2684,6 +3125,40 @@ ,%sp ,%zero (immediate ,isp)) ,(f (cdr types) (fx+ i 1) (fx+ isp 8))) (f (cdr types) i isp))] + [(fp-ftd& ,ftd) + (cond + [(memv ($ftd-size ftd) '(1 2 4 8)) + ;; receive as value in register or on the stack + (cond + [(< i 4) + ;; receive in register + (cond + [(and (not ($ftd-compound? ftd)) + (eq? 'float (caar ($ftd->members ftd)))) + ;; float or double + `(seq + (inline ,(make-info-loadfl (vector-ref vfp i)) ,%store-double + ,%sp ,%zero (immediate ,isp)) + ,(f (cdr types) (fx+ i 1) (fx+ isp 8)))] + [else + ;; integer + `(seq + (set! ,(%mref ,%sp ,isp) ,(vector-ref vint i)) + ,(f (cdr types) (fx+ i 1) (fx+ isp 8)))])] + [else + ;; receive by value on the stack + (f (cdr types) i isp)])] + [else + ;; receive by reference in register or on the stack + (cond + [(< i 4) + ;; receive by reference in register + `(seq + (set! ,(%mref ,%sp ,isp) ,(vector-ref vint i)) + ,(f (cdr types) (fx+ i 1) (fx+ isp 8)))] + [else + ;; receive by reference on the stack + (f (cdr types) i isp)])])] [else (if (< i 4) (%seq @@ -2708,6 +3183,29 @@ ,%sp ,%zero (immediate ,isp)) ,(f (cdr types) iint (fx+ ifp 1) (fx+ isp 8))) (f (cdr types) iint ifp isp))] + [(fp-ftd& ,ftd) + (let* ([classes (classify-eightbytes ftd)] + [ints (count 'integer classes)] + [fps (count 'sse classes)]) + (cond + [(pass-here-by-stack? classes iint ints ifp fps) + ;; receive on the stack + (f (cdr types) iint ifp isp)] + [else + ;; receive via registers + (let reg-loop ([classes classes] [iint iint] [ifp ifp] [isp isp]) + (cond + [(null? classes) + (f (cdr types) iint ifp isp)] + [(eq? (car classes) 'sse) + `(seq + (inline ,(make-info-loadfl (vector-ref vfp ifp)) ,%store-double + ,%sp ,%zero (immediate ,isp)) + ,(reg-loop (cdr classes) iint (fx+ ifp 1) (+ isp 8)))] + [else + `(seq + (set! ,(%mref ,%sp ,isp) ,(vector-ref vint iint)) + ,(reg-loop (cdr classes) (fx+ iint 1) ifp (+ isp 8)))]))]))] [else (if (< iint 6) (%seq @@ -2715,11 +3213,11 @@ ,(f (cdr types) (fx+ iint 1) ifp (fx+ isp 8))) (f (cdr types) iint ifp isp))])))))) (define do-stack - (lambda (types) + (lambda (types adjust-active?) ; risp is where incoming register args are stored ; sisp is where incoming stack args are stored (if-feature windows - (let f ([types types] [locs '()] [isp 80]) + (let f ([types types] [locs '()] [isp (if adjust-active? 96 80)]) (if (null? types) locs (f (cdr types) @@ -2727,10 +3225,23 @@ (nanopass-case (Ltype Type) (car types) [(fp-double-float) (load-double-stack isp)] [(fp-single-float) (load-single-stack isp)] + [(fp-ftd& ,ftd) + (cond + [(memq ($ftd-size ftd) '(1 2 4 8)) + ;; passed by value + (load-stack-address isp)] + [else + ;; passed by reference + (load-int-stack (car types) isp)])] [else (load-int-stack (car types) isp)]) locs) (fx+ isp 8)))) - (let f ([types types] [locs '()] [iint 0] [ifp 0] [risp 48] [sisp 176]) + (let f ([types types] + [locs '()] + [iint 0] + [ifp 0] + [risp 48] + [sisp 192]) (if (null? types) locs (nanopass-case (Ltype Type) (car types) @@ -2750,6 +3261,23 @@ (f (cdr types) (cons (load-single-stack risp) locs) iint (fx+ ifp 1) (fx+ risp 8) sisp))] + [(fp-ftd& ,ftd) + (let* ([classes (classify-eightbytes ftd)] + [ints (count 'integer classes)] + [fps (count 'sse classes)]) + (cond + [(pass-here-by-stack? classes iint ints ifp fps) + ;; receive on the stack + (f (cdr types) + (cons (load-stack-address sisp) locs) + iint ifp risp (fx+ sisp ($ftd-size ftd)))] + [else + ;; receive via registers; `save-args-regs` has saved + ;; the registers in a suitable order so that the data + ;; is contiguous on the stack + (f (cdr types) + (cons (load-stack-address risp) locs) + (fx+ iint ints) (fx+ ifp fps) (fx+ risp (fx* 8 (fx+ ints fps))) sisp)]))] [else (if (= iint 6) (f (cdr types) @@ -2758,17 +3286,102 @@ (f (cdr types) (cons (load-int-stack (car types) risp) locs) (fx+ iint 1) ifp (fx+ risp 8) sisp))])))))) + (define (do-result result-type result-classes adjust-active?) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + (cond + [(result-fits-in-registers? result-classes) + ;; Copy content of result area on stack into + ;; the integer and floating-point registers + (let loop ([result-classes result-classes] + [offset (if-feature windows 0 160)] + [int* (list %rax %rdx)] + [fp* (list %Cfpretval %Cfparg2)] + [accum '()] + [live* '()] + [fp-live* '()]) + (cond + [(null? result-classes) + (values (lambda () + (if (pair? (cdr accum)) `(seq ,(car accum) ,(cadr accum)) (car accum))) + live* + fp-live*)] + [(eq? (car result-classes) 'integer) + (loop (cdr result-classes) + (fx+ offset 8) + (cdr int*) + fp* + (cons `(set! ,(car int*) ,(%mref ,%sp ,offset)) + accum) + (cons (car int*) live*) + fp-live*)] + [(eq? (car result-classes) 'sse) + (loop (cdr result-classes) + (fx+ offset 8) + int* + (cdr fp*) + (cons `(inline ,(make-info-loadfl (car fp*)) ,%load-double ,%sp ,%zero (immediate ,offset)) + accum) + live* + (cons (car fp*) fp-live*))]))] + [else + (values (lambda () + ;; Return pointer that was filled; destination was the first argument + `(set! ,%Cretval ,(%mref ,%sp ,(if-feature windows (if adjust-active? 96 80) 48)))) + (list %Cretval) + '())])] + [(fp-double-float) + (values + (lambda (x) + `(inline ,(make-info-loadfl %Cfpretval) ,%load-double ,x ,%zero ,(%constant flonum-data-disp))) + '() + (list %Cfpretval))] + [(fp-single-float) + (values + (lambda (x) + `(inline ,(make-info-loadfl %Cfpretval) ,%load-double->single ,x ,%zero ,(%constant flonum-data-disp))) + '() + (list %Cfpretval))] + [(fp-void) + (values (lambda () `(nop)) + '() + '())] + [else + (values (lambda (x) + `(set! ,%Cretval ,x)) + (list %Cretval) + '())])) + (define (unactivate result-regs) + (let ([e `(seq + (set! ,%Carg1 ,(%mref ,%sp ,(+ (push-registers-size result-regs) (if-feature windows 72 176)))) + ,(as-c-call (%inline unactivate-thread ,%Carg1)))]) + (if (null? result-regs) + e + (%seq + ,(push-registers result-regs) + ,e + ,(pop-registers result-regs))))) (lambda (info) - (let ([conv (info-foreign-conv info)] + (let ([conv* (info-foreign-conv* info)] [arg-type* (info-foreign-arg-type* info)] [result-type (info-foreign-result-type info)]) - (let ([locs (do-stack arg-type*)]) - (values - (lambda () - (%seq + (let* ([result-classes (classify-type result-type)] + [adjust-active? (if-feature pthreads (memq 'adjust-active conv*) #f)] + [synthesize-first? (and result-classes + (result-fits-in-registers? result-classes))] + [locs (do-stack (if synthesize-first? (cdr arg-type*) arg-type*) adjust-active?)]) + (let-values ([(get-result result-regs result-fp-regs) (do-result result-type result-classes adjust-active?)]) + (values + (lambda () + (%seq ,(if-feature windows (%seq - ,(save-arg-regs arg-type*) + ,(let ([e (save-arg-regs arg-type*)]) + (if adjust-active? + (%seq + ,e + (set! ,%sp ,(%inline - ,%sp (immediate 16)))) + e)) ,(%inline push ,%rbx) ,(%inline push ,%rbp) ,(%inline push ,%rdi) @@ -2779,7 +3392,7 @@ ,(%inline push ,%r15) (set! ,%sp ,(%inline - ,%sp (immediate 8)))) (%seq - (set! ,%sp ,(%inline - ,%sp (immediate 120))) + (set! ,%sp ,(%inline - ,%sp (immediate 136))) ,(%inline push ,%rbx) ,(%inline push ,%rbp) ,(%inline push ,%r12) @@ -2788,16 +3401,42 @@ ,(%inline push ,%r15) ,(save-arg-regs arg-type*))) ,(if-feature pthreads - (%seq + ((lambda (e) + (if adjust-active? + (%seq + ,(as-c-call `(set! ,%rax ,(%inline activate-thread))) + (set! ,(%mref ,%sp ,(if-feature windows 72 176)) ,%rax) + ,e) + e)) + (%seq (set! ,%rax ,(%inline get-tc)) - (set! ,%tc ,%rax)) + (set! ,%tc ,%rax))) `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0)))))) - (reverse locs) - (lambda (fv* Scall->result-type) - (in-context Tail - (%seq + (let ([locs (reverse locs)]) + (if synthesize-first? + (cons (load-stack-address (if-feature windows 0 160)) ; space on stack for results to be returned via registers + locs) + locs)) + get-result + (lambda () + (define callee-save-regs + (if-feature windows + (list %rbx %rbp %rdi %rsi %r12 %r13 %r14 %r15) + (list %rbx %rbp %r12 %r13 %r14 %r15))) + (in-context Tail + ((lambda (e) + (if adjust-active? + (%seq + ,(unactivate (append result-fp-regs result-regs)) + ,e) + e)) + (%seq ,(if-feature windows - (%seq + ((lambda (e) + (if adjust-active? + (%seq ,e (set! ,%sp ,(%inline + ,%sp (immediate 16)))) + e)) + (%seq (set! ,%sp ,(%inline + ,%sp (immediate 8))) (set! ,%r15 ,(%inline pop)) (set! ,%r14 ,(%inline pop)) @@ -2806,7 +3445,7 @@ (set! ,%rsi ,(%inline pop)) (set! ,%rdi ,(%inline pop)) (set! ,%rbp ,(%inline pop)) - (set! ,%rbx ,(%inline pop))) + (set! ,%rbx ,(%inline pop)))) (%seq (set! ,%r15 ,(%inline pop)) (set! ,%r14 ,(%inline pop)) @@ -2814,7 +3453,6 @@ (set! ,%r12 ,(%inline pop)) (set! ,%rbp ,(%inline pop)) (set! ,%rbx ,(%inline pop)) - (set! ,%sp ,(%inline + ,%sp (immediate 120))))) - (jump (literal ,(make-info-literal #f 'entry Scall->result-type 0)) - (,%rbx ,%rbp ,%r12 ,%r13 ,%r14 ,%r15 ,fv* ...))))))))))))) + (set! ,%sp ,(%inline + ,%sp (immediate 136))))) + (asm-c-return ,null-info ,callee-save-regs ... ,result-regs ...)))))))))))))) ) diff -Nru chezscheme-9.5+dfsg/s/x86.ss chezscheme-9.5.4+dfsg/s/x86.ss --- chezscheme-9.5+dfsg/s/x86.ss 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/s/x86.ss 2020-08-31 02:35:12.000000000 +0000 @@ -733,6 +733,15 @@ (define-instruction value (fstpl) [(op (z mem)) `(set! ,(make-live-info) ,z (asm ,info ,asm-fstpl))]) + (define-instruction value (fstps) + [(op (z mem)) `(set! ,(make-live-info) ,z (asm ,info ,asm-fstps))]) + + (define-instruction effect (fldl) + [(op (z mem)) `(asm ,info ,asm-fldl ,z)]) + + (define-instruction effect (flds) + [(op (z mem)) `(asm ,info ,asm-flds ,z)]) + (define-instruction effect (load-single->double load-double->single) [(op (x ur) (y ur) (z imm32)) `(asm ,info ,(asm-fl-cvt op (info-loadfl-flreg info)) ,x ,y ,z)]) @@ -769,6 +778,19 @@ (safe-assert (eq? z %eax)) `(set! ,(make-live-info) ,z (asm ,info ,asm-get-tc))]) + (define-instruction value activate-thread + [(op (z ur)) + (safe-assert (eq? z %eax)) ; see get-tc + `(set! ,(make-live-info) ,z (asm ,info ,asm-activate-thread))]) + + (define-instruction effect deactivate-thread + [(op) + `(asm ,info ,asm-deactivate-thread)]) + + (define-instruction effect unactivate-thread + [(op) + `(asm ,info ,asm-unactivate-thread)]) + ; TODO: should we insist that asm-library-call preserve %ts and %td? ; TODO: risc architectures will have to take info-asmlib-save-ra? into account (define-instruction value asmlibcall @@ -860,6 +882,15 @@ [(op (x ur) (y ur) (w imm32)) `(asm ,info ,asm-locked-decr ,x ,y ,w)]) + (define-instruction effect (cas) + [(op (x ur) (y ur) (w imm32) (old ur) (new ur)) + (let ([ueax (make-precolored-unspillable 'ueax %eax)]) + (with-output-language (L15d Effect) + (seq + `(set! ,(make-live-info) ,ueax ,old) + ;; NB: may modify %eax: + `(asm ,info ,asm-locked-cmpxchg ,x ,y ,w ,ueax ,new))))]) + (define-instruction effect (pause) [(op) `(asm ,info ,asm-pause)]) @@ -893,11 +924,11 @@ (define-instruction effect invoke-prelude [(op) (constant-case machine-type-name - [(i3osx ti3osx) + [(i3nt ti3nt) `(set! ,(make-live-info) ,%tc (mref ,%sp ,%zero 4))] + [else (seq `(set! ,(make-live-info) ,%tc (mref ,%sp ,%zero 4)) - `(set! ,(make-live-info) ,%sp (asm ,info ,asm-sub ,%sp (immediate 12))))] - [else `(set! ,(make-live-info) ,%tc (mref ,%sp ,%zero 4))])]) + `(set! ,(make-live-info) ,%sp (asm ,info ,asm-sub ,%sp (immediate 12))))])]) ) ;;; SECTION 3: assembler @@ -907,16 +938,16 @@ asm-pop asm-shiftop asm-sll asm-logand asm-lognot asm-logtest asm-fl-relop asm-relop asm-push asm-indirect-jump asm-literal-jump asm-direct-jump asm-return-address asm-jump asm-conditional-jump asm-data-label asm-rp-header - asm-lea1 asm-lea2 asm-indirect-call asm-fstpl asm-condition-code + asm-lea1 asm-lea2 asm-indirect-call asm-fstpl asm-fstps asm-fldl asm-flds asm-condition-code asm-fl-cvt asm-fl-store asm-fl-load asm-flt asm-trunc asm-div - asm-exchange asm-pause asm-locked-incr asm-locked-decr + asm-exchange asm-pause asm-locked-incr asm-locked-decr asm-locked-cmpxchg asm-flop-2 asm-flsqrt asm-c-simple-call - asm-save-flrv asm-restore-flrv asm-return asm-size + asm-save-flrv asm-restore-flrv asm-return asm-c-return asm-size asm-enter asm-foreign-call asm-foreign-callable asm-inc-profile-counter asm-inc-cc-counter asm-read-time-stamp-counter asm-read-performance-monitoring-counter ; threaded version specific - asm-get-tc + asm-get-tc asm-activate-thread asm-deactivate-thread asm-unactivate-thread ; machine dependent exports asm-sext-eax->edx) @@ -1039,6 +1070,7 @@ (define-op popf byte-op #b10011101) (define-op nop byte-op #b10010000) (define-op ret byte-op #b11000011) + (define-op retl byte+short-op #b11000010) (define-op sahf byte-op #b10011110) (define-op extad byte-op #b10011001) ; extend eax to edx @@ -1054,6 +1086,8 @@ (define-op locked-dec (b *) locked-unary-op #b1111111 #b001) (define-op locked-inc (b *) locked-unary-op #b1111111 #b000) + (define-op locked-cmpxchg (*) locked-cmpxchg-op) + ; also do inc-reg dec-reg (define-op call jump-op #b010) @@ -1076,7 +1110,9 @@ ; coprocessor ops required to handle calling conventions (define-op fldl float-op2 #b101 #b000) ; double memory push => ST[0] + (define-op flds float-op2 #b001 #b000) ; single memory push => ST[0] (define-op fstpl float-op2 #b101 #b011) ; ST[0] => double memory, pop + (define-op fstps float-op2 #b001 #b011) ; ST[0] => single memory, pop ; SSE2 instructions (pulled from x86_64macros.ss) (define-op sse.addsd sse-op1 #xF2 #x58) @@ -1199,6 +1235,20 @@ (ax-ea-sib dest-ea) (ax-ea-addr-disp dest-ea)))) + (define locked-cmpxchg-op + (lambda (op size dest-ea new-reg code*) + (begin + (emit-code (op dest-ea new-reg code*) + (build byte #xf0) ; lock prefix + (build byte #x0f) + (build byte + (byte-fields + [1 #b1011000] + [0 (ax-size-code size)])) + (ax-ea-modrm-reg dest-ea new-reg) + (ax-ea-sib dest-ea) + (ax-ea-addr-disp dest-ea))))) + (define pushil-op (lambda (op imm-ea code*) (if (ax-range? -128 imm-ea 127) @@ -1434,6 +1484,13 @@ (build byte op-code1) (build byte op-code2)))) + (define byte+short-op + (lambda (op op-code1 t code*) + (emit-code (op code*) + (build byte op-code1) + (build byte (fxand (cadr t) #xFF)) + (build byte (fxsrl (cadr t) 16))))) + (define byte-reg-op1 (lambda (op op-code1 reg code*) (begin @@ -1498,13 +1555,13 @@ (record-case dest-ea [(index) (size index-reg base-reg) (cond - [(and (fxzero? size) (not (eq? base-reg %ebp))) #f] + [(and (eqv? 0 size) (not (eq? base-reg %ebp))) #f] [(ax-byte-size? size) (build byte size)] [else (build long size)])] [(literal@) stuff (cons 'abs stuff)] [(disp) (size reg) (cond - [(and (fxzero? size) (not (eq? reg %ebp))) #f] ; indirect + [(and (eqv? 0 size) (not (eq? reg %ebp))) #f] ; indirect [(ax-byte-size? size) (build byte size)] [else (build long size)])] [(reg) r #f] @@ -1554,13 +1611,13 @@ (record-case dest-ea [(index) (size index-reg base-reg) (cond - [(and (fxzero? size) (not (eq? base-reg %ebp))) #b00] + [(and (eqv? 0 size) (not (eq? base-reg %ebp))) #b00] [(ax-byte-size? size) #b01] [else #b10])] [(literal@) stuff #b00] [(disp) (size reg) (cond - [(and (fxzero? size) (not (eq? reg %ebp))) #b00] ; indirect + [(and (eqv? 0 size) (not (eq? reg %ebp))) #b00] ; indirect [(ax-byte-size? size) #b01] [else #b10])] [(reg) r #b11] @@ -1629,6 +1686,21 @@ (Trivit (dest) (emit fstpl dest code*)))) + (define asm-fstps + (lambda (code* dest) + (Trivit (dest) + (emit fstps dest code*)))) + + (define asm-fldl + (lambda (code* src) + (Trivit (src) + (emit fldl src code*)))) + + (define asm-flds + (lambda (code* src) + (Trivit (src) + (emit flds src code*)))) + (define asm-fl-cvt (lambda (op flreg) (lambda (code* base index offset) @@ -1846,8 +1918,16 @@ (lambda () (constant-case machine-type-name ; remove padding added by asm-enter - [(i3osx ti3osx) (emit addi '(imm 12) (cons 'reg %sp) (emit ret '()))] - [else (emit ret '())]))) + [(i3nt ti3nt) (emit ret '())] + [else (emit addi '(imm 12) (cons 'reg %sp) (emit ret '()))]))) + + (define asm-c-return + (lambda (info) + (if (info-c-return? info) + (let ([offset (info-c-return-offset info)]) + (safe-assert (<= 0 offset #xFFFF)) + (emit retl `(imm ,offset) '())) + (emit ret '())))) (define asm-locked-incr (lambda (code* base index offset) @@ -1859,6 +1939,11 @@ (let ([dest (build-mem-opnd base index offset)]) (emit locked-dec dest code*)))) + (define asm-locked-cmpxchg + (lambda (code* base index offset old-v new-v) + (let ([dest (build-mem-opnd base index offset)]) + (emit locked-cmpxchg dest (cons 'reg new-v) code*)))) + (define asm-pause (lambda (code*) (emit pause code*))) @@ -2027,17 +2112,17 @@ (define asm-save-flrv (lambda (code*) ; we normally need 8 to store the floating point return variable, but - ; on the x86 mac we need 16 in order to get the required 16-byte alignment - (emit subi `(imm ,(constant-case machine-type-name [(i3osx ti3osx) 16] [else 8])) + ; on some OS's we need 16 in order to get the required 16-byte alignment + (emit subi `(imm ,(constant-case machine-type-name [(i3nt ti3nt) 8] [else 16])) (cons 'reg %sp) (emit fstpl `(disp 0 ,%sp) code*)))) (define asm-restore-flrv (lambda (code*) ; we normally need 8 to store the floating point return variable, but - ; on the x86 mac we need 16 in order to get the required 16-byte alignment + ; on some OS's we need 16 in order to get the required 16-byte alignment (emit fldl `(disp 0 ,%sp) - (emit addi `(imm ,(constant-case machine-type-name [(i3osx ti3osx) 16] [else 8])) + (emit addi `(imm ,(constant-case machine-type-name [(i3nt ti3nt) 8] [else 16])) (cons 'reg %sp) code*)))) (define asm-library-jump @@ -2062,7 +2147,22 @@ (define asm-get-tc (let ([target `(literal 0 (entry ,(lookup-c-entry get-thread-context)))]) - (lambda (code* dest) ; dest is ignored, since it is always the first C argument (eax in this case) + (lambda (code* dest) ; dest is ignored, since it is always the first C result (eax in this case) + (emit bsr target code*)))) + + (define asm-activate-thread + (let ([target `(literal 0 (entry ,(lookup-c-entry activate-thread)))]) + (lambda (code* dest) ; dest is ignored, as in asm-get-tc + (emit bsr target code*)))) + + (define asm-deactivate-thread + (let ([target `(literal 0 (entry ,(lookup-c-entry deactivate-thread)))]) + (lambda (code*) + (emit bsr target code*)))) + + (define asm-unactivate-thread + (let ([target `(literal 0 (entry ,(lookup-c-entry unactivate-thread)))]) + (lambda (code*) (emit bsr target code*)))) (define asm-indirect-call @@ -2208,7 +2308,8 @@ code*)))))))))) (constant-case machine-type-name - [(i3osx ti3osx) + [(i3nt ti3nt) (define asm-enter values)] + [else (define-syntax asm-enter (lambda (x) (syntax-case x () @@ -2217,8 +2318,63 @@ #'(%seq ; adjust to 16-byte boundary, accounting for 4-byte return address pushed by call (set! ,%sp ,(%inline - ,%sp (immediate 12))) - ,e))])))] - [else (define asm-enter values)]) + ,e))])))]) + + (define callee-expects-result-pointer? + (lambda (result-type) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) (constant-case machine-type-name + [(i3osx ti3osx i3nt ti3nt) + (case ($ftd-size ftd) + [(1 2 4 8) #f] + [else #t])] + [else ($ftd-compound? ftd)])] + [else #f]))) + (define callee-pops-result-pointer? + (lambda (result-type) + (callee-expects-result-pointer? result-type))) + (define fill-result-pointer-from-registers? + (lambda (result-type) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) (not (callee-expects-result-pointer? result-type))] + [else #f]))) + + (module (push-registers pop-registers push-registers-size) + (define (move-registers regs fp-reg-count load? offset e) + (with-output-language (L13 Effect) + (cond + [(fx> fp-reg-count 0) + (let ([offset (fx- offset 8)]) + (move-registers regs (fx- fp-reg-count 1) load? offset + (cond + [load? `(seq ,(%inline fldl ,(%mref ,%sp ,offset)) ,e)] + [else `(seq ,e ,(%inline fstpl ,(%mref ,%sp ,offset)))])))] + [(pair? regs) + (let ([offset (fx- offset 4)]) + (move-registers (cdr regs) 0 load? offset + (cond + [load? `(seq (set! ,(car regs) ,(%mref ,%sp ,offset)) ,e)] + [else `(seq ,e (set! ,(%mref ,%sp ,offset) ,(car regs)))])))] + [else e]))) + (define (push-registers-size regs fp-reg-count arg-count) + ;; Align with the expectation that `arg-count` arguments + ;; will be pushed later, before a function call + (let ([offset (fx+ (fx* 4 (length regs)) (fx* 8 fp-reg-count))]) + (constant-case machine-type-name + [(i3nt ti3nt) offset] + [else + (fx- (fxlogand (fx+ offset (fx* 4 arg-count) 15) -16) + (fx* 4 arg-count))]))) + (define (push-registers regs fp-reg-count arg-count) + (let ([offset (push-registers-size regs fp-reg-count arg-count)]) + (move-registers regs fp-reg-count #f offset + (with-output-language (L13 Effect) + `(set! ,%sp ,(%inline - ,%sp (immediate ,offset))))))) + (define (pop-registers regs fp-reg-count arg-count) + (let ([offset (push-registers-size regs fp-reg-count arg-count)]) + (move-registers regs fp-reg-count #t offset + (with-output-language (L13 Effect) + `(set! ,%sp ,(%inline + ,%sp (immediate ,offset)))))))) (define asm-foreign-call (with-output-language (L13 Effect) @@ -2244,19 +2400,74 @@ (%seq (set! ,(%mref ,%sp ,offset) ,lorhs) (set! ,(%mref ,%sp ,(fx+ offset 4)) ,hirhs))))] + [load-content + (lambda (offset len) + (lambda (x) ; requires var + (let loop ([offset offset] [x-offset 0] [len len]) + (cond + [(= len 0) `(nop)] + [(>= len 4) + `(seq + (set! ,(%mref ,%sp ,offset) (inline ,(make-info-load 'integer-32 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + ,(loop (fx+ offset 4) (fx+ x-offset 4) (fx- len 4)))] + [(>= len 2) + (%seq + (set! ,%eax (inline ,(make-info-load 'integer-16 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + (inline ,(make-info-load 'integer-16 #f) + ,%store ,%sp ,%zero (immediate ,offset) + ,%eax) + ,(loop (fx+ offset 2) (fx+ x-offset 2) (fx- len 2)))] + [else + (%seq + (set! ,%eax (inline ,(make-info-load 'integer-8 #f) + ,%load ,x ,%zero (immediate ,x-offset))) + (inline ,(make-info-load 'integer-8 #f) + ,%store ,%sp ,%zero (immediate ,offset) + ,%eax))]))))] [do-stack - (lambda (types locs n) + (lambda (types locs n result-type) (if (null? types) (values n locs) (nanopass-case (Ltype Type) (car types) [(fp-double-float) (do-stack (cdr types) (cons (load-double-stack n) locs) - (fx+ n 8))] + (fx+ n 8) + #f)] [(fp-single-float) (do-stack (cdr types) (cons (load-single-stack n) locs) - (fx+ n 4))] + (fx+ n 4) + #f)] + [(fp-ftd& ,ftd) + (do-stack (cdr types) + (cons (load-content n ($ftd-size ftd)) locs) + (fx+ n (fxlogand (fx+ ($ftd-size ftd) 3) -4)) + #f)] + [(fp-ftd ,ftd) + (cond + [(and result-type + (fill-result-pointer-from-registers? result-type)) + ;; Callee doesn't expect this argument; move + ;; it to the end just to save it for filling + ;; when the callee returns + (let ([end-n 0]) + (with-values (do-stack (cdr types) + (cons (lambda (rhs) + ((load-stack end-n) rhs)) + locs) + n + #f) + (lambda (frame-size locs) + (set! end-n frame-size) + (values (fx+ frame-size 4) locs))))] + [else + (do-stack (cdr types) + (cons (load-stack n) locs) + (fx+ n 4) + #f)])] [else (if (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] @@ -2264,17 +2475,71 @@ [else #f]) (do-stack (cdr types) (cons (load-stack64 n) locs) - (fx+ n 8)) + (fx+ n 8) + #f) (do-stack (cdr types) (cons (load-stack n) locs) - (fx+ n 4)))])))]) + (fx+ n 4) + #f))])))]) + (define (get-result-registers fill-result-here? result-type) + (cond + [fill-result-here? + (let* ([ftd (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) ftd])] + [size ($ftd-size ftd)]) + (case size + [(4) + (cond + [(and (if-feature windows (not ($ftd-compound? ftd)) #t) + (equal? '((float 4 0)) ($ftd->members ftd))) + (values '() 1)] + [else (values (reg-list %eax) 0)])] + [(8) + (cond + [(and (if-feature windows (not ($ftd-compound? ftd)) #t) + (equal? '((float 8 0)) ($ftd->members ftd))) + (values '() 1)] + [else (values (reg-list %eax %edx) 0)])] + [else (values (reg-list %eax) 0)]))] + [else + (nanopass-case (Ltype Type) result-type + [(fp-double-float) (values '() 1)] + [(fp-single-float) (values '() 1)] + [(fp-integer ,bits) + (case bits + [(64) (values (reg-list %eax %edx) 0)] + [else (values (reg-list %eax) 0)])] + [(fp-unsigned ,bits) + (case bits + [(64) (values (reg-list %eax %edx) 0)] + [else (values (reg-list %eax) 0)])] + [(fp-void) (values '() 0)] + [else (values (reg-list %eax) 0)])])) + (define (add-deactivate adjust-active? fill-result-here? t0 result-type e) + (cond + [adjust-active? + (let-values ([(result-regs result-fp-count) (get-result-registers fill-result-here? result-type)]) + (let ([save-and-restore + (lambda (regs fp-count e) + (cond + [(and (null? regs) (fx= 0 fp-count)) e] + [else (%seq + ,(push-registers regs fp-count 0) + ,e + ,(pop-registers regs fp-count 0))]))]) + (%seq + (set! ,%edx ,t0) + ,(save-and-restore (list %edx) 0 (%inline deactivate-thread)) + ,e + ,(save-and-restore result-regs result-fp-count `(set! ,%eax ,(%inline activate-thread))))))] + [else e])) (define returnem - (lambda (conv frame-size locs ccall r-loc) + (lambda (conv* orig-frame-size locs result-type ccall r-loc) (let ([frame-size (constant-case machine-type-name ; maintain 16-byte alignment not including the return address pushed ; by the call instruction, which counts as part of callee's frame - [(i3osx ti3osx) (fxlogand (fx+ frame-size 15) -16)] - [else frame-size])]) + [(i3nt ti3nt) orig-frame-size] + [else (fxlogand (fx+ orig-frame-size 15) -16)])]) (values (lambda () (if (fx= frame-size 0) `(nop) @@ -2284,30 +2549,70 @@ r-loc ; Windows __stdcall convention requires callee to clean up (lambda () - (if (or (fx= frame-size 0) (memq conv '(i3nt-stdcall i3nt-com))) + (if (or (fx= frame-size 0) (memq 'i3nt-stdcall conv*) (memq 'i3nt-com conv*)) `(nop) - `(set! ,%sp ,(%inline + ,%sp (immediate ,frame-size))))))))) + (let ([frame-size (if (callee-pops-result-pointer? result-type) + (fx- frame-size (constant ptr-bytes)) + frame-size)]) + `(set! ,%sp ,(%inline + ,%sp (immediate ,frame-size)))))))))) (lambda (info) (safe-assert (reg-callee-save? %tc)) ; no need to save-restore - (let ([conv (info-foreign-conv info)] + (let ([conv* (info-foreign-conv* info)] [arg-type* (info-foreign-arg-type* info)] [result-type (info-foreign-result-type info)]) - (with-values (do-stack arg-type* '() 0) + (with-values (do-stack arg-type* '() 0 result-type) (lambda (frame-size locs) - (returnem conv frame-size locs + (returnem conv* frame-size locs result-type (lambda (t0) - (case conv - [(i3nt-com) - (when (null? arg-type*) - ($oops 'foreign-procedure - "__com convention requires instance argument")) - ; jump indirect - (%seq - (set! ,%eax ,(%mref ,%sp 0)) - (set! ,%eax ,(%mref ,%eax 0)) - (set! ,%eax ,(%inline + ,%eax ,t0)) - (inline ,(make-info-kill*-live* (reg-list %eax %edx) '()) ,%c-call ,(%mref ,%eax 0)))] - [else `(inline ,(make-info-kill*-live* (reg-list %eax %edx) '()) ,%c-call ,t0)])) + (let* ([fill-result-here? (fill-result-pointer-from-registers? result-type)] + [adjust-active? (if-feature pthreads (memq 'adjust-active conv*) #f)] + [t (if adjust-active? %edx t0)] ; need a register if `adjust-active?` + [call + (add-deactivate adjust-active? fill-result-here? t0 result-type + (cond + [(memq 'i3nt-com conv*) + (when (null? arg-type*) + ($oops 'foreign-procedure + "__com convention requires instance argument")) + ; jump indirect + (%seq + (set! ,%eax ,(%mref ,%sp 0)) + (set! ,%eax ,(%mref ,%eax 0)) + (set! ,%eax ,(%inline + ,%eax ,t)) + (inline ,(make-info-kill*-live* (reg-list %eax %edx) '()) ,%c-call ,(%mref ,%eax 0)))] + [else `(inline ,(make-info-kill*-live* (reg-list %eax %edx) '()) ,%c-call ,t)]))]) + (cond + [fill-result-here? + (let* ([ftd (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) ftd])] + [size ($ftd-size ftd)]) + (%seq + ,call + (set! ,%ecx ,(%mref ,%sp ,(fx- frame-size (constant ptr-bytes)))) + ,(case size + [(1) + `(inline ,(make-info-load 'integer-8 #f) ,%store + ,%ecx ,%zero (immediate ,0) ,%eax)] + [(2) + `(inline ,(make-info-load 'integer-16 #f) ,%store + ,%ecx ,%zero (immediate ,0) ,%eax)] + [(4) + (cond + [(and (if-feature windows (not ($ftd-compound? ftd)) #t) + (equal? '((float 4 0)) ($ftd->members ftd))) + `(set! ,(%mref ,%ecx 0) ,(%inline fstps))] + [else + `(set! ,(%mref ,%ecx 0) ,%eax)])] + [(8) + (cond + [(and (if-feature windows (not ($ftd-compound? ftd)) #t) + (equal? '((float 8 0)) ($ftd->members ftd))) + `(set! ,(%mref ,%ecx 0) ,(%inline fstpl))] + [else + `(seq + (set! ,(%mref ,%ecx 0) ,%eax) + (set! ,(%mref ,%ecx 4) ,%edx))])])))] + [else call]))) (nanopass-case (Ltype Type) result-type [(fp-double-float) (lambda (x) @@ -2350,6 +2655,27 @@ [else (lambda (lvalue) `(set! ,lvalue ,%eax))]))))))))) (define asm-foreign-callable + #| + Frame Layout + +---------------------------+ + | | + | incoming stack args | + sp+X+Y+Z: | | + +---------------------------+ <- i3nt/ti3nt: 4-byte boundary. other: 16-byte boundary + | incoming return address | one word + +---------------------------+ + | | + | callee-save registers | EBP, ESI, EDI, EBX (4 words) + sp+X+Y: | | + +---------------------------+ + sp+X: | unactivate mode | 0 words or 1 word + +---------------------------+ + | indirect result space | i3nt/ti3nt: 2 words + | (for & results via regs) | other: 3 words + sp+0: +---------------------------+<- i3nt/ti3nt: 4-byte boundary. other: 16-byte boundary + |# + + (with-output-language (L13 Effect) (let () (define load-double-stack @@ -2389,6 +2715,10 @@ "unexpected load-int-stack fp-unsigned size ~s" bits)])] [else `(set! ,lvalue ,(%mref ,%sp ,offset))])))) + (define load-stack-address + (lambda (offset) + (lambda (lvalue) ; requires lvalue + `(set! ,lvalue ,(%inline + ,%sp (immediate ,offset)))))) (define load-stack64 (lambda (type offset) (lambda (lolvalue hilvalue) ; requires lvalue @@ -2408,6 +2738,10 @@ (do-stack (cdr types) (cons (load-single-stack n) locs) (fx+ n 4))] + [(fp-ftd& ,ftd) + (do-stack (cdr types) + (cons (load-stack-address n) locs) + (fx+ n (fxlogand (fx+ ($ftd-size ftd) 3) -4)))] [else (if (nanopass-case (Ltype Type) (car types) [(fp-integer ,bits) (fx= bits 64)] @@ -2419,61 +2753,167 @@ (do-stack (cdr types) (cons (load-stack (car types) n) locs) (fx+ n 4)))])))) + (define (do-result result-type init-stack-offset indirect-result-to-registers?) + (nanopass-case (Ltype Type) result-type + [(fp-ftd& ,ftd) + (cond + [indirect-result-to-registers? + (cond + [(and (if-feature windows (not ($ftd-compound? ftd)) #t) + (equal? '((float 4 0)) ($ftd->members ftd))) + (values (lambda () + (%inline flds ,(%mref ,%sp 0))) + '() + 1)] + [(and (if-feature windows (not ($ftd-compound? ftd)) #t) + (equal? '((float 8 0)) ($ftd->members ftd))) + (values (lambda () + (%inline fldl ,(%mref ,%sp 0))) + '() + 1)] + [(fx= ($ftd-size ftd) 8) + (values (lambda () + `(seq + (set! ,%eax ,(%mref ,%sp 0)) + (set! ,%edx ,(%mref ,%sp 4)))) + (list %eax %edx) + 0)] + [else + (values (lambda () + `(set! ,%eax ,(%mref ,%sp 0))) + (list %eax) + 0)])] + [else + (values (lambda () + ;; Return pointer that was filled; destination was the first argument + `(set! ,%eax ,(%mref ,%sp ,init-stack-offset))) + (list %eax) + 0)])] + [(fp-double-float) + (values (lambda (x) + (%inline fldl ,(%mref ,x ,(constant flonum-data-disp)))) + '() + 1)] + [(fp-single-float) + (values (lambda (x) + (%inline fldl ,(%mref ,x ,(constant flonum-data-disp)))) + '() + 1)] + [(fp-void) + (values (lambda () `(nop)) + '() + 0)] + [else + (cond + [(nanopass-case (Ltype Type) result-type + [(fp-integer ,bits) (fx= bits 64)] + [(fp-unsigned ,bits) (fx= bits 64)] + [else #f]) + (values (lambda (lorhs hirhs) ; requires rhs + (%seq + (set! ,%eax ,lorhs) + (set! ,%edx ,hirhs))) + (list %eax %edx) + 0)] + [else + (values (lambda (x) + `(set! ,%eax ,x)) + (list %eax) + 0)])])) + (define (unactivate result-regs result-num-fp-regs) + (let ([e (%seq + (set! ,%eax ,(%mref ,%sp ,(+ 8 (push-registers-size result-regs result-num-fp-regs 1)))) + ,(%inline push ,%eax) + ,(%inline unactivate-thread) + ,(%inline pop ,%eax))]) + (if (and (null? result-regs) (fx= 0 result-num-fp-regs)) + e + (%seq + ,(push-registers result-regs result-num-fp-regs 1) + ,e + ,(pop-registers result-regs result-num-fp-regs 1))))) (lambda (info) - (let ([conv (info-foreign-conv info)] - [arg-type* (info-foreign-arg-type* info)] - [result-type (info-foreign-result-type info)]) - (with-values (do-stack arg-type* '() - (constant-case machine-type-name [(i3osx ti3osx) 32] [else 20])) - (lambda (frame-size locs) - (values - (lambda () - (%seq - ,(%inline push ,%ebp) - ,(%inline push ,%esi) - ,(%inline push ,%edi) - ,(%inline push ,%ebx) - ,((lambda (e) - (constant-case machine-type-name - [(i3osx ti3osx) - ; maintain 16-bit alignment for i3osx, taking into account - ; 16 bytes pushed below + 4 for RA pushed by asmCcall - (%seq - (set! ,%sp ,(%inline - ,%sp (immediate 12))) - ,e)] - [else e])) - (if-feature pthreads - `(seq - (set! ,%eax ,(%inline get-tc)) - (set! ,%tc ,%eax)) - `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0))))))) - (reverse locs) - (lambda (fv* Scall->result-type) - (in-context Tail - ((lambda (e) - (constant-case machine-type-name - [(i3osx ti3osx) - (%seq - (set! ,%sp ,(%inline + ,%sp (immediate 12))) - ,e)] - [else e])) + (let* ([conv* (info-foreign-conv* info)] + [adjust-active? (if-feature pthreads (memq 'adjust-active conv*) #f)] + [arg-type* (info-foreign-arg-type* info)] + [result-type (info-foreign-result-type info)] + [indirect-result-space (constant-case machine-type-name + [(i3nt ti3nt) (if adjust-active? 12 8)] + [else + ;; maintain 16-bit alignment, taking into account + ;; 16 bytes pushed above + 4 for RA pushed by asmCcall; + ;; 8 of these bytes are used for &-return space, if needed; + ;; the extra 4 bytes may be used for the unactivate mode + 12])] + [init-stack-offset (fx+ 20 indirect-result-space)] + [indirect-result-to-registers? (fill-result-pointer-from-registers? result-type)]) + (let-values ([(get-result result-regs result-num-fp-regs) + (do-result result-type init-stack-offset indirect-result-to-registers?)]) + (with-values (do-stack (if indirect-result-to-registers? + (cdr arg-type*) + arg-type*) + '() + init-stack-offset) + (lambda (frame-size locs) + (values + (lambda () (%seq - (set! ,%ebx ,(%inline pop)) - (set! ,%edi ,(%inline pop)) - (set! ,%esi ,(%inline pop)) - (set! ,%ebp ,(%inline pop)) - ; Windows __stdcall convention requires callee to clean up - ,((lambda (e) - (if (memq conv '(i3nt-stdcall i3nt-com)) - (let ([arg-size (fx- frame-size 20)]) + ,(%inline push ,%ebp) + ,(%inline push ,%esi) + ,(%inline push ,%edi) + ,(%inline push ,%ebx) + (set! ,%sp ,(%inline - ,%sp (immediate ,indirect-result-space))) + ,(if-feature pthreads + ((lambda (e) + (if adjust-active? + (%seq + (set! ,%eax ,(%inline activate-thread)) + (set! ,(%mref ,%sp ,8) ,%eax) + ,e) + e)) + `(seq + (set! ,%eax ,(%inline get-tc)) + (set! ,%tc ,%eax))) + `(set! ,%tc (literal ,(make-info-literal #f 'entry (lookup-c-entry thread-context) 0)))))) + (let ([locs (reverse locs)]) + (if indirect-result-to-registers? + (cons (load-stack-address 0) ; use the &-return space + locs) + locs)) + get-result + (lambda () + (define callee-save-regs (list %ebx %edi %esi %ebp)) + (in-context Tail + ((lambda (e) + (if adjust-active? + (%seq + ,(unactivate result-regs result-num-fp-regs) + ,e) + e)) + (%seq + (set! ,%sp ,(%inline + ,%sp (immediate ,indirect-result-space))) + (set! ,%ebx ,(%inline pop)) + (set! ,%edi ,(%inline pop)) + (set! ,%esi ,(%inline pop)) + (set! ,%ebp ,(%inline pop)) + ; Windows __stdcall convention requires callee to clean up + ,((lambda (e) + (if (or (memq 'i3nt-stdcall conv*) (memq 'i3nt-com conv*)) + (let ([arg-size (fx- frame-size init-stack-offset)]) (if (fx> arg-size 0) (%seq - (set! - ,(%mref ,%sp ,arg-size) - ,(%mref ,%sp 0)) - (set! ,%sp ,(%inline + ,%sp (immediate ,arg-size))) - ,e) + (set! + ,(%mref ,%sp ,arg-size) + ,(%mref ,%sp 0)) + (set! ,%sp ,(%inline + ,%sp (immediate ,arg-size))) + ,e) e)) e)) - `(jump (literal ,(make-info-literal #f 'entry Scall->result-type 0)) - (,%ebx ,%edi ,%esi ,%ebp ,fv* ...)))))))))))))))) + `(asm-c-return ,(if (callee-pops-result-pointer? result-type) + ;; remove the pointer argument provided by the caller + ;; after popping the return address + (make-info-c-return 4) + null-info) + ,callee-save-regs ... + ,result-regs ...))))))))))))))) + ) diff -Nru chezscheme-9.5+dfsg/scheme.1.in chezscheme-9.5.4+dfsg/scheme.1.in --- chezscheme-9.5+dfsg/scheme.1.in 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/scheme.1.in 2020-08-31 02:35:12.000000000 +0000 @@ -3,7 +3,7 @@ .if t .ds c caf\o'\'e' .if n .ds c cafe .ds ]W -.TH SCHEME 1 "Chez Scheme Version 9.5 October 2017" +.TH SCHEME 1 "Chez Scheme Version 9.5.4 August 2020" .SH NAME \fIChez Scheme\fP .br @@ -14,7 +14,7 @@ \fB{InstallPetiteName}\fP [ \fIoptions\fP ] \fIfile\fP ... .SH DESCRIPTION \*s is a programming language, based on R6RS Scheme, and a -high-performance implementation of that langauge. +high-performance implementation of that language. \*s compiles source expressions \fIincrementally\fP to machine code, providing the speed of compiled code in an interactive system. .LP @@ -72,9 +72,12 @@ .B --eehistory off | \fIfile\fP Set expression-editor history file or disable restore and save of history. .TP -.B ---enable-object-counts +.B --enable-object-counts Have collector maintain object counts. .TP +.B --retain-static-relocation +Keep reloc information for compute-size, etc. +.TP .B -b \fIfile\fP, --boot \fIfile\fP Load boot code from \fIfile\fP. .TP @@ -791,6 +794,6 @@ MIT press (1996). .in -5 .SH AUTHOR -Copyright 2017 Cisco Systems, Inc. +Copyright 2020 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) diff -Nru chezscheme-9.5+dfsg/.travis/build.sh chezscheme-9.5.4+dfsg/.travis/build.sh --- chezscheme-9.5+dfsg/.travis/build.sh 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.travis/build.sh 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,15 @@ +#!/bin/bash +set -e -o pipefail +echo 'travis_fold:start:build' +echo Building Chez Scheme... +./configure -m="$TARGET_MACHINE" +make +case "$TARGET_MACHINE" in + *a6nt) + curl -Ls https://github.com/burgerrg/win-iconv/releases/download/v0.0.9/iconv-x64.dll > "$TARGET_MACHINE"/bin/"$TARGET_MACHINE"/iconv.dll + ;; + *i3nt) + curl -Ls https://github.com/burgerrg/win-iconv/releases/download/v0.0.9/iconv-x86.dll > "$TARGET_MACHINE"/bin/"$TARGET_MACHINE"/iconv.dll + ;; +esac +echo 'travis_fold:end:build' diff -Nru chezscheme-9.5+dfsg/.travis/matting.sh chezscheme-9.5.4+dfsg/.travis/matting.sh --- chezscheme-9.5+dfsg/.travis/matting.sh 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.travis/matting.sh 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,12 @@ +#!/bin/bash +# We don't use grep because on Windows, it doesn't flush its output. +live=no +while read -r line; do + echo "$line" >> mats.out + if [[ "$line" = matting* ]]; then + echo "$line" + live=yes + elif [[ "$live" = no ]]; then + echo "$line" + fi +done diff -Nru chezscheme-9.5+dfsg/.travis/summary chezscheme-9.5.4+dfsg/.travis/summary --- chezscheme-9.5+dfsg/.travis/summary 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.travis/summary 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,4 @@ +-------- o=0 -------- +-------- o=3 -------- +-------- o=3 cp0=t -------- +-------- o=3 cp0=t eval=interpret -------- diff -Nru chezscheme-9.5+dfsg/.travis/test.sh chezscheme-9.5.4+dfsg/.travis/test.sh --- chezscheme-9.5+dfsg/.travis/test.sh 1970-01-01 00:00:00.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.travis/test.sh 2020-08-31 02:35:12.000000000 +0000 @@ -0,0 +1,20 @@ +#!/bin/bash +runmats() { + echo travis_fold:start:mats + echo make allxhelp "$@" + make -C "$TARGET_MACHINE"/mats allxhelp "$@" 2>&1 | .travis/matting.sh + echo travis_fold:end:mats +} + +runmats o=0 +runmats o=3 +runmats o=3 cp0=t +runmats o=3 cp0=t eval=interpret + +if [ -f "$TARGET_MACHINE"/mats/summary ]; then + cat "$TARGET_MACHINE"/mats/summary + diff -q .travis/summary "$TARGET_MACHINE"/mats/summary + exit $? +else + exit 1 +fi diff -Nru chezscheme-9.5+dfsg/.travis.yml chezscheme-9.5.4+dfsg/.travis.yml --- chezscheme-9.5+dfsg/.travis.yml 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/.travis.yml 2020-08-31 02:35:12.000000000 +0000 @@ -1,28 +1,64 @@ +--- language: c -matrix: +os: linux +jobs: include: - - os: osx - env: TARGET_MACHINE=i3osx - - os: osx - env: TARGET_MACHINE=ti3osx - - os: osx - env: TARGET_MACHINE=a6osx - - os: osx - env: TARGET_MACHINE=ta6osx - - os: linux - env: TARGET_MACHINE=i3le - - os: linux - env: TARGET_MACHINE=ti3le - - os: linux - env: TARGET_MACHINE=a6le - - os: linux - env: TARGET_MACHINE=ta6le -dist: trusty -addons: - apt: - packages: - - gcc-multilib - - lib32ncurses5-dev - - libx32ncurses5-dev + # macOS + - env: TARGET_MACHINE=i3osx + os: osx + - env: TARGET_MACHINE=ti3osx + os: osx + - env: TARGET_MACHINE=a6osx + os: osx + - env: TARGET_MACHINE=ta6osx + os: osx + + # Linux + - env: TARGET_MACHINE=i3le + os: linux + addons: + apt: + packages: + - gcc-multilib + - lib32ncurses5-dev + - libx32ncurses5-dev + - uuid-dev:i386 + - env: TARGET_MACHINE=ti3le + os: linux + addons: + apt: + packages: + - gcc-multilib + - lib32ncurses5-dev + - libx32ncurses5-dev + - uuid-dev:i386 + - env: TARGET_MACHINE=a6le + os: linux + - env: TARGET_MACHINE=ta6le + os: linux + + # Windows + - env: TARGET_MACHINE=i3nt + os: windows + before_script: + - git config core.autocrlf false; rm .git/index; git reset --hard + - choco install make -y + - env: TARGET_MACHINE=ti3nt + os: windows + before_script: + - git config core.autocrlf false; rm .git/index; git reset --hard + - choco install make -y + - env: TARGET_MACHINE=a6nt + os: windows + before_script: + - git config core.autocrlf false; rm .git/index; git reset --hard + - choco install make -y + - env: TARGET_MACHINE=ta6nt + os: windows + before_script: + - git config core.autocrlf false; rm .git/index; git reset --hard + - choco install make -y +dist: bionic script: - - ./configure -m=$TARGET_MACHINE && make && ( cd ${TARGET_MACHINE}/mats && make partialx 2>&1 ) | tee Make.out | grep '^matting ' + - .travis/build.sh + - .travis/test.sh diff -Nru chezscheme-9.5+dfsg/wininstall/a6nt.wxs chezscheme-9.5.4+dfsg/wininstall/a6nt.wxs --- chezscheme-9.5+dfsg/wininstall/a6nt.wxs 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/a6nt.wxs 2020-08-31 02:35:12.000000000 +0000 @@ -4,17 +4,23 @@ - + - + - + + + + + + + + + + - + - - - - + @@ -57,23 +63,29 @@ + + + + + + - + diff -Nru chezscheme-9.5+dfsg/wininstall/i3nt.wxs chezscheme-9.5.4+dfsg/wininstall/i3nt.wxs --- chezscheme-9.5+dfsg/wininstall/i3nt.wxs 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/i3nt.wxs 2020-08-31 02:35:12.000000000 +0000 @@ -4,17 +4,23 @@ - + - + - + + + + + + + + + + - + - - - - + @@ -57,23 +63,29 @@ + + + + + + - + diff -Nru chezscheme-9.5+dfsg/wininstall/locate-vcredist.bat chezscheme-9.5.4+dfsg/wininstall/locate-vcredist.bat --- chezscheme-9.5+dfsg/wininstall/locate-vcredist.bat 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/locate-vcredist.bat 2020-08-31 02:35:12.000000000 +0000 @@ -7,16 +7,19 @@ SET "Path64=%CommonProgramFiles(x86)%\Merge Modules\Microsoft_VC140_CRT_x64.msm" ) -@IF "%VisualStudioVersion%"=="15.0" ( - @IF EXIST "%VCINSTALLDIR%Redist\MSVC\14.10.25008" ( - @SET "Path32=%VCINSTALLDIR%Redist\MSVC\14.10.25008\MergeModules\Microsoft_VC150_CRT_x86.msm" - @SET "Path64=%VCINSTALLDIR%Redist\MSVC\14.10.25008\MergeModules\Microsoft_VC150_CRT_x64.msm" - ) - - @IF EXIST "%VCINSTALLDIR%Redist\MSVC\14.11.25325" ( - @SET "Path32=%VCINSTALLDIR%Redist\MSVC\14.11.25325\MergeModules\Microsoft_VC141_CRT_x86.msm" - @SET "Path64=%VCINSTALLDIR%Redist\MSVC\14.11.25325\MergeModules\Microsoft_VC141_CRT_x64.msm" +@IF "%VisualStudioVersion%"=="15.0" or "%VisualStudioVersion%"=="16.0" ( + @PUSHD "%VCINSTALLDIR%Redist\MSVC" + @FOR /D %%D IN (*) DO ( + @PUSHD %%D + @FOR %%F IN (MergeModules\Microsoft_VC*_CRT_x86.msm) DO ( + SET "Path32=%VCINSTALLDIR%Redist\MSVC\%%D\%%F" + ) + @FOR %%F IN (MergeModules\Microsoft_VC*_CRT_x64.msm) DO ( + SET "Path64=%VCINSTALLDIR%Redist\MSVC\%%D\%%F" + ) + @POPD ) + @POPD ) @DEL vcredist.wxs >nul 2>&1 diff -Nru chezscheme-9.5+dfsg/wininstall/Makefile chezscheme-9.5.4+dfsg/wininstall/Makefile --- chezscheme-9.5+dfsg/wininstall/Makefile 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/Makefile 2020-08-31 02:35:12.000000000 +0000 @@ -1,5 +1,6 @@ -VERSION := 9.4.1 +VERSION := 9.5.4 WIXEXTENSIONS := -ext WixUIExtension -ext WixBalExtension +export MSYS_NO_PATHCONV=1 ChezScheme.exe: x86/bundle.wixobj ChezScheme32.msi ChezScheme64.msi cmd.exe /c light.bat -nologo $(WIXEXTENSIONS) $< -out $@ @@ -21,10 +22,10 @@ .PHONY: workareas workareas: - cd ..; ./configure -m=a6nt; $(MAKE) -C a6nt/c - cd ..; ./configure -m=i3nt; $(MAKE) -C i3nt/c - cd ..; ./configure -m=ta6nt; $(MAKE) -C ta6nt/c - cd ..; ./configure -m=ti3nt; $(MAKE) -C ti3nt/c + cd ..; ./configure -m=a6nt; $(MAKE) -C a6nt + cd ..; ./configure -m=i3nt; $(MAKE) -C i3nt + cd ..; ./configure -m=ta6nt; $(MAKE) -C ta6nt + cd ..; ./configure -m=ti3nt; $(MAKE) -C ti3nt .PHONY: clean clean: diff -Nru chezscheme-9.5+dfsg/wininstall/product.wxs chezscheme-9.5.4+dfsg/wininstall/product.wxs --- chezscheme-9.5+dfsg/wininstall/product.wxs 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/product.wxs 2020-08-31 02:35:12.000000000 +0000 @@ -76,6 +76,14 @@ + + + + + + + + diff -Nru chezscheme-9.5+dfsg/wininstall/ta6nt.wxs chezscheme-9.5.4+dfsg/wininstall/ta6nt.wxs --- chezscheme-9.5+dfsg/wininstall/ta6nt.wxs 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/ta6nt.wxs 2020-08-31 02:35:12.000000000 +0000 @@ -4,17 +4,23 @@ - + - + - + + + + + + + + + + - + - - - - + @@ -57,23 +63,29 @@ + + + + + + - + diff -Nru chezscheme-9.5+dfsg/wininstall/ti3nt.wxs chezscheme-9.5.4+dfsg/wininstall/ti3nt.wxs --- chezscheme-9.5+dfsg/wininstall/ti3nt.wxs 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/wininstall/ti3nt.wxs 2020-08-31 02:35:12.000000000 +0000 @@ -4,17 +4,23 @@ - + - + - + + + + + + + + + + - + - - - - + @@ -57,6 +63,9 @@ + + + @@ -65,17 +74,20 @@ + + + - + diff -Nru chezscheme-9.5+dfsg/workarea chezscheme-9.5.4+dfsg/workarea --- chezscheme-9.5+dfsg/workarea 2017-12-10 17:33:01.000000000 +0000 +++ chezscheme-9.5.4+dfsg/workarea 2020-08-31 02:35:12.000000000 +0000 @@ -33,10 +33,10 @@ case "$M" in a6fb) ;; a6le) ;; - a6ob) ;; - a6osx) ;; a6nb) ;; a6nt) ;; + a6ob) ;; + a6osx) ;; a6s2) ;; arm32le) ;; i3fb) ;; @@ -50,10 +50,10 @@ ppc32le) ;; ta6fb) ;; ta6le) ;; + ta6nb) ;; ta6nt) ;; ta6ob) ;; ta6osx) ;; - ta6nb) ;; ta6s2) ;; tarm32le) ;; ti3fb) ;; @@ -139,7 +139,6 @@ ;; esac - workdir $W/s (cd $W/s; workln ../../s/Mf-$M Mf-$M) (cd $W/s; forceworkln Mf-$M Makefile) @@ -173,6 +172,12 @@ fi done +for dir in `echo lz4` ; do + if [ ! -e $W/$dir ] ; then + /bin/cp -R $dir $W/$dir + fi +done + workdir $W/boot workdir $W/boot/$M (cd $W/boot/$M; workln ../../../boot/$M/scheme.h scheme.h) @@ -201,8 +206,8 @@ *nt) (cd $W/boot/$M; workln ../../../boot/$M/mainmd.obj mainmd.obj) (cd $W/boot/$M; workln ../../../boot/$M/mainmt.obj mainmt.obj) - (cd $W/boot/$M; workln ../../../boot/$M/csv95md.lib csv95md.lib) - (cd $W/boot/$M; workln ../../../boot/$M/csv95mt.lib csv95mt.lib) + (cd $W/boot/$M; workln ../../../boot/$M/csv954md.lib csv954md.lib) + (cd $W/boot/$M; workln ../../../boot/$M/csv954mt.lib csv954mt.lib) (cd $W/boot/$M; workln ../../../boot/$M/scheme.res scheme.res) ;; *) @@ -217,8 +222,8 @@ *nt) (cd $W/bin/$M; workln ../../../bin/$M/scheme.exe scheme.exe) (cd $W/bin/$M; forceworkln2 scheme.exe petite.exe) - (cd $W/bin/$M; workln ../../../bin/$M/csv95.dll csv95.dll) - (cd $W/bin/$M; workln ../../../bin/$M/csv95.lib csv95.lib) + (cd $W/bin/$M; workln ../../../bin/$M/csv954.dll csv954.dll) + (cd $W/bin/$M; workln ../../../bin/$M/csv954.lib csv954.lib) ;; *) (cd $W/bin/$M; workln ../../../bin/$M/scheme scheme) @@ -238,6 +243,16 @@ ;; esac +workdir $W/bintar +(cd $W/bintar; workln ../../bintar/Makefile Makefile) + +workdir $W/rpm +(cd $W/rpm; workln ../../rpm/Makefile Makefile) + +workdir $W/pkg +(cd $W/pkg; workln ../../pkg/Makefile Makefile) +(cd $W/pkg; workln ../../pkg/rmpkg rmpkg) + (cd $W; workln ../LOG LOG) (cd $W; forceworkln2 ../nanopass nanopass) (cd $W; workln ../makefiles/installsh installsh)