unity-scope-mediascanner-0.2+14.04.20140404/0000755000015301777760000000000012317535450020662 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/tests/0000755000015301777760000000000012317535450022024 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/tests/test-old-scope.cpp0000644000015301777760000003215712317535203025376 0ustar pbusernogroup00000000000000#include #include #include #include "../oldscope/scope.h" #include "utils.h" using namespace mediascanner; static void test_music_add_result () { TestResultSet *result_set = test_result_set_new (); MediaFile media("/path/foo.ogg", "audio/ogg", "etag", "Title", "2014-01-01", "Artist", "Album", "Artist", 42, 60, AudioMedia); music_add_result (UNITY_RESULT_SET (result_set), media); UnityScopeResult *result = &result_set->last_result; g_assert_cmpstr (result->uri, ==, "file:///path/foo.ogg"); g_assert_cmpstr (result->icon_hint, ==, ""); g_assert_cmpint (result->result_type, ==, UNITY_RESULT_TYPE_PERSONAL); g_assert_cmpstr (result->mimetype, ==, "audio/ogg"); g_assert_cmpstr (result->title, ==, "Title"); g_assert_cmpstr (result->comment, ==, "Artist"); g_assert_cmpstr (result->dnd_uri, ==, "file:///path/foo.ogg"); GVariant *variant; variant = static_cast(g_hash_table_lookup (result->metadata, const_cast("duration"))); g_assert_cmpint (g_variant_get_int32 (variant), ==, 60); variant = static_cast(g_hash_table_lookup (result->metadata, const_cast("artist"))); g_assert_cmpstr (g_variant_get_string (variant, NULL), ==, "Artist"); variant = static_cast(g_hash_table_lookup (result->metadata, const_cast("album"))); g_assert_cmpstr (g_variant_get_string (variant, NULL), ==, "Album"); variant = static_cast(g_hash_table_lookup (result->metadata, const_cast("track-number"))); g_assert_cmpint (g_variant_get_int32 (variant), ==, 42); g_object_unref (result_set); } #if 0 static void test_music_apply_filters_none () { UnityFilterSet *filter_state = music_get_filters (); GrlOperationOptions *options = grl_operation_options_new (NULL); music_apply_filters (filter_state, options); GValue *min_value = NULL, *max_value = NULL; grl_operation_options_get_key_range_filter ( options, GRL_METADATA_KEY_CREATION_DATE, &min_value, &max_value); g_assert (min_value == NULL); g_assert (max_value == NULL); g_object_unref (options); g_object_unref (filter_state); } static void test_music_apply_filters_decade () { UnityFilterSet *filter_state = music_get_filters (); GrlOperationOptions *options = grl_operation_options_new (NULL); UnityFilter *filter = unity_filter_set_get_filter_by_id (filter_state, "decade"); g_assert (filter != NULL); unity_filter_set_filtering (filter, TRUE); UnityFilterOption *option = unity_options_filter_get_option ( UNITY_OPTIONS_FILTER (filter), "1980"); unity_filter_option_set_active (option, TRUE); g_object_unref (option); option = unity_options_filter_get_option ( UNITY_OPTIONS_FILTER (filter), "1990"); unity_filter_option_set_active (option, TRUE); g_object_unref (option); music_apply_filters (filter_state, options); GValue *min_value = NULL, *max_value = NULL; grl_operation_options_get_key_range_filter ( options, GRL_METADATA_KEY_CREATION_DATE, &min_value, &max_value); g_assert (min_value != NULL); g_assert (G_VALUE_HOLDS (min_value, G_TYPE_DATE_TIME)); g_assert (max_value != NULL); g_assert (G_VALUE_HOLDS (max_value, G_TYPE_DATE_TIME)); GDateTime *min_date = g_value_get_boxed (min_value); g_assert_cmpint (g_date_time_get_year (min_date), ==, 1980); g_assert_cmpint (g_date_time_get_month (min_date), ==, 1); g_assert_cmpint (g_date_time_get_day_of_month (min_date), ==, 1); GDateTime *max_date = g_value_get_boxed (max_value); g_assert_cmpint (g_date_time_get_year (max_date), ==, 1999); g_assert_cmpint (g_date_time_get_month (max_date), ==, 12); g_assert_cmpint (g_date_time_get_day_of_month (max_date), ==, 31); g_object_unref (options); g_object_unref (filter_state); } #endif static void test_music_preview () { UnityScopeResult result = { 0, }; result.uri = const_cast("http://example.com/foo.ogg"); result.icon_hint = const_cast("http://example.com/thumbnail.jpg"); result.result_type = UNITY_RESULT_TYPE_PERSONAL; result.mimetype = const_cast("audio/ogg"); result.title = const_cast("Title"); result.comment = const_cast(""); result.dnd_uri = result.uri; result.metadata = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_variant_unref); g_hash_table_insert (result.metadata, const_cast("duration"), g_variant_new_int32 (180)); g_hash_table_insert (result.metadata, const_cast("artist"), g_variant_new_string ("Artist")); g_hash_table_insert (result.metadata, const_cast("album"), g_variant_new_string ("Album")); g_hash_table_insert (result.metadata, const_cast("track-number"), g_variant_new_int32 (42)); UnitySimpleScope *scope = unity_simple_scope_new (); UnitySearchMetadata *metadata= unity_search_metadata_new (); UnityResultPreviewer *previewer = unity_abstract_scope_create_previewer ( UNITY_ABSTRACT_SCOPE (scope), &result, metadata); UnityAbstractPreview *preview = music_preview (previewer, NULL); g_assert (UNITY_IS_MUSIC_PREVIEW (preview)); g_object_unref (previewer); g_object_unref (metadata); g_object_unref (scope); g_hash_table_unref (result.metadata); g_assert_cmpstr ( unity_preview_get_title (UNITY_PREVIEW (preview)), ==, "Title"); g_assert_cmpstr ( unity_preview_get_subtitle (UNITY_PREVIEW (preview)), ==, "Artist"); g_object_unref (preview); } static void test_music_search () { MediaFile media("/path/foo.ogg", "audio/ogg", "etag", "Title", "2014-01-01", "Artist", "Album", "Artist", 42, 60, AudioMedia); auto store = std::make_shared(":memory:", MS_READ_WRITE); store->insert(media); UnityAbstractScope *scope = music_scope_new (store); TestResultSet *result_set = perform_search (scope, "Title"); UnityScopeResult *result = &result_set->last_result; g_assert_cmpstr (result->uri, ==, "file:///path/foo.ogg"); g_object_unref (result_set); g_object_unref (scope); } static void test_music_surfacing () { MediaFile media("/path/foo.ogg", "audio/ogg", "etag", "Title", "2014-01-01", "Artist", "Album", "Artist", 42, 60, AudioMedia); auto store = std::make_shared(":memory:", MS_READ_WRITE); store->insert(media); UnityAbstractScope *scope = music_scope_new (store); // If the index is non-empty, we should get results for an empty query TestResultSet *result_set = perform_search (scope, ""); UnityScopeResult *result = &result_set->last_result; g_assert_cmpstr (result->uri, ==, "file:///path/foo.ogg"); g_object_unref (result_set); g_object_unref (scope); } #if 0 static void handle_results_invalidated(UnityAbstractScope *scope, UnitySearchType search_type, void *user_data) { int *counter = (int *)user_data; *counter += 1; } static void test_music_invalidate_results () { GrlMedia *media = grl_media_audio_new (); grl_media_set_id (media, "test-id"); grl_media_set_url (media, "http://example.com/foo.ogg"); grl_media_set_mime (media, "audio/ogg"); GrlSource *source = test_source_new (media); UnityAbstractScope *scope = music_scope_new (source); int invalidate_counter = 0; g_signal_connect ( scope, "results-invalidated-internal", G_CALLBACK (handle_results_invalidated), &invalidate_counter); GPtrArray *changes = g_ptr_array_new (); g_ptr_array_add (changes, media); grl_source_notify_change_list (source, changes, GRL_CONTENT_ADDED, FALSE); g_assert_cmpint (invalidate_counter, ==, 2); g_object_unref (scope); g_object_unref (source); } #endif static void test_video_add_result () { TestResultSet *result_set = test_result_set_new (); MediaFile media("/path/foo.mp4", "video/mp4", "etag", "Title", "2014-01-01", "", "", "", 0, 60, VideoMedia); video_add_result (UNITY_RESULT_SET (result_set), media); UnityScopeResult *result = &result_set->last_result; g_assert_cmpstr (result->uri, ==, "file:///path/foo.mp4"); g_assert_cmpstr (result->icon_hint, ==, ""); g_assert_cmpint (result->result_type, ==, UNITY_RESULT_TYPE_PERSONAL); g_assert_cmpstr (result->mimetype, ==, "video/mp4"); g_assert_cmpstr (result->title, ==, "Title"); g_assert_cmpstr (result->dnd_uri, ==, "file:///path/foo.mp4"); GVariant *variant; variant = static_cast(g_hash_table_lookup (result->metadata, const_cast("duration"))); g_assert_cmpint (g_variant_get_int32 (variant), ==, 60); g_object_unref (result_set); } static void test_video_preview () { UnityScopeResult result = { 0, }; result.uri = const_cast("http://example.com/foo.mp4"); result.result_type = UNITY_RESULT_TYPE_PERSONAL; result.mimetype = const_cast("video/mp4"); result.title = const_cast("Title"); result.comment = const_cast(""); result.dnd_uri = result.uri; result.metadata = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_variant_unref); g_hash_table_insert (result.metadata, const_cast("duration"), g_variant_new_int32 (180)); g_hash_table_insert (result.metadata, const_cast("height"), g_variant_new_int32 (1920)); g_hash_table_insert (result.metadata, const_cast("width"), g_variant_new_int32 (1080)); UnitySimpleScope *scope = unity_simple_scope_new (); UnitySearchMetadata *metadata= unity_search_metadata_new (); UnityResultPreviewer *previewer = unity_abstract_scope_create_previewer ( UNITY_ABSTRACT_SCOPE (scope), &result, metadata); UnityAbstractPreview *preview = video_preview (previewer, NULL); g_assert (UNITY_IS_MOVIE_PREVIEW (preview)); g_object_unref (previewer); g_object_unref (metadata); g_object_unref (scope); g_hash_table_unref (result.metadata); g_assert_cmpstr ( unity_preview_get_title (UNITY_PREVIEW (preview)), ==, "Title"); g_assert_cmpstr ( unity_preview_get_subtitle (UNITY_PREVIEW (preview)), ==, ""); g_assert_cmpstr ( unity_preview_get_image_source_uri (UNITY_PREVIEW (preview)), ==, "http://example.com/foo.mp4"); g_object_unref (preview); } static void test_video_search () { MediaFile media("/path/foo.mp4", "video/mp4", "etag", "Title", "2014-01-01", "", "", "", 0, 60, VideoMedia); auto store = std::make_shared(":memory:", MS_READ_WRITE); store->insert(media); UnityAbstractScope *scope = video_scope_new (store); TestResultSet *result_set = perform_search (scope, "Title"); UnityScopeResult *result = &result_set->last_result; g_assert_cmpstr (result->uri, ==, "file:///path/foo.mp4"); g_object_unref (result_set); g_object_unref (scope); } static void test_video_surfacing () { MediaFile media("/path/foo.mp4", "video/mp4", "etag", "Title", "2014-01-01", "", "", "", 0, 60, VideoMedia); auto store = std::make_shared(":memory:", MS_READ_WRITE); store->insert(media); UnityAbstractScope *scope = video_scope_new (store); // If the index is non-empty, we should get results for an empty query TestResultSet *result_set = perform_search (scope, ""); UnityScopeResult *result = &result_set->last_result; g_assert_cmpstr (result->uri, ==, "file:///path/foo.mp4"); g_object_unref (result_set); g_object_unref (scope); } #if 0 static void test_video_invalidate_results () { GrlMedia *media = grl_media_video_new (); grl_media_set_id (media, "test-id"); grl_media_set_url (media, "http://example.com/foo.mp4"); grl_media_set_mime (media, "video/mp4"); GrlSource *source = test_source_new (media); UnityAbstractScope *scope = video_scope_new (source); int invalidate_counter = 0; g_signal_connect ( scope, "results-invalidated-internal", G_CALLBACK (handle_results_invalidated), &invalidate_counter); GPtrArray *changes = g_ptr_array_new (); g_ptr_array_add (changes, media); grl_source_notify_change_list (source, changes, GRL_CONTENT_ADDED, FALSE); g_assert_cmpint (invalidate_counter, ==, 2); g_object_unref (scope); g_object_unref (source); } #endif int main (int argc, char **argv) { g_test_init (&argc, &argv, NULL); g_test_add_func ("/Music/AddResult", test_music_add_result); //g_test_add_func ("/Music/ApplyFilters/None", test_music_apply_filters_none); //g_test_add_func ("/Music/ApplyFilters/Decade", test_music_apply_filters_decade); g_test_add_func ("/Music/Preview", test_music_preview); g_test_add_func ("/Music/Search", test_music_search); g_test_add_func ("/Music/Surfacing", test_music_surfacing); //g_test_add_func ("/Music/InvalidateResults", test_music_invalidate_results); g_test_add_func ("/Video/AddResult", test_video_add_result); g_test_add_func ("/Video/Preview", test_video_preview); g_test_add_func ("/Video/Search", test_video_search); g_test_add_func ("/Video/Surfacing", test_video_surfacing); //g_test_add_func ("/Video/InvalidateResults", test_video_invalidate_results); g_test_run (); return 0; } unity-scope-mediascanner-0.2+14.04.20140404/tests/utils.h0000644000015301777760000000101112317535203023322 0ustar pbusernogroup00000000000000#include #include /* A UnityResultSet implementation that saves the last added result * for inspection */ typedef struct _TestResultSet TestResultSet; typedef struct _TestResultSetClass TestResultSetClass; struct _TestResultSet { UnityResultSet parent; UnityScopeResult last_result; }; struct _TestResultSetClass { UnityResultSetClass parent_class; }; TestResultSet *test_result_set_new (); TestResultSet *perform_search (UnityAbstractScope *scope, const char *search_query); unity-scope-mediascanner-0.2+14.04.20140404/tests/media/0000755000015301777760000000000012317535450023103 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/tests/media/video1.ogv0000644000015301777760000001120312317535203025000 0ustar pbusernogroup00000000000000OggSh8*theora@ (OggSh-" :?theora+Xiph.Org libtheora 1.1 20090822 (Thusnelda)theora(kIJs1R!1b!@d.UIvpk@HGәd0K%R,F"d1b0F!`, h0֕UTёPO ̌KKJ LJFFFE‚AAAAAA@!31pSa5u!bSFtт3tvwT'Fv1!6661!Q&666166662&66666666666666666666666666666666666661AAAA 3Bꉽf"G?r"^}jfWbB`K0ՆU)^}4̮؂ȣU62^?9w1+< sTWcAiAuܐek1x^ yh"cuk3)5 @ x]w(=ιM+F_Ţ9"ͯb%r({IzJy'Jl@CݺcylZu+1eG#FidR,>id<t +-1R܄֏^vj"|v}-VK&b'w@k^KYj#8UIJβbQ#9C6W8bǒ/j>FaП2[ E(,y?mB"\t-2{|H纊V/>mD<#H2nm0@u ]P9;DzJi## W`CӸs548r&yF \{Icp3%ΪS{,50r=2\Ta}{ n5NaVDK7N4 n5&6dEc}BF\g 7b.خ <)#wVQ!f (mK \N1f2Biv}jD8˨*R&spZ~z.+D)p=d:0 ЫZ4]%M܃&C:ŔȹӰY=-|[יŕ4tKсMFpZ-_ [Map#r,Y>e*C , S6M#ϓh8}u*YS6Ocx;D?mp71qZq1͵L_Yb pErr2jrEYb{FV fm,& )EԜ}7 _s yZhmR&H7y߀(nxH&gݱwT)|1$jD-:?0+OݠoRp[D%fڥi6LpÔ#YXޥ(x/`ŐT3`]AoռX*`6fr{D(zG+#wʔ~ϤVVF ə4́Qӥg!t 4Ͷ[슠)wbB& GQ8?,"$%m6jR\e߁&I*/?uܶd<*#$%4{8;ezq=+~`SPwfi3meaZ}bd6ʣMDVXOۋx?OĪ'YXg wqu6ژP4' U"'ְ JB*!9U /\eL屃xSA@jg@n"^ui-36s tqaI~BAd@883ȶu&|kQߥU#x!p: pglLGrK+y*FCt"ܙG~VUT8Ox&i#!eb_z.쎏R_, FS4Yot*V8$/J4Ͷ̱ѭ,k#p!:?JL晶"SQI@z;qϡ]7i3 ͵^ '+R2Z583^]QdQX^Lsbm iJ@F,qdD'6,Zf]k 䐀OggSEh}! Y Lxx{}>}{{}wTSMyuTSMyuTSMy%UҪUxzJC}T=*UztF4+TUQTVEQZAUQUUEUUZ֥@,@@C !j1" Y0ӶFf1D  $ ! faBmakk5@BB "afa-FfQD  $ ! faBmakk5@BB "afa-FfQD  $ ! faBmakk5@BB "afa-FfQD$CamFDqMn}/ԤF"X iovLvi%uߥȷ;_P#,fX#u]wnvK)%*F"X d̰Gl#뒺5:T 0%4;]R@إ)4F?M&)얾BQ)1@g#[[J E!Bbb( vKfBb(_s6b%)JYaҎC,4P_RJRYbQ(t~i/ҎC)K,M(:?4GTҔXuJKPJR,SJ:%Q(t)e)RG(:R:?C JJT]]44G7[jbŋ.TRvI?|o7Ej+Vk,YtRҕ'kM#M&|o+VZXbˢԩ=v\HHwJV,Xq4M%_k}λI&M&}N]I$tuzM&It_ks$IsǤi_k}sI$zH"xH"wwwwD'^D'R,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSD`0t- unity-scope-mediascanner-0.2+14.04.20140404/tests/media/song1.ogg0000644000015301777760000001015412317535203024625 0ustar pbusernogroup00000000000000OggS`0vorbisDOggS`0yfyvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)ARTIST=ArtistOneALBUM=AlbumOne TRACKNUMBER=2TITLE=TitleOneDATE=2013-08-13vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSD`0t- unity-scope-mediascanner-0.2+14.04.20140404/tests/test-with-mediascanner.py0000755000015301777760000001301512317535203026754 0ustar pbusernogroup00000000000000#!/usr/bin/python3 import operator import os import shutil import subprocess import sys import tempfile import time import unittest import dbus import dbusmock from gi.repository import Gio, Unity srcdir = os.path.realpath(os.path.dirname(sys.argv[0])) class LoggingResultSet(Unity.ResultSet): def __init__(self): super(LoggingResultSet, self).__init__() self.results = [] def do_add_result(self, result): self.results.append(result.copy()) class ScopeTestCase(dbusmock.DBusTestCase): @classmethod def setUpClass(cls): super(ScopeTestCase, cls).setUpClass() cls.tempdir = tempfile.mkdtemp(dir=os.getcwd()) cls.configdir = os.path.join(cls.tempdir, 'config') os.mkdir(cls.configdir) os.environ['XDG_CONFIG_HOME'] = cls.configdir cls.cachedir = os.path.join(cls.tempdir, 'cache') os.mkdir(cls.cachedir) os.environ['XDG_CACHE_HOME'] = cls.cachedir cls.mediadir = os.path.join(srcdir, 'media') # Set up a private session bus cls.start_session_bus(); cls.session_bus = cls.get_dbus(); # Start the media scanner on the private bus cls.mediascanner_proc = subprocess.Popen( ['mediascanner-service', '--disable-volume-monitor', cls.mediadir]) cls.wait_for_bus_object('com.canonical.MediaScanner', '/com/canonical/MediaScanner') cls.mediascanner = dbus.Interface( cls.session_bus.get_object( 'com.canonical.MediaScanner', '/com/canonical/MediaScanner'), 'com.canonical.MediaScanner') cls.ensure_media_available(['song1.ogg', 'song2.ogg', 'video1.ogv']) # Load the scopes loader = Unity.ScopeLoader() [cls.music_scope, cls.video_scope] = loader.get_scopes( '../src/unity-scope-mediascanner.so', 'C') @classmethod def tearDownClass(cls): cls.music_scope = None cls.video_scope = None cls.mediascanner_proc.terminate() cls.mediascanner_proc.wait() shutil.rmtree(cls.tempdir, ignore_errors=True) super(ScopeTestCase, cls).tearDownClass() @classmethod def ensure_media_available(cls, filenames): remaining = set() for filename in filenames: f = Gio.File.new_for_path(os.path.join(cls.mediadir, filename)) remaining.add(f.get_uri()) timeout = 50 while timeout > 0: for uri in list(remaining): if cls.mediascanner.MediaInfoExists(uri): remaining.remove(uri) if len(remaining) == 0: break timeout -= 1 time.sleep(0.1) else: raise AssertionError('timed out waiting for media info for %r' % remaining) def perform_search(self, scope, search_query): filter_set = scope.get_filters() result_set = LoggingResultSet() context = Unity.SearchContext.create( search_query, 0, filter_set, None, result_set, None) search = scope.create_search_for_query(context) search.run() return result_set.results def test_music_surfacing(self): results = self.perform_search(self.music_scope, '') self.assertEqual(len(results), 2) results.sort(key=operator.attrgetter('uri')) [song1, song2] = results self.assertEqual(os.path.basename(song1.uri), 'song1.ogg') self.assertEqual(song1.title, 'TitleOne') self.assertEqual(song1.metadata['duration'].get_int32(), 1) self.assertEqual(song1.metadata['artist'].get_string(), 'ArtistOne') self.assertEqual(song1.metadata['album'].get_string(), 'AlbumOne') self.assertEqual(song1.metadata['track-number'].get_int32(), 2) self.assertEqual(os.path.basename(song2.uri), 'song2.ogg') self.assertEqual(song2.title, 'TitleTwo') self.assertEqual(song2.metadata['duration'].get_int32(), 1) self.assertEqual(song2.metadata['artist'].get_string(), 'ArtistTwo') self.assertEqual(song2.metadata['album'].get_string(), 'AlbumTwo') self.assertEqual(song2.metadata['track-number'].get_int32(), 42) def test_music_search(self): results = self.perform_search(self.music_scope, 'titleone') self.assertEqual(len(results), 1) self.assertEqual(results[0].title, 'TitleOne') results = self.perform_search(self.music_scope, 'albumone') self.assertEqual(len(results), 1) self.assertEqual(results[0].title, 'TitleOne') results = self.perform_search(self.music_scope, 'artistone') self.assertEqual(len(results), 1) self.assertEqual(results[0].title, 'TitleOne') # Check that substring matches work. results = self.perform_search(self.music_scope, 'artiston') self.assertEqual(len(results), 1) self.assertEqual(results[0].title, 'TitleOne') results = self.perform_search(self.music_scope, 'unknown') self.assertEqual(len(results), 0) def test_video_surfacing(self): results = self.perform_search(self.video_scope, "") self.assertEqual(len(results), 1) video = results[0] self.assertEqual(os.path.basename(video.uri), 'video1.ogv') self.assertEqual(video.title, 'video1') self.assertEqual(video.metadata['duration'].get_int32(), 1) self.assertEqual(video.metadata['width'].get_int32(), 320) self.assertEqual(video.metadata['height'].get_int32(), 240) if __name__ == '__main__': unittest.main() unity-scope-mediascanner-0.2+14.04.20140404/tests/utils.cpp0000644000015301777760000000425312317535203023670 0ustar pbusernogroup00000000000000#include "utils.h" G_DEFINE_TYPE (TestResultSet, test_result_set, UNITY_TYPE_RESULT_SET); static UnityResultSetClass *result_set_parent_class; static void test_result_set_finalize (GObject *object) { TestResultSet *result_set = (TestResultSet *)object; unity_scope_result_destroy (&result_set->last_result); G_OBJECT_CLASS (result_set_parent_class)->finalize (object); } static void test_result_set_add_result (UnityResultSet *object, UnityScopeResult *result) { TestResultSet *result_set = (TestResultSet *)object; unity_scope_result_copy (result, &result_set->last_result); } static void test_result_set_class_init (TestResultSetClass *klass) { result_set_parent_class = static_cast(g_type_class_peek_parent (klass)); UNITY_RESULT_SET_CLASS (klass)->add_result = test_result_set_add_result; G_OBJECT_CLASS (klass)->finalize = test_result_set_finalize; } static void test_result_set_init (TestResultSet *result_set) { } TestResultSet * test_result_set_new () { return static_cast(g_object_new (test_result_set_get_type (), NULL)); } static void search_complete (UnityScopeSearchBase *search, void *user_data) { GMainLoop *ml = (GMainLoop *)user_data; g_main_loop_quit (ml); } TestResultSet * perform_search (UnityAbstractScope *scope, const char *search_query) { UnitySearchMetadata *metadata = unity_search_metadata_new (); UnityFilterSet *filter_state = unity_abstract_scope_get_filters (scope); TestResultSet *result_set = test_result_set_new (); UnitySearchContext context = { .search_query = (char *)search_query, .search_type = UNITY_SEARCH_TYPE_DEFAULT, .filter_state = filter_state, .search_metadata = metadata, .result_set = UNITY_RESULT_SET (result_set) }; UnityScopeSearchBase *search = unity_abstract_scope_create_search_for_query (scope, &context); GMainLoop *ml = g_main_loop_new (NULL, FALSE); unity_scope_search_base_run_async (search, search_complete, ml); g_main_loop_run (ml); g_main_loop_unref (ml); g_object_unref (search); g_object_unref (filter_state); g_object_unref (metadata); return result_set; } unity-scope-mediascanner-0.2+14.04.20140404/tests/CMakeLists.txt0000644000015301777760000000167712317535203024573 0ustar pbusernogroup00000000000000if (NOT DEFINED GTEST_ROOT) set(GTEST_ROOT /usr/src/gtest) endif() set(GTEST_SRC_DIR "${GTEST_ROOT}/src") set(GTEST_INCLUDE_DIR ${GTEST_ROOT}) add_library(gtest STATIC ${GTEST_SRC_DIR}/gtest-all.cc ) set_target_properties(gtest PROPERTIES INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR}) target_link_libraries(gtest ${CMAKE_THREAD_LIBS_INIT}) include_directories(${UNITY_INCLUDE_DIRS} ${OLDUNITY_INCLUDE_DIRS}) add_executable(test-music-scope test-music-scope.cpp ../src/music-scope.cpp ) target_link_libraries(test-music-scope ${UNITY_LDFLAGS} gtest) add_test(test-music-scope test-music-scope) add_executable( test-old-scope test-old-scope.cpp utils.cpp ../oldscope/base-scope.cpp ../oldscope/music-scope.cpp ../oldscope/video-scope.cpp ) target_link_libraries(test-old-scope ${OLDUNITY_LDFLAGS}) add_test(test-old-scope test-old-scope) #add_test( # test-with-mediascanner # ${CMAKE_CURRENT_SOURCE_DIR}/test-with-mediascanner.py -v #) unity-scope-mediascanner-0.2+14.04.20140404/tests/test-music-scope.cpp0000644000015301777760000000334312317535203025733 0ustar pbusernogroup00000000000000#include #include #include #include #include #include #include #include "../src/music-scope.h" using namespace mediascanner; using namespace unity::scopes; class MusicScopeTest : public ::testing::Test { protected: virtual void SetUp() { cachedir = "/tmp/mediastore.XXXXXX"; // mkdtemp edits the string in place without changing its length if (mkdtemp(const_cast(cachedir.c_str())) == NULL) { throw std::runtime_error(strerror(errno)); } ASSERT_EQ(0, setenv("MEDIASCANNER_CACHEDIR", cachedir.c_str(), 1)); store.reset(new MediaStore(MS_READ_WRITE)); } virtual void TearDown() { store.reset(); if (!cachedir.empty()) { std::string cmd = "rm -rf " + cachedir; ASSERT_EQ(0, system(cmd.c_str())); } } std::string cachedir; std::unique_ptr store; }; TEST_F(MusicScopeTest, Construct) { MusicScope scope; } TEST_F(MusicScopeTest, StartStop) { MusicScope scope; auto expected = ScopeBase::VERSION; ASSERT_EQ(expected, scope.start("mediascanner-music", nullptr)); scope.stop(); } TEST_F(MusicScopeTest, CreateQuery) { MusicScope scope; auto expected = ScopeBase::VERSION; ASSERT_EQ(expected, scope.start("mediascanner-music", nullptr)); CannedQuery q("mediascanner-music", "query", ""); SearchMetadata hints("en_AU", "phone"); auto query = scope.search(q, hints); ASSERT_NE(nullptr, dynamic_cast(query.get())); scope.stop(); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } unity-scope-mediascanner-0.2+14.04.20140404/data/0000755000015301777760000000000012317535450021573 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/data/mediascanner-music.ini.in0000644000015301777760000000103712317535203026445 0ustar pbusernogroup00000000000000[ScopeConfig] DisplayName=Local Music Description=This is an Ubuntu search plugin that enables information from local music to be searched and displayed in the Dash underneath the Music header. If you do not wish to search this content source, you can disable this search plugin. Author=Canonical Ltd. Art=@SCOPES_DATADIR@/mediascanner-music/mediascanner-music-screenshot.jpg Icon=@SCOPES_DATADIR@/mediascanner-music/music.png SearchHint=Search local music collection HotKey= [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-mediascanner unity-scope-mediascanner-0.2+14.04.20140404/data/music/0000755000015301777760000000000012317535450022713 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/data/music/mediascanner.scope.in0000644000015301777760000000127712317535203027007 0ustar pbusernogroup00000000000000[Scope] DBusName=com.canonical.Unity.Scope.MediaScanner DBusPath=/com/canonical/unity/scope/mediascanner/music Module=@CMAKE_INSTALL_FULL_LIBDIR@/unity/unity-scope-mediascanner.so ModuleType=C Type=music RequiredMetadata=duration[i]; OptionalMetadata=artist[s];album[s];track-number[i]; Timeout=-1 Name=Local Music Icon=/usr/share/unity/icons/lens-nav-music.svg Description=This is an Ubuntu search plugin that enables information from local music to be searched and displayed in the Dash underneath the Music header. If you do not wish to search this content source, you can disable this search plugin. SearchHint=Search music collection [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-hollywood unity-scope-mediascanner-0.2+14.04.20140404/data/video.png0000644000015301777760000000475412317535203023415 0ustar pbusernogroup00000000000000PNG  IHDR8sBIT|d pHYs!8tEXtSoftwarewww.inkscape.org< iIDATxQ\Wٙ8YkZԤAR[ĒqZh>,;1PZ(CUVP|R|!iMBXmwCn;3{|?/g3gfO#pn[GMK;ZSo)JHn'3337F[WTܷor)V$sνbEI7}r|Rg#rGIwAҦ%IKҫy}P\XHFQu-\\\,Ia/R7VɅ YKf[/\mG1 OR@SF3XlWV{u}t#W```c#IEQNߌM.!W+Ox%K$`mW8pARB 00t01 x#B pG^*<^oSl6? i[n(Ço4~ +\. fn"Jfv4>::8_4v"܆+pHOIs쯷VC^][HGh``cQ=nB )!01 x )3︣=-\J{)<6{$q?XێfxY igG廣(Yepdl`l%M^䜅Øsf^"֒I4uqAMOmwhtn I;WԙKDumuxY)iq`A~:_5e\k&cS8/qU 쑇zbXGSeB,P84-h2Ώ}W|$RNK6 ?s\xYTBˇy!grnCΚ"lS {OҾg zFq b^YX*? TbWS_V}RQBьu`wR<!T+c'QUfQQIWpi!Y  Ikz+J S$5B^Cɵ :{][gfOK5CqÓWq=67u!BXjSK ıAI CTP{$cC@\l%Bocqds\݈", 6et˙w]QRI9`w6!TJZ$hY$r4p;(GqmMI19|SWO$27$akGMh(s\=iX! ԑK &ug (Bvd3 .Ϲӵf#ScyeqIcâpW%=CYY0WVJe{z{^L?f9GKI2iŨZULqhc0 *j($ CGB CA;Cg ꦠdmv$O]U*}P1YSPp=Ct0xř=n.+EZj Ff#aumsn@_꟪5axf1t&`Sb%5k[qE!AON3F.j2nDFp1b5R}k`ش@4=d<ϓ1j<'fV1fIk`{"v}qE+i|gAeưjf̡l8C@ 9!7kHm  f}D>13&Uv'UO.{廝.HkKciglYUC5?dxv&caklspF}qLPi2 un6ᄉ^\v2E3.=oF! 7d: NJw晼2wV;nPgΙ,ŇF7m[%2b |`K1n5} SY5K.i5yX7﷣^u b퍠u1E+2amN'5 i{%cᾈ畖{J3MR<%3UN"lK7ksZ mtda:zZg_E+3>QՔN5Ѵ``GqF|vǨUlC.[m%c7v׽.in g_s`y+:i?8b#5Tx+esm`ۉS~QPf|NL3ÈVxjgG0V|b84'I{.:kf٪xbCbY;񹌳lX}ipYXᘅE.!_AOOH6{qu%  %̚ ]O]js F8Ӳ\ 85ڋصy(b #,G]7}tigned.Bũh,:9%s[$d#@q$ ()pӌaQSWAKcdph5ľXneٝKJ=$NZ=C5Բ`6Zi0<I; OuZ2uC'᧹n'04Yg66.:.]OSeo x'=zQrg c)cCp|c2FPՊ`!kEx\/5"61o^Hǻ)$3adW䜑Apg Ţ,T1rx=#|r;mE~,J;"AڡEݏԇBb]+]m -5:+YضiWօsweo̠ $Ҳ& A<́6@}=fs8b3wQVqa0;^7#43v`>V՜J4K(TUHI ( Br g-k&t3X1G `ǨCxe4#=6ߗkNu,N[cHb=!{sB SczGIiL򖸒/̆YC :kYbyd4Ğk0eh ~VAsLrmt}c*';.  %{Yχyy #w_ &gJI*.r$Zcyز7:je@?<Ɂz8mAu K%~RjC sAQPK3#t/cp-&꣭:a0 7oZnc36UVJ@<j-PY5R7<2 }PͳgL͘5ũ&yZu>F0X3|_e{X87 q5 R I>knlnJӼ'wս2(X@sc<4\\qFRҶf+LJ̧Y qAUJp7ԮZіpTb^*Z]g𸋴9W>ItU4YD<Nd msm׊WLbSC>\ n%UTwL;Af Ϙl]S:9Dn6!qT;nf*rL2G~w>Q^A1lz ؋I19u-D2k8Zhc>vnknv0RT.`j)'H=g Zv&859Ys B9;%ppxx7u jwّٓDמ3ϧb A1 x Z'ޜǖ;qV&UF7^AyL|x v|g5O8&ʺH@gmKE|;|G0ι[.[qW+%cَ9/#e`L͔)ݕQ I٠[yE-( 5j ~ȲnRwVݒLۘ"#szKex|(q p81\EWp9Yхu=;-e>sf[FG`wQ26ە>KN![٬q\L xOybwmFB!-Y$WzCg4ɣǏi+qn/%WQW&!lIŌ`+Ѓ0>ݛ;6ڎ˺]QS9Ëǝ}X˶[;[dJhS@T5/^VHnF`>pel2HW0aԈa,dboB oG'6a:Cl8\6,c|smxqkfmɹ |{5f-+Fõm b Mso{Zz(&uҎ:_PbqXY͉ow~ fm[dSSqZaZ1:#m}y8\OF$ /-ўӘd<8$s,5ؔM,FN#c6@\͉A7O%n[:zbx}8l vY#jDq)=U#eCw )[@'! N Af^̓s TbK7k?K{TqlP ,-ykj`;K \aL{Jke,Fi2HZn=Dg4(Ԡv-V^=E8̪X'{BBE'-!!$ TC3͇c`ؽW.Ɲ}'481cs\38qwr>?JëCd,.n~M&4<ʻ6u/Dsp.ۋx :+7ZX.j}> NG.*6&3 kZ O5kd2jڑQy" xIX]{@dͺ>},9R᳌~~!k3Ci8\ŜaGR않` ݉V&#)C}k+D; ͚53Wf.2s.f=ەVVao%ދ}"boM\$ t7Œ0:zatpIC4c4=q鿏.BE}WNJCf𽎝 ;1VWmU=3he.߲?*\N(;|_- qL59.cg ;GܽQpܡ֊%9p$ϼGġL-k89kb :c{oxxI6Ri$p[]KeYH#kװRnQ?nP~Y$9I%{ ^z48tF.ˈBƴy?*ڂ|8Kڬ" C+i&<3w -<;BUe]Ln"yc|A{gfMsef3)$tQJL77'l11!Wq<Q*Nƪ(k)Yh+c4G6+%ޑhj6ft͘>bLY%f0rX';r6 ƄZo>7Y;GJY"7Xݬz{()uJZfLSI 8ap-i<#p֒ƛߋ:^uGކ`'t5XL.SOb ll[Bhtf[8`Ne˵n,0x;\Ԅ$FG1՝?J0qL-=4yI [ønߚ4Q'P򜐷3Bٚ]-|oZ lv t&ڱ>Wr4k}+!65qkM'Vjޟjfh|1L4{~⑼R5r=&:cI8?o'үy(W.gQgW{?=W>|u7ƓQqO_u m)U*> r>:Ox~7_QqOGYi>}=t7&_Ҧ;.hoQeW~GYi>g1U[ཡy'_ҧ]ͿIeW~GYi>g1U[ཡyG_ң໡rQeW~OYi>g1U[໡yG_Ҥ{/heU*{?3_UqOGYi>}/hoLU* 7={|)8?o'ңy4J$UJ콡rQeW~OYi>g1Un.˚H77ު} }*{?3_AqOGYi>}+OC*_ w:ϥOx~+~:cI8?o'үγS,hO;}*{?3_AqOGYi>}+GC}*> $_uJ=W>|u7ƓQqO_w uJƄ?>={| 8?o'ңy4J4#%ߌ>w:ϥOx~~+>:cI8?o'ү 'luJ};gҧ?ss?Og1T|u7ƓW_B~:ϥGcB>γSg}*>:cIcB:dγP{,hO;}*{?3_AqOGYi>},hO9gYcίSg}*>:cIcBw@gңౡ6$;gҧ?ss?O?g1T|u7ƓWƄ;gңౡ?ygY~Yi>g1U{ౡ=rK}*> }*{?3_CqOGYi>},hM}*> uJ=W>u7ƓQqO_w $;gңౡ?ygҧ?ss?O?g1T|u7ƓWcBy}duJƄuJ=W>u7ƓQqO_w uJƅ};_ҧ?ss?O?g1T|u7ƓWƄgңౡ?yNSg}*>:cIgB:ϥOౡ?ygҧ?ss?O?g1T|u7ƓW߂΄Y$3Te AgY~Yi>g1Uwೡ#I?>ƅ 3TYgiy4J}*YЯγS,hWC}*{?3_CqOGYi>},hW\}*> :}*{?7_EqOGYi>}=4+H?>/΅};gҧ?ss?O_g1T|u7ƓWƅy 3T :}*{?3_EqOGYi>},hWC}*> }*{?3_EqOGYi>}=t$QgW:{}duJ=W>|u7ƓQqO_w> Zc:ϥ@쵡6Y'gҧ_ssOg1T|u7ƓWς΅};_ҧYЛ/ίSg/}*>:cI쵡VC}*> :*{?3_GqOGYi>},O?~3T|t(gҧ?ssO_g1T|u7ƓW߂΄$3T:$;gҧ?ss?O_g1T|u7ƓW߂΄;gңౡVgҧ?ss?O_g1T|u7ƓWς΅s#i}*> Z}*{?7_GqOGYi>},OC*_ ?>={|#8?o'ңy4J|+$3T|t+$3TYC?Og1T|u7ƓWςօ}uJօZY'gҧ?ss?Og1T|u7ƓWς΅};gҠvYЯ~3TYgiy/ңy/үօs?>/օ}uJ=O>40T|40Usൡ]rIgW-hW\uJG{nh7HO9sHyG;l@ő7 9Gt[ԂꋎoW] F$v6(9s({tGN~\%#eqͷF,9;H 'yWMr<~}$Y?EK:mZ:Q{ .|-R%td.f;l~H3 [~ w(wl$stA@͆=/R4|;/QA;rEk$.J`ory@u@((q+t96@9"t?7$_LmsGNh ?ȞǢ>DH-MzSKZvtuEKtnd =Ӷ@yXC#K47 {Q"mG1[Z@ EB Aro⋠-{"@uFܒO4vQ˒c]-t$Xr!?4TA"썹#D\a+nӚ.#ds4"c]|M.3C=tice`7/źdx {P-&7!oR_Fܔ]p0\>|CsSZƳ`֑~UI]RVOr7.h$HRHHp7MSPc:<.)t o׹)E=@ZhÒ֙ B[_ց#o@dQDגHۢv?̕ő@e!@$~dP Ԑ"׸adSExly ǒ9Zn#@=m tKk0/p&Ƀn4ODsB=-omF$! -a bwHnG$HnPekXVw1L/fA4Bw[l| $y_d. noJ?̺nGɌB΋g}oW wi5CR1j- Xp 7)si{e@.s#̿H/TnbSlˌJ^/[Y?cn@vhetڐȂa)웫Y=H)p)m ;쟵G>v7J].Ka-e.(#[ۗ%}pIh{mdqt`ZeA6+UM=&r8}N(*ih$8,ۛh!l}.y챚K_䪧4;2QK53-ie\ݛYߪj{[?wh[SW 9{ yI/ p: èSbrk 2hcDm75t&Gqk/%š#l1\>Y$w>B HN+4T 魕Y{N$8E;o 6CpzjslbOosȂ"~+~m8'lK "й~Xg ]5qjh$M"i#g ō|{Xl zHS{1Fɪ^$.6׵ɶ1KWjs{eb%S09m@Cn/;,14u{ zr&_V }:HsM Dل\TGcK(NNewPVLKD.u|Ras0nayAs2 ~5V49dJƤ{V ے\>)r &Z|ݖpH$sm=vΔ9#*fZq le1\=uٖJ8|:kݫqY%gAd 50V:;b/w1 @1\ϩ$ERG♦Gğʫi6Oi(dqmsvs',nHO-AWЙ8eb\&Zc5ZZ@ܭc@n J)*i69"<.;4  zL.o6?csH ·9v!_OL׸1iZysAcr_sҙƽλ\I;(3}$.׀Lnz n~E]<֋%TPQ0B⮌r{AHvAU+\:ǰ-)Z.n W>PS5λy?A>$ma~dpA!@\ip_ x!9pLZX6Bg:zx m,s2l9\3BؤNcj 7= >d [nh6Jzdf^d=>dє4mq68ilq`\z j#WPȳsO9- k=+g%tsGJߚ{ Y#tu@{QFbPܐIzӶ@_,䕭@Y_k /B 신:#4 y)r@[W(縿ȃ i[koԠ cd~D[dsG#nh [at):ȿ 7o~Ay7tH(Lz@_}-pGNĄ[R6G6dl(--@2 /~w@{.t]PAHat kKԏRxYFǪ/ZwG#okw76uoW [h9 L'yY7|t$y?ީ*JhiaG mUrQn{}T,.!1.H<RDA8s1Yޕ릊~U{.NV$$9xn_ly?ީ}nZZִl-s̯^-Q47+g݉Wz0ۈ*76j -0F) G]{!lٓjY_G0vnKa[}i쀺:l uP o?f 9)BF('t_ :܄mBOoR6dzP-p>+)<{ oRƐ~ ۡkd;˶ $Gӻrb6\$i\i&5NܹD6#{kd;7Ґ~>:w?HR<vyܹzKO-rH?Id߲F.~4Hӽrڐ~ ȄXuZ#O.?]i#쏧s\i(%Zԍ;?\i#쑧7ϹpH?IH-ɋtF~ef) jF_~Ɛ~ !kd<"_w>Y.4b؁mbөxyܻG#Ny?AHQks쏧}3]k'HC>Ɛ~%URkR:g}˿ $ H~Ɛ~ Ç$YSt|Iӽ\k >K]%iH?Md:˟`$Cb7]kd:˟`$}4.~5-E,߲F_eư~_d;=ck\$/ܹG'NX?Iw _ȵ߲NƐ~CRt.~5lŭHӫG'NX?Iư~L?H6+et?IIӻA0VIӮ_s#NX?IŲ7\k#쓧g~˟`$ZֹIӯܸ?N_sc=.}t9.~5IӯA_>:u7Ұ~iX?I}G+Z'N}?H:w_scK\$i\i jN}eư~ #~k\:\X?IRtWsc7QAkd;˟`$}t{gA`:um\k#쑧v_sc4ZÕIӾ__sZum\JH627ܡkd:\k#앧sc۪W~w?H$\ doéw?I}t.~5le [:|H?I?N~ʰ~ a;[Z#NgܹO쓧_scߒD]$L?h#ܺb"܊׾yoAHd̻B|[$iAIHøϹvbN\:v>eƐ~>x?ܹAZtkd<;}~ $}|˿ $h巊~y?AI}AH6;E}.~gQk̻A^=0_%>5^d ̥ 2=G&IRߙ 7W}Ag>K ~d  ̥2Ae>K ~d{̈́ߙ^K8F 2^a]p_+{Me/Mp'2&,s)o̟M)o̮ϭYͅ_M 2^a[7WK Oy7)wzo̗I_+˒Cˢ Oz0_#|'K~ev}h;Afp|&& K~exF@Af0l'sm7M>K~ey/t~?7GW?{)o̯˚ #_7LaGm/M[ւ|&e/M0|'2&H7Ai>_[ O/{io̯7' 3YK~d ̥2ie6 2=GH Sȍy_[+r,zᔿ7GOe/MHRߙ?t7W}[h,Oo8>{{K~ew֞ ?y_[#l')o2FtGI ~d{τL2G.Af0|'. 'L2FgmR@_+tAi>ᔿGF)/2tN(,?s)G2=­I ~ew7PZ{τe/M6 2"Xl'2 2d)aGIRߙ^r<,Fߙ;WϘAROe/-6 2Fy 6;)ȍy_[+<~T4~'WI ~dr?o̯E 3$GO]/-ٷ9 Rߙ<2n~?GIߙ^ysH,y{K ~ds)o̯ ׸]`B"!r@y st26@@ '+bE 6OJzdAЄRLr)Bxܢ uG$yRm<9hds]1~\fI7Zo.wFW@>h d4'KD4G@r(۔P3AK#D;nPB7wÚHjy@\# {lےGK DZQ mFȹA@ny!y A'CtϬ9R>H> Fm}?4[tq7't-(+s@ ay>&lJ䧵8E@u/qGǚۃt@$y9nR柑EG. FJ7H7:u6q@F-*`l>2ޮ(d}fd_ZOQ3plo40Y>e\ ԣ>pa^顇7'ZGQ}f\#(e>iP0Y>\#(d}fdJaG,ĹaLzGQ7'G,n6ZGQ}felr2sQʸ?Q97'YG40Y@~̠̏\#(e`y#nVAL"(d ZGQ1EaL\#(dLl#(e6K50YF9[G#3(}cs;mA\#(d}f+aG,"6R0&eJ?G dܠO?Ys轷ha2}֮2g&d_ZGQ2Ao\'(d :\#(eHlarAəG֮2_}40Y?W ?3rޮ2S0YDW E1G,EwAəBe\#(EY>\#(e@f/v&aL̏Y 7fO-Qpd1+(}G 伞,U?Yb::C rVO?G^N6BGJ?fv>H,7^O땰-~4@}e\#(d }jg֏b )yCW ?Yy<RGQ5~a}֮VOԮ?Q4Q^gp+~̳7&(0&d\#(d}eZGQ3˗$VzF(d}֮2 r^Or2>2/\"̳$"o~̑yBW ?f-C rfO?G^P?YG }aK0Q>ޮ"ǚ[Y伡Q}fd\#(e>{̟?@y?S ?f<{rS22c&dJ?(e7P0Yy?U7G%pgaqpģAʘGJ?fmd)o̟~3'o\#(eSo?\#o2>ޮ2̥ȠfdJ(d}fd\#(eGP pT?Y#k(_̟*G#3'yW ?f9lwEȧCЮ?Y,c2ަ2>2WIG,(ʠaAZEQdS(eGTedZGQ+'tʸGQ5EATY-|R#.}X_ߚz< _ 7A(s /qr/yxk{r@>iB9Y>Џdn.{H[z۟@i$mdZ>Hh䍬klE=" D{$9?WȕAOnrBH/PH6^#6wP@\ Z:9 ҹM\ئ#(ߒ~9Y@6y:)n\ E@$nd Gs~I{P=gnv@Tt='̔6d&m@Lod .9 tKdAZ[ߖȒ# G :#~Eۢ7ED\ۗ=AG.ܥnb%;@u"ɠV-%~*EX`P(/WM`FE isds%~ȅ:)ᐱ8۠+TӝP˺AW[S MHhi#rVCP*MCumw j W7ij4/P+ [6F);z}L ZrFe>ڗc摭 (q$z=@']uV^\]9[Pp~+CL܃%1CSO<}tF:y3%!f.  0?EiUy?)d 41K/< _F9w qkK!jZyxRWTaax*Eìv;[JlcnѵKׅ8= ͛ߒ]ZD'g9kh$uZT(cy*eRS0=kkAKW`Nʞ柭]4 5Xu=pz?"p*FE\2sKq-&ce4/̈́U0Z9 s@\^,#Դ\I3ḷ6vhu+G1}3#e"GQSB$|Ŏ6"TNOX;ٯ)IðV3d`:䋗;?I6A;;4ELWU b{.",}as>v+;MdE$ %d~biy'+p;G)^`ohI(D knIcb;rK@ rF+ ǑFvGN[o^@%kŶU#;\~{ߥɱ%H+g<]9!kY#pllH#GE_.to(#vSH/sX, _o"au79L &2@~TAG_ wbة(Sð0=vkMM`v%Mx4O榰bTD!p_GZÐ53,j-࡞Ab  ϏI5\invl۟{)hwi"niOTjiaXTcx"=GGGtqz8\!{I2A'k=cQZE~ED}rUNX3KqXYW;4-[-hryu-0t|B"\,lH"k1b 969WFؤm0gLr٘KC$iݒׂ:U[ 9n+P>jJ(L5sI'ZgL1)<1ܶjM-pM3AzϘ̌k3,cypzV3M3$򱌗 GI# &cDeYn$#sHJ[]<4frPQUqBYoy$a/.OYYS|'ⁱC0L&-˅Vq6xm~D]NF!1QG[u khpQ}:~g9xPx_!J1ck#cCZ֋ |is^+z/"/W'k{R"G;z$ܒ շG"odM y-+sae[)w6?"@૘Bo-..Fc^(:mKw0tn9(#H:n>HEk v;#aS+`nrGRMOIo7w4%ȾH_c<@t opT< ~怾ޭk`]vF |探ܹ#tn>H~C,s. gȤ>][ץϒIXsmT;{R=Yb#q=앮?ۙ@W-+a`6!;؇ cG mB~ԋ[bF{#-w(OԐi#.HnlKk@E9sBKrQK9G_ΐDTXY+r="7t{P7Dj6Ò]ۨ@n[ZirG ;)r@-,zrGR;_^{#!Dq rOt9H]HG{Pow[a ruKk_k]R-A; t@o-<@[v'E͐zeJNɍ>h<G.E|,+K.4zsA+ .{#n(.H 9[rs\7ؠ\9' BERdD,vI;wEȋ,9HQwc7PnyҲ}QKdȷ-4>k[sOo.zE4NJ9&s~io{]>Ge8`dW" Y D!6$P Pdn:///t䀸'9EҽX[dtTuA7;r@ŭ{=zL.D'-}L_d {ҽn۠6Ⱥ.<nh%xsEEIlm ۠rlm{ys@o@R{Y)ZtJۣ;#˒<.[GW~U|P  ^~9G$7 ( 9]=ImР/ܒE/$1@n @$lv?$$n}Qaӹ69 7FTr #k kn4.u}-e({ýEa⮀tHOK{RRty ۠6NR}vEە26Htz/R=&0R=iY-ʁ|.t"(tH\/v!t=T͊6] eV,!4IO|7 ^#|i]rrլCSVsfz0w86ㅶg  ϱǮ:t?2s3m>Y-U0V5m2S#[r-rzߒSUҏ}[v?&x:ר\=S欕C6令/<}k]0j6߯ᒭ,8^eO*'Z_ 'A*JHZvv}rmE^_\\E6cdTy+Sii[;9gڞ}\~ s5mTI# ^Z/O{F' ~-XcpQV1ahuJsO `_G:kmvihN.G>rV|8Ŗ$c懗NJb͝YjF{Xn#w^gFڲxgbNQry,?V-wfzvi1h`c/:X -=^w/?[xr:ӾyYuov9{%7-'tor<k}dտkMK~D{z>ã?;' ~.G}r~"=MK~D=O>ã?;?VӾy9uo?rS~ߑ"} aџ4_N@][6ܔߴG)ioȟGL:3Ӿy:m?O;EտkMK~D{z|/Fw/' ~.G}ms)ioȏrS~ߑ>SO0NEտh4_N@][6ܔߴG)ioȟG'tg}rw/' ~.\Jo[#ܔߴOL:3Ӿy9uo?;?Vs%7-Jo[' ߪyb쏐RH5zy:eǶrt3HpOՌ%uT%R,xˈKq5RIgM3[vWcxj+xIut_>݆Q; V`T/ڢxUoƿ) CB5 H鲞ʙ^آSH )^I_|[.bUxum;ĐRT:)cx湶 _@{yE8f9/W@f EM|c}qboGQwNk?M%08n#)}&H-{ysH;:-]YmQϒ.mEdwHy)Ȃ oqpcoΗu~.p-e] #pwAq}G^X!u KlQ{ d@ߪ=A^Y.JzDLHW>6.i[dO֗(Tm^ FG*"nyt,,Hp`-mE\=B]J4[yn&G6$?ZWK3dAtuLd]4 F, >g3OV7q, j]HtuO0l;N],ŕmB׵yךCf(">uP9JB`36-(kCCZlĝ*:|JL?é}{lN:S't}>-,2^ZyԽr]C%{ܹεW$6o5j;L .\.}=ʔuyG1~eCE?Za /_|֙wFeZU`m;ORJ4".GZy#k\yy.dOȟ[R])~L^7#c+p8p?<"_r%$ A?2럀D~!?tֵ[0mk'-2Q՚7TRMOVb x?2oDQȟ73k}r,hr=%%Xh-=E8ײj玞^$sǠz'V8[uQwq-MWxQj$_T>A߼h=!^E|?/O{?xW?"鋿yȟ.OP1W?xQj$_T>߼i|'y?|?/O{?xW~D?Zg~D?~(_+SD(5O~~D?~-o|]֟Hc9|5O~?I¾|'yO~(_,=SD(5O~~9Ei>sT' =SD+wK!~,oEj}}Qe9|5O~?I¾Y EiYEix_,SD(5O~𯩿,~aE߼i>sT' d4 /GG!w?ZzKz_׎Lװ&wӌՊNxQ@ ~&Ĵ8H;럵rvʸ>[ %x=pppWIe:Yg ~i)!2Iy׷[S,gu|y<]c˒]Pmu3~VHr=P{nE>'F<\09/$$Y;sE Uؠ?: ji%6(E#oj.9t~T|쎼vOod ޴uKj|drbR1IoUH/7& "sW h .XF@I[|bQsk%$=h7B.-Y"#$=& .g9G,>\Kdh轐D]eА= 2-K[ܭ7MT9bOD}A絧ֽ.7sj>sYŸvYr?b2mE~[*ۦ91pk8kag:{TOx` fzZwg<ת!w<"Ǻ.de6(ˉ(J0%FaBBBBBBK{kfl JKH,?T5jkW8r+ʴ z;gjþ>ݡ joԟDPi7 q7><x<.>IS\\/?: [4=T~xUA&e{^g6[RucZ>5lD6%W'55a$x3\I^ƞޕf Ԝ8$q='.HqdRukiKNN)ċCsKmK [5k?'{6Z5=tH]||r}"!̬EY/ۅ㾗]JtϿ-g+i57lo[N", G3`.VUd} vi]5o/em}m\OEC^bs/hF|61, ,E[s\릍VvpuQGMdX-.MUE31Q~$M&Mdǜ W,VuF7%:7\E/1ɫwz=.IX3q۵?v㚿k|CDqk[쿛o.]h3wڟ[۲#ɷhg> YWw?ٓ8~>EbN7b8d[EW,uN)pǬozw桢װX>NYɬǜBQ}_ى'Ĭݨ;qncgICc[)kKEro O6i-e5_W=ԅy`]Kzs8H#XTRwu4=$:cbWKGORɡk [wFQ}:±JfqCFs ^'.OxK=ww//#꾒g @}靳V:tߌJso ЌCFi1vDC6 +]Agz8Q&Yt ny貴Ka#6 ,?ֵt0L^k[?WSOg|n166'uw@/;<ѕjP,vb,pDޅ[$jżF]PM°bU]279q%/>uَf8 5M0/NϹqoǨ@5Mp];xIR܈F7j/Q >V@W5:{Ty v5njQ3^MXmu#!K f}q{V\1"fW,ݒ?QQUfZ>7 W a6 ~EZx<o+ɽgZcR׏6̫m[3iͽYFQ-Nx3]$=31޴4x'71\kLj;:uZ>,qZʻ/Eu4sWY~*S{~,?hԻ>엓F-_od>?ޅm,TΊ;B_zV?3ro;?%WPF\2fA UWl s.%'2I⍮SOfNT?T˲}Ugd?M%nj׽O5˸YAR3 $cEThQNζ@6`l֗g'%짧swf*7ePlTQ~5Fkx.toPe]B4QVԓ~Ŭ7cu$`kg;DQw6Wz~=+bX>2YƨlvA#Ck+s[E|ztΡ {W<_vіW5 mA_la m-_LпYFouhG|`=cVwk%I۫SK.XPxw~=ֵxz|.LDﱶ|P\#xQuk?lܑmkr?g1ñODW%=e1'rQ2gW*ʤ E@)t{3R6FSɻAߑOFCQGEE"dm E`M`7 U}53#Pιm̑eE&X&:`mtЙuo\fWcx<ˣC5VqڌDu5# x(Σ%`}QN^;hE+3>\8ltm5e: lP428hri:e;qpM$\:;y[׵Ťcokpy/χgl\[hjl}48\d塥\R txFD.SFD$ kw$/h2N =>!5[`s(6po |tY/S6b1Ul{x낸6FDc}-j>l|n-ΗvwNJնsbn,Cf$e _'unQ =ECUbF[*ќI5LJW|cUrfha'k$6uu-7 `7LjflpݫFWb<:x\=l8 B(s7pcؚ$ P!ĿTH8mv⯪4|l|q6 >! :ے334[o nis#l1 9^Ǽz+Ӿx?WzN`V"ZGt<-+hXg%b~e2FAO#nZA^_.,ԽME|Zdr\6[ea_LU%Ca8fQ[OfHlɹZN6WNO7<#Ž_ 64>Q޺HeQva>o~+STnۋ'Vl^@l7Z]+d%{nrPvbS)FXe}ώٶ '?So U7-<k_r+e6M.&כG?Ȧ ÊIE# `%f3$іpʆl] |wħl!o1߾>6J9 dLvX⡀|𻎻(IP DlHUf* .~CW}x7qWS&L;1 clUR $ڼg}9ĻRo[b9ii02jI[Ku2]M^[#;YkTDMψYJLU1q,f<ko&HKipy.k(imv-V Xu? u0>*#ÄZ%v{ĺ Vj>aykj TkqK#6nfm2$F׿.g:tH^Tr+|l{[ͳ1Bv8ӕʝ5F+~ʜ+20_S&`EufG;\BM+,muF8=+\džRRW-ccx媈Z]#٩~TZAG/Z[-]9yv;NoItRUSzi`>8.MK=` WӴ +?g"XY 5Ҍ6SO "F<޲77F+7ʫhP]0T*OQ$8{lU֌4yNkHLZZ%V#u+Sy e#;b9śZz u̘g.Yt6^+gğ! ]vqWLLۺLw z>9n-uZ):)_4ukT6DRz8Zc_ێ1#qF,e<6f9V+ikn_b~^&Q>sD5X=tt]Nbv ^\%'b 0]AH*$L=Ǡ_v]ie#.ۊLw1wGڤiJ0\.@]ۧ.-^!Z(X~aFHj弝>7\ k[rn>u_ߙ52xL3T^1޻ޫ]jNԜ^f\BG8 EWTw=ʝw5w]g'QirƤaƱuP62[W#/İjUrS^ø)#N([T b\/g:.ƱZZA}EgcD)ĩV~^*4&ѝdRӹ7mZc:ێgQGM,&@}\:FvۈWW5rAS9tTp!Ah?[ÝqC)>1Wh2㥕+}Ko˂&!4d5aGZWJC .c/F'rtf!9zo7G-[[USBBGqY|5fČT4?"ln IY5 PǁH?ȻQqooW|>7ɧ ܿm>ui !\7e E#Ҍȡfy22FWzϿ3#c;"ܟgHvg:iR]TہŸwUs97յ YՈڦ?Z3X#@ύ YlV0NYۺ½rwg}DW%(a<.Z]c&4zYj2p߀Pm:g-,l~uz/oHOΧ;d2~* Pڬ4YE)YY$d{d-1m(5.<לX3dGL0N MjJm=?"ď"{`XDڢ-uq2o-sk9=˂UL7 Sd1>in|S{娉4U3L:\MϚ3Q4pH/{,&d1O%KO[5S`"EfM\82RE栜Yٻ,;h#{u\ۼ٠.v ͊7^븹{&Bk?5o~7J*O%Zg\.M>Mm,eO2/"Zm教< ̲;KDJ-eRpC4cXg7q3)J_#o'Hݺ|/<;m4hqeuԜS`mH9e^1|%zcy,}M8o/EUd M„#^Y#u5k _zV/Knil/45FV뺓ij}Q^us(kd27}D\u@1f*uQ}cSwf3-V짝SImŷ5]r)\J lPcSS5rZdwgaw"ߌX% ߀StM7d|sO4|_JwJ\v>/^LzIUR ҿ_5;RJ33ݾsj[#U$ŭ%xkVf} u#Ι ðOFR~Amc$O9 >в^ɽtO0Sef(u3"-Y1VSӜ.i̿229/!rAѓI8eS+vsَ:6M4mS-9f>Zq;[,H Űzjq3a#l/v91pUQlmց/jƃp!@  =)vr~ߍ[Hy W8E&~jmcT?`wa?ȶMskh2Y TYL3]EN6o Tl-˵_?ǒzOməx$qz u4~pt:8D{l=q0sWXu#}=^OxE<(斉%/ǶFԊreɄ~`sma\tzQ_l%Ni=ݶ>!HcTr3bĪ.T_rzYAk[Vrri6snxG+[B+iIiZ+4Kn#0..GXbaȭ+3"\?F|Sf;[XtƠϔ(@tUamW]hi<[Nn1u?5_f-\_qN梶NψVq";|έ؇tx,97]dc_ ه~3t0xC^_KqG @Z^Ci:# kcF,qXF=3´3}JSgn,Ec^X}:jVKN+T8gVz(CkLR"T3giUDe[ᐪ!9 p[d),XiEy)>&SI'_r7g))?ti VW|6Z纲79mer< Xm껔}THm{6t<&w,oRVd >2 [{=jNZgZ[{3&<3jv_Ζ)a7}@+f{1A榼:Za@إ,v[Y%dot>䓁^t~ӹp矚~.eYӷ>\NYRo{`Vfӄ1q{0 gBakoĹwyԌMduC#5=le˻nMKi)Fbmmu"E m`is8ԝ-dn·l^ PH3˙L*}i`jZݣ'2C3&rtUE=/dDGʺ& ^L!G-bU=}QϱzJNz]Fi8 &i_MKN{mqyXuZVsGFsTr ab:^5_R#_{*_5]0:lCsY$#oC}Uz[9f\pa9T4^=WꈝcEQe-{%zsS_6 F]RM!zl7⼏QA#4x/i$^{\KSO+as/W7u(uÎ6 <FO#otא ȹ+#QF%߱m}6Ls3ty~UИښ5- l'-Ghѭ?٩Ւҵ shr aD΅vҼUlzic7uX6 AŇaG @.vr a_R(0_R#_{*__{*_|?kw9~K0_{*_|?kw9~K0_{*_|?kw9~K0P6Ucbin_R(o_Hᯣs[ m8ӕ^Hɯ-z1>"o,p8m`f8aؖAéOقH>d|qRAʯ#.K[Mb+H%SC4T^Z/p+t7+#L2[{RAكHXꃂk,LF ozX֚ai*)"w^KET2TM5{6SNj>m}2I4ze -zOf˚񜏋T|m#fkse\˄ܽגf<2OʟfO[yݡԉ";% Z"óa5U8WZ2G̟2ӣ tLL5zr-j16P`cfFd צ 뗳'TL2VSEgX=MWeqHec9O ٝ4Qd U#bO ) y6Kao^^1|:N-?OqeQ2w6 ٵ| qw2u )Os[ƶ١řn9+*P^+yYcX[ jLmgI[#lB䭻,cv*5|%lxTV:x[LGo4~יW9L :Hhh|W6ZW3 Č]EU|Z6_p"pF>)AQVTw_fzÛ͠:Wn$Âװ /G{.^W1庂a=`%#(}S+aĤmm{ojK4Ƹr^;ƲDu{I=ZZu{K,_6JC\~\y-'[RG,nhXN<J rB8ڳ=Z ބw+ߵ)bx3aqka w]i3) n< ?ZkO稧~uS2lfl_?}t{)ɴHvsX+Hmh;j,ΣcFeYג2 1ً}%-%HXˍQ'H6ƽP+1%a naSY'`7*:~Y1+ +W~iɆԯ#iHaIA] FS< jtr -xM5l4;Ui{Z|Y󣧦JeR jWn^YC[,*N]$f uk0ʑz=gGsc bzZ!<*>.YL풒_Dž=~* JY1lfJ=^vE7V`"1xsY NjQVʕ8}H{*HH*Bh,{V)Ǫ^-S.7T$y1dzasBQS686 ]qN~y鞩Hz2c40~k˘D4Ӑ9 C \7Xꇘɦ|ʱ6^A@\U\ןqSJ>ds|{?Y/)<؟̨Bpzq?:KS0`Nɋ7)IFun|D܀|#ũHcT)oj?G9mhH5PSوT14z-^0s&$;~J4ĵNqS#\BZ;'lj.\TloH|Bi!P!!ߎ[:+3~K|&V| &8T@0G_󴶞~ţ s#樘Bv+ru89`*h,,=☏67d5qoʪEQ7${x%~jx3gT4te-`ᩧcǘXt)W"'""2W;,3PTe6Xd84۴ZT-,t~a0<7nh֟M0gopK3I.&F-O7!c b^k7#'"rL5ܘwCMKJHm:WTmuݼj'RS6M¨3 ><U)ڨ+mk]^6bl涜O-&-d$|9l͝}ubQ`B3pS]mlW?D^Gds>Z# TSE+c-xiJ'xs0:w/#Jxp;M'_cõ{/~hy.>]12Gz@麐 |XΣ=2Vbz%n[בΰ ^nraT8g9\67q QpZpxZG mfzN|3$taxq$^Rfg_w7khe"o`^^=6o@1ܞ4vVڎ{X^"t|!ܕ$- wAרdP )<[4e;]iP[mo+'&. Χ*w2樰|$ Np`.*̽@!F˥a˘N7>搏]d gM.-νݏiMsH2^c%(u"vS!*UN;g:T ytCTdr9FJj`s7ů-OWhoK"%FO->hiO眩.IU?0' w M&e㛰\{556zyUO7 I#MߒGнgcG)7J79O:jH-DAF"HZlB %N!W.Flsfy@R{CTD&N' "㎾t x-&**G3gC%tl=8}J˔xok׼f1C0c-hsF`i߃. xIs>pߟ$:_B\d%e0ܟCAFFp}ַU,J4R$x*[<ώW1kM\Ti$e,L:k$QlBڪ%,7aNɣtCy/Ss`]Y}i%?}n.7p/aMz"x#pOɔ<S]#xM׏ziO !k؞TRأ.huM̚o>gN ÝʝaTs/&\`՘{PܾXu%6)M\{p2 d+]Ji7WϔJOKT_24Ҽk EfXbmfxeK) ǟZ2Z, f:SWWEZtDނqt2W Uv{pPKA!R6VCYUP!i78~U-36rߒzmj]XOՇݫ#\I^nޞouERǬ.!N^lMXHM&OujKjۖF2Mij0#ÒŖiL^LlqL"cs 6X~*[bZ^6)L kY+q6[F-aQlQصt7[ᅡ:DA !"I]kXm39L|U t&A#A'-u8T4(S c ^ihyH/̭k1t{ğqLM$Mz!uB\SpIL`iRn&~mQu xEVd8"C 5_pR BE#h=ZI o"dO!yN=ohV/ Y ^RvX MCC@ފV{m˵{2V᮸^4U?  qXӭw?j3;tE:.p~OH=n«Ο3SjJ77 QXsgنo;5[UX=nwxXre+4"`k7 `kdΨ}צFr}^m9W-C0ZfMG`t 3KAlt=-\fx.\Zs&1e˽K7E$Ie5j-1yrKFSN_.# ͐f)3Lgv&Hͦ6|xrzg0K^ͭO9_B3adR Lq~9KM.f0(iF5\^,Yo孽7<:rnR9Nb *r+ipV0jsn%iwDt7R>675רŎ|&Kdҍ7BpIJl8FSh,ءn U*{=. 2#IJX0n,"n Kl*1<deZ'T[z^ ,=|p/]=K@ؾt[0q;P1*/OEkOOʶ,:-+-il_q-+kW8VROμE፡\ɟ?޾Z8u?֙`,FWNMrx>>8-gb擻Ϫ~CA͙o3TPد}T0n:7=i\/_Wtf9HtRΤ@|Zj,IXƖ4HZ:ôe-j{t 08/ ߏlnqu=%*}[KuJL1zJ|Աw kw.jc`f5mŵj:RVN،I %.#7 /m"ՙGΤŕ)pvIV^_^~煷NsĴDz1O6@cg88@?xG {趋i؇kžGEFg#Z&iǐ-v'tS>!jYosFX\B6v梆?eH>Y@s]N`IFeK /˘.=fsq Gx1iٖ `la3qZ>G3'ů%g`yS0;(I&6/rXz [MŚ}֫7r I6&Hr2v̸]hE-G 쩃oEb#~3xU=m{=! YRlM8sk ]Sפ8Fj32t͖27 fbvb3s1;0Z^#F Ewp; < !Hdx_H5,ӕ'k 1X!Y2Cu޺#QbI:)z}eqx,}'m{a+Iܿȫ͓kj5A"@ën]5+v[A!'llU?b<~埌y)'l|5KpLX_nk>Ʉ;R.B3V :AT,݊ 6N]+ǝp7Y׃'uH.fPV-)\d N;rVX_KzL[ſ%|sX\`ItwV5Oek%$݆ǪȱF*S Bߓ Ov %cdk`J`g0o}0{[\I`U_Ƚ yˌAvuZ[ 9L6nVVJsy2F&aٓ x4`جO:J6Qfusvw:RC]7_'=&Էf5}>&JG*chc$GmEx(O=`MiCgRXY# HY 8reX,B3$q./µcu8!tjuIНod,"qbcHOL8c-TOs/<|Vg6_Y}s*x/qz|sOұzW+MҘ+֓^Z ZgZyeKiZq"dG޻CUS|YAzh,^0hGY|9Tߕ̯Ҟ .\6B81N.ctq^jjJ2h0+ z]Wܢ۾s,%$4|y]]ۗ0ˊatMօլ`oxoNhF@R'M^8L4CծaR8[{Ѕ=9-)yyѸ1\ xj#G%I_Sߥ#,+:nsBcxBG+o̘^=VҺjyr`5yG8`\::a5VCf#xw m{sR/i-pu3aŇQbM1..E[{7dr,0 Ņ㮀0*a<}øoԑ'\\ÅnLaF?q\1ֲw^ӑ]4t9|d hJyXğ c􃴻4*kr &qجalx}3q 6Y;.0=nĂ,\-Ŭr38p#ȫY:8ewI=辠a)笱cʸsqT9';]IsG&FkɄ,ŀOq39V ŹSzie͙KO'z/ss- nmu 澢~9P;Ff|ɍR p؝Ӽxn^@{'X_w^5[_!i|&|9ѾaUSoݷ|u$s]pӏ6<׹oCg2W#q612vx_,Q`-T aVRM+kø6AX>5b葲zՍQVf=s[;/L:>P+.8#8o5{3nURHrJͷ$,wG g5~2) #9&ERJ6+|(S"$vVt۟d5Me9R3[(>c˷@L&jSčncZReNv`㚕0BU,9DdF*o~\ep6<RB8k7 f{[*~!K2[RJcomaeTy ? Y*zz2VmTP|$ fϝQ*1*'@]f Ix%a/ZF7OmV0U5^rN#1pIaiYLYa)%oju0}j8T=%K*gZSenvH_N!e>PJwcp6*[Yn6(}M s!]&kcܲrW@伷~w-f{&몠r .k1\)KU&M0LFB߉JNl2ȶ3~eTw4l{F:WɺOH< e}tѿ@p.7sP2"W8@c{)Ӧ>OP#6*Cs\o2pm]F 抨TpǫRES ZUc; 6E^V4؅Jwm.'ico[~ұuTi-yƝyR¡jtXb؅F\us`x-RTAmLFwDF2` N"yaۣwn|۬Tt 1 qOrFֽ| xTⵎO27V7IGO][A9\2idsc,6\ˑSB:ɡ."7b1p$;UO%'MQ1:qFJ浠tZ+1*,+\ L^wMQT RŴ_,U14ǵ|e6qÊ(k>ams6ܒy 7i#ߩ tpw . WS0էFƚ*q1uk>$g,~%`::uWz\W:^]o>FGfGH}#\GWM61Y ]$;B2D:c%rYP*^z Wߧy{e %Ry9L؛hkDN;zOS̍]m6y8&Uw,池4Xs(iˁUvΘ3{A'`8v 4NqhZpe1tN Mvͯ3yv /KK rZa˻y^!Jûʆ^k{ 7pwqwP`Aߝtbvjpy6r<>L1/qmc'x4$lk\liu(Lp6 )xb^o1r4}/DVB>3$ga%6&'VTͅFk<4biŪb:FI"G{m;-3srl|r͇`ݴMhnOsdܷQ9\Gl pǑ%m7SUxޟ WtF[+d/5/p^]Dk&ŷ%Of%klL\*ъFږ9" mu2n"cu/ϗ%B"l zOf ,`=&Lߋû*bTK78wӮCOTn*E-I6b2Uk)"mXicsl&<b=Wbo:Mf2%UQU7de$9ǒ BWN nӌ07( dMsv;ƾF^b݃UCIQ[Pl͈{s胇P &`:o8eFKÛGJc+(U  @cGcrp8 4&kLk[w[spJhq2mgʬXL0 i%=4N%5۶y?d"h&ső0|{+kgSF P({] .zStsQƲ?^_OBji 09[mlyE4 gq|rTɊ"Z"FXӉh0 #pҵw~ecՍ39alʔCĆC(aA_w{O^e,\:M`y6UL\K`y,M?ÎQ.lF?-fd=ȥl0܃qϚ_٦|+-1bJEkXClIߙ+ 1eq|ņ`T%.%Pe lt1n@$iiZه[gtu0AOb ɨRtpq9;HdL`=jQ ]3 Mäc@Ik"l?96SұDr:I$.P\gǫ.+$P<$ e*\v<ĻNbUWGGSK.# 1nN6vZ.Iı|)]W)4q2sH"w@MM 7}.a FGXr{\ܵ:GGMNB":2#EGlPcc^S p:ɼO{ܼXOH ?dZ$¨5sL#`3-!xns7Z`6γH?T-? fhh`(Y/E xq_Gb7vϘ(ԸI{p8oT%BT/iW14id>mq[˴dlGeY'Of]I \49!1n6 i!q1fG,"sZu &[b,?;+]v/k ;yP:>-Q'] !!_S,I,wR0\:6RnEӴqsR4,f#$UJ"O[kTq|OIqL4@_7 J|I;ܒ̑bYwĥsXwR7>&0#A bI*H0sطLH-vK*C]Y~#YU5_BTc&^ ?۟UNi`oFk|&iW؃J+@FhШ ׬S\UovpU=tT֋0F՝;/h~%khpiy1؏ہĪ)*<1AOh$Rbf=a4sG8z[=Ax^z/\4[-axLnŽdZ.}*⺼/ǂ|1KW4C3lUf0ifjG;qds$2vlses4K5QB+v&_YMsN;x/I&#NN;۪79%lؾeyf3JRj>@?9_c̏ AypxaSσקz[w||7^$0\Bߝ}e2\1ߙrbEϥo 3N+I [#=jElVM3 _`_ix"/  2݋iw6'3 ec7lιhp6=,,@~OOm@?xo̯WOߟ>;uK 'g#q}̘MQpPkgfֻGO?'hwQߙ\ÒqNrጱU!q>-xzёsGC O( {Z3o̘lvsc[oO+q9Ntϝb"Fq|CYLo̎(xߙjӽ5g܀s-a|^a T_1k3ɟ\EMEU$m<@ݭy}gXomL&>Ns#2NHTۭ?;r>)ǥ#,|Xh1b*;ɚXy\]9ߙ1mC6ʷuz̀_\ gκE~d 50ӎOqŏjê*aRzG wY+k*8pj~-moʺ#C;ǝʏZVn54Ω.Ooe| l{1hkc3VYŠn=TmklNgt/'&X{Cn<;4ITO27كt {hmܹٟSDT1G^?S-4m+n}pb?:FKkb)sU.!=%ų?~t0m]r˧F} z[%e<~6=<{Z8\8B0| 'v91<z])o^͝% 榍# ZacSQ_pQ5gd$zz\4E'r2vg>u[^f\* +LΎ*پ: wԧCi7=;94gLܔLǽk\t IB4?:vbL;U:1EOLuJⓩߊ3019=hhk-q֋£F{MIZ ;tvlNlD7;4fqI,{9>eZF`S{OMrP}]JvU_mZGPʺ8,pI3h<1,o{ EW<[=]utMדL?˝0O|2# P`EA$94>cəjRe4r9񷼮]ik=ubl*]3iނE8ǚ*ZB)D7H[熴0CA|Q]˕CX6(d5QIh!h >'7*)1Rqu46h$ p.-W2,%&1ڬ&X]Ns\[ ر'bN1U=m\艹wMy>$SC?3#G!)*:Ė, "ċb6k~yS-w a?s޻oLXsp Iĝ }Ȫ$üQlXzcؽV-z6 _)ԎOx<^ԟox88dەѹ>L%42V1hs 8AS+<;Z1i12f8,rarB;*aUN"ԱyR-B쿇޾GRvsgif8cI>ӵq4ni2ή9Iq=͖k۵Ҳ#`6yLSt}ç9ַwy-+xesԁװVٻUB՘d-,/!i7-`'{4"P?o{!;n^j/޷an%r_.GoR1ɝ^S>g͕ؖwCQS10[k0G5)1 7nO~cıNŊ͍)rzZH cqlys3\,sUuMv Mv5'}c)g)Z]4!F ':~撥TQ$nۖ۱Z0=׳_e+g<p3}v-`⥝25 <;TX~k+nєl^j G!I888AkËA rmslѐ s Dꪎ AwnMߝ|4s&Sg .vn`6 .$FBڃf%,[Qᬊ6n cm:dyJ7F"$Fj[l˕$wt' Әaj(u桥 cEEbY,nYu]e("|L6R#zM=< r۲Nlqixۋ9/<6;7g+䊪HQe{0W|hnzUj+>ayrD=CZz[tENlLh`?"{5>`G#yFiSe@6ak%@Tꀋ+x#Z{x$['oT#!PDd @ .}S @G-tX^$y(9%1{ [=hKӾr sJEʃ~}@ۚ~imѸ˚wKnE=\^esu닞;]{;% E"<9H#EP+ߚ>EkB[0|P6F.K AJ :P(Q{,tOcG ]EISŋ]sSs,bx<=Cx!tI!ٻ>SZv'[ouWiwDbstq7_P楦9V*'媻L$(y6 S0ώ;+GEpӚ,5g!g&qC}QEk~U!}(6nH/M_G+~U u=Q~>BC}QEk~U-/G7$S~h|*;moʾHACGS~h|*;moʾrGs~_`kS~h|*;moʾ}9?#)HA4>k~ߕ__Jڧ"#S~h|*;moʾ$_~H/M_G}WvH#G vHg/M_G}WvHHA?~HOE _*On/G;$?bEk~Tw~ߕ}'dڧ"}GS/M_G}W~Gt;$t/MhUyE6Ko&TXr1~A)A4>qCs I6]1?ô?bd >Jk[Z.`tv6nI{(jVKL[ ̅NieLNGCDoz9h֏,A ~EBG4oopAE;9 V <؛qF#1q]PFept$k}lP_Z{ZhK؁gdy -k#POP{DOR #`$nMF+ wH#$Z { [s^#.9 y&7xtAA$䆠:Y;maۯd-4$n##~Fְ@)$Hŭ˒)yw^zUc.U ,6$Xi#rQtH~i Qty?NG1A ]|l}HFMn7怃 Tnw@X#aԡ}삎h gy #\Ņ"!#{dHKٲ[^"INǡ@@n"D>|4r6GܷE]1>hy~t67@6~-4u:")[m;+)yG_$.I\X%`0" $\x+㺐pvϵT=OF{%ex#@{GȖ ;^h~H/QL~IyU.~J]k`,-vP+VAߒ GTytK E|<@4nAP8W=B^€]w{P~E }I#$E49rG4]%?4H?Q .=E\] ǚAmѲT{Te/ʋAT;].[x'WAJ@ z 7Eך/~7DJ3f~]!t+/$oH6>H7T tEH(">dDQG =G$sG?' R [O{"L)oyXHdIbsؿ?.^Գ7a~}ncؿ?f  ?}n K06"eFbU"č4yY:+9cؽ?f@oD_ڃ_ԏq~o?[g',G[/b~}n?f,aG_WYRAq?/WAˇؿ?f#a/OGۈ?f.GD_dq R[dn6D0[?_ԃM_Գ7Q,?/WGbKm߻ؿ?[',T 7<'#pg,9%bO5#ooR>/R#k m_ԗtȿ 7ہ Hto{OYb^s{'#uܽ K0oA ^Ԙ˧{+,G4r;(_|{gk,;#To I?f=saN[pR\w/WYW=a\g#q߻ؿ?fy7AFǨܶG4{Y <odd<7!kd cm~H@msFO%2{b[~D=̥F>( B{ P@^IH> '~mt@G[l-=A=@@01A6| Z{J؋w9*w "7"+da/W@$k!Ёt].@Yͬ"z'-AۚB=|Dy@oD6DS(K vGTE%p;wJؠ{ ]OGփ~D|ӿ-oK؁{G$\Tc>hnvH̠iIn 9k.#drA@ne!/h@ͯ!GGK l. N6u"h= HGO^[ :؄s  V=:yOtm#t~a+X&cp3ZO;hrfSsD};cl!XqhG9e JSs*1C}`U˺sdٟ ,9ge[WCN^Y3 0e4o l 8Xmui.ᦐTUG$Uw>!rrroJ ]qL=-mCe#{67 V󦺥j]L5VQTBMn9A =a:E&-t̟lTÁYhߔsd2Y H{wn%< _29 |o/6g#Xʧ*iqbŬlV?kxAQ~SsD3ɸ?N*DT I$&_1qL6"$./&X .."; bFhSq⎕N ]'`֎'`?uK'fa|~<18_'gp|PLث<sI`-!42 :ȎY^->Ȑ0TT6pibRÚ&`ݰqzԏ{藅ʜ3bCH#W FlV@t ,]2<\4[>ߚ y#۽la?%8a@QC`nAB6)xߢvTduEE#Tn@ۣ&RDQdD\/.i/j|,9q`yWAt[w@RFJ4l;uK؍T@;OGQ ۧT<'%mE?Zw6$Z@zߝ]9\ '|~t$%| =e yu~<"Fß@V@ۢ:`|ئH WO$a;ϯ$bby%=T4$;/j=h4 |jM$Tl/P@rGcZUK4.G#OG+AݲD8+[F];Dpˇh/"i[ƏdWOE>[Ƨ)携s,,\"5I݇b13^%D5||/`Nҏ3[l' 0bԵMwr8Ė> dfjMjQEE1<6H5zPnk  b!ݠ) [[i36R+jhh{;8\zC=u')S8M$bU=acY#HZ{tA$ɸ\$x$s"FatcY\OXNRbk%f9ޝmuFV9wFKTeh mpA ؍"77D;*Cˊ6h6ʙ$:|jiE'Dnw\͕- E?S F# mT(,, W7m_tҸyuYjiP0QbiS%AOtTSU<}}g˅"Ю!l J nIEʤ/; HģaԦRӾFԼl}Hsomm=a2/7`F^  l:"m#d# y?Rrl-.|.09*y:w(( $S巒-6@o%27@}6 m G< x#G~<xc{x$B@4_aȃױ+o$ 7[ԏb.OTl4nG4l1D7@o6b\r@~L~[};"AP|P<>}ԋ#m6 y;XuKo$h؎[;Xs@ % }EEL%1S$^I䂠xұsjC+7wqE}IG "^k"KQl6@|ߒ^h;"%xrK{#dX9 .^H0|>E?$ $7d_ ^@XqE, XQ˒d꺀=VX/ܝEqFrG^hk#D_#sDiZ.HS=&-/䍺Zd=Pvo藪w؄ 2R:9 GD~T䀵;~n,e?Y@w@kEtl@{y"{%tsϒ-t~o?Ȏsw 6'rG[CHP(-6\恛GD\ ʞkw(%}D< ~^K#H_ѸӒ$؝Inh"Ǯ`z|x${|ak$m,;{Ao dHxdWGcoHp t]-䁋mt$!F!.7@'~inQӟ$@KGd-DdX 6v#J~ =?*6 (!z!]46 6kot=ѽSD@?:<ʁ'N4-QB,;nZn$JbM]跏4{"]l+۠7-2Կ27GUkdAd G[H {7Nt(}i}ӶJ.΃E#tNy6R$I~H'`^$n%@@z%}쎛 |7E#~]]w@$6;~T-j^w .-XuKlvE@r؀E=Q'^,9x%>h: GT=Rd_[/9  [.G6u3WrXtm⚙pcwt٢*> c?cc .(kꉜCbnyhAs.ɹ/=q-KΕU8#ytm'cFzɹ$o6nNBC~7;O ݬdpukX|ogj,l?Bh)ⷩph Jx*1N&dǖ#5裒+mZtrf14D'լ-294'cOcPsPr"".{F{OZ(R>0G.k-:)mq2Dˍh׌; ~gw41U4 ֌!le~9R;YX$[tRg9-$h#.;yE]8˚Dd_4w4і{ma͑^f<'Njb x|~˚-ZϜL,_Dp)bsfAK4Z3=^i:a2Us.d3TO];O&;V߅eJ*#76` |f+߶<| yg#ESu=c` * h .rsvL°@<@`F<]n?׏;xk8~Q37Ex1kNs8KykiCxb<"SbN`cVc?/36h֢>: $Zݝ#i#f`HfjpRtF!C}&ĠTnrx%x+3iV7/^=f;tXq^͉~9+\qSc$DiIr2YV)Pcw?ʥqWkC&q0]ĭx#ZzgT_SfQ,o٩8b~UrX"xIOp ŦD:K9░mϩf3dn1Hci'U9W7!sTw+5(Z[TEYV)ڃ=j;R5K12ybx:L=aE]% CM- F+b^6pv[%N5/m88s_тԝuδDǜvv4:qL)YĴ\^c̹Z0i-k! {#zZ2k8mf0x鞟knp6N6% >RǟKZko5; j^+xCERO>%I$ot%{yq{/#:1IDf.WvZ\V= #EY>f=?^%˓{$`=\:w O%_kݝoq߶U?ji]%c3faV%0Q~'_; wن.F| sk0Ho'?T q`LK1VAYIq ݡc0z.|Mwiwi UZG@3^2| İ} oG ]Le[jpR:i[Q}CpVQS'd*6Y1Bv^P0MKAA! ics zc`S>A#?iڪY]vQ5-~>1>HuPEfokFIn!T( q)!-h-Dt]5[&Y׍w8vj52|I+E&]!8w+H3:Yb;pi]OQŻ5=VvM'hmDfߥZ?_2&p@-y(~st'ڋ4_4W}*KړԎ}5W]#_I~.JA%iNuJl5(]6Zl撑pc&o{К#If*k׼AǻlC_1\;V7K90K4ΰ{:-Y#3whJНv u|GL<샔ɘ-6AJrK&gB3Y u=Ujt*Lq1 5eM `^c˛\O9Skq5vc5Uj^_*ɸ6RNaq'o7aNs4:5p̝VOU?/q= vb~ ;o$.Ls5O#~6Cm4\s5̹.v}.ۢG؎Ji5 n@Ai#R^o5/Ud,.bPHgiKUJ]Vd1 r&O5tqw܊U?spԴlM7o3mD[fà I%avj{ճ`ZiۢsOk5͕tf7uplSܼOF nݳ'5 ka[{mKJu+.x5*=n9 's mʘ&s Űyi$|Ii15Hv Q}*maX9Ɉ>Ns\}G"=ldF9GwȃDi8 {XYl7/jJjZw!F58^!EX`Ĩw ㌴l|dOdZA胡.ޝ2c5Q 1m%Grtf.*-` ?XWS\Hm>0lLnBC=1st|tSv1ihlAU9fݽ@p]ce#r,T`LTZX= =/R[sLB&Ƶ;fi+^Ƹpy,M>\kJIH> +}\t[~tpu*<+'"Y/.4wi@W T5V|WGBz!7 h,403g\5u8jqVvqt8qi`HYI9G"yBol=ad FI67q79XݾOsyk&IV5k֗e1(p;.W&컇#AN 9fW?v(5⚳ `6u&.=2zȤoW6=?-JX~O=p2lnUcX^jI._Dhn]uQl1DV ͛ڶK۩񌭆lȚz^@,7] Tr[k551uS nlJP_'#'3H.IVx_Ws#ǾJo){txU469p G}5jlxMv \M6\K_<Γl+gxmGZ]Jx|'50ґm?ea{hjs3Aٹ+.6|;.rI>#seMu"vn1\przXEc{Z? R矹F99n<cdn*feEK;+r}c*YOx~tVK\MGSbfҚ#cDA+e.#)Գv7.{@ʸ}UαNkk|f 朸\̕æ6e@1Y֛*tѰwyV0S9DBՙFKz|F#MBᷱl^x:nFUy?}5tv"*!)h$-+ ln|՞Mpi~1wuP{UIv&XM%iᶷpeomwtJwbSpgU-jA~.%^j㰟,-ݜY|26풝ڵj14yrf;, Gc{CԶZj:BW=}O jJ=Լ-%Lj9z}?*z3}H}ڍ"1b{'~U Gʺ L>\]NQA'@?Xt][s[ '7k/52}|P)gAQ Y$4q8X>\t)d}OqaNC 8R~X|)`g=,ik͘@eg͖ˏ922Z`,B5RF1![y_CP{7 ¶X]9]皢x^\ _Os~;!DqoEh*ep[;t/tK,ITm;H6XZvƒ u\nW<tT0V.)%|1MPM,r\ B1İbH-0>bsA@b6Emto\O@h-tC.I]_=qÈG-etfܱWsm\׽@c-o]5ٺRU5V,70eBczkh;/LoWԢtp#P*c,x˦ . M!$kۊcD[s`k{Vos \quxәQ֨fR,%={`Ձy,FB>U _sߟw7\lWkyvvM5fBu;`\]Xw[u+E[_#nKAlMG0F7ucX+R6▚{NK[PhIX"#*Q2 $~sN㔵S p;+~N*8Ulr20Z~Ek}̵`[> [q8dĠ%UYܯbb}N>Z5VןuN] `Gs Qr]_l4=1Pin9J.K\oY"ay+co E1!~+g5uc1ϙA_qپRv\,χfLN N16{)nƚyO8TR AhiXֶ*vd_4^]U(Bgg}yY uE!ľO] Q'}$QK~~=swH;k[}l@0>ۯ>]*UPҁ )aSn +bRV#]{ÛO`[ڴsޏhTY wvZv rZay5cqV5mǦ+\rro2sP*ާfD,X>&a3م|dy345!q<}?6َ˩˭:Gb2?dc-:ţ6ۉE1i#.#˽lZ]4,`Qk{[,4D:+#i}M3 uԶfReLZۢ@UCWr{ߖpvZ ,W"$tYuW-su~c0}-Af=D짦cSf뮻Gd?j$|G7ASPԭ,0 w v[k q,jf0UcSWKGJ-h(:z'# z.92\bza5sc i-J׺( Ljv惶 #t3#v08[nkhZ~#UW\aq6.Wg-cV1˅[cQTZ\T䎩ѺLJ ;ZvxEߌo?GCStY惺D * #"^&x^R(G#pێ׽Om%u5 s#eLiq_kuaa^ }˄n+ڏSHQYb3:5>TSMKÆ9XyY|[zuPzj[8h,̮Q pZinqwPW ,WV3Բ=L>n8J#2w 䎢"^d..wUiq8 vAECf䕶L ty+9Gol;Q^OY|+2FiX}Cww܅y-q0mܫE5#-a2}=$`9ΒA3ƣQ&a ϧ)>2fךi~+#Ɍ[O#[m ksCuݴ0ں̙$^ǃ˱1(acmn6q̥YG V{Xo1.'ċ=yꚶ1{+O8EGW^kQJ"'1Dw0F 6N)/GLv>4OI+),MwUӵ9KLpatߡWxT#,NA߻umpLƧvk-sR;Auta''\.=$op<[9f  S!?bTpjbO{dx*t\[u;vKfyqXc\G|V.Ƣ;nwW;E}Y|Q.>ˆSE|d3$6߯ YrSro+Vhq.rD+ܧgA2`Xp}D11{~e{+k^ LzF;wk[r8F+3〴]wJz)O1of+Hif=GMU]0촟ϊUsd$L%\Tٞ8%$﮼0XbPQ0L8۹!l]h/G  ni_dXn'u7'63+sD4tAR q嚲:=52 r)EsF"8fYi^[o.+LzGuXZqU/`#6X0Gds3-^\Zu J2wgJ|:Zw/dܓV9͒(I]`$u.H W{&U{A4Θ6J`+lqquŸ|ts}.%hLg}|> cٶ-RuxSAIGO$#Ϳx[*jnQL?QqJ39cyyf*0&Sp[\o Q2w*at߉!ݑQg]k#WDh jJߊ'Iʺ71a:?2yxfZm a:}V"쿃4NJIw?-vɵT}|qxSks2m.UCeLn%jGg@ɏI^#xǏ5a1Ib I n<(a CDxXmiYpyhおUNٟwr;\sY7[9MCOa78 {u浼_[G:YRa̡qHJam9tY:FܞtSfJ;,/'<@9Qf}Iwh&쩭ZufX_IG4>kA#``,8{MM;65u??N12> v52SAC5ddt=4Q_Tn~U/oyv OV.+{2=pځF*AkeKD2G[{ڼMBظ;L,38Hwon}+l'B0\i"g|,PTG#wx֗QLB"CPKbgw5'"#֡F5uYC$N]i-AvuD֨[!E#%FuuO a =ĆPbl;-CpSޗKnf50&yH7ty4[p1D|.XGL-~ϵ;rZ dnyq(d"A G}K-Ѩ%|CLvq v]-7ڹTO=tf*8-1_-c)7UcE7{cy9^+v] 2o. ׆r*K/wu;BHs佶@ecAp -U$*APzXCzkb.G toR+1ǪۓVZ9,:È^Z $%zHUUN s:Zrϭjv)%ž‚qPJ IܱsF5& HYм3v+*#4Hm~?ԱǑզ9Z7j@5:sp&xb|W&Ol$AYo_Di9 x|;`nA<<"$ZN}+yl8pE[=a[f }k<ZYCوxk+Q;1V:u WD8n߸zgY1L'6K^mOFZ?ǝb{{neG\[u+{.Kg-2Þ+:+n(Է{"E3ݻ>xi6qWفY[rZ[>#cgz^­Q_Y,5DQ \QI}YCYHʣDVX4 .8qhoCͧVR'?`X *8օj61eGH*$;jVB։ "~.|ϺۛmSr~)U&4o`|[ǚ lБ=sm6n\&>TPc-Ayq{8(,Ml>E\5BRt{fZPIzKl A*LړrL,Xz3M.)DP]enms!|dImd|qߑ+#c~\#X yAAeux?a8DltWx쬛-VTéoV'}u hp9 ,SO LmXO=P Є BQ^~)?; nn?֍BW2K\ {2Oy~j?Q=tgZHN_{{U<ߺǮ?Th.^(*%/Lwo-iVBZqaU n^{.!n-{U;T}/'p^5措hܫzuxy1ʡje ~ w^!B)>V踫F<^Az%Vd+' %'v5:%.)浝 >н/x^2VAU%1dm"?Sd6 'wWNݑ`/!&cܓv%٥2IQnì-EBP V{< >Ӹ;3,u=c8o- Jqj\?xq_rm}FkM05t,s;>nL*ol; 禂/t߈]'K]kۓGθk8Y6KH|rz} {.&lGιõx8X[+rsy.c!Y N,ԝx?(5a$#df*ސd< ZO49 o7}P`yYMBpiWAS~shscZt٩+ ^) nCu &mK81/H>S9 *c$|`,PXc䢦cY\6_?fj8,49^ˮ"q )㨒{1e wN٫LX\b&4㯱s!9<3NYB9i}_?ZZ]ODFHZqPκv!YR*fn&:Ò ]53Dk0gJ>:TNX; nes^dsbOfSkx-8UNхaQ8"K[sEviș%ep=K|Du%/ ]nH6`8vިhngU2nVf,RMLȣtϾXO1j+Pl&6FCbF;wK9c4,4ukcd2(njOѝ*9S ˹0eF{S:KgLj34y5bybgn6De|Q7cat!u4 U޵ә[$ 7p鏪 ^*uXj~aҌW&A:,Z % wS~ZRi^&q]u=wЮ2u\vyLe_eEpm;ז*۫q "VFؚB h䡜s)X^HEN:^{3Hde6Q5m>*0jv7UmR [{V-aXWX .w>Ƕ仇˚ٳq-cswy *w ~:nL}ޅSLC=ۅLk3z6&l$'_tɃم}#Avd ԝ.'clS-4@/7;=[#MCq щ=tgp u{2[|-}C?uψ8@ Zp=k!;%6ɽd׶>G깺.D] ]Yqo ;WU}x$Q\9רyF M.K*InI\$V|6Tꌒu/DsI\VUI[V(dc*ۆ*WU뒟|;+^߮L[6Il675Qj 9_)Xϕ~ߜ9c: ˆCvuቓcis Md'mX$\3 t`q1Sr挱t,6y* Z/&aJc=.E2{;n`(;ӇSֹck-ak&Qp >unj2cz&:Vb\TQ+{-qbO $LrSMhZQDym!d wSHº|9=KxODXX+W;m[uj^b@uq4|R;ZVzhus<m jo XLN˹XIQ@4Ҏ̶RPBW`t]E'v&RbM,TmyZ){G,}mQGT |,퍞0:\LO}=>yf" (6/mRg b vH3Lc%'n[̓6FKp K= dHḲS('θLdUl^(6{Uf,y ILG43vejl>`0W0/%-QLۇI$TDpD"K2fzph\ii4UhIkSamiF YB)Ƶ- rPjVf >5s89e0zU4?(Oh088\[Tsa}tn S@3O1,.5296YmqoIZQRPڪH{kEE5G(!Ł\&d|S ոpTUE֕ŪJh+ wvS:-/ ZbKi(O>I%>WuY]maYW>#4m|y NLū"AJ8X衫Yu~eԌ[qotKanhD`P=}9ҪcP,hhk\1"@w BYvGeDhp6tPepzK; 'sgecN\%vM+mG+Y8O_旘 4"A$|nK_<:"y  7DmKoᡘE݅M;(߳+ ,aVIt1 .`誶OFL;s %WZ+sazmTvy,ؓتnKM\G%zC ؕYV }*̐b#.T6D*-V]{r6QIhYTV1;F')K> ]C*垒tebvgJ#/ɏӺރZ}e5ݔ㟃ca }w Rupxب돁VW?+a+*;,dv>%}(v{޶i/!g0aۈ9/S)~%RU5m0 E#`rQ(T->\hz"VW%Y y[&Z8{opG6( :';}>Sl5֝(l?]f^WĸF,_q*2LAثC8F`wVsHOUQ[Dz{`m'UAr){+b ThQTv )yQ7;2\I{쭫 [>^)  RMi5a SF-,b՚OIox9텖p8o𢜮Ԁk \&W}r14td⇄ *M3:}B,<:KTK&1\{=btr xgs8KI'u.,A?ܲ 6۬/j^.@ɉ{h;84d͓ek1WF׷6X kny.׍Võtulk.~`/=q;/P4׃n=O^< {1$sWGT)\[~,=VIR3ЀGuS9GW4Ē>EGSʺט0jdg7n;NtuTphrh#eTEN.:Yu2Ww:+_Ù(0]摞<[v3v]H7X8u,L:v4l,&j~y³/K:}3=c}PFkL\yYh8LQl-eߘ>CX\+2xf#KYMGS}0YoyP1YIapKk``B4Xg{rJXF$1t [yc;FSWN:Gc9.0񰷽-s:[7`9t\SYZ[CK[ =|^]cy|$f:Jf;WXٳvoű9u#C\<jJY'|`6⽖ sqIZ I $P`|58%}DN/i_;kMFSHڇ2 o:qȪ>>{ ]Q%dܬ-/FonX7&5< 1. 4Z p!)vt̕g8ÈSJָQT5{t[Ɛ66BCh()joYs 3k@c\ p*1&p>jC3 ũfoC@sASN1yj()!|!`"ֺ9)CG*$){ io4,$<ИY ߙ\kQr\XpG\Ƙ4J!$ H )䕗v[&/F5Vx=#b.ݢt]_Th> .~&o`U{}JqC2B:KouˑeTMsdr&=W, 9ÊR۪BVnAK e1D2&j 9b+,%VmVМc| vJBLMcMik2kze}G$,@ o\r.`m u08E$ sW8u;2Sǻ) :#d #óEL{=Ԋ"rUQxҕ3Zjel|B r.wy(ceS[9Tbۏz){~,Vm_}7ԙ+0hWڍEK40i0TeOf1ا5cj,Rs|V.A氈%%a[PF+k^T `1X6|7yOf(G)⏴W! 234hZq?&[z}Op~K~#=k0I+~.@;taך- _N ²t&6Yh<*|!b[n.u5}A e9S7Գ[᭪n\_5&EF͜lE ދX4ҐpQ΢Ԗ)I3[֩O9 3o~PK)6vj5W9v'y5u5\eZ;ltuM%Akf:<Qg&li1Hze$8]ct9TSqA#Chbt |=b5%z);;1u g췼+4:1͗~2YKpL_8$y`;Œ)%8hBvYVd)fj[ޖݭ4v&iݙz kqS]! uR1pbA~ BXH#ckdc%Ta~;E٢.~+[i9Dcoȵ> 5۱zV̄l̴ڸ=/.#NZGa:#l%^JGSHaKgK^W0,E ]!lg8c4>}=VQT42 tieS %91Cp SYo0Wq߾ <68ڑ%ytV$Kam&'bG.RƏe ǒp&\mL ly%, c6dښD˞( u\a~\96{\,W›&]$o_]a4t<5A ԽU XX\|Ou/EMdIe8_Ot ꜿqU-xn31n_|Ըao p!䫬t[3*AxAwM?hDElw 1%-V/hlcmt _-pkϢHk{̘"HAE)W0e |4BxqԦ'zR6 ,! ߙι0` n4͒F$+dtϫW$$W[5qUCrM݅ k;ٻQĿ&-<{k>HQ)h[o6F.z]LsH+%ٻ/]6D^/ȯQc6{dYֺgKE3?VFn%=:GRUEQ|eaU^,@rZNu`j*PSQށ[}uPc,jCGvyZK:hCwy,}V.ݘsuxMCUcٞ,23꺳D4=D#c\|o[mJdWf=S;%t-xRX jä2WGBM 9=FYa~j D mFD" <ůMYR Ys\@Z}] 2JX,\^ iiW+tsG>-O[ 5q4h궭m5y/c#Cxc9.?jvgSgZRa>{--QCqٷ,f-{U>u<2:-6DJdݝVcZ*Nj./0Sd*ȄS6ۓHD虍~.&QdvaՆD\E=iHq> . \N^6ٞfl DFͲ걪109,,s^YQ+qbxнF }/_/b# swF2,n3 ▛pߪr2'DVxe4q|Vz_v)]v?~,j۪Ư 5d ,D\6W\/wjD S ,?+GXC8?K1-3 ;6K_+,Ce抁C}һ?O*#23&;k@>K,9tnN&6>TawnB-q;umZx&m7F)yQGQFsRaxs`/p<#uq|/3my T|Kd 1yWMK%4k&os34z[o%}I׆],FOKIR%- R}Xs&23T=c-$vx~Tbh eSXlC4W18#7rXM| 9黶?*3hѐ_/v6NgZz}? NG\]QS3 ZHj꡽#|GRp1z!dsz_VZM0Le@V=}=W\xnKf,}tQXȌ꛱n\UppԘ;? o{:1ڃTSv?97"ʯ7įG#HNu'aUUK}{ŮU֜ff:xWz!›L+BqϚy=jjvoS,98PsH9_.rLACVyrVg) 5A`ߟ>Kv?īhDI !DŽ2]+8-hi,؞]|L;s eyJoE+6I4QfH*m7ĩd2OBhİ^ꗻU #`SJ:\LM=uO~ dltaoEOGX^}ˎbuNHvb͕%o_odV àAظ  uO. ؋:6`^,6Tk[F]W͂)hͺ< FWGvKbmG_#1oxU}ULkw1Ob4,ixWswwW|YZͼk$Xdl#f(hѽ{2*!;zs3禎 Xc35~?* 4sӱ[|:?(˄r k]Ldy;p~`??$5o]|ͤax\Ua~nXhf<]/ATX) xm3c!rLIo̭t㈴>ogۈwO"YȃO;V(r0Y \.m+Ɣ7&T«tFH謻R*d1HE;#]\U>*jͯ?ُL<5QT+yQWhj.&6vg oԺ o"7HEC]=BԬ(dnFULT<ޏ,$FɢƩœZi槼ݞl,ۛZǪ;FecC2NXƿ k^<GYa8^3C8妎gסּZx->7NII n EL ()Vogi.y, N44TLJ1dz`06J8Bg-=~m2@fgپ8~PxV9GԜ-gy59ދ\:V6QيhSg~K$XͮxE2qLm.3K}YF=3sΜ`ٚ x-O p^5p8z@YOy8 n+c^z/b]Ka:xraǎgUg&, )qiX [Q6#ie.4ܽ~&,J|<.!N*o~VY,M],=c3I-0pB6\K=UUf]cnyյn/gNjtʾ/g/=[7,Z*q2*5m 2?sA_P97烺h7h]ɂix͢_\29$:v8GbX^9-KIsWy\IDۻV`i_Q#9r-5<4r;5CM%cb]+LOkH}2kYmwܿtcY&zf|)$3.͊J5mT2K&k^xygqh<ݷ#3&dnT%>Ae/N;Χ]4-UJF:AkZA3nG]컆Gc X'ˁvә)3fA4 bwq=3͖ymPQGܗAGMF)ZrGqxhD\erl6,oiNњnȇ*޴+,.ot84Y=S URT)!qV[R&J\bcN]Y@]Jݲ0VcXNkpmM}A.]s"cZxA FJ6at䖽Q>wtT;qnkYkKL$gf>/΃t qO%rY0,d,;=8ԩ*mTQR7Xj0j4Y+>@}j^ex m2E^|ו؛ ˚p>Zlm*ƛMĮ[M{H%dLkH>㘌 < k'l3\ansCb/8-˴yOpVj1+NS fbkCl-ױi3{yGy=z!ťkdkG$q+a.-䬦>rVWL wU{Χ*:>'{L 66FVZdk7mVC [M lֶ:G>-pVϔ0@bUiV4$+׺ʇ62wn&ܶܕ}8}<\rj#P2y RUQ<"iS($h`gui~ 0dQ~}SX]D بs) AT9KarcϏf<9-[v}hKXZOsUܬ]kۮ|Ro7&I3S2wܕqmB@" +ta!pHO]B򭦙qJ}K `uMnXLRz+7S4fZ>.ⵕKyLLߚor=Ul*2q䰵B`Ux3֮knw0uZDo2ӃU7K!aج ㇈fWN?bQ֊,[3WON?!X[]g&N!S/ ]ʬO' <|+@nl> \dsĝ6;{Ѯ;frP}SNy*bGwoml#$xNz"O)&a}4(kT4-/Nblvu ߾)kp,a8.}Wi?[`nۇGu￱J5yrd>fd>5Ԏ($R].IֶVR閌^l)j, ے/UC/b9[NMe 7hn @:aډU`1p:eG+-6g (7x8^JS{<́g$ nK,TMcߚ\㪠E1DpqS=pCǚѦr0 eYiby<Qó&QԳVd+?vuYZ\X ub)X.nEݓ+5sCR_d )r#qQӷ}Sx8$wquy[\k8^{AX\o4>]zN>E;*adr/#I.O{G 7rVQŬVc'Ǜ]j2emS0Meb8lTzgd±Z:J8HB8<Ʊ*?їD>,7;1I>_1F6`NûqU|(gog)#Hu#^9jz=4@tR+Ih]K%|w6>P\1@4y{S34p/G7sE՚ESXi"OXh/̔OKS| < zN sN3~^ƒz@؏ȶL ߤ}&Deu e,O<,tnu퓇b>-/m[Hl7arE&%BW4ߙ<)Cf +سμhi^#^@,\,m) vӼbHB.GE4}?Ƴs2iН(9# &FVQ]:U]2o"pb=?qi#y(EsTNһ;UKο},ǒv(F/7T=.C s*֗s .|ףGmґz= VMǂҠvQ'-[֧ڍo\GeŃt ,`tZ%fUkCrwk1 s}S/jp B… eg[mYruMWjJ"%-Fs`8-QZ\Hm+3D4}ĎT8B}K zTU)D7u[>0Z4ąr&2w]~E kv/ILqǶ[N|)_& Mw$-m_qv a O%t&H#GcmC uf$rw{r[TZc֥-cР0R59`5 1*FƺS]9jeմdIV鋟5cBgcw<`lW{lamt 1Kn66&_] w.g ׸B1~FE=f Aq9tW)'kZx4,0w8 tp+7u&I\*׏-Lkaic=Dc;Řs5\lXLc./p-ĭ/$hqbZ_K(ki V+zm(: NĒnr5V6\NHh,X$Z֓}Pt.pcdF'=;( ZB!J+-NwgD,AX;^U31`'i\sǀSG 1K21狗%F>v*;stPFWi&(ށAvF.#"\0;){\3fs&5r&+rQ qo6W `@ ~R~ayaضkⰈ:&{R5;qiq,:2)xH005MdqL̈́cY[wDN̚d٧ J8c.g1^pnU1'ە셔ÇuE8{yw׾d cyp,0ӋDžUb۪E> yn)B*.6 \Aߢ P;:Y.[ NlyDVp!H7}td/{脯ySO5&6ѳ{rt6aBy;1=OA5Ÿ  s|CbyFLsFRҙrBt͓G.{˿isoˊGPuysHo>{'גdÒH$w=$B-L{Z1^eÇ]bQSH.b{K\'|57:vuǪjbŲU\#тG(sfzb@*Utx$pUR04$F\lA ُ$㝲_A';X'ӨSﳖ| +lljpF6&5R{ݓÈ`8zd? fWFW< V8Y RWeb?RY%LކwD~A?Q)^\oi%YJoIe9#㹪<qj~ίS=ųIwT-:ۧٻ2]nngޮc̈́ڶ|J6TL}q蕫>wG$Ӻ8jG 1*'0IbW"؝V޻S^b+{K+5KaodOئXmkF^3~/xO?os`Nr᜵X,.;F8YNJ1 bTbme.ܵi{qmoA&2qEK.14 k)>?NZ_Ye_T>Y\uRwzQ,c*M*deMT)=Sw nF:K458<\UF)[ٝ?0 d$z=WeyKo /טxaȶXz9bI o,ݼEvpii%j3dG22wY/56s,:d6j ohKkiImQ-x]oi\י*|٧LsdjƔ|H6mY(Sb jOԇ9MV }Hnc_?ڳQaόQ9m֝n hf5}N?rޞoRz՟8M ?R#66mY(=?~6AWE!MYMV//ݦ^,3~VAY>Xrߨ 2s1:0ZŶ-E@gM4g VJE5Ǭ~{sM˩e蘃@ֺuˊG;#[lǪq8Z:<,6rwe&a33pR`pp(9MrfvE5vXNUݷӐ؋=² A:(6q1 :J8"ZQ01h*|#n6'd^a"ED\ENVA =r9]QNۢ d#42:]+s7O%˭>(ۮ^hG@ԥG= أ^xuH7t[x~Vj]v d rP1`\c 2/䗚ɑDB]YKL r聄蘷4I"\![oУ~Vh.I6H[{t6O4|@{l؏Z\3tDlQk ./EGQnyod&mD.:ʉH@y?7H:jZO,2=ؑVݞ1 WI0zNzU4THM̀EO|)07i{@חH8 mr>?+g68.SƱrM4]צ˼uߘA)k&hvsyq-\ıJjI 䣑8Hs7y-s%cOiwk\y {C} ډr.cMY$oc8B#F][ȸN1UJYl3:W1MNh&]sf{ųq1긠u$ i#-[bR u{2^{lw惭X<|3./LO FЃ^ʘ9b1[\ /t*'|;knC\퓳3'iw B*iq4}<"ޥO=jj,=|m,Usl]tϕbWpXjM;l]$?y!D]gpܫ&/]AW:or>>1# $^=A8'ZN̰b:}&]L4CE膻X5QQ8?qr8PL|~Ҙ=6w+.,+ceHoY^;Ue:<;*XsT>>+: HyJlDZhhsZu PP9}1u܏]^`Ĩ1Vn5vj s j W p^U UUgŤqTcEu')Ŝإ +X_s巚7]Is,,DV7[9{)٣ai(ɧFVq5痮t3vJYtٗڌpCK ,ljR~i=U-duRf=w 4F< Vv+Aac4-E5Zȸv [}֏_HAt'p:H) cKHBLkf7A)W[IP(p=Э/]-˵xjUH覊*yesIi-iH߷Gj?S2F|2Ǖk&q>+[.Hn w[f ˀL5b))ld?h ZY;5D*pdMHC۞@^ysZ.#QW?Δ}nwt%`>lio^1PŢG3og-Wg srOԊi175!7(:I[,XNkU^*6E5XXOohhC7ȖMkkc85[k)k%H*=}zɴY>gYj +eqexz7耬1|{01k w=ܭ?׍)q wK 9~"7]>[+,_° :\_ L/I&T f\(j8oA$E#bs&j˹C8eA۽߱kE+]ӦfX[)p K>@'e1,% CҖgX_I=+M5JN Us69${, od4*,NJY=sa%+"8od 눜,&V6'L<spr/nh Z跊,d[mohlnO4uH}^\uH"-$$hcMUHZX֔cfAQ[W3 2٣s'ح>8F45q omyi\PHsGj/C>~ےљ[2(V`!_OJ-53dniAa}t< WaY3ډZ\5r\2e1f  ]c!m,oA.ZŪEjphgi069t.d{-e{.d|N0_+#9b@8k=5;6QRb]>:jdXo^ÇAA 1+f\=fk( q-M3lnqKPlu9 01֮4oǷ۟4\2j͚i# oL$5,!i3> ҝLz*VfBG؟|YW(fW[ 7 L\$.7!_p<Ә8aYC5BK[yu/g.Dn'1DSޟJ Ú6,.GZNʹ7XdL ϵj^􆺪Kid72 ̍6쇘'} zSFer .:epf\o4:ŹV8cH>vXe$>)Zc{O'4}9c vvY {W>\ 1{Gwú{RS}8noqO[FlXT#ZdMͱ._0lIw %uLm4͈.q0zSh,>wӚ|:#+i#{v{ΰ#뵓asȨvl - 'g{/<fYG__+i:9KG#9n,*۵>X#]q1Hړ/i(a.m{j?a_¿݁4&IԶX`ظ(74JJJze>m˯3fY/F !~G?^6:%[%O̦ cy*Pc9~ԉ ok#ݝ@;pOl~)C*s'u0;TGW6e(%U>$w&gIZ欇"bB].x!ސi,i\1 qqU|Gjgm{ {ڃa_¿WK|Zc&gә~**EKsi1/ɂ׾iiZl 6"9%G=KThY>itA r@_k]0Bm4`j_X5(aYjMA==lV56A`؁eçԴXW3WEK x`P]fmr>P8E]O%=E>KHױ퉠=DZY!Ew<5$#/k\o3DZ& ,y (♣$IHa`>C&lܮɯj0qD%oCJ|M]lG ln7qXX>14!ex$:ڌ8^hKS$2}L' {ZA40Q  p;>'閣g|i^]b2G5Cd^6^.;֝Y3T6U c5p?\ߏnmϚ 7i̍plUtE,M\l.jLG:o .#+GsxX_;c|iAF֒e%ATAJk%Gb -.K7 ˴6bѺ*l@@\(Ud%Xv_UҶΊ. 'afM=䃚uRj7hlOYnFB< %vUGVa1ш:F}7ƽ*o6ᚵƫM+wx-<h[5Yp>u452Pp Ɔ4F6!ve.)e4ӾGU8OiBǴűVT{h.O{W;d*"T4԰02'֋^m,փaX 8&TQU ,{8$pNAak R?G?߽t]d1< {W3 8\+ _j2deh{摱HvYa07LAa@Ibkle w}bN⤒^EwGh`yczUa>Q]W+ #Q6h}4J$ dE7$GP/fA4"f /±lk*aՓIR$hCѹY+Ż;Ò*05,,s%^q.<>£cai xO n8syCv͒p̹SsѱӰdqq\r};nT97g#(j(d yt@[:׻Uf;;kifô,KN* {.`.͐g{GGP袑=A!M@əbY-PaNep |0#V36r-uV #agq5{Z7pi(E@\n.4WE4t#`Ph(72Mߒ\ > G.{YjYT>P4Yc1c㮯ishiܝ<ߢD[ ̡A_# ;#cX|oy&o$st(.CYVUs{{:2#D;ʑrqY W௦ŗc|3x|RTrl%\N.#>=~&Ӛk+Tg9 !,H[ZZ']y}Н#%O؏o4Jd qdtփk l|F/R}ӸGc/ے94ϒ˦ȰH }.BOt= Eȁ[ t $s+p.]Q䁓ЄgT [ܣڝ>& {ym['-/ؗ~s/:Eѿ%>I%HyOo-h~ir\>'{~{tOKւ|Y/jQ&ots^P;x])n2ۢ9nT }RO9rR {H'ˢwyiL W(m9쁟 lϚy"< [l,oR~Է$򵒹SK' y'dqt9S 6`lSȥİJHIU3A>W+x-Gb9EH鏥4LOGg]d/";Dee5>e14΄Yp7GͷƜ[Qo[Tb>EU$uo|}x"ٷoV+`5!"lSb5={,T9=g<]my^ދct v ƇH҇ nHgtWm]{``.L,h7($vfITʚy,R=1sH \1 }L-P׶ JXe36 4\#na}\YrkuHy`{#[jL~)yC sݘcad\gk꼭hLec->FIb0h0jzlS#Y?(7.ޜ"Rj*)Kqa7ٵ4t@roSc#ڰ5.jv|d稡hF;יXc.ѦJKVKP l[Gב ~ֲ-\A|[xGԐE( :A@=Q}-:tH7Bh[=6tGڂv| ۢ;G+]@md4t@l~W[s@ԥc YD7P3JtEtDl  =dt(۪m# ϩ߭@<]P!@=H;#oy[Ԏ{<7F=HȞk" nh#;l~Tr "W@{SR,ȣ~In. Y>ĉ$4z4ךrn_{Q<'@rK.nS@"޴W >3P؎eHx%@A㚀-ѰH~IJ,|S$t:W`e}s3JGpik;F'ڄfHl/! fuw{9c46 XVeg;Z{ϘDn/NϨ [?}rlE4tsSIJlp *-'ñ hCT35T;Ag<uF#-a*-WëN2p=DMwGmnGEoyoX8u,tq.hGDydGEcmBEsK;@$=.|{mts"@t䁺F;k { xYd"D{쀽c.{Yi"ÚtH oPOD_{d-dZ u<y>IX_` ڋy ,GD4_tz @>\$w |</nP;nR<1Tŷ4#trI=sG.[yymnI9wHV^/>w Z(ܢ,A)]@__m'@ty "[ { =.J6A#nEF(P-t{$_,#9Ed Ϛ.@H|-^7AtrLH^IzTok"^ Gv@[ V{9ؠ4/0~D koȧsL@\a7+^H  O4l6=X V!>섍>x"+[YG!d'VP֎#Pȋ_$" ~^ߪ[|6KL?^ꁶ 䋔otz} mփ䀸;u/mN/j$m{r4\"Ò>Hiy~DJ~ C?$6<6dnw@dZ:tKyy:Y]o*w$t+gck $.H >H;0Dx#]l?ʟDW@^od=k"Go[_uңA٧eJLd{PheJ‡G4`Q‡E_nPgtNuҠEO(v2pG‡?ty'fDi[*>=eaJMHF_ /T|({4_:d=/؍2pGƒF_v$˪?_v|({4#L?PI9Tc״>uҧ}Di[*!&+A٣eJƒ@/TJNiQ‡G4T=?_n$ۛm9eoivPh|!ȏۇ*&m?_vPvhLT4;tQƒG?Fo?R{4~eJMo(}2pKA٣_n$e7fGMl@4!AZ83 |Xɰf*7 ڋ[b8~+L.Zy[#sI k#o\Ё䝶A#PΗ-t~vGTA@7BWM y4vPyZȹ P $ˆ)YFØ߾xXv^tlA#SqeoDd|#=Z~C] n3-'T|΋|Hn裾.d I\WAPDDct~9:-m~ZkJd̨@4ߦƖ əW7駬|Qے{S챥mYW7ucKԬ=x7駭|aD[ғSo^ƪyݺ):YO6J W:)M#csZx?ohr:}h_ΫcԭVrvH~do"tɿ?5N#gA_tzUҩ3Hm棏g17~#_MR$v蟳Q{ItquN|j?USNC7 Ԥ+NhTU ֬9=#tn,5OL%oygŸ9/韄6Wy%k?e-2EM3f9XoOj=e>p|7>Hk-\Ꞙo6XoOh*]GM=e>pt[RZcYTzoT %yuK(]St6\}օSI^(fJ6yvև?]zS_oCģ*;gzם:Y(\~A*RV-Tܻrp|OYḾC'yM3eoBGTy"]'m~HQ}|2!d>y/mD"w]!{٦|0n| , MLr7#\" zg9pVF׀GfKbX☮#Ux1]=m}tϩM+\rI$5)U{~vժ+A)pnp~!1$c|X+RRCwK<>dJvM!#3‹8;7N7I2XBBBB:&!@    )r9!426br0ʦ[5KᑤrA Ҋ[>~8alp(3(5brDەsCod:_ڳ~hakr\,Zy,;9@=4y=2XF~xv5U23^mp]i$cUf6(<5KId߯{A=TOa uKύ#abP&YKE(K43 K8pw}vͶ6$u:QHųdbFDMCb{ ıkm՘+)YZO5GC%. 1h>2ޟ[.m'ckq ]%LISI¥hYCߥ3"yrv0٫I̹> rHe9&NڗvG]_ P?맋%N(C.!~No];MrtS3I2wȮݤYOwȶNx_.X?OYHwNgS~ӾESCd꿯GɠɢYD{l]E!YqusehNNߑizr>Sk..B p9%svէ+প-t˖ݧ-)Z"H,φA`kGR $uKW,*v^;V%lUA=+SJ,#-.w2qT@ԅ"b͖YY2cK\H uA<*|2WKDQ˚MA %E8UyzL[KASJň\ͥzqk *OG,&vރ$f ܈_>㫪d';S̽hky\T[+^>Ϡ.( _XQ}Eiq ^1asuNFm'ҚcD.'hQx])-%[JIϒ>-Q>H§E2H,UV5͞*]b)K<<^m_'2Gel.K󖞷gÜ;nK!Ra1L~0-T!CC]NV&˯oWuxgwj2\>0d6W"xt(a}X\ ,yGɽZ*N%SI+7l8z7S&1VᚋcTpQcR7`樷 (w+&cEǢS;sd]rĢȹc:SbHӼű=۷"tv|]L 9|Ը ŒE#O^ ÁUO`c.v54{ . !GEo7DȶCTƘ+WHyB 7pЦ:) BPP %TLͺ$@BY4 Y Z *bIQpJ#lBla2.Fߙ4mB(Oȩ14mbF@3 A5VD湣R\|4Qo WV3JcdbjEB%ݭ9*(2KcO`9@>\Sj4-0Ynqy̘%&=O(?6EUѼw^+rMS'QN\) Uj |l2S eLn~:L5(2t6b'28s+P`8mތÙ+̯S8"cjII{ԕVi5va8@ O v&ZOko²>.K _BpeR Z8h6| Y'ܬ#a)Me{h[:oUF(<36g^_{^ZZ\ELl0mpEiw-@qam>Zi~[̓Uck DvUL37c[-cOOXlSj{c!gzE)>vO "']uax,'/~ѹhB.3WkfV!TdsHUVUCmue,k!)imܱ.ܖXmڬF'O_#usaYnXyo RH\^Ǔ $u5G'C> #7s4UBb7,b"A+= .,7al¥uoyi~g޼]_WL]D×-U.ak۪/kY"U=ωa4RA(-`<3dSEITv0W~UCѼI?oYnTgm=ds. yry >RS$iw?QM&lNj򭳶[dKn+KDG#WHϵQUkQ&~UIT ~2)q"MQ+UluZ9 Ss沈;ӳc*fڹ~]nYZֆJ|niϦ*K^CI[";*ۼI)qTnxtva(9w6^/f-&L!y (L7HMWb5!Uu3@SBXsLІ0½K^ cKQ0){1y-!cyII7gMCUZ\E"+9\06p,k|W#t^&uhˈTq؞jEZNt VJkȹu՟Sll]0~#TZ;/~H'bPoa$sZB0T%תK4|Zt:5Rcm?ʰl}J~#I&ׄX)c X`aA7a'ʜy,lKbMsOS5.Zg(q݅>뗋~ug.sU-l?v8N'.{pX+Vwo  -*ϘY[H+".?v?:lU.af<no]/YTǓW#Ӷ8r TT:8M|qcpҗwfm[} Q|Cܬ*%k9- .FK+Ew,vw"OSa9Ce^MC5;ectpbڮKivͲUco$~KimG%vx5b{F؇ 1$MVKZ{ '1|Ax,GfV"HkR՜Ōp2]{cr./2`JC-.J9ZT5gbZz^Y_,?m/֘SVbKpevTel^٠\žGp9ㅁreZ.%S,p Ց25Lm^l}- *#aִS 7K~#[A^ mK vCZ8z*< n&#qˑr>& /At{PTҾ~?HWC uxLo 'Oԕ]x%d|nE֋_y=^-HW*^"<ʜ{TP;J꬗1cHڪR}\~LKN%o4%Vq7Wmzo엒I橺 4# eQ݃ʝϊmqQiF wew'%10eBH km46SKUD+ˉ I~iOqC{T.&M 6V>űs bQ30 h{;"vA+檔ڲ~d/`K-/0"!e%:;euZ;/Cx!nV[1 j:Z餂mrrll&A)v-7Qҍew0c_ xl|fc1lsB&uAX3`$4e;\zjJ/bB%x«LUriwW^Zm! )Y0P$4V {Y(n@9Eˠ]ui27[Qo"#d"9Ko$|rjEu /֚n=mݼpi+{YgY8`!+̈k>B]Z軷}שc1k*ZS2h{vel h:ӻC'TފkAu⪒߳?M<6a{m)<ܲ %l^TkxyZdpjgspĵJx*# c*H}7+2/u <{uSM&lx] {*wc2F0A]Ǔs^25E3m׸S[kyc5TlgI3n7> _HE=3gibtT=#^h m&`w+uM׈we!rյzt#3aؽEU6RGB -S9)߃Up9$y 1sa4Ú$m59#.H)feBŦd5UtG(o^ 8qq 0GM x|1TT4Oa]^ dvqoE]G#HX_4r껛6zR<YӳLFԪ+2/Bn-lYwt0JfDzCK3Z7r~xI3ggj12IHs^$ސ_f=$5Q WEhaf`f5y0.l*XVk{>lyf/ecqAuK"Ժ7{'#`P.h($sO/?{NѺ;_~&Rj{HT"K1]c_IVO6=X*J%cSfLrt/QE!hQrWƗje zZT5_VTXT{Upi*}DJ7+!7^KnWQHw/rEdqxøzc-WVm#odʰCa9k_?}mQAP%s18\[n]a8Ӵ)k-cQPGŲES v~ ͌5RQqVK/ec@+areN nlҬ2$pJE<.L5wF-t(i:eyf;};{pPW+]qy1|&E[KYV+LLIe v \6rlKeᄋUgR{͐^wUXsBA~l1o:r/ >VGы -}<4prJZ!ϒv:(#A ù`P,M7 Kp5ظɗ";{?߅yuk~oq4N㸌bJ>VHaߖd-5ى-I#?@]qu׹6x;\ΎsfsG+ujffl<Ki?vA!ذK3@F]8MvJZJY=ɰP d0B6SFĢġs87;XnpWgW EyidM24{U\̘ȸ01W2^>Pk_ad(3}oe*{i96\wW7 ZV~.QeA_>5s0 M˗wL}U)Z1GS\NZK'n^;n\`k()'ήg8*.\.A~"ig.'w!,j4-c Hi4z=%%EAqi}0h"kfq zObFg4F@zwruJk^ؙI/hq,KZM4_+gʹ vhg HF*Y$u~'7ç>'Zq@'%l#?ETmuxCD6* 5MR^fnjݷTuDKZ^0XlzYoGMNF/\ Ua{16X%t&B[YMc[vQ'c*nȘ7 lsॲZ3N} \vWFO}7襚(b irY# Zk,ۢG (i#08^Um :8D%d| )b$FFBϧ䖶.Rb-2BZ90V]ܩ{Ɛ5;hţsn%46 U pAj2W]k$US b\/I3{X[e֮+& i%!JjUBGAp q`|%"ۦ A0Q/(.-5SB^.ٙbuB;kCha -}ʽ$族_$ mڳ:P AUͫ2qm;C(jg큝7¶VgǼؒ:#5N>]zxl\UxG5XF5ٛΕU;g:jU)&E; 2('0^c䰔-8(—aqwG[~uӚY,D^}\߇UB~!ID""Z7o* VC8E];M9e;J2}v+'.#̈́t [Tbgbl@0 @*'8e:o|I.9\OW]TyV~bzCIR s9Q,sauZ[ og$p6W0:g7]UOi ܩzFEx/kI($ʔ@]n=VsX\|aӨV'gN'FnsHpC9,OZOF':|UuQTG>5jovKI~#}RP'%_b:XL_=,-5N>L790:1y/˿&{ :..]p6L<^]g&Saͭ,k.]fr_u C ʈV{f>@2B`eWOkOu7Һ4u SMX j7]\)$+U3#-Y_Q B+xH\Na]?[Pme|8ko-֥ZjMn'IZTߍ7YBhrM68⎁Bs>+{%koI 8&ۆ>0y-=lV[ -EZy{'L|w:7nB0e~?Me(dAQ W"& т6{ 8ӹ+Tho \%u7i1xſڅ@3u'5hſڅK!Rz/ 2=4ZkMm8Nֹp>@e/Cķ* KًnI~g2ZF{Vˉ kU?4{]e+YK)F50?d?:9C9auCxz8.Ӫ)=gۧm5 l9MLcw{ueL5p3w-vzlFS+f'.UFWp 1 J>)~ 9s̚2wzoYUOL:ˎuK\KU+=S=NIk=.f)! ƬGx#cY>imO%%A6}vn7J=T!8 ؟5Un,M/r08r+:8ՇB9cᆨzor6ͭf]gZX.`2󮔯y1:nqq9L3suZ5NY3!ky2Sg\4;sV;MVhl{#u`yt(JÙ~h ͐xZ{Znh;#E~}BAooWU?+"p4P7TTNFG-}2V? cڋH?ο"MQ?eg<|ѣ#Yi_3uJNE'⇤w|NiS+)r'?e+fyR)y3+yrMqYD^c#rcےfT|xVOhND,6 )̹O)b2'Lm { h%[bsjڦ楏vZPţ9ɩFpTZ̵1[e1 6V9=1 m,0k)C-;t\jWD4AP:0w!J*E[X:75`1)]y/yjN'pVMV[5N~K M.-0*xKɈ黫7Z^]^ZN9fSm`rҶᜪ]6iaSOØ*\oK{p s-K:*7Y:ދN+4 1 \{h.c8C˂Zs7-]2OQ~Ki-IZe;L#S8JvZ?qz3f3,'Ti:׃ A[̘53y*m,\ꆕ*tG*MQjYGOYS~ZODqPR}LJ˸ſڅ -Ⱥ7u퇒& zꅍ1L=6U-gևA:iuFvΣ 9#ڗDL.W jljt}KYx=k`s7X jkWTR[elaÛ_'+H+A+a9ǨSM!!i k`ƛ\ٕcI<I+ZNmL*:~DQkAtPM[gdsu˔G|jkCS5q=ĻztV;Og^<1킛9Zk[]Tj6ds O+QdsUI^(\٦W~*EcE OU,/yֺ?}Wk4żXrVl 4lXPˉӛf,BI]IYzg*W.K>p IZ~D2^U̓1Ara8Z'pfӻb+!Kn7.jhm]_ʿ.,K/q*]x%j$Vm ɺdݻˆhmޱGlQbq׀Τ_QpYsSq XQWZbv몝&bO^i/&5>&m{= uK}1󮓓~ODUL6ݭV6D%3ttqp۪A 'd5Ŧ=3T~-")jlN[*E񕈧e Zz,{쏻ZlʗN&zK{f6H׿d}Ң̦AtRܟ|unpjOb'Jzngwt}5qUMS+mj-0b =`YTdYHzܧK(2KXqV1%^0Fϻ}eg ;}P]a}:E@;iuxT>Խu2i 7\6Uj,=af&YBPbr0KjзiMM3OO7ظx G2TՂ%w?4t[et{:m"4fNIqfk.E[4ѵ!$\TZaI7;{*ni2%Mҧ.k^\=&S,lċ-eR5_׹*Z[h0nckY9YL![G}LZ❵0;VUmA,2@[pZb+F&*VWSgZݯzf9 yWA#v| oh2h?nZ:~Ot^-a_%y`P9F$LQbJKnž CGl ;lVOGx .&ڕn%SlmijLťd> Z2mٍqT:V!{#|EZQgcF+"{4˄qGʹj{2UV#"qKrAӸY|5E3]J%գlW)ײx1Ò$b޷rgH8,\WRkVe s* '|xe̫<+L} lXIW.\BUbMDol> 켽VMlE}OW_IPύ*+&AUk&P2(1ᣒg#wP٢c#tfV.)iHpw\UD"``"e4*~܇[ۭQPp}Ѳׁ7 .Ī,X^D,UuP[f\'"2G+x. Y8ulkc,5{,߼<|Bm5Sl>Nњ_CFUiݥmr˩;BiI͸SJ֪Lfo>n,mt.`~Qւ4\@orOa-}~:;q_kUI& m¤QҴÝo,si{ /\-f<2 PS vSqGj!\*Upnx .nDĻ8ƛ}V?Nx3Ə;WD}$SȔ6 vkg-uD9JwH[7Lýְy\elqWzk3Ա}/δ;;Ri3x_F.{ `>c, dx$+YJ!hOm!ܫY9֏DMqTInRQ+UݥVk \V7[Wὕ[kM$ EO}jD1R(6H[)շ]MlB.Nۣ34Qn(@ ǩjMb͘XDNՓjr;<*;_tνnp6ao cZOnd9cV#Qךز/+ aunity-scope-mediascanner-0.2+14.04.20140404/data/unity-scope-mediascanner.service.in0000644000015301777760000000024212317535203030462 0ustar pbusernogroup00000000000000[D-BUS Service] Name=com.canonical.Unity.Scope.MediaScanner Exec=@CMAKE_INSTALL_FULL_BINDIR@/unity-scope-loader music/mediascanner.scope video/mediascanner.scope unity-scope-mediascanner-0.2+14.04.20140404/data/music.png0000644000015301777760000000635612317535203023427 0ustar pbusernogroup00000000000000PNG  IHDR8sBIT|d pHYs!8tEXtSoftwarewww.inkscape.org< kIDATx]{wMGGJb uDiQkejNk1ՓdwfֆŤL8R*UԊ6BR8%iDC r#3L+@*oJP<7Xϲ,QIwH2ďdΝ[eB}eOo B+(MիWos-"VKܽzʋg b D3 HQqJ EB@#` b D01"F@#` b DwL}@3{"#I<%h=:44T$N|/zw˲l$ t:ffIz .t+$[Eˀ%헴Wҿ$Iewիl޼y~O/ӧvwݯԉ4~R ".YI{$NdZOQuÒKz`zz.KgI-[4mބ>"tfy711q4 C8,%}^ =@vZ4CApq}JdV|!(..fZ~.aIjW3Vʂ0j]ċ^pq<zC@#` b D01"F@#` b D01"F@#` b D01"F@#` b D01"F@#` bá Ni]f+$I<$IlݺpG8+FeIlf׻.sU*}Yc h\v?+e}8RIvYDx^eԯxJo!IڱczIb vaIC@oj6oww {#pY}-B}Iy7yЛVȯs7MOO_gfW߿ʲl^AIߐ=V4M$iK;z$Y964MFGG5˲0N;*骅~D*J;˲f񑑑{V|2T*IZzGz 8MիWS-5Unt$Ivmٲ幥/kCU;@]ĚR<߰'ךݖ񗝻6^Y+"y%I[.q022r $fcτP$-tѸ?)iMt7H~w=WNx헙=c1X}^rwަgR<333tT҆[flllLRN!w?zC:B(&&&Q$ xrr"IzGQ?~<zESڀ~M; [b{If_ESʀ4M<wEi.@pBo(Rf͚H0 hJpo WN3>s ZCGM)jttxtO%{HX=w=J~{.OBo(c]0jZA0 Ĺ=:$LETsiyI?*g~EJ"|_cw*ٵZY3P矅\҇C(2|A2wTȏtkWB($Iw_ySR/nzD.zWڟOj40Um'I[>zWg`I돹Ufr)}To]&n@ɔ[nDWyIjsQr |Җ-[iZ׸:V-+̾`fKX  Xx}$?BG|&^` l'5כٻ$~viJO;G=z }.tN&ymqwz$ٞG4q6,.pDj3f7J̮POuIENDB`unity-scope-mediascanner-0.2+14.04.20140404/data/musicaggregator.ini.in0000644000015301777760000000054212317535203026061 0ustar pbusernogroup00000000000000[ScopeConfig] DisplayName=Music Description=This is an Ubuntu search plugin merges all music sources into one. Author=Canonical Ltd. Art=@SCOPES_DATADIR@/musicaggregator/musicaggregator-screenshot.jpg Icon=@SCOPES_DATADIR@/mediascanner-music/music.png SearchHint=Search music HotKey= [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-musicaggregator unity-scope-mediascanner-0.2+14.04.20140404/data/mediascanner-video.ini.in0000644000015301777760000000075712317535203026443 0ustar pbusernogroup00000000000000[ScopeConfig] DisplayName=Local Videos Description=This is an Ubuntu search plugin that enables local videos to be searched and displayed in the Dash underneath the Video header. If you do not wish to search this content source, you can disable this search plugin. Author=Canonical Ltd. Art=@SCOPES_DATADIR@/mediascanner-video/mediascanner-video-screenshot.jpg Icon=@SCOPES_DATADIR@/mediascanner-video/video.png SearchHint= HotKey= [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-hollywood unity-scope-mediascanner-0.2+14.04.20140404/data/mediascanner-music-screenshot.jpg0000644000015301777760000033266412317535203030231 0ustar pbusernogroup00000000000000JFIFHHC       C " k  !1AQaq" 2V#BR$36Fbru%&Ce4578UcstTv9DESWf6!1&A"Qcd2aq#3$B ?DD\ы`9??8;.:,2!./~E`|99C0ӚC-A(>8rgɰbg{]֮ kz` $dHn-s\(ZF҈EC <'{ukA/σ#6`3$ƙK&epC|Nzrs[Qd0\YO~'/5$x ‹á~y"1/1)$cAyF VD@D]1_2&M617-51-,NAvl2Z Ru4[K 0|Bg Ť| x"BG17Am#LƇ-- bpd60Uq4%{nx9س8"]iǭh[rF#~m:8RJe.msJPhljȌ:=vB9d|ᙠ- XPatҾ.8/#O?R= H3NK-45ܹ2$"sLAt2T\w8E܇8"lS |/ʾ3ʀ^Py[R=Aqt/oDP 85 ڋ.}?!OWPxb/sU?_[i)$m9E~@EqAŲ3$j sKLE0&AY抲H1qѭ%1ŏikhA THQ`471ԭ(4" a\!F` 6^ E-o!d\Čׇ쭇ś1̓ ]JT@+ʟkc 110R؉a,ǖZ"" >f<Ɨb7";6#5eiyi=gɘQaٕolv->I$QZ+ï|gqo+ٳ(fxM`L48Vip7׈|>13&Uv'Ut'kKxsE il>`Pl8Aÿ?tFƳO,y u]#))po6`+am"#K˘^y-e%ǸkLbUS9`>pIyY<~^Ō2X 8delf1káyq, qart_08,|+g[ˈ4 y8x#1<3sKq&ii-/cj*/08[<%̜N!نg0ŐdX4qdT^q 5";1 RzAH$kՄί1 ?Ŗ^R ,N$W5!CF*H7!+c Y/)?1Kcb84T Wd%\k⧂xX&f6xd,/`064㦟.xCMa" """ """ """ """ ,!}ij`/#l#Z sWClaxփg/8TOT`9>S 7}J 8kYk0)=+$xѣJ C_I ֆ1?.98e &QtO0KYm9\,cn`&$6blLD֊upuzsw^lc8o^$1Hݫ8QݩT4# Rk%Za\In p!&>7tYXP=Mu(=$nb (jkHD<+Y[ q7ln"gR:V,hi-X ЭM1{ C2$ @REu! wx\Px1q%4 yE(5-o3@hN7޻nӜϒRb0ϔ}ctDž {M'y|Ǜ$7z 샛t7x;$RQcue88f?dvN (.IiWOU2LƁPdaB,fCt8]Ay$ss-1.o+W֟ƛs86-JtӏeD VUƃb:׵p%cB!atj}KPS4/`8>ox?cYZaFV,,ʲ>#LW N _0X!A7*.<_;n6P[#9V,k¦GVxd0,!Cka$2(0Ӑe%,CFԕ\x1痤\L;8 )3sv͊4{t1,y~mpS"LGmo8<7áAcXbZִP F+/?{ì.;3Aх ^נ1}1~_e?ncHR"Ö|!g3Z淕+kl6Zs%˂Ɠ`a>&CG&KErl],w|6 L1 6ASpx͖p6++D(Ǟ*{Qv g!`Qde 5'){CZ}΀u3߈nd$Qd(t|GS@A_3f18l1 Kqb47DBPE"`܃rOԃp9󍹱+x;q O{_ {sGZ,SNa'I˘l>CcX"n_1EEG1/0-'e%ZSq3#;NF^JkւI4jJ?F3xFq˹cX|dVpaD'KG$>#C+ pcelX㙞nc2͊!*WFԚZ|[Jp'>yq$ć,˃A#71vX3lay+1i@ jYp8 B±a],\s,f)%$ɹrC0E lE *gqx̹#cXl Q!`psaD}\}aɅqGF'Ib dQ%.Mw-70~!/iNJD›!74G=ǔ5u:Cxļ7ZuƉ`l oZb=qçzJF6?MMNP4y/Npi_=ǿ|x)G%!bcc;$(nv hi7ySvi²_A=t(m`{CEOEvRc"`yHqOdqI9XDHeD (P ]4:W7^Tx? Y͉cÑʉF\ ?jwٓXFk4RߕڼZuW0ǎ)ܤ13A̖=Ϙ wp/Gy*ĉHX?K4Vvs랱<\3QQ{ڧl|1ͳx3e7d3XZM 첝Ŷ:`y3Mυo ;Dڲ$fFcK /W #KɊ)"LJ{O YO!lמ36khHp9ۏiM+/&f2)?XclGw3Ė|^zP7dh{z ij2q{W̑G4L!l7qcJ4A a6c &q8sc8جg5j:xܡ$G)5/V+"CEȰYs[>g 'U3h ya >Qpr?!G=@6$+"@s` qwT}o㗆n݆v=~&/;^貱XqZf@kn" ~ G=;s p^&`v_H |[Cci[//ƜkRsbEl6yl" ml֝ol'0&d< 8$qŃ=FģG-"6i0 6 6%x/*׶ yb ypEhz5{gٕsxQ"GdVO1 ek9.uMyz4DD@DDD@DDD@DDD@DDD@^o.-ljIvı:0MGE7͙k{^=|FDŋ-lh].oj^Ĭ8+)2(r-5`19z v]k/l ST><67 ZRg]qqT(`Edh1$714-p @E3^~̳$,B"8CG mNP[7hq 8 ŗ|H aDadFT_sFlPd߉6d^8#6[+aƱ;wūQ x7e9$U1izOԆPu6; |i#/'eXq|˒Fg8. .#T;؏lkm>9_rqX-mE:] ž'񯈘ZsTor2\Ul&ČPC)k\@_иy|'diّ1x<3sA=\׃o/;sc??aFhp- \G3qGXx ^Lp Y>iR/:.?JPg|_-ĂiS t'7|vrҕ^ ?6錻 bCGɊ" k8 }=J / |?Nkqv;=? ݈L69aoc^FRjCZ~"&pQ0sNFC.9c9$3VDlp5>{}(?f,D4Ilj$HT笓! UϋAcZ;sS?J >vN'[5Jay~48#Xs>1=rӮ}eff7%3^<3VD4\,;2p3;3Jf#ʼn2hN3#7h8Mp_q">4GE=%sI'RJ_>*"K/a9n_c% G|˛q тjk po-NXpl)ILbQ] ed@ ]U{O>(^;.q,ɔcQ!V9vё昺bRdFC1 >[~N覺hz1la4aK>,ǒ9s-ImKE&ɀpk6Nesff=1q2&K 4)l'hHٖ&bB)11^&-qs9x^  3dvE&4\\Ә6>x/^1l/ŜĖ@q>6ޠ;>Ͻb'/ 9.c|;>xBc&~%>H4xkHkg8f4WQhd1s.]t\JKⱙ70;걩"42?xI0ȸZ!Fcq$3lw-n cF|'ϘOH-x4it(-|7A-s\46 utM,f6g!#,F}Rs A d6 Z&[8u\/'߄1Lp-ţևP⊰mn7j:Jx7ާe>~ ?ާϙGޯiߚOnj3h}~Nk? ?'3)8oO_ߒ~dszoS?<_iQ8oOOnj3h}(xJ?~ $Q{oS?<_iS8oOOnj3h}ۅs9+'_Ag9/ x7ާe>~J szg9 !x7ާe>~~Kg9K sz!?YϚOnj3h}~Nk??'3)8oO_~cާާ~x3q?2zfє,p#KY}~Ksz!?YϚOnj3h}~N?%|w9ϽOo}e>?'3)XF >8߬>?'3){XM9g9,p&g9 !x7ާe>~~K sz~d;ާ~x3q?2zfє,p'|sz~dsz!?YϚOnj3h}~Nk?'3)8oO_tDsz~dsz!?YϚOnj3h}~Nk?'3)8oO_ߒ~dsz~d89ϽOg}e>?'3)wYW̃sU8 |~N~K< sPxXQ9Og}e>?'3)wYW̃sU8!߬>8H?>Og_2sS?<_iE8oOOnj3h}85ީ,'Ag9 "x7ާe>~K sz~dsz!?YϚO/nj3h}~N~ \ g9,+Ag7 #x7ާe>~K< sz~~NxHw9ϽOge>?'3)wYȮ~8JY}xg>k?'3)8oO_D>?%|?>?%|?;I(Vn1VGa$Fӹd3S=c#e ;"\sEJy?@Az& u:h+d \n,kQ=.Jֽeo Pz騢n,[$Lb8D橇,Nw>$KWYlP1eX?D2p[c{0F=P] OҤ_b*+k ^%J!j7) 44;BSTiU|} vS̘֏t^Ǯ/MvLau+-HPTw]Ρiʃ( Xؗγ^[q(5zq..7L9pClC 4{D\ &[BԮ;E̐2#(Ckk 66+J۪xD\<Ĺi 2@nŌb19?=#.@_̉W5ru x=ř^'~1.L^CM@a\[}ć Ŏ#;m?zl,q#;H27 m^6ia+ W fLLZd@zRE`tisdfDtf #˜v f s d9L6og2Ďf !b0IKM"a; 'mC' z1&Y_-»=jB:(:>r#Iy&;GGp#pW-7XuOg<_6.!/>bD4@csZMWqFzw` Q@C1Wqq(0yl3e헃 l&P4Bye@5Y|6kP?sN5}9BZud^F9 Ex'qo0Njv,X|^F E@WAgrHƱ5Rrq"st93猽PǗc9[O` XމbBc8asX-2pX`7$8LHpUf.뽁-i&,WV?e= ,V:DᇉIf\C1RSqxsCWj/91Y.'ڦ d^nnsSt"Т1cZTu./dl#M̿'!jkCyAٵ$Pv\hLŧiu=\LΙ1R͍ L6n祋Zt4Nt^)qg̰Nbs VI?,WRl7 ;wR Owk3^8Iޮ[ Y,5>{\LZFD)]wqlP熵0 #< yykE؆APz4TkP(ChK)NWT Z jWr)STށPJTPlm麁B*ilJ T Vۡ.PJSܚ}PT[(D7({ T@ZU7X'r:oRHKh Ds}&4T«Ui os7bi|8qB DWm:9dy3ecRrlie9fL"ScHnpjpkIwZNɪQb爟,kQ6wOpRW(l6 UZꃯܡ\\yIw:v+b ݒۘ1i >V9.bni58S|JGQ!TF?k >K>f^j~zJ👔Ĥa9iqakE!}螨1Wx0xQ:<%]KGaqܰ=VYŠ" جP<=\X}@,5Dȳ\Z)4)+a-釁 e-aR!†@֏V-p2+g8577h VM~ Pҕ%@@T{'ΜħC),@yiW4Tw&r< Jq1" #^r𩧰\ G!JF <7 !icPBU<̧C-JA?2VCq{k6 wƥsOW,Pw2x$sC5;zsyD^zK ,X?3w SRxsNtBS8g֕#R.axagA|&ˆbj1?/l&RPSo0Q-6v-bټ+Bs6uc;?ٗ$v[rT vxal =711cB;lMEGbˊD8<`C$ۻgw+|9fܡ^㵄阏ٓPL7qG~a f |K{M+OL9XwĩwU啕 "ey]͜a>I0, "΍h^6&u䙘gP{>M3C71x WsԿvqZaRu_*֥5o>ry5'Àu12oθO2_?r ަ2?T]d7μ&zxj. nbQǖYw|b+).3GȱpIXۉJD5 é (V/a)7Fcņ5"u,w>¬Z+] $9WLQ8vqb <<Y~$Їg:$/̆x 9{No>aCs< Cbp{N;?q/;,eə?߸f ^ghOwqsᐢqxPھ#idvlï<,.j#}D'9Χ ʆ_HÇ6„ƱkE@[]O_EmDUOԥ>@S_D ҈:Y@oQ訥ST JiMB_SީFQvmTSmjTZA#T/ QDiK UЂ% jETR~>;EP.(@TRPDEED@({)ZV@jj(&)KD5tCd}өKR w@Ҁ=CZ}vapς86Vr#pЂJ3NJ#$ɺͫڍ+~)zVh_kuM6((AK{SJuB&8u?$kQܱgī2NlBq YűiU7n*&KK6_?v).[{w_i gd$Ei&(=Gz>e1!+ f&Ah&hp-fyx6%#DfZ9nO ݪֱˈ%2~08dȦ bmbJpM4"AըXxe1c%c8UI\vbq2X4 iï/(szu87p0yKKBsj<.g&/6$|e+bPT(#zC.eL7g2j hǕq [tYȯ]'4Oyk{܌!AH&Xa'cBKKKI˶ZR^PCZ }4+üXɸD Ot'J|nIĆ8Aš9򢊟y;W rBj[.b9mxExQ6 . :6+Kܴz1?x#b5-3  [?A IKb2St!^jap! A^qi?y8|9!h-?{`6 1/ٲ&;g q!>Y|I{۫J~. yT@5< \} -fJyׄO8&C iѠTT_[RD*jJtEm'3`l6<& #r7: kT@/K ʠֵK U zWTu&RKR{%R[^c=JP 씢w@e4VE @;m,9Cꭐ*Y6/맹 #EBB(O{z BZ [z od4҉袂tJT(}j5(tJ5DJS;]hh]tq'c<˗ }dsҖM]@F28wZ+tó}˟ }k]\d]C~.tv#J럌˟ }Gw}˟ }Gb=kT]wýr˟`}Wb**Gι.vu`}sB#g=˟ }dpϹtHicBPn#.\i(;S޺G{?Z@I s\?RTv kEEW]lE\;\i'_?Xi؍vJUuO~ְ>~28u.~]KQ)QE:?ZJ~28w.{Xic5]sý?s˔:H;P 2xw.~IAD.xês˟`} #_?Xi?<;}?ZH;OM\I.~'[gAت74뿌ְ>҇<;?ZH;UuO_eְ>ҿS˟`}z.xÿss\k b+럌|˃jIi˟`}T]súPOOe֐>ǥ? '_?Xi8v?OM+럌.~'uXic4]sês<:?ZH;PuĎk˟`}IXic5R \d\k''w~˟`}l]oê_?eְ>~28wO.~v:Tꔠҋ~2xw.~+T~˗`}ܢ럌.~ÿsu+E;?ZI_։~ˮ$p\k)A;]l'z/Hi_O`}UiMJmrXi_Oe֐>} l'[gO?E}˧j@H;*Ю?ܻA~e֐>CTҺ#.HϹvHibV#ϙw.~v*PUM#ܺ~o2Hiain1y.~cyZ@H;vJnW\cp]} }Oyj̻A??o%ҟo%Q`TַA.[I36 o%ɾ4Ao_'36.[IkemF2~#s_̹k%~#s`忤K&7N(1>fKSI/+l-$Y7Os]*rdiOfl?did肴s^ȹoefyrKfUF2#seo%~#3arg{Ҫu͕eI͟3%K&HݕxL%~#sY̖_,:h4A.[I5ɒKGS[x)O\iOnk-$Y6Eꃲ e ͚#%I3%K&JA2[Yٯ._Ij&1>fKI/p;5̖_,͍5FK9/SdGr_,',\i3g̹o%ɨq|B/ֱc75˖_'76mid/fk-$O^k&KI/OX)[1忤I2忤K'vJ cFϙrK?-_$Y=NzPTfl%I/5EI/N^a 2J~#3_̹o%u1~#s]?o%~#s_̹o%Tc35r\i3gk%N135.[I\id=B aFf\i?\id,/fk,Iׯ.[Iwܚ{o%~#3fȹo%6P1-$Ofl-$Yܦ@(jz({.Y5Mm(.ޕTMH /K.uVA;& J )ꕥD UT* P (VVPKJr R A[qij`Pj=wR,U֩MrtB:#[ ZNPAاTPZhuWQTME(){!zZk]T[_܂znSTd@*ҁFCJX Q+mT"&'^J V5BUB &WlAu+^)[Z #D$-(MZŬ7AEH?B4Arjz]JطS]U 4A J jQ@Ȯ*-RK EvPDMnA*wMA}/D!;Aܔm(ʚXTԿz"FnO}rJK"骤n'@/Jd[%RktB*(lR&AoMZ@%)rU)]_XPX"l7J`]-JWRꃍ;TJ%VtPWtlOpW+)) cFfSדq'>>WhpO,tciYv~7ec5pn8 +`X0u4m| FDn]2n3{ 2J$ PR`I!5$_TWd\ #=' F|NB {^sXP {%%"OGf3쵀TL78qq1nasf76(=\7Nig8cĩihX?:^j\R:TiZ`@ MxxqWml7 k$[6鉈!6Vn%U-MLgn.p1Ips&ƥnq WcthAxy^e|TOM2kKj܅ P+j/UlxϜ~V8cZ\XIZU2g8,xB5/a.̊0oJڟSDW}t^%;` o/ $69p#$8 fbQYm#tJ{Dt CJ!iY?qPQ.^kht}VlJ GzЧK%P@RNTJKԥ4/KVj.@iEtߺ%HUF u+j`VNqjA: P%(.n6Z *iZ 몗ܦ;@ДJu JjStN@:҂Mi@ҡPST(5{v^V >}Od 4KddkUPZM5R~kpZRT $vA7oJ-+zh44*m5~diUACK齓m,)4T4 UJVRoa[@]P D@,)POz)BRA խlvJڟRAZA~A$F0V$FT 4H gN,f]Hl6Gk^ Geι7 x |DdW5|4Ђ4rJ's9LoM9U78+N#dyy蘌4 6(%`{"A݊)$"G5 ++컮Kw ܟĈ绚$X\nl; cr!Lc2&adǗ%MZ6ur$JrVf2C q_Ru:Sm\V:˧al Ka8d%%!6 Mьh7k֢NMhWM vRPi((S'SU:)ODJZMRkARވmKֈ4)hhNHuګU 6Mt@oZRmB KK0hBSUjtADo6+Q)ZZnl=*Ct$TYD(odޅKt@'JtA h%AD։N"J+ruSDS 6Or tAmjjYJ@uzn*zhFKJ_D!P,RtM/A WSj( psٿ"SV, Q5)D (PUb*jCꃎD)T@Q'uCkɵPӠ@( MznMd)I@Qᇰe Z{2NMfy9$aCx A}D5C} P,7M RWT J&{%*mmJꛊ%t TZ t@lCS=ַO"^jZMA@4w*JZAmP:h FފR%yC)[a@,B7bHZX^+Av!:Y)D,P:%蝔 _pM4S_BWAҨz֢vJSMSAsD -]Z҉j]HA}\lDZQkj&@wJ )PY-UЅ idUSOz d ڴJ%] A)Zmޔu4N$6Cz4@$RC} +* WJ"T*+\(F!- QK@Dht@JDvz*!ݢjn qE+rJ^MwQZꁲ\T)NP=vVUZ)t:)j/rdMERSSSr @Vh U+tU=ʒz}IKtA5%VZk@M>NAF}v*P@D;([҈tʎ{ SSjuV TRZj@+MP-j+n ۭʃBA%.Cxw)]*+46)m@l:,^{kCRE-[GT[t;Zz%:?_ZuAM5 TR4@: ]RKДRi[C?ؠkН(PMTmR%4@Oz)`PZu*]A}aB/5?$ sn@ ؠ&sz*uCމPD BRHMPwT6֩5*=J %ͪED$B V%/ DB[T:]JXX4ZmTu P JY: 66VuJ c[- [~+A;eESuuAۢP&҈5Rd}4 M6A;jQkDؠv+O^J\5ZN4ҥ PMkD*)knNPBܡDPy]naGYm@R4A#tuZ!DUd wP Np+]M((we Ϣ„ mCe ҥRV%(mWlSCuC}[TT.ꀧuF uRA{))}TЂU4RګJtJ}T EP^-p Cb\nEXX dD=SAW'` 7DK+zU?ک^!;QR*@'Tt ,RJnDRӾTZPPJiTZ]ԲoQ Kt* (DmA:ЄCDՠ@~'T A胨Jv@6(UM; tJlM.{Srj:+@((F4ޡIA+r \'Z@!AjTީsz}*h ,'[)EDWjR: V(5OrQ%-]@7'NT}t+oT[ ܝh x4+PT {ŕ覂P]ە.uV)*wM.:CK)Z֊ӢoTT)[l6 $ O/P\(d?R)VªwTYOD Ju})4;>> (6JV}!B MCb:h[((hdoMށJBw&@DMv & J%PNVlC7Kh]T4Cq Gu7Vz)Z-T!CM-N]hzQJtTt*Tүz]4҉~O"jP Q;{}Zz%z J@B tO_+{U=wM}ȁA)RM_▭jR56T~d M+ʋ%n@+{ꦇJ ]RۥԀhCtW`B{AHE>ַ ]C/'m -H z75| ꀐj6A@1]k &' ( º@)jފ[b_[E*z%N5%k蝀PZ(Sܯe 6 t UZJQJ&U/_ EJQ)KnWjQk77@u[((էDvJ'ӲZ@P++KiD(Uz' JPPTznOtRj҂{(nPlNUoJKRR;9K!4@ VMGIe4*)e+ z@յ(!nz֊W&%-d;Rʕ e{POz%TZOMԸۺ ^ATқk^KtP :($@ưU#[&\(3*Kyl%: !>6V7-p=i $og ݃`h?;w( #^~p/@c1C̳Lc7"w4潻_5k?gLc=„)AF(fD19AM={=ddH9`\ bGşX~GD8nÌˁLD#Wd3dYi2cK+rv=*;Za>`hrG{ۖu6)D=#d`5>ViίKL>.7ckdܜE)t7X?/-3l(Gq'2,ߙ]i_ZTv+=zt̜㛏~N#(sb؉Sxs a99Iս'1-<86u>׃ {č8 <&;$v ٤D<#.]{0cl0k G!#S ڟ`i1j,7n3]r<(LGc9EugY1ipzkg}3z[\>rG ϸA+s[mG1AXdGh~a g'a&V]Σ>qſ-z5UH8% =r>KlHMkv8jӽ>4ٳ{|*PB$halOP{:d&%IHb<!,Vu-iz4/ :CYqQc䬘s23ge /Hy9(/,n bC|ii6>1`y-cE`9k|C.HCZk{,'=z=6AR;.H!;S 'h!!94;C[g') K BhK-O`0xD6<Ҷ:UXG{N>xg'um\:{Y{&KȎd6ְC޳Eb!nP+sZ*v" -](Rv)E/K"]ץPEUD(k]{>:U&M6o]Bv5K,M4*wTԮP7ꗥQZ *ڦj(P?NӚUmB4AN)NZ'dWZ%kբmIj Uj4*P삊BjT"1'A>$>q!cbBlGbY᥷V4++@n#ͳ&%qagefDBؤRǴ[W^̏ ]G{~2!„;1ylyt&Ac[ZB03fQ7)C1YGjL<Ժn,\whJ=:<)f~nhGsFE/y4s@Z9hkN:(5(rEhyS[*MJXjmJ 7 ԭM.hI O,|B4cBl@ _zۛґikoWޓ` \I'^/po# >T@S~٬j52bpkQb9ѩ@ZW ؏ Ŭ.g0Gwڠ{-,pX0'P9Ƃ#JJAl2jzMmo4iTaUϠ4ԾpJ9a[So~)rؕl&zu4#ޚ{QhWgjRJ48pz >YX~gA<_ 0z{sCZn\m^ưT?mkS](5mqA[/pV8Qjd77SZQ'hgvXA,k[>i'KG,FQR.G.3?0y 7:qWoUvbbXċ&D]Fmj+ϓmC|%Xe ~a00 ӧdg2cg=JzΩ9&j!&F(j+,*qDhu/\GW \[K[j)|JD}h@\1פu..;֘tr dOˈy\=8!I I.[4iXas(KOu|Zȸ r)XfA /&$H28~[ȹsXaSF}*LD:}_512\g |J.Φf Lle@`DQ~x|'D9G 1Id}m4tA($ wʾxW3cNLA$AXLm-G=êM/=.8vq59HXF^ K"4Q9Ea-кS/f/(qc,{;s6Ob]0:/srVSςY ~dͱ!a{bb=6[[%[oxg,J LGn A <!uax2=.vRs+f3X~3=3R̆ȱHsikƂ涵(sIjޫ|O8xX$d18TY9F s9ZApXg1o"K@Hqm4'0Ȱŧ_N,La_spS84;F;zQ˂wjӮ箟rԼ)kǡ_Jށu+8o!ǩE*o 0L(E".&5:XPr@AFYT@ӺT64M6JmTet(%lDD*](7BJnR]@T֖@ STdJU=Ӻ_ K+@A54 C}hM.Z![J?Ls%Qx'MҸcU ъZCXImNd_Qp?|yR66 jpT|c?«%+X+ Yq)RU=yXrFa tgOE|gbDqsjI&䓺r@`!{W>Lž/D{+JȚ3ܵg)^#< ac kEgǞYG28u{߅Ė$tF;%_WSY\߄ĜA2OΞgC)ݿkD{,[,w…D6%ptw“H|ï.D{G/ze!S|JiͿAT|JsÛ,|,Is*¥S$ptg™Q'<O\Xk8ЏB"/,kd~=_qno.ȼ?SXi1Џ(}9=㏉iEcWY͆|)|bG(d;ˑv+" V7ia|YV{xq ~/%?1=if)q^'d܌;IK7xZrгidF1!ܥӨ+8&]4-S5sa|QZ̷֙Hzv,(Fs^Mkr1g S1u(vJ1s U70Ü1!:$W=~MrcuDcyMSBY`1$ s";2ڃ]#q. ckO⋖VxӘ|C M˅RiSUKj񦜗$͞sO1)5,SiИ ˰D9֏RH]닙6Mχ~dwseh|C}%3%f4i X%,2#D"])r1s]) 6{- 6M7L)t<#A:fn+ CtG;r%a<>\IߛcO(u)-3Cmo~@Н:|&PRI4TuX8D'jZ sO}phlIvks@bP~sF4Vˈ͗i{qw,'ki%#CqGC/p)w&F\[⭏9Fu/u hEGԶP݊⼎pw6!#&:\1dy:!$6_\rq9N,y<-y$ܚWM0ǚ i&l*wUט:h".#B(fU:Vܫ3ٳ lO2nf쇸mTo1XZrZ+ g2Is Jna8fG90aÛbCFkK.[kRJsQr>,Ĝ.[4f٨8.1Gk `4JYNr[T[$#Clh%06+РM#bG #O3~PqV/|Z ȁ|\0W*W| a9D GsHlN7mpyXL0tvsQiVIC :SOUu83P|&Ɠc7kbe٦ս-AE&̜ʑ<1 1ؓ|0={ :wYpHY ދ<#OJ0J9qs9Gebʼn%籅쫨 ݹ}ϬxUaف47',h\6 x' x1 p7݈t1PO?H8PKMN3&|~28FB+fE&yc@G,(%WV]8"-|W<cSϞ|`p{9{%ŧp6 ҰBW34sЁ'!M68>$+Lbq1tgqs}I^3v75+ /IbYG7.-t6W2o=={W_Ǔxe3&d KKJˈ\| n \Hw$xqO z-&MYΈ֊FMyV*88V'r+11bl8Fpm5И}N'[~y'g:k3Oʼnp|Ɉ7vA}=^ű.e <7O xc`>d&b\Ѳ<8LOpYRrAr{ I.v^ԸX%mhUx|WC 8Wqn̋&<ȍh%a[oېx ]JNrø~~&1oj]l`C4ֶy;X,s6'W]LD[O,cc/k':9j˕  Ey(d5Ƿ}5&j>~pyK_ޫ{^ tﴑ7?AEÆ ,9d˘TUo/(\p$ňʗCl3.B0KFkm?/#ww]KʱfK7!f"G5^5V2pe$|F٨âClכ "[wkio7_2Gak^#sd܆[kMV(Ll{1扨С֠>_OBt w_S/zi78Z@AJkn%/r;o;)JzfˠCB|NMLI4>^l7}~J@KEMyfe 5ҠUc-RSpH"F;#Yl:(jڀǛ-6^Dp[]{2^!JZ-1ܥÙ6PCl:69?s31  3 q,IP$`j1@`ִUr1|eѢhH{ج?m,./Od6웓 >v󍾢+߄S8<+N\/ҏSop6γ@f0\Bz a ńSҡoZ> 5_Lp!ܷwXIsBi&b!cy+֚-dS!  D7rye5NlhPmF~h(7q#5vE>XںRu.kph=Kpx5^HԔi?BvM%螩~ oU7VJ?)mZ܉翭m4Bp|p. V,? :!8xi[Q "h(KZ@r6aؗRqZ7L|l֍[Z~/ $\!:?|y9F7usmE+H\?C#rl~O$?\ƙ[lG6c.qqysJv%y9,ci|])nnc0Z:|9`dW -$?˿DֺŠ)V#J ")mZ].{e_ȃ>j쮈4G[NUэ.q'.f|"-8D.vA!hН^SJ/yBs_8Ph ňCV6e "he)檲\lk.J•kBB^_&qϛC%|a.ӑIKWF:U{Sr/sV%!2֛Naab4GCc[B\OnJ|Y1-kh#iyЦ`Okϔm+]@D$U`̇+4b5 =Fq 8CMm"Ip"Ęyt(,< j9o곉AؠENDb$6goH%!w5iZ3k0F@k!"GZւI=˂ʈЈ.O=#|]xn4ںQ|=뚊]庀U1wDdBr5\_hP8N@EaUVE]kvYCb^w c;ʀ*Ksײxx"==t=ÆtܴiDѮQ{.'d&0oa쾛,f=09 ǚllux0<M ~7URa>͇|8bR19I\/pNs06e)ag'-xX`ð<I/@슀.=vX0%#rm@>7 c='?)p %n˖)˸Izv1,;V˙_6Ņ91-I+yInƕ]=CXJͻW>bba {4y8Čr V3KVwŧ2#1Fy˙CqbCs ,ppظ}^1n+f#D)LY5#1̗KjڎPܯWƲntAQq]7!V.yda9:,j;5NAD w؄Yow j^JІ|)*[~fDYXYD 9f,ĈÄя! 4ƓG-CT49C<; sD\/+`sZhzN`{/B(yiрFsx-5b\5؝{=^ (3%(!LDZCyh v98C'5{?WStkoJ{؏Mb,?UUFUrzoO޾@O0ɤo1u=*'1 F̉G4v4?EZX%9hl_--vI:/H.At\'0B(XN#EB>/cX)>>VVdHQ\rjkR+d씻Zw?1xֻER>់.ϲn(Em6hpEA*7\njGzO&FmY{7cP]>b1lo819y>!b:atCd#6; Pւ5 AŎ-ŦC&- #j|;NěZ'F54y_f!&-)762hMӰu\RvDbP! b1p9S~[8ŗ2,]'.͜e.0>3F3'K2LXhy[ZaE?g^l %8m3Į!I@x,!2hO/4"o G 18 c00.SS+`(O`y&W:q<hU42qN*,4y.?6V,YP bh=G4ҵ'O\|1\CȒN%/b96B\ֽWDOY|פkSَ}_gxcK3g N(^&$cKp&C2i Fsˊ?honpžt| <gwiwU2%-EF J6!IA:C~$lq^W8=+Jizup88.ܺL? 9#ND-XlcD3f[8Q['as.s~Q"hvW`^%M4|ZNHM$8j#֘t>Ӗiuk|c84uļ u_1PWJƙ9̱ 獋[|uܽk]l˚6!ޫ62x G4_X : U$7DcM4Zlft3tSAb\fD8e࿢efa6 u]*F+0} [̅4XPY h;T dVZhg- K49cmEesje~*KvXq5u5_&;Q}~[S 4ɪ#L1 ;++M0:eQo-Hnas8-.YvC%+-#՘|R?H?HE%f0u++95tSUʹs0|%Bk*!DEyc(lUL C5GI[* ;1"CP{ZZTڎ Ŝ+925=w:,4\N:"M͠5[BVF-I^$rg59b ~@jҮDu~l %F(Miӗdxra1As lVǚC5T8Ɔh,@'sr |1oWPWtދmY',bC<)!}v^Ql_ψX1W]9 )BhI3(G9;e*`8q\'KNA i`ܦ#1?LѰwsaM,ę5iwan舯O7Ol"Lʹ/g;u+ ğ@|xcF |JH -cLСē Ӻy? rz 5ړl8{Lg3ds_ YڈF=WK50a(֍,/s,b;ڃv(>kXhvÛ^V|mٰ"6(hs"X)st,nw+`|ə@Kodtf"v>ɸp˙j83?.`?KJbv y)1,>&PEk(;\=/!̯*JU7Dծ]wy&"8cD3{<\[bz+c ~zqO[qhb{B~AG/ÌNÛpր pj|{Ý,7`ƒ!yc>PhEJаرsf`XCnpy- b9 M qG\k~sN'2Xa,itH֎=A'q\2$vwP^MשI`pgs4\nfYeL8`C}m4ҵګg/d(0T -5˧^$Hd8nsU@t2ZӲ#$x!~W3ac$0/k_ZQyX$H4Fj =7SsaЁp"[q5n]^uՀYB,I~ l>,7چiz_CJo]?|7G%n`Zhk]W4!rIQa;6d5.#Oa' C9H8f?+τH.(һxxtݟT#<]g |g'6J,Gp26 ,ӄbr8%7*XtgX O_MvAn07hЍJ/Ӭ`x<GrA#ZE4ŗ?{⭛>$EsYbF hqv5kMɠ' yGxq;ᯋO)r !9p|GփHV؍|>".&+8Fű%9 (.sdi6 Cp"LcZʙJ e,# V8o,À5AXZןϳv5~ݙd6lsf&aDVe k #n#ű|XR$&bCl`Ʊkֆa.sl Ə 1+rTsbBGYncM\i:~;K '8Rכ}z>Q2'~8933dGf)"Hs*39^ãPFe 4(`$Ġ7ͮŇeWe|&3P@ ^e|n+``r9 ^R?.G#Oi&xS[n;K} '垿#p|\ʲq" dw4T\j/R]_؛!@AtPMj+)l.Ƹҽrzr^.qsZ\U̹az> Acq^nJf``cģ/5$(M,kȁw(JRdXɖAc &%HQpinY٘1/(0 xiq ALBm_s &_LcIk:lL>6)6 F/{-]i3ٗVX+G%$EWu`q)I XytXhpՙq3XP18}=JVdBZZNƗ ˩b+3oy 'l<(Q`>(&"phsSN_Lx.L\gZLjIv`V|cp?8)&d^fBxst!~.qc.cYSs<9n489tp?W7"|æ"?ۈ긞uͷtIنy{ROdҴ"8Se{Rvy  -ԲLJs1b0.4v@ "7X}L^~CãKV{9c|hP%ˑΥ^= iKE^T%3b1k +R"NxlNjާf 2$x!:4E\qgCb"PhK{eͻy̘VSLҼF[83$,e]Ez/43 b[{{%rXg00%$Ggam/Ub4jf,kVpEAx/~>aC0\؏k("z]v-C3g㬬|)73 j+]˜4VcDV:KHE9( :$gNX`.2 LbS `8M#yq+bt)dP9=>2rtV̱ƆySC&:=6e2YPjw\^%LՀDt04kt]$y8asNeXm"Frv]3`{P~b|Vmßzxė8.|7C{I@#֚-\C݂K;$h @?tw3Y&BYJo)"mК{G׮|Wą ʕiky}=ބ蒸asZ\yaͱ`Ha>iq:-$s<֟z.Ole_3KIt's3uo'Lihf,#+'x72JbFk m4Yao|!Kgƍ ,e`2(CueQZZ ]z UxDMf"}Ϡgq3ˌbZ9kPv+G4>{!?G>8an|ZӖmBP?9pC0µߝE>8]NXN:ܘgL?`Ƙ&G0DZ /Fi4@kMZ.N%0LE|#Ƙ@f7L脊,@(']}V˒ñ b8p l(0Ju9@Ap8n0٣… P.f 1)y-N@``|ǹƮ>ܛSE\0F!bP3Vm<唒,4;Zhޣ~"1Vfg)- TBkY4dO-inHQ":!<˄y*w1MDpQM׊+31<&Ƙ9z(4:jy)U)Ơ>#U~e幹9tc \c]8fq{N\/Yӳ3 5a͌6W z_Ux?˸#s,yKث1Z# d!G3 kdR$8\Ud3+QWNv~$3'/LbMkE#6.kiTk[u=XpraϼLY.dF\sR`^C[/t_GZͧ9{^A-i)nZsZDV\Ý'`vR Zɩ/h&±tnu3*~Wv]#@QَG+NE&\*z[Q4|ܣ9l:`G q"5`k qS5{P(hkwth}isZ%AGu mZ(L\GUھ)!u%/עaF+ҮRܓ:n9.GU4|m\DtF=_x8Xl_׍kjvsGy!Vd̺-3 Ul>I"W3MH˙D׽5#bAZW<@#\^J ̔xms\ʈ֤,'el`pJMydP)k>ݛ9kUhoˡHB.ȡ#{w|.OJZ``qvJ-Q$>(W%XN s4='.ɘ_ ! 츊;%Y<&k_΋zUIxXzOװ<&>eƒ"5tX[аa҄oiZ,7!⒑DcJ`bDjV,fOsę`4LUsIcOJWv&: &07.w0`:j IwL긓򪻮c [ɐ!6 ' tõ(8F,㼸>c FٿzM98b@[V$.@Xܤ&燰g=Y'ͯ()G~%؈mLsG_ _?g:8 +[ ?[Y8 yA4V"JpGD4Jg+GXE6ƣXV#$ ),]ƭ?Hb *g1iYw9zҫ$`8(lX2[ ÞzKi62l|&&[9?: (OpcSޫ1)@Iw-b4JGC\%ɹ4{hW89Zg(/2z#Nƌr89:+[VԞ吸bc8\ڴE(1~f_[k|j=%abrS'D,m 5$R1˧V+rLvlFx:ZW %iH$(p\t$qoųDf%8͈\Ўj=L;`0͵㞸w feѡ@IO2 חqkҵ鰧l3Qh`])f8f9 ,&kj/%Oc >RZ$r4mia{/[/ 1Hϕ`OI4>W2eM\֟'C 3Mr$0p#t^;! b.ef3XmhImZ:<7p_$\ T̏[w\Fl8hb;hҠ-ktp8t楖:mkzit~.V7Knapa~[/($yF$#4|Z0./:jv)F7$GͺYcM+ԁH$_#EkA K} v]ϊ?zΤ6˰qWIK08T:N‹>~_}v-sӖ3bB(ײLN`ᐡ HD}=t$CMM:]n%'$ⲁ1)axY#s<ٍ%5,CHZiuTYkr|XĔa+ 6Xcqw;:~Z;iIvLJ$k[ k N&)_>T2@twD.+Ӡˏ ؞ `‹|R[c<0sƆD:Ze~)wz~R3/3 U9)mtun09p_ isA7$F^랢JeIo-(jtl52ܾ%cAjƬpBͲCd{svz3 p{1LIPM|к@\|3r؀5n+XV/ pYL fb0"M=.; sa3\e18si7`@ ϛyFvIONFBD{Mz$#"NjvEЌk-z}kKFXes]hIJ+8yN_f1hԂd|WrJ޳-6sWx#+P/]BGJf1 :(ܮp? 8 Vw Iĺ#02g6Ic $e.Zn=W94f']9V1#Ƌ B@2nbx4lq$X̖ܲ"$.J ZcLjخٞfDNHa')Az^u𵉾5ˏm%c l d <61;u{wHup"f0s?]@&1z׽N#G2kW%L6BP={˞G+CXjKY"fָvoevEmc\x`&YvEr',2G 6wZל}+xnfka_Y+~HV ďaCJ ګbRP-XU.5>^ Kcǩ8}&p9YX,o4@\G# @ jo bb 0C_q6=h fifNP\H&6 u^?yX. /p-og_yLk]1R&;Cܠi869c.M6]ڑ/Gʹ+;ƢY}L+tx䷞fY r2=߲Np.ls|89g"5EĆ e"L2$O"G<5 40v[&KZ3#‰HÐ(jW#+1`m-;-4ppQ:zϓwocE?2n$2yAwZp}%KɾcC|G[bҴEe'mZ!Cm _WP5^Y6|l`%jZP.1cslm|2[v|,q9d sz.œiN&|psC:Uu Gal7r3/~ jhU+:a 4`sZH"yd꾭C,XWK\.|t@p/e2D$]!|/DZdJ .zt| yPH9o o3h㛙 B$s8 ˅T3v\sFlt'pxYFs3 $ck޺ccLaÝOUI4ZbBs^[D(1b24C]r:&Y\D&\rl%>H-7[|sn[uӖY(PX.t1^Sޅz&'%+ذe`x/!wqbB d8э}oUj3/z!D=MW&|C6Fc؃] ?-,!ClHH(듘*twD/>P4.$pXv%F~YC~%e|ܹ ]0?uywȓÃeao-\w{MW,f#+a' G) "./BC􀷘Ig^. wsaٷomq `O >HbF@,}Yz_ vDnf!Lp]$ o.KׂgUkl$!IB\:Kn tm!{RZy6[޶44gRx<Ō jyG_r\PWi~/?79)qe>SEBf HuRaV"ģN4jv_.Vzف7s@I=޺-:Lm>|6;/!ď0V9R _M\ɿBK h d&g9J]]jV3$J["JblAӈֆv m p8!ru,/ѣ}9ն\}=r.zv`>G¤"NE  iW\ lXѐgx¦B-ͧP rڎ.lW F/+Llg@})QI0Ʋ73W>Z a4i3qe"HⰈ TR*rrЦybs2_KM=/ ۈdH>0mXM?G)#9|j)wMry4KPeX]@׸Y=Xv%b_LXG+CGmIXő/ %_R}W!W t08 Ejy_C輳׼ː#-`0R `oFó63%!e_5k^ܳȖc9P jXX mb0%yHcdۛm8OTF0S*~g s?1Y+b! GA8Dl&Uac˔kC]Kl96Z8Ppx_ vpatNng^;eĆ곯m1n9?dlklR@  o n>{̬sit-K6J</2tsM4Go!r &sƎ 3y,˘2wկ7t=03X|[%6 I/PH\xɛep<Bab3㓜d\z҆zOx;`li!<)t1 /4 ѻjhj>G9b[.s.0aG!潵R,h.)嶜~'bwWelfPg K.L`.WD+4Iο/cZvIx8,"LC$Ty[m{-LR4RbGpd|N*}W2r%H\F"rWCZtaQ#$f_K<qQ!D#\ACuƵoemN H+!־4GҮ Q]&:8šeu{қV/>2ͧ~~^w0)̶[D_ vf 5pȄځfSG8%A2qGR9 [= uāeLK {jpSJaSWE𱪼>>w#q= i^2Q#ŝ}-h@8SX-6e9b?۝=M ?1i'G!ѱ[J[41I/!75/% ִh:U89019|XQKh!D:]H~`X, RZIrIďNZFu-Q{sԄ9,n)@<od+U'<#yΞ|gC匳3F5͈N׺죚  ON_'̗l XnPW$F6dsa3_'7ʼnejC]Mx32ɘ$;Xr7vKE3YiGڷBlWst<-[IyY#Dkr?C.鿌fwM_ܼcNcnLr c`U;Z.g&!f\+d4fdԱ:|?g';-'<sbhC RyN7=&W!Yfń^- ].,V)9Ff3-8AV͋JV~x 7svvŸXf*9Zo>pkf#|gGFleZՅo~IKHǗn^}%# 2zPsŋX:_SܸOd;0f>Vo =)ֹKb8v[/Ɓa2XTFC!- ]qk@ƗS$Ϳ^bM̛,ǒ z;[O4wy:0n}s^q sM v4'޶pp}q)+z4FBo%$I*!puN~Lt|u[wp _hq?y 5kM*׋P»c4Ov-ʱ'5nb[g(8ǝ!!˱~/6; u c0d90akr.t6SK3a`reĝ5\i:wr޽X쵍bL8qX٘5^*OZ@՞irs&prnnGx]rsڔ̥W jo}[5mbޫVCU0T d$Hnh<6)!peD4_7^hRUL '\궓PKCl1\M Lx@%ϲԼ(/楥b0Z"Lay7.72= j4l9Idf7E8[Blk/E8 ~=d|]VPj҈rsLeY Ct,h+i`XAXKqgb9 -O  S 丕qasaB|!BӫP|öiyù>`V/<7Z㳯d| fx&`II,Xg؍_Z 2vS1HQb:'5-min58#,s[ HhuH߲U<ʼn+u0S7I8s8Bia.fMJ8A7үb.x?xΡ'_nI杻q?+ L%q5] >),|;+/WMgfJ< yWd.A-ҁyA]b#*5'н Qߣ88xn̔]z[xsB8nӚ!ָDb4Н)jw9V8ҟRݷ;{'30rŭjhJJ15䙫4 OC_q̃z{& A-[}ЉdA]Ch?Ыa.t H,=z~W Q\Hhpp rFWo`vI֣i؆򫥥~n] m$79݇Ae=|UR&epqdZ캏+OqwcDcejM:exgd[9hN}Ѥp80g Co JڣUX|8XG(<$NKi^WLQeu,58:y -7Yþ )tFIe1!8riSuYG+H1I h|Fi7,2o|> 9k c[pe̼Ts]"ϖִ{6HteČ͖t rqX+aŽp 9zoZd^-f죇AÙ09hb J@C7S2s?bb K!9ĵ=+brq[/Å~{y]K5ֺ[z/6,挳,FyreIs a,B'n% f6RΑ* "+rmQ_rD)V5lܼtwj YYw2cF]AѵpM=?ࣃSQ?7]_#KrM}TiQZDpό9\\ 0֔+~ew.w2F01euWW`t8m?] t3Q[Q>M+I͸TL! 0ȰhH!sɨxI1s4 ~4$'&ysu.nۯ 3,q zot?kb8ז:y|K4uXeHn#C MGѢKK_ J, W bևW-pwQcAk{SAYsP|2mE[P7"aX_)K6;\n4 y,3ve04Um"kُX>Mq36@0AsйiW \ZR/ E06ޢy`)f:hSMѢJex^pƂ7,v7p*׷46Efӻyvyf_b1$X!<my&\#@l C!;Cǡ+gk)gi0#4:@+D6 #rb5'J}Keъܹ|>$G7"ᐲ|Q&Z\RYgR4'8x|٥|]G$9%pk.ZLM! ${Lřlf^F1ߑzi#MX\Ѯ s+h؁xlW8R疎e糺co<9)05ߛW3ejۋKѱhgaq\? ģBֹ\|M#4˞ȐEjf!W<^OXɾ"_⭅LdHl|&ݱmEYJ$lr{-;G>EEUeEųSYt,K &;Tr>Ⰸ&[sco SyO2c Ê?sBcn@m u)Rtrğ|i #NPȡ|za9*6 M,sG y ii3!C"$3 !ķ^Y<;L9&s2Nj_h3W_Ovcq|oke36"ʘ:w bNC&("֮ܚԚs X#Oċ>%˜,s5{!uA&<>\Wɒnȍ Nj3Ԇ4aY I݊28 |lH`Ύۚ!QMLӖahEU'?p\2M h  ,ymǎbgI)'1Ϳ8i9&kZu4Od,4p\P2nIZ#(E.j88r}I;9!IX(\+=@䶼~oE2^ݣfyW)5b#W&r3Z&e+jV,Yy9G|Q_P"āKǃKk#WmKrwO&I2$eO+K`[JOĒ %;*bVs!lp9p\i#fG..3=n]Ͻ\Y#q[M#ao|ih`!ǖ$Rm)ea70~_jΜny[ sd[|a)dQOERuR@|W9brOrCnh+ȸAdq4/-փeYɒ,9'ZZVK $@8pLOwJBӢ4&bP<\VJgC,Vf,ьfьbq1R6SjַWb B ฬĜ/0!xq'Q<4K;qgTN$oh}H;VY<1c ebX|(x"\M\ע,c31cLĉ+˜ܛ.7hr^MɇAWC{ߓoiB@-5*C\Z)PjN`s*ki_޹ܶ6"!BtRDU\ @2o، rխ?E>LNNF%"8^>Z~sv-?l@9>ơϯ7~?/fl?$QgG>,"Pӕ}KÜGgy 5 n\«\ AX'Y>! 29'7s\E}Wd|P1a0%r`kcLc}yf(˅ᘔ~%? xn] Kb]WD9&6 Q0;D|Z qm ;5b`=~W3+7DAM~,e>jJ_zQ%&\^kVSKc։z|7xΘ0l jh[Y~08)`!gMKl8c\Av;IR2cc5ost2\>aO>ZjDz#S Uw=/.c.bO#pw,ŁKHŅ#^ V+Dt$+#2blGǗl6Ʊ@=k/|h[jR;hXQmϪ^*Y1|PETlPVu[VE^`Bec\|cl7 l \n%IÏZ 9E0^nǃ\YqQcZ3b&)"V `~ff/>P@p6&acD{p5*w@%.{ynB!A-$;g0/flNqY(ppYk j>oE:Dra nh0l2nXBIʉӾ@곗iyKؖDǥbrLD sTXF Ck]8V#LvX|!}$ ߇u%b#(0++<7ט;{ \jf^ބzoYFjLL,Maē%}Ǫճv#d\9 BE `cB`, Hw(ӎ,$pa]DsuRX}oI{_5bl]9sQNuà !4[O0Mb،ip;Xzba!iMmbb4<׋^f;#?HۺsK> h+/ז݅UbFF6rtiGarKD!!AP+mOҴ!h$qU{Ӑ&Hb%V5 KKB+8kCzi_W* cř^XEjm&baOX{M>/i+&5Qqg7мASy"C\ ñdIK6EX apAW4q^i~4) dFA ji]Ļ^+5!yrؖ/`k#Ƀ^3 hZ,g1bͲ(<:DyPD 4 Cfc8x̉8wqyXPq͎:խ=V2N%rIId8r^~ns~'w`Mz9~RNSb.PJҚp!E ZO1uI~aᴪϽޕWx)Ŭ̷fD|qVf4p;X"|G:Ɔ\)AEJE+$|G טWZZhA+IyuBP,N݆ZN+ቖB.~YbWm] 0rQ+ifyhLSM؍$yF2kORVj^2cǽٲ.'0aEKCyh:o|1ga`6fC;<-f}ҰnhC ʎX6ZǕ#ā E1{,.",jvuEk#g;-f|>&*ȮIqeq?܄Fr΃jc|o|̖B6l81'WL\2ZzNDgoUYa1G1cyc[@_{Rؖe>; Ȭb <-#PQ3`Fp HO%ܮfyhmb9׈p9\&bZl8@kO aY| 8.[)XLXIX;`Ϝjad84E|UekGr,lj@c0LMG1b:(.W.GO o7}ˬ|) 6{Q{~0*]1ivZ2p'pa.e2[6dhQ j=]\.q ygzW" N6IcyrȲN{ä_)O)}هŏll'ʩs H9˫ }?:S]˸1iD(ơc-n}VۆR92S57h|MLga5\8HO9~fLc_HЃNeR ֙RI/޺Z5i)(f5ǡt~5x}62Dx{H`jUݡa@2͂b]T\9H$u"/B0ےot <64o0_J~9n ^!=5ȅ i-.yJ[98Į,3]1sSJpj|3\!b8X,}|ҋ;O?WqSxy.b"pz{ a!EXbCA.?np0y6a2=36cZ?snb1Ey~nra)qߧu)rW8t#Q13Ù:FoZPef\~~w;į)q̙O #/&0D1Gsh=9kuqo5&ރ8Uk c@n^k|>LiJ4 ^UR*H+kY-12+`-JNLHlyhP.^Q:3\\Ѐ?DT}*{,m^ OI~L G iģ>9y"PHGha1GνѡFiVRWX<\Ö8S;? ؏t04i6ykɝo G=UЊXֺ޼W/2G`_<<b:[ EJ6>Q1(Ylk8U;11 $6KMM fr{Й0bBx}qñ)lVs{fY iVy3E.zS$fc{%W-DRf^G;I]$)йYn"96$a3qv8R\f988d&Dquf1; KOa r1nZk?c]O eWԺ|F<n10c"_ Rn;_/`vYrNni."ۭ<V: \hAAa6:pw7%-bL0:.èB+#GesGUtAEo]&XV)"†w4].d"k !\F<gfh;4!C#wh/L28L6;b5u]C' KG`jRgmf壹+V1WcɘDىfƗ ͂C'Otyga%_fL曭֓z*9Y|k ɖD\=p%9 ig$8m.c۹'L`{@tOMJ-x 󡳝׵W=f[l|xf3] r|qL%?azYKb7j@aC)ÛeefܿV)IK:"5 ]mwy_x=aF,Hp^$ -PrkC]Wr .#Lюq J\?2C lV--=kM {uHL&7sOKÏa^4!#L#vbÉ/`BM5XfarSc;4h"687H^S3G_wX.t4h.-.`->. *ii! 7.s S/#m _& /I2*]OuK@s`jPW8-Q!-ƈb\uAuk}J辖{$-O!-I|sjLWc\dǴculHa8ܾ"6uEmQU`nj;  RIZ,&uF{ # H `'̈~{ty]z:n |9 ,{7y:`s1ߔ_YLR [cQG {tpb/ q[ alO`Zmݬeʽv[އ8{SRVVa ;/.WAT PuR>.=TN[c>yEuZ6A胰س/sט^sKbAx 8DSUpa6"]&cÜd:P;k^=aя,GIvO|‘t8umIwz8N/)hs,amΠ-Rsp&;b5Q"bj%pL2aj~;ܬcyjM6 |v~R=as+t$aEsϾV=E8}S19VX<-czs V#ۨeuܽP`ᯛuk!yTPFb9E'PE!g%-Ͽ{w:keř2nlI[5]6ċdZq0`w x={Wr\z78 ËJy}R9i( ŐXƲ\e uYFmF@ *dRlHdO/Errv B!+i_T䮙"Z1/g,Q+;>G\f#_?bb<1-!<3%vrr['٧57'Ĝ!|>ÜF' :bÈ+@?4ݵq]v9? p'!yXe_ KÓ\۟|7-}?&Bp1&wPXRV~`(k9LJ0;~^aAuj̔9Ix!bÈ1 88PBHwнGwK]p4a9pC_"raJ aR F69mS_X>#kau7ѥI=kO0x#n9.~O 5(-hs5$颐>r5hmŞ'tV;j&P67*i;SFޫMǝ x tѣn.~KW0Lfz ,Kn( Lb^ ?&twV{]RښVKuW >#==HȾfY2nzcǍL)_v]W+ap#~<i.qWSa60:uyyɯzC6t/bn:\Bcb49p"Dip&yl ŐU.xeW+bq8Qג@h_޶2 i$VX͙G#4:sx$HsSMh|\$1U`0D* 7ݵ[؇uY=lK$dk4Zҫ^~JHlBCy,WfQmeBX;qX|͗)_}PZM6 eclgRy°B7/m\4;Z:YpUf<1# ![3XG-+l1Ѫ:1OsB \6W s4a$9I ⅔hcì-+XqS8t(‰a Ӷ6s'"w:P4[6Da92nfC)5)#Ȑ97!_x_eb`:up6Vqjth`4軦_ldIo:zcٖe,?XXv<|J,P)zvB- JxJazR@8:4'(#9>YKjL5#rs'+2يzy;.eǁ跓kG7OFDz3#ŒF ^|H6ݩҖZz5^#pGr22Q4Hq#5ÄX-qƚr \'œLٕx!bX|lvF+1p`55y 7BuZ 4M(EPPRwPEZ+7Djp4[9ґyD- ײڸPhNM2:2o1/8_bR uOƜNܗjh_bsp!z 9y<􈝽>9ܱMGty.NM>i?6Y 6ZᲑ]>^X>+9jvq-#ZOE%-uty.2k*`V츱hjkMisrХg$a5Yͧ[k$T@$G*Mوn/ :ld`Rk0۴DbLԄ Yc=X^.1,q o1:{ 湻Ur_Jzs _i{K13'F~dXråS, ,u ]X74%p4tiJ4ŇPHz\&ח/aE9H;X,):iWeX0&$,ß\&3ω7K8:_Uek~W#xve姠t\־+|v9p*@:4Jj +C FL?Ήw{MN&ur2|~mƬ-Jz.$Y0AǞq 6`sy61$9 hdlyGvwqiW2yJ-İL:ۛ&5'j{%?CY'?x3x`hq 2 ./q"hXks>2j$g {ny]N+3"♗3f Vb6" e}xV=eߓLϓ,WEy7"Un}(ܦ;d?2bJehoh!{nPң٪Zf,7A%@KXVO r|=93%:2,7yu.EXzrF>Xn郇4M?N*熂֎]rf#+0R&Dt0Gj XnQ xfq. 3lXFnk[վ.ɨ" CkQR9bئ}+g hDnGa ;af4KCGD,`a#V!K'Eg-kn%bniUW1_0-u-Jz6z!F!(b`DƄ*fP3Ţ^cL;93ʰ c(s >=ov;A5Cvt.ۯ֮&d>`*9spK 70Xرy!k@Qu!1> xv,8gĞJKcPeFjYqbE<7XY;|1erK|E1%Ly#,I, g]EY-?c^^Ɲ3¦ yme!Ë 1k$/&zT@rwxD'ICt(p-#!s Vw<5bxlx҃ 5c\WU:s>r< 1墐6? 20kE[ZyΞ?LcÇdHWgp ?K@oCȍ|&´WkKjΙcŸ l&g.?fFMGc"5ˋy"F濑mhil5)b,CF‡蝹A./O|H,C|(3n_k6pɈ1<QȭXey嘬,W®a>$A, k#a$hsIakԴ;ס7kw ̳Y™p!rG|[ ,0w#YA'⋎xg 8i f9ύ@&nM2cD-#+kFEsľD)>.f Wc8x#"I, aN@9 FpiÏ{{żIp'ôL%qVby!@@C `sLiW菌%xY Cq {i2l]3Oxps n|e0YH;iy q}M>4r.x~O<bL3999WBYr~e [|?>H|!6 V7 '-ϸ0GB1]3i/Ӹ 9HL|)a)4xq" rsXr+[G-0? s EF{,}b8f+#; 3M 4PjvW1۝=g&Ҽ |?--')$0: KNaNu bMwO`iޑ~ Np:XNǐcֺ$)#C6CH^)dįUMⷓ*Ztá IsKo-9SYąYÍ|w!['7<ʹ\Ԯ^tXRa|io;W=1g2Zm|3bfeFŐtgi͂f;ƈG*g34.a#~P7p1] ub&{'q2 jE1.>cv:]!SBۯh0$Q-KӲѕ)Zv~x3'!FKU)s^{gxls!ʹw%=X:<שxk|"FA&ö\?Ʀ+59M8K|JSqq5R_&+{b5.'Ŋlj2{ e/P}MרX_*bTFB%1";(TppjɎaaה- aLܵˏ0b4V .yQՠ L/UM֗mA-CSu[n072=H-RzyLV;h'a SpL8/kN-=Ix&<,6,].eظ( OhY¦ٗf]Arx1so@r> HXQsv#1hW s-MŸ17B(|֍w6῁e`0v ?-<0 ^b-of[#)[4_yzIgиZ# GE!QMPh]E)͒YY{0rN'+"i9XBUE~ &"c;cK1taPRSJy4^K߁q%ZsKOtd:f77-t]s 8$g3YHr:f%;ψb^`k:X3{Fy:T*Q2D(5UM%`\3O4xCq `Vip,L8FL .h{ $ֈYGe#k򎋂oaP>%9:.JZQi #\s}t_6eH1\J5.b{I'aw /~5Mܶ )駼 yt> `1 Jc$W Ya/)娸7 Z ї|XqCDmXĆ1QbhC.n M aȐjDw}ov+;'3?xexi'×drxiØ`b7ʉ1Xm@`Evơ ۺVZy)P+Hu 0Hq)9?ly~aX:iۖ;!*..hX6SBkP u :+$JetOu_cJ RBU(IP@ViKI۴(? N`a[\/C Y0é^9!2Is0 %e]1 ؃vK0$`yIUƉ Nu[l'ձ~Sz\46ǁ4!,"6|Nk ytא\/]IHO@UIMA%c:>;#-h5 XOc{21Yyw3{]ى(Q[o(^4t+elFYD<ߓv7{\#Ńp [Dc\/.E1ؑn\d47ppJΥ-&"Åq4 KćK5p`i+w`ƚIv;_XhbC2ϻo6ebq00,<Რ)F5|Ɉ)y5̚ N112Ŋkz Rt)49įNu[oU(K[hh}VҺԫ!5h;\tZBd`V]WZdGf+5poWˮZ wAZ*,7Zg ic0е45#iZ.XVl Dfw9E2UNONDdXV!. =6`{bOw(عQwнsð(#qr*YDmOK/7.>[L?Cg??%|XTϤ7Kcdd—|3,"1neca4S@;.s9] 9!{1YR Hա>dP`&{y3F)0 6BӏrtFʘ3,- ]XYi\K(tZ[ C< aāHbr+ⲍsF1Z&u:tVhՆ|/vګU^-M v!^H XQS̾04sP..4uvRՈf˝o7%GʆZ-lIj[>ao1`n¥W4e}c8"Č^=vney/2j"ǸrqNn7ӒX\K\5kqz& *Z;ɷ5U[i\͍`4Jx˘^/"Ɍ,ÊÛL,.Ts{OX=5@C> 2w)|Bġ,M0 !rĞrl(kJ;xkq~%ODcM`]Nb'hq`wy+xCœ$`\-rMƱ/Ä FEh1{Ѧ2|10|\$\?66JtX;AY JuF̺׍zW-c656+-ɠX[{YbB?5EK 31faGs4im9nÓp~Y.3q8S*݊yG ?ɿ/s39;-`3pq$Xy&a5$~| %y6a&Y$8tNj l(ns sI{_…Sg=F+)q.߂|-8OH.77l%`gģB&9qroÜ.q V9."1Yp<2#H|j$@nB@iA5 X'y_.&3_qB+L//<2o;M~ȏT]y9/ѿsxdM)}/B.a=1}*PYO]f\'Gf]L˭4xFf|˵q)E v_.S\y:|Oe28fKS?՗;)M$缯$C||aw&kT=q9O. ?ϐ=ewt잾| Rk-%&q xѭS1(k9L _-1!5$I5^Ջ_O:e<ܡ'p\ áOq?ʬg9#a[ΉrvTۘVEp!C"EHQ[5  :>/:3Ǩ81wH`pz4&!k\@ t>8kDLVT𬱄3 3Κ-kI44ef8屄K-ySqS+T]!5^#̽1.@Z%(1% yNghuMSxyi'{*`B\<3ҚĊQlgM6]S9w,`OXN?3<02_~`XG9x Nܠ: r51p31gl B\+p}MJԬ^-8S3[Œfl?_fylqi}nV$NbT/QԴtWrGT:-'R"jWlt*.WJaP]R;-)eNΎN&(ą^;.5r4.?)Ϻ>}bI|h`)4ߟKuIE)Xc+ 6!A1<濪 FR[Ğ5Dg4T.!{h} uJ[on{/_B 컓3d,:F&6N=/m@_H ^pn3-Z̻CԇC0]KŠ ͣ"Wsws<xs\*(]Rٹhx^! buiPrx7a"9h.w+-< ' 2('h)6Ka/kA+8NH,7g19I v^38g4 Q:8pEy{$H5]ÚE(y.u]ʦ˲'pm_?rCÆTTS~(tXEKU? [SG|^(M<2o;Q~Sl~87qDs [TW~()ut 7Sc|(EI2?EO"o;Q~փE(I6?↶1ӿ×Oy=-Ev?:o<2yQOxe_Ej %{&4tg<2/;QzC3|A圯3>B|G{8kXyNM{^5.b,;6 -3ݑ#97Ḝט6ŭt1OO8l/.6 gׁ8o0Pzjd7 O;10.|y 0ĜWy\>EM>|.~9Y##ġ<"Tr+j-Jv.Hq\OL5R:Ek[`blj56Di[ [rQu P|hwZMTړBZ']օJ \wZoZR(Z&@EP nVist]=BvTFj&)j K!;U)r/T P=S}!TBD(V c.!sy8YX4<Zi+zn+ysY{.R^rJ'դq ->K#W̸l'.dBꢧUQ :C+ި.*i:H7EVDлHkYi] J?g  x'zf//D,l.߻n^ٹWs #i/2Z|6k],V CX.J^JG2̉wopL30e""F))>Lo?DOL tC8q*^,R^#]QkbB $U0ábu9xpb~D` BJ5[vKiY毪p|o8n 1c1`?P+i  u^x} )9hma&G _*JZ*k챡 v}PBRtW_ Pַ@ %Oҟ56PAUD-d-[}&hMҚTSSJPu#M *5+*]Ԣ:+] {HM7 SMBYʇmЀE Ҫһ җTnAE”Z{vicDԥnitVRBnnYS{(!К ' B :-=,z_u-Uk{e:PY[N5uOKTVįC>>p.bdf̩).D_ !sTV sv+7,Ro KLC$HqkQcB ClF9„u S=Y!5+5eS[ɨ[-XZzf)vX)^ȈQ EF7CSwAa^ޡҡ6)jj VZ`TD@U"EvD58.#wkO<@FavǀEz-|%Nv;Fc\i[.ZIxls5,~fr]  {,VLWˊW5t`5mO *( Hpϲtrsp'o/'?곳S\ƥ豈Q3^4fFyNˇ8lyB4q罴ht7PV]#p?qv)ͅi]/C#C/RF7ks. Q` 31DlLg=ƀ}%~,CxIbn=!,kqc+]4oe Cil۟'و,t8MVØKTll&4Pn<|^^|nUI9i4J[EUdM* 4VZz~U}ɶ) R Sz _t:lXkPJ ɺ }TN=B Uu@hAT}ؠޥ 7K\nOrjI{e-_v ^Zj]O[*MRNN[RnFvЄ'N* Y( SD kRJ^V֢vR+tPNW8^ bRrSA*A+ozhf>e\$961Aj B~!|b+|*B,V4QjMy+ܬBtP~j'9ϋfP>$fs`kbf(q `̷B y,\q"fS 'ptwj(|_d:?آ ;ȟ|(u~~R%SOǸ͸|'!cDު)~:bW.?_SD3F}J??)?j''%8cDRAN"|Q>+3LѨ|bC1F}ؖ+ZP~;b_>?OSC*KvJX u?\1}bcc<q>~đ{-J uķ{1F}b[tf?O_BKiTُؖ7Cgɏ7N&8c?ƹcOz#C>LѸ|Lu9QWNiȟ~8`9O)rR~}la>y9v(wThkN䯹œ1L 券=,-)v|l{b♏0F7`Bi:֚JVD: KUܭE(mV4Tw@; tAdu( ^tQ jTKhPiB޽@ȥTd:TtJXw@DJVK U*zQP.*l~D#5 Ʃs`z)KUZڥD(u {Ҕk M@Vڠ}UW(Yh@5SuHJu)}h E~D_UNjS{=ԛVP;M~҉ڵ@MuPZ (Eʝ ARԢ")S]U=T$H;!DD^!z'T M)+D잊%@*ju)mOUo QJj:-4CAtT(!]J(~ ^/We)T6 VmJuRTE SkAJE6BST@־RUDUMWB]ԥ: SStT(PE 5#܂BRȅ+蚢Z{EJiZT UQ h,Tޠַ@ETA}MR6DRYK%ֲokD K֨PJnv-pB t@T44Q)K[R:N!?zw@~[SKJ D7)tA-U45Z(J BMhlJ\NSz+R@.DWR=~nmJhVn&@6)zRT {u@%)BlZkj[TEOEm]粴S.)]=U)[6 ER%4Jot{:]SB@A -[TlT )DJ,@M҃Nnn^麕;R@kT܄V*v %jƝQD5J쁵itVXB+QMPZ D;MMu@dTQKl MZC/5"!{[l(P+]dRE ^u잨PZMzvK&+_UlPz%샡@Dעu(CMtA}BQA^K)\  S+E 'DU5)ShWQ*E5T SJ֪RڗSjD4ԁB앰@Sޕڊ@&?yOrjP 6NTJ zP(!AjZ t@4JhzRT/DB ֯U@4@6,RN%6OD聽hȦt:%)(*(n T]iTuMRPVqTE5V6:+eA..v@=JSQb 螨J\Oo +(v iZYJ+tv Oަ\6:#(y ,4@ڪPJ* S hnUNEԭAm)Pɺ_۪Tk**MA ^57K=KKhB!JZCU/,M R@Ԡ~N D+]CDk]nOdpCZQU=GDujjB=P W{^䱾+d@ꧮʊthR6BN@pꝐ={ɥKzmJT)[&ڠ;RKH=PAkj%@]NJ^jB B,5CMMmEj;UMm] ꝪRuSjmmSQVӘ [T>ˆDP 6Pnz)m.:j PR4Kj!$!6+P$iuPHp]V5@O܁Nʍ)E/NOD mjn@%+t$PMT.jA ]/T4tzT5;+NOd4/DP" RJWO܀ڈ:ktT[D z{Rie(* }RJd4ԩMh P(6!=A{*Nh!;)qdz {SDTQVWV]SDArJ CPM/z @쯦'n5P)@QdPJmUku@ zmhO܁^vAEmZDjBA4T=U+K)}IT@hWWzAGDVhC)PSܕ@o4C蔵BUABRs~P ڪt}!B/ڍ" rmPdY[j mʔޞs~eCKuC`T }Rn+D TNTA~+T-z ;&=Ӫ;%YBjmD@]:6AD@ު+`PRVmjjTSO=t_u,B( U+@N֊j4J D D%BzWkU k@@@#TJ T(MB4vT%,@:X )Cj'peK%4T8 ]N+ӥ)nSZPVe6.*WM 5'mu}lT=Bi}SJ%-&@KFWڂe7T: K*l(lOT 6F!֔* uPet;%T TewYC lV]EETjHV  e"] VB1`" " EBSnd@z-TTJlh{"t@DJ@T&v tPeC{@D %o/T!SV =POvU T-[7TdtM6PPj+!J=R]%覨M`BhjTaAmKQJ + q즻)Vw袺~nh(^ZZ%U,NCoM)K6@ju+ j+BJwnm@U)m@t$PCҩTR&TզA ډs\} (NGE@鰨ZAVIt[쁷t*ӺhBTMZS}!1 vB<, 7A+[VlRJl;BwCs@R?A j(M4 PM@IРB=tW%JZhJu@U7J['jhd@=S(z TNPTP_Rz kd:%;'M^OTU' mzQ)t%{]AB@ڔ*Pnt ,e :dJ4(-D vCCeO܇T tM.j4@J&twJu ֩]E}B}B/T5@ATڈX}P*d)@:)KSM*eGu= RQ@k@RD;]]!"6! n~ަKӮ%wVɹRr +[RPdkM)SVk+ w!繰[F WM=KU^;&饐Z)CRAJ졮OzuwDiKWT }iMR)[%4+t7 _BNiU7Jި-z%= uCZ>ЩKj,ꥺ T@/JT%5J{Ө_+KCP&ꕿRK"P W)M?kdJꟼWod'K}+{i]ЦV&*DR:(:nkClOr TTw)TM.7) Д>. ɵt )d TD)R)4JU; oZK CZ'oehtAhUR][,ktܕ*w)7A+w[uM'+MRZCA!hQ` -ZUN(MNDDѾ4)k@M}ShԔ (QJ@T(@dd5)b[nCumJ&z(n!;T W!ZSU7M]/=t!_ujj@}@JY_rloPu@MP_rR"zJBRdVJ7AE=tT(ZeMɺB kCQj;/t(%KS^JR@,MPSM4AAJ.胺^BBPQSE)@ ^JiOM+N % U t@d5Sj(Tɨ54T6R)TK[b*\8e!y4 hQ @E4Ԡ4CTAkjQ=6Dn " ^Z)[MnU4jPwAwPdN6K@Mu(MT*ou7SUBTDzRuItN ꒧ZީEh7RQ9hj5M KMT=Uhj%T }BM]PTk +E7O}ܔnJ]ZAOrT뺊tjh (SMҊ,BAjԦɮ]Bt R-IOJOD*5#d({ SmNz[QTۺv)t>%ACCA( 씶zԠTMUo@QSd{h h)~ɾtnPJ'b@z'MOE ۪(eJ-V@BTAnJnQTPK} mSu+nYC]7ZkE4@5.PCtNm{%~6VR OD4 ]dRz;]NTltKmBETMt@V^ ҇e}-dTm@ץMtNTM/cRײ*'KhS] wKuBknoU;Q5(ukT4CPSޚ\TЁSlOPlbeA=N?i@UCAw@=U ( }TQEzr&TBR*d&VP@u67-QJ׺ 6CU,l UZzi5AwJSMK+j*/ީJDh5k ܠBr[a UM҄ߢ4 W@+T(jMR(M4QTZT:ԕ5AwT"Sat 7, QC*]6[D얭4=TYUoE PU. 5: 7 A,u-BJ>hPBhRDh/%:)]=(5e=P )RjUUCD 5 mmPT4JUD=uSQmZUMtAr.EwB@RTT[UAO)C)J߲ lP]ej=P5:KWM@BoPdVlkpV%juPT(+AuSd JmSt.w@Uާt(qt5md=. (,zh(AkjU BoPjt&@+qPlVp[5@ rhAd@JCp$u*6MMODRD&("^Z!j%&d+_ܚn%ST벂UjU j'EM4h*vAoEw R/ԡ/衲]'CaPVuEMCk )T[Yڨ/j)V!K ֈT=Sc@]n- lبj D*OS+j)dB QSBUKb4Oz[t@iP(T ke=*u) ԃ^*vM,P(]KӥTKSU5DUz.A]R}jBjSt%SK 6Azu&YZ [^+Ԡz[Q tADv)k-CB4Oz.ÇjEέl-6JY;tt B7K VJ"NQDDR/} N&KnP4'AS~tM>5RTC܃TE[_. ܠކ%>:Ҩܧdt)]҄ %K&AGTVJ )q]*B R)(ZA)*t*NMP=Uj'D$肨.i:d Qe+mPkd 5VkZ uTE{U_mSU ]*+ae+tꕠ@5U{d }J nQE)kn6Ժ TꗥBm.MJotu tBEhP\6@U)M j]Qs]N.(:-[ނU;Pd(Z(5Æ^jtQ@mKUmQ,PRJjJhT+7@tuKҩRA;+r*%7)z_T* MTꛪ&Q+UoTk 5US@4+MoD: RTzu :7}AB-rRK"_rY l-e6 K5齐}C ({M7CP\\kN6Qꁲ5Cܠ PT P 5Ct[覷[Tt]@KJN5սP X]BoTq[AT zNJ(kt(P*+RD^VP;Se)SU$zK! zȨ7J)pY) RT Tب*Uߪ[5@uVlXԋj뭕D +QZDA*]ԯP&5P}@ HUm]N)(@T*uO#d5@>J]RC*J%E5*P5t@@lI ֗C}ܠh)^QDqPERmT)AznډrT5^7W@ޡ )̗[_B(^@%NJ&*hkRKtڛ vZuWDD5։U+PRmuKVOUkt聪 ZZT jR  U 5 QABi@ Uۺ }Jid _,iZ%{@{RUE :*@4ZiSj,B()D{[ꢵR+UA,z})Z6T)$HS[%:Q M=K&ڠZ])znT (MD쪕ꈤmU)RDTz*4PKod4 R;)-Z4 KJMަ "^)MD(M ӢKDBʑbh*P !ꂩT)(R*)ID]TВATQMRݑ4 *j^ NR CE@JZhܠZ 5֩Nl)T4'U}Hj۪zAJ+77@#~kUiPӪ"SSjS@DԄz)[U {T jwkRu v)})T &TC]4V iTt @ЂPN骈{ie.}ꦨ)TT)QD (n4@5:^SSOz#wMۢ}h4NҊ J)D*#MJR[]+}MStT{)ꁭҔꛡ@ժ+ib@Ҕꠚ+TŠ z[JjSЫju6VCN¨OT{ tT[*htBmS*liU5n;Z QM.BjZN@"iM(UWM=zhU D&Oz)s}D AVĩ5JBJ}hAa(+KQ*z MRStdbЧj VUMM+tQlwX WK(K \TiłHoT"dctM)+MP*z*@މK])T]7=juO)MP7֪hNܥt[( vKD"CDuRMR ST/^J/^P,?RPK  EAMl4M}R{)J hTꦾ jTRJ WTƩ!XJTz%{%6ҕ@%?r!4ER)ThdMwA_TQ]Tځ D څ* T)5ꦡ;tM. ukOZ"ҩZ)D:+dKTP7KtR] )`d5M@GD$&K@ZS. ROr!5@u4SKl VPҚ6܂ҶhUOrSEN߹ijРު%:'٪z*(҂!Ԕ4ԧ EjB֪P 6DT"(z+dM uSCQTBm ҴN-ԶD("P/eI5SUA/+`*5D&_J)P BU;iCP=nJGRJjjtJP=J )WܞP.ZBd7ST+=P҈Y.SV; XNUmKhMU=M6DPAv/En@l+tZ 46V&&CХuA+zh=i\肓 VwD)VCҥiDZM讨O P5VVu;JY @許P JTT;Yd SZM4M5AvBoU+(jZl⃲Ot@=)BSPB(-@~nAZjj W6M.7z&*JElB Z_ z mk&AOJ!JJ{JvJD OE}_TN:T 쮔S@E+k][ިXM+@骶*U)PDM {j:)_ tRN%Oүbz u*[}vJnRotRO.OPE tMPWTzU*l@)Bm(=SJU jj(6@J[Kjr/j%i_B+M%)T #B[RB5CS膟P;7Cz![:r p)tuTVJZ4QeK&}iE[E?ޮ@vJ ӱK@7Mꦛ-@TR!(H4TꞨД7-JOD胢]4StU)ꃪ*:PSuDmrjPD]EEE=":!KTSK/e %(z]J_z StD읐%z(E-]SjSj/PҪwB҉%z% KK@% tM ծ'+t$ ҄kV-TԊm]CBhij %kSB kd (wkT+D V R''dJ )^JV7:oUJ &=T@J}Sޝ PJtNP~WMtP@W]SD@WZ)r[A](J bЁ-mP45MVjiumptD@]AY+R)]D%J;+k(NP ^@JOr IK!KhP=~AN{-TM(DD7mE}ڨEJ+*PCЂNCz 4T=ZSK҉[V=i`tS@C@JPjY7j[(tC KUֺ)qoD BJ; P l mROwP !](j%)v j $wT&En7(7O܄nM h~{&HJ!/D Vo,SSS&* ľ-d *ROD{T od `57 QZ%-ZҊiuPZ)P!D T$!$ ֡AӢIԥ\ށl6MPCPGrY6"o^ԝTOZPjlvKޔ@7!AT+KNS.u7T5 E7*솆AAhZkENJVWZ]CNBޚ7^+vCkMT֨OTQMTTdQ*G ܦOJ* P+]Zt[K }hjkw(T5UJ n (&C[=B@U*TQ骷Z}SBM.*PKl~?U@d6 DVTjPdChQ`ST ,'OަN UE jRRAK_w$S.臭W"K6[z AMvQ hE+ d@ ZlK()@4Bzԥ6_wҔJ*w N/iJբ tM)DJ6[T:!B 5J T@MIJZuWK7NU*k%tM V{ kPnjVRkSDZ6Or"}QԥcPIJ +T tRSMnDE(MҨQKrhDRjꀠo`jSd;%(UKrz {(z]4KSAJIJҴNP()S*zJnB~䲁mvOrvR*jYJt@MT藢oB䶩o_[Ki )~47AwSD"Dj[*n)SuWe4A{l@D)AOUEuYQ(kR({ FR_Tt{ T uO*ROD =U=V(7Jz!U 肅M$+Ψ@إ@ҁt:% =SkBiN)עۥK:QQqCD:&ʠju> e}SRA }U)M= VSVUDYVT hjKؠSu+rAA.?z}U@FB ~R)ˆR/UZj4Aո$][JAH[StKjނ+D4*SV]AeA}\Sm۪ ZnE=KbFʏJ)z!BKdT:(eu6SAtDR=ӽEQV5(h{(.JֶRҪDY(4@ti`RAt=rVB`R襊@P%Њ%A {*4ԡD"mD&+AQBRCDt^tlPnUMO)OyAPR= ^)UZSAZ҈ 6Ꝕ߽[ w)57`(N JoEkj.}PU W 魑E6V7CbҨQPAJST JDQB-T)dT&-^ P]Z)zꞩQi[U@;JC꠩nVD]P=}uU()zꦊ}iP 6Z]KE:i߲VT!Ʃ}JdMBl@?J[E4}܈%5*`ZP\v'Tk`ƥSmktW[ljz(Rաqb [hj*)Ueid vSV(+P:%ij+p-R!.=Q=ʗVQ`d U6j(lP(+CMTײ( PSҠ괍m*ֈ-I5Km}P/R)*PTDz++ZuҩjSBudP{ h͔)d-/dAAR)A..եTT]RRDT,5THjv7A:!;M/uM)]5@ku(/PS P:]Ab]i@:u=Q#d}U4K YOޮ^@ɵPRAZk -RCR5P)zJtDSkܠ _T(J+Rꥻ*HMM;e-ܢP*w ҷ@{%*}PKWКYQ-B}ިJ(,U@興M4J"&%?zMt4?@@kbJ\SDklT{ E=P{YZ Y6MRZRhR TGBuWt .ZǢm!DM%M4)z\Ϣ*#uA ֚A`vA+QjnwCХ;nTAUA?z}CK TВ.}ADކ;+d@j]J@iK!jT_dZ{tvMQJD/D$+6B@%6(RkꮥJ_TZۢکM*ktM#US`d[h~+Atk/@;!e*:J*ܠZZ^Qd]SUA4@ Mԭ n蚠V"t%OkK B벞jNk^)鮈"ozt e5J%NZDD6 A,5K -jP ]NTߢDD肂KQMPvT@%, ^hwJډ[Spܩu-D$Ӣn ]SС܄)7) Fފ6ȩ޿NTTnZ+_B^Wd%D쀉ZlMk m+ASlSp J^'S*Mh w)@M,Z'@;jB:EtOuԩ7@D4&KV VJ T&Jz( +R=`h=aR ةVMz) +Z쮪u]tAЦ@J )Bz%kj _J%M.C=PBUJopz]uk()/Ej+ꂇt7 P ځ@~䩧Wޔ5Eu@ԪKh'rA )]JFQ;tC։l.B($jQjn뺀QSN^zvJRKn=b@: D=}UCP[iXmT!]\\R'j(7֊K+ZQ}SޮMQ &%Pz{җUD%7J*C z}TT kd}iJhD@SWmJ h.APK JSA A쮢%ThZJjDCMzꍔPt )[EMW Nru@zJ+z6@PK^AnPOT z]JSe 蛠[rT],4@ ƉSDu)%DZhMY.Z X}kM6N^}Szd]%uSz&tD,JWY^ȩ_+_K/ %\YC{j%l J KkB6PZVA,R )ThVC {mnj [t&+Z܁bPjjT@EmN iuEnI)T4hd@]@:'TT@꟩B(,'5Biz)UhGT>ײ O}P5T£D@'M.kOЕBjhh ,@(;jkh  Z:!GE S ,$lֵMJP4:&DP բ֢("J"=@@)ZtJ_ek)DRh UT]lu5@lRDjJЕU=ATMhrw*hCuwPވ!kSUh5Rި (4{B~GU=)dAHEQ SRJDP۪TkD56NPY!)AU+Z SR6MP]PJbMBnzOT57(5nWDE JYJYU5P*E-B"ɲ5ŦdȜPQMvJ JXNM ,5() kD+Svd= K%U*:%o@?RU+[DPT4"%N}(AOtCt4WnVTVT; )$ _Q)K+Q 5'jMJSiT>B{daDY)צB@ԦWoOoE+&W@*0"5AN)ib΁Z^馊 Szjm QEBKDʝ;Cz)ڨj-t^(V%Ӣj%V'Tڈ!TZ=NW©v]m=hhd)BhDt:7JDE-J w -CRzPj$|}iR MJz -!ҋs mtT8TFZ!bMӺh*wR5)U)]ҀN} QS(U,ޠ:QZډKYԅ䡲6TK5% ==P]56B,JکҵWSi[S{Л聭ŔޅS{[i^%>Y%@;zp(k-A%7BYĨUH%6ޖD~ꓺYBܩoEHim,@Ђ[@ND*h*AꡮSDWA [T5  ]M)蕶kh5*i[JjRJ@RPު֖U?rhT'5 |҈UKZ\zi t ^qdt@5J(5@kI5Z)M4+T PҨhWbM=P|JkT*ndDT ik[rjADnP-,x}YRU =4Vյk7QR!MJ E -6@4S@Rz%Y7JWt) *&%@SJz~T=U }Pz'D Pj&M얭KouvWRkn%ǽ)T6@PJ)[UM @)OzoDU54!6@E{U+E;A+].z=z*hTCZoJSթ&iuAimjh"J@t>T YAЅj QPUkM*D *)@5TZh_b}.VRiBT4EQMj}կДk cKZPQ) l]#SRDAunity-scope-mediascanner-0.2+14.04.20140404/data/mediascanner-video-screenshot.jpg0000644000015301777760000024614412317535203030214 0ustar pbusernogroup00000000000000JFIFHHC       C "  r    !1AQaq"V2S #BR36FUbru$%&478CEcsv5TWdDet'GXHf =!1&AQcd"2Raq#$3BCr ?T /9r>1.E< quuXdC\_>S]dRTtf(x[/T.|x :8b(jJ9 n&ʙ"lrgA%aHQfȘeO QYgכ0 {uYPOꇡevCe?<,Ü%qgy>2~H.TqÓH'͋8g Qyq܈qI~ji,L-v!T~/_pG.#"(lDAA*?E ۢ2T1seCXb VZ ȠCEjJ-h(*jHId{)i&t$̇X&@az\ɱr8&,A AAɋtQkH0 x}Ξ+1:3c8TCB/99gv1f]_YY4͎) v /x'߯t3&R8 1IW$DaJZ*r#:LF BFOyރ2ؽT&C v2aML~<ƛT嬩y.l?ri冂D >vY1q#5;+aj Ft2e.9g-ʟư3<#ë%TdU6"`/Q0Faqksl2#?q6wbj2nD%3 v#U6  X,a??0g C3<9;2?5tْml?Nca$qxu/n5U|;6e *8UD """D^ط|=xgc2eZ(.*ltS`FtUQp6DT_(~0C|lpcVEOG q  eWsx/>:>`y+:p"20DbeA ͊#0946+<gaEFG'+GMMl`a.]t8׈f<_ H`" >!xX~,DCr<^9ĢgGQp3 `'.fg|O(c>xd,;/`1:*9L4NA7 ds%x&^G u|&yxʌb#1AKr52l| 0jyX_D==,^/+|$㧅!ex(ru,]4iN KC @F $l\USxfPi4=4Ȅ`>| 4D[/`¡$WWh$p惔| X`&d1CV*yKIyb?Nnx͌`G ̖=I2\Z: 0݋Eٝ%$c ť)U Eq.1nP /NxE|AmPc5"9ҌfI2 4b!k{-5Ğ +:Epk_b(5p~&.n߅6jpNDTi 00B@#r쀈= Sc|E%ReS2P ^i"H}Hx䲆C:kX1`$y"!50ƈwp8 (˚'>C>?~Hx] qaxs+^_I&K>9N0gJIyZL!#ucC&88j?2`m>A(18k&(ca xy 3 scuRț: qII}AcQ z&N[2gb>woa36Už KΕ28Y* a@DL{W B K:WMmx,i2^p|.p~+VJlمԕ\x1痨\;8I:'1QMxGa:z|1k1"gaӃ$Q$Q=r1)]͕LTS"9p*1epF .lΫp6lGQA E%E۳73G+Kq.d"OEѢ\4R/IMG*l2'F̌@!~_3f185$췕1 Y.)`6%/쯋9"Hr?ssd9+x<8'x9JTGQx^ O9ygG[?.b "D|ΜtC9yZVRxdTς\̧Y"D13& X0:N8ꯆVm,K)32ɂ80b #+af+2F%ImD!FCrOc|3_| )̊UMk#䤑<̨s2ߙY1N?ebfW"`q)" b:z x(OA E-dSC.|Fg$0X,e 1EI%y~Nq8n1,>2!6|.LirH6Y2Xv%aN] VvV91M .E<-!-g,żyND3d3j#1A#}ҥ fv͜<4%cXF-H"h;A 0ɖr.9x3P{xe]9" &{Z ^XY_w_njː65O .n&tB(eLOǎ%?s&J(O=EKi o4 7 'ܷO>C0V|8 WJ#";dQyGb&;+Tq23y¯=gZ58lΙ&D2a"\~, a '(2 . d LO3 c,ݢ1GC'4!12**3rȎG<䓺9@6xG?k%g)phAMAE $zAxip1:/-Y\5x`|NLɇ⟵y %<\74R73LL"X|SpGLgIp榊-DNx?w ?I+s\< `ƩjbdQiE2+|Hbh5{suq#le*T.G6aS^b.ן5x;vdpM=~6!OL"A yXqW2ǎ*ܥ uU܁:0`)g;w τq%>d rJ` Zs ދ~v/=csٹojȎ(9[ upqۂ9/2S36PiR̓ 6>qzY?G 0<&jCS&L E]2쿲Wȥ CSɊ*V>_,-><-e?򇹳^zflr9A. ?d&V5W$^S?J9#dGw3|枺P:^F?} VRLfXgeTr\LD^.5Tx-b&Px8ý*yOsrs3ݝ"so3 `?(ΪfԈ$Nt\O.bbs8+:F/i)`\ 1D!14 9yR Ɍy X axW~G$Cu0h'B&" &3,^_8x(̛K&?spVGA,Ppv^n=O drr`̦.Oq@@' `26e4zJ }?KS I_bo~U ٲa Lib({8::|JqK3(`K}DDsE Ȗ;K}k/l ⓇT#.8`y^K\^8185J6D'IA%1 ЬQ _S5YbQQb㫬/!mIXXn-q 9$ͧd&@AP$7C#.pWŋel2*k>,J/s;RD`ؐLŤDDA< TC3ñؠ6;+ܕ|ߒ(B{DNi%*p\B/G290GADN,*ۊ{Ծrp{wOxLc-`:|ܜKʆd蟐@ܳ#b |X8ςd> [R*=2PI($s^|@d RļY΢ 0Ni,?g:0H1 DaG |)xJ0^(6pؕa0`Jd(.6< Q҇ZkgWs5N!ܭR)`9&/&T??g7)1zFG[PA; M2t`LG1>(#kDY_q:I5>t<#ں>ᘬcPSDcZ#"#P yR?gndqL6)QCσKq{SG8?3^)&9&fL:9:笓A&:J(`ܘ/?Nx}3Ƿ ۉ8Knx(GRaTYx&J'"dDŽٓ,8Vc9+Ll)r /HUO%^sE e>+:3.d̈'[+'%\:SuE&El#T&& LB) %k::y% R#G # P} K_çYly;J`O qDd:|~*2dsE6lqGdQ$I+|@7,i(0ܿKP\",!j_jM^[U 6IQTbSb 4gŀ0=p/qK8i)pTO.]<6d03uU׼=| C.tSK3!9)I{`Incx1\ئA[Y +*9s sD?+ E&ɀpk6Nisff=;1s ʝQy2Ā 7Q{GjsG?i)aL Fa$8`Ksw>a`9g2q~A(!ñH0ikL\L0qB9%蛼2`N| 7:oƱLwԼGbyrH` N/+_3G~̹v)gA!E/LJb:jDH cŞ?y0 2n)aӧ$?s.[o cF|'ϘO0x<:L31J" b( X؃u0;ٟ+48|2*X"DrCb"${g}pW )~7+ӥ{d04$[[蘎Ҿ}>85D*O>E|X|[:潧F8oO_u [eW]k~s1o >}>x%UzߑG*N>k|(8oOOF[ߑ':W_ާX|Y5>|x7'ާnj#X}^oȣ_ާw_ާX|Y5>x7'ާnj#X}]gȣ_ި|/p1(Wu3{O_3cIq?4zJ?9U|/2:潧ŸF8oO_uOKQ{_ާX|Y5>x7'ާnj#X}+#u+'_gާXY5>|x7'ާnj#X}WOȈs>  uza}gS|״Cq?4z3cIc |Y8/>:Φyii>>DEgާ_;gYu3{O3cIq?4z/>>  Yu3{O3cIq?4z8&/>> uza}gS<״Aq?4z3cIc$#gާ_""γS>g>}> YXGxs:潧F8oO_w $>:ϽNx>k| 8oOOF:ϽPxXKuza}gS<״Cq?4z3cIc7`:ϽOZ"/>:Φyii>>g~},p'|uz?9}uL^nj#X}|x7'ޯ~>>  uza}gS<״Cq?4z3cIc;䈾s,p'AγS>g~}>8AγS:ϽN>k|!8oOOF{|WXWȈs:潧F8oO_w  ouz:ϽN>k|!8oOOFw:ϽW:ϽN>k|!8oOOFwI?9}G~s:潧F8oO_w~ < gޠ:Φyii>>_DEgާX|Y5>x7'ާnj#X}XV YYOȃgާX|Y5>|x7'ާnj#X}|,p+l~s> < uza}gS<״Eq?4z3cIcC\~s> < ~s:潧/F8oO_w~  uz?9}uL^nj#X}|x7'ޯGuzo_ާX|Y5>|x7'ާnj#X}ZS~sIγS^o},+D_9av\:Φyii>>x7'ާnj#X}YN|YYQ#>:Φii>>xH:ϽN>g|"8oOOFw|YXS9:ϽN>k|"8oOOFsuz|?9}uM^nj#X}|x7'ޯ:S:ϽNx>g|#8oOOFs':ϽOD:|潧?F8oO_w> \ ~s-p)$Yu3{O3cIq?4z|x"/>|:N>k|"9qi—So __wOk~s> \ ~s:}?F)~>\f~psIίSD_9uS|״v\=?eO4Cs{&`pt(`5=EGUBlwѿ*:ECbn lf)sX-ĩ8nn".5 >̅-zAvuhgb P#5 ; ?_u<[TdMQƺ Q)fB7@MKZDS@:_d ꡸Wd1,.r6ASk(B[qm: HtnmBwB*_Vt YKԄ!Akf**AӢ `~7:\)O= #YMEhU8P Ȩv ޥuM,(% gp쁺[E6Wn?:nhM:# W~WD-@k^m]Qڣd͵U߱Pw@ Y:A-^͗2bxO.hD!a/ePu hTꨠq*`17T\ ;U~rtA7bK(ܕYo$ 4A5T u tRneYtإ=MY"la4^/RۢŞ$b5bD8kTL:RV S9d 8uM2\Wv` nz2hV!R~5}BhOM.)c:C!'Ex{8}b8ς`hrlW0|2 JfM*\ $wz>f9d/3M4<ʻC&A# jP@cdܲ͟#(kfR z.%oQo?r e5U>P;2UvGf[:=܂8T}Hۢ|셎_A[t&[dSk :gu@w@uMTۨ{$쮚?DO]wRQAtDPaAC.]@V SwdZiԚACfADd 'C]uAԚO"\Έ#ʣ[fM7Ct'v Erע 3Ў U kkk)h)&VφM=<2dȋa+KJ"ӈrLRI8|מ#_}؆=,DfUVLֈN@e(a-<6c104g짒kB[hI썥(lthtjy7xM*N\th&s9LNxlR1e_z ?AʣImsXmE6 :v'su 1lgz9ؠʇ>^%J!"CAWI2 cŎЂq@64u|}E< *&/?qsbɔ2T?Ÿ≍'* *c\|73Eε7oѣhW~g5~[.˧.X|beX$|Х+s$OWC|QWfys !2@,k1$8axf9_]CN@;^LxPB^qfDtSIr:LXعHzbuXxOIe;l,q#w t% vDA+Qj :^cA̹;+ R$f\hzX~4 `B\m&C/Lՠ#x.E:tK4J3/Ѓ)ihiQSˑO".Tpaep32W#é'DsGb\ɐJɱ(`Ԓ<C˘9"B~!K` ERja$zu-վ8y<8+ dʬ*\L$$Ȭn&<8Vh˞9:Etax|Q|QdU=?a D}Ad)`WL*,Ta3C6vum m,;:5B\A4MRP fmѵM*H":0ka7MP&۠(_eKh t =Cv* AIK*"2_ZT=ՋU_gSvRtw(, MU$jh-3 b\FT8'YX:cd- o k̳ Bc.d,A"&; tdy3ig5dmah=`^cvd)1&&K}cumr];@w읓U{?%/QBwO%/QBl6 ::}̐  Xa40$,MV(x-! MIQD`+Dɵ\Z㜜IU0 7#BA² p 0X)ierC>rkaU]]L5ad K+@7TfwDp,i]YxaIu4UhܔЖ86V?SSN]< IeO.d&8beeXm~`J !xbU.p=}88~@td1g;szoA7ھAXa<'gÿxOIS#e.\qɛ1ˎ PD !jQ ̙2>qfQPPΩyE&"|̢Obe+r<+$ !c׋W,S+ꔃqgQGfJg)o#CQO2ّS[_Ay׆(8s+<[Ι+)AO>8|B!e̙'2USCeC! snz9C^\6K*'`tK˕A %B ʝ1s`d xb.<"3H뜽99K¼"_#~J?r è1ق]=,M IV*X3VbRR5F9#I_ :@۬p3a?AX9\% #ZDR?Ӻ h@-%}NȆ}-\͗Ab=c]~_Or=^U =$)1FOY(;j_^.g3;ep(!K %K B[sͲ?%^+J$aS#AC '*a?L!jFcn?O,B]HߗL>oR>'UI(`&WDcSSLF)GK@߸}c3aYaAQ F*i_R{UPTj} T- WDDPTtdqvdMt t*GeUK8d؂% gF!P]JjCC怃kGVB耎he%ͪʒl :! >[K5F]t>H;08ngjZGn" ρy1dS4b|s)h#G|H^8|!qzң];)~-iRޤ!õ7T!~"XqgoRk(,Y+^&QՉQqh3#,똇n*&S" 2;} ~اȺo|Su5)RH2Uk[\?2S*T5RaˈF@L" <ןZlK(NM4[&o B /vpE\E.hȹPM2agOO ̥0~Ys`, ApUiᑘfXe,Xbyx}qً?ʋ,d,QI2#*3:uKnB7^%E.V7CIϗrL'@I}\yNZ/8R W"rIVb:\"A16f,,;"ɾ.pedz#}~xA w'到Y>*9A0˚ #],Ƹ!~!)ft^Xu hd%̈Uȓ*DziP˕*A @"s9)I?UTҿLę\4#R]˞(9h@2|L|yqB~7[$-Ōz%jrs[P}ϓE?q,iY &tzڹb\2T6mb2x|ME`q<$YOO'1SfJ$y˗ blPLސEdYu\Qv F*\SC;\f"@g%]P]d8,ejr%EM\^>K<.f^5Lq>6a+$NX,9+Pg 9b ?˨nYƜEy|Cl|SM"+d}Pa`_HʓM|^5B DPt拘^.ܹ])YJY 24Yb8`&6"S}G؃xqgQGf~+rܻiC DQ@hayp\Y-ʛ 80A&*cFaUX6-O :qJ.-?Q | ʹ٫X_,MV* oXhI  ~l,SrOx 'f "?ƛ2彠.a{.ц2ŲlgsMT"#բ'(=9aK¼"3O\3ŰZ# `e?V>  < Cy &0C4yInaTݚ0 `N(SBN8 J YV]؞U7%#Ob-eUTMBPd*YUaQ.)Qt~ßO˱ap< C "( ktA\ ĦpUKКIh}<:󅕽*s 8Ԙa8BŊ.?.9J_@fPdž DG2ac.̟/t܃ė Gn׌hrP d*eDI.O+.) gMSygj&LD6hup,bUX.: J9pґ%vۧ/~!1p:<ș0"dÚ8b .H 6=%sqg2M!"j+7՝-2x%6Oo3}ϖ2SOA*}qL&"6ka9,=;Yp ]6lͣ3&k0E/Baz1uY'abQ$@a1DGgߢ  U@B%ܲ޴:ʱ!MG@K'ndK5;dYKoZ !.MD!AHuYS<FF; 櫸M uQ] >Uݕu=hP KA dDܲ9yM6@f꭮;#A 8زR2րaSnH[]/e@OKwCZ+wdo6S 1Yɖ` V ^ ,B_qTF*:JFEm< >W~8\&z,*OɌG(lK vw~i_a0XU%Xm'I7MدփYV16,T 9ph  `ewGpXR!TGIOɔG9ȠBc#GmW르W>PO"ɵ)"+>a֯R4Bv juPB ZL0h>kPK: ؁q5G*bsLK,USMu'̅%փ9s aIX%.OHD QuA°J%SU4жԙW,aD?.AqIpErP A5lȃ[TZ6'WF8HrFL3phf B |W1"Dy~LC" ] D}S ԛ ]7C/@,vUd )B.PF[55'5|ղM)_UԄB= n%wVH h䢂C2DwMQ;]YuĞ._$}2Β>duĞ˯4#`[>ߝd}+#u}8vs\񤏴;:ܹ󤏴mk<;{[i#!?.4v"΂ˮ{p\GTq{ܹ󤏴G.ý2GO|{>u]tu׏8vuϹs#->}˧ZHH;b{p=˿:HI\GPv/0uĎ.|#'G}ˇZHJڲ]Aa{p<˿:HI}˿:HHeج@k O8xuϹwYi=8v̹󤏴Eˮý]GW# ~t]Da ܩUԏvtϹwIi8z"ܹ󤏴r ue7qܸ ud}'vgsYic6C\;\GO||˟:H_dg]s'_/rβ>{p\GEv=,u|?}>uޟsՊH;<;.|#'O_eH;P]ܹ󤏴O_eϝd}tORg:o.|#'O_eϝd} G_eϝd}ޟsYic7.Sexw}˟:hxí\GA؜oie}xvO{>u˟:h;u|>u'_/Β>ǣu||˗Yi8v?Yic{4}\߲β>$󬏴4]s#Oeϝ$}I󬏴u }W\uFa.ý?β>%p鯟GAȽ.áeϝd}󬏴u]ܹ󬏴<:}k# n~ˮ$p\GS'_/β>ܢg<;.|#+örd}UY+pl>u󤏶E.í\GO|~Ov&um CToj~eߝ$}rΒ>MG r֒>{|~tv;7>^eϝ$}=xmy~tv7r7<˽𤏴?,.# x?oS=saIONM c/fmMJfl)IOM) d͆tߤIMJkemF2{濑tIMJmE1ϑ9O36=e7)ɽPt{175MJfl?e7)ɻfPc nk.icatߤK&(竪176?MJ񙰋dg{1/6?MJe5iɶ$wAnʌd< `_&SyJ񹬿 %?Y8tAh=gȺoS̓\MJht2ooS=s[aߤK&ȻG3fIFS~,eFS~'vl.idܚjOx2i_oSO^ e͐ ?_e3JN۠<Y7濑tߤHx>E~,7"Z4\ a"IO76m?Y=(135MJylMJzGs]]7){ftߤK'vG>E~)Ϳ)r,nv`0fͲ]7){ION^a "IO"IOO5Pcnko.i=s_ȺoSu 3X%!flMoJv b< gK%?A.id=B}7tIE~,E%?Oxׯ]7)Rhcfk%~'fl.id(TMJU7){.5A^]5)ϑtߤK'Nߪ_R/x.i=3f.idcfl%'fl.idv1fϑtߤIMJs_Ԡ#??A?oʌc͍|MJ͒ION_uPcfkMJm)ON_ؗ?x.i=3`/MJtQPcflMJ2id%?x2i=3aION]٧e7){foS c ͟"IO {doS{3gȺn){濑tߤK'HPk3aҩIO36|%?Y:zc b< ͇K%?Ox?kSb͚~~'fl.id1{f~'fl?U7)ڨ1fooS͟"KON_QF䖇uKTTC'"vP3j 'U/[ԯwE@.)4r۠ޤ Jt-o]Co$.E7DOjHP"{cڃ:\ Tjv@:*â ݬ*&TP.4T >^E4F7Ek]PyKqtRDf~  ;T;: 襎B+ֆ!;'`46t N`NȎ/d" F }i*$V@ u\)v)mݝֈ2kd?B7r \9T-BKZI(.(ب{*uCTd{ ЋP.M44FT-'ɕ,f@SݓԁO"uA຦AK5W(<]RM&;rB ݚD C[VA/ gQ, T>zFD|]Mn@B@-m$hɡbSMT%uAk!MSvD.֏۲T @/dV 4ԥFr([;]@Ӫ@NYQt d{[uA,U*zG ,V\Jh#Z%LXH@ϠBtFݔ:Q*1CfORnŮ=@;O4 5 Gv@"34G%7Kit ;n#zB t)mP Kt:7-h꥙c{ etN_4t mtB=i fDRjY5 }@ЦȦnBQd("ictqT]F. @G*Q\@(_e T=hAƶ]E\AB4C [H;쇩P;YwFߪ ]GTkdrNgB!UufOC{!táw@Vk j۪̺kq`fFp]V`!ƉfB`_$Dd+Pj{`uT _tT@mK a j쀑  - KEZŬ7AEH>聢 T^&9Lu5݊<ƈ!V._DGje"wPlGCdF/fD{"SmYt`ntT잤'q~;-)PKN_"e=lKu;dT5Tа H%(.4@d(p8d`@f*6ɢz[j 0#5T6G܅ʕA%1`PF""Y.<*2Pqg,# PL K8s/`518`taPK""H\OuV^b1c9l8e <}p)!焒˛$2# &(`1 Ok%\H)k)fa>ET02Cln<+{oL_yG$h}9&/o8ˆhb21 0I6 BKr7Z+a¢T 1̆Z E `MǼ+LN93yj 0v7&kX«xUɐO1@S&8nB]&ce4/*1MȈ!ñ t]$gMIseP1AG69p\CVt|j ($τ(pCWnVyNd`Ah NHsZ/Hb̼;E%SAbSb 1Ùs>v O8-U<#!q$PzޖOs.|rW*Jxxiӟp( OP QX2 #O-eNAרGAKXut?t m Rd..@Y~ E4M;rQ"qK>6h$DbYh4L7-H[J/_rNĨ5BNjStXY57hڡ[{_Rz{Uzv^UT1vA} `PXd; &]WP+M5QOZNG{%$otJ+=EbRm@A_y:.;M@ngb=p_~ê *QЭ@]P D@fM: WEvAW[t[=Z;Jq-̳ֆ)oG;ab8!ϥ{/DZ+~Wyr+s$C #`!k~wxAx)E4P=*<079L&1#$AA" TAdOl v*xz͡׵hOsSX1*zSH%1@DA`θLX% ňX_IB:n3f 8THnx?I]w JrAx='fuw^d2.Ov1!ώBv5~#rUNX4&O*AY.8CE7!]1/]#񭢥h00ͧ# AJx̧a%!.O;>ѯWf]G_xO8a* e\3fQ 0.N.ɘp:\ɁW )㧛b$% f#,H(CC 衇^Iu\!#^c xcgAI:M. `;{+el7(S?pw)g8R@]A0K@Db:plo $ZfU. P DbXv踌>^g+.D r?o<6b3-SH#`(L'ⳒǪ ̂Ζyfȉ (6<[hpfI` lx9L;DW&MxDfWI8ˈDΎd"ె WG-f`EeW4w0˓+0yq˙.<>`0?L6Õ3[-H^$pX"gЇ^b*.(%ȗQ 1 cD4"<Ϝs>=OO%uw4C?˓.2e! !@SU:(H'bjrl޵DiZݑPE:Ie<ֿ CtG֫hPih7DQtSkneLЅ7k xH"'@KFحEM굮) @Fӳ Q?M웱R6 H,PtCk QKhB mpNYFVꦈ 6ORͪ'qe`lvUKG; 3 @AK[i}P Pn_W>쌖 'D(nʕoh~ ReX 0YRꌀ;&E{ؠMFC惎nfgKS Q P?{6F- Yf&ɻnVrGSN.2PW.^l쀏+OtB M]7кӡt}T4Nࠛ-W[h=M%M~C#D M삞E] X)wmV]FʢnV2 mN'Ben3@Rڔ\pۅ U؈ ce-0F"k ]NF3XtKvR+oqk}(::AZҢvFm6AOU!gZ2wR_Z%,SDWmF7lQWt`8M,[Uc k ]u4vGK;V)ն:USDCYy&$}ORʔf\H_e̥т@Dd耎 'gO%PD7zMP 4A?B(܄{&wdsQ@Vve:u@K:"!ipȦMM (=Jcmd@7.I Id} KtA5#MgS] fG[ݐQ_]tK>~wdd2eGu7ET AGGGmR mP-)̭ q[}!䔺.1tB-({#6H:Y&DE~)+DRu#TtkY.@m?/um4[T(|ӛdK u9A[rؔQ4DU~BHf6SftmG.D X.YReT~-  0 ʾ4K]n{n8N̆D 䄥7AV5UDAR6* j Ra7@sg@"D$Bt{)}M tFS tQΪ#XX4Wu,gHP„5f@mbv{A촂Q}Hۢ0M4( G tpg@pu@ڡ]'bDv$4kmBn4*A4A'UV!G;=8mTbd'u J:-77'dqi`1,VPWܨSK ?qeYMS@P]ە.uU7tsit@-eݕnm΁o/F& `E[Sy ]17WԂSMk uM ;'Ѐ#=%J͡A%3" t B̯dߺ'N &&YMP2 & FGBPM;(:Y}luFٶM4PhM{黠(1 ԝBe>A~=F&!Uoj!m>)@50dJ)Q jHQ@B tOA/{ uWd5"(  IP+igwA56TG #vA`eEt<)Td~ЀY;j[OR֢ E)3.KwA}Lv;X+K z\PmOTd D@MtO40@$h PYTk:m䥶(+vG=Ν5#vACcf+B tad6(u\fQ&k@w4Y,tfFkn]R}!˛thi֣b4O$ d=E]ʲ]Te ]c0o5W 0RQ5Űw^~oMGY:9fce7fDpeED`\dADIYrN⷇7)VU5s~Y;fv1&r"vQOU&x:.˛=.#~# <>jTar͵xY c22zI#I:} |ޖ'ZvFɫ!?y,_'7V;Ox>nvo+,L(Fc4^ś<7Yjd䤛.@爋z7u[Qb6UbrGOnvO%7a'}'>nv;' |[c)#=M}I,23~"DS"rտ9{0ܔߑ؟/Oq#?w/OnvO~XdgNE|7V;O>nvܔߑ؞>zO_S"rտ~"Ds%7a')#>^=GC'!lbPVn$~ &F7UvmPSݔYYM2:Q..eq8}C2*, ute8ebu$6;O6Èkȥ1*ᗤP˛&8y;<'B7!S5W<;gY|CslʌBp=R/&1S0;":8}2~Kt3~7Ƃ nuc$k-UrٗiWMT˹f)LR`:۷e0R-_S( Џ? +z -̶.퍏zxV˘*KO ģA(rSy̋g,dO*2'B?+5]5txFZ8b61Ǽ[SUHdQ/RPRHL?Ȳ!aJ|2'B?0cccX][ØfQ՚ar=Vhf*yT̡,c"oDGȟ1y̱UYpɴ9znIIV9E w c|+gϗO7dȣ]}H?C!t"[Zk}-[7tl%[e_=S WCE҇~D?_+{(o}c?=S W?"/O_)X|5O&~aOsTBgClbS?1~gP}c?=S W~DҩcJ|;?_+S S?}P>!bO~Df?>b/)jL¾|'F/>J|;?_,=S S?}OdO_(|?)X|5O&~aOsTBg;%1gK!7?^g叹!3 {?0Bҡ%1gOI/sTBg5O&~a_S~YJB)}g_=S WB?* O~ajLž+C!??ʟы?>b/+i[̪'#S_VJ|r_)/5|_ڦXk83V+E9ҨDb"WkXW`ŰRl#An ,]%pɳ,锒L؉̸LN۹Zfmu6TvMгN*є0;+e@7k: Ee'pe@De[Tr.)h#;* CBִ0Ӳ@nRb|џؖ:kgO = &ɾ^E曩ZTMPh'e/_F2lB d,{n(.e.KK8m5M7@Ȁz#U L耞TA5:&'6d Ru@:; ;#]tYaxB@0,5 ]7;1'6PnU$zS$KG 'k\p>sY;0{{Qx}eYt~jaPG ZD 1qce\do.<];Þkpq< yCDb2| <ynql2)x)yc~Y?ķ ObΜрu"ML6Dc ]~# """ """ """ E58}LXHĎ``*lB9[ bE11-}USM>?ώ?A-O򭴿!#%^ O'@#$By (/(wiGn8tsS'\pD*sLF 'Wdⷋ4ٞo*짍Y+0L߶?xW޻U"Y{5"IĪy:)@ՄЬqru%|̈ӷvs8$"dE^"n܏D⪰/yo'ۂqDؚUeh~xDmq7ێ5o-b2(,EOrqG &wI~h.s?2.a+LvwƎs8 }!9suӥ?Y!Qy0L-f eڹR&nyEَr{44N <\w7 W r߸}\ğt~ъySfB{-L1.d?AW  U0ΈNmrȗuYĺk' 2z}-=k/"4f͈.C #/;~."o׊!T[VxW/|vfib3?3qC=kЊx`¬,*O^.1C;MUN>0ܵvO1kn_ a^KKfC[nfx qۖ/z6f.?Xv(Ojܣb{bx>_I_+X*2/L%,Bv@FDP#mfRxRK>z#A┼3xdz?Hbd/$нhpj)tTR D-g` ئ SrWSA,ֱğ̑|2CTmnΘž9dӫbD,.\ǢE;QkOEC:+KuΣg| +܅Epzy s΀\;r# ÎPC>.`&FZ\3ӌˤh6u5%6M %:~'T-w(qL!hpH/#<yk!:E XE@{Y/Ω8r͂8yXA_5e#ϗ #D<.;wNJ5$ E2N\2;71sͮ HɺՈ|7OQQ1N;ao<3FU8`Ibf[W _<2"\D/u (U8u72AЙІg yza/zz)q6>ΧWjw `V#M&!̿H0|S<+&hXg`dR1 S̊9_Y-b_Ci<_Ke0cP̀ḰzT# 0y"\&6tQW:tGC 6ꚫ[2Q;2T^gKcuo^OSf/os _SN6V5eT>e-g#_eHO*SŊ p|nq^%"Z O{Nc4 !O"(a-~dS˂tN1 e#_{aL(@X+x#,X09vҟ|?or}ֲڧ.tZ-S GZiq /ڪL UxCK"b)%_us& C τ.g00$@Eur<&]*iq" f̺9ʖiiD)IS+zݘv9"a.a 8 @n5jbaw6]VE%TzHʴۚ5WcvVn&$@̽zD47 8{aUumU<:C^ƺ` s!%+Ջt4D[xlXbExci))+H Mb=;ͪfD@$|5G xuQЍl > q.Vz Y0h& F\`6Fq4IWJ3{oۃjֶy ܩ>\N&H[C ${iWjg We_IqjšX]L`dQ|HY0`^1MDZd\_9G(êhHͪl\ZW-UYc=Bi꣗2澛2ʜNe|v- k#Ȫe: ?i^12_lvƚ)sf[tLe @y(v-u8Wa\7esQ]:fi]h=ZM3V].|# A͹~mf!Nyy⇒=I? +y gPΨycNwNN/QV3.!MK289XFlSf^(ԫO de"$aXDQUif{8 Q^W2t)#٧̔pVUls|㇈|-dōbص!0L}d,b|4B^%O4y<ν~#K9੕ 2dʝO,C'w WE_e*)'΢~\rsET2eE:=hʏc_|W p LWN?D3犌o4Ќ(i0#j廁eV-]MM1AY9 W) @NU6[I XLyQi ^Cr7u^aM&2="=#OQix$eR>)>RUa_| `f[>3gή1 DC0.4^e E>]U]T0B>)Xⴕ#͵+)*F!i'˳9X~)UeXĢ4ÛڰS&͓z9ЙjtI]{)aU4&O"b.9힫b4o>jܪ3.)8CsTTx|NQó1'K`J|i` PK$_eյN9#8Y˚csد]=54fL6gD|0&/NE{n |`J0"MͲeD_8iUv#U#??Ʊ1TCUIcBۊ4˥jQpCp+ϳVfyW9+&K&Kԅ Pj*b:Lc2&݇Xb1͚XO94؀1I8qJ/sA# q5F j7.esW,㣜DepJQp= DeG:kߊ]yjQ3'uzafy|ft\&d1O.}8La0wkS U><".:VMeAM]$J!.QV^]V+2 IJ_ F&\g(m׏d ? C`˼VTxĺ39=]|ZL=&>`5$u1] ǰ𼺘H^&)Nre\}&-N^ŧ2գhU*L̈́n5^E^蠮3>wɛ .a- d޵v־|' Kk?U?X}D3e?i8\z&k7*u+ԇae9~! QT^N0a慾#☁놎~1n'͔Lİ-O,+q R1)?Na>W= S6l(e[;;5E.U2"SFa. u , x&T4И%B uiɑ/符\6vUV#?fİWb1T<KjÑT}-8R1jC$3uʌ񖩇fBx cؤ^j"++\KE7CnYScSxY_2`|̟"t,:E 'hewaK(ĤG0 a k2ByuMS&f"gsY BV҈E=]ʀ:L\CF_l -msMk߿6C˘%3Y*dMB nV11å2X0C3iá:{e:@ PKnm?+1=͹rLLWKvXżc2Z `f:`h YlFWTc*͊ F81 lP`=49yC^=fۂf sIM=} @VGp3-"24ApPf Jdz^hݰ"pzF/v̎]exV!GSSSΕ)B|m8 c4dx%7^dWH"0| >`x-":aha}W_{e3mӉ6A QRM=5lz( l/x"W oeK.!b֠ jDPȎij9aGAOKsA8Q3T~S$OB?{?Ļ]' =T#LOMeLQD`kyA $/b jmk*UTw(<&fL9'ѝcSH cItrD6M.TQ0qbnF!Ԍy_4P1ףq"*TLp^KM =LNin_F>kЦtyBpLW8YbJ˕gIAnVMjݪ%οb;>$tsa+iva/[sVRCJ%b(o̹^n\cu tջ%4yzxc dJ,e.#9nn Y*<@sЅeo/K>\ȷ_IVrSD ޲9GC<4~{=sky^8WO&.%S%<`$+WhjWãtQ3U媚2q?&aUh%SgY3SS Q3{STe1;u]XM`ySbCv\B\`8pX2-?m).ڷ-r49¥|O滶XtL*HLUH0\ Z,U3EXfDnkBUE8P[^}U S <ڏCdnS2yd >AQIW]jMypG AkX _Jn1Wd>Wvvfgs299P%Z~V72 ~.ɵPa$C*iY<=BB ɕ㢊O&rBIgp?+b̸s=eYtQ̂X8@Jĉ-oI2a z).VX.g>Ԋ:X~>+N/ j~u',5Y.nT=Xb?5b_+I sv[j[SN?R)fphݝҾAOO`fH0Ik'jXc:* "jȚ "p%κ7i}T8{{jx%'d,њr1fX~1QM6:jZxLS, 祰ʵ |_T2];ȩ'_'s/5.]6!UEF ""ᯚUWǿ[ǜK76TQdB uDM!ᗱ=>dV 8RKs<9 T3&CPf8^+'LsR M9Od&!|=3h(eO.G5 K 5I0烷E |_Tp ]Tzte@]d P`t262$X @;|?5w9R8ON/*_ E |_Tƒ&c?_'s/kr"p&c?_'s/kr"p&c?_'s/kr"p&eZ %>9ȩ/o p~GN>f_Gr*cN9T<ԳgrD,ry8&uF^bYVڒ>rrs7i.<$}oݹUXfM.%Sϡá!ߪՉΆ}o @#7 `L3/3]$}E8EdUY|"YrasIQM(zh!E*JP*O.fi#I8=N̷$}n s4񜏋SU$q˄BʹTf!>|MYy34pn=pGO"2۷\`b)s6Jó2}3*X3/!d#Cx1eih$Ua2&Xش+,o ??ȩj8p[|?ȩHN ggq~++qa'f#0yʸ3 s'?߯*a؄RRo&3W"\9#J^wb87vu'=9bMZUւb|qi1fA^'$hUؠc#` W-5 *ڢ8t. ݊ ,Dl5I8fɈªei稇!:ت5LM4oJΆ8v[ڜ$Daa 00e 5,u٦'u1/3bxbygOн9Sv *5GJ{C.-;w{E68̨/_Eq|{Y Zc&G?dM#eM@_@ <'4GLcY}f0Ch;m\.<]p&]~hRd؉D?J:< y˿ʛȗ3E..@WBqC9J$bJjgTL99[zxbb'SC&# wܳNsSM*DaҦ~0"/=BQ*h+dI\< bۨj4շTܮ޺7wa5mf)P-Fr)˟Bau',(6uMWZ u*fvbRgs s)Xyʹ31J(h&cN 50l+|8aUbuӪeyVʕ8}HZnaN@a+!Ř/=˘DI|yq{w:Bft>bjeH.%'T=vO@@z?+ug O?/LdKyS}IˆfL"PoD.o#)"$d?Z8GKYpKũH +"9#jUQӽ~(?6#Feߊ?M\:"/ 6؅ Be,Ṗ8J ؞OrXER-vMI2* \S2a/es6G"LrKjh"<F?G"x30Oi92qeGUM( 0Y "9X-$cPK+͝j.DtĩP 0 d$ʂDd˄a _"EsfA*(%L$Fg):q Xb+LtDItVc8qvE$|O_eF,Ɂڜ U ġ,  yYf#t7$f8q\*>ZxKXZT>0שHra ץ%r7ܭ3F]:d\Yp_,tľN)k-M<qxq7v[&s.lli1ASv\lՎ̀Rā?t0# rr> 2/7'RQg5ϸ5 ڦ{E~ UA6t$ubAr;0B>,j梹_9umڢ;ùi 48Z&SI㪅uE1u<- ˅ D A8Fy+JVZi<ثU5S,3ujylɑ~4$bxgC>cvuܱ (!O,nPWqMv+gOZ$Gs>Z# i)MY1 ԕdP|F"lLd},V KSM311[;at? 3N[_AE^G2 b?ZΓ#%f)2b)mmw5_CB&noCkgսn\C~)&GMK.`!bFh 2py0yagX3_dG _EK,1a>"IӲD;]DM4xaI.LDyDjrc ~Df2\6d&Pi ۦ3g9lcU :YYjJ_(ro ct3@ݬ23<6x1<1slG 9D/nh~?uh<-;Sۣo3.jx$2,*̾(1P(O9Ydw5ssiyYr$A6N]*PW\njv>&$sQbfR8y]SZzbdH .;?c.tuL*!o%6l՚"jQZ307&zW&|r˖\u"p] ZɈ=*mz WEšjh$"hGYz( .ɵU3L6~Z_Ś?~T7n/~(># fONÁ$&1-,C/5T$Hc~`2.F _kۊ?MAM yuD^TEG3MrIau1"x|"sV.c&?Կz$]dr9#52byv3Rd%xɽOu/ޠ%)Rip0|8e*M©*Ldbh# .̹l᧎9DzA yS%2]4-p#/AD?%C6PTzw$.DP~5rhhG:d2K*H \[hVԳ#F}H~[<+LawPn*8gL@1q2xk2f)u Ug:JYK,nWs`c0H 00277^/G6 OtUh5u|)j6IނL ps,C8]V,J$0nUIΏW.TR=b}w_ܗL͠Yg fΏwZ\T\XB&d1DI+yuES @q xy1X[`$4% EX2h6L1FFMm(rָj̘[E;"s܌aAO0L 0y2hanنl,TU12EWO(9-~S5\|̹Z)ݖi"UAe:j2~~ 餉p]2&J\8{G {Qw)tixEUMir_] 9PXK$Z^M'Яar%.^)l4_PXfRN98ٔrΐba‑\ق-zdkuKtإ4 ,˴b|EC la](9Yyy7*'L&2dQG%]%ETD1,[8ds^ZTEL8TC*[T?\.k?>C 5O]ض%M)18ɝ ;{_f]^F׊rq)6(syPk6{fyu x?Ƣ3ȕ8#!zjx#>v#1 1J4AId3$8Efˈ`$HV)Z=guLX %L%.sgaψD[tV9c0z)qE"=L8V"fLh&:m3O{\ iMG/Xh2#,EKS \gS'Jt鵎N|F92(o.<3'%KĄG1%,bLxӀ_.f}Fi>*ѓ9%Sn\r_EL2ن/K6TvtuڵvX!veo rkyeW`#BN6.Q)Kƴx"b2q!-}Etڏ˕\T2dA($pR ÔYu:DeRcW^x;. ,.VC$G4u԰ܓL\f#O6H%. f8@ozs,x!ajiZV_FsKxOS ?Θ5Q\R_O(`Pa/TU-`!>]X<0CW*(Wqiй+s;q??|>~]/[_86Y(4r0scPxSPsf[8+vUA)qGBE, Y0տJ!Ox+3aNĠ"9A I#7e-q>:^~8^2G/}:Ɵ?钿ҿdw?\Vo?ᠧM6.xD ;8W8q8;1A$L5T1z "-kvy TU$4O FeI0\L0'?Yt5޾ET:\rTIhb  %8?^/xIdR )Cyecv nyjnr6SY*f1]&o 211龋xD|nf LC6Y.R"+{50%+}%\jsmuUg$0fGV69.Xe>,/P]Sa|tXzXA{$r <:YK+ҘbCcЂzjrP![R%O %lxe&I C&//;̲~/.@)d F\h4QDqG"yG+BaEqX28%QEfCPbȄ 䱵! xo q<>&~I̝SK<ˎ(sGX-1C~nc?gl8} E ! L^k69er5˥%%8̆p Ybco.\V9z9sVI$i<'p,0q~!CCCo9%˙4й`(LQ'4aYR0 0"ĒU9zi'b`BERO'\|˅TSjygAS"?<L\S BL*`1H8|M ᯄ8G8Rp# ח u3MBcq`'Ըؔ~ί7E@f0j?~x` mL+SEB Wunj2k0㤈{Vic/a9z-é)هM:Yu)ԓeF`ːAdOy3ef .I1>ܓbиz۩W k~QI7\/xNu\Tn!.uQ4N*.bc0-w(1^ink3!EeL[YC"aճ>r|lK8zHD0x"[<NhȸHcRD3\#z<.hyQLK./1p 8%Hq}Q?%?O)Ӟ{˅3LJ1U.dʓkZ~#_EY0QE:#0B̯IITaBN%7S*]Tf0sm:(6΢11ɓfgoR|/c2悢9]1&LK)˭xƎ:Hh*)trWY7}l?/H+,Aq(Da180qӇeCQ_>[^ctUH0w]QU|!ɹ⩂7Ybv_MDP4Q_Q2#MPżbϙ. @AYsɎnS.ęپP+3MقǜgcU1bf10h2 w-d`iܮgg]"#ɟAQGJI|prKr˕,-JJbOb,ۊa7a1:\>0ۭ@A)Kb?̆")(%.Ar[2 mX6W!M.YI&{V홙ou]Z倕Fo$]]FTg FH,ECĬZV6y_D<(V\2bbZ}?1]85,OA*D23]s԰dGԭ,iaDHsrp \/6Y(̥Uq|wշf1\ B?_<- ^K3rE LU@!$e,1X'18uPPh(`@"(oG-S|?YW1ôौDW#g3Yp㩌ES:H+%=7x/C@_q+z/lȊOit([bqNr騈,o eI|̹nj?SVrTAxk }a4fk~yY%b0N 3'ϙ4ӒâĄT{Î"dXb8bG?,.|I0/ms~0570 ǩp*Jzh L5G*_ %LϹg7X8\ 8&V~!na&T!AXǍxdw[WMuED蹣ԟ DJRpsL:]|M|ةfpس[^KOs6b,&VFis)Ӊ!avwax3 ul,ErYcx Hqi\0[ $#'&ԬcŬۉePlٞJy#(lH!Ak.lsKحNL&8E$ lEp詫9ry悧M(fsg^Ȝm0| Y+ܸ3gEQGfnW < c6e,N]+E$Orrs|X1D.7Znpųa͹YCDGr!B4 dlHy\ܻS$DfL4-؍SA蛗u*ii,4R y25K ߌI f%b`r>q*}4P/elNDS c krY?)T3=$#]GWK '>JIPA :0Sʑ t[JLφ( 1bU.y>TŶA2~#*<_p.HK瑯*zzLPMſ)E&I V/a ʴvkFu%EBJ&S0Kp6?to.a0Ȉ|ͪ_I]-b=#[8La\&_aeM=IYwxUF󇨝rN2\.T<5ɕ0쑌( J(o(HEf\nʥc.aCzi1L;Py{t"O{+ r^[?/C ڈaqA};,sfթ85(h:0>.LS?q[@y$Ϊ3 ?uE;rnW3.F*gb(e *J ^EO)닯LJ?bg[6:[\+J-A \!P CX*83⧨dܥz (A}y&"z4,MS`br6j)eH L\=^F#.Dp%".]|m78v"c4uxbdb@0 bTXV/'b\q.ڜOuF!RL]qc/-Q^TuŸ =93!g;v^5fJH%R.akNdpޛSI.|2pxP]l71Tszj11E_4=Ÿ\~%`ydB.XY[ 4K6.":Hb#K +N+%QPɳ#$I 0J/C 3*LgwYoh}іoy)(WGn5\LN*Z)pJh8<9]evyu0RbuPӘYjϋ.g1΂3 Ŕ|+ ENU܎U},SDya.^mr쉏KK&\1^5W:;327VТj uYg98VDL?/dS.!- lf1_qm1sAT},2d9\!<3[ ICa,).Y@We3(B?{u2TPR |dAnibS+B; Z)cN ðY~6\1FZ(gaRxMdòF/AHųN-S*DH&J&F!vDE 9[>9&3a<׆Gܸ0v.suqf\qؓ_K.q5_Cfۢ)mzC%Զxl2Cޭ%R׃=!rbծo1Vcℽhtى@l^lf 0R\505/al6 S+fRьQϗ%舼l V`3^0itiCL_Fcڼ^PQ6H.% ز9g➱S=U.|,M̕Eʙ(abs"sAD|Rz,or"hʋ c.|S_2 8Iރ2૓Lb&NY{,C;lG9iL]2UTdɌ̾>pLX4ɱD X&3/+tθb0* 3eae@A,.@I;S<ao0E_S"F#?b_Ԓ49a{sE{lj s|h0l -v/2|pɟU D K4b:_j _1\[dD^..qS7c(HN?\=#׸xwXuv/bx}u$\bLɄˈx0\~<3.~e샋C&K>h s%E1BL B g ?ńsq +̫YQ6tQ̛8$Ih_UIG*)fE!PYLI|'i/58M3i2CQ1D@(Թ0|8Si~P*U}Hy?ݮll.Sp)J' hayx\[cOj1ߝOkWܟ7,j%Pޚ< /ŊL0eǁYP?~u?ݯo8||{^J3LIh@%G2d0ʽ`vSCŃOٚ4U%ǙN806b^.TL_E #hY77 gFfǚ{j_[|sFm÷ƾsa> f?Կr14RN,3I[Q0A87Uo H0f<,1sf%:Hb 2DO!qUɣ3efT^ 8kŒK+iW{4gAAJUWLTpQU,Ch Gxb+o2k!fILuCMY,pw 68fŔ&V|cB}n;c19`4jJ^QOyeHɑ$%|bh.擁S t3אc+r/\l&\VQ(9V#ut[݊ӽ1iWv7hCc,R1 U3#` QH| 0 ~i#j31L+ Lv_Y1E FEɈÃsEn0^f|K+b|rUP͒;4!{>T春VG0d{!9c=;ntodGcs>f{!~V>< Ʀ*r4SS0@voBӆQ0Θ-)g͗0ɂtPB A"& ?:x3[C} AʕO.hAaxO+ O8]|7fceE(8 Q⣏4ĜB\0G"N19fyϊK1)yvuó tz)gE ϊ91'=F`F!O\_G9}KqˆGņPʼBN9͟G"d36#,A@ ]G\cyG 9ш>QY|5 +!M*|f@b"CsG1'y31QN0͚hE}%txDˬny%m8mþJ&E2^%[6 SD!8 0E$Ar>3G9w.W 3Q`ءk(Lis$ xv|OT˰p8a_z*`~+SLGD!$ Fruydv &*xGb# xa>!U8!W2}m\gόx(I%03L͙Xyű/5S q!P@6XH1x~ԟ_|8#'LQ4K\:gӳd&AGetQ0ȗwdAY,o1q b!f#RR*)Q_!elpqZj,*"\qzx`naep_8Gh`3%L2@XΥ9fЖ< 'e&'d4^u1X}U t*ghSpI.8"]v`WgW`)4:O& 8 ژ8lORaB >OsnOSK,x1)(9]q\DdzwX5f9Y&ca%2 E;YOl nf_^qaqBfWJQHKc;f|ϛ+,C4a.Y5aA5)1Y?1X1b>v4% #+fe9^4].f|딲%jqs4af42X4;nV\ϒ%G*ݕo[!`%۲NlqBH!pr%ǕKhve|UY ,Cg@4}e0; _)"T3Q~X`_޵֎M *xD*FC/*~`G%z^dd^Nݶ/l` d6 [`U t# _[tQo]@KIR0T3[` Ck!ݕ@'];.5);GUzk} AmUAtQT:jձЫmOT5uK)ܠ9u[- Dk6R$2wMP>MJ?TTMРigTVAdh2)PŐ2k7P? *LJ:J0͕c [~<2ϝ} Dny ^,>Hvgݟp<2F Ȼ]D_.Qj:4ysךWU[l&I'py;)UTמ[-b)_/sQ̣PF`CalMki_ڞWa#_E?+ vHd54OM+Wҟxܑ9_aOx%}~Vjzi_ھ{ds?+'~HS`|ҿ+=4_JrG%}=Fҧ%}~Vjzi_ھd?+'~Hg5_a0>lzi_ڞWa 5_a@~Ҿ`|ҿ+=4_ICZz)_a0>ki_ڞWa OJ %?e}~Vjzi_ھdOJ ?%?e}~Vjzi_ھp 2l#iS`|d$~OZL_HKH*h9e}OK N]5%*I+øW2>K%O|L͇o ˘{ ^WL $ɾsF56 I>1FTE.\u_zt\0:P @jm‡MT] )bX\+t RCn`E@(>o歙ESԦSSd̞E ꁻDvy!p`Ψu{2 ΁p]['؅mpuG!Q}N!B\_ [dٝPTE/]KtC]Zw58N"{P fGve{ ِ@.tFT PFﲟĂi;tPM :C*YA:0\#d@F;YKjQtdSRT}JCse\yOQKȸ**tn ԄQm„@۪sꁡ]tb0uC ~ EBfUڥd]j.GPR}nf`k`3M4AԨfDܠ*N/\sIR!ޭHD 0hPUAv_ke 䢭n@m:wu}ݓQ`G@=YGcrK@ }T /dtC{@c<0ܢݐ䂞IU .Jt:E5 +}ʡT=AtgO" w@ 0d #.)ݐhTYJ }H.|cWKyu 'v(;]PB5TdE>t9T4C֣k+E Aր-+Td~ָZ<Ի A|M(/t.(૳6@ :@wD}BE@~(uCwUh>A7Ve,?@K{UU-XݔPʁ-C櫠g< EPv_^nPIR$N7[ UGDѐD, uv ) \kAЄ ms 4t:BD{/uBBNiY6t$"8D%^tKuA~֚#8tvui ?޵ts(YSe@Tl̴?KhdMꁦ9c t==*5Ԋmq}]JJ9$/6u4E|GA9 gSkY[ wB\ DYۢPuT~˟$F2E!B0 h Eld{E{ 魊 hD}@r7uHdZ: {!ueJd 黡{%Byf27]AtG/(nP8W%cD _Un ]K]4Bց4USS@č}HKO4BBB{htV=iVZB—], mҀ>؝TA7tTP(I'ʁvS噊Ujr 645@Q膧R] EKV=nue =hؗ7md>Jّh8fYNOӲ*X@Y&^ N;t!M*Y غ_Pi8%B}@mwP]Qadw$ X]دT,04#ua`rdZ<ʻ}:kdde4U|Am"Hu삆{[R +Tb.9dCm[dPŔO4 ]o  BX(őd$:JST}.uNtv(ĝPɭ, 6MIf gQ7U}JzBnB%AlYP{-/j ׿1ԆP&[`bl\kmtMnDME.cUfɪvd2MKHtK6TsKMFQH(YM@/pM.nvWO0](4ZIYAG!;:6@ʞD=P/+d@@P'gGS_RY)5RzڕTSRR>ِX8()6 oK?Ъ wQW ۩S},؅4* u<պ4: җk\(۪ޥ]9 -bSGA[}TaBM>Tmt%Uj utz#tX @[ _]} v!vwA`t  )tmQ=wd,Zf$<>j@C`vT=H*u}U-Ut%VMу]}]9(*hN ]*}h ; U]OZUh!ѺAmQ-*2 ,Y- SԖ;+U֎!mP(ֺ7diYFw@VP:T:hݖd߲_Rmv@ wBz&̠;ݐ/6GtԠ&T;襊 ( *jk 8ؠE-rQʽ֞h]P{)nAuKX)eItZnݔW4n龚KmzF6,.}(Xk2vR+tqA;!wMKJ-S {2hp(%<¤-r˵,aa: MQYC)@,eQDtsrde;nw( UΖbY4T$2p,'R~; [tbBP6Z_Aԣ_\ԎN#WK% AdUP8)}R(ƈRu+U r!nC%tB[ 7Rݕ7 cM.U P])=;#T(JM(U$D* yҨt žv<Icd!wVȩ7M, S"+u)n421(lw@u^ITa] }(/#8@@s=h4e7mP: {څʔc6 \̀[P`&o3&#(MQ UQ(U;(< D[rۡ te^ 6@Bh̩}R!&̚|;#>#ӥG@: s]Puu #_DnBnKn@BDE @t:5Df>(dFt@颚 !6G[Pٝr C{/fK2m^dШ{.& NY=Je G -3`m]`jPۢ]]Q;`uoRF[t \;kgFt7 #dg{ 5Sd%!뺡€w@s`MntB;]j6 [v. ~OZ3hʕ\.Q`dY[jMUق7@+rcg@5SuHFQ7Q/#oJ"%vN΄_U}Ѻ(ͪORMw r!@FN }S]T=U Eʝpj # ,̦X)M스wRQ!nI$ jkm7hO%C%@CF:\BfmY(!]G15%JkMmFꥬ!.Ν] n:6JjRyUDUMWb]kԣVj_uK$YzZ@*YgMMQy+G:#D1%QdYBR޵TA_k&rk Re5) 媖;! 6{\%Fcm=r ;})mR˛JqBB BhX6w@vruPPCת}imD`yu4.P.{ (47]SԁSvWGFKEu!֧ԗMM;t4T]Vb`|!Zp@CR3uF/j[TEO%l%eX 2t'@%E5}J=6 ˇF/t{MүbKzjwpuYKu4 Y` .@EIO$`Mц]P ud1M>#vS5t][X,4*+pll[e/8AעXݐ5GK2kE[ԝPKC Md55:% El~R wBŕ ʖc.CF8[6P`*FM(PW^pBO4dУ@m5lPz%샡@ɯDP; 5G{e>KŐ*J 4ODU5(D~6AtFъXgVu>@ P!]B]]?Ѐ7OZ>̡~YORjP (mfU;ySh", t@4G$5F%,E/@5@^UѴ@6,Q읐F<{,o Df(*(n ՝|pt(]Dr:)SmPEPK)KrQb<=rn?lPVM4TFE;GӺd]~t]΂v Zrd[(zBK t!,!#e[gQzGQ6@o5dt3})}[huK(+MPmuA`=$**MA ]I]֞D"X4vUy u/,M 5GG Ր5(;vRTud t)!=;]7 ]U=hGDu\ ,y@~Ic}={*, d$b1"SO]4 o5~*Tr/atK(MAhTAJY.U A{{2\,AA>ʱg:#5 "1F. /fUgS[tW@ygCΞcT75#t&]>lX\~YMwK5C}J]W, BIBmpVHT"z$f>>w `@nʍtt@aMMP@{w@mF{$+ 4M@ճCmT ].[}[)X(Be[M5K6P" 3]23{>Hꥴ@RZ0tXBv@셵*k-v@mY4 @aM.T#7TPBvRɮHHmѐ.uwG墏s`y2(vt$n寪y нDzZy&d~#_D(#l@?OVMʖP.6 [@#Ԁ쁕-[H:&Ggk)}IT̀ m!tDwAGDvS][ud=#@%7Z::#YBk(Ϋkt PFDt(tm%J1.Q܈@Qem(-*5=iP.oA[linl Y_A̛G*'c JZd2 $@BP-#0^B l~d@]:6N@̀C-:YA6M3^RQZ_`[WFS즣D`gd%BzXu l8!4ѐwAsMBZ!Rčdt%=H{ 8tٓ %%, ]N+ӣ 5(Gqb={kktw*ȃ5'mnPS[$ AK25Ditqe7KYS`9Ꚅ .= o5;#P +uOܦj]c"{T!W@UnZ1 Q{ `DDp nN`FvGKt ȁBDm4P<ӰUET70dvQ@t7t!)gN(O0zZORgSuJ vFN@,M 5+!GdFY5GA@mo%yMP  `8@],4S~-)fQ+ q즻);3~+Ԃ]:mU42vwK:$%:Y.t@f(m岡5SN [RS5Bt fd$t J[mh5$PC'Щ@g5QϭV4;2\hNGE@q^T쪄A]ZɭX@B:[ 'gQhgy/\0t RBhrղ #Q@ kob m :PSd@wGSP d 7TΦQ {'gPSFK&t;)_ւwtNPTP_R@:l*y$D O5\j)tȏd_JT$-7DVe _E O]eBtO01}ytԇT \&΀9joEu {W (KjE.ڠ8@˧f@PwU,=HWEmNʎyvG ;@Vknj!:l[T؄_t6~w=jnvB4뢥d{ lSTnBe^4D r7T{h; `\ q\[t9s-4#@C̮ y(u{D웦AYF:5(KC#POZut+E.T@od +T C{ wڡA{'@i:ou<ў?U5#քDnu4 hTkj,ꥺ 4c]A6޴@b)U7D!hYM RK"0@~ijn@ SG>JO4(+/=@{, IA5 h{#'GMYDOZtPtk@DR,(`St >hjlqM]CpX7@JvG>l_zrs)fӲd;]5tYU7tAXQqiswVK CdsM5Pq4TN+n{tukYk//n !2ժ wCʩU[Dn4{%Sd:'t@pgdmEK.6Qƈ{㪀9jP]6Bb[ ٙ4(Gte D/N@/ee%+HlntZv)7M]/ n}@:=ձ\f>({-CBTSMJ(uuW2yl,#Gw =Mnj6*mACd 諂~ u?@7WMFPdtDZQM' ѴPuU,MwT< VdbTб w@HmT=UMPa_Rt.}ht_dF~)zg{u@M.AOrT뺊t)U@hP N5TP`!P6w)k>!:A(*[D&DZQ@-Q̞I9r6B9 :m;t>f#!7S5K怗DuSvunbN}D;MnJ\Kا`P4ݓ֦%1u@,te`0@! tGtĶnYu[VSD|ѓ[D@J*۔R O$-.OD;#5( 7vN@oG ti8Mt@twD#1@:9=RFRY6OU ;3*hA{QΦ߲4TO%{#uMvK- }v ۠5(u]в#zK:?dnʻ T)gBNʂz kJHXlfBU 2huS]SP5hO"ܠ CqWuU"!MVe MMKy 8uH)@lԱ F!bn촗AwG:t*QXeE|QDY]Vrfևr*TQr0l_$AtbwA [lnQu@;ºY !*JC"Sato}Y5euGk%Ng'j jQ@{oMjt@n+{ {@f( 4PRD~ > 5{ɾy*-g@,Tw*Bj&ڠ; tw@td=uSQm-k uv+Cj-S 1삔߲ؠu[֠StetNORm([e]Ga P>vZu6@Цn%[ٙDkd({u@uA}^`luS`,zP0Fإ }ԳUf7A GMBjen4* .Y'T R G(d&ddA{:_PK.W@Ct: 5K 7]Mdwd=vD:젎 u5*Kd9mD.A~ J((ܲjuEMWE n7죥Gdőizkݑ6pTAM h{&*#Yk\#&d ً)dB QSBUKb4OZ耶Guъpz5H[w 'ir T_aQɥ7@fFa}t>5]: cj:J0f/ (KbK lD Dﯩ4="ʹd tKޥv4hdvB dv)잢 [=ht._# F(0!afFwѻ=D#t:\舶S8dDQ( @U؍mӳt(n'AT&.{ΏMD=H5G_b]K@BOZ՝{>Ko:Y4FuElڨ- \lG!PCoQR,΂7DsU]tBN*座@벏meOr+-#(Y!A{Q+K%:SpSk zW vF!/BlB @p5R.Pk]mP)r\AK"Z"'D$;(X *uEuAtíڥh#u}J,e4F@(5˖c.thahC2@ K:K&ڢ Y@tpTwK;~wGtA:Ӳd{dm@ io/y[&nuMmջ 怶@ +Mnᛢ8/l :7u{X"%7B[dKP 8h9l-e6M؀eGeCPA AqrmUh'>,͐BNEiu꡺ wmulPB({}U@Nи@(:@ ƚ(<;}jhd jР?G Q£TD+VP;63PRGKhd,nr5Ad: .W@}lTU T}ET}U)`%.EP^uʋ 讶EXy T΀ByBU]T%Ph@mvAMvW% uO#dfYꎌwQђߢKP5t@G$+>t7V  ?DqDqR~ueRm(/he梡.JWA ![7Aus%/SkB.΀ G;21 eRM k\n}Slۢ jꮈ]@%*O5^kEG{l5(7f,uPAztPh4Рmt*@pؖ@,T^̧*j_$GEH:OOjuP2(,`̀u^QWȪyGtX*$nT2& z&MA7OZtn#umAԪed;*DR6uWK"ET@N>w*Xt8v)jYmBrшC:e- ٴOZ*A=IhWF AܥDA)":2*Al/S"ȋ4$:nȚjAW9t숝Д-:T23 y#QD}PdMutnl[НT @'VT;qt 77@#~j΅!@CwF7% ]yv@B jgɯK y+/K΀dv!}4Vӭ.0Bvt:EtD='Ђ(h\vT-:7{tO2B֌::h.UQtT[Seo iOB-@n=E|vV۠[ڍFh }P@ ȫg(4l=* ꀯ`}--h س胻&!}Y 2]u pِRz-M}TZP nDP=ISր \D%ŐJ6֭S#0Q> hhG҈+X(>,7A*zaCꞦ*;YDt tStdbNΛFW gqJ] @% !KT dF@/FXllnwGmPFtn5TԲM o|cg =?6]}]M},D;%D2tU9 Xj~G{O@ MUY&N^EVQ.(k 6M4D_4m fAtO4s2_>MA}(UВڧ6d.ԈK]g(K['D5U|GٕM! hbu@@pCktU5 ۢip;nSjȡ:, ^&_GEtGF>Wt ݵM@GD$&ꁮ&G:lY5RrB]өftRjbPj̦mSԁrۢN noiۺPF'⺾e,c!IBڔAHw!Ak:0  1#uK" GfM4@/MAtQQ;R#%@Pu%PK覊&_&Q_@NDvDԧM5ME[7tΌ=W[n}P=H,} MtTXʃ۵6@5pPT.MG.B{!SցwSPB(+dtAgd}J;l\!PnEvM4T;(dtGk@nk&AOFBkTS:tA-`_Z2u*]d k\]GX">MUEUP@]*"&}p:((hYگbz u*[|vF: JP[::7ЈMGE @݊[*[W@pSքP;lnJ4ѝ D }tRڠRʎ#5(6%@F ul̛t)m-mT.| ۪y![:o$.P;tKz@~n,,4-o%>(t*2 tR(P wSM3 ԡ!EN @}P.K(S}ivABv.)9r 7tpъ U7PG(dECԚ$tQDQqORuRU %GSK/e %UA5n蝓d~}SfΩ$DMB]Nd#F6tiKtD 1}5SCu_Dԏt$ щ@YR6,K*f@G} RBUw1ِQ* 5O(Nvd?@̌s(t Ꞵt@G;b6Ct v ش(og@ @'{Y6}YKtpuF%P@U涨MVjiumptDCctFZZ{ܥ>̂B5nJjijH ;ɳ"&W'U-ګ)a/Wvdr#€'ds.u7T5 E7dj셍: S>uҫuzjy}]}Jlut'MtU˨.Ȣ: D/r=9ePAr+ttTojY'ҁ쭆;~UG F)t$}a4 t9@5S+꣫e,yjR 9bK]47K7tpX؇PmzDUq@=;)m_Z;!tq-2eZnP t{ՓpE ̎Bu7(*9} y!+d}N6[vA{D) (M@ ! 0TByߩKle}^fGT^+Vz54fK sܫsV\ T@MIG۪X(.@mӲ:k#{삐t S]tpQ"MSd*Y/"(dԨE스GBw@EzuS р!h][4@*l}P @KHUKRy {(zhnURN;;'k(zؕtͺԖP5B-'Qb.;(UeTNIv@{OR[T7@;KdNCtu4B.7  ]ef)GJ0oUWMʈܧF=n #eoC}j/y2@ Dp5>zCsd(X,䁧O"r#M!gT(wd P^-BN3s6(ځt:%t=,zMN*7DS)+J3m_dAbtL(dUTK]W=E!5vF覞;n5PAE 66;M@m *5ք5]G@g'KBAM@OE{@ ꎁB-t@.4Aո(H *? @ݑF mBdQM *&)rʝnPGm觩AШeG)"BE/M,h.uO`V\)젺2;{6gTM;MőX&̂{}HoR: Xf襊@0K /Q:%fBo6S}J(B0u{(Jn鵐Ϫ7@t6WvPnUK#y } pE.)T:Znt:2M@e7ɭw)5 ݀RDZv@lYmW.}PU ?T@%,tSe\: اtt ( 6%(tE EQ lJY }b~ At Gt;}S;*+=@;#5TG}7]P%!uAӿdv:P:غhm_$Dzip̂Bl@>.)+dcDG.UmPG}U`=j @}*5SBtRR{6讷Pغbv?Z\X=Q[u@8gZvUuGaJ:#[m: )A֮ \}j,,ΛwN̂fP#AF[U/SAlukmYj!֐+].k} JꂑQtu5J(W)룥(7VK~VV;5 }YG잴5@ymA..gS꒏=l ڢBF W@E^o%r FpS P:]Ab]Y벝DiT,e>w)(UlB ڕ(vtf.΀~]kܠ _T<ʌװ@TU-RFlB[GТ쥼;S;@nKA,- k*:"%nJ(,U@興Mh5@7 . /bm.p ]Setp"Od~UY6ڣ ; Dԣz: 9TG\tO$}ոPd00%d*JM4)vd>H[P}hCuPX* D^TnD'րEtP 9bJ_M 6)[ u?tt:YзTd-AӳMtav@-YI؀o4$6h鯚vm{tS{:6ktg,6PRd[h~HX)} 6QT ANgG4Q۲ {A)ꦪYJdGAu-H;m(Ĕ MJy a" Y\|mtTDa. tFjK#bt9K{ԣUP A/F@變| 4K:te^̍k"TSU\䡲6TKWe5 j,4F$ AtD `{:twWShK꧒P,BokSv*Gdojh,l@;wN}5A\6@K XS]!YMNe r"@d.TPKhi,tj"hѷ6P }Л2@ mTd jORjt J=ъ uPrPvԀ& BzS_@,ȝUk#k.ںǚ]|qd~]gHata$Y)#l]`(mO4쇣2ܨUKR&PL$W | EA/ 7[#~UUDް+g&P*n:'rB6,mTcdhOESAe,F}Ц'DuI/[t }(֟Z v* |y'Ԉ=,ngdEFvWQe4@'ؗnA΃d =KwSր\zvAuSRΈM,v^Ύw;ut@?ZEK wD-8O^u]O[hkh˪: ;PQG@k(:b価M d鮥7`t@0@n ="[D`wie]MbT0[EQM]%ϪKAD/XֺA^lmt15) }taunity-scope-mediascanner-0.2+14.04.20140404/data/CMakeLists.txt0000644000015301777760000000406712317535203024336 0ustar pbusernogroup00000000000000 # Unity Scope files set(SCOPES_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}/unity/scopes") set(SCOPES_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}/unity-scopes") set(OLD_SCOPES_DIR "${CMAKE_INSTALL_FULL_DATADIR}/unity/scopes") configure_file( mediascanner-music.ini.in mediascanner-music.ini ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/mediascanner-music.ini" DESTINATION "${SCOPES_LIBDIR}/mediascanner-music" ) install( FILES music.png mediascanner-music-screenshot.jpg DESTINATION "${SCOPES_DATADIR}/mediascanner-music" ) configure_file( mediascanner-video.ini.in mediascanner-video.ini ) install( FILES video.png mediascanner-video-screenshot.jpg DESTINATION "${SCOPES_DATADIR}/mediascanner-video" ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/mediascanner-video.ini" DESTINATION "${SCOPES_LIBDIR}/mediascanner-video" ) configure_file( musicaggregator.ini.in musicaggregator.ini ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/musicaggregator.ini" DESTINATION "${SCOPES_LIBDIR}/musicaggregator" ) install( FILES musicaggregator-screenshot.jpg DESTINATION "${SCOPES_DATADIR}/musicaggregator" ) configure_file( videoaggregator.ini.in videoaggregator.ini ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/videoaggregator.ini" DESTINATION "${SCOPES_LIBDIR}/videoaggregator" ) install( FILES videoaggregator-screenshot.jpg DESTINATION "${SCOPES_DATADIR}/videoaggregator" ) # D-Bus service definition for old scope configure_file( unity-scope-mediascanner.service.in unity-scope-mediascanner.service ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/unity-scope-mediascanner.service" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/dbus-1/services" ) # Old Unity Scope files configure_file( music/mediascanner.scope.in music/mediascanner.scope ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/music/mediascanner.scope" DESTINATION "${OLD_SCOPES_DIR}/music" ) configure_file( video/mediascanner.scope.in video/mediascanner.scope ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/video/mediascanner.scope" DESTINATION "${OLD_SCOPES_DIR}/video" ) unity-scope-mediascanner-0.2+14.04.20140404/data/musicaggregator-screenshot.jpg0000644000015301777760000045063312317535203027642 0ustar pbusernogroup00000000000000JFIFHHC       C " l !1A"Qaq2V #BRU$36br%45CEFu&7Scdest'DT8vW(D!1"&AQ2cd#Baq3Rr$Cb%4S ?U@DqE^Z,6Ļ+Zy5}N1qffPܜz`jyA:2zf>8.=02h+*y}oN0y CIPI         =:ˬ8Z}=F:/CμY@Vp??SJ&e-BH7?:,C͜I%>@'iRkBRRM{v>yA%%rViymĔ $AKAFYc310kLXe8ņl+`%{ r18"MQ4snw(ql)'PAb # =2r-]PCh@lrLn^OGgg5YIyviKlWK }m 7*/0H-⒤J>IC J#5D*µZ~^& 촞i?؂""`|a34 7P`+ -wqm\#OfAg4P 8.pI1ɑ'^NSPJ&SeC\jUo-(j7#l5AA*&Or*}*M>5+2`JuOJ,[M.I${&+Jku^dPҰEbW9-z9MI1)6™yРDYA6 I3,8&fd,k.lE`-33™둵CbZ_U&l=TkByJԬ੉g\ؔ |cJжP'B,DhBPCi*R -8%IЂ,DIѰ(hy=D|7.m뀋=8ۍ8B%B"<Eĝ6PQLZRSt7..'t8Q46 -Gd\!E IJlA ( N4*y!V0`LdGiҲNK)}e<GI\^+IzBZMzv,ZTtja YD@Hlb|c bL+$WUU4]۩_rv IK|@Xe]v[{=3VK!uMrǀ('N3A`Zd,WRؑY!ĕ ]`in|e1P\3\s7$יdַڰZsh }1.jP͡*YVJšŸ8 _%r©2ޕƕgRjIJ{o;ҵ[s!2.[N`,Bx|.`",+ vg],uڦ*/ al)ffTTܭ<5N93O2rK5p :O^TҌi%qeaA=|6U\6u2rSZV$$a1:/AryiCX-)UT3Lx]Rhst1S~I'9!nS)j.ZYMu(JD/E'#Zf_-P*B%OP]CBƤ"WIA쨀sNǎH9R.23+??¥1/.ˆrf۔bmr& V]9K39U/=fq uě(ˡ\~ ( k3?qJSOH"\$vJ Lq2oLʇR ,N2q%.6I$u@aBVk&%'i%D.($\tx?S _W j=+3m%fp8%X\ X7Of5I5%U^\֗:A<('ahhΘfeu6жc)EF5)e>4STN\'@*OcfRgE]B1#g\7$wezUЀ}*`H7?}g2™S>zDӜ7K %(uIP6YDnW8zatwYQHbz}ڌ>i{H?UBh qU ؙ6 q[AW񍋜Պ=#-bc%m[ "ÝkIt8#>BcڳEE.OTvۅ#p)M~"eGD\W94$3!o4]K!(q:6mH>1Ž&'%s+*YUBL)]{wi$} =4Si+PIZNLwEX$\I"?3Ht˪JsRc]s@:.  f)ItKL5(qǧ L%h  {JP:^&&ɜ5KT_P)u$%3s ecs~I#T:'>f{oFfTۢ]!$8vmAz<)UŮ7)eK/ Ib$.G0+Yϛ%Ti3,IQܥ: ęSyo]fvURp%YB֧#up›mg2 gFb56 ;06Y]*"G|F+Bn),Vá|<>\ iRmϊ*O3>ă\X)ZIh -KML 3J˵;u7 ).z;Eq)R)C{ʵ2nUTfyzRC#L2zlTF.]~Q1RÎgd2:B\#0lmC9EeB-)P̋ohT4H5, JI6nLDѾ'3[Lj}%L-NhG4l^"WgU-C5O71Q2t6Ļb7ZJSa}ɶ6ϬDF:b$#āمGOZ_i1,C/UvjV MK*@Ȃ"9)]4朓g(%7<gM!58Ե_iĝPv<"tF聕=!up뵉JWY=zܨ;8QQP*)P$\Fùҫtc`BYKʵ^MH!*KM)t&mraii!y醆1鑈_⹌MEL%-tӊ:Q]qD) Hʅ<ǝi.)NW+MϺRʉ鏀3+z@U3MU2[Wjxzu 8]VRl7gDΐȧցe+=3؞' PHy|\tgG,ҥ,7TfEF4KT;bnx]-Q(2 $/J57SSH՞ \C),H6h1jy"_A+9َRWfJRvf~Q]o^B׺F+qZr#&V+2 }Lij6Ga* @Mв6Л(lgZÔ+~Zn SOkgWCę%Hx=,y)KR[‚t |D$c=D;.[8p^TmX,ݖ}OHϼ{ #j}?m$D^iw2WV/λ5O6ԯ (6n]Ә-Ӫ&7qAQkg<ӸУ,(x0g75rPjN:ǓrDs ]VndTįHI\3%7p7u=:-a>Fxcbm!԰cm.ABRjMΦeW ?|1;#AN2 q%0D6RNyhXKYQ3{-k8_:8ܠRsQBqC}ѳkI軕5(qVk]B>( EqaV!1I^+Wubi-1  h2eC uAk AqPLTݚK5\8 K,XU\n]oGj~7b_K]ʾ$fF]`J+P@tSoG89MǎbUjRIm +y~ݮ qTAUa9ȚwQ4E<'xkk45[l|EnO2MV]dW֐vҥ;Ucg-m"y2W8paTgBUWP JT )F0_H 6wKJ)+*UM\i8     7En9/ؗrv:ߡVdP劁EGo⛀cOt1!\n٥G5'=*jis \%\7'jA /g%zvi;O[2!~٣_ɼơy&i.VR>qOIYlyYL%Qy!@Cr)7@~aąy܆ǃw`&bXQ=D*Pi(MA ᾪm7*VZM Ӯe6j BlR uoBC b}g+%IT\J N|$wrc"Vџ\&1&.pEP.5RHgfÙ|EU[ S'5ZMU)>%z5d,Qn.DZ 90'z]RעM'^+$(QisWĸ/bq3E+qm9+%IЏveQ,WSض鞝+\!PMŻc/;EʜyXT\U*z7p!jZK*p* vWes0~Z0|2uّ14#&=sIX3(Oj-vHP) TG:HBފ]\׆.N%EIƝ Zmv< *Z+6Jkhfgy]eIĸfZ**GWe=ZOa=qp/#rE(2s=KfYJm!!jJhvAې3SrFrN~] }J UQ>fW+$[ (RPǼJWymU-3T'H[#׍ ?;MzED]J( ^ϼGGy8.1'PgکPK mhJBxMV ?A-c $SHpALFv^R\]vl&q ZzT Ͽ_ b_ %!N8(}V\qק.TM( 'YԷj )$??k|0q}=P?&&k.)M*GLOeĥn S}$u $kx"5C+S8v=tmYﲈ:2ΏY0~u O1eB^N!\u璆MBxHkqzFcvag>. :$Ys%=JJH nP)1vdԘJ^M+)K7Ɛ A*Z#4N&K5Nȳ蔚TfF\t*]k h+>V zN%ójv%#O bvrsTB#C_$?@)0Ӳ<_}D\: w1Rs jtw̥4RJV *RH:/43,͌U0MF}-7JHa@BPT4ܒyYy}u^BױQ<N%!}A#MCQl98},csqXz.d`ܦw#=sK=7{|(so8?ObF6M,bF܏iGfF >)}97Sc軑m2XcF?O=W>}97S`soo{#}sK]?Ie7gڿ)qy2Ke>>}(3X>܍炏)?Sc>O?csqX>)[]yG=2M,={|*so8?ObFG3Qoa3ϵ~SOe>98},}=7 6M,1{#yoa3ϵ~SOe>98},}kD/C sbد;H?>}O=W>}97S`so_"}+2':},={|!so8?ObDZsa_>O=W>}97S`so_"=++O<|X{C?3_A8?Oqy2Kw|sKر;H?>O=W>}97S`soc"=,dG~3X{C?3_A8?Oqy2KwŌ'LsKدsa3ϵ~Se>98},}='Ag9}_>O=W>}97S`soc"9`s`=2':},={| so8?ObD?>豑6?!_O=W>97S`soc"up,dM g9gڿ)qy2Ke>>}!_>c"}+gj98},csqX,dO<sKر>9ϥ?Sc>O?csqX>){XțIg9}!_>O=W>97S`soc"y~3X>Ō},={|!so8?OǢD 3X>Ō},={|!so8?ObDW9Xȯy g7gڿ)qy2Ke>>}$9},bDPsKh~}~)}97Scس^9ϥ,dOsa3ϵ~Se>98},}r$O9ϥz,dH9ϥ?Sc>O?csqX>)wYȑ ?>c",={|"so8?ObE{?>ر^sa3ϵ~Se>98},}2+?>g"}sKh~)}97Sc豑\Ag9ŜsKh~})}97ScرC|},/g"}sKh~})}97Scر^s`2'Ag9gڿ)qy2Ke>>9?~3XcE^9?Sc>O_csqX>)sZȫ},D},={|#so8?ObE{W9,MWoa3ϴSe>98},}*sKس^9?Sc>OcsqX>)wYȝ+,QsKh~)}97Scس# ?>g"y`~3X{C?3?E8?Oqy2Kw~ŜsKرVgj/98},csqX,VsKص^O9ϥ?Sc~OcsqX>)wYȟy g7Ŝ},={|#so8?ObE{?>g"sKh~|#so8?ObE{?>k"i'gj?98},csqX,W~3XEsKh~},J,cs{?%~>Ysa}Y$3X{C?7?G9g7W`ia+sZȮx$3X>Ŭoa4{moxA' u;NA-qh5Q0\x=F[(;!5a n` r.T M.p-:b[5//G{@<+Àw#o^ڂX Crz/h\oXk@_h k#m+` r^P`} D" o^Zv4!ra0o o Acm`Gtl`7v-mo Κ.v Ә[H $=(>$^ x1 >zZ÷=`r "Xvԝ Pa ^<@[O mm!Z  '{zKC xkAsMr ?,k;Aa`a_MaA(.@ma7{D sH;~ƺB60;Ć ENt[w 6 >OEVF0ZNʕ&KIRQefC:Zu!hZt'PA ^p ^[y@4wm|!ix!j tAt- ^=B|NP h4aHW76C! A ^зñwj @+cAnp@#h cT ;Ӕi;i{;9@MHNpۈA;׾ ih 9/snOHCS 6A|tZ r4Cx$`婀NpAsc}Dh\:yAa.  mtIZ$_ [8PPG pxrrfPL;252c Wgï,oK$JTmsIoh\8wS-0s l }J;9::VOt;-8ecp~X c(55-#,it)\YPOpXtgfE"8Xծ-e"}>$DGgĕjWO=+:&]SJIO5Ty8)բNakd}A 7nDK:fHU&Uď"?@tN$}#̜OM` aաԬR 9 xGH1Fe`PǣMM 8aJI)mApk>$B<̤"<H&5OZSSRj!:qJ'E$mK(i153Y LLT)_u3+}YTm g}Ju!,lpDyo;,d.]8+)E ^6^a)8nzm33Lp8I)*$$xE4q^?MQQDL,ݚ[j JJEH} ) 0M\mxW qry/D%dk  fQ[nFoۖlNό5i2 Yٕ2ԹAq]IM i3 ̫+}‘s”mqJ)p3KBSR:^KKH6A/픘g*qcJ<2O+܅so~X r܄@siAox-a$Z3X9  h_ ABPCh4$Aq 4h`>^AHahA`@ w;@ixZs\G FhcZvr鶐px^#-Lmkx/k[v a wo A˜q@`7 h@;y oT'<V?\ #{´=` ߕs-8 Z& l 7mҝ14ԓq$T#Ltfτ u$$}GTmf;$JԸ{I|<*oϽwט :{iY~; G-7o9q]5 tu(HRlC2@q#%16Ȝ8GKqFەj,\}ۀT h6yy--Aҭ-#pw(0+X7Ӧ=&tX lQZi;Z)1Xb7d$Z)LbcILq,Aղ%&k6Jo9wZj7i 觔5۾BAv܌ncY\~i䏺RBRq2ƍ/A?NGL.ZB}jQɬjo_sLܻb \MIíJNn/~xn6׾Ap4?(|\@j8 U>YJl')nuI2LIǘ2ZuMZo cXόtp2#IZ =qC{`L%IM8Ehi|+k_h 09BH+x@ߕ ׾ xpxw m;k/T s}ps-N}- zCDh` ih$_ !x/ , AH@q Zok0<;[n wP\mx$rskx 2>XBs|+C/t฀4Bxd@QµtZژ\3H>,pz[+j=^Ŀ:P3mxj?o`:kx90.3?I쵅Ԡ4ۙJcc]a-(ry+1X8dQk_$[)ϐ+چzi&/>֏RlmȩQ+U=y_`zV5w[o 2׺9s.$΁ʕQ?c sXItv^;@u=܄r;Y3,ʪtR_0t6Q˝$fe3Bwf.ۜ*}{Ǹ؏:6@51|xQ i3ʹ@@Qv>$O|gRATԥLe'c{0WfOGU:mPLҦ\$kdU`loct RX bYs$д&E臘#K`e&r90iVJ7ÇO K}СnX[@a},p$j6]pScP=dj6^&S `4J7P=[T7_QS N%>7owg u{]eF7*5pB-ɍx.9EnKT&G ,h{:5/#ED*aoRYiJXg '_=Җhi.GHmѴTI)MW1۽jiJdX!7#-i ӕVrSx8 C[z|Al ȸQ,?2!фSj3}ǤDh`!AĨ)'eW}n1{w@]HB:=P9{c=G@7mWփh/hAc`7O!`@t+_C A0;hpm {[] ;- @!Φ,_8zZւ'hWvK1q mo= x4^~ N\{j!k8G y䀋s`, փ۔-,-9C@ ׾x9i.\mwTH/!\O_@Di^9փ@vZ>+DP^o6TͶю˱aF?JN]~4c29F:s'.(>v5c2"|1߮F](>vwǸsrX#߿;o|4c2#k4s둗~pF?J|pF?JdG1߮F]k:1P}rr9Տ҂Yvc22pՏҏ?\|~4c2;@;c\?hA˽/p~GDeÿ(>yƌ~@ȼ/\c22s#/,op~H-:s#.þ̌4c2/CA}r2{|ÿ(>x6ǸwlB01әxwǸw#.y?1PC"0Z}q=ÿX(\c;я҂YQI.w|;c;яҀfF^_h@f=2fƸo¬~{9z9ՏҀΐ-eF?NN]{ßX(!׌s듗^pV?JF]{ßX(%ţews 둗{{~Þ}rroos'.aX( !?1߮N]ß(C2rj@dTcg22߻9Տ҃듗~V?J$>u~5c߰V?J#:ÖP 1ϮN]~5c9waƬ~Gh F9˫F?J9u~5c2.8s#.?P ˣaƬ~Fo!c\?P}rr[c9ՏҀߠ'.>ßX(>woj@dv Xmh>9w9ՏҀV][\}5X( u0F9ˡaƬ~\?P^юr2jA˯rV?J#1Ùw~5c}rrj@d&d߰F?J'.ÖPxv1F]rǸs듗^F?N#hDQrr>ßX8>z48@dV"-{돗ƌ~1h@D7 c\ƌ~1xuh@dP|4cepF?J"r1F^=(>yaƌ~Bi/=aƌ~/>^=aƌ~G~P[s덗a >^i|y1P='2W$нdIå'jHJ$/ >~OW{IY+~hzO_S@('ϖ /a?%Oԟ'x_X CHJ"Ԯt_Ek{+~h "2W$zu\'=&S%OgP~RI?4/aZ[eO5J'ӶЇ( Ob)?%Ot_Emoc%OkeOkxRu>$a?%O{YI+~h=odI 4zWoCG_E;" )?4WnGP֛+$S<:zG_@hԟ'拔/X,d){I+bjMȧjG_EPi='OdI{ I+~hGW$4zG:l) GԞT_A5'dIx<`,2W$Ѕ2W$z|ොk%OJ$/-xDE?4I_E4zAJ$G~ E?4^d,K"a#+~hD?a#*A=#d) t_A='dI?ȧzO_ES Q%?4II?4]jW_SA5'cL ~hS2S{IWyܯf(rȧjI?_SE,odJ~h6W$w( Oa;d)OzPg5#dOԫiLE?4]_I?4RAȧ- Oa?%Oԝ?ȧ拻$Z{ H+~h=d)c+!g=$il)Wy E?4R9S%Okx ?a&_SA5#d)zI"rȧ`︀4zI?OSA='\)۾ ,J$a;+~hkȧzI$/<7( ?a;{+~h~RJ$/ h*ABp@-47o_ (F^=+i{G8PɄ L-{;/[@pf ^úxHt;6qfVCC]Ⅿ }s X _X0i0C۔3DpxA[ja38 Z B5:k o7z@w\Anpkm 6k-+@~H-npHj`  xIk } #8- k A:k (V#Hb<+C6!\zZ0qk @5y,w-7S x~ =D>Pkmh6h76-yEk`4 :cfHO&h=`~$7c~pІ4ZGěb /xhCjԏ7B=>$'xdr;D_i>ZGě)HI&uBX0fH4z7Di8hCL6R>$ f R>$> 4!kaZ?ě87V&hzධІ>$ ZGěc 6? Ro4`?r7DǮ xDC5iopfR>$&йf\ț=57DƧxvS 7j=>$ 7ԏ7DƤAkDq0i?o` OR&h [Z#BfV&hg`>$07 4I4xV&h04pI4a>$XzwBfH43pZGě_@C{M aj@?&ho`_&hUNY/|IуfV&hi͈vCD!`XV&h=`r7D#BfHIу^I4L6=>$x$ZE&Hިoix?ޭ#MЎ >$Gmm M pfH4ZGěkc뮰R470{KiobdX K@C44/i>ZGěd0~V&h )o扏/mt!`XR&hc` .M1x5<+HD fH4LPІ+V4}8R6"fHM>$;5o /Vix?ޭ#M3 c3V-"ofH4LA@C{Lio/0#M5h4@ZGěV&hCN?sho`r7Dΰ CB!R&h=a ?ܭ &Hm4\77|oVkMr0NL)H&h4!}`R>$X;|I&p_Xsеp$" #h|> M ǔǔ>Z m#} ð0^< ix=qkC|@t4^{[=i^p|Q6.aa "h4 o }aA˔}ak !| xnPINQt۩X1HAxm|b\{ip ~VpT/8}A6c A6GM70jo/oֈ\@EAm -`X~pK-t X`<z'LZ(f2y@@uܡz󅩇^i6r]Ӕ ǔ m "m@A;! @SZړ [q Ȋ5X@`m @Zk8/h}͡Z Zùy<_Z[TZtV4ܬju(Hja1\QYN3,x WA;c^ABPiԲ d98IJ:0*03NSDMmk@* :$.BnN-q?PI\ڜh!iZmŠ&kvw%%dܟyۖiݿe(Wi93qʶ^NӰY1.!fx9^{]D v.3'g227KMK7:ݮl6 xo3:[lVҒͪbb\8NU9ܧxZ[hѓ872̊:CL _Kd4u(N׽76jf<[aTS9=6{k /x! 0/GOU)Y9t1,S*Д[Q80hLd̜DOMK0.ꐁ!7>fKf;IatI|aM*cM+B[;,JW$yA3EI96Z-#^m`>Z Bk_~mp !^r-axDx?/.q:C;k^}`$+Ј9m@n5X=ӾA0Ȁc*xm1-!A;@^,hMnQ=@ͻؘPxZ0l ؘ< ~$hkn`8]@{X^ GM/O` @B#]5{oWC@O<mP k~m+>{+P  +6;w7rI=` h@'MkX[^6czAmn6Ӿkx;io:;MtL]A= B ЬLp Npm/xV[lq:PĢ6H0'f/ nbE? &5kq#  \x= k1h4Ax47rpρHB4z']  p`i ;z^hրX@(z A-70[m1nb-Јw X c# "" PZ HPh[-!B׀ܠ56ai~p-A@?\-IK {n7}-?' Bm ;@X[zߔ}/h/A@; r{Ә5ַ-" !؝ :$[H,ym|kApt_kA^ Ƕ.o7@,4--h l`]x^(p zx @G` H79Ax5>V | c{Ā5a KDy>~[H$n/anu00=tM8WpT2Dy"7$?,w@-^=[Kcx[hWmk# h5/Av;[1[ wCxx/X@B B@𛈸Czs~P@\ᵅyDZkx_xC4ZHm -/";ЍM ]` r{am\0j`;@- ۙxmM$` wZEt׀|¿(5ZakxV+7>@6.@@,juFA <-XA0k÷( G# { (70P h- S5t( " b`מlo;NW׾+h4"ܡߗ8ZZ^=sS:@9@tnPO-c7<~XW:Cnutmu¾ Hm`ܯ\+@ixm[@ژ-÷|\a{AaH\:haNDAs|- 9m\!|BB-+ .<6ǻPa6p 0jm 0GSB'Qr;,u&A}v]x/#Xxx5 op;k.P[ k->mx6[ o6𵽯c{mXkA <͆_`<Z G8w( h4-v. xWntZH *4XntLm".m h=p`$8={Ah@ ߖZp=Z Lߤ?T#=i1X[m6dxBՈm<ZBt2NcxZ|0m6|kj`Z`{@mt^D_.?4 롃XWӾ(<M7E:BK !}_ Ax/(cC לp;ZNpiTm`w@+yz@24ýbm78(<6m Zv=]%zs = lwXW-cߪ}ma6r#_䇭sh/(< 4b-ې6 o :Kù6^ mkH4kZ [XsZzíms,m o\+,Fy@BC#;րdip \qu Z=i#A~5C6+@{x=Pq &׬ s# :FFඐ 85xk "~i_! 9Am4\- !is:xzmÔ'}`  [[N@_)@j}SRצUXKxnH1\}!4y`­dB'L֯p7JLT鹧 odowcoVwVqtX]t6Fd/y>Hpr{џ079Fa RSWM BBE~J<ô)L ;3/IJ\HxmcZ|2t_^\: 9E*ZYߦmgm8 NXozlM5‘gZ:Tϳ(, վY ;:q|8ewן5mvoM>~%IഄU h|L`40Sx͢ԠY$^1W^$nY{f|  Jo择<͉֒8^RG",_!2(f~] Aj[oiq'XS&49x$aJM=цf'Jlrj˜x$L>#&0+(v#zYMRٕjVB] Lz iJIbFd\z BIPhwȜ!xu@_,*7Ox1[P̴Q,mJMoS{,!XR7:/5KkWҍ-c[z북śڭ'o礪Q轢0Mh?'ŋ6Frf]i>G6vZ ZCX .z9AvmMVxHqp<_~: M;VK8W},`;m 0rB G(@C{@]r}pVac ǔ܈\E0lˢQuJԳ6ꬤ(Z(x2*fMqf&BqJRbI$wV)m\.̻ veE_$nvrBRB@ivgiܪ,5*n]`"ITxJ sh̼*)EHsѐiN܍Ì81)c*.%}sJISh UmE-`*Ŭ9P8 c,z@9T: K! #ó-]XH"KZw ozc_J '-%)#ԙI%Y.([CͅJRBͬO*.euCҊ125JRʬUeݥ?Lh. 6sEn!뙑JS?\zxÚbqèβ+Kե%_@]H&IV~"uhq$ޯH5!`28hEQ_ÎK I<mWF⇎Kîj˽6ʂzО>s !qupQޕGA<,c^̕RXb8YQqA o*:=Wx+nKꥪ:."6uǂꉵ~B"k2TeXrbRijv®Nb>k %8E1W䚘uJR-mGS/s0y4ܢT4SGn'MtBBls>Ta.%mc @.NSZIIxhZ0%fJ|(|r5+.%R }saqGI^p)*mJu,LE.! I#Ca2us4)҄X^4ޕ&f 6l$lSܔ1u a! A> JqHJ g=}Z" 6KKR!yEkNJWvMVSu2 *Tm>W,ܲ˨TR`&AZ*ɨwE>#RU=[Mci)P EQ%>*Tf~XMS[bZr[@)RTAC<ŮV)a]N2t]A$E﮼R8,AFXc5G RC0ÖFÀ>XL6Ak l-XxB׿劍VnMhSr, khbMj uCo8.mhZ'-vy85 s7np A/nEV}=PyC s+@ 0<s @-t- tZ:Ax-o(ZCms\]h0Z;p c?k Sui h hBh$s&Yfh+>@^*N-{eG$& |[Ӄ<6d&PKgD}ɊuD9/; zUsɐgXDmlO.Zg_W6t E6u&uXƛXƵ]jqT)8I!:xL^JEΎ挌HI4 $H™oTj,ue>Q!?^:ƌ^5\x&酻8eCӒN?k'Dj֛KWb}q=-1;l-2qpJG-0LQHhb ɹZ/\xJ[ʌ|Tf3So7,:p;ڐ&~|0/[P!Ktv^2Z~RfeexNa/1]*Aa,88ϸtxF9o,' ū>f#y:ѩILjN{u>x8CPGEҭ9Fwy}# bɆ0Sv:sT۫ԥeZB㔫YOڶ)W0ZdUJTtkoL:f,MZ$nbPOZJF7@+dh#*2ݬ$6K.L4g(Kᤋ)@Ǐz-[#R)7JOoQu*WŽ-u l{Xʭz ^VI3c^f.d]|"w\+6[KmVI>+!!AW,IN~Ee1*s+-1l1t)qAg[RxhKq ƭZcX˛:xqk[}1 dOE nt٥jYP"//EaWz1Ht۵">}ZoMEm79p!d4| !#m.p(/r=s !` A ps8<[H/Ȉ/ x5| s<`׺m [v6Xkm-ư^Pi~Q1,pZ<=:qˤ(I5{2,M? ,X\J r<̈́as ;ܩ|t d>mvyc,unI'x婔*B f.Uꖒ{5s=ԃ%%Run/p!@{ry9;)ܓۙ9/JÓhx]߶x<_(}p KӖ1N %.,4 jfa(\6~Mϓ,۞W%iO0I^]!053M>TzQz8N/{`$|A@ŕ^6QؤMԁd^ǹ8"~x<]mU~Oȱ11)[ !2[ꘟ8ffdv=s4RPt6%/#d԰d Z{w1w`ޛrYi]ş'ڛbx¬BȜKjfG\Sm$.Z`4w.[m#XQaĪȇ&E(,R{:6& (=yśl#m6$EfZ͒ȋv%jҳtIu607\lN:E*+VIdQhl,jLR ~a|W i_BZdX&/HG:Ƭ57I>"g@']|8kKJ%AO~hS*3fU^Ks6ocgQ:CI$~yl+W~㬲ŽO,%) KWj=fekFAajnZG #Yd֩@Zmy#CGisƨzoS3RZU.U:Lb7Lm6-o#ab~c_OJSp :{s[`ZaT<ݮA/+3/b^2E1#\qpazSVeĭ6-SL- YOaI2HdLv]4oBEF&;j {l"A!!:JXpS.{1*-AR]kĠ I68^u zJ4mC+1c.CLh/3}mIY:eO>{oƣ$y=1k,ppD}^ |UǜG|/3ƹXs^3tW68.Tqty~:ŀBOV9ȟ{K:HpS?{G pR<:Hm.g>>R7~7IT#/PUX6V{oƅ/LΩ! kuSlv>V|c_{澩I[{;.,%K#.KSƂ~%jXZ־}l9ɍt˦UTL :{d\TΒ.ɮe o|q9u)b0J֔ Eߢ|OO\42r SfpHe.L2-G<R=b#D^ZmǙ7_t[ڋS=gI-2=Tܞ_7j'gAĐY`5-:JH֋%J-ۛ+6j)R L_ؗ^NFߣO=8|tݮIzeJ֟W'҄R IYa$+W~tsW=:-qycAm#6KyA~H}o =>VuZ5)6ᛝLRS]Zno|m:>R ˦NbܶlbU?1S_*QLQ3v[pFŎeq.jtH4 sǜKkNNy9 iӔ3,%mVdEhraIYo/q b SuF@8-!+}Z+YjS¬6IWxp,v '<>Kj ne(CSEh3xBq7Թ/Dzt覓xqȰ_vF,쭩,ޯHiQdGtU'Aꚽ߈}ӸFE"$EvRWt{JY"d=eˊP.Z -8\ uD$Cf(y;ZGfxnT#Ahl @R6'DjI!& THw(=+ Z 6o߉-4i=cz&j|ʇ"vå+-p!7G61Z8G:)]w8SyJ84W631l;TfLE$8ё96C-((Iol"y&m($)/*qe8R_$i+qj*Ju+u~T6 !G##tV"  SGxxOy +aL]֍EFHYFX8uxVҮt\0!oEBՍ~) % הtCΌ{eaH ;EVJ,<Yǧ8JE]N8ax[4’݊{fuԓ<.}7Hr1I&suhiI )=k4%a9.ݒ9\d2YZNLoq6R\jr@(%=PB1I]$v}F#K(m(6)줹ty3;)*QfƝ*FI93*rHSĿ|Ijh[gc7QrLuXq‚OtYd2¢\9"qd=,үW}IveRK* 4D"Xڬcq{Di\ʺ8-Ҟ@jʒUe5#%i7RL6S1 IU(lɾbۭ- @ѕ=#'%5/pà.?/oa.tR6[N|/qc/{\;n.={]&Z\J翥G+ ?ңy/61pӠZ2asZxyMJC+|"&xt[翥G<'(Kʢf%jI.P G{Z={9[qX&,YAJwIHY LQL$}S6U,ܽN 8` Kq:{_2' .nA=xy+)GYiBe; _OӘ2s?/$B]uBa*lH)<`ɪRUzM TS05lRyi7.$)koLNISf- zț 96$e2JPnqBCХ!JfZYmEҥ$'\+$:uJOis!W³n3dHRkjF<&lvUZ_)XPLqgPVgvB'XG 8 P ,tf??FJH>s ڍ` ?K|\_>)\BRm}vKo7:G\Q[,(pX̰D)[M"Xm DWan4eZ[u,gwd}QЦI[#HDU6lyńfuRVH$x)ݬӶ~bYv[:xFA#>QO)@"=|g56 R{ݺkI7+N67FWL$jR~uNKTC%Vu.<1a%\Tˍ}KNY\Jh#h-qN8Vǹwdŧތs DgBЦ؋lN U;WRqe\Pl;6-!NŠƗئxey\% Eḇ0`Bz^%U. _\Nf0mօ.T#7LpT2]I@֑ۡV*HqW0tS!^t:\+cL=.H:;Ţy2ip׋s)B˝JeFg)+P$Jkҕp)49kI_ǼgD)q6&$dRmojMkRRS0o_-2#'''fR_KIr_bcmJFLwx$ gˍ6~rHqvucLJ"̝^m)/2ꫂ.BMɿH-Od;{R}J:qS-17R"F&%|+Q#RG8降w}ĜvRi'Cqk1ʫ$0|ICun0,Il#xR ׳ù_-!ZL9Px;$R*FW:$*="8=BngW 'C}u;F%RS`%]Tw1GsiָZKHGASP͌xS;"i_!pĴcF85γeWi l$F,#S61XiUSnTOcJriRX>/߬aU҉Zm߬gTJajbCW[Ԗϭ׺l/NN5gs6oSJ!fZKdvG0ZhXxa;Rxujgm*Ё{kḁ̇OYarGӒyXZKD+W e[prgi1YtuH9m͛OR;>1cԴ|%nbReeK!417=2FcHIp #^Qne <1Zνg5zICFJ>ƿHvQ x['-\ l" &3Lx[[dz4jb1Sy!9xܻ=VTى锦ҜlnL2–ZP]!'O#M8Wްy/7* 9@i[JZ~ϏF}.q%V$Z/*0V%P#}52`;6&:uN, kJvA|/)WBs ˻b]0n~ȷ1+*_H "c=U*XV6©TQz Į62n4BJ!CQģ    uSS-g嘚h2Sv DΓjj|,w^T)O>Ԥ!0e!cN蟑RIFfQw ?Z51SW`G R'Gإ`ܭ8gpͼ}ErºiK2%)7mo%*fd5ifvjWIB!QJQlivJdf0ۓ*PiI7_rW="u480u|Ű/kIY_ vo+;#/Zjےbw5Ke奩Z:%-$V4FvgJTjk7C&rsNt'RTQG䏣Ep0~U?kDk\x]vg2)iTW긕somYqfmtD?T=%U/([@1ϖԾpN:΁f^ MAƵ(/+rq!)GL O3{_[^ZWFHVWajDT L@G=;.:%¥rIZ "oui2Jm.)=`,Ąʮwݤ G2JVb'mM!6lf^+T萐TÒəRJ@|1^bqڵB{BbUQ)\%Q=-8zUX)KyZ]dǓ&f1/uN֌eCi(xH0z7Xkh%WU x7| VD8(JY s&zLv)>I5J.^'Dp[;%+So/{ 0!;SLÁ W)OJSneLtۓuB_01Ԋp5hbU/qqRyϜ[*Ih^=.7p׻xSA"6\D"K":mHg=)dJJb$ʒټ[-q^֌-N捭&ر-b -4\MϤ b\&&VV")J^&fTCPE44R^OeĪY*^X!=鉍̎GRV8`ʜJԇf%CKQpRkăI!**1&Ő/mcMb;=_ gӤ-jQnYHe eVn^t3BU)֏)_I:{m?#|&96p g L}!&i!2{ &bU8 uMJuWӉ|)5D:NOWܕ\ ʥZ*+gJWqV"FU!E.Q2AmDCt&j>Qp0_:qNݙ{av^zLٮTlM5]I)(.+cF>1 Pǣ=7iT۳98'%`!V;Auĥ,6Bh06mbSBLN̡.6Vmٔ@pT vĥ,Jxwx bvGVԥLO,aʼ%pv% oILP,iL+_i'F%%ed]-ď5ID1X/S[Gp#c.iVUW%n368^%F sx3DW Jc&.ge|7=gN$s5qPOjϸ4'l0VBNiQ4C#6𔔄ܸCI"3,9^SW_mpGQ]bVJՙEc<*3Fݠ2R GO t3SQ)UgiGtהkݔ6Ch6PE{Ep‚31SDB5B%[X6ԝ†^VRg]CeĶm/|`ڞ7i}>PBz=Tz+^c\OTq)4U=-K1fzÕPL9;M8t?"3($3FZI;mJ(]OJUg2ֳ~~eIZ@)JOQ c [tǃ.l6y٫2 )0,\sde-{RnyB' u'Ni 5&㍤XX $J<a*R_yۘ# ҥ)Uf*.,3ޝ-E7ǰ4V{U(EbyW#Fĕ &*ViLζ>AԉIUimtăOJɡ€&=[|ebonOHHMMVN:sq#ZDTւ/J7Di";`(5BdcI7gѓ8FяbrXR}IVYe0 hiB"^TjQr*׼ah4j]c2Wl$%\V*<<<̈́~Qhh&ۉ6bh<1&B"疱\R:Pا-<~Hf #ŻuךĈj]X}O8YR!@ +FJ\C6km1օ(.O8fME)t1.¬$V14Gk!;i}\Vfe42DS?4@Ә ?4o:u*2j){*܊Ko l(`bDf$ܭQ/$C`uevu/360իO%$*QҤBu D 1#4Jp{5 OJM11/TqԐF^m/G18©jh({'h \Ыy\߭ЪmΉEOm_t.RjFf, zT6O-+"cQ-x51 )=[fg .kqJ!5ST@.&7=!:r¤$U b|=<'Ep!}#eg+)*yZQSiu6[xu,^9T=<%.)8,oǭ#NxbF0<ʚŢѹK#%*Jnl Xh:^M%e Xu- 1|Oيn$2.8OVԋqw5T['Nu]~Ms5&h4ԔT5,qx8iښsN Ib5q;n`\ѕUsgRSiBۘ Z R6&˦i*bY,GOi烋_)YӔN3Rq5Jmͤ}`+cp>Xم;1^{j2؅2CRje.K 'J$;_Qn|Q RqM^ܱ uՙsrr=>igxN8ME]7]Vj$U 4k4bLMV]ךDʖ(;LmMO32!#^s˯z=ЫWW9$I/ X ,!v6mv61 zz̩[巔ˉ:Z5^obv~M[T*d,cg%yY !RS8Rfq)zYeiߴ1JhhMt;0:Z~u%$k^3⧫L[1 Јzk5W(Lò兯nԬSMEV6&%$%BYUbyy9+n2vnQf,ke ]v0:Bqvaƚ"I(_<"щ7FSK8 U.=\^%ԥ e|)R妑dhl<ëe'eXTÔVq z\DV]Wĭ>yq/$`L^cܾ4J*eaƮ3/TĴ4̊;&:T@\34Z*=>mmh+1@L-M\'zUB`MT@1َů2[Lk⚚1?IsQ3rV#+!^ ui^6asҲ)o(E'|tDNXST?5Pj^O…>'S }j&_}hue4==Ɣ'֊F$GA3OOaEU R{7"wb鸌I AbRakF{'Zx VO3%]LprЈ匝&Ϲyq@\[xۡ U]Vٸ]%jcSzԶBbcidRUn9%Űg/hXuyi)3It5g+1*fy,pc¨>ݕZQtTj*2fXmKO=12R}\JaW-=irq(ZԜT?e0QcJU &܁1a<9\P[[=YYU4cT%efQqRTJHdz K|y[qa:TLS%Ƌn2R:ԃ)&q{r6,K*l( hkhۙJOU-R@nk\ huMdeoUfaGʱ"q S(ǎJd:0f=ٷ1Uf.4RpNrLȨ˴R('93uOqԬVm4I<*OK˰򩒁 .ſ4qqu\N<] X/Ü{+J.o~ޓ)k3LjK5sD2)Q>ݫwD6#P\MzXR#i%sIYE]Iؤ-lVA:۪6x\]*%$o KtL,dc_jPļBwv+KB8P3??eۦOa=aSn^DꎃrgiJ[+_XtƏRaD\ yYE(ƽTjVu \3zuKft'KǗƟ]ƟY!A*؎P8(L34fUǙ%VNǵ^ΡJUb\xGR86Muz%@-p"EJccU~ٯ<1)kNv^a-:1Ԭ:mVRJM2 귣=5$ZVM>ha7_X}ЎxH1MZmq0A" &e2 w!| Mb{ӞuxDpҸ6|,_ܱ1VHW J(-A2ܽ=VY)|,I)bR"xeXt.5c8mKWK<Ԋ0jqDhT5LkӔ$) ^0u,~bJߖ[8ItRej,e,/txYm<^.bjYErn6,oa+WﰦFc(rB­RmVN`JiIU/xgӟݺКB&2Nm#.-%e k.]F?=m1ʁ 5)y;Әk-$!uJL!\i4>𾨋h[hummUrL`r+q6ΩT9ڋ?(^[aϹ3;tǥ8hzLFT4},O(~QCܦ=zg-b[B"A})~JGt[g|=9NZRFIFV#QE9.;9|=:tqMbfHp6^1#ZP4zˀdz/^i|M5)v(u $$*uIu4[ŴsZA3N({zbpLI6 A>q='T.̼V@i7 t5d=m\S 6 #kZobmJ_NO5,KjH\$(ƕBa֧H[}O -݆chҧ<#0J̅*G iRJAdıSW8n6PeӢi؋6MʥR + 7 wqB0SOOT͇QUx:N'm3I[ e\.(؄""b+̞"zfۃJz5Y"?`qRӏ{P[WhUTM$:7Zet;Zg*.YWEnVzziI,3)4?N;d98̻Ml`8cTdb3P9Sϻ2q&M7S/")ނ+o٭[U63^]THJRԀyv*稔 GrU2͎+"2yTi/Bʺ'RexԟTbUM$@ XpV0w2V1DW%07cjK6țuŪRLe mUpiRKRc1D5Z:AeK t < fTpz^($xES'r}Uf S 1i]RАvc`Z qĔ|sGZV_솦VqrvܛU28Tҏw k61hZ6/i ^(Jթk [ ͯ,s"itS1ZR[e8J:(TCSzvA 5̳a 58tI)fm-ȿ1j^oN+˒ɯWR:M!w3vB.nfl=`RfPCb]SO; 71g1V+jb.GOct1^WW94N1L 'K%nE̊&^Vu0c5Ԫ{*rYIyN-am5"$[L/RbF1==2$qEܵ4JQsL}bʋqx2\̧\ fe3 ru΄vUxP1Ij3:}qkeӇNQb:flRi؎ʑ6˴JNGy1W KC.33-UOYe^B2ʾ2ƵT8gCWJ$d&38\J+!<*͌sڳVlÁ̯L&cL6#xMdwtH3%4Jf[JNF<ϹpVMlhABsr_Ra,!-0ėŕtoMa0H-E}$zVc9f杓S 46#z.;{-;|8-[rQ9[ղ!~V7--zKZe xc8ib*fІ(I>Eof*ud:uoY'uelnc|FHS^irdEM[gxF4T%* M9t,Ĕ%-;LpK:oKr(e ycњεZN ĘXdBt*gP>$1^ "IPY-sL14i/~x6㔌1efM%v;_?>Ǔ-hh(:rT'}rSw9=ҿ2Ĩ/ɿ4J'n7IU9SILw,+~MWWeFnVmӂ-OcN6Xjf8B XN.L׸&(CX99'_?Չ:M).㚄M=Fy)׵5r2ӊmIPo)FO8nLQPm- (sS˓Ԑx8nHL=ofqcњBH:ק']2Ĥ;hY5E3p[%MR䣒)KlrHx\cS['$m[NӖ7*; [Sh1Ap=Q-!Amxq(Չ3n6 !8{,*2ԪL.cE K^7N7#ܾcvD*:fE)1".tIyv&d6KK5 /UaE;ԵbjL&焅vJjmyYӼK>K#nfH=˷0L{|O/O͢VanQM7vjURyicAAUcy&q5ea98%Pb۫Ӵu1hci.Ԩ/3.B͎xVs;)Lm:sETT}V+5V0-cEi:hKJ6єHREҶ*bE6S`?6HζEJgJ|,S .d%KY)x2Olw1r)دIn$V쨑O,*H`gr-Th9h(7-KC*m'Sk9;+=w;Ԙ*6uH'ٰS%(.u`Q{^=>Tj2Nsʺ<+R;0u9{ YYɑ.em"\[QR}-_tܿnjci53RaK+)[d[`xInQ緫>m=|t~,5W\ܬKq(-k6K.*05`e~*[`Ɯi}q0YẌ̃RAv%*"#eexeV%²Rruut:[k(KlӅ6M~l㝛^Y)ZJTJQ M,ٽQN6Z3bi)v_k` {Yo/%^3.LԹqŝE<\F[U>9'] IN]Glܛ񄔁뎞ox|f.HÂ0խ$6ų2Ip4Yma~tdULCʊJR[SRl#B Zר=Syд4$vqn%8mZR!DeG&2$n%P"YzJf,S34к^TkiCXL[,gzXJtϨ4u_A'?:p-jz0;Ha|WLLc@)n*!j.p`9WqzG:6Iys8mpJTTJڍb2'2H)(:;bv܊z>M`~/S9ٔ˓(k퇪2rSJ]ྺۊɯatJO_ 'T=bjESx&ǸGe{l4}Q Od;N4/#JPmyo0JEzbka]$b#33UdrfmU7s뒟M0n5x22pMP1{8yƴM![puѡSYu-'XJCO3є, 7'#0ڕmCMG}[ղ`!5:Jsc6<*d`$m̾xg>6XɏG2Î{&] М&iS) 86iISjmT̚@Z-'~$Z;nRuDJ(N/lhw"=S\|4\A~ZJc [bH&&3KXC WJ\2HzrL3Sc3LdJDQ`8Fy.%Ie0w#4Ik5) Fq1&$U,ZNQHޥjۙm@VOt@U}q!\H'%YrL .lʂt(g%UdJPe /;M,\H&^e]4EaJ .oTJ:iHT(4m^q9kV hj0InCKwltq2d6{jb70_KҼԶ5SZRUyt:M_ D`GS51Vn]FP| &q\#}MF6ˮ_Mzj8Blu:zZYMF+ѐ!XFO%ܴiM2 {EZ6K,i6&ۛA2ƶ1U_uxQ^[ҥ`Dmuy3qW~O(!iP⃎k(.bwݓ% ;^1w!Ӭ 4awV1hIUL+S>1 kOTX))wfImDwi0OT [U7_4N89a5Mb&1m^PO!;FM;0q->,x /.㎽+o\յt*RS-8-)x@vbiٗ71.k2r'eVvJx{S^ u7S*M;g*Me KKM//*i8/1bʥ Zt*1r]nwE<+2ף4>*FwB94ݩRh鲵.7lLfCnUMu9Xӥ=:Z%)W3U)ɩyy.m-Lvȶ;EM7*ڃpn#Ø\ ZR-x[}8I),̧/'[\ձ9!L3u$TYXWX7#=;-QSKS c,<yqa^8(k)"YC,*q!RWV {uk rO)ImH.Sb%QPȼ18 |_6ģ(A[% $>[Ymo?ժ}\f!,Ա.Y+XilϽya QRPiW kz&)91UDu ZZZ͘`R̴VzV}JIkRF_IQK[R JTr[UݞzMَ9D~N2w-0嬬*$ʬǔA?%(O>̳=+3&M #e HJX^:Ve BCťzW'^SյiQXmhkzE2 eG/S8Ԇ7JxHRq4C=*Ju-$ޤmMڻӋKR:,ڬJ8ͮ5cʼD9Luʪz;sBm";LM>&$VK P)v#SKu-dL{}t_1MRx%8_YOkC1q^ׅmɭx*BD醛Uu+J 2w*\_ mJ&Xjb/m ȷ1=6TמWb;zw(9*ixAKV"-3v!0l?-)!l9U%*`lV/[R+,L0)lF pysi zk4@܈OiJJl D*UA78s q}M;КD|V$I6Jo."nKw򈉉.ѺmJD\)_E|zUqb!J(ӤߝDi͝PRSRvo$ TE+mNM{#MPqv9Hܘt(qKͭ+.'[k*OdeRPHr̘#([--t=qQSZf5lH9VRU*sn%yKaI*ҖXoCxg&jUw@ :]*u{Hb|uMVnp2BA8Z%R(yS K &6hݧnl~/#LR+x^~anm VIȼ'i2$>,1eVTQ*ĕU2Q0hJҗ%b1Yke xIJԯIE͆V.-o[6fa\qk 8,tlrJkq.0\lV?,wFzLneǺO^ iTW_M2*A %@;$pFQ :KsKiŶT$ obU](B[-!K̸I*<$#25;Mau m[l2Q (:u%'L3qEiHp5Gu90[illߺ#]TV'8쭡L/4I3!8C}jSj?5~ʼ.!L1ZΙDt1\TWkq|*@0VӟngL;6܃JSm6#ϜMUnYM IKs/ur#!ufèt*K}6oDz0u,uzjffݖuJuO%(W61bRCryEⱽFr5*ξ̴8m=Z7V2W'>wf$;>QO/3_RtQ'k9Ḷތh8y+5)txЫy.BQTV veJݤXѹy<͚k510jMrҙ}8(!#~Qwi5I2>ZT9e2dI %j=HipvG#!IzF#-z˴[OP=NQw_떰xAiSg)WFɐNjBo|R- YLI=_jmZk&j}33}yWe(W#^<$wڶ۫l~Mf[iA*xȥLeNP<\#$ ܵ89+&U1}mFY_m25(iT*.&Wa ձha0FVRZ(0p )e .XNU?I7=B0RA̗76״Vi숬ϓq#Mb$jA#vlёg Yxʶ%bZy$) JvDjl>+-=0J{Ƶԣ˳!4!aqs&rt^-Ba&ahMJajQe6tmhLHK%MǟYMI9SJ}.QNJv^ILEG8˸|dj2ORRB URIT˭,BO&Rx]h͎8]2 I3 =5MKbIaz;䝟tnF軜cE\7!Vu4؎)ǔ>Eؔ4Ӓ؊O&Ԯ=t}g9ZvG'-ϽFc e2uV7R~zgTA[L~5QS'RUdQo'y@œ*mQo>jMkV*{/CÀ6ܥ)Y},x^Kc\ I3q3+M,;3=PDBY:oDZy>C2xx:<ד);JW*P9F93檏p+2aG|\cvf" gCHdߔreUǜ=/)/)E`ۺ8Ԟ+&O[~W&yBbtLUU_D $)Z[fVя(3)&da㾷#P[Lˢq2Ex+⸿;y7gqRZfU5nip̼SVeAJm>&,,2Zq­Rws$MkOq*4JWhRiEg ըO6 MQ+G˝<'K6?RYyz6k{w9#X'hzZQRxxk^iG"i]!E-]k)~C߻hƱvpd%2p̴i~tKsx#KU2A2Q4'?\BF [9mb[FM0]ō>DdH S(ND~ 8vzg I2r*!|$DzOUGX#RILY结&n%J!dQLa9/_f^~BijXI0J}vs-I'ö#\㦫sSn6$’r@6>pL76y})%k1)4\WXI_ i{u9u)tžİ [cphen{ٺl[BJڛƯw cN 7 H=EktT)X38Ĵ 7/t ?cZ̜j!0neԴQ<)E'Y zc 8n3A\!Y t(gMA xCS$Zp\(ar6I:y4sF̕6W8^)}2VN3i*靦SkHi&e $"=YR YR R Q对OC/4:5/xj$\i#.HZM&,vۼ"ά@tԌ~%$*azK(^VvqeDžA})@>Gtڅ--=.C:T hDNSnI&fH6?{Glbix٪`jf0ҽ!$$0%+*eh8^XM) j5M<˳mӗJxȶt*_b4oIKj|N[@{[tve^6X6Aaz&\ӣZ++j5^Ud;B*Q |x>s /LjTH }Uf\ 9Nu @B6[M4g5958by,"L{ۑXװ'ISM)Ė*44qϮceKbmMP,- R%!LI7u}mssK6%O(*"h9$n{並-4Pӡ FKN8En}';Sf & SYEB_\W4z{V*EBJGLGK={ "q*}}ЋV=)e=Ea+Ze-'Ţ%| ajtaߪ'LK대;(CJט6qztfc8+2&P` -/TGթ=-4¯޵Ggazn{/2PZ& t[[r&mT өq5_Ԇ-<pĩ@3 n"en+y k*T\Z\oq$poaVsc8JSR럟|6IuE╳e")O;7?K9t'GSE"4c-^2+R̮Z&a HYpD";55oI|Yk'09yٛGVV®P< 6vJr}OԳ/?ʞn77n}˅ C~clWSkc4jBe5&̣AMW$6*ORju*=J<'dؙG:VT)JF]QNKn"ϣ6U9m=UNLʪK TZxl ǓwI8T)ǤhzU!Z[ )Rк~c. L!Z8\Le* 8ěۼEiV* Z}.]ǧn^Ql[P Qxܦ8;NcTɬN.%GIPK"ֽuT."EXʜ=12TIa!_@H!s⿈ *Vfq)A=t\lhVI0t%yQ b?Ob"X[iS@O , 7<z9_t ”,oT\)ȨS&5K8YŧPAI]W,"z|=LPg {9-*dZqiOVvԤ.I7ڙuyJVgx@W/%`,by ?FJ4˒m;nǝr}m>HL-ePV@ aiY!2?pStNQ,\.!QJ$-.&*uӹ;JE:Nd_g_GbloV %ĘN?EӚDmʍ$;Z>zgN̿Ø%s KTl%KXG7U}ԋa-U)DX;c7t\S-(b /䗥yo=f-L ߰99*zĻ+0SN+K\_\\5+r.ˉnFX$=½V`|6jD}K7ae>[x̉P,$-Ľc b\KNS}yD]RYS9”ܨ(BLn<$N|6k ILsiI!-\]YK[of=C_Eʬ,]udV))_a C[{D(UI,>WeSr\e[ZC]%Ҕqm8;gH\W_ø_%橳4f6< JЭn͎ɚZM;6zFelaȧ֬CJL[q֋6%WJФj&迒zfO Y=[ZJ_.>!Wա W Ot0ʬ jurirS []SN8nӴ-XgN|a ZE31-)_J %:-w*a [:6GfǑǍFpr&s'q3ԴrS2 Z']K PRa$: Jj3ʆk6Ѫ1Oi/:I*LgK\ b:rRcϺjXwQ p,bvۖzwv jY٪{:L+UԤҒTI(\WzboLl@;02Tåne' `Į *`g{gR03vݨSHOۘqJ  H̱$J N{ Ne.K+]U>.͸kyO<{-~vZf}grW1u[ ko'K2cxnAA:0U sNTO 7msH-A,걌s҂nT^0=ӹWRĽ1>Îh"3nq iJCltӋǵϙx:tD5$ٜJR5;^+*S&Y-T%[1#R=mx{IXMQ)uq_.TNC*i {Ra2 PyEi؞DZ/^P [2me!]o>m7iPDe߀+KZ!3 _y3t- +W`Lc?iRN&^aJ  $ ب˝H@K`;xXy=8y2y,hRt8BR7P1rz8 7"1&5UtY,26z<C~ޜI}B')NNrdOJLr.Z63(qZF=MԜ ו^$\QLG=cysr&"uU%rW=[ǫ(H)!*5r*(&X_ťtt|RjҎ n-c@f.O^M*$˄!j6𱏟78OړSH[NJ{tQ9Fe`Y׌hl#PŠ}KQBF§U'\Gp#xg|\?U;}5EVn g4m RTRyIQҸ0Q?L~/>% FCk.6zao"ȗi?kX1jTԄ]M#xxS=٩9ռݓB蕔-bYlnaaM4tuzU%K'veX,B)=M2aur,L:AtU2s2/U撡5Km(|-P|cʙꋷ bϱTLfPM94(N ?5..-+iJ.]ci^>We]8[b$ҥD%_]-q>AUasmZZOVt[ũ9u :#L>&]{Rtj|nU/E zq),a9JE6YK%SM'#`J/55eӦ 5RR&[ H/ 8vѲ`gS2-##PGё!51" q\Q>êL iBI<'^V4/.Ua|7;xitLmcѸR5U2꒖nQoI%#^q2Jj7Lm(t=,`6d<~J2m.p4"ǖ)&32TRpxZNDo|ݬWhAM/Li{\Fqb)8'eڷ\P1}o(33b Oq+mS))o-efqu, ww3N%Qߙ*]ΰ(n d:O*s/ȹSR.IKĿVX+%d+oBәch-U*43mM$x~@ŏ;՘f1De$Wjs-Wgq JH6yƜ.&Ze.͛'UݜljTd&[sƬ +2+,Le6(Hy٩K7֛)i];[wUQDxVSnWtJN 1ʥ&S2a sؼ&@^=i/tR3 i :JVHPjĪ⛲K=&TN1# 2SpombE*+qjc.ֲ̜ڹ|췢LvBJTck{cU)8%$mFdR,70<U*biS3s!kW@ @'{TM1R®KLK?($RԢAX +ViCyK}2Yc 6QHo7)%37DRq\B8FMj\RYIc*ǹ͉e1?TDn"Ye+Zx[JSխb2uIc"a\7l/=ex>G22򇕘,{*ܛMTwq) U5'6&O ,a .K)-Pn`2)RH+@Fu`W[$B-3s%MOoHcegv|f.4kzFZ.V[XZ XGY]!sW#}I)\Ԝ(~];*IF~r7;ES`M6V׽oo:y)SҬ1$!,B4F&WX0iLsI_Vj BT MPF m)%I/,' wuM{.*"L٤1y؎ 匤s#֪X_eEqL-dH-^"eZ6֢EU]ߞ1';FyuWyG[l_Wp2KO%%ڻZ#qe3w08Ѐ F6bݺ&f(8Pz=%w0q&bgN$s13;Qe]}n]<(O a)2wG9(w \NXfZ] i@HR(H]rJi'P[x®Q0}cqn cJeߎxڜB#l=FrZjAa65JAߌQnQ>T 6i[7Khܵl$2 {\ܾ<[ *\jGxJ}Nqo˺ wD{`~aeQr^I-^Yn VUbE6Qt̖U#tR/9!6s Gi^x4)mm0 pd̴hZMO&̼)ZԴ㴄^A,IZBR(H*&ܭ^=&u r/dḤI>)AhF4mSk WQ18ް+wˑYߜ'Ǚ=UٳHrc(em@$.IܓcbNMsQKr^:7K!jQ4Z@o5\'3) e\|KKŰn)V0l jFF]N!Hi^csឞ)½ tNM8傖|VT|cRP(h$xGE)ɘt8=ЋuϨ{/˞(.q4MBgIO6&ژqւ BA>cQ*9i)qgGr_.i"_-k64, |KLjMXXspx|uHJ3p=-*l% r,>@(ka/ғ^o2xU|L7TQ/Oa6m¯ }-7Z915 $ԅ"&wݤTX&]_zbm-~q{nB;M(RzIJ-fUӡ0zy<ɥ8@a<*a'#C"Z"nF +yE6mwx).cEHun& t ~xա\1=I4. +֑T*OjT*z~ᴰd)IJ8ԛM-~q{iq]mW t0҅a&"nqҢ-81V˒)S̐];EnRuQ`i6HE2X(,9q wioT ̪iM)RmNa7M"91+վIJsE[{\e+01Oʴ$C8e[JR }LfTy٬T-KWXuA&:ɵ'iXƻh gumslJKܡ*BcWu Db> ]GQn6zb6ҸOc,bMfe~Z]o ޼)c] a(=cz5bnvrJKL%%@(빵<#N$OfsE煊fQ8Uz"Ԛ8!-&ЩӤ%[0rL:P8S1\8|KTrrh7`'j c@T%Py^JWqd۞Uy)zշ]vuNgRY6K_bJmRJ*Q؞B;JMrY2RKs2cAGw|s9l$M yIFZ= L]f3 WF$[%[ O|dj#*RnϸxvFÊpx"S#h_ u%x_ҜdKzT}G(ιu*In`8qyM3fcO /X^)?i':.!#8G H$lt7)PaiC),{6h]t Q-1'E,`Y6I%&:뒔kl,cxy}NDž'.(w[џ0X[ biN54h$ž̬_+V m֞Sܶpa16XTB{-SU(>AK=r6xVnFn^mʿ qUOf,3xPPo(eU%CjSQ$0NЁq%՛ޘ1&w&u#ƀlx1K~Ra]61)dO AV NHL4XoJ7>qV 8{@xF}NͻViQ2e aUgCgJ 09E @o()uCP0 4Su8l2I-iM㥄,!#L^0^d.ge>5 n 딺iʜCVn4:AzFM+~;iJC'ɢi O H:ZSd>1RZ]t2$ut*U'y<#lR%C Qx&X p6,ze+9O%]61>23Iq{ IL'MK"R i y'Ze" W$xvp-uW)|Q3Uj=CTJu)hµBr:Ӳ'IS`@-9 RGM ZW90vmL&sm$G,eh*ᕗR&_)/"DN >[F-9T_R*'xݴΐxHgs3:PmD oeXE܄wsZr~V'iHZb+ԕ`kf}bwʵRao[2ET y؏j2db !Lx,_gP.G]D.)m=Q+6-D*ֈ|͒ujx7"Q-8%-O^Qˎ4Jqjv)6VfҰ]Uq3l&u3.UYqpcz͚Dy .m%IQ^1)驩GUźtWBDe uF,.R<Ғ aLKuDȥ6A)7Jt1 9O9܂c4Z)Fsc+ϷRK7$czԬVf!4wkthjoO{ˉyHg9*ÕD:ےn+ŇzqMAF+uB8s4д()y $몄LW4{z]-`-fҫs!)fZ qp5dCx#oG? u/3 hfCf䪜o% ꌏ B$3nUW4PkmK0%PBU4o|w WQLVd@۬Do AFb7-ishU˙oT$䛑}`۴S)Osk;1,SuhtT_U:gGi8UL=-Tf7I_%)R]˺r%П)*_0J8׋D&!B_&S=Z uZT@*BQb/tgH^L gbf*bLB\%8W'H L6Knp㦌g퉠RSo"C,ØK Ps7\;iw%9{w{qX<**ǟaBL;ՙb 5R% 0IX;|)roFeh zf}Br/]7^&kjZ fv#/\I\ +:զZƠoQ?yfeeqE'NV(6Y -T~xqO̦j910互8LAI4܆XSUC6ŊlGkhl~ϤtK˗RXuCd8q)I1:N;"2ґvJ˜JЖ֮\}x#]#+\Oq6%Ѱ7Y#(o'JJRu^tfhL}ɞ+k@&їpWes %* ؎G4q-qR2WX &m!櫬J% '( X']#9\-O_Hl_ڭ$<es22 qqmc_amIIURUALg\׎;FS;=FXF%vY/[ pBuIxGvRsre`ne(^)xS!:Q5'2ѳ(y'20B;B;?f\UuX[ϞTHXЏ"X4mnn4\}[lbtMK|OϽ8qn⧔z&˗e6)']Lnlna=Of4i:ZykHaGxCMEG' PʺhUuֈ.sEԦ8n/`#VΞ/pmev:ĸ 8D>qJf4*Q MVR34q8.q$zcM˸89Gb8S͖V Dә1^!_*SB182{6cXW"\/ SL|oy3EjrqFАS^ϧ*ۍV;?jO81[3)tuEMq~zcA_HPĶofԩҗYgzSc RZkyR^ԘRVnljsz\iIS`uO5FEZ6e+kD^,% +RAS`{g5bn6jg0]I;F̘>UM4ü;ѯ})HXΧM;"y!!a;ߜ[vC˭-ffNEzq\-wZ-bōJ_651nbs>M?50ܤ< i*ZMR)lM8>V~ʪfXjFQnyGmKO)bZ=P (H ܁sx t=9s5RT%!E+T]RIJQA$7A#~/iӂ{G}+G{{gL}WGAIҷLGp\#)'ŏt3uVw i5gְz-/qҜLxG==HoW_!+iKwv%'K Dzbz߬@-\0C At+TƄ`INU#JkV[WZļ!A*^ڞ7ViY&5A0f\Rh̥nnpZcJUZ7URyi܅ .7  F_7ǽqqw+xěRe2O^~NJĵ#'-,9uS*Jm@E0 "񎰷{.s2a*渂Wۿx3tMZj2IhF58)(#ם2ѐy M1e_\71)M(*x!Dp8m˾6^G+rrӎ5 9z9JaVS6 ݤ(h{"_Y6-e_ BVM|7޸ƽ&:=r<;=y&: qnG+5c# 8|eQ?{x'-_q_gR7eGS{X7[#cZf&rMLɲl>oĄyx-1F|׉x/sz~DW0<_:XTh6&|-HLdXeEVNjOC %qVMmJlDi``Zm53/OI"m3I)?Ve05˪ORzV\J>{c!Q|S$uyǩUXpRuz:o稖u\$+8ɗ .8T"(,ۤڜEDULsC:lc+xڎRP/0q8W\HXؑэsMgVd)St^9 kNu˲BAB:FCOia*&;FfT`W2y5=jxz#V>_C:bۈPRT ZRkgdVRR-/oŹQ$i g=< ")7_H w4q8Nх,I l +;j'0_mɧUٹ4Vޜ* Q}ٞ5o#IRIg]ķSp[o⿅k;e-))xm 4:CD޻t|=wF!jM@q WjU@ԛɴV*ZvuY8)tPڥZnyu**[;JmSLk)f 6[t QRГ.StIJ{?<[XKE$7Ye"8cVF3b^Y>]>qߕiRu'Vڔ(ʼDL=.7U%nîp=6iSB\hIO+%W)DYolY52/r@ =4LpNL%J8G 7HfH KRGIu%֖B\%:MIԗ/)u WEGbz68`SOB3=KM)'*MT..F`s/ɟ|}i*yD gfrW0ot4Ja1~0"WOda1=3eV}A}0G8~|c?Dq?{s6ǺQ=sToWGGnhV$ >DD]LW"sa`0g(4Dx"=O}*gFr<nE*gzspEj3?Vh^L{g> ķOcEu)@N,7#S?ѣ-_Ig ׊͒?hُ0Ge.uf/EA:TOV>N=Yq&"UhsfjM$Éꎏʮ9# L,j3Sx\r/7cr3ysN,"'^ɹr- ߜr:Aq8tm~Ackm6dq s{@!h40v0jD1[Z x@Zo m`S#[CB y#}v^6@`<& {=t6@O+~4,bޣ&F5 &Y[*rApuA/x†Y lVH#j* GBy19*jR.a>'VI1Ώ"Y"ʸ9-[ƬֆXnhFyM2\(qDST`jexbye?4IK$F=UhEҵZKEKM;0Uu0SX~i \nO%f&VJ&rm;ֶ6G!ֺ<6|\M:D (%S)P*hZiY\p;T]t&-IMÎW'!6Tm^z=Oxb«Nn XA Hd n- M;Bۜ=A-@<. A`| Xh5@4yq/C[И43 @+P"]q]|F{|Kƚ= p!qONm GFiqۺ qcTH$ļ>@ҲNF8`H#MH5&7 `9+]feL ؇( (/LR!΄ɤL.i-ob^BlØWo%>]'Pt :J5w;ߥz+J٫Qo:bN|93mN%iH;ʙTZ^叡\DG|Bx̀\Zļ?<[][snDZQ` s{Egg2uTąq)>=+W IiJxl(*}#[Bh/53 jmW;=C+|~>osgOMmG>U>_BGk^m< 3 UycKYNT/NT:⏤k֍ "9y3UrOQ$}>Sebb=ނsO!ԧؗ>-6Ge/s= qͥl$XZ^?*0L{_>4y|>&]:[T:Cҏ=pb|>lcң]x'}{S:S]I>ü,{}N=0+0{5k=ǝZ1NQ^87c{wB"#?~&W/1']|2 Ec/=SiIۛOkoDt 0ivj$S͇FoP$ O #(J,-o(=P\p[=H oxIaqkrx,`7t2wxD{0ǔȴkywB" ;9t+[}PmxZ6>0AA{w0_;b851ayǒEw^^ pkuQx/<`4:@E^A м`:An akc=Vt;l/^$k  9~@s,-k_@/kw@V:.=p_`n =pX`hhV^ mUiID΀Eh 9Gh[xc \  b:0_ 9-sO8= w/+hwЈ Wr"hֆu@.Vs+E^ zݭ^;@.w j/<m2 ?$nhN `@"A<Z1x-A axm{}!-ZD sEZ `:B7xZ - nPú Bf׃P6䃖-/zkͷǞxr~p8G×t( ׼(4{z was4XxA8[CxQ_NPZ oxgH<ӺA ;@G@uA [ þ0  [h\fh"(@Ciwa9 amSh4:^ ,tb @h.Ah,C-x^5!"|ZЭmC>k" L0]`mw}P9#S @Xmx4m|"IH$|ۺ/< <9mX6(bþi.o} [MA_ZЬwh ixFa+[[5C Wi}F|-4!^77^0o{~{mǝ9CD uoN:ſ\_O7뀘h CHukտ\4-& #X8'W?ɿ\ _EW W|66Wl[߮D|[Lmxch*ſ\u 6B78?~C [LlI#GWrL'] :VLn`> $hp{d~ -hyD9`xp{cH-&9iD?Ao[߮liJſ\ǁӜ#"# W V뀗u~ 74:KҜ:ȋ!#BEB\?lo1kkWq*uU+%|!|W~&!˜CeMU+{e-&m`D7A _D[L@u1 ~WsU+&4- aU+L?U+&,I>1~W-`p6 sUVp{ep?.vlW_GX뀙ڈZD?T&p JG_3"(o _&vkH?+8?pC{eH+o&azlEX.W뀙>p[Z__/  o뀙@C{dO:꿮E-&@Zߚ!$Mu^PpBoyx!$Mu{\/l o<}(:{W_D_߮fн^ ~W~[L_lW1"+&<(_QʅW뀙Sqx-*\?:꿮`67QoA}hU~ CCFƇWq Ъp\/7oAo1-m΅Wb@_1htlB|[~|[L؁ _߮l:ſ\CJu~='_߮`l  W"Oo2G1X?po`p"ǜ.vlC[;W뀖;A{E"k A~MRmp*wk^_W'pw}M4xln B6ē\9Qz9J%oW'pVk*ndě/AB}#;5Qm䤥jY.AZS660{FbN2b5Wd+T|sAI{$MLQ:[S*LRVgi]m U6݇8 ƽ{(LI1nq`[d3vq 6CT\i.6$lms|g9JzezFU2.,e^7_MDko+9\W/55+'=eֺI_x6tZ#Jt3pJjQ%wJ P t+tx,-QŸ#WjiuΡ_-RAjik3+ ٩y}za{mƴn(ոW ƣmiUSJAQ<'K@r" _X=qeIʞ$˺ Mr^U6|:eʊm EFD^Fvܢ"nurƸ;#-,T_o|):ǔYoQ} ͽEĂ$r o>pH^b h`0(v.ߒt C#@࿍m!X^ ?8-O(m--@ +=жh.[ h@O(Z ߝT "Anր5}y-_S-8.m-h$s.myGX (<;(9h^qVxw@0.~p6fHGX5"a^_\m|8zZ 饠ohZ[h/x S5fј2 a̬f5饥ܕBUp VjVVvY9v%IC:-$j:)Fy9Vnah) I0Cm!-4  HG?`yË3bJ]e4AO^@m60HJT!0ĴiYut$y n]U>LJfYK$lxTQ8rnNN7ALKS=1OP!6h CғOǭcgf8'N\JTZEj%>uZ2t6 ܕayq!IZIBЃ0SS,Mn"mn%>=qK9%xJpTj(SE%Dq k ='NShmөiVijImܒl'5؎dp&zdB l sCe3)9WIZoe^26$:Fq,(~%U%T"ܬZJy /ﯔ(LJ0Xw\̫lJ4L:]ZNF'iHRmI<@m ;VBӐ9^ {ྖX;^t;‡0 Z"A^ - PsZ y=~B$ox, 3+@{Bm{AA`oxF\ki @ﵠ0 Nx5 +i(fߚ iAԘ=PX9Z A€H5=oƆ @iC}`;GS?P@#T[ /1fւm6X.7!'X/C: !\I co#({[H `1`-}1 -orD; {o#m8@hh|\$X @ A. G^h`    鰀<A@<Џ-"AX,9@@ ~p:AkH<y/VXBTH48f( yA6'HBq8`^ {` rj5n=o:@Ax /mй=;X4+ !tZP ~po `6-x<{Ci =mۜl- m{I׺iGO.PŌ@#0yr`m'ma_߮ $oxx\ 1oT-9r-AmaN^1 (7sm<x5@4B ;@G1B}z0E'X{ihZi4>/(Dwva +s  *6pߐ4\@NhgX{D" `[  Wy@M~xx'ch~A ch=P `|x\ w/} w6Z [Zk{k{/ i5 Xܠ;OtAxW Z״_X[@"Q uASI8SS?G*1}>OT:Y>& K2-8|_/ȳҟҡ֣^pA~vE$ |?tCdHV?0IJꏉ\6A dr*~CaMڃ ?0 ?QQ:e~P:mtNp?t?Pꃦ]wQjY ~`ZSdBB `9ӤCuXrPrC0M?PU #CuXrO 0?_'*tCu!':,ӤEԿ2\Y)XF֗hB]kGs9JY&z2MiwfW:Rp.?)*,I65~4J5,, A?# m _X@/}FA/ m6|vMؕeSO!Kq#*QEYns-i2S>@g: PG5$J h/ߋ2$_1h8{=n&]NF*/W6>U=⿉M+i4U}⿉}X*MϜ>q>ʜ gMq_h >ʬ cM1_h eN&ATO{8l}4neN&AT_{8l}4x/3TO{8l}4/c7Fv~ʜ g|MTO{8l}4翉0[odtD'Oy2m~gb_X@5A̽"MUHܩ,7'dZ*J M2m8j Jx#Cդ<0 yA[= 5w<0/q%:\!dx&G# Wʤ~ `ƞw&^$+=$k"QFo)6~rX@?eF;U6>ҟ{_c77 #M}*M qWh ͼ-isXl}4e>g|M_h.FѦ~| sc)7U6~r99ƚ)7<3&ASo{Xl}4QxF)5s8l}4>&@n]!|l g|MqWh x55So{8l}46'\7G͟ܪH[ś;JL#8bNGnSNɨ&dO@ xq BXOp"Tk10->izLy5{6yCHv;@yӾmwmG-*U)=:jVjRJIL>PHJR&.=?sjOR26Z{OTM!n\[c3LFM57qeTP.ҋ^ȵv秀>2)#ڡITq%JZ䓩1~̃rI-4]I; ^9iDV!=dC$LznvA6_Җd wxŔJZBxoџo$ȓƚصzvWT\HD%N$uI Uyq)[iQmxG+MM)[7.U\JD`o&vU<ɋW/݃oTT<ֈ𫽸LR ߁jN%t*2tD')$"@:wE)YBWdl =-I)sي/Ԑx?{P\:x}E5n!HfAي -ҥvF~l`\inۈosSRɐdX\bEB$nbzQHnwj?+4k]*M۰'eHrl{fQdY[)ܝ"R;u\E,.D=Ki\mJj ^([HPt6:COZiɜMq-{ .OMҫ~j2RFfrB}LKL2i`)+I">?$Vq?SS5'jVU:XНUl~;u,_|;_]t{F̅ꇬ@#kylfM,A>e$xP-MHΧfs ņؖmO8(H$G?{ضPjESBZ!)O8E,q玲e"T+;\&2jfO`z@2]j5Fpp6bC:wNړ/H7T A/H7T A/HQA'3T A/HVX~j'&tq|0i4tZMcINK$؟t-KtA hV-Azv7y@Rzvy1/.8W PO s$̼y3r($LL ݴ@Y][ =sU5rI/gN/9'DjFM- 46U5&x$+l!(6m<mdX,Uf4D֨?D֨?D'[/>ljVR=f7L!Z $Bs_/hDsKi}Cd0BhS%U>֨eF1U7:Eraj?%ļ_zU( j&_P?4IjS+NӺGISTHR]Hc{Z~ $?kT2Ĉ.f*bYtvnb+匘$BvRH Ɛ֨?eD֨?e4DmeRX,XMeIR [XȚ4ÒqAKq*JT( ۿhyҀ4GǙp蓡J `k$I%ău֕-#,xQg zW(-K $])`hֆZHRxG X7@yI,ySn.G8KH Jɔ;0Q ѢRb$vP {Ee.,betV-S>Xs| R{ZhzU)EO"L6on!ZGvsokYicVVlMtRJI`O짋$Ѽb3Hu+LtPq-ڶh@d@3Ox|YL&&'aDnz; Ax@a<,4rMqDE:)(tEwAe१TBxP AA0I`+39Ny3OʸBYI!(}cG Q %Hn(xl}qnea,p&|5;kJc+%Vۈy6x)'ncc4_g8IJ\䠲5?;J=!4Ļmt@U  ?HGZA iZzg&g;t]_$ * ӊJ"iB9$^?eҟ੦6k#zB0o-30}E}魳")FhULO9jjԝdaL7bj4ՏrȉbJv#춋uOj,#-OG>c~XQKw7 ngz` UmjKGuPcZox0'j-c|Dy~zYI?@q]@AM"lԹP"~?"JmOt߈Yp h{{?q0®Q6GuA _8 zDRTh8iIO4we\2Nޱ`Av?Y"Fn쓊~|A@bڍt;(6s ARGЈ}z[ޗRLn^Z@#&&B[1ne銦!q:UJe5%JtVTduzeo)*\/6tekLԲ({k PFFXLp"0 iIPB ۔`jtË )jI>>B焓xa}k*:mb1R$5p AU*e9dEGM: @h iԫjN,xZl;I<ҕ¯x.n*:p(e/KjcCfSWx 2 R{7:xǧ\P RmVLpn a' -\AE=-ql<uWM?8B>X,LjIԬ~X 6TA*wŗQ5 `Bu=tndI Q ؑk[/ !t[Qr #K%I|Rt)mP6=N!w)Z = \ܭI0zzQW;(xG>HX< p3 _΄$*ndIl>lc>0@vKt+tILctiPErY,_8֥HPLbG%GSJTdبH>Piě$V QSlmi֗1sUtL\eU>h o\j`ׂ w!&;:Lbohp۫WL@0 JEFͼ1oL2ͦϠ,my[μ] 0~ᨾNL .y(0{GHM2O|-& ~T;n0uYt5Ǫ4epbp"5gG2SvZ"%m*M"ދWܕ'યXTm $@y,8:0DoXS}9H¯~ۦ] șf3ҿ:9qM]`t&[PmN`!+6WktJJVv\UnbHhn|uoLJ}ܛqoE´Ƈ{}Kۦa;oLm?zMWq'Ę 9A>J^#-s^Dž}<x$^puyǝ<}l{-y8<^bbNe9e\Mٲ| t^Sf871bfr9VkC8mAhZ <nm r35ErI>xƀ  W0.Q3z nD7aBX܂P;6q|5RW4=}|i{e׬p[|G\֛DBZX>Z4  ?|ҚKr%<*A SR3uE<Cv"<5V R?TZ+AKH7Xx*&ԫrSB85^on"kr[`sRaE7r&.R-91IO M6Jb ֔5HHCq娊 !q $mU//4\bUeZpX-,[Rx ZfKcH&T|%'W6d.K$Z0i)جxuIqg` dև,!b5i i7uM46ve\*6#E[ /.-Ɍ斖8btb&,6Rһl{=L.؎b7/_BElắK $Z8;# kol+vߩ1n/B.q sJ2nS8!$-kkMxx}h< Hr +k5j가C4uXCsLW!%J Q a5Ho,Vb 9՘g U"B8vxhW/TZtK7%,&1"Od_X;q)R gl$rɑ;TJD]v/+)%[ڐv]N );i]:n|1M֤E>M8=Տ;i!}ms[ IĕKT"(j2ÝLnp6fbG3RQkBJEljٴpKc,o&%D"TN4Y?Yu!R6}jȘrMcQ١SeV|} /6 z٪qB/"^JIRmn&T kCblU\Z k\y*fs>;^Um⚤3)3sQ'C68P5('KRjw0¸p%Lm4t =`I>5Œ"~?f4Y'ܭIS9B%ƓqD] 9'ah&wS1'r\I2~ܬ"2i!enq,EaM0߶s2.vij2/eŖ=ia2 DXcz&R浈]6S9Zc(%fJ9K>@Y<.+4 hD#OCHHhY=LPPQN_8!/FLN#S*YYA@ TUBFŵx]_4c@HTV~:JWc@!zd_$?80@\Ҫ NZJ}L,8ڇx13Hl;-$AtpL4=|} $1+M"qel5\O!cc-:aiܤ7l;Y4 PЁ8Z_s:"u #q7Ӕ|!4fT x#@cm-V];0I%j*7Ͳ@E #@-+^qs*dT-~бwRHE%J{zi`(3@l&]{#`S_Ju*Go4%3 ۊR^IӻN)="/Ě\kNQ71^^UR, vUlG NqUMu70cՙ7Wa)Rtzi ufC^ǭ[OpZ0xҭm̫8 I0A;rڗXS*ree0O˺9,yO/7-M˥>6"޸M'DZ#T`Uěm#zBt\Ieu3<"Ӎ%)w R motmeڟ[~8h6Uh{q+ŝdE57ZU=I:RAJT"Ѯz6d#7."M.,_JJU} C0 G%U”]{/$'[̼q=G+*RIӈ6ѻ2^a ̫T&Y)-hqhh(DYm(q/c'ѷ 6bc\!YNJaˬp񸞱I_1<Ĕ(YOHQ\`MiIa4-}4S̒i|DoATHAQ 9QЇJ8ʿT%}0J˩#1ŘErj(/>*J@&wEYQ(9J܋ c5.2ZOX*|jG @Sĥ 2TO#k^(6^0Rkqb \!@|ܺnhdޙ'eM5x`'@%%) &mG_$#a |#c"~q^H٥sb(f9+4M{rlbwq~9}+e},yGF|aVYIJYkk~x "o%yG_e* Uju1"zN9]Af#➚Xiۈđ2YDLU޲> ē3& >ԎJw%>kbv =GE6k_Թ1s1gSJq>bgնoz7RfEVNrVayL&'$ę&1驗0uW+j햙-BQUaՐgXˬ]-Џ@wF :ߘuN8+qś&O98}q늺{1`lyɃeL],˚QF{oCxTD~stl|*򎞗nNJYyvG m4$xEl'$9kSGSl+hxi%r;(~%c5vfZ^*q*׏~@< ȜIJLԦ=` z)~!wR'>ҏw o7(s6.4d:ڏrVe1fLMK[(Qs-s\c:e6 *")[.w/33DSXniZ$ٷ;~^!C0xwAa|D;k 66C@^L9'ZHe@ t8dfYW %Ȥ;2VjC֙ v]Z| _EWw蹋l]n?`s0o/(oXViy2+- 0,K8!%]DhR}ھeoP tГ,2ސ5TɣGd4GjTalu2zK"iх]+89Ǿ x Dv9S P )714V\eu mIOM"6YBlmA_~`2ju9\bRE0uF@r*R- #q%Z_$E:8m>QXt) 6+iNZʄVbZ9:%h+`,_W5Z.=5BnԪOpҼx*3hԪi!*zS-|Op1og%p3jFByg@Ԙ YY%]xI*RwEIWmaUM^CN#tS̳2iDYʨҕ6Ow8IܓItYOL@47vak"dSug/qlQ )..Ի{C*OGBİ5\S["^& F.wS4.WQQb+m %m9{]c:m 2jIޣ}Mu8Iw?^[-nlHr)3KJHGKwX^{Re]ZGp v:ţҼͨ7c`K:tKvuq*ĭWJIj!fܐBHM:|L2+瑕mH/H0]r6 _ɋ| tRfd%.R8Ԕ/`EPJֱyyU%xrRzSSD(,|Ħ#˜o'|d$i@/:GWU)X[/+Y %րm"Qiwb1(i 9]?N΢UZl@+bNBފΉ2D#jC+:5yƋE]Q(2HYHq݀J Q(b[ ʦ;MF)[,ZO-"vܘk̤yQϬn"2aB;n&VeJI UAvbX%֕GJt{5'bȖR䴺SsA™-a>~FfWqfXeW RN}rpfA.\H쬸3-ą'O+[SlMm%9ɛZ!f}(x%ZG/q()rayqoވL;oLԨYT9UpE}Ҏ XuV1u@L)E`)'&r3ԊwnlNc:Px$ g?b#[D2Fr\Lq ߁IUo#Vb5SnaS yOM8}@*V_\Dߩpox}€x'p6#P! )Rx )BTyZ{W;YJ. {š WdmŇN&$Vf%66x;KzC\%*HN.mH3eGgiq>mvw9`~p^[f[sLW|XGsL\@j5Rɕ>ބ -:e/lS]NtxJ?4EIqG pkxx ^Rh)+YS|! $v^ _"XUEuBjfnr=̒:|BaNLD.q~0{E)vEjE]f:Q7G0LJщTO w/bc&RE2D wL`AuF2[WqLםTFPѱ m6ei-2m6d X<ӯ_lZuESqw/0ۄlTN8nj})j%$wcd=sJ# ˊV\61.6dZrEr)6]=GLE瀩.A3m&p+Z)ԩl.[,څIqYbY%%r3X.kb50Ji]d*'մc:cNDbZ}6`J5,U;j%G؛ lP IIݣ"Mٵx@>\_&MjKc! l< fI-UE[eyA-=w7:X 4[eJVu~V .$boTIcpn =JHjhέc<_4\+5 ;J|c[02>o_5*T֯i u1CF.(u9Y|#WWec,HN8wήWimb$kvt^J-0QuIXzNvG\$J\^<ka3%J-m^11m,We0g%eƢOMbv}6z"f U$'&z%;KSKA[\ n o JOlkKZ7Ee9ָZ6z.mfRmLZ1+1.ĚMW0ǜG}p`#ML0[;[i5`H mga91^(fyɟs.i?6Z]qi' Hl3g Ie0P`S0 FLuQ/[XDWje0#4oq ۼW+<*ObJT]*MEDA>B,<ӗ(p)\|P%BYғ0t'D2"^.\|ߘni7HhHK؀ R8P$ ,]+LQiğ.P }9Ba~--3S%s\-ꏐ]ue p|Lcɮ/9b(*uHXNE%vQJÊJ%N\We TWpM[<ؒ&]S]\$c)$psT㣰 ~2J2bAm,o!I$%g;NӘZE®9Jf44*'Fʖ iHQ=p\6#-ZS)ir@VY?8M7̷,>#L^\pz?ISHe2eӲ JGGy|1? ^$_E=ҖNk_.qZrbaԴ(.8⍂0w"E;JYOoRiW#&3LNJ,k3VaG@edRO0uW5BUMurKiԓ?Me.,3KWo%G_qujahM|VV DR Uղ,j}>hwsh[AJLEIIhXJw*5">oN:&X+BM VVa2ؖ`+=vsJӎ LGOњNYNJ5md&,`W+ERRL΋lb9?s_r6>pkЭo+Xv@iy/񴙨/Sx~hܬ(-&a _y h(,nh6.j+էi'R4AQn; {.w60w؍1􉩅Kqi lN/w[, s^Nڟ{DӣȘ7A]Aϴs/ImIBAvql˕s3,rʎ-LSJR` Y Qk+q,:-{Ŕ'DnbDbyA,UPAADHK+U~Gh8iBt:^9pۄIݒԕv<]1=fSʼnyYW"*eFJ-WroVxT]D4Dſd'TQ<+-ԝ!,ٰn'nB"eN)\IǾ:XyݤԦw@^?fK#X!M6tIdxvk59l0=Xty7{v?-fd&)HL쫌%+ u-{ڸTϿs\K@!›ʶI:7h!琮5qkB*POfUG*D: u@E{+;d]هVWSl}nx'&ԪWЧYq=1gbb8f\ R(FTC3 rI?+0bt:Qژ 73G0~]ۤ9x8l7H J8J[b'9E.(2: uC3r-sM!*Q!6nQ`[%G#cfFzetd_Rc];n=}8y`AwఃmF?Vלf+žh갏3Rq&6'@k&91 H;\md7BJx:\KXʣGd_z,EhH [[nTIQ`]i?_0bҵkZgXb$+{2 ZAl;)]DL|R^N^Tu %~XXvz{SX@ܮeDJ#Qr2RIoⳠي)BJ@Z֠wt9=@p6 &pj Ҕ?79>f&v [I'I)u{}kvPe hQRՏu/*}=~Z(Ҕ96F#`-'NWXj_ɩa-fn %4B;M_ ~rd_p[N'،,Ѩ_o~koGc4D"im[PQ +[9eN㞨/,jlv H2j~g=JS\xiq߬sf[pT u^!f$LX[^NQj+C]ՈץMfRh>Ʈ3QMrܹ1n]>/AMF^+uzHHLu^'z])@_Ⱥc23&+fIF4NDQ%Gl9?s_r69?,=; ߞ:G?0«X95fhMlpn[ @?;¿8ǵMWu-VD\{qc=@wnƘsQ\SkD}=.hq<З֐XGaO_DV0M)JecCb#0Jj,mS3*nU%lħtnb"G?<C>&qJfCnI` Kt0c0#e!U۝tۀJ{jl_Qޣh\SkXҽ31vni^:!}9$ "ֱX zӳUs;*]*z:}97T8:%ԣ ?FnԾFYbyL'@1f3RڤUOre, ! sYHRy|,(LV*gDS'PF8QUńsbh)U,Fy=*EbTw8+~-#1gY>qr-nԼۖS9If_:=L_E,vI` e4.p~ͫCQ{H4ɠSO"`Քc1՜mk D9mrLW7n^^?,U΄g1, uNcA?GBYXWɳ0 칎U 1|7i{2?r>iĝ@mm Gt3o\Ӻ Țrq v{]Xu6" |*BYI_*6*Y/;$o<\RR,.:EFS %V@g= AGLjĨA:iIٜ9f}SW5j뚵,>%[ kg;;Ujgĕ{2G(i4JZQpo<ɵ>swWlJUmTj丙P28{MA0j59Iu:8AJYym塈Pc&pZ~m*Ub&A #h&޲c;([a@m]'.b+u8#"CS 8- ,;+-#}0R,e]e\l8-EA8QgpWRE+TVިskD9j%5y7!kRJH$E#paA~p[`t6b=.;%2T{ȃA)ӻUOŭwjG` 4 G$٧'fOp@H?-Ui)a? 2uI̢BWr?G3&FoJGLAOjz}ܭ\4ҳ ]^eڼ=Y~пd)F1itX~p k{*ĵb®*d^esn^VeZT%?O)B,FĎw0B')UM Jd(hq$joԶ/2 ͓Cܕ&UN&c E?+TI\SꕕG<L_=1T#b2.$:6Ro1kڈ7T.ZiU꣘# L 8~zs2 Ӫ+ed'v=fUyYd6mNS) 05bcr3T~dܶrFwʍ A/Y4HƝ̍pR,nm5'x{s@^\s{4 osxRi[ZG.L#~*>|KSVe[Sӈ$\P#syCl>rxRܢ>iL8HIЀ"Ρ<̋JyiSqkE1JW\J_kUp8mIX.b5T{QEu .nډH:X I(Ue RupTn-maiM466%'VX*pk>HDq7I  z7(&e`ziTrCh WT3+`ɕuԏ Z:N l<ٟa Ωw"(3DaEN\W%'~7+NkbET(JbvfBy,KS}&m+Ԭ)*HAe^"SXwW[\l[ 7roBJmc&SZdt"ݛxx#YW,CE5ksKʯghz≥}]e2*o$jNLJaEFMbVTռaN xq[)jx$(?+i@LVr؛h)ptSM=Vr}y /p~xƏKN +pYm;D"< 51lp<Vf(k]j84@MT3ӭf'Axp\<= >_2JM\>~1XCHNH)*q-~ 7$(Jٞ[N=>\nE´h|-QniTqCmDk'q.n+ å:;Ÿ]TnG q% WgUE&D;U0&p$cOm?&\e7t:ĐxŒ*wdŔmHak;{hb [tI}M ^)xjxY~銐A 7PTmeJ9;aPk,eΊerZ{̌[0r4)6D&Np'ھ]<-%VpU5zMR-'yAA/g)-#x@m.8IJ7<:t´Dsږ* Tn u"`26ٯ%jHcʱ~V]<.(kB+0?P=`&3xe~a=Ĩ5z:(Y9~v빼DRKuIv%*=Skfn`[0?T ZQp7V{T>SxuiV1&!; eSk(:Є139HmG+ ʝs9+)3&^U: KH`>Gg&3 "ơ\:Nht5G Jʣ=<{ɋ,5oeLL,}ajWpN@A]olx}J|srŧ匞106A,``AP@hlI8òחpT%Ojr4" BV%B@#sg'8%2zW1(W(ymT@뀘ho <7nV +rx>3(b:J50ni;NJ*a'uǞ6V\镝Ҏv(riali)S$t|? Gz . #%F  1Xm}Om=e.]YQanD^Bix,"y@^ZH |-sFoJRxYTzrBYM">GΎ'0HFN^4nFYj:nV0}&%Nz鰢Rz\$tLmD׫UƘU[L*Ba*dE\qDَjTnJE%XR\$mpl8V{.OM^r`KĖ[@Jz W:u0o!13)ƘaT$)OVqV',j7^Spuyi[S82HN:}MʸFÙ4&)N/b5r"Qi.m`f2o a _(۴PIƙ, C$ouܰ6=:o˕g]2s :8!0iu\# M%2Ρ[ZRP*AxT _:gAPL Q]tqғ ͉M!RKĎ E^)x-Y2" tiT&ZshE*@!r6*&R3qjq? sTyYy)S2 Ыs'F Xl/btY o锷ruO0OdBD$ ׺-]OV YpF-\xjw73#-k5Vl' v&gJILܚ H-cbmև0{骱i-{"4Djw "!LT Qc` ;!4!lS.5ǧ0ξSE Հ8BoxEyP>=j%hKSjߘL=Zr=q]tڀS\IS)N9ŰQ=մ 8@:6E-m 8)KsVp<J+I7]ޥZ .]J X!ߔ@G[^~={`9 ݊`ީ]bW4d7m$MMM6GQ (~YtZ *A m 2-ë/GWzOly]0za;K'șrܘKBmlm´-!IP `8p}p :?+Kr&qWQ`)e-6100.+i'IGX҇}ޱ#OAG =d@zA@:<uԑbu61 ͨ(fݏB{b2eKmvvx6 M`$pU!)ȵ]u:&Dw6HoJÄó;.1c? "=ewd"vhvpìp2ZrT$۷;1`xZUA½a-MM1揁s0KQG:D-ǂ/ ᕷP+ٺlAy6a~~jyU3stO|w6GC;F´)$K(1$M4 r  :k(]#Wޥ3n%yGD &2IR.I8fZN [=pb&1XzM4~On4?z]Q!=˚v=ʑ‰c)*?JF ;,A1%ޮ`/8lǽU"rRr6>(Gl$xŘ# i_FԺEo~K 4tl[87MfM:X"alUZMKS2 WIC) <paU`WX 5ĈJlg.HBKʇ +Hb0u9>T֒b="RzEwQ_mE$;}Hi@6S'Fcn8(OqHIbqI1fp .MV5pfq Vu>jp%K"cVzЍZI'V%O-MJHJ&wv\3uv*sJ:'1FDS1Fe u0.[d? %-OՓe6fX}cgI0AAAu^T(~8~@clmͦ=ǔ)P.@ヸ%)?Rcf_NPs w8PA 9oYZR>,Tɔt >sORyGQ;%'Q~QjfVi2.)6e%@AEmQzgo^P\ ZCJ΄ɜh)JBU:Ix؛ic 6 LLL<\m9wO rRnn4<1').]e(Ɩ8T Pcw^OxXca9"$i4ɩAӪR"XڗLnBV!a%,`4aNd}+Tihiް bU 0-W$2%7MX$!\<;ǔM#%.-qZڔhĢbaIPe|aȕP>$lBb`E1 XcA-bm Ϣ,Z-EO'~Ռ=LJ˲]ZnRiEDVJ8YCܧH\ak+Z*Mվ$U\JEGlr&$eXS$] +J8,A- )'ۉF6nUrU)gG ĐT-% [ QiK}@#@G3NXIYqKxEɦS(%jR.O7'd kmS+aJlU Ob2$ii gF5yNaĨ;Snz|oAYVk> jU.QI96Q/.( mRRw,r^ VŠ!@n gKaN$hPRHчaÊݧYzqZAy}s  pm|?BXR%gEcy aYgʜLu B و$$J?ѿg2'x S)%`Ҭ;1Ӱ@sK9 Jܓ ]ޠLMӺ5U֠'`sK #}.T=.ur!2J%i6&[ w    HH$\ys1{)T>+ø ;׻Pme/PR"3"c,HaM$!HJ@yG{x4~<.Љ B851⬺r?ݎ VܚGWn$d#At2U$gd ϢUfVt Xw5>Tthα5'~.b_bnW3rg7QۍB OӺZ[DtW|\cJG>LL_5G$wBE~\\ےX[;rZؿRƣsr9.Ac~?EnKeIG;o|\~^J p/kʓ ϩדܦ?Rm {_g,ϒgCƥ?ђcex3=:+:q:rfZӒiG=~].V?S%TniԘx9rY GW':tWu}NlMҬgi?}+="_I?dGLm/OE~]-J?Ѯ UfHPhxG-2&'"vNIuC[^ ^螘$L̂TI*07xH hpz # 57B <}t)9 yVj@ bxf32&~E^$ "v&L#黊bc-L?Jw)чRJob_X,L@tS ڝ?_Ӝqi?:x /jt30)߄FjS:j#m;"}ӿ /jSlo)gFj3<ύN#?70{Ts K`+@D )N?)V}j3b^q (aZ^z| 1QnVÿØP6%$du˰Jĕj+"y{w4 ;ZTɃH 60 {2g弻awAmP*}R_x M`F-;J#qoa񤭫rSsBQH!K܋@gdA=VE~Mj2͆ʸ 'G[A["X$ZX@SX HڠN {7zG&xPM%n |EqNLV jba-m@V[m ^PǞм5~Py@6EDLӀ2\.l ;hal!@+X|H90~0@ kBo v. µ(xrU3꼥:]k fKh+ O2s)Fg&@qZPR.Ѓ[Mix=^QaZPgyJtKO%HM@C罢BUߗB\i$*>{BwFYOlʒJrN6iaHZ{pmn+ s".wmQF!-Q%]J]w<(&-| oua}DN~>p0s !z< w3r]ղ:!P*}R_H_ ~UqhWbX? J⩙Td'_2p֬_Lj&Ä]􌚍X$ՕOTbPuxDH &oqwwF Iͺug2V0qn8r}ԑkNVS689r;!.)z$x$@tjHÔ9EYD=sI 5$=_eRr.ΩԔr*]"sYqA,|.6YSi2idXdɻJR \+l)eCQR0`aȠWWTa_CmhG5[5 ?2֧Zv8!WBICk \hoFIf66ҔM%]]}Ih+w~*:,F3Bܳq‘u$6)b4FUKW*U I6;i}eOM&drm2Kx[ٿ 2ʜeWŔ˹}WJA_QJU& VMen\e2ʩɖ\ȘR RR-ejN40ů`\Dbt"UI!7knQ=R4=|Ԕ)qIIU\ m/l+foL<{0e*SsZnrKYJS`8uq2814=|*Rk mgتQtܖTbg.2EøBԔTh쓨U3$e Ӵצ[3/[+sg5cNNɔ7*oRT=MP4!zH"0~u:eۜRw(JGE^]4*aJd^Y2 ëq Pү"e.F6Xc`R*<%5@rRgы)j & YCf`oa|+$1={QhěkX4B"!Eݧ-p%GԅNO fDl-.8@%s6 2)YAB nc\g5 ϡ̢(K(@GPG.Qa?ep7 4N>(dhAJIӈ_Y-) PW BǤգܐ $--/h39JJ) {ܐ$ZU;Y6`6oK-"߅ʫA칠OԓSdȶzDž#pKdr5͚duKJPFa*uvVLSq8`2fuCFjI)*x6&6T{/hqJu&e!JJ :K`:gm9rYRrLTjaޥ puO݋XygN)yc9*r] Ԥ*.zWo8= VQMeeuz,┫w-qznUR[V)Shm.IO:ڎVFM1"E_rdw 78Vrɻ%D5.py@{ (kwtkxt]Hf@`N>a+樳q9Ĭ;`B (=rfTE9ٗ纆&ҭG2c1Ъ5'D_Mgi9/WTT Mf@2ěXu°⮭‡e,}H9Y'鐓urZK 0oO34@)iE]ܨ鞔׶xI{;ҎRhx;/kUv0T%ͻzcK39ѭ*CIA"z$-JFժSW]._4Hr6(yM;%9$jQq_IPI6:г`4U2qd #x*v6a)0 JTbklͼ?kpI*m[fSS+KLa´!|HAE΀؋alkh8!/!@q@6=@:_KS# jsCEI>6 wΔu7p33u:Tl=fB`2ҖaR,*'D\HPl!GÏuxֆp[Mڑ\S q VXXƜ33ay'9xaq/˩p4 D؛tvĴ U*yy*l:iM RHEP tCt ȴL!  NSI_TyLܶTJIk5OEo^7Dn/TmkAAs<\=N6 :w`ܘ.97|= xNA}}{ ah\8`.wb7S^aڥ"YhCO6A6=#qZ"rʹvHNH̻7;(T֤%6]q<< +M(1YsX#-BI̱PnoijJ Rۉ"Jc(ؖh-e Į%Kb-*׫}$ypH;Ƨ^nq܇Ck.*ܛ!Vc `9?UBvQ3>RR\*) zԒN\lE(Y{ҵ.qLc3I%=?(( )OBRM76O%m_KV\We+JC|tY%*{F\/n3OUDlKBÀ6xג!ywPT&͛(wq!HR & 4><0<$37U\}FxBE9KprsnzuM/qeA@'N1v -oxWI/k !/aZ 5 "4{]B+ɜ?3Qnye)}rSᲗ[*7THXz[aj %VQYyV>|TXr332ekPB ĔJQk_c -+w@j ɜC1]?00-z^[BDPIJ‚U) xř5ydƘ8֦̊n+!{twZZ; QhsrRJ *mkJJz*7(3 '^˗jHisf q(JTm~[];l7sT2eJͼ͑+;&▴%Ɣ|S Iޑ`p~<.+H<IqkH1 rimRָ3~nSHbTw (N6>bU8HJVԐM6 #2汖8Nn\96*)%Ԕ.qQaI=hDKj=gZ$7P@#$#X7=Թǔ{RtoDyk50 *k9Ǔ'+3+>)}ĴI)RN #PI0͹ /T!`cZFVO7Onef]K(i yi)`"<\r^(t_e9k6RM F|e)$K}¤k"t[Z+a(MNET&w*)hmJSZ*W ;lO[Ӆ%+rJf`eN̉Tvf}0%JA)'&mnp= qt0)Jk^4+i!JKRpԎz<|kr>88W&(b25(* A(M! xعTYesA<]Rb#qq<5|@s;ʷAQe!Å(%V,9_HsXkk Ujr5KN(6O6uih9X~5(rcYJR8T =џi+_8SF 9v]@\-`vwUr>zkh (50 kC@vt+h. a|>%ܸjzM^+"t%kERcezs~nEa$㓓 8UI*Si!@fUcr"8s FCeP㧰E7Ԕ{X??q2CMϩ3(.(V P,Fw'g/jW8c5mRTԤئu6⵸{;Z[|fFg?9y\4Y:hWO6 n Q I;m3Z|4YM1&,!L JV) OV24Wc<u̇&&YR #{8뫐B˙/32IPԡHZk@X}f~cr7*Rzi2Hh/{ [;^$-tƐXmn;9Zրk@|?$t0i^* L7bY.LOr IK%eQRDaU5G]P@X(q 6!cA1aNm%i5j,@Vk{P.q*f$R*3ӘJKΒ 47>ۘ;FM^qy+DfQ @IJVRw$!r;CX\0H" c3kWֱ)HL䔱q-<@*^?1 It!U)"m+ZOYՃr^zfi)?7#.  &N}b=IݖJT,$Z 9$pͼ^k*qд%BAv?@lkpy" q59saItT @ &=t o wD>4]NrG[DòN#6(~ #g6[@h'@ aP LHV( s 8faw W^щ , :\G4)uj2[n4@}e*ӥpZě|\gYPa-ʏ)1$e3,C1pVC˾\`\*s3U.FM%$C 7U$\M-dH u2515/5. RR4V+''$s ɩej; %} 3%HuJBùb/[PG:۫  cbPPS0l8j)IyHZvWR^ 8KӦ!n8i䦦-(m@mc1vxI~+3<**h lV/a{l/su:Åv.O>@X K搥&^rM%&]\fikZ'#'#芙@K|]-ћO(:C ={.xP^  Lzy<~YKkI bqcaln6 Lֲ̀EOaN7QeۙCBZkܕ$ZQƹ}3 IWM\Y)uM "In<p U\+*zѺ,R-A􀣄xqXR[U ci\eV*bEZzjrI 4ڀH:(1M[`yjimi鉔)D6A+e$?slmD.V~'B`7h[o-h,yH.naې}\!"~c}-Z3y!k-=^?=; /;\Z;iI%0c&̩9e2Ky%(7D7tʛӈe$[ *djH62nH>y5M4xӳ ](]ufnRo ũ"%z@q&jA14UOKIC9¢9lm.:D e|tBe%Vpܾ, 借QsN!BRC Y6!|f6;k'*9R>NKS58y*{ xFFQĜI0^W4}S+s)f̨vZe^.6RPZkvxG+))]\fEC,HB1GUB\fI‰+sˈE\u29U9.E,y߼4i$J=&Ng7OR1q>=M:F=QbHs;-7.-l }O( x΍2$ki)v(KQ}xH Xͅ[f+2,VY?aPCw<)[QUk7T9 blDRVuܩ*uhR[M:9=p)7%&eb GꭉmZI#}2SƇ4ܛrjDԺl["ƺ6bNWØB$jS,;J+7<|c(rMr.N=6|U8Ҧ JP8@.2๹[Z<ӣU^R&36C}Z\pĠMͯ\k6]/2=p` 0axp yCkþж׃K[cuc t{[Hnh/f s`-Fxõx^ a`:@a 7o 7<  P}aXkqFݬ! =9@y A/ ;0m/cUwC)e$!r: :Ƹ.ḻmN˿*YyxTAۜ\b-LƘ~o VzFJB҂\B&D-@El7L~K Hՠj$(]ED-06*ɇ YeBRвJE}ɉZTjQu/)V)>bh04SƸ댖uP BRWdkxʮ`X>f)OLק/( O  @k^vYq*RTVr.Z0 AyV k5}i (5x/t#y_y@w_X:AZ_Hc-,a_[LD렂Z AQjq[1W꺞~..wDo ~XLgi;0ܻꌺWt,(jA*-GT;]`'4 Tt'c@a8{-&(u)Zaʚ$KNO%L 1mSF1Gб!Vͷ(:¤mk Y]GV=ԪZe((jr1֪]'tP u0,qD] ,]aJ!hW =СA$DZ=II5ӒG:(\4#3Ojc`KLiŵB*^bXu5A&*jk[3(d4/^gQԧ]烊aHh9^'yCc +OƸnw U}Y.-°bAr9V),ԫw(i m$`,"|7be%YCZBb;9Fo&%)j[xSb *2˶IҴ|cbC ^4,>#)qꓽ{HR.5:[m#ɖ)lalw( qN&FZm*aZIHpu0>`I)Y Byʌf']K $s="cEtNKf\tT£̈ᄚ_kEۘLפ0;k)<^k3$&M! &X}Xv;9*Cr ]t=]=-.%eYB֤2[ Z|b1Ru 8:,,H&02kvRLɢ].I͉ CLQ0hpMYg&X WJU3tDR &Q7+>ENrmqs7$ؐHЈ25CÍ2î]G~%{>7Sg2VnVnJ Xw(ur$d ݀1zg/t#C;N"*ܩ*GMJe%}HeJrc4K*rHn4iuz|Kl4W`RpSJm)IT%۬}Զ(RV-vPSb(txhָ։H9)l͹L - I>wN%QY:R^Ro辑(quv/9m4bSxK Ү 5*|5 }? SnQ-4/St+v;ĮP1ZaA=2C+U-HQAQ<=C0wh5piw^ ']E,9Amyo$` k@mkAp0};s[k}`͡9\W(6=65^X/᠅nP;-3hW>:3 x`Z`T+붐~Pi'X4\l`>P7y-<0ߺ Bhc P=i4փZ`=h|}` oAht0X@0ot- {k<4 [H=Pc h/P $ۺpy-3+@ xFX~ ⚇I\p PMvI76ݤ!r{߈Bk4_jwe䲊zBEZ6;i?x=hmp 0Qaskߒ%>+QLM若09@k< M/q$ڑ-r$dRH?v6akxZ^9?z?E{'|l^ /OH8c)Wxդ*Zm?meJMs+.E]4\5Y-ednJBGr҅(",ĸeB@$?m=$, >L#f󽼠;vWW8/ޘ?'' ; aa\hm=^B7`@mp&PyXP1}k kh6؛ /kX}-spoo>\/j9_C!hm 3 ԝ`+C`GP-cת<w< mXW3k_G[Aәx[ `ml еAshV -hh9uak[AǛr;A[Cx9ݤ6;€@ s@v4X/[@w-B: Z.Z-aAMa[y@-!+ l,amy<!{:i46^m<9Xnoo6ԗqũ]#%& \ rp-:GTw"H`7khWb;w OTkɼ @ G5xk i܋?,0@/}o xCߜ@-;B:yƂ#{|0P[lvqhDK(vZpxkAqmyGZB/7#h]m S 7@G(@{i xxZCay4[jaߙ:{F^7a+ mO w@2! n`A Hc{A`gt hͥ։O5&pډ 乙Ң}I@CZcdA ;iɟ~Ŧ>6D.~?|Zcg7~-1Ѳ ^LچAzwM"  maߋL}4^L~-1Ѳ{+ ozwM ǟ~0Ŧ>6Lǟ~0Ŧ>}ÿh0@k&}ÿh_^L~-1Ѳ`^\<%>9γ87C?*lE);|$to+5KN ጖c/.&VJ&r_ _ %tYvˎ:ʖrNICSZ/<m~) -OLW~Odp<ɷpU-LWޒ~txmMW7s/CS͘XeĚQ)˓T-GAoXCǙ7_l.gOY>qՙ1},)'jM"tI$%-X XԺߓ})}u 5qm#W2!:vV"}Ί1eFZ}_l% W< TEEehC SmumW:xw ŢAcm":Ys h]nBRZ݇'o"3sz Q.Ygf +>L|?OO[xZ/X=g,)EI|hc };DDŽڅfyr/nsޥ,?mtDKƑY<|9 #ɛ8'S;{?7ù\Wd>3jO,Oz_e6E9xUZt_GE^?WG7ؾc-'3PxgngZ/X=uV.G9+qrM]%scE&j3gݿCq2d`j>:*1f1W.\)fg_Il?䈳vn:,)ZiOGiO'\3M-2vg 3v$^d礪2ff]t:Я"41󶯜8&r~}Z~hYU_oQ&M>01[eG95Yiӳ99#|!) S=!JZ)y)_l9({GLvVbѸ"5BR``0XAs:BɕGsiE,g{s~s̜SWV(߀m A'KԳ(aAAlɀ!N1o8SLO̙ʍ22)zƈ͍1Z.ХI,2҄w){И00nJKţ9UtJiAɧ8j)^Ae2l+S1: u1P𬚺*sGƅeU6H]:E'`ԸRWGw3f'< |(˧ZvO%,~ߩ$Nd±bRҤŁ.*(ɥ@UԄ;>*%G2.DgN eHSg7`!G֛FcF!A!fDܗ_Xchw{)a1 Ыs*pbh "lá[N'PR0y6Q+UPH'B _?\LA /s֚HOvG?t7 1DZc17D\7& B:S>DYue_]!bٛ- kKtmCI !DHp }b9զe)GND1k+׫i2IA>svdfmzyGxWy*=^t6Ǜ&HOt| wl[T(TƧ\mFQ = =q\xt8|OO+ ,%)%F D:\ "I-ԁ!.B-o"i+C<o|1d%_6H]U UabʏpTe2 bA|'[LpzcX"axJx15:bQJS6 F7'_\yzRZieMe?^;:#pg1$r][y#PdTbÕ<5nʛsae*n-ʄ>itI^?D_5JE~Q\KWn|QdBCo=3n+YDžcPqۋ?sjokp[E (8t:)Nkrw]<-ط[Ln{[-)q  Ǘ8ѿ%Ǥ仸eh+=Nb,9%\)KyIt7^֒-J5,x@H#>ųhwG~F [Npm:~PZ4tzxfjN_qEyӻNQʠ"Ĵ . P&ӮK}PM$kYR2cEfF|?0^G,j[-}j6]e,#g'bʍ)rEI[q}u5tʹqIø*CY<捁"MGn)TdfYOڒyHlU5/,lifGB!`AVFjAiPo -#ÐUOSXi[I=iq~)!@V-&"7GfXXZhk|-1ud_vȜ/fEYizC)ٯTi4S} PM^8Oxnre}ǬBN7(R^K;1F):ʕ换.eC5p⇂Pk-E3}L6AZrL79%0&iE*I"7[g* j\CS*d{>1@. oh@  sQ iNR!k7TG(Ѐ*JRTpv AF/~3@UI1\љtnK 7Iav7yA ϫV[6L,DµԆ&>%p<}H38#-%ojo9 nwwjt%jUPlb{3Cr4\TALL4$qޤONmXzU8}kD#i]Qms. |>Diaek״\+aƤԃPt9FYU̿K7Yj[o.č۸+根>T :4HN*%WQ:ח\/CJ9l"VYSn2bhQxr5N-3TxVRmj AgH=t5MZ}hiJRlH~?0~ \`mN2%a)R:uDCؓs^"FS("O*۫l|"2Y<9M*k->Pom v#%pSMJyEʒ?V.橊q*GRm71iIÔliVwm{T|H'OLỊvI&%ھkCx׺= c*o~E{q(DbXe^H&>}GʫV0)WL,\E9qo+~&c/p}J9+}SL?S_73cm nPwZֵ{&&c{'9woh+?W&U)vGnz&<^IZG6^^yCBP=M=!Ntۏ|6D}K/tŠw] \$Ώ4Ec#U󲌟qWH+ɱcT6 c fV?Ibi72$\qıR/o](IxFLˋ$cOn;ߧP[#j[a-_XiiM?"!wM ~Yi[y(<㽫>GucݹwckL}[y[ŻMqn-x58c[ST|1_T*Hl;mX4lF1*LaFI c,NX3?2qH_]a:unity-scope-mediascanner-0.2+14.04.20140404/data/videoaggregator.ini.in0000644000015301777760000000054212317535203026047 0ustar pbusernogroup00000000000000[ScopeConfig] DisplayName=Video Description=This is an Ubuntu search plugin merges all video sources into one. Author=Canonical Ltd. Art=@SCOPES_DATADIR@/videoaggregator/videoaggregator-screenshot.jpg Icon=@SCOPES_DATADIR@/mediascanner-video/video.png SearchHint=Search video HotKey= [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-videoaggregator unity-scope-mediascanner-0.2+14.04.20140404/data/video/0000755000015301777760000000000012317535450022701 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/data/video/mediascanner.scope.in0000644000015301777760000000117412317535203026771 0ustar pbusernogroup00000000000000[Scope] DBusName=com.canonical.Unity.Scope.MediaScanner DBusPath=/com/canonical/unity/scope/mediascanner/video Module=@CMAKE_INSTALL_FULL_LIBDIR@/unity/unity-scope-mediascanner.so ModuleType=C Type=video RequiredMetadata=duration[i]; OptionalMetadata=height[i];width[i]; Timeout=-1 Name=Local Videos Icon=/usr/share/unity/icons/lens-nav-video.svg Description=This is an Ubuntu search plugin that enables local videos to be searched and displayed in the Dash underneath the Video header. If you do not wish to search this content source, you can disable this search plugin. [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-hollywood unity-scope-mediascanner-0.2+14.04.20140404/config.h.in0000644000015301777760000000013112317535203022674 0ustar pbusernogroup00000000000000#ifndef _CONFIG_H #define _CONFIG_H #define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@" #endif unity-scope-mediascanner-0.2+14.04.20140404/oldscope/0000755000015301777760000000000012317535450022472 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/oldscope/scope.h0000644000015301777760000000464512317535203023761 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include #include #include #define DBUS_NAME "com.canonical.Unity.Scope.MediaScanner" #define DBUS_MUSIC_PATH "/com/canonical/unity/scope/mediascanner/music" #define DBUS_VIDEO_PATH "/com/canonical/unity/scope/mediascanner/video" typedef struct _ScopeSearchData ScopeSearchData; typedef void (* AddResultFunc) (UnityResultSet *result_set, const mediascanner::MediaFile &media); //typedef void (* ApplyFiltersFunc) (UnityFilterSet *filter_state, GrlOperationOptions *options); struct _ScopeSearchData { std::shared_ptr store; mediascanner::MediaType media_type; GList *metadata_keys; AddResultFunc add_result; //ApplyFiltersFunc apply_filters; /* Filled in by setup_search() */ UnitySimpleScope *scope; guint content_changed_id; }; void setup_search (UnitySimpleScope *scope, ScopeSearchData *data) G_GNUC_INTERNAL; UnityAbstractScope *music_scope_new (std::shared_ptr store) G_GNUC_INTERNAL; UnityAbstractScope *video_scope_new (std::shared_ptr store) G_GNUC_INTERNAL; //UnityFilterSet *music_get_filters (void) G_GNUC_INTERNAL; //void music_apply_filters (UnityFilterSet *filter_state, GrlOperationOptions *options) G_GNUC_INTERNAL; void music_add_result (UnityResultSet *result_set, const mediascanner::MediaFile &media) G_GNUC_INTERNAL; void video_add_result (UnityResultSet *result_set, const mediascanner::MediaFile &media) G_GNUC_INTERNAL; UnityAbstractPreview *music_preview (UnityResultPreviewer *previewer, void *user_data) G_GNUC_INTERNAL; UnityAbstractPreview *video_preview (UnityResultPreviewer *previewer, void *user_data) G_GNUC_INTERNAL; unity-scope-mediascanner-0.2+14.04.20140404/oldscope/music-scope.cpp0000644000015301777760000002375112317535203025431 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include "scope.h" #include using namespace mediascanner; UnityFilterSet * music_get_filters (void) { UnityFilterSet *filters = unity_filter_set_new (); UnityMultiRangeFilter *filter = unity_multi_range_filter_new ("decade", _("Decade"), NULL, FALSE); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "0", _("Old"), NULL); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "1960", _("60s"), NULL); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "1970", _("70s"), NULL); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "1980", _("80s"), NULL); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "1990", _("90s"), NULL); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "2000", _("00s"), NULL); unity_options_filter_add_option ( UNITY_OPTIONS_FILTER (filter), "2010", _("10s"), NULL); unity_filter_set_add (filters, UNITY_FILTER (filter)); return filters; } #if 0 static gboolean get_decade_filter (UnityFilterSet *filter_state, int *min_year, int *max_year) { UnityFilter *filter = unity_filter_set_get_filter_by_id ( filter_state, "decade"); if (filter == NULL || !unity_filter_get_filtering (filter)) return FALSE; UnityFilterOption *option = unity_multi_range_filter_get_first_active ( UNITY_MULTI_RANGE_FILTER (filter)); if (option == NULL) return FALSE; *min_year = g_strtod (unity_filter_option_get_id (option), 0); g_object_unref (option); option = unity_multi_range_filter_get_last_active ( UNITY_MULTI_RANGE_FILTER (filter)); if (option == NULL) return FALSE; *max_year = g_strtod (unity_filter_option_get_id (option), 0) + 9; g_object_unref (option); return TRUE; } void music_apply_filters (UnityFilterSet *filter_state, GrlOperationOptions *options) { int min_year, max_year; if (get_decade_filter (filter_state, &min_year, &max_year)) { GValue min_val = G_VALUE_INIT; GValue max_val = G_VALUE_INIT; GDateTime *min_date = g_date_time_new_utc (min_year, 1, 1, 0, 0, 0); GDateTime *max_date = g_date_time_new_utc (max_year, 12, 31, 23, 59, 59); g_value_init (&min_val, G_TYPE_DATE_TIME); g_value_take_boxed (&min_val, min_date); g_value_init (&max_val, G_TYPE_DATE_TIME); g_value_take_boxed (&max_val, max_date); grl_operation_options_set_key_range_filter_value ( options, GRL_METADATA_KEY_CREATION_DATE, &min_val, &max_val); g_value_unset (&min_val); g_value_unset (&max_val); } } #endif void music_add_result (UnityResultSet *result_set, const MediaFile &media) { UnityScopeResult result = { 0, }; const std::string uri = media.getUri(); result.uri = const_cast(uri.c_str()); // XXX: can we get thumbnails? result.icon_hint = const_cast(""); result.category = 1; result.result_type = UNITY_RESULT_TYPE_PERSONAL; result.mimetype = const_cast(media.getContentType().c_str()); result.title = const_cast(media.getTitle().c_str()); result.comment = const_cast(""); result.dnd_uri = result.uri; result.metadata = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_variant_unref); GVariant *variant = g_variant_new_int32 (media.getDuration()); g_hash_table_insert (result.metadata, const_cast("duration"), g_variant_ref_sink (variant)); const std::string artist = media.getAuthor(); if (!artist.empty()) { variant = g_variant_new_string (artist.c_str()); g_hash_table_insert (result.metadata, const_cast("artist"), g_variant_ref_sink (variant)); result.comment = const_cast(artist.c_str()); } const std::string album = media.getAlbum(); if (!album.empty()) { variant = g_variant_new_string (album.c_str()); g_hash_table_insert (result.metadata, const_cast("album"), g_variant_ref_sink (variant)); } int track_number = media.getTrackNumber(); if (track_number > 0) { variant = g_variant_new_int32 (track_number); g_hash_table_insert (result.metadata, const_cast("track-number"), g_variant_ref_sink (variant)); } unity_result_set_add_result (result_set, &result); g_hash_table_unref (result.metadata); } UnityAbstractPreview * music_preview (UnityResultPreviewer *previewer, void *user_data) { const char *uri = previewer->result.uri; const char *title = previewer->result.title; const char *artist = ""; const char *album = ""; int duration = 0; int track_number = 0; if (previewer->result.metadata != NULL) { GVariant *variant; variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("artist"))); if (variant) { artist = g_variant_get_string (variant, NULL); } variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("album"))); if (variant) { album = g_variant_get_string (variant, NULL); } variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("duration"))); if (variant) { duration = g_variant_get_int32 (variant); } variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("track-number"))); if (variant) { track_number = g_variant_get_int32 (variant); } } GIcon *image = g_icon_new_for_string (previewer->result.icon_hint, NULL); UnityMusicPreview *preview = unity_music_preview_new ( title, artist, image); g_object_unref (image); UnityTrackMetadata *track = unity_track_metadata_new (); unity_track_metadata_set_uri (track, uri); unity_track_metadata_set_track_no (track, track_number); unity_track_metadata_set_title (track, title); unity_track_metadata_set_artist (track, artist); unity_track_metadata_set_album (track, album); unity_track_metadata_set_length (track, duration); unity_music_preview_add_track (preview, track); UnityPreviewAction *play_action = unity_preview_action_new ( "play", _("Play"), NULL); unity_preview_add_action (UNITY_PREVIEW (preview), play_action); return UNITY_ABSTRACT_PREVIEW (preview); } UnityAbstractScope * music_scope_new (std::shared_ptr store) { UnitySimpleScope *scope = unity_simple_scope_new (); unity_simple_scope_set_group_name (scope, DBUS_NAME); unity_simple_scope_set_unique_name (scope, DBUS_MUSIC_PATH); /* Set up schema */ UnitySchema *schema = unity_schema_new (); unity_schema_add_field (schema, "duration", "i", UNITY_SCHEMA_FIELD_TYPE_REQUIRED); unity_schema_add_field (schema, "artist", "s", UNITY_SCHEMA_FIELD_TYPE_OPTIONAL); unity_schema_add_field (schema, "album", "s", UNITY_SCHEMA_FIELD_TYPE_OPTIONAL); unity_schema_add_field (schema, "track-number", "i", UNITY_SCHEMA_FIELD_TYPE_OPTIONAL); unity_simple_scope_set_schema (scope, schema); /* Set up categories */ UnityCategorySet *categories = unity_category_set_new (); GFile *icon_dir = g_file_new_for_path ("/usr/share/icons/unity-icon-theme/places/svg"); GFile *icon_file = g_file_get_child (icon_dir, "group-songs.svg"); GIcon *icon = g_file_icon_new (icon_file); g_object_unref (icon_file); unity_category_set_add (categories, unity_category_new ("global", _("Music"), icon, UNITY_CATEGORY_RENDERER_DEFAULT)); unity_category_set_add (categories, unity_category_new ("songs", _("Songs"), icon, UNITY_CATEGORY_RENDERER_DEFAULT)); g_object_unref (icon); icon_file = g_file_get_child (icon_dir, "group-albums.svg"); icon = g_file_icon_new (icon_file); g_object_unref (icon_file); unity_category_set_add (categories, unity_category_new ("albums", _("Albums"), icon, UNITY_CATEGORY_RENDERER_DEFAULT)); g_object_unref (icon); icon_file = g_file_get_child (icon_dir, "group-treat-yourself.svg"); icon = g_file_icon_new (icon_file); g_object_unref (icon_file); unity_category_set_add (categories, unity_category_new ("more", _("More suggestions"), icon, UNITY_CATEGORY_RENDERER_DEFAULT)); g_object_unref (icon); g_object_unref (icon_dir); unity_simple_scope_set_category_set (scope, categories); /* Set up filters */ unity_simple_scope_set_filter_set (scope, music_get_filters ()); /* Set up search */ ScopeSearchData *search_data = g_new0(ScopeSearchData, 1); search_data->store = store; search_data->media_type = AudioMedia; search_data->add_result = music_add_result; //search_data->apply_filters = music_apply_filters; setup_search (scope, search_data); // XXX: handle cleanup of search_data unity_simple_scope_set_preview_func ( scope, music_preview, NULL, (GDestroyNotify)NULL); return UNITY_ABSTRACT_SCOPE (scope); } unity-scope-mediascanner-0.2+14.04.20140404/oldscope/base-scope.cpp0000644000015301777760000001356312317535203025223 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include "scope.h" #include #define MAX_RESULTS 100 using namespace mediascanner; typedef struct { ScopeSearchData *scope_data; UnityScopeSearchBase *search; UnityScopeSearchBaseCallback cb; void *cb_target; guint operation_id; } SearchData; #if 0 static void complete_search (SearchData *data) { data->cb (data->search, data->cb_target); g_free (data); } static void search_cb (GrlSource *source, guint browse_id, GrlMedia *media, guint remaining, void *user_data, const GError *error) { SearchData *data = (SearchData *)user_data; UnitySearchContext *context = data->search->search_context; /* Complete the search on error. */ if (error) { // XXX: can we report the error some how? complete_search (data); return; } // XXX: The media scanner source seems to continue invoking the // search callback after cancellation. #if 0 /* Has this search been cancelled? */ if (unity_cancellable_is_cancelled (context->cancellable)) { grl_operation_cancel (data->operation_id); complete_search (data); return; } #endif if (media) { data->scope_data->add_result (context->result_set, media); } if (remaining == 0) { complete_search (data); } } static void search_async (UnityScopeSearchBase *search, UnityScopeSearchBaseCallback cb, void *cb_target, void *user_data) { UnitySearchContext *context = search->search_context; ScopeSearchData *search_data = (ScopeSearchData *)user_data; GrlSource *source = search_data->source; /* perform a search */ GrlCaps *caps = grl_source_get_caps (source, GRL_OP_SEARCH); GrlOperationOptions *options = grl_operation_options_new (caps); grl_operation_options_set_count (options, MAX_RESULTS); grl_operation_options_set_flags (options, GRL_RESOLVE_IDLE_RELAY); grl_operation_options_set_type_filter (options, search_data->media_type); if (search_data->apply_filters) search_data->apply_filters (context->filter_state, options); SearchData *data = g_new0 (SearchData, 1); data->scope_data = search_data; data->search = search; data->cb = cb; data->cb_target = cb_target; data->operation_id = grl_source_search ( source, context->search_query, search_data->metadata_keys, options, search_cb, data); } static void search_sync_finished (UnityScopeSearchBase *search, void *user_data) { GMainLoop *ml = (GMainLoop *)user_data; g_main_loop_quit (ml); } #endif static void search_sync (UnityScopeSearchBase *search, void *user_data) { UnitySearchContext *context = search->search_context; ScopeSearchData *search_data = (ScopeSearchData *)user_data; MediaStore *store = search_data->store.get(); // FIXME: handle filters // FIXME: enforce result limits for (const auto &media : store->query(context->search_query, search_data->media_type, MAX_RESULTS)) { search_data->add_result (context->result_set, media); } } #if 0 void content_changed (GrlSource *source, GPtrArray *changed_medias, GrlSourceChangeType change_type, gboolean location_unknown, void *user_data) { ScopeSearchData *data = (ScopeSearchData *)user_data; int i; gboolean matched_type = FALSE; for (i = 0; i < changed_medias->len; i++) { GrlMedia *media = g_ptr_array_index(changed_medias, i); /* Does the changed media match the type filter for this scope? */ if (((data->media_type & GRL_TYPE_FILTER_AUDIO) != 0 && GRL_IS_MEDIA_AUDIO (media)) || ((data->media_type & GRL_TYPE_FILTER_VIDEO) != 0 && GRL_IS_MEDIA_VIDEO (media)) || ((data->media_type & GRL_TYPE_FILTER_IMAGE) != 0 && GRL_IS_MEDIA_IMAGE (media))) { matched_type = TRUE; break; } } if (matched_type) { unity_abstract_scope_results_invalidated ( UNITY_ABSTRACT_SCOPE (data->scope), UNITY_SEARCH_TYPE_DEFAULT); /* local content is displayed in home as well, invalidate that too */ unity_abstract_scope_results_invalidated ( UNITY_ABSTRACT_SCOPE (data->scope), UNITY_SEARCH_TYPE_GLOBAL); } } #endif void setup_search (UnitySimpleScope *scope, ScopeSearchData *data) { data->scope = scope; data->content_changed_id = 0; unity_simple_scope_set_search_func ( scope, search_sync, data, (GDestroyNotify)NULL); #if 0 if ((grl_source_supported_operations (data->source) & GRL_OP_NOTIFY_CHANGE) != 0) { data->content_changed_id = g_signal_connect ( data->source, "content-changed", G_CALLBACK (content_changed), data); GError *error = NULL; if (!grl_source_notify_change_start (data->source, &error)) { g_warning("Could not configure change notification: %s", error->message); g_signal_handler_disconnect ( data->source, data->content_changed_id); data->content_changed_id = 0; } g_clear_error (&error); } #endif } unity-scope-mediascanner-0.2+14.04.20140404/oldscope/video-scope.cpp0000644000015301777760000001330712317535203025413 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include "scope.h" #include using namespace mediascanner; void video_add_result (UnityResultSet *result_set, const MediaFile &media) { UnityScopeResult result = { 0, }; const std::string uri = media.getUri(); result.uri = const_cast(uri.c_str()); result.icon_hint = const_cast(""); result.category = 0; result.result_type = UNITY_RESULT_TYPE_PERSONAL; result.mimetype = const_cast(media.getContentType().c_str()); result.title = const_cast(media.getTitle().c_str()); result.comment = const_cast(""); result.dnd_uri = result.uri; result.metadata = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_variant_unref); int duration = media.getDuration(); GVariant *variant = g_variant_new_int32 (duration); g_hash_table_insert (result.metadata, const_cast("duration"), g_variant_ref_sink (variant)); int width = 0; //grl_media_video_get_width (GRL_MEDIA_VIDEO (media)); if (width > 0) { variant = g_variant_new_int32 (width); g_hash_table_insert (result.metadata, const_cast("width"), g_variant_ref_sink (variant)); } int height = 0; //grl_media_video_get_height (GRL_MEDIA_VIDEO (media)); if (height > 0) { variant = g_variant_new_int32 (height); g_hash_table_insert (result.metadata, const_cast("height"), g_variant_ref_sink (variant)); } unity_result_set_add_result (result_set, &result); g_hash_table_unref (result.metadata); } UnityAbstractPreview * video_preview (UnityResultPreviewer *previewer, void *user_data) { const char *title = previewer->result.title; const char *subtitle = ""; const char *comment = previewer->result.comment; int duration = 0, width = 0, height = 0; if (previewer->result.metadata != NULL) { GVariant *variant; variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("width"))); if (variant) { width = g_variant_get_int32 (variant); } variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("height"))); if (variant) { height = g_variant_get_int32 (variant); } variant = static_cast(g_hash_table_lookup (previewer->result.metadata, const_cast("duration"))); if (variant) { duration = g_variant_get_int32 (variant); } } UnityMoviePreview *preview = unity_movie_preview_new ( title, subtitle, comment, NULL); unity_movie_preview_set_rating (preview, -1.0f, 0); unity_preview_set_image_source_uri ( UNITY_PREVIEW (preview), previewer->result.uri); UnityPreviewAction *play_action = unity_preview_action_new ( "play", _("Play"), NULL); unity_preview_add_action (UNITY_PREVIEW (preview), play_action); if (width > 0 && height > 0) { char *dimensions = g_strdup_printf ("%d*%d", width, height); UnityInfoHint *hint = unity_info_hint_new ( "dimensions", _("Dimensions"), NULL, dimensions); g_free (dimensions); unity_preview_add_info (UNITY_PREVIEW (preview), hint); } if (duration > 0) { /* add info hint */ } return UNITY_ABSTRACT_PREVIEW (preview); } UnityAbstractScope * video_scope_new (std::shared_ptr store) { UnitySimpleScope *scope = unity_simple_scope_new (); unity_simple_scope_set_group_name (scope, DBUS_NAME); unity_simple_scope_set_unique_name (scope, DBUS_VIDEO_PATH); /* Set up schema */ UnitySchema *schema = unity_schema_new (); unity_schema_add_field (schema, "duration", "i", UNITY_SCHEMA_FIELD_TYPE_REQUIRED); unity_schema_add_field (schema, "width", "i", UNITY_SCHEMA_FIELD_TYPE_OPTIONAL); unity_schema_add_field (schema, "height", "i", UNITY_SCHEMA_FIELD_TYPE_OPTIONAL); unity_simple_scope_set_schema (scope, schema); /* Set up categories */ UnityCategorySet *categories = unity_category_set_new (); GFile *icon_dir = g_file_new_for_path ("/usr/share/icons/unity-icon-theme/places/svg"); GFile *icon_file = g_file_get_child (icon_dir, "group-videos.svg"); GIcon *icon = g_file_icon_new (icon_file); unity_category_set_add (categories, unity_category_new ("local", _("My Videos"), icon, UNITY_CATEGORY_RENDERER_DEFAULT)); g_object_unref (icon); g_object_unref (icon_file); g_object_unref (icon_dir); unity_simple_scope_set_category_set (scope, categories); /* Set up search */ ScopeSearchData *search_data = g_new0(ScopeSearchData, 1); search_data->store = store; search_data->media_type = VideoMedia; search_data->add_result = video_add_result; setup_search (scope, search_data); // XXX: handle cleanup of search_data unity_simple_scope_set_preview_func ( scope, video_preview, NULL, (GDestroyNotify)NULL); return UNITY_ABSTRACT_SCOPE (scope); } unity-scope-mediascanner-0.2+14.04.20140404/oldscope/main.cpp0000644000015301777760000000564212317535203024125 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include "scope.h" using namespace mediascanner; extern "C" int unity_scope_module_get_version () { return UNITY_SCOPE_API_VERSION; } static void on_mediascanner_invalidation_cb (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { UnityAbstractScope **scopes = (UnityAbstractScope**) user_data; UnityAbstractScope *target = NULL; gchar *invalidation_name = NULL; g_variant_get (parameters, "(s)", &invalidation_name); target = g_str_has_suffix (invalidation_name, "music") ? scopes[0] : scopes[1]; g_free (invalidation_name); if (target) { unity_abstract_scope_results_invalidated (target, UNITY_SEARCH_TYPE_DEFAULT); unity_abstract_scope_results_invalidated (target, UNITY_SEARCH_TYPE_GLOBAL); } } extern "C" GList * unity_scope_module_load_scopes (GError **error) { auto store = std::make_shared(MS_READ_ONLY); UnityAbstractScope *music = music_scope_new (store); UnityAbstractScope *video = video_scope_new (store); UnityAbstractScope **scopes = g_new (UnityAbstractScope*, 2); scopes[0] = music; scopes[1] = video; GDBusConnection *conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); g_dbus_connection_signal_subscribe (conn, NULL, "com.canonical.unity.scopes", "InvalidateResults", "/com/canonical/unity/scopes", NULL, (GDBusSignalFlags) 0, on_mediascanner_invalidation_cb, scopes, g_free); return g_list_append (g_list_append(NULL, music), video); } unity-scope-mediascanner-0.2+14.04.20140404/oldscope/CMakeLists.txt0000644000015301777760000000066612317535203025236 0ustar pbusernogroup00000000000000set(OLDSCOPE_SOURCES main.cpp base-scope.cpp music-scope.cpp video-scope.cpp ) include_directories(${OLDUNITY_INCLUDE_DIRS}) add_library(unity-scope-mediascanner MODULE ${OLDSCOPE_SOURCES}) set_target_properties(unity-scope-mediascanner PROPERTIES PREFIX "") target_link_libraries(unity-scope-mediascanner ${OLDUNITY_LDFLAGS}) install( TARGETS unity-scope-mediascanner LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/unity") unity-scope-mediascanner-0.2+14.04.20140404/CMakeLists.txt0000644000015301777760000000204712317535203023421 0ustar pbusernogroup00000000000000project(unity-scope-hollywood C CXX) cmake_minimum_required(VERSION 2.8.9) find_package(PkgConfig REQUIRED) find_package(Threads REQUIRED) pkg_check_modules(UNITY REQUIRED "libunity-scopes >= 0.4.0" mediascanner-2.0 ) pkg_check_modules(OLDUNITY REQUIRED "unity >= 7.0.9" mediascanner-2.0 ) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wmissing-prototypes -pedantic -std=c99") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wmissing-declarations -pedantic -std=c++11") set(DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/data") set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") set(SOURCE_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/src") include(GNUInstallDirs) set(GETTEXT_PACKAGE unity-scope-mediascanner) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ) include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_subdirectory("src") add_subdirectory("oldscope") add_subdirectory("data") enable_testing() add_subdirectory("tests") add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -V --output-on-failure) unity-scope-mediascanner-0.2+14.04.20140404/COPYING0000644000015301777760000010451312317535203021715 0ustar pbusernogroup00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . unity-scope-mediascanner-0.2+14.04.20140404/src/0000755000015301777760000000000012317535450021451 5ustar pbusernogroup00000000000000unity-scope-mediascanner-0.2+14.04.20140404/src/onlinemusicresultforwarder.h0000644000015301777760000000242612317535203027322 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Pawel Stolowski * */ #ifndef ONLINEMUSICRESULTFORWARDER_H #define ONLINEMUSICRESULTFORWARDER_H #include "bufferedresultforwarder.h" /* ResultForwarder that buffers results up until it gets notified via on_forwarder_ready() by another ResultForwarder. */ class OnlineMusicResultForwarder: public BufferedResultForwarder { public: OnlineMusicResultForwarder(unity::scopes::SearchReplyProxy const& upstream); virtual void push(unity::scopes::CategorisedResult result) override; virtual void push(unity::scopes::Category::SCPtr category) override; static const std::string songs_category_id; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/bufferedresultforwarder.cpp0000644000015301777760000000255312317535203027113 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Pawel Stolowski * */ #include "bufferedresultforwarder.h" BufferedResultForwarder::BufferedResultForwarder(unity::scopes::SearchReplyProxy const& upstream) : ResultForwarder(upstream), buffer_(true) { } void BufferedResultForwarder::push(unity::scopes::CategorisedResult result) { if (buffer_) { result_buffer_.push_back(std::move(result)); } else { ResultForwarder::push(std::move(result)); } } void BufferedResultForwarder::flush() { for (auto const& r: result_buffer_) { ResultForwarder::push(r); } result_buffer_.clear(); } void BufferedResultForwarder::on_forwarder_ready(ResultForwarder*) { buffer_ = false; flush(); } unity-scope-mediascanner-0.2+14.04.20140404/src/onlinemusicresultforwarder.cpp0000644000015301777760000000276212317535203027660 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Pawel Stolowski * */ #include "onlinemusicresultforwarder.h" #include const std::string OnlineMusicResultForwarder::songs_category_id = "cat_0"; OnlineMusicResultForwarder::OnlineMusicResultForwarder(unity::scopes::SearchReplyProxy const& upstream) : BufferedResultForwarder(upstream) { } void OnlineMusicResultForwarder::push(unity::scopes::CategorisedResult result) { if (result.category()->id() == songs_category_id) { BufferedResultForwarder::push(std::move(result)); } } void OnlineMusicResultForwarder::push(unity::scopes::Category::SCPtr category) { if (category->id() == songs_category_id) { // replace category to have different title upstream->register_category(category->id(), "Grooveshark", category->icon(), category->renderer_template()); } } unity-scope-mediascanner-0.2+14.04.20140404/src/music-scope.h0000644000015301777760000000303512317535203024046 0ustar pbusernogroup00000000000000#ifndef MUSIC_SCOPE_H #define MUSIC_SCOPE_H #include #include #include #include #include class MusicScope : public unity::scopes::ScopeBase { friend class MusicQuery; public: virtual int start(std::string const&, unity::scopes::RegistryProxy const&) override; virtual void stop() override; virtual unity::scopes::SearchQueryBase::UPtr search(unity::scopes::CannedQuery const &q, unity::scopes::SearchMetadata const& hints) override; virtual unity::scopes::PreviewQueryBase::UPtr preview(unity::scopes::Result const& result, unity::scopes::ActionMetadata const& hints) override; private: std::unique_ptr store; }; class MusicQuery : public unity::scopes::SearchQueryBase { public: MusicQuery(MusicScope &scope, unity::scopes::CannedQuery const& query); virtual void cancelled() override; virtual void run(unity::scopes::SearchReplyProxy const&reply) override; private: const MusicScope &scope; const unity::scopes::CannedQuery query; }; class MusicPreview : public unity::scopes::PreviewQueryBase { public: MusicPreview(MusicScope &scope, unity::scopes::Result const& result); virtual void cancelled() override; virtual void run(unity::scopes::PreviewReplyProxy const& reply) override; private: const MusicScope &scope; const unity::scopes::Result result; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/music-scope.cpp0000644000015301777760000001410412317535203024400 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include #include #include #include #include #include #include #include "music-scope.h" #define MAX_RESULTS 100 static const char MISSING_ALBUM_ART[] = "/usr/share/unity/icons/album_missing.png"; static const char SONGS_CATEGORY_ICON[] = "/usr/share/icons/unity-icon-theme/places/svg/group-songs.svg"; static const char SONGS_CATEGORY_DEFINITION[] = R"( { "schema-version": 1, "template": { "category-layout": "carousel", "overlay": true, "card-size": "medium" }, "components": { "title": "title", "art": "art", "subtitle": "artist" } } )"; // Category renderer to use when presenting search results // FIXME: This should use list category-layout (LP #1279279) static const char SEARCH_CATEGORY_DEFINITION[] = R"( { "schema-version": 1, "template": { "category-layout": "grid", "card-size": "small" }, "components": { "title": "title", "art": "art", "subtitle": "artist" } } )"; using namespace mediascanner; using namespace unity::scopes; int MusicScope::start(std::string const&, RegistryProxy const&) { store.reset(new MediaStore(MS_READ_ONLY)); return VERSION; } void MusicScope::stop() { store.reset(); } SearchQueryBase::UPtr MusicScope::search(CannedQuery const &q, SearchMetadata const& hints) { SearchQueryBase::UPtr query(new MusicQuery(*this, q)); return query; } PreviewQueryBase::UPtr MusicScope::preview(Result const& result, ActionMetadata const& hints) { PreviewQueryBase::UPtr previewer(new MusicPreview(*this, result)); return previewer; } MusicQuery::MusicQuery(MusicScope &scope, CannedQuery const& query) : scope(scope), query(query) { } void MusicQuery::cancelled() { } void MusicQuery::run(SearchReplyProxy const&reply) { CategoryRenderer renderer(query.query_string() == "" ? SONGS_CATEGORY_DEFINITION : SEARCH_CATEGORY_DEFINITION); auto cat = reply->register_category("songs", "Songs", SONGS_CATEGORY_ICON, renderer); for (const auto &media : scope.store->query(query.query_string(), AudioMedia, MAX_RESULTS)) { CategorisedResult res(cat); res.set_uri(media.getUri()); res.set_dnd_uri(media.getUri()); res.set_title(media.getTitle()); res["mimetype"] = media.getContentType(); res["duration"] = media.getDuration(); res["album"] = media.getAlbum(); res["artist"] = media.getAuthor(); res["track-number"] = media.getTrackNumber(); if(!reply->push(res)) { return; } } } MusicPreview::MusicPreview(MusicScope &scope, Result const& result) : scope(scope), result(result) { } void MusicPreview::cancelled() { } static std::string uriencode(const std::string &src) { const char DEC2HEX[16+1] = "0123456789ABCDEF"; std::string result = ""; for (const char ch : src) { if (isalnum(ch)) { result += ch; } else { result += '%'; result += DEC2HEX[(unsigned char)ch >> 4]; result += DEC2HEX[(unsigned char)ch & 0x0F]; } } return result; } static std::string make_art_uri(const std::string &artist, const std::string &album) { std::string result = "image://albumart/"; result += "artist=" + uriencode(artist); result += "&album=" + uriencode(album); return result; } void MusicPreview::run(PreviewReplyProxy const& reply) { ColumnLayout layout1col(1), layout2col(2), layout3col(3); layout1col.add_column({"art", "header", "actions", "tracks"}); layout2col.add_column({"art"}); layout2col.add_column({"header", "actions", "tracks"}); layout3col.add_column({"art"}); layout3col.add_column({"header", "actions", "tracks"}); layout3col.add_column({}); reply->register_layout({layout1col, layout2col, layout3col}); PreviewWidget header("header", "header"); header.add_attribute_mapping("title", "title"); header.add_attribute_mapping("subtitle", "artist"); PreviewWidget artwork("art", "image"); std::string artist = result["artist"].get_string(); std::string album = result["album"].get_string(); std::string art; if (artist.empty() || album.empty()) { art = MISSING_ALBUM_ART; } else { art = make_art_uri(artist, album); } artwork.add_attribute_value("source", Variant(art)); PreviewWidget tracks("tracks", "audio"); { VariantBuilder builder; builder.add_tuple({ {"title", Variant(result.title())}, {"source", Variant(result.uri())}, {"length", result["duration"]} }); tracks.add_attribute_value("tracks", builder.end()); } PreviewWidget actions("actions", "actions"); { VariantBuilder builder; builder.add_tuple({ {"id", Variant("play")}, {"label", Variant("Play in music app")} }); actions.add_attribute_value("actions", builder.end()); } reply->push({artwork, header, actions, tracks}); } extern "C" ScopeBase * UNITY_SCOPE_CREATE_FUNCTION() { return new MusicScope; } extern "C" void UNITY_SCOPE_DESTROY_FUNCTION(ScopeBase *scope) { delete scope; } unity-scope-mediascanner-0.2+14.04.20140404/src/video-scope.h0000644000015301777760000000276412317535203024044 0ustar pbusernogroup00000000000000#ifndef VIDEO_SCOPE_H #define VIDEO_SCOPE_H #include #include #include #include #include class VideoScope : public unity::scopes::ScopeBase { friend class VideoQuery; public: virtual int start(std::string const&, unity::scopes::RegistryProxy const&) override; virtual void stop() override; virtual unity::scopes::SearchQueryBase::UPtr search(unity::scopes::CannedQuery const &q, unity::scopes::SearchMetadata const& hints) override; virtual unity::scopes::PreviewQueryBase::UPtr preview(unity::scopes::Result const& result, unity::scopes::ActionMetadata const& hints) override; private: std::unique_ptr store; }; class VideoQuery : public unity::scopes::SearchQueryBase { public: VideoQuery(VideoScope &scope, unity::scopes::CannedQuery const& query); virtual void cancelled() override; virtual void run(unity::scopes::SearchReplyProxy const&reply) override; private: const VideoScope &scope; const unity::scopes::CannedQuery query; }; class VideoPreview : public unity::scopes::PreviewQueryBase { public: VideoPreview(VideoScope &scope, unity::scopes::Result const& result); virtual void cancelled() override; virtual void run(unity::scopes::PreviewReplyProxy const& reply) override; private: const VideoScope &scope; const unity::scopes::Result result; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/resultforwarder.h0000644000015301777760000000334512317535203025055 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #ifndef RESULTFORWARDER_H_ #define RESULTFORWARDER_H_ #include #include #include #include #include class ResultForwarder : public unity::scopes::SearchListenerBase { public: ResultForwarder(unity::scopes::SearchReplyProxy const& upstream) : upstream(upstream), ready_(false) { } virtual ~ResultForwarder() {} virtual void push(unity::scopes::Category::SCPtr category) override; virtual void push(unity::scopes::CategorisedResult result) override; void add_observer(std::shared_ptr result_forwarder); virtual void finished(unity::scopes::ListenerBase::Reason reason, std::string const& error_message) override; protected: virtual void on_forwarder_ready(ResultForwarder*); unity::scopes::SearchReplyProxy upstream; void notify_observers(); private: std::list> observers_; bool ready_; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/videoaggregatorquery.cpp0000644000015301777760000000350312317535203026411 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #include "videoaggregatorquery.h" #include "resultforwarder.h" #include "bufferedresultforwarder.h" #include #include #include #include #include #include using namespace unity::scopes; VideoAggregatorQuery::VideoAggregatorQuery(CannedQuery const& query, ScopeProxy local_scope, ScopeProxy online_scope) : query(query), local_scope(local_scope), online_scope(online_scope) { } VideoAggregatorQuery::~VideoAggregatorQuery() { } void VideoAggregatorQuery::cancelled() { } void VideoAggregatorQuery::run(unity::scopes::SearchReplyProxy const& parent_reply) { std::shared_ptr local_reply(new ResultForwarder(parent_reply)); std::shared_ptr online_reply; if(online_scope) { online_reply.reset(new BufferedResultForwarder(parent_reply)); local_reply->add_observer(online_reply); subsearch(online_scope, query.query_string(), online_reply); } subsearch(local_scope, query.query_string(), local_reply); } unity-scope-mediascanner-0.2+14.04.20140404/src/bufferedresultforwarder.h0000644000015301777760000000263412317535203026560 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Pawel Stolowski * */ #ifndef BUFFEREDRESULTFORWARDER_H_ #define BUFFEREDRESULTFORWARDER_H_ #include "resultforwarder.h" #include #include /* ResultForwarder that buffers results up until it gets notified via on_forwarder_ready() by another ResultForwarder. */ class BufferedResultForwarder : public ResultForwarder { public: BufferedResultForwarder(unity::scopes::SearchReplyProxy const& upstream); virtual ~BufferedResultForwarder() {} virtual void push(unity::scopes::CategorisedResult result) override; void flush(); protected: void on_forwarder_ready(ResultForwarder*) override; private: bool buffer_; std::list result_buffer_; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/musicaggregatorscope.cpp0000644000015301777760000000517612317535203026377 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #include "musicaggregatorscope.h" #include "musicaggregatorquery.h" #include #include #include #include using namespace unity::scopes; const char *LOCALSCOPE = "mediascanner-music"; const char *ONLINESCOPE = "com.canonical.scopes.grooveshark"; int MusicAggregatorScope::start(std::string const&, unity::scopes::RegistryProxy const& registry) { this->registry = registry; CategoryRenderer basic; local_scope = registry->get_metadata(LOCALSCOPE).proxy(); try { online_scope = registry->get_metadata(ONLINESCOPE).proxy(); } catch(std::exception &e) { std::cerr << "Could not instantiate online music scope: " << e.what() << std::endl; } return VERSION; } void MusicAggregatorScope::stop() { } SearchQueryBase::UPtr MusicAggregatorScope::search(CannedQuery const& q, SearchMetadata const&) { // FIXME: workaround for problem with no remote scopes on first run // until network becomes available if (online_scope == nullptr) { try { online_scope = registry->get_metadata(ONLINESCOPE).proxy(); } catch(std::exception &e) { // silently ignore } } SearchQueryBase::UPtr query(new MusicAggregatorQuery(q, local_scope, online_scope)); return query; } PreviewQueryBase::UPtr MusicAggregatorScope::preview(Result const& /*result*/, ActionMetadata const& /*hints*/) { return nullptr; } #define EXPORT __attribute__ ((visibility ("default"))) extern "C" { EXPORT unity::scopes::ScopeBase* // cppcheck-suppress unusedFunction UNITY_SCOPE_CREATE_FUNCTION() { return new MusicAggregatorScope(); } EXPORT void // cppcheck-suppress unusedFunction UNITY_SCOPE_DESTROY_FUNCTION(unity::scopes::ScopeBase* scope_base) { delete scope_base; } } unity-scope-mediascanner-0.2+14.04.20140404/src/videoaggregatorquery.h0000644000015301777760000000261112317535203026055 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #ifndef VIDEOAGGREGATORQUERY_H_ #define VIDEOAGGREGATORQUERY_H_ #include #include #include class VideoAggregatorQuery : public unity::scopes::SearchQueryBase { public: VideoAggregatorQuery(unity::scopes::CannedQuery const& query, unity::scopes::ScopeProxy local_scope, unity::scopes::ScopeProxy online_scope); ~VideoAggregatorQuery(); virtual void cancelled() override; virtual void run(unity::scopes::SearchReplyProxy const& reply) override; private: unity::scopes::CannedQuery query; unity::scopes::ScopeProxy local_scope; unity::scopes::ScopeProxy online_scope; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/videoaggregatorscope.cpp0000644000015301777760000000517212317535203026361 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #include "videoaggregatorscope.h" #include "videoaggregatorquery.h" #include #include #include #include using namespace unity::scopes; const char *LOCALSCOPE = "mediascanner-video"; const char *ONLINESCOPE = "com.canonical.scopes.remotevideos"; int VideoAggregatorScope::start(std::string const&, unity::scopes::RegistryProxy const& registry) { this->registry = registry; CategoryRenderer basic; local_scope = registry->get_metadata(LOCALSCOPE).proxy(); try { online_scope = registry->get_metadata(ONLINESCOPE).proxy(); } catch(const std::exception &e) { std::cerr << "Could not instantiate online scope:" << e.what() << std::endl; } return VERSION; } void VideoAggregatorScope::stop() { } SearchQueryBase::UPtr VideoAggregatorScope::search(CannedQuery const& q, SearchMetadata const&) { // FIXME: workaround for problem with no remote scopes on first run // until network becomes available if (online_scope == nullptr) { try { online_scope = registry->get_metadata(ONLINESCOPE).proxy(); } catch(std::exception &e) { // silently ignore } } SearchQueryBase::UPtr query(new VideoAggregatorQuery(q, local_scope, online_scope)); return query; } PreviewQueryBase::UPtr VideoAggregatorScope::preview(Result const& /*result*/, ActionMetadata const& /*hints*/) { return nullptr; } #define EXPORT __attribute__ ((visibility ("default"))) extern "C" { EXPORT unity::scopes::ScopeBase* // cppcheck-suppress unusedFunction UNITY_SCOPE_CREATE_FUNCTION() { return new VideoAggregatorScope(); } EXPORT void // cppcheck-suppress unusedFunction UNITY_SCOPE_DESTROY_FUNCTION(unity::scopes::ScopeBase* scope_base) { delete scope_base; } } unity-scope-mediascanner-0.2+14.04.20140404/src/resultforwarder.cpp0000644000015301777760000000317112317535203025405 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #include "resultforwarder.h" #include using namespace unity::scopes; void ResultForwarder::push(Category::SCPtr category) { upstream->register_category(category); } void ResultForwarder::push(CategorisedResult result) { upstream->push(result); if (!ready_) { ready_ = true; notify_observers(); } } void ResultForwarder::finished(ListenerBase::Reason /*reason*/, std::string const& /*error_message*/) { if (!ready_) { ready_ = true; notify_observers(); } } void ResultForwarder::notify_observers() { for (auto o: observers_) { o->on_forwarder_ready(this); } } void ResultForwarder::add_observer(std::shared_ptr result_forwarder) { if (result_forwarder.get() != this) { observers_.push_back(result_forwarder); } } void ResultForwarder::on_forwarder_ready(ResultForwarder*) { // base impl does nothing } unity-scope-mediascanner-0.2+14.04.20140404/src/video-scope.cpp0000644000015301777760000001105212317535203024365 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by James Henstridge * */ #include #include #include #include #include #include #include #include #include "video-scope.h" #define MAX_RESULTS 100 using namespace mediascanner; using namespace unity::scopes; static const char LOCAL_CATEGORY_ICON[] = "/usr/share/icons/unity-icon-theme/places/svg/group-videos.svg"; static const char LOCAL_CATEGORY_DEFINITION[] = R"( { "schema-version": 1, "template": { "category-layout": "carousel", "overlay": true, "card-size": "medium" }, "components": { "title": "title", "art": { "field": "art", "aspect-ratio": 1.5 } } } )"; // Category renderer to use when presenting search results // FIXME: This should use list category-layout (LP #1279279) static const char SEARCH_CATEGORY_DEFINITION[] = R"( { "schema-version": 1, "template": { "category-layout": "grid", "card-size": "small" }, "components": { "title": "title", "art": "art" } } )"; int VideoScope::start(std::string const&, RegistryProxy const&) { store.reset(new MediaStore(MS_READ_ONLY)); return VERSION; } void VideoScope::stop() { store.reset(); } SearchQueryBase::UPtr VideoScope::search(CannedQuery const &q, SearchMetadata const& hints) { SearchQueryBase::UPtr query(new VideoQuery(*this, q)); return query; } PreviewQueryBase::UPtr VideoScope::preview(Result const& result, ActionMetadata const& hints) { PreviewQueryBase::UPtr previewer(new VideoPreview(*this, result)); return previewer; } VideoQuery::VideoQuery(VideoScope &scope, CannedQuery const& query) : scope(scope), query(query) { } void VideoQuery::cancelled() { } void VideoQuery::run(SearchReplyProxy const&reply) { CategoryRenderer renderer(query.query_string() == "" ? LOCAL_CATEGORY_DEFINITION : SEARCH_CATEGORY_DEFINITION); auto cat = reply->register_category("local", "My Videos", LOCAL_CATEGORY_ICON, renderer); for (const auto &media : scope.store->query(query.query_string(), VideoMedia, MAX_RESULTS)) { CategorisedResult res(cat); res.set_uri(media.getUri()); res.set_dnd_uri(media.getUri()); res.set_title(media.getTitle()); res["duration"] =media.getDuration(); // res["width"] = media.getWidth(); // res["height"] = media.getHeight(); if(!reply->push(res)) { return; } } } VideoPreview::VideoPreview(VideoScope &scope, Result const& result) : scope(scope), result(result) { } void VideoPreview::cancelled() { } void VideoPreview::run(PreviewReplyProxy const& reply) { ColumnLayout layout1col(1), layout2col(2), layout3col(3); layout1col.add_column({"video", "header", "actions"}); layout2col.add_column({"video", "header"}); layout2col.add_column({"actions"}); layout3col.add_column({"video", "header"}); layout3col.add_column({"actions"}); layout3col.add_column({}); reply->register_layout({layout1col, layout2col, layout3col}); PreviewWidget header("header", "header"); header.add_attribute_mapping("title", "title"); PreviewWidget video("video", "video"); video.add_attribute_mapping("source", "uri"); PreviewWidget actions("actions", "actions"); { VariantBuilder builder; builder.add_tuple({ {"id", Variant("play")}, {"label", Variant("Play")} }); actions.add_attribute_value("actions", builder.end()); } reply->push({video, header, actions}); } extern "C" ScopeBase * UNITY_SCOPE_CREATE_FUNCTION() { return new VideoScope; } extern "C" void UNITY_SCOPE_DESTROY_FUNCTION(ScopeBase *scope) { delete scope; } unity-scope-mediascanner-0.2+14.04.20140404/src/musicaggregatorquery.cpp0000644000015301777760000000351112317535203026422 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #include "musicaggregatorquery.h" #include "resultforwarder.h" #include "onlinemusicresultforwarder.h" #include #include #include #include #include #include using namespace unity::scopes; MusicAggregatorQuery::MusicAggregatorQuery(CannedQuery const& query, ScopeProxy local_scope, ScopeProxy online_scope) : query(query), local_scope(local_scope), online_scope(online_scope) { } MusicAggregatorQuery::~MusicAggregatorQuery() { } void MusicAggregatorQuery::cancelled() { } void MusicAggregatorQuery::run(unity::scopes::SearchReplyProxy const& parent_reply) { std::shared_ptr local_reply(new ResultForwarder(parent_reply)); std::shared_ptr online_reply; if(online_scope) { online_reply.reset(new OnlineMusicResultForwarder(parent_reply)); local_reply->add_observer(online_reply); subsearch(online_scope, query.query_string(), online_reply); } subsearch(local_scope, query.query_string(), local_reply); } unity-scope-mediascanner-0.2+14.04.20140404/src/CMakeLists.txt0000644000015301777760000000254512317535203024213 0ustar pbusernogroup00000000000000set(SCOPE_SOURCES main.cpp base-scope.cpp music-scope.cpp video-scope.cpp ) include_directories(${UNITY_INCLUDE_DIRS}) add_library(mediascanner-music MODULE music-scope.cpp) #set_target_properties(mediascanner-music PROPERTIES PREFIX "") target_link_libraries(mediascanner-music ${UNITY_LDFLAGS}) add_library(mediascanner-video MODULE video-scope.cpp) #set_target_properties(mediascanner-video PROPERTIES PREFIX "") target_link_libraries(mediascanner-video ${UNITY_LDFLAGS}) add_library(musicaggregator SHARED musicaggregatorscope.cpp musicaggregatorquery.cpp resultforwarder.cpp onlinemusicresultforwarder.cpp bufferedresultforwarder.cpp ) target_link_libraries(musicaggregator ${UNITY_SCOPES_LDFLAGS}) add_library(videoaggregator SHARED videoaggregatorscope.cpp videoaggregatorquery.cpp resultforwarder.cpp bufferedresultforwarder.cpp) target_link_libraries(videoaggregator ${UNITY_SCOPES_LDFLAGS}) install( TARGETS mediascanner-music LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/unity-scopes/mediascanner-music") install( TARGETS mediascanner-video LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/unity-scopes/mediascanner-video") install(TARGETS musicaggregator LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/unity-scopes/musicaggregator") install(TARGETS videoaggregator LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/unity-scopes/videoaggregator") unity-scope-mediascanner-0.2+14.04.20140404/src/musicaggregatorscope.h0000644000015301777760000000306012317535203026032 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #ifndef MUSICAGGREGATORSCOPE_H #define MUSICAGGREGATORSCOPE_H #include #include #include #include class MusicAggregatorScope : public unity::scopes::ScopeBase { public: virtual int start(std::string const&, unity::scopes::RegistryProxy const&) override; virtual void stop() override; virtual unity::scopes::PreviewQueryBase::UPtr preview(const unity::scopes::Result&, const unity::scopes::ActionMetadata&) override; virtual unity::scopes::SearchQueryBase::UPtr search(unity::scopes::CannedQuery const& q, unity::scopes::SearchMetadata const&) override; private: std::string query; unity::scopes::ScopeProxy local_scope; unity::scopes::ScopeProxy online_scope; unity::scopes::RegistryProxy registry; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/musicaggregatorquery.h0000644000015301777760000000261112317535203026067 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #ifndef MUSICAGGREGATORQUERY_H_ #define MUSICAGGREGATORQUERY_H_ #include #include #include class MusicAggregatorQuery : public unity::scopes::SearchQueryBase { public: MusicAggregatorQuery(unity::scopes::CannedQuery const& query, unity::scopes::ScopeProxy local_scope, unity::scopes::ScopeProxy online_scope); ~MusicAggregatorQuery(); virtual void cancelled() override; virtual void run(unity::scopes::SearchReplyProxy const& reply) override; private: unity::scopes::CannedQuery query; unity::scopes::ScopeProxy local_scope; unity::scopes::ScopeProxy online_scope; }; #endif unity-scope-mediascanner-0.2+14.04.20140404/src/videoaggregatorscope.h0000644000015301777760000000300612317535203026020 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by Jussi Pakkanen * */ #ifndef VIDEOAGGREGATORSCOPE_H #define VIDEOAGGREGATORSCOPE_H #include #include #include class VideoAggregatorScope : public unity::scopes::ScopeBase { public: virtual int start(std::string const&, unity::scopes::RegistryProxy const&) override; virtual void stop() override; virtual unity::scopes::PreviewQueryBase::UPtr preview(const unity::scopes::Result&, const unity::scopes::ActionMetadata&) override; virtual unity::scopes::SearchQueryBase::UPtr search(unity::scopes::CannedQuery const& q, unity::scopes::SearchMetadata const&) override; private: std::string query; unity::scopes::ScopeProxy local_scope; unity::scopes::ScopeProxy online_scope; unity::scopes::RegistryProxy registry; }; #endif