ELFI@x/@8 @@@@888))t*t*t*ض(.(.(.PPTTTDDPtd%%%xxQtdRtdt*t*t*/lib/ld-linux-aarch64.so.1GNU=֔^ML}-L&bH4*y(Rc_1 G5>'x:+Kk.3T:c]N^F$SG_Ef@~<#A?GW C2<`HHNkMAb("$(-mpW! 9'd"* SeC$"3x_- 3@m*##gTBI G:_-/XZ 2 UW,:TPk'?! &VyP/C8R\\1 >6])`*lRG*^=J9t*D@3X`D_#U})'RCN+)L 1Y ,SF5<8 "oG TPj'O!V']]/R=SC\)7S8YyAb eJ&v4!]Ba)[(J!wQZHE^Wc%Wj]dac[NQ3TY:3SE-d_\',Yc e NK:12Mt [T/2(_A>dVN,G:%+A@@$=b&2*RKAV<fb5LYF]]Z!d_b`>9 2b@g9i/Qj$D7RU&4cI<(R^4[t"V]&'9*/bh5(9O Yb+T17b"  G=./)\+b%$37:?qEX#yJbO)365aY.>&W@/r`e<USucCROE[a"O'`ac`TA;PAV_<5qG  D/?gIT*f$X.=kiA RC?dS% a.Eo uX_F<: PXX^3IEb2/9'f!;R E4f4 .>*y4(6 +OhCL]Y`+?SE<  /1'T]IBX&UD#Wx: V}2Kad%0B8  oO-^7) % >AV2#sU@,;4,I5_ Q 0vIFR9@VQJm7*'W;k(v7b-&Ca4QB]Iq( 1,^Yz'*`$bm3w&rYz b=*P _RS9:z71+ g=D`:<K *43$u$7 %@(@+1=U R 4T;6%EOCWPI0$R+0UV]a5E0:T_SGZV84A+3U>~(_YQa ]RN^*`ef SaNw=?^p%HD!a`cN0b:WVFSPn?85,&Z,/?e[@=73 l\K/8KA%b @cd;;>b^c0+y6^O9dTyMQTeY=D'@AM5%1j^2]?^!y@b9Y)s0X m R ]^$LM,_+StS6L^Zg'{IG^"qCM9B)q> cJ(M;MUAv?r`7HFoL|mb)QQ]IFY0\>~0\Q=B=AS+d>cS+'@*+*1d^F USj]d(ZoN,m"O8p`00:!c6>Y-ONW03_8+"LPz!RN)_CK\{cZp8LR$pPGIBU3&ZN_buT*aXVb07qK9F1+SWXaGF3|,%B\R t^$_Y1O%OWV5WUB-camT.RH0=y >Q a0t24C_1Y0"7@`9"L2ZG[ 4]I OZ`^YZ1s]!ZJ)C;I 1XX0+  2In3M"BkH{_T'<a`cA \]6YQ 3  X&P#&( $JH_?4!0 Ow+R+8^3s ^ ;nco2Y54RR<]q %wFU[%^HqE^JE8>.^"P* T!.({!Xb<&7(?t 0]LILyb1gNH,dVPPCRBE-E >/DIUHbXQVF(d-!a5>%[J2O;{*=PcRn,$ E- `U Y7V C\1c%W>b3TaTM/1h+JzH[\H+>)5_3#W dd26*a+OH 7F_ +.Nx#Z&;*"(+W`K 13 %fARHcCQz3Y ]]JK !D Y& OUH3a[9LaZ,V,/H >$ :G]_)S>#E$(I[]X/]KDu(N4C2FX+^k% "[gcf%!<&]  M6&0MYD#qVV4Dx ?B1'U0SOG+W?+7@ aMlP^ (Q1c>`PFL(CfX$ '5wa; 3M <+_V FW1JFT ^(icP' %+Ml1XnFDS7 b-!42~a#^a 2^=pa9` 3+nRa ~1#, SB8*mB>)dMD2<>2lM6oZCY#m^c4=!> ;8.h$ cB: :+JyN#I-`%4HNQTm#I`VJ%.k e Tg E [j `L ~i G x#j `I i*/h pE @k `C _i*/Hi 7 =i 7 Lh $, *k /g k i $Uk @3 <h G k @Ttk OTg E D h @Uj Tdj /h0^j = (j pC g ] Ak \ i ,< h/j `Y gi O x&h C Uk j (k/4j G\i*/ i ] $ch `e \i , g D 7h J p,l @j 8k e Ph , \ j Y ^k L, \i D pj Jzh dJ pi PK "5*/i HSh ,j 5k = 8k ] <l L- xh lX +i ] 4k 0E @pj X hvk /Xa @I k $d .k I4l G (__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTableass_renderer_initass_flush_eventsass_process_force_styleass_set_selective_style_override_enabledass_set_pixel_aspectass_process_codec_privateass_set_fonts_dirass_library_initass_read_stylesass_free_eventass_set_line_spacingass_set_marginsass_set_hintingass_track_set_featureass_alloc_eventass_library_versionass_set_font_scaleass_process_chunkass_set_shaperass_set_message_cbass_set_storage_sizeass_renderer_doneass_library_doneass_free_trackass_set_selective_style_overrideass_add_fontass_set_extract_fontsass_set_frame_sizeass_render_frameass_step_subass_set_style_overridesass_set_use_marginsass_set_check_readorderass_new_trackass_set_fontsass_alloc_styleass_set_line_positionvaUnmapBuffervaDestroyBuffervaQueryVendorStringvaMaxNumEntrypointsvaMaxNumProfilesvaCreateBuffervaCreateConfigvaSyncSurfaceinflateinflateInit_inflateEndvaRenderPicturevaCreateContextvaMapBuffervaDestroyContextvaEndPicturevaErrorStrvaQueryConfigEntrypointsvaQueryConfigProfilesvaBeginPicturevaDestroyConfigav_packet_side_data_nameavcodec_parameters_allocav_packet_rescale_tsav_packet_refavcodec_is_openav_codec_iterateav_packet_cloneavcodec_flush_buffersavcodec_find_encoder_by_nameavcodec_find_decoderavcodec_alloc_context3av_packet_freeavcodec_send_frameav_packet_allocavcodec_default_get_formatav_packet_unrefavcodec_parameters_from_contextavcodec_get_hw_frames_parametersavcodec_receive_frameavcodec_parameters_freeavcodec_get_hw_configavcodec_parameters_to_contextav_codec_is_decoderavcodec_decode_subtitle2avcodec_descriptor_getavcodec_open2avcodec_send_packetavcodec_find_decoder_by_nameav_parser_parse2av_new_packetavcodec_align_dimensions2av_packet_copy_propsavcodec_find_encoderavcodec_default_get_buffer2avcodec_parameters_copyav_codec_is_encoderav_parser_initav_get_profile_nameav_packet_add_side_dataavcodec_find_best_pix_fmt_of_listav_packet_side_data_getavsubtitle_freeavcodec_receive_packetav_parser_closeavcodec_free_contextav_get_bits_per_sampleavcodec_descriptor_get_by_nameavcodec_profile_nameavcodec_versionav_packet_new_side_datapl_gamut_map_desaturatepl_upload_planezimg_filter_graph_freepl_tone_map_linearpl_tex_destroypl_vulkan_destroypl_gamut_map_highlightpl_log_create_349pl_gamut_map_absolutepl_options_freepl_tone_map_st2094_40pl_color_system_guess_ycbcrzimg_filter_graph_buildpl_tex_downloadpl_queue_createpl_gamut_map_clippl_renderer_destroyvaQueryVideoProcFilterCapsrubberband_retrievepl_plane_find_fmtzimg_filter_graph_get_tmp_sizezimg_get_last_errorpl_tone_map_bt2390pl_vulkan_wrappl_hdr_metadata_from_dovi_rpuzimg_graph_builder_params_defaultpl_bit_encoding_equalpl_vulkan_release_expl_tone_map_bt2446apl_tone_map_reinhardpl_tone_map_clipzimg_filter_graph_processpl_options_set_strzimg_image_format_defaultpl_mpv_user_shader_destroypl_icc_profile_compute_signaturepl_tone_map_mobiuspl_tex_createvaQueryVideoProcPipelineCapspl_mpv_user_shader_parserubberband_deletepl_tone_map_hablepl_frame_set_chroma_locationpl_queue_pushrubberband_set_pitch_scalepl_gamut_map_relativepl_vulkan_hold_expl_gamut_map_darkenrubberband_availablepl_gamut_map_saturationpl_tone_map_st2094_10pl_gamut_map_perceptualpl_gamut_map_linearpl_options_allocrubberband_get_samples_requiredpl_tone_map_splinerubberband_newpl_vulkan_createpl_tone_map_gammarubberband_processpl_vulkan_getpl_hdr_rescalepl_queue_destroypl_renderer_createpl_log_destroypl_render_image_mixrubberband_set_time_ratiopl_queue_updateavfilter_versionavfilter_filter_pad_countavfilter_graph_send_commandavfilter_pad_get_typeavfilter_graph_alloc_filteravfilter_init_strav_buffersink_get_frame_flagsavfilter_get_by_nameavfilter_graph_allocav_buffersrc_add_frameavfilter_graph_parse2av_buffersrc_parameters_allocav_buffersrc_parameters_setav_filter_iterateavfilter_graph_create_filteravfilter_inout_freeavfilter_graph_dumpavfilter_graph_freeavfilter_pad_get_nameav_buffersink_get_frame_rateavfilter_linkav_buffersrc_get_nb_failed_requestsavfilter_graph_configdvdnav_current_title_infodvdnav_angle_changedvdnav_still_skipdvdnav_wait_skipdvdnav_closedvdnav_get_current_nav_pcidvdnav_describe_title_chaptersdvdnav_get_current_timedvdnav_set_readahead_flagbd_select_playlistbd_get_titlesbd_readbd_closebd_opendvdnav_get_next_blockdvdnav_set_PGC_positioning_flagbd_free_title_infobd_get_disc_infodvdnav_get_angle_infodvdnav_err_to_stringbd_get_title_infoavio_closeav_probe_input_format2av_find_input_formatavio_open_dyn_bufavformat_get_mov_audio_tagsavformat_alloc_contextavio_seek_timeav_guess_formatav_interleaved_write_frameavio_enum_protocolsavformat_network_initavio_writeav_codec_get_idavformat_find_stream_infoavio_context_freeav_find_program_from_streamavformat_close_inputav_seek_frameav_read_frameavio_open2av_write_frameavio_sizeav_write_traileravio_closepavformat_free_contextavformat_open_inputavio_seekavio_alloc_contextavformat_versionavformat_get_mov_video_tagsavformat_new_streamavformat_write_headerav_demuxer_iterateavio_read_partialavformat_get_riff_audio_tagsav_muxer_iterateav_format_inject_global_side_dataavio_openavio_flushavformat_init_outputavformat_get_riff_video_tagsavio_close_dyn_bufav_guess_codecvaSetErrorCallbackvaSetInfoCallbackvaQueryImageFormatsvaInitializedrmFreeVersiondrmFreeDeviceXOpenDisplayXCloseDisplayXDisplayNamevaDeriveImagevaGetDisplayDRMvaDestroySurfacesvaExportSurfaceHandledrmGetVersionvaDestroyImagevaCreateImagedrmGetRenderDeviceNameFromFdvaMaxNumImageFormatsvaGetDisplayvaPutImagevaTerminatevdp_device_create_x11av_mallocav_frame_new_side_dataav_dict_setav_reduceav_base64_encodeav_lfg_initav_malloczav_buffer_refav_freeav_frame_get_side_dataav_log2av_color_transfer_nameav_hwframe_get_bufferav_dovi_allocav_sha_finalav_dict_set_intav_hwframe_transfer_get_formatsav_cpu_countav_buffer_pool_uninitav_hwdevice_ctx_allocav_dict_getav_pix_fmt_count_planesav_frame_copy_propsav_get_sample_fmt_nameav_opt_get_intav_color_range_nameav_display_rotation_setav_hwframe_mapav_buffer_pool_initav_frame_new_side_data_from_bufav_color_primaries_nameav_sha_allocav_opt_get_qav_channel_layout_defaultav_pix_fmt_swap_endiannessav_gcdav_frame_freeav_callocav_opt_nextav_get_pix_fmt_nameav_uuid_parseav_dict_copyav_display_rotation_getav_version_infoav_log_set_callbackav_freepav_dynamic_hdr_plus_from_t35av_opt_set_intav_lzo1x_decodeav_default_item_nameav_buffer_createav_vkfmt_from_pixfmtav_chroma_location_enum_to_posav_md5_sumav_buffer_allocav_hwframe_ctx_allocav_div_qav_strdupav_hwframe_ctx_initav_hwdevice_get_hwframe_constraintsav_channel_layout_describeav_channel_layout_checkav_get_pix_fmtav_dynamic_hdr_plus_allocav_hwdevice_ctx_createav_buffer_unrefav_d2qav_opt_setav_hwdevice_ctx_initav_uuid_unparseav_sha_initav_color_space_nameav_frame_make_writableav_opt_set_chlayoutav_chroma_location_nameav_frame_allocav_rescale_qav_frame_refav_buffer_is_writableav_hwframe_transfer_dataav_channel_layout_from_maskav_frame_unrefav_image_get_linesizeav_hwdevice_hwconfig_allocav_find_nearest_q_idxav_ts_make_time_string2av_sha_updateav_channel_layout_copyav_pix_fmt_desc_getav_hwframe_constraints_freeav_buffer_pool_getavutil_versionav_opt_getav_get_planar_sample_fmtav_malloc_arrayav_opt_set_dict2av_hwdevice_get_type_nameav_dict_freeav_opt_set_doubleav_log_default_callbackav_frame_cloneav_channel_layout_uninitav_strerrorcmsGetContextUserDatacmsCreateContextcmsDeleteContextcmsCreateTransformTHRcmsFreeToneCurvecmsDoTransformcmsBuildParametricToneCurvecmsDeleteTransformcmsCreateRGBProfileTHRcmsCloseProfilecmsOpenProfileFromMemTHRcmsSetLogErrorHandlerTHRpl_find_error_diffusion_kernelpl_cache_createpl_opengl_getpl_vk_inst_createpl_chroma_location_offsetpl_tex_clearpl_filter_nearestpl_vk_inst_destroypl_swapchain_destroypl_opengl_wrappl_render_imagepl_renderer_get_hdr_metadatapl_buf_destroypl_vulkan_sem_destroypl_timer_querypl_get_color_mapping_matrixpl_find_filter_presetpl_opengl_createpl_icc_updatepl_get_rgb2xyz_matrixpl_buf_writepl_swapchain_start_framepl_opengl_destroypl_find_fmtpl_renderer_flush_cachepl_transform3x3_invertpl_gpu_flushpl_color_repr_sdtvpl_shader_info_refpl_find_named_fmtpl_find_filter_function_presetpl_tex_recreatepl_filter_bicubicpl_shader_info_derefpl_vulkan_sem_createpl_color_map_default_paramspl_color_repr_equalpl_tex_blitpl_swapchain_resizepl_icc_default_paramspl_frames_infer_mixpl_color_space_equalpl_swapchain_submit_framepl_color_space_srgbpl_std430_layoutpl_color_space_is_hdrpl_log_updatepl_color_repr_mergepl_swapchain_swap_bufferspl_gpu_finishpl_buf_createpl_opengl_create_swapchainpl_queue_peekpl_fmt_is_orderedpl_pass_createpl_swapchain_colorspace_hintpl_timer_destroypl_filter_oversamplepl_matrix3x3_invertpl_versionpl_color_space_mergepl_vulkan_choose_devicepl_primaries_clippl_cache_destroypl_std140_layoutpl_queue_resetpl_hdr_metadata_emptypl_color_repr_rgbpl_raw_primaries_getpl_tex_uploadpl_filter_bilinearpl_lut_freepl_get_xyz2rgb_matrixpl_icc_closepl_timer_createpl_color_transfer_nominal_peakpl_rect2df_rotatepl_pass_destroypl_hdr_metadata_containspl_gpu_set_cachepl_vulkan_create_swapchainpl_desc_namespacepl_frame_from_swapchainpl_pass_runpl_lut_parse_cubepl_matrix3x3_mulpl_buf_pollpl_color_space_nominal_luma_exswr_convertswr_get_out_samplesswr_set_channel_mappingswr_freeswr_set_compensationswr_initswr_get_delayswr_allocswresample_versionswr_closesws_setColorspaceDetailsswscale_versionsws_isSupportedOutputsws_isSupportedInputsws_scalesws_freeContextsws_getCoefficientssws_alloc_contextsws_freeFiltersws_getDefaultFiltersws_init_contextcdio_paranoia_initcdio_paranoia_overlapsetcdio_paranoia_freecdio_paranoia_readcdio_paranoia_modesetcdio_paranoia_seekcdio_cddap_track_firstsectorcdio_cddap_speed_setcdio_cddap_identifycdio_cddap_disc_lastsectorcdio_cddap_verbose_setcdio_cddap_opencdio_cddap_closecdio_cddap_trackscdio_cddap_track_lastsectorcdio_cddap_disc_firstsectorcdtext_get_constcdio_get_cdtextlog10logpowcosfj1expfsinsincospowffmodfdvdnav_get_positiondvdnav_get_number_of_partsdvdnav_get_video_aspectdvdnav_audio_stream_to_langdvdnav_get_spu_logical_streamdvdnav_spu_stream_to_langdvdnav_get_title_stringdvdnav_title_playdvdnav_get_number_of_titlesdvdnav_opendvdnav_get_audio_logical_streamdvdnav_time_searchjs_haspropertyjs_getlengthjs_calljs_rot2js_nextiteratorjs_pushnulljs_defpropertyjs_trystringjs_popjs_isbooleanjs_throwjs_currentfunctionjs_pushglobaljs_getpropertyjs_setcontextjs_isundefinedjs_isarrayjs_gettopjs_getglobaljs_tostringjs_setindexjs_setreportjs_pcalljs_loadstringjs_isobjectjs_freestatejs_endtryjs_tonumberjs_getcontextjs_newarrayjs_savetryjs_newstatejs_pushiteratorjs_newcfunctionjs_pushlstringjs_errorjs_pushbooleanjs_pushstringjs_gcjs_tobooleanjs_setglobaljs_iscallablejs_pushundefinedjs_copyjs_newregexpjs_setpropertyjs_pushnumberjs_isnulljs_getindexjs_newobjectjs_newuserdatajs_touserdatajs_isnumbercmsCreateXYZProfilecmsBuildGammacmsDetectBlackPointarchive_read_set_open_callbackarchive_read_dataarchive_read_support_format_7ziparchive_read_set_close_callbackarchive_error_stringarchive_read_support_format_zip_streamablearchive_read_support_filter_bzip2archive_read_next_headerarchive_read_support_filter_xzarchive_read_open1archive_read_set_read_callbackarchive_read_support_format_rararchive_read_support_format_iso9660archive_read_closearchive_entry_sizearchive_read_support_format_rar5archive_read_freearchive_entry_pathnamearchive_read_support_filter_gziparchive_read_support_format_zip_seekablearchive_read_append_callback_dataarchive_read_set_skip_callbackarchive_read_set_seek_callbackarchive_seek_dataarchive_entry_size_is_setarchive_read_newarchive_entry_filetypejack_port_registerXSetForegroundjack_client_closeXCreateGCXSetWMProtocolsXFreeGCXvQueryAdaptorsjack_set_process_callbackXInternAtomjack_client_openjack_activatedrmModeFreePlaneResourcesXPendingjack_get_buffer_sizedrmSetClientCapXShmDetachXMapWindowXShmAttachXFreeXvShmCreateImagedrmModeGetPlanejack_port_get_latency_rangeXvShmPutImageXNextEventjack_port_get_bufferdrmModeFreePlanedrmModeGetPlaneResourcesXvListImageFormatsXGetWindowAttributesjack_get_sample_rateXvFreeAdaptorInfoXSyncavdevice_versionavdevice_register_allbd_get_playlist_infobd_select_titlebd_tell_timebd_get_eventbd_seek_timebd_set_debug_maskbd_get_current_titlebd_read_skip_stillbd_seamless_angle_changebd_get_metalua_pushvaluelua_settoplua_setallocflua_pushnilluaL_checknumberlua_getallocflua_removeluaL_checklstringlua_getfieldlua_pushnumberluaL_loadstringluaL_openlibsluaL_errorlua_gettablelua_cpcalllua_typelua_pushstringlua_tobooleanlua_nextlua_setfieldlua_touserdatalua_typenameluaL_loadbufferlua_tolstringluaL_optnumberlua_settablelua_insertlua_pcalllua_createtablelua_tonumberluaL_optlstringluaL_checkstacklua_errorluaL_checkoptionlua_setmetatablelua_calllua_closelua_getmetatablelua_pushbooleanlua_pushintegerlua_pushlstringluaL_checkintegerlua_rawsetlua_gettoplua_pushcclosurelua_rawsetiluaL_newstatelua_pushlightuserdatarubberband_resetuchardet_handle_datauchardet_data_enduchardet_get_charsetuchardet_newuchardet_deletegetVSScriptAPIzimg_filter_graph_get_input_bufferingzimg_select_buffer_maskzimg_filter_graph_get_output_bufferingsnd_mixer_selem_set_playback_switchsnd_mixer_loadsnd_pcm_hw_params_set_accesssnd_pcm_hw_params_test_formatsnd_pcm_get_chmapsnd_mixer_closesnd_mixer_selem_id_get_namesnd_pcm_hw_params_set_rate_nearsnd_pcm_opensnd_pcm_sw_params_set_start_thresholdsnd_mixer_find_selemsnd_pcm_chmap_printsnd_mixer_selem_get_playback_switchsnd_pcm_hw_paramssnd_pcm_status_get_delaysnd_pcm_resumesnd_pcm_sw_params_currentsnd_strerrorsnd_pcm_hw_params_get_period_sizesnd_pcm_closesnd_pcm_sw_params_set_silence_sizesnd_pcm_set_chmapsnd_mixer_selem_id_sizeofsnd_mixer_selem_id_get_indexsnd_pcm_hw_params_sizeofsnd_asoundlib_versionsnd_output_closesnd_device_name_free_hintsnd_pcm_sw_params_get_boundarysnd_mixer_attachsnd_pcm_query_chmapssnd_pcm_status_get_availsnd_mixer_selem_has_playback_switchsnd_pcm_hw_params_dumpsnd_pcm_startsnd_output_flushsnd_mixer_selem_get_playback_volume_rangesnd_device_name_hintsnd_pcm_hw_params_set_formatsnd_mixer_selem_id_set_namesnd_pcm_statesnd_mixer_selem_set_playback_volumesnd_pcm_sw_paramssnd_device_name_get_hintsnd_mixer_opensnd_pcm_hw_params_set_channels_nearsnd_mixer_selem_get_playback_volumesnd_pcm_hw_params_set_rate_resamplesnd_mixer_selem_id_set_indexsnd_pcm_hw_params_copysnd_pcm_dropsnd_pcm_statussnd_pcm_hw_params_get_buffer_sizesnd_pcm_state_namesnd_pcm_preparesnd_pcm_status_get_statesnd_pcm_hw_params_set_buffer_time_nearsnd_output_buffer_opensnd_pcm_hw_params_set_periods_nearsnd_pcm_hw_params_anysnd_config_update_free_globalsnd_pcm_sw_params_sizeofsnd_pcm_free_chmapssnd_pcm_nonblocksnd_pcm_status_sizeofsnd_mixer_selem_has_playback_switch_joinedsnd_pcm_writeisnd_pcm_dumpsnd_pcm_writensnd_mixer_selem_registersnd_pcm_chmap_type_namesnd_output_buffer_stringsnd_pcm_pausesnd_pcm_hw_params_can_pausejack_port_namejack_set_graph_order_callbackjack_set_buffer_size_callbackjack_connectjack_get_portsalcDestroyContextalcGetContextsDevicealDeleteSourcesalSourceUnqueueBuffersalcCreateContextalListenerfalDeleteBuffersalListenerfvalcGetCurrentContextalGetEnumValuealGetStringalSourcefalSourceialSourceQueueBuffersalGetSourcefalGetSourceialSourcePlayalGenSourcesalGetListenerfalBufferDataalcGetIntegervalGetProcAddressalGenBuffersalcGetEnumValuealcGetErroralSourceStopalIsExtensionPresentalcOpenDevicealcCloseDevicealSourcePausealcMakeContextCurrentpw_properties_newpw_core_get_contextpw_thread_loop_stoppw_stream_queue_bufferpw_get_library_versionpw_context_destroypw_initpw_thread_loop_get_looppw_properties_freepw_stream_flushpw_stream_destroypw_thread_loop_lockpw_proxy_destroypw_thread_loop_signalpw_stream_update_propertiespw_thread_loop_newpw_context_newpw_stream_get_nsecpw_thread_loop_timed_wait_fullpw_stream_state_as_stringpw_stream_get_time_npw_thread_loop_startpw_stream_dequeue_bufferpw_properties_setfpw_stream_set_activepw_stream_newpw_context_connectpw_stream_add_listenerpw_thread_loop_waitpw_stream_set_controlpw_stream_connectpw_stream_update_paramspw_thread_loop_get_timepw_thread_loop_destroypw_deinitpw_thread_loop_unlockpa_threaded_mainloop_lockpa_operation_unrefpa_stream_get_indexpa_stream_flushpa_stream_get_statepa_proplist_newpa_threaded_mainloop_stoppa_threaded_mainloop_get_apipa_context_newpa_format_info_set_channelspa_stream_get_sample_specpa_format_info_set_sample_formatpa_stream_set_namepa_stream_new_extendedpa_threaded_mainloop_signalpa_context_subscribepa_strerrorpa_stream_get_timing_infopa_proplist_setspa_stream_writepa_threaded_mainloop_unlockpa_stream_unrefpa_stream_is_suspendedpa_format_info_freepa_stream_set_write_callbackpa_stream_set_latency_update_callbackpa_cvolume_setpa_threaded_mainloop_startpa_stream_set_underflow_callbackpa_context_disconnectpa_cvolume_avgpa_context_get_server_protocol_versionpa_context_set_state_callbackpa_context_connectpa_context_get_statepa_context_get_sink_input_infopa_context_unrefpa_context_get_sink_info_listpa_format_info_set_channel_mappa_context_set_sink_input_mutepa_stream_set_state_callbackpa_threaded_mainloop_freepa_stream_connect_playbackpa_stream_disconnectpa_context_set_sink_input_volumepa_threaded_mainloop_newpa_stream_corkpa_stream_writable_sizepa_get_library_versionpa_stream_get_latencypa_context_set_subscribe_callbackpa_format_info_set_ratepa_threaded_mainloop_waitpa_proplist_freepa_operation_get_statepa_stream_get_buffer_attrpa_format_info_validpa_context_get_protocol_versionpa_bytes_to_usecpa_stream_update_timing_infopa_context_errnopa_format_info_newdrmModeSetPlanedrmModeAtomicAllocdrmGetDeviceFromDevIddrmModeFreeResourcesdrmGetDevices2drmModeAtomicAddPropertydrmModeAddFB2WithModifiersdrmModeFreeCrtcdrmIsKMSdrmModeGetCrtcdrmHandleEventdrmModeAddFB2drmGetDeviceNameFromFd2drmModeAtomicFreedrmModeObjectGetPropertiesdrmModeFreeEncoderdrmSetMasterdrmModeFreePropertyBlobdrmModeGetConnectordrmPrimeFDToHandledrmModeRmFBdrmIoctldrmModeGetPropertyBlobdrmFreeDevicesdrmModeCreatePropertyBlobdrmGetCapdrmModePageFlipdrmDropMasterdrmModeDestroyPropertyBlobdrmModeFreeObjectPropertiesdrmModeGetPropertydrmModeFreeConnectordrmModeGetResourcesdrmModeGetEncoderdrmModeFreePropertydrmModeAtomicCommitwl_buffer_interfacegbm_surface_creategbm_bo_get_plane_countgbm_device_destroygbm_surface_has_free_buffersgbm_surface_lock_front_buffergbm_surface_destroygbm_bo_get_user_datagbm_surface_create_with_modifiersgbm_bo_get_heightgbm_create_devicegbm_bo_get_widthgbm_bo_get_modifiergbm_surface_release_buffergbm_bo_get_handle_for_planegbm_bo_get_stride_for_planegbm_bo_get_offsetgbm_bo_set_user_datajpeg_std_errorjpeg_destroy_compressjpeg_finish_compressjpeg_stdio_destjpeg_start_compressjpeg_set_defaultsjpeg_write_scanlinesjpeg_set_qualityjpeg_CreateCompresssixel_output_unrefsixel_dither_set_body_onlysixel_output_set_encode_policysixel_output_newsixel_dither_get_num_of_histogram_colorssixel_dither_getsixel_dither_unrefsixel_dither_initializesixel_encodesixel_helper_format_errorsixel_dither_set_diffusion_typesixel_dither_newwl_output_interfacewl_callback_interfacewl_display_connectwl_shm_pool_interfacewl_display_cancel_readwl_surface_interfacewl_list_insertwl_display_get_errorwl_seat_interfacewl_list_emptywl_display_roundtripwl_proxy_set_user_datawl_keyboard_interfacewl_subcompositor_interfacewl_display_get_fdwl_touch_interfacewl_list_initwl_display_read_eventswl_subsurface_interfacewl_data_device_interfacewl_display_flushwl_proxy_add_listenerwl_region_interfacewl_list_lengthwl_proxy_get_versionwl_display_disconnectwl_pointer_interfacewl_proxy_destroywl_shm_interfacewl_display_dispatch_pendingwl_registry_interfacewl_display_prepare_readwl_compositor_interfacewl_proxy_marshal_flagswl_list_removewl_data_device_manager_interfacewl_cursor_theme_get_cursorwl_cursor_theme_loadwl_cursor_image_get_bufferwl_cursor_theme_destroyxkb_keysym_to_utf8xkb_state_key_get_one_symxkb_keymap_mod_get_indexxkb_keymap_new_from_bufferxkb_context_newxkb_state_newxkb_keymap_unrefxkb_state_update_maskxkb_state_unrefxkb_context_unrefxkb_state_mod_index_is_activeXGetEventDataXCreateColormapXFilterEventXSetErrorHandlerXSendEventXDestroyRegionXGetGeometryXGetVisualInfoXGetSelectionOwnerXGetErrorTextXrmGetStringDatabaseXutf8LookupStringXSetWMNormalHintsXDestroyWindowXLookupStringXGetWindowPropertyXFlushXCloseIMXFreeColorsXCreateICXDestroyICXDefineCursorXFreeEventDataXUngrabPointerXSetClassHintXSetTextPropertyXConfigureWindowXRaiseWindowXFreePixmapXInitThreadsXrmInitializeXGetAtomNameXCreateBitmapFromDataXFreeCursorXPeekEventXAllocSizeHintsXConvertSelectionXTranslateCoordinatesXFillRectangleXResourceManagerStringXPutImageXSetWMHintsXFreeColormapXAllocNamedColorXCreatePixmapCursorXCreateRegionXrmDestroyDatabaseXUnionRectWithRegionXResetScreenSaverXMatchVisualInfoXSelectInputXMoveResizeWindowXSetWindowBackgroundXkbSetDetectableAutoRepeatXCreateImageXOpenIMXutf8TextListToTextPropertyXrmGetResourceXChangePropertyXCreateWindowXIconifyWindowXScreenSaverSuspendXScreenSaverQueryVersionXScreenSaverQueryExtensionDPMSQueryExtensionXShapeCombineMaskXShmCreateImageDPMSEnableDPMSInfoXShmGetEventBaseXShmQueryExtensionXShmPutImageXShapeCombineRegionDPMSDisableXPresentNotifyMSCXPresentQueryExtensionXPresentSelectInputXRRFreeProviderResourcesXRRGetOutputPrimaryXRRGetProviderInfoXRRGetScreenResourcesCurrentXRRSelectInputXRRFreeProviderInfoXRRFreeCrtcInfoXRRFreeOutputInfoXRRGetOutputInfoXRRGetProviderResourcesXRRQueryExtensionXRRFreeScreenResourcesXRRGetCrtcInfoXvGetPortAttributeXvQueryExtensionXvSetPortAttributeXvQueryEncodingsXvPutImageXvGrabPortXvQueryPortAttributesXvFreeEncodingInfoXvCreateImageglXSwapBuffersglXDestroyContextglXGetProcAddressARBglXIsDirectglXGetVisualFromFBConfigglXGetFBConfigAttribglXQueryExtensionsStringglXChooseFBConfigglXQueryVersionglXMakeCurrenteglCreateContexteglGetCurrentDisplayeglInitializeeglBindAPIeglGetConfigAttribeglMakeCurrenteglQueryStringeglGetDisplayeglCreateWindowSurfaceeglGetProcAddresseglGetErroreglSwapIntervaleglTerminateeglSwapBufferseglChooseConfigeglDestroyContexteglReleaseThreadeglGetCurrentContexteglDestroySurfacewl_egl_window_destroywl_egl_window_resizewl_egl_window_createvkCreateDisplayPlaneSurfaceKHRvkGetPhysicalDeviceDisplayPropertiesKHRvkGetDisplayPlaneSupportedDisplaysKHRvkDestroySurfaceKHRvkGetPhysicalDeviceDisplayPlanePropertiesKHRvkCreateWaylandSurfaceKHRvkGetDisplayModePropertiesKHRvkEnumeratePhysicalDevicesvkGetPhysicalDeviceQueueFamilyProperties2vkCreateXlibSurfaceKHRvkGetPhysicalDeviceProperties2vkGetPhysicalDevicePropertiesvaDeassociateSubpicturevaCreateSubpicturevaQueryVideoProcFiltersvaCreateSurfacesvaMaxNumSubpictureFormatsvaMaxNumDisplayAttributesvaAssociateSubpicturevaDestroySubpicturevaQuerySubpictureFormatsvaQueryDisplayAttributesvaGetDisplayWlvaPutSurface_Unwind_Resume__gcc_personality_v0fgetsnanosleeppthread_detachregfreefchmodsnprintf__isoc23_strtoulliconv_openfopen64_setjmp__poll_chkstrncpypthread_sigmaskshmatshm_openstrcollsetsidclock_gettimeuselocale__stack_chk_fail__printf_chkfreadlseek64pthread_mutexattr_settypepthread_onceiconv__assert_failsigaddsetreaddir64globfree64shmdtregcompsigfillseticonv_closepthread_selffstatfs64dlclosesigactionutime__longjmp_chkclosedirrealpathbindstrspnpthread_mutexattr_destroysocketpairstrrchrmunmapfflushdifftimefreelocalememmovemmap64strtod__isoc23_sscanfsocketfork__getauxvalstrlenpthread_cond_initpthread_joinusleep__memcpy_chkstrstrposix_fallocate64strnlensendpthread_mutex_destroypthread_mutex_trylockmkdir__vfprintf_chkfeofpthread_mutexattr_init__isoc23_strtolpthread_cond_timedwait__vsnprintf_chkpthread_cond_signalpthread_createdup2getpidstdoutexecvepthread_mutex_lockreallocpthread_cond_broadcastisatty__isoc23_strtollppoll_exit__memmove_chkstrftimestrcasecmp__fprintf_chkstrcspn__libc_start_mainglob64sigprocmaskstderrfdopenlisten__memset_chkmemchrpthread_cond_destroymemfd_createstrncasecmp__read_chkfcntl64dlsymraisefstat64dlopen__cxa_finalizelocaltimedlerrorsetlocaleshm_unlinkstrchrkillshmgetgetenvpthread_mutex_initacceptmemcmpfcloseftruncate64newlocalememset__libc_current_sigrtmax__isoc23_strtoulregerrorioctlrenamewaitpidtcgetattrpthread_condattr_setclockpthread_mutex_unlockopendir__snprintf_chkpthread_setname_npsigemptysetregexectcsetattrmemcpyfilenogetcwdfwritestrcmpqsortpthread_condattr_destroyfseekpthread_getcpuclockid__errno_location__isoc23_vsscanfshmctlabortpthread_cond_waitpthread_condattr_inittcgetpgrpstrncmpmemrchrpipe2__environ__cxa_atexit__stack_chk_guardlibass.so.9libavcodec.so.61libavfilter.so.10libavformat.so.61libavutil.so.59libplacebo.so.349libswresample.so.5libswscale.so.8libcdio_paranoia.so.2libcdio_cdda.so.2libcdio.so.19libm.so.6libdvdnav.so.4/usr/lib/libmujs.soliblcms2.so.2libarchive.so.13libavdevice.so.61libbluray.so.2libluajit-5.1.so.2librubberband.so.2libuchardet.so.0libvapoursynth-script.so.0libzimg.so.2libz.so.1libasound.so.2libjack.so.0libopenal.so.1libpipewire-0.3.so.0libpulse.so.0libdrm.so.2libgbm.so.1libjpeg.so.8libsixel.so.1libwayland-client.so.0libwayland-cursor.so.0libxkbcommon.so.0libX11.so.6libXss.so.1libXext.so.6libXpresent.so.1libXrandr.so.2libXv.so.1libGL.so.1libEGL.so.1libwayland-egl.so.1libvulkan.so.1libva-drm.so.2libva.so.2libva-wayland.so.2libva-x11.so.2libvdpau.so.1libgcc_s.so.1libc.so.6ld-linux-aarch64.so.1mpv_abort_async_commandmpv_stream_cb_add_rompv_set_propertympv_command_retmpv_client_api_versionmpv_render_context_get_infompv_command_nodempv_get_property_osd_stringmpv_get_time_nsmpv_create_weak_clientmpv_get_property_string_edatampv_command_node_asyncmpv_hook_add_IO_stdin_usedmpv_wait_async_requestsmpv_client_idmpv_set_property_asyncmpv_event_namempv_command_stringmpv_request_eventmpv_wakeupmpv_free_node_contents__end__mpv_unobserve_propertympv_del_propertympv_set_option__bss_end__mpv_get_property_asyncmpv_render_context_set_parametermpv_client_namempv_render_context_freempv_request_log_messagesmpv_get_propertympv_render_context_set_update_callbackmpv_observe_propertympv_hook_continuempv_render_context_creatempv_set_option_stringmpv_load_config_filempv_terminate_destroympv_render_context_update__bss_start__mpv_create_clientmpv_error_string__data_startmpv_commandmpv_get_wakeup_pipempv_freempv_set_wakeup_callback__bss_startmpv_render_context_report_swapmpv_render_context_rendermpv_destroympv_event_to_nodempv_wait_eventmpv_creatempv_command_asyncmpv_initializempv_set_property_stringmpv_get_time_usVA_API_0.33.0GLIBC_2.17CDIO_19GCC_3.0GCC_3.3.1LIBAVFILTER_10CDIO_CDDA_2ALSA_0.9.0rc4ALSA_0.9CDIO_PARANOIA_2LIBAVDEVICE_61GLIBC_2.38GLIBC_2.27GLIBC_2.29LIBAVUTIL_59LIBSWSCALE_8LIBJPEG_8.0GLIBC_2.33GLIBC_2.28GLIBC_2.32GLIBC_2.34LIBAVCODEC_61LIBSWRESAMPLE_5LIBAVFORMAT_61PULSE_0/usr/lib                                                                                                               H*eX*`h*x**e*e؆*#**e*`(*H*`X*eh**X*`*ȇ*hЇ*؇**@*p* *** *80*X*h*x,x*h**x*********0*X**8*Љ** *H*p***@* *8*=`*(*0*8؋*@*(*PP*Xx**`Ȍ*h*p*x@*h*****0*8#X***Ў* *(*h8*p?@*:H*@ P*L6X*(*e*`*eЏ**** *0*P*``*p*e*0*****Ȑ*А*ؐ********* *(*0*8*@* H*P*(X*`*0h*8p*@x*@*H*H*P*P*X*X***`ȑ*Б*hؑ*h*p*x****** *(*0*8*@*hH*P*X*`*h*p*x**********Ȓ*В*ؒ********* *(*0*8*@*H*P* X*(`*0h*0p*8x*8*@*@*H*H***P*ȜГ*ؓ**\*Q*`Q*dQ *(*0*8*@*H*P* X*0`*8h*0p*Hx*0*X*=*h*x*****Ȕ*Д*ؔ***`**(**0** *(*h0* 8*@*(H*0P*8X*@`*Hh*P* ,*$***ȕ*HЕ*ؕ***m* *@*(* l*0* *8(*0*H8*@*PH*P*hX*`*h*p*x*8******`***Ȗ*****8#**8#**8# *(*8#0*8*@*H*P*(X*8`*Ph*`p*xx*********З*`***` *0*P*X*`*h*x*v** *0Ș*$ **@ *p**h*  *p(* 0*`*8*x@* P*X*0 *0*X*l Й*Xؙ******* *` *H0*l `*p*x***x/*e**К**,*$(*h,8**P*X*(h*# p*" *@" **@*' *" ț*@" */*t*p *x0*@*P*`*p******М***** *0*o@*P*`* p*t*o*t*@*Pȝ*/ Н*dB ؝*, *p@ */ ***(**@**X**p* **@**`****** *@*`*********(**@**X*(*p********* ؠ*****0**(*H*@*h*H*8h*@*P****С********0* *H*@*`*`*x***X*h*p*x* *@*`*****У***(****(*@*H*X**p***** **@**** *@*(X*`*p*x*x*8***ȥ***ȥ*H*X*h(*x@*H*X*`*`*x***ب*****ئ*8**X**x* **8**P*ة*h*****8**X*ȧ*x******ت*(**@**X*8*p*X**x**8**8*Ш**ب***8*X*x***ة** *08*HX*`x*h*x*ت***8*X*x****** *ث*@**`*** **8**P**h*** **@**`*Ȭ******* *@*`**(*8*H*X*h *x@*`*****Ю***0**P**p*0**H**`*а*x*****0**P*د*p******0*P*p* * *0 а*H *` *x 0* P* p* * * ȱ*б*******(* *@*@*X*`*p********* * *  * @*0 `*H *` *x * * * * *0**H**`*ش*x***** * ش* * * 8*0 P*X*h***ص******8 ص*P *h *x 8* P*X*h*p*p* ******ж*0**P** * 0* P* h*p****** * *8 ***`*(**@**X**`*P *` *p * * ***** 0*8*H*h*`**h* * ****й*(**H**h** (* H* h* * *****0 غ***X**x* **8**P*ػ*X*@ x*P *` *p ػ* * **(*0*0* H*P*`*ȼ*x*****(**H*ȼ* * * (* H*`*h*x*(**H**h***ؽ***Ⱦ*** **(*H* h*8*H*`Ⱦ*x** *(*8**P**h*ȿ*****ȿ*** *(*8*@*@*X*`*p********@**`***** **8**@* `*0*@*P*h*** *0**H**`**x*********8*P*dn X*i `* i p**dn *l *** *@ *ā *@x *h0* 8*А @* H*@ P*`h*P p* x* *p *P* *` * * ** * *,*@$(*@* H* P* `*p**`*@,*$*@,*$*(* 0* 8* H*"`* h* *"* *,* * * *@ *+*+*$*,0* H*` P*,X* ,h*$p*,* *` *+*+*$*,*l *` *,* ,(*H$0*,P*l h*` p*/* * * */*# * * *2*= *J *@> *6 * ,0*$H*x3h*@S *3*X *`W *X *3*3(*3@*X H*Y P*X `*:*̒ *h;*l *` *@ (* 0* 8*X;* *p *P *0 *0<*@@*H@*P@*`@*p@ *@0*@@*@P*X`*@*$,*$*L*M* M*(M*+$*0M(*8M8*PMH*XMX*`Mh*hMx*pM*xM*M*M*M*M*M*M*M*S*S(*M8*MH*MX*Mh*Mx*M*M*M*M*N*N*N*N* N*(N*0N(*8N8*@NH*HNX*PNh*XNx*`N*hN*pN*xN*N*N*N*N*N*N*N(*N8*NH*NX*Nh*Nx*N*N*N*N*O*O*(O*0O*8O*@O*PO(*XO8*hOH*xOX*Oh*Ox*O*O*O*O*O*O*P*P* P*(P*0P(*8P8*@PH*HPX*PPh*XPx*`P*hP*pP*P*P*P*P*P*P*Q*Q(* Q8*0QH*HQX*`Qh*xQx*Q*Q*Q*Q*Q*R*R*0R*HR*`R*R(*R8*RH*RX*Rh*Qx*S*S*S* S*(S*0S*8S*@S*HS*XS*hS(*pS8*SH*SX*Sh*Sx*S*S*S*S*S*S*S*T*T*T* T(*(T8*0TH*@TX*PTh*`Tx*pT*T*T*T*T*T*T*T*T*U*U(* U8*0UH*@UX*PUh*`Ux*pU*U*U*U*U*U*U*U*U*U*V(*V8*(VH*8VX*HVh*XVx*hV*P*X*X*V*X*X*#*G*m*Ȇ*D *. 0*P! @*+ P*G X* `*( p*H*X@*`*`*h *V (*0 8*P! x*p* * * *! *L *@/ * * *x*@ * *`x *X (*`Y 0*/ 8* @*H*H*`X*Вh*x***@**p**O *@ *P! 0* @*ЅP*0Q X* `*+ h*P! x* *C *P7 *` *؅*$] * *  *l( *0 * *,= (* 8*P! h*( x** * *P! *( **R *D *P! 8*( H* X*o `* p*P! *@ *0*`n * *P! *@ *@(*l 0* @*P! p*@ *P*I * *P! * *X*0 P*``* *h* *@ *@x * *`} * * *0*L~ 8*@ H*@x P* h*{ p* x* ***`*В*@*p** * *@x * *y (*0 0* 8*@*@*`P*В`*p**@**p** *` * * *< * *; (*8*0X @*`B H*g P*P! `*5 h*> p*A x*$5 * **W * *`h *P! * *P? * A * *` **DT * *`h *P! 0* 8*P? @* A H* P*` `*p*2 x*% *P! *6 *h& *( *І*q *( * *P! *l) *( * * * 0*@*d H*( X*P! h*l) p*( x* * * ** *( *P! *$+ *8 *@; * *( *X*Pg * (*P! 8* ( H* P* X* h*Xx*He * *P! * *` * * *8,,****؈*P/*/P**/*/*8/*`/ *X/x*`*0****p*`*e*`8*`X*`h*8x**H*#*`*P**`*P*(*`H*`X*`h*`lx*X*`*X@*h*p*p*0*3*а8*`H*X*Hx*`*H*`**x*`**(*`8*H*@h*`x****`****`*(*8*X*`h*~x*%*`***`**H*`(*#8*X*`h*xx**`*e*`*e*`*e(*`8*eX*`h*x*H*e*`*P****p_8*X*ex*`**e*`*К**ؚ*0*,@*`%X*h*x*e*`**e*,*h%*x, *x%8*e`*(,p*/*,*/*`**p*`**`(*8*pH*`X**,*/***p**p*(*p8*H*h*`x* **(*,*/*ؘ,**`*ЈX**e*p*h*0*p*e *`0*P*``*ep**`**8*x*e*`* *0*@*P*`*Ȥp*ؤ******#*` *0*P*x`* p**(*0*8*`*e*@*В*A0*x8*@*H*ЩP*8:X*hx* ****0*H*~*`****** *8+H+p++ +ض(+0+@+pH+P+X+`+h+0p+@x+P+`+@+p+x+++++ȴ+ش++`+h`+(+h++p+++++++++(++++++++p++@+ ++(++0++8++@++H++P++X++`++h++p++x++ ++(+@+++p +H@+pH+Ph+Xp+`++h++p+x++++8+H(+X0+8+X+`+++++0 +p+++ +0(+H+@P+p+px+(+X+H+H+P+P+`++p8+@+x`+(h++8++H++h+++(+00+P+X+x+X++++@+++0+8+@@+`+h+p+X+ȉ+h++x++ + +0 +p8 +X +`` +x + +h +0 +@ + +X + +h +y + +@ +H +P +p + + +ؠ +8 +H +lh +x +t +p + + + +# +` +# +( +8 +X +x +@ +В +@ +A +@ + +  +@ +В +@( +A8 +@H +X + x +0 +( +0 +0 +( +0 +@++H8+0H+p_X+(h+0x+H+X+h+x+e++x+e(+H+xX+eh+++++++p+x(+`H+xX+`x++++@++++(+p_8+H+8X+h+x++++++(+8+`+H+X+h+x+++++ +(+0+@+H+ P+0X+@`+Hp+Xx+p++++++@++++(+8+++8++(+0+@8+P@+H+8mP+X+`+h+p+`x+p+++++`++p++++++(+8+@+++H+h +0(+X0+h8+x@+HH+P+X+`+h+p++++++++++0+@+X+p+++++++ +(+P0+(8+0@+@H+HP+`X+x`+h+p+x++++x++++Pl+++++Pl+Pl+Pl(+Pl@+H+ `+ph+(+p+P(+p+ +++ +++ ++ , +0(+ @+HH+L `+^h+` +(+-+X+0 +h+ +x+ ++ +(+@+H+ `+h++X+ ++H ++@++` ++` +@(+ @+HH+ `+h+ ++@ ++ ++++d++` +(+ @+0H+ ^P+`+h+@ ++ +@+ S++P'++ ++D +(+ @+H+HP`+h+(P++O+x+M+`++M+h++ + + +8( +H @ +H + ` +h +l +X + + + +p +l + + !+!+` !+(!+ @!+H!+ `!+h!+ !+X!+ !+!+ !+!+H !+!+ "+0"+$ "+("+ȥ @"+H"+=`"+h"+H "+"+_"+@"+ "+`"+7"+"+ #+H#+  #+X(#+ @#+H#+`#+h#+l #+h#+ ^#+x#+#+ #+#+0 #+#+$+8$+H $+($+ @$+H$+`$+ph$+ ^p$+P$+@$+ ^$+p$+$+ $+$+ $+x$+$$+ %%+y%+! %+(%+@%+`H%+, `%+h%+P %+%+ %+x%+ %+%+0 %+`%+$ &+&+ ^&+ &+(&+ ^0&+@&+8H&+ ^P&+`&+@h&+ ^p&+&+&+ ^&+&+&+ ^&+&+&+ &+X&+ '+ '+ '+0('+ @'+hH'+d `'+@h'+@ '+H'+@ '+@'+о '+'+'+'+$'+ %(+(+ (+((+ @(+XH(+ `(+ph(+ (+H(+ (+ (+ ^(+(+0(+ ^(+(+@(+ ^(+)+)+ )+()+ @)+(H)+@ `)+8h)+0 )+)+$)+ %)+0)+$)+ %)+)+)+ %)+@)+)+ %*+*+ *+(*+0*+ %@*+XH*+P*+ %`*+h*+ *+*+D *+ %*+*+D *+ %*+*+@^*+*+*+ *+ %++++ ++ % ++(++0++ %@++H++P++ %`++`h++=++h++<++++ ++++ ++(++ ++ %,+P,+ ,+| % ,+0(,+ 0,+x %@,+H,+ `,+h,+l,+,+,+,+ ,+,+, ,+,+ -+(-+ -+@(-+ @-+PH-+ `-+`h-+ -+p-+d -+-+ -+-+ -+-+ .+.+ .+(.+ @.+H.+ `.+mh.+I.+.+I.+.+ .+.+,q .+.+` /+(/+ /+8(/+ @/+HH/+` `/+Xh/+@6/+h/+ /+0/+ ^/+/+/+ ^/+x/+/+ ^/+0+X0+ ^0+x 0+(0+ ^00+@0+H0+ ^P0+`0+h0+ ^p0+0+00+@^0+0+0+0+d0+0+0+L0+-0+(%1+P1+X 1+X(1+01+ $@1+X1+X1+`1+ظp1+ x1+$1+x!1+`)1+1+1+x!1+1+ -1+2+2+ 2+"02+@182+P2+P2+"X2+"h2+ 'x2+@12+2+2+ '2++2+"2+X /2+ /2+ /2+ /2+x /2+X /2+H /2+8 /3+ /3+ /3+ /3+ / 3+ /(3+ /03+ /83+ /@3+ /H3+ /P3+x /X3+h /p3+#x3+&3+&3+&3+ &3+(&3+0&3+.3+p4+3+3+x&3+0&3+`&4+&4+(4+J04+<@4+(H4+J`4+@94+4+X4+Q4+5+5+X5+5+ 5+T05+H5+H5+X5+v`5+ Tp5+5+5+v5+)5+@U5+5+5+)5+05+$5+@5+36+06+1 6+(6+H@6+X.P6+h6+h6+P46+X.6+6+6+P487+eH7+pX7+85x7+e7+g7+(7+g7+ 7+(7+H58+g8+((8+gH8+P5X8+h5h8+x58+x78+@:8+`:8+x:8+:8+:8+:8+:8+:8+78+(:8+0:8+8:9+8#9+d 9+(9+H09+ 89+d6H9+P9+%X9+%`9+ h9+(zx9+L@9+LJ9+Q9+PR9+99+LO9+:9+99+` .9+`:+_:+=(:+=8:+ =H:+(=X:+0=h:+8=x:+@=:+H=:+P=:+X=:+`=:+h=:+m:+;+e;+p=(;+=H;+_X;+=h;+=x;+=;+ ;+=;+H5;+e;+=;+?;+=<+=(<+e8<+=H<+=X<+=h<+>x<+><+ ><+0><+@><+P><+`><+?<+?<+p>=+x>=+>(=+>H=+eX=+>h=+>x=+>=+>=+>=+>=+>=+`>=+>=+>=+>>+>>+?(>+?8>+?H>+?X>+(?x>+e>+8?>+>+e>+@?>+>>+H?>+X??+h??+x?(?+?8?+?H?+?X?+?h?+??+??+F?+G?+G?+@?+ G?+?+0G@+@G@+HG(@+XG8@+`GH@+pGX@+xGh@+Ex@+G@+G@+G@+G@+G@+F@+Ą@+@cA+A+.(A+PA+@A+HA+_A+ /A+GA+eA+`A+A+`A+B+e B+0B+IPB+p`B+#pB+IB+IB+IB+B+B+B+C+XKC+X2%C+.PC+XC+ehC+xC+C+C+DC+C+C+KC+8.(D+0D+@D+PD+`D+pD+PD+D+PD+ /(E+@R`E+HRE+PRE+`RF+pR@F+RxF+RF+RF+R G+RXG+RG+RG+RH+S8H+SpH+ SH+hH+(SI+0SPI+8SI+@SI+HSI+PS0J+XShJ+J+GJ+ X(K+LZhK+LZK+ ZK+Y(L+YhL+YL+lZL+(X(M+ ^hM+(YM+,ZM+\(N+]hN+D]N+ZO+,[HP+[P+\Q+\XR+\S+]S+]hT+]U+]U+]xV+](W+]W+]X+@X8Y+@XY+@XZ+@XH[+@X[+@X\+@XX]+@X^+ X^+ Xh_+LZ`+,Zxa+$.a+ca+]b+`fb+ c0b+ f8b+]b+`fb+eb+eb+]c+cc+cc+`c+Hbc+Xbd+hbPd+xbd+bd+b@e+be+be+bf+&.f+f+f+ef+`f+Pg+ȋ$g+Xgh+hh+h(h+0h+8h+@h+Hh+`Ph+@Xh+ `h+hh+ph+xh+ h+@h+h+jh+jh+k i+m@i+m`i+mi+mi+mi+mi+mj+m j+m@j+m`j+mj+nj+nj+nj+ nk+(n k+0n@k+8n`k+@nk+Hnk+Pnk+Xnk+hnl+xnl+8:l+xu l+x8l+)@l+xHl+xPl+xhl+opl+pxl+pl+pl+H*.l+el+l+m+Щm+ m+0m+@m+Pm+`m+ pm+(m+0m+8m+Hm+Xm+hm+xm+m+n+n+ȩ n+Ȫ0n+ت@n+Pn+`n+pn+(n+8n+Hn+Xn+hn+xn+n+n+o+o+ o+0o+@o+`o++po+ho+xo+o+o+o+o+o+o+p+p+ȩ0p++@p+Pp+`p+Щpp+p+p+p+p+p+ p+(p+0p+8q+Hq+X q+h0q+x@q+Pq+`q+pq+ȩq+Ȫq+تq+q+q+q+(q+8q+Hr+Xr+h r+x0r+@r+Pr+`r+pr+r+r+r+r+Щr+=r+r+s+s+ s+0s+ @s+(Ps+0`s+8ps+Hs+Xs+hs+xs+s+s+s+hs+xt+t+ t+0t+@t+Pt+`t+pt+t+ȩt+_t+?t+Hht+pt+t+?t+*.t+Px+u+`u+ u+0@u+pPu+4`u+u+Ȩu+Шu+u+`u+`u+ev+ev+ v+`@v+ePv+ب`v+pv+v+8v+8v+v+v+v+=v+ew+بw+ w+0w+ @w+Pw+=`w+(pw+0w+8w+Hw+Xw+ew+Pw+ex+e x+0x+`px+l+x+`o+x+0p+x+`o+y+0p+0y+`o+`y+r+y+`o+z+Xbz+ez+ez+`N.z+>%z+Dz+(z+z+z+z+{+{+0{+{+( {+({+H0{+X8{+I@{+`H{+xP{+X{+I`{+h{+{+I{+ {+0{++{+@+{+@-{+)|+(|+'|+' |+'(|+p(0|+(h|+P.|+|+|+4|+4|+2|+2|+3|+2}+28}+`|+P}+(zX}+`}+0<h}+ 9x}+9}+d6}+6}+`6}+l6~+~+`~+@~+< ~+`B0~+>@~+ >H~+hAP~+LDp~+ C~+v~+x~+$V~+V~+ V~+,V~+V+`V + V8+Q.@+P+`+p++++x++ +Z+X+[+X+Y+h]0+X@+@%H+R.P+8`+Xp++$+`+h+++n+d+f+Ll(+i0+lP+$e`+hE%h+T.p+0+x+w+x+LxЁ+v؁+`v+`w+w+y+y0+H{8+{P+{X+{p+Hzx+ z+z+z+0y+xȂ+X.؂+G%+P++( + 0+`@+pP+h`+xp+++(+[.ȃ+H /+++#+P+ +$(0+8+,,@+H+`P+X+`+( +p+4+Є+e++T$+ +@+``+P+h+p+x++ +@+`++++++ +@+`++++++ +@+`+ +(+0+8+@+H +P@+X`+`+h+p+x++ +@+`++++++ +@+`++++++ +@+`+ +(+0+8+@+H +P@+X`+`+h+p+x++ +@+`++++++Ў+++++ +0+@+P+`++++++ +@+`+ +(+0+8+@++ +(+0+@+H+P+0X+`+@h+Hp+x+X+_.+J%++`ȑ++++ +++++ +(+0+8+@+H+ P+(X+0`+8h+@p+Hx+P+X+a+8+h+P#В+p<++3+v+F +!0+@+ P+(h+c.x+HK%+++++0Г+Pؓ+`+p++++++ +  +8 0+P 8+h @+иH+X+p+p+ 'x+++ȸ+++++ȸД+++ +@7+ +D0+țH+ BP+@H`+Ap++?++P+ȕ+,OЕ++`A++`?+0 +30+H@+3P+`h+@8p++4+x+5+X+>Ж++>++@=+(+ N0+؜@+;P+`+ ;p++`+++(+:З+ +0+8+B+H +:0+X@+@GP+x`+p++1+0Ș+*И+8+ E+H+`+X(+0+h@+`P+x`+&p++'++ ++Й++P*++(+`/0+S8+UH+ОP+X++`+@X+ f.+؟Ț+К+^+++^+Ȣ+آ +^8+@+H+^`+Тh+p+^+(+0+^؛+О+k+++Ȟ +f.H+P+}`++x+x++++ '+++Ȝ+М+++}++++a +h0+8+@+H+ P+X+ `+1h+ 1p+;x+;++8P++ ++x!+(+"+8ȝ+8#Н+P؝+x#+++H+ +` (+8+ț@+ P+XX+$h+@Hp+Ľ+++++p+@Ȟ+О+Ъ++Ȫ+x++0+(+H0+@+`P+X+`+p+Xx+h+++++ȟ+`П+؟++++ث+@+X +p0+8+H+(P+`+ h+(x++++`+0Р+ؠ+8++H+(+X+ +(0+8+8H+ЬP+hX+ȇ+X+X++#+l+ȡ+ С+ء+#+#+HL%+g.0+8+x#H+#h+#x+#+O+p+#آ+#+#+( + 8+#H+#X+#x+#+#+#+#ȣ+ #+(#+0#+8#(+`#@+,H+P+$`+`#h+p#x+++Hk.+ ؤ++++++h+0+++e0+#P+X+`+ h+#x+#+#+#+8Q%+m.++/+@R%(+eH+`X+Шh+x++`++(Ȧ+ئ+++`n. +ا+@+#H+#X+J`+ h+ p+Lx+H++++'Ч++ا+#+#+xq.+Ȩ+0+#8+#H+NX+Lp+ Q++Ш+Ј+h#+p#+# + #0+$V8+T@+TH+l^P+ ]X+S`+Rh+^+hU%+s.+#+ c+@v +,b8+bp+vx+la+di+`+̦+f+P#+`#+@+Dd+pj+c +c(+@c@+rH+pP+0k`+V%h+t.p+P#+#+8:+ث+h#+#++`++H+0+( +(+0+8+@+`P+X%X+Hv.`+h#p+++$+$+$Ȭ+$Ь+$ج+$+$+$+$+$+$+$+$+$ +$(+$0+ $8+($@+0$H+@$P+H$`+x.p+++p#Э+`++e+$ +$0+$@+$P+($p++#++#Ю+$خ+$+$+d#+ #+ +(+)0+`8+ @+H+$h+-p+0-+0+X $+` $+P+F+Nȯ+@S+K+lT+O+Z% +{.(+ $8+eH+pX+xbh+x+ $+b+b+ $+ $+$+$+ $+L+$+$+$ +(+Ha0+l8+@_@+yH+(kP+ VX+$V`+(Vh+,Vx+i+P[+^+h+`g+$e++d+pd+dVȱ+^б+hVر+lV+@+}+a++c+ +Y+ +(+0+$8+0@+iH+WP+ WX+`+`{h+}p+\x+V++z+\+(+m+pV+V+Z+Ȳ+в+[ز+̐+ha+V+,++`++`+@ +`b(+0+`Y8+@+@H+P+pX+$`+$++`+pb%+%+%г+e%+p+1$+1$ +e@+P+@`+@++ȋ$+p3$++ +++ȴ+ش+H+(+,++pG+`:$+Ч+ +(+8+Ы@+H+P+$X+:$`+$h+p+x++++++8<$+@<$+`++ȵ+ص++`+(?$+8?$+H?$ +X?$0+h?$@+x?$P+?$`+?$p+?$+.+e+?$ȶ+nض+?$+n+?$+n+?$(+m8+ ?$H+mh+p+`++++ȷ+XC$+++(+8++`++h+pC$+C$+x++C$ظ+8++C$+C$0+C$X+D$+(D$+HD$ȹ++й+XD$+H++pD$++ +D$@+x+h+X+p+D$+(++D$+++D$+++w+++E$8+(x`+ E$+++8E$+PE$л+x+ػ+hE$+X++E$ +8+(+E$H++P+E$p+x+x+E$+E$+X+ȼ+E$+8++F$++ +0F$@+XF$`+XF$+pF$+F$+F$+F$+F$н+F$+G$+ G$+8G$ +PG$@+hG$`+G$+G$+G$+G$о+G$+G$+H$0+H$@+0H$`+@H$+XH$+pH$+H$+H$п+H$+H$+H$+H$+H$ +I$0+(I$P+HI$`+XI$p+hI$+xI$+I$+I$+I$+I$+I$+I$+J$+J$ +0J$@+@J$P+XJ$`+pJ$+J$+J$+J$+J$+J$+K$+0K$+@K$0+`K$@+xK$P+A$`+K$p+K$+K$+K$+K$+@K$+K$+K$+K$ +K$0+K$@+L$P+ L$`+0L$p+@L$+XL$+hL$+xL$+L$+L$+L$+L$+L$+L$+L$ +L$0+M$@+M$P+8M$`+HM$p+XM$+xM$+M$+M$+M$+M$+M$+A$+M$+M$+N$ +N$0+@$@+(N$P+@N$`+PN$p+`N$+pN$+N$+N$+N$+N$+N$+N$+N$+N$+O$ +O$0+0O$@+@O$P+XO$p+.+P%+ + ++++`++e+e+ +`@+mX+mp+?$+n+m+m+?$+n+?$+0Q$0+8Q$H+?$`+nx+@Q$+HQ$+?$+n+Xo$+PQ$+Xo$ +PQ$8+?P+؄h+ n+8n+XQ$+Pn+(n+@n+`Q$+Xn(+m@+mX+?$p+m+m+m+ ?$+m+m+m+?$0+mH+m`+mx+?$+m+n+hQ$+?$+pQ$+xQ$8+@+(H+ P+X+``+Z$h+++_+@G+0+@0++ +l/(+)0++8+)H+HEP+0EX+D`+Dp+`.+P/+e+^$+^$+^$+@+@G+`T+@G+P`$+``$ +hY(+X0+X8+hX@+XH+YP+ WX+@G`+`$h+`$p+\x+p\+`\+D\+(]+[+p.+*/+@G+f$+d$+k+`_+k +Hk(+I@+wH+uP+ r`+Ih+i$+Ѝ.+ x+`|++++ +(+$0+(8+~@+`}H+#X+Hh+@$x+H$++++ ++h$+%+.(+0+@+P+ep+e+`+$+$+ȁ$++Ё$+`+$+.+x+0++8+h+X+d`+Ph+p+x+@#+ȋ$++$+h+pG+ ++ ++++++P +(+x@+H+P+``+xh+ȉ$x+0%+.++++e+$+$ + $0+0$`+6h+`;p+H$+K+K+++H+F+J+`F+X$+++x$+0I+/+$ +$(+/0+$8++@+/H+$X++h+p+p+$x+0+/+@+++/+h$+ +/+К$+++@+++/+$+$+/+$+$ +/(+$8+P+P+@X++`+/h+ $p+`x+0/+0$+++++@$+P$+@/+X$+++@/+h$+x$+@/+@+++@/+$+$+/ +$(+$0+/8+$H++X+`+`+@$h+$p+@/x+$+++@/+ț$+$+@/+$+$+@/+@+++@/+$+$+/+$+$+@/+($+$+@/ +8$(+P$0+/8+@+$H+/P+X$X+`$`+/h+h$p+$x+@/+x$+$+@/+$+++@/+$+++@/+$+$+/+$+++@/+М$+++@/+$ +P+0+8+8+@$@+0H+@/P+@X++`+@/h+$p+ x+x/+$+$+/+$+P$+@/+0$+0+@/+@$+++@+++@/+P$+$+@/ +`$(+P$0+@/8+p$@+0H+@/P+$X+0`+@/h+$p+0x+@/+$+$+@/+$+а+@/+Н$+$+@/+$+x$+@/+$+ ++++H +0+@/ +@(++0+@/8+$@+ H+`/P+($X+``+h/h+8$p+0x+@/+@$+++@+++/+X$+++@+++/+x$+`+/+$(++8+@+@+$H++P+ /X+$`+$h+ /p+Ȟ$x++ /+؞$+++ /+$++ /+$++ /+$+0+ /+@+++ /+ $+X+ +(+(+@$0+ 8+/@+@H++P+ /X+@`++h+ /p+`x+H$+ /++P$+ /+X$+h$+p/+p$++++++0+ /+$+$+ /+@++ + /(+$0+ 8+P/@+$H+ȟ$P+X/X+П$`+$h+`/p+$+++++@$+0+/+@+++/+$+0+/+ $+++/+0$+ + +@(++0+/8+P$@+`H+/P+h$`+x+x+@+++/+$+0+/+$+++@+++/+$+`+/+ؠ$+(+(+@0++8+/@+$H+$P+/X+ $h++x+++8$+0+/+@+++/+H$+++@+++/+h$+`+/+$+0+0+@8++@+0/H+$P+$X+0/`+$p+++@+++0/+ء$+`+@/+$+`+P/+$+++++$+ +/+^+$ +`/(+ $0+08+`/@+$H++P+`/X+`+($h+`/p+@fx+0$+/+8$+@$+/+X+++`/+H$+X$+`/+@+++`/+`$+++++ $+ +`/(+70+ 8+/@+H+ P+/X+x$`+0h+`/p+$x+++`/+$+($+`/+@+++`/+$+@+++++0+`/+j+0+`/+++ +`/(+$0+08+`/@+H$H+$P+`/X+@`++h+`/p+$++++++0+`/+h++`/++++`/+$+0+`/+H$+$+`/+@++ +`/(+Ȣ$8++H+P+P+X+$`+`/h+0p+$x+`/+^+$+`/+$+++`/+X+++`/+@+++`/+آ$++++++0+`/ +$(+$0+`/8+$@+$H+`/P+$X+0`+`/h+$p++x+`/+X+++`/+($+0$+/+8$+++`/+v+0+`/++++`/+H$++`/+P$+0 +`/(+O0+08+`/@+`$H+P+`/X+h$`+h+`/p+x$x+`+`/+$+$+`/++($+`/+$+0+`/+$+$+/+@+++`/+$+p+ +(+(+$0+ 8+/@+У$H+ P+/X+$`+ h+/p+@x+++`/+$+++$+`+x/+@+++`/+j+(*8+ 3@+h*+H+*+0I+ *++*+0m+*H+8mP+*+Hm+*+Xm+*P+XX+h*+o+h*X+`+*+}*+o+*+o+*`+0Ih+ *+p+(*h+p+(*+p+(*+p +(*p+px+*+p~* +r(+(*x+r+(*+(r+(*(+8r0+(*+++Ы++8++(++++*+*+@* +h(+*P+`*x+y+*+y+*(+0y0+*+z+h*0+`S$8+(*+z+*+p+(*8+z@+(*+z+h*+z+h*@+{H+*++*H+ 'P+*+h|+h*+В+h*+0I+*+z+*X+`+ *++*++ *`+h+*++ *++h*h+p+h*+Џ+ *+ +*++* + (+*P+H*+*+Ї*+*+*+*+P*+H ,+H++ *+Г* +*(+x*8+ @+*h+H*++h*+Ȳ+*@,H,*,,*,,*H,(P,h*,@,h*,P,*P,`X,h*,x,*,*,,*0,؆*X,`,*,,*,,h*`,h,*,г,*,*,,*@,*h,p,*,,*,0 ,*p,Px,*,h,*,X*x,,*,,*,P*(,0,*,0,(*,P,* ,п$0 ,h8 ,h* , ,* , ,h*8 ,@ , * , ,* , ,* ,*@ ,H ,*p ,* , ,h*H ,(P ,` ,h ,p ,x , ,@ ,X ,* ,* ,p ,*@ ,H ,* , ,* ,З* , ,h*,,*,*,,*,h,*,x,*X,`,x*,X,*,,*`,h,(*,,*h,8mp,*,h,*, ,*H,*,,h* ,(,*x,,*, ,,* , (,`0,*x, ,,*,*,,*0, 8,*`,`*,8,p*,*,H,p*,*8,X@,*,p,*@,H,h*,,*,,*H,P,0*,,*P,,X, *,0I, *,,,*H,@ ,8,,*,0I, *`,,h,*,@ ,,*h,,p, *,0I, *,, ,*`,@ ,8,,* ,@,(,h*x,0I, *,,,* ,@ ,2 ,* ,2 ,*0!,28!,h*!,2!,*!,3!,h*8",(3@",*",H3", *@#,p#,0#,̎ #, #,( #, #, #, #,,L#,#, #, #,l #,` $,L $,@ $,,L$,:($,0 X$,,L`$,:$,I$,*%,I%,*X%,I`%,*%,I%,P*%,L% &,J&,P*8&,L `&,Jh&,h*&,0J&,h*',HJ',h*h',`Jp',h*',pJ',*(,J (,h*p(,Jx(,*(,J(,h* ),J(),h*x),J),h*),J),h*(*,K0*,h**,0K*,**,HK*,h*+,x*+,l+,*,,*8,,@,,*,,`,,*,,[,,*@-,6H-,*-,Xl-,*-,(k-,*H.,0lP.,*.,@l.,*.,x/,h*P/,X/,*/,x/,*0,0,P*00,d"X0,`0,P*0, 0,XT0,P*0, 1,1,*81,*`1,h1,h*1,1,h*2,ȍ2,h*h2,؍p2,h*2,2,*3, 3,*p3,x3,h*3,3,* 4,((4,h*x4,84,h*4,H4,*5,*(5,05,h*5,X5,*5,h5,*06,86,*`6,%6,6,@*6,6,6, *87,@7,h*7,7,h*7,؎7,h*@8,H8,h*8,8,*8,8, *H9,P9,h*9,(9,h*9,@:,*(:,x*P:,XX:,h*:,+:,p*:,*;,;,*0;,X*X;,h`;,p*;,+;,t;,*;,8*<,0<,*`<,Ph<,*<,8<,*=,p=,*@=,*h=,p=,h*=,=,@*>, >,@*p>,x>,*>,*>,>,*>,* ?,(?,h*x?,?,*?,X*?,Џ?,h*(@,0@,*@,x@,*@,(*@,@,*A,*0A,8A,*`A,*A,0A,*A,*A,A,*B,8B,0@B,*hB,B,B,*B,xB,B,*@C,HC,*C,C,*C,C,h*HD,(PD,*xD,X*D,HD,h*D,`E,*(E,*PE,pXE,*E,*E,E,*F,F,*0F,*XF,`F,*F,X*F,F,*G,G,p*8G,+`G,phG,*G,$G,ȐG,*H,$H,ؐH,*`H,$hH,pH,h*H,H,*I, I,h*pI,0xI,h*I,HI,h* J,X(J,h*xJ,pJ,(*J,J,p*K,`+(K,+0K,p*XK,3+K,K,(*K,K,*0L,8L,*L,L,*L,pL,*8M,p@M,*M,БM,h*M,M,(*@N,hHN,*pN,*N,`N,*N,0*N,+N,p* O,(*HO,+PO,p*xO,*O,+O,p*O,A+O,P,p*(P,8{*PP,+XP,p*P,`*P,P,p*P, *Q,Q,p*0Q,*XQ,+`Q,p*Q,H/Q, Q,p*Q,*R,0R,*8R,%`R,@hR,@*R,PR,hR,*R,%S,xS,@*@S,hS,pS,*S,%S,S,@*S,T,ؒ T,*HT,%pT,xT,*T,%T,T,*T,% U,(U,@*PU, xU,8U,h*U,HU,*V,*(V,X0V,*V,hV,*V,*V,xV,*0W,8W,*`W,xW,W,*W,h*W,W,*8X,@X,*hX,X,ؓX,*X,X,*@Y,+HY,p*pY,x*Y,+Y,p*Y,*Y,+Y,p* Z,*HZ,+PZ,p*xZ,X*Z,@@Z,h*Z,+[,p*([,*P[,X[,h*[,[,h*\,(\,h*X\,@`\,(*\,P\,*\,(*],`],(*`],h],(*],p],(*^,^,(*h^,p^,(*^,^,h*_, _,*H_,*p_,x_,(*_,Ȕ_,h* `,ؔ(`,(*x`,`,*`,*`,`,*(a,0a,*a,a,*a,x*a,(a,h*0b,@8b,*`b,8*b,+b,p*b,9+b,Xb,h*8c,p@c,*hc,*c,c,*c,*c,c,*@d,Hd,h*d,d,*d,Hd,* e,H*He,Pe,h*e,ze,h*e,Еf,*Pf,Xf,h*f,f,*f,*g,g,*0g,*Xg, `g,*g,g,(g,h*h,8h,h*`h,Xhh,h*h,ph,h*i,i,h*hi,pi,*i,Жi,*i,j, j,*pj,xj,h*j,j,* k,0(k,*xk,Hk,*k,`k,*(l,p0l,h*l,l,h*l,l,*0m,8m,*m,ؗm,*m,m,*n,X*8n,@n,(*n,n,h*n,(n,*o,8*@o,8Ho,*po,*o,Ho,h*o,Xo,*Hp,pPp,*p,p,*p,q,*Pq,Xq,*q,Șq,*r,ؘr,*Xr,`r,*r,r,*s,s,*`s,hs,*s,*s,0s,h*t,@t,*@t,x*ht,Hpt,*t,Xt,h*u,h u,*pu,xu,*u,u,p*u,, v,(v,*xv,v,*v,Йv,*w,(w,0w,h*w,+w,p*w,*w,+w,p*x,*0x,+8x,p*`x,*x,+x,p*x,*x,+x,p*y,*8y,+@y,p*hy,0+y,+y,p*y,pa+y,+y,p*z,t+@z,+Hz,p*pz,+z,+z,p*z,l+z,+z,p* {,h+H{,P{,p*x{,x+{,+{,p*{,h+{,+|,p*(|,+P|,+X|,p*|,X+|,|,p*|,*},},p*0},+X},`},p*},+},},p*},+~,+~,p*8~, *`~, h~,*~,p~,+,P,*@,*h,p,*,X*, ,*p,x,*Ȁ, Ѐ,*x,0,*,8*(,@0,(*,P,(*؂,`,(*0,p8,(*,,(*,,*,8,@,p*h,6+,,(*,,h*@,؛H,h*,,(*H,@P,(*,,(*,X,(*P,X,h*,,h*,,*0,*X,p`,*,*,,(*`,h,(*,,h*, ,h*h,8p,h*,XȊ,h*,x ,h*p,x,h*ȋ,Ћ,(* ,(,h*x,,h*Ќ,ȉ،,(*(,Ȝ0,(*,؉,h*؍,,h*0,8,*`,h*,,h*, ,*,@ ,+8,p@,*h,x,+,,*,(*,,*@,؝H,h*,,*,,*H,P,*x,*, ,*Б,*,0,h*P,@X,h*,X,h*,p,h*X,`,p*,86+,,h*,,*`,h,h*,О,*,,+,, *,@ȕ,h*,P ,h*p,hx,*Ȗ,Ж,h* ,(,h*x,,*З,Пؗ,*(,0,h*ؘ,`,*, {+0,8,h*, ,*,*,0,h*8,@@,h*,H,*,*,X,h*@,`H,h*,p,h*,,*H,P,*,,*,,*P,X,h*,,*,ؠ,h*X,`,h*,,*,,+,0,*8,P*`,@h,h*,P,h*,h,*h,xp,*,Ƞ,(*, ,(*p,x,h*ȡ,С,*, ,ȡ(,h*x,,h*Т,pآ,(*(,0,(*,,(*أ,,(*0,@8,(*,P,(*, ,(*8,0@,(*,,(*,,(*@,8H,(*,P,(*,,H*H,ЊP,*x,*,p,0*,$,*(,*P,xX,*,,*ب,*,,*X,`,h*,,h*,Т,h*`,h,h*,,h*,,h*h,p,*,0ȫ,*,H ,*H, *p,Xx,*,*Ȭ,hЬ,*,* ,(,*P,P*x,,h*Э,ح,*,*(,0,*X,*,أ,h*خ,,*0,8,*,0,h*,@,*8,P@,*h,x,+,h.,D+x,*(,*,0*ز,*0,x*,x*,x*0,8,` ,(,lP0,8,@*,$,`*,+,t %, ,*,+,(, ,$(,`*P,+,B,x ,8,*,q %,@,x ,8,*,p %,, ,$,`* ,x+,X,ȓ ,h, ,x, ,$,*,H+,l %,, ,$,*,+x,h %,,D h,d %,,D X,` %p,x, ,,*,+`,h,P,X,,@,H,djP, X,*,$,*,+,\ %,X %0,(8,dj@, H,*,$,*,+,T %,P % ,8(,n 0,8,*, C,Ls ,(,*x,,*,L %,,*,H,s ,,*-X-t --*-h-h --* -x - - -*--n -@-`-x-*-$ -*H-H+p-x-*-`-*-H %--`-x-*-$-*8-+`-h-*-`-*x-D %--`-x-*-$-*(-+P-X-*-`-*--h*h-@ %-- -0-*-< %X"-8 %p"-x"- "-0"-*"-4 %H&-0 %`&-h&- p&-0x&-*&-, %8*-( %P*-X*-``*-0h*-**-$ %(.- %@.-H.-`P.-0X.-*.- %2- %02-82-`@2-0H2-*x2- %6- % 6-(6- 06-$86-*`6-+:-:- :-$(:-`*P:-8+X:- %x:- :-*:- +>-0>->->-*h>-$p>-*>- +>- %A-HA-B-$B-*0B-x +8B- %E-@E-E-xE-*HF-$PF-*xF- +F-F-*F- %F-mG- *I-XI-)I-xI-*8J-$@J-*hJ-x +J-J-*J- %M-hM-@Q-xQ-DQ-Q-*Q-X +U-U-U-U-*V-V-*Y-Y- Y-@HY-*Y-Z-*]-]-hB]-]-*]-]-h* ^- %@^-H^-*x^- %^-^-h*^-^-h*H_-P_-h*_-_-*_-`-*P`- X`-h*pa-@xa-Pxa-a-*a-a-*`e-he-\pe-xe-*Pi-8Xi-r`i-hi-*i-Hi-*j-j-*@m-`Hm-uPm-Xm-*m-m-*m- %0q-X8q-u@q-Hq-*q-q-*q- %u-+ u-`(u- x0u-8u-*u-u-*y-py-`o y-(y-*xy-y-*y-y-*}-}- }-}-*h}-$p}-`*}- +-- --*--̈ --*H-P-*-$-*Ѕ- +Ј-؈- n-Ȍ- -h- g-HȐ-*- -*- %-`- g-H-*--*x- %-- -Xs-*-@H-*P-X-*--*- +h- %-- -Xs-*-@H-*@-H-*--*Н- +X- %p-x- `- h- p-x-*P-0X- `-h-*@-@H-Do P-X-*--*0-X8- @-0H-*- -*--*H- 'P-*--*-Q-*P-hX-*-x-*--*X-`-*- %--*- % -h(-d 0-08-*-x-Py -0(-0*x--*- +и-bظ-*(-0-*`- %--*- %ع-( -*- %0-8-h*h- %--h*- %--x --x --*--$v - -*H-P-*--*- %--*(-h +----*8-H@-*--@u --*(-p0-*`- %- %--@u --*- %- -@u --*x- %-(-t --*--*(-8 +-8- --*p-Px-Lt --*`-`h-s p-x-*P-xX-l`-0h-@*-P-@*--*@-pH-PP-X-*0-8- m -F(-s --s -+-0+-+-0+ -+(-(1+0-+8-@+@-+H-x+P-+X-H+`-؛+h-4+p-X5+x-5+-1+-h2+-5+- 2+-p1+-@4+-4+--*. .h*.&. *.& .*p.&x.*.'.* .8$(.h*x.'.*.('.h*(.8'0.*.H'.*.X'.*0.h'8.*.x'.*@.h9+H.9+X.`4`.*.h4.(*.4.*`.x4h.*.4.*..(*h.4p.*.x4.4.*.4.4 .*H.H8+p.x.*..4.(* .4( .(*x .4 .* .4 .*( .H0 .*X .8+ .X .* .7+ .5 .(*0 .58 .h* .5 .h* .8 .* .x7+8 .5@ .*h .87+ .(5 .*@ . 6+H .+P .0+` .h .(* .8 .(*.(.(*h.Hp.(*..(*.< .*H.x>+.H.h* .H(.*P.B+x.0H.h*.HH.*.PB+(.`H0.*X.PB+.xH.*.PB+.H.*.PB+0.H8.*.H.h*.H.h*8.H@.h*.I.*.A+.(I. *@.8IH.*p.A+.HI.h*..*@.HhH.`IP.*.pI.*.I.*.Q.*.X.*0.>+X.h`.*.x>+.x.*.H=+..*8.(<+`.h.(*..*.;+..*@.H;+h.p.*.9+..*. .*H.;+p.hx.*.x.* .(.*x..*.pK.*(.0.h*.?.h*.xK.h*0. H8.h*.K.*.XC+8.K@.*.K.*@.+H.+P.H+X.P+h.p.*.0D+.P.* .P .h*p .Px .* .Q .* !.Q(!.h*x!. Q!.*!.0Q!.*(".HQ0".*".XQ".*".hQ".*0#.xQ8#. *#.Q#.*#.Q#.h*8$.Q@$.h*$.H$.*%.0b+@%.]H%.*p%.a+%.]%.h*%.]%.h*&.+&.+&.p+&.+&.H+&.+&.g&.h*0'.g8'.*'.g'.h*'.g'.h*8(.g@(.*(.h(.*(.h(.*).f+@).0hH).*).|).@h).h*H*.xP*.*x*.l+*.`+.*(+.x+P+.pX+.(*+.+.+.h*+.,.,.*0,.H=+X,.`,.*,.(<+,.,.*,.w+-.С-.*8-.w+`-.h-.*-.H=+-.-.*-.v+....(*h..p..h*.. ..(*/.8 /.h*p/.Px/.*/.@v+/.h/.*/.v+ 0.(0.(*x0.0.(*0.0.(*(1.Ȣ01.(*1.1.(*1.1.(*02.82.h*2.p2.*2.l+2.(2.(*83.8@3.(*3.H3.(*3.X3.(*@4.hH4.(*4.x4.(*4.4.(*H5.P5.(*5.5.(*5.6.*(6.`o+P6.8X6.*6.0p+6.ȣ6.(*7.أ7.(*X7.`7.(*7.7.(*8.8.(*`8.h8.(*8.(8.(*9.89.(*h9.Hp9.(*9.X9.*9.`o+:.@ :.*H:.0p+p:.hx:.(*:.x:.(* ;.(;.(*x;.;.(*;.;.(*(<.0<.(*<.Ȥ<.(*<.ؤ<.(*0=.8=.(*=.=.*=.`o+=.H=.*>.r+8>.@>.(*>.>.(*>.(>.(*@?.8H?.(*?.H?.(*?.X?.(*H@.hP@.(*@.x@.(*@.A.(*PA.XA.*A.`o+A.A.h*B.B.h*XB.إ`B.h*B.B.h*C.C.h*`C. hC.(*C.0C.(*D.@D.*hD.PpD.*D.u+D.D.*D.u+E.` E.*pE.xxE.h*E.E.* F.(F.*hF.AxF.F.*F.@u+F.F.h*(G.0G.*G.ОG.h*G.G.(*0H.8H.*`H.u+H. H.*H.%H.0H.@*I.@8I.X@I. *I.pI.h*I.pI.p*J.z+@J.xHJ.(*J.J.*J.J.*HK.+PK.p*xK.f+K.K.h*K.L.*PL.ЧXL.*L.L.L.*L.L.+M. M.*0M.0@M.+XM.``M.*M.xM.+M.M.*M.xM.+`N.hN.*N.N.(*O.O.(*hO.pO.(* P.{+(P.+0P..8P.p.@P..HP. .PP.H.XP.Ђ.`P.}+hP.~+pP.|+xP.+P.@{.P.+P.Ѐ+P.@}+P.P.p*P.Q.P.Q.*Q.h.Q.D+Q.Q.*R.@R.*R.+R.R.*8S.@S.*S.p<S.h*S.HS.*T.`+T.T.*T.T.*HU. PU.*U.gU.*U.@V.*PV.HXV.*V.PV.h*W.`W.h*XW.p`W.h*X.X.*8X.+`X.hX.(*X. X.(*Y.(Y.*hY.0pY.*Y.8Y.(*Z.X Z.(*pZ.HxZ.h*Z.HZ.h* [.@([.h*[.[.h*(\.0\.*X\.+\.\.(*\.\.h*0].8].*]. ].*].Є+].0].*8^.@@^.*h^.Є+^.P^.*^.`^.h*@_.xH_. *_.`_.*H`.pP`.*`.h`.*`.xa.*Pa.pXa.*a.a.*b. b.h*Xb.`b.*b.b.*c.c.h*c.8c.*d.@d.*hd.p'pd.*d. 'd.*e.H e.h*pe.`xe.* f.(f.h*f.`f.*g. #g.*g.+g.0#g.*h.+0h.@#8h.*`h.x+h.(h.*h.8+h.H#h.*i.+8i.X#@i.*hi.آ+i.pi.*i.+i.8mi.*j.h+@j.`#Hj.*pj.8+j.h#j.*Hk. 'Pk.*k.#k.*k.$Q%k.#l.*(l.+0l. Q%Pl.XXl.*l.+m.m.*0m.h+Xm.#`m.h*m.#m.h*`n.#hn.h*n.#n.*o.#o.*ho.#po.*o.#o.h*p.# p.h*pp.(#xp.*p.@#p.*xq.#q.*q. #q.*(r.0#0r.h*r.@#r.h*r.P#r.*s.+s.8#s.*s.H#s.*8t.X#@t.h*t.`S$t.*u.+@u.x#Hu.*u.#u.*u.+Hv.#Pv.*v.`S$v.*v.p+v. #w.h*Pw.0#Xw.h*x.P$x.*Xx.`$`x.*x.x.p$x.*x.Py.y.$y.*8y.+`y.$hy.*y.p+y.$y.*y.+z.$z.*hz.$pz.*z.Э+ {.({.D0{.P{.pGX{.0 $`{.p=h{.H:p{.8{.:{.;{.D{.5{.{.{.={.{.* |.8+H|.P|.*|.|.*|. $}.*P}. $X}.h*}.}.*~. ~.*X~.g`~.*~.~.*..*`.@h.*.H.*.P.h*h.`p.h*. $Ȁ.h*.P$.X$.,...0ȁ.Ё.؁. ...0.$8.$@.H. X.`.Px......@.ȋ$.0$..`. .0(. 0. 8.@.@sH.sP.`.,$.0$..u..,؃.ly..w.@s.s.v.@%.0. .,$0.($8.*.0$.*..*.@+8.0$@.*h.+.0$.*.1$.*.>$.*.>$.* .+.P$.h*.P$.h*P.P$X.*.P$.*.P$.*X.Q$`.*.+.Q$.*.+`.P^$h.*.@L.`^$.*.+.x^$.*h.^$p.h*.^$ȋ.h*p.g$x.*.hȌ. g$Ќ.*.h .8g$(.*p.hЍ.h؍.*(.x0.*.$.*Ȏ.zЎ.q0./8./X.`.$h.p.`x..̪.d.ĵ..@s.sȏ.؏.%...$.($.*(.H+P.0$X.h*.h.*0.p+X.$`.h*.$.h*.p.*8.0+.`.*.p.x.D..$.*.+ȓ.P%.h.h*@.$H.h*x.L%.$.h*.$.(*H.xP.(*.$.*.$.h*P.pX.*.+.XG.`$ .(.0.@.$X.@`.p.@sx.s.@...p$.$.h*.%.$.h*`.$h.(*.x.(*.$.*h.p.*.$ș.h*.%.$ .*P.%p.$x.*.%Ț.$К.*.% .0$(.*X.%x.В$.h*ȡ.E С.H ء.S.(*.`&.k .@4 .0.+0.u H.`N P.`)X.%h.E p.x...d. .L=. D .:.`S.`wȢ.Т.I. . 0.>8.@.@rH.P. X.] `..p+.`.` . أ.. =.& . ..} .(. 8.@.>H.@ P.`.0 ..`K..,.`ؤ.@U.(.}.D.C .@.@_ P.X.@`.Lp.[.o..@. . Х..S. ..,C.@q(.8.` H.h.x..İ.`. . .LT.@aȦ.@w Ц.(ئ.@> . P.l.`.`T .`@.+X.@ h.@p.$T. } .|. .$ȧ.`.@.L..&(.J 0.x8.W H. { P.LX. 7`.@3h.U.+ .(<+.x*Ȩ.dШ.ب.`e .03 . .`. . (.b H.X.P `.Lh.dSx.@ . . ..d.P. ȩ. &Щ., .+.pO. ..P (.0.dJ 8. @.H. X.`.h.`5.p\.@S..Ȫ.зت.@+._(.P. Yh.+.0G.h.o .Lث. .A..h.$.( . .x* . (.@ 0. 8.@.pE H.X.`.p.x. .$.,u .p ...Ь. i.'.X .;+.+.@.8.R @. u H.pZP.p..*.@ ..ȭ. LЭ.lX ح...` .@4.D .I(.~ 0. @.U p.x. .@.z.,..@ Ȯ.@'.h..P .@0.`.*h.`p./.`..Pد.L.`.6.@q 8.`VH.#P.N`.,x.p...@*.@, .(а..l. .V.d. . .Q(., 8.@.S H.` P.$, `.luh.Gp.yx.l.d.`{..[ȱ.s б. .(.`8.@P.pTX.] `.] h.$.@z. ._.L`Ȳ.J..{8.@.O H.`P. X.Z`.h.Tp.. .D$. . O.ȳ. г.س.G .p.7.*. . .*0.] 8.%@.p.(x.. .`.@a.$ . .ȴ.' д.ش.d.K.( . . ..@(.D 0.@.X.Lh. x.A . ..Lw.lP.@I.0 .`(.U8. ,X.U`.h. p.x.Q.0 . .Ȳ .0 ȶ.(q ж.] ض.R.L.R.`.p. .7 .ȅ.  .(.*0.@A@.H. P.7 X.0v h. p.x..% .S .L.ȷ.Lз.@ط.L.@ . .( .X.x (.0.`@.JX.D h. 7p.x..` .L.S.* . .@T.@.@H.P.``.;h.ȴ x..@h.d*.".C.L3ȹ.9+ع.\ .H!. H.H P.X.L* `. p.. . .q.@.`|.Ⱥ.|к.غ.h+..p3.. ` .`@.`H.P.@a h.... .*. .hȻ. л.&.` .D..L.P+(.H0.d@.H.X.|p.pU x.`2.o.@n.+..V.`.,.O.8. O @.hH. p.< x.G .`W.p .` .`_н. ؽ..h.ħ(.P0.@.`.mh.9.@*.@ .(C. .Ĭ .`о.` ..,< ..." .P 8. @.@ H.d P. `. h.p p.x....l.1 .h+. ؿ.@ . .+.`. .l 8.@ H.U P.h.p. x.h5. .*. . S. 1 .N...`...0 0.P.Pg`. h.` x...@_ .,T.@.[.H .h*..D0.Y8.`(@.# H.*P.lw`.h.u x.0 .. .(Q..@8.d.+ 8.X. `.@hh. Qp..L . .@. .d.`h.P . . . .̐. .@>(.M0.@ 8.`%@.0 P.,LX.h..dO.@. .h.*.V ./..L . .` 0.X.H+.\.PK ..L. .. \.H .`,. . .# .\8.]P.X.h.l p. .@.*.P. ).$_ .`V .D<.@s.@;...Е .8.@@.H.P. X.a . .`.@..x$.` .^ . s.v.,0.@.V H.RP.`.(h.p.> x.. $..*.D.. . .l.0.d@.P.`.h.p.x.q .(,. >.HR..$..H. @.P.Mh.x..@.v .PY ..(. ^... .t .(.@t8.dH.P.` X.p`.h.$U... .p5 ..Po... , .} .J.@ .H8.@.h_H.*P.SX.`.Dh.@ p.@x. .@ .Y .( ..A.x ..`. .@.@v .0.@W8.X+X.@p.@x.(?..0.v . E .:.p%. .. (.=8._ @.(`. x. ..@4.Y. F.hf.` .+..D .+. ..@@.*H.9 P.(X.@ p.`[..`. .} .(*.@ .{...j .d .(.`I 8.P.dx. .`P.@x..@..0 ..t+(.l8.`@.p*H.h3P.k`. x.0 ..Pa.Y..`.N.. x .b.(*.@.@.(.8.`2H.Ċ h. p.G..0 ..$.ȁ.h# .@.@ . a.<(.d 0.@. P.@8`.Ph.lip.ax..0i.`+.~ ..d.`u. .o.. .0:.8.dP.`X. `.h.D( x. O .R.+..д...@..`) .d ..D .[. 8."H. X.@`.H h.y p.@x.Pu.@: .@=.. .) .b .{. .*(.@ @. H. gP.X.'`.jh.tp.`{x..` .`L .Z..0..h.l. F.@.!.p...@H.X+P. x.m .$.0. .x.h .dc.~+.v. .h.0*.y.H*(.i0.b8.H.ȍ P. X.`.X h.>p.x. .W .. .p( .J. .@]....` .p .G0.H.DX. h.ip.K x.l.@..= .P.`Y .1.. .c+.(%.W.. . .2 (. @.M `.p.x. .. 6+..u .h.1.dW.r.5 .(.s @.H.`TP.p...0. .*.m..= .j . *.p (.` @. vh. p.P.l.l.,..*.@R.@ ..w.$.+(. @.X.Uh.` . . . .pC .*. <. .m .F(.$8. @.8 H.`P.X.8+`..@ .h9+.hl.O.- . .0.X.Ha . . .`.(.P*H.*P. (X.h.G.P2 .P.` . .`. .H.v .T0. @.H.PiP.X. h.4 p.$.. ..d.3 .(.$.s.HL .(.X*0.@a@. H.@P. h.p.kx..И.e .w.L. + . . .. .pc .P1 8.@@.] H.+h.x..+.l .^.X.L$ .H]. H. m.0. ..( . (.d) 0.p P.@X.@p. .(i .L .,.d.y .c. N..@. . 0.LH.= X.lp.< .[.0..\ . .@A+..8.į.` .d ..l(.[0.8. j @.Dh.p.09.Z.% ..L.*..... .7 .H.@.`~ . X.jh.h.r.H.....h{*._. .l .0q(.*H.X.( `.h.lT p.L, .l.03.a ..v.`.L.(.*.. .] 0.@. H.@X.h.p.lTx..X. .@.P| .[.>+.L..(.H8. .z.X.`Q. (. 0. w 8. H. `.0ah.x. .....h.n.{. .@*. k. (.P 0.7 8.@.@TH.0LX.`.*h.... .@. .V .O... . (.@. P. / p.1x.N.`.@7..*.^.,.`C .e .+.8+.. .a(.8., @.(H.P.X.*`.+h. x..k.@.̅ .e .- .P .@y (.j0.̖ 8.RX.@`.lh.p.(lx. .8.d}..@3 ....,+. ..j .U.0 .`(.`$0.8.S @.P.h.@V.p.2.*.@.`.[.`.(.g.~ .D (.x0. L8.h\ P.X.H-h.$x.+. ..x . o ... K.. .. .I(.P.X.Z`.9+.L. ...0_.`/ .PV. .0.8. P. `.hp.px. .,, .E.).`.._.*.p.6+ .l0.` P.`. h.p.$d .0E .`} . V..V.$, .;.. .l .Lk . .b(.L- 0.@8.P.L X. h.dp.pDx.0.@ . ..+.|.. .HZ (.X0.@T@.WP.`.h.*.l . .(.r . ~ .w.`N. .d(.u 8.z X. 6x.`..Ħ..- . .` .z .b.p .P.j`.@7h.ȕ .d ..a. ... ..(. 0.p1@.]H.`P.SX.H;+`.G h.`ax.`` .* .= . .Lh.^ .{*..`.`. .50.lP.@X.``.[h.@p.x..(V.;+.R .. .C(. 8.P H.X.*`.H=+h.Dlx.@' .I._.`.`8.@.L .l.,.L` . .H .`F8.@MH.@z x.-. ., ..W. ...Lk.@...LM .x>+.(8. . . .0. H.,\P._ `.h x. ].. ./.t. . . . 0.` 8.a P.X.`.....+..R..0...@. .t (.P<0.aH.``.  h.R ... ..(.@.+...i(.8.`>@. `. A h.@j p. ..H.(+.D| .S .@..`.ds .`.@. .*.(#(.@.*H. X. `.DYh.D|p.x.. .D . [.0,.`.  .pa+.(+ .j./// ' /0(/80/8/xP/,`/*x/0///*/*/~*/~*/|*/ء+ /(}*(/{*0/B+8/P*@/*H/C+P/+X/`+`/`+h/+p/`+P/0X/p`/ph/p/x/////(/8/H/P/`/h/p/x///////ȉ/؉/ /(/0/08/@@/XH/pP/X/`/h/p/ x/Њ////// /0/@/P/`/h/p///////ȋ /Ћ(/0/؋8/@/H/P/`/ h/hp/0x/8/@/P/X/`/8#/h/p/x///////////V /V(/8/@/H/P/X/`/h/p/Px//H/p/////m//Ȍ/Ќ/ l/@//،////8/ /(/0/8/@/H/X/`/ h/p/(x/0/8/@/(/H///P/X/`///h/p/8( /0 /HT8 /H /P /X /bh /8&x / /@& /(& /& /& / & /& /# /H& /P& /0& /X&( /`&8 /h&H /p&X /x&` /&h /&x /& / /& /& /& /& /` /Q /Q /Q /p /Q / /b+ /H+ /+( /+0 /+8 /+@ /X+H /+P /b+X /P+` /mh /Pp /nx /n /n /p /8 /@ /H /(h+( /z+8 /@ /H / P /X /` /h /`p /x / / / / / / / / / /̼ /D / / / /( / /p/p//) /(/8/@/H/P/ X/(p/x/// /(//(//p/p//)////*(/+P/p#X/*/#/*/#/*0/+X/#`/*/#/*//*8/H+`/Hh/h*/H/*/(+h/H#p/P#x/`#/h#/v/p#/x#/X#/@#/h/p/@x// ////@////l/`/L//////@/,/]$ /]$(/]$0/]$8/^$@/ ^$H/8^$h/Wp/Wx/hW/ \/ \/[//@//$/+0/+`/+h/+x/8+/+/+/+/8+/+/+P/+X/+`/+/p+/8+/P+/X+@/+P/+X/+x/+/(+/+/+/(+/p+/+/+/(+... .(.8.@. `. . آ. . ......(.h.p.x......ȣ.У... .!0."X.#h.$p.%x.&.'.(.).*Ȥ.+Ф.,.-.../ .0(.10.28.3H.4h.5x.6.7.8.9.:ȥ.;إ.<.=.>.? .@0.A@.BP.CX.D`.Ep.F.G/G/G.H.I.J.K.L.M(.N0.O8.PH.QP.R`.Sx.T.U.V.X.Y.ZЧ.[ا.\.].^._.` .a@.bp.cx.d.e.f.g.h.i.j.k.l.m.n0.o8.p@.qP.rp.s.t.u.vة.w.y.z.{ .|P.}p.~x......Ъ........ .0.8.@.H.X.`.p.x......ȫ.Ы..P.h....Ȭ.ج... .(.0.X.`.h.x......... .8.H.P.X.`.h.....Ю.خ......(.8.@.H.P.X.x.......ȯ.Я.p///..... .(.0.@.X.h.p.....Ȱ.ذ...0.X......ر........ .0.@.H.p.x......в.ز... . . . .  .(.0.x........(.H.P.X.`.h... .!.".# .$8.%H.&P.'`.(p.).*.+.,.-ȵ..е./ص.0.1.2.3.4.5.6.70.8@.9H.:P.;.<.=.>.?.@8.A`.Bx.C.D.E.F.G.H.I.J .K8.LH.MP.N`.O.P.Q.R.Sȸ.Tи.Uظ.V.W.X.Y.Z.[ .\(.]0.^8._@.`X.ap.b.c.d.e.fй.g.h.i.j.k.l.m .n(.o0.p8.q@.rh.sx.t.u.v.w.x.y.z.{(.|0.}8.~X.`.p.x....ػ.... .8.P.`.h....ȼ.м.ؼ...... .(.0.P.X.`.h......Ƚ....... .8.H.P.X.p.x....Ⱦ.ؾ....(.0.X....ȿ.п.....(.0.@.X.`........H/. .(.8.@.H.X.p............ .(.X.p.............. .(.0.@.H.P.x.........H. `. p. x. . .........(.8.@.H.P.`.h.p.x.. .!.".#.$.%.&.'(.(0.)@.*H.+`.,x.-.../.0.1.2.3.4 .5(.60.7`.8h.9p.:x.;.<.=.>.?.@.A.B.C.D.E .F(.G8.HX.I.K.L.M.N.O.P.Q.R.S.T.U .V(.W8.XH.YX.Z.[.\.].^._.`.a.b.c.d.e.f .g(.h0.i8.jH.kX.l`.mp.n.o.p.q.r.s.t.u.v.w.x0.y@.zp.{x.|.}.~......(.0......... .(.@.H.P.`.h............ .0.H.P.X.h.p........ .(.0.8.`.h.x..........0.@.H.X.`.h.p............. .0.X.h.p........ .0.@.P.X.`.x........... .8.H.X......... .(.0.@.H.p....... . (. 0. @. P. ............0.8.... .!." .#(.$0.%8.&@.'X.(`.)h.*p.+.,.-.../.0.1.2 .3@.4.5.6.7.8.9.:.;.<(.=8.>@.?P.@`.A.B.C.D.E.F.G.H0.J8.KH.LP.MX.Nh.O.P.Q.R.S.T.U.V.W.X.Y .Z0.[8.\X.]`.^h._x.`.a.b.c.d.e.f.g.h.i.j .k0.l8.mH.nP.oX.p`.qx.r.s.t.u.v.w.x.y.z.{ .|0.}8.~H.P.`.p.x.............0.h.p.x........ .0.8.@.`.p.x.............(.8.`.x............8.X.`...........(.0.P.X.`.p.........8.@.H.`.h.x.......... .(.8.@.P.`.h.x........ .H.P.X.`.x.......(.0.8.@.H.P.`. p. x. . . ....... .0.8.@.P.x....... .!.".#(.$8.%P.&`.'.(.).*.+., .-@..P./X.0p.1.2.3/3/3/3/3/3.4.5.6.7.8.9.: .;P.<p.=x.>.?.@.A.B.C.D.E.F.G.H0.I8.JH.KX.L`.Mh.N.O.P.Q.R.S.T.U.V0.Wp.X.Y.Z.[.\.].^._.`.a.b.c.d.e.f@.gH.hP.i.j.k.l.m.n.o.pH.qX.r`.sp.tx.u.v.w.x.y.z.{.|.}.~ .@.H.`.p......... .0.8.@.H.h.p./8/p//h// /////x.............(.@.H.X.h............(.8.@.H.X.x.........@.H.`............. .8.H.X.p.x............ .0.@.H.P.`.h.p............(.0.8.@.H.X.p.x............ .8.p.. . . . . .....(.8.@.H.......... .!.".#.$.% .&0.'@.(P.)p.*.+.,.-.../.0.1.2 .3(.40.5@.6P.7X.8`.9h.:p.;.<.=.>(.?8.@@.AX.Bh.Cp.D.E.F.G.H.I.J.K.L.M.N.O.P .Q(.R@.SH.Th.Up.Vx.W.X.Y.Z.[.\.].^ ._8.`@.aP.bX.cp.dx.e.f.g.h.i.j.k.l.m.n.o.p .q0.rH.sP.tX.ux.v.w.x.y.z.{.| .}0.~8.P.......x/ / / /J /x / / /I /( /0 /8 /@ /....n.> {L{_{@"    հ@B ְ@b ְ@ ְ@ ְ@ G     !B{ ? H{ +9_              @#BE@_      ` !` ?T!Ba_` !` !"A !ABFb_{ ``9@7!F@ ? R` 9 @{¨_          jFE  { ҢB D @?BL@ !8@?րxG?`BA!,@?`@!XC ?"9N?== @{¨_֤$D c!`99R?G?{!XC @ ?"9N== @{¨_ѡ!A{CS @'s`j@q T`n@qT!+@g p@#K p T @b~#`T p@b~_{|?g/ ?mpEm@#@/b|}ᇟ4 @?Bm{Ĩ_p@.bo)~!T 2nᇟa5|?g T#`T @?Bm{Ĩ_ nT!pB`N@ ? 7@R*@8ox7a@!p@?k!Ѐ?Bm @{Ĩ0 ~T`N@!pBm ? 7CmR~*@`@!8~!o"x7p@?k!Ђpppn* @?Bm{Ĩ_  {S3|@t|@[|@c 6a @p@?kLT@ Cp@?kTkAd@Y0@d@a!HB ?@7@?0@@Ts{FN@`?`6!@N@"@9* ?***`? 6W@4s~N<~{A~@!@!`?֟!T*kDsESA[BcC{ƨ_0@!@kDRSA*[BcC{ƨ_!@?9!@N@* ?**`?7"@9<R~~@W@<R"@9Z{S[V|@c8|@ @p@_kTSAR[BcC{ƨ_d@N@!HB ?ր7@0@3kZFN@@? 7!@N@* ?**@?֠7"@95R ||@9E~uN5`@* ?ֿATkD RSA[BcC{ƨ_֡!@+N@"@9* ?**@?`7"@99+@ @50@!@ @5R  {C[ASc@@'ҶN@*?֡!`F|@* ?Bq!Rן*6R!A'@"@cҁT{ESF[GcH_֠@d@!HB ?ր7@0@3k s {FN@`?@@N@"@99p@*?***`?ր7"@9~*`?@:4!Y QbN:!|+@|/?q,T@{#aTkI RsJA@/@84/@R)~@|@Rs@y@sZ???kaTB)@WK@)E +@kT@{#T/@85@{#aTkI RsJ{0@!@vGk s ?{S[FL@7R?@6w"@9!@vN@* ?**?`7`"@9~`@[Bp@?q!ğ |SA|h|@{Ĩ_֢B D{@?֢BL@ !@;@?`{_G?{S*[6Rc L@F#?@6"@9!@N@* ?**?`7"@99qƟs~sjs~ssfb~_qT@g@#@SA[BcC{Ũ_3@@@ @?kT!|D@|@ ?wHT!E ?ָ BF@?֠BA!0,@?@3@T!4G ?"qT@3!B ?g~C43@s~@L6   @!AcaT"qTҡh`k TRsBD*@?3@@!B ?g~C$Dc c!`9;bTR?{S*@d@RSA{è_0@R!@AB D@?֢BL@ !@;@?*H*!(B ?q@G?@9 @9@K_OѢBA{C@9D@'9a4!Q b`8b7A9q!Bb 8?T @9qTR!A'@"@cT{E_ RG?@9q_@94!Qc?T"@9!_q`TR_ֽ@9%@9kT4"Thb8#hb8Bk@TR_ R_C"ҦƼA{ S C[  `@:d@tA?A9A9lA@OҵEcc"fov99?CA9G"Ҡ?@9RCA9kTC4kTbB@9!@9_kTR!AO@"@cT{JSK[LC_ RG? @9?qT@95@9q_R_@8Ec "Oѡ!A{C"@'@9< =#4aQR  "@9_qTe#8!?T9BA{@xA9{A9x'@@BҁT{E_֠G?  ?qT@9RF*?kT"*c9_kkT!k! 9__֤$D{ c! <<"R?O9||? qT?qIT_"|zcB!c`dh<@A99?t =t_rT94D*R9?qTO9||_94D*Rѡ!A{CS;"@'p@tA?sA9w9qhT4k-T!@9?q@T"   Հ!@9q@ `0k TA'@@BҡT;@{ESF_@6qT3s"՚s{6G? R9@#b99B_qT#$š6@9dqT9_{ _6f@94eb QD?T#@9!q`Tq`TQfc@9?`T*#@9!kHTR @*{¨_֡@9?qTaT @*{¨_{ 6 @{¨f @{¨_{ 7 @{¨_WR9bB"A9c9!?q`T$6b@9C_qT9 @{¨_o{S[c||||||||3@94dQ #cT`@9q`T@9*A4 !Q!?T@9q`Tғ4j`8BkThb8kaTz kT  Ճzb7#jb8`@9?kTBkTSA[BcC{Ĩ_@9*64  k Zz!!klTSA[BcC{Ĩ_klT7k TklT$Dc c ! <<",R?   {S` g}`SA{¨n+?/:އ.>/== РDFW =. s һ{D`|haBc>`?֠@9kT%k|8q TCABR?@kHsIs sb2C=u@sBa@?@5ЄCbB`'?֠A@@BҡT{DSE[FcG_@6kH*DF >BR?`7Gks ? ѣcA{  S ck'@d@_Z[8 жZDFs=R ?֠4'@As?#@_TT 4B3 !F ?O9==Z >B pDt@FsZDoF?aTT?`5T'@9D @B=@:R?X@XZCqaTBB@`?֠6F@R?7@T*aT[NRsQ!A_@"@c T{LSMcOkP_O9==R9@=@>tA9= 9 x R[NsQcpDC !>`?ECRt@?7@6qT94cD*R`?'@[>  6@="@>tA9=_x 9 RO9==G[s? CѣcA{S[ccks ]p@`@AA99E=_xAr 9zxҗFA?6j@Cr@"?A9A9c"=vA=~Az=~v=9d9 ?CA9G" ?@9CA9kaT4 a!@9@9?kATBk Tz@A9<~A9=!A@"@c!T{SST[UcVkWsXC_րG?  @B@B @@!B@ c@c@95?T_@_{ aRB>S[Dc#wB 6??c@aRcd@?sBT aRB@?? sb9?c= dAaR?c_C ֢?Rs*aR?q!T#@SA[BcC{Ũ_O{S!@9||A4?qT@BLF@?ր@a@9SA?k{¨_SAR{¨_ց@BD@?ր@a@9SA?k{¨_ {S!@9~a!4C ?ր6SA{¨_֡!E ?SA{¨~G    {C[!A@9A9$@'SckA Ts^C`?@6S k R:Rz@"R{A9vA9?wr@T@9cQE|h&4R@9BkmThb8kaT"*B@98AT`7 9Rq!TkIS@R!A'@"@cTSFcH{E[G_TR6`?*A6{@zA9{A9zS@kITGk S?֤$Dk S c)! ""R?   CcA{ S C[ #Y`@;h@]pA?xADA9"A9#@OҴД2Cb{jrеAz#9C9??֔)b?*6f?!AO@"@cT{JSK[LC_րG?   ѢBA{ S C[ c k6)Z{Ez@@Oz@z`A9zA9z1T 6@?ֿkҀqTz@ 7Rz`A9zA9z1TBxE R@?ֿkҀ")#CDjFx@EH9fA9x@=~tAt =z_|=9=9?7AO@@BT{J*SK[LcMkN_?@G?{S[$@P@_PqT`RT!HBT|@ ?!ҁu&@| @BTbR@!R@=B|!=A9`R@j<9 =SA[B{Ĩ_P$_PqT`Ba&@҃cD`?֢BL@ ! #@?`&`RbR@T!|DwB ?BC @?cF`?֢BL@ !#@?@`&bR@C{CSA[a@9@'64RA'@@Bҡ T{E*SF[GC_`@97@94Q !B_T@@9`@9T7`R@q-TcRA`R@kT`&@?6a&@ =h< =@A99rzcHz@{A9zA9!B{ ?֡!D ?6{@zA9{A9zcHGc?!R9_!R9_ {S!\C ?6SA{¨&SA{¨_Cс!A{CS3R[CֶD @'ҵ^C*??ր6sqTA'@@BTC@{ESF[GC_րG??qT! R 9_ք$D{c) c! " $"R?O{[Acck@R@9~~?q T7CSZkFR&@b}h<^ =\@AA9a9}rz?ր7c@9`4@?7@?ր6  z@`A9=}~A9=R@kTc@9`5SURsa 7;6sYz@ R?{A9zA!9?{SU!A@"@cҡT{T[VcWkX_ *kTן5sYr@~~@pA9?=bA9rAC=zAp!0C{99 ?@ ?5C9B9?kT!T{{E`?*`?֟kTC9B9?kTA9c@9?k'4GSs?{CS*!A[b@9 @'_kT!A_q'@"@c!T{ESF[G_O9BD*~~@?!B ?֡!\C ?֠6a 6{@zA9{A`9zb@9R@_qT&@!RB_T@9?kaTp@xAA9}rb@9z`9G?тBA{CS[c^CA@'?ր6+68RA'@@BaT{E*SF[GcH_֡!4C ?`6Ob@99==z77е)KYRz@zbA9zA9zm7 ?q!TOAR!r9~a~? 66K@9RO!@R9~ay~?֠67O9~~K@? 66=@~vA9=`9z?6`6=@~vA9=`9zK@GK?уcA{CS[*ka@ҡ! G ?ֿkl Tc S@qTZDO л{SC$#R"'@ ~B~~~~~~~`?*@?O S@k,T@ O$D: D   @ks86#< R99#<#<< T#< <=?*?OsT @97 @97cXA@@BT{USV[WkY_* c?OsA@@B!TcX*{U[W SVB@%kYDփcD* B%`? @96cG? {S#A*Ҁ@RcD`?+[AB@BT@SA{è_րG?ְ2D!R{ @!B`@ ?B|9`:y @{¨_֐G@cB0!   {S[c@BGx@@?aR*!rkTqK:T` @$A 7d@ a@BA'@?֢BDG@?` @BED@@?@`` @!$E ?#a@9 5|g!ATo:@A`!TD ?֡!E ?`:` @!RB4G@?yf@@?$)T@`j@"@9 yf!@ `j`A97y5s@yf R`9B?kTxf@85xj@?k(Txj@x5!F ??q T@R` @!XC ?#@'@*SA[BcC{Ũ_ց!XC ?` @ @ cDB%!R`?քB4Da@?|g!aT?*84BLA*@?`f@Kxj@`f?k)T?*4?֢BF*!K@?`j@!FK`j ??qT!(B ?ֲ`@!B ?*SA[BcC{Ũ_ @ cDB%!R`?'@{S[@@@:@|_g#TcA?@:`?֢BE@@?*7*SA[B{è_փcA`?cA`?֢BE@?*6 @!RcD B%`?*SA[B{è_{!A @`" ?֡!hF`B ?`b @{¨ AуcA{S[uе,ckb@҂BA@?sD!Rb B`?AR B>`? @ңcdGF`?ր @vBEtF?ց@?!F ?B9`>a 7!@G ?!dB ?xGu?` 4F?`a@a @?@`T@9#Ra>@@ 7@"Rcl@" !(`?քC#R B)!@)? @ @cC`?ւB\F@?* @ 7cLC @`?փchD`?` 7b@|gABlAHB@: BD@?րA@@Bҁ T{BSC[DcEkF_aB< =@A9| =>? ="9!@G ? @!RЄD B&?ց!(B ?Y{C?kTAABXE @?֤G*A ! ?֡!A ?փ @ cDB*!R`?ց!(B ?ְcD !RB`)`?Є$D c3!'( R?րG?      {[BAa!-@?S!RDb B?AR B>? @ңcdG`?t@a B@V!`@ ?N B0C!*@?ր4@!xC ?ր4!G ?`@ B@@ SA[B{Ĩ_ R9@!xC ?ր5!(B ?SA@[B{Ĩ_ {S*[5R(@Kk+TcA|@~@``?a*@*! a*SA[B{è_`@ cDB*!R*`?`*@  {S@t@t`B@@97@!4G ?ց!@ ?֡!,A ?`SA{¨ Aց!B ?ր@   C{SAa@@oҢB@!@t@@?ր7Ao@@BAMT{NSOC_[`@!F@ ?q@4T qT 5[P@/@`+cA`?րA? BC*@?*@ @!C ?V+7cB@!LG@ ?*@:@"@b clB`?-7!D ? -@cA*`?A`!TD ?ց!(B ?֖D`@C҂BA@a|@o@C@aCT@[PcQA{NSOC` @!RcD B`+`?րAo@@B!?T[PA{NSOCcksv@!E@@ ?'@!2!dB ?6#@ F@'?q'TZA@?֡!@B ?R!C@ ?`"xG?!!dB ?!chD`?@ 7@BE@?ր7BBG@?7@@ @B0A;B9XA*@?0@ABlA_<BD<@?֡!hF ?@?1 T ՀD ` @* @*R B -?րG? cpE -`? !B ?@.Dҥ)"R!R? *BB:R@? @B@@)G?BlG@?@R r?k@T T@Q(TqT`R r?kTZW@?k+TpR[RER Ղ @*YBD@?@B4D@?@*BC@?@*BC@?@!x@ ?;BC@?@7!B ?ց@ R9$@ #cQkRsS4F?ր@$Dck sc3!+@,(R?O#c?`@nSA{¨_ց!(B ?SA{¨_   C{SAa@@t@ @!DF ?6[ @ BE?ր @@#`T`@!F@ ?*q` T_q T`@@@cA`?[DA@@Bҁ T{BSCC_lCa~#` T @!(B ?֟ ` @RcD B1`?֖ @AR !(B ?ց!LG ? !4G@ ??֟@!E+` @ ?֡!TD ?ֹBE?֟@l;`~#`T @_q!T @ @` @RcD B2`?ց!hF# ?ց!F ?G[?   { @!(B` @ ? @{¨_    {bSA`1BA@?BlG@D@?֠!Rb B?AR B>?ց!E ?`@A@a5A@a5@@qLT@a@ @!@@BPD@?ր@ @@@SA{è_A@BG@?BD@?֢@BA@?֢@!(B ?SA{è_֠G?CтB@{SAt@@`@@@@?ր7A@@B T{BSCC_ր@!F ?@aA9A7 @?qT?qT`8@# @qlTa$@!5`@@@cA`?#@a@B4D@?6@BC@?` @ cDB`3!R`?ց!hF# ?֡!A ?ּ` @ cDB3!R`?c@`@cA`?֭` @ cDB3!R`?#@G#?   { @!(B`@ ? @{¨_{ @!(B`@ ?!C` ?` @{¨A {S Aa@@?t@ @a!DF ?6[ c s @bAF@? 4@B@A@?6,1aT@?qTqT4k 9+B!D ? ?kL!A ?[JcKsMA?@@Ba2T{HSI_`@ccA@`?ց!D ?րA?@@B!/T[JcKsM{HSI*Bk @9+B ?֕a!C ?ց@!@?k$TAB`?֓snG@`?րG?`?ց!`@  ?ր@ @a! C ?ր!dB ?ր4F?ր@ @" @@cC`?7@@A,@@@4bB4@BT@ykaT}Rc|B!E ?c@3@`@1`Tw2FsA`F@1 T?ր4*?`F@1!T@$,@@`4`GCDOk_Cs{GZD?O@ 7@c 4~~9?O@7cҜc?|?|?|?| @`?q@ c8c RB<@?O@ 5kRsSBDpRRD@?@@ @!@@?փcpG"RR`? @ @! @@!@?`@@cQAo@@BAT{NSO[P_@@?O@ @B8#@!RD?֡!C ?ց!A ?ց!(B ? @ cDB:!R`? @ DB:AR?K!(B ? @ cDB`9!R`?`Gcks?րGks? Q),@8@}~ `@!JK?q-T  B}~R_qTC RR'   ՚C C C *% ?h`}h`׽~+?_ATq-TP#<C *>㇟5p#?;  ?kmT_q,TC C C **P#<C >㇟4;:, 8Z+=_;<#  TC!+?!97 9: : 9 9Z+8+=C8+< Q #; T? qMTC dRC ? q-TC R* q PZ kЉkjT| R'_q,T# T k!T} tS_֠ *k TC *&?h`}h`׽~+?_AT#<T kT*C R* kTR_RC C RR0Q) ,@8@}`@k KqT ~qTRRRR R  ****f(R Հhxhx!kTZc !TqT_k*Bу*?kTk!  kMTq T **R_kBу****?kT` K,\"="">+ ;=# ` T@!+<!z: ::_ ? :+>+ 8(=8 Q   kT qMT *gR* qT*R*    q QZkЏkT }  R qT_q)  RkT} xS_)  kJT*kT**f)Rhxhx!kTZc ?!TkT*8RR_RRRR RRR  ,@`@"GqTc|~ҿh`^h`h`;? =+?=h T_,@`@Gb"qT|@yx@xxxcK|@K x#xcT_  {B[A`7BAS@?tДD!RnGB B?AR B>?t@?ր.G6??ց!`@  ?ր!E ?@AAR?R?֠@a@ @!@@BPD@?֠@ @@SA[B{è_ց!(B ?SA[B{è_րG?  {| @`:@aB*`bj@"5`@!(B ? @{¨_ccDB|@R`?`@!(B ? @{¨_{S@tfD`.@?`:@?`>@?`@!(B ?@pGSA{èCa!DF{CS[@@@ ?@6cRkt@!B* ?aF@|yJ)R?qMT?k"T!KR?k:ЕK!K )tN@kQTkҕqmT`@Ka!TE ?c.@~@@`R`!:ccAZ `?`R@ `R`@aF@BLAA@?4!6`H)`R@ ` @!LG ?*`@cclB`?7a@BD@?a!D ?րsR? maI)@_kTcB@҃aJ@R ?cB@|@`?c.@` MizZAa`@?uJ@`:@bj5a.@!@?`G-`F@(>8%;?|`VB4bR@B4a.@`5ccAB|@`?`R@R aF@BF@?}zJ-"|6@F@!^!^ <!^a!@)=9>?" ?`@`a!@E ?)``@|g T`6@!4G" ?ց!B ?֠47 7@AcDkEsF{ASB[C@?ImCpAcDkEsF{ASB[CC_`H)6e @ ccDB>!R`?sF`@*B??֐AcDkE{ASB[CCs`@!F ?`4QxrT? qT` @!(F ? 6`@*RsF`@!LG ?֬aa @bB@%; @C@" ; |{8Cb ?3#=O=-qTA oC )a!TFcKa "/@G!|c@!|O!|@@? @/A I) ЅM))>G ?@@ c @hD" ?q !> +!c B`?R   ?ր @@B@@??Im%%ccTFc;@~BK )!|@B  )`?k@?@;!tS!|@??;@@$@T7mRkccD`?`b?@F@Ab4:Q@Z ~a!AZ~ l/m . ,WgR '`"W@.?_9 @?q + -"+lx Tg@ D?Tck!T Cq T@@ ?8qM T;@!=K /Gm7Hmi R? m8 Q!~[a!A~R . ,Wg  @"W@.?֟9  -?q-T[@?D?Tg@ZkTCqT@@ ?8qT;@!3K 7Hm1;@/Gm7Hm+;@7Hm' @ uDB ?R??Imd$Dsc c ! R/m7m? m?uеD B ???ImsFG;@/Gm 7Hm;@7Hm "@_ q`TR_@C@`@6$5$@ Rc@]8@@b\@@!^# #C-#<O<]-_D4"@n`@R^8@B@b_@@"!^B4B"!b `@b @0#?O?^-  "@_ qTR*_?@!R@Cb4*_   {S@t*B`@?`@?SA{¨_ {BA;SbBA@? ssD[!RB B`?AR B>`?bB Dғ@@?ւBL@ !@?nGu?֠G.6??ց!`@`  ?`!E9 ?bBAaR@?֠@@ @!@@BPD@?֠@@ @@`[BSA{Ĩ_a!(B ?@SA{Ĩ_րG?{ @a!F`@ ?9`@a!(B ? @{¨_   {[k@a!DF@@ ?6cLG?hDC`TESw>CGsAsDKеB?mLAO  @@96@@@@7@@@"`?7@@`?5@@!F ?qTqT@@*@ @@9`6@@tA @?` 6@@`A@9!6t7@7@@@"`?@@96@ @"!C ?,qTSAcCsE[BkD?Fm{ʨA @a!pB ??9 @%R!@%9B@@? @a!C4@ ?* @a!@ ?*ccD*`?@@t6@7@@@"`?ր6t4@@?@ ?֗@@@@9`7@@C@ ?@7@ R@9@@"`?7_9_94 @@[@96R@@9 7@@SAcCsE[BkD?Fm{ʨpA@@a!(B ?TtRdЄ$Dc c !`"R?@7@@@"`?7_9_9?*@@G@ ?@7@*@@K@"`?*@@O@@?h@ 5SAcCsE?Fm[BkD{ʨ_@@@@7@@@"`?@6@ @!LG ?B@@@cclBU4@*`?֠7A@BD@?a!D ?!\A ?*@@@_k T@7@c0B*"wVC`?*@@?@`|g TBF*@?@7@!4G" ?@Ay @ ccDB>!R`?a!(B ?@7@@@a!E"uе@ ?֏"_7@ ?")`?`!TD9` ?@@96?9`?^7@"~ nx~ k+T@@*a!F ?ֻdЄ$Dcc c`!R?dЄ$Dc c !b R?dЄ$Dc c ! R?dЄ$Dc c ! R? 4@@` @l @"bE)bp@BcB @A(a?8+`x! _kT@K| _ K| _{S[ck @+a!(BwC ?ց Ҙ@9O@?? ! ? @ ҵ q-T  ?? ? @`z;{?klT+@SSA[BcCkD{ƨ_րG?{S@q-Tcw|~xA[V|~5|~#B@ {s!Xss!?ր @kT[BcC#@SA{Ũ_{@S_k+T@BKqTK| @qMT[5|~F@B@B|~Xss?ր @kT[BSA{è_dЄ$D[c c ! B4R?qT{^|~[k!cs|DZ`QS|'|~yky|@yҠzs{s|q,T?qT   [h`~h`~ >+>ATx3s?ATSA[BcCkDsE{Ҩ_h<Q=OpIj00nMnWv#=[=|=#=;n'=m^=}==n#===#=_?n'=}S=t=3n#=6=U=#=5n'=?VX=w=7n#===#=Y9n'=eq Tg?   PhN'=j<=i<_?n4N#====u5n=6N'=Wi<=8i<8n:N#====""n?=C#N'=#=iD@ >+>_aTqThaha!@ = <{;=|+<x;T@B`T**R*R@ @RZ сqr <'    x` ^_=_ ? =+<!?)>_aTq#T  **RZA~ %рR@ @qr wS%'   x` _]_ ? =+<!?k)>aT7(qTR) qr '@)ySA @R, ) ": {Q***#@q@T _{` __ ? <+*!?+>aT!+;T!+ T k */ן5 @kCCZkT`|S+' g#+) T k */ן4#@k+@`@zMTqRbBBYQQk{ӁkT)D/R@qr'@?k!@zjT***@%}~q T@!  xa ?!__ ? <+.!?+>aT!=T9) ?kT`AB@BҡT@CSA[BcCkDsE7Gm?Hm{ɨ_־+, .o;+# T;,+> .C!< = = - =+.+?^k)?!+ *DT&`)Q @kWzǟ_q@@+w#+dToC !+;dTcx! JTaA !+BBQR$TQRkR{Ӏ{**RR*RL@q,TRR`@aU*R;@7(qT   wS@~ A `G?@RBqB9Q:   @?qMT_@_ {S*[k`kГ 4@@A @` Q?q-T|D3`C7F;`L@~@vAcw~~xKBs? @C@z{{h|E?@ @kT@C@|}h|?֟ @TAC@9h|3@ ?7@@?;@`??@ YC@!@ @? k<cCsE@@` @[B*SAkD{Ȩ_{ `[3TS*ck?m@`@?q T@@{"p#oT@X# Y"0oW 53@7b ooCb(Bb(kЂ?k-TsaRuA7m;@wFl-FK_kZӀ4 @?q-T~~Y~   +@`z|!X|? @kT[@{KqT{~+@X|? @k T;@K; kTA`4SAcCkDsE7Fm?Gm*[B{˨_֣* 4@ @% Qqm Ts~@|~C|DG`CKFO`L@C@Sy9KBuD C@RC@@k|@;? @kT~}@k| ? @#TC@:h|G@ ?K@@?O@`?C@ S@! @?@k<7m@ @ @!b!o6xkҔbo (l xqmTuD~~tN `@R?aT*e @*;l SAcCkD[B7Fm?Gm{˨_@ sE@@ +7@@#@6b/@b o*u:t*nx?k':Ӏ_qT*/@Sb@'@9K/K'R:ss@@ ?kT3@?kKT  ?kT3@*7@ @9 /?qT 3@ 39B~Ӡ? @kT 3@!}+@@9;cha!ia`"67@_q T#@D|~Ҧhchc'hchc0 0&*&h#cTB|~9!? @kT7@;@"R9 ;?@*C7@'@s@>'@E)7@O@BKBK @7@E ?@*s@?N{9 3@**) @_q T3@J}} 3@ ?@|~q T!_T7@ /'@ ihcihhbhbchbhb?b"+"h"B_T!_@T ihcih@9/@7@KkҔqlTSAcCkD?GmR*[B{˨_7@"R;@ / ;9kKTR**?GmSAcCkD#@@bl9b8|+}xk'҂qT*b@'@/@K';BK/d$Dscc c! 3R7m?d$Dcc c! "PR?@ @8@_b@>bb;| `;}+`_  ,@@`#@| kT"F)l! @b# @ $p@b#@BcA(a?8+`xB k-Tk RT#4 8@qן_Ck R%T_ R_   $,89D_{\'!^S@R['ck;mb@t"@+/a ~_lA-|vC9 ? ;y9FxO@==88BCx)B|!|A b)BQB b")a|@? ? ! ?{2@A`"b/FqTAbUAz@ .,   Հ"/?֠9 .z4_Ta{St&@!|@? ? !?{2@A`&z{S/F_bAb_qMTUA .,   Հ"/?֠9 .z4_k Tb6@aBb bZB|@zb2avb2@ac*@BQB brB|@mb2aiFc2@abr@_kBBtSB|@^b*@a @tN@!|!|@? ? !?+@/@`NSA[BcCkD;Fm{Ǩ_    d B0R!RA@c4kT c|}hc__*a R!  @4"@! _kaT_   @ @_kয়ПZ_  *qT qT$qT(qT,qT0qT q TTq`TqT_q TxR_q@T!4QR?qT`@XaqxS_րR_R}`@@ R@R`RRRqGz_  qT qT$qT(qT,qT0qTQq_R}`@@Qq_ R@R`RRR`44Q*_q)TqT qT$q`T(qT,qT0qT!Q?q_`@XbqTR_@R}`@@RR R`RR4QqTa!@! X`q_R_  Q?HqT4Q R?qT_R_`@Xaq_Qq_   qTqT q@Tq@Tq@Tq@T_R}a!@ h`_ RR@R`RR   qT q T$q`T(q`T,q`T0q`T_R}`@@_ RR@R`RR  QHq_QHqT _a!!H`8`! ֠ >_ _ _ _ _ _ _ `_ @_ _֠ >_ _ _ @_ _ @_ _ _ _*qpDdGz!`Sq$@zT*kTQ*R?HqT4QqTa!@!!Xd?qTaQ*R?HqiT*_e4QqTa!@!!Xe?qTQ?qTRq T q` T$q` T(q T,q TR0q@ TBQ_q凟q` T qT!R "}a!@!$@Q?qaQ T?qi TQR?q凟qT$q T(q T,qTR0qT{QZq*k T4qRbR*#Nak Q K( @Q*{_*CKQq K( !&Ѐ*{_RKPKR*_R"}a!@!"@R!RARARaRaRRRR?q'Rv  *bBA{ 'R RS R[ @@W**G kTb~}sj"@i"PqTdEv~@cҀ?4J3@CD_T`AZ6W@@BT{KSL[M_@G?  *a @ 4$R  k!A5ЀkcD@4_kT_*kTk`Z__  4QqTa!@! X`_ R_      _R?qHTc O Raa=<> =% I$@9&x@]|_FED9C(^<_ CeA{S[ c k s @7{gG!@b B5`?A!F ?dCC3s=? 6ccFbB`?bB @@?bBL@ !@? bBlG@?#@`? @BB`C{{+B@?O@xf r~@~"=|9c6uBvRa^~~~~~n`?aR@EХA?`>@R`2@A7@@BT{GSH[IcJkKsLC_DD!R B?a!(B ?`?D$DC c!@BR?@G?`G?   {S*[**ck I)A*[A%@SA WAAw@UD6@B<A9{A_x!@9]=C9JF?kTOdЄPCKO R@||||||||?J@DЄxG[{D?@*R B`?DЄ`C?dЄA B9Z?6@!@ ? 6b@|Cc "B`'?Z@@ !.# Ҁ?DpC?o*{@ B*A*@A9*=>=9wKAOA@AA@B! T SA[BcCkD{ƨ_KAOA  A!pC ?!RJ@9A!@ ?"R )a!FJ@ ?@9Z@ 7!|Z@f@|!*qmTR@ RB`?@f@bn@~bJ@ }x#cqa!@cğ ?@R B@ cQc c|R@`?a!pB ?KAOA@7^6@!(@aC4R@ !RB@`?KAOA@GKO?HA{C+a!B# )S[cks@ ?37ccF"@B=B@`?a@3@b ccdGB5`?/@0zZF+`L@XKB|МD[{C @ Za~hk<=#S{*`hs`?_@T?`?3@?֡ !?@*+@3`@9 4bB0C ! @? 4A!F ?eB B?C{@@3@@ccB`?4{ӕ@ ^S@94@7C@/@@`0C C!Y9DR ?GkT@k R ?Ң@4/F@?/@ 4c*+@r@ C#@I)zAA9r@9zES@@zk T4?@!R ?5SCssN@@`|D7`F ˗#vEGXKB[{C `{s"@?|?|j  Tzs*?T?@T7@ ?`?;@3@`?֡ !?@+@s`@95{ӕ@ ^SC@95Q HR ?֢@@ B!R ?53@a!(B ?@A@@BT{QSR[ScTkUsV_?@G@\@`7<5@{A!HB7 ?ֿ@7@T! ?|?| k3.w@ 3@ccB`?C3@ BB`C!.@?5 A!HB+ ?@+@T?5*#?S?@G@a!|D ?BBC@?3@ccF`?bBL@ !`@?7@a!|D ?BBC@?3@ccF`?bBL@ !`@?+@@`@9`4bB0C ! +R@?+@ 5RSC3@ BB`C!.@?CS@G?`G? { * *O @{¨_{S* *Os j`TI ?*SA{¨_{ a" RO7aI @{¨ @{¨_{ a"@RO7aI @{¨ @{¨_CcA{CS[RP@d@VD B?aR@CcGR`?bBG@?*7@A@@BT{Q*SR[S_O#ccPCsR@ ||||||||`?֢ B`R?@G?DA{S[@oc7@7@Ao@@BAT{N[PSO]p@_xAsBA99bBG{@?6OWjF#@R#<y<<<?O`6@G@@A@'`@A!dC @@ ?`@CcA @@`?*V 6@TC@(E`C tFc`hFwBk `hFs [`@ @@?*4qT>@A@9 @@ ?@`@ ?` !J)B#@>bb!CE~ oCgxG?D@?@T"AA@@ @@?A ?@ ?`@ @@?*5cHkIsJ[@@A'@@BҡT{E*SF[G_֠R@*ED* B%?A#@"CE@@?@B#@!CEG?D$DC c!@%R?@Gck s [?{S[?m @A!LGtF@w>@ ?A!TC ?@`A!lF ?A`@@9 7:Fm|g!!T8o(o6a!B ?bb@@^b @9~+o7zFm(~#`dTA!@C@D@R@CcG`?BBlG @?@BB_!^?(@ R+?>_{SA9t>@7@96SA{¨_@C?֟@# ,TSA{¨_֟SA{¨_`@"@"@b;`" { |+~Cb#=O?{S<@~@*@@f@ݻ^#>`@9|ba2@!^b@9ןj&8?>8>"8| |)b6#`LT# ab@9@ן B9SA{è_=b|}e }  {S<@@97@C9?ր Rb9SA{¨_`R@ CcDB@)!R`?{S<@b@956@9kT@ RSA{è_s97@C?ր@ RSA{è_`R@ CcDB)!R`?{S[c@A>@@`R@@4JCcD#`f@99R`?`J@q@4TXERa"@!?aJ@?k TcclE`?6@.@`2@!^|&@ ? <+=~*8! !|@C?"+>^f?`@AB@BATRSA[BcC{Ĩ_a!pE ?cclE`?@7bBDAR@?@G?   d@ |)?_ R_  _{S*"<@X@ @dBs~@s~@?ց @ R! SA{¨_ _CcA{CS[ckzRa@H@A!@qssBZ ?*D*RȨr!`?!`?rS*RĪr!`?ĬRr!`?R!`?$yB!`?9@99B!`?@!`?*@@ҟ!҄Ѕ`?N@8B!~y`?yB!`?RyB!`?yB!`?A!E ?!`?99y!`?R!`?R@r!`?Rd3r!`?ք,R.r!`?!`?@A@@BT{ASB[CcDkE_@G?  {S<@"@97@SA{èPBր@Rcc G`?@5 @Ot_hT@@@SA{èPB`R@ CcDB@-!R`?֕ `R@!RCcD B`,`?ր@SA{èPB{S[@At>@@Җ@A!B`J@ ?ց"@9`J6 q Tq TCcD#R`?a!XF ?cclEb`? 6`J@ .w@a@9~!A!@ ?|@"@9 `J@B.!|w@9a*@!!xGyR@x@ ?*WD*aR B@/?փ&@9 B/! /@!BB@@?ր "@97B"RB!RBRb9afA!AB"@caTSA[B{Ũ_q@T!!pB ?7@R`JKt}"@9 B@.!.@!"B`C@?`R@ !RB@0?BBB G?    p@CC96CC9c6B9#64@/~B,@??xmB`@@D@$ _   {s SR[c k *@A ss@@/9;`C9 6# TE@LA@(B@F@hFzZB8A qT @ R 9A ?`C9@6`C9?kןR?jT`z@@?5`z@@ ?`v@@ @@z ?4q!T+@`z `z@@?*@`z@ ?!Kb_@?k5Е_qT b[@z|z|D|B|$B|@?`_@kT@*`z@ @? @9`C9`7   ՗@6`_@q-TUE9Kc[@zssbK@a|c|!|@#?`_@kTCcE*`?@A/@@BT{F*SG[HcIkJsK_`z@R!!D ?``z@a!B ?*CcE`?4R G?D$D{C c !1`2R? {S@A[U c 5k s @/`BW D?r@?q1T@C@(B 6nFU>EY9D`C9`6B9 6@jf@Ҡ9g\b?bw| } ~x??`&E9 7`"E96"9??ր6@`@9`6`BD96r@C9`6C9`6B9 6C96A9`7A963@q4+T6@9d@9 6 @{@ ?_R"R@9*X5R@ C9*3@B5A!D*RR?{7`C97w??`&E96?@A/@@Ba&T{FSG[HcIkJsK_`C96`C9`6r@@a!B ?kLT@!!D ? #GD96@@@?b ~#`TccDG9*R`?*$RrC9*@96@*oR@ RB6zb ?@&TBBE@3@@?aJIa@Ds C|K lTCc@`?րR@ RB`6 ?A@D@RR@ B5`?ցA9I 7A9 799@?ր@ ?w??`&E96p@ZZ+B@?@G?ցJ@"BC@?6@"B4D@? 7@@?րR@CcD !RB@3`?G*R@R B3 ?փ6@*c(@`? 6R@ RB4 ?րC9`6R@ C9B5@*3@*R ?5qTkTA9`7Rcb#~TxG9ccD*R`?ָ4B9 6C9@6B9A7@?ր@BBC@@?`6@*BB@@?7bBC@?hR@R B4 ?ց6@!$@ ? R99R@ !RB4 ?֥#CcD@`??iccDG9*R*`?D$DCc  c!23PR? G?D$DCc  c!2BRR?   {Sp@!!lFt ?A!C R`"9`b ?SA{¨P>E   {Sp@!!lFt ?A!C R`"9`b ?SA{¨P>E   p@l@_GA{CS[*ckxr@@F6!!lF ?a6@ (@yr@** *qMT7kLTA!E ?vC9y9F9?7@SA[B{Ĩ_vC95>E99F9?V6r@t?A!C R`"9`b ?@SA[B{Ĩ5>E9vC9yF9?ց6@!@ ? {S[6nFp@?a6@ R9!(@5>E?sr@t?A!C R`"9`b ?SA[B{èցC9a7C95>E6?9?a6@!$@ ?{S!!lFp@ ?!!E?֠Ҡ9gXEW@@C`C9 7`C9 6?@`z?!` TPܡ@3@C?A?As` T?c ?ր5`C97`n@A!4A ?@R@ #cDB8AR`??_?j)@& nx? T@@?4R@ #cDB8R`?? A@@BT{C[ESDcFkGsH?Im!bJb@ ICs|›K| G?{_rS[5@zcp@6nFT7>E?`C976@(@ u9[BSAcC{Ĩ`C976`C9 6B976@(@A aFD96 @!R@?ր76@@ ?րA9!R9Ra9`F9?#U76@uC9(@6 @R@?y??7>ExC9?ָ6`C9757u9 R`9?֓r@t?A!C R`"9`b ?SA[BcC{ĨxC9 R`9y?876@TFu@?ւ6@RB @u@?6@!$@ ?C R9`9a9?ր6@@ ?U R9`y?ր6@!R @@?@TFu@?ֵu R`y?ְab6@v{S[p@caD97A964@!@ ?wxb`r@U*BVVG?`n@?`z@?`j@?`@?`?SsG`??`?cCSA[B{Ĩ!!lFwxb ?A!C R`&9 ?!!E?B9?sr@v?!!Cw"9`b ?@[BSA{ĨSA{Ĩ_       #cA{CS[V5еbCc*WzBk:Z@s;{G`@??kAT1T`@kT|@*`? @b@@?? A@@B!T{ASB[CcDkEsF_A!C* ?@ G?   qT!! X`__!!A{CS @ E? &@!BBC@?` 7@!!A@"@c T{ASB_[@?qh T Xa@`A!TE ?`@5!!@G ?@@B@2@`)4R!rk@ GzLT!!B|@ ?` @@@@#cAU~@`?@`Ab:BM&b@@b)"BXEd@?@[C@  ՕB@2@)54@[C!!A ?Ң@R lr?kaTq@RҀ""Q G[?  {CS!!A["@v@u@j BBA@?*!!A~ ?`@1@Tv`@5 A@@BaT{A*SB[C_u G?  "BA{C J)D@)q$@z T C9"6A!F`@HRr ?`)?qT@qmT~b b c|@"|@F~#LT}R! !!Úc|%C{@?@qT@qT!!A@@"@cT{A_ F H"F G?`@?q T@HRr_q!ğBHR!Rr|g T?b^b~@gx__"@_qT!@HRr?q!BğAT|g_HR"RrT@b>bb~_ {SA!D8 ?@9 Bab"6`*@2`*:@ @@c8@c:_T(@`*@*`*@qmT@?q Tb>b @~~^"v@m`C`@` SA{è_|g"`|=gC`@` SA{è_@a{S[46D**R B=?ֳSA[B{è_ DA6D?*qT* B`=R?q`TsRksҀ B`@??֟@BT AZ4@@BT{BSC[DcEkFsG_A!|D ?"BC@?CcF`?BBL@ !?@? G? A{S[cCks@@L@5JBVG\D;{CZZF8cC~}Ӕ?`j9R?y?֟@CT?`?@?@ !?@??֟@BT AZ4@@BT{BSC[DcEkFsG_A!|D ?"BC@?CcF`?BBL@ !@? G?   {A!TE  ?`@5!!@G ?֠@ @{¨_ @R{¨_R_{!!G * ?@ @{¨_A!C* ? @ @{¨_{A!TE  ?`@ 4 @ @  R!!G ?R` @BS*{¨_!!@G ? @@A_{S!@5е^@s"bAR?a_a@SA{è_{S Ҕ.[ ւc*kY9A:ZDc@*@?CR ?SA[BcCkD{Ũ_ $A{ C@G AG@@BT@{I_S s@ @G C_t Dk Rur [ c X@s<МC @#R?kT7@B`@9@q` @z!T@`BR`?@!!@95*  ?@kT#@,q9KY7*@ `?@ B!R?֓@BSJ[KcLkMsN@ !RB?3@SJ GS [ c k s?u@???8PC{SB@"B0A@?ր@anA` @?<<= =SA{¨_BBF`@aB@?ր{S[ck@?qLT?qlT?`qTUR?@qlT? qן!!lFT  ?@@v@@+[{3C !`?5` @@?qT!5!!xB ?5@   Ձ ! `?5`@ A! G(@+@ ?kT ~@ @!c$B==?3?$3@zA@BBB?S! ?`B@9$3@?jT * .*D,@b B%D?ր E_8(q`B9  +@@A! G ?kT[B cCSAkD{ʨ0>E?qL T?qLT?`qT!!lFT  ?֠@`R @!!lFT  ?֠@Ru!!lFT  ?֠@R!!lFT  ?֠@R !!E D!!F ?֟@!!(B ?֠ @SA{è0>E"BA{ S *[lRrck s{ #@@_S 'Q  D6D?W @ ! /c?g@ELQ !`7s?w@0B !??@,E Ђ R!brG? ENQ ! OBMQ?@HD !`W? A?* B?* B?a@  @*?ֿk T@CT @* @@~S>H***?֚@[SkT@D?HE)**?@*?F)kIT@E *@*@*(yE* ARB@?@G? A_@@BҁT{LSM[NcOkPsQ_D?HE G?{S4bC[c???`@!!HBx ?`Ut@B|BTb @R@B|!j"5` SA[BcC{Ĩ_A!|D ?"BC@?CcF`?"BL@ !@?`C$A{"B DS[ c k s @7@?"BL@ !@ @? @` >?4F?@B XD V2C C0#cDAB?` =ETT@?5@ #cDB AR`? A7@@BA T @{GSH[IcJkKsLC_{ @RqmT d@E@u?TT@?@5@@?֠5@ @={ @9Zck T+@@qTt@Rt@@"B0C@@?5@ @"{ @bkT{ @{ @G? G?{[!@?qTSң@Rsb?kT@ca@c@sb @?kTSA[B{è_{c7D[*B? @q Tky $ Zc SRs| ;{3C3:7  @3@*sb? @kmT@*<@?ր@9ks`?`47@*?SAkDsE4[BcC{Ǩ_* [BB cC{Ǩ   |?g `T{ `S[ks3 T 9.`gex9 ~Cgx*qmTQt^T<#4!.~C~TJE˵˂B{BS|CssEszZB`C@?ւ@94c 8+A_qaT@9?PqThT?4q` TT?q@ T? q T$(A ! ? ՜ @9"5cC3@SA[BkDsE{Ǩ_y 9=??q TT?qT?qAT$(A ! ??LqT#c(A !@ `??qT$(A ! ?$(A ! ?#c(A !@ `?ֽA` "B(A! @?ֶ!!(B ?3@cCSA[BkDsE{Ǩ_#c(A B !`'`?֢#c(A* !` `?֛bCa !>r ! 6C_r%A {` B [u$FS*#@B?6@bT@9qTU7@!!A_h 8@@"@cҡT{BSC[DC_c B@Thb8q@TqT $Є G #B ? @ G?  x@m<@o?@g_@kTd@RkTa@?kT` @kן_R_ @)"@)_kBk&A) A))?k!ІkcЅ )k@Azয়_ @C@k`TR_#@RD@kaT#@D@kT @B @_k_-R@)f ÌA)qMT**cQ)*)** *hqT*))****kT%K!KkTDKBK _  @)' @) (A)kiA)젅kˠ kЉ? k!ЊRkDzKT_kT RE)I,)kT||GEh&) e@kT||GDh&) d @kT||f@Dc@Fh%_C(A{SK@7BBpD@?ahTC )aEB D@?"BL@ !@?@ G?{S  @`"@97`@9 6[`@!B ? 7DaR`@ c&@B?`@aRc"@ B ?`@!!B@v@ ?dD BcaRcˠ?[B!!(C`@ ?`7`@!!,A ?s"@9!!GsR ?!!(B ?*SA{è_`"@97`@ cDB !R`? R`"93R*SA{è_`@RcD B`? R`"9!!(C`@ ?6`@ DB@!R?֤ CBA{CS[#7N@@@"B @@?ց !?֠#cFB`?@#cdG B `?B D @?ց !@?րOtZv!tAu~~= ?@4a@u@4@@9qT@9`5 !lF ?!E@97"B @k99O@@?a ! ? 3@*?*OB*~b!G~~.~ ?$C B`'?3@!HB ?@@T3@>Ew 3kDSA[BcC{Ũ@!RcDb B `? R#9[BSAcC{Ũ>E!!|D ?BC@?#cF`?a !@ ? G?   $@8@@_`{!lFS ?|g6SA{¨>E_{[!ASRck@"@"B0Ca !@?4 @ @"B0Ca !@?4@ @3s2Ca !`?֠ 4@ @3s2Ca !`?4@"B0Ca !@?` 4@"B0Ca !@?ր4A@@B(T{B*SC[DcEkF_D 8CDCb aRB s 9.sb?@aR$??4RD b y B!cC5FCZ.9"aR?? ?`4`@qTc@aRD?? 4RD sb z B cC99FC{.Z#!aR?? ?`4`@ 5c@aRd??@sG4RGz Dy ?aRb B?C&RCc"*!!C8CD ? @?ր4R>!dBsD ?aRb B ?&R*c | c !!CcC{ 99F ?C{# z @c? ?`4@@qT@@94A@`? 5@#@CDaR?@&R*?@sG4R!dBsD ?aRb B`z ?Z#&R*| c{ !!CcCC99F ?`?@ ?`4`@ 5@@94a@`?@5`#@@cDaR?&Rc*a?`   sG4RaRb BcC?&RCc"*HUGs? @{SS|@C?m@ [7m^?" @`FR r'!lF#~]? ?"@9 7@ og."/9;.@o"@ ~lAb@!!B ?B@Bl9B@bB"R@"5.@( `TA@`d ХDF#BR?ֵ8!?4a !?@4[BSA{è*B֠@95B@!R@?[BSA{è*B{е*BS`A?T@SA{è_{S*[cC9@_q T?7B96 5`@K~ t)SA[BcC{Ũ_B97R5tSA[BcC{Ũ_cc|@bB9?64w4#G#*b B`?c@y 9qmT6R?c@k TqM T`@k TK75b B?4#@F?`@K|   GB #B?tK!| cKq5K#@|  #Gb B ?`@5c@*cKqMTc| b B#Gb B@?w@74R##@b cZB? T#K#@~ }$Da ` c!R?{[!!BS ?c`D`?@@V"B0C@?`5*BR?@*SA[B{Ĩ_"B0C .@?4*B?ֿ`@953R?@*SA[B{Ĩ_ s.B`C3R@?֠ G?$D{ca ` c@!1`2R?   {!lFS ?!C` ?SA{¨>E*1@T#R4<qTq*LTcRFb B@FRcRb B@"Gb B  C{[ASk@!lF@ # ? C9`7!@!4S@tZFc83Cs7GpD  Ֆjs6a !`?@4 @Ҕ@?c@?@`?֠74S@sBcFsH@@@"qTd@CL# $qT?k!B _@T@@p@(qTR@ !"`?`7@4S@   Հ{@ @   a{|?4'!T*@?qR!t@? qR!@kЁ ȵA@@BAT{CSD[EkG@C>EGcs?   {S[@!lF" ?ք@q-Tf@|@c T@ATTdBcF! B}*B`?ց@`J@!Q4QcH)e@ `Bb)?`J@5!G`" ??ց" &SA[B{è>E$Dca ` c!#R?$Dca ` c!℀R?{!lFS ?`E9@7!E E@@6R#Rj @#@ xE!.$" ARB?@!(B ?`@A@@BҁT{BSC[DC_b ARB@?ֹG?{?S@@TSA{¨_ !lF ?`@C9@7A@xEARb B?`@SA {¨>EE@{S@!lF@" ?ց@?q!E֠@ @? qT@B9 6E?֠7R@R~@ `"@ q T`@B96E? 7OR"C G/?/@@E@@B"Ҁ?֡@A!|D ?ָ`@t@VOTF?xE !.%*b ARB?֣O G?ֺ@"Ҁ?c{Sa B D@?BL@a ! @? @BA!%@?ց@Ra`@9q TqT@BA !!? `@BA !!?`a@` a!@9a4@95 (` @SA{è_@B`C@?@еbC?ց @`?` @SA{è_B`C@?B`C@?`$Dca c@!"OR?G?   C{ C[SA@@gaB D0@?BL@a !@?cD0vAR`?u `#?4?w4!F ?֠4OC B.=cAAg@@Bҁ T@{MSN[OC_BCAR@?BG`"@?*!C ?v4bBCAR@?BG`@?**!C ?5!F ?֠5B$C2!R@?`5 R2BA@?!E ?֪$Dca ` c!bSR?G?G?{S@@5!lF" ?֕9@SA{è>E   @@@_  {!RS[@@c`C96`C97`B9 7 C`n@@`r@@`@@5`v@!B ?`@*B֢G?`@?!C`!@ ?`"?`?!TG` ??֟SA[B{è_`B96E@b cxEB@AR`?A@$Dca ` c! oR?  {[*!lFSc  ?qM T`B@kJTaH)! k TBC#~@@?B @@?BL@a !@? dJ@Ra@q9+BTQ[51 TdJ@bF@ C b bkT ?֔Qb*@a@Bb*1!T ?)#@xaTvB>ESA[BcC{ŨBC~@t@@?cF`?BL@a !@?`$D#ca @ c!2~R?G?  A{CS[**ck@!lF@@ҙ" ?&q Tsq T@ZO@Ҁ?a !@?{C~@`??a !@?@O:wbvr~a!tA~~tuB ?ր4f@!HBҀ ?֕f@@"T@" C"!E@_  {!lFS  ?`bA97`J@4a*@aB @@?BL@a ! @?@b*@a cB! `?`a !`  * bH)Qe@a d!a)!EA# ?a@BC7a@Bc 7SA[BcCkD{Ǩ_@@@B@A ! /@?@ ?Xs@X s_s9C | ?xE3(B7c ARd@ e @#{c3@@@c@9?7@ ?/sEBR Rc6WЄC!R@A9B @Ҁ? 4_9?@w@!B ?@@_wB@A ! /@?Sw?@b C@B [B!RcCSAkD{Ǩ SAkD[BcC{Ǩ?@b C@B !R|{[GSB    Ձzsa? 4s&!TSA[B{è_*SA[B{è_      @"@@@7C@@?kTԟ_@A@kԟ_Є$D{a ` c"! ` R?   { B DS@?BL@a ! @?!F ?cA`?@RacBbNSA{¨_B`C@?G?{S[c#AcD`?BL@a !@?cD`?BL@a !@?`@!HBy2 ?v@?@Tc2@ac|{j##@ a2SA[BcC{Ũ_!|D ?BC@?cF`?BL@a !`@?`_qT{RSTbAf¨T@SA{è__{S[c @  @@A TV@u @~@~@# T`@!HB ?w@@TcFb }B B}`?d@~ ` @a@` h5! ac @ `7kcЀ|@kTxbBkT[BcCSA{ĨnG!|D ?BC@?cF`?BL@a !@?`v @*Є$Dc"a ` c`! R?Є$Dc"a ` c`!  R?Є$Dc"a ` c`! R?H@BQHB7_@*B{ {S  @A T @ @ @@T|@B|@_ T@B}B !B}cF`?b @ @B| !Q ?kMT@@|@  bx`@?kTBD` @?aA9`J@!2a9Q`J7SA{¨_`@SA{¨*B1ҤTkjT@!Xc#R b9Є$Dc"a ` c!  R?Є$Dc"a ` c!  R?a{S@q$T|@B!3|}ӵ}ӵB  Ձ@!hss"фAT@ @`@2y!(Bj9 ?֟SA{è_$Dc"A @ c! R?{S@qT|@B!3|}ӵ}ӵB   Ձ@ @!hs?@TRs"T@xSA{è_ ?T{S[c# @ T A@?!TT@u @~@~@T`@!HB ?w@@Tb 9F}B B} ? @`@kb @ƕBb ~@h8A|@? Td}!"ˁ B} ?b @BQb k+TQc@ | u7_kBЕkJT|@   ax` _kT#@SA[BcC{Ũ_֡Q!|D ?BC@?cF`?BL@A !@?`t @*_$Dc"A @ c@! R?$Dc"A @ c@! R?$Dc"A @ c@! R?$Dc"A @ c@! R?   { s @{¨{[@qmTbCSҠ@Xss?֢ @_kTSA@[B{Ĩ_{S@q-T[~@@@xa@!?TqTC   ՔK?֢@bc~}Ӵ @Q `Ehcy!s!}DhaEh!Dh#kTqMT~@  Ax` T[BSA{è_@A5_{!|@E c#@?b @_qmTc@B|@  ax` T @{¨_@4@@__ @4@A!ha__{ xrT@@@@T?1Ta`@96{_Cd@9c6?1 TAh@9!7A@?qT@@@Ch@9?qaRjT{_@!1Tb@?kT`@{Xa_@!qTA@!qT@@Xa$Dc"A @ c! R?$Dc"A @ c! R? xrT@@`B@!+T@?kT@Xa__$D{c"A @ c! R?{[!BS ? a@B`C@?!E ?!F ?B$Da !@?!F ?(TcB`?`5@!(B ?SA[B{Ĩ_a@` @qDT"@kT!@ X`2C@@Xa@@?@5b@a @!q$T@@?kT@G?   {S*#[z2C  `@ @!@!?55c@cb @+T`@_kT`@Xb7[B@SA{Ĩ_ @@[BSA{Ĩ!@d$Dc"A @ c! R?B_{#XD[s B`3?4 @qmTScGkFZG9+B @skT@Xs@{??@7@{?@?@s ?֛ @klTSAcCkD[BsE{ƨ_@qT@L#@ALT_   {S[cksTZ@*z4@@@~@a ?# TV@`@7!HB ?y@@"Tb cFB! B}ӷ}`?b @B b _q T9oG}*ҁ@d@!huc@3;cc{#h5" ?Tb @ !| ?k Tc@!|@`xa!_kTk@9g@9 af9`j9X @SA[BcCkDsE{ƨ_!|D ?BC@?cF`?BL@A !`@?`$Dc"A @ c@! )R?$Dc"A @ c@! )R?{@@a`@9!@cc a1T?kT{f7{*b$Dc"A @ c! -R?$Dc"A @ c! -R?   @F"@_aT @__@_   7C@kmT@@Xa_CcdG{S[ c k a@cBA{D@@7B B`?RB B`?3OD RDW? `@ B D@?BL@A !@?` b@ @qT9cCҠ@Xss ?֢ @_kTb@f@B0CA !@@?4!LF ?B СRB`? @4!(B ?A7@@BҡTc@{GSH[IcJkKC_B ARB `?!LF ?B !RB `?B ARB``?!(B ?G?G?  {S@  @qTc2Ck+B[ZCs9A  v~}Ӏ@hvb@"B@9_qT` @?*4 @skT[BcCkDsESA{ƨ_֕@@? ?ւ@@hvA?*T?֕5@hv [BcCkDsESA{ƨ_   {@qMT[*BS @4Xv:@?qMTҁ@ Xss?ց:@?kLT@:kTSA[B@{Ĩ_@qT@|>g/RC`L&@a@@%@q |T#|`T a8@?kTa@9q!R_j!T !T|?g#@Tm@>Tx@9"Rt96_#|a8@ ?kT*e@B}|}g#}`T#~! _Tha#}@T#}T! ?Tha@#}@TC`C`@B DBAR C{ sA;@@O?q-TC|gS cD{?E[ c Dk*B9AZC? @`?֠ 7@@?ր@hv?ր;@kmT@~}Ӏ@~Bmhv;~@t@XA`BhC~vAmAwZ#o++B}#o~#o@yb|#o{j|# ?ւA @B@$@!@?qT ? `@!R@B B `?ր@hv?ր;@kLT   SK[LcMkN@A;O@@BҁT{JsOC_ր@B @B!R`?֞GS [ c k?{Sp@96@q T[ A   Հ @Xua@!t@96a:@A4P`b?ր@kLT[B@!B ?ր7@@!(C ?֠7@!,A ?SA{è*Bր@B cDB !R`?@B cDB!R`?ƼA{[B D7N@S*c@@?A !?,@cdGB B`?`&4G?`@cpE`? `@@%Х@|g#aT~@96`@9`6@96`:@9qlT!E ?@`@!HBw: ?v@@T`:@v@9 b:a7`@t@96`:@@`4[BSA{Ĩ0a @B Р@B&SA[B{Ĩ#@!RD@SA[B{Ĩ_֠@B cDB$AR`? R~9`@96v@9!Ra97`@t@96`:@5!|D ?BC@?cF`?BL@A !`'@?`       A{[BXBK@`S@/R@?@O#,D" B! ||=?zF !/?A`B\F !@?A !'?A/@@BTK@{FSG[H_G? {!lF @@ ?a A`@a" b @A{¨X>E@ @${¨X>E@@!@@!@2C  @G@$D{A @ c%!(`(" R?{B D[ N@S@?A !(? CB`'?B0C@?֠5b@! B!!?`@w*!HB ?u@@Ta*@b@#@!c*_XSA[B{Ĩ_!|D ?BC@?cF`?A !)?`$Dc%A @ c@!(@)bR?G?!A{CS@#@"B D @?BL@A !*@?`BA! @?!tA ?4At@@BҡT@{ASB_BCAR@?BG`B@?**!C ?U4$Dc%! c!1`2R?$Dc%A @ c!(@* R?G?G?BA{S[cks?m@@@w;0!lF`C ?!R`#s[@S4@Rc @`?TF?a3@$a[@s3?qTb+@%g@ A(BZBszF^F/D&qTqT@@x ?@R@?@ !/`?A` !?A !'`?@ ?a[@9?kTb+@VXy*@ qTTqTqT @.@@? 4*@@@%?gbOcA` B B+<?@R?@ !/`?A` !?A !'`?a[@9*?kTAw@@BҡT{OSP[QcRkSsT@?Um>E"@#OW + a^|n|=A`?A`@B B+@cO a^<nA`?A`B B,a[@@R@?@ !/`?A` !?a[@t@R@?@ !/`?A` !?a[@c/*{v#@еJBZD9CFN@*@qTt+@ @`[@*@EX| s[?k-Ts~@?t+@@#T@? ??A !+?`+BE7@@?`5C@As7@34`+@a~@Ec ?%gObR@BXBzF@?B B+!/?A`B\F !@?A`Occ,D B B+<`?A !'?a[@g!LT?q Tb+@FL!@`(@(q@T( Ts3s3$Dc%A @ c`!( R?G? {S4@TB D@?BL@A !@,@? B`CB@?`BA!@?!lF ?ր&@`~ `@!E& {[c@ !@97[BcC{Ũ_!lF#@`S@ ?*@qmT@3CvN6Tt@s"? 5@AR*@#@SA[BcC{Ũ>E B B,{[A@@R@D@?@ !@97A@@B! T{B[D_!lFS@c ?*@qT@3CwN7s"Tt@? 5B?B@@?ր4Ҁ*TF?ր&!A@"@ҁT@SC@cE{B[D>EB?B@@?5BE#@@?5@@BsScG?   B B-{[A@@R@ЄD@?@ !@97A@@B T{B[D_!lFS@c ?*@q-T@3CwN7s" Tt@? 5&@A@@BT@SC@cE{B[D>E#&@@R*TF?ւ&@@!B?B@@?4҂*@"@ ~BE#@@?ր5@@BsScG?{[c@ !@97[BcC{Ĩ_!lFS@ ?*@qT@3CvN6Tt@s"? 5@n@aR+~*>E@SA[BcC{Ĩ{S[c!lF@@ ?+@qT@2CvN6Tt@s"? 5R*B?@.>E @SA[BcC{Ĩ{S[c!lF@@ ?+@qT@2CvN6Tt@s"? 5B*?@.>E @SA[BcC{Ĩc      {S[cks@?qTJFF@?kT@t~}ht{?s?5@!(Bht ?֓@y cB`?`j4SA[BcCkDsE{ƨ_ДC!@!|@FҀ?sN@?A ! -`?@҂!@!|@??A !-`?֔@}ӵcB`?֓j4@s}ӹcB`?ց@j3 SA[BcCkDsE{ƨ_B`C !.@?֓j4@s}ӹB`C !.@?B`C !.@?`j4 {S[!F ?!F ?SA[B{èL   {S@qM T[cKFk9FsZF{+B`@"kT`@hu ??5`@hu`?`@hu`?b_#T`@BB˼"B}@?b_Ta@BB˔ !B}@?`@Q`klT[BcCkDsESA{ƨ_Є$DA @ c(!-@.R?Є$DA @ c(!-.R? {S!F ?SA{¨{[@q TSck9KFZF@kT@v~}hvt@?s ?5@SAhvcCkD[B{Ũ_SAcCkD[B{Ũ_{S!F ?SA{¨E|{[!ESc|еC ?t@F?N@?A !/?bx@??A !`/?@`a?qTbC@~}x@!ht?@k4x@!ht?@k4?k TSA[BcC{Ĩ_{B DS@?BL@A !/@?SA{¨_G?cA{sB D[a@@?BL@A ! 0@?A@@B! T@{X[Zs]_St@ `# !DF .cFkZ_E @@ t?wT_8qT)@qT@ 0@}hs@?5@)g#B?q@(BR?֡@;hs??@@k T @@ SYc[k\Q RSYGSck?GSck?{c @qMT[ֆFS#@c~}8hchcx?y?ts@kLTSA[B#@cC{Ũ_ {S[ .Fck9A+zn@z?{?HCR ?@+@SA[BcCkD{ƨ_ { !@ @{¨B    BA{*C@ `4qTB@*@?Ҡ4! F ?A@@cT@{B_F? E?G?XA?G?CnA{CS*[C@'B7!#D?@" B0B? *B3?֟"q@T@ b 0BB?B`C@?`!A'@"@TC@{ESF[GC_D# B,?G?  BA{CS@C@'a2@d`a@?qTA'@@BT{ESF_a2@R?k`TcA4`2@q Ta1`8@|Q? qT!A'@"@aT qRpSןRI`B@TqT`@@yA4a @BLF@?aA9@9?k!T{@`A9B<Aa9B<t@F*@>.f@Ra3r_k T>F>.f@(q Ta2@R?kTa@`B@!XaXQ`B qTAqRc'@@BT"R*R{ESF&b<A R! ?=?nnfc|A ` x``!xC ?`2!`qTb@`@a2`G?{" SR [s@1G`A?`5 4^@@SA[B{Ĩ__BA{S[@@ҡ+E#s*?7Chs8k TB_aT+@A@@B!T{BSC[D_@@9B!@G+?BA{S4@C@Ҹ``@@9qT`@#t@CR?a@ @?@T7@b!A@"@cAT{BSC_!?)TG??T@y}Rk@T_@9_qT ! _   {CR[Rc@G?BE@?q;Bk9FZZ#SVR+S@ ??`7V @ZC1ATSAkD+@*[BcC{ƨ_?6B T*+@SAkD[BcC{ƨ_6+T*듒ˠ,ATs~@{SR1Tq` @z@*SA{è_R*SA{è_ BA{ Cc #DC@GN@?! !`5?S @+?! !5?@*Bb XC![ k sX q T T1 TqATC@@9_qT@`[KkMsNAG@@Bҁ#T{ISJcL_q TQ?qHT@!!:`!F ?sC! !6Cs"cpD`?A7@G?`@!HBt ?y@|A Tb @RBb ~|@ B$c@4>k<=?! !6?!R{@#@'*Daa@9q TCCREt@?/@_T b+@!R '@*#@@9_q T!Rw/t_q T5{@l!(B ?[KkMsNhCCREt@?/@b+@b`@9 q!T R{B !|D ?BC@?cF`?! ! 6?`~ct@"`? @6sEb{@.a @E!CctB`?* 7CRE?@cB`?@{@  @"5!R  /!R @*{*[7 =gb }bF+o }+~B`C !.@?~ b@9~~ XG[ k s{?[ k sG{?  {S[@@t @qmT` QRs2Ca@T?@zT?@5sT@RSA[B{Ĩ_@SA[B{Ĩ_R   cA{Sd@/@cD`?֠cB!R cTA/@@c!T{F*SG_`@" cDB9`?RO#t@||  R?@" cDB>!R`?$D! c*!@> R?$DS;! c*!@>@R?֠GS;?$DS;! c*!@>?R?$DS;! c*!@>@"R?$DS;! c*!@>?R?$DSk! ;c*!@>>R?{S[Ab@@_`TcER`@`?T`# 6!E @ ? B 6:@A)"(@4R+.G@7:@*@?@@6@kIT7+@!(B ?A@@BAT{BSC[D_`@" cDB!R`?t+@G+?    |~gC`C`  @9 jaT@#}AT@@9C6 @`#}tןT$@p#dG}T#}p#|ן#}T#{C`O{#}T#~C`WC`4@r^~ A<B^_*C`rC`{#}ATC`*~gC`@@0@|?gq TA!R@_qdBzT`Qk-T!|@xa_@#`T!kLT`_ Q`_րXbB @#`A   BA{C@D@L@b@_$@8HH@CbBG|ig@T dT@')|g @9 6d@#yT 4#`DTGA@@BT{A_4@G`T JTG@GG? @>@ R#~TT!@B@_kԟ_   @ @_@@R#~T#~ RPZ_bB@;@`@ R"_R_   @@C,@T#,@`T#(@T4@?9#g<@D@<@@%L@BB˂#C*B"@@$H@BB@_T"D@#BB" *B? '@?(?,$D{! c+!UR?{|?gS[@0@# TqmTc@|@Rbx`**_@#TT*kTq-TF*BR  `@@?`@b2 BB}?`2@Q`2kAT@SA[B{Ĩ_ֵQ  բ@! R@y_==q-T@C`C`&RM'  "@C@d@96c@96CA9^0@C 6`#T#Tp#~LTC`DA9]4@ 6@# T# TqC`@zB@9#~T@9! T@9e 7 @ 7*@R|^g yab@D@96B@9b78@#~T`#~}F+}`T#~T#{W_q{   !kTP#{Td#~!T,@#aT#~DA9]4@D7 @#TC`q @z99q@z#`TP#},T#T#~~# T#}|q@z!T?==1 6*C`|m({S7[`D9 6jA?qT6 |ւD?m@`gs?kT@Xs @ o T@*@9@9R@?֟ @#niT@96@#nT@97jAs?kT[B@?DmSA{Ũ_֠@R" B@?@[BSA?Dm{Ũ_[BC{CScA@`@i(7g@q Th^@|}id,@@9f6@4 T@A@@BT{ASBC_?m@ @ *A`hd x@|g!T@?Dm`@A`A`" УcDBR`?ր@@x?DmG?m?  {|_g S[!@9!R*7`N@tF@@``cJ@cєaB@cc`N`|#/h u@SA[B{Ĩ_cJ@dB@!n!!|ӟha8#~TT#T$Dc+! c`! ˀR?`@DR@" @B @?֢BCwB@@?cF`?BL@! ! @?hHbB`N@?IT&||FAD$T@@(ȺtFҟ"T$Dc+! c`! ɀR?֤$Dc+! c`!`ȀR?  {|"RS[0A@HA9b99o`JaRrT`@@#oᷟb@a9_qMTa^@"L" @,@@_aT`@!@ ?֡! = =+<+< `?BL@! !`@?G?" CBc1T@ c@`?BL@! !`@?֠c@@ `?BL@! !`@?! S!1TG?{ST@[!F|@ ?F@$Rf@?@T[BSA{è_`SA[B{ènG  {S[@@@b@@<@BH*BAaN?B @.@s6@?`T?S|gO RNRyoy:=SA[B{è_֤Є$Dc+! c`![R?{Sk3@@k THB7|D?CCFt~}9@[N@c8 sGa @"!x`b AT@@s"kTB_@BhtU,@ ?C?Ol$=w `@7@ ?e@@cT?@; ?C@@?;@G@`?! !?`[BcCsESAkD{ɨ_֤Є$Dc+! c!@uR?G?|g{* S?m@``T@8`D9@6V`@qTd^@L @ ,@@f5@9 7T`D9@ 7[`@?q@ T?q@T A 5еDR" B?`@@!@a@9e@!7'Rq-Tf^@$R*|gL%`@c ,@ @9`6 @qT!~?@o#~o#} @_qAP@y@zTq|gn TB5c7R5`@cC" [BB`SAR?Dm{Ũ`D9 7[@`@?qT `D9`7@!4[`@?qT?qT >ncC9`@A`R" B?o!RRa9`2[BSA?Dm{Ũ_#nT@9Py `@`@k-Tf^@Xv,@@P@y9.9@96>@B@?Te@'Rq,T[BSA?Dm{Ũ_@9q,Tq|gaT$ `  {S@q-T`@Xt}` @kLT`2@qTҵ*B  `@Xt?`2@kLT@2SA{è   {|cS[k//g@++B{FjA qM T@L5@h`? T Q7~@ҵ~}  <{Am@;;|#Bѵ"1`T@hu @#o`TbD97j?T@!"ˡ"B}`?jA @Qj?qMT Հ@Xss?ր @kLT@?ֵ"1TjA?Jz T~@jAQ6+@/@SA[BcCkD{ƨ_Є$Dc+! c!aR?֤Є$Dc+! c!@`R?֤Є$Dc+! c!`R?ѡ!A{CS[c+/ @|g@q T^@%L% @,@,@@`<@@BB! ?T@@C)T@ c(@c`@9@@ T@@ @q- T@|>gL "@C@cS@d.@T_0@bD9#oRB*6`x` @@9R9RbD97*Z @a.@?T@96?q @z!T*L @` ՘7@ T @#oT@qTҩb@9B6~W_qe~  ! !TA@@BҁT+@/@{ASB[CcD_ց.@@974@.ҟ2@#o@T:@#o2@T`@ @$@#o+}~2 5~$Dc+! c! B(R?֠G?{S[@ThA@qMTs~@B _`T@AT_(TCsb! cFB}`?֓jA@sQjs~@!HB ?֗@@ TjA@* jv?qT@Xwb @b @bB@9b6@*?k,T?qmT^@!|@Ҡxc,@@@96@@9`7@@9 6c?T@|} բha`ha! B,@_x@?!TG R"9@SA[B{Ĩ_ր@" DB@R?@qT^@!|D ?BC@?cF`?֢BL@! !@?$Dc+! c@!ER?֤$Dc+! c!bR?{S`D9`7`@`B @[ҶN@@?! !?wj`@O>=!HB =z ?u@@BTbjAC"cju@[BSA{Ĩ%SA{Ĩ!|D ?BC@?cF`?! !?`G?{ @ a@ ?`@9 @{¨F@T@X@ ?9`@ @{¨F  {S[@?xqm T\@RR)RL' @,@D@C@9@9@9c6(@ _9q! `@z?!TH4@ ,@@?qAT9TF 4`@y~?="RD99&.b9`>`J9a9<~*6BNA6a@9B |gjAa9VbZ^yq TjAkT@`@96Xt7@axajAklT3`A96[BSA{èuI97@@qBz"9SA[B{è_{S[c ,@ `@B @ҷN@@?! ! ?O.@! R@ @Zx@6=A@@6`^@!HBx€ ?t^@@B T`@ zabAT`@ ajA?qmTa@!Xts`jAk,T`@.@@"xb 5@4qT@(@ aV@`@2`a `Z@[BcCSA{Ĩ`@(@t@6 @!TA@ ? @R4@T2C! !?`4! !?4! !? 5@R`@(@p@| @(@ `j@vj!|D ?BC@?cF`?! !?`^a !.|.@SA[BcC{Ĩ_֤$Dc+! c! |R?֤$Dc+! c!yR?G?{S[c#|@ @q T  !_@3Xxbb?t@4 @kT@_qMT>@{@_k,Tf@#@SA[BcC{Ũ_ր@qT҂@BL3?ց@s?k T@qMT҂@BL3?ր@sk T#@SA[BcC{Ũ_ր@qMT   Ղ@BL3?ց@s?k T@{S=>< 7_qT@#O~~zC 7q`f9`b9bb@9@T7z=?<2yu@6@ ! B0C@?ր4`@`@ARcD" B`?`@!B?T$Dc+ c !#ºR?7*R#?m R`ByL@ LT#@}W@|g#@T~VR@96?kT!4@G$Dc+ c !@"BR?@ R @`9AbJ99i)N@@B T{A[CSB#@?EmRF`@9` a.@?T@#o T!ןq~!R=n9A~<&}*g.ya9~6b>~Ba"9V9@@B T{ASB[C?EmF#?mfA@@cAT@ {AB![Cc@SB$@RD@ R!(@?D@9nV9?EmA`R#?mG?} ?qTT$R$D#c+ c ! !bR?m?R$Dc+ c ! R?m?րG#?֧   @9a6{S@aD9A6@96C9A6B97@9$a7@9a6,@   դ4?@\@#~@T@9" @6X@T?@!4@,<@SA{è__@9a7@96B96SA{è!R99W@`@ DB#!R?`D96`@!R B ?9!RSA{è3$Dc+ c!#ĀR?{SAa@@ `D9@6[u@A99J`T@96*@gc; mSAm|g!oT|g!@T6@#nW4@|g= @#~ෟ4S@*6;Im  `@9`7[EA@@B4T{CSD_;ImS@*7[E@[u@@4jA_q4T@!L"ha5T_qTBQ` @ "L"=g@>@ ~T ATc RkB%s@DAma@?֣@qTZkmT^@@}b@*!h`Bh`7,@@9a7@9!*6Y @9@6h` @5@96 @"@_T_T @!*@` T@96=@<@#| T@9`6 @"@ T#| TA`.2@#oT`@!o$@+m2T6@#onWDTS@*;Imt@9@6@ *B`(AR?   A@@Bҡ!TcFkG[EsH{CSD#|LT@;~#`}Wq4}z" @ @_!T;@:@`#zT1@@* RB&?S@6;Im*D?@>@#~ T@* ARB'?q-T(B^@~}`@Bha@V,@ha@{ha?Tc @! @!@#4a@!a@9"@97@d@9B !@9f@! e+@dA9?7="9¢@9!9&k?=%+$9b6.@߂9b4@!@e<@D4@F<@a<!!E<@DD4@F<@a<!!E<@!c@A<!!!aO@c HaK@B!d"|Ӂ@`hbraO@CT`@@`HC@aA@O ?@9@C9kT2@qMTFL@y@JB{DZCa2@ @`2@"Xw" a22@k T<|@?y@@#T`?@?@`?@ !`)@?`2@n@"R8;xR9 С2B )R?֠@qT^@Xss,@@k,T# R.j@* ARB`&?[cksG; mS?ք$Dc+ c!(ڀR; mS?ք$Dckc+ s c!$̀R; mS?ք$Dckc+ s c!%΀R; mS? |҄A{; mng@ n`TS*[ C cX!)kc.D9 @SD@`_@ cB *RDӠ?A`*G`99*y9z"9s:`@qm T@ @Z, s `C,@#nAT@?qT?qT4 *"+>R?`@@mR?`@kTb^@}@A`Bha*ha*[,@%`9`@t/a@T?q@T?q T!4 *>"+R?`@R@?`@kTsHa@T@nc@!RRa9;~`2q-T`^@L#@!,@"@9"9aT`@ СRB,?`@ 7`@@9`69*9y9Zz"9w2`@!Ra9o|.gqT  a^@`D9!Xt5,@6V@#nATVA9`6K`@kT`B9`7`D9 7SD R[EcFkGS@!A@"@cҁT{C;Im_*"+ R?k*"+ СR?d*"+ R?]`@ B*R?SD[EcFkGS@R*"+ R?p*"+ СR?i*"+ R?b77`@ ARB+;GS[cksS?{S@96[u@"F97`@(@bA9!Ra96[BD9`7C9` 6`C9D9`6`7cB9c6!6[BRSA{Ĩ_a9!E ?a@!@0[B Ra.@R6b@96dC9b@65"@9B74 RBy`9`B9`7a.@b@?@|Sc9 T6a@9a7a@"D97"C9B7}6@|_g#T>@#~J T R`9[B!F R9 ?@9" @#4@?@c.b>B@D96@9`7`@7@929`C97@9!R29a9~@m|g#~T#~T@@`&@#@@`&@_+ T"|g|g#~` T@+~@9 6"@|g#`T@+&@|g"#~`T@+~&jA@ @@h`?Tmn`@9b7!Ra9a@9A6[BKYC`@9|7~&@f@@#@@`&_KT"|g@#~ `T@+~{"@|g/`#~;{xzW@4~|"~*o |ga@?qT`@!Qa7Q`~5!R*a9l~&@p#zJTa~|"{~*o$Dc+ c`!`"BJR?ּC`$Dc+ c`!-bRR?ք$Dc+ c`!@-LR?ք$Dc+ c!R?   {S[0,@40@/`@ @!B@ ?7a2@@?k2T`6@0@|~@g+#x`@9To@@7|g!AT@96D97@(@`+@[BSA{ƨ*Bր7C`C`C`&@|g#}o#|!&@oc`@@@@@T@96@97@9!6@+@?ן9cCkvG9@79D@ "Aq Tr@@!(@!@97b@*@@9_ן ~@|?g9#T"@@9#ן .@@9@99  "99!!C ?֡@"Aa>!Cs4 @bC9`799@`@m4|g aT @`a|g!T&@#oTd)~#~ T@|g#aT&@.@  < .b@@<@g@ˠ@?qT?q T?q c!>ce@ d@B@0R ?jA@ @@h`?T@qT`@9@6|g&@!~o#~o#}@#oT.@A9 6+@cCkDSA[B{ƨ"@+@#W9cC'@ 9D^@AaBtF@? BE@?Mc@97@`3b@9"7@+@cCkDSA[B{ƨ_&@|Cm9~#oDT@ 2N`A9`6`@96.9J c cB<@@?!,A ?z`@92`9 i@9ЄD @B@/AR?+@cC@!R B ?֠@!cD@91B@9@*_@! ARB@4?a@`D9`6`@!R B4?a@d9 c c;@?@Gck;??քЄ$Dc+ c!5R?a@!{S|@!lF@`t ?o@SA{è>E { B @[*N@S@? !6?֠"D9? !@7?`? !7?`O/@u~B~t ~6a=SA[B{Ĩ_֠G?{S|@@?T!lF ?@SA{è>EքЄ$Dc+ c@!@8R?{S*|@!lF ?7@kT^@3Xs!E{S|@a@?AT!lFt ?֡!F R`9` ?SA{¨>Eք$Dc+ c !@9™R? qTqTq !>_ _` _{S[,@!lF@ ?֠.@h@}@|g R`9#`T@;@|g}#~`T@;~@`2(@SA[B{Ĩ>E@RN@.@@ B95R`@9thR.@`9{S[,@?@!lF@` ?A`*B97q"F9B*b6!E֠@ cDB@;AR`?$Dc+ c!;|R?ք$Dc+ c!@8|R?{S|@t@aT!lFu ?ցf@|g@SA{è>Eք$Dc+ c` !<R?   {S[c|@`@#!T@`v!lF ?`B96a@|g`@! T`@A` T~@"9@T@qT^@|@RRb(@_!?`Txab@4_q!T*!?TqAzThj@?@T`@@96b@a@2o*b@?qT?k T^@Xt@q!T @X@@r@BlG @@?@[?kLTb@`6@#@SA[BcC{Ũ>E@9@f@BF@?ַ~@a"G97b@a@o*brT~@z!@f@r@U@$Dc+ c !<R?ք$Dc+ c !Eք$Dc+ c !@9R?{S@t@!R?{ |@b@_!T @{¨_ք$Dc+ c@ !@9bR?  ՠ{!D @ ? @{¨_  с!A{CS [>ck s @'ҠB D??qTlFt{J ?` @a BdA!{F@?ր@еVF@ҚZECV&Xs `B9@77|?y@?#lT3@y@?#I?BAsc|ۛ@cK` ccTc@`?`B96`B9>E7` @a ЂBD!@??րA'@@BT{ESF[GcHkIsJ_ @@?ֵ?@ ?9aV@A`Z@ ?cD@`??z`G?{S*|@a@?AT@`ua!lF ?A`6*"Rs!F ?ց!E9?`@@!@A ??#@cC[BSA{Ũց!F` ?֔>E#@[BcCSA{Ũւ.@A`@)`B96   {S[6,@|@a!lF@` ?@9 7@[BSA{Ĩ>EfA`b.@a@@[BSA{Ĩ>E{ R,@a!lF@ ?a.@ @3@9!Eta9@SA{è`@{S[ck@D@+@TZO@|{wbC?`F@j4?`F@ccDa`? !?@?`@a v+@aSA[BcCkD{ƨ_ւBCҡ|@@?cFZO@`? !`?@?e@`F{S[c@B D'@`#O@@? !`?րccB !7`?y`>@a!HB ?u>@?@T`@|{j#4X#@/'@bSA[BcC{Ũ_ց!|D ?BC@?cF`? !?`>G?{ C[ASck@gҠ@!B ?F7Z@s"қ{O@@? !`?PcDbB `? @bB`C'@@?"@A9@@9@xcdG)#?#`?֥@D"R?#@RF)bb#@~?@|RA@x @y @` di9hygFf"9wve @? !``?GcG`~ar@ B`?#y@9RFA9@3 3#y"@? !`?D.@AR7@`?@b@ #@y|ҚN?g$ Ra!tA2y7@Dxr9 ?ց )4!F ? ,4@"ccA`?ւB D@? !``?ց@=#@ d@q7TH5Tq `D RB ?@BXC@?b@@B @@x@?,7@$@@xc2 @ BR?֚@@@9(6E@e 5D@ @g@9h@BTF@?@@@@0Ta!F ?B`D@?a!G ?`07` @@qTa!F .d@@9 @|{B?@@B@@@@@? @` @kKT!(B ?  ՀA96|~@a!lF ?ւ@@_qT  Հ_@Xy`@`5`+@9_k T!@!|@dEc8?F@ q!T X Rc9S @ RB?m J@@?@{ @aR#g@ s@B ?BG @ @s@B AR`?֙`Gs?d$Dcc+ c@ !#dR?րG?CdA{@7AS!B[ c  ?BF@?֖.@k s @BcdG`?B@.@EAD CB@9@#J@bB`C9@9?@?'3`@9` 5`+9 sR`D_ 9XB  q TTS4qAT c`@R?@;@ @qDBT*snG*B`?'@?Ҁ?@@@|@`?@@@@SH[IcJkKsL3G@1T'@s*B`?`?ր.@!R9` @`?SH[IcJkKsL`A7@@cҁT{GC_B@ (7q`+ T9c C;Z[B#{3C@Z @@`?`53@1T c cq T c@TAV@?&@"@cctC`?@[CBCR?֠k s 5:@`+9 sRP`+9 sRIs9 !A ?֒!A ?`?@!(B ?SH[IcJdD!R B ?'@s*B`?`?pd$Dk cs c+ c !R?`GS[ c k s ?@ d$D+! c@ #dR?@ d$D+! c` @ ⵁR? {S3[|@@?Ta!lF ?֓"9@qT5R^@Xss,@9`@k T!F ?SA[B{èp>Ed$Dcc+ c !@9R?bBA{ S s|@C@Oҁ@?$Ta!lF7m @`?m.@` ?|g!`T@9|g!T@a!EB@B}~jb#`eTj"+~j"dЄ$Dcc+ c@!@91R?  {S[ck?m|@@+? Ta!lF ?֖C9r@@a!4E ?ccD*Ҏ@R@@AJA`?cc`e@=|J,@v9h$@<|ah& h"w6=gx>nB{zJoNyR jd&bd2q T^@R R'L'    @*,@@9,@6 @# @# `C97@_@` @z<%@#}f9ii |>@釟#}4;cp#c{~@#}z|m|#}|#~~@B<@@! Td:~RC`@#~T#~}$T#` BzT@@ !? qT@`@#~T@97D9@ 7& 7 R` 9|g@mRa9#@ T@#+|+|~~#}m`T;}~D9RjATjACRkЃqT@|=gx`?@#}T> @@b@#}&@9+|+|g"%@9Bb~~x mb@9a@9B*b9!*a9kT+@SA[BcCkD?Fm{Ǩp>E7@m|gB9#! !a9T# T@+~  |:g~#zaTC`~g@97@9cR*f*N RR RrdЄ$Dcc+ c!@93R?~N@pB{bBCS[c7|@@?B @@?ւBL@ !` @?րqmT @{@ңj<=j<_=js?j3sTSA[BcC{Ĩ_րG?       {S[a!HB8@ ?u@@"T`:@ a:SA[B{è_ց!|D ?bBC@?cF`?ւBL@ !@?``:@ a:SA[B{è_{SC`Ab"A9@b6u@ 5bB D@?ւBL@ !@?cLE R`9HRtjr`? an@#bB$F'ccF`?ar@J@fƼBR?a!@ ?6oGa!(B ?bB`D@??ր@ !B ?ց@`f@!@bBF@?ARA#A'Aa!AA"@cTCSA{Ũ_փcF#@R`?|@?qTB@@?֠7AA`r@+dЄD/aR B?`r@eF$RoG?@T?+A/A`r@ ccDB!R`?AA#A'A`G#'+/?րG#'+/?bBA{S[ @@7a!F ?E B`?6Ra!A7@"@c! T{GSH[I_c Ҡ@@a!F ?dHF?4O@ @@xDW3? RcJcJ B?`7tДD@ !RB ?cJ@ARtДD B?֣@d @?`Gc ?{cS@BB_4h@@?o@k@@@A94!|DKa!CO!F[xDSuJB a!L@scWC@ ?|֛A" Ta {j<"}A=@^k< @?=?iT@ }Ӹ @@ARG@p@"?ր@?T02C_ FXc`C{{O@o_{Tz{?@51 T9`TK@ ?O@@?S@o@`?W@ !@?C@s9@?o@?G@ !@? _"`QTW_Is+PAS y9Fk`C[{;BGSW@g@xa_@ ?)@c@@ ?[@ ? ?  HS@?@7`DK@[@@ ?` ?BC@? HcB`?a!A ?"x;@ @O?֠L ?`?ր6 I@AR? HS@?u6a!A ?a!(B ?W@k@W?TN;m;bBC 9@xO@K@? ? !?C@K@G@CS@? ? ! ?C@S@ `Dۢ/t @ C S@ 8n!`DT)oa@smւ?~>~?ς^_T`@@n@8b_iTa:@kTm@9na!Ass*B ?`?@!RK@ B`?o@[BsEkDSAcC{Ϩ@ a!DBARK`?;@C@AR`?A`n@ IS@CW ? !`?@ OJ@"@~~C@W@a!HB2*Z ?"@@"TJ@ @`ss*B!;@#J2o@[BsEkDSAcC;Fm{Ϩ[BsE!R@ ccDBss*B`?o@kDSAcC{Ϩց!|D ?G@@?cF`? !?";m; ss*B`?};m;G?[ks;m;       {S[h@!4A@ ?*@_k@Ѐq-Tc|ҘsCkzZD+9+F/g@v~}*hv@@?ց@ hv ?A`*?ւ@_ks@ЕkLTcCkD+@/@SA[B{ƨ_RccA{CS@d@ccLBtj@`?qMT@`r@RccD B`?֟9@|g`Am@@BT{ASB_/`G?   {S[uj@`A@ҠD973*@`T7vNBA``r@RccD B `?֠@/bBBAR@?`@a!8D ?`@bC!Rm?!R`A9@@BT3@{CSD[E_`@#vNBaR?@ `A@@cҁT@{CSD[EpB`G?`G3?h@pNF@_rccA#O{CSCf@'=d @e@RBzc)ccLBC`?C@95`A'@@BҁT{ESF_bB`C@?``G?{[`AScks@`Aj@`(@ `LB`D`A`@6AsxD*zZ?Ey9KB?kmT  `@*?@qAT @!Q?|qTa!4 @t`@kT`@ ?v@@"T`@s a`@*?k,T`A@@BaT{VSW[XcYkZs[@?a@?k! T`@ ?v@@Te@9@ @ @%f`?ր@ @ @4@bD9sU @@?!|D ?bBC@?cF`?bBL@ !@?`@@AR`?q!T@#R`?@`g؀R @ ~@>@MxC`?ր @E !|D ?bBC@?cF`?bBL@ !@@?`zd$Dc c.f @ Rr?kTS@9(q TSC2@ҳA!F ?֓@GS?`G?{S[cA!F ?ÒBBRqTky9[D  ?`4ÒBsBkT@ATATs~@CTay9F7||#|BjcB|ӕ@ ?CTBBB| ?BQ4kDSA[BcC{Ũ_kDSA[BcC{Ũ_ .d$Dc c5@*@?bB @@?@ !9@?\*@/`?q- T@D @BVbCG$ @#`T@@97u@@ҟ @ky)x@?a@k9!m.@`@@`3@Z*@`3?kMTR`C@9@Y*7`K@9@6@@97 R@9D@9`7 @#`T@H@9 6`3@Z*@`3u?k T;@G@`G@9`6`3@q T`@ CcDB`?AR`?b@9`2@> @d@BBF@?*@`3@kMTc@ @_qbC@9 AzaG@9c[@b [g@A gklT/@7g@ cVqkW!'c@sX@z7Ym ?Zm5A!A`@@BAGT{SST[UP*B`@ @B:AR`?u@@ky@@ @`g`@ @*R B;?ky2@D@9 @6@~x7@kT>@|{ @ `T @@9`7@@8 `T `T@96@ @8`G@9@7`@ CcDB;;@!R`?/@J@6cVkWsX7Ym?Zm 4`@ @* ARB:?@ `@!( T8 `JT@(0 ` T@9@7#@  @? @!=@? 9@@"A 7@!``?aZ`*@@ ?@|*@D?@T@ ?@@?ccF`?@ !`>@?@`*'@[aZ@WE !|{@@k<= @`Z_qT)'`>@~{@!)T_k T@'@x`@ @* ARB<?@l8 ` T@!8 f#oIT)  @;m*@C@@?@*@Z ?օ*@@TZkgF!{Ӡh<=Z@Zb@+`x7@kT>@|{/ @#}ѧ}ෟ4;~*@+ ?@@?+@ccF`?@ !>@?*ky`@ @B @ @P o(@@Bob>q-KTR XO@q ` @ @F{c`T`@qaT @z@@?@?CBF@R_==k@TG@4"#F @ n!..k@ATA@A4"=#..t-!/@F! @{c XT/'?Qm!qT*@a xA!@R?@@ *@! R?@@ @e@?XO@BB D@? ! ?`9@=`j@y<k!@T`2@A!HB ?@|2@? @"T`j@ aj @@!A! F: @ ?8 @ @@@E3?! @' $@bBC@?! @@?(B@`6!R!9`06!R!9`6!R!9`@6!R!9`86!R!9`6 R 9`r@y`6@ *@A xA!`R?֠@aBB`C@? *@ R! ?@@bB0C ! @?`-5*@ R! ?֠@`ccGBR`?@a!@9!5@?T   RccHC 3@*`?`@ 7b&@B @BG"9BBA@?BB(@@? @@CcG ! `?5@4`"B9`7`B@@96`@P7"@qaT&@@_kTaJ@(`"9J  @AW@@B'Tj@*{KSLcNkOsP[M @`B@@7?6BBB ! @?֠ A!|D ?BBC@?CcF`? !` ?`2$A!@7R9%gaJ@ xA`@@4!@!@ qmTr@RCcD B~@`?aJ@b%g#D)~8@~b]b`*@}~x֚~`@7R`*@4@4@aTaJ@A`@5@4F?` `*@BBHE@?ր7@ @`a!C# ?ֶj@*@j@,@k Tx*@j@,@?kCTaJ@`@46`*@z7#cCC`?֠r@DD RB`?rr@ CcDB@AR`?F?baJ@ ox`@`5`*@z*?ր6 G?D$DCc= c !``""R?   O{ S [Cckj@@A@_*@=BBHE=2@?֚j@*@@qMT5DA[@b~|s#"hba@B`@bAˠ?@@klTX7sj@b*@aj@@,@?kBT`*@aj@,@?kCTj@b*@@A 77@ 7j@k* T*@|}2@!@[h`5h`A!(Fx@ ?6@9`6r@yh7A!D ?J@`T@:ZE@?@`@?֢D)+@=b_b;@/@a^!a9}bA!D ~`m ?r@y`06`@@a2`4`z@m|g T#T   ՠ@73sQ RA!A_@"@cAT{LSM[NcOkP_A!D ?`R rk TO#cCUDҖr@*~~`? ARB?@$qT Rf@ABBA@?a*@?A!@ ?u/@A!D ?ּBB D@?BBL@ !`@?BBAB@?`@|g AT`@ccB`?֝r@ !RB@?R@53@b}@#(}`T+~ }TC`|g  T`@9a @7|g T@`|g ~! `0 Oa q aT|g` ?``@+``?@`@`r@ CcDBAR`?aoAm|@gz@m R<8`#}+|+|{+|(|?#}^~zm{9D$DCc= c`!`BR? Gs?@G?CBBA{ +S [ c ks@@OBB D/@?BBL@ !@?րrn@3CcFj@93!`?j@C sUG!`@wC@:ZF V,@a@a@?@|@?5@@v @ BB0C!@?֠J5"BDAR@?~CcBs`?s @R@9@BR4@ ._!*?@aBB0C !@?`u4A!D ?|s @!!F ?$ЄD B?"BlC@?DHF B?֠E5a @?!!B ?R@9C?@AK] D@G@F#@XD'kR   գ@ Rr@ * u#Rk@ RB ?@9`6"!R\`@`#@`.6@@@?֠-5a~~ !33`b} h<=b@b~<< AB@Ҁ?ր5`@9x`9 @k@?kmTa+@?qAzJ*Tv5@kxSRhqR#@Ѐ@kC@`?*@kǟq'@ן`?`#@@ Ѐr@.k@@C@SsC`?`#@@!LTibs@y@9A%7>@a%7@"&(7 G?/ L*@!H@?qT@!2@"@D5@ @! ,T! lATK@`7s@y46#@M!@DG?!R#@9 !`6@8@ qTTKTq HT BqTD\@ ! R?֕j@ !@ "@47/@Ђ"A9! "%7!@"B\A@@?3@CcDR`?W7s@y`6/@`@H4 @#@c$Є@aB@@ ?/@@H@kHTj@`*@aj@,@kT   `*@aj@,@?kCT/@Af@ ?/@PRK@j9`0@Tb%g~@R`(@#DӃ9(S@7@9@! H+@ A9$IR,@a*B 9 9:4@~}C`EL%A@ @T$ D)b @b|b@| ~#}OqhT#{{OB _Tx#`T#`:T87  (7R!!AO@"@c!GT@{JSK[LcMkNsOC_s`@@R* 7@@c7@!*aK>@a6a@A?7@"/6j@B@@@9`4ZZ@@?7@RCcLE`?r@W5&ƼBR?`@? 7r@ $DB`aR?A!0G ?/6n@#ctC*`?!R"9A!(B ?֒\c!g!0/@һ 4"BC@?*r@A57@ RB $@@@cc$D?/@@H@5Y9AA @BcҀ?q+@BziT !.A!B ?#@9 $7#9Xr@ #cDB%AR`?ֈA96@A!lD ?@GD!@҄R?/`//@Ѕ@9! @aDe҃!R#cLB`?"RqT@!S!*@'?6A!B ? @!!F ?BBG@?`6EB B` ? 7^r@$DR B ?D\@R !!?A!(B ?"R .r'/@ ?$D!R8?@6r@"#cD !RB`?$D B|@!R?`6@ $DB @!Rr@?@@R/@,@q+@<@S՟bs@y"6r@ 7DBR?#r@ RB@?UB+@? B`@9lF?@ EB@. ! ?@G?qT BDB c.*c ! ?r@ 7DB "Y9@RR6R?@"* ?*_kTvqTr@ RB"?֧4@mTb%g}#`TG?6~s@y@_69g?6@A!A ? B`4@T@?7r@EF$R?TBBlG@?t#cD ARB``? r@ 7DBaR 5еB?s"?@r@aR?? Z#cD !RB #UB`?Tr@ #cDB!UB!R`?J/@A!,A ?Gr@#cD UBBR`?:#cD !RB#`?3r@$ЄDUB RB`?'7D G?`?UB      _h@7@@@`@aA6dxR7@@kЁ@_@@CeQb#~@@Qb `   {Sh@bB)_kT[A|}c`@haBBXC@?CcLER`?a A!Ek ?@@@#cA`?a@"R`@#@b!@~`@A3!!(BB9~_ ? T`@`kD4`@hakn@@$TAF@?BBXC@?CcLER`?!!(B ?A!A ?b@kDB!!(B ?kDb@Br@b#cD !RB5`?[B RcCSA{Ũ_SAR{Ũ_!!(B ?b@A!A ?ֵA!E ?`ҕ!!(B ? {"B`CS[@?`@!!HBv ?u@@"T`@ aSA[B{è_A!|D ?"BC@?CcF`?BBL@ !5@?``@ aSA[B{è_ {S"BA[cks C@W"B DY9O@r@@?֡ !6 ?@9`@9q`T7DR?@ <МDaR B@8?!!F ? 6 GB0[{B:ZC Y9BC8+B?/@`E@ ? F`?@?7F @@?`7@R??/@   Ճ@ B;aR? AWA@Bҁ-T SA[BcCkDsE{ƨ_!!F ?"BG@?ր6<МDBB @@?֡ !8 ?)R?R  @84?qT@9?q T?q@9AQ!?$q T @8AQ!?$q TAT<МD !RB9?֪n@w@F@$TA?`@@@(6A!A ?$ЄD aRB7?FAR?'DF<МDFR 9BR?aR B 9?$ER? 53@@8@ 7@u~}hu?֠77@!hu3@sTA!F ?W_qaT$5$RR5<МD:ZGF;{C aRB 9?R R6BR@?ֿ T`?`7@9R??q@T**@F @E@`A C HB@|D C#@F<МD'[{wB'CcB`?@@ ?7"BG@? 6@@ ?֗@@T@@ @ W)!!"BB!@? @@R`?*4|@BR`?q@*㶃R?@@?R`?ր6"B`C !.@?@ ?#@@?'@`?֡ !@7 ? B6!R?A!A ?֝@ RB6?֯ !RB ;?֏!!(B ?֏ G?@G?  {S[c* @!<#cG.@`?@5@@@9?qT@9?qT"B DVN@xr@@?֡ ! <?`@!!HB ?֕@ T`@@q- T`@!!,A4@ ?a*@8,@ @94 qhTk95BV 2ZZG+RA{@?`59;;kDv@+@V!!`@bw9Rtj~~SA[BcC{ƨ_+@ qTkDSA[BcC{ƨ_A!|D ?"BC@?CcF`?֡ !<?@95r`@#cD !RB=`?kD`r@ #cDB R`?ַ9 qTkX@RBBF@@?{@94w#cD !RB =`?kD@Gk+?  { h@I1@ K-@*l   6@qA@|D˄ TTs砄 Ta@(7@_)"BXC@? @{¨_֡@?kT?ATGǟ?qsC@BaB9@G6~@#T]@Ң9\g|^g |a^}#~Ti  (6C@aEjTB_ !T4c@   b@KTe @BTb @hT널k AT!C@kTB?aTxc@cdC`F @ @{¨_{c!!AS[*A"@oqT* (B'kRs 5ARskT@@@w^ @TA5@T TAsRklT5kRsSq@@T* Ao@@cҁ T{NSO[PcQ_'@ ?*@4@@@! BB @@?"BL@ ! @?@;{A*`?**@`?*@_TA #c,E [ !`R`?@5@F L@ R> Br3k>QkH T @@`?@ !@?G@@c?R@?qT@c>>qTk@R>?qjT!!@@ ?TAdTR@UrkHT A!F  !!D D<O@#s 6CR@`?k2k Tqd{S@b3@cB|@`? @?A_?5__@TAuK&3s*B`?!!@ ?֟TTkRsS6@ #cDB3s*BAR`?`?֟TT`?kRsS!@ #cDBAR3s*B`?3s*B`?!!(B ?kRsS@ #cDBAR`?kRsS@ #cDBAR`?kRsS Gks?@G?{S  A[ @?!!Ft@uj@ ?aRHrkTR!!A?@"@c T{HSI[J_$Rer@g9OCc,FDB#_|_|_=_(? 7#@tV2C !?`4 ! ?ր5B9+@9hT_@ 4@T`r@ B AR#cD`? @!!(B ?ֽ`r@ #cDB R`?Rg@4@ Tc@4@AT @!!(B ? R`r@AR$D B` ? @!!(B ?֘`r@ RB  G?0A   A97(@q T@$L$ @F @! T"@B@b7,@B|{b`! T__$$D{# c?! @”R?{S*[*A!F ?ΖRRark *@7z@:@qTRnR)rc`Td@kATkaTd@c`T@Tb@_kTc`T  !!HB|@/ ?aU:@|ATz@RK+"/@  \ D@zSA[B{ƨ_SA[B{ƨ_A!|D ?"BC@?CcF`?"BL@ !@?:{S[c*#!!HBE ?t.@?@Te2@{Ӏj%#@ a2SA[BcC{Ũ_A!|D ?"BC@?CcF`?"BL@ ! @?`.{#cASd@?1 T?h@*;I@@9A7!R@9,Rs@ r@k2T T R (rk@OT`mR`rkLT`͕RʢrkT#cDk@R B/`?քs@#c@DBc# ?ր7"BC〹@?"B D+@?!!L@ !@G@?ր@`?q)T@B; `C' AS@Fg F#/@#'+/3R7u RB?a3@`@`a'@@?s@c RB@?րs@ a @a2BR?a2@s@?q`T?DqT?qT RB`?`cC`|5`_C_5a?@'@@?s@c RB*?`KC4vG@ITa;@K'@@?s@c RB+?`CL5 R`R`CL5`/C4a'@Ҡ9g>cs@}a{ RB@-?`gC``5`WC4S@Ҡ9ga~~jkC_q J5@9+@ @+S ?kJT s@R?+@<Ҙk@o@@?G@ !@?`;@ ?juc`s@#5 !RB?ps@@cD`?;A?AR AA@BT*SA{Ǩ_րnR)rk@#TlRJrkTR`rkTW@KE8#cDR B =/`?քs@#cFDB? 7A@q@M7T  D+ |D/KB# C#R3;{O@߶ F 7;{oK'+ 37 r@Rs"!| h! 9rTb @z@_+@@?=`? 6@r ?aU6@|AT#@ ?3@@?@7@`?֡ !>`?6#A'A+A/A3A7A@!!(B ?;AR?Af3sD#'k@R B/`?OH҄s@CCcGDBW=_@____=?7@s@ RB``?@/@ Ѐs@BR?A"5A`5@g@ cB!7`?A@4@s@@`T/@ aRB?ց{@a @ A"S4!@?qRT@R!~==?nnfBQ@WR@!!(B ?#A'A;A?Ak@#'#cP@2DB?@7#c@`?"BL@ !;@?`@`"BlGR@?#A'A;A?A;{D+/3R 5B@5s@AR@?+A/AR@!!(B ?#A'A3A7A;A?A$k@l@K</@Rs@ @B ?֠@w T K@q@z TKEK@@)a7@9'@@?s@c RB ,?`C@4c@ Ѐs@cRB,R?`C4c@ Ѐs@cVB,R?֕hA T R Р vȎ@4;7 * *֎2@4 @ThҨT.@ T`h`TTZkT3@s@AR?T`hTs@ ARB 7?6@4@7_ iT@?`@!!C ?!!H@C ?`7@?@@99@99@y!Z) 9%5A=5A@<5A42@@TB`95A 85A65Ar5A`55B %5 B 4`sBv5>@ 5B@5`&Aa*A aT( Tb.A!"s@"B" ARB )?@ @!K@?G@ !.?`Bcq To Ҡ g@c/O Rz@6*@#Yha<@A4@D@@a 4 @`4@@ 5_ T  AT<!Z`Tjz*?#T$RK|7|@@@?`?֡ !3?b|#@`?CW=@j<@kT@EoKc@z`Ec@ ARB 2p@?_ATE c@B/ARp@?ַRK|w|@:E c@B 1ARp@?֧@7kK@@?O@?GS@@`?k@{s@v RB?"@W5@R`:&@U5:A>.@@T5*@S5 R`2 `?T/@ Ѐs@BR3`?ps@ !RB`*? .`Ң % g~B-`Ra&?  RB? RB ? RB?"B @"!|@@?G@ !*@?@aC@`S@`?րs@vb* RB@+?E'@ !+@?``Bz4a@?<qhcT?`Xa*s@bZ XD"BG@? B@R?@ A4@+@QXq`T!?!`"X`*s@bz D"BG@? BR?@A4@'@QHq(^T!?!"X`*s@b~\D"BG@? B R?@A@4A#@ xE"Q_q"BG!s@a^@? B` R?@AU5@AS5@A4`Av#]5V@`\5Z@`b5^@`5b@`_5f@]5j@ e5n@c5v@ b5r@`4"@ s@B'CbR"?Y&@ s@c"BR?O@ s@cB R?C@ s@cBR?9j@ 0@"BG@?6@s@NaV RB?' @ s@c:B R?@ s@c6BR?@!Rs@cBa9 RB@?@!Rs@c>a9 RB?s@ *@B@R?K@{@q;@@zC@K@<TKaRCsk@GTa @aK /@B?s@RK@?@zAdEO/@!`C9 Rg; Հs@  *" R;?K@;@ k@#@@&T`5@'@$5N+@R;qTRS/c7~qTs@ ;@B`?`#@@`_@4c@s@@qT;@ 9RB?#cJdJcdIiIKjK|Û#=)}ě$=hh33#$K)KB|ÛJ}ě!@BL|JL,}Gs*F|EA}Eӫ|Ek$Eӡҡ|  ~EҠ i|'d~s@|  E K"& KRiӠ?K@S@k` T7@;@@?S#@9 ?=>t@ =wc@Zk T/@@|`O@ s@4`S@@5[@s@ ;@B`?֟[`g@5 ֢`_@5R#|s@ ;@B?`O@4b@ ac@#B @5a4a@#R B`?#   Հs@c@8R?ATs@b GBR9R?N`cb@O@o`?֗/@S@@Z kaT#A'A+A/A3A7ACA*s@ ;@B@ ֢?֮R;C@ Ѐs@B`RC?@'@C@@5K@N+@ kT@@ BC}@CS@?"B @@?G@ !`@?`CC@S@[R;C@ Ѐs@BRC?C@`5@'@5@RN+@; @ s@c2BR?n@ s@c6B R?X@ s@BCbR">?LcA s@BCbR":?>"@ s@cBR?f@R;@R;cDR B`8/`?քs@#c4B$B35C?@/7CAqT@R/9 <gd@A4@@a^@a~| {#zT`_`T@?qT/@ s@B8AR`?֠A97/@ s@B:AR`?@!!(B ?#A'A /@ s@B>K@RC?@'@@9g a^B/@Rs@~`?ֿ@%@ s@B(CbR".?@ s@B(CbR"*?@ s@B'CbR"&?CE RB !#s@~?\C/@ s@#B R?Q.@ s@B#@RcR?ַ ARB@?ֳCKRRRRRR@ /@ d@ BcR?  Հs@c@8R?AT/@b s@BR`?RRa@ s@B "CbR"?@ s@B!CbR"? @ s@B$CbR"? @ s@B$CbR"?@ s@B`#CbR"? @ s@B"CbR"?&@ s@B&CbR"?@ s@B%CbR"?@ s@B@%CbR"? qT2@+ B9/R37#K2b9#@zvh`@@q-TW@~t@k@b@d@jy#`.@bcB9qfAןjy!*@/@s@ac9R?@@kLTCA#@K@!`#KkjT@Ra @askTa@TKCC+A R/A`93A7A/@ s@B>K@R?$#A'A;A?A(#A'A+A/A3A7A!R/@s@ B`??@!(B ?;A?A3A7A;A?A G#'+/37;?C?Є$Dc? c ! @5B_RC?b#'+/37C G?C{S @@96SAR{è_[%Rr@Rc@ еDB d@@eB9?a@"BXC@?@6!F ?a@?kTr@* !RB ?R[BSA{è_B9b@[BSA{èr@AR B?R[BSA{è_   {[h@A9 7*@H@qTz@qMTwmRwrSRsbkT:@ABhs_kTz@sbkTSA@[B{Ĩ_{S[!@X@A0!HB ?uZ@@"T`@ aSA[B{è_!!|D ?BC@?#cF`?"BL@ !@ @?`Z`@ aSA[B{è_{S[ck(@qmTеA6BB @Xs@@?֟s?*@kT@qMT9+B6FR   R@*HqmTR ?֡*Hs"kKTD*Z! ?@k+T@qT9+B Z@Xss ?@kLTBSA[BcCkD{Ũ_{[h@u*@qT*B76GSҠ@Xss@?րb??֠*@kTSA@[B{Ĩ_CBA{S!@`A9*@6zB@cD#R`?)cA**`?Aa`.A < 8=w<:@BbV@BRC@9@*AK@9q`TqT66F)n7!`/l9g ~+}x55@*! 4SCG@9AV)A@@B!T{BSC[DcEkFsG?HmC_@@>R@Aq TqTRRz7 F)n6@!!D ?!`ga^ET/ ~@A9x`6C3@#@/@TaT @_T@?@E" TAT_+T@BXC@?ր@A@|@Cn!~T@A9x7_+BXC!@?EBtF@@?`6N+@cB9 627*   @ @@A@!@!@"BXC@?5@Cv@A@|@Cq oTT@cB9RR*z2zRRy_+G? {[k!A@9@/!6Kj@O*@qT@L#  T@"0@_qAT;3@?s7@@[_qTA962@c .@@kT @_A T@М[C? 6j@&c5FZ+B 1@T@ @@@@}@bk`!_BTak CHRq T?CHs"kKT+DC@?1T@"@@@?;D?DKDOD[D_DA/D@BT![BkD{ƨ_KDODbҠ9g@~;}М[C@!!DМ[C ?h@!hр?E@@BtF@?@6@?֎G;?KO[_?;D?DKDOD{Sc$h@ A;@@ 5B7@3 ,GS;@ @]1tTWPC9jj@{w@@+!(FSA@ ?@ 6"F9@6?@`7@iB9m6{2@ᷟq@STDq TqeTIA 5qT6FCR   ?Is"kKTD !(B ?@`4DDDDDDDDDZ@|@#@ccFB}`?@ R!Q!AD"@c!|T$SAcC{Ȩ_֟ T@@5 Iw@b@ABA@_TQ@IqcT DqTbҠ9ga~ C gB 9m   ;@$R  @B@/p@B WL@daB`A AT7@@?A@` v+@@@#`B93T6@~@~}m+@!@?q TD`@ !H@ ?@ms@@cA`?@s@R`9@$B?@@:7@ @@9@q 0Ts2C !`?*A4 !`?A`'4E9 6@:@ @|q@mga^e@#}  |xx#}7@ Fs  ՠ@s@?@ 7|@TŽA@B`‚5@s@!|@?:z73@@?֠@@@?$T?bm@`#Tbm @Rh@ @@ !(B ? @ @ h@@!E ?/@@!@IAk,T_LW@+@!@A*5AA__/@+@A9 ~@a9+oB9a6~@~}mC9A6+@n !@?q!T{@ҡ9>g`@Ra~ [@]c~ }x`?W@@D@?qTsD @~{!D@D4hcB@`?D@?kLT:@8@S@@?zbB,q-TbAqT@Q!C@y*[O ;FAD@L@AC'9 qTz @2Qs2_kTRkB@zhT@@9 ! @?@`?@ !@? ΎR@nr8Bc*K"s@y"yC@")?y'@?;s`?֟qmT*|n@)R"Q _kaT**Rks"B@zTOI[H!(B ?A ! @@`?A5w@!!E" ?A@ Z!mRάrcA`@a B`@ `?@3@ @?@!(B ? @@h@ bA9b9 ~+o7a|g|?g@@AAwQBA|+s2C !`;C`?@*;@C@5|S*4A~@!AxSRz`+@*** *KE#T@@{ s`?֟kT@@;?TC !(B ?ֱ!C ?@*/@_@ ?   +@W@!@_LI4?qT_n@@@4{@?q@ze@!xC@@ ?*!C ?֢@A/`!dB ?A!E* ?AE97m!A ?֠E9A6@@bOI[H!@7@@?A@ @@@@F3@ @?@!(B ?:CA@*K@@@/@Z#~{ @k@T!(B ?2s2C *. !;C`?A5C@+@;@@?k XzTcAK*`;`?;@@Q@_kT@A*@@@4n !;C`?A*;@C@5A?khT@SBRS*:+@RA*K*** kTA@B!@3s `?kT* k"TC @ cDBp@AR`?@ R@i9 @ cDB p@AR`?I !;C`?A;@C@`4~DRDDDDDDDD@@@+@kCT*| B*R g @@ A`a5@?X`@?@@ j@D99Z _okT@@:?!(B @ ?h+@iURIUr J?xSDJ1 |)f|qiT@9@9+@c| | *( K 7!**! aH'8@*B H,8kTL|S  kɦT}SkiT@aHl8`Hg81  "6N7A*lSaH'8*|SoH'8!l|S*_T@9@9c| | $D c? c! @BwR?ք_AT G?$D c? c@! XR?   c D{BA#SsD@@`?!L@ !@?[@H`z@fj!R@$@9F+R?q!1TO04c BkR`r@!DR `?`z@@t@@ @c Rx rC @еF9DZC@W)cc|_qT`r@ ZQBR`?֟pT ?֟)T? 6)4@c9"R?n4?ar@kATR B@`?@ ?ATA_qkT@W)an@cFcBE?pA@B(Bl@?@an@BB?@az@ @`!R9ΖRtrk@eT@ 5@W)B[ˠ?*C@B4B9@6!D ?@x@q T R9R C@#61` TRk T:@~@@@9#7@+T@9SC@6fB97B9!R*@6 @ @s@B@AR`?f9z@kLT*RqwT_qT:@B@@97@`%@TT@@9!7e@@`TT@@96`T\@5z@_qTBXC@?*@`r@a6 @ СRB``?ej@@(@qm)T@RT @aT@0dr@qT`6@R`T@aT@!@(@qT@L% T@C@AT@ @ @#q`T*@{ @ `r@BR`?@$ @ `r@BR`? @ `r@B R`?c[k\@@AR B&`r@?/@@?+@V !+?+@@4 !+?+@ %4 ! +?+@$5A @ւ?qa ! 5+?֛ +@ 5@ҡ9?g!Rb@h@*@9@|@a^~xR_kTa#$+?+@`4 R 9@@B(@@B&@?+@ [R@Ҡ9g @a^ `` T @ `r@B*R`?@@R B p@`?@@0A@y2a5@y0b@a5@b@4ABpS@ya5@y4`AH!$@BHQB+ ?B@+@@@ !$+?֛ +@4~ARlC qןR?+@ @ RB`?c[k\ @ `r@BAR`?c[k\ @ @s@B R`?@dR @ `r@BAR`?@ !%+?+@`15`A35b@*R?kTA !6+?+@`5Q@ 6a !+?֛ +@ 4 a#$+?+@@4a !5?+@4 !@$+?+@@5?qT@@9q 5TB @+@?@ !`$@?RRR lr +@b@B(@@@?@ @B*@!R`r@?+@#@@A$Rj{G ! +`?+@5`A?qɍT@b@` @yZZb/@yZ<dS@yZ<#dW@yZ<d[@yZ<qTq$#@GQqFz旟q@z*5S?kTy`S@9 Z!K?kȇTBZB< ! G?G@@@`<5 _qT ?*xbpS)ZC*#@C@@?C@?@ !!`?A@ҡA@?@?ց !`"`?@@S` !"+`?+@*` 58A` *R9 rkHT ? !xa!kT!F ?,@ T2 !#+`?@*+@ 5B @+@?@ ! #@?7+@ BZS@ *`9BB 0A!#@*`9@@?+@b@ R rk T ? "xbBkT S2@R 9 U ygb@|@ |b~u !#+`?+@ 4 !#`?+@5@ 5 c.`@9LqT`@9LqT`@9YRHqTyR?qmT`@9xS2@90qT`@9O@ qT!R@* @ !RB`?c[k\\~bgYR~3 ! &+?+@@4a !+?+@`5pR*bRB @:0!0@?@ !%@?%!R@ Z!lr@)_@0+@cA@`A`?+@b@#@@?@ !@&@?@"R R!(rA@yR+@A9@ yA@ynnf` =$=>nnfB@ykTsKkB7CzlTOJ'V)C@c@@+@sI $D c?a c ! )R?g@ @ƘQBR$ ?o@RcG`?o@B@@9!|@q!O9??_@@?c@ ?6?@=s@ A9?{A 9 =px ! C?C@@ 5 _q@GT ?*@xbpS) ! !C?C@5@ _ qDT ?("@`@pSj) !`!C?C@5 `Rj) !!C?C@`A5@ 6ckG?=>=>nnf@ @__R_   *{c k s '@AfXd@/`#@qm#T\GҠ9S[5 R; m g#@9kT@hydB@9t@ˤ7@ @`b@ZT3@abqmT@@$X{@` @?@6@@k@kLT/@9/#@kT SG[H;Lm@T/@/A/@@BT{FcIkJsK_+@Ҡ9g@a~B D~@?BL@ !;@?@`b@cB !``?@'@e@kT @@@ myI T˟ TC@@b|@4 @3@%JAA?gaW^b=b #~ TRa(!!@T ck9+@?g!HBa~+ ? @@|_ATC@R#"A#|#+@k@h<=C+@Ba@+3A?T+SG[H;Lmv3@{kTE@+!/A?T`@+3&/@ /!|D ?BC@?@cF`?BL@ ! <@?@d@@*@+@qd@T+@ҫ*`bR@ DB<?+@aGS[; mk?Gk?"@@@Kq 5!@b@A?ԟ_ԟ_ cA{ %ROS [ 0@a@O @&@@@=9C'=~!BS/29 ?6R!AO@"@cT{JSK[L_s@D?2@q- T&@3Ң@bsbk TAxsa=|c~<>nnf @ @?T@*d@ DB=aR?ր @@ c RkҀ#@q-T^GHB @@@@9@62@T`?qMTR2@Zck*T&@?6#@9kTcMkN R@;X3sO!LF ?@9sO*!|@ @&@ ?aU&@|@?@BT2@R @@ A !@T|@hA($$ @ ?ֶ@@bT2@ 2sOl !|D ?BC@?@cF`?BL@ !>@?&!|D ?BC@?cF`?BL@a !>@?Gc ks?!A{@ #@AX@ ! @[+@?!L@a !`?@?SR@BEcF`?NO D9~ @Ն~=`6 A9@ 7 @aRcD p@B`?A@@BTSY{X[Z*BWG@+@2@:@?@ !`@? ~OB@@"@J~2!HB~ ?ֶ"@@"ZT3@ J@B @#!J*Z2SY[Zc[k\s]A@@BwT{X_saRDc kB@? @Cb@#D!'!|@3?C?@ !  ?t@#R4A 2!|@??ց ! ?֠rIҁ@R& ?qTZ_GR@9 C@965c@? 72@qM,TR2@sbkJ+T&@@?6#@klT@@sB @`?k2@*ql*Ts*Bqm T@"L4 _ T@@ !RB?2@q gT@ ***%x`E&@%X$E@@FEc`kLT28Rk T@   ht@_qMT   D@!{@DAha9@@?@ ht@_klT2@"kT@`?&@`?3@'@"&?C@@?@ ! ? _?+@@?ց ! ?]"@Rj N"@wqTR~@3@ cLДF1Tc _@#WTB{Ӏ?#@Q#1TB@C24qST@Ҧ9dQ" Rg_@_k@TkAT*@a~~_kT.@%ga~#~j,T @R@ cB_*TD@aTB4ABG/B0C#BBDRG? B@{kT@ @_T3R@ ?*qT!9kT`@*?(@@ @?`a@9@#@/@@ ?@ @B @AR?ֿkT@ ?* RqT9k T*?(@`@@ @?`@ @@@#@@?@@5@@@@_kTB4@B|@@7@`?ր4@AR@@`?&@@; @$A$( #@2kT@ @B`aR{@?@@ca@905@!@!@@ 6 BaR?`?>!C ?#!PA ?+@_@?@ !@? ;cB`?!A ?`'F/!8@@!0COF#GSZGA _G@ ?N?K@*73 a 6@?v@?KqMTC @?5#@*O@@?4F@?@S@?N@94#@kb8A 4bh`8_k@T Rr|bW@@?`5'@#@@~@@?C/@`?@ !`@?R#~ASh 68@@ ARB`?@ @d@*a@@#@/@@ ?@ @B @AR?!R9g@ `B ?@B@ @qLT3@AR B ?B@ !HB{ ?@|@TB@RF @|!{jH *SA{è_!E ?\SbW)_kcT!E ?   {S[csAfQS|@@qh T3$E<q#7T*<z _qiTC@@ 5<qHT;9+q T<ˀ#T3B7B?*" RkBAzTC@( {@@5<@* ?̌R̬r| a|K RQ(K! !xS`'*$9?qT!Qb'BB`2b8?qLTcFcR`?|@cFAR`?˜k TAB@B!T*SA[BcCsE{ƨ_3B7B3B7BcA@`?@ W)!!BB!@?G37?{CksHRS[`AcV @@9Fw@*K@*7b~@R ? @ 4qT_8(qaTcFsFj48"R9`?`?q, TB`A@?d'@A@ƼBR?!@ ?6A@@BT{A[CSBcDkEsF_F@b cDB@AR`?@ @b@9@@q*`9cF<8"R9`?֜*4sF`?q-T|@Ѣj`8_(qTj 8`?@@FR?S T R`9G?   ƄF{CA+G'S*[c@?RqATA@@Bҁ+T{YSZ[[c\_!A ?*@ksR ?H9;@ (@@CBAA HB|D+C/F3L@7 ?`N@9q@T @@L@ ?`7@N`? @@?֠5@ @q@TO@~@?= @ ?k"|›@bTRk?=~!@`}j<=AtBtCtK@H = ?!A ?3E~@c Ҁ?ֿqmTR+@A7C@a@`BB9_qT6@@?sbTk]s^]'@eBG@sbxtB?tC>tH@? = H!|D ?BC@?cF`?BL@a !@?Gks?A@@BҡT@b {YBSZ!Rc\[[D{SH@9@6@96RSA{è_`@b cDBAR`?ր@97a @!@@5[5cB`?@BA@?*B?ր@97@9[B7?֟9B`C !.@?  { S[c-!AH"@'v@9 7C*BGS@96@97?CPGPR!A'P"@cҡT c-SA[B{Ũ_ @@@@5cpDOa !`? 7 @_ T#@`RrkT @9q`TcBK`?!A ??BlG@?@acX@a_d@D@d@c4@8@c6bFaf:! @3!|DC!CG[@W!FK9KB!_@@C[@! B!!@B@?`9!R"9R[BkDsESAcC{̨_R*Ax`!@`T!TR`r@b RB 7?;@R`r@?~?)@@$D a ` c@ ! 11JR?[ksG? {[ *S~c RvC@BAp@_D@`D@7ҡRb B7?`@`@ !\F ?BD@?ր@t`&@96q@zT@A`BB*@?a2@?q-T`@L!  @_ ?T69A7@@Ba T_@{GSH[IcJ_ր@@@!@A8 ?`&@9q@zT`*@9[ 6d@OF@ @@@9@n@=@=D=C9W3?a@  @!\F ?BD@?b@@[@y@!A ?֠6b@@@r@b !RB8?G[?{*$@ !@!€_?qMT  Յ@ @#`,TATRG|?g`*@"!(B ?* @{¨_ {S4@[@!G ?`&@97@ @#~JT@!\F ?BD@?`6@qTq Td2@qTa@%R$L$"@ R! C @96C@c@kTqlSB @qA@z巟?T9@zT\[B R`9SA{è_a6@@!a6!\F ?BD@?`6@qT92@*7B@?k*Tb&@9 6c*@97@!`A@@8P@|g#~! T@#~T}"@|g#~T#~W 5 @@2u*[BSA{è_ SA[B{è*Ba6@@!a6!\F ?BD@?`6@q T9!(B ?`@qTb @!k-T@xaaT!BxabSA$R[BR{è@@"@#~!T"@"R9"@|g@#aT"&@|g @#T#}T*R*R&7 @#~ T@|g#~}#}T@$R9C@BD@?b&@9@72@@97 @kT 2@e{S[*@`h@u6 @2@R _qmT@ R +M*@1@q T@RREL%B _TC@d @9d6c@qc@dAz5B *_TG6  aT@zAT_kT@!Yu?@T A96A`*2@_klT@@SA[B{Ĩ_q @z TA`**@`@|g T2@_qT@*@`r@A`cDB RB`8`?*@2@@{[ch@2@qT|S#g@TXs"A96@97@B@@ v"@#oT"@#~GoskT*@#@ R*SA[BcC{Ũ_ւ @/$RRB@"A9 72@F*@SA#@[BRcC{Ũ_ւ@2@bDT@98707(7` 7*_fRRcD?ITD@8eK+ * BhT_!RA_&RDRFRdRCT@9DRR87   c|e|@T$qAT_cQ@$`|@'@8q`  T?!T@?q$RkTD_{ CsAS[ckf @@gCc5C@ qbT@#e@C@D !D:B B;R?O}}}\Ts gy*_@)|@ UTW7  j   _@"|@_STaW7e@)q Ta@RB!`k T#@kATB|~ibci" k VTb  T @@05 RB9c@ R4`@@9B6@@@ q&ThTq+Tq(TB @@R[sr{`@!c3T@!|B D!|@@?BL@A ! ?@?`  e@j59ZckMTA@q TqTqSTBC!|@@@?B D@?BL@a !@? G?a ?T RB9qT 8T@sIT` @y '     @ *_@+7B|@k+T:@_@@u47~@ 4TY ˿C Td@qM Tf@R!B`?k@ TC@kATR@ (Ba jt?kT @?q@9@@z $T@;C@@!**b B #GR?;A#@ @ q'T@Tq$TqT@@b RB `?@ @17G@*jtj4)?cTAg@@B!<T{MSN[OcPkQsR_@!R'@ `? @d@@ q Tq0Tq&T@*b RB?q@"Tq TqA6TDH0T6jcj @cB`?@c@b RB ?ֺ@B !RB>`? R)B9BC!|@@@?B D@?BL@a !`@?BC!|@@@?B D@?BL@a !@?BC!|@@@?B D@?BL@a !@@?րBC!|@@@?B D@?BL@A !?@?@BC!|@@@?B D@?BL@A !?@?@B @B=!R`?@ Re@B9q T6jcj@ *_@c? T@b !RB@ `?87@#HTҜ4B˵8$C<B  #@8b ?T@cb RB@ ?@!R@B B>`?`@*@[ @Z*@b ARB? R)B9Ag@@BAT@b B!R{MSN[OcPkQsR@ 7@?H T$C<"@8C T@cb RB?/7@}TRR#T$҄|@$#@8b T@gq T@b RB ``?@ҟHT6jcj3yrb @B R?ֲ!Ag@"@cTB !RB;d b B`@C@#R?֟jcj @}T/4aRRjcj @? T@b !RB?ֆ@b RB ?}@jt @jc|&ojcj @# T@B !RB?l@"B RB ``?a@B !RB ?]D B B@B @B=!R`?@@B @B@ !R`?E@B !RB@ `??@B @B`;!R`?@@B @B;!R`?@@B @B0= c?N>4=&&C ?jTB!|kaT[BcC!QU WQ?k|@4֒E@Qf@ H`8|@@?1TxӀW)kT?|@Q@?1ATkT[BcCSA{Ĩ_֡ [>8= c?N><={S@W)!4ˌTd@"aW)!!!K!*a  SAA B@{¨_SA{¨_{Ss HT[`֒E @рf@! Ha8|@TxӁW)"?kCT?|@T[BSA{è_SA{è_   {SD TҔSA{è_[`W)kTc@af@ b H`8G|@   T֒E c@af@ b H`8|@4x`W)kCT?|@[BSA{è_SA{è_֡!E ?{S[cW@T`W) Td@bW)BB!?)TAmTTB? 6SAR[BcC{Ĩ_ֵBB4ЄDB8B B !R?? RSA[BcC{Ĩ_  {CS!A["@9d@uW)"RcF`?`B@4A@@BҡT{A*SB[C_c!RDB B ?aB@R!5+ΖREyrd@C`f@B cHb8**5_kTT\SbW)_kT?aB@**a4+@cD!RB B?BXC@?+@cDcDGc+?{S[cXR"D@9R#B9_@NB@ 5` TҟTB @@?BL@A !@@? cEa*`?* Tb@Rv`B@9 7SA*#@[BcC{ƨ_`@_cD*B B`?b@_@R^`B@9 6`@*@B ЄDB?*#@SA[BcC{ƨ_`@TӤЄD*B B?`@*cDB B`?`@*cDB B`?־G?  {B @ @?BL@A !?@?BA!5@?֠4F?֡ ~O>=a~~~~a2aR`:~=}  @{¨_֤Є$D a c !`>R?G? դЄ$D{ c a c@!`?"R?   { 8@`@ P!C` ?~ @{¨_{ 8@`@ P!C` ?~ @{¨_{@RAsrS @kT@8@B$A@?7`:@ @ aSA{¨_֢B(E"@@?!(B ?SA{¨_{S@@@sa @?Tb!G:@ ?֠:@@ab@@  SA{è_֡!(B ?@SA{è_   {S{@?hT7B(E8@*@?7:@cA @N`?@SA{è_֡!(B ?{{@STB(E8@*@?7`:@ @`RSA{¨_֡!(B ?SA{¨_@_cTB_@O@_h< =_֤$D{ c A @ c!`"R?   հ*B?=$ @"@#@9=?@?=9@9=#@chb39#@cib39"0@!@9 09_   { 8@$@=c@a@b@9= @=9@9=b@BhA39b@BiA39a@9b2@ 09 @{¨_`B[ 8@"@!PD8@R@|#!<!|`<!|qTB@cA@B`!<!|AT_"_֤$D{ c A c !`?R?{S*!*a48@c,G*aRB`?P)RSA{¨_ ѤA{C[8@@Ҡ S?aTTc,G"R`?sSBR!A@"@cҡT{A[C_C@9RB@xq@AzT2@x@9_q DzT!lF ?cBѡ`? 7@:@RB?֠6!C ?SBcA `?SBGS?֤$D c A @ c!`!R?       {S[@@ @ B @ @?֢BL@A ! @? @OF@@!>B @=XP0=@?`J@4SA[B{è_b:@_qTNFaBXt`T?b:@_k T!(B ?SA[B{è_G?{S8@_qMTҵNF   ՁBXs`T?ւ:@s_k T@SA{è*B_       {!lFS[  ?֟yr@qmTjFҀ>@P3?րr@skLTF@~r! F ?րJ@! F ?SA[B{è>E{S[*?q TBLC@?Ҁ77~@c|b2@Bb2BE@?~a6@ `6qT`@ `@SA[B{Ĩ_@@7qTBLC@?6BE@?~a6@@ `6SA[B{Ĩ_!B ?|@   {S$@a2@? Ta@ Rb6@_T`r@qT*@#`,TRSA{è_SA R{è_a>@@P C@?@``>@@?|g!T8o*@@ ෟ@R  {S@!lF@" ?`@!E@ ?qT@SA{è>E֠fA96! F ?@SA{è>E {S[@A@@uF@cAT!lFw" ?`fA9`7@!DE@ ?` 7@`ar@a 4A@@BT{BSCcE[D>Em@7@!dC@ ?ր6k@!F@ ?#R `>@!HBzr ?y>@_@TcFbr CB|`?b>@ar@`J@!arU`! F ?>@6@! F ?@kF! F ?ֳ@!F@ ?!hF# ?֠ @B cDB`R`?@@!D@ ?@kF!|D ?BC@?cF`?֢BL@A !@?`>kF}Gk?֤$Dk A @ c ! "R?   {S@@J@T`@!DF@ ?ր7SA{Ĩ_֡!lF[" ?րbA96fA9@6r@A5SA[B{Ĩ>E!Rf9F@! F ?րbA9@6r@4>@"Q!6\rc2@`@cA@`?րF@! F ?@@$D[ c A @ c@!#R?֤$D c A @ c@!B%R?֤$D{ c A @ c!@"R?{S@!lF@" ?րF@ TJ@T!E`r@~qTNCҖEk?@a2@B@!a2?a6@ `6_qT`@``r@kTa>@~|":h`9h`X@_ qAT`B@:q@T?7b2@Bb2?a6@ `6`r@kTkDSA[BcC{Ũ>E?a6@ `6!B ?|@$Dk c A @ c!R? ҢBA{CS;"DC@'ҳsN@?A !`?@ Ҡ?A !``? O!J~a!tA~~~"= ?`4BA!<@?>A'@@BAT;@{ESF_֢BCAR@?֢BG`"@?*!C ?4$D c  c@!1`2R?րG?֠G?@{S@!lF" ?֔bA9!@@P еC@?@``>@@?|g!T8o*@@ @R {S@!lFt" ?`bA97`J@!Rab9! F ?SA{¨>E{S@!lFt" ?`bA9`6`fA97`F@! Ray! F ?`J@! F ?SA{¨>E {S@!lF" ?֡!cD*`? Ңu!lF" ?֟qD@!?cA#a"O`?o"@`NAR@9cF# ?@a@4M;R?*CkT@4M7#@qTA[C_RR4R|~'@ ?@r@zq@z4@_qAd@zT7@q@z*74*4;@`5wNA{@@*Rhy`?A9 7'@9?T{D*МcA# @B УcDB`AR`?ֳ@Ay@#R*?A9!6?@ZМcA Ac;? *<? A=? @# >?@DB aRB@ ?OE9 7[A_A& @<BhyМcA{D?@aRB B `?@?@qO7@#o?qWz TE9yNA7[A_A#@7@#DcR@? @KASAWAOAyNA4R7@qE9$@z7T7!\B ?@@@$@#@!@(*?ր4kR_jT`@!(B ?w@N7@q[A@z_AyNARC+@bB(G@?RC@q` @z@zC *# >c`A`?@B ФDB` !R?֡!(B ?SAWARKAOA *=? # ?>Ң"@Bhy?@B !RB `?@ **>?@B !RB `?@yNA 6 *>?@aRB B `?֡!D ?*4! F ?@@G+@*!F ?7@qE9@z 7[A_A6H # cA>*?֛{D@B !RB `?@yNA 6{D# cA[A_A*a[A_A2@B !RB `?[A_At[A*_AR3RCN/@` b#`B`?t29 *bA=? # ?>b @?@DB aRB?`@K[AR_AC'@B cDB !R`?=E97[A_AGKOSW[_?{ @!C`"s ?x @{¨_  {!C @`" ?`@!(B ? @{¨_{SA[@ot@!0A" ?6c@qT q TAo@@BT@cQ{NSO[Pk#t@!C@ ?֡!@* ?*OBPD9~~@?ր]9`7Gk`T!hG" ?@6C!]97]9#6sb9@v@AA9=zA}=a9{9qT9DRR Հ@~*hz ?qXzT@*7hzAkLT4@B? ="9OCB CRCGC?a@n`@#@b @!@SA{¨_       "@_q`TR_@ RB@_"9_"@_q`TR_@ RB@_"9_"@@_ qT_qTR_qT_?@ R_`@ 9 R?@ R@C{!C @ ?`@!(B ? @{¨_{!C @ ?`@!(B ? @{¨_{!C @ ?`@!(B ? @{¨_{CSA@@'ҁ!0A ?ր7A'@@Bҁ"T{ESF_[c`ABLCv@w@@?7qaT`@K!EَA ?`@@@1TqaT`2@NA?kT`@9k T!hG ?֠6`@NA`2u9u6@4?qU b! q@Tq TqTxqTpqT!E ?!E ?@!$A ?֢B$D@?6D WF E G@`C!RB B?@ЄD @CR?wA'@@BT[GcH{ESFK@@ր @!RcDB B`?րA'@@BҡT[GcHA{ESFրA'@@BҡT[GcH@/7!G* ?qK@[GcHHF E D B @`B   WCG!R?`` @B cDB!R`?sU BfF  D B Ơ`BF  D B Ơ`BF E D B @`BF E D B Ơ B`NAңc`A @`?քЄD!RB B?ց!(B ?ց!@ ?K@[GcH[cKG?քЄ$D A @ c!`R?  { S A@@Oҁ!0A ?ր7AO@@BaT{JSK_[ `ABLCu@v@@?@7qT`2@A?kT`6@NA?k T!hG ?@ 6`@ANAv)!Fv: ? 4`@9 6RAR@r[rk T!\CNA ? 6kbC g c~FO.DB << })oA`?A`O cc?a@B@cD`?֠@SA{è_  {!`BAS!@?`@b DB2!R?֠B>AR?֠@SA{è_{!`BAS!@?`o@!RDb B=?֠B>AR?֠@SA{è_      {!lFS ?`B@z@@b!R`?SA{¨>E{| /gaJaRaZa!hF ?y`B!(B ?`B@a/m @@{¨@G @@{¨_ {S@@?TsD|g#R f`?#R`?ց!lF ?֟9!@|SA{¨jFք$D c`! c@!`b-R?   {cA[ASckY`@#:?x@v>@ 6`B#Ҡ? @q T@qmT@!44@ ) `T?qT@ `T_@qTc@4 `T?b>@@B@CBB@?֠ 6@R 7?Aa5a>@!@ -R B?B<@@?ւBC#@?ց!F ?#`?#` ?րAA@BTSA[BcCkD{ƨ__@qMTc@qT4@ `*TO cFy@ ||||||||`?" DBR?ւd>@@<h=N#҃cDN/@RR`?=R>@<.?@!8F ? =@6=A@<`@" 9DB` R ?@L#`@Th9D" `@BR ?@ `T!F ?cA*B``?Q?? =?KA" SAB K&OA!KGA? `@cKK&DAR?AL`@" 9DB`R ?@#`JT-G? @GPBGք$D{ c`! c!!"R?   Մ$D{ c`! c! "#R?   {S@`FBT`R96`RB!C ?`R97!RaB9`RBa9!G ?`R9`6`RB9! D ?`ZB҂BTE@?9!GД*B ?`@?`NB?`SA{¨Gք$D c`! c!"ŒR?ք$D c`! c!""R?֤  {S[a@A@ @@4q4 # #B D??qT`B@9`7fCҔA+g `@?`RBA`?`B@96+@A@@BT{BSC[D_4 B##cD@`??G+?{ @aFB?T`NB`!lG ?`RB!C ?`R97!Ra9`@!G ?`RB!G ?`R9`6`RB9! D ?`NB @{¨F @{¨_ք$D c`! c`!"⊀R?   {S @@9?qT@9_q T?qTB0C! !%@?* R4SA{¨_@9?qaT@9!5B D@?ւBL@! !$@?!dB!@ ?" B@%aR@95B D@?ւBL@! !#@?!tC!@ ?" B`$aRLE?ց!(B ?֠cD" aRB%`?֠G? {S[@@?qT`RB*!C ?`R9 7`B@!Ra9@@*`?*`R9@6`RB9! D ?*SA[B{è_ց!lFt ?ց!@!@a5s 6`6`@ZgB@҂B D@?ւBL@! !&@?A@ ?`>@@5B0C!@?q`@E{+B?`?`@LE" RB@'?ր @qT8 9 D'9c(R `@ARb?ր @kjT@`@R@?C@@`@a>@`?փ@`B bCv>@?ց @ @9q!v>@?փ@`@" RB'?`>@@`@" RB@(?`@ RB?`B@``?`B@sEqT`R9`6`RB9! D ?*SA[BcCkD{ƨ_a>@# c&" `@B($@!RcD?sta@7@!lF ?tS9!@@@a@B(D!@@?@4ZC{+Bj!(B ?  6*ZwC<sRs@G?с!A{S@"@/a@?a~T`@!E ?7`B@[@tFF @@?6`rD5c `BD5`B `B@cI[HA/@@BA|T{FSG_`B@a@!@5@?@6`rD4`D-4qTR@R+`BccA`?[H`NB b@$RC@_ @C@C'<+@?T`>`"kb6=`@? T`BZRwu`B&r`D7aB@w @ #!T`>@B9 7#T~Z`RB`JBbBE@?aB@ R` @D @@ccA`?Ba@"R&!abB9`B@cIb2BQ@ aj*@_qT_qaT? m`D 7a!TC ?@`a!@E ?@`|g! Tof@|g!T`@A9`6/ofA`!TD ?~f@|g#T+n~f?Mm`BBG@?*#Rca@bE?q!ğ!QKA a| `#!T~Z7!~Oo`>@B9@7#TZ,@96`BQ96l`@5@R; $Dk [c`! c!*mR7 m? m?7 m`f@| g mATof7Lm!C ?-6a!TCvD ?@`a!@E ?@`|g!T7 mv6)`Aa@|ga@@#TJ@#$ T}J@|gb@#TR@#T~R`@7a4 R`?k|gT#@T`B@@a>@!B9!6@|?g#T{Bx#`4T@!C ?!F ?`@f=bB0E=@?֞@|g#! T`D7+@[`Bb!aaB@w @``RB   `JB`bBE@?~c ? maD`@?b@`@9 ~6|g#~T`B `T` 0gG`@q"Tf@|g#~TZ@/#~}B(Gw"f@?`6ccAa #`?BcI?Mm?MmB#`T` G#TZL+oBdG@?*m!BR@`BaB ?a!TC ?|?g T~B#TB !B ?4`D 77+@n`@8oD" RB/?`f@` F m ~ן4`@A`" ARB0?b!JTa!lFv ?ց!E{S@a!lF@ ?a!E   {S@@5a!lF ?֕9@SA{èp>E{S@a!lF@ ?a!`>aAR ?`@@4qT@cdG" !@B2`?`a@ @``@97`@!?` c@ B>AR ?a@`@BF@?  @`@!@aFtbNBFAR?`@!RbNB?@@!@@RD?a@@! @@!@?քC R`9`BҀ?5`"kISFa!A'@"@cT{E[GcH_ւBCAR@?bBG`@?**!C ?4d$D c`c !1`2R?9!(B ?SFkI@cdG" !@B0`?֡ @" uDB0 `@R``?`@@ `aT@p`@aR" B 1`?`@" aRB1?`@@bD?`N!D ?@aRa!F ?`ccA!`?`RBcD!`?ց!F ?`c@aO @@a=?b.`:`NB b@!R+_ @D@bBEA==@?)a@@! @@!@BPD@?_`GSk ?{S[d@`A@Ҁ@a!DF ?ր6+#? @5aR!rk`T,1`T!F ?+@`A@@Bҁ T{BSC[D_`@9@@ccA`?+@`@!F@ ? qTq`T 5+@@96+@ Ry?,1 T!(B R9 ?ց!F ?+@@9Ҡ7`@ccA@`?+@` @ARccD" B2`?`@@@cc$D`?ց! F ?+@`@ccA@`?` @!RccDB>`?ց!hF ?ց!A ?+@`G+?  @ 9_@ҐFC@֐F   C{CS`Aa@@t@ @a!DF ?ր7`A@@BҁT{ASBC_[@B,F@?4"@9#`@|@W7R`@"9ccA@`?#@[C@" ` @B@7#@RdD?[C|@6#@[C`G[#?{SA@BA@?@AR@ccDB>`?֠@cDC! ,`?@SA{è_{SsF@"`?SA{¨   dA{@ҁ5Ra!A@"@c!T{D_S**[#!`Fc ?@h7*@a5:@4@*C?* 4*@?qT@!|@@xdk?aT1@TD*Xe@cX?*5SE[FcG* RSE[FcG`GS[c? C{S `Aa@@?҂B@!@t@@?ր7`A?@@BaT{HSIC_`@!F@ ?bBLC@?`7[ @q! T @@NAk T@kT!`Fc c ?@NAh6x @@c)bA#?ւ@c?@?fDaR" B`9?cKc@@NA?q@)@g4D@? 6Z@_qT*@NAH"_T@kaT@bBF@?T!hF# ?`@ccA!@`?[J` @" tДDB7!R?ց!hF# ?` @!R" B@:?ց!A ?[Jp`@@@ccA`?i@BF@?tДD*Rbx @6@NAkTc` @" tДDB9!R?tДD*" B@8?cK`@@@ccA`?[J9tДD*" B8?cK`G[ c c?C{S`Aa@@҂B@!@t@@?ր7`A@@BҁT{BSCC_`@!F@# ?*qT!@a@bBDG@?!hF# ?`@ccA!@`?#@` @" ccD*B:`?`@@@ccA`?#@`G#? dЄA{[*bBAkzs*@}a!  '@?@SB ssDB@!R`?ARB>`?օ@!F(8 ? @@`"R39bB8B #cR@?`E E`DlD` @@* @#6E+s D[c?`  @  @*? @" ssDB<@aR#@`?cYK@WS)sE`?`?`@!G ?@G`@08@?q FT@cC*r6@ D4@`2@h@kgT!D* ?a!F ?@e Rc2@" @B eХD{?'@b2@!RdG?a!(B ? R9@SWcY`A@@BҁT{V[XkZs[_ @@?_`@R`*`?_@_qVz@@hu1T4`@q@z T@ ?t@" ssDB`;@!R`?@" aRB@ @`?@a!(B ?9SW@Rc@" @B;@?@ ?@@@? O`@`?@d @@DMR   Ղha*!b5@|@ @?K @4|~` @hu`?k5@@T@_+@s #@sb[@c@Rk/T`@kITx@X5@H7_@@B`A bBDbB`FbB(BbB4D#BC+BF93G/KW)#kC#@Ra@***R?ր#6+@ck@R!RҀ?֠7o@@1)T@/@ ?@ ?_@@hu1 T ?*4@ @*@4#?*3?@R" B>?@* ?@h7@4@xKB*?֚@ @FT*"@S{!*@!*? @BT&@? @?T"@~:@` @CAh#9@! : 4c**hw44kT@*@2 @@`?@R?y:`@?v@? @b6Ta:` @z!a:@!a:hw45Fc@@c@@!3@" @B R`?`@1T!|D3a!C7!Fs;ҁ!L@?S    ?*4`@kT` @ @!4D@4kT@*@2 @`?@R B.?ր@:?@@?@ T:U{ :@:   `F@1TS@7>5@R B@`?ւDC@:@BhcK h# ~@?_ @TZ:3@ ?7@@?;@`??@! !`@?@*@2 @`?@" RB??@" ARB@`?@" RB `?һ@@k8@A4@,cYssD:3@ ?7@@?;@`??@! !@?*@a!HBZ ?֗*@ @=TZa@z Z@Zwa@- @xKB43 hv4kT@*?֚@ @4T*a@S{ *@*3@@"@"6|@k? @/T&@? @5T@~~Ӂ"@" :@B @#h$@R;`?o@@1T!|D?a!CC!FG!L@W   ?*4`@kT` @ @!4D@4kT@*@2 @`?@R B.?ր@:3?3@@?@"T:U{ :@:   o@hss1TW@85@R B@`?ր D;@:@hdo@!KAh$!C ?k@%~@?_ @TZ:?@ ?C@@?G@`?S@! !@?@ @?`a!4G ?"@?_:`@ @a@@?c@*@a!HBZ ?֗*@? @",TZz Z@Z@6|@?֚@ @'T:S{ :@:[!|D ?bBC@?cF`?bBL@! !@?`8!|D&@ ?bBC@?cF`?bBL@! !@?ր&!|D"@ ?bBC@?cF`?bBL@! !@@?ր"!|D ?bBC@?cF`?bBL@ !?@?@cC*N7@*@4#cc`A`?dD" !RB ?cY!|D ?bBC@?cF`?bBL@! !@?@xKB*?֖@_ @T*z *@*@R" BJ7 z.@`?;W@[ @   @2G@`?R?aT@;@[F!|D"@ ?bBC@?cF`?bBL@! !@?ր"m!|D ?bBC@?cF`?bBL@! !@?F!|D&@ ?bBC@?cF`?bBL@! !`@?ր&C!|D ?bBC@?cF`?bBL@ !@=@?*!|D ?bBC@?cF`?bBL@! ! @?c!|D ?bBC@?cF`?bBL@! !@?!|D ?bBC@?cF`?bBL@ !=@?*@" RBJ7 s. @`?G@3 @2F@`?R?aT3@G@G`GSc?{a! bBAS!@?`@a!DuD ?ր!RB B?ARB>?@SA{è_SA{è_      bBA{CS@A@A96a@?qT?qT`@?qT,@t@!@bB@!(@@?ր  `A@@BҡT{A*SB_a@c @R@RgPA9? *s~SR`G?  {a!E[ ?֠r@qTvjFS6@Xt`w2?֠r@ykTSA@|ҿ9 9F~ [B{Ĩ_ {S@R@q-TujF   Հ&@Xss`?րR@k,T@SA{è_C{[ `AA9@7G7S*c *k *s ?q T`@*bBB@?֠4q@ T@" ccDB R`? R9SHcJkKsL`A7@@BaT{G[IC_` @*bBB@? 4q!TE @R@9 7r@q-T6@2CvN6s" T|@ @? 5@ @kT @@kT@" B RdD?ֿ@R>E  6v"DssN@?! !`?bB`C @?ր @ #?! !`?֠@+?q@ TtJB?q` T6@r?ִ6@@Tr@ r3SHcJkKsL R>gDFc $ BR ?֋@" B RgDFc * BR7?x@" B` R!|D ?bBC@?cF`?! !`?6.@b?ֶ.@@Tb@ b&@tJBR?ֶ&@@TR@@ R!|D ?bBC@?cF`?! !`?.!|D ?bBC@?cF`?! !`?&@GSc k s ?`G?{SssC[c*R`?*!R`?ֿqAz,T**@Aӿq TqTq@zSA[BcC{Ĩ_SAR[BcC{Ĩ_ր@RbBB@?k @RbBB@?kCbBA{CcxDS*[A@ aRBF?*@7?@`A@@BT{ASB[CcDC_c@ aRB?@G?{R  @{¨pD  @BaR  p*Ad$D{c  c ! BkR? P@_q-T{[vCS7R   ՠ&@Xs@"A97?`7R@"9s_klT@SA[B{Ĩ_֠@ ccDBR`?_{ S a!Ab@ @O_qAT`Z@`5 A96`AO@@BҡT{JSK_`@a!F ?`*xrT` @_kTa!D[ *@ ?dDR B?a!hF`b ?[L`EbBB@?`6`j@ 4aZ@k`T A96A9!R 96`AO@@BҁT{JSK~[ v2@u:@q`Tq`T[LOc #Csy9SD~~#9C9 ? ?BBhF@?7s@[LcM@ c @B dDR?NANA?kT@@?k!T@4@4&@&@?k!T*@*@?kT@@[L#~Tw@?*?k!T!C ?*?s@k[LcMT\d$D[ c c c  s c@! `"-R?@G[ c s? {S`Aa@@a[cksab@?qTy9GF XE[{[GwC?k-T`.@Xu@@ @qTq-T ? @ D#BR ?e@?ր7@R@2@`?7ab@?k,TaR@?q-T`C`B @XGuеjFv֎BwExCzZA?k T`&@Xt`@@`?`[@$4`E?@6` @a[@?k%T`EbBB@?`4q`TqTy @kT?@@ F` @o#qTq#Ty;@a!D OA ?*"@HR#D)r%#@)a!F @)) ?"@CR@Q,qTb B BCX`!@ "Q_ q!0 )a#@C? e @fDF  BR `?@`@ cG`?`@?@* ?ֹ7 @`@@?7@Rb@`@c3@? 7aR@?kLT@[Z Rc[k\s]a!A@"@cT{XSY_ ?[Zc[k\s] `@BccDR`? R`9R`;@a!C ?`k@qT`;@a!B ?`k@a[@y @?qAT 5? q T?q T`k@c`@!Cy;@ ?a!A ?րbB@@?ր3O9bBPD=?? =@?ր@bBXE@?@@?* &a )ja!C ?  @[Zc[k\s]bB DB@?bBL@ !@? BBXEA}R@?cch@R*`?yk*y @|;`G?BBCR@?9O$R<9_BB4D<@?bBCpR@?yky @|;@R[Zc[k\s]Ud$Dc c  c! #2R?d$Dc c  c! `B6R?d$Dc c  c! #B>R?@G[cks?`G?{!R D @{¨pD  @BaR {S`A[5a@@!`pE9?``@b@ccC`? 7a@9` @t@ 7d$AcC#?7@R  Յ@*@*!R-@ @R   Յ@*@*AR@t@??cr@aA9qT`6@L#  @B@_ @zATa9cE6 R`9`A@@BT{BSC[D_a!C ?cGB B$`?`@v c@&@d@?֠7bBB@?7c*@3@qTWJER   *?***!RkaTB@@qTWJER   *?***ARkaT3@`@ CcDB`R`?cEc @ DDB R?֒`@ CcDBR`?֊D$Dcc 3c  c! !R?D$Dcc 3c  c! b R?@Gc3?CA!A{S[ c k s @ @7ҀA976 R#`F`C`hF#@wBy9kF6c@_qm.T@XF@ E@XC TДFFuR@AXD`DR5r/@Xz`@? 6`@?a#A9a6c@*'9_qmT/@ya!$9_kT# 6k $T@ !RB!?ւc@Z_kTA9 A9?6S@RqTUDR%@[@4 A97A#A9a7qT@EB@`?[[@B9 q/j!T@c ?/@?_qdDz T@ RB $?րS@skT'@Xs@@?q@#A9*6?@@`+@!@@?@b?@` @`?ւB9b6qTqT @?@ ?[@ 4E`@@`?ւc@*@R?@`?,1c@*`'9a5TS@qmT'@L#  @! A96 aT_qmT/@L"@# A9c7!$A96 !T@ ARB ?`#A9 A9! 6c@R!R*a#9s@ B!!R?c ?@@B#9@@?7#@c ?ւc@_qMT/@L"   @?$9TS@s#@kT7 A9*q @zTA9#@7 A9@7A9`7@A7@@BA)T{GSH[IcJkKsLC_րA9 7@3@a!x@ ?n @T@ CcDB"!R`? R986c@*`@a!E3@ ?`b>b~c@ARC @ DDB@"?!R 94G@|g T'@c H)!@^bb?@#H)~;b~b\D@K@{a^a^ | };~(a!TD ?[@6`#A9k'@`@CcA"|@`?`#A9c@b@ CcDB$R`?l@3@a!E ?/@K@@pGADKS@R A9qLT7**lc@_qMT/@!RL"@c A9! T6@ CcDB@%R`?u@a!F ?րA96@A7@@BT@{GSH[IcJkKsLCpAր@ a7A9#?@a!F ?` @ W@a!8C ?*W@A!A ?*@*cchF`?`@@Rc@ Є @BED?ր@@!4uG@`@6Xt?@F@?kT@BBD@?@7c@_qmT/@L"@#@c@c@c0@# _!T@9!R97@RTD B?ր@bB`G@? @BR?a!C ?֗RD$Dc c  c! WR?ր@ CcDBR`?A9# R9a!4E ?D$Dc c  c ! "bKR?@G?_q̻T  {!RS`A97`R@ab@ ?q-T[VD`&@Xt`@ @@ @"?a&@4 @?kT`R@ab@ ?kTKkLT`.@xa`@ CcDB%R`?[B`@a!(B ?SA{è_[B`@9@6`@ @?qAT@tE@?qaT`@@@?qT`SA{è_`@ CcDB&R`?`@ CcDB&R`?{S@OR@qTujF&@Xss`?րR@k,T@SA{èpjF%{cXbBAS[*a!@?`@@a`R`xG?`>@BBCx9v&@?`BB`C@?` ?`V[BSAcC{ĨNSA[BcC{Ĩ__{kZ*bBASa[c!@?@@@` `xGbR?`>UеbCTCz9y&?`V?`?` ?`!Ra9[BSAcCkD{Ũ SA[BcCkD{Ũ_־  {S"@9d @c@!@b6eA"Rt@b@9!@"9a!(B ?֔@SA{¨_e@"Rca!(B ?SA{¨_{ *A!C ?֠* @{¨ @R{¨_CcA{S[a@*A!C ?֠*cXD 6aR B*?Cb@uе@ ?@`,Dk Z+ s `@,q`T{@kTQHqT`    c@7. aRB@+? @,qT@#.aR?? @*?kHsI@aR B+?@A@@B TcG{DSE[F_A !!H`8`!  !RB@)?֔ c 'Oc@ B +<<? c@'C c`< c c(c c>c c  c( c`( c@( c ( c' c' c'c c/C c" c@A@@BT{D SEB([F!RPD@Gcks ?@Gks ?  { H @B@,{¨aRPD  BBA{CS*[ckv֮F@@ZZKB*@7?@~@@?@"T@A[7@@BҡT{ASB[CcDkE_@?@bT`@[7a!|D ?BBC@?ccF`?bBL@ !.@?a!|D ?BBC@?ccF`?bBL@ ! .@?@G?      O@n9X=_  @`9 9_C!qDЄA{@҄TOcx#CS3|@[*Cn@#`Tzs@C?@SA{è_`G?{S[@@J@!@u@?@7`@N@@?֠7SA[B{Ũ_c`@a!F@ ?qTq TJ@CcA`?`@N@@cC?֠6N@a!F ?qb9T`@SA[B{Ũ@PA֘AbBC#A@??#@@ CcDB1R`?@ CcDB 2R`? {X@ bB@!@A@?f`@!Ra 9 @{¨pFa!B{!@ @` ? @{¨PGR{Ck S[5cs Ck@@ATJB@'A[@+C{@_)`L@@+@A;@y9DXCwF@3@# @@3_ _q T\C@sL3A@`@"!BTV|@?\C@@T ???@ !2@?A@@C`@"!BTT_q TuRD_   @C@Xs@@s@BK@?ր@s@AO@@k T@A'@@BҁT{ESF[GcHkIsJ_DЄ$DC c c@! 1 3!R?@G?  @`@pvGR_/A!A{C@"@`@cctGaR`?@@A@@BҁT{A_@G?{A!AS[ \@"@a!F ?ִb@4CcD;#ER`?}RBBLFKwJB@?s@Ta@94^@ Rs?T;A@AA@BT SA[B{Ĩ_@G;?{CS[@@Av@@` @bBC@?u@`@`*`E9@6@Z@ @_TBBA@C@a*T{USV[W!@p&EA!DF ?6`E96 R`9 @A@@Ba'T{USV[W_` @A!@ ?ր6Z@@?`TDЄD!R B5?` @A!G ?ց@ R`9`E9@7` @!@ @u@@?֠7a @@! @@!@?`6c` @a!F @@ ?bBC@?|g `T^`@CcA@`?OS` @RCGC<_BB C@?6A9`bE9k@T@?@c@ab9ED 3!- B6R?cXcXcs@a!F@ ?|@qTq TBBC@?|g `T^`` @CcA @@`?cXsZCcDR B3`?!Rf9@a! F ?}@CcA@`?RBB(Gk9 z@?7S@ TW@[{A TBBdG@?@6#`?kYa@BB@~a^a^#}(`_AT_/_   {[@@@q TS 6@@w2CuN5Tt@s"@? 5 @@[BSA{ĨP"BSAR@[B{Ĩ_RCcC{S[cks@A!A T@"@ҁz`?BB D@?A!L@  ! 7@?0%@.`|D`F@`C@G`BRUA\KBB B@96z@?qT{?kTj{87:@s}!hs! @?` 7z@{?kT@@`?`@`?@@``@@@?` #OCv@(|@'/ C@ >t|=#ab`??@T@S[;;@?@T@ ?@@?@`? @ !`8@? :@ R3hsj;8;@?@TB[;9z@?q T@(B@:@ ?֘:zjz@qT `9@,D @`Cu2C@z@@_kT@:@Xa@9@a6@ ?@R O* @@= @c@?֚z@:@_qTL:#T@@@?֚z@!R`@a9_kT@ Y9DB9R 9 ?ֵ=z@qT:@@RcXssd@c@ ?րz@klT 4@q T@a! F ?@`?`? RA!A@"@cA T{TSU[VcWkXsY_a!|D ?@@?ccF`? @ !7@?2Rz@?qMT@(Bs?kTjs87:@@Xs@ ?ցz@@@A?ր4#T@@#T@9?qTPb@ RB9 ?֝`@A!(B ?@TO 4`@@@ ?aT@`?`?RR@G?`G?  {BB![*ABBAc@?`-S!R3sDk sB`?>AR`?ֿqT qTB :@ccdG!@`?ր @WGxBY9oGtutj? ?/? ?3y9C@wR ?aR@ @&`*@Z7JB{Z:?z*@@BT`Z@bR@B aZq T qTuo! <@AA!|B ?@ "`2@|j?{2@@bT`j@z ajYA!E`Z@ ?`^` cZ@@B `2@{jab?z2@@T`j@bZ@B aj qTa^@% L9@uV ?aV@ @@`2@>6vj?u2@@Taj@cV@"!bj@`9 9SAkDsE[BcC{ƨ_ր @r1B1#Ausba !6@AA!HG ?@ `*@|Z?{*@@TaZ@"z!bZ!@Aa!A ?@ @`2@|j?{2@@TA!|D ?BBC@?CcF`?BBL@!;@?`2nB:A!|D ?BBC@?CcF`?BBL@!=@?`2mA!|D ?BBC@?CcF`?BBL@!@:@?`*!A!|D ?BBC@?CcF`?BBL@!=@?`2\A!|D ?BBC@?CcF`?BBL@!:@?`*uA!|D ?BBC@?CcF`?BBL@!`<@?`2[BcC{ƨ_@G?"@_q`TR_@ R?@__{S[*W*@?? 0@p@dr@@ks2@ЕSA[B{Ĩ0@R!A!(@ ?ր0@p@SAR[B{Ĩ0@SA[BR{ĨR0@@R{S@A[c  @@Wғ@gVB _@g{<b} |#~E TC`CgRxa!B ?* @kBBBҖ[{G*@?*`?@ZZ@Y9oB@?ր&A* ?`7x4 @*sq*XzT{AAAAV*B?ր@!RCcD B`?րAA!A ?RA!A@|@WA"@cҁ#T SA[BcC{Ǩ_gj;g#~~BBF**@?ր@BBPD@? 6"B4D@?`6a!\A ?*!!D ? @q@TqTq- T#cA|}`?@@R|@ҁ!@9?q_!T@x@#`B'`C+@E/ax#aT{ck!A:T?1TkTvx##@7 ?'@ ?|@@!|+@ ?*@@/@ `?@@A7@V*B^@BB?+R? G{?D$DC  c`!>`",R?D$DC c`!>`?b*R?{ST@@`B?`?`@T*B?`@?`@?`~A?~SA{¨_  {|S@T*B`~Aaz?~` @ A!@ ?` @A!@D ?ր7SA{è_`BU@?`?`@?`@?`@?@SA{è_{S[cksBBA@ CT@A@oSs*Bs ? ?@WRC`?@5zG`?@VD`?SBc AO?b @t ~ttCgxWttttt?[B?OBc# tttttttt?B ?AB#@B \FR?ր? ? @?@ T\МA[B?*B?*BB@+@?@?1A:A:T@R @5D!@B?@R @B!?@ @!B @9R?@@ `T @R\Мo@!?@ngC`@9!  @R@`?@@ @B@CcC`? 7}s@_{@bA9p{AA9}sA_{A[{7Cp{99`?@7`?@ A6B9[{D`?D9`?@[{kA/`?`?@#"BLF@?'@C`?#@/@.7#E9B9?k TOc@ <<=?BR??@?@`?@`?@`?AA!A ?@RB?R!!AoC"@ca7TSA[BcCkDsE{ƨ_[B@?B?!RB?@Pcn! >Gb}8 ~~O+@@@#`?O cB9<<="4c{d*R  kAT&!_kAT_k,T @<@=A"BhFBCDE<=F/?=~@?֠!7@ /@?x@!_<"@9=|@9BB@D9 =@?cG9D9?kaT@#@`?BBG#@?"BCB@?@:Z7D@?@$ЄC7B?#@3@?@Cc@/`?@@@?@#"B0F@@?*#@7@?3@@?@/@`?D9CF9?k TZZEe#/@?ւ#3@?@#@?" T/@ !T+@<[E#?@? @ZZG)R 'C@? @R#@? @WR? @'R? @R? @#R?D9BB|@@?@'@R @?@#@R@?AR@? @R@+?@R?@R@? @BBGUBD@?#9 @?@7@? 7 R@#+@"BhF@?#@7O+@c/ <@<=?cO@#?< <=?#@B`R?/@Y+@'@B#B$AT cO@!?< <=?cO3@3?< <=?#@3@B`R?@!RB@?5"BhF@?@@7@@? G?   { CS A@@gғ@ @!!DF ?`6A~A`~A ~[c`RBvVBnbb Cgxb`~k Tw @  G} T` 5Ra~A5`~A@A!F ?`~A[OcP Ag@@B-T{MSN_`"@96w @w  G#}T@`@#cA`?`~A A!B ?5`~AA!(B ?~[OcP`A!F ?`qaZqZ?k!?q!ğB@|B|AKk TCcD`?ր7 R`"9k`T@`@#cA`? Ag@@Bҁ#T[OcPR{MSNuRR@A!F@ ?qT4qT` @@[cAf@#cA@`?ք@A!LG@ ?~`@!R#cDB`?A!hF ?A!A ?r[s|~AcA!@ ?*A!C ?*O"BPD9~~@?q@z T@94`B kaL9hA)q{_qZA 4` ~=@>wA9 =!9?{`RBcr d k T` @@ 5`@R#cDB`?wRxZ @!Rz@A9=~A~"A9@=s@e9 =?{A{z9px 6v~AkQsR`@!R#cDB@`?A!(B ?A!A ?[OcPsR[OcA9z@ 9#=~A>?=`ZBkAT"BhF@?A 6`B@kT`BkAT@?@6` @`@#cA@`?!!(B ?[OcPkQsR@#cA@`?ր@#c$DA@`?`@R#cDB`?wRxZ @!Rz@A9=~A~"A9@=s@e9 =?{A{z9pxi6A!F[c Gks?$Є$Dk# c`c@!>b=R?{@BB`C@B TB@s~!@?bb @{¨_ {"BAS[6ւ#@? 3sD!R B`?ARB>`?֓@n @`tuCc@`?BBL@! @?@t"BC@?րTb@?`"?tB `&SA[B{è_ց@#cF`?`@G?   {S Aa@@BB@!@t@@?ր7 A@@BT{BSC_`@@*A@"@A!F ?"BLC@? 7 @[qT @ @!42@97@)@DhE? BB(B+@?ր2@9"6B#cA#`?!!F ?ր@CcFTjF#`?*? R 7`@@@#cA`?+@[DD)@2@9NA`7` @#cDB TjF#!R`??A!A ?[D`@@@#cA`?֋TjF#+@ G[+?{[c*(A@@qTVH#RSkY9@:ZwG*s T@*t@* ?64***s@?q!T*SAkD[BcC{Ũ_R*[BcC{Ũ_A!D{ ?!!XB ?q{_{!! %"BAS@?@4D!R B?ARB>?t@!!`E ?ր"B@Ca@@?!!D ?րSA{¨_SA{¨_     {S@BB@@u@@?֠7@SA{è_`@A!F@ ?`@q TqT@^@|?g#T@#}AT@!#cA`?ִ@SA{è_@SA{è@0A֢@@!#cA`?`@PNG@@SA{è@!!dC ?ִ;~]@P2E {S@4*B`@?` @? SA{¨_{S@!!DF@@ ?֠6`@A!B ?a@` 4` @@ [`@A!B ?*d@Ra@b@KkЅ%`E*?6`@*BBLA@?`@a@ d*@`@kAT@Ab @@#cA`? [BSA{è_[@A!F@ ?qT q T5[Ba @@ @A!LG ?b@a@5`@4@[BSA{è@0 D@G?` a@BB@@?a@BBD@?a @`@#clBb@`?`7[[!!(B ?b@Bk$ TT` @CcD`?`@9 7` @BBFa@@?֣ @!R#cDB7`?[BSA{èPA` @v"BAR?SA{¨_{SqT[UL#VRD b@BC @q!TB @@@?b@B @A@s"aT[BSA{èPRD$Є$D# c c! R?{S@ @`@!@BB@@?֠7`@97`@  @a@@5a@BB@@?7R*SA{¨_`@A!F ?`*SA{¨_a@`@A4SA{¨0FF`@A!F @@ ?c@9c6qT`@R#cA`?`@9!!(B ?`@!!G ?A!FR ?{ @`a@97`B9 @{¨PjF!!(B ?`B9 @{¨PjF   {S@ @@!!DF ?`6a A#cA`?SA{¨_`@!!G ? SA{¨PFt@{!!(B @ ?9 @{¨_{@9 @7` @#cA@`?`@!Ra9 @{¨_ {!!&"BAS!@? 4D!R B?ARB>?`@BBPD@@?SA{¨_ {!!&"BAS!@?4D!R B?ւB>AR?SA{¨_{S?q T[V*"BA!!&!@? 5D!R B?ARB>?u@A!`@9 ?֠[BSA{è_[BSA{è_{S@@97["R@9@9`@uB6!!HB ?v@@T#cFbB"B}`?a@`B@`B4[BSA{è_!!HB ?v@@"T`B@ aB[BSA{è_A!|D ?"BC@?CcF`?"BL@!@?`A!|D ?"BC@?CcF`?"BL@! @?`{@ @B@E@ ?q@T&@@@ @`@@ @!@?Ta@!!@!@T@qTb @_qT  "@97"@D@9D7$@DD@$@97$@@5D@9 7D@@ 5$ @@@ TC9#9A@9f9Z`@ @{¨V@`@@@ T @{¨_$$D# c!! 3R?$$D# c!! 4R?$$D# c!! "4R?$$D# c!! `B4R?$$D# c!! b4R?$$D# c!!  4R?$$D# c!! 4R?$$D# c!! 1R?$$D# c!! @"2R?$$D# c!! B3R?$$D# c!! `b3R?{S[6@!!lF@" ?a@ @9 667A97@a @ ? R9SA[B{Ĩ0>Ec"RB@"9!!HB ?֗B@@T@ cCA!|D ?"BC@?CcF`?"BL@! @?B{S[@?qAT@@`@ւ5D4jF`?` @@` @@9997@@5`B@94`@R@?`@9 6`@B R@?`?` @@sSA[B{è_$$D# c!c@! E$D# c!c!  *mR?{S@@!@#@@!@%@DARB*?`"@q T`A~}Ӕ!hua@` @!hu`"@kT@`@ @?qMT @Xt`@ @?k,TSA{è_e=     @__E 0&E0*E  0A0VD  VC0NG  0@E  0A0E  |}@@ ! x`_  |}@@ ! @9_ |}@@ ! $@9_ @{!  @  @a`@ ?~ @{¨__|}B@ c {b S*B@A@?t~@SA{¨_$D# c)!+`+bR?|}B@ c b B @|g_|}B@ c b @ @B@_   |}B@ c b B@R_{|}c S@ s [a@ ?@a@ ?!!@D ?րFSA[B{è_|gSA[B{è_{S*` ~}[sB4 a@A ?`F@BE@?`@a@ ?@~@SA[B{Ĩ_@SA[B{Ĩ_       0F!R0FRC"RCR0F!R0FR{cG !+`?qbR@ @{¨JAR?qT#c Raat@#(@\lAC(^t_=_   R? qT#c c Raat@#(@\lAC(^t_=_{cG !+`?qb!R@ @{¨JA  ХA{S*[c @/ҟq` T q`TЄ$D c *!,,R?*!F ?C?֠7cG!+`?qD`*"R?@!A/@"@cT{FSG[HcI_@t@DҠ?7D@@??@B,@@?*B @ЄD!RB,?G?    @qT{S҂@a~|@Aha !@!@a ?փ@sklTSA{¨__O96?$qT?(q@R!Ѐ R"B`!Q?1TC@B`c R! @@?_ |@@ @ @ R!"@?_?(qT_!6__ЄA{@/# DF_SD [#c .k s  BR*?#@9"4R _|qAT9@85<МG@s;{3CR"@~3`?5~R3 Rr53SG[HcIkJsK!A/@"@cҁT{F_ХD*!RB@.?RSG[HcIkJsKcD!RB-`?RGS[c k s ?{S!A[cC҅@ @**k-T@huBsT@rT R!A@"@cҡT{CSD[EcF_ֆ2@*/`O9A6*Ta"|@A!A ! @@@#@`?օ@kK T@T@ 2@*@@6!HB ?֘@@"T@@%2@RRcO9@!*!!|D ?BC@?#cF`?"BL@! 0@?@@%|@ '@  @d@95$,Dc" AB3Cy?ХD!RB.?RxЄ$D c*!//R?G?{[BLDS@?cTDB0`?5@RSA[B{Ĩ_$E*R*?7s~@HT R@SA[B{Ĩ_֡s+T {[cFkR99[D+/S{Cs0   TT ?5/@: R+@A A)a! !*SA[BcCkD{ƨ_sAZs?+@RSA[BcCkD{ƨ_ BLD{CSA[c6+sD@ҿ~`B@?ր"?`6`@c@`?` 7`@ХD.*B0!R?!A@"@cҡT+@{ASB[CcD_! !:"?@7`@)T!2"?`6aB R%!@9eC9`B9$@?* 6`@ХD.*!RB2?"?7`@ХD.*!RB1?ֱ`B`BR#ctB`?*6`@ХD.*!RB 2?֗`BR$E*?֠bB|@!@` R`B*$ER?֠ c B!|@ R?!Baa vG?{ c BA@@@O"B @@?BL@!3 @?S [ BA!@?ORH"r#R~bbBLD~c~~@? D`61TD!R@3@B6?!(B ?HAO@@BҡT[LSK{JcM_D3@A6@5R |DC FBk9KBsF b@E@B"D`qT`2@*3@1` T 4b@?@Dc?7`@{ ?z@@T@ ?@@?@`? @@@?`3@[ 6HC C@`6G@d;@"B`A!@?#cB`?`kNsO}kNsODmc@D!RB3?kNsOa!!Ev@3@ ?քD!RB4?kNsOOB`C!.@?c@?3@D.!RB5?kNsO9Gks? Gks?   CA{S[*c@ҿ*qLT~@2@A5A 6@v@95,Dc" AB3Cy?2@*3@@kl T @q T`@$@c C`? 7@C@k TJBk8F:ZD9CN@@d$|kTs|@?֛@@T@? ??!9?@d$|kTkGu5C@ R@!A@"@c T{CSD[EcFC_ց@~| h``@D!RB7?R@D!RB 9?RkҚ@!F ?@!F ?BC?`7@kGC@kT@D*!RB7?R!!E@ ?D!RB`8?RkGGkC?{"B @S@?BL@!@:@?!BAk!@?OR r_=@c_= @___q`T q`T!(B ?kDSA{Ȩ_"BB[@С/@?ր@?qT[B[c@@?qTFRhtҖ?@@6BkT@B@_qTҿkT@~|$@qTF6@~|Rk Ta@BKkj TB@@c7[BcC@!F ?#6@3@O9 7s@q T/993CcF7`R{*4`6@kLTcCsE[3@R{Ca@ @94 ?@4{c/qTC@D!RB<?[BcCsE4h`!F ?I G[cks?A{  !!B@O ?S [ CE+@@=  @ L@A@c oGk9sDs{OD<CA @?w"E`?A+" ?@6E_6 @@?A`?@!@?O@~~2~~?@#`?!`=`?`"@n@s*B`?cMkNsO++@RD;@3sbAcK$E?`?#cB`?E`?"!* ?6/@ +@@9qTcMkNsOs*B`?AO@@BҡT[LSK{J_B`C!.@?E`?!+@@#cB`?րs*BcMkNsOs*BB`C!.@?Gc ks?c ksG?{S[A!@@a`""BxbBC@?B D@?BL@!=@?@ P4R$R |C'   #@B@CD_aT!(B ?A@@BAT{CSD[E_BC@?B D@?BL@!=@?R |C'G?G?*B !A{Sc @@[N@?! >?BA!bC@?@?abBC@?B D@?!>? f@`qTd@~|@hch#@c@B ! `?f@k T@?@`?`a:@6?`:a>@?3@`>@A?T[DA@@BaT{BSCcE_@@oGҋ?u&&@`?#?!>? `G[?G?A{CS*[s @'! G ?֟kT3D*B??|c*@@B?DSR?ք3@    @sQ`1aTR@q TCk @C? 1*B9c? @_@ #R@C{@?@ *$?@??ր@kT3@`|Ӄ@kbQabÂ`h`C|@b"! @b  @W@#`?{@*?B@?kIA'@@B!T{E*sJSF[GcHB"A'@@BҡT{ESF[GsJ_* B1?B@?sA'@@BҡT{E*sJSF[GB?DcGk ?@A"0@_T@O9!@`6A87_ D_ @@0@   0@O9_{S4G@#cbDB[V " kZ +bcaR"?"aRsb?Ta@a`@%@d@@`@7#."aRsb?aT*@97BaR?ր"@~c[BcCkD+@SA{ƨ_aRB?     A{c*@q Ts @'FS[VL8k*4R`@?r@zAT5_ q TGbC@*${{qW{?@aTSE[FkHsIA@@BҡT{DcG_GCC   բ@tbb~?ֿ!TSE[FkHsI`_bWqGT@9#C   ? {tW5B?SE[FkHsICGS[ks ?   {S2C!@?AR`4!?֡R4!?ցR4a!'?qZSA*{¨_{[7w *1T*[B{˨_!!Bk ?S W@RR @K|D?CcGsREC<BFG{KBL@OJCR??@9b?qT4z~@?`?_@TsZ:W@ cCqsE7@w@*!(B ?*SAkD[B{˨_?@ ?C@@?G@`? I@?Gcs?       {S!lF@ ?փAqTc|@"!?TxaaT$|@!cTbу|}a BcFB}`?ցA!Q!?@! ?B'@! ?!@ ?BB!@ @?@ARcDB`?ր@CB B G@?@CGc k s ?Gk s ?{ksA _@@҂=/pDD`AB#PAМG? )3S3RND[BcE+B_@s?@*?@?KCR?? ? g@@9qT@#"!`?7Lc@B?M@@? !@g@!.@D$@!RB?־#@`?3@R?+@#4/@++B?G+@s@o@@9q(T@M+@ЄXG?/+@&/@+`@7S!FC ?+C@7@o+@s@@G@@q-T@z|@@_qG@T RO@z|@I   D@kTqT!(? TKya_kT_ TAE@ kT?TO!HB[|@= |||C ?ցDI!I$@AC@|@B T@Rx@pA|"h<~=tBs=~w=KL ХBcLbB*?L@@? a"0aTTXD?ր5_@O+B    S[[\c]?A@@BTK@kDsE{ƨ_@D@.*+B!RB`?AA9?kT`'@CO?`+@?`/@?C@#@@+@+7@`?+@B`C7@G@?+@+7@C@S@@?`/OB~O@7+@=G@d@cCS3A9=C@c9cAf7`?@! G@ ?q7@S@LTK@K/@?֔/@+B?@_D@.*!RB?ցBhA*@?b7@eA9!.DDAƠgD$@&@R@B ??o@7s@+SMRctB+`?*+@1 TM*E"R?@@?+@B1MDTB|@?CT!+?+@ +BK6!|DCOW ?BC@?C@K@cFC`?BL@!@?C@O@W@@B+TЄ$D c*c! R?GS[c?G?{S!B ?[ a@c`D`?c@TAR?`B9(6`@ЄDB!R?R!A ?!(B ?*[BSA{Ũ_!Fc# ?cLEHRr`?`@wDRB?Rw*`@RB 3R?#@cCЄD!RB?#@cCGc#?  {#RCrS[4@AtNvNabNT?TXD?5@SA[B{Ĩ_aN`@D.?*RB`?CRCra@a!$@B @a@@$`@[BSA{Ĩց !&b  {S**nab|=>@?<|B<^tb&= 0@!O97a@R!$@Ba&@! @?kTSA{¨_!(B ?SA{¨_{ X@@9B6!a60@!O96OaBR=?&=@9!*9a@!$@B a@@$`@ ? `y @{¨\!(B ? `y @{¨QOa=?&=@9!29b{S4[*6pc*@#! G@` ?qTf!RxQhQcQBQLqAr@SzAzTb^aA!a@?Rk TRkT`@k T*h @962@O9`6U6#@[BSAcC{Ũ*BOa=?!B&= ?@7nRqR Rҕ*ZQk TBC?a@!  !$@B a@@$`@ ?kT`@`  $@! 4#@a^&SA[BcC{Ũ5#@SA[BcC{Ũ_`@kT!R:* @9"R*9v72@O9@9A39!@C ?`ZTFv?a^ybV ?֊! C* ?d`@D!.%c &*RB@?!(B ?PR*e`@Z*$@b#@[BRSAcC{Ũa{[*cW&@+!D@` ?RArkT!S*k`Td;m@96hQQqITC?@`w7 @ 5xQQ qhT@9 7"RA`*s6@szkTRrk`Tb6szsxQsqTSA;Dm+@[BcC{ƨ_ցxQhQ!QQ?LqSz)T@ qT6hQQqThQq *@A !$@B +@@@$@SAcC[B;Dm{ƨW6C?@`hQQLqTRrkTk` T Qnk~? @G+~ ~l T+~@ T aT o@+~ ex };m@cDBR`?R1"9+@[BcC{ƨ_֠@RcDB`?ֿ+@SA[BcC{ƨ_ֿ"9SA;Dmy @gb@?b9~}#TaC?@`W6Q&@@97bSA;Dm``xQQqhTnaOQ!?Q"R5bSA;DmQ n _)Rj7BM R"9b SA;Dm@+~#`dT o@h+} !~T.@XG!@$c@Ҁ?@C?@`p ~a;{**S*[R*@DB?`@kT`D9t)@6aAobR?kT@@kДK'aC@R=@QkT@ @kЕKbD9 Nb6 >Q<@P?Pއ.aN. ާ  aNaNaN~nn}NN)= &`@RB?' NaAo~!a#RCr`@929a@ RB$@c`&@ @kT!(B ?c&@a@`@b@kTZkTa@`@kTZ_kT`"C9`6`@97@SA[B{Ĩ_B$@@9(6? T!$@?TB !(B_ ?a@ !$@ a@`@& ?`@k!T"9!R b`@XG! c@"Ҁ?րa@ !$@B @a@@$`@[BSA{Ĩ`&@ @q-T``@XG!@$c@?bb{*S*[**@*D**RB?a@R@?k Tb&@)q@@9?j!T`@XG!@$c@Ҁ?`a@A!$@B a@@$`@[BSA{è@?kTSA[B{è_**b{S*!lF ?n*RSA{¨>E  { `aT{è_S*!lF ?@*"RSA{è>E{c{Ĩ_S*!lF ?@`[ւEo@BC?*a*nR6[B!E{!lFS ?ր`9`TaR@" `9T`@ @SA{è>E{!lF  ?a&@3@9!E {S*!lF* ?`&@@97@SA{è>E**@SA{è>E {S*!lF[*c* ?AqMT@RskT@0kAT@*D*ARB@?****SA[BcC{Ĩ>E@*D**RB ?@!HB ?`U@!|ATAR&@ q!|#B@9dtj!)jT@XG!@$c@Ҁ?`@!$@B @@$@ ?SA[BcC{Ĩ>E!|D ?BC@?cF`?BL@!@?**onRrR9   {S*!lF[** ?ևAqT@R!?k T@0kAT*** [BSA{è>Eր@*DARB@?[BSA{è>E{S*!lF ?֠AqmT@RsB0kTC@kAT@*D*RB`?֢`~@_TBˁRcFs~@Ba2B~B0`?֢&@Aq@@9?jT@XG!@$c@Ҁ?֠@A !$@B @@$@ ?SA@{è>E֢nRrR$D c*c!R?{S*!lFc[ ?AkӓqT@|~ҧ@j!@j!@j!!?T!g`y`Z@~.!@C ?@9@29?qT@ҡ9=g~.@\bg~|a^#}jT@a^+}޻^   {[!lFS ?`@>Ea@a@SA[B{è{S!lF ?!F ?SA{¨>E{S[c*ks!F ?!lFD ?&8A`@.R*B?arA`@:|@W7?qT@!`@T#@C6T$D c*c!›R?}Ӽb!HB ?aU{@|_ATbr`cFBaRBB}`?e@crABR`@ccrh<#.?`rAqT   a@`@%$htR@@b?`rAk,T[BcCSAkDsE{ƨ>E!|D ?BC@?cF`?BL@!@@?`~@TҜ{!lF  ?r @{¨>E{S*!lF[*c** ?!F ?ikUz6\)4T)"9>ESA[BcC{Ĩ  {s{FS[ck`?!lF ?=@B0C@?ր5*u@95[BcCSAkDsE{ƨ>ESA[BcCkDsE{ƨ_A "&TB,@9@?@7G?_`?*A "&T!&`TЄXD?֠4@|B`C@?{[!lFc ?ַbAqTS#93CskT@TXs@@zT ?֠5As>R!RbAklTSA#@cC[B{Ũ>EcA{Cs{@[еN@Sc?k`@`?֡!`?`@cdGBC`?cDB2`?Ҁ?`?֡!? ҀҀ?`?֡!`?` cD?R`?ց !&@a!tAzRwcyvux ?֠4RA@@BT{ASB[CcDkEsF_BCAR@?BG@?**!C ?֔4$D c*! c!1`2R?G?G?{!lF  ?`"@!E ? @{¨>E!A{S["@!lF ?`"@!E ?`&@ "2!-@9!6T#*ccG;rD9 @@9qaT`&@@9a6 @!@CR?"?@`A!Ro`&@@97 cF;@@a @9@5!B ?a@cAB `?֠!(B ?!E?`"@!E ??t@?4?aA5?`@*B$@a?`@`Z@?!G ?[BSA{è_{!lF  ?a&@3p@9!Eb   A{ S [ c @O!lF ?@@qMTR@e $@@qT$@kaT$A96!TO!HBss|@= ?ց!IDӁ$A@| T@R{@sA|"3=k<~=wBr=~vs@=`&@+B?`*@?`.@?@cB6R`?@B`C! @?O@=`=@u! GvBw6= ?qLT!E4T)@SA{è {S[$@ c@JB?@Ta@ @8?@"Tb@UW@B`C}@?j5 Fe@(@@@B$ .?e@@cCSA[B{Ũ_!|D#y@8 @ ?BC@?cF`?BL@x@!-@?a@#@ @8?@#Tw@!|D@ ?BC@?cF`?w@BL@! .@?B D@?BL@!`-@?c``G#?!A{S"@!B ?[` @?qTBpF#c@?!,D ?BlG@?B`C!.@?BC@?@! B$D!@?!(B ?!A@@"@cAT[E{CSD_3RRc@#B.#%! A@ ?@"R#? qATB@@ q!TB 3@3@G3?G3?cA{[ !BS c `@? ?րN@CRЄG?cB`?@nG?CcD`?BL@A!@?b!F ?@ @9q@zTqT!@k #s ?RcCCR/?*@7S@ q Tc@7R|R7s? qT! A* ?7c@"Rs? qTB`C!.@?75kLsMBB@??!(B ?A?@@Bҡ#T{HSI[JcK_B`C!.@?cB@acB.ZBCc@?7@! B$D!@?kLsM{B!``?@? qAT@q!.`?@q T5cD҂ARB 0`?!!`?@@q T84c F`?*|S!C ?c@? qAT.c k@ЄD!RB.?Z!!`?cB`?*@7c@ qTB c7RT@@@@qT@& @ qT!@ B0C@? A @@4`@@?@41@@?@ 4"@@?@5 qT @qT c@7R|cD!RB@/`?c@7R|!E ?7@c@s? qTB cc@7RR|!4G ?c@R7s? qT$@@?@5 qAT8@qT! @BE@?c@7s? qTB ce!B ?c@7RLA?Gk s ?@`? 4@?@`4`(@@?@5qT @qT4+@qAT! @"@RDC*?*c@qT4@qAT! @4A#R*?*c@ ! @@R?*7c@ qTB c !C ?c@7R 2@@?@ 5qT @q!T4+@qT! @"@*? qTcB c@)@@?@5 qT @qAT! @BF7R@?*c@.@@?@5 qT4@qT! @BDF*@?*c@2@@?*4@2@? @5 qT @qAT@q; @A!`@?*`59kC** ?֟qAT9BR* ?@@?qqT1TchC**7R`?*c@iGk s ?     {c3cFS*[u2#9#3@jaT@Bcb2 B@c.C@D@B@kaT#@SA [BB`'cC{ŨFҔK?RQr?kT#@*[BSAcCB@3{ŨF#@*[BSAcC{ŨBA!A{sRDS[ckZ3 @aR?JFF@6˔2@Bs ??5@5aR{*?!F ?cE#`?`7 @ IT@yR?kTcCR`?@_@T@T!;"_(T*?qT"d?2DQk"T@QdqT?h R ! *@9qaT@9`5!A@"@cT{BSC[DcEkFsG_2 sG.R`A`?`524R@` qmTd?2#QkT"Q_dqTh R A*G?   *BA#{C@!A@@"@cҁT{B_G?BA{C@?qT!QS#[=+"G`N@`4#?a@TSC[D@+@!A@"@cT{B_GS[+?{[*RDSRck?S   `@9q`4s9*$zR7b@99_qTz-T?s~~j36SAR[BcCkD{Ũ_֔ RSA[BcCkD{Ũ_{ aRB[DSs2t ?s c.   aR?cAcSA[B{è_{SД2B[JBcbCkFs ZD.9CN@ ?|}b`j<`\@?@CT@? ??ց!`3?{t@?֟@BTZ;SA[BcCkDsE{ƨ_!|D ?BC@?cF`?BL@!3@? *qTd?2DQkBT@QdqT?h R ! *_      {S @!HB ?ց@?HT?bT BAhT@BcF`?BL@!@?ր@SA{è_$D c4!@B,R?G?{SZSA*{¨_#RscB?`?*@5ccSA*{¨_{SZSA*{¨_#Rsc\E?`?*@5ccSA*{¨_{*cF `?`Z @{¨__{*cC `?`Z @{¨__  !{S[cDsTjs8*? *SA[BcC{Ĩ_SA[BcC{Ĩ_R_!{S[cDsTjs8*? *SA[BcC{Ĩ_SA[BcC{Ĩ_R_  {kA?qS4xS[~@cBs`Tk*K $T?`5*SA[BcCkD{Ũ_SA[BcC*kD{Ũ_!@9b$QqB@DziT!_T_{  Bhb8$Qqc`DziT{_{_  {Sk! [DcsTks8*? s~@T+TAkt8*? a9"T[BcC+@ OSAkD{ƨ_`Y|@+@s[B@cC+@[BcCSAkD{ƨ_[BcCY*  {S[c#!F ?*:1@T**|@  ?*!!|@7@|@T##@SA[BcC{Ũ_+T@|@T***6`z +!| !|@T|@aR   D _qd qB| c|@"ckcaK!|@_A{CS[Uc*CK@'?cA5`?58cC*#`?v@!*!7A|@BTN!A'@"@cATK@{ESF[GcH_֙sNb+TA|@TG?cA{S [  c Cb@??cA5`?58BA#@?v@*7 |@"TNA?@@B!T{HSI[JcK_֘sNa+T |@TG?  {SAacF`?`!7!#|@T~a@!| SA!|@{è_a6#+T*`ˡc|@c|@N#|@!Taˠ# a7#|@#Ң@|   ?Td_x4(qT"qC b@B|@_BB| A|@_@9R(qT!|@?!!| !|@_c_8(qAT!q# a@!_{[@_TScB@`?`5*7|@#T˖V RSA[B{è_+T|@#T[BR{è_SAR@_(T{ScB@`?5 RtSA{¨_R_R Ձ$@9#Q"cBhqA08T_   A{CS @'cB`?)<<cD`?*!(B ?A'@@BT{E*SF_֠G?`87 R_{!*!A ?֢RBK_ qR K0Z{_ Ձ {cS3[@8q(TVN*SA[BcC{Ĩ_!A4* ?֢RBKR!K_qTR@KCTR RB( Kd@9cF tqT*kT _qDzT" ?qAQ kTSA[BcC{Ĩ__  CcA{S#b@#1@Tu@ @bkA "@B|@_A!| !|@BA@C@!T#@{BSCC_G?{SBw@1T3RSA{è_@@987SA{è_!A * ?֡R!KRcK?qHTT!ITja8!B_qTk TsQ`   C_{Sb@`cF`?ր@sh38@SA{è_cA{S[cck`@ AA1!T#s@8c@A`?@T#@BA@C@aT{CSD[EcFkG_G?  C{S!A[ c k s `@x@"@7ҡ!HBz ?c@bCT~@#9C<=BR!== ?*7{@#~@@!@@B@SA{èA@`@?TB @CD@96A@`@?!T@SA{è_ R9!(B ?@SA{è>EҢBA{CS[C@B @@?BL@!@%@? OBA!#||||||0=@?!tA ?`4!F ? 4A@@BҡT{ASB[C_BCAR@?֢BG`B@?*!C ?4$D c4c@!1`2R?֢B$C2!R@?`5 R2BA@?!E ?G?G? __{SB @@?BL@!%@?`|"R3P"@9@SA{è)G?{[B @S@?BL@!@&@?BlG@?~"RubB9SA[B{èG? {SB @@?BL@!&@?`|" R3P" y@SA{èG? {[!lFS@ ?֟@``@@AT@?T @a!(B ?`@SA@[B{Ĩ>EcA{S@a@#!lF ?k@97+sC   ?k@96+@!ECZ+B   |@@`@ `B974Rt9?ւ@@??`B9 69`?րC@97K9a_@`?a_@|O@mT`B9 7 ?քtB&T2@ @@?bJ҄Ib@FsB|›@KӀ ՄT@`?@4a_@O@?a_@?`B97ACy@@BҁT{D[FSEcGkHsI>ES@֠TF?A`!E ?h!C` ?a_@mЄ$D c4c!#@'%R?֤Є$D c4c!#%%R?֤Є$D c4c!#@$"R?֠G?֤Є$D c4c!#%'R? {!lFS@ ?֡!C R`9` ?SA{¨>E   {S!lF@ ?`B96`N@ TSA@{è>E֡!CtN` ?@SA{è>E{[nFSc@?`B96BwV@?@ T`C97`^@aF@`^`J@ ?`B95>ExC?`B9`7?a>@a`B@ ??`B9@6еCv R`6`B96?`B9`^@ `C97 R`9`9B?`f[BSAcC{Ĩ>EBwf@?TЄ$D c4c@!#(.R?֤Є$D c4c@!#'".R?֤Є$D c4c@!#`*B1R?֤Є$D c4c@!#*1R?{!lFS@ ?`B9 6`C96Buf@?ֿTa^@99`!a^!C ?@SA{è>E֤Є$D c4c!#@'2R?֤Є$D c4c!# +3R?֤Є$D c4c!#*2R?  ѣcA{S*[*ca@ҡ!F ?a!|@? TcG!`,`?@5@R*,C@kZGFs9@{E?G?@DqTT`?BR+y[9@?c @y@b@ y0R ?*7kFsGA@@!aT{B*SC[DcE_kFsGG?C{SA#u@@!F ?#Z@a!A@"@cT#@{BSCC_֠G?C{SA#u@@!F ?R#0@a!A@"@cT#@{BSCC_֠G?    {S[Җck 97ZKF TuTsA4@9@?qjTTSA[BcCkD{Ũ_ց@9SA[BcCkD{Ũ_ѢBA{C@@'S!B ? F ?`k =FL@ҹ9KB [Dcs {DCR3a`#@C? ?@#T`?Ҁ?@@`? @a!`0@?R3a`#@@@[GcHkIsJ @!(B ?SFA'@@BA T @{E_@X s{KF< = |j@x| @k @ ?CR? @@ @9*`?@5R7RKC?kjTR7@`?q@Q#@wK [GcHkIsJ*RGS[ck s ?G[ck s ?{ BC@?B`A@??iT$QRd8_qT_tq Td7Q|@&RRhd8 !*Ax!Q!?dq TkT kLT_qT*cQ1T @{¨_քQj R$Q Rd8_tq!T|@kT qEzkT_ k!TSd     @9#@9B44DQ$q(TfQ$qiTaQ!?dqHT__k R Z_@9_qT@8_qTqT  #@8qTDQfQ$q T$qT4#4 DQFeQhqd0hq0kTT@9!#@955R_q_DQҟ$qHT@8Q$qT$qhT@8Q$qT T,TTT_T@9#@9&kT_ R_@9#@9B5TTT       {#Qq$Cz T"Q_qiT?q$IzT@BQ_qT@~a ?$qTB D@?֢BL@a!6@? ` @{¨_B@BQ_qT@~a qTB D@?֢BL@a! 6@? G?֠@QqT~a @{¨_֤$D a`c!04bR?֤$D a`c!0@1R?{S[@@GzT`@*!HBv ?u@@T`*a@`@@b SA[B{Ĩ_֡!|D ?BC@?cF`?֢BL@a!7@?`$D ca`c@!06R?{S[ck @@Hz T`@KBy*??@"T` @y?x @?@Tcu}cB`?c@d*k5`4a@`@b SA[BcCkD{Ũ_֡!|Dz@ ?BC@?cF`?֢BL@a!@9@?`` @y?x @?@cT!|D ?BC@?cF`?֢BL@a!9@?` $D ca`c!0`8R?֤$D ca`c!0 8R?{S*!F ?*@SA{èm$D ca`c!0"R?{Sb!F ?RP"R@b B`C@?@`SA{è_֤$D ca` c!0@R?֤$D ca`c!0"R?   {S[!F ?R#R@c cB`?`SA[B{è_֤$D ca`c`!0: R?֤$D ca`c!0"R? {SA!F ?R@SA{è_֤$D ca`c!0"R?{SA@`!F ?R@SA{è_֤$D ca`c!0"R?{SAU!F ?cR@SA{è_֤$D ca`c!0"R?{c@ qT[@@qmTk9F+Z[DS* @Xst ?aTT@?@@5@+@SAkD[BcC{ƨ_֠@sk,TSA[BkD+@cC{ƨ_[B{S!F ?SA{¨   {S*q` THTqTq T#R4@!@B0C@?qSA*{Ĩ_"qTqT@"@kTR[Rc@8@@@kTq T2C~}"qT @ @ht!ht? 5@@!@#@_kT[BRcC*SA{Ĩ_@ @SA_k*{Ĩ_ְ6"T[BcC&qAT@R$@_T@!@cB`?q@ @SA_*{Ĩ_@>@SA#~{Ĩ*_[B#RcC$D[ ccac!0#R?@#@_k`TR_q{RBF @?` @{¨_   {RBF @?!T @{¨_ֳsb3! @{¨_ֳ!sb3{!FS ?@ BDjs8@?@j38SA{¨_ {S@@9BFRk@?@94BDR@?@u`˴s@SA{è_@SA{è_֤$D ca`c !@:: R?֡{BD@9 @?{_R_{[Sc #9Da@9 ?ր#@SA[BcC{ŨBa!_8 ?AB!.#$a**!:?`#@SAcC[B{Ũ_[B{ŨB[B{ŨB֠G?{S[!F ?!F ?SA[B{è{a[ ;!$G ?[B{ƨbCc ҘCSk+9O@?֢B @@?a!@; ?v;ДJBAZ?G{F@?@qaT? !?`? ???@+@SAcCkD[B{ƨ_֡!(B ?+@SAcCkD[B{ƨ_֠G? R!A{ C#@GBA#@?qAG@@cҡT{I*_րG?  тBA#{ CC@GҢBA@?R5@ @qAG@@cҡT{I*_րG?{"cҤЄ@ B*?qT|@ҥ #Q?qT$Ú`?qT6B_Tajb8!x!Q!?dqTR @{¨_ Q?hqHT?q TB_T @ R{¨_dqT  {S[3AsF`?7c`?֠ 3@`?`?`CA!.73@@?`? T8FkZgFs9FT T@? ?iTR?@AT`@9qAT(T  cCkDsESA[B{Ǩ_@9 BD@?`@9qAT`@9qTBDE@? F@?!dD ?cCkDsEcC[BSA{Ǩ_3@SA[B{ǨbCcC$Dc kcas`c`!@:@<R? уcA{S+b@Ҁ63B#"B*?@!A@$@aT+@{CSD_cG?{҂B`CS[Rе>@@?֖D9?8R?8R?@[BSA{Ĩ*B   {!lFSB" ?⇎ҥ⻯$c=҂E򄜣#fT%7c7bsazS!|!lA!|!|ATSAB"@{è>E  {!lFSB" ?փNCeAb$!e!DʄBL“s a!R?ք$D a`c!=>"R?{S[c !lF t ?aO)c@` kT`@?kT`F@t|@!HB ?xF@@TcFbC4RB|`?a@`bF@!a!FUX ?ց!BR?Cс!A{Ss[s?ckC D @ҠB??q@TsnF"`?R@qmT?EF@R QCZhay@~@!~?@?`?ց~@R@!Q~q TB96!@ ?J@nFД>E??sV@3@7cD"9`?րA@@BT{ASB[C_րG?{!lFSt ?`A9 7еCt?`A96!EքЄ$D a`c!@R?{!lFS ?ց!Eс!A{CS"@ҁ!lF ?ր@7O[#еG>G ~~~~~~~~?qOmT@T?@Oq T[SA@@BT{QSR>EրG[?ր@9_R_{SA[ckzJzsW&VFK@`@ҙ9E@?ց!EA` ?!lF ?֠CS?֣tT2@|C ?փI@ADsc|ڛcK`  ccTc ?5t@96!E{SP@T!lF ?aZ@` J"TbAX!ESA{¨_HLLH{SH@`@7B?`@?֡!G ?`SA{¨VGքЄ$D ca`c!@" R?  {!lF  ?`@ 7!@??@@` |{t+ @q T!|D/?@!AHB'!@*!D a@ kaTb@@@@kT6|@A@` @"4hw '@ ?e @@Tb@ @@[|{`X @_kT@@ kmT @KV{B#@@?@a! @?` @@ B@?h;" @@`?[kv@C`hz|@`7@@4@|@&@@A[a@*@?@@R@`?ր@@@`?փ@  Zc @a @@k T @B@7c@# kj Tc @K{ T`h`!@"+@?@ @ kmT` @yT@*`?փ@ #@@?@a! @? @?#? @cA`?Ҕ/@ ?BC@?@cF`?@a!` @?` TA?@@B!T{HSI[JcKkLsM_ք$D ca`c! /R?ք$D ca`c!*R?ք$D ca`c!*R?ք$D ca`c@!`4R?ք$D ca`c@!3R?րG?֠G?   {7$|%<@@?kmT@|{@k T{De_ք$D ca`c!bR?ք$D ca`c! R?{C@94@95{¨_ևDF BRd ? @{¨_ք$D ca`c ! +R?ք$D ca`c !*R?C{S*A[c*ksxB@@w qMT`@R@?TaT @@@_. a @95#@6rATkA:TaB`@@!HB ?{@@BT{R`ҁ@||k9P) @ @cB @` T`@Zca#hz7@@!T@@7@a ` @ @dT@*Zc`@@@#*@?6#@*z@#*@?`7a@bB@!ABK" w@@BAT{OSP[QcRkSsTC_@ @!L@` Rb@*@? 6  K@*F`A963@@@? C@?E7@S *ҟ|/  b@*@?`7@u@@9 `4$D ca`c`! =R?֡!|D ?BC@?cF`?ւBL@a!@?`9@B`C@?e$D ca`c`! "=R?ք$D ca`c`! >R?ք$D ca`c`! b>R?ք$D ca`c`!"AR?րG?֠G?   { X@`5`&@!(B ? @{¨Gք$D ca`c!6R? @!D"Eք$D{ ca`c!@bkR? {S[k@ @;S @5;@K@@@6@@ kMTc3Cs!@ )?k TS @?kkT@@` kT@ @3K?kKT;@4K@@`Tc@@T;@@ |{@h`@\ :@ R|$kf&C R|!ka:a@7b@C@4e@!|@@aTC,@G`?aS@96`@3@7v@b @qTVL6@3@!@?֠5 @7@T"TG@@6:@ R|!ka:a;@c@6@@@!@ )?kTcCsE6SA[BkD{ʨ_aS@96!Ra@3@7v@b @q,T;@s@6@$@sFx!@k@T!@|{#"h``@B sk!TO@@@ @zT`@@G`?O@:@A@!A:K@?@cCsESA[BkD{ʨ_a@" @?@@?a@" @bC@@?O@@c@DARBB`?*B??$D cA@c ! bQR?ք$Dc scA@c !PR?O@@ @@RA!D){A7#<"|@@_kT@A|{B@kJTha R{@`_ք$D cA@c!bR?ք$D cA@c! R?{*7%|@@k*T<@|{bE@kTchd R{|c@B @chf$D cA@c!bR?ք$D cA@c! R?{*7@@&|k T@<|{C@kJThd R@T@9@e7{_{B @$D cA@c!bR?ք$D cA@c! R?{A7#<"|@@_kT@@|{"B@kJT"h` R@@ca@7`@`{_B @ _A!{_{_ք$D cA@c!bR?ք$D cA@c! R?фA{CS @@Hb@@@ @kLT@$@?kTB@C@?k+TD@d ?kT@ |{!K@C@ Rh`!{`B@%TB@b7`ha"!A@"@cAT{ASB_$D cA@c!@!R?`G?   фA{CS @@c@@` @kLT`$@?kT@$|{e@GChd R@@d@&@Dx?kTc @k T!|{DCha@c k!T!A@"@cT{ASB_ք$D cA@c`!@B%R?`G? ҂BA{CS@@҂B D@?ւBL@A!@?BA!4@?a!tA ?ր4* @R=`&A@@BaT@{ASB_ւBCAR@?ւBG@?**!C ?ִ4$D cc!1`2R?`G?րG?{S[$@@qT|@!@sTc~{#hcATB D@?ւBL@A!@?`BA! @?ց&@Ra!lF ? @*!E5*@!(B ?*!|D ?bBC@?cF`?ւBL@A! @?*d$Dc cA@c!hR?d$Dc cA@c! BhR?  { ts@o`"@aDcc$A`?~* @{¨_ {S[@V`"@aDcc$A`?~*wV@v*!5SA[B{ĨB@SA[B{Ĩ_  {S!@Z@D?a@?`@SA{¨_{SA@g@&@@qT$@RT@E@AT6@D?a@?t@SA{¨_bB Da@?ւBL@A!@?`a@bccA`?SA{¨_րG?      { @@@@`@ ?`@@a@!@!@!@ @{¨ @{¨_{BaRB`S@wD?֓@[V5.c@@aR?s@[B@SA{Ĩ_a!A{CS[RD@"@tДA?6   c@qmTa @@ c!?`T" @_aTd6@bF@R`:@B@?`F@?7`A@@BT{ASB[C_`G?@!@G  E @ {S[*@ c@#d@ @aTSA[B{Ũ_ւB @cҘO@#@?A!?bBA!y9#D@?a @!@!@ ?A!?V7` @~~@C@b@`?֖@@V6`@9#@2`9cCSA[B{Ũ_#@cCSA[B{Ũ__a @!@!@ ?A! ?G?   CA @cRc@b6R 6b(6 @9c @6 @@d@zB86e 7{B67`b 6 R5{_@_*v@R{_ր@B#@BdD!R?@{S@qTRU @cLsTb@_aTF@BD@?֠7@SA{è_րF@BAa@@?6@:@*@SA{èd$D A@c!.JR?  {S@qT҃ @b~{!Rbs @kT@SA{è_{S@qT"҃ @b~{Rbs@kT@SA{è_{Sk@qTy9F[c[D@@kTS @~{su@u ??5[BcCkDSA{Ũ_[BcCkDSA{Ũ_kD  CccA{S[d@/ҽ`@FA9BЁ!CB @@#c.tT!@T @e`@6`A/@@BA T{FSG[HC_֠@d@BfDB"AR?`@92`9`@6J@#a@ ҄A?a @' @g`@ 7@9@d@!4hDBB@AR?`@92`9a!F ?@@d@fDBRB!?`@92`9ҪgDBARB ?eDBRB"?`G?  {Sa!F ?bA@`DG!@?T!RSA{¨@SAB{¨B#pD!R  {S[a!F ?9`c @`DG@`T&@s@Д2Cs@b@@@?@5b@@?T.@c`?cCRSA[B{Ĩ_cCRSA[B{Ĩ_cC@BdDB#!R?RcCRSA[B{Ĩ_{CS[bd@a!A ccpD @'A! $`?6C @`DG!@? T @ 6C` R9`A'@@BҡT{ESF[G_ca @ @@`DG"@_ T @@qTtFwBk Cs @@5@|{ӵ@ ?b@_cT`@?5 @@@T0@@@   ?y@?cTz@ @?ր5?T @C @@@klTcHkIsJҘ@@k`8qT@ @ cHkIsJ @@@T @T@@4@Ҵa!F ?t @@qTcHn`Gck s ? {6@a!DGB@_{_@_  @!|{_H@F!@@qMT@RRc@T@B @b?kTT_@_ց6@9B296@9!29_D@BFccA{ CSB @[cksa@g@?ց!L@A!@$@?@bBA!0.@?֟KO!@#= ?a @K Oa!$Ea!HB3!|Da!C!FvFE{{[CzZcC9{G K@W@A7B|{Bh<=@?ր6K@O@ `?O@@?O@K@ ?G@@O@@?@ @ ?օ @@T@ ?@@? @@`?@A!$@? `Ag@@BT{MSN[OcPkQsR_ccG`?GK@!@C`G?րG?{[B @S@?ւBL@A!%@?`@U@~bc~0BlG@?@uSA[B{Ĩ_րG?"Rs  RoccA{ d@O9@bBDG@T @a!@E ?a!A@"@cҁT@{B_SOO@9R7@B7`G?Cc {S[c8.ksFA9`A@ @ccD@B{`?ւBL@A! &@?#FA9A"7@"uеDB*aR?֛@q$T#@R@`(B!`FgFRC`DGA'`B    @ @9qAT @9B@4@@?@ @aRBB&?A@@@?T#@aRB.?@@ @6@Bm T@J@@@?[s@ _=BD+@C^wA=B@C@?Ab@(=t= @?@aR@BB(?@ ?@@ 7 (7@#@@BaRB(?@@@ T@ T@aRBWҠ?)@@0@;B@aR{C?@@0@ h{*@sE@9ւk,T@*aR"B+?C ?`A@@BҡT{WSX[YcZk[s\_ր@BaRB@(?@@`/6@BaRB(?֭@*b @"@BC@B )aR?֮'@cJ@ @?@BaRB)?@@ o ̍R rTg#~T@BaRB'?XBaRB'?[@W.cAC   Հ@aR?cAc^Bm#DTB@BaRB@'?6dЄEcҀ?C`CeХDFDBR'?eХDFCDBR'?_@`(BR@n`G?{k!B[ ?Sc @@q TF3L@xcCswJB7D{{CA@ tz5?kMTB @${*BA@???@T?`?3@`?7@A!*@?A@ tz5?k TsE#u|@t|}?ֿ@"Tj4SAcC[BkD{Ǩ_ց!|D ?bBC@?cF`?ւBL@A!*@?j4SAcC[BkD{Ǩ_wJBGs?   {S@cwF[x[D   t@t?TT?5[BcCSA{Ĩ_s@3[BcCSA{Ĩ_ բ {S[ c*@5@7@.eDBB+aR?֓*@@s*@*fD7B.B,aR?֓*@&@qMTk7YzZD.0C9c,Rs[7`,3@#@*&hx%h|aR@?֓*@NqT@ F`k|@?4&@CkKTkDsEsQ*cCSA[B{Ǩ_skx{{DR`?kTR`?`@9@5*@$.*@SAB[BB@+{Ǩ!RpDa!F ?t*@ {Sa!F ?2*@?PqTSA{¨_ր@BccDB -AR`?@dDBARB,?{Sa!F ?SA{¨{S @94a!F ?@SA{è_ s&bB D@?bBL@A!-@?@bB`C@?ր@@SA{è_ s&G?{Sck*@6B0C !&@? 4dDBB/[R?j s@+@&@+?q-TzZF92R@|jt|@?ss@s@?*&@Bk T+@Q@+? T[BsERSAcCkD{ƨ_@tnGa@b@@@@c@cB @`??s@s"@ 4qxS;dDBARB`.?[B@ {S[*c*eqTSA[BcC{Ũ_րBA9@#7.@y B0CA!`1@?ր5@! @94z@_qT2@Bz* ?րz@Qz5*@@5za@I&#@ R3CA!,?`5@u@3@"@s*0@4#@@.@A!`1?`4A!0?@ 4FA973CA!1?ր 4@ @:@@4@9296@929 @@C@`?֡@F@bBD@?֠7#@RSA[BcC{Ũ_`@9qaT`@9 5@B @B`'ccBaRdD?s`@95#@j3C!?ր5F@bBA@@?6@:@R?!?֠5@ @a!F ?A!@1`C#@Q7_#@ 2@BccDB0!R`?p@BccDB/aR`?ֲ{S@[uе*B @T@@c,@C`?@7b@6a@"@9Bx"9?֓@`@c@#b@R[BSA{è_d@b@R {StД*B6`&@ @a&?`&@`F@?`J@SA{¨fƼA{ S[ckKg@@*o9 a @`DG!@?` T @**qTq@ T Aa A@  @@`?a @@g@gB?*@6` @@@a ?֟qF:T`A@@B! TK@*{DSE[FcGkH_*W*` @@@Asog@o@9 6` @[ւ@@hD&.***BRB 2?֟!!.*8T!E@ ?fD*B!RB2?֭d$D cA@c!1YR?`G?d$D cA@c!1b\R?` @@b   {S[c0TBB3<TTdXD?5@fSAcC![B!/{ŨpBBB`3 T#y9[D ?ր5#@` @a!(B ?cB`?` RSA[BcC{Ũ_"B3 T ?@ 4#@R@7a&@bBC!v@!xS#!|@@?ccF`?bBL@!! 4@?v&@`zS~}cB`?t&@ k6u@zS~@}cB`?a&@ Rc@! j4"xS#@B|}a&a?|SA[BcC{Ũ_`@a!(B ?B`A@?a#@ cB`?#@`BB`C!.@?` BB`C!.@?ּBB`C!.@?BB`C!.@?   {Sc3t@WFs"[t_?v@v?RsBL6a!(B ?[BSAcC{Ĩ_[BSAcC{Ĩ_eA{S[ck*@$ `DG @a@?@ T  @ A@ q@ T#$@ `?*7**@a! G ?qT @@@a ?`A@@BAT{B*SC[DcEkF_BB FB @@?.` **@*hDR"B4?a!(B ?;һ@A!F ?`EgB@?*;@@G;?   {"B5S[R@vD?``@ DRSA[B{è_`@"ARB6?@  {S*|bza@&SA{¨_a!A{cc @Sk @R`?z@ `39[B``F[uzFs |М[E `(Bc R@ ?B@A!/?B @@?B@!!3?@#@ 4 @A @b/@?!!3?@ ?R!!6?A'@?qMT8w"RR ?B@{Bhs?B@BsBB@?@'@kTZ@[FcGsIa!AB@$@AT{DSEkH_@G[cs ?     C@ qTB@ R_q"9_c@9aR RCA_@@9!@9?k_   C@ qTB@ R_q"_a@dR RD?qA_@@!@?k_ C@qTxBmB@#~T R"_|g#}T|g#T R"x_ T`_x_JT`_c@R RCA_ ՁRA RaA_  @@!@?_   @`?@BmB+a#`dT?_#T T_@~?__@`?_  ?@^@#~fT_#g#~wJ_?@]@"#="#|FT_#~g#|wJ_{!@ ?֠{_$ @9RC @9k@T_$@9C@9kT$@9C@9kT@@9!@9?k_   $@RC@k@T_$@C@kT$@C@kT$ @C @kT$@@9C@@9J?7kT@@!@?k_   $@RC@k@T_?@^@#~_{S[5@T@@@!v2Cjss"?@5js@jsSA[B{è_ִ@[BSA{è_SAR[B{è_ R !@9PbCB`?@caPbC!@B`c?qa  {a@S?B.4RAt BB`C@?a*SA{¨_   !@PbCB.?A{Sc3@c@CxD[65b77d@9aRq?cA[BBm aTSAcC{Ĩ_cCSA"{ĨB7pDaReR__gD!.{$&"!RB8?ր{_ccD{!R"B8`?@{_{ @9E@9D@9C@9fBB @9?`{_`G? {!!9ccBB@`?`{_`G?{ @ qTTq`TqTbBB @!!9@?`G?qaTbBB @!!:@?ր{_{PbC!bBB @!! :@?`{_bBB @!!9@? {_{! @@bBB@?`{_`G?CHA{c @ K@ sc|w@S[kCR?@zBm#~T T_ TXSD R[EkGsHA!A@"@c! T{CcFC_b#`T T]b#}KTxR?@@GD.**"!RB@:?@SD[EkGsHxT@.HD"**B;!R?SD`[EkGsH @HD.**"!RB;?a@GS[ks?HA{C{@ @ aWqd@`T @aA!A@"@cҡT@{B_@G?HA{C @ b/qd@`T @aA!A@"@cҡT@{B_@G?A!A{'@S[!T@TSC R[DA!A@"@c!T{B_cdt@#R? @cE GD.**"!RB@<?@SC[DcE@GS[c?{RS[cDBB DxO@@?!!<?k`Ҡ@A!C3a!FsWbC7VJB{{D b@%R@A B||9#k"ahya?z`@?|@_@cT`?3@@?7@`?!!`=?`sE RkDSA[BcC{Ǩ_`Gs? {RS[cDBB DxO@@?!!=?@ @ @C3`FkWJBsVbC7{{D ` @|?y @@T@|!ht}?֡@z@!bB k<!@\|Y?֣@"Ra@@k<" ! a`ht`@y??@cT|@`?3@@?7@`?!!`>?`` @|?y @@cT`?3@@?7@`?!!>?` kDsE RSA[BcC{Ǩ_`Gks?{ @a!(B ? @{¨__ {[@S"@t*B  Հ?`@?ֿSA[B{è__ր{ @qTQ?qHT`@a!(B ?~ @{¨__{a!(B@S ?ccB`?@`RSA{è_R_BBA{C@@@ҀRC`@99S3@a@tfF[uеFa@?b@A"Ҡ?a@?b@SB[C@A@@cT{A_SBBB`C!.@?SB@GS[?{S!@? qhT?qHT?qTT! Q?q(TSA{Ũ_BB D[uN@#y@@?!!`??`!@`?q,T#@[BSA{Ũ_?$qTBB D[vN@u@@?!!? @`![BSA{Ũ_a@BB`C@?`SA{Ũ_` SA{Ũ_c!|@$@" @WC v@??!!?? @qT"@|!BB @" @kT@@ @CcD`?!!`?ր[Ba @? qT#@[BcC|@??!!`?@ qTWbC @u~}! @s!hu?ց@j5?kTc#`G?c  {d@DL R{_{S[ck`D$D ! c!`"ˀR?@""Bxb4xS`QkJT*~@y9+B}Ӛjw ?րz` ?`_ TBbwFBѡU}?֟TSAkD[BcC{ŨD$D !c!(ˀR?D$D !c!(ˀR?{S[c7@#wR_1@T_kl TXK{!|@T{ѓ{BBC@?ccF`?bBL@!!`@?ccF!`?֢@ R~@CA^h<=?|?|#@SA[BcC{Ũ_A@A$|{he*ߐqlT_1T{Ӂ|@CcDAR"B`?#@RSA[BcC{Ũ_RDЄ$Dc c! c`!nR?  {S!.S@BB`C@?a@TB[B0W&Db@"?aAc@c@94?b@"c@?aA[B@SA{Ĩ_  {BB`CS[.@?b@_@`TcB@9#6c~WB b @!5?!?cB@9b@}?cCcB@96c|WB#=9c.!?cB@9.b@!ж5z֢ ?aB@9?{!?cB9b@q?cC#@b@_qTSA[B{Ũ_SA[B!{Ũ!PB{[ @Uе2@S3 a_t@sB?@6@9?qTDЄD!R"B ?@SA[B{è_ց@9?q!T @95a_SA R[B{è_ R_CcA{"@a@5BB`C@?A!A@"@caT{B_cc`A#`?@G?  @@5PbCA!xG{ ?{PbC{S @9A@9J@T[A@@kATqmTRWjF@sk T@@!?7[B@RSA{Ĩ_[B@ R[BSA{Ĩ_PG@A{C!.@BB`C@?bBA@?*@7A!A@"@cAT@{A_A!(B ?@G?  @A{C!.@BB`C@?bBC@?*@7A!A@"@cAT@{A_A!(B ?@G?   `lB#~T6 @9R 9_ `ן 9  @#TR_@ R_@@6{ R@ BB`C!&@?@@ R{¨_{@@ q`T"@CcBa!3`?`{_"@CcBa!,`?`G?    @ `TBBB{! @?`{_@6PbC !&`G? @|_g aT@7BBB{! @? {_PbC!`G?DЄ$D{c c!Рc!#`R??D@ T{ @ 9A@bB,@@?֠6 @{¨__A@BB`C@?` @{¨_`G??D@AT_{SA!(B`@ ?~"R ҃ @@c b|"eCcD`?bBL@!!@?`SA{¨_@A{C[!@@ 6@9 7@q,T@A@@Ba T{Q[S! PbCBB`CS!.@?@?qMTO#RcX'DkzZSC9C0?O@ ~B~~~~~~~@??֡@kTcTkU@A@@BҡT{QSR[S_@A@@BAT{Q[S!.PbC@A@@BAT{Q![S! PbC@GSck?@Gck? {bB@S!!`@?A!F ?@TDB!!?@SA{è_BB$D@?@SA{è_@A{C!.cW@@BB`C@?@A@@Bҡ T{AcD_@`ST"Ss&D[5VBk@`?@a!@!B!@0`?@b@@9 5B@9`7a!`;`??9`?@ @@`?@!hxv@`?@!C!@k@hx`B@SB[CkE@GS[k?  DЄA{CS@@d@a@#cA#c @kT`@ccGBR`?@!@9*a5|@R @A@@BT@ R{ASB_xBm#~DTFb#}ї} TAbB0Cs@!`@?5!R`R `@9q@TBB`C R @?ր`@9qTa @94@G?  ?D@ T{S@!@ ?ւ@bSA{¨x_D@AT_@PAB@{ HzS[ T@TJB?ֿ@"T` @v?u @@TtBB`C}@?b@a@j4@ `@!SA[B{Ĩ_a!|Dv@ ?BBC@?ccF`?BBL@!!@?`` @v?u @@cTa!|D ?BBC@?ccF`?BBL@!!`@?` D$Dc c!c !`8bƁR? {S*[c*W@#*BBCaҔ~}!|@@?ccF`?BBL@!!@?84CcF`?CcA`?A!(BZ3 ?#@SA[BcC{Ũ_CcA`?@"$   xd|}ӓ *ҽ@{b Ab@4$@_$jATE|_@_'' N|_\ N?/?/88..>/;>/;;;߇c#@@@BB`C.W*Ab.@? @9.?qB?`@@A@@BT{ASB[CcDC_@G?R{cBBAS[ksE@c@BB D WN@@?!!` ?րS`FVJBzZDY9C b@#R@ B||k"#`@K`@x?|@@T@? ?@`?!! ?`@A@@BAT{B RSC[DcEkFsG_@G?`G?  @@!@?k_   `l @B#~DT7 `ן _q _q _{A!(B @ ?~ @{¨__?@|^ga^ ` ~T|_gx BxBm#~dT"_|g#}T|g#KT"_|gx#}T_B"_xbЂ_Bx_BЀ"_tBmB@@#} @e@Tb+`x qTaTCa#_|g#T|g# Tb+`x q Ta{@ T7cЄ#_|gx#Tb+`x q`T<g#Tx`Ѐb+`x qT<ҿga#gj;g#T{@{@T_@c#_֣xa`Ѐb+`x q!T{@ TCcA{Ce@@@A@@BҁT{A_@G?    @|_g aT@7PBRPbC!@Cc $T ``l՟ cTpBmB'@#|T@`@R Rd@1T)5kT@@B*%__b#㷟 5@xxd@1Tk Tk TR R$b#ad Tbx#~@=*d@k` ADzKT`* A@k TkMT)Rd@1`T*Rkן *6kT A@** Rk)Rן *7 A@i5`@R`@f AkЀkF#|T1k%_ Ad@+`e#bb鷟*TxkEzן,T*)RkTkJT)R@x`@RD$D{c c! c`!` WR?"@@#@ # A##@_kT!@PbC{xBm#~DT]b#}ї}JTCcBa!3`?`{_`G??D@`T{S@!@ ?ւ@b RSA{¨_ R_ {kRZZ#DScXO@s@" @?!! ?3s3@;sE RSAcCkD{ɨ_`@ HB;@|D?4bC[@CC@FG @GzAT`@;@u ?v@@b Tu@R3@~|c @?!! ?@j5"B/;Rc@7 @'ju7@ ?ր|@|@95@ @BdB@9aR"B @ @3@R @?!! ? a@6R@# @Cu@@v ?a@`a"h|"`B`;@?@ ?C@@?G@`?!!` ?`ju" @B` ju[7?7@@[B RsESAcCkD{ɨ_D$Dc c! c! bŁR?[s@G?  GA{[@@/k `B s `c.5FR#Sc X[DT?`5` @jT@* C@A?;@D|@?T|A|D#@UD.*R"B ?"aRB?4@S`7@aR?փAc"B aR?SG@cIkJsKA!A/@"@cAT{F[H_'@GD#@!.S@$&"RB?SGcIkJsK@`@ RR GSc k s ?@"#TR_@ R_@@6{ R@ "B`C!&@?@@ R{¨_@`?@BmB"#`+aTCb?_#~T#`T_@~Cb?__@`Cb?_  {s@@7qa TckZ@@@qmTY9[DRS[5FT ?5 @jTA@*?k TA@|"B@_qAT6h`Җ?|@@3  ?֟TAsSA@[BcCkDsE{Ǩ_SA[BR7@7cCkDsE{Ǩ_R{@ @6|g#~@T#TR`  @ R{¨_"B`C R` !@?` @ R{¨_ւ6"B`C R`  !&@?`#@|^gb ` ~T|_gx BxBm#~$T{@_@Ѐa _|g#}T|g#T{@_@Ѐa _|gx#}kT_{@B_@Ѐa _xЂ{@_@Ѐa _x_BЀ{@_@Ѐa _ {cS[@4k99FZZ[Dzs ?ֿTT@?5`~kDSA[BcC{Ũ_s zs4kDSA[BcC{Ũ__{S!!F ?@SA{èPJF{[c@SRb `BSAcC*[B{Ĩ_7Ft^?ֿ!T TDЄXD?5*SAcC[B{Ĩ_bBcCC@qTxBmB@#~$T@@T R"_|g#}hT|g#KTx_T`_x_T`_{S[3@T@6ֆF?4?TSAR[B{è_TSA R[B{è_uDЄXD?qSA[B{è_֔!!F ?@@q!T{ A@3`@`bB,@9@?6R @{¨_"B`C@?`_@@G?{cWZDSB[k?`44zGR6ֆFs<R *??ATT?@5*SqT4Y8 RSA[BcCkDsE{Ǩ_ 3@GD.k@*"!RB@?@UDv4zGւ.3R"aRB?*?aRs?RqTaRB?֠SA[BcCkDtBm?@#}" `dT }`g~ޏ`Cb>_ }T ~DTC`Cb>_?@ xBm#~DT ~`g~`?_ ~T dTC`?_{[5rcsl@7TBkVvBSTY9F*?qT|@!|@bkb8_pqT?5!*{˜?qTSAkDT{ncK7@R[BcCsE{ǨPE֚b{ ?T{{c@6c{Sc| `|@SAkD`   C@qTqT_@xBm#~dT#`g~T R?_#`T#lT#`]g}T_@a^_`_ C@qTqT_@xBm#~T#`g~TCb R?_#`T#lT#`]g}T_@a^_`_ @" `TBBB{! @?`{_@60bC !&@G?#cA{Dt@S[@+#b@CR?b@R @_Tҁ@?T!!A@"@cT+@{BSC[D_@9b"#cpD! `?@zaT R@"R9` R G?@C@d6qTq@TqaT_@xBm#~dT#`g~HT R?_#`T#lT#`]g}T@@@9_qT@9_q!T@95|g_@a^_`_C{kS[cs<@!!A@'@ 7FVZDA??5@x @ R!!A@"@cT{CSD[EcFkGsHC_<@@a sbW2CA?ր5@B?ր4 ?{Bm#~dT3sD_.*@*RB`?B@aR`?@ E@{@anqT@DXDBҀ?5%D_@Є.*BaR?VZDB?4  G? #cA{S[ D@`@7ҟqTqT q! T!!E@@6@`5ЄES/7@ R!!A7@"@c!T{GSH[I_֤e҄`D@d!!E6@!!F ?@E@c&DF BRD,?!!E6@!!F ? G?!!A{ '@_ S [BTTDXD?ր5@#cDBaR`?֠SM[N*#cpDOk!*"`? 6@ ~T@'D.@*!RB?aRB`?SM@[NkP!!A_@"@cT{L_sZZwB\МERcqT*R?֔ c|@cR@?*6~|avk 8q T ZZGAD=R?mng=`8@@?@@@ `TnT`#oHT CkT#@ q`T@MT@m gcO {   sQybyyy?RmcB!BDt@R?@A|SR?#\S!<S@@999 9SM R[NkPycOsQ?Rm[cOsQX p@C`C` GS [cks?m?  { AS4ДrD[@_"!=? 6@RTvB?7R!!A@"@c T{CSD[E_@bR?6@cTД6@SscB@?qT@q(T@ ?g#T@R|_c=gb }+|+~@@? T@!`8!5`>g#~TV4CacF"!`.?֯cF@B?qmT@ g#~*T@c ~+}@B?qT@cF Gc?   C'A{@@ S[@?aT TDXD?ր4@@B_8_q`T@9_qTDt@!CR?@?@zLT@C<4@ @@9qAT @ARsa `SC R[D!!A@"@cҡT{BC_@DER?CcDA`?@A ` g)T/R@qT  @!RQRbaR @'D @!.$*&!RB?@SC[D GS[?C'A{C@S[c|!@6BT TDXD?`5 t@SB R[CcD!!A@"@cT{AC_`5'D.**!RB?@SB[CcD  GS[c?{kZZ[DS[cB@?ր4"BE@?*@4U RSA[BcCkD{Ũ_֢B T@T@?֠4'D.**!RB@?@SA[BcCkD{Ũ_ _4ДDaRB?@D?@CU .aR?c@caRB@?aRB?!!(B ?֠C'A{@s[{GAS[c#k<sDC`?@`!! "Ҁ?6@`?``@ 7 @ ~~Bm#T#o`go~5U RSC[DcEkFsGC@!!A@"@ca T{BC_֡!"Ҁ?֠7`@ 6 B&TTDXD?ր5g#oWo,T#o`goHT'D.**!RB?` 'D.**!RB`?@ GS[cksC?   {[UZDSckCB?n 5 R_SA[BcCkD{Ũ_ЃB?~ 4SAkDcC[B{Ũ.{S[T`T'DXD?@5FSA R[B{Ũ_D[BSA{Ũ'A{C@AzT@Cb!!A@"@cҡT@{A_ G?{c@S@4*B[?֠^?ֶ_V@"?`@?ֿB [B?SAcC{Ĩ__4*B  C A{/A@@7?q!TA@"BC+!@!!|@@?  D#@?A!L@!'@?Sk kC3@@?q- T!` c W2C!!`C[ s #R@@CC9!||Cc@ qTVha@?qT   @qTjs@@?@@?k-TԂ@|a/X|?֠4@?`5 @q Tjs@@?@@?k,T@@Z@!@?k T[IcJsL/@T@bRSHkKP@? 5 @ q!Tjsq@C9! ?5 @ qTjs+@@!!xS!|@@?#@@?'@! @?`@@?q-T3sbC @Y@!Xx`?֡@ k4C@!ht "B`? @@`h9?k T@@qTSH[IcJkKsL@!!A7@"@cT{GC_@u GS[ c k s ?[ c k s @G?"BA{ CS[cD@g6@D?TB $TR"=T!=TDXD?@5 5R8R'@bA9*{;39?@@F@ RBTSsZD`?4DB $TRB T T`?4D"=T5'@`@B@|D Cs;қ@F@L@7EkY9_C:ZKB!OE'9?6 ?`6@?|ۛ @" T{@`A'@A9|j<9 = D5@cB@0?֟9EO?`7/@@%ХD!.c@$!RB?!!(B ?@kQsRT3sZD#`?qD@!!LG ?4!!Ag@"@c!T{MSN[OcP_ @ ?@ @?@`?@!@?kQsRR94R T#`?qDL4R(!!(B ? R@#cDBaR`?@#cDB !R`?@ Gks?RRR {S[c6k#f@;$A:ZsD@"@?6@#cTD`?*@RDE*?@X7@TB@9q!TBR@b!!A@"@cT;@{BSC[DcEkF_!@"@?֠6 @@c@!R@9lq@TtqTT 5cQDEcKR?+dT@T%D.*!RB?@! T5!Q! "@?@6@RDt@? @!@@9qT!?#CT@u*"RDE?@7~@TB@#cTD`?*@*RBw+ETs%D.*!RB ?@i&D.*!RB?@[ G?{S[c `Tet R9 RSA[BcC{Ĩ_֠`T$XD?֠4'D.**RB8?aRB@`?aRB `?aRB !`?aRB@!`?@BTT$XD?59BTT$XD?53sD.*aRB@ `?aRB `?aRB !`?aRB@!`?֠'A{C@9rs@9a!!A@"@cҡT@{A_ G? @@" `FT0@t]ӄRRRRք7"BB{! @? {_0bC !&@G?    @@ `FT0@t]ӄRRRRք7"BB{! @? {_0bC !&@G?{S[@4Д*B?֠@?ֶ@V@"?`@?ֿSA[B{è_d{ S A@@~ R !!A@"@cT{CSD_#ctB[BR`?6@`B@92`B9a @R@9Q_j T5rD`B@9b."2`B9?R6cOScB@93cB96cB@9b.O@9@"e3cB9?R6cB@93cB9`6`B@9O@9@b 3`B9cF?`B@9OS2`B96cB@9!O@9! @"`3cB9#cpD`?ր7[ERa"!=?7cFqT  OS`6`B@9O@9@b 3`B95rD!"Ҡ?ր7@@!"Ҡ?7@[Ef@cDt@CR?@@_Tw_HTA` 6`B@9O@9@b 3`B9a"!=?7OS6`B@9O@9@b 3`B9 G[c?!!A{S[c%@T"T$XD?@5#cDaRB!`?֠36@ @ 3@ R!!A@"@cT{BSC[DcE_'D.**!RB"?aRB!`?3@@ G3?   !!A{S[c%@!TBT$XD?5#cDaRB`#`?֠!!A@"@cT{BSC[DcE_3`6C@9 7@ @ 3@ R'D.**!RB $?aRB`#`?3@@ G3? !!A{S[c%@!T"T$ЄXD?5#cDaRB$`?֠!!A@"@cҁT{BSC[DcE_3$6 B)C@9A)!* 4'D.**!RB`%?aRB$`?3@@4*7 @`7qT@ @ 3@ RG3?֟qlT C'A{[@ScDt@kscR?@zBm#~dTY3SD RcFkGsH!!A@"@cT{C[EC_|g#}T|g# TA<KFB +#Ҁ?@4AcB&?5k Ts~xT(D.**B*!R?SD`cFkGsHx-T(D.**!RB`)?A #B?֠4AcB &?`5ҾA#B@6? 4AcB@&?`5ҰAB>y@4AB`&t5 Ҥ 'D.**!RB(?֬'D.**!RB'?֛GScks?A"B`B4T@*3sD*!RB@:`?!RB&`?@SDcFkGsH8Z..{S[ck@+$$DC cc!*"kR?@`*#   bcB{hbbkT~{8+Bjy?@@?[@`@t#   ?ր@?_#cFbK!B{`?"BC@?#cF`?"BL@!+@?+@SA[BcCkD{ƨ_  {S[5@@@"4*B  Հ?`@?u@"!!xaa!|@"BC@?BB @@?"BL@!+@?`bCs~@zs?րz3s1AT@SA[B{Ĩ_@SA[B{Ĩ_R! G?  D@@T_ ?D@ T{[c @W@`@ "B@|{`h`!!|@"BC@?BB @@?"BL@!,@?@@bCS`b#Ҡ?րa_?b_88sha^SA #@ | [BcC{Ũ__! GS#? @@q T{S[T@@?q T@P!@ T@_q`TSA@[B{Ĩ_5c@@"6*B?`@?ց@cC?qT RSA[B{Ĩ_cC!"BC!|@@?BB @@?"BL@!,@?@?qTccC   a~|ӂ@w~}sAha?ց@j7@?kTcC R!c@wcC R_ Gc?   @@ q T{S[T@@?q T@P!@ T@_q`TSA@[B{Ũ_c@@"6*B?`@?ց@?qTcC RSA[B{Ũ_"BC!!xS!|@@?BB @@?"BL@!-@?@?qmTcC#  Ձ @!Xv?ց@j3@w"!hssB?ց@ k7@?kT#@!xS!|}| RcCuc@7cC_ G#?  #cA{CS[a@{@*@6@"4*B Հ?`@? A@@BҡT{A*SB[C_ E@Z755RUG?{ $AS [cks!@@_A)87 )(T%RrR_k%TG@@6 _ 7  xv6R6R.; |D+c C/ F3 L@7sD`C?KB7@B#@@*5"?ր"67@ 4HyG @ IS1T@*~@?@TO@}c'#@S@~@`?'@`?֟@T@W@ w!#@[@`??֟@BTz4!C0"?֠ 6V4;@DB/ @AR?G@@!4R+@ ?/@@?3@`?7@!@/@?@y#C04@[G@#C@D?.B0!R?@F4`@u"4*B?֠@?@[!! "?7@*@Q~@?@T+@ ?/@@?3@`?7@!@.@?O@}c'a?@.Ҕ@?'@~@`?֟@CT+@ ?/@@?3@`?7@!.@?@W@ w!?@.@?O Tѡ%Rri`k TERrkTA@y͎R?k T G@ RRH"aT@T$XD?@@5- T@cD!RB-`?@N&45R@6@[ 4*B"?֠@?@[s`@u"4*B?֠@?A_@@BT{L*SM[NcOkPsQ_C@y̍RkTA@9#R?qaTb@@`4*B@@9q!T H@1T* @;RG@@@RR!!(B ?@@RVRG?A{S[c@ҿTB T$XD?@5cDaRB1`?@C @6V@"4*B   Հ?`@?A@@BAT{B*SC[DcE_ 76RG?A{CS[ck s @' ?T ѣ%RrBh`_kT% @)@9 R?)T@ ѣ%Rrh`k`TR@r_kT @@9@R R*R   *RCT@ BC !|@@?"B @3sN@@?!6`?"vcD`?ց!`? @6BT#8"R*C?րz87 @_[83s*B*`?qAzT@@?D.*B 7AR?@qTqT@@5@`?ր@`?@@@:  R!A'@"@cT{ESF[GcHkIsJ_`?@@*#R#@*R @y̍RkaT@9qT  մ RR*\eRMr_kT@@@@"3s*B`?ր@`?@ReRr_kT @R@9tRL@R RR*3 RR.?T@"ѣRrhb_kTERr_kT@y͎RkT@9q!T@@ R@R@@q@zTеF8[D (B   z@?TT?5d}ce `jdhabh!! @<R ?{zz{@y㌍RkAT@9qT@RRRG? R G?{S[ckTBT$XD?4@@?*7&@%?*`73R*SA[BcCkD{Ũ_ք*@$?*@6@@ ? 1T1+T T1!8:_1T1!9:_`8_8_@:_@A @a7@R7#c $!R_T*_R*_{S@`@b5е2C`A@?*`5@*SA{è_@!R{SA[e @@ҿqT @$@CA@@BҡT{C[ESDc!F ?%ХBcB#?@6As@!F ?*cF!A@"@cT{CSD[E_Gc?{bTO@-Tw@MT@TgBB!;@?@{_BB!;@? G?gBB!;@?ր{_gBB! ;@?{_gBB!`;@?ր{_ @  @@ AC@kT_@@96G@@h@*_q T 6_b) =gb} ~xbbJ @~?q T@@9 6>b) <gb| }xi0A)_q TK@ *qM T)}I |G @}H K' }G g@)@|G K' '@@96@RkT@@906b' gG@Kb ~x@@9 6B@@KBK@Rk@T @@9"87(6`@"@KK _ @?qTbb@@9~J6b g`@Kb ~x @@9b/6@ *?qT~bxiI@qT>b xIK@ *?q)D@zAT_{**0 h@@@9!74 @5 @ 4a6@K x@T@5 @4@ @ @@! ){_6 @5@ @K ?x@T@K 5{_֠@K @ @  @RkT@K 7@)KK) @Rk`T?x@T{cSR*[k@9F@?:Z[D6@s ?!TT@? 53R*SA[BcCkD{ƨ_@*@?@7 @4sb{F<[D:@`?aTT?`5z`?74@9C*sESA[BcCkD{ƨ_ִ&sE   {S[c@6@F?v?TSAR[BcC{Ĩ_7$XD? 5"a"6aB@9B@9?kT[BbcCabSA{Ĩ!F ?SAR[BcC{Ĩ_ֿT  {S[5@T@T T@Ҡ  ՂjsBs6js@*SA[B{è_ֿT*SA[B{è_{cS@@kR9F[:Z[Dt@@t ?5 ?`B@SA[BkD*cC{Ũ_TT@?֠5*SA[BkDcC{Ũ_֠U 6u ?SA   {Scs A@?/@b@@ B |{Ahax@SWx#@_ T#R/@@ѡ%Rr`h`kTQb$XD;Bg?ր}5@ДDB aRR?@*@?6F96_IT#@%R/@!rha?k@)TeRrk*TQb$XD;Bg?֠4@{cg'@_ Bs/@._@o(BS BGHB+ Ew`CkrD Cc@q[TA9C"!?M7A9!RR7Qc@B``?*Q*$ER?7?|QJ7s~@GT!"ҡ@!?G67@?@O36@#@ХDB@AR?ֳ6O@c4C`?'@@4BR3K   QCE*"5"?Ҡ7A9T_V7;@AT@Tg@?ր4'@K@ER?* 61`qT1'T7@.C@?{@o@D+@ * B !R?ֺ@@jS@S#?`@S@`?`?Y7'@ 7@@<?@G@`? SG@`?s@B99`;6@=@_@\5'@<Rd@.@<R'@cAgAS@{@ ?A?A@BҡTSA*WA SAcCsE{ƨ_@@z@ET'@8R`@"! ?`6@@'@K@O4@S@ ?֩b@y̍R_kTa@9?q!TRRBRArkT#@?T#@ER/@!ѣrha?k ~TeRMrkTQbXDBҀ?@4@'@@(BRS{@@zT@;I@a ?B@B!@1@?\@@_Q VC@@5UA9T_V6/@sDC@$.!RB `?B !R`?XS@* ?@cAgA]+@ ?@T}CWtG@`?W@`@4|@+@ ?֟@T#TU@G@`?@5+@~@ ?@ T@W+@  ~@ ?֟@T8R?w@`?q@@zT.@17@DF{@9.5 DBR?ց7@ ?րa6OO@@c=?||S6'@@S@ ?!!|D ?BC@?#cF`?BL@!`@?!!|D ?BC@?#cF`?BL@!@?!!|D ?BC@?#cF`?BL@!`@?#Tk@.@?g!!|D} ?BC@?#cF`?BL@!@?CWk@.@?W@6!"ҡ@!?7@"! ?s+TQ%BOB ?7@q5TQc@B``?*Q*$ER?3Q7s~@T!k@.@? @!"!`;?RiS@??3@S@ ՠ?ր@S@ ?@RSyC"?`U6@ A9T6'@ ._8B`C@?O@@@06@Q!"O?ր6X#cCB``?*X*$ER?X37s~@hTc@9q T'@`"@q1@'T{@!RA 8X@X./@DC@B!R\?`@DFc@ BRЄ ?!F ?@"B@C@@?IF?@BER?*`7@?@!!;s+T8:@@S@`?`?M1 T/@.C@_{@7@!R@_DB?&*@zS@ ?+ns+Tk{@ADcgAC@3!7@OD.?{@ ,DBB?< ?`?ֺ @@S@`?`?@:@@@ @@(@q/@@4TDC@$.B/AR?<R'@`@@qT@@FR |{5~~@k"R*qT3@ @b @?3@@a ? @$@R @*c*1TAХtG?1@Ts7BRO*3@@! @*D*1*T @R;* 63A&RCR[*"R%q-T3@$(@ @?3@1Ts@73R!@a ?RқR*" @BG?@3$Dc!` R?$D!`"R?$DC c`!`R?{[BDSR@?!F ?EcKRs?"R*SA[B{è_s.R*SA[B{è_   cA{ CS c d@GG'a7F ?`6@ДrDKBTD[ cRR k sqT3@T/@dR!@y?kT;Eb@#Ҁ?@65!BҀ?7BҙR?`6663@[KkMsN'@G? TAj48G@@Bҡ1T{ISJcL_B!R?7E9@9"67G@'@@?_Ty<8GEBs!BE @`?*E7ЄE*R?Ed@Tc"! ?;*7!` "Ҁ??`6!"Ҁ?7?@*"! ?77{RFcB+`?A*C_*@!(B ?+@y@6R* ?#+@@ ?@qa;a"Ҁ?6@qd@zsQןU3@iT/@dR!@y?kT8!|D ?BC @?cF`?BL@! @?'d҂c@RЄE?E{+eTw!|D ?BC @?cF`?BL@!@?E#4G'@[KkMsNz7FcB+`?ACR*!(B ?}"!`;?!"Ҁ?* 67RW9RRFBB?7F:4cB+`?ACRx?@cRRvF4cB+`?ACRҗ!(B ?+@G@ ?_T`TXD?+@@4   R?@ J*,cB+`?A*Cj!(B ?KB҃ R;@q@ @zT1`T*Y R R***Y@RG[ k s?*cB+`?ACR0!(B ?+@?@?J*{B [DSaR?փ@C "3aR?sa~{Ӄja@*SA[BB@{ĨaRR*B4 q@T_ R"9_O?(@?|  R?|?=  *4 q@T_ R"_O?(G?|  R?|?=*4 q@T_ R"_O?(C?|  R?|?=  *4 _q@T_ R _O?(G?|  R?|?=*4 _q@T_ R _O?(C?|  R?|?=  "{*  4 qT @{¨_B`C@?` R @{¨_O?(C?|  R?|?=__0qT_qB4 T@xqT_0q@RZ_O R! F(|a|=_a@@R!@9A5b@c@@R_CcA{S`@?0q@T?q TmT? qaTS "RA@@c!T{C*SDC_A5O* F~~="@@@95A@T@?qTT? q`T"?0qT  B`@[@е2C`H?ր5`A97 @4"qTb @R @cDB@`?a @`"#@ @b`?[EB Dk9O@@?! ?SR kG`@s"["!cCk9+B@?b_?@6 ?`>@s `A97`@ab @`@lGCF [cKBsМD B @@@c_C A`>@s `A97@@V?@bT@ @V?@T`@{bV@(@U|?6`@ @" @?@ R @?j5U @?@@? @`?! ?@ U@?@@? @`?! ?@@[EcFkG[EcFsHh[E `" @|<@A(@ (t?=[E[EBһ[Eғ[EG[cks?[cGs?A{S [ c *@?0qTq TT q TqmTRk 9C"s МC{+B @*#?@ 6@`?kT*aR?*qT@!(B ?kLsM 5O* F~~=3RA?@@BT{H*SI[JcK_3@`@9 4B0C!@?@5 @`4qT3B Dk sN@@?!@!`?BC8@@?B @@?!!`? qmTs  { s_ T4@R3*!R ?1TO+R*=?*qTd@#f @ *?qT@(@?@@! ?sMR kL @7@qTT q T0qT@BDk R@?!F ?ycG#BR`?@?TS?TkL]kLsM@3RW @ R@_T`8*Tt@ @DR?kL*?O @;BG = =>|?|?=?(,kLS* @ @?k s G?s G?!A?@"@cs AT!B ?   &D!R    {S[c#d@97F"[D@9?qA@T`BC?֠5`f@9!Rab97t@@j9"?ab@9tu!*~69R*#@SA[BcC{Ũ_rD R`j9tBҠ?֠6`BХBdB?a BR`@cE`?qןjTvbB R!E`f9ДD.w @  ?*RB?fB` @BAR*?ּ"A!=?`BХBdB?a BR`@cE`?qןj`Tt@@"?tuЄ$D c"!R?  ЄA{ CS [ c k s@G)!B@R!B 9B+!A(BRZD{kELA? /6kA96qRGER F ?1T@7F#B/?֠55`?3R7gA9@75B(B@@?!LA ?AG@@BaT{I*SJ[KcLkMsN_@ ?` F @`?@@?@ ?ַF"#B?`5qT5@RR ?֧FbB?`4qT@\@!HB ?֟@ T@{F GZ  BB*@?| sBД6D  *@?!R`? GcB`?@cF`?@ BA@?@B(B@?@@?\B(B*|3@;@!.@D$k@{@&RB?B(Bg!A ?@cDBAR`?ֈ@cDB!R`?B(BN!|D ?BC@?@cF`?BL@!@?}@cDB@!R`?B(B-;@@ХD!.{@$RB ?@B(B@?@Є$D c"c@!R?֠@cDB@!R`?B(BG?Є$D c"c@!1R?G?ЄE{C!AS;@ @' k@977@_qT @RB   @9!x8TA'@@B!T;@{ESF_ BC%RB?BXDB#Ҁ?֠5@G? { @BLD@?`a@ R!@9?qaTR @{¨_{ ƴBBA+_C@_?#!B ?2{arDsw!@5b ??@ GB9GFZEEDokRR  @?@s@*@BR ?GCR @?ր?`6!@"?`6H"@B ?66@C@!.@@%@B`!R?{CqT?@kAoAAAAA@x@`4!(B ?A_A@Bҡ!TsA RwA{AA {ƨ_B! ?H'`Q`$`6B!A@@9qTqhTqTQ$qIT   @,!" ?֠6#G@C@RA@9?q$CzT@ "3?6Ht@CR7?G@W@7@ T3@"7?` 67@W@ TJ*cRE? 7@J7c? TB  6@C@!.@D%@!RB`?c@@@B!R?ZS@ W@cB`?@+@@?#PIC@'@A?6@'@!.K@_@%D;@'@!RB?1HbRctB`?* 6HB`A@?G @D@B`!R?@B8@_@@?!@@B` @!RD?B`C!.@?BC9H9B?7@D@B!R?HRE?ּBk+cTdGko?Gkosw{?{S[R@*DB ?ЄTAҁR? cLE@RBsr`?24R#R!A ?@*SA[B{Ĩ_  {S[ck 93CZ+B@?4! 3?@5@?`@95!?5$Ds c"!@!" R?B(B@?`@9@5SA[BcCkD{ƨ_`@942Cs<Ҁ{{?4{ATsE;5sESA[BcCkD{ƨ_sE$Ds c"!@!!b R?  C{A'S [ c *k As @?Ҡ?B @@?!L@#!"@? RHB9FB{GZCD@<BxcV@a ?@UzTc!|D!F E@B #? ?F`?@?@F6@?.RB@#?@~@ ? @ @TZ#kjT3@@T@~@ ?@Ts~}Ӡ~j34s"рN   $@C@D#aTA?@@BҡT{HSI[JcKkLsM_@?.RB@$?@ ?'@@?@`?#@!#@? @!|D ?'@@?cF`?#@!$@?G?G? {S @!(B ?!$G@% ?@ @9qBjE9!.@!B`C@?`SA{¨_{[!BSc ?֠}cA`?!(B ?֠@%=DRB%?SA[BcC{Ĩ_!(B ?֠@%=G? R{"RS@@BlG@?!(B ?@SA{è_cA{ CS d@GBk 9F[ c rD ?%#"?7B`C@?@DRB@&?[KcLkMAG@@B!T{ISJ_@cBbB? 6sA@aT TXD?@4A.TXDҀ?֠5&G5?` ?BG?sN4"R&@BlG+B@??sNҥ%"?7sN+B?!B ?` B!` ?BG??!B ?@@.DF#@ BR?h` ?BG?!(B ?֚&?G[ c k s?G?{ !@ ? @{¨*B  |gC @`E9?@6@A@DBqT@97d4^A#TA";>   R_@K96_dA R?_A R?A" @LA#`N9 A?Ac7!`nJ96A!t@!`A?q`T?qT!@ @nfBaC`@ @nfBB_PAC`@ @nfB { Aa@ @!ABA@?֠6c EAR`?R @{¨_`@cDB'!R`?$D c #!`'b R?{SBtAq TR"B9?k!TSA{¨_zA#`T!A"9 ?ր@SA{¨Fִ@!TF ?`6`Bq {S[@Au@@`@@BqT`"B96A@@B#T{CSD[E_`@!E ?7B5`A96`"B9@7`@@ @!@@B@@? 6@!F@ ?qTq@T!hFc ?!A ?@!dC@ ?ր@!F@ ?q T4!A@#@T@{C[ESD`@&D֠@RcDB *`?!Ra"9!A ?`@A @cA@`?!F ?֕3!hB ?@`|g  TB 5`.@!B ?!B ?*@4B"9 Qq T@!6!@ ?֡B?q TbRAbzA}}+}z!E ?`*B 4`@A @cA@`?3@T@RcDB`(`? R`"9AaR@@B T{CSD[EA|gB?b!TC ?@0 `IT@A@c$D`?`"A963@!@A@c$D`?9!A ?֠@cDB(R`?3@ !F ?!hFc ?3@`@!E ? 6!A R ?֠@cDB`)R`?֓`@!RcAa"9 @@`?3@G3?  {SA@е6B?@`b1T@?aB?qT@ R@SA{è_@@SA{è_SAR{è_ 9`G JTBA@?{[A@vS! >g?m @@"~#`lT YR'TBa?"?@b`@@,@@@?qX@@T@@( TRB97@fTBd"a?" `AbSA?Em[B{ƨ@[B{ƨ_7mR@-B*A-`@"B"c"!"D?ր@qT6A-f@dTB+>"a?@b`@RB +"A`?ր2B9 6@ .@7Dm!"fTBd!?@b`@cD"B@,R`? .@"n~!T`@A`RB+? .@@7Dm6@-.-" { a@? Ta!4D` ?`@bcF!R`?`a@BC@?`@!RBC@?`@I`@I97`@ @{¨Fa@BB@?`@ @{¨F$D c #c`!`',*R?  = @Cn_AޓO=6 {A ! ? 9?y=? 9 4@?(9?=4@aBB B@?aA?~ztS` @{¨_{SA@*B?֟`@a@!@5a>A?q@T!pC ?c EAR`?`@?@SA{è_!E ?7`@*B!@ ?7`@RcDB-`?`@!G ?`@{SA[6@>@T6@>@@> @B@?aT*B?ֿ6:@!G ?ր@@?ր@??րR`"E[BARSA{èSA{è_*B$D c #c!`'-!R?$D c #c!`'-B!R? {SA[uA@v@E@6@ I9!C60A9OG ?`?!(F ?<6CcF?ր?6C!65CA55zCq1Tx@'`@ @#7?q'T!E ?27@@!B ?aB45!A R` ?!(B ?,aB?q0T!@9sB ?*?*OBPD9@?* ?`6B@9`)7A9A9*A9!tS$ **?@6A'7Z2AcFzC`?`A`@97cAqTa@#L# @@5@9b7@96! ?TZ2|{@tiA9` @#dA*}A =*BhD9yB* =?O9`)~~lA?`@* ?ր6{@kT@kT`@!RDB@/?`@!pC ?x@BhF@?֠6 `@x@/!BCc ?zAr@҃A9kO)}s{C9cPC`?Oc cD ||||||||`?B0C@?5!xG*CD9 ?EF*D*cBR$ :?aRB@1?`@!Dw@ ?RB1?BD!R@?z@# LT/aBt@?q!@" ?*cD*`?a@*`BqT!A ?c EAR`?( ??*?*BD*@?RkTBC*@?7!(B ?`@@?qT+B?ARAAA!AA"@cҡTAASA[B{ƨ_x@D@46@4@@RB/?֠6@ RBE"y4@R@?֠6@!@4@ ?6@! A ?!A ?M96 RRAB4D@?pC?z@"+`jD"B:?1!(B ?֥BC@?SBC@?LB@BE!R@?a6@!@ ?* R6SA{¨_`B@!G ?BBB@?RSA{¨_$D c #c!`'1BAR?  {S[A"c EAR`?B D@?BL@!2@? @B\C@aVAR@?@|Ҡ@^gA!RBAaB9"c!`=~*B@?a@`?@ TcD!RB`?a@`@!@ @! @@!@RD?ִt6>v5SA[B{èBց6@`@!@@! @ @!@a>@?R1T@`jSA[B{èA$D c #c@!`' 2FR?G?{@ ",@ @{èr`A @{èB?@A`(@_|g_{?mA@(@|g! T @.PA!D ? `9nA`?Am{¨_|gA`?Am{¨_{S@@!D ?tAt@! A ?ր6@`4@F@96BE!R"y@?!@ ?ր6 @SA{èASA{è_`@!RcDB3`?ց6@BB@?@C!A{CSA"@@B?qTA@@BҡT{ASBC_`6|ҏ*@g!@T;m`@!DnRA ? `9n|g@!oET;DmR`@DB@4?֟9@!E ?ր"A9ARa7A~*9@@BAT{ASB@A@C`Bq@Ta@9n?A!@ ? 6A#mT@@;Dm`@aRaRB4?`@A`A`A`cDRB3`?@ R@m9;DmA`!A ?G;m?G;m?  C!A{CS[@"@v@`E!R?5`@R?5tA@$@97I97`A6@4@!F ?6`@ARcDB5`?!$@ ?!A ?`B 4@!E ?7*B97`BQq T`"J96A@@BҡT{A[CSBC"A97&B96@!E ?@6`@RcDB@8`?`A!E@ ?֟x!A ?`BqT qaT@!E ?`6@`4`@RcDB8`?ցRa!A ?`"J97   A@@BT{ASB[CC_31 T`A@"A96`@aRcDaRB4`?!A ?`B#ya@!!E ?ր6`BqATA9@kT.@#T@9! F. ?ր@@!E ?7"A97@#@``@!D ?7E/A@@BA T6@{A[CSBCB!A R` ?`@cDB6R`?#@9`@*cDRB5`?ַ!A R` ?`@cDB`6R`?#@!@!B ?֠4&B96"A976`@ARcDB75R`?֕&9!A ?֕*9!dA`Bu@ ?ЄDRB7?!AR` ?ր@!D ?%G#?@D_ @?qT*aH!B`aA !@!@ @a_@} @?qT?qT*aH!B`aA !@!@@!C@!@A_@}  BA{S[ cw>EA@oF??`D96R9??A@@BAT{B*SC[DcE_TFky?փA&,TBEt 3@@?aJҀIa@Ds @|K Tc@`?*kF4cBC@?*Gk?{S!lF[c*# ?rD_qmTAs_kT6BXst @T4 @qT @!T?֢rDs_kT#@SA[BcC{Ũ>E R9{Sk@ @q@ T@qTq TSAkD{Ȩ_B DcO@s@?!@9? @q-T9[?C7F;JBbC{D@!@!Xzs}Z?ւ@j3B @kT@S|@?֗@@T`?7@@?;@`??@?[B cCsESAkD{Ȩ_cD`?BL@!:@?ր SAkD{Ȩ_cD`?BL@!@:@?ր SAkD{Ȩ_csG[?CcA{ d@O S $@`@9 6OC`$@ct6u@?|O?|?|?|!CK ?55`2@O97Ҁ&@Х,Fc@5?ր&@! D$@ ?!F ?SKc@@!AO@"@c!T{JC_B D@?BL@!@;@?&@Х,FҠ?ր&@! D$@ ?!(B ?@SK`GS c?G?0@b@9# @@B"Dd| .@{SBD@@?ր2@O96B D@?BL@!;@?@cARCA@`@SAc{¨.FG?{[ !lFS ?cbA`fAbZA kTaE9a7!E!C R`9` ?a@a`@ ?`:A1TcD`>A"9`?G? {S`AafAfZA ?kJTBb7c^A Rh@ @b  @BB )DGab@qTRSA{¨_`@~`dfZA`bA  {!lFS[ V ?a@ @ ԚaT`@T`E9 7@ @*#1TR!E$D c%c!<>"_R?$D c% c!<#_R?CBA{S#2@C@B D@?BL@!>@? D !,D~ ?BlG@?ւ@9cAR_@c)A@@B!T{BSC#@C*BG?G?C{#Ad@@ҟqHT*#H$` R# b@c@q`Tf@@ @?c@ARdG?qT !%!#X``@c"`a@RC)M!(B ?A@@BT#@{CC_CG?@ }   xBA{CS@@B @@?BL@!?@?O @"~t~~=3!tA ?֠4A@@BT@{ASB_BCAR@?BG`"@?*!C ?ֳ4G?G?{  @@@54@!G ?`"@!(B ?" @{¨_$D c%c`!<?BR?`@cDB R`?G?{[coF @# ?"@@@?qT9?E6RS @Xss"?֡F9 ?"@@@_klTSA ?#@*[BcC{Ũ_9?E6R ?#@*[BcC{Ũ_{S!lF @ ?ր"@@@qT@DL$_TC@B c,@AT!E   _,@_ @_   $@@_{S!lF[ ?֓s`?SA[B{è>E{!lFS  ?bfAb5b@bSA{¨>E{S @!lF" ?֔A9!EG?{cCS[ks @3?`"nF(>E? R9sA9EA?B@5/@@9 7A97??9` `T?րsD!R9qmT Ձ7B!X{{`?րsDk,T?!R ???@ ?3@cCSA[BkDsE{ȨC!A{S[ @B D??q T`@9@7RC?`@9`7`>AqATA@@BT{BSC[DC_֡!D ?#cD@`??G? { @$ @{¨ACA{S@![ @)!lF" ?R*!a@|!E֡! F!@a_!A{S[ck@"@x@q TqT*AH #c*Aa 5@u %#!c R H յH@ q@ Tq TqTc@dGR?*q@TqT%Z``@a"9@O@ ?!? a@BlG@?z@@!@ ?!?` @  b@cA`?BA!@?`BdRc"@)!(B ?A@@BT{DSE[FcGkH_c@dGaR?*K{gGc@!R`?*1TqmT`@qATBK@%Ryc@R`?*q@TK@ %#" H!H@ t % HH@GK?@Rz+@k TqT?qDzT!C ?K@k@`@+qTBK@R`?qT@K@a^SAWqT*9c H  @@cA`?K@@qaT@|g|g#~W 4^K@0GK?@} C*A{@ҟqhTS*H$!`" @@[T`&@!C$@ ?`&@@!F ?ER?a&@* $@! D ?1T1 T1[DSCAT@#@Ҁ?SC[D!A@"@cAT{BC_SC[DSCGS[?  xG{c"R?{¨_{B G  @@? @{¨]cDB{SA[cks<@u*@R`^D`?\7ZoFx"@?bA R`9_qT*B_kT`@Xt`@ !?֔bA_kTa@`B@!a@!A{?EB"`?RP!@ ?:@B$C@?@B4C@?@?֤B@qmT@|@c @T@AT&@B&TdBcF! B}`?֠B@abAQBA4*BR`^Aa@6@?b^AcZABabA!Qab@ `^a5`@!PG֢G ?!TG` ?`??`:A1T֪B?`>A??@97B@A9qT@CL# A@!F9!R*_AT7AR*9?`? 6&@!C ?֡R>&@! D ?@?!R9`??@BTE@?֠A@@Ba T{BSC[DcEkFsGG֤6!A ?֠A@@Bҁ T{BSCcEkFsGւB #B$B@?!(B ?4*BA@@BaT{BSC[DcEkFsG_A R9?`?֚$D c%Рc`!<E֠Gc s?֠G?   ѡ!A{ CBlFs @7###@g@?ց'@/C@q TE C % @|BhK@h *'@ @' bH @ |W ?Cx@ ?!@@!!  @ @?T E97@ @CA9 *|S |@Jq$@zA T'@?@zC9q@zT@@@a ?CB9@659#@7'@;@_"AT;C9c@"@@?@@"@`?@@B@R?/@'@ ?@ @?T   @@a ? '@3@ ? R 9] @ ?i+@c+@`?'@aR RC9"A59D7@!A ?SN[OcPkQYЄ$D%c!< "րR?֤Є$Dc!< R?֠GS[ck?{S[*$@!C$@ ?`&@*b.@PE?`&@! D$@ ?RSA[B{è_{S$@!C$@ ?`&@a.@cF`?a&@* $@! D ?*SA{¨_   {S$@!C$@ ?`&@Х@DR@@?a&@* $@! D ?4qࣀSA{¨_`ҢBA{S[cks@@!F ?#УcpD!֖G`?@*ZF[Dzs@?aTT?@@5BT?TXD?֠5!lF" ?ֳA@&q T!PG3R ?ֿR&@pC*@c"?֠#s&TBT1T@9qT`!lF" ?֡A@?k T!PG ?ֿqT}RBxF*@?!A"9`?t:AG?`@_qT`_P1TK!@> `  _dqT!@>! X`__{[*BS**?֠qhTqRjTfqT!lF" ? ҁ@ Ӛ5 !` BT! A ?!@?֙b @cGB@!`?RSA[B{Ĩ_b @cGB@! `?RSA[B{Ĩ_֣cXEs @R!`?b@ RSA[B{Ĩ_s @!/b@?` @q T( TqT qTb @cAB@! _q`?sqTqB> B! ?b@G! ?b @b`@qaT! A`@ ?! ?Qb @! B@?JB@bB+!@ ?b! ?qTcXERs @! `?b@ -b @! @@B\F@?$bB    հ*BְVF  ՠTF{?ajt{|A!G _  @A!?@$@ {S[a!lF W ?ր6@ST@s6!bJa29SA{¨C{S 3[@LA@/ҞLb @u&@sD@F8@EH@)5@G@:@H@CA9)@DX@BA99BE+@?֣c @R`?ց @@ a$T!A ?֠A/@@B!T{FSG[HC_֞@@#DT^F!@!?ր@!`!?ր @!!?ր@!!?G?  { S [ c 7|@ksA A@@OҀB@k TRҡ!(Bs~'Rjs ? @#R&@GRA @@&q !@! ?#LXpC@q THB|DCFL@BCR+[CCX@`|@c|!=!=iAq`TR`> @{¨AJ96!xA ?`@!lB ?{S@t@@@?1`TB`E@?B@@?`*@6@2@SA{è_֡ @BC@?*  {S@>A49SA{¨_a@BE!@@?` @@5E9`6sG"RR`?`@97BRR`?`@9!7SA!@({¨vF֤ERAR?ER!R?  {S@@"@cC@t@`?`B|F@?րE97SA{¨_SA!({¨vF9SA{¨_"R!A{#$@c @a@ctC`? @@"RAa"bJ@@BҡT@{B_ւB`CA!.@?G?{!BS ?֠a @BDD!@@?B`C@?`"!RaJSA{¨*B֠G?{S@E9@6a @|g @A@!aT 5 @!T@@9SA{è_5@96A`BRЄG*#R?֢BGR@?`@96@2`@96@@2@SA{è_֡!F ?` @@@9@SA{è_@@SA{è_֡!F|g ?֠ {S[c@@@BB6@*@?B@@?`*@6@2SA[BcC{Ĩ_@,AqT@@AqT!A ?`@ @!@!@B0C@? 59SA[BcC{Ĩ_ց!hE ?@@!@8@B0C@?5V4BC@?9@",A_qTBQ!@"BtD@?֮4@@@59   {S@@!@cD@u@q`? @zT9@SA{è_ւB@@?`*@6@2@SA{è_  @E9b7?9_ְC@E96!@!@966C?qT_ 7C!R?9_ְDRְD!R   E9A 6{ _qTLT"4_qaTB0GR@? g `T` R @{¨__ qaTB0GR@? `T gBB!(@?@` @ {¨_O g(C||`~=`@! ?gRЄGRaR?_֠G?@A{A A!PF ?`A/@ ~ AW~xᇟ?q @{¨__   рA{CS*[@ )BG@?@1@T@1@TcD#0R`?kcGOcHE--*G`?*A@@B!T{Y*SZ[[_*G?{RЄAS|%[*C@Rw@@#cD`?Ȟ@УcCƀ/jsO(cHEЄ)*7Gw`?ց!AA"@cTC@SA[B{Ĩ_րG?{ХAScD[C#*@*@R`?@d~~ @*hdk`hdcGid8OcHEGk`?ց!AA"@cTCSA[B{è_րG?  #A{CS*cD@0`?֣cCOУcHEЅ@)<Є`)*7Gw`?ց!A@"@cҡT{YSZ_րG?{S[ck?m!A8@*"@W!C# ?` A @ 4[A)ObqmTb@OB)!`_C)@TncDR`?cGЄC__-k-cHEЉJ)))Їa7)Ѕ)**W W  `?ց!AWB"@cATSA[BcCkD?Em{ƨ_/RRRRRA`/RRRRRRA`G?   CхХA#{CS||*[Rv@cD@0`?֣cCejs/@OУcHE)*7Gw`?ց!A@"@cT@{YSZ[[C_րG?{ScA[Cb@ҢB`E**@@?R#cDRQp7@R`?m@l@nNAcC@CkAOcHEJ!Ј)!*aЅ8@*+R*7GO999997Gw 9`?A!AA"@cTCSA[B{Ĩ_րG?фЄA#{CS*cD[*@0R`?@"d~}@cC!hd7G*hdOcHEw`?ց!A@"@cT{YSZ[[_րG?  { 4_qT @ {¨_@!@ ?` R @{¨_O( F|`|=   {; 4 _q T;@S҃c @[Rck3xsbsB$`?/Z[B{ДzF9AXE?`(3   ;@R"*@?7??@R`?@R[@?@c?b@3@?ւ[Bx^ ?֟T7@*@9!* ?֠"@~3SA R[BcCkDsE{Ȩ_;@O F?(?| !?|= R   {3 @q T`3SZB[6@ZEs" М{Fck9R7 ;*? 3@R?7@?;@:^R??@R:_?R+:_?`R:D?R +?!D  ;{zR?Z DT@9 kLTSA[BcCkDsE{Ȩ_  { 4_qT @ {¨_@!A ?` R @{¨_O( F|`|=   ՐG*B@+ ՐG*B`+ *BCG *ABB@G*AbB@B@G*@B@B@G_ *@cb@Gb@GB@_@@*Gb@_*@B@G_*@G_{BS*?|@*SA{¨FфA{CA@ҠS*ctGR`?qMT@cF*`?SB!A@"@cT{A_SBGS?  *@B@F_{AS*?*SA{¨G{ 4 _qT @{¨_րC?` R @{¨_O(0E|` R|={ 4 _qT @{¨_րB?` R @{¨_O(0E|` R|=  {S*B D@?ւBL@!0@?!@ ?b @X@*c@?*!(B ?@*SA{è_֠G?{[*B DS@?ւBL@!0@?DAnG??0G??A??b @X@*c@?*!(B ?@*SA[B{Ĩ_֠G?   { 4 _qT @{¨_րB?` R @{¨_O(0E|` R|=   { 4 _qT!C ?` R @{¨_O(C|` R|=R  A{CAA@ S*@ ``T `TA@@B!T{A*SB@2A֣ctGR`?qT@ ``T~SBA@@BT@{A_SBSG? @2A@*_*AbA"A|_g T2A_A{!BS* ? `T*SA{¨2ASA{¨__A{!<@S* ?֠Ҡ9g `ITn*`SA{¨2ASA{¨__фA{CA@ҠS*ctGR`?qMT@9c@*`?SB!A@"@cT{A_SBGS? *A@B@_q֐@R *@@_*@t RSA{ɨ_ր@B0C!`;@?5 @@qT qT5X@# @z@(=}~A~=SA {ɨ_  @ @ R!B ?`_@/* {!PFS* ? `T*SA{¨SA{¨_{#!@?qT[vRV ruBc7@" S3#1R e @h@|6s f}6|K|6cffc|K|K?"@_kTSA[BcC#@{Ũ_{[AS* A@!`zq T 4!A@"@c T{BSC[D_O(` F|` R|=B @ҁ@?ւBL@! 2@? R ActG`?qTqTqT!(B ? RssB!2`?!2`?@! {!(B ?c @+еZE#R`?R!3?R! 3?@! @!(B+@ ?!(B ?`G+?րG+?pbC!3@"{StBc'D*[6.ks aC3?d_ҕ@?d_$|Ӂ{S?qb3hcA# ?b_86!?bB"SA[BcCkDsE{ƨ_ց!3?SA[B!3cCkDsE{ƨpbC{S[ @@_0q`T@`~3c@d0@|ҠAgT4 _qTSA[B{Ĩ_ւBG@? RSA[B{Ĩ_֖2Cw@ !0?֠4!3?@5AR@ @ @O*C~ R~=!RbB`C!!.@?@@ @ 0@{ 4 _qT!C ?` R @{¨_O(C|` R|=_с!A{ @S [ #@k*"@OAR?֥X@*(qS*BRbЂc@ ?ց!AO@"@cTk@{JSK[L_`G?Cс!A{#c\DS*"@`?փcG*`?ց!A@"@cT#@{BSCC_`G?{S*[`7B0G*R@?b*[B `SA{èCgpCxSA[B{è_{S* 7**SA{¨pCSA{¨_{S*QBC@?**SA{¨pC*@Bp@_qTpC_*@Cp@qTpCBt@_ *pCC *pCC фA{CA@@ctGS*R`?qT`@B0C! 4@?`4@ccC*`?SB@!A@"@cAT{A_@SB@`GS?*AJ96pCB_ {SA $@!PE* ?փcG*`?**!(B ?*SA{¨_ фA{C@@Ҡ4@`S*cE!R`?@b@@9 4cG*`?SB!A@"@caT{A_`GS?A{!8ES* ? `ITn*`SA{¨2ASA{¨__ A@@c F A@b"#DT '#?TF*_  4_q`T _{@B@A@? R{_O(` F|` R|=_{dAS A@A37*`vA#@;!?`v@@F9@7 7##?;Acc T@!^ =#>T R qaT@)`@@b>b xx#_q'$@zL T3A7Aa!AA"@c T SA{Ĩ_@ϨR'8ЇR#>ЁctGAR`?q T#Aq T'A?qM T @)b>bl]b|bB0A*|}+~ `@?3A7A@!^=#>T R`@qT` @qmT  ՄЄC7A;A?ւ`@@6)@ϨR'8ЇR#>Ё##RccD`?sctGaR`?3A R7A3A7A`G37;?{dA A@W Bcgk*o?qTcAgAkAoAa!AWA"@c! T {Ĩ_` A!TC ?$#bAs@Lw@Q>Lq T7RccDPR`?GaAgB@`4)E(A!B#9Ce!(B4$c@c49W_#9#9 ?փcHE*`?cAgAkAoAsAwA8bcAgAkAoA   `Gcgkosw?{S*@!B ?*SA{¨G  {CccAd@*!(F ?ր6ObBPD9#@?`ccDRG`?!/'!@/C ?*c4@9# OcPCd5go +||||||||`?cc@5OccD# ||||||||`?ց!'!C/ ?a!xG ?WcHE*`?BBBBBBBa!AB"@cҁTC{Ũ_BBBBBB`G?C{S`A[*@@/G?@ClA3#?bBC @@?bBC@@?bB4D@?*7**!(B ?`A/@@BT{F*SG[HC_`G?A*` @,A a!A{C@$@`_qT_qT4@ a!A@"@cҡT{A_c@aRq9ccB`?q@ZccB9AR`?qT@O R!@(|a|@=@9a@ `G?a!A{CS@$@_qTT"4_qTRccB`?qT4R_ qTccBR`?*qT4`A@@BT{A*SB_@aBB!("@?֠`O g4RG(||`~=ccB@!R`?qZ`G?րG? {@G c*8p@_ q@TG@*cC{ɨc5Z@q4TSw5[ +kbRs"B544@S[cks3m;mCc-ccA@e@  ``.@=ccA@9`?֠Z@AA@!K9 ,@-R 8A-":4@_bv@9u@b!`96BD*Bx`_q?TdЄD@=T_q=T@6R=T;R?qTAA?kǟR?e @da!G8bB(tG*CK7? ?@`@g ?e@f@`d@1g.@6bB` 9!-w`K 99'97?1@A9ql@9g@9! k@9`h@9 6j@9cf@9c99Oe@9 Є&w!-`@#9eХ`6#9fƠ6dЄ6#97a!@7?#9gw7e#97f8#9ha8d#!97a?!8j@9l"@##9kB)wg@9`@q7#@M}S#%9g1 8'9ƀ/')9? `w 9dK `9-9a!9 /9e9'19B7'@?@^)?39_qqgwfƠ:i59)!:c h79a:d:'997c?c@;;9w K=9AAAKAB9 KKc$_qcPC{9{9{9?9i97?wK||||||||`?B9s@@?qc&q@#`@jJ< 9f`<釟q ǟw c*q@ǟccCbB;9 7  c(Kc'? c-ae!;' `  e @?@ l9c.CG9GG9cRKG99!9cHE dG9999  K7 ? w  K  K`?a!AL"@cҁ T >c-C@SA[BcCkDsE3Fm;Gm{ɨ_:RA A A "5v@9/u@9R7dЄD6RCdЄD9R?z@9@u@7 6R/***A A A 3R%Ru!D*"x`_qT /*RA A A RR**RdЄD /***A A A  `G?E9!6{!CS* ?**SA{¨pC_   CdЄA{CS*[*@bB<@*@?bB|C*@?@`ccD#0R`?7ccX@OCfcHE`,*Gw`?a!A@"@cT@{YSZ[[C_`G?  A@{S*@a!xB ?**SA{¨p@_   CdЄA{!pFS#*@ ?a!HC# ?ECbB`?Ҁ?aTcG*`?a!A@"@cT#@{BSCC_`G?{a!dES* ? 7**SA{¨pCSA{¨_   a!A{@$@%Sb"4_q$TBXG[ccks;m@?cc @R`?@|g T@|g T@ `jTAc@9!!+G?g@9a!@?k@9a!%?C@a!?G@a!?K@_@O@|g !T⣀a!?W@a!@?[@|g aTZ[EaR!v@?М[B(y9_F`xFR@~!T@RBm?4q`b?BB@`?A`!1 ?|g!T|g!aT{bqTo@9a! ?s@9a!`?aR!@?@?qMT3(!QCv|90ւR!u^FZ[BC   R@?`@sBѠ?`@?aT[YcZk[s\;]m@SX Ra!A@"@cҡ T{W_a!?_@",bB\F!1@?@bB\Fa!@?@ `*T6bB\Fa!?@?@|g TbB\Fa!@?XbB\Fa!@?Ba!`?O@|g  TBgO(` F|`|=A`a!? ?iA`a! ?_SX `GS[cks;m?dA{@@ S*BXG#@?+@9cc@*`?SWa!A@"@cT{V_`GS?dA{@@S*BXG#@?@|g  TB0A*@?SWa!A@"@cT{V_SW`GS?dA{@@ҀS*BXG#@? @ `$TB0A*@?SWa!A@"@cT{V_SW`GS?dA{@@ S*BXG#@?W@q TcF*`?SWa!A@"@cҁT{V_a!A ?bB$Da!@? RSW`GS?@* @ qTF*a!A{ ?@ R"{¨__  {!PFS* ?@`a!HG ?|ҟg/ ~T!~9`T@@SA{è_VA@*@SA{è=E9A6B!Q?qT{a!(DS* ?*SA{¨*_   AA{S*Aa!0A ?**SA{¨pC_   AA{S*Aa!$B ?**SA{¨pC_   A @`4@ {!ES* ?**SA{¨pC_{*!@ !@9?qT?qAT QHA?qiT @{¨2A QLA?qTn! ?gq8~#Re@*ARҠ?` @ R{¨_d$D c+ac@!#9R?{`FS*?|@*SA{¨F{Sa!A$@_0q6Tcc,B@T`?C`@cc@`?& B+ @`@#DC B @B bBG@?!R@` @"%5zBm#~ T``F  TBTccDR`?2@Da!C/=g= B@BB()@jg+@Ja!@@eХ_dc9c 9 *@B:'_g @=!EӜ~Ac 9Ӏ=@D$6 @A @@9a!C94g#~@T 'g#~@` B``FaT@@s%`C FxKBҙ9D|O@@`Z;aA@?@T ? @@?@`?a!`?@a`Z;Acy|@u|}??@"T@j5BAT|D `CF`L@ҙ@xKBO3@`Z<"@+@*=@? 6?O@T @ ?@@?@`?@a!`@?O@"R )R9'@ @@eЄ0EcHE3f RO9_g9`?a!(B* ?BBBBCC CC`AB@BAT*SA{ƨ_BBBB "R9';@*Ҁ?zBm#~T!G@! ?@!|D ˀF`L@|C!{uaZ5!{`a?ֿ@T @ ?Ҁ?@`?@a!@?!{uaZ5!{`~@?ֿ@bTZ5!|D ?bBC@?cF`?bBL@a!`@?Z54!|D ?bBC@?cF`?bBL@a!@? xKB`G ?{!BS[u@ ?֠b @ @B@cc`D`? @R@e@D?*a!(B ?qMTSA[Ba{è! D9SA[B{è_րG?   {S[A_qTLT"4_qT@ SA[B{Ĩ_O(` F|`|= R@SA[B{Ĩ_` F@``?_$qT_(qT@ F@``?֖Aa!,D ?bBlG@?֡@BD@?ր A`ctGAR`?*@"{S@qmT qTRa@SA{¨_ 7SA{¨*pGa@BB`C@?ց@`BD@? R_Pl@ ~G#~Tn~#~$Tpn~#~Tn~#~Tg~#~Tn~#~$T@ G~#~To~#~ T@  G~#~$T@ $G~#~ T@ (G~#~ To~#~ T@ ,G~#~D T@ 0G~#~ T`~#~ T@ 4G~#~ T@ 8G~#~d T@  EХ <#+ck ?@Ce`?Ae0@?@@`@xFcc#*+ ck?~~F-_qznD-|vE-e@@dj5R+@J4Rih)!a!49g`f Ơ69e#89#d+ :9ck#<9 @@@>9Rc(#!9#|vG-~Q-+!9ck#!9!9#!9cHE`?IIIIIIIIa!AwI"@cT ^c-cC{ƨ_a!`F* ?#9G@qmTRRD9T909B !( kTq/_qE?k:b|МcA F@c* Yc) ? RR/@G ?dA{CS*A@ҡ#@@`@!,@5[ @@@4@4ccD#0R`?kccGOEЃcHE-DЄ-*G`?[[a!A@"@c!T{YSZ_`5`A@@BaT{Y*`@SZ[[@G[?dA{[ccDSc*@#R`?vA@dB*?qTa!A@"@cT{RSS[TcU_@BB4@@?@4*@G?CdA{A@dBS*?qTSSa!A@"@cAT@{RC_a!E ?*]SS@GS?CdA{A@dBS*?qTSSa!A@"@cAT@{RC_a!,C ?*-SS@GS?p@96@@_CT_֠@p"G֠@PDС@BA!A{CA$@S*4_qTcctGR`?*?qT@*SBA!A@"@cT{A_SB O(a!0E R|a|=SBSB@GS?{S@E9@ 6[b @a@ccCB@6@*`? @96"@cXcC#?ֹ@9bB|F@?c@eХLB*c@*?*a!(B ?7@Xu`@a@dER?#@[BacC!SA{ŨpvFcC#@9[BSA{Ũ_ր@!RCcDbB``?9SA{Ũ_u"@A!F ?ccC`?ccB`?`!.?` *A"J96HCqTARR kT@F64bbp2A_ {S*AA!@@ ?֔4q!T `iT*SA{¨p2AO*A!C R~a~=SA{¨_ւ4_qTSA {¨_SA{¨_   E9a6{S*_q Ta!HG ?*SA{¨$dG*@RR? RSA{¨__  A!A{A Q*A ?qT @{¨p2AE@_qR"RRҠ? Ra @{¨__   q`TTqT qTqaR! |@@`_q@Tq"R |@@`_aR |@"R@`_AR |@R@`_AR |@"R@`_!R |@R@`_{[c@@@+Rx5 @ A9>A@5Sk @@@?qTA@q Ty93CwN7s" Tt@@k!T@96"@ ?`5E96dE*#R?a!@+@SAkD[BcC{ƨpvF@*eХLB*c@?*`7*At}kTY9FxEWbCkTA@a @9`5A@a @95As"?k-T @@A@zht?qTA9?֡As@"?k,TE97+@SAkD[BcC{ƨ_? @@E9A@6#R? @SAkD9+@[BcC{ƨ_C @*R ? @a!+@*kDcCR[B @SA{ƨPF  {S*[@?qTLT 4?qaT @BBC@? qsZSA R[B{ɨ_?qaTOA!p@C~ ?Q 'a!G Nv@ vaNAv*@=*SA [B{ɨ_A@3kT @BBC@?kTbB`E*@?bB@@?O_(`G_|@_|_=*R *#R @ @{|A0@/goTa!DS* ? oT@*SA{èSA@{è__{k7_ qT7@*"AkD{ǨcAb5BR>9SA{¨_{Sck@@3@ @!(@o4a!A ? @3@ t@ts"[VֆFs\МFsB???t_u@5[BsE_q@T_ qT @!RbBTE@? @ccҘDЄBA!?@`G?֣@ 9B! `B1!@p@q T{S_ qT_qTSA{¨OQ@Gb(~x`~x~= RSA{¨_ִt@74@RA!` bBTF@@?BB`C@?`CcBa!3`?`G?_F QqIT{_qR @ARE@A R?` R @{¨_F QqITj{_qR @ARE@A R?` R @{¨_{S[ck@@ @7@:(@a@ @!@CcF`?BBB@?֘ @4+{{cER`?֙ @qT qT@!RBBTE@?@BBC@?*@ccC`?A!(B ?ָ@@Cc @s+@R`?4 @tGA! ?"@! ?#@A!lB ?bB`ER@?@BBA @@?A!(B ?xBB@@?Cc @sR`?Y5ccxF R9!R`?SA[BcCkD{ƨPA֠@DD!RBB?9SA[BcCkD{ƨ_֠@*`?@A!A ?@BBA@?A!(B ?  ՠ@A!A ?v@+@@+@  DA{S@@a +WbC[*?ҠA!F ?BBG@?֠7A!C ?@9qt2q`TCcG*`?**A!(B ?[D+@@A@@BaT{B*SC_@AbB0C!@@?5bBdB# @ @@?@ @ccB`?a!B ?!.?@G[+?{S*[$`@9!5*SA[B{è[B*SA{èPGCc{S*a@CcA[3Xta@A!F ?@Cc@`?XA@@ #@#`?4qaTA!`D ?7` @@@aC ?֠@BBtD@?RA!A@"@cҡT{BSC[DC_A!C ?ր6` @@@a ? @@G?*DA{ CS [ @Gu @?qLT?q T?qT?q@ T 5O_(  F_|@_|_= R?(qT?0qT?$qT-  F@@``? R ( @?q T ? q T  A!AG@"@c&T{ISJ[K_@`x@=|A=(@*?qaTRC  F@@? $  Fv@@@``?A!,Dt@ ?BBlG@?a@bBD@? R @Rc #@Cc,B`?7 @4qT@CcB`? @x?q`T4cL@@AG@@BT@{I[K*SJB@cpZ@@CcB`?~~@b@==#A!,D ?'S@R@" @ @#S?q TcLb@@q-T8FRk Y9[Ds ?@4@s@"kT @@6hwv?_AT!T@kMs@kT  Ft~@@ @P3@?֡@~} @sA!(Bht ?֠@@?k-T @s" A @@hth!@@?kLT!QcL R @s@kM @cRcL@rSD@?`~~@b@==#A!,D ?'5 @ @cL @O!! F(||=~~@b@==#A!,D ?'cLRR Gc k s?D$Dc c k c+As`c`!R?D$Dc c k c+As`c`!R?D$Dc c k c+As`c`!߁R?  DA{S*@bz_qdMzT[2q!T`@xqTA*d[;A!(B* ?[E@A@@BT{C*SD_"@c@DB!!?@@G?3 G[?||EA{g@@=@c@@echd=#A!A@"@cҁT{C_ G?A!A{Sc @w@_ q@TA!p@* ?*A!A@#@! T{DcG*SE@c3pZ@ `C[k!.s @? @?qT@Gx ZZ'D+;{B C# F@ @\Xt!@?@`@BqmT@Ҷ@ ? @@?6@B`Ta@!B?qTA!``? @kT @BBC@?*`:@CcD`?F)qğQ$Dz TTDRsAR?@9?(q!T@95?kj T@.@?!Y K?qT?q:| ן|K9K8QkbKZ⧟?q TCc(A*A!`?_q T* AR?ր qAT@9K Q**R*AR?qaTKV*Aa!?k TA!(B ?@@A5@@BT[F RkHsI{DSEcG_ր@@ ?@94@BT !`?lbKABK!B?!!F ?*A!(B ?@9K G[ks ? G?_ q@Tw{S4@@!!F ?Cc@`? @@B@` RSA{è_ _ q@TW{S4@@!!F ?Cc@`? @@"@` RSA{è_ {A!CS*[W ? q T*q TkE9`7q- Ty 9+ #S@HFcA!|C `'?8BsR@BOW*B@C G@*@?K@*@?O@R ??@??S@_k"{C@??kTcCsEW@kD RSA[B{ͨ_W@**[BSAc"{ͨpZ@֠@W@@R?qATA!PF?m ?@`@A!(B ?ֿz@CC@?bB @@?A!L@A!?@?W@ks:@@@q TV2Cc,@@{k TA@`|$@ qT h`@qmT@8c~tR4 ?qT?`5y@ sB#Ta @@?qT?qT?ր5o@sB#aT!`ԥoן4@"B D  @??@A!@? #cB!!``?֠@!!HBz ?ִ@@TzAcW@_E !|{Z@j<=z?5o@a^A!A ?*cC RCcxF9R`?BBDA!`@??FmsEA"BBA!`@?79A!|D ?C@@?CcF`??@A! @?cks@G?{S[cksC t @ A>@@Ҁb@9v@@6@bA9!!F ?`@{! @!"B9?@zA"TA!B ?`#b@R@B4@CcdG`?g @C`R(R(A@DB:R!?|?|?|\T=F@qaT A9Q@9W _ 39!!lFs9c ?a@C@9"9BBG@?@!!t@ (?=[Bu6@Rb @@DTE?*A!A ?3*@|S[BR@[B@R[B@@[B@[B*"R  *R{  #cA{Scd@ qTT$qT0qT@#Cc,BC`?A"B  T@!!F ?#cpDA!"`? BCc|F`?@ @4qT U 4qT"B D[UN@@?A!!?8Ca@V@!|@??A!!?`kҁ??A!"?`@ qT:ZcCs ;R @~}a@*!hx|@?a@ k8@!hx6@?a@ k< ?kTsIR [FkH R!!A@"@ca T{DSEcG_O?(  F?| ?|?=@@qT[е+6*A  a@~}Ӕ"hchc?a@?kT[F TDXD?@5@@b@ @%EX@Rc0:?ֻ @"B`C@?`"B`C!!3@? @OA!C(||=@ G[ks ?k@Gs ?$A{ S [ @W5@_0qATCc,B`@C`?@9qT@9?q!T @95A@@@!!F ?`5` @ 4O @c@#GR##!.E,DC<$| b|BW=?#cA`?@"44`@@c @ R*@A!(B ?qT@9qT AW@@BT{K*SL[M_֠ @9 5A @` @a @*R3 G?  {A!AS* ?`7@|{@B*SA{èB@l@SA{è_*@Ba_*@bBd@X_{S[6R@t@@(@*CӟkTqzSE979SA[B{Ũ_;ma@-(@@ CA?@``@+~  T @|g#`T m qTq TqA T g"B0GR@?@`DЄGA`**aR?!nBBGן!@?`@96@2`@96@@2@SA[B;Dm{Ũ_A!F ? m qAT!`TA`*DЄG#RAR?A!F ?!`BBGן!@?A`#R**DЄG?!`@@SA[B;Dm{Ũ_"B0GR@? g**#R+`A!PF ? `T)`/!]@@;DmgE9A6{A!AS*[c ?*A!C ?*1kT qTlT4 4q!T RSA[BcC{Ũ_֟q TqT CxA#?@``@+~ T @|g#TA!F ? qT@K7qUz T`@B@5q AzT`>A`5@R`>A!A ?#@"BHF*@?֠SA [BcC{Ũ_Q~O*b G~vm@`@Cg@x#`*@z T 4Д~CR? `Z*?|g T#@!!C ?#@#@DЄGRRR?#@ Ru`94Д~C*?@`|g T+T4Д~CA!F ?8o`@@#~LT+T_   {[cA@qmTS\@W2CuN5 t@@96 @?@4s"TSA R[BcC{Ĩ_ց@BBG@?*R6SA[BcC{Ĩ_@AR#cD"B"`?ASA{S  R7SA{¨_Af@qTg\@|@cTxc@AT@T@96@9b{!R"B@#@#cD`?`{_{S[*cksBB @AY9O@@?!!# ?`g@5bCg??_@~xt!!HBÀzwv" ?֔_@@bT@0E$ғ!c9|@SA[BcCkDsE{ƨA!|D ?"BC@?CcF`?!! $ ?_@G?{SA C?@`@`+~#`T @|g#TA!F ?ր @SA{è_ {cWBS8[#   zv3b@s"#֚  C@9qTB@95b@ߦT#@SA[BcC{Ũ_֤`6 {SA@b@sRC@9qTB@95@*SA{è_։@7bB*@SA{è_F@B{S*[ dA`@@#cAb@7*?A! G*`@ ?q-T@*%҄_0qHT šT_0qT@@_0q T!!A7@"@!T{G*SH[I_O3C||="qT*qT"B FB @B@?`@a'D*R"B$?!!(B ?BBC#.`@. G?   {RRS[c@@@9@@@ Ay*q@T 1TqTSA[BcC{Ĩ_%hA**#c %?t9SA[BcC{Ĩ_%hA**#c%?9SA[BcC{Ĩ_%hA**#c%?9SA[BcC{Ĩ_   *@7  {S[ck*sA5@2@<@q T@V2CtN4 T`@s"?@5SA[BcC*kDsE{ƨ @%ХDAR"B`&?2@!!HB ?@@T2@"@b 2A!|D ?"BC@?CcF`?BBL@!!'@?2@"@b 2!!A{$@7_0qTSCc,B`@#`?@B`T" T!"@(TT$XD?֠5!RCRTK5ZD?4@B TK@K@RR!@`|@!!"@"Aq- T@|@c@ Txc_aT@cO %,D"B`(||=?a @b @zSH!!A7@"@caT{G_ր@Aq-T@L$! ?@T"@@@kAT@@9`7! ?TSHT?5K@R#R`T$XD?4@K@@RCRSH@$$DKC c+!c!`R? GSK?C#cA{d@74STДB[ c *W2Ck cgB?*@5@;@@@B)@q T_qRZ *4q @s85`* SH[IcJkKc@g@ A7@@BT{GC_;@q TROCR_(_|_|_=x54A!B ? u A#cG@`?"BlG@?ր@9A4%hAbA c`'!R?!!(B ?ֹ?q`@zT4w A55ROCR_(_|_|_=@!!G` T!!GTCm#T4*4 @s*RR5ROCR_(_|_|_=s4 @3*z$ЄB!!(?@G?5R3!RXqT@""BF*Cmc"@?S4} @U5B5OCR_(_|_|_==@ G?T G?TCm#DTaCm#T34\R3!R$qmT8@Cm*cbBb"BF@?ֳ4H44 @b5ґ{Cm# T: GS[ c k cg?  A!@{CS[ck s b@ A[@v@@'` @5X{@ @@ `@9 @99F ?#c@`?@*(EF$BR)?֜ @@@@`?֜ @ ? ?@ @'B?ր6 @@@a ?@@6@#$hAB Ac )!R?R@*^ @* @@a ?5@@7!R Aa9'@@BҁT{ESF[GcHkIsJ_RH#c@`?R99F. G?   {ES*@9R@@Cxr`T @" A1TqTSA{¨_b*@1AT9SA{¨_%hA*#c%?9%hA*#c%?9SA{¨_{S[u@ A@ҠE96` @@~@4@ cXF?mb@70@3Y@9?@`|gATcE3@?Gm A@@BaT{BSC[D_9c @Rc@bCcFm`?qTy 7@`@9 7 CA?@``@+~ T @|g#T?ր DGBR@*#R?@BBG#oן!@?`@96@2`@96@3@2cE?Gm A@@BaT{BSC[DPF @PG+~@~@@"x@9^hcA"+~Cb_h#"Bh<_=;@k!TkPs@`R5nG`?a@?`R`?aw@?A_@@Ba TsQ{LSM[NcO0*B@!@ :ZAH@@?B`C@?# @!9B8` @@  ՙ @@T@!@ H@@?@@ ?@@`?$DC c+! c !6BR?Gk? Gk?{ Ah@!4A ?֠7 @{¨"BD!!6@? @{¨   {[s @ AkAA@97S@s9Fc68G"7v@ ?ֻ@?@?ր Aht"ScC R@9SAkD[BsE{ƨ_kD[BsE{ƨ_  {S*!R[9AqTVq`T.qTq`T"qT~qAT߆C?*[BSA{è0zF ߂9==@R"B@@?BF R@?qT@@AC@94B`C@?"BD!@?zBF R@?   CA{S*[uc k s @/ @!!@"BD@@? #;T 7s#@7`6P !4 DR@qT`~@ F @zW3@7@ @R`?*q`<Tbk!T;@!C ?3X7`6@`4@ !C ?!!A ? s h77 `T #T6 A!!l@@ ?BB!R@?!!@G ?4/$GRBR!R?!!A ?sp77776 A#ctGR`?!!A ? [@`0T C@1T # T CT C T  !T c 9T c`)T6@4@cEAR`?րA|g :T  [@@0Tl@1T s%Ts6?A`(4 (T T `T 4T  T  !TB4 F tF AC@*Rxw_qT*s{3_kTaTE9 6@`~@3" B1T@**`? @1**?As{3@?@ ?_kTaT [@`"T `+T TA/@@Ba,T{FSG[HcIkJsKC_ D3_6!C ? "BH@R@?`6P @5@!!A ?  ՀB!D ?ց @#@B,E@?ր@!!G ?s߿6!!B ?!!xB ?36!A ?S6!TG ?s6#cG**`?*ЄF**?@!!G ?!!A ? C T SBB?kT?A?qAT!!F ?$ЄGBRR*? !T@E9_j`Tp@?q Tt@!sA?kT?A`5`R?!!A ?"BD sB!7@?! C ?BF R@?!!A ? T"ARF !T"A!R?A`@9 6AB qT?WA9A@@@@{A?A";~+~{@!!A ?֧R`R? T"BD 3A!7@?ִ A#ctGR`? CTA?9Vs`6L 4!!X@ ?@@9@6#c@`?`@97sC!Qs@#BRX@@'N [@lT AAc/@!`TlD965еvGCAR?qmTS@?q TW@qT bbo oxx )?q@zmTaR?c@P!cJ9"BD@?0"BD sB!7@?S!tE ?֢c@:$ЄGBR*R?+n/oGc?   0D     {S[a @#cA`? SA@[B{Ĩ*B@BD a @`@R?ւ@BSA@[B{Ĩ*B{ЄACх@CEF_.#*@BR$ ?`@"BpA@?``@ЄDaR"B@?`@#cER`?AAAA@BTC{¨_AAG?  ABDAbD@9$5C"#B 3cbDBA{Sc4ДAC@Ҁ?֠4R!A@"@cҁT{RSS_c? 5;@s@ BE@?qG?  BA{ScA@!!B@ ?[ J96BG@? 6"BDD@?3!F#59B ?cEc`?B`C!.@?@8 ?AT}`@9 4#cA`?3@3@!(B ?A@@BT[D{BSCcE_!C3 ?G3? G3?{SCA@@ J9`7 J96#RcD`?d@9% RD4f|q8dje8@zTЄxE"B AR?AB@BaTC@SA{è_!F ?BG@?`6@!C ?@G?  {[3@B@Sa! /@?cxEAR"B@`?!B ?֠@J9`7[BSA{è*B[B{è_!F ?BG@?`77@ХD"ARB?   {S[!F ?BG@?ր7@J96SA[B{Ĩ_6RA??TcFE j48???T??(TcCSA[B{Ĩ_{SCAa@@ E97AA@BATCSA{Ĩ_e@#DF$@ BR?q T!C#'C ?!!PA ?%G#cҠ?? 7+B?? 7a @#cC`??ր7?AA#A'A`@DaR"B+B?a @`@R@DҠ??? 6`@DaR"B?a @`@R@DҠ?AA#A'A`@"cDB@R`?ւ`@DaR"B?a @`@R@DҠ?ֵG#'? {B.S!![XA#cCbD`?a @"B ?a @"B@?"B0C@?5!(B ??^B@@@94"B ."!B!(`@![B! SAR{è0E"B "SAB[B{è!C ?֠6`@D"ARB? {S@!F ?cB`?!,`@"BdB@?Ҡ!F ?!!` SA{¨C!A{Ss "@/!!B{@ ?[c ! a@"BDD@? t@e@  !!@ ?`@"!DB aR#`?B@a! /@?  @k c!HG ?@`@9`7`@"#@B`!aRR`?`@HA4+B @!B ?`@J9 78`@`!F ?BG@?`7c@kJ+B@?A/@@BAT{FSG[HcIsKC֚@+B 0CxE<D" dG9F'40@@?ր 4`@? 7@z @!B ?`@J9 6!F ?BG@?7@`7@"c@B`@AR#@?֚@97|g9R!T@CR+?+@@9qT`4Bҡ @84qT@(`7'@ ?* @"@@B`"AR?+@?ֳ @@ARB !? @A`@"ARB@"?֚@Qa@@@?Bc@kJ_Gk c?@"`@B #@AR+B?P Gk c?{S!!B[ ?c  "BDD@? H!C*B ??F?BG@?7@J97k99SA ??ITZE+{Cj48@?`?? ??T?TkD+@SA[BcC{ƨ*B*BSA[BcC{ƨֳ@kD Gk+? CBA{C[ @D@bJ97RA@@B! T{Q*[SC_ScC?6`@J96!F ?BG@?`6`@BF!0D@?`@"B"aR?? 6`@R"B?a @`@R@DҠ?cTcTR!(B ?SRcT8A#?4!(B ?SRcT#?53@s@?@TGSc?{[c @J9`6 @qT+BS#9C  ?`7?֡ @?kT@6Xt@W@?֔ @?kTSA#@cC[B{Ũ_?#@SA[BcC{Ũ_      @!@0:B   @"@k,TT@!@0:B R__  ))B{CAsAo Ss@ ?[`B@"#cdGB#`? !C ?Ҡ!F ?  $ @RХF?"BC@?@cD`?BL@a!@?!!`A@?T@BlG@? B G@s`?Ҡ!F ?BG@? 6A@@B!7T[S{QSRsV@*B!A ?`;@.{@c @kRDB`$_9F?o@cC18@#DCL@GlC'lGKHF[Cc@#@ ? @@ ? /sN ?@ @R# $?@@?`C@`?G@a!@?@'@@?@@?TK@@?bA?֠7bB?֠7b B?`6e Dk7@k@qo@Az!T EO[@;B?@qc@ZkS?3 Eo?O@@@7 E@?@7 4Z2@qןRjT @Z2_@*B$R?g@ G@@%G?!C ? 6k@@5!HB ?aU@|ATk@RU@@`@9 յZ!qT`@9qATs k@j)3@ -o@@ ??6@@N@5 E@?@k@@*4 @_@*B$R?5*B?@#@ ?@!A ?cTkUdsA@ReCkUdoA ReCkPk@@*@4@qןRjAT3@ +@@2?q@2@b3@@@VbBZ@S[@ws{s ??5S@w@@Z@xzZK*B?֤M`?֠ S@w@@R @_@*RB$?3!|D ?BC@?cF`?BL@!%@?g@4@N@@ E@Z2?@6Gck?ckG?{CS[ck*sW%+BW@#cC`?!F ?H'R{A[CSBcDkEsF֢@`DO PAS;{G+B9FC ?GC@`?` ?HR|?ւ@"O@`?S@@ ?S@{ !F ?BlC@? @"{¨BDbC !A _C{cA'S [ !`@?Ҁ?"B @@?!L@#!@&@?c `/!!PAWSc ?R`C`7eAfGR<`C`7eA'R0W@Ec8/@~@?ֿq TGRk @&F9G's  ռ^#@ ?@5@@`?`5@ZcTV@? )T@ ?5ZcATQF~@џ1`Tc ^@6( Ts˵Qsb}ӳ~@B`?W1TkLsM@c9?!HB; ?aU|@TsF;@Aba ?@@BT{HcKSI[J_!|D ?'@@?cF`?#@!'@?$D# c4! ''R?Gk s ?Gk s ?    {SAqT@#L#"@_@?T`A@`A@8`@*B?`@?SA{¨_  {S[cks A!@\@Ҙ.@?q$T?q#T 49c gccDR`?A?q(T@RֆF{N!`@@?:Zs"TsD7@9@( @?@c(cB(`?օ@e *B@)`?փ@B `? @@B)`? @ @cB)`?ց@ @4?qT@53@5 B@`?ր@9 7@9 7@97@9 6c@k@99#6`&@@5@5`@ `@T@97@$RRRRҠ?B *`?!(B ? @4C+b.B@`?֜dRD rd|$B*f|K`? B@`?ր@9@6 &c@*`?ր@96c.c@d*-`?ր@9 6c.*`6`?ր@9 6c.*҄6`?ր@9 6c.*҄6`?ր@9 6c.*@7`?"B `?@aRD B?AD@B T SA[BcCkDsE{ƨ_ր@9 7@9 7B*`? c)B)`?=`#&9@(`%9?@,c)B)`?c@`&@A95`@#4B`*`? @ @B*`? @&R@97@9@6c@c@}B@*`? @G?{S_vO9@9!@97kTRSA_B{ƨ_@6c@97a6@96a@96@9a6BSA?q_BJ{ƨ_a6@9@6g"A9"A9kT1T`@1@T@?1Tk?k?kTga@E@#?*@+@?*_kR/@_jT7`@9@9kT@96_q@zATb@9@9k T#@@RgCSAR_B{ƨ_#@gC`@9_k#@ןgC? qT@97@9@6`@9#@RgC#@gC`.@.@lAB70@!0@kT_kෟ_k䷟kT_kTk#@ןgC| @a @#@?kgCǟuk#@য়gCpA{B`CSR[.c#*A@?A9*.ҿqmT@*dXs@k!T@@9@@9?AskTqT#@SA[BcC{Ũ_  {SDB!D ?`R97`VB9!D ?`FBV*B?F`JB?J`NB?NsSA{¨_`>BBTE@?{S[*w`R97`FB `VB`7!BДbC ?`FҀ?a@!A`JҀ?`NuW7Cw9B,`Ҁ?`5 R`9@SA[B{Ĩ_`@`L9@[BSA{Ĩ$D# c@4! +,"R?$D# c@4! ++—R?$D# c@4! +`,R?$D# c@4! +,◀R? {S[ @w@!HB ?ִ@@bTc@bbc}ӂj#_BD@?@ RSA[B{Ĩ_!|D ?BC@?cF`?BL@!`-@?{S!FU ?@`|?g T`E56@A`@SA{èBE@A`@b@9SA{èrCBE@?)`d`@q9oC!A{S [ - @?B D??q`Tb@ ROeDfNBC@R9G9W3qT@@c @9bFB`JBD?tV`@cJB DСRB.?`R97!R`!A ?A?@@B T{HSI[JC_րA9`7!4A ?*q Tc |RDcrCg *?A`"R?kTcKc@c4@!`?!hB ?!A ?ֽDRB`.?A9_@`cD@`??{Gc c?{SB @[N@c@?!/? A@@q TL(R d@@kT@_kBc TB*@}@O@9?@9A@@*@~a!HB~fb jiBhg*e9d9c9xRB=~ ?ִ@@"TAҡRd#c E`?SA[BcC{Ĩ_!|D ?BC@?cF`?!/?"RG?  {S[(@еD?!lF ?ւrD_q Ts_kmT6BXs @9@6 @s?ւrD_kTSA[B{è>E {SR9t@7b@RBL@`R9 7SA{Ĩ[u`JBB0Cw@@?75cDB0R`?`R9 6@a*@`FBFRC??`>A5a6`VB`a*@`@V?[BSA{ĨaVB?q?@zTqD@zTcDB0R`?r`D`F[BSA{ĨgcDB2R`?^cDRB@1`?@[B[u{S!lF[ ?ր@ !B ?wr!HB`6B ?u6B@T`rD@9 bra7`Q96@!D ?@SA[B{Ĩ>E!|D ?BC@?cF`?BL@!3@?`6`rD@9 br6`*@!B ?@6@!D ?Є$D c@4c@! +2b R?{S!lF ?քrDqT6B|@c T@_ATTdBcF! B}`?ցrD`@!Qr!(B ?@SA{è>EsSA@{è>EЄ$D c@4c! +3" R?Є$D c@4c! +4 R?{S @97Q96`@SA{¨DSA{¨_ր*@!B ? 6`@SA{¨D  @D{S[!@ЄD aRB?ւAR_qTs_kT@Xs @k!T"RsA_kTqATSA[B{è_փ@c@k,T@B@_#,@BC_  {[6ASRD?kT*?A?qT@`L!Td@c ,@_ATs?kkT@SA[B{Ĩ_s!A{ CS@"@gT !F[k ?!pD ?֚b@ 6r@qm T*D9(R( cDs#МWF @ `@"aRb?րr@k T`@O6@@qT`@@@?րv@ @k" 4*c? @!`?B ?"@96B`4?cPsRu@b@ 777b[OkQAg@@BҡT{MSN_c EaR`?cb@f@BAcDA`?@w@_q- T40CdG!(BRDRs@@B 58R#h{aRh{? @ ?@_k-T}@/kT@%}@!h{he@@?`5C9@@!h{he@?/@4 Aa@`?85@aRB4`?ҳb@xbz6sRw@ @ ?vc ER`?cP6_kT}(B G[cks?  {c  |S!*[*k s @!A "@/B 5 1@TjA6"@;!cC"C#?l@ +@? q@T*B @L@AqT1sk T@@ SA{¨_ <@@SA{¨_$D c@4c! +9R?{S[b@ATXA@u@t@9 4! 7cks a@B0C@?ր4|`@ARR?B`C@`@?`a]BC@?`@ @?qTG @Xt?`@ @?k,T֖C!)?!E ?qT`@!5?!E ?q T`Aq%TFFE9@ZSD!Fa@5Xt@4% R?qT @cBR:?`@??*qT`AklTa@" @_qMTֆ@a@ @kmT @Xt?7!Gt@ ?DB;!R?`AcGkHsIu `A!RqTkTa@5XtB@A:@>@6@ @!(B ?`A69kT  `A`@a `A`<@ `E9@6`AqT  a@!Xt",@R`AkTc EҡR`?@q RZ !@ ? 7cGkHsI  R!A@"@cT{DSE[F_ ?7B@@96@B!!@! @!@@?dRO@4qT6@B@@@?@4@qTBxA@?5p8@!A ?֛@!$D c@4c! +`;·R?$D c@4c! +:R?$D c@4c! +@:ⲀR?$D c@4c! +:´R?Gcks ?   **R  a{S[ @96"@D*zaqTҕ~4 @T*zakT@SA[B{Ĩ__*Rj`@z`?k T@aR@u BtDa@?b@$D c@4c! +`5"YR? _1TAqT@eL%@T`@c @kAT@kT__L! @_{[5@97R*[B{è_S`@97Av*@@|@qT?b_Txc_AT(Ta|}Ӡ! ѡBcFB}`?ցA!Q!(B ?ցA?qT@!Q !|@xa?q!B(@DVaT_!Tc EҡR`?*SA[B{è_SAcc|@!D ?$D c@4c ! +@A 5 q`TRI97qR6ADZ?_kT*?@qVzT CR9cC?֟kjT*?Aq- T@ L#! `T;@d/@_ATA@ R`9a @95A ? ?@` ?A@b@?k`#`9`9_q A)D@zb9`7?֟kT*@`@BF@?kOsPAW@@B T @{KSL[McNC_֟q$VzTA@Q WAnA97c4@!`?!hB ?r`@!@A@a ?u!D ?!D ? ?6kO AH @@B@=D!R?kO!G* ?Є,DCB??q!. @#@B<D!R?sPsPGks?   {S!B[* ?`BC@? SA@[B{Ĩ*B@q *@**a@ASA@[B{Ĩ*BG?{cSk@A@`C 7`O96@@9?q T!Bs ? @@cA`?BlG@?AqT@#EL4C@d@97c@c~hch#B TA@@B T{BSCsGcEkF*B@95A@@B T{BSCcEkF_`C@6` D6[@ cC:R2CqT@tN4`@(@@?֠4s"T@_qT_q@T5 @@5@4_q+*7AkTu~}s"?kT@hu@"9 @s"?A?klT@c5AA)*@5@c5[D @`5G[?G[s?G[?!A{S[ X@"@7D?c@t@a@a @9@5t`@ aA"Ra@BR!Aa@R!Aa@bR!Aa*@B,@@?!A ?A7@@BT{G[ISHNBB`Cc @?!LB ?ORc @b*@WD3??`@X*B??`@cJ!*BҠ?ր>@@BhBaz@?d@PI9`6azAR?q-T!|{ӟ@"    >@;>T4!D ?c@*B??ִ`@`cJc@cJwҀ??@@BhBaz@?d@PI9`#6azA?q-TcJGc ?^{S @??xB7B`E@?` `@!4A ?֠D9 7bE97` @ @SA{è_!@ ?֠bE96!B ?` @ B@F@?` @!A ?` @SA{è_ E9A7_{R \5 @{¨_AR @{¨A{S[V*@BTE@?@zJT7A92`9SA[B{è_`@ ,AqT@qmT!D97!A ?@",A_qMTBQ!@"BtD@?ր@,ARjTA9DB:TSA[B{è_ր@@_qT@"L"_T @! @`!hE ?@",A!@ ?ր@ @!L9A7_{R!RS``R9 7@`@RDB=?ց@N@#RSA{¨SA{¨_{S@aBC@?7c@!Rt`9c E`?a>A`R?q@T`>SA{¨A!R`9c E`?a>AR?qTSA{¨A$D c@4c`! + >R?{!ASAq`Ta@!@c>AqTaQ?qRdFz!RTa@ ?`9w>?c>AqT_`A!D ?!l@ ?`A!G ?ր6@SA[B{Ĩ_a@ q T`@60y B?u>q T @`VA`V`@DB RCR???ր6!A ?`@СRB` ?֑       {Sc`D*a @`?a @`@*Х@DҠ?*!(B ?@*SA{è_ {S5LDRcCДDB?GB0C! @?5G?RB?BDR@?RB ?SA{¨BRЄLDaRcCDB?GB0C! @? 5G?aRB?aRSA{¨DcGaRB@?cGRB@?ִ{S[6ck5c%s@BoF?`ABE@?`@@9?ֺ@`T9?E ?6?֠@ ?R` @?R*6RjT`@`H97` @[BcCkDsESA{ƨ@5SA[BcCkDsE{ƨ_{?E`?ּ7F??֠@T c%`?` @?R*T7`@R< ?@?5R`@!,D ?   {!DS[b%nF ?`B!D>E ?!D ?!l@ ?`A!G ?!(C ?!B ?`:@!|F ??ր@@Tb%?`@!A ?` @!A ?` @!hC ?`rD5`6BД*B?!G` ?`@?@[BSA{Ĩ?F??ր@T$D c7!R?BA R{CSC@BpG@?@@9? qTB0C!@? 5[@&Gcks?ր@9?qTAN@?B @@?! ?!D#D ?!B ?FR"RR?B`C.@??! ?cDR`?zARa>!tA#R"y2xJdtcb: ?4?! !?!B` fG ?` @!G ?a @B!!@?aB!?`6a @cGB@ `?`a@BEcLE`?b @@@dH@`PGDc;$ R yB7R.B#?` @clG!hD`?`!@E ?!A ?` @!A ?!F ?` @!C ?`: "?t@BRcG`?ր`*@!D ?[CcDkEsFA@@BҡT{ASB_BCAR@?BG`@?*!C ?T4$D c7! c@!1`2R?@94 @9@5F?EcxEB@AR`?G[cks?G?  {S[c@9x@ 7a @`@ЄDCD?֖` @BE" @?` @!RBB@?!R`@RB"?փ@`@R?փ@c`@RB?`@R`!D ?b @`@a@F?73@qT`@! BB ?`@!E ?`@"Ra&@b9BPD@?RG2Ҁ?tA^@@B0C!!@? 4@9`7^BBC@? 7ERBD@@?a@`@!@5B?q @TDRB#?_B@`@9 5!E ?@q@ T`@ B4`@@`5R`>`@RB`$?RSA[BcC{Ĩ_!xD ? RSA[BcC{Ĩ_BE@?` @!RBB@?!RA`@R!D ?3@qaT`@ RE! #?`@R!@#?v1T` @b@cAq@T`RAtVA`4t5tZAt4tRc%c$4R`@DB&aR?`ZA45TRc@&4R*SA{¨_c$t5c%c`%TRc%TRc%      {/g!PFS ?ր@/@!PI9a6qTTq T qT!`T `JT|gA`@SA{è_@qT `TqATx@SA{è~C g~ `)SAA`@{è_)`/!~~){S;m @ C@`D| g m!T`K9 7A`@SA;Bm{Ĩ_a@@`!" B mT|g)`!T`K9@` 6a@|bCg=0A_q>4A~#*`5`Bb | |p#|~!TC` oLo#oOoB@aB@?{ @!" B c|g T @{¨_aB @{¨@|_g @CB]0Aq=^4A~>#*`4R_֟b  #lT R_ R>tm"@9/6"@ @_qT_q@T_@?T@?AT Rax@?`C!"_aA!@! "_R   {S*C5B5!F ?*SAR{¨ARG@  " @!@ba SA{¨ABA{CC@R#8@!@9BRBKActGR`?A@@BҁT{A_֠G?C!A{CSA#@bA@5A@@Ba T{ASBC_B0G[RB9B9B9#B9@?`@a@X@?cN9 @97R `lTR ?g@gx!99 99k Tq@zT_jT@#@`[C `$RjTRRR` AcGR`?kT?kJ*@7#@[CG[#?{S[6Aa@BC!`@@?uR@@zT!(B ?BlG@?`Ra ActGaR`?`@[BSAR{èB`@`R@!(B ?RSA[B{è_B0C@?֠5[BSA{è*B {S"@97SA{¨_BE@?`@qT4@D97@SA{¨Aր@  Հ>A`5R>FA@7FSA{¨Aր@cDB 'aR`?`@5@cDB'aR`?_{ Scc-BATAC@b*@RcbA?` B9#'(6!A ?#H'H!AH"@cAT c-SAcC{ƨ_!D ?@B@!! /@?`>A` 5c39E7ZSC;{A?BR ?@4|@"?`?@?`>A5TgE97@O@`T@!T@R`@DB`(?R ? 5 ճB@3Hs7H;H?H !A ?֝3HR7H;H?H!B ?*?q!Ad @z ?#H`Q'H3H7H;H?H3RG#'37;??Oct@R   @ ?kTkFB0CJ@@?5 @!A ?@7J@!(B ?ֳJA@@BT6@cE SCB`'{BR[DDA@@B!T{B[D_kB`Cw*.@?A@@BҁTcE{BSC[D*BScGk?   !A{S"@!PF ? `T`:@aB8E@?A@@BT{CSDABC? m@`[ccR@?@|?g#!T"5@|g6R#TU6[EcF?Imky `@!HB ?w@? @" T@` AnCb a kGk!C ?*q-T~CkRKBsZFМD{CL@  *? `JTk!T[EcFkGsH?Imny `@Ab?u@? @T` A a ?`?@?@!*@?`!|D ?BC@?cF`?BL@!)@?`G[cks? m?{[ @!A"@ҡ@BA@C@A*TC[B{ƨSc J96`O96bJ97B!*?   `A!+?`A!`?!!`?!HGZB ?֠BD9&D9+B@?? ?! +?!PF ?֠BD9@??2G ?R? `TAn T`A`A`@9 6!R?@b`Ac@ R`?@6`A`J97` A!$B ?aA @4@@!E ?q*ן@zT!,?75`@!PC ?`7A@@BATAAS]c_[B{ƨ_`N9B`6!*?m! - ?`@BXGc@?@!`DTd!| Tx!-?G@_TO@_mTBT!-? A`A!+?`A =TG`#}T!.? g!@+?An `T!+?eC?~A`g8~ lT@B!`*? RRsBC! ,@?@95 ?WA`!-?!+?;` A!0A ?!,?*!?S AWBJ!-? AO!`-?{G ?֠GSc ?  {SAD@_$@ATss.uB0C@?֠4B,@9"@?`6@SA{è@SA{è_ @Bx@B@@96"@94B`C@?րF@SA{èG? A{S*[ #@7 @RBA')<@B,@9`@?16t@@9 6k @BC@?xN@-ZF@?x@?,T`6@BB@?BlG@?`NkMBDR@?֡!tE ?ր@9 6fE97`E9`6`N9@7`@)0bD9 6tC947 AqGT5tv@@94BbB.!`>?BDB@?֠AG@@BCT{I[KSJcL*B{@֡!A ?`b@ R`9 `TB!A ? R`9`@6B0GR@? ` T//n R@@`L`@qT`@BAG@@BA<T{@{ISJ[KcL_!A ?*BHF@?b@!Rc`.B A!(B ?`@2av@`.?`>@B`C@?`>E`@A "@9B 4BC@?B$D@?!(B ?av@ @9`43BB!`>?nn F9a7`B@.B,@9`@?ր6!(B ??U`@`@Q!!@a"@95q@Tqk YXD?ր5!(B ?kM vRk B@D9B-a!??a@!@?@z TBC@?B$D@?!(B ?kMAG@@Ba%T;o{ISJ+`[KcLA{@֡!A ?`j@ R`9 `T[B0GR@? `T/`@qT@b@ ?`T`:@aB8E`@?|8!F ?҃Tn `B@@B,@9a`!.@? 7Gk s?!HGs{B ?ֺZ'D*`?*B@??qTkMsN%`@`6B`Ca!.@?`B! +?!PF ?*`?@??֢B0GR@? `JT g!@+?kMsNBk !?R R )SBGC@?@_qTB0GsXQ{@R@?b `xy 7Z Q?kJ TKa@!F ?@BBRc:AZ @`?`_q!T@e3@.!.?@4@C@:R   *{?kAT'@t@S@.9?qT/@Rc@?4*?֟kAT7@as@#.@c!?kMsNB`C@?`BkMR*RbB.iGk s?֤Є$Dk sc !. /5R?     {A a (B97aAa @97 @{¨_`&@?9 @{¨G`&@?(9!G ?{SAB(DA9R@?*t76c ER`?06c ER`?4@6SAR{¨"ESA{¨_֣c EҡR`?47{SBQqhT`N9@6ДC?~A TG8~ TSA{¨_ր?`SAR{¨"E{ A`@96`BQq)TaBA?T @{¨_`BQqHTA @{¨_!(D ?` @{¨_!(D ?|g~A T#@TC``#T ~~  T{ A@4`@``>A5`N97 ~AF#T`A`@96`:@!A ?`6` A!D ? @{¨D` A!\E ?@7 @{¨_`BqaTC?A F8#odT@A#olT@TFo?A`!E ?@`&@ @{¨@  $@G{SR[@.F4R?`@?`@!E ?A T5SA[B{Ĩ_֠TF`?֡!E@ ?`&@B@@?4[BSA{ĨR"E   {CSAu A@`M99Ct@?@``@!dG ?arC?k`T@>g!R9_b`r~+o!T9@1`T1AT9C96Z@!`@96@9aM9?kTctGR`?@9@` 9A@@BaT@{ASB_A;oA!DT@1T R9!R9TFo?A`!E ?`&@B@@?G? {!TGS ?`@BC!/@?`A `LT`&@!A ?`SA{¨_`@RDB/?`&@!A`A ??g`@SAB 0{¨RA#`LT_{ TF`?֡!E@ ?`&@ @{è@$@G$@C$@"D{ TF?֡ XGaA` @{¨b `_   { N9aN97`"J9@6`>A5cBA`N9_j!T7 @{¨_` A9@a@!@?q!@cG`? @AR{¨"E!7` A!Ra9a@!@?q!@    @`J9@7 O9_  {S4[6R @b 9t7O9*`N9kT`@t9bB*cD_q`?` ABA*@?!Ra9`&@!G ?64TF?aA ~A^XG` b~;~~`@b SA[B{èvD֠TF?`{SAa@@a`AA@@Ba!T{VSWSC[?mu@?`@@`BXG#@?`O9'@9M9*`96bB_qTv"J967M9"6bB_qTbB_qaT+@9"7FC @"#}T   `O99`7RRb@a9A`J9nvO96 @FCn"~#`%TR AG#olT|An~AA~#}*T+@96#` TcCRk!T#@96!B ?6!jT#`5RlTcCkTq @q`@_k@Tq TD*B`0R?#@9tR*6c EAҁR`?֠A@@BaT[X{VSW?Ym_!J TR ;nA!dTcCkaT#@9R*566j6R)A@`cD9B@1R`? \G#~Tt R6R`O9 R`6 @FC~ g ~x~cO9dR 77iTFo?A`!E ?`&@B@@?TFo?A`!E ?`&@B@@?aD*RB1?։!B ?։*RaAcAa"(B9ca@9"*qD@z!TRRG[?m?֠G? @!`J9  A`" @!N9B@6G_q!@G_q!@_  AB{ ?qT`TK9`6 @{¨_ @R{¨CBd`&@!G ? !R`G @{¨V_{S@!G ?!@ ?֡!C ?֡!C ?`Aq T[Ҷ֢EB`@Xt6@`aB?֠2@`aB?`AklT[B@`O97bB |y?g 9 R`A_|#Ra!xA" 9rc 99 ?a@!`J9 SA{Ĩa@!`J9   {S*[**$@!G@` ?֟qTT Q qhTtvuo@SA[B{Ĩ_s" @~SA[B{Ĩ_aCbC!*a_ qTAaC+o?k! aB4_qT R`@SA[B{Ĩ_v$D c !!2#9R?@@|g `_|g_@/ @PI9@7@@A7_/_@#~~(~_@A|?g#aTA_Bb~_|g_@bA|?g#TA @T_@#`T `|g/D ~_Bb~ `T `|g/D ~ `T/_|g_ `_{S@t ?m!@!`jT5 7@-T @>bb `T/   յ4`@XBq-TaCbn>b};~#`eT@SA?Cm{Ĩ_/5a7~A|g#TA!` T@~ T @;no `eT/n Tn@C`SA?Cm{Ĩ_@~SA?Cm{Ĩ_SA~{Ĩ_֡!D ?@`!hB ?!``@M`!nMo9n|?g`Bb ~!D ?@`!hB ?/ xA4@A|?g#TAqmT@R!  ?@!#~TBkATN9CA6__kBQ@_B>b }|>gR _{S*A7xA?k T@b~{ӡ!`BTF@@?ЄBb!Ҁ?SA{¨_փzAbqmTB!`3?`G?֣cB!@3`?SA{¨_?1TSA{¨!@bC֡7xA_kMT@ |{VFB!`@@_/?1T7xA|@gkT_|g_@!|{@_xA_  {Aa@@ҡ~A|g#aToA|g!T@RAa 9@@BT@{B_BC#@?֠6`B @b o ~!@ᇟ`Bb ~G?{S|[=gu@@q;o@}d@T;@SA[B{ʨ_cks;md@ @ qq T!l } @`Tq Tq TH Tq9T0T qA`SBURRq TTqAT!` (oןvSq*T!}@Tq.T qSB*2qA?q,l>"A_q-T{E!T9_k T@/Xy @97`?ւA@a9% }Tq0TTAq@/T`27SBRA*`47A`"*UR;@cCkDsESA[B;Fm{ʨ_m@!`T|SBRTRMg  mq "T|g!5TSBTRRq*@R!*4uRR`@9A`9B2@42 ?4Aҗ_q-TR 2EK@Xc@9@6@96*@K@G@?)`q@*@ m ?G@Ac_k,T`@`6@RVD?ւA_qT@Xt@96(@R?ւA_kT 4Bq"R 9 b 9@mg7SF9A6C*c.DqD!3.RB`5?ւA_qT&E_kT@Xt4@@zTgA?ւAq#TqT }R:RTSB| gRA`62Ruq T /qTqTSB*RR:R9C`_kLT@b n9o 7 2;RZ?AqAT?C"E?ր'@!G ?ҁR?R?f;@C ub @"d@$cCkDsESA[B;Fm{ʨDր@@9@7@!RsDB 4`?ր@;@cCB4kD!RSA[BsE;Fm{ʨc3p!`K9@6BR' R` 9!^ >"f @{ƨ_֡!hB ?|g AT`@@#``{SCѠA3>A!R@ҀE95q@zA6"J96Bq TR!AA"@cҡTCSA{è_ր@|@` 4q*4 A @q`@z T֖DCER?BLF@?c }!?T Tbha84*#R? "RS9L=B`D3C<@? 7@BDG@?ր A@N9!@B6?q!@cG`?֢BA!R@?֡!D ?փc E!R`?AA?q!@4!l@ ?֒ A@5@|@@5AAAB5 @@:@ BA@?ր  R 9R@@BtD?@?֡!l@ ?ր@cDB`6R`?AA^G?  с!A{SA"@ҡ!G ?6R`>A@@BHT{BSC_ց!F ??!!hG ?`@!@ ?@7!E ?֡!(D ?`B`4`B5W5!E ?`BqTcAqMT`@L# T@"@_qAT!$A97!,F`A ?֡!@ ?`C@5`N9`6` A !B ?b>A*%7`A`A@   ?q@Tt@!5`"J96>A#`LT`B qT`C`49`>A5F`@!dC ?7D.a:CkTA@@BA8T{BSCR`A b>AcBA*T5/ R`>}t@ `Bq@%T`Bq`T`"J97aB [ R+/`" 9 9?|rc EҡR`?k`N97@a @9,5D@ @94BC@?AB5AХhA!Rc c`'?֡!(B ?ֹ R`>=`N97BGR/@?`&@!G>A ?`C q#TA+o#5/@ R`oc E`:R`?ք`C`7`>A4`CqmT`N9 7!RZ]`&@!G ?g`A a>A?qT/BC#@?`6`K9 6`Cq-TBXCQ`!7@?@TR|g!Ta>At@B 4?qTq T`A>` A!B ?`6J9 6`@!E ?@7!Rt@/@a>A`Cq4 T`@a@bB!PI967/R`@``@BG>R@?֡!G ?`&@!G ?tARaoa/@`C4`BqT!B ?%`A@97`@BTE@?րt@/@a>A R`>sD!R`&@a9!GfA ?p`BoAw@?`B?a@ `J97aO9@Х. 7?@A`RB 8?`@@#`T`CqT+@/@[DeBXCQ`!7@?֊@R`TF?`&@a!G ?`@cDB`7R`? 7J9 7t@/@{@R6/@R#~~)>A|g#}T#`ET/A#`LTaBA?T`"/@+@|[Dq!T/@Y.AqaT)/B*#_~`@ARcDB9`?a>ABCD@?a@cdGB7`?aR" B?*B??փ=`CaCx`4^G[+/?{  f!hG ?J!E ? @{¨M  @! B4{AqT`@ B 5 @{¨__ { S *[ Ua@A6A@O# qT` A @ 4!Dc ?a@qq#9'9+9W7M9U6@9!C/9 ?396+@#$A h6BDG@?#@!(B ?#4qTT 5#@"!F ?#@cM+` A#vGR?+@#q T`ARcD@B`9`?` A!TC ?#$AAo6BDG@?#@!(B ?u#cMҁ!AO@"@cT{JSK[L_`:@! E ?SRqT+!G" ?֟ qT<=`:@*D`A =?=?֣` AR?#@&Ao6BDG@?#@!(B ?#!8F" ?6#@ AA@!K?kTAA@!K?k`T!E ? #@!0" @c B`?#@!(B ?#` AcC,@?ց!G#@ ?<z@==B\F ===@?#@ 6` A D,@?<=`:@BR`A ==?`A<=`:@ =R=?1$Ao7.NAcG K)`?!`Esҹ9+B ?#@cF`?#@ ? ?s@#`AЃcDB:@!R`?cM9#@!(B ?cM3Gc s? хХA{S[c @S@/#|l@R=~tAB:Anv=?!LB ?A @*@`C?*!D7 ?֢B;!R?րA/@@BTS@*{FSG[HcI_ ?aRB;?@#A$AСRB:l@tA=nv<?!LB ?G?{0@ B,@@@? @{¨A{B`CSc#@?@9S4[D R*?` _zHT9@85[B @B$D@? #@SAcC{Ũ*B{ҢB @S@?֢BL@!;@?@@cdGB`&`?~!RtaSA{¨_֠G?  фЄA{c c!R`??kRsSAo@@BA:T{NSO[PcQ*B[ax`! _qTR_q TR Ry+9#xcB@`?@w2;?kT!R9`?@МcD@?7@ЃcB!=`? @Ҁ?!(B ?u@ @"AbA@9a%5!PA ?#cB`?C?@6?6@k ,T?^@._`qT@#@ ?BG@?@6@@?;^!HG# ?#@!B_@q ?!(B ?;@I@ !C# ?#@@ _qT;@9R`?#@ ?+@CKR?'@BC.*c!=?`/@@?B(B@?@o@;@[@? A @94'9R!HG#9+9[ ?ց!A# ?A @9a4@RE#[99 9?@#9A;@@! @?;Z=_qT@+By5 R@ @9[RqTa@9 Q$q(T`@9{ qT!@ @9qTR`?`ˣcBAB`?@{6@!PA ?B`3?@ T@.*cB!?;!@ ??ր7U3@Rh`9@63@҃c @R`?փcxF!@`?֊ @@.@?@?cA`?!@ ?? TXD?@5J:@! E ?SRBFR@?'@K!?G?3@cAB =!R`?J3@!@C@ ?BlG@?@ @2 3@AB`?!R??*!F ?@Gks?   {RS@t@@` @~R@!(B ?c @sR`?ֵGa!-?ւa!-?ւz!`?փcxFЁB@!`?փcXE"Ra! `?ք@zA@@B|nGB|@@SA{è@9SA{è_{ CS AaA@G @@#@b@TOC[ "!@C=:S~~~ ?,FERCc???ր6!F ?[KAG@@BҡT{ISJ_րG[ ?  հ2C{AR[@BA@?SДFc!`?`!?@AXT! ?@#AXAT!`?@BXT!`?@EXT!?@@XaT!?@;AX|T!?@AX!zT!?@EXwT! ?@FXtT!@ ?@@XArT! ?@oDXoT! ?@DXmT!@?@7GXajT!?@CXgT!?@{GX!eT!?@DXbT!`?@'BX_T!`?@BXA]T!?@WAXZT!?@BXXT! ?@KAXaUT!`?@#FXRT!?@@X!PT!@?@7AXMT!?@CXJT! ?@FXAHT!@!?@AXET!"?@@XCT!#?@EXa@T!`%?@DX=T!&?@BX!;T!@(?@GCX8T!)?@FX5T!+?@BXA3T! ,?@sFX0T!`-?@kCX.T!.?@GFXa+T! 0?@FX(T!@1?@CX!&T!@2?@CX#T!3?@@X T!@5?@FXAT!`6?@3DXT!7?@WBXT!8?@_DXaT!`:?@EXT! <?@oBX!T!=?@;AXT!??@@X T!?@sEXA T!?@#EXT! ?@FXT!?@ATaTt@?qSAZcC[B{Ĩ_֠ @cDB !R`? @cDB!R`? @cDB !R`? @cDB!R`?ְ @cDB!R`?֛ @ЃcDB`>!R`?ֆ @ЃcDB @cDB !R`?) @cDB!R`? @cDB!R`? @cDB!R`? @cDB!R`? @cDB!R`? @cDB@!R`?֫SAcCF? @ЄDB!R?F{cAS @d@ңcdG`?` c@#a@`BcD`?@ 6A)OD7Х,D#  B`||=?cDLR`?A)C` @%*i@c|ScscF$RHRS{#S 9`?֓sB @`?@6@!AA"@cҡT SA{¨_`?Є,Dc  B||=?`G? C{S[a@A4@@`@!E ?B!!Ҁ? B D??qT*B?a@! @ ?`7`@!E ?րA@@BT{BSC[DCa@` @B#@!Rd@D?#cD@`??`G?րG?   тBA{S[cA@ҢBdB@?BG!@?֠4!Bks ?#9A ?֠5;@ @qT5;"7GG@@?`5a!CwbC ?"@9_q!?BFR@?@9@9 R4ax!Q!?dqTcQc$qIT9@85cBA !`'`? \B @@?ւBL@!@ @?`"@BXC@???֗*B~Z?֠@`!xA ?֠@!@ ?@ !@ ?@R @Ф@B` D?ցC@96kTsU!A@"@AT{PSQ[RcS_ּ@\@CB;Ҁ? 5@!@ ?kTsU!A7;"G{/DO(B_ @__=@`? @`? ?֠5;@  @qT@ ?@O@!RDB ?@ ?kTsUwbC?!E ?a!C ?O@!E ??@D!RB?ց!(B ?@У@B D!R??`Gks?րG?CфA{SL![VaB@?LT6`A@@BҡT{BSC[DC_֢BG@?@6cBןkT7Є,D҂B`+y?օA#RҠ?`G?  {{_  {S҃c`D @`?c!(B ?SA{¨_{Rc  @ BDA9b@!Rc BHA9b@ARc` BA9b@aRc BA9|b@Rc Bl@_qsb@ @{¨c@ BA9Rj{cS[5R@`A3 @@o3 A97`Ao@@BҁT{N*SO[PcQ_b@vbDs"+Bb@b@@94 @??b@@z@ A96!Bs ? @bcAB:`? k@!A A|D`CF|МKBL@#:@`E @ ?RL@9?qT?`@@} ?s@c ??֟@Tj8a@a@@zAY@kR!(B ?sSxcAL`?BAc@?k@! !@Q!x!*!5@'?'@ @bT@`Z#Ҁ?֟@TY@@ ?@@?@`?#@!@?h8Y@!|D ?bBC@?cF`?ւBL@! @?'@`Gks?րGk?  bBA{[5RC@a S|?mg@`60@T`A C#@ccA!@F`?@5` A`Bq` T`@5R@@97!R79?ր*@A9@7aN9A`Є C?;;9?9?`:@!B ?@`?@9`N97q|?gAT7`@ T!n7@9?j! T9@ST;@9?Wm`A@@B T{S*[U_ց!C ?`6*@/bBBR@?ց!G ?F!X@ ?`@!T` AA`BGR@?B`A@?ց!(B ?־`@t@A97AR?ֈ`:@A`!hG ?`:@!A ?` A!D ?֫ST?Wm`GS?m? {`AS30@@7S(@(@@,@@@k bB D9O@ @/@?֡! ?[ @(A ?qm T`D|DvbCc `C#F's A@Xb+@+_DS T@@q Ta!HB@B @{+@GB|{a@uh"37G k TD@a{WAha?@?@ @@`?֡! ?@@@\ @ ?C@@T@ ?#@@?@'@`?@ ?@@A+@ @ ?k,TcJsLD@q T@@ @_Tq T @#R_cZ@/@ЄD?`2@0g!@!,@!@A?`@cFaR3`?@!RBC`2@@?֟qT@ @TqT @!R!Z@@cG0@`:@`?`E97`A7@@BA T[IkK{GSH_[IkK`A7@@BaT{GSH@@B@VF&9?a&A9B_!7?ֿTqT@ R $9c k@A@A`9qT@A`2rd@z7@@N9R $9`7?ֿTcJk@@$A97`A7@@BT[IkK{GSH@A@ Rk@ $9cJRR^`Gc s k?k@cJd$D[ c k c`$!s @Rk?`G[ c k s k?րGc s k?ց!D!@?qmT@bB0@?qT@a!0@A_!R9_  {S[Aq TbAcxBE`@Xt2@?֠2@aB??֔`AkLTcCSA[B{Ĩ֖bASA[B{Ĩ֡{S 0@`a!B ?`2@BEB@?ւB`A@?`2@RBC@?րD@q T@Tq`T@!R!Z:@҃cG`?`2@!B ?2SA{¨__R{SAqMTҁ@!XssAk,TSA{¨_   Ձ!D{5@S4Rq-T@@`:qTa@A`3r@z@@*SA{è_@*@SA{è_   !#,@c@qT"0@b_d$D{ c`$c@!@R? Ձ!D{[6@qTSRa@A",@@@qT 0@`sbkATSA[B{è_dЄ$D c`$c@!@R?      {a! E 8@@` ?֠7 @@{¨_A`@ @{¨p.F {SaBAt@?T`A@``@97!(D ?|g ~`T}A#~TA8}"+~+o``A`l T@SA{è_`O9`7`@ dЄDc%B ARB`'?@ R`9{SpBqmT?mR`AbAN@@@9`A|g `Tb@`g9`b@A9R*@~!`o 5tДDtДD/~VA~A`A~+~~A97zA;oz`BqhT`@A`SAB ?CmR{Ĩ`BqT!@u@ ?}zAA`g` A"F` \"hG+`;};n` ~0#{OxX#  ~~Ca#|dT#~A/`J9+|@+|@}z~`@A`tДDARB?֯dЄ$D c%c!.R?m?dЄ$D{ c%c!R?   7 RAAA#@d@7D @dD97c @9C7F97CAcc@97^A|g#T{a!@@ ?qMT(qAR{_@R_ R_@R{_{ A@a@@!ABA@?`6`A``@`J9@7~Al#~T`Bq`Tcc E!R`?R @{¨_ւBAaR@?cc E!R`?   {S[A @!C ?֟2x`A @4@B BaB@?`rBqmT2EtbR?`rB"kLTr` ?oa|`J9~?@ ?  9`AtS`SA[B{è_֖2E   {S[tA@:@T6@@@: @B@?!Tv*B?ֿ6@!G ?ր@@??րR`p"ESA!R[B{èv*BdЄ$D c%c@!R?dЄ$D c%c@!"R?{A A` A!A ?  @!R{¨p"E @{¨_AA_{S!4@a.@ab:@@@@bBE@?`6@a!@ ?* R6SA{¨_`B@!G ?ւBBB@?RSA{¨_@dЄ$D c%`c!1R?{S`A[bA@Ң` ABD!R@?bB D@?ւBL@! @?a@t`@bB\Ca A !R@?ր @bBPB@?ւ@@$S(u:@5`A`&BB@?`A@@BҁT{C[E!RSDp B֠6@@@! @!@!A ?֡.@@9!@9"9 7 79@@@BPD @@:@?`Aa@` @!ABA@?ր6BDG@?a!A ?ց!@ @ ?*bBA@?`A@@BaT{C[ESDbAb@b:@bA BhD` @bBA@?`  R` 9`!R9`66@!RbBF@?֭ R9`@ccDBR`?`Fv`G?dЄ$D c%c!"R?G?@#,@C"B  Aa @!`J9!7|Al#~TB?q@T_֐AaRHC_qmTAR/RB@8 `iT+a!_!T/a4>b~_/_{a!ASA"@ҳ+/ @a@b@!(@97`BqTwN9CGKW65`K9a /ngA?F@uAwK96@976` A!B ?#7vsBRk,TvsBRyk+T*7+6vsBRqk T#'!dA`Bt@ ?fD*CRB`R?`BqiT@R`7@tA`sB4aKC5qT` A@@!7a@"dD97 @97 F9@7`@97@#`T`@R@B``?tA!R`sBa9q'TCvcy9AzZ;F AV)?AA*%4@?!6z|0" wasB ?k#Tw@z|#! ?րB@976 @q T@qT!dA`Bs@ ?fD*#RB`R?`BqqTa!A ?AAAA+A/ACAGAKA`A@@BTSA{ʨ_aK9b /ngA^F?@uA@5?cc E!R`?`@(9`BqTAA+A/A~A|g# ~+@!F@ @@ ?d4q`yTqT'+@#a!hB ?|g  T`Bb `#T_@#)T`C469o^@#DT`K97`K96a?A`sB(qTb `sA q`mT? 9w2Ey ?`sB(qTa `s*: qTa!(B ?֯4#A'AvsB!dA`Bt@ ?fD$RB`RR?tA@$@96@b4@bccER`?qTtA@`a4@ accE#9#R`?#A9 `6`A``A@@BҁTAA!RAA+A/ACAGAKAp BSA{ʨa!0E` ?֤*#'bBDB @@?@@ARV)B?a!(B ?~@ЄdG ,AR?tA"k@bBdG@?7a!B ?q7b A#!C)U@_9?kOT"@"Q5zZcA @ xG#~eTKR?kT  9{S?k9Ӏ6 `KCqlTqƟ!4F ?)`+b`KC kJ)X!`HBz TW5A@ `H`A~A  qTT` At@`AqDzTT`Bq!TT`Bl`K |w@?b ~x#`#}DfTqUzTAajl R:9:mlV m m~m?qmTk`B!Ra 9@Q5`OAn`@R@8oB#?`KA`@B$8oR?3A7A;A?A`KCaJ9qmT`AH@ *?|@kT`@?@ c!c@RB@$?aJ9>6!E R`9 ?bBA@?`Bq 4T`sBqmT`@aB`?q +Tcc ER`?7@4`sB5`A`#AR'A`9@ @9`7=6vsB*Rk͂T!dA`Bu@ ?fD*cRB`R?`BqTa!B ?`7`@9 7 R`2x~@R`wcc'_ ACb#=>T"nA A< G~;|~#`CTRbBD@?8*7o7a!0E` ?ta!|D ?bBC@?ccF`?bBL@!@@?`loa!G= ?~A#`T/`A@@B2T@p"Aal0 ,T37;?-TQ``WA `a!0E` ?#A9'A~#`eT/A`?qT`@/nmR@B`?`@/ua!@`R` ?`@9`6`A#}A#` T/`A/ {{<nOpKAOmcB`@ccB`"@R`?@a!G ?sbB\B@?ր 7a!@ ?Aa!A;`` ?zAH#`@z!T`@@BR`?րR`dЄlAc#?a!`FK@ ?֠6`@A!TF ?6`AbBD` *@?a!(B ?vsB#A'Ad#}mT@ tGF,@`non#~JTAaox@RB`?A``@`@@BR`?cAbAo(bҠ9g }"?ց`@a!D ?@`}WA{AB~AR`@}@+~ 8nA``?֠A4b)n~WA{A~9o=#`k T`@@*B"R?@ gKnu)bi(~5aKC?(qMT`A/"QRC`C`C`C`B @7zbB |+|8 |+yZ o+w{+x;z_aT!Q  ~9bgg{ y y;{;}~`#zї|ෟ4cA}KAB@#`SAR~A8@ } `? @n;i#`T?) `KA ~Ou/@`RO@ gn)~ i+}`@@B`R`?@|ATA+aa!DuDs@ ?!RB?a!hF# ?ց!dA`Bs@ ?*B`R?)`@ccDBAR`?ְ@G#'+/37;?CGK?#'@G37;??d$D c%Ѐc!"yR37;??d$D c%Ѐc! ™R37;??k`T+d$D c%Ѐc!"R37;??#'d$D c%Ѐc@!"8R37;??! >gx R#~!Ђ dA{Cc!BS[@' ?@s`@9@5BB`C!.@?a!(B ?`A'@@BT{ESF[GcH_xDRB&?DHAHRr?dЄ G.#?@@94xO@k y9#Ds CB @8|qT 4$qT ! ?T@9 ?ց!@'?@ @9|q T # chc8|qT?#@` @9|qi T #  chc8|qT?@` @9|q) T #  chc8|qT? @` @9|qT #  chc8|qT?` @@9sxPq`#@95BB`C.@?SY9+A&%b@eAf"@q ?s@kIsJGҮҜBB`C@?6RB&?)@Gk s ?k s `G?       {_qKTTS@`N@*a!B ?7c@*`?qTk Tc@|@bR@c@AcBaRSA{è_@ R`BSAR{è_D$DS c@,!' (=R?D$D c@,!'`(B?R?{S[b7@*RkT@kTcKku54c@k)TXA*f@ B|@*?cC*SA[B{Ũ_Kf@BXA_kW#*!3?*kT#@cCs #@@D$Dc #c@,c`!' (R? {S[*W)Kk Tk T`@RkkЁA!D ?*k T`@k@Tc*aV)B`)u@`F@KEDkKKR*?bB @~@@?bBL@! *@?@`f@Rc@* r*KkA TkTKk T`f@aa!(B)Q ?txfcC RSA[B{Ĩ_cCRSA[B{Ĩ_D$Dc c@,c!'(""R?D$Dc c@,c!' )#R?D$Dc c@,c!' )B"R?D$D c@,c!' +b%R?D$D c@,c!'*B%R?D$D c@,c!'`+%R?   {SA 7 W)cK?k T[@B|B B|_kAk* T@Kkt " *@6cV)`@k Tb@?kh TzS?k"T_kBTkiT Kdf@K_kBД!b@a@ bCKkTc@aKkhTa@?kITBq[BSA{è_[BRSA{è_kTc@AKa?kHT_kC TkT"KcKb)a*D$D[ c@,c!'+AR?D$D c@,c!' ,BR?D$D c@,c!'-bCR?D$D c@,c!'`/HR?D$D c@,c!',BCR?D$D c@,c!'-CR?D$D c@,c!'.CR?D$D c@,c!'.CR?D$D c@,c!'-FR?D$D c@,c!'/"FR?D$D c@,c!',FR? {S[cks5@3@_?(6@96,@?@7@[#XF y9_EZR`G;?qMT|@ ?ր5`j|8a_kT @9R_kT @9_k!T7@a!(Bt ?BB D@?bBL@!0@? @H{{F B`?U6@E@Y9cC@GO ?/ ?A@G307K@bB$Ft*B`?A9B9Y9DA39?G@RB0 ?A!F ?o@(TG@`6@96@#@9 K6RK @@?*qT?[B*SAcCkDsE{Ȩ_@`a!(B ?֓3 ?;@@?`6@[7@3a!(B ?.@42qTL Tq@ T"qTx? q TKS?4 @@@ ?*qATRR 6@C@?Sk T7@G@RB2 ?G@RB`2 ??@*SA[BcCkDsE{Ȩ_;@@?֛@G@ARbB G@?fK@@!@ccdG`?KG@B0!RR ??[B*SAcCkDsE{Ȩ_7BqTKm@a ?R?7@a!(B ?0qaT\7@nG@B1R3 ??[D$D c@,c`!'12R?`G?{A!F  ?7*QRRR)kmTcjf8dQ$qTdQqTdQgqhTd\Qcj`8g`Q _%qIT`QqT`QqT`\Q ! `"8B?kLTca8 |@qT!c"8B?k T @{¨_Ci"8@! djf8B d#8@9c 8dQ`Q  {ScA!F[ ?bB @!!@?bBL@!2@?7` sR@9q@9S47@k TДD6C,Rx4*? C,b~Ssb8s88;9 9@85kD97@sESA[BcC{Ǩ_*?8@834*?@*?֠8@8s57@7@9sESA[BcC{Ǩ_`Gks?{S@[ @?*@*[BSA{Ĩ_ւ<b@*qT18C:T@@`@ 7@A!B ?ր7@ccdGB3!@`?1T @ 1"TDЄD!RB7?A!(B ?"!T@TДD!RB5?!RB`6?CcD!RB3`?DЄ$D c@,c`!'`34R?DЄA*{C#@' C_+?A!A@'@"@cҁT{E_@G?   BBA{CR@@'SCc_|3G^ @B9a(7A!A'@"@cT{E_@ ?@A!(B ?@G? {SW)kT*_qT`DzT*Za@@! aSA{è_@!_AkT!RBc@@@@ RR@#c@$*@SA{èDЄ$D c@,c!'-IR?DЄ$D c@,c!'7IR?"RCcA{Cd@Ү4@9A!A@"@cT{A_@G?_q T{S*[*sK qT*5KSA[B{è_R_ {S*   *7`W)SA K{¨_{S**7c@*@SA{è{[@*4S* c@|@kccTc @*`?qlTSA*[B{è_*SA[B{è_@@W)@ RR{B 8S[R@W)D@cUеDcˠ?B c@+Tb@a@`"ˀ!kT`?kT_kCT RSA[B{Ĩ_`F@q T`B@6`?T T  `F@RB9?`V@a@`V TjT`B@6b@@?q Td@B`W)B RR`t`F@qT!T`B@6`@`7 `F@!RB8Ҡ?֬`B9@6b@a@c@!c@"˔˟-T@kT*Д! aTa@@kT!R 7RaB9R6b@@?q`B@`7`F@!RB:?Rb@a@DЄ$D c@,c !'-[R?`N@A!BR ?@a@wF@ ?*B;?@Rf`F@!RB ;?R_DЄ$D c@,c !'`9b[R? {S W)@@"@#?TdB@d7?TSA{¨4˟T`kT*ДB bT !RSA*{¨_!R6c@b@   @c_  @a_  {@ A ? @{¨P*B_ A!A{CS[ck @   RV7c@ ДRWR@|@Y9BvZZFT ? 4qT@@?@ac@a W)!!!v@A@@B!T{A*SB[CcDkE_@G? {Sc*BQ7w2_kB TB9 (7@a ?փ@ W)!!8,T}Rԓs`L@k|F[R;@?@?@" ?;@T~@?֟@TZ4SA[BcCkDsE{Ȩ_a!|D ?BBC@?ccF`?BBL@a!>@?{bB ?aR[UDSc?{@v b?3   aR?szs#*A!(B ?*cCSAb[BB?{ĨaRR{[ւ.f @LRr?kT92cc@*6R`?ր* (7 R9v֎C*#?5@! ?@qT@? @q)T?0@q"RUеE9R$BzBRҠ?@RҠ?T`B9!7a2`9`B9c929B5!8cba`94#`B92`9`*@@? 5@ TA!B ?aN@ bBF@? RCR!!F ?4`2UGBz.@a!?a*!Ҡ?q@zTbB9!*Bxb9"BB@? ccGcR`?@?$UT!@9?q@z*Tc.@b`F@B DD!R?RA!A@"@cҁTSA[BcCkD{Ũ_֠4!!F ?, TCcBYHRa! r`?5    R9q T?R=`B92`9UеEBR@Ҡ?@RҠ?`B9`T2B799c5!8dba`9b B0#_x@@D`@x_xAx_xBBBCx@?@5)R@hr@D@4@ TABB8G!R@?֕@1@T5aB@6=2c99B5!8cba`9YHRr:*C@9qT!!F ?, T _@|G>.fA @LRr?kT@95aB9`F@!xa9qTCcDbaRB`?֟O#tF@||@A8_   R_      (@PA@   { (@A!D` @ ?-Ta@?*Tb@bЂ @{¨_ @{¨_(@@C@@-TcB|@bЂ@P@_{(@@@B@!BBXC@?{_ "BA{ S [ A@O"B D@?BBL@a!@?c v.@!B0cab`t*!!F ?WBCB?`6@B @CcB`?@b2#cB`?@B=?@`F@8a6@OBbGG=WB'*B#c?ր7@@ @s@98 5@?qT@s@c@ Tv@b2@B= =+"BD= =@?*qT @B9 (7@@ 6aB9!2a9@H@`J!`*@BBXC@@@? c.@b`F@B $ЄD!R?R AO@@B TcM*{JSK[L_c.@b`F@B@ $ЄD!R?"B`C!.@?5@c.@b$ЄDB!!R?Cb`F@B $"?6s@c.@b$ЄDB"!R?Cb`F@B $"?@7@s@,@b`F@B%$ЄDR?ր @A!A ?֩,@b`F@B &e.@b`F@B`$&D!R?֛ Gs?@Gs? Ճ{a S!3|@$B4` =*=?*SAB{Ĩ0D_   C#cA{SA!@#*b@"B G@?օ@`Aq-T @@eL%0CT@5R!!A@"@cҡ T#@{BSCC_A!dC ?7`A#"BLG@?`@ B) )@?kT!!(B ?aA*#cG!@)`?`BBlG@?`@A!,B ?*6a@@?q-TcA$Q@c@Ba $L$! @_?aT@_klTLA?kT`AA!@ ?֭ G? Հ{S!@@`A@ BB0C@? 5@g| @R}&@cE)"C-zbh@;b"R""or `Z `{ ` ` ` ` Fxe6@9gxa2@9d>@9c:@9<SDK`* *!*)eF@9aB@9cJ@9dN@9<S`*DK *!*"dV@9e^@9cZ@9aR@9BK<S)B *zm`*:@!*&Z~"<&bF)cB@!d@9e@9B) | @`ӟF|K !KA rSA{è_!!dD ?`@!!E ?@_   {cA!BS[k ?րUеCbB '?bB`'?s!!C ?6F@RqTqzRZ5еDRbB'?@FA*%R?RbB(?[BSAcCkD{Ũ0*B@G?   {S"$@bA@95CcC"B7`? B?*%ХDR.rRbB (? xC?#cF!&`?"BC@?!!(B ?@SA{è_#c`D`?@G?$_q-T{SR[WZB ?s @BBQ _kmT@*dchu@c Tq_q@zT RR@s~ch<@;@=A=><kT@SA[B{Ĩ_ R_  {d5"DS4N@?a!(??a!@)?@aSA{è_@G? {cS* q%A[A9@sR`*6c Rk7L"s~@~~*9G'k9_q T4JB[{D :ZCY9F L@ @2S@R @F' @B| @@)j"()$ )',SA?@@@4@`4@S?aU@|AT`?@? ?@a!)@?#AT @@ qTb}R 6S@qT99sFR'@/@saktxA`*@g&*ج@@c@e A)  ?S@xk4z kKT =B~@ R =~=?:9c]k^s_ A@@BҁTSA[B{ƨ_#c@R`?k@*" qTQRRB  |l.>_TER"~Rw?J7c]k^s_@kTB=@t=?@RG@s@R k4R99A3 rv_@)RucA)V)KK@)@)tSED){A@tSD ||@ @ ?S@?qT'@R@kT @ k T@kT@C k,TKE @BK,@tS@I@|@|@#*@ ե"q|Sr\Pc~#zz#{{@`h4{mm!8@@@?bqmTb~#`lT_w@ޓOO~|_ @    {S[5еFGcWXgG*kZZ@s99O@;{+B`?Վ@ @? ? rC@?O~@D"R @6@V@~=|"fue2cb"9 ?7SA[BcCkDsE{ƨ_ցV@Ҁ@B#@B*$D!R?SA[BcCkDsE{ƨ_ G?   {nSH@L @8 `T@# `T( `T@" NSA{¨_T@@ `T@# `T"a ~@" NSA{¨_`@B#cDB`+R`?`V@azIm@a ~@# @T h@{S|gab@ T @0 `TSA{è__`@5DRBB@,?aj@?=!@aV.=P`f@5*B@!@ ?`f@?tf`L@B @@?`j@?@jSA{è_`@B!RB,?5*B0G{!lFS ?`f@@ @9t6t"B9R!!EK@G?   $R{"BAS4[cks!lF? m@`F@Ҥ9 ?ր@`7'@>`|g!T{@"O@b o;~}g@|3sG.g֖EJB;{D:ZC99F!!L@@!@A` ?6k@ @#oTo@!@4@|} he@0@#oT'@Rxg"+o_kLT#`gj;.gT!nן?qnlT   P@qTB9J @ 99A@@BҡT{CSD[EcFkGsH?Im>Eck@@ 7'@q>`?W@;@n`?qT3@`@?@o@?@瀹C?֗o@@T@@"@9 6> @[@#AT>$@_@#T"@W@_@T !E ?րkb#B9g@b6 A97@B @@?րg@r*@;@n`?qT RT@ 9p`?@? ?@A!-@?oC@|g@#oן 9W'@+}#`Woxg"+o_k T!!@!.@#`Tgj;>g+}!oW?qoW4_kT!4 R\RX!!(B ?!oo@@_ dTMgj;.gG?  {!lFS ?t\)kT~}`f@an@@!hu"B @@?`@kT@SA{è>E  {S!lF@`* ?`~@`7a&@>`|g!T`z@"}N@b o;~}ob~^@|g#o4`f@@#$@c~@A`*=?=`?!`|g!T`z@"}N@b o;~}ob|`f@@"(@A`*@?!`|g!T`z@"}N@b o;~}ob%`f@@!,@A` ?!f@`?N =!E6*B{S8@#cDC`?`f@`f@@!@ ?`f@4*B?!!G ?SA{¨@_{C[Sck!A.@3%@@? qT*"B @@?"BL@A!/@?`@#cdGB7D`?B`D?"BG?"BlG@?.@|O#R@>g@A@*=aV!tA={Rev^dcb)r~~~ =~B~z m~b ?4`f%A@@BaT3@{ASB[CcDkE_"BC*@?BG@?*!!C ?t4$DC c4a`c@!1`2R?Q$DC A@c4!@..bR?G? G?{S4!lF ?`f@@"@b*@?SA{¨>E CcA{S*[a@!lF ?֟q Tq`TT5z@m`~@ `7a&@=`|g#~T`z@"|N@b ;}|`f@@# @C#R`?*qT`~@@`7a&@=`|g#~T~N@"`z@ ~b+} ~`*@6E?֠7`.@?7`f@@# @C*`?*!E {S*!lF ?tzSA{¨>E {!lF  ?a&@3@@9!hd; =+>h$T_qMT(Rg|@RrChd8hd8#K%hd8c|c|cgc h$8T_ {cQQAAc K c K*j@QCz  T xAk+ T_q@Nz, T|A?k TAp|SA}SOQk_k*TK*1 QhQ11!K@M|}~J1~&\~ ~~ R 3 cB a@y? k!ayk TK-i aehfx$@y kkeh&x $y `T'yh+xkT$!?y'y?T @!R9{¨_$D C A@c4!0`0 R?$D C A@c4!01 R?{k @q Tc @q-TSs@RR[3 rs5RW@{+A@R"B)`?W@!/@$@!*zAkv2|S1\P,A)!\P<T{RSS[TcUkV_@A!(B ?_@c@RR?A?@A@?*`?C@ka>TR7@~@$R"@33=+C9"Qy D|~="bhb8_q`T? qhT#~"a@!+9"R"?<9!!F ?*C9C9!*?r@C95sWC@q!T@yqTXR08@T@A!!dCE ?*@AB?*@B@@BA ? @_k7T@@AA ? @?kC5T@AqTCAq(TgB)QECG9Ka K!QB ! B *#B{A6A !\t #G ~R#@ @+??+@ R@@*??@ R@@*??A@@ aB@_@T ?D@EZ{xA@}|B: =\^? =| =~tC<<,=c`E^t'$?<`?A@ B@C@?@X"R @!LACb09LAc@ `?`6@ ^D@R,BR? 6@@99) *4 q`$Tc* `?B9!4B9Q|~|@@ !h`8?qaT@h`8qT@#@3== " R!!Fy x ?*4B DB@?BL@A! >@?BXE@*@?#@@@*ch@ @`?@YCR  B@"b{A#"x ?@9 @@9+(*??@G@RR*FA=~A= = =| =~tC<,=t<?A?@@?"R R??@@D@R@@R?6@ ?A@@@?U @**`?6@4bECC?A@?W?A@?aB)U@c@?A?@ABA@?CA@RBAAA`@@ @I RsW@@,BRR?7sWGs?$D# c4A@c`!0@7bDR?$D# c4A@c`!08HR?$D# c4A@c`!07"GR?$D# c4A@c`!0:OR?$D# c4A@c`!0:OR?$D# c4A@c`!0=YR?$D# c4A@c`!0?!A?@"@cҁTk@{HSI[JcKkL_$D# c4!c!0gR?G?G?{B D @?BL@!!?@?֠ @{¨_G? {B D @?BL@A! @? @{¨_G? {[S"@ @_kK0T@@c_k .T""Rs6@a/@?T`F9`6aAA&`AcF`?@7vA`Ab ARs.BR`?6`Ad ARR`?69@ئ9?q TkRZCB<R9DccE`A?*_)B@|RTH44*g@y@yKqT`A  Qj!"Tj T`{A ?kT`@*@*RR*c@?`A*c@*RR*c@?`@c@`@B9c(*R*R@?c@y A SAq T`@o8)RW`@O89?@`@#t959#*K*@?R*6,O@*RR`?F*;@?֟kTG@**RA3`?7*C@*R`?;5C@*RPA!Q`?*F;@?֟kjT`SA9kKTG@W@T)@`A*@*RR@?`AkTg@@@BA{ k+T@kDc@ T`AbAcF`? *|S@RR7RsE*cCSA[B{ͨ_`/C@qTqT#@#a6@skT @Xs @qTP@skT`@``@aCG9@6|S4`ARvSR 4d@ L|~ӃR%@y$@ykT!cqATsk(TkaT*a^SR R6`AskT$D# c4!@c!0`R?$D# c4!@c!0R?$D# c4!@c!0`R?$Dk# sc4!@c !0blR?$Dc# kc4!s@c !0BlR?{C[AcSRk*cD@#*`?ֿ@RC6azAb~A*cA]azA*b~AccAU@@a.@@?Ts*sD)`.**y@q TҠ @Xt@@qTqT.sZ$A@A!a 6@kT***sZ @A)@*@*@**`!A@"@cҁT{USV[WcXkY_ZGs?    @9R4{BkT(6b 67"BpD@?* R*_"BpDA@?**{_"BpD!@?**{_"BpDa@?*{ !0B0C @@?֠5` @@9@6a@!`@BcDBR`?R @{¨_   @@9_qT" @7%@F_kT%@& "8q T@9c5_   A{CS[ckW @@93@@a@9?q T`@9 59R*c`8s #44eQdq TaQ!?dqTq@zTRc@9sc4@9kTqaT@c@95RaQ!?qHT$6cQ?qcbIz95Ob ``8qT@ @8?qT R!A@"@caT3@{ASB[CcDkE_B0CA!`@?q*G?{ CS !A@"@G!@ ?*cE`? [ wu@T[K@AG@@Bҁ>T{ISJ_"B @c k sA@s@@?BL@A!@?E#cBR`?3 T@5k58@ ˟MT @8_k T`38s@ ˟ T3F2CAC+[ @974@@ U@9O)7@@@9?q )T @FO) @9qAT*7_kmTi%8" @)FO) @9q Tq@z T#8c \@lq TQB_dq TQB_dq( Tq@z T!7 @9q@zTqT @;)FO) @9q@zT 4" @)FsO)@9a 53@'4@*B?[[@(7_km(T 8{'@sF!6T@`?XD?֠#4`?BB@?@B@@??[KcLkMsN'A;@);@O) 67@qT'76QB_qiTqT@$7!@9*A4 '?pqT @98qT8@9q@T 7_kmTx<89qT8@95@3@@9@ ?q-TQ@85!?Tsq@zaTsq`T!@9a5@ 5!?T"@9_kaT*q T+@ *_`?_@'@ R)8A! ?`5 5D@B9?q@z*TsqT!@9?8qT7_kT R`<8!@9935QRtqAz@q @z*7_kmTx<8!@9 35@94 @@;s)3@;@sO)!@977_kTa<8 !@935 R5`:87{@kT;@a"8B7?pqT?qT@8?qT?pq`T3A@4*\7_k Ta<8 @9_k-T`38 @9 C@9?8qaT@9@98qT3%qSzT7_kT<8,*[@9 [3e?[KcLkMsN@*B?#@`7?[KcLkMsN h:8G[ c k s?@9*`:8`s8a~@qT`|@ak`8?q$@zaT!4sqT!a @9qT7_kmT`38s!qT @95qT! @9qaT7_kmT`38s!qT @9547_kmT`38s @8@5@5`:8A @9@ lG? {S[ckF9C3@+qMTRRtQkT~@R3@sBQ_kLT @_kT@_Qk T@B_kjT  Ք_kTs@ZBkT5+@SA[BcCkD{ƨ_ ?`TB|?`@"RQ`$D# ! c7!@ R?{cAS ~R@`aA)d@cG`?@cD#BR`?BXE!~R@?aA)ch@`?b @c@BtA@?AbBG@?AA@BҡT*B@@SA{è$D# c7! c`!@BR?G?    @_qT@RR**JB) C)kЃkc ЂB kk_ATkЅkЄ'^'k NDz Nয়;N?=_dOR?=_{kAS3[*c!@@?qMTеC3CRR   @B)C)#)  )qMTQQIR%@T@kKT@kT @kT@?kjTkT? @Zk T@A% Z @kLT!A@@"@cT{CSD[EcFkG_G?   C BA{CS[c@@B DN@@?!! ?ր<BC=@?B @@?!!?`"@B`C!@`2@?`2C!@.? 4a!'?`5ДB,!xC ?!C ? !dB ? "@B\F@?֠ 76F?`?`a@?@`T@R!rkT!Hk T_@R !B0!?"AB!@)R?`@aB0C!9@?` 4chD`?֠7!B ? CRzA$G}cBBt`?֡"@`BA@?RcD"BB`?!B ?!CД A ??`?!(B ?A@@BT{ASB[CcDC_t"/uЄl@!R!`bҀ?֒Єl@!R! BҀ?ֈ!B @_ @#~_BA{CS[ck@@B DO@@?!! ?`B@cDu`?a@cdG`?cG`?O|>gV!tA~&=:J~~~2 ?`4:@7Z@9cC @.Ҁ>@?? ?O!R~~u`c~aJ~~~~Sx5T Ca9AA9@@BҡT{ASB[CcDkE_BCAR@?BG@?**!C ?4Є$D# c8A@c`!1`2R?G?G?   {!ES ?`*@*B @?!G ?SA{¨_ {S!lF[ ?֕"@B0C@.@?5[BSA{è>E!(B ?B`C@?֠!R99>ESA[B{è{S*!lF ?֟qTt4@H@!H R`9@SA{è>E{!lFS ?!Ef_g_{S!lF[ ?ִ"@a@@@6|@b@"!HB ? @Tb@5 R99>ESA[B{Ĩ!|D@ ?BC@?cF`?BL@!!` @?b@@4a@B|~@cA`?{S!lF ?֕*@!(B"@ ?`@ 4J@"R"!J9@SA{è>E CBA{S[#c7RksCA@!lFf@ ?@nA)BRfB) @Gb"C@aK)4@?kdL) Yza(@ok \[z_jT`B@@w9@a(zl )Rxd )o4?֢N@6A@@BҡT{B[DSCcEkFsG>EC@CG?{S*[cks?m@`!@)!lFw9WF ? ?B D@?!L@g!!@?`( w@@)`|g?gSD!SB?(BCFnO*LAt{b d@G_@`bA9@9 6A6@476 ?@`J@YR@?@w@)z@@@96`>@@99K) _)Ak7@L)@CzA+@{@ Dz BzjThB@ R9@ @ )gG@+[R7`?ր@5@W@ ?ր6BA`@Cc(F7=*?=`??A9?kTK@9 KK@#+@`J@B K@"+O@#@? @q T$@@Kd86BlG@?֡ @c!HB ?c@ @? @"T@ ҡ@K!C@ ?֔"aT@gKE59 ?b b%g`F@ ~ T.RS@ c8"cB?!E  {!lFS ?!|@DF) =& @)=bqmTaba @ `LT`D)$R?q!A85>b xC4?k`DzT@"RE*_{S@@`@`>"RcxF! ?g0PaRxm`?֡B@SA{èF@"cdGB `?Gc|E!@b`?``@3R !B;!@?`@!D ?` Gc@ЄC!@?` @n!,D ?`@`@!|A ?`G?A{C[@@%S@|` @ @)cE`?` @!,D@ ?a@C?a@9@!*?q`9@9*99SBA@@BAT{A[C_SBSBGS?  {"R!@BcQ B !@_"  !$$?` @{¨_ {[!@Sck ?* Ra@ _P=9u@?h<qT2Ct @R@?4sbkTR #@83!E ? #SA[BcCkD{Ũ_$D ! c@:!R? {S[c@q-T#R@2C@`?ր4sbkT#@!$C ?*R @~!!E ?֠j4`[BcCSA{Ũ_R[B sf#@cCSA{Ũ_   C"cA{S#C<@Gd@/@`B@_p@@]=[xAb@98@<@Ob :7bV@?g^b~ !!`A`BTD@?A/@@BTC@G@{FSGC_G?{!!S&D7mM@ l@ ?m@ @.@ 5?A A ``@?A A ``@?֠A A ``@?ցA @`A 7CmSA?Dm{Ũ  {[*Bc`S@:@qTҠ@Xss?֠:@kT":TSA[BcC{Ĩ_FF*$BR#@9c4{Bk9#GS[6RcW qTb B_qTq @za T@8w4(q TqTT`_8(q T#@?֖4`@9pqTc@95SA[BcCkD{Ũ_`@94Z#G"B@?s c@Ab_8B8@`?"B@@?qs"CB@?c@A R`?Z#Gb#B&@?֮"CB`@?ּ_{[!lFS ?v"@B@@c|@!8@x!K>ESA[B{è  CBA{S[c s A@/!lF ?ִ&@:@q Tf@|@@Tx`C@ATB@a@_T|}|@Rhwa@`@957 R99`(!(B ?ր:c!T@cF B}! `?ր:@Q:A/@@BAT{FSG[HcIsKC>Ek c6`@96`@a`9B$Da@`@@?o@qc@9d*@ob+@`Bzb*c9!F ?`o.@!@ ?`"@:8@Zc>@bVD!@A`?`"@ABA! W @A`?@`(B7BB@B?#@@Ҁ?`"@@ ?@@@ 5`@@ <~<&<=qT?@q-T@@c@a"@pG?c@kJg R99y`@ 4B DN@@?!!?k  a@@:aa@a!HB ?֙@@bT:@8R ~}~@3k7:kJ"` D)nRZRq_q+!Ђ)@Ec0:Ҁ?`@c@kJ&B`C!.@?`7!|D ?BC@?cF`?!! ?Gk c?$Dk  c@:! c`!FRc?Gc?{+!lFcS[ ?&@:@sqDTs~@8Rk9+BZFs1T@t~}Uht@_T ?:_cT@BBˁ"B}@?:@s9Q:91TkD+@SA[BcC{ƨ>E$D c@:! c!BNR?{s !AS *[ #c G @?_q` T`g@`?u;@`o@!HB~@ ?vo@@B;TwCx$b;@_qTR `o@b;@h5_k T`@hu"@9a7bo@B b;@_kLT`g@cA9ao@*FBR?9BE`C@?!A?@"@caET{HSI[JcKsM_`@96@9!@ ?`@@9`4#a@RsC@R'@!!`*'@!(B ?`@#7k 'm/m7m?m>@mwC@  T0:@@@bBTD@?6A- g@F)"")/6bb>",""b@-;=z2*;=!RRaZ ;6`r ;k)/Z+/ v |AbAb;, ;;- ; 9 ;k96 ;^;< 7 8k)?)>`9=+.89""BB`C@!@@?6!F ?b@_qD@z T_|q1Tc@A`?@ @Z+B@@?։)/>@)/k""#A!@W\@9+4@_q`,TP@9A`T@9`A`X@9RBBK!?#!cR?A "A AA @A RK+I+@K@&D!?@z@?@qvğA``A`9c!?*?֣A ~@, ? >K+ @ ;("A K@@+@? @N@?"A`aA`!?qƟ*? ))? A K+֢+@? A A +@+@K@'?@@@@?A``A`!`?'@qbğ?AA @@A @#@K++@?+ @ +@?֡A ++@?֡A A ++@?րA +K@b#@+@_qmT "'#}Cb>9.9.   a@/Xx /!.LT_k,T@!? @@?'NmkL/Om7Pm?Qm!|D ?BC@?cF`?BL@!@?`o!PC ?`g/A  @`A A A !+DT).?@A K+f+@?A A +]9.+@?A +S+@?A A +J+@?A !A +A+@?@A A +8K@+@b#@#BR&D#BR&Ds"GB`?c@Ab@B8@`?B@`?@cGk 'm/m7m?m?G?    {S`еB! 4R?@*SA{è_!@?!`?@!?֠!?!?@R*SA{è_C|BA?g{ SA@T?g@!0@9@gx6 @0A!@5A@@B T{BSCC_@@@qT @ R#Rc  @"H_LT@!!H?TqT$@!TqT@@# @@?kT"@~7"@{@7@@?T@1҂@DDBBTTTH_ T#@ѬT  #@TmT!H#@s€G#? {|/g o@T@ 3@qd @qTa@ RfA`A`A`]g  ` |T0 ~Oa!@T"@kT%@CT_b}T~b} |!T |C`AT!@C`aT @@{¨_|^g@@`{¨_A`A` {Ss|@[!,@ABB@b5@5c:@#5 GB!$C RR ?րfR @|!!E   ?ւ:@@k7@bBTD@?cC#@ `@5SA[B{Ũ_cA`?ր@5c:@#5[BSA{ŨD{S@@_!kT!|F ?֟SA{¨_ր@!D ?a @C! @b@SA{¨{S[tAv@@S@c|E`?ց"A9BE@?` @@9a6 A9 6s|@ @qTck`@O`@S2CFWG;   ՚@~{X@ky?`@4 @7@`4 @"[ `@ ?ր5I7@?@@@?|@ @kTcCkDsEC@`2 @ 5@~A?@ "R"0? ?GH@c2@,@!E ?@!F ?* @cA`?H @c2@a @ @Bt_=CT#@9C7@d@9}72` @H5#@#`TfO)bb~`gg #}~l87 @)3@AcE@`?֠ A)GTC*;B) )?#@2b@_ q WTB@9@9L5+@q7BB@?/!E ?f@BG@?@ /2 @q@sT+@nU5*BtC@?@@OBTD<gJ@?BF@?{@!dD ?A`!DB ?BDD@@?`A`!D ?րA`!,D R`9 ?l&7x@|gcbB ]=~@~=y@ |=>t_=@%T#@9%7 R#`@9@`'7 @)3@AcE@`?֠ A)GTC*;B) )?YR'@5R2>@9@9b@:@9.@_@9?""@k"'<7$R5@bg~#`T"AbBB+@?A`!E ?BGf@@?֮"@ R2+@ qB@qAT6A9B2{WDA(*BtC@?O@@gTA`!DB ?BDD@@?`A`!DZ{F ?"RaR@?@97!@?qT @R!    T"R*@?"RAR@?*@D$@$@ {F7R &`?@?q@@z7!5A` R!,D`9 ?c,CRR`?A` #@`4@!@ @ ?A`R! GTD!@A`&'@9q (Tpq)T@ '`?|@@Ҁ?\'7"%Tw@ !@@ ? Rf@@|! ZT=w@_h<!EC ?w@A#!(B ?G`@!F ?BE`"@?!AoB"@ҡCTC@SA[BcCkDsE3Fm;Gm{ɨ_#>|@C==^==B\F>==@? 6A`!,D ?@52` @4?@qTaN)c,C`?A`t #@5 @CS?@`"@wC@_qF*"R?BE`"@?@zT @4@4@qT @`@qT qhT8R*359A# ?Dk3T*q`TGBA!0TqT"A[R?AT?@qLT @)3@AcE@`?֠ A)GTC*;B) )?@`5H)O@";@ 3@K;@_b<b @`K qmTb!7@xe$@?b 7qT @R@)`W]b>b!^ | | -CgCgC'xx8?gN+aT@YRn'.@b@9?_q@'T"k""6R .RH).O@'R3@ @bK;@^" f!^#<K"W*7|'!^> ?#?=.#>>? ={@9q!T@@{CҀ?ֺ+DT*@@#{р?@ R`?֨@YR'.@>@9R@99?:@9b@`@!F ?RB27A9A(*BtC@?@@OR @R";@  #@@b`?9A# ?C| GS&G"A@8R *?TR#Ҡ ?sG*XD@`?xE*`?XD*`?DXD`?D*B@'?!$EOk=x@C .sF=TR_Cno____`?!C ?CC C] =?|5><<= ]@=YA8<[Bt]=_<=zd|l~t<`?@@qTCCRY@R*9{3/@g~Sf^Pe>Hs?R*?AAAc<S@@a`*b"*!*!/kT * .R /R .RnA`q AzTV !|@"!@Vx`8x`q@zaTDkAT""@k"7*RRR*nG?*#{S[@@!pB ?v@:A @?@?R@!d@ ?֠&@SA[B{è*B {SRDsR?ր`QSA{¨__  {S[c6\B_qTДvB#YQ B|@_Bs?1TR9Q?`6@Dd.*ARB@(?#@SA[BcC{Ũ_#@SA[BcC{Ũ_ BA{#D@c@@`!A@@$@T@{B_֠G?       ա |R>Gg(~#@96 @T=(@# T#~TB!_qaT_=,@#T#~lTC|@b"b ^<@#aT` ^g` 8@+~#`_C|@|<g{ | T@==Am{¨_֟N=Am{¨_|>g@ ~A@T#~n`ן?q`+~#`L|R^g@96#~@T(@#~}T,@#~}W_qc!?qTqǟ_*!?qTqǟ_   @R>@#~T#~ RPZ_C{Sk A[ c _<@7ҙ@=^A k  @cJB3?aU3@|@ T3@qTR@|`h<@}j8# c kcЂcKcsT=CD_<^@==?"@.K@#?T2 @4qT#@;?R, ?   @<^!N!^^ < <+?+>_ n~ n;N׿N=NGn߻N@<T Ac@kT!ca5$D c! ,,AR? @A5q T#@R $ @C @T$ @C @k!T!BT$@C@k T!Rc%|@?aU5@|A TK@R#@b|"cA`?BE@?c@A7@@B! T{GSH[IcJkKC__kJTK.@96C&@9/ 6#B" Bgg`b/]b}`#~|*!|D ?BC@?cF`?BL@!+@? !|D ?BC@?cF`?BL@! -@?  @Gc?{SA"@@ @!xC ?\@Q?dqHT[*`@$@6cdҸ#DN@?!-?!C* ?@ !dB ? @cCB<@`?R rk` THk`T4F?ց"@a` @B\F@? 7"@!F ?`@dchD`? 7@`|ga?!.? aR[DcE!A@"@c!T{BSC_@ЄHDC!`"R?5 @`T ա!A# ?!A`B ?!(B ?[DcE@ЄHDC! "R? 5 @@cDB.R`?[DG[c?G? {S[cks;m!A3@8#"@?@ @ @!HB ?aU|@.T@RB G`A@@? @R@"3@$@`A! 34ҷD/RH@7 @! @97@?q-T @qT@G|6(@! AD|}B @i'h$"3@skT @XsL@?qT@!Rs?@"3@khT@A!dC ?ր'7 3@4@BLGA@? @M)")`@_k T@?kT!,B ?6 3@qT3@?'7!*W! tS֖D~X|~!A#DOsw@R@!A%@D|!@@|}"@'hd&h`hc@@3@A)a)Kz= @ @tc CxA~ tS`)!|@S@c |?'@ gsh$?'@qTq T)R?K?7@@+@uSB|@`? @ OK@[\= gO@9?'XX=.G)ZN=8o0o9N(o9N9N7NNNø.øn[N?onnnޟNNNû.û.ûnûnû.ûn[NZNZN9o9o9oW0OW(ONNN<!TO@I  kT*  @CRw#?a@7`@k T Rq T F!`@ klT`@Zc @ kTfD)3@k@lCAK3@.k! K |#@ sBh!f)klC!T@ 3@!kTsBwBBA?B@B TSA[BcCkDsE;Gm{ɨ_!(B ?@cGA ~R!@)`? @@BlG@? @!,B ?`7?3:@@B"?qMTAh`8zaFa@?kLT @/@$@" ?ֺ!|D5@ ?BC@?@cF`?BL@!@/@? {@cDB0!R`??3$D cc@! , 1#R?֤$D cc@! ,1$R?֠Gsw?{ S |[ gc ?m/@@A!v@s @@O`T` @cAbb`?@R r?k Tc @#D?`7@5AO@@BA!Ts@{JSK[LcM?Om_a@BA@?@@>c2Tb%go|g! T@C`?k$A:Tcg`@9w~)6.@|g#oן@4. 3@96.@ G9#~TaC?qT`A*@P!@?T@#~aT.@@4 vb`?=abE92<7b99Fz@'rA`"zzBr2@zG ?ֿz@$R =~A=b@C2@2@d9R6bBc:m~<<|g!`T`AcCu|@P#qTj!@_T?@#oaTl%o@41@TDFCBR3?C#R!?J@cDB1AR`?7?g+opB@1C!#R?2 vb`A`?=wabE92<6!LE` ?։B?RkT!HB ?tA@BTaC !||j!N`!LE ?.TQ@B| ?`AcCcQcu|@!|D ?BC@?cF`?BL@!2@?`G?{[@4?qTcA#`? R[B{Ĩ_S$R_@CxkZ5SAR[B{Ĩ_AE!|@@c+?CqLT|g! T R@SA†Aqd|A`gb/R1T  _@q@T#Tc@k T@qT#$Tc@kT@#DTc@kAT7~+}kT/*R1T*@#|~WG5c@kT@#|~W4qg}ןa4C`@*kT*qLTaC`@k T@**q}T*1T*||Ohf@}{ S[@?=NE"`_8*<7s8!T@!B ?|ҀSA[B{è_?֠ ={ S[@?=NE"`_8*<7s8!T!A" ?!AB ?[BSA{è*B?֠ =     qHR @zן_  qHR @z`R,T?qT@R? qT?q`R_ R__kTna4(q@T,qT  š |g_bb=g;` | }_  š?bb;`;``_֤Є$D{ c!3`3bR?&R(q QdDz< T?qcQDGzןkT4B Q`RRn <! !<nRKnb b` ~;}_֡4B QRRl <! !<RnBQcn cc@abb_(a   C{ S [ P@)!A @WҡQQ?(qTqQ6?q Tq'TT*q`(T.qT .>5Rp= BVC9~~|=}~"`#7[)*j ?ggy qT/x;yIq6 VC9.5R>`= @~?GZ~}~<RC97>Y-#BC""@?o@m o{ o@Cb{Cbab?x@- ?z > ? >;:+>=,?T[)*,/ ?g 9gyx q`T1T >gf~ ?gx;y@/n?qT g:G^~;xnX-l`Z{"" }z z{ ~<|@-!0=_""" z { {CbCbCb"<>-+== x":~ y;+vCbD?TAW@@BT{KSL[MC_C  VC9.R>l= @~?Gz qTTqAT VC9.~>h= ?G VC9.~>d= ?G@}Z~<~d!Cc*kc ?!E ?zC-aURAէr?' ׻~G"#| T. x>;;R@CrRz';>>l@-B@0 8+; < :+;+=+9?x,_ qaTwB-{C-D-B;<'G:CS3?@2@_{!F ???~"@z@z@`"cNkO*[)P/ ?gl/  } ~2VC9~~~`7.~~~"׾~"#|TGck?l/ ~   ѢBA{cA@@#`?֡!F ?<`F{ xZ>+>>lC``>zr- yCbv-?@b@``SA{¨_ %R !Q Q?"Ҿbhcҽ"\haha!!^ ;{?{"+{?0T }RCgxa7kЁh#c00T_     Tt@$t@kkk!TA9%A9k T_@_k_kT`@#`@_qqk@T_q RZ_ԟ_R_x@!x@_kԟ_{S[Uck@A9@7.@ҧDF@BR ?s">@93Cs"`?R) ?5r@a@*r@6v`@sBZ@@!HB ?@@Tj@rAByӛzBa~Cxj<:<>?=@SA[BcCkD{Ũ_cDB ?`?ָ!|D ?BC@?cF`?BL@!@?@?2DR{CcS[k *@A4@@'ҡ!lFb ?֥M))DC3#?R@v@gNN&_kS!E ?@ 7"@94s rRB*aGA?*"@9?k,TsJ!0Gv@ ?* 4"F9 7s AkTA @k T@!A ?ք*c`AҜ@oA)\?)L)`?D***RB ?A)*@>E?ր `"ybz"xb#xbx"x"?x"B_T!(B ?֡!cB @СRB@?@9@6C9E9#@*991 T@cN@1 T_kT@B96@ @D?ր7 @@H@;@ 5a;@ 5` @!G@ ?֠@a@ ?ր@` @c?@"<@kT" @c#@ T{FB`?ր@ !G@ ?ց@ A``?s@1`T!F* ?c=cR @B?֠A@@B T{A*SB[CcDkEsF_ր@{FB!R?`?րB`? բBE R9@?* @L@Q `;!D ?`C{F@!@9 6CB!#R?֧`@@6 @sDB!R`?/@`@b2cA`?a@BE@?a@BG@?`@!XC ?`@[BcCSA{ĨBրAcAR @DB?zRc@$D c`c! @bUR? {S@FRR@b@C9"e` @@dhb!@BЅDB.DB?SSA{¨{S@!(B`b@ ?b9?u@9`@ @zT@SA{è_`@ `@   {S@? qTT?qT?q Tb@9R"7SA*{è_?qT?qT`C9!R@9SA*{è_@@!R`!R`@9s!R@sSt@`@9@6`B0C!@?@4@!R@z`@!!ZCуcA{C[ ">cb@ҡBBA@?րS!RsDbB`?ARB>`? @ңcdG`?ր @`cD"D`?b@bZB`Cc@?`r?`?`!t!tA ?4!F ?ր @@`D`@lA`!@ SB!A@"@c!T{A[CcDC_֢BCAR@?ւBG`b@?**!C ?u4$D c`c!1`2R?֡!(B ?SBGS?{ @G`b @{¨{ @B x @{¨_  { @`@a@?qT?q@Ta@aE96!`A ? 5b99 @{¨_a @!@cC9RR@!`@!B ?{S[c@`Aw@4`@@! T`C9 7 BRq@T`@cAb2`?Va@BE@?*aR!rkK:T`C96aA?|q,T` @$@qT!E ?aA`~@7|@!HB ?x~@@T`A a 7*SA[BcC{Ĩ_֠@ @*SA[BcC{Ĩ_֡!|D ?BC@?cF`?֢BL@!@?`~TtR4rтBA{CS[c@A@v@v)aC9!)7R`A5a@BG@?*7a@BA@?`@d@a(!@ ?@"LAqaT@"`@ED@+Fy2?`@H@?`@@?`@!XC ?y"`@!HB ?x@?@T`"AaC9+@ b"7`&AkTA@@Bҁ"T{A*SB[CcD_֖@@!`A ?֠5`C9b99 7b"A  Ղ4a@B|@B#@cFB}`?@a"A!Qa"@!C ?b@96bB96@Aa@BDG@?!0E ?`C97`@96 @DcB@aR? R`9`C96`AqmT*B`~@Xt?`AkLT9@!RR`R rk T.1 T@ @`C9` 6  v~@~uAc`@vuR@A4@!@,1T@!(B@ ?֠@cFB B}`?֠AQ$!|D ?BC@?cF`?֢BL@!@?``"AaC9+@ b"6`C9`7`A@5b"A`&Ak*T\ @!RcDB`?ր@w2 @bFbu5R6r1`C96~b"AB4`C96`C97 @cDB R`?m`@!XC ?`C97b"A @!RcDB `?֡!(B ?ր@ @7`C9`7b"AWR`&A׻r_k-T4`C9 7b"AuR5r"4@!B ?$D+ c`c! R?րG+?ք$D+ c`c! @"R?  {S[P$@!HB ?u&@@TcFbR"B}`?b&@aJ)#cRT1bV$P@zTSA[B{è_֡!|D ?BC@?cF`?֢BL@!'@?`&$D c!'@(BR?ք$D c!''R?  {SP@qmT*BҀ&@Xss?րR@kLT/ys2E*`?ր`?ր@@SA{è@ֵ*B   { ҂B DS@?֢BL@!(@?@BA!;@?֓!E ?ր @a@ @@ BPD@!@@?a@R@!@qTҕ*B Հ&@Xss?րR@kLT@/!0Ey* ?SA{è_քЄ$D cc`!') R?֠G?@JB #*7_qBğ)_քЄ$D{ cc!')B R?8_   <_T@R7 4@kT"8@R"6!$@@BR!Xc!A?{_ A9`7_T@R7 4@_kT$$@ A9#<@Xb!A!A?k`TqT R_ A9`7_փ5R_4q`Az_  T@Rb7 4@_k+T#$@ <@aXb!A7q_ A97_q_   {SP@qTҕ*B&@Xss?րR@kLT@/y2E*SA{èT@BkTaP@?kmT`$@Xb_{*7J !|T@BkTP@?kmT$@Xb{_ֿkK|F |  T@ 7"4@kT A9@7_ A9_R_   {S[T@7a6@k*T`A97v@`2E?`R@qmT*B`&@Xt?`R@kLT/y`*?֡!E ?`!C ??@SA[B{Ĩ_Cс!A{S @"@ҁ!DF ?6`V@7a6@kJT`A97`@@`@!F ?RA@@BҁT{B*SCC_` @!F ?4qTqaT`@# @@@_?kT#@A@@T!Ra9`@u!F ?#@`@!RcDB@B7`?֡!hF# ?`@!A ?ֽ`V@!Ra97` @c$D`?ִ`@cA`?`R@qT#ҕ*B `&@Xt?`R@kLT#@/!0Ey`* ?֖BdG "@?@6`V@7a6@k*T`A97` @!dC ?#@#@G#?{S @cA!`?dV@7e6@kT`A97`:@6iqR *6kT`A9@7SA{è_`A96aA9a7a:@76'@ARcD@B *`?`@!A ?b&@|}|gA@h`!_@?@#~~T;}n#`~jTl!R ~+}a9`R@Q9aV?kJTa2@KkT*BqMTa&@N h`?` J)c2@QAK`R?klTkAA:T@Є$D cc !' +"R?քЄ$D cc !'*R?քЄ$D cc !'*R?@_      { SA BA@?BlG@D@?֠!RbB?ARB>?֡!E ?֠@@a@cL@5@SA{è_֣cHBR`?@SA{è_ց!(B ?!(B ?@   B{CSAa@@A4` @@4`@@4*`@@4.~@# T`iR'O ==V`@@4`@@4`"@@4`&@@7`*@@4`.@qT7c~`b_bCb#=$CbW?T   P@"4 @dANXNNXN b  : aN OBaNc O{aN OZaN9 ObnaNcaNzznaN9aNcnynBhaZkabhaN:kaN<<@!.2 @9q( T @94>@< =@<%t=N[N ݧ  Oާ OaNaNaNaN}n~n{n{nkakaN^< PA9 ^4Q"R p(b]b}Cb#?O>TRèr' ?# AT0H# AT4h# AT8@D9qTp) @)Sbb"E EbtbQbrrbt0pRBbBbBbHH-D9<qHT4Q"!DL$#(gbFbf@bD!T 9@c"R@!F ?֠@cUcAk! #`?Z?DNA@@?(qT@"R&4@k`T!F ?֠@BC@?kV.%.=5@"R*@?֡@5*"RGck?ք$Dc kc !+@,$R?ք$Dc kc !+,(R?{ A`SBA@?D!RbB?ARB>?ւBlGt@@?ց!D ?ր@SA{è_ց!(B ?@SA{è_ց!F{ ?@{RE{_{S рAa@@7҂B@!@t@@?ր7A7A@BT SA{ƨ_`@!F@ ?BLC@? 7!F ? O@KBE[_!R@?#@?q T@#@SWD)_b>b^@)@))~7  _)@@'?@T@*hENA? B(Bcgc@?ּ@@9Z@KBz \  cA`?֣@)8DD *R?ւBtAF@?@*RR?@**R?!hF ?#cAgAA@F="R=@?`@ B@cA`?KAOASAWA[A_AiKAOA[A_A!R` @ЃcDB`.`?ց!hF ?֡!A ?UKAOA`@ B@cA`?KKAOASAWA[A_AGKOSW[_cg?       { 1T B0R!RA@c?1@TkaT c|}hc* @{¨_NqTR* @{¨_֡!E ?    {S4Q*qiT  B R~RA@ca4kT #t@*SA{¨_*kT!E* ?ր*SA{¨_ ҂BA{CSC@҂B D@?ւBL@! 0@? !tA ?֠4A@@B!T{ASB_֢BCAR@?ւBG@?**!C ?֔4$D c!1`2R?րG?֠G? @{8@ 5 @!G ? @{¨*B_ք$D cc!00R?ք$D cc!0@1R?{S*!lF[* ?:@qT@fL&`TTs@c d@e@kT!E"!b:SA[B{è֡!|D ?BC@?cF`?ւBL@!1@?`{S!lF ?ք:@qMT@|@c  T@_ATCTdB˃cF! B}`?ր:@Q:SA{¨>Eք$D cc!01B R?_ @$@_C{CSA:@@?qT[Ҷ.@#B0 Ձ@!Xs!@?`6:@s@?k-T? 7G?[C#@!A@"@cҡT{ASBC_րG[#?   "B=!EB A@#@kT_   CуcA{S!C[`@*R ? !dB ?`chD`? 74F?bB(E*@?@`6@sE`?@`?֡!C# ?րxG? @bBG@?֠6ҡ!hFC ?ց!A ?րA@@BAT{BSC[DC_ց!A ? @ccA`?@ @ҁ!@ ?@cE*Gc@?!(B ?`G?    {ScAa!TB`@/ ?!@!@c  ?@4!L@C ?R!A/B"@cA T@SA{è_ccACI R4R`?@BA@?W@!@Rybҁ!DB@'# ? @ccFR@!@`?֠@P@96?Af9" j9"4 BDC!R@?GBgC?kTеB  @*"R%@$x?GBgCkcT!@C ?ց!L@ ? R`G?{!R @BG@?CуcA{ S ksa@W@! G ?qMTAW@@BT{KSLkOsPC_[ B`2c @2!DҕFFR `?F@*`;҅@BRaҥhz8Z{ Ѡ?ր@HT@@c3@ ?A"3*R?@aT[McN`G[ c?CуcA{S[R`@A@@BҡT{C*SD[EC_ր@1 TBk2Gs{wGc*Z3BW@ ?*4W455*F@1TcFkGsH*@?`6#@9qhT54***`?**?*@? 7`Gcks?{FcS@`b[xeaz%xeAx%AT@BR`vBG6Z)Q,qT B@BX` Qb6 q!0a*)7SA[B{Ψ_cBRk'm/m7m? m~J-F)"G-!Q*H-2I->K-2@?DqT B@BBXaQb.AR@qT !@!!X`# a2T! ! _q @z TbB4GaR@?"sHRFr8@?"HRro? "HRrk?@"HRrg?`"HRrc?ր"HRr_?֠"HRr[?@HRr"?@HRrS"?"HRr?ML KS@k )sE`RB ? A"Q_q!0a:!`B ?!G@ ?!B@ ?!A@ ?!|A@ ?kD'Fm/GmcC7HmSA[BB`3?ImR{ΨDbB4GR[@?[@@.gccGaR `?ccGR`?[@U{CS[ca@A@' @a! C ?֠ ccpE`? !dB ? ` @!Dx=BBF?7@? 7@k yR6AA9rBBASZC{D7@ @a@vb8d$@@?ր7@`?@@?kK:aTa!B ?s@ 7 @!B ?DRB>? @B(B@?|@@B"Ҁ?!4G ?S@kIc`ANAs@`?DB6!R?Rҁ!,A ?ց!A# ?֡!C ?֡!hFc ?րA'@@BT{E*SF[GcH_`@DB5#@!R?`@cDB5!R`?`@cDB`6!R`?`@cDB@8!R`?cD!RB7`?ָ`@cDB`:!R`?R`@cDB=!RR`?֨`@cDB9!R`?֞`@ccDB:!RR`?֗`@ccDB;!RR`?֎`@ccDBR`?S@kI[`Gk S?d$Dk Sc@c! 991R?  {S[@3`A@ @qTa!B ? !dB ?  ` 7!DFB@BNA ?* @a@@?qT_1@T?qT?qT?qTchD`?֠7xG?@ @ @c A9`@@qT@ RR⣐Rb=rR@K||"Be@|K # @s>F`?7 @`?@7`4F? @B@A@?7@B" @! ?7@ 7@@ccDB@8!R`?Ra!AC ?ց!hF ?ց!C# ?`A@@Bҁ T3@*{CSD[E_a! C@? ?s7@@?qT_1 T@@!2@@&!`? @dD? @~c`ANAc@`?dD!RB6?7@_q@T_qT5R@uD!?bT@9d@&?&@ @!?B? @QR@&!?`@cl@`?&@ @! dDB(? @;R`G7?  R@@G @B R!RqBzAz_ A96 @"RRqBzAz_{SR [sB@2C`A?`54 @@SA[B{Ĩ_R_{f kahAS[Ja+nck!RRs cOܸG@f ccFS<ݼGzZDStÉ<q%TqT@9#*@99#*4a!F ?bBE@?*&4 @q{cc=xF<<;=?<?"A96@"RRqBzAzTB(G@?7C@#;c`A`?RB@?a!8F ?֠6AA@KkTAA@Kk T!E ? 0" @c B`?փcG@X)`? B(B@?ccA#"`?a!`E ?@bB@C@?փcF*B`?**?֟`T?֔7@B /!@@!B@@?@ ?*4a!B ?q @zT!RB@?ց!C* ??`AA@BҡT *SA[BcCkDsE{ƨ_9q Ta!B ? ?@@"@9@*i*5;@RB@?`@*"R^q!R|a O{A>G!Ro||||[=s_(qT@R{?ւB(G@?ր6!E ?*B~R9[RB`EbBA{S[ck;C@bBC@?bB D@?ւBL@!@?֠2C>zZcC#R}RsVqT*?֠4}s@? k4*VqT`A@@BAT;@{BSC[DcEkF_`G?րG? @ rT?r`R!E _a!A{S[*cks @o qTQ_hqlTA|} !"!}ha @"4<<@<@9 RD9H9L9P9t< }@ce@9!l@9?@Ta?k:Z8)k@ tX!TP pk#8?qT55 R  @ 4*5 RB*_qMTQq03$D9!#P9kTk8@2?@b6/AyJ2AyR?r)RB?rA2" !@?p!T?h$ @zqTB *_rT`R@  qTI r TIEӢp6) Rq T9!R?qa49 Jzk,T?q WzTK5R9=@3<3~=3<`3 ){==:!D* ?*!E ?@ @9qT@x@|$@9 x(@9+Ge y?|kiS\C I6k2@'@9qT'@9qAT!@9?qTi1H7k2)q@2RO~<   `Ao@@BPT{NSO[PcQkRsS_ (7&Q?qT.q 3TiH6k2xRjaTk2'RO / 99a TG@kT@ka Tq0@@z@-T!~) SRBPk-TJ@@_kTPT@_kATD(@L @ @ D kiT(@?q$D Dz'IH6Rk* R: RB*_qT$ RqT@2P_ q)  CzqlT+4 k2_z@2B2B 499kT_z@28a!BR*   ?k @З@@~ @q9T uvC* * R*?!q0Es 49kT9*@ @ @@@T@6R 9b2?<>w@t<qLTa R*o`D A`RRg')s)*)#[ )W*kIkKT@R(q@T6@ @R3 @  q @ ?*@4 qT"q T!AR ? QRq"Cz*( T4g@$Sk T'C9 %3'9q T!@e kK T?q T@!%GA8sa"*C8{eW9e4@y !*a4y@'C9- @9 kT @ q,T9!@_k8ZZ95* 8"qLTR#@ 5@R ? QR'@ 4#@*qTz@TK*K!A ?ցQ?j Q#@q@zT!A*S ?*S@q,T #@g@@sF)G)[I)'@s"?qHzןT!AS ? QS@ Rk* RoR*E9Rr T@!6RRR 9)*S!A ?S@%Qj Qf,@R5@@q CzT0@S9"Q*3KH7Rk*l#@E@*'@sF)G)[I)W@k@_qT!!494_klTRqT@ AR R 4*k Tg@9(.B9AR kT   B$kT*D@9 k!T*! @J@TPӄtXӄ PUPӟk TJuXq@ @zয়_qDz!T9 4$@9!R_@k2! ) rtS)9$Hzן rb2K? @T@6R 9a5 qTqRRBB *RRQ! QjRk* 4)~ccD)R+3`?@@@C)D)+@3@o@ R R !)q!@*@BuXDpDHzT! k@T*K!q,TOUP_ paTBK(@xB  *B*"x?!q_@ן5rk2$@ztSQ AS  _@!T(@x  * B*"x"@y$@yBD3$yrtS$@z`G?bBA{S#A@@x6C9qT@G9FuS q TW9QO9 R !}k,TKR`"@,@9@T@TPtX kCzTB_ qAT'8? T* k-TRa!A@"@c!T{DSE_JUP R9`G?d$D c! bR?d$D{ c@c! BR?  bBA{S*A@#a!`F ?֝z@b< @a C9}z `A_6@A@@BaT{DSE[F_a!F` ?  a!(B ?@G?D$D c@c! `"R?D$D c@c! R?֒`G?{S@ [VֶFb`@?@4s"AT[B@ RSA{Ĩ_ց @)NAq"@@@?֠4"AT@[B@R[BSA{Ĩ_D$D c@c`! 6R? {S[T$ f=2@2f=@@P@BBB=A@==<>"= =pC<.=@6=&=:=*=‹<O@B @ @4u>D?*@@4?k`T4&A` `7@uF?a!G ?ր@?a!G ?ր@?a!G ?ր@@?a!G ?ր BqT   ՀAP3s ?ր Bk,TBBC A@?ccF`?bBL@!`@? B ?qTcxG~|AWhs@h3 @?ւAS`@@ Bk TcCSA[B{Ĩ_&Ag6@`@  6@@CcA`?և @~ @u>D?*@5@)BB@@?*tD$D c@c! DR?D$Dc c@c! "?R?c[{S@)LA`SA{¨_{[S@ bB @wN@B@?֡!`?BBA!@"bvG@?CcAB`?`@?` s"!T@a!G ?֠ @a!G ?֠ @a!G ?֠ @a!G ?֠ @a!G ?֠@ ҡACcDB|`?֡!?֠ B?q TvGAsR4`@?` B?kTSA@[B{Ĩ_a @)`NAtSA[B{Ĩ_SAD$D c@! 'R?֬`G?{S@@Ta!(B ?֓_SA{¨_{S@@?kTSAR{¨_a @ @?!Ta@@?T`@@@TBBHG`@?@6bBD"`"@?ր6a@@?kTa~@~@?TaAA?kT`SA{¨PB{BBASTДA #@@#?#Ҁ?wOC_||_=_|_|_|<A!AA"@cT @SA{è_@G?  {t@ @A!C`?  ?. ? T`@0q@T @{¨_O`= BBA{[VASc@@#?ր@tNAo@ub@)k`TO <C<**7#C?@A@@B!T@{RSS[TcU_@G?{ @@5`@A!tB? =|C=?`@5`@q`TqAT``@5a.@@R?4q` @{¨_(Q "R?q$  0`   `*@ 5`@Q?q)Tq!T`R`*a.@ R4~V@# T*?4qT@R`VA `*@?Gf`5`R`*a.@5@Ra!D`@ ?qTqlTqT Q!,"Rq $Ú  `a.@R`* R4A ?Gf`B)BB`@@?`*q`@R`  {BA!ASCcD[  @?R`?~<<bB0G><`v@a@< @?A!`F ?֞v@<]=3@`M)_<9k*[_cgc=#Y7cjB@~~@gbDiXhWCg~@Kf&AI!?)%K@) ChS;<)T !@!"X` @@RXa`2AQHqhT @@Xa2u_P@"4 @`ANXNNXN b ڦ  {aN OBaNc OZaN֦ O9aN ObbnaNcaNYynaNaNcnxnBha9kabhaNkaN⃉<<@!.c @9qiT!R?`@'3AK@R[?@@@@@95R?@CcxC!@`?R?`@/`"AqmTa!L@3A[kBXKBzZFk[{Co|D kBa"A@B||%5k"k?kmTa@|@!Xv4@5@?3A@T?`?@?@!`@?3!*!@`T@b5P@b5@kAoAA@ @@@ ?{LA!(B3A ?a!F ?@A?A@B(T[A_AcAgA SA[B{Ǩ_&@#@g @9*4>@<@ =@<#t=N[N ܧ  Oާ OaNaNaNaN|n~n{n{nkakaN^< PA9 ^ #4Q"R p(bZbzCb#>>TRèr' ?# ATh# AT# AT`@D9qTfpcD9)@)Rbb"E EbbPbQqbsg1BbsBb@bG-<qT4dQ"!DL$ %(b_bCbD?!T9 A!(CK ?+@@$@B@94kos@  3(~b]b}Cbx!!? T 0@)!L)bb |bAb{a{Cb!@b;! ?!TM L)JA`08R.Rrs҃_8#8 4.@9#Q"E%yb|!^%$x"BkLTqT"@9cQ 3sr#i|(W"%0W7 գyb8C 4qTY@99zbb"B7bz%4ORycx" 7x#cATp?kT@ƠQ1kaB !T@@1"Rb !!` ?!T {A}RR௨r'!^@ xOAARG`R/3K??A}AR`R!^/?kAoAsAl@@!.cQT@5P@5KG@S8kToyc"y7y#c T@7@Gkos?D$Dko c@Ѐc!+,(Rs?D$Dko c@c`! @BRs?D$Dko c@Ѐc!+@,$Rs?kosA!A{CS["@'ҷ@xG?#@@)T @ha`h!_h!! ?aT@`NAa!D ?#@dbgAcfAva @) )!KBKBBf!|@gB|@ Bx`z ax`x AT`AaA2~(6&A!2&6&A!2&7`Z)BRQ,qT B@BBX`#Q`A q6!0Q*_qA!(C0:# ?ր#@@$@a"CcA#`?`@@@CcGR`?ck %#@' m/ m7 m?mm~J-BRaF)n"G-!Qi*H-k2I- >K-2@?DqT B@BBXaQ.AR@qT !@! !X`# 2TX G! ! ?q @z TBB4GaR@?"s HRTFr5@?"HRr? "HRr?@"HRr?`"HRr?ր"HRr?֠"HRr ? @HRr"?@HRr"?"HRr?CBA rf )sJ#@R?@aA@ ba!A ? BqTX7GY9G BskTAt~|#@jt?@#@jt ?` Bsk T  A!(B ?#@t@?1@TcHkI'Km/Lm7Mm?NmA!A'@"@ca T{ESF[G_ RBB4GR @? @X G.@Vck ' m/ m7 m?m0aR ?a!hF ?#@A!(B ?a!hF ?X GR ? @.D$Ds c@ c!  =88kГkГ| |  kMTlKK^wT-" > =88kДkД| |  kTKKHc@"g@N{@<"O@!^< ;"oxk@zT"; <" ox_ kTeK*b_qMT~ n5>" >b) )K )"; )/ ) +x)@EAO-? mH).]@,\b^@KI)@ +9+n=F) :axG);J)="/K) <8qşK"<" , <+=8 *K61 R1{ _ kTQ K **~ J R K?k{ 9Ӓksk T*KNbk TLK bY@"^@.,\@ 9+: = ;8qğ K"" < ?+=8 * K61 R1c kTK*+~ ` Kkc| ӎowkTKlb 9  kJTK bbKC`qmTe *n45r**L)* ) qT<b& oxegQR,R.Q8RR"R** n,Rn *ks/R** n R n*ow&? k XzLT G?       {S[cks#*(A#cD@w**R`?֟q T@A`N4 z@{#@*ZoS ?A+!*!   |~k`!k @TRR҂h`ah ! aT@&!c!qaTqmT@AcR{@@*{oS  ?a+!*@!   @|~Ak`$Dk "!BkT   |zC BB\!\AKaDTOR*)+Â<RR3R<  _1TH*@$!a|@!62cja kLTj!Q6|!'!~Ӫi!fi!i!k*!yd7!|}bB@ _kT@?k!q҅JQ_1aT4Q*|!'!~Ӫiafiaia@?k!!!AqZwD"@c!T#SA[BcCkDsE{ƨ_ G?O@PE||?@?_ C!!A{CS@"@4[qRcRu@v^@)TN R@@qMTc@!  A )?k(TkTkB k_TA@?qT_RkRB k_T*k+ Tk Tc@a@e@b@6`A)c@)q?q- Tk TkTa@cxSe@kb@cЀc`7b@)@kcЂ?k Ѐc)_q 5?q4M T Qj Td@4c@qT`@ L#   @އT_k Wz[CcD!!A@"@cT{ASBC__|)?kTxSkЁdk TA!AQ ?$R dA!AQ ?d@ R `k Tv^)[CcDT@QjT$$Dc c"!&&R?@E#cxEB`%@AR`?@G? G[c?$$Dc c"!&`'"R?   8@_kKT_{BxS_kBS[@b:T*B5C?`@V@?a:t@?CcFTN@`?ց! (?a:b??ց!(?`a:@b!@!|@??ց!`)?`SA[B{è_@G?       {"B DS[cks*$!;m;W@?BBL@!*@?&`Qq%T"BFCF:R`aRc@?@#|S)Q  QzSs [)#cD"*s~*GR|}`?mbg@B `?@abzSAKQQA!lC~gO@UQRSK@"Ks~"   @ O@BL@bao?m@"*K** * * *B* * n~ @ ` _kT@@?k`T*G@M}ӄ   " @@T! aT@CCa@) C  CFҎҳ2!`aB |S RK/RR h`87y`_HT*`TR$RaA!  G@?Tq T@k TA`QQ!Bab! %  @*!C"`@9b7K@/`9 % b T  @@$@@?hTA!}!TeҥC  $x`#{`$x AT@  J_kT_"RW@   Հ* @@!~?^x!!kTkT;@SA[BcCkDsE;Fm{̨P*B*@$$Dc c#!*+" R?$$Dc c#!*+"R?@G?  A'|@{,R@?9 kmT#} }@ `R 3))qT ҟqTcklTkQ1TyS k,T A@@BT{B_d    B"`ha8S @h!8!ATcklTkQ1TyS kT G?       {S@A)B)@E?`@@aA!G ?֠6"B D@?BBL@!-@?`@EХ@B@tR@?`c@" b>SA{¨_$Є$Dc Ёc@#!,,R?$Є$Dc Ёc@#!,`.R?$Є$Dc Ёc@#!,@-R?$Є$Dc Ёc@#!,,R?@G?  !ȁPG$Є$D{c c@#c@!,."R?{ a@! >`A!F`" ? @{¨0*B$Є$Dc c@# c!, R?{S!!lF@ ?ր@9@6`@@@B?ֿT@!!E$Є$Dc c@#c`!,/BR?{!!lFS ?`@96@Bt@?֟aT90>ESA{¨$Є$Dc c@#c!,0R?$Є$Dc c@#c!,`0R?   *!!A{* @"@)Cc<_(_|^|_=_ R_{SSsB,[+?m@SA[B{Ȩ_F?@cD+\@SA[B{Ȩ_{S  A[ c s @?u@9t@t@7BB0Ck "@?5`@b#cDB4R5R`?`bB9 R`b9O";=|@@ HA,8C   |@ @u9tf@@@F\ `9#?T|@ |{Ӗ `bB9 ub97HИA,CBwu9tf@F\ @@#@9bb9!@akL!!A?@"@cҡT{HSI[JcKsM_TkL @`b9@6`bB9 ub96k `@b#cDB@5!R`?k ~@ Gk ?{S@S`&@@@a ?a@!$@ ?!!(B ?֟SA{¨_       RPR!bxa4@_qmTk!? TcP q!T_$$D{c a`c@&!@77R?{S@ sB @;U2C`E ?ր5@SA{è_@SA{è_{ *a  @{¨ tS_{S[c*ksk T!@Q***ksU@ssQs*a#cD^!8*`?**a!9?a!:?*a!`:?a!@;?a!;?*a!;?**a!<?b @a!`=?*a!=?**a!`>?*a!??:Rk@Rra!?S#sQ?*RRR!?!?!?*!?cK@R!?!?aS`K@?#7qT ?@RR3;{skT5*!?ց!RR?**c @<377@fs*?T{s**k T"RsT9S?qT`K@ZkTs ?cCSA[BkDsE{Ȩ;@Ks?7@f*?9S"R?q!T$$Dc c@&a`c!@7 8 R? {S[c8kb!!F ?BAT T$XD? 4R  A :@599F:Z[Ds ?TT@?5 RSA[BcCkD{ƨ_ր@`@9c7+;{D3@aR`?ց@!z5+@X6B`T` aT@T$ЄXD?`4%D.*bRB ?@#cDaRbB@ `?!RҟB `T7+@#cDbaRB `? {cBB @+;{O@S[k ҹ@?a! `?@CcdG`?@"B D@?a!`?O@t4D~RzbB@vdy9=?a@!@ ? 7+@SA[BcCkD{ƨ_a@!@ ?!!(B ?bRB? G?{eS(@_qT@L"_ T@ @ATSA{è_a @` @[`@!HBv* ?u@@"T`*@ a*[BSA{è_!!|D ?"BC@?#cF`?"BL@a! @?`   { @!@ ? @{¨0*B  @@@ 4BP@D@4?kT R_R_   {S@S`@@a ?!!0E`b ?a@!@ ?!!(B ?֟SA{¨_C{S[ck@ A$@b@@" 4cPbD@ 4kTBB @P5еN@@?a!? @j@9@X@"B D@@?a!?AC#?#cDPR`?xjyn#`t?`#Ҡ?@ ? 7 A@@BT@{SST[UcVkWC_#@$$Dc a`c@'!@bR?G? G?  {@!@ A ?`b @{¨02E  {S[@!@A ?62Eub ?"BD@?a@! @ ?*R7SA[B{è_`@@a ??@!R@R  {S[c@ubV@9V56b@97 sB As"  #Rb@b   Rb9SA[BcC{Ĩ_83Ca! ? 4ߺqT`@9qT!`?4 ւAՎ@U@?`5R` @94$$Dc c@'a`c`!@R? {[(@qmT6*BSҠ@Xta@!@ ??֠*@kT@SA?ֿ~~~[B{è_֠@6*B?ֿ~~~[B{è_{[ Ab@9+@7S@@4#c`A*#`?$DbB R? B A"C@DP5 D@4kT@9@bSC A@@BT+@{B[D_#cDbRB`?֠b@9`7 sB As"#Rb@b Rb9SCGS?(@qmT@L%  Հ@@b@4cPbD@4?kT_ք aT_{S sA[62C@S`@?`5`@SA[B{è_SAR[B{è_{S sA[62C@S`@?`5`@SA[B{è_SAR[B{è_PF@{!A  ?b @B{¨!R@0D   C A{#@@"B0Ca! @?֠5R!!A@"@c!T#@{CC_%AaS!C3? qTA)c@ ҁ)#!_!Q?qTT@G?   {S@9 @6@@97`@4*B?~`@9?`"@@b@@95 R`9SA{Ĩ_[@u@4F?5 ?T@[B[a@#c`D`?R`@b$DB@?b@ RHAr??[B R`9SA{Ĩ_U!F ?`[BT@[B`@?vVa"@B`C!@@?` R[B`9SA{Ĩ_v@$ЄXD?[B4{[BB @S @?"BL@a!@?`"BA!1@?uZOt"~ =gSA[B{è_ G?{S[ @@@96@`@9@5`@9w@6@T!!(B R`By ?"BlG@?`V*@SA[B{Ĩ_!!(BR ?*SA[B{Ĩ_`@ATcB`?`5!!(BR ?@@97$@ Rk@T_ց(@?kT@?d@T?_$@b@?TT{$XD?q{_ R_@_  {SA[*c@*v)`B !!F9 ?`@RcDbB@`?!!G ?` i`"@@"B0Ca! @?5`@ )!R** )!!B_ ?iJ)@_@C!|!|!tS!|@?"B @@?!!L@a!@?f`"@D@9A7BDD@?,"BB!@1:ZG@?a@b @@?*`"@@9`-6b @"-A@B@@?`@+cDb6FFBR`?`"@DRAr(@Q(R???%W@@@! !|@@?@@?@a!@?*_@qmT9+FR[@R R?qmTRW@qMT_@?S QKQh<SKjQR<<   "! yxx?k!Tb|d|B BtS" ?[@?k,T_@s k,T AA!!D ?@"B@a! /@?!HB ?$B"Ҁ?!B ?@@?@a!@?@"BlG@?J)d_@b)a @33R!tE ?ֶAARA@@BҁKT*SA[BcC{Ȩ_Aas!cS? qTJ)_@C B B_BQ_qTT`@@?q R!qqAcA E)J)*_@*(Ba!?  D? @?BlG R@?!F ?:ZC@?֘@@?a @c@?BhE@?!!C ?aC @b@@9 5Cc.B?|@9`5 AA`g!!`F6FF ?@a@$ЄEC?@@E`T?@@?`T?@?z?!tE ?`@RcDbRB`?!!(B ?AAHcDbARB`?!C*Q ?n;l@-tA-|B-Z"dC-{""""""9"o ms mgm_ m mk*q)T  G?@ (Hu8u  <@@ @(`CRD@   @0rC@   @G@   @E@   @F@   {c#D[6N@S?a!@!?c@!R`? 7.G"B0C@@? 4@ @"@@?7@@ @#cB@`?ր hE?@#RB! @?!RRSA[BcC{ƨ_b@47ZFsBxk9D+{ {c @ @@?bA4AQ?<qTB||`zkb@a_ ?"??a!!?=|=+@kD@` Gk+?  {@?qT?qT@{¨_@A@BD@?R{¨_SAL@@cD`?"BL@!@?cD`?SA{CS[A!@@'4d@*`A9@6c`b*@ @@_k@ Tk e@ @a"@R RB_xq@T ?klT@Ra&@ RB_xqT ?klTc zc@@?kT@?kjT"BD"9D@?@qb@Rk)RbB$ ?@+@_k,T@k TFR$ ) "BPC%R )C@?@ e@@@x5R@# @ c9`?a*@n9 6kIa@5|@@!HB ?aU@|A"T@RcAa@B| '@d@ҡTcH{ESF[GAA'@@BҁT{ESF[G_!!|D ?BC@?#cF`?"BL@a!`&@?@b*B %!R ?a*@ Rn9kIR^Q@kTCcGk ?Є$DC a`c@*!#@$R?Є$DC a`c@*!#@R? {#"B @[6N@Sc@?a!&?"D!?a!`'?O$RCxf"R*xt dn9cB=?ւR`&!Rtb?u'`*??TaD#@?a*@bb9?bf9aj9SA[BcC{Ũ_ G?  {[6DS` @a@! ?aT[BSA{è*B_{S?qHT! @@T4@4@cx@a!)`?֟q T qAT"B\Ga! )@? RSA{¨_SAR{¨_"B\Ga!)@? RЄ$DC c@*a`c@!#`("R?Є$DC c@*a`c@!##R?{S[cks3m;mC"Aa!u^@@?< @q,TqTT R*7 RUR7! |D C99@ FJBR L@+   R@ ?c L)3D7D~@b;D+@g"! F"cH@ gHkHoH:|@$.;?|؛_@bT@q T@R@ RkB-A +@ ^j{!^Z!^   #A)'"B-R=D-P&C)'!^@|'B!^!^'!^!^އ!^: "!^ "; 7!^ w 7#,@ 5 ;u 5:f|SW(7g|S8(83|(<(5f|S3*.#*+93+9*.b3 X-!\6-{@=\1-X2-3-4-8-9-@&"_Tk  +{kAT7@kT@A !@*!$B|%D!hb@) @@?@@R )IC+c c@"dR ?A?D@B!T"C@SA[BcCkDsE3Fm;Gm{ɨ_ @@@?@@?@@`?@a! +@?ր[.qAT@R5R7@R7G?{S*Ab@`@e@_*?x@x!@)q TqlTT)ƴCx@cb`@ =>=z?abd%Rt^"@! @ C)k@Ten9@TSA{ƨ_!|A !||@ |.qaT{?x@x!@)_ qT_q,TT)CBDx@`@=>=x@?{Ũ_!|A !||@ |_,qT{R|@ l9R =?=`nA9 @{Ĩ_      <@4F@R4@P@96E@qMTQ@AH$#@!@,@kT?T @kTR_| k_{cD[RS*U|5`?BL@a!`,@?qTbC a@?`aTSA[B{è_?qMTl| L!! `T @ @ qAT @kT =@ kT -@<q-T!A9 6{@ 7! T @ @ qAT @kT =@ kT -@<q-T!A9 6  _  {¨_   {S[,@!HBwb ?t.@@Tcb@@`c||j#5`bSA[B{Ĩ_!!|D ?BC@?#cF`?BL@a!,@?`.{S`@q-T[,@62CtR4sB@T`@?@5[B`@SA{è_[BSA{è_{"@_qT_q!T" @_qT@{B@_ q@T$DC a`c+!`-.R?#@T$DC a`c+!`--R?$DC a`c+!`-.BR?  { !@@B@@? @{¨_   @B@{ !@@B@@? @{¨_{ @@!@ ?`@!(B ? @{¨_qTq_q~_@?qiT#?qATAi$ |@| _փ5} _   {"B @N@S@?a!/?~@:@&==@=jArB8|hp=b:@a@```RB@cD`?a!?a&@`RbC?`&a*@?`*a:@?@a:SA{Ĩ_ G?i "!$@B RcB`q@TA_kAT@A_kTqT   xaDxa!kaTkLTc|{)!$) @__   P@_qmT$@M|* M*! `T @ @qAT @kT =@ kT -@ k!T!A9 6{@ 7! T @ @qAT @kT =@ kT -@ k!T!A9 6  _  {¨_ P@_qT$@M|** M*! T @ @qAT @ kT =@ kT -@ k!T{ 7! T @ @qAT @ kT =@ kT -@ kT! !T     {_  _ *P@$@R   {S[P@qT$@72CuN5Tt@s"@? 5@SA[B{Ĩ_@SA[B{Ĩ_   OCcA{ S *[ `@W|_|B0BS@?7R@A|}_qT3 5 TR!AW@"@cT{KSL[MC_ A9A99 )c8pS 4Q;@sL7@c!AkZ|SR _8q@T qTcNkOsP&@*R@@y4 @*`? /@_q@zlT @t4kT{#*sTkOsP R_A9cA9R' A3 cN3@ '@*``@*&@ Th`CH@kAT@(@@t@d=~t@ =+ @P@yx4@Bb yA+@c R?x@#_x! @x@A A?xuRGcks?  {GS *!Ac  @"@?! G ?kTA?@@BҡT{HSIcK_@*DBB1'?@*BB`1?S@q TDCk ZZ0[ s @'@Xa@q`T qTqA@! 0> ;@qT57*s.@z{?#{{z{kT@?ք@{kTA9GA9`0 A9BA9@GB0@EB0?@AE!0@?@A@@OA'@"@2@G@?@S@!kLT[JkLsMB@B2'@G@*`?@*BB3`?@*BB4`?A?@@BaT@B{HB4SIcK'@G@@>@@0 G[ k s ?OC{s!A[ck# @wc@_?~_~=_=qmTSDДD5b'scx# f@9Rb@9a @9`@9&Kf8"b8!a83 `89C3#33C|qT9?|qT 9_|qAT9@ s?{| Ҝc@?c@k TSPcR@a7@fE) @d@9e@9?qT? qT?qBAB>! 0!D ?@BkB@5?Aw@@BT{O[QkSsTC_ Ҁ? Ҁ?֩A!@0A!> GSc?C{[ *!A @"@7! G ?kTA7@@BA T{G[IC_S*Bc B6}Rk Xs \c@C6DZcA?@93C B*B`6?*7sVqT*@?> ?֠4@*C?*@7@s*?VqTSHcJkKsL GSc k s ?       {BRB :S@cD`?ր@q T[*Bc8[A B Ձz@@3Xua?a@@@B<@@?`@??ր@kT[BcCSA{Ĩ_O{ Ck AS [ c XA@GCqTS@R93C%s"Tt@ ?5?Cv@=zAt}=rBzzC}rB@z`B& B`C@?@@ !HBU ?!S@|ATAA?R rA!|"C~@u~j?ցAs"?kMT@hs 5@q T TqTq!T@2@*@BB?s"?ցA?k TkD+@SA[BcC{ƨ_ր4@@G7$DC c,A@c`! ;;bXR?ր@@T@9!@$,@@6{F*@bB`?֤@@`?ցA@2@*@?ցA*@BB>?֟{FbB@`?{FBAB``?֌   {[*!AScks&@D9@'P@9@@u{VA7a@"Rb9*asF߲q@t`.bB`?ֿ q`xT`@ZZqT   c @cXx`?`@kTVW5@qTBB `?BB` `?BB `?BB`?F E@q@T@u"Gt#Y8?bB?bC?BB` `?BB``?bD?BB `?c{@BB`?`?`?֢@u?֠W`w"`?`CC9@27`_@@BB@`?e@ҿq2TZD`{@YXsxDAFA0TXT?֠/5@@`cA@`AkT3qMAT C D A HB# B5#@`@s3*@ ?w@@?Ta3A !||j!T`3@@`AB !k;T#B@f@G@# ?C@"@96@`?`4@@ z@@0%RB@B xaR`@h@z9@?ր@q2TqTB#@@C@cRW ?ր@;@S@qT @s`?@kTBB`?BB `?BB`?Хf>qT@x#"GR#?`cBB` `?`@q T@@S DF'М3C[Y@A!+?`5A@?!T@BB `?ֵ@BB@ Z`?kT@@ q`cTLbTqbTq}TT`@T@96@*DBR ?Y@A!+?4@BB`?F@H#@a`?ֵD@@BBZ`?AF]@`?kaTE7@@UТ `?B@z?ւ@?@q BT@ @?)bB?bC?@` `?BB``?bD?BB@`?֢ `?sc{@t#y_BBu`?YB@:?֢Wbg`?@?֠T`c`?"`?`CC96cZ)e[)BB`?he@skLTqKTB @ O@@?A!?`pxS cD`?a!?`@!D ?@O_#_SK@_=`q T@RBc|D CF@! еJBV@R$@;">@!| `~k<= T{@"@?{@@$`?@gV@?V@|AT @ ?@@?@`?@A!`@?V@@@`@t@cC@ ?ր@;@RS@qmT@@@9?ր@kkT`@`! Az@@B\TSA[BcCkDsE{ƨ_!|D ? BC@?cF`?BL@A!@?`BB`?BB`?BB`?BB `?BB`?BB`?`@@6BB@`?!@RB,@@?` P@"Pa@`AqT|D C FC JBRwUa@R;""}~@!| ~ = Ak<bk T @Rhu 5 C@:@?\@8C@|A"T"@R!@B'^+@!|D ? BC@?cF`?A!?`{S@a@ JBtAA;K?S@|@T@?RRA!;{|#C!K@>k<`@?=# B D !~[@?A!? JB@#b@dR`@#R?|? BAs9C@?@`@!R cDBB`? !(B ?5K@@T@!@ ?`@ ЄDRBB@? B@A! /@?B"ҁ@?"? !B ? !(B ?֎ !(B ? R`9? TXD? 4!|D ? BC@?cF`?A!@?Si Є$D# c,A@c`! ;#ER? Є$D# c,A@c! ; bhR? Є$D# c,A@c! ;#"=R? Є$D# c,A@c! ;@`R? Є$D# c,A@c`! ;`"ER? Є$D# c,A@c ! ; IR? Є$D# c,A@c! ;`bmR? Є$D# c,A@c`! ;@DR? G? Є$D# c,A@c! ;`yR?G?{SA&q T[R *Ba@!" @?`Ak T[BaO`?1~~9<v9SA{è_ {[B @S5@?BL@A!@? cD5R`?uZtSA[B{è_G?{  @{¨ *B_D9_   9_{S[c@#@qmT2C6O8T`@s"?@5#@SA[BcC{Ũ_ !HB@ ? @@BT B`Cs}@?@j3!#@SA[BcC{Ũ_!|D ? BC@?cF`?BL@A!@@? {S !F ?@SA{è"G C )A{C $@'C+)<<B? A'@@BҁT{EC_ G?   {S !F ?@SA{è"G C )A{C $@'C+)<<B? A'@@BҁT{EC_ G?   "G  C )A{C $@'C+)<<B? A'@@BҁT{EC_ G?   !R9_{S[@@qT qT@@97@@96UеUе"aR@@c,@au`?ր P@#Pa*vSA[B{è_UеUеb@@Uе@q!T@@UBBP@9_@{SA!}@BCBc@R@P@9,@@cac?ր P@"Pa*u@SA{è_   A{CS[ @@'#@06A! iEd@c.R@B,@@?d )P@CRcbo:@SA{è_ {S*bB#Rcbi@t:SA{è_   {SBBc bQ@@:@>SA{è_{SCBBcc b8@@:@> @BSA{è_{S[V_Cc@!BRbcB@:@~> @B@}FV6-SA[B{è_{S[V~Cc`!BRbcB`ҟjdh$T66|G-I-{F@~V@|F{-~ -VSA[B{è_%R@9))_"Q_ qT@@q@ @0Ta_@a_ $D{# c,A@c! ;!;R?{S@ е*B?a@t@95 Cc.BҀ? B`C@?@`SA{è c`D`?  {S !A[ c )@7 9 @!R`@OS@@ @C=j#a@|@?@7 D!.$*BARB@&?RqM TQ Qa @~@{t?qT(T?qT? q T8!!( ?q ? '#?T*z<`@qT@4 cDBARB'`?R@C?  ?q@T? q`T?qT0 .L? cDBARB%`?R! . ?0 .? cDBARB%`?Rp $D# A@c@.!$#R? $D# A@c@.!$$ R? $D# A@c@.!$#" R? G?{2 A @W@`T_@` AWF@Bҡ]T2{Ǩ_@ko[cb'?ր87K|@ a `NBB1 BD'c srDsbA ZGgOD@w{$)T?@/.f!@y@R?k` T'@nR`?R @.a'A A!0@!AR.R0cR"R@0KO KCR@??@b`?76N@ `?ր6Cq`TO8B@?@@A!1`? #6?CqTO9B@9?@@ @B D*B 1!R?cFgFkFoFsFwF{FFFFFW|=C !XD F+ !4@#@(/!R c99C=  CRK@@??a'b`?$6MA!( `?֠ 7!=`?6N3/@#BB)?QqHTAqT AqTAq,T @B cDB@)!R`?֣ @* DB!RB2?֚A!)`?7A!*`?@ 6N?BB*?TT ЄXD?`4NBB*ATT ЄXD?4N @ D!.$B!RB+?e R9N?R@q T +@?֠4R@k T&@NXx@#@ ?@T_T|?@ 5s@ @ D!.@$B!RB)?-A!+`?)6N?BB+?TT ЄXD?`4NBB+AT T ЄXD?` 4N @ D!.$B!RB+?9"A!2`?7A!2`?`7A!3`?֠6O?A" 3TT ЄXD? 5 R9@A!3`?6O#s7 @B cDB4!R`? @B cDB'AR`?kFoFFFO? @{9 R9O?@3q@D9a6A9`6K@b'B?֠6K!  M? 8DҀ?6A A@A|<@w@||$A Ts@?=@="@=@>" @? =@?@6_@[@K@c B?֠6K!  x4@@@?`7[OB 4@CB@33?q`T @B cDB`3!R`?IA!4`? 6O#7 @B cDB4!R`?7 @B cDB7AR`?Y-{A! 5`?6O#& 7 @B cDB@5!R`? @!R DBB/?s@ !(B ? kFoFFFj @B cDB .!R`?A!5B`?6O 4@#2B3?q T @B cDB6!R`? @B cDB@-!R`? @B cDB,!R`?s@ @!.@$ DB!RB`,?A!6`?6Os2 4@c2S2C2BB6?QxrT R32929| @B cDB7!R`?֬ Gcgkosw{?Od @ @.   { BAS[@?@cx^EicT !HB`@ ?v@@Tb*c}Bw cFB}`?a@Bd*@B9@c@ Dd*4h7R? RcCSA[B{Ĩ_ !|D ? BC@? cF`? BL@A!@9@?`SAR[B{Ĩ_ $D# A@c.!@88" R?p "$@ $T8 e8"( A(#8$C8# @&$##%-_G8#C@ @ x@-pA-%@-$A-:`B-%" $ ! %: >Z = <dB- $ " !(>X+8*6c+#($A(!+?+96 -$-?`-_ #@! @9?@c@)B'B|!^^"# TC!C C! <@?{?>-_C!C {  3m;mTN@ o@  @ ,@ " sB`? @``"`?@`"C``?9.9l8l!. @"Cb./3Bm mCb=+.;CmP >"! L/@{Ĩ_ $D# c.A@c`!@8:R?{S[ (@qTZAҁ@!L3?ց*@s?k,T@ !(B ?֟~~~SA[B{è_{S[cW @  @A@?kT`*@qT[Aa@!L4?`*@k,T`@ !(B ?~~~z@z6@a@c.B @!xc@?֠7 7SA[BcC{Ĩ_`@A@?Ta @@@<raTa@@c.B @!xc@?֠6aE)d@b@ c`.SA[BcC{Ĩ_ $D# c.A@c!@8:B R?C{S BAc @D@/ !A/@"@c T@{FSGB @C[`@@@q T@@<@||@ C|@%R~|G9C~f @c@@?ւ@~ =v@B @>=c@?t##@? !A/@"@cAT[H{FSGC_cBe@b @BKR G[? G?{S !G@ ?aA)? q!|@!|_qT!<!|B|@B| SA{¨_{S !G@ ?cA)a|@!| qT_qB|@B| SA{¨_   C ƼA{S*[*cB@@A@)@@k UzETC" 9D*B@;*R ?` A9`6`A97c@"!RB; ?C@R !A@"@cT{DSE[FcGC_ BD@?bA99DR BPC|# R8RW)#c)Cy997@?C@#c ;*"B@< ?@ GC?{S@!D@ ? B @@? BL@!!<@?@ cDR`?tV@SA{è_@SA{è_ G?   { @@BH@@? @{¨ *B_{ @@9`7`@@BL@@? R`B9 @{¨__ $D c.! c !@8=b"R?֠{ @@96`@@BP@@?B9@dHRaHd$?k!Ђk!B @ac aDZaaDbD!!a_T_T @{¨_abcb  "@ T` @{¨__ $D c.! c!@8=#R?   {S  !A"@` cDR`?`HbHhDBKB|@`4}   kB!ADZc "a!! @ T`D#ǚ?xbN cA= `? AD@BT SA{¨_ cDR`?O G?b{Sk@@94 9F3R[6*>c D+ D K**?`@9s`4AR?  ?@[BcC+@SAkD{ƨ__   bA{S[6FqT   ՂfCa~|U@@@Aha@B @@?r @z!TFsk TSA[B{è_֠@ !(B ?!R{s AS[ck@o BHB@@?`@ cCC@BR!R`?GA9RG-a@t@"}+S= Sv@3 z/ v'O = B0C!! @?`,5'7RZ@C" 8A D G{ DA97c`T{@{@? @zT`A97c!T @FA9*$R@RAR?{@'@A7AR3@'@45Aq7T$53@q$@z33@,4{C A9Y76/@@@/Y9qT7m Rc?m[97 @B cDB R`?֔ RW9sA~@+ ==GoBB~<RcA@=2@E93G9AF9A cD @@#AC'AG9?B)`?#RR#H@ 3 @ C/sGWoCCCC C CB3=B+@@sC@92@cr @=B) =#@2939~<9oB?'!7c 97Tm?Um  Ao@@B0T{NSO[PcQkRsS_ր @"ARB??ր @RRRL@R @"B??3@ @R@*?@@@?@y"7caT @A A9FA9* @'c!T @R DRRAq`T+@@ RA qTRAa7?qR/@B @B$FAR D?@/Y9qTG@_q$@zT[975Ac`fG9`6 r@U 9G D RW9`@?@C@qmTsBqT@`C@qlT@\xT D @c 9BARB?3c6R @B cDBAR`?֨C@:Z>q @>Z`@a@ @ ?*AR? R`qTsB:Z>@9C@q,T@cJ9\xT7CH9@6 AC9o@@BT @"{NB`SOAR[PcQkRsS D+@g"R[975Ac fG97A5G9`7 B# T @qTZ@qHT R@?qT@ !@ 67m?m7Tm?Um @" cDBAR`? R; D @"ARB ? @Uc7m?m" @B cDAR`?k3@R D!R @"RB  ? @4b @" cDB@AR`?3@ C@"Ѐ @B?R ?֚{'@ @A7A5AqaT @9 Dgy"ARB ?s60A5G9`7 B# T @?qTZ@?qT7m?m @9 Dgy"ARB ?Aq!T @!R"RB ?#R G7m?m?{S[Hq-T *BR   `ZD@?`Hk T`HqT DR`@abD!"!?`HkTSA[B{è_{S[ !HB(NG~@ ?uG@"Tb*N*z@C~AB|zj<>@? =c*SA[B{Ĩ_ !|D ? BC@? cF`? BL@!! @?` {SGaGuC?kT!!@aSA{è_4|@ !HB ?uC@T`GaG !@!baSA{è_ !|D ? BC@? cF`? BL@!!@?`{[AS6SrfqTR cA+B`?@sr&SA[B{è_ G"#B0?ֳrf A A{S@/!5SA#qfqTRa""@'C )<< B==? A/@@BT{FSG_ G"cB`?@ G?{!!  F`"B`:A @{¨{" B3#@B !!BxcaAb A`:AB`cC @{¨ B{S@!@ BPC@?`@a" !(B ?`"@[bD !HBʈ ?qDZaqbD|BbTH R|z@C}~AB| d"@ Rj<>? =$ [BSA{è_ !|D ? BC @? cF`? BL@!!@?bSAR{è_  {Sck8NG?qT[ R 2C9 s" T`@?@5z@`"<~A<[BSAcCkD{Ũ_[B !HB9@ ?qDZaqG|?AbT;N Rz@#~A!| b@ tj!\<_<;SAcCkD{Ũ_ !|D ? BC @? cF`? BL@!!@?    cA{S[S@!@T8@Ka Od@/K39SS9O@W@?qH T ?q T_x@=]|A=-* @A97,a4@Qa#CQ#f  Gc*Hf8fQIh8*88kT @@qaT&F n" b oCb:A" ƈ@*!! ?֡@ A! /@@BTK@O@{FSG[H_s4!,!@,#aC5#C G? Є$D ! c0!¯R? Є$D ! c0!R?ѣRERCr[r!{ ЄAS @?dRkTRcr|#c` c|c|K=`|~^={h`^h`.!^!^!^-+?+={ -#<L<p#<?L< -7D` @` A?@@BҡT{HSI_!-$@;@ = BA=@? G? cA9{Sa@MEMDMCM"Z.?@?֤@ 3 @@!.xd#!! NRm9`:A 7 B@!!@?ֻv@zA.` @ E-=Z#B =?ּz@#~AC` @  (wH- ?B  )|)>/KB|))?")<BKA_"))= . /Uc@# Tk@# Tg@# To@# dTD' -b @ [R^{R\))+D' -b @ o@))*# Tg@)+# Tk@)*# T c,BSC`?.!?T .!?T @.@/  G[ 'm/m? $D[  c c0!k c!`"gR'm/m7m?m? !$Ec{ER cAS[O,F=p@ qY9a@.a"_<@v:Ar3979____ BB@?`F B@@? A~bA!! >?of`Y95;@,q T BF#@? ЄS !@ ?`CFqmT @ D4R  Ձ@ 3cx dzzC9c9# eFq-TsgCeR%   b@A@?TC@#TsBT`S[9`6@S9` @R"B0?`@C@B @@?ր6`CFZckLT>S !@ ?`@aS[9PA96?@ ".B`.B!!0H>Sc !4D ?SEWE[E_EcEgE RS!!.1>Sc !@ ?ց3@S BC@?*>S !@ ?֠>S !4D ? R9T7 cD#BR`?֢ BAa#@?`CFqMTS B ֞@Һzs*?**?a~c!3s?|?>)`CFkT@bS[9"7` @tS9C"c`B0R?`@C@B @@?ր6`@?`s@*@?Q@|@#@# dzzB`@C@B @@?7>S !@ ?SEWE_E!RcE9[ERgE !A?E"@cҁT*SAsE{ƨ_SEWE` @" cDB /R`?SEWE@ '6?@ ".B`.B@ GSW[_cg? $D c0! c@!/ԁR?{S[k+  Aq8A Eq*@***!! 1*?=bbn:A!~!2} c@CbCb-`?!:A!@2?ւ*N_q-T37478C3  ՀGa~z@:A****?ր:A**?ւ*Ns_kT3D7D3RqT sQs6R_qT9 9Q6@@`6:A# ЄtD*#R*?* AD@BT +@SA[BkD{ƨ_ր:A**!!5? G37?   {S D[`%8`@?`@"р?ֿ8T`@a uvb?`@?`@?`@?`@"?ֿAT`@auv"?`@a?`@ab?`@a?`@a"?`@aB?`@b?ֿaT`GqmT  `@aC!L5?`Gk,T|`"?ga"`?Ta ? f#9`:A[BSA{è 2E  {S,A !dA ?`b 9a*A`b cAG!@`?`I97`^`f `H97a@bF9"P9`BA !(@ ?Bb>A`@a @ c|@`?`Ba@ BB cF`?aG9a6`A4 !(B ?`F9`6t A_97`r@qT5`"@q`TSA{è_u A_9 6@a"A`:A BG@?` @" cDB@6AR`? R9@` @" cDB7AR`? R9   ѡ !A{S[@3 @ҳ !F ?"BTT XD?֠5 D sD"aRB8?֕cEb7aR?cEc#@9 5 A@@B!T{C*3@SD[E_* DF#BRЄ? !F7R ? WsRs.#"RB@9? G?{S[cs@_8T"B@:T?@ T ZD?@ 4B0 T? 4   kR;N_qm T 9F XD7Ghtv ?T@T7@?5G@!kD RSA[BcCsE{Ǩ_"B:?T XD?`5MMGN!KMM="K" <SN >FFY.9!;N{"_kTkDR@{! {ScxA:S@$Rҥ@?_`BFqmTwB[ DR`@b?`BFk,T[B` O#Ҵ DR=:?`"#R?a A` A E?9SAcC{ĨwBC{S* !A[c*k*s8AC D@ $@!!`:?:A*!!:?:A*!!`;?:A*!!;?:A*!!`<?:A*!!<?:A*!!`=?":A!!=? @! !`@BA9_@C@@9R9 !F ?qT skT:A!!@>?@@`H7;@-.<@:A`#:>wA-!T# T# T#:aT#  T!!?֠ A@@BTC@{BSC[DcEkFsGC_9@(# T!!?:A!!@??QG ZF~@@C@9s@?֛k58kT ` G?= BA{ CC@G\NA=@@O0#"R. )0@Ct @/7 =@xv0 ?@4HR_q-"T @? 4H{"kTbD45hw?֓@TaT:A@"@`?BT/@@0z@7@x?zA'@$E0@@x@D?@AD5@ qTZc;ABd8(T! s@~@7`     /`?Bku8;Aq!T@ @n!` `?@ @#s_-;h-9`@- zC-!^!^ = < ; 7{ 7 : 7W 7(6+>+<w+7*9+8+9*8ּ~׷~$$~**9@@v@ @"4/VB@O0Ew@2@Œ5w@<@5C@@. C;?C^<}@C@v'@~=B@O BAz@?@ @0D9`6C@.;?@C}r@?@czA}p?xIG@@H!GklTDs@3C@^=]=_=~=^ =b}=_x*A c*q@ *S~A @q*@*@' Sp@;NqTG RV"T@ ?@5"<@^ =\@"@<|B@~ =@=p_xCA @*&u *?ER @@"B ?H+N@K+G@!GkTK @R@"3@B ?H@G@!GklT:W_-.AA 0 AAT" T" T`"0TH" ATA(" T;?C<}@v~=z@ s@! @"@B G@!R3@?@x@=|A~=[Zc[k\s]?^m @"@B G@!Rk\ Є$D0 c! "^R?֠ G[cks?m?  ѣ cA{d@o[kH_q TS%RcZD 3C""ZW`@?4s"!T {3C `@`?@4s"!T T@@>NBNe@>^NE@@O0"Rc.)C0@C=____ B@@?C`zCq@@RF`oF#ң cDw.yD`?xv"=`"r@B =ARvAprBtvCp<tAv`.A Х|C**C?@6@@`@aB BD@?@( gR`@FA)C@@sB@  BPCw{@?`J`@@"T@!@?@a@? @a !(B ?`JAq@z`TQd8@b 95S# C|4ZRCS_ BAg[@?`` @* cDB`?`H G?֤ $Dc0c !@bNR?{Sc#* ƼA~"2@wC?q`TbD0{A tA|@`BAR+=?=?`GS !@ 9;C ZG ?b:A*`BA ?6x5b:A`BA*@?֔qaT`GS# !@ ?!`GS !4D ?DDDDD AwD@BҁT#SAcC{ƨ_־"=~@*#=&RnA"RÒA)=:@vB<zCÈ<=X G?CѦ ƼA{ CS[**c -ks?m/@:L@)@gҲ@L@ @ G^LYxc? 3!Xz6@:A`0B9 7 @q#Tq%T q@&T 9C7m`@ R~wA#.tl#@~@m+@< =n3@<| @=* ?ր:A! {cF?ր:A#RR`?":AAA`?@*@@>@@#4&֨@)c0 @O@h$EC@`|zk|@=> @o@=?kA=wA =Akm @\m_uBk`0 @_ Tc`k!TKAqmpT;A'**!@?@#zC]k<~ =|@}rz! @"C) 'A#@@KA@×4>A>@@O S0 @<~z.@_=CQz90@!E6)a@<^ =]@[k<~ =}_k< = @#>AT @ @"@_T"@@_k!T!@ @_kT@ @!TAAq-b-i@-"3Z@- T#<T";AT":T"9TAA@"1AT@-?AI-@%Y@ ?A-'J-AT 0T` 'T@ &T %AT@=]@#=T;A*?!+#? @#kzR ]k<^=\@ }rz1#@/AkO҃_k<_@D?E+F_=IR @@@q`YT9#?qT# @q(_T@_4R@ qUTHHTq VT!qTzY]k<>=<@]p_x @|z@}~A\k<>#@?=k@@PTc`qaTcR @@? qFT9#?qT 39CC WNcy-!^!^}@- + +/ /^ > +[ ?. . ++=[N)> R A)?);+<)<)=)= G9(#9-3@4s@-~oA- + +\ <? ? +s +> >[ ;+5tWB-+<+;\+3+4+4+5+5ս~{"p#l<T;=CNC!kC- s!^?ND;<Z!^}!^#@!^C!C?R[3@4  5>-q-3@c@ >hqsC {=?Dp@@?sA.AA>A; @>s?WB@ @@?ր@@ q HTHTQq T M}@ @qc`@3qT;A *! #K+?#@n3Az?N@CN]k<  =@}rz<CN?Nf@)#@d4#@=+@K@C}@@O SB0.#@<^=?=B0@<=< =wzE C\k< =@ 3=^_ =7A|z@}~A\k<C@ =J{c9#_qTCR! S@"5qaTSA9! _ W!![C|g/@!ATGACAA q:T!!#D C7GbRg() 7#@) GNcKKSN{bbH )BA@)_hq~C`9"!KK{|Z"?b~b{|yz#}W}WdTg =#} F9#}=@<ן]=A]M6/@N58#~ RkAEן!.Aq nF9~#mW?jLT;A!& ? @/@ 4@#A_NE@@O S0. @<#R= E:tJ @ @ 2@)G@?֠A` &=*<@C=~= @!@$';A!$?/@5CAAq@'T!`&AAAAAAAAAAAAAABBq Tq!T! zD]k< =@}rzտ~{"p#lDTռ~{"p#lT@@q!TDR@ hqaTX9qT;A*!?O$zC3]k<~ =|@}rz!oC)@)@14=C}@@O S0#.@bChq KC`CbcK}BKZbS{bW||b}]by9Z ~ ~~  Txxxx7CN?NA`;@CT?) L)O7JRAR=#=~=%=C ! &4p7R"RC;A99 BD @?!*}F9 @j/ T A A {S@` */-`?.(.~9.? *{`?(.n";A!!" B\G~;lCb@?;AC""`"A`!`"?!#O @#~8/ן#~8ן;A!& ? @;A B4CC@?99 $D0c! "^R?ր G?֭;A!&?֎{sASb7f@[c*e9k)Wd)a9Xh@)4p& տ T`0e8c9]$E0@h$f;_99*6*U`y9 6CKK@t *SA[BcCkDsE{ƨ_"RaC`;Ab99 BD@?  {S[C у cAT[9b@ҁ7`fN. ? Tgz=CR@A)@? =bDA=:@=B?<=>=?<`"x9`7`Y96`Aq$Tq )T!@:@ 7!8, AA@B]TC cb7RSA[B{Ǩ$g7ab@) )KKueC=g^NE@@O!R30.?<= 0@ wP=?;==~=C]_ = `:A B,E!' ^G@?`:A!!?`:A!@'?֊@IC`BFq T A#RR^ q T.#R*C aD hqTC  *C **@ @|zf>N cBN&!^ `&BQc!^B  Q @` B| AAE"{>|?@"%wB-bcb"AAb @d @B`+ @+<D %!"@?@`@d @<@j<~ =|@rz@`BFkTAAAAAAcX9lX9""`bBRuAqqMT`A4 qTvVA`:A @!3?`:A!RbVA5  cx@X@!3Q`?ց"@9`:Aa6@~"@!3?`:A*!5?`2G9@ 7 ^G`:A!6?`:A**!7?AAT*`:A @!(?ց"@9`:Aa6@~"@!(?`:A ^G!)?`:A!*?`:A!+?`:A!,?AAdG9 cG9gbG9`G9bbbAb!,bcB`:A! B@ ^G@?`:A!@-?`:A!-?֙`AcAn ^Gf?T@~B C_~ BC`b~@b"@?Cm#`:A o oCbCb !pEAbCbC!Ot-^|?- ?`:A"R ЄA!5?`:A!6?AvRngRn` @ D*RB`0?`AqTRq` T#"`@DR#Rd?) ) c BPC@?`V`@@"T@!@3@?ց !(B ?`VAAA`@ !F ?f7 BD)d@)9K*@?a@*$@ T` @ ХDB`.AR?A RAAA``@!R BHB@? ` @RB1?A@RA` BC @? B @@?֢ BL@!2@? BpCRR@?`@"R cC*`?zA{A ag?k T BC!#wS!|@@?֣ cF`?֢ BL@!0@?` BdA*@?y'`@"R cCAR`?@@q@TAxSA`A^K**a"=`C>f^N@@@c@O30B@.{@<$R*,E =#@%0@ { *,!/?`"8$R=|=@d"89{ddr89;== *`:A* dE***?**aBcC>@`^NC~@@O10C< = ,Ej,@0@d==@;==AAAAAA<AAAA7 BC:#V@@@? B @@?֢ BL@!@1@?@`A_qTcSRr^'  xa >~{!|!ATAA G? G?E9_   { chD ,A`?ր7 @{¨_ @{¨A`@@9_R_  `_{S[cks% ЄA@*(A !E ?7F !B ?@6g#9@ Ak g@A@C>@@&@9oI9I9I9I9bbbb{{@{{0@CbCbCbCb ? ? ? ?`Sc7Y@@d@0@?`S@#7Z@@_C&@?ր&@`@GR@@"T@!`>@?րCA@T5@ A@!)B)b6r&?! TR%77$2GA|@*@=%R=7@@"T@!>@?ր;A !@E ?_9 *96@@@C!@0@=G=?af`6S!a&xRUҗ D.X rV%$A(@B ?ht @|8&}8}8!ff%|Kf|K|KR?֟T`6S#@ AD@B[T%SA[BcCkDsE{Ǩ_ր/A !tB ?3G9@96@9'A6H,4 @n@ABc"]~#|T|ҁ#_g",6!`???T R g#9`|R#C@B&@H@RR"r@  @k(@@|B CC#Z@?bT*@|c @K|B CC"|A!!C?T#2n c-cC @k Qo@q9TARR R+HARK E   c Yk" Y@k+@ @ cQ@`  `k `@kKTH%QR@ ! k@+@qMT dGb g**3c+ )*R@ZkTk@TxzzZ@#?֠6ψC_T@R` 356a@R  ;k`+@Aq!tSZ@_C 6A 49g#9`@a 0c6r&?! Tc089]fE&@c0@;_99p6* :@q T@96W[97@@a6@!@"p@96%@A9B6{C#@) @ 8A?`6COcC<$=Z@_C  _aTgc97@c)@9@7@Rg#9*gc9`74RS@@p@9`6@ A@)!B)b6r&  ?T!>@8b @9}"6`@@@@KK`BSC !@ ?ր@@@!@4@C?`BS !@ ?`BS !4D ?4R7 @n@Aa"~#~THZ@_CQcD+@@3@K)g@?kT 9C}@`(CGd7@ A@)!B)b6r&  T!@;4@9`7Am|!`DTk@;A? q To@Ab?q T !pE ?A ;A B,E! =@?@R;AR `F?+@qTc0CsCR ^N`|c `K|` CC~@@O R.3= = ====z~=k=TkTBD;@ @A` cD @B`=@R`?DD@*@94Rc#9H]!@;{!C'@4@0B97@+|@ |Q.&@RZ@*c&26HR*r |c K|! !C?T_k T @ cDB:R3`?@3@%+@4RcD@}@`(CGD 7'@?q Q!R|! "C!@!p!C_BTn*)% @n@;o|> @"#~}T#/}n;~#}n9Ab !pE ?A ;A B,E!;@?ր;A B\G!;@?/#`T/ $D#@!@=c@¦R?}@`sCG6!@;e/ G?ք $Dc0c@! 9R?ք $Dc0c@!9R?  "Rd 9_D_  @A FR_ { BS[ 7?֠7w7b8|@gD `{S[Uc !G AAs sB ?;A@ !E9֢) ?@C BD@?@ BXA@?ր>S`?րBS`?րFS *B`?js?jss ?ATCA !(@ ?!R F 5[BcCSA{Ĩ_ք $Dc0c!?"R? |"?g !`???T ? d#9_  `c9_у cA{CS*@d@'҃ cG`?@6@4@@qaT`Z[9 6 BG` A*@? A'@@cT{E*SF_` G?{SAS@$Rҥ@?l BdGu @?@6a"`"|_g!`???T` @ f#9SA{è_c cA#`?`"#Ҡ?ր@ 4& {S@A *@?u>BҀ?Bb>A`@a @ c|@`?`B@SA{è_{S B @c O@[kҁs@?!@? cD B3B`? cF ֖D`?ւ BHBwA@?R?%@zRd9 Au y*|:u#{R6 E7?`.7@`bc cAG`?փ~@'`4R}`#?ִqaT`rCa !HBuꆹ ?trC|A"TaFR`@b+#|#_G@ER!_|_j#T@E_a!`?`@ D?`@>?`@B?`@F@"T@!@?`@R BXC@?`@R BG@?SA[BcCkDsE{Ǩ_ց !|D ? BC@? cF`?!?`r G?{S(A !E ? 7`Fa !B ?@6f#9`G9"R7SA{¨ B`.Aa !tB ? !p@`A ?bR@#`Tdn+~+~xSA{¨ B`RAn"d+~+~x{SE97SA{¨_pR$"'*` DA3R!r.#'&?@ ` @*"bBSAR{¨ DCц ƼA{S*[**c*@҅6@@@h7*B 6d qT G?֠@9Xsxs` !@SA[B{Ĩւ BFaR@?!@SA[B{Ĩ!!@!!! BFaR@?!@!`*`!`@s? g?@@gA@"gg!`?` @g[BSA{Ĩ`h@?ւ BFaR@?ҁg`A!gd@!@SA[B{Ĩւ BFaR@?`!!t@`l@`@`@@`[B!@%x@`@SA{Ĩւ BFaR@?g`a@x@`[B@`%@@`!@&@SA{Ĩ  {S s@*!`+`?!+`?*!+`?*!@,`?*!,`?*! -`?*@SA{è!-{S*[cX**ks!4@ 9_G6@ @;OO@! . ?!.?85!@1 ?! lTB;@ cx@!@2`?B;@!`2B@?B7@!3W@1c@*{|?qTRc3;mmbl{4*s?k`TcrTb~@b(nm?@*s?kT;Fm!`4?q-T"6c5{4Rx5**?*?! ~@QLTskT! T;@cCSA[B! kDsE{ɨk!6DSzAT ?! 7 ?*?!1 ?!1 ?~@O@!7"?**!.?! / ?!`/ ?~V !`0B|BQ?[  { Є\Gk Z@S[ca*! .G?!.@?!@8`?!9`?!9@?֔B:Rq T*s@?kATG@!:@?;@ cx@!@2`?!`4@?7@ R?T@hK*k Ts{9`C7@ O)?q`baT*kT*k T  ***Rj*kkTkTk+T?kT*R:qmT****@?kTƀ;d{u| kT7@*xu# {klT;@?{@**%R5;@Ts kT7@T@9 kT7@T@sEG@!;@?SA[B! cCkD{ɨ{S[*c*k*s!4@ \G7?T@ ֊@)h! .Q )?!.?!@<?! =?!@8?! >?!>?!:?!9?B;@c cx@!@2`?qT y 9D?Rg g@**{ ?kT7@!@1R@?9N)!??s@*!?@!*?***?֟kT!@?7@!@;?!;?!`4? RKskT{cgg@s@Q # *?***%RtkJTg@ gk T7@!;@?SA[B! cCkDsE{Ȩ7@!@1@?N)!??s@*!?Q*!?֨{!. е@S ^G?!?B!B !`!?!?!?!@?!?!?!` ?! ?! ?! ?@SA! {èCd ЄA{C[ е@S ^G?mO'n'@!.?! ?!@8?A  c@!  n!`?! ?@ fT( n""!8! ?! ?!?! ?` A@@BAT{ASB[C?DmC_/n` G?? q@T_? q@T_h A{ S [ *cck9s?mN,@[@)) е@@Wz ZC!?*| +C@?c cB `?!?ր@@? @`? @ =!@=!@{{?C)k qT.@q.@k T?qCzT*@` C9R* ?"?5.@!  T@kT ^G*@?@@? cB"R`?ք T.!?aT!*? @j! +"?!+?!,?@@_qZT 5T_qTT_ qLT!.f`T"n;nnAb"A`!`2?A`!2?!3?`"@m, ^G!"?! $?t@kT.@q.AT` C* ?"?%`iR'7m k@+T!?q "TqT qYT" gg ` B`?` n@`g~( lBT`/@ ^G!?ր.@! ET@kA&T7Qm*`iR@'.qT!?q@Tq(T7m qQT" gg ` B`?` n@`g~( m%=T` /@@@ ?@ !?!`?!?  ?b BB!@?@!@?!`?!;?`!@?! g!?a g! ?!?@?! ?!?!?!` ?A ? @?@?!@!?! "?!`#?!#? ag!g!$?! %?!%?!%?@# @T> P@??.! &; "?C-,R@r'?! '!?"!"?!@(?!(? ? ?!`)?@_xrTb BF* ^G@?!?!:?ր.@! l&T@*kT7Qm B\G!@?b BF@@?!?ր.@. !?!?ր.@ g"!?!?.@! ,T@k@T ^G*7Qm_qT_ q,T_q-T`!."@!7}`?!7?b BFaR@?!8?`"@m B\G!!@?ր.@.!&?_!*? @j! +"?!+?!,?`" n@a %g@@Ag#ga@g `@g!@;?`@R`ħr' E Ab?RR2r2r>''R'>?n` g TB+=""+|@b"?@b!"?b BFaR@?!?ҁ$g@@Ag"ga@g%`@` g! ?`A`A`A`G`!@@?ր@7QmkT!."!:n}`?"`@m_qAT!."!`,n@b`@ TB/"A`?9l`!?ր.@! T@b`@ TB"A`?9mn`!?֠A`!?ր.@`iR'7Qm?"* ^G*!,?!."`g!`-}`?!-?!.?!0?b BFaR@?!0?! ?"`@myb BD!3@?a#"@##@A %gafg`@`l"@a!@!@4@?@! @?!6"!*A`?A`!@*?@"* ^Gn` G7m?`"@A`o G?  {[ @St Bcx Dks!.3?!$?֖ ^G!%? !`&??!`'?!@(?! )?a !pE ?Akk=?g`QQce!@cc &`c B,E@b@?!*?!*?!+?!`,?! -?!`-?! .?!.?!/?!`0??!@1?!1?`@qTz Z F9C22"34Rg" @?"??ցR@?b`@" o?`@kT! 4?!`4?!5?!5?o@g@a !C"  ?"!@6`@b"?3@ cCkDSA[BsE{Ȩ {!. @@ S ^G?!6?!@7?!7?!`:?!:?!@=?"!`>?@@! SA{è    @_{#c cA @`b`? R`" 9 @{¨__@A!,@_  @$R&@x@ &B @"x 9_{!RSc c@`?@R"@!@aSA{¨_`{S[ckc cAt @@a@7!R?AR?aR?R?@T?@Tb2Acc c`A`?ւ B0C@?ր5`FA@?kTc R`" 9a !Fz ZD ?b BEv@?*@#R@?u2a*#/@a !`F ?OD86r`TR qTC9qTa !F ?`@5cC" 9BR@?b BA@?W9q!!|"|@4+@ @!|#?(Tš!&@y `@4zc cPEAE#x Aw B`?B?9dNBK9b*Ac dJBK! !?B?BE?`@ cF`? 7` @ @s d ЄD~~@R==?Ra !A7C"@cA TSA[BcCkD{ƨ_ R@`" 9`FA?kT`JA@?kT`"J97z ZDv F/@RR?` @/x Aabu@#ҠB?~&A*A#.B?~.A2A.?a !t@ ?ր6cC ` FE)RR?`` Gc?d $Dc:!@??Rc?c@*p @!R@{b B DSR@?b BL@! @?c c@!R`?`@9?q`TU@9?qT@9U5a !`E ?ց@`b B@C@? R`" 9*@SA{è_u` G?_     4@!R9_@$@{S}T@ Ղ@*B@@?֠j38sVT@SA{è_   {SP@qT[bu *Bzss?ցR@?klT[BSA{è_  a !A{CS[4@"@V nFb?ր@7`v@@ ` T@#`T `T/Rn9g`#~ןqn`@R~c cDB m`?bH@!2@?` A@@BҡT{ASB[Cp >Eր@a !$=% J$@9&@]|_FED9C(^<_  d $D{c:!1`2R?{ y@?0a !(B ?`@a@,`a?8?9 @{¨_{S4@t *B`r@u G?`z@?`~@?`?`6@`?a !TG`6@  ?@SA{è{S4@A !lFb ?av@Ҡ9g?@a !E`j?`@@ @? * !|Sa7`j@@#5b?ր@?`6@a6@?d??9?x?` A@@BAT@{QSR[ScTkU_?`j@?j?RAR@r[r`kT`@@7`@ARB @?@aj@@?ָ@ G?` G?   {S4@A !lFb ?a !Cu6@" ?`@8@a ? R9@SA{èp >E  {b BBc cFS[c`?@4@ @BC`@954 Дx C# Ճ@ RTc@"T#@a !(B ?SA[BcC{Ũ_#@{! 4@c cE` TFs"?փA&Tb BEt`2@@?aJҀIa@Ds @|K Tcc c@`?b BC@?־@ G?{S4@A !lFb ?a !Cu6@" ?`@8@a ? R9@SA{èP >E {A !lF 4@` ?`6@a6@* `A !EaH ?`6@SA`{¨P >E  {S[4@A !lFb ?`@@96@`87RA !Eֿ@m/a^ ~~+^D $Dc:c!@biR?  {S[4@A !lFtbu"v C ?b@?b@bD9B7[BSA{èP >E {S[54@A !lFb ?րB9k T96bD96aH"R9 ?t6@a !C"f9z ?`@8@a ? R9SA[B{èP >E  {A !lF 4@` ?a6@ `3@A !E@`C@aASA{¨ {S[4@A !lFb ?րB96SA[B{èP >Ea !C Rv6@ y" ?`@8@a ? R9SA[B{èP >E{S4@A !lFb ?֔B9A !E4@B9_B BA{!4@E@`@c cESA[B{è{S4@A !lFb ?֔BAA !E?d??9?xSA{¨ {S4@A !lFsb ?ց6@3@A !EB*)SA[B{Ĩֳ4{S*4@A !lFb ?ւ@A3 A !gA !7`@C cDB&AR`?֠@=3@@9;o>7+o6C` G[cKO?D $D cEb9v??ar@a`v@ ?A !C` ?[BSA{èր&@$ $Dcc=c!=R? {S[@! !lF@v ?A !C` ?`@A !(B ?# cA#`"`?! !E$ $Dcc=c!XR?{! !lFS ?ar@a`v@ ?A !C` ?SA{¨0 >E{S[cks @ AW VF3@@vt?@a}! !lF ?`@@ @@ C{J{ ?֣X&Z ZET   Հ2@y@? I@BAs|ۛ%K T˄@`?a@ 4a@!aA !C ?`E9 7X&`@a@$@-T?֡? TB BE2@9@?dJ Id@CsB|ědK T!C c@`?ր4@# cDB@R`?`@@`@A !(B ?bUb!A !F ?@!B B@@? A@@BT{DSE[FcGkHsI0 >EA?֣T @@?֎B BC@?4@# cDB @R`? G?$@5 A4?kT@_  {S! !lF[ ?֓Vs`?SA[B{è0 >E {S! !lF[ ?tSA[B{è0 >E֠ {RS`[@C cF`?ր7! !lFv ?! !E   {/S@! !A ?! !lF ?a@?! !Dm# cA#.u*@Bo`?# cDR#`??~R*`@/?@ARu@q ! !(B ?a D)~# cG~R`?` @)RE FR?`*@A !t@ ?7C cAD ЄBc@""Ҁ?!RR9! !A@"@cҁT+@/@{CSD_= & G?"R R{ CS [ c k t @ A@G )B BG@?ր @q-T@! @?qMTaA?kTa A@?kTaj@]A !A"D ЄB#@#Ҁ?@aA@`@)v@qcxA0@@@9 @)S` A`T-! KKDxS!|A |@ !|| )s_q)TaxS })c|@b!|@T "G еB=" BF!@6sR w??@[@3@s@ D#Ҡ?S@w@q T;3*A*?@|~@$"C@9? @#Ҁ?***C*Ҁ?~~@6"C@9? @#Ҁ?֢E? @4T@_8{_8z_8w_8_8v_85B**3D***,E? @@5B"@@b@?2AT;@@? @qiT7@Z W@kTsNb#B?@@qTB" $c@?`@! !|D ? AG@@BҡT{ISJ[KcLkM_B"@@b@?2@! KK!|A |@ !||_qMT@ !}`|@!)4 "G FB=#s`C6'W/  /@*@D#Ҡ?S@C|*W@qmT*A*Ҁ?~~@7"C@9?@#Ҁ?#Ҁ?֘4_TF@9ZA_8@_8;5B**#Ҁ?5B"@@b@?2_T@@Ҁ?q T@Z@kaTYB"@@b@?2B"@@`b@?2R4 "GE$ $Dscc?c`!@##R? Gs?$ $Dscc?c!@##R?A "'#R#'9A@a_?q_{ST@4 Д*B?`@?aj@9`@6" B@aB@?`J@1TSA{¨_SA{¨A !B ?`JSA{¨_{A !'! C cE[SҔB @RU DR`?   b~@ R?֠sKq TA !BR ?f@9`6b"Rb~@ R?֠sKq T @@SA[B{Ĩ$ ЄB^@R!#?! !F ?*qmTb~@ R?  sKq Tb~@ R? @@SA[B{Ĩ~@ G?{[ RS&c3R @9W Db~@ R?֠sKq Tb@9 7 "@  @@>@$ F?`@qLTb@b`@qLT^@^`@qLTA`@qLT A$ G  @c"ba?dN)aO)c @!KKa )qTeb@ AB|C b@cR_qTc^@A| !|êR @bN! r"C|#c`b|KBtSBa )# cAZ@#`B`?־BF#ҿFR# cD`.BJ)`??c~R`*t>*vB*@# cG`?֠V@Z@! !t@ ?֠7j@96RSA[BcC{Ĩ_֡B 6 CT @3 sN@?Ҁ?!&`?F Ң?Ҁ?!@'`?`"R b~@ R?sKq T[@ G? {[V g9S@B 7&@'9 A !E ?9dL)K9c K! bF!# c B`?aJC cF`?BE.@7@+BcV@R$ ЄD=?=?`j@96 @0RC c@AR@`?J1T" B BB@?1 T& ƈFB#RJ@bR? TbV@dJ)`@A@ ExA*& pF?`j@9`6[BSA{Ǩ0 *Bh@'9&@`V@RcJ)RE F?BE.@/+7bBcH)$ G?[BSA{Ǩ0 *B֠@SAB'[B!R{Ǩ0 D֠@B`(!R# cD`?@A !E ?J@SA[B{ǨP B֠@!RB)?qT@a5*_{h@q*{_A{[@@ ÊI)$ ЄB!#Ҁ?Sc`j@97@ k!`*sŽJ)B*< B{+Y 9gFR?8 'DRF@SK@q@sҚb~@!4 ??F@_k-T+ T_kן?F@@ŽJ)!)% B?! !F ?*qTW DsKqTb~@ R?! !(B ?j@9 7SAcC[B{ƨ_kDsE@" B@B@?J@1TA !B ?JSAcCSAcC[B{ƨ0 *B@ Gks?C! !A{ S [ "@O! !`E@ ?c@a@Z" B@C@?O#B B'@? @݇.Cb]@ _       _qMTG|@$@xch#8F|SE|S$@B|Sh#8$@h#8$ @h#8cAT__q-T)(@F|@' Ahc8Aic8ic8%ic8<S *`*!*x#cT_ _qmT' @D|%A  a|~hah#x"Pi#x"`Ӣh#x!ph#xcT_   _qT*,@G|($A  icxe|~aicx"icxFicx|`Ӂ@c!h%T_  _qTF|@$@xch#8E|SB|S$@h#8$@h#8cT__q T' @E|@&@ hc8ic8hc8B<SA *!*x#cT__q-TF|@ $@xcE|Sh#8E|SB|S$@h#8$@h#8cT_  _q-T' @E|@&@  ic8hc8hc8<S *A`*x#cT__qT&@D|@%@xc"$x#x"LJx#x!tTӡx#xcT__qT' @E|@&@xcxycxxcxB, SA(*!*x#cT_   _q T&@D|@%@  xcx#x"Px#x!`ӡx#xcT__qT' @E|@&@xcxycxxcxB|`A@!x#cT__qTE|@ $@xcxh#8B|S$@h#8cT__qT%@D|@ hc8hc8!S!*x#xc!T__qT$@B|@  xcx#x!|Sx#xc_AT__qT%@D|@   xcxxcxA@*x#cAT__q TF|@"@ _8_8Dh#8"@_8Eh#8"@Dh#8cT__qT&@D|@%@hc8 hc888hc8c8T__qT&@D|%@@y_xh#xh#x_xh#xcT__qT&@D|%@hcxhcxxxhcxcxT_   Մ_qT,4@J|@+@ҡig8big8ig8ab!D9HH9bhi8! !!*B !*h'8_T_ք_qT,4@J|@+@ҡig8big8ig8ab!D9HH9bhi8! !!*B !*x'x_T_  ՄK|@_qT hg8)@J(H(jj8B(*i'8Bjh8)@hb8*i'8"@Hh'8T_քK|@_qTxgx*@I()H(h(B(ii8b"Ii'8 D9)@HH9*i'8"@Hh'8 T_  _qT*4@i@9h@9g@9 c@9+@L Հ|Aid8id8!i%8`8i%8``8h%8h%8_kT_  _qT*4@i@9h@9g@9f@9  +@L  Հ|Cydxydx#i%xi%xi`x`i`xh%xh%x _klT_ _qTl@9k@9j@9 c@9  @|ie8hie8h$8Gie8 @&ie89 @#8 @#8_kT_ _qT*4@i@9Rh@9g@9f@9  +@L  ՠ|#ydxydxCi$xxdxi$xxdxi xai x_klT_ _qmT{RS4@$T@s@9~@9r@9q @9p@9o@9 գ|@9@9a @9 @9m  G (   -8 +8 '8c8 (8c8&8!8_k,T@SA{è__   _q Tq@9p@9o@9n @9m@9l@9|*@ +      k8Ki$8 f8&@ i8 h8g8c89#@cj9#@ci 9#@h%8#@g%8_k,T__qTB|@  hc@LRAL?qTR***`?sRA ?kTq-T@~@Aja8zbC|Sh!8h!8C|Sh!8B|Sh!8!T A@@B!T{CSD[EcFkGsHC_ G? A{c *AS[**s *c@?a!>@LRAL?q Tk!{s**s?@RA?kTkH*@K@`? A@@BT{DSE[FcGsI_ Gk? A{c* +AS[*s *@?a!c>@LRAL?q Tk!{s**s?@RA?kTkHbB9 QqHT@97?q45@*V@~B9B9B9? A@@BT{DSE[FcGsI_?q002 Gk? $DkcРc!. /B8R?C A{c* +AS[*ks*#@?a!>@LRAL?qTR***?sRA?kT$[@*#g? A@@B!T{CSD[EcFkGsHC_ G?   c<@E|@_q T   ?xd?(? C'8_BЃBx$xT_   c@E|@_q T   ?xd?(? C'8_BЃBh$8T_   bB cA{ qFAE(@R@RK`@+9CRcğ&! !F#9'99 ? !A@"@cҁT{C_ G?{S A[t@@T46 2B*?6@9q(T`ZA)kT! !@ ?kLT@9c:4R 0@9!Q? qTB_k 9T,@9?qTR A@@BҁvT*SA[B{Ũ_c6 2Ba@?ր6C9q,Tkt@p5`@qaTa@9!7` R?@#RF?2pG2Wy9A! !FC ?*4t`:c^k_! !D ?*$QqLTy@n5`@8 cF?'A R $q T9_q T@ tS`@Q @@dtX4kT@`kaTcTP`5 qT~9h B_q!T|  =07 Qq(T**#*ccc@44@ b@9?q9BpS   @5 @@?kT@_k!T @?kT@ HzMT Tt@^5`@?'A69BqT @AT! !=?Á<?==<}=`@^=_Á<7~=CdB#R\=[<|yOu:==dN=a~@j <'=3=A5`@9` 7~V c|qTRa R``@BbhA1@@jpB3HArxC5PB=7XC@!HPX=9`<;h==p>?x?kT`~ysRb}j<~=<[==\<<h<h<={=|<~j=7@|y*@* @,9@K BQB k:TF@ C~9H@Kb BQB kL7T@_ k0T@_ kITQjGTcQ j!ET9"RB BQ_jaBT09Q j?T9Q ja=T R?qMTS@ sD/)[cksS')b@9C}|a@9@Re@9d@"r`@ @Gm@` fc @q@l@{@) 7@**_q T_qTB 5b@IQ?qH5T_q$5B BSA_qTyR еD** 8Rs?)O9R@9##kkdT?@c @*?@*s@ ?@c"@`@a@B9( ?k@k TRAZs\KkKTKO@@aBJ? kLTSA[BcCkDsE{ͨ_@*{@P)_qTi9@@  * 7sK ?7@K@s@9qT {D 9As! !F7O S@!he87klTOIs@JaB? kT@{}@9 9k!Tô%R_qmT**;/ %9'9&Rql9%R @ |;@k kQ% 9k)h8 &R Kw} kT~~~R7**7    *P) ;@`?7@ {@*`?ֿ qTq T?qTjaBZh!!?aTZkT7@*Ib9!Q_k T/L@aBJ? k Tf?qmT jaxBZh!x!?aTZk T@*|@*{@@z%w9D9 %R  K7@?ցB9 9_kTKRW7**** {@ *`?P)* `? ?kTK*9OB&% $DCc`c!.#R? $DSC[ccc`k!.`6sbnR? $DCcc!.:R? $DCcc!.;R? $DCcc!. ;bR? $DSC[ccc`k!.@5sBnR? $DSC[ccc`k!.@4s"nR? $DSC[ccc`k!.@3snR? $DSC[ccc`k!.3sbmR? $DCcc !.`@bR9|J@LA?kT !(B ? cG*@*`?`>@ BlG@?֜Ba>@*a 5a@?$UT*a .@k!T@_kT[@@A%R(4#@9c7#Rh 8?8_k T'Cbh 8#R#8_kTv@'@PF[@ $DCcc`!.>BR[? $DCcc`!.=‹R[? $DCcc`!.>bR[?`Y` G[? $DCcc!.`?kR[?       {S8A !C4 C ?`*A?`.A?`RA Д*B?R`VA?VSA{¨_{S@A! !E ?ցBA*A3@! !C ?eA-R !E`@-!^!^cB- ?cr@9Ra@rbv@9$R@#2!*69! *b6! 2 `z@929SA{¨_   {SBPA_qThgb&RydxdqcZ@@@@z_kTf5@" B(B@?ր@SA{¨_SA{¨_ cD RB?`?a @) cG`NA`?ր ! !D{ ?1TR{¨_ !XB * ?`5 @ !A* ?q @{¨_{S*@B*qT#50@96! !@G* ? 7cBBqTR@SA{è_3 s D*`? !XB ?ր4*`? !A ?q !A* ?*7cBB  {V" B @S N@@?֡!?  BEVU@ B D@?֡! ? cDVR`?u!R BAa69=@R` tF!2=@? PB? BlGaJ@?@SA{è_ G?ց{S@ASA{¨_# cDb B `?`B!Ra69`JASA{¨ @_  { BA[ AScC @#@@'#u?#?`6@9`6`BA``:A !C *B ?:`RAb 9?R`VA?V`BBqT5`2@9 6tJAc@#?#?`&Ax@"|A<>? = !A ?*`@7 cDARB`?`BBqT`@ cDB!R`? !A'A"@c!$TC SA[BcC{ƨ_ B?`: F D?? @?*1T !XB ?q T#A?*1T !A ?q T@XRKQOSW,qTA!@8X`@RA`:A_q Db q! B?`:AR!?`:AR#!?`:A~@R! ?`:AR7!` n@?`:AR;!?`:A~@R!?`:AR`2A!?`:AR`6A!?BA@QqQ⃂q?6*?֠ 64 B*w:A?*? AB**'R*R? *a*Ac|Sb.Ac 9`:A cG`?KAOASAWA7`FA69V? RJtFAK 9+GOB ?7KAOA @s@ c`A`? D!RB?+ ?6`@@@aTaBBBB?kT`BA !E ? 7KAROA cD!Rab 9RB`?69`FAV? R`:AR!?`:A!R?ֈ`:AR! ?`:A!`R?v#As@ c`A`? D!RB? GKOSW?   {[A AS@#Ҡ?"#`?^1 T`bJ97@,qT`@a j`@a e@@TT BtA@?`:A $Cb@bR?T BtA@?@RSA[B{Ĩ_@,q`T@`JA cB`?SAQ[B{Ĩ_`@ cDB!R`?@`@ cDB !R`?{S*[Ҝ* !(B ?*SA[B{è_{@ S@RrA A a  !E@ @ @ R ?`*!Ra69^ !(B* ?@*@SA{è_  {S !DLA ?A!@! R_kAT4@"@_1aT1T !,B ?6`9q<!`@)!|!|qTg@`zR!?q,TckAT  !0G* ?* BXE@?SA{¨_քckT"@yBZ"$xT       @@B_? _ {[@@T[B{Ĩ_S @qT D Ձ@@!Xss?ֵ@?k T@SA[B{Ĩ_SA{S[@ @5@qT ֲG  Ձ@!L3?ր @sk,T[BSA{è *B  *B B D{@? BL@! @?`{_ G?{S[cks BA'! !B@@ ?`1'@# c @/"@ еN@B@`?! ?@/ BC@a#@? B D+@?֡!@ ?@-b@_q+THA  HBRR@ x`5Z_kTw@Y` @{`4@~@6X:x@ ?aU@|@B TRa @jy|@Z{a!Rj'b@_kT#@@?+@@?@! @? $Oc@HA B a@C96<=`:@q TA @ HB |D F { @RSAa:@EB|{ 8k"S?k Ty@R@78k|R A)@@xh!xhpS`?@ @@S ?@@T@ ?#@@?C`?@!@?@@ @"X:x@G|@ ?aU@|@bT @Ra @DRjy @f#@EXa?q`T?q@b@! )1`:@@ B E@?ր@/@@?@! @?` B,F@?^t@_=~v]Av]B~vB8@b: BlG=@?֠>~~@=}zA}~B~=`:@:@ !(B ? A@@BҡTSA[BcCkDsE{ƨ_ !|D ?#@@?@ cF`?@! @?@ !|D ?#@@? @@ cF`?@! @? @z'@#k|B @!R D?ҸR  G? G?   C A{@?D_@@x@mggoo;@@}|@mggoo@'@'@CA@G@B|@9 @s@' BA+7@? A?@@BAT{HC_ G?   @!@@ F  @BB@ B@AXa AA BA!@ {@@+D@"R@7#xc  B|A+@?= @` A=@@BҡT+@{D_ G?  A BA!@ {@@+D@"R@7#xc  BDE+@?= @` A=@@BҡT+@{D_ G?   {@!@@ cHA`?R{_   @!@@ @  O cA{ S @d@h@ q@fB@9qgF@9d@O<9999c@_C__ B`E@? B @@? BL@!@?~~@>@| !AO@"@cT{JSK_ G? G?!{@ BG@ !@? @{¨ *B_   !{@ B0G@ !@? @{¨ *B_!{@ B$D@ !<@@? @{¨ *B_{S@s[`A)?k@T`@"b[BaSA{è_`@4|@ !HB ?v@@T@ !Dt ?֔}bA)j4Bb  !|D ? BC@? cF`? BL@!`@?`O BA{S c@D@?c@@c@ tA=lt"@@@?`?@ ?@@@Ad@#?T &@#>T  @#=T *@#<T H- x# T@X# T@8# TB@# T  `C0@968  @ DARB? sB`?O #@A@~@?|?|?=C`@@ D!RB? Dt G?C BA{SCA@@^A@41`Ta_ !dF ?֟^A~.@!^?~* A@@B!T{CSDC_֠Rzr`* G?{/ ASc*ks@{ @F@C # ЄEc`%|@`.@'=?=?@ A@?q"T F+ D/ |D? CO[ JB @g @Xw@4@@)R`(I{`sakd$O#@@S@<___!4@)?k%'@,R kc'+@#99`?@`&6O@@S@3=ex__bkd_b@G=@/@ o@?@%6@@8xe@qmT !F !L@R'R =a@"@@B|#k<@ km T@R #@#4& @4",@ gKnJ|SI\PBbe`R?qT?qT;@a`;@b =9@,=f;A=By<`9=~<> T!@?kT[\ A@@BT *BSAcCkDsE{ƨ`aiR>'!@B.=~?kT;@`@9`7}!@"R`?kT@@qmTAo@QO!X`<#@@ak$@S@___!e| RRv;@ !C ?7=`@=#=A}<=z<=<<<G@ cDB`@!R`?[\G@ cDB@`@!R`?[\O#@@S@_E!QSA[B{è $D#c`%@c !#R? $D#c`%@c !-R? !A{ C GS [ #c c@k"@G?ցAa4 AB5 Btvy"?7`Cz@`D?{E AG@@BTk@{ISJ[KcL_?6={@~@ B\F ====@?@6`@ cdA`? R9 G?  {S@@@! @ ? 6 !lFt ?n !?< ! !E (B; ?ր?Gz@@baBO $D) $Bq,@qeqb@mr9(lv9$ kz9$ $$CG҃)(Nǃ҄' %" d:@y@@b"aJy@y A9aNy`9 !(B ?R@|~k @0@@R@aByqbO?qV)bR@W)j3@C@F 3\@h 3y=3?f ?????A# T:A# TbA@5A5` @ @@!@A ?qT_)K! )A@96 `N@a Dc?`D A'@@B!T{ESF[GC_֝:A"# >aTBbA4 ֲCC?A? B|Db@?==zC@a" _B !dF ? !CA ?. ?MTR GC? $D{#c`%c`!"R?C{CS[@C !A#@'ҡTҡ@bC@95 Cc.B?s`@95 A'@@BTC@{ESF[GC_ !@ ?!=N@B C !\D=  ?֓Z==V" c`D`? G?CCC@@bAqT_q5 RT 9_@T_q 9_c`G9q@T 9_R``G9Bq@ 9_ BA{ S  !B[ @@O ?c ` @ @ F#bB ? !F ?@ G?Oc BA?|?|?|?|@?֠5k ZWF@?@w2 ЄHA?@?% g_b#@c`% D`cRbB`? BlG@? !(BkN !(B ? AVbO@@BTcM{JSK[L_ Gk? Gk? BA{ [ c C@O6@7`@ !B ?S @ @@ F#bB ? !F ?@ G?@T !C ? !(B ? AO@@BҁTSK{J[LcM_ BAc@?ր5'@@Ts 9WF ? cLE`? ?#?b%gc`%@` DcbRB?s@@# Dc`%cbRB ?ֻ Gs? Gs? BA{ C[ !B @@g ?`c @@ !A ? Fk ;@s# 9A {A pDS   ? @L ?`?ր5[@  @qT@ ?ҳ@@ ?@`?6@a"! `?6#@@T@ !HB ?aU|_@B T@@?@Z K@x "?` !A ?SNkQsR !(B ? Ag@@B!TcP{M[O D E@c?x !pF ֪D ?@! !D !Csg{c_T@9??oן4@x@@R@{c?ր^@ ?_AT@SNkQsR !|D ? BC@?@ cF`? BL@a!!@? $DS#kc`%as`c@! b׀R? GSks? $DS#kc`%as`c@!` B׀R? GScks?{S[@ !C G ?֠R@sb?aT@q-TR@n@!L3?֡@s?k,TJHqT rAҠ"DP3s ?֡JH?k,T&@` !EB ? !G ?ր&@ cA`?ր&@ !C ?֠@5 !Gb ?֠6C`NC` sBҠCV G `?ַCB!`?֠C`? !F b! ? !xD ? ?`s ?AT !|D ?ֿ b@ ^ vBSA[B{Ĩ $D#c`%a`c!"BR?{ >gSn[Rck3y @ A%C@ C@bTG9`XG9a`G9_bb\G9b``F9;badF9]bR~p9Z~{~~_n;{kankaN<a7dhF9RD%C@4RRҁ@ÒF9kwFxfcJBxg@)~999M*I&EfG9 !T7BR cB`?D@ k-@A@aG99@-; @_@mF99""@{"@!! 8x3zzuA$C?qx@cQ?xB@9xA# )}@?xxB JG c@D MC A Ƹ@CbZCb%Y@<% Х(D@<9iAe`@#=?x!xl< BF  BE9ɑ@QF9xiAQ99q)Tq*TaT+@,'@A`6+@,'@ A `B@94`7 D Ju@)UH B0C!! @?*?4 A!!?O)@ qDT !Gu@?==x@!@ OCe*@! z =% ?)$) <@9`<4!D B0C@?4!@ c`DC`?R @" DB@?"@ R ЄHAr? B(B@?_  !AS ? O@ D! ?? D=9 B,@a@@?`A6'@@+@! HB/ G3 G7 XD @3h``@944KHqm T6#D 2CR4B`T@?@5@@`+@ C4/@ ?3C@"&TD@!`@!\@d b@ h` !C ? BdB@?`*@ tB" F E#?@Җ?@R`?* 7#@*R?G@HTC@_T@?5@|@s@R@qmT@@hdZ  '? @ @'@ T TOc@K<__ @qT qTqATD)3@^bbO[_ @'@@C?@B'@@@ ! AA+@ C D A@@B'T3@SA[BcCkD{Ǩ_ q!T'@ !A`@ ?+@ 0 $`ADqxS"A!F9, $9ғ @ ?@ 4A @@k+TD)kTz} @?ր4+@{Z#kLT@hz?@@!TT@O@!@ c`D`?"@@R HACsr? !(B ? /@ #D5K ?4#D@T"KU|ӓ B`C@?!KHj5@`!!K@GD-7@O""[UD)gj;g}bq_b3@O~_q~[F !|D ? BC@? cF`? BL@a!$@?  !|D ? BC@? cF`? BL@a! $@? # S@ cB`? !F ?RR  !A CS ? O@ D s*B! ?`? D`??GaR+@  @ +@_@pC9@R$?@+? ?+>8_kBЀN!Ҡ)_Qq(T!?TRRRa@ B`C@?  !A CS ? O@! D? !(B ?֞'@b @B#c@AR ЄD?`A G ? G ? !A{S[@ sECC"@w`?C`?q@z`TC!@C $E$@# @.Oh@RCNCkCR_@k = o____ B@@?3=C;=N@S<@@#NNSa@ еFb@?aA Aw@@BT@{OSP[Q_ G?   {S[cs"@ !A sA"@OҕR@/C~## `? R A[@Px>=#?< tD@=Bp gFK!NN<@-\<?DD#>TDDp#:T/@ =sn<@-!NGKU<?GG#7DTGG"3T`G9a6,.`R r-'@-b0԰~Ԧ~ 1 11^&001&80g1|-@9CBR @9BtS@?@A2"A4N)nO)@KcKk@z"|@-"d-@S8$;9B-W@ B"!^#!^R8>;< ""9# # n9^^[_omJ=?=sAV@ A?6/@* cG!@)`?kCc@9$@W<9=> =8lA:tB<|CF<DY[]_c6?@Oc/@C@x_=_=<_|_= BF@?6 BGc@?sDwDDD AOD@B!T"SA[BcCsE{Ǩ_RC=|@ׁ==xA?|B>xC?<Ӂ=?<(sDwD@b cDB`(!R`?sDwD!^S:3R:4<!^:7:82!^:;:9;;!^;>;?@g)@|@cR=?=AV@ A?`7@b cDB )!R`?֗@b cDB&!R`?֘u@b cDB%!R`?֌@ !(B ?}`2@w Gsw? $Dswc`%a`c!`%R? cA{C B@S[Ad@ D?ց@`" B?@@b BHB`@?cC@@dv@`R cF BG`? @ B4G@?` !(B ?`@`@a =<@`^ hE<~~a =? cA&! `?ց&@AR lB? !tA ?`4H9@ 7AD@9A 7`R@a6C BpB V@@?`I BD@?`R@aV !A ?`R@aZ!!7?`R@afa!)?!a`N@bj !E ?`gR !A@"@cT{ASB[C_ BCAR@? BG`b@?** !C ?4 $Dc`%! c!1`2R? @a)Aa$ G?   {S[aC A@ @ A@@9t6`DR A@@BaT{C*SD[E_`@R DbB?` @"R@@?1@T4 1T@C !A ?`N@a Dc? !(B ?`@b!RB?`@bARB@? G? cA{CS[d@@?4q THT?qTT?qT? qT`bX9`6 R95R A@@BAT{A*SB[C_?`qT?|qT?\qTWaf9` @@! @ ?`6 !lF ?֟n !u@-b׼~׺~' ?#?_=>=~;>~?p-'@ W9@;A_2)!5 @4@t6@Cb@ cTARAMR`Pr'@[@u?-q-HO=s =`?s@6@0 `2T@[@# cF@ `?q@T T14T`@b cDB@-!R`?֠@=@ cF=`?@ !C ?D RD@k9&'@ @ ;A_|1)@o! @@t6@CbMRC`Pr'@[@KOSsJ[= cF\=#G=_=`? AD@B!.T$SA[BcCkDsE?Gm{Ȩ_ց'@ : =@=@A!PA== =<tC"=ˆ`G9aCK77!^9?9>KE?CEG#?T/R; 9 9``@b cDB-R`?@ nqTK@;}bj@h{_C<kAs!NAMB-K@<?AA#?TAA#?T@A4@9@Ca6@rB?c T!V!^9?9> LZ`@b cDB )!R`?ք/Re'@@ T DC``@bRB,?@s^#E`@A` cDb@B*R`? R@g9cqT G?`@C` DbRB ,?s@@ G? G?  {) !@ @ ?֠ @ R{è_`@ c@`? @{è_{CS A@@`@ !@ ?֠ !D`" ? !(B ?֟ A@@BҡT{ASB_`@ !@` ?`@`@ !D@ ?7` @ !C`B ?`@ !A ? !C ? G? BA{S[@@o B D@? BL@a!`2@?ր@@ @`  B$C@?`  !@ ?@@a Aa Ao@@BA T{NSO[P_a@ BC@?` bB9 zE?`@ !D@ ?7@h`@ !@@ ?O# @9@9+=B?  99 F/=D?|>t3=k?7 P@?` @; BhA@?@b` @R?ւv@v@9B|A; BC9@?@`@ G? G?  `6 R_{!RS* :G?*R_1TB2*AR?1SA{¨_{ !8ES ?5[*@6@6[B*SA{è_ :G*!R?1T2AR*?*[BSA{è_ :G*!R?1`T2AR*?/&{ !8ES[ ?5v@* :G6v@6`@aR?2`@R?`@aR?2`@R?*SA[B{è_*!R?1T2AR*?v@v7*!R?1T2AR*?/& т cA{d@7 cG`? A7@@BҁT{G_֠ G?      1`T1JT1@T 1A!`,>_q!`>_`3_` 3_{S[c#@b DB`3c@R?@@Cv 3R?c@cRB"? B,C@?@7SA[BcC{Ĩ_ 1`T1T1cc 3>ccCBSAB4[B!R{Ĩ#c`,Cc3       { |B s A?`? !C ?`? 0 @{¨_֤ $DA@c'!`44R?    ZF ) ! A{? {!0E_ !0E_   A{? ҡ9 gA0E{b`_ TҠ9g|g~ eT _|g mT_TxKTB@_֤ $D{c'A@c@!`4 5R?      {}Rur0@_kT@@b! @T{__֤ $DA@c`(!`5@6$R?֤ $DA@c`(!`55b$R?֤ $DA@c`(!`56$R?{SҠ[cҷ@@ks@@z V@S@v @@@Ҵ@ @ @ @ҫ@7 @ҁ@r@ # ? /  sAGHIR#J?K/LMNs @7l7@ @i )m @Ss h @u @bBvZ @` @kDsE @u[BcCSA{Ϩ_   ѡ !A{S[ )"@ !lF ?ր@TT A@@BT{D)SE[F >EcARB EkB6 zE@?@fEƀ7DC@7c`7BARB7?֓@TO` @aC9b@ <@T@BARB8?cGkH`@KOcy =c&@{ CAB`'?a&@)? TRA@9!Q!?xqHTD9B_Td@@BARB8?K@OCҧ DFEDBR7? GckK?`{S@`B@b @@ @@" @T@ ;`@ `t@SA{è_A @T? t $Dc`(A@c`!`5`9 R?֤ $Dc`(A@c`!`59 R?@@{}Rur"0@_kT @"@ @_T{__֤ $DA@c`(!`5@6$R?֤ $DA@c`(!`55b$R?֤ $DA@c`(!`56$R?   {S?HT[ @ !8E ?O )}RurB9~~ta2=@7sBd[BSA{è_֡ !lF ?֢:@a !@2 BTF)B@?}RB9ura27tT`@@ ` @@`@@`@@`B[BSA{Ĩ_[BSA{Ĩ_SA{Ĩ !lF ?:@a !E`6@ a! !h@ ? `@{}RurD0@kTC@D@c @T{A$__֤ Є$DA@c`(!`5@6$R?֤ Є$DA@c`(!`55b$R?֤ Є$DA@c`(!`56$R?@{}RurC0@k!TA@C@! @?T !){!A$__֤ Є$DA@c`(!`5@6$R?֤ Є$DA@c`(!`55b$R?֤ Є$DA@c`(!`56$R?  B,@{c@?ր6@{¨_ G?   BG{c@?ր6@{¨_ G?  գ cG{c`?ր6@{¨_ G?   cB{c`?ր6@{¨_ G?  {C|@== cHA`?ր6@{Ĩ_ G?{C|@== cE`?ր6@{Ĩ_ G? )A{#@7/)<< cHA<<`?6 !A@7@"@cҁT{G_֠ G? G? )A{#@7/)<< cE<<`?6 !A@7@"@cҁT{G_֠ G? G?{S[c@ JB?T@xv BpD@?s?ַ_T@ cA`?ր@h78 !PA@ ? RSA[BcC{Ĩ_?֢Tҁ@ң cC`?@R Є$DA@c)!9@:b R?C{S[ c k !A@c {KB"@7`? T~@# 9C#=<_=BR=<< ?*@7@`?B3@_HT~@s`a~@=BR<_== ?֠@ !PA ? R !A7@"@cTc@{GSH[IcJkKC_ң cC`?`R Є$Dc)A@c`!9@:R?֠ G?֤ Є$D{c)A@c!9:R?   "|b |__   0_   @{ BD @? @{¨_{SA B @@? cA`?@SA{è_BѢ BA{CS@@A !F ? BD@@?֠ A@@BT{A@SB_֠ G?Ѥ ЄA{CS@A BD@@?֠ A@@BT{ASB_ G?{S@Ҡ !F ?SA{¨{S@ !HB ?SA{¨{  {S@ !F ?@SA{èd   {S@ !HB ?@SA{èK   )AC{C $@7+)<<<G?@qT @9"Ҡ?qTT;A?A G >G?@qT*R?7;A?AR@R? @7 !B ?@ 7 !B ?֠ AA@BT*SA[BcC{ƨ_;?C G?OC !CCCJ E {wD~~~~"= ?*Z?`?_k+T c@@R`?րJBqT Eb?ր7JBskMTzwa@kT!R ?1Tx`@AR ?1T#R@9 cD"`?֠ AA@B!T !(G R ?փ @ @ 8F@{ @S[cksc- BA  !$G@@@;[ ?JBa!.!*Aq T/|@C!c?!T  ֎A" 9S@ ER#?@7@"OC R ^<^<^<^<^<^<^<^<^< ?ҠR?֠JB{#kM T`@` @=?֠7a @`@ $DA@c*!;=BR?     !B ?JB`"7?q- TCJBqTRR 9BR   `@@7 ?`@z@7 ?֠JBzs"kT64@ 4[@RR kT?@!T @!G?@qT@R?7JBC7RqTc AH@BAT !(GR ?֠ BR $DA@c*!; <R?֡ !B* ?T G?      {[ !F ?֠c AS ?G@R? TTSAcCR T?@?`q$IzT?q$Kz T*cCSA[B{Ĩ_SAcCz9RSAcCO{S# BAA@"R# = !P@<= ? cEҠR`?ւ B`CA!.@?b @A cB!>`?[( B D??qT *B?`@ !TB ?*`@7 {DcRkBB>`?v@ :G#R@RcaR*3 9Bky;{yy?*R*B2?RA ?֠ 4 7o@y 7@y!R?jT G vB B G @`@`?TT @Ҁ??BBR?1`T`@?`z@9@6&6Oc `?֊c0 cD@`??c^c^k_x RZ r;@"!RB'?k` G?HqT ! X`_ `$_Cb BA{Sa[ cs 5RC@7#R cB `?7K@4c *7x D*b$k ZRy"RB`1?  @@9"*_HqHTC{b"#R{?ATcJkK` A7@@BT{G*SH[IsLC_c cD*"RB0`? G{*?* 7B9B9! S!* kaT? qT!$Q!|S! !x~ӵcTd@yZ"$kAT`@9a @9S* !B* ?kHoH{H` AWH@BA T c-*SAcC{Ũ_?@,q T@!Rd D"B9?ց !B* ?kHoH{H*?*6#@ Ea !lF s9 ?a@p >E?9SA{è֖ ֪B{S(@@@@C@kT?qTSA{è_SAR{è_B@Rcb B Du@@?ւ BL@!=@? @R@a!`B|bhbc cB`?@t RSA{è_ր G?{! >S 2C?!R4!@>?AR4!`>?aR4!>?ցR@4!>?֡R4!>?R4!>?R4!??q!pSSA*{¨_Cc cA{S[c"? @b@?֘j`8 4s{ {Bk`?k`8 5z Z A5bR   `n@8qT @)@?֔ #@?qT`n@'@`J ,an"??֘k`8@4`?k`84k 8|`n@8qT@c cDB@?R`?֟qkGןsHkGqsHןa !A@"@cҁT{CSD[EcFC_|k 8R` Gks?  {sC>g A@ ))c6 F*K ?e ХDR"B3?b B@a!@? V` D B? {G` A# ZKC` F7?-5# R@?#F9q@z`TO#*9#.9AR?S?#29#69#:9????@@?kT@aR@??@@B#.B|@`?a`_@bW=#6>=C[@_@#2[t4#*  <#:<!!#@'+;OsOC9?7@* ?Ӏ? 5T[@ql$TqL&Tq$T q/Tq ,T#j94'@s #n94s cA1T#r94G@s qTOA4@A4s@!@94;@|~B! #RcAh"BRx!O1Tc|~a Oh!@j4*b|~*?q@z_ T!!,@?@qT$R_!Tq@zcTR RO3@"RB`4`?֔OAҀ43@# Rsc,@?OAkT3@RB`?[@Hq TcA9@!Ҡ$6aGB#>A>.f!5@Rɩr_k4T0@9A45 Rg#{[@!Ҡ$՚C6 s2C#!! `?ֿ.qBz`:4!!@`?]4!!``?`a4!!`?b4!!`?@h4!!`?֠>4!!`?>4!!`?@g4!! `?֠f4=4kAQq(5T`R[[@@$6K@* ?3@R"B@?`QAR4q`R [@a !HB@ ?C"ba@!|›?LT@R:s@@=BB|;{Aazj<<>?==sC?{D"S@=p?x"P?`4a !B ?ր@'4GGGGGGGG` AG@Ba\TC>sE{ƨ_[@@q T T q T,qTD+@#!! ?cD+@;@!! ?*aw@C9>AQQB!_dq@9wqHTc4cQK@[@ ?3@*s@@ ])C9"@B R?֤[@Hq!TD+@#;@##!! ?*K@[@ ?3@*s@])"@B R?օ#&#"##D# +@!###!?K@*[@ ?3@*s@@"@B@ R?dC@!c cG!@BW`?4#v9#94C@W) !A>.f@Rɨr_kT@yqTgRb B D@?b BL@!@? G?a !(B ?ֽ @ RW@?@`?#4C6qTRkb@9 qg\@9 qC9VRk4@R[XCE9@%6R[cA9[@$6#z9`4#@)O@c!`S?q`+TK@[@* ?3@qs@@B`])@!_A!cA*C9 BR#+?[Rk5[@ Q?4qT $6a?=<#?nnfRs"a>=<#">nnf@RAfr_kT"?=>nnf@Rgr_kT"?=>nnf@R!r_kT"a>=<#&>nnf@kRAr_k T"?=>nnf@+Rr_kT"?=>nnf @y R_k@T"?=>nnf @y዆R_k`T# aA>A#>.f"@ R r_kT`AA>.f"@ R@r_k@T`AA>.f"@ Rr_kT`AA>.f"@ Rr_kT"@yR_kaT 8@9 5 !|D ?b BC@? cF`?b BL@!`@?5c;@ Ox&a?=?nnfA@RsG @ 6 @kEK@[@ ?3@*s@])@BR?uR@#RҠ5a?=?nnf Rs R[`R[h R8P@9a5o;wl`Ra?=?nnfs@R Rw[P@9!5 Ro#@Ra?=?nާnfA@@95Rs`R (@yR_kTX@95@Ro H@95@Rw77@O@ ?ۀ?!T@qtT4Q R}H@95`Rw"R` G?3@RB ?GGGG{S` A[*@@Җ2@u@a !F ? Bc#BB?a@#@`7A 4c@ 4@R!k T"@_kATa@!@a"@9" 5 @R@@ @b B`C!@@?` @a !(B ?րF@u e Dd@RB? Ra !A@"@c T{DSE[F_C5@`A t@?`@*?OzT@!F@e D!.#@$!RB?RR@ cB`?b B`C@?F@d DB@!R?RF@d DB!R?Rb B`C!!.@?` G?   {S(@` C@?d@xkT@ !E ?֠7@SA{è_5`4 @}4 R9@SA{è_@`F@B@SA!R{èp D*d A{S*[Rcs(@D@E@x DB@t@@?`R+yqT Bky 9G@CCRbK;*B|@ ?qlTq @zTR!Ҁ?qTRbKQ;*B|@ ?qT@{ F@*R?k TkF` V @9 4A !E ?֠`>@B@f@B BF@?*q!T@b B,@*@?֠@*b BXG@?qT@b BA@?֕j@ 1` T 7@B BHE@?*qT>@@?qT@B BC@?,Bc@ !+db`@ A@@BT{D*SE[FcG_@6@9 ?q`F@*C cDB@4`?ֻ@a !EsF@j@ ?E D*RB6?`F@C cDB7RR`?"}ks B B@@@?*qTY 9D*`F@jaRB6 ?֕j@kHsI@A !dD ?ֿ`F@D D!RB5R?֟`F@Y 9DB5R ?'@qT@ dD` B ` (BZ ZG@ ?'@kKT*@?@@"?땃8?iT X{ M!|R?g @pa^ ?`F@QRB6 ?@@ ?@Q@ Gks ?  ! Q{cS[*@@ A@@?<qhT-Xaxa C cB7@`?q,T7@A !A@"@cҁ4T{BSC[DcE_C cB`?qaT@Q RB BHE@!@?qTa !8D ? R@4cg R~_O_@v N@RR_|_|*@ *@ss?q@z qTB = =@ Rrzb BA C@?qT @ @9@4B B`C@?ր RC cB`?qATc cD@`?qAT@4    Ra !G ?"R>r>'>#=T" Rs dg@7Ot@mx9~?{o x4A R|QB 4u DC#?qaTF@A`3RY 9DB`8 ?b Bl@@?qT3@7@@a !C ?rATg R5c c AC@#`?qaT@q@zTB BC*@?qT RB B@C@?qT@ R@B B@x@?ֿqAzT@kTD ЄG#C? @@A !dD ?@ Ҡga~~@@qTqATX@7v N@RqT@*? kT@*b BxA'c c AC#`?qTc c AC#`?qT @>@(GA@a7b BG!@?*q@T@B B D@?<Rk@T&4G DF"|@9BRA? RD ЄG@#C?@Bx?q @zT/!4 aL!g_haa~~A !dD ?7@ R~a !8D ?a !G ?"Rr?'F@B8?R" ??qT3@ R7@aF@ @B9R ?3@ R7@W@ G37?A !A{SR"@A !C ?b BG!`9@?֠4@ A@@BT{D*SE_A !F ?d EB9Ҁ?`7Rb B@!9@?D ЄB3"AR?TA !B ?3@@@A>.f4RR @ŊRr?k@T4R@ G3?{B B DS@?b BL@!:@?֠ *B@ 06[ ҕ.@`jA !F ?c cD`?@~@6a !PA ?c cB`?F@a:C cDaRB@;`?[BSA{Ĩ|w AB:?Z@6a !PA@ ?`B B`C!.@?B:?A6@[BA !(B ?֟*SA{Ĩ_@[B` G[?B BA{S3C@B B D@?b BL@!;@? 2@*A !F ?e ХB#cB? `jB<@ TB<` TbB!T Td XD?` 4 @#@CRd Єt@?`j@@F@E ХD!.$!RB<?RTd XD? 5 `j@@c cB`?`:A !A@"@caT3@{DSE_B B`C!.@?Td XD?`4@@`j@ G?` G?{S7[S|@A !HB ?c cF`?b BL@!@?@T[BSA{è_֢C!sb@gb BCa~@?[BSA{è_{B BCS@?B B@@?3R5B*B BxD@?B BE!@?d ЄBRB`! ?a !C ?a !E ?*SA{è_{ A !G ? @B{¨AR@P D{A !G  ? @{¨!@P @{!RSt &F?AR?@SA{èp J@ {!Rb B$F @?a !$G ? @{¨P @ @{¨p B@P B   {S*b BF[c@?`4@v 2Cszs!?`5*SA[BcC{Ĩ_b B$F*@?d B!? {a !D[u е:FS ?֡@V vBW @ ?*!?֡@s!Xs@SA[B{Ĩ_{St &F[!R?AR?c cA`?[BSA{èP @ {!Rb B$FS[@?a !PA ?a !D ?c cPGT ДvB*`?R!?A !C ?B B@@?[B"RSA!{è@P A{A !G  ?@a !TB ?* @ b{¨p C {B Bl@S!R@?@`b BFAR" @?֠4A`A !A ?b BlG@?@@SA{èP @b B$FAR@?c cB! `?  {A !G  ?@a !4G ?@b?g @{¨p C @p BP C {S!@?q` TT? q T?q T!4?q Ta@SA{ĨP @? q T?$q@T?q Ta !D[ ?`@@q-T~@W vB@!P5*!?T`@SA{ĨP Fb@SA{ĨA@p RGB@@[BSA{Ĩ_A !A[ ?`@@qT~}w B@!b@!B@Bhu"?@T`@`@SA{Ĩa^p Ca@SA{Ĩp "@`@SA{Ĩp CSA!{ĨP @ {!Rkz Z'FS[cs@?A !0@ ? 7\ G*[ {D?9@A !lD ?*qT4xДb'.SR  *@?s*`?kT*B`??!Rp "@B@_9SA[BcCkDsE{ƨc cB! `?{kA !AS[ ?b@u Bcv ֊Bz Z#Fs\ F[ {B?b@!?bBa @c @x@??!`?R!B@?b@!?bBcCsESA![BkD{ƨu B{A !CS[cks? ?A !@ ?`4 RSA@[BcCkDsE{ʨ_a !B ? K@S sG?@`?G@! @C c`D!@`?O`?@D ЄDRB?b B0C @?@a 7@ 4O@B B@!9@?b B @x O@@?A! ? B BA!\ МC@?` F3@ B"@q7R` xGv҅@; k`ZzTkTzS*kvҀ~@ Ҁ?3@`?!!@?7@K! 4b@?;@ ?4?@ c cPG`? `3b"?@c cPG!``??@a !E ?@SA[BcCkDsE{ʨ_`4w2bR?@!O@!c cB`??@!O@*d B!??@!O@!c cB`?` G?B BA{CSA@A !G ?@D DR"B`?*@A !(B ?5B B$F@?c cH@`?B BDR@?B BDR@?@ A@@BҡT{ASBAR@P D@ A@@BҡTA !A ?@ G? {"B!c cH@W DS![ `?ֵBR?6B BER@?A !G ?R?jC cERV ֢@`?֢!!] @A !Eu B ??!"B ?ց@?!"B@ ?ց@?"B !?B BDAR@?! N@Kc c@"B R`?`4B BA@?֠4R?@[BRSA{ĨP Db BB!!!@? {A !CS ?A !@ ?3R4*SA{Ĩ_a !B* ?@B@?a !E ?*SA{Ĩ_` G?A !A{CS"@A !hC ?C cEB`?C cAB`?B BDAR@?A !(B*@ ?@ A@@B5AT{ASB_֡TA !A ?@ G? ARB BA{CSC@b BF@?֠4B B$F!R@?**@A !(B ?@ A@@B45T{ASB_B Bl@AR@?<ggj ~;g`5x@ G?֡TA !A ?@ A@@BATc cB!!`!BR`?{B BPB[U &FSc!R@?*AR?aR?5B BB"@?4A TU еG?C c`D! @!@`??@5E DB R"B#?֡!/a TU еG?C c`D! @!@`??@5E D!R"B#?֡! /B B@@?b B @@?B BL@!! @?֠B BA!@?A !F ?d B~@!Ҁ?k!T[BcC!RSA{Ĩp "@c cB!"! "`?d B!!"?d B!!@#?` G?{!RB BPB @?*b BG?q@?A !G ?!Rp "@B@_9 @{¨b B7C cA{ C_x@S[ckY9c3B@a@g҂!Rb BFz@?`4AR$#BA !A* ?b B @s@?B BL@!!`$@?֠B BA! W :@@?A !G\ М@R ?[ {wB!@?9a !D ?B B`C!.@?!@ B ` A?L5?*!`?*?`@ Ag@@BTsR{MSN[OcPkQ_#@@9qAT@@95?L@@9qT@@9qT@@9qT@ @9@4  S9@?@@@?ր56[@  @qT6[@ @qTB B$F!R@?h@ G?A !G ?@!B B$D! $9`@@?`A !Ag@"@aT{MSN[OcPkQP B@ Gs?` G? {SA@! B B$D9`@@?`A !C ?A !@ ?ր4SA{è_@B B C@?4@"c c@B%`?@B B$F@?@"@_9`@9 $_q@B B$D`@@?`@a !E ?SA{è_!!$ B BA{S[c k s @@/b B @@?B BL@!! %@?@B B`C@!@!%A@?ց@#O@;@~A !E~< ?D Є,D "B &?C cG`?zr" BdAxf!+wZ@?ր@ @@A97c c`DR`?@c@5" BE9R@?*5A !F ?A !(B ?@ A/@@BҁT{F*SG[HcIkJsK_ `@D DBR?`BD DBR?,`BD DBR? G?@ G?{!RB B$FS@?A !G ?@@99a4@9!`@_qB B$D!$!@?`SA{¨_{S*A !G ?7a@R?9@SA{è_A ! A* ?b@_9@9 $_q`@B B$D@?`B BDAR@?@ RSA{è_!!$A !A{CS"@A !G ?!RT@B B$F@?D Є@bR?*6@ A@@BaT{ASB_b B @@@? G? !RB BA{CSC@B B$F@?A !G ?@D Є@R?*6@ A@@BaT{ASB_A !C@ ? G?B BA{CS[A@A !G ?!RT@B B$F@?D Є@"R?* 6*G`6@ A@@BAT{ASB[C_b B @@@?B BL@!!`&@?րB BA!'@?*%7@B B@@? G?@ G?B BA{CS[A@B B$F!R@?A !G ?@D Є@BR?* 6*`6@ A@@BAT{ASB[C_b B @@@?B BL@!!`&@?րB BA!'@?*7@B B@@? G?@ G?   {B BAS!R@?~5A !G ?A`@A !F ?B B D@?B BL@!!&@? B BA!@'@?B BpF@?@@SA{èuB Bl@!R@?@`@ G?  {B B$FS[!R@?A !G ?V@B B D@?B BL@!!&@?րB BA!@'@?D Є@R?*X6SA[B{è_[BSA{è2@ G?{S7A !G ?!Rp "@B@_9SA{è*A ! A ?A !G ?@9t@9 $?q@B B$D@?֠@SA{èP B4Д$ {A !GS ?!RT@B Bl@@? `~g`5yB B0D@?*SA{¨C cB!!`'"R`?   {!RB B$FS@?A !G ?@B BDF@?1T*SA{¨C cB! `?{A !GS ?!RT@B Bl@@? `~g`5yB BF@?*SA{¨eC cB!!`'"R`?   b B7! .D{Cc^`?ֿv1T`@RB>`?` @! !G ?` @! !|E ? & DFce:PBR ??ֵR G?  { @ ! !G ?` @! !|E ? `@! !G ? @{¨0 *B{c*" B DS*[@?" BL@!?@?֠AX D!v R?`@@ ,B?`V.@qw"t&Ry 6 7k`@,@! !F ? : ZB+9 9Fb?BB ?_HT@?֠5@9@6W 6! !F ?D EKR?֕@@*?*8 6@k-T`@"# cDB@AR`?kD   `@V f@?` @! !C ?` @A !F ?76` @B B E!<@?` @" BD!>@?` @" BF!2@?` @" BG! 1@?`@B97` @! !D ?*?47SA[BcC{Ũ_` @" B@!.@?` @! !E ?` @! !A ?` @! !8G ?` @! !F ?` @! !A ?` @! !pA ?֠RjT` @A !C ?ֱkDkDSA[BcC{Ũ_!. R?` @ Gk?  {S[cR(@@@W f@*?@~@`@# cA`?* 7?*SA[BcC{Ũ_@! !B@#yF@3 sD ?B!R`?֟v1T@RB>@`?ր @ ! !G ?ր @! !|E ?֟ @#@#@{ (@`@` @ @{¨0 A {S[c! !Ae@3$@aW)!?ATY 9F#**RR ?qTR ?q`T! !A@"@ҡ T{B**cESC[D3@|@ @9hN?k!T@@y @y?kT2R ?8q`T*#@9@qaT'@9,qT+@9q@T qT/@9qvS;@95G@9qAT'@y2G7*/@9qvSQ!?qT/@9qvSqT/@9 qvSqT/@9qvS G?$ $Dc! c.!`b R?   {S[c(@@ P$P @*F@*tH6 *BX 3C]6@tH? 4?a @a@@"F@$ DB!R?SAR[BcC{Ĩ_`@V f@?`HA !HE ?5? RSA[BcC{Ĩ_֡ @RF@"R`HA !G ?֠{" B DS[@?" BL@!!@@? 6 Du2@t*R?" B`C@?R?@9?9_q!!A !B ?c I$ ЄTAaJ@?ր p@4 @!aAB96aB9B5b!2a9aB9B0 !2c.cba9SA[B{è_s*@`@[` @! !A ?SAR[B{è_@ G?{ S[sc- A+@@Ҡ@`"@96@ TT@V f@#7 B'8 A+/#@@@@s?@`@?q T?ր@3 TO@?6#H'H+H/H@#W f@'?@R`@C cA`??7#H'H R! !AH"@cAT c-SA[BsE{ƨ_րG@"# cDBR`?@4@G@AR# cD"B`?!R"9#H'H5G@aT@kT"B` !R# cD`??#H'H+H/H#H'H+H/H4@T!RB@! !B@8 D ?B!R??ִ@v1T@RB>?ր @ ! !G ?ր @! !|E ?֟ @#H'H+H/H G#'+/?  { H! !(B ?` @ @{¨ @R{¨_    {! QS(@?<qTSA{è_`.Xaxa ր@@ Ҡg Ra~~_SA{è_ր@! !E ?`@! @94 B`C@?@@ R@@@ R@! !G ?c R>g@~_@#_@x7c@R Ҡg! $|gR?@a~}#~ T R__@ Ҡg@ ~" BDy@?! !8D ? R@@ R@R#@4C@q TqT @@(@94RC@ 0T@y?kaT& DF@  BRA? R@@ RS@@kT@*B B@@?4 Rx@@ Rt@A@a7P@9k T@" BhA@? Rf@P@9@ R`d@RkHTGRE @ @$@9{ !FS[7 D ?jt8?`tS9@SA[B{Ĩ_tjt8?@9@SA[B{Ĩ_{S A[CcPkst*@@5 еF< D; {gA: Z3@Y 9E@?4B)x*@xqhTqT ÚaTq`ThqT`F@RB ?ր@?@5@@# cdE@`?! !A@"@cT{BSC[DcEkFsG_q TqTRk@T@! !D ?@ ?ֿ@`?@! !D ?@@@@?@! !D ?@# c0@@@`?@! !dA ?* G?{ (@`@! !D ?`@ @{¨0 nF! !A{S"@ !C ?" BG! @?4R A@@BAT{D*SE_" B@!9@? B"AR?T! !B ?@*@H&?T@HF?T@Hf? G? {S[k(@5@@94`F@! ! G ?qmT" BF@? `*@4! !E@ ?@9A4B94B9a4B94B94B9A 4B9`4 @97# cpDaRR`?*`F@!a4caR8 DB5? @qMT B7W FR (B; D6s?*R?Ra@"X{"M!|›?g7@pa^ ?e@`F@*"@aR?;@ ?a@?5V?@ ? @Zk TsE/" BF?C@?u*@"@1 T 17@*B B@@?ր4`F@ c@ B!daRy*B c:? RcCSA[BkD{Ȩ_ @@u@95`F@# cDB!R`?SA[BkD{Ȩ_`F@# cDBR`?R! !AR ?J`F@$ D!RB@?`F@# cDB!R`? @! !D ? @! !lF ?# cD!RB`?@`F@?1 T? 1T?1` T?1 T? 1@ T?1#c !c$ D!RB@?`F@*BAR?֠@! !dA ?֠`F@# cDB`!R`?`F@# cDB`!R`?ֻ@" BA&@@?֠5`F@&@BAR?`F@# cDB!R`?֦6G?1 T?1T? 1#c !cc`cc c`c cC " BA{SC@" B D@?" BL@!@?[c@J@C cD* еb0`?ֵ@2@?@c9b !F ?W Bc#? `"B<@TB<TT$ ЄXD?֠ 5   `"@@C cB`?`U! !A@"@caT[FcG{DSEC_T$ ЄXD? 4@B<`T"BT#@CRD t@?@ Ӑ!( T`" B`C!.@?TC9 9[D ?4@B@ TC@C@`"@T ?ր4 @C@A?@CR$ t@?@#Ӑ!TAa)C@@ЀF@ D!.$!RB<?C@R@ЀF@ D!.@$!RB`?C@R}@ЀF@ D!.$!RB<?Ro@ЀF@ D!.@$!RB@?R` GC? GC?   { " B @[@?" BL@! @?S` O*!B@"~a"~06.@ !F ?# cD`?077 AB ?%@6@`^ !Ft ?TF@aR cDB `?SA[B{Ĩ[B?@ 7! !(B ?ֿ*SA[B{Ĩ_ G?     BA{S[ c k @@7" B @@?" BL@!@?c@8 E?=@O=?N @~RB~<? $ ,DB &? cG`?vf=`*O!+ BdAt w@? @C?` B`Ba"@?`"# c8C!>`?# c,G!`?*5a"@b&@# c8C`?`@! !A ?! !(B ? A7@@BҁT{G*SH[IcJkK_ BD@?c q`T`@ DBR?`@ cDB R`? cdB`? G? G?  !A{SR[c #S 34#@/!R c CsB6 2C`? DF BR ?!aAa?`59444 !F@ ?$ @?5# cG"RR`? R # c@@!@ `?R !A/@"@cҡTS@{FSG[HcI_ !(D ? G?{RR# ctA[6 :F`?@SRc8 E7 D ?֔!*?@s"!hsSAcC R[B{Ĩ_ A{CS*# c G[c@'RB `?֟1 T D*? qTTq@TqT" B @k *s @?֠!58 G;: Z@9 9SD   @?* ??*!?{<59Q! !,A: ZwA ?9Q!??1#T*@?5 B D@?! !L@!" @?5!: Z@R9 9SD !HB @@?* ??4a`@@ ?@v@?@TvCb@!Bb?@` 4q!T B@`R *@?q A'@@B!,T{ESF[GcH_! !H@ D ?**? qT BTD*@?e#`!T^R " B C*@? !A'@#@ҡ&T{E[GSF! $cH0 B@  cdB*#`?#@R# cF`?@ B D7 N@@?!!?`"#@ cD`?!`!?#@` R ! !|D ? BC@?# cF`? @!`"@?`e A'@@BҁTkIsJ{E!SF[GcH֠R l cCB(`??qT8 GA? cdB9 93C`?!! ?4!! ? 58 GA? B`C R @?9!? B D@?! !L@!" @?! !,AR : ZwA ? |D C F C @@ dB `C* JB@?ր4 @<?֟@ T @<?֟@T!@$!P!?qT!?*@@?@!#`?@!`?@#< @{}@?"@k;!B"?*@?5kIsJ@; @ ?@@?@`? @! #@? @;@ ?@@?@`? @!"@? 8 GA?ek s G?k s G?  {B$ c GSR`?ր @qTT q Tq@ T4qa T@SA{Ĩ ~E q T$qTqT# ctARR`? cCB!`?" B(E!@?ց@ @qTc D[R!@!!*?ց@B @kkT[BcCSA{Ĩ_SA{Ĩ .Aց@SA!@{Ĩ G# ctARR`? cCB$`?!SA{Ĩ0 *Eր@SA{Ĩa^ Dց@SA{Ĩ0 "Cր@SA{Ĩ D# ctARR`? cCB!`?" B(E!@?ր@@?q Tc E[ B*@!Xu?ց@!@!OA?ր@@?kT{S Д"C[!R?AR?# cA`? B|E@? RSA[B{è_{!R c CS`?! !PA ? cG`? !C ? B|E@?@RSA{¨_ !A{S#@o!R c C`?" BAc@?ր 5# ctA[cRR`?G@ S@9[@a^c@a^k@a^`@a^;c= D @Bsm{m`<@?!?ִ@k@4 Д"C! ? @q?!B)?k@! ?@q?!B)?[P RcQ !Ao@"@c!T{NSO_ !,A ? B|E!@@?@R G[c?" B9 cA{_AS[cD(@a@o c C!Rz+`? lEARB?*! !A ?֠" B @ks@?" BL@! %@? BA!0&7 :@@?# ctARR @`? B`C!. {E@?R B A: ZB?L5~@?`?A@??@kR RsS !Ao@"@cҡT{NSO[PcQ_`!c @9qAT @95?րL @9qT @9qT @9qT @9@4  S9A@? @@@?ր56k@  @qT6k@ @q`T !,A ? B|E!@@?@R Gks? G?@ A {!R" B0ES@?@` ЄGARbB ?A` !A ? B|E@? !(B ?@ R@SA{è_# c@@! `?@0 B   Ca BA{S#C@" BB@?` BAA@? BPE!R@?" B\@#@?! !B ?` J@ ?Q XFR?* @ !(B ?5? !A@"@cҡT#@{BSCC_ !(D ? Є$DCc`/!%%⠀R? G? G?{B &S C[6 rF!?B@&?!?? BD@?4SA![B{è" BG!@?# ctARR`? BA@? c@A`?SA![B{è  cA{! !B[c`@ ?S sCs !B &`?@`? cdB`?Ҡ !F ?. B`C@?@9# cAq+B`&`? Ba!`>?@ Bk: ZB.9 9A+c&A@?B ?ր6@b@9@_q3@?@kH B|E@?@ c@A`?" BGA@? !(B ? A@@BTSEsI{D[FcG_ Gk? Gks ?   {?S[VD?@T@Ѐ*@sb@g" BCa~!@?SA[B{è_{" BBS@?" BG!@?Sb@a@SA{¨ $DCc`/c!%&R?{ cCS`?" BB@?" BG!@?ֳSA{¨_ $DCc`/c!%R?{ @R B|E@? R @{¨_{S" BtB!@'@?@4" BG!@? RSA{¨_ cG"RR`? cdB`?cc0c@B DAR? C BA{S#CA@/Ҏ@ DRB'? DF BR(?" BtB@?`5 cGRR`? A/@@BaTC@{FSGC_ !(D ? G?{SW!T@@9q T[J D@RB@(?! !B ?  cB! `? @ R HAB@r?@$ @?@5 G"RR? !(B ?[B@ cC!B `? BD@?ր4RR?RSA{Ũ_ !(D ? GZ B@@!)@?RR?RSA{Ũ_' B@@!(@?'@ G?{ @! !TB ?|@ B@@? @ R{¨_{S[c#4 Gy@!R c C`?AR?aR?R?R?* @* T@**?#@RSA[BcC{Ũ_  { @! !4G ?@b%?g !D ? @ R{¨_ {Sw" B0E!R@?y@ BF@?* b !D ? RSA{¨_ !A{CS"@W c C!R`?@ @R?@7 !D@ ? R !A@"@cT{ASB_ BA*AR@?! ! A* ? B|E@?@R G? !A{CS"@ c C!R`?@ @bR?ր7@" B C?q@? R !A@"@cT{ASB_ BA*AR@?! ! A* ? B|E@?@R G? cA{CS*[sa@ c C!R`?@* @?֠7" B @@@? BL@!`)@?ր BA!)@?@ B|E@? R !A@"@cT{ASB[C_ BD*AR@?q`Bz T BA s~EAR@?! ! A* ?`?@R s~E!.`? G? G?   "RR{Sk" B0E!R@?y`@ B@@?RSA{¨_{SW!Rs@ c C`?a @# cC`? B|E@? !(B ? RSA{¨_ !,A ? !(B ? RSA{¨_  {SR[ck# c C!R B`? B@AR7 2C@?qsq`T**?@?5 @* chC*`? *" B C!|S@? RSA[BcCkD{Ũ_C cA{S##a@#R B`C!.@? BC@?`7@ B|E@? R !A@"@cAT#@{BSCC_ !,A ? B|E!@@?@R G?    !A{S["@Ҡ" B0E!R@?y c CAR`? BDaR@?ր5R@ DC?*7" B C!R@? R !A@"@cT{DSE[F_! !9 `# ЄlEb>?t@?n@ G?? !`@  ?ր !E ? BAaR@?֠@a@ @!@@ BPD@?֠@ @@SA[B{è_ !(B ?SA[B{è_ G?   { @`@ !D ?`"@9 !(B& ?" @{¨_{ @`@ ! B ?`"@ @{¨ *B{ks A@ A\@@7 @ !DF ?֠'6 !!R`?֙T@?*qT @ !LG ?*@ clB`? 7#@ BD@? cD@R`? !D ? !\A ?*"|@!_qTc?xa!eaT@ cC*`?*@4 BF*@?~b@'@#@ } !TC;~' ?|g@` T !4G@ ?@@ cAA@`?h@@ cA@`?ր@ !D ?֟'#@ !(B ?֟9CA#GAKAOASAWAkAoAU !(B ? !F ? !(B ?? !@'@ ?` !TD9` ?ֿ Є$D#c0a@c`!1 R? Є$D#c0a`c`!1@2 R? Є$D#a`c0!1BR? Є$D#a@c0!1R?CGKOSWko G?C{CS !Ab@#@@_q@TR_ qT !A@"@ca T{ASBC_@@n !G ? R[a! 3 2Cv @?4a!`3?ր4[CR`@# BA@@?@/@9q)T ` G g ~T,T@ !tD ?#@#@`@ BA@?@@95 G g }T~ T@ !tD ?[C R#@ G[#?       _{ a"@!@ ?`&a"@R!@ ?`aD! @ ?Ra @{¨_{ $@a"@!4@ ?& @{¨_{SDB$@@?bDa @B@@?*aD45"(@R@?`*SA{¨_!@s@ ? ЄDbRB9?    cA{+*S B0B`@@? 6'9RqT+@9 qATR.@9qAT2@9!kT? qTfA#@9@9@9c  G@@_q?q A@@c!T+@*{CSD_R G?    cA{S"@+#d@ҩ*6AaB)ҥ0@? !A@"@cT+@{CSD_ G?{ !E{S A@@? qTR A@@BT{C*SD_[3}R 2B *?6'9qT+@9 qATR ,@9qT 0@9Bk!T!_ qT@@?qq?kT#@9 @a  kTsVqaT[E@9@?kT@9@?kT[E G[?  {S[cXk@ !A`@#@@?S ZA#B@? BXE*@?֢@RBl@@?*@RBp@@?* ch@*`?[AqT@*4\@*@?@*cT@`? s x[AkTB@? AA@BTSA[BcCkD{Ũ_X@*@? cD#BR ZA`?֭ G?    BA{Sa ;!C@ BA@?֠ sD[c!RB`?ARBB>`? BlG8@@?! @ !tA @+ ?ր4 !F ?ր4@@B@@94!@ c`D`?@# @  c7@R ЄDbB= еC?@ B sN@!@!|!|@? B @@?a!=`? ? B D@?a!@>`?` !E ?  2B3}R JB*?6'9qT+@9 q!TR ,@9qT 0@9BkT!_ qT*R?sVqT !G ?@!@ @!@@ RD?@`@! @@!@?b@@B@!@/ ?7[EcF A@@B T{C;@SD_@b cDB<R`? !(B ?[EcF B$C2!R@?`5 R`2 BA@? !E ?S BCAR@? BG@?* !C ?4 $D#c1A@c!1`2R? DA?* A !(B ?֫ G[c? G?{c@`SRb[B?@ D3s1 C? !lFsB ?c9 !C R79 ? Bq-T AR$L$#@BT4? BqLT !39bRB@SA[BcC{ŨcH97cC{Ũ_x  $D##c1a`c !?BGR? $Da`c !?bGR?@Q{S@Ja@!@ ? !TG` ? !G` ?SA{¨ G{ cAS[*c#e@! a@!L@ ?d@a!<RA?#R~@A)_k@T#_@d@Ra!@:@?d@RaЄ@!:? @)!* 5bb`#`dTn !B ?a@!@@ ? !lFx ?aA?k T` B k T`@K 9D**RbB@ ?֔~}aA#c1`@"ht_ Tv`6h4 !C ? !E@?ր@b@BR`?Kb@B`FAR`?@ "R2N) FRR? cDBR`? BA@?$RR DF**BRd` ?ր@@RB?ւ@ @B@@?BB >E@?? AB@Bҡ TSA[BkDsE{ƨ_ւ@` @B@@?@sK7s" >E?"R BtA@?@%glHR ~r+}x@ ?BB@` @ B@ >E@?ր@b@B R`?BB@` @B@ >E@?BB ZC@ G? BlF{ !A[cs@#@ҕ@?ր3H9>7 E@ ?ր@`@a"#җ`?@RbB ?@#c@ ?O9w@@ ?5S9{@@ ?5@|6Rgc9!@ ?`7@ @OCGc@? =O?|?=T@*6ARc@*RB%@` ?ր5@g9@?@ (@ad(A!R?4@@ ?H@!RbB? !hFc ? !A ? A@@B!6TSQkT{P[RcSsU_ր@ ;H9 6 sFFE/@ c$D`?@@`?3A@6`1_@ DAD@%Tt1 _@!T A@@ BqTvДB DskmTAXsb@ARX3*39c ?ւBA sD@B@?ր Bk,T  SQkT&@RbB ?!R;9`?ր@@#@@ ?`6@RbB ?@E@'@`?֓끹@ ?@cT sFF@bRB?ր@@ ?ja@w@?k!Ta@{@?kTa&@@?k!Ta*@@?kTs c`?֓@?`}R cG"@a*`?``? !`E ?`  PB?a?`@O!R~=<<< 9=<SA[B{è_ !(B ?SA[B{è_ $D#a`c!`R? $D#a`c!R?  {cs@ B@@@@?֠7cCsE{Ȩ_@ !F@ ? BLC@?`7k@qT @!R cDbB `?@F@ cA`?sEcC{Ȩ A;@SSR =@a@|@#@>A=: =|~? = =tC<`@<,=~t cB3?<`? 7`C9@ 6a@;@ cF`? 7[u@&ql Tb@u5;@T@ BC@ a~!xS!!|@@? B @@? BL@a!@@?@ qTzS6 FF2@Rk?R@h@Z BRayA@ere8?֟k!T?@s9k`T@kD`@@97@SA[BF@ AcCsE{Ȩ@F@ A @* cDbB`? R`9SA``@ !(B ?bÀa cFB`B|`?a@5Q @bУ@B DaR@? Gk?{ [ !A@R#@__qT !A_@"@cҡT{L[N_@k B D@@? BL@a!@?S c@@qM Ts|Ѐc /DT 9BOR{|g*b ~B~=?_ ?O@@kT@#oT@c* =||? OBB ~~=@? ?OsQ@A@@  BG!@@?!( ?@@@97@ R6SMcOkP@@@qmT +BRAs?@kkT 9B GS cks? Gs?      {[BqTS *B rD  BAXu` @?`@?`@?`@??BkTSA@ߊ[B{Ĩ_{  !(B`JA ?J @{¨_    ƼA{CS ДA[cXy"@#Ҁ? BDx9@R@?b@9CR` @*bK cE`?` !dC ?*a@9`@! 7 !TB ?`"a@6 BlG@?#?# !F ?a"A B0B@?q!Rǟ*7QBj!TC@9RkTK@9q(To`<4AERk` 8B!_kT ,@9qT#0@9`Q qHTqATbFZqTq TR !A@"@c!T@{USV[WcX_ !`B ?`"a@6 !(B ?H)!R@9@9d&#  BQKB !  bQK ` b@9*@B 6.@!Qb _k@ЀK.` ?jT@R)khT @qTq!TqT`RqT_)G9_@qdQB| QF   )(qiT!R,qT*"[@!RQ8qT!!!!X`+A&QQ?q06_4q@9?jT@`R R@(QqT R@b~b@C@C Ab=bb<|}*vm!!%"RXd,qhT!@"X`"AR,qT!!!@"X`"R@q!T" G? $D#a`c!B2R?   {S BA*4R@@# cD`?*#k !AB"@cҡTSA{¨_ G?C#`O@R{CS !A[ @d@9|||eZ 7CPAqTB c|@Rx`_@Tx`?@A8`TRx`_@TA8T`T 4 ,BRR?6cafb@7b8B|@D7d@g  (A@Bx%$!`c?T !A@"@cҁT{ASB[CC_ @Bx cA#vB`?֢^E)@W kjTK qT ch@*aA`?֢*@cA* 8DR?d@9RAqMT#@`T#@ G#? $D#ca`c!"R? !A{@"@7` @O@RgC<Cz`>A !E ?`>Aa"@x@|A|<>< @{¨_  { !ASsC"@]`?A !E ?a?A`#!@A !E ?7@*@SA{è_@SA{è_{S  A[cA #Ҁ?##`? 6`BqlT:@A6`BkT`BAXu@6 7`@b cDB %!R`?R*SA[BcC{Ĩ_qMT 7CO+4RbBA`JABhuC_T_<?O6`B"kT`BA@`BqMT F4R`BAhu"?`Bk T*SA[BcC{Ĩ_`@b cDB$!R`?־ Є$D#cac@!WR?R!R  {S A[cks F@ҕ>@?< pc !|c TC@c T!<@c!?T?C GRR?8R 8E C {GBR lG ZD C@`?1T7^ ?**q@ TQ?qFzT^R@ ?b*B'R@?qITq TR@aRbB(@?֡]@ ?,1`T1T7@`?1AT*qT^RR@ ?R*bB'@?֡]R@ ? 7.qTR@b!RB+@? Հ@/RRbf@_k@Ё|@@qdFzB9|BK ) A_@BT*SA[BcCkDsE{ƨ_ !lGRR@ МD ?RbcRB'R?֠"@96wRR@ARbB+? !C ? R"9RqT]@ ?@6 !LBR@ ?bB@(!R@?֟;R@RbB)@?֠@ !8E ?@6 !LBR@ ?bB*!R@?o !xC ?ց@>bTb~ !B ?*6f@҉R@aRbB@)@? !B R ?P/~ !LBR@ ? ХDcc@'B+!R?W G?{S[ c@<@*`?ҽ7R@*SA[B{Ĩ_ !F`J@ ?*@~@6 cB`? T`R@* ХD!RbB@,?@*SA[B{Ĩ_ց@ cC`? !LB*sR@ ? ХDcc,B+!R?{S<@w !C@ ?ր7SA{¨_ !LBsR@ ?cSAc@-{¨ DB+!R{S[6<@VB@97R*SA[B{è_֠@ !TF ?qCzTqRjT@R B(G@?@6 !LBsR@ ?cc-@!R B(G@?`6 !LBsR@ ?cc- ХD!RB+?{S<@ !E@ ?`7@ !8E ?7SA{¨  !LBsR@ ?cSAc .{¨ DB+!R !LBsR@ ?cSAc`.{¨ DB+!R {S<@`@ !C ?`@ !HF ?7SA{¨ vB !LBR@ ? DCc.B+!R?  { cAS[c#?m`@ҿw>@? qT`J@* !`F ?*R7 !A_"@ca)T#@SA[BcC?Em{ƨ_ gD?< pc !|c TC@c T!<@c!?CT?C GR?&@ BA!@@?&@ BhD!@@? BGR@?7&@]!@ BG@?7] cE`?7] !F ?7] B D@? cDcѡ`?֟ qTq T~YR' "?q T@]"l *FR/+="+~x?yR@`7 DRBB1?*?sR@ 7~"BB`2R?֠] !C ? Rl !F ? 4 sA4RCR`?֡_?q9 !A ?ր5*`?֠_@9q 9 CCR?֤^_!Rcn" /?֡^,_B`R@cB3R" cD /+. >"`?ַ !F ?ր4 !A sG ? 4@9RBR`?֥@9!RBJ`? !LBsR@ ?Cc/ D!RB+?֠] !C ?  !LBsR@ ?Cc 0 !LBsR@ ?Cc/ !LBsR@ ?Cc`/ !AtR@ ? !G ?* DBRB0? !LB ?Cc1!RB+?ֿ !LB ? D*Cc 1B+?ֱ G?  A{CS[t>@@ BD@@?@7@ BdG@?@%`R@B DB3R?ր@ !C ? A@@BҡT{ASB[C_ !LBvR@ ? DCc 3B+AR? G?  {S BA c0B@@_c!!0`? 7 dD.#?/@ @ ! !C{ G F ZgD {C' !0Csw   @9`?/@!!2@hu`? /@@3@hu`? ! ?=>t@ @v =9?#T@ @A@!3@?`4@? @"@?@@?/@ hu`sBwB{BBBBBB !hE ? A_B@BaTSA{ƨ_֜@?9?#`T_?|@?ր5`jv8q@z`T9?#T@a!&@? 4@ @#.c'@B`'?B9@4R(qAT"9 @85B#@`?֢ Gsw{?  {SB@9b4 BDAR@?`@94q!T !F ?a !_8?q T ЄBA!`4?`@SA{è_SA{è bC ЄB!`>? G? ЄBA!4?` ХBQA! 4?  O{S A"@@o9~~_q(T[HG&h9"4%xf RC @B qTD@kATccj&8!Tq TO# |n@CC<R(R~vA<RR%RDR9' 99999bA9 ^Cn?v=<9? 7?[P@ !Ao@"@cT{NSO_ BxE@?@5@9qTCB9 4QK!G@9҃c@9kTB_ATT?@6z@zA9zA`9z@R`9Rb88!T G[? $Dc A@c@!45&R?{S[cksC+ A>@*@`b@a&@A !A ?`B7Z@@ BpBJ@a!&b>@6@?ր7R@ DRBB7(р? ЄX@*R?*`@7`@a@ BD@?`%7`@ BdG@?@$ZR@BRB8?`@ !C ?`@R BF@? 97 C?< pc !|c TC@c T!<@c!?CTC@? !G@$R?`@ BLD@?`27@A!`:Zp`&@P@97`@ chBR`?@v7@A!@; ֶFZ E[J@@6?`@B ?*`)7@A! <3!ZIJ@C! B\E@?֠@w5$4@  B7 5G@"4@рJ@8Z?*? kT@*!Z ?*@!Z ?@@RR{!RaA4kT ||P%hakAT@@@=@x  @  xGV !F BYAB@~u2a )?`6R@*?@d@"ZR?֡@ѣ@`@cZ!Zb@`?@ 6@AkT@@`A @5@*!Z ?pS !B ?@R!rkbTTRk5T-TAĊRRkTRkR BACR!6R? DR@RBB6? X@*R@?*7 !(B( ?`@a@ BD@?6 !LBR@ ?Cc8ARB+?@ѡ@b@ cHCZ`@J!Z`? %7@A!>(ѻ&Zn@9@ BD?q@R!!@?O@рJ@9!Z ?ր7`&@X@9V6@Ѥ@у@9(`@5!Z c(G`? $7@A!ZF@uqPT@`@!Z G?րh7@A!@Z3?< pc !|c !TC@@ZZ5G@5  ՀR@B!RB<?   ~ A_@BAT*SA[BcCkDsE{ƨ_րJ@?@7 !LB*R@ ?Cc;!RB+?RRArkTET\@QDR!qT"RRArk) !LBR@ ?Cc9!RB+? !LBR@ ?Cc@9ARB+?, !LBR@ ? DCЂc5B+!R?֤ LB*R@?Cc@8!RB+?֖ !F( ?(C(B |? B?֡@`&#Z Z TT ЄXD? 5@ C c7у C*$@hA LB@@!`5Z5@N*R@?@RZ?֠@Ru@?* 7 !(B@ZZ ?֚RRkTpRk !LBR@ ?Cc=!RB+?) !(B ? LB !BJ@ ?*`@J@bR!Z?*6* !LBR@ ?Cc`!RB+?dRa!<@c!?CT?C@RZ A?֠@Z?֠@Z@C5@Z@F5@A!Z`@ BD@?G7@A!Z@љ>@u \C@ ?@6 @ !@G ?@ap@ѷ jFc" A !66?`D7?֠6@@q`CT@@ !GZ ? @ !D ? cG#`?qTR@BBR?ֶ OѠ#R@ < cPC<=`?BBR? '@X@9E6R@BRB ? !dD ?֠@і@9uk T?qBR!Ђ@ѕBZ@?֠@ B@u@?OѠ@ѡ#їR@<u cPC <=`?!R**BB ?֠@с@9u?kACT@ab B`AZ@? C7@a cCZ`? J7@ѡ !CZ rF ?q`B9?< pc !|c TC@c T!<@c!?CT?C@RZ?`@ BE@?M7 BEC(@?N7`@ c`E{@`?֠O7@ cBZ`@`?@P7`@ BE@?֕R@`U7bB@9A#!`c_@BcBR?րR@Rc@BB?րR@Rc"@BB`?b@`@f@9a6R !8E ?`6 !LBR@ ?Cc`.!RB+?֫R$RarkR@BRB@?֟R !LBR@ ?Cc:!RB+?֐ hF@@?7%ѡ@ѝB<=@$A99@ѕ>@pRxf cD`?֡@Ѡ@5 !@G ?H@@$Z&Z`-@ѥ@ B(Cb# Ѣ BBb !G$ BPC cEM{@@ѻ#?ȍ=A9Aa9@~!Z= ?֠@@іR@!Z@ ?Oѡ# <<=?RBB ??֢@BZ@?O 6R@RB?֠@c"@qT{@ <A9A 9>? =@Ѣ@ZBZ@?֠@ `?qlT@59@!p7R@BRB?? !(B*@ ?֠@Z= !LBR@ ?Cc!RB+?@ѥ@ѢC(Z`@5 D@?`6 !LBR@ ?CЂcB+AR?֠@Z?@ѥ@ѢC(Z`@5 `G?`6 !LBR@ ?Cc@ARB+? !LBR@ ?Cc !RB+3?֐@Ѣ BDZ@@]9 ~!@?@Zw.@Ѥѡ@ c@$`?֠@ѡ@]9#Z4@$Z  Ձ!!@z _!T !G# ? cG`?qTR@BBR? @ B@@?1T@7 !dD ?֡@рJ@!Z ? 6R@BСRB ?{@ <`A9}A 9>? =+Ѡ#іR@?< <=?BB?R?R@BRB ? !LBR@ ?Cc !RB+?@ZZZZZZZZ@ѡ !G ?֠@RZZ ЄF?֡@&Z 6x@(<A9|A`9~=@ Y9qH T@ 9 A9?{@B<=A9= !LBR@ ?Cc!RB+?@!Z ?֠ 6@ `9_k TR@BARB ?M !LBR@ ?CcARB+?cOѠ#R@ < cPC<=`?BBR?J !LBR@ ?Cc !RB+?ւ{@`A9B<}A9=< !LBR@ ?Cc!RB+?m !LBR@ ?Cc!RB+?` !LBR@ ?Cc!RB+?SR@BARB ? BhF@?`6R@BСRB@ ? !G ?֜@!Z ?*R@a7BСRB ? !LB ?Cc!RB+?$R@BRB>?@ G?֡RBB@ ?֡ A9@?@`?ցB@ cF" B`? @aRJ5 !XF ? @ clE`?ր6!A cA @!D@9!R`? >@@94W@cb  {E GFkmT*BR?֠@@C`?@{6R@BУ cDB R`? CC @ !A ?BBBB2 CC @ cG!3`? @ !|D ?* @ !F ?* @f c8F!2`? @ cLF!0`? A ЄA#@?*RA6BBBB !AB"@cҁTSAkD{ƨ_ @ !pE ?qR@B cDB@R`? G ?{S<@`B4SA{Ũ_!Ra`@ !D ?`5`A@@96[Җ>@A@ @9qc!@B \DB?@@q-Tc Bkb 6B  {s@?zss?5@kmTzs`cCkDSA[B{Ũ fDրR@B cDBR`?ֿR@R cDBB``?cC[BkDSA{Ũ fDրR@B[BBSAR{Ũ D   {S[*s<@b @T Qq-T kF ESCRcXC B7b @[@%`fka@Ђ@'&@|9|B?7@!R@DBb `?B@c@BF ƈFkaTcCkD RSA[BsE{Ǩ_ jGJ{S s4<@`D !PF ?֣ cER`D!R`?ր@aB B A@?֢ BCaB R@?֠ F? !G ? !0A ?֡ !F ? !C ?@SA{è_   Ѡ A{CS@?qT"Q_qT`@9. @?? qT cFARD`?@# `9 R !A@"@caT{ASB_րT BE@R@?@YR' R >AR BGD@?@@YR'@R !F? ? G?{ #R !AS[cc$@A@7` B D@@>@C )+0Z@u  @9q !C ?0 BB# G@?֡ !0A ?R?R?֢ BA  RB@?ր2@9@%7  @? qT cD@~~R`? B D *!@@? AR"R? !E ?֠ 4 B\EJ@@?@4 A E 9B ZB qT qT@!?`5{z{4qTmTq!T@!? ?qaT@9{a~}JV Ex 7!\ !DF *[ZY  A#`"A!`"E#"":$C"!@<@"G@KO@ha @qBzc ІDBR"? @ ?5Q"qT @ ?4BR"I cD`?&R9` *<,= B9@ 9 9 SA <~z=7h9@=Y=(=`OB`<@<$K?p=Ah^t>,==B^,=;C_t=DD \l^t_(=A9h<@B< =9? =?r T@A 4 !\C ? 6@)RA!|AAAf !AA"@cTSA[BcC{ƨ_@ ?4 RC`R@?A!`! ? {z{5 AABR@B< cDR`?AA  7@`4 !A@ ?rT !E@D ?* BGA!`@?* cE**`?ֽ BD*@?@R@B cDBAR`?֮R@B cDB#R`?AAAAR@B cDBR`?R@B cDB R`?֯ G?  { J6 !4F ? R{_֡ !hG ? R{_R cA{CS@ d@҃"DDsK c @`?@kTA5 A@@BT@{ASB_փ"BD*B cLF`?֟"@!K4B"DB cLF`?֠"D@ " G?{   J !PF ?`>@ @{¨{[ ASc؂>@@Ҵ "@DR? !A@# ?rT !G@$ ?D#!@R`?@m@âF;@qmTR@R   ec ck!Tb@K @ւ| bRD|f)}+~?@AR A_kaB9@@BAT{BSC[DcE_ cFDR`?@@âFC!@"qT/R G?       ՃR<@#r?kTc?kTcQ?kT@?qT_@5C @4A @"H#   D@+ ?T|"<_A @?qTA @,?@#>ᷟ9_A @a4A @?@_ R`9_{S*<@ !@@ ?aM`T @@ T@_kAT@A" !(B ?֠@ !F ?@SA{è @֠@@SA{è F{BB%SP@R sD@`?֣ @RR@BB%`?֣@RR@BB &`?֣@@BR@B&SAR{è {bR_k !@SP@`RZ ?BSAB&{¨AR D#R 9@R .B { <@ !@`@ ?`@!R BhF@?`@ @{¨ F{S4<@ !@`@ ?`@R BhF@?`@ !F ? RSA{¨_{ <@ !@`@ ?`@R BhF@?`@R BH@@?`@ @{¨ Fѣ cA{W>@`@?q ThTa 4@ !@ ?@@ 5O@9 =<=4@YR>'E!>d!?T GR!rR4?qZ QqT@ !@ ?@? qTBB@'AC@4 BHD @?qZ@ !F ?֠ A@@BT@*{SWT_A94R@9߂@YR'4R >_@9.R@_@C!rR"R> G4?qZ@YR>'aRC!r>R"R G?{S[ Ѡ A>@@Oҡ !,E@ ?Z@s@ok @" @U@ %@#4R#  D @BdT@# c@`?@`5@@` 4 TF?B@RB)Bsr@@s~@s~"!|c|s~B Ě@cĚBsƚ!Ěs!s !B ?@R Acc*R?*%@|@ 4" @RZ@ ե&|  D@B)aT@ BpC@?րR@* D*BRB'?kAoAsA AOA@BT SA[B{Ũ_ R~@뵒O# @ A@G`@ !@#9 ?~~a @ @ @ k 9 @"&?ր 7a @ @ @C @aR`? a @ @ @ @RR`?c__ @c@d@"&B@C?ր7#@97 A`@?#@963@/@ ?@a ?R !B ?@@ '@ ?kM`@ !F ?֠ AG@@BT{I*SJ[KcL_kMkM Gk ?Ң BA{S[C@/Ң BAt>@@?`R@R DCBc*B*?֠ FuR@?RBB@+?֢ BPF@+@?ր` !@ ?ր@ !0B ?*@ 7 !Fc NE ?A@!+ ,? cE`?J@@`,? c$B`?ր @$@ @" B&"B?*@!7 !F ?9!1T@9Ra6cI !A/@"@caT{FSG[H_cI@ !F ?`R@BARB@-?cIaA9#xR@O?@ @ !@@ ? B @@?֢ BL@!!@1@?@4Ar@d@DaB@A !F ?@SA{è @֠ G?   )R{ s AS [c *k S/    @_ҁ@ W/)a @S AЀ F'  S@<qT@qT<7/@},s}@@!4@@"|@" @|`?kiTkHT@@@@?@4@! @  @! @W7i>8}s@u@9R*q`T QqTZ`xa W7@?} ,8}@҂@ @L 9|@|` kiT+_ k(T@@@ *3?@+@3@`4@ @!@ @ @ kTT kWT@W@DW@*+;?@q+@;@@za&T@@ @ $@ $!@ k TkCOT@O$@N@*+?+@4@@  @!@2CK1aT{Q1`T`@9qT@@ @ > 7k@{@ @"<T;@Q@s 2sKs1CTa ?kT+_kcT@"B@@@?+@5@* cA@$`?ց@@a @ @! @S@<qT7/s}@`4@* @#?kTkHT@@@`?ր4@! @@! @6"q-Ti>*s@8} A_@@BAOT{LRSM[NcOkPsQ_7?}@ B) @*F@_q T#@x kT@*@'?օ@ @@! @@qTQC2K1T@{Q1Ta7?8}@ @?,A@{mB)q Tx@?kITRkHT@@@3;@?q@3@;@@zABT@@ @! @@qTQ32K1 T @ ?kT+kT@`@&@3?+@3@4@@ 7@?} ,8}@ ҂@ @|@D |` k)T+_ k(T@@@*3?@+@3@ 4@ @ @`#   "@B "!@ kI'T k*T@)"@)@*+;@?@q+@;@@zaT@@ @! @QC2K1T @ ?kiTk)T@`)@%)@+3?+@3@4@@ @@ @B@{Q1aT7?}# @ @@,'@ 3; ?@;@3@|@ @"|` *?kT+k(T@@@/ *W@?/C+@W@4@ @)!@@ @8 k)T?khT@ @@*;W?B;@W@ 4@@ @ B$@ $!@k)TkT@$@D@*?4@@@!@ 2CK1aoT#@{Q1T!7?8} @@G? ACB)q`Tx@?kTRkHT@@@3;@?q@3@;@@zT@@ @! @@qTQ32K1 T @ ?kT+kT@`@&@3?+@3@~4@@ 7/8}@ @)CB)qTx0?kTRkHT@@@3;@?q@3@;@@zT@@ @! @@qTQ @23K ?kgT+khT@`h@&h@3?+@3@ f4@@ 7W7/@} <8}@K_4A @)CB)qTx`?kiTRkHT@@@3;@?q@3@;@@zT@@ "   @! @@q`TQ32K1T @ ?k oT+k(pT@o@o@3?+@3@`m4@@ s@`7?8}@ @(A{mB)qTx@?kiTRkHT@@@3;@?q@3@;@@zT@@ @! @@q`TQ32K1T @ ?k _T+k(`T@_@_@3?+@3@`]4@@ 7/8}G?8A @CB)q`Tx@?kTRkHT@@@3;@?q@3@;@@zAT@@ @! @@q`TQ32K1T @ ?k ^T+k(_T@^@^@3?+@3@`\4@@ l7/8}@ @?`G)CB)q Tx0?kTRkHT@@@3;@?q@3@;@@zT@@ @! @@q`TQ @23K ?k)<T+k=T@<@<@3?+@3@:4@@ @ w7?8}@$ACb @CB)qTx0?kITRkHT@@@3;@?q@3@;@@zT@@ @! @@q TQ @23K ?k7T+k8T@8@F8@3?+@3@@64@@ wz7/ @}, @!} ,%@} <8}| @ Ү f}@ @}@D@ @,|`}`kTT+_kHT@ @@*#W?#@C+@W@R4@ @@@"@B@"!@ kTkhT@!"@@*3;@?@q3@;@@zAT@@ @! @QC2K1pT @ ?kiTkT@@@+3?+@3@4@@ n@@ @B@{Q1amTl @ ?kTkT@@@@+3?+@3@4@@ "j@@ @B@{Q1iTMT7?8}@ @?0A@{mB)q`zTx@?kTRkHT@@@3;@?q@3@;@@zT@@ @! @@q`bTQ32K1aT @ ?k /T+k(0T@/@/@3?+@3@`-4@@ s^7/8}@ @?Aq)CB)qkTx0?k~TRkHT@@@3;@?q@3@;@@zAT@@ @! @@q XTQ @23K ?kT+kT@@F@3?+@3@@4@@  @ ?kiTk(T@@@+?+@4@@ b@@ @B@#@m @ ?kT3khT@ @@?3@5@* cA@%`?ց@@ "b@@ @B@@ @*+@%?ց@+@@ K   @@ @B@{Q1JTW@*+@%?ց@+@@ H   @@ @B@{Q1GT?@*+@%?ց@+@@ E   @@ @B@{Q1DT'@*+@%?ց@+@@ B   @@ @B@{Q1AT@* cA@%+`?ց@+@@ ? @@ @B@{Q1>T@* cA@%+`?ց@+@@ < @@ @B@{Q1;T@* cA@%+`?ց@+@@ 9 @@ @B@{Q18T@* cA@%+`?ց@+@@ 6 @@ @B@{Q15T@* cA@%+`?ց@+@@ 3 @@ @B@{Q12T@* cA@%+`?ց@+@@ 0 @@ @B@{Q1/Ta@9 Q@8qhBT!!x`s Л@AdC @)Ck6TkhT@ @@*@?@54@@@@!@@C@@`)4qSzaT`RP7/8}@Qq(T`@9 kisT kT@`@ krT@H%8@H">@H"@@" H"&i"?qMXT/*X}"qRT?*@ }"qUT @?* }# @@,OІ@A3qjTx ?kpT+kHvT@v@u@ *R@?q+@p5B)  @B   @! @qWTQC2K1VT @ ?kT+ kcT@ @@?+@5@* cA@)`?ց@@ bS@@ @B@#@"q-MT?*@ }"?q FT/*X}"?qIT?*X}Y"?qMBT/*X} @@)CB)qYT&#?k \T"?qCT?*X}(@@?qGT?X}C"qIT?* }@ B) @*A3_q@VTBx k \T3kbT@@b@b@*?3@]4B)R* @ @! @_qTQC2K1T @ ?kT3kcT@ @@@?3@5@* cA@&`?ց@@ d@ @@"?q 8T?*X}"?q3T/ @*}*"q :T/*@@}"?q6T/*X} @@?q4T?X} @@(A{mB)qAZT &#?k\T8 kJT@ * 3@)?@@@ @ 3@2kTkT@`@2khT@H88@@H%R@H8 @@H5$@HB@;@S k T3kT@@B@*@?q@3@@zT  @!7*&#?koTl&#?kT@&#?kET &#?k)YT&#?kibT &#?k)/Th &#?kiT" &#?k)T0!G5s*@+@%?օ@+@*@+@%?օ@+@W*@+@%?օ@+@*@+@%?օ@+@*@+@%?օ@+@**@+@%?օ@+@@* +@$?ֆ@+@@ *@+@%?օ@+@*@+@%?օ@+@@*+@,?ւ@@+@ @ *@+@%?օ@+@@*+@$?ֆ@+@@ *@+@%?օ@+@p"qMT/*s} "q-T/*@@}"?qT/*X}v@*+@&?ւ@@+@ {Q1T@*+@&?ւ@@+@ e{Q1T@*+@&?ւ@@+@ g{Q1T @7* @'w'TBq-T/8}  @7* @  @ w$TB_qT/ @*!} @7*  @#!7* @7* @7*? @7*/@@@ + @7*V @'wTBq T/8}:/@@@  @!wTBqT?X} @ aTbqMT/*@ }I @!7* @@  @  @%bTqT?8}5 @ 2@@T7@h! ?kT+kT@@C@`?+@5@!H$@ @ @@@! @@*@&?L @!7* @!wTBqT/s}- @@ * @7* k T kT@`@҆ k TkT@`@bB҆)kTdR]RkT@*#@ R Rm RkT@`@į?kT@`@D`[*@ cA@'`?ֆ B) '*@ cA@%`?ւR**"ba>^@ BAYRzRtRRFRhRR]R*P@ bU#@@*Rd@ kIT*R*R**N****0 G?*Rl** {S[C cA`@G>@?<q T_ Dz Tf@c@gk#osw R ,@ RK)ПCBR'| fRC#*+%AR1+[c7[@L)+@sG 7;@K@ @8 TQ 2K1T#@ kTkTb@@?ր4`@ `s@Cz @ c@"R`?ր 7cBgBkBoBsBwB AGB@B TCSA[B{ƨ_ր A!RzGB@B! T@C .BRSA[B{ƨփ cA C7*`? @T@Q 2"k!K1TC"7@kTkTb@*@?ր43   `@ `s@* K7CR@" cDB2!R`?֦R@" cDB2!R`?֞ Gcgkosw?#@x {S[ BASg^@C@f@A !.`4"$B4 5%#`5c0(!4|#%c 3@3&iZ@_ /_ $cu>@'`3 MEc?"!B3!,3 3?1T@!5 ZDc@"!B 6!@6?ց !pB`J@ ?cJ@7aQ?,qH#TXa"4 cDc"#R'x9`?b@9`@ )4kt8qiT`R@" DB@7AR?b@9R    _kTSC ,@ R?C RДB8 &R*#*RDR =G_@C&5S@@҃ cB@B_`?7 Z@@?@7z@`4@ !F ?֠z@q@ TCRCCC#C'CR2w@S@[@@a !B@R@ ?a !C ? D!RB;R?  { <@` @ !$F ?`@  !xD ?`@ !E ?`@  !$C ?`@ ! E ?` @ !8G ? @{¨_  {S[<@v@@9q @?`  !A ? 7` @a !B ?` @ !A ?ց^@b BD@?֗R@` hC D?RB@+?`@ !hCR@ ?*RB<?`@ !ER@ ?*RB<?`@ cPB!`?`@c c@!0`?`@ @FR? 7 vF C qT?`@?*Q` @?qTa !E ?@RSA[B{Ĩ_` @   a !E ?@`@` @a !Bu B ?`@?qaTA97>@R@@?a !C ? DB =!R?` @a !E ?:SA[B{Ĩ_փ cD!RB<`?` @R@ cDB;!R`?   { R <@ !Db*y ?` @R @{¨ jB{ !D S<@ ?ְ jBR` @ @{¨{S4<@ !@ ? qTQxrTSA{¨_`R@R cDB=`?ց !C ?ր @RSA{¨ jB{S[c# BAЃ cD6#2@@ҕ ~BR`?R ?a@?1T clE`?7 AB@BҡT*#@SA[BcC{Ũ_@9qiTRO#@Rb BhF9#<y#<#<<@?7@99ҡ4 je8RR`@B1TkaTB|} kb1T{%?kT***` G?{ CS  !AH@["@Gҁ !B ?4Q`J?qT*@Xaq Tp7 AG@@cҁ T[@*{ISJ_ւ B Ba@@?a@9 BF@?ւ BC@?b@R`rR_kT !A ?qa !pB ?ր7dJ@ RqTBB`C@k T5`R@c cDB=R`?ւ BGR*cJ@?ֳ @ BGcJ@?֬` G?a !A{S["@<@X@1T` @a !B ?` @?^@Ѓ cD!>`?ր HA?c6`@ Х@##R!??`@c F;x @? !F ?`@c cA!3`?`@c cF!2`?`@c cF!`?`@ c@E!1`?bAg@ObJ@>b ~?b@9`@>b o#`hF9RR ~CyqZ (E@? 7 @ CQ` @?q T?`@?qT`@ !D ?`4`F9 6`@a ! B ?֠@J@?ֵ @9` @ a !Ef ?cFR;@a !A@"@cA T{CSD[E_O@ER$RpRB<R_999JB<7R@c cDB ?!R`?` @a !E ?@ !F ?ց !F ?R@B`!Rc cD`?` @a !E ?@@?cF;@R@!Rc cDB`>`?` @a !E ?@ !F ?R@!RB?` Gc;?B<@* jBR@@C{SR[v ֺD?*`5 C @??*`4@ !B ?q @a !E ?*SA[B{Ĩ_b BA{<@C@` @a !B ?`@ c@!`?` A@@BҡT@{B_` G?{S<@1 T @a !B ?ր@ ЄEB!R?RSA{¨_{Sc<@ @#9a !B ?֟@ C*B?[v ֺD?* 5 C @??*`4 !B ?qT[B>@a !B@R@ ?a !C ?d D!RB?֟R9 @#@cCSA{Ũp EրA47R9[B[BR{ R{_{!RcS>@a !B @ ?֟@R9 ctA!`?֠[v ֺD?* 5 C @??*`4 !B ?ր @a !E ?q!TA[B5>@a !B@R@ ?a !C ?cCSA{ĨBp D!RSAcC{Ĩ_ր @a !E ?[B{C[Sc>@` A@ @a !B ?@a !\G ?R`TZf@F9K)>@"6`@c cA`?ky 9D ?* 5 ZC` @@? ?*`4 !B ?֟q@ TkE>@a !B@R@ ?a !C ?d D!RB?/!t ДGky 9B ZC`@ ?@qAT` @@?`@Ҁ?7@/@Tc%gkERF9 @B9a !E ?B@9`7VF9@ 7` A@@B T{ASB[CcD_֠>@R@@ ?a !C ?d D!RB?@/TkE`@ !\A ?`@ !\A ?@z ZWG'@@@?3@@@ˡ53@@?֔˟t“%gskEb~V9>@a !B@R@ ?a !C ?d D*B@?/kE>@a !B@R@ ?a !C ?d D*B?/kE` Gk?c cA{ CS [ c k `@G>@? qT* T?qT`@ !F ?*` @a !B ?`@* BB?` u D?*@5 C ` @??*`4 !B ?` @a !E ?֟qT5 !,A` ?c! =g>g } ~Cb? R a !AG@"@c T{ISJ[KcLkM_?qT` @a !B ?`@ ЄFB? u D?*`5 C  ` @??*`4 !B ?` @a !E ?֟qA T R` @a !B E ?`@ !F ?*@9"R??@R'YR'@9 =>C'8?`@* ХBc?u еD?* 5 C` @??*`4 !B ?` @a !E ?֟qaT`A5>@a !B@R@ ?a !C ?d ЄD!RB? t` @a !E ?>@a !B@R@ ?a !C ?d ЄD!RB`? ]` @a !B ?`@ !F ?*`@"@9e ХFc?@u еD?*@5 C ` @??*`4 !B ?` @a !E ?֟qT`A4 R-`jAq 9 R'` @a !E ?>@a !B@R@ ?a !C ?d ЄD!RB ? ` @a !E ?>@a !B@R@ ?a !C ?d ЄD!RB? ` @a !E ?n` G?a !A{CS"@ҁ !B ? b BFc cF`?B R%@RB Х@?a !(B ?a !A@@"@cҡT{ASB_` G?ր G?      {[A@@4v ESt~} ht?֢A?h4@@skTSAa !(B ?ֿ @a !G ?ֿ [B{è_{[ck@@4S @~}Ӕ G9c "Tajv! ? 5 @9RhvZ "Tajv! ? 5 @hvZ " Tajv! ? 5 @hv Z "Tajv! ? 5 @hvZ "Tajv! ? 5 @hvZ "@Tajv! ? 5 @hvZ# " Tajv! ? 5 @hvZC "Tajv! ? 5 @hvZc "Tajv! ? 5 @hv"Z "`Tajv! ? 5 @hv&Z "Tajv! ? 5 @hv*SA*[BcCkD{Ũ_RRR*SA[BcCkD{Ũ_RURbRoR|RRRR{Sc** cAA@)`?ր [b B D@!}@?ւ BL@! @?  @`@ 4 k@@*b@v~}AXss?փ @j6b@_kT[BRSAcC{Ĩ_d ЄD@!RB` ?ր @` G?@A_  {Sc@@t4[ G~}# @s"T!ks! ? 5 @#@!hs[BSAcC{Ũ_#@[BSAcC{Ũ_֠{S#@4@4[~}c @ Gs" Tjs! ? 5! @#@[B@!hscCSA{Ũp D[BcC#@SA{Ũ_  {[k @@u4Sc3 @ GuN5Tt@s""? 5@7[B@SAkD@cC{Ũp *CSAcC[BkD{Ũ_ {S[cB` c@*c@B *c @B *c@B *c@B *c@B *c@B *c@B@ *c"@B` *c&@B *c*@*B ~`** *SA|S[BcC{Ĩ_{*b B DS*[*@?ւ BL@! @?֠\)*u 5@SA[B{Ĩ_a !(B ? G? {@ A @{¨p *B_ {B S[%@!R@w D@)?փ @`@4ւ   `@c~}Ӆ@!Rhchcsc ?փ @a@?kHT@SA[B{Ĩ_Cf ƼA{ *)S **[ *c@Wҁ !TG ?@* !Fk* ?@,b B D)@?ւ BL@!`@?4@**2j/sB@_q TC@B|@_ Tax`kaT*@#@qMT ZEҖ @ ? @@#@{kTA@*!X{?@kT@*@2: ? @@ @`+4 Gu !D R %a !(BҖ G#')' @sk) T!@ @!xs@@?@@,@ ?#@jT@2@@ @@ 4@~}{#Tk{! ? 5@@h{T'@!'?@a5 T;@5@;'@C@k T'@G@k T'@s ? @k(T@ @@B@s sDR`?@ @@BR`?a !E ?a !E ?kOsP@*d D!RB@?a !E ?a !E ? @`ua !(B ?kOsP` AW@@BT{KSL[McNC_m@?h*C@1T?@cc4s sD*@RB`?@*2n@G@1T;@4@*RB`?@*2X@G@B`R`?֐?@;`;@c@@B!Rd D?a !E ?a !E ?kOsPOc` @=a !GC@^_ = ?֠@@V@V 4 @ G~}9s"` Tjs! ? 5@ @9RhsF{s" Tjs! ? 5@ @hsJ @@V@4 @ G~} s"@Taks! ? 5@ @*hs@bq@z@q@z R9+@*SA[BkDcC{ƨ_*[B*{S4@97*SA{è_[!@c@B m *a@cJ@B~Sec@aC4a@*B\*a@cF@BU*a@qĪ@zbb|q@za@bsq@z9*[BSA{è_d ЄA`DH?q @zc@"D@b4 R_d ЄA{#Ҁ?q{_{ !D@5 @ R{¨_b BB@?qF @{¨_   {S @qT[*Җ ZE @ *@AXs?@qT @?qT?ւ"@s_k T[B@SA{Ĩ_@[BSA{Ĩ_  d A{Sc k *AR@/ B@r@? 7 !TG[* ? @qMT Z[E[ {@  ա@*!Xt@?* ?`?֠"@k,T[@* !B ?` A/@@Bҡ T{FSG[HcIkJp E` A/@@BT{FkJ*SGcIp DB!RO#` Gx Gy 9?F@@@@kaT @:5?`3@k Ta@~@@!hv?`@# OUO@hv<__ @?@ b@ ?@**AR?`3@kT   \@K@4w >G8R+@~@@!hy?Ob@"4@R#?j! TkaTa !G ?\@K@kT@O@@B7!R?M#@R?c chERR`?W@*@/7w7*k3T}k`@77@O@*!RB-?@w@@1B BF*@?@w@@O@!RB 2?@@ARy 9@r@ ? 1#TA !A ? @"4` B*@? @ARr ?*1.T-6{#kT`@@A6OVO@# W@<` gcC@ybA_@D@y}bE@y ~?|CRB ?@@AG@@@O@$C)F BA^)?@`A !E ?AW@RC c8F!t@B @BR`?@S_kTB?TC@y_kAT#@ykT@@# O\O@(@hy<` g@yc\@\b=b| ~|}+_ @at@?(A# @TH@""@)_c=c}~CbL@"P DRB >,A.>CB BA{S @C@҂C9B6@ TF?b˃ `!RcJ@_)BЀCC cABB|@`?/y 5@ A@@BҁT{BSCC_B BA@C@!T{BSCCp ~CC cG?@"`?T[?@9q@T qTb@j@ ?C cB*@`?@6^@*C cDB `?[D@ A[D@@BT@ G[?ցf@n@ ?C cB*@`?`6^@*C cDB`?[D C{CS@ AaC9@a64R[v ֒BcwBx cG`C9@6c@S)wR!?@y6`@?*@4`N@D ЄDB!R?[CcD@ A@@BT{ASBC_[CcD@ G[c?A !A{C @"@C9`7@ A@@BT{A_ր 9c cD"J`?@ G?     {S3Q[*@HT@`~Ah`!Ah SA[B{Ĩ_ր@A !HB ?֖@ @bT@RC cD B~`?֕a !|D @ ?B BC@?c cF`?b BL@!@?@  Ѩ)G A{@Ls@oLS@h@@4[*ck*@@|qmTw BY R`@9c{kT!@*?6~4*@dE ХDB` @!R?~SO[PcQkRSORA !Ao@"@cҁT{NsS_#cev@aRkMT$@d( d@H @(!`cBqT7@cr@A@h BxS **?@5`@q-Tzt4/`@k,TSO[PcQkR_cr@h C@**?4O#` OcC cC*@~~`?СRB ?+@ G?` G?#C cA{Sa[ c k }RtAV bAz Z3C@d@7C cA`?b:@#?!@?4! @?5` @OP@yBR#4c cG*`?6@B BA@?'@@? 6`@bBA@@!_kT#@5s@c?D DB@R?y:@RA !A7@"@cT{GSH[IcJkK_@ G?   {S[@@@@ F? @V ֢E!@B` ?֡@B !@?֠@D Є@B@R?*5[BSA{èp BSA[B{è_`@D DB !R?{S[@@c`@D HE?a@`V D?bXbdAa@`b?`rAdVdb`@`@@dC@SA[B{Ĩ~`_@SA[B{Ĩ{S@`@ҿ`@"B BC@?a !FB ?ր@A !XB ?֟SA{¨_ A !A{CS[@"@'ҁ@aa !B ?֠ @C cFB BF`?5C)A !(B ?ր@b BtD!#@@?`@a@)*F B*c@?`@@! @b BA@!@@?T@y@@yaA !Gb ?`@C c@`@B6"@97u`b B @V N@@?!?`@! !HBw @ ?u@@BT` @@Z a [BSA{Ĩ_d@ $@A !uaaA !E ?R @A !|D ?B BC@?C cF`?! ?`@ G?{SA !@@ ?a @4 @@4a @a5`@T *B?`@?`@SA{¨CA !A{[c"@A !B@ ?6sҡv@"@/!|AB BC!!|@@?B B D\ МO@ @?!?.@?qm#T@ A+@ @'@ C@ F@ D@ x@ F( ~_`'@!@ N>=!?= aN~NnN+\__qDDzaT!R9_ !R9_9_   @c @c@c|X@@cK[)cKkJTkTRk-TR@ R_@@KKkTkJT R@ R_R_֠R@ RkjT R@ RklTR@ RkT@R@ R@R@ R  A$C9A ѿTR "H@$B9A у*aT6 C97@$9!2_ C9c #7_֦7_@@`!lD9a78C9a6@D@L@?b ! _aN!aNN!nn!NN!((LD_   բ4@`@ @?1T"*?qB A`@aHCa0 DB+R_  {S[*At @ 4kTqTq@c+)c`@6 Dq@T q`TD)B`,R?`@RB.? q`@"8P DSA[B{è6 D qT`@RB`.?R+B`,?`@RB`.? ,B`,R?c ,{S*A !@ ?**SAR{¨P CaR{S*A !@ ?**SAR{¨P CR{!RSks@a9ab9)a@z @!4 JB[V FcU N@X D7 C `BG@a@"{ `@`!` @_T`R@|?yR@ @T???!`/?`R`BG@a@"{ `@`![BcCSAkDsE{ƨ_{" B`C @@?`* @{¨_   {S[**c**@4 bC?`"`@#@?wb)u)`&SA[BcC{Ĩ_{S[ck+@`@9!6@0@`W@w` T_1@zT@zRY 93CRX4a*@ ?4a&@ ?ր4a2@*3` Tq5_kT+@SA[BcCkD{ƨ_@$@U6v@95+@SA[BcCkD{ƨ_`@*$ ЄDARB0?`@$ ЄDARB1?`@# cDB0!R`?@RP AAr @(@{RAr @X9`@B BA(@@? @{¨;  Cѿq! !A{CS@Q[RR@#*#@R<qTqT!.6X``@a[)(@C c@G`?`7`:C96Rҿk@T`B65 A@@B T#@{ASB[CC_RrkR@zT` @d@96FtB A@@BT`@*b@{A*SB[C#@(@CP A֖wR>Fl@4A !@s@@@ ?! !A*@"@T{A*[C*SBR#@P CCR G?@ARP AAr @(@ @ARP A(@{S*[**c**k*+@ @?q-T@)}}s"?@Ths?aT! !E ? @h3*@wAsu`@ Z+@SA[BcCkD{ƨP ZG   " BA{CRSs@C@" BB@?1@T` @ @1ATA !B@ ?@`Z A@@B!T{ASB_[R`@B@3c*A$ D?@A !@t"Au*A ?*G C*R!R?[C`@# cDB2!R`? G[? {S@B BE`@(@@?a^B?k*Ta @! @?1Ta*A`^B B,@?9`B @?6c*A`@B3SAR{¨0 DSA{¨_" B`C@?`*@ G?@qBq@B| |<g =gB|*| @^bb0 B+|+|`(@}}xxŒ){* @B BE`@(@@?B @{¨_@*@BxA9B7_ @*0 G(@   Cc$ A{ CS @G 4_qTR[ c`*@Ux*" B$B! aZw@@?x*!Q*?dqTQ$qiTQq(T" BD*4@?@@B BA(@ab@*!*@?U6v^56c@^[K AG@@BAT{ISJC_" B@`.*`@?*5# cG#*`?q T@tb@7(@*! !F ?$ D*?57c@[KR[ c56@RB BAAr(@^@?c@[K G[ c? {S(@G A[ c*#*y@*V @8 BRRR?֡zt`&@?*R1 T`*@?a!.! `4 xt*T`bB9wb7`*@`a^@5[BcC#@SA{Ũ_`bB96`@b9qTSA{Ũ_`@#@[BcCb9qTaR@#R"R!Xt.`@kT @!*#@!2[BcCSA{Ũ(@P A**R{S*[*pA5& ƈF**CR"R?A !B* ?`TvurSA[B{è_@*" B@@?r {[*_qT*[B{ŨP B& ƈFSc**x@*CR?Ta&@a" B@@?A !B* ?`&@a*@SAcC[B{Ũ_B BpD#@?% B*AR?#@`&! !8B ?`*@!R# cDB5`?`&@! !TC ?&SAcC@SAB 5[B!RcC{Ũ0 D{SB9t@6br@ a@g@b/b `TT`6@d~o>@~~ T!TC`n7n ~ T!ETC`C`@Rbb@(@rA*" BG@?!`TT@6r>9SA{è_!~MT `lTTC`   Հ@A`bb@R(@rA*" BG@?Aa@Rbb@@a@aRbb@!%T `C`,TTC`n!``!~~oC`@aC`{qa! q@!| \gc@| ]gdVC9!||>bb+|+|}}xxa)6V9 @{¨_`@# cG(@`?V9 @{¨_   {S*[@t6`@T6 `@6@SA[B{Ũ_ր! !E ?SA[B{Ũ_! !E ?! !E ?A !@ ?*F ƜC" BCRAR?`" B@@? SA![B! {Ũ@@0 nAcX @W C?*" Bp@RR?`a@A# clA !!`?cCA !@ ?*" B0CF ƜCR!R?`# clA !!``?֓`@#@?B B$A*R!R?v@#@`#@R# cA{ S c s@d@O cB#`?ր5#@@?qT@@s`@9`5@# cDB6AR`?! !D ?! !E ?@ !4F ? AO@@Bҡ/T{JSKcMsO_B B@ARr@?* &7# cG"a`?ր 5! !F* ?@)@'4@ A g ~x4_@0 DB=@!R{ HC96`@ @{¨_`*@A !@ ?qTaZ@ gb@!4@@ba?b~zxa@!2a @{¨_{RB>S& DEcD@e&@?! !D4 *B ?`@! !E ?`"@?`&@?SA{¨   {k AS!E9@A 63@[s @; {C: ZF5@`?@?! !L@! @?ց@ @ ?a " B|D6 Dc KB7 ^C#@y"A5@i|G||cBijic@h'3ky"@yB|bjb?'@xRB@d@?ց@ @BT @5?$@@T@ ?`?@@? @!@? [FcGsI A@@BaT{DSEkH_ A@@BT @{DB ?SEARkH0 D[FsI G[cs ?  __{CS[P)Q)}z@K!Kt@b>bA !@}}xx ?H C*RR*RaR?`@2`{ASB[C_{S A[6aZ@@ҡ$Ac# cCt@#`z@`?" B F@?րA A**  D **5 a6C9 b)a7J`)697 A@@BҡT{DSE[F_`:C9`7`I` G?{S@SA{è_a@ Obg b  ~ Tx`@4RtJ9RBc cD`?t>9aJb`@2` `_`TR#R0@ `_T@9a6#4@SA{è_`@`oz@j`Ta ]) ga?b@b~zRnB>9dZ@`@2` _gB{SR ,C)B)D 4@j @b%@`@ E)@  )) D?`Z@@T`@2`{BSC_#R4`@2`{BSC_{S[@u"AT` @ @1TSA[B{Ĩ_c*7 @6 ֞C?*&ReRRҁR?x*A?**RR?`@c*ABcCR[BSA{Ĩ D`@[BBSAR{Ĩ DE96A@B@A_cT5_A@1_____   {S*@! !@ A(A ?**@SAR{è0 CR{@t@9 3@6! !@ ?*R @{¨!R0 C"@C9"L9! !@ ?*R @{¨AR0 C {S[c !E ?5 @ :@7 nA?*" B@3 sCRaR`?ր!?րF96 @A9 6k R@9:@?*" BF!RR`?@!@?qT$@ Es?kTu~}#QhukT?s$@!@h5?kT@! ?kD*929SA[BcC{Ũ_֟*9299SA[BcC{Ũ_֙@h5! ?kD{S@0@`@976! !@s@@ ?*SAR{¨0 CaRt@aBC9aN9! !@ ?*RSA{¨R0 C@@t@6! !@ ?*SAR{¨0 CaRqcq{C!c|S!|[**@ g gd@`@c|!| A~b?b@(@+|+|# c@G}}xxa)`?`7`:C96 AFtB@@BT`@*{A[Cb[)SB(@0 Ga @!p@4! !@s@@@ ? !A*@"@T{A**[CSBR0 CR G? BA{S@@t@! 9a6[cu@6 @wB@3 sC?&R***R`?֔:A?R*R`?[DcE R !A@"@c!T{BSC_! !@t@sB@ ?( C**RRR?[DcE  R@~B?k@T2A! !F ?5 е&GR?? g&@~# cDb+}~x`?ր2 5 еBF!&?ր6@~@! !D@ ?kz@x@:AyB@?n;p oA)6 @ooc"c!oBo3x[x?**RR3 sC*`?֡@)A ccoodd?R*AR**`?֘:A?*RRR!R`?֗:Ab@)?**RRR!R`?;@?@kF;@5w_6A@ cDB!R`?R[DcE32A!?ր6@ cDB!R`?R[DcE" G[ck;??   {S*@aI9*@`@aR" BAAr(@@?ֿq!qc@!| \g| !|]gdVC9|>bb+|+|}}xxa)6V9@SA{è_`@ cG(@`?V9@SA{è_a{S@q-T@c|}s"@Ths?aT !E ?ր@h3SA{¨__  {S[@"A! !@ ?*% C$RAR?" SA![B!{è0 nA{S@t"A! !@ ?*% C$RAR?"`@SAB{¨R DSA{¨_{S@t"A`ZB1TSA{¨_! !@ ?*% C$RAR?"` @ @1T`@c*AB DR?`*A! !(B ?*^SA{¨_ @!{S@3d@1 T! !@@ ?**RSA{¨!R0 C! !@@A ?**RSA{¨!R0 C_{S[k Av @fH )B*@ 7y.C996cs @ @" DrRRRRRR qT qT_qAz @T@q` T T q TqIzB_q @z @z`2C9k@T{29`FC9k`TdF9b@9kATv@9kT7`RC9`6`BC9`N9tAu:9B9|R945`"C9kT`NC9a:C9 66 C)_qd@zT_'|@B Na= BB= aN}N~nN+F@?` 7F)E)B` `@KKRhQ)eP)KK D? R`V9cGsI A@@BAT{DSE[FkH_*`@r9*@@?֢@@** C)_qd@zT7cs@|@a=_@ =BJ BB aN}N~nN+FN@?6cGsIw"9W6`@292``NC9a:C9@6bBC9`@bN9" BD:8@?<7lbBC9`@bN9" BD88@?v@9kT! !@u@ ?& ƜC**R!R?`"C9k`TB9`7RC9 7C97D97C)?qD@z TJ Ra )`69`I`z`@ cDB@ AR`?)`I`N9X7`I`TRRRRRRR Gcs ?{S g])?b@b~xR>9`@2`SA{Ĩ_ 4@b@_k T ДBaZ@!@?֠6a? { X@eV@f ,A`h&HTR @9`6dZ0@` T@T0@9`!TqT`@2` @{¨_   `@2`{ X@eV@g 4AZj.H`TR(R0@@9` T@T0@dZ9 R` Tq`TfZ@DB `@R@$@ D`z@?`@2` @{¨_    E{S@kT@b g4R`@tJ9b cDRB`?t>9bJ`A``TR#R"0@A`T"@9b6#4SA{¨_֟j Ta ]) ga?b@b~zRD>9dZ@`@2`a@ ga?b~zSA{¨_{RB@ S@H ЄD@?! !D ?`@@AT`@ ДE@?`@@?`@@?`@@?u@! !@ ?*% ХC$RR?`&@ !TC ?`*@ !E ?`@?@SA{è *B@T@``0@!`T #0@a`T$@$`kTA H@! T_$H@ `T@% _kT{Cs {kGS4 2C[*|@ck*?q Cz7R(AT< D@??" BHG?@[@;4 МSF@??q?@ CzMT?`4: ZE[@?q Bzh)T !DC;@?q Az+T! !D;@? 5q0T B D"qRҵ@?" BL@!@?L( CV" BDX**R*R?@ clA !!`?A# BF: ZF@?[@?`5( C: Z_F'RR**R?[@&5R?ր5( C Z[G'RR**R?[@5R?֠5( C: ZSB'RR**R?[@5R?5( C: ZA'RR**R?[@5R?5( C ZB'RR**R?[@5R?5( C'R**RR? clA  ZF!!@`?[@5R?@ 5( CqR***RR? clA !!``?I: ZC" BHG'R**RR@?! !D;@?ր045R: ZF[@?4: Z_F[@?4 Z[G[@?֠4 ZSB[@?ր4 ZA[@?`4 ZB[@?@4 ZF[@?4< A@?? BF?@[@4?@ 4q T{ASB[CcDkEsF_ DC( C@gR**RR?uR?@5 B D @? BL@! @? # BDCq( C#R.VRX'C7@+***RR?@ clA !!@`? BFAc@?! !D;@? 5@ cDB` AR`?s: ZC BF'R**RR5R@?@*{AcDSBBkERsF[C D: ZC'R**RR@??5: ZC'R**RR@??45R: ZCqR; {@***RR@?`?*" B8@RR@?*@`?" B8@*RR@?6@`?" B8@*RR@?.@`? BC**R@?.@?`?*?@RR@?6@?`?*?@RR@?`?**R@?@`?" B8@*RR@?*@: clA !!WR`?ց: ZCR**RR@?! !@ ?*" BGRARR@? clA !!``?r5R G?C cA{ B@FSCaR`@/@#@?7# c8G*bR!R`? cA*`?5 A/@@BҡTC@*{FSGC_! !B* ?O# =`ZB ?T`?@qT`@ cDBR`? *B?`*AaJ?Oy*^kGsH JB`@ DСRB ?t"A! !@ ?*% CRaR?dJB7`@a*A(@ @? Gks? $DCc.Рc@ !bԀR?ks G?{Sx@A P)Q)BK!K^b?b! !@}}dd ?*0 CR*SA*@AR{è{СRBS@ cD`@`?`Z@ i @ aD97`.C9`6 a@5 uA9 7`.C97` @bIb`@9!7t@9a7p@9` 7 R`.9-RJ`.C9i @ 6 aD96 R`B9 a@41aT B9 7 QC97 C97 D9`7  baE`@4a@k T`@4a@kjT``:C9`7`I` RSA{Ĩ_[6 @t@? BC*4 CR!R?w*@?*RҡR??$R*R?@[BaZR!`@!RaJ92`! !@t@ ?% C*RҡR?։` @` @}` {CSa7[ck6 @@hP)\Q)?* BC4 CR!RK??'KR*RR!R?s*@?*RҁR??{A*cDkE[C$RSBR! !@(@ ?{A*SBR0 CҁR{S@B[ck`ZB ֪B1BT`*A *BaJ?`@R" BAAr(@*^@?`@ !E ?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?t:A! !@ ?*% C$RR?`2A !F ?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?`A !E ?t"A! !@ ?*% C$RAR?z@ZB@_qTA@ 9E~} hx ?A@B@?h8_kTt@! !@ ?*% C$RR?t@! !@ ?*% C$RR?`@ !E ?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?`"@ !E ?t@! !@ ?*% C$RR?tA! !@ ?*% C$RR?tA! !@ ?*% C$RR?t A! !@ ?*% C$RR?tA! !@ ?*% C$RR?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?`&@ !E ?t@! !@ ?*% C$RR?t*@! !@ ?*% C$RR?t.@! !@ ?*% C$RR?t2@! !@ ?*% C$RR?t6@! !@ ?*% C$RR?t>@! !@ ?*% C$RR?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?t@! !@ ?*% C$RR?t@ !@ ?* C$RR?`A !C ?aV@x `0@bT2@bT`?ATaAx H@" T KJ@"T ?AT`@ !D ?`@ B@arA@?`A?`A??ֿ[BcCkDSA{Ũ_?{S  !$G ?:kQ 9#Dc O@[s ?֡! ?@Ka@` BB cD`?a@ cdGB`? !pA ? cDQR`?`@@/@[R B0C ДB#R! 9@?o??ր@ 0 !4@R ?ր4 @{ @ ZoA?* B4B CR!R?ր#a!@?ր@ !F? ?ր+@2@, !PG ?֠05@71+@;?*;@ BER!R?ր;A;@?;@* BER!R?ր/@;@?;@* BER!R?ր 7@;@?;@* BE!RR?րA!( A?@'T+@;@?;@* BDRARw?ր@?ց@;?* BE;@R!R?ր@?ր@ @ @S7@/@;?*;@ BTDR!R?ր3+@;@7@?*;@ BTDR!R?ր?@%+@?* B FR!R?ր@ %@7"+@?* BC!RR?րa!`@?ր@&A#A T !D`A@;?*;@G@R!R?C@@?J@ T@ ?֡!`?" BCR|v@? ?֡!?ւ@ @@ c8F*`?ր@@?* BAR!R?րa!@ @?ր @@d@9s?**R!R?ր@`@ !B ?ց @@6$@?*RaR? !PA ?o@@ 57@;?* B@RaR?րa!@?֓+@?R*R?ր@?@ ? R[BcCkDsE[BcCkDsERSA{ɨ_ !|F@B#@R D?[BcCkDsE@B!R cD`?[BcCkDsE@!RB @!RB`@ !DCB` !HG@ !hGB+@ @@ BD?8@? !A@B#@R D?t !B@B#@R D?H !PB@B#@R D? !\F@B#@R D? !XG@B#@R D? !E@B#@R D? !F@B#@R D?4 !A@B#@R D? G?  {SF96`@@`@ TbTG ~+x `@TbTG |+}x VF?a*C9A7(?ւ!RB`*C96?֟T`F96`*C97@SA{è_`@ !@ ?qT`@q T R`29`Z@@#`lTt!`F97   `@ !E ?֠5`@ !F ?Ҡ9g~x TeTG +~x`{S@ TF?bSAc{¨C_ARBЃB " cA{C@d@ cD9A`? A@@BҁT{A_ G?   @ @"AkT$@"AkT *B!@"@ _{S@`@ *BAa?`@SA@{è ~C @F9B7_@ B{S[c@ P)ZQ)kK@zTSA R[BcC{Ĩ_ BxC @R@?֗ G R9c baB?x@#R cD`??~R+?C?@ !F ? !lF ?a@!n !_n BGa;8|@@?* 7 ƈF*#RbR?#T B DG@? BL@! @?@ BA!@`!@? ch@**`?֕#@@ B@$@'@?*'@*;@ BG !CRR?ր ' @@?*@ R BG'@ *RRR?ր clAa ! `? !B* ? BA!"@?[A_A_ @B(@ ? !A*GA"@ҡT[A_AR CRR!R/@ @ ?@*$R*Ҡ? !(B ?#@ B@@? !B* ? @ G[_?[_kosw G? G?  {S[ е@ @ ДC?*$RR?v @?$R**Ҁ?a@`@[BSA{è @{ !4FS@ ?֠6`@$@ !`E ?c@a@ B@C@?RSA{è_ !F@B#@R ЄD?t @@ *B  A?ր@@ !|C ?    ?|qR$@z_   { @ !(B ? @{¨_   @F9B7_@ B cD{CS[c'k@ A @@`? BtD @! "@@? !|C ?* G#RR?* 5 @+@@@@ E*? 6@4 9@ Cs^@!n@!|ӗ~@[haja ?*a` ***R!R?s@kTs^G@`4 B#RAs?G@khT A@@BaT{YSZ[[c\k]_ !4@ ДD@ ?֣c`"B"!R?qT@RB#? c\C҂*@@ y`?+@ ХDRB#?֟* Gs?{S[C@C ЄA<@',@< cB=R E?=? Z@)KO @# FR#R?3@?qן9u7@Rq@4 TC rFG +ASWR3S@)R:oA)**?{KzAZKƮ@svSzA|*BwS9C~@3?7@kTCBGBSBWB3R@ !(B ?KBOB A'B@BATC*SA[B{ƨ_RRa@ B4D@?րZ GCGKOSW?' cD{S[ A @@`? !|C ?*@! "@@ BtD@? G*#RR?5@7RW@v@`4 BCRAs?@khT A@@BAT{T*@SU[V_ !4@* D@ ?փc`"B"!R?q`TR@RB#R? G?{S[8@?`9@t@T е*BBc Dk C 9@?`@`?z@: ?*$RR??ց@B!@TcCkDSA[B{Ũ_C BA{S[6@9C@@6 !\Bf9 ?@ 6ARar`@|!4@!`ӡ !|4|K !@ ?* ƜC*RR?` @R !A@"@c!T{BSC[DC_֢@_q`T_qT!@ x"p@  @v@ E@@?7 c\CҢ@s@+y`?֤v@ DB@%!R?   6v@@`@ cDB`$!R`? G?{S[@ @v6@ C?*RR?v.@?R*R?v*@?R*R?` @A96`F9`7SA[B{è_ !A ?`F96`@[BSA{è D   { !DS@ ?t@ !@ ?* C$RR?SA{¨ *B   {S@`[c @,@ C?*RRR!R?`@,@?R*R?` @@@@@sB@Tk ZD 9@ @?ր@A ?֕@5?*$RR?֟a@`B3@T[BcCkDSA{Ũ_[BcC  C{s  ASs@@/bP)cQ)k$@zT A/@@B#T{FSGsKC_[Rc k b @v @c>Hm BxC.@?&= a BGtS>nz @~|@/@~@@?*7 ƈF*#RbR? @T'@?** BG C*RR? !B* ?OYG@9?$R**?@aA` A\AW)@ @ C`w@ G@? X)Y) G)c H)c| wz@| BK!Kc  vAdbbwwdd?@**RAR? @dw@@@@? G)H)yz@!KKuA#bbcyyvdd?R*AR**?G){z@"bbu>@B{Z{VdXd?R*!R**?aA` A}z@!bbu A!}}6dd?R*AR**?G)z@KKs2@ bbdd?!R*R**?s @B`fC9u@7 BB#`"@?֠6c@[HcIkJ C* !B ?ckI)[J)AKK^S?^S**F_S%_S!RR?D`c@[HcIkJ@ B@@? G[c k c? A{CS@@?q`T?q`T G*?*@!7a6 R`9 B\E@?4R A@@BҡT{A*SB_a`9@6 G?   {S@$/F@ !@ ?* C$R*Ҡ?֕.@ !@ ?* C$R*Ҡ?֕2@ !@ ?* C$RR? !G ?`&@@ cA`?`&@ !C ? !|C ?@SA{è D  Cс BA!&{S[C@ @@ Bb BPGc@?``?`?`@`@@@A@$@<@!c@T @ ֞C?* BGR RR!R?t2k@(@?*RR!RR?w hEtR @V?e@&#RfA~~d lBe?ցnQ&7qaT`R@qT vD"" 93CZRC R`aR@?kMT`@b&@@[Xt?ր`@@ ? 5aR@z?k TC@`@@ 4RcFkG !A@"@cҁT{CSD[EC_֡&@#9?־ BG@?*7@ @$@? BG** ֞CRRR?`. !B* ?t.@t? BG'RR *RRR?bcF !PF@B`'#@R D?@ cDB@(!R`?cFkG !D#@B@R D? !F $Dc#k`Cc@;!&"_R? GckC?C{[ !ASs"@o !G@@ ?֠6ck`bC9` 7`fC9 7&@ @ !|G@ ?8qT @&@!@?q%T?q.T:@:@TB@Z@TA@AT@@ !(B ?Uu  @&@6@ CY@?R*RR!R?֗6@g@)?**RRR!R?: @6@ ֞Cy2@?R*RR!R?֘6@?'R*RRR!R?֠&@ @?`fC96&@ Ao@@Ba-T *B{NSO[PsSC/ @B@@T@@A`3aB96a7`B9#7cQkR@ Ao@@B(T{NSO[PsSC_ B DҀ @'@@? BL@! )@?& @֪@&@\U/?* B0F ֞C!RR?'@!@?qT?q T/@@+A@h@AqT[g77@Rw@a~ =tb@)c}A>t~=a3@B+b_xa0qMT +@! @A A%@! @7?@C7@"` **R!R?c@9kAT+@h@g@{!g?kTX+@84/@!p9l@)? BG ***RaR?@?*$RR?@@ clAa ! `? BFAC'@@?U@ !|C ?*7M B DG@? BL@!)@?@S)C|c|@ ch@`?ָH !@fS)@ٚ ? BG  C**RRR? BFB@?@a clA! ! `?@/@ @.@ C@?R*RR!R?֔.@bD)?**RRR!R? R`9@cQkR !@.@ ? C*RRR!R?9@cQkR@@ +B???$R*R?֯ Ao@@BaT@cQkR *Bck G? G?     R__ BA{S @9A@6t@BqT[a.A` @*A!@ Є EB*?a.Av@"@6 c`A`?* c\C#KyC`?*A DСRB-?[E R `@ cDB +R`?R !A@"@cT{CSD_ c`A`?* c\C#KyC`?*A DСRB ,?[E G[?_{S @ !|B@ ?*6@ BB! (@@?` R9B(c (0(!/*@SA{è_ { !0C  ?`@ @{¨ ~C  {S@ !4F ?*6a@`@ B@@?`*SA{¨_    @ *B@@@@AqMTH$T@?kaTAqT@P$@ T@?kaT@?T R_R_ { "D[ N@S ?ց!/?֠@ cXF! B@ !!``??ց!/? @bTSA[B{Ĩ_ G?@ ! _ {SD@5N!3|@ @@ !dD ?֠ @0@ ?a @z!SA{è_a @z!SA{è_ւ@ |{3|@@@ Bx@@@?` z`0@ ?ր !C|B ?a z!SA{è_ {S@ @R@!R&B`@ BE@@?SA{¨ NG@Z9B7_LC BC{c S[ k  @ AA@7 AsRDsfrsƟqğ?kTVDkbTRԢs !R 9DB {Eڢ МD@0 RV@`@T@4@ !|E ?5`@ @AR ?D 4`@RB@CR 1FBDRDVD?֠`%@R,@R!| cD!|@`?ր 7 cER`?@ ?#Tb@@@ BC@?`@R BE@@? cLFҀ @R`?'@0@ ?`@ARB 2 ?`@RB3 ?`@RRB@RBDRDVDCR `?֠ VD .@!|!? "TsL bF}RRsVqT*?/@!69_qT! ? qaT9?qT @"0@_kaT @ 5#@"$@`tXeTP@  ŚT`xcp$ @@  ÚT'@s #$@tXTP@ Ě `TsL@!RB4 ?R !A7@"@caT{GSH[IcJkKC_`@ARB4 ?*sL 9Dw@ R !8B@ ?28 c`A*@ Dc {[E`?RB4 ?ԂBR?٢*`? Zk@RDVD F@? @"@!,@¾?BR?*`?RDVD@?@"@!,@? Gb¢?k@ ДA#NB`B?.B2B`#.B?6Ba:B.? !t@ ?@7 !lF ?NB!o !pC?tC.&_kT@ F2 _? AkT_F`4 @"0Z9X@6"4Z9b74 @"R D"9RB 9qT @?9 DRB9C BA{CSt@+[vhEC@'C ЄB#!@9R?֔"߈ DqR*B9?d@*f@c@B :?e@9*d@9c@9B;?C@ A'@@BT{ERSF[GC_ GC?   !A{S @ G?`@ !E ? !@ ?` A[c!;#?qT !D ?[Eb@ aRgcZ@Bt@gb@ | @>b~`#}TaF A!2a@@B T{CSD_a^@$@>bb |{`#}IT+ g+~}}#`ETR#`T@@ B0C@?5 cGCBR`?@!@94 @!@9A5g gWA_a^~#`ETf#}TRf#Cg Q?@qx @zATB`@B`< cDR`2`?֨f#~MTCgx Q?@qTBR`@ cDB<`2`? !D ?[ECg#`xET/ G[?   A{CS@'@ E*R';?*5'@#@?kaT@ !DF ?u;@ !A'@"@cҁT{ESF_;@@b* G;?{S4 A[u@@ҕ`:Z9k Tcr`@!< Dc =cB`=R? cFt:9sc`?qT cD`?5cF A@@B T{CSD[E_ cxC`?q@T#@qMTqT'@qT BFR@?cFk 9Fs9 ?`>Z9@75s@94`@Rcc$B=? !E ? R`>9 ?s@9qkT`@ARB >?cFkGs@9qkTcFkG`@X4Rc B=? !A ? Gck? { *xQdqT`Q$qT* @{¨_`QqT BD`*4@?`*  @={¨ @ B@* =@?qRdAzMT Rks sҟ* @{¨_*  { CS Ae@@g҅ Ag@@BT{MSN_O3[#R6R`@À< cXA<`?@R`@#a"@Ҟ~@R E;3?`4[O`@ ЄD*B>?[O G[?   #|@ BA{@A@ ?R cXA`?a@`@# eDGRRR? A@@BҡT@{B_ G? ƼA{CS[R@R] IT !DF ? A@@BT{A*SB[C_ cA6R`? G?    BA{CS@@ҡ6 G? cD`?`@BRa@ CRRR? !E ? A@@B!T{ASB_ A@@BT`@Ra@{ARSBR ABR G?   !A{ @$@ap@9!6 A@@cAT{C@@A@ CBP@!`? A@@BҁT{C_ G? CR cA{!?SAe@ ZAt@9?`@R!@?#! A@@BҡT{CSDC_ G?{S[R cXA!@@`? !F ?*@SAR[BR{Ĩ fD   cR G{S[cu@ A"R@#@?5@@ B?@ !DF ? A@@BaT{DSE[F_@`@ G?{S@@&@[cc!R@&@72@`7 C?@ҡfD9`cKKcwb)b)6jD96cyb)b)Bc@@c c|BDRdJ`?[BcCSA{Ĩ FFSA{Ĩ_֠@`@95B97D9*@7@`@zT C?`@@R@9q Є$D#c=c !@ⳀR?& ХA{#@@@!?moggB߅.mf6_@cRRB@ A?`@ffRs?Em A@@BT#@{C_6R G?m?@?mNg/g @AD9c*e6/8mA`@9A6ff?l Rp9Rt9J߅. ~O>@A`@97ff?l*"R   !A{CS @#@AT@?q T? qT?qaT! cXAR@@!`? eD'RRR? A@@BҡT{ASB_AF?q G?  {S A[5a&@V@a`@ A@@BT{CSD[E_`@3 cXA!``?a@ !76@)@@|`@ a@ eDRRR?3@7i3@i G3?C{C A[kaF@?qT 9{FSsRcc# ^ @ @#~zBcFskJTb@ ?`96cFskKT  SDcF A@@BATC@{C[EkGC_ GSc? {S[c @`@9!60@ 1TF*1TkQғ*SA[BcC{Ũ_ַF$@*1aT@8*q TbR# 93CskT@ ? 5#@$@1aT@8#@@ DBAR?ֶF   {[S@ At&@@)t `|`@ EC?D)* 7`@b"@ 1GscRR?C)eD)@a  )a ?)" N2@; @zC!!T*@bFoz`F_k T2;@a !A2`@@B T{DSE[F_at@?|a" N @R7RzC; L @! T`@A` cDRB `?ց*@bFoz`F_k!T;@)tF7R; ՔNzC#`aT`F`@/ cDRB `?z`F G;? { @.@:1 T@T| | ` =< @{¨_`aF )@) QBKKB|B |E  e qmTR!L$P@#X@_k@CzT$T@#\@kCzT!qTR BA{\[9D@6T[9!R*X[9_kTSX9C$@@DAT#4[ev@a‹C3B F7(@?5SD[E3@ A@@BT{C_SD cA`?SD CR*? @RR? cA`? B A@?ֶ F#R?3@SD[E B\C@? GS[3?   {S@@ >@B [cks>@o !B ?` >@ !F ? cG Z[A`?@R!@? 9B ?`@ @R!@? ?`@cC[BkDSA{Ũ *BSA{Ũ_ bC.?`@@R!@?? G?   {S[s|@ A@Ҁ@`+[Cc)`#&cC %O'@=w<=A#@Ҁ@*@RWR(R eEK@K*?ր@R ZA!?@@C D#R?ր@ GҀ?*@4 cDRB `?ր@BR@ cG`?"R`@"P xWC@ YEc!@?ր['@@pA97@Re A@@BTcU{RSS[TsW_ cDRB``?k`@ ZC{@? B @ {O@@?ց!`?` !(B +@=J !F YR! !@b~R? A@@R@!?* еfDRR?@ ?`@R! #@@?'RRR?ր@R!@ ?`@B '@kV`@'@6@)V~} ~@@?@`?@`?@@!5@).|@j5}@qT+@}/y"QR?qLTkkaT@ * ?֙BL}    $@9!"_80_8<S#_8 *B*B`*T k kT@ * ?{@R@#@ G?րc@#@# c`@a?@! $R@? T`@{aR?@@?@T`@{?@{C%R@?֟6T?@`C?T`F2``6Gq-TQ`6.`Z96`@ BG@?w@qTC@`NC!D cXG!!!!}`?r@R BAAr@?@ Ed R?C@*4`@!* BA@?@a?@! R@?@T?@aR!`!@?և@(T?@aR!@"@?@`@Ta`@aG@!R@?!T`@AR BA@?;@RG@a!` @?R C@ !DF ?@`@9W@$R#RRa#! G@@?CR@2_@RaC! !@?@ ECR?@`@@$@`F 6AR@@?@R@!@Ra!@?@Ra!$@@?@Ra!? @@?@aR!@@@?C@@?q@(T@L!ARR?B* ?T@ *Z *AT"R@{G@{!R@?@TC@C?aT@ @1T@@R@?CR#`!@ @7OC C=a|!R|@@? T9 ХF@?@ @ CB`'? {GF`?@CO@C||=@?@ CB`'?@`?@@R@bB # ? @@ @C@?q@ן`?@@$R#RR#a!#@?@R@*CC@%4aR! !@?ցC@]G@Ra!!@?R@Ca!!@?@@O@ lA?@'@ @@R@?#'`6'@A"8 BD@?Z ZD@?809@?@@?8@?@ @`@9!6@?8@?@C<` T@8y; !DF ?@C ZD@#809@?@ @@B"8@?@ @`@974#R@"R#8@?@5 {GF9 ' {GF ХF1 G?@aC! !R@?RO !DF ZD ?@@?809p\9t\9c@<@C{CS A@@`:[96 A@@BT{USVC_[#a!% W`:[97 >Cc @ `@?_@5`@?a:[9a7a@a[WcX R`:9[WcX[W G[c?{CS[@ A@'`@ a&@b"@`@?` T cFB`?`@   (cCK@ F@x@?##@|@@c@# cE`?֣ cXAR@a!@&`?֨ eD#'RRR?ր@ca@?@ cxA#`?!Ra69`@cHK@ !A'@"@cT{ESF[G_֣ cF"Rab:9B`?֣ GcK?֤ $DcKc=a`c!@&ހR?ѡ !A{S[@"@oa@u@: cCa`2@`?֢ B F@?`&@C<@)??? &K!KbG&_k`TbD9"Rd6dGkTcz\9dRB*c6[9?))75B@9z9`7zD96baF A!xao@@Ba4T{NSO[P_bG_kTdGbz\9kT? dGkATdRc6[9?))6 cfke"Rs*@<@@Ad@9Bh@9@`@96FA6@R ZAa!?֘@Ra@!?֨ eD'RERR?ր@!R" RS9;y 0@1T#7c|@'a!&  k@l@9A 7@q T@@ !E ?ց@ 6 !G {F ?S@7 @R@ r*@`?`? c@@# B,@9@?րA6&@@pA96l@F @* ZGqTF`5 c@G?mG@GCG`? 6?Rm:[9  7sQxzC#` "T:[9R6cFq8T HB `CRRk Z{FFs{k-(Td@"N@?ր6 @~@ ?@ @'Ta@c|}@@?@j#2@kF 7@b&@" |!@@!Ka@@K`Xa!*"@!P@7@aRq T DbB@* Ҁ?֠@ cXAR`?@ DRFbB`*?֡"@CRR cD3`?֢ BL@!@?րS !DF ?֠@ҡ"@ cF`?cx AkC% Z[A 9D    @?6@`b?`T`B?`T`z?T`f?@ T`j? T`n?T`r? T`v?`T`v?`T`b?T`f?@ T`j?T`?T`?@T`?T`r?T   `v@9`6`b@96@@A!Rx9y B`C@?֠>@R BAAr*@?֠@Ң BF@? #a!+O=3Ob||||||?RmsQ@cF4@R@B@@af@9bj@9C@N@azD95@@o@@an@9`F (7=3= 6f@{@aB@9=@j@c$@z@avA9@r@x@kA?8 ?ր@qcOkPHkP~@~} @ ?@B Tj7cO< !|D ? BC@? cF`?֢ BL@A!(@?@`@*#RA!`3@?#A!'/@%`@A cXA!`(b#@R`?@zFFKFFK !|D ? BC@? cF`?֢ BL@A!`)@? @ BD?8@?ր@ HB sQ  Gcks?m?֠ Gck?m?@Ұ F$ @!@R   "ң cA{C@d@ң cD90@`?֠ A@@BҁT{A_ր G?   Ѣ BA{S@@@ RyE)+y TF /y?b#cARC_BЃ cAB`?/@y7 A@@BAT{BSC_֡ !B.@ ? G?  DFC{ !ASDT@"@҄`+BRR@?ր@ cXAR`?@ BE@? !A@"@cҡT{DSE_ր G?B!@q! Ú!@@!? _   $R8@}R`@B4?kT8"@@4@#8@4!@Rc?T"@!_kaT R_R_{S*[@@`4@a~{Ӣ Bx@!@t~@@?֠ !C@ ?ֳN3`*@ !DF ?@R E@*_|SA[B{è4|@* !Cz`@ ?{S@@ !D ?ր@ !DF ?֟N@q-TR*sN@?kLTr@@ BE@@?ցv@@ BE@@?SA@{è NG   @Z9B7_LC B{*B[S Ѡ Ac @@#w(@ cD`?ց U) ch@`?ց@ BXE@?ցB@ ˊRkB Fr?kqTA@ Ҋ?#|~@z`T?ce"id ic!xk,Tj@ A#?@5 BB@?B?֠ AA@B!T @SA[B{Ĩ_ G?{Sc t @ A@/Ҁ@ 4[{@CN@G`7Gkl T CS ֮BY9+W ZD H??`7Gk,T:B5`@AR@? R:H??`7Gk-TCAGASAWA[A !E ?֠7 A/A@BT SAcC{ƨ_ցF@C#GG'@ BtA@?`j@ !G ?'@/`.@A @~@ DR==?'@R@ TCAGARCAGA[ACAGA FI)RR? GCGSW[?C{Cc AS @@@҃ cD@!`?[@qTR 2CtsbT` @?@5@ cXAR@`? !DF ?[C A@@BT{ASBcDC_֡ !DF ?[C G[?{[ ASc*k @@@tVU)W@~jz4@ !|E ?5@ cDBaRB,`?c@@abB@4 G~{C[G{***?c~@`(  R cD|Rz`?ր cER`?@ T@@_c(@b BC@?@R BE@?րAң cLFR`?CAGA |GzN7**?@+ !lD ?A+@  @@~@ BER@?9+`zy@)kkTkT@B D*f@B-!R?R !AA"@cTSA[BcCkD{ƨ_CAGAc* ch@**`?֥ FC)RR? R!R@a !8B ?3k GCG? *{cSS[k@ A cD@Ҡ@S`?@_q@T Z[ARs[R{KsbkTa@j@T@"Ra @@@?a@` @ b @Aм М3C!.?@5sG !DF ?ր A@@BT{B*SC[DcEkF_A!.?4@sbkkTsGR Gs?  C"R !AC{3S#@%@ҳ@*4@|@*S@ D?@A)R DsKKCЀ@s~c/BСRB /ssQ*?q A@@BT#@{BSCC_ր G?{S@cv@am@+@`FeW)(g*X)l.Y)Ki"Z)JKdz`) K@ K@4#-R 9A +?֠6GbN@6`F@c@  `F#4@Z97+@{CSD_# E ?`F@bN@c@  `F#5@R BE@@?ր@Z9`6 !C ?ր@{CSD+@LC D   @lk| ЁkЂ@Gz| `AzKT_@%K D K *   с !A#{ GS[ck@"@Ҙ"?vA` @*@*y@Rp@Rz A*`@aA*b A*@R`@Y)RaAb A@`@Y)*aAb A@ @ !E ?u @@xqaTv@!v@ @@ cG`?@@v@Y) DZ)KK?`*@ ctC`?ր A!Ra9@@BT{CSD[EcFkG_ր G?ф A{CS@?q T G*?*@?@!T B\E@?ր A@@BҡT{A*SB_e@4Ra G?{Sck Az @@a@E@B)@C)@e4F@5@;@_C 4[WVsU0E@֢/ D/9yR`@h{ @q?E@ 8A@RB}Rh{@c4?kT 8#b@kATDC@;@k(T@C@4 !C ?@s@@@qT`@BC@B1RR?@O@q T*m@O@kLT@#@R@OqT@O@kT* 7`@BRB2?[DsG0_CR`@C@c/V@B?qB 2RQ?SC*R 5 cAU #`?@@ 5 !lFt ?un !@C+4s 1`@RR5_q\za Tb@$RA @@9 k T9khT04@B!RB5?[GkIsJe>@R|@&R|@Tc@bA@@9 ?DqTT@B DB`AR?ah`B@"?T!?T?T@҃ cF`?5c>@ 4 Ds 9kT[hy @`T@ 5 F @*AR{?`@hy!@T@@`?*@5a@*BB4$R @{?`@c>@9kT4sJZЂ@Z6 @Y@``@!4@?qT  ?qTA!@8Q@?qT ЄGR?R @@qTl T4qT@BСRB:?֠@q@ TqT 4 @A!@>) @#R@ ЄG?ց @@ ЄxE@!?#@?@4RYк Z3Co9>T@@?@5Ac)@RBB>?#@ !E ?@b cHGa`?@aBARB??[GkI A'@@BT@{ESFcH_c[)`@l qT@BRB9?֠@qT@B @B=R?֜@@ @?q TBRB<?֒ D@B @B:R?և@BRB8?ց@BRB9?u `RdBRB`;?r`@ D5@B!RB6?[GkI D?`5C 3 G#R? 5> cXAR`? G @?ր4@BRB7?[GkI@BRB6?[GkI@B cDB`3!R`?քsJ@B cDB 4!R`?z G[k s ?    @B@C@E@D@%E @#%A@O$@D_|_=A@"_aOD_|_=_{cҗ "D[* N@S#?A!`?֠Y9Rq,T`@ kT?? c@#``kaT#@x SA[BcC{Ũ_֠ G?Cс !A{S@ @ғs@`@a@t@A!@ATb@BT š` BE# R@?ր4 A@@BT{BSCC_#@@As TF?#@`o= G#?  @R @|AkTc@e@a_ {S !A(@ ?րA !DF ?րA `@҃ cB@@`?ցA BTG@?@`@SA{è NG   @@Z9B7_LC B{ @ B D@ @!@@?`@@Z97 @{¨_ @{¨LC D@ E   {CSS A[c@'@С !@@*@ ?@ BA @!P@@?  VCA!?R *7k @93 7 FRg)C>=DA@ =4s R@й{=r МD ֆD$G@ 4| R@RzeӀ@*SRrs~sc*? R'/?@#R@@A??SsJ3@BЃ cDB@!R`?R !A'@"@ca T{ESF[GcH_ @A! ?6д ДDR=g)_HA RC =?@A#R@Ҡ??@ cB @!@`?@4A !@ ЄE? RkI@BЃ cDB !R`?ֻkIsJR cDBB` `?@ BTG@@?kIkI Gk s ?   @ @@ fC{S@ ЄG?ց@*7*SA{¨_b@R`"@AA tFBA?*SA{¨_{ !C @ ?b@R`"@AA tFBA? @ R{¨_s҂ BA{ CSC@g҂ B D@?֢ BL@A! @?[& !Au@t* ? 7R Ag@@B#T[O*{MSN_֠@c cAS@`?֠4J) R xS qT `#c=t@ =a@9AB@B @C9{S[@@T @@@[BSA{Ĩ C(@ F?֠@@ CSA[B{Ĩ   @ B @P@  {kS*[cs V+@ AC@!HRArkT T HR`rkT( T@QkT\k T) {D@ E@*a @C@R`?ֳ4z|AR?ր4'@k@TkT@@@R`?@L@5C@D@B!RB`? ^@@BRB `?* !A@"@cT{DSE[FcGkHsI_"@^kTC\*k TB?Qk5 {DR\k G?{S !A[cs#@ҡ*@'@ !@L !xBL ?qT|@ !E Ac 4Gk9:Q#@*4~@?@*@d@?**@@td@?@v9?ATkTR@T'@@) @cC A B? 5 cBB@ `?{'@A@) @cC C?֠4@O@ x D 9CB B F Hma !G. ?a@9 BxC@?A= & FRR?֡@R@!`"@ tF/@AABA?@*@SA[B{Ĩ_{S@ !\Bu*@ ?*t6A@*SA{è_`@s*@@`(@aP)d Q)bKK cA`?`AbaA c4A`?` `AcA Ca !At*@ ?ҀAҠ?րAR !C ?`@a !LG ?` AW@@BaTs@*{KSL[M_@!c c(B!,B@:R`?ր cTB`?`4f@9AB@ CB"? 6@AR E? 4@AR?*`@4E)*w D"B`.?@O3!@_|; C_|?@ cEB` `?` 6 !DF ?@A c4A@B`?ր@ AA >C?a@ 4 BA@?B!B clD==`?6@a`@! /B@ cXF`?r`@*c cD" >CB,`?U`@"c cDB`- >CR`?K !DF >C ?Dc cD" >CB-`?<`@" >CB@/R?4"RB@0?.@@@Ad ЄG?ր`@"RB/?` G?ր G?      Cd A{S[*c!k!`1Bs@  1 E{ {D @'@*B`?֟ T@@@'?5 @*B`?֟!T` A@@B!T{CSD[EcFkGsHC_` G?{ CcSA[s` A@9 @g ҠR@';7 R1XR BG R@?@"@B 2a !DR ?a !@* ?`4@!!3CVX\R?CDLB,F BTC@?q@z#`'T@#q@Rkckbk_LAR@W)R)aR)AR!RG" 4@?@R gR!@q@gR)R)4R) 9g@3#R ?4Ob BC@? B @@?ւ BL@!!`4@?`#O@ ?@5O !(B ?@"@B 5'@?kQ   #` Ag@@B!T@9{MSN[OcPsR_ R1Re@9RBpSO@_q4ҭ T գzv@RO@*?kT@4?qT ֢ECScsO@_kTztR?֡ztbR?֡ztBR?֡zt"R?S@kT@W@k!T@[@kT?@_@k!TO@* @"@B2R`?֙Op@ 5   { `?ր7O@*kT !(BZ` ? @R@"B`6`?@R@9;@ 5 F@a 4u DRRzR Rr࣐R?q`=rRן) |R@Re )k[)|co?րG@5R !(B ?@"@B5'@?kQ=u DR@E҆R[ )kҠ?`@ @kQ'*R@"@B3'@?RҠ? C?a@4 BA@?a@ B F@?`` @A?֠5`@"c cDB@?!R`? c cD"B,!R`?a !(B ?` A7@@BT{GSH[I_`@"c cDB !R`?c cD"!RB@?`?` G?ր G? _  A5_d Є$D{! c!@R?  {S[ce ХA@@a !(B ?b B`C!!.!@?c cDpR`?t v^!!?`63 )@R ?` DR"B`@?c cG!!B`?`4d ЄA!!7+?q- TM) Rb@!#! _qc"xScBR`A?`@ 5a6@R ?AR"B?a6@ R ?R"B ?a6@qR ?/"BR?`@q- T!! ?`!!`?`ZaA?@TCR@?w@q0Tu BД.RbA*`R@?` @?` w@?kT4@"c cDBR`?` AA@Bҡ-TSA[BcC{ƨ_ր R*`{`@)qTA"RB``?a6@`R ?` @c cB!.`?` RA"BД?` TCa@# '  `@*5@ `4@#4kmT @@5y` @@@?r@@z 4@d#@R`?֚@ZA@cTA@`ZC?@C@ 5A'@AR?a@ @T4R?qT` a6@ R ? 2C!!` ?4v ֞B!! ?c@"RB c2cA`?a6@R ? G!! ?4!! ? 5`A` A`@ 2``AAAAAH @_T  4@4_kT   Ղ@_q@AzT@* @ @4 @_kෟ9Rq`@ @*`@?RjTA"RB ?֎@ @@`@*`@`@`j" @C" @T*B @aTwd $Dc! c`! NR?@"c cDB@!R`?!! ?4`@2`/@Ra *)"+@ 7?q@T` @7RkЁK?qMTa H!! ?֠!!@ ?4!! ?`5JAA#AA` @࣐R`=r RRr"|B@!Rced|Ac?AAAA` @ N) R7RkЁ R` G?!#      a !A{CS@ @Ҁ6@@`@qlT`@4a@ !(6bARb@@?`@BRb@d2AqR?qbBRRR?bARR@?@a !A@"@cT{ASB_R` G?   {S@ @!@ ?R @zT@ RO6@!t@9~!Jba"9R~~~~SA{¨_R R@B@@_{S[@`@t@@9`6B@?ւZAb`@`@@q@TqTSA R[B{Ĩ_֠@9@7>@? RSA[B{Ĩ_R"R@?c`F@a !HBx ?wF@@T`@ acC !|D ?b BC@? cF`?b BL@!!=@?`FC{C[` AS@N@a@t@ ?`r@`rqT@@9 6`@@97@`5@a@@t@|A?k Tu F   @dF@Bs^A!R@`?bF@bA@@ ?`F@b BB}Ӡ?@a@B@!QBt@B|Aa?kT` A@@BҁT{ASB[CC_ցA)# ?`@@96A@@R!!`?`@R@)"w DB@>ev@cvuK*?`@@a5#@aO)!@kT!?q!a)#@@Rb BpE@?֗`@*f@"ARB>f?#@` G#?{ !BS ?@ @c cFB`?3@a !(B ?*SA{¨_ր G?   {  @b@B@#4@! BD@?`"@a !(B ?"`@b BpER@?`" @{¨p 2C{[ @Ss sN@c#Ҡ?!!?`? #|?!!@`?@ _Ac cFе`?yObn@wA`*@|c@}<~@@?RR .AbA)@)`@)A)?֢ARR@?֢AR{ASB R[Cd $D! c ! "XR?d $D! c ! BXR?{S@ d@9S@@6!@bAR!<@@?dv@@)A)BKcK?a.@ R ?`*@@-A-?a@R ?a2@ R ?@RbARSA{èd $Dc ! c ! @ bUR?{S[@ D@93@@6`@)‚@@?Ė@`@?@R‚@`@[BSA{Ĩd $Dc ! c`! BQR?{S[c@`B@96@`6fA@ x #Dt ДN@?!! ?@ z@ҿz?!! ?z@ R@?a@?q@T BR? q!T‚@@@?`B@9b@7@QqTR@a@c b@Ē@?‚@R@@?SA[BcC{Ĩ_a@_qb@xRfAcXR@c?b@*Ċ@Ҁ@?֠@"c cBB` `?ҡR?qT` G?‚@@R@@?`B@9b@@6d $Dc !c! #bOR?   {S@@!@u>@A ?A !dGt *B ??@SA{èC{[*Sc8Rk*@` AS@@*a@ ?*d@#!R?a@* ?c@s*!pR`?#c@*pR`?@4#@q fRkT!7R k 6 @z Z#G@?kmT#@?q T`A@@?qTb@**@?a@* ?@9@a !A 9@@Bҡ T{CSD[EcFkGC_c@'tR*`?'@?qTb B D!!|@@?b BL@!!@? dA'@*Ҁ?֠@Rc cD"B``?֠@ cFR`?ּb B D!C!|@@?b BL@!!@?`d@#@*Ҁ?֠@f D@*"B ?a !(B ?C@@6z Z#G֢ @?kT@d D*"B ?@*@ cF`?x@ GC?C` G?   %@@<@a5R_"R{C@g@@@)H)h 9@?{A_{CS[c6@@7@U@@v@9+w @6 @@R@@?y@@F)@?`"@96RA:@R@?@q` T qTqATJ@H)R6@RJ@@?֢@R6@@?@RR@?B@9 6@bA ?֢ZAR"R@?+@ R{ASB[CcD_֢F@!RR@?ւH)RÒ@)R@ RJ@@?֢F@RR@?6PA96{A[CcDSB+@p D`@`@)A)KKH)e2@6@H D ?ֳy@ҖȂ@)RRD $Dc ! c! >R?D $Dc ! c! @>R?   {S@b BTC@5@@?`@96`>@5&@a R@?b B(B@?@SA{è֢"Aa R@?{W "D[v N@S?!!? } =z@ ҝ =ҟz?!!`?@ b @A@#@@?@@a@?q T? q@T?q! Ta@9R46D $Dc ! c ! %R?a@9 R4A7`@97`z@96@SA[B{Ĩ_D $Dc ! c ! B&R?c@9!R4a@96R47`z@96@A96@SA[B{Ĩ_cz@9a7c6R46@A9@7D $Dc !c ! #b%R?` G? B BA{S$@C@@A9s@["7k c%R@ Rb"@9 R@?b@F)@?ָ~@9@9RcV@ 6@@" R!R*`?cV@*6@R`?cV@*6@AR`?֠@qTcV@*6@aR`?֠@qTcV@*6@AR`?bF@R!R@?֠@q T q` TqAT@RhJ@RH)6@J@@?bF@RRu B@?b@R6@@?@"B? @!|` @_T@A9@ 6`@(6bA R@?bAR>@@?e*AR:@"RRR?a&AR ?*bARR@?@RkT"B?cE @A !A@"@cT[D{BSC_֣@RH)R6@J@h@@)@?֭cE@RH)R6@J@hN@@)?֠D D"*B!R?b BDC@?cE@"C cDB !R`?@ Gc?D $Dcc ! c! @(R?D $Dc ! c! /R?  {k@ AS[cRRs6@@@@>@@ @@ ?փ@qT   Ղ@a|@DAhaB@>@ 3L7\@a07@?k 0Tb @_ q T(T@a_q@T_q!0T7aA)@_q#T?qT? q@CzTOAR!R?փ@{kT@R ?@qT q!*TAJ)^@`?֡AR ?փ@RRq T._qIT@@`@9@-6 @_ q T ARfC@%RRRR?փ@k T@~|@ha@@ !9@"@_qT_qT@R! @@R`?փ@kLT@R ?@ A@@B!+T@R{BSCcEkFsG[D_q`TBQ_qH"T@@@a"@@@)`?` @qT@{kTAR{ ?փ@kT@@h@9@A$6 ARA8@%RF@@R`"@R{?փ@k,Tz@@`@9@ 6@`"@ @?ւ@ F)@?փ@aA)!|?q!T7@{GA!@@?փ@kT^_q`TD $Dc !c! #yR?@ ?@R`7@@?փ@q@d@9@6@"@?TAR>@@?A96VAc>@RR*_qSR`?֤@E)F)BKcK?֤v@G)H)BKcK?֡.@ R ?bA9@6^@R:@!Q?q Tb@RBQ_qTf@RcQqTj@RQqT?֡.@@|R ?ւ&@RD ЄpFR@`?֡2@ R ?֡2@@|R ?֢ARR@?? q TT?q T?qT;A`@- ?փ@c c`cXdB j@B`QBXcRqT! f@!`cQ!XbRq(T b@`BQXaR_qHT?qaTCA`@-b A- ?փ@KAR!R?փ@7A`@ ?փ@?A`@-b@ ?փ@D $Dc !c! #BR?D $Dc ! c! bvR?D $Dc !c! #}R?D $Dc ! c! wR?D $Dc ! c! R?D $Dc ! c! {R?D $Dc ! c! zR?@ G?D $Dc ! c! ƒR?D $Dc !c! #yR?D $Dc ! c! ⃀R?B BA{CS[ck s @Z Z#Dt@C@'@?a !L@!! @?2b B,F@?[h@]A_BB8@~b:{j}@?!@!@?/@@A|>@T @?*@"R9?q#T?q$T@*;@a@ ?c@CApR*`?@*c@GpR`?C@5 R@a ! G ?@k*T@9C@?j T!@* ?֟@u>@@!@A ?A !dGT *B ??Ҁ?  @ A'@@Bҁ$T{ESF[GcHkIsJ_G@a ! Gqয়@ ?@k+TG@!!|@@?@!!`@? !d@G@*Ҁ?@E ХD"@BC@?A !(B ?@9C@?j`T@4@?*!R`?b B @?@!!|@@?@!!@??@R)?qTA*@?G@C@@4|@b BlG@?ց@@v^ ?@q-T` |D9 C @ C` FRW JB@B5{ @@@ Q!qTA @*FA@?@ZkT@@!hz@@?*@?֙@ @#T @ ?@@?@`?@@@?@@9@?*@c cB"B``?B*A*BcQ?n@?@GApR*`?G@5@* ?@@ @?*@"R9?qT;@*"7R]@?qT'@*"fRS+@*fRM;@qTR@*$A*Bhc {? @;@ckT@R ?c@d G)cE D?4M@"C cDBR`?4A !(B ?;@ G?֟` G?C c D{ B BAS  c@@_`?a !L@!! @?[ B@DqT@q=T@@?@!!@"@?@s@9"R 9 7@)@ qac @ן R9 @%jT B! T@e6B{7/Aq-TqT@|a@~|A !D ?*I )mE @ 4` B#@ B'` lB+@ @/` 0C@ D3@ HB7k s@#@Zc`4V@j`T@ @?@!!"@?`4F@#@ ?W@CR*k*'@3 ?\@+@***@?*A!Rk@3@FQRv6@cSOfj!R*a9/@{eR9yb>g9d9c 9= ?v7qpS*d@bJ$qT(T`@qAz`T@!v@!@?֠4@!@8@?֠!4@!!@?5@}R`J @?@!!@%@?@(`*$Rb RAR# RPypy93@ ?ַR7@`.&@ ?ֶ&@@B TR@Zc R@ @5kPsQs[@`R@?֠@@*6[@@LR@?[@`R@?3@zR ?C cC"RAR`?@ A_@@BT{L[NSMcO_֡@B B`@@?Bz/Aq,T<qT?@w@BߌqT@B| @@B|@w%RRRga !|D ?B BC@?c cF`?@!!%@?&s@w@!@ qT#@c R@?@ R@@? O@RA) R@*RR@?`@qT ` |7vS@w`@sG  tWy q(T@Gs@Rzx R?@a| x8`@kTw@G R@'@@?@!v@!@?֠5@`R`J @?@!!$@?@ `*bR! R#@RPy!Rpy9@v@!@8@?5  @`R`J @?@!!$@?ր`*!R" Rc@RPyBRpy9v@,B~@J@4@"C cDB&R`?C cD!R"B!`?A !(B ?D Є$D!G@ ! #c" R?@ Gks?ks` G?@$`@d 9p@96D6A @P b@_ { *`@38 @{¨_{cX #DS*w N@[**?!! '?֠O1"R# R@R`Z) u )d bf9cx?!!'?Ob!R_|_=T<AD_|SA[BcC{Ĩ_` G?@@_ @@$ @A@`_ @8@A4@`_  @a ! _  *(RAR_k T)RaR_kTaMR_kR!P DB({[c @@qTSR#qaTRR`@qT@*֢ ?e@*@*a@*@?֠"@kT@s` @qTqaT9R8RR؀RSA#@[BcC{Ũ_D $Dc!(@)R?` G?{S[V Dc**!)>q`TqB +!R?`n@?`4qTT!`*B>qTqD)SA[BcC{Ĩ_{C[**S*B BlBc@k*@s*)*@?_q@z@z!T{ASB[CcDkEsF_֟qm TF@*R @T@AR!KR!R@?֠@{  6F@@R@?*@R@ O)******R ?9kJTkmTR@ O)**eK**R ?֠@ 6F@R@R@?֢F@R{ASBRcDkEsF[C֔~kTt8RD $Dcc`!(+ R?{S[*Bcksc@_xr!T****A4ARR@?F@!RR@?b@* ?ֿqqmT~R~~@t4^@**s**#RR?kTF@RR@?ARR@? RSA[BcCkDsE{ƨ_@R5ARR@?D $Dcc!(+ R?{S@5`@5 Ra2z@~~ctbd"?ր@@@Ra@@?ւ@a" R@?ց@` @ ?@R ?ւ@RSA{¨@RSA{¨_D $Dcc!(`,BR?D $Dcc!( ,"R?   {S@@ R@?ւ~@a2 R@?~~SA{¨_   {S[c*@Ba@@@R@?a@R@R!|?ւ@R@R@?w@@B` @@?փj@*R*`?u@@ASA[BRcC{Ĩ@@Ra@@? @R@R@?փj@*R*`?u@@`"@RqmT   ա@* ?`"@kKTSA[BcC{Ĩ_A?_   {S[A !F ?4V ֞B|@ ?TA_8?qTBhs8R_jaTSA R[B{è_SAR[B{è_@0@@4@_{[@ ASk .A@/Һ@ @Y A@ @! @` $#!!xaHAc _qs Vc@w @@q@SA*AzTH;3O!<|@@&e@@j@C?! ?a@ `z;{z{HcIsK@D@ @@?@SAqTv D R @s"?@SAk,T@ A_ /@@BҁT{FSG[HkJ_RR@ Gc s ?{[@ Ac @_A !EA@@ ?ր.A @C@koT@s@B BXE{@'@?aC ch@!@)`?ր@" ax`*'@A !D C@ ?bC@@?RA?q T@ Bq @ @@ G` C` @@ L@` G#H`~} @j`S?_|_| @@?* @@@?e@B,bF{|S@)@? {<@ @/@@c@g@ )@?@@?@!`-@?@ !{| @#@`?֠6 RAx<?kT@@"Rq$Az*`T Tx|@B BG@?A !(B ?'@bG@@?kAoAAAAA kARAAAA oAA !A_A"@cT [BcC{ƨ_RW@ Gko?` G?C cA{C#S @d@'C cA`?B BAR`:@`B@?#` @OaBAc cG`?A !A'@.cT{EQSF_ G? {@ " BC3@@?`" @{¨p FA !A{S[R"@@9 @ ?@A !@t@ ?`c`@A !D@@ ?ր@k3 @Y 9F@ ?@A4U Cs*| @[ {O@?Ҁ?!/`?@Ҡ?Ҁ?!@0`?@4R|RchRdsr`sr_|!D_?= "B`?>?T @@ ?! !F`R ? `@@'@' @C@;=?=Fb:p@g@@>Ae@g @ez<\^<nnf`g@skT @kBoBsB5wB@!1#c/q @cп. @& DB`3!R?_@[B[_BcBgBwB[B_B@[[B_BcBgB@4#@c/R_@c1R_ G[_cgkosw?[_cg@ Gkosw? @@!5_T@@__  {S @@`@4@@A !D ?A !@ ?`@@!@ ?! !FB ?`"@A !(B ?"SA{¨_{e `GR& ƼAS[sr4RO@CRl@fsr| R>=@Cc4=srC<C<Rn =#`@S=7<B BD#@?q4Oc@ @?|eB@9c@?|dF@9?|?=5f@RR" B?֠@LsK A/@@BҡT{FSG[HcIkJ_sK`B! !F ?A !LB ?@?@?@?: Z+B Gs ?s @ G?   {A !CS(@ ?A !LB ?`@SA{¨P ~C{@ @` @A96`F9@7 @{¨_A !A ?`F96`@ @{¨0 D@0  G @@F9B7_@0 B{@9@ S@" BxC@?A !@s*@ ?* @R{¨P CR@P FE  @0 G{S@$ ЄG?ց@*7*SA{Ĩ_[R`@B?# cD@@`?֣ P)^Q)a@9KK" BxC@?! !G ?# cA**`?@Z@*[BSA{Ĩ_@P ^B  " BA{S[ C@7" B D@?B BL@!?@?@ d@9R`*@B@u# clC`?ր7A !Ct*@ ?A !LBR ?`@A !|C ? A7@@BҡT{G*SH[I_`@A !4F ? 6b@a !@.RD@Gsr($@%@ @(@@CD T@|W?5B @ $ DB#R? 6b@C cXF!`B@B@`?־`@*# cDB`?֨ G?@ G?       {A !CS(@ ?A !LB ?`@SA{¨0 NG@@Z9A7_LC0 D@0 E @@Z9B7_LC0 B@P @   @0 fC{S@D ЄG?a@*7*SA{¨_ւ@# cAAABA`?@sZ*SA{¨_{! !C @ ?b@ @{¨AA0 ABA" BA{S[ C@7" B D@?B BL@!@?@d@9R`*@Bu# clC`?ր7A !Ct*@ ?A !LBR ?`@! !LG ? A7@@Bҡ T{G*SH[I_`@A !A ? 6`@C cEB`? 6b@a !@4RD@Gsr($@%@ @@@CD E|W?5B @ $ DBCR? 6b@C cXF! /B@B@`?ֶ`@*# cDB`?֠ G?@ G?     @_{SRk$ ЄActRҁ@A !B ?E" B@@5 еD@?Q)SZ Z+A*B?s@?s@`4497#@kM;T@V ւCw?w@64# @k;T C!|@@?B B @@+@?! !L@! @?<@?`55@ w; {#D@?@`? @!`?7`:w@qTC@/@7 C'  *{?{@`4!|@@?`?`?5*? &5{9w@9klTB'@/@C@@s@?@+@@? @!@ @?1@@@?* .5s@?q T@ A @C@k`TkkTA3RA BB#'@*C)*#@@?'@*@?B@?@A5*B ?s@?kT#@@C)*?@*'B?@@Ҁ?@a4C@k T@!|@@?@+@@? @! @?#B@?*5@?qMT:Y@{ ?k!T@fRF r}RA)*|*fǜ?@`? @!@?@#@ ck TY@?k TcckkT*B`?w@?qTg7@{/{y@@#*@dT6 @kT@A?T@CT@w@9?k,T/@g@C @kATs@kT4**?*c@B ?LyR{[*Y r@}RA)*|*cfǜ?@k,T*[@B`?w@?qTs@kTBc@B `?*B@?R@! !(B ? AA@B TA*ASAkD{ƨ_@V ւCw?w@5*B?AAc@B` ?AA BBc@B?AAc@B?AA*B`?w@?qTnc@B ?AAc@B ?AA BBc@B G ? @ G?   ! !A{S "@?A !B ?" BC@? [ !R5 еzE?O @B$R;" BA;?=?|@? @R?@ @[5 2D3? 5@4" BC*@?B B @@?" BL@!`@? @@? 5# cDaRB`?@4 zuARҵM@?kT[J[@cA !pA ?A !CC ?! !(B ? A?@@BaT{HSI_# cDaRB`?[@[J# cDARB `?[@[J# cDARB@`?[J G[ [?[ [@ G?{A !C (@ ?! !LB ?`Z@1TA !B ?`Z @{¨_(@0 A!G)   {[" BA C@" B D@?" BL@! @?*@9 @@*# cFRB:`?Bo@z@# clC`?ր79 9+BA !C*@ ?! !LB ?`Z@1TR ? AB@B#TB*BBBBBC[B{Ǩ_A !B ?`Z! !@9 9+B ? @# B@gB B8Es@? ?8SĀRsriR# cDk3`?" BF$Rdsr@?OC chERR`?|@qlTa4_@A5 @{@@ykT@9@k!T @9@kT@9@k T`T" BFR@?֠*@X@1 T@*CCO7BBd@$R'@':ROGsr@â@Ê<#<$ BÉ<È@' DBR?ր @6@*@AR@rbBB B@@?`Z1TO# ?" BlGt@6 G@?a@" BBC cD`?ց@@:@@ y@:+; {3C`?` 5+@5 DaRB`?@@?ր @C@c@  @!R`?ր@@b@C cB`?ր@ @ @bR@?` @ARB@!?` @ARB!?` @ARB"?` @ARB#?` @ARB$?` @ARB%?cCkDSA[B{ƨ_ C@`?45 D+@BR?! !(B ?cCkD! !(B ?` @RB?x @$ $D+c! !b%R? {S[@ ֆF?! !G3@?T C@S?!TT$ ЄXD?4SA@[B{è_ C@ATSA R[B{è_ G@ ֆF?  C@$ ЄXD?@4 C@3t  # cA{C" B$ASd@# cF`?@_1T# cBA!3`? E @ARR?4 *B??! !A@@"@cT{ASB_ G? G? _ѤR{S*[c@9! !A@_@6 D$@w@B&R?R5! !A@"@cT{BSC[DcE_@#*B@@?@C*B@@?`@*B'?@ @`@*B@'?`@*bB? G?  { S  A[ c s@OuA@A@>@ ?*B'1`TRAcq-T (Ok ZB9 9@ :@*@?O 6RA{km T6@**@?O 6`.A~@BHR eR*Ǭ@Fx ==x{+'c?@?*d *x{@<@B|B|@G ?|@j@K|@@?@*I*O1TkN`b ! !0E ?B@s@ ?*B )71T AO@@BaT{J*SK[LcMsO_RkNBA9@6@t@ ?*B(R Gk?C{CS A[ c@7 DAv@A@?@ ?*RB'2@*s@?ր @"?qTC@@ ?*B ) A@@BT{ASB[CcDC_ G?#{S A[ Cc @7 cAA:@5@Cd`?֘B BAR@?ր @# cG*`?ր6>@`A@ ?*B'1 T@qT@sk T*.@!@`?7B@#@ ?*B )1Z !A7@"@c!T{GSH[IcJ_# c`A*@c`? DB)!R? G?{S@@ BCu@@?! !F`" ?a&@`"@?`TF@@?*B*E`"@F@ ?*B*<`@`A! !B ?`@ !dD ?@SA{è_ ѡR{[ ScAC0`?րS`=cA0`?րW<cA0`?ր[IcA#1`?ր_:cAc1`?րc:cA1`?րg 9cA1`?րk@8cAC2`?րo`7cA2`?րs6cA2`?րw5cA#3`?ր{4cA3`?ր3cA3`?րBcA#4`?ր@2cAc4`?ր`1cA4`?ր0cA5`?ր/cA5`?ր.cA6`?ր-cA6`?ր-cA7`?ր ,cAc7`?ր@+cA7`?ր`:cA7`?ր)cAC8`?ր(cA8`?ր'cA9`?ր'cAc9`?ր &cA9`?ր@%cA:`?ր`$cAc:`?ր#cA:`?ր"cA:`?ր@1cA#;`?ր!cAc;`?ր cA;`?ր@cA;`?ր`cA#<`?րcA<`?րcA<`?րcA#=`?րcA=`?րcA=`?ր *cAC>`?ր`cA>`?րcA#?`?րcA?`?ր cA`?րcA`?րcA#`?ր cA!#`?cA!`?cA!``?cA#!`?cA'!`?cA+!``?cA!`?cA! `?cA#!`?cA'!@`?cA/!`?cA+! `?cA3!`?cA7! `?cA;!`?cA?`?րCcA`?րG cA`?րKcA! `?cAO! `?cAS! `?cAW! `?cA[! `?:@A@_R ?*B 1TK E@ xEB`+AR? @`A! !B ? @`??@ cDB @`?- /@ 3@@  !F@R ? @"'@!@" !B ?@7AC@ ?*b")K1T@BRO@c@?@?"" BG#@?R !A@"@cҁT{DSE[FcGkHsI_֠@ cDB1@`?! !F ?AC@ ?*b") E0 E- E3 E: E7 E} E=y@ cDB` @`? G?   {S @!3A`@T@@!@!A ?*# cFB@ `?SA{¨ *B   #R*{S[t@ A@@5 F#@?*B? 72@R@`?*B@? 7a @҃"@+ B$A& cF`?@ !(B ?֗7@*3@?*B?ր7@@?kT`@aR cDB@`?B@C ?*B )?72@R@"`?*B?`7  !B#R R+@B9 B@C ?*B )?+@R !A@"@cT{BSC[D_+@ G+?  {CS[*ck vA A@'"@X@" B @@?" BL@! @?~@O* BBYRtÂ<Á<<@?** B@5R@?*BA9c` @9" BPCW)9@?2`z"` @3 F#?A* A)9 9Fz@?*B ?`7 Az@*`?*B ?7@ Av@RR?*B@ ? 7At@*`?*B ?֠7* 9 9FCC@s@ ?*B ) ?R !A'@"@cT{ESF[GcHkI_ G? G? {S @! !D@ ?7R*SA{¨_`@! !@@ ?@?DqT@q,T`@ cDB`R`?     {  @ !D@@ ?@p@6x@#R@6 @*{¨_`@ ЄDB#RR?R @*{¨_`@ ЄDB@R?RCѢR{Ss@ A@@ @@9|@?@A !D@ ?ցA[kC @5 F ?*B? 7@q Tc9cS"R@*@?*? 7@@@?*?7=_G=>nnf@@_1`T3@R``?*B@?֠7e#@c 84!/B*e'c Ra[EcFkG !A@"@cҁT{CSDsHC_@skTcFЀ@B  cD@`?[ERkG[ERcFkG@ cDB`@`?R G[ck?O{ S  As@_"R`A!@A@@8A[=+=?# cF*B`?R`5` @w !D@ ?#OPA @A" BC @?&w@ A_@@cTs@*{LSM_ Gw?  { CS A[5R@gb@`AB@a!V@4A@! !D@ ?A @$" B@?|#)@?`6O@>Ac=*s@ҟ/=?# cF*B`?q Ag@@cT{M*SN[O_ G?{S @!3A[@`@@5@`*A ?*# cFB `?`@A@ ?*# cFB!`?`@6A@ ?*# cFB "`? @ !D@ ?" BCab@?[BSA{è *B{S*[cksvA A; {@@B@: ZO@B@ `?!"@?֠!~@` @ B7 !D@ ?O*3=k? c@**c`?"R*@9@" BG8Rg;@? ``?!#@?  @` @# cG`? 6 @!3@{z!! !G ?*@7 @O; @%AT@?<_c@C__=?*@# cFB$`?ր7@>@ q`T q T @O*X@<___?|@*@4R@?|@ @@u@@'A?*@B%`?7@ /ARu@?*B'`?` 7B(;@ " BD )@? O*@s&R3AÍ@|R*|/ ХpA'Sc(=|||?*5@H)$@9S@c@rAC7 cA`?֡@"@9A"@! @9_qןa*!* Aw@@B!5T{OSP[QC_ cA_kB *`?cRkt@ B$FA МCA@??*@a!1 !Tu@ !@A ?@ @ @R@}RH)R 4DB?`6 xG?. AR cHF`?'7@ !@ ? !hF ?5) @) ch@`? B(B@? !tF A ?*A`?ր7?*@_1 T c$G>@`?@5@S C>@$RR"R? 5@@ М@!@?!5@8*A!SA ! D ?֠7@ @2 @@ BC!@@?ր@c@?֠5@OrA&@)"R@)=v4=ky@3oyzd x,fe8@+[y_yc$@9cjBZL@*A@` dH DA@*` @AB@ B%($XR?@X@4 (@*` @$XvR?@X@?kTH@4 @*` @$XvR?@H@?kT@@@@?ր@ (E#R>@?`5@ B$@>@@?ր@ BC@@? Aw@@BATcRsT{OkSSP[QC G` @ cDB`>!R`?   Հ@ BC@@? !(B ? !4@t @ ? Dc=B"!R?@ BC@@?A !F ?@22  !4@s @ ? D!RcB"?ր@ BC@@? !4@s @ ?c D!RB"?ր@>@ B$@@?ր@ BC@@?ֱ` @!R cDB?`? !hF ?֟ !4@s @ ?c)` @ cDB@!R`?֎ !4@s @ ?c!RB"?cks G? $Dc@!>`?BR?{S@6@q T[2 еC  Հ@zss?ց6@?kLT[B>@?1T@ BC@?ց:@?1T@ BhG@? sFB`?@ !E A ?րA !(B ?@SA{Ĩ BA{S[C@!` BA@? ДD!RB?ARbB>? BlGt@@?/ !PF ?ր chFbRR`?@ !G ?րsRR@Ac@c@ cB`?&|@ D@R@BR?` 5@?@R G;RRR?@5kDRC@@G ЄG??*@5ocG@?|_q T# е>EcR9Z?k TB@_qAT`@@K<@@?*5K@6 4@@qT TCC`qm T C3 C{kQk T`@kAT`@GRA$R<@R@c )@BRk?@@5O@ !4@t @ ?c` D!RB"?sX !(B ?@ A@@BaT{SST[U_cV@@?qT@71T"R7#9@kWsXR@1@TG@ !4@t @ ?c !4@x @ ? DcB"!R?G@l !(B ?ֻ !4@t @ ? Dc B"!R?kWsX` @ cDBAR`?G@MC@Rq TxeR!P?kT@_kAT` @ DRB ?ր@@?q-TC@aHa @ B4@@?@ ХDc!RB"?@=T* Gcks?ր@@9@?q_@_@ DRB@ D!RB{ @`"@ !LA ?a.@a`*@ ? @{¨ *B{@ !E@@ ?@ BB!@?{_R{_ E{S !0A ? !C ?ր@SA{è_@SA{è E{ !B @ ? @{¨ *B {[ B@AR@?7 B @S*@? BL@! @? !L@* ?SA[B{è_ !B* ?[BSA{è *B G?QqT! X`_R_ cA{[ !FScW`@`R ?֠   B @Ҙ@3 @@? BL@!@?  cdGB `?Oct&!~~td= c$B`? cA!`? c|A3#`?5`@R ХDA)B ?aD! !B ? 73@ A@@BT{BSC[DcE_w6a&@  !F"C ?3@ !4@t@ ? ЄD!RB@ ? G3? G? cA{Ss[#ckbB`@z cFC`? S@sd@@@?@@9Q  @(a@,@ !(B ? A@@BaT{BSC[DcEkF_@ !LA ?a@a @ ? G? !A{C"@$@ !F ? A@@BҁT{A_ G?  "LA_pq@T_ pA__{$@ !E@@@ ?@ BB!@?{_R{_       @!@!@a_ {SA!@!$@ ?ր"Q9 6:BqT[ R ֪BsA?ր:BklT[B"9SA{è_' !A{CS[Rc 9C#@RwAv@ cD@`?¦@9!R`.A_@ ?* G*R? 5*`.A ?* B8A@?S@ R@:"9 4 RRJ]U@Y@4R&\@cF!B`'h@&x@GPFTkT  !T4R!]@` @(@@T@’@9qXz T"@`? 6@ ˊR Fr?kTs? BlGt@@? !PF ?ր chF"RR`?@ !D ?ր @ @"@96!@?qT cA"R*`?ւ@ @D@C@9A@9qןa*!* BE@?ց@ @ BTE!@@?ր @R cBR`?@SA{è_? cARR`? !(B ? !(B ?   @ E@   {S@ !F` @ ?` @ !8D ?ր7SA{Ĩ_[Rc` @ >F? !F ?@ !A ?` @ !DG ?AR 7` @ E!R?? BlG@?rA` @&R?? BlG@?rA` @"?? BlG@?rA` @!?? BlG@?rAb@ GD@C@"@` @[BcCSA{Ĩ` @ !F ?!R $Dcc` !`&' R? {S@ !0E`u@ ?"9`n@1 T6@ ?4@@ ? Dc )B+AR?@`nSA{è_   {S[ck@$@ BCa@+!`@?&@ !C ?`R@ !G ? @@*@1TZ@ ?5&@1Tv@ ?ր 5j@?qT ZD9#)+zs1T6@ ?@4@@ ?AR@?֡j@s?kTr@1T6@ ?@5 ZD9++ `@1T @ ?@4@@ ?AR@?sT@ !0C ?+@SA[BcCkD{ƨ NGց@@ ? Dc )B+AR?@@ ? Dc*B+AR?֘@@ ? Dc)B+AR?ք   cA{CScs d@'@ G@?=!Rj@;=@ =hqAzAT N@s@cSR7=?*5@@4v@`@96@}R|!g cB!"R!!}`?փR)A AkkTkJTq[ğC)kk@kЇ_qBğ_kB_kBІ )?qT Dk Z#)9+Ҡzv1T6@ ?*@4@@ ?AR?ցk@?kT?qMT{,R@+2@R)R@?*@4@@ ?@AR?ր@"C-F@R?րk@kTkIs@1T6@ ?*5sj@!R@hqAzAT2@ R)R@?*4@*@ ?c,B+AR?ր@Rs@B-?րj@[G@ R9 A'@@BAT{ESFcHsJ_ր@}R|!]qT2@R)R@?*@@ ?c )ARB+?ֲj@@!@kaT D G[k ? cA{S[ @3 A@@ҠA`?֓ @R@`&@v@?`91@ T`*@1T`@95`D9 7n@1T2@#R@*R?@5B@n@RC#c?5 @ !0E` ?"9R !A@"@cҡT3@{CSD[E_b@9d@9 c@9g_b`*@b~bj@|||CbCbCb{- @?`4@@ ? Dc 0B+AR?`D96 !4C ? 6@ cDB0aR`?~@br@!@`@`? 4@@ ? Dc@.B+!R?V@b`@a&@`?4@@ ? Dc@/B+!R?@@ ? Dc@2B+!R?@@ ? Dc1B+!R?v G?{S [ c k s A3 @@?` A+@@B?k TB@ B4A@!4_q TR_q T $Dc c`!!2#BKR?R#cO]`A^ "R,@<=<<=<<=;~{CbCbCbCb]p-[x-B!TS @` @ B@!R@B4c`?S @` @ B*(a@@ ?@c5B+AR?S#ct !|DA ? BC@? cF`? BL@!6@? Є$Dc c`!!2@$KR? G?{*S*t@ cA`?7rB9R6SA{¨_ B|E*@?SA{¨_SA R{¨_{ !0E  ?/bo"9O`~B}‚<]aa}<~=Z~J~~~F~n~= @{¨_   !A{CS"@ !A@ ?ր 6 cEB``? 6a@R`@!@ cF`?ր R0 hE? BG@`&!`@?ր@a@ BB@?a@R BHB@?@ !XA ?7 еD` @ BC A@?ր@B`RA@)?`@ARB@9?@R !A@"@caT{ASB_`@ еDB7AR? !LG ? G?{S@ BC A@?qT R@SA{è_*` @LR5@!A1@SA{è_"R !A{S[ s @#@7҂"9@ZH6k Ҟ@#`,T#` $TcJkK B@!@? A7@@B.T{GSH[IsL_֠Ҡ9g~xğ-Tc@+*@C@?4c @w@ ? ХDc!+3c% D? m.g Z#G ak@bAkc `kT@a g@`+@7,@*?@4@b@ ? BAR@?`@@?qTc@`+@@?`4@b@ ? BARc<?`@R3@B>?`@/@*O@B@?R?O@`A?q Ta@/@?Ta `@B?7@Rc`bnA`?`@/@@?TcT`A`@A`RB?/@`A`@A`RB`?/@`@"G9D6@Te !tD ?xwAKq TW 6`k@?Mm `@*RB?ց@~@@7Bb@ b BC_b@!?hT_@ bAc A*@8,@*?ր4@z@ ?c B+AR?`@*RB?ցAj@ !k@7"9cJkK?MmK_qT`k@kKЗ?Mm D*?Mm Gc k ? m?C{S !A[@"@Ҷ@)R7 A@@cҁ T{B*SC[DC_ cA#@ `?Ŧ@S@C @3?5@4@@?k(T@@BA?kT@Ң B|E@?֠9 !C ?1Z`@ cDB!R`?@s@ ? ХD!RcB+? G? {S !A[ "@7@&@a@96@`@@^f 5 A7@@B!!T{GSH[I_֠@ BlD@?>@ !(B ?ֶ>@`@@^f `46c k t @>@@B*@R@ 7,@*`?֠ 5G9*@6J@*n@R?ր5 !A ?֠@@{J-A`@h[@B9B9A(!*!*3979( e T@>S+=#< TC @W@4[A4q@T8q`Thq!T:=:R NR@ Gr@#=?J@*r@*?4@t@ ? DcB+AR?`@5cJkKl@z@ ? DARcB+?ֿG9*7A 4J@*n@R?4@z@ ? DcB+AR?ր. ! .#;;t @6A!R>@_q99/9@@`.@G ƴCR3==?cJkKR@ G*#?֟R[C V:=ZRt`@ DB !R?֎:=zR Nh`@ cDB !R`? Gc k ?    A{S*[@ғqTZqTqT G*S?*@!7a6 R9 B\E@?@5R A@@Ba T{C*SD[E_ր@53R @3R 9@@4^`6+@W63R#3O6 @"A@Q_qlT"h@ j@ 6@,@bĮ@SC3*?ր5@5 cG~R B)`?`:@*a@azAcҀ?4@@ ? DcB+AR?`@Ak+T`@ AkT ch@`?3@3R3@ G3? $Dcc`!Рc`!2 brR?      {S4  !lF ? R`9SA{¨ >E cD{S[6#@ !A"@R,`?֓ Fa@? 5sRs"b@s"7@"a@A`?4@@s@ ? D*B@ !R? cA,Ҁb`?ւ*@@AB@B@@A7@#Rb*R?5S@A!`?R !A@"@cT{WSX[Y_DЄ` @@ ? D!RB@?G9@7 D@*B R!? D*B R? G?{S[+c@# Db ( `v@9@ 7`@1T@ ?@4.@@ ?AR?`@1Tb@ ?`4.@@ ?c )AR?sTBb1Ta6@ ?5a&@aA1T ?4.@@ ? DcB+AR?րB@97 sG`?ր"`?#@[BSAcC{Ũ *Bց.@@ ? DТc )B+AR?@ !E ? $Dcc"c!@*R?  {S@ !lF ?a ! I96? 9 !-x?-0Tc`%!RV@"@GRObW@*/@+Ɇ@cA ?4.@@ ? Dc%B+AR?R !A?A"@cT SA[BcCkDsE{ƨ_ր#' D3*cT@ c{@!(s7s`?7@s@@5@@4A'H$RsRc%s9ksaRc$asARc`$V@#C?@ @/@v@RsAW@?@4.@@ ? Dc`B+AR?֔/@@ ?3@c#B+AR?#@ @J<rT@!@?kAT@?@#>T @= @#<AT BdG@?ր6SA@?kTWA@?kTOA@?kTC@3@B!!Rk;`?;@k@.@@ ? Dc`B+!R?I/@c@ ?3@c"!RB+?9/@@ ?3@c B+!R?+ G?{S [ c @ D@ @s"?aTB96A R@?9SA[BcC{Ĩ_  {S[ @`B9vV@7`@`&@ Rab@?`*@1 Tb@ ?4.@@ ? Dc )B+AR?ց@ ֞B`*B@'?`r@9`6A?ց@r9B'?`@[BSA{è G֡A ? $DCСc*!`&' R?{S[@5@PA !@ ?@@* BB@?ր cA#`? BC A@? 7@bcAA@@A`?b"@ Rr9 R@?b@ R@@?cV@"R!R R`?cV@"RR R`?cV@%RAR R`?cV@%RaR R`?b@R R@?R^@BG)A?ր5dA*@"R!R?ր bAR@?R@ R cBBB(`?R@SA[B{Ĩ_.@@ ? Dc,B+!R?Ѣ BC{S[ At@@@ A@?q-T@`@d.A G҂*@6R?֢A R5R@?cC` @DR cC9*R `?99@` @# c@@`?`2Z !A@"@cҁT{DSE[F_`@(9T.1T  G?   { @a@@!` BC@?a@ @{¨ 2C{! /S @ BtD@@?` !D ?֠6 !@ ?@X6`@t@"R cF`?ր BC@?q T`@9 7d@R@@A``@D C0 BG@?R@SA{è_ր@ !XA ?ր6 k9p4A_S@_kaTA5_ k9p4 8_* _05_   k9p4 _* _ 15_  k9p4 _* _0 15_  k9p4 0_* _*15_  k9p4 _ _1ȯ5_      B@~ r.!I5k|7WONR 'W^vf<NsNKoN*v6Oe!g {{_../mpv/audio/aframe.c:53../mpv/audio/aframe.cframe->av_frame (%s)%dHz %s %dch %ssamples >= 0 && samples <= mp_aframe_get_size(f)../mpv/audio/aframe.c:629av_frame->extended_data../mpv/audio/chmap.cnum <= MP_NUM_CHANNELSsrc[n] < 0 || (to->speaker[n] == from->speaker[src[n]])-emptyunknown%dsp%d%s%sunknownspSpeakers: %-16s (%s) Standard layouts: unknown%d monofc1.0stereofl-fr2.02.1fl-fr-lfe3.0fl-fr-fc3.0(back)fl-fr-bc4.0fl-fr-fc-bcquadfl-fr-bl-brquad(side)fl-fr-sl-sr3.1fl-fr-fc-lfe3.1(back)fl-fr-lfe-bc5.0fl-fr-fc-bl-br5.0(alsa)fl-fr-bl-br-fc5.0(side)fl-fr-fc-sl-sr4.1fl-fr-fc-lfe-bc4.1(alsa)fl-fr-bl-br-lfe5.1fl-fr-fc-lfe-bl-br5.1(alsa)fl-fr-bl-br-fc-lfe5.1(side)fl-fr-fc-lfe-sl-sr6.0fl-fr-fc-bc-sl-sr6.0(front)fl-fr-flc-frc-sl-srhexagonalfl-fr-fc-bl-br-bc6.1fl-fr-fc-lfe-bc-sl-sr6.1(back)fl-fr-fc-lfe-bl-br-bc6.1(top)fl-fr-fc-lfe-bl-br-tc6.1(front)fl-fr-lfe-flc-frc-sl-sr7.0fl-fr-fc-bl-br-sl-sr7.0(front)fl-fr-fc-flc-frc-sl-sr7.0(rear)fl-fr-fc-bl-br-sdl-sdr7.1fl-fr-fc-lfe-bl-br-sl-sr7.1(alsa)fl-fr-bl-br-fc-lfe-sl-sr7.1(wide)fl-fr-fc-lfe-bl-br-flc-frc7.1(wide-side)fl-fr-fc-lfe-flc-frc-sl-sr7.1(top)fl-fr-fc-lfe-bl-br-tfl-tfr7.1(rear)fl-fr-fc-lfe-bl-br-sdl-sdroctagonalfl-fr-fc-bl-br-bc-sl-srcubefl-fr-bl-br-tfl-tfr-tbl-tbrhexadecagonalfl-fr-fc-bl-br-bc-sl-sr-tfc-tfl-tfr-tbl-tbc-tbr-wl-wr22.2fl-fr-fc-lfe-bl-br-flc-frc-bc-sl-sr-tc-tfl-tfc-tfr-tbl-tbc-tbr-lfe2-tsl-tsr-bfc-bfl-bfrautoflfront leftfront rightfront centerlfelow frequencyblback leftback rightflcfront left-of-centerfrcfront right-of-centerbcback centerslside leftside righttctop centertfltop front lefttfctop front centertfrtop front righttbltop back lefttbctop back centertop back rightdldownmix leftdownmix rightwlwide leftwrwide rightsdlsurround direct leftsdrsurround direct rightlfe2low frequency 2tsltop side lefttsrtop side rightbfcbottom front centerbflbottom front leftbfrbottom front rightnanot available../mpv/audio/chmap_sel.clist[0].num == list[1].num../mpv/audio/chmap_sel.c:108../mpv/audio/chmap_sel.c:111id >= 0 && id < MP_SPEAKER_ID_COUNT - %s - #%s - waveext - anything Error decoding audio. Converting libavcodec frame to mpv frame failed. Cannot find codec '%s' in libavcodec... ../mpv/audio/decode/ad_lavc.cctx->avctx && ctx->avframe && ctx->avpktdrc_scale+skip_manualflags2Could not set decoder parameters. Could not open codec. ad_lavcac3drcspdif_dts_hdspdif packet too large. unknown frame type ../mpv/audio/decode/ad_spdif.cspdif_ctx->avpktFailed to parse codec profile. In: profile=%d samplerate=%d spdifdtshd_ratelibavformat spdif initialization failed. spdif_ctx->lavf_ctxspdif mux error: '%s' dts_hd../mpv/audio/decode/ad_spdif.c:393,dts-hddtsspdif_%slibavformat/spdifenc audio pass-through decoderad_spdifrepeat drop dropChange audio speed by dropping/repeating framesFailing on purpose. audio frame expected could not force output channels Force audio formatsratechannelsout-srateout-channelsEncode failed (receive). Audio LAVC, couldn't reallocate context! ac3Couldn't open codec %s, br=%d. encoder didn't specify input frame size Encode failed (send). undefinedCouldn't find encoder %s. Audio LAVC, couldn't allocate context! Audio encoder doesn't list supported parameters. unable set unsupported bitrate %d, using default bitrate (check manpage to see supported bitrates). Skipping unsupported channel layout: %s lavcac3encruntime encode to ac3 using libavcodectospdifminchencoders16floatunexpected frame type Out of memory %.2f stride_in, %i stride_out, %i standing, %i overlap, %i search, %i queue, %s mode initialization failed ../mpv/audio/filter/af_scaletempo.cbytes_needed >= 0scaletempoScale audio tempo while maintaining pitchscaleoverlapsearchspeedpitchnoneboth../mpv/audio/filter/af_scaletempo2.c:209../mpv/audio/filter/af_scaletempo2.cp->pending || eofp->pendingmp_aframe_get_planes(out) == p->data->channelsscaletempo2Scale audio tempo while maintaining pitch (filter ported from chromium)search-intervalwindow-sizemin-speedmax-speed../mpv/audio/filter/af_scaletempo2_internals.c:48../mpv/audio/filter/af_scaletempo2_internals.c:50../mpv/audio/filter/af_scaletempo2_internals.cp->input_buffer_frames >= framesread_offset_frames + dest_frames <= p->input_buffer_frames../mpv/audio/filter/af_scaletempo2_internals.c:516../mpv/audio/filter/af_scaletempo2_internals.c:488p->search_block_index + p->search_block_size <= p->input_buffer_frames../mpv/audio/filter/af_scaletempo2_internals.c:822../mpv/audio/filter/af_scaletempo2_internals.c:824../mpv/audio/filter/af_scaletempo2_internals.c:842u8s32s64doubleu8ps16ps32ps64pfloatpdoublepspdif-aacspdif-ac3spdif-dtsspdif-dtshdspdif-eac3spdif-mp3spdif-truehd??../mpv/audio/out/ao.cwakeup_cbAudio output %s not found! ../mpv/audio/out/ao.c:172requested format: %d Hz, %s channels, %s Device buffer size not set. device buffer: %d samples. using soft-buffer of %d samples. ../mpv/audio/out/ao.c:298../mpv/audio/out/ao.c:305../mpv/audio/out/ao.c:323../mpv/audio/out/ao.c:329nullTrying audio driver '%s' Using preferred device '%s' Failed to initialize audio driver '%s' This audio driver/device was forced with the --audio-device option. Try unsetting it. Channel layouts: result: %s Disabling multichannel output. ../mpv/audio/out/ao.c:472DefaultDefault (%s)%s/%s../mpv/audio/out/ao.c:576../mpv/audio/out/ao.c:508../mpv/audio/out/ao.c:511Autoselect deviceList of detected audio devices: '%s' (%s) !"unreachable"audio-deviceaudio-client-nameaudio-bufferaudio outputs../mpv/audio/out/ao_lavc.caudio frame pts went backwards (%d <- %d), autofixed detected an unexpected discontinuity (pts jumped by %f seconds) could not flush last frame ac->fix_frame_sizelavcaudio encoding using libavcodecillegal state: start() while paused illegal state: set_pause() while not playing Null audio outputao-nulluntimedoutburstlatencybroken-eofbroken-delaychannel-layoutsCould not seek to start, WAV size headers not updated! File larger than allowed for WAV files, may play truncated! audiodump.wavaudiodump.pcmWAVERAW PCMabwbFile: %s (%s) PCM: Samplerate: %d Hz Channels: %d Format: %s Failed to open %s for writing! pcmRAW PCM/WAVE file writer audio outputao-pcmwaveheader../mpv/osdep/threads-posix.h!ret../mpv/audio/out/buffer.cspace >= 0Failed to allocate buffer. start ao fillError writing audio to device. end ao fillstarting AO in=%d space=%d(%d) pl=%d, eof=%d audio end or underrun start audio waitend audio wait!ao->driver->writeao->format == fmt->src_fmtao->channels.num == fmt->channels../mpv/audio/out/buffer.c:255drain timeout underrun during draining ../mpv/audio/out/buffer.c:549ao->driver->startao->driver->resetao->driver->get_stateThe --audio-stream-silence option is set. This will break certain player behavior. Could not determine thread count to use, defaulting to 1. Detected %d logical cores. Requesting %d threads for decoding. ../mpv/common/av_common.c:262../mpv/common/av_common.c:264../mpv/common/av_common.c:275../mpv/common/av_common.c:276Could not set AVOption %s='%s' AVOption '%s' not found. Could not set AVOption %s='%s' (%s) av_log callback called with bad parameters (NULL AVClass). This is a bug in one of FFmpeg libraries used. AVCodecContextAVFormatContext%s: %.*sffmpegvideolibavcodeclibavdevicelibavfilterlibavformatlibavutillibswresamplelibswscaleFFmpeg version: %s FFmpeg library versions: %-15s %d.%d.%d (runtime %d.%d.%d)%s: %d.%d.%d -> %d.%d.%d ../mpv/common/codecs.c:32../mpv/common/codecs.c:61Excluding codecs is deprecated. %s (no decoders) %s%lld%s%02lld%02lld%03d%f%%c%H:%M:%S.%T%H:%M:%S%+.*f%.*f../mpv/common/common.c!size || len < size[%d]../mpv/common/common.c:389../mpv/common/common.c:391x && ycodec '%s' not found. codec for %s has wrong media type %s=%s=%s=%s=%s=%s=%s=%s= [+-]%s%-32s ../mpv/common/encode_lavc.c:159setting metadata value '%s' for key '%s' removing metadata key '%s' no data written to target file error writing trailer video: encoded %lld bytes audio: encoded %lld bytes muxing overhead %lld bytes Closing file failed pipe:1../mpv/common/encode_lavc.c:100encode../mpv/common/encode_lavc.c:104../mpv/common/encode_lavc.cp->muxerformat not found p->muxer->urlCannot add a stream during encoding. ../mpv/common/encode_lavc.c:324../mpv/common/encode_lavc.c:331helpAvailable output formats: --of=%-13s %s Available output format ctx->options: --ofopts=Additionally, for --of=%s: Available output video codec ctx->options: --ovcopts=Additionally, for --ovc=%s: Available output audio codec ctx->options: --oacopts=Additionally, for --oac=%s: Available output video codecs: --ovc=%-12s %s Available output audio codecs: --oac=%-12s %s (failed) {%.1fmin %.1ffps %.1fMB}{%.1fmin %.2fx %.1fMB}{%.1fmin %.1fMB}the option --o (output file) must be specified ../mpv/common/encode_lavc.c:768codec for %s not found p->encoder!avcodec_is_open(p->encoder)%s-%s-pass1.logReading 2-pass log: %s could not read '%s', disabling 2-pass encoding at pass 1 could not open '%s', disabling 2-pass encoding at pass 2 Writing to 2-pass log: %s could not open '%s', disabling 2-pass encoding at pass 1 Opening encoder: %s [%s] ******************************************** **** Experimental codec selected! **** ******************************************** This means the output file may be broken or bad. Possible reasons, problems, workarounds: - Codec implementation in ffmpeg is not finished yet. Try updating ffmpeg. - Bad picture quality, blocks, blurriness. Experiment with codec settings to maybe still get the desired quality output at the expense of bitrate. - Broken files. May not work at all, or break with other software. - Slow compression. Bear with it. - Crashes. Happens. Try varying options to work around. If none of this helps you, try another codec in place of %s. Could not initialize encoder. p->info.codecparp->pktCannot add a stream at runtime. Encoder was reinitialized; this is not allowed. dst->stOpening output file: %s could not open '%s' Opening muxer: %s [%s] Failed to initialize muxer. new data after sending EOF to encoder Encoder trying to write packet before muxer was initialized. dst->st == p->muxer->streams[pkt->stream_index]Writing packet failed. error encoding at %s /dev/stdoutpipe:ofoptsovcovcoptsoacoacoptsorawtsocopy-metadataoset-metadataoremove-metadata[%dA[%dB[?25l[?25h ../mpv/common/msg.croot->status_lines > 0 && root->blank_lines >= root->status_lines[%d%dmallat_ <= (root->num_buffers)[%10.6f] %*s: [%s] tr.len == 0buffer->num_entries../mpv/common/msg.c:479]0;%s%ld %.*s ../mpv/common/msg.c:634!global->log../mpv/common/msg.c:669root->num_buffers == 0../mpv/common/msg.c:1019../mpv/common/msg.c:1023../mpv/common/msg.c:991../mpv/common/msg.c:995../mpv/common/msg.c:1003!*root_logbuf../mpv/common/msg.c:1092log message buffer overflow: %ld messages skipped overflowlog[%8.3f][%c][%s] %sFailed to open log file '%s' Failed to open stats file '%s' fatalwarninfodebugtracestats../mpv/common/playlist.c!e->pl../mpv/common/playlist.c:32../mpv/misc/bstr.h:55../mpv/common/playlist.c:43add->filename!at || at->pl == plat_ <= (pl->num_entries)../mpv/common/playlist.c:72pl && entry->pl == pl!pl->currententry && entry->pl == pl../mpv/common/playlist.c:144direction == -1 || direction == +1pl->current->pl == plpl != source_pl../mpv/common/playlist.c:332add_at >= 0add_at <= pl->num_entries!playlist_parserParsing playlist file %s... playlist../mpv/common/playlist.c:416hlsThis might be a HLS stream. For correct operation, pass it to the player directly. Don't use --playlist. Error while parsing playlist Playlist successfully parsed Warning: empty playlist Discontinuity at timestamp %f. Failed to allocate packet. Failed writing packet. Writing trailer failed. ../mpv/common/recorder.c:136recorderNo streams. Output format not found. matroskaFailed opening output file. ../mpv/common/recorder.c:83../mpv/common/recorder.c:121Can't mux one of the input streams. Can't mux one of the attachments. mimetype%s experimental stream recording feature (can generate broken files - please report bugs)encoding_toolWriting header failed. This is an experimental feature. Output files might be broken or not play correctly with various players (including mpv itself). Source stream misses DTS on at least some packets! If the target file format requires DTS, the written file will be invalid. Stream %d has too many queued packets; dropping. ../mpv/common/recorder.c:418text../mpv/common/stats.c!stats->list.head../mpv/common/stats.c:233strcmp(e->name, name) == 0../mpv/common/stats.c:239!global->stats../mpv/common/stats.c:81../mpv/common/stats.c:121poll-time%.2f mscputimebase../mpv/common/stats.c:213start %send %s../mpv/common/tags.c:41../mpv/common/tags.c:42../mpv/common/tags.cat_ <= (num_keys)at_ <= (tags->num_keys)../mpv/common/tags.c:98../mpv/common/tags.c:99../mpv/common/tags.c:90../mpv/common/tags.c:112%.*s%subeimage/apngapngimage/avifav1image/bmpbmpimage/gifgifimage/jpegmjpegimage/jxljpegxlimage/pngpngimage/tifftiffimage/webpwebpadpcm_agmatrac3patrac9dfpwmeac3mp2../mpv/demux/cue.c:199../mpv/demux/cue.c:200../mpv/demux/cue.c:217../mpv/demux/cue.c:221"performerTRACKINDEXTITLECATALOGCDTEXTFILEFLAGSISRCPERFORMERPOSTGAPPREGAPREMSONGWRITERMESSAGEFailed to write to cache file: %s Could not write all data. Failed to read cache file: %s Could not read all data. Failed to delete cache temporary file. ../mpv/demux/cache.c:96mpv-cache-XXXXXX.datFailed to create cache temporary file. Failed to unlink cache temporary file after creation. ../mpv/demux/cache.cdp->avpacketCannot serialize this packet to cache file. !dp->is_cacheddp->len <= INT32_MAXdp->avpacket->flags >= 0 && dp->avpacket->flags <= INT32_MAXdp->avpacket->side_data_elems >= 0 && dp->avpacket->side_data_elems <= INT32_MAXFailed to seek in cache file. sd->size <= INT32_MAXsd->type >= 0 && sd->type <= INT32_MAXdemuxer-cache-dirdemuxer-cache-unlink-filesimmediatewhendoneno../mpv/demux/demux.cqueue->ds->reader_head != dpcached range %d: %f <-> %f (bof=%d, eof=%d) ...using this range for in-cache seek. adjust seek target %f -> %f dp->keyframe && pts != MP_NOPTS_VALUE!(new_size & (new_size - 1))stream %d: resize index to %zu ../mpv/demux/demux.c:1620queue->num_index < queue->index_sizeexecute seek (to %f flags %d) seek done in->dumperin->dumper_status == CONTROL_TRUENew stream appeared; stopping recording. ../mpv/demux/demux.c:1930../mpv/demux/demux.c:1934../mpv/demux/demux.c:3024../mpv/demux/demux.c:3030in->cacheFailed to retrieve packet from cache. Invalid replaygain value REPLAYGAIN_TRACK_GAINREPLAYGAIN_TRACK_PEAKREPLAYGAIN_ALBUM_GAINREPLAYGAIN_ALBUM_PEAK../mpv/demux/demux.c:2925REPLAYGAIN_GAINREPLAYGAIN_PEAK../mpv/demux/demux.c:2933R128_TRACK_GAINR128_ALBUM_GAIN../mpv/demux/demux.c:2951ds->reader_head != dp../mpv/demux/demux.c:936../mpv/demux/demux.c:942range->streams[ds->index] == queuesubrefresh track %d (%s) can't issue refresh seek refresh seek to %f in->current_range && in->num_ranges > 0in->current_range == in->ranges[in->num_ranges - 1]at_ <= (in->num_ranges)!queue->keyframe_firstold != range../mpv/demux/demux.c:561discarding unseekable range due to stream %d ../mpv/demux/demux.c:3779../mpv/demux/demux.c:3784!sh->ds../mpv/demux/demux.c:977../mpv/demux/demux.c:995in->streams[sh->index] == shopusvorbismp3Failed to create file cache. Stopping recording. Queue not starting on keyframe. lastDisabling backward demuxing. total >= 1BOF for stream %d delaying stream %d for %d restart_pktDemuxer not cooperating. !(ds->back_resuming && ds->back_restarting)Can't demux backward due to demuxer problems. current && in->num_ranges > 0current == in->ranges[in->num_ranges - 1]going to join ranges %f-%f + %f-%f stream %d: ranges unjoinable stream %d: not enough keyframes for join stream %d: non-repeatable demuxer behavior stream %d: no join point found ds->queue == q1ranges joined! ../mpv/demux/demux.c:1801 (cascade)queuing seek to %f%s Cached seek not possible. Cannot seek in this file. seeking stream %d (%s) to packet %f/%f nothing resuming demuxer to end of cached range in->back_demuxingds->back_range_count > 0>1ds && ds->indp->stream == stream->index!dp->nextstream %d: demux refreshing failed Disabling recording. append packet to %s: size=%zu pts=%f dts=%f pos=%li [num=%s size=%zd] (lazy) (refreshing)triggering backward seek to get more packets bytes=%zd, read_more=%d prefetch_more=%d, refresh_more=%d Too many packets in the demuxer packet queues: %s/%d: %zd packets, %zd bytes%s%s Backward playback is likely stuck/broken now. pkt->stream >= 0 && pkt->stream < in->num_streamsEOF reached. ../mpv/demux/demux.c:953../mpv/demux/demux.c:960../mpv/demux/demux.c:961demuxer == in->d_threadindex >= 0 && index < in->num_streamsdemuxer == in->d_usereia_608!in->threadingAvailable demuxers: demuxer: info: %10s %s !sh || dsDiscarding timed metadata without timestamp. demuxer == demuxer->in->d_threaddemuxer == demuxer->in->d_user!in->threading && demuxer == in->d_threaddemuxer read all data; closing stream in->total_bytes == 0demux%sselect track %d ../mpv/demux/demux.c:4075../mpv/demux/demux.c:4082../mpv/demux/demux.c:4114../mpv/demux/demux.c:4118unsafeforcerequestnormal../mpv/demux/demux.c:3272../mpv/demux/demux.c:3296../mpv/demux/demux.c:3303../mpv/demux/demux.c:3317Trying demuxer: %s (force-level: %s) Detected file format: %s (%s) Detected file format: %s Stream is not seekable. Not seekable, but enabling seeking on user request. cuesheetEmbedded cue sheet references more than one file. Ignoring it. Using tag charset: %s mem!demuxTrying demuxers for level=%s. d->cancelDemuxer %s does not exist. dp->stream == ds->index../mpv/demux/demux.c:4603cache-on-diskdemuxer-readahead-secsdemuxer-hysteresis-secsdemuxer-max-bytesdemuxer-max-back-bytesdemuxer-donate-bufferforce-seekablecache-secsaccess-referencesdemuxer-seekable-cacheindexmf-fpsmf-typesub-create-cc-trackstream-recordvideo-backward-overlapaudio-backward-overlapvideo-backward-batchaudio-backward-batchdemuxer-backward-playback-stepmetadata-codepageautocreate-playlistsamerecreateyes../mpv/demux/demux_cue.c:50../mpv/demux/demux_cue.c:259Using CUE charset: %s error parsing input file! .cue.binCUE: Opening as BIN file! Could not open source '%s'! CUE: no tracks found! ../mpv/demux/demux_cue.c:153No file specified for track entry %zd. It will be removed ../mpv/demux/demux_cue.c:183../mpv/demux/demux_cue.c:194CUE: Invalid audio filename in .cue file! CUE: No useful audio filename in .cue file found, trying with '%s' instead! CUE: Could not open audio file! ../mpv/demux/demux_cue.c:196CUE: Can't get duration of source file! ../mpv/demux/demux_cue.c:230../mpv/demux/demux_cue.c:239cueCUE sheetreset to time: %f seek to: %f ../mpv/demux/demux_disc.cp->num_streams == n../mpv/demux/demux_disc.c:135../mpv/demux/demux_disc.c:141ipts: %d %f %f subtitle packet along PTS reset PTS discontinuity: %f->%f opts: %d %f %f +lavf+rawaudio../mpv/demux/demux_disc.c:291cddadvdifodvdnavifo_dvdnavdvd_subtitlepalette: %06xdiscCD/DVD/BD wrapper../mpv/demux/demux_edl.c:150../mpv/demux/demux_edl.c:151../mpv/demux/demux_edl.c:351EDL: Could not open source file '%s'. ../mpv/demux/demux_edl.c:163../mpv/demux/demux_edl.c:628edl# mpv EDL v0 ../mpv/demux/demux_edl.cat_ <= (count)Invalid integer: '%.*s' Invalid time string: '%.*s' ../mpv/demux/demux_edl.c:175../mpv/demux/demux_edl.c:176#;=%,; ,; Too many parameters, ignoring '%.*s'. mp4_dashno_clipinitnew_streamno_chapterstrack_metaglobal_tagslangbyterateforcedUnknown flag: '%.*s' +media_typeInvalid or missing !delay_open media type. codecsamplerateUnknown header: '%.*s' Missing filename in segment.' startlengthtimestampssecondsUnknown timestamp type: '%.*s' layoutthisUnknown layout param: '%.*s' ../mpv/demux/demux_edl.c:313Unknown or duplicate parameter: '%.*s' root->num_parsEDL specifies no segments.' EDL parsing failed. dashmultiError in EDL. memory../mpv/demux/demux_edl.c:404lavfhex../mpv/demux/demux_edl.c:405../mpv/demux/demux_edl.c:414Opening init fragment... Could not read init fragment. memory://Could not demux init fragment. ../mpv/demux/demux_edl.c:445../mpv/demux/demux_edl.c:448Segment %d has unknown duration. Offsets are ignored. Invalid specification for delay_open stream. Opening segment %d... EDL: source file '%s' has unknown duration. EDL: entry %d uses %f seconds, but file has only %f seconds. ../mpv/demux/demux_edl.c:507../mpv/demux/demux_edl.c:511../mpv/demux/demux_edl.c:378Multiple parts with no_clip. Undefined behavior ahead. tl->num_parts == parts->num_partsEdit decision listNot opening '%s' due to --access-references=no. Leaking %d nested connections (FFmpeg bug). Nested option: '%s'='%s' Skipping nested option: '%s' ../mpv/demux/demux_lavf.c:950../mpv/demux/demux_lavf.cat_ <= (priv->num_nested)mp_seek(%p, %ld, %s) %d=mp_read(%p, %p, %d), pos: %ld, eof:%d SUBIDX%.*s.%sFailed to convert channel layout %s to mpv one! ../mpv/demux/demux_lavf.c:617_pipealias_pixicoimage2pipeAssuming this is an image format. Found Dolby Vision config record: profile %d level %d avi../mpv/demux/demux_lavf.c:785microdvdsubfps../mpv/demux/demux_lavf.c:814priv->num_streams == i../mpv/demux/demux_lavf.c:821visual impairedhearing impairedlanguageundvariant_bitratepcm_Some timestamps returned by the demuxer were linearized. A low level seek was requested; this won't work due to restrictions in libavformat's API. You may have more luck by enabling or enlarging the mpv cache. using bullshit libavformat PCM seek hack Seek failed (%s) error reading packet: %s. ...treating it as fatal error. pkt->stream_index >= 0 && pkt->stream_index < priv->num_streamsLinearizing discontinuity: %f -> %f ../mpv/demux/demux_lavf.c:1281ffmpeg:// (forced)udpudp_multicasthttptcp../mpv/demux/demux_lavf.c:975avdeviceMust specify filename in 'format:filename' form Available lavf input formats: %15s : %s Unknown lavf format %s ?#m3u8m3uFound '%s' at score=%d size=%d%s. avifFormat blacklisted. No format found, try lowering probescore or forcing the format. File too big (or error reading) - skip charset probing. Using subtitle charset: %s probesizecouldn't set option probesize to %u analyzedurationdemux_lavf, couldn't set option analyzeduration to %f rtsprtsp_transportvobsub?%s?%.*s%.*s.subAssuming associated .sub file: %s sub_nameav_dict_copy() failed Non-seekable demuxer pre-read hack... ...did read %d bytes. avformat_open_input() failed av_find_stream_info() failed avformat_find_stream_info() finished after %ld bytes. This format is marked by FFmpeg as having no timestamps! FFmpeg will likely make up its own broken timestamps. For video streams you can correct this with: --no-correct-pts --container-fps-override=VALUE with VALUE being the real framerate of the stream. You can expect seeking and buffering estimation to be generally broken as well. lavf://avdevice://av://aacaudio/aacpaudio/aacaudio/mpegsdpmpegmpegtsmxfasfmp4v4l2hevcvvcoggjpeg_pipeaqtitlejacosubmpl2mpsubpjsrealtextsamisrtstlsubviewersubviewer1vplayerwebvttttybinimage2demuxer-lavf-probesizedemuxer-lavf-probe-infodemuxer-lavf-formatdemuxer-lavf-analyzedurationdemuxer-lavf-buffersizedemuxer-lavf-allow-mimetypedemuxer-lavf-probescoredemuxer-lavf-hacksdemuxer-lavf-osub-codepagertsp-transportdemuxer-lavf-linearize-timestampsdemuxer-lavf-propagate-optsnostreamserror reading image file ../mpv/demux/demux_mf.c:55../mpv/demux/demux_mf.c:64invalid filename file not found: '%s' ../mpv/demux/demux_mf.c:89%s is not indirect filelist filelist: %s ../mpv/demux/demux_mf.c:127%s%csearch expr: %s unsupported expr format: '%s' - exactly one format specifier of the form %%[.][NUM]d is expected format result too long: '%s' number of files: %d mf://../mpv/demux/demux_mf.c:220../mpv/demux/demux_mf.c:382file type was not set! (try --mf-type=ext) --mf-type set to an unknown codec! mfimage files (mf)dpxj2cjpeg2000j2kjp2jpcjpegjpgjpsjlsljpegthmdbpcdphotocdpfmphmhdrpcxpnsptxtgatargatifsgisunsunrastrasim1im8im24im32sunrasxbmpampbmpgmpgmyuvppmpnmbrender_pixexrpicpictorqoixfacexwdsvgjxl1.3.1zlib initialization failed. ../mpv/demux/demux_mkv.c:347zlib decompression failed. ../mpv/demux/demux_mkv.c:375lzo decompression failed. lzo decompression buffer too small. missing comp_settings, unable to reconstruct the data. ../mpv/demux/demux_mkv.c:401File has EBML header but no doctype. Assuming "matroska". webmno head found This looks like a Matroska file, but we don't support format version %lu This looks like a Matroska file, but the header has bad parameters ../mpv/demux/demux_mkv.c!mkv_d->index_complete../mpv/demux/demux_mkv.c:1362../mpv/demux/demux_mkv.c:980(unnamed)|+ segment information... | + muxing app: %s | + writing app: %s | + timecode scale: %ld | + duration: %.3fs segment uid invalid length %zu | + segment uid %02xThis is not one of the wanted files. Stopping attempt to open. |+ segment tracks... ../mpv/demux/demux_mkv.c:965| + a track... ../mpv/demux/demux_mkv.c:845| + Track number: %d Missing track number! | + Name: %s | + Track type: Audio Video Subtitle unknown | + Audio track | + Sampling frequency: %f | + Output sampling frequency: %f | + Bit depth: %u | + Channels: %u | + Video track | + Frame rate: %f (ignored) | + Display width: %u | + Display height: %u | + Pixel width: %u | + Pixel height: %u | + Colorspace: %#x | + StereoMode: %s Unknown StereoMode: %lu | + Crop top: %u | + Crop left: %u | + Crop right: %u | + Crop bottom: %u | + Matrix: %s | + Primaries: %s | + Gamma: %s | + Levels: %s | + MaxCLL: %lu | + MaxFALL: %lu | + PrimaryRChromaticityX: %f | + PrimaryRChromaticityY: %f | + PrimaryGChromaticityX: %f | + PrimaryGChromaticityY: %f | + PrimaryBChromaticityX: %f | + PrimaryBChromaticityY: %f | + WhitePointChromaticityX: %f | + WhitePointChromaticityY: %f | + LuminanceMin: %f | + LuminanceMax: %f | + Projection pose yaw: %f | + Projection pose pitch: %f | + Projection pose roll: %f Not supported projection: yaw %f, pitch %f, roll %f | + Codec ID: %s Missing codec ID! ../mpv/demux/demux_mkv.c:899| + CodecPrivate, length %u | + LanguageBCP47: %s | + Language: %s | + Default flag: %d | + Forced flag: %d | + Default duration: 0| + Default duration: %.3fms ( = %.3f fps) ../mpv/demux/demux_mkv.c:493../mpv/demux/demux_mkv.c:510Track number %d has been encrypted and decryption has not yet been implemented. Skipping track. Unknown content encoding type for track %u. Skipping track. Track %d has been compressed with an unknown/unsupported compression algorithm (%lu). Skipping track. ../mpv/demux/demux_mkv.c:546Dolby Vision enhancement-layer playback is not supported. track->dovi_config| + Dolby Vision - version: %d.%d, profile: %d, level: %d, RPU: %d, EL: %d, BL: %d, ID: %d MVC configuration is not supported. Unsupported block addition type: %lx Parsing cues... Malformed CuePoint element |+ found cue point for track %lu: timecode %lu, filepos: %lu offset %lu, duration %lu Discarding potentially broken or useless index. ../mpv/demux/demux_mkv.c:1241Parsing seek head... Invalid SeekHead entry Element 0x%x at %lu. Parsing chapters... ../mpv/demux/demux_mkv.c:1101../mpv/demux/demux_mkv.c:1103User-specified edition: %d Default edition: %d Unable to find expected edition uid: %lu New edition %d Default edition flag: %lu Ordered chapter flag: %lu ../mpv/demux/demux_mkv.c:1146Chapter lacks start time Chapter lacks start or end time, disabling ordered chapters. Multiple chapter names not supported, picking first Malformed chapter name entry Chapter segment uid bad length %d Chapter segment uid %02x Chapter %u from %02d:%02d:%02d.%09d to %02d:%02d:%02d.%09d, %s Parsing attachments... Malformed attachment Attachment: %s, %s, %zu bytes Seeking to %lu to read header element 0x%x. Failed to seek when reading header element. Expected element 0x%x not found ../mpv/demux/demux_mkv.c:284V_MJPEGrv20rv30rv40rv10V_MS/VFW/FOURCCV_REAL/RV10V_REAL/RV20V_REAL/RV30V_REAL/RV40V_UNCOMPRESSEDV_QUICKTIMEInvalid CodecPrivate ../mpv/demux/demux_mkv.c:1653Unknown/unsupported CodecID (%s) or missing/bad CodecPrivate data (track %d). ../mpv/demux/demux_mkv.c:3073../mpv/demux/demux_mkv.c:3190mkv_d->num_blockscreating index until TC %ld no target for seek found This is a broken file! Packets with incorrect keyframe flag found. Enabling workaround. Subtitles use Matroska lacing. This is abnormal and not supported. dovira_288cookatrac3siprwavpack../mpv/demux/demux_mkv.c:2687prores!track->av_parser_codecA_MPEG/L1pcm_f64lepcm_f32leS_VOBSUB../mpv/demux/demux_mkv.c:2296Found the head... segment not found + a segment... (skipping) Failed to seek in file End of file, no further segments. Unexpected end of file (no clusters found) |+ found cluster Stream is not seekable or unknown size, not reading mkv metadata at end of file. mkv metadata beyond end of file - incomplete file? Deferring reading cues. Couldn't seek back after reading headers? All headers are parsed! A_MS/ACMtrack with MS compat audio. A_PCM/INT/LITA_PCM/INT/BIGA_PCM/FLOAT/IEEEA_REAL/A_REAL/ATRCA_REAL/COOKA_REAL/SIPRA_REAL/28_8A_REAL/DNET../mpv/demux/demux_mkv.c:1913../mpv/demux/demux_mkv.c:1915A_AAC/MAIN../mpv/demux/demux_mkv.c:1931SBRA_AC3/A_EAC3/mp1truehdflac../mpv/demux/demux_mkv.c:1971WAVEFORMATEXTENSIBLE_CHANNEL_MASK=alac../mpv/demux/demux_mkv.c:1979tta../mpv/demux/demux_mkv.c:1988Unknown/unsupported audio codec ID '%s' for track %u or missing/faulty private codec data. arib_caption../mpv/demux/demux_mkv.c:2087lavARIB caption profile %02x / %04x not supported. Subtitle type '%s' is not supported. %s / %sStart PTS: %f MatroskaS_TEXT/SSAS_TEXT/ASSS_SSAS_ASSS_TEXT/ASCIIsubripS_TEXT/UTF8S_HDMV/PGShdmv_pgs_subtitleS_HDMV/TEXTSThdmv_text_subtitleD_WEBVTT/SUBTITLESwebvtt-webmD_WEBVTT/CAPTIONSS_TEXT/WEBVTTS_DVBSUBdvb_subtitleS_ARIBSUBA_MPEG/L2A_MPEG/L3A_AC3A_EAC3A_DTSA_AACA_VORBISA_OPUSA_OPUS/EXPERIMENTALA_QUICKTIME/QDMCqdmcA_QUICKTIME/QDM2qdm2A_WAVPACK4A_TRUEHDA_FLACA_ALACA_TTA1A_MLPmlpV_MPEG1mpeg1videoV_MPEG2mpeg2videoV_MPEG4/ISO/SPmpeg4V_MPEG4/ISO/ASPV_MPEG4/ISO/APV_MPEG4/ISO/AVCV_MPEG4/MS/V3msmpeg4v3V_THEORAtheoraV_VP8vp8V_VP9vp9V_DIRACdiracV_PRORESV_MPEGH/ISO/HEVCV_MPEGI/ISO/VVCV_SNOWsnowV_AV1V_PNGV_AVS2avs2V_AVS3avs3V_FFV1ffv1subtitle-prerollsubtitle-preroll-secssubtitle-preroll-secs-indexprobe-video-durationprobe-start-timefull../mpv/demux/demux_mkv_timeline.c:382../mpv/demux/demux_mkv_timeline.c:335Merging timeline part %d with offset %g ms. Match for source %d: %s ../mpv/demux/demux_mkv_timeline.c:208../mpv/demux/demux_mkv_timeline.c:212.mkv../mpv/demux/demux_mkv_timeline.c:517File uses ordered chapters, but you have disabled support for them. Ignoring. File uses ordered chapters, will build edit timeline. ../mpv/demux/demux_mkv_timeline.c:539../mpv/demux/demux_mkv_timeline.c:544This file references data from other sources. Loading references from '%s'. ../mpv/demux/demux_mkv_timeline.c:259Playback source is not a normal disk file. Will not search for related files. Will scan other files in the same directory to find referenced sources. ../mpv/demux/demux_mkv_timeline.c:103../mpv/demux/demux_mkv_timeline.c:134../mpv/demux/demux_mkv_timeline.c:143Checking file %s ../mpv/demux/demux_mkv_timeline.c:572../mpv/demux/demux_mkv_timeline.c:574../mpv/demux/demux_mkv_timeline.cat_ <= (m->num_ordered_chapters)Ordered chapters file with no parts? ../mpv/demux/demux_mkv_timeline.c:596There are %.3f seconds missing from the timeline! Source %s has %s stream with TID=%d, which is not present in the ordered chapters main file. This is a broken file. The additional stream is ignored. Timeline segments have mismatching codec. Timeline segments have mismatching codec info. Source %s lacks %s stream with TID=%d, which is present in the ordered chapters main file. This is a broken file. ../mpv/demux/demux_mkv_timeline.c:628../mpv/demux/demux_mkv_timeline.c:634mkv_ocFailed to find ordered chapter part! .mka.mks.mk3dnull://null demuxerimageerror reading line Could not read directory. Skip recursive entry: %s ../mpv/demux/demux_playlist.c:469../mpv/demux/demux_playlist.c:473Reading plaintext playlist. #EXTM3U#EXTINF:#EXT-X-../mpv/demux/demux_playlist.c:632../mpv/demux/demux_playlist.c:635forcing format by mime-type. =[InternetShortcut][playlist]audio/x-ms-wax[Reference]http://mmsh://%.*sRefRedirecting to mmsh:// audio/x-ms-wmavideo/x-ms-asfvideo/x-ms-afsvideo/x-ms-wmvvideo/x-ms-wmaapplication/x-mms-framedapplication/vnd.ms.wms-hdr.asfv1Playlist filePlaylist diriniplsurltxtaudio/x-scplsaudio/mpegurlaudio/x-mpegurlapplication/x-mpegurldirectory-modedirectory-filter-typeslazyrecursiveignoreCan't read packet. rawvideo: width or height not specified! rawvideo: img size not specified and unknown format! ../mpv/demux/demux_raw.cc->lav_codecpar../mpv/demux/demux_raw.c:256Invalid channels option given. ../mpv/demux/demux_raw.c:173Uncompressed videoUncompressed audiomp-formatrates8u16leu16bes16les16beu24leu24bes24les24beu32leu32bes32les32befloatlefloatbedoubleledoublebeu16u24s24u32Source stream %d (%s) unused and hidden. ../mpv/demux/demux_timeline.c:143../mpv/demux/demux_timeline.c:640../mpv/demux/demux_timeline.c:546../mpv/demux/demux_timeline.c:558../mpv/demux/demux_timeline.c:592../mpv/demux/demux_timeline.c:597../mpv/demux/demux_timeline.cdemux_get_stream(demuxer, p->num_streams - 1) == new../mpv/demux/demux_timeline.c:599tl->dash || tl->delay_open../mpv/demux/demux_timeline.c:615../mpv/demux/demux_timeline.c:628Timeline segments: Total duration: %f --- new parallel stream --- %2d: %12f - %12f [%12f] () source %d:'%s' %s%d (Using pseudo-DASH mode.) switch to segment %d failed to load segment adjust seek target from %f to %f timelinetimeline segments../mpv/demux/ebml.ctype->type == EBML_TYPE_SUBELEMENTSlevel < 8 %.*sParsing element %s Error parsing subelement id Error parsing subelement length Too many EBML subelements. Subelement content goes past end of containing element Subelement headers go past end of containing element Too many subelements. ../mpv/demux/ebml.c:401../mpv/demux/ebml.c:405../mpv/demux/ebml.c:409../mpv/demux/ebml.c:413../mpv/demux/ebml.c:417../mpv/demux/ebml.c:421../mpv/demux/ebml.c:426Error parsing subelement Next subelement content goes past end of containing element, will be truncated %.*sIgnoring Void element size: %lu %.*sIgnoring CRC-32 element size: %lu Ignoring unrecognized subelement. ID: %x size: %lu Another subelement of type %x %s (size: %lu). Only one allowed. Ignoring. %.*sParsing %x %s size: %lu value: subelements uint invalid length %lu uint %lu sint invalid length %lu sint %ld float invalid length %lu float %f Not reading overly long string element. string "%s" Not reading overly long EBML element. binary %zd bytes ebml_id broken value ebml_id %x Invalid EBML length at position %ld Corrupt file detected. Trying to resync starting from position %ld... Cluster found at %ld. Unexpected end of file - partial or corrupt file? EBML element with unknown length - unsupported Element too big (%lu MiB) - skipping ../mpv/demux/ebml.c:611Error parsing element %s EBMLEBMLVersionEBMLReadVersionEBMLMaxIDLengthEBMLMaxSizeLengthDocTypeDocTypeVersionDocTypeReadVersionCRC32VoidSegmentSeekHeadSeekSeekIDSeekPositionInfoSegmentUIDPrevUIDNextUIDTimecodeScaleDateUTCTitleMuxingAppWritingAppDurationClusterTimecodeBlockGroupBlockBlockDurationReferenceBlockDiscardPaddingBlockAdditionsBlockMoreBlockAddIDBlockAdditionalSimpleBlockTracksTrackEntryTrackNumberTrackUIDTrackTypeFlagEnabledFlagDefaultFlagForcedFlagLacingMinCacheMaxCacheDefaultDurationTrackTimecodeScaleMaxBlockAdditionIDNameLanguageLanguageBCP47CodecIDCodecPrivateCodecNameCodecDecodeAllCodecDelaySeekPreRollVideoFlagInterlacedPixelWidthPixelHeightDisplayWidthDisplayHeightDisplayUnitPixelCropTopPixelCropLeftPixelCropRightPixelCropBottomFrameRateColourSpaceStereoModeColourMatrixCoefficientsBitsPerChannelChromaSubsamplingHorzChromaSubsamplingVertCbSubsamplingHorzCbSubsamplingVertChromaSitingHorzChromaSitingVertRangeTransferCharacteristicsPrimariesMaxCLLMaxFALLMasteringMetadataPrimaryRChromaticityXPrimaryRChromaticityYPrimaryGChromaticityXPrimaryGChromaticityYPrimaryBChromaticityXPrimaryBChromaticityYWhitePointChromaticityXWhitePointChromaticityYLuminanceMaxLuminanceMinProjectionProjectionTypeProjectionPrivateProjectionPoseYawProjectionPosePitchProjectionPoseRollAudioSamplingFrequencyOutputSamplingFrequencyChannelsBitDepthContentEncodingsContentEncodingContentEncodingOrderContentEncodingScopeContentEncodingTypeContentCompressionContentCompAlgoContentCompSettingsBlockAdditionMappingBlockAddIDValueBlockAddIDNameBlockAddIDTypeBlockAddIDExtraDataCuesCuePointCueTimeCueTrackPositionsCueTrackCueClusterPositionCueRelativePositionCueDurationAttachmentsAttachedFileFileDescriptionFileNameFileMimeTypeFileDataFileUIDChaptersEditionEntryEditionUIDEditionFlagHiddenEditionFlagDefaultEditionFlagOrderedChapterAtomChapterUIDChapterTimeStartChapterTimeEndChapterFlagHiddenChapterFlagEnabledChapterSegmentUIDChapterSegmentEditionUIDChapterDisplayChapStringChapLanguageChapLanguageBCP47ChapCountryTagsTagTargetsTargetTypeValueTargetTypeTargetTrackUIDTargetEditionUIDTargetChapterUIDTargetAttachmentUIDSimpleTagTagNameTagLanguageTagLanguageBCP47TagStringTagDefault../mpv/demux/packet.c:56../mpv/demux/packet.clen <= dp->lenhdrplus../mpv/demux/timeline.c:13../mpv/filters/f_async_queue.cq->conn[0] == fdiscarding frame due to async reset ../mpv/filters/f_async_queue.c:265q->conn[1] == fq->samples_size >= 0count >= 0cfg.sample_unit == AQUEUE_UNIT_FRAME || cfg.sample_unit == AQUEUE_UNIT_SAMPLES../mpv/filters/f_async_queue.c:73../mpv/filters/f_async_queue.c:74mp_filter_get_info(f) == &info_in!q->conn[slot]async_queue_outasync_queue_inUnexpected AVFrame/imgfmt hardware context mismatch. Converting %s[%s] -> %s[%s] Failed to create HW uploader for format %s HW-uploading to %s Format %s is not supported by %s HW-downloading from %s cannot copy surface of this format to CPU memory error creating conversion filter can't find video conversion for %s Converting %s -> %s Sub-filter requires draining but we must destroy it now. ignoring request to resample non-PCM audio for speed change inserting resampler ../mpv/filters/f_autoconvert.c:76../mpv/filters/f_autoconvert.c:77../mpv/filters/f_autoconvert.c:115../mpv/filters/f_autoconvert.c:131../mpv/filters/f_autoconvert.c:133autoconvertconverttffbffvideo input required! ../mpv/filters/f_auto_filters.c!p->sub.filterdeintparityvdpauppd3d11vppmodesend_fieldbwdif_cudabwdif_vulkanmotion-adaptivevavppcreating deinterlacer failed no deinterlace filter available for format %s bwdifVideo rotation with this format not supported anglerotw(%f)ohroth(%f)rotateInserting rotation filter. could not create rotation filter removing audio speed filter adding scaletempo2 adding drop could not create filter autoaspeedautorotate../mpv/filters/f_decoder_wrapper.cp->decf == fUninit decoder. Decoder format: %s Using bitstream aspect ratio. Forcing user-set aspect ratio. Using container aspect ratio. Invalid container crop %dx%d+%d+%d for %dx%d image !p->dec_thread_lockp->dec_thread_lockp->public.f == fp->dec_dispatchdec/?dec/videodec/audio../mpv/filters/f_decoder_wrapper.c:386Audio decoders:../mpv/filters/f_decoder_wrapper.c:379Video decoders:audio-spdifChoices: ac3,dts-hd,dts (and possibly more) ../mpv/filters/f_decoder_wrapper.c:434Codec list:Opening decoder %s Selected decoder: %s - %sDecoder init failed for %s Failed to initialize a decoder for codec '%s'. invalid frame type from demuxer !p->new_segmentp->packet.type == MP_FRAME_PACKET || p->packet.type == MP_FRAME_EOFunknown frame type from decoder Reversal queue overflow, discarding frame. ../mpv/filters/f_decoder_wrapper.c:955No video PTS! Making something up. Using %f FPS. Ignoring further missing PTS warnings. Couldn't reverse audio frame. value %f audio-pts-errInvalid audio PTS: %f -> %f !vdContainer reported FPS: %f Container FPS forced to %5.3f. Use --no-correct-pts to force FPS based timing. !adcould not consume packet decode_wrapperdecodecorrect-ptscontainer-fps-overridevdvideo-rotatevideo-aspect-methodvd-queuead-queuevideo-reversal-bufferaudio-reversal-bufferbitstreamcontainerenablemax-secsmax-samplesunset EOF on stream %d demux_inunsupported frame type no hw upload format found input format is not an upload format upload %s -> %s[%s] failed to create frame pool failed to upload frame Could not copy hardware frame to CPU memory. no hw context hwdec '%s' does not report hwframe constraints. Using static metadata. no support for this hw format ../mpv/filters/f_hwtransfer.c:377../mpv/filters/f_hwtransfer.c:380looking at format %s/%s supports %s (a hardware format) ../mpv/filters/f_hwtransfer.c:422../mpv/filters/f_hwtransfer.c:423../mpv/filters/f_hwtransfer.c:424../mpv/filters/f_hwtransfer.c:443 vo accepts %s ../mpv/filters/f_hwtransfer.c:449 supports:../mpv/filters/f_hwtransfer.c:462../mpv/filters/f_hwtransfer.c:466 not supported by VO:failed to allocate pool ../mpv/filters/f_hwtransfer.c:497../mpv/filters/f_hwtransfer.c:500../mpv/filters/f_hwtransfer.c:506../mpv/filters/f_hwtransfer.c:507../mpv/filters/f_hwtransfer.c:517../mpv/filters/f_hwtransfer.c:521hardware format not supported Unable to find a compatible upload format for %s Hardware conversion: %s -> %s hwdownloadhwuploadunknown media type %s_%smore than one pad with label '%s' pad '%s' changed type or direction filter pad '%s' got added later? ../mpv/filters/f_lavfi.c:225../mpv/filters/f_lavfi.c:231../mpv/filters/f_lavfi.c:233../mpv/filters/f_lavfi.c:235../mpv/filters/f_lavfi.c:236Available libavfilter filters: %-16s %s --vf=lavfi=[gradfun=20:30] This lists %s->%s filters only. Refer to https://ffmpeg.org/ffmpeg-filters.html to see how to use each filter and what arguments each filter takes. Also, be sure to quote the FFmpeg filter string properly, e.g.: "%s" Otherwise, mpv and libavfilter syntax will conflict. ../mpv/filters/f_lavfi.cc->tmp_framecould not send EOF to filter pad->dir == MP_PIN_INunknown frame %s format change on %s abufferabuffersinkbuffersinkmpv_sink_%spad->pending.type == pad->type../mpv/filters/f_lavfi.c:457mpv_src_%scould not initialize filter pads --af=lavfi=[volume=0.5]!c->graphc->graphfilter '%s' not found or failed to allocate filter failed to initialize parsing the filter graph failed Configuring hwdec_interop=%s for filter graph: %s failed to configure the filter graph Filter graph: pad->bufferFilter is stuck. This is a FFmpeg bug. Treating as EOF. could not use filter output error on filtering (%d) c->initializedeof state changed on %s speed changing filters before libavfilter are not supported and can cause desyncs out of memory or unsupported format could not pass frame to filter recovering all eof mismatching media type exactly 2 pads required 1 input and 1 output pad required boolch_layoutsamplefmtpixfmtimagesizeuint64dictbinaryrationalint64Filter '%s' not found. Filter '%s' is not usable in this context (wrong media types or wrong number of inputs/outputs). Options: <%s> %-10s %-12s %s %3s%-23s %s Total: %d options If libavfilter filters clash with builtin mpv filters, prefix them with lavfi- to select the libavfilter one. ../mpv/filters/f_lavfi.c:1131../mpv/filters/f_lavfi.c:1133lavfi-bridgelibavfilter bridge (explicit options)optshwdec_interoplavfilibavfilter bridgegraphfix-pts../mpv/filters/f_output_chain.c*speedfilter input EOF filter output EOF ../mpv/filters/f_output_chain.c:268p->num_all_filters > 0disu->nameCannot convert decoder/filter output to any format supported by the output. Disabling filter %s because it has failed. [%s] %s [%s] (%sabled) p->public.ao_needs_update!p->aouserdeint../mpv/filters/f_output_chain.c:543../mpv/filters/f_output_chain.c:578../mpv/filters/f_output_chain.c:581User filter list: %s.%02d %s (%s) (empty) !vf!af../mpv/filters/f_output_chain.c:709../mpv/filters/f_output_chain.c:653../mpv/filters/f_output_chain.c:660userspeed../mpv/filters/f_output_chain.c:672../mpv/filters/f_output_chain.c:722../mpv/filters/f_output_chain.c:735output_chainuser_filter_wrapper../mpv/filters/f_swresample.cnum_planes <= MP_NUM_CHANNELSsrc >= -1 && src < num_planesnext_na < num_planesError on resampling. %dHz %s %s -> %dHz %s %s unsupported conversion: %s -> %s filter_sizephase_shiftlinear_interpcutoffrematrix_maxvalRemix: %s -> %s Unsupported input channel layout %s. Fudge: %s -> %s in_chlayoutout_chlayoutin_sample_rateout_sample_ratein_sample_fmtout_sample_fmtCannot open Libavresample context. libswresample failed to initialize. Unsupported frame type. !p->inputFrame with invalid format unsupported format change, reinitializing resampler ../mpv/filters/f_swresample.c:666swresampleaudio-resample-filter-sizeaudio-resample-phase-shiftaudio-resample-linearaudio-resample-cutoffaudio-normalize-downmixaudio-resample-max-output-sizeaudio-swresample-ovideo frame expected swscale../mpv/filters/f_utils.cmissing >= 0filters[n]->num_pins == 2fixed_aframe_sizedummynopframe_duration../mpv/filters/filter.c:140../mpv/filters/filter.c:142../mpv/filters/filter.cin->manual_connection->in->runner == runnerout->manual_connection->in->runner == runnerin->dir == MP_PIN_INout->dir == MP_PIN_OUT!cur->within_conn && !cur->other->within_conn!cur->conn && !cur->other->conn!cur->data_requested!cur->data.type!cur->other->data_requested!cur->other->data.typecur->owner->in->runner == runner../mpv/filters/filter.c:714!p->other->data_requested!p->other->data.typedropping frame due to pin disconnect dropping request due to pin disconnect !p->data.type!p->data_requestedindex >= 0f == r->root_filter-><-(within)(request) [%p] %s %s c=%s[%p] f=%s[%p] m=%s[%p] %s %s %s p->owner == fat_ <= (r->num_pending)at_ <= (p_in->num_children)!f->in->parentr->filteringfilter == r->root_filter!r->filtering!r->recursiver->recursive == pp->dir == MP_PIN_IN!p->within_connlosing frame on %s p->conn->data.type == MP_FRAME_NONEp->dir == MP_PIN_OUTp->conn && p->conn->manual_connection!mp_pin_out_has_data(p)src->dir == MP_PIN_OUTdst->dir == MP_PIN_INsrc->user_conn == dstdir == MP_PIN_IN || dir == MP_PIN_OUTname && name[0]../mpv/filters/filter.c:619../mpv/filters/filter.c:628../mpv/filters/filter.c:637../mpv/filters/filter.c:638!mp_filter_get_named_pin(f, name)../mpv/filters/filter.c:800../mpv/filters/filter.c:804../mpv/filters/filter.c:806params->global../mpv/filters/filter.c:817../mpv/filters/filter.c:831!rootroot == r->root_filter%s[%p] (%s[%p]) root../mpv/filters/frame.cframe.datapacketeoflavfi-../mpv/filters/user_filters.cframe_type && obj_listCreating filter '%s' failed. video filtersaudio filtersCommand name missing. Command '%.*s' not found. Command %s: required argument %s not set. ../mpv/input/cmd.ci <= cmd->nargs../mpv/input/cmd.c:146 #;no-osdBroken string escapes: ...>%.*s<. Unterminated double quote: ...>%.*s<. Unterminated single quote: ...>%.*s<. `Unterminated custom quote: ...>%.*s<. ../mpv/input/cmd.c:381Command %s: error in argument %d. Command %s: argument %d can't be parsed: %s. ../mpv/input/cmd.c:426Command %s has trailing unused arguments: '%.*s'. Command was defined at %s. Command %s: has only %d arguments. Command %s: argument %s was already set. Command %s: argument %s can't be parsed: %s. Command %s: argument %s has incompatible type. ../mpv/input/cmd.c:196../mpv/input/cmd.c:293Command %s: this command uses a variable number of arguments, which does not work with named arguments. _flagsCommand %s: no argument %s. ../mpv/input/cmd.c:472../mpv/input/cmd.c:481../mpv/input/cmd.c:516../mpv/input/cmd.c:538../mpv/input/cmd.c:541../mpv/input/cmd.c:562(NULL)%s (NULL) %s, flags=%d, args=[%s=%s[%-20.20s %s%s=%s%s...osd-barosd-msgosd-msg-barosd-autoexpand-propertiesrawrepeatablenonrepeatablesyncreplaceappend-playsub-addloadfileinsert-next-playinsert-nexttext/uri-listtext/plain;charset=utf-8text/plain../mpv/input/event.c:85../mpv/input/input.cat_ <= (ictx->num_sources)input../mpv/input/input.c:388../mpv/input/input.c:394at_ <= (ictx->num_active_sections)bs->num_binds >= 1CLOSE_WIN was received. This pseudo key can be remapped too, but --input-test will always quit when receiving it. quitKey %s is bound to: %d. '%s' (invalid) in section {%.*s} in %s (default)(nothing)show-textNo key binding found for key '%s'. key '%s' -> '%s' in '%.*s' Invalid command for key binding '%s': '%s' builtin%s:%ddefault-bindings Broken line: %.*s at %s Unfinished key binding: %.*s at %s Unknown key '%.*s' at %s num_keys <= MP_MAX_KEY_DOWN../mpv/input/input.c:1364add: section='%.*s' key='%s'%s cmd='%s' location='%s' Can't open input config file %s. Parsing input config file %s Input config file %s parsed: %d binds Error reading input config file %s input: switch section %.*s -> %.*s down upkey code=%#x '%s'%s%s release all release all touch mouse move %d/%d -> %d/%d begin-vo-draggingTouch point %d update (id %d) %d/%d Touch point %d add (id %d) %d/%d ../mpv/input/input.c:1006Touch point %d (id %d) already exists! Treat as update. Touch point id %d does not exist! at_ <= (ictx->num_touch_points)Touch point %d remove (id %d) enable section '%.*s' ../mpv/input/input.c:1246active section stack: %.*s %d ../mpv/input/input.c:1503../mpv/input/input.c:1512../mpv/input/input.c:1513input.conf../mpv/input/input.c:1669keybind-commandadd:section='%.*s' key='%s'%s cmd='%s' location='%s' ownercmdis_weakprioritycommentkey!src->in->init_donesrc->in->thread_runningmp_thread_id_equal(mp_thread_get_id(src->in->thread), mp_thread_current_id())#%d../mpv/input/input.c:1763../mpv/input/input.c:1768../mpv/input/input.c:1869Dropping overlong line. <>input-confinput-ar-delayinput-ar-rateinput-keylistinput-cmdlistinput-default-bindingsinput-builtin-bindingsinput-builtin-dragginginput-testinput-doubleclick-timeinput-right-alt-grinput-key-fifo-sizeinput-cursorinput-vo-keyboardinput-media-keysinput-preprocess-wheelinput-touch-emulate-mouseinput-dragging-deadzonewindow-dragging../mpv/input/ipc.c:44../mpv/input/ipc.c:46../mpv/input/ipc.c:47request_idmalformed JSON received: '%s' 'request_id' must be an integer for async commands. 'request_id' must be an integer. Using other types is deprecated and will trigger an error in the future! get_versionobserve_property_stringenable_eventdisable_eventShift%s+0x%x../mpv/input/keycodes.c:368../mpv/input/keycodes.c:369CtrlAltMetaSHARPIDEOGRAPHIC_SPACEENTERTABBSDELINSHOMEENDPGUPPGDWNESCPRINTRIGHTLEFTF1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16F17F18F19F20F21F22F23F24KP0KP1KP2KP3KP4KP5KP6KP7KP8KP9KP_DELKP_DECKP_INSKP_HOMEKP_ENDKP_PGUPKP_PGDWNKP_RIGHTKP_BEGINKP_LEFTKP_DOWNKP_UPKP_ENTERKP_ADDKP_SUBTRACTKP_MULTIPLYKP_DIVIDEMBTN_LEFTMBTN_MIDMBTN_RIGHTWHEEL_UPWHEEL_DOWNWHEEL_LEFTWHEEL_RIGHTMBTN_BACKMBTN_FORWARDMBTN9MBTN10MBTN11MBTN12MBTN13MBTN14MBTN15MBTN16MBTN17MBTN18MBTN19MBTN_LEFT_DBLMBTN_MID_DBLMBTN_RIGHT_DBLGAMEPAD_ACTION_DOWNGAMEPAD_ACTION_RIGHTGAMEPAD_ACTION_LEFTGAMEPAD_ACTION_UPGAMEPAD_BACKGAMEPAD_MENUGAMEPAD_STARTGAMEPAD_LEFT_SHOULDERGAMEPAD_RIGHT_SHOULDERGAMEPAD_LEFT_TRIGGERGAMEPAD_RIGHT_TRIGGERGAMEPAD_LEFT_STICKGAMEPAD_RIGHT_STICKGAMEPAD_DPAD_UPGAMEPAD_DPAD_DOWNGAMEPAD_DPAD_LEFTGAMEPAD_DPAD_RIGHTGAMEPAD_LEFT_STICK_UPGAMEPAD_LEFT_STICK_DOWNGAMEPAD_LEFT_STICK_LEFTGAMEPAD_LEFT_STICK_RIGHTGAMEPAD_RIGHT_STICK_UPGAMEPAD_RIGHT_STICK_DOWNGAMEPAD_RIGHT_STICK_LEFTGAMEPAD_RIGHT_STICK_RIGHTPOWERPLAYPAUSEPLAYPAUSESTOPFORWARDREWINDNEXTPREVVOLUME_UPVOLUME_DOWNMUTEHOMEPAGEWWWMAILFAVORITESSEARCHSLEEPCANCELRECORDCHANNEL_UPCHANNEL_DOWNPLAYONLYPAUSEONLYGO_BACKGO_FORWARDTOOLSZOOMINZOOMOUTXF86_PAUSEXF86_STOPXF86_PREVXF86_NEXTMOUSE_BTN0MOUSE_BTN1MOUSE_BTN2MOUSE_BTN3MOUSE_BTN4MOUSE_BTN5MOUSE_BTN6MOUSE_BTN7MOUSE_BTN8MOUSE_BTN9MOUSE_BTN10MOUSE_BTN11MOUSE_BTN12MOUSE_BTN13MOUSE_BTN14MOUSE_BTN15MOUSE_BTN16MOUSE_BTN17MOUSE_BTN18MOUSE_BTN19MOUSE_BTN0_DBLMOUSE_BTN1_DBLMOUSE_BTN2_DBLAXIS_UPAXIS_DOWNAXIS_LEFTAXIS_RIGHTCLOSE_WINMOUSE_MOVEMOUSE_LEAVEMOUSE_ENTERUNMAPPEDANY_UNICODE../mpv/misc/bstr.cs->len <= size../mpv/misc/bstr.c:360../mpv/misc/bstr.c:457utf8utf-8utf16utf-16UTF-8-BROKENForcing charset '%s'. Data has a BOM, assuming %s as charset. Data looks like UTF-8, ignoring user-provided charset. libuchardet detected charset as %s UTF-8Charset '%s' not supported by iconv. Charset auto-detection failed. Using charset '%s'. CP949ASCIIEUC-KRError opening iconv with codepage '%s' ../mpv/misc/charset_conv.c:182../mpv/misc/charset_conv.c:198Error recoding text with codepage '%s' utf-16leutf-16be../mpv/misc/dispatch.c!queue->head!queue->in_process!queue->lock_requests!queue->locked../mpv/misc/dispatch.c:85../mpv/misc/dispatch.c:171../mpv/misc/dispatch.c:187../mpv/misc/dispatch.c:200queue->locked!mp_thread_id_equal(queue->in_process_thread_id, mp_thread_current_id())!mp_thread_id_equal(queue->locked_explicit_thread_id, mp_thread_current_id())queue->lock_requests!queue->locked_explicitqueue->locked_explicitmp_thread_id_equal(queue->locked_explicit_thread_id, mp_thread_current_id())XXXXXX%06zx../mpv/misc/io_utils.cfilepath && data && size%sXXXXXX../mpv/misc/json.cstr\"\\\%c\u%04xfalsetrue{%s%f%s../mpv/misc/json.c:141../mpv/misc/json.c:163../mpv/misc/json.c:166../mpv/misc/language.c:262../mpv/misc/node.cformat == MPV_FORMAT_NODE_MAP || format == MPV_FORMAT_NODE_ARRAY || format == MPV_FORMAT_FLAG || format == MPV_FORMAT_INT64 || format == MPV_FORMAT_DOUBLE || format == MPV_FORMAT_BYTE_ARRAY || format == MPV_FORMAT_NONEparent->format == MPV_FORMAT_NODE_MAP || parent->format == MPV_FORMAT_NODE_ARRAY../mpv/misc/node.c:26../mpv/misc/node.c:28dst->format == MPV_FORMAT_NODE_ARRAY && dst->u.list../mpv/misc/node.c:37key.startdst->format == MPV_FORMAT_NODE_MAP && dst->u.list../mpv/misc/node.c:57../mpv/misc/node.c:58val.start../mpv/misc/path_utils.cpath%.*s%s%.*sPWD../mpv/misc/path_utils.c:146../mpv/misc/path_utils.c:152talloc_ctx && "mp_normalize_path requires talloc_ctx!"../mpv/misc/thread_pool.c:149../mpv/misc/thread_pool.cpool->num_work == 0pool->num_threads == 0fn../mpv/misc/thread_pool.c:205workerat_ <= (pool->num_threads)min_threads >= 0init_threads <= min_threadsmax_threads > 0 && max_threads >= min_threads../mpv/misc/thread_pool.c:160../mpv/misc/thread_tools.c!waiter->done../mpv/misc/thread_tools.c:125!c->slaves.head../mpv/options/m_config_core.cgroup_index >= group_start && group_index <= group_endopt_index >= -1 && opt_index < g->opt_countgroup_index >= 0 && group_index < shadow->num_groups../mpv/options/m_config_core.c:416root_group->group_count > 0group_index == data->group_index + data->num_gdatagroup_index < data->shadow->num_groups../mpv/options/m_config_core.c:347../mpv/options/m_config_core.c:354parent_gdataopt_index >= 0 && opt_index < shadow->groups[group_index].opt_count%s-%sshadow->groups[n].group != subopts!name_prefix[0]!(subopts->change_flags & ~(unsigned)UPDATE_OPTS_MASK)parent_group_index >= -1 && parent_group_index < shadow->num_groups../mpv/options/m_config_core.c:504!substruct_read_ptr(ptr)../mpv/options/m_config_core.c:471shadow->num_listeners == 0in->wakeup_dispatch_queuesrc->group_index == 0gsrc && gdstOption '%s' changed from '%s' to' %s' (flags = 0x%lx) group_index >= cache->internal->group_start && group_index < cache->internal->group_end../mpv/options/m_config_core.c:444group_index >= 0shadow->groups[in->group_start].group_count == in->data->num_gdata../mpv/options/m_config_core.c:577group_idx >= 0gdst && gsrc../mpv/options/m_config_core.c:619../mpv/options/m_config_core.c:622at_ <= (shadow->num_listeners)shadow->listeners[n] != in../mpv/options/m_config_core.c:847../mpv/options/m_config_core.c:924Available profiles: %s %s ../mpv/options/m_config_frontend.c:198../mpv/options/m_config_frontend.c:202../mpv/options/m_config_frontend.c:204The %s option can't be used in a config file. ../mpv/options/m_config_frontend.c--Warning: option %s%s was replaced with %s%s: %s Warning: option %s%s was replaced with %s%s and might be removed in the future. Option %s%s was removed: %s Option %s%s was removed. Warning: option %s%s is deprecated and might be removed in the future (%s). Option %s not found. no-../mpv/options/m_config_frontend.c:540../mpv/options/m_config_frontend.c:566../mpv/options/m_config_frontend.c:130../mpv/options/m_config_frontend.c:837 %s%-30s Choices: (or an integer)%.14g (%s to %s) (default: %s) [not in config files] [file] [deprecated] for %s for --%s (CLI/config files only) %s%s-%s ../mpv/options/m_config_frontend.c:912../mpv/options/m_config_frontend.c:914Unknown profile '%.*s'. Profile %s: %s %*sprofile-cond=%s %*s%s=%s profileUnknown profile '%s'. WARNING: Profile inclusion too deep. ../mpv/options/m_config_frontend.c:940Ignoring profile=%s from config file. Applying profile '%s'... No profiles have been defined. Maximum 'include' nesting depth exceeded. show-profilelist-options*includeconfig != NULLco->opt->type->parseSetting option '%.*s' = '%.*s' (flags = %d) Error parsing option %.*s (%s) profile-descprofile-restoreprofile-cond../mpv/options/m_config_frontend.c:972Setting option '%.*s' = %s (flags = %d) -> %d Restoring from profile '%s'... Profile '%s' contains no restore data. optionscopy-equal(passing nothing) %s %g-%g (integer range) Invalid parameter for %.*s flag: %.*s option type doesn't accept strings#%02X%02X%02X%02X%08x%g%+g#%g%g%%The %.*s option must be an integer: %.*s The %.*s option must be >= %lld: %.*s The %.*s option must be <= %lld: %.*s Option %.*s: invalid FourCC: '%.*s' ../mpv/options/m_option.c:1549../mpv/options/m_option.c:1555../mpv/options/m_option.c:1761../mpv/options/m_option.c:1764../mpv/options/m_option.c:1765../mpv/options/m_option.c:3773../mpv/options/m_option.c:3777../mpv/options/m_option.c:3783../mpv/options/m_option.c:3792../mpv/options/m_option.c:3796../mpv/options/m_option.cindex * 2 + 1 < countObject settings list capacity exceeded: a maximum of 100 elements is allowed.idx >= 0 && idx <= num../mpv/options/m_option.c:2934%d%s/%dInvalid message level '%s' ../mpv/options/m_option.c:2622auto-safeabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-%%%zd%%%s@%s:../mpv/options/m_option.c:3636../mpv/options/m_option.c:3637../mpv/options/m_option.c:1320../mpv/options/m_option.c:912../mpv/options/m_option.c:922opt->type == &m_option_type_choice../mpv/options/m_option.c:3654dst->format == MPV_FORMAT_NODE_ARRAY&& dst->u.list../mpv/options/m_option.c:3628../mpv/options/m_option.c:3660labelparams../mpv/options/m_option.c:3669Invalid flag for option %.*s: %.*s Valid flags are: Flags can usually be combined with '+'. Option %.*s: flag '%.*s' conflicts with a previous flag value. Available formats:Option %.*s: unknown format name: '%.*s' Valid values for option %.*s are: Invalid value for option %.*s: %.*s Valid values are: Valid colors must be in the form #RRGGBB or #AARRGGBB (in hex) or in the form 'r/g/b/a', where each component is a value in the range 0.0-1.0. (Also allowed: 'gray', 'gray/a', 'r/g/b'). Option %.*s: invalid color: '%.*s' %u:%u:%lf%n%u:%lf%n%lf%nOption %.*s: invalid time or position: '%.*s' Option %.*s: invalid time: '%.*s' noThe %.*s option must be a floating point number or a ratio (numerator[:/]denominator): %.*s The %.*s option is out of range: %.*s down../mpv/options/m_option.c:3577../mpv/options/m_option.c:3604 Other values: auto-safe Disallowed parameter. Invalid channel layout: %.*s ../mpv/options/m_option.c:2571Terminating '"' missing for '%.*s' Terminating ']' missing for '%.*s' Invalid length %d for '%.*s' Valid values for %.*s flag are: yes no (passing nothing) Valid format: [W[%%][xH[%%]]][{+-}X[%%]{+-}Y[%%]] | [X[%%]:Y[%%]] Option %.*s: invalid geometry: '%.*s' Valid format: W[%%][xH[%%]] or empty string Option %.*s: invalid size: '%.*s' Valid format: W[%%][xH[%%]][+x+y] Option %.*s: invalid rect: '%.*s' kibmibgibtibThe following suffixes are also allowed: KiB, MiB, GiB, TiB, B, K, M, G, T. The %.*s option does not support negative numbers: %.*s The %.*s option overflows: %.*s The %.*s option must be >= %ld: %.*s The %.*s option must be <= %ld: %.*s idx >= 0 && idx < num../mpv/options/m_option.c:2913../mpv/options/m_option.c:1501../mpv/options/m_option.c:3002../mpv/options/m_option.c:1537../mpv/options/m_option.c:1746help=-appendExpected '=' and a value. ../mpv/options/m_option.c:1689../mpv/options/m_option.c:1690../mpv/options/m_option.c:1691Passing more than 1 argument to %.*s is deprecated! Unparsable garbage at end of option value: '%.*s' Syntax: --msg-level=module1=level,module2=level,... 'module' is output prefix as shown with -v, or a prefix of it. level is one of: fatal error warn info status v debug trace The level specifies the minimum log level a message must have to be printed. The special module name 'all' affects all modules. -toggle../mpv/options/m_option.c:1444Passing multiple arguments to %.*s is deprecated! option not foundoption requires parameteroption parameter could not be parsedparameter is outside values allowed for optionoption doesn't take a parameterparser error%.0f B%.3f KiB%.3f MiB%.3f GiB%.3f TiBopt->priv-helpOption %s: Supported operations are: %s-set Overwrite the old list with the given list %s-append Append the given item to the current list %s-add Append the given list to the current list %s-pre Prepend the given list to the current list %s-remove Remove the given item from the current list %s-toggle Add the item to the list, or remove it if it's already added. %s-clr Clear the current list. Available %s: Get help on individual entries via: --%s=entry=help Option %.*s: -clr does not take an argument. ../mpv/options/m_option.c:3396@Option %.*s: item label @%.*s not found. Option %.*s: ':' expected after label. Option %.*s: label name expected. Option %.*s: item name expected. Driver '%s' has been replaced with '%s'! Option %.*s: '%.*s' isn't supported. :=,\%"'[]Option %.*s: this option does not accept sub-options. Sub-options for --vo and --ao were removed from mpv in release 0.23.0. See https://0x0.st/uM for details. @%dOption %.*s: %.*s doesn't have a %.*s parameter. Option %.*s: Error while parsing %.*s parameter %.*s (%.*s) Option %.*s: %.*s has only %d params, so you can't give more than %d unnamed params. Option %.*s: Error while parsing %.*s parameter %s (%.*s) ../mpv/options/m_option.c:3146../mpv/options/m_option.c:3147../mpv/options/m_option.c:3148../mpv/options/m_option.c:3149Option %.*s: item '%.*s' isn't supported. Option %.*s: -append takes only 1 item (no ','). Option %.*s: Label %s not found Subconfigremovedaliasup|downComplexObject settings listclrpretoggleRelative time or percent positionTimeAudio channels or channel mapAudio formatFourCCImage formatVideo rectWindow sizeWindow geometryColorFlagPrintOutput verbosity levelsKey/value listString listStringFloatAspectDoubleFlagsChoiceByteSizeInteger64Integer../mpv/options/m_property.c:249../mpv/options/m_property.copt.type(error)(unavailable):}==$>$$$}../mpv/options/m_property.c:336../mpv/options/m_property.c:340Name Total: %d properties ../mpv/options/m_property.c:469../mpv/options/m_property.c:475../mpv/options/m_property.c:476%s=%s ../mpv/options/m_property.c:555../mpv/options/m_property.c:557%d: %s ${?media-title:${media-title}}${!media-title:No file} - mpv[-+-]mpv-shot%nvolumemuteaudio-delaygammabrightnesscontrastsaturationhuedeinterlacevfafpanscanaidvidsidsub-delaysub-speedsub-possub-visibilitysub-scalesub-use-marginssub-ass-force-marginssub-ass-use-video-datasub-ass-overridesecondary-sidsecondary-sub-delaysecondary-sub-possecondary-sub-ass-overridesecondary-sub-visibilityab-loop-aab-loop-bvideo-unscaledvideo-pan-xvideo-pan-yvideo-cropvideo-zoomvideo-scale-xvideo-scale-yvideo-align-xvideo-align-yArtistAlbumAlbum_ArtistCommentComposerDateDescriptionGenrePerformerRatingSeriesTrackicy-titleservice_nameUploaderChannel_URLAlbumArtcoverfrontAlbumArtSmallFolder.folderthumbidxlrcmkspgssbvsccsmissasuputfvttaiffapeaum4amkaogaogmthdwavwmawv3g23gpflvm2tsm4vmj2movmpgogvrmvbwmvy4mlist-propertieslist-protocolsversionplayer-operation-modeshufflequietreally-quietterminalmsg-leveldump-statsmsg-colorlog-filemsg-modulemsg-timemedia-controlsconfig-dirreset-on-next-filescriptsscriptscripts-appendscript-optsload-scriptsjs-memory-reportoscytdlytdl-formatytdl-raw-optionsload-stats-overlayload-osd-consoleload-auto-profilesload-selectblurayplay-directionrebase-start-timeab-loop-countplaylist-startpausekeep-openkeep-open-pauseimage-display-durationalangslangvlangtrack-auto-selectionsubs-with-matching-audiosubs-match-os-languagesubs-fallbacksubs-fallback-forcedlavfi-complexaudio-displayhls-bitratedisplay-tagsaudio-demuxersub-demuxerdemuxer-threaddemuxer-termination-timeoutdemuxer-cache-waitprefetch-playlistcache-pausecache-pause-initialcache-pause-waitdvbinmcaudio-samplerateaudio-channelsaudio-formataudio-pitch-correctionad-lavcdemuxer-rawaudiodemuxer-rawvideodemuxer-mkvsub-filessub-filesub-files-appendaudio-filesaudio-fileaudio-files-appendcover-art-filescover-art-filecover-art-files-appendsub-file-pathsaudio-file-pathsexternal-filesexternal-fileexternal-files-appendautoload-filessub-autosub-auto-extsaudio-file-autoaudio-extsaudio-file-auto-extscover-art-autoimage-extscover-art-auto-extscover-art-whitelistvideo-extsaudio-exclusiveaudio-fallback-to-nullaudio-stream-silenceaudio-wait-openforce-windowvolume-maxvolume-gain-maxvolume-gain-minvolume-gainreplaygainreplaygain-preampreplaygain-clipreplaygain-fallbackgapless-audioforce-media-titlecursor-autohidecursor-autohide-fs-onlystop-screensaveruse-filedir-confosd-levelosd-on-seekosd-durationosd-fractionssstepvideo-latency-hacksstream-dumpstop-playback-on-init-failureloop-playlistloop-fileloopresume-playbackresume-playback-check-mtimesave-position-on-quitwrite-filename-in-watch-later-configignore-path-in-watch-later-configwatch-later-dirwatch-later-directorywatch-later-optionsordered-chaptersordered-chapters-fileschapter-merge-thresholdchapter-seek-thresholdchapters-filemerge-filesinitial-audio-syncvideo-sync-max-video-changevideo-sync-max-audio-changevideo-sync-max-factorhr-seekhr-seek-demuxer-offsethr-seek-framedropautosyncterm-osdterm-osd-barterm-osd-bar-charsterm-titleterm-playing-msgosd-playing-msgosd-playing-msg-durationterm-status-msgosd-status-msgosd-msg1osd-msg2osd-msg3osd-playlist-entryvideo-osdidleinput-commandsinput-terminalinput-ipc-serverinput-ipc-clientscreenshotscreenshot-templatescreenshot-dirscreenshot-directoryscreenshot-sweglcudavaapiswszimgplay-dironceabsolutealwaysinfdecoder+vomsgmsg-barweaktrackalbumexactfuzzyembedded-firstexternal-firstbackwardplayercplayerdeinterlace-field-paritydvd-devicedvd-speeddvd-angledecode-deviceosd-bar-align-xosd-bar-align-yosd-bar-wosd-bar-hosd-bar-outline-sizeosd-bar-border-sizeosd-scaleosd-scale-by-windowforce-rgba-osd-renderingstripsub-fpssub-forced-events-onlystretch-dvd-subsstretch-image-subs-to-screenimage-subs-video-resolutionsub-fix-timingsub-stretch-durationssub-gausssub-graysub-asssub-ass-line-spacingsub-ass-vsfilter-color-compatsub-vsfilter-bidi-compatsub-ass-vsfilter-aspect-compatreplaced by sub-ass-use-video-data=aspect-ratiosub-ass-vsfilter-blur-compatreplaced by sub-ass-use-video-data=allsub-ass-video-aspect-overrideembeddedfontssub-ass-style-overridessub-ass-stylessub-ass-hintingsub-ass-shapersub-ass-justifysub-scale-by-windowsub-scale-with-windowsub-ass-scale-with-windowsub-clear-on-seekteletext-pagesub-past-video-endsub-ass-force-stylesub-lavc-osimplecomplexlightaspect-ratiobasicforce-601([(sub-filter-sdhsub-filter-sdh-hardersub-filter-sdh-enclosuressub-filter-regex-enablesub-filter-regex-plainsub-filter-regexsub-filter-jsresub-filter-regex-warnPlaybacktaskbar-progressdrag-and-dropsnap-windowontopontop-levelbordertitle-baron-all-workspacesgeometryautofitautofit-largerautofit-smallerauto-window-resizewindow-minimizedwindow-maximizedfocus-on-openReplaced by --focus-onfocus-onforce-renderforce-window-positionx11-namewayland-app-idmonitoraspectmonitorpixelaspectfullscreenfsinput-cursor-passthroughnative-keyrepeatvideo-margin-ratio-leftvideo-margin-ratio-rightvideo-margin-ratio-topvideo-margin-ratio-bottomwidscreen-namefs-screenfs-screen-namekeepaspectkeepaspect-windowhidpi-window-scalenative-fsnative-touchshow-in-taskbardisplay-fps-overridevideo-timing-offsetvideo-syncx11-netwmx11-bypass-compositorx11-presentx11-wid-titlewayland-configure-boundswayland-content-typewayland-disable-vsyncwayland-edge-pixels-pointerwayland-edge-pixels-touchwayland-presentswapchain-depthoverride-display-fpsphotogameneverdisplay-resampledisplay-resample-vdropdisplay-resample-desyncdisplay-tempodisplay-adropdisplay-vdropdisplay-desynccurrentdownscale-bigopenwindowsystemdesktop../mpv/options/parse_commandline.c!p->errorError parsing commandline option %.*s: %s Make sure you're using e.g. '--%.*s=value' instead of '--%.*s value'. Setting commandline option --%.*s=%.*s failed. '--{' can not be nested. !local_startToo many closing '--}'. Ignored options! Error reading playlist '%.*s' ../mpv/options/parse_commandline.c:210Missing closing --} on command line. %s:%d:%s missing closing ] %s unparsable extra characters: '%.*s' %s unterminated quote %s fixed-length quoting expected - put "quotes" around the option value if you did not intend to use this, but your option value starts with '%%' %s setting option %.*s='%.*s' failed. %s: too many errors, stopping. Reading config file %s ../mpv/options/path.ctalloc_ctxhomestrcmp(fallback_type, type) != 0../mpv/options/path.c:138|config path: '%.*s' -> '%s' ../mpv/options/path.c:152config path: '%.*s' -/-> '%s' ../mpv/options/path.c:160MPV_HOME%s path: '%s' -> '%s' ~USERPROFILEuser path: '%s' -> '%s' old_homeosxbundleexe_dir../mpv/player/audio.cAudio filter initialized failed! got EOF with no data before it new audio frame after EOF previous audio still playing; continuing audio filter EOF Replaygain: Track=%f/%f Album=%f/%f Applying replay-gain: %f ...with clipping prevention: %f Applying fallback gain: %f !ao_c->aodraining left over audio track->ao_c == ao_ctrack->dec->f->pins[0] == ao_c->dec_srcao_c->filter->ao_needs_updateout_fmtnew_modPassthrough format unsupported. Falling back to PCM output. Could not open/initialize audio device -> no sound. AO: [%s] %s AO: Description: %s !track->dec!mpctx->ao_chain../mpv/player/audio.c:571Error reinitializing audio. delaying audio start %f vs. %f, diff=%f starting audio playback audio draining Reset playback due to audio timestamp reset. blocked, waiting for old audio to play audio ready audio ready (and EOF) AO signaled EOF (while in state %s) Audio device underrun detected. restarting audio after underrun audio EOF reached ../mpv/player/client.c:679../mpv/player/client.c:681../mpv/player/client.c:688../mpv/player/client.c:691../mpv/player/client.c:1132../mpv/player/client.c:1210../mpv/player/client.c:1232../mpv/player/client.cprop->refcount == 0Too many events queued. ctx->reserved_events > 0../mpv/player/client.c:1185../mpv/player/client.c:182mpctx->clients->num_clients == 0Broken API use: mpv_render_context_free() not called. coreprop->refcount > 0../mpv/player/client.c:1915../mpv/player/client.c:1453../mpv/player/client.c:1457Exiting... at_ <= (clients->num_clients)!ctxdel../mpv/player/client.c:1365../mpv/player/client.c:1370../mpv/player/client.c:1514!ctx->destroying../mpv/player/client.c:1549../mpv/player/client.c:1565at_ <= (ctx->num_properties)options/silent:terminal-defaultunknown errorsuccessevent < (int)INTERNAL_EVENT_BASEThe '%s' event is deprecated and will be removed. client../mpv/player/client.c:286../mpv/player/client.c:292../mpv/player/client.c:293../mpv/player/client.c:305libmpvmainstopredirectplaylist_entry_idreasonplaylist_insert_idplaylist_insert_num_entriesfile_errorprefixlevelargsresulthook_id../mpv/player/client.c:2224shutdownlog-messageget-property-replyset-property-replycommand-replystart-fileend-filefile-loadedtickclient-messagevideo-reconfigaudio-reconfigseekplayback-restartproperty-changeevent-queue-overflowhookevent queue fullmemory allocation failedcore not initializedinvalid parameterunsupported format for accessing optionerror setting optionproperty not foundunsupported format for accessing propertyproperty unavailableerror accessing propertyerror running commandloading failedaudio output initialization failedvideo output initialization failedno audio or video data playedunrecognized file formatnot supportedoperation not implementedsomething happened../mpv/player/command.c:6383../mpv/player/command.c:6386Can't find script '%s' to send message to. ../mpv/player/command.c:3705../mpv/player/command.c:3708%s is not a valid input name. %d is not a valid mouse button number. %d is not a valid mouse button for double-clicks. x0y0x1y1../mpv/player/command.c:4736../mpv/player/command.c:4665../mpv/player/command.c:4670bgraoverlay-add: unsupported OSD format '%s' overlay-add: invalid id %d overlay-add: inconsistent parameters overlay-add: could not open or map '%s' ../mpv/player/command.c:6403key-bindingCan't find script '%s' when handling input. hover../mpv/player/command.c:6068Track list:Track removed:%.fdriverdescriptionparaspectmbmlmrplayingplaylist-pathoptionalvarargavgpeaksampleslinux-Db_lto=false -Db_pie=true -Dpython.bytecompile=1 -Dlibmpv=true -Dgl-x11=enabled -Dcaca=disabled -Dcdda=enabled -Ddvbin=enabled -Ddvdnav=enabled -Dlibarchive=enabled -Dopenal=enabled -Dprefix=/usr -Dlibexecdir=lib -Dsbindir=bin -Dauto_features=auto -Dbuildtype=plain -Dwrap_mode=nodownload../mpv/player/command.c:3478../mpv/player/command.c:3464%.f kbps%.3f Mbps- %s: last %dus avg %dus peak %dus ../mpv/player/command.c:2783fresh: redraw: freshredraw%s [%s%s=%s (disabled)(empty)ass-fulldisplay-widthpicture-typeinterlacedrepeatchannel-counthr-channelsunnamedNo editions.%d: src-idalbumartdependentvisual-impairedhearing-impairedexternalselectedmain-selectionexternal-filenameff-indexprogram-iddecoder-desccodec-desccodec-profiledemux-wdemux-hdemux-crop-xdemux-crop-ydemux-crop-wdemux-crop-hdemux-channel-countdemux-channelsdemux-sampleratedemux-fpsdemux-bitratedemux-rotationdemux-parformat-namereplaygain-track-peakreplaygain-track-gainreplaygain-album-peakreplaygain-album-gaindolby-vision-profiledolby-vision-level%H:%Msubtitlecache-endreader-ptsunderruntotal-bytesfw-bytesfile-cache-bytesraw-input-ratedebug-seekingdebug-low-level-seeksdebug-byte-level-seeksdebug-ts-lastts-per-streambof-cachedeof-cachedseekable-ranges/s../mpv/player/command.c../mpv/player/command.c:3644../mpv/player/command.c:3645../mpv/player/command.c:3654../mpv/player/command.c:3659../mpv/player/command.c:3662set-from-commandlineset-locallyexpects-filedefault-valuechoicesprofile-listVerticalSquareMovietone Ratio5:44:3IMAX RatioAcademy RatioCircle-Vision 360°PolyvisionUltra-WideScreen 3.632:9Ultra Panavision 70Full-frame Super 16mmFull-frame CineramaOriginal CinemaScopePanavisionScope70mm filmUnivisiumSMPTE/DCI RatioAcademy FlatEarly 35mm Widescreen Ratio16:935mm Widescreen Ratio16:10VistaVision Ratiopixelformathw-pixelformataverage-bppdwdhcrop-xcrop-ycrop-wcrop-haspect-namesarsar-namecolormatrixcolorlevelsprimariessig-peakchroma-locationstereo-inalphamin-lumamax-lumamax-cllmax-fallscene-max-rscene-max-gscene-max-bscene-avgmax-pq-yavg-pq-yCannot reload while not initialized. Reloaded:Track switched:Track added:ImageSub%s: (%d) '%s' (%s) (external) Edition: %d of %d at_ <= (cmd->num_hooks)Running hook: %s/%s ../mpv/player/command.c:215@%liSending hook command failed. Removing hook. %4.2f%%/100%4.1f%%%.f ms2.35:1Original%.3f%.1f(%d) %s ("%s")(%d) %sUnable to load playlist %s. no-ext%s (%s) ↑ (%d hidden items) ↓ (%d hidden items) No chapters. %s%s ../mpv/player/command.c:1004chapter-list../mpv/player/command.c:1040../mpv/player/command.c:1044program name missing both stdin_data and passthrough_stdin set killed_by_us../mpv/player/command.c:1241../mpv/player/command.c:1247../mpv/player/command.c:1248by-key/client removed during hook handling invalid hook API usage ../mpv/player/command.c:286../mpv/player/command.c:296Set property: %s%s%s -> %d Deleted property: '%s'Unknown property: '%s'Failed to set property '%s'Warning: property '%s' was replaced with '%s' and might be removed in the future. ../mpv/player/command.c:3549sub2track-list/%d/%s%s: ${%s}%.*s-%sChanging filters failed!Clear A-B loop!reversecycle-values command does not have any value arguments. Current value not found. Picking default. Unknown option: '%s'Unknown action: '%s'Could not read: '%s'Failed setting option: '%s'Dropping command '%s' from auto-repeated key. (broken escape sequences)../mpv/player/command.c:5153../mpv/player/command.c:5168cmd->def->can_abort == !!ctx->abortRun command:../mpv/player/command.c:5089mpctx->demuxerdemux_cache_dump_get_status(mpctx->demuxer) <= 0Cache dumping stopped due to error.Cache dumping successfully ended.!ctx->cache_dump_cmdNo demuxer open.Cache dumping started.Cache dumping stopped.../mpv/player/command.c:7182../mpv/player/command.c:7191../mpv/player/command.c:7194co->name[0]audio-device-listthe command lineremaining-file-loopsremaining-ab-loopsItargetlegacyrevert-seekcodequit-watch-laterframe-stepframe-back-stepplaylist-nextplaylist-prevplaylist-next-playlistplaylist-prev-playlistplaylist-play-indexplaylist-shuffleplaylist-unshufflesub-stepskipsub-seekprint-textexpand-textexpand-pathnormalize-pathescape-assshow-progressaudio-addvideo-addsub-removeaudio-removevideo-removesub-reloadaudio-reloadvideo-reloadrescan-external-filesscreenshot-to-filescreenshot-rawloadlistplaylist-clearplaylist-removeplaylist-moveindex1index2runsubprocessplayback_onlycapture_sizecapture_stdoutcapture_stderrdetachenvstdin_datapassthrough_stdinchange-listoperationcyclemultiplycycle-valuesarg0arg1argNenable-sectiondisable-sectiondefine-sectioncontentsab-loopdrop-buffersaf-commandvf-commandao-reloadscript-bindingscript-messagescript-message-tooverlay-addoverlay-removeosd-overlayres_xres_yhiddencompute_boundswrite-watch-later-configdelete-watch-later-configmousebuttonkeybindkeypresskeydownkeyupapply-profileload-config-fileload-input-confload-scriptab-loop-dump-cacheab-loop-align-cachecontext-menuapplysingleass-eventsexclusiveallow-hide-cursorallow-vo-dragginginsert-atinsert-at-playsubtitlesunusedeach-framekeep-selectionreselectselectprimarysecondarykeep-playlistmarkmark-permanentdefault-precisekeyframesrelativeabsolute-percentrelative-percentLoopLoop current filechapterSpeedPitchclockClockEditionVolumeVolume: ${?volume:${volume}% ${?mute==yes:(Muted)}}${!volume:${volume}}Volume gainVolume gain: ${?volume-gain:${volume-gain} dB ${?mute==yes:(Muted)}}${!volume-gain:${volume-gain}}ao-volumeAO VolumeAO Volume: ${?ao-volume:${ao-volume}% ${?ao-mute==yes:(Muted)}}${!ao-volume:${ao-volume}}Muteao-muteAO MuteA-V delayPanscanProgress in taskbarSnap to screen edgesStay on topVisibility on all workspacesBorderFramedropDeinterlaceGammaBrightnessContrastSaturationHueAngleSubtitlesSecondary subtitlesSub positionSecondary sub positionSub delaySecondary sub delaySub speedSubtitles ${!sub-visibility==yes:hidden}${?sub-visibility==yes:visible${?sub==no: (but no subtitles selected)}}Secondary Subtitles ${!secondary-sub-visibility==yes:hidden}${?secondary-sub-visibility==yes:visible${?secondary-sid==no: (but no secondary subtitles selected)}}Forced sub onlySub ScaleSubtitle using video propertiesSubtitle aspect overrideASS subtitle style overrideSecondary sub ASS subtitle style overrideVideo filtersVideo filters: ${vf}Audio filtersAudio filters: ${af}A-B loop startA-B loop: ${ab-loop-a} - ${ab-loop-b}${?=ab-loop-count==0: (disabled)}Audio devicehwdecHardware decoding: ${hwdec-current}Aspect ratio overridecore-idleeof-reachedmouse-postouch-posplaylist-posplaylist-pos-1playlist-countplaylist/countplaylist-current-posplaylist-playing-posfocuseddisplay-hidpi-scaledisplay-namesdisplay-fpsdisplay-heightcurrent-window-scaleosd-widthosd-heightosd-parosd-dimensionsdemuxer-cache-durationdemuxer-cache-idlepaused-for-cachedemuxer-cache-timecache-buffering-statecache-speeddemuxer-cache-statechapter-metadatafiltered-metadatamedia-titleseekingaudio-codecaudio-bitratecurrent-aoaudio-codec-nameaudio-paramstrack-listcurrent-tracksaudio-out-paramsmixer-activevideo-out-paramsvideo-paramsvideo-formatvideo-codecvideo-bitratedwidthdheightcontainer-fpsvo-configuredcurrent-vovideo-dec-paramshwdec-currenthwdec-interopwindow-idtime-posaudio-ptsstream-posavsyncpercent-postime-remainingplaytime-remainingplayback-timeestimated-vf-fpstotal-avsync-changeaudio-speed-correctionvideo-speed-correctionvo-delayed-frame-countmistimed-frame-countvsync-ratioestimated-display-fpsvsync-jittersub-textsecondary-sub-textsub-bitratedecoder-frame-drop-countvideo-frame-infovf-metadataaf-metadatasub-startsub-endsecondary-sub-startsecondary-sub-enddeinterlace-activevideo-target-paramspiddisplay-sync-activestream-open-filenamefile-sizestream-pathcurrent-demuxerfile-formatstream-endtime-startcurrent-editioneditionsplayback-abortdemuxer-start-timedemuxer-via-networkseekablepartially-seekableidle-activeedition-listcurrent-tracks/audio/codeccurrent-tracks/audio/codec-desccurrent-tracks/video/codeccurrent-tracks/video/codec-descvideo-out-params/dwvideo-out-params/dhvideo-params/wvideo-params/hvo-passesperf-infocurrent-gpu-contextestimated-frame-countestimated-frame-numberosd-dimensions/wosd-dimensions/hosd-dimensions/parosd-sym-ccosd-ass-ccsub-ass-extradatasub-text-asssub-text/assworking-directoryprotocol-listdecoder-listencoder-listdemuxer-lavf-listinput-key-listmpv-versionmpv-configurationffmpeg-versionlibass-versionplatformfile-local-optionsoption-infoproperty-listcommand-listinput-bindingsmenu-datauser-dataterm-sizevideo-params/colormatrixcolormatrix-input-rangevideo-params/colorlevelscolormatrix-primariesvideo-params/primariescolormatrix-gammavideo-params/gammasub-forced-only-cur%s.%.*sAuto-loading profile '%s' watch_later%02X# %s # redirect entry Can't copy mtime from %s to %s %s.confFilename is too long, can not load file or directory specific config files mpv.confLoading config '%s' ~~home/~~old_home/Warning, two config dirs found: %s (main) %s (bogus) You should merge or delete the second one. encoding-profiles.confmpv.conf|configplayback-defaultencodingextensionSaving state. Can't open %s for writing Not seekable, or time unknown - not saving position. %s=%f %s=%%%d%%%s Resuming playback. This behavior can be disabled with --no-resume-playback. find_filesUTF-8-MACLoading external files in %.*s Potential external file: "%s" Priority: %d ../mpv/player/external_files.c:192../mpv/player/external_files.c:271.idx.sub../mpv/player/external_files.cat_ <= (*nsub)../mpv/player/external_files.c:297Subs●○%s %-5s --%s=%-2d --%s=%-*s (%s [%s] %dx%d %s fps %dch %d Hz %d kbps %s%s%d-%d-%d-%d-%s ../mpv/player/loadfile.c!mpctx->open_active!mpctx->open_cancel!mpctx->open_res_demuxer!atomic_load(&mpctx->open_done)../mpv/player/loadfile.c:569openerOpening done: %s Opening failed or was aborted: %s ../mpv/player/loadfile.c:452../mpv/player/loadfile.c:472Using prefetched/prefetching URL. Prefetched URL failed, retrying. Dropping finished prefetch of wrong URL. Aborting ongoing prefetch of wrong URL. !abort->cancel../mpv/player/loadfile.c:93at_ <= (mpctx->num_abort_list)!abort%s --edition=%d [default]!display-tagsFile tags: %s: %s order >= 0 && order < num_ptracks[type]!track || track->type == typetype >= 0 && type < STREAM_TYPE_COUNTCan't disable input to complex filter. Can't switch away from complex filter output. Track %d is already selected. deselecting track %d for lavfi-complex option !(track->vo_c || track->ao_c)!vo_c->track!ao_c->track%cid%d!mp_pin_is_connected(pad)!track->sinkPad %s is not connected to anything. at_ <= (mpctx->num_tracks)No %sstreams in file %s. Can not open external file %s. Prefetching: %s !e || playlist_entry_to_index(mpctx->playlist, e) >= 0mpctx->stop_playon_before_start_filempctx->playingmpctx->playing->filenamePlaying: %s mpctx->demuxer == NULLon_loadon_load_failInfinite playlist loading loop detected. ../mpv/player/loadfile.c:1327Empty playlist! on_preloadedDisabling %s (not supported by target format). Track %d can't be selected twice. No video or audio streams selected. Displaying cover art. Use --no-audio-display to prevent this. Starting playback... EOF code: %d on_unload../mpv/player/loadfile.c:209!track->dec && !track->d_sub!track->vo_c && !track->ao_c../mpv/player/loadfile.c:228../mpv/player/loadfile.c:148Terminating demuxers... Forcefully terminating demuxers... Done terminating demuxers. finished playback, %s (reason %d) Failed to recognize file format. on_after_end_fileWaiting for scripts... Done loading scripts. Configuration: -Db_lto=false -Db_pie=true -Dpython.bytecompile=1 -Dlibmpv=true -Dgl-x11=enabled -Dcaca=disabled -Dcdda=enabled -Ddvbin=enabled -Ddvdnav=enabled -Dlibarchive=enabled -Dopenal=enabled -Dprefix=/usr -Dlibexecdir=lib -Dsbindir=bin -Dauto_features=auto -Dbuildtype=plain -Dwrap_mode=nodownload List of enabled features: alsa build-date cdda cplugins cuda-hwaccel cuda-interop dmabuf-interop-gl dmabuf-wayland drm dvbin dvdnav egl egl-drm egl-wayland egl-x11 ffmpeg ffnvcodec gbm gl gl-x11 glibc-thread-name glob glob-posix gpl iconv jack javascript jpeg lcms2 libarchive libass libavdevice libbluray libdl libplacebo linux-fstatfs luajit memfd-create memrchr openal pipewire posix posix-shm ppoll pthread-condattr-setclock pulse rubberband rubberband-3 sixel uchardet vaapi vaapi-drm vaapi-wayland vaapi-x11 vapoursynth vdpau vdpau-gl-x11 vector vk-khr-display vt.h vulkan wayland wayland-protocols-1-32 x11 xv zimg zimg-st428 zlib libplacebo version: %s %s %s UNKNOWN built on %s ../mpv/player/main.c!mpctx->num_abort_listMPV_LEAK_REPORTC.UTF-8Non-C locale detected. This is not supported. Call 'setlocale(LC_NUMERIC, "C");' in your code. ../mpv/player/main.c:264../mpv/player/main.c:269../mpv/player/main.c:279!cplayer!statuslineMPV_VERBOSE!mpctx->initializedCommand line options:builtin-pseudo-guistart initEncoding initialization failed. end initQuitFatal errorSome errors happenedEnd of fileNo files playedInterrupted by errorErrors when loading fileExiting... (%s) Audio: no audio Video: no video Error opening dump file: %s Dumping %lld/%lld...edl://%%%zd%%readysyncingdrainingbug../mpv/player/osd.c:374../mpv/player/osd.c:384(...) (Buffering) (Paused) A / (%.f%%) x%4.2f A-V:%7.3f ct:%7.3f${?vsync-ratio:${vsync-ratio}} DS: %s/%ld Dropped: %ld Cache: ???%2.1fs%2ds/%lldMB/%lldKB../mpv/player/osd.c:339Chapter: %s %.*s../mpv/player/osd.clevel >= 0 && level <= 3iterationsstart sleepend sleepEnter buffering (buffer went from %d%% -> %d%%) [%fs]. End buffering (waited %f secs) [%fs]. Still buffering (buffer went from %d%% -> %d%%) [%fs]. ../mpv/player/playloop.c(%d)(%d) of %d (no framedrop) (backstep)Cannot seek in this stream. You can force it with '--force-seekable=yes'. hr-seek, skipping to %f%s%s seeking to last frame... Error opening/initializing the VO window. (paused)starting video playback !term-msgplayback restart complete @ %f, audio=%s, video=%s%s No media data to loop. Falling back to software screenshot. mp_image_new_ref failed! Starting screenshot: '%s'Error writing screenshot!Screenshot: '%s'../mpv/player/screenshot.c:63Out of memory. Error when converting image. Taking screenshot failed.NO_FILE${%.*s}.%sInvalid screenshot filename template! Fix or remove the --screenshot-template option.Can't save screenshot, file '%s' already exists!bgr0mpv_open_cpluginpfn_mpv_client_api_versionOverriding already set function mpv_client_api_version pfn_mpv_error_stringOverriding already set function mpv_error_string pfn_mpv_freeOverriding already set function mpv_free pfn_mpv_client_nameOverriding already set function mpv_client_name pfn_mpv_client_idOverriding already set function mpv_client_id pfn_mpv_createOverriding already set function mpv_create pfn_mpv_initializeOverriding already set function mpv_initialize pfn_mpv_destroyOverriding already set function mpv_destroy pfn_mpv_terminate_destroyOverriding already set function mpv_terminate_destroy pfn_mpv_create_clientOverriding already set function mpv_create_client pfn_mpv_create_weak_clientOverriding already set function mpv_create_weak_client pfn_mpv_load_config_fileOverriding already set function mpv_load_config_file pfn_mpv_get_time_usOverriding already set function mpv_get_time_us pfn_mpv_free_node_contentsOverriding already set function mpv_free_node_contents pfn_mpv_set_optionOverriding already set function mpv_set_option pfn_mpv_set_option_stringOverriding already set function mpv_set_option_string pfn_mpv_commandOverriding already set function mpv_command pfn_mpv_command_nodeOverriding already set function mpv_command_node pfn_mpv_command_retOverriding already set function mpv_command_ret pfn_mpv_command_stringOverriding already set function mpv_command_string pfn_mpv_command_asyncOverriding already set function mpv_command_async pfn_mpv_command_node_asyncOverriding already set function mpv_command_node_async pfn_mpv_abort_async_commandOverriding already set function mpv_abort_async_command pfn_mpv_set_propertyOverriding already set function mpv_set_property pfn_mpv_set_property_stringOverriding already set function mpv_set_property_string pfn_mpv_del_propertyOverriding already set function mpv_del_property pfn_mpv_set_property_asyncOverriding already set function mpv_set_property_async pfn_mpv_get_propertyOverriding already set function mpv_get_property pfn_mpv_get_property_stringOverriding already set function mpv_get_property_string pfn_mpv_get_property_osd_stringOverriding already set function mpv_get_property_osd_string pfn_mpv_get_property_asyncOverriding already set function mpv_get_property_async pfn_mpv_observe_propertyOverriding already set function mpv_observe_property pfn_mpv_unobserve_propertyOverriding already set function mpv_unobserve_property pfn_mpv_event_nameOverriding already set function mpv_event_name pfn_mpv_event_to_nodeOverriding already set function mpv_event_to_node pfn_mpv_request_eventOverriding already set function mpv_request_event pfn_mpv_request_log_messagesOverriding already set function mpv_request_log_messages pfn_mpv_wait_eventOverriding already set function mpv_wait_event pfn_mpv_wakeupOverriding already set function mpv_wakeup pfn_mpv_set_wakeup_callbackOverriding already set function mpv_set_wakeup_callback pfn_mpv_wait_async_requestsOverriding already set function mpv_wait_async_requests pfn_mpv_hook_addOverriding already set function mpv_hook_add pfn_mpv_hook_continueOverriding already set function mpv_hook_continue pfn_mpv_get_wakeup_pipeOverriding already set function mpv_get_wakeup_pipe pfn_mpv_render_context_createOverriding already set function mpv_render_context_create pfn_mpv_render_context_set_parameterOverriding already set function mpv_render_context_set_parameter pfn_mpv_render_context_get_infoOverriding already set function mpv_render_context_get_info pfn_mpv_render_context_set_update_callbackOverriding already set function mpv_render_context_set_update_callback pfn_mpv_render_context_updateOverriding already set function mpv_render_context_update pfn_mpv_render_context_renderOverriding already set function mpv_render_context_render pfn_mpv_render_context_report_swapOverriding already set function mpv_render_context_report_swap pfn_mpv_render_context_freeOverriding already set function mpv_render_context_free pfn_mpv_stream_cb_add_roOverriding already set function mpv_stream_cb_add_ro C plugin error: '%s' --mpv-ipc-fd=%d:%d--mpv-ipc-fd=%dCould not load %s script %s disablemain.%sCan't load unknown script: %s ../mpv/player/scripting.c:160Failed to create client for script: %s Loading %s script %s... Cannot find main.* for any supported scripting backend in: %s @osc.lua@ytdl_hook.lua@stats.lua@console.lua@auto_profiles.lua@select.lua../mpv/player/scripting.c:230../mpv/player/scripting.c:236ipccpluginso../mpv/player/sub.c!track->d_sub../mpv/player/sub.c:173../mpv/player/sub.c:185../mpv/player/sub.c:188../mpv/player/video.cmpctx->num_next_frames >= 1Invalid video timestamp: %f -> %f frametime=%5.3f vo_ctrack->vo_c == vo_ctrack->dec->f->pins[0] == vo_c->dec_src!mpctx->vo_chainError opening/initializing the selected video_out (--vo) device. ../mpv/player/video.c:247disabledunexpected frame type %s video_output_image: r=%d/eof=%d/st=%s mpctx->num_next_frames < MP_ARRAY_SIZE(mpctx->next_frames)Backstep failed. assuming this is an image using demuxer frame duration for last frame video EOF reached video EOF (status=%d) assuming single-image video stream Ignoring invalid --video-crop=%s for %dx%d image => %dx%d[%s]VO: [%s] %dx%d%s %s%s VO: Description: %s value %f audio-diffVideo frame delayed due to waiting on subtitles. ../mpv/player/video.c:1221mpctx->num_past_frames >= 1 && mpctx->num_next_frames >= 1value %f frame-durationvalue %f frame-duration-approxreq >= 1 && req <= VO_MAX_REQ_FRAMESs=%f vsyncs=%d dur=%f ratio=%f err=%.20f (%f/%f) value %f avdiffmistimedChange display sync audio drift: %d Compensation factor: %f value %f aspeedvalue %f vspeedVideo sync mode %s. first video frame after restart shown Could not initialize video chain. secureLoading cookie file: %s Error reading %s=%s; path=%s; domain=%s; %s ../mpv/stream/cookies.c:98../mpv/stream/stream.clen >= 0res <= lenkeep >= s->buf_end - s->buf_curkeep <= newresize stream to %d bytes, drop %d bytes ../mpv/stream/stream.c:291new_len == old_used_len - skipold_pos >= skipold_pos - skip <= new_lenforward >= 0forward_avail < forwards->buf_start <= s->buf_curs->buf_cur <= s->buf_ends->buf_cur < buf_alloc * 2s->buf_end < buf_alloc * 2s->buf_start < buf_allocs->buf_end >= buf_allocs->buf_cur - s->buf_start >= buf_old../mpv/stream/stream.c:343Opening %s URL too large. No write access implemented. s->seekable == !!s->seekMime-type: '%s' Stream opened successfully. ../mpv/stream/stream.c:176args->url!stream Refusing to load potentially unsafe URL from a playlist. Use the --load-unsafe-playlists option to load it anyway. No protocol handler found to open URL %s The protocol is either unsupported, or was disabled at compile-time. Failed to open %s. buf_size >= 0seek request from %ld to %ld Invalid seek to negative position %lld! s->buf_cur >= s->buf_startstream level seek from %ld to %ld Cannot seek forward in this stream Cannot seek backward in linear streams! Seek failed (to %lld, size %lld) ../mpv/stream/stream.c:832../mpv/stream/stream.c:843Failed to open %s (not a file). ../mpv/stream/stream.c:879../mpv/stream/stream.c:884Protocols: %s:// Total: %d protocols stream-buffer-sizeload-unsafe-playlists../mpv/stream/stream_cb.c:57unknown error from user callback required read_fn or close_fn callbacks not set. stream_callback../mpv/stream/stream_concat.c:104No sub-streams. Sub stream %d is a directory. Sub stream %d has unknown size. ../mpv/stream/stream_concat.c:144concat://concatFile is apparently being appended to, will keep retrying with timeouts. ../mpv/stream/stream_file.c:278fdclose://fd://Invalid FD number: %s Invalid FD: %d Reading from stdin... Writing to stdout... appending://Cannot open file '%s': %s fdfdcloseappending../mpv/stream/stream_lavf.c:280../mpv/stream/stream_lavf.c:288../mpv/stream/stream_lavf.c:289rtsps../mpv/stream/stream_lavf.c:294../mpv/stream/stream_lavf.c:322../mpv/stream/stream_lavf.c:325../mpv/stream/stream_lavf.c:326../mpv/stream/stream_lavf.c:328rtmpicy_metadata_headersicy_metadata_packet../mpv/stream/stream_lavf.c:484StreamTitle='';user_agentcookiestls_verifyca_filecert_filekey_fileReferer: %s %s headersicyBroken FFmpeg RTSP API => not setting timeout. %lldhttp_proxyrtsp:No URL rtsps:mms://mmshttp://dav://webdav://http://%.*sdavs://webdavs://https://%.*sreconnectreconnect_delay_max:/?#[]@!$&'()*+,;=%Protocol not found. Make sure FFmpeg is compiled with networking support. mime_typertmptrtmpertmptertmpsrtmptsmmshsrtprtpristmmstmmsmmshttpipnsipfshttpsdavswebdavshttpproxydavwebdavgophersgopherhttproxystream-lavf-ohttp-header-fieldsuser-agentreferrercookies-filetls-verifytls-ca-filetls-cert-filetls-key-filenetwork-timeouthttp-proxy../mpv/stream/stream_memory.c:54hex://Invalid data. ../mpv/stream/stream_memory.c../mpv/stream/stream_slice.c:140Expected slice://start[-end]@URL: '%s' URL expected to follow 'slice://start[-end]@': '%s'. The byte range must have a start, and it can't be negative: '%s' The byte range end can be omitted, but it can't be empty: '%s' slice_startslice_max_endThe byte range end (%ld) can't be smaller than the start (%ld): '%s' Inner stream '%s' is a directory Non-seekable stream '%s' can't be used with 'slice://' slicesubfont.ttffonts.confSetting up fonts... Done. ASS library version: 0x%x (runtime 0x%x) ../mpv/sub/ass_mp.c:208../mpv/sub/ass_mp.c:209../mpv/sub/ass_mp.c:367../mpv/sub/dec_sub.c:155Could not find subtitle decoder for format '%s'. Frame based format, dummy FPS: %f, video FPS: %f Switch segment: %f at %f Can't change to new codec. ../mpv/sub/dec_sub.c:276../mpv/sub/dec_sub.c:375../mpv/sub/dec_sub.ctrack->stream && track->stream->type == STREAM_SUB../mpv/sub/dec_sub.c:189../mpv/sub/draw_bmp.cx0 >= 0 && x0 <= x1 && x1 <= p->wy0 >= 0 && y0 <= y1 && y1 <= p->hsb->format == SUBBITMAP_LIBASSsb->format == SUBBITMAP_BGRA../mpv/sub/draw_bmp.c:377sx >= 0 && sw > 0 && sx + sw <= s->wsy >= 0 && sh > 0 && sy + sh <= s->hscaled->w == dwscaled->h == dhp->rgba_overlay->imgfmt == IMGFMT_BGRAgr->r_h * gr->h >= p->h!(gr->r_w & (SLICE_W - 1))gr->r_w * gr->w >= p->w../mpv/sub/draw_bmp.c:517vfdesc.num_planesvfdesc.component_type == MP_COMPONENT_TYPE_FLOATmp_repack_get_format_dst(p->video_to_f32) == mp_repack_get_format_src(p->video_from_f32)p->align_x >= mp_repack_get_align_x(p->overlay_to_f32)p->align_y >= mp_repack_get_align_y(p->overlay_to_f32)rflags & REPACK_CREATE_PLANAR_F32odesc.component_sizeodesc.planes[aplane].num_components == 1odesc.planes[aplane].components[0] == 4../mpv/sub/draw_bmp.c:723align=%d:%d ov=%-7s, ov_f=%s, v_f=%s, a=%s, ca=%s, ca_f=%s../mpv/sub/draw_bmp.c:846../mpv/sub/draw_bmp.c:854dst->w >= sbs_list->wdst->h >= sbs_list->hMP_IS_ALIGNED(x, p->align_x)MP_IS_ALIGNED(w, p->align_x)x + w <= p->wSDH filtering not possible - format missing ((../mpv/sub/filter_sdh.c:51)../mpv/sub/img_convert.cat_ <= (*count)tmp1../mpv/sub/lavc_conv.c:59../mpv/sub/lavc_conv.c:62txt_formatsub_typesub_text_format+ass_ro_flush_noopreal_timeCould not open libavcodec subtitle converter Error parsing subtitle txt_pageError decoding subtitle Ignoring bitmap subtitle. ../mpv/sub/lavc_conv.c:281../mpv/sub/lavc_conv.c:287../mpv/sub/osd.c:560../mpv/sub/osd.cin->packed && in->packed->bufs[0]../mpv/sub/osd.c:573../mpv/sub/osd.c:130../mpv/sub/osd.c:142../mpv/sub/osd.c:235sub-renderosd-render (slow!)../mpv/sub/osd.c:338../mpv/sub/osd.c:373Can't render OSD part %d (format %d). Spent %.3f ms in %s%s drawdraw-bmpFailed rendering OSD. res.display_parsans-seriffontfont-sizeoutline-colorback-colorborder-colorshadow-colorborder-styleshadow-offsetspacingmargin-xmargin-yblurbolditalicfont-providerfonts-dirfontconfigbottomoutline-and-shadowopaque-boxbackground-boxlibassmpv-osd-symbols %d %d../mpv/sub/osd_libass.cevent->Text == NULLOSD m l%c{\fnmpv-osd-symbols}{\r}\N\h../mpv/sub/osd_libass.c:549../mpv/sub/osd_libass.c:552at_ <= (obj->num_externals)progbar{\an6\pos(%f,%f)}{\pos(%f,%f)\bord0\1a&H%02X\1c&H%02X%02X%02X&}{\p%d}{\p0}{\bord0\pos(%f,%f)}{\bord%f\pos(%f,%f)}{\pos(%f,%f)}../mpv/sub/osd_libass.c:667\pos\move\clip\iclip\org\papplication/x-truetype-font.ttfLoading font attachment '%s' with MIME type %s. Assuming this is a broken Matroska file, which was muxed without setting a correct font MIME type. ../mpv/sub/sd_ass.cat_ <= (priv->num_seen_packets)../mpv/sub/sd_ass.c:411../mpv/sub/sd_ass.c:368Subtitle with unknown duration. ../mpv/sub/sd_ass.c:181../mpv/sub/sd_ass.c:191../mpv/sub/sd_ass.c:266Advanced Sub Station AlphaSub Station Alpha../mpv/sub/sd_ass.c:827Dialogue: %d,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s,%s,%04d,%04d,%04d,%s,%sPlayResX\{{\mangling colors like vsfilter: RGB -> %s %s -> %s %s -> RGB Malformed event '%.*s' .ttc.otf.otcapplication/vnd.ms-opentypeapplication/x-font-ttfapplication/x-fontapplication/font-sfntfont/collectionfont/otffont/sfntfont/ttf../mpv/sub/sd_lavc.c:450../mpv/sub/sd_lavc.cpriv->prevret_num == res->num_parts../mpv/sub/sd_lavc.c:542../mpv/sub/sd_lavc.c:93../mpv/sub/sd_lavc.c:136Could not open libavcodec subtitle decoder ../mpv/sub/sd_lavc.c:198unsupported subtitle type from libavcodec Unable to pack subtitle bitmaps. r->nb_colors > 0r->nb_colors <= 256Subtitle with unknown start time. ../mpv/sub/sd_lavc.c:409../mpv/video/csputils.ctexture_bits >= input_bitsvideo-output-levelssbs2lab2rab2lcheckrchecklirrirlicriclarccsbs2ragmcstraightpremuluhdmpeg2/4/h264mpeg1/jpegbottom-leftdisplay709-1886gamma1.2bt.1886srgblineargamma1.8gamma2.0gamma2.2gamma2.4gamma2.6gamma2.8prophotov-logs-log1s-log2st428bt.601-525bt.601-625bt.709bt.2020bt.470mappleadobecie1931dci-p3display-p3v-gamuts-gamutebu3213film-caces-ap0aces-ap1limitedbt.601smpte-240mbt.2020-nclbt.2020-clbt.2100-pqbt.2100-hlgdolbyvisionrgbxyzycgcod3d11va-copy../mpv/video/decode/vd_lavc.c:311 (host-cached)DR parameter change to %dx%d %s align=%d Allocating new%s DR image... ...failed.. DR failed - disabling. nvdec../mpv/video/decode/vd_lavc.cValid values (with alternative full names): auto (yes '') no auto-safe auto-copy auto-copy-safe (hardware decoding)Error while decoding frame%s! Pixel formats supported by decoder:Codec profile: %s (0x%x) ctx->use_hwdecMissing device context. Hardware decoding of this stream is unsupported? Failed to allocate hw frames. Requesting pixfmt '%s' from decoder. auto-copy-safeauto-copyNo hardware decoding requested. Not trying to use hardware decoding: codec %s is not on whitelist. Skipping previously attempted hwdec: %s Looking at hwdec %s... ../mpv/video/decode/vd_lavc.c:541Not using this for auto-copy. Could not create device. Not using emulated API. Using emulated hardware decoding API. Unsupported hwdec: %.*s Trying hardware decoding via %s. Using underlying hw-decoder '%s' Software decoding fallback is disabled. Using software decoding. does not support applying film grainis not available at decoder initialization to verify support!ctx->avctx_mmal150x264_buildGPU film grain requested, but VO %s, expect wrong output. Could not set codec parameters. Attempting next decoding method after failure of %.*s. mmal../mpv/video/decode/vd_lavc.c:1157ctx->num_requeue_packetsctx->pic->buf[0]CUDA frame without data. This is a FFmpeg bug. ../mpv/video/decode/vd_lavc.c:1236Could not copy back hardware decoded frame. Using hardware decoding (%s). vd_lavcdxva2d3d11va-copydxva2-copynvdec-copyvaapi-copyvulkanvulkan-copyvdpauvdpau-copydrmdrm-copymmal-copymediacodecmediacodec-copyvideotoolboxvideotoolbox-copyh264,vc1,hevc,vp8,vp9,av1,proresvd-lavc-fastvd-lavc-film-grainvd-lavc-show-allvd-lavc-skiploopfiltervd-lavc-skipidctvd-lavc-skipframevd-lavc-framedropvd-lavc-threadsvd-lavc-bitexactvd-lavc-assume-old-x264vd-lavc-check-hw-profilevd-lavc-software-fallbackvd-lavc-ovd-lavc-drvd-apply-croppinghwdec-codecshwdec-image-formathwdec-extra-framesgpunonrefbidirnonkey../mpv/video/filter/refqueue.cimg../mpv/video/filter/refqueue.c:159q->pos >= 0 && q->pos < q->num_queue../mpv/video/filter/refqueue.c:67q->convpast >= 0 && future >= 0failed to output frame q->pos >= -1 && q->pos < q->num_queueq->num_queue > 0/usr/include/libplacebo/utils/libav_internal.hdata->dhp->num_windows > 0pars->num_bezier_curve_anchors < 16force output formatdarhdr10plusforce-scalerunsupported format, missing OSD, or failed allocation Render subtitlesbottom-margintop-margin../mpv/video/hwdec.c:22../mpv/video/hwdec.c!devs->num_hwctxs!devs->load_api../mpv/video/hwdec.c:73at_ <= (devs->num_hwctxs)write_avif() packet side data: %02x [%d] = {[%s], '%s'} mapped color params: trc = %s primaries = %s range = %s colorspace = %s chroma_location = %s Could not find encoder '%s', for saving images Could not guess output format 'avif' Failed to allocate AVContext. Image format %s not supported by lavc. still-pictureCould not allocate AVFrame Could not open libavcodec encoder for saving images ../mpv/video/image_writer.cavioctxCould not allocate format context Could not allocate stream Could not copy parameters from context Could not initialize output Could not write format header Could not allocate packet Error sending frame Error receiving packet Error writing frame Could not write trailer write_avif(): avio_size() = %li libwebppredlosslessqualitydistanceeffortwbxlibaom-av1input: %s Falling back to high-depth format. will convert image to %s Error creating '%s' for writing: %s! Error writing file '%s'! jpeg-qualityjpeg-source-chromapng-compressionpng-filterwebp-losslesswebp-qualitywebp-compressionjxl-distancejxl-effortavif-encoderavif-optsavif-pixfmthigh-bit-depthtag-colorspaceusageallintracrfcpu-used../mpv/video/img_format.c:144../mpv/video/img_format.cdesc.num_planes == 1yap8yap16grayaf32yuv444pfyuva444pfyuv420pfyuva420pfyuv422pfyuva422pfyuv440pfyuva440pfyuv410pfyuva410pfyuv411pfyuva411pfrgb30gbrp1gbrp2gbrp3gbrp4gbrp5gbrp6vdpau_output../mpv/video/mp_image.c*dstw >= 0 && h >= 0dst->imgfmt == src->imgfmt && dst->w == src->w && dst->h == src->hdst->bufs[0] && src->bufs[0]../mpv/video/mp_image.c:370../mpv/video/mp_image.c:396dst->imgfmt == src->imgfmtdst->w == src->w && dst->h == src->hmp_image_is_writeable(dst)x0 >= 0 && y0 >= 0x0 <= x1 && y0 <= y1x1 <= img->w && y1 <= img->h!(x0 & (img->fmt.align_x - 1))!(y0 & (img->fmt.align_y - 1))%dx%d [%d:%d] %s/%s/%s/%s/%s CL=%s crop=%dx%d+%d+%d rot=%d stereo=%s A=%s../mpv/video/mp_image.c:250!mpi->planes[0]!mpi->bufs[0]mp_image_is_writeable(img)dst != src../mpv/video/mp_image.c:545dst->ff_side_data[n].buf../mpv/video/mp_image.c:331../mpv/video/mp_image.c:344../mpv/video/mp_image.c:1138dst->opaque_refMP_IS_ALIGNED(x, img->fmt.align_x)MP_IS_ALIGNED(y, img->fmt.align_y)MP_IS_ALIGNED(y, 1 << img->fmt.ys[plane])../mpv/video/mp_image_pool.cit->referenced../mpv/video/mp_image_pool.c:80it->pool_aliveimg_it->pool_alive!!new->bufs[p] == !p!it->referenced && it->pool_alive../mpv/video/mp_image_pool.c:175../mpv/video/mp_image_pool.c:178src->hwctxWindow size: %dx%d (Borders: l=%d t=%d r=%d b=%d) Video source: %dx%d (%d:%d) Video display: (%d, %d) %dx%d -> (%d, %d) %dx%d Video scale: %f/%f OSD borders: l=%d t=%d r=%d b=%d Video borders: l=%d t=%d r=%d b=%d Invalid OSD / subtitle bitmap size ../mpv/video/out/bitmap_packer.cpacker->w == 0 || IS_POWER_OF_2(packer->w)packer->h == 0 || IS_POWER_OF_2(packer->h)../mpv/video/out/bitmap_packer.c:192../mpv/video/out/bitmap_packer.c:193../mpv/video/out/bitmap_packer.c:195../mpv/video/out/dither.c:154../mpv/video/out/dither.csizeb >= 1 && sizeb <= MAX_SIZEBtotal >= oldtotal../mpv/video/out/dr_helper.ccmd->res->bufs[0]!cmd->res->bufs[1]mp_image_is_writeable(cmd->res)../mpv/video/out/dr_helper.c:135new_refatomic_load(&dr->dr_in_flight) == 0../mpv/video/out/dr_helper.c:43!dr->thread_validdr->thread_validmp_thread_id_equal(dr->thread_id, mp_thread_current_id())../mpv/video/out/filter_kernels.cfilter->f.radius > 0filter->size > 0Available GPU APIs and contexts: %s %s ../mpv/video/out/gpu/context.c:242Initializing GPU context '%s' Probing for best GPU context. Failed initializing any suitable GPU context! gpu-apigpu-debuggpu-swGPU APIsGPU contextsAuto detect../mpv/video/out/gpu/error_diffusion.cshifted_x > 0block_size <= heightshared uint err_rgb8[%d]; for (int i = int(gl_LocalInvocationIndex); i < %d; i += %d) err_rgb8[i] = 0u; for (int block_id = 0; block_id < %d; ++block_id) { groupMemoryBarrier(); barrier(); int id = int(gl_LocalInvocationIndex) + block_id * %d; int y = id %% %d, x_shifted = id / %d; int x = x_shifted - y * %d; if (0 <= x && x < %d) { int idx = (x_shifted * %d + y) %% %d; vec3 pix = texelFetch(texture%d, ivec2(x, y), 0).rgb; uint err_u32 = err_rgb8[idx] + %uu; pix = pix * %d.0 + vec3(int((err_u32 >> %d) & 255u) - 128,int((err_u32 >> %d) & 255u) - 128,int( err_u32 & 255u) - 128) / %d.0; err_rgb8[idx] = 0u; vec3 dithered = round(pix); imageStore(out_image, ivec2(x, y), vec4(dithered / %d.0, 0.0)); vec3 err_divided = (pix - dithered) * %d.0 / %d.0; ivec3 tmp; tmp = ivec3(round(err_divided * %d.0)); err_u32 = (uint(tmp.r & 255) << %d)|(uint(tmp.g & 255) << %d)| uint(tmp.b & 255); if (x >= %d) atomicAdd(err_rgb8[(idx + %d) %% %d], err_u32); } false-fssierra-litefloyd-steinbergatkinsonjarvis-judice-ninkestuckiburkessierra-3sierra-2Available hwdecs: auto (behavior depends on context) all (load all hwdecs) no (do not load any and block loading on demand) No hwdec backend named '%.*s' found! ../mpv/video/out/gpu/hwdec.c:93../mpv/video/out/gpu/hwdec.c:101Loading hwdec driver '%s' Loading failed. ../mpv/video/out/gpu/hwdec.c:238../mpv/video/out/gpu/hwdec.cra_hwdec_test_format(hwdec, params->imgfmt)../mpv/video/out/gpu/hwdec.c:139../mpv/video/out/gpu/hwdec.c:133ctx->ra_ctxLoading hwdec drivers for all formats Loading hwdec drivers for format: '%s' lcms2: %s %dx%dx%dOpening ICC profile '%s' ../mpv/video/out/gpu/lcms.c:101Got an embedded ICC profile. ../mpv/video/out/gpu/lcms.cp->vid_profile../mpv/video/out/gpu/lcms.c:341ver=1.4, intent=%d, size=%dx%dx%d, prim=%d, trc=%d, contrast=%d shaOpening 3D LUT cache in file '%s'. ../mpv/video/out/gpu/lcms.c:4493D LUT cache invalid! Successfully opened embedded ICC profile Video contained an invalid ICC profile! Ignoring... Using specified contrast: %d Detected ICC profile contrast: %f ../mpv/video/out/gpu/lcms.c:424Error loading ICC profile. use-embedded-icc-profileicc-profileicc-profile-autoicc-cacheicc-cache-diricc-intenticc-force-contrasticc-3dlut-sizeicc-use-luma../mpv/video/out/gpu/libmpv_gpu.c:47../mpv/video/out/gpu/libmpv_gpu.c:57../mpv/video/out/gpu/libmpv_gpu.c:83drm_draw_surface_sizedrm_params_v2../mpv/video/out/gpu/osd.cimgs->packedReallocating OSD texture to %dx%d. OSD bitmaps do not fit on a surface with the maximum supported size %dx%d. ../mpv/video/out/gpu/osd.c:201../mpv/video/out/gpu/osd.c:79../mpv/video/out/gpu/osd.c:85../mpv/video/out/gpu/osd.c:92index >= 0 && index < MAX_OSD_PARTSosdtexcolor = texture(osdtex, texcoord).bgra; color = vec4(ass_color.rgb, ass_color.a * texture(osdtex, texcoord).r); ../mpv/video/out/gpu/osd.c:254positiontexcoordass_color../mpv/video/out/gpu/ra.c:97../mpv/video/out/gpu/ra.c:13../mpv/video/out/gpu/ra.cparams->h == 1 && params->d == 1params->d == 1params->dimensions >= 1 && params->dimensions <= 3../mpv/video/out/gpu/ra.c:107unormuint LA LFCRSTTexture formats: NAME COMP*TYPE SIZE DEPTH PER COMP. %-10s %d*%s %3dB %s %s %s %s {%s} LA = LUMINANCE_ALPHA hack format LF = linear filterable CR = can be used for render targets ST = can be used for storable images %d planes %dx%d %d/%d [%s] (%s) [%s] _rgbaImage formats: %s => r16fr32frg16frg32frgba16frgba32fr11f_g11f_b10fr8r16rg8rg16rgba8rgba16rgb10_a2r8uir16uir32uirg8uirg16uirg32uirgba8uirgba16uirgba32uirgb10_a2uiflushing shader cache ../mpv/video/out/gpu/shader_cache.c:251../mpv/video/out/gpu/shader_cache.csc->ra->caps & RA_CAP_GLOBAL_UNIFORMlayout(std140, binding=%d) uniform UBO { }; layout(offset=%zu) %s %s; layout(std430, push_constant) uniform PushC { layout(binding=%d) uniform %s %s; layout(std140, binding=%d) uniform %s { %s }; layout(std430, binding=%d) restrict coherent buffer %s { %s }; layout(binding=%d, %s) layout(%s) uniform restrict %s %s; esvaryingattributevec2vec3vec4layout(location=0) !sc->needs_reset#version %d%s #extension GL_ARB_compute_shader : enable #extension %s : enable #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #else precision mediump float; #endif precision mediump sampler2D; precision mediump sampler3D; #define tex1D texture #define tex3D texture #define LUT_POS(x, lut_size) mix(0.5 / (lut_size), 1.0 - 0.5 / (lut_size), (x)) #define tex1D texture1D #define tex3D texture3D #define texture texture2D void main() { layout(location=%d) e->dim_v == 2 && e->type == RA_VARTYPE_FLOAT%s%s vec2 vertex_position; gl_Position = vec4(vertex_position, 1.0, 1.0); %s%s %s vertex_%s; %s%s %s %s; %s = vertex_%s; %sout vec4 out_color; vec4 color = vec4(0.0, 0.0, 0.0, 1.0); out_color = color; target_formattype %d blend %d %d %d %d format %s ../mpv/video/out/gpu/shader_cache.c:934vertex_%s../mpv/video/out/gpu/shader_cache.c:948../mpv/video/out/gpu/shader_cache.c:957../mpv/video/out/gpu/shader_cache.c:960Trying to load shader from disk... mpv shader cache v1 ../mpv/video/out/gpu/shader_cache.c:621UBO../mpv/video/out/gpu/shader_cache.c:626Failed creating uniform buffer! Writing shader cache file: %s ../mpv/video/out/gpu/shader_cache.c:965sc->num_uniforms == entry->num_cached_uniformsUpdating %s uniform '%s' ../mpv/video/out/gpu/shader_cache.c:545e->uboe->pushc../mpv/video/out/gpu/shader_cache.c:985gl_FragColor = color; ../mpv/video/out/gpu/shader_cache.c:114../mpv/video/out/gpu/shader_cache.c:185sampler1Dsampler3Dsampler2DRectsamplerExternalOESsampler2Dusampler2Dhighp usampler2Dwriteonly highp image2Dwriteonly image2DGL_ARB_shader_image_load_storesc->ra->caps & RA_CAP_BUF_RWGL_ARB_shader_storage_buffer_objectmat2mat3dims > 0 && dims < MP_ARRAY_SIZE(bvecs)PCbvec2bvec3bvec4Failed initializing SPIR-V compiler! spirv-compiler.w.width.h.height../mpv/video/out/gpu/user_shaders.cidx < MAX_SZEXP_SIZEStack underflow in RPN expression! Illegal operation in RPN expression! Variable %.*s not found in RPN expression! Malformed stack after RPN expression! //!Shader appears to contain no headers! //!TEXTUREUSER_TEXTEXTURE%d %d %dError while parsing SIZE! FORMAT Unrecognized/unavailable FORMAT name: '%.*s'! FILTERLINEARNEARESTUnrecognized FILTER: '%.*s'! BORDERCLAMPREPEATUnrecognized BORDER: '%.*s'! Unrecognized command '%.*s'! No FORMAT specified. The specified texture format cannot be filtered! Error while parsing TEXTURE body: must be a valid hexadecimal sequence, on a single line! Shader TEXTURE size mismatch: got %zd bytes, expected %d! (unknown)HOOKEDHOOKPasses may only hook up to %d textures! BINDPasses may only bind up to %d textures! SAVEDESCOFFSETALIGN%f %fError while parsing OFFSET! WIDTHError while parsing WIDTH! HEIGHTError while parsing HEIGHT! WHENError while parsing WHEN! COMPONENTSError while parsing COMPONENTS! COMPUTE%d %d %d %dError while parsing COMPUTE! Pass has no hooked textures (will be ignored)! ../mpv/video/out/gpu/utils.cat_ <= (pool->num_buffers)../mpv/video/out/gpu/utils.c:81Resized buffer pool of type %u to size %d lmax > lmin!params->initial_data(unset)Resizing texture: %dx%d Format %s not supported. Error: texture could not be created. ../mpv/video/out/gpu/utils.c:251!pool->runningpool->running[%3d] %.*s (float tex. missing)(GLSL version too old)FBO format '%s' not found! Testing FBO format %s Using FBO format %s. User-specified FBO format '%s' failed to initialize! (exists=%d, renderable=%d, linear_filter=%d, fbo_test_result=%d) Disabling alpha checkerboard (no gl_FragCoord). Disabling dithering (no gl_FragCoord). Force-disabling compute shaders as an FBO format was not available! See your FBO format configuration! Force-disabling compute shaders as the chosen FBO format is not storable! See your FBO format configuration! Disabling error diffusion dithering because compute shader was not supported. Fallback to dither=fruit instead. Disabling HDR peak computation (one or more of the following is not supported: compute shaders=%d, SSBO=%d). No advanced processing required. Enabling dumb mode. High bit depth FBOs unsupported. Enabling dumb mode. Most extended features will be disabled. Disabling scaler #%d %s %s. Disabling linear/sigmoid scaling (GLSL version too old). Disabling color management (GLSL version too old). Disabling debanding (GLSL version too old). ../mpv/video/out/gpu/video.c:769../mpv/video/out/gpu/video.c:1570 + unsharp maskingdebanding (%s)../mpv/video/out/gpu/video.c:2133../mpv/video/out/gpu/video.c:1516raaargba../mpv/video/out/gpu/video.c*offset + count < sizeof(dst)img.padding + count < sizeof(src)color.%s = %f * vec4(texture(texture%d, texcoord%d)).%s; shaderrandominput_sizetarget_sizetex_offsetuser shader: %.*s (%s)color = hook(); ../mpv/video/out/gpu/video.c:2104../mpv/video/out/gpu/video.c:2119../mpv/video/out/gpu/video.c:2153LUMACHROMARGBXYZ../mpv/video/out/gpu/video.c:2161../mpv/video/out/gpu/video.c:590texture%dtexture_size%dtexture_rot%dtexture_off%dpixel_size%dp->hwdec_active && p->hwdec_mappervimg->mpicolor conversioncolor = color.%s; colormatrix_ccolor.rgb = mat3(colormatrix) * color.rgb + colormatrix_c; // constant luminance conversion color.br = color.br * mix(vec2(1.5816, 0.9936), vec2(1.9404, 1.7184), %s(lessThanEqual(color.br, vec2(0)))) + color.gg; color.rgb = mix(color.rgb * vec3(1.0/4.5), pow((color.rgb + vec3(0.0993))*vec3(1.0/1.0993), vec3(1.0/0.45)), %s(lessThanEqual(vec3(0.08145), color.rgb))); color.g = (color.g - 0.2627*color.r - 0.0593*color.b)*1.0/0.6780; color.rgb = mix(color.rgb * vec3(4.5), vec3(1.0993) * pow(color.rgb, vec3(0.45)) - vec3(0.0993), %s(lessThanEqual(vec3(0.0181), color.rgb))); color.a = 1.0; color = vec4(color.rgb * color.a, color.a); !buffer->mpiat_ <= (p->num_dr_buffers)DRPBOnaivemap frame (hwdec)Mapping hardware decoded surface failed. mpi->num_planes == p->plane_countDR enabled: %s upload frame (%s)layout (local_size_x = %d, local_size_y = %d) in; out_scale#define outcoord(id) (out_scale * (vec2(id) + vec2(0.5))) #define texmap%d(id) (texture_rot%d * outcoord(id) + pixel_size%d * texture_off%d) #define texcoord%d texmap%d(gl_GlobalInvocationID) #define gl_NumWorkGroups uvec3(%d, %d, 1) Interpolation now requires enabling display-sync mode. E.g.: --video-sync=display-resample correct-downscaling requires non-bilinear scaler. Available error diffusion kernels: No error diffusion kernel named '%s' found! NATIVE_CROPPEDOUTPUT#define %s_raw texture%d #define %s_pos texcoord%d #define %s_size texture_size%d #define %s_rot texture_rot%d #define %s_off texture_off%d #define %s_pt pixel_size%d #define %s_map texmap%d #define %s_mul %f #define %s_tex(pos) (%s_mul * vec4(texture(%s_raw, pos)).%s) #define %s_gather(pos, c) (%s_mul * vec4(textureGather(%s_raw, pos, c))) #define %s_texOff(off) %s_tex(%s_pos + %s_pt * vec2(off)) #define %s_texOff(off) %s_tex(%s_pos + %s_rot * vec2(off)/%s_size) ../mpv/video/out/gpu/video.c:1291texcoord%d../mpv/video/out/gpu/video.c:1302after renderingUsing HW-overlay mode. No GL filtering is performed on the video! Initializing texture for hardware decoding failed. before video texture creationTexture for plane %d: %dx%d after video texture creationimageStore(out_image, ivec2(gl_GlobalInvocationID), color); after dispatching compute shaderout_imageRunning hooks for %s Skipping hook on %s due to condition. Hook tried to align unresizable texture %s! Skipping hook on %s due to no texture named %s. color.%c = %f; type != PLANE_NONEHook tried changing size of unscalable texture %s! (remainder pass)size <= stride../mpv/video/out/gpu/video.c:1838after initializing scalerOne or more colorspace value is being overridden by user while the FBO provides colorspace information: transfer function: (dst: %s, fbo: %s), primaries: (dst: %s, fbo: %s). Rendering can lead to incorrect results! Disabling color management (no RGBA16 3D textures). after 3d lut creationdst.primaries && dst.transferTone mapping curve unsupported by vo_gpu, falling back. Gamut mapping mode unsupported by vo_gpu, falling back. Failed to create HDR peak detection SSBO, disabling. detect HDR peakvec2 average;int frame_sum;uint frame_max;uint counter;PeakDetectlut_3dvec3 cpos; cpos[%d] = LUT_POS(color[%d], %d.0); color.rgb = tex3D(lut_3d, cpos).rgb; drawing osd%s=%s (%s)color = texture(tex, pos); // first pass color *= %f; %s second passALPHACHROMA_SCALED// merging plane %d ... // merging plane %d ... into %d merging planes// use_integer fix for plane %d use_integer fix// chroma fix for rotated plane %d chroma fix for rotated plane// upscaling plane %d combining planesNATIVEMAINPRESUBblend subs videocolor.rgb = clamp(color.rgb, 0.0, 1.0); color.rgb = %f - log(1.0/(color.rgb * %f + %f) - 1.0) * 1.0/%f; SIGMOIDPREKERNEL// main scaling POSTKERNEL// scaler post-conversion color.rgb = (1.0/(1.0 + exp(%f * (%f - color.rgb))) - %f) * 1.0/%f; blend subsSCALED// scaler pre-conversion user_gammacolor.rgb = pow(color.rgb, vec3(user_gamma)); // transparency checkerboard vec2 tile_coord = vec2(gl_FragCoord.x, %d.0 + %f * gl_FragCoord.y);bvec2 tile = lessThan(fract(tile_coord * 1.0 / 32.0), vec2(0.5)); vec3 background = vec3(tile.x == tile.y ? 0.93 : 0.87); color.rgb += background.rgb * (1.0 - color.a); vec4 background = vec4(%f, %f, %f, %f); color += background * (1.0 - color.a); color.rgb *= vec3(color.a); Fallback to dither=fruit because there is no enough shared memory (%d/%d). dither=error-diffusion (kernel=%s, depth=%d)Dither to %d. ../mpv/video/out/gpu/video.c:2886../mpv/video/out/gpu/video.c:2900GL too old. Falling back to ordered dither. ../mpv/video/out/gpu/video.c:2912dither setup// dithering dithervec2 dither_coord = vec2(gl_FragCoord.x, %d.0 + %f * gl_FragCoord.y);vec2 dither_pos = dither_coord * 1.0/%d.0; dither_trafodither_pos = dither_trafo * dither_pos; float dither_value = texture(dither, dither_pos).r; color = floor(color * %d.0 + dither_value + 0.5 / %d.0) * 1.0/%d.0; output to screentscale->kernel && !tscale->kernel->polarsurface_wrap(surface_bse + size-1) == surface_endinterpolation queue underrun interpolationinter_coeffcolor = mix(texture(texture0, texcoord0), texture(texture1, texcoord1), inter_coeff); fcoordid == iinter frame dur: %f vsync: %f, mix: %f redraw cached frameafter video renderingafter OSD renderingpass '%.*s': last %dus avg %dus peak %dus !p->num_dr_buffers../mpv/video/out/gpu/video.c:4146../mpv/video/out/gpu/video.c:4163before init_glafter init_glambient light changed: %d lux (gamma: %f) DR path suspected slow/uncached, disabling. ../mpv/video/out/gpu/video.c:4296!p->hwdec_ctx.ra_ctxp->hwdec_ctx.ra_ctxdscalecscaletscalergba16hfgpu-dumb-modegamma-factorno replacementgamma-autotarget-primtarget-trctarget-peaktarget-contrasttarget-gamuttone-mapping-paraminverse-tone-mappingtone-mapping-max-boosttone-mapping-visualizegamut-mapping-modehdr-compute-peakhdr-peak-percentilehdr-peak-decay-ratehdr-scene-threshold-lowhdr-scene-threshold-highhdr-contrast-recoveryhdr-contrast-smoothnessopengl-pboscale-param1scale-param2scale-blurscale-taperscale-wparamscale-wtaperscale-clampscale-radiusscale-antiringscale-windowdscale-param1dscale-param2dscale-blurdscale-taperdscale-wparamdscale-wtaperdscale-clampdscale-radiusdscale-antiringdscale-windowcscale-param1cscale-param2cscale-blurcscale-tapercscale-wparamcscale-wtapercscale-clampcscale-radiuscscale-antiringcscale-windowtscale-param1tscale-param2tscale-blurtscale-tapertscale-wparamtscale-wtapertscale-clamptscale-radiustscale-antiringtscale-windowscaler-resizes-onlycorrect-downscalinglinear-downscalinglinear-upscalingsigmoid-upscalingsigmoid-centersigmoid-slopefbo-formatdither-depthdither-size-fruittemporal-dithertemporal-dither-perioderror-diffusionbackgroundopengl-rectangle-texturesbackground-colorinterpolation-thresholdblend-subtitlesglsl-shadersglsl-shaderglsl-shaders-appendglsl-shader-optsdebandsharpengpu-tex-pad-xgpu-tex-pad-ygpu-shader-cachegpu-shader-cache-dirgpu-hwdec-interopgamut-warningReplaced by --gamut-mapping-mode=warngamut-clippingReplaced by --gamut-mapping-mode=desaturatetone-mapping-desaturateReplaced by --tone-mapping-modetone-mapping-desaturate-exponenttilesfruitorderedclipperceptualdesaturatedarkenmobiusreinhardhablesplinebt.2390bt.2446ast2094-40st2094-10bartlettcosinehanningtukeyhammingquadricwelchkaiserblackmansphinxjincoversamplespline16spline36spline64sinclanczosginsengbicubichermitecatmull_rommitchellrobidouxrobidouxsharpboxnearesttrianglegaussianbilinearbicubic_fastewa_lanczosewa_hanningewa_ginsengewa_lanczossharpewa_lanczos4sharpestewa_lanczossofthaasnsoftewa_robidouxewa_robidouxsharpchromavec4 %s = vec4(-0.5, 0.1666, 0.3333, -0.3333) * %s + vec4(1, 0, -0.5, 0.5); %s = %s * %s + vec4(0, 0, -0.5, 0.5); %s = %s * %s + vec4(-0.6666, 0, 0.8333, 0.1666); %s.xy *= vec2(1, 1) / vec2(%s.z, %s.w); %s.xy += vec2(1.0 + %s, 1.0 - %s); d = length(vec2(%d.0, %d.0) - fcoord); if (d < %f) { w = tex1D(lut, LUT_POS(d * 1.0/%f, %d.0)).r; w = texture(lut, vec2(0.5, LUT_POS(d * 1.0/%f, %d.0))).r; wsum += w; color[%d] += w * in%d[idx]; in0 = texture(tex, base + pt * vec2(%d.0, %d.0)); color += vec4(w) * in0; // linearize color.rgb = mix(color.rgb * vec3(1.0/12.92), pow((color.rgb + vec3(0.055))/vec3(1.055), vec3(2.4)), %s(lessThan(vec3(0.04045), color.rgb))); color.rgb = pow(color.rgb, vec3(2.4)); color.rgb = pow(color.rgb, vec3(1.8)); color.rgb = pow(color.rgb, vec3(2.0)); color.rgb = pow(color.rgb, vec3(2.2)); color.rgb = pow(color.rgb, vec3(2.6)); color.rgb = pow(color.rgb, vec3(2.8)); color.rgb = mix(color.rgb * vec3(1.0/16.0), pow(color.rgb, vec3(1.8)), %s(lessThan(vec3(0.03125), color.rgb))); color.rgb = pow(color.rgb, vec3(1.0/%f)); color.rgb = max(color.rgb - vec3(%f), vec3(0.0)) / (vec3(%f) - vec3(%f) * color.rgb); color.rgb = pow(color.rgb, vec3(%f)); color.rgb *= vec3(%f); color.rgb = mix(vec3(4.0) * color.rgb * color.rgb, exp((color.rgb - vec3(%f)) * vec3(1.0/%f)) + vec3(%f), %s(lessThan(vec3(0.5), color.rgb))); color.rgb *= vec3(1.0/%f); color.rgb = mix((color.rgb - vec3(0.125)) * vec3(1.0/5.6), pow(vec3(10.0), (color.rgb - vec3(%f)) * vec3(1.0/%f)) - vec3(%f), %s(lessThanEqual(vec3(0.181), color.rgb))); color.rgb = pow(vec3(10.0), (color.rgb - vec3(%f)) * vec3(1.0/%f)) - vec3(%f); color.rgb = mix((color.rgb - vec3(%f)) * vec3(1.0/%f), (pow(vec3(10.0), (color.rgb - vec3(%f)) * vec3(1.0/%f)) - vec3(%f)) * vec3(1.0/%f), %s(lessThanEqual(vec3(%f), color.rgb))); color.rgb = vec3(52.37/48.0) * pow(color.rgb, vec3(2.6)); // delinearize color.rgb = mix(color.rgb * vec3(12.92), vec3(1.055) * pow(color.rgb, vec3(1.0/2.4)) - vec3(0.055), %s(lessThanEqual(vec3(0.0031308), color.rgb))); color.rgb = pow(color.rgb, vec3(1.0/2.4)); color.rgb = pow(color.rgb, vec3(1.0/1.8)); color.rgb = pow(color.rgb, vec3(1.0/2.0)); color.rgb = pow(color.rgb, vec3(1.0/2.2)); color.rgb = pow(color.rgb, vec3(1.0/2.6)); color.rgb = pow(color.rgb, vec3(1.0/2.8)); color.rgb = mix(color.rgb * vec3(16.0), pow(color.rgb, vec3(1.0/1.8)), %s(lessThanEqual(vec3(0.001953), color.rgb))); color.rgb = (vec3(%f) + vec3(%f) * color.rgb) / (vec3(1.0) + vec3(%f) * color.rgb); color.rgb = mix(vec3(0.5) * sqrt(color.rgb), vec3(%f) * log(color.rgb - vec3(%f)) + vec3(%f), %s(lessThan(vec3(1.0), color.rgb))); color.rgb = mix(vec3(5.6) * color.rgb + vec3(0.125), vec3(%f) * log(color.rgb + vec3(%f)) + vec3(%f), %s(lessThanEqual(vec3(0.01), color.rgb))); color.rgb = vec3(%f) * log(color.rgb + vec3(%f)) + vec3(%f); color.rgb = mix(vec3(%f) * color.rgb + vec3(%f), vec3(%f) * log(vec3(%f) * color.rgb + vec3(%f)) + vec3(%f), %s(lessThanEqual(vec3(0.0), color.rgb))); color.rgb = pow(color.rgb * vec3(48.0/52.37), vec3(1.0/2.6)); #undef tex #undef texmap #define tex texture%d #define texmap texmap%d vec2 pos = texcoord%d; vec2 size = texture_size%d; vec2 pt = pixel_size%d; color = vec4(0.0); { vec2 dir = vec2(%d.0, %d.0); pt *= dir; float fcoord = dot(fract(pos * size - vec2(0.5)), dir); vec2 base = pos - fcoord * pt - pt * vec2(%d.0); vec4 c; vec4 hi = vec4(0.0); vec4 lo = vec4(1.0); lutfloat ypos = LUT_POS(fcoord, %d.0); float weights[%d]; c = texture(lut, vec2(%f, ypos)); weights[%d] = c[%d]; // scaler samples c = texture(texture%d, texcoord%d); c = texture(tex, base + pt * vec2(%d.0)); color += vec4(weights[%d]) * c; lo = min(lo, c); hi = max(hi, c); color = mix(color, clamp(color, lo, hi), %f); vec2 fcoord = fract(pos * size - vec2(0.5)); vec2 base = pos - fcoord * pt; float w, d, wsum = 0.0; int idx; vec4 in%d; in%d = textureGatherOffset(tex, base, ivec2(%d, %d), %d); idx = %d; color = color / vec4(wsum); vec2 wpos = texmap(gl_WorkGroupID * gl_WorkGroupSize); vec2 wbase = wpos - pt * fract(wpos * size - vec2(0.5)); vec2 base = pos - pt * fcoord; ivec2 rel = ivec2(round((base - wbase) * size)); shared float in%d[%d]; for (int y = int(gl_LocalInvocationID.y); y < %d; y += %d) { for (int x = int(gl_LocalInvocationID.x); x < %d; x += %d) { c = texture(tex, wbase + pt * vec2(x - %d, y - %d)); in%d[%d * y + x] = c[%d]; }} idx = %d * rel.y + rel.x + %d; vec2 fcoord = fract(pos * size + vec2(0.5, 0.5)); fcoord.xparmxfcoord.yparmyvec4 cdelta; cdelta.xz = parmx.rg * vec2(-pt.x, pt.x); cdelta.yw = parmy.rg * vec2(-pt.y, pt.y); vec4 ar = texture(tex, pos + cdelta.xy); vec4 ag = texture(tex, pos + cdelta.xw); vec4 ab = mix(ag, ar, parmy.b); vec4 br = texture(tex, pos + cdelta.zy); vec4 bg = texture(tex, pos + cdelta.zw); vec4 aa = mix(bg, br, parmy.b); color = mix(aa, ab, parmx.b); vec2 pos = pos - vec2(0.5) * pt; output_sizevec2 coeff = fcoord * output_size/size; coeff = (coeff - %f) * 1.0/%f; coeff = clamp(coeff, 0.0, 1.0); color = texture(tex, pos + pt * (coeff - fcoord)); // color mapping src_lumadst_luma// apply ootf color.rgb *= vec3(%f * pow(dot(src_luma, color.rgb), %f)); color.rgb = mix(color.rgb * vec3(4.5), vec3(1.0993) * pow(color.rgb, vec3(0.45)) - vec3(0.0993), %s(lessThan(vec3(0.0181), color.rgb))); color.rgb = pow(color.rgb, vec3(1.2)); // HDR tone mapping int sig_idx = 0; if (color[1] > color[sig_idx]) sig_idx = 1; if (color[2] > color[sig_idx]) sig_idx = 2; float sig_max = color[sig_idx]; float sig_peak = %f; float sig_avg = %f; if (average.y > 0.0) { sig_avg = max(1e-3, average.x); sig_peak = max(1.00, average.y); shared int wg_sum; shared uint wg_max; wg_sum = 0; wg_max = 0u; float sig_log = log(max(sig_max, %f)); atomicAdd(wg_sum, int(sig_log * %f)); atomicMax(wg_max, uint(sig_max * %f)); memoryBarrierShared(); if (gl_LocalInvocationIndex == 0u) { int wg_avg = wg_sum / int(gl_WorkGroupSize.x * gl_WorkGroupSize.y); atomicAdd(frame_sum, wg_avg); atomicMax(frame_max, wg_max); memoryBarrierBuffer(); uint num_wg = gl_NumWorkGroups.x * gl_NumWorkGroups.y; if (gl_LocalInvocationIndex == 0u && atomicAdd(counter, 1u) == num_wg - 1u) { counter = 0u; vec2 cur = vec2(float(frame_sum) / float(num_wg), frame_max); cur *= vec2(1.0/%f, 1.0/%f); cur.x = exp(cur.x); if (average.y == 0.0) average = cur; average += %f * (cur - average); average = cur; float weight = smoothstep(%f, %f, abs(log(cur.x / average.x))); average = mix(average, cur, weight); frame_sum = 0; frame_max = 0u; vec3 sig = min(color.rgb, sig_peak); sig *= 1.0/%f; sig_peak *= 1.0/%f; float sig_orig = sig[sig_idx]; float slope = min(%f, %f / sig_avg); sig *= slope; sig_peak *= slope; sig = min(%f * sig, 1.0); if (sig_peak > (1.0 + 1e-6)) { const float j = %f; float a = -j*j * (sig_peak - 1.0) / (j*j - 2.0*j + sig_peak); float b = (j*j - 2.0*j*sig_peak + sig_peak) / max(1e-6, sig_peak - 1.0); float scale = (b*b + 2.0*b*j + j*j) / (b-a); sig = mix(sig, scale * (sig + vec3(a)) / (sig + vec3(b)), %s(greaterThan(sig, vec3(j)))); sig = sig / (sig + vec3(%f)); float scale = (sig_peak + %f) / sig_peak; sig *= scale; vec3 hable(vec3 x) { return (x * (%f*x + vec3(%f)) + vec3(%f)) / (x * (%f*x + vec3(%f)) + vec3(%f)) - vec3(%f); sig = hable(max(vec3(0.0), sig)) / hable(vec3(sig_peak)).x; const float cutoff = 0.05, gamma = 1.0/%f; float scale = pow(cutoff / sig_peak, gamma.x) / cutoff; sig = mix(scale * sig, pow(sig / sig_peak, vec3(gamma)), %s(greaterThan(sig, vec3(cutoff)))); sig = min(%f / sig_peak, 1.0) * sig; vec4 sig_pq = vec4(sig.rgb, sig_peak); sig_pq *= vec4(1.0/%f); sig_pq = pow(sig_pq, vec4(%f)); sig_pq = (vec4(%f) + vec4(%f) * sig_pq) / (vec4(1.0) + vec4(%f) * sig_pq); sig_pq = pow(sig_pq, vec4(%f)); float scale = 1.0 / sig_pq.a; sig_pq.rgb *= vec3(scale); float maxLum = %f * scale; float ks = 1.5 * maxLum - 0.5; vec3 tb = (sig_pq.rgb - vec3(ks)) / vec3(1.0 - ks); vec3 tb2 = tb * tb; vec3 tb3 = tb2 * tb; vec3 pb = (2.0 * tb3 - 3.0 * tb2 + vec3(1.0)) * vec3(ks) + (tb3 - 2.0 * tb2 + tb) * vec3(1.0 - ks) + (-2.0 * tb3 + 3.0 * tb2) * vec3(maxLum); sig = mix(pb, sig_pq.rgb, %s(lessThan(sig_pq.rgb, vec3(ks)))); sig *= vec3(sig_pq.a); sig = pow(sig, vec3(1.0/%f)); sig = max(sig - vec3(%f), 0.0) / (vec3(%f) - vec3(%f) * sig); sig = pow(sig, vec3(1.0/%f)); sig *= vec3(%f); float coeff = max(sig[sig_idx] - %f, 1e-6) / max(sig[sig_idx], 1.0); coeff = %f * pow(coeff / %f, %f); color.rgb *= sig[sig_idx] / sig_orig; color.rgb = mix(color.rgb, %f * sig, coeff); cms_matrixcolor.rgb = cms_matrix * color.rgb; float cmin = min(min(color.r, color.g), color.b); if (cmin < 0.0) { float luma = dot(dst_luma, color.rgb); float coeff = cmin / (cmin - luma); color.rgb = mix(color.rgb, vec3(luma), coeff); } float cmax = 1.0/%f * max(max(color.r, color.g), color.b); if (cmax > 1.0) color.rgb /= cmax; // apply inverse ootf color.rgb /= vec3(max(1e-6, pow(dot(src_luma, color.rgb), %f))); color.rgb = mix(color.rgb * vec3(1.0/4.5), pow((color.rgb + vec3(0.0993)) * vec3(1.0/1.0993), vec3(1/0.45)), %s(lessThan(vec3(0.08145), color.rgb))); color.rgb = pow(color.rgb, vec3(1.0/1.2)); if (any(greaterThan(color.rgb, vec3(1.005))) || any(lessThan(color.rgb, vec3(-0.005)))) color.rgb = vec3(1.0) - color.rgb; float mod289(float x) { return x - floor(x * 1.0/289.0) * 289.0; } float permute(float x) { return mod289( mod289(34.0*x + 1.0) * (fract(x) + 1.0) ); float rand(float x) { return fract(x * 1.0/41.0); } vec3 _m = vec3(HOOKED_pos, random) + vec3(1.0); float h = permute(permute(permute(_m.x)+_m.y)+_m.z); vec4 average(float range, inout float h) { float dist = rand(h) * range; h = permute(h); float dir = rand(h) * 6.2831853; h = permute(h); vec2 o = dist * vec2(cos(dir), sin(dir)); vec4 ref[4]; ref[0] = HOOKED_texOff(vec2( o.x, o.y)); ref[1] = HOOKED_texOff(vec2(-o.y, o.x)); ref[2] = HOOKED_texOff(vec2(-o.x, -o.y)); ref[3] = HOOKED_texOff(vec2( o.y, -o.x)); return (ref[0] + ref[1] + ref[2] + ref[3])*0.25; color = HOOKED_tex(HOOKED_pos); vec4 avg, diff; avg = average(%f, h); diff = abs(color - avg); color = mix(avg, color, %s(greaterThan(diff, vec4(%f)))); vec3 noise; noise.x = rand(h); h = permute(h); noise.y = rand(h); h = permute(h); noise.z = rand(h); h = permute(h); color.xyz += %f * (noise - vec3(0.5)); float st1 = 1.2; vec4 p = HOOKED_tex(HOOKED_pos); vec4 sum1 = HOOKED_texOff(st1 * vec2(+1, +1)) + HOOKED_texOff(st1 * vec2(+1, -1)) + HOOKED_texOff(st1 * vec2(-1, +1)) + HOOKED_texOff(st1 * vec2(-1, -1)); float st2 = 1.5; vec4 sum2 = HOOKED_texOff(st2 * vec2(+1, 0)) + HOOKED_texOff(st2 * vec2( 0, +1)) + HOOKED_texOff(st2 * vec2(-1, 0)) + HOOKED_texOff(st2 * vec2( 0, -1)); vec4 t = p * 0.859375 + sum2 * -0.1171875 + sum1 * -0.09765625; color = p + t * %f; thresholdrangegrain../mpv/video/out/libmpv_sw.cp->src_params.imgfmt../mpv/video/out/libmpv_sw.c:20Assuming %f FPS for display sync. ../mpv/video/out/vo.cex->wakeup_cbVideo output %s not found! ../mpv/video/out/vo.c:276../mpv/video/out/vo.c:287reconfig to %s ../mpv/video/out/vo.c:599Video is flagged as rotated by %d degrees, but the video output does not support this. ../mpv/video/out/vo.c:670../mpv/video/out/vo.c:674vo->config_ok && !in->frame_queued && (!in->current_frame || in->current_frame->num_vsyncs < 1)!in->frame_queued../mpv/video/out/vo.c:1452video-drawvideo-flip../mpv/video/out/vo.c:505in->vsync_samples[n] > 0adjusting display FPS to a value closer to %.3f Hz switching back to assuming display fps = %.3f Hz vo-delayedvalue %f jittervalue %f vsync-diffdrop-vovideo outputsgldirect3d_shadersdirect3dopenglopengl-cbFailed presenting frame! Resize: %dx%d Reported display depth: %d Querying ICC profile... Could not retrieve an ICC profile. icc-profile-auto not implemented on this platform. gamma_auto option provided, but querying for ambient lighting is not supported on this platform ../mpv/video/out/vo_gpu.cp->ctx->rap->ctx->swapchainShader-based GPU Renderer%08d.%sSaving %s Creating output directory '%s'... Error creating output directory: %s Write video frames to image filesvo-imagevo-image-outdir../mpv/video/out/vo_lavc.cIgnoring mid-stream parameter changes! resolution changes not supported. Format %s not supported by lavc. video encoding using libavcodecNo render context set. ../mpv/video/out/vo_libmpv.c!ctx->next_frameprev_in_usempv_render_context_render() not being called or stuck. mpv_render_report_swap() not being called. !atomic_load(&ctx->in_use)!ctx->vo../mpv/video/out/vo_libmpv.c:167libmpv_render../mpv/video/out/vo_libmpv.c:189There is already a mpv_render_context set. glcb-noframeglcb-renderglcb-reportfliprender API for libmpvNull video outputvo-null[?1049l[?1049h[?2026h../mpv/video/out/vo_tct.csource[%d;%df[?2026ltcttrue-color terminalsvo-tctalgobufferingpixelplainhalf-blocks▄[38;2[48;2[38;5[48;5_Ga=d;\../mpv/video/out/vo_kitty.c:203../mpv/video/out/vo_kitty.c:204Failed to create shared memory objectFailed to truncate shared memory objectFailed to mmap shared memory object_Ga=T,t=s,f=24,s=%d,v=%d,C=1,q=2,m=1;%s\_Ga=T,f=24,s=%d,v=%d,C=1,q=2,m=1;_Gm=%d;/mpv-kitty-%p../mpv/video/out/vo_kitty.c:354kittyKitty terminal graphics protocolvo-kittyrowscolsconfig-clearalt-screenuse-shmmax content size: %dx%d monitor size: %dx%d ../mpv/video/repack.crp->comp_size == 1 || rp->comp_size == 2../mpv/video/repack.c:580../mpv/video/repack.c:493rp->comp_size == 2 && (1 << desc.endian_shift) == 2rp->endian_size == 2rp->steps[n].fmt[1].id == rp->steps[n + 1].fmt[0].idrp->configureddst_x >= 0 && dst_y >= 0 && src_x >= 0 && src_y >= 0 && w >= 0dst_x + w <= MP_ALIGN_UP(last->buf[1]->w, last->fmt[1].align_x)src_x + w <= MP_ALIGN_UP(first->buf[0]->w, first->fmt[0].align_x)dst_y < last->buf[1]->hsrc_y < first->buf[0]->h!(dst_x & (last->fmt[1].align_x - 1))!(src_x & (first->fmt[0].align_x - 1))!(w & ((1 << first->fmt[0].chroma_xs) - 1))!(dst_y & (last->fmt[1].align_y - 1))!(src_y & (first->fmt[0].align_y - 1))dst->fmt.bpp[p] == src->fmt.bpp[p]src->fmt.num_planes == dst->fmt.num_planessrc->fmt.bpp[p] == bpp * 8rp->f32_comp_size == 1 || rp->f32_comp_size == 2../mpv/video/repack.c:1064dst && srcdst->imgfmt == rs_last->fmt[1].idsrc->imgfmt == rs_first->fmt[0].idn > 0desc.component_sizeunaligned libswscale parameter; using slow copy. ../mpv/video/sws_utils.c:192../mpv/video/sws_utils.c:198Using zimg. Not using zimg, falling back to swscale. No scaler. Input image format %s not supported by libswscale. Output image format %s not supported by libswscale. sws_flagssrcwsrchsrc_formatdstwdsthdst_formatparam0param1src_h_chr_possrc_v_chr_posdst_h_chr_posdst_v_chr_poslibswscale initialization failed. image allocation failed. scalerlgbcgbcvschslsallow-zimgfast-bilinearpointbicublingauss../mpv/video/out/placebo/ra_pl.c:593../mpv/video/out/placebo/ra_pl.c:413../mpv/video/out/placebo/ra_pl.c:414../mpv/video/out/placebo/ra_pl.c:420../mpv/video/out/placebo/ra_pl.c:429../mpv/video/out/placebo/ra_pl.c:441Failed mapping vertex attrib '%s' to pl_fmt? ../mpv/video/out/placebo/ra_pl.c:491../mpv/video/out/placebo/ra_pl.c:500../mpv/video/out/placebo/ra_pl.c:256../mpv/video/out/placebo/ra_pl.c:649../mpv/video/out/placebo/ra_pl.c:532../mpv/video/out/placebo/ra_pl.c../mpv/video/out/placebo/ra_pl.c:31../mpv/video/out/placebo/ra_pl.c:35../mpv/video/out/placebo/ra_pl.c:87../mpv/video/out/placebo/ra_pl.c:106Failed mapping pl_fmt '%s' to ra_fmt? ../mpv/video/out/placebo/ra_pl.c:176libplacebo../mpv/video/out/vo_gpu_next.c:733Failed mapping hwdec frame? Open a bug! Failed mapping filter function '%s', no libplacebo analog? Filter radius specified but filter '%s' is not resizable, ignoring Failed recreating OSD texture! Failed uploading OSD texture! ../mpv/video/out/vo_gpu_next.c:351../mpv/video/out/vo_gpu_next.c:282../mpv/video/out/vo_gpu_next.cLoading custom LUT '%s' Failed uploading frame! pl->count <= VO_PASS_PERF_MAXicc%s_%016lx%s: key(%lx), size(%zu), load time(%.3f ms) %s: key(%lx), size(%zu) %s: key(%lx), size(%zu), save time(%.3f ms) cache->dircache->name_../mpv/video/out/vo_gpu_next.c:1746Removing %s | size: %9zu bytes | last used: %9d seconds ago p->num_dr_buffers == 0Could not find error diffusion kernel '%s', falling back to fruit. ../mpv/video/out/vo_gpu_next.c:1990../mpv/video/out/vo_gpu_next.c:2259status != PL_QUEUE_EOFUnknown error occurred while trying to take screenshot! No frames available to take screenshot of, is a file loaded? ../mpv/video/out/vo_gpu_next.c:1369Failed creating target FBO for screenshot! Failed rendering frame! bgra8pass->num_samples <= MP_ARRAY_SIZE(pass->samples)Forcing queue refill, PTS(%f + %f | %f) < VPTS(%f) ../mpv/video/out/vo_gpu_next.c:974Current PTS(%f) != VPTS(%f) Clamping first frame PTS from %f to %f Failed updating frames! Render queue underrun. gpu-nextVideo output based on libplaceboallow-delayed-peak-detectborder-backgroundcorner-roundinginterpolation-preservelut-typeimage-lutimage-lut-typetarget-luttarget-colorspace-hintlibplacebo-optsconversion../mpv/video/out/gpu_next/context.c:112killedunsupportedStarting subprocess: [%s, %sSubprocess failed: %s ../mpv/osdep/timer.craw_time_offset > 0time_ns > 0../mpv/ta/ta.ch->canary == CANARY!h->prevh->parent->child == hBlocks not freed: C. BytesBytesPtr %-20s %10s %10s %s '%.*s' %-20p %10zu %10zu %s %zu bytes in %zu blocks. ch->parent->child == ch!ch->parent->child->parent../mpv/ta/ta_utils.cta_get_size(*str) >= at!size%s:%d: internal error: pthread result %d (%s) PATH../mpv/osdep/subprocess-posix.c!(opts->fds[n].on_read && opts->fds[n].on_write)opts->fds[n].on_write && opts->fds[n].write_buf/dev/nullipc/%sCould not get wakeup pipe Client connected Poll error Encoding error Write error (%s) Read error (%s) Client disconnected Ignoring unterminated command on disconnect. ../mpv/input/ipc-unix.c:254ipc-%dipc/socketStarting IPC master Could not create IPC socket Could not bind IPC socket Could not listen on IPC socket Listening to IPC socket. Could not accept IPC client ../mpv/input/ipc-unix.c:276../mpv/input/ipc-unix.c:388Invalid IPC client argument: '%s' ../mpv/osdep/terminal-unix.ccount <= b->len>=rep <= seq_lenterminal/inputquit 4[?1003h[?1003l!getch2_enabled/dev/tty [1~[2~[3~[4~[5~[6~[7~[8~[11~[12~[13~[14~[15~[17~[18~[19~[20~[21~[23~[24~OAOBOCOD[[A[[B[[C[[D[[EOEOMOPOQOROSOaObOcOdOjOkOmOnOoOpOqOrOsOtOuOvOwOxOy[2^[3^[5^[6^[7^[8^[1;2[1;3[1;5[1;4[1;6[1;7[1;8[29~ !"#`a@ABC../mpv/sub/filter_regex.c:24../mpv/sub/filter_regex.c:30Regular expression error: '%s' Matching regex %d => drop: '%s' Error on regexec() on regex %d. LC_ALLLANGUAGE../mpv/osdep/language-posix.c:41.@../mpv/osdep/language-posix.c:58../mpv/osdep/language-posix.c:64../mpv/osdep/language-posix.c:69LC_MESSAGESLANGXDG_CACHE_HOMEXDG_CONFIG_HOMEXDG_STATE_HOME%s/mpv%s/.config/mpv%s/.mpv%s/.mpv/cache%s/.cache/mpv%s/.local/state/mpvConfig dir exceeds %d bytes /etc/mpvNo clock source available! CDCD-Text (%s): %s: '%s' /dev/sr0Can't open CDDA device. Can't open disc. +discSwitched to track %d SongwriterMessageArrangerUPC_EANdeviceparanoiasector-sizetoc-offsetspan-aspan-bcdtextDumping raw tuning commands and values: %02d: 0x%x(%d) => 0x%x(%d) Error tuning channel UNDEFINEDofftune_it: fd_frontend %d, %s freq %lu, srate %lu, pol %c, diseqc %u Using %s adapter %d tuning %s to %d Hz, bandwidth: %d tuning %s to Freq: %u, Pol: %c Srate: %d, 22kHz: %s, LNB: %d DISEQC setting failed DISEQC setting succeeded DTV_CLEAR failed tuning %s to %d, srate=%d tuning %s to %d, modulation=%d Unknown FE type, aborting. Getting frontend status Not able to lock to the signal on the given frequency, timeout: %d Error locking to channel Bit error rate: %d Signal strength: %d SNR: %d UNC: %d FE_STATUS: FE_HAS_SIGNAL FE_TIMEDOUT FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNCDVBv5: FE_GET_PROPERTY(DTV_ENUM_DELSYS) error: %d DVBv5: Frontend returned no delivery systems! DVBv5: Number of supported delivery systems: %d /dev/dvb/adapter%u/frontend%u/dev/dvb/adapter%u/dvr0/dev/dvb/adapter%u/demux0Opening frontend device %s Error opening frontend device: %d Opening %d demuxers Error opening demux0: %d Error opening dvr device %s: %d /dev/dvb/adapter%d/demux0Changing demuxer count %d -> %d Error in DMX_SET_BUFFER_SIZE %i: errno=%d Error in DMX_SET_PES_FILTER %i: errno=%d Opening PAT demux failed: %dioctl DMX_SET_FILTER failed: %dPAT: read error: %dTuning to %s frequency %lu Hz Tuning failed DVB-C ANNEX ADVB-C ANNEX BDVB-TDSSDVB-SDVB-S2DVB-HISDBTISDBSISDBCATSCATSCMHDTMBCMMBDABDVB-T2TURBODVB-C ANNEX C../mpv/stream/stream_dvb.c:806FEC_1_2FEC_2_3FEC_3_4FEC_4_5FEC_5_6FEC_6_7FEC_7_8FEC_8_9+,;Maximum number of PIDs for one channel reached, ignoring further ones! %d%nReading config file %s for type %s Can't open file %s ../mpv/stream/stream_dvb.c:275%d:%255[^:]:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%*255[^:]:%d:%*d:%*d:%*d %nINVERSION_VDR, %s, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, T2: %s VDR, %s, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d VDR, %s, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d, S2: %s, StreamID: %d, SID: %d %d:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:] %s, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d %d:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%255[^:] %s, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d %d:%255[^:]:%255[^:]:%255[^:] %d:%c:%d:%d:%255[^:]:%255[^:] %s, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d PIDS: %d INVERSION_ONINVERSION_OFFQAM_128QAM_256QAM_64QAM_32QAM_16VSB_88VSBVSB_1616VSBSwitched to delivery system for ATSC: %s (guessed from modulation) BANDWIDTH_5_MHZBANDWIDTH_6_MHZBANDWIDTH_7_MHZBANDWIDTH_8_MHZBANDWIDTH_10_MHZTRANSMISSION_MODE_2KTRANSMISSION_MODE_8KTRANSMISSION_MODE_AUTOGUARD_INTERVAL_1_32GUARD_INTERVAL_1_16GUARD_INTERVAL_1_8GUARD_INTERVAL_1_4HIERARCHY_1HIERARCHY_2HIERARCHY_4HIERARCHY_NONE../mpv/stream/stream_dvb.c:650invalid devno: '%.*s' No configuration found for adapter %d! No channel list available for adapter %d! dvb_config: prog="%s", devno=%d error parsing DVB config, not tuning.dvb_streaming_read(%d) dvb_streaming_read: failed with errno %d when reading %d bytes got %d bytes dvb_streaming_read: returning 0 bytes ../mpv/stream/stream_dvb.cadapter < state->adapters_countn < new_list->NUM_CHANNELSdvb_set_channel: couldn't open devices of adapter %d dvb_set_channel: new channel name="%s", adapter: %d, channel: %d dvb_set_channel: PMT-PID for service %d not resolved yet, parsing PAT... found PMT-PID: %d dvb_set_channel: PMT-PID not found, teletext decoding may fail. no such channel "%s" Tuning to channel "%s"... Program number %d: name="%s", freq=%u channels.conf.cblchannels.conf.terchannels.conf.satchannels.conf.isdbtchannels.conf.atsc../mpv/stream/stream_dvb.c:1050Frontend device %s has no supported delivery systems. Searching channel list for delivery system %s Ignoring other channels.conf files. channels.conf../mpv/stream/stream_dvb.c:1143Added adapter with channels to state list, now %d. DVB stream already in use, only one DVB stream can exist at a time! ../mpv/stream/stream_dvb.c:929DVB configuration is empty 998101112dvbprogcardfull-transponderchannel-switch-offsetShort read size. Data corruption will follow. Please provide a patch. Error getting next block from DVD %d (%s) DVDNAV: event %s (%d). start pts = %u DVDNAV, switched to title: %d DVDNAV, NEW TITLE %d Requested title not found Restoring DVD speed... Limiting DVD speed to %dKB/s... Couldn't open DVD device for writing, changing DVD speed needs write access. successful stream_dvdnav, failed to set PGC positioning Couldn't open DVD device: %s List of available titles: title: %3d duration: %s Selecting title %d. dvdnav_stream, couldn't select title %d, error '%s' DVD menu support has been removed. seek to PTS %f (%ld) landed at: %f block: %lu %c%cvideo_ts.iforbDVDVIDEO-VMG../mpv/stream/stream_dvdnav.c:676VIDEO_TS.IFOVIDEO_TS/VIDEO_TS.IFO.IFO detected. Redirecting to dvd:// ../mpv/stream/stream_dvdnav.c:633longestfirstnumber expected: '%.*s' DVDNAV_BLOCK_OKDVDNAV_NOPDVDNAV_STILL_FRAMEDVDNAV_SPU_STREAM_CHANGEDVDNAV_AUDIO_STREAM_CHANGEDVDNAV_VTS_CHANGEDVDNAV_CELL_CHANGEDVDNAV_NAV_PACKETDVDNAV_STOPDVDNAV_HIGHLIGHTDVDNAV_SPU_CLUT_CHANGEDVDNAV_HOP_CHANNELDVDNAV_WAIT../mpv/player/javascript.c:495run_script[JS] %s Invalid %s '%s'Invalid time format string '%s'[UNSUPPORTED_MPV_FORMAT]Invalid log level '%s'af_fnaf_Reading file '%s' @/defaults.js"use strict"; (function main_default_js(g) { // - g is the global object. // - User callbacks called without 'this', global only if callee is non-strict. // - The names of function expressions are not required, but are used in stack // traces. We name them where useful to show up (fname:#line always shows). mp.msg = { log: mp.log }; mp.msg.verbose = mp.log.bind(null, "v"); var levels = ["fatal", "error", "warn", "info", "debug", "trace"]; levels.forEach(function(l) { mp.msg[l] = mp.log.bind(null, l) }); // same as {} but without inherited stuff, e.g. o["toString"] doesn't exist. // used where we try to fetch items by keys which we don't absolutely trust. function new_cache() { return Object.create(null, {}); } /********************************************************************** * event handlers, property observers, idle, client messages, hooks, async *********************************************************************/ var ehandlers = new_cache() // items of event-name: array of {maybe cb: fn} mp.register_event = function(name, fn) { if (!ehandlers[name]) ehandlers[name] = []; ehandlers[name] = ehandlers[name].concat([{cb: fn}]); // replaces the arr return mp._request_event(name, true); } mp.unregister_event = function(fn) { for (var name in ehandlers) { ehandlers[name] = ehandlers[name].filter(function(h) { if (h.cb != fn) return true; delete h.cb; // dispatch could have a ref to h }); // replacing, not mutating the array if (!ehandlers[name].length) { delete ehandlers[name]; mp._request_event(name, false); } } } // call only pre-registered handlers, but not ones which got unregistered function dispatch_event(e) { var handlers = ehandlers[e.event]; if (handlers) { for (var len = handlers.length, i = 0; i < len; i++) { var cb = handlers[i].cb; // 'handlers' won't mutate, but unregister if (cb) // could remove cb from some items cb(e); } } } // ----- idle observers ----- var iobservers = [], // array of callbacks ideleted = false; mp.register_idle = function(fn) { iobservers.push(fn); } mp.unregister_idle = function(fn) { iobservers.forEach(function(f, i) { if (f == fn) delete iobservers[i]; // -> same length but [more] sparse }); ideleted = true; } function notify_idle_observers() { // forEach and filter skip deleted items and newly added items iobservers.forEach(function(f) { f() }); if (ideleted) { iobservers = iobservers.filter(function() { return true }); ideleted = false; } } // ----- property observers ----- var next_oid = 1, observers = new_cache(); // items of id: fn mp.observe_property = function(name, format, fn) { var id = next_oid++; observers[id] = fn; return mp._observe_property(id, name, format || undefined); // allow null } mp.unobserve_property = function(fn) { for (var id in observers) { if (observers[id] == fn) { delete observers[id]; mp._unobserve_property(id); } } } function notify_observer(e) { var cb = observers[e.id]; if (cb) cb(e.name, e.data); } // ----- Client messages ----- var messages = new_cache(); // items of name: fn // overrides name. no libmpv API to reg/unreg specific messages. mp.register_script_message = function(name, fn) { messages[name] = fn; } mp.unregister_script_message = function(name) { delete messages[name]; } function dispatch_message(ev) { var cb = ev.args.length ? messages[ev.args[0]] : false; if (cb) cb.apply(null, ev.args.slice(1)); } // ----- hooks ----- var hooks = []; // array of callbacks, id is index+1 function run_hook(ev) { var state = 0; // 0:initial, 1:deferred, 2:continued function do_cont() { return state = 2, mp._hook_continue(ev.hook_id) } function err() { return mp.msg.error("hook already continued"), undefined } function usr_defer() { return state == 2 ? err() : (state = 1, true) } function usr_cont() { return state == 2 ? err() : do_cont() } var cb = ev.id > 0 && hooks[ev.id - 1]; if (cb) cb({ defer: usr_defer, cont: usr_cont }); return state == 0 ? do_cont() : true; } mp.add_hook = function add_hook(name, pri, fn) { hooks.push(fn); // 50 (scripting docs default priority) maps to 0 (default in C API docs) return mp._hook_add(name, pri - 50, hooks.length); } // ----- async commands ----- var async_callbacks = new_cache(); // items of id: fn var async_next_id = 1; mp.command_native_async = function command_native_async(node, cb) { var id = async_next_id++; cb = cb || function dummy() {}; if (!mp._command_native_async(id, node)) { var le = mp.last_error(); setTimeout(cb, 0, false, undefined, le); /* callback async */ mp._set_last_error(le); return undefined; } async_callbacks[id] = cb; return id; } function async_command_handler(ev) { var cb = async_callbacks[ev.id]; delete async_callbacks[ev.id]; if (ev.error) cb(false, undefined, ev.error); else cb(true, ev.result, ""); } mp.abort_async_command = function abort_async_command(id) { // cb will be invoked regardless, possibly with the abort result if (async_callbacks[id]) mp._abort_async_command(id); } // osd-ass var next_assid = 1; mp.create_osd_overlay = function create_osd_overlay(format) { return { format: format || "ass-events", id: next_assid++, data: "", res_x: 0, res_y: 720, z: 0, update: function ass_update() { var cmd = {}; // shallow clone of `this', excluding methods for (var k in this) { if (typeof this[k] != "function") cmd[k] = this[k]; } cmd.name = "osd-overlay"; cmd.res_x = Math.round(this.res_x); cmd.res_y = Math.round(this.res_y); return mp.command_native(cmd); }, remove: function ass_remove() { mp.command_native({ name: "osd-overlay", id: this.id, format: "none", data: "", }); return mp.last_error() ? undefined : true; }, }; } // osd-ass legacy API mp.set_osd_ass = function set_osd_ass(res_x, res_y, data) { if (!mp._legacy_overlay) mp._legacy_overlay = mp.create_osd_overlay("ass-events"); var lo = mp._legacy_overlay; if (lo.res_x == res_x && lo.res_y == res_y && lo.data == data) return true; mp._legacy_overlay.res_x = res_x; mp._legacy_overlay.res_y = res_y; mp._legacy_overlay.data = data; return mp._legacy_overlay.update(); } // the following return undefined on error, null passthrough, or legacy object mp.get_osd_size = function get_osd_size() { var d = mp.get_property_native("osd-dimensions"); return d && {width: d.w, height: d.h, aspect: d.aspect}; } mp.get_osd_margins = function get_osd_margins() { var d = mp.get_property_native("osd-dimensions"); return d && {left: d.ml, right: d.mr, top: d.mt, bottom: d.mb}; } /********************************************************************** * key bindings *********************************************************************/ // binds: items of (binding) name which are objects of: // {cb: fn, forced: bool, maybe input: str, repeatable: bool, complex: bool} var binds = new_cache(); function dispatch_key_binding(name, state, key_name, key_text) { var cb = binds[name] ? binds[name].cb : false; if (cb) // "script-binding [/]" command was invoked cb(state, key_name, key_text); } var binds_tid = 0; // flush timer id. actual id's are always true-thy mp.flush_key_bindings = function flush_key_bindings() { function prioritized_inputs(arr) { return arr.sort(function(a, b) { return a.id - b.id }) .map(function(bind) { return bind.input }); } var def = [], forced = []; for (var n in binds) if (binds[n].input) (binds[n].forced ? forced : def).push(binds[n]); // newer bindings for the same key override/hide older ones def = prioritized_inputs(def); forced = prioritized_inputs(forced); var sect = "input_" + mp.script_name; mp.commandv("define-section", sect, def.join("\n"), "default"); mp.commandv("enable-section", sect, "allow-hide-cursor+allow-vo-dragging"); sect = "input_forced_" + mp.script_name; mp.commandv("define-section", sect, forced.join("\n"), "force"); mp.commandv("enable-section", sect, "allow-hide-cursor+allow-vo-dragging"); clearTimeout(binds_tid); // cancel future flush if called directly binds_tid = 0; } function sched_bindings_flush() { if (!binds_tid) binds_tid = setTimeout(mp.flush_key_bindings, 0); // fires on idle } // name/opts maybe omitted. opts: object with optional bool members: repeatable, // complex, forced, or a string str which is evaluated as object {str: true}. var next_bid = 1; function add_binding(forced, key, name, fn, opts) { if (typeof name == "function") { // as if "name" is not part of the args opts = fn; fn = name; name = false; } var key_data = {forced: forced}; switch (typeof opts) { // merge opts into key_data case "string": key_data[opts] = true; break; case "object": for (var o in opts) key_data[o] = opts[o]; } key_data.id = next_bid++; if (!name) name = "__keybinding" + key_data.id; // new unique binding name if (key_data.complex) { mp.register_script_message(name, function msg_cb() { fn({event: "press", is_mouse: false}); }); var KEY_STATES = { u: "up", d: "down", r: "repeat", p: "press" }; key_data.cb = function key_cb(state, key_name, key_text) { fn({ event: KEY_STATES[state[0]] || "unknown", is_mouse: state[1] == "m", canceled: state[2] == "c", key_name: key_name || undefined, key_text: key_text || undefined }); } } else { mp.register_script_message(name, fn); key_data.cb = function key_cb(state) { // Emulate the semantics at input.c: mouse emits on up, kb on down. // Also, key repeat triggers the binding again. var e = state[0], emit = (state[1] == "m") ? (e == "u") : (e == "d"), canceled = state[2] == "c"; if (canceled) return; if (emit || e == "p" || e == "r" && key_data.repeatable) fn(); } } if (key) key_data.input = key + " script-binding " + mp.script_name + "/" + name; binds[name] = key_data; // used by user and/or our (key) script-binding sched_bindings_flush(); } mp.add_key_binding = add_binding.bind(null, false); mp.add_forced_key_binding = add_binding.bind(null, true); mp.remove_key_binding = function(name) { mp.unregister_script_message(name); delete binds[name]; sched_bindings_flush(); } /********************************************************************** Timers: compatible HTML5 WindowTimers - set/clear Timeout/Interval - Spec: https://www.w3.org/TR/html5/webappapis.html#timers - Guaranteed to callback a-sync to [re-]insertion (event-loop wise). - Guaranteed to callback by expiration order, or, if equal, by insertion order. - Not guaranteed schedule accuracy, though intervals should have good average. *********************************************************************/ // pending 'timers' ordered by expiration: latest at index 0 (top fires first). // Earlier timers are quicker to handle - just push/pop or fewer items to shift. var next_tid = 1, timers = [], // while in process_timers, just insertion-ordered (push) tset_is_push = false, // signal set_timer that we're in process_timers tcanceled = false, // or object of items timer-id: true now = mp.get_time_ms; // just an alias function insert_sorted(arr, t) { for (var i = arr.length - 1; i >= 0 && t.when >= arr[i].when; i--) arr[i + 1] = arr[i]; // move up timers which fire earlier than t arr[i + 1] = t; // i is -1 or fires later than t } // args (is "arguments"): fn_or_str [,duration [,user_arg1 [, user_arg2 ...]]] function set_timer(repeat, args) { var fos = args[0], duration = Math.max(0, (args[1] || 0)), // minimum and default are 0 t = { id: next_tid++, when: now() + duration, interval: repeat ? duration : -1, callback: (typeof fos == "function") ? fos : Function(fos), args: (args.length < 3) ? false : [].slice.call(args, 2), }; if (tset_is_push) { timers.push(t); } else { insert_sorted(timers, t); } return t.id; } g.setTimeout = function setTimeout() { return set_timer(false, arguments) }; g.setInterval = function setInterval() { return set_timer(true, arguments) }; g.clearTimeout = g.clearInterval = function(id) { if (id < next_tid) { // must ignore if not active timer id. if (!tcanceled) tcanceled = {}; tcanceled[id] = true; } } // arr: ordered timers array. ret: -1: no timers, 0: due, positive: ms to wait function peek_wait(arr) { return arr.length ? Math.max(0, arr[arr.length - 1].when - now()) : -1; } function peek_timers_wait() { return peek_wait(timers); // must not be called while in process_timers } // Callback all due non-canceled timers which were inserted before calling us. // Returns wait in ms till the next timer (possibly 0), or -1 if nothing pends. function process_timers() { var wait = peek_wait(timers); if (wait != 0) return wait; var actives = timers; // only process those already inserted by now timers = []; // we'll handle added new timers at the end of processing. tset_is_push = true; // signal set_timer to just push-insert do { var t = actives.pop(); if (tcanceled && tcanceled[t.id]) continue; if (t.args) { t.callback.apply(null, t.args); } else { (0, t.callback)(); // faster, nicer stack trace than t.cb.call() } if (t.interval >= 0) { // allow 20 ms delay/clock-resolution/gc before we skip and reset t.when = Math.max(now() - 20, t.when + t.interval); timers.push(t); // insertion order only } } while (peek_wait(actives) == 0); // new 'timers' are insertion-ordered. remains of actives are fully ordered timers.forEach(function(t) { insert_sorted(actives, t) }); timers = actives; // now we're fully ordered again, and with all timers tset_is_push = false; if (tcanceled) { timers = timers.filter(function(t) { return !tcanceled[t.id] }); tcanceled = false; } return peek_wait(timers); } /********************************************************************** CommonJS module/require Spec: http://wiki.commonjs.org/wiki/Modules/1.1.1 - All the mandatory requirements are implemented, all the unit tests pass. - The implementation makes the following exception: - Allows the chars [~@:\\] in module id for meta-dir/builtin/dos-drive/UNC. Implementation choices beyond the specification: - A module may assign to module.exports (rather than only to exports). - A module's 'this' is the global object, also if it sets strict mode. - No 'global'/'self'. Users can do "this.global = this;" before require(..) - A module has "privacy of its top scope", runs in its own function context. - No id identity with symlinks - a valid choice which others make too. - require("X") always maps to "X.js" -> require("foo.js") is file "foo.js.js". - Global modules search paths are 'scripts/modules.js/' in mpv config dirs. - A main script could e.g. require("./abc") to load a non-global module. - Module id supports mpv path enhancements, e.g. ~/foo, ~~/bar, ~~desktop/baz *********************************************************************/ mp.module_paths = []; // global modules search paths if (mp.script_path !== undefined) // loaded as a directory mp.module_paths.push(mp.utils.join_path(mp.script_path, "modules")); // Internal meta top-dirs. Users should not rely on these names. var MODULES_META = "~~modules", SCRIPTDIR_META = "~~scriptdir", // relative script path -> meta absolute id main_script = mp.utils.split_path(mp.script_file); // -> [ path, file ] function resolve_module_file(id) { var sep = id.indexOf("/"), base = id.substring(0, sep), rest = id.substring(sep + 1) + ".js"; if (base == SCRIPTDIR_META) return mp.utils.join_path(main_script[0], rest); if (base == MODULES_META) { for (var i = 0; i < mp.module_paths.length; i++) { try { var f = mp.utils.join_path(mp.module_paths[i], rest); mp.utils.read_file(f, 1); // throws on any error return f; } catch (e) {} } throw(Error("Cannot find module file '" + rest + "'")); } return id + ".js"; } // Delimiter '/', remove redundancies, prefix with modules meta-root if needed. // E.g. c:\x -> c:/x, or ./x//y/../z -> ./x/z, or utils/x -> ~~modules/utils/x . function canonicalize(id) { var path = id.replace(/\\/g,"/").split("/"), t = path[0], base = []; // if not strictly relative then must be top-level. figure out base/rest if (t != "." && t != "..") { // global module if it's not fs-root/home/dos-drive/builtin/meta-dir if (!(t == "" || t == "~" || t[1] == ":" || t == "@" || t.match(/^~~/))) path.unshift(MODULES_META); // add an explicit modules meta-root if (id.match(/^\\\\/)) // simple UNC handling, preserve leading \\srv path = ["\\\\" + path[2]].concat(path.slice(3)); // [ \\srv, shr..] if (t[1] == ":" && t.length > 2) { // path: [ "c:relative", "path" ] path[0] = t.substring(2); path.unshift(t[0] + ":."); // -> [ "c:.", "relative", "path" ] } base = [path.shift()]; } // path is now logically relative. base, if not empty, is its [meta] root. // normalize the relative part - always id-based (spec Module Id, 1.3.6). var cr = []; // canonicalized relative for (var i = 0; i < path.length; i++) { if (path[i] == "." || path[i] == "") continue; if (path[i] == ".." && cr.length && cr[cr.length - 1] != "..") { cr.pop(); continue; } cr.push(path[i]); } if (!base.length && cr[0] != "..") base = ["."]; // relative and not ../ so must start with ./ return base.concat(cr).join("/"); } function resolve_module_id(base_id, new_id) { new_id = canonicalize(new_id); if (!new_id.match(/^\.\/|^\.\.\//)) // doesn't start with ./ or ../ return new_id; // not relative, we don't care about base_id var combined = mp.utils.join_path(mp.utils.split_path(base_id)[0], new_id); return canonicalize(combined); } var req_cache = new_cache(); // global for all instances of require // ret: a require function instance which uses base_id to resolve relative id's function new_require(base_id) { return function require(id) { id = resolve_module_id(base_id, id); // id is now top-level if (req_cache[id]) return req_cache[id].exports; var new_module = {id: id, exports: {}}; req_cache[id] = new_module; try { var filename = resolve_module_file(id); // we need dedicated free vars + filename in traces + allow strict var str = "mp._req = function(require, exports, module) {" + mp.utils.read_file(filename) + "\n;}"; mp.utils.compile_js(filename, str)(); // only runs the assignment var tmp = mp._req; // we have mp._req, or else we'd have thrown delete mp._req; tmp.call(g, new_require(id), new_module.exports, new_module); } catch (e) { delete req_cache[id]; throw(e); } return new_module.exports; }; } g.require = new_require(SCRIPTDIR_META + "/" + main_script[1]); /********************************************************************** * mp.options *********************************************************************/ function read_options(opts, id, on_update, conf_override) { id = String(id ? id : mp.get_script_name()); mp.msg.debug("reading options for " + id); var conf, fname = "~~/script-opts/" + id + ".conf"; try { conf = arguments.length > 3 ? conf_override : mp.utils.read_file(fname); } catch (e) { mp.msg.verbose(fname + " not found."); } // data as config file lines array, or empty array var data = conf ? conf.replace(/\r\n/g, "\n").split("\n") : [], conf_len = data.length; // before we append script-opts below // Append relevant script-opts as = to data var sopts = mp.get_property_native("options/script-opts"), prefix = id + "-"; for (var key in sopts) { if (key.indexOf(prefix) == 0) data.push(key.substring(prefix.length) + "=" + sopts[key]); } // Update opts from data data.forEach(function(line, i) { if (line[0] == "#" || line.trim() == "") return; var key = line.substring(0, line.indexOf("=")), val = line.substring(line.indexOf("=") + 1), type = typeof opts[key], info = i < conf_len ? fname + ":" + (i + 1) // 1-based line number : "script-opts:" + prefix + key; if (!opts.hasOwnProperty(key)) mp.msg.warn(info, "Ignoring unknown key '" + key + "'"); else if (type == "string") opts[key] = val; else if (type == "boolean" && (val == "yes" || val == "no")) opts[key] = (val == "yes"); else if (type == "number" && val.trim() != "" && !isNaN(val)) opts[key] = Number(val); else mp.msg.error(info, "Error: can't convert '" + val + "' to " + type); }); if (on_update) { mp.observe_property("options/script-opts", "native", function(_n, _v) { var saved = JSON.parse(JSON.stringify(opts)); // clone var changelist = {}, changed = false; read_options(opts, id, 0, conf); // re-apply orig-file + script-opts for (var key in opts) { if (opts[key] != saved[key]) // type always stays the same changelist[key] = changed = true; } if (changed) on_update(changelist); }); } } mp.options = { read_options: read_options }; /********************************************************************** * input *********************************************************************/ function register_event_handler(t) { mp.register_script_message("input-event", function (type, args) { if (t[type]) { args = JSON.parse(args) var result = t[type](args[0], args[1]); if (type == "complete" && result) { mp.commandv("script-message-to", "console", "complete", JSON.stringify(result[0]), result[1]); } } if (type == "closed") mp.unregister_script_message("input-event"); }) } mp.input = { get: function(t) { mp.commandv("script-message-to", "console", "get-input", mp.script_name, JSON.stringify({ prompt: t.prompt, default_text: t.default_text, cursor_position: t.cursor_position, id: t.id, })); register_event_handler(t) }, select: function (t) { mp.commandv("script-message-to", "console", "get-input", mp.script_name, JSON.stringify({ prompt: t.prompt, items: t.items, default_item: t.default_item, })); register_event_handler(t); }, terminate: function () { mp.commandv("script-message-to", "console", "disable"); }, log: function (message, style, terminal_style) { mp.commandv("script-message-to", "console", "log", JSON.stringify({ text: message, style: style, terminal_style: terminal_style, })); }, log_error: function (message) { mp.commandv("script-message-to", "console", "log", JSON.stringify({ text: message, error: true })); }, set_log: function (log) { mp.commandv("script-message-to", "console", "set-log", JSON.stringify(log)); } } /********************************************************************** * various *********************************************************************/ g.print = mp.msg.info; // convenient alias mp.get_script_name = function() { return mp.script_name }; mp.get_script_file = function() { return mp.script_file }; mp.get_script_directory = function() { return mp.script_path }; mp.get_time = function() { return mp.get_time_ms() / 1000 }; mp.utils.getcwd = function() { return mp.get_property("working-directory") }; mp.utils.getpid = function() { return mp.get_property_number("pid") } mp.utils.get_user_path = function(p) { return mp.command_native(["expand-path", String(p)]) }; mp.get_mouse_pos = function() { return mp.get_property_native("mouse-pos") }; mp.utils.write_file = mp.utils._write_file.bind(null, false); mp.utils.append_file = mp.utils._write_file.bind(null, true); mp.dispatch_event = dispatch_event; mp.process_timers = process_timers; mp.notify_idle_observers = notify_idle_observers; mp.peek_timers_wait = peek_timers_wait; mp.get_opt = function(key, def) { var v = mp.get_property_native("options/script-opts")[key]; return (typeof v != "undefined") ? v : def; } mp.osd_message = function osd_message(text, duration) { mp.commandv("show_text", text, Math.round(1000 * (duration || -1))); } mp.utils.subprocess = function subprocess(t) { var cmd = { name: "subprocess", capture_stdout: true }; var new_names = { cancellable: "playback_only", max_size: "capture_size" }; for (var k in t) cmd[new_names[k] || k] = t[k]; var rv = mp.command_native(cmd); if (mp.last_error()) /* typically on missing/incorrect args */ rv = { error_string: mp.last_error(), status: -1 }; if (rv.error_string) rv.error = rv.error_string; return rv; } mp.utils.subprocess_detached = function subprocess_detached(t) { return mp.commandv.apply(null, ["run"].concat(t.args)); } // ----- dump: like print, but expands objects/arrays recursively ----- function replacer(k, v) { var t = typeof v; if (t == "function" || t == "undefined") return "<" + t + ">"; if (Array.isArray(this) && t == "object" && v !== null) { // "safe" mode if (this.indexOf(v) >= 0) return ""; this.push(v); } return v; } function obj2str(v) { try { // can process objects more than once, but throws on cycles return JSON.stringify(v, replacer.bind(null), 2); } catch (e) { // simple safe: exclude visited objects, even if not cyclic return JSON.stringify(v, replacer.bind([]), 2); } } g.dump = function dump() { var toprint = []; for (var i = 0; i < arguments.length; i++) { var v = arguments[i]; toprint.push((typeof v == "object") ? obj2str(v) : replacer(0, v)); } print.apply(null, toprint); } /********************************************************************** * main listeners and event loop *********************************************************************/ mp.keep_running = true; g.exit = function() { mp.keep_running = false }; // user-facing too mp.register_event("shutdown", g.exit); mp.register_event("property-change", notify_observer); mp.register_event("hook", run_hook); mp.register_event("command-reply", async_command_handler); mp.register_event("client-message", dispatch_message); mp.register_script_message("key-binding", dispatch_key_binding); g.mp_event_loop = function mp_event_loop() { var wait = 0; // seconds do { // distapch events as long as they arrive, then do the timers/idle var e = mp.wait_event(wait); if (e.event != "none") { dispatch_event(e); wait = 0; // poll the next one } else { wait = process_timers() / 1000; if (wait != 0 && iobservers.length) { notify_idle_observers(); // can add timers -> recalculate wait wait = peek_timers_wait() / 1000; } } } while (mp.keep_running); }; // let the user extend us, e.g. by adding items to mp.module_paths var initjs = mp.find_config_file("init.js"); // ~~/init.js if (initjs) require(initjs.slice(0, -3)); // remove ".js" else if ((initjs = mp.find_config_file(".init.js"))) mp.msg.warn("Use init.js instead of .init.js (ignoring " + initjs + ")"); })(this) cannot open file: '%s'../mpv/player/javascript.c:242cannot read data from file: '%s'../mpv/player/javascript.c:362cannot allocate %d bytes for file: '%s'Loading file %s if (Error().stackTrace && !Error().stack) { Object.defineProperty(Error.prototype, 'stack', { get: function() { return this.name + ': ' + this.message + this.stackTrace; } }); }@/norm_err.jsmputilsscript_namescript_filescript_pathmp_event_loopno event loop functionint out of range at index %dwritefile://File name must be prefixed with '%s'Cannot open (%s) file: '%s'Cannot %s to file: '%s'%s file '%s' listing filterCannot open dir../mpv/player/javascript.c:254Errorstack../mpv/player/javascript.c:517Cannot initialize JavaScriptscript/%s../mpv/player/javascript.c:266../mpv/player/javascript.c:280uint64 out of range at index %dobserve typeToo many argumentsnot foundUnknown event nameCannot stat pathis_fileis_dir../mpv/player/javascript.c:1111../mpv/player/javascript.c:1116../mpv/player/javascript.c:1125../mpv/player/javascript.c:1060../mpv/player/javascript.c:1129dirsatimemtimectimereaddirfile_infosplit_pathjoin_pathget_env_listread_file_write_filegetenvcompile_js_gc_request_eventfind_config_filecommandvcommand_native_command_native_async_abort_async_commandget_property_boolget_property_numberget_property_nativeget_property_osdset_property_boolset_property_numberset_property_native_observe_property_unobserve_propertyget_time_msformat_timeenable_messages_hook_add_hook_continueinput_set_section_mouse_arealast_error_set_last_errortest../mpv/sub/filter_jsre.c:80jsre: VM init error jsre: %s -- '%s' jsre: regex %d => drop: '%s' jsre: test regex %d: %s. ../mpv/demux/demux_libarchive.c:51../mpv/demux/demux_libarchive.c:75~|archive://%s|/%s../mpv/demux/demux_libarchive.c:87archivelibarchivelibarchive wrapperrar-list-all-volumesOpening volume '%s'... Assuming the volume above was not needed. ../mpv/stream/stream_libarchive.c:242could not read archive entry fatal error received - closing archive mpv_unknown#%d.part1.rar../mpv/stream/stream_libarchive.c:323This appears to be a multi-volume archive. Support is not very good due to libarchive limitations. There are known cases of libarchive crashing mpv on these. This is also an excessively inefficient and stupid way to distribute media files. People creating them should rethink this. ../mpv/stream/stream_libarchive.cstream_tell(src) == 0archive entry not found. '%s' ../mpv/stream/stream_libarchive.c:582possibly unsupported seeking - switching to reopening trying to reopen archive for performing seek demuxer trying to seek beyond end of archive entry end of archive entry reached while seeking %.*s.part%.1d.rar.part01.rar%.*s.part%.2d.rar.part001.rar%.*s.part%.3d.rar.part0001.rar%.*s.part%.4d.rar%.*s.%c%.2d.001%.*s.%.3d%.4sUnhandled event: %d %d MovieObject.bdmvopening or reading of AACS files failedmissing config fileno matching processing keyno valid certificateMMC open failed (maybe no MMC drive?)certificate has been revokedMMC failedno matching device keyNo Blu-ray device/location was specified ... Couldn't open Blu-ray device: %s Given stream is not a Blu-ray. AACS encryption detected but cannot find libaacs. AACS error: %s BD+ encryption detected but cannot find libbdplus. Cannot decrypt BD+ encryption. BluRay menu support has been removed. Can't find any Blu-ray-compatible title here. idx: %3d duration: %s (playlist: %05d.mpls) Couldn't start playlist '%05d'. Couldn't start title '%d'. Blu-ray successfully opened. ../mpv/stream/stream_bluray.c:480mplsinvalid playlist: '%.*s', must be in the range 0-99999 invalid title: '%.*s', must be in the range 0-99999 ../mpv/stream/stream_bluray.c:586BDMV/MovieObject.bdmvBDMV detected. Redirecting to bluray:// bdmv/bluraybdnavbrnavbluraynavbd../mpv/player/lua.c:447Could not initialize Lua. Lua error: %s mp.defaults@%sbuiltin module '%s' not found makenode../mpv/player/lua.c:702../mpv/player/lua.c:703MAPARRAY../mpv/player/lua.c:756../mpv/player/lua.c:765../mpv/player/lua.c:774../mpv/player/lua.c:775key must be a string, but got %sdisallowed Lua type found: %s pushnodeUNKNOWN_TYPE../mpv/player/lua.c:164../mpv/player/lua.cdata.targetpackageloaded?.lua%s%.*sdata && data->target && data->ctxreturn debug.traceback('', 3)loading %s require '%s'loading file %s Could not read file. no event loop function ../mpv/player/lua.c:176tostringInvalid argumentmp.utilslua_gettop(L) == 0lua_type(L, -1) == LUA_TTABLEpreloadcpathtoo many argumentsargument %d is not a stringparse_jsonformat_jsonraw_wait_eventget_script_directoryraw_command_native_asyncraw_abort_async_commandraw_observe_propertyraw_unobserve_propertyget_timeraw_hook_addraw_hook_continue-- Compatibility shim for lua 5.2/5.3 -- luacheck: globals unpack unpack = unpack or table.unpack -- luacheck: globals table.unpack -- these are used internally by lua.c mp.UNKNOWN_TYPE.info = "this value is inserted if the C type is not supported" mp.UNKNOWN_TYPE.type = "UNKNOWN_TYPE" mp.ARRAY.info = "native array" mp.ARRAY.type = "ARRAY" mp.MAP.info = "native map" mp.MAP.type = "MAP" function mp.get_script_name() return mp.script_name end function mp.get_opt(key, def) local opts = mp.get_property_native("options/script-opts") local val = opts[key] if val == nil then val = def end return val end function mp.input_define_section(section, contents, flags) if flags == nil or flags == "" then flags = "default" end mp.commandv("define-section", section, contents, flags) end function mp.input_enable_section(section, flags) if flags == nil then flags = "" end mp.commandv("enable-section", section, flags) end function mp.input_disable_section(section) mp.commandv("disable-section", section) end function mp.get_mouse_pos() local m = mp.get_property_native("mouse-pos") return m.x, m.y end -- For dispatching script-binding. This is sent as: -- script-message-to $script_name $binding_name $keystate -- The array is indexed by $binding_name, and has functions like this as value: -- fn($binding_name, $keystate) local dispatch_key_bindings = {} local message_id = 0 local function reserve_binding() message_id = message_id + 1 return "__keybinding" .. tostring(message_id) end local function dispatch_key_binding(name, state, key_name, key_text) local fn = dispatch_key_bindings[name] if fn then fn(name, state, key_name, key_text) end end -- "Old", deprecated API -- each script has its own section, so that they don't conflict local default_section = "input_dispatch_" .. mp.script_name -- Set the list of key bindings. These will override the user's bindings, so -- you should use this sparingly. -- A call to this function will remove all bindings previously set with this -- function. For example, set_key_bindings({}) would remove all script defined -- key bindings. -- Note: the bindings are not active by default. Use enable_key_bindings(). -- -- list is an array of key bindings, where each entry is an array as follow: -- {key, callback_press, callback_down, callback_up} -- key is the key string as used in input.conf, like "ctrl+a" -- -- callback can be a string too, in which case the following will be added like -- an input.conf line: key .. " " .. callback -- (And callback_down is ignored.) function mp.set_key_bindings(list, section, flags) local cfg = "" for i = 1, #list do local entry = list[i] local key = entry[1] local cb = entry[2] local cb_down = entry[3] local cb_up = entry[4] if type(cb) ~= "string" then local mangle = reserve_binding() dispatch_key_bindings[mangle] = function(_, state) local event = state:sub(1, 1) local is_mouse = state:sub(2, 2) == "m" local def = (is_mouse and "u") or "d" if event == "r" then return end if event == "p" and cb then cb() elseif event == "d" and cb_down then cb_down() elseif event == "u" and cb_up then cb_up() elseif event == def and cb then cb() end end cfg = cfg .. key .. " script-binding " .. mp.script_name .. "/" .. mangle .. "\n" else cfg = cfg .. key .. " " .. cb .. "\n" end end mp.input_define_section(section or default_section, cfg, flags) end function mp.enable_key_bindings(section, flags) mp.input_enable_section(section or default_section, flags) end function mp.disable_key_bindings(section) mp.input_disable_section(section or default_section) end function mp.set_mouse_area(x0, y0, x1, y1, section) mp.input_set_section_mouse_area(section or default_section, x0, y0, x1, y1) end -- "Newer" and more convenient API local key_bindings = {} local key_binding_counter = 0 local key_bindings_dirty = false function mp.flush_keybindings() if not key_bindings_dirty then return end key_bindings_dirty = false for i = 1, 2 do local section, flags local def = i == 1 if def then section = "input_" .. mp.script_name flags = "default" else section = "input_forced_" .. mp.script_name flags = "force" end local bindings = {} for _, v in pairs(key_bindings) do if v.bind and v.forced ~= def then bindings[#bindings + 1] = v end end table.sort(bindings, function(a, b) return a.priority < b.priority end) local cfg = "" for _, v in ipairs(bindings) do cfg = cfg .. v.bind .. "\n" end mp.input_define_section(section, cfg, flags) -- TODO: remove the section if the script is stopped mp.input_enable_section(section, "allow-hide-cursor+allow-vo-dragging") end end local function add_binding(attrs, key, name, fn, rp) if type(name) ~= "string" and name ~= nil then rp = fn fn = name name = nil end rp = rp or "" if name == nil then name = reserve_binding() end local repeatable = rp == "repeatable" or rp["repeatable"] if rp["forced"] then attrs.forced = true end local key_cb, msg_cb if not fn then fn = function() end end if rp["complex"] then local key_states = { ["u"] = "up", ["d"] = "down", ["r"] = "repeat", ["p"] = "press", } key_cb = function(_, state, key_name, key_text) if key_text == "" then key_text = nil end fn({ event = key_states[state:sub(1, 1)] or "unknown", is_mouse = state:sub(2, 2) == "m", canceled = state:sub(3, 3) == "c", key_name = key_name, key_text = key_text, }) end msg_cb = function() fn({event = "press", is_mouse = false}) end else key_cb = function(_, state) -- Emulate the same semantics as input.c uses for most bindings: -- For keyboard, "down" runs the command, "up" does nothing; -- for mouse, "down" does nothing, "up" runs the command. -- Also, key repeat triggers the binding again. local event = state:sub(1, 1) local is_mouse = state:sub(2, 2) == "m" local canceled = state:sub(3, 3) == "c" if canceled or event == "r" and not repeatable then return end if is_mouse and (event == "u" or event == "p") then fn() elseif not is_mouse and (event == "d" or event == "r" or event == "p") then fn() end end msg_cb = fn end if key and #key > 0 then attrs.bind = key .. " script-binding " .. mp.script_name .. "/" .. name end attrs.name = name -- new bindings override old ones (but do not overwrite them) key_binding_counter = key_binding_counter + 1 attrs.priority = key_binding_counter key_bindings[name] = attrs key_bindings_dirty = true dispatch_key_bindings[name] = key_cb mp.register_script_message(name, msg_cb) end function mp.add_key_binding(...) add_binding({forced=false}, ...) end function mp.add_forced_key_binding(...) add_binding({forced=true}, ...) end function mp.remove_key_binding(name) key_bindings[name] = nil dispatch_key_bindings[name] = nil key_bindings_dirty = true mp.unregister_script_message(name) end local timers = {} local timer_mt = {} timer_mt.__index = timer_mt function mp.add_timeout(seconds, cb, disabled) local t = mp.add_periodic_timer(seconds, cb, disabled) t.oneshot = true return t end function mp.add_periodic_timer(seconds, cb, disabled) local t = { timeout = seconds, cb = cb, oneshot = false, } setmetatable(t, timer_mt) if not disabled then t:resume() end return t end function timer_mt.stop(t) if timers[t] then timers[t] = nil t.next_deadline = t.next_deadline - mp.get_time() end end function timer_mt.kill(t) timers[t] = nil t.next_deadline = nil end mp.cancel_timer = timer_mt.kill function timer_mt.resume(t) if not timers[t] then local timeout = t.next_deadline if timeout == nil then timeout = t.timeout end t.next_deadline = mp.get_time() + timeout timers[t] = t end end function timer_mt.is_enabled(t) return timers[t] ~= nil end -- Return the timer that expires next. local function get_next_timer() local best = nil for t, _ in pairs(timers) do if best == nil or t.next_deadline < best.next_deadline then best = t end end return best end function mp.get_next_timeout() local timer = get_next_timer() if not timer then return end local now = mp.get_time() return timer.next_deadline - now end -- Run timers that have met their deadline at the time of invocation. -- Return: time>0 in seconds till the next due timer, 0 if there are due timers -- (aborted to avoid infinite loop), or nil if no timers local function process_timers() local t0 = nil while true do local timer = get_next_timer() if not timer then return end local now = mp.get_time() local wait = timer.next_deadline - now if wait > 0 then return wait else if not t0 then t0 = now -- first due callback: always executes, remember t0 elseif timer.next_deadline > t0 then -- don't block forever with slow callbacks and endless timers. -- we'll continue right after checking mpv events. return 0 end if timer.oneshot then timer:kill() else timer.next_deadline = now + timer.timeout end timer.cb() end end end local messages = {} function mp.register_script_message(name, fn) messages[name] = fn end function mp.unregister_script_message(name) messages[name] = nil end local function message_dispatch(ev) if #ev.args > 0 then local handler = messages[ev.args[1]] if handler then handler(unpack(ev.args, 2)) end end end local property_id = 0 local properties = {} function mp.observe_property(name, t, cb) local id = property_id + 1 property_id = id properties[id] = cb mp.raw_observe_property(id, name, t) end function mp.unobserve_property(cb) for prop_id, prop_cb in pairs(properties) do if cb == prop_cb then properties[prop_id] = nil mp.raw_unobserve_property(prop_id) end end end local function property_change(ev) local prop = properties[ev.id] if prop then prop(ev.name, ev.data) end end -- used by default event loop (mp_event_loop()) to decide when to quit mp.keep_running = true local event_handlers = {} function mp.register_event(name, cb) local list = event_handlers[name] if not list then list = {} event_handlers[name] = list end list[#list + 1] = cb return mp.request_event(name, true) end function mp.unregister_event(cb) for name, sub in pairs(event_handlers) do local found = false for _, e in ipairs(sub) do if e == cb then found = true break end end if found then -- create a new array, just in case this function was called -- from an event handler local new = {} for i = 1, #sub do if sub[i] ~= cb then new[#new + 1] = sub[i] end end event_handlers[name] = new if #new == 0 then mp.request_event(name, false) end end end end -- default handlers mp.register_event("shutdown", function() mp.keep_running = false end) mp.register_event("client-message", message_dispatch) mp.register_event("property-change", property_change) -- called before the event loop goes back to sleep local idle_handlers = {} function mp.register_idle(cb) idle_handlers[#idle_handlers + 1] = cb end function mp.unregister_idle(cb) local new = {} for _, handler in ipairs(idle_handlers) do if handler ~= cb then new[#new + 1] = handler end end idle_handlers = new end -- sent by "script-binding" mp.register_script_message("key-binding", dispatch_key_binding) mp.msg = { log = mp.log, fatal = function(...) return mp.log("fatal", ...) end, error = function(...) return mp.log("error", ...) end, warn = function(...) return mp.log("warn", ...) end, info = function(...) return mp.log("info", ...) end, verbose = function(...) return mp.log("v", ...) end, debug = function(...) return mp.log("debug", ...) end, trace = function(...) return mp.log("trace", ...) end, } _G.print = mp.msg.info package.loaded["mp"] = mp package.loaded["mp.msg"] = mp.msg function mp.wait_event(t) local r = mp.raw_wait_event(t) if r and r.file_error and not r.error then -- compat; deprecated r.error = r.file_error end return r end _G.mp_event_loop = function() mp.dispatch_events(true) end local function call_event_handlers(e) local handlers = event_handlers[e.event] if handlers then for _, handler in ipairs(handlers) do handler(e) end end end mp.use_suspend = false local suspend_warned = false function mp.dispatch_events(allow_wait) local more_events = true if mp.use_suspend then if not suspend_warned then mp.msg.error("mp.use_suspend is now ignored.") suspend_warned = true end end while mp.keep_running do local wait = 0 if not more_events then wait = process_timers() or 1e20 -- infinity for all practical purposes if wait ~= 0 then local idle_called = nil for _, handler in ipairs(idle_handlers) do idle_called = true handler() end if idle_called then -- handlers don't complete in 0 time, and may modify timers wait = mp.get_next_timeout() or 1e20 if wait < 0 then wait = 0 end end end if allow_wait ~= true then return end end local e = mp.wait_event(wait) more_events = false if e.event ~= "none" then call_event_handlers(e) more_events = true end end end mp.register_idle(mp.flush_keybindings) -- additional helpers function mp.osd_message(text, duration) if not duration then duration = "-1" else duration = tostring(math.floor(duration * 1000)) end mp.commandv("show-text", text, duration) end local hook_table = {} local hook_mt = {} hook_mt.__index = hook_mt function hook_mt.cont(t) if t._id == nil then mp.msg.error("hook already continued") else mp.raw_hook_continue(t._id) t._id = nil end end function hook_mt.defer(t) t._defer = true end mp.register_event("hook", function(ev) local fn = hook_table[tonumber(ev.id)] local hookobj = { _id = ev.hook_id, _defer = false, } setmetatable(hookobj, hook_mt) if fn then fn(hookobj) end if not hookobj._defer and hookobj._id ~= nil then hookobj:cont() end end) function mp.add_hook(name, pri, cb) local id = #hook_table + 1 hook_table[id] = cb -- The C API suggests using 0 for a neutral priority, but lua.rst suggests -- 50 (?), so whatever. mp.raw_hook_add(id, name, pri - 50) end local async_call_table = {} local async_next_id = 1 function mp.command_native_async(node, cb) local id = async_next_id async_next_id = async_next_id + 1 cb = cb or function() end local res, err = mp.raw_command_native_async(id, node) if not res then mp.add_timeout(0, function() cb(false, nil, err) end) return res, err end local t = {cb = cb, id = id} async_call_table[id] = t return t end mp.register_event("command-reply", function(ev) local id = tonumber(ev.id) local t = async_call_table[id] local cb = t.cb t.id = nil async_call_table[id] = nil if ev.error then cb(false, nil, ev.error) else cb(true, ev.result, nil) end end) function mp.abort_async_command(t) if t.id ~= nil then mp.raw_abort_async_command(t.id) end end local overlay_mt = {} overlay_mt.__index = overlay_mt local overlay_new_id = 0 function mp.create_osd_overlay(format) overlay_new_id = overlay_new_id + 1 local overlay = { format = format, id = overlay_new_id, data = "", res_x = 0, res_y = 720, } setmetatable(overlay, overlay_mt) return overlay end function overlay_mt.update(ov) local cmd = {} for k, v in pairs(ov) do cmd[k] = v end cmd.name = "osd-overlay" cmd.res_x = math.floor(cmd.res_x) cmd.res_y = math.floor(cmd.res_y) return mp.command_native(cmd) end function overlay_mt.remove(ov) mp.command_native { name = "osd-overlay", id = ov.id, format = "none", data = "", } end -- legacy API function mp.set_osd_ass(res_x, res_y, data) if not mp._legacy_overlay then mp._legacy_overlay = mp.create_osd_overlay("ass-events") end if mp._legacy_overlay.res_x ~= res_x or mp._legacy_overlay.res_y ~= res_y or mp._legacy_overlay.data ~= data then mp._legacy_overlay.res_x = res_x mp._legacy_overlay.res_y = res_y mp._legacy_overlay.data = data mp._legacy_overlay:update() end end function mp.get_osd_size() local prop = mp.get_property_native("osd-dimensions") return prop.w, prop.h, prop.aspect end function mp.get_osd_margins() local prop = mp.get_property_native("osd-dimensions") return prop.ml, prop.mt, prop.mr, prop.mb end local mp_utils = package.loaded["mp.utils"] function mp_utils.format_table(t, set) if not set then set = { [t] = true } end local res = "{" -- pretty expensive but simple way to distinguish array and map parts of t local keys = {} local vals = {} local arr = 0 for i = 1, #t do if t[i] == nil then break end keys[i] = i vals[i] = t[i] arr = i end for k, v in pairs(t) do if not (type(k) == "number" and k >= 1 and k <= arr and keys[k]) then keys[#keys + 1] = k vals[#keys] = v end end for i = 1, #keys do if #res > 1 then res = res .. ", " end if i > arr then res = res .. mp_utils.to_string(keys[i], set) .. " = " end res = res .. mp_utils.to_string(vals[i], set) end res = res .. "}" return res end function mp_utils.to_string(v, set) if type(v) == "string" then return "\"" .. v .. "\"" elseif type(v) == "table" then if set then if set[v] then return "[cycle]" end set[v] = true end return mp_utils.format_table(v, set) else return tostring(v) end end function mp_utils.getcwd() return mp.get_property("working-directory") end function mp_utils.getpid() return mp.get_property_number("pid") end function mp_utils.format_bytes_humanized(b) local d = {"Bytes", "KiB", "MiB", "GiB", "TiB", "PiB"} local i = 1 while b >= 1024 do b = b / 1024 i = i + 1 end return string.format("%0.2f %s", b, d[i] and d[i] or "*1024^" .. (i-1)) end function mp_utils.subprocess(t) local cmd = {} cmd.name = "subprocess" cmd.capture_stdout = true for k, v in pairs(t) do if k == "cancellable" then k = "playback_only" elseif k == "max_size" then k = "capture_size" end cmd[k] = v end local res, err = mp.command_native(cmd) if res == nil then -- an error usually happens only if parsing failed (or no args passed) res = {error_string = err, status = -1} end if res.error_string ~= "" then res.error = res.error_string end return res end function mp_utils.subprocess_detached(t) mp.commandv("run", unpack(t.args)) end return {} mp.assdrawlocal ass_mt = {} ass_mt.__index = ass_mt local c = 0.551915024494 -- circle approximation local function ass_new() return setmetatable({ scale = 4, text = "" }, ass_mt) end function ass_mt.new_event(ass) -- osd_libass.c adds an event per line if #ass.text > 0 then ass.text = ass.text .. "\n" end end function ass_mt.draw_start(ass) ass.text = string.format("%s{\\p%d}", ass.text, ass.scale) end function ass_mt.draw_stop(ass) ass.text = ass.text .. "{\\p0}" end function ass_mt.coord(ass, x, y) local scale = 2 ^ (ass.scale - 1) local ix = math.ceil(x * scale) local iy = math.ceil(y * scale) ass.text = string.format("%s %d %d", ass.text, ix, iy) end function ass_mt.append(ass, s) ass.text = ass.text .. s end function ass_mt.merge(ass1, ass2) ass1.text = ass1.text .. ass2.text end function ass_mt.pos(ass, x, y) ass:append(string.format("{\\pos(%f,%f)}", x, y)) end function ass_mt.an(ass, an) ass:append(string.format("{\\an%d}", an)) end function ass_mt.move_to(ass, x, y) ass:append(" m") ass:coord(x, y) end function ass_mt.line_to(ass, x, y) ass:append(" l") ass:coord(x, y) end function ass_mt.bezier_curve(ass, x1, y1, x2, y2, x3, y3) ass:append(" b") ass:coord(x1, y1) ass:coord(x2, y2) ass:coord(x3, y3) end function ass_mt.rect_ccw(ass, x0, y0, x1, y1) ass:move_to(x0, y0) ass:line_to(x0, y1) ass:line_to(x1, y1) ass:line_to(x1, y0) end function ass_mt.rect_cw(ass, x0, y0, x1, y1) ass:move_to(x0, y0) ass:line_to(x1, y0) ass:line_to(x1, y1) ass:line_to(x0, y1) end function ass_mt.hexagon_cw(ass, x0, y0, x1, y1, r1, r2) if r2 == nil then r2 = r1 end ass:move_to(x0 + r1, y0) if x0 ~= x1 then ass:line_to(x1 - r2, y0) end ass:line_to(x1, y0 + r2) if x0 ~= x1 then ass:line_to(x1 - r2, y1) end ass:line_to(x0 + r1, y1) ass:line_to(x0, y0 + r1) end function ass_mt.hexagon_ccw(ass, x0, y0, x1, y1, r1, r2) if r2 == nil then r2 = r1 end ass:move_to(x0 + r1, y0) ass:line_to(x0, y0 + r1) ass:line_to(x0 + r1, y1) if x0 ~= x1 then ass:line_to(x1 - r2, y1) end ass:line_to(x1, y0 + r2) if x0 ~= x1 then ass:line_to(x1 - r2, y0) end end function ass_mt.round_rect_cw(ass, x0, y0, x1, y1, r1, r2) if r2 == nil then r2 = r1 end local c1 = c * r1 -- circle approximation local c2 = c * r2 -- circle approximation ass:move_to(x0 + r1, y0) ass:line_to(x1 - r2, y0) -- top line if r2 > 0 then ass:bezier_curve(x1 - r2 + c2, y0, x1, y0 + r2 - c2, x1, y0 + r2) -- top right corner end ass:line_to(x1, y1 - r2) -- right line if r2 > 0 then ass:bezier_curve(x1, y1 - r2 + c2, x1 - r2 + c2, y1, x1 - r2, y1) -- bottom right corner end ass:line_to(x0 + r1, y1) -- bottom line if r1 > 0 then ass:bezier_curve(x0 + r1 - c1, y1, x0, y1 - r1 + c1, x0, y1 - r1) -- bottom left corner end ass:line_to(x0, y0 + r1) -- left line if r1 > 0 then ass:bezier_curve(x0, y0 + r1 - c1, x0 + r1 - c1, y0, x0 + r1, y0) -- top left corner end end function ass_mt.round_rect_ccw(ass, x0, y0, x1, y1, r1, r2) if r2 == nil then r2 = r1 end local c1 = c * r1 -- circle approximation local c2 = c * r2 -- circle approximation ass:move_to(x0 + r1, y0) if r1 > 0 then ass:bezier_curve(x0 + r1 - c1, y0, x0, y0 + r1 - c1, x0, y0 + r1) -- top left corner end ass:line_to(x0, y1 - r1) -- left line if r1 > 0 then ass:bezier_curve(x0, y1 - r1 + c1, x0 + r1 - c1, y1, x0 + r1, y1) -- bottom left corner end ass:line_to(x1 - r2, y1) -- bottom line if r2 > 0 then ass:bezier_curve(x1 - r2 + c2, y1, x1, y1 - r2 + c2, x1, y1 - r2) -- bottom right corner end ass:line_to(x1, y0 + r2) -- right line if r2 > 0 then ass:bezier_curve(x1, y0 + r2 - c2, x1 - r2 + c2, y0, x1 - r2, y0) -- top right corner end end return {ass_new = ass_new} mp.fzy--[[ The MIT License (MIT) Copyright (c) 2020 Seth Warn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] -- The lua implementation of the fzy string matching algorithm local SCORE_GAP_LEADING = -0.005 local SCORE_GAP_TRAILING = -0.005 local SCORE_GAP_INNER = -0.01 local SCORE_MATCH_CONSECUTIVE = 1.0 local SCORE_MATCH_SLASH = 0.9 local SCORE_MATCH_WORD = 0.8 local SCORE_MATCH_CAPITAL = 0.7 local SCORE_MATCH_DOT = 0.6 local SCORE_MAX = math.huge local SCORE_MIN = -math.huge local MATCH_MAX_LENGTH = 1024 local fzy = {} -- Check if `needle` is a subsequence of the `haystack`. -- -- Usually called before `score` or `positions`. -- -- Args: -- needle (string) -- haystack (string) -- case_sensitive (bool, optional): defaults to false -- -- Returns: -- bool function fzy.has_match(needle, haystack, case_sensitive) if not case_sensitive then needle = string.lower(needle) haystack = string.lower(haystack) end local j = 1 for i = 1, string.len(needle) do j = string.find(haystack, needle:sub(i, i), j, true) if not j then return false else j = j + 1 end end return true end local function is_lower(c) return c:match("%l") end local function is_upper(c) return c:match("%u") end local function precompute_bonus(haystack) local match_bonus = {} local last_char = "/" for i = 1, string.len(haystack) do local this_char = haystack:sub(i, i) if last_char == "/" or last_char == "\\" then match_bonus[i] = SCORE_MATCH_SLASH elseif last_char == "-" or last_char == "_" or last_char == " " then match_bonus[i] = SCORE_MATCH_WORD elseif last_char == "." then match_bonus[i] = SCORE_MATCH_DOT elseif is_lower(last_char) and is_upper(this_char) then match_bonus[i] = SCORE_MATCH_CAPITAL else match_bonus[i] = 0 end last_char = this_char end return match_bonus end local function compute(needle, haystack, D, M, case_sensitive) -- Note that the match bonuses must be computed before the arguments are -- converted to lowercase, since there are bonuses for camelCase. local match_bonus = precompute_bonus(haystack) local n = string.len(needle) local m = string.len(haystack) if not case_sensitive then needle = string.lower(needle) haystack = string.lower(haystack) end -- Because lua only grants access to chars through substring extraction, -- get all the characters from the haystack once now, to reuse below. local haystack_chars = {} for i = 1, m do haystack_chars[i] = haystack:sub(i, i) end for i = 1, n do D[i] = {} M[i] = {} local prev_score = SCORE_MIN local gap_score = i == n and SCORE_GAP_TRAILING or SCORE_GAP_INNER local needle_char = needle:sub(i, i) for j = 1, m do if needle_char == haystack_chars[j] then local score = SCORE_MIN if i == 1 then score = ((j - 1) * SCORE_GAP_LEADING) + match_bonus[j] elseif j > 1 then local a = M[i - 1][j - 1] + match_bonus[j] local b = D[i - 1][j - 1] + SCORE_MATCH_CONSECUTIVE score = math.max(a, b) end D[i][j] = score prev_score = math.max(score, prev_score + gap_score) M[i][j] = prev_score else D[i][j] = SCORE_MIN prev_score = prev_score + gap_score M[i][j] = prev_score end end end end -- Compute a matching score. -- -- Args: -- needle (string): must be a subequence of `haystack`, or the result is -- undefined. -- haystack (string) -- case_sensitive (bool, optional): defaults to false -- -- Returns: -- number: higher scores indicate better matches. See also `get_score_min` -- and `get_score_max`. function fzy.score(needle, haystack, case_sensitive) local n = string.len(needle) local m = string.len(haystack) if n == 0 or m == 0 or m > MATCH_MAX_LENGTH or n > m then return SCORE_MIN elseif n == m then return SCORE_MAX else local D = {} local M = {} compute(needle, haystack, D, M, case_sensitive) return M[n][m] end end -- Compute the locations where fzy matches a string. -- -- Determine where each character of the `needle` is matched to the `haystack` -- in the optimal match. -- -- Args: -- needle (string): must be a subequence of `haystack`, or the result is -- undefined. -- haystack (string) -- case_sensitive (bool, optional): defaults to false -- -- Returns: -- {int,...}: indices, where `indices[n]` is the location of the `n`th -- character of `needle` in `haystack`. -- number: the same matching score returned by `score` function fzy.positions(needle, haystack, case_sensitive) local n = string.len(needle) local m = string.len(haystack) if n == 0 or m == 0 or m > MATCH_MAX_LENGTH or n > m then return {}, SCORE_MIN elseif n == m then local consecutive = {} for i = 1, n do consecutive[i] = i end return consecutive, SCORE_MAX end local D = {} local M = {} compute(needle, haystack, D, M, case_sensitive) local positions = {} local match_required = false local j = m for i = n, 1, -1 do while j >= 1 do if D[i][j] ~= SCORE_MIN and (match_required or D[i][j] == M[i][j]) then match_required = (i ~= 1) and (j ~= 1) and ( M[i][j] == D[i - 1][j - 1] + SCORE_MATCH_CONSECUTIVE) positions[i] = j j = j - 1 break else j = j - 1 end end end return positions, M[n][m] end -- Apply `has_match` and `positions` to an array of haystacks. -- -- Args: -- needle (string) -- haystack ({string, ...}) -- case_sensitive (bool, optional): defaults to false -- -- Returns: -- {{idx, positions, score}, ...}: an array with one entry per matching line -- in `haystacks`, each entry giving the index of the line in `haystacks` -- as well as the equivalent to the return value of `positions` for that -- line. function fzy.filter(needle, haystacks, case_sensitive) local result = {} for i, line in ipairs(haystacks) do if fzy.has_match(needle, line, case_sensitive) then local p, s = fzy.positions(needle, line, case_sensitive) table.insert(result, {i, p, s}) end end return result end -- The lowest value returned by `score`. -- -- In two special cases: -- - an empty `needle`, or -- - a `needle` or `haystack` larger than than `get_max_length`, -- the `score` function will return this exact value, which can be used as a -- sentinel. This is the lowest possible score. function fzy.get_score_min() return SCORE_MIN end -- The score returned for exact matches. This is the highest possible score. function fzy.get_score_max() return SCORE_MAX end -- The maximum size for which `fzy` will evaluate scores. function fzy.get_max_length() return MATCH_MAX_LENGTH end -- The minimum score returned for normal matches. -- -- For matches that don't return `get_score_min`, their score will be greater -- than than this value. function fzy.get_score_floor() return MATCH_MAX_LENGTH * SCORE_GAP_INNER end -- The maximum score for non-exact matches. -- -- For matches that don't return `get_score_max`, their score will be less than -- this value. function fzy.get_score_ceiling() return MATCH_MAX_LENGTH * SCORE_MATCH_CONSECUTIVE end -- The name of the currently-running implmenetation, "lua" or "native". function fzy.get_implementation_name() return "lua" end return fzy mp.input--[[ This file is part of mpv. mpv is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. mpv is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with mpv. If not, see . ]] local utils = require "mp.utils" local input = {} local function register_event_handler(t) mp.register_script_message("input-event", function (type, args) if t[type] then local suggestions, completion_start_position = t[type](unpack(utils.parse_json(args or "") or {})) if type == "complete" and suggestions then mp.commandv("script-message-to", "console", "complete", utils.format_json(suggestions), completion_start_position) end end if type == "closed" then mp.unregister_script_message("input-event") end end) end function input.get(t) mp.commandv("script-message-to", "console", "get-input", mp.get_script_name(), utils.format_json({ prompt = t.prompt, default_text = t.default_text, cursor_position = t.cursor_position, id = t.id, })) register_event_handler(t) end function input.select(t) mp.commandv("script-message-to", "console", "get-input", mp.get_script_name(), utils.format_json({ prompt = t.prompt, items = t.items, default_item = t.default_item, })) register_event_handler(t) end function input.terminate() mp.commandv("script-message-to", "console", "disable") end function input.log(message, style, terminal_style) mp.commandv("script-message-to", "console", "log", utils.format_json({ text = message, style = style, terminal_style = terminal_style, })) end function input.log_error(message) mp.commandv("script-message-to", "console", "log", utils.format_json({ text = message, error = true })) end function input.set_log(log) mp.commandv("script-message-to", "console", "set-log", utils.format_json(log)) end return input mp.optionslocal msg = require 'mp.msg' -- converts val to type of desttypeval local function typeconv(desttypeval, val) if type(desttypeval) == "boolean" then if val == "yes" then val = true elseif val == "no" then val = false else msg.error("Error: Can't convert '" .. val .. "' to boolean!") val = nil end elseif type(desttypeval) == "number" then if tonumber(val) ~= nil then val = tonumber(val) else msg.error("Error: Can't convert '" .. val .. "' to number!") val = nil end end return val end -- performs a deep-copy of the given option value local function opt_copy(val) return val -- no tables currently end -- compares the given option values for equality local function opt_equal(val1, val2) return val1 == val2 end -- performs a deep-copy of an entire option table local function opt_table_copy(opts) local copy = {} for key, value in pairs(opts) do copy[key] = opt_copy(value) end return copy end local function read_options(options, identifier, on_update) local option_types = opt_table_copy(options) if identifier == nil then identifier = mp.get_script_name() end msg.debug("reading options for " .. identifier) -- read config file local conffilename = "script-opts/" .. identifier .. ".conf" local conffile = mp.find_config_file(conffilename) if conffile == nil then msg.debug(conffilename .. " not found.") conffilename = "lua-settings/" .. identifier .. ".conf" conffile = mp.find_config_file(conffilename) if conffile then msg.warn("lua-settings/ is deprecated, use directory script-opts/") end end local f = conffile and io.open(conffile,"r") if f == nil then -- config not found msg.debug(conffilename .. " not found.") else -- config exists, read values msg.verbose("Opened config file " .. conffilename .. ".") local linecounter = 1 for line in f:lines() do if line:sub(#line) == "\r" then line = line:sub(1, #line - 1) end if string.find(line, "#") ~= 1 then local eqpos = string.find(line, "=") if eqpos ~= nil then local key = string.sub(line, 1, eqpos-1) local val = string.sub(line, eqpos+1) -- match found values with defaults if option_types[key] == nil then msg.warn(conffilename..":"..linecounter.. " unknown key '" .. key .. "', ignoring") else local convval = typeconv(option_types[key], val) if convval == nil then msg.error(conffilename..":"..linecounter.. " error converting value '" .. val .. "' for key '" .. key .. "'") else options[key] = convval end end end end linecounter = linecounter + 1 end io.close(f) end --parse command-line options local prefix = identifier.."-" -- command line options are always applied on top of these local conf_and_default_opts = opt_table_copy(options) local function parse_opts(full, opt) for key, val in pairs(full) do if string.find(key, prefix, 1, true) == 1 then key = string.sub(key, string.len(prefix)+1) -- match found values with defaults if option_types[key] == nil then msg.warn("script-opts: unknown key " .. key .. ", ignoring") else local convval = typeconv(option_types[key], val) if convval == nil then msg.error("script-opts: error converting value '" .. val .. "' for key '" .. key .. "'") else opt[key] = convval end end end end end --initial parse_opts(mp.get_property_native("options/script-opts"), options) --runtime updates if on_update then local last_opts = opt_table_copy(options) mp.observe_property("options/script-opts", "native", function(_, val) local new_opts = opt_table_copy(conf_and_default_opts) parse_opts(val, new_opts) local changelist = {} for k, v in pairs(new_opts) do if not opt_equal(last_opts[k], v) then -- copy to user options[k] = opt_copy(v) changelist[k] = true end end last_opts = new_opts if next(changelist) ~= nil then on_update(changelist) end end) end end -- backwards compatibility with broken read_options export _G.read_options = read_options return { read_options = read_options, } local assdraw = require 'mp.assdraw' local msg = require 'mp.msg' local opt = require 'mp.options' local utils = require 'mp.utils' -- -- Parameters -- -- default user option values -- do not touch, change them in osc.conf local user_opts = { showwindowed = true, -- show OSC when windowed? showfullscreen = true, -- show OSC when fullscreen? idlescreen = true, -- show mpv logo on idle scalewindowed = 1, -- scaling of the controller when windowed scalefullscreen = 1, -- scaling of the controller when fullscreen vidscale = "auto", -- scale the controller with the video? valign = 0.8, -- vertical alignment, -1 (top) to 1 (bottom) halign = 0, -- horizontal alignment, -1 (left) to 1 (right) barmargin = 0, -- vertical margin of top/bottombar boxalpha = 80, -- alpha of the background box, -- 0 (opaque) to 255 (fully transparent) hidetimeout = 500, -- duration in ms until the OSC hides if no -- mouse movement. enforced non-negative for the -- user, but internally negative is "always-on". fadeduration = 200, -- duration of fade out in ms, 0 = no fade deadzonesize = 0.5, -- size of deadzone minmousemove = 0, -- minimum amount of pixels the mouse has to -- move between ticks to make the OSC show up iamaprogrammer = false, -- use native mpv values and disable OSC -- internal track list management (and some -- functions that depend on it) layout = "bottombar", seekbarstyle = "bar", -- bar, diamond or knob seekbarhandlesize = 0.6, -- size ratio of the diamond and knob handle seekrangestyle = "inverted",-- bar, line, slider, inverted or none seekrangeseparate = true, -- whether the seekranges overlay on the bar-style seekbar seekrangealpha = 200, -- transparency of seekranges seekbarkeyframes = true, -- use keyframes when dragging the seekbar scrollcontrols = true, -- allow scrolling when hovering certain OSC elements title = "${media-title}", -- string compatible with property-expansion -- to be shown as OSC title tooltipborder = 1, -- border of tooltip in bottom/topbar timetotal = false, -- display total time instead of remaining time? remaining_playtime = true, -- display the remaining time in playtime or video-time mode -- playtime takes speed into account, whereas video-time doesn't timems = false, -- display timecodes with milliseconds? tcspace = 100, -- timecode spacing (compensate font size estimation) visibility = "auto", -- only used at init to set visibility_mode(...) boxmaxchars = 80, -- title crop threshold for box layout boxvideo = false, -- apply osc_param.video_margins to video windowcontrols = "auto", -- whether to show window controls windowcontrols_alignment = "right", -- which side to show window controls on windowcontrols_title = "${media-title}", -- same as title but for windowcontrols greenandgrumpy = false, -- disable santa hat livemarkers = true, -- update seekbar chapter markers on duration change chapters_osd = true, -- whether to show chapters OSD on next/prev playlist_osd = true, -- whether to show playlist OSD on next/prev chapter_fmt = "Chapter: %s", -- chapter print format for seekbar-hover. "no" to disable unicodeminus = false, -- whether to use the Unicode minus sign character background_color = "#000000", -- background color of the osc timecode_color = "#FFFFFF", -- color of the progress bar and time color title_color = "#FFFFFF", -- color of the title time_pos_color = "#FFFFFF", -- color of the timecode at hovered position buttons_color = "#FFFFFF", -- color of big buttons, wc buttons, and bar small buttons small_buttonsL_color = "#FFFFFF", -- color of left small buttons small_buttonsR_color = "#FFFFFF", -- color of right small buttons top_buttons_color = "#FFFFFF", -- color of top buttons held_element_color = "#999999", -- color of an element while held down time_pos_outline_color = "#000000", -- color of the border timecodes in slimbox and TimePosBar tick_delay = 1 / 60, -- minimum interval between OSC redraws in seconds tick_delay_follow_display_fps = false -- use display fps as the minimum interval } local osc_param = { -- calculated by osc_init() playresy = 0, -- canvas size Y playresx = 0, -- canvas size X display_aspect = 1, unscaled_y = 0, areas = {}, video_margins = { l = 0, r = 0, t = 0, b = 0, -- left/right/top/bottom }, } local margins_opts = { {"l", "video-margin-ratio-left"}, {"r", "video-margin-ratio-right"}, {"t", "video-margin-ratio-top"}, {"b", "video-margin-ratio-bottom"}, } local tick_delay = 1 / 60 local tracks_osc = {} local tracks_mpv = {} local window_control_box_width = 80 local layouts = {} local is_december = os.date("*t").month == 12 local UNICODE_MINUS = string.char(0xe2, 0x88, 0x92) -- UTF-8 for U+2212 MINUS SIGN local function osc_color_convert(color) return color:sub(6,7) .. color:sub(4,5) .. color:sub(2,3) end -- luacheck: push ignore -- luacheck: max line length local osc_styles local function set_osc_styles() osc_styles = { bigButtons = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.buttons_color) .. "\\3c&HFFFFFF\\fs50\\fnmpv-osd-symbols}", smallButtonsL = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.small_buttonsL_color) .. "\\3c&HFFFFFF\\fs19\\fnmpv-osd-symbols}", smallButtonsLlabel = "{\\fscx105\\fscy105\\fn" .. mp.get_property("options/osd-font") .. "}", smallButtonsR = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.small_buttonsR_color) .. "\\3c&HFFFFFF\\fs30\\fnmpv-osd-symbols}", topButtons = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.top_buttons_color) .. "\\3c&HFFFFFF\\fs12\\fnmpv-osd-symbols}", elementDown = "{\\1c&H" .. osc_color_convert(user_opts.held_element_color) .."}", timecodes = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.timecode_color) .. "\\3c&HFFFFFF\\fs20}", vidtitle = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.title_color) .. "\\3c&HFFFFFF\\fs12\\q2}", box = "{\\rDefault\\blur0\\bord1\\1c&H" .. osc_color_convert(user_opts.background_color) .. "\\3c&HFFFFFF}", topButtonsBar = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.top_buttons_color) .. "\\3c&HFFFFFF\\fs18\\fnmpv-osd-symbols}", smallButtonsBar = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.buttons_color) .. "\\3c&HFFFFFF\\fs28\\fnmpv-osd-symbols}", timecodesBar = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.timecode_color) .."\\3c&HFFFFFF\\fs27}", timePosBar = "{\\blur0\\bord".. user_opts.tooltipborder .."\\1c&H" .. osc_color_convert(user_opts.time_pos_color) .. "\\3c&H" .. osc_color_convert(user_opts.time_pos_outline_color) .. "\\fs30}", vidtitleBar = "{\\blur0\\bord0\\1c&H" .. osc_color_convert(user_opts.title_color) .. "\\3c&HFFFFFF\\fs18\\q2}", wcButtons = "{\\1c&H" .. osc_color_convert(user_opts.buttons_color) .. "\\fs24\\fnmpv-osd-symbols}", wcTitle = "{\\1c&H" .. osc_color_convert(user_opts.title_color) .. "\\fs24\\q2}", wcBar = "{\\1c&H" .. osc_color_convert(user_opts.background_color) .. "}", } end -- internal states, do not touch local state = { showtime = nil, -- time of last invocation (last mouse move) touchtime = nil, -- time of last invocation (last touch event) osc_visible = false, anistart = nil, -- time when the animation started anitype = nil, -- current type of animation animation = nil, -- current animation alpha mouse_down_counter = 0, -- used for softrepeat active_element = nil, -- nil = none, 0 = background, 1+ = see elements[] active_event_source = nil, -- the "button" that issued the current event rightTC_trem = not user_opts.timetotal, -- if the right timecode should display total or remaining time tc_ms = user_opts.timems, -- Should the timecodes display their time with milliseconds screen_sizeX = nil, screen_sizeY = nil, -- last screen-resolution, to detect resolution changes to issue reINITs initREQ = false, -- is a re-init request pending? marginsREQ = false, -- is a margins update pending? last_mouseX = nil, last_mouseY = nil, -- last mouse position, to detect significant mouse movement mouse_in_window = false, message_text = nil, message_hide_timer = nil, fullscreen = false, tick_timer = nil, tick_last_time = 0, -- when the last tick() was run hide_timer = nil, cache_state = nil, idle = false, enabled = true, input_enabled = true, showhide_enabled = false, windowcontrols_buttons = false, windowcontrols_title = false, dmx_cache = 0, using_video_margins = false, border = true, maximized = false, osd = mp.create_osd_overlay("ass-events"), chapter_list = {}, -- sorted by time } local logo_lines = { -- White border "{\\c&HE5E5E5&\\p6}m 895 10 b 401 10 0 410 0 905 0 1399 401 1800 895 1800 1390 1800 1790 1399 1790 905 1790 410 1390 10 895 10 {\\p0}", -- Purple fill "{\\c&H682167&\\p6}m 925 42 b 463 42 87 418 87 880 87 1343 463 1718 925 1718 1388 1718 1763 1343 1763 880 1763 418 1388 42 925 42{\\p0}", -- Darker fill "{\\c&H430142&\\p6}m 1605 828 b 1605 1175 1324 1456 977 1456 631 1456 349 1175 349 828 349 482 631 200 977 200 1324 200 1605 482 1605 828{\\p0}", -- White fill "{\\c&HDDDBDD&\\p6}m 1296 910 b 1296 1131 1117 1310 897 1310 676 1310 497 1131 497 910 497 689 676 511 897 511 1117 511 1296 689 1296 910{\\p0}", -- Triangle "{\\c&H691F69&\\p6}m 762 1113 l 762 708 b 881 776 1000 843 1119 911 1000 978 881 1046 762 1113{\\p0}", } local santa_hat_lines = { -- Pompoms "{\\c&HC0C0C0&\\p6}m 500 -323 b 491 -322 481 -318 475 -311 465 -312 456 -319 446 -318 434 -314 427 -304 417 -297 410 -290 404 -282 395 -278 390 -274 387 -267 381 -265 377 -261 379 -254 384 -253 397 -244 409 -232 425 -228 437 -228 446 -218 457 -217 462 -216 466 -213 468 -209 471 -205 477 -203 482 -206 491 -211 499 -217 508 -222 532 -235 556 -249 576 -267 584 -272 584 -284 578 -290 569 -305 550 -312 533 -309 523 -310 515 -316 507 -321 505 -323 503 -323 500 -323{\\p0}", "{\\c&HE0E0E0&\\p6}m 315 -260 b 286 -258 259 -240 246 -215 235 -210 222 -215 211 -211 204 -188 177 -176 172 -151 170 -139 163 -128 154 -121 143 -103 141 -81 143 -60 139 -46 125 -34 129 -17 132 -1 134 16 142 30 145 56 161 80 181 96 196 114 210 133 231 144 266 153 303 138 328 115 373 79 401 28 423 -24 446 -73 465 -123 483 -174 487 -199 467 -225 442 -227 421 -232 402 -242 384 -254 364 -259 342 -250 322 -260 320 -260 317 -261 315 -260{\\p0}", -- Main cap "{\\c&H0000F0&\\p6}m 1151 -523 b 1016 -516 891 -458 769 -406 693 -369 624 -319 561 -262 526 -252 465 -235 479 -187 502 -147 551 -135 588 -111 1115 165 1379 232 1909 761 1926 800 1952 834 1987 858 2020 883 2053 912 2065 952 2088 1000 2146 962 2139 919 2162 836 2156 747 2143 662 2131 615 2116 567 2122 517 2120 410 2090 306 2089 199 2092 147 2071 99 2034 64 1987 5 1928 -41 1869 -86 1777 -157 1712 -256 1629 -337 1578 -389 1521 -436 1461 -476 1407 -509 1343 -507 1284 -515 1240 -519 1195 -521 1151 -523{\\p0}", -- Cap shadow "{\\c&H0000AA&\\p6}m 1657 248 b 1658 254 1659 261 1660 267 1669 276 1680 284 1689 293 1695 302 1700 311 1707 320 1716 325 1726 330 1735 335 1744 347 1752 360 1761 371 1753 352 1754 331 1753 311 1751 237 1751 163 1751 90 1752 64 1752 37 1767 14 1778 -3 1785 -24 1786 -45 1786 -60 1786 -77 1774 -87 1760 -96 1750 -78 1751 -65 1748 -37 1750 -8 1750 20 1734 78 1715 134 1699 192 1694 211 1689 231 1676 246 1671 251 1661 255 1657 248 m 1909 541 b 1914 542 1922 549 1917 539 1919 520 1921 502 1919 483 1918 458 1917 433 1915 407 1930 373 1942 338 1947 301 1952 270 1954 238 1951 207 1946 214 1947 229 1945 239 1939 278 1936 318 1924 356 1923 362 1913 382 1912 364 1906 301 1904 237 1891 175 1887 150 1892 126 1892 101 1892 68 1893 35 1888 2 1884 -9 1871 -20 1859 -14 1851 -6 1854 9 1854 20 1855 58 1864 95 1873 132 1883 179 1894 225 1899 273 1908 362 1910 451 1909 541{\\p0}", -- Brim and tip pompom "{\\c&HF8F8F8&\\p6}m 626 -191 b 565 -155 486 -196 428 -151 387 -115 327 -101 304 -47 273 2 267 59 249 113 219 157 217 213 215 265 217 309 260 302 285 283 373 264 465 264 555 257 608 252 655 292 709 287 759 294 816 276 863 298 903 340 972 324 1012 367 1061 394 1125 382 1167 424 1213 462 1268 482 1322 506 1385 546 1427 610 1479 662 1510 690 1534 725 1566 752 1611 796 1664 830 1703 880 1740 918 1747 986 1805 1005 1863 991 1897 932 1916 880 1914 823 1945 777 1961 725 1979 673 1957 622 1938 575 1912 534 1862 515 1836 473 1790 417 1755 351 1697 305 1658 266 1633 216 1593 176 1574 138 1539 116 1497 110 1448 101 1402 77 1371 37 1346 -16 1295 15 1254 6 1211 -27 1170 -62 1121 -86 1072 -104 1027 -128 976 -133 914 -130 851 -137 794 -162 740 -181 679 -168 626 -191 m 2051 917 b 1971 932 1929 1017 1919 1091 1912 1149 1923 1214 1970 1254 2000 1279 2027 1314 2066 1325 2139 1338 2212 1295 2254 1238 2281 1203 2287 1158 2282 1116 2292 1061 2273 1006 2229 970 2206 941 2167 938 2138 918{\\p0}", } -- luacheck: pop -- -- Helper functions -- local function kill_animation() state.anistart = nil state.animation = nil state.anitype = nil end local function set_osd(res_x, res_y, text, z) if state.osd.res_x == res_x and state.osd.res_y == res_y and state.osd.data == text then return end state.osd.res_x = res_x state.osd.res_y = res_y state.osd.data = text state.osd.z = z state.osd:update() end local function set_time_styles(timetotal_changed, timems_changed) if timetotal_changed then state.rightTC_trem = not user_opts.timetotal end if timems_changed then state.tc_ms = user_opts.timems end end -- scale factor for translating between real and virtual ASS coordinates local function get_virt_scale_factor() local w, h = mp.get_osd_size() if w <= 0 or h <= 0 then return 0, 0 end return osc_param.playresx / w, osc_param.playresy / h end -- return mouse position in virtual ASS coordinates (playresx/y) local function get_virt_mouse_pos() if state.mouse_in_window then local sx, sy = get_virt_scale_factor() local x, y = mp.get_mouse_pos() return x * sx, y * sy else return -1, -1 end end local function set_virt_mouse_area(x0, y0, x1, y1, name) local sx, sy = get_virt_scale_factor() mp.set_mouse_area(x0 / sx, y0 / sy, x1 / sx, y1 / sy, name) end local function scale_value(x0, x1, y0, y1, val) local m = (y1 - y0) / (x1 - x0) local b = y0 - (m * x0) return (m * val) + b end -- returns hitbox spanning coordinates (top left, bottom right corner) -- according to alignment local function get_hitbox_coords(x, y, an, w, h) local alignments = { [1] = function () return x, y-h, x+w, y end, [2] = function () return x-(w/2), y-h, x+(w/2), y end, [3] = function () return x-w, y-h, x, y end, [4] = function () return x, y-(h/2), x+w, y+(h/2) end, [5] = function () return x-(w/2), y-(h/2), x+(w/2), y+(h/2) end, [6] = function () return x-w, y-(h/2), x, y+(h/2) end, [7] = function () return x, y, x+w, y+h end, [8] = function () return x-(w/2), y, x+(w/2), y+h end, [9] = function () return x-w, y, x, y+h end, } return alignments[an]() end local function get_hitbox_coords_geo(geometry) return get_hitbox_coords(geometry.x, geometry.y, geometry.an, geometry.w, geometry.h) end local function get_element_hitbox(element) return element.hitbox.x1, element.hitbox.y1, element.hitbox.x2, element.hitbox.y2 end local function mouse_hit_coords(bX1, bY1, bX2, bY2) local mX, mY = get_virt_mouse_pos() return (mX >= bX1 and mX <= bX2 and mY >= bY1 and mY <= bY2) end local function mouse_hit(element) return mouse_hit_coords(get_element_hitbox(element)) end local function limit_range(min, max, val) if val > max then val = max elseif val < min then val = min end return val end -- translate value into element coordinates local function get_slider_ele_pos_for(element, val) local ele_pos = scale_value( element.slider.min.value, element.slider.max.value, element.slider.min.ele_pos, element.slider.max.ele_pos, val) return limit_range( element.slider.min.ele_pos, element.slider.max.ele_pos, ele_pos) end -- translates global (mouse) coordinates to value local function get_slider_value_at(element, glob_pos) local val = scale_value( element.slider.min.glob_pos, element.slider.max.glob_pos, element.slider.min.value, element.slider.max.value, glob_pos) return limit_range( element.slider.min.value, element.slider.max.value, val) end -- get value at current mouse position local function get_slider_value(element) return get_slider_value_at(element, get_virt_mouse_pos()) end local function countone(val) if not user_opts.iamaprogrammer then val = val + 1 end return val end -- align: -1 .. +1 -- frame: size of the containing area -- obj: size of the object that should be positioned inside the area -- margin: min. distance from object to frame (as long as -1 <= align <= +1) local function get_align(align, frame, obj, margin) return (frame / 2) + (((frame / 2) - margin - (obj / 2)) * align) end -- multiplies two alpha values, formular can probably be improved local function mult_alpha(alphaA, alphaB) return 255 - (((1-(alphaA/255)) * (1-(alphaB/255))) * 255) end local function add_area(name, x1, y1, x2, y2) -- create area if needed if osc_param.areas[name] == nil then osc_param.areas[name] = {} end table.insert(osc_param.areas[name], {x1=x1, y1=y1, x2=x2, y2=y2}) end local function ass_append_alpha(ass, alpha, modifier) local ar = {} for ai, av in pairs(alpha) do av = mult_alpha(av, modifier) if state.animation then av = mult_alpha(av, state.animation) end ar[ai] = av end ass:append(string.format("{\\1a&H%X&\\2a&H%X&\\3a&H%X&\\4a&H%X&}", ar[1], ar[2], ar[3], ar[4])) end local function ass_draw_rr_h_cw(ass, x0, y0, x1, y1, r1, hexagon, r2) if hexagon then ass:hexagon_cw(x0, y0, x1, y1, r1, r2) else ass:round_rect_cw(x0, y0, x1, y1, r1, r2) end end local function ass_draw_rr_h_ccw(ass, x0, y0, x1, y1, r1, hexagon, r2) if hexagon then ass:hexagon_ccw(x0, y0, x1, y1, r1, r2) else ass:round_rect_ccw(x0, y0, x1, y1, r1, r2) end end local function get_hidetimeout() if user_opts.visibility == "always" then return -1 -- disable autohide end return user_opts.hidetimeout end local function get_touchtimeout() if state.touchtime == nil then return 0 end return state.touchtime + (get_hidetimeout() / 1000) - mp.get_time() end local function reset_margins() if state.using_video_margins then for _, mopt in ipairs(margins_opts) do mp.set_property_number(mopt[2], 0.0) end state.using_video_margins = false end end local function update_margins() local margins = osc_param.video_margins -- Don't use margins if it's visible only temporarily. if not state.osc_visible or get_hidetimeout() >= 0 or (state.fullscreen and not user_opts.showfullscreen) or (not state.fullscreen and not user_opts.showwindowed) then margins = {l = 0, r = 0, t = 0, b = 0} end if user_opts.boxvideo then -- check whether any margin option has a non-default value local margins_used = false if not state.using_video_margins then for _, mopt in ipairs(margins_opts) do if mp.get_property_number(mopt[2], 0.0) ~= 0.0 then margins_used = true end end end if not margins_used then for _, mopt in ipairs(margins_opts) do local v = margins[mopt[1]] if v ~= 0 or state.using_video_margins then mp.set_property_number(mopt[2], v) state.using_video_margins = true end end end else reset_margins() end mp.set_property_native("user-data/osc/margins", margins) end local tick -- Request that tick() is called (which typically re-renders the OSC). -- The tick is then either executed immediately, or rate-limited if it was -- called a small time ago. local function request_tick() if state.tick_timer == nil then state.tick_timer = mp.add_timeout(0, tick) end if not state.tick_timer:is_enabled() then local now = mp.get_time() local timeout = tick_delay - (now - state.tick_last_time) if timeout < 0 then timeout = 0 end state.tick_timer.timeout = timeout state.tick_timer:resume() end end local function request_init() state.initREQ = true request_tick() end -- Like request_init(), but also request an immediate update local function request_init_resize() request_init() -- ensure immediate update state.tick_timer:kill() state.tick_timer.timeout = 0 state.tick_timer:resume() end local function render_wipe() msg.trace("render_wipe()") state.osd.data = "" -- allows set_osd to immediately update on enable state.osd:remove() end -- -- Message display -- -- pos is 1 based local function limited_list(prop, pos) local proplist = mp.get_property_native(prop, {}) local count = #proplist if count == 0 then return count, proplist end local fs = tonumber(mp.get_property('options/osd-font-size')) local max = math.ceil(osc_param.unscaled_y*0.75 / fs) if max % 2 == 0 then max = max - 1 end local delta = math.ceil(max / 2) - 1 local begi = math.max(math.min(pos - delta, count - max + 1), 1) local endi = math.min(begi + max - 1, count) local reslist = {} for i=begi, endi do local item = proplist[i] item.current = (i == pos) and true or nil table.insert(reslist, item) end return count, reslist end local function get_playlist() local pos = mp.get_property_number('playlist-pos', 0) + 1 local count, limlist = limited_list('playlist', pos) if count == 0 then return 'Empty playlist.' end local message = string.format('Playlist [%d/%d]:\n', pos, count) local show = mp.get_property_native('osd-playlist-entry') local trailing_slash_pattern = mp.get_property("platform") == "windows" and "[/\\]+$" or "/+$" for _, v in ipairs(limlist) do local entry = v.title if not entry or show ~= 'title' then entry = v.filename if not entry:find("://") then entry = select(2, utils.split_path( entry:gsub(trailing_slash_pattern, ""))) end end if v.title and show == 'both' then entry = string.format('%s (%s)', v.title, entry) end message = string.format('%s %s %s\n', message, (v.current and '●' or '○'), entry) end return message end local function get_chapterlist() local pos = mp.get_property_number('chapter', 0) + 1 local count, limlist = limited_list('chapter-list', pos) if count == 0 then return 'No chapters.' end local message = string.format('Chapters [%d/%d]:\n', pos, count) for i, v in ipairs(limlist) do local time = mp.format_time(v.time) local title = v.title if title == nil then title = string.format('Chapter %02d', i) end message = string.format('%s[%s] %s %s\n', message, time, (v.current and '●' or '○'), title) end return message end local function render_message(ass) if state.message_hide_timer and state.message_hide_timer:is_enabled() and state.message_text then local _, lines = string.gsub(state.message_text, "\\N", "") local fontsize = tonumber(mp.get_property("options/osd-font-size")) local outline = tonumber(mp.get_property("options/osd-border-size")) local maxlines = math.ceil(osc_param.unscaled_y*0.75 / fontsize) local counterscale = osc_param.playresy / osc_param.unscaled_y fontsize = fontsize * counterscale / math.max(0.65 + math.min(lines/maxlines, 1), 1) outline = outline * counterscale / math.max(0.75 + math.min(lines/maxlines, 1)/2, 1) local style = "{\\bord" .. outline .. "\\fs" .. fontsize .. "}" ass:new_event() ass:append(style .. state.message_text) else state.message_text = nil end end local function show_message(text, duration) --print("text: "..text.." duration: " .. duration) if duration == nil then duration = tonumber(mp.get_property("options/osd-duration")) / 1000 elseif type(duration) ~= "number" then print("duration: " .. duration) end -- cut the text short, otherwise the following functions -- may slow down massively on huge input text = string.sub(text, 0, 4000) state.message_text = mp.command_native({"escape-ass", text}) if not state.message_hide_timer then state.message_hide_timer = mp.add_timeout(0, request_tick) end state.message_hide_timer:kill() state.message_hide_timer.timeout = duration state.message_hide_timer:resume() request_tick() end -- -- Tracklist Management -- local nicetypes = {video = "Video", audio = "Audio", sub = "Subtitle"} -- updates the OSC internal playlists, should be run each time the track-layout changes local function update_tracklist() local tracktable = mp.get_property_native("track-list", {}) -- by osc_id tracks_osc.video, tracks_osc.audio, tracks_osc.sub = {}, {}, {} -- by mpv_id tracks_mpv.video, tracks_mpv.audio, tracks_mpv.sub = {}, {}, {} for n = 1, #tracktable do if tracktable[n].type ~= "unknown" then local type = tracktable[n].type local mpv_id = tonumber(tracktable[n].id) -- by osc_id table.insert(tracks_osc[type], tracktable[n]) -- by mpv_id tracks_mpv[type][mpv_id] = tracktable[n] tracks_mpv[type][mpv_id].osc_id = #tracks_osc[type] end end end -- return a nice list of tracks of the given type (video, audio, sub) local function get_tracklist(type) local message = "Available " .. nicetypes[type] .. " Tracks: " if #tracks_osc[type] == 0 then message = message .. "none" else for n = 1, #tracks_osc[type] do local track = tracks_osc[type][n] local lang, title, selected = "unknown", "", "○" if track.lang ~= nil then lang = track.lang end if track.title ~= nil then title = track.title end if track.id == tonumber(mp.get_property(type)) then selected = "●" end message = message.."\n"..selected.." "..n..": ["..lang.."] "..title end end return message end -- relatively change the track of given by tracks --(+1 -> next, -1 -> previous) local function set_track(type, next) local current_track_mpv, current_track_osc if mp.get_property(type) == "no" then current_track_osc = 0 else current_track_mpv = tonumber(mp.get_property(type)) current_track_osc = tracks_mpv[type][current_track_mpv].osc_id end local new_track_osc = (current_track_osc + next) % (#tracks_osc[type] + 1) local new_track_mpv if new_track_osc == 0 then new_track_mpv = "no" else new_track_mpv = tracks_osc[type][new_track_osc].id end mp.commandv("set", type, new_track_mpv) if new_track_osc == 0 then show_message(nicetypes[type] .. " Track: none") else show_message(nicetypes[type] .. " Track: " .. new_track_osc .. "/" .. #tracks_osc[type] .. " [".. (tracks_osc[type][new_track_osc].lang or "unknown") .."] " .. (tracks_osc[type][new_track_osc].title or "")) end end -- get the currently selected track of , OSC-style counted local function get_track(type) local track = mp.get_property(type) if track ~= "no" and track ~= nil then local tr = tracks_mpv[type][tonumber(track)] if tr then return tr.osc_id end end return 0 end -- WindowControl helpers local function window_controls_enabled() local val = user_opts.windowcontrols if val == "auto" then return not (state.border and state.title_bar) else return val ~= "no" end end local function window_controls_alignment() return user_opts.windowcontrols_alignment end -- -- Element Management -- local elements = {} local function prepare_elements() -- remove elements without layout or invisible local elements2 = {} for _, element in pairs(elements) do if element.layout ~= nil and element.visible then table.insert(elements2, element) end end elements = elements2 local function elem_compare (a, b) return a.layout.layer < b.layout.layer end table.sort(elements, elem_compare) for _,element in pairs(elements) do local elem_geo = element.layout.geometry -- Calculate the hitbox local bX1, bY1, bX2, bY2 = get_hitbox_coords_geo(elem_geo) element.hitbox = {x1 = bX1, y1 = bY1, x2 = bX2, y2 = bY2} local style_ass = assdraw.ass_new() -- prepare static elements style_ass:append("{}") -- hack to troll new_event into inserting a \n style_ass:new_event() style_ass:pos(elem_geo.x, elem_geo.y) style_ass:an(elem_geo.an) style_ass:append(element.layout.style) element.style_ass = style_ass local static_ass = assdraw.ass_new() if element.type == "box" then --draw box static_ass:draw_start() ass_draw_rr_h_cw(static_ass, 0, 0, elem_geo.w, elem_geo.h, element.layout.box.radius, element.layout.box.hexagon) static_ass:draw_stop() elseif element.type == "slider" then --draw static slider parts local r1 = 0 local r2 = 0 local slider_lo = element.layout.slider -- offset between element outline and drag-area local foV = slider_lo.border + slider_lo.gap -- calculate positions of min and max points if slider_lo.stype ~= "bar" then r1 = elem_geo.h / 2 element.slider.min.ele_pos = elem_geo.h / 2 element.slider.max.ele_pos = elem_geo.w - (elem_geo.h / 2) if slider_lo.stype == "diamond" then r2 = (elem_geo.h - 2 * slider_lo.border) / 2 elseif slider_lo.stype == "knob" then r2 = r1 end else element.slider.min.ele_pos = slider_lo.border + slider_lo.gap element.slider.max.ele_pos = elem_geo.w - (slider_lo.border + slider_lo.gap) end element.slider.min.glob_pos = element.hitbox.x1 + element.slider.min.ele_pos element.slider.max.glob_pos = element.hitbox.x1 + element.slider.max.ele_pos -- -- -- static_ass:draw_start() -- the box ass_draw_rr_h_cw(static_ass, 0, 0, elem_geo.w, elem_geo.h, r1, slider_lo.stype == "diamond") -- the "hole" ass_draw_rr_h_ccw(static_ass, slider_lo.border, slider_lo.border, elem_geo.w - slider_lo.border, elem_geo.h - slider_lo.border, r2, slider_lo.stype == "diamond") -- marker nibbles if element.slider.markerF ~= nil and slider_lo.gap > 0 then local markers = element.slider.markerF() for _,marker in pairs(markers) do if marker > element.slider.min.value and marker < element.slider.max.value then local s = get_slider_ele_pos_for(element, marker) if slider_lo.gap > 1 then -- draw triangles local a = slider_lo.gap / 0.5 --0.866 --top if slider_lo.nibbles_top then static_ass:move_to(s - (a / 2), slider_lo.border) static_ass:line_to(s + (a / 2), slider_lo.border) static_ass:line_to(s, foV) end --bottom if slider_lo.nibbles_bottom then static_ass:move_to(s - (a / 2), elem_geo.h - slider_lo.border) static_ass:line_to(s, elem_geo.h - foV) static_ass:line_to(s + (a / 2), elem_geo.h - slider_lo.border) end else -- draw 2x1px nibbles --top if slider_lo.nibbles_top then static_ass:rect_cw(s - 1, slider_lo.border, s + 1, slider_lo.border + slider_lo.gap); end --bottom if slider_lo.nibbles_bottom then static_ass:rect_cw(s - 1, elem_geo.h -slider_lo.border -slider_lo.gap, s + 1, elem_geo.h - slider_lo.border); end end end end end end element.static_ass = static_ass -- if the element is supposed to be disabled, -- style it accordingly and kill the eventresponders if not element.enabled then element.layout.alpha[1] = 136 element.eventresponder = nil end end end -- -- Element Rendering -- -- returns nil or a chapter element from the native property chapter-list local function get_chapter(possec) local cl = state.chapter_list -- sorted, get latest before possec, if any for n=#cl,1,-1 do if possec >= cl[n].time then return cl[n] end end end local function render_elements(master_ass) -- when the slider is dragged or hovered and we have a target chapter name -- then we use it instead of the normal title. we calculate it before the -- render iterations because the title may be rendered before the slider. state.forced_title = nil local se, ae = state.slider_element, elements[state.active_element] if user_opts.chapter_fmt ~= "no" and se and (ae == se or (not ae and mouse_hit(se))) then local dur = mp.get_property_number("duration", 0) if dur > 0 then local possec = get_slider_value(se) * dur / 100 -- of mouse pos local ch = get_chapter(possec) if ch and ch.title and ch.title ~= "" then state.forced_title = string.format(user_opts.chapter_fmt, ch.title) end end end for n=1, #elements do local element = elements[n] local style_ass = assdraw.ass_new() style_ass:merge(element.style_ass) ass_append_alpha(style_ass, element.layout.alpha, 0) if element.eventresponder and (state.active_element == n) then -- run render event functions if element.eventresponder.render ~= nil then element.eventresponder.render(element) end if mouse_hit(element) then -- mouse down styling if element.styledown then style_ass:append(osc_styles.elementDown) end if element.softrepeat and state.mouse_down_counter >= 15 and state.mouse_down_counter % 5 == 0 then element.eventresponder[state.active_event_source.."_down"](element) end state.mouse_down_counter = state.mouse_down_counter + 1 end end local elem_ass = assdraw.ass_new() elem_ass:merge(style_ass) if element.type ~= "button" then elem_ass:merge(element.static_ass) end if element.type == "slider" then local slider_lo = element.layout.slider local elem_geo = element.layout.geometry local s_min = element.slider.min.value local s_max = element.slider.max.value -- draw pos marker local foH, xp local pos = element.slider.posF() local foV = slider_lo.border + slider_lo.gap local innerH = elem_geo.h - (2 * foV) local seekRanges = element.slider.seekRangesF() local seekRangeLineHeight = innerH / 5 if slider_lo.stype ~= "bar" then foH = elem_geo.h / 2 else foH = slider_lo.border + slider_lo.gap end if pos then xp = get_slider_ele_pos_for(element, pos) if slider_lo.stype ~= "bar" then local r = (user_opts.seekbarhandlesize * innerH) / 2 ass_draw_rr_h_cw(elem_ass, xp - r, foH - r, xp + r, foH + r, r, slider_lo.stype == "diamond") else local h = 0 if seekRanges and user_opts.seekrangeseparate and slider_lo.rtype ~= "inverted" then h = seekRangeLineHeight end elem_ass:rect_cw(foH, foV, xp, elem_geo.h - foV - h) if seekRanges and not user_opts.seekrangeseparate and slider_lo.rtype ~= "inverted" then -- Punch holes for the seekRanges to be drawn later for _,range in pairs(seekRanges) do if range["start"] < pos then local pstart = get_slider_ele_pos_for(element, range["start"]) local pend = xp if pos > range["end"] then pend = get_slider_ele_pos_for(element, range["end"]) end elem_ass:rect_ccw(pstart, elem_geo.h - foV - seekRangeLineHeight, pend, elem_geo.h - foV) end end end end if slider_lo.rtype == "slider" then ass_draw_rr_h_cw(elem_ass, foH - innerH / 6, foH - innerH / 6, xp, foH + innerH / 6, innerH / 6, slider_lo.stype == "diamond", 0) ass_draw_rr_h_cw(elem_ass, xp, foH - innerH / 15, elem_geo.w - foH + innerH / 15, foH + innerH / 15, 0, slider_lo.stype == "diamond", innerH / 15) for _,range in pairs(seekRanges or {}) do local pstart = get_slider_ele_pos_for(element, range["start"]) local pend = get_slider_ele_pos_for(element, range["end"]) ass_draw_rr_h_ccw(elem_ass, pstart, foH - innerH / 21, pend, foH + innerH / 21, innerH / 21, slider_lo.stype == "diamond") end end end if seekRanges then if slider_lo.rtype ~= "inverted" then elem_ass:draw_stop() elem_ass:merge(element.style_ass) ass_append_alpha(elem_ass, element.layout.alpha, user_opts.seekrangealpha) elem_ass:merge(element.static_ass) end for _,range in pairs(seekRanges) do local pstart = get_slider_ele_pos_for(element, range["start"]) local pend = get_slider_ele_pos_for(element, range["end"]) if slider_lo.rtype == "slider" then ass_draw_rr_h_cw(elem_ass, pstart, foH - innerH / 21, pend, foH + innerH / 21, innerH / 21, slider_lo.stype == "diamond") elseif slider_lo.rtype == "line" then if slider_lo.stype == "bar" then elem_ass:rect_cw(pstart, elem_geo.h - foV - seekRangeLineHeight, pend, elem_geo.h - foV) else ass_draw_rr_h_cw(elem_ass, pstart - innerH / 8, foH - innerH / 8, pend + innerH / 8, foH + innerH / 8, innerH / 8, slider_lo.stype == "diamond") end elseif slider_lo.rtype == "bar" then if slider_lo.stype ~= "bar" then ass_draw_rr_h_cw(elem_ass, pstart - innerH / 2, foV, pend + innerH / 2, foV + innerH, innerH / 2, slider_lo.stype == "diamond") elseif range["end"] >= (pos or 0) then elem_ass:rect_cw(pstart, foV, pend, elem_geo.h - foV) else elem_ass:rect_cw(pstart, elem_geo.h - foV - seekRangeLineHeight, pend, elem_geo.h - foV) end elseif slider_lo.rtype == "inverted" then if slider_lo.stype ~= "bar" then ass_draw_rr_h_ccw(elem_ass, pstart, (elem_geo.h / 2) - 1, pend, (elem_geo.h / 2) + 1, 1, slider_lo.stype == "diamond") else elem_ass:rect_ccw(pstart, (elem_geo.h / 2) - 1, pend, (elem_geo.h / 2) + 1) end end end end elem_ass:draw_stop() -- add tooltip if element.slider.tooltipF ~= nil then if mouse_hit(element) then local sliderpos = get_slider_value(element) local tooltiplabel = element.slider.tooltipF(sliderpos) local an = slider_lo.tooltip_an local ty if an == 2 then ty = element.hitbox.y1 - slider_lo.border else ty = element.hitbox.y1 + elem_geo.h / 2 end local tx = get_virt_mouse_pos() if slider_lo.adjust_tooltip then if an == 2 then if sliderpos < (s_min + 3) then an = an - 1 elseif sliderpos > (s_max - 3) then an = an + 1 end elseif sliderpos > (s_max+s_min) / 2 then an = an + 1 tx = tx - 5 else an = an - 1 tx = tx + 10 end end -- tooltip label elem_ass:new_event() elem_ass:pos(tx, ty) elem_ass:an(an) elem_ass:append(slider_lo.tooltip_style) ass_append_alpha(elem_ass, slider_lo.alpha, 0) elem_ass:append(tooltiplabel) end end elseif element.type == "button" then local buttontext if type(element.content) == "function" then buttontext = element.content() -- function objects elseif element.content ~= nil then buttontext = element.content -- text objects end local maxchars = element.layout.button.maxchars if maxchars ~= nil and #buttontext > maxchars then local max_ratio = 1.25 -- up to 25% more chars while shrinking local limit = math.max(0, math.floor(maxchars * max_ratio) - 3) if #buttontext > limit then while (#buttontext > limit) do buttontext = buttontext:gsub(".[\128-\191]*$", "") end buttontext = buttontext .. "..." end buttontext = string.format("{\\fscx%f}", (maxchars/#buttontext)*100) .. buttontext end elem_ass:append(buttontext) end master_ass:merge(elem_ass) end end -- -- Initialisation and Layout -- local function new_element(name, type) elements[name] = {} elements[name].type = type -- add default stuff elements[name].eventresponder = {} elements[name].visible = true elements[name].enabled = true elements[name].softrepeat = false elements[name].styledown = (type == "button") elements[name].state = {} if type == "slider" then elements[name].slider = {min = {value = 0}, max = {value = 100}} end return elements[name] end local function add_layout(name) if elements[name] ~= nil then -- new layout elements[name].layout = {} -- set layout defaults elements[name].layout.layer = 50 elements[name].layout.alpha = {[1] = 0, [2] = 255, [3] = 255, [4] = 255} if elements[name].type == "button" then elements[name].layout.button = { maxchars = nil, } elseif elements[name].type == "slider" then -- slider defaults elements[name].layout.slider = { border = 1, gap = 1, nibbles_top = true, nibbles_bottom = true, stype = "slider", adjust_tooltip = true, tooltip_style = "", tooltip_an = 2, alpha = {[1] = 0, [2] = 255, [3] = 88, [4] = 255}, } elseif elements[name].type == "box" then elements[name].layout.box = {radius = 0, hexagon = false} end return elements[name].layout else msg.error("Can't add_layout to element \""..name.."\", doesn't exist.") end end -- Window Controls local function window_controls(topbar) local wc_geo = { x = 0, y = 30 + user_opts.barmargin, an = 1, w = osc_param.playresx, h = 30, } local alignment = window_controls_alignment() local controlbox_w = window_control_box_width local titlebox_w = wc_geo.w - controlbox_w -- Default alignment is "right" local controlbox_left = wc_geo.w - controlbox_w local titlebox_left = wc_geo.x local titlebox_right = wc_geo.w - controlbox_w if alignment == "left" then controlbox_left = wc_geo.x titlebox_left = wc_geo.x + controlbox_w titlebox_right = wc_geo.w end add_area("window-controls", get_hitbox_coords(controlbox_left, wc_geo.y, wc_geo.an, controlbox_w, wc_geo.h)) local lo -- Background Bar new_element("wcbar", "box") lo = add_layout("wcbar") lo.geometry = wc_geo lo.layer = 10 lo.style = osc_styles.wcBar lo.alpha[1] = user_opts.boxalpha local button_y = wc_geo.y - (wc_geo.h / 2) local first_geo = {x = controlbox_left + 5, y = button_y, an = 4, w = 25, h = 25} local second_geo = {x = controlbox_left + 30, y = button_y, an = 4, w = 25, h = 25} local third_geo = {x = controlbox_left + 55, y = button_y, an = 4, w = 25, h = 25} -- Window control buttons use symbols in the custom mpv osd font -- because the official unicode codepoints are sufficiently -- exotic that a system might lack an installed font with them, -- and libass will complain that they are not present in the -- default font, even if another font with them is available. -- Close: 🗙 local ne = new_element("close", "button") ne.content = "\238\132\149" ne.eventresponder["mbtn_left_up"] = function () mp.commandv("quit") end lo = add_layout("close") lo.geometry = alignment == "left" and first_geo or third_geo lo.style = osc_styles.wcButtons -- Minimize: 🗕 ne = new_element("minimize", "button") ne.content = "\238\132\146" ne.eventresponder["mbtn_left_up"] = function () mp.commandv("cycle", "window-minimized") end lo = add_layout("minimize") lo.geometry = alignment == "left" and second_geo or first_geo lo.style = osc_styles.wcButtons -- Maximize: 🗖 /🗗 ne = new_element("maximize", "button") if state.maximized or state.fullscreen then ne.content = "\238\132\148" else ne.content = "\238\132\147" end ne.eventresponder["mbtn_left_up"] = function () if state.fullscreen then mp.commandv("cycle", "fullscreen") else mp.commandv("cycle", "window-maximized") end end lo = add_layout("maximize") lo.geometry = alignment == "left" and third_geo or second_geo lo.style = osc_styles.wcButtons -- deadzone below window controls local sh_area_y0, sh_area_y1 sh_area_y0 = user_opts.barmargin sh_area_y1 = wc_geo.y + get_align(1 - (2 * user_opts.deadzonesize), osc_param.playresy - wc_geo.y, 0, 0) add_area("showhide_wc", wc_geo.x, sh_area_y0, wc_geo.w, sh_area_y1) if topbar then -- The title is already there as part of the top bar return else -- Apply boxvideo margins to the control bar osc_param.video_margins.t = wc_geo.h / osc_param.playresy end -- Window Title ne = new_element("wctitle", "button") ne.content = function () local title = mp.command_native({"expand-text", user_opts.windowcontrols_title}) title = title:gsub("\n", " ") return title ~= "" and mp.command_native({"escape-ass", title}) or "mpv" end local left_pad = 5 local right_pad = 10 lo = add_layout("wctitle") lo.geometry = { x = titlebox_left + left_pad, y = wc_geo.y - 3, an = 1, w = titlebox_w, h = wc_geo.h } lo.style = string.format("%s{\\clip(%f,%f,%f,%f)}", osc_styles.wcTitle, titlebox_left + left_pad, wc_geo.y - wc_geo.h, titlebox_right - right_pad , wc_geo.y + wc_geo.h) add_area("window-controls-title", titlebox_left, 0, titlebox_right, wc_geo.h) end -- -- Layouts -- -- Classic box layout layouts["box"] = function () local osc_geo = { w = 550, -- width h = 138, -- height r = 10, -- corner-radius p = 15, -- padding } -- make sure the OSC actually fits into the video if osc_param.playresx < (osc_geo.w + (2 * osc_geo.p)) then osc_param.playresy = (osc_geo.w + (2 * osc_geo.p)) / osc_param.display_aspect osc_param.playresx = osc_param.playresy * osc_param.display_aspect end -- position of the controller according to video aspect and valignment local posX = math.floor(get_align(user_opts.halign, osc_param.playresx, osc_geo.w, 0)) local posY = math.floor(get_align(user_opts.valign, osc_param.playresy, osc_geo.h, 0)) -- position offset for contents aligned at the borders of the box local pos_offsetX = (osc_geo.w - (2*osc_geo.p)) / 2 local pos_offsetY = (osc_geo.h - (2*osc_geo.p)) / 2 osc_param.areas = {} -- delete areas -- area for active mouse input add_area("input", get_hitbox_coords(posX, posY, 5, osc_geo.w, osc_geo.h)) -- area for show/hide local sh_area_y0, sh_area_y1 if user_opts.valign > 0 then -- deadzone above OSC sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize), posY - (osc_geo.h / 2), 0, 0) sh_area_y1 = osc_param.playresy else -- deadzone below OSC sh_area_y0 = 0 sh_area_y1 = (posY + (osc_geo.h / 2)) + get_align(1 - (2*user_opts.deadzonesize), osc_param.playresy - (posY + (osc_geo.h / 2)), 0, 0) end add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1) -- fetch values local osc_w, osc_h, osc_r = osc_geo.w, osc_geo.h, osc_geo.r local lo -- -- Background box -- new_element("bgbox", "box") lo = add_layout("bgbox") lo.geometry = {x = posX, y = posY, an = 5, w = osc_w, h = osc_h} lo.layer = 10 lo.style = osc_styles.box lo.alpha[1] = user_opts.boxalpha lo.alpha[3] = user_opts.boxalpha lo.box.radius = osc_r -- -- Title row -- local titlerowY = posY - pos_offsetY - 10 lo = add_layout("title") lo.geometry = {x = posX, y = titlerowY, an = 8, w = 496, h = 12} lo.style = osc_styles.vidtitle lo.button.maxchars = user_opts.boxmaxchars lo = add_layout("pl_prev") lo.geometry = {x = (posX - pos_offsetX), y = titlerowY, an = 7, w = 12, h = 12} lo.style = osc_styles.topButtons lo = add_layout("pl_next") lo.geometry = {x = (posX + pos_offsetX), y = titlerowY, an = 9, w = 12, h = 12} lo.style = osc_styles.topButtons -- -- Big buttons -- local bigbtnrowY = posY - pos_offsetY + 35 local bigbtndist = 60 lo = add_layout("playpause") lo.geometry = {x = posX, y = bigbtnrowY, an = 5, w = 40, h = 40} lo.style = osc_styles.bigButtons lo = add_layout("skipback") lo.geometry = {x = posX - bigbtndist, y = bigbtnrowY, an = 5, w = 40, h = 40} lo.style = osc_styles.bigButtons lo = add_layout("skipfrwd") lo.geometry = {x = posX + bigbtndist, y = bigbtnrowY, an = 5, w = 40, h = 40} lo.style = osc_styles.bigButtons lo = add_layout("ch_prev") lo.geometry = {x = posX - (bigbtndist * 2), y = bigbtnrowY, an = 5, w = 40, h = 40} lo.style = osc_styles.bigButtons lo = add_layout("ch_next") lo.geometry = {x = posX + (bigbtndist * 2), y = bigbtnrowY, an = 5, w = 40, h = 40} lo.style = osc_styles.bigButtons lo = add_layout("cy_audio") lo.geometry = {x = posX - pos_offsetX, y = bigbtnrowY, an = 1, w = 70, h = 18} lo.style = osc_styles.smallButtonsL lo = add_layout("cy_sub") lo.geometry = {x = posX - pos_offsetX, y = bigbtnrowY, an = 7, w = 70, h = 18} lo.style = osc_styles.smallButtonsL lo = add_layout("tog_fs") lo.geometry = {x = posX+pos_offsetX - 25, y = bigbtnrowY, an = 4, w = 25, h = 25} lo.style = osc_styles.smallButtonsR lo = add_layout("volume") lo.geometry = {x = posX+pos_offsetX - (25 * 2) - osc_geo.p, y = bigbtnrowY, an = 4, w = 25, h = 25} lo.style = osc_styles.smallButtonsR -- -- Seekbar -- lo = add_layout("seekbar") lo.geometry = {x = posX, y = posY+pos_offsetY-22, an = 2, w = pos_offsetX*2, h = 15} lo.style = osc_styles.timecodes lo.slider.tooltip_style = osc_styles.vidtitle lo.slider.stype = user_opts["seekbarstyle"] lo.slider.rtype = user_opts["seekrangestyle"] -- -- Timecodes + Cache -- local bottomrowY = posY + pos_offsetY - 5 lo = add_layout("tc_left") lo.geometry = {x = posX - pos_offsetX, y = bottomrowY, an = 4, w = 110, h = 18} lo.style = osc_styles.timecodes lo = add_layout("tc_right") lo.geometry = {x = posX + pos_offsetX, y = bottomrowY, an = 6, w = 110, h = 18} lo.style = osc_styles.timecodes lo = add_layout("cache") lo.geometry = {x = posX, y = bottomrowY, an = 5, w = 110, h = 18} lo.style = osc_styles.timecodes end -- slim box layout layouts["slimbox"] = function () local osc_geo = { w = 660, -- width h = 70, -- height r = 10, -- corner-radius } -- make sure the OSC actually fits into the video if osc_param.playresx < (osc_geo.w) then osc_param.playresy = (osc_geo.w) / osc_param.display_aspect osc_param.playresx = osc_param.playresy * osc_param.display_aspect end -- position of the controller according to video aspect and valignment local posX = math.floor(get_align(user_opts.halign, osc_param.playresx, osc_geo.w, 0)) local posY = math.floor(get_align(user_opts.valign, osc_param.playresy, osc_geo.h, 0)) osc_param.areas = {} -- delete areas -- area for active mouse input add_area("input", get_hitbox_coords(posX, posY, 5, osc_geo.w, osc_geo.h)) -- area for show/hide local sh_area_y0, sh_area_y1 if user_opts.valign > 0 then -- deadzone above OSC sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize), posY - (osc_geo.h / 2), 0, 0) sh_area_y1 = osc_param.playresy else -- deadzone below OSC sh_area_y0 = 0 sh_area_y1 = (posY + (osc_geo.h / 2)) + get_align(1 - (2*user_opts.deadzonesize), osc_param.playresy - (posY + (osc_geo.h / 2)), 0, 0) end add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1) local lo local tc_w, ele_h, inner_w = 100, 20, osc_geo.w - 100 -- styles local styles = { box = "{\\rDefault\\blur0\\bord1\\1c&H" .. osc_color_convert(user_opts.background_color) .. "\\3c&HFFFFFF}", timecodes = "{\\1c&H" .. osc_color_convert(user_opts.timecode_color) .. "\\3c&H" .. osc_color_convert(user_opts.time_pos_outline_color) .. "\\fs20\\bord2\\blur1}", tooltip = "{\\1c&H" .. osc_color_convert(user_opts.time_pos_color).. "\\3c&H" .. osc_color_convert(user_opts.time_pos_outline_color) .. "\\fs12\\bord1\\blur0.5}", } new_element("bgbox", "box") lo = add_layout("bgbox") lo.geometry = {x = posX, y = posY - 1, an = 2, w = inner_w, h = ele_h} lo.layer = 10 lo.style = osc_styles.box lo.alpha[1] = user_opts.boxalpha lo.alpha[3] = 0 if user_opts["seekbarstyle"] ~= "bar" then lo.box.radius = osc_geo.r lo.box.hexagon = user_opts["seekbarstyle"] == "diamond" end lo = add_layout("seekbar") lo.geometry = {x = posX, y = posY - 1, an = 2, w = inner_w, h = ele_h} lo.style = osc_styles.timecodes lo.slider.border = 0 lo.slider.gap = 1.5 lo.slider.tooltip_style = styles.tooltip lo.slider.stype = user_opts["seekbarstyle"] lo.slider.rtype = user_opts["seekrangestyle"] lo.slider.adjust_tooltip = false -- -- Timecodes -- lo = add_layout("tc_left") lo.geometry = {x = posX - (inner_w/2) + osc_geo.r, y = posY + 1, an = 7, w = tc_w, h = ele_h} lo.style = styles.timecodes lo.alpha[3] = user_opts.boxalpha lo = add_layout("tc_right") lo.geometry = {x = posX + (inner_w/2) - osc_geo.r, y = posY + 1, an = 9, w = tc_w, h = ele_h} lo.style = styles.timecodes lo.alpha[3] = user_opts.boxalpha -- Cache lo = add_layout("cache") lo.geometry = {x = posX, y = posY + 1, an = 8, w = tc_w, h = ele_h} lo.style = styles.timecodes lo.alpha[3] = user_opts.boxalpha end local function bar_layout(direction) local osc_geo = { x = -2, y = nil, an = (direction < 0) and 7 or 1, w = nil, h = 56, } local padX = 9 local padY = 3 local buttonW = 27 local tcW = (state.tc_ms) and 170 or 110 if user_opts.tcspace >= 50 and user_opts.tcspace <= 200 then -- adjust our hardcoded font size estimation tcW = tcW * user_opts.tcspace / 100 end local tsW = 90 local minW = (buttonW + padX)*5 + (tcW + padX)*4 + (tsW + padX)*2 -- Special topbar handling when window controls are present local padwc_l local padwc_r if direction < 0 or not window_controls_enabled() then padwc_l = 0 padwc_r = 0 elseif window_controls_alignment() == "left" then padwc_l = window_control_box_width padwc_r = 0 else padwc_l = 0 padwc_r = window_control_box_width end if osc_param.display_aspect > 0 and osc_param.playresx < minW then osc_param.playresy = minW / osc_param.display_aspect osc_param.playresx = osc_param.playresy * osc_param.display_aspect end osc_geo.y = direction * (54 + user_opts.barmargin) osc_geo.w = osc_param.playresx + 4 if direction < 0 then osc_geo.y = osc_geo.y + osc_param.playresy end local line1 = osc_geo.y - direction * (9 + padY) local line2 = osc_geo.y - direction * (36 + padY) osc_param.areas = {} add_area("input", get_hitbox_coords(osc_geo.x, osc_geo.y, osc_geo.an, osc_geo.w, osc_geo.h)) local sh_area_y0, sh_area_y1 if direction > 0 then -- deadzone below OSC sh_area_y0 = user_opts.barmargin sh_area_y1 = osc_geo.y + get_align(1 - (2 * user_opts.deadzonesize), osc_param.playresy - osc_geo.y, 0, 0) else -- deadzone above OSC sh_area_y0 = get_align(-1 + (2 * user_opts.deadzonesize), osc_geo.y, 0, 0) sh_area_y1 = osc_param.playresy - user_opts.barmargin end add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1) local lo, geo -- Background bar new_element("bgbox", "box") lo = add_layout("bgbox") lo.geometry = osc_geo lo.layer = 10 lo.style = osc_styles.box lo.alpha[1] = user_opts.boxalpha -- Playlist prev/next geo = { x = osc_geo.x + padX, y = line1, an = 4, w = 18, h = 18 - padY } lo = add_layout("pl_prev") lo.geometry = geo lo.style = osc_styles.topButtonsBar geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("pl_next") lo.geometry = geo lo.style = osc_styles.topButtonsBar local t_l = geo.x + geo.w + padX -- Cache geo = { x = osc_geo.x + osc_geo.w - padX, y = geo.y, an = 6, w = 150, h = geo.h } lo = add_layout("cache") lo.geometry = geo lo.style = osc_styles.vidtitleBar local t_r = geo.x - geo.w - padX*2 -- Title geo = { x = t_l, y = geo.y, an = 4, w = t_r - t_l, h = geo.h } lo = add_layout("title") lo.geometry = geo lo.style = string.format("%s{\\clip(%f,%f,%f,%f)}", osc_styles.vidtitleBar, geo.x, geo.y-geo.h, geo.w, geo.y+geo.h) -- Playback control buttons geo = { x = osc_geo.x + padX + padwc_l, y = line2, an = 4, w = buttonW, h = 36 - padY*2} lo = add_layout("playpause") lo.geometry = geo lo.style = osc_styles.smallButtonsBar geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("ch_prev") lo.geometry = geo lo.style = osc_styles.smallButtonsBar geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("ch_next") lo.geometry = geo lo.style = osc_styles.smallButtonsBar -- Left timecode geo = { x = geo.x + geo.w + padX + tcW, y = geo.y, an = 6, w = tcW, h = geo.h } lo = add_layout("tc_left") lo.geometry = geo lo.style = osc_styles.timecodesBar local sb_l = geo.x + padX -- Fullscreen button geo = { x = osc_geo.x + osc_geo.w - buttonW - padX - padwc_r, y = geo.y, an = 4, w = buttonW, h = geo.h } lo = add_layout("tog_fs") lo.geometry = geo lo.style = osc_styles.smallButtonsBar -- Volume geo = { x = geo.x - geo.w - padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("volume") lo.geometry = geo lo.style = osc_styles.smallButtonsBar -- Track selection buttons geo = { x = geo.x - tsW - padX, y = geo.y, an = geo.an, w = tsW, h = geo.h } lo = add_layout("cy_sub") lo.geometry = geo lo.style = osc_styles.smallButtonsBar geo = { x = geo.x - geo.w - padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("cy_audio") lo.geometry = geo lo.style = osc_styles.smallButtonsBar -- Right timecode geo = { x = geo.x - padX - tcW - 10, y = geo.y, an = geo.an, w = tcW, h = geo.h } lo = add_layout("tc_right") lo.geometry = geo lo.style = osc_styles.timecodesBar local sb_r = geo.x - padX -- Seekbar geo = { x = sb_l, y = geo.y, an = geo.an, w = math.max(0, sb_r - sb_l), h = geo.h } new_element("bgbar1", "box") lo = add_layout("bgbar1") lo.geometry = geo lo.layer = 15 lo.style = osc_styles.timecodesBar lo.alpha[1] = math.min(255, user_opts.boxalpha + (255 - user_opts.boxalpha)*0.8) if user_opts["seekbarstyle"] ~= "bar" then lo.box.radius = geo.h / 2 lo.box.hexagon = user_opts["seekbarstyle"] == "diamond" end lo = add_layout("seekbar") lo.geometry = geo lo.style = osc_styles.timecodesBar lo.slider.border = 0 lo.slider.gap = 2 lo.slider.tooltip_style = osc_styles.timePosBar lo.slider.tooltip_an = 5 lo.slider.stype = user_opts["seekbarstyle"] lo.slider.rtype = user_opts["seekrangestyle"] if direction < 0 then osc_param.video_margins.b = osc_geo.h / osc_param.playresy else osc_param.video_margins.t = osc_geo.h / osc_param.playresy end end layouts["bottombar"] = function() bar_layout(-1) end layouts["topbar"] = function() bar_layout(1) end local function osc_init() msg.debug("osc_init") -- set canvas resolution according to display aspect and scaling setting local baseResY = 720 local _, display_h, display_aspect = mp.get_osd_size() local scale if state.fullscreen then scale = user_opts.scalefullscreen else scale = user_opts.scalewindowed end local scale_with_video if user_opts.vidscale == "auto" then scale_with_video = mp.get_property_native("osd-scale-by-window") else scale_with_video = user_opts.vidscale == "yes" end if scale_with_video then osc_param.unscaled_y = baseResY else osc_param.unscaled_y = display_h end osc_param.playresy = osc_param.unscaled_y / scale if display_aspect > 0 then osc_param.display_aspect = display_aspect end osc_param.playresx = osc_param.playresy * osc_param.display_aspect -- stop seeking with the slider to prevent skipping files state.active_element = nil osc_param.video_margins = {l = 0, r = 0, t = 0, b = 0} elements = {} -- some often needed stuff local pl_count = mp.get_property_number("playlist-count", 0) local have_pl = (pl_count > 1) local pl_pos = mp.get_property_number("playlist-pos", 0) + 1 local have_ch = (mp.get_property_number("chapters", 0) > 0) local loop = mp.get_property("loop-playlist", "no") local ne -- title ne = new_element("title", "button") ne.content = function () local title = state.forced_title or mp.command_native({"expand-text", user_opts.title}) title = title:gsub("\n", " ") return title ~= "" and mp.command_native({"escape-ass", title}) or "mpv" end ne.eventresponder["mbtn_left_up"] = function () local title = mp.get_property_osd("media-title") if have_pl then title = string.format("[%d/%d] %s", countone(pl_pos - 1), pl_count, title) end show_message(title) end ne.eventresponder["mbtn_right_up"] = function () show_message(mp.get_property_osd("filename")) end -- playlist buttons -- prev ne = new_element("pl_prev", "button") ne.content = "\238\132\144" ne.enabled = (pl_pos > 1) or (loop ~= "no") ne.eventresponder["mbtn_left_up"] = function () mp.commandv("playlist-prev", "weak") if user_opts.playlist_osd then show_message(get_playlist(), 3) end end ne.eventresponder["shift+mbtn_left_up"] = function () show_message(get_playlist(), 3) end ne.eventresponder["mbtn_right_up"] = function () show_message(get_playlist(), 3) end --next ne = new_element("pl_next", "button") ne.content = "\238\132\129" ne.enabled = (have_pl and (pl_pos < pl_count)) or (loop ~= "no") ne.eventresponder["mbtn_left_up"] = function () mp.commandv("playlist-next", "weak") if user_opts.playlist_osd then show_message(get_playlist(), 3) end end ne.eventresponder["shift+mbtn_left_up"] = function () show_message(get_playlist(), 3) end ne.eventresponder["mbtn_right_up"] = function () show_message(get_playlist(), 3) end -- big buttons --playpause ne = new_element("playpause", "button") ne.content = function () if mp.get_property("pause") == "yes" then if mp.get_property("play-direction", "forward") ~= "backward" then return ("\238\132\129") else return ("\238\132\144") end else return ("\238\128\130") end end ne.eventresponder["mbtn_left_up"] = function () mp.commandv("cycle", "pause") end --skipback ne = new_element("skipback", "button") ne.softrepeat = true ne.content = "\238\128\132" ne.eventresponder["mbtn_left_down"] = function () mp.commandv("seek", -5) end ne.eventresponder["shift+mbtn_left_down"] = function () mp.commandv("frame-back-step") end ne.eventresponder["mbtn_right_down"] = function () mp.commandv("seek", -30) end --skipfrwd ne = new_element("skipfrwd", "button") ne.softrepeat = true ne.content = "\238\128\133" ne.eventresponder["mbtn_left_down"] = function () mp.commandv("seek", 10) end ne.eventresponder["shift+mbtn_left_down"] = function () mp.commandv("frame-step") end ne.eventresponder["mbtn_right_down"] = function () mp.commandv("seek", 60) end --ch_prev ne = new_element("ch_prev", "button") ne.enabled = have_ch ne.content = "\238\132\132" ne.eventresponder["mbtn_left_up"] = function () mp.commandv("add", "chapter", -1) if user_opts.chapters_osd then show_message(get_chapterlist(), 3) end end ne.eventresponder["shift+mbtn_left_up"] = function () show_message(get_chapterlist(), 3) end ne.eventresponder["mbtn_right_up"] = function () show_message(get_chapterlist(), 3) end --ch_next ne = new_element("ch_next", "button") ne.enabled = have_ch ne.content = "\238\132\133" ne.eventresponder["mbtn_left_up"] = function () mp.commandv("add", "chapter", 1) if user_opts.chapters_osd then show_message(get_chapterlist(), 3) end end ne.eventresponder["shift+mbtn_left_up"] = function () show_message(get_chapterlist(), 3) end ne.eventresponder["mbtn_right_up"] = function () show_message(get_chapterlist(), 3) end -- update_tracklist() --cy_audio ne = new_element("cy_audio", "button") ne.enabled = (#tracks_osc.audio > 0) ne.content = function () local aid = "–" if get_track("audio") ~= 0 then aid = get_track("audio") end return ("\238\132\134" .. osc_styles.smallButtonsLlabel .. " " .. aid .. "/" .. #tracks_osc.audio) end ne.eventresponder["mbtn_left_up"] = function () set_track("audio", 1) end ne.eventresponder["mbtn_right_up"] = function () set_track("audio", -1) end ne.eventresponder["shift+mbtn_left_down"] = function () show_message(get_tracklist("audio"), 2) end if user_opts.scrollcontrols then ne.eventresponder["wheel_down_press"] = function () set_track("audio", 1) end ne.eventresponder["wheel_up_press"] = function () set_track("audio", -1) end end --cy_sub ne = new_element("cy_sub", "button") ne.enabled = (#tracks_osc.sub > 0) ne.content = function () local sid = "–" if get_track("sub") ~= 0 then sid = get_track("sub") end return ("\238\132\135" .. osc_styles.smallButtonsLlabel .. " " .. sid .. "/" .. #tracks_osc.sub) end ne.eventresponder["mbtn_left_up"] = function () set_track("sub", 1) end ne.eventresponder["mbtn_right_up"] = function () set_track("sub", -1) end ne.eventresponder["shift+mbtn_left_down"] = function () show_message(get_tracklist("sub"), 2) end if user_opts.scrollcontrols then ne.eventresponder["wheel_down_press"] = function () set_track("sub", 1) end ne.eventresponder["wheel_up_press"] = function () set_track("sub", -1) end end --tog_fs ne = new_element("tog_fs", "button") ne.content = function () if state.fullscreen then return ("\238\132\137") else return ("\238\132\136") end end ne.eventresponder["mbtn_left_up"] = function () mp.commandv("cycle", "fullscreen") end --seekbar ne = new_element("seekbar", "slider") ne.enabled = mp.get_property("percent-pos") ~= nil state.slider_element = ne.enabled and ne or nil -- used for forced_title ne.slider.markerF = function () local duration = mp.get_property_number("duration") if duration ~= nil then local chapters = mp.get_property_native("chapter-list", {}) local markers = {} for n = 1, #chapters do markers[n] = (chapters[n].time / duration * 100) end return markers else return {} end end ne.slider.posF = function () return mp.get_property_number("percent-pos") end ne.slider.tooltipF = function (pos) local duration = mp.get_property_number("duration") if duration ~= nil and pos ~= nil then local possec = duration * (pos / 100) return mp.format_time(possec) else return "" end end ne.slider.seekRangesF = function() if user_opts.seekrangestyle == "none" then return nil end local cache_state = state.cache_state if not cache_state then return nil end local duration = mp.get_property_number("duration") if duration == nil or duration <= 0 then return nil end local ranges = cache_state["seekable-ranges"] if #ranges == 0 then return nil end local nranges = {} for _, range in pairs(ranges) do nranges[#nranges + 1] = { ["start"] = 100 * range["start"] / duration, ["end"] = 100 * range["end"] / duration, } end return nranges end ne.eventresponder["mouse_move"] = --keyframe seeking when mouse is dragged function (element) -- mouse move events may pile up during seeking and may still get -- sent when the user is done seeking, so we need to throw away -- identical seeks local seekto = get_slider_value(element) if element.state.lastseek == nil or element.state.lastseek ~= seekto then local flags = "absolute-percent" if not user_opts.seekbarkeyframes then flags = flags .. "+exact" end mp.commandv("seek", seekto, flags) element.state.lastseek = seekto end end ne.eventresponder["mbtn_left_down"] = --exact seeks on single clicks function (element) mp.commandv("seek", get_slider_value(element), "absolute-percent+exact") end ne.eventresponder["reset"] = function (element) element.state.lastseek = nil end if user_opts.scrollcontrols then ne.eventresponder["wheel_up_press"] = function () mp.commandv("osd-auto", "seek", 10) end ne.eventresponder["wheel_down_press"] = function () mp.commandv("osd-auto", "seek", -10) end end -- tc_left (current pos) ne = new_element("tc_left", "button") ne.content = function () if state.tc_ms then return (mp.get_property_osd("playback-time/full")) else return (mp.get_property_osd("playback-time")) end end ne.eventresponder["mbtn_left_up"] = function () state.tc_ms = not state.tc_ms request_init() end -- tc_right (total/remaining time) ne = new_element("tc_right", "button") ne.visible = (mp.get_property_number("duration", 0) > 0) ne.content = function () if state.rightTC_trem then local minus = user_opts.unicodeminus and UNICODE_MINUS or "-" local property = user_opts.remaining_playtime and "playtime-remaining" or "time-remaining" if state.tc_ms then return (minus..mp.get_property_osd(property .. "/full")) else return (minus..mp.get_property_osd(property)) end else if state.tc_ms then return (mp.get_property_osd("duration/full")) else return (mp.get_property_osd("duration")) end end end ne.eventresponder["mbtn_left_up"] = function () state.rightTC_trem = not state.rightTC_trem end -- cache ne = new_element("cache", "button") ne.content = function () local cache_state = state.cache_state if not (cache_state and cache_state["seekable-ranges"] and #cache_state["seekable-ranges"] > 0) then -- probably not a network stream return "" end local dmx_cache = cache_state and cache_state["cache-duration"] local thresh = math.min(state.dmx_cache * 0.05, 5) -- 5% or 5s if dmx_cache and math.abs(dmx_cache - state.dmx_cache) >= thresh then state.dmx_cache = dmx_cache else dmx_cache = state.dmx_cache end local min = math.floor(dmx_cache / 60) local sec = math.floor(dmx_cache % 60) -- don't round e.g. 59.9 to 60 return "Cache: " .. (min > 0 and string.format("%sm%02.0fs", min, sec) or string.format("%3.0fs", sec)) end -- volume ne = new_element("volume", "button") ne.content = function() local volume = mp.get_property_number("volume", 0) local mute = mp.get_property_native("mute") local volicon = {"\238\132\139", "\238\132\140", "\238\132\141", "\238\132\142"} if volume == 0 or mute then return "\238\132\138" else return volicon[math.min(4,math.ceil(volume / (100/3)))] end end ne.eventresponder["mbtn_left_up"] = function () mp.commandv("cycle", "mute") end if user_opts.scrollcontrols then ne.eventresponder["wheel_up_press"] = function () mp.commandv("osd-auto", "add", "volume", 5) end ne.eventresponder["wheel_down_press"] = function () mp.commandv("osd-auto", "add", "volume", -5) end end -- load layout layouts[user_opts.layout]() -- load window controls if window_controls_enabled() then window_controls(user_opts.layout == "topbar") end --do something with the elements prepare_elements() update_margins() end local function osc_visible(visible) if state.osc_visible ~= visible then state.osc_visible = visible update_margins() end request_tick() end local function show_osc() -- show when disabled can happen (e.g. mouse_move) due to async/delayed unbinding if not state.enabled then return end msg.trace("show_osc") --remember last time of invocation (mouse move) state.showtime = mp.get_time() osc_visible(true) if user_opts.fadeduration > 0 then state.anitype = nil end end local function hide_osc() msg.trace("hide_osc") if not state.enabled then -- typically hide happens at render() from tick(), but now tick() is -- no-op and won't render again to remove the osc, so do that manually. state.osc_visible = false render_wipe() elseif user_opts.fadeduration > 0 then if state.osc_visible then state.anitype = "out" request_tick() end else osc_visible(false) end end local function pause_state(_, enabled) state.paused = enabled request_tick() end local function cache_state(_, st) state.cache_state = st request_tick() end local function mouse_leave() if get_hidetimeout() >= 0 and get_touchtimeout() <= 0 then hide_osc() end -- reset mouse position state.last_mouseX, state.last_mouseY = nil, nil state.mouse_in_window = false end local function handle_touch() --remember last time of invocation (touch event) state.touchtime = mp.get_time() end -- -- Eventhandling -- local function element_has_action(element, action) return element and element.eventresponder and element.eventresponder[action] end local function process_event(source, what) local action = string.format("%s%s", source, what and ("_" .. what) or "") if what == "down" or what == "press" then for n = 1, #elements do if mouse_hit(elements[n]) and elements[n].eventresponder and (elements[n].eventresponder[source .. "_up"] or elements[n].eventresponder[action]) then if what == "down" then state.active_element = n state.active_event_source = source end -- fire the down or press event if the element has one if element_has_action(elements[n], action) then elements[n].eventresponder[action](elements[n]) end end end elseif what == "up" then if elements[state.active_element] then local n = state.active_element if n == 0 then --luacheck: ignore 542 --click on background (does not work) elseif element_has_action(elements[n], action) and mouse_hit(elements[n]) then elements[n].eventresponder[action](elements[n]) end --reset active element if element_has_action(elements[n], "reset") then elements[n].eventresponder["reset"](elements[n]) end end state.active_element = nil state.mouse_down_counter = 0 elseif source == "mouse_move" then state.mouse_in_window = true local mouseX, mouseY = get_virt_mouse_pos() if user_opts.minmousemove == 0 or ((state.last_mouseX ~= nil and state.last_mouseY ~= nil) and ((math.abs(mouseX - state.last_mouseX) >= user_opts.minmousemove) or (math.abs(mouseY - state.last_mouseY) >= user_opts.minmousemove) ) ) then show_osc() end state.last_mouseX, state.last_mouseY = mouseX, mouseY local n = state.active_element if element_has_action(elements[n], action) then elements[n].eventresponder[action](elements[n]) end end -- ensure rendering after any (mouse) event - icons could change etc request_tick() end local function do_enable_keybindings() if state.enabled then if not state.showhide_enabled then mp.enable_key_bindings("showhide", "allow-vo-dragging+allow-hide-cursor") mp.enable_key_bindings("showhide_wc", "allow-vo-dragging+allow-hide-cursor") end state.showhide_enabled = true end end local function enable_osc(enable) state.enabled = enable if enable then do_enable_keybindings() else hide_osc() -- acts immediately when state.enabled == false if state.showhide_enabled then mp.disable_key_bindings("showhide") mp.disable_key_bindings("showhide_wc") end state.showhide_enabled = false end end local function render() msg.trace("rendering") local current_screen_sizeX, current_screen_sizeY = mp.get_osd_size() local mouseX, mouseY = get_virt_mouse_pos() local now = mp.get_time() -- check if display changed, if so request reinit if state.screen_sizeX ~= current_screen_sizeX or state.screen_sizeY ~= current_screen_sizeY then request_init_resize() state.screen_sizeX = current_screen_sizeX state.screen_sizeY = current_screen_sizeY end -- init management if state.active_element then -- mouse is held down on some element - keep ticking and ignore initReq -- till it's released, or else the mouse-up (click) will misbehave or -- get ignored. that's because osc_init() recreates the osc elements, -- but mouse handling depends on the elements staying unmodified -- between mouse-down and mouse-up (using the index active_element). request_tick() elseif state.initREQ then osc_init() state.initREQ = false -- store initial mouse position if (state.last_mouseX == nil or state.last_mouseY == nil) and not (mouseX == nil or mouseY == nil) then state.last_mouseX, state.last_mouseY = mouseX, mouseY end end -- fade animation if state.anitype ~= nil then if state.anistart == nil then state.anistart = now end if now < state.anistart + (user_opts.fadeduration / 1000) then if state.anitype == "in" then --fade in osc_visible(true) state.animation = scale_value(state.anistart, (state.anistart + (user_opts.fadeduration / 1000)), 255, 0, now) elseif state.anitype == "out" then --fade out state.animation = scale_value(state.anistart, (state.anistart + (user_opts.fadeduration / 1000)), 0, 255, now) end else if state.anitype == "out" then osc_visible(false) end kill_animation() end else kill_animation() end --mouse show/hide area for _, cords in pairs(osc_param.areas["showhide"]) do set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "showhide") end if osc_param.areas["showhide_wc"] then for _, cords in pairs(osc_param.areas["showhide_wc"]) do set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "showhide_wc") end else set_virt_mouse_area(0, 0, 0, 0, "showhide_wc") end do_enable_keybindings() --mouse input area local mouse_over_osc = false for _,cords in ipairs(osc_param.areas["input"]) do if state.osc_visible then -- activate only when OSC is actually visible set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "input") end if state.osc_visible ~= state.input_enabled then if state.osc_visible then mp.enable_key_bindings("input") else mp.disable_key_bindings("input") end state.input_enabled = state.osc_visible end if mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2) then mouse_over_osc = true end end if osc_param.areas["window-controls"] then for _,cords in ipairs(osc_param.areas["window-controls"]) do if state.osc_visible then -- activate only when OSC is actually visible set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "window-controls") end if state.osc_visible ~= state.windowcontrols_buttons then if state.osc_visible then mp.enable_key_bindings("window-controls") else mp.disable_key_bindings("window-controls") end state.windowcontrols_buttons = state.osc_visible end if mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2) then mouse_over_osc = true end end end if osc_param.areas["window-controls-title"] then for _,cords in ipairs(osc_param.areas["window-controls-title"]) do if state.osc_visible then -- activate only when OSC is actually visible set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "window-controls-title") end if state.osc_visible ~= state.windowcontrols_title then if state.osc_visible then mp.enable_key_bindings("window-controls-title", "allow-vo-dragging") else mp.disable_key_bindings("window-controls-title", "allow-vo-dragging") end state.windowcontrols_title = state.osc_visible end if mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2) then mouse_over_osc = true end end end -- autohide if state.showtime ~= nil and get_hidetimeout() >= 0 then local timeout = state.showtime + (get_hidetimeout() / 1000) - now if timeout <= 0 and get_touchtimeout() <= 0 then if state.active_element == nil and not mouse_over_osc then hide_osc() end else -- the timer is only used to recheck the state and to possibly run -- the code above again if not state.hide_timer then state.hide_timer = mp.add_timeout(0, tick) end state.hide_timer.timeout = timeout -- re-arm state.hide_timer:kill() state.hide_timer:resume() end end -- actual rendering local ass = assdraw.ass_new() -- Messages render_message(ass) -- actual OSC if state.osc_visible then render_elements(ass) end -- submit set_osd(osc_param.playresy * osc_param.display_aspect, osc_param.playresy, ass.text, 1000) end -- called by mpv on every frame tick = function() if state.marginsREQ == true then update_margins() state.marginsREQ = false end if not state.enabled then return end if state.idle then -- render idle message msg.trace("idle message") local _, _, display_aspect = mp.get_osd_size() if display_aspect == 0 then return end local display_h = 360 local display_w = display_h * display_aspect -- logo is rendered at 2^(6-1) = 32 times resolution with size 1800x1800 local icon_x, icon_y = (display_w - 1800 / 32) / 2, 140 local line_prefix = ("{\\rDefault\\an7\\1a&H00&\\bord0\\shad0\\pos(%f,%f)}"):format(icon_x, icon_y) local ass = assdraw.ass_new() -- mpv logo if user_opts.idlescreen then for _, line in ipairs(logo_lines) do ass:new_event() ass:append(line_prefix .. line) end end -- Santa hat if is_december and user_opts.idlescreen and not user_opts.greenandgrumpy then for _, line in ipairs(santa_hat_lines) do ass:new_event() ass:append(line_prefix .. line) end end if user_opts.idlescreen then ass:new_event() ass:pos(display_w / 2, icon_y + 65) ass:an(8) ass:append("Drop files or URLs to play here.") end set_osd(display_w, display_h, ass.text, -1000) if state.showhide_enabled then mp.disable_key_bindings("showhide") mp.disable_key_bindings("showhide_wc") state.showhide_enabled = false end elseif state.fullscreen and user_opts.showfullscreen or (not state.fullscreen and user_opts.showwindowed) then -- render the OSC render() else -- Flush OSD render_wipe() end state.tick_last_time = mp.get_time() if state.anitype ~= nil then -- state.anistart can be nil - animation should now start, or it can -- be a timestamp when it started. state.idle has no animation. if not state.idle and (not state.anistart or mp.get_time() < 1 + state.anistart + user_opts.fadeduration/1000) then -- animating or starting, or still within 1s past the deadline request_tick() else kill_animation() end end end local function shutdown() reset_margins() mp.del_property("user-data/osc") end -- duration is observed for the sole purpose of updating chapter markers -- positions. live streams with chapters are very rare, and the update is also -- expensive (with request_init), so it's only observed when we have chapters -- and the user didn't disable the livemarkers option (update_duration_watch). local function on_duration() request_init() end local duration_watched = false local function update_duration_watch() local want_watch = user_opts.livemarkers and (mp.get_property_number("chapters", 0) or 0) > 0 and true or false -- ensure it's a boolean if want_watch ~= duration_watched then if want_watch then mp.observe_property("duration", "native", on_duration) else mp.unobserve_property(on_duration) end duration_watched = want_watch end end local function set_tick_delay(_, display_fps) -- may be nil if unavailable or 0 fps is reported if not display_fps or not user_opts.tick_delay_follow_display_fps then tick_delay = user_opts.tick_delay return end tick_delay = 1 / display_fps end mp.register_event("shutdown", shutdown) mp.register_event("start-file", request_init) mp.observe_property("track-list", "native", request_init) mp.observe_property("playlist", "native", request_init) mp.observe_property("chapter-list", "native", function(_, list) list = list or {} -- safety, shouldn't return nil table.sort(list, function(a, b) return a.time < b.time end) state.chapter_list = list update_duration_watch() request_init() end) mp.register_script_message("osc-message", show_message) mp.register_script_message("osc-chapterlist", function(dur) show_message(get_chapterlist(), dur) end) mp.register_script_message("osc-playlist", function(dur) show_message(get_playlist(), dur) end) mp.register_script_message("osc-tracklist", function(dur) local message = {} for k in pairs(nicetypes) do table.insert(message, get_tracklist(k)) end show_message(table.concat(message, '\n\n'), dur) end) mp.observe_property("fullscreen", "bool", function(_, val) state.fullscreen = val state.marginsREQ = true request_init_resize() end) mp.observe_property("border", "bool", function(_, val) state.border = val request_init_resize() end) mp.observe_property("title-bar", "bool", function(_, val) state.title_bar = val request_init_resize() end) mp.observe_property("window-maximized", "bool", function(_, val) state.maximized = val request_init_resize() end) mp.observe_property("idle-active", "bool", function(_, val) state.idle = val request_tick() end) mp.observe_property("display-fps", "number", set_tick_delay) mp.observe_property("pause", "bool", pause_state) mp.observe_property("demuxer-cache-state", "native", cache_state) mp.observe_property("vo-configured", "bool", request_tick) mp.observe_property("playback-time", "number", request_tick) mp.observe_property("osd-dimensions", "native", function() -- (we could use the value instead of re-querying it all the time, but then -- we might have to worry about property update ordering) request_init_resize() end) mp.observe_property('osd-scale-by-window', 'native', request_init_resize) mp.observe_property('touch-pos', 'native', handle_touch) -- mouse show/hide bindings mp.set_key_bindings({ {"mouse_move", function() process_event("mouse_move", nil) end}, {"mouse_leave", mouse_leave}, }, "showhide", "force") mp.set_key_bindings({ {"mouse_move", function() process_event("mouse_move", nil) end}, {"mouse_leave", mouse_leave}, }, "showhide_wc", "force") do_enable_keybindings() --mouse input bindings mp.set_key_bindings({ {"mbtn_left", function() process_event("mbtn_left", "up") end, function() process_event("mbtn_left", "down") end}, {"shift+mbtn_left", function() process_event("shift+mbtn_left", "up") end, function() process_event("shift+mbtn_left", "down") end}, {"mbtn_right", function() process_event("mbtn_right", "up") end, function() process_event("mbtn_right", "down") end}, -- alias to shift_mbtn_left for single-handed mouse use {"mbtn_mid", function() process_event("shift+mbtn_left", "up") end, function() process_event("shift+mbtn_left", "down") end}, {"wheel_up", function() process_event("wheel_up", "press") end}, {"wheel_down", function() process_event("wheel_down", "press") end}, {"mbtn_left_dbl", "ignore"}, {"shift+mbtn_left_dbl", "ignore"}, {"mbtn_right_dbl", "ignore"}, }, "input", "force") mp.enable_key_bindings("input") mp.set_key_bindings({ {"mbtn_left", function() process_event("mbtn_left", "up") end, function() process_event("mbtn_left", "down") end}, }, "window-controls", "force") mp.enable_key_bindings("window-controls") local function always_on(val) if state.enabled then if val then show_osc() else hide_osc() end end end -- mode can be auto/always/never/cycle -- the modes only affect internal variables and not stored on its own. local function visibility_mode(mode, no_osd) if mode == "cycle" then if not state.enabled then mode = "auto" elseif user_opts.visibility ~= "always" then mode = "always" else mode = "never" end end if mode == "auto" then always_on(false) enable_osc(true) elseif mode == "always" then enable_osc(true) always_on(true) elseif mode == "never" then enable_osc(false) else msg.warn("Ignoring unknown visibility mode '" .. mode .. "'") return end user_opts.visibility = mode mp.set_property_native("user-data/osc/visibility", mode) if not no_osd and tonumber(mp.get_property("osd-level")) >= 1 then mp.osd_message("OSC visibility: " .. mode) end -- Reset the input state on a mode change. The input state will be -- recalculated on the next render cycle, except in 'never' mode where it -- will just stay disabled. mp.disable_key_bindings("input") mp.disable_key_bindings("window-controls") state.input_enabled = false update_margins() request_tick() end local function idlescreen_visibility(mode, no_osd) if mode == "cycle" then if user_opts.idlescreen then mode = "no" else mode = "yes" end end if mode == "yes" then user_opts.idlescreen = true else user_opts.idlescreen = false end mp.set_property_native("user-data/osc/idlescreen", user_opts.idlescreen) if not no_osd and tonumber(mp.get_property("osd-level")) >= 1 then mp.osd_message("OSC logo visibility: " .. tostring(mode)) end request_tick() end mp.register_script_message("osc-visibility", visibility_mode) mp.register_script_message("osc-show", show_osc) mp.add_key_binding(nil, "visibility", function() visibility_mode("cycle") end) mp.register_script_message("osc-idlescreen", idlescreen_visibility) -- Validate string type user options local function validate_user_opts() if layouts[user_opts.layout] == nil then msg.warn("Invalid setting \""..user_opts.layout.."\" for layout") user_opts.layout = "bottombar" end if user_opts.seekbarstyle ~= "bar" and user_opts.seekbarstyle ~= "diamond" and user_opts.seekbarstyle ~= "knob" then msg.warn("Invalid setting \"" .. user_opts.seekbarstyle .. "\" for seekbarstyle") user_opts.seekbarstyle = "bar" end if user_opts.seekrangestyle ~= "bar" and user_opts.seekrangestyle ~= "line" and user_opts.seekrangestyle ~= "slider" and user_opts.seekrangestyle ~= "inverted" and user_opts.seekrangestyle ~= "none" then msg.warn("Invalid setting \"" .. user_opts.seekrangestyle .. "\" for seekrangestyle") user_opts.seekrangestyle = "inverted" end if user_opts.seekrangestyle == "slider" and user_opts.seekbarstyle == "bar" then msg.warn( "Using \"slider\" seekrangestyle together with \"bar\" seekbarstyle is not supported") user_opts.seekrangestyle = "inverted" end if user_opts.windowcontrols ~= "auto" and user_opts.windowcontrols ~= "yes" and user_opts.windowcontrols ~= "no" then msg.warn("windowcontrols cannot be \"" .. user_opts.windowcontrols .. "\". Ignoring.") user_opts.windowcontrols = "auto" end if user_opts.windowcontrols_alignment ~= "right" and user_opts.windowcontrols_alignment ~= "left" then msg.warn("windowcontrols_alignment cannot be \"" .. user_opts.windowcontrols_alignment .. "\". Ignoring.") user_opts.windowcontrols_alignment = "right" end local colors = { user_opts.background_color, user_opts.top_buttons_color, user_opts.small_buttonsL_color, user_opts.small_buttonsR_color, user_opts.buttons_color, user_opts.title_color, user_opts.timecode_color, user_opts.time_pos_color, user_opts.held_element_color, user_opts.time_pos_outline_color, } for _, color in pairs(colors) do if color:find("^#%x%x%x%x%x%x$") == nil then msg.warn("'" .. color .. "' is not a valid color") end end end -- read options from config and command-line opt.read_options(user_opts, "osc", function(changed) validate_user_opts() set_osc_styles() set_time_styles(changed.timetotal, changed.timems) if changed.tick_delay or changed.tick_delay_follow_display_fps then set_tick_delay("display_fps", mp.get_property_number("display_fps")) end request_tick() visibility_mode(user_opts.visibility, true) update_duration_watch() request_init() end) validate_user_opts() set_osc_styles() set_time_styles(true, true) set_tick_delay("display_fps", mp.get_property_number("display_fps")) visibility_mode(user_opts.visibility, true) update_duration_watch() set_virt_mouse_area(0, 0, 0, 0, "input") set_virt_mouse_area(0, 0, 0, 0, "window-controls") set_virt_mouse_area(0, 0, 0, 0, "window-controls-title") local utils = require 'mp.utils' local msg = require 'mp.msg' local options = require 'mp.options' local o = { exclude = "", try_ytdl_first = false, use_manifests = false, all_formats = false, force_all_formats = true, thumbnails = "none", ytdl_path = "", } local ytdl = { path = "", paths_to_search = {"yt-dlp", "yt-dlp_x86", "youtube-dl"}, searched = false, blacklisted = {} } options.read_options(o, nil, function() ytdl.blacklisted = {} -- reparse o.exclude next time ytdl.searched = false end) local chapter_list = {} local playlist_cookies = {} local function Set (t) local set = {} for _, v in pairs(t) do set[v] = true end return set end -- ?: surrogate (keep in mind that there is no lazy evaluation) local function iif(cond, if_true, if_false) if cond then return if_true end return if_false end -- youtube-dl JSON name to mpv tag name local tag_list = { ["artist"] = "artist", ["album"] = "album", ["album_artist"] = "album_artist", ["composer"] = "composer", ["upload_date"] = "date", ["genre"] = "genre", ["series"] = "series", ["track"] = "title", ["track_number"] = "track", ["uploader"] = "uploader", ["channel_url"] = "channel_url", -- These tags are not displayed by default, but can be shown with -- --display-tags ["playlist"] = "ytdl_playlist", ["playlist_index"] = "ytdl_playlist_index", ["playlist_title"] = "ytdl_playlist_title", ["playlist_id"] = "ytdl_playlist_id", ["chapter"] = "ytdl_chapter", ["season"] = "ytdl_season", ["episode"] = "ytdl_episode", ["is_live"] = "ytdl_is_live", ["release_year"] = "ytdl_release_year", ["description"] = "ytdl_description", -- "title" is handled by force-media-title -- tags don't work with all_formats=yes } local safe_protos = Set { "http", "https", "ftp", "ftps", "rtmp", "rtmps", "rtmpe", "rtmpt", "rtmpts", "rtmpte", "data" } -- For some sites, youtube-dl returns the audio codec (?) only in the "ext" field. local ext_map = { ["mp3"] = "mp3", ["opus"] = "opus", } local codec_map = { -- src pattern = mpv codec ["vtt"] = "webvtt", ["opus"] = "opus", ["vp9"] = "vp9", ["avc1%..*"] = "h264", ["av01%..*"] = "av1", ["mp4a%..*"] = "aac", } -- Codec name as reported by youtube-dl mapped to mpv internal codec names. -- Fun fact: mpv will not really use the codec, but will still try to initialize -- the codec on track selection (just to scrap it), meaning it's only a hint, -- but one that may make initialization fail. On the other hand, if the codec -- is valid but completely different from the actual media, nothing bad happens. local function map_codec_to_mpv(codec) if codec == nil then return nil end for k, v in pairs(codec_map) do local s, e = codec:find(k) if s == 1 and e == #codec then return v end end return nil end local function platform_is_windows() return mp.get_property_native("platform") == "windows" end local function exec(args) return mp.command_native({ name = "subprocess", args = args, capture_stdout = true, capture_stderr = true, }) end -- return true if it was explicitly set on the command line local function option_was_set(name) return mp.get_property_bool("option-info/" ..name.. "/set-from-commandline", false) end -- return true if the option was set locally local function option_was_set_locally(name) return mp.get_property_bool("option-info/" ..name.. "/set-locally", false) end -- youtube-dl may set special http headers for some sites (user-agent, cookies) local function set_http_headers(http_headers) if not http_headers then return end local headers = {} local useragent = http_headers["User-Agent"] if useragent and not option_was_set("user-agent") then mp.set_property("file-local-options/user-agent", useragent) end local additional_fields = {"Cookie", "Referer", "X-Forwarded-For"} for _, item in pairs(additional_fields) do local field_value = http_headers[item] if field_value then headers[#headers + 1] = item .. ": " .. field_value end end if #headers > 0 and not option_was_set("http-header-fields") then mp.set_property_native("file-local-options/http-header-fields", headers) end end local special_cookie_field_names = Set { "expires", "max-age", "domain", "path" } -- parse single-line Set-Cookie syntax local function parse_cookies(cookies_line) if not cookies_line then return {} end local cookies = {} local cookie = {} for stem in cookies_line:gmatch('[^;]+') do stem = stem:gsub("^%s*(.-)%s*$", "%1") local name, value = stem:match('^(.-)=(.+)$') if name and name ~= "" and value then local cmp_name = name:lower() if special_cookie_field_names[cmp_name] then cookie[cmp_name] = value else if cookie.name and cookie.value then table.insert(cookies, cookie) end cookie = { name = name, value = value, } end end end if cookie.name and cookie.value then local cookie_key = cookie.domain .. ":" .. cookie.name cookies[cookie_key] = cookie end return cookies end -- serialize cookies for avformat local function serialize_cookies_for_avformat(cookies) local result = '' for _, cookie in pairs(cookies) do local cookie_str = ('%s=%s; '):format(cookie.name, cookie.value:gsub('^"(.+)"$', '%1')) for k, v in pairs(cookie) do if k ~= "name" and k ~= "value" then cookie_str = cookie_str .. ('%s=%s; '):format(k, v) end end result = result .. cookie_str .. '\r\n' end return result end -- set file-local cookies, preserving existing ones local function set_cookies(cookies) if not cookies or cookies == "" then return end local option_key = "file-local-options/stream-lavf-o" local stream_opts = mp.get_property_native(option_key, {}) local existing_cookies = parse_cookies(stream_opts["cookies"]) local new_cookies = parse_cookies(cookies) for cookie_key, cookie in pairs(new_cookies) do if not existing_cookies[cookie_key] then existing_cookies[cookie_key] = cookie end end stream_opts["cookies"] = serialize_cookies_for_avformat(existing_cookies) mp.set_property_native(option_key, stream_opts) end local function append_libav_opt(props, name, value) if not props then props = {} end if name and value and not props[name] then props[name] = value end return props end local function edl_escape(url) return "%" .. string.len(url) .. "%" .. url end local function url_is_safe(url) local proto = type(url) == "string" and url:match("^(%a[%w+.-]*):") or nil local safe = proto and safe_protos[proto] if not safe then msg.error(("Ignoring potentially unsafe url: '%s'"):format(url)) end return safe end local function time_to_secs(time_string) local ret local a, b, c = time_string:match("(%d+):(%d%d?):(%d%d)") if a ~= nil then ret = (a*3600 + b*60 + c) else a, b = time_string:match("(%d%d?):(%d%d)") if a ~= nil then ret = (a*60 + b) end end return ret end local function extract_chapters(data, video_length) local ret = {} for line in data:gmatch("[^\r\n]+") do local time = time_to_secs(line) if time and (time < video_length) then table.insert(ret, {time = time, title = line}) end end table.sort(ret, function(a, b) return a.time < b.time end) return ret end local function is_blacklisted(url) if o.exclude == "" then return false end if #ytdl.blacklisted == 0 then for match in o.exclude:gmatch('%|?([^|]+)') do ytdl.blacklisted[#ytdl.blacklisted + 1] = match end end if #ytdl.blacklisted > 0 then url = url:match('https?://(.+)') for _, exclude in ipairs(ytdl.blacklisted) do if url:match(exclude) then msg.verbose('URL matches excluded substring. Skipping.') return true end end end return false end local function parse_yt_playlist(url, json) -- return 0-based index to use with --playlist-start if not json.extractor or (json.extractor ~= "youtube:tab" and json.extractor ~= "youtube:playlist") then return nil end local query = url:match("%?.+") if not query then return nil end local args = {} for arg, param in query:gmatch("(%a+)=([^&?]+)") do if arg and param then args[arg] = param end end local maybe_idx = tonumber(args["index"]) -- if index matches v param it's probably the requested item if maybe_idx and #json.entries >= maybe_idx and json.entries[maybe_idx].id == args["v"] then msg.debug("index matches requested video") return maybe_idx - 1 end -- if there's no index or it doesn't match, look for video for i = 1, #json.entries do if json.entries[i].id == args["v"] then msg.debug("found requested video in index " .. (i - 1)) return i - 1 end end msg.debug("requested video not found in playlist") -- if item isn't on the playlist, give up return nil end local function make_absolute_url(base_url, url) if url:find("https?://") == 1 then return url end local proto, domain, rest = base_url:match("(https?://)([^/]+/)(.*)/?") local segs = {} rest:gsub("([^/]+)", function(c) table.insert(segs, c) end) url:gsub("([^/]+)", function(c) table.insert(segs, c) end) local resolved_url = {} for _, v in ipairs(segs) do if v == ".." then table.remove(resolved_url) elseif v ~= "." then table.insert(resolved_url, v) end end return proto .. domain .. table.concat(resolved_url, "/") end local function join_url(base_url, fragment) local res = "" if base_url and fragment.path then res = make_absolute_url(base_url, fragment.path) elseif fragment.url then res = fragment.url end return res end local function edl_track_joined(fragments, protocol, is_live, base) if type(fragments) ~= "table" or not fragments[1] then msg.debug("No fragments to join into EDL") return nil end local edl = "edl://" local offset = 1 local parts = {} if protocol == "http_dash_segments" and not is_live then msg.debug("Using dash") local args = "" -- assume MP4 DASH initialization segment if not fragments[1].duration and #fragments > 1 then msg.debug("Using init segment") args = args .. ",init=" .. edl_escape(join_url(base, fragments[1])) offset = 2 end table.insert(parts, "!mp4_dash" .. args) -- Check remaining fragments for duration; -- if not available in all, give up. for i = offset, #fragments do if not fragments[i].duration then msg.verbose("EDL doesn't support fragments " .. "without duration with MP4 DASH") return nil end end end for i = offset, #fragments do local fragment = fragments[i] if not url_is_safe(join_url(base, fragment)) then return nil end table.insert(parts, edl_escape(join_url(base, fragment))) if fragment.duration then parts[#parts] = parts[#parts] .. ",length="..fragment.duration end end return edl .. table.concat(parts, ";") .. ";" end local function has_native_dash_demuxer() local demuxers = mp.get_property_native("demuxer-lavf-list", {}) for _, v in ipairs(demuxers) do if v == "dash" then return true end end return false end local function valid_manifest(json) local reqfmt = json["requested_formats"] and json["requested_formats"][1] or {} if not reqfmt["manifest_url"] and not json["manifest_url"] then return false end local proto = reqfmt["protocol"] or json["protocol"] or "" return (proto == "http_dash_segments" and has_native_dash_demuxer()) or proto:find("^m3u8") end local function as_integer(v, def) def = def or 0 local num = math.floor(tonumber(v) or def) if num > -math.huge and num < math.huge then return num end return def end local function tags_to_edl(json) local tags = {} for json_name, mp_name in pairs(tag_list) do local v = json[json_name] if v then tags[#tags + 1] = mp_name .. "=" .. edl_escape(tostring(v)) end end if #tags == 0 then return nil end return "!global_tags," .. table.concat(tags, ",") end -- Convert a format list from youtube-dl to an EDL URL, or plain URL. -- json: full json blob by youtube-dl -- formats: format list by youtube-dl -- use_all_formats: if=true, then formats is the full format list, and the -- function will attempt to return them as delay-loaded tracks -- See res table initialization in the function for result type. local function formats_to_edl(json, formats, use_all_formats) local res = { -- the media URL, which may be EDL url = nil, -- for use_all_formats=true: whether any muxed formats are present, and -- at the same time the separate EDL parts don't have both audio/video muxed_needed = false, } local default_formats = {} local requested_formats = json["requested_formats"] or json["requested_downloads"] if use_all_formats and requested_formats then for _, track in ipairs(requested_formats) do local id = track["format_id"] if id then default_formats[id] = true end end end local duration = as_integer(json["duration"]) local single_url = nil local streams = {} local tbr_only = true for _, track in ipairs(formats) do tbr_only = tbr_only and track["tbr"] and (not track["abr"]) and (not track["vbr"]) end local has_requested_video = false local has_requested_audio = false -- Web players with quality selection always show the highest quality -- option at the top. Since tracks are usually listed with the first -- track at the top, that should also be the highest quality track. -- yt-dlp/youtube-dl sorts it's formats from worst to best. -- Iterate in reverse to get best track first. for index = #formats, 1, -1 do local track = formats[index] local edl_track = edl_track_joined(track.fragments, track.protocol, json.is_live, track.fragment_base_url) if not edl_track and not url_is_safe(track.url) then msg.error("No safe URL or supported fragmented stream available") return nil end local is_default = default_formats[track["format_id"]] local tracks = {} -- "none" means it is not a video -- nil means it is unknown if (o.force_all_formats or track.vcodec) and track.vcodec ~= "none" then tracks[#tracks + 1] = { media_type = "video", codec = map_codec_to_mpv(track.vcodec), } if is_default then has_requested_video = true end end if (o.force_all_formats or track.acodec) and track.acodec ~= "none" then tracks[#tracks + 1] = { media_type = "audio", codec = map_codec_to_mpv(track.acodec) or ext_map[track.ext], } if is_default then has_requested_audio = true end end local url = edl_track or track.url local hdr = {"!new_stream", "!no_clip", "!no_chapters"} local skip = #tracks == 0 local params = "" if use_all_formats then for _, sub in ipairs(tracks) do -- A single track that is either audio or video. Delay load it. local props = "" if sub.media_type == "video" then props = props .. ",w=" .. as_integer(track.width) .. ",h=" .. as_integer(track.height) .. ",fps=" .. as_integer(track.fps) elseif sub.media_type == "audio" then props = props .. ",samplerate=" .. as_integer(track.asr) end hdr[#hdr + 1] = "!delay_open,media_type=" .. sub.media_type .. ",codec=" .. (sub.codec or "null") .. props -- Add bitrate information etc. for better user selection. local byterate = 0 local rates = {"tbr", "vbr", "abr"} if #tracks > 1 then rates = {({video = "vbr", audio = "abr"})[sub.media_type]} end if tbr_only then rates = {"tbr"} end for _, f in ipairs(rates) do local br = as_integer(track[f]) if br > 0 then byterate = math.floor(br * 1000 / 8) break end end local title = track.format or track.format_note or "" if #tracks > 1 then if #title > 0 then title = title .. " " end title = title .. "muxed-" .. index end local flags = {} if is_default then flags[#flags + 1] = "default" end hdr[#hdr + 1] = "!track_meta,title=" .. edl_escape(title) .. ",byterate=" .. byterate .. iif(#flags > 0, ",flags=" .. table.concat(flags, "+"), "") end if duration > 0 then params = params .. ",length=" .. duration end end if not skip then hdr[#hdr + 1] = edl_escape(url) .. params streams[#streams + 1] = table.concat(hdr, ";") -- In case there is only 1 of these streams. -- Note: assumes it has no important EDL headers single_url = url end end local tags = tags_to_edl(json) -- Merge all tracks into a single virtual file, but avoid EDL if it's -- only a single track without metadata (i.e. redundant). if #streams == 1 and single_url and not tags then res.url = single_url elseif #streams > 0 then if tags then -- not a stream; just for the sake of concatenating the EDL string streams[#streams + 1] = tags end res.url = "edl://" .. table.concat(streams, ";") else return nil end if has_requested_audio ~= has_requested_video then local not_req_prop = has_requested_video and "aid" or "vid" if mp.get_property(not_req_prop) == "auto" then mp.set_property("file-local-options/" .. not_req_prop, "no") end end return res end local function add_single_video(json) local streamurl = "" local format_info = "" local max_bitrate = 0 local requested_formats = json["requested_formats"] or json["requested_downloads"] local all_formats = json["formats"] local has_requested_formats = requested_formats and #requested_formats > 0 local http_headers = has_requested_formats and requested_formats[1].http_headers or json.http_headers local cookies = has_requested_formats and requested_formats[1].cookies or json.cookies if o.use_manifests and valid_manifest(json) then -- prefer manifest_url if present format_info = "manifest" local mpd_url = requested_formats and requested_formats[1]["manifest_url"] or json["manifest_url"] if not mpd_url then msg.error("No manifest URL found in JSON data.") return elseif not url_is_safe(mpd_url) then return end streamurl = mpd_url if requested_formats then for _, track in pairs(requested_formats) do max_bitrate = (track.tbr and track.tbr > max_bitrate) and track.tbr or max_bitrate end elseif json.tbr then max_bitrate = json.tbr > max_bitrate and json.tbr or max_bitrate end end if streamurl == "" then -- possibly DASH/split tracks local res = nil -- Not having requested_formats usually hints to HLS master playlist -- usage, which we don't want to split off, at least not yet. if (all_formats and o.all_formats) and (has_requested_formats or o.force_all_formats) then format_info = "all_formats (separate)" res = formats_to_edl(json, all_formats, true) -- Note: since we don't delay-load muxed streams, use normal stream -- selection if we have to use muxed streams. if res and res.muxed_needed then res = nil end end if not res and has_requested_formats then format_info = "youtube-dl (separate)" res = formats_to_edl(json, requested_formats, false) end if res then streamurl = res.url end end if streamurl == "" and json.url then format_info = "youtube-dl (single)" local edl_track = edl_track_joined(json.fragments, json.protocol, json.is_live, json.fragment_base_url) if not edl_track and not url_is_safe(json.url) then return end -- normal video or single track streamurl = edl_track or json.url end if streamurl == "" then msg.error("No URL found in JSON data.") return end set_http_headers(http_headers) msg.verbose("format selection: " .. format_info) msg.debug("streamurl: " .. streamurl) mp.set_property("stream-open-filename", streamurl:gsub("^data:", "data://", 1)) if mp.get_property("force-media-title", "") == "" then mp.set_property("file-local-options/force-media-title", json.title) end -- set hls-bitrate for dash track selection if max_bitrate > 0 and not option_was_set("hls-bitrate") and not option_was_set_locally("hls-bitrate") then mp.set_property_native('file-local-options/hls-bitrate', max_bitrate*1000) end -- add subtitles if json.requested_subtitles ~= nil then local subs = {} for lang, info in pairs(json.requested_subtitles) do subs[#subs + 1] = {lang = lang or "-", info = info} end table.sort(subs, function(a, b) return a.lang < b.lang end) for _, e in ipairs(subs) do local lang, sub_info = e.lang, e.info msg.verbose("adding subtitle ["..lang.."]") local sub = nil if sub_info.data ~= nil then sub = "memory://"..sub_info.data elseif sub_info.url ~= nil and url_is_safe(sub_info.url) then sub = sub_info.url end if sub ~= nil then local edl = "edl://!no_clip;!delay_open,media_type=sub" local codec = map_codec_to_mpv(sub_info.ext) if codec then edl = edl .. ",codec=" .. codec end edl = edl .. ";" .. edl_escape(sub) local title = sub_info.name or sub_info.ext mp.commandv("sub-add", edl, "auto", title, lang) else msg.verbose("No subtitle data/url for ["..lang.."]") end end end -- add thumbnails if (o.thumbnails == 'all' or o.thumbnails == 'best') and json.thumbnails ~= nil then local thumb = nil local thumb_height = -1 local thumb_preference = nil for i = #json.thumbnails, 1, -1 do local thumb_info = json.thumbnails[i] if thumb_info.url ~= nil then if o.thumbnails == 'all' then msg.verbose("adding thumbnail") mp.commandv("video-add", thumb_info.url, "auto") thumb_height = 0 elseif (thumb_preference ~= nil and (thumb_info.preference or -math.huge) > thumb_preference) or (thumb_preference == nil and (thumb_info.height or 0) > thumb_height) then thumb = thumb_info.url thumb_height = thumb_info.height or 0 thumb_preference = thumb_info.preference end end end if thumb ~= nil then msg.verbose("adding thumbnail") mp.commandv("video-add", thumb, "auto") elseif thumb_height == -1 then msg.verbose("No thumbnail url") end end -- add chapters if json.chapters then msg.debug("Adding pre-parsed chapters") for i = 1, #json.chapters do local chapter = json.chapters[i] local title = chapter.title or "" if title == "" then title = string.format('Chapter %02d', i) end table.insert(chapter_list, {time=chapter.start_time, title=title}) end elseif json.description ~= nil and json.duration ~= nil then chapter_list = extract_chapters(json.description, json.duration) end -- set start time if json.start_time or json.section_start and not option_was_set("start") and not option_was_set_locally("start") then local start_time = json.start_time or json.section_start msg.debug("Setting start to: " .. start_time .. " secs") mp.set_property("file-local-options/start", start_time) end -- set end time if json.end_time or json.section_end and not option_was_set("end") and not option_was_set_locally("end") then local end_time = json.end_time or json.section_end msg.debug("Setting end to: " .. end_time .. " secs") mp.set_property("file-local-options/end", end_time) end -- set aspect ratio for anamorphic video if json.stretched_ratio ~= nil and not option_was_set("video-aspect-override") then mp.set_property('file-local-options/video-aspect-override', json.stretched_ratio) end local stream_opts = mp.get_property_native("file-local-options/stream-lavf-o", {}) -- for rtmp if json.protocol == "rtmp" then stream_opts = append_libav_opt(stream_opts, "rtmp_tcurl", streamurl) stream_opts = append_libav_opt(stream_opts, "rtmp_pageurl", json.page_url) stream_opts = append_libav_opt(stream_opts, "rtmp_playpath", json.play_path) stream_opts = append_libav_opt(stream_opts, "rtmp_swfverify", json.player_url) stream_opts = append_libav_opt(stream_opts, "rtmp_swfurl", json.player_url) stream_opts = append_libav_opt(stream_opts, "rtmp_app", json.app) end if json.proxy and json.proxy ~= "" then stream_opts = append_libav_opt(stream_opts, "http_proxy", json.proxy) end if cookies and cookies ~= "" then local existing_cookies = parse_cookies(stream_opts["cookies"]) local new_cookies = parse_cookies(cookies) for cookie_key, cookie in pairs(new_cookies) do existing_cookies[cookie_key] = cookie end stream_opts["cookies"] = serialize_cookies_for_avformat(existing_cookies) end mp.set_property_native("file-local-options/stream-lavf-o", stream_opts) end local function check_version(ytdl_path) local command = { name = "subprocess", capture_stdout = true, args = {ytdl_path, "--version"} } local version_string = mp.command_native(command).stdout local year, month, day = string.match(version_string, "(%d+).(%d+).(%d+)") -- sanity check if tonumber(year) < 2000 or tonumber(month) > 12 or tonumber(day) > 31 then return end local version_ts = os.time{year=year, month=month, day=day} if os.difftime(os.time(), version_ts) > 60*60*24*90 then msg.warn("It appears that your youtube-dl version is severely out of date.") end end local function run_ytdl_hook(url) local start_time = os.clock() -- strip ytdl:// if url:find("ytdl://") == 1 then url = url:sub(8) end local format = mp.get_property("options/ytdl-format") local raw_options = mp.get_property_native("options/ytdl-raw-options") local allsubs = true local proxy = nil local use_playlist = false local command = { ytdl.path, "--no-warnings", "-J", "--flat-playlist", "--sub-format", "ass/srt/best" } -- Checks if video option is "no", change format accordingly, -- but only if user didn't explicitly set one if mp.get_property("options/vid") == "no" and #format == 0 then format = "bestaudio/best" msg.verbose("Video disabled. Only using audio") end if format == "" then format = "bestvideo+bestaudio/best" end if format ~= "ytdl" then table.insert(command, "--format") table.insert(command, format) end for param, arg in pairs(raw_options) do table.insert(command, "--" .. param) if arg ~= "" then table.insert(command, arg) end if (param == "sub-lang" or param == "sub-langs" or param == "srt-lang") and (arg ~= "") then allsubs = false elseif param == "proxy" and arg ~= "" then proxy = arg elseif param == "yes-playlist" then use_playlist = true end end if allsubs == true then table.insert(command, "--all-subs") end if not use_playlist then table.insert(command, "--no-playlist") end table.insert(command, "--") table.insert(command, url) local result if ytdl.searched then result = exec(command) else local separator = platform_is_windows() and ";" or ":" if o.ytdl_path:match("[^" .. separator .. "]") then ytdl.paths_to_search = {} for path in o.ytdl_path:gmatch("[^" .. separator .. "]+") do table.insert(ytdl.paths_to_search, path) end end for _, path in pairs(ytdl.paths_to_search) do -- search for youtube-dl in mpv's config dir local exesuf = platform_is_windows() and not path:lower():match("%.exe$") and ".exe" or "" local ytdl_cmd = mp.find_config_file(path .. exesuf) if ytdl_cmd then msg.verbose("Found youtube-dl at: " .. ytdl_cmd) ytdl.path = ytdl_cmd command[1] = ytdl.path result = exec(command) break else msg.verbose("No youtube-dl found with path " .. path .. exesuf .. " in config directories") command[1] = path result = exec(command) if result.error_string == "init" then msg.verbose("youtube-dl with path " .. path .. " not found in PATH or not enough permissions") else msg.verbose("Found youtube-dl with path " .. path .. " in PATH") ytdl.path = path break end end end ytdl.searched = true mp.set_property("user-data/mpv/ytdl/path", ytdl.path or "") end if result.killed_by_us then return end mp.set_property_native("user-data/mpv/ytdl/json-subprocess-result", result) local json = result.stdout local parse_err = nil if result.status ~= 0 or json == "" then json = nil elseif json then json, parse_err = utils.parse_json(json) end if json == nil then msg.verbose("status:", result.status) msg.verbose("reason:", result.error_string) msg.verbose("stdout:", result.stdout) msg.verbose("stderr:", result.stderr) -- trim our stderr to avoid spurious newlines local ytdl_err = result.stderr:gsub("^%s*(.-)%s*$", "%1") msg.error(ytdl_err) local err = "youtube-dl failed: " if result.error_string and result.error_string == "init" then err = err .. "not found or not enough permissions" elseif parse_err then err = err .. "failed to parse JSON data: " .. parse_err else err = err .. "unexpected error occurred" end msg.error(err) if parse_err or string.find(ytdl_err, "yt%-dl%.org/bug") then check_version(ytdl.path) end return end msg.verbose("youtube-dl succeeded!") msg.debug('ytdl parsing took '..os.clock()-start_time..' seconds') json["proxy"] = json["proxy"] or proxy -- what did we get? if json["direct"] then -- direct URL, nothing to do msg.verbose("Got direct URL") return elseif json["_type"] == "playlist" or json["_type"] == "multi_video" then -- a playlist if #json.entries == 0 then msg.warn("Got empty playlist, nothing to play.") return end local self_redirecting_url = json.entries[1]["_type"] ~= "url_transparent" and json.entries[1]["webpage_url"] and json.entries[1]["webpage_url"] == json["webpage_url"] -- some funky guessing to detect multi-arc videos if self_redirecting_url and #json.entries > 1 and json.entries[1].protocol == "m3u8_native" and json.entries[1].url then msg.verbose("multi-arc video detected, building EDL") local playlist = edl_track_joined(json.entries) msg.debug("EDL: " .. playlist) if not playlist then return end -- can't change the http headers for each entry, so use the 1st set_http_headers(json.entries[1].http_headers) set_cookies(json.entries[1].cookies or json.cookies) mp.set_property("stream-open-filename", playlist) if json.title and mp.get_property("force-media-title", "") == "" then mp.set_property("file-local-options/force-media-title", json.title) end -- there might not be subs for the first segment local entry_wsubs = nil for i, entry in pairs(json.entries) do if entry.requested_subtitles ~= nil then entry_wsubs = i break end end if entry_wsubs ~= nil and json.entries[entry_wsubs].duration ~= nil then for j, req in pairs(json.entries[entry_wsubs].requested_subtitles) do local subfile = "edl://" for _, entry in pairs(json.entries) do if entry.requested_subtitles ~= nil and entry.requested_subtitles[j] ~= nil and url_is_safe(entry.requested_subtitles[j].url) then subfile = subfile..edl_escape(entry.requested_subtitles[j].url) else subfile = subfile..edl_escape("memory://WEBVTT") end subfile = subfile..",length="..entry.duration..";" end msg.debug(j.." sub EDL: "..subfile) mp.commandv("sub-add", subfile, "auto", req.ext, j) end end elseif self_redirecting_url and #json.entries == 1 then msg.verbose("Playlist with single entry detected.") add_single_video(json.entries[1]) else local playlist_index = parse_yt_playlist(url, json) local playlist = {"#EXTM3U"} for _, entry in pairs(json.entries) do local site = entry.url local title = entry.title if title ~= nil then title = string.gsub(title, '%s+', ' ') table.insert(playlist, "#EXTINF:0," .. title) end --[[ some extractors will still return the full info for all clips in the playlist and the URL will point directly to the file in that case, which we don't want so get the webpage URL instead, which is what we want, but only if we aren't going to trigger an infinite loop --]] if entry["webpage_url"] and not self_redirecting_url then site = entry["webpage_url"] end local playlist_url = nil -- links without protocol as returned by --flat-playlist if not site:find("://") then -- youtube extractor provides only IDs, -- others come prefixed with the extractor name and ":" local prefix = site:find(":") and "ytdl://" or "https://youtu.be/" playlist_url = prefix .. site elseif url_is_safe(site) then playlist_url = site end if playlist_url then table.insert(playlist, playlist_url) -- save the cookies in a table for the playlist hook playlist_cookies[playlist_url] = entry.cookies or json.cookies end end if use_playlist and not option_was_set("playlist-start") and playlist_index then mp.set_property_number("playlist-start", playlist_index) end mp.set_property("stream-open-filename", "memory://" .. table.concat(playlist, "\n")) end else -- probably a video add_single_video(json) end msg.debug('script running time: '..os.clock()-start_time..' seconds') end local function on_load_hook(load_fail) local url = mp.get_property("stream-open-filename", "") local force = url:find("^ytdl://") local early = force or o.try_ytdl_first if early == load_fail then return end if not force and (not url:find("^https?://") or is_blacklisted(url)) then return end run_ytdl_hook(url) end mp.add_hook("on_load", 10, function() on_load_hook(false) end) mp.add_hook("on_load_fail", 10, function() on_load_hook(true) end) mp.add_hook("on_load", 20, function () msg.verbose('playlist hook') local url = mp.get_property("stream-open-filename", "") if playlist_cookies[url] then set_cookies(playlist_cookies[url]) end end) mp.add_hook("on_preloaded", 10, function () if next(chapter_list) ~= nil then msg.verbose("Setting chapters") mp.set_property_native("chapter-list", chapter_list) chapter_list = {} end end) mp.add_hook("on_after_end_file", 50, function () mp.del_property("user-data/mpv/ytdl/json-subprocess-result") end) -- Display some stats. -- -- Please consult the readme for information about usage and configuration: -- https://github.com/Argon-/mpv-stats -- -- Please note: not every property is always available and therefore not always -- visible. local mp = require 'mp' local options = require 'mp.options' local utils = require 'mp.utils' local input = require 'mp.input' -- Options local o = { -- Default key bindings key_page_1 = "1", key_page_2 = "2", key_page_3 = "3", key_page_4 = "4", key_page_5 = "5", key_page_0 = "0", -- For pages which support scrolling key_scroll_up = "UP", key_scroll_down = "DOWN", key_search = "/", scroll_lines = 1, duration = 4, redraw_delay = 1, -- acts as duration in the toggling case ass_formatting = true, persistent_overlay = false, -- whether the stats can be overwritten by other output filter_params_max_length = 100, -- show one filter per line if list exceeds this length file_tag_max_length = 128, -- only show file tags shorter than this length in bytes file_tag_max_count = 16, -- only show the first x file tags show_frame_info = false, -- whether to show the current frame info term_width_limit = -1, -- overwrites the terminal width term_height_limit = -1, -- overwrites the terminal height debug = false, -- Graph options and style plot_perfdata = true, plot_vsync_ratio = true, plot_vsync_jitter = true, plot_tonemapping_lut = false, skip_frames = 5, global_max = true, flush_graph_data = true, -- clear data buffers when toggling plot_bg_border_color = "0000FF", plot_bg_color = "262626", plot_color = "FFFFFF", plot_bg_border_width = 0.5, -- Text style font = "", font_mono = "monospace", -- monospaced digits are sufficient font_size = 8, font_color = "", border_size = 0.8, border_color = "", shadow_x_offset = 0.0, shadow_y_offset = 0.0, shadow_color = "", alpha = "11", vidscale = "auto", -- Custom header for ASS tags to style the text output. -- Specifying this will ignore the text style values above and just -- use this string instead. custom_header = "", -- Text formatting -- With ASS ass_nl = "\\N", ass_indent = "\\h\\h\\h\\h\\h", ass_prefix_sep = "\\h\\h", ass_b1 = "{\\b1}", ass_b0 = "{\\b0}", ass_it1 = "{\\i1}", ass_it0 = "{\\i0}", -- Without ASS no_ass_nl = "\n", no_ass_indent = "\t", no_ass_prefix_sep = " ", no_ass_b1 = "\027[1m", no_ass_b0 = "\027[0m", no_ass_it1 = "\027[3m", no_ass_it0 = "\027[0m", bindlist = "no", -- print page 4 to the terminal on startup and quit mpv } options.read_options(o) o.term_width_limit = tonumber(o.term_width_limit) or -1 o.term_height_limit = tonumber(o.term_height_limit) or -1 if o.term_width_limit < 0 then o.term_width_limit = nil end if o.term_height_limit < 0 then o.term_height_limit = nil end local format = string.format local max = math.max local min = math.min -- Scaled metrics local font_size = o.font_size local border_size = o.border_size local shadow_x_offset = o.shadow_x_offset local shadow_y_offset = o.shadow_y_offset local plot_bg_border_width = o.plot_bg_border_width -- Function used to record performance data local recorder = nil -- Timer used for redrawing (toggling) and clearing the screen (oneshot) local display_timer = nil -- Timer used to update cache stats. local cache_recorder_timer -- Current page and : mappings local curr_page = o.key_page_1 local pages = {} local scroll_bound = false local searched_text local tm_viz_prev = nil -- Save these sequences locally as we'll need them a lot local ass_start = mp.get_property_osd("osd-ass-cc/0") local ass_stop = mp.get_property_osd("osd-ass-cc/1") -- Ring buffers for the values used to construct a graph. -- .pos denotes the current position, .len the buffer length -- .max is the max value in the corresponding buffer local vsratio_buf, vsjitter_buf local function init_buffers() vsratio_buf = {0, pos = 1, len = 50, max = 0} vsjitter_buf = {0, pos = 1, len = 50, max = 0} end local cache_ahead_buf, cache_speed_buf local perf_buffers = {} local function graph_add_value(graph, value) graph.pos = (graph.pos % graph.len) + 1 graph[graph.pos] = value graph.max = max(graph.max, value) end local function no_ASS(t) if not o.use_ass then return t elseif not o.persistent_overlay then -- mp.osd_message supports ass-escape using osd-ass-cc/{0|1} return ass_stop .. t .. ass_start else return mp.command_native({"escape-ass", tostring(t)}) end end local function bold(t) return o.b1 .. t .. o.b0 end local function it(t) return o.it1 .. t .. o.it0 end local function text_style() if not o.use_ass then return "" end if o.custom_header and o.custom_header ~= "" then return o.custom_header else local style = "{\\r\\an7\\fs" .. font_size .. "\\bord" .. border_size if o.font ~= "" then style = style .. "\\fn" .. o.font end if o.font_color ~= "" then style = style .. "\\1c&H" .. o.font_color .. "&\\1a&H" .. o.alpha .. "&" end if o.border_color ~= "" then style = style .. "\\3c&H" .. o.border_color .. "&\\3a&H" .. o.alpha .. "&" end if o.shadow_color ~= "" then style = style .. "\\4c&H" .. o.shadow_color .. "&\\4a&H" .. o.alpha .. "&" end return style .. "\\xshad" .. shadow_x_offset .. "\\yshad" .. shadow_y_offset .. "}" end end local function has_vo_window() return mp.get_property_native("vo-configured") and mp.get_property_native("video-osd") end -- Generate a graph from the given values. -- Returns an ASS formatted vector drawing as string. -- -- values: Array/table of numbers representing the data. Used like a ring buffer -- it will get iterated backwards `len` times starting at position `i`. -- i : Index of the latest data value in `values`. -- len : The length/amount of numbers in `values`. -- v_max : The maximum number in `values`. It is used to scale all data -- values to a range of 0 to `v_max`. -- v_avg : The average number in `values`. It is used to try and center graphs -- if possible. May be left as nil -- scale : A value that will be multiplied with all data values. -- x_tics: Horizontal width multiplier for the steps local function generate_graph(values, i, len, v_max, v_avg, scale, x_tics) -- Check if at least one value exists if not values[i] then return "" end local x_max = (len - 1) * x_tics local y_offset = border_size local y_max = font_size * 0.66 local x = 0 if v_max > 0 then -- try and center the graph if possible, but avoid going above `scale` if v_avg and v_avg > 0 then scale = min(scale, v_max / (2 * v_avg)) end scale = scale * y_max / v_max end -- else if v_max==0 then all values are 0 and scale doesn't matter local s = {format("m 0 0 n %f %f l ", x, y_max - scale * values[i])} i = ((i - 2) % len) + 1 for _ = 1, len - 1 do if values[i] then x = x - x_tics s[#s+1] = format("%f %f ", x, y_max - scale * values[i]) end i = ((i - 2) % len) + 1 end s[#s+1] = format("%f %f %f %f", x, y_max, 0, y_max) local bg_box = format("{\\bord%f}{\\3c&H%s&}{\\1c&H%s&}m 0 %f l %f %f %f 0 0 0", plot_bg_border_width, o.plot_bg_border_color, o.plot_bg_color, y_max, x_max, y_max, x_max) return format("%s{\\rDefault}{\\pbo%f}{\\shad0}{\\alpha&H00}{\\p1}%s{\\p0}" .. "{\\bord0}{\\1c&H%s}{\\p1}%s{\\p0}%s", o.prefix_sep, y_offset, bg_box, o.plot_color, table.concat(s), text_style()) end local function append(s, str, attr) if not str then return false end attr.prefix_sep = attr.prefix_sep or o.prefix_sep attr.indent = attr.indent or o.indent attr.nl = attr.nl or o.nl attr.suffix = attr.suffix or "" attr.prefix = attr.prefix or "" attr.no_prefix_markup = attr.no_prefix_markup or false attr.prefix = attr.no_prefix_markup and attr.prefix or bold(attr.prefix) local index = #s + (attr.nl == "" and 0 or 1) s[index] = s[index] or "" s[index] = s[index] .. format("%s%s%s%s%s%s", attr.nl, attr.indent, attr.prefix, attr.prefix_sep, no_ASS(str), attr.suffix) return true end -- Format and append a property. -- A property whose value is either `nil` or empty (hereafter called "invalid") -- is skipped and not appended. -- Returns `false` in case nothing was appended, otherwise `true`. -- -- s : Table containing strings. -- prop : The property to query and format (based on its OSD representation). -- attr : Optional table to overwrite certain (formatting) attributes for -- this property. -- exclude: Optional table containing keys which are considered invalid values -- for this property. Specifying this will replace empty string as -- default invalid value (nil is always invalid). local function append_property(s, prop, attr, excluded) excluded = excluded or {[""] = true} local ret = mp.get_property_osd(prop) if not ret or excluded[ret] then if o.debug then print("No value for property: " .. prop) end return false end return append(s, ret, attr) end local function sorted_keys(t, comp_fn) local keys = {} for k,_ in pairs(t) do keys[#keys+1] = k end table.sort(keys, comp_fn) return keys end local function scroll_hint(search) local hint = format("(hint: scroll with %s/%s", o.key_scroll_up, o.key_scroll_down) if search then hint = hint .. " and search with " .. o.key_search end hint = hint .. ")" if not o.use_ass then return " " .. hint end return format(" {\\fs%s}%s{\\fs%s}", font_size * 0.66, hint, font_size) end local function append_perfdata(header, s, dedicated_page) local vo_p = mp.get_property_native("vo-passes") if not vo_p then return end -- Sums of all last/avg/peak values local last_s, avg_s, peak_s = {}, {}, {} for frame, data in pairs(vo_p) do last_s[frame], avg_s[frame], peak_s[frame] = 0, 0, 0 for _, pass in ipairs(data) do last_s[frame] = last_s[frame] + pass["last"] avg_s[frame] = avg_s[frame] + pass["avg"] peak_s[frame] = peak_s[frame] + pass["peak"] end end -- Pretty print measured time local function pp(i) -- rescale to microseconds for a saner display return format("%5d", i / 1000) end -- Format n/m with a font weight based on the ratio local function p(n, m) local i = 0 if m > 0 then i = tonumber(n) / m end -- Calculate font weight. 100 is minimum, 400 is normal, 700 bold, 900 is max local w = (700 * math.sqrt(i)) + 200 if not o.use_ass then local str = format("%3d%%", i * 100) return w >= 700 and bold(str) or str end return format("{\\b%d}%3d%%{\\b0}", w, i * 100) end local font_small = o.use_ass and format("{\\fs%s}", font_size * 0.66) or "" local font_normal = o.use_ass and format("{\\fs%s}", font_size) or "" local font = o.use_ass and format("{\\fn%s}", o.font) or "" local font_mono = o.use_ass and format("{\\fn%s}", o.font_mono) or "" local indent = o.use_ass and "\\h" or " " -- ensure that the fixed title is one element and every scrollable line is -- also one single element. local h = dedicated_page and header or s h[#h+1] = format("%s%s%s%s%s%s%s%s", dedicated_page and "" or o.nl, dedicated_page and "" or o.indent, bold("Frame Timings:"), o.prefix_sep, font_small, "(last/average/peak μs)", font_normal, dedicated_page and scroll_hint() or "") for _,frame in ipairs(sorted_keys(vo_p)) do -- ensure fixed display order local data = vo_p[frame] local f = "%s%s%s%s%s / %s / %s %s%s%s%s%s%s" if dedicated_page then s[#s+1] = format("%s%s%s:", o.nl, o.indent, bold(frame:gsub("^%l", string.upper))) for _, pass in ipairs(data) do s[#s+1] = format(f, o.nl, o.indent, o.indent, font_mono, pp(pass["last"]), pp(pass["avg"]), pp(pass["peak"]), o.prefix_sep .. indent, p(pass["last"], last_s[frame]), font, o.prefix_sep, o.prefix_sep, pass["desc"]) if o.plot_perfdata and o.use_ass then -- use the same line that was already started for this iteration s[#s] = s[#s] .. generate_graph(pass["samples"], pass["count"], pass["count"], pass["peak"], pass["avg"], 0.9, 0.25) end end -- Print sum of timing values as "Total" s[#s+1] = format(f, o.nl, o.indent, o.indent, font_mono, pp(last_s[frame]), pp(avg_s[frame]), pp(peak_s[frame]), o.prefix_sep, bold("Total"), font, "", "", "") else -- for the simplified view, we just print the sum of each pass s[#s+1] = format(f, o.nl, o.indent, o.indent, font_mono, pp(last_s[frame]), pp(avg_s[frame]), pp(peak_s[frame]), "", "", font, o.prefix_sep, o.prefix_sep, frame:gsub("^%l", string.upper)) end end end -- command prefix tokens to strip - includes generic property commands local cmd_prefixes = { osd_auto=1, no_osd=1, osd_bar=1, osd_msg=1, osd_msg_bar=1, raw=1, sync=1, async=1, expand_properties=1, repeatable=1, nonrepeatable=1, set=1, add=1, multiply=1, toggle=1, cycle=1, cycle_values=1, ["!reverse"]=1, change_list=1, } -- commands/writable-properties prefix sub-words (followed by -) to strip local name_prefixes = { define=1, delete=1, enable=1, disable=1, dump=1, write=1, drop=1, revert=1, ab=1, hr=1, secondary=1, current=1, } -- extract a command "subject" from a command string, by removing all -- generic prefix tokens and then returning the first interesting sub-word -- of the next token. For target-script name we also check another token. -- The tokenizer works fine for things we care about - valid mpv commands, -- properties and script names, possibly quoted, white-space[s]-separated. -- It's decent in practice, and worst case is "incorrect" subject. local function cmd_subject(cmd) cmd = cmd:gsub(";.*", ""):gsub("%-", "_") -- only first cmd, s/-/_/ local TOKEN = '^%s*["\']?([%w_!]*)' -- captures+ends before (maybe) final " local tok, sname, subw repeat tok, cmd = cmd:match(TOKEN .. '["\']?(.*)') until not cmd_prefixes[tok] -- tok is the 1st non-generic command/property name token, cmd is the rest sname = tok == "script_message_to" and cmd:match(TOKEN) or tok == "script_binding" and cmd:match(TOKEN .. "/") if sname and sname ~= "" then return "script: " .. sname end -- return the first sub-word of tok which is not a useless prefix repeat subw, tok = tok:match("([^_]*)_?(.*)") until tok == "" or not name_prefixes[subw] return subw:len() > 1 and subw or "[unknown]" end -- key names are valid UTF-8, ascii7 except maybe the last/only codepoint. -- we count codepoints and ignore wcwidth. no need for grapheme clusters. -- our error for alignment is at most one cell (if last CP is double-width). -- (if k was valid but arbitrary: we'd count all bytes <0x80 or >=0xc0) local function keyname_cells(k) local klen = k:len() if klen > 1 and k:byte(klen) >= 0x80 then -- last/only CP is not ascii7 repeat klen = klen-1 until klen == 1 or k:byte(klen) >= 0xc0 -- last CP begins at klen end return klen end local function get_kbinfo_lines() -- active keys: only highest priority of each key, and not our (stats) keys local bindings = mp.get_property_native("input-bindings", {}) local active = {} -- map: key-name -> bind-info for _, bind in pairs(bindings) do if bind.priority >= 0 and ( not active[bind.key] or (active[bind.key].is_weak and not bind.is_weak) or (bind.is_weak == active[bind.key].is_weak and bind.priority > active[bind.key].priority) ) and not bind.cmd:find("script-binding stats/__forced_", 1, true) and bind.section ~= "input_forced_console" and ( searched_text == nil or (bind.key .. bind.cmd):lower():find(searched_text, 1, true) ) then active[bind.key] = bind end end -- make an array, find max key len, add sort keys (.subject/.mods[_count]) local ordered = {} local kspaces = "" -- as many spaces as the longest key name for _, bind in pairs(active) do bind.subject = cmd_subject(bind.cmd) if bind.subject ~= "ignore" then ordered[#ordered+1] = bind _,_, bind.mods = bind.key:find("(.*)%+.") _, bind.mods_count = bind.key:gsub("%+.", "") if bind.key:len() > kspaces:len() then kspaces = string.rep(" ", bind.key:len()) end end end local function align_right(key) return kspaces:sub(keyname_cells(key)) .. key end -- sort by: subject, mod(ifier)s count, mods, key-len, lowercase-key, key table.sort(ordered, function(a, b) if a.subject ~= b.subject then return a.subject < b.subject elseif a.mods_count ~= b.mods_count then return a.mods_count < b.mods_count elseif a.mods ~= b.mods then return a.mods < b.mods elseif a.key:len() ~= b.key:len() then return a.key:len() < b.key:len() elseif a.key:lower() ~= b.key:lower() then return a.key:lower() < b.key:lower() else return a.key > b.key -- only case differs, lowercase first end end) -- key/subject pre/post formatting for terminal/ass. -- key/subject alignment uses spaces (with mono font if ass) -- word-wrapping is disabled for ass, or cut at 79 for the terminal local LTR = string.char(0xE2, 0x80, 0x8E) -- U+200E Left To Right mark local term = not o.use_ass local kpre = term and "" or format("{\\q2\\fn%s}%s", o.font_mono, LTR) local kpost = term and " " or format(" {\\fn%s}", o.font) local spre = term and kspaces .. " " or format("{\\q2\\fn%s}%s {\\fn%s}{\\fs%d\\u1}", o.font_mono, kspaces, o.font, 1.3*font_size) local spost = term and "" or format("{\\u0\\fs%d}%s", font_size, text_style()) -- create the display lines local info_lines = {} local subject = nil for _, bind in ipairs(ordered) do if bind.subject ~= subject then -- new subject (title) subject = bind.subject append(info_lines, "", {}) append(info_lines, "", { prefix = spre .. subject .. spost }) end if bind.comment then bind.cmd = bind.cmd .. " # " .. bind.comment end append(info_lines, bind.cmd, { prefix = kpre .. no_ASS(align_right(bind.key)) .. kpost }) end return info_lines end local function append_general_perfdata(s) for i, data in ipairs(mp.get_property_native("perf-info") or {}) do append(s, data.text or data.value, {prefix="["..tostring(i).."] "..data.name..":"}) if o.plot_perfdata and o.use_ass and data.value then local buf = perf_buffers[data.name] if not buf then buf = {0, pos = 1, len = 50, max = 0} perf_buffers[data.name] = buf end graph_add_value(buf, data.value) s[#s] = s[#s] .. generate_graph(buf, buf.pos, buf.len, buf.max, nil, 0.8, 1) end end end local function append_display_sync(s) if not mp.get_property_bool("display-sync-active", false) then return end local vspeed = append_property(s, "video-speed-correction", {prefix="DS:"}) if vspeed then append_property(s, "audio-speed-correction", {prefix="/", nl="", indent=" ", prefix_sep=" ", no_prefix_markup=true}) else append_property(s, "audio-speed-correction", {prefix="DS:" .. o.prefix_sep .. " - / ", prefix_sep=""}) end append_property(s, "mistimed-frame-count", {prefix="Mistimed:", nl="", indent=o.prefix_sep .. o.prefix_sep}) append_property(s, "vo-delayed-frame-count", {prefix="Delayed:", nl="", indent=o.prefix_sep .. o.prefix_sep}) -- As we need to plot some graphs we print jitter and ratio on their own lines if not display_timer.oneshot and (o.plot_vsync_ratio or o.plot_vsync_jitter) and o.use_ass then local ratio_graph = "" local jitter_graph = "" if o.plot_vsync_ratio then ratio_graph = generate_graph(vsratio_buf, vsratio_buf.pos, vsratio_buf.len, vsratio_buf.max, nil, 0.8, 1) end if o.plot_vsync_jitter then jitter_graph = generate_graph(vsjitter_buf, vsjitter_buf.pos, vsjitter_buf.len, vsjitter_buf.max, nil, 0.8, 1) end append_property(s, "vsync-ratio", {prefix="VSync Ratio:", suffix=o.prefix_sep .. ratio_graph}) append_property(s, "vsync-jitter", {prefix="VSync Jitter:", suffix=o.prefix_sep .. jitter_graph}) else -- Since no graph is needed we can print ratio/jitter on the same line and save some space local vr = append_property(s, "vsync-ratio", {prefix="VSync Ratio:"}) append_property(s, "vsync-jitter", {prefix="VSync Jitter:", nl=vr and "" or o.nl, indent=vr and o.prefix_sep .. o.prefix_sep}) end end local function append_filters(s, prop, prefix) local length = 0 local filters = {} for _,f in ipairs(mp.get_property_native(prop, {})) do local n = f.name if f.enabled ~= nil and not f.enabled then n = n .. " (disabled)" end if f.label ~= nil then n = "@" .. f.label .. ": " .. n end local p = {} for _,key in ipairs(sorted_keys(f.params)) do p[#p+1] = key .. "=" .. f.params[key] end if #p > 0 then p = " [" .. table.concat(p, " ") .. "]" else p = "" end length = length + n:len() + p:len() filters[#filters+1] = no_ASS(n) .. it(no_ASS(p)) end if #filters > 0 then local ret if length < o.filter_params_max_length then ret = table.concat(filters, ", ") else local sep = o.nl .. o.indent .. o.indent ret = sep .. table.concat(filters, sep) end s[#s+1] = o.nl .. o.indent .. bold(prefix) .. o.prefix_sep .. ret end end local function add_header(s) s[#s+1] = text_style() end local function add_file(s, print_cache, print_tags) append(s, "", {prefix="File:", nl="", indent=""}) append_property(s, "filename", {prefix_sep="", nl="", indent=""}) if mp.get_property_osd("filename") ~= mp.get_property_osd("media-title") then append_property(s, "media-title", {prefix="Title:"}) end if print_tags then local tags = mp.get_property_native("display-tags") local tags_displayed = 0 for _, tag in ipairs(tags) do local value = mp.get_property("metadata/by-key/" .. tag) if tag ~= "Title" and tags_displayed < o.file_tag_max_count and value and value:len() < o.file_tag_max_length then append(s, value, {prefix=string.gsub(tag, "_", " ") .. ":"}) tags_displayed = tags_displayed + 1 end end end local editions = mp.get_property_number("editions") local edition = mp.get_property_number("current-edition") local ed_cond = (edition and editions > 1) if ed_cond then append_property(s, "edition-list/" .. tostring(edition) .. "/title", {prefix="Edition:"}) append_property(s, "edition-list/count", {prefix="(" .. tostring(edition + 1) .. "/", suffix=")", nl="", indent=" ", prefix_sep=" ", no_prefix_markup=true}) end local ch_index = mp.get_property_number("chapter") if ch_index and ch_index >= 0 then append_property(s, "chapter-list/" .. tostring(ch_index) .. "/title", {prefix="Chapter:", nl=ed_cond and "" or o.nl}) append_property(s, "chapter-list/count", {prefix="(" .. tostring(ch_index + 1) .. " /", suffix=")", nl="", indent=" ", prefix_sep=" ", no_prefix_markup=true}) end local fs = append_property(s, "file-size", {prefix="Size:"}) append_property(s, "file-format", {prefix="Format/Protocol:", nl=fs and "" or o.nl, indent=fs and o.prefix_sep .. o.prefix_sep}) if not print_cache then return end local demuxer_cache = mp.get_property_native("demuxer-cache-state", {}) if demuxer_cache["fw-bytes"] then demuxer_cache = demuxer_cache["fw-bytes"] -- returns bytes else demuxer_cache = 0 end local demuxer_secs = mp.get_property_number("demuxer-cache-duration", 0) if demuxer_cache + demuxer_secs > 0 then append(s, utils.format_bytes_humanized(demuxer_cache), {prefix="Total Cache:"}) append(s, format("%.1f", demuxer_secs), {prefix="(", suffix=" sec)", nl="", no_prefix_markup=true, prefix_sep="", indent=o.prefix_sep}) end end local function crop_noop(w, h, r) return r["crop-x"] == 0 and r["crop-y"] == 0 and r["crop-w"] == w and r["crop-h"] == h end local function crop_equal(r, ro) return r["crop-x"] == ro["crop-x"] and r["crop-y"] == ro["crop-y"] and r["crop-w"] == ro["crop-w"] and r["crop-h"] == ro["crop-h"] end local function append_resolution(s, r, prefix, w_prop, h_prop, video_res) if not r then return end w_prop = w_prop or "w" h_prop = h_prop or "h" if append(s, r[w_prop], {prefix=prefix}) then append(s, r[h_prop], {prefix="x", nl="", indent=" ", prefix_sep=" ", no_prefix_markup=true}) if r["aspect"] ~= nil and not video_res then append(s, format("%.2f:1", r["aspect"]), {prefix="", nl="", indent="", no_prefix_markup=true}) append(s, r["aspect-name"], {prefix="(", suffix=")", nl="", indent=" ", prefix_sep="", no_prefix_markup=true}) end if r["sar"] ~= nil and video_res then append(s, format("%.2f:1", r["sar"]), {prefix="", nl="", indent="", no_prefix_markup=true}) append(s, r["sar-name"], {prefix="(", suffix=")", nl="", indent=" ", prefix_sep="", no_prefix_markup=true}) end if r["s"] then append(s, format("%.2f", r["s"]), {prefix="(", suffix="x)", nl="", indent=o.prefix_sep, prefix_sep="", no_prefix_markup=true}) end -- We can skip crop if it is the same as video decoded resolution if r["crop-w"] and (not video_res or not crop_noop(r[w_prop], r[h_prop], r)) then append(s, format("[x: %d, y: %d, w: %d, h: %d]", r["crop-x"], r["crop-y"], r["crop-w"], r["crop-h"]), {prefix="", nl="", indent="", no_prefix_markup=true}) end end end local function pq_eotf(x) if not x then return x; end local PQ_M1 = 2610.0 / 4096 * 1.0 / 4 local PQ_M2 = 2523.0 / 4096 * 128 local PQ_C1 = 3424.0 / 4096 local PQ_C2 = 2413.0 / 4096 * 32 local PQ_C3 = 2392.0 / 4096 * 32 x = x ^ (1.0 / PQ_M2) x = max(x - PQ_C1, 0.0) / (PQ_C2 - PQ_C3 * x) x = x ^ (1.0 / PQ_M1) x = x * 10000.0 return x end local function append_hdr(s, hdr, video_out) if not hdr then return end local function should_show(val) return val and val ~= 203 and val > 0 end -- If we are printing video out parameters it is just display, not mastering local display_prefix = video_out and "Display:" or "Mastering display:" local indent = "" if should_show(hdr["max-cll"]) or should_show(hdr["max-luma"]) then append(s, "", {prefix="HDR10:"}) if hdr["min-luma"] and should_show(hdr["max-luma"]) then -- libplacebo uses close to zero values as "defined zero" hdr["min-luma"] = hdr["min-luma"] <= 1e-6 and 0 or hdr["min-luma"] append(s, format("%.2g / %.0f", hdr["min-luma"], hdr["max-luma"]), {prefix=display_prefix, suffix=" cd/m²", nl="", indent=indent}) indent = o.prefix_sep .. o.prefix_sep end if should_show(hdr["max-cll"]) then append(s, hdr["max-cll"], {prefix="MaxCLL:", suffix=" cd/m²", nl="", indent=indent}) indent = o.prefix_sep .. o.prefix_sep end if hdr["max-fall"] and hdr["max-fall"] > 0 then append(s, hdr["max-fall"], {prefix="MaxFALL:", suffix=" cd/m²", nl="", indent=indent}) end end indent = o.prefix_sep .. o.prefix_sep if hdr["scene-max-r"] or hdr["scene-max-g"] or hdr["scene-max-b"] or hdr["scene-avg"] then append(s, "", {prefix="HDR10+:"}) append(s, format("%.1f / %.1f / %.1f", hdr["scene-max-r"] or 0, hdr["scene-max-g"] or 0, hdr["scene-max-b"] or 0), {prefix="MaxRGB:", suffix=" cd/m²", nl="", indent=""}) append(s, format("%.1f", hdr["scene-avg"] or 0), {prefix="Avg:", suffix=" cd/m²", nl="", indent=indent}) end if hdr["max-pq-y"] and hdr["avg-pq-y"] then append(s, "", {prefix="PQ(Y):"}) append(s, format("%.2f cd/m² (%.2f%% PQ)", pq_eotf(hdr["max-pq-y"]), hdr["max-pq-y"] * 100), {prefix="Max:", nl="", indent=""}) append(s, format("%.2f cd/m² (%.2f%% PQ)", pq_eotf(hdr["avg-pq-y"]), hdr["avg-pq-y"] * 100), {prefix="Avg:", nl="", indent=indent}) end end local function append_img_params(s, r, ro) if not r then return end append_resolution(s, r, "Resolution:", "w", "h", true) if ro and (r["w"] ~= ro["dw"] or r["h"] ~= ro["dh"]) then if ro["crop-w"] and (crop_noop(r["w"], r["h"], ro) or crop_equal(r, ro)) then ro["crop-w"] = nil end append_resolution(s, ro, "Output Resolution:", "dw", "dh") end local indent = o.prefix_sep .. o.prefix_sep r = ro or r local pixel_format = r["hw-pixelformat"] or r["pixelformat"] append(s, pixel_format, {prefix="Format:"}) append(s, r["colorlevels"], {prefix="Levels:", nl="", indent=indent}) if r["chroma-location"] and r["chroma-location"] ~= "unknown" then append(s, r["chroma-location"], {prefix="Chroma Loc:", nl="", indent=indent}) end -- Group these together to save vertical space append(s, r["colormatrix"], {prefix="Colormatrix:"}) append(s, r["primaries"], {prefix="Primaries:", nl="", indent=indent}) append(s, r["gamma"], {prefix="Transfer:", nl="", indent=indent}) end local function append_fps(s, prop, eprop) local fps = mp.get_property_osd(prop) local efps = mp.get_property_osd(eprop) local single = eprop == "" or (fps ~= "" and efps ~= "" and fps == efps) local unit = prop == "display-fps" and " Hz" or " fps" local suffix = single and "" or " (specified)" local esuffix = single and "" or " (estimated)" local prefix = prop == "display-fps" and "Refresh Rate:" or "Frame Rate:" local nl = o.nl local indent = o.indent if fps ~= "" and append(s, fps, {prefix=prefix, suffix=unit .. suffix}) then prefix = "" nl = "" indent = "" end if not single and efps ~= "" then append(s, efps, {prefix=prefix, suffix=unit .. esuffix, nl=nl, indent=indent}) end end local function add_video_out(s) local vo = mp.get_property_native("current-vo") if not vo then return end append(s, "", {prefix="Display:", nl=o.nl .. o.nl, indent=""}) append(s, vo, {prefix_sep="", nl="", indent=""}) append_property(s, "display-names", {prefix_sep="", prefix="(", suffix=")", no_prefix_markup=true, nl="", indent=" "}) append(s, mp.get_property_native("current-gpu-context"), {prefix="Context:", nl="", indent=o.prefix_sep .. o.prefix_sep}) append_property(s, "avsync", {prefix="A-V:"}) append_fps(s, "display-fps", "estimated-display-fps") if append_property(s, "decoder-frame-drop-count", {prefix="Dropped Frames:", suffix=" (decoder)"}) then append_property(s, "frame-drop-count", {suffix=" (output)", nl="", indent=""}) end append_display_sync(s) append_perfdata(nil, s, false) if mp.get_property_native("deinterlace-active") then append_property(s, "deinterlace", {prefix="Deinterlacing:"}) end local scale = nil if not mp.get_property_native("fullscreen") then scale = mp.get_property_native("current-window-scale") end local od = mp.get_property_native("osd-dimensions") local rt = mp.get_property_native("video-target-params") local r = rt or {} -- Add window scale r["s"] = scale r["crop-x"] = od["ml"] r["crop-y"] = od["mt"] r["crop-w"] = od["w"] - od["ml"] - od["mr"] r["crop-h"] = od["h"] - od["mt"] - od["mb"] if not rt then r["w"] = r["crop-w"] r["h"] = r["crop-h"] append_resolution(s, r, "Resolution:", "w", "h", true) return end append_img_params(s, r) append_hdr(s, r, true) end local function add_video(s) local r = mp.get_property_native("video-params") local ro = mp.get_property_native("video-out-params") -- in case of e.g. lavfi-complex there can be no input video, only output if not r then r = ro end if not r then return end local track = mp.get_property_native("current-tracks/video") if track then append(s, "", {prefix=track.image and "Image:" or "Video:", nl=o.nl .. o.nl, indent=""}) append(s, track["codec-desc"], {prefix_sep="", nl="", indent=""}) append(s, track["codec-profile"], {prefix="[", nl="", indent=" ", prefix_sep="", no_prefix_markup=true, suffix="]"}) if track["codec"] ~= track["decoder"] then append(s, track["decoder"], {prefix="[", nl="", indent=" ", prefix_sep="", no_prefix_markup=true, suffix="]"}) end append_property(s, "hwdec-current", {prefix="HW:", nl="", indent=o.prefix_sep .. o.prefix_sep, no_prefix_markup=false, suffix=""}, {no=true, [""]=true}) end local has_prefix = false if o.show_frame_info then if append_property(s, "estimated-frame-number", {prefix="Frame:"}) then append_property(s, "estimated-frame-count", {indent=" / ", nl="", prefix_sep=""}) has_prefix = true end local frame_info = mp.get_property_native("video-frame-info") if frame_info and frame_info["picture-type"] then local attrs = has_prefix and {prefix="(", suffix=")", indent=" ", nl="", prefix_sep="", no_prefix_markup=true} or {prefix="Picture Type:"} append(s, frame_info["picture-type"], attrs) has_prefix = true end if frame_info and frame_info["interlaced"] then local attrs = has_prefix and {indent=" ", nl="", prefix_sep=""} or {prefix="Picture Type:"} append(s, "Interlaced", attrs) end end if mp.get_property_native("current-tracks/video/image") == false then append_fps(s, "container-fps", "estimated-vf-fps") end append_img_params(s, r, ro) append_hdr(s, ro) append_property(s, "video-bitrate", {prefix="Bitrate:"}) append_filters(s, "vf", "Filters:") end local function add_audio(s) local r = mp.get_property_native("audio-params") -- in case of e.g. lavfi-complex there can be no input audio, only output local ro = mp.get_property_native("audio-out-params") or r r = r or ro if not r then return end local merge = function(rr, rro, prop) local a = rr[prop] or rro[prop] local b = rro[prop] or rr[prop] return (a == b or a == nil) and a or (a .. " ➜ " .. b) end append(s, "", {prefix="Audio:", nl=o.nl .. o.nl, indent=""}) local track = mp.get_property_native("current-tracks/audio") if track then append(s, track["codec-desc"], {prefix_sep="", nl="", indent=""}) append(s, track["codec-profile"], {prefix="[", nl="", indent=" ", prefix_sep="", no_prefix_markup=true, suffix="]"}) if track["codec"] ~= track["decoder"] then append(s, track["decoder"], {prefix="[", nl="", indent=" ", prefix_sep="", no_prefix_markup=true, suffix="]"}) end end append_property(s, "current-ao", {prefix="AO:", nl="", indent=o.prefix_sep .. o.prefix_sep}) local dev = append_property(s, "audio-device", {prefix="Device:"}) local ao_mute = mp.get_property_native("ao-mute") and " (Muted)" or "" append_property(s, "ao-volume", {prefix="AO Volume:", suffix="%" .. ao_mute, nl=dev and "" or o.nl, indent=dev and o.prefix_sep .. o.prefix_sep}) if math.abs(mp.get_property_native("audio-delay")) > 1e-6 then append_property(s, "audio-delay", {prefix="A-V delay:"}) end local cc = append(s, merge(r, ro, "channel-count"), {prefix="Channels:"}) append(s, merge(r, ro, "format"), {prefix="Format:", nl=cc and "" or o.nl, indent=cc and o.prefix_sep .. o.prefix_sep}) append(s, merge(r, ro, "samplerate"), {prefix="Sample Rate:", suffix=" Hz"}) append_property(s, "audio-bitrate", {prefix="Bitrate:"}) append_filters(s, "af", "Filters:") end -- Determine whether ASS formatting shall/can be used and set formatting sequences local function eval_ass_formatting() o.use_ass = o.ass_formatting and has_vo_window() if o.use_ass then o.nl = o.ass_nl o.indent = o.ass_indent o.prefix_sep = o.ass_prefix_sep o.b1 = o.ass_b1 o.b0 = o.ass_b0 o.it1 = o.ass_it1 o.it0 = o.ass_it0 else o.nl = o.no_ass_nl o.indent = o.no_ass_indent o.prefix_sep = o.no_ass_prefix_sep o.b1 = o.no_ass_b1 o.b0 = o.no_ass_b0 o.it1 = o.no_ass_it1 o.it0 = o.no_ass_it0 end end -- assumptions: -- s is composed of SGR escape sequences and/or printable UTF8 sequences -- printable codepoints occupy one terminal cell (we don't have wcwidth) -- tabstops are 8, 16, 24..., and the output starts at 0 or a tabstop -- note: if maxwidth <= 2 and s doesn't fit: the result is "..." (more than 2) local function term_ellipsis(s, maxwidth) local TAB, ESC, SGR_END = 9, 27, ("m"):byte() local width, ellipsis = 0, "..." local fit_len, in_sgr for i = 1, #s do local x = s:byte(i) if in_sgr then in_sgr = x ~= SGR_END elseif x == ESC then in_sgr = true ellipsis = "\27[0m..." -- ensure SGR reset elseif x < 128 or x >= 192 then -- non UTF8-continuation -- tab adds till the next stop, else add 1 width = width + (x == TAB and 8 - width % 8 or 1) if fit_len == nil and width > maxwidth - 3 then fit_len = i - 1 -- adding "..." still fits maxwidth end if width > maxwidth then return s:sub(1, fit_len) .. ellipsis end end end return s end local function term_ellipsis_array(arr, from, to, max_width) for i = from, to do arr[i] = term_ellipsis(arr[i], max_width) end return arr end -- split str into a table -- example: local t = split(s, "\n") -- plain: whether pat is a plain string (default false - pat is a pattern) local function split(str, pat, plain) local init = 1 local r, i, find, sub = {}, 1, string.find, string.sub repeat local f0, f1 = find(str, pat, init, plain) r[i], i = sub(str, init, f0 and f0 - 1), i+1 init = f0 and f1 + 1 until f0 == nil return r end -- Composes the output with header and scrollable content -- Returns string of the finished page and the actually chosen offset -- -- header : table of the header where each entry is one line -- content : table of the content where each entry is one line -- apply_scroll: scroll the content local function finalize_page(header, content, apply_scroll) local term_size = mp.get_property_native("term-size", {}) local term_width = o.term_width_limit or term_size.w or 80 local term_height = o.term_height_limit or term_size.h or 24 local from, to = 1, #content if apply_scroll and term_height > 0 then -- Up to 40 lines for libass because it can put a big performance toll on -- libass to process many lines which end up outside (below) the screen. -- In the terminal reduce height by 2 for the status line (can be more then one line) local max_content_lines = (o.use_ass and 40 or term_height - 2) - #header -- in the terminal the scrolling should stop once the last line is visible local max_offset = o.use_ass and #content or #content - max_content_lines + 1 from = max(1, min((pages[curr_page].offset or 1), max_offset)) to = min(#content, from + max_content_lines - 1) pages[curr_page].offset = from end local output = table.concat(header) .. table.concat(content, "", from, to) if not o.use_ass and term_width > 0 then local t = split(output, "\n", true) -- limit width for the terminal output = table.concat(term_ellipsis_array(t, 1, #t, term_width), "\n") end return output, from end -- Returns an ASS string with "normal" stats local function default_stats() local stats = {} eval_ass_formatting() add_header(stats) add_file(stats, true, false) add_video_out(stats) add_video(stats) add_audio(stats) return finalize_page({}, stats, false) end -- Returns an ASS string with extended VO stats local function vo_stats() local header, content = {}, {} eval_ass_formatting() add_header(header) append_perfdata(header, content, true) header = {table.concat(header)} return finalize_page(header, content, true) end local kbinfo_lines = nil local function keybinding_info(after_scroll, bindlist) local header = {} local page = pages[o.key_page_4] eval_ass_formatting() add_header(header) append(header, "", {prefix=format("%s:%s", page.desc, scroll_hint(true)), nl="", indent=""}) header = {table.concat(header)} if not kbinfo_lines or not after_scroll then kbinfo_lines = get_kbinfo_lines(o.term_width_limit) end return finalize_page(header, kbinfo_lines, not bindlist) end local function float2rational(x) local max_den = 100000 local m00, m01, m10, m11 = 1, 0, 0, 1 local a = math.floor(x) local frac = x - a while m10 * a + m11 <= max_den do local temp = m00 * a + m01 m01 = m00 m00 = temp temp = m10 * a + m11 m11 = m10 m10 = temp if frac == 0 then break end x = 1 / frac a = math.floor(x) frac = x - a end return m00, m10 end local function add_track(c, t, i) if not t then return end local type = t.image and "Image" or t["type"]:sub(1, 1):upper() .. t["type"]:sub(2) append(c, "", {prefix=type .. ":", nl=o.nl .. o.nl, indent=""}) append(c, t["title"], {prefix_sep="", nl="", indent=""}) append(c, t["id"], {prefix="ID:"}) append(c, t["src-id"], {prefix="Demuxer ID:", nl="", indent=o.prefix_sep .. o.prefix_sep}) append(c, t["program-id"], {prefix="Program ID:", nl="", indent=o.prefix_sep .. o.prefix_sep}) append(c, t["ff-index"], {prefix="FFmpeg Index:", nl="", indent=o.prefix_sep .. o.prefix_sep}) append(c, t["external-filename"], {prefix="File:"}) append(c, "", {prefix="Flags:"}) local flags = {"default", "forced", "dependent", "visual-impaired", "hearing-impaired", "image", "albumart", "external"} local any = false for _, flag in ipairs(flags) do if t[flag] then append(c, flag, {prefix=any and ", " or "", nl="", indent="", prefix_sep=""}) any = true end end if not any then table.remove(c) end if append(c, t["codec-desc"], {prefix="Format:"}) then append(c, t["codec-profile"], {prefix="[", nl="", indent=" ", prefix_sep="", no_prefix_markup=true, suffix="]"}) if t["codec"] ~= t["decoder"] then append(c, t["decoder"], {prefix="[", nl="", indent=" ", prefix_sep="", no_prefix_markup=true, suffix="]"}) end end append(c, t["lang"], {prefix="Language:"}) append(c, t["demux-channel-count"], {prefix="Channels:"}) append(c, t["demux-channels"], {prefix="Channel Layout:"}) append(c, t["demux-samplerate"], {prefix="Sample Rate:", suffix=" Hz"}) local function B(b) return b and string.format("%.2f", b / 1024) end local bitrate = append(c, B(t["demux-bitrate"]), {prefix="Bitrate:", suffix=" kbps"}) append(c, B(t["hls-bitrate"]), {prefix="HLS Bitrate:", suffix=" kbps", nl=bitrate and "" or o.nl, indent=bitrate and o.prefix_sep .. o.prefix_sep}) append_resolution(c, {w=t["demux-w"], h=t["demux-h"], ["crop-x"]=t["demux-crop-x"], ["crop-y"]=t["demux-crop-y"], ["crop-w"]=t["demux-crop-w"], ["crop-h"]=t["demux-crop-h"]}, "Resolution:") if not t["image"] and t["demux-fps"] then append_fps(c, "track-list/" .. i .. "/demux-fps", "") end append(c, t["demux-rotation"], {prefix="Rotation:"}) if t["demux-par"] then local num, den = float2rational(t["demux-par"]) append(c, string.format("%d:%d", num, den), {prefix="Pixel Aspect Ratio:"}) end local track_rg = t["replaygain-track-peak"] ~= nil or t["replaygain-track-gain"] ~= nil local album_rg = t["replaygain-album-peak"] ~= nil or t["replaygain-album-gain"] ~= nil if track_rg or album_rg then append(c, "", {prefix="Replay Gain:"}) end if track_rg then append(c, "", {prefix="Track:", indent=o.indent .. o.prefix_sep, prefix_sep=""}) append(c, t["replaygain-track-gain"], {prefix="Gain:", suffix=" dB", nl="", indent=o.prefix_sep}) append(c, t["replaygain-track-peak"], {prefix="Peak:", suffix=" dB", nl="", indent=o.prefix_sep}) end if album_rg then append(c, "", {prefix="Album:", indent=o.indent .. o.prefix_sep, prefix_sep=""}) append(c, t["replaygain-album-gain"], {prefix="Gain:", suffix=" dB", nl="", indent=o.prefix_sep}) append(c, t["replaygain-album-peak"], {prefix="Peak:", suffix=" dB", nl="", indent=o.prefix_sep}) end if t["dolby-vision-profile"] or t["dolby-vision-level"] then append(c, "", {prefix="Dolby Vision:"}) append(c, t["dolby-vision-profile"], {prefix="Profile:", nl="", indent=""}) append(c, t["dolby-vision-level"], {prefix="Level:", nl="", indent=t["dolby-vision-profile"] and o.prefix_sep .. o.prefix_sep or ""}) end end local function track_info() local h, c = {}, {} eval_ass_formatting() add_header(h) local desc = pages[o.key_page_5].desc append(h, "", {prefix=format("%s:%s", desc, scroll_hint()), nl="", indent=""}) h = {table.concat(h)} table.insert(c, o.nl .. o.nl) add_file(c, false, true) for i, track in ipairs(mp.get_property_native("track-list")) do if track['selected'] then add_track(c, track, i - 1) end end return finalize_page(h, c, true) end local function perf_stats() local header, content = {}, {} eval_ass_formatting() add_header(header) local page = pages[o.key_page_0] append(header, "", {prefix=format("%s:%s", page.desc, scroll_hint()), nl="", indent=""}) append_general_perfdata(content) header = {table.concat(header)} return finalize_page(header, content, true) end local function opt_time(t) if type(t) == type(1.1) then return mp.format_time(t) end return "?" end -- Returns an ASS string with stats about the demuxer cache etc. local function cache_stats() local stats = {} eval_ass_formatting() add_header(stats) append(stats, "", {prefix="Cache Info:", nl="", indent=""}) local info = mp.get_property_native("demuxer-cache-state") if info == nil then append(stats, "Unavailable.", {}) return finalize_page({}, stats, false) end local a = info["reader-pts"] local b = info["cache-end"] append(stats, opt_time(a) .. " - " .. opt_time(b), {prefix = "Packet Queue:"}) local r = nil if a ~= nil and b ~= nil then r = b - a end local r_graph = nil if not display_timer.oneshot and o.use_ass then r_graph = generate_graph(cache_ahead_buf, cache_ahead_buf.pos, cache_ahead_buf.len, cache_ahead_buf.max, nil, 0.8, 1) r_graph = o.prefix_sep .. r_graph end append(stats, opt_time(r), {prefix = "Readahead:", suffix = r_graph}) -- These states are not necessarily exclusive. They're about potentially -- separate mechanisms, whose states may be decoupled. local state = "reading" local seek_ts = info["debug-seeking"] if seek_ts ~= nil then state = "seeking (to " .. mp.format_time(seek_ts) .. ")" elseif info["eof"] == true then state = "eof" elseif info["underrun"] then state = "underrun" elseif info["idle"] == true then state = "inactive" end append(stats, state, {prefix = "State:"}) local speed = info["raw-input-rate"] or 0 local speed_graph = nil if not display_timer.oneshot and o.use_ass then speed_graph = generate_graph(cache_speed_buf, cache_speed_buf.pos, cache_speed_buf.len, cache_speed_buf.max, nil, 0.8, 1) speed_graph = o.prefix_sep .. speed_graph end append(stats, utils.format_bytes_humanized(speed) .. "/s", {prefix="Speed:", suffix=speed_graph}) append(stats, utils.format_bytes_humanized(info["total-bytes"]), {prefix = "Total RAM:"}) append(stats, utils.format_bytes_humanized(info["fw-bytes"]), {prefix = "Forward RAM:"}) local fc = info["file-cache-bytes"] if fc ~= nil then fc = utils.format_bytes_humanized(fc) else fc = "(disabled)" end append(stats, fc, {prefix = "Disk Cache:"}) append(stats, info["debug-low-level-seeks"], {prefix = "Media Seeks:"}) append(stats, info["debug-byte-level-seeks"], {prefix = "Stream Seeks:"}) append(stats, "", {prefix="Ranges:", nl=o.nl .. o.nl, indent=""}) append(stats, info["bof-cached"] and "yes" or "no", {prefix = "Start Cached:"}) append(stats, info["eof-cached"] and "yes" or "no", {prefix = "End Cached:"}) local ranges = info["seekable-ranges"] or {} for n, range in ipairs(ranges) do append(stats, mp.format_time(range["start"]) .. " - " .. mp.format_time(range["end"]), {prefix = format("Range %s:", n)}) end return finalize_page({}, stats, false) end -- Record 1 sample of cache statistics. -- (Unlike record_data(), this does not return a function, but runs directly.) local function record_cache_stats() local info = mp.get_property_native("demuxer-cache-state") if info == nil then return end local a = info["reader-pts"] local b = info["cache-end"] if a ~= nil and b ~= nil then graph_add_value(cache_ahead_buf, b - a) end graph_add_value(cache_speed_buf, info["raw-input-rate"] or 0) end cache_recorder_timer = mp.add_periodic_timer(0.25, record_cache_stats) cache_recorder_timer:kill() -- Current page and : mapping curr_page = o.key_page_1 pages = { [o.key_page_1] = { f = default_stats, desc = "Default" }, [o.key_page_2] = { f = vo_stats, desc = "Extended Frame Timings", scroll = true }, [o.key_page_3] = { f = cache_stats, desc = "Cache Statistics" }, [o.key_page_4] = { f = keybinding_info, desc = "Active Key Bindings", scroll = true }, [o.key_page_5] = { f = track_info, desc = "Selected Tracks Info", scroll = true }, [o.key_page_0] = { f = perf_stats, desc = "Internal Performance Info", scroll = true }, } -- Returns a function to record vsratio/jitter with the specified `skip` value local function record_data(skip) init_buffers() skip = max(skip, 0) local i = skip return function() if i < skip then i = i + 1 return else i = 0 end if o.plot_vsync_jitter then local r = mp.get_property_number("vsync-jitter") if r then vsjitter_buf.pos = (vsjitter_buf.pos % vsjitter_buf.len) + 1 vsjitter_buf[vsjitter_buf.pos] = r vsjitter_buf.max = max(vsjitter_buf.max, r) end end if o.plot_vsync_ratio then local r = mp.get_property_number("vsync-ratio") if r then vsratio_buf.pos = (vsratio_buf.pos % vsratio_buf.len) + 1 vsratio_buf[vsratio_buf.pos] = r vsratio_buf.max = max(vsratio_buf.max, r) end end end end -- Call the function for `page` and print it to OSD local function print_page(page, after_scroll) -- the page functions assume we start in ass-enabled mode. -- that's true for mp.set_osd_ass, but not for mp.osd_message. local ass_content = pages[page].f(after_scroll) if o.persistent_overlay then mp.set_osd_ass(0, 0, ass_content) else mp.osd_message((o.use_ass and ass_start or "") .. ass_content, display_timer.oneshot and o.duration or o.redraw_delay + 1) end end local function update_scale(value) local scale_with_video if o.vidscale == "auto" then scale_with_video = mp.get_property_native("osd-scale-by-window") else scale_with_video = o.vidscale == "yes" end -- Calculate scaled metrics. local scale = 1 if not scale_with_video and value > 0 then scale = 720 / value end font_size = o.font_size * scale border_size = o.border_size * scale shadow_x_offset = o.shadow_x_offset * scale shadow_y_offset = o.shadow_y_offset * scale plot_bg_border_width = o.plot_bg_border_width * scale if display_timer:is_enabled() then print_page(curr_page) end end local function handle_osd_height_update(_, value) update_scale(value) end local function handle_osd_scale_by_window_update() local value = mp.get_property_native("osd-height") update_scale(value) end local function clear_screen() if o.persistent_overlay then mp.set_osd_ass(0, 0, "") else mp.osd_message("", 0) end end local function scroll_delta(d) if display_timer.oneshot then display_timer:kill() ; display_timer:resume() end pages[curr_page].offset = (pages[curr_page].offset or 1) + d print_page(curr_page, true) end local function scroll_up() scroll_delta(-o.scroll_lines) end local function scroll_down() scroll_delta(o.scroll_lines) end local function reset_scroll_offsets() for _, page in pairs(pages) do page.offset = nil end end local function bind_scroll() if not scroll_bound then mp.add_forced_key_binding(o.key_scroll_up, "__forced_" .. o.key_scroll_up, scroll_up, {repeatable=true}) mp.add_forced_key_binding(o.key_scroll_down, "__forced_" .. o.key_scroll_down, scroll_down, {repeatable=true}) scroll_bound = true end end local function unbind_scroll() if scroll_bound then mp.remove_key_binding("__forced_"..o.key_scroll_up) mp.remove_key_binding("__forced_"..o.key_scroll_down) scroll_bound = false end end local function filter_bindings() input.get({ prompt = "Filter bindings:", opened = function () -- This is necessary to close the console if the oneshot -- display_timer expires without typing anything. searched_text = "" end, edited = function (text) reset_scroll_offsets() searched_text = text:lower() print_page(curr_page) if display_timer.oneshot then display_timer:kill() display_timer:resume() end end, submit = input.terminate, closed = function () searched_text = nil if display_timer:is_enabled() then print_page(curr_page) if display_timer.oneshot then display_timer:kill() display_timer:resume() end end end, }) end local function bind_search() mp.add_forced_key_binding(o.key_search, "__forced_"..o.key_search, filter_bindings) end local function unbind_search() mp.remove_key_binding("__forced_"..o.key_search) end local function update_scroll_bindings(k) if pages[k].scroll then bind_scroll() else unbind_scroll() end if k == o.key_page_4 then bind_search() else unbind_search() end end -- Add keybindings for every page local function add_page_bindings() local function a(k) return function() reset_scroll_offsets() update_scroll_bindings(k) curr_page = k print_page(k) if display_timer.oneshot then display_timer:kill() ; display_timer:resume() end end end for k, _ in pairs(pages) do mp.add_forced_key_binding(k, "__forced_"..k, a(k), {repeatable=true}) end update_scroll_bindings(curr_page) end -- Remove keybindings for every page local function remove_page_bindings() for k, _ in pairs(pages) do mp.remove_key_binding("__forced_"..k) end unbind_scroll() unbind_search() end local function process_key_binding(oneshot) reset_scroll_offsets() -- Stats are already being displayed if display_timer:is_enabled() then -- Previous and current keys were oneshot -> restart timer if display_timer.oneshot and oneshot then display_timer:kill() print_page(curr_page) display_timer:resume() -- Previous and current keys were toggling -> end toggling elseif not display_timer.oneshot and not oneshot then display_timer:kill() cache_recorder_timer:stop() if tm_viz_prev ~= nil then mp.set_property_native("tone-mapping-visualize", tm_viz_prev) tm_viz_prev = nil end clear_screen() remove_page_bindings() if recorder then mp.unobserve_property(recorder) recorder = nil end end -- No stats are being displayed yet else if not oneshot and (o.plot_vsync_jitter or o.plot_vsync_ratio) then recorder = record_data(o.skip_frames) -- Rely on the fact that "vsync-ratio" is updated at the same time. -- Using "none" to get a sample any time, even if it does not change. -- Will stop working if "vsync-jitter" property change notification -- changes, but it's fine for an internal script. mp.observe_property("vsync-jitter", "none", recorder) end if not oneshot and o.plot_tonemapping_lut then tm_viz_prev = mp.get_property_native("tone-mapping-visualize") mp.set_property_native("tone-mapping-visualize", true) end if not oneshot then cache_ahead_buf = {0, pos = 1, len = 50, max = 0} cache_speed_buf = {0, pos = 1, len = 50, max = 0} cache_recorder_timer:resume() end display_timer:kill() display_timer.oneshot = oneshot display_timer.timeout = oneshot and o.duration or o.redraw_delay add_page_bindings() print_page(curr_page) display_timer:resume() end end -- Create the timer used for redrawing (toggling) or clearing the screen (oneshot) -- The duration here is not important and always set in process_key_binding() display_timer = mp.add_periodic_timer(o.duration, function() if display_timer.oneshot then display_timer:kill() ; clear_screen() ; remove_page_bindings() -- Close the console only if it was opened for searching bindings. if searched_text then input.terminate() end else print_page(curr_page) end end) display_timer:kill() -- Single invocation key binding mp.add_key_binding(nil, "display-stats", function() process_key_binding(true) end, {repeatable=true}) -- Toggling key binding mp.add_key_binding(nil, "display-stats-toggle", function() process_key_binding(false) end, {repeatable=false}) -- Single invocation bindings without key, can be used in input.conf to create -- bindings for a specific page: "e script-binding stats/display-page-2" for k, _ in pairs(pages) do mp.add_key_binding(nil, "display-page-" .. k, function() curr_page = k process_key_binding(true) end, {repeatable=true}) end -- Reprint stats immediately when VO was reconfigured, only when toggled mp.register_event("video-reconfig", function() if display_timer:is_enabled() then print_page(curr_page) end end) -- --script-opts=stats-bindlist=[-]{yes|} if o.bindlist ~= "no" then mp.command("no-osd set really-quiet yes") if o.bindlist:sub(1, 1) == "-" then o.bindlist = o.bindlist:sub(2) o.no_ass_b0 = "" o.no_ass_b1 = "" end local width = max(40, math.floor(tonumber(o.bindlist) or 79)) mp.add_timeout(0, function() -- wait for all other scripts to finish init o.ass_formatting = false o.no_ass_indent = " " o.term_size = { w = width , h = 0} io.write(keybinding_info(false, true) .. "\n") mp.command("quit") end) end mp.observe_property('osd-height', 'native', handle_osd_height_update) mp.observe_property('osd-scale-by-window', 'native', handle_osd_scale_by_window_update) -- Copyright (C) 2019 the mpv developers -- -- Permission to use, copy, modify, and/or distribute this software for any -- purpose with or without fee is hereby granted, provided that the above -- copyright notice and this permission notice appear in all copies. -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -- SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -- OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. local utils = require 'mp.utils' local assdraw = require 'mp.assdraw' -- Default options local opts = { font = "", font_size = 16, border_size = 1, case_sensitive = true, history_dedup = true, font_hw_ratio = 'auto', } local function detect_platform() local platform = mp.get_property_native('platform') if platform == 'darwin' or platform == 'windows' then return platform elseif os.getenv('WAYLAND_DISPLAY') then return 'wayland' end return 'x11' end -- Pick a better default font for Windows and macOS local platform = detect_platform() if platform == 'windows' then opts.font = 'Consolas' opts.case_sensitive = false elseif platform == 'darwin' then opts.font = 'Menlo' else opts.font = 'monospace' end -- Apply user-set options require 'mp.options'.read_options(opts) local styles = { -- Colors are stolen from base16 Eighties by Chris Kempson -- and converted to BGR as is required by ASS. -- 2d2d2d 393939 515151 697374 -- 939fa0 c8d0d3 dfe6e8 ecf0f2 -- 7a77f2 5791f9 66ccff 99cc99 -- cccc66 cc9966 cc99cc 537bd2 debug = '{\\1c&Ha09f93&}', v = '{\\1c&H99cc99&}', warn = '{\\1c&H66ccff&}', error = '{\\1c&H7a77f2&}', fatal = '{\\1c&H5791f9&}', suggestion = '{\\1c&Hcc99cc&}', selected_suggestion = '{\\1c&H2fbdfa&\\b1}', disabled = '{\\1c&Hcccccc&}', } local terminal_styles = { debug = '\027[90m', v = '\027[32m', warn = '\027[33m', error = '\027[31m', fatal = '\027[91m', selected_suggestion = '\027[7m', disabled = '\027[38;5;8m', } local repl_active = false local insert_mode = false local pending_update = false local line = '' local cursor = 1 local default_prompt = '>' local prompt = default_prompt local default_id = 'default' local id = default_id local histories = {[id] = {}} local history = histories[id] local history_pos = 1 local searching_history = false local log_buffers = {[id] = {}} local key_bindings = {} local global_margins = { t = 0, b = 0 } local input_caller local suggestion_buffer = {} local selected_suggestion_index local completion_pos local completion_append local path_separator = platform == 'windows' and '\\' or '/' local completion_old_line local completion_old_cursor local selectable_items local matches = {} local selected_match = 1 local first_match_to_print = 1 local set_active -- Naive helper function to find the next UTF-8 character in 'str' after 'pos' -- by skipping continuation bytes. Assumes 'str' contains valid UTF-8. local function next_utf8(str, pos) if pos > str:len() then return pos end repeat pos = pos + 1 until pos > str:len() or str:byte(pos) < 0x80 or str:byte(pos) > 0xbf return pos end -- As above, but finds the previous UTF-8 character in 'str' before 'pos' local function prev_utf8(str, pos) if pos <= 1 then return pos end repeat pos = pos - 1 until pos <= 1 or str:byte(pos) < 0x80 or str:byte(pos) > 0xbf return pos end local function len_utf8(str) local len = 0 local pos = 1 while pos <= str:len() do pos = next_utf8(str, pos) len = len + 1 end return len end local function truncate_utf8(str, max_length) local len = 0 local pos = 1 while pos <= #str do local last_pos = pos pos = next_utf8(str, pos) len = len + 1 if pos > last_pos + 1 then if len == max_length - 1 then pos = last_pos else len = len + 1 end end if len == max_length - 1 then return str:sub(1, pos - 1) .. '⋯' end end return str end -- Functions to calculate the font width. local width_length_ratio = 0.5 local osd_width, osd_height = 100, 100 ---Update osd resolution if valid local function update_osd_resolution() local dim = mp.get_property_native('osd-dimensions') if not dim or dim.w == 0 or dim.h == 0 then return end osd_width = dim.w osd_height = dim.h end local text_osd = mp.create_osd_overlay('ass-events') text_osd.compute_bounds, text_osd.hidden = true, true local function measure_bounds(ass_text) update_osd_resolution() text_osd.res_x, text_osd.res_y = osd_width, osd_height text_osd.data = ass_text local res = text_osd:update() return res.x0, res.y0, res.x1, res.y1 end ---Measure text width and normalize to a font size of 1 ---text has to be ass safe local function normalized_text_width(text, size, horizontal) local align, rotation = horizontal and 7 or 1, horizontal and 0 or -90 local template = '{\\pos(0,0)\\rDefault\\blur0\\bord0\\shad0\\q2\\an%s\\fs%s\\fn%s\\frz%s}%s' size = size / 0.8 local width -- Limit to 5 iterations local repetitions_left = 5 for i = 1, repetitions_left do size = size * 0.8 local ass = assdraw.ass_new() ass.text = template:format(align, size, opts.font, rotation, text) local _, _, x1, y1 = measure_bounds(ass.text) -- Check if nothing got clipped if x1 and x1 < osd_width and y1 < osd_height then width = horizontal and x1 or y1 break end if i == repetitions_left then width = 0 end end return width / size, horizontal and osd_width or osd_height end local function fit_on_osd(text) local estimated_width = #text * width_length_ratio if osd_width >= osd_height then -- Fill the osd as much as possible, bigger is more accurate. return math.min(osd_width / estimated_width, osd_height), true else return math.min(osd_height / estimated_width, osd_width), false end end local measured_font_hw_ratio = nil local function get_font_hw_ratio() local font_hw_ratio = tonumber(opts.font_hw_ratio) if font_hw_ratio then return font_hw_ratio end if not measured_font_hw_ratio then local alphabet = 'abcdefghijklmnopqrstuvwxyz' local text = alphabet:rep(3) update_osd_resolution() local size, horizontal = fit_on_osd(text) local normalized_width = normalized_text_width(text, size * 0.9, horizontal) measured_font_hw_ratio = #text / normalized_width * 0.95 end return measured_font_hw_ratio end -- Escape a string for verbatim display on the OSD local function ass_escape(str) return mp.command_native({'escape-ass', str}) end local function calculate_max_log_lines() if not mp.get_property_native('vo-configured') or not mp.get_property_native('video-osd') then -- Subtract 1 for the input line and for each line in the status line. -- This does not detect wrapped lines. return mp.get_property_native('term-size/h', 24) - 2 - select(2, mp.get_property('term-status-msg'):gsub('\\n', '')) end return math.floor(mp.get_property_native('osd-height') / mp.get_property_native('display-hidpi-scale', 1) * (1 - global_margins.t - global_margins.b) / opts.font_size -- Subtract 1 for the input line and 1 for the newline -- between the log and the input line. - 2) end -- Takes a list of strings, a max width in characters and -- optionally a max row count. -- The result contains at least one column. -- Rows are cut off from the top if rows_max is specified. -- returns a string containing the formatted table and the row count local function format_table(list, width_max, rows_max) if #list == 0 then return '', 0 end local spaces_min = 2 local spaces_max = 8 local list_size = #list local column_count = 1 local row_count = list_size local column_widths -- total width without spacing local width_total = 0 local list_widths = {} for i, item in ipairs(list) do list_widths[i] = len_utf8(item) end -- use as many columns as possible for columns = 2, list_size do local rows_lower_bound = math.min(rows_max, math.ceil(list_size / columns)) local rows_upper_bound = math.min(rows_max, list_size, math.ceil(list_size / (columns - 1) - 1)) for rows = rows_upper_bound, rows_lower_bound, -1 do local cw = {} width_total = 0 -- find out width of each column for column = 1, columns do local width = 0 for row = 1, rows do local i = row + (column - 1) * rows local item_width = list_widths[i] if not item_width then break end if width < item_width then width = item_width end end cw[column] = width width_total = width_total + width if width_total + (columns - 1) * spaces_min > width_max then break end end if width_total + (columns - 1) * spaces_min <= width_max then row_count = rows column_count = columns column_widths = cw else break end end if width_total + (columns - 1) * spaces_min > width_max then break end end local spaces = math.floor((width_max - width_total) / (column_count - 1)) spaces = math.max(spaces_min, math.min(spaces_max, spaces)) local spacing = column_count > 1 and ass_escape(string.format('%' .. spaces .. 's', ' ')) or '' local rows = {} for row = 1, row_count do local columns = {} for column = 1, column_count do local i = row + (column - 1) * row_count if i > #list then break end -- more then 99 leads to 'invalid format (width or precision too long)' local format_string = column == column_count and '%s' or '%-' .. math.min(column_widths[column], 99) .. 's' columns[column] = ass_escape(string.format(format_string, list[i])) if i == selected_suggestion_index then columns[column] = styles.selected_suggestion .. columns[column] .. '{\\b0}'.. styles.suggestion end end -- first row is at the bottom rows[row_count - row + 1] = table.concat(columns, spacing) end return table.concat(rows, ass_escape('\n')), row_count end local function fuzzy_find(needle, haystacks) local result = require 'mp.fzy'.filter(needle, haystacks) if line ~= '' then -- Prevent table.sort() from reordering the items. table.sort(result, function (i, j) return i[3] > j[3] end) end for i, value in ipairs(result) do result[i] = value[1] end return result end local function calculate_max_terminal_width() local max_width = mp.get_property_native('term-size/w', 80) -- The longest module name is vo/gpu-next/libplacebo. if mp.get_property_native('msg-module') then max_width = max_width - 24 end if mp.get_property_native('msg-time') then max_width = max_width - 13 end return max_width end local function populate_log_with_matches(max_width) if not selectable_items or selected_match == 0 then return end log_buffers[id] = {} local log = log_buffers[id] local max_log_lines = calculate_max_log_lines() if selected_match < first_match_to_print then first_match_to_print = selected_match end if first_match_to_print > 1 then -- Reserve the first line for "n hidden items". max_log_lines = max_log_lines - 1 end if selected_match > first_match_to_print + max_log_lines - 1 then -- Reserve the first line for "n hidden items" if it wasn't already. if first_match_to_print == 1 then max_log_lines = max_log_lines - 1 end first_match_to_print = selected_match - max_log_lines + 1 end local last_match_to_print = math.min(first_match_to_print + max_log_lines - 1, #matches) if last_match_to_print < #matches then -- Reserve the last line for "n hidden items". last_match_to_print = last_match_to_print - 1 -- After decrementing the last match to print, we need to check if the -- selected match is beyond the last match to print again, and shift -- both the first and last match to print when it is. if selected_match > last_match_to_print then if first_match_to_print == 1 then -- Reserve the first line for "2 hidden items". first_match_to_print = first_match_to_print + 1 end first_match_to_print = first_match_to_print + 1 last_match_to_print = last_match_to_print + 1 end end -- When there is only 1 hidden item, print it in the previously reserved -- line instead of printing "1 hidden items". if first_match_to_print == 2 then first_match_to_print = 1 end if last_match_to_print == #matches - 1 then last_match_to_print = #matches end if first_match_to_print > 1 then log[1] = { text = '↑ (' .. (first_match_to_print - 1) .. ' hidden items)', style = styles.disabled, terminal_style = terminal_styles.disabled, } end for i = first_match_to_print, last_match_to_print do log[#log + 1] = { text = (max_width and truncate_utf8(matches[i].text, max_width) or matches[i].text), style = i == selected_match and styles.selected_suggestion or '', terminal_style = i == selected_match and terminal_styles.selected_suggestion or '', } end if last_match_to_print < #matches then log[#log + 1] = { text = '↓ (' .. (#matches - last_match_to_print) .. ' hidden items)', style = styles.disabled, terminal_style = terminal_styles.disabled, } end end local function print_to_terminal() -- Clear the log after closing the console. if not repl_active then mp.osd_message('') return end populate_log_with_matches(calculate_max_terminal_width()) local log = '' for _, log_line in ipairs(log_buffers[id]) do log = log .. log_line.terminal_style .. log_line.text .. '\027[0m\n' end local suggestions = '' for i, suggestion in ipairs(suggestion_buffer) do if i == selected_suggestion_index then suggestions = suggestions .. terminal_styles.selected_suggestion .. suggestion .. '\027[0m' else suggestions = suggestions .. suggestion end suggestions = suggestions .. (i < #suggestion_buffer and '\t' or '\n') end local before_cur = line:sub(1, cursor - 1) local after_cur = line:sub(cursor) -- Ensure there is a character with inverted colors to print. if after_cur == '' then after_cur = ' ' end mp.osd_message(log .. suggestions .. prompt .. ' ' .. before_cur .. '\027[7m' .. after_cur:sub(1, 1) .. '\027[0m' .. after_cur:sub(2), 999) end -- Render the REPL and console as an ASS OSD local function update() pending_update = false -- Unlike vo-configured, current-vo doesn't become falsy while switching VO, -- which would print the log to the OSD. if not mp.get_property('current-vo') or not mp.get_property_native('video-osd') then print_to_terminal() return end -- Clear the OSD if the REPL is not active if not repl_active then mp.set_osd_ass(0, 0, '') return end local screenx, screeny = mp.get_osd_size() local dpi_scale = mp.get_property_native('display-hidpi-scale', 1) screenx = screenx / dpi_scale screeny = screeny / dpi_scale local bottom_left_margin = 6 local coordinate_top = math.floor(global_margins.t * screeny + 0.5) local clipping_coordinates = '0,' .. coordinate_top .. ',' .. screenx .. ',' .. screeny local ass = assdraw.ass_new() local has_shadow = mp.get_property('osd-border-style'):find('box$') == nil local style = '{\\r' .. '\\1a&H00&\\3a&H00&\\1c&Heeeeee&\\3c&H111111&' .. (has_shadow and '\\4a&H99&\\4c&H000000&' or '') .. '\\fn' .. opts.font .. '\\fs' .. opts.font_size .. '\\bord' .. opts.border_size .. '\\xshad0\\yshad1\\fsp0' .. (selectable_items and '\\q2' or '\\q1') .. '\\clip(' .. clipping_coordinates .. ')}' -- Create the cursor glyph as an ASS drawing. ASS will draw the cursor -- inline with the surrounding text, but it sets the advance to the width -- of the drawing. So the cursor doesn't affect layout too much, make it as -- thin as possible and make it appear to be 1px wide by giving it 0.5px -- horizontal borders. local cheight = opts.font_size * 8 local cglyph = '{\\rDefault' .. (mp.get_property_native('focused') == false and '\\alpha&HFF&' or '\\1a&H44&\\3a&H44&\\4a&H99&') .. '\\1c&Heeeeee&\\3c&Heeeeee&\\4c&H000000&' .. '\\xbord0.5\\ybord0\\xshad0\\yshad1\\p4\\pbo24}' .. 'm 0 0 l 1 0 l 1 ' .. cheight .. ' l 0 ' .. cheight .. '{\\p0}' local before_cur = ass_escape(line:sub(1, cursor - 1)) local after_cur = ass_escape(line:sub(cursor)) -- Render log messages as ASS. -- This will render at most screeny / font_size - 1 messages. local lines_max = calculate_max_log_lines() -- Estimate how many characters fit in one line local width_max = math.floor((screenx - bottom_left_margin - mp.get_property_native('osd-margin-x') * 2 * screeny / 720) / opts.font_size * get_font_hw_ratio()) local suggestions, rows = format_table(suggestion_buffer, width_max, lines_max) local suggestion_ass = style .. styles.suggestion .. suggestions populate_log_with_matches() local log_ass = '' local log_buffer = log_buffers[id] local log_messages = #log_buffer local log_max_lines = math.max(0, lines_max - rows) if log_max_lines < log_messages then log_messages = log_max_lines end for i = #log_buffer - log_messages + 1, #log_buffer do log_ass = log_ass .. style .. log_buffer[i].style .. ass_escape(log_buffer[i].text) .. '\\N' end ass:new_event() ass:an(1) ass:pos(bottom_left_margin, screeny - bottom_left_margin - global_margins.b * screeny) ass:append(log_ass .. '\\N') if #suggestions > 0 then ass:append(suggestion_ass .. '\\N') end ass:append(style .. ass_escape(prompt) .. ' ' .. before_cur) ass:append(cglyph) ass:append(style .. after_cur) -- Redraw the cursor with the REPL text invisible. This will make the -- cursor appear in front of the text. ass:new_event() ass:an(1) ass:pos(bottom_left_margin, screeny - bottom_left_margin - global_margins.b * screeny) ass:append(style .. '{\\alpha&HFF&}' .. ass_escape(prompt) .. ' ' .. before_cur) ass:append(cglyph) ass:append(style .. '{\\alpha&HFF&}' .. after_cur) mp.set_osd_ass(screenx, screeny, ass.text) end local update_timer = nil update_timer = mp.add_periodic_timer(0.05, function() if pending_update then update() else update_timer:kill() end end) update_timer:kill() -- Add a line to the log buffer (which is limited to 100 lines) local function log_add(text, style, terminal_style) local log_buffer = log_buffers[id] log_buffer[#log_buffer + 1] = { text = text, style = style or '', terminal_style = terminal_style or '', } if #log_buffer > 100 then table.remove(log_buffer, 1) end if repl_active then if not update_timer:is_enabled() then update() update_timer:resume() else pending_update = true end end end -- Add a line to the history and deduplicate local function history_add(text) if opts.history_dedup then -- More recent entries are more likely to be repeated for i = #history, 1, -1 do if history[i] == text then table.remove(history, i) break end end end history[#history + 1] = text end local function handle_edit() if selectable_items then matches = {} selected_match = 1 for i, match in ipairs(fuzzy_find(line, selectable_items)) do matches[i] = { index = match, text = selectable_items[match] } end end suggestion_buffer = {} update() if input_caller then mp.commandv('script-message-to', input_caller, 'input-event', 'edited', utils.format_json({line})) end end -- Insert a character at the current cursor position (any_unicode) local function handle_char_input(c) if insert_mode then line = line:sub(1, cursor - 1) .. c .. line:sub(next_utf8(line, cursor)) else line = line:sub(1, cursor - 1) .. c .. line:sub(cursor) end cursor = cursor + #c handle_edit() end -- Remove the character behind the cursor (Backspace) local function handle_backspace() if cursor <= 1 then return end local prev = prev_utf8(line, cursor) line = line:sub(1, prev - 1) .. line:sub(cursor) cursor = prev handle_edit() end -- Remove the character in front of the cursor (Del) local function handle_del() if cursor > line:len() then return end line = line:sub(1, cursor - 1) .. line:sub(next_utf8(line, cursor)) handle_edit() end -- Toggle insert mode (Ins) local function handle_ins() insert_mode = not insert_mode end -- Move the cursor to the next character (Right) local function next_char() cursor = next_utf8(line, cursor) suggestion_buffer = {} update() end -- Move the cursor to the previous character (Left) local function prev_char() cursor = prev_utf8(line, cursor) suggestion_buffer = {} update() end -- Clear the current line (Ctrl+C) local function clear() line = '' cursor = 1 insert_mode = false history_pos = #history + 1 handle_edit() end -- Close the REPL if the current line is empty, otherwise delete the next -- character (Ctrl+D) local function maybe_exit() if line == '' then set_active(false) else handle_del() end end local function help_command(param) local cmdlist = mp.get_property_native('command-list') table.sort(cmdlist, function(c1, c2) return c1.name < c2.name end) local output = '' if param == '' then output = 'Available commands:\n' for _, cmd in ipairs(cmdlist) do output = output .. ' ' .. cmd.name end output = output .. '\n' output = output .. 'Use "help command" to show information about a command.\n' output = output .. "ESC or Ctrl+d exits the console.\n" else local cmd = nil for _, curcmd in ipairs(cmdlist) do if curcmd.name:find(param, 1, true) then cmd = curcmd if curcmd.name == param then break -- exact match end end end if not cmd then log_add('No command matches "' .. param .. '"!', styles.error, terminal_styles.error) return end output = output .. 'Command "' .. cmd.name .. '"\n' for _, arg in ipairs(cmd.args) do output = output .. ' ' .. arg.name .. ' (' .. arg.type .. ')' if arg.optional then output = output .. ' (optional)' end output = output .. '\n' end if cmd.vararg then output = output .. 'This command supports variable arguments.\n' end end log_add(output:sub(1, -2)) end -- Run the current command and clear the line (Enter) local function handle_enter() if searching_history then searching_history = false selectable_items = nil line = #matches > 0 and matches[selected_match].text or '' cursor = #line + 1 log_buffers[id] = {} update() return end if line == '' and input_caller == nil then return end if history[#history] ~= line and line ~= '' then history_add(line) end if selectable_items then if #matches > 0 then mp.commandv('script-message-to', input_caller, 'input-event', 'submit', utils.format_json({matches[selected_match].index})) end set_active(false) elseif input_caller then mp.commandv('script-message-to', input_caller, 'input-event', 'submit', utils.format_json({line})) else -- match "help []", return or "", strip all whitespace local help = line:match('^%s*help%s+(.-)%s*$') or (line:match('^%s*help$') and '') if help then help_command(help) else mp.command(line) end end clear() end -- Go to the specified position in the command history local function go_history(new_pos) local old_pos = history_pos history_pos = new_pos -- Restrict the position to a legal value if history_pos > #history + 1 then history_pos = #history + 1 elseif history_pos < 1 then history_pos = 1 end -- Do nothing if the history position didn't actually change if history_pos == old_pos then return end -- If the user was editing a non-history line, save it as the last history -- entry. This makes it much less frustrating to accidentally hit Up/Down -- while editing a line. if old_pos == #history + 1 and line ~= '' and history[#history] ~= line then history_add(line) end -- Now show the history line (or a blank line for #history + 1) if history_pos <= #history then line = history[history_pos] else line = '' end cursor = line:len() + 1 insert_mode = false suggestion_buffer = {} update() end -- Go to the specified relative position in the command history (Up, Down) local function move_history(amount) if selectable_items then selected_match = selected_match + amount if selected_match > #matches then selected_match = 1 elseif selected_match < 1 then selected_match = #matches end update() return end go_history(history_pos + amount) end -- Go to the first command in the command history (PgUp) local function handle_pgup() if selectable_items then -- We don't know whether to count the "n hidden items" lines here; an -- offset of 2 is better with 1 extra line because it scrolls from the -- last to the first visible match, while with both extra lines that is -- done with +3. When there are no "n hidden items" lines selected_match -- becomes 1 with any offset >= 1. selected_match = math.max(selected_match - calculate_max_log_lines() + 2, 1) update() return end go_history(1) end -- Stop browsing history and start editing a blank line (PgDown) local function handle_pgdown() if selectable_items then selected_match = math.min(selected_match + calculate_max_log_lines() - 2, #matches) update() return end go_history(#history + 1) end local function search_history() if selectable_items or #history == 0 then return end searching_history = true selectable_items = {} matches = {} selected_match = 1 first_match_to_print = 1 for i = 1, #history do selectable_items[i] = history[#history + 1 - i] end for i, match in ipairs(fuzzy_find(line, selectable_items)) do matches[i] = { index = match, text = selectable_items[match] } end update() end local function page_up_or_prev_char() if selectable_items then handle_pgup() else prev_char() end end local function page_down_or_next_char() if selectable_items then handle_pgdown() else next_char() end end -- Move to the start of the current word, or if already at the start, the start -- of the previous word. (Ctrl+Left) local function prev_word() -- This is basically the same as next_word() but backwards, so reverse the -- string in order to do a "backwards" find. This wouldn't be as annoying -- to do if Lua didn't insist on 1-based indexing. cursor = line:len() - select(2, line:reverse():find('%s*[^%s]*', line:len() - cursor + 2)) + 1 suggestion_buffer = {} update() end -- Move to the end of the current word, or if already at the end, the end of -- the next word. (Ctrl+Right) local function next_word() cursor = select(2, line:find('%s*[^%s]*', cursor)) + 1 suggestion_buffer = {} update() end -- Move the cursor to the beginning of the line (HOME) local function go_home() cursor = 1 suggestion_buffer = {} update() end -- Move the cursor to the end of the line (END) local function go_end() cursor = line:len() + 1 suggestion_buffer = {} update() end -- Delete from the cursor to the beginning of the word (Ctrl+Backspace) local function del_word() local before_cur = line:sub(1, cursor - 1) local after_cur = line:sub(cursor) before_cur = before_cur:gsub('[^%s]+%s*$', '', 1) line = before_cur .. after_cur cursor = before_cur:len() + 1 handle_edit() end -- Delete from the cursor to the end of the word (Ctrl+Del) local function del_next_word() if cursor > line:len() then return end local before_cur = line:sub(1, cursor - 1) local after_cur = line:sub(cursor) after_cur = after_cur:gsub('^%s*[^%s]+', '', 1) line = before_cur .. after_cur handle_edit() end -- Delete from the cursor to the end of the line (Ctrl+K) local function del_to_eol() line = line:sub(1, cursor - 1) handle_edit() end -- Delete from the cursor back to the start of the line (Ctrl+U) local function del_to_start() line = line:sub(cursor) cursor = 1 handle_edit() end -- Empty the log buffer of all messages (Ctrl+L) local function clear_log_buffer() log_buffers[id] = {} update() end -- Returns a string of UTF-8 text from the clipboard (or the primary selection) local function get_clipboard(clip) if platform == 'x11' then local res = utils.subprocess({ args = { 'xclip', '-selection', clip and 'clipboard' or 'primary', '-out' }, playback_only = false, }) if not res.error then return res.stdout end elseif platform == 'wayland' then local res = utils.subprocess({ args = { 'wl-paste', clip and '-n' or '-np' }, playback_only = false, }) if not res.error then return res.stdout end elseif platform == 'windows' then local res = utils.subprocess({ args = { 'powershell', '-NoProfile', '-Command', [[& { Trap { Write-Error -ErrorRecord $_ Exit 1 } $clip = "" if (Get-Command "Get-Clipboard" -errorAction SilentlyContinue) { $clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText } else { Add-Type -AssemblyName PresentationCore $clip = [Windows.Clipboard]::GetText() } $clip = $clip -Replace "`r","" $u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip) [Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length) }]] }, playback_only = false, }) if not res.error then return res.stdout end elseif platform == 'darwin' then local res = utils.subprocess({ args = { 'pbpaste' }, playback_only = false, }) if not res.error then return res.stdout end end return '' end -- Paste text from the window-system's clipboard. 'clip' determines whether the -- clipboard or the primary selection buffer is used (on X11 and Wayland only.) local function paste(clip) local text = get_clipboard(clip) local before_cur = line:sub(1, cursor - 1) local after_cur = line:sub(cursor) line = before_cur .. text .. after_cur cursor = cursor + text:len() handle_edit() end local function text_input(info) if info.key_text and (info.event == "press" or info.event == "down" or info.event == "repeat") then handle_char_input(info.key_text) end end local function command_list() local commands = {} for i, command in ipairs(mp.get_property_native('command-list')) do commands[i] = command.name end return commands end local function property_list() local properties = mp.get_property_native('property-list') for _, sub_property in pairs({'video', 'audio', 'sub', 'sub2'}) do properties[#properties + 1] = 'current-tracks/' .. sub_property end for _, option in ipairs(mp.get_property_native('options')) do properties[#properties + 1] = 'options/' .. option properties[#properties + 1] = 'file-local-options/' .. option properties[#properties + 1] = 'option-info/' .. option for _, sub_property in pairs({ 'name', 'type', 'set-from-commandline', 'set-locally', 'expects-file', 'default-value', 'min', 'max', 'choices', }) do properties[#properties + 1] = 'option-info/' .. option .. '/' .. sub_property end end return properties end local function profile_list() local profiles = {} for i, profile in ipairs(mp.get_property_native('profile-list')) do profiles[i] = profile.name end return profiles end local function list_option_list() local options = {} -- Don't log errors for renamed and removed properties. -- (Just mp.enable_messages('fatal') still logs them to the terminal.) local msg_level_backup = mp.get_property('msg-level') mp.set_property('msg-level', msg_level_backup == '' and 'cplayer=no' or msg_level_backup .. ',cplayer=no') for _, option in pairs(mp.get_property_native('options')) do if mp.get_property('option-info/' .. option .. '/type', ''):find(' list$') then options[#options + 1] = option end end mp.set_property('msg-level', msg_level_backup) return options end local function list_option_action_list(option) local type = mp.get_property('option-info/' .. option .. '/type') if type == 'Key/value list' then return {'add', 'append', 'set', 'remove'} end if type == 'String list' or type == 'Object settings list' then return {'add', 'append', 'clr', 'pre', 'set', 'remove', 'toggle'} end end local function list_option_value_list(option) local values = mp.get_property_native(option) if type(values) ~= 'table' then return end if type(values[1]) ~= 'table' then return values end for i, value in ipairs(values) do values[i] = value.label and '@' .. value.label or value.name end return values end local function has_file_argument(candidate_command) for _, command in pairs(mp.get_property_native('command-list')) do if command.name == candidate_command then return command.args[1] and (command.args[1].name == 'filename' or command.args[1].name == 'url') end end end local function file_list(directory) if directory == '' then directory = '.' end local files = utils.readdir(directory, 'files') or {} for _, dir in pairs(utils.readdir(directory, 'dirs') or {}) do files[#files + 1] = dir .. path_separator end return files end local function handle_file_completion(before_cur, path_pos) local directory, last_component_pos = before_cur:sub(path_pos):match('(.-)()[^' .. path_separator ..']*$') completion_pos = path_pos + last_component_pos - 1 if directory:find('^~' .. path_separator) then local home = mp.command_native({'expand-path', '~/'}) before_cur = before_cur:sub(1, completion_pos - #directory - 1) .. home .. before_cur:sub(completion_pos - #directory + 1) directory = home .. directory:sub(2) completion_pos = completion_pos + #home - 1 end -- Don't use completion_append for file completion to not add quotes after -- directories whose entries you may want to complete afterwards. completion_append = '' return file_list(directory), before_cur end local function handle_choice_completion(option, before_cur, path_pos) local info = mp.get_property_native('option-info/' .. option, {}) if info.type == 'Flag' then return { 'no', 'yes' }, before_cur end if info['expects-file'] then return handle_file_completion(before_cur, path_pos) end -- Fix completing the empty value for --dscale and --cscale. if info.choices and info.choices[1] == '' and completion_append == '' then info.choices[1] = '""' end return info.choices, before_cur end local function common_prefix_length(s1, s2) local common_count = 0 for i = 1, #s1 do if s1:byte(i) ~= s2:byte(i) then break end common_count = common_count + 1 end return common_count end local function max_overlap_length(s1, s2) for s1_offset = 0, #s1 - 1 do local match = true for i = 1, #s1 - s1_offset do if s1:byte(s1_offset + i) ~= s2:byte(i) then match = false break end end if match then return #s1 - s1_offset end end return 0 end -- If str starts with the first or last characters of prefix, strip them. local function strip_common_characters(str, prefix) return str:sub(1 + math.max( common_prefix_length(prefix, str), max_overlap_length(prefix, str))) end -- Find the longest common case-sensitive prefix of the entries in "list". local function find_common_prefix(list) local prefix = list[1] for i = 2, #list do prefix = prefix:sub(1, common_prefix_length(prefix, list[i])) end return prefix end -- Return the entries of "list" beginning with "part" and the longest common -- prefix of the matches. local function complete_match(part, list) local completions = {} for _, candidate in pairs(list) do if candidate:sub(1, part:len()) == part then completions[#completions + 1] = candidate end end local prefix = find_common_prefix(completions) if opts.case_sensitive then return completions, prefix or part end completions = {} local lower_case_completions = {} local lower_case_part = part:lower() for _, candidate in pairs(list) do if candidate:sub(1, part:len()):lower() == lower_case_part then completions[#completions + 1] = candidate lower_case_completions[#lower_case_completions + 1] = candidate:lower() end end local lower_case_prefix = find_common_prefix(lower_case_completions) -- Behave like GNU readline with completion-ignore-case On. -- part = 'fooBA', completions = {'foobarbaz', 'fooBARqux'} => -- prefix = 'fooBARqux', lower_case_prefix = 'foobar', return 'fooBAR' if prefix then return completions, prefix:sub(1, lower_case_prefix:len()) end -- part = 'fooba', completions = {'fooBARbaz', 'fooBarqux'} => -- prefix = nil, lower_case_prefix ='foobar', return 'fooBAR' if lower_case_prefix then return completions, completions[1]:sub(1, lower_case_prefix:len()) end return {}, part end local function cycle_through_suggestions(backwards) selected_suggestion_index = selected_suggestion_index + (backwards and -1 or 1) if selected_suggestion_index > #suggestion_buffer then selected_suggestion_index = 1 elseif selected_suggestion_index < 1 then selected_suggestion_index = #suggestion_buffer end local before_cur = line:sub(1, completion_pos - 1) .. suggestion_buffer[selected_suggestion_index] .. completion_append line = before_cur .. strip_common_characters(line:sub(cursor), completion_append) cursor = before_cur:len() + 1 update() end -- Complete the option or property at the cursor (TAB) local function complete(backwards) if #suggestion_buffer > 0 then cycle_through_suggestions(backwards) return end if input_caller then completion_old_line = line completion_old_cursor = cursor mp.commandv('script-message-to', input_caller, 'input-event', 'complete', utils.format_json({line:sub(1, cursor - 1)})) return end local before_cur = line:sub(1, cursor - 1) local after_cur = line:sub(cursor) local tokens = {} local first_useful_token_index = 1 local completions local begin_new_token = true local last_quote for pos, char in before_cur:gmatch('()(.)') do if char:find('[%s;]') and not last_quote then begin_new_token = true if char == ';' then first_useful_token_index = #tokens + 1 end elseif begin_new_token then tokens[#tokens + 1] = { text = char, pos = pos } last_quote = char:match('["\']') begin_new_token = false else tokens[#tokens].text = tokens[#tokens].text .. char if char == last_quote then last_quote = nil end end end completion_append = last_quote or '' -- Strip quotes from tokens. for _, token in pairs(tokens) do if token.text:find('^"') then token.text = token.text:sub(2):gsub('"$', '') token.pos = token.pos + 1 elseif token.text:find("^'") then token.text = token.text:sub(2):gsub("'$", '') token.pos = token.pos + 1 end end -- Skip command prefixes because it is not worth lumping them together with -- command completions when they are useless for interactive usage. local command_prefixes = { ['osd-auto'] = true, ['no-osd'] = true, ['osd-bar'] = true, ['osd-msg'] = true, ['osd-msg-bar'] = true, ['raw'] = true, ['expand-properties'] = true, ['repeatable'] = true, ['nonrepeatable'] = true, ['async'] = true, ['sync'] = true } while tokens[first_useful_token_index] and command_prefixes[tokens[first_useful_token_index].text] do first_useful_token_index = first_useful_token_index + 1 end -- Add an empty token if the cursor is after whitespace to simplify -- comparisons. if before_cur == '' or before_cur:find('[%s;]$') then tokens[#tokens + 1] = { text = "", pos = cursor } end local add_actions = { ['add'] = true, ['append'] = true, ['pre'] = true, ['set'] = true } local first_useful_token = tokens[first_useful_token_index] completion_pos = before_cur:match('${[=>]?()[%w_/-]*$') if completion_pos then completions = property_list() completion_append = '} ' elseif #tokens == first_useful_token_index then completions = command_list() completions[#completions + 1] = 'help' completion_pos = first_useful_token.pos completion_append = completion_append .. ' ' elseif #tokens == first_useful_token_index + 1 then if first_useful_token.text == 'set' or first_useful_token.text == 'add' or first_useful_token.text == 'cycle' or first_useful_token.text == 'cycle-values' or first_useful_token.text == 'multiply' then completions = property_list() completion_pos = tokens[first_useful_token_index + 1].pos completion_append = completion_append .. ' ' elseif first_useful_token.text == 'help' then completions = command_list() completion_pos = tokens[first_useful_token_index + 1].pos elseif first_useful_token.text == 'apply-profile' then completions = profile_list() completion_pos = tokens[first_useful_token_index + 1].pos elseif first_useful_token.text == 'change-list' then completions = list_option_list() completion_pos = tokens[first_useful_token_index + 1].pos completion_append = completion_append .. ' ' elseif first_useful_token.text == 'vf' or first_useful_token.text == 'af' then completions = list_option_action_list(first_useful_token.text) completion_pos = tokens[first_useful_token_index + 1].pos completion_append = completion_append .. ' ' elseif has_file_argument(first_useful_token.text) then completions, before_cur = handle_file_completion(before_cur, tokens[first_useful_token_index + 1].pos) end elseif first_useful_token.text == 'cycle-values' then completion_pos = tokens[#tokens].pos completion_append = completion_append .. ' ' completions, before_cur = handle_choice_completion(tokens[first_useful_token_index + 1].text, before_cur, tokens[#tokens].pos) elseif #tokens == first_useful_token_index + 2 then if first_useful_token.text == 'set' then completion_pos = tokens[#tokens].pos completions, before_cur = handle_choice_completion(tokens[first_useful_token_index + 1].text, before_cur, tokens[first_useful_token_index + 2].pos) elseif first_useful_token.text == 'change-list' then completions = list_option_action_list(tokens[first_useful_token_index + 1].text) completion_pos = tokens[first_useful_token_index + 2].pos completion_append = completion_append .. ' ' elseif first_useful_token.text == 'vf' or first_useful_token.text == 'af' then if add_actions[tokens[first_useful_token_index + 1].text] then completion_pos = tokens[#tokens].pos completions, before_cur = handle_choice_completion(first_useful_token.text, before_cur, tokens[#tokens].pos) elseif tokens[first_useful_token_index + 1].text == 'remove' then completions = list_option_value_list(first_useful_token.text) completion_pos = tokens[#tokens].pos end end elseif #tokens == first_useful_token_index + 3 then if first_useful_token.text == 'change-list' then if add_actions[tokens[first_useful_token_index + 2].text] then completion_pos = tokens[#tokens].pos completions, before_cur = handle_choice_completion(tokens[first_useful_token_index + 1].text, before_cur, tokens[#tokens].pos) elseif tokens[first_useful_token_index + 2].text == 'remove' then completion_pos = tokens[#tokens].pos completions = list_option_value_list(tokens[first_useful_token_index + 1].text) end elseif first_useful_token.text == 'dump-cache' then completions, before_cur = handle_file_completion(before_cur, tokens[first_useful_token_index + 3].pos) end end if completions == nil then return end local prefix completions, prefix = complete_match(before_cur:sub(completion_pos), completions) if #completions == 1 then prefix = prefix .. completion_append after_cur = strip_common_characters(after_cur, completion_append) else table.sort(completions) suggestion_buffer = completions selected_suggestion_index = 0 end before_cur = before_cur:sub(1, completion_pos - 1) .. prefix cursor = before_cur:len() + 1 line = before_cur .. after_cur update() end -- List of input bindings. This is a weird mashup between common GUI text-input -- bindings and readline bindings. local function get_bindings() local bindings = { { 'esc', function() set_active(false) end }, { 'ctrl+[', function() set_active(false) end }, { 'enter', handle_enter }, { 'kp_enter', handle_enter }, { 'shift+enter', function() handle_char_input('\n') end }, { 'ctrl+j', handle_enter }, { 'ctrl+m', handle_enter }, { 'bs', handle_backspace }, { 'shift+bs', handle_backspace }, { 'ctrl+h', handle_backspace }, { 'del', handle_del }, { 'shift+del', handle_del }, { 'ins', handle_ins }, { 'shift+ins', function() paste(false) end }, { 'mbtn_mid', function() paste(false) end }, { 'left', function() prev_char() end }, { 'ctrl+b', function() page_up_or_prev_char() end }, { 'right', function() next_char() end }, { 'ctrl+f', function() page_down_or_next_char() end}, { 'up', function() move_history(-1) end }, { 'ctrl+p', function() move_history(-1) end }, { 'wheel_up', function() move_history(-1) end }, { 'down', function() move_history(1) end }, { 'ctrl+n', function() move_history(1) end }, { 'wheel_down', function() move_history(1) end }, { 'wheel_left', function() end }, { 'wheel_right', function() end }, { 'ctrl+left', prev_word }, { 'alt+b', prev_word }, { 'ctrl+right', next_word }, { 'alt+f', next_word }, { 'tab', complete }, { 'ctrl+i', complete }, { 'shift+tab', function() complete(true) end }, { 'ctrl+a', go_home }, { 'home', go_home }, { 'ctrl+e', go_end }, { 'end', go_end }, { 'pgup', handle_pgup }, { 'pgdwn', handle_pgdown }, { 'ctrl+r', search_history }, { 'ctrl+c', clear }, { 'ctrl+d', maybe_exit }, { 'ctrl+k', del_to_eol }, { 'ctrl+l', clear_log_buffer }, { 'ctrl+u', del_to_start }, { 'ctrl+v', function() paste(true) end }, { 'meta+v', function() paste(true) end }, { 'ctrl+bs', del_word }, { 'ctrl+w', del_word }, { 'ctrl+del', del_next_word }, { 'alt+d', del_next_word }, { 'kp_dec', function() handle_char_input('.') end }, { 'kp_add', function() handle_char_input('+') end }, { 'kp_subtract', function() handle_char_input('-') end }, { 'kp_multiply', function() handle_char_input('*') end }, { 'kp_divide', function() handle_char_input('/') end }, } for i = 0, 9 do bindings[#bindings + 1] = {'kp' .. i, function() handle_char_input('' .. i) end} end return bindings end local function define_key_bindings() if #key_bindings > 0 then return end for _, bind in ipairs(get_bindings()) do -- Generate arbitrary name for removing the bindings later. local name = "_console_" .. (#key_bindings + 1) key_bindings[#key_bindings + 1] = name mp.add_forced_key_binding(bind[1], name, bind[2], {repeatable = true}) end mp.add_forced_key_binding("any_unicode", "_console_text", text_input, {repeatable = true, complex = true}) key_bindings[#key_bindings + 1] = "_console_text" end local function undefine_key_bindings() for _, name in ipairs(key_bindings) do mp.remove_key_binding(name) end key_bindings = {} end -- Set the REPL visibility ("enable", Esc) set_active = function (active) if active == repl_active then return end if active then repl_active = true insert_mode = false define_key_bindings() if not input_caller then prompt = default_prompt id = default_id history = histories[id] history_pos = #history + 1 mp.enable_messages('terminal-default') end elseif searching_history then searching_history = false line = '' cursor = 1 selectable_items = nil log_buffers[id] = {} else repl_active = false suggestion_buffer = {} undefine_key_bindings() mp.enable_messages('silent:terminal-default') if input_caller then mp.commandv('script-message-to', input_caller, 'input-event', 'closed', utils.format_json({line, cursor})) input_caller = nil line = '' cursor = 1 selectable_items = nil end collectgarbage() end update() end -- Show the repl if hidden and replace its contents with 'text' -- (script-message-to repl type) local function show_and_type(text, cursor_pos) text = text or '' cursor_pos = tonumber(cursor_pos) -- Save the line currently being edited, just in case if line ~= text and line ~= '' and history[#history] ~= line then history_add(line) end line = text if cursor_pos ~= nil and cursor_pos >= 1 and cursor_pos <= line:len() + 1 then cursor = math.floor(cursor_pos) else cursor = line:len() + 1 end history_pos = #history + 1 insert_mode = false if repl_active then update() else set_active(true) end end -- Add a global binding for enabling the REPL. While it's enabled, its bindings -- will take over and it can be closed with ESC. mp.add_key_binding(nil, 'enable', function() set_active(true) end) mp.register_script_message('disable', function() set_active(false) end) -- Add a script-message to show the REPL and fill it with the provided text mp.register_script_message('type', function(text, cursor_pos) show_and_type(text, cursor_pos) end) mp.register_script_message('get-input', function (script_name, args) if repl_active then return end input_caller = script_name args = utils.parse_json(args) prompt = args.prompt or default_prompt line = args.default_text or '' cursor = args.cursor_position or line:len() + 1 id = args.id or script_name .. prompt if histories[id] == nil then histories[id] = {} log_buffers[id] = {} end history = histories[id] history_pos = #history + 1 selectable_items = args.items if selectable_items then matches = {} selected_match = args.default_item or 1 first_match_to_print = 1 for i, item in ipairs(selectable_items) do matches[i] = { index = i, text = item } end end set_active(true) mp.commandv('script-message-to', input_caller, 'input-event', 'opened') end) mp.register_script_message('log', function (message) -- input.get's edited handler is invoked after submit, so avoid modifying -- the default log. if input_caller == nil then return end message = utils.parse_json(message) log_add(message.text, message.error and styles.error or message.style, message.error and terminal_styles.error or message.terminal_style) end) mp.register_script_message('set-log', function (log) if input_caller == nil then return end log = utils.parse_json(log) log_buffers[id] = {} for i = 1, #log do if type(log[i]) == 'table' then log[i].text = log[i].text log[i].style = log[i].style or '' log[i].terminal_style = log[i].terminal_style or '' log_buffers[id][i] = log[i] else log_buffers[id][i] = { text = log[i], style = '', terminal_style = '', } end end update() end) mp.register_script_message('complete', function(list, start_pos) if line ~= completion_old_line or cursor ~= completion_old_cursor then return end local completions, prefix = complete_match(line:sub(start_pos, cursor), utils.parse_json(list)) local before_cur = line:sub(1, start_pos - 1) .. prefix local after_cur = line:sub(cursor) cursor = before_cur:len() + 1 line = before_cur .. after_cur if #completions > 1 then suggestion_buffer = completions selected_suggestion_index = 0 completion_pos = start_pos completion_append = '' end update() end) -- Redraw the REPL when the OSD size changes. This is needed because the -- PlayRes of the OSD will need to be adjusted. mp.observe_property('osd-width', 'native', update) mp.observe_property('osd-height', 'native', update) mp.observe_property('display-hidpi-scale', 'native', update) mp.observe_property('focused', 'native', update) mp.observe_property("user-data/osc/margins", "native", function(_, val) if type(val) == "table" and type(val.t) == "number" and type(val.b) == "number" then global_margins = val else global_margins = { t = 0, b = 0 } end update() end) -- Enable log messages. In silent mode, mpv will queue log messages in a buffer -- until enable_messages is called again without the silent: prefix. mp.enable_messages('silent:terminal-default') mp.register_event('log-message', function(e) -- Ignore log messages from the OSD because of paranoia, since writing them -- to the OSD could generate more messages in an infinite loop. if e.prefix:sub(1, 3) == 'osd' then return end -- Ignore messages output by this script. if e.prefix == mp.get_script_name() then return end -- Ignore buffer overflow warning messages. Overflowed log messages would -- have been offscreen anyway. if e.prefix == 'overflow' then return end -- Filter out trace-level log messages, even if the terminal-default log -- level includes them. These aren't too useful for an on-screen display -- without scrollback and they include messages that are generated from the -- OSD display itself. if e.level == 'trace' then return end -- Use color for debug/v/warn/error/fatal messages. log_add('[' .. e.prefix .. '] ' .. e.text:sub(1, -2), styles[e.level], terminal_styles[e.level]) end) collectgarbage() -- Note: anything global is accessible by profile condition expressions. local msg = require 'mp.msg' local profiles = {} local watched_properties = {} -- indexed by property name (used as a set) local cached_properties = {} -- property name -> last known raw value local properties_to_profiles = {} -- property name -> set of profiles using it local have_dirty_profiles = false -- at least one profile is marked dirty local pending_hooks = {} -- as set (keys only, meaningless values) -- Used during evaluation of the profile condition, and should contain the -- profile the condition is evaluated for. local current_profile = nil -- Cached set of all top-level mpv properities. Only used for extra validation. local property_set = {} for _, property in pairs(mp.get_property_native("property-list")) do property_set[property] = true end local function evaluate(profile) msg.verbose("Re-evaluating auto profile " .. profile.name) current_profile = profile local status, res = pcall(profile.cond) current_profile = nil if not status then -- errors can be "normal", e.g. in case properties are unavailable msg.verbose("Profile condition error on evaluating: " .. res) res = false end res = not not res if res ~= profile.status then if res == true then msg.info("Applying auto profile: " .. profile.name) mp.commandv("apply-profile", profile.name) elseif profile.status == true and profile.has_restore_opt then msg.info("Restoring profile: " .. profile.name) mp.commandv("apply-profile", profile.name, "restore") end end profile.status = res profile.dirty = false end local function on_property_change(name, val) cached_properties[name] = val -- Mark all profiles reading this property as dirty, so they get re-evaluated -- the next time the script goes back to sleep. local dependent_profiles = properties_to_profiles[name] if dependent_profiles then for profile, _ in pairs(dependent_profiles) do assert(profile.cond) -- must be a profile table profile.dirty = true have_dirty_profiles = true end end end local function on_idle() -- When events and property notifications stop, re-evaluate all dirty profiles. if have_dirty_profiles then for _, profile in ipairs(profiles) do if profile.dirty then evaluate(profile) end end end have_dirty_profiles = false -- Release all hooks (the point was to wait until an idle event) while true do local h = next(pending_hooks) if not h then break end pending_hooks[h] = nil h:cont() end end local function on_hook(h) h:defer() pending_hooks[h] = true end function get(name, default) -- Normally, we use the cached value only if not watched_properties[name] then watched_properties[name] = true local res, err = mp.get_property_native(name) -- Property has to not exist and the toplevel of property in the name must also -- not have an existing match in the property set for this to be considered an error. -- This allows things like user-data/test to still work. if err == "property not found" and property_set[name:match("^([^/]+)")] == nil then msg.error("Property '" .. name .. "' was not found.") return default end cached_properties[name] = res mp.observe_property(name, "native", on_property_change) end -- The first time the property is read we need add it to the -- properties_to_profiles table, which will be used to mark the profile -- dirty if a property referenced by it changes. if current_profile then local map = properties_to_profiles[name] if not map then map = {} properties_to_profiles[name] = map end map[current_profile] = true end local val = cached_properties[name] if val == nil then val = default end return val end local function magic_get(name) -- Lua identifiers can't contain "-", so in order to match with mpv -- property conventions, replace "_" to "-" name = string.gsub(name, "_", "-") return get(name, nil) end local evil_magic = {} setmetatable(evil_magic, { __index = function(_, key) -- interpret everything as property, unless it already exists as -- a non-nil global value local v = _G[key] if type(v) ~= "nil" then return v end return magic_get(key) end, }) p = {} setmetatable(p, { __index = function(_, key) return magic_get(key) end, }) local function compile_cond(name, s) local code, chunkname = "return " .. s, "profile " .. name .. " condition" local chunk, err -- luacheck: push -- luacheck: ignore setfenv loadstring if setfenv then -- lua 5.1 chunk, err = loadstring(code, chunkname) if chunk then setfenv(chunk, evil_magic) end else -- lua 5.2 chunk, err = load(code, chunkname, "t", evil_magic) end -- luacheck: pop if not chunk then msg.error("Profile '" .. name .. "' condition: " .. err) chunk = function() return false end end return chunk end local function load_profiles(profiles_property) for _, v in ipairs(profiles_property) do local cond = v["profile-cond"] if cond and #cond > 0 then local profile = { name = v.name, cond = compile_cond(v.name, cond), properties = {}, status = nil, dirty = true, -- need re-evaluate has_restore_opt = v["profile-restore"] and v["profile-restore"] ~= "default" } profiles[#profiles + 1] = profile have_dirty_profiles = true end end end mp.observe_property("profile-list", "native", function (_, profiles_property) profiles = {} watched_properties = {} cached_properties = {} properties_to_profiles = {} mp.unobserve_property(on_property_change) load_profiles(profiles_property) if #profiles < 1 and mp.get_property("load-auto-profiles") == "auto" then -- make it exit immediately _G.mp_event_loop = function() end return end on_idle() -- re-evaluate all profiles immediately end) mp.register_idle(on_idle) for _, name in ipairs({"on_load", "on_preloaded", "on_before_start_file"}) do mp.add_hook(name, 50, on_hook) end --[[ This file is part of mpv. mpv is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. mpv is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with mpv. If not, see . ]] local utils = require "mp.utils" local input = require "mp.input" local function show_error(message) mp.msg.error(message) if mp.get_property_native("vo-configured") then mp.osd_message(message) end end mp.add_key_binding(nil, "select-playlist", function () local playlist = {} local default_item local show = mp.get_property_native("osd-playlist-entry") local trailing_slash_pattern = mp.get_property("platform") == "windows" and "[/\\]+$" or "/+$" for i, entry in ipairs(mp.get_property_native("playlist")) do playlist[i] = entry.title if not playlist[i] or show ~= "title" then playlist[i] = entry.filename if not playlist[i]:find("://") then playlist[i] = select(2, utils.split_path( playlist[i]:gsub(trailing_slash_pattern, ""))) end end if entry.title and show == "both" then playlist[i] = string.format("%s (%s)", entry.title, playlist[i]) end if entry.playing then default_item = i end end if #playlist == 0 then show_error("The playlist is empty.") return end input.select({ prompt = "Select a playlist entry:", items = playlist, default_item = default_item, submit = function (index) mp.commandv("playlist-play-index", index - 1) end, }) end) local function format_flags(track) local flags = "" for _, flag in ipairs({ "default", "forced", "dependent", "visual-impaired", "hearing-impaired", "image", "external" }) do if track[flag] then flags = flags .. flag .. " " end end if flags == "" then return "" end return " [" .. flags:sub(1, -2) .. "]" end local function format_track(track) local bitrate = track["demux-bitrate"] or track["hls-bitrate"] return (track.selected and "●" or "○") .. (track.title and " " .. track.title or "") .. " (" .. ( (track.lang and track.lang .. " " or "") .. (track.codec and track.codec .. " " or "") .. (track["demux-w"] and track["demux-w"] .. "x" .. track["demux-h"] .. " " or "") .. (track["demux-fps"] and not track.image and string.format("%.4f", track["demux-fps"]):gsub("%.?0*$", "") .. " fps " or "") .. (track["demux-channel-count"] and track["demux-channel-count"] .. "ch " or "") .. (track["codec-profile"] and track.type == "audio" and track["codec-profile"] .. " " or "") .. (track["demux-samplerate"] and track["demux-samplerate"] / 1000 .. " kHz " or "") .. (bitrate and string.format("%.0f", bitrate / 1000) .. " kbps " or "") ):sub(1, -2) .. ")" .. format_flags(track) end mp.add_key_binding(nil, "select-track", function () local tracks = {} for i, track in ipairs(mp.get_property_native("track-list")) do tracks[i] = (track.image and "Image" or track.type:sub(1, 1):upper() .. track.type:sub(2)) .. ": " .. format_track(track) end if #tracks == 0 then show_error("No available tracks.") return end input.select({ prompt = "Select a track:", items = tracks, submit = function (id) local track = mp.get_property_native("track-list/" .. id - 1) if track then mp.set_property(track.type, track.selected and "no" or track.id) end end, }) end) local function select_track(property, type, prompt, error) local tracks = {} local items = {} local default_item local track_id = mp.get_property_native(property) for _, track in ipairs(mp.get_property_native("track-list")) do if track.type == type then tracks[#tracks + 1] = track items[#items + 1] = format_track(track) if track.id == track_id then default_item = #items end end end if #items == 0 then show_error(error) return end input.select({ prompt = prompt, items = items, default_item = default_item, submit = function (id) mp.set_property(property, tracks[id].selected and "no" or tracks[id].id) end, }) end mp.add_key_binding(nil, "select-sid", function () select_track("sid", "sub", "Select a subtitle:", "No available subtitles.") end) mp.add_key_binding(nil, "select-secondary-sid", function () select_track("secondary-sid", "sub", "Select a secondary subtitle:", "No available subtitles.") end) mp.add_key_binding(nil, "select-aid", function () select_track("aid", "audio", "Select an audio track:", "No available audio tracks.") end) mp.add_key_binding(nil, "select-vid", function () select_track("vid", "video", "Select a video track:", "No available video tracks.") end) local function format_time(t, duration) local h = math.floor(t / (60 * 60)) t = t - (h * 60 * 60) local m = math.floor(t / 60) local s = t - (m * 60) if duration >= 60 * 60 or h > 0 then return string.format("%.2d:%.2d:%.2d", h, m, s) end return string.format("%.2d:%.2d", m, s) end mp.add_key_binding(nil, "select-chapter", function () local chapters = {} local default_item = mp.get_property_native("chapter") if default_item == nil then show_error("No available chapters.") return end local duration = mp.get_property_native("duration", math.huge) for i, chapter in ipairs(mp.get_property_native("chapter-list")) do chapters[i] = format_time(chapter.time, duration) .. " " .. chapter.title end input.select({ prompt = "Select a chapter:", items = chapters, default_item = default_item + 1, submit = function (chapter) mp.set_property("chapter", chapter - 1) end, }) end) mp.add_key_binding(nil, "select-subtitle-line", function () local sub = mp.get_property_native("current-tracks/sub") if sub == nil then show_error("No subtitle is loaded.") return end if sub.external and sub["external-filename"]:find("^edl://") then sub["external-filename"] = sub["external-filename"]:match('https?://.*') or sub["external-filename"] end local r = mp.command_native({ name = "subprocess", capture_stdout = true, args = sub.external and {"ffmpeg", "-loglevel", "error", "-i", sub["external-filename"], "-f", "lrc", "-map_metadata", "-1", "-fflags", "+bitexact", "-"} or {"ffmpeg", "-loglevel", "error", "-i", mp.get_property("path"), "-map", "s:" .. sub["id"] - 1, "-f", "lrc", "-map_metadata", "-1", "-fflags", "+bitexact", "-"} }) if r.error_string == "init" then show_error("Failed to extract subtitles: ffmpeg not found.") return elseif r.status ~= 0 then show_error("Failed to extract subtitles.") return end local sub_lines = {} local sub_times = {} local default_item local delay = mp.get_property_native("sub-delay") local time_pos = mp.get_property_native("time-pos") - delay local duration = mp.get_property_native("duration", math.huge) -- Strip HTML and ASS tags. for line in r.stdout:gsub("<.->", ""):gsub("{\\.-}", ""):gmatch("[^\n]+") do -- ffmpeg outputs LRCs with minutes > 60 instead of adding hours. sub_times[#sub_times + 1] = line:match("%d+") * 60 + line:match(":([%d%.]*)") sub_lines[#sub_lines + 1] = format_time(sub_times[#sub_times], duration) .. " " .. line:gsub(".*]", "", 1) if sub_times[#sub_times] <= time_pos then default_item = #sub_times end end input.select({ prompt = "Select a line to seek to:", items = sub_lines, default_item = default_item, submit = function (index) -- Add an offset to seek to the correct line while paused without a -- video track. if mp.get_property_native("current-tracks/video/image") ~= false then delay = delay + 0.1 end mp.commandv("seek", sub_times[index] + delay, "absolute") end, }) end) mp.add_key_binding(nil, "select-audio-device", function () local devices = mp.get_property_native("audio-device-list") local items = {} -- This is only useful if an --audio-device has been explicitly set, -- otherwise its value is just auto and there is no current-audio-device -- property. local selected_device = mp.get_property("audio-device") local default_item if #devices == 0 then show_error("No available audio devices.") return end for i, device in ipairs(devices) do items[i] = device.name .. " (" .. device.description .. ")" if device.name == selected_device then default_item = i end end input.select({ prompt = "Select an audio device:", items = items, default_item = default_item, submit = function (id) mp.set_property("audio-device", devices[id].name) end, }) end) mp.add_key_binding(nil, "select-binding", function () local bindings = {} for _, binding in pairs(mp.get_property_native("input-bindings")) do if binding.priority >= 0 and ( bindings[binding.key] == nil or (bindings[binding.key].is_weak and not binding.is_weak) or (binding.is_weak == bindings[binding.key].is_weak and binding.priority > bindings[binding.key].priority) ) then bindings[binding.key] = binding end end local items = {} for _, binding in pairs(bindings) do if binding.cmd ~= "ignore" then items[#items + 1] = binding.key .. " " .. binding.cmd end end table.sort(items) input.select({ prompt = "Select a binding:", items = items, submit = function (i) mp.command(items[i]:gsub("^.- ", "")) end, }) end) local properties = {} local function add_property(property, value) value = value or mp.get_property_native(property) if type(value) == "table" and next(value) then for key, val in pairs(value) do add_property(property .. "/" .. key, val) end else properties[#properties + 1] = property .. ": " .. utils.to_string(value) end end mp.add_key_binding(nil, "show-properties", function () properties = {} -- Don't log errors for renamed and removed properties. local msg_level_backup = mp.get_property("msg-level") mp.set_property("msg-level", msg_level_backup == "" and "cplayer=no" or msg_level_backup .. ",cplayer=no") for _, property in pairs(mp.get_property_native("property-list")) do add_property(property) end mp.set_property("msg-level", msg_level_backup) add_property("current-tracks/audio") add_property("current-tracks/video") add_property("current-tracks/sub") add_property("current-tracks/sub2") table.sort(properties) input.select({ prompt = "Inspect a property:", items = properties, submit = function (i) if mp.get_property_native("vo-configured") then mp.commandv("expand-properties", "show-text", (#properties[i] > 100 and "${osd-ass-cc/0}{\\fs9}${osd-ass-cc/1}" or "") .. "$>" .. properties[i], 20000) else mp.msg.info(properties[i]) end end, }) end) ../mpv/audio/filter/af_rubberband.c!p->rubberlibrubberband initialization failed. set-pitchmultiply-pitchrubberbandPitch conversion with librubberbandtransientsdetectorphasesmoothingformantenginepitch-scalefinerfasteraparttogetherconsistencyshiftedpreservedstandardshortlonglaminarindependentcompoundpercussivesoftcrispmixedsmoothScript evaluation failed: %s Could not initialize VapourSynth scripting. _DurationNum_DurationDen_SARNum_SARDen_ColorRange_ColorSpace_ChromaLocation_FieldBased_MP_IMAGE_PictType'file' parameter must be set. using %d concurrent requests. ../mpv/video/filter/vf_vapoursynth.c:760../mpv/video/filter/vf_vapoursynth.c:761destroying VS filters all requests terminated ../mpv/video/filter/vf_vapoursynth.c!p->in_node_activenum_requested(p) == 0uninitialized. Failed to get frame properties!Failed to get mp_image attributes!No PTS after filter at frame %d! n >= p->out_frameno && n < p->out_frameno + p->max_requestsfiltered frame %d (%d) p->requested[index] == &dummy_imgFilter error at frame %d: %s VS asking for frame %d (at %d) EOF or filter reset/uninitreturning error on reset/uninit Frame requested during init! This is unsupported. Returning black dummy frame with 0 duration. Could not allocate VS frameFrame %d requested, but only have frames starting from %d. Try increasing the buffered-frames suboption.EOF or filter EOF/reinitreturning error on EOF/reinit failed, no action taken initiate EOF return EOF draining VS for format change initializing... VapourSynth does not allow unaligned/cropped video sizes. Could not get vapoursynth API handle. Unsupported input format. InputCould not get our own input node. video_invideo_in_dwvideo_in_dhcontainer_fpsdisplay_fpsdisplay_resuser_dataCould not get script output node. Unsupported output format. could not init VS discarding unknown frame type finishing up p->eofrequesting frame %d (%d) vapoursynthVapourSynth bridgebuffered-framesconcurrent-frames../mpv/video/filter/vf_fingerprint.cp->scaledp->swsFalling back to libswscale. ../mpv/video/filter/vf_fingerprint.c:128%f: %s unsupported video format ../mpv/video/filter/vf_fingerprint.c:156fp%d.ptsfp%d.hexfingerprintCompute video frame fingerprintsclear-on-queryprintgray-hex-8x8gray-hex-16x16../mpv/video/zimg.cMP_IS_ALIGNED(r->real_h, 1 << desc.chroma_ys)y1 - mpi->h < 4st->graph!(i & (mp_repack_get_align_y(r->repack) - 1))!(x0 & (mp_repack_get_align_x(r->repack) - 1))r->zmask[0] == ZIMG_BUFFER_MAX || MP_IS_POWER_OF_2(r->zmask[0] + 1)../mpv/video/zimg.c:224using %d threads for scaling ../mpv/video/zimg.c:618../mpv/video/zimg.c:619../mpv/video/zimg.c:521../mpv/video/zimg.c:522zimg_filter_graph_build: %s ../mpv/video/zimg.c:568ctx->num_states == sliceszimg initialization failed. zimg repacker initialization failed. scaler-param-ascaler-param-bscaler-chromascaler-chroma-param-ascaler-chroma-param-bsnd_pcm_statusattempt %d to recover from state '%s'... pcm prepare error: %s PCM in suspend mode, trying to resume. PCM resume EAGAIN - retrying. ENOSYS, retrying with snd_pcm_prepare(). resuming from SUSPENDED: %s Device lost, trying to recover... could not recover pcm write errorunexpected partial write (%d of %d frames), dropping audio pcm start errorpcm pause errorpcm resume errorpcm drop errorpcm prepare errorpcm close errorMixer open errorMixer attach errorMixer register errorMixer load errorUnable to find simple control '%s',%i. Error setting left channelleft=%li, Error setting right channelright=%li, pmin=%li, pmax=%li, mult=%f vol=%f Dump hwparams error%s--- %.*s--- IOIDOutput%s:%s%.*s %s}%s,%s../mpv/audio/out/ao_alsa.ca->num == b->numhdmiUnable to create output bufferAES0=%d,AES1=%d,AES2=0,AES3=%dopening device '%s' => '%s' got error '%s'; opening iec fallback device '%s' opening device '%s' Playback open errorDump PCM errorPCM setup: --- %.*s--- Unable to set blocking modeUnable to get initial parametersStart HW params: Unable to disable resamplingHW params after rate: Unable to set access typeHW params after access: Can't find appropriate sample format. trying format %s/%d Unable to set formatHW params after format: snd_pcm_query_chmaps() returned NULL got ALSA chmap: %s (%s) -> %s -> %sskipping unknown ALSA channel map: %s Unable to set channelsHW params after channels: Too many audio channels (%d). Unable to set samplerate-2HW params after rate-2: Unable to set buffer time nearUnable to set periodsGoing to set final HW params: Unable to set hw-parametersFinal HW params: trying to set ALSA channel map: %s device returned ENXIO when setting channel map %s Channel map setup failedchannel map reported by ALSA: %s which we understand as: %s user set ignore-chmap; ignoring the channel map. using spdif passthrough; ignoring the channel map. Got unknown channel map from ALSA. ALSA channel map conflicts with channel count! which is what we requested. ignoring the ALSA channel map. using the ALSA channel map. Asked for %d channels, got %d - fallback to %s. mismatching channel counts. Unable to get buffersizeUnable to get period sizeUnable to get sw-parametersUnable to get boundaryUnable to set start thresholdUnable to set silence sizeUnable to set sw-parametershw pausing supported: %s buffersize: %d samples period size: %d samples using ALSA version: %s Attempting to work around even more ALSA bugs... Working around braindead dmix multichannel behavior. iec958rearcenter_lfesidepulsedsnoophwalsaALSA audio outputMasteralsa-resamplealsa-mixer-devicealsa-mixer-namealsa-mixer-indexalsa-non-interleavedalsa-ignore-chmapalsa-buffer-timealsa-periodscannot open server out_%d32 bit float mono audionot enough ports available activate failed no ports to connect to connecting failed jackJACK audio outputjack-portjack-namejack-autostartjack-connectjack-std-channel-layoutwaveextanyNot reentrant! could not open device AL_SOFT_direct_channels_remixAL_DIRECT_CHANNELS_SOFTAL_REMIX_UNMATCHED_SOFTDirect channels aren't supported by this version of OpenAL AL_FORMAT_MONO8AL_FORMAT_MONO16X-FiAL_EXT_float32MONOSTEREOQUAD51CHN61CHN71CHN_FLOAT32AL_FORMAT_%s%sCan't find appropriate channel layout. AL_SOFT_source_latencyalGetSourcedvSOFTopenalOpenAL audio outputnum-buffersnum-samplesdirect-channelsCore user: %s Core host: %s Core version: %s Core name: %s Error during playback: %s, %s media.nameout of buffers: %s queued %d of %d samples Stream state changed: old_state=%s state=%s error=%s Stream in error state, trying to reload... Stream disconnected, trying to reload... 1.2.4Headers version: %s Library version: %s mpv/ao/pipewireclient-rt.confconfig.nameremote.nameCould not connect to context '%s': %s Could not list devices, sink detection may be wrong PipeWire does not have any audio sinks, skipping Could not list devices, list may be incomplete node.namenode.descriptionPipeWire:Interface:Nodemedia.classAudio/Sink../mpv/audio/out/ao_pipewire.c:799?riCould not build parameter pod Could not update stream parameters MusicMoviemedia.rolemedia.categorymedia.typetarget.objectnode.always-processapplication.icon-nameapplication.idapplication.name%d/%dnode.latency1/%dnode.rateUnhandled codec %d Unhandled format %d Unhandled channel %d audio-srcCould not get timeout for initialization: %s Could not wait for initialization: %s pipewirePipeWire audio outputremotevolume-modechannelFailed to get sink input info: %s pa_stream_write() failed: %s Failed to allocate main loop Failed to allocate context Proto: %lu Server proto: %lu Init failed: %s Stream failed. Unsupported format, using default Failed to allocate proplist media.icon_nameInvalid audio format audio streamThe stream is suspended. Bailing out. PulseAudio didn't tell us what buffer sizes it set. Bailing out. pa_stream_cork() failed: %s pa_stream_flush() failed: %s pa_stream_update_timing_info() failed: %s pa_stream_get_timing_info() failed: %s pa_stream_get_sample_spec() failed: %s pa_stream_get_latency() failed: %s pa_context_get_sink_input_info() failed: %s pa_context_set_sink_input_volume() failed: %s pa_context_set_sink_input_mute() failed: %s pa_stream_set_name() failed: %s PulseAudio audio outputhostlatency-hacksallow-suspended/dev/dri/renderD128FB_IDCRTC_IDSRC_XSRC_YSRC_WSRC_HCRTC_XCRTC_YCRTC_WCRTC_HZPOS../mpv/video/out/drm_atomic.c:30Failed to retrieve properties for object id %d ../mpv/video/out/drm_atomic.c:114Object ID = %d (type = %x) has %d properties Property '%s' = %lld overlayCannot retrieve DRM resources: %s Cannot retrieve plane resources: %s ../mpv/video/out/drm_atomic.c:172Failed to create CRTC object Failed to create Plane object from plane ID %d Unable to retrieve type property from plane %d Using %s plane %d as draw plane Failed to find draw plane with idx=%d Found draw plane with ID %d Using %s plane %d as drmprime plane Failed to find drmprime plane with idx=%d. drmprime-overlay hwdec interop will not work Found drmprime plane with ID %d ACTIVEVRR_ENABLEDMODE_IDFailed to open card %d (%s) Available connectors for card %d (%s): Listing DRM devices with drmGetDevices failed! (%s) Failed to open primary DRM node path %s! preferredhighestFailed to allocate drm atomic request Got error while restoring old state Failed to commit ModeSetting atomic request: %s Failed to restore previous mode Failed to drop DRM master: %s Releasing VT Invalid value for option drm-mode. Must be a positive number, a string of the format WxH[@R] or 'help' Mode %d: %s (%dx%d@%.2fHz) %s-%dAvailable modes for drm-connector=%d.%s connecteddisconnected notFailed to acquire DRM master: %s Failed to save old DRM atomic state Could not set CRTC_ID on connector Failed to create DRM mode blob Could not set MODE_ID on crtc Could not set ACTIVE on crtc VRR_CAPABLEcrtc is%s VRR capable Could not enable VRR on crtc Enabled VRR on crtc Acquiring VT VT_SETMODE failed: %s as the default../mpv/video/out/drm_common.c:953Creating pipe failed: %s Can't open TTY for VT control: %s Can't handle VT release - signal already used Can't handle VT acquire - signal already used Failed to install release signal: %s Failed to install acquire signal: %s VT_GETMODE failed: %s Failed to set up VT switcher. Terminal switching will be unavailable. Card number %d given too high! %d devices located. DRM card number %d given, but it does not have a primary node! DRM card number %d given, but it does not support KMS! DRM card number %d given, but it does not have any connected outputs. Picked DRM card %d, primary node %s%s. No primary DRM device could be picked! Failed to find a usable DRM primary node! Cannot open card "%d": %s. Driver: %s %d.%d.%d (%s) No connector with name %s found No connected connectors found Chosen connector is disconnected Chosen connector has no valid modes Cannot retrieve encoder %u:%u: %s Connector %u currently connected to encoder %u Connector %u has no suitable CRTC Selected Encoder %u with CRTC %u No available modes Parse error Bad mode index (max = %d). Could not find mode matching %s Could not find any preferred mode. Picking the first mode. setup_mode: Internal error Selected mode: %s (%dx%d@%.2fHz) Available modes: Failed to set Universal planes capability Failed to create DRM atomic context, no DRM Atomic support DRM Atomic support found Failed to create DRM atomic context Monitor pixel aspect: %g Failed to release virtual terminal Failed to acquire virtual terminal drmHandleEvent failed: %i UnknownVGADVI-IDVI-DDVI-ACompositeSVIDEOLVDSComponentDINDPHDMI-AHDMI-BTVeDPVirtualDSIDPIWritebackSPIUSBdrm-devicedrm-connectordrm-modedrm-draw-planedrm-drmprime-video-planedrm-formatdrm-draw-surface-sizedrm-vrr-enabledxrgb8888xrgb2101010xbgr8888xbgr2101010yuyv../mpv/video/out/drm_prime.c:137Failed to retrieve the Prime Handle from handle %d (%d). Failed to create framebuffer on layer %d: %s ../mpv/video/out/drm_prime.c:127Failed to duplicate dmabuf fd: %s Mapped surface with format '%s' has unexpected number of planes. (%d layers and %d planes, but expected %d planes) mapping DRM dmabuf failed drmprime hwdec requires at least one dmabuf interop backend. Using DRM device: %s Failed to create hwdevice_ctx: %s ../mpv/video/out/hwdec/hwdec_drmprime.c:132../mpv/video/out/hwdec/hwdec_drmprime.c:133../mpv/video/out/hwdec/hwdec_drmprime.c:134../mpv/video/out/hwdec/hwdec_drmprime.c:135../mpv/video/out/hwdec/hwdec_drmprime.c:137../mpv/video/out/hwdec/hwdec_drmprime.c:143../mpv/video/out/hwdec/hwdec_drmprime.c:147rpi4_8rpi4_10unsupported DRM image format %s drmprimeFailed to commit disable plane request (code %d)Failed to retrieve DRM atomic context. No drmprime video plane. You might need to specify it manually using --drm-drmprime-video-plane Failed to retrieve DRM fd from native display. Card does not support prime handles. Failed to retrieve drm params from native resources drm params pointer to atomic request is invalid Failed to set the drmprime video plane %d (buffer %d). drmprime-overlay../mpv/video/out/vo_drm.c:281../mpv/video/out/vo_drm.c:283../mpv/video/out/vo_drm.c:392../mpv/video/out/vo_drm.c:98Cannot create dumb buffer: %s Requested format not supported by VO, falling back to xrgb8888 Cannot create framebuffer: %s Cannot map dumb buffer: %s Failed to set CRTC for connector %u: %s Hole in swapchain? Failed to queue page flip: %s Direct Rendering Manager (software scaling)update_sixel_swscaler: Failed to create new dither: %s ../mpv/video/out/vo_sixel.c:320draw_frame: prepare_palette returned error: %s [?1070lpreinit: Failed to create output file: %s preinit: Failed to create new dither: %s sixelterminal graphics using sixelsvo-sixelreqcolorsfixedpalettebufferedjajuniarithmeticxorDND action is %s server-sideclient-sideRequested %s decorations but compositor responded with %s. It is likely that compositor wants us to stay in a given mode. Enabling server decorations Disabling server decorations ../mpv/video/out/wayland_common.c:550No screens could be found! Screen index %i not found/unavailable! Falling back to screen 0! Screen name %s not found/unavailable! Falling back to screen 0! Failed to create dnd pipe! Receiving DND offer with mime %s Given DND offer with mime type %s -+*/<>`~!@#$%^&()_{}:;"',.?\|=[]failed to compile keymap failed to create XKB state Unable to get drm device from device id: %s Unable to find a valid drm device node. Unable to open DRM node path '%s': %s Unable to set DRM atomic cap: %s Unable to get DRM plane resources: %s No DRM planes were found. Unable to get DRM plane properties: %s Unable to get DRM plane property: %s Unable to get DRM plane: %s ../mpv/video/out/wayland_common.c:1921DRM primary plane supports drm format: %s Error occurred on the display fd Invalid output scale given by the compositor! Deregistering output %s %s (0x%x) Compositor did not send a format and modifier table! ../mpv/video/out/wayland_common.c:1430../mpv/video/out/wayland_common.c:1434Compositor supports drm format: '%s(%016lx)' Obtained preferred scale, %f, from the compositor. Registered output %s %s (0x%x): x: %dpx, y: %dpx w: %dpx (%dmm), h: %dpx (%dmm) scale: %f Hz: %f DND offer ID mismatch! Accepting DND offer with mime type %s XCURSOR_THEMEXCURSOR_SIZEUnable to load cursor theme! left_ptrUnable to get default and left_ptr XCursor from theme! Received a new DND offer. Releasing the previous offer. Releasing DND offer with mime type %s Compositor sent negative width/height values. Treating them as zero. Resizing due to xdg from %ix%i to %ix%i Surface entered output %s %s (0x%x), scale = %f, refresh rate = %f Hz Deregistering seat 0x%x ../mpv/video/out/wayland_common.c:1510Scrolling won't work because the compositor doesn't support version 5 of wl_seat protocol! ../mpv/video/out/wayland_common.c:1528Registered interface %s at version %d Failed to allocate memfd: %s ../mpv/video/out/wayland_common.c:1677../mpv/video/out/wayland_common.c:1687../mpv/video/out/wayland_common.cwl->dnd_action >= 0DND aborted (hang up or error) ../mpv/video/out/wayland_common.c:1823../mpv/video/out/wayland_common.c:1827Enabling idle inhibitor Disabling the idle inhibitor DND aborted (read error) Read %zu bytes from the DND fd Reconfiguring! WAYLAND_DISPLAY../mpv/video/out/wayland_common.c:2730waylanddmabuf-waylandfailed to initialize input: check xkbcommon Compositor doesn't support %s (ver. 4) Compositor doesn't support the required %s protocol! No outputs found or compositor doesn't support %s (ver. 2) failed to create viewport interfaces! failed to create xdg_surface and xdg_toplevel! Compositor doesn't support the %s protocol! Compositor doesn't support the %s (ver. 3) protocol! ../mpv/video/out/wayland_common.c:2840../mpv/video/out/wayland_common.c:2843ControlMod1Mod4DND_REPLACEDND_APPENDDND_INSERT_NEXT../mpv/video/out/vo_wlshm.c:96wlshmWayland SHM video output (software scaling)VADisplayvaExportSurfaceHandle()%s failed (%s) vaExportSurfaceHandle: composed layers not supported. %s(%016lx) is not supported. Unable to get drm format from hardware decoding! Format '%s' with modifier '(%016lx)' is not supported by the compositor. wldmabuf../mpv/video/out/vo_dmabuf_wayland.cCompositor doesn't support the %s (ver. 4) protocol! No valid hardware decoding driver could be loaded! ../mpv/video/out/vo_dmabuf_wayland.c:324../mpv/video/out/vo_dmabuf_wayland.c:419Wayland dmabuf video outputMapped surface has separate layers - expected composed layers. Mapped surface with format %s; drm format '%s(%016lx)' is not supported by compositor and GPU combination. Supported Wayland display format %s: '%s(%016lx)' Wayland/DMA-BUF../mpv/video/out/wldmabuf/ra_wldmabuf.c:67../mpv/video/out/wldmabuf/ra_wldmabuf.c:72Shared memory not supported Reverting to normal Xlib Shared memory error,disabling ( Ximage error ) Shared memory error,disabling ( seg id error ) Shared memory error,disabling ( address error ) Not using SHM. could not allocate imageUsing mp format: %s X server image format not supported, use another VO. selected visual: %d Warning: this legacy VO has bad performance. Consider fixing your graphics drivers, or not forcing the x11 VO. can't keep up! Waiting for XShm completion events... X11 (software scaling)XPresent enabled. XPresent disabled. X11 error: %s Type: %x, display: %p, resourceid: %lx, serial: %lx Error code: %x, request code: %x, minor code: %x Xft.dpiUsing Xft.dpi scale: %gUsing X11 screen DPI scale: %gEnablingDisabling%s screensaver. Setting DMPS: %s. DPMS state could not be set. Couldn't send EWMH %s message! _XEMBED_INFO_NET_ACTIVE_WINDOW_NET_WM_STATE_MAXIMIZED_VERT_NET_WM_STATE_MAXIMIZED_HORZ_NET_WM_STATEUTF8_STRING../mpv/video/out/x11_common.chint_NET_WM_BYPASS_COMPOSITOR_MOTIF_WM_HINTSScreen name %s not found! Current display FPS: %f black_NET_WM_NAME_NET_WM_ICON_NAMEx11->window == None!x11->xicWM_DELETE_WINDOWThe XPresent extension is not supported. The XPresent extension was found. focusWindowclientWindowinputStyle../mpv/video/out/x11_common.c:1565../mpv/video/out/x11_common.c:1573_NET_WM_ICONXdndAware_GTK_THEME_VARIANTdarkCouldn't init Xrandr. Xrandr doesn't work. amdintelmodesettingnouveaunvidiaradeonDisplay %d (%s): [%d, %d, %d, %d] @ %f FPS _NET_WM_STATE_SKIP_TASKBARNET style set skip taskbar (%d). (none)DnD type: '%s' Selected DnD type: %s _NET_WM_STATE_ABOVE_NET_WM_STATE_STAYS_ON_TOPNET style stay on top (%d). Using state %s. _WIN_LAYERoriginal window layer is %ld. Layered style stay on top (layer %ld). _NET_WM_STATE_FULLSCREENavoiding triggering old-style fullscreen uninit ... local!vo->x11../mpv/video/out/x11_common.c:688X11 opening display: %s couldn't open the X11 display (%s)! XOpenIM() failed. Unicode input will not work. unix:localhost:X11 running at %dx%d ("%s" => %s display) _WIN_PROTOCOLSDetected wm supports layers. _NET_SUPPORTEDUnknown wm type... Detected wm supports NetWM. Detected wm supports FULLSCREEN state. Detected wm supports ABOVE state. Detected wm supports STAYS_ON_TOP state. _NET_WM_STATE_BELOWDetected wm supports BELOW state. _NET_WM_STATE_STICKYDetected wm supports STICKY state. Detected wm supports SKIP_TASKBAR state. NetWM usage disabled by user. Forcing NetWM FULLSCREEN support. XEvent: %d adjusting embedded window position _XEMBEDOur window was destroyed, exiting WM_PROTOCOLSXdndEnterXdndTypeListXdndPositionXdndStatusXdndActionCopyXdndDropXdndSelectionmpv_dnd_selectionXdndLeaveParent windows supports XEmbed. Dropping type: %s (%s) XdndFinished_NET_FRAME_EXTENTSWM_STATEnot waiting for MapNotify _NET_WM_STATE_HIDDEN_NET_WM_DESKTOP_NET_REQUEST_FRAME_EXTENTS!x11->window_NET_WM_PIDx11->window_NET_WM_FULLSCREEN_MONITORSX11 error: error during XSelectInput call, trying without mouse events _NET_CURRENT_DESKTOP../mpv/video/out/x11_common.c:2193../mpv/video/out/x11_common.c:2196_ICC_PROFILE_%dRetrieving ICC profile for display: %d _NET_WM_MOVERESIZE_NET_WM_CM_S%dX11 can't keep up! Waiting for XShm completion events... Shared memory not supported Reverting to normal Xv. Got XvImage with too small size: %ux%u (expected %ux%u) XV_ITURBT_709XV_COLORSPACEbt_709xv_get_eq called! (%s, %d) packedplanarSource image dimensions are too high: %ux%u (maximum is %ux%u) Xvideo image format: 0x%x (%4.4s) %s using Xvideo port %d for hw scaling xv_set_eq called! (%s, %d) could not allocate Xv image data xvXv not supported by this X11 version/driver XvQueryAdaptors failed. Using Xv Adapter #%d (%s) Could not grab port %i. Xvideo ports busy. No Xvideo support found. XV_COLORKEYCouldn't get colorkey! Maybe the selected Xv port has no overlay. Couldn't set colorkey! XV_AUTOPAINT_COLORKEYDrawing no colorkey. Colorkey is drawn by Xv. Drawing colorkey manually. Colorkey is drawn as window background. Using colorkey from Xv (0x%06lx). Ignoring colorkey from mpv (0x%06lx). Using colorkey from mpv (0x%06lx). Use -colorkey to change. Setting and using colorkey from mpv (0x%06lx). Use -colorkey to change. XV_SYNC_TO_VBLANKXV_IMAGEMaximum source image dimensions: %ux%u Warning: this legacy VO has bad quality and performance, and will in particular result in blurry OSD and subtitles. You should fix your graphics drivers, or not force the xv VO. Invalid port parameter, overriding with port 0. X11/Xvadaptorck-methodcolorkeybuffersbgman../mpv/video/out/present_sync.c:62../mpv/video/out/present_sync.c:64glXCreateContextAttribsARBGLX did not advertise any extensions GLX_ARB_create_context_profileGLX does not support GLX_ARB_create_context_profile GLX_EXT_create_context_es2_profileCreating OpenGL %d.%d context... Could not set GLX context! ../mpv/video/out/opengl/context_glx.c:222GLX not found. GLX version older than 1.3. no GLX support present GLX chose FB config with ID 0x%x GLX chose visual with ID 0x%x Selected GLX FB config has no associated X visual X11/GLXGBM_FORMAT_XRGB8888GBM_FORMAT_ARGB8888GBM_FORMAT_XBGR8888GBM_FORMAT_ABGR8888GBM_FORMAT_XRGB2101010GBM_FORMAT_ARGB2101010GBM_FORMAT_XBGR2101010GBM_FORMAT_ABGR2101010Attempting to find EGLConfig matching %s No matching EGLConfig for %s Found matching EGLConfig for %s Could not find EGLConfig matching the GBM visual (%s). ../mpv/video/out/opengl/context_drm_egl.c:275GBM surface using modifier 0x%lX Failed to create framebuffer: %s Failed to commit atomic request: %s ../mpv/video/out/opengl/context_drm_egl.c:341../mpv/video/out/opengl/context_drm_egl.c:343../mpv/video/out/opengl/context_drm_egl.c:586Requested format not supported by context, falling back to xrgb8888 %s supported by draw plane. %s not supported by draw plane: Falling back to %s. No suitable format found on draw plane (tried: %s and %s). IN_FORMATSFailed to find IN_FORMATS property ../mpv/video/out/opengl/context_drm_egl.c:558Supported modifier: 0x%lX No supported DRM modifiers found. Creating GBM device Failed to create GBM device. Initializing GBM surface (%d x %d) Initializing EGL EGL_MESA_platform_gbmFailed to create GBM surface. Failed to setup GBM. EGL_KHR_platform_gbmFailed to get EGL display. Failed to initialize EGL. Initializing EGL surface Failed to create EGL surface. Failed to setup EGL. Failed to make context current. Preparing framebuffer Failed to lock GBM surface. Failed to create framebuffer. Opening render node "%s" Cannot open render node: %s Could not find path to render node. Couldn't lock front buffer ../mpv/video/out/opengl/context_drm_egl.c:373DRM/EGL../mpv/video/out/opengl/context_wayland.c:88EGL_EXT_platform_waylandHandling resize on the egl side Wayland/EGL../mpv/video/out/opengl/context_x11egl.c:97EGL_EXT_platform_x11Could not initialize EGL. Getting EGL_CONFIG_ID failed! Getting X visual ID failed! Choosing visual EGL config 0x%x, visual ID 0x%x Getting X visual failed! Could not create EGL surface! Could not make context current! x11eglX11/EGL %s=0x%x %s= Desktop OpenGLGLES 2.x +Trying to create %s context. Could not bind API! EGL_EXT_pixel_format_floatCould not request floating point pixel format for %s! ../mpv/video/out/opengl/egl_helpers.c:206Could not choose EGLConfig for %s! Could not refine EGLConfig for %s! Chosen EGLConfig: Could not create EGL context for %s (error=%d)! %d.%dEGL_VERSION=%s EGL_VENDOR=%s EGL_CLIENT_APIS=%s Could not create a GL context. eglGetPlatformDisplayEGL_EXT_platform_baseeglGetPlatformDisplayEXTeglCreatePlatformWindowSurfaceeglCreatePlatformWindowSurfaceEXTconfig-idoutput-formatrgb8rgb10rgb16rgb16frgb32fEGL_CONFIG_IDEGL_RED_SIZEEGL_GREEN_SIZEEGL_BLUE_SIZEEGL_ALPHA_SIZEEGL_COLOR_BUFFER_TYPEEGL_CONFIG_CAVEATEGL_CONFORMANTEGL_NATIVE_VISUAL_IDCould not make EGL context current. ../mpv/video/filter/vf_gpu_egl.c:52../mpv/video/filter/vf_gpu_egl.c:53Could not create EGL context. ../mpv/video/out/opengl/common.cframebuffer == 0GLESdesktop OpenGLglGetStringCan't load OpenGL functions. glGetString(GL_VERSION) returned NULL. GL_VERSION='%s' OpenGL ES Detected %s %d.%d. At least GLESv2 required. GL_VENDOR='%s' GL_RENDERER='%s' GL_SHADING_LANGUAGE_VERSION='%s' glGetStringiglGetIntegervCombined OpenGL extensions string: %s GL %d.%d function %s not found. Function %s from extension %s not found. i < MAX_FN_COUNTLoaded extension %s. Software RasterizerllvmpipesoftpipeMesa X11Apple Software RendererDetected suspected software renderer. AMDNVIDIA CorporationATI Technologies Inc.GL_ARB_map_buffer_rangeGL_EXT_unpack_subimageGL_ARB_framebuffer_objectGL_ARB_vertex_array_objectGL_ARB_texture_rgGL_EXT_texture_rgGL_EXT_texture_norm16GL_ARB_texture_floatGL_EXT_color_buffer_half_floatGL_ARB_syncGL_ARB_timer_queryGL_EXT_disjoint_timer_queryGL_ARB_invalidate_subdataGL_ARB_get_program_binaryGL_ARB_buffer_storageGL_EXT_buffer_storageGL_ARB_uniform_buffer_objectGL_ARB_compute_shaderGL_ARB_arrays_of_arraysGLX_SGI_swap_controlGLX_MESA_swap_controlWGL_EXT_swap_controlGLX_SGI_video_syncGL_NV_vdpau_interopGL_APPLE_rgb_422GL_ARB_debug_outputGL_KHR_debugGL_ANGLE_translated_shader_sourceglGetTranslatedShaderSourceANGLEglDebugMessageCallbackglVDPAUInitNVglVDPAUFiniNVglVDPAURegisterOutputSurfaceNVglVDPAURegisterVideoSurfaceNVglVDPAUUnregisterSurfaceNVglVDPAUSurfaceAccessNVglVDPAUMapSurfacesNVglVDPAUUnmapSurfacesNVglXGetVideoSyncSGIglXWaitVideoSyncSGIwglSwapIntervalEXTglXSwapIntervalMESAglXSwapIntervalSGIglDispatchComputeglBindImageTextureglMemoryBarrierglBufferStorageEXTglBufferStorageglGetProgramBinaryglProgramBinaryglInvalidateFramebufferglInvalidateTexImageglGenQueriesEXTglDeleteQueriesEXTglBeginQueryEXTglEndQueryEXTglQueryCounterEXTglIsQueryEXTglGetQueryObjectivEXTglGetQueryObjecti64vEXTglGetQueryObjectuivEXTglGetQueryObjectui64vEXTglGenQueriesglDeleteQueriesglBeginQueryglEndQueryglQueryCounterglIsQueryglGetQueryObjectivglGetQueryObjecti64vglGetQueryObjectuivglGetQueryObjectui64vglFenceSyncglClientWaitSyncglDeleteSyncglGenVertexArraysglBindVertexArrayglDeleteVertexArraysglBindFramebufferglGenFramebuffersglDeleteFramebuffersglCheckFramebufferStatusglFramebufferTexture2DglGetFramebufferAttachmentParameterivglTexImage3DglGetTexLevelParameterivglBindBufferBaseglBlitFramebufferglMapBufferRangeglReadBufferglUnmapBufferglDrawBufferglTexImage1DglActiveTextureglAttachShaderglBindAttribLocationglBindBufferglBindTextureglBlendFuncSeparateglBufferDataglBufferSubDataglClearglClearColorglCompileShaderglCreateProgramglCreateShaderglDeleteBuffersglDeleteProgramglDeleteShaderglDeleteTexturesglDisableglDisableVertexAttribArrayglDrawArraysglEnableglEnableVertexAttribArrayglFinishglFlushglGenBuffersglGenTexturesglGetAttribLocationglGetErrorglGetProgramInfoLogglGetProgramivglGetShaderInfoLogglGetShaderivglGetUniformLocationglLinkProgramglPixelStoreiglReadPixelsglScissorglShaderSourceglTexImage2DglTexParameteriglTexSubImage2DglUniform1fglUniform2fglUniform3fglUniform1iglUniformMatrix2fvglUniformMatrix3fvglUseProgramglVertexAttribPointerglViewport../mpv/video/out/opengl/context.c:250Flip counts: %u->%u, step=%d wrong pattern, expected %d got %d (hit: %d, mis: %d) ../mpv/video/out/opengl/context.c:130../mpv/video/out/opengl/context.c:135Suspected software renderer or indirect context. GL_*_swap_control extension missing. opengl-glfinishopengl-waitvsyncopengl-swapintervalopengl-check-pattern-aopengl-check-pattern-bopengl-esopengl-early-flushl8la8l16la16largb8uirgb16uirgba12rgb565appleypRendering to FBO requested, but no FBO extension found! ../mpv/video/out/opengl/libmpv_gl.c:16../mpv/video/out/opengl/libmpv_gl.c:24OpenGL not initialized. ../mpv/video/out/opengl/libmpv_gl.c:35../mpv/video/out/opengl/ra_gl.c:1121../mpv/video/out/opengl/ra_gl.csrc->params.blit_srcdst->params.blit_dstdst->params.render_dstbuf->params.host_mutable../mpv/video/out/opengl/ra_gl.c:597../mpv/video/out/opengl/ra_gl.c:601mapping buffervertexcomputefragment%s shader source: ../mpv/video/out/opengl/ra_gl.c:766%s shader compile log (status=%d): %s ../mpv/video/out/opengl/ra_gl.c:776Translated shader: tex->params.host_mutable!params->buf || !params->src../mpv/video/out/opengl/ra_gl.c:286../mpv/video/out/opengl/ra_gl.c:289params->dimensions == 2 && !params->non_normalizedparams->dimensions == 2!params->format->dummy_formatafter creating textureTrying to create renderable texture with unsupported format. gl->mpgl_caps & MPGL_CAP_FBError: framebuffer completeness check failed (error=%d). after creating framebufferval->index >= 0 && val->index < pass_gl->num_uniform_locinput->dim_v * input->dim_m == 1tex->params.storage_dsttex->params.render_srcparams->target->params.render_dstparams->target->params.format == pass->params.target_format../mpv/video/out/opengl/ra_gl.c:887../mpv/video/out/opengl/ra_gl.c:891before loading programLoading binary program succeeded. ../mpv/video/out/opengl/ra_gl.c:801shader link log (status=%d): %s ../mpv/video/out/opengl/ra_gl.c:863../mpv/video/out/opengl/ra_gl.c:907../mpv/video/out/opengl/ra_gl.c:242At least OpenGL 2.1 or OpenGL ES 2.0 required. ../mpv/video/out/opengl/ra_gl.c:88../mpv/video/out/opengl/ra_gl.c:149comp < MP_ARRAY_SIZE(pnames)../mpv/video/out/opengl/ra_gl.c:185../mpv/video/out/opengl/ra_gl.c:195../mpv/video/out/opengl/ra_gl.c:206../mpv/video/out/opengl/ra_gl.c:21816 bit UNORM textures not available. ../mpv/video/out/opengl/ra_gl.c:437../mpv/video/out/opengl/ra_gl.c:449unknown_fboGL: %s ../mpv/video/out/opengl/utils.ce->dim_m == 1INVALID_ENUMINVALID_VALUEINVALID_OPERATIONINVALID_FRAMEBUFFER_OPERATIONOUT_OF_MEMORY%s: OpenGL error %s. stride > 0dir == 1 || dir == -1!vao->vao!vao->buffer../mpv/video/out/hwdec/hwdec_vulkan.c:316../mpv/video/out/hwdec/hwdec_vulkan.c:337This is not a libplacebo vulkan gpu api context. Failed to obtain pl_gpu. ../mpv/video/out/hwdec/hwdec_vulkan.c:83../mpv/video/out/hwdec/hwdec_vulkan.c:84av_hwdevice_ctx_init failed UUID../mpv/video/out/vulkan/context.c:56Available vulkan devices: '%s' (GPU %d, PCI ID %x:%x, UUID %s) No device with %s '%.*s'! ../mpv/video/out/vulkan/context.cpllogvkinst../mpv/video/out/vulkan/context.c:241../mpv/video/out/vulkan/context.c:245VK_EXT_descriptor_bufferVK_EXT_shader_atomic_floatVK_KHR_video_decode_queueVK_KHR_video_decode_h264VK_KHR_video_decode_h265VK_KHR_video_queueVK_KHR_video_decode_av1vulkan-devicevulkan-swap-modevulkan-queue-countvulkan-async-transfervulkan-async-computefifofifo-relaxedmailbox../mpv/video/out/vulkan/utils.cvk->vkinstVK_KHR_surface../mpv/video/filter/vf_gpu_vulkan.c:56../mpv/video/filter/vf_gpu_vulkan.c:62../mpv/video/filter/vf_gpu_vulkan.c:63../mpv/video/filter/vf_gpu_vulkan.c:92Handling resize on the vk side ../mpv/video/out/vulkan/context_wayland.c:64VK_KHR_wayland_surfaceFailed creating Wayland surface waylandvkWayland/Vulkan../mpv/video/out/vulkan/context_xlib.c:59VK_KHR_xlib_surfacempvkFailed creating Xlib surface x11vkX11/Vulkan '%s' (GPU ID %x:%x) No available displays for device. Selected display (%d) not present. No available planes for device. Selected plane (%d) not present. ../mpv/video/out/vulkan/context_display.c:98 Failed enumerating planes ../mpv/video/out/vulkan/context_display.c:108../mpv/video/out/vulkan/context_display.c:118 Failed enumerating plane displays ../mpv/video/out/vulkan/context_display.c:132 Failed enumerating display properties No available modes for display. Selected mode (%d) not present. ../mpv/video/out/vulkan/context_display.c:166 Failed enumerating display modes Planes: Plane: %d Selected plane (%d) not available on selected display. Mode %02d: %dx%d (%02d.%03d Hz) ../mpv/video/out/vulkan/context_display.c:184 Display %d: '%s' (%dx%d) Modes: VK_KHR_displayUnable to create Vulkan instance. No Vulkan devices detected. ../mpv/video/out/vulkan/context_display.c:247Failed enumerating physical devices. Vulkan Devices: ../mpv/video/out/vulkan/context_display.c:371Failed to open physical device. DRM device found for Vulkan device at %04X:%02X:%02X:%02X Card does not have a render node. Failed to open render node: %s Couldn't open DRM render node for Vulkan device at: %04X:%02X:%02X:%02X Failed to set up DRM. Failed creating Display surface No DRM render fd available. VAAPI hwaccel will not be usable. displayvkvulkan-display-displayvulkan-display-modevulkan-display-planeGPU APIs (offscreen contexts): Could not render or retrieve frame. Creating offscreen GPU context '%s' Could not create offscreen ra context. Offscreen ra context does not support image retrieval. ../mpv/video/filter/vf_gpu.cpriv->rendererThis is experimental. Keep in mind: - OSD rendering is done in software. - Encoding will convert the RGB output to yuv420p in software. - Using this with --vo=gpu will filter the video twice! (And you can't prevent this; they use the same options.) - Some features are simply not supported. vo_gpu as filterCalling %s %s failed -> %s: %scu->cuCtxPushCurrent(p->display_ctx)cu->cuMemcpy2DAsync(&cpy, 0)cu->cuStreamSynchronize(0)cu->cuCtxPopCurrent(&dummy)Unsupported format: %s cu->cuCtxDestroy(p->decode_ctx)cu->cuCtxDestroy(p->display_ctx)libcuda.so.1Cannot load %s cuInitcuDriverGetVersioncuDeviceGetCountcuDeviceGetcuDeviceGetAttributecuDeviceGetNamecuDeviceComputeCapabilitycuCtxCreate_v2cuCtxGetCurrentcuCtxSetLimitcuCtxPushCurrent_v2cuCtxPopCurrent_v2cuCtxDestroy_v2cuMemAlloc_v2cuMemAllocPitch_v2cuMemAllocManagedcuMemsetD8AsynccuMemFree_v2cuMemcpycuMemcpyAsynccuMemcpy2D_v2cuMemcpy2DAsync_v2cuMemcpyHtoD_v2cuMemcpyHtoDAsync_v2cuMemcpyDtoH_v2cuMemcpyDtoHAsync_v2cuMemcpyDtoD_v2cuMemcpyDtoDAsync_v2cuGetErrorNamecuGetErrorStringcuCtxGetDevicecuDevicePrimaryCtxRetaincuDevicePrimaryCtxReleasecuDevicePrimaryCtxSetFlagscuDevicePrimaryCtxGetStatecuDevicePrimaryCtxResetcuStreamCreatecuStreamQuerycuStreamSynchronizecuStreamDestroy_v2cuStreamAddCallbackcuStreamWaitEventcuEventCreatecuEventDestroy_v2cuEventSynchronizecuEventQuerycuEventRecordcuLaunchKernelcuLinkCreatecuLinkAddDatacuLinkCompletecuLinkDestroycuModuleLoadDatacuModuleUnloadcuModuleGetFunctioncuModuleGetGlobalcuTexObjectCreatecuTexObjectDestroycuGLGetDevices_v2cuGraphicsGLRegisterImagecuGraphicsUnregisterResourcecuGraphicsMapResourcescuGraphicsUnmapResourcescuGraphicsSubResourceGetMappedArraycuGraphicsResourceGetMappedPointer_v2cuDeviceGetUuidcuDeviceGetUuid_v2cuDeviceGetLuidcuDeviceGetByPCIBusIdcuDeviceGetPCIBusIdcuImportExternalMemorycuDestroyExternalMemorycuExternalMemoryGetMappedBuffercuExternalMemoryGetMappedMipmappedArraycuMipmappedArrayGetLevelcuMipmappedArrayDestroycuImportExternalSemaphorecuDestroyExternalSemaphorecuSignalExternalSemaphoresAsynccuWaitExternalSemaphoresAsynccuArrayCreate_v2cuArray3DCreate_v2cuArrayDestroycuEGLStreamProducerConnectcuEGLStreamProducerDisconnectcuEGLStreamConsumerDisconnectcuEGLStreamProducerPresentFramecuEGLStreamProducerReturnFramecu->cuInit(0)Failed to load CUDA symbols CUDA hwdec only works with OpenGL or Vulkan backends. cu->cuGraphicsUnregisterResource(egl->cu_res)cu->cuGLGetDevices(&device_count, &display_dev, 1, CU_GL_DEVICE_LIST_ALL)cu->cuCtxCreate(&p->display_ctx, CU_CTX_SCHED_BLOCKING_SYNC, display_dev)cu->cuDeviceGet(&decode_dev, decode_dev_idx)Using separate decoder and display devices cu->cuCtxCreate(&p->decode_ctx, CU_CTX_SCHED_BLOCKING_SYNC, decode_dev)../mpv/video/out/hwdec/hwdec_cuda_gl.c:44cu->cuGraphicsGLRegisterImage(&egl->cu_res, texture, target, CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD)cu->cuGraphicsMapResources(1, &egl->cu_res, 0)cu->cuGraphicsSubResourceGetMappedArray(&p->cu_array[n], egl->cu_res, 0, 0)cu->cuGraphicsUnmapResources(1, &egl->cu_res, 0)need OpenGL >= 2.1 or OpenGL-ES >= 3.0 CUDA hwdec with Vulkan requires exportable texture memory of type 0x%X. CUDA hwdec with Vulkan requires exportable semaphores of type 0x%X. CUDA hwdec with Vulkan requires driver version 410.48 or newer. cu->cuDeviceGetCount(&device_count)cu->cuDeviceGet(&dev, i)cu->cuDeviceGetUuid(&uuid, dev)Could not match Vulkan display device in CUDA. cu->cuSignalExternalSemaphoresAsync(&evk->cuda_sem, &sp, 1, 0)cu->cuWaitExternalSemaphoresAsync(&evk->cuda_sem, &wp, 1, 0)cu->cuMipmappedArrayDestroy(evk->mma)cu->cuDestroyExternalMemory(evk->mem)cu->cuDestroyExternalSemaphore(evk->cuda_sem)../mpv/video/out/hwdec/hwdec_cuda_vk.c:58../mpv/video/out/hwdec/hwdec_cuda_vk.c:77cuda_ext_vk_init failed cu->cuImportExternalMemory(&evk->mem, &ext_desc)cu->cuExternalMemoryGetMappedMipmappedArray(&evk->mma, evk->mem, &tex_desc)cu->cuMipmappedArrayGetLevel(&p->cu_array[n], evk->mma, 0)../mpv/video/out/hwdec/hwdec_cuda_vk.c:143cu->cuImportExternalSemaphore(&evk->cuda_sem, &w_desc)vaMapBuffer()vaCreateSurfaces()../mpv/video/out/vo_vaapi.c:224Using vaDeriveImage() vaCreateImage()VA-API is most likely emulated via VDPAU. It's better to use VDPAU directly with: --vo=vdpau ../mpv/video/out/vo_vaapi.c:153../mpv/video/out/vo_vaapi.c:155vaQueryImageFormats()%d image formats available: %s ../mpv/video/out/vo_vaapi.c:400../mpv/video/out/vo_vaapi.c:782../mpv/video/out/vo_vaapi.c:783vaQuerySubpictureFormats()%d subpicture formats available: %s, flags 0x%x OSD format not supported. Disabling OSD. ../mpv/video/out/vo_vaapi.c:814vaQueryDisplayAttributes()../mpv/video/out/vo_vaapi.c:820Warning: this compatibility VO is low quality and may have issues with OSD, scaling, screenshots and more. vo=gpu is the preferred choice in any case and includes VA-API support via hwdec=vaapi or vaapi-copy. ../mpv/video/out/vo_vaapi.csw_src->w <= img.w && sw_src->h <= img.hvaUnmapBuffer()vaPutImage()vaAssociateSubpicture()vaPutSurface()vaDeassociateSubpicture()vaCreateSubpicture()failed to allocate OSD sub-picture of size %dx%d. Could not upload surface. VA API with X11vo-vaapiscalingscaled-osdhqnla../mpv/video/filter/vf_vavpp.c:84vaQueryVideoProcPipelineCaps()Failed to create hw pool. ../mpv/video/filter/vf_vavpp.cav_frameFailed to allocate frame from hw pool. Unknown error. vaBeginPicture()vaCreateBuffer()in=0x%x b%d=0x%x f%d=0x%x vaRenderPicture()vaCreateConfig()vaCreateContext()vaQueryVideoProcFilters()vaQueryVideoProcFilterCaps()Selected deinterlacing algorithm: %d Selected deinterlacing algorithm not supported. VA-API Video Post-Process Filterinterlaced-onlyreversal-bugfirst-fieldbobweavemotion-compensatedlibva: %sVDPAU backend../mpv/video/vaapi.c:271../mpv/video/vaapi.c:119/vaapiFailed to initialize VAAPI: %s Initialized VAAPI: version %d.%d mapping VAAPI EGL image failed unsupported VA image format %s ../mpv/video/out/hwdec/hwdec_vaapi.c:448VAAPI hwdec only works with OpenGL or Vulkan backends. Trying to open a %s VA display... Could not create a VA display. libavutil vaapi code rejected the driver? Going to probe surface formats (may log bogus errors)... Could not allocate FFmpeg AVVAAPIHWConfig ../mpv/video/out/hwdec/hwdec_vaapi.c:529../mpv/video/out/hwdec/hwdec_vaapi.c:530vaQueryConfigProfiles()vaQueryConfigEntrypoints(): '%s' for profile %dvaCreateConfig(): '%s' for profile %dfailed to retrieve libavutil frame constraints failed to alloc libavutil frame context failed to init libavutil frame context failed to get libavutil frame context supported formats Failed to create mapper ../mpv/video/out/hwdec/hwdec_vaapi.c:404../mpv/video/out/hwdec/hwdec_vaapi.c:405../mpv/video/out/hwdec/hwdec_vaapi.c:505Supported formats: Done probing surface formats. scale_vaapiCannot obtain size of object with fd %d: %s Failed to reset offset for fd %d: %s ../mpv/video/out/hwdec/dmabuf_interop_pl.c:90Object %d with fd %d imported as %p libplacebo dmabuf interop requires support for PL_HANDLE_DMA_BUF import. using libplacebo dmabuf interop Cannot map unknown multi-plane format: 0x%08X Failed to import surface in EGL: %u ../mpv/video/out/hwdec/dmabuf_interop_gl.c:123eglCreateImageKHReglDestroyImageKHRglEGLImageTargetTexture2DOESglEGLImageTargetTexStorageEXTGL_OES_EGL_imageGL_EXT_EGL_image_storageEGL_EXT_image_dma_buf_importEGL_KHR_image_baseEGL_EXT_image_dma_buf_import_modifiersUsing EGL dmabuf interop via %s ../mpv/video/filter/vf_vdpaupp.cmpivdpau postprocessingdeint-modechroma-deintpullupdenoisehqscalingtemporaltemporal-spatialError when calling vdp_output_surface_destroyError when calling vdp_presentation_queue_destroyError when calling vdp_presentation_queue_target_destroyError when calling vdp_bitmap_surface_destroyError when calling vdp_output_surface_createvdpau out create: %u vdpau rotation surface create: %u Error when calling vdp_presentation_queue_target_create_x11Error when calling vdp_presentation_queue_createError setting colorkeyCompositing window manager detected. Assuming timing info is inaccurate. Allocating clearing surfaceInitializing clearing surface../mpv/video/out/vo_vdpau.cAllocating a %dx%d surface for OSD bitmaps. Query to get max OSD surface size failedOSD bitmaps do not fit on a surface with the maximum supported size OSD: error when creating surfaceOSD: putbits failed../mpv/video/out/vo_vdpau.c:653OSD: Error when renderingVDPAU is most likely emulated via VA-API. This is inefficient. Use --vo=gpu instead. Warning: this compatibility VO is low quality and may have issues with OSD, scaling, screenshots and more. vo=gpu is the preferred choice in any case and includes VDPAU support via hwdec=vdpau or vdpau-copy. Error when calling vdp_presentation_queue_get_timeInconsistent timing detected. Error calling presentation_queue_query_surface_statusVdpau time: %lu Surface %d status: %d time: %lu Queue time difference: %.4f ms Frame shown too early (%.4f ms) Frame shown late (%.4f ms) Queued surface count (before add): %d Error when calling vdp_presentation_queue_displayQueue new surface %d: Vdpau time: %lu pts: %lu Error when calling vdp_video_surface_query_capabilitiesVideo too large for vdpau. Could not upload image. Error when calling vdp_presentation_queue_block_until_surface_idleError clearing screenUnsupported rotation angle: %u Error rendering rotated framefmt == OUTPUT_RGBA_FORMATError when calling vdp_output_surface_get_bits_nativeVDPAU with X11vo-vdpaucomposite-detectqueuetime-windowedqueuetime-fsoutput-surfacesforce-yuvError calling vdp_device_create_x11 while preempted: %d Error when calling vdp_device_create_x11: %d Error when calling vdp_get_proc_address(function id %d): %s Could not create dummy object: %s../mpv/video/vdpau.c!ctx->video_surfaces[i].in_useError when calling vdp_video_surface_destroyError when calling vdp_device_destroyctx->video_surfaces[r->index].in_useGot display preemption notice! Will attempt to recover. Recovered from display preemption. Error when destroying surfacee->w == w && e->h == he->chroma == chromae->rgb_format == rgb_formate->rgb == rgbe->surface == VDP_INVALID_HANDLEe->osurface == VDP_INVALID_HANDLE!e->allocatedError when allocating surface!e->in_use../mpv/video/vdpau.c:213no surfaces available in mp_vdpau_get_video_surface ../mpv/video/vdpau.c:381Error when uploading surfaceError when calling vdp_get_information_stringVAAPIError setting video mixer attribute %s: %s ../mpv/video/vdpau_mixer.cbase->imgfmt == IMGFMT_VDPAU../mpv/video/vdpau_mixer.c:41../mpv/video/vdpau_mixer.c:65Error when calling vdp_video_mixer_destroyError when calling vdp_output_surface_render_output_surfaceError when calling vdp_video_surface_get_parametersRecreating vdpau video mixer. Error when calling video_mixer_query_feature_supportYour hardware or VDPAU library does not support requested hqscaling. Error when calling vdp_video_mixer_createError calling vdp_video_mixer_set_feature_enablesNOISE_REDUCTION_LEVELSHARPNESS_LEVELSKIP_CHROMA_DEINTERLACECSC matrixError when calling vdp_video_mixer_render../mpv/video/out/opengl/hwdec_vdpau.c!p->mappedBefore uninitializing OpenGL interopAfter uninitializing OpenGL interopAfter initializing vdpau OpenGL interopvdpau-glwp_presentation_feedbacksync_outputpresenteduuuuuuudiscardedwp_presentationclock_idwp_viewportset_sourceffffset_destinationiiwp_viewporterget_viewportxdg_popupconfigureiiiipopup_donerepositioned3ugraboureposition3ouxdg_topleveliiacloseconfigure_bounds4iiwm_capabilities5aset_parent?oset_titleset_app_idshow_window_menuouiiresizeouuset_max_sizeset_min_sizeset_maximizedunset_maximizedset_fullscreenunset_fullscreenset_minimizedxdg_surfaceget_toplevelget_popupn?ooset_window_geometryack_configurexdg_positionerset_sizeset_anchor_rectset_anchorset_gravityset_constraint_adjustmentset_offsetset_reactiveset_parent_size3iiset_parent_configurexdg_wm_basecreate_positionerget_xdg_surfacepongzwp_idle_inhibitor_v1zwp_idle_inhibit_manager_v1create_inhibitorzwp_linux_dmabuf_feedback_v1format_tablehumain_devicetranche_donetranche_target_devicetranche_formatstranche_flagszwp_linux_buffer_params_v1createdhuuuuuiiuucreate_immed2niiuuzwp_linux_dmabuf_v1modifier3uuucreate_paramsget_default_feedback4nget_surface_feedback4nozxdg_toplevel_decoration_v1set_modeunset_modezxdg_decoration_manager_v1get_toplevel_decorationwp_content_type_v1set_content_typewp_content_type_manager_v1get_surface_content_typewp_single_pixel_buffer_manager_v1create_u32_rgba_buffernuuuuwp_fractional_scale_v1preferred_scalewp_fractional_scale_manager_v1get_fractional_scalewp_cursor_shape_device_v1set_shapeuuwp_cursor_shape_manager_v1get_pointerget_tablet_tool_v2zwp_tablet_pad_v2groupbuttonsuuuuooleaveuoset_feedbackusuzwp_tablet_pad_group_v2modesmode_switchzwp_tablet_pad_strip_v2suzwp_tablet_pad_ring_v2zwp_tablet_v2zwp_tablet_tool_v2hardware_serialhardware_id_wacomcapabilityproximity_inproximity_outmotionpressuretiltrotationsliderwheelfiset_cursoru?oiizwp_tablet_seat_v2tablet_addedtool_addedpad_addedzwp_tablet_manager_v2get_tablet_seat???WAVEFORMATEXTENSIBLE_CHANNEL_MAS@ ?dt??26 ???C??;f??(4D???@@?L=??$@$@  ??? BANDWIDTH_5_MHZBANDWIDTH_6_MHZBANDWIDTH_7_MHZBANDWIDTH_8_MHZBANDWIDTH_10_MHZTRANSMISSION_MODGUARD_INTERVAL_1N@N@^@^@  mp_aframe_createmp_aframe_skip_samplesmp_aframe_pool_allocatemp_chmap_fill_na  mp_chmap_get_reorderreplace_speakers  !"mp_chmap_sel_add_speakerinitad_spdif_processinit_filterPPP(PP,Pw (08@P`p@@-DT! @P-DT!@@BMbP?-C6?!DO贁N??# mpv EDPGPG`"7@{Gzt{Gzt?:0yE>{Gz??{Gz??@xD?zG???qq??t:W?Dl@@Q@Q@Gz@qq @ @ ףp= ??& .>Gz??ɿa+ei? _B{Gz?appendin? Mb@Aư>zG????M??#???{{{{{{?s;?@K   q= ףp?HzG???颋.?mV@$Be?tE]t[ց{?A۽U?F]tE?$sO?ϧؿ?18?@P?+Q⿨P7U)?BY?+Q?P7U)?BY?lq?b`Hא?-q=@@?//!TEXTU -DT!?;f?+V @.1kH@?ro @?@?$?5>? W? ??@}O @lٺ? ?zG?yJe1@MbP? ףp= ?@33?Mbp???Dioɔ??)\(?]P@@  Mb0@Mb @ INVERSIOHIERARCHSDVDVIDEO  XB24XR24&&30R8 R8 R16 GR32R8 GR88fill_queue?pB`AL>af_scaletempo2_processinit_scaletempo2>A@A Bseek_bufferpeek_audio_with_zero_prependpeek_bufferrun_one_wsola_iteration   63 *'$!0-    ao_allocconvert_planeencodeinitL>?mp_mutex_init_type_internalao_play_dataao_read_data_lockedao_read_data_convertedinit_buffer_postmp_snprintf_catmp_lcmmp_mutex_init_type_internalencode_lavc_initencoder_context_allocencoder_init_codec_and_muxerencode_lavc_add_streamencode_lavc_add_packetprepare_prefixmp_mutex_init_type_internalmp_msg_log_buffer_destroy write_term_msglog_buffer_readmp_log_newmp_msg_initmp_msg_uninitmp_msg_log_buffer_resizemp_msg_log_buffer_newmp_msg_set_early_logging_raw (2<Fplaylist_entry_unrefplaylist_insert_atplaylist_removeplaylist_clearplaylist_moveplaylist_get_nextplaylist_entry_get_relplaylist_transfer_entries_toplaylist_transfer_entriesstats_destroyfind_entrystats_global_initmp_mutex_init_type_internalstats_global_querystats_ctx_createmp_tags_remove_bstrCopyright © 2000-2024 mpv/MPlayer/mplayer2 projectsSep 24 2024 01:10:26mpv v0.39.08q!D demux_cache_writeremove_head_packetadd_index_entrywrite_dump_packetread_packet_from_cacheclear_queueadd_missing_streamsfree_empty_cached_rangesprune_old_packetsswitch_current_rangeset_current_rangedemux_add_sh_stream_lockedfind_backward_restart_posback_demux_see_packetsattempt_range_joiningdequeue_packetadd_packet_lockedread_packetdemux_add_sh_streamdemux_get_streamdemux_free_asyncdemux_start_threaddemux_stop_threaddemux_start_prefetchdemux_read_any_packetdemux_stream_tags_changeddemux_metadata_changeddemux_updateupdate_final_metadatademux_close_streamdemux_flushdemux_shutdowndemux_freedemux_seekmp_mutex_init_type_internald_levelcreate_webshit_concat_streamdemux_open_urldemux_block_readingdemux_cache_dump_setdump_cachedemux_probe_cache_dump_targetdemux_report_unbuffered_read_bytesdemux_get_bytes_read_hackdemux_get_bitrate_statsdemux_get_reader_stateadd_streamsget_paramparse_edlbuild_timelinenested_io_close2export_replaygainhandle_new_streamdemux_seek_lavfdemux_lavf_read_packetget_highest_index_entry      parse_dovi_configread_next_blockhandle_block?,ZQV : $ D 'I5E9X"G.^6K2 F!\#J&U(8*W+A-;0O1]3Y7_=LCSMPmkv_parse_and_add_packetM -$3@TG"V3Db J J.J   J/J/.@Y-&qqg|%AlY_I 6,$demux_mkv_open_sub?$@build_ordered_chapter_timelinedemux_rawvideo_openI420Aadd_tlebml_parse_elementpacket_createdemux_packet_unref_contentsdemux_packet_shortendemux_packet_estimate_total_sizedemux_packet_add_blockadditionalprocess_inprocess_outunref_queuemp_async_queue_set_configmp_mutex_init_type_internalmp_async_queue_set_notifiermp_async_queue_create_filterdeint_processrotate_processdecf_resetdecf_destroythread_lockthread_unlockpublic_f_destroypublic_f_resetdecf_processfeed_packetmp_mutex_init_type_internal@? 2@ #&),/258;>ADlavfi_allocread_pad_inputinit_pads precreate_graphread_output_padsfeed_input_padsset_speed_anyrelink_filter_listuser_wrapper_processmp_output_chain_set_aoreorder_planesswresample_process D@fixed_aframe_size_processmp_chain_filtersinit_connectiondeinit_connectionadd_pending_pinreset_pinmp_filter_remove_pinmp_filter_graph_interruptfilter_destructormp_filter_internal_mark_progressmp_filter_graph_runfilter_recursivemp_pin_in_needs_datamp_pin_in_writemp_pin_out_has_datamp_pin_out_unreadmp_pin_connectmp_filter_add_pinmp_filter_graph_set_max_run_timemp_filter_create_with_paramsmp_mutex_init_type_internalmp_filter_createmp_filter_graph_set_wakeup_cbmp_frame_refmp_create_user_filterfinish_cmdinput_src_killdisable_sectionremove_bindsbind_keysmp_input_remove_touch_pointmp_input_enable_sectionmp_mutex_init_type_internalmp_input_src_init_done# mpv keybindings # # Location of user-defined bindings: ~/.config/mpv/input.conf # # Lines starting with # are comments. Use SHARP to assign the # key. # Copy this file and uncomment and edit the bindings you want to change. # # List of commands and further details: DOCS/man/input.rst # List of special keys: --input-keylist # Keybindings testing mode: mpv --input-test --force-window --idle # # Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore'). # # Strings need to be quoted and escaped: # KEY show-text "This is a single backslash: \\ and a quote: \" !" # # You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with # the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal). # # The default keybindings are hardcoded into the mpv binary. # You can disable them completely with: --no-input-default-bindings # Developer note: # On compilation, this file is baked into the mpv binary, and all lines are # uncommented (unless '#' is followed by a space) - thus this file defines the # default key bindings. # If this is enabled, treat all the following bindings as default. #default-bindings start #MBTN_LEFT ignore # don't do anything #MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen #MBTN_RIGHT cycle pause # toggle pause/playback mode #MBTN_BACK playlist-prev # skip to the previous file #MBTN_FORWARD playlist-next # skip to the next file # Mouse wheels, touchpad or other input devices that have axes # if the input devices supports precise scrolling it will also scale the # numeric value accordingly #WHEEL_UP add volume 2 #WHEEL_DOWN add volume -2 #WHEEL_LEFT seek -10 # seek 10 seconds backward #WHEEL_RIGHT seek 10 # seek 10 seconds forward ## Seek units are in seconds, but note that these are limited by keyframes #RIGHT seek 5 # seek 5 seconds forward #LEFT seek -5 # seek 5 seconds backward #UP seek 60 # seek 1 minute forward #DOWN seek -60 # seek 1 minute backward # Do smaller, always exact (non-keyframe-limited), seeks with shift. # Don't show them on the OSD (no-osd). #Shift+RIGHT no-osd seek 1 exact # seek exactly 1 second forward #Shift+LEFT no-osd seek -1 exact # seek exactly 1 second backward #Shift+UP no-osd seek 5 exact # seek exactly 5 seconds forward #Shift+DOWN no-osd seek -5 exact # seek exactly 5 seconds backward #Ctrl+LEFT no-osd sub-seek -1 # seek to the previous subtitle #Ctrl+RIGHT no-osd sub-seek 1 # seek to the next subtitle #Ctrl+Shift+LEFT sub-step -1 # change subtitle timing such that the previous subtitle is displayed #Ctrl+Shift+RIGHT sub-step 1 # change subtitle timing such that the next subtitle is displayed #Alt+left add video-pan-x 0.1 # move the video right #Alt+right add video-pan-x -0.1 # move the video left #Alt+up add video-pan-y 0.1 # move the video down #Alt+down add video-pan-y -0.1 # move the video up #Alt++ add video-zoom 0.1 # zoom in #ZOOMIN add video-zoom 0.1 # zoom in #Alt+- add video-zoom -0.1 # zoom out #ZOOMOUT add video-zoom -0.1 # zoom out #Ctrl+WHEEL_UP add video-zoom 0.1 # zoom in #Ctrl+WHEEL_DOWN add video-zoom -0.1 # zoom out #Alt+BS set video-zoom 0; set panscan 0; set video-pan-x 0; set video-pan-y 0 # reset zoom and pan settings #PGUP add chapter 1 # seek to the next chapter #PGDWN add chapter -1 # seek to the previous chapter #Shift+PGUP seek 600 # seek 10 minutes forward #Shift+PGDWN seek -600 # seek 10 minutes backward #[ multiply speed 1/1.1 # decrease the playback speed #] multiply speed 1.1 # increase the playback speed #{ multiply speed 0.5 # halve the playback speed #} multiply speed 2.0 # double the playback speed #BS set speed 1.0 # reset the speed to normal #Shift+BS revert-seek # undo the previous (or marked) seek #Shift+Ctrl+BS revert-seek mark # mark the position for revert-seek #q quit #Q quit-watch-later # exit and remember the playback position #q {encode} quit 4 #ESC set fullscreen no # leave fullscreen #ESC {encode} quit 4 #p cycle pause # toggle pause/playback mode #. frame-step # advance one frame and pause #, frame-back-step # go back by one frame and pause #SPACE cycle pause # toggle pause/playback mode #> playlist-next # skip to the next file #ENTER playlist-next # skip to the next file #< playlist-prev # skip to the previous file #O no-osd cycle-values osd-level 3 1 # toggle displaying the OSD on user interaction or always #o show-progress # show playback progress #P show-progress # show playback progress #i script-binding stats/display-stats # display information and statistics #I script-binding stats/display-stats-toggle # toggle displaying information and statistics #` script-binding console/enable # open the console #z add sub-delay -0.1 # shift subtitles 100 ms earlier #Z add sub-delay +0.1 # delay subtitles by 100 ms #x add sub-delay +0.1 # delay subtitles by 100 ms #ctrl++ add audio-delay 0.100 # change audio/video sync by delaying the audio #ctrl+- add audio-delay -0.100 # change audio/video sync by shifting the audio earlier #Shift+g add sub-scale +0.1 # increase the subtitle font size #Shift+f add sub-scale -0.1 # decrease the subtitle font size #9 add volume -2 #/ add volume -2 #KP_DIVIDE add volume -2 #0 add volume 2 #* add volume 2 #KP_MULTIPLY add volume 2 #m cycle mute # toggle mute #1 add contrast -1 #2 add contrast 1 #3 add brightness -1 #4 add brightness 1 #5 add gamma -1 #6 add gamma 1 #7 add saturation -1 #8 add saturation 1 #Alt+0 set window-scale 0.5 # halve the window size #Alt+1 set window-scale 1.0 # reset the window size #Alt+2 set window-scale 2.0 # double the window size #b cycle deband # toggle the debanding filter #d cycle deinterlace # cycle the deinterlacing filter #r add sub-pos -1 # move subtitles up #R add sub-pos +1 # move subtitles down #t add sub-pos +1 # move subtitles down #v cycle sub-visibility # hide or show the subtitles #Alt+v cycle secondary-sub-visibility # hide or show the secondary subtitles #V cycle sub-ass-use-video-data # cycle which video data gets used in ASS rendering to fix broken files #u cycle-values sub-ass-override "force" "scale" # toggle overriding SSA/ASS subtitle styles with the normal styles #j cycle sub # switch subtitle track #J cycle sub down # switch subtitle track backwards #SHARP cycle audio # switch audio track #_ cycle video # switch video track #T cycle ontop # toggle placing the video on top of other windows #f cycle fullscreen # toggle fullscreen #s screenshot # take a screenshot of the video in its original resolution with subtitles #S screenshot video # take a screenshot of the video in its original resolution without subtitles #Ctrl+s screenshot window # take a screenshot of the window with OSD and subtitles #Alt+s screenshot each-frame # automatically screenshot every frame; issue this command again to stop taking screenshots #w add panscan -0.1 # decrease panscan #W add panscan +0.1 # shrink black bars by cropping the video #e add panscan +0.1 # shrink black bars by cropping the video #A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "-1" # cycle the video aspect ratio ("-1" is the container aspect) #POWER quit #PLAY cycle pause # toggle pause/playback mode #PAUSE cycle pause # toggle pause/playback mode #PLAYPAUSE cycle pause # toggle pause/playback mode #PLAYONLY set pause no # unpause #PAUSEONLY set pause yes # pause #STOP quit #FORWARD seek 60 # seek 1 minute forward #REWIND seek -60 # seek 1 minute backward #NEXT playlist-next # skip to the next file #PREV playlist-prev # skip to the previous file #VOLUME_UP add volume 2 #VOLUME_DOWN add volume -2 #MUTE cycle mute # toggle mute #CLOSE_WIN quit #CLOSE_WIN {encode} quit 4 #ctrl+w quit #E cycle edition # switch edition #l ab-loop # set/clear A-B loop points #L cycle-values loop-file "inf" "no" # toggle infinite looping #ctrl+c quit 4 #DEL script-binding osc/visibility # cycle OSC visibility between never, auto (mouse-move) and always #ctrl+h cycle-values hwdec "no" "auto-safe" # toggle hardware decoding #F8 show-text ${playlist} # show the playlist #F9 show-text ${track-list} # show the list of video, audio and sub tracks #g ignore #g-p script-binding select/select-playlist #g-s script-binding select/select-sid #g-S script-binding select/select-secondary-sid #g-a script-binding select/select-aid #g-v script-binding select/select-vid #g-t script-binding select/select-track #g-c script-binding select/select-chapter #g-l script-binding select/select-subtitle-line #g-d script-binding select/select-audio-device #g-b script-binding select/select-binding #g-r script-binding select/show-properties #Alt+KP1 add video-rotate -1 # rotate video counterclockwise by 1 degree #Alt+KP5 set video-rotate 0 # reset rotation #Alt+KP3 add video-rotate 1 # rotate video clockwise by 1 degree #KP1 add video-zoom -0.01 # zoom out video #KP2 add video-scale-y -0.01 # scale down video vertically #KP4 add video-scale-x -0.01 # scale down video horizontally #KP5 set video-scale-x 1.00; set video-scale-y 1; set video-zoom 0 # reset video scale #KP6 add video-scale-x 0.01 # scale up video horizontally #KP8 add video-scale-y 0.01 # scale up video vertically #KP9 add video-zoom 0.01 # zoom in video #Ctrl+KP1 add video-pan-x -0.01; add video-pan-y 0.01 # move video left and down #Ctrl+KP2 add video-pan-y 0.01 # move video down #Ctrl+KP3 add video-pan-x 0.01; add video-pan-y 0.01 # move video right and down #Ctrl+KP4 add video-pan-x -0.01 # move video left #Ctrl+KP5 set video-pan-x 0.00; set video-pan-y 0.00 # reset video position #Ctrl+KP6 add video-pan-x 0.01 # move video right #Ctrl+KP7 add video-pan-x -0.01; add video-pan-y -0.01 # move video left and up #Ctrl+KP8 add video-pan-y -0.01 # move video up #Ctrl+KP9 add video-pan-x 0.01; add video-pan-y -0.01 # move video right and up #Ctrl+KP_END add video-align-x -0.01; add video-align-y 0.01 # align video left and down #Ctrl+KP_DOWN add video-align-y 0.01 # align video down #Ctrl+KP_PGDWN add video-align-x 0.01; add video-align-y 0.01 # align video right and down #Ctrl+KP_LEFT add video-align-x -0.01 # align video left #Ctrl+KP_BEGIN set video-align-x 0.00; set video-align-y 0.00 # reset video alignment #Ctrl+KP_RIGHT add video-align-x 0.01 # align video right #Ctrl+KP_HOME add video-align-x -0.01; add video-align-y -0.01 # align video left and up #Ctrl+KP_UP add video-align-y -0.01 # align video up #Ctrl+KP_PGUP add video-align-x 0.01; add video-align-y -0.01 # align video right and up # # Legacy bindings (may or may not be removed in the future) # #! add chapter -1 # seek to the previous chapter #@ add chapter 1 # seek to the next chapter # # Not assigned by default # (not an exhaustive list of unbound commands) # # ? cycle sub-forced-events-only # display only DVD/PGS forced subtitle events # ? stop # stop playback (quit or enter idle mode) ,(resize_appendqueue_dtormp_mutex_init_type_internalmp_dispatch_queue_processmp_dispatch_lockmp_dispatch_unlockmp_save_to_filewrite_json_strbtnfraaaarababkaeaveafafrakakaamamhanargararaasasmavavaayaymazazebabakbebelbgbulbhbihbibisbmbambnbenbotibbodtibbrbrebsboscacatcechecesczechchacocoscrcrecsczecuchucvchvcywelcymweldadandegerdeugerdvdivdzdzoeeeweelgreellgreenengeoepoesspaetesteubaqeusbaqfaperfasperfffulfifinfjfijfofaofrfrefrafrefyfrygaglegdglaglglggngrngugujgvglvhahauhehebhihinhohmohrhrvhthathuhunhyarmhyearmhzheriainaidindieileigiboiiiiiikipkioidoisiceisliceititaiuikujajpnjvjavkageokatgeokgkonkikikkjkuakkkazklkalkmkhmknkankokorkrkaukskaskukurkvkomkwcorkykirlalatlbltzlgluglilimlnlinlolaoltlitlulublvlavmgmlgmhmahmimaomkmacmkdmacmlmalmnmonmrmarmrimaomsmaymsamaymtmltmyburmyaburnanaunbnobndndenenepngndonldutnlddutnnnnononornrnblnvnavnynyaocociojojiomormororiososspapanpipliplpolpspusptporququermrohrnrunrorumronrumrurusrwkinsasanscsrdsdsndsesmesgsagsisinsksloslslvslkslosmsmosnsnasosomsqalbsqialbsrsrpsssswstsotsusunsvsweswswatatamteteltgtgkththatitirtktuktltgltntsntotontrturtstsotttattwtwitytahuguigukukrururduzuzbvevenvivievovolwawlnwowolxhxhoyiyidyoyorzazhazhchizhochizuzulnode_initnode_array_addnode_map_baddnode_map_addnode_map_add_stringnode_map_add_bstrequal_mpv_value/mp_splitextmp_normalize_paththread_pool_dtorthread_pool_addworker_threadmp_thread_pool_createmp_mutex_init_type_internalmp_waiter_wakeupmp_mutex_init_type_internalcancel_destroyiter_nextallocate_option_dataalloc_groupget_opt_from_idconcat_name_bufadd_sub_groupshadow_destroydispatch_notifyupdate_next_optionm_config_cache_get_opt_datam_config_cache_get_option_change_maskmp_mutex_init_type_internalm_config_cache_from_shadowm_config_cache_write_optm_config_cache_set_wakeup_cbnotify_optm_config_set_option_clikeyvalue_list_del_keyobj_settings_list_insert_atget_choiceadd_map_entryadd_choiceadd_array_entryobj_settings_list_del_atparse_obj_settings_list:m_property_dom_property_multiplysplit_optm_config_parse_mp_command_linemp_get_platform_pathrecreate_audio_filtersao_chain_set_aoao_chain_uninitreinit_audio_filters_and_outputkeep_weak_gapless_formatinit_audio_decoderreinit_audio_chain_srcmp_mutex_init_type_internalproperty_freesend_replymp_clients_destroyprop_unrefmp_destroy_clientmpv_observe_propertympv_unobserve_propertysend_client_property_changesmpv_request_eventmp_set_main_render_context● ○ mp_property_av_speed_correctionhook_removedo_op_udataproperty_current_tracksrun_commandcache_dump_pollmp_abort_cache_dumpingcommand_uninitcommand_init ???filter_subidxstart_openmp_abort_addmp_abort_removemark_track_selectionmp_switch_track_nkill_outputsreinit_complex_filtersmp_remove_trackmp_set_playlist_entryplay_current_fileuninit_demuxermp_destroymp_mutex_init_type_internal# This file is baked into the mpv binary at compile time, and automatically # loaded at early initialization time. Some of the profiles are automatically # applied at later stages during loading. # Note: this contains profiles only. The option defaults for normal options # (i.e. the default profile) are defined in C code. Do NOT set any # options in the default profile here. It won't work correctly in subtle # ways. # # To see the normal option defaults, run: mpv --list-options [pseudo-gui] player-operation-mode=pseudo-gui [builtin-pseudo-gui] terminal=no force-window=yes idle=once screenshot-dir=~~desktop/ [libmpv] config=no idle=yes terminal=no input-terminal=no osc=no input-default-bindings=no input-vo-keyboard=no # macOS global input hooks input-media-keys=no [encoding] vo=lavc ao=lavc keep-open=no force-window=no gapless-audio=yes resume-playback=no load-scripts=no osc=no framedrop=no [fast] scale=bilinear dscale=bilinear dither=no correct-downscaling=no linear-downscaling=no sigmoid-upscaling=no hdr-compute-peak=no allow-delayed-peak-detect=yes [high-quality] scale=ewa_lanczossharp hdr-peak-percentile=99.995 hdr-contrast-recovery=0.30 # Deprecated alias [gpu-hq] profile=high-quality [low-latency] audio-buffer=0 # minimize extra audio buffer (can lead to dropouts) vd-lavc-threads=1 # multithreaded decoding buffers extra frames cache-pause=no # do not pause on underruns demuxer-lavf-o-add=fflags=+nobuffer # can help for weird reasons demuxer-lavf-probe-info=nostreams # avoid probing unless absolutely needed demuxer-lavf-analyzeduration=0.1 # if it probes, reduce it video-sync=audio # DS currently requires reading ahead a frame interpolation=no # requires reference frames (more buffering) video-latency-hacks=yes # typically 1 or 2 video frame less latency stream-buffer-size=4k # minimal buffer size; normally not needed [sw-fast] # For VOs which use software scalers, also affects screenshots and others. sws-scaler=bilinear sws-fast=yes zimg-scaler=bilinear zimg-dither=no mp_initializeUsage: mpv [options] [url|path/]filename Basic options: --start=