pax_global_header00006660000000000000000000000064150034204050014503gustar00rootroot0000000000000052 comment=bf88fdc5d2a066a377710f1a79d36b2b68325435 multani-sonata-bf88fdc/000077500000000000000000000000001500342040500152255ustar00rootroot00000000000000multani-sonata-bf88fdc/.gitignore000066400000000000000000000002011500342040500172060ustar00rootroot00000000000000*.py[co] *.swp *~ mmkeys.so sonata/sonata sonata/share/locale/* tags TAGS cscope* RECORD *.egg-info/ build/ sonata/genversion.py multani-sonata-bf88fdc/.tx/000077500000000000000000000000001500342040500157365ustar00rootroot00000000000000multani-sonata-bf88fdc/.tx/config000066400000000000000000000001771500342040500171330ustar00rootroot00000000000000[main] host = https://www.transifex.com [sonata.all] file_filter = po/.po source_file = po/Sonata.pot source_lang = en multani-sonata-bf88fdc/CHANGELOG000066400000000000000000000657711500342040500164570ustar00rootroot000000000000001.7.1 (2025-04-27) ------------------ New features '''''''''''' * Compatible with Python 3.12 Breaking changes '''''''''''''''' * Remove the "lyricswiki" plugin: LyricWiki completely closed down in on September 21, 2020. Bug Fixes ''''''''' * Updated translations 1.7.0 (2020-12-25) ------------------ It's has been a beta since a long time, let's make it official :) Sonata now requires [python-mpd](https://github.com/Mic92/python-mpd2) >= 2.0. New features '''''''''''' * Rewind to the begin of track when pressing the "Previous" button, if the song has been read for more than 5 seconds (@supergln) https://github.com/multani/sonata/pull/102 * add "Shuffle by album" https://github.com/multani/sonata/pull/59 * repeat single song (Corentin Néau) https://github.com/multani/sonata/pull/95 Bug Fixes ''''''''' * fix refreshing profiles upon connections add/delete (Corentin Néau) https://github.com/multani/sonata/pull/92 * fix update of cover and text in fullscreen mode (Corentin Néau) https://github.com/multani/sonata/pull/93 * removed Gtk CSS warnings (Benjamin Debeerst) https://github.com/multani/sonata/pull/97 * mpd does not report volume when state is stopped https://github.com/multani/sonata/pull/105 * Compatibility fix with newer Python, GObject, python-mpd (Simon McVittie) https://github.com/multani/sonata/pull/107 https://github.com/multani/sonata/pull/108 https://github.com/multani/sonata/pull/109 https://github.com/multani/sonata/pull/110 https://github.com/multani/sonata/pull/112 * Add keywords to the .desktop file (Javi Merino) https://github.com/multani/sonata/pull/111 * Improve downloading lyrics from LyricsWiki https://github.com/multani/sonata/pull/115 1.7b1 (2016-01-31) ------------------ New features '''''''''''' * redirect to the localized Wikipedia according to the user's local, instead of redirecting to the English one. https://github.com/multani/sonata/issues/61 Bug fixes ''''''''' * fix crashs on Gtk.TextView when updating the lyrics of a song * Fix streams parsing: https://github.com/multani/sonata/issues/41 https://github.com/multani/sonata/issues/38 * fix withdrawn mode by fixing incorrect usage of threads and Gtk eco-system * choosing a local artwork wasn't working anymore * fix artwork caching * keep the selected tab when hiding/showing Sonata using the tray icon * correctly handle tracks without a definitely reasonable track or disc value (Peter Helbing) https://github.com/multani/sonata/pull/74 * fix translation of of Glade dialogs (Peter Helbing) https://github.com/multani/sonata/pull/75 * fix opening the About dialog (based on Rocus van Oosten report). Internal changes '''''''''''''''' * slightly better performance when updating the library * threading improvements: - use GIO instead of a thread to download drag-and-droped covers - remove the MPD from a dedicated thread. It works as good (if not better) as before since the threaded code was poorly written anyway and rendered the additionnal basically useless. This move is not definitive but something better will probably come up some day. * Looking for covers isn't as filesystem expensive as before, but it doesn't check for multiple possible cases in the cover name anymore. 1.7a2 (2013-11-26) ------------------ New features '''''''''''' * Download bigger covers from Last.fm * Centering the current song using Ctrl+i now also selects the current song * Use Transifex as a translation plateform. See https://www.transifex.com/projects/p/sonata/ * Update translations: - Russian (thanks Stas!) - Ukrainian (thanks Stas!) - French (thanks Jon!) Bug fixes ''''''''' * Fix search in library (using a specific filter or the 'everything' filter) * Fix scrobbling to Last.fm * Scrolling with the mouse wheel on the tray icon correctly changes the volume * Some lyrics from LyricsWiki redirects to another page. The plugin now follows those redirect to find the actual lyrics. * Fix multiple issues related to drag-and-drop of songs in the current playlist * Fix error while using Sonata's command line interface * Fix filtering songs in the current playlist * Fix DND of custom artwork images in the main window * Fix breadcrumb icon in the library while browsing an album while in Artist view * Fix saving the visibility flag of tabs: https://github.com/multani/sonata/issues/45 * Fix hiding/showing the main window even if it's not the active widget: https://github.com/multani/sonata/issues/43 * Deleting a track doesn't toggle the filter bar anymore in the current playlist. * Better support for MPD 0.18 Internal changes '''''''''''''''' * Simplified the `current` module. It should also now use less memory than before. * Provide a new GObject signal to notify on artwork change and artwork reset. 1.7a1 (2013-02-08) ------------------ New features '''''''''''' * Fetch covers from Last.fm instead of Rhapsody.com * Custom plugins are now stored along the configuration file in ~/.config/sonata/plugins/ * Switch to Python 3 and Gtk 3 (Jörg Thalheim & Adam Dane) * More items in the tray menu (Kirill Lashuk) * Better fullscreen support (Kirill Lashuk) * Toggle fullscreen from the command line (Daniel) * Support MPD's "consume" mode (Anton Lashkov) * Use more default icons in the context menus (Anton Lashkov) * Load only the most recent of plugins with the same names Bug fixes ''''''''' * Fix population of the "Save to playlist" menu (Zhihao Yuan) * Prevent multiple entries and improve art search with multi-CD albums (Kirill Lashuk) * Fixes weird show up if Sonata is not on the current workspace (Kirill Lashuk) * Scrobble after seeking to the beginning (Kirill Lashuk) * The lyricswiki plugin should now work again (Jonathan Ballet) * Fix UI status after reconnection to MPD (Jonathan Ballet) * Fix crash when searching the library (Kirill Lashuk) Internal changes '''''''''''''''' * Simpler API for cover fetching plugins * Lot of code cleanup and internal changes * Removed Sugar UI support * Use Glade files to describe the interface and GtkBuilder to build the interface * More systematic configuration file management * High-level access to MPD's command results Previous releases ----------------- v1.6.2.1 - September 21, 2009 + Library artwork caching/displaying improvements + Lyricwiki screen scraping workaround + Replace Amazon.com cover art fetching with Rhapsody.com + Bug: Fix library sorting when adding, e.g., albums to playlist + Bug: Fix window positioning weirdness when unwithdrawing from systray + Bug: Fix album being labeled various artists when a duplicate exists + Bug: Fix album tracks in the info tab being out of order sometimes + Bug: Show songs with a missing date in info album listing + Bug: Library icons change after adding stream to playlist + Bug: Cpu spike, tooltips missing in library search results with gtk 2.16.2 v1.6.2 - April 13, 2009 + Bug: Fix cli options (e.g. 'sonata play') v1.6.1 - April 11, 2009 + Reduce library's filesystem view row height + More auto-applying of preferences (e.g. format tab) + Bug: Fix python version check for Ubuntu Jaunty + Bug: Traceback if track has multiple date tags + Bug: Fix infinite loop when format strings end in '{' + Bug: Fix music directory chooser selecting the wrong folder sometimes + Bug: Catch OSErrors from os.listdir, e.g. flac files with cue sheets + Bug: Fix --profile option v1.6 - March 29, 2009 + Album browsing mode, additional details in library views + Real-time searching of library (search as you type) + Fullscreen album art mode (via right-click on artwork) (mips) + Improve library searching across meta tags + Sort library search results + Show file path in tooltip for library search results + Improved support for updating less than entire library + Drag-and-drop to copy files from Sonata to a file manager (Kamil) + Ability to show file paths in tag editing window + Use plchanges for faster performance (e.g. add to playlist) + Allow manually fetching remote art when using local art pref (Erik) + Swap mousewheel behavior for progressbar + Only minimize to trayicon on click if focused; raise if not focused + Use new 'listplaylists' command for retrieving playlists + Allow hiding the application's titlebar in preferences + Better error trapping + Make process name 'sonata' for linux (himdel) + Look for - .txt lyrics files by other clients + Add Traditional Chinese translation (b4283) + Add Japanese translation (Masato) + Add Slovenian translation (Alan) + Code modernisation, modularisation, overall cleanup, documentation + A prototype of a plug-in system + Unicode fixes + Some helpful error messages if startup fails + Useless code removed, various code cleanups and refactorings (Stephen) + Bug: Bad profiles prevent Sonata from starting + Bug: Error for CLI arguments when Sonata can't connect to MPD (Juan) + Bug: Files may not update in interface after tag editing + Bug: Traceback with Turkish locale + Bug: Lyrics don't work with python-zsi 2.0 on Ubuntu + Bug: Bell sound when going to parent folder using backspace v1.5.3 - September 13, 2008 + Quick link to edit lyrics through LyricWiki + Unicode lyrics and better searching with LyricWiki (orivej) + Store audioscrobbler password as md5 hash + Add Greek translation (Lazaros) + Bug: Fix lost connection when hard drive is spun down + Bug: Fix non-ascii characters when scrobbling with non-utf8 locale + Bug: Selected item changed on double-click + Bug: Use consistent behavior for titlebar + Bug: Prevent bad cover image files from causing problems + Bug: Don't sort library search results + Bug: Ensure image filenames are escaped in search routine v1.5.2 - June 5, 2008 + Improved artwork/lyrics caching through case-insenstive searching + Add Turkish translation (Gökmen) + Bug: Fix artwork for files with unicode characters + Bug: Fix crash if mpd library is empty + Bug: Fix regression where dbus-python became required + Bug: Bold titles lose sync if song changes with visible filterbar + Bug: Doesn't scrobble when same song is repeated + Bug: Python conflict when installed with sugar (OLPC) + Bug: Fix artwork display in song notification window for RTL languages + Bug: Fix progressbar seeking for RTL languages + Bug: No play/pause indicator in egg tray icon if started while mpd is active v1.5.1 - May 3, 2008 + Swap 'shuffle' and 'random' to be consistent with MPD + "Save list to">"foo" can now either replace playlist or append songs + Add Catalan translation (Franc) + Add Arabic translation (Ahmad) + Bug: Fix play/pause with multimedia keys (Vinay) + Bug: Prevent possible traceback from gobject.filename_from_utf8 + Bug: 'play after replace' when in shuffle mode plays 1st song, not random + Bug: Fix random, repeat, and toggle commands from console + Bug: Songs not tagged with the album name don't show up + Bug: Cannot disconnect when MPD_HOST and MPD_PORT are set + Bug: Fix %D and %N formats within brackets v1.5 - April 3, 2008 + Replace album view with genre view for library + Display covers for albums in artist/genre views + Add menu items and shortcuts for playing library items after add/replace + Allow setting artwork for streams + Optional stylized album art with cases (Aidan) + New, faster python mpd interface (jat) + --popup argument to popup song notification (requires D-Bus) (Oleg) + Show 'Untagged' artists/genres in their respective library views + Allow DND of cover art from a web browser (Артем) + Allow DND of music from a file manager into playlist (requires mpd 0.14) + Preserve column percentages for current tab across window resizing + Speed up mpd-related commandline arguments + Switch back to last tab on second cover art click + Retain selection in lists after removing items + Hidden config option to expand notebook tabs (tabs_expanded) + Set ServiceProxy cachedir for lyrics to work around ZSI bug + Add Estonian translation (Mihkel) + Bug: Fix multimedia keys for gnome 2.22 + Bug: Fix artwork for artists/albums with "/" in them (e.g. AC/DC) + Bug: Fix egg trayicon with vertical system tray + Bug: Weird bug in library-view + Bug: Prevent failure to load if tab positions are saved as None + Bug: Fix non-ascii characters in files for non-utf8 filesystems (zap) + Bug: Prevent crash with certain locales like turkish (jat) + Bug: Using filter causes playlist to jump to the top + Bug: Fix AudioScrobblerQuery (kigurai) v1.4.2 - February 9, 2008 + Add %D for disc tag in display formatting options + Better handling if no read permission (e.g. no/bad mpd password supplied) + Bug: Fix seeking in progress bar + Bug: Fix blank album info when there is an ampersand + Bug: Missing color in notification window + Bug: Notebook arrow clicks are ignored due to gtk bug + Bug: Potential ordering bug when sorting via column heading click + Bug: Make desktop file compliant + Bug: Column widths can collapse when exiting while minimized to the tray v1.4.1 - February 2, 2008 + Remove queue support (it was removed from mpd-svn, complain to them) + Improved re-ordering of playlist songs (including multiple selected songs) + Add album info into info tab + Use hand2 instead of hand1 for song info links + Bug: Traceback can occur after enabling audioscrobbler + Bug: Text background color on tabs (ecik) + Bug: Visible background of eventboxes for info tab links, etc. + Bug: Can't click (more) link in non-English locales + Bug: Crash when using libegg with system tray icon disabled + Bug: Disable tag editing link in info tab for streams/remote files + Bug: Unescape common html codes from lyrics fetching, enable formatting + Bug: The main notebook should be scrollable v1.4 - January 15, 2008 + Integrate info window into main player + Update to audioscrobbler protocol 1.2 and scrobbling bug fixes (mveers) + Implemented caching of scrobbles across client restarts + Vertically center currently playing song + Updated artwork (Adrian Chromenko) + IPv6 support for the mpd connection (Shane Kerr) + Allow screen center for notification popup + Preference for saving lyrics to music file's directory (like artwork) + Allow hiding and reordering notebook tabs (e.g. playlists, streams, info) + Retain library path when re-opening Sonata + Remove confusing 'remote only' and 'remote, then local' artwork options + Ability to hide progress bar (can create very minimal player) + Skip fallback artwork search of just album name if primary searches fail + Make system tray icon scalable + Shortcuts to search library (ctrl-h), randomize current playlist (alt-r) + Use gtk theme's link-color if available (only for gtk 2.12 and above) + Bug: Right-click menu can cause accidental actions with some gtk themes + Bug: Prevent crash on negative disc/track numbers + Bug: Filter + Edit Tags edits a different song than selected + Bug: Prevent possible exception regarding cover art on first load + Bug: Fix retrieving some non-English lyrics (ecik) + Bug: Allow MPD_HOST to override GUI + Bug: {} displays in the Current column title + Bug: Fix manpage path to be FHS compliant + Bug: Ensure that the version of ZSI is compatible with sonata v1.3 - October 29, 2007 + Playlist queue support (requires mpd 0.14 - currently mpd-svn) + Use-configurable columns in playlist by using "|" in prefs > format (xsdnyd) + Switch from SOAPpy to newer ZSI library for lyrics fetching + Use xmms-like search filter by default when user types (no more ctrl-j) + Ctrl-i shortcut to center currently playing song + Use case insensitive sorting for library (holy_robot) + Ignore "the" when sorting library in artist/album views (holy_robot) + Better logic when sorting playlists and new "dir+file" sort option (sed) + Allow saving/overwriting existing playlists and streams + Hidden config options to set browser, hide column headers + Update license to GNU GPLv3 + Added Brazilian translation (Alex Tercete Matos) + Added Danish translation (Martin Dybdal) + Bug: Fix nl.po translation causing crash + Bug: Remember playlist position when adding from library + Bug: Fixed tracebacks with certain encodings + Bug: MPD_HOST with password doesn't work on first install + Bug: Fix desktop file to match current XDG standard (nigel) + Bug: Search Amazon artwork using latin1 since it no longer supports utf8 + Bug: Possible tag editing issues w/non-latin encoding (requires tagpy 0.93) + Bug: Fix czech translation to use cs.po v1.2.3 - August 23, 2007 + Incorporate disc tag in album sorting (Emmanuel Viaud) + Significantly reduced wakeups/sec according to powertop + Add stream name as a formatting option + Added Italian translation (Gianni Vialetto) + Added Swedish translation (Daniel Nylander) + Added Dutch translation (Olivier) + Bug: Stupid parsing of amazon URLs, reduced success of cover art fetching + Bug: Default cover remains after refetching when not using ~/.covers + Bug: Czech translation incorrectly labeled Swedish + Bug: Song played after a replace is first in list, even in shuffle mode + Bug: Collapsed view doesn't work properly in some WMs (e.g. Fluxbox) + Bug: Display 'update library' menu item even when library is empty v1.2.2 - July 22, 2007 + Bug: Fix artwork fetching (Amazon gzip'ed xml returns garbage) + Bug: Prevent connection error if the interface hasn't yet been run + Bug: Prevent possibility of deleting image file when choosing local art file + Bug: Don't load gnome-settings-daemon if it's not running (kinote) v1.2.1 - July 16, 2007 + Bug: Using MPD with a password causes error v1.2 - July 15, 2007 + Audioscrobbler support (requires python 2.5 or python-elementtree) (Owen) + Support for multiple profiles (and, e.g., "sonata --profile=2") + Ability to set search terms for lyrics + Ability to rename playlists (requires mpd >= 0.13) + Prevent continually searching for artwork/lyrics if not found the first time + Search for additional artwork filenames + Allows resetting artwork to the default image + 'Save All' button for tag editing window + Display MPD status in systray icon + Prevent GUI blocking when connecting to MPD, where possible + Added Finnish translation (Ilkka Tuohela) + Bug: Multimedia keys no longer work in Gnome 2.18 (Florian) + Bug: Hide statusbar in collapse mode when showing from systray + Bug: Cover artwork filename doesn't use system's locale charset + Bug: MPD_HOST variable doesn't work when it includes password v1.1.1 - May 18, 2007 + Add Czech translation (Jakub Adler) + Bug: Incorrect artist can sometimes be set for album art/info (vEX) + Bug: Artwork isn't set when there is a single image in the song's dir + Bug: Improve handling under tiling WMs like ion3 + Bug: A 2nd instance isn't prevented with dbus/python 2.4 (Sebastian) v1.1 - May 7, 2007 + Ctrl-J for xmms-like search filter (vEX/Eduard) + Implemented logic for Various Artists albums + Cover art pref: save to ~/.covers or file's respective dir + Support for GNOME session management + Allow searching through ALL metadata in library + Link artist and album name in song info window to wikipedia entry + Add shuffle, repeat, --visible, and --hidden commandline arguments + Show if mpd is updating in statusbar + Save last used option in library search + Update code for dbus-python 0.80 API (Jordan) + Ellipsize text in treeviews, current playing song (Jordan) + Add button for listing of shortcuts to About dialog + Resize cover art to fit song info window + Added Simplified Chinese translation (Desmond Chang) + Bug: Prevent tracebacks between withdrawing app & gtk.StatusIcon + Bug: Fix error if mpd is not running and sonata starts hidden + Bug: Can't manually set artwork across filesystems + Bug: Can't use find-as-you-type in the current playlist + Bug: Right-click menu closes right away for some users v1.0.1 - February 13, 2007 + Make lyrics fetching optional + Allow editing of stream name/url + Hide the notification window when it is clicked + Small usability improvements to gtk.StatusIcon + Improvements to reordering the current playlist with drag-n-drop + Bug: Info window freezes when editing currently playing song's tags + Bug: Tag editing doesn't work with older version (0.90.1) of tagpy + Bug: Prevent strange potential freeze with gc.collect() + Bug: Cover art doesn't update correctly if Local Only artwork set + Bug: Lyrics occassionally don't stay synced with current playing song v1.0 - January 21, 2007 + Multiple views for library: filesystem, artists, albums + Editing of song tags (requires optional taglib & tagpy) + Auto-fetching of song lyrics (requires optional soappy) + Improved song info window and access to it + Allow pls/m3u/extm3u's as stream inputs + Sort current playlist (by metadata, random, reverse) + Optional statusbar (playlist length, time) + Revert to gtk's StatusIcon if gnome-python-extras isn't installed + Make system tray icon optional + Pref to write xmms-info like status file to use with IM, IRC.. (Tim) + Allow drag-n-drop of images to set album art + If there is only one image in the song's dir, set as art (Ivan) + Album art priority preference (local vs remove) + Formatting options (genre, song length, elapsed time, year) (Ivan) + Pref to play enqueued items on activate (i.e. enter/double-click) + Play friendler with other clients for shuffle/repeat/crossfade + Reduced startup time/memory usage + Use curly brackets {} to have formatting appear only if all enclosed tags are available + Ability to run on OLPC's Sugar user environment (Owen) + Added Ukranian translation (Господарисько Тарас) + Bug: No more freezes due to threading! Finally! Seriously! + Bug: Cannot set album art for album/artist with "/" in name + Bug: Prevent interface jumping because of progress bar font + Bug: Notification window isn't positioned correctly for dual-head v0.9 - November 19, 2006 + Added stream support + Use local artwork (cover.jpg, folder.jpg) first, if it exists (requires music_directory to be specified in preferences) + Allow crossfading (mixing) between songs + Fetch higher-resolution cover art + Allow specifying search terms for remote album art + Improved song info viewer + Make remote images window non-blocking + Popup song notification on un-pause + Pick up tooltip album background color from gtk theme + Store cover art in ~/.covers for consistency with gmpc + Add German translation (Paul Johnson) + Bug: Prevent infrequent crash when fetching album art + Bug: Intermittent interface freezes due to threading + Bug: Unable to delete playlists with ampersand, etc. + Bug: Player can become the wrong height on expand + Bug: Ensure local art is correctly applied on song changes + Bug: Searching library doesn't work for non-english locale v0.8.1 - October 19, 2006 + Add Polish translation (Tomasz Dominikowski) + Bug: Correctly send mpd password when using manual connect + Bug: Prevent certain keys from causing events + Bug: Prevent potential crash if not able to obtain mpd status v0.8 - October 7, 2006 + Allow user formatting of current playlist, library, and title + Pref for song notification location + Allow song notification for users without gnome-python-extras + Pref to hide playback buttons + Pref to update MPD library on start + --info, --status displays current song info or MPD status + Pref to autoconnect on start, connect/disconnect buttons + Fetch album art in background (non-blocking) + Correctly retain previous library state when ending search + Add russian translation [Andrew Lukoshko] + Bug: Display path when filename is empty or http/ftp prefixes + Bug: Fix crash if changing connection w/o gnome-python-extras + Bug: Prevent --help, --toggle, etc. from happening twice if dbus is installed + Bug: Some shortcuts don't work with numslock enabled v0.7.1 - September 27, 2006 + Bug: Fix crash if dbus is not installed + Bug: Fix crash if song does not have some id3 info specified v0.7 - September 27, 2006 + Ability to search library by type (can be disabled in prefs) + Optional notification popup on song changes + Show larger image on left-click of cover art + Reduce (pygmy's) default polling time + Retain selection of browsed directories in library + Retain selection after drag-n-drop + Keep width of tooltip fixed + Show previous instance of app if user tries to open a second instance [Mike Massonnet patch] + Add --version, --help; print usage + --toggle argument to minimize to tray or show (requires D-Bus) + Add french translation [Floréal M] + Additional shortcuts (see docs) + Bug: repeat/shuffle isn't updated if mpd is restarted + Bug: Unable to delete multiple playlists at once + Bug: Crash when playing ogg streams [patch] v0.6 - September 18, 2006 + Add support for playlists (save, load, queue, delete) + Ability to use local image for album cover + Support for multimedia keys + Fetch cover art if an artist, but not album, is specified + Add Ctrl-U and Ctrl-Shift-U for updating library (see docs) + (Re-)display systray icon if tray is (re-)opened + Fix mpdclient3.py to return all playlist objects + Bug: Delete key doesn't remove songs from playlist v0.5.2 - September 15, 2006 + Correctly update interface after updating MPD library + Interface prefs: show album art, show volume, sticky, above + Behavior prefs: minimize to systray, stop playback on exit + Increase iter time if connection timesout (to make gui responsive) + Use gtk.STOCK_JUSTIFY_FILL instead of custom playlist icon + Try gnome-open/exo-open first for opening help, then fallback + Ability to set translations (see TRANSLATIONS file) + Use dbus to prevent multiple instances + More shortcuts (see documentation) + Minor bugfixes v0.5.1 - September 13, 2006 + Increment to mpdclient3 to prevent incompatibility issues + Bug: Running Sonata without systray causes crash v0.5 - September 12, 2006 + Added album art (and ability to choose from alternatives if the one automatically selected is incorrect, via right-click) + Integrate playlist and library into one app + Change song progress with mousewheel over progressbar + Change volume with mousewheel over volume button, systray icon + Change volume icon based on volume level + Added playback, etc, shortcuts + Added Replace menu and dir/file icons to library browser + Removed toolbar, cleaned up interface + Removed horizontal scrollbar + Don't update systray icon based on playback status + Moved config to freedesktop.org standard + Keep app width constant when (un)expanding + Keep currently playing song visible in list + Removed python-empy, glade + Bug: mpdclient2/app doesn't accept passwords (crash) + Bug: mdpclient2 - lsinfo skips the first file found after dirs + Bug: Cannot remove multiple rows from right-click + Bug: Crash if user has MPD connection but no read access + Bug: GTK+ treeview search does not work + Bug: Right-Click checkbox doesnt set value on start + Bug: Doesn't properly retain view when browsing playlist + Added documentation + Other bugfixes, tweaks # vim:ft=rst �������multani-sonata-bf88fdc/CONTRIBUTING.rst�������������������������������������������������������������0000664�0000000�0000000�00000003671�15003420405�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Contributing ============ If you are interested to hack on Sonata, please consider the following: #. Clone the repository or fork it on Github; #. **For each** feature, bug fix, refactor, anything, you want to submit, create a branch with a name which reflects what you want to do; #. Commit your changes related to *this* thing in this branch; #. Signal your changes with one of the following: * open a pull request on Github; * send a mail to jon@multani.info with the URL of your repository, the name of the branch you want to be merged, and a meaningful description of your work; * or send me your patch(es) to jon@multani.info using ``git send-email``. I hate, hate, *hate* having to review commits touching lot of unrelated things, this is the easiest way for your changes not to be merged. Try to stay focus on one clearly defined thing and it should be much easier to merge. Translations ------------ .. note:: See the `TRANSLATORS` file for more information! You can translate Sonata using the `dedicated Transifex project page <https://www.transifex.com/projects/p/sonata/>`_. Sonata's translation can be done via the `Transifex`_ plateform. You need to subscribe to `Transifex`_ first, then to add yourself as a member of the `Transifex Sonata`_ project under the language your are interested to translate into. Once a translation is done, *be sure to contact the maintainer of Sonata* to announce there's a new translation to include! Website ------- The website content is hosted in the `website directory in Git <https://github.com/multani/sonata/tree/master/website>`. You can provide an update by submitting a pull request or sending a patch, as explained above, on this repository. .. note: Sonata's website is now hosted on Savannah, which requires the website's content to be uploaded through CVS. This is not really optimal, but have a look at http://savannah.gnu.org/maintenance/HomepageUpload/ for reference. �����������������������������������������������������������������������multani-sonata-bf88fdc/COPYING����������������������������������������������������������������������0000664�0000000�0000000�00000104513�15003420405�0016264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 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. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> 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 <http://www.gnu.org/licenses/>. 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: <program> Copyright (C) <year> <name of author> 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 <http://www.gnu.org/licenses/>. 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 <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/PLUGINS.rst������������������������������������������������������������������0000664�0000000�0000000�00000005050�15003420405�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������================================ Plugins documentation for Sonata ================================ This document explains how to write plugins for Sonata, a Gtk client for the `Music Player Daemon`_. Plugin metadata =============== TODO Plugin entr-points ================== This is the list of entry-points that plugins can hook into Sonata ``cover_fetching(artist, album, on_save_callback, on_error_callback)`` ---------------------------------------------------------------------- * ``on_save_callback(fp)``: takes a file-like object as argument, and will save its content in a place known by Sonata. However successful the saving was, it returns ``True`` if the plugin should *continue* to download more covers, or ``False`` if the plugin should *stop* to download covers. * ``on_error_callback(reason=None)``: takes an optionnal `reason` as argument. This must be call if something wrong happens while fetching a cover. This returns ``True`` to indicate that the plugin shoud *stop* fetching new covers, or ``False`` if the plugin should *continue* fetching new covers. This entry-point is called when Sonata is requesting a plugin to get a cover for the specified ``album`` played by the ``artist``. On finding new covers, the plugin has to call the ``on_save_callback`` callback, passing the content of the cover as a file-like object. If finding a specific cover fails, the plugin should call ``on_error_callback``, passing a possible `reason` why it fails. Depending on the return value of the callbacks, the plugin should continue or stop fetching new covers. .. note:: The reasoning behind both callbacks are as follow: * the plugin doesn't have to be responsible of saving the content of the cover on the file system, Sonata will do it. * the plugin should be told when there are enough covers fetched. This can be a hard limit, ranging from 1 (get me the first cover) to (currently) 50 (get me all the covers that you can find and the user will choose the right one). This can also be a way to tell the plugin that the user has enough covers and there's no need to download more (the user already picked up the right cover). * the plugin should not stop in an "infinite", un-stoppable loop. Hence, even if fetching a cover fails, the plugin should notify Sonata it tried to get one, so it can either be stopped, or get a chance to find more. ``lyrics_fetching`` ------------------- TODO ``playing_song_observers`` -------------------------- TODO .. _Music Player Daemon: http://musicpd.org ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/README.rst�������������������������������������������������������������������0000664�0000000�0000000�00000011065�15003420405�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sonata is looking for new maintainers! ====================================== I (`@multani <https://github.com/multani/>`_) don't use Sonata much anymore and as a consequence, I've been very slow to answer even to the few bugs reported and pull requests from external contributors. If you are still interested in Sonata and would like to see it alive again, please contact me by email to see what we can do! Sonata, an elegant GTK 3 client for the `Music Player Daemon`_ ============================================================== Sonata is a client for the `Music Player Daemon`_ featuring: + Expanded and collapsed views, fullscreen album art mode + Automatic remote and local album art + Library browsing by folders, or by genre/artist/album + User-configurable columns + Automatic fetching of lyrics and covers + Playlist and stream support + Support for editing song tags + Drag-and-drop to copy files + Popup notification + Library and playlist searching, filter as you type + Audioscrobbler (Last.fm) 1.2 support + Multiple MPD profiles + Keyboard friendly + Support for multimedia keys + Commandline control + Available in 24 languages Sonata is written using the `Python programming language`_ and uses the GTK 3 toolkit. Sonata started as a fork of the Pygmy project and is licensed under the GPLv3 or later. Thanks to Andrew Conkling et al, for all their hard work on Pygmy! Using Sonata ============ Requirements ------------ In order to run Sonata, you will need the following dependencies: * Python >= 3.2 * `PyGObject`_ (aka Python GObject Introspection) (3.7.4 or more recommended, earlier versions may also work) * GTK >= 3.4 * `python-mpd2` >= 2.0 * MPD >= 0.15 (possibly on another computer) * tagpy >= 2013.1 for editing metadata (Optional) * dbus-python for multimedia keys (Optional) .. warning: Sonata depends on `PyGObject`_ which is still quite new and gets regular fixes. Although versions 3.4.x shipped in most distributions at the time of writing are OK most of the time, unexpected bugs may occur which are fixed by more recent versions. Sonata can currently be downloaded from the Git repository using:: $ git clone git://github.com/multani/sonata.git $ cd sonata To run Sonata, you can either install it in a dedicated directory (as root):: # python setup.py install Or you can run it straight from the directory (without prior installation):: $ ./run-sonata Sonata in Linux distributions ----------------------------- You can find on the website `official releases of Sonata packaged in various distributions <http://www.nongnu.org/download.html>`_. Development version ''''''''''''''''''' This development version of Sonata is also available in several distributions: .. note:: For distribution-specific comments, please contact the packagers at the specified URLs! * Archlinux: available in `AUR as sonata-git <https://aur.archlinux.org/packages/sonata-git/>`_ * Gentoo: available in the `stuff overlay`_:: sudo layman -a stuff sudo emerge -av =sonata-9999 Website, documentation, help, etc. ================================== You can find the official documentation on `Sonata's website <http://www.nongnu.org/sonata/documentation.html>`. You can ask for feature requests or report bugs on Github at `<https://github.com/multani/sonata/issues>`. There's a (somewhat alive) mailing list available at `<https://lists.nongnu.org/mailman/listinfo/sonata-users>`. See also ======== You can also find Sonata in other places on the Internet: * http://sonata.berlios.de/ : this was the original Sonata website but Berlios shut down this hosting facility somewhere in March 2014 along with the mailing list. * http://codingteam.net/project/sonata/ : this is another fork with a different team and different perspectives. Our code bases diverge quite a bit now. Copyright ========= * Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> * Copyright 2009-2020 Jonathan Ballet <jon@multani.info> Sonata is currently developed by Jonathan Ballet <jon@multani.info> and other contributors. Many thanks to the past developers: * Scott Horowitz <stonecrest@gmail.com> * Tuukka Hastrup <Tuukka.Hastrup@iki.fi> * Stephen Boyd <bebarino@gmail.com> .. _Music Player Daemon: http://musicpd.org .. _PyGObject: https://live.gnome.org/PyGObject .. _python-mpd2: http://pypi.python.org/pypi/python-mpd2/ .. _python programming language: http://www.python.org/ .. _transifex: https://www.transifex.com .. _transifex sonata: https://www.transifex.com/projects/p/sonata/ .. _stuff overlay: https://github.com/megabaks/stuff/tree/master/media-sound/sonata ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/TODO�������������������������������������������������������������������������0000664�0000000�0000000�00000015301�15003420405�0015715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Cleanup: -------- * remove useless self. (start in Stream, Playlist) so that we really know the locality of things * extract constants (path for config and directories) so they can be reused (no more magic values) * try: play more with Gtk signals: don't overtest self.conn but disconnect signals when not connected to MPD, and reconnect signals when connected to MPD again? * improve perf * must start faster (as fast as py2/gtk2 at least) * improve *PyGObject* perfs first? * rework artwork cache (broken since 12df68). Is it really useful? * lyrics: * check why at startup unkown lyrics are fetched 2 or 3 times, and fix it Plugins: -------- * instead of:: lyrics_fetchers = pluginsystem.get('lyrics_fetching') if lyrics_fetchers: for plugin, get_lyrics in lyrics_fetchers: have something like:: pluginsystem.execute('lyrics_fetching', callback_one_plugin, *args, **kwargs) * work on plugin repositories (see https://github.com/multani/sonata/pull/17) * load/reload new plugins without restart * find an API to limit global states in plugin (no need to have globals as such) * make plugins easier to write: * limit the work to be done in the plugin (if it needs to be done in each plugin, then there's a problem): * see stuff like https://github.com/multani/sonata/commit/e5a966de350daa19a5adbb9ec78c29334bab74fa * provide more API to access Sonata's content/features: * save/restore config values * fix cover plugin: it always download the first cover, even if another one has been selected * fix cover plugin: doesn't download any cover when several cover plugins are enabled UI: --- * remote artwork dialog: * on no result, display the message in the middle, disable "can be selected" state, disable 'OK' button * library: * browse an album with a cover -> the cover appears in the breadcrumb. Close Sonata, reopen, go to Libraryy again -> the album is already browsed, but the cover doesn't appear in the breadcrumd (need to go to the Album view again, load all the covers, then it works) * lyrics: * when no lyrics, improve the rendering (writing "No lyric" or "Fetching lyrics failed" instead of the lyrics is not very nice/pretty...) * general: * remove the hard-coded shortcuts in the About a window and try to regenerate them from Gtk.AccelMap.get(): they are obsolete, they are a pain in the ass to gather by hand, and they are probably all set up in this map anyway. * current: * consume mode slow when changing song (rebuild of the model after each songs?) Gtk 3: ------ * in Info tab, more/less should hide boxes containing both labels, instead of hiding each labels separately * remove other deprecated calls: * GtkBox -> GtkGrid ? * size_request() -> get_preferrred_width/height CLI: ---- * delete class Args (useless) * use argparse instead * remove local imports + globals to modules (W. T. F. ?!) * simplify the best we can (do we need all those _execute_() methods?) Threads: -------- * log with thread-id enable, and see what's going on * do we have to access MPD from different threads (Mic92 from python-mpd says the module is not thread-safe, but Sonata steps clearly on this). * codingteam has a number of thread-related issues reported. Fix those, look for similar pattern to see if they can be fixed as well * **ultimately: remove as much threading code as possible** MPD: ---- * implements missing MPD features: * stickers (need to found a common database for stickers' values, cf. http://sourceforge.net/mailarchive/forum.php?thread_name=50E7F811.50607%40beatradar.no&forum_name=musicpd-dev-team) * idle-mode * what else? * if playlists change while Sonata is running, the playlists' list desn't get refreshed * bug when creating a playlist with a "/" (forbidden by MPD, but Sonata should konw how to react) * bug when renaming playlist (see mpd log from Sonata, can't rename same playlist twice) * if was connected and MPD is shutdown, it sometimes log "Already connected" -> what's happening? Old TODO file ============= :: v1.6.3 sonata freezes with gail/accessibility enabled during new library searching translations - bold, commas for arabic (ahmad farghal email) #3992: enabling/disabling outputs #4370: number in playlist contextual statusbar depending on tab opened? (michael email) save to playlist.. default to selected files? pref? tag editing - support for composer, disc song queue (mpd-git will be bringing it back) search results - show albums, artists, genres that match right-click on tab bar (michael email) 0.15 has input support for last.fm radio v1.7 albumartist tag for, e.g., VA albums; composer for classical plugin support - single instance, mmkeys (could remove dbus; faster on startup, less memory) - artwork - lyrics - system tray - audioscrobbler - popup notification - tag editing - #2419 dynamic playlist (patch) - #2454 Add as Next Track (patch) - #4007 stop after track ('single' command in 0.15) - #Zeroconf/avahi (patch) Future: support for new idle command (waiting on python-mpd) work with mpd's new "allow authenticated local users to add any local file to the playlist" - waiting on python-mpd to implement unix socket paths - dnd from a file manager (implemented and untested because of above) - new library browsing mode to open any file? remember: no tags and implications for remote mpd users. crop songs in current playlist? mpd statistics better playlist support (mpd 0.13+ only): ability to view songs, reorder songs, remove songs, etc lazy loading of the treeview http://log.emmanuelebassi.net/documentation/lazy-loading/ http://blogs.gnome.org/jamesh/2006/03/31/re-lazy-loading/ clean-up extract duplicate code into functions, classes etc. document interfaces and implementation modularity: - limit module size to 1000 lines - limit dependencies between modules style: - rewrite unpythonic or complicated parts - fix reasonable pychecker/pylint warnings tests: - write automated tests - refactor code into parts that can be tested exceptions: - add class restrictions to most "except:" clauses - add debug logging to most except clauses threading: - design, document, and implement a bug-free use of threads ``` # vim:ft=rst tw=80 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/TRANSLATORS������������������������������������������������������������������0000664�0000000�0000000�00000006133�15003420405�0016767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sonata provides a quick and easy way of creating a translation for your language. If you find this software useful and are capable of adding a language that has not yet been translated, it would be greatly appreciated. Sonata uses the `Transifex plateform <https://www.transifex.com/projects/p/sonata/>`_ as a translation helping plateform, although you can probably also use any `gettext` compatible translation editor. In order to add a new translation or update a new translation, you can subscribe to the `Transifex <https://www.transifex.com>`_ project and add yourself to the team of translators according to your preferred language on the `Sonata project page <https://www.transifex.com/projects/p/sonata/>`_. Once you have a new translation ready, feel free to contact the Sonat's mailing list at sonata@lists.berlis.de (registration required at https://lists.nongnu.org/mailman/listinfo/sonata beforehand) or to contact the author by email so your translation will be included in the next release! Instrutions (mostly for developers) =================================== Using Transifex --------------- You need the `Transifex client <http://help.transifex.com/features/client/>`_ and to configure your Transifex configuration file (probably ``~/.transifexrc``) according to `the official documentation <http://help.transifex.com/features/client/#transifexrc>`_:: [https://www.transifex.com] hostname = https://www.transifex.com token = username = YOUR TRANSIFEX USERNAME password = YOUR TRANSIFEX PASSWORD You can use then the ``tx`` command line tool to get or send the translation files from/to Transifex: To refresh the translation strings on Transifex (so that new translation strings are available to translators):: $ tx push -s To get/update translations from/to Transifex:: $ tx pull -l fr # Get the latest French translation from transifex.com ... $ tx push -t fr # Send the latest French translation to transifex.com You can read the `officiel Transifex documentation <http://help.transifex.com/features/client/>`_ for more information about using the Transifex client. Managing the translation without Transifex ------------------------------------------ You can use the script in ``script/update-po`` which wraps ``intltool``, or directly ``intltool`` if you want, to manage the translation directly from the Sonata repository. .. warning:: Note that Transifex is the preferred plateform to manage translations, and that it should be keep up-to-date with respect to the content of the source tree. Adding a new translation '''''''''''''''''''''''' 1. Download the latest sources with git $ git clone git://github.com/multani/sonata 2. Generate a template $ cd po $ intltool-update -p $ mv untiled.pot <LANGCODE>.po 3. Translate the strings Updating an existing translation '''''''''''''''''''''''''''''''' 1. Download the latest sources with git $ git clone git://github.com/multani/sonata 2. Update the po file for the language you're updating $ intltool-update <LANGCODE> 3. Translate any strings that are new or fuzzy .. vim:ft=rst �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0015643�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/POTFILES.in���������������������������������������������������������������0000664�0000000�0000000�00000000733�15003420405�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata/about.py sonata/cli.py sonata/dbus_plugin.py sonata/formatting.py sonata/info.py sonata/library.py sonata/main.py sonata/playlists.py sonata/plugins/localmpd.py sonata/plugins/ui/localmpd.glade sonata/preferences.py sonata/streams.py sonata/tagedit.py sonata/ui/about.glade sonata/ui/current.glade sonata/ui/info.glade sonata/ui/library.glade sonata/ui/playlists.glade sonata/ui/preferences.glade sonata/ui/sonata.glade sonata/ui/streams.glade sonata/ui/tagedit.glade �������������������������������������multani-sonata-bf88fdc/po/POTFILES.skip�������������������������������������������������������������0000664�0000000�0000000�00000000034�15003420405�0017755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������build/ sonata/genversion.py ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/Sonata.pot����������������������������������������������������������������0000664�0000000�0000000�00000070615�15003420405�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "" #: ../sonata/about.py:64 msgid "Expand player" msgstr "" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "" #: ../sonata/about.py:69 msgid "Quit" msgstr "" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "" #: ../sonata/about.py:74 msgid "Previous track" msgstr "" #: ../sonata/about.py:75 msgid "Next track" msgstr "" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "" #: ../sonata/about.py:77 msgid "Stop" msgstr "" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "" #: ../sonata/about.py:86 msgid "Clear list" msgstr "" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "" msgstr[1] "" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "" #: ../sonata/cli.py:53 msgid "Commands:" msgstr "" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "" #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "" #: ../sonata/cli.py:176 msgid "by" msgstr "" #: ../sonata/cli.py:176 msgid "from" msgstr "" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "" #: ../sonata/cli.py:241 msgid "Date" msgstr "" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "" #: ../sonata/cli.py:268 msgid "Playing" msgstr "" #: ../sonata/cli.py:269 msgid "Paused" msgstr "" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "" #: ../sonata/cli.py:271 msgid "State" msgstr "" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "" #: ../sonata/cli.py:275 msgid "Random:" msgstr "" #: ../sonata/cli.py:277 msgid "Volume" msgstr "" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "" #: ../sonata/formatting.py:124 msgid "Year" msgstr "" #: ../sonata/formatting.py:126 msgid "File path" msgstr "" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "" #: ../sonata/formatting.py:128 msgid "File name" msgstr "" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "" #: ../sonata/formatting.py:131 msgid "Len" msgstr "" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "" #: ../sonata/info.py:200 msgid "hide" msgstr "" #: ../sonata/info.py:203 msgid "more" msgstr "" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "" #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "" #: ../sonata/library.py:79 msgid "Untagged" msgstr "" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "" #: ../sonata/library.py:159 msgid "Albums" msgstr "" #: ../sonata/library.py:161 msgid "Artists" msgstr "" #: ../sonata/library.py:163 msgid "Genres" msgstr "" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "" #: ../sonata/main.py:94 msgid "Library" msgstr "" #: ../sonata/main.py:95 msgid "Playlists" msgstr "" #: ../sonata/main.py:96 msgid "Streams" msgstr "" #: ../sonata/main.py:97 msgid "Info" msgstr "" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "" #: ../sonata/main.py:227 msgid "_Connection" msgstr "" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "" #: ../sonata/main.py:239 msgid "_Play" msgstr "" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "" #: ../sonata/main.py:243 msgid "_Stop" msgstr "" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "" #: ../sonata/main.py:247 msgid "_Next" msgstr "" #: ../sonata/main.py:249 msgid "_Quit" msgstr "" #: ../sonata/main.py:251 msgid "_Remove" msgstr "" #: ../sonata/main.py:253 msgid "_Clear" msgstr "" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "" #: ../sonata/main.py:261 msgid "_About..." msgstr "" #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "" #: ../sonata/main.py:264 msgid "_Add" msgstr "" #: ../sonata/main.py:266 msgid "_Replace" msgstr "" #: ../sonata/main.py:268 msgid "Add" msgstr "" #: ../sonata/main.py:270 msgid "Replace" msgstr "" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "" #: ../sonata/main.py:273 msgid "Shuffle" msgstr "" #: ../sonata/main.py:275 msgid "Shuffle Albums" msgstr "" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "" #: ../sonata/main.py:317 msgid "_Repeat playlist" msgstr "" #: ../sonata/main.py:319 msgid "Repeat s_ong" msgstr "" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "" #: ../sonata/main.py:475 msgid "By Album" msgstr "" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "" #: ../sonata/main.py:479 msgid "By File Name" msgstr "" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "" #: ../sonata/main.py:524 msgid "_New..." msgstr "" #: ../sonata/main.py:526 msgid "_Edit..." msgstr "" #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "" #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "" #: ../sonata/main.py:2192 msgid "Images" msgstr "" #: ../sonata/main.py:2197 msgid "All files" msgstr "" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "" #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "" #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "" #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "" �������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/ar.po���������������������������������������������������������������������0000664�0000000�0000000�00000124131�15003420405�0016607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 07:09+0200\n" "Last-Translator: Ahmad Farghal <ahmad.farghal@gmail.com>\n" "Language-Team: Arabic <ar@arabic.org>\n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : n>=3 && n<=10 ? 2 : " "3\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "حول سوناتا" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "تفضيلات" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "وضع غلاف الألبوم بكامل الشاشة" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "انتقل للسان من 1 لـ5" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "اتصل بـMPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "افصل من MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "رتّب قائمة التشغيل الحالية عشوائيّا" #: ../sonata/about.py:64 msgid "Expand player" msgstr "وسّع المشغّل" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "ارجع للسان السابق" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "انتقل للسان التالي" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "إطوِ المشّغل" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "ابحث في المكتبة" #: ../sonata/about.py:69 msgid "Quit" msgstr "أنهِ" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "حدّث المكتبة بأكملها" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "أظهر قائمة منبثقة" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "قلّص إلى مساحة التبليغ (إذا كان ممكنا)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "المقطوعة السابقة" #: ../sonata/about.py:75 msgid "Next track" msgstr "المقطوعة التالية" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "شغّل/أوقف مؤقتا" #: ../sonata/about.py:77 msgid "Stop" msgstr "أوقف" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "أخفض الصوت" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "زد الصوت" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "شغّل الأغنية المنتقاة" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "أزِل الأغاني المنتقاة" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "ركّز على الأغنية التي يتم تشغيلها" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "حرّر وسوم الاغنية المنتقاة" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "احفظ إلى قائمة تشغيل جديدة" #: ../sonata/about.py:86 msgid "Clear list" msgstr "امسح القائمة" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "رتّب القائمة عشوائيّا" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "أضِف الأغاني المنتقاة أو أدخل دليلا" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "اذهب إلى الدليل الأب" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "أضِف العناصر المنتقاة" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "استبدِل بالعناصر المنتقاة" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "أضِف العناصر المنتقاة وشغّلها" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "استبدِل بالعناصر المنتقاة وشغّلها" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "حدّث العناصر أو المسارات المنتقاة" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "أضِف قوائم التشغيل المنتقاة" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "أزِل قوائم التشغيل المنتقاة" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "استبدِل بقوائم التشغيل المنتقاة" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "أضِف قوائم التشغيل المنتقاة وشغّلها" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "أضِف الدفوق المنتقاة" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "أزِل الدفوق المنتقاة" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "استبدِل بالدفوق المنتقاة" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "أضِف الدفوق المنتقاة وشغّلها" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "حرّر وسوم الأغنية المُشَغّلة" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "الاختصارات العامة" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "اختصارات التشغيل" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "اختصارات التشغيل الآن" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "اختصارات المكتبة" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "اختصارات قوائم التشغيل" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "اختصارات الدفوق" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "اختصارات المعلومات" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "يوم واحد من النعيم" msgstr[1] "يومان من النعيم" msgstr[2] "أيام من النعيم" msgstr[3] "يوما من النعيم" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "ساعة واحدة من النعيم" msgstr[1] "ساعتان من النعيم" msgstr[2] "ساعات من النعيم" msgstr[3] "ساعة من النعيم" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "الاستخدام: sonata [الخيار]... [الأمر]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "الأوامر" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "يشغّل أغنية في قائمة التشغيل" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "يوقف تشغيل الاغنية الحالية مؤقتا" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "يوقف تشغيل الاغنية الحالية" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "يشغّل الأغنية التالية في قائمة التشغيل" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "يشغّل الأغنية السابقة في قائمة التشغيل" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "يشغّل أو يوقف التشغيل مؤقتا؛ يبدأ التشغيل إذا كان متوقفا" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "مكّن أو عطّل وضع التكرار" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "مكّن أو عطّل الوضع العشوائي" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "يظهر معلومات الأغنية الحالية" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "يظهر حالة MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "يظهر نافذة منبثقة بالأغنية (يتطلب D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "في مساحة التبليغ (يتطلب D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "في مساحة التبليغ (يتطلب D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "لا تفتح التطبيق إذا فشلت أوامر D-Bus" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "يبدأ التطبيق مخفيّا (يتطلب وجود مساحة تبليغ للنظام)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "يبدأ التطبيق ظاهرا (يتطلب وجود مساحة تبليغ للنظام)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "يبدأ بضبط [رقم]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "خياري الإبدال والانبثاق يتطلبان D-Bus. تم الإجهاض." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "بدء سوناتا بالضبط %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d ليس رقم ضبط متوفر." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "يجب أن يكون رقم الضبط بين 1 و %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "الضبط المبدئي" #: ../sonata/cli.py:176 msgid "by" msgstr "أداء" #: ../sonata/cli.py:176 msgid "from" msgstr "من" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "غير قادر على الاتصال بـMPD.\n" "رجاءً تأكد من تفضيلات سوناتا أو متغيري النظام MPD_HOST و MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "الاسم" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "الفنان" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "الألبوم" #: ../sonata/cli.py:241 msgid "Date" msgstr "السنة" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "المقطوعة" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "النوع" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "الملف" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "الوقت" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "معدّل البتّات" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD متوقف" #: ../sonata/cli.py:268 msgid "Playing" msgstr "يشغل" #: ../sonata/cli.py:269 msgid "Paused" msgstr "متوقف مؤقتا" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "متوقف" #: ../sonata/cli.py:271 msgid "State" msgstr "الحالة" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "التكرار" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "مُعَطّل" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "مُمَكّن" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "عشوائيًا" #: ../sonata/cli.py:277 msgid "Volume" msgstr "شدّة الصوت" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "الإبهات المتداخل" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "ثانية واحدة" msgstr[1] "ثانيتان" msgstr[2] "ثوان" msgstr[3] "ثانية" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "فشل سوناتا في الاتصال بناقل جلسة D-Bus: غير قادر على تحديد عنوان ناقل " "الرسائل (للمساعدة، جرّب 'man dbus-launch' و 'man dbus-daemon')" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "فشل تنفيذ الأوامر البعيدة." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "سيتم بدء سوناتا..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "هل أنت متأكد أن سوناتا يعمل؟" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "مجهول" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "اسم الفنان" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "اسم الألبوم" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "اسم المقطوعة" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "رقم المقطوعة" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "الرقم" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "رقم القرص" #: ../sonata/formatting.py:124 msgid "Year" msgstr "السنة" #: ../sonata/formatting.py:126 msgid "File path" msgstr "مسار الملف" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "المسار" #: ../sonata/formatting.py:128 msgid "File name" msgstr "اسم الملف" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "اسم الدفق" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "دفق" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "مدة الأغنية" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Len" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "الوقت المنقضي (عنوان النافذة فقط)" #: ../sonata/info.py:200 msgid "hide" msgstr "أخفِ" #: ../sonata/info.py:203 msgid "more" msgstr "المزيد" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "لم يتم تعيين اسم للألبوم" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "معلومات الألبوم غير موجودة" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "الكلمات غير موجودة" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "يجلب الكلمات..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "الكلمات غير موجودة" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "فنانون متعددون" #: ../sonata/library.py:79 msgid "Untagged" msgstr "غير موسوم" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "اسم الملف" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "الكل" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "نظام الملفات" #: ../sonata/library.py:159 msgid "Albums" msgstr "الألبومات" #: ../sonata/library.py:161 msgid "Artists" msgstr "الفنانون" #: ../sonata/library.py:163 msgid "Genres" msgstr "الأنواع" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "طول مدة الأغنية" msgstr[1] "طول مدة الأغنية" msgstr[2] "طول مدة الأغنية" msgstr[3] "طول مدة الأغنية" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "ثانية واحدة" msgstr[1] "ثانيتان" msgstr[2] "ثوان" msgstr[3] "ثانية" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "دقيقة واحدة" msgstr[1] "دقيقتان" msgstr[2] "دقائق" msgstr[3] "دقيقة" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "أغنية" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "التشغيل الآن" #: ../sonata/main.py:94 msgid "Library" msgstr "مكتبة" #: ../sonata/main.py:95 msgid "Playlists" msgstr "قوائم تشغيل" #: ../sonata/main.py:96 msgid "Streams" msgstr "دفوق" #: ../sonata/main.py:97 msgid "Info" msgstr "معلومات" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "طول مدة الأغنية" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_رتّب القائمة" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "العناصر المنت_قاة" #: ../sonata/main.py:227 msgid "_Connection" msgstr "الات_صال" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "ش_غّل بعد" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_حدّث" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "استخدم صورة _بعيدة..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "استخدم صورة م_حلية..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "وضع _كامل الشاشة" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "استَعِدْ الصورة الأصلية" #: ../sonata/main.py:239 msgid "_Play" msgstr "_شغّل" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "أو_قِف مؤقتًا" #: ../sonata/main.py:243 msgid "_Stop" msgstr "أو_قِف" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "ال_سابقة" #: ../sonata/main.py:247 msgid "_Next" msgstr "ال_تالية" #: ../sonata/main.py:249 msgid "_Quit" msgstr "أ_نهِ" #: ../sonata/main.py:251 msgid "_Remove" msgstr "أ_زِل" #: ../sonata/main.py:253 msgid "_Clear" msgstr "ام_سح" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "المكتبة بأ_كملها" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "العناصر المنت_قاة" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "تف_ضيلات..." #: ../sonata/main.py:261 msgid "_About..." msgstr "ح_ول..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_حرّر الوسوم..." #: ../sonata/main.py:264 msgid "_Add" msgstr "أ_ضف" #: ../sonata/main.py:266 msgid "_Replace" msgstr "استب_دل" #: ../sonata/main.py:268 msgid "Add" msgstr "أضف" #: ../sonata/main.py:270 msgid "Replace" msgstr "استبدل" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "ا_حذف..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "اخلط" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "اخلط" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "أ_ظهر سوناتا" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "استبدل قائمة التشغيل" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "التكرار" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "عشوا_ئي" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "حسب الفنان" #: ../sonata/main.py:475 msgid "By Album" msgstr "حسب الألبوم" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "حسب اسم الأغنية" #: ../sonata/main.py:479 msgid "By File Name" msgstr "حسب اسم الملف" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "حسب الدليل واسم الملف" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "اعكس ترتيب القائمة" #: ../sonata/main.py:524 msgid "_New..." msgstr "_جديد..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_حرّر..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "قائمة تشغيل _جديدة..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_غيّر الاسم..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "أنقر للتوسعة" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "أنقر للطي" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "غير متّصل" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "غير مصرّح بالقراءة" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "مضيف MPD / كلمة السّر" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "افصل" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(تحديث mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "الصور" #: ../sonata/main.py:2197 msgid "All files" msgstr "كل الملفّات" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "لم يتم إيجاد اسم الفنان أو الأغنية." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "لم يتم إيجاد صورة غلاف." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "حذف قائمة التشغيل المنتقاة؟" msgstr[1] "حذف قائمتي التشغيل المنتقاتان؟" msgstr[2] "حذف قوائم التشغيل المنتقاة؟" msgstr[3] "حذف قوائم التشغيل المنتقاة؟" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "احذف قائمة التشغيل" msgstr[1] "احذف قائمتي التشغيل" msgstr[2] "احذف قوائم التشغيل" msgstr[3] "احذف قوائم التشغيل" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "حذف الدفق المنتقى؟" msgstr[1] "حذف الدفقين المنتقيين؟" msgstr[2] "حذف الدفوق المنتقاة؟" msgstr[3] "حذف الدفوق المنتقاة؟" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "احذف الدفق" msgstr[1] "احذف الدفقين" msgstr[2] "احذف الدفوق" msgstr[3] "احذف الدفوق" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "غير قادر على إطلاق متصفح مناسب." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "أطلق المتصفح" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "احفظ قائمة التشغيل" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "قائمة تشغيل موجودة" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "استبدل قائمة التشغيل" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "ألحق الأغاني" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "غيّر اسم قائمة التشغيل" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "الملف" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "محليا فقط" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "باستخدام MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "مسار_الأغنية" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "مخصص" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "لن يتم عرض المعلومات إلا عندما تكون كل الوسوم بين القوسين مستوفاة" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "ينشئ عواميد في قائمة التشغيل الحالية" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "يجب أن تحدد دليل موسيقى صالح حتى تتمكن من حفظ الكلمات للدليل الموجود فيه ملف " "الموسيقى." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "التحقق من دليل الموسيقى" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "يجب أن تحدد دليل موسيقى صالح حتى تتمكن من حفظ غلاف الألبوم للدليل الموجود " "فيه ملف الموسيقى." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "ضبط جديد" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "حرّر الدفق" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "دفق جديد" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "يوجد دفق بهذا الاسم مسبقا. هل ترغب في استبداله؟" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib و/أو tagpy غير موجودان، سيتم تعطيل دعم تحرير الوسوم." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "حرّر الوسوم" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "نسخة Tagpy الموجودة أقدم من 0.91. رجاءً حدّث نسختك حتى تستطيع تحرير الوسوم." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "غير موجود. رجاءً حدد دليل موسيقى صالح في التفضيلات." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " غير موجود. رجاءً حدّد دليل موسيقى صالح في التفضيلات." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "لا توجد ملفات موسيقى يمكن تحرير وسومها." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "حرّر الوسوم" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "غير قادر على حفظ الوسم لملف الموسيقى." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "أخف مسار الملف" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "أظهر مسار الملف" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "عميل موسيقى أنيق لـMPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "الا_ختصارات" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "الاختصارات" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "رشّح" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "الاسم" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "الفنان" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "الألبوم" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "السنة" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "المقطوعة" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "النوع" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "الملف" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "معدّل البتّات" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "افتح صفحة الفنان في ويكيبيديا" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "افتح صفحة الألبوم في ويكيبيديا" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "أظهر أو أخفِ الوسوم الإضافية" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "حرّر وسوم الأغنية" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "حرّر الوسوم" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "معلومات عن الأغنية" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "ابحث في Lyricwiki.org عن الكلمات" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "ابحث" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "الكلمات" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "معلومات عن الألبوم" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "ابحث" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "مفردات البحث" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "أنهِ البحث" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "اسم قائمة التشغيل" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "غلاف ألبوم مخصّص" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "اسم ملف الغلاف" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "ح_ول" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "ا_ضبط..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "الا_سم" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "الم_ضيف" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "المنف_ذ" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "أترك هذا الحقل فارغًا إذا لم تكن هناك كلمة سر" #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "كلمة ال_سّر" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "انتق دليل موسيقى" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_دليل الموسيقى" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "اتّ_صل آليّا عند البدء" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "الاتصال بـMPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "أ_زرار التشغيل والصوت" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "شريط التق_دم" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "شريط ال_حالة" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "أيقونة مساحة تبلي_غ النظام" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_كلمات الأغنية" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "احفظ الكلمات في:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_غلاف الألبوم" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "شكل الغلاف:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "قياسي" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "مزخرف" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "أماكن البحث:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "محليا فقط" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "محليا وعبر إنترنت" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "احفظ الغلاف في:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "العرض" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "أ_ظهر النافذة في كل مساحات العمل" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "أ_بقِ النافذة فوق النوافذ الأخرى" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "أ_خف عنوان النافذة" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_قلّص لمساحة تبليغ النظام عند الإغلاق" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "إذا تم تمكين هذا الخيار، فسيقوم سوناتا بتقليص نفسه إلى مساحة تبليغ النظام " "عند إغلاقه. لاحظ أنه من المستحيل حاليا التعرف على ما إن كان نظامك به مساحة " "تبليغ أم لا، قلا تمكّن هذا الخيار إلا إذا كان نظامك فيه مساحة تبليغ." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "إذا تم تمكين هذا الخيار، فسيقوم سوناتا بتقليص نفسه إلى مساحة تبليغ النظام " "عند إغلاقه. لاحظ أنه من المستحيل حاليا التعرف على ما إن كان نظامك به مساحة " "تبليغ أم لا، قلا تمكّن هذا الخيار إلا إذا كان نظامك فيه مساحة تبليغ." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "سلوك النوافذ" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_حدّث مكتبة MPD عند البدء" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "إذا تم تمكين هذا الخيار، فسيقوم سوناتا بتحديث مكتبة MPD عند بدء تشغيله." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "أو_قف التشغيل عند الخروج" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "يستطيع MPD تشغيل الموسيقى حتى لو لم يكن هناك عميل متصل به. إذا تم تمكين هذا " "الخيار، فسيسلك سوناتا مسلك مشغلات الموسيقى التقليدية بأن يقوم بإيقاف تشغيل " "الأغاني عن الخروج." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "أكتب ملف _حالة:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "إذا تم تمكين هذا الخيار، فسينشئ سوناتا ملفّا مشابه لـxmms-infopipe يحتوي على " "معلومات عن الأغنية الحالية. تدعم الثير من التطبيقات ملف xmms-infopipe (مثل " "عملاء IRC وبرامج المراسلة الفورية...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "خيارات متنوعة" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "السلوك" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "قائمة التش_غيل الحالية:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "ال_مكتبة:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "عنوان ال_نافذة:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "_سطر الأغنية الحالية الأول:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "س_طر الأغنية الحالية الثاني:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "الخيارات المتوفرة" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "تهيئة اسم الاغنية" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "التهيئة" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "أبل_غ عن الموسيقى (لاست . إف إم)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "اسم المست_خدم:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "كلمة ال_سّر:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "أظهر _تنبيها عند تغير الأغنية" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "مساحة تبليغ النظام" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "أعلى اليسار" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "أعلي اليمين" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "أدنى اليسار" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "أدنى اليمين" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "مركز الشاشة" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "الإبهات المتدا_خل" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "مدة الإب_هات" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "ث" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "خيارات إضافية" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "مكّن الإبهات المتداخل" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "الوصف" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "اختر صورة الغلاف" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "حرّر مفردات البحث" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "صورة الغلاف" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "افتح صورة" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "بحث عن الكلمات" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "اسم الفنان" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "اسم الأغنية" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "قائمة تشغيل" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "اسم الدفق" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "عنوان الدفق" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "احفظ ال_كل" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "السنة" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "التعليق" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/be.po���������������������������������������������������������������������0000664�0000000�0000000�00000112542�15003420405�0016576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Biełaruski pierakład Sonata. # Copyright (C) 2007 Ihar Hrachyshka # This file is distributed under the same license as the sonata package. # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2007, 2008. # msgid "" msgstr "" "Project-Id-Version: sonata 1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2008-03-22 11:38+0200\n" "Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n" "Language-Team: Belarusian (Latin script) <translation-team-be-latin@lists." "sourceforge.net>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Ab Sonacie" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Nałady" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Pieraklučysia na 1-5. kartku" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Spałučy z MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Adłučy ad MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Pieratasuj dziejny śpis" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Razharni player" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Na papiaredniuju kartku" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Na nastupnuju kartku" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Zharni player" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Šukaj u biblijatecy" #: ../sonata/about.py:69 msgid "Quit" msgstr "Vyjdzi" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Aktualizuj usiu biblijateku" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Pakažy vypłyŭnaje menu" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimalizuj u systemny tray (kali ŭklučana)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Papiaredniaja pieśnia" #: ../sonata/about.py:75 msgid "Next track" msgstr "Nastupnaja pieśnia" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Hraj/Paŭza" #: ../sonata/about.py:77 msgid "Stop" msgstr "Spyni" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Pamienš hučnaść" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Pavialič hučnaść" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Hraj zaznačanuju pieśniu" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Vydal zaznačanyja pieśni" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Adcentruj pieśniu, jakaja ciapier hrajecca" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Redahuj tagi dla zaznačanaj pieśni" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Zapišy ŭ novy śpis" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Ačyść śpis" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Pieratasuj śpis" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Dadaj zaznačanyja pieśni ci ŭvajdzi ŭ kataloh" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Pierajdzi ŭ baćkoŭski kataloh" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Dadaj zaznačanyja pieśni" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Zamiani zaznačanymi pieśniami" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Dadaj zaznačanyja pieśni j pačni hrać" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Zamiani zaznačanymi pieśniami j pačni hrać" #: ../sonata/about.py:96 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Dadaj zaznačanyja pieśni" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Dadaj zaznačanyja śpisy" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Vydal zaznačanyja śpisy" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Zamiani zaznačanymi śpisami" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Dadaj zaznačanyja śpisy j pačni hrać" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Dadaj zaznačanyja płyni" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Vydal zaznačanyja płyni" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Zamiani zaznačanymi albomami" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Dadaj zaznačanyja płyni j pačni hrać" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Redahuj tagi dla pieśni, jakaja ciapier hraje" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Asnoŭnyja skaroty" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Skaroty hrańnia" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Dziejnyja skaroty" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Skaroty biblijateki" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Skaroty śpisu" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Skaroty płyni" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Daviednik skarotaŭ" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "dzień ščaścia" msgstr[1] "dni ščaścia" msgstr[2] "dzion ščaścia" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "hadzina ščaścia" msgstr[1] "hadziny ščaścia" msgstr[2] "hadzin ščaścia" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Užyćcio: sonata [OPCYJA]" #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Kamentar" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Hraj pieśniu sa śpisu" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Prypyni pieśniu, jakaja ciapier hrajecca" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Spyni pieśniu, jakaja ciapier hrajecca" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Hraj nastupnuju pieśniu sa śpisu" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Hraj papiaredniuju pieśniu sa śpisu" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Hraj, kali prypynieny; prypyni, kali hraješ" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Źmiani režym paŭtoru" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Źmiani režym vypadkovaści" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Pakažy źviestki ab pieśni, jakaja ciapier hrajecca" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Pakažy status MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Vypłyŭnoje infarmavańnie ab piśni, jakaja hraje (vymahaje DBus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "u tray i bačnaść (vymahaje D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "u tray i bačnaść (vymahaje D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Uklučy aplikacyju schavanaj (vymahaje systray)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Uklučy aplikacyju bačnaj (vymahaje systray)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Uklučy dla profilu [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Arhument pieraklučeńnia vymahaje D-Bus. Abryŭ." #: ../sonata/cli.py:149 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Uklučeńnie Sonaty dla profilu" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "" #: ../sonata/cli.py:155 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Niapravilny numar profilu. Numar profilu musić być ad 1 da" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Zmoŭčany profil" #: ../sonata/cli.py:176 msgid "by" msgstr "ad" #: ../sonata/cli.py:176 msgid "from" msgstr "z" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Niemahčyma spałučycca z MPD.\n" "Pravier nałady Sonaty ci źmiennyja asiarodździa MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Nazva" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Vykanaŭca" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Albom" #: ../sonata/cli.py:241 msgid "Date" msgstr "Data" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Pieśnia" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Styl" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fajł" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Čas" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Častata bitaŭ" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD spynieny" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Hraje" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Prypyniena" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Spyniena" #: ../sonata/cli.py:271 msgid "State" msgstr "Stan" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Paŭtary" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Uklučana" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Vyklučana" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Vypadkova" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Hučnaść" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Crossfade" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekundaŭ" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata nie zmahła spałučycca z sesijnym busam D-BUS: Niemahčyma vyznačyć " "adras busa paviedamleńniaŭ (ka atrymać dapamohu, pasprabuj \"man dbus-launch" "\" i \"man dbus-daemon\")" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:140 #, fuzzy msgid "Starting Sonata instead..." msgstr "Uklučeńnie Sonaty dla profilu" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Sonata ŭžo pracuje." #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Nieviadoma" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Nazva vykanaŭcy" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Nazva albomu" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Nazva pieśni" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Numar pieśni" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 #, fuzzy msgid "Disc number" msgstr "Numar dysku" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Hod" #: ../sonata/formatting.py:126 #, fuzzy msgid "File path" msgstr "ściežka_fajłu" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Ściežka" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nazva fajłu" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nazva płyni" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Płyń" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Praciahłaść pieśni" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Praciahłaść" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Adbyŭšy čas (tolki nazva)" #: ../sonata/info.py:200 msgid "hide" msgstr "schavaj" #: ../sonata/info.py:203 msgid "more" msgstr "bolej" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Nazva albomu nie akreślenaja." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Źviestki pra albom nia znojdzienyja." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Słovaŭ nia znojdziena" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Zahruzka słovaŭ..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Słovaŭ nia znojdziena" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Roznyja vykanaŭcy" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Biaź źviestak" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nazva fajłu" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Usio" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Fajłavaja systema" #: ../sonata/library.py:159 #, fuzzy msgid "Albums" msgstr "Albom" #: ../sonata/library.py:161 #, fuzzy msgid "Artists" msgstr "Vykanaŭca" #: ../sonata/library.py:163 #, fuzzy msgid "Genres" msgstr "Styl" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Usia pieśnia" msgstr[1] "Usia pieśnia" msgstr[2] "Usia pieśnia" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekundaŭ" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "chvilina" msgstr[1] "chviliny" msgstr[2] "chvilin" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/library.py:1069 #, fuzzy msgid "Song" msgstr "pieśnia" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Dziejny" #: ../sonata/main.py:94 msgid "Library" msgstr "Biblijateka" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Śpisy" #: ../sonata/main.py:96 msgid "Streams" msgstr "Płyni" #: ../sonata/main.py:97 msgid "Info" msgstr "Źviestki" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Usia pieśnia" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Uparadkuj śpis" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Dadaj zaznačanyja pieśni" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Spałučeńnie" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "_Hraj paśla" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Aktualizuj" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Užyj _addalenuju vyjavu..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Užyj _lakalnuju vyjavu..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:237 #, fuzzy msgid "Reset Image" msgstr "Adčyni vyjavu" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Hraj" #: ../sonata/main.py:241 #, fuzzy msgid "Pa_use" msgstr "_Paŭza" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Spyni" #: ../sonata/main.py:245 #, fuzzy msgid "Pre_vious" msgstr "_Papiaredniaja" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Nastupnaja" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Vyjdzi" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Vydal" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Ačyść" #: ../sonata/main.py:255 #, fuzzy msgid "_Entire Library" msgstr "_Aktualizuj biblijateku" #: ../sonata/main.py:257 #, fuzzy msgid "_Selected Items" msgstr "Dadaj zaznačanyja pieśni" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Nałady..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Ab prahramie..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Redahuj tagi..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Dadaj" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Zamiani" #: ../sonata/main.py:268 msgid "Add" msgstr "Dadaj" #: ../sonata/main.py:270 msgid "Replace" msgstr "Zamiani" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Vydal..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Tasuj" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Tasuj" #: ../sonata/main.py:315 #, fuzzy msgid "S_how Sonata" msgstr "_Pakažy Sonatu" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Zamiani dziejny śpis" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Paŭtary" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Vypadkova" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Pavodle vykanaŭcaŭ" #: ../sonata/main.py:475 msgid "By Album" msgstr "Pavodle albomaŭ" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Pavodle nazvaŭ piesień" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Pavodle nazvaŭ fajłaŭ" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Pavodle katalohaŭ dy nazvaŭ fajłaŭ" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Pieraviarni śpis" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Novy..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Redahuj..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Novy śpis..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Źmiani nazvu..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klikni, kab razharnuć" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klikni, kab zharnuć" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Nie spałučany" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Nie staje pravoŭ dziela zapisu" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Adłučy" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(aktualizacyja mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Vyjavy" #: ../sonata/main.py:2197 msgid "All files" msgstr "Usie fajły" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Nazvaŭ vykanaŭcaŭ ci albomaŭ nia znojdziena." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Vokładak nia znojdziena." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Vydalić zaznačany śpis?" msgstr[1] "Vydalić zaznačanyja śpisy?" msgstr[2] "Vydalić zaznačanyja śpisy?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Vydal śpis" msgstr[1] "Vydal śpisy" msgstr[2] "Vydal śpisy" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Vydalić zaznačanuju płyń?" msgstr[1] "Vydalić zaznačanyja płyni?" msgstr[2] "Vydalić zaznačanyja płyni?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Vydal płyń" msgstr[1] "Vydal płyni" msgstr[2] "Vydal płyni" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Niemahčyma ŭklučyć prydatnaha hartača." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Uklučy hartača" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Zapišy śpis" #: ../sonata/playlists.py:156 #, fuzzy msgid "Existing Playlist" msgstr "Śpis" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Zamiani dziejny śpis" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Dadaj pieśni" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Źmiani nazvu śpisu" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Fajł" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Tolki lakalna" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Užyta MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "asabliva" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Źviestki, jakija pakazvajucca, tolki kali ŭsie tagi akreślenyja" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Stvaraje kalony ŭ dziejnym śpisie" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Kab zachoŭvać słovy ŭ katalohu muzyčnaha fajłu, treba akreślić sapraŭdny " "kataloh z muzykaj." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Pravierka katalohu z muzykaj" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Kab zachoŭvać vokładki ŭ katalohu muzyčnaha fajłu, treba akreślić sapraŭdny " "kataloh z muzykaj." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Novy profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Redahuj płyń" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Novaja płyń" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Płyń z takoj nazvaj užo isnuje. Chočaš zamianić jaje?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib i/ci tagpy nia znojdzienyja, redahavańnie tagaŭ vyklučanaje." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Redahuj tagi" #: ../sonata/tagedit.py:124 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "Taglib i/ci tagpy nia znojdzienyja, redahavańnie tagaŭ vyklučanaje." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "nie isnuje. Akreśl u naładach kataloh z muzykaj." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " nia znojdzieny. Akreśl u naładach kataloh z muzykaj." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Muzyčnych fajłaŭ sa źmiennymi tagami nia znojdziena." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Redahuj tagi" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Niemahčyma zapisać tag u muzyčnym fajle." #: ../sonata/tagedit.py:349 #, fuzzy msgid "Hide file path" msgstr "ściežka_fajłu" #: ../sonata/tagedit.py:352 #, fuzzy msgid "Show file path" msgstr "ściežka_fajłu" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Elehantny muzyčny klijent dla MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Skaroty" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Skaroty" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Nazva" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Vykanaŭca" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Albom" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Data" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Pieśnia" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Styl" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Fajł" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Častata bitaŭ" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Adčyni artykuł pra vykanaŭca ź Wikipedyi" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Adčyni artykuł pra albom ź Wikipedyi" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Pieraklučy dadatkovyja tagi" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Redahuj tagi dla pieśni" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "redahuj tagi" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Źviestki ab pieśni" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Šukaj słovy na Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "šukaj" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Słovy" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Źviestki ab albomie" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "_Šukaj" #: ../sonata/ui/library.glade.h:3 #, fuzzy msgid "Search terms" msgstr "Redahuj krytery pošuku" #: ../sonata/ui/library.glade.h:10 #, fuzzy msgid "End Search" msgstr "_Skončy pošuk" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Nazva śpisu" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Asablivaja vokładka" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Nazva fajłu z vokładkaj" #: ../sonata/ui/preferences.glade.h:3 #, fuzzy msgid "_About" msgstr "_Ab prahramie..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "" #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "Nazva" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "Host" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Pakiń pustym, kali parol nie vymahajecca." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Parol" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Kataloh z muzykaj" #: ../sonata/ui/preferences.glade.h:13 #, fuzzy msgid "_Autoconnect on start" msgstr "Aŭtamatyčna spałučajsia pry ŭklučeńni" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Spałučeńnie z MPD" #: ../sonata/ui/preferences.glade.h:15 #, fuzzy msgid "MPD" msgstr "_MPD" #: ../sonata/ui/preferences.glade.h:16 #, fuzzy msgid "_Playback/volume buttons" msgstr "Uklučy knopki hrańnia/kiravańnia hučnaściu" #: ../sonata/ui/preferences.glade.h:17 #, fuzzy msgid "Pr_ogressbar" msgstr "Uklučy panel prahresu" #: ../sonata/ui/preferences.glade.h:18 #, fuzzy msgid "_Statusbar" msgstr "Uklučy panel statusu" #: ../sonata/ui/preferences.glade.h:19 #, fuzzy msgid "System _tray icon" msgstr "Systemny tray" #: ../sonata/ui/preferences.glade.h:20 #, fuzzy msgid "Song Ly_rics" msgstr "Słovy" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Zachoŭvaj słovy ŭ:" #: ../sonata/ui/preferences.glade.h:23 #, fuzzy msgid "_Album art" msgstr "Nazva albomu" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Styl vokładki:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standartna" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stylizavana" #: ../sonata/ui/preferences.glade.h:27 #, fuzzy msgid "Search locations:" msgstr "Paradak pošuku:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Tolki lakalna" #: ../sonata/ui/preferences.glade.h:29 #, fuzzy msgid "Local and remote" msgstr "Lakalna, paśla addalena" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Zachoŭvaj vokładki ŭ:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Pakažy" #: ../sonata/ui/preferences.glade.h:32 #, fuzzy msgid "_Show window on all workspaces" msgstr "Pakazvaj vakno na ŭsich rabočych abšaraŭ" #: ../sonata/ui/preferences.glade.h:33 #, fuzzy msgid "_Keep window above other windows" msgstr "Trymaj vakno pa-nad inšymi" #: ../sonata/ui/preferences.glade.h:34 #, fuzzy msgid "_Hide window titlebar" msgstr "Nazva vakna:" #: ../sonata/ui/preferences.glade.h:35 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Minimalizuj u systemny tray pry začynieńni/nacisku Escape" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Kali ŭklučana, začynienaja Sonata budzie minimalizavacca ŭ systemny tray. " "Pakul što niemahčyma vyznačyć, ci jość systemny tray, tamu ŭklučaj heta, " "tolki kali maješ jaho." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Kali ŭklučana, začynienaja Sonata budzie minimalizavacca ŭ systemny tray. " "Pakul što niemahčyma vyznačyć, ci jość systemny tray, tamu ŭklučaj heta, " "tolki kali maješ jaho." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Pavodziny vakna" #: ../sonata/ui/preferences.glade.h:39 #, fuzzy msgid "_Update MPD library on start" msgstr "Aktualizuj biblijateku MPD pry ŭklučeńni" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Kali ŭklučana, Sonata budzie aŭtamatyčna aktualizoŭvać tvaju biblijateku MPD " "pry ŭklučeńni." #: ../sonata/ui/preferences.glade.h:41 #, fuzzy msgid "S_top playback on exit" msgstr "Pierastań hrać pry vychadzie" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD moža hrać, navat kali klijent začynieny. Kali ŭklučana, Sonata budzie " "bolš padobnaj da zvykłaha muzyčnaha playera, jaki spyniaje vykanańnie pry " "vychadzie." #: ../sonata/ui/preferences.glade.h:43 #, fuzzy msgid "_Write status file:" msgstr "Zapisvaj statusny fajł:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Kali ŭklučana, Sonata stvoryć fajł typu xmms-infopipe, sa źviestkami ab " "pieśni, jakaja ciapier hrajecca. Šmat aplikacyj pracujuć z takim fajłam " "(kamunikatary, klijenty IRC...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Roznaje" #: ../sonata/ui/preferences.glade.h:46 #, fuzzy msgid "Behavior" msgstr "_Pavodziny" #: ../sonata/ui/preferences.glade.h:47 #, fuzzy msgid "C_urrent playlist:" msgstr "Dziejny śpis:" #: ../sonata/ui/preferences.glade.h:48 #, fuzzy msgid "_Library:" msgstr "Biblijateka:" #: ../sonata/ui/preferences.glade.h:49 #, fuzzy msgid "_Window title:" msgstr "Nazva vakna:" #: ../sonata/ui/preferences.glade.h:50 #, fuzzy msgid "Current _song line 1:" msgstr "Radok 1 dziejnaj pieśni:" #: ../sonata/ui/preferences.glade.h:51 #, fuzzy msgid "Current s_ong line 2:" msgstr "Radok 2 dziejnaj pieśni:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Najaŭnyja opcyi" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Farmat pieśniaŭ" #: ../sonata/ui/preferences.glade.h:54 #, fuzzy msgid "Format" msgstr "_Farmat" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: ../sonata/ui/preferences.glade.h:56 #, fuzzy msgid "_Username:" msgstr "Nazva karystalnika:" #: ../sonata/ui/preferences.glade.h:57 #, fuzzy msgid "_Password:" msgstr "Parol:" #: ../sonata/ui/preferences.glade.h:58 #, fuzzy msgid "Popup _notification on song changes" msgstr "Pakazvaj infarmavańni pry źmienie pieśni" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Systemny tray" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Uviersie źleva" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Uviersie sprava" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Unizie źleva" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Unizie sprava" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Pasiaredzinie ekranu" #: ../sonata/ui/preferences.glade.h:66 #, fuzzy msgid "C_rossfade" msgstr "Crossfade" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Praciahłaść pierachodu" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sek" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Dadatki" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Uklučy Crossfade" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Abiary vokładku" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Redahuj krytery pošuku" #: ../sonata/ui/sonata.glade.h:5 #, fuzzy msgid "Cover Art" msgstr "_Vokładka" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Adčyni vyjavu" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Pošuk słovaŭ" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Nazva vykanaŭcy" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Nazva pieśni" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Śpis" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Nazva płyni" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL płyni" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Zapišy _ŭsio" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Hod" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Kamentar" ��������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/ca.po���������������������������������������������������������������������0000664�0000000�0000000�00000114077�15003420405�0016600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Catalan translation of Sonata # Copyright (C) 2007 Scott Horowitz # This file is distributed under the same license as the Sonata package. # Scott Horowitz <stonecrest@gmail.com> 2007. # Franc Rodriguez <franc.rodriguez@tecob.com> # # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 14:30+0200\n" "Last-Translator: Franc Rodriguez <franc.rodriguez@tecob.com>\n" "Language-Team: Catalan\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "En quan a Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Preferències" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Mode Art a pantalla completa" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Recórrer la [1ª-5ª] pestanya" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Conectar al servidor MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Desconectar del servidor MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Desordenar la llista de reproducció actual" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Expandir reproductor" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Canviar a la pestanya anterior" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Canviar a la pestanya següent" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Recollir reproductor" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Buscar a la biblioteca" #: ../sonata/about.py:69 msgid "Quit" msgstr "Sortir" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Actualitzar la biblioteca sencera" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Mostrar el menú contextual" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimitzar a l'àrea de notificació (si està actiu)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Cançó anterior" #: ../sonata/about.py:75 msgid "Next track" msgstr "Següent cançó" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Reproduïr/Pausar" #: ../sonata/about.py:77 msgid "Stop" msgstr "Aturar" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Baixar el volúm" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Pujar el volúm" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Reproduïr la cançó seleccionada " #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Esborrar les cançons seleccionades" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centrar la cançó en reproducció" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Editar les etiquetes de las cançons seleccionades" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Guardar en una llista de reproducció nova" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Buidar la llista de reproducció" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Desordenar la llista de reproducció" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Afegir la/les canço/cançons seleccionada/es o entrar al directori" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Anar al directori superior" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Afegir el/els element/s seleccionat/s" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Reemplaçar amb el/els element/s seleccionat/s" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Afegir el/els element/s seleccionat/s i reproduir-los" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Reemplaçar amb el/els element/s seleccionat/s i reproduïr-lo/s" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Afegir el/els element/s seleccionat/s" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Afegir la/les llista/es de reproducció seleccionada/es" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Eliminar le/s lliste/s de reproducció seleccionat/s" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Reemplaçar amb la/les llista/es de reproduccin seleccionada/es" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "" "Afegir la/es llista/es de reproducció seleccionada/es i reproducïr-la/es" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Afegir el/els flux/es seleccionat/s" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Esborrar el/els flux/es seleccionat/s" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Reemplaçar amb el/els flux/es seleccionat/s" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Afegir el/els flux/es seleccionat/s i reproduïr-lo/los" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Editar les etiquetes de la cançó en reproducció" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Principals" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Reproducció" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Llista de reproducció actual" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Biblioteca" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Llistes de reproducció" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Fluxes" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Informació de la cançó" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "dia de música" msgstr[1] "dies de música" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "hora de música." msgstr[1] "hores de música." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Ús: sonata [OPCIÓ]... [COMANDA]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Comandes" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Reprodueix la cançó en la llista de reproducció" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pausa la cançó actual en reproducció" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Atura la cançó actual en reproducció" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Reprodueix la següent cançó en la llista de reproducció" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Reprodueix la cançó anterior en la llista de reproducció" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Activa/Desactiva la reproducció/pausa; reprodueix si està aturat" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Activa/Desactiva el mode de repetició" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Activa/Desactiva el mode aleatori" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Motra l' informació de la cançó actual" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Mostra l' estat del servidor MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Mostra una notificació de cançó ( Requereix D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "a l'àrea de notificació (requereix D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "a l'àrea de notificació (requereix D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "No iniciar l'aplicació si les comandes D-Bus fallen" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Inicia l'aplicació amagada (requereix una área de notificació)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Inicia l' aplicació visible (requereix una área de notificació)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Iniciar amb el perfil [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "L'argument -t, --toggle i popup requereix D-Bus. Abortant." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Iniciar Sonata amb el perfil %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d no és un número de perfil disponible" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "El número del perfil ha de ser entre 1 i %d" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Perfil predeterminat" #: ../sonata/cli.py:176 msgid "by" msgstr "per" #: ../sonata/cli.py:176 msgid "from" msgstr "de" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "No ha estat possible conectar al servidor MPD.\n" "Si us plau, revisi les preferències de Sonata o les variables d'entorn " "MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Títol" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artista" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Àlbum" #: ../sonata/cli.py:241 msgid "Date" msgstr "Data" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Pista" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Estil" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fitxer" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Temps" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Tasa de bits" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD aturat" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Reproduint" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Aturat" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Aturat" #: ../sonata/cli.py:271 msgid "State" msgstr "Estat" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Repetir" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Activat" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Desactivat" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Desordenar" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volúm" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Esvair" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "segon" msgstr[1] "segons" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "S'ha produit un error al connectar amb el transport de la sessió D-Bus:No " "s'ha pogut determinar l'adreça del missatge de transport (consulti el manual " "de 'dbus-launch'i de 'dbus-daemon' per obtenir ajuda)." #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Iniciant Sonata en lloc de ..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Potser sonata no està en marxa?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Desconegut" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Nom de l'artista" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Nom de l'àlbum" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Nom de la pista" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Número de la pista" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Número de disc" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Any" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Camí del fitxer" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Camí" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nom del fitxer" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nom del fluxe" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Fluxe" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Durada" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Durada" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Temps restant (només pel títol de la finestra)" #: ../sonata/info.py:200 msgid "hide" msgstr "amagar" #: ../sonata/info.py:203 msgid "more" msgstr "meś" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "No s'ha especificat un nom d'àlbum" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "No s'ha trobat informació de l'àlbum" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "No s'han trobat lletres" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Obtenint lletres" #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "No s'han trobat lletres" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Varis artistes" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Sense etiquetar" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nom del fitxer" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Tot" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Sistema de fitxers" #: ../sonata/library.py:159 msgid "Albums" msgstr "Àlbums" #: ../sonata/library.py:161 msgid "Artists" msgstr "Artistes" #: ../sonata/library.py:163 msgid "Genres" msgstr "Estils" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Tota la cançó" msgstr[1] "Tota la cançó" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "segon" msgstr[1] "segons" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minut" msgstr[1] "minuts" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "cançó" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Actual" #: ../sonata/main.py:94 msgid "Library" msgstr "Biblioteca" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Llistes de reproducció" #: ../sonata/main.py:96 msgid "Streams" msgstr "Fluxes" #: ../sonata/main.py:97 msgid "Info" msgstr "Informació de la cançó" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Tota la cançó" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Ordenar llista de reproducció" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Elements seleccionats" #: ../sonata/main.py:227 msgid "_Connection" msgstr "Connexió" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Rep_roduïr després" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Actualitzar" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Usar imatge _remota..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Usar Imatge _Local..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Reiniciar imatge" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Reproduïr" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pa_usar" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Aturar" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Anterior" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Següent" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Sortir" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Treure" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Netejar" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Biblioteca sencera" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Elements seleccionats" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Preferències..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_En quant a..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Editar etiquetes..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Afegir" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Reemplaçar" #: ../sonata/main.py:268 msgid "Add" msgstr "Afegir" #: ../sonata/main.py:270 msgid "Replace" msgstr "Reemplaçar" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Esborrar..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Mesclar" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Mesclar" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Mostrar Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Substiuir la llista de reproducció" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Repetir" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Alea_tori" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Per artista" #: ../sonata/main.py:475 msgid "By Album" msgstr "Per álbum" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Per títol" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Per nom de fitxer" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Per directori i nom de fitxer" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Invertir llista" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nou..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Editar..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "Guardar llista de reproducció" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Reanomenar..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Prémer per expandir" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Prémer per recollir" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "No connectat" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Sense permissos de lectura" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Desconnectar" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(actualitzant biblioteca)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Imatges" #: ../sonata/main.py:2197 msgid "All files" msgstr "Tots els fitxers" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "No s'ha trobat l'artista o el nom de l'àlbum" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "No s'ha trobat la portada" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Esborrar la llista de reproducció seleccionada?" msgstr[1] "Esborrar les llistes de reproducció seleccionades?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Esborrar llista de reproducció" msgstr[1] "Esborrar llistes de reproducció" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Esborrar el fluxe seleccionat?" msgstr[1] "Esborrar els fluxes seleccionats?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Esborrar fluxe" msgstr[1] "Esborrar fluxes" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "No es pot arrencar el navegador" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Arrenca el navegador" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Guardar llista de reproducció" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Llistes de reproducció existents" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Substiuir la llista de reproducció" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Afegir cançons" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Reanomenar la llista de reproducció" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Fitxer" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Només local" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Utilitzant el servidor/port de MPD" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "personalitzat" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Informació mostrada només si totes les etiquetes tancades estan definides" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Crear columnes en la llista de reproducció actual" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Per a guardar les lletres en el directori de fitxers de música, ha de " "especificar un directori de música vàlid" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Verificació del directori de música" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Per a guardar els fitxers de portades en el directori de música, ha " "d'especificar un directori de música vàlid." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Perfil nou" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Editar fluxe" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nou fluxe" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Existeix un fluxe amb aquest nom. El vol reemplaçar?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "No s'ha trobat taglib i/o tagpy, s'ha desactivat el suport per l'edició " "d'etiquetes." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Editar etiquetes" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Versió de Tagpy < 0.91, Si us plau actualitzi a una versió més nova, Suport " "per l'ediciió de tags desactivada" #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "No existeix. Si us plau especifiqui un directori de música vàlid en les " "preferències" #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "no trobat. Si us plau, especifiqui un directori de música vàlid les " "preferències" #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "No s'han trobat fitxers amb les etiquetes editables." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Editar etiquetes" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "No s'ha pogut escriure l'etiqueta en el fitxer de música." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Amagar camí del fitxer" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Mostrar camí del fitxer" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Un client elegant de música per MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Dreceres del teclat" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Dreceres del teclat" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filtre" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Títol" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Artista" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Àlbum" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Data" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Pista" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Estil" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Fitxer" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Tasa de bits" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Informació sobre l' artista en Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Informació sobre l' álbum en Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Mostra/Amaga informació extra" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Editar les etiquetes de la cançó" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "editar etiquetes" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informació de la cançó" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Cerca les lletres de la cançó a Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "Cerca" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Lletres" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informació de l' àlbum" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Cercar" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Cercar termes" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Finalitzar recerca" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Nom de la llista de reproducció" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Portada personalitzada" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Nom del fitxer de la portada" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_En quant a..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "Configurar..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Nom" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Servidor" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Deixi en blanc si no es necessària la contrasenya" #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Contra_senya" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Seleccioni un directori" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Directori de música" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Connectar automàticament a l'inici" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Connexió" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Mostrar botons de reproducció/volum" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Mos_trar barra de progrés" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Mostrar barra d'estat" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Icona de l' àrea de _notificació" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Lletr_es" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Guardar lletres a:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Nom de l'àlbum" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Estil de la portada" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Normal" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Estilitzat" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "llocs de recerca:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Només local" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Local i remota" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Guardar portada a:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Mostrar" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Mostrar la finestra en totes les àrees de treball" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "M_antenir la finestra per sobre de la resta de finestres" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Amagar el títol de la finestra" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimitzar a l' àrea de notificació quan es tanqui la finestra" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Si està activat, Sonata es minimitzarà a l'àrea de notificació quan es " "tanqui lafinestra. Actualment és impossible detectar si hi ha o no una àrea " "de notificació, per tant, comprovi que almenys en té una." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Si està activat, Sonata es minimitzarà a l'àrea de notificació quan es " "tanqui lafinestra. Actualment és impossible detectar si hi ha o no una àrea " "de notificació, per tant, comprovi que almenys en té una." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Comportament de la finestra" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "A_ctualitzar la biblioteca a l'inici" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Si està activat, Sonata actualitzarà automaticament la biblioeca a l'inici " #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "A_turar la reproducció al sortir" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD permet continuar la reproducció encara que cap client estigui obert.Si " "està activat, Sonata es comportarà com un reproductor de música convencional " "y aturarà la reproducció al sortir" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Escriure fitxer d'estat" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Si està activat, Sonata crearà un fitxer del tipus xmms-infopipe que tindrà " "informació sobre la cançó en reproducció. Moltes aplicacionstenen suport pel " "fitxer xmms-info (client de missatgeria instantània, clients de IRC, ...)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Miscel·lànea" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Comportament" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "Ll_ista de reproducció actual" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "Biblioteca" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Títol de la finestra" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Linia 1 de la cançó actual" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Línia 2 de la cançó actual" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Opcions disponibles" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Format de la cançó" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Nom d'usuari" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Contrasenya:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "M_ostrar una notificació al canviar de cançó" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "En l' àrea de notificació" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "A dalt a l'esquerra" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "A dalt a la dreta" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Abaix a l'esquerra" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Abaix a la dreta" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Al centre de la pantalla" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "Es_vair" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Durada del esvaïment" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extres" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Descripció" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Seleccionar portada" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Editar termes de la recerca" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Portada" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Obrir imatge" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Recerca de lletres" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Nom de l' artista" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Títol de la cançó" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Llista de reproducció" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Nom del fluxe" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL del fluxe" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Gu_ardar tot" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Any" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Comentari" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/cs.po���������������������������������������������������������������������0000664�0000000�0000000�00000112060�15003420405�0016610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Czech translation of sonata. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # Jakub Adler <jakubadler@gmail.com>, 2007. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-25 21:15+0100\n" "Last-Translator: Jakub Adler <jakubadler@gmail.com>\n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "O programu Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Nastavení" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Obrázek na celou obrazovku" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Přepnout na tab [1-5]" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Spojit s MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Odpojit od MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Náhodně seřadit aktuální seznam" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Zvětšit přehrávač" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Přejít na předchozí kartu" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Přejít na následující kartu" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Zmenšit přehrávač" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Prohledat knihovnu" #: ../sonata/about.py:69 msgid "Quit" msgstr "Konec" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Aktualizovat celou knihovnu" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Zobrazit vyskakovací menu" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Skrýt do systémové oblasti (pokud je zapnuto)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Předchozí stopa" #: ../sonata/about.py:75 msgid "Next track" msgstr "Další stopa" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Play/Pause" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stop" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Snížit hlasitost" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Zvýšit hlasitost" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Přehrát vybranou skladbu" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Smazat vybrané skladby" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Umístit přehrávanou skladbu na střed" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Upravit tagy vybrané skladby" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Uložit do nového playlistu" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Vymazat seznam" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Náhodně seřadit seznam" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Přidat vybranou skladbu nebo vstoupit do adresáře" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Jít do nadřazeného adresáře" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Přidat vybrané položky" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Přepsat vybranými položkami" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Přidat vybrané položky a přehrát" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Přepsat vybranými položkami a přehrát" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Aktualizovat vybrané položky/cesty" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Přidat vybrané playlisty" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Smazat vybrané playlisty" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Přepsat vybranými playlisty" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Přidat vybrané playlisty a přehrát" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Přidat vybrané streamy" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Smazat vybrané streamy" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Přepsat vybranými streamy" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Přidat vybrané streamy a přehrát" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Upravit tagy přehrávané skladby" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Hlavní zkratky" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Zkratky pro přehrávání" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Zkratky pro aktuální playlist" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Zkratky pro knihovnu" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Zkratky pro playlist" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Zkratky pro stream" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Zkratky pro informace" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "den blaha" msgstr[1] "dny blaha" msgstr[2] "dní blaha" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "hodina blaha" msgstr[1] "hodiny blaha" msgstr[2] "hodin blaha" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Použití: sonata [VOLBA]... [PŘÍKAZ]" #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Příkazy" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Přehrát skladbu v playlistu" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pozastavit přehrávanou skladbu" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Zastavit přehrávanou skladbu" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Přehrát další skladbu v playlistu" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Přehrát předchozí skladbu v playlistu" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Změnit přehrávání/pauza; hraje když je zastaveno" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Přepnout do módu opakování" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Přepnout do náhodného módu" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Zobrazit informace o aktuální skladbě" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Zobrazit stav MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Vyskakovací oznámení (potřebuje DBus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "v systémové oblasti, nebo viditelná (potřebný D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "v systémové oblasti, nebo viditelná (potřebný D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Nespouštět aplikaci, pokud D-Bus příkaz selže" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Spustit aplikaci skrytou (potřebný systray)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Spustit aplikaci viditelnou (potřebný systray)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Spustit s profilem [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Parametr toggle a popup vyžadují D-Bus. Ruší se." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Spustit Sonatu s profilem %s" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d není dostupné číslo profilu." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Číslo profilu musí být mezi 1 a %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Výchozí profil" #: ../sonata/cli.py:176 msgid "by" msgstr "od" #: ../sonata/cli.py:176 msgid "from" msgstr "z" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Nelze se spojit s MPD.\n" "Prosím zkontrolujte nastavení Sonaty, nebo proměnné prostředí MPD_HOST/" "MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Název" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Umělec" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Datum" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Stopa" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Žánr" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Soubor" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Čas" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Datový tok" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD zastaveno" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Přehrávání" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pozastaveno" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Zastaveno" #: ../sonata/cli.py:271 msgid "State" msgstr "Stav" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Opakovat" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "On" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Off" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Náhodně" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Hlasitost" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Prolínání" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata selhala při spojování s D-BUS session bus: Nelze určit adresu zprávy " "bus (zkuste 'man dbus-launch a 'man dbus-daemon' pro nápovědu)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Selhalo spuštění vzdálených příkazů." #: ../sonata/dbus_plugin.py:140 #, fuzzy msgid "Starting Sonata instead..." msgstr "Spustit Sonatu namísto..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Možná je už Sonata spuštěna" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Neznámý" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Jméno umělce" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Jméno alba" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Jméno stopy" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Číslo stopy" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Číslo disku" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Rok" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Cesta k souboru" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Cesta" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Jméno souboru" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Jméno streamu" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Stream" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Délka skladby" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Délka" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Uplynulý čas (pouze v názvu)" #: ../sonata/info.py:200 msgid "hide" msgstr "skrýt" #: ../sonata/info.py:203 msgid "more" msgstr "více" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Jméno alba není nastaveno" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Informace o albu nejsou dostupné." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Text není dostupný" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Získávám text..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Text není dostupný" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Různí umělci" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Bez tagů" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Jméno souboru" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Vše" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Systém souborů" #: ../sonata/library.py:159 msgid "Albums" msgstr "Alba" #: ../sonata/library.py:161 msgid "Artists" msgstr "Umělci" #: ../sonata/library.py:163 msgid "Genres" msgstr "Žánry" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Celá skladba" msgstr[1] "Celá skladba" msgstr[2] "Celá skladba" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Skladba" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Aktuální" #: ../sonata/main.py:94 msgid "Library" msgstr "Knihovna" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Playlisty" #: ../sonata/main.py:96 msgid "Streams" msgstr "Streamy" #: ../sonata/main.py:97 msgid "Info" msgstr "Informace" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Celá skladba" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "Seřa_dit seznam" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Vybrané položky" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Spojení" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Př_ehrát po" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Aktualizovat" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Použít _vzdálený obrázek..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Použít _lokální obrázek..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Celá obrazovka" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Vynulovat obrázek" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Play" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pau_za" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stop" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Předchozí" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Další" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Ukončit" #: ../sonata/main.py:251 msgid "_Remove" msgstr "S_mazat" #: ../sonata/main.py:253 msgid "_Clear" msgstr "Smazat _vše" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Celou knihovnu" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Vybrané položky" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Nastavení" #: ../sonata/main.py:261 msgid "_About..." msgstr "_O Sonatě" #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "Upravit _tagy" #: ../sonata/main.py:264 msgid "_Add" msgstr "Př_idat" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Přepsat" #: ../sonata/main.py:268 msgid "Add" msgstr "Přidat" #: ../sonata/main.py:270 msgid "Replace" msgstr "Přepsat" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "S_mazat..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Zamíchat" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Zamíchat" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "Zobrazit _Sonatu" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Přepsat playlist" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Opakovat" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Ná_hodně" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Podle umělce" #: ../sonata/main.py:475 msgid "By Album" msgstr "Podle alba" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Podle názvu skladby" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Podle jména souboru" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Podle jména souboru a adresáře" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Obrátit seznam" #: ../sonata/main.py:524 msgid "_New..." msgstr "No_vý..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "Up_ravit..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Nový playlist" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "Pře_jmenovat..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klikni pro rozšířené zobrazení" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klikni pro kompaktní zobrazení" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Nepřipojeno" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Chybí právo ke čtení" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Odpojit" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(aktualizuje se mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Obrázky" #: ../sonata/main.py:2197 msgid "All files" msgstr "Všechny soubory" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Jméno umělce nebo alba není dostupné" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Obrázek alba není dostupný" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Smazat vybraný playlist?" msgstr[1] "Smazat vybrané playlisty?" msgstr[2] "Smazat vybrané playlisty?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Smazat playlist" msgstr[1] "Smazat playlisty" msgstr[2] "Smazat playlisty" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Smazat vybraný stream?" msgstr[1] "Smazat vybrané streamy?" msgstr[2] "Smazat vybrané streamy?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Smazat stream" msgstr[1] "Smazat streamy" msgstr[2] "Smazat streamy" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Nelze spustit vhodný prohlížeč." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Spustit prohlížeč" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Uložit playlist" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Existující playlist" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Přepsat playlist" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Přidat skladby" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Přejmenovat playlist" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Soubor" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Pouze lokální" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Používám MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "ADRESÁŘ_SE_SKLADBOU" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "vlastní" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informace zobrazeny pouze když jsou všechny přiložené tagy definovány" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Vytvoří sloupce v aktuálním playlistu" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "Pro uložení textu do adresáře s hudbou musíte jeho platný název." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Ověření adresáře s hudbou" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Pro uložení obrázku do adresáře s hudbou musíte uvést platný adresář s hudbou" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nový profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Upravit stream" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nový stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Stream s tímto jménem už existuje. Chcete jej přepsat?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Knihovna taglib nebo tagpy není dostupná, podpora editace tagů vypnuta." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Upravit tagy" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Verze knihovny tagpy je nižší než 0.91, podpora editace tagů vypnuta. Prosím " "aktualizujte na novou verzi." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "neexistuje. Prosím zadejte platný adresář s hudbou v nastavení." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "neexistuje. Prosím zadejte platný adresář s hudbou v nastavení." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Nejsou dostupné soubory s editovatelnými tagy." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Upravit tagy" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Nelze uložit tag do hudebního souboru" #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Skrýt cestu k souboru" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Zobrazit cestu k souboru" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Elegantní klient pro MPD" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Zkratky" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Zkratky" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filtr" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Název" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Umělec" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Datum" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Stopa" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Žánr" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Soubor" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Datový tok" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Přejít na umělce ve Wikipedii" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Přejít na album ve Wikipedii" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Přepnout dodatečné tagy" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Uložit playlist do" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "upravit tagy" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informace o skladbě" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Hledat text na Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "hledat" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Text skladby" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informace o albu" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Hledat" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Hledat výraz" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Ukončit hledání" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Jméno playlistu" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Vlastní obrázek alba" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Jméno obrázku alba" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_O Sonatě" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Nastavit" #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Jméno" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Host" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Nechat prázdné, pokud heslo není potřeba." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "H_eslo" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Vybrat adresář s hudbou" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Adresář _s hudbou" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Automaticky připojit při spuštění" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Připojení k MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Tlačítka přehrávání a hlasitosti" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Lišta průběhu" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Stavový řádek" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Ikona v systémové oblasti" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "T_ext skladby" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Uložit text do" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "Obrázek _alba" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Styl obrázku alba:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standardní" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stylizovaný" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Pořadí hledání:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Pouze lokální" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokální a vzdálený" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Uložit obrázek alba jako:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Zobrazení" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Zobrazit okno na všech plochách" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Podržet okno nad ostatními okny" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Skrýt titulek okna" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "S_krýt do systémové oblasti při zavření" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Pokud je zapnuto, při zavření bude Sonata pouze minimalizována do systémové " "oblasti. Nyní nejde zjistit, jestli je k dispozici systémová oblast, proto " "se ujistěte, že je možné systémovou oblast použít." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Pokud je zapnuto, při zavření bude Sonata pouze minimalizována do systémové " "oblasti. Nyní nejde zjistit, jestli je k dispozici systémová oblast, proto " "se ujistěte, že je možné systémovou oblast použít." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Chování okna" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Aktualizovat knihovnu MPD při spuštění" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Pokud je zapnuto, Sonata bude automaticky aktualizovat knihovnu MPD při " "spuštění." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Zas_tavit přehrávání při vypnutí" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD umožňuje přehrávání i když klient není spuštěn. Pokud je tato volba " "zapnuta, Sonata se může chovat jako běžné přehrávače a zastavit přehrávání " "při ukončení." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Zapsat stav _do souboru:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Pokud je zapnuto, Sonata vytvoří xmms-infopipe jako soubor obsahující " "informace o aktuální skladbě. Mnoho aplikací soubor xmms-info podporuje " "(Instant messenger, IRC klienty...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Různé" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Chování" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Aktuální playlist" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Knihovna:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Titulek okna:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Aktuální skla_dba, řádek 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Aktuální sklad_ba, řádek 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Dostupné volby" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formát skladby" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Formát" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Uživatelské jméno:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "He_slo:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "_Vyskakovací oznámení při změně skladby" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Systémová oblast" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Vlevo nahoře" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Vpravo nahoře" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Vlevo dole" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Vpravo dole" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Střed obrazovky" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "P_rolínání" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Délka přechodu" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sec" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Navíc" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Zapnout prolínání" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Popis" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Vybrat obrázek alba" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Upravit hledaný výraz" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Obrázek alba" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Otevřít obrázek" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Hledání textu" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Jméno umělce" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Název skladby" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Playlist" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Jméno streamu" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL streamu" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Uložit _Vše" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Rok" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Komentář" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/da.po���������������������������������������������������������������������0000664�0000000�0000000�00000110300�15003420405�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Danish translation for Sonata. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the sonata package. # Martin Dybdal <dybber@dybber.dk>, 2007. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 10:52+0100\n" "Last-Translator: Martin Dybdal <dybber@dybber.dk>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Om Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Indstillinger" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Pladeomslag i fuld skærm" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Skift til 1.-5. tab" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Forbind til MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Luk forbindelse til MPD." #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Bland nuværende afspilningsliste" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Udvid afspiller" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Skift til foregående faneblad" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Skift til næste faneblad" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Sammenfold afspiller" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Søg i biblioteket" #: ../sonata/about.py:69 msgid "Quit" msgstr "Luk" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Opdater hele biblioteket" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Vis popup menu" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimer til statusfelt (hvis muligt)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Forrige sang" #: ../sonata/about.py:75 msgid "Next track" msgstr "Næste sang" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Afspil/Pause" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stop" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Sænk lydstyrken" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Hæv lydstyrken" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Afspil den valgte sang" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Fjern de valgte sange" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centrer nuværende sang" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Rediger valgte sanges tags" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Gem som ny afspilningsliste" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Ryd liste" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Bland afspilningsliste" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Tilføj valgte sange eller gå ind i mappe" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Gå et mappeniveau op" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Tilføj det valgte" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Erstat med det valgte" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Tilføj det valgte og afspil" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Erstat med det valgte og afspil" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Opdater valgte elementer/stier" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Tilføj valgte afspilningslister" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Fjern valgte afspilningslister" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Erstat med valgte afspilningslister" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Tilføj de valgte afspilningslister og afspil" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Tilføj valgte streams" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Fjern valgte streams" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Erstat med valgte streams" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Tilføj de valgte streams og afspil" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Rediger den nuværende sangs tags" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Overordnede genveje" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Afspilningsgenveje" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Genveje i afspilningskø" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Genveje i bibliotek" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Genveje i afspilningslister" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Genveje i streams" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Info genveje" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "lyksalig dag" msgstr[1] "lyksalige dage" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "lyksalig time" msgstr[1] "lyksalige timer" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Brug: sonata [FLAG]... [KOMMANDO]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Kommandoer" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Afspil sang i afspilningsliste" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pause nuværende sang" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Stop nuværende sang" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Afspil næste sang i afspilningslisten" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Afspil forrige sang i afspilningslisten" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Afspil/Pause; starter afspilning hvis stoppet" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Slå gentaget afspilning til eller fra" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Slå tilfældig afspilningsrækkefølge til eller fra" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Vis info om nuværende sang" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Vis MPD status" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Vis sangnotifikation (kræver DBUS)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "til statusfelt eller er synligt (kræver D-BUS)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "til statusfelt eller er synligt (kræver D-BUS)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Start ikke sonata hvis D-Bus kommandoer fejler" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Start program minimeret til statusfelt" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Start program synligt" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Start med profil nummer [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "\"--toggle\" og \"--popup\" argumenterne kræver D-Bus. Afbryder." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Starter Sonata med profil %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d er ikke et tilgængeligt profilnummer." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Ikke et gyldigt profilnummer. Profilnumre skal være imellem 1 og %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Standard profil" #: ../sonata/cli.py:176 msgid "by" msgstr "af" #: ../sonata/cli.py:176 msgid "from" msgstr "fra" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Kunne ikke forbinde til MPD.\n" "Tjek dine Sonata indstillinger og MPD_HOST/MPD_PORT variabler." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titel" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Kunstner" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Dato" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Nummer" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fil" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Tid" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitrate" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD stoppet" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Afspiller" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pause" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Stoppet" #: ../sonata/cli.py:271 msgid "State" msgstr "Status" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Gentag" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Ja" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Nej" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Bland liste" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Lydstyrke" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Crossfade" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekund" msgstr[1] "sekunder" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Afvikling af fjernkommandoer fejlede." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Starter Sonata i stedet..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Der er allerede startet en instans af Sonata" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Ukendt" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Kunstner navn" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Album titel" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Sangens navn" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Sangens nummer" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "Nr." #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Disk nummer" #: ../sonata/formatting.py:124 msgid "Year" msgstr "År" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Filsti" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Sti" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Filnavn" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Stream navn" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Stream" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Sanglængde" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Længde" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Forløbet tid (kun i vinduestitel)" #: ../sonata/info.py:200 msgid "hide" msgstr "skjul" #: ../sonata/info.py:203 msgid "more" msgstr "mere" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Album navn ikke angivet" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Ingen albuminformationer blev fundet." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Der blev ikke fundet nogen sangtekst." #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Henter sangtekst.." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Der blev ikke fundet nogen sangtekst." #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Diverse kunstnere" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Tags mangler" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Filnavn" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Alt" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Filsystem" #: ../sonata/library.py:159 msgid "Albums" msgstr "Albums" #: ../sonata/library.py:161 msgid "Artists" msgstr "Kunstnere" #: ../sonata/library.py:163 msgid "Genres" msgstr "Genrer" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Hele sangen" msgstr[1] "Hele sangen" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekund" msgstr[1] "sekunder" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minut" msgstr[1] "minutter" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Sang" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Afspilningskø" #: ../sonata/main.py:94 msgid "Library" msgstr "Bibliotek" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Afspilningslister" #: ../sonata/main.py:96 msgid "Streams" msgstr "Streams" #: ../sonata/main.py:97 msgid "Info" msgstr "Info" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Hele sangen" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Sorter liste" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Valgte elementer" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Forbindelse" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Afspi_l efter" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Opdater" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Brug _online billede" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Brug _lokalt billede" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "Vis i _fuld skærm" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Nulstil billede" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Afspil" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Pause" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stop" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Forrige" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Næste" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Luk" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Fjern" #: ../sonata/main.py:253 msgid "_Clear" msgstr "R_yd" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Hele biblioteket" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "Valgte elementer" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Indstillinger" #: ../sonata/main.py:261 msgid "_About..." msgstr "_Om" #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Rediger tags" #: ../sonata/main.py:264 msgid "_Add" msgstr "_Tilføj" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Erstat" #: ../sonata/main.py:268 msgid "Add" msgstr "Tilføj" #: ../sonata/main.py:270 msgid "Replace" msgstr "Erstat" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Slet" #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Bland" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Bland" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Vis Sonata-vinduet" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Erstat afspilningsliste" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Gentag" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Tilfældig _rækkefølge" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Efter _kunstner" #: ../sonata/main.py:475 msgid "By Album" msgstr "Efter _album" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Efter _titel" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Efter _filnavn" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Efter mappe og filnavn" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Omvendt rækkefølge" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Ny..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Rediger" #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "Ny afspilnings_liste" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Omdøb" #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klik for at folde ud" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klik for at folde sammen" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Ikke forbundet" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Ingen læserettigheder" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Ingen forbindelse" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(opdaterer MPD database)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Billeder" #: ../sonata/main.py:2197 msgid "All files" msgstr "Alle filer" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Ingen kunstner eller album fundet." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Intet pladeomslag" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Slet den valgte afspilningsliste?" msgstr[1] "Slet de valgte afspilningslister?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Slet afspilningsliste" msgstr[1] "Slet afspilningslister" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Slet den valgte stream?" msgstr[1] "Slet de valgte streams?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Slet stream" msgstr[1] "Slet Streams" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Ikke muligt at starte en browser" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Start browser" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Gem afspilningsliste" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Eksisterende afspilningsliste" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Erstat afspilningsliste" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Tilføj sange" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Omdøb afspilningsliste" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Fil" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Kun lokalt" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Bruger MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SANGENS_MAPPE" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "selvvalgt" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Bliver kun vist hvis all tags imellem paranteserne er defineret." #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Opdeler den nuværende afspilningsliste i kolonner." #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "For at gemme sangtekster til musikfilens mappe, skal du angive en gyldig " "musikmappe." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Musikmappe verifikation" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "For at gemme albumcovers til musikfilens mappe, skal du angive en gyldig " "musikmappe." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Ny profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Rediger stream" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Ny stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "En stream med dette navn eksisterer allerede. Vil du erstatte den?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Hverken Taglib og/eller tagpy blev fundet, tagredigering deaktiveret." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Rediger tags" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Den installerede tagpy version er < 0.91. Opgrader venligst til en nyere " "version for at få mulighed for redigering af tags." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "eksisterer ikke. Vælg venligst en gyldig musikmappe under indstillinger." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" " blev ikke fundet. Vælg venligst en gyldig musikmappe under indstillinger." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Ingen musikfiler med redigerbare tags fundet." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Rediger tags" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Umuligt at skrive tag til musikfil." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Skjul filsti" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Vis filsti" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "En elegant musikklient til MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "Genveje" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Genveje" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Titel" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Kunstner" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Dato" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Nummer" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Genre" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Fil" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitrate" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Vis kunsterne på Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Vis album på Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Vis/skjul ekstra tags" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Rediger tags" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "rediger tags" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Sanginformationer" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Find sangtekster på Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "søg" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Sangtekst" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Albuminformationer" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Søg" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Søgeord" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Afslut søgning" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Listenavn" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Vælg placering/filnavn for pladeomslag" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Omslags filnavn" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_Om" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Konfigurer..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Navn" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Server" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Efterlad tom hvis serveren ikke er beskyttet med password." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Pass_word" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Vælg en musikmappe" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Musikmappe" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "Forbind _automatisk ved programstart" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD forbindelse" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Afspilnings- og lydstyrkeknapper" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Progressbar" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Statusbar" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Ikon i statusfeltet" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Sang_tekst" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Gem tekster som:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "Plade_omslag" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Omslags udseende:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Med CD-kant" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Søge placeringer:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Kun lokalt" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokalt og online" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Gem omslag som:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Visning" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Vis vindue på alle _arbejdsområder" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Hæv vindue over andre vinduer" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "Skjul vinduets _titellinje" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimer til statusfeltet ved lukning eller ved tryk på escape" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Hvis dette er slået til vil Sonata blive minimeret til statusfeltet ved " "lukning og tryk på escape tasten.Det er på nuværende tidspunkt ikke muligt " "at kontrollere om der er et statusfelt, så slå kun dette til hvis du har et." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Hvis dette er slået til vil Sonata blive minimeret til statusfeltet ved " "lukning og tryk på escape tasten.Det er på nuværende tidspunkt ikke muligt " "at kontrollere om der er et statusfelt, så slå kun dette til hvis du har et." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Vindues opførsel" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Opdater MPD biblioteket ved programstart" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Hvis dette er slået til vil Sonata automatisk opdatere dit MPD bibliotek ved " "programstart." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_Stop afspilning ved lukning" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD tillader afspilning selv når klienten ikke er åben. Sonata vil opføre " "sig mere som en konventionel musikafspiller vis dette slås til og stoppe " "afspilningen når Sonata lukkes." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Lav status_fil:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Lader Sonata lave en xmms-infopipe lignende fil der indeholder informationer " "om den nuværende sang. Mange programmer understøtter xmms-info filer " "(Instant Messengers, IRC Klienter...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Diverse" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Opførsel" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Afspilningskøen:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "I _biblioteket:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Vindues titel:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "_Nuværende sang, linje 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "N_uværende sang, linje 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Tilgængelige erstatninger" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Sangformattering" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Brugernavn:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Password:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Vis _notifikationer ved sangskift" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Statusfelt" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Øverst til venstre" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Øverst til højre" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Nederst til venstre" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Nederst til højre" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Midt på skærmen" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "C_rossfade" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Fadelængde" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sek" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Ekstra" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Brug crossfade" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Forklaring" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Vælg pladeomslag" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Rediger søgeord" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Pladeomslag" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Åben billede" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Sangtekst søgning" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Kunstner navn" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Sangtitel" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Afspilningsliste" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Stream navn" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "Stream URL" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Gem _Alle" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "År" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Kommentar" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/de.po���������������������������������������������������������������������0000664�0000000�0000000�00000113116�15003420405�0016576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# translation of sonata.po to # German translations for Sonata package. # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as Sonata package. # # Paul Johnson <thrillerator@googlemail.com>, 2007. # Sebastian Kemper <sebastian_ml@gmx.net>, 2007. # Sebastian Wicki <gandro@gmx.net>, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2012-10-31 21:16+0100\n" "Last-Translator: Peter Helbing <peter@abulafia.org>\n" "Language-Team: <de@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Über Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Einstellungen" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Albumcover-Vollbildmodus" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Zum [1.-5.] Tab wechseln" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Mit MPD verbinden" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Von MPD trennen" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Aktuelle Wiedergabeliste zufällig anordnen" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Ansicht erweitern" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Zum vorherigen Tab wechseln" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Zum nächsten Tab wechseln" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Ansicht reduzieren" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Bibliothek durchsuchen" #: ../sonata/about.py:69 msgid "Quit" msgstr "Beenden" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Gesamte Bibliothek aktualisieren" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Kontextmenü anzeigen" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Ins Benachrichtigungsfeld minimieren (falls aktiviert)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Vorheriger Titel" #: ../sonata/about.py:75 msgid "Next track" msgstr "Nächster Titel" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Abspielen/Anhalten" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stopp" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Lautstärke verringern" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Lautstärke erhöhen" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Markiertes Lied abspielen" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Markierte(s) Lied(er) entfernen" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Zum aktuellen Lied springen" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Metadaten der ausgewählten Lieder bearbeiten" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Als neue Wiedergabeliste speichern" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Wiedergabeliste leeren" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Wiedergabeliste zufällig anordnen" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Markierte(s) Lied(er) hinzufügen oder Verzeichnis öffnen" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Ins übergeordnete Verzeichnis gehen" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Markierte(s) Element(e) entfernen" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Mit markierten Element(en) ersetzten" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Markierte(s) Element(e) hinzufügen und abspielen" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Mit markierten Element(en) ersetzen und abspielen" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Markierte Element(e)/Pfad(e) aktualisieren" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Markierte Wiedergabeliste(n) hinzufügen" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Markierte Wiedergabeliste(n) entfernen" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Mit markierten Wiedergabeliste(n) ersetzen" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Markierte Wiedergabeliste(n) hinzufügen und abspielen" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Markierte(r) Audio-Stream(s) hinzufügen" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Markierte(r) Audio-Stream(s) entfernen" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Mit markierten Audio-Stream(s) ersetzen" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Markierte(r) Audio-Stream(s) hinzufügen und abspielen" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Metadaten des aktuellen Liedes bearbeiten" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Wichtigste Tastenkürzel" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Tastenkürzel für die Wiedergabe" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Tastenkürzel für die aktuelle Wiedergabeliste" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Tastenkürzel für die Bibliothek" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Tastenkürzel für Wiedergabelisten" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Tastenkürzel für Audio-Streams" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Tastenkürzel für die Titelinfo" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "Tag Glückseligkeit" msgstr[1] "Tage Glückseligkeit" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "Stunde Glückseligkeit" msgstr[1] "Stunden Glückseligkeit" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [OPTION]... [BEFEHL]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "Befehle:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "Titel in der Wiedergabeliste abspielen" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "Aktuellen Titel pausieren" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "Wiedergabe stoppen" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "Nächsten Titel der Wiedergabeliste abspielen" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "Vorherigen Titel der Wiedergabeliste abspielen" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "" "Zwischen Wiedergabe und Pause umschalten; startet Wiedergabe falls gestoppt" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "Wiederholen ein-/ausschalten" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "Zufällige Wiedergabe ein-/ausschalten" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "Informationen über aktuellen Titel anzeigen" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "MPD-Status anzeigen" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "Benachrichtigung bei Liedwechsel (benötigt D-Bus)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" "Zwischen sichtbarem und versteckten Start der Anwendung umschalten (benötigt " "D-Bus)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "Im Vollbild starten (benötigt D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "Nicht starten, wenn D-Bus-Befehle fehlschlagen" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "Anwendung versteckt starten (benötigt Benachrichtigungsfeld)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "Anwendung sichtbar starten (benötigt Benachrichtigungsfeld)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "Starte mit Profil NUM" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "Detailstufe des Logs erhöhen" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "Detailstufe des Logs verringern" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "unbekannter Befehl %s" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "Die Optionen toggle und popup benötigen D-Bus. Abbruch." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Starte Sonata mit Profil %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d ist keine verfügbare Profilnummer" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profilnummern müssen zwischen 1 und %d liegen." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Standard-Profil" #: ../sonata/cli.py:176 msgid "by" msgstr "von" #: ../sonata/cli.py:176 msgid "from" msgstr "aus" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Keine Verbindung zu MPD möglich.\n" "Bitte überprüfen Sie ihre Einstellungen oder die MPD_HOST/MPD_PORT " "Umgebungsvariablen." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titel" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Interpret" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Jahr" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Titel" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Datei" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Dauer" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitrate" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD gestoppt" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Wiedergabe" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pause" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Angehalten" #: ../sonata/cli.py:271 msgid "State" msgstr "Status" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "Wiederholen:" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "An" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Aus" #: ../sonata/cli.py:275 msgid "Random:" msgstr "Zufällige Wiedergabe:" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Lautstärke" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Crossfade" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "Sekunde" msgstr[1] "Sekunden" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata konnte sich nicht mit D-Bus verbinden: Die Adresse des D-Bus wurde " "nicht gefunden. Hilfe finden Sie in den Handbüchern zu \"dbus-launch\" und " "\"dbus-daemon\"" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Konnte entfernten Befehl nicht ausführen." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Starte Sonata stattdessen..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Möglicherweise läuft Sonata nicht?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Unbekannt" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Interpret" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Album" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Titel" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Titel-Nr." #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "CD Nr." #: ../sonata/formatting.py:124 msgid "Year" msgstr "Jahr" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Dateipfad" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Pfad" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Dateiname" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Stream-Name" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Audio-Streams" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Dauer" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Länge" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Abgelaufene Zeit (nur Fenstertitel)" #: ../sonata/info.py:200 msgid "hide" msgstr "verstecken" #: ../sonata/info.py:203 msgid "more" msgstr "mehr" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Albumname nicht gesetzt." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Albumname fehlt." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Liedtext nicht gefunden" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Lade Liedtext ..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "Liedtext nicht gefunden." #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "Kein Liedtext-Plugin aktiviert." #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Verschiedene Interpreten" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Unmarkiert" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Dateiname" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Alles" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Dateisystem" #: ../sonata/library.py:159 msgid "Albums" msgstr "Alben" #: ../sonata/library.py:161 msgid "Artists" msgstr "Interpreten" #: ../sonata/library.py:163 msgid "Genres" msgstr "Genres" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Gesamtes Lied" msgstr[1] "Gesamtes Lied" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "Sekunde" msgstr[1] "Sekunden" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "Minute" msgstr[1] "Minuten" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Lied" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Aktuell" #: ../sonata/main.py:94 msgid "Library" msgstr "Bibliothek" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Wiedergabelisten" #: ../sonata/main.py:96 msgid "Streams" msgstr "Audio-Streams" #: ../sonata/main.py:97 msgid "Info" msgstr "Info" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Gesamtes Lied" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Liste sortieren" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "_Markierte Elemente speichern als" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Verbindung" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Abspielen _nach" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "Wiedergabe_modus" #: ../sonata/main.py:230 msgid "_Update" msgstr "Akt_ualisieren" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "_Entferntes Cover verwenden..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "_Lokales Cover verwenden..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Vollbild-Modus" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Bild zurücksetzen" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Wiedergabe" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pa_use" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stopp" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Vorheriges" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Nächster" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Beenden" #: ../sonata/main.py:251 msgid "_Remove" msgstr "Ent_fernen" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Alle entfernen" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Gesamte Bibliothek" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Markierte Elemente" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Einstellungen..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Über..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Metadaten bearbeiten..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Hinzufügen" #: ../sonata/main.py:266 msgid "_Replace" msgstr "Er_setzen" #: ../sonata/main.py:268 msgid "Add" msgstr "_Hinzufügen" #: ../sonata/main.py:270 msgid "Replace" msgstr "Ersetzen" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "Ent_fernen..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Zufällig" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Zufällig" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "Sonata _anzeigen" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Wiedergabeliste ersetzen" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Wiederholen:" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Zufällige Wiedergabe" #: ../sonata/main.py:323 msgid "Consume" msgstr "Nach Wiedergabe entfernen" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Nach Interpret" #: ../sonata/main.py:475 msgid "By Album" msgstr "Nach Album" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Nach Titel" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Nach Dateiname" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Nach Ordner- & Dateiname" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Invers" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Neu..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "Be_arbeiten..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Neue Wiedergabeliste..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Umbenennen..." # Neues Plugin %s wird aktiviert... #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "Neues Plugin %s wurde gefunden..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "Neues Plugin %s wurde gefunden." #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Mausklick für erweiterte Ansicht" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Mausklick für reduzierte Ansicht" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Nicht verbunden" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Keine Lese-Berechtigung" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Verbindung trennen" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(aktualisiere Datenbank)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Bilder" #: ../sonata/main.py:2197 msgid "All files" msgstr "Alle Dateien" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Kein Interpreten- oder Albumname gefunden." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Kein Cover gefunden." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Markierte Wiedergabeliste entfernen?" msgstr[1] "Markierte Wiedergabelisten entfernen?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Wiedergabeliste entfernen" msgstr[1] "Wiedergabelisten entfernen" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Markierter Audio-Stream entfernen?" msgstr[1] "Markierte Audio-Streams entfernen?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Audio-Stream entfernen" msgstr[1] "Audio-Streams entfernen" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Es konnte keinen passender Browser gestartet werden." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Browser starten" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Wiedergabeliste speichern" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Existierende Wiedergabeliste" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Wiedergabeliste ersetzen" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Lieder hinzufügen" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Wiedergabeliste umbenennen" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Datei" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Nur lokal" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT verwenden" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "LIED_VERZ" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "benutzerdefiniert" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Nur anzeigen, wenn alle eingeschlossenen Daten vorhanden" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Erzeugt Spalten in der Wiedergabeliste" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Um die Liedtexte im Musikordner zu speichern, müssen Sie einen gültigen " "Musikordner angeben." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Musikordner-Überprüfung" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Um die Cover im Musikordner zu speichern, müssen Sie einen gültigen " "Musikordner angeben." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Neues Profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Stream bearbeiten" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Neuer Stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Ein Stream mit diesem Namen existiert bereits. Möchten Sie ihn ersetzen?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib und/oder tagpy nicht gefunden. Bearbeiten der Metadaten deaktiviert." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Metadaten bearbeiten" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Taglib Version < 0.91. Bitte auf neuere Version aktualisieren, Metadaten-" "Bearbeitung deaktiviert." #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "Der Pfad %s existiert nicht. Bitte in den Einstellungen einen gültigen " "Musikordner eintragen." #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "Die Datei '%s' existiert nicht. Bitte in den Einstellungen einen gültigen " "Musikordner eintragen." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Keine Musikdateien mit editierbaren Metadaten gefunden." #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "Metadaten bearbeiten - %s von %s" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Konnte Metadaten nicht speichern." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Dateipfad verstecken" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Dateipfad anzeigen" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Ein eleganter MPD-Client." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Tastenkürzel" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Tastenkürzel" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Filter:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Titel:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Interpret:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Album:" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Jahr" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "Titel-Nr.:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Genre:" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Datei" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitrate" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Öffne Interpret in Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Öffne Album in Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Zusätzliche Metadaten umschalten" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Metadaten bearbeiten" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "Metadaten bearbeiten" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Liedinfo" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Lyricwiki.org nach Liextexten durchsuchen" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "suchen" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Liedtext" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Albuminfo" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Suchen:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Suchkriterien" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Suche beenden" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Name der Wiedergabeliste:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Eigenes Cover" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Cover-Dateiname:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_Über..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Konfigurieren..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Name:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Host:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Port:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Nur ausfüllen, falls ein Kennwort benötigt wird." #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "Pa_sswort:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Musikverzeichnis auswählen" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Musikverzeichnis:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Automatisch beim Start verbinden" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD-Verbindung" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Wiedergabe-/Lautstärkeknöpfe" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "F_ortschrittsbalken" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Statusleiste" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Benachrichtigungsfeld-Symbol" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Liedtexte" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Liedtexte speichern in:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Album-Cover" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Cover-Stil:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Dekoriert" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Suchorte:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Nur lokal" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokal und entfernt" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Cover speichern in:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Anzeige" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Fenster auf a_llen Arbeitsflächen anzeigen" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "Fenster immer im _Vordergrund behalten" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "Fenstertitel ve_rstecken" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "Bei Schließen/Escape ins Benachrichtigungsfeld _minimieren" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Falls aktiviert, wird Sonata beim Schließen des Fensters ins " "Benachrichtigungsfeld minimiert. Leider hat Sonata derzeit keine " "Möglichkeit, um herauszufinden, ob ein Benachrichtigungsfeld existiert. " "Aktivieren Sie diese Einstellung deshalb nur dann, wenn Ihre Arbeitsfläche " "ein solches besitzt." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Falls aktiviert, wird Sonata beim Schließen des Fensters ins " "Benachrichtigungsfeld minimiert. Leider hat Sonata derzeit keine " "Möglichkeit, um herauszufinden, ob ein Benachrichtigungsfeld existiert. " "Aktivieren Sie diese Einstellung deshalb nur dann, wenn Ihre Arbeitsfläche " "ein solches besitzt." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Fensterverhalten" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Bibliothek beim Start aktualisieren" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Falls aktiviert, wird Sonata die Bibliothek automatisch nach jedem Start " "aktualisieren" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Wiedergabe beim Beenden s_toppen" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD erlaubt die Wiedergabe auch dann, wenn kein Client verbunden ist. Falls " "Sie diese Option aktivieren, verhält sich Sonata wie eine normale Audio-" "Anwendung, d.h. die Wiedergabe wird zeitgleich mit Sonata beendet." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Status_datei schreiben:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Falls aktiviert, wird Sonata eine XMMS-Infopipe-ähnliche Datei erstellen, " "welche Informationen über den aktuellen Titel beinhaltet. Viele Anwendungen " "unterstützen dieses Format (Instant Messenger, IRC-Clients, ...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Verschiedenes" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Verhalten" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "A_ktuelle Wiedergabeliste:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Bibliothek:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Fenstertitel:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Aktueller _Titel Zeile 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Aktueller T_itel Zeile 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Verfügbare Platzhalter" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formatierung der Titel" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "Ben_utzername:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Passwort:" #: ../sonata/ui/preferences.glade.h:58 #, fuzzy msgid "Popup _notification on song changes" msgstr "_Benachrichtigung bei Liedwechsel:" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Benachrichtigungsfeld" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Oben links" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Oben rechts" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Unten links" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Unten rechts" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Bildschirmmitte" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "C_rossfade" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "Übergangs_dauer:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extras" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Aktiviert" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Beschreibung" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Plugins" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Cover auswählen" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Suchkriterien ändern" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Album-Cover" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Bild öffnen" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Nach Liedtext suchen" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Interpret:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Titel:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Wiedergabeliste" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Stream-Name:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "Stream-URL:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "_Alle speichern" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Jahr:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Kommentar:" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/el_GR.po������������������������������������������������������������������0000664�0000000�0000000�00000134531�15003420405�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Greek translation of sonata music client for musicpd. # Copyright (C) 2008 Lazaros Koromilas. # This file is distributed under the same license as the sonata package. # Lazaros Koromilas <koromilaz@gmail.com>, 2008. # msgid "" msgstr "" "Project-Id-Version: sonata-1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-04-06 17:35+0200\n" "Last-Translator: Lazaros Koromilas <koromilaz@gmail.com>\n" "Language-Team: noteam\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-Language: Greek\n" "X-Poedit-Country: Greece\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Σχετικά με το Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Προτιμίσεις" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Λειτουργία Πλήρους Οθόνης Εξωφύλλου" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Αλλαγή στην [1η-5η] καρτέλα" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Σύνδεση με το MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Αποσύνδεση από το MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Ανακάτεμα τρέχουσας λίστας κομματιών" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Επέκταση προγράμματος αναπαραγωγής" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Εναλλαγή στην προηγούμενη καρτέλα" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Εναλλαγή στην επόμενη καρτέλα" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Αναδίπλωση προγράμματος αναπαραγωγής" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Αναζήτηση στη βιβλιοθήκη" #: ../sonata/about.py:69 msgid "Quit" msgstr "Κλείσιμο" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Ανανέωση ολόκληρης της βιβλιοθήκης" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Εμφάνιση αναδυώμενων μενού" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Ελαχιστοποίηση στην μπάρα εργασιών (εάν είναι ενεργοποιημένη)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Προηγούμενο κομμάτι" #: ../sonata/about.py:75 msgid "Next track" msgstr "Επόμενο κομμάτι" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Αναπαραγωγή/Παύση" #: ../sonata/about.py:77 msgid "Stop" msgstr "Διακοπή" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Μείωση της έντασης" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Αύξηση της έντασης" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Αναπαραγωγή επιλεγμένου τραγουδιού" # translating to plural only because conditional singular is optically ugly: # `Αφαίρεση επιλεγμέν-ου/-ων κοματι-ού/-ών' #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Αφαίρεση επιλεγμένων κοματιών" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Τοποθέτηση τρέχοντος τραγουδιού στο κέντρο" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Επεξεργασία ετικετών των επιλεγμένων κομματιών" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Αποθήκευση σε νέα λίστα κομματιών" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Καθαρισμός λίστας" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Ανακάτεμα λίστας" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Προσθήκη επιλεγμένων τραγουδιών ή είσοδος στον κοτάλογο" # free interpretation, translated as `up one dir' #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Επάνω κατα έναν κατάλογο" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Προσθήκη επιλεγμένων αντικειμένων" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Αντικατάσταση με τα επιλεγμένα αντικείμενα" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Προσθήκη επιλεγμένων αντικειμένων και αναπαραγωγή" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Αντικατάσταση με τα επιλεγμένα αντικείμενα και αναπαραγωγή" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Ανανέωση επιλεγμένων αντικειμένων/μονοπατιών" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Προσθήκη επιλεγμένων λιστών κομματιών" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Αφαίρεση επιλεγμένων λιστών κομματιών" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Αντικατάσταση με τις επιλεγμένες λίστες κομματιών«" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Προσθήκη επιλεγμένων λιστών κομματιών και αναπαραγωγή" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Προσθήκη επιλεγμένων μεταδόσεων" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Αφαίρεση επιλεγμένων μεταδόσεων" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Αντικατάσταση με τις επιλεγμένες μεταδόσεις" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Προσθήκη επιλεγμένων μεταδόσεων και αναπαραγωγή" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Επεξεργασία ετικετών αναπαραγώμενων τραγουδιών" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Κύριες Συντομεύσεις" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Συντομεύσεις Αναπαραγωγής" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Συντομεύσεις Τρέχουσας Λίστας" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Συντομεύσεις Βιβλιοθήκης" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Συντομεύσεις Λιστών Κομματιών" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Συντομεύσεις Μεταδόσεων" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Συντομεύσεις Πληροφοριών" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "μέρα ευτυχίας" msgstr[1] "μέρες ευτυχίας" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "ώρα ευτυχίας" msgstr[1] "ώρες ευτυχίας" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Χρήση: sonata [ΕΠΙΛΟΓΗ]... [ΕΝΤΟΛΗ]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Εντολές" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Αναπαραγωγή τραγουδιού στην λίστα κομματιών" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Παύση τρέχοντος αναπαραγώμενου τραγουδιού" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Διακοπή τρέχοντος αναπαραγώμενου τραγουδιού" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Αναπαραγωγή του επόμενου τραγουδιού στην λίστα κομματιών" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Αναπαραγωγή του προηγούμενου τραγουδιού στην λίστα κομματιών" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Εναλλαγή αναπαραγωγής/παύσης. Αναπαραγωγή από στάσιμο" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Εναλλαγή λειτουργίας επανάληψης" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Εναλλαγή λειτουργίας επανάληψης" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Εμφάνιση πληροφοριών τρέχοντος τραγουδιού" # status tretated as `state' #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Εμφάνιση κατάστασης του MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Ανάδυση ειδοποίησης τραγουδιού (προϋποθέτει το D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "στην μπάρα εργασών ή ορατή (προϋποθέτει το DBus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "στην μπάρα εργασών ή ορατή (προϋποθέτει το DBus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Μη εκκίνηση της εφαρμογής αν οι D-Bus εντολές αποτυγχάνουν" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Εκκίνηση σε απόκρυψη (προϋποθέτει μπάρα εργασιών)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Εκκίνηση ορατό (προϋποθέτει μπάρα εργασιών)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Εκκίνηση με προφίλ [ΑΡΙΘΜΟΣ]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "" "Οι παράμετροι εναλλαγής και ανάδυσης προϋποθέτουν την ύπαρξη του D-Bus. " "Αποτυχία." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Εκκίνηση του Sonata με το προφίλ %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "Το %d δεν είναι διαθέσιμος αριθμός προφίλ." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Οι αριθμοί προφίλ πρέπει να είναι μεταξύ του 1 και %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Προεπιλεγμένο Προφίλ" #: ../sonata/cli.py:176 msgid "by" msgstr "από" #: ../sonata/cli.py:176 msgid "from" msgstr "στο" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Αδύνατη η σύνδεση στο MPD.\n" "Παρακαλώ ελέγξτε τις ρυθμίσεις του Sonata ή τις μεταβλητές περιβάλλοντος " "MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Τίτλος" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Καλλιτέχνης" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Άλμπουμ" #: ../sonata/cli.py:241 msgid "Date" msgstr "Ημερομηνία" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Κομμάτι" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Είδος" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Αρχείο" # meaning length #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Διάρκεια" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Ρυθμός Δεδομένων" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD στάσιμο" # like `in play' #: ../sonata/cli.py:268 msgid "Playing" msgstr "Σε αναπαραγωγή" # like `in pause' #: ../sonata/cli.py:269 msgid "Paused" msgstr "Σε παύση" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Στάσιμο" #: ../sonata/cli.py:271 msgid "State" msgstr "Κατάσταση" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Επανάληψη" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Ενεργό" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Ανενεργό" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Τυχαία" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Ένταση" # descriptive translation #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Ομαλή μετάβαση κομματιών" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "δευτερόλεπτο" msgstr[1] "δευτερόλεπτα" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Το Sonata απέτυχε να συνδεθεί με τη λεωφόρο του D-BUS: Δεν ήταν δυνατός ο " "προσδιορισμός της διεύθυνσης της λεωφόρου μηνυμάτων (δοκιμάστε 'man dbus-" "launch' και 'man dbus-daemon' για βοήθεια)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Αποτυχία εκτέλεσης απομακρυσμένων εντολής." #: ../sonata/dbus_plugin.py:140 #, fuzzy msgid "Starting Sonata instead..." msgstr "Εκκίνηση του Sonata στη θέση του..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Ίσως ένα στιγμιότυπο του Sonata τρέχει ήδη?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Άγνωστο" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Όνομα καλλιτέχνη" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Όνομα άλμπουμ" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Όνομα κομματιού" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Αριθμός κομματιού" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "Α/Α" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Αριθμός Δίσκου" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Έτος" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Mονοπάτι αρχείου" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Μονοπάτι" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Όνομα αρχείου" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Όνομα μετάδωσης" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Μετάδωση" # translated as `duration' #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Διάρκεια τραγουδιού" # length #: ../sonata/formatting.py:131 msgid "Len" msgstr "Διάρκεια" # descriptive translation #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Χρόνος που έχει αναπαραχθεί (μόνο στον τίτλο)" #: ../sonata/info.py:200 msgid "hide" msgstr "απόκρυψη" #: ../sonata/info.py:203 msgid "more" msgstr "περισσότερα" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Δεν αποδόθηκε όνομα άλμπουμ." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Δεν βρέθηκαν πληροφορίες άλμπουμ." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Δεν βρέθηκαν στίχοι" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Προσκόμιση στίχων..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Δεν βρέθηκαν στίχοι" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Διάφοροι Καλλιτέχνες" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Χωρίς Ετικέτες" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Όνομα αρχείου" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Όλα" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Σύστημα Αρχείων" #: ../sonata/library.py:159 msgid "Albums" msgstr "Άλμπουμ" #: ../sonata/library.py:161 msgid "Artists" msgstr "Καλλιτέχνες" #: ../sonata/library.py:163 msgid "Genres" msgstr "Είδη" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Ολόκληρο τραγούδι" msgstr[1] "Ολόκληρο τραγούδι" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "δευτερόλεπτο" msgstr[1] "δευτερόλεπτα" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "λεπτό" msgstr[1] "λεπτά" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Τραγούδι" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Τρέχουσα Λίστα" #: ../sonata/main.py:94 msgid "Library" msgstr "Βιβλιοθήκη" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Λίστες Κομματιών" #: ../sonata/main.py:96 msgid "Streams" msgstr "Μεταδώσεις" #: ../sonata/main.py:97 msgid "Info" msgstr "Πληροφορίες" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Ολόκληρο τραγούδι" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Ταξινόμηση Λίστας" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Ε_πιλεγμένα Αντικείμενα" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Σύνδεση" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Αναπαραγωγή _μετά" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "Α_νανέωση" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Χρήση _Απομακρυσμένης Εικόνας..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Χρήση _Τοπικής Εικόνας..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "Λειτουργία _Πλήρους Οθόνης" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Επαναφορά Εικόνας" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Αναπαραγωγή" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Παύση" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Διακοπή" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "Προηγούμενο" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Επόμενο" #: ../sonata/main.py:249 msgid "_Quit" msgstr "Έξο_δος" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Αφαίρεση" #: ../sonata/main.py:253 msgid "_Clear" msgstr "Κα_θαρισμός" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Ολόκληρη Βιβλιοθήκης" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "Ε_πιλεγμένα Αντικείμενα" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Επιλογές..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Περί..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Επεξεργασία Ετικετών..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Προσθήκη" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Αντικατάσταση" #: ../sonata/main.py:268 msgid "Add" msgstr "Προσθήκη" #: ../sonata/main.py:270 msgid "Replace" msgstr "Αντικατάσταση" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Διαγραφή..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Ανακάτεμα" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Ανακάτεμα" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Εμφάνιση του Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Αντικατάσταση Λίστας Κομματιών" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Επανάληψη" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Τ_υχαία" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Ανά Καλλιτέχνη" #: ../sonata/main.py:475 msgid "By Album" msgstr "Ανά Δίσκο" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Ανά Τίτλο Τραγουδιού" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Ανά Όνομα Αρχείου" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Ανά Όνομα Καταλόγου & Αρχείου" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Αντιστροφή Λίστας" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Νέο..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Επεξεργασία..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "Αποθήκευση Λίστας Κομματιών" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Μετονομασία..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Κλικ για επέκταση" # using a word similar to unfold #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Κλικ για αναδίπλωση" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Μη Συνδεδεμένο" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Χωρίς Δικαίωμα Ανάγνωσης" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Αποσύνδεση" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(ανανέωση του mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Εικόνες" #: ../sonata/main.py:2197 msgid "All files" msgstr "Όλα τα αρχεία" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Δεν βρέθηκε όνομα καλλιτέχνη ή άλμπουμ." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Δεν βρέθηκε εξώφυλλο." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Διαγραφή της επιλεγμένης λίστας κομματιών;" msgstr[1] "Διαγραφή των επιλεγμένων λιστών κομματιών;" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Διαγραφή λίστας κομματιών" msgstr[1] "Διαγραφή λιστών κομματιών" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Διαγραφή της επιλεγμένης μετάδοσης;" msgstr[1] "Διαγραφή των επιλεγμένων μεταδόσεων;" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Διαγραφή μετάδοσης" msgstr[1] "Διαγραφή μεταδόσεων" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Δεν ήταν δυνατή η εκκίνηση ενός κατάλληλου περιηγητή." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Εκκίνηση Περιηγητή" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Αποθήκευση Λίστας Κομματιών" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Υπάρχουσα Λίστα Κομματιών" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Αντικατάσταση Λίστας Κομματιών" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Προσθήκη κομματιών" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Μετονομασία Λίστας Κομματιών" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Αρχείο" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Μόνο τοπικά" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Χρήση " #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "ΚΑΤΑΛΟΓΟΣ_ΤΡΑΓΟΥΔΙΩΝ" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "παραμετροποίηση" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Πληροφορίες που εμφανίζονται μόνο εάν όλες οι εσωκλειώμενες ετικέτες έχουν " "οριστεί" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Δημιουργεί στήλες στην τρέχουσα λίστα κομματιών" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Για αποθήκευση στίχων στον κατάλογο του μουσικού αρχείου, πρέπει να " "προσδιοριστεί ένας νόμιμος μουσικός κοτάλογος." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Επιβεβαίωση Μουσικού Καταλόγου" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Για αποθήκευση εξωφύλλων στον κατάλογο του μουσικού αρχείου, πρέπει να " "προσδιοριστεί ένας νόμιμος μουσικός κοτάλογος." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Νέο Προφίλ" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Επεξεργασία" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Νέα Μετάδωση" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Μια μετάδωση με αυτό το όνομα υπάρχει ήδη. Θέλετε να την αντικαταστήσετε;" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Το Taglib και/ή το tagpy δεν βρέθηκαν, η υποστήριξη επεξεργασίας ετικετών " "απενεργοποιήθηκε." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Επεξεργασία Ετικετών" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Η έκδοση του Tagpy είναι < 0.91. Παρακαλώ αναβαθμίστε σε νεότερη, η " "υποστήριξη επεξεργασίας ετικετών απενεργοποιήθηκε." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "δεν υπάρχει. Παρακαλώ, προσδιορίστε έναν νόμιμο μουσικό κατάλογο στις " "προτιμήσεις." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" " δεν βρέθηκε. Παρακαλώ, προσδιορίστε έναν νόμιμο μουσικό κατάλογο στις " "προτιμήσεις." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Δεν βρέθηκαν μουσικά αρχεία με επεξεργάσιμες ετικέτες." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Επεξεργασία Ετικετών" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Αδύνατη η αποθήκευση ετικέτας στο μουσικό αρχείο." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Απόκρυψη μονοπατιού αρχείου" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Εμφάνιση μονοπατιού αρχείου" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Ένα κομψό πρόγραμμα/πελάτης μουσικής για το MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Συντομεύσεις" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Συντομεύσεις" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Φίλτρο" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Τίτλος" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Καλλιτέχνης" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Άλμπουμ" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Ημερομηνία" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Κομμάτι" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Είδος" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Αρχείο" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Ρυθμός Δεδομένων" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Άνοιγμα καλλιτέχνη στην Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Άνοιγμα άλμπουμ στην Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Εναλλαγή επιπλέον ετικετών" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Επεξεργασία ετικετών τραγουδιού" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "επεξεργασία ετικετών" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Πληροφορίες Τραγουδιού" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Αναζήτηση στο Lyricwiki.org για στίχους" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "αναζήτηση" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Στίχοι" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Πληροφορίες Άλμπουμ" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Αναζήτηση" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Όροι αναζήτησης" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Τέλος Αναζήτησης" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Όνομα λίστας κομματιών" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Παραμετροποιημένο Εξώφυλλο" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Όνομα αρχείου εξωφύλλου" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_Περί" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Ρυθμίσεις..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "Ό_νομα" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Διακομιστής" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Θύρα" # `required' translated as `needed' #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Κενό εάν ο κωδικός δεν είναι αναγκαίος." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Κω_δικός" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Επιλογή Καταλόγου Μουσικής" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Κατάλογος μουσικής" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Αυτόματη σύνδεση κατα την εκκίνηση" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Σύνδεση με το MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Κουμπιά αναπαραγωγής/έντασης" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Μπάρα _προόδου" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "Μπάρα _κατάστασης" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Εικο_νίδιο μπάρας εργασιών" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Στί_χοι Τραγουδιού" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Αποθήκευση στίχων σε:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "Ε_ξώφυλλο άλμπουμ" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Μορφή εξωφύλλων:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Βασική" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Μορφοποιημένη" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Αναζήτηση τοποθεσιών:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Μόνο τοπικά" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Τοπικά και απομακρυσμένα" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Αποθήκευση εξωφύλλων σε:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Εμφάνιση" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Εμφάνιση παραθύρου σε όλες τις επιφάνειες εργασίας" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "Παραμονή παραθύρου πάνω από τα άλλα παράθυρα" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "Α_πόκρυψη τίτλου παραθύρου" # `escape' translated as `pressing Escape' #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "" "Ε_λαχιστοπίηση στην μπάρα εργασιών κατά το κλείσιμο ή πάτημα του escape" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Εάν είναι ενεργοποιημένο, το κλείσιμο του Sonata θα το ελαχιστοποιεί στην " "μπάρα εργασιών. Σημειώστε ότι αυτή την στιγμή είναι αδύνατο να εντοπιστεί η " "ύπαρξη μπάρας εργασιών, οπότε επιλέξτε το άν έχετε μία." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Εάν είναι ενεργοποιημένο, το κλείσιμο του Sonata θα το ελαχιστοποιεί στην " "μπάρα εργασιών. Σημειώστε ότι αυτή την στιγμή είναι αδύνατο να εντοπιστεί η " "ύπαρξη μπάρας εργασιών, οπότε επιλέξτε το άν έχετε μία." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Συμπεριφορά Παραθύρου" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Ανανέωση της βιβλιοθήκης του MPD κατά την εκκίνηση" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Εάν είναι ενεργοποιημένο, το Sonata θα ανανεώνει την βιβλιοθήκη του MPD όταν " "ξεκινά." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_Διακοπή αναπαραγωγής κατά την έξοδο" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "Το MPD επιτρέπει την αναπαραγωγή ακόμη κι αν το πρόγραμμα-πελάτης δεν είναι " "ανοιχτό. Εάν είναι ενεργοποιημένο, το Sonata θα συμπεριφέρεται σαν ένα " "περισσότερο συμβατικό πρόγραμμα αναπαραγωγής μουσικής και, αντιθέτως, θα " "σταματά την αναπαραγωγή με το που κλείνει." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Εγγραφή αρχείου κατάστασης:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Εάν είναι ενεργό, το Sonata θα δημιουργήσει ένα αρχείο xmms-infopipe το " "οποίο θα περιέχει πληροφορίες σχετικά με το τρέχον κομμάτι. Πολλές εφαρμογές " "υποστηρίζουν το αρχείο xmms-info (Προγράμματα Άμεσης Συνομιλίας, Προγράμματα-" "πελάτες IRC...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Λοιπά" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Συμπεριφορά" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "Τ_ρέχουσα λίστα κομματιών:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Βιβλιοθήκη:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Τίτλος παραθύρου:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Γραμμή _τρέχοντος τραγουδιού 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Γραμμή τ_ρέχοντος τραγουδιού 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Διαθέσιμες επιλογές" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Μορφοποίηση Τραγουδιού" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Μορφοποίηση" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Ανέβασμα επιλογών (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "Όνομα _χρήστη:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "Κω_δικός:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Ανάδυση ειδο_ποίησης σε αλλαγές τραγουδιού" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Μπάρα εργασιών" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Πάνω Αριστερά" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Πάνω Δεξιά" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Κάτω Αριστερά" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Κάτω Δεξιά" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Κέντρο Οθόνης" # descriptive translation #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "Ο_μαλή μετάβαση κομματιών" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Διά_ρκεια μετάβασης" # abbreviation #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "δευτ" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Πρόσθετα" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Περιγραφή" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Επιλογή Εξωφύλλου" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Επεξεργασία όρων αναζήτησης" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Εξώφυλλο" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Άνοιγμα Εικόνας" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Αναζήτηση Στίχων" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Όνομα Καλλιτέχνη" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Τίτλος Τραγουδιού" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Λίστα Κομματιών" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Όνομα μετάδωσης" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL Μετάδωσης" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Αποθήκευση Ό_λων" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Έτος" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Σχόλιο" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/es.po���������������������������������������������������������������������0000664�0000000�0000000�00000115261�15003420405�0016620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spanish translation of Sonata # Copyright (C) 2007 Scott Horowitz # This file is distributed under the same license as the Sonata package. # Scott Horowitz <stonecrest@gmail.com> 2007. # Xoan Sampaiño <xoansampainho@gmail.com> # # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-24 10:01+0100\n" "Last-Translator: Xoan Sampaiño <xoansampainho@gmail.com>\n" "Language-Team: Spanish <es@li.org>\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "A_cerca de Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Preferencias" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Modo pantalla completa con arte de portada" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Recorrer la [1ª-5ª] pestaña" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Conectar al servidor MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Desconectar del servidor MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Desordenar la lista de reproducción actual" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Expandir reproductor" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Cambiar a la pestaña anterior" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Cambiar a la pestaña siguiente" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Colapsar reproductor" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Buscar en la biblioteca" #: ../sonata/about.py:69 msgid "Quit" msgstr "Salir" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Actualizar la biblioteca completa" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Mostrar el menú contextual" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimizar al área de notificación (si está activado)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Canción anterior" #: ../sonata/about.py:75 msgid "Next track" msgstr "Siguiente canción" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Reproducir/Pausar" #: ../sonata/about.py:77 msgid "Stop" msgstr "Detener" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Bajar el volúmen" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Subir el volúmen" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Reproducir la canción seleccionada " #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Borrar las canciones seleccionadas" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centrar la canción en reproducción" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Editar las etiquetas de las canciones seleccionadas" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Guardar en una lista de reproducción nueva" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Vaciar la lista de reproducción" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Desordenar la lista de reproducción" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Añadir la/s canción/es seleccionada/s o entrar al directorio" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Ir al directorio superior" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Añadir el/los elemento/s seleccionado/s" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Reemplazar con el/los elemento/s seleccionado/s" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Añadir el/los elemento/s seleccionado/s y reproducirlo/s" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Reemplazar con el/los elemento/s seleccionado/s y reproducirlo/s" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Actualizar el/los elemento/s seleccionado/s" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Añadir la/s lista/s de reproducción seleccionada/s" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Eliminar la/s lista/s de reproducción seleccionada/s" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Reemplazar con la/s lista/s de reproducción seleccionada/s" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Añadir la/s lista/s de reproducción seleccionada/s y reproducirla/s" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Añadir el/los flujo/s seleccionado/s" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Borrar el/los flujo/s seleccionado/s" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Reemplazar con el/los flujo/s seleccionado/s" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Añadir el/los flujo/s seleccionado/s y reproducirlo/s" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Editar las etiquetas de la canción en reproducción" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Principales" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Reproducción" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Lista de reproducción actual" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Biblioteca" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Listas de reproducción" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Flujos" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Información de la canción" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "día de música" msgstr[1] "días de música" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "hora de música." msgstr[1] "horas de música." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Uso: sonata [OPCIÓN]... [ORDEN]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Órdenes" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Reproduce la canción en la lista de reproducción" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pausa la canción actual en reproducción" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Detiene la canción actual en reproducción" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Reproduce la siguiente canción en la lista de reproducción" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Reproduce la canción anterior en la lista de reproducción" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Activa/Desactiva la reproducción/pausa; reproduce si está detenido" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Activa/Desactiva el modo de repetición" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Activa/Desactiva el modo aleatorio" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Muestra la información de la canción actual" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Muestra el estado del servidor MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Mostrar una notificación con la canción (requiere D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "el área de notificación (requiere D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "el área de notificación (requiere D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "No iniciar la aplicación si fallan las órdenes de D-Bus" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Inicia la aplicación oculta (requiere un área de notificación)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Inicia la aplicación visible (requiere un área de notificación)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Iniciar con el perfil [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Los argumentos «toogle» y «popup» requieren «D-Bus». Abortando." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Iniciar Sonata usando el perfil %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "No hay un perfil disponible con el número %d." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Los números de perfil deben estar comprendidos entre 1 y %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Perfil predeterminado" #: ../sonata/cli.py:176 msgid "by" msgstr "por" #: ../sonata/cli.py:176 msgid "from" msgstr "de" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "No ha sido posible conectar con el servidor MPD.\n" "Por favor, revise las preferencias de Sonata o las variables de entorno " "MPD_HOST y MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Título" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artista" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Álbum" #: ../sonata/cli.py:241 msgid "Date" msgstr "Fecha" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Pista" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Estilo" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fichero" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Tiempo" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Tasa de bits" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD parado" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Reproduciendo" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pausado" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Detenido" #: ../sonata/cli.py:271 msgid "State" msgstr "Estado" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Repetir" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Activado" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Desactivado" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Aleatorio" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volúmen" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Desvanecimiento" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "segundo" msgstr[1] "segundos" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Se ha producido un error al conectar con el transporte de la sesión D-Bus: " "No se ha podido determinar la dirección del mensaje de transporte (intente " "'man dbus-launch' y 'man dbus-daemon' para obtener ayuda)." #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Ha fallado la ejecución de las órdenes remotas." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Iniciar Sonata en vez de..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Es posible que Sonata no se esté ejecutando." #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Desconocido" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Nombre del artista" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Nombre del álbum" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Nombre de pista" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Número de pista" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Número de disco" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Año" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Ruta del fichero" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Ruta" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nombre del fichero" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nombre del flujo" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Flujo" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Duración" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Duración" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Tiempo restante (sólo para el título de la ventana)" #: ../sonata/info.py:200 msgid "hide" msgstr "menos" #: ../sonata/info.py:203 msgid "more" msgstr "más" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "No se ha especificado un nombre del álbum." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "No se ha encontrado información del álbum." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "No se han encontrado letras" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Obteniendo letras..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "No se han encontrado letras" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Varios artistas" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Sin etiquetar" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nombre del fichero" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Todo" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Sistema de ficheros" #: ../sonata/library.py:159 msgid "Albums" msgstr "Álbumes" #: ../sonata/library.py:161 msgid "Artists" msgstr "Artistas" #: ../sonata/library.py:163 msgid "Genres" msgstr "Estilos" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Toda la canción" msgstr[1] "Toda la canción" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "segundo" msgstr[1] "segundos" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuto" msgstr[1] "minutos" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "canción" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Actual" #: ../sonata/main.py:94 msgid "Library" msgstr "Biblioteca" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Listas de reproducción" #: ../sonata/main.py:96 msgid "Streams" msgstr "Flujos" #: ../sonata/main.py:97 msgid "Info" msgstr "Información de la canción" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Toda la canción" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Ordenar lista de reproducción" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Elementos _seleccionados" #: ../sonata/main.py:227 msgid "_Connection" msgstr "Conexión" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Reproducir después" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Actualizar" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Usar imagen _remota..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Usar imagen _local..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Pantalla completa" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Revertir imagen" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Reproducir" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pa_usar" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Detener" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Anterior" #: ../sonata/main.py:247 msgid "_Next" msgstr "Si_guiente" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Salir" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Quitar" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Limpiar" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "Toda la bibliot_eca" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "Elementos _seleccionados" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Preferencias..." #: ../sonata/main.py:261 msgid "_About..." msgstr "A_cerca de..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Editar etiquetas..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Añadir" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Reemplazar" #: ../sonata/main.py:268 msgid "Add" msgstr "Añadir" #: ../sonata/main.py:270 msgid "Replace" msgstr "Reemplazar" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Borrar..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Mezclar" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Mezclar" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Mostrar Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Reemplazar lista de reproducción" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Repetir" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Alea_torio" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Por artista" #: ../sonata/main.py:475 msgid "By Album" msgstr "Por álbum" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Por título" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Por nombre del fichero" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Por directorio y nombre del fichero" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Invertir" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nuevo..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Editar..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "Lista de reproducción _nueva..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Renombrar..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Pulsar para expandir" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Pulsar para colapsar" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "No conectado" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Sin permisos de lectura" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "Servidor y puerto de MPD" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Desconectar" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(actualizando biblioteca)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Imágenes" #: ../sonata/main.py:2197 msgid "All files" msgstr "Todos los ficheros" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "No se han encontrado artista o nombre del álbum." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "No se ha encontrado arte de portada." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "¿Borrar la lista de reproducción seleccionada?" msgstr[1] "¿Borrar las listas de reproducción seleccionadas?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Borrar lista de reproducción" msgstr[1] "Borrar listas de reproducción" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "¿Borrar el flujo seleccionado?" msgstr[1] "¿Borrar los flujos seleccionados?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Borrar flujo" msgstr[1] "Borrar flujos" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "No se ha podido ejecutar ningún navegador." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Abrir navegador" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Guardar lista de reproducción" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Lista de reproducción existente" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Reemplazar lista de reproducción" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Añadir canciones" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Renombrar lista de reproducción" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Fichero" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Sólo local" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Usando el servidor/puerto de MPD" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "personalizado" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Información mostrada sólo si todas las etiquetas encerradas están definidas" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Crear columnas en la lista de reproducción actual" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Para guardar las letras en el directorio de los ficheros de música, debe " "especificar un directorio de música válido." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Verificación del directorio de música" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Para guardar los ficheros de arte de portada en el directorio de los " "ficheros de música, debe especificar un directorio de música válido." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Perfil nuevo" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Editar flujo" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nuevo flujo" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Ya existe un flujo con ese nombre. ¿Desea reemplazarlo?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "No se han encontrado taglib y/o tagpy, se ha desactivado el soporte para la " "edición de etiquetas." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Editar etiquetas" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Versión de Tagpy < 0.91. Por favor, actualice a una versión superior. El " "soporte para la edición de etiquetas ha sido desactivado." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "no existe. Por favor, especifique un directorio de música válido en las " "preferencias." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" " no encontrado. Por favor, especifique un directorio de música válido en las " "preferencias." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "No se han encontrado ficheros con etiquetas editables." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Editar etiquetas" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "No se ha podido escribir la etiqueta en el fichero de música." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Ocultar la ruta al fichero" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Mostrar la ruta al fichero" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Un cliente elegante de música para MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Atajos del teclado" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Atajos del teclado" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filtro" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Título" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Artista" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Álbum" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Fecha" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Pista" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Estilo" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Fichero" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Tasa de bits" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Información sobre el artista en Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Información sobre el álbum en Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Muestra/Oculta información extra" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Editar las etiquetas de la canción" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "editar etiquetas" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Información de la canción" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Buscar letras de la canción en Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "buscar" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Letras" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Información del álbum" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Buscar" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Términos de búsqueda" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Finalizar búsqueda" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Nombre de la lista de reproducción" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Arte de portada personalizado" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Nombre del fichero del arte de portada" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "A_cerca de..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Configurar..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Nombre" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "Ser_vidor" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Puerto" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Deje en blanco si no se requiere contraseña." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Contra_seña" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Seleccione un directorio de música" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Directorio de _música" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "Conectar _automáticamente al iniciar" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Conexión" #: ../sonata/ui/preferences.glade.h:15 #, fuzzy msgid "MPD" msgstr "_MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "Botones de re_producción/volúmen" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Barra de pr_ogreso" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "Barra de e_stado" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Icono del área de no_tificación" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Let_ras de la canción" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Guardar letras en:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Arte de portada" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Estilo del arte de portada" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Normal" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Estilizado" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Lugares de búsqueda:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Sólo local" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Local y remota" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Guardar arte de portada en:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Mostrar" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Mo_strar la ventana en todas las áreas de trabajo" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Mantener la ventana por encima del resto de ventanas" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Ocultar la barra de título de la ventana" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimizar al área de notificación al cerrar la ventana" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Si está activado, Sonata se minimizará al área de notificación al cerrar la " "ventana. Actualmente es imposible detectar si hay o no un área de " "notificación, por lo tanto, compruebe que al menos tiene una." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Si está activado, Sonata se minimizará al área de notificación al cerrar la " "ventana. Actualmente es imposible detectar si hay o no un área de " "notificación, por lo tanto, compruebe que al menos tiene una." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Comportamiento de la ventana" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "Act_ualizar la biblioteca al iniciar" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Si está activado, Sonata actualizará automáticamente su biblioteca cuando se " "inicie." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "De_tener la reproducción al salir" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD permite que continúe la reproducción aunque ningún cliente esté abierto. " "Si está activado, Sonata se comportará como un reproductor de música " "convencional y detendrá la reproducción al salir." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Escribir fichero de estado:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Si está activado, Sonata creará un fichero del tipo xmms-infopipe que " "contendrá información sobre la canción en reproducción. Muchas aplicaciones " "tienen soporte para el fichero xmms-info (cliente de mensajería instantánea, " "clientes de IRC, ...)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Miscelánea" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Comportamiento" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "Lista de reproducción act_ual" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "Bib_lioteca" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "Título de la _ventana:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Primera línea de la _canción actual:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Segunda línea de la c_anción actual:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Opciones disponibles" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formato de la canción" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Formato" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Informe de canción en Last.fm" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "Nombre de _usuario:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Contraseña:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Mostrar una _notificación al cambiar de canción" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "En el área de notificación" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Arriba a la izquierda" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Arriba a la derecha" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Abajo a la izquierda" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Abajo a la derecha" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "En el centro de la pantalla" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "D_esvanecimiento" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Duración del _desvanecimiento" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "segundos" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extras" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Habilitar" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Descripción" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Seleccione arte de portada" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Editar términos de búsqueda" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Arte de _portada" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Abrir imagen" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Búsqueda de letras" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Nombre del artista" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Título de la canción" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Lista de reproducción" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Nombre del flujo" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL del flujo" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Gu_ardar todo" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Año" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Comentario" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/et.po���������������������������������������������������������������������0000664�0000000�0000000�00000110054�15003420405�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Song - lugu # Track - rada # # Estonian translation of Sonata. # Copyright (C) 2008 THE Sonata'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # mihkel <turakas@gmail.com>, 2008. msgid "" msgstr "" "Project-Id-Version: Sonata 1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 12:33+0200\n" "Last-Translator: mihkel <turakas@gmail.com>\n" "Language-Team: Estonian <et@li.org>\n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Sonatast" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Seaded" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Täisekraan kaanepiltidega" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Vaheta kaarte [1-5]" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Ühenda MPD-ga" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Ühenda MPD-st lahti" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Aktiivne esitusloend juhuslikuks" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Laienda mängija akent" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Mine eelmisele kaardile" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Mine järgmisele kaardile" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Ahenda mängija akent" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Otsi muusikakogust" #: ../sonata/about.py:69 msgid "Quit" msgstr "Sulge" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Värskenda muusikakogu" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Kuva hüpikmenüüd" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimeeri salve (kui lubatud)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Eelmine rada" #: ../sonata/about.py:75 msgid "Next track" msgstr "Järgmine rada" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Esita/Paus" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stop" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Helitase madalamaks" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Helitase valjemaks" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Esita valitud lugu" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Eemalda valitud lugu/lood" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Hetkel mängiv lugu alati keskele" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Muuda valitud lugude silte" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Salvesta uude esitusloendisse" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Puhasta nimekiri" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Juhuslik esitusloend" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Lisa valitud lood või sisesta kataloog" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Mine ülemisse kataloogi" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Lisa valitud vood" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Asenda valitud voogudega" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Lisa valitud vood ja esita" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Asenda valitud voogudega ja esita" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Uuenda valitud elementide radu" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Lisa valitud esitusloendid" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Eemalda valitud esitusnimekirjad" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Asenda valitud esitusnimekirjadega" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Lisa valitud esitusloendid ja esita" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Lisa valitud vood" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Eemalda valitud vood" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Asenda valitud voogudega" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Lisa valitud vood ja esita" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Muuda esitatavate lugude silte" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Üldised kiirklahvid" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Taasesituse kiirklahvid" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Aktiivsed kiirklahvid" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Muusikakogu kiirklahvid" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Esitussloendi kiirklahvid" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Voo kiirklahvid" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Kiirklahvide info" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "päev õnnistust" msgstr[1] "päeva õnnistust" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "tund õnnistust" msgstr[1] "tundi õnnistust" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Kasutamine: sonata [VALIK]... [KÄSK]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Käsud" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Esita lugu esitusloendis" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Seiska hetkel mängiv lugu" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Katkest hetkel mängiv lugu" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Esita järgmine lugu esitusloendist" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Esita eelmine lugu esitusloendist" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Lülita esita/paus; esitab kui on peatatud" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Lülita kordusrežiim" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Lülita juhuslik režiim" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Näita esitatava loo infot" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Näita MPD staatust" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Loo info teavitus hüpikuna (vajalik D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "süsteemsesse salve või nähtavale (D-Bus vajalik)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "süsteemsesse salve või nähtavale (D-Bus vajalik)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Ära käivita programmi, kui D-Bus käsud nurjuvad" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Käivita rakendus peidetult (vajalik süsteemne salv)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Käivita rakendus nähtavana (vajalik süsteemne salv)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Käivita, kasutades profiili [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Antud lüliti argument nõuab D-Bus-i. Katkestan." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Käivitan Sonata profiiliga %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d ei ole ühegi profiili number." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profiili number peab jääma vahemikku 1 ja %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Vaikimisi profiil" #: ../sonata/cli.py:176 msgid "by" msgstr "esitaja" #: ../sonata/cli.py:176 msgid "from" msgstr "albumilt" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Ei saa MPD-ga ühendust.\n" "Kontrolli Sonata seadeid või MPD_HOST/MPD_PORT keskonnamuutujaid." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Pealkiri" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Esitaja" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Kuupäev" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Rada" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Stiil" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fail" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Aeg" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitikiirus" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD peatatud" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Esitan" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Paus" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Peatatud" #: ../sonata/cli.py:271 msgid "State" msgstr "Olek" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Korda" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Sees" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Väljas" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Juhuslik" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Helitase" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Siire" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekund" msgstr[1] "sekundit" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonatal ei õnnestunud D-Bus-ga ühendust saada: Ei suudetud määrata sõnumite " "siini aadressi (ehk ütleb 'man dbus-launch' või 'man-daemon' midagi tarka)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Käskude käivitamine ebaõnnestus." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Käivitan Sonata..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Võib-olla Sonata ei ole käivitatud?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Tundmatu" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Esitaja nimi" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Albumi nimi" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Raja nimi" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Raja number" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Plaadid number" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Aasta" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Faili asukoht" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Asukoht" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Faili nimi" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Voo nimi" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Voog" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Loo pikkus" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Aeg" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Järelejäänud aeg (ainult pealkirjas)" #: ../sonata/info.py:200 msgid "hide" msgstr "peida" #: ../sonata/info.py:203 msgid "more" msgstr "veel" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Albumi nimi seadistamata." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Albumi infot ei leitud." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Sõnu ei leitud" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Otsin sõnu..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Sõnu ei leitud" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Erinevad esitajad" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Siltideta" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Faili nimi" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Kõik" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Failisüsteem" #: ../sonata/library.py:159 msgid "Albums" msgstr "Albumid" #: ../sonata/library.py:161 msgid "Artists" msgstr "Esitajad" #: ../sonata/library.py:163 msgid "Genres" msgstr "Stiilid" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Terve lugu" msgstr[1] "Terve lugu" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekund" msgstr[1] "sekundit" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minut" msgstr[1] "minutit" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Lugu" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Aktiivne" #: ../sonata/main.py:94 msgid "Library" msgstr "Muusikakogu" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Esitusloend" #: ../sonata/main.py:96 msgid "Streams" msgstr "Vood" #: ../sonata/main.py:97 msgid "Info" msgstr "Info" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Terve lugu" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Sorteeri nimekirja" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Valitud vood" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Ühendus" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "E_sita hiljem" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Värskenda" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Kasuta _pilti võrgust..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Kasuta _kohalikku pilti..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Täisekraan" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Tühista pilt" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Esita" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pa_us" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stop" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Eelmine" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Järgmine" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Lõpeta" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Eemalda" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Puhasta" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Terve muusikakogu" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Valitud vood" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Eelistused..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Programmist..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Muuda silte..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Lisa" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Asenda" #: ../sonata/main.py:268 msgid "Add" msgstr "Lisa" #: ../sonata/main.py:270 msgid "Replace" msgstr "Asenda" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Kustuta..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Sega" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Sega" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Näita Sonatat" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Asenda esitusloend" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Korda" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Juhuslik" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Esitaja järgi" #: ../sonata/main.py:475 msgid "By Album" msgstr "Albumi järgi" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Loo nime järgi" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Faili nime järgi" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Kausta ja faili nime järgi" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Tagurpidi nimekiri" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Uus..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Muuda..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "Salvesta esitusloend" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Nimeta ümber..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klõpsa, et laiendada" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klõpsa, et sulgeda" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Ei ole ühendatud" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Lugemisõigus puudub" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Ühenda lahti" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(värskendan mpd-d)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Pildid" #: ../sonata/main.py:2197 msgid "All files" msgstr "Kõik failid" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Esitajat ega albumi nime ei leitud." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Kaanepilti ei leitud." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Kustuta valitud esitusnimekiri?" msgstr[1] "Kustuta valitud esitusnimekirjad?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Kustuta esitusnimekiri" msgstr[1] "Kustuta esitusnimekirjad" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Kustuta valitud voog?" msgstr[1] "Kustuta valitud vood?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Kustuta voog" msgstr[1] "Kustuta vood" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Sobiva sirvija käivitamine nurjus." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Käivita sirvija" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Salvesta esitusloend" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Olemasolev esitusloend" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Asenda esitusloend" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Lisa lood" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Nimeta esitusloend ümber" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Fail" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Ainult kohalikud" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Kasutan MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "LOO_KAUST" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "kohandatud" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Infot näidatakse ainult siis, kui kõik sildid on määratud" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Loob veerge aktiivsesse esitusloendisse" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Salvestamaks sõnad oma muusika kataloogi, pead määrama kehtiva " "muusikakataloogi" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Muusika kataloogi kontrollimine" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Salvestamaks kaanepilte muusika kataloogi, pead määrama kehtiva " "muusikakataloogi" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Uus profiil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Muuda voogu" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Uus voog" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Sellenimeline voog on juba olemas. Kas soovid seda asendada?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Ei leitud taglib-i ja/või tagpy-d, siltide muutmine välja lülitatud." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Muuda silte" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy versioon < 0.91. Palun paigalda värskem versioon, siltide muutmine " "välja lülitatud." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "pole olemas. Palun määra eelistuste alt õige muusika kataloog." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " ei leitud. Palun määra eelistuste alt õige muusika kataloog." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Ei leitud ühtegi muudetavate siltidega muusika faili." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Muuda silte" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Siltide salvestamine faili nurjus." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Peida faili rada" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Näita faili rada" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Elegantne klient MPD-le." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Kiirklahvid" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Kiirklahvid" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Pealkiri" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Esitaja" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Kuupäev" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Rada" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Stiil" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Fail" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitikiirus" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Esitaja info Wikipediast" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Albumi info Wikipediast" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Lülita ekstra sildid" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Muuda loo silte" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "muuda silte" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Loo info" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Otsi sõnu Lyricwiki.org-st" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "otsi" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Sõnad" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Albumi info" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Otsi" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Otsingu termineid" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Lõpeta otsing" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Esitusloendi nimi" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Kohandatud kaanepilt" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Kaanepildi faili nimi" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_Programmist" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Seadista..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Nimi" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Server" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Jäta tühjaks, kui salasõna pole vajalik." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Sala_sõna" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Vali muusika kataloog" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Muusika kataloog" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "Käivit_amisel ühenda automaatselt" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD ühendus" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Esita/helitaseme nupud" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Edenemisriba" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Olekuriba" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Süsteemse salve _ikoon" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Loo s_õnad" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Salvesta sõnad:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Albumi nimi" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Kaanepildi stiil:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stiliseeritud" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Otsimise asukohad:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Ainult kohalikud" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Kohalik ja võrgust" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Salvesta pildid:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Kuva" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Näita akent kõikidel tööaladel" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Hoia aken teiste kohal" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Peaida akna tiitliriba" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimeeri salve sulgemisel või Esc vajutamisel" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Kui lubatud, Sonata minimeerib end süsteemsesse salve. Kahjuks hetkel on " "võimatu tuvastada, kas süsteemne salv on ka olemas, niiet luba ainult siis," "kui tead, et su töölaual on salv." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Kui lubatud, Sonata minimeerib end süsteemsesse salve. Kahjuks hetkel on " "võimatu tuvastada, kas süsteemne salv on ka olemas, niiet luba ainult siis," "kui tead, et su töölaual on salv." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Akna käitumine" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Värskenda MPD teek käivitamisel" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "Kui lubatud, siis Sonata uuendab käivitamisel automaatselt MPD teeke." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Väljumisel lõpe_ta mängimine" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD võimaldab taasesitamist ka siis, kui klient tööta. Kui lubatud, siis " "Sonata käitub rohkem nagu tavaline muusikamängija ja muusika mängimine " "peatatakse rakendusest väljumisel." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Kirjuta olekufail:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Kui lubatud, Sonata loob xmms-infopipe-i sarnase faili, mis sisaldab infot " "hetke loo kohta. Paljud rakendused toetavad xmms-info faili (Kiirsuhtlus, " "IRC kliendid...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Mitmesugust" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Käitumine" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "A_ktiivses esitusloendis:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Muusikakogu:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Akna pealkiri:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Aktiivse _loo rida 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Aktiivse l_oo rida 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Võimalikud valikud" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Loo vormindamine" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Vorming" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "Kas_utajanimi:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Salasõna:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "_Teavita, kui lugu muutub" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Süsteemne salv" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Üleval vasakul" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Üleval paremal" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "All vasakul" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "All paremal" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Ekraani keskel" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "S_iire" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "S_iirde pikkus" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Lisad" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Kasuta siiret" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Kirjeldus" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Vali kaanepilt" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Muuda otsingu termineid" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Kaanepilt" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Ava pilt" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Sõnade otsing" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Esitaja nimi" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Loo pealkiri" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Esitusloend" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Voo nimi" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "Voo URL" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Salvesta _kõik" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Aasta" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Kommentaar" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/fi.po���������������������������������������������������������������������0000664�0000000�0000000�00000112005�15003420405�0016600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Finnish translation of sonata. # Copyright (C) 2007-2009 Ilkka Tuohela. # This file is distributed under the same license as the sonata package. # Ilkka Tuohela <hile@iki.fi>, 2007-2009. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 08:35+0300\n" "Last-Translator: Ilkka Tuohela <hile@iki.fi>\n" "Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Tietoja _sonatasta" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Asetukset" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Kansikuvien näyttö kokoruututilassa" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Siirry [1.-5.] välilehteen" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Yhdistä MPD-palvelimeen" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "_Katkaise MPD-yhteys" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Sekoita nykyinen soittolista" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Laajenna soitin" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Siirry edelliseen välilehteen" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Siirry seuraavaan välilehteen" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Pienennä soitin" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Etsi kirjastosta" #: ../sonata/about.py:69 msgid "Quit" msgstr "Lopeta" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Päivitä koko kirjasto" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Näytä ponnahdusikkuna" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Pienennä ilmoitusalueelle (jos käytössä)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Edellinen kappale" #: ../sonata/about.py:75 msgid "Next track" msgstr "Seuraava kappale" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Soita/Keskeytä" #: ../sonata/about.py:77 msgid "Stop" msgstr "Pysäytä" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Hiljennä äänenvoimakkuutta" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Kasvata äänenvoimakkuutta" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Soita valittu kappale" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Poista valitut kappaleet" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Keskitä soiva kappale" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Muokkaa soivan kappaleen merkintöjä" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Tallenna uuteen soittolistaan" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Tyhjennä lista" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Sekoita soittlista" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Lisää valitut kappaleet tai koko kansio" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Siirry yläkansioon" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Lisää valitut kohdat" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Korvaa valituilla kohdilla" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Lisää valitut kohdat ja soita" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Korvaa valituilla kohdilla ja soita" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Päivitä valitut kohdat tai polut" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Lisää valitut soittolistat" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Poista valitut soittolistat" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Korvaa valituilla soittolistoilla" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Lisää valitut soittolistat ja soita" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Lisää valitut virrat" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Poista valitut virrat" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Korvaa valituilla virroilla" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Lisää valitut virrat ja soita" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Muokkaa soivan kappaleen merkintöjä" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Yleiset pikanäppäimet" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Soiton pikanäppäimet" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Nykyisen listan pikanäppäimet" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Kirjaston pikanäppäimet" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Soittolistojen pikanäppäimet" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Virtojen pikanäppäimet" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Merkintöjen pikanäppäimet" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "päivä poppista" msgstr[1] "päivää poppista" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "tunti poppista" msgstr[1] "tuntia poppista" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Käyttö: sonata [VALITSIN]... [KOMENTO]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Komennot" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Soita kappale soittolistalta" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pysäytä soiva kappale" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Keskeytä soiva kappale" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Soita seuraava kappale soittolistalta" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Soita edellinen kappale soittolistalta" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Vaihda toistoa/pysäytystä; toista, jos pysäytetty" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Vaihda kertaustilaa" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Vaihda satunnaistilaa" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Näytä tietoja tämänhetkisestä kappaleesta" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Näytä MPD:n tila" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Ponnahdusikkuna kappaleen vaihtuessa (vaatii DBus:in)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "Ilmoitusalueelle tai näkyviin (vaatii dbusin)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "Ilmoitusalueelle tai näkyviin (vaatii dbusin)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Älä käynnistä ohjelmaa, jos D-Bus -komennot epäonnistuvat" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Käynnistä piilotettuna (vaatii ilmoitusalueen)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Käynnistä näkyvissä (vaatii ilmoitusalueen)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Käynnistä profiili [NUMERO]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Toggle- ja ponnahdusikkuna-valitsimet vaativat D-Bus:in, keskeytetään." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Käynnistetään sonata profiililla %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d ei ole saatavilla oleva profiilinumero." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profiilinumeron täytyy olla väliltä 1 ja %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Oletusprofiili" #: ../sonata/cli.py:176 msgid "by" msgstr "esittäjältä" #: ../sonata/cli.py:176 msgid "from" msgstr "levyltä" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "MPD-palvelimeen ei saatu yhteyttä.\n" "Tarkista sonatan asetuksesi tai MPD_HOST/MPD_PORT -ympäristömuutujat.." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Kappale" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Esittäjä" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Levy" #: ../sonata/cli.py:241 msgid "Date" msgstr "Päiväys" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Kappale" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Tyyli" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Tiedosto" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Kesto" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bittinopeus" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD pysäytetty" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Soittaa" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Keskeytetty" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Pysäytetty" #: ../sonata/cli.py:271 msgid "State" msgstr "Tila" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Kertaus" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Pois" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Päällä" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Satunnaistoisto" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Äänenvoimakkuus" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Ristiinhäivytys" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekunti" msgstr[1] "sekuntia" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata ei saanut yhteyttä D-Bus -istuntoväylään: viestiväylän osoitetta ei " "voitu selvittää. Lue lisää komennoilla 'man dbus-launch' ja 'man dbus-" "daemon'." #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Etäkomentoja ei voitu suorittaa." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Käynnistetään sonata ..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Ehkä sonata ei ole käynnissä?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Tuntematon" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Esittäjän nimi" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Levyn nimi" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Kappalenumero" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Kappalenumero" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Levyn numero" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Vuosi" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Tiedoston polku" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Polku" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Tiedostonimi" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Virran nimi" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Virta" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Kappaleen pituus" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Pituus" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Kulunut aika (vain otsikko)" #: ../sonata/info.py:200 msgid "hide" msgstr "piilota" #: ../sonata/info.py:203 msgid "more" msgstr "lisää" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Levyn nimeä ei ole asetettu." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Levyn tietoja ei löytynyt." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Sanoituksia ei löytynyt" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Haetaan sanoituksia..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Sanoituksia ei löytynyt" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Useita esittäjiä" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Merkitsemätön" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Tiedostonimi" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Kaikki" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Tiedostojärjestelmä" #: ../sonata/library.py:159 msgid "Albums" msgstr "Levyt" #: ../sonata/library.py:161 msgid "Artists" msgstr "Esittäjät" #: ../sonata/library.py:163 msgid "Genres" msgstr "Tyylit" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Koko kappale" msgstr[1] "Koko kappale" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekunti" msgstr[1] "sekuntia" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuutti" msgstr[1] "minuuttia" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Kappale" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Soiva lista" #: ../sonata/main.py:94 msgid "Library" msgstr "Kirjasto" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Soittolistat" #: ../sonata/main.py:96 msgid "Streams" msgstr "Musiikkivirrat" #: ../sonata/main.py:97 msgid "Info" msgstr "Tietoja" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Koko kappale" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Järjestä lista" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Valitut kohdat" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Yhteys" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Soita s_euraavaksi" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Päivitä" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Käytä kuvaa _verkosta..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Käytä kuvaa _levyltä..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Kokoruututila" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Nollaa kuva" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Soita" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Keskeytä" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Pysäytä" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Edellinen" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Seuraava" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Lopeta" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Poista" #: ../sonata/main.py:253 msgid "_Clear" msgstr "Ty_hjennä" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Koko kirjasto" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Valitut kohdat" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Asetukset..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Tietoja..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Muokkaa merkintöjä" #: ../sonata/main.py:264 msgid "_Add" msgstr "_Lisää" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Korvaa" #: ../sonata/main.py:268 msgid "Add" msgstr "Lisää" #: ../sonata/main.py:270 msgid "Replace" msgstr "Korvaa" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Poista..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Sekoitustila" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Sekoitustila" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "Näytä _sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Korvaa soittolista" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Kertaus" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Sa_tunnaistoisto" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Esittäjän mukaan" #: ../sonata/main.py:475 msgid "By Album" msgstr "Levyn mukaan" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Kappaleen nimen mukaan" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Tiedostonimen mukaan" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Kansion ja tiedoston mukaan" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Käännä listan suunta" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Uusi..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Muokkaa..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Uusi soittolista..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Nimeä uudestaan..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Laajenna napsauttamalla" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Pienennä napsauttamalla" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Ei yhteyttä" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Ei lukuoikeutta" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Katkaise yhteys" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(päivitetään mpd-tietokantaa)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Kuvat" #: ../sonata/main.py:2197 msgid "All files" msgstr "Kaikki tiedostot" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Esittäjää tai levyn nimeä ei löydy." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Kansikuvaa ei löydy." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Poistetaanko valittu soittolista?" msgstr[1] "Poistetaanko valitut soittolistat?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Poista soittolista" msgstr[1] "Poista soittolistat" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Poistetaanko valittu virta?" msgstr[1] "Poistetaanko valitut virrat?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Poista virta" msgstr[1] "Poista virrat" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Selainta ei voitu käynnistää." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Käynnistä selain" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Tallenna soittolista" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Nykyinen soittolista" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Korvaa soittolista" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Lisää kappaleet" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Nimeä soittolista uudestaan" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Tiedosto" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Vain paikalliset kuvat" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Käytetään MPD_HOST/PORT-muuttujia" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "KAPPELEEN_KANSIO" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "oma" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Tiedot näytetään vain, jos kaikki merkinnät on määritelty" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Luo sarakkeita nykyiseen soittolistaan" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Jotta voit tallentaa sanoituksia musiikkikansioon, sinun täytyy antaa " "kelvollinen musiikkikansio." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Musiikkikansion vahvistus" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Jotta voit tallentaa kansikuvia musiikkikansioon, sinun täytyy antaa " "kelvollinen musiikkikansio." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Uusi profiili" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "muokkaa virtaa" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Uusi virta" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Tämänniminen virta on jo olemassa. Haluatko korvata sen?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib tai tagpy-kirjastoja ei löydy, merkintöjen muokkaus ei ole käytössä." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Muokkaa merkintöjä" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy-versio on < 0.91. Päivitä uudempaan versioon, merkintöjen muokkaus ei " "ole nyt käytössä." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "ei ole olemassa. Anna asetuksista olemassaoleva musiikkikansio." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "ei löytynyt. Anna olemassaoleva musiikkikansio asetuksissa." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Muokattavia merkintöjä sisältäviä musiikkitiedostoja ei löytynyt." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Muokkaa merkintöjä" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Merkintää ei voitu tallentaa musiikkitiedostoon." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Piilota tiedoston polku" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Näytä tiedoston polku" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Näppärä asiakaohjelma MPD:lle." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Pikanäppäimet" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Pikanäppäimet" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Suodatin" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Kappale" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Esittäjä" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Levy" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Päiväys" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Kappale" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Tyyli" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Tiedosto" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bittinopeus" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Näytä esittäjä wikipediassa" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Näytä levy wikipediassa" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Näytetäänkö lisämerkinnät" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Muokkaa kappaleen merkintöjä" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "muokkaa merkintöjä" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Tietoja kappaleesta" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Etsi sanoituksia Lyricwiki.org-sivustolta" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "etsi" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Sanoitukset" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Tietoja levystä" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Etsi" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Hakuehdot" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Lopeta haku" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Soittolistan nimi" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Omat kansikuvat" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Kansikuvan tiedostonimi" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "Tietoja" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Asetukset..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Nimi" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Palvelin" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Portti" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Jätä tyhjäksi, jos sanaa ei vaadita." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "_Salasana" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Valitse musiikkikansio" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Musiikkikansio" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Yhdistä käynnistettäessä" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD-yhteys" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Toisto- ja äänenvoimakkusnapit" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Edistymispalkki" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Tilarivi" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Ilmoi_tusalueen kuvake" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Sanoitukset" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Tallenna sanoitukset kansioon:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "K_ansikuva" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Kansikuvan tyyli:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Tavallinen" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Tyylitelty" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Etsinnän kohteet:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Vain paikalliset kuvat" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Paikalliset ja verkko" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Tallenna kansikuvat kohteeseen:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Ulkoasu" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Näytä ikkuna kaikilla työpöydillä" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "Pi_dä ikkuna aina päällimmäisenä" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "P_iilota ikkunan otsikko" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Pienennä ilmoitusalueelle suljettaessa" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Jos käytössä, sonatan sulkeminen pienentää ohjelman ilmoitusalueelle. " "Huomaa, että tällä ohjelma ei voi tietää, onko ilmoitusaluetta olemassa, " "joten valitse tämä vain jos sinulla on ilmoitusalue." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Jos käytössä, sonatan sulkeminen pienentää ohjelman ilmoitusalueelle. " "Huomaa, että tällä ohjelma ei voi tietää, onko ilmoitusaluetta olemassa, " "joten valitse tämä vain jos sinulla on ilmoitusalue." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Ikkunan toiminta" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "Päi_vitä MPD-kirjasto käynnistettäessä" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Jos käytössä, MPD-kirjaston päivitys aloitetaan automaattisesti sonatan " "käynnistyessä." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_Pysäytä toisto suljettaessa" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD voi soittaa musiikkia, vaikka asiakasta ei ole auki. Jos tämä on " "käytössä, sonata toimii kuten perinteinen musiikkisoitin ja lopettaa " "musiikin soiton sulkeutuessaan." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Kirjoita tilatiedosto:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Jos käytössä, Sonata luo xmms-infopipe -tyylisen tiedoston, joka sisältää " "tietoja soivasta kappaleesta. Monet ohjelmat, esimerkiksi pikaviestimet ja " "IRC-asiakkaat, osaavat lukea xmms-info -tiedostoa." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Lisäasetukset" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Toiminta" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Nykyinen soittolista:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Kirjasto:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Ikkunan otsikko:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Soiva _kappale, rivi 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Soiva k_appale, rivi 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Mahdolliset valitsimet" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Kappaletietojen muotoilu" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Muotoilu" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbler (last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Käyttäjätunnus:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Salasana:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Po_nnahdusikkuna kappaleen vaihtuessa" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Ilmoitusalue" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Ylhäällä vasemmalla" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Ylhäällä oikealla" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Alhaalla vasemmalla" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Alhaalla oikealla" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Näytön keskellä" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "_Ristiinhäivytys" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Häivytyksen kesto" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Lisäosat" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Käytä ristiinhäivytystä" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Kuvaus" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Valitse kansikuva" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Muokkaa hakuehtoja" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Kansikuva" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Avaa kuva" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Sanoitusten haku" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Esittäjän nimi" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Kappaleen nimi" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Soittolista" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Virran nimi" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "Virran URL" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Tallenna K_aikki" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Vuosi" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Kommentti" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/fr.po���������������������������������������������������������������������0000664�0000000�0000000�00000115123�15003420405�0016615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# French translations for sonata package. # Copyright (C) 2007 THE sonata'S COPYRIGHT HOLDER # This file is distributed under the same license as the sonata package. # # Floréal M <somewhere@webend.net>, 2006-2007. # Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>, 2007. # Mike Massonnet <mmassonnet@gmail.com>, 2007-2009. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2013-01-09 18:24+0730\n" "Last-Translator: Jonathan Ballet <jon@multani.info>\n" "Language-Team: Transifex (https://www.transifex.com/projects/p/sonata/" "language/fr/)\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "À propos de Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Préférences" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Mode pochette plein écran" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Passer aux onglets [1-5]" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Connecter à MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Déconnecter de MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Mélanger la liste courante" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Étendre le client" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Passer à l'onglet précédent" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Passer à l'onglet suivant" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Réduire le client" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Rechercher dans la bibliothèque" #: ../sonata/about.py:69 msgid "Quit" msgstr "Quitter" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Mettre à jour la bibliothèque entière" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Afficher un menu contextuel" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Réduire dans la zone de notification (si activé)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Morceau précédent" #: ../sonata/about.py:75 msgid "Next track" msgstr "Nouveau morceau" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Lecture/Pause" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stop" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Baisser le volume" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Augmenter le volume" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Jouer le morceau sélectionné" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Supprimer le(s) morceau(x) sélectionné(s) ?" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centrer sur la chanson courante" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Éditer l'étiquette du (des) morceau(x) sélectionné(s)" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Sauvegarder dans une nouvelle liste de lecture" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Nettoyer la liste de lecture" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Mélanger la liste" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Ajouter le(s) morceau(x) sélectionné(s) ou indiquer un répertoire" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Aller au répertoire parent" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Ajouter le(s) élément(s) sélectionné(s)" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Remplacer par le(s) élément(s) sélectionné(s)" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Ajouter le(s) élément(s) sélectionné(s) et lire" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Remplacer par le(s) élément(s) sélectionné(s) et lire" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Mettre à jour le(s) élément(s) sélectionné(s)" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Supprimer la (les) liste(s) de lecture sélectionnée(s)" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Supprimer la (les) liste(s) de lecture sélectionnée(s)" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Remplacer par la (les) liste(s) de lecture sélectionnée(s)" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Ajouter la (les) liste(s) de lecture sélectionnée(s) et lire" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Ajouter le(s) flux sélectionné(s)" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Supprimer le(s) flux sélectionné(s)" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Remplacer par le(s) flux sélectionné(s)" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Ajouter le(s) flux sélectionné(s) et lire" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Éditer les étiquettes du morceau courant" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Raccourcis principaux" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Raccourcis pour la lecture" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Raccourcis courants" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Raccourcis pour la bibliothèque" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Raccourcis pour les listes de lecture" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Raccourcis pour les flux" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Raccourcis pour les informations" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} chanson." msgstr[1] "{count} chansons." #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} album." msgstr[1] "{count} albums." #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} artiste." msgstr[1] "{count} artistes." #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} jour de bonheur." msgstr[1] "{count} jours de bonheur" #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} heure de bonheur." msgstr[1] "{count} heures de bonheur." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [OPTION]... [COMMANDE]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "Commandes:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "Lire la chanson de la liste" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "Mettre en pause la chanson courante" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "Stopper la chanson courante" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "Lire la chanson suivante" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "Lire la chanson précédente" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "Alterner lecture/pause ; mettre lecture si stoppé" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "Alterner le mode répétition" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "Alterner le mode aléatoire" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "Afficher les informations sur la chanson courante" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "Afficher le statut de MPD" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "Popup de notification (nécessite D-BUS)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" "Minimise dans la zone de notification ou rend visible l'application " "(nécessite D-BUS)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "Passer en plein écran (nécessite D-BUS)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "Ne pas exécuter l'application si les commandes D-Bus échouent" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "" "Démarrer en mode invisible (nécessite la gestion de la zone de notification)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "" "Démarrer en mode visible (nécessite la gestion de la zone de notification)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "Démarrer avec le profil [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "Démarrer l'application avec un shell interactif" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "Augmenter la verbosité des logs" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "Diminuer la verbosité des logs" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "Command %s inconnue" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "Les paramètres « toggle » et « popup » nécessitent D-Bus. Abandon." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Démarrage de Sonata avec le profil %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d n'est pas un numéro de profil disponible." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Le numéro de profil doit être entre 1 et %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Profil par défaut" #: ../sonata/cli.py:176 msgid "by" msgstr "par" #: ../sonata/cli.py:176 msgid "from" msgstr "de" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Impossible de se connecter à MPD.\n" "Vérifiez vos paramètres dans les préférences de Sonata ou les variables " "d'environnement MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titre" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artiste" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Date" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Piste" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fichier" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Temps" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Débit" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD est stoppé" #: ../sonata/cli.py:268 msgid "Playing" msgstr "En cours de lecture" #: ../sonata/cli.py:269 msgid "Paused" msgstr "En pause" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Stoppé" #: ../sonata/cli.py:271 msgid "State" msgstr "État" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "Répéter :" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "On" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Off" #: ../sonata/cli.py:275 msgid "Random:" msgstr "Aléatoire :" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volume" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Fondu enchaîné" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "seconde" msgstr[1] "secondes" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata n'a pas pu se connecter à la session D-BUS : Impossible de déterminer " "l'adresse du bus (essayez « man dbus-launch » et « man dbus-daemon » pour " "obtenir de l'aide sur son fonctionnement)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Échec de l'exécution des commandes à distance." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Démarrage de Sonata à la place..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Peut-être Sonata n'est pas en cours d'exécution ?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Inconnu" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Artiste" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Album" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Titre de chanson" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Numéro de piste" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Numéro du disque" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Année" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Chemin du fichier" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Chemin" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nom du fichier" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nom du flux" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Flux" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Longueur de la chanson" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Durée" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Temps écoulé (titre seulement)" #: ../sonata/info.py:200 msgid "hide" msgstr "cacher" #: ../sonata/info.py:203 msgid "more" msgstr "plus" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Nom de l'album non spécifié." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Informations sur l'album non trouvées." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Paroles non trouvées" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Récupération des paroles..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "Paroles non trouvées." #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "Aucun greffon de parole activé" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Artistes divers" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Aucune étiquette" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nom du fichier" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Tout" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Système de fichiers" #: ../sonata/library.py:159 msgid "Albums" msgstr "Albums" #: ../sonata/library.py:161 msgid "Artists" msgstr "Artistes" #: ../sonata/library.py:163 msgid "Genres" msgstr "Genres" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} chanson" msgstr[1] "{count} chansons" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} seconde" msgstr[1] "{count} secondes" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} minute" msgstr[1] "{count} minutes" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} heure." msgstr[1] "{count} heures." #: ../sonata/library.py:1069 msgid "Song" msgstr "Chanson" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "En cours" #: ../sonata/main.py:94 msgid "Library" msgstr "Bibliothèque" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Listes de lecture" #: ../sonata/main.py:96 msgid "Streams" msgstr "Flux" #: ../sonata/main.py:97 msgid "Info" msgstr "Infos" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Chanson entière" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "par %A dans %B" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "Trier la li_ste" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "_Sauvegarder les élément(s) sélectionné(s) vers" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Connexion" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "L_ire après" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "_Mode de lecture" #: ../sonata/main.py:230 msgid "_Update" msgstr "Mettre à jo_ur" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Utilise_r une image distante..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Utiliser une image _locale..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "Mode _plein écran" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Réinitialiser l'image" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Lecture" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pa_use" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stop" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Précédent" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Suivant" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Quitter" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Retirer" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Vider" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "Bibliothèque _entière" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "Élément(s) _sélectionné(s)" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Préférences..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_À propos..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Éditer les étiquettes..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Ajouter" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Remplacer" #: ../sonata/main.py:268 msgid "Add" msgstr "Ajouter" #: ../sonata/main.py:270 msgid "Replace" msgstr "Remplacer" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Supprimer..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Aléatoire" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Aléatoire" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Montrer Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Remplacer la liste de lecture" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Répéter :" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Aléatoire" #: ../sonata/main.py:323 msgid "Consume" msgstr "Consommer" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Par artiste" #: ../sonata/main.py:475 msgid "By Album" msgstr "Par album" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Par titre de chanson" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Par nom de fichier" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Par chemin et nom de fichier" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Renverser la liste" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nouveau..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Éditer..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Nouvelle liste de lecture..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Renommer..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "Activation du nouveau greffon %s..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "Nouveau greffon %s trouvé." #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Cliquer pour étendre" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Cliquer pour réduire" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Non connecté" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Aucune permission en lecture" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Déconnecter" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} jour." msgstr[1] "{count} jours." #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(mise à jour de mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Images" #: ../sonata/main.py:2197 msgid "All files" msgstr "Tous les fichiers" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Pas d'artiste ou de nom d'album trouvé." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Aucune pochette n'a été trouvée." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Supprimer la liste de lecture sélectionnée ?" msgstr[1] "Supprimer les listes de lecture sélectionnées ?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Supprimer la liste de lecture" msgstr[1] "Supprimer les listes de lecture" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Supprimer le flux sélectionné ?" msgstr[1] "Supprimer les flux sélectionnés ?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Supprimer le flux" msgstr[1] "Supprimer les flux" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Impossible de lancer un navigateur compatible." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Lancer le navigateur" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Sauvegarder la liste" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Liste de lecture existante" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Remplacer la liste de lecture" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Ajouter les chansons" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Renommer la liste de lecture" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "Processus" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "Fichiers" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "Réseau" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "MPD locale" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "Éditer /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "Redémarrer le service MPD" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Utilisation de MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "personnalisé" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Informations affichées uniquement si toutes les étiquettes sont présentes." #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Crée des colonnes dans la liste courante" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Pour sauver les paroles, vous devez indiquer un répertoire de musique valide " "dans les préférences." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Vérification du répertoire de musique" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Pour sauver les pochettes, vous devez indiquer un chemin de musique valide " "dans les préférences." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nouveau Profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Éditer le flux" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nouveau flux" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Un flux homonyme existe déjà. Voulez-vous le remplacer ?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib et/ou taggy non trouvé, l'édition des étiquettes ne sera pas possible." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Éditer les Étiquettes" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy < 0.91. Veuillez mettre à jour vers une version plus récente, support " "des tags désactivés." #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "Le chemin %s n'existe pas. Merci d'indiquer un chemin de musique valable " "dans les préférences." #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "Le fichier %s n'existe pas. Merci d'indiquer un chemin de musique valable " "dans les préférences." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Aucun fichier audio avec des étiquettes éditables n'a été trouvé." #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "Éditer les étiquettes - %s de %s" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Impossible de sauvegarder l'étiquette dans le fichier audio." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Masquer le chemin du fichier" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Afficher le chemin du fichier" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata, un client GTK+ élégant pour Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Un client élégant pour MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Raccourcis" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Raccourcis" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Filtre :" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Titre :" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Artiste :" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Album :" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "Date :" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "Piste :" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Genre :" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "Fichier :" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "Débit :" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Voir l'artiste sur Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Voir l'album sur Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Permuter les étiquettes supplémentaires" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Éditer les étiquettes" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(éditer les étiquettes)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informations sur la chanson" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Rechercher les paroles sur Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(rechercher)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Paroles" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informations sur l'album" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Rechercher :" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Termes de recherche" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Fin de recherche" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Nom de la liste de lecture :" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Pochette Personnalisée" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Fichier de la pochette :" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_À propos" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Configurer..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Nom :" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Hôte :" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Port :" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Laisser vide si le mot de passe n'est pas nécessaire." #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_Mot de passe :" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Sélectionnez le répertoire de musique" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Répertoire de musique :" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Connexion automatique au démarrage" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Connexion à MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Afficher les boutons de lecture/volume" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Activer la _barre de progression" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "Afficher la barre de _statut" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Zone de notification" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Paroles" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Sauver les paroles vers :" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Pochette" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Style de la pochette :" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Boîtier" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Chemins de recherche :" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "En local seulement" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Local et à distance" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Sauver la pochette vers :" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Affichage" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Montrer la fenêtre sur tous les _espaces de travail" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "Toujours _au-dessus des autres fenêtres" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Masquer la décoration de la fenêtre" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Réduire dans la zone de notification à la fermeture" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Si activé, à la fermeture, Sonata se minimisera dans la zone de " "notification. NB : il est impossible de détecter la présence d'une zone de " "notification. Vérifiez que vous en avez une." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Si activé, à la fermeture, Sonata se minimisera dans la zone de " "notification. NB : il est impossible de détecter la présence d'une zone de " "notification. Vérifiez que vous en avez une." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Comportement de la fenêtre" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "Mettre à jour la _bibliothèque de MPD au démarrage" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Si activé, Sonata mettra à jour automatiquement votre bibliothèque MPD lors " "de son démarrage." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Arrêter la lecture en _quittant" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD permet d'écouter de la musique même quand le client n'est pas lancé. Si " "cette option est activée, Sonata se comportera comme un lecteur traditionnel " "et stoppera la lecture à sa fermeture." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Écrire dans le _fichier d'état :" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Si activé, Sonata générera un fichier semblable à « xmms-infopipe », " "contenant des informations à propos de la chanson en cours. De nombreuses " "applications gère ce fichier (messageries instantanées, clients IRC, etc.)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Divers" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Comportement" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Liste courante :" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Bibliothèque :" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Titre de la fenêtre :" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "_Chanson courante (ligne 1) :" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "_Chanson courante (ligne 2) :" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>Options disponibles :</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Format de la chanson" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Identifiant :" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Mot de passe :" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Popup de _notification au changement de chanson" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Zone de notification" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Haut gauche" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Haut droit" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Bas gauche" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Bas droite" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Centre de l'écran" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "_Fondu enchaîné" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_Durée du fondu enchaîné :" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sec." #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extras" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Activé" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Description" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Greffons" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Choisir une pochette" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Éditer les termes de la recherche" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Pochette" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Ouvrir image" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Recherche de paroles" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Artiste :" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Titre de la chanson :" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Liste de lecture" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Nom du flux :" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "Adresse du flux :" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Tout sauver" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Année :" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Commentaire :" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/hi.po���������������������������������������������������������������������0000664�0000000�0000000�00000141724�15003420405�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: # Jonathan Ballet <jon@multani.info>, 2021 # Dmitry <dmitrydmitry761@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2021-08-09 08:38+0000\n" "Last-Translator: Dmitry <dmitrydmitry761@gmail.com>, 2021\n" "Language-Team: Hindi (https://www.transifex.com/multani/teams/15398/hi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "सोनाटा के बारे में" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "पसंद" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "फ़ुलस्क्रीन आर्टवर्क मोड" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "[१-५वें] टैब पर स्विच करें" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "एमपीडी से कनेक्ट करें" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "एमपीडी से डिस्कनेक्ट करें" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "वर्तमान प्लेलिस्ट को रैंडमाइज करें" #: ../sonata/about.py:64 msgid "Expand player" msgstr "खिलाड़ी का विस्तार करें" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "पिछले टैब पर स्विच करें" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "अगले टैब पर स्विच करें" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "खिलाड़ी संक्षिप्त करें" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "खोज पुस्तकालय" #: ../sonata/about.py:69 msgid "Quit" msgstr "छोड़ना" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "संपूर्ण पुस्तकालय अपडेट करें" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "पॉपअप मेनू प्रदर्शित करें" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "सिस्टम ट्रे को छोटा करें (यदि सक्षम हो)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "पिछला ट्रैक" #: ../sonata/about.py:75 msgid "Next track" msgstr "अगला गाना" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "खेल/ठहराव" #: ../sonata/about.py:77 msgid "Stop" msgstr "रुकें" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "वॉल्यूम घटाएं" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "वॉल्यूम बढ़ाएं" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "चयनित गीत चलाएं" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "एक या अधिक चयनित गाने हटाएं" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "बीच में बज रहा गाना" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "संपादित करें चयनित गीत के टैग" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "नई प्लेलिस्ट में सेव करें" #: ../sonata/about.py:86 msgid "Clear list" msgstr "स्पष्ट सूची" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "यादृच्छिक सूची" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "एक या अधिक चयनित गीत जोड़ें या निर्देशिका दर्ज करें" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "मूल निर्देशिका पर जाएं तो" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "एक या अधिक चयनित आइटम जोड़ें" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "एक या अधिक चयनित वस्तुओं से बदलें" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "एक या अधिक चयनित आइटम जोड़ें और खेलें" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "चयनित आइटम(रों) और खेलने के साथ बदलें" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "अद्यतन चयनित आइटम(ओं)/पथ(रों)" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "एक या अधिक चयनित प्लेलिस्ट जोड़ें" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "एक या अधिक चयनित प्लेलिस्ट हटाएं" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "एक या अधिक चयनित प्लेलिस्ट के साथ बदलें" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "एक या अधिक चयनित प्लेलिस्ट जोड़ें और खेलें" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "एक या अधिक चयनित स्ट्रीम जोड़ें" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "एक या अधिक चयनित स्ट्रीम निकालें" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "एक या अधिक चयनित स्ट्रीम से बदलें" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "एक या अधिक चयनित स्ट्रीम जोड़ें और चलाएं" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "गाने के टैग चलाना संपादित करें" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "बुनियादी शॉर्टकट" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "प्लेबैक शॉर्टकट" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "वर्तमान शॉर्टकट" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "पुस्तकालय शॉर्टकट" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "प्लेलिस्ट शॉर्टकट" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "स्ट्रीम शॉर्टकट" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "जानकारी शॉर्टकट" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} गीत।" msgstr[1] "{count} गाना।" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} अल्बम्स।" msgstr[1] "{count} एल्बम।" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} कलाकार की।" msgstr[1] "{count} निष्पादक।" #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} आनंद के दिन।" msgstr[1] "{count} आनंद का दिन।" #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} आनंद के घंटे।" msgstr[1] "{count} आनंद की घड़ी।" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [विकल्प]... [कमांड]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "आदेश:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "प्लेलिस्ट में गाना बजाएं" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "वर्तमान में चल रहे गीत को थामने" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "गाना बजाना बंद करो" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "प्लेलिस्ट में अगला गाना बजाएं" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "प्लेलिस्ट में पिछला गाना चलाएं" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "टॉगल प्ले/पॉज़; खेलता है तो रुक जाता है" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "टॉगल रिपीट मोड" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "यादृच्छिक मोड टॉगल करें" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "वर्तमान गीत जानकारी प्रदर्शित करें" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "एमपीडी स्थिति प्रदर्शित करें" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "पॉपअप गीत अधिसूचना (डी-बस की आवश्यकता है)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" "टॉगल करता है कि ऐप को ट्रे में छोटा किया गया है या दृश्यमान है (डी-बस की " "आवश्यकता है)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "पूर्ण स्क्रीन पर जाएं (डी-बस की आवश्यकता है)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "डी-बस कमांड विफल होने पर ऐप शुरू न करें" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "प्रारंभ ऐप छिपा हुआ (सिस्ट्रे की आवश्यकता है)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "ऐप दृश्यमान प्रारंभ करें (सिस्ट्रे की आवश्यकता है)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "प्रोफाइल नंबर से शुरू करें" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "एक इंटरैक्टिव (ipython) शेल के साथ ऐप शुरू करें" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "लॉग वर्बोसिटी बढ़ाएँ" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "घटाएँ लॉग शब्दाडंबर" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "अज्ञात आदेश %s" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "टॉगल और पॉपअप विकल्पों के लिए डी-बस की आवश्यकता होती है। गर्भपात।" #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "प्रोफ़ाइल के साथ सोनाटा शुरू करना %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d उपलब्ध प्रोफाइल नंबर नहीं है।" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "प्रोफ़ाइल नंबर 1 और अंत के साथ शुरू करना चाहिए %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "डिफॉल्ट प्रोफ़ाइल" #: ../sonata/cli.py:176 msgid "by" msgstr "द्वारा" #: ../sonata/cli.py:176 msgid "from" msgstr "से" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "एमपीडी से कनेक्ट करने में असमर्थ।\n" "कृपया अपनी सोनाटा प्राथमिकताएं या MPD_HOST/MPD_PORT पर्यावरण चर जांचें।" #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "शीर्षक" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "निष्पादक" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "एल्बम" #: ../sonata/cli.py:241 msgid "Date" msgstr "तारीख" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "ट्रैक" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "शैली" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "फ़ाइल" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "समय" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "बिटरेट" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "एमपीडी रोक" #: ../sonata/cli.py:268 msgid "Playing" msgstr "खेल रहे हैं" #: ../sonata/cli.py:269 msgid "Paused" msgstr "रोके गए" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "रोका हुआ" #: ../sonata/cli.py:271 msgid "State" msgstr "राज्य" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "दोहराना:" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "पर" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "बंद" #: ../sonata/cli.py:275 msgid "Random:" msgstr "यादृच्छिक:" #: ../sonata/cli.py:277 msgid "Volume" msgstr "आयतन" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "क्रॉसफ़ेड" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "सेकंड" msgstr[1] "दूसरा" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "सोनाटा डी-बस सत्र बस से कनेक्ट करने में विफल रहा: संदेश बस का पता निर्धारित " "करने में असमर्थ (मदद के लिए 'man dbus-launch' और 'man dbus-daemon' " "आज़माएं)\")" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "दूरस्थ आदेश निष्पादित करने में विफल।" #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "इसके बजाय, सोनाटा प्रक्षेपण..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "शायद सोनाटा काम नहीं कर रही है?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "अज्ञात" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "कलाकार का नाम" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "एल्बम का नाम" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "ट्रैक का नाम" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "ट्रैक संख्या" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "डिस्क संख्या" #: ../sonata/formatting.py:124 msgid "Year" msgstr "साल" #: ../sonata/formatting.py:126 msgid "File path" msgstr "फ़ाइल पथ" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "पथ" #: ../sonata/formatting.py:128 msgid "File name" msgstr "फ़ाइल का नाम" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "स्ट्रीम का नाम" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "धारा" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "गाने की लंबाई" #: ../sonata/formatting.py:131 msgid "Len" msgstr "लंबाई" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "बीता हुआ समय (केवल शीर्षक)" #: ../sonata/info.py:200 msgid "hide" msgstr "छिपाना" #: ../sonata/info.py:203 msgid "more" msgstr "अधिक" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "एल्बम का नाम सेट नहीं है।" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "एल्बम की जानकारी नहीं मिली।" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "गीत नहीं मिला" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "पाठ प्राप्त करना..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "गीत नहीं मिला।" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "कोई गीत प्लग-इन सक्षम नहीं है।" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "विभिन्न कलाकारों" #: ../sonata/library.py:79 msgid "Untagged" msgstr "टैग नहीं किए गए" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "फ़ाइल नाम" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "हर चीज़" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "फाइल सिस्टम" #: ../sonata/library.py:159 msgid "Albums" msgstr "एलबम" #: ../sonata/library.py:161 msgid "Artists" msgstr "कलाकारों" #: ../sonata/library.py:163 msgid "Genres" msgstr "शैलियां" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} गीत" msgstr[1] "{count} गाना" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} सेकंड" msgstr[1] "{count} दूसरा" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} मिनट" msgstr[1] "{count} मिनट" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} घंटे" msgstr[1] "{count} घंटा" #: ../sonata/library.py:1069 msgid "Song" msgstr "गाना" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "वर्तमान" #: ../sonata/main.py:94 msgid "Library" msgstr "पुस्तकालय" #: ../sonata/main.py:95 msgid "Playlists" msgstr "प्लेलिस्ट" #: ../sonata/main.py:96 msgid "Streams" msgstr "धाराओं" #: ../sonata/main.py:97 msgid "Info" msgstr "जानकारी" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "पूरा गाना" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "से %A इससे पहले %B" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_क्रमबद्ध सूची" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "चयन को इसमें सहेजें" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_यौगिक" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "बाद में खेलें" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "प्ले_मोड" #: ../sonata/main.py:230 msgid "_Update" msgstr "_अपडेट करें" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "_रिमोट इमेज का इस्तेमाल करें..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "_स्थानीय छवि का प्रयोग करें..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_पूर्ण स्क्रीन मोड" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "छवि रीसेट करें" #: ../sonata/main.py:239 msgid "_Play" msgstr "_खेल" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_ठहराव" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_रोका हुआ" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_वापस" #: ../sonata/main.py:247 msgid "_Next" msgstr "_अगला" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_छोड़ना" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_हटाएं" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_साफ़" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_संपूर्ण पुस्तकालय" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_चयनित उत्पाद" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_पसंद..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_लगभग..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_जोड़ संपादित करें ..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_जोड़ें" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_बदलने के" #: ../sonata/main.py:268 msgid "Add" msgstr "जोड़ें" #: ../sonata/main.py:270 msgid "Replace" msgstr "परिवर्तन" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_हटाना..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "यादृच्छिक क्रम में" #: ../sonata/main.py:275 msgid "Shuffle Albums" msgstr "साधा एल्बम" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_प्रदर्शन Sonata" #: ../sonata/main.py:317 msgid "_Repeat playlist" msgstr "_दोहराएँ प्लेलिस्ट" #: ../sonata/main.py:319 msgid "Repeat s_ong" msgstr "_दोहराएँ गीत" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_बेतरतीब" #: ../sonata/main.py:323 msgid "Consume" msgstr "खेलने के बाद हटाएं" #: ../sonata/main.py:473 msgid "By Artist" msgstr "द्वारा गायक" #: ../sonata/main.py:475 msgid "By Album" msgstr "एल्बम द्वारा" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "गीत के शीर्षक से" #: ../sonata/main.py:479 msgid "By File Name" msgstr "फ़ाइल नाम से" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "निर्देशिका और फ़ाइल नाम से" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "रिवर्स लिस्ट" #: ../sonata/main.py:524 msgid "_New..." msgstr "_नया..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_संपादित करें..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_नई प्लेलिस्ट..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_नाम बदलें..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "नया प्लग-इन सक्षम करना %s..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "नया प्लग-इन मिला %s." #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "विस्तार करने के लिए क्लिक करें" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "संक्षिप्त करने के लिए क्लिक करें" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "जुड़े नहीं हैं" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "पढ़ने की अनुमति नहीं" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "एमपीडी_होस्ट/पोर्ट" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "डिस्कनेक्ट" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} डेज" msgstr[1] "{count} दिन" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(एमपीडी अपडेट कर रहा है)" #: ../sonata/main.py:2192 msgid "Images" msgstr "इमेजिस" #: ../sonata/main.py:2197 msgid "All files" msgstr "सभी फाइलें" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "कोई कलाकार या एल्बम नाम नहीं मिला।" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "कोई आवरण कला नहीं मिली।" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "चयनित प्लेलिस्ट हटाएं?" msgstr[1] "चयनित प्लेलिस्ट हटाएं?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "प्लेलिस्ट हटाएं" msgstr[1] "प्लेलिस्ट हटाएं" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "चयनित स्ट्रीम हटाएं?" msgstr[1] "चयनित स्ट्रीम हटाएं?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "धाराएं हटाएं" msgstr[1] "स्ट्रीम हटाएं" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "उपयुक्त ब्राउज़र लॉन्च करने में असमर्थ।" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "ब्राउज़र लॉन्च करें" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "प्लेलिस्ट सेव करें" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "मौजूदा प्लेलिस्ट" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "प्लेलिस्ट बदलें" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "गाने जोड़ें" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "प्लेलिस्ट का नाम बदलें" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "प्रक्रियाओं" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "फ़ाइलें" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "नेटवर्किंग" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "स्थानीय एमपीडी" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "संपादित करें /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "एमपीडी सेवा को पुनरारंभ करें" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT का उपयोग करना" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "गानों की सूची" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "अनुकूलित करें" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "सभी संलग्न टैग परिभाषित होने पर ही जानकारी प्रदर्शित होती है" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "वर्तमान प्लेलिस्ट में कॉलम बनाता है" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "" "गीत को संगीत फ़ाइल की निर्देशिका में सहेजने के लिए, आपको एक मान्य संगीत " "निर्देशिका निर्दिष्ट करनी होगी।" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "संगीत कैटलॉग की जाँच करना" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "आर्टवर्क को संगीत फ़ाइल की निर्देशिका में सहेजने के लिए, आपको एक मान्य संगीत" " निर्देशिका निर्दिष्ट करनी होगी।" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "नई प्रोफ़ाइल" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "स्ट्रीम संपादित करें" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "नई धारा" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "इस नाम की एक धारा पहले से मौजूद है। क्या आप इसे बदलना चाहेंगे?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib और/या tagpy नहीं मिला, टैग संपादन समर्थन अक्षम है।" #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "जोड़ संपादित करें" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "" "Tagpy संस्करण <0.91। कृपया एक नए संस्करण में अपग्रेड करें, टैग संपादन समर्थन" " अक्षम है।" #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "पथ %s मौजूद नहीं है। कृपया प्राथमिकताओं में एक मान्य संगीत निर्देशिका " "निर्दिष्ट करें।" #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "फ़ाइल '%s' नहीं मिली। कृपया प्राथमिकताओं में एक मान्य संगीत निर्देशिका " "निर्दिष्ट करें।" #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "संपादन योग्य टैग वाली कोई संगीत फ़ाइल नहीं मिली।" #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "जोड़ संपादित करें - %s का %s" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "संगीत फ़ाइल में टैग सहेजने में असमर्थ." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "फ़ाइल पथ छुपाएं" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "फ़ाइल पथ दिखाएं" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata, म्यूजिक प्लेयर डेमॉन के लिए एक सुंदर GTK+ क्लाइंट\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "एमपीडी के लिए एक सुंदर संगीत ग्राहक।" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_शॉर्टकट" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "शॉर्टकट" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "फ़िल्टर:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "शीर्षक:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "निष्पादक:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "एल्बम:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "दिनांक:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "ट्रैक संख्या:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "शैली:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "फ़ाइल:" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "बिटरेट:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "विकिपीडिया पर कलाकार लॉन्च करें" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "विकिपीडिया में एल्बम लॉन्च करें" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "अतिरिक्त टैग टॉगल करें" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "गीत टैग संपादित करें" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(जोड़ संपादित करें)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "गाने की जानकारी" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "गीत के लिए Lyricwiki.org खोजें" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(तलाशी)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "गाने के बोल" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "एल्बम की जानकारी" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "तलाशी:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "खोज शब्द" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "खोज समाप्त करें" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "प्लेलिस्ट का नाम:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "कस्टम कलाकृति" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "कलाकृति फ़ाइल नाम:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_कार्यक्रम के बारे में" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_कॉन्फ़िगर करें..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_नाम:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_मेज़बान:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_बंदरगाह:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "यदि पासवर्ड की आवश्यकता नहीं है तो खाली छोड़ दें।" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_कुंजिका:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "एक संगीत निर्देशिका चुनें" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_संगीत निर्देशिका:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_शुरू में स्वत: कनेक्ट" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "एमपीडी कनेक्शन" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "एमपीडी" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_प्लेबैक/वॉल्यूम बटन" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_प्रोगेस बार" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_स्टेटस बार" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "सिस्टम _ट्रे आइकन" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_गाने के बोल" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "गीत को इसमें सहेजें:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_एलबम कला" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "कलाकृति शैली:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "मानक" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "शैली" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "स्थान खोज:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "केवल स्थानीय" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "स्थानीय और दूरस्थ" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "कला को इसमें सहेजें:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "प्रदर्शन" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_सभी कार्यस्थानों पर विंडो दिखाएं" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_विंडो को अन्य विंडो के ऊपर रखें" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_विंडो टाइटल बार छुपाएं" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_पास/एस्केप पर सिस्टम ट्रे को छोटा करें" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "" "यदि सक्षम किया गया है, तो सोनाटा को बंद करने से यह सिस्टम ट्रे में छोटा हो " "जाएगा। ध्यान दें कि यह'वर्तमान में यह पता लगाना असंभव है कि क्या वास्तव" " में कोई सिस्टम ट्रे है, इसलिए इसे केवल तभी जांचें जब आपके पास एक हो।" #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "यदि सक्षम किया गया है, तो सोनाटा को बंद करने से यह सिस्टम ट्रे में छोटा हो " "जाएगा। ध्यान दें कि वर्तमान में यह पता लगाना असंभव है कि क्या वास्तव में कोई" " सिस्टम ट्रे है, इसलिए इसे केवल तभी जांचें जब आपके पास एक हो।" #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "विंडो व्यवहार" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_अपडेट एमपीडी लाइब्रेरी शुरू होने पर" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "" "यदि सक्षम किया गया है, तो सोनाटा आपके एमपीडी पुस्तकालय के शुरू होने पर " "स्वचालित रूप से अपडेट कर देगा।" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_बाहर निकलने पर प्लेबैक रोकें" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "एमपीडी प्लेबैक की अनुमति तब भी देता है जब क्लाइंट खुला न हो। सक्षम होने पर, " "सोनाटा अधिक पारंपरिक संगीत प्लेयर की तरह व्यवहार करेगी और इसके बजाय, बाहर " "निकलने पर प्लेबैक बंद कर देगी।" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_फाइल करने के लिए राज्य लिखें:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "यदि सक्षम किया जाता है, तो सोनाटा एक xmms-infopipe जैसी फ़ाइल बनाएगी जिसमें " "वर्तमान गीत के बारे में जानकारी होगी। कई एप्लिकेशन xmms-info फ़ाइल (त्वरित " "संदेशवाहक, IRC क्लाइंट...) का समर्थन करते हैं" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "विविध" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "व्यवहार" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_वर्तमान प्लेलिस्ट:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_पुस्तकालय:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_विंडो शीर्षक:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "वर्तमान _गीत पंक्ति 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "वर्तमान _गीत पंक्ति 2:" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>उपलब्ध विकल्प:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "गीत स्वरूपण" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "प्रारूप" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_ऑडियोस्क्रॉबलिंग (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_उपयोगकर्ता नाम:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_पासवर्ड:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "_गाने में बदलाव पर पॉप अप नोटिफिकेशन" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "सिस्टम ट्रे" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "बाएं से बाएं" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "ठीक तरह से ऊपर" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "तली छोड़ें" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "नीचे दाएं" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "स्क्रीन सेंटर" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "क्रॉसफ़ेडिंग" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_लंबा क्षय:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "सेकंड" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "अतिरिक्त" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "उपलब्ध" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "विवरण" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "प्लग-इन" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "कवर आर्ट चुनें" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "खोज की स्थिति बदलें" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "कवर आर्ट" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "खुली छवि" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "गीत खोज" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "कलाकार का नाम:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "गीत शीर्षक:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "प्लेलिस्ट" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "स्ट्रीम का नाम:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "स्ट्रीम URL:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "_सब कुछ बचाओ" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "वर्ष:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "टिप्पणी:" ��������������������������������������������multani-sonata-bf88fdc/po/it.po���������������������������������������������������������������������0000664�0000000�0000000�00000114444�15003420405�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is distributed under the same license as the Sonata package. # Gianni Vialetto <forgottencrow@gmail.com>, 2007. # # Translator Notes (in Italian): # # Track & Song: non è necessario distinguere questi due termini, in quanto # utilizzando mpd non c'è distinzione tra tracce audio e file mp3. # Vengono tradotti entrambi come "brano". # # Music dir: è stato lasciato come "Music dir", principalmente per motivi di # spazio. Potrebbe essere modificato in future release. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.333\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-06-16 00:41+0100\n" "Last-Translator: Alin Hantig <hantigalin@gmail.com>\n" "Language-Team: Sonata-IT <nomail@nomail.it>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Basepath: sonta\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SearchPath-0: .\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Informazioni su Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Preferenze" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Modalità Copertina a Schermo Intero" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Spostati al [1^ - 5^] tab" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Connetti a MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Disconnetti da MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Randomizza la Playlist corrente" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Passa alla modalità normale/estesa" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Spostati nel precedente tab" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Spostati nel prossimo tab" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Passa alla modalità compatta" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Cerca nella libreria" #: ../sonata/about.py:69 msgid "Quit" msgstr "Esci" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Aggiorna tutta la libreria" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Mostra menu popup" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimizza nell'area di notifica (se è abilitata l'opzione)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Brano precedente" #: ../sonata/about.py:75 msgid "Next track" msgstr "Brano successivo" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Riproduci/Pausa" #: ../sonata/about.py:77 msgid "Stop" msgstr "Ferma" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Abbassa il volume" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Alza il volume" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Riproduci il brano selezionato" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Rimuovi il brano od i brani selezionati" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centra la playlist sul brano in riproduzione" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Modifica i tag selezionati" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Salva in una nuova playlist" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Cancella la playlist" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Randomizza Playlist" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Aggiungi il/i brani selezionati od inserisci il nome di una cartella" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Vai alla cartella di livello superiore" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Aggiungi il/gli oggetto(i) selezionato(i)" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Sostituisci con il/gli oggetto(i) selezionati" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Aggiungi il/gli oggetto(i) selezionato(i) e riproduci" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Sostituisci con il/gli oggetto(i) selezionato(i) e riproduci" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Aggiorna il/gli oggetto(i)/percorso(i) selezionato(i)" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Aggiungi la playlist o le playlist selezionate" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Rimuovi la playlist o le playlist selezionate" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Sostituisci con la playlist o le playlist selezionate" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Aggiungi la/le playlist selezionata(e) e riproduci" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Aggiungi lo stream o gli stream selezionati" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Rimuovi lo stream o gli stream selezionati" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Sostituisci con lo stream o gli stream selezionati" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Aggiungi lo/gli stream selezionato(i) e riproduci" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Modifica i tag del brano in esecuzione" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Tasti scorciatoia Principali" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Tasti scorciatoia per la gestione della riproduzione dei brani" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Tasti scorciatoia Comuni" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Tasti scorciatoia per la gestione della Libreria" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Tasti scorciatoia per la gestione delle Playlist" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Tasti scorciatoia per la gestione degli Stream" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Tasti scorciatoia Informazioni" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "giorno di gioia" msgstr[1] "giorni di gioia" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "ora di gioia" msgstr[1] "ore di gioia" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Uso: sonata [OPZIONE] .. [COMANDO]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Commandi" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Riproduce il primo brano nella playlist" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Mette in pausa la riproduzione del brano corrente" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Termina la riproduzione del brano corrente" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Inizia la riproduzione del brano successivo nella playlist" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Inizia la riproduzione del brano precedente nella playlist" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Metti in riproduzione/pausa; riproduce se fermato" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Attiva/Disattiva riproduzione continua" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Attiva/Disattiva riproduzione casuale" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Mostra informazioni sul brano attualmente in riproduzione" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Mostra lo status di MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Popup di notifica del brano (richiede D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "a visibile e viceversa (richiede D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "a visibile e viceversa (richiede D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Non fai partire l'applicazione se il commado D-Bus falisce" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "" "Avvia l'applicazione ridotta nell'area di notifica\n" "\t\t\t (richiede la presenza di un'area di notifica)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "" "Avvia l'applicazione in primo piano\n" "\t\t\t (richiede la presenza di un'area di notifica)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Avvia con profilo [NUMERO]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "L'argomento toggle e popup richiedono D-Bus. Annullo l'operazione." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Avvia Sonata con il profilo %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d non è un numero profilo disponibile." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Il numero del profilo deve essere tra 1 e %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Profilo predefinito" #: ../sonata/cli.py:176 msgid "by" msgstr "di" #: ../sonata/cli.py:176 msgid "from" msgstr "da" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Impossibile connettersi ad MPD.\n" "Controlla le impostazioni di Sonata o le variabili MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titolo" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artista" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Data" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Traccia" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genere" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "File" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Tempo" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitrate" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD non avviato" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Riproducendo" #: ../sonata/cli.py:269 msgid "Paused" msgstr "In Pausa" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "In Pausa" #: ../sonata/cli.py:271 msgid "State" msgstr "Stato" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Riproduzione Continua" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "On" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Off" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Ordine Casuale" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volume" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Crossfade" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "secondo" msgstr[1] "secondi" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata non ha potuto connettersi a D-BUS: è impossibile determinare " "l'indirizzo del message bus (per informazioni digita 'man dbus-launch' e " "'man dbus-daemon')" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Esecuzione comandi remoti fallita." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Avvio Sonata... " #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Forse Sonata non è in esecuzione?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Sconosciuto" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Artista" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Album" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Titolo della Traccia" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Numero della Traccia" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Numero del disco" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Anno" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Percorso del file" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Percorso" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nome del file" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nome dello Stream" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Stream" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Lunghezza del brano" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Lunghezza" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Tempo trascorso (solo titolo della finestra)" #: ../sonata/info.py:200 msgid "hide" msgstr "nascondi" #: ../sonata/info.py:203 msgid "more" msgstr "più" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Nome dell'album sconosciuto" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Informazioni sull'album non trovate." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Il testo del brano non è stato trovato" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Ricerca e download del testo del brano in corso..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Il testo del brano non è stato trovato" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Artisti Vari" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Senza Tag" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "File" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Tutti" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Filesystem" #: ../sonata/library.py:159 msgid "Albums" msgstr "Album" #: ../sonata/library.py:161 msgid "Artists" msgstr "Artisti" #: ../sonata/library.py:163 msgid "Genres" msgstr "Generi" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Tutta il brano" msgstr[1] "Tutta il brano" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "secondo" msgstr[1] "secondi" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuto" msgstr[1] "minuti" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Brano" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Corrente" #: ../sonata/main.py:94 msgid "Library" msgstr "Libreria" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Playlist" #: ../sonata/main.py:96 msgid "Streams" msgstr "Stream" #: ../sonata/main.py:97 msgid "Info" msgstr "Informazioni" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Tutta il brano" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "Ordina Li_sta" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Oggetti selezionati" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Connessione" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "R_iproduci dopo" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Aggiorna" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Utilizza Immagine _Remota" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Utilizza Immagine _Locale" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Modalità Schermo Intero" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Reset Immagine" #: ../sonata/main.py:239 msgid "_Play" msgstr "Ri_produci" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Pa_usa" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Ferma" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "Pre_cedente" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Successivo" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Esci" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Rimuovi" #: ../sonata/main.py:253 msgid "_Clear" msgstr "Pulis_ci" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Tutta la Libreria" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Oggetti selezionati" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Preferenze" #: ../sonata/main.py:261 msgid "_About..." msgstr "Inform_azioni su..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "Modifica _Tags..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Aggiungi" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Sostituisci" #: ../sonata/main.py:268 msgid "Add" msgstr "Aggiungi" #: ../sonata/main.py:270 msgid "Replace" msgstr "Sostituisci" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Cancella" #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Riproduzione Casuale" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Riproduzione Casuale" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "M_ostra Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Sostituisci Playlist" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Riproduzione Continua" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "O_rdine Casuale" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Per Artista" #: ../sonata/main.py:475 msgid "By Album" msgstr "Per Album" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Per Titolo dei brani" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Per Nome del File" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Per Cartella e Nome del File" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Inverti Ordine della Lista" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nuovo" #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Modifica..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "_Salva Playlist..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Rinomina..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Fai click per passare in modalità estesa" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Fai click per passare in modalità compatta" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Non Connesso" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Nessun permesso di lettura" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Disconnetti" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(aggiornando la libreria...)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Immagini" #: ../sonata/main.py:2197 msgid "All files" msgstr "Tutti i file" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Nessun risultato tra i nomi degli artisti o degli album." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Copertina non trovata." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Cancellare la playlist selezionata?" msgstr[1] "Cancellare le playlist selezionate?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Cancella la Playlist" msgstr[1] "Cancella le Playlist" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Cancellare lo Stream?" msgstr[1] "Cancellare gli Stream?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Cancella Stream" msgstr[1] "Cancella Stream" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Impossibile lanciare un browser compatibile." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Avvia browser" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Salva Playlist" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Playlist esistente" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Sostituisci Playlist" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Aggiungi brani" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Rinomina Playlist" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "File" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Solo in locale" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Uso MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "personalizzato" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Le informazioni sono mostrate solo se i tag ID3 sono definiti nel file." #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Crea colonne nella playlist corrente" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Per salvare il testo dei brani nella cartella dei file, devi specificare una " "music dir valida." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Verifica Music Dir" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Per salvare le copertine nella cartella del file, devi specificare una music " "dir valida." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nuovo Profilo" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Modifica Stream" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nuovo Stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Esiste già uno Stream con questo nome. Desideri sostituirlo con questo?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Librerie taglib e/o tagpy non trovate, il supporto alla modifica dei tag id3 " "è stato disabilitato." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Modifica Tags" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Librerie tagpy <0.91. Prego aggiornare ad una versione più recente; la " "modifica dei tag è stato disabilitato." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "non esiste. Specifica una music dir valida nelle preferenze." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "non esiste. Specifica una music dir valida nelle preferenze." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Nessun brano con tag editabili trovato." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Modifica Tags" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Impossibile salvare i tag nel file." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Nascondi il percorso del file" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Mostra il percorso del file" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Un elegante client per MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Shortcuts" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Shortcuts" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filtro" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Titolo" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Artista" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Data" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Traccia" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Genere" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "File" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitrate" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Mostra l'artista in Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Mostra l'album in Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Mostra tag extra" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Modifica i tag del brano" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "Modifica Tags" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informazioni sul brano" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Cerca testo brani su Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "cerca" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Testo brani" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informazioni sull'Album" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Cerca" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Chiavi di ricerca" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Finisci Ricerca" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Nome della Playlist" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Copertina personalizzata" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Nome del file Copertina" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "Inform_azioni su..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Configura..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Nome" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Host" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Porta" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Lasciare vuoto se non è richiesta nessuna password" #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Pa_ssword" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Seleziona una Music Dir" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Music dir" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Connettiti automaticamente all'avvio" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Connessione ad MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "Pulsanti _Riproduzione/Volume" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Barra di _Progresso" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Barra di stato" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Icona nell'area di notifica" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Testo del brano" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Salva il testo dei brani in:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Copertina" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Stile della Copertina" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stilizzato" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Cerca locazioni: " #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Solo in locale" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Locale e in remoto" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Salva le copertine in:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Display" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Mostra finestra in _tutte le aree di lavoro" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Mantieni la finestra in primo piano" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Nascondi il titolo della finestra" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimizza nell'area di notifica se chiuso" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Se abilitato, chiudere Sonata lo minimizzerà semplicemente nell'area di " "notifica. Poichè è correntemente impossibile sapere se è disponibile o meno " "un'area di notifica, assicurati di utilizzarne una prima di selezionare " "questa opzione." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Se abilitato, chiudere Sonata lo minimizzerà semplicemente nell'area di " "notifica. Poichè è correntemente impossibile sapere se è disponibile o meno " "un'area di notifica, assicurati di utilizzarne una prima di selezionare " "questa opzione." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Comportamento della finestra" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Aggiorna la libreria di MPD all'avvio del programma" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Se abilitato, Sonata rigenererà automaticamente la libreria di MPD quanto " "viene avviato." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "T_ermina la riproduzione alla chiusura del programma" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD continua a riprodurre musica anche se non c'è nessun client aperto. Se " "questa opzione è abilitata, Sonata si comporterà come un lettore musicale " "convenzionale, concludendo la riproduzione del brano corrente quando il " "programma viene chiuso." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Scrivi un file di stato:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Se questa opzione è abilitata, Sonata creerà un file contenente informazioni " "sul brano corrente in maniera simile ad xmms. Molte applicazioni supportano " "il file xmms-info creato (Instant Messenger, Client IRC...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Varie" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Comportamento" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "P_laylist corrente:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Libreria:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Titolo della finestra:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Brano _corrente linea 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Brano c_orrente linea 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Opzioni disponibili" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formato del brano" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Formato" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Nome utente:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Password:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Popup di _notifica al cambio del brano" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Area di notifica" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "In Alto a Sinistra" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "In Alto a Destra" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "In Basso a Sinistra" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "In Basso a Destra" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Centro dello schermo" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "C_rossfade" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Durata dell'effetto" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sec" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extra" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Abilitato" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Descrizione" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Plugin" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Scegli Copertina" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Modifica chiavi di ricerca" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Copertina" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Apri Immagine" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Cerca Testo Brani" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Nome dell'Artista" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Titolo del Brano" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Playlist" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Nome dello Stream" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL dello Stream" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "S_alva tutto." #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Anno" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Commento" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/ja.po���������������������������������������������������������������������0000664�0000000�0000000�00000120057�15003420405�0016602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Japanese translation for Sonata package. # Copyright (C) 2009 Sonata's COPYRIGHT HOLDER # This file is distributed under the same license as the sonata package. # Masato Hashimoto <cabezon.hashimoto@gmail.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 21:53+0900\n" "Last-Translator: Masato Hashimoto <cabezon.hashimoto@gmail.com>\n" "Language-Team: Japanese <ja@li.org>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Sonata について" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "設定" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "アートワークモードの全画面化" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "1 - 5 のタブに切り換え" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "MPD に接続" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "MPD から切断" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "現在のプレイリストをランダムに" #: ../sonata/about.py:64 msgid "Expand player" msgstr "プレイヤの展開" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "前のタブへ切り換え" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "次のタブへ切り換え" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "プレイヤを折り畳む" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "ライブラリの検索" #: ../sonata/about.py:69 msgid "Quit" msgstr "終了" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "ライブラリ全体の更新" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "ポップアップメニューの表示" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "システムトレイへ最小化 (可能であれば)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "前のトラック" #: ../sonata/about.py:75 msgid "Next track" msgstr "次のトラック" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "再生 / 一時停止" #: ../sonata/about.py:77 msgid "Stop" msgstr "停止" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "ボリュームを下げる" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "ボリュームを上げる" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "選択した曲の再生" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "選択した曲の削除" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "現在再生中の曲を中央へ" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "選択した曲のタグの編集" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "新しいプレイリストに保存" #: ../sonata/about.py:86 msgid "Clear list" msgstr "リストのクリア" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "リストをランダムに" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "選択した曲の追加 / ディレクトリへ移動" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "親ディレクトリへ移動" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "選択したアイテムの追加" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "選択したアイテムで置き換え" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "選択したアイテムを追加して再生" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "選択したアイテムで置き換えて再生" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "選択したアイテム/パスの更新" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "選択したプレイリストの追加" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "選択したプレイリストの削除" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "選択したプレイリストで置き換え" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "選択したプレイリストを追加して再生" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "選択したストリームの追加" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "選択したストリームの削除" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "選択したストリームで置き換え" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "選択したストリームを追加して再生" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "再生中の曲のタグの編集" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "メインショートカット" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "再生のショートカット" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "現在のプレイリストのショートカット" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "ライブラリのショートカット" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "プレイリストのショートカット" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "ストリームのショートカット" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "情報のショートカット" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "日の幸せ" msgstr[1] "日の幸せ" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "時間の幸せ" msgstr[1] "時間の幸せ" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "使用法: sonata [OPTION]... [COMMAND}..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "コマンド" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "プレイリストの曲を再生する" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "再生中の曲を一時停止する" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "再生中の曲を停止する" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "プレイリストの次の曲を再生する" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "プレイリストの前の曲を再生する" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "再生/停止を切り替える" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "繰り返しモードを切り換える" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "ランダムモードを切り換える" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "現在の曲情報を表示する" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "MPD の状態を表示する" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "楽曲をポップアップ通知する (D-Bus が必要)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "表示を切り換える (D-Bus が必要)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "表示を切り換える (D-Bus が必要)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "D-Bus コマンドが失敗したらアプリケーションを起動しない" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "非表示状態で起動する (システムトレイが必要)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "表示状態で起動する (システムトレイが必要)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "プロファイル [NUM] で起動する" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "--toggle および --popup オプションには D-Bus が必要です。終了します。" #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata をプロファイル %s で起動しています..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d は有効なプロファイル番号ではありません。" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "プロファイル番号は 1 から %d の間でなければなりません。" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "デフォルトプロファイル" #: ../sonata/cli.py:176 msgid "by" msgstr "by" #: ../sonata/cli.py:176 msgid "from" msgstr "from" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "MPD に接続できません。\n" "Sonata の設定や環境変数 MPD_HOST/MPD_PORT の値をチェックしてください。" #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "タイトル" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "アーティスト" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "アルバム" #: ../sonata/cli.py:241 msgid "Date" msgstr "日付" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "トラック" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "ジャンル" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "ファイル" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "時間" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "ビットレート" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD は停止しています" #: ../sonata/cli.py:268 msgid "Playing" msgstr "再生中" #: ../sonata/cli.py:269 msgid "Paused" msgstr "一時停止" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "停止" #: ../sonata/cli.py:271 msgid "State" msgstr "状態" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "繰り返し" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "オン" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "オフ" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "ランダム" #: ../sonata/cli.py:277 msgid "Volume" msgstr "ボリューム" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "クロスフェード" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "秒" msgstr[1] "秒" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata は D-BUS セッションへの接続に失敗しました: メッセージバスのアドレス解" "決ができません ('man dbus-launch' や 'man dbus-daemon' で調べてみてくださ" "い)。" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "リモートコマンドの実行に失敗しました。" #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "代わりに Sonata を起動しています..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "もしかして Sonata が起動してないとか?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "不明" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "アーティスト名" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "アルバム名" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "トラック名" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "トラック番号" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "ディスク番号" #: ../sonata/formatting.py:124 msgid "Year" msgstr "年" #: ../sonata/formatting.py:126 msgid "File path" msgstr "ファイルのパス" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "パス" #: ../sonata/formatting.py:128 msgid "File name" msgstr "ファイル名" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "ストリーム名" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "ストリーム" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "曲の長さ" #: ../sonata/formatting.py:131 msgid "Len" msgstr "長さ" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "経過時間 (タイトルのみ)" #: ../sonata/info.py:200 msgid "hide" msgstr "隠す" #: ../sonata/info.py:203 msgid "more" msgstr "もっと" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "アルバム名が設定されていません。" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "アルバム情報が見つかりませんでした。" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "歌詞が見つかりませんでした" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "歌詞を取得しています..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "歌詞が見つかりませんでした" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "いろんなアーティスト" #: ../sonata/library.py:79 msgid "Untagged" msgstr "タグなし" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "ファイル名" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "すべて" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "ファイルシステム" #: ../sonata/library.py:159 msgid "Albums" msgstr "アルバム" #: ../sonata/library.py:161 msgid "Artists" msgstr "アーティスト" #: ../sonata/library.py:163 msgid "Genres" msgstr "ジャンル" # Preference -> Extras -> Popup notification by cong changes (2sec, 3sec...Entire song) #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "曲中ずっと" msgstr[1] "曲中ずっと" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "秒" msgstr[1] "秒" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "分" msgstr[1] "分" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "曲" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "現在のリスト" #: ../sonata/main.py:94 msgid "Library" msgstr "ライブラリ" #: ../sonata/main.py:95 msgid "Playlists" msgstr "プレイリスト" #: ../sonata/main.py:96 msgid "Streams" msgstr "ストリーム" #: ../sonata/main.py:97 msgid "Info" msgstr "情報" # Preference -> Extras -> Popup notification by cong changes (2sec, 3sec...Entire song) #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "曲中ずっと" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "リストの並べ替え(_S)" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "選択したアイテム(_S)" #: ../sonata/main.py:227 msgid "_Connection" msgstr "接続(_C)" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "再生(_L)" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "更新(_U)" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "リモートの画像を使用(_R)..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "ローカルの画像を使用(_L)..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "全画面モード(_F)" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "画像のリセット" #: ../sonata/main.py:239 msgid "_Play" msgstr "再生(_P)" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "一時停止(_U)" #: ../sonata/main.py:243 msgid "_Stop" msgstr "停止(_S)" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "前(_V)" #: ../sonata/main.py:247 msgid "_Next" msgstr "次(_N)" #: ../sonata/main.py:249 msgid "_Quit" msgstr "終了(_Q)" #: ../sonata/main.py:251 msgid "_Remove" msgstr "削除(_R)" #: ../sonata/main.py:253 msgid "_Clear" msgstr "クリア(_C)" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "ライブラリ全体(_E)" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "選択したアイテム(_S)" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "設定(_P)" #: ../sonata/main.py:261 msgid "_About..." msgstr "Sonata について(_A)..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "タグの編集(_E)..." #: ../sonata/main.py:264 msgid "_Add" msgstr "リストに追加(_A)" #: ../sonata/main.py:266 msgid "_Replace" msgstr "リストを置換(_R)" #: ../sonata/main.py:268 msgid "Add" msgstr "リストに追加" #: ../sonata/main.py:270 msgid "Replace" msgstr "リストを置換" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "削除(_D)..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "シャッフル" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "シャッフル" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "Sonata を表示(_H)" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "プレイリストを置き換える" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "繰り返し" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "ランダム(_M)" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "アーティスト名順" #: ../sonata/main.py:475 msgid "By Album" msgstr "アルバム名順" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "曲名順" #: ../sonata/main.py:479 msgid "By File Name" msgstr "ファイル名順" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "ディレクトリ & ファイル名順" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "逆順" #: ../sonata/main.py:524 msgid "_New..." msgstr "新規(_N)..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "編集(_E)..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "プレイリストの保存" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "名前の変更(_R)..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "クリックで展開します" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "クリックで折り畳みます" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "未接続" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "読み込み権がありません" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "切断" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(mpd を更新しています)" #: ../sonata/main.py:2192 msgid "Images" msgstr "画像" #: ../sonata/main.py:2197 msgid "All files" msgstr "全てのファイル" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "アーティストまたはアルバム名が見つかりませんでした。" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "カバーアートが見つかりませんでした。" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "選択したプレイリストを削除しますか?" msgstr[1] "選択したプレイリストを削除しますか?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "プレイリストの削除" msgstr[1] "プレイリストの削除" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "選択したストリームを削除しますか?" msgstr[1] "選択したストリームを削除しますか?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "ストリームの削除" msgstr[1] "ストリームの削除" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "適切なブラウザを起動できません。" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "ブラウザの起動" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "プレイリストの保存" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "既存のプレイリスト" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "プレイリストを置き換える" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "曲を追加する" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "プレイリスト名の変更" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "ファイル" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "ローカルのみ" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT を使用しています" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "楽曲DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "カスタム" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "囲まれた内容は、その中にあるタグ全てに値が設定されている場合のみ表示されます" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "現在のプレイリストにカラムを作成します" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "歌詞を音楽ファイルのディレクトリに保存する場合は、正しい音楽ディレクトリを指" "定してください。" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "音楽ディレクトリの確認" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "アートワークを音楽ディレクトリに保存する場合は、正しい音楽ディレクトリを指定" "してください。" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "新しいプロファイル" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "ストリームの編集" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "新しいストリーム" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "この名前のストリームはすでに存在します。置き換えちゃっていいですか?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib か tagpy、またはその両方が見つかりませんでした。タグ編集サポートは無効" "になります。" #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "タグの編集" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy のバージョンが 0.91 より古いです。新しいバージョンにアップグレードして" "ください。タグ編集サポートは無効になります。" #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "が存在しません。「設定」で正しい音楽ディレクトリを指定してください。" #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" " が見つかりませんでした。「設定」で正しい音楽ディレクトリを指定してください。" #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "タグが編集可能な音楽ファイルが見つかりませんでした。" #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "タグの編集" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "音楽ファイルにタグを保存できません。" #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "ファイルパスを表示しない" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "ファイルパスを表示する" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "エレガントな MPD クライアント" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "ショートカット(_S)" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "ショートカット" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "フィルタ" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "タイトル" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "アーティスト" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "アルバム" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "日付" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "トラック" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "ジャンル" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "ファイル" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "ビットレート" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Wikipedia でアーティストを調べる" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Wikipedia でアルバムを調べる" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "拡張タグ表示の切り換え" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "この曲のタグを編集する" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "タグの編集" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "楽曲情報" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "歌詞を Lyricwiki.org で検索する" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "検索" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "歌詞" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "アルバム情報" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "検索" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "検索語" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "検索をやめる" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "プレイリスト名" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "カスタムアートワーク" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "アートワークファイル名" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "Sonata について(_A)" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "設定(_C)..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "名前(_N)" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "ホスト(_H)" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "ポート(_P)" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "パスワードを必要としない場合は空白のままにしてください。" #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "パスワード(_S)" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "音楽ディレクトリの選択" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "音楽ディレクトリ(_M)" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "起動時に自動的に接続する(_A)" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD 接続" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "再生/ボリュームボタン(_P)" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "プログレスバー(_O)" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "ステータスバー(_S)" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "システムトレイアイコン(_T)" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "歌詞(_R)" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "歌詞の保存先:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "アルバムアート(_A)" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "アートワークスタイル:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "標準" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "スタイル化" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "検索場所:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "ローカルのみ" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "ローカルとリモート" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "アートの保存先:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "表示" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "全てのワークスペースで表示する(_S)" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "常に最前面に置く(_K)" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "ウィンドウのタイトルバーを表示しない(_H):" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "閉じたときシステムトレイに最小化する(_M)" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "このオプションを有効にすると、Sonata を閉じた際にシステムトレイに最小化されま" "す。ただし、現在システムトレイが実際に存在するかどうかチェックできませんの" "で、あなたがシステムトレイを使用している場合のみチェックマークをつけてくださ" "い。" #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "このオプションを有効にすると、Sonata を閉じた際にシステムトレイに最小化されま" "す。ただし、現在システムトレイが実際に存在するかどうかチェックできませんの" "で、あなたがシステムトレイを使用している場合のみチェックマークをつけてくださ" "い。" #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "ウィンドウの振る舞い" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "起動時に MPD ライブラリを更新する(_U)" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "このオプションを有効にすると、Sonata は起動時に MPD ライブラリを自動的に更新" "します。" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "終了時に再生を止める(_T)" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD はクライアントが動作していなくても再生できます。このオプションを有効にす" "ると、Sonata は伝統的な音楽プレイヤと同じように振る舞い、終了時に再生を停止し" "ます。" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "状態をファイルに出力する(_W):" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "このオプションを有効にすると、Sonata は現在の曲についての情報を xmms-" "infopipe ライクなファイルに出力します。多くのアプリケーション (インスタント" "メッセンジャ、IRC クライアントなど) は xmms-info ファイルをサポートしていま" "す。" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "その他" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "振る舞い" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "現在のプレイリスト(_U):" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "ライブラリ(_L):" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "ウィンドウタイトル(_W):" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "現在の曲の 1 行目(_S):" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "現在の曲の 2 行目(_O):" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "使用可能なオプション" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "表示フォーマット" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "フォーマット" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "Audioscrobbler (Last.fm) を有効にする(_A)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "ユーザ名(_U):" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "パスワード(_P):" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "曲の変更時にポップアップ通知する(_N)" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "システムトレイ" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "左上" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "右上" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "左下" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "右下" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "画面中央" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "クロスフェードする(_R)" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "フェード時間(_F):" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "秒" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "拡張" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "クロスフェードを有効にする" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "説明" #: ../sonata/ui/preferences.glade.h:72 #, fuzzy msgid "Plugins" msgstr "プラグイン(_P)" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "カバーアートの選択" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "検索語の編集" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "カバーアート" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "画像を開く" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "歌詞の検索" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "アーティスト名" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "曲のタイトル" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "プレイリスト" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "ストリーム名" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "ストリーム URL" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "全て保存(_A)" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "年" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "コメント" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/ko.po���������������������������������������������������������������������0000664�0000000�0000000�00000113321�15003420405�0016615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Korean translation for Sonata package. # Copyright (C) 2009 Sonata's COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # BANG, Jaesung <jaesung@liberotown.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-10-13 16:27+0900\n" "Last-Translator: Jaesung <jaesung@liberotown.com>\n" "Language-Team: Ubuntu Korea <admin@ubuntu.or.kr>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "소나타 정보" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "기본 설정" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "전체 화면 모드" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "1-5 탭 이동" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "MPD에 연결" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "MPD와 연결 끊기" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "현재 재생 목록 순서 섞기" #: ../sonata/about.py:64 msgid "Expand player" msgstr "재생기 확장하기" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "이전 탭으로 이동" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "다음 탭으로 이동" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "재생기 접기" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "보관함 검색" #: ../sonata/about.py:69 msgid "Quit" msgstr "끝내기" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "보관함 전체 업데이트" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "팝업 메뉴 표시" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "가능하다면 시스템 트레이로 최소화" #: ../sonata/about.py:74 msgid "Previous track" msgstr "이전 트랙" #: ../sonata/about.py:75 msgid "Next track" msgstr "다음 트랙" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "재생/일시 정지" #: ../sonata/about.py:77 msgid "Stop" msgstr "멈춤" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "음량 낮게" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "음량 높게" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "선택한 노래 재생" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "선택한 노래 삭제" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "현재 재생 중인 노래를 가운데로" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "선택한 노래의 태그 편집" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "새로운 재생 목록으로 저장" #: ../sonata/about.py:86 msgid "Clear list" msgstr "목록 비우기" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "목록 순서 섞기" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "선택한 노래를 추가하거나 디렉터리로 이동" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "부모 디렉터리로 이동" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "선택한 항목 추가" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "선택한 항목으로 대체" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "선택한 항목을 추가하고 재생" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "선택한 항목으로 대체하고 재생" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "선택한 항목/경로 업데이트" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "선택한 재생 목록 추가" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "선택한 재생 목록 삭제" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "선택한 재생 목록으로 대체" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "선택한 재생 목록을 추가하고 재생" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "선택한 스트림 추가" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "선택한 스트림 삭제" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "선택한 스트림으로 대체" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "선택한 스트림을 추가하고 재생" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "재생 중인 노래의 태그 편집" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "주 단축키" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "재생 관련 단축키" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "현재 목록 단축키" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "보관함 단축키" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "재생 목록 단축키" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "스트림 단축키" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "정보 단축키" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "일의 행복" msgstr[1] "일의 행복" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "시간의 행복" msgstr[1] "시간의 행복" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "사용 방법: sonata [옵션]... [명령어]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "명령어" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "재생 목록에 있는 노래 재생" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "현재 재생 중인 노래 일시 정지" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "현재 재생 중인 노래 멈춤" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "재생 목록에 있는 다음 노래 재생" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "재생 목록에 있는 이전 노래 재생" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "재생/일시 정지 전환" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "반복 재생 모드 전환" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "임의 재생 모드 전환" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "현재 노래 정보 표시" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "MPD 상태 표시" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "노래 알림 팝업(D-Bus 필요)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "화면에 표시 여부(D-Bus 필요)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "화면에 표시 여부(D-Bus 필요)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "D-Bus 명령에 실패하면 응용 프로그램을 실행하지 않음" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "응용 프로그램을 숨김 상태로 실행(시스템 트레이 필요)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "응용 프로그램을 보이는 상태로 실행(시스템 트레이 필요)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "프로파일 [NUM](으)로 실행" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "--toggle과 --popup 옵션은 D-Bus가 필요합니다. 중단합니다." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "%s 프로파일로 소나타 시작..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d는 유효한 프로파일 번호가 아닙니다." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "프로파일 번호는 1과 %d 사이의 숫자이어야 합니다." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "기본 프로파일" #: ../sonata/cli.py:176 msgid "by" msgstr "음악가:" #: ../sonata/cli.py:176 msgid "from" msgstr "앨범:" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "MPD에 연결할 수 없습니다.\n" "소나타 기본 설정이나 환경 변수 MPD_HOST/MPD_PORT를 확인하십시오." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "제목" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "음악가" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "앨범" #: ../sonata/cli.py:241 msgid "Date" msgstr "연도" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "제목" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "장르" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "파일" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "시간" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "비트율" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD 멈춤" #: ../sonata/cli.py:268 msgid "Playing" msgstr "재생 중" #: ../sonata/cli.py:269 msgid "Paused" msgstr "일시 정지" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "멈춤" #: ../sonata/cli.py:271 msgid "State" msgstr "상태" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "반복 재생" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "켜짐" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "꺼짐" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "임의 재생" #: ../sonata/cli.py:277 msgid "Volume" msgstr "음량" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "크로스페이드" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "초" msgstr[1] "초" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "소나타 D-BUS 세션 연결에 실패: 메시지 버스 주소 확인 불가('man dbus-" "launch'나 'man dbus-daemon'로 확인)." #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "원격 명령을 실행하지 못했습니다." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "다음 프로그램 대신 소나타를 실행:" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "혹시 소나타가 실행되지 않고 있습니까?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "알 수 없음" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "음악가 이름" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "앨범 제목" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "트랙 제목" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "트랙 번호" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "디스크 번호" #: ../sonata/formatting.py:124 msgid "Year" msgstr "연도" #: ../sonata/formatting.py:126 msgid "File path" msgstr "파일 경로" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "경로" #: ../sonata/formatting.py:128 msgid "File name" msgstr "파일 이름" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "스트림 제목" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "스트림" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "노래 길이" #: ../sonata/formatting.py:131 msgid "Len" msgstr "시간" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "경과 시간(타이틀에만)" #: ../sonata/info.py:200 msgid "hide" msgstr "감추기" #: ../sonata/info.py:203 msgid "more" msgstr "더 보기" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "앨범 제목이 설정되지 않음." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "앨범 정보를 찾을 수 없음." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "가사를 찾을 수 없음" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "가사 검색 중 ..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "가사를 찾을 수 없음" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "여러 음악가" #: ../sonata/library.py:79 msgid "Untagged" msgstr "태그 없음" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "파일 이름" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "모두" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "파일 시스템" #: ../sonata/library.py:159 msgid "Albums" msgstr "앨범" #: ../sonata/library.py:161 msgid "Artists" msgstr "음악가" #: ../sonata/library.py:163 msgid "Genres" msgstr "장르" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "노래 전체" msgstr[1] "노래 전체" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "초" msgstr[1] "초" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "분" msgstr[1] "분" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "노래" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "현재 목록" #: ../sonata/main.py:94 msgid "Library" msgstr "보관함" #: ../sonata/main.py:95 msgid "Playlists" msgstr "재생 목록" #: ../sonata/main.py:96 msgid "Streams" msgstr "스트림" #: ../sonata/main.py:97 msgid "Info" msgstr "정보" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "노래 전체" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "목록 정렬(_S)" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "선택한 항목(_S)" #: ../sonata/main.py:227 msgid "_Connection" msgstr "연결(_C)" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "바로 재생(_L)" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "업데이트(_U)" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "원격 이미지 사용(_R)..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "로컬 이미지 사용(_L)..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "전체 화면 모드(_F)" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "이미지 초기화" #: ../sonata/main.py:239 msgid "_Play" msgstr "재생(_P)" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "일시 정지(_U)" #: ../sonata/main.py:243 msgid "_Stop" msgstr "멈춤(_S)" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "이전(_V)" #: ../sonata/main.py:247 msgid "_Next" msgstr "다음(_N)" #: ../sonata/main.py:249 msgid "_Quit" msgstr "끝내기(_Q)" #: ../sonata/main.py:251 msgid "_Remove" msgstr "삭제(_R)" #: ../sonata/main.py:253 msgid "_Clear" msgstr "비우기(_C)" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "보관함 전체(_E)" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "선택한 항목(_S)" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "기본 설정(_P)..." #: ../sonata/main.py:261 msgid "_About..." msgstr "정보(_A)..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "태그 편집(_E)..." #: ../sonata/main.py:264 msgid "_Add" msgstr "추가(_A)" #: ../sonata/main.py:266 msgid "_Replace" msgstr "대체(_R)" #: ../sonata/main.py:268 msgid "Add" msgstr "추가" #: ../sonata/main.py:270 msgid "Replace" msgstr "대체" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "삭제(_D)..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "순서 섞기" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "순서 섞기" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "소나타 보이기(_H)" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "재생 목록 대체" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "반복 재생" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "임의 재생(_M)" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "음악가" #: ../sonata/main.py:475 msgid "By Album" msgstr "앨범" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "노래 제목" #: ../sonata/main.py:479 msgid "By File Name" msgstr "파일 이름" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "디렉터리와 파일 이름" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "목록 뒤집기" #: ../sonata/main.py:524 msgid "_New..." msgstr "새로운 파일(_N)..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "편집(_E)..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "재생 목록 저장" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "이름 바꾸기(_R)..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "재생기 확장하기" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "재생기 접기" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "연결되지 않음" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "읽기 권한 없음" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "연결 끊기" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(MPD 업데이트 중)" #: ../sonata/main.py:2192 msgid "Images" msgstr "이미지" #: ../sonata/main.py:2197 msgid "All files" msgstr "모든 파일" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "음악가 이름이나 앨범 제목을 찾을 수 없음." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "앨범 아트를 찾을 수 없음." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "선택한 재생 목록을 삭제할까요?" msgstr[1] "선택한 재생 목록을 삭제할까요?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "재생 목록 삭제" msgstr[1] "재생 목록 삭제" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "선택한 스트림을 삭제할까요?" msgstr[1] "선택한 스트림을 삭제할까요?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "스트림 삭제" msgstr[1] "스트림 삭제" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "해당 브라우저를 실행할 수 없음." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "브라우저 실행" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "재생 목록 저장" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "기존 재생 목록" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "재생 목록 대체" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "노래 추가" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "재생 목록 이름 바꾸기" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "파일" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "로컬 전용" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT 사용" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "노래 디렉터리" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "사용자 지정" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "사용되는 모든 태그가 정의되었을 때 정보 표시" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "현재 재생 목록에 열 생성" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "음악 파일 디렉터리에 가사를 저장하려면 올바른 음악 디렉터리를 지정하십시오." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "음악 디렉터리 확인" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "음악 파일 디렉터리에 앨범 아트를 저장하려면 올바른 음악 디렉터리를 지정하십시" "오." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "새로운 프로파일" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "스트림 편집" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "새로운 스트림" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "이미 같은 이름의 스트림이 있습니다. 바꾸시겠습니까?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "taglib 또는 tagpy를 찾을 수 없으므로 태그 편집 기능을 사용할 수 없음." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "태그 편집" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "tagpy가 0.91 이전 버전이므로 태그 편집 기능은 사용할 수 없음. 새로운 버전으" "로 업그레이드하십시오." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "이(가) 없습니다. 기본 설정에서 올바른 음악 디렉터리를 지정하십시오." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "을(를) 찾을 수 없습니다. 기본 설정에서 올바른 음악 디렉터리를 지정하십시오." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "태그를 편집할 수 있는 음악 파일을 찾을 수 없습니다." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "태그 편집" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "음악 파일에 태그를 저장할 수 없음." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "파일 경로 숨김" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "파일 경로 표시" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "고품격 MPD 음악 클라이언트." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "단축키(_S)" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "단축키" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "필터" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "제목" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "음악가" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "앨범" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "연도" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "제목" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "장르" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "파일" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "비트율" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "위키백과에서 음악가 확인" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "위키백과에서 앨범 확인" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "기타 태그 보기 전환" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "노래 태그 편집" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "태그 편집" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "노래 정보" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Lyricwiki.org에서 가사 검색" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "검색" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "가사" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "앨범 정보" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "검색" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "검색어" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "검색 끝내기" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "재생 목록 이름" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "사용자 지정 앨범 아트" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "앨범 아트 파일 이름" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "정보(_A)" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "설정(_C)..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "이름(_N)" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "호스트(_H)" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "포트(_P)" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "비밀번호가 필요없다면 공란으로 비워두십시오." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "비밀번호(_S)" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "음악 디렉터리를 선택" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "음악 디렉터리(_M)" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "시작할 때 자동 연결(_A)" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD 연결" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "재생 관련 버튼 및 음량 버튼(_P)" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "진행 상태바(_O)" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "상태바(_S)" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "시스템 트레이 아이콘(_T)" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "노래 가사" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "가사 저장 위치:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "앨범 아트(_A)" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "앨범 아트 스타일:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "표준" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "꾸밈" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "검색 위치:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "로컬 전용" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "로컬 및 원격" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "앨범 아트 저장 위치:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "화면 표시" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "모든 작업 공간에 창 표시(_S)" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "항상 다른 창 위에 표시(_K)" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "창 타이틀바 숨기기(_H)" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "닫거나 ESC 키를 누르면 시스템 트레이로 최소화(_M)" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "이 항목을 활성화하면, 소나타를 닫을 때 시스템 트레이로 최소화합니다. 하지만 " "현재 실제 시스템 트레이가 있는 지를 알아낼 수 없습니다. 따라서, 시스템 트레이" "가 있을 때만 선택하십시오." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "이 항목을 활성화하면, 소나타를 닫을 때 시스템 트레이로 최소화합니다. 하지만 " "현재 실제 시스템 트레이가 있는 지를 알아낼 수 없습니다. 따라서, 시스템 트레이" "가 있을 때만 선택하십시오." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "창 동작" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "실행할 때 MPD 보관함을 업데이트(_U)" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "이 항목을 활성화하면, 소나타를 실행할 때 MPD 보관함을 자동으로 업데이트합니" "다." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "끝낼 때 재생 멈춤(_T)" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD는 클라이언트가 열려있지 않아도 재생을 허가합니다. 이 항목을 활성화하면, " "소나타는 일반적인 음악 재생기와 같이 끝낼 때 재생을 멈춥니다." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "상태 파일 기록(_W):" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "이 항목을 활성화하면, 현재 노래에 대한 정보를 담은 xmms-infopipe 파일을 생성" "합니다. 인스턴트 메신저나 IRC 클라이언트 등의 응용 프로그램은 xmms-info 파일" "을 지원합니다." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "기타" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "동작" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "현재 재생 목록(_U):" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "보관함(_L):" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "창 타이틀(_W):" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "현재 노래의 1행(_S):" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "현재 노래의 2행(_O):" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "사용가능한 옵션" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "노래 표시 형식" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "표시 형식" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "Audioscrobbling(Last.fm) 사용(_A)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "사용자 이름(_U):" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "비밀번호(_P):" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "노래가 바뀔 때 팝업 알림(_N)" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "시스템 트레이" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "위-왼쪽" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "위-오른쪽" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "아래-왼쪽" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "아래-오른쪽" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "스크린 가운데" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "크로스페이드(_R)" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "페이드 길이(_F)" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "초" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "기타" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "활성화" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "설명" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "플러그인" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "앨범 아트 선택" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "검색어 편집" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "앨범 아트" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "이미지 열기" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "가사 검색" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "음악가 이름" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "노래 제목" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "재생 목록" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "스트림 제목" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "스트림 URL" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "모두 저장(_A)" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "연도" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "메모" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/nl.po���������������������������������������������������������������������0000664�0000000�0000000�00000111240�15003420405�0016613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.4.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2008-05-22 19:11+0100\n" "Last-Translator: Olivier Keun <litemotiv@gmail.com>\n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Over Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Voorkeuren" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Spring naar [1ste-5e] tab" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Verbinden met MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Losmaken van MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Huidige afspeellijst shuffelen:" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Speler vergroten" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Spring naar de vorige tab" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Spring naar de volgende tab" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Speler verkleinen" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Collectie doorzoeken" #: ../sonata/about.py:69 msgid "Quit" msgstr "Beëindigen" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Hele collectie bijwerken" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Popup menu weergeven" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimaliseer naar systeemvak (indien ingeschakeld)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Vorige nummer" #: ../sonata/about.py:75 msgid "Next track" msgstr "Volgende nummer" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Speel/Pauze" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stop" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Volume verlagen" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Volume verhogen" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "geselecteerde nummer afspelen" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Geselecteerde nummer(s) verwijderen" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centreer het huidige nummer" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Tags van het geselecteerde nummer aanpassen" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Als nieuwe afspeellijst opslaan" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Lijst leegmaken" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Lijst shuffelen" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Geselecteerde nummer(s) toevoegen of map openen" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Ga naar bovenliggende map" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Geselecteerde item(s) toevoegen" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Door geselecteerde item(s) vervangen" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Geselecteerde item(s) toevoegen en afspelen" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Door geselecteerde item(s) vervangen en afspelen" #: ../sonata/about.py:96 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Geselecteerde item(s) toevoegen" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Geselecteerde afspeellijst(en) toevoegen" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Geselecteerde afspeellijsten(en) verwijderen" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Door geselecteerde afspeellijst(en) vervangen" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Geselecteerde afspeellijst(en) toevoegen en afspelen" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Geselecteerde stream(s) toevoegen" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Geselecteerde stream(s) verwijderen" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Door geselecteerde stream(s) vervangen" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Geselecteerde stream(s) toevoegen en afspelen" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Song tags aanpassen van het spelende nummer" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Algemene toetsen" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Afspeeltoetsen" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Huidige toetsen" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Collectie toetsen" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Afspeellijst toetsen" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Stream toetsen" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Info sneltoetsen" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "dag vol genot" msgstr[1] "dagen vol genot" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "uur vol genot" msgstr[1] "uren vol genot" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Gebruik: sonata [OPTIE]" #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Opmerkingen" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Speel nummer in afspeellijst" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pauseer huidige nummer" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Stop afpelen van het huidige nummer" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Speel het volgende nummer in de afspeellijst" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Speel het vorige nummer in de afspeellijst" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Wissel tussen afspelen/pauze" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Zet herhalen aan/uit" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Zet willekeurig spelen aan/uit" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Toon huidige nummer informatie" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Toon MPD status" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Popup scherm bij nieuw nummer (vereist DBus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "naar het systeemvak of zichtbaar (vereist D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "naar het systeemvak of zichtbaar (vereist D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Start prog. geminimaliseerd (vereist systeemvak)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Start prog. zichtbaar (vereist systeemvak)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Start met profiel [NUMMER]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Het toggle argument vereist D-Bus. Gestopt." #: ../sonata/cli.py:149 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata opstarten met profiel" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "" #: ../sonata/cli.py:155 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Geen geldig profiel nummer. Gebruik een profiel nummer tussen 1 en" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Standaard Profiel" #: ../sonata/cli.py:176 msgid "by" msgstr "door" #: ../sonata/cli.py:176 msgid "from" msgstr "van" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Kan niet met MPD verbinden.\n" "Controleer de Sonata Instellingen of MPD_HOST/MPD_PORT omgevingsvariabelen." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titel" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artiest" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Datum" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Nummer" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Bestand" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Tijd" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitrate" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD gestopt" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Afspelen" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pauze" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Gestopt" #: ../sonata/cli.py:271 msgid "State" msgstr "Status" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Herhalen" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Aan" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Uit" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Willekeurig" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volume" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Overgang" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "seconde" msgstr[1] "seconden" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata kan niet met de D-Bus sessie bus verbinden: Het adres van de bus kan " "niet worden bepaald (probeer 'man dbus-launch' en 'man dbus-daemon' voor " "hulp)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:140 #, fuzzy msgid "Starting Sonata instead..." msgstr "Sonata opstarten met profiel" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Een versie van Sonata is reeds actief." #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Onbekend" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Artiest naam" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Album naam" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Track naam" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Track nummer" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 #, fuzzy msgid "Disc number" msgstr "Disc nummer" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Jaar" #: ../sonata/formatting.py:126 #, fuzzy msgid "File path" msgstr "bestand_pad" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Pad" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Bestandsnaam" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Stream naam" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Stream" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Track lengte" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Len" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Verstreken tijd (alleen titel)" #: ../sonata/info.py:200 msgid "hide" msgstr "verberg" #: ../sonata/info.py:203 msgid "more" msgstr "meer" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Album naam niet ingevuld." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Album info niet gevonden." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Songtekst niet gevonden" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Songtekst ophalen..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Songtekst niet gevonden" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Verschillende Artiesten" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Niet getagged" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Bestandsnaam" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Alles" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Bestandssysteem" #: ../sonata/library.py:159 #, fuzzy msgid "Albums" msgstr "Album" #: ../sonata/library.py:161 #, fuzzy msgid "Artists" msgstr "Artiest" #: ../sonata/library.py:163 #, fuzzy msgid "Genres" msgstr "Genre" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Hele nummer" msgstr[1] "Hele nummer" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "seconde" msgstr[1] "seconden" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuut" msgstr[1] "minuten" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 #, fuzzy msgid "Song" msgstr "nummer" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Huidige" #: ../sonata/main.py:94 msgid "Library" msgstr "Collectie" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Afspeellijsten" #: ../sonata/main.py:96 msgid "Streams" msgstr "Streams" #: ../sonata/main.py:97 msgid "Info" msgstr "Info" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Hele nummer" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Sorteer Lijst" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Geselecteerde item(s) toevoegen" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Verbinding" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "_Hierna afspelen" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Bijwerken" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Gebruik _Extern Plaatje..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Gebruik _Lokaal Plaatje..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:237 #, fuzzy msgid "Reset Image" msgstr "Plaatje Openen" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Afspelen" #: ../sonata/main.py:241 #, fuzzy msgid "Pa_use" msgstr "_Pauze" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stop" #: ../sonata/main.py:245 #, fuzzy msgid "Pre_vious" msgstr "V_orige" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Volgende" #: ../sonata/main.py:249 msgid "_Quit" msgstr "Afsl_uiten" #: ../sonata/main.py:251 msgid "_Remove" msgstr "V_erwijderen" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Leegmaken" #: ../sonata/main.py:255 #, fuzzy msgid "_Entire Library" msgstr "_Collectie Bijwerken" #: ../sonata/main.py:257 #, fuzzy msgid "_Selected Items" msgstr "Geselecteerde item(s) toevoegen" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Voorkeuren..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Over..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Tags Bewerken..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Toevoegen" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Vervangen" #: ../sonata/main.py:268 msgid "Add" msgstr "Toevoegen" #: ../sonata/main.py:270 msgid "Replace" msgstr "Vervangen" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "Verwij_deren" #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Willekeurig" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Willekeurig" #: ../sonata/main.py:315 #, fuzzy msgid "S_how Sonata" msgstr "_Toon Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Afspeellijst vervangen" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Herhalen" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Willekeurig" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Op _Artiest" #: ../sonata/main.py:475 msgid "By Album" msgstr "Op A_lbum" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Op _Songtitel" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Op _Bestandsnaam" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Op map- en bestandsnaam" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Lijst Omdraaien" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nieuw..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Bewerk..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "Nieuwe _Speellijst..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Hernoem..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klik om uit te klappen" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klik om in te klappen" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Niet Verbonden" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Geen lees toegang" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Afbreken" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(mpd bijwerken)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Plaatjes" #: ../sonata/main.py:2197 msgid "All files" msgstr "Alle bestanden" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Geen artiest of album gevonden." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Geen album hoes gevonden." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Geselecteerde afspeellijst verwijderen?" msgstr[1] "Geselecteerde afspeellijsten verwijderen?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Afspeellijst verwijderen" msgstr[1] "Afspeellijsten verwijderen" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Geselecteerde stream verwijderen?" msgstr[1] "Geselecteerde streams verwijderen?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Stream verwijderen" msgstr[1] "Streams verwijderen" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Kan geen geschikte browser starten." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Browser starten" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Afspeellijst Opslaan" #: ../sonata/playlists.py:156 #, fuzzy msgid "Existing Playlist" msgstr "_Afspeellijst" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Afspeellijst vervangen" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Nummers toevoegen" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Afspeellijst hernoemen" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Bestand" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Alleen lokaal" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Via MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "aangepaste" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Info alleen weergeven als alle tags aanwezig zijn" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Maakt kolommen in de huidige afspeellijst" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Om songteksten naar de muziekmap op te slaan, moet een geldige map worden " "opgegeven." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Music Dir verificatie" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Om album hoezen naar de muziekmap op te slaan, moet een geldige map worden " "opgegeven." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nieuw Profiel" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Stream Bewerken" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nieuwe Stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Er bestaat reeds een stream met deze naam, vervangen?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib en/of tagpy niet gevonden, geen ondersteuning voor tag aanpassingen." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Tags bewerken" #: ../sonata/tagedit.py:124 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Taglib en/of tagpy niet gevonden, geen ondersteuning voor tag aanpassingen." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "bestaat niet. Kies een geldige muziek map onder voorkeuren." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " bestaat niet. Kies een geldige muziek map onder voorkeuren." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Geen muziekbestanden met bewerkbare tags gevonden." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Tags bewerken" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Opslaan van tag in bestand mislukt." #: ../sonata/tagedit.py:349 #, fuzzy msgid "Hide file path" msgstr "bestand_pad" #: ../sonata/tagedit.py:352 #, fuzzy msgid "Show file path" msgstr "bestand_pad" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Een elegante muziekspeler voor MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Toetsen" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Toetsen" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Titel" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Artiest" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Datum" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Nummer" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Genre" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Bestand" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitrate" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Artiest in Wikipedia openen" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Album in Wikipedia openen" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Extra tags wisselen" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Song tags aanpassen" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "Tags bewerken" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Nummer info" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Songtekst zoeken op Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "zoeken" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Songtekst" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Album Info" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "_Zoeken" #: ../sonata/ui/library.glade.h:3 #, fuzzy msgid "Search terms" msgstr "Bewerk zoektermen" #: ../sonata/ui/library.glade.h:10 #, fuzzy msgid "End Search" msgstr "Speel _hierna" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Afspeellijst naam" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Andere album hoes" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Album hoes bestandsnaam" #: ../sonata/ui/preferences.glade.h:3 #, fuzzy msgid "_About" msgstr "_Over..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "" #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "Naam" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "Adres" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "Poort" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Leeg laten als geen wachtwoord vereist is." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Wachtwoord" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Muziek map" #: ../sonata/ui/preferences.glade.h:13 #, fuzzy msgid "_Autoconnect on start" msgstr "Automatisch verbinden bij opstarten" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD Verbinding" #: ../sonata/ui/preferences.glade.h:15 #, fuzzy msgid "MPD" msgstr "_MPD" #: ../sonata/ui/preferences.glade.h:16 #, fuzzy msgid "_Playback/volume buttons" msgstr "Speel/volume knoppen aanzetten" #: ../sonata/ui/preferences.glade.h:17 #, fuzzy msgid "Pr_ogressbar" msgstr "Voortgang indicatie inschakelen" #: ../sonata/ui/preferences.glade.h:18 #, fuzzy msgid "_Statusbar" msgstr "Statusbalk aanzetten" #: ../sonata/ui/preferences.glade.h:19 #, fuzzy msgid "System _tray icon" msgstr "Systeemvak" #: ../sonata/ui/preferences.glade.h:20 #, fuzzy msgid "Song Ly_rics" msgstr "Songtekst" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Songtekst opslaan naar:" #: ../sonata/ui/preferences.glade.h:23 #, fuzzy msgid "_Album art" msgstr "Album naam" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Album hoes stijl" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standaard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Aangekleed" #: ../sonata/ui/preferences.glade.h:27 #, fuzzy msgid "Search locations:" msgstr "Zoekvolgorde:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Alleen lokaal" #: ../sonata/ui/preferences.glade.h:29 #, fuzzy msgid "Local and remote" msgstr "Lokaal, dan extern" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Hoes opslaan naar:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Weergave" #: ../sonata/ui/preferences.glade.h:32 #, fuzzy msgid "_Show window on all workspaces" msgstr "Toon scherm op alle werkbladen" #: ../sonata/ui/preferences.glade.h:33 #, fuzzy msgid "_Keep window above other windows" msgstr "Toon scherm boven andere schermen" #: ../sonata/ui/preferences.glade.h:34 #, fuzzy msgid "_Hide window titlebar" msgstr "Scherm titel:" #: ../sonata/ui/preferences.glade.h:35 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Minimaliseer naar systeemvak bij sluiten/escape" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Indien ingeschakeld zal Sonata minimaliseren naar het systeemvak bij " "afsluiten. Het is op dit moment niet mogelijk om een systeemvak te " "detecteren, dus schakel deze optie alleen in als een systeemvak beschikbaar " "is." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Indien ingeschakeld zal Sonata minimaliseren naar het systeemvak bij " "afsluiten. Het is op dit moment niet mogelijk om een systeemvak te " "detecteren, dus schakel deze optie alleen in als een systeemvak beschikbaar " "is." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Schermgedrag" #: ../sonata/ui/preferences.glade.h:39 #, fuzzy msgid "_Update MPD library on start" msgstr "MPD collectie bijwerken tijdens opstarten" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Indien ingeschakeld zal Sonata automatisch de MPD collectie bijwerken " "tijdens het opstarten." #: ../sonata/ui/preferences.glade.h:41 #, fuzzy msgid "S_top playback on exit" msgstr "Afspelen stoppen bij afsluiten" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD kan ook wanneer Sonata is afgesloten muziek afspelen. Indien " "ingeschakeld zal Sonata meer als een conventionele speler werken en het " "afspelen stoppen bij afsluiten." #: ../sonata/ui/preferences.glade.h:43 #, fuzzy msgid "_Write status file:" msgstr "Schrijf status bestand:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Indien ingeschakeld zal Sonata een xmms-infopipe bestand aanmaken met " "informatie over het huidige nummer. Veel programma's ondersteunen dit " "formaat (Instant Messengers, IRC programma's...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Algemeen" #: ../sonata/ui/preferences.glade.h:46 #, fuzzy msgid "Behavior" msgstr "_Gedrag" #: ../sonata/ui/preferences.glade.h:47 #, fuzzy msgid "C_urrent playlist:" msgstr "Huidige afspeellijst:" #: ../sonata/ui/preferences.glade.h:48 #, fuzzy msgid "_Library:" msgstr "Collectie:" #: ../sonata/ui/preferences.glade.h:49 #, fuzzy msgid "_Window title:" msgstr "Scherm titel:" #: ../sonata/ui/preferences.glade.h:50 #, fuzzy msgid "Current _song line 1:" msgstr "Huidige nummer regel 1:" #: ../sonata/ui/preferences.glade.h:51 #, fuzzy msgid "Current s_ong line 2:" msgstr "Huidige nummer regel 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Beschikbare opties" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Nummer formaat" #: ../sonata/ui/preferences.glade.h:54 #, fuzzy msgid "Format" msgstr "_Formaat" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: ../sonata/ui/preferences.glade.h:56 #, fuzzy msgid "_Username:" msgstr "Gebruikersnaam:" #: ../sonata/ui/preferences.glade.h:57 #, fuzzy msgid "_Password:" msgstr "Wachtwoord:" #: ../sonata/ui/preferences.glade.h:58 #, fuzzy msgid "Popup _notification on song changes" msgstr "Popup scherm bij nieuw nummer spelen" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Systeemvak" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Linksboven" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Rechtsboven" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Linksonder" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Rechtsonder" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Scherm Midden" #: ../sonata/ui/preferences.glade.h:66 #, fuzzy msgid "C_rossfade" msgstr "Overgang" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Fade lengte" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sec" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extra's" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Crossfade inschakelen" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Kies Album Hoes" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Bewerk zoektermen" #: ../sonata/ui/sonata.glade.h:5 #, fuzzy msgid "Cover Art" msgstr "Album _Hoes" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Plaatje Openen" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Songteksten zoeken" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Artiest Naam" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Songtitel" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "_Afspeellijst" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Stream naam" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "Stream URL" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "_Alles opslaan" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Jaar" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Opmerkingen" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/pl.po���������������������������������������������������������������������0000664�0000000�0000000�00000115231�15003420405�0016621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translation of Sonata. # Copyright (C) 2006-2009 Tomasz Dominikowski # This file is distributed under the same license as the sonata package. # Tomasz Dominikowski 2006-2009, dominikowski@gmail.com # msgid "" msgstr "" "Project-Id-Version: Sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 13:59+0100\n" "Last-Translator: Tomasz Dominikowski <dominikowski@gmail.com>\n" "Language-Team: Tomasz Dominikowski <dominikowski@gmail.com>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Poedit-Language: Polish\n" "X-Poedit-Country: Poland\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "O programie Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Preferencje" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Tryb pełnoekranowych okładek" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Przełączenie do [1-5] karty" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Połączenie z usługą MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Rozłączenie z usługą MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Losowanie kolejności odtwarzania bieżącej listy" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Rozwinięcie odtwarzacza" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Przełączenie do poprzedniej karty" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Przełączenie do następnej karty" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Zwinięcie odtwarzacza" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Wyszukiwanie w kolekcji" #: ../sonata/about.py:69 msgid "Quit" msgstr "Zakończenie" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Aktualizacja całej kolekcji" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Wyświetlenie wyskakującego menu" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimalizacja do zasobnika systemowego (jeśli dostępny)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Poprzednia ścieżka" #: ../sonata/about.py:75 msgid "Next track" msgstr "Następna ścieżka" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Odtwarzanie/Wstrzymanie" #: ../sonata/about.py:77 msgid "Stop" msgstr "Zatrzymanie" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Obniżenie poziomu głośności" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Zwiększenie poziomu głośności" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Odtworzenie zaznaczonego utworu" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Usunięcie zaznaczonego utworu (utworów)" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Bieżąco odtwarzany utwór na środku" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Modyfikowanie znaczników zaznaczonego utworu" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Zapisanie do nowej listy odtwarzania" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Wyczyszczenie listy odtwarzania" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Losowanie kolejności odtwarzania" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Dodanie zaznaczonego utworu (utworów) lub przejście do katalogu" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Przejście do katalogu nadrzędnego" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Dodanie zaznaczonego elementu (elementów)" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Zamiana na zaznaczony element (elementy)" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Dodanie zaznaczonego elementu (elementów) i rozpoczęcie odtwarzania" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Zamiana na zaznaczony element (elementy) i rozpoczęcie odtwarzania" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Aktualizacja zaznaczonego elementu (elementów)/ścieżki (ścieżek)" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Dodanie zaznaczonej listy (list) odtwarzania" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Usunięcie zaznaczonej listy (list) odtwarzania" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Zamień na zaznaczoną listę (listy) odtwarzania " #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Dodanie zaznaczonej listy (list) odtwarzania i rozpoczęcie odtwarzania" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Dodanie zaznaczonego strumienia (strumieni)" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Usunięcie zaznaczonego strumienia (strumieni)" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Zamiana na zaznaczony strumień (strumienie)" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Dodanie zaznaczonego strumienia (strumieni) i rozpoczęcie odtwarzania" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Modyfikacja znaczników odtwarzanego utworu" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Skróty główne" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Skróty odtwarzania" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Skróty bieżące" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Skróty kolekcji" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Skróty listy odtwarzania" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Skróty strumieni" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Skróty klawiszowe" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "dzień oczarowania" msgstr[1] "dni oczarowania" msgstr[2] "dni oczarowania" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "godzina oczarowania" msgstr[1] "godziny oczarowania" msgstr[2] "godzin oczarowania" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Składnia: sonata [OPCJA]... [POLECENIE]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Polecenia" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Odtworzenie utworu z listy odtwarzania" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Wstrzymanie odtwarzania bieżącego utworu" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Zatrzymanie odtwarzania bieżącego utworu" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Odtwarzanie następnego utworu na liście odtwarzania" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Odtwarzanie poprzedniego utworu na liście odtwarzania" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Przełączanie odtwarzania/wstrzymania; odtwarza, jeśli zatrzymane" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Przełączanie trybu powtarzania" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Przełączanie trybu losowego" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Wyświetlenie informacji o bieżącym utworze" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Wyświetlenie stanu usługi MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Wyskakujące powiadamianie o utworze (wymaga D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "(widoczny lub zminimalizowany, wymaga D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "(widoczny lub zminimalizowany, wymaga D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Bez uruchamiania programu, jeśli polecenia D-Bus zawiodą" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Uruchomienie aplikacji w trybie ukrytym (wymaga zasobnika systemowego)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "" "Uruchomienie aplikacji w trybie widocznym (wymaga zasobnika systemowego)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Uruchomienie z profilem [NR]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Argument przełączania i wyskakiwania wymaga D-Bus. Przerywanie." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Uruchamianie programu Sonata z profilem %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d nie jest dostępnym numerem profilu." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Numer profilu musi się mieścić pomiędzy 1 i %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Domyślny profil" #: ../sonata/cli.py:176 msgid "by" msgstr " " #: ../sonata/cli.py:176 msgid "from" msgstr "z" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Połączenie z usługą MPD niemożliwe.\n" "Proszę sprawdzić preferencje programu Sonata lub zmienne MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Tytuł" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Wykonawca" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Data" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Ścieżka" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Gatunek" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Nazwa pliku" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Czas" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Gęstość bitowa" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "Usługa MPD zatrzymana" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Odtwarzanie" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Wstrzymane" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Zatrzymane" #: ../sonata/cli.py:271 msgid "State" msgstr "Stan" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Powtarzanie" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Włączone" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Wyłączone" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Losowo" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Głośność" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Płynne przejścia" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Połączenie z sesją D-BUS nieudane: Niemożliwe określenie adresu magistrali " "wiadomości (spróbuj uzyskać pomoc w \"man dbus-launch\" i \"man dbus-deamon" "\")" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Nieudane wykonanie zdalnych poleceń." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Zamiast tego, uruchamianie programu Sonata..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Może program Sonata jest już uruchomiony?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Nieznany" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Wykonawca" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Album" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Nazwa ścieżki" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Numer ścieżki" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Numer płyty" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Rok" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Ścieżka do pliku" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Ścieżka" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nazwa pliku" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nazwa strumienia" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Strumień" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Długość utworu" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Długość" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Upłynęło czasu (tylko tytuł)" #: ../sonata/info.py:200 msgid "hide" msgstr "ukryj" #: ../sonata/info.py:203 msgid "more" msgstr "więcej" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Nazwa albumu nieustalona." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Brak informacji o albumie." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Brak tekstu utworu" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Pobieranie tekstu utworu..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Brak tekstu utworu" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Różni artyści" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Bez znaczników" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nazwa pliku" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Wszystko" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "System plików" #: ../sonata/library.py:159 msgid "Albums" msgstr "Albumy" #: ../sonata/library.py:161 msgid "Artists" msgstr "Wykonawcy" #: ../sonata/library.py:163 msgid "Genres" msgstr "Gatunki" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Cały utwór" msgstr[1] "Cały utwór" msgstr[2] "Cały utwór" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Utwór" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Bieżąca" #: ../sonata/main.py:94 msgid "Library" msgstr "Kolekcja" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Listy odtwarzania" #: ../sonata/main.py:96 msgid "Streams" msgstr "Strumienie" #: ../sonata/main.py:97 msgid "Info" msgstr "Informacje" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Cały utwór" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Sortuj listę" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Zaznaczone _elementy" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Połączenie" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Odt_warzaj po" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Aktualizuj" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Użyj zdalnego ob_razu..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Użyj _lokalnego obrazu..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Tryb pełnoekranowy" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Przywróć obraz" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Odtwarzaj" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Wstrzymaj" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Zatrzymaj" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Poprzedni" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Następny" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Zakończ" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Usuń" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Wyczyść" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Całą kolekcję" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "Zaznaczone _elementy" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "P_referencje..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_O programie..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "Modyfikuj z_naczniki..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Dodaj" #: ../sonata/main.py:266 msgid "_Replace" msgstr "Za_mień" #: ../sonata/main.py:268 msgid "Add" msgstr "Dodaniu" #: ../sonata/main.py:270 msgid "Replace" msgstr "Zamianie" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "Us_uń..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Odtwarzanie losowe" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Odtwarzanie losowe" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Wyświetlanie głównego okna" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Zamień listę odtwarzania" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Powtarzanie" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Losowo" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Wg wykonawcy" #: ../sonata/main.py:475 msgid "By Album" msgstr "Wg albumu" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Wg tytułu utworu" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Wg nazwy pliku" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Wg katalogu i nazwy pliku" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Odwróć kolejność listy" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nowy..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Modyfikuj..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Nowa lista odtwarzania..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Zmień nazwę..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Kliknięcie rozwinie okno" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Kliknięcie zwinie okno" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Nie połączony" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Brak zezwolenia na odczyt" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "KOMPUTER_Z_MPD/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Rozłącz" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(aktualizowanie mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Obrazy" #: ../sonata/main.py:2197 msgid "All files" msgstr "Wszystkie pliki" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Nie odnaleziono nazwy albumu lub wykonawcy." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Nie odnaleziono okładek." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Usunąć zaznaczoną listę odtwarzania?" msgstr[1] "Usunąć zaznaczone listy odtwarzania?" msgstr[2] "Usunąć zaznaczone listy odtwarzania?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Usuń listę odtwarzania" msgstr[1] "Usuń listy odtwarzania" msgstr[2] "Usuń listy odtwarzania" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Usunąć zaznaczony strumień?" msgstr[1] "Usunąć zaznaczone strumienie?" msgstr[2] "Usunąć zaznaczone strumienie?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Usuń strumień" msgstr[1] "Usuń strumienie" msgstr[2] "Usuń strumienie" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Uruchomienie odpowiedniej przeglądarki niemożliwe." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Uruchom przeglądarkę" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Zapisz listę odtwarzania" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Istniejąca lista odtwarzania" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Zamień listę odtwarzania" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Dodaj utwory" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Zmień nazwę listy odtwarzania" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Nazwa pliku" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Tylko lokalne" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Używanie MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "KATALOG_Z_MUZYKĄ" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "własna" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Informacje wyświetlane tylko, jeśli wszystkie zawarte znaczniki są " "zdefiniowane" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Tworzenie kolumn w bieżącej liście odtwarzania" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Aby zapisywać teksty utworów do katalogu z plikiem muzycznym, proszę " "określić prawidłowy katalog z muzyką." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Sprawdzanie katalogu z muzyką" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Aby zapisywać okładki do katalogu z plikiem muzycznym, proszę określić " "prawidłowy katalog z muzyką." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nowy profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Modyfikuj strumień" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nowy strumień" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Strumień o tej nazwie już istnieje. Zastąpić go?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Brak modułu Taglib i/lub tagpy, obsługa modyfikowania znaczników wyłączona." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Modyfikowanie znaczników" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Wersja biblioteki Tagpy < 0.91, obsługa modyfikowania znaczników wyłączona." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "nie istnieje. Proszę określić prawidłowy katalog z muzyką w preferencjach." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" " nie odnaleziono. Proszę określić prawidłowy katalog z muzyką w " "preferencjach." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Brak utworów z możliwością modyfikacji znaczników." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Modyfikowanie znaczników" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Nie można zapisać znacznika w utworze." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Ukryj ścieżkę do pliku" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Wyświetl ścieżkę do pliku" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Elegancki odtwarzacz muzyki dla usługi MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Skróty" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Skróty" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filtr" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Tytuł" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Wykonawca" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Data" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Ścieżka" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Gatunek" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Nazwa pliku" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Gęstość bitowa" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Wyświetl wykonawcę w Wikipedii" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Wyświetl album w Wikipedii" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Przełączanie widoczności dodatkowych znaczników" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Modyfikacja znaczników utworu" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "modyfikuj znaczniki" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informacje o utworze" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Wyszukiwanie tekstów utworów na Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "szukaj" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Tekst utworu" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informacje o albumie" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Wyszukiwanie" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Zasady wyszukiwania" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Przerwij przeszukiwanie" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Nazwa listy odtwarzania" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Własna okładka" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Nazwa pliku okładki" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_O programie" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Konfiguruj..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Nazwa" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Komputer" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Proszę zostawić puste, jeśli hasło nie jest wymagane." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "_Hasło" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Wybór katalogu z muzyką" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "K_atalog z muzyką" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Automatyczne połączenie podczas uruchamiania" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Połączenie z usługą MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Przyciski odtwarzania/poziomu głośności" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Pa_sek postępu" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "Pase_k stanu" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Zasobnik systemowy" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Tekst utworu" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Zapisywanie tekstów utworów do:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Okładka albumu" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Styl okładek:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standardowy" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stylizowany" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Położenia wyszukiwania:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Tylko lokalne" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokalne i zdalne" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Zapisywanie okładek do:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Wyświetlanie" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Okno na wszystkich obszarach roboczych" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "O_kno programu Sonata powyżej innych okien" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Bez paska tytułowego okna" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "Mi_nimalizacja do zasobnika systemowego podczas zamykania" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Określa, czy zamykanie programu Sonata zminimalizuje okno do zasobnika " "systemowego. Obecnie nie jest możliwe wykrycie, czy system dysponuje " "zasobnikiem systemowym, więc należy się upewnić, że istnieje." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Określa, czy zamykanie programu Sonata zminimalizuje okno do zasobnika " "systemowego. Obecnie nie jest możliwe wykrycie, czy system dysponuje " "zasobnikiem systemowym, więc należy się upewnić, że istnieje." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Zachowanie okna" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Aktualizowanie kolekcji usługi MPD podczas uruchamiania" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Określa, czy program Sonata będzie automatycznie aktualizować bibliotekę " "usługi MPD podczas uruchamiania." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_Zatrzymywanie odtwarzania przy zakończeniu" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "Usługa MPD pozwala na odtwarzanie nawet gdy klient nie jest otwarty. " "Określa, czy program Sonata będzie zachowywać się jak bardziej " "konwencjonalny odtwarzacz i będzie zatrzymywać odtwarzanie po zakończeniu." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Zapi_sywanie pliku stanu:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Określa, czy program Sonata utworzy plik typu xmms-infopipe zawierający " "informacje o bieżącym utworze. Wiele aplikacji obsługuje plik xmms-info " "(komunikatory, klienty IRC...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Różne" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Zachowanie" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Bieżąca lista odtwarzania:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Kolekcja:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Tytuł okna:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Bi_eżący utwór wiersz 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Bieżą_cy utwór wiersz 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Dostępne opcje" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formatowanie utworów" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Nazwa użytkownika:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Hasło:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "_Wyskakujące powiadamianie o zmianie utworu" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Zasobnik systemowy" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Górny lewy" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Górny prawy" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Dolny lewy" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Dolny prawy" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Środek ekranu" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "_Płynne przejścia" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Długość wyciszania" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Dodatki" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Włączenie" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Opis" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Wybierz okładkę albumu" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Modyfikuj zasady wyszukiwania" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Okładka albumu" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Otwórz obraz" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Wyszukiwanie tekstów utworów" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Nazwa wykonawcy" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Tytuł utworu" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Lista odtwarzania" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Nazwa strumienia" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL strumienia" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Z_apisz wszystko" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Rok" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Komentarz" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/pt_BR.po������������������������������������������������������������������0000664�0000000�0000000�00000114062�15003420405�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Alex Tercete Matos <alextercete@gmail.com> msgid "" msgstr "" "Project-Id-Version: Sonata 1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2007-10-25 00:15-0300\n" "Last-Translator: Alex Tercete Matos <alextercete@gmail.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Sobre o Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Preferências" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "" #: ../sonata/about.py:60 #, fuzzy msgid "Switch to [1st-5th] tab" msgstr "Alternar para os streams" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Conectar ao servidor MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Desconectar do servidor MPD" #: ../sonata/about.py:63 #, fuzzy msgid "Randomize current playlist" msgstr "Lista de reprodução atual:" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Expandir o reprodutor de músicas" #: ../sonata/about.py:65 #, fuzzy msgid "Switch to previous tab" msgstr "Alternar para as listas de reprodução" #: ../sonata/about.py:66 #, fuzzy msgid "Switch to next tab" msgstr "Alternar para os streams" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Recolher o reprodutor de músicas" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 #, fuzzy msgid "Search library" msgstr "Alternar para a biblioteca" #: ../sonata/about.py:69 msgid "Quit" msgstr "Sair" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Atualizar toda a biblioteca" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Mostrar o menu" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Enviar para a área de notificação (se habilitada)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Faixa anterior" #: ../sonata/about.py:75 msgid "Next track" msgstr "Próxima faixa" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Reproduzir/Pausar" #: ../sonata/about.py:77 msgid "Stop" msgstr "Parar" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Abaixar o volume" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Aumentar o volume" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Reproduzir a música selecionada" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Remover as música(s) selecionada(s)" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Concentrar a música atual em execução" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Editar as tags das músicas selecionadas" #: ../sonata/about.py:85 #, fuzzy msgid "Save to new playlist" msgstr "Salvar lista de reprodução" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Limpar lista de reprodução" #: ../sonata/about.py:87 #, fuzzy msgid "Randomize list" msgstr "Renomear lista de reprodução" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Adicionar a(s) música(s) selecionada(s) ou entra no diretório" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Voltar para o diretório anterior" #: ../sonata/about.py:91 #, fuzzy msgid "Add selected item(s)" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/about.py:92 #, fuzzy msgid "Replace with selected item(s)" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: ../sonata/about.py:94 #, fuzzy msgid "Add selected item(s) and play" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/about.py:95 #, fuzzy msgid "Replace with selected item(s) and play" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: ../sonata/about.py:96 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Adicionar a(s) lista(s) de reprodução selecionada(s)" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Remover a(s) lista(s) de reprodução selecionada(s)" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Substituir pela(s) lista(s) de reprodução selecionada(s)" #: ../sonata/about.py:102 #, fuzzy msgid "Add selected playlist(s) and play" msgstr "Adicionar a(s) lista(s) de reprodução selecionada(s)" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Remover o(s) stream(s) selecionado(s)" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: ../sonata/about.py:110 #, fuzzy msgid "Add selected stream(s) and play" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/about.py:114 #, fuzzy msgid "Edit playing song's tags" msgstr "Editar as tags das músicas selecionadas" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Atalhos principais" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Atalhos de reprodução" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Atalhos da lista de reprodução atual" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Atalhos da biblioteca" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Atalhos das listas de reprodução" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Atalhos dos streams" #: ../sonata/about.py:123 #, fuzzy msgid "Info Shortcuts" msgstr "Atalhos principais" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "hora de êxtase" msgstr[1] "horas de êxtase" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "hora de êxtase" msgstr[1] "horas de êxtase" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Uso: sonata [OPÇÃO]" #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Comentário" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Reproduz a música na lista de reprodução" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pausa a música atualmente em execução" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Para a música atualmente em execução" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Reproduz a próxima música na lista de reprodução" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Reproduz a música anterior na lista de reprodução" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Reproduz/pausa; Reproduz a música se estiver parado" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Ativa/desativa o modo de repetição" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Ativa/desativa o modo de repetição" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Mostra informações da música atualmente em execução" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Mostra o status do servidor MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Mostrar notificação ao trocar de música" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "para a área de notificação (requer D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "para a área de notificação (requer D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Inicia a aplicação oculta (requer área de notificação)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Inicia a aplicação visível (requer área de notificação)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Inicia com o perfil [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "O argumento -t, --toggle necessita do D-Bus. Abortando." #: ../sonata/cli.py:149 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Iniciando o Sonata com o perfil" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "" #: ../sonata/cli.py:155 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Número de perfil inválido. O número deve estar entre 1 e" #: ../sonata/cli.py:175 ../sonata/main.py:172 #, fuzzy msgid "Default Profile" msgstr "Novo perfil" #: ../sonata/cli.py:176 msgid "by" msgstr "" #: ../sonata/cli.py:176 msgid "from" msgstr "" #: ../sonata/cli.py:199 #, fuzzy msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Não foi possível se conectar ao servidor MPD.\n" "Por favor verifique suas preferências do Sonata." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Título" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artista" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Álbum" #: ../sonata/cli.py:241 msgid "Date" msgstr "Data" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Faixa" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Gênero" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Arquivo" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Tempo" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Taxa de bits" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD parado" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Reproduzindo" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pausado" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Parado" #: ../sonata/cli.py:271 msgid "State" msgstr "Estado" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Repetir" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Ativado" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Desativado" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Aleatório" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volume" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Esvaecimento" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 #, fuzzy msgid "second" msgid_plural "seconds" msgstr[0] "segundo" msgstr[1] "segundo" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "O Sonata falhou ao se conectar à sessão bus do D-BUS: Não foi possível " "determinar o endereço da mensagem bus (tente os comandos 'man dbus-launch' e " "'man dbus-daemon' para obter ajuda)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:140 #, fuzzy msgid "Starting Sonata instead..." msgstr "Iniciando o Sonata com o perfil" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Uma instância do Sonata já está em execução." #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Desconhecido" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Nome do artista" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Nome do álbum" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Nome da faixa" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Nº da faixa" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "Nº" #: ../sonata/formatting.py:123 #, fuzzy msgid "Disc number" msgstr "Nº da faixa" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Ano" #: ../sonata/formatting.py:126 #, fuzzy msgid "File path" msgstr "O arquivo " #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Caminho" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Nome do arquivo" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Nome do stream" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Stream" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Duração da música" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Duração" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Tempo decorrido (título apenas)" #: ../sonata/info.py:200 msgid "hide" msgstr "" #: ../sonata/info.py:203 msgid "more" msgstr "" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Nome do álbum não especificado." #: ../sonata/info.py:291 #, fuzzy msgid "Album info not found." msgstr "Nome do álbum não especificado." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Letra da música não encontrada" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Buscando letra da música..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Letra da música não encontrada" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Artistas variados" #: ../sonata/library.py:79 msgid "Untagged" msgstr "" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nome" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Todos" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Sistema de arquivos" #: ../sonata/library.py:159 #, fuzzy msgid "Albums" msgstr "Álbum" #: ../sonata/library.py:161 #, fuzzy msgid "Artists" msgstr "Artista" #: ../sonata/library.py:163 #, fuzzy msgid "Genres" msgstr "Gênero" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Toda a música" msgstr[1] "Toda a música" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "segundo" msgstr[1] "segundo" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuto" msgstr[1] "minutos" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 #, fuzzy msgid "Song" msgstr "música" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Atual" #: ../sonata/main.py:94 msgid "Library" msgstr "Biblioteca" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Listas de reprodução" #: ../sonata/main.py:96 msgid "Streams" msgstr "Streams" #: ../sonata/main.py:97 #, fuzzy msgid "Info" msgstr "Informações da música" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Toda a música" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Ordenar lista de reprodução" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Conexão" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 #, fuzzy msgid "_Update" msgstr "_Atualizar biblioteca" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Usar imagem _remota" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Usar imagem _local" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:237 #, fuzzy msgid "Reset Image" msgstr "Abrir imagem" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Reproduzir" #: ../sonata/main.py:241 #, fuzzy msgid "Pa_use" msgstr "_Pausar" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Parar" #: ../sonata/main.py:245 #, fuzzy msgid "Pre_vious" msgstr "_Anterior" #: ../sonata/main.py:247 msgid "_Next" msgstr "Pró_xima" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Sair" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Remover" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Limpar" #: ../sonata/main.py:255 #, fuzzy msgid "_Entire Library" msgstr "_Atualizar biblioteca" #: ../sonata/main.py:257 #, fuzzy msgid "_Selected Items" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Preferências" #: ../sonata/main.py:261 msgid "_About..." msgstr "_Sobre..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Editar tags..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Adicionar" #: ../sonata/main.py:266 msgid "_Replace" msgstr "Su_bstituir" #: ../sonata/main.py:268 #, fuzzy msgid "Add" msgstr "_Adicionar" #: ../sonata/main.py:270 #, fuzzy msgid "Replace" msgstr "Su_bstituir" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Apagar..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Embaralhar" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Embaralhar" #: ../sonata/main.py:315 #, fuzzy msgid "S_how Sonata" msgstr "_Mostrar o Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Renomear lista de reprodução" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Repetir" #: ../sonata/main.py:321 #, fuzzy msgid "Rando_m" msgstr "Aleatório" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Por artista" #: ../sonata/main.py:475 msgid "By Album" msgstr "Por álbum" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Por título da faixa" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Por nome de arquivo" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Por diretório e nome de arquivo" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Inverter lista" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Novo..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Editar..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "_Salvar lista de reprodução" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Renomear..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Clique para expandir" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Clique para recolher" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Não conectado" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Desconectar" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(atualizando mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Imagens" #: ../sonata/main.py:2197 msgid "All files" msgstr "Todos os arquivos" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Artista ou nome do álbum não encontrados." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Capa não encontrada." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Apagar a lista de reprodução selecionada?" msgstr[1] "Apagar as listas de reprodução selecionadas?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Apagar lista de reprodução" msgstr[1] "Apagar listas de reprodução" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Apagar o stream selecionado?" msgstr[1] "Apagar os streams selecionados?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Apagar stream" msgstr[1] "Apagar streams" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Não foi possível abrir um navegador compatível." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Abrir navegador" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Salvar lista de reprodução" #: ../sonata/playlists.py:156 #, fuzzy msgid "Existing Playlist" msgstr "Lista de reprodução" #: ../sonata/playlists.py:157 #, fuzzy msgid "Replace playlist" msgstr "Renomear lista de reprodução" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Renomear lista de reprodução" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Arquivo" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Local, apenas" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 #, fuzzy msgid "custom" msgstr "nome personalizado" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informação exibida apenas se todas as tags englobadas estão definidas" #: ../sonata/preferences.py:393 #, fuzzy msgid "Creates columns in the current playlist" msgstr "Lista de reprodução atual:" #: ../sonata/preferences.py:438 #, fuzzy msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "você deve especificar um diretório de músicas válido" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 #, fuzzy msgid "Music Dir Verification" msgstr "Verificação de Audioscrobbler" #: ../sonata/preferences.py:445 #, fuzzy msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "você deve especificar um diretório de músicas válido" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Novo perfil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Editar stream" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Novo stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Um stream com esse nome já existe. Você gostaria de substituir o atual?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib e/ou tagpy não foram encontrados. O suporte à edição de tags foi " "desabilitado." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Editar tags" #: ../sonata/tagedit.py:124 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Taglib e/ou tagpy não foram encontrados. O suporte à edição de tags foi " "desabilitado." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "não existe. Por favor especifique um diretório de músicas válido nas " "preferências." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" " não foi encontrado. Por favor especifique um diretório de músicas válido " "nas preferências." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Não foram encontrados arquivos de música com tags editáveis." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Editar tags" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Não foi possível salvar a tag no arquivo de música." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "" #: ../sonata/tagedit.py:352 #, fuzzy msgid "Show file path" msgstr "O caminho" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Um refinado cliente de música para MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Atalhos" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Atalhos" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filtro" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Título" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Artista" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Álbum" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Data" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Faixa" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Gênero" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Arquivo" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Taxa de bits" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "" #: ../sonata/ui/info.glade.h:12 #, fuzzy msgid "Edit song tags" msgstr "Editar as tags das músicas selecionadas" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "Editar tags" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informações da música" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "Buscar" #: ../sonata/ui/info.glade.h:17 #, fuzzy msgid "Lyrics" msgstr "_Letra da música" #: ../sonata/ui/info.glade.h:18 #, fuzzy msgid "Album Info" msgstr "Inform_ações do álbum" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Buscar" #: ../sonata/ui/library.glade.h:3 #, fuzzy msgid "Search terms" msgstr "Editar termos da busca" #: ../sonata/ui/library.glade.h:10 #, fuzzy msgid "End Search" msgstr "_Finalizar busca" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Nome da lista de reprodução" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Capa personalizada" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Nome do arquivo de capa" #: ../sonata/ui/preferences.glade.h:3 #, fuzzy msgid "_About" msgstr "_Sobre..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "" #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "Nome" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "Servidor" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "Porta" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Deixe em branco caso nenhuma senha seja necessária." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Senha" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Pasta" #: ../sonata/ui/preferences.glade.h:13 #, fuzzy msgid "_Autoconnect on start" msgstr "Auto-conectar ao iniciar" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Conexão do servidor MPD" #: ../sonata/ui/preferences.glade.h:15 #, fuzzy msgid "MPD" msgstr "_MPD" #: ../sonata/ui/preferences.glade.h:16 #, fuzzy msgid "_Playback/volume buttons" msgstr "Habilitar os botões de reprodução/volume" #: ../sonata/ui/preferences.glade.h:17 #, fuzzy msgid "Pr_ogressbar" msgstr "Habilitar esvaecimento entre as músicas" #: ../sonata/ui/preferences.glade.h:18 #, fuzzy msgid "_Statusbar" msgstr "Habilitar a barra de status" #: ../sonata/ui/preferences.glade.h:19 #, fuzzy msgid "System _tray icon" msgstr "Área de notificação" #: ../sonata/ui/preferences.glade.h:20 #, fuzzy msgid "Song Ly_rics" msgstr "_Letra da música" #: ../sonata/ui/preferences.glade.h:21 #, fuzzy msgid "Save lyrics to:" msgstr "Salvar capa em:" #: ../sonata/ui/preferences.glade.h:23 #, fuzzy msgid "_Album art" msgstr "Nome do álbum" #: ../sonata/ui/preferences.glade.h:24 #, fuzzy msgid "Artwork style:" msgstr "Nome do arquivo de capa" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "" #: ../sonata/ui/preferences.glade.h:27 #, fuzzy msgid "Search locations:" msgstr "Buscar" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Local, apenas" #: ../sonata/ui/preferences.glade.h:29 #, fuzzy msgid "Local and remote" msgstr "Local, depois remota" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Salvar capa em:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Exibição" #: ../sonata/ui/preferences.glade.h:32 #, fuzzy msgid "_Show window on all workspaces" msgstr "Mostrar janela em todos os espaços de trabalho" #: ../sonata/ui/preferences.glade.h:33 #, fuzzy msgid "_Keep window above other windows" msgstr "Manter janela sobre as outras janelas" #: ../sonata/ui/preferences.glade.h:34 #, fuzzy msgid "_Hide window titlebar" msgstr "Título da janela:" #: ../sonata/ui/preferences.glade.h:35 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Enviar para a área de notificação ao fechar" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Se essa opção for habilitada, ao fechar o Sonata, ele será enviado para a " "área de notificação. Nota: atualmente é impossível detectar se existe uma " "área de notificação disponível, então apenas habilite se você tiver uma." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Se essa opção for habilitada, ao fechar o Sonata, ele será enviado para a " "área de notificação. Nota: atualmente é impossível detectar se existe uma " "área de notificação disponível, então apenas habilite se você tiver uma." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Comportamento da janela" #: ../sonata/ui/preferences.glade.h:39 #, fuzzy msgid "_Update MPD library on start" msgstr "Atualizar a biblioteca do servidor MPD ao iniciar" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Se essa opção for habilitada, o Sonata irá automaticamente atualizar a " "biblioteca do seu servidor MPD ao iniciar." #: ../sonata/ui/preferences.glade.h:41 #, fuzzy msgid "S_top playback on exit" msgstr "Parar reprodução ao sair" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "O servidor MPD permite reprodução de músicas mesmo que o cliente não esteja " "aberto. Se essa opção for habilitada, o Sonata irá se comportar como um " "reprodutor de músicas convencional e para a reprodução ao sair." #: ../sonata/ui/preferences.glade.h:43 #, fuzzy msgid "_Write status file:" msgstr "Criar arquivo de status:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Se essa opção for habilitada, o Sonata irá criar um arquivo com o xmms-" "infopipe contendo informações sobre a música atual. Muitas aplicações " "suportam esse arquivo (mensageiros instantâneos, clientes IRC...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Miscelânea" #: ../sonata/ui/preferences.glade.h:46 #, fuzzy msgid "Behavior" msgstr "_Comportamento" #: ../sonata/ui/preferences.glade.h:47 #, fuzzy msgid "C_urrent playlist:" msgstr "Lista de reprodução atual:" #: ../sonata/ui/preferences.glade.h:48 #, fuzzy msgid "_Library:" msgstr "Biblioteca:" #: ../sonata/ui/preferences.glade.h:49 #, fuzzy msgid "_Window title:" msgstr "Título da janela:" #: ../sonata/ui/preferences.glade.h:50 #, fuzzy msgid "Current _song line 1:" msgstr "Música atual (1ª linha):" #: ../sonata/ui/preferences.glade.h:51 #, fuzzy msgid "Current s_ong line 2:" msgstr "Música atual (2ª linha):" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Opções disponíveis" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formato das músicas" #: ../sonata/ui/preferences.glade.h:54 #, fuzzy msgid "Format" msgstr "_Formato" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: ../sonata/ui/preferences.glade.h:56 #, fuzzy msgid "_Username:" msgstr "Usuário:" #: ../sonata/ui/preferences.glade.h:57 #, fuzzy msgid "_Password:" msgstr "Senha:" #: ../sonata/ui/preferences.glade.h:58 #, fuzzy msgid "Popup _notification on song changes" msgstr "Mostrar notificação ao trocar de música" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Área de notificação" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Superior à esquerda" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Superior à direita" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Inferior à esquerda" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Inferior à direita" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "" #: ../sonata/ui/preferences.glade.h:66 #, fuzzy msgid "C_rossfade" msgstr "Esvaecimento" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Duração do efeito" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "segundos" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extras" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Habilitar esvaecimento entre as músicas" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Escolha a capa" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Editar termos da busca" #: ../sonata/ui/sonata.glade.h:5 #, fuzzy msgid "Cover Art" msgstr "_Capa" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Abrir imagem" #: ../sonata/ui/sonata.glade.h:7 #, fuzzy msgid "Lyrics Search" msgstr "_Letra da música" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Nome do artista" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Título da música" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Lista de reprodução" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Nome do stream" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL do stream" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Salvar _todos" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Ano" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Comentário" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/ru.po���������������������������������������������������������������������0000664�0000000�0000000�00000131477�15003420405�0016646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: # Jonathan Ballet <jon@multani.info>, 2021 # Sergey Shlyapugin <shlyapugin@gmail.com>, 2021 # Stanislav <dolphinstkom@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2021-08-09 08:38+0000\n" "Last-Translator: Stanislav <dolphinstkom@gmail.com>, 2021\n" "Language-Team: Russian (https://www.transifex.com/multani/teams/15398/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "О программе Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Диалог настройки" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Полноэкранный режим" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Переключиться на [1-ю - 5-ю] вкладку" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Подключиться к MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Отключиться от MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Перемешать текущий список" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Развернуть плеер" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Предыдущая вкладка" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Следующая вкладка" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Свернуть плеер" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Поиск в фонотеке" #: ../sonata/about.py:69 msgid "Quit" msgstr "Выйти" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Обновить фонотеку" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Показать всплывающее меню" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Свернуть в трей (если включено)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Предыдущая песня" #: ../sonata/about.py:75 msgid "Next track" msgstr "Следующая песня" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Воспроизведение/пауза" #: ../sonata/about.py:77 msgid "Stop" msgstr "Остановить" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Понизить громкость" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Повысить громкость" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Воспроизвести выделенную песню" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Удалить выбранные песни" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Центрировать текущую песню" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Редактировать теги выбранной записи" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Сохранить в новый список" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Очистить список" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Перемешать список" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Добавить отмеченные песни или войти в каталог" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Перейти в родительский каталог" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Добавить выделенные позиции" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Заменить выбранными позициями" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Добавить выделенные позиции и проиграть" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Заменить выбранными позициями и проиграть" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Обновить выделенные позиции/пути" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Добавить выделенные списки" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Удалить выделенные списки" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Заменить выделенными списками" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Добавить выделенные списки и проиграть" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Добавить выделенные потоки" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Удалить выделенные потоки" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Заменить выделенными потоками" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Добавить выделенные потоки и проиграть" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Править теги воспроизводимой записи" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Основные горячие клавиши" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Воспроизведение" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Текущий список" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Фонотека" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Списки воспроизведения" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Потоки" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Информация" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} песня." msgstr[1] "{count} песни." msgstr[2] "{count} песен." msgstr[3] "{count} песен." #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} альбом." msgstr[1] "{count} альбома." msgstr[2] "{count} альбомов." msgstr[3] "{count} альбомов." #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} исполнитель." msgstr[1] "{count} исполнителей." msgstr[2] "{count} исполнителей." msgstr[3] "{count} исполнителей." #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} день блаженства." msgstr[1] "{count} дня блаженства." msgstr[2] "{count} дней блаженства." msgstr[3] "{count} дней блаженства." #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} час блаженства." msgstr[1] "{count} часа блаженства." msgstr[2] "{count} часов блаженства." msgstr[3] "{count} часов блаженства." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [ОПЦИЯ]... [КОМАНДА]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "Команды:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "воспроизвести песню из ротации" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "приостановить воспроизведение песни" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "остановить воспроизведение песни" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "перейти к следующей песне в ротации" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "перейти к предыдущей песне в ротации" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "" "переключить воспроизведение/паузу; начать воспроизведение, если остановлено" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "переключить режим повтора" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "переключить случайное воспроизведение" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "отобразить информацию о текущей песне" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "отобразить состояние MPD" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "всплывающее уведомление (необходим D-Bus)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "свернуть приложение в трей / развернуть из трея (необходим D-Bus)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "перейти в полноэкранный режим (необходим D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "не запускать приложение, если команды D-Bus потерпели неудачу" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "запустить приложение скрытым (необходим трей)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "запустить приложение видимым (необходим трей)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "запустить с профилем NUM" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "запустить приложение посредством интерактивной оболочки (ipython)" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "Увеличить детализацию журнала" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "Уменьшить детализацию журнала" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "неизвестная команда %s" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "всплывающим и переключающим опциям необходим D-Bus. Отмена." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Запуск Sonata с профилем %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d не является доступным номером профиля." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Номер профиля должен быть между 1 и %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Основной профиль" #: ../sonata/cli.py:176 msgid "by" msgstr "от" #: ../sonata/cli.py:176 msgid "from" msgstr "из" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Ошибка подключения к MPD.\n" "Проверьте параметры Sonata либо переменные окружения MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Название" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Исполнитель" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Альбом" #: ../sonata/cli.py:241 msgid "Date" msgstr "Дата" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Дорожка" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Жанр" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Файл" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Время" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Битрейт" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD остановлен" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Воспроизведение" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Приостановлено" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Остановлено" #: ../sonata/cli.py:271 msgid "State" msgstr "Состояние" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "Повтор:" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Вкл." #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Выкл." #: ../sonata/cli.py:275 msgid "Random:" msgstr "Случайным образом:" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Громкость" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Перекрестное затухание" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "секунда" msgstr[1] "секунды" msgstr[2] "секунд" msgstr[3] "секунд" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata не смогла подключиться к D-Bus: не удалось определить расположение " "шины сообщений (попробуйте 'man dbus-launch' и 'man dbus-daemon' для помощи)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Сбой при выполнении удаленных команд." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Запуск Sonata вместо этого..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Возможно, Sonata не запущена?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Неизвестно" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Исполнитель" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Альбом" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Название песни" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Номер дорожки" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Номер диска" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Год" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Путь к файлу" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Путь" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Название файла" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Название потока" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Поток" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Длительность песни" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Длина" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Прошедшее время (только в заголовке)" #: ../sonata/info.py:200 msgid "hide" msgstr "спрятать" #: ../sonata/info.py:203 msgid "more" msgstr "больше" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Альбом без названия." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Описание альбома не найдено." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Текст песни не найден" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Получение текста песни..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "Текст песни не найден." #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "Плагин получения текстов песен не включен." #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Сборник" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Без тегов" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Название файла" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Во всех" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Файловая система" #: ../sonata/library.py:159 msgid "Albums" msgstr "Альбомы" #: ../sonata/library.py:161 msgid "Artists" msgstr "Исполнители" #: ../sonata/library.py:163 msgid "Genres" msgstr "Жанры" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} песня" msgstr[1] "{count} песни" msgstr[2] "{count} песен" msgstr[3] "{count} песен" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} секунда" msgstr[1] "{count} секунды" msgstr[2] "{count} секунд" msgstr[3] "{count} секунд" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} минута" msgstr[1] "{count} минуты" msgstr[2] "{count} минут" msgstr[3] "{count} минут" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} час" msgstr[1] "{count} часа" msgstr[2] "{count} часов" msgstr[3] "{count} часов" #: ../sonata/library.py:1069 msgid "Song" msgstr "Песня" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "В ротации" #: ../sonata/main.py:94 msgid "Library" msgstr "Фонотека" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Списки" #: ../sonata/main.py:96 msgid "Streams" msgstr "Потоки" #: ../sonata/main.py:97 msgid "Info" msgstr "Информация" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "На всю песню" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "в исполнении %A из %B" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Сортировать список" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "Сохранить выделенное в" #: ../sonata/main.py:227 msgid "_Connection" msgstr "Соединение" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Играть после" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "Режим _воспроизведения" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Обновить" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Использовать изображение из _интернета..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Использовать _локальное изображение..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Полноэкранный режим" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Сбросить изображение" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Воспроизвести" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Пауза" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Остановить" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Назад" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Вперед" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Выйти" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Удалить" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Очистить" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Всю фонотеку" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Выделенные элементы" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Настройка..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_О программе..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Править теги..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Добавить" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Заменить" #: ../sonata/main.py:268 msgid "Add" msgstr "Добавить" #: ../sonata/main.py:270 msgid "Replace" msgstr "Заменить" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Удалить..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "В случайном порядке" #: ../sonata/main.py:275 msgid "Shuffle Albums" msgstr "Перемешать альбомы" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Показать Sonata" #: ../sonata/main.py:317 msgid "_Repeat playlist" msgstr "_Повторять список" #: ../sonata/main.py:319 msgid "Repeat s_ong" msgstr "_Повторять песню" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Случайно" #: ../sonata/main.py:323 msgid "Consume" msgstr "Удалять после проигрывания" #: ../sonata/main.py:473 msgid "By Artist" msgstr "По исполнителю" #: ../sonata/main.py:475 msgid "By Album" msgstr "По альбому" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "По названию" #: ../sonata/main.py:479 msgid "By File Name" msgstr "По названи файла" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "По каталогу и названию файла" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "В обратном порядке" #: ../sonata/main.py:524 msgid "_New..." msgstr "Создать..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Правка..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Новый список..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Переименовать..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "Включение нового плагина %s..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "Найден новый плагин %s." #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Развернуть" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Свернуть" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Нет соединения" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Чтение не разрешено" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Отключиться" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} день" msgstr[1] "{count} дней" msgstr[2] "{count} дней" msgstr[3] "{count} дней" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(обновление базы MPD)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Изображения" #: ../sonata/main.py:2197 msgid "All files" msgstr "Все файлы" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Исполнитель или альбом не найдены." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Обложка не найдена." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Удалить выбранный список?" msgstr[1] "Удалить выбранные списки?" msgstr[2] "Удалить выбранные списки?" msgstr[3] "Удалить выбранные списки?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Удалить список" msgstr[1] "Удалить списки" msgstr[2] "Удалить списки" msgstr[3] "Удалить списки" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Удалить выбранный поток?" msgstr[1] "Удалить выбранные потоки?" msgstr[2] "Удалить выбранные потоки?" msgstr[3] "Удалить выбранные потоки?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Удалить поток" msgstr[1] "Удалить потоки" msgstr[2] "Удалить потоки" msgstr[3] "Удалить потоки" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Не удалось запустить подходящий браузер." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Запустить браузер" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Сохранить список" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Список уже существует" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Заменить список" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Добавить песни" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Переименовать список" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "Процессы" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "Файлы" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "Сеть" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "Локальный MPD" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "Редактировать /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "Перезапустить службу MPD" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Используется MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "другое" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Информация отображается только при наличии всех включенных тегов" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Создать столбцы в текущем списке" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "" "Чтобы сохранять тексты песен в каталоги с файлами, надо правильно указать " "каталог с музыкой." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Проверка каталога с музыкой" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Чтобы сохранять обложки в каталоги с файлами, надо правильно указать каталог" " с музыкой." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Новый профиль" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Править поток" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Создать поток" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Поток с таким названием уже существует. Заменить его?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Библиотеки taglib и/или tagpy не найдены. Правка тегов отключена." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Править теги" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "" "Версия библиотеки tagpy < 0.91. Пожалуйста, обновите библиотеку. Правка " "тегов отключена." #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "Путь %s не существует. Пожалуйста, укажите правильный каталог с музыкой в " "диалоге настройки." #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "Файл '%s' не найден. Пожалуйста, укажите правильный каталог с музыкой в " "диалоге настройки." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Не найдено файлов с редактируемыми тегами." #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "Править теги - %s из %s" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Невозможно сохранить тег в файл." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Скрыть путь к файлу" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Показать путь к файлу" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata, элегантный GTK-клиент для Music Player Daemon\n" "Copyright © 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Прекрасный клиент для MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Горячие клавиши" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Горячие клавиши" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Фильтр:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Наименование:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Исполнитель:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Альбом:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "Дата:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "Дорожка:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Жанр:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "Файл:" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "Битрейт:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Поиск исполнителя в Википедии" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Поиск альбома в Википедии" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Дополнительные теги" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Правка тегов песни" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(править теги)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "О песне" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Поиск текста песни на Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(поиск)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Текст песни" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Об альбоме" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Поиск:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Условия поиска" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Завершить поиск" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Название списка:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Особая обложка" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Название файла обложки:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_О программе" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Настройка..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Название:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Хост:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Порт:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Оставьте поле пустым, если пароль не нужен." #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Выберите каталог с музыкой" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Каталог с музыкой:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "Подключаться при з_апуске" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Соединение с MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Кнопки воспроизведения и громкости" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Индикатор позиции" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Строка состояния" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Иконка в _трее" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Тексты песен" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Сохранять тексты песен в:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Обложка альбома" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Стиль обложки:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Обычная" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Стилизованная" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Место поиска:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Только локально" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Локально и удаленно" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Сохранять обложки в:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Отображение" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Показывать на всех рабочих _столах" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Поверх остальных окон" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Прятать заголовок окна" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Сворачивать в трей при закрытии/нажатии escape" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "" "Если выбрано, то при закрытии Sonata будет сворачиваться в трей. Имейте в " "виду, что на данный момент невозможно определить, есть ли у вас трей, так " "что отмечайте только если вы уверены, что он есть." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Если отмечено, при закрытии Sonata будет сворачиваться в трей. Имейте в " "виду, что на данный момент невозможно определить, есть ли у вас трей, так " "что отмечайте только если вы уверены, что он есть." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Поведение окна" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Обновлять фонотеку MPD при запуске" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "" "Если отмечено, Sonata будет автоматически обновлять фонотеку MPD при старте." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_Останавливать воспроизведение при выходе" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD позволяет проигрывание, даже если клиент не запущен. Если включено, " "Sonata будет похожа на обычный плеер с остановкой воспроизведения при " "выходе." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Записывать статус в файл:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Если отмечено, Sonata будет создавать XMMS-подобный файл информации о " "текущей песне. Такой файл используется многими приложениями (программы " "обмена мгновенными сообщениями, клиенты IRC...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Разное" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Поведение" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Текущий список:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Фонотека:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Заголовок окна:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Текущая _песня, строка 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Текущая п_есня, строка 2:" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>Доступные варианты:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Форматирование информации" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Форматирование" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Аудиоскробблинг (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Пользователь:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Всплывающее уведомле_ние при смене песни" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "В трее" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Слева вверху" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Справа вверху" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Слева внизу" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Справа внизу" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "По центру экрана" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "Пе_рекрестное затухание" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_Длительность затухания:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "сек" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Дополнительно" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Включено" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Описание" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Плагины" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Выбрать обложку" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Изменить условия поиска" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Обложка" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Открыть изображение" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Поиск текста песни" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Исполнитель:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Название песни:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Список" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Название потока:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "Адрес потока:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Сохранить _всё" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Год:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Комментарий:" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/sk.po���������������������������������������������������������������������0000664�0000000�0000000�00000112762�15003420405�0016631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovak translation of Sonata # Copyright (C) 2008 Sonata 'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # Robert Hartl <hartl.robert@gmail.com>, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: sonata svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-08-24 13:30+0200\n" "Last-Translator: Robert Hartl <hartl.robert@gmail.com>\n" "Language-Team: slovak <sk-i18n@lists.linux.sk>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "O programe Snata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Možnosti" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Obrázok na celú obrazovku" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Prepnúť na kartu [1-5]" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Pripojiť sa na MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Odpojiť od MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Náhodne zoradiť aktuálny zoznam" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Zväčšiť prehrávač" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Prejsť na predchádzajúcu kartu" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Prejsť na ďalšiu kartu" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Zmenšiť prehrávač" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Prehľadať knižnicu" #: ../sonata/about.py:69 msgid "Quit" msgstr "Koniec" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Aktualizovať celú knižnicu" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Zobraziť vyskakovacie okno" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Skryť do systémovej oblasti (ak je zapnutá)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Predchádzajúca skladba" #: ../sonata/about.py:75 msgid "Next track" msgstr "Ďalšia skladba" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Hrať/Pozastaviť" #: ../sonata/about.py:77 msgid "Stop" msgstr "Zastaviť" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Znížiť hlasitosť" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Zvýšiť hlasitosť" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Prehrať vybranú skladbu" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Zmazať vybrané skladby" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Umiestniť prehrávanú skladbu na stred" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Upraviť tagy vybranej skladby" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Uložiť nový zoznam skladieb" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Vymazať zoznam" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Náhodne zoradiť zoznam" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Pridať vybranú skladbu alebo vstúpiť do priečinku" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Ísť do nadradeného priečinku" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Pridať vybrané položky" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Prepísať vybranými položkami" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Pridať vybrané položky a prehrať" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Nahradiť vybranými položkami a prehrať" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Aktualizovať vybrané položky/cesty" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Pridať vybrané zoznamy skladieb" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Zmazať vybrané zoznam skladieb" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Nahradiť vybranými zoznamami skladieb" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Pridať označené zoznamy skladieb a prehrať" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Pridať vybrané streamy" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Zmazať vybrané streamy" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Nahradiť vybrané streamy" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Pridať vybrané streamy a prehrať" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Upraviť tagy prehrávenej skladby" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Hlavné skratky" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Skratky pre prehrávanie" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Skratky pre aktuálny zoznam skladieb" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Skratky pre knižnicu" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Skratky pre zoznam skladieb" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Skratky pre stream" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Skratky pre informácie" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "deň blaha" msgstr[1] "dni blaha" msgstr[2] "dní blaha" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "hodina blaha" msgstr[1] "hodiny blaha" msgstr[2] "hodín blaha" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Použitie: sonata [VOĽBA]... [PRÍKAZ]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Príkazy" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Prehrať skladbu v zozname skladieb" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pozastaviť prehrávanú skladbu" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Zastaviť prehrávanú skladbu" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Prehrať ďalšiu skladbu v zozname skladieb" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Prehrať predchádzajúcu skladbu v zozname skladieb" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Zmeniť prehrávanie/pozastavenie; ak je zastavené" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Prepnúť do módu opakovania" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Prepnúť do náhodného módu" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Zobraziť informácie o aktuálnej skladbe" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Zobraziť stav MPD" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Vyskakovacie oznámenie o skladbe (potrebuje D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "v systémovej oblasti alebo viditeľná (vyžaduje D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "v systémovej oblasti alebo viditeľná (vyžaduje D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Nespúšťať aplikáciu ak D-Bus príkaz zlyhá" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Spustiť aplikáciu skrytú (vyžaduje systray)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Spustiť aplikáciu viditeľnú (vyžaduje systray)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Spustiť s profilom [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Parameter toggle a popup vyžadujú D-Bus. Ruší sa." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Spustiť Sonatu s profilom %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d nie je dostupné číslo profilu." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Číslo profilu musí byť medzi 1 a %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Štandardný profil" #: ../sonata/cli.py:176 msgid "by" msgstr "od" #: ../sonata/cli.py:176 msgid "from" msgstr "z" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Nie je možné sa pripojiť s MPD.\n" "Prosím skontrolujte nastavenia Sonaty alebo premenné prostredie MPD_HOST/" "MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Názov" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Umelec" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Dátum" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Stopa" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Žáner" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Súbor" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Čas" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Dátový tok" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD zastavené" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Prehrávanie" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pozastavené" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Zastavené" #: ../sonata/cli.py:271 msgid "State" msgstr "Stav" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Opakovať" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "On" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Off" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Náhodne" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Hlasitosť" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Prelínanie" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekúnd" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata zlyhala pri spojovaní s D-BUS session bus: Nieje možné určiť adresu " "správy bus (skúste 'man-dbus-launch' a 'man dbus-deamon' pre pomocníka)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Zlyhalo spustenie vzdialených príkazov." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Spustiť Sonatu namiesto..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Možno je už Sonata spustená" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Neznámy" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Názov umelca" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Názov albumu" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Názov stopy" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Číslo stopy" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Číslo disku" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Rok" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Cesta k súboru" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Cesta" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Názov súboru" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Názov streamu" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Stream" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Dĺžka skladby" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Dĺžka" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Uplynulý čas (iba v názve)" #: ../sonata/info.py:200 msgid "hide" msgstr "skryť" #: ../sonata/info.py:203 msgid "more" msgstr "viac" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Meno albumu nie je nastavene." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Informácie o albume sa nenašli." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Text nie je dostupný" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Získavam text..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Text nie je dostupný" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Rôzny umelci" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Bez tagov" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Názov súboru" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Všetko" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Systém súborov" #: ../sonata/library.py:159 msgid "Albums" msgstr "Albumy" #: ../sonata/library.py:161 msgid "Artists" msgstr "Umelci" #: ../sonata/library.py:163 msgid "Genres" msgstr "Žánre" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Celá skladba" msgstr[1] "Celá skladba" msgstr[2] "Celá skladba" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekúnd" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minúta" msgstr[1] "minúty" msgstr[2] "minút" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Skladba" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Aktuálne" #: ../sonata/main.py:94 msgid "Library" msgstr "Knižnica" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Zoznamy skladieb" #: ../sonata/main.py:96 msgid "Streams" msgstr "Stramy" #: ../sonata/main.py:97 msgid "Info" msgstr "Informácie" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Celá skladba" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Zoradiť zoznam" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Vybrané položky" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Pripojenie" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Pr_ehrať po" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Aktualizovať" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Použiť _vzdialený obrázok" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Použiť _lokálny obrázok" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Celá obrazovka" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Vynulovať obrázok" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Prehrať" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "Poza_staviť" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Zastaviť" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Predchádzajúcu" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Ďalšiu" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Koniec" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Zmazať" #: ../sonata/main.py:253 msgid "_Clear" msgstr "Zmazať _všetko" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Celú knižnicu" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Vybrané položky" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Možnosti" #: ../sonata/main.py:261 msgid "_About..." msgstr "_O programe" #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Upraviť tagy..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Pridať" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Nahradiť" #: ../sonata/main.py:268 msgid "Add" msgstr "Pridať" #: ../sonata/main.py:270 msgid "Replace" msgstr "Nahradiť" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Zmazať..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Zamiešať" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Zamiešať" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "Zobraziť _Sonatu" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Nahradiť zoznam skladieb" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Opakovať" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Náhodne" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Podľa umelca" #: ../sonata/main.py:475 msgid "By Album" msgstr "Podľa albumu" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Podľa názvu skladby" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Podľa názvu súboru" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Podľa názvu súboru a priečinku" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Obrátiť zoznam" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nový..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Upraviť..." #: ../sonata/main.py:546 #, fuzzy msgid "_New Playlist..." msgstr "Uložiť zoznam skladieb" #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Premenovať..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klikni pre rozšírené zobrazenie" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klikni pre kompaktné zobrazenie" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Nepripojené" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Chýba právo na čítanie" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Odpojiť" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(aktualizuje sa mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Obrázky" #: ../sonata/main.py:2197 msgid "All files" msgstr "Všetky súbory" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Meno umelca alebo albumu nie je dostupné" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Obrázok albumu nie je dostupný" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Zmazať vybraný zoznam skladieb?" msgstr[1] "Zmazať vybrané zoznamy skladieb?" msgstr[2] "Zmazať vybrané zoznamy skladieb?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Zmazať zoznam skladieb" msgstr[1] "Zmazať zoznamy skladieb" msgstr[2] "Zmazať zoznamy skladieb" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Zmazať vybraný stream?" msgstr[1] "Zmazať vybrané streamy?" msgstr[2] "Zmazať vybrané streamy?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Zmazať stream" msgstr[1] "Zmazať streamy" msgstr[2] "Zmazať streamy" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Nie je možné spustiť vhodný prehliadač." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Spustiť prehliadač" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Uložiť zoznam skladieb" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Existujúci zoznam skladieb" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Nahradiť zoznam skladieb" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Pridať skladby" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Premenovať zoznam skladieb" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Súbor" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Iba lokálny" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Používam MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "ADRESÁR_SO_SKLADBOU" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "vlastný" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informácie zobrazené iba keď sú všetky priložené tagy definované" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Vytvorí stĺpce v aktuálnom zozname skladieb" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Pre uloženie textu do adresára s hudbou musíte zadať platný priečinok s " "hudbou." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Overenie priečinku s hudbou" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Pre uloženie obrázku do priečinku s hubou musíte uviesť platný adresár s " "hudbou" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nový profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Upraviť stram" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nový stream" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Stream s týmto názvom už existuje. Chcete ho prepísať?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Knižnica tagpy nie je dostupná. Podpora editácie tagov vypnutá." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Upraviť tagy" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Verzia knižnice Tagpy je staršia ako 0.91. Prosím aktualizujte na novšiu " "verziu. Podpora úpravy tagov je vypnutá." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "neexistuje. Prosím zadajte platný adresár s hudbou v nastaveniach." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "neexsituje. Prosím zadajte platný priečinok s hudbou v nastaveniach." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Nie sú dostupné súbory s upraviteľnými tagmi" #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Upraviť tagy" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Nemožno uložiť tag do hudobného súboru." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Skryť cestu k súboru" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Zobraziť cestu k súboru" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Elegantný klient pre MPD" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Skratky" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Skratky" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Názov" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Umelec" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Dátum" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Stopa" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Žáner" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Súbor" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Dátový tok" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Prejsť na umelca vo Wikipédii" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Prejsť na album vo Wikipédii" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Prepnúť dodatočné tagy" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Upraviť tagy skladby" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "upraviť tagy" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informácie o skladbe" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Vyhľadať text na Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "hľadať" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Text skladby" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informácie o albume" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Hľadať" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Hľadať výraz" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Ukončiť hľadanie" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Názov zoznam skladieb" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Vlastný obrázok albumu" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Názov obrázku albumu" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_O programe" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Nastaviť" #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Názov" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Host" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Nechať prázdne, ak sa heslo nevyžaduje." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "_Heslo" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Vybrať priečinok s hudbou" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Priečinok s _hudbou" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Automaticky pripojiť pri spustení" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Pripojenie k MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Tlačidlá prehrávania a hlasitosti" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Lišta priebehu" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Stavový riadok" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Ikona v systémovej oblasti" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Te_xt skladby" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Uložiť text do:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "Obrázok _albumu" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Štýl obrázku albumu:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Štandarný" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Štylizovaný" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Poradie hľadania:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Iba lokálny" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokálny a vzdialený" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Uložiť obrázok albumu ako:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Zobrazenie" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Zobraziť okno na všetkých plochách" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Podržať okno vždy navrchu" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Skryť titulok okna" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimalizovať do systémovej oblasti pri zavrení" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Ak je povolené, pri zatvorení bude Sonata iba minimalizovaná do systémovej " "oblasti. Teraz nie je možné zistiť, či je k dispozícii systémová oblasť, " "preto sa uistite, že je možné systémovú oblasť použiť." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Ak je povolené, pri zatvorení bude Sonata iba minimalizovaná do systémovej " "oblasti. Teraz nie je možné zistiť, či je k dispozícii systémová oblasť, " "preto sa uistite, že je možné systémovú oblasť použiť." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Správanie okna" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Aktualizovať knižnicu MPD pri spustení" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Ak je povolené, Sonata bude automaticky aktualizovať knižnicu MPD pri " "spustení." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Za_staviť prehrávanie pri vypnutí" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD umožňuje prehrávanie i keď klient nie je spustený. Pokiaľ je táto voľba " "zapnutá, Sonata sa môže správať ako bežné prehrávače a zastaviť prehrávanie " "pri ukončení." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Zapísať stav _do súboru:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Ak je povolené, Sonata vytvorí xmms-infopipe ako súbor obsahujúci informácie " "o aktuálnej skladbe. Mnoho aplikácií súbor xmms-info podporuje (Instant " "messanger, IRC klienty...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Rôzne" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Správanie" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Aktuálny zoznam skladieb" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Knižnica" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Titulok okna:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Aktuálna _skladba, riadok 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Aktuálna sk_ladba, riadok 1:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Dostupné voľby" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Formát skladby" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Formát" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Užívateľské meno:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "Heslo:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "_Vyskakovacie oznámenie pri zmene skladby" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Systémová oblasť" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Vľavo hore" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Vpravo hore" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Vľavo dole" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Vpravo dole" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Stred obrazovky" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "_Prelínanie" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Dĺžka prechodu" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Naviac" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Povolené" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Poznámka" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Zásuvné moduly" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Vybrať obrázok albumu" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Upraviť hľadaný výraz" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Obrázok albumu" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Otvoriť obrázok" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Hľadanie textu" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Meno umelca" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Názov skladby" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Zoznam súborov" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Názov streamu" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL streamu" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Uložiť _všetko" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Rok" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Komentár" ��������������multani-sonata-bf88fdc/po/sl.po���������������������������������������������������������������������0000664�0000000�0000000�00000113243�15003420405�0016625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: sonata 1.5.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-04-12 20:16+0100\n" "Last-Translator: Alan Pepelko <alan.pepelko@gmail.com>\n" "Language-Team: Slovenian <sl@li.org>\n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" "X-Poedit-Language: Slovenian\n" "X-Poedit-Country: SLOVENIA\n" "X-Poedit-SourceCharset: utf-8\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "O Sonati" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Nastavitve" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Celozaslonski način prikaza naslovnice" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Preklopi na [1st-5th] zavihek" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Vzpostavi povezavo z MPD-jem" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Prekini povezavo z MPD-jem" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Premešaj trenutni seznam predvajanja" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Razširi predvajalnik" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Preklopi na prejšnji zavihek" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Preklopi na naslednji zavihek" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Zožaj predvajalnik" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Išči po zbirki" #: ../sonata/about.py:69 msgid "Quit" msgstr "Končaj" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Posodobi celotno zbirko" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Prikaži popup meni" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Pomanjšaj v sistemski pult (če je omogočeno)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Predhodna sled" #: ../sonata/about.py:75 msgid "Next track" msgstr "Naslednja sled" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Predvajaj/Premor" #: ../sonata/about.py:77 msgid "Stop" msgstr "Ustavi" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Tišje" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Glasneje" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Predvajaj izbrano skladbo" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Odstrani izbrane skladbe" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Trenutno predvajano skladbo postavi v sredino" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Uredi oznake izbrane skladbe" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Shrani v nov seznam predvajanja" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Počisti seznam" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Premešaj seznam" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Dodaj izbrane skladbe ali vnesi imenik" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Pojdi na starševski imenik" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Dodaj izbrane predmete" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Zamenjaj z izbranimi predmeti" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Dodaj izbrane predmete in predvajaj" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Zamenjaj z izbranimi predmeti in predvajaj" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Posodobi izbrane predmete/poti" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Dodaj izbrane sezname predvajanja" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Odstrani izbrane sezname predvajanja" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Zamenjaj z izbranimi seznami predvajanja" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Dodaj izbrane sezname predvajanja in predvajaj" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Dodaj izbrane pretoke" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Odstrani izbrane pretoke" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Zamenjaj z izbranimi pretoki" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Dodaj izbrane tokove in predvajaj" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Uredi oznake predvajane skladbe" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Glavne bližnjice" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Bližnjice predvajanja" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Trenutne bližnjice" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Bližnjice zbirke" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Bližnjice seznama predvajanja" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Bližnjice pretokov" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Bližnjice informacij" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "dan blaženosti" msgstr[1] "dneva blaženosti" msgstr[2] "dnevi blaženosti" msgstr[3] "dni blaženosti" #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "ura blaženosti" msgstr[1] "uri blaženosti" msgstr[2] "ure blaženosti" msgstr[3] "ur blaženosti" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Uporaba: sonata [MOŽNOST] ... [UKAZ] ..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Ukazi" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Predvajaj skladbo v seznamu predvajanja" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Premor trenutno predvajane skladbe" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Ustavi trenutno predvajano skladbo" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Predvajaj naslednjo skladbo na seznamu" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Predvajaj prejšnjo skladbo na seznamu" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Nastavi ponavljajoče predvajanje" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Vklopi/izklopi naključno predvajanje" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Prikaži informacije o trenutni skladbi" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Prikaži stanje MPD-ja" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Popup obvestilo o skladbi (zahteva D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "v pult ali vidno (zahteva D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "v pult ali vidno (zahteva D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Zaženi aplikacijo skrito (zahteva systray)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Zaženi aplikacijo vidno (zahteva systray)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Začni s profilom [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Argumenta 'toggle' in 'popup' zahtevata D-Bus. Prekinitev." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Zaganjanje Sonate s profilom %s ..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "Številka profila %d ne obstaja." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Številke profilov morajo biti med 1 in %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Privzeti profil" #: ../sonata/cli.py:176 msgid "by" msgstr "od" #: ../sonata/cli.py:176 msgid "from" msgstr "z albuma" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Ne morem se povezati z MPD-jem.\n" "Prosim, preverite vaše nastavitve Sonate ali spremenljivke okolja MPD_HOST/" "MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Naslov" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Izvajalec" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Datum" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Sled" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Žanr" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Datoteka" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Čas" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitna hitrost" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD je ustavljen" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Predvajanje" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Premor" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Zaustavljen" #: ../sonata/cli.py:271 msgid "State" msgstr "Stanje" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Ponovi" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Vključeno" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Izključeno" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Naključno" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Glasnost" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Prelivanje" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundi" msgstr[2] "sekunde" msgstr[3] "sekund" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata ni mogla vzpostaviti povezave z D-BUS bus sejo: nemogoče je določiti " "naslov bus sporočil (za pomoč poskusite 'man dbus-launch' in 'man dbus-" "daemon')" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Oddaljenih ukazov ni bilo mogoče zagnati." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Morda Sonata ni zagnana?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Neznan" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Ime izvajalca" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Naslov albuma" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Naslov skladbe" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Številka sledi" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Številka diska" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Leto" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Pot do datoteke" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Pot" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Ime datoteke" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Ime pretoka" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Pretok" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Trajanje skladbe" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Len" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Ocenjen čas (samo naslov)" #: ../sonata/info.py:200 msgid "hide" msgstr "skrij" #: ../sonata/info.py:203 msgid "more" msgstr "več" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Naslov albuma ni določen." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Informacije o albumu niso bile najdene." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Besedila skladbe ni mogoče najti" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Prenašanje besedila skladbe ..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Besedila skladbe ni mogoče najti" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Različni izvajalci" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Neoznačen" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Ime datoteke" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Vse" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Datotečni sistem" #: ../sonata/library.py:159 msgid "Albums" msgstr "Albumi" #: ../sonata/library.py:161 msgid "Artists" msgstr "Izvajalci" #: ../sonata/library.py:163 msgid "Genres" msgstr "Žanri" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Celotna skladba" msgstr[1] "Celotna skladba" msgstr[2] "Celotna skladba" msgstr[3] "Celotna skladba" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekunda" msgstr[1] "sekundi" msgstr[2] "sekunde" msgstr[3] "sekund" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minuta" msgstr[1] "minuti" msgstr[2] "minute" msgstr[3] "minut" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Skladba" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Trenutno" #: ../sonata/main.py:94 msgid "Library" msgstr "Zbirka" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Seznami predvajanja" #: ../sonata/main.py:96 msgid "Streams" msgstr "Pretoki" #: ../sonata/main.py:97 msgid "Info" msgstr "Podrobnosti" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Celotna skladba" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Sortiraj seznam" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "i_zbrane predmete" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Povezava" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "P_redvajaj po" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Posodobi" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Uporabi _oddaljeno sliko ..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Uporabi _lokalno sliko ..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Celozaslonski način" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Ponastavi sliko" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Predvajaj" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Premor" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Ustavi" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Prejšnja" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Naslednja" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Izhod" #: ../sonata/main.py:251 msgid "_Remove" msgstr "Odst_rani" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Počisti" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "c_elotno zbirko" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "i_zbrane predmete" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Nastavitve ..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_O programu ..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Uredi oznake ..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Dodaj" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Zamenjaj" #: ../sonata/main.py:268 msgid "Add" msgstr "Dodaj" #: ../sonata/main.py:270 msgid "Replace" msgstr "Zamenjaj" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Izbriši ..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Premešaj" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Premešaj" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Pokaži Sonato" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Zamenjaj seznam predvajanja" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Ponovi" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "Naključ_no" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "po izvajalcu" #: ../sonata/main.py:475 msgid "By Album" msgstr "po albumu" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "po naslovu skladbe" #: ../sonata/main.py:479 msgid "By File Name" msgstr "po imenu datoteke" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "po imeniku in imenu datoteke" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Obrni seznam predvajanja" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Nova ..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Uredi ..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Nov seznam predvajanja ..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "P_reimenuj ..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Kliknite, da razširite" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Kliknite, da zožate" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Ni povezave" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Ni dovoljenja za branje" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_GOSTITELJ/VRATA" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Prekinitev povezave" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(posodabljam mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Slike" #: ../sonata/main.py:2197 msgid "All files" msgstr "Vse datoteke" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Izvajalec ali naslov albuma nista bila najdena." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Nobena naslovnica ni bila najdena" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Izbrišem izbrani seznam predvajanja?" msgstr[1] "Izbrišem izbrana seznama predvajanja?" msgstr[2] "Izbrišem izbrane sezname predvajanja?" msgstr[3] "Izbrišem izbrane sezname predvajanja?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Izbriši seznam predvajanja" msgstr[1] "Izbriši seznama predvajanja" msgstr[2] "Izbriši sezname predvajanja" msgstr[3] "Izbriši sezname predvajanja" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Izbrišem izbrani pretok?" msgstr[1] "Izbrišem izbrana pretoka?" msgstr[2] "Izbrišem izbrane pretoke?" msgstr[3] "Izbrišem izbrane pretoke?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Izbriši pretok" msgstr[1] "Izbriši pretoka" msgstr[2] "Izbriši pretoke" msgstr[3] "Izbriši pretoke" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Ne morem zagnati primernega brskalnika." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Zaženi brskalnik" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Shrani seznam predvajanja" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Obstoječ seznam predvajanja" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Zamenjaj seznam predvajanja" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Dodaj skladbe" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Preimenuj seznam predvajanja" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Datoteka" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "samo krajevno" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Uporabljam MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "po meri" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informacije so prikazane le, če so vse vključene oznake definirane" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Ustvari stolpce v trenutnem seznamu predvajanja" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Določiti morate veljaven glasbeni imenik, da bi lahko shranili besedilo " "skladbe v imenik glasbene datoteke. " #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Preverjanje verodostojnosti glasbenega imenika" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Določiti morate veljaven glasbeni imenik, da bi lahko shranili naslovnico v " "imenik glasbene datoteke." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Nov profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Uredi pretok" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Nov pretok" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Pretok s tem imenom že obstaja. Bi ga želeli zamenjati?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib in/ali tagpy nista bila najdena. Podpora za urejanje oznak izključena." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Uredi oznake" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Različica tagpy-ja je manjša od 0.91. Prosimo, nadgradite jo na novejšo " "različico. Podpora za urejanje oznak izključena." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "ne obstaja. Prosim, v nastavitvah določite veljaven glasbeni imenik." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " ni najden. Prosim, v nastavitvah določite veljaven glasbeni imenik." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Najdena ni bila nobena glasbena datoteka z možnostjo urejanja oznak." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Uredi oznake" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Nisem mogel shraniti oznak v glasbeno datoteko." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Skrij pot do datoteke" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Pokaži pot do datoteke" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Elegantni glasbeni odjemalec za MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Bližnjice" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Bližnjice" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Naslov" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Izvajalec" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Datum" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Sled" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Žanr" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Datoteka" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitna hitrost" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Odpri izvajalca v Wikipediji" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Odpri album v Wikipediji" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Vključi dodatne oznake" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Uredi oznake skladbe" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "uredi oznake" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Podatki o skladbi" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Preišči Lyricwiki.org za besedilo skladbe" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "išči" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Besedilo skladbe" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informacije o albumu" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Iskanje" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Iskalni nizi" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Konec iskanja" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Ime seznama predvajanja" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Poljubna naslovnica" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Ime datoteke naslovnice" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_O programu" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Prikroji ..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "I_me" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "G_ostitelj" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "V_rata" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Pustite prazno, če ni zahtevano geslo." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Ge_slo" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Izberite glasbeni imenik" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "_Glasbeni imenik" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "S_amodejno poveži ob zagonu" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD povezava" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "Gumb _predvajanja/glasnosti" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Vrsti_ca napredka" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "Vrstica stanja" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Ikona sistemskega pulta" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Besedilo skladbe" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Shrani besedilo skladbe v:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "N_aslovnica" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Slog naslovnice:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standardno" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stilizirano" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Išči lokacije:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "samo krajevno" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokalno, nato oddaljeno" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Shrani naslovnico v:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Prikaži" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Prikaži okno na v_seh delovnih površinah" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "Obdrži o_kno nad drugimi okni" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "Skrij _nazivno vrstico okna" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "Po_manjšaj v sistemski pult ob zaprtju/izhodu" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Če je omogočeno, se bo Sonata ob izhodu pomanjšala v sistemski pult. Podite " "pozorni na to, da je trenutno nemogoče zaznati, ali je sistemski pult " "dejansko omogočen, zato označite to možnost, če res deluje." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Če je omogočeno, se bo Sonata ob izhodu pomanjšala v sistemski pult. Podite " "pozorni na to, da je trenutno nemogoče zaznati, ali je sistemski pult " "dejansko omogočen, zato označite to možnost, če res deluje." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Obnašanje oken" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "Ob zagon_u posodobi MPD zbirko" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "Če je omogočeno, bo Sonata ob zagonu samodejno posodobila MPD zbirko." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Ob izhodu us_tavi predvajanje" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD omogoča predvajanje tudi, ko je odjemalec ustavljen. Če je omogočeno, bo " "Sonata delovala kot običajni predvajalnik glasbe in ustavila predvajanje ob " "izhodu iz programa." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Zapiši _datoteko stanja:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Če je omogočeno, bo Sonata ustvarila datoteko podobno xmms-infopipe, ki " "vsebuje informacije o trenutni skladbi. Veliko aplikacij podpira datoteko " "xmms-info (takojšnji sporočilniki, IRC odjemalci ...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Razno" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Obnašanje" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "Tren_utni seznam predvajanja:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Zbirka:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "Nazi_v okna:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "1. vr_stica trenutne skladbe:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "2. vr_stica trenutne skladbe:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Razpoložljive možnosti" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Način prikaza skladb" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Oblika" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "Pošiljanje skladb na Last.fm" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Uporabniško ime:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Geslo:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Popup o_bvestilo ob spremembi skladbe" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "sistemski pult" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "zgoraj levo" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "zgoraj desno" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "spodaj levo" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "spodaj desno" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "sredina zaslona" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "P_relivanje" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "_Trajanje pojemanja" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sek." #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Dodatno" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Omogoči prelivanje" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Opis" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Izberite naslovnico" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Uredi iskalni niz" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Naslovnica" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Odpri sliko" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Išči besedilo pesmi" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Izvajalec" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Skladba" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Seznam predvajanja" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Ime pretoka" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL pretoka" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Shrani _vse" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Leto" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Komentar" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/sv.po���������������������������������������������������������������������0000664�0000000�0000000�00000111173�15003420405�0016637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish translation for sonata. # Copyright (C) 2007, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the sonata package. # Unknown translator, 2008. # Daniel Nylander <po@danielnylander.se>, 2007, 2009. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2009-03-23 10:04+0100\n" "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Om Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Inställningar" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Omslag i helskärmsläge" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Växla mellan flikarna [1-5]" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "Anslut till MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "Koppla från MPD" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Blanda aktuell spellista" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Fäll ut spelaren" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "Växla till föregående flik" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "Växla till nästa flik" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Fäll in spelaren" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Sök i biblioteket" #: ../sonata/about.py:69 msgid "Quit" msgstr "Avsluta" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Uppdatera hela biblioteket" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Visa popupmeny" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Minimera till aktivitetsfältet (om aktiverad)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Föregående spår" #: ../sonata/about.py:75 msgid "Next track" msgstr "Nästa spår" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Spela upp/Gör paus" #: ../sonata/about.py:77 msgid "Stop" msgstr "Stoppa" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Sänk volymen" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Höj volymen" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Spela markerad låt" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Ta bort markerade låt(ar)" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Centrera låten som spelas" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Redigera taggar för markerad låt" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Spara som ny spellista" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Töm lista" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Blanda spellistan" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Lägg till markerade låt(ar) eller ange katalog" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Gå till föräldrakatalogen" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Lägg till markerade objekt" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Ersätt med markerade objekt" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Lägg till markerade objekt och spela upp" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Ersätt med markerade objekt och spela upp" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Uppdatera markerade objekt/sökväg(ar)" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Lägg till markerade spellistor" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Ta bort markerade spellistor" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Ersätt med markerade spellistor" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Lägg till markerade spellistor och spela upp" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Lägg till markerade ström(mar)" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Ta bort markerade ström(mar)" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Ersätt med markerade ström(mar)" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Lägg till markerade ström(mar) och spela upp" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Redigera taggar för aktuell låt" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Allmänna genvägar" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Uppspelningsgenvägar" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Aktuella genvägar" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Biblioteksgenvägar" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Spellistgenvägar" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Strömgenvägar" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Låtinformationsgenvägar" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:176 #, fuzzy, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "dag av fullständig lycka." msgstr[1] "dagar av fullständig lycka." #: ../sonata/about.py:180 #, fuzzy, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "timme av fullständig lycka." msgstr[1] "timmar av fullständig lycka." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Användning: sonata [FLAGGA]... [KOMMANDO]..." #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Kommandon" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Spela låt i spellistan" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Pausa för närvarande spelad låt" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Stoppa för närvarande spelad låt" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Spela nästa låt i spellistan" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Spela föregående låt i spellistan" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Växla spela/gör paus; spelar om stoppad" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Växla upprepningsläge" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Växla blandningsläge" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Visa information om aktuell låt" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "Visa MPD-status" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Popupnotifiering vid låtbyte (kräver D-Bus)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "till brickan eller synligt (kräver D-Bus)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "till brickan eller synligt (kräver D-Bus)" #: ../sonata/cli.py:79 #, fuzzy msgid "don't start app if D-Bus commands fail" msgstr "Starta inte program om D-Bus-kommandon misslyckas" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Starta programmet dolt (kräver systray)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Starta programmet synligt (kräver systray)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Starta med profil [NUM]" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Växlings- och popupargument kräver D-Bus. Avbryter." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Startar Sonata med profilen %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d är inte ett tillgängligt profilnummer." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profilnummer måste vara mellan 1 och %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Standardprofil" #: ../sonata/cli.py:176 msgid "by" msgstr "av" #: ../sonata/cli.py:176 msgid "from" msgstr "från" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Kunde inte ansluta till MPD.\n" "Kontrollera dina inställningar i Sonata eller miljövariablerna MPD_HOST/" "MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titel" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artist" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:241 msgid "Date" msgstr "Datum" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Spår" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Fil" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Tid" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitfrekvens" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD stoppad" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Spelar" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Pausad" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Stoppad" #: ../sonata/cli.py:271 msgid "State" msgstr "Tillstånd" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Upprepa" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "På" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Av" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Blanda" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Volym" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Toning" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "sekund" msgstr[1] "sekunder" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata misslyckades med att ansluta till D-BUS-sessionsbussen: Kunde inte " "fastställa adressen för meddelandebussen (prova med \"man dbus-launch\" och " "\"man dbus-daemon\" för hjälp)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Misslyckades med att köra fjärrkommandon." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Startar Sonata istället..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Kanske Sonata inte är igång?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Okänd" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Artistnamn" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Albumnamn" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Spårnummer" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Spårnummer" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "Nr" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Skivnummer" #: ../sonata/formatting.py:124 msgid "Year" msgstr "År" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Filsökväg" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Sökväg" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Filnamn" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Strömnamn" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Ström" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Låtlängd" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Speltid" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Speltid (endast titel)" #: ../sonata/info.py:200 msgid "hide" msgstr "dölj" #: ../sonata/info.py:203 msgid "more" msgstr "mer information" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Albumnamnet inte inställt." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Albuminformation hittades inte." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Låttexten hittades inte" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Hämtar låttexter..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Låttexten hittades inte" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Diverse artister" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Inte taggad" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Filnamn" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Allting" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Filsystem" #: ../sonata/library.py:159 msgid "Albums" msgstr "Album" #: ../sonata/library.py:161 msgid "Artists" msgstr "Artister" #: ../sonata/library.py:163 msgid "Genres" msgstr "Genrer" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Hela låten" msgstr[1] "Hela låten" #: ../sonata/library.py:965 #, fuzzy, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "sekund" msgstr[1] "sekunder" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, fuzzy, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "minut" msgstr[1] "minuter" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1069 msgid "Song" msgstr "Låt" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Aktuell" #: ../sonata/main.py:94 msgid "Library" msgstr "Bibliotek" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Spellistor" #: ../sonata/main.py:96 msgid "Streams" msgstr "Strömmar" #: ../sonata/main.py:97 msgid "Info" msgstr "Låtinformation" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Hela låten" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Sortera lista" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "_Markerade objekt" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Anslutning" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "_Spela efter" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Uppdatera" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Använd _fjärrbild..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Använd _lokal bild..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Helskärmsläge" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Återställ bild" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Spela" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Gör paus" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Stoppa" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "Före_gående" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Nästa" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Avsluta" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Ta bort" #: ../sonata/main.py:253 msgid "_Clear" msgstr "Tö_m" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "Hela _biblioteket" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Markerade objekt" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Inställningar..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Om..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "R_edigera taggar..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Lägg till" #: ../sonata/main.py:266 msgid "_Replace" msgstr "E_rsätt" #: ../sonata/main.py:268 msgid "Add" msgstr "Lägg till" #: ../sonata/main.py:270 msgid "Replace" msgstr "Ersätt" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Ta bort..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Blanda" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Blanda" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "V_isa Sonata" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Ersätt spellista" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Upprepa" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Blanda" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Efter artist" #: ../sonata/main.py:475 msgid "By Album" msgstr "Efter album" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Efter låttitel" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Efter filnamn" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Efter katalog- och filnamn" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Omvänd lista" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Ny..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "R_edigera..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Ny spellista..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Byt namn..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Klicka för att fälla ut" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Klicka för att fälla in" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Inte ansluten" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Saknar läsrättigheter" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_VÄRD/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Koppla från" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(uppdaterar mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Bilder" #: ../sonata/main.py:2197 msgid "All files" msgstr "Alla filer" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Inget artist- eller albumnamn hittades." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Ingen omslagsbild hittades." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Ta bort markerad spellista?" msgstr[1] "Ta bort markerade spellistor?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Ta bort spellista" msgstr[1] "Ta bort spellistor" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Ta bort markerade strömmar?" msgstr[1] "Ta bort markerade strömmar?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Ta bort ström" msgstr[1] "Ta bort strömmar" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Kunde inte starta en lämplig webbläsare." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Starta webbläsare" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Spara spellista" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Befintlig spellista" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Ersätt spellista" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Lägg till låtar" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Byt namn på spellista" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Fil" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Endast lokal" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Använder MPD_VÄRD/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "LÅTKAT" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "anpassad" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Information visas endast om alla bifogade taggar har definierats" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Skapar kolumner i den aktuella spellistan" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "För att spara låttexten till musikfilens katalog så måste du ange en giltig " "musikkatalog." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Verifikation av musikkatalog" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "För att spara omslag till musikfilens katalog så måste du ange en giltig " "musikkatalog." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Ny profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Redigera ström" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Ny ström" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "En ström med det här namnet finns redan. Vill du ersätta den?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib och/eller tagpy hittades inte, stöd för taggredigering har " "inaktiverats." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Redigera taggar" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy version < 0.91. Uppgradera till en senare version, stöd för " "taggredigering har inaktiverats." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "finns inte. Ange en giltig musikkatalog i inställningarna." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " finns inte. Ange en giltig musikkatalog i inställningarna." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Inga musikfiler med redigerbara taggar hittades." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Redigera taggar" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Kunde inte spara tagg till musikfil." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Dölj filsökväg" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Visa filsökväg" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "En elegant musikklient för MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Genvägar" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Genvägar" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Filter" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Titel" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Artist" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Album" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Datum" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Spår" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Genre" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Fil" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitfrekvens" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Öppna artisten i Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Öppna albumet i Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Växla mellan extra taggar" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Redigera låttaggar" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "redigera taggar" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Låtinformation" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Sök efter låttext via Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "sök" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Låttext" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Albuminformation" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "Sök" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Söktermer" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Avsluta sökning" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Spellistans namn" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Anpassat omslag" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Filnamn för omslagsbild" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_Om" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Konfigurera..." #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "_Namn" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "_Värd" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "_Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Lämna blank om inget lösenord krävs." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "L_ösenord" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Välj en musikkatalog" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Musikkatal_og" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Anslut automatiskt vid uppstart" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD-anslutning" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "Knappar för _uppspelning/volym" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Förlo_ppsmätare" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Statusrad" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Aktivitets_fältsikon" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "Låt_text" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Spara låttext till:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "Album_omslag" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Stil på omslagsbild:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Stiliserad" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Sökplatser:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Endast lokal" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Lokal och fjärr" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Spara omslag till:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Visa" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Visa fönstret på alla arbetsytor" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Håll fönstret ovanför andra fönster" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Dölj fönstrets titellist" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Minimera till aktivitetsfält vid stängning" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Om aktiverad kommer en stängning av Sonata att minimera den till " "meddelandefältet. Observera att det för närvarande inte är möjligt att " "identifiera om det verkligen finns ett meddelandefält. Använd endast den här " "funktionen om du har ett meddelandefält." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Om aktiverad kommer en stängning av Sonata att minimera den till " "meddelandefältet. Observera att det för närvarande inte är möjligt att " "identifiera om det verkligen finns ett meddelandefält. Använd endast den här " "funktionen om du har ett meddelandefält." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Fönsterbeteende" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Uppdatera MPD-biblioteket vid uppstart" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Om aktiverad kommer Sonata att automatiskt uppdatera ditt MPD-bibliotek när " "den startar upp." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "S_toppa uppspelning vid avslut" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD tillåter uppspelning även när klienten inte är öppnad. Om aktiverad " "kommer Sonata att bete sig mer som en vanlig musikspelare och istället " "stoppa uppspelningen vid avslut." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "S_kriv statusfil:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Om aktiverad kommer Sonata att skapa en xmms-infopipe-liknande fil som " "innehåller information om den aktuella låten. Många program har stöd för " "xmms-info-filer (snabbmeddelandeklienter, IRC-klienter...)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Diverse" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Beteende" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "A_ktuell spellista:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Bibliotek:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "F_önstertitel:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Aktuell _låt rad 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Aktuell l_åt rad 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Tillgängliga alternativ" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Låtformatering" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Användarnamn:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Lösenord:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Popup_notifiering vid låtbyte" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Aktivitetsfält" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Övre vänster" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Övre höger" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Nedre vänster" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Nedre höger" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Mitten av skärmen" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "Ko_rstoning" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Ton_ingslängd" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "s" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extrafunktioner" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Aktivera" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Beskrivning" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Välj omslagsbild" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Redigera söktermer" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Omslagsbild" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Öppna bild" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Sök låttext" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Artistnamn" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Låttitel" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Spellista" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Strömnamn" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "URL för ström" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Spara _alla" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "År" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Kommentar" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/tr.po���������������������������������������������������������������������0000664�0000000�0000000�00000111367�15003420405�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Turkish translaitons for sonata package. # Copyright (C) 2008 THE sonata'S COPYRIGHT HOLDER # This file is distributed under the same license as the sonata package. # # Gökmen Görgen <gkmngrgn@gmail.com>, 2008. # Fatih Altınok <photonia@gmail.com>, 2008. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.5.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2008-05-17 21:04+0200\n" "Last-Translator: Gökmen Görgen <gkmngrgn@gmail.com>\n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Fatih Altınok <photonia@gmail.com>\n" "Plural-Forms: nplurals=1; plural=0;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Sonata Hakkında" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Tercihler" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "[1-5]'inci sekmeye geç" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "MPD'ye bağlan" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "MPD bağlantısını kes" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Çalma listesini karıştır" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Çalıcıyı genişlet" #: ../sonata/about.py:65 #, fuzzy msgid "Switch to previous tab" msgstr "[1-5]'inci sekmeye geç" #: ../sonata/about.py:66 #, fuzzy msgid "Switch to next tab" msgstr "[1-5]'inci sekmeye geç" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Çalıcıyı daralt" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Kitaplıkta ara" #: ../sonata/about.py:69 msgid "Quit" msgstr "Kapat" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Tüm kütüphaneyi güncelle" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Bilgilendirme penceresini göster" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Sistem çekmecesine yerleş (eğer etkinse)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Önceki şarkı" #: ../sonata/about.py:75 msgid "Next track" msgstr "Sonraki şarkı" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Çal/Duraklat" #: ../sonata/about.py:77 msgid "Stop" msgstr "Durdur" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Sesi azalt" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Sesi yükselt" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Seçili şarkıyı çal" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Seçili şarkı(lar)ı sil" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Çalınan şarkıyı ortaya getir" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Seçili şarkının etiketlerini düzenle" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Yeni çalma listesine kaydet" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Listeyi temizle" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Listeyi karıştır" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Seçili şarkı(lar)ı ekle veya dizin gir" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Üst dizine git" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Seçili olan(lar)ı ekle" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Seçili olan(lar)la değiştir" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Seçili olan(lar)ı ekle ve çal" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Seçili olan(lar)la değiştir ve çal" #: ../sonata/about.py:96 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Seçili olan(lar)ı ekle" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Seçili çalma listesini/listelerini ekle" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Seçili çalma listesini/listelerini sil" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Seçili şarkı listesi/listeleri ile değiştir" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Seçili şarkı listesi/listelerini ekle ve çal" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Seçili yayın(lar)ı ekle" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Seçili yayın(lar)ı sil" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Seçili yayın(lar) ile değiştir" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Seçili yayın(lar)ı ekle ve çal" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Çalan şarkının etiketlerini düzenle" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Ana Kısayollar" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Çalma Kısayolları" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Geçerli Kısayollar" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Kütüphane Kısayolları" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Çalma Listesi Kısayolları" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Yayın Kısayolları" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Bilgi Kısayolları" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "" #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 #, fuzzy msgid "%prog [OPTION]... [COMMAND]..." msgstr "Kullanım: sonata [OPTION]" #: ../sonata/cli.py:53 #, fuzzy msgid "Commands:" msgstr "Yorum" #: ../sonata/cli.py:54 #, fuzzy msgid "play song in playlist" msgstr "Çalma listesinden şarkı çal" #: ../sonata/cli.py:55 #, fuzzy msgid "pause currently playing song" msgstr "Çalmakta olan şarkıyı duraklat" #: ../sonata/cli.py:56 #, fuzzy msgid "stop currently playing song" msgstr "Çalmakta olan şarkıyı durdur" #: ../sonata/cli.py:57 #, fuzzy msgid "play next song in playlist" msgstr "Çalma listesinde sonraki şarkıyı çal" #: ../sonata/cli.py:58 #, fuzzy msgid "play previous song in playlist" msgstr "Çalma listesinde önceki şarkıyı çal" #: ../sonata/cli.py:59 #, fuzzy msgid "toggle play/pause; plays if stopped" msgstr "Çal/duraklat; şarkı durmuşsa başlatır" #: ../sonata/cli.py:60 #, fuzzy msgid "toggle repeat mode" msgstr "Tekrarlama durumunu değiştir" #: ../sonata/cli.py:61 #, fuzzy msgid "toggle random mode" msgstr "Tekrarlama durumunu değiştir" #: ../sonata/cli.py:62 #, fuzzy msgid "display current song info" msgstr "Çalmakta olan şarkı bilgisini göster" #: ../sonata/cli.py:63 #, fuzzy msgid "display MPD status" msgstr "MPD durumunu göster" #: ../sonata/cli.py:70 #, fuzzy msgid "popup song notification (requires D-Bus)" msgstr "Bilgilendirme penceresi (DBus gerekli)" #: ../sonata/cli.py:73 #, fuzzy msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "veya görünmesi arasında geçiş yapar (D-Bus gerekli)" #: ../sonata/cli.py:76 #, fuzzy msgid "go fullscreen (requires D-Bus)" msgstr "veya görünmesi arasında geçiş yapar (D-Bus gerekli)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:82 #, fuzzy msgid "start app hidden (requires systray)" msgstr "Uygulamayı gizli başlat (sistem çekmecesi gerekli)" #: ../sonata/cli.py:85 #, fuzzy msgid "start app visible (requires systray)" msgstr "Uygulamayı görünür başlat (sistem çekmecesi gerekli)" #: ../sonata/cli.py:87 #, fuzzy msgid "start with profile NUM" msgstr "Profil [NUM] ile başlat" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:127 #, fuzzy msgid "toggle and popup options require D-Bus. Aborting." msgstr "Geçiş argümanı için D-Bus gerekli, durduruluyor." #: ../sonata/cli.py:149 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata, şu profil ile başlıyor:" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "" #: ../sonata/cli.py:155 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Geçerli bir profil numarası değil. Profil numarası aralığı, 1 - " #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Öntanımlı Profil" #: ../sonata/cli.py:176 msgid "by" msgstr "" #: ../sonata/cli.py:176 msgid "from" msgstr "-" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "MPD'ye bağlanılamıyor.\n" "Lütfen Sonata tercihlerinizi veya MPD_HOST/ MPD_PORT çevre değişkenlerinizi " "kontrol edin." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Şarkı" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Sanatçı" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Albüm" #: ../sonata/cli.py:241 msgid "Date" msgstr "Tarih" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "Parça" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Tür" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Dosya" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Zaman" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Bitrate" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD durduruldu" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Çalıyor" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Duraklatıldı" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Durduruldu" #: ../sonata/cli.py:271 msgid "State" msgstr "Durum" #: ../sonata/cli.py:273 #, fuzzy msgid "Repeat:" msgstr "Yinele" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Açık" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Kapalı" #: ../sonata/cli.py:275 #, fuzzy msgid "Random:" msgstr "Rastgele" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Ses seviyesi" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Crossfade" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "saniye" #: ../sonata/dbus_plugin.py:118 #, fuzzy msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonara D-BUS oturumuna bağlanamadı: Adres belirlenemedi (yardım için 'man " "dbus-launch' ve 'man dbus-daemon'a bakın)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:140 #, fuzzy msgid "Starting Sonata instead..." msgstr "Sonata, şu profil ile başlıyor:" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Sonata şu an çalışıyor." #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Bilinmeyen" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Sanatçı ismi" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Albüm ismi" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Şarkı ismi" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "Şarkı numarası" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 #, fuzzy msgid "Disc number" msgstr "Disk Numarası" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Yıl" #: ../sonata/formatting.py:126 #, fuzzy msgid "File path" msgstr "dosya_yolu" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Dosya ismi" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Yayın ismi" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Yayın" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Şarkı uzunluğu" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Uzunluk" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Geçen süre (sadece başlık)" #: ../sonata/info.py:200 msgid "hide" msgstr "gizle" #: ../sonata/info.py:203 msgid "more" msgstr "daha fazla" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Albüm ismi belirtilmemiş." #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Albüm bilgisi bulunamadı" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Şarkı sözü bulunamadı" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Şarkı sözleri getiriliyor..." #: ../sonata/info.py:539 #, fuzzy msgid "Lyrics not found." msgstr "Şarkı sözü bulunamadı" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Çeşitli Sanatçılar" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Etiketlenmemiş" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Dosya adı" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Hepsi" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Dosya sistemi" #: ../sonata/library.py:159 #, fuzzy msgid "Albums" msgstr "Albüm" #: ../sonata/library.py:161 #, fuzzy msgid "Artists" msgstr "Sanatçı" #: ../sonata/library.py:163 #, fuzzy msgid "Genres" msgstr "Tür" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, fuzzy, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "Tüm şarkı" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" #: ../sonata/library.py:1069 #, fuzzy msgid "Song" msgstr "Şarkı Bilgisi" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Çalınan" #: ../sonata/main.py:94 msgid "Library" msgstr "Kütüphane" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Çalma Listeleri" #: ../sonata/main.py:96 msgid "Streams" msgstr "Yayınlar" #: ../sonata/main.py:97 msgid "Info" msgstr "Bilgi" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Tüm şarkı" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "Lis_teyi Sırala" #: ../sonata/main.py:226 #, fuzzy msgid "Sa_ve Selected to" msgstr "Seçili olan(lar)ı ekle" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_Bağlantı" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "Ardından ça_l" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Güncelle" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "_Harici Resim Kullan" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Y_erel Resim Kullan" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:237 #, fuzzy msgid "Reset Image" msgstr "Resmi Aç" #: ../sonata/main.py:239 msgid "_Play" msgstr "Ça_l" #: ../sonata/main.py:241 #, fuzzy msgid "Pa_use" msgstr "Du_raklat" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Durdur" #: ../sonata/main.py:245 #, fuzzy msgid "Pre_vious" msgstr "_Geri" #: ../sonata/main.py:247 msgid "_Next" msgstr "İle_ri" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Kapat" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Sil" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Temizle" #: ../sonata/main.py:255 #, fuzzy msgid "_Entire Library" msgstr "Kütüphaneyi _Güncelle" #: ../sonata/main.py:257 #, fuzzy msgid "_Selected Items" msgstr "Seçili olan(lar)ı ekle" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "T_ercihler..." #: ../sonata/main.py:261 msgid "_About..." msgstr "_Hakkında..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Etiketleri Düzenle" #: ../sonata/main.py:264 msgid "_Add" msgstr "E_kle" #: ../sonata/main.py:266 msgid "_Replace" msgstr "Değişti_r" #: ../sonata/main.py:268 msgid "Add" msgstr "Ekle" #: ../sonata/main.py:270 msgid "Replace" msgstr "Değiştir" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Sil..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Karıştır" #: ../sonata/main.py:275 #, fuzzy msgid "Shuffle Albums" msgstr "Karıştır" #: ../sonata/main.py:315 #, fuzzy msgid "S_how Sonata" msgstr "_Sonata'yı Göster" #: ../sonata/main.py:317 #, fuzzy msgid "_Repeat playlist" msgstr "Çalma Listesini Yeniden Adlandır" #: ../sonata/main.py:319 #, fuzzy msgid "Repeat s_ong" msgstr "Yinele" #: ../sonata/main.py:321 #, fuzzy msgid "Rando_m" msgstr "Rastgele" #: ../sonata/main.py:323 msgid "Consume" msgstr "" #: ../sonata/main.py:473 msgid "By Artist" msgstr "Sanatçıya göre" #: ../sonata/main.py:475 msgid "By Album" msgstr "Albüme göre" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "Şarkı İsmine göre" #: ../sonata/main.py:479 msgid "By File Name" msgstr "Dosya İsmine göre" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "Dizin ve Dosya İsmine göre" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Listeyi Ters Çevir" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Yeni..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Düzenle..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Yeni Çalma Listesi..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Yeniden Adlandır..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Genişletmek için tıklayın" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Daraltmak için tıklayın" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Bağlı Değil" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Okuma İzni Yok" #: ../sonata/main.py:863 #, fuzzy msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT kullanılıyor" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Bağlantıyı kes" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(mpd güncelleniyor)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Resimler" #: ../sonata/main.py:2197 msgid "All files" msgstr "Tüm Dosyalar" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Sanatçı veya albüm ismi bulunamadı." #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Albüm kapağı bulunamadı." #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "" msgstr[1] "Seçili çalma listeleri silinsin mi?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "" msgstr[1] "Çalma listelerini sil" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "" msgstr[1] "Seçili yayınlar silinsin mi?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "" msgstr[1] "Yayınları Sil" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Çalma Listesini Kaydet" #: ../sonata/playlists.py:156 #, fuzzy msgid "Existing Playlist" msgstr "Çalma Listesi" #: ../sonata/playlists.py:157 #, fuzzy msgid "Replace playlist" msgstr "Çalma Listesini Yeniden Adlandır" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Çalma Listesini Yeniden Adlandır" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 #, fuzzy msgid "Files" msgstr "Dosya" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 #, fuzzy msgid "Local MPD" msgstr "Sadece yerel" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT kullanılıyor" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "özel" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Yalnız etiketler tanımlanmışsa bilgi gösterilecek" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Çalınanlar listesinde sütunlar oluşturur" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Şarkı sözlerini müzik dosyasının dizinine kaydetmek için, geçerli müzik " "dizini belirtmeniz gerekmektedir." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Müzik Dizini Doğrulaması" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Albüm resimlerini müzik dosyasının dizinine kaydetmek için, geçerli müzik " "dizini belirtmeniz gerekmektedir." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Yeni Profil" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Yayını Düzenle" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Yeni Yayın" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Bu isimde bir yayın zaten var. Başka bir isim dener misiniz?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib ve/veya tagpy bulunamadı, etiket düzenleme desteği kaldırıldı." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Etiketleri Düzenle" #: ../sonata/tagedit.py:124 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "Taglib ve/veya tagpy bulunamadı, etiket düzenleme desteği kaldırıldı." #: ../sonata/tagedit.py:129 #, fuzzy, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "mevcut değil. Lütfen tercihlerde geçerli müzik dizini belirtin." #: ../sonata/tagedit.py:154 #, fuzzy, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr " bulunamadı. Lütfen tercihlerde geçerli müzik dizini belirtin." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Düzenlenebilir etikete sahip hiç müzik dosyası bulunamadı." #: ../sonata/tagedit.py:271 #, fuzzy, python-format msgid "Edit Tags - %s of %s" msgstr "Etiketleri Düzenle" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Etiket müzik dosyasına kaydedilemiyor." #: ../sonata/tagedit.py:349 #, fuzzy msgid "Hide file path" msgstr "dosya_yolu" #: ../sonata/tagedit.py:352 #, fuzzy msgid "Show file path" msgstr "dosya_yolu" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "MPD için zarif bir müzik istemcisi." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Kısayollar" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Kısayollar" #: ../sonata/ui/current.glade.h:1 #, fuzzy msgid "Filter:" msgstr "Süzgeç" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 #, fuzzy msgid "Title:" msgstr "Şarkı" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 #, fuzzy msgid "Artist:" msgstr "Sanatçı" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 #, fuzzy msgid "Album:" msgstr "Albüm" #: ../sonata/ui/info.glade.h:4 #, fuzzy msgid "Date:" msgstr "Tarih" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 #, fuzzy msgid "Track:" msgstr "Parça" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 #, fuzzy msgid "Genre:" msgstr "Tür" #: ../sonata/ui/info.glade.h:7 #, fuzzy msgid "File:" msgstr "Dosya" #: ../sonata/ui/info.glade.h:8 #, fuzzy msgid "Bitrate:" msgstr "Bitrate" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Sanatçıyı Wikipedia'da arat" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Albümü Wikipedia'da arat" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Diğer etiketler" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Şarkı etiketlerini düzenle" #: ../sonata/ui/info.glade.h:13 #, fuzzy msgid "(edit tags)" msgstr "etiketleri düzenle" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Şarkı Bilgisi" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Lyricwiki.org'tan şarkı sözü ara" #: ../sonata/ui/info.glade.h:16 #, fuzzy msgid "(search)" msgstr "ara" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Şarkı sözleri" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Albüm Bilgisi" #: ../sonata/ui/library.glade.h:1 #, fuzzy msgid "Search:" msgstr "_Ara" #: ../sonata/ui/library.glade.h:3 #, fuzzy msgid "Search terms" msgstr "Arama terimlerini düzenle" #: ../sonata/ui/library.glade.h:10 #, fuzzy msgid "End Search" msgstr "_Aramayı Bitir" #: ../sonata/ui/playlists.glade.h:1 #, fuzzy msgid "Playlist name:" msgstr "Çalma listesi ismi" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Özel Resim" #: ../sonata/ui/preferences.glade.h:2 #, fuzzy msgid "Artwork filename:" msgstr "Resim ismi" #: ../sonata/ui/preferences.glade.h:3 #, fuzzy msgid "_About" msgstr "_Hakkında..." #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "" #: ../sonata/ui/preferences.glade.h:6 #, fuzzy msgid "_Name:" msgstr "İsim" #: ../sonata/ui/preferences.glade.h:7 #, fuzzy msgid "_Host:" msgstr "Sunucu" #: ../sonata/ui/preferences.glade.h:8 #, fuzzy msgid "_Port:" msgstr "Port" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Şifre gerekmiyorsa boş bırakın." #: ../sonata/ui/preferences.glade.h:10 #, fuzzy msgid "Pa_ssword:" msgstr "Parola" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "" #: ../sonata/ui/preferences.glade.h:12 #, fuzzy msgid "_Music dir:" msgstr "Müzik dizini" #: ../sonata/ui/preferences.glade.h:13 #, fuzzy msgid "_Autoconnect on start" msgstr "Başlangıçta otomatik bağlan" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD Bağlantısı" #: ../sonata/ui/preferences.glade.h:15 #, fuzzy msgid "MPD" msgstr "_MPD" #: ../sonata/ui/preferences.glade.h:16 #, fuzzy msgid "_Playback/volume buttons" msgstr "Tekrar çalma/ses butonları" #: ../sonata/ui/preferences.glade.h:17 #, fuzzy msgid "Pr_ogressbar" msgstr "İlerleme çubuğu" #: ../sonata/ui/preferences.glade.h:18 #, fuzzy msgid "_Statusbar" msgstr "Durum çubuğu" #: ../sonata/ui/preferences.glade.h:19 #, fuzzy msgid "System _tray icon" msgstr "Sistem çekmecesi" #: ../sonata/ui/preferences.glade.h:20 #, fuzzy msgid "Song Ly_rics" msgstr "Şarkı sözleri" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Şarkı sözlerini buraya kaydet:" #: ../sonata/ui/preferences.glade.h:23 #, fuzzy msgid "_Album art" msgstr "Albüm ismi" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Albüm resmi biçimi:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Temel" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Şekilli" #: ../sonata/ui/preferences.glade.h:27 #, fuzzy msgid "Search locations:" msgstr "Arama sırası:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Sadece yerel" #: ../sonata/ui/preferences.glade.h:29 #, fuzzy msgid "Local and remote" msgstr "Önce yerel, sonra harici" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Albüm kapaklarını buraya kaydet:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Göster" #: ../sonata/ui/preferences.glade.h:32 #, fuzzy msgid "_Show window on all workspaces" msgstr "Pencereyi tüm çalışma alanlarında göster" #: ../sonata/ui/preferences.glade.h:33 #, fuzzy msgid "_Keep window above other windows" msgstr "Pencereyi diğer pencerelerin üstünde tut" #: ../sonata/ui/preferences.glade.h:34 #, fuzzy msgid "_Hide window titlebar" msgstr "Pencere başlığı:" #: ../sonata/ui/preferences.glade.h:35 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Pencere kapatıldığında sistem çekmecesine yerleş" #: ../sonata/ui/preferences.glade.h:36 #, fuzzy msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Eğer seçiliyse, Sonata kapanırken sistem çekmecesine yerleşecek. Panelde " "sistem çekmecenizin olduğundan emin olun, aksi halde Sonata penceresini geri " "açamayabilirsiniz." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Eğer seçiliyse, Sonata kapanırken sistem çekmecesine yerleşecek. Panelde " "sistem çekmecenizin olduğundan emin olun, aksi halde Sonata penceresini geri " "açamayabilirsiniz." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Pencere Davranışı" #: ../sonata/ui/preferences.glade.h:39 #, fuzzy msgid "_Update MPD library on start" msgstr "Başlangıçta MPD kütüphanesini güncelle" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Eğer seçiliyse, Sonata otomatik olarak MPD kütüphanenizi başlangıçta " "güncelleyecektir." #: ../sonata/ui/preferences.glade.h:41 #, fuzzy msgid "S_top playback on exit" msgstr "Çıkışta şarkıyı durdur" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD, istemci kapalı olduğu halde çalmaya devam eder. Eğer seçiliyse, Sonata " "genel müzik çalıcılar gibi davranacak ve uygulama kapatıldığında tekrar " "çalma da duracak." #: ../sonata/ui/preferences.glade.h:43 #, fuzzy msgid "_Write status file:" msgstr "Durumu dosyaya yaz:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Eğer seçiliyse, Sonata xmms-infopipe tarzı şarkı hakkında bilgi içeren bir " "dosya oluşturacak. Birçok uygulama (Anlık-İleti araçları, IRC istemciler...) " "xmms-info dosyalarını destekler." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Çeşitli" #: ../sonata/ui/preferences.glade.h:46 #, fuzzy msgid "Behavior" msgstr "_Davranış" #: ../sonata/ui/preferences.glade.h:47 #, fuzzy msgid "C_urrent playlist:" msgstr "Çalınanlar listesi:" #: ../sonata/ui/preferences.glade.h:48 #, fuzzy msgid "_Library:" msgstr "Kütüphane:" #: ../sonata/ui/preferences.glade.h:49 #, fuzzy msgid "_Window title:" msgstr "Pencere başlığı:" #: ../sonata/ui/preferences.glade.h:50 #, fuzzy msgid "Current _song line 1:" msgstr "Çalınan şarkı satır 1:" #: ../sonata/ui/preferences.glade.h:51 #, fuzzy msgid "Current s_ong line 2:" msgstr "Çalınan şarkı satır 2:" #: ../sonata/ui/preferences.glade.h:52 #, fuzzy msgid "<small>Available options:</small>" msgstr "Kullanılabilir seçenekler" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Şarkı Biçimi" #: ../sonata/ui/preferences.glade.h:54 #, fuzzy msgid "Format" msgstr "_Biçim" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: ../sonata/ui/preferences.glade.h:56 #, fuzzy msgid "_Username:" msgstr "Kullanıcı Adı:" #: ../sonata/ui/preferences.glade.h:57 #, fuzzy msgid "_Password:" msgstr "Şifre:" #: ../sonata/ui/preferences.glade.h:58 #, fuzzy msgid "Popup _notification on song changes" msgstr "Şarkı değişikliklerinde bilgilendirme göster" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Sistem çekmecesi" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Sol Üst" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Sağ Üst" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Sol Alt" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Sağ Alt" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Ekran Merkezi" #: ../sonata/ui/preferences.glade.h:66 #, fuzzy msgid "C_rossfade" msgstr "Crossfade" #: ../sonata/ui/preferences.glade.h:67 #, fuzzy msgid "_Fade length:" msgstr "Fade uzunluğu" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "saniye" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Ekler" #: ../sonata/ui/preferences.glade.h:70 #, fuzzy msgid "Enabled" msgstr "Crossfade aktif" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Kapak Resmi Seç" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Arama terimlerini düzenle" #: ../sonata/ui/sonata.glade.h:5 #, fuzzy msgid "Cover Art" msgstr "Kapak Resmi Seç" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Resmi Aç" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Şarkı Sözü Ara" #: ../sonata/ui/sonata.glade.h:8 #, fuzzy msgid "Artist Name:" msgstr "Sanatçı İsmi" #: ../sonata/ui/sonata.glade.h:9 #, fuzzy msgid "Song Title:" msgstr "Şarkı İsmi" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Çalma Listesi" #: ../sonata/ui/streams.glade.h:1 #, fuzzy msgid "Stream name:" msgstr "Yayın ismi" #: ../sonata/ui/streams.glade.h:2 #, fuzzy msgid "Stream URL:" msgstr "Yayın URL'si" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "_Hepsini Kaydet" #: ../sonata/ui/tagedit.glade.h:5 #, fuzzy msgid "Year:" msgstr "Yıl" #: ../sonata/ui/tagedit.glade.h:7 #, fuzzy msgid "Comment:" msgstr "Yorum" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/uk.po���������������������������������������������������������������������0000664�0000000�0000000�00000131242�15003420405�0016625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: # Jonathan Ballet <jon@multani.info>, 2021 # Stanislav <dolphinstkom@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2021-08-09 08:38+0000\n" "Last-Translator: Stanislav <dolphinstkom@gmail.com>, 2021\n" "Language-Team: Ukrainian (https://www.transifex.com/multani/teams/15398/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "Про додаток Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Налаштування" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "Розгорнути до повноекранного режиму" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "Перейти до [1ї-5ї] вкладці" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "З'єднання з MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "З'єднання з MPD розірвано" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "Перемішати поточний список" #: ../sonata/about.py:64 msgid "Expand player" msgstr "Розгорнути плеєр" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "До попередньої вкладці" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "До наступної вкладці" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "Згорнути плеєр" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Пошук у фонотеці" #: ../sonata/about.py:69 msgid "Quit" msgstr "Вихід" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "Оновити фонетику" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "Показати спливаюче меню" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "Згорнути до трею (якщо увімкнено)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "Попередня пісня" #: ../sonata/about.py:75 msgid "Next track" msgstr "Наступна пісня" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "Вітворити/Пауза" #: ../sonata/about.py:77 msgid "Stop" msgstr "Зупинити" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "Знизити гучність" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "Підвищити гучність" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "Відтворити виділену пісню" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "Вилучити вибрані пісні" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "Зупинити відтворення" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "Редагувати теги обраної композиції" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "Зберегти у новий список" #: ../sonata/about.py:86 msgid "Clear list" msgstr "Зачистити список" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "Перемішати поточний список" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "Додати відмічені пісні або увійти до каталогу" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "Перейти до батьківського каталогу" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "Додати виділені пісні" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "Замінити обраними піснями" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "Додати пісні до списку та відтворити" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "Замінити обраними піснями і відтворити" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "Оновити виділені позиції/шляхи" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "Додати зазначені списки" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "Вилучити зазначені списки" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "Замінити на зазначені списки" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "Додати зазначені списки і відтворити" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "Додати виділені потоки" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "Вилучити виділені потоки" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "Замінити обраними потоками" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "Додати обрані потоки і відтворити" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "Редагувати теги відтворюваної пісні" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "Основні гарячі клавіші" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "Відтворення" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "Поточний список" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "Фонотека" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "Списки відтворення" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "Потоки" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "Інформація" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} пісня." msgstr[1] "{count} пісні." msgstr[2] "{count} пісень." msgstr[3] "{count} пісень." #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} альбом." msgstr[1] "{count} альбоми." msgstr[2] "{count} альбомів." msgstr[3] "{count} альбомів." #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} виконавець." msgstr[1] "{count} виконавців." msgstr[2] "{count} виконавців." msgstr[3] "{count} виконавців." #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} день насолоди." msgstr[1] "{count} дні насолоди." msgstr[2] "{count} днів насолоди." msgstr[3] "{count} днів насолоди." #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} година насолоди." msgstr[1] "{count} години насолоди." msgstr[2] "{count} годин насолоди." msgstr[3] "{count} годин насолоди." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [ОПЦІЯ]... [КОМАНДА]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "Команди:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "відтворити пісню зі списку" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "призупинити відтворення пісні" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "зупинити відтворення пісні" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "перейти до наступної пісні зі списку" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "перейти до попередньої пісні зі списку" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "переключити відтворення/пауза; відтворити або зупинити" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "перемкнути режим повтору" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "перемкнути випадкове відтворення" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "відобразити інформацію про композицію" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "відобразити стан MPD" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "спливаюче повідомлення (потрібна наявність D-Bus)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" "перемкнути режими, згорнути програму в трей або показати (потребує наявність" " D-Bus)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "перейти до повноекранного режиму (потребує наявність D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "не вмикайте додаток якщо D-Bus команди зазнали невдачі" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "запустити додаток згорнутим (потрібна наявність увімкненого трея)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "запустити додаток на очно (потрібна наявність увімкненого трея)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "запустити з профілем NUM" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "запустити додаток за допомогою інтерактивної оболонки (ipython)" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "Збільшити деталізацію звіту" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "Зменшити деталізацію звіту" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "невідома команда виконання %s" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "спливаючим і перемикальним опціям потрібний D-Bus. Відхилено." #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata стартує з профілем %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d є хибним номером профілю." #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Номер профілю має бути між 1 і %d." #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "Базовий профіль" #: ../sonata/cli.py:176 msgid "by" msgstr " від" #: ../sonata/cli.py:176 msgid "from" msgstr "з" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Неможливо з'єднатися з MPD.\n" "Перевірте налаштування Sonata або змінні оточення MPD_HOST/MPD_PORT." #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Назва" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Виконавець" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Альбом" #: ../sonata/cli.py:241 msgid "Date" msgstr "Рік" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "№ пісні" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Жанр" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "Файл" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "Час" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "Бітрейт" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD зупинений" #: ../sonata/cli.py:268 msgid "Playing" msgstr "Відтворення" #: ../sonata/cli.py:269 msgid "Paused" msgstr "Пауза" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "Зупинено" #: ../sonata/cli.py:271 msgid "State" msgstr "Стан" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "Повторювати:" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "Увімкнути" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "Вимкнути" #: ../sonata/cli.py:275 msgid "Random:" msgstr "Випадковим чином:" #: ../sonata/cli.py:277 msgid "Volume" msgstr "Гучність" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "Перехресне згасання" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "секунда" msgstr[1] "секунди" msgstr[2] "секунд" msgstr[3] "секунд" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata не змогла з'єднатися з D-Bus: Не вдається визначити розташування шини" " повідомлень (спробуйте знайти рішення проблеми за допомогою консольних " "команд 'man dbus-launch' й 'man dbus-daemon')" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "Збій під час виконання віддалених команд." #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "Запуск Sonata з профілем..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "Можливо Sonata не запущено?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "Невідомо" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "Виконавець" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "Альбом" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "Назва пісні" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "№ пісні" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "Номер диску" #: ../sonata/formatting.py:124 msgid "Year" msgstr "Рік" #: ../sonata/formatting.py:126 msgid "File path" msgstr "Шлях до файлу" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "Шлях" #: ../sonata/formatting.py:128 msgid "File name" msgstr "Файл" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "Ім'я потоку" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "Потоки" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "Тривалість пісні" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Тривалість пісні" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "Поточний час (лише в заголовку)" #: ../sonata/info.py:200 msgid "hide" msgstr "сховати" #: ../sonata/info.py:203 msgid "more" msgstr "більше" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "Не вказано альбом" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "Немає опису альбому." #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "Тексту не знайдено" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "Завантаження текстів..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "Тексту не знайдено." #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "Немає текстів бо плагін не увімкнено." #: ../sonata/library.py:33 msgid "Various Artists" msgstr "Різні виконавці" #: ../sonata/library.py:79 msgid "Untagged" msgstr "Немає тегів" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Назва файлу" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "В усіх" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "Файлова система" #: ../sonata/library.py:159 msgid "Albums" msgstr "Альбоми" #: ../sonata/library.py:161 msgid "Artists" msgstr "Виконавці" #: ../sonata/library.py:163 msgid "Genres" msgstr "Жанри" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} пісня" msgstr[1] "{count} пісні" msgstr[2] "{count} пісень" msgstr[3] "{count} пісень" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} секунда" msgstr[1] "{count} секунди" msgstr[2] "{count} секунд" msgstr[3] "{count} секунд" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} хвилина" msgstr[1] "{count} хвилини" msgstr[2] "{count} хвилин" msgstr[3] "{count} хвилин" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} година" msgstr[1] "{count} години" msgstr[2] "{count} годин" msgstr[3] "{count} годин" #: ../sonata/library.py:1069 msgid "Song" msgstr "Пісня" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Поточна" #: ../sonata/main.py:94 msgid "Library" msgstr "Фонотека" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Списки програвання" #: ../sonata/main.py:96 msgid "Streams" msgstr "Потоки" #: ../sonata/main.py:97 msgid "Info" msgstr "Інформація" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Протягом композиції" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "від %A з" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "_Сортувати" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "Зберегти виділене до" #: ../sonata/main.py:227 msgid "_Connection" msgstr "_З'єднання" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "В_ідтворити після" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "Режим _Відтворення" #: ../sonata/main.py:230 msgid "_Update" msgstr "_Оновити" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "Використати зображення з мережі" #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "Використати локальне зображення" #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "_Повноекранний Режим" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "Перезавантажити зображення" #: ../sonata/main.py:239 msgid "_Play" msgstr "_Відтворити" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "_Пауза" #: ../sonata/main.py:243 msgid "_Stop" msgstr "_Зупинити" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "_Попереднє" #: ../sonata/main.py:247 msgid "_Next" msgstr "_Наступне" #: ../sonata/main.py:249 msgid "_Quit" msgstr "_Вихід" #: ../sonata/main.py:251 msgid "_Remove" msgstr "_Видалити" #: ../sonata/main.py:253 msgid "_Clear" msgstr "_Видалити усі" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "_Всю Фонотеку" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "_Виділені Елементи" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "_Налаштування" #: ../sonata/main.py:261 msgid "_About..." msgstr "Про..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "_Редагувати теги..." #: ../sonata/main.py:264 msgid "_Add" msgstr "_Додати" #: ../sonata/main.py:266 msgid "_Replace" msgstr "_Замінити" #: ../sonata/main.py:268 msgid "Add" msgstr "Додати" #: ../sonata/main.py:270 msgid "Replace" msgstr "Замінити" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "_Видалити" #: ../sonata/main.py:273 msgid "Shuffle" msgstr "Випадково" #: ../sonata/main.py:275 msgid "Shuffle Albums" msgstr "Перемішати альбоми" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Показати Sonata" #: ../sonata/main.py:317 msgid "_Repeat playlist" msgstr "_Повторювати список" #: ../sonata/main.py:319 msgid "Repeat s_ong" msgstr "Повторювати пісню" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "_Випадково" #: ../sonata/main.py:323 msgid "Consume" msgstr "Вилучати після відтворення" #: ../sonata/main.py:473 msgid "By Artist" msgstr "За Виконавцями" #: ../sonata/main.py:475 msgid "By Album" msgstr "За Альбомом" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "За Назвою" #: ../sonata/main.py:479 msgid "By File Name" msgstr "За ім'ям файлу" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "За каталогом та ім'ям файлу" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "Зворотній порядок" #: ../sonata/main.py:524 msgid "_New..." msgstr "_Новий" #: ../sonata/main.py:526 msgid "_Edit..." msgstr "_Редагувати" #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "_Новий Список..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "_Перейменувати..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "Увімкнення нового плагіну %s..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "Знайдений новий плагін %s." #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "Розгорнути" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "Згорнути" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "Немає з'єднання" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "Зчитування не дозволене" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "Роз'єднати" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} день" msgstr[1] "{count} дні" msgstr[2] "{count} днів" msgstr[3] "{count} днів" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(оновлюється база MPD)" #: ../sonata/main.py:2192 msgid "Images" msgstr "Зображення" #: ../sonata/main.py:2197 msgid "All files" msgstr "Усі файли" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "Не знайдено ні виконавці ні альбому з таким ім'ям" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "Обкладинки не знайдено" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Вилучити обраний список?" msgstr[1] "Вилучити обрані списки?" msgstr[2] "Вилучити обрані списки?" msgstr[3] "Вилучити обрані списки?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Вилучити Список" msgstr[1] "Вилучити Списки" msgstr[2] "Вилучити Списки" msgstr[3] "Вилучити Списки" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Вилучити зазначений список?" msgstr[1] "Вилучити зазначені списки?" msgstr[2] "Вилучити зазначені списки?" msgstr[3] "Вилучити зазначені списки?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Видалити потік" msgstr[1] "Видалити потоки" msgstr[2] "Видалити потоки" msgstr[3] "Видалити потоки" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "Не вдаєть запустити браузер." #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "Запустити Браузер" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "Зберегти Список" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "Список Вже Існує" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "Замінити Список" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "Додати пісні" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "Перейменувати Список" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "Процеси" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "Файли" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "Мережа" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "Локальний MPD" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "Редагувати налаштування в /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "Перезавантажити служби MPD" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "Використовується MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "інше" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "Виводитиметься у випадку, якщо заповнений тег композиції" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "Створити стовпці в поточному списку" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "" "Щоб зберігати тексти пісень в каталог з музикою Ви маєте правильно зазначити" " музичну директорію." #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "Перевірка каталогу з музикою" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Щоб зберігати обкладинки в каталог з музикою Ви маєте правильно зазначити " "музичну директорію." #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "Новий Профіль" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "Редагування потоку" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "Новий потік" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Поток з такою назвою вже існує. Чи бажаєте Ви замінити його?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Бібліотеки Taglib і/або Tagpy не знайдені. Редагування тегів вимкнено." #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "Редагувати тег" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "" "Версія бібліотеки Tagpy <0.91. Будь ласка оновіть бібліотеку, правка тегів " "вимкнена." #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "Шлях %s не є дійсним. Будь ласка зазначте правильну музичну директорію в " "налаштуваннях." #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "Файл '%s' не знайдений. Будь ласка зазначте правильну музичну директорію в " "налаштуваннях." #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "Не знайдено файлів з підтримкою тегів." #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "Редагувати теги - %s з %s" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "Не вдається записати тег у файл." #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "Сховати шлях до файлу" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "Показати шлях до файлу" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata, елегантний GTK+ клієнт для Music Player Daemon\n" "Copyright © 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Чудовий клієнт для MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Гарячі клавіші" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Гарячі клавіші" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Фільтр:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Назва:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Виконавець:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Альбом:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "Рік:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "№ доріжки:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Жанр:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "Файл:" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "Бітрейт:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Пошук виконавця у Вікіпедії" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Пошук альбому у Вікіпедії" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Додаткові теги" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Редагування тегів пісні" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(редагувати теги)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Про композицію" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Пошук текстів на Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(пошук)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Тексти" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Про альбом" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Пошук:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Умови пошуку" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Закінчити Пошук" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Назва списку:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Особлива Обкладинка" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Назва файлу обкладинки:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_Про програму" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Налаштування..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Ім'я:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Хост:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Порт:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Залишіть порожнім, якщо пароль не потрібний" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Оберіть Каталог з Музикою" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Музична директорія:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Підключатися під час запуску" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "З'єднання з MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Кнопки відтворення/регулятор гучності" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "_Індикатор позиції" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Статусний рядок" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Піктограма у _треї" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Тексти" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Зберігати тексти в:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Альбом" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Стиль обкладинки:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Звичайна" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Стилізована" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Місце пошуку:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Лише локально" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Локально і віддалено" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Зберігати обкладинки в:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Інтерфейс" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "_Відображати на всіх робочих столах" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Поверх інших вікон" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Сховати заголовок вікна" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Згортати в трей при закритті або натисканні escape" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "" "Якщо вибрано, то при закритті Sonata буде згортатися в трей. Майте на увазі," " що на даний момент неможливо визначити, чи є у вас трей, так що відзначайте" " тільки якщо ви впевнені, що він є." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Програма не зупиняє свого виконання, а ховається до зони сповіщення. Але це " "має сенс, якщо є зона сповіщення." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Розміщення програми" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "_Оновлювати фонотеку MPD при запуску" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "" "Якщо ввімкнено, Sonata автоматично оновлюватиме фонотеку MPD під час " "запуску." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "_Зупиняти відтворення при виході" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD дозволяє відтворювати музику, якщо не запущено контролюючої програми. " "Якщо ввімкнено, то Sonata буде себе поводити як більшість інших програвачів," " тобто зупинить відтворення пісні при закритті." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Записувати статус у файл:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Якщо ввімкнено, Sonata створить файл про поточну композицію на кшталт xmms. " "Це зручно для передачі цих даних іншим програмам (програми обміну миттєвими " "повідомленнями, клієнти IRC...)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Різне" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Поведінка" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Поточний список:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Фонотека:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Заголовок вікна:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Поточний _запис рядок 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Поточний з_апис рядок 2:" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>Доступні опції:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Формат інформації про композицію" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Форматування" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Аудіо скробблінг (за допомогою Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Ідентифікатор:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Спливаюче повідомлен_ня при зміні пісні" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Біля зони сповіщення" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Вгорі ліворуч" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Вгорі праворуч" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Знизу ліворуч" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Знизу праворуч" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Центр Екрану" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "_Перехресне згасання" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_Тривалість згасання:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "секунд" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Додатково" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Доступно" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Опис" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Плагіни" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Оберіть обкладинку" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Редагувати рядок пошуку" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Обкладинка" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Завантажити зображення" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Пошук Текстів" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Виконавець:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Назва пісні:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Список відтворення" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Назва потоку:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "URL потоку:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Зберегти _Все" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Рік:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Коментарі:" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/zh_CN.po������������������������������������������������������������������0000664�0000000�0000000�00000107234�15003420405�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: # Jonathan Ballet <jon@multani.info>, 2021 # Dmitry <dmitrydmitry761@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2021-08-09 08:38+0000\n" "Last-Translator: Dmitry <dmitrydmitry761@gmail.com>, 2021\n" "Language-Team: Chinese (China) (https://www.transifex.com/multani/teams/15398/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "关于 Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "偏好" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "全屏封面模式" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "切换到第 1-5 个标签页" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "连接到 MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "断开与 MPD 的连接" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "随机排列当前播放列表" #: ../sonata/about.py:64 msgid "Expand player" msgstr "展开播放器" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "切换到上一个标签页" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "切换到下一个标签页" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "折叠播放器" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "搜索数据库" #: ../sonata/about.py:69 msgid "Quit" msgstr "退出" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "更新整个数据库" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "显示弹出菜单" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "最小化到系统托盘(如果可以)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "上一条音轨" #: ../sonata/about.py:75 msgid "Next track" msgstr "下一条音轨" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "播放/暂停" #: ../sonata/about.py:77 msgid "Stop" msgstr "停止" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "降低音量" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "提高音量" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "播放选择的曲目" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "删除选择的曲目" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "居中显示当前播放的曲目" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "编辑已选择曲目的标签" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "保存到新的播放列表" #: ../sonata/about.py:86 msgid "Clear list" msgstr "清除列表" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "随机排列列表" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "添加选择的曲目或进入目录" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "转到上一级目录" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "添加选择的项" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "替换为选择的项" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "添加选择的项并播放" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "替换为选择的项并播放" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "更新选择的项目/路径" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "添加选择的播放列表" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "删除选择的播放列表" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "替换为选择的播放列表" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "添加选择的播放列表并播放" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "添加选择的流" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "删除选择的流" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "替换为选择的流" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "添加选择的流并播放" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "编辑当前曲目的标签" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "全局快捷键" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "播放快捷键" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "当前曲目快捷键" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "数据库快捷键" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "播放列表快捷键" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "流媒体快捷键" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "曲目信息快捷键" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} 歌曲。" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} 专辑。" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} 艺术家。" #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} 幸福的日子。" #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} 数小时的幸福。" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [选项]... [命令]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "团队:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "播放播放列表中的歌曲" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "暂停当前​​歌曲" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "停止播放这首歌" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "播放播放列表中的下一首歌曲" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "播放播放列表中的上一首歌曲" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "切换播放/暂停;停止时播放" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "切换重复模式" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "切换随机模式" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "显示当前歌曲信息" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "显示 MPD 状态" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "弹出歌曲通知(需要 D-Bus)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "切换应用程序是最小化到托盘还是可见(需要 D-Bus)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "进入全屏模式(需要 D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "如果 D-Bus 命令不起作用,则不要启动应用程序" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "秘密启动应用程序(需要系统托盘)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "启动应用程序可见(需要系统托盘)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "以个人资料编号开头" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "使用交互式 壳 (ipython) 运行应用程序。" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "增加日志粒度" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "减少日志详细程度" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "未知的命令%s" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "切换和弹出选项需要D-Bus。 正在中止" #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "启动 Sonata 以档案 %s..." #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d 不是合法的档案编号。" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "档案编号必须介于 1 和 %d 之间。" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "默认档案" #: ../sonata/cli.py:176 msgid "by" msgstr "在" #: ../sonata/cli.py:176 msgid "from" msgstr "从" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "不能连接到 MPD。\n" "请检查你的偏好设置或环境变量 MPD_HOST/MPD_PORT 。" #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "标题" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "艺术家" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "专辑" #: ../sonata/cli.py:241 msgid "Date" msgstr "日期" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "音轨" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "风格" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "文件" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "时间" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "比特率" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD 已停止" #: ../sonata/cli.py:268 msgid "Playing" msgstr "播放中" #: ../sonata/cli.py:269 msgid "Paused" msgstr "已暂停" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "已停止" #: ../sonata/cli.py:271 msgid "State" msgstr "状态" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "重复:" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "开" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "关" #: ../sonata/cli.py:275 msgid "Random:" msgstr "随机的:" #: ../sonata/cli.py:277 msgid "Volume" msgstr "音量" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "淡入淡出" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "秒" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata 无法连接到 D-BUS 会话总线:无法确定消息总线的地址(尝试“man dbus-launch” 和 “man dbus-daemon” " "寻求帮助)”)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "执行远程命令失败。" #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "正在启动 Sonata…" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "也许 Sonata 没有运行?" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "未知" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "艺术家名字" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "专辑名" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "音轨名" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "音轨编号" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "唱片编号" #: ../sonata/formatting.py:124 msgid "Year" msgstr "年份" #: ../sonata/formatting.py:126 msgid "File path" msgstr "文件路径" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "路径" #: ../sonata/formatting.py:128 msgid "File name" msgstr "文件名" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "流媒体名字" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "流媒体" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "曲目长度" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Len" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "已播放时间(仅限标题用)" #: ../sonata/info.py:200 msgid "hide" msgstr "隐藏" #: ../sonata/info.py:203 msgid "more" msgstr "更多" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "专辑名未设置。" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "未发现专辑信息。" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "未发现歌词" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "歌词获取中..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "找不到歌词。" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "不包括歌词插件。" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "多位艺术家" #: ../sonata/library.py:79 msgid "Untagged" msgstr "无标签" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "文件名" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "所有" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "文件系统" #: ../sonata/library.py:159 msgid "Albums" msgstr "专辑" #: ../sonata/library.py:161 msgid "Artists" msgstr "艺术家" #: ../sonata/library.py:163 msgid "Genres" msgstr "风格" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} 歌曲" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} 秒" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} 分钟" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} 小时" #: ../sonata/library.py:1069 msgid "Song" msgstr "曲目" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "当前曲目" #: ../sonata/main.py:94 msgid "Library" msgstr "数据库" #: ../sonata/main.py:95 msgid "Playlists" msgstr "播放列表" #: ../sonata/main.py:96 msgid "Streams" msgstr "流媒体" #: ../sonata/main.py:97 msgid "Info" msgstr "曲目信息" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "整首曲目" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "在%A从 %B" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "排序列表" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "保存选择到" #: ../sonata/main.py:227 msgid "_Connection" msgstr "连接" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "在动作执行后播放" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "游戏模式" #: ../sonata/main.py:230 msgid "_Update" msgstr "更新" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "使用远程图像..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "使用本地图像..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "全屏模式" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "重置图像" #: ../sonata/main.py:239 msgid "_Play" msgstr "播放" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "暂停" #: ../sonata/main.py:243 msgid "_Stop" msgstr "停止" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "上一首" #: ../sonata/main.py:247 msgid "_Next" msgstr "下一首" #: ../sonata/main.py:249 msgid "_Quit" msgstr "退出" #: ../sonata/main.py:251 msgid "_Remove" msgstr "删除" #: ../sonata/main.py:253 msgid "_Clear" msgstr "清除" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "整个图书馆" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "刷新多个选定项目" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "偏好..." #: ../sonata/main.py:261 msgid "_About..." msgstr "关于..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "更改快捷方式/多个快捷方式..." #: ../sonata/main.py:264 msgid "_Add" msgstr "添加" #: ../sonata/main.py:266 msgid "_Replace" msgstr "替换" #: ../sonata/main.py:268 msgid "Add" msgstr "添加" #: ../sonata/main.py:270 msgid "Replace" msgstr "替换" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "删除..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "乱序" #: ../sonata/main.py:275 msgid "Shuffle Albums" msgstr "随机播放专辑" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "显示 Sonata" #: ../sonata/main.py:317 msgid "_Repeat playlist" msgstr "重复播放列表" #: ../sonata/main.py:319 msgid "Repeat s_ong" msgstr "重复歌曲" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "随机" #: ../sonata/main.py:323 msgid "Consume" msgstr "耗" #: ../sonata/main.py:473 msgid "By Artist" msgstr "按 艺术家" #: ../sonata/main.py:475 msgid "By Album" msgstr "按 专辑" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "按 曲目标题" #: ../sonata/main.py:479 msgid "By File Name" msgstr "按 文件名" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "按 目录及文件名" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "反转列表" #: ../sonata/main.py:524 msgid "_New..." msgstr "新建..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "编辑..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "新建播放列表..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "重命名..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "启用新插件 %s..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "发现新插件 %s。" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "点击展开" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "点击折叠" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "未连接" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "没有读取权限" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "断开连接" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} 天数" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(正在更新 mpd)" #: ../sonata/main.py:2192 msgid "Images" msgstr "图像" #: ../sonata/main.py:2197 msgid "All files" msgstr "所有文件" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "未发现艺术家或专辑名。" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "未发现封面。" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "删除已选择的播放列表?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "删除播放列表" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "删除已选择的流媒体?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "删除流媒体" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "无法启动合适的浏览器。" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "启动浏览器" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "保存播放列表" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "现有播放列表" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "替换播放列表" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "添加曲目" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "重命名播放列表" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "流程" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "档案" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "联网" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "本地 MPD" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "编辑 /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "重启 mpd 服务" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "使用 MPD_HOST/PORT" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "曲目目录" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "自定义" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "仅当结组中的所有标签都有定义时才会显示信息" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "在当前播放列表建立分栏" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "要将歌词保存到音乐文件的目录中,你必须指定一个有效的音乐目录。" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "音乐目录确认" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "要将封面保存到音乐文件的目录中,你必须指定一个有效的音乐目录。" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "新档案" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "编辑流" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "新建流" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "流的名字已经存在。是否替换?" #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "TagLib 与/或 TagPy 未找到,不能编辑标签。" #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "编辑标签" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "TagPy 版本 < 0.91 ,不能编辑标签。请升级到较新的版本。" #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "路径 %s 不存在。 请在首选项中指定有效的音乐目录。" #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "文件 '%s' 未找到。 请在首选项中指定有效的音乐目录。" #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "没有可以编辑标签的音乐文件。" #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "编辑标签 - %s 从 %s" #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "不能将标签保存到音乐文件。" #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "隐藏文件路径" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "显示文件路径" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata,音乐播放器守护进程的优雅 GTK+ 客户端\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "一个精美的 MPD 客户端" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "快捷方式" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "快捷键" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "筛选:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "标题:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "执行人:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "专辑:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "日期:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "追踪:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "款式:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "档案 : " #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "比特率:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "显示维基百科上该艺术家的资料" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "显示维基百科上该专辑的资料" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "切换显示余下的标签" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "编辑曲目标签" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(编辑标签)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "曲目信息" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "在 Lyricwiki.org 上搜索歌词" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(搜索)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "歌词" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "专辑信息" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "搜索 : " #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "搜索条件" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "结束搜索" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "播放列表名称:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "自定义封面" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "封面文件名:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "关于" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "配置..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "名称:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "主:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "港:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "如果不需要口令则留空。" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "密码:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "选择音乐目录" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "音乐目录:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "启动时自动连接" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD 连接" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "播放/音量按钮" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "进度条" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "状态栏" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "系统托盘" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "歌曲歌词" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "保存歌词到:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "专辑封面" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "封面样式:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "标准" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "风格化" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "搜索位置:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "仅限本地" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "本地与远程" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "保存封面到:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "显示" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "在所有工作区显示窗口" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "将窗口置于其它窗口上方" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "隐藏窗口标题栏" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "关闭时最小化到系统托盘" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "如果启用,关闭 Sonata 会将其最小化到系统托盘。 请注意,目前无法检测是否确实存在系统托盘,因此只有在您有系统托盘时才进行检查。 " #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "如果启用,Sonata 关闭时将会最小化到系统托盘上。注意目前它还不能检测到是否真的有系统托盘,所以仅当你有系统托盘时才选择此选项。" #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "窗口行为" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "启动时更新 MPD 数据库" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "如果启用,Sonata 将在启动时自动更新你的 MPD 数据库。" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "退出时停止播放" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "即使客户端没有打开,MPD 仍然允许播放。如果启用此选项,Sonata 将更像一个习惯上的音乐播放器,在退出的时候停止播放。" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "将状态写入文件:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "如果启用,Sonata 将建立一个类似管道的文件 xmms-info,包含关于当前曲目的信息。许多应用程序支持 xmms-info " "文件(即时通讯软件、IRC 客户端……)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "其它" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "行为" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "当前播放列表:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "数据库:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "窗口标题:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "当前曲目第一行:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "当前曲目第二行:" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>可用选项:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "曲目格式" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "格式" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "收集有关音乐曲目的信息 (Audioscrobbling) (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "用户名:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "口令:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "关于歌曲更改的弹出通知" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "系统托盘" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "左上角" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "右上角" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "左下角" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "右下角" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "屏幕中央" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "音量减小间隔在曲目结束时(Crossfade)" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "褪色长度:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "秒" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "其它" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "启用" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "描述" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "插件" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "选择封面" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "编辑搜索条目" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "封面" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "打开图像" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "歌词搜索" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "艺人姓名:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "歌名:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "播放列表" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "流名称:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "流 URL:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "保存全部" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "年:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "评论:" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/po/zh_TW.po������������������������������������������������������������������0000664�0000000�0000000�00000106445�15003420405�0017250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: # Jonathan Ballet <jon@multani.info>, 2021 # Dmitry <dmitrydmitry761@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-09 11:22+0200\n" "PO-Revision-Date: 2021-08-09 08:38+0000\n" "Last-Translator: Dmitry <dmitrydmitry761@gmail.com>, 2021\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/multani/teams/15398/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:57 msgid "About Sonata" msgstr "關於 Sonata" #: ../sonata/about.py:58 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "偏好設定" #: ../sonata/about.py:59 msgid "Fullscreen Artwork Mode" msgstr "全螢幕封面模式" #: ../sonata/about.py:60 msgid "Switch to [1st-5th] tab" msgstr "切換至第一至第五個分頁" #: ../sonata/about.py:61 msgid "Connect to MPD" msgstr "連線至 MPD" #: ../sonata/about.py:62 msgid "Disconnect from MPD" msgstr "自 MPD 斷線" #: ../sonata/about.py:63 msgid "Randomize current playlist" msgstr "將當前清單亂數化" #: ../sonata/about.py:64 msgid "Expand player" msgstr "放大播放器" #: ../sonata/about.py:65 msgid "Switch to previous tab" msgstr "切換至第一至第五個分頁" #: ../sonata/about.py:66 msgid "Switch to next tab" msgstr "切換至第一至第五個分頁" #: ../sonata/about.py:67 msgid "Collapse player" msgstr "縮小播放器" #: ../sonata/about.py:68 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "搜尋音樂庫" #: ../sonata/about.py:69 msgid "Quit" msgstr "離開" #: ../sonata/about.py:70 msgid "Update entire library" msgstr "更新整個音樂庫" #: ../sonata/about.py:71 msgid "Display popup menu" msgstr "顯示跳出菜單" #: ../sonata/about.py:72 msgid "Minimize to system tray (if enabled)" msgstr "縮至系統列(如果有開啟)" #: ../sonata/about.py:74 msgid "Previous track" msgstr "前一軌" #: ../sonata/about.py:75 msgid "Next track" msgstr "下一軌" #: ../sonata/about.py:76 msgid "Play/Pause" msgstr "播放/暫停" #: ../sonata/about.py:77 msgid "Stop" msgstr "停止" #: ../sonata/about.py:78 msgid "Lower the volume" msgstr "降低音量" #: ../sonata/about.py:79 msgid "Raise the volume" msgstr "提高音量" #: ../sonata/about.py:81 msgid "Play selected song" msgstr "播放選定歌曲" #: ../sonata/about.py:82 msgid "Remove selected song(s)" msgstr "移除選定歌曲" #: ../sonata/about.py:83 msgid "Center currently playing song" msgstr "移至目前播放中的曲子" #: ../sonata/about.py:84 ../sonata/about.py:93 msgid "Edit selected song's tags" msgstr "編輯選定歌曲的標籤" #: ../sonata/about.py:85 msgid "Save to new playlist" msgstr "存至新清單" #: ../sonata/about.py:86 msgid "Clear list" msgstr "清除清單" #: ../sonata/about.py:87 msgid "Randomize list" msgstr "清單亂數化" #: ../sonata/about.py:89 msgid "Add selected song(s) or enter directory" msgstr "新增選定歌曲, 或進入目錄" #: ../sonata/about.py:90 msgid "Go to parent directory" msgstr "回上一目錄" #: ../sonata/about.py:91 msgid "Add selected item(s)" msgstr "新增選定項目" #: ../sonata/about.py:92 msgid "Replace with selected item(s)" msgstr "用選定項目替代" #: ../sonata/about.py:94 msgid "Add selected item(s) and play" msgstr "新增選定項目並播放" #: ../sonata/about.py:95 msgid "Replace with selected item(s) and play" msgstr "以選定項目替代並播放" #: ../sonata/about.py:96 msgid "Update selected item(s)/path(s)" msgstr "新增選定項目" #: ../sonata/about.py:98 ../sonata/about.py:100 msgid "Add selected playlist(s)" msgstr "新增選定清單" #: ../sonata/about.py:99 msgid "Remove selected playlist(s)" msgstr "移除選定清單" #: ../sonata/about.py:101 msgid "Replace with selected playlist(s)" msgstr "以選定清單替代" #: ../sonata/about.py:102 msgid "Add selected playlist(s) and play" msgstr "新增選定清單並播放" #: ../sonata/about.py:106 ../sonata/about.py:108 msgid "Add selected stream(s)" msgstr "新增選定串流" #: ../sonata/about.py:107 msgid "Remove selected stream(s)" msgstr "移除選定串流" #: ../sonata/about.py:109 msgid "Replace with selected stream(s)" msgstr "以選定串流替代" #: ../sonata/about.py:110 msgid "Add selected stream(s) and play" msgstr "新增選定串流並播放" #: ../sonata/about.py:114 msgid "Edit playing song's tags" msgstr "編輯目前播放歌曲的標籤" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:117 msgid "Main Shortcuts" msgstr "主要捷徑" #: ../sonata/about.py:118 msgid "Playback Shortcuts" msgstr "播放控制捷徑" #: ../sonata/about.py:119 msgid "Current Shortcuts" msgstr "「當前清單」捷徑" #: ../sonata/about.py:120 msgid "Library Shortcuts" msgstr "「音樂庫」分頁捷徑" #: ../sonata/about.py:121 msgid "Playlist Shortcuts" msgstr "「清單列」捷徑" #: ../sonata/about.py:122 msgid "Stream Shortcuts" msgstr "「串流」分頁捷徑" #: ../sonata/about.py:123 msgid "Info Shortcuts" msgstr "「詳細」分頁捷徑" #: ../sonata/about.py:160 #, python-brace-format msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} 歌曲。" #: ../sonata/about.py:163 #, python-brace-format msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} 專輯。" #: ../sonata/about.py:166 #, python-brace-format msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} 執行人:" #: ../sonata/about.py:176 #, python-brace-format msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} 幸福的日子。" #: ../sonata/about.py:180 #, python-brace-format msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} 數小時的幸福。" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:52 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [選項]... [命令]..." #: ../sonata/cli.py:53 msgid "Commands:" msgstr "命令:" #: ../sonata/cli.py:54 msgid "play song in playlist" msgstr "在播放列表中播放歌曲" #: ../sonata/cli.py:55 msgid "pause currently playing song" msgstr "暫停當前播放的歌曲" #: ../sonata/cli.py:56 msgid "stop currently playing song" msgstr "停止當前播放歌曲" #: ../sonata/cli.py:57 msgid "play next song in playlist" msgstr "播放播放列表中的下一首歌曲" #: ../sonata/cli.py:58 msgid "play previous song in playlist" msgstr "播放播放列表中的上一首歌曲" #: ../sonata/cli.py:59 msgid "toggle play/pause; plays if stopped" msgstr "切換播放/暫停;停止播放" #: ../sonata/cli.py:60 msgid "toggle repeat mode" msgstr "切換重複模式" #: ../sonata/cli.py:61 msgid "toggle random mode" msgstr "切換隨機模式" #: ../sonata/cli.py:62 msgid "display current song info" msgstr "顯示當前歌曲信息" #: ../sonata/cli.py:63 msgid "display MPD status" msgstr "顯示 MPD 狀態" #: ../sonata/cli.py:70 msgid "popup song notification (requires D-Bus)" msgstr "彈出歌曲通知(需要 D-Bus)" #: ../sonata/cli.py:73 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "切換應用程序是最小化到托盤還是可見(需要 D-Bus)" #: ../sonata/cli.py:76 msgid "go fullscreen (requires D-Bus)" msgstr "全屏顯示(需要 D-Bus)" #: ../sonata/cli.py:79 msgid "don't start app if D-Bus commands fail" msgstr "如果 D-Bus 命令失敗,則不要啟動應用程序" #: ../sonata/cli.py:82 msgid "start app hidden (requires systray)" msgstr "暗中運行應用程序(需要係統托盤)" #: ../sonata/cli.py:85 msgid "start app visible (requires systray)" msgstr "不要隱藏應用程序啟動(需要係統托盤)" #: ../sonata/cli.py:87 msgid "start with profile NUM" msgstr "以個人資料編號開頭" #: ../sonata/cli.py:90 msgid "start app with a interactive (ipython) shell" msgstr "使用交互式 (ipython) 殼 運行應用程序" #: ../sonata/cli.py:93 msgid "Increase log verbosity" msgstr "增加日誌詳細程度" #: ../sonata/cli.py:96 msgid "Decrease log verbosity" msgstr "減少日誌冗長" #: ../sonata/cli.py:121 #, python-format msgid "unknown command %s" msgstr "未知的命令 %s" #: ../sonata/cli.py:127 msgid "toggle and popup options require D-Bus. Aborting." msgstr "切換和彈出選項需要 D-Bus。 中止。" #: ../sonata/cli.py:149 #, python-format msgid "Starting Sonata with profile %s..." msgstr "使用 %s 號設定檔開啟 Sonata…" #: ../sonata/cli.py:153 #, python-format msgid "%d is not an available profile number." msgstr "%d 不是有效的設定檔號碼。" #: ../sonata/cli.py:155 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "不是有效的設定檔號碼,號碼必須介於 1 和 %d 之間。" #: ../sonata/cli.py:175 ../sonata/main.py:172 msgid "Default Profile" msgstr "預設設定檔" #: ../sonata/cli.py:176 msgid "by" msgstr "裡面" #: ../sonata/cli.py:176 msgid "from" msgstr "從" #: ../sonata/cli.py:199 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "無法連線至 MPD。\n" "請檢查你的 Sonata 設定,和 MPD_HOST/MPD_PORT 環境變數。" #: ../sonata/cli.py:238 ../sonata/library.py:80 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "曲名" #: ../sonata/cli.py:239 ../sonata/formatting.py:119 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "演奏人" #: ../sonata/cli.py:240 ../sonata/formatting.py:120 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "專輯" #: ../sonata/cli.py:241 msgid "Date" msgstr "日期" #: ../sonata/cli.py:242 ../sonata/formatting.py:121 msgid "Track" msgstr "音軌" #: ../sonata/cli.py:243 ../sonata/formatting.py:125 ../sonata/library.py:80 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "類型" #: ../sonata/cli.py:244 ../sonata/formatting.py:128 msgid "File" msgstr "檔案" #: ../sonata/cli.py:258 ../sonata/cli.py:260 msgid "Time" msgstr "時間" #: ../sonata/cli.py:261 msgid "Bitrate" msgstr "位元率" #: ../sonata/cli.py:264 msgid "MPD stopped" msgstr "MPD 已停止" #: ../sonata/cli.py:268 msgid "Playing" msgstr "播放中" #: ../sonata/cli.py:269 msgid "Paused" msgstr "暫停" #: ../sonata/cli.py:270 ../sonata/main.py:636 ../sonata/main.py:1611 #: ../sonata/main.py:1625 msgid "Stopped" msgstr "已停止" #: ../sonata/cli.py:271 msgid "State" msgstr "狀態" #: ../sonata/cli.py:273 msgid "Repeat:" msgstr "重複:" #: ../sonata/cli.py:273 ../sonata/cli.py:275 msgid "On" msgstr "開啟" #: ../sonata/cli.py:274 ../sonata/cli.py:276 msgid "Off" msgstr "關閉" #: ../sonata/cli.py:275 msgid "Random:" msgstr "隨機:" #: ../sonata/cli.py:277 msgid "Volume" msgstr "音量" #: ../sonata/cli.py:278 msgid "Crossfade" msgstr "淡入淡出" #: ../sonata/cli.py:279 ../sonata/preferences.py:211 msgid "second" msgid_plural "seconds" msgstr[0] "秒" #: ../sonata/dbus_plugin.py:118 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata 無法連接到 D-BUS 會話總線:無法確定消息總線的地址(嘗試 “man dbus-launch” 和“man dbus-" "daemon”尋求幫助)”)" #: ../sonata/dbus_plugin.py:138 msgid "Failed to execute remote commands." msgstr "無法執行遠端命令。" #: ../sonata/dbus_plugin.py:140 msgid "Starting Sonata instead..." msgstr "使用設定檔開啟 Sonata" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:143 msgid "Maybe Sonata is not running?" msgstr "已經有另一個 Sonata 使用中。" #: ../sonata/formatting.py:45 msgid "Unknown" msgstr "未知" #: ../sonata/formatting.py:119 msgid "Artist name" msgstr "演奏人名稱" #: ../sonata/formatting.py:120 msgid "Album name" msgstr "專輯名稱" #: ../sonata/formatting.py:121 msgid "Track name" msgstr "音軌名稱" #: ../sonata/formatting.py:122 msgid "Track number" msgstr "音軌號" #: ../sonata/formatting.py:122 ../sonata/formatting.py:123 msgid "#" msgstr "#" #: ../sonata/formatting.py:123 msgid "Disc number" msgstr "碟片號" #: ../sonata/formatting.py:124 msgid "Year" msgstr "年" #: ../sonata/formatting.py:126 msgid "File path" msgstr "檔案路徑" #: ../sonata/formatting.py:126 ../sonata/library.py:1069 msgid "Path" msgstr "路徑" #: ../sonata/formatting.py:128 msgid "File name" msgstr "檔名" #: ../sonata/formatting.py:130 msgid "Stream name" msgstr "串流名稱" #: ../sonata/formatting.py:130 msgid "Stream" msgstr "串流" #: ../sonata/formatting.py:131 msgid "Song length" msgstr "歌曲長度" #: ../sonata/formatting.py:131 msgid "Len" msgstr "Len" #: ../sonata/formatting.py:132 msgid "Elapsed time (title only)" msgstr "經過時間(只能用在標題)" #: ../sonata/info.py:200 msgid "hide" msgstr "隱藏" #: ../sonata/info.py:203 msgid "more" msgstr "更多" #: ../sonata/info.py:287 msgid "Album name not set." msgstr "未設定專輯名。" #: ../sonata/info.py:291 msgid "Album info not found." msgstr "找不到專輯資料。" #: ../sonata/info.py:353 msgid "Lyrics not found" msgstr "找不到歌詞" #: ../sonata/info.py:518 msgid "Fetching lyrics..." msgstr "抓取歌詞中..." #: ../sonata/info.py:539 msgid "Lyrics not found." msgstr "找不到歌詞。" #: ../sonata/info.py:542 msgid "No lyrics plug-in enabled." msgstr "不包括歌詞插件。" #: ../sonata/library.py:33 msgid "Various Artists" msgstr "多元演奏人" #: ../sonata/library.py:79 msgid "Untagged" msgstr "未標籤" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "檔名" #: ../sonata/library.py:81 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "所有" #: ../sonata/library.py:157 msgid "Filesystem" msgstr "檔案系統" #: ../sonata/library.py:159 msgid "Albums" msgstr "專輯" #: ../sonata/library.py:161 msgid "Artists" msgstr "演奏人" #: ../sonata/library.py:163 msgid "Genres" msgstr "類型" #: ../sonata/library.py:963 ../sonata/main.py:1532 #, python-brace-format msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} 歌曲" #: ../sonata/library.py:965 #, python-brace-format msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} 秒" #: ../sonata/library.py:967 ../sonata/main.py:1547 #, python-brace-format msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} 分鐘" #: ../sonata/library.py:969 ../sonata/main.py:1543 #, python-brace-format msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} 小時" #: ../sonata/library.py:1069 msgid "Song" msgstr "曲" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "當前" #: ../sonata/main.py:94 msgid "Library" msgstr "音樂庫" #: ../sonata/main.py:95 msgid "Playlists" msgstr "播放清單" #: ../sonata/main.py:96 msgid "Streams" msgstr "串流" #: ../sonata/main.py:97 msgid "Info" msgstr "詳細" #: ../sonata/main.py:129 ../sonata/preferences.py:212 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "整首曲子" #: ../sonata/main.py:172 msgid "by %A from %B" msgstr "到 %A 從 %B" #: ../sonata/main.py:225 msgid "_Sort List" msgstr "排序列表" #: ../sonata/main.py:226 msgid "Sa_ve Selected to" msgstr "將選擇保存到" #: ../sonata/main.py:227 msgid "_Connection" msgstr "連線" #: ../sonata/main.py:228 msgid "P_lay after" msgstr "播放後" #: ../sonata/main.py:229 msgid "Play _Mode" msgstr "玩模式" #: ../sonata/main.py:230 msgid "_Update" msgstr "更新" #: ../sonata/main.py:231 msgid "Use _Remote Image..." msgstr "使用已刪除的圖像..." #: ../sonata/main.py:233 msgid "Use _Local Image..." msgstr "使用本地圖案..." #: ../sonata/main.py:236 msgid "_Fullscreen Mode" msgstr "全螢幕模式" #: ../sonata/main.py:237 msgid "Reset Image" msgstr "打開影像" #: ../sonata/main.py:239 msgid "_Play" msgstr "播放" #: ../sonata/main.py:241 msgid "Pa_use" msgstr "暫停" #: ../sonata/main.py:243 msgid "_Stop" msgstr "停止" #: ../sonata/main.py:245 msgid "Pre_vious" msgstr "前一首" #: ../sonata/main.py:247 msgid "_Next" msgstr "下一首" #: ../sonata/main.py:249 msgid "_Quit" msgstr "離開" #: ../sonata/main.py:251 msgid "_Remove" msgstr "移除" #: ../sonata/main.py:253 msgid "_Clear" msgstr "清除" #: ../sonata/main.py:255 msgid "_Entire Library" msgstr "全音樂庫" #: ../sonata/main.py:257 msgid "_Selected Items" msgstr "選定項目" #: ../sonata/main.py:259 msgid "_Preferences..." msgstr "偏好設定" #: ../sonata/main.py:261 msgid "_About..." msgstr "關於..." #: ../sonata/main.py:262 msgid "_Edit Tags..." msgstr "編輯標籤..." #: ../sonata/main.py:264 msgid "_Add" msgstr "新增" #: ../sonata/main.py:266 msgid "_Replace" msgstr "替代" #: ../sonata/main.py:268 msgid "Add" msgstr "新增" #: ../sonata/main.py:270 msgid "Replace" msgstr "替代" #: ../sonata/main.py:272 msgid "_Delete..." msgstr "刪除..." #: ../sonata/main.py:273 msgid "Shuffle" msgstr "隨機" #: ../sonata/main.py:275 msgid "Shuffle Albums" msgstr "隨機播放專輯" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "顯示 Sonata" #: ../sonata/main.py:317 msgid "_Repeat playlist" msgstr "重复播放列表" #: ../sonata/main.py:319 msgid "Repeat s_ong" msgstr "重複歌曲" #: ../sonata/main.py:321 msgid "Rando_m" msgstr "隨機" #: ../sonata/main.py:323 msgid "Consume" msgstr "消耗" #: ../sonata/main.py:473 msgid "By Artist" msgstr "演奏人" #: ../sonata/main.py:475 msgid "By Album" msgstr "專輯" #: ../sonata/main.py:477 msgid "By Song Title" msgstr "曲名" #: ../sonata/main.py:479 msgid "By File Name" msgstr "檔名" #: ../sonata/main.py:481 msgid "By Dir & File Name" msgstr "路徑及檔名" #: ../sonata/main.py:483 msgid "Reverse List" msgstr "反轉清單" #: ../sonata/main.py:524 msgid "_New..." msgstr "新的..." #: ../sonata/main.py:526 msgid "_Edit..." msgstr "編輯..." #: ../sonata/main.py:546 msgid "_New Playlist..." msgstr "新播放列表..." #: ../sonata/main.py:548 msgid "_Rename..." msgstr "重新命名..." #: ../sonata/main.py:592 #, python-format msgid "Enabling new plug-in %s..." msgstr "啟用新插件 %s..." #: ../sonata/main.py:595 #, python-format msgid "Found new plug-in %s." msgstr "發現新插件 %s。" #: ../sonata/main.py:640 ../sonata/main.py:1616 ../sonata/main.py:1834 msgid "Click to expand" msgstr "按下放大" #: ../sonata/main.py:643 ../sonata/main.py:1614 ../sonata/main.py:1832 msgid "Click to collapse" msgstr "按下縮小" #: ../sonata/main.py:650 ../sonata/main.py:1520 ../sonata/main.py:1621 msgid "Not Connected" msgstr "尚未連線" #: ../sonata/main.py:652 ../sonata/main.py:1518 ../sonata/main.py:1623 msgid "No Read Permission" msgstr "沒有讀取權限" #: ../sonata/main.py:863 msgid "MPD_HOST/PORT" msgstr "使用 MPD_HOST/PORT 中" #: ../sonata/main.py:877 msgid "Disconnect" msgstr "斷線" #: ../sonata/main.py:1539 #, python-brace-format msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} 日" #: ../sonata/main.py:1556 msgid "(updating mpd)" msgstr "(更新 mpd 中)" #: ../sonata/main.py:2192 msgid "Images" msgstr "影像" #: ../sonata/main.py:2197 msgid "All files" msgstr "所有檔案" #: ../sonata/main.py:2309 msgid "No artist or album name found." msgstr "找不到演奏人或專輯名。" #: ../sonata/main.py:2312 msgid "No cover art found." msgstr "找不到封面圖案。" #: ../sonata/main.py:2546 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "删除选定的播放列表?" #: ../sonata/main.py:2549 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "刪除播放列表" #: ../sonata/main.py:2563 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "刪除選定的流?" #: ../sonata/main.py:2566 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "刪除流" #: ../sonata/main.py:2835 msgid "Unable to launch a suitable browser." msgstr "無法開啟合適的瀏覽器。" #: ../sonata/main.py:2836 msgid "Launch Browser" msgstr "開啟瀏覽器" #: ../sonata/playlists.py:131 ../sonata/playlists.py:134 msgid "Save Playlist" msgstr "儲存清單" #: ../sonata/playlists.py:156 msgid "Existing Playlist" msgstr "清單" #: ../sonata/playlists.py:157 msgid "Replace playlist" msgstr "重新命名清單" #: ../sonata/playlists.py:158 msgid "Append songs" msgstr "附加歌曲" #: ../sonata/playlists.py:232 ../sonata/playlists.py:235 msgid "Rename Playlist" msgstr "重新命名清單" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "流程" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "檔案" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "聯網" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "本地 MPD" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "編輯 /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "重啟 mpd 服務" #: ../sonata/preferences.py:169 msgid "Using MPD_HOST/PORT" msgstr "使用 MPD_HOST/PORT 中" #: ../sonata/preferences.py:265 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "歌曲目錄" #: ../sonata/preferences.py:267 ../sonata/preferences.py:575 msgid "custom" msgstr "自訂" #: ../sonata/preferences.py:388 msgid "Info displayed only if all enclosed tags are defined" msgstr "只有框起來的所有變數都有值時才顯示" #: ../sonata/preferences.py:393 msgid "Creates columns in the current playlist" msgstr "在「當前清單」中畫出直列" #: ../sonata/preferences.py:438 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "要儲存歌詞至音樂目錄,你必須指定一個有效的音樂目錄。" #: ../sonata/preferences.py:438 ../sonata/preferences.py:445 msgid "Music Dir Verification" msgstr "音樂目錄確認" #: ../sonata/preferences.py:445 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "要儲存封面圖案至音樂目錄,你必須指定一個有效的音樂目錄。" #: ../sonata/preferences.py:511 msgid "New Profile" msgstr "新增設定檔" #: ../sonata/streams.py:177 msgid "Edit Stream" msgstr "編輯串流" #: ../sonata/streams.py:179 ../sonata/streams.py:222 msgid "New Stream" msgstr "新增串流" #: ../sonata/streams.py:221 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "已經有同名的串流,是否要替代之 ? " #: ../sonata/tagedit.py:115 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "找不到 tablib 或 tagpy,將沒有編輯標籤的功能。" #: ../sonata/tagedit.py:115 ../sonata/tagedit.py:124 ../sonata/tagedit.py:129 #: ../sonata/tagedit.py:154 ../sonata/tagedit.py:158 ../sonata/tagedit.py:293 msgid "Edit Tags" msgstr "編輯標籤" #: ../sonata/tagedit.py:124 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "標記版本 < 0.91。 請升級到較新版本,禁用標籤編輯支持。" #: ../sonata/tagedit.py:129 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "路徑 %s不存在。 請在首選項中指定有效的音樂目錄。 " #: ../sonata/tagedit.py:154 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "文件 '%s' 未找到。 請在首選項中指定有效的音樂目錄。" #: ../sonata/tagedit.py:158 msgid "No music files with editable tags found." msgstr "沒有可編輯標籤的音樂檔案。" #: ../sonata/tagedit.py:271 #, python-format msgid "Edit Tags - %s of %s" msgstr "編輯標籤 - %s的 %s " #: ../sonata/tagedit.py:292 msgid "Unable to save tag to music file." msgstr "無法存標籤至檔案。" #: ../sonata/tagedit.py:349 msgid "Hide file path" msgstr "檔案路徑" #: ../sonata/tagedit.py:352 msgid "Show file path" msgstr "檔案路徑" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata,音樂播放器守護進程的優雅 GTK+ 客戶端\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "優雅的 MPD 音樂客端。" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "捷徑" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "捷徑" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "篩選:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "標題:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "執行人:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "專輯:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "日期:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "跟蹤:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "風格:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "檔案 : " #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "比特率:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "在維基百科中搜尋該演奏人" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "在維基百科中搜尋該專輯" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "啟動額外的標籤設定" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "編輯歌曲標籤" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(編輯標籤)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "歌曲詳細" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "在 lyricwiki.org 上搜尋歌曲" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(搜索)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "歌詞" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "專輯詳細" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "搜索:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "編輯搜尋詞" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "結束搜尋" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "播放列表名稱:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "自訂封面圖案" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "封面文件名:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "關於" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "設置…" #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "名稱:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "主辦" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "港口:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "如果沒有密碼就留白。" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "密碼:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "選擇音樂目錄" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "音樂目錄" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "啟動時自動連線" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "MPD 連線" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "播放/音量按鈕" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "啟動歌曲進度列" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "啟動狀態列" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "系統托盤圖標" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "歌曲歌詞" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "儲存歌詞至:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "專輯封面" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "圖案風格:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "標準" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "風格化" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "搜尋次序:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "只有本地" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "先本地 , 後遠端" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "保存封面到:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "顯示" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "在所有工作區顯示窗口" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "保持窗口高於其他窗口" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "隱藏窗口標題欄" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "關閉/退出時最小化到系統托盤" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "如果啟用,關閉 Sonata 會將其最小化到系統托盤。 請注意,目前無法檢測是否確實存在系統托盤,因此只有在您有系統托盤時才進行檢查。" #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "如果開啟,關閉 Sonata 的按鈕將導致它縮至系統列而非真的關閉。" #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "視窗行為" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "啟動就更新 MPD 音樂庫" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "如果開啟,Sonata 會在它啟動就自動更新 MPD 資料庫。" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "離開時停止音樂" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "MPD 在沒有客端軟體時亦可以播放。然而如果啟動此選項,Sonata 將會模仿傳統音樂播放器,在程式離開同時停止音樂。" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "寫入狀態檔至 :" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "如果開啟,Sonata 會創建一個類似 xmms-infopipe 的檔案,以供其他程式利用。(例如聊天軟體)" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "其他雜項" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "行為" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "當前播放列表 :" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "音樂庫 :" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "視窗標題 :" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "歌曲提示第一行 :" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "歌曲提示第二行 :" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>可用選項:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "歌曲格式" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "格式" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "收集有關音樂曲目的信息 (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "用戶名 :" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "密碼 :" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "歌曲變換時跳出提醒窗" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "系統列" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "左上" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "右上" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "左下" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "右下" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "畫面中央" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "音量減小間隔在曲目結束時(Crossfade)" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "褪色長度:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "秒" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "額外功能" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "啟動淡出淡入" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "描述" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "插件" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "選擇封面圖案" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "編輯搜尋詞" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "選擇封面圖案" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "打開影像" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "搜尋歌詞" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "藝人姓名:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "歌名:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "清單" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "流名稱:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "流 URL:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "儲存所有" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "年:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "評論:" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/run-sonata�������������������������������������������������������������������0000775�0000000�0000000�00000001545�15003420405�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import sonata.launcher if __name__ == '__main__': sonata.launcher.run() �����������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/run-tests��������������������������������������������������������������������0000775�0000000�0000000�00000001407�15003420405�0017121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. BASEDIR=$(dirname $0) cd $BASEDIR python3 setup.py test ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/scripts/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0016714�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/scripts/update-po������������������������������������������������������������0000775�0000000�0000000�00000003046�15003420405�0020543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. PACKAGE=Sonata INTLTOOL_UPDATE="intltool-update --gettext-package=$PACKAGE" if ! which intltool-update > /dev/null then echo "You need intltool-update to update the translation files!" > /dev/fd/2 exit 1 fi cd $(dirname "$0")/../po rm -f missing echo Updating POTFILES.in... $INTLTOOL_UPDATE -m if [ -f missing ] then exit 1 fi echo Updating $PACKAGE.pot... $INTLTOOL_UPDATE -p for i in *.po do # Generate ;po files only for the specified language. echo "$*" | grep -q "$(echo $i | sed "s/.po$//g")" if [ $? = 0 -o $# = 0 ] then echo Updating $i... $INTLTOOL_UPDATE "${i%*.po}" echo Purging old translations from $i... msgattrib --output-file="$i" --no-obsolete "$i" fi done echo "Translation status:" $INTLTOOL_UPDATE -r ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/setup.cfg��������������������������������������������������������������������0000664�0000000�0000000�00000000100�15003420405�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[install] single_version_externally_managed = 1 record = RECORD ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/setup.py���������������������������������������������������������������������0000664�0000000�0000000�00000005353�15003420405�0016745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python import sys if sys.version_info <= (3, 2): sys.stderr.write("Sonata requires Python 3.2+\n") sys.exit(1) import os from setuptools import setup from sonata.version import version tests_require = [] if sys.version_info < (3, 3): # Available as unittest.mock since 3.3 tests_require.append('mock') def newer(source, generated): if ( os.path.exists(generated) and os.path.getmtime(source) < os.path.getmtime(generated) ): return False return True def capture(cmd): return os.popen(cmd).read().strip() def generate_translation_files(): lang_files = [] langs = (os.path.splitext(l)[0] for l in os.listdir('po') if l.endswith('po') and l != "messages.po") for lang in langs: pofile = os.path.join("po", "%s.po" % lang) modir = os.path.join("sonata", "share", "locale", lang, "LC_MESSAGES") mofile = os.path.join(modir, "sonata.mo") if not os.path.exists(modir): os.makedirs(modir) lang_files.append(('share/locale/%s/LC_MESSAGES' % lang, [mofile])) if newer(pofile, mofile): print("Generating %s" % mofile) os.system("msgfmt %s -o %s" % (pofile, mofile)) return lang_files versionfile = open("sonata/genversion.py", "wt") versionfile.write(""" # generated by setup.py VERSION = 'v%s' """ % version) versionfile.close() data_files = [ ('share/sonata', ['README.rst', 'CHANGELOG', 'TODO', 'TRANSLATORS']), ('share/applications', ['sonata.desktop']), ('share/man/man1', ['sonata.1']), ] + generate_translation_files() setup( name='Sonata', version=version, description='GTK+ client for the Music Player Daemon (MPD).', author='Scott Horowitz', author_email='stonecrest@gmail.com', url='http://www.nongnu.org/sonata/', classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: X11 Applications', 'Intended Audience :: End Users/Desktop', 'License :: GNU General Public License (GPL)', 'Operating System :: Linux', 'Programming Language :: Python', 'Topic :: Multimedia :: Sound :: Players', ], packages=["sonata", "sonata.plugins"], package_dir={"sonata": "sonata"}, data_files=data_files, package_data={ 'sonata': [ 'pixmaps/*.*', 'ui/*.glade', 'ui/*.css', 'plugins/ui/*.glade', 'plugins/ui/*.css', ], }, entry_points={ 'console_scripts': [ 'sonata=sonata.launcher:run', ] }, test_suite='sonata.tests', tests_require=tests_require, ) try: os.remove("sonata/genversion.py") os.remove("sonata/genversion.pyc") except: pass �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata.1���������������������������������������������������������������������0000664�0000000�0000000�00000002547�15003420405�0016604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH SONATA 1 "October 20, 2006" .SH NAME sonata \- GTK+ client for the Music Player Daemon .SH SYNOPSIS .B sonata [\fIOPTION\fR] .SH DESCRIPTION Sonata is an elegant GTK+ music client for the Music Player Daemon (MPD). .SH OPTIONS .TP .B \-h\fR, \fB\-\-help Show this help and exit .TP .B \-p\fR, \fB\-\-popup Popup song notification (requires D\-Bus) .TP .B \-t\fR, \fB\-\-toggle Toggles whether the app is minimized to tray or visible (requires D\-Bus) .TP .B \-v\fR, \fB\-\-version Show version information and exit .TP .B \-\-hidden Start app hidden (requires systray) .TP .B \-\-visible Start app visible (requires systray) .TP .B \-\-profile\=[NUM] Start with profile [NUM] .TP .B play Play song in playlist .TP .B pause Pause currently playing song .TP .B stop Stop currently playing song .TP .B next Play next song in playlist .TP .B prev Play previous song in playlist .TP .B pp Toggle play/pause; plays if stopped .TP .B repeat Toggle repeat mode .TP .B random Toggle random mode .TP .B info Display current song info .TP .B status Display MPD status .SH "SEE ALSO" .PP Website: http://www.nongnu.org/sonata/ .PP MPD Website: http://www.musicpd.org .SH AUTHOR Sonata was written by Scott Horowitz <stonecrest@gmail.com>. .PP This manual page is currently maintained by Scott Horowitz <stonecrest@gmail.com>. It was originally written by Michal Cihar <michal@cihar.com>. ���������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata.desktop���������������������������������������������������������������0000664�0000000�0000000�00000000312�15003420405�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [Desktop Entry] Name=Sonata Comment=An elegant GTK+ MPD client Exec=sonata Terminal=false Type=Application Icon=sonata Categories=GTK;AudioVideo;Player; StartupNotify=true Keywords=Player;Music;Audio; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0016512�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/__init__.py�����������������������������������������������������������0000664�0000000�0000000�00000001464�15003420405�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������__license__ = """ Sonata, an elegant GTK+ client for the Music Player Daemon Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> Copyright 2009-2014 Jonathan Ballet <jon@multani.info> This file is part of Sonata. Sonata 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. Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/about.py��������������������������������������������������������������0000664�0000000�0000000�00000022744�15003420405�0020207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# coding=utf-8 # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import gettext import os from gi.repository import Gtk, GdkPixbuf from sonata import misc, ui class About: def __init__(self, parent_window, config, version): self.parent_window = parent_window self.config = config self.version = version self.about_dialog = None self.shortcuts_dialog = None def about_close(self, _event, _data=None): if _data == Gtk.ResponseType.DELETE_EVENT or \ _data == Gtk.ResponseType.CANCEL: self.about_dialog.hide() return True def shortcuts_close(self, _event, _data=None): if _data == Gtk.ResponseType.DELETE_EVENT or \ _data == Gtk.ResponseType.CANCEL: self.shortcuts_dialog.hide() return True def shortcuts_close_click_cb(self, _button): self.shortcuts_dialog.hide() def _init_shortcuts_dialog(self): # define the shortcuts and their descriptions # these are all gettextable # Keep them here (not as XML) as they're more convenient this way mainshortcuts = \ [["F1", _("About Sonata")], ["F5", _("Preferences")], ["F11", _("Fullscreen Artwork Mode")], ["Alt-[1-5]", _("Switch to [1st-5th] tab")], ["Alt-C", _("Connect to MPD")], ["Alt-D", _("Disconnect from MPD")], ["Alt-R", _("Randomize current playlist")], ["Alt-Down", _("Expand player")], ["Alt-Left", _("Switch to previous tab")], ["Alt-Right", _("Switch to next tab")], ["Alt-Up", _("Collapse player")], ["Ctrl-H", _("Search library")], ["Ctrl-Q", _("Quit")], ["Ctrl-Shift-U", _("Update entire library")], ["Menu", _("Display popup menu")], ["Escape", _("Minimize to system tray (if enabled)")]] playbackshortcuts = \ [["Ctrl-Left", _("Previous track")], ["Ctrl-Right", _("Next track")], ["Ctrl-P", _("Play/Pause")], ["Ctrl-S", _("Stop")], ["Ctrl-Minus", _("Lower the volume")], ["Ctrl-Plus", _("Raise the volume")]] currentshortcuts = \ [["Enter/Space", _("Play selected song")], ["Delete", _("Remove selected song(s)")], ["Ctrl-I", _("Center currently playing song")], ["Ctrl-T", _("Edit selected song's tags")], ["Ctrl-Shift-S", _("Save to new playlist")], ["Ctrl-Delete", _("Clear list")], ["Alt-R", _("Randomize list")]] libraryshortcuts = \ [["Enter/Space", _("Add selected song(s) or enter directory")], ["Backspace", _("Go to parent directory")], ["Ctrl-D", _("Add selected item(s)")], ["Ctrl-R", _("Replace with selected item(s)")], ["Ctrl-T", _("Edit selected song's tags")], ["Ctrl-Shift-D", _("Add selected item(s) and play")], ["Ctrl-Shift-R", _("Replace with selected item(s) and play")], ["Ctrl-U", _("Update selected item(s)/path(s)")]] playlistshortcuts = \ [["Enter/Space", _("Add selected playlist(s)")], ["Delete", _("Remove selected playlist(s)")], ["Ctrl-D", _("Add selected playlist(s)")], ["Ctrl-R", _("Replace with selected playlist(s)")], ["Ctrl-Shift-D", _("Add selected playlist(s) and play")], ["Ctrl-Shift-R", _(('Replace with selected ' 'playlist(s) and play'))]] streamshortcuts = \ [["Enter/Space", _("Add selected stream(s)")], ["Delete", _("Remove selected stream(s)")], ["Ctrl-D", _("Add selected stream(s)")], ["Ctrl-R", _("Replace with selected stream(s)")], ["Ctrl-Shift-D", _("Add selected stream(s) and play")], ["Ctrl-Shift-R", _(('Replace with selected ' 'stream(s) and play'))]] infoshortcuts = \ [["Ctrl-T", _("Edit playing song's tags")]] # define the main array- this adds headings to each section of # shortcuts that will be displayed shortcuts = [[_("Main Shortcuts"), mainshortcuts], [_("Playback Shortcuts"), playbackshortcuts], [_("Current Shortcuts"), currentshortcuts], [_("Library Shortcuts"), libraryshortcuts], [_("Playlist Shortcuts"), playlistshortcuts], [_("Stream Shortcuts"), streamshortcuts], [_("Info Shortcuts"), infoshortcuts]] self.shortcuts_dialog = self.builder.get_object('shortcuts_dialog') self.shortcuts_dialog.connect('response', self.shortcuts_close) self.shortcuts_dialog.connect('delete_event', self.shortcuts_close) shortcuts_close_button = self.builder.get_object( 'shortcuts_dialog_closebutton') shortcuts_close_button.connect('clicked', self.shortcuts_close_click_cb) # each pair is a [ heading, shortcutlist ] vbox = self.builder.get_object('shortcuts_dialog_content_box') for heading, shortcutlist in shortcuts: titlelabel = Gtk.Label(heading, xalign=0) titlelabel.get_style_context().add_class('heading') vbox.pack_start(titlelabel, False, False, 2) # print the items of [ shortcut, desc ] for shortcut, desc in shortcutlist: tmphbox = Gtk.HBox() tmplabel = Gtk.Label('{}:'.format(shortcut), xalign=0) tmplabel.get_style_context().add_class('shortcut') tmpdesc = Gtk.Label(desc, xalign=0, wrap=False) tmphbox.pack_start(tmplabel, False, False, 2) tmphbox.pack_start(tmpdesc, True, True, 2) vbox.pack_start(tmphbox, False, False, 2) vbox.pack_start(Gtk.Label(" "), False, False, 2) def about_shortcuts(self, _button): if not self.shortcuts_dialog: self._init_shortcuts_dialog() self.shortcuts_dialog.show_all() self.shortcuts_dialog.run() def statstext(self, stats): song_count = int(stats['songs']) song_text = ngettext('{count} song.', '{count} songs.', song_count).format(count=song_count) album_count = int(stats['albums']) album_text = ngettext('{count} album.', '{count} albums.', album_count).format(count=album_count) artist_count = int(stats['artists']) artist_text = ngettext('{count} artist.', '{count} artists.', artist_count).format(count=artist_count) try: db_playtime = float(stats['db_playtime']) hours = int(misc.convert_time(db_playtime).split(':')[-3]) except: hours = 0 if hours >= 24: days = round(hours / 24, 1) time_text = ngettext('{count} day of bliss.', '{count} days of bliss.', days).format(count=days) else: time_text = ngettext('{count} hour of bliss.', '{count} hours of bliss.', hours).format(count=hours) parts = (song_text, album_text, artist_text, time_text) live_parts = [part for part in parts if part is not None] return '\n'.join(live_parts) def about_load(self, stats): self.builder = ui.builder('about') self.provider = ui.css_provider('about') self.about_dialog = self.builder.get_object('about_dialog') try: self.about_dialog.set_transient_for(self.parent_window) except: pass self.about_dialog.set_version(self.version) if stats: self.about_dialog.set_copyright(self.statstext(stats)) context = self.about_dialog.get_style_context() logo_icon = Gtk.IconFactory.lookup_default('sonata-large') logo_pb = logo_icon.render_icon_pixbuf(context, -1) self.about_dialog.set_logo(logo_pb) # Add button to show keybindings: children = self.about_dialog.action_area.get_children()[-1] self.about_dialog.action_area.reorder_child(children, -2) # Connect to callbacks self.about_dialog.connect('response', self.about_close) self.about_dialog.connect('delete_event', self.about_close) shortcut_button = self.builder.get_object('shortcut_button') shortcut_button.connect('clicked', self.about_shortcuts) self.about_dialog.show_all() ����������������������������multani-sonata-bf88fdc/sonata/artwork.py������������������������������������������������������������0000664�0000000�0000000�00000066176�15003420405�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import collections import logging import os import re import shutil import threading # artwork_update starts a thread _artwork_update from gi.repository import Gtk, Gdk, GdkPixbuf, GLib, GObject from sonata import img, ui, misc, consts, mpdhelper as mpdh from sonata.song import SongRecord from sonata.pluginsystem import pluginsystem COVERS_DIR = os.path.expanduser("~/.covers") COVERS_TEMP_DIR = os.path.join(COVERS_DIR, 'temp') logger = logging.getLogger(__name__) class ArtworkLocator: """Find and return artwork paths requested for songs.""" def __init__(self, config): self.config = config def _get_locations(self, artist, album, song_dir, default_kind=None): """Get the various possible locations for the artwork for one song.""" artist = (artist or "").replace("/", "") album = (album or "").replace("/", "") song_dir = os.path.join( self.config.current_musicdir, get_multicd_album_root_dir(song_dir) ) join = os.path.join custom_filename = self.config.art_location_custom_filename # Build a map of location kinds and actual locations. The order is # important and represents the most common/easiest to the least # common/more expensive ways of finding covers. # Each location is an iterable of possibly several locations. pre_map = [ ('HOMECOVERS', (COVERS_DIR, "%s-%s.jpg" % (artist, album))), ('COVER', (song_dir, "cover.jpg")), ('FOLDER', (song_dir, "folder.jpg")), ('ALBUM', (song_dir, "album.jpg")), ('CUSTOM', ((song_dir, custom_filename) if len(custom_filename) > 0 else [] )), ('MISC', (join(song_dir, location) for location in consts.ART_LOCATIONS_MISC)), ('SINGLE', self._lookup_single_image(song_dir)), ] map = collections.OrderedDict() for (fake_key, value) in pre_map: key = getattr(consts, 'ART_LOCATION_%s' % fake_key) if isinstance(value, tuple): value = [join(*value)] map[key] = value # Move the default kind requested to the beginning of the map, so it has # priority over the other. if default_kind in map: map.move_to_end(default_kind, last=False) return map def _lookup_single_image(self, song_dir): """Look up a song directory to find one image to be the artwork. This basically loops over all the files in a song directory and returns something only if it found exactly one image. This will be the artwork image. """ try: files = os.listdir(song_dir) except OSError: return get_ext = lambda path: os.path.splitext(path)[1][1:] artworks = [f for f in files if get_ext(f) in img.VALID_EXTENSIONS] if len(artworks) != 1: return yield os.path.join(song_dir, artworks[0]) def path(self, artist, album, song_dir, specific_kind=None): """Return the artwork path from a song data (without checks) By default, the location of the song is made based on the preferences set by the user, but this can be overriden if necessary. No guarantees are made with the respect to the path validity. """ locations_map = self._get_locations(artist, album, song_dir, self.config.art_location) if specific_kind is None: specific_kind = self.config.art_location try: result = next(iter(locations_map[specific_kind])) except StopIteration: # We tried an empty location :( result = None return result def path_from_song(self, song, specific_kind=None): """Same as `path()` but using a Song object.""" return self.path(song.artist, song.album, os.path.dirname(song.file), specific_kind) def locate(self, artist, album, song_dir): """Locate an actual artwork for the specified data. Sonata tries *very* hard to find an artwork for the specified data. It looks in "well-known" places and return the first artwork which actually exists. """ # XXX: the 'kind' returned can probably be removed once the calling code # will be refactored. It is used only for some kind of thread # concurrency management, and is probably buggy and not optimal... locations_map = self._get_locations(artist, album, song_dir, self.config.art_location) for kind, locations in locations_map.items(): for location in locations: if os.path.exists(location): return (kind, location) return (None, None) def get_multicd_album_root_dir(albumpath): """Go one dir upper for multicd albums >>> from sonata.artwork import get_multicd_album_root_dir as f >>> f('Moonspell/1995 - Wolfheart/cd 2') 'Moonspell/1995 - Wolfheart' >>> f('2007 - Dark Passion Play/CD3') '2007 - Dark Passion Play' >>> f('Ayreon/2008 - 01011001/CD 1 - Y') 'Ayreon/2008 - 01011001' """ if re.compile(r'(?i)cd\s*\d+').match(os.path.split(albumpath)[1]): albumpath = os.path.split(albumpath)[0] return albumpath def artwork_path(song, config): if song.name is not None: f = artwork_stream(song.name) else: f = ArtworkLocator(config).path_from_song(song) return f def artwork_stream(stream_name): return os.path.join(os.path.expanduser('~/.covers'), "%s.jpg" % stream_name.replace("/", "")) class Artwork(GObject.GObject): __gsignals__ = { 'artwork-changed': (GObject.SIGNAL_RUN_FIRST, None, (GdkPixbuf.Pixbuf,)), 'artwork-reset': (GObject.SIGNAL_RUN_FIRST, None, ()), } def __init__(self, config, is_lang_rtl, schedule_gc_collect, imagelist_append, remotefilelist_append, allow_art_search, status_is_play_or_pause, album_image, tray_image): super().__init__() self.config = config self.locator = ArtworkLocator(config) self.album_filename = 'sonata-album' # constants from main self.is_lang_rtl = is_lang_rtl # callbacks to main XXX refactor to clear this list self.schedule_gc_collect = schedule_gc_collect self.imagelist_append = imagelist_append self.remotefilelist_append = remotefilelist_append self.allow_art_search = allow_art_search self.status_is_play_or_pause = status_is_play_or_pause # local pixbufs, image file names self.sonatacd = Gtk.IconFactory.lookup_default('sonata-cd') self.sonatacd_large = Gtk.IconFactory.lookup_default('sonata-cd-large') self.albumpb = None self.currentpb = None # local UI widgets provided to main by getter methods self.albumimage = album_image self.albumimage.set_from_icon_set(self.sonatacd, -1) self.tray_album_image = tray_image # local version of Main.songinfo mirrored by update_songinfo self.songinfo = None # local state self.lastalbumart = None self.single_img_in_dir = None self.misc_img_in_dir = None self.stop_art_update = False self.downloading_image = False self.lib_art_cond = None # local artwork, cache for library self.lib_model = None self.lib_art_rows_local = [] self.lib_art_rows_remote = [] self.lib_art_pb_size = 0 self.cache = ArtworkCache(self.config) self.cache.load() def update_songinfo(self, songinfo): self.songinfo = songinfo def on_reset_image(self, _action): if self.songinfo: if 'name' in self.songinfo: # Stream, remove file: misc.remove_file(artwork_stream(self.songinfo.name)) else: # Normal song: misc.remove_file(self.locator.path_from_song(self.songinfo)) misc.remove_file(self.locator.path_from_song( self.songinfo, consts.ART_LOCATION_HOMECOVERS)) # Use blank cover as the artwork dest_filename = self.locator.path_from_song( self.songinfo, consts.ART_LOCATION_HOMECOVERS) try: emptyfile = open(dest_filename, 'w') emptyfile.close() except IOError: pass self.artwork_update(True) def artwork_set_tooltip_art(self, pix): # Set artwork pix = pix.new_subpixbuf(0, 0, 77, 77) self.tray_album_image.set_from_pixbuf(pix) del pix def artwork_stop_update(self): self.stop_art_update = True def artwork_is_downloading_image(self): return self.downloading_image def library_artwork_init(self, model, pb_size): self.lib_model = model self.lib_art_pb_size = pb_size self.lib_art_cond = threading.Condition() thread = threading.Thread(target=self._library_artwork_update) thread.name = "ArtworkLibraryUpdate" thread.daemon = True thread.start() def library_artwork_update(self, model, start_row, end_row, albumpb): self.albumpb = albumpb # Update self.lib_art_rows_local with new rows followed # by the rest of the rows. self.lib_art_cond.acquire() self.lib_art_rows_local = [] self.lib_art_rows_remote = [] start = start_row.get_indices()[0] end = end_row.get_indices()[0] test_rows = list(range(start, end + 1)) + list(range(len(model))) for row in test_rows: i = model.get_iter((row,)) icon = model.get_value(i, 0) if icon == self.albumpb: data = model.get_value(i, 1) self.lib_art_rows_local.append((i, data, icon)) self.lib_art_cond.notifyAll() self.lib_art_cond.release() def _library_artwork_update(self): while True: # Wait for items.. self.lib_art_cond.acquire() while(len(self.lib_art_rows_local) == 0 and \ len(self.lib_art_rows_remote) == 0): self.lib_art_cond.wait() self.lib_art_cond.release() # Try first element, giving precedence to local queue: if self.lib_art_rows_local: i, data, icon = self.lib_art_rows_local.pop(0) cb = self._library_artwork_update_local elif self.lib_art_rows_remote: i, data, icon = self.lib_art_rows_remote.pop(0) cb = self._library_artwork_update_remote else: continue cache_key = SongRecord(artist=data.artist, album=data.album, path=data.path) # Try to replace default icons with cover art: pb = self.cache.get_pixbuf(cache_key, self.lib_art_pb_size) cb(i, data, icon, cache_key, pb) def _library_artwork_update_local(self, i, data, icon, cache_key, pb): filename = None if pb is not None: # Continue to rescan for local artwork if we are # displaying the default album image, in case the user # has added a local image since we first scanned. filename = self.cache.get(cache_key) if os.path.basename(filename) == os.path.basename( self.album_filename): filename = None pb = None # No cached pixbuf, try local/remote search: if pb is None: pb, filename = self.library_get_album_cover( data.path, data.artist, data.album, self.lib_art_pb_size) # Set pixbuf icon in model; add to cache if pb is not None and filename is not None: self.cache.set(cache_key, filename) GLib.idle_add(self.library_set_cover, i, pb, data) if pb is None and self.config.covers_pref == consts.ART_LOCAL_REMOTE: # No local art found, add to remote queue for later self.lib_art_rows_remote.append((i, data, icon)) def _library_artwork_update_remote(self, i, data, icon, cache_key, pb): filename = None # No cached pixbuf, try local/remote search: if pb is None: pb, filename = self.library_get_album_cover(data.path, data.artist, data.album, self.lib_art_pb_size) filename = self.locator.path(data.artist, data.album, data.path) self.artwork_download_img_to_file(data.artist, data.album, filename) # Set pixbuf icon in model; add to cache if pb is not None and filename is not None: self.cache.set(cache_key, filename) GLib.idle_add(self.library_set_cover, i, pb, data) if pb is None: # No remote art found, store self.albumpb filename in cache self.cache.set(cache_key, self.album_filename) def library_set_image_for_current_song(self, cache_key): # Search through the rows in the library to see # if we match the currently playing song: if cache_key.artist is None and cache_key.album is None: return for row in self.lib_model: if str(cache_key.artist).lower() == str(row[1].artist).lower() \ and str(cache_key.album).lower() == str(row[1].album).lower(): pb = self.cache.get_pixbuf(cache_key, self.lib_art_pb_size) if pb: self.lib_model.set_value(row.iter, 0, pb) def library_set_cover(self, i, pb, data): if self.lib_model.iter_is_valid(i): if self.lib_model.get_value(i, 1) == data: self.lib_model.set_value(i, 0, pb) def library_get_album_cover(self, song_dir, artist, album, pb_size): _tmp, coverfile = self.locator.locate(artist, album, song_dir) if coverfile: try: coverpb = GdkPixbuf.Pixbuf.new_from_file_at_size(coverfile, pb_size, pb_size) except: # Delete bad image: misc.remove_file(coverfile) return (None, None) w = coverpb.get_width() h = coverpb.get_height() coverpb = img.do_style_cover(self.config, coverpb, w, h) return (coverpb, coverfile) return (None, None) def artwork_update(self, force=False): if force: self.lastalbumart = None self.stop_art_update = False if not self.config.show_covers: return if not self.songinfo: self.artwork_set_default_icon() return if self.status_is_play_or_pause(): thread = threading.Thread(target=self._artwork_update) thread.name = "ArtworkUpdate" thread.daemon = True thread.start() else: self.artwork_set_default_icon() def _artwork_update(self): if 'name' in self.songinfo: # Stream streamfile = artwork_stream(self.songinfo.name) if os.path.exists(streamfile): GLib.idle_add(self.artwork_set_image, streamfile, None, None, None) else: self.artwork_set_default_icon() else: # Normal song: artist = self.songinfo.artist or "" album = self.songinfo.album or "" path = os.path.dirname(self.songinfo.file) if len(artist) == 0 and len(album) == 0: self.artwork_set_default_icon(artist, album, path) return filename = self.locator.path_from_song(self.songinfo) if filename == self.lastalbumart: # No need to update.. self.stop_art_update = False return self.lastalbumart = None imgfound = self.artwork_check_for_local(artist, album, path) if not imgfound: if self.config.covers_pref == consts.ART_LOCAL_REMOTE: imgfound = self.artwork_check_for_remote(artist, album, path, filename) def artwork_check_for_local(self, artist, album, path): self.artwork_set_default_icon(artist, album, path) self.misc_img_in_dir = None self.single_img_in_dir = None location_type, filename = self.locator.locate( self.songinfo.artist, self.songinfo.album, os.path.dirname(self.songinfo.file)) if location_type is not None and filename: if location_type == consts.ART_LOCATION_MISC: self.misc_img_in_dir = filename elif location_type == consts.ART_LOCATION_SINGLE: self.single_img_in_dir = filename GLib.idle_add(self.artwork_set_image, filename, artist, album, path) return True return False def artwork_check_for_remote(self, artist, album, path, filename): self.artwork_set_default_icon(artist, album, path) self.artwork_download_img_to_file(artist, album, filename) if os.path.exists(filename): GLib.idle_add(self.artwork_set_image, filename, artist, album, path) return True return False def artwork_set_default_icon(self, artist=None, album=None, path=None): GLib.idle_add(self.albumimage.set_from_icon_set, self.sonatacd, -1) self.emit('artwork-reset') GLib.idle_add(self.tray_album_image.set_from_icon_set, self.sonatacd, -1) self.lastalbumart = None # Also, update row in library: if artist is not None: cache_key = SongRecord(artist=artist, album=album, path=path) self.cache.set(cache_key, self.album_filename) GLib.idle_add(self.library_set_image_for_current_song, cache_key) def artwork_set_image(self, filename, artist, album, path, info_img_only=False): # Note: filename arrives here is in FILESYSTEM_CHARSET, not UTF-8! if self.artwork_is_for_playing_song(filename): if os.path.exists(filename): # We use try here because the file might exist, but might # still be downloading or corrupt: try: pix = GdkPixbuf.Pixbuf.new_from_file(filename) except: # If we have a 0-byte file, it should mean that # sonata reset the image file. Otherwise, it's a # bad file and should be removed. if os.stat(filename).st_size != 0: misc.remove_file(filename) return self.currentpb = pix if not info_img_only: # Store in cache cache_key = SongRecord(artist=artist, album=album, path=path) self.cache.set(cache_key, filename) # Artwork for tooltip, left-top of player: (pix1, w, h) = img.get_pixbuf_of_size(pix, 75) pix1 = img.do_style_cover(self.config, pix1, w, h) pix1 = img.pixbuf_add_border(pix1) pix1 = img.pixbuf_pad(pix1, 77, 77) self.albumimage.set_from_pixbuf(pix1) self.artwork_set_tooltip_art(pix1) del pix1 # Artwork for library, if current song matches: self.library_set_image_for_current_song(cache_key) self.emit('artwork-changed', pix) del pix self.lastalbumart = filename self.schedule_gc_collect() def artwork_set_image_last(self): self.artwork_set_image(self.lastalbumart, None, None, None, True) def artwork_is_for_playing_song(self, filename): # Since there can be multiple threads that are getting album art, # this will ensure that only the artwork for the currently playing # song is displayed if self.status_is_play_or_pause() and self.songinfo: if 'name' in self.songinfo: streamfile = artwork_stream(self.songinfo.name) if filename == streamfile: return True else: # Normal song: if (filename in [self.locator.path_from_song(self.songinfo, l) for l in [consts.ART_LOCATION_HOMECOVERS, consts.ART_LOCATION_COVER, consts.ART_LOCATION_ALBUM, consts.ART_LOCATION_FOLDER, consts.ART_LOCATION_CUSTOM]] or (self.misc_img_in_dir and \ filename == self.misc_img_in_dir) or (self.single_img_in_dir and filename == \ self.single_img_in_dir)): return True # If we got this far, no match: return False def artwork_download_img_to_file(self, artist, album, dest_filename, all_images=False): downloader = CoverDownloader(dest_filename, self.download_progress, all_images) self.downloading_image = True # Fetch covers from covers websites or such... cover_fetchers = pluginsystem.get('cover_fetching') for plugin, callback in cover_fetchers: logger.info("Looking for covers for %r from %r (using %s)", album, artist, plugin.name) try: callback(artist, album, downloader.on_save_callback, downloader.on_err_cb) except Exception as e: if logger.isEnabledFor(logging.DEBUG): log = logger.exception else: log = logger.warning log("Error while downloading covers from %s: %s", plugin.name, e) if downloader.found_images: break self.downloading_image = False return downloader.found_images def download_progress(self, dest_filename_curr, i): # This populates Main.imagelist for the remote image window if os.path.exists(dest_filename_curr): pix = GdkPixbuf.Pixbuf.new_from_file(dest_filename_curr) pix = pix.scale_simple(148, 148, GdkPixbuf.InterpType.HYPER) pix = img.do_style_cover(self.config, pix, 148, 148) pix = img.pixbuf_add_border(pix) if self.stop_art_update: del pix return False # don't continue to next image self.imagelist_append([i + 1, pix]) del pix self.remotefilelist_append(dest_filename_curr) if i == 0: self.allow_art_search() ui.change_cursor(None) return True # continue to next image def have_last(self): if self.lastalbumart is not None: return True return False class CoverDownloader: """Download covers and store them in temporary files""" def __init__(self, path, progress_cb, all_images): self.path = path self.progress_cb = progress_cb self.max_images = 50 if all_images else 1 self.current = 0 @property def found_images(self): return self.current != 0 def on_save_callback(self, content_fp): """Return True to continue finding covers, False to stop finding covers.""" self.current += 1 if self.max_images > 1: path = self.path.replace("<imagenum>", str(self.current)) else: path = self.path with open(path, 'wb') as fp: shutil.copyfileobj(content_fp, fp) if self.max_images > 1: # XXX: progress_cb makes sense only if we are downloading several # images, since it is supposed to update the choose artwork # dialog... return self.progress_cb(path, self.current-1) def on_err_cb(self, reason=None): """Return True to stop finding, False to continue finding covers.""" return False class ArtworkCache: def __init__(self, config, path=None): self.logger = logging.getLogger('sonata.artwork.cache') self._cache = {} self.config = config self.path = path if path is not None else \ os.path.expanduser("~/.config/sonata/art_cache") def set(self, key, value): self.logger.debug("Setting %r to %r", key, value) self._cache[key] = value def get(self, key): self.logger.debug("Requesting for %r", key) return self._cache.get(key) def get_pixbuf(self, key, size, default=None): self.logger.debug("Requesting pixbuf for %r", key) try: path = self._cache[key] except KeyError: return default if not os.path.exists(path): self._cache.pop(key, None) return default try: p = GdkPixbuf.Pixbuf.new_from_file_at_size(path, size, size) except: self.logger.exception("Unable to load %r at size (%d, %d)", path, size, size) raise return img.do_style_cover(self.config, p, size, size) def save(self): self.logger.debug("Saving to %s", self.path) misc.create_dir(os.path.dirname(self.path)) try: with open(self.path, 'w', encoding="utf8") as f: f.write(repr(self._cache)) except IOError as e: self.logger.info("Unable to save: %s", e) def load(self): self.logger.debug("Loading from %s", self.path) self._cache = {} try: with open(self.path, 'r', encoding="utf8") as f: self._cache = eval(f.read()) except (IOError, SyntaxError) as e: self.logger.info("Unable to load: %s", e) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/audioscrobbler.py�����������������������������������������������������0000664�0000000�0000000�00000102620�15003420405�0022064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# $Id$ """ ~~~~~~~~~~~ PyScrobbler ~~~~~~~~~~~ Python Classes for AudioScrobbler ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A set of python classes for interacting with the Last.fm AudioScrobbler services. AudioScrobblerQuery AudioScrobblerQuery is used to consume the web services that provide similar artists, charts, tags and so on AudioScrobblerPost AudioScrobblerPost is used to update your personal play information for those of you (like me) who've been stoopid enough to write your own player. AudioScrobblerQuery: AudioScrobbler Web Service Consumption ============================================================= A set of classes for consuming the AudioScrobbler web services. Currently we consume protocol 1.0, as defined at: http://www.audioscrobbler.net/data/webservices Basic usage ----------- >>> lips = AudioScrobblerQuery(artist='The Flaming Lips') >>> for artist in lips.similar(): ... print artist.name, artist.mbid ... or >>> for i in AudioScrobblerQuery(user='offmessage').topalbums() ... print i.name, i.image.small ... A certain number of the services take a querystring (for example a user's weekly artist chart takes a start and end date). These can be passed as follows: >>> offmessage = AudioScrobblerQuery(user='offmessage') >>> for i in offmessage.weeklyartistchart(_from=1114965332, to=1115570132): ... print i.name, i.chartposition ... Note that we have had to prefix the ``from`` keyword with an underscore (``_``). This is because ``from`` is a reserved word in Python and can't be used as a parameter name. Any parameter passed with a leading underscore will have that underscore stripped (so ``_from`` is passed as ``from``, as ``_foo`` would be passed as ``foo``). If an element has an attribute (for example the artist has an ``mbid`` in /user/.../topalbums.xml) these can be accessed as a dictionary key of that element: >>> offmessage = AudioScrobblerQuery(user='offmessage') >>> for i in offmessage.topalbums(): ... print i.name, i.artist, i.artist['mbid'] ... if you're not sure if an element has an attribute they can be accessed instead using the ``get()`` method: >>> offmessage = AudioScrobblerQuery(user='offmessage') >>> for i in offmessage.topalbums(): ... print i.name, i.artist, i.artist.get('mbid', '') ... More control ------------ There are 2 additional keyword arguments that you can offer at the point of instantiation of the AudioScrobblerQuery object: host If the lovely people at Last.fm change their server name, or if you set up some kind of local proxy of their services you can set the host from which you get the XML. Usage: >>> lips = AudioScrobblerQuery(artist='The Flaming Lips', ... host='audioscrobbler.isotoma.com') Default is ``'ws.audioscrobbler.com'`` version If another version of the web services is released, and this code still holds up you can set the protocol version at instantiation. This is inserted into the request URL at the correct point (i.e. ws.audioscrobbler.com/**1.0**/artist/The+Flaming+Lips). Usage: >>> lips = AudioScrobberRequest(artist='The Flaming Lips', version='1.1') Default is ``'1.0'`` Caching ------- Each instance of the ``AudioScrobblerQuery`` maintains its own internal cache of requests, which are checked against the server's response. If the server returns a ``304`` (content not modified) we return the cached value, otherwise we return the result that the server gave us. This is all well and good, however at the time of writing the ``ws.audioscrobbler.com`` server does not support the ``304`` response for all pages, so you may find yourself making requests that you are sure should be cached, but in fact aren't. For example: http://ws.audioscrobbler.com/1.0/user/offmessage/topalbums.xml returns a ``304`` http://ws.audioscrobbler.com/1.0/artist/The+Flaming+Lips/similar.xml does not I have assumed that this is for a reason, and as such honour this behaviour. If a page does not return a ``Last-Modified`` header we do not cache it. Any page that does return such a header (but not the ``Pragma: no-cache`` header) gets cached. Any page that does return a ``Last-Modified`` header gets exactly what it sent to us sent back to it as the ``If-Modified-Since``. This is a fit of pragmatism based on the fact that calculating local dates and avoiding clock disparaties is not worth the effort. Also, note that the AudioScrobbler servers do not return the ``ETag`` header and so we do not look for it or refer to it. A last note ----------- These classes are for consuming the AudioScrobbler web services. As such each of the classes here have no ``set``, ``__setitem__`` or ``__setattr__`` methods. They are read only. If you want to actually manipulate the resulting XML you should access the underlying ElementTree_ instances directly using either the ``raw()`` or ``element()`` methods provided. You can then make use of the innate power of those classes directly: ``raw()`` returns an ElementTree: >>> tree = AudioScrobblerQuery(user='offmessage').topalbums().raw() while ``element()`` returns an Element at the point within the tree that you currently are: >>> lips = AudioScrobblerQuery(artist='The Flaming Lips') >>> elements = [ x.name.element() for x in lips.similar() ] which is equivalent to: >>> lips = AudioScrobberRequest(artist='The Flaming Lips') >>> elements = lips.similar().raw().findall('*/name') As an alternative you could also look at XMLTramp_, which is another XML manipulator designed primarily for consuming web services (and used in the FlickrClient_ script that gave me much inspiration for these classes). Last but not least a mention should go to BeautifulSoup_, just because it is the most powerful and flexible of this type of application that I've used. It specialises in badly formed XML/HTML though, and luckily is not required in this instance. That said, it's a powerful beast and you should have a look at it the minute your requirements become more complex than this code supports. .. _ElementTree: http://effbot.org/zone/element.htm .. _XMLTramp: http://www.aaronsw.com/2002/xmltramp/ .. _BeautifulSoup: http://www.crummy.com/software/BeautifulSoup/ AudioScrobblerPost: Update Your Personal Play History ===================================================== A set of classes for posting playlist information to your Last.fm account. Please note that you will need your own account to use these classes. Updated to work with version 1.2 of the Audioscrobbler protocol. Some stuff about the time management and internal cache should go here. Basic usage (outdated) ----------- >>> track = dict(artist_name="The Flaming Lips", song_title="The Yeah Yeah Yeah Song", length=291, date_played="2006-04-29 04:20:00", album="At War With The Mystics", mbid="" ) >>> post = AudioScrobblerPost(user='offmessage', password='mypasswd') >>> post(**track) >>> More control ------------ There are a number of keywords that can be passed at the time of instantiation of the ``AudioScrobblerPost`` class: verbose Boolean. If you pass ``verbose=True`` every log line is also printed. Useful for debugging and in interactive scripts. client_name By default pyscrobbler uses the ``tst`` client name. If you deploy these classes in an application with a wide user base it seems to be advisable to apply for your own client name. If lots of people start to use these classes as is I will apply for a unique name for them. If you have your own, pass it in here (as a string) client_version Currently we use ``1.0``. This is because we are using the ``tst`` client name (see above) and anything lower seems to raise an ``UPDATE`` message from the post server at handshake. protocol_version By default we use ``1.1``. These classes are not compatible with Protocol 1.0. It's unlikely they will be compatible with any later versions. The changes between 1.0 and 1.1 were pretty major; I can't see they'd be any less major for the next version. host By default we use ``post.audioscrobbler.com``. If the server name changes (or you want to run tests) you can pass a different host name here. In fact, the url that we authenticate against is built as ``"http://%s/?%s" % (host, params)`` so as long as your host string makes a valid url in that format, go for it. Note the trailing slash between host and the query string. This seems to be a requirement of urllib2. This means that your test auth script should be able to be called that way. Putting them to use in real life ================================ Some advice on using these classes. ``timeout`` ----------- I've not done anything about the socket timeout on the running system. It's not really this code's place to do anything about it, but it is something that probably needs sorting out, otherwise your scripts will hang for as long as your timeout setting if there is a problem with the Last.fm servers (which there appears to be fairly frequently with the submissions servers). Generally, if you are on a slow link or one with poor latency you can up the timeout so that your requests don't keep failing unnecessarily. However, if you're on a quick link you may want to lower it as low as 10 seconds, as the wait can be agonising if you're making a few requests and the server is not responding. Thanks ====== I took a considerable amount of inspiration from Michael Campeotto's FlickrClient_ script for AudioScrobblerQuery I've taken even greater amounts of inspiration from Mike Bleyer's iPodScrobbler_ script for AudioScrobblerPost. .. _FlickrClient: http://micampe.it/things/flickrclient .. _iPodScrobbler: http://www.hoc.net/mike/source/iPodScrobbler/ TODO ==== Mad leet reStructuredText epydoc mashup Get that sorted. Example query script Actually write some example query scripts :) Document use of the factory class AudioScrobbler License ======= Copyright 2011 Andy Theyers Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ __author__ = "Andy Theyers <andy@isotoma.com>" __version__ = "$Revision$"[11:-2] __docformat__ = "restructuredtext" import datetime import locale import hashlib import site import logging import sys import time import urllib.error, urllib.parse, urllib.request import configparser import os from xml.etree import ElementTree # This is lifted in the most part from iPodScrobbler (see docs above) # Get the base local encoding enc = 'ascii' try: enc = site.encoding except: pass if enc == 'ascii' and locale.getpreferredencoding(): enc = locale.getpreferredencoding() # if we are on MacOSX, we default to UTF8 # because apples python reports 'ISO8859-1' as locale, but MacOSX uses utf8 if sys.platform == 'darwin': enc = 'utf8' # AudioScrobblerQuery configuration settings audioscrobbler_request_version = '1.0' audioscrobbler_request_host = 'ws.audioscrobbler.com' # AudioScrobblerPost configuration settings audioscrobbler_post_version = '1.2' #updated audioscrobbler_post_host = 'post.audioscrobbler.com' client_name = 'sna' pyscrobbler_version = '1.0.0.0' # This is set to 1.0 while we use # client_name = u'tst' as we keep getting # UPDATE responses with anything less. def lines_from_utf8(lines): return [line.decode('utf-8') for line in lines] class AudioScrobblerError(Exception): """ The base AudioScrobbler error from which all our other exceptions derive """ def __init__(self, message): """ Create a new AudioScrobblerError. :Parameters: - `message`: The message that will be displayed to the user """ self.message = message def __repr__(self): msg = "%s: %s" return msg % (self.__class__.__name__, self.message,) def __str__(self): return self.__repr__() class AudioScrobblerConnectionError(AudioScrobblerError): """ The base network error, raise by invalid HTTP responses or failures to connect to the server specified (DNS, timeouts, etc.) """ def __init__(self, type, code, message): self.type = type self.code = code self.message = message def __repr__(self): msg = "AudioScrobblerConnectionError: %s: %s %s" return msg % (self.type.upper(), self.code, self.message,) class AudioScrobblerTypeError(AudioScrobblerError): """ If we would normally raise a TypeError we raise this instead """ pass class AudioScrobblerPostUpdate(AudioScrobblerError): """ If the POST server returns an ``UPDATE`` message we raise this exception. This is the only case when this exception is raised, allowing you to happily ignore it. """ def __repr__(self): msg = "An update to your AudioScrobbler client is available at %s" return msg % (self.message,) class AudioScrobblerPostFailed(AudioScrobblerError): """ If the POST server returns an ``FAILED`` message we raise this exception. """ def __repr__(self): msg = "Posting track to AudioScrobbler failed. Reason given: %s" return msg % (self.message,) class AudioScrobblerHandshakeError(AudioScrobblerError): """ If we fail the handshake this is raised. If you're running in a long running process you should pass on this error, as the system keeps a cache which ``flushcache()`` will clear for you when the server is back. """ pass class AudioScrobbler: """ Factory for Queries and Posts. Holds configuration for the session """ def __init__(self, audioscrobbler_request_version=audioscrobbler_request_version, audioscrobbler_post_version=audioscrobbler_post_version, audioscrobbler_request_host=audioscrobbler_request_host, audioscrobbler_post_host=audioscrobbler_post_host, client_name=client_name, client_version=pyscrobbler_version): self.logger = logging.getLogger(__name__) self.audioscrobbler_request_version = audioscrobbler_request_version self.audioscrobbler_post_version = audioscrobbler_post_version self.audioscrobbler_request_host = audioscrobbler_request_host self.audioscrobbler_post_host = audioscrobbler_post_host self.client_name = client_name self.client_version = pyscrobbler_version def query(self, **kwargs): """ Create a new AudioScrobblerQuery """ if len(kwargs) != 1: raise TypeError("__init__() takes exactly 1 argument, %s " "given" % (len(kwargs),)) ret = AudioScrobblerQuery(version=self.audioscrobbler_request_version, host=self.audioscrobbler_request_host, **kwargs) return ret def post(self, username, md5_password, verbose=False): """ Create a new AudioScrobblerPost """ ret = AudioScrobblerPost(username=username.encode('utf8'), md5_password=md5_password.encode('utf8'), host=self.audioscrobbler_post_host, protocol_version=self.audioscrobbler_post_version, client_name=self.client_name, client_version=self.client_version, verbose=verbose) return ret class AudioScrobblerCache: def __init__(self, elemtree, last): self.elemtree = elemtree self.requestdate = last def created(self): return self.requestdate def gettree(self): return self.elemtree class AudioScrobblerQuery: def __init__(self, version=audioscrobbler_request_version, host=audioscrobbler_request_host, **kwargs): if len(kwargs) != 1: raise TypeError("__init__() takes exactly 1 audioscrobbler " "request argument, %s given" % str(len(kwargs))) self.type = kwargs.keys()[0] self.param = str(kwargs[self.type]) self.baseurl = 'http://%s/%s/%s/%s' % (host, version, urllib.parse.quote(self.type), urllib.parse.quote(self.param), ) self._cache = {} def __getattr__(self, name): def method(_self=self, name=name, **params): # Build the URL url = '%s/%s.xml' % (_self.baseurl, urllib.parse.quote(name)) if len(params) != 0: for key in params.keys(): # This little mess is required to get round the fact that # 'from' is a reserved word and can't be passed as a # parameter name. if key.startswith('_'): params[key[1:]] = params[key] del params[key] url = '%s?%s' % (url, urllib.parse.urlencode(params)) req = urllib.request.Request(url) # Check the cache cache = _self._cache if url in cache and cache[url].created() is not None: req.add_header('If-Modified-Since', cache[url].created()) # Open the URL and test the response try: response = urllib.request.urlopen(url) except urllib.error.HTTPError as error: if error.code == 304: return AudioScrobblerItem(cache[url].getroot(), _self, url) if error.code == 400: raise AudioScrobblerConnectionError('ws', 400, error.fp.read()) raise AudioScrobblerConnectionError('http', error.code, error.msg) except urllib.error.URLError as error: code = error.reason.args[0] message = error.reason.args[1] raise AudioScrobblerConnectionError('network', code, message) elemtree = ElementTree.ElementTree(file=response) if response.headers.get('pragma', None) != 'no-cache': last_modified = response.headers.get('last-modified', None) else: last_modified = None _self._cache[url] = AudioScrobblerCache(elemtree, last_modified) return AudioScrobblerItem(elemtree.getroot(), _self, url) return method def __repr__(self): return "AudioScrobblerQuery(%s='%s')" % (self.type, self.param) def __str__(self): return self.__repr__() class AudioScrobblerItem: def __init__(self, element, parent, url=None): self._element = element self._parent = parent self.tag = element.tag self.text = element.text self._url = url if self._url is None: self._url = self._parent._url def __repr__(self): if isinstance(self._parent, AudioScrobblerQuery): return "<AudioScrobbler response from %s>" % (self._url,) return "<AudioScrobbler %s element at %s>" % (self.tag, id(self)) def __str__(self): if self.text is None: return '' text = self.text try: retval = text.encode(enc) except AttributeError: retval = text return retval def __getattr__(self, name): result = self._element.findall(name) if len(result) == 0: raise AttributeError("AudioScrobbler %s element has no " "subelement '%s'" % (self.tag, name)) ret = [AudioScrobblerItem(i, self) for i in result] if len(ret) == 1: return ret[0] return ret def __iter__(self): for i in self._element: yield AudioScrobblerItem(i, self) def __getitem__(self, i): return self._element.attrib[i] def get(self, i, default): if i in self._element.attrib: return self._element.attrib[i] else: return default def __getslice__(self, i, j): return [AudioScrobblerItem(x, self) for x in self._element[i:j]] def raw(self): def getparent(obj): if isinstance(obj._parent, AudioScrobblerQuery): return obj._parent return getparent(obj._parent) return getparent(self)._cache[self._url].gettree() def element(self): return self._element class AudioScrobblerPost: """ Provide the ability to post tracks played to a user's Last.fm account """ #Updated to protocol version 1.2 def __init__(self, username='', md5_password='', client_name=client_name, client_version=pyscrobbler_version, protocol_version=audioscrobbler_post_version, host=audioscrobbler_post_host, verbose=False): # Capture the information passed for future use self.params = dict(username=username, md5_password=md5_password, client_name=client_name, client_version=client_version, protocol_version=protocol_version, host=host) self.logger = logging.getLogger(__name__) if not verbose: self.logger.setLevel(logging.WARNING) self.auth_details = {} self.last_post = None self.interval = 0 self.cache = [] self.loglines = [] # TODO: it somehow duplicates with the logging module self.last_shake = None self.authenticated = False self.updateurl = None self.posturl = None self.npurl = None def auth(self): """ Authenticate against the server """ if self.authenticated: return True timestamp = str(int(time.time())).encode('ascii') md5_password = self.params['md5_password'] auth_token = hashlib.md5(md5_password + timestamp).hexdigest() p = {} p['hs'] = 'true' p['p'] = self.params['protocol_version'] p['c'] = self.params['client_name'] p['v'] = self.params['client_version'] p['u'] = self.params['username'] p['t'] = timestamp p['a'] = auth_token plist = [(k, urllib.parse.quote_plus(v).encode('utf-8')) for k, v in p.items()] authparams = urllib.parse.urlencode(plist) url = 'http://%s/?%s' % (self.params['host'], authparams) req = urllib.request.Request(url) try: url_handle = urllib.request.urlopen(req) except urllib.error.HTTPError as error: self.authenticated = False raise AudioScrobblerConnectionError('http', error.code, error.msg) except urllib.error.URLError as error: self.authenticated = False code = error.reason#.args[0] message = error.reason#.args[1] raise AudioScrobblerConnectionError('network', code, message) response = lines_from_utf8(url_handle.readlines()) if len(response) == 0: raise AudioScrobblerHandshakeError(('Got nothing back from ' 'the server')) username = self.params['username'] md5_password = self.params['md5_password'] # First we test the best and most likely case if response[0].startswith('OK'): answer = response[1].strip() self.auth_details['s'] = answer self.npurl = response[2].strip() self.posturl = response[3].strip() self.authenticated = True # Then the various failure states.... elif response[0].startswith('BANNED'): self.authenticated = False msg = "this client version has been banned from the server." raise AudioScrobblerHandshakeError(msg) elif response[0].startswith('BADAUTH'): self.authenticated = False msg = "The authentication details provided were incorrect." raise AudioScrobblerHandshakeError(msg) elif response[0].startswith('BADTIME'): self.authenticated = False msg = ('The timestamp provided was not close enough to ' 'the current time.') raise AudioScrobblerHandshakeError(msg) elif response[0].startswith('FAILED'): self.authenticated = False msg = response[0][6:] raise AudioScrobblerHandshakeError(msg) else: self.authenticated = False msg = "Unknown response from server: %r" % (response,) raise AudioScrobblerHandshakeError(msg) def posttrack(self, artist_name, song_title, length, date_played, tracknumber='', album='', mbid='', source='P'): """ Add the track to the local cache, and try to post it to the server """ self.addtrack(artist_name=artist_name, song_title=song_title, length=length, date_played=date_played, tracknumber=tracknumber, album=album, mbid=mbid, source=source) self.post() __call__ = posttrack def addtrack(self, artist_name, song_title, length, date_played, tracknumber='', album='', mbid='', source='P'): """ Add a track to the local cache """ # Quick sanity check on track length if type(length) == type(0): sane_length = length elif type(length) == type('') and length.isdigit(): sane_length = int(length) else: sane_length = -1 # If the track length is less than 30 move on if sane_length < 30: msg = ("Track '%s' by '%s' only %s seconds in length, so " "not added" % (song_title, artist_name, sane_length)) self.log(msg) # Otherwise build the track dictionary and add it to the local cache else: try: track = {'a[%s]': artist_name.encode('utf8'), 't[%s]': song_title.encode('utf8'), 'l[%s]': str(sane_length), 'i[%s]': date_played, 'b[%s]': album.encode('utf8'), 'm[%s]': mbid.encode('utf8'), 'r[%s]': '', 'n[%s]': str(tracknumber), 'o[%s]': source.encode('utf8'), } except: track = {'a[%s]': artist_name, 't[%s]': song_title, 'l[%s]': str(sane_length), 'i[%s]': date_played, 'b[%s]': album, 'm[%s]': mbid.encode('utf8'), 'r[%s]': '', 'n[%s]': str(tracknumber), 'o[%s]': source.encode('utf8'), } self.cache.append(track) def nowplaying(self, artist_name, song_title, length='', tracknumber='', album='', mbid=''): self.auth() p = {} p['s'] = self.auth_details['s'] p['a'] = artist_name p['t'] = song_title p['b'] = album p['l'] = str(length) p['n'] = str(tracknumber) p['m'] = str(mbid) npdata = urllib.parse.urlencode(p).encode('utf-8') req = urllib.request.Request(url=self.npurl, data=npdata) try: url_handle = urllib.request.urlopen(req) except urllib.error.HTTPError as error: self.authenticated = False self.logger.error( "%s", AudioScrobblerConnectionError('http', error.code, error.msg)) return except: code = '000' message = sys.exc_info()[1] self.logger.error( "%s", AudioScrobblerConnectionError('network', code, message)) return response = lines_from_utf8(url_handle.readlines()) if response[0].startswith('OK'): self.log("Now playing track updated ('%s' by '%s')." % (p['t'], p['a'])) elif response[0].startswith('BADSESSION'): self.authenticated = False def post(self): """ Post the tracks by popping the first ten off the cache and attempting to post them. """ if len(self.cache) == 0: return if len(self.cache) > 10: number = 10 else: number = len(self.cache) params = {} count = 0 for track in self.cache[:number]: for k in track.keys(): params[k % (count,)] = track[k] count += 1 self.auth() params.update(self.auth_details) postdata = urllib.parse.urlencode(params).encode('utf-8') req = urllib.request.Request(url=self.posturl, data=postdata) now = datetime.datetime.utcnow() try: url_handle = urllib.request.urlopen(req) except urllib.error.HTTPError as error: raise AudioScrobblerConnectionError('http', error.code, error.msg) except urllib.error.URLError as error: args = getattr(error.reason, 'args', None) code = '000' message = str(error) if args is not None: if len(args) == 1: message = error.reason.args[0] elif len(args) == 2: code = error.reason.args[0] message = error.reason.args[1] raise AudioScrobblerConnectionError('network', code, message) except: code = '000' message = sys.exc_info()[1] raise AudioScrobblerConnectionError('network', code, message) self.last_post = now response = lines_from_utf8(url_handle.readlines()) # Test the various responses possibilities: if response[0].startswith('OK'): for song in self.cache[:number]: self.log("Uploaded track successfully ('%s' by '%s')." \ % (song['t[%s]'], song['a[%s]'])) del self.cache[:number] elif response[0].startswith('BADSESSION'): self.log("Got BADSESSION.") self.authenticated = False elif response[0].startswith('FAILED'): reason = response[0][6:].strip() raise AudioScrobblerPostFailed(reason) else: msg = "Server returned something unexpected." raise AudioScrobblerPostFailed(msg) def flushcache(self): """ Post all the tracks in the cache """ while len(self.cache) > 0: self.post() def savecache(self, filename): """ Save all tracks in the cache to a file """ conf = configparser.ConfigParser() # Save each track in cache: count = 0 for track in self.cache: conf.add_section('Track ' + str(count)) for k in track.keys(): conf.set('Track ' + str(count), k, track[k]) count += 1 try: conf.write(open(filename, 'w')) except IOError: pass def retrievecache(self, filename): """ Retrieve all cached tracks from a file so that cached tracks are preserved across client restarts """ if not os.path.isfile(filename): return conf = configparser.ConfigParser() try: conf.read(filename) except IOError: return # Retrieve each cached track from file: count = 0 while conf.has_section('Track ' + str(count)): track = {} for key in ['a', 't', 'l', 'i', 'b', 'm', 'r', 'n', 'o']: if conf.has_option('Track ' + str(count), key + '[%s]'): track[key + '[%s]'] = conf.get('Track %s' % (str(count),), key + '[%s]') self.cache.append(track) count += 1 # Cached tracks retrieved, delete file: os.remove(filename) def log(self, msg): """ Add a line to the log, print it if verbose """ time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.loglines.append("%s: %s" % (time, msg)) self.logger.debug(msg) def getlog(self, clear=False): """ Return the entire log, clear it if requested """ if clear: retval = self.loglines self.loglines = [] return retval return self.loglines ����������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/breadcrumbs.py��������������������������������������������������������0000664�0000000�0000000�00000017420�15003420405�0021361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. from gi.repository import Gtk, Gdk, Pango class CrumbButton(Gtk.ToggleButton): """A ToggleButton tailored for use as a breadcrumb.""" def __init__(self, image, label): super().__init__() self.set_properties(can_focus=False, relief=Gtk.ReliefStyle.NONE) self.label = label # adapt Gtk.Button internal layout code: hbox = Gtk.HBox(spacing=2) align = Gtk.Alignment.new(0.5, 0.5, 0, 0) hbox.pack_start(image, False, False, 0) hbox.pack_start(label, True, True, 0) align.add(hbox) self.add(align) def ellipsize(self, do_ellipsize=True): can_ellipsize = len(self.label.get_text()) >= 15 if do_ellipsize and can_ellipsize: mode = Pango.EllipsizeMode.END width_chars = 15 else: mode = Pango.EllipsizeMode.NONE width_chars = -1 self.label.set_ellipsize(mode) self.label.set_max_width_chars(width_chars) self.label.set_width_chars(width_chars) return do_ellipsize and can_ellipsize class CrumbBox(Gtk.Box): """A box layout similar to Gtk.HBox, but specifically for breadcrumbs. * Crumbs in the middle are replaced with an ellipsis if necessary. * The root, parent, and current element are always kept visible. * The root and parent are put in a condensed form if necessary. * The current element is truncated if necessary. """ __gtype_name__ = 'CrumbBox' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def set_crumb_break(self, widget): self.crumb_break = widget def do_get_preferred_width(self): """This gets called to determine the size we request""" reqs = [w.size_request() for w in self] # Request "minimum" size: heights = [r.height for r in reqs] height = max([0] + heights) widths = [r.width for r in reqs] width = max([0] + widths) natural_width = self._req_sum(reqs) if len(reqs) == 0: # empty width = 0 elif len(reqs) < 3: # current crumb width = natural_width elif len(reqs) == 3: # parent and current width = 2 * height + self.props.spacing elif len(reqs) == 4: # root, parent and current width = 3 * height + 2 * self.props.spacing elif len(reqs) > 4: # root, break, parent, current pad = 3 * self.props.spacing width = 3 * height + reqs[1].width + pad return width, natural_width def _req_sum(self, reqs): pad = 0 if not reqs else (len(reqs)-1) * self.props.spacing return pad + sum([req.width for req in reqs]) def _condense(self, req, w): # FIXME show and hide cause a fight in an infinite loop # try: # w.get_child().get_child().get_children()[1].hide() # except (AttributeError, IndexError): # pass return req # XXX simplistic: set square size for now def _uncondense(self, w): pass # try: # w.get_child().get_child().get_children()[1].show() # except (AttributeError, IndexError): def _truncate(self, req, amount): req.width -= amount if req.width < 0: req.width = 0 return req def do_size_allocate(self, allocation): """This gets called to layout our child widgets""" # XXX allocation seems to stick at some width, no matter how much wider # the window gets, but if we go down the path and back, it goes higher? # Gtk bug? x0, y0 = allocation.x, allocation.y w0, h0 = allocation.width, allocation.height crumbs = self.get_children() if len(crumbs) < 2: if self.crumb_break: self.crumb_break.hide() Gtk.Box.do_size_allocate(self, allocation) return # Undo any earlier condensing and ellipsizing for crumb in crumbs: crumb.ellipsize(False) if len(crumbs) > 2: self._uncondense(crumbs[-2]) reqs = [w.get_child_requisition() for w in crumbs] # Step 1: Try ellipsizing if self._req_sum(reqs) > w0: # We want a descending sort by widths # We ellipsize biggest to smallest to preserve the most crumbs crumbsorted = [(w.width, crumb) for w, crumb in zip(reqs, crumbs)] sorted(crumbsorted, key=lambda crumb: crumb[0], reverse=True) for x, crumb in crumbsorted: if crumb.ellipsize(): i = crumbs.index(crumb) reqs[i] = crumb.get_child_requisition() if self._req_sum(reqs) < w0: break # Step 2: remove as many crumbs as needed except: # Never remove the parent or current hidden = [] while self._req_sum(reqs) > w0: if len(crumbs) > 2: hidden.append(crumbs.pop(0)) reqs.pop(0) else: break # don't remove the parent # If necessary, condense the parent crumb if self._req_sum(reqs) > w0 and len(crumbs) > 2: reqs[-2] = self._condense(reqs[-2], crumbs[-2]) # If necessary, truncate the current crumb if self._req_sum(reqs) > w0: reqs[-1] = self._truncate(reqs[-1], self._req_sum(reqs) - w0) # Now we are at minimum width # Only show the break (ellipsis) if we have hidden crumbs if self.crumb_break: if len(hidden): self.crumb_break.show() else: self.crumb_break.hide() x = 0 for w, req in zip(crumbs, reqs): alloc = Gdk.Rectangle() alloc.x = x0 + x alloc.y = y0 alloc.width = req.width alloc.height = h0 w.size_allocate(alloc) w.show() x += req.width + self.props.spacing for w in hidden: alloc = Gdk.Rectangle() alloc.x = -1 alloc.y = -1 alloc.width = 0 alloc.height = 0 w.size_allocate(alloc) w.hide() Gtk.Box.do_size_allocate(self, allocation) # this file can be run as a simple test program: # FIXME or XXX this is out of sync with the rest of file if __name__ == '__main__': w = Gtk.Window() crumbs = CrumbBox(spacing=2) items = [ (Gtk.STOCK_HARDDISK, "Filesystem"), (None, None), # XXX for ellipsis (Gtk.STOCK_OPEN, "home"), (Gtk.STOCK_OPEN, "user"), (Gtk.STOCK_OPEN, "music"), (Gtk.STOCK_OPEN, "genre"), (Gtk.STOCK_OPEN, "artist"), (Gtk.STOCK_OPEN, "album"), ] for stock, text in items: if stock: image = Gtk.Image.new_from_stock(stock, Gtk.IconSize.MENU) crumbs.pack_start(CrumbButton(image, Gtk.Label(label=text)), False, False, 0) else: crumbs.pack_start(Gtk.Label("..."), False, False, 0) w.add(crumbs) w.connect('hide', Gtk.main_quit) w.show_all() Gtk.main() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/cli.py����������������������������������������������������������������0000664�0000000�0000000�00000025327�15003420405�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import gettext import locale import logging import os from optparse import OptionParser import sys from sonata import config, misc, mpdhelper as mpdh from sonata.version import version # the mpd commands need a connection to server and exit without gui mpd_cmds = ["play", "pause", "stop", "next", "prev", "pp", "info", "status", "repeat", "random"] class Args: def __init__(self): self.logger = logging.getLogger(__name__) self.skip_gui = False self.start_visibility = None self.start_shell = False def parse(self, argv): """Parse the command line arguments. Separates options and arguments from the given argument list, checks their validity.""" # toggle and popup and fullscreen need d-bus and don't always need gui # version and help don't need anything and exit without gui # hidden and visible are only applicable when gui is launched # profile and no-start don't need anything _usage = "\n".join((_("%prog [OPTION]... [COMMAND]...") + "\n", _("Commands:"), " play %s" % _("play song in playlist"), " pause %s" % _("pause currently playing song"), " stop %s" % _("stop currently playing song"), " next %s" % _("play next song in playlist"), " prev %s" % _("play previous song in playlist"), " pp %s" % _("toggle play/pause; plays if stopped"), " repeat %s" % _("toggle repeat mode"), " random %s" % _("toggle random mode"), " info %s" % _("display current song info"), " status %s" % _("display MPD status"), )) _version = "%prog " + version parser = OptionParser(usage=_usage, version=_version) parser.add_option("-p", "--popup", dest="popup", action="store_true", help=_("popup song notification (requires D-Bus)")) parser.add_option("-t", "--toggle", dest="toggle", action="store_true", help=_("toggles whether the app is minimized to the tray or visible (requires D-Bus)")) parser.add_option("-f", "--fullscreen", dest="fullscreen", action="store_true", help=_("go fullscreen (requires D-Bus)")) parser.add_option("-n", "--no-start", dest="start", action="store_false", help=_("don't start app if D-Bus commands fail")) parser.add_option("--hidden", dest="start_visibility", action="store_false", help=_("start app hidden (requires systray)")) parser.add_option("--visible", dest="start_visibility", action="store_true", help=_("start app visible (requires systray)")) parser.add_option("--profile", dest="profile", metavar="NUM", help=_("start with profile NUM"), type=int) parser.add_option("--shell", dest="start_shell", action="store_true", help=_("start app with a interactive (ipython) shell")) parser.add_option("-v", "--verbose", dest="log_level", action="append_const", const=-10, help=_("Increase log verbosity")) parser.add_option("-q", "--quiet", dest="log_level", action="append_const", const=10, help=_("Decrease log verbosity")) parser.set_defaults(log_level=[logging.root.level]) options, self.cmds = parser.parse_args(argv[1:]) # Update default log level logging.root.setLevel(sum(options.log_level)) if logging.root.level >= logging.DEBUG: # Only display MPD logs if we area really trying to debug hard # (-vvv) logging.getLogger('mpd').setLevel(logging.WARNING) if options.toggle: options.start_visibility = True if options.popup or options.fullscreen and options.start_visibility is None: options.start_visibility = False self.start_visibility = options.start_visibility self.arg_profile = options.profile self.start_shell = options.start_shell for cmd in self.cmds: if cmd in mpd_cmds: self.skip_gui = True else: parser.error(_("unknown command %s") % cmd) if options.toggle or options.popup or options.fullscreen: from sonata import dbus_plugin as dbus if not dbus.using_dbus(): self.logger.critical( _("toggle and popup options require D-Bus. Aborting.")) sys.exit(1) dbus.execute_remote_commands(options.toggle, options.popup, options.fullscreen, options.start) def execute_cmds(self): """If arguments were passed, perform action on them.""" if self.cmds: main = CliMain(self) main.mpd_connect() for cmd in self.cmds: main.execute_cmd(cmd) sys.exit() def apply_profile_arg(self, config): if self.arg_profile: a = self.arg_profile if a > 0 and a <= len(config.profile_names): config.profile_num = a-1 self.logger.info(_("Starting Sonata with profile %s...") % config.profile_names[config.profile_num]) else: self.logger.critical( _("%d is not an available profile number.") % a) self.logger.critical( _("Profile numbers must be between 1 and %d.") % len(config.profile_names)) sys.exit(1) class CliMain: def __init__(self, args): global os, mpd, misc, config, mpdh import os import mpd from sonata import config, misc, mpdhelper as mpdh # This should disable processing for nearly all logging messages, as # long as no other handlers are configured for special loggers. # Note that using the "-v" command line argument is mostly useless in # this case... logging.root.setLevel(logging.CRITICAL) self.logger = logging.getLogger(__name__) self.config = config.Config(_('Default Profile'), _("by") + " %A " + _("from") + " %B") self.config.settings_load_real() args.apply_profile_arg(self.config) self.mpd = mpdh.MPDClient() def mpd_connect(self): host, port, password = misc.mpd_env_vars() if not host: host = self.config.host[self.config.profile_num] if not port: port = self.config.port[self.config.profile_num] if not password: password = self.config.password[self.config.profile_num] self.mpd.connect(host, port) if password: self.mpd.password(password) def execute_cmd(self, cmd): self.status = self.mpd.status() if not self.status: self.logger.critical(_( 'Unable to connect to MPD.\nPlease check your Sonata ' 'preferences or MPD_HOST/MPD_PORT environment variables.')) sys.exit(1) self.songinfo = self.mpd.currentsong() getattr(self, "_execute_%s" % cmd)() def _execute_play(self): self.mpd.play() def _execute_pause(self): self.mpd.pause(1) def _execute_stop(self): self.mpd.stop() def _execute_next(self): self.mpd.next() def _execute_prev(self): self.mpd.previous() def _execute_random(self): opt = int(not int(self.status["random"])) self.mpd.random(opt) def _execute_repeat(self): opt = int(not int(self.status["repeat"])) self.mpd.repeat(opt) def _execute_pp(self): if self.status['state'] in ['play']: self.mpd.pause(1) elif self.status['state'] in ['pause', 'stop']: self.mpd.play() def _execute_info(self): if self.status['state'] in ['play', 'pause']: cmds = [ (_("Title"), 'title'), (_("Artist"), 'artist'), (_("Album"), 'album'), (_("Date"), 'date'), (_("Track"), 'track'), (_("Genre"), 'genre'), (_("File"), 'file'), ] for pretty, key in cmds: value = str(self.songinfo.get(key)) if key == 'track': value = value.zfill(2) # XXX this could fail, if not all characters are supported by # os.stdout.encoding print("%s: %s" % (pretty, value)) at, _length = [int(c) for c in self.status['time'].split(':')] at_time = misc.convert_time(at) try: time = misc.convert_time(self.songinfo.time) print("%s: %s/%s" % (_("Time"), at_time, time)) except: print("%s: %s" % (_("Time"), at_time)) print("%s: %s" % (_("Bitrate"), self.status.get('bitrate', ''))) else: print(_("MPD stopped")) def _execute_status(self): state_map = { 'play': _("Playing"), 'pause': _("Paused"), 'stop': _("Stopped")} print("%s: %s" % (_("State"), state_map[self.status['state']])) print("%s %s" % (_("Repeat:"), _("On") \ if self.status['repeat'] == '1' else _("Off"))) print("%s %s" % (_("Random:"), _("On") \ if self.status['random'] == '1' else _("Off"))) print("%s: %s/100" % (_("Volume"), self.status['volume'])) print("%s: %s %s" % (_('Crossfade'), self.status['xfade'], ngettext('second', 'seconds', int(self.status['xfade'])))) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/config.py�������������������������������������������������������������0000664�0000000�0000000�00000032756�15003420405�0020346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module contains the configuration variables and implements their initialisation, loading, and saving in a file. Example usage: import config ... # XXX We shouldn't have the default values contain localised parts: self.config = config.Config(_('Default Profile'), _("by") + " %A " +\ _("from") + " %B") """ import logging import os import hashlib from configparser import RawConfigParser from sonata import misc, consts from sonata.song import SongRecord # Constant to express a None value LIB_NODATA = "!NONE!" logger = logging.getLogger(__name__) class ConfigParser(RawConfigParser): """Override the default configuration parser with specific loader""" def getlist(self, section, name, sep=","): """Get a list of values, separated by `sep`""" value = self.get(section, name) return [v.strip() for v in value.split(sep)] def getlistint(self, section, name, sep=","): """Load a list of integer values, separated by `sep`.""" return [int(v) for v in self.getlist(section, name, sep)] class Serializer: """Helper to serialize specific values. Those methods can be function, but it makes easier to locate and load them if they are stored here.""" @staticmethod def list(value, sep=","): return ",".join(str(s) for s in value) listint = list class Config: """This class contains the configuration variables as attributes. Each new variable should be initialised to its default value in __init__, loaded from a file in settings_load_real, and saved to a file in settings_save_real. XXX This is mostly ConfigParser plus some custom serialization work. """ CONFIG_PATH = os.path.expanduser('~/.config/sonata/sonatarc') def __init__(self, default_profile_name, currsongformat2): self.wd = SongRecord(path="/") self._options = { 'audioscrobbler': { 'as_enabled': ('use_audioscrobbler', 'boolean', False), 'as_password_md5': ('password_md5', '', ''), 'as_username': ('username', '', '')}, 'connection': { 'autoconnect': ('auto', 'boolean', True), 'profile_num': ('profile_num', 'int', 0)}, 'currformat': { 'currentformat': ('current', '', '%A - %T|%L'), 'currsongformat1': ('currsong1', '', '%T'), 'currsongformat2': ('currsong2', '', currsongformat2), 'libraryformat': ('library', '', '%A - %T'), 'titleformat': ('title', '', '[Sonata] %A - %T')}, 'library': { 'lib_view': ('lib_view', 'int', consts.VIEW_FILESYSTEM)}, 'notebook': { 'current_tab_pos': ('current_tab_pos', 'int', 0), 'current_tab_visible': ('current_tab_visible', 'boolean', True), 'info_tab_pos': ('info_tab_pos', 'int', 4), 'info_tab_visible': ('info_tab_visible', 'boolean', True), 'library_tab_pos': ('library_tab_pos', 'int', 1), 'library_tab_visible': ('library_tab_visible', 'boolean', True), 'playlists_tab_pos': ('playlists_tab_pos', 'int', 2), 'playlists_tab_visible': ('playlists_tab_visible', 'boolean', True), 'streams_tab_pos': ('streams_tab_pos', 'int', 3), 'streams_tab_visible': ('streams_tab_visible', 'boolean', True)}, 'player': { 'art_location': ('art_location', 'int', consts.ART_LOCATION_HOMECOVERS), 'art_location_custom_filename': ('art_location_custom_filename', '', ''), 'columnwidths': ('columnwidths', 'listint', [325, 10]), 'covers_pref': ('covers_pref', 'int', consts.ART_LOCAL_REMOTE), 'covers_type': ('covers_type', 'int', 1), 'decorated': ('decorated', 'boolean', True), 'existing_playlist_option': ('existing_playlist', 'int', 0), 'expanded': ('expanded', 'boolean', True), 'h': ('h', 'int', 300), 'info_album_expanded': ('info_album_expanded', 'boolean', True), 'info_art_enlarged': ('info_art_enlarged', 'boolean', False), 'info_lyrics_expanded': ('info_lyrics_expanded', 'boolean', True), 'info_song_expanded': ('info_song_expanded', 'boolean', True), 'info_song_more': ('info_song_more', 'boolean', False), 'infofile_path': ('infofile_path', '', '/tmp/xmms-info'), 'initial_run': ('initial_run', 'boolean', True), 'last_search_num': ('search_num', 'int', 0), 'lyrics_location': ('lyrics_location', 'int', consts.LYRICS_LOCATION_HOME), 'minimize_to_systray': ('minimize', 'boolean', False), 'ontop': ('ontop', 'boolean', False), 'popup_option': ('popup_time', 'int', 2), 'screen': ('screen', 'int', 0), 'show_covers': ('covers', 'boolean', True), 'show_header': ('show_header', 'boolean', True), 'show_lyrics': ('lyrics', 'boolean', True), 'show_notification': ('notification', 'boolean', False), 'show_playback': ('playback', 'boolean', True), 'show_progress': ('progressbar', 'boolean', True), 'show_statusbar': ('statusbar', 'boolean', False), 'show_trayicon': ('trayicon', 'boolean', True), 'sticky': ('sticky', 'boolean', False), 'stop_on_exit': ('stop_on_exit', 'boolean', False), 'tabs_expanded': ('tabs_expanded', 'boolean', False), 'traytips_notifications_location': ('notif_location', 'int', 0), 'update_on_start': ('update_on_start', 'boolean', False), 'url_browser': ('browser', '', ''), 'use_infofile': ('use_infofile', 'boolean', False), 'w': ('w', 'int', 400), 'withdrawn': ('withdrawn', 'boolean', False), 'x': ('x', 'int', 0), 'xfade': ('xfade', 'int', 0), 'xfade_enabled': ('xfade_enabled', 'boolean', False), 'y': ('y', 'int', 0)}, 'plugins': { 'autostart_plugins': ('autostart_plugins', 'list', []), 'known_plugins': ('known_plugins', 'list', [])}, 'tags': { 'tags_use_mpdpath': ('use_mpdpaths', 'boolean', False)} } self._indexed_options = { 'streams': ('num_streams', { 'stream_names': ('names', '', []), 'stream_uris': ('uris', '', []), }), 'profiles': ('num_profiles', { 'profile_names': ('names', '', [default_profile_name]), 'musicdir': ('musicdirs', '', ["~/music"]), 'host': ('hosts', '', ['localhost']), 'port': ('ports', 'int', [6600]), 'password': ('passwords', '', ['']), }) } @property def current_musicdir(self): return self.musicdir[self.profile_num] def settings_load_real(self): """Load configuration from file""" conf = ConfigParser() misc.create_dir(os.path.dirname(self.CONFIG_PATH)) conf.read(self.CONFIG_PATH) # Load all the "simple" options, as described in self._options, and set # them as instance attribute. for section, attributes in self._options.items(): for attribute, (opt_key, type, default) in attributes.items(): if conf.has_option(section, opt_key): try: value = getattr(conf, 'get' + type)(section, opt_key) except Exception as e: # BBB: we need to expect some errors since Sonata uses # to write None values for "int"-type settings, which # fail to be loaded when using getint(). The new code # should write better values each time. Consider # removing this try/except clause when configuration # files are "clean". value = default # This should be safe in all cases faulty_value = conf.get(section, opt_key) logger.warning( "Can't load %r from section %r (as %s). Value is %r", opt_key, section, type if type else "str", faulty_value) else: value = default setattr(self, attribute, value) # Load all the attributes which have several values and are indexed. for section, (index_name, attributes) in self._indexed_options.items(): if not conf.has_option(section, index_name): num = 0 else: num = conf.getint(section, index_name) for attribute, (key, type, default) in attributes.items(): if num == 0: setattr(self, attribute, default) else: setattr(self, attribute, []) for i in range(num): opt_key = "%s[%d]" % (key, i) value = getattr(conf, 'get' + type)(section, opt_key) getattr(self, attribute).append(value) # Finally, load attributes related to the library. This is a bit weird # so we use an helper function to make it easier: def lib_get(name): # Helper function to load attributes related to the library. value = None if conf.has_option('library', name): value = conf.get('library', name) if value == LIB_NODATA: value = None return value if conf.has_section('library'): album = lib_get('lib_album') artist = lib_get('lib_artist') genre = lib_get('lib_genre') year = lib_get('lib_year') path = lib_get('lib_path') self.wd = SongRecord(album, artist, genre, year, path) # Finally, patch some values: self.musicdir = [misc.sanitize_musicdir(v) for v in self.musicdir] # Ensure we have a valid profile number: self.profile_num = max(0, min(self.profile_num, len(self.profile_names) - 1)) # Specifying remote artwork first is too confusing and probably # rarely used, so we're removing this option and defaulting users # back to the default 'local, then remote' option. # Backward compatibility if self.covers_pref > consts.ART_LOCAL_REMOTE: self.covers_pref = consts.ART_LOCAL_REMOTE def settings_save_real(self): """Save configuration in file""" conf = ConfigParser() # First, write all the "simple" attributes in their respective section: for section, attributes in self._options.items(): if not conf.has_section(section): conf.add_section(section) for attribute, (name, type, default) in attributes.items(): value = getattr(self, attribute) if hasattr(Serializer, type): value = getattr(Serializer, type)(value) conf.set(section, name, value) # Then, write all the attributes which are grouped together, and index # them. for section, (index_name, attributes) in self._indexed_options.items(): if not conf.has_section(section): conf.add_section(section) value_index = 0 for attribute, (name, type, default) in attributes.items(): for i, value in enumerate(getattr(self, attribute)): conf.set(section, "%s[%d]" % (name, i), value) value_index = i + 1 conf.set(section, index_name, value_index) # Finally, save the settings related to the library. Again, we use an # helper function to help us to do the job: def lib_set(name): value = getattr(self.wd, name) conf.set('library', 'lib_' + name, value if value is not None else LIB_NODATA) if not conf.has_section('library'): conf.add_section('library') lib_set('album') lib_set('artist') lib_set('genre') lib_set('year') lib_set('path') # Now, we can properly save the configuration file: try: with open(self.CONFIG_PATH, 'w', encoding="utf-8") as rc: conf.write(rc) except IOError as e: self.logger.warning("Couldn't write configuration into %r: %s", self.CONFIG_PATH, e) ������������������multani-sonata-bf88fdc/sonata/consts.py�������������������������������������������������������������0000664�0000000�0000000�00000004604�15003420405�0020401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module contains various constant definitions that any other module can import without risk of cyclic imports. Most of the constants are enum-like, that is, they provide symbolic names for a set of values. XXX Should some of these be moved to be private in some module, or into config? Example usage: from consts import consts ... if view == consts.VIEW_ALBUM: ... """ ART_LOCAL = 0 ART_LOCAL_REMOTE = 1 VIEW_FILESYSTEM = 0 VIEW_ARTIST = 1 VIEW_GENRE = 2 VIEW_ALBUM = 3 LYRIC_TIMEOUT = 10 NOTIFICATION_WIDTH_MAX = 500 NOTIFICATION_WIDTH_MIN = 350 FULLSCREEN_COVER_SIZE = 500 ART_LOCATION_HOMECOVERS = 0 # ~/.covers/[artist]-[album].jpg ART_LOCATION_COVER = 1 # file_dir/cover.jpg ART_LOCATION_ALBUM = 2 # file_dir/album.jpg ART_LOCATION_FOLDER = 3 # file_dir/folder.jpg ART_LOCATION_CUSTOM = 4 # file_dir/[custom] ART_LOCATION_SINGLE = 6 ART_LOCATION_MISC = 7 ART_LOCATIONS_MISC = ['front.jpg', '.folder.jpg', '.folder.png', 'AlbumArt.jpg', 'AlbumArtSmall.jpg'] LYRICS_LOCATION_HOME = 0 # ~/.lyrics/[artist]-[song].txt LYRICS_LOCATION_PATH = 1 # file_dir/[artist]-[song].txt LYRICS_LOCATION_HOME_ALT = 2 # ~/.lyrics/[artist] - [song].txt LYRICS_LOCATION_PATH_ALT = 3 # file_dir/[artist] - [song].txt LIB_COVER_SIZE = 32 COVERS_TYPE_STANDARD = 0 COVERS_TYPE_STYLIZED = 1 LIB_LEVEL_GENRE = 0 LIB_LEVEL_ARTIST = 1 LIB_LEVEL_ALBUM = 2 LIB_LEVEL_SONG = 3 NUM_ARTISTS_FOR_VA = 2 PREV_TRACK_RESTART = 5 # the names of the plug-ins that will be enabled by default DEFAULT_PLUGINS = [ 'playlists', 'streams', 'lyricwiki', 'localmpd', ] ����������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/current.py������������������������������������������������������������0000664�0000000�0000000�00000071253�15003420405�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """Handle the mpd current playlist and provides a user interface for it.""" import os import re import urllib.parse, urllib.request from gi.repository import Gtk, Gdk, Pango, GLib from sonata import ui, misc, formatting from sonata.mpdhelper import MPDSong class Current: def __init__(self, config, mpd, name, on_button_press, connected, sonata_loaded, songinfo, update_statusbar, iterate_now, add_tab): self.config = config self.mpd = mpd self.on_button_press = on_button_press self.connected = connected self.sonata_loaded = sonata_loaded self.songinfo = songinfo self.update_statusbar = update_statusbar self.iterate_now = iterate_now self.store = None self.filterbox_visible = False self.update_skip = False self.columnformat = None self.columns = None self.refilter_handler_id = None # TreeViewColumn, order self.column_sorted = (None, Gtk.SortType.DESCENDING) self.total_time = 0 self.resizing_columns = None self.prev_boldrow = -1 self.playlist_pos_before_filter = None self.sel_rows = None # Current tab builder = ui.builder('current') self.view = builder.get_object('current_page_treeview') self.selection = self.view.get_selection() self.filterpattern = builder.get_object('current_page_filterbox_entry') self.filterbox = builder.get_object('current_page_filterbox') self.vbox = builder.get_object('current_page_v_box') builder.get_object('current_tab_label').set_text(name) tab_label_widget = builder.get_object('current_tab_eventbox') self.tab = add_tab(self.vbox, tab_label_widget, name, self.view) self.view.connect('drag-data-received', self.on_dnd_received) self.view.connect('row-activated', self.on_click) self.view.connect('button-press-event', self.on_button_press) self.view.connect('drag-begin', self.on_drag_begin) self.view.connect_after('drag-begin', self.on_dnd_after_drag_begin) self.view.connect('button-release-event', self.on_button_release) self.filter_changed_handler = self.filterpattern.connect( 'changed', self.searchfilter_key_pressed) self.filterpattern.connect('activate', self.searchfilter_on_enter) filterclosebutton = builder.get_object( 'current_page_filterbox_closebutton') filterclosebutton.connect('clicked', self.searchfilter_toggle) # Set up current view self.initialize_columns() self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) target_reorder = ('MY_TREE_MODEL_ROW', Gtk.TargetFlags.SAME_WIDGET, 0) target_file_managers = ('text/uri-list', 0, 0) self.view.enable_model_drag_source( Gdk.ModifierType.BUTTON1_MASK, [target_reorder, target_file_managers], Gdk.DragAction.COPY | Gdk.DragAction.DEFAULT) self.view.enable_model_drag_dest( [target_reorder, target_file_managers], Gdk.DragAction.MOVE | Gdk.DragAction.DEFAULT) self.view.connect('drag-data-get', self.dnd_get_data_for_file_managers) def get_widgets(self): return self.vbox def is_empty(self): return len(self.store) == 0 def clear(self): self.store.clear() def on_song_change(self, status): self.unbold_boldrow(self.prev_boldrow) if status and 'song' in status: row = int(status['song']) self.boldrow(row) self.center_song_in_list() self.prev_boldrow = row def try_keep_position(func): """Decorator to keep the position of the view while updating it""" def do_try_keep_position(self, *args, **kwargs): realized = self.view.get_realized() if realized: position = self.view.get_visible_rect() result = func(self, *args, **kwargs) if realized: self.view.scroll_to_point(-1, position.y) return result return do_try_keep_position def get_treeview(self): return self.view def get_selection(self): return self.selection def get_filterbox_visible(self): return self.filterbox_visible @try_keep_position def initialize_columns(self): # Initialize current playlist data and widget self.resizing_columns = False self.columnformat = self.config.currentformat.split("|") current_columns = [MPDSong] + [str] * len(self.columnformat) + [int] previous_tracks = (item[0] for item in (self.store or [])) self.store = Gtk.ListStore(*(current_columns)) cellrenderer = Gtk.CellRendererText() cellrenderer.set_property("ellipsize", Pango.EllipsizeMode.END) cellrenderer.set_property("weight-set", True) num_columns = len(self.columnformat) if num_columns != len(self.config.columnwidths): # Number of columns changed, set columns equally spaced: self.config.columnwidths = [self.view.get_allocation().width / \ num_columns] * num_columns colnames = formatting.parse_colnames(self.config.currentformat) for column in self.view.get_columns(): self.view.remove_column(column) self.columns = [Gtk.TreeViewColumn(name, cellrenderer, markup=(i + 1)) for i, name in enumerate(colnames)] for tree in self.columns: tree.add_attribute(cellrenderer, "weight", len(current_columns) - 1) for column, width in zip(self.columns, self.config.columnwidths): column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) # If just one column, we want it to expand with the tree, so # don't set a fixed_width; if multiple columns, size accordingly: if num_columns > 1: column.set_resizable(True) try: column.set_fixed_width(max(width, 10)) except: column.set_fixed_width(150) column.connect('clicked', self.on_column_click) self.view.append_column(column) self.view.set_fixed_height_mode(True) self.view.set_headers_visible(num_columns > 1 and \ self.config.show_header) self.view.set_headers_clickable(not self.filterbox_visible) self.update_format(previous_tracks) self.view.set_model(self.store) def dnd_get_data_for_file_managers(self, _treeview, context, selection, _info, timestamp): if not os.path.isdir(self.config.current_musicdir): # Prevent the DND mouse cursor from looking like we can DND # when we clearly can't. return Gdk.drag_status(context, Gdk.DragAction.COPY, timestamp) filenames = self.get_selected_filenames(True) uris = ["file://%s" % urllib.parse.quote(filename) for filename in filenames] selection.set_uris(uris) def get_selected_filenames(self, return_abs_paths): _model, selected = self.selection.get_selected_rows() filenames = [] for path in selected: index = path.get_indices()[0] item = self.store[index][0].file if return_abs_paths: filenames.append( os.path.join(self.config.current_musicdir, item)) else: filenames.append(item) return filenames def update_format(self, tracks): for i, track in enumerate(tracks): items = [formatting.parse(part, track, True) for part in self.columnformat] if self.songinfo().pos == i: weight = [Pango.Weight.BOLD] else: weight = [Pango.Weight.NORMAL] self.store.append([track] + items + weight) @try_keep_position def current_update(self, prevstatus_playlist, new_playlist_length): if self.connected(): self.view.freeze_child_notify() self.unbold_boldrow(self.prev_boldrow) if not self.update_skip: save_model = self.view.get_model() self.view.set_model(None) if prevstatus_playlist: changed_songs = self.mpd.plchanges(prevstatus_playlist) else: changed_songs = self.mpd.plchanges(0) newlen = int(new_playlist_length) currlen = len(self.store) for track in changed_songs: pos = track.pos items = [formatting.parse(part, track, True) for part in self.columnformat] if pos < currlen: # Update attributes for item: i = self.store.get_iter((pos, )) if track.id != self.store.get_value(i, 0).id: self.store.set_value(i, 0, track) for index in range(len(items)): if items[index] != self.store.get_value(i, index+1): self.store.set_value(i, index + 1, items[index]) else: # Add new item: self.store.append( [track] + items + [Pango.Weight.NORMAL]) if newlen == 0: self.store.clear() else: # Remove excess songs: for i in range(currlen - newlen): it = self.store.get_iter((currlen - 1 - i,)) self.store.remove(it) self.view.set_model(save_model) self.update_skip = False # Update statusbar time: self.total_time = sum(item[0].time for item in self.store) if 'pos' in self.songinfo(): currsong = self.songinfo().pos self.boldrow(currsong) self.prev_boldrow = currsong self.view.thaw_child_notify() self.header_update_column_indicators() self.update_statusbar() ui.change_cursor(None) def header_update_column_indicators(self): # If we just sorted a column, display the sorting arrow: if self.column_sorted[0]: if self.column_sorted[1] == Gtk.SortType.DESCENDING: self.header_hide_all_indicators(self.view, True) self.column_sorted[0].set_sort_order(Gtk.SortType.ASCENDING) self.column_sorted = (None, Gtk.SortType.ASCENDING) else: self.header_hide_all_indicators(self.view, True) self.column_sorted[0].set_sort_order(Gtk.SortType.DESCENDING) self.column_sorted = (None, Gtk.SortType.DESCENDING) def header_hide_all_indicators(self, treeview, show_sorted_column): if not show_sorted_column: self.column_sorted = (None, Gtk.SortType.descending) for column in treeview.get_columns(): if show_sorted_column and column == self.column_sorted[0]: column.set_sort_indicator(True) else: column.set_sort_indicator(False) def center_song_in_list(self, do_select_current_song=False): if not self.filterbox_visible and self.config.expanded and \ len(self.store) > 0: row_path = Gtk.TreePath(self.songinfo().pos) if do_select_current_song: selection = self.view.get_selection() selection.unselect_all() selection.select_path(row_path) self.view.set_cursor(row_path) self.view.grab_focus() # For some reason, calling view.set_cursor() after # view.scroll_to_cell() changes the scrolling position of the view # (the selected item appears at the top of the view, not in the # center anymore). self.view.scroll_to_cell(row_path, None, True, 0.5, 0.5) def get_songid(self, i, model): return model.get_value(i, 0).id def on_drag_begin(self, _widget, _context): self.sel_rows = False def on_dnd_after_drag_begin(self, _widget, context): # Override default image of selected row with sonata icon: Gtk.drag_set_icon_stock(context, 'sonata', 0, 0) def on_button_release(self, widget, event): if self.sel_rows: self.sel_rows = False # User released mouse, select single row: selection = widget.get_selection() selection.unselect_all() path, _col, _x, _y = widget.get_path_at_pos(int(event.x), int(event.y)) selection.select_path(path) def on_column_click(self, column): columns = self.view.get_columns() col_num = 0 for col in columns: col_num = col_num + 1 if column == col: self.sort('col' + str(col_num), column) return def on_sort_by_artist(self, _action): self.sort('artist') def on_sort_by_album(self, _action): self.sort('album') def on_sort_by_title(self, _action): self.sort('title') def on_sort_by_file(self, _action): self.sort('file') def on_sort_by_dirfile(self, _action): self.sort('dirfile') def sort(self, mode, column=None): if self.connected(): if not self.store: return while Gtk.events_pending(): Gtk.main_iteration() songs = [] track_num = 0 if mode[0:3] == 'col': col_num = int(mode.replace('col', '')) if column.get_sort_indicator(): # If this column was already sorted, reverse list: self.column_sorted = (column, self.column_sorted[1]) self.on_sort_reverse(None) return else: self.column_sorted = (column, Gtk.SortType.DESCENDING) mode = "col" # If the first tag in the format is song length, we will make # sure to compare the same number of items in the song length # string (e.g. always use ##:##:##) and pad the first item to two # (e.g. #:##:## -> ##:##:##) custom_sort = False if mode == 'col': custom_sort, custom_pos = self.sort_get_first_format_tag( self.config.currentformat, col_num, 'L') for track in (item[0] for item in self.store): record = {} # Those items that don't have the specified tag will be put at # the end of the list (hence the 'zzzzzzz'): zzz = 'zzzzzzzz' if mode == 'artist': record["sortby"] = ( misc.lower_no_the(track.artist or zzz), (track.album or zzz).lower(), track.disc, track.track) elif mode == 'album': record["sortby"] = ((track.album or zzz).lower(), track.disc, track.track) elif mode == 'file': record["sortby"] = os.path.basename(track.file or zzz).lower() elif mode == 'dirfile': record["sortby"] = (track.file or zzz).lower() elif mode == 'col': # Sort by column: record["sortby"] = self.store.get_value( self.store.get_iter((track_num, 0)), col_num).lower() if custom_sort: record["sortby"] = self.sanitize_songlen_for_sorting( record["sortby"], custom_pos) else: record["sortby"] = track.get(mode, zzz).lower() record["id"] = track.id songs.append(record) track_num = track_num + 1 songs.sort(key=lambda x: x["sortby"]) pos = 0 self.mpd.command_list_ok_begin() for item in songs: self.mpd.moveid(item["id"], pos) pos += 1 self.mpd.command_list_end() self.iterate_now() self.header_update_column_indicators() def sort_get_first_format_tag(self, format, colnum, tag_letter): # Returns a tuple with whether the first tag of the format # includes tag_letter and the position of the tag in the string: formats = format.split('|') format = formats[colnum-1] prev_letter = None for letter in format: if letter == tag_letter and prev_letter == '%': return (True, pos) else: break prev_letter = letter return (False, 0) def sanitize_songlen_for_sorting(self, songlength, pos_of_string): songlength = songlength[pos_of_string:] items = [item.zfill(2) for item in songlength.split(':')] for i in range(3 - len(items)): items.insert(0, "00") return ":".join(item for item in items[:3]) def on_sort_reverse(self, _action): if self.connected(): if not self.store: return while Gtk.events_pending(): Gtk.main_iteration() top = 0 bot = len(self.store)-1 self.mpd.command_list_ok_begin() while top < bot: self.mpd.swap(top, bot) top = top + 1 bot = bot - 1 self.mpd.command_list_end() self.iterate_now() def on_dnd_received(self, treeview, drag_context, x, y, selection, _info, timestamp): drop_info = treeview.get_dest_row_at_pos(x, y) if selection.get_data(): if not os.path.isdir(self.config.current_musicdir): return # DND from outside sonata: uri = selection.get_data().strip().decode('utf-8') path = urllib.request.url2pathname(uri) paths = path.rsplit('\n') mpdpaths = [] # Strip off paranthesis so that we can DND entire music dir # if we wish. musicdir = self.config.current_musicdir[:-1] for i, path in enumerate(paths): paths[i] = path.rstrip('\r') if paths[i].startswith('file://'): paths[i] = paths[i][7:] elif paths[i].startswith('file:'): paths[i] = paths[i][5:] if paths[i].startswith(musicdir): paths[i] = paths[i][len(musicdir):] if len(paths[i]) == 0: paths[i] = "/" listallinfo = self.mpd.listallinfo(paths[i]) for item in listallinfo: if 'file' in item: mpdpaths.append(item['file']) # Add local file, available in mpd 0.14. This currently # work because python-mpd does not support unix socket # paths, won't which is needed for authentication for # local files. It's also therefore untested. if os.path.isdir(paths[i]): filenames = misc.get_files_recursively(paths[i]) else: filenames = [paths[i]] for filename in filenames: if os.path.exists(filename): mpdpaths.append("file://" + urllib.parse.quote(filename)) if len(mpdpaths) > 0: # Items found, add to list at drop position: if drop_info: destpath, position = drop_info if position in (Gtk.TreeViewDropPosition.BEFORE, Gtk.TreeViewDropPosition.INTO_OR_BEFORE): songid = destpath[0] else: songid = destpath[0] + 1 else: songid = len(self.store) for mpdpath in mpdpaths: self.mpd.addid(mpdpath, songid) self.iterate_now() return # Otherwise, it's a DND just within the current playlist model = self.store _foobar, selected = self.selection.get_selected_rows() # calculate all this now before we start moving stuff drag_sources = [] for path in selected: index = path[0] treeiter = model.get_iter(path) songid = self.get_songid(treeiter, model) drag_sources.append([index, treeiter, songid]) # Keep track of the moved iters so we can select them afterwards moved_iters = [] # Will manipulate model to prevent the entire playlist from refreshing offset = 0 self.mpd.command_list_ok_begin() for index, treeiter, songid in drag_sources: if drop_info: destpath, position = drop_info dest = destpath[0] + offset if dest < index: offset = offset + 1 pop_from = index move_to = dest if position in (Gtk.TreeViewDropPosition.BEFORE, Gtk.TreeViewDropPosition.INTO_OR_BEFORE): insert_to = dest if dest < index + 1: pop_from = index + 1 else: move_to = dest - 1 else: insert_to = dest + 1 if dest < index: pop_from = index + 1 move_to = insert_to else: dest = len(self.store) - 1 insert_to = dest + 1 self.mpd.moveid(songid, move_to) moved_iters.append(model.insert(insert_to, tuple(model[index]))) model.remove(treeiter) # now fixup for source in drag_sources: if dest < index: # we moved it back, so all indexes inbetween increased by 1 if dest < source[0] < index: source[0] += 1 else: # we moved it ahead, so all indexes inbetween # decreased by 1 if index < source[0] < dest: source[0] -= 1 self.mpd.command_list_end() # we are manipulating the model manually for speed, so... self.update_skip = True # Gdk.DragContext.get_action() returns a bitmask of actions if drag_context.get_actions() & Gdk.DragAction.MOVE: Gdk.drag_finish(drag_context, True, True, timestamp) self.header_hide_all_indicators(self.view, False) self.iterate_now() selection = treeview.get_selection() selection.unselect_all() for i in moved_iters: selection.select_iter(i) if moved_iters: treeview.scroll_to_cell(model.get_path(moved_iters[0]), None) def on_click(self, _treeview, path, _column): model = self.view.get_model() if self.filterbox_visible: self.searchfilter_on_enter(None) return try: i = model.get_iter(path) self.mpd.playid(self.get_songid(i, model)) except: pass self.sel_rows = False self.iterate_now() def searchfilter_toggle(self, _widget, initial_text=""): if self.filterbox_visible: ui.hide(self.filterbox) self.filterbox_visible = False self.filterpattern.set_text("") self.view.set_model(self.store) elif self.connected(): self.playlist_pos_before_filter = \ self.view.get_visible_rect().height self.filterbox_visible = True with self.filterpattern.handler_block(self.filter_changed_handler): self.filterpattern.set_text(initial_text) ui.show(self.filterbox) self.filterpattern.grab_focus() self.view.set_headers_clickable(not self.filterbox_visible) def model_filter_func(self, model, iter, regex): row = model.get(iter, 1, *range(len(self.columnformat)- 1)[1:]) for cell in row: if regex.match(cell.lower()): return True return False def searchfilter_on_enter(self, _entry): model, selected = self.view.get_selection().get_selected_rows() song_id = None if len(selected) > 0: # If items are selected, play the first selected item: song_id = self.get_songid(model.get_iter(selected[0]), model) elif len(model) > 0: # If nothing is selected: play the first item: song_id = self.get_songid(model.get_iter_first(), model) if song_id: self.searchfilter_toggle(None) self.mpd.playid(song_id) def searchfilter_key_pressed(self, widget): # We have something new to search, try first to cancel the previous # search. try: GLib.source_remove(self.refilter_handler_id) except TypeError: # self.refilter_handler_id is None pass text = widget.get_text() if text == '': # Nothing to search for, just display the whole model. self.view.set_model(self.store) return regex = misc.escape_html(text) regex = re.escape(regex) regex = '.*' + regex.replace(' ', ' .*').lower() filter_regex = re.compile(regex) def set_filtering_function(regex): # Creates a Gtk.TreeModelFilter filter_model = self.store.filter_new() filter_model.set_visible_func(self.model_filter_func, regex) self.view.set_model(filter_model) # Delay slightly the new search, in case something else is coming. self.refilter_handler_id = GLib.timeout_add( 250, set_filtering_function, filter_regex) def filter_key_pressed(self, widget, event, treeview): if event.keyval == Gdk.keyval_from_name('Down') or \ event.keyval == Gdk.keyval_from_name('Up') or \ event.keyval == Gdk.keyval_from_name('Page_Down') or \ event.keyval == Gdk.keyval_from_name('Page_Up'): treeview.grab_focus() treeview.emit("key-press-event", event) GLib.idle_add(self.filter_entry_grab_focus, widget) def boldrow(self, row): if row > -1: try: self.store[row][-1] = Pango.Weight.BOLD except IndexError: # The row might not exist anymore pass def unbold_boldrow(self, row): if row > -1: try: self.store[row][-1] = Pango.Weight.NORMAL except IndexError: # The row might not exist anymore pass def on_remove(self): model, selected = self.selection.get_selected_rows() if len(selected) == len(self.store) and not self.filterbox_visible: # Everything is selected, clear: self.mpd.clear() elif len(selected) > 0: # we are manipulating the model manually for speed, so... self.update_skip = True self.mpd.command_list_ok_begin() for i in (model.get_iter(path) for path in reversed(selected)): self.mpd.deleteid(model.get(i, 0)[0].id) if model != self.store: # model is different if there is a filter currently applied. # So we retrieve the iter of the wrapped model... i = model.convert_iter_to_child_iter(i) self.store.remove(i) self.mpd.command_list_end() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/dbus_plugin.py��������������������������������������������������������0000664�0000000�0000000�00000013772�15003420405�0021411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This plugin implements D-Bus features for Sonata: * Check that only one instance of Sonata is running at a time * Allow other programs to request the info popup, and to show or to toggle the main window visibility * Listen to Gnome 2.18+ multimedia key events XXX Not a real plugin yet. Example usage: import dbus_plugin as dbus self.dbus_service = dbus.SonataDBus(self.dbus_show, self.dbus_toggle, self.dbus_popup, self.dbus_fullscreen) dbus.init_gnome_mediakeys(self.mpd_pp, self.mpd_stop, self.mpd_prev, self.mpd_next) if not dbus.using_gnome_mediakeys(): # do something else instead... """ import logging import sys try: import dbus import dbus.service import _dbus_bindings as dbus_bindings from dbus.mainloop.glib import DBusGMainLoop DBusGMainLoop(set_as_default=True) HAVE_DBUS = True except: HAVE_DBUS = False logger = logging.getLogger(__name__) def using_dbus(): return HAVE_DBUS HAVE_GNOME_MMKEYS = False def using_gnome_mediakeys(): return HAVE_GNOME_MMKEYS def init_gnome_mediakeys(mpd_pp, mpd_stop, mpd_prev, mpd_next): global HAVE_GNOME_MMKEYS if HAVE_DBUS: try: bus = dbus.SessionBus() dbusObj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') dbusInterface = dbus.Interface(dbusObj, 'org.freedesktop.DBus') if dbusInterface.NameHasOwner('org.gnome.SettingsDaemon'): try: # mmkeys for gnome 2.22+ settingsDaemonObj = bus.get_object( 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/MediaKeys') settingsDaemonInterface = dbus.Interface(settingsDaemonObj, 'org.gnome.SettingsDaemon.MediaKeys') settingsDaemonInterface.GrabMediaPlayerKeys('Sonata', 0) except: # mmkeys for gnome 2.18+ settingsDaemonObj = bus.get_object( 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon') settingsDaemonInterface = dbus.Interface(settingsDaemonObj, 'org.gnome.SettingsDaemon') settingsDaemonInterface.GrabMediaPlayerKeys('Sonata', 0) settingsDaemonInterface.connect_to_signal( 'MediaPlayerKeyPressed', lambda app, key: mediaPlayerKeysCallback(mpd_pp, mpd_stop, mpd_prev, mpd_next, app, key)) HAVE_GNOME_MMKEYS = True except: pass def mediaPlayerKeysCallback(mpd_pp, mpd_stop, mpd_prev, mpd_next, app, key): if app == 'Sonata': if key in ('Play', 'PlayPause', 'Pause'): mpd_pp(None) elif key == 'Stop': mpd_stop(None) elif key == 'Previous': mpd_prev(None) elif key == 'Next': mpd_next(None) def get_session_bus(): try: return dbus.SessionBus() except Exception: logger.error( _('Sonata failed to connect to the D-BUS session bus: ' 'Unable to determine the address of the message bus ' '(try \'man dbus-launch\' and \'man dbus-daemon\' ' 'for help)")')) raise def execute_remote_commands(toggle=False, popup=False, fullscreen=False, start=False): try: bus = get_session_bus() obj = bus.get_object('org.MPD', '/org/MPD/Sonata') if toggle: obj.toggle(dbus_interface='org.MPD.SonataInterface') if popup: obj.popup(dbus_interface='org.MPD.SonataInterface') if fullscreen: obj.fullscreen(dbus_interface='org.MPD.SonataInterface') sys.exit() except Exception: logger.warning(_("Failed to execute remote commands.")) if start is None or start: logger.info(_("Starting Sonata instead...")) else: # TODO: should we log the exception here? logger.critical(_("Maybe Sonata is not running?")) sys.exit(1) if HAVE_DBUS: class SonataDBus(dbus.service.Object): def __init__(self, dbus_show, dbus_toggle, dbus_popup, dbus_fullscreen): self.dbus_show = dbus_show self.dbus_toggle = dbus_toggle self.dbus_popup = dbus_popup self.dbus_fullscreen = dbus_fullscreen session_bus = get_session_bus() bus_name = dbus.service.BusName('org.MPD', bus=session_bus) object_path = '/org/MPD/Sonata' super().__init__(bus_name, object_path) @dbus.service.method('org.MPD.SonataInterface') def show(self): self.dbus_show() @dbus.service.method('org.MPD.SonataInterface') def toggle(self): self.dbus_toggle() @dbus.service.method('org.MPD.SonataInterface') def popup(self): self.dbus_popup() @dbus.service.method('org.MPD.SonataInterface') def fullscreen(self): self.dbus_fullscreen() ������multani-sonata-bf88fdc/sonata/formatting.py���������������������������������������������������������0000664�0000000�0000000�00000014705�15003420405�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """This module implements the format strings used to display song info. Example usage: import formatting colnames = formatting.parse_colnames(self.config.currentformat) ... newtitle = formatting.parse(self.config.titleformat, self.songinfo, False, True) ... formatcodes = formatting.formatcodes """ import re import os from sonata import mpdhelper as mpdh from sonata import misc class FormatCode: """Implements deafult format code behavior. Replaces all instances of %code with the value of key or default if the key doesn't exist. """ def __init__(self, code, description, column, key, default=_("Unknown")): self.code = code self.description = description self.column = column self.key = key self.default = default def format(self, item, wintitle, songpos): """Returns the value used in place of the format code""" return str(item.get(self.key, self.default)) class NumFormatCode(FormatCode): """Implements format code behavior for numeric values. Used for numbers which need special padding. """ def __init__(self, code, description, column, key, default, padding): super().__init__(code, description, column, key, default) self.padding = padding def format(self, item, wintitle, songpos): return str(item.get(self.key, self.default)).zfill(self.padding) class PathFormatCode(FormatCode): """Implements format code behavior for path values.""" def __init__(self, code, description, column, key, path_func): """ path_func: os.path function to apply """ super().__init__(code, description, column, key) self.func = getattr(os.path, path_func) def format(self, item, wintitle, songpos): return self.func(FormatCode.format(self, item, wintitle, songpos)) class TitleFormatCode(FormatCode): """Implements format code behavior for track titles.""" def format(self, item, wintitle, songpos): path = item['file'] full_path = re.match(r"^(http://|ftp://)", path) self.default = path if full_path else os.path.basename(path) self.default = misc.escape_html(self.default) return FormatCode.format(self, item, wintitle, songpos) class LenFormatCode(FormatCode): """Implements format code behavior for song length.""" def format(self, item, wintitle, songpos): time = FormatCode.format(self, item, wintitle, songpos) if time.isdigit(): time = misc.convert_time(int(time)) return time class ElapsedFormatCode(FormatCode): """Implements format code behavior for elapsed time.""" def format(self, item, wintitle, songpos): if not wintitle: return "%E" elapsed_time = songpos.split(':')[0] if songpos else self.default if elapsed_time.isdigit(): elapsed_time = misc.convert_time(int(elapsed_time)) return elapsed_time formatcodes = [FormatCode('A', _('Artist name'), _("Artist"), 'artist'), FormatCode('B', _('Album name'), _("Album"), 'album'), TitleFormatCode('T', _('Track name'), _("Track"), 'title'), NumFormatCode('N', _('Track number'), _("#"), 'track', '00', 2), NumFormatCode('D', _('Disc number'), _("#"), 'disc', '0', 0), FormatCode('Y', _('Year'), _("Year"), 'date', '?'), FormatCode('G', _('Genre'), _("Genre"), 'genre'), PathFormatCode('P', _('File path'), _("Path"), 'file', 'dirname'), PathFormatCode('F', _('File name'), _("File"), 'file', 'basename'), FormatCode('S', _('Stream name'), _("Stream"), 'name'), LenFormatCode('L', _('Song length'), _("Len"), 'time', '?'), ElapsedFormatCode('E', _('Elapsed time (title only)'), None, 'songpos', '?')] replace_map = dict((code.code, code) for code in formatcodes) replace_expr = r"%%[%s]" % "".join(k for k in replace_map.keys()) def _return_substrings(format): """Split format along the { and } characters. For example: %A{-%T} {%L} -> ['%A', '{-%T} ', '{%L}']""" substrings = [] end = format while len(end) > 0: begin, sep1, end = end.partition('{') substrings.append(begin) if len(end) == 0: substrings.append(sep1) break begin, sep2, end = end.partition('}') substrings.append(sep1 + begin + sep2) return substrings def parse_colnames(format): def replace_format(m): format_code = replace_map.get(m.group(0)[1:]) return format_code.column cols = [re.sub(replace_expr, replace_format, s). replace("{", ""). replace("}", ""). # If the user wants the format of, e.g., "#%N", we'll # ensure the # doesn't show up twice in a row. replace("##", "#") for s in format.split('|')] return cols class EmptyBrackets(Exception): pass def _format_substrings(text, item, wintitle, songpos): has_brackets = text.startswith("{") and text.endswith("}") def formatter(m): format_code = replace_map[m.group(0)[1:]] if has_brackets and format_code.key not in item: raise EmptyBrackets return format_code.format(item, wintitle, songpos) try: text = re.sub(replace_expr, formatter, text) except EmptyBrackets: return "" return text[1:-1] if has_brackets else text def parse(format, item, use_escape_html, wintitle=False, songpos=None): substrings = _return_substrings(format) text = "".join(_format_substrings(sub, item, wintitle, songpos) for sub in substrings) return misc.escape_html(text) if use_escape_html else text �����������������������������������������������������������multani-sonata-bf88fdc/sonata/img.py����������������������������������������������������������������0000664�0000000�0000000�00000010405�15003420405�0017640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import itertools import os from gi.repository import Gtk, Gdk, GdkPixbuf, GLib from sonata import consts VALID_EXTENSIONS = set( itertools.chain.from_iterable( fmt.get_extensions() for fmt in GdkPixbuf.Pixbuf.get_formats() ) ) def valid_image(filename): return bool(GdkPixbuf.Pixbuf.get_file_info(filename)) def get_pixbuf_of_size(pixbuf, size): # Creates a pixbuf that fits in the specified square of sizexsize # while preserving the aspect ratio # Returns tuple: (scaled_pixbuf, actual_width, actual_height) image_width = pixbuf.get_width() image_height = pixbuf.get_height() if image_width > image_height: if image_width > size: image_height = int(size / float(image_width) * image_height) image_width = size else: if image_height > size: image_width = int(size / float(image_height) * image_width) image_height = size crop_pixbuf = pixbuf.scale_simple(image_width, image_height, GdkPixbuf.InterpType.HYPER) return (crop_pixbuf, image_width, image_height) def pixbuf_add_border(pix): # Add a gray outline to pix. This will increase the pixbuf size by # 2 pixels lengthwise and heightwise, 1 on each side. Returns pixbuf. width = pix.get_width() height = pix.get_height() newpix = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, width + 2, height + 2) newpix.fill(0x858585ff) pix.copy_area(0, 0, width, height, newpix, 1, 1) return newpix def pixbuf_pad(pix, w, h): # Adds transparent canvas so that the pixbuf is of size (w,h). Also # centers the pixbuf in the canvas. width = pix.get_width() height = pix.get_height() transpbox = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, w, h) transpbox.fill(0) x_pos = int((w - width) / 2) y_pos = int((h - height) / 2) pix.copy_area(0, 0, width, height, transpbox, x_pos, y_pos) return transpbox def do_style_cover(config, pix, w, h): """Style a cover, according to the specified configuration.""" if config.covers_type == consts.COVERS_TYPE_STYLIZED: return composite_case(pix, w, h) else: return pix def composite_case(pix, w, h): """Blend the cover with a 'case' cover, for maximum beauty.""" if w / h <= 0.5: return pix # Rather than merely compositing the case on top of the artwork, # we will scale the artwork so that it isn't covered by the case: spine_ratio = 60 / 600 # From original png spine_width = int(w * spine_ratio) #case_icon = Gtk.IconFactory.lookup_default('sonata-case') ## We use the fullscreenalbumimage because it's the biggest we have #context = self.fullscreenalbumimage.get_style_context() #case_pb = case_icon.render_icon_pixbuf(context, -1) i = Gtk.Image.new_from_pixbuf(pix) case_pb = i.render_icon_pixbuf('sonata-case', -1) case = case_pb.scale_simple(w, h, GdkPixbuf.InterpType.BILINEAR) # Scale pix and shift to the right on a transparent pixbuf: pix = pix.scale_simple(w - spine_width, h, GdkPixbuf.InterpType.BILINEAR) blank = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, w, h) blank.fill(0x00000000) pix.copy_area(0, 0, pix.get_width(), pix.get_height(), blank, spine_width, 0) # Composite case and scaled pix: case.composite(blank, 0, 0, w, h, 0, 0, 1, 1, GdkPixbuf.InterpType.BILINEAR, 250) del case del case_pb return blank �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/info.py���������������������������������������������������������������0000664�0000000�0000000�00000053504�15003420405�0020026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import sys import os import locale import logging import threading from gi.repository import Gtk, Pango, Gdk, GdkPixbuf, GLib from sonata import ui, misc, consts, mpdhelper as mpdh, img from sonata.pluginsystem import pluginsystem def target_lyrics_filename(cfg, artist, title, song_dir, force_location=None): """Get the filename of the lyrics of a song""" lyrics_loc = force_location if force_location else cfg.lyrics_location if song_dir is not None: song_dir.replace('%', '%%') music_dir = cfg.musicdir[cfg.profile_num].replace('%', '%%') pattern1 = "%s-%s.txt" pattern2 = "%s - %s.txt" # Note: *_ALT searching is for compatibility with other mpd clients # (like ncmpcpp): file_map = { consts.LYRICS_LOCATION_HOME: ("~/.lyrics", pattern1), consts.LYRICS_LOCATION_PATH: (music_dir, song_dir, pattern1), consts.LYRICS_LOCATION_HOME_ALT: ("~/.lyrics", pattern2), consts.LYRICS_LOCATION_PATH_ALT: (music_dir, song_dir, pattern2), } file_path = os.path.join(*file_map[lyrics_loc]) file_path = os.path.expanduser(file_path) % (artist, title) return misc.file_exists_insensitive(file_path) class Info: def __init__(self, config, linkcolor, on_link_click_cb, get_playing_song, TAB_INFO, on_image_activate, on_image_motion_cb, on_image_drop_cb, album_return_artist_and_tracks, add_tab): self.logger = logging.getLogger(__name__) self.config = config self.linkcolor = linkcolor self.on_link_click_cb = on_link_click_cb self.get_playing_song = get_playing_song self.album_return_artist_and_tracks = album_return_artist_and_tracks self.last_bitrate = None self.info_boxes_in_more = None self._editlabel = None self.info_left_label = None self.info_lyrics = None self._morelabel = None self._searchlabel = None self.lyrics_text = None self.album_text = None self.active = False # Info tab self.builder = ui.builder('info') self.css_provider = ui.css_provider('info') self.info_area = self.builder.get_object('info_page_scrolledwindow') self.tab_label_widget = self.builder.get_object('info_tab_eventbox') tab_label = self.builder.get_object('info_tab_label') tab_label.set_text(TAB_INFO) self.tab = add_tab(self.info_area, self.tab_label_widget, TAB_INFO, self.info_area) self._imagebox = self.builder.get_object('info_page_song_eventbox') self.image = self.builder.get_object('info_page_song_image') self.image.set_from_icon_set(ui.icon('sonata-cd-large'), -1) self._imagebox.drag_dest_set(Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [Gtk.TargetEntry.new("text/uri-list", 0, 80), Gtk.TargetEntry.new("text/plain", 0, 80)], Gdk.DragAction.DEFAULT) self._imagebox.connect('button_press_event', on_image_activate) self._imagebox.connect('drag_motion', on_image_motion_cb) self._imagebox.connect('drag_data_received', on_image_drop_cb) self._widgets_initialize() def _widgets_initialize(self): self._widgets_song() self._widgets_lyrics() self._widgets_album() # Finish.. if not self.config.show_lyrics: ui.hide(self.info_lyrics) if not self.config.show_covers: ui.hide(self._imagebox) def _widgets_song(self): self.info_song = self.builder.get_object('info_page_song_expander') self.info_song.set_expanded(self.config.info_song_expanded) self.info_song_grid = self.builder.get_object('info_page_song_grid') self.info_song.connect("activate", self._expanded, "song") self.info_labels = {} names = ('title', 'artist', 'album', 'date', 'track', 'genre', 'file', 'bitrate') for name in names: self.info_labels[name] = self.builder.get_object( 'info_song_{}_label'.format(name)) artist_eventbox = self.builder.get_object('info_song_artist_eventbox') album_eventbox = self.builder.get_object('info_song_album_eventbox') links = { 'artist': artist_eventbox, 'album': album_eventbox,} for name, widget in links.items(): self._apply_link_signals(widget, name) file_label = self.builder.get_object('info_song_file_label_label') bitrate_label = self.builder.get_object('info_song_bitrate_label_label') self.info_boxes_in_more = { 'values': (self.info_labels['file'], self.info_labels['bitrate'],), 'labels': (file_label, bitrate_label,),} self._morelabel = self.builder.get_object('info_song_links_more_label') self.toggle_more() moreevbox = self.builder.get_object('info_song_links_more_eventbox') self._apply_link_signals(moreevbox, 'more') self._editlabel = self.builder.get_object('info_song_links_edit_label') editevbox = self.builder.get_object('info_song_links_edit_eventbox') self._apply_link_signals(editevbox, 'edit') def _widgets_lyrics(self): self.info_lyrics = self.builder.get_object('info_page_lyrics_expander') self.info_lyrics.set_expanded(self.config.info_lyrics_expanded) self.info_lyrics.connect("activate", self._expanded, "lyrics") self.lyrics_scrolledwindow = self.builder.get_object( 'info_page_lyrics_scrolledwindow') self.lyrics_text = self.builder.get_object('info_page_lyrics_textview') self._populate_lyrics_tag_table() self._searchlabel = self.builder.get_object('info_page_lyrics_search') search_eventbox = self.builder.get_object( 'info_page_lyrics_search_eventbox') self._apply_link_signals(search_eventbox, 'search') def _widgets_album(self): self.info_album = self.builder.get_object('info_page_album_expander') self.info_album.set_expanded(self.config.info_album_expanded) self.album_text = self.builder.get_object('info_page_album_textview') self.album_scrolledwindow = self.builder.get_object( 'info_page_album_scrolledwindow') self.info_album.connect("activate", self._expanded, "album") def get_widgets(self): return self.info_area def get_info_imagebox(self): return self._imagebox def show_lyrics_updated(self): func = "show" if self.config.show_lyrics else "hide" getattr(ui, func)(self.info_lyrics) def _apply_link_signals(self, widget, linktype): widget.connect("enter-notify-event", self.on_link_enter) widget.connect("leave-notify-event", self.on_link_leave) widget.connect("button-press-event", self.on_link_click, linktype) def on_link_enter(self, widget, _event): ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.HAND2)) def on_link_leave(self, _widget, _event): ui.change_cursor(None) def toggle_more(self): if self.config.info_song_more: text = _("hide") func = "show" else: text = _("more") func = "hide" text = "({})".format(text) self._morelabel.set_text(text) func = getattr(ui, func) for widget in self.info_boxes_in_more['labels']: func(widget) if not self.active and self.config.info_song_more: return for widget in self.info_boxes_in_more['values']: func(widget) def on_link_click(self, _widget, _event, linktype): if linktype == 'more': self.config.info_song_more = not self.config.info_song_more self.toggle_more() else: self.on_link_click_cb(linktype) def _expanded(self, expander, infotype): setattr(self.config, "info_%s_expanded" % infotype, not expander.get_expanded()) def clear_info(self): """Clear the info widgets of any information""" for label in self.info_labels.values(): label.hide() self._searchlabel.hide() self._show_lyrics(None, None) self.album_text.get_buffer().set_text("") self.last_bitrate = "" def update(self, playing_or_paused, newbitrate, songinfo, update_all): # update_all = True means that every tag should update. This is # only the case on song and status changes. Otherwise we only # want to update the minimum number of widgets so the user can # do things like select label text. if not playing_or_paused: self.clear_info() self.active = False return self.active = True for label in self.info_labels.values(): if self.config.info_song_more or \ not label in self.info_boxes_in_more['values']: label.show() bitratelabel = self.info_labels['bitrate'] if self.last_bitrate != newbitrate: bitratelabel.set_text(newbitrate) self.last_bitrate = newbitrate if update_all: for func in ["song", "album", "lyrics"]: getattr(self, "_update_%s" % func)(songinfo) def _update_song(self, songinfo): artistlabel = self.info_labels['artist'] tracklabel = self.info_labels['track'] albumlabel = self.info_labels['album'] filelabel = self.info_labels['file'] for name in ['title', 'date', 'genre']: label = self.info_labels[name] label.set_text(songinfo.get(name, '')) tracklabel.set_text(str(songinfo.track)) artistlabel.set_text(misc.escape_html(songinfo.artist)) albumlabel.set_text(misc.escape_html(songinfo.album)) path = os.path.join(self.config.current_musicdir, songinfo.file) if os.path.exists(path): filelabel.set_text(path) self._editlabel.show() else: filelabel.set_text(songinfo.file) self._editlabel.hide() def _update_album(self, songinfo): if 'album' not in songinfo: self.album_text.get_buffer().set_text(_("Album name not set.")) return artist, tracks = self.album_return_artist_and_tracks() albuminfo = _("Album info not found.") if tracks: tracks.sort(key=lambda x: x.track) playtime = 0 tracklist = [] for t in tracks: playtime += t.time tracklist.append("%s. %s" % ( str(t.track).zfill(2), t.get('title', os.path.basename(t.file)))) album = songinfo.album year = songinfo.date playtime = misc.convert_time(playtime) albuminfo = "\n".join(i for i in (album, artist, year, playtime) if i) albuminfo += "\n\n" albuminfo += "\n".join(t for t in tracklist) self.album_text.get_buffer().set_text(albuminfo) def _update_lyrics(self, songinfo): if self.config.show_lyrics: if 'artist' in songinfo and 'title' in songinfo: self.get_lyrics_start(songinfo.artist, songinfo.title, songinfo.artist, songinfo.title, os.path.dirname(songinfo.file)) else: self._show_lyrics(None, None, error=_(('Artist or song title ' 'not set.'))) def _check_for_local_lyrics(self, artist, title, song_dir): locations = [ consts.LYRICS_LOCATION_HOME, consts.LYRICS_LOCATION_PATH, consts.LYRICS_LOCATION_HOME_ALT, consts.LYRICS_LOCATION_PATH_ALT] for location in locations: filename = target_lyrics_filename(self.config, artist, title, song_dir, location) if os.path.exists(filename): return filename def get_lyrics_start(self, search_artist, search_title, filename_artist, filename_title, song_dir, force_fetch=False): filename_artist = misc.strip_all_slashes(filename_artist) filename_title = misc.strip_all_slashes(filename_title) filename = self._check_for_local_lyrics(filename_artist, filename_title, song_dir) lyrics = "" if filename: # If the lyrics only contain "not found", delete the file and try # to fetch new lyrics. If there is a bug in Sonata/SZI/LyricWiki # that prevents lyrics from being found, storing the "not found" # will prevent a future release from correctly fetching the lyrics. try: with open(filename, 'r', encoding="utf-8") as f: lyrics = f.read() except IOError: pass if lyrics == _("Lyrics not found"): force_fetch = True if force_fetch: # Remove all lyrics for this song while filename is not None: filename = self._check_for_local_lyrics(filename_artist, filename_title, song_dir) if filename is not None: misc.remove_file(filename) if filename: # Re-use lyrics from file: try: with open(filename, 'r', encoding="utf-8") as f: lyrics = f.read() except IOError: pass # Strip artist - title line from file if it exists, since we # now have that information visible elsewhere. header = "%s - %s\n\n" % (filename_artist, filename_title) if lyrics[:len(header)] == header: lyrics = lyrics[len(header):] self._show_lyrics(filename_artist, filename_title, lyrics=lyrics) else: def communicate(artist_then, title_then, lyrics=None, error=None): """Schedule actions from the plugin thread into the main thread""" GLib.idle_add(self._show_lyrics, artist_then, title_then, lyrics, error) # Fetch lyrics from plugins. thread = threading.Thread( name="LyricsFetcher", target=FetchLyricsWorker, args=(self.config, communicate, search_artist, search_title, song_dir)) thread.start() def _show_lyrics(self, artist_then, title_then, lyrics=None, error=None): # For error messages where there is no appropriate info: if not artist_then or not title_then: self._searchlabel.hide() if error: self.lyrics_text.get_buffer().set_text(error) elif lyrics: self.lyrics_text.get_buffer().set_text(lyrics) else: self.lyrics_text.get_buffer().set_text("") return # Verify that we are displaying the correct lyrics: songinfo = self.get_playing_song() if not songinfo: return artist_now = misc.strip_all_slashes(songinfo.artist) title_now = misc.strip_all_slashes(songinfo.title) if artist_now == artist_then and title_now == title_then: self._searchlabel.show() if error: self.lyrics_text.get_buffer().set_text(error) elif lyrics: self._set_lyrics(lyrics) else: self.lyrics_text.get_buffer().set_text("") def _set_lyrics(self, lyrics): if lyrics is None: return lyrics_buf = self.lyrics_text.get_buffer() lyrics_buf.set_text('') # pango needs only ampersand to be escaped lyrics = misc.unescape_html(lyrics).replace('&', '&') try: attr_list, plain_text, accel_marker = Pango.parse_markup(lyrics) except: # failed to parse, use lyrics as it is lyrics_buf.set_text(lyrics) return attr_iter = attr_list.get_iterator() while True: range = attr_iter.range() font = attr_iter.get_font()[0] text = plain_text[range[0]:range[1]] tags = [] if font.get_weight() == Pango.Weight.BOLD: tags.append('bold') if font.get_style() == Pango.Style.ITALIC: tags.append('italic') if tags: lyrics_buf.insert_with_tags_by_name(lyrics_buf.get_end_iter(), text, *tags) else: lyrics_buf.insert(lyrics_buf.get_end_iter(), text) if not attr_iter.next(): break def _populate_lyrics_tag_table(self): tag_table = self.lyrics_text.get_buffer().get_tag_table() bold_tag = Gtk.TextTag.new('bold') bold_tag.set_property('weight', Pango.Weight.BOLD) tag_table.add(bold_tag) italic_tag = Gtk.TextTag.new('italic') italic_tag.set_property('style', Pango.Style.ITALIC) tag_table.add(italic_tag) def on_artwork_changed(self, artwork_obj, pixbuf): if self._imagebox.get_size_request()[0] == -1: notebook_width = self.info_song_grid.get_parent().get_allocation().width grid = self.info_song_grid grid_allocation = grid.get_allocation() grid_height = grid_allocation.height grid_width = grid.get_preferred_width_for_height(grid_height)[0] fullwidth = notebook_width - (grid_width + 120) new_width = max(fullwidth, 150) else: new_width = 150 (pix2, w, h) = img.get_pixbuf_of_size(pixbuf, new_width) pix2 = img.do_style_cover(self.config, pix2, w, h) pix2 = img.pixbuf_add_border(pix2) self.image.set_from_pixbuf(pix2) del pix2 del pixbuf def on_artwork_reset(self, artwork_obj): self.image.set_from_icon_set(ui.icon('sonata-cd-large'), -1) class FetchLyricsWorker: """Thread worker to fetch lyrics for a song This must use the `communicate` method to commuicate with the main thread to update the GUI. """ def __init__(self, config, communicate, search_artist, search_title, song_dir): self.config = config self.communicate = communicate self.logger = logging.getLogger(__name__) self.fetch_lyrics(search_artist, search_title, song_dir) def fetch_lyrics(self, search_artist, search_title, song_dir): # Homogenize search patterns, so plugins don't have to do it. search_artist = str(search_artist).title() search_title = str(search_title).title() lyrics_fetchers = pluginsystem.get('lyrics_fetching') if lyrics_fetchers: self.logger.info("Looking for lyrics for %r - %r...", search_artist, search_title) self.communicate(search_artist, search_title, lyrics=_("Fetching lyrics...")) for plugin, get_lyrics in lyrics_fetchers: try: lyrics = get_lyrics(search_artist, search_title) except Exception as e: if self.logger.isEnabledFor(logging.DEBUG): # Be more verbose if we want something verbose log = self.logger.exception else: log = self.logger.warning log("Plugin %s: unable to fetch lyrics (%s)", plugin.name, e) continue if lyrics: self.logger.info("Lyrics for %r - %r fetched by %r plugin.", search_artist, search_title, plugin.name) self.get_lyrics_response(search_artist, search_title, song_dir, lyrics=lyrics) return msg = _("Lyrics not found.") else: self.logger.info("Can't look for lyrics, no plugin enabled.") msg = _("No lyrics plug-in enabled.") self.communicate(search_artist, search_title, lyrics=msg) def get_lyrics_response(self, artist_then, title_then, song_dir, lyrics=None, error=None): if lyrics and not error: filename = target_lyrics_filename(self.config, artist_then, title_then, song_dir) # Save lyrics to file: misc.create_dir('~/.lyrics/') self.logger.info("Saving lyrics to: %s", filename) try: with open(filename, 'w', encoding="utf-8") as f: lyrics = misc.unescape_html(lyrics) f.write(lyrics) except IOError as e: self.logger.warning("Can't save lyrics to %s: %s", filename, e) self.communicate(artist_then, title_then, lyrics, error) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/launcher.py�����������������������������������������������������������0000664�0000000�0000000�00000017175�15003420405�0020700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """Sonata is a simple GTK+ client for the Music Player Daemon.""" import sys if sys.version_info <= (3, 2): sys.stderr.write("Sonata requires Python 3.2+\n") sys.exit(1) import gettext import locale import logging import os import platform import threading # needed for interactive shell import gi def run(): """Main entry point of Sonata""" # TODO: allow to exit the application with Ctrl+C from the terminal # This is a fix for https://bugzilla.gnome.org/show_bug.cgi?id=622084 import signal signal.signal(signal.SIGINT, signal.SIG_DFL) # XXX insert the correct sonata package dir in sys.path logging.basicConfig( level=logging.WARNING, format="[%(asctime)s] [%(threadName)s] %(name)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", stream=sys.stderr) logger = logging.getLogger(__name__) try: import sonata except ImportError: logger.critical("Python failed to find the sonata modules.") logger.critical("Searched in the following directories:\n%s", "\n".join(sys.path)) logger.critical("Perhaps Sonata is improperly installed?") sys.exit(1) try: from sonata.version import version except ImportError: logger.critical("Python failed to find the sonata modules.") logger.critical("An old or incomplete installation was " "found in the following directory: %s", os.path.dirname(sonata.__file__)) logger.critical("Perhaps you want to delete it?") sys.exit(1) # XXX check that version.VERSION is what this script was installed for ## Apply global fixes: if platform.system() == 'Linux': sys.argv[0] = "sonata" import ctypes libc = ctypes.CDLL('libc.so.6') PR_SET_NAME = 15 libc.prctl(PR_SET_NAME, b"sonata", 0, 0, 0) ## Apply locale and translation: # Try to find a "good" locale directory. for path in [ # This is useful when working from the source repository os.path.join(os.path.dirname(sonata.__file__), "share", "locale"), # This is useful when Sonata is installed in a special place os.path.join(sonata.__file__.split('/lib')[0], 'share', 'locale'), ]: if os.path.exists(path): locales_path = path break else: # This tells gettext to look at the default place for the translation # files. locales_path = None # Gtk.Builder uses gettext functions from C library. Enable # correct localization for these functions with the locale # module. See: # https://docs.python.org/3/library/locale.html#access-to-message-catalogs try: locale.setlocale(locale.LC_ALL, '') except locale.Error as e: # If locale is not supported by C library, the initial call to # locale.setlocale will fail and raise an exception. Any Glade # strings would not be translated. But native python strings # would still be translated if the .mo files are included in # sonata! # # To prevent a mix of languages, disable translation for both: # 1. explicitly set locale to 'C' (default strings) # 2. don't provide python gettext with any translatable # strings (localedir=None), but still install the required # _() function logger.error("setlocale() failed: %s. Falling back to default locale.", e) locale.setlocale(locale.LC_ALL, 'C') gettext.install(True, localedir=None, names=["ngettext"]) else: gettext.install('sonata', locales_path, names=["ngettext"]) # bindtextdomain() is GNU libc specific and may not be available # on other systems (e.g. OSX) if hasattr(locale, 'bindtextdomain'): locale.bindtextdomain('sonata', locales_path) gettext.textdomain('sonata') gettext.bindtextdomain('sonata', locales_path) ## Check initial dependencies: try: import mpd except: logger.critical("Sonata requires python-mpd2. Aborting...") sys.exit(1) ## Initialize the plugin system: from sonata.pluginsystem import pluginsystem pluginsystem.find_plugins() pluginsystem.notify_of('enablables', lambda plugin, cb: cb(True), lambda plugin, cb: cb(False)) ## Load the command line interface: from sonata import cli args = cli.Args() args.parse(sys.argv) ## Deal with GTK: if not args.skip_gui: # importing gtk does sys.setdefaultencoding("utf-8"), sets locale etc. gi.require_version('Gdk', '3.0') gi.require_version('GdkPixbuf', '2.0') gi.require_version('Gtk', '3.0') gi.require_version('Pango', '1.0') from gi.repository import Gtk, Gdk else: class FakeModule: pass # make sure the ui modules aren't imported for m in 'gtk', 'pango', 'sonata.ui', 'sonata.breadcrumbs': if m in sys.modules: logger.warning( "Module %s imported in CLI mode (it should not)", m) else: sys.modules[m] = FakeModule() ## Global init: from socket import setdefaulttimeout as socketsettimeout socketsettimeout(5) if not args.skip_gui: Gdk.threads_init() ## CLI actions: args.execute_cmds() ## Load the main application: from sonata import main def on_application_activate(application): Gdk.threads_enter() windows = application.get_windows() if windows: for window in windows: window.present() else: sonata = main.Base(args) sonata.window.set_application(application) Gdk.threads_leave() app = Gtk.Application(application_id="org.MPD.Sonata") app.connect("activate", on_application_activate) ## Load the shell # yo dawg, I heard you like python, # so I put a python shell in your python application # so you can debug while you run it. if args.start_shell: # the enviroment used for the shell scope = dict(list(globals().items()) + list(locals().items())) def run_shell(): try: import IPython IPython.embed(user_ns=scope) except ImportError as e: # fallback if ipython is not avaible import code shell = code.InteractiveConsole(scope) shell.interact() # quit program if shell is closed, # This is the only way to close the program clone in this mode, # because we can't close the shell thread easily from gi.repository import Gtk Gtk.main_quit() threading.Thread(target=run_shell, name="Shell").start() try: app.run([]) except KeyboardInterrupt: Gtk.main_quit() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/library.py������������������������������������������������������������0000664�0000000�0000000�00000170107�15003420405�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import os import re import gettext import locale import threading # libsearchfilter_toggle starts thread libsearchfilter_loop import operator from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, GLib, Pango from sonata import ui, misc, consts, formatting, breadcrumbs, mpdhelper as mpdh from sonata.artwork import get_multicd_album_root_dir from sonata.song import SongRecord VARIOUS_ARTISTS = _("Various Artists") def list_mark_various_artists_albums(albums): for i in range(len(albums)): if i + consts.NUM_ARTISTS_FOR_VA - 1 > len(albums)-1: break VA = False for j in range(1, consts.NUM_ARTISTS_FOR_VA): if albums[i].album.lower() != albums[i + j].album.lower() or \ albums[i].year != albums[i + j].year or \ albums[i].path != albums[i + j].path: break if albums[i].artist == albums[i + j].artist: albums.pop(i + j) break if j == consts.NUM_ARTISTS_FOR_VA - 1: VA = True if VA: album = albums[i]._asdict() album['artist'] = VARIOUS_ARTISTS albums[i] = SongRecord(**album) j = 1 while i + j <= len(albums) - 1: if albums[i].album.lower() == albums[i + j].album.lower() \ and albums[i].year == albums[i + j].year: albums.pop(i + j) else: break return albums class Library: def __init__(self, config, mpd, artwork, TAB_LIBRARY, settings_save, filter_key_pressed, on_add_item, connected, on_library_button_press, add_tab): self.artwork = artwork self.config = config self.mpd = mpd self.librarymenu = None # cyclic dependency, set later self.settings_save = settings_save self.filter_key_pressed = filter_key_pressed self.on_add_item = on_add_item self.connected = connected self.on_library_button_press = on_library_button_press self.NOTAG = _("Untagged") self.search_terms = [_('Artist'), _('Title'), _('Album'), _('Genre'), _('Filename'), _('Everything')] self.search_terms_mpd = ['artist', 'title', 'album', 'genre', 'file', 'any'] self.libfilterbox_cmd_buf = None self.libfilterbox_cond = None self.libfilterbox_source = None self.prevlibtodo_base = None self.prevlibtodo_base_results = None self.prevlibtodo = None self.save_timeout = None self.libsearch_last_tooltip = None self.lib_view_filesystem_cache = None self.lib_view_artist_cache = None self.lib_view_genre_cache = None self.lib_view_album_cache = None self.lib_list_genres = None self.lib_list_artists = None self.lib_list_albums = None self.lib_list_years = None self.view_caches_reset() # Library tab self.builder = ui.builder('library') self.css_provider = ui.css_provider('library') self.libraryvbox = self.builder.get_object('library_page_v_box') self.library = self.builder.get_object('library_page_treeview') self.library_selection = self.library.get_selection() self.breadcrumbs = self.builder.get_object('library_crumbs_box') self.crumb_section = self.builder.get_object( 'library_crumb_section_togglebutton') self.crumb_section_image = self.builder.get_object( 'library_crumb_section_image') self.crumb_break = self.builder.get_object( 'library_crumb_break_box') self.breadcrumbs.set_crumb_break(self.crumb_break) self.crumb_section_handler = None expanderwindow2 = self.builder.get_object('library_page_scrolledwindow') self.searchbox = self.builder.get_object('library_page_searchbox') self.searchcombo = self.builder.get_object('library_page_searchbox_combo') self.searchtext = self.builder.get_object('library_page_searchbox_entry') self.searchbutton = self.builder.get_object('library_page_searchbox_button') self.searchbutton.hide() self.libraryview = self.builder.get_object('library_crumb_button') self.tab_label_widget = self.builder.get_object('library_tab_eventbox') tab_label = self.builder.get_object('library_tab_label') tab_label.set_text(TAB_LIBRARY) self.tab = add_tab(self.libraryvbox, self.tab_label_widget, TAB_LIBRARY, self.library) # Assign some pixbufs for use in self.library self.openpb2 = self.library.render_icon(Gtk.STOCK_OPEN, Gtk.IconSize.LARGE_TOOLBAR) self.harddiskpb2 = self.library.render_icon(Gtk.STOCK_HARDDISK, Gtk.IconSize.LARGE_TOOLBAR) self.openpb = self.library.render_icon(Gtk.STOCK_OPEN, Gtk.IconSize.MENU) self.harddiskpb = self.library.render_icon(Gtk.STOCK_HARDDISK, Gtk.IconSize.MENU) self.albumpb = self.library.render_icon('sonata-album', Gtk.IconSize.LARGE_TOOLBAR) self.genrepb = self.library.render_icon('gtk-orientation-portrait', Gtk.IconSize.LARGE_TOOLBAR) self.artistpb = self.library.render_icon('sonata-artist', Gtk.IconSize.LARGE_TOOLBAR) self.sonatapb = self.library.render_icon('sonata', Gtk.IconSize.LARGE_TOOLBAR) # list of the library views: (id, name, icon name, label) self.VIEWS = [ (consts.VIEW_FILESYSTEM, 'filesystem', Gtk.STOCK_HARDDISK, _("Filesystem")), (consts.VIEW_ALBUM, 'album', 'sonata-album', _("Albums")), (consts.VIEW_ARTIST, 'artist', 'sonata-artist', _("Artists")), (consts.VIEW_GENRE, 'genre', Gtk.STOCK_ORIENTATION_PORTRAIT, _("Genres")), ] self.library.connect('row_activated', self.on_library_row_activated) self.library.connect('button_press_event', self.on_library_button_press) self.library.connect('key-press-event', self.on_library_key_press) self.library.connect('query-tooltip', self.on_library_query_tooltip) expanderwindow2.connect('scroll-event', self.on_library_scrolled) self.libraryview.connect('clicked', self.library_view_popup) self.searchtext.connect('key-press-event', self.libsearchfilter_key_pressed) self.searchtext.connect('activate', self.libsearchfilter_on_enter) self.searchbutton.connect('clicked', self.on_search_end) self.libfilter_changed_handler = self.searchtext.connect( 'changed', self.libsearchfilter_feed_loop) searchcombo_changed_handler = self.searchcombo.connect( 'changed', self.on_library_search_combo_change) # Initialize library data and widget self.libraryposition = {} self.libraryselectedpath = {} self.searchcombo.handler_block(searchcombo_changed_handler) self.searchcombo.set_active(self.config.last_search_num) self.searchcombo.handler_unblock(searchcombo_changed_handler) self.librarydata = Gtk.ListStore(GdkPixbuf.Pixbuf, GObject.TYPE_PYOBJECT, str) self.library.set_model(self.librarydata) self.library.set_search_column(2) self.librarycell = Gtk.CellRendererText() self.librarycell.set_property("ellipsize", Pango.EllipsizeMode.END) self.libraryimg = Gtk.CellRendererPixbuf() self.librarycolumn = Gtk.TreeViewColumn() self.librarycolumn.pack_start(self.libraryimg, False) self.librarycolumn.pack_start(self.librarycell, True) self.librarycolumn.add_attribute(self.libraryimg, 'pixbuf', 0) self.librarycolumn.add_attribute(self.librarycell, 'markup', 2) self.librarycolumn.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.library.append_column(self.librarycolumn) self.library_selection.set_mode(Gtk.SelectionMode.MULTIPLE) def get_libraryactions(self): return [(name + 'view', icon, label, None, None, self.on_libraryview_chosen) for _view, name, icon, label in self.VIEWS] def get_model(self): return self.librarydata def get_widgets(self): return self.libraryvbox def get_treeview(self): return self.library def get_selection(self): return self.library_selection def set_librarymenu(self, librarymenu): self.librarymenu = librarymenu self.librarymenu.attach_to_widget(self.libraryview, None) def library_view_popup(self, button): if hasattr(self.librarymenu, 'popup_at_widget'): self.librarymenu.popup_at_widget(button, Gdk.Gravity.CENTER, Gdk.Gravity.NORTH_WEST, None) else: self.librarymenu.popup(None, None, self.library_view_position_menu, button, 1, 0) def library_view_position_menu(self, _menu, *args): # Depending on PyGObject version, args is either just the # button that was our user_data, or [x, y, button]. button = args[-1] alloc = button.get_allocation() return (self.config.x + alloc.x, self.config.y + alloc.y + alloc.height, True) def on_libraryview_chosen(self, action): if self.search_visible(): self.on_search_end(None) if action.get_name() == 'filesystemview': self.config.lib_view = consts.VIEW_FILESYSTEM elif action.get_name() == 'artistview': self.config.lib_view = consts.VIEW_ARTIST elif action.get_name() == 'genreview': self.config.lib_view = consts.VIEW_GENRE elif action.get_name() == 'albumview': self.config.lib_view = consts.VIEW_ALBUM self.library.grab_focus() self.libraryposition = {} self.libraryselectedpath = {} self.library_browse(root=SongRecord(path="/")) try: if len(self.librarydata) > 0: first = Gtk.TreePath.new_first() to = Gtk.TreePath.new() to.append_index(len(self.librarydata) - 1) self.library_selection.unselect_range(first, to) except Exception as e: # XXX import logger here in the future raise e GLib.idle_add(self.library.scroll_to_point, 0, 0) def view_caches_reset(self): # We should call this on first load and whenever mpd is # updated. self.lib_view_filesystem_cache = None self.lib_view_artist_cache = None self.lib_view_genre_cache = None self.lib_view_album_cache = None self.lib_list_genres = None self.lib_list_artists = None self.lib_list_albums = None self.lib_list_years = None def on_library_scrolled(self, _widget, _event): try: # Use GLib.idle_add so that we can get the visible # state of the treeview GLib.idle_add(self._on_library_scrolled) except: pass def _on_library_scrolled(self): if not self.config.show_covers: return # This avoids a warning about a NULL node in get_visible_range if not self.library.props.visible: return visible_range = self.library.get_visible_range() if visible_range is None: return else: start_row, end_row = visible_range self.artwork.library_artwork_update(self.librarydata, start_row, end_row, self.albumpb) def library_browse(self, _widget=None, root=None): # Populates the library list with entries if not self.connected(): return if root is None or (self.config.lib_view == consts.VIEW_FILESYSTEM \ and root.path is None): root = SongRecord(path="/") if self.config.wd is None or (self.config.lib_view == \ consts.VIEW_FILESYSTEM and \ self.config.wd.path is None): self.config.wd = SongRecord(path="/") prev_selection = [] prev_selection_root = False prev_selection_parent = False if root == self.config.wd: # This will happen when the database is updated. So, lets save # the current selection in order to try to re-select it after # the update is over. model, selected = self.library_selection.get_selected_rows() for path in selected: prev_selection.append(model.get_value(model.get_iter(path), 1)) self.libraryposition[self.config.wd] = \ self.library.get_visible_rect().width path_updated = True else: path_updated = False new_level = self.library_get_data_level(root) curr_level = self.library_get_data_level(self.config.wd) # The logic below is more consistent with, e.g., thunar. if new_level > curr_level: # Save position and row for where we just were if we've # navigated into a sub-directory: self.libraryposition[self.config.wd] = \ self.library.get_visible_rect().width model, rows = self.library_selection.get_selected_rows() if len(rows) > 0: data = self.librarydata.get_value( self.librarydata.get_iter(rows[0]), 2) self.libraryselectedpath[self.config.wd] = rows[0] elif (self.config.lib_view == consts.VIEW_FILESYSTEM and \ root != self.config.wd) \ or (self.config.lib_view != consts.VIEW_FILESYSTEM and new_level != \ curr_level): # If we've navigated to a parent directory, don't save # anything so that the user will enter that subdirectory # again at the top position with nothing selected self.libraryposition[self.config.wd] = 0 self.libraryselectedpath[self.config.wd] = None # In case sonata is killed or crashes, we'll save the library state # in 5 seconds (first removing any current settings_save timeouts) if self.config.wd != root: try: GLib.source_remove(self.save_timeout) except: pass self.save_timeout = GLib.timeout_add(5000, self.settings_save) self.config.wd = root self.library.freeze_child_notify() self.library.set_model(None) self.librarydata.clear() # Populate treeview with data: bd = [] wd = self.config.wd while len(bd) == 0: if self.config.lib_view == consts.VIEW_FILESYSTEM: bd = self.library_populate_filesystem_data(wd.path) elif self.config.lib_view == consts.VIEW_ALBUM: if wd.album is not None: bd = self.library_populate_data(artist=wd.artist, album=wd.album, year=wd.year) else: bd = self.library_populate_toplevel_data(albumview=True) elif self.config.lib_view == consts.VIEW_ARTIST: if wd.artist is not None and wd.album is not None: bd = self.library_populate_data(artist=wd.artist, album=wd.album, year=wd.year) elif self.config.wd.artist is not None: bd = self.library_populate_data(artist=wd.artist) else: bd = self.library_populate_toplevel_data(artistview=True) elif self.config.lib_view == consts.VIEW_GENRE: if wd.genre is not None and \ wd.artist is not None and \ wd.album is not None: bd = self.library_populate_data(genre=wd.genre, artist=wd.artist, album=wd.album, year=wd.year) elif wd.genre is not None: bd = self.library_populate_data(genre=wd.genre, artist=wd.artist) else: bd = self.library_populate_toplevel_data(genreview=True) if len(bd) == 0: # Nothing found; go up a level until we reach the top level # or results are found last_wd = self.config.wd self.config.wd = self.library_get_parent() if self.config.wd == last_wd: break for _sort, path in bd: self.librarydata.append(path) self.library.set_model(self.librarydata) self.library.thaw_child_notify() # Scroll back to set view for current dir: self.library.realize() GLib.idle_add(self.library_set_view, not path_updated) if len(prev_selection) > 0 or prev_selection_root or \ prev_selection_parent: # Retain pre-update selection: self.library_retain_selection(prev_selection, prev_selection_root, prev_selection_parent) self.update_breadcrumbs() def update_breadcrumbs(self): # remove previous buttons for b in self.breadcrumbs: self.breadcrumbs.remove(b) # find info for current view view, _name, icon, label = [v for v in self.VIEWS if v[0] == self.config.lib_view][0] # the first crumb is the root of the current view self.crumb_section.set_label(label) self.crumb_section_image.set_from_stock(icon, Gtk.IconSize.MENU) self.crumb_section.set_tooltip_text(label) if self.crumb_section_handler: self.crumb_section.disconnect(self.crumb_section_handler) crumbs = [] # crumbs are specific to the view if view == consts.VIEW_FILESYSTEM: if self.config.wd.path and self.config.wd.path != '/': parts = self.config.wd.path.split('/') else: parts = [] # no crumbs for / # append a crumb for each part for i, part in enumerate(parts): partpath = '/'.join(parts[:i + 1]) target = SongRecord(path=partpath) crumbs.append((part, Gtk.STOCK_OPEN, None, target)) else: parts = () if view == consts.VIEW_ALBUM: # We don't want to show an artist button in album view keys = 'genre', 'album' nkeys = 2 parts = (self.config.wd.genre, self.config.wd.album) else: keys = 'genre', 'artist', 'album' nkeys = 3 parts = (self.config.wd.genre, self.config.wd.artist, self.config.wd.album) # append a crumb for each part for i, key, part in zip(range(nkeys), keys, parts): if part is None: continue partdata = dict(list(zip(keys, parts))[:i + 1]) target = SongRecord(**partdata) pb, icon = None, None if key == 'album': # Album artwork, with self.alumbpb as a backup: cache_data = SongRecord(artist=self.config.wd.artist, album=self.config.wd.album, path=self.config.wd.path) pb = self.artwork.cache.get_pixbuf(cache_data, consts.LIB_COVER_SIZE) if pb is None: icon = 'album' elif key == 'artist': icon = 'sonata-artist' else: icon = Gtk.STOCK_ORIENTATION_PORTRAIT crumbs.append((part, icon, pb, target)) if not len(crumbs): self.crumb_section.set_active(True) context = self.crumb_section.get_style_context() context.add_class('last_crumb') else: self.crumb_section.set_active(False) context = self.crumb_section.get_style_context() context.remove_class('last_crumb') self.crumb_section_handler = self.crumb_section.connect('toggled', self.library_browse, SongRecord(path='/')) # add a button for each crumb for crumb in crumbs: text, icon, pb, target = crumb text = misc.escape_html(text) label = Gtk.Label(text, use_markup=True) if icon: image = Gtk.Image.new_from_stock(icon, Gtk.IconSize.MENU) elif pb: pb = pb.scale_simple(16, 16, GdkPixbuf.InterpType.HYPER) image = Gtk.Image.new_from_pixbuf(pb) b = breadcrumbs.CrumbButton(image, label) if crumb is crumbs[-1]: # FIXME makes the button request minimal space: b.set_active(True) context = b.get_style_context() context.add_class('last_crumb') b.set_tooltip_text(label.get_label()) b.connect('toggled', self.library_browse, target) self.breadcrumbs.pack_start(b, False, False, 0) b.show_all() def library_populate_filesystem_data(self, path): # List all dirs/files at path bd = [] if path == '/' and self.lib_view_filesystem_cache is not None: # Use cache if possible... bd = self.lib_view_filesystem_cache else: for item in self.mpd.lsinfo(path): if 'directory' in item: name = os.path.basename(item['directory']) data = SongRecord(path=item["directory"]) bd += [('d' + str(name).lower(), [self.openpb, data, misc.escape_html(name)])] elif 'file' in item: data = SongRecord(path=item['file']) bd += [('f' + item['file'].lower(), [self.sonatapb, data, formatting.parse(self.config.libraryformat, item, True)])] bd.sort(key=operator.itemgetter(0)) return bd def library_get_toplevel_cache(self, genreview=False, artistview=False, albumview=False): if genreview and self.lib_view_genre_cache is not None: bd = self.lib_view_genre_cache elif artistview and self.lib_view_artist_cache is not None: bd = self.lib_view_artist_cache elif albumview and self.lib_view_album_cache is not None: bd = self.lib_view_album_cache else: return None # Check if we can update any artwork: for _sort, info in bd: pb = info[0] if pb == self.albumpb: key = SongRecord(path=info[1].path, artist=info[1].artist, album=info[1].album) pb2 = self.artwork.cache.get_pixbuf(key, consts.LIB_COVER_SIZE) if pb2 is not None: info[0] = pb2 return bd def library_populate_toplevel_data(self, genreview=False, artistview=False, albumview=False): bd = self.library_get_toplevel_cache(genreview, artistview, albumview) if bd is not None: # We have our cached data, woot. return bd bd = [] if genreview or artistview: # Only for artist/genre views, album view is handled differently # since multiple artists can have the same album name if genreview: items = self.library_return_list_items('genre') pb = self.genrepb else: items = self.library_return_list_items('artist') pb = self.artistpb if not (self.NOTAG in items): items.append(self.NOTAG) for item in items: if genreview: playtime, num_songs = self.library_return_count(genre=item) data = SongRecord(genre=item) else: playtime, num_songs = self.library_return_count( artist=item) data = SongRecord(artist=item) if num_songs > 0: display = misc.escape_html(item) display += self.add_display_info(num_songs, playtime) bd += [(misc.lower_no_the(item), [pb, data, display])] elif albumview: albums = [] untagged_found = False for item in self.mpd.listallinfo('/'): if 'file' in item and 'album' in item: album = item['album'] artist = item.get('artist', self.NOTAG) year = item.get('date', self.NOTAG) path = get_multicd_album_root_dir( os.path.dirname(item['file'])) data = SongRecord(album=album, artist=artist, year=year, path=path) albums.append(data) if album == self.NOTAG: untagged_found = True if not untagged_found: albums.append(SongRecord(album=self.NOTAG)) albums = misc.remove_list_duplicates(albums, case=False) albums = list_mark_various_artists_albums(albums) for item in albums: album, artist, _genre, year, path = item playtime, num_songs = self.library_return_count(artist=artist, album=album, year=year) if num_songs > 0: data = SongRecord(artist=artist, album=album, year=year, path=path) display = misc.escape_html(album) if artist and year and len(artist) > 0 and len(year) > 0 \ and artist != self.NOTAG and year != self.NOTAG: display += " <span weight='light'>(%s, %s)</span>" \ % (misc.escape_html(artist), misc.escape_html(year)) elif artist and len(artist) > 0 and artist != self.NOTAG: display += " <span weight='light'>(%s)</span>" \ % misc.escape_html(artist) elif year and len(year) > 0 and year != self.NOTAG: display += " <span weight='light'>(%s)</span>" \ % misc.escape_html(year) display += self.add_display_info(num_songs, playtime) bd += [(misc.lower_no_the(album), [self.albumpb, data, display])] bd.sort(key=lambda key: locale.strxfrm(key[0])) if genreview: self.lib_view_genre_cache = bd elif artistview: self.lib_view_artist_cache = bd elif albumview: self.lib_view_album_cache = bd return bd def library_populate_data(self, genre=None, artist=None, album=None, year=None): # Create treeview model info bd = [] if genre is not None and artist is None and album is None: # Artists within a genre artists = self.library_return_list_items('artist', genre=genre) if len(artists) > 0: if not self.NOTAG in artists: artists.append(self.NOTAG) for artist in artists: playtime, num_songs = self.library_return_count( genre=genre, artist=artist) if num_songs > 0: display = misc.escape_html(artist) display += self.add_display_info(num_songs, playtime) data = SongRecord(genre=genre, artist=artist) bd += [(misc.lower_no_the(artist), [self.artistpb, data, display])] elif artist is not None and album is None: # Albums/songs within an artist and possibly genre # Albums first: if genre is not None: albums = self.library_return_list_items('album', genre=genre, artist=artist) else: albums = self.library_return_list_items('album', artist=artist) for album in albums: if genre is not None: years = self.library_return_list_items('date', genre=genre, artist=artist, album=album) else: years = self.library_return_list_items('date', artist=artist, album=album) if not self.NOTAG in years: years.append(self.NOTAG) for year in years: if genre is not None: playtime, num_songs = self.library_return_count( genre=genre, artist=artist, album=album, year=year) if num_songs > 0: files = self.library_return_list_items( 'file', genre=genre, artist=artist, album=album, year=year) path = os.path.dirname(files[0]) data = SongRecord(genre=genre, artist=artist, album=album, year=year, path=path) else: playtime, num_songs = self.library_return_count( artist=artist, album=album, year=year) if num_songs > 0: files = self.library_return_list_items( 'file', artist=artist, album=album, year=year) path = os.path.dirname(files[0]) cache_data = SongRecord(artist=artist, album=album, path=path) data = SongRecord(artist=artist, album=album, year=year, path=path) if num_songs > 0: cache_data = SongRecord(artist=artist, album=album, path=path) display = misc.escape_html(album) if year and len(year) > 0 and year != self.NOTAG: display += " <span weight='light'>(%s)</span>" \ % misc.escape_html(year) display += self.add_display_info(num_songs, playtime) ordered_year = year if ordered_year == self.NOTAG: ordered_year = '9999' pb = self.artwork.cache.get_pixbuf( cache_data, consts.LIB_COVER_SIZE, self.albumpb) bd += [(ordered_year + misc.lower_no_the(album), [pb, data, display])] # Now, songs not in albums: bd += self.library_populate_data_songs(genre, artist, self.NOTAG, None) else: # Songs within an album, artist, year, and possibly genre bd += self.library_populate_data_songs(genre, artist, album, year) bd.sort(key=lambda key: locale.strxfrm(key[0])) return bd def library_populate_data_songs(self, genre, artist, album, year): bd = [] if genre is not None: songs, _playtime, _num_songs = \ self.library_return_search_items(genre=genre, artist=artist, album=album, year=year) else: songs, _playtime, _num_songs = self.library_return_search_items( artist=artist, album=album, year=year) for song in songs: data = SongRecord(path=song.file) track = str(song.get('track', 99)).zfill(2) disc = str(song.get('disc', 99)).zfill(2) try: bd += [('f' + disc + track + misc.lower_no_the(song.title), [self.sonatapb, data, formatting.parse( self.config.libraryformat, song, True)])] except: bd += [('f' + disc + track + song.file.lower(), [self.sonatapb, data, formatting.parse(self.config.libraryformat, song, True)])] return bd def library_return_list_items(self, itemtype, genre=None, artist=None, album=None, year=None, ignore_case=True): # Returns all items of tag 'itemtype', in alphabetical order, # using mpd's 'list'. If searchtype is passed, use # a case insensitive search, via additional 'list' # queries, since using a single 'list' call will be # case sensitive. results = [] searches = self.library_compose_list_count_searchlist(genre, artist, album, year) if len(searches) > 0: for s in searches: # If we have untagged tags (''), use search instead # of list because list will not return anything. if '' in s: items = [] songs, playtime, num_songs = \ self.library_return_search_items(genre, artist, album, year) for song in songs: items.append(song.get(itemtype)) else: items = self.mpd.list(itemtype, *s) for item in items: if isinstance(item, dict): if itemtype in item: item = item[itemtype] else: continue if len(item) > 0: results.append(item) else: if genre is None and artist is None and album is None and year \ is None: for item in self.mpd.list(itemtype): if isinstance(item, dict): if itemtype in item: item = item[itemtype] else: continue if len(item) > 0: results.append(item) if ignore_case: results = misc.remove_list_duplicates(results, case=False) results.sort(key=locale.strxfrm) return results def library_return_count(self, genre=None, artist=None, album=None, year=None): # Because mpd's 'count' is case sensitive, we have to # determine all equivalent items (case insensitive) and # call 'count' for each of them. Using 'list' + 'count' # involves much less data to be transferred back and # forth than to use 'search' and count manually. searches = self.library_compose_list_count_searchlist(genre, artist, album, year) playtime = 0 num_songs = 0 for s in searches: count = self.mpd.count(*s) playtime += count.playtime num_songs += count.songs return (playtime, num_songs) def library_compose_list_count_searchlist_single(self, search, typename, cached_list, searchlist): s = [] skip_type = (typename == 'artist' and search == VARIOUS_ARTISTS) if search is not None and not skip_type: if search == self.NOTAG: itemlist = [search, ''] else: itemlist = [] if cached_list is None: cached_list = self.library_return_list_items(typename, ignore_case=False) # This allows us to match untagged items cached_list.append('') for item in cached_list: if str(item).lower() == str(search).lower(): itemlist.append(item) if len(itemlist) == 0: # There should be no results! return None, cached_list for item in itemlist: if len(searchlist) > 0: for item2 in searchlist: s.append(item2 + (typename, item)) else: s.append((typename, item)) else: s = searchlist return s, cached_list def library_compose_list_count_searchlist(self, genre=None, artist=None, album=None, year=None): s = [] s, self.lib_list_genres = \ self.library_compose_list_count_searchlist_single( genre, 'genre', self.lib_list_genres, s) if s is None: return [] s, self.lib_list_artists = \ self.library_compose_list_count_searchlist_single( artist, 'artist', self.lib_list_artists, s) if s is None: return [] s, self.lib_list_albums = \ self.library_compose_list_count_searchlist_single( album, 'album', self.lib_list_albums, s) if s is None: return [] s, self.lib_list_years = \ self.library_compose_list_count_searchlist_single( year, 'date', self.lib_list_years, s) if s is None: return [] return s def library_compose_search_searchlist_single(self, search, typename, searchlist): s = [] skip_type = (typename == 'artist' and search == VARIOUS_ARTISTS) if search is not None and not skip_type: if search == self.NOTAG: itemlist = [search, ''] else: itemlist = [search] for item in itemlist: if len(searchlist) > 0: for item2 in searchlist: s.append(item2 + (typename, item)) else: s.append((typename, item)) else: s = searchlist return s def library_compose_search_searchlist(self, genre=None, artist=None, album=None, year=None): s = [] s = self.library_compose_search_searchlist_single(genre, 'genre', s) s = self.library_compose_search_searchlist_single(album, 'album', s) s = self.library_compose_search_searchlist_single(artist, 'artist', s) s = self.library_compose_search_searchlist_single(year, 'date', s) return s def library_return_search_items(self, genre=None, artist=None, album=None, year=None): # Returns all mpd items, using mpd's 'search', along with # playtime and num_songs. searches = self.library_compose_search_searchlist(genre, artist, album, year) for s in searches: args_tuple = tuple(map(str, s)) playtime = 0 num_songs = 0 results = [] strip_type = None if len(args_tuple) == 0: return None, 0, 0 items = self.mpd.search(*args_tuple) if items is not None: for item in items: if strip_type is None or (strip_type is not None and not \ strip_type in item.keys()): match = True pos = 0 # Ensure that if, e.g., "foo" is searched, # "foobar" isn't returned too for arg in args_tuple[::2]: if arg in item and \ str(item.get(arg, '')).upper() != \ str(args_tuple[pos + 1]).upper(): match = False break pos += 2 if match: results.append(item) num_songs += 1 playtime += item.time return (results, int(playtime), num_songs) def add_display_info(self, num_songs, playtime): seconds = int(playtime) hours = seconds // 3600 seconds -= 3600 * hours minutes = seconds // 60 seconds -= 60 * minutes songs_text = ngettext('{count} song', '{count} songs', num_songs).format(count=num_songs) seconds_text = ngettext('{count} second', '{count} seconds', seconds).format(count=seconds) minutes_text = ngettext('{count} minute', '{count} minutes', minutes).format(count=minutes) hours_text = ngettext('{count} hour', '{count} hours', hours).format(count=hours) time_parts = [songs_text] if hours > 0: time_parts.extend([hours_text, minutes_text]) elif minutes > 0: time_parts.extend([minutes_text, seconds_text]) else: time_parts.extend([seconds_text]) display_markup = "\n<small><span weight='light'>{}</span></small>" display_text = ', '.join(time_parts) return display_markup.format(display_text) def library_retain_selection(self, prev_selection, prev_selection_root, prev_selection_parent): # Unselect everything: if len(self.librarydata) > 0: first = Gtk.TreePath.new_first() to = Gtk.TreePath.new() to.append_index(len(self.librarydata) - 1) self.library_selection.unselect_range(first, to) # Now attempt to retain the selection from before the update: for value in prev_selection: for row in self.librarydata: if value == row[1]: self.library_selection.select_path(row.path) break if prev_selection_root: self.library_selection.select_path((0,)) if prev_selection_parent: self.library_selection.select_path((1,)) def library_set_view(self, select_items=True): # select_items should be false if the same directory has merely # been refreshed (updated) try: if self.config.wd in self.libraryposition: self.library.scroll_to_point( -1, self.libraryposition[self.config.wd]) else: self.library.scroll_to_point(0, 0) except: self.library.scroll_to_point(0, 0) # Select and focus previously selected item if select_items: if self.config.wd in self.libraryselectedpath: try: if self.libraryselectedpath[self.config.wd]: self.library_selection.select_path( self.libraryselectedpath[self.config.wd]) self.library.grab_focus() except: pass def library_get_data_level(self, data): if self.config.lib_view == consts.VIEW_FILESYSTEM: # Returns the number of directories down: if data.path == '/': # Every other path doesn't start with "/", so # start the level numbering at -1 return -1 else: return data.path.count("/") else: # Returns the number of items stored in data, excluding # the path: level = 0 for item in data: if item is not None: level += 1 return level def on_library_key_press(self, widget, event): if event.keyval == Gdk.keyval_from_name('Return'): self.on_library_row_activated(widget, widget.get_cursor()[0]) return True def on_library_query_tooltip(self, widget, x, y, keyboard_mode, tooltip): if keyboard_mode or not self.search_visible(): widget.set_tooltip_text("") return False bin_x, bin_y = widget.convert_widget_to_bin_window_coords(x, y) pathinfo = widget.get_path_at_pos(bin_x, bin_y) if not pathinfo: widget.set_tooltip_text("") # If the user hovers over an empty row and then back to # a row with a search result, this will ensure the tooltip # shows up again: GLib.idle_add(self.library_search_tooltips_enable, widget, x, y, keyboard_mode, None) return False treepath, _col, _x2, _y2 = pathinfo i = self.librarydata.get_iter(treepath.get_indices()[0]) path = misc.escape_html(self.librarydata.get_value(i, 1).path) song = self.librarydata.get_value(i, 2) new_tooltip = "<b>%s:</b> %s\n<b>%s:</b> %s" \ % (_("Song"), song, _("Path"), path) if new_tooltip != self.libsearch_last_tooltip: self.libsearch_last_tooltip = new_tooltip self.library.set_property('has-tooltip', False) GLib.idle_add(self.library_search_tooltips_enable, widget, x, y, keyboard_mode, tooltip) GLib.idle_add(widget.set_tooltip_markup, new_tooltip) return self.libsearch_last_tooltip = new_tooltip return False #api says we should return True, but this doesn't work? def library_search_tooltips_enable(self, widget, x, y, keyboard_mode, tooltip): self.library.set_property('has-tooltip', True) if tooltip is not None: self.on_library_query_tooltip(widget, x, y, keyboard_mode, tooltip) def on_library_row_activated(self, _widget, path, _column=0): if path is None: # Default to last item in selection: _model, selected = self.library_selection.get_selected_rows() if len(selected) >= 1: path = selected[0] else: return value = self.librarydata.get_value(self.librarydata.get_iter(path), 1) icon = self.librarydata.get_value(self.librarydata.get_iter(path), 0) if icon == self.sonatapb: # Song found, add item self.on_add_item(self.library) elif value.path == "..": self.library_browse_parent(None) else: self.library_browse(None, value) def library_get_parent(self): wd = self.config.wd if self.config.lib_view == consts.VIEW_ALBUM: value = SongRecord(path="/") elif self.config.lib_view == consts.VIEW_ARTIST: if wd.album is None: value = SongRecord(path="/") else: value = SongRecord(artist = wd.artist) elif self.config.lib_view == consts.VIEW_GENRE: if wd.album is not None: value = SongRecord(genre=wd.genre, artist=wd.artist) elif wd.artist is not None: value = SongRecord(genre=wd.genre) else: value = SongRecord(path="/") else: newvalue = '/'.join(wd.path.split('/')[:-1]) or '/' value = SongRecord(path=newvalue) return value def library_browse_parent(self, _action): if not self.search_visible(): if self.library.is_focus(): value = self.library_get_parent() self.library_browse(None, value) return True def not_parent_is_selected(self): # Returns True if something is selected and it's not # ".." or "/": model, rows = self.library_selection.get_selected_rows() for path in rows: i = model.get_iter(path) value = model.get_value(i, 2) if value != ".." and value != "/": return True return False def get_path_child_filenames(self, return_root, selected_only=True): # If return_root=True, return main directories whenever possible # instead of individual songs in order to reduce the number of # mpd calls we need to make. We won't want this behavior in some # instances, like when we want all end files for editing tags items = [] if selected_only: model, rows = self.library_selection.get_selected_rows() else: model = self.librarydata rows = [(i,) for i in range(len(model))] for path in rows: i = model.get_iter(path) pb = model.get_value(i, 0) data = model.get_value(i, 1) value = model.get_value(i, 2) if value != ".." and value != "/": if data.path is not None and data.album is None and data.artist is None and \ data.year is None and data.genre is None: if pb == self.sonatapb: # File items.append(data.path) else: # Directory if not return_root: items += self.library_get_path_files_recursive( data.path) else: items.append(data.path) else: results, _playtime, _num_songs = \ self.library_return_search_items( genre=data.genre, artist=data.artist, album=data.album, year=data.year) for item in results: items.append(item.file) # Make sure we don't have any EXACT duplicates: items = misc.remove_list_duplicates(items, case=True) return items def library_get_path_files_recursive(self, path): results = [] for item in self.mpd.lsinfo(path): if 'directory' in item: results = results + self.library_get_path_files_recursive( item['directory']) elif 'file' in item: results.append(item['file']) return results def on_library_search_combo_change(self, _combo=None): self.config.last_search_num = self.searchcombo.get_active() if not self.search_visible(): return self.prevlibtodo = "" self.prevlibtodo_base = "__" self.libsearchfilter_feed_loop(self.searchtext) def on_search_end(self, _button, move_focus=True): if self.search_visible(): self.libsearchfilter_toggle(move_focus) def search_visible(self): return self.searchbutton.get_property('visible') def libsearchfilter_toggle(self, move_focus): if not self.search_visible() and self.connected(): self.library.set_property('has-tooltip', True) ui.show(self.searchbutton) self.prevlibtodo = 'foo' self.prevlibtodo_base = "__" self.prevlibtodo_base_results = [] # extra thread for background search work, # synchronized with a condition and its internal mutex self.libfilterbox_cond = threading.Condition() self.libfilterbox_cmd_buf = self.searchtext.get_text() qsearch_thread = threading.Thread(target=self.libsearchfilter_loop) qsearch_thread.name = "LibraryFilter" qsearch_thread.daemon = True qsearch_thread.start() elif self.search_visible(): ui.hide(self.searchbutton) self.searchtext.handler_block(self.libfilter_changed_handler) self.searchtext.set_text("") self.searchtext.handler_unblock(self.libfilter_changed_handler) self.libsearchfilter_stop_loop() # call library_browse from the main thread to avoid corruption # of treeview, fixes #1959 GLib.idle_add(self.library_browse, None, self.config.wd) if move_focus: self.library.grab_focus() def libsearchfilter_feed_loop(self, editable): if not self.search_visible(): self.libsearchfilter_toggle(None) # Lets only trigger the searchfilter_loop if 200ms pass # without a change in Gtk.Entry try: GLib.source_remove(self.libfilterbox_source) except: pass self.libfilterbox_source = GLib.timeout_add( 300, self.libsearchfilter_start_loop, editable) def libsearchfilter_start_loop(self, editable): self.libfilterbox_cond.acquire() self.libfilterbox_cmd_buf = editable.get_text() self.libfilterbox_cond.notifyAll() self.libfilterbox_cond.release() def libsearchfilter_stop_loop(self): self.libfilterbox_cond.acquire() self.libfilterbox_cmd_buf = '$$$QUIT###' self.libfilterbox_cond.notifyAll() self.libfilterbox_cond.release() def libsearchfilter_loop(self): while True: # copy the last command or pattern safely self.libfilterbox_cond.acquire() try: while(self.libfilterbox_cmd_buf == '$$$DONE###'): self.libfilterbox_cond.wait() todo = self.libfilterbox_cmd_buf self.libfilterbox_cond.release() except: todo = self.libfilterbox_cmd_buf searchby = self.search_terms_mpd[self.config.last_search_num] if self.prevlibtodo != todo: if todo == '$$$QUIT###': GLib.idle_add(ui.reset_entry_marking, self.searchtext) return elif len(todo) > 1: GLib.idle_add(self.libsearchfilter_do_search, searchby, todo) elif len(todo) == 0: GLib.idle_add(ui.reset_entry_marking, self.searchtext) self.libsearchfilter_toggle(False) else: GLib.idle_add(ui.reset_entry_marking, self.searchtext) self.libfilterbox_cond.acquire() self.libfilterbox_cmd_buf = '$$$DONE###' try: self.libfilterbox_cond.release() except Exception as e: # XXX add logger here in the future! raise e self.prevlibtodo = todo def libsearchfilter_do_search(self, searchby, todo): if not self.prevlibtodo_base in todo: # Do library search based on first two letters: self.prevlibtodo_base = todo[:2] self.prevlibtodo_base_results = self.mpd.search(searchby, self.prevlibtodo_base) subsearch = False else: subsearch = True # Now, use filtering similar to playlist filtering: # this make take some seconds... and we'll escape the search text # because we'll be searching for a match in items that are also escaped # # Note that the searching is not order specific. That is, "foo bar" # will match on "fools bar" and "barstool foo". todos = todo.split(" ") regexps = [] for i in range(len(todos)): todos[i] = misc.escape_html(todos[i]) todos[i] = re.escape(todos[i]) todos[i] = '.*' + todos[i].lower() regexps.append(re.compile(todos[i])) matches = [] if searchby != 'any': for row in self.prevlibtodo_base_results: is_match = True for regexp in regexps: if not regexp.match(row.get(searchby, '').lower()): is_match = False break if is_match: matches.append(row) else: for row in self.prevlibtodo_base_results: allstr = " ".join(row.values()) is_match = True for regexp in regexps: if not regexp.match(str(allstr).lower()): is_match = False break if is_match: matches.append(row) if subsearch and len(matches) == len(self.librarydata): # nothing changed.. return self.library.freeze_child_notify() currlen = len(self.librarydata) bd = [(self.sonatapb, SongRecord(path=item['file']), formatting.parse(self.config.libraryformat, item, True)) for item in matches if 'file' in item] bd.sort(key=lambda key: locale.strxfrm(key[2])) for i, item in enumerate(bd): if i < currlen: j = self.librarydata.get_iter((i, )) for index in range(len(item)): if item[index] != self.librarydata.get_value(j, index): self.librarydata.set_value(j, index, item[index]) else: self.librarydata.append(item) # Remove excess items... newlen = len(bd) if newlen == 0: self.librarydata.clear() else: for i in range(currlen - newlen): j = self.librarydata.get_iter((currlen - 1 - i,)) self.librarydata.remove(j) self.library.thaw_child_notify() if len(matches) == 0: GLib.idle_add(ui.set_entry_invalid, self.searchtext) else: GLib.idle_add(self.library.set_cursor, Gtk.TreePath.new_first(), None, False) GLib.idle_add(ui.reset_entry_marking, self.searchtext) def libsearchfilter_key_pressed(self, widget, event): self.filter_key_pressed(widget, event, self.library) def libsearchfilter_on_enter(self, _entry): self.on_library_row_activated(None, None) def libsearchfilter_set_focus(self): GLib.idle_add(self.searchtext.grab_focus) def libsearchfilter_get_style(self): return self.searchtext.get_style() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/main.py���������������������������������������������������������������0000664�0000000�0000000�00000415441�15003420405�0020021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import collections import sys import gettext import locale import logging import os import operator import random import warnings import urllib.parse, urllib.request import re import gc import shutil import tempfile import threading from gi.repository import Gtk, Gdk, GdkPixbuf, Gio, GLib, Pango import pkg_resources import sonata.mpdhelper as mpdh from sonata import misc, ui, consts, img, tray, formatting from sonata.pluginsystem import pluginsystem from sonata.config import Config from sonata import preferences, tagedit, \ artwork, about, \ scrobbler, info, \ library, streams, \ playlists, current, \ dbus_plugin as dbus from sonata.song import SongRecord from sonata.version import version class Base: ### XXX Warning, a long __init__ ahead: def __init__(self, args): self.logger = logging.getLogger(__name__) # The following attributes were used but not defined here before: self.album_current_artist = None self.allow_art_search = None self.choose_dialog = None self.chooseimage_visible = None self.imagelist = None self.iterate_handler = None self.local_dest_filename = None self.notification_width = None self.remote_albumentry = None self.remote_artistentry = None self.remote_dest_filename = None self.remotefilelist = None self.seekidle = None self.artwork = None self.lyrics_search_dialog = None self.mpd = mpdh.MPDClient() self.conn = False # Anything != than self.conn, to actually refresh the UI at startup. self.prevconn = not self.conn # Constants self.TAB_CURRENT = _("Current") self.TAB_LIBRARY = _("Library") self.TAB_PLAYLISTS = _("Playlists") self.TAB_STREAMS = _("Streams") self.TAB_INFO = _("Info") # If the connection to MPD times out, this will cause the interface # to freeze while the socket.connect() calls are repeatedly executed. # Therefore, if we were not able to make a connection, slow down the # iteration check to once every 15 seconds. self.iterate_time_when_connected = 500 # Slow down polling when disconnected stopped self.iterate_time_when_disconnected_or_stopped = 1000 self.trying_connection = False self.traytips = tray.TrayIconTips() # better keep a reference around try: self.dbus_service = dbus.SonataDBus(self.dbus_show, self.dbus_toggle, self.dbus_popup, self.dbus_fullscreen) except Exception: pass misc.create_dir('~/.covers/') # Initialize vars for GUI self.current_tab = self.TAB_CURRENT self.prevstatus = None self.prevsonginfo = None self.popuptimes = ['2', '3', '5', '10', '15', '30', _('Entire song')] self.exit_now = False self.ignore_toggle_signal = False self.user_connect = False self.sonata_loaded = False self.call_gc_collect = False self.album_reset_artist() show_prefs = False self.merge_id = None self.actionGroupProfiles = None self.skip_on_profiles_click = False self.last_playlist_repeat = None self.last_song_repeat = None self.last_random = None self.last_consume = None self.last_title = None self.last_progress_frac = None self.last_progress_text = None self.last_status_text = "" self.img_clicked = False self.mpd_update_queued = False # XXX get rid of all of these: self.all_tab_names = [self.TAB_CURRENT, self.TAB_LIBRARY, self.TAB_PLAYLISTS, self.TAB_STREAMS, self.TAB_INFO] self.all_tab_ids = "current library playlists streams info".split() self.tabname2id = dict(zip(self.all_tab_names, self.all_tab_ids)) self.tabid2name = dict(zip(self.all_tab_ids, self.all_tab_names)) self.tabname2tab = dict() self.tabname2focus = dict() self.plugintabs = dict() self.config = Config(_('Default Profile'), _("by %A from %B")) self.preferences = preferences.Preferences(self.config, self.on_connectkey_pressed, self.on_currsong_notify, self.update_infofile, self.settings_save, self.populate_profiles_for_menu) self.settings_load() self.setup_prefs_callbacks() if args.start_visibility is not None: self.config.withdrawn = not args.start_visibility if self.config.autoconnect: self.user_connect = True args.apply_profile_arg(self.config) self.builder = ui.builder('sonata') self.provider = ui.css_provider('sonata') icon_factory_src = ui.builder_string('icons') icon_path = pkg_resources.resource_filename(__name__, "pixmaps") icon_factory_src = icon_factory_src.format(base_path=icon_path) self.builder.add_from_string(icon_factory_src) icon_factory = self.builder.get_object('sonata_iconfactory') Gtk.IconFactory.add_default(icon_factory) # Main window self.window = self.builder.get_object('main_window') self.fullscreen = FullscreenApp(self.config, self.get_fullscreen_info) if self.config.ontop: self.window.set_keep_above(True) if self.config.sticky: self.window.stick() if not self.config.decorated: self.window.set_decorated(False) self.preferences.window = self.window self.notebook = self.builder.get_object('main_notebook') self.album_image = self.builder.get_object('main_album_image') self.tray_album_image = self.builder.get_object('tray_album_image') # Artwork self.artwork = artwork.Artwork( self.config, misc.is_lang_rtl(self.window), self.schedule_gc_collect, self.imagelist_append, self.remotefilelist_append, self.set_allow_art_search, self.status_is_play_or_pause, self.album_image, self.tray_album_image) # Popup menus: actions = [ ('sortmenu', Gtk.STOCK_SORT_ASCENDING, _('_Sort List')), ('plmenu', Gtk.STOCK_SAVE, _('Sa_ve Selected to')), ('profilesmenu', Gtk.STOCK_CONNECT, _('_Connection')), ('playaftermenu', None, _('P_lay after')), ('playmodemenu', None, _('Play _Mode')), ('updatemenu', Gtk.STOCK_REFRESH, _('_Update')), ('chooseimage_menu', Gtk.STOCK_CONVERT, _('Use _Remote Image...'), None, None, self.image_remote), ('localimage_menu', Gtk.STOCK_OPEN, _('Use _Local Image...'), None, None, self.image_local), ('fullscreen_window_menu', Gtk.STOCK_FULLSCREEN, _('_Fullscreen Mode'), 'F11', None, self.on_fullscreen_change), ('resetimage_menu', Gtk.STOCK_CLEAR, _('Reset Image'), None, None, self.artwork.on_reset_image), ('playmenu', Gtk.STOCK_MEDIA_PLAY, _('_Play'), None, None, self.mpd_pp), ('pausemenu', Gtk.STOCK_MEDIA_PAUSE, _('Pa_use'), None, None, self.mpd_pp), ('stopmenu', Gtk.STOCK_MEDIA_STOP, _('_Stop'), None, None, self.mpd_stop), ('prevmenu', Gtk.STOCK_MEDIA_PREVIOUS, _('Pre_vious'), None, None, self.mpd_prev), ('nextmenu', Gtk.STOCK_MEDIA_NEXT, _('_Next'), None, None, self.mpd_next), ('quitmenu', Gtk.STOCK_QUIT, _('_Quit'), None, None, self.on_delete_event_yes), ('removemenu', Gtk.STOCK_REMOVE, _('_Remove'), None, None, self.on_remove), ('clearmenu', Gtk.STOCK_CLEAR, _('_Clear'), '<Ctrl>Delete', None, self.mpd_clear), ('updatefullmenu', None, _('_Entire Library'), '<Ctrl><Shift>u', None, self.on_updatedb), ('updateselectedmenu', None, _('_Selected Items'), '<Ctrl>u', None, self.on_updatedb_shortcut), ('preferencemenu', Gtk.STOCK_PREFERENCES, _('_Preferences...'), 'F5', None, self.on_prefs), ('aboutmenu', Gtk.STOCK_ABOUT, _('_About...'), 'F1', None, self.on_about), ('tagmenu', Gtk.STOCK_EDIT, _('_Edit Tags...'), '<Ctrl>t', None, self.on_tags_edit), ('addmenu', Gtk.STOCK_ADD, _('_Add'), '<Ctrl>d', None, self.on_add_item), ('replacemenu', Gtk.STOCK_REDO, _('_Replace'), '<Ctrl>r', None, self.on_replace_item), ('add2menu', None, _('Add'), '<Shift><Ctrl>d', None, self.on_add_item_play), ('replace2menu', None, _('Replace'), '<Shift><Ctrl>r', None, self.on_replace_item_play), ('rmmenu', None, _('_Delete...'), None, None, self.on_remove), ('sortshuffle', None, _('Shuffle'), '<Alt>r', None, self.mpd_shuffle), ('sortshufflealbums', None, _('Shuffle Albums'), None, None, self.mpd_shuffle_albums), ] keyactions = [ ('expandkey', None, 'Expand Key', '<Alt>Down', None, self.on_expand), ('collapsekey', None, 'Collapse Key', '<Alt>Up', None, self.on_collapse), ('ppkey', None, 'Play/Pause Key', '<Ctrl>p', None, self.mpd_pp), ('stopkey', None, 'Stop Key', '<Ctrl>s', None, self.mpd_stop), ('prevkey', None, 'Previous Key', '<Ctrl>Left', None, self.mpd_prev), ('nextkey', None, 'Next Key', '<Ctrl>Right', None, self.mpd_next), ('lowerkey', None, 'Lower Volume Key', '<Ctrl>minus', None, self.on_volume_lower), ('raisekey', None, 'Raise Volume Key', '<Ctrl>plus', None, self.on_volume_raise), ('raisekey2', None, 'Raise Volume Key 2', '<Ctrl>equal', None, self.on_volume_raise), ('quitkey', None, 'Quit Key', '<Ctrl>q', None, self.on_delete_event_yes), ('quitkey2', None, 'Quit Key 2', '<Ctrl>w', None, self.on_delete_event), ('connectkey', None, 'Connect Key', '<Alt>c', None, self.on_connectkey_pressed), ('disconnectkey', None, 'Disconnect Key', '<Alt>d', None, self.on_disconnectkey_pressed), ('searchkey', None, 'Search Key', '<Ctrl>h', None, self.on_library_search_shortcut), ('nexttabkey', None, 'Next Tab Key', '<Alt>Right', None, self.switch_to_next_tab), ('prevtabkey', None, 'Prev Tab Key', '<Alt>Left', None, self.switch_to_prev_tab), ] tabactions = [('tab%skey' % i, None, 'Tab%s Key' % i, '<Alt>%s' % i, None, lambda _a, i=i: self.switch_to_tab_num(i-1)) for i in range(1, 10)] toggle_actions = [ ('showmenu', None, _('S_how Sonata'), None, None, self.on_withdraw_app_toggle, not self.config.withdrawn), ('repeatplaylistmenu', None, _('_Repeat playlist'), None, None, self.on_repeat_playlist_clicked, False), ('repeatsongmenu', None, _('Repeat s_ong'), None, None, self.on_repeat_song_clicked, False), ('randommenu', None, _('Rando_m'), None, None, self.on_random_clicked, False), ('consumemenu', None, _('Consume'), None, None, self.on_consume_clicked, False), ] toggle_tabactions = [ (self.tabname2id[self.TAB_CURRENT], None, self.TAB_CURRENT, None, None, self.on_tab_toggle, self.config.current_tab_visible), (self.tabname2id[self.TAB_LIBRARY], None, self.TAB_LIBRARY, None, None, self.on_tab_toggle, self.config.library_tab_visible), (self.tabname2id[self.TAB_PLAYLISTS], None, self.TAB_PLAYLISTS, None, None, self.on_tab_toggle, self.config.playlists_tab_visible), (self.tabname2id[self.TAB_STREAMS], None, self.TAB_STREAMS, None, None, self.on_tab_toggle, self.config.streams_tab_visible), (self.tabname2id[self.TAB_INFO], None, self.TAB_INFO, None, None, self.on_tab_toggle, self.config.info_tab_visible), ] uiDescription = """ <ui> <popup name="imagemenu"> <menuitem action="chooseimage_menu"/> <menuitem action="localimage_menu"/> <menuitem action="fullscreen_window_menu"/> <separator name="FM1"/> <menuitem action="resetimage_menu"/> </popup> <popup name="traymenu"> <menuitem action="showmenu"/> <separator name="FM1"/> <menuitem action="playmenu"/> <menuitem action="pausemenu"/> <menuitem action="stopmenu"/> <menuitem action="prevmenu"/> <menuitem action="nextmenu"/> <separator name="FM2"/> <menu action="playmodemenu"> <menuitem action="repeatplaylistmenu"/> <menuitem action="repeatsongmenu"/> <menuitem action="randommenu"/> <menuitem action="consumemenu"/> </menu> <menuitem action="fullscreen_window_menu"/> <menuitem action="preferencemenu"/> <separator name="FM3"/> <menuitem action="quitmenu"/> </popup> <popup name="mainmenu"> <menuitem action="addmenu"/> <menuitem action="replacemenu"/> <menu action="playaftermenu"> <menuitem action="add2menu"/> <menuitem action="replace2menu"/> </menu> <menuitem action="newmenu"/> <menuitem action="editmenu"/> <menuitem action="removemenu"/> <menuitem action="clearmenu"/> <menuitem action="tagmenu"/> <menuitem action="renamemenu"/> <menuitem action="rmmenu"/> <menu action="sortmenu"> <menuitem action="sortbytitle"/> <menuitem action="sortbyartist"/> <menuitem action="sortbyalbum"/> <menuitem action="sortbyfile"/> <menuitem action="sortbydirfile"/> <separator name="FM3"/> <menuitem action="sortshuffle"/> <menuitem action="sortshufflealbums"/> <menuitem action="sortreverse"/> </menu> <menu action="plmenu"> <menuitem action="savemenu"/> <separator name="FM4"/> </menu> <separator name="FM1"/> <menuitem action="repeatplaylistmenu"/> <menuitem action="repeatsongmenu"/> <menuitem action="randommenu"/> <menuitem action="consumemenu"/> <menu action="updatemenu"> <menuitem action="updateselectedmenu"/> <menuitem action="updatefullmenu"/> </menu> <separator name="FM2"/> <menu action="profilesmenu"> </menu> <menuitem action="preferencemenu"/> <menuitem action="aboutmenu"/> <menuitem action="quitmenu"/> </popup> <popup name="librarymenu"> <menuitem action="filesystemview"/> <menuitem action="artistview"/> <menuitem action="genreview"/> <menuitem action="albumview"/> </popup> <popup name="hidden"> <menuitem action="centerplaylistkey"/> </popup> """ uiDescription += '<popup name="notebookmenu">' uiDescription += ''.join('<menuitem action="%s"/>' % name for name in self.all_tab_ids)#FIXME uiDescription += "</popup>" uiDescription += ''.join('<accelerator action="%s"/>' % a[0] for a in keyactions + tabactions) uiDescription += "</ui>\n" # Try to connect to MPD: self.mpd_connect() if self.conn: self.status = self.mpd.status() self.iterate_time = self.iterate_time_when_connected self.songinfo = self.mpd.currentsong() self.artwork.update_songinfo(self.songinfo) elif self.config.initial_run: show_prefs = True # Realizing self.window will allow us to retrieve the theme's # link-color; we can then apply to it various widgets: try: self.window.realize() linkcolor = \ self.window.style_get_property("link-color").to_string() except: linkcolor = None # Audioscrobbler self.scrobbler = scrobbler.Scrobbler(self.config) self.scrobbler.import_module() self.scrobbler.init() self.preferences.scrobbler = self.scrobbler # Current tab self.current = current.Current( self.config, self.mpd, self.TAB_CURRENT, self.on_current_button_press, self.connected, lambda: self.sonata_loaded, lambda: self.songinfo, self.update_statusbar, self.iterate_now, self.add_tab) self.current_treeview = self.current.get_treeview() self.current_selection = self.current.get_selection() currentactions = [ ('centerplaylistkey', None, 'Center Playlist Key', '<Ctrl>i', None, lambda event: self.current.center_song_in_list(True)), ('sortbyartist', None, _('By Artist'), None, None, self.current.on_sort_by_artist), ('sortbyalbum', None, _('By Album'), None, None, self.current.on_sort_by_album), ('sortbytitle', None, _('By Song Title'), None, None, self.current.on_sort_by_title), ('sortbyfile', None, _('By File Name'), None, None, self.current.on_sort_by_file), ('sortbydirfile', None, _('By Dir & File Name'), None, None, self.current.on_sort_by_dirfile), ('sortreverse', None, _('Reverse List'), None, None, self.current.on_sort_reverse), ] # Library tab self.library = library.Library( self.config, self.mpd, self.artwork, self.TAB_LIBRARY, self.settings_save, self.current.filter_key_pressed, self.on_add_item, self.connected, self.on_library_button_press, self.add_tab) self.library_treeview = self.library.get_treeview() self.library_selection = self.library.get_selection() libraryactions = self.library.get_libraryactions() # Info tab self.info = info.Info(self.config, linkcolor, self.on_link_click, self.get_playing_song, self.TAB_INFO, self.on_image_activate, self.on_image_motion_cb, self.on_image_drop_cb, self.album_return_artist_and_tracks, self.add_tab) self.artwork.connect('artwork-changed', self.info.on_artwork_changed) self.artwork.connect('artwork-reset', self.info.on_artwork_reset) self.info_imagebox = self.info.get_info_imagebox() # Streams tab self.streams = streams.Streams(self.config, self.window, self.on_streams_button_press, self.on_add_item, self.settings_save, self.TAB_STREAMS, self.add_tab) self.streams_treeview = self.streams.get_treeview() self.streams_selection = self.streams.get_selection() streamsactions = [ ('newmenu', None, _('_New...'), '<Ctrl>n', None, self.streams.on_streams_new), ('editmenu', None, _('_Edit...'), None, None, self.streams.on_streams_edit), ] # Playlists tab self.playlists = playlists.Playlists(self.config, self.window, self.mpd, lambda: self.UIManager, self.update_menu_visibility, self.iterate_now, self.on_add_item, self.on_playlists_button_press, self.connected, self.add_selected_to_playlist, self.TAB_PLAYLISTS, self.add_tab) self.playlists_treeview = self.playlists.get_treeview() self.playlists_selection = self.playlists.get_selection() playlistsactions = [ ('savemenu', None, _('_New Playlist...'), '<Ctrl><Shift>s', None, self.playlists.on_playlist_save), ('renamemenu', None, _('_Rename...'), None, None, self.playlists.on_playlist_rename), ] # Main app: self.UIManager = Gtk.UIManager() accel_group = self.UIManager.get_accel_group() self.fullscreen.add_accel_group(accel_group) actionGroup = Gtk.ActionGroup('Actions') actionGroup.add_actions(actions) actionGroup.add_actions(keyactions) actionGroup.add_actions(tabactions) actionGroup.add_actions(currentactions) actionGroup.add_actions(libraryactions) actionGroup.add_actions(streamsactions) actionGroup.add_actions(playlistsactions) actionGroup.add_toggle_actions(toggle_actions) actionGroup.add_toggle_actions(toggle_tabactions) self.UIManager.insert_action_group(actionGroup, 0) self.UIManager.add_ui_from_string(uiDescription) self.populate_profiles_for_menu() self.window.add_accel_group(self.UIManager.get_accel_group()) self.mainmenu = self.UIManager.get_widget('/mainmenu') self.randommenu = self.UIManager.get_widget('/mainmenu/randommenu') self.consumemenu = self.UIManager.get_widget('/mainmenu/consumemenu') self.repeatplaylistmenu = self.UIManager.get_widget('/mainmenu/repeatplaylistmenu') self.repeatsongmenu = self.UIManager.get_widget('/mainmenu/repeatsongmenu') self.imagemenu = self.UIManager.get_widget('/imagemenu') self.traymenu = self.UIManager.get_widget('/traymenu') self.librarymenu = self.UIManager.get_widget('/librarymenu') self.library.set_librarymenu(self.librarymenu) self.notebookmenu = self.UIManager.get_widget('/notebookmenu') # Autostart plugins for plugin in pluginsystem.get_info(): if plugin.name in self.config.autostart_plugins: pluginsystem.set_enabled(plugin, True) # New plugins for plugin in pluginsystem.get_info(): if plugin.name not in self.config.known_plugins: self.config.known_plugins.append(plugin.name) if plugin.name in consts.DEFAULT_PLUGINS: self.logger.info( _("Enabling new plug-in %s..." % plugin.name)) pluginsystem.set_enabled(plugin, True) else: self.logger.info(_("Found new plug-in %s." % plugin.name)) self.tray_icon = tray.TrayIcon(self.window, self.traymenu, self.traytips) self.imageeventbox = self.builder.get_object('image_event_box') self.imageeventbox.drag_dest_set(Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [Gtk.TargetEntry.new("text/uri-list", 0, 80), Gtk.TargetEntry.new("text/plain", 0, 80)], Gdk.DragAction.DEFAULT) if not self.config.show_covers: self.imageeventbox.hide() self.prevbutton = self.builder.get_object('prev_button') self.ppbutton = self.builder.get_object('playpause_button') self.ppbutton_image = self.builder.get_object('playpause_button_image') self.stopbutton = self.builder.get_object('stop_button') self.nextbutton = self.builder.get_object('next_button') for mediabutton in (self.prevbutton, self.ppbutton, self.stopbutton, self.nextbutton): if not self.config.show_playback: ui.hide(mediabutton) self.progressbox = self.builder.get_object('progress_box') self.progressbar = self.builder.get_object('progress_bar') self.progresseventbox = self.builder.get_object('progress_event_box') if not self.config.show_progress: ui.hide(self.progressbox) self.volumebutton = self.builder.get_object('volume_button') if not self.config.show_playback: ui.hide(self.volumebutton) self.expander = self.builder.get_object('expander') self.expander.set_expanded(self.config.expanded) self.cursonglabel1 = self.builder.get_object('current_label_1') self.cursonglabel2 = self.builder.get_object('current_label_2') expanderbox = self.builder.get_object('expander_label_widget') self.expander.set_label_widget(expanderbox) self.statusbar = self.builder.get_object('main_statusbar') if not self.config.show_statusbar or not self.config.expanded: ui.hide(self.statusbar) self.window.move(self.config.x, self.config.y) self.window.set_size_request(270, -1) songlabel1 = '<big>{}</big>'.format(_('Stopped')) self.cursonglabel1.set_markup(songlabel1) if not self.config.expanded: ui.hide(self.notebook) songlabel2 = _('Click to expand') self.window.set_default_size(self.config.w, 1) else: songlabel2 = _('Click to collapse') self.window.set_default_size(self.config.w, self.config.h) songlabel2 = '<small>{}</small>'.format(songlabel2) self.cursonglabel2.set_markup(songlabel2) self.expander.set_tooltip_text(self.cursonglabel1.get_text()) if not self.conn: self.progressbar.set_text(_('Not Connected')) elif not self.status: self.progressbar.set_text(_('No Read Permission')) # Update tab positions: self.notebook.reorder_child(self.current.get_widgets(), self.config.current_tab_pos) self.notebook.reorder_child(self.library.get_widgets(), self.config.library_tab_pos) self.notebook.reorder_child(self.playlists.get_widgets(), self.config.playlists_tab_pos) self.notebook.reorder_child(self.streams.get_widgets(), self.config.streams_tab_pos) self.notebook.reorder_child(self.info.get_widgets(), self.config.info_tab_pos) self.last_tab = self.notebook_get_tab_text(self.notebook, 0) # Song notification window: self.tray_v_box = self.builder.get_object('tray_v_box') if not self.config.show_covers: self.tray_album_image.hide() self.tray_current_label1 = self.builder.get_object('tray_label_1') self.tray_current_label2 = self.builder.get_object('tray_label_2') self.tray_progressbar = self.builder.get_object('tray_progressbar') if not self.config.show_progress: ui.hide(self.tray_progressbar) self.tray_v_box.show_all() self.traytips.add_widget(self.tray_v_box) self.tooltip_set_window_width() # Connect to signals self.window.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.traytips.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.traytips.connect('button_press_event', self.on_traytips_press) self.window.connect('delete_event', self.on_delete_event) self.window.connect('configure_event', self.on_window_configure) self.window.connect('key-press-event', self.on_topwindow_keypress) self.imageeventbox.connect('button_press_event', self.on_image_activate) self.imageeventbox.connect('drag_motion', self.on_image_motion_cb) self.imageeventbox.connect('drag_data_received', self.on_image_drop_cb) self.ppbutton.connect('clicked', self.mpd_pp) self.stopbutton.connect('clicked', self.mpd_stop) self.prevbutton.connect('clicked', self.mpd_prev) self.nextbutton.connect('clicked', self.mpd_next) self.progresseventbox.connect('button_press_event', self.on_progressbar_press) self.progresseventbox.connect('scroll_event', self.on_progressbar_scroll) self.volumebutton.connect('value-changed', self.on_volume_change) self.expander.connect('activate', self.on_expander_activate) self.randommenu.connect('toggled', self.on_random_clicked) self.repeatplaylistmenu.connect('toggled', self.on_repeat_playlist_clicked) self.repeatsongmenu.connect('toggled', self.on_repeat_song_clicked) self.cursonglabel1.connect('notify::label', self.on_currsong_notify) self.cursonglabel1.connect('notify::label', self.fullscreen.on_text_changed) self.progressbar.connect('notify::fraction', self.on_progressbar_notify_fraction) self.progressbar.connect('notify::text', self.on_progressbar_notify_text) self.mainwinhandler = self.window.connect('button_press_event', self.on_window_click) self.notebook.connect('size-allocate', self.on_notebook_resize) self.notebook.connect('switch-page', self.on_notebook_page_change) for treeview in [self.current_treeview, self.library_treeview, self.playlists_treeview, self.streams_treeview]: treeview.connect('popup_menu', self.on_menu_popup) for treeviewsel in [self.current_selection, self.library_selection, self.playlists_selection, self.streams_selection]: treeviewsel.connect('changed', self.on_treeview_selection_changed) for widget in [self.ppbutton, self.prevbutton, self.stopbutton, self.nextbutton, self.progresseventbox, self.expander]: widget.connect('button_press_event', self.menu_popup) self.artwork.connect('artwork-changed', self.fullscreen.on_artwork_changed) self.artwork.connect('artwork-reset', self.fullscreen.reset) self.systemtray_initialize() # This will ensure that "Not connected" is shown in the systray tooltip if not self.conn: self.update_cursong() # Ensure that the systemtray icon is added here. This is really only # important if we're starting in hidden (minimized-to-tray) mode: if self.config.withdrawn: while Gtk.events_pending(): Gtk.main_iteration() dbus.init_gnome_mediakeys(self.mpd_pp, self.mpd_stop, self.mpd_prev, self.mpd_next) # XXX find new multimedia key library here, in case we don't have gnome! #if not dbus.using_gnome_mediakeys(): # pass # Initialize playlist data and widget self.playlistsdata = self.playlists.get_model() # Initialize streams data and widget self.streamsdata = self.streams.get_model() # Initialize library data and widget self.librarydata = self.library.get_model() self.artwork.library_artwork_init(self.librarydata, consts.LIB_COVER_SIZE) icon = self.window.render_icon('sonata', Gtk.IconSize.DIALOG) self.window.set_icon(icon) self.streams.populate() self.iterate_now() if self.config.withdrawn and self.tray_icon.is_visible(): ui.hide(self.window) self.window.show_all() # Ensure that button images are displayed despite GTK+ theme self.window.get_settings().set_property("gtk-button-images", True) if self.config.update_on_start: self.on_updatedb(None) self.notebook.set_no_show_all(False) self.window.set_no_show_all(False) if show_prefs: self.on_prefs(None) self.config.initial_run = False # Ensure that sonata is loaded before we display the notif window self.sonata_loaded = True self.current.center_song_in_list(True) gc.disable() GLib.idle_add(self.header_save_column_widths) pluginsystem.notify_of('tab_construct', self.on_enable_tab, self.on_disable_tab) ### Tab system: def on_enable_tab(self, _plugin, tab): tab_parts = tab() name = tab_parts[2] self.plugintabs[name] = self.add_tab(*tab_parts) def on_disable_tab(self, _plugin, tab): name = tab()[2] tab = self.plugintabs.pop(name) self.notebook.remove(tab) def add_tab(self, page, label_widget, text, focus): label_widget.show_all() label_widget.connect("button_press_event", self.on_tab_click) self.notebook.append_page(page, label_widget) if (text in self.tabname2id and not getattr(self.config, self.tabname2id[text] + '_tab_visible')): ui.hide(page) self.notebook.set_tab_reorderable(page, True) if self.config.tabs_expanded: self.notebook.set_tab_label_packing(page, True, True, Gtk.PACK_START) self.tabname2tab[text] = page self.tabname2focus[text] = focus return page def connected(self): ### "Model, logic": return self.conn def status_is_play_or_pause(self): return (self.conn and self.status and self.status.get('state', None) in ['play', 'pause']) def get_playing_song(self): if self.status_is_play_or_pause() and self.songinfo: return self.songinfo return None def playing_song_change(self): self.artwork.artwork_update() for _plugin, cb in pluginsystem.get('playing_song_observers'): cb(self.get_playing_song()) def get_fullscreen_info(self): return (self.status_is_play_or_pause(), self.cursonglabel1.get_text(), self.cursonglabel2.get_text()) def set_allow_art_search(self): self.allow_art_search = True def populate_profiles_for_menu(self): host, port, _password = misc.mpd_env_vars() if self.merge_id: self.UIManager.remove_ui(self.merge_id) if self.actionGroupProfiles: self.UIManager.remove_action_group(self.actionGroupProfiles) self.actionGroupProfiles = Gtk.ActionGroup('MPDProfiles') self.UIManager.ensure_update() profile_names = [_("MPD_HOST/PORT")] if host \ or port else self.config.profile_names actions = [ (str(i), None, "[%d] %s" % (i + 1, ui.quote_label(name)), None, None, i) for i, name in enumerate(profile_names)] actions.append(( 'disconnect', Gtk.STOCK_DISCONNECT, _('Disconnect'), None, None, len(self.config.profile_names))) active_radio = 0 if host or port else self.config.profile_num if not self.conn: active_radio = len(self.config.profile_names) self.actionGroupProfiles.add_radio_actions(actions, active_radio, self.on_profiles_click) uiDescription = """ <ui> <popup name="mainmenu"> <menu action="profilesmenu"> """ uiDescription += "".join( '<menuitem action=\"%s\" position="top"/>' % action[0] for action in reversed(actions)) uiDescription += """</menu></popup></ui>""" self.merge_id = self.UIManager.add_ui_from_string(uiDescription) self.UIManager.insert_action_group(self.actionGroupProfiles, 0) self.UIManager.get_widget('/hidden').set_property('visible', False) def on_profiles_click(self, _radioaction, profile): if self.skip_on_profiles_click: return if profile.get_name() == 'disconnect': self.on_disconnectkey_pressed(None) else: # Clear sonata before we try to connect: self.mpd_disconnect() self.iterate_now() # Now connect to new profile: self.config.profile_num = profile.get_current_value() self.on_connectkey_pressed(None) def mpd_connect(self, force=False): if self.trying_connection: return self.trying_connection = True if self.user_connect or force: host, port, password = misc.mpd_env_vars() if not host: host = self.config.host[self.config.profile_num] if not port: port = self.config.port[self.config.profile_num] if not password: password = self.config.password[self.config.profile_num] self.mpd.connect(host, port) if len(password) > 0: self.mpd.password(password) test = self.mpd.status() if test: self.conn = True else: self.conn = False else: self.conn = False if not self.conn: self.status = None self.songinfo = None if self.artwork is not None: self.artwork.update_songinfo(self.songinfo) self.iterate_time = self.iterate_time_when_disconnected_or_stopped self.trying_connection = False def mpd_disconnect(self): if self.conn: self.mpd.close() self.mpd.disconnect() self.conn = False def on_connectkey_pressed(self, _event=None): self.user_connect = True # Update selected radio button in menu: self.skip_on_profiles_click = True host, port, _password = misc.mpd_env_vars() index = str(0 if host or port else self.config.profile_num) self.actionGroupProfiles.get_action(index).activate() self.skip_on_profiles_click = False # Connect: self.mpd_connect(force=True) self.iterate_now() def on_disconnectkey_pressed(self, _event): self.user_connect = False # Update selected radio button in menu: self.skip_on_profiles_click = True self.actionGroupProfiles.get_action('disconnect').activate() self.skip_on_profiles_click = False # Disconnect: self.mpd_disconnect() def update_status(self): try: if not self.conn: self.mpd_connect() if self.conn: self.iterate_time = self.iterate_time_when_connected self.status = self.mpd.status() if self.status: if self.status['state'] == 'stop': self.iterate_time = \ self.iterate_time_when_disconnected_or_stopped self.songinfo = self.mpd.currentsong() self.artwork.update_songinfo(self.songinfo) repeat_song = self.status['repeat'] == '1' \ and self.status['single'] == '1' repeat_playlist = self.status['repeat'] == '1' \ and self.status['single'] == '0' if not self.last_song_repeat \ or self.last_song_repeat != repeat_song: self.repeatsongmenu.set_active(repeat_song) if not self.last_playlist_repeat \ or self.last_playlist_repeat != repeat_playlist: self.repeatplaylistmenu.set_active(repeat_playlist) if not self.last_random \ or self.last_random != self.status['random']: self.randommenu.set_active( self.status['random'] == '1') if not self.last_consume or self.last_consume != self.status['consume']: self.consumemenu.set_active(self.status['consume'] == '1') self.config.xfade_enabled = False if 'xfade' in self.status: xfade = int(self.status['xfade']) if xfade != 0: self.config.xfade_enabled = True self.config.xfade = xfade if self.config.xfade > 30: self.config.xfade = 30 self.last_song_repeat = repeat_song self.last_playlist_repeat = repeat_playlist self.last_random = self.status['random'] self.last_consume = self.status['consume'] return except: self.logger.exception("Unhandled error while updating status:") self.prevstatus = self.status self.prevsonginfo = self.songinfo self.conn = False self.status = None self.songinfo = None self.artwork.update_songinfo(self.songinfo) def iterate(self): self.update_status() self.info_update(False) # XXX: this is subject to race condition, since self.conn can be # changed in another thread: # 1. self.conn == self.prevconn (stable state) # 2. This if is tested and self.handle_change_conn is not called # 3. The connection thread updates self.conn # 4. self.prevconn = self.conn and we never get into the connected # state (or maybe throught another way, but well). if self.conn != self.prevconn: self.handle_change_conn() if self.status != self.prevstatus: self.handle_change_status() if self.songinfo != self.prevsonginfo: self.handle_change_song() self.prevconn = self.conn self.prevstatus = self.status self.prevsonginfo = self.songinfo # Repeat ad infitum.. self.iterate_handler = GLib.timeout_add(self.iterate_time, self.iterate) if self.config.show_trayicon: if self.tray_icon.is_available() and \ not self.tray_icon.is_visible(): # Systemtray appears, add icon self.systemtray_initialize() elif not self.tray_icon.is_available() and self.config.withdrawn: # Systemtray gone, unwithdraw app self.withdraw_app_undo() if self.call_gc_collect: gc.collect() self.call_gc_collect = False def schedule_gc_collect(self): self.call_gc_collect = True def iterate_stop(self): try: GLib.source_remove(self.iterate_handler) except: pass def iterate_now(self): # Since self.iterate_time_when_connected has been # slowed down to 500ms, we'll call self.iterate_now() # whenever the user performs an action that requires # updating the client self.iterate_stop() self.iterate() def on_topwindow_keypress(self, _widget, event): shortcut = Gtk.accelerator_name(event.keyval, event.get_state()) shortcut = shortcut.replace("<Mod2>", "") # These shortcuts were moved here so that they don't interfere with # searching the library if shortcut == 'BackSpace' and self.current_tab == self.TAB_LIBRARY: return self.library.library_browse_parent(None) elif shortcut == 'Escape': if self.current_tab == self.TAB_LIBRARY \ and self.library.search_visible(): self.library.on_search_end(None) elif self.current_tab == self.TAB_CURRENT \ and self.current.filterbox_visible: self.current.searchfilter_toggle(None) elif self.config.minimize_to_systray and \ self.tray_icon.is_visible(): self.withdraw_app() return elif shortcut == 'Delete': return self.on_remove(None) if self.current_tab == self.TAB_CURRENT: if event.get_state() & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK): return # XXX this isn't the right thing with GTK input methods: text = chr(Gdk.keyval_to_unicode(event.keyval)) # Filter out those keys and don't toggle the filter bar if they are # pressed. filter_out = set([ '\x00', # F5, Alt, etc. '\x08', # Backspace '\x7f', # Delete ]) if text not in filter_out and text.strip(): if not self.current.filterbox_visible: if text != "/": self.current.searchfilter_toggle(None, text) else: self.current.searchfilter_toggle(None) def settings_load(self): self.config.settings_load_real() def settings_save(self): self.header_save_column_widths() self.config.current_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_CURRENT) self.config.library_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_LIBRARY) self.config.playlists_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_PLAYLISTS) self.config.streams_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_STREAMS) self.config.info_tab_pos = self.notebook_get_tab_num(self.notebook, self.TAB_INFO) autostart_plugins = [] for plugin in pluginsystem.plugin_infos: if plugin._enabled: autostart_plugins.append(plugin.name) self.config.autostart_plugins = autostart_plugins self.config.settings_save_real() def handle_change_conn(self): if not self.conn: for mediabutton in (self.ppbutton, self.stopbutton, self.prevbutton, self.nextbutton, self.volumebutton): mediabutton.set_property('sensitive', False) self.current.clear() self.tray_icon.update_icon('sonata-disconnect') self.info_update(True) if self.current.filterbox_visible: GLib.idle_add(self.current.searchfilter_toggle, None) if self.library.search_visible(): self.library.on_search_end(None) self.handle_change_song() self.handle_change_status() else: for mediabutton in (self.ppbutton, self.stopbutton, self.prevbutton, self.nextbutton, self.volumebutton): mediabutton.set_property('sensitive', True) if self.sonata_loaded: self.library.library_browse(root=SongRecord(path="/")) self.playlists.populate() self.streams.populate() self.on_notebook_page_change(self.notebook, 0, self.notebook.get_current_page()) def info_update(self, update_all): playing_or_paused = self.status_is_play_or_pause() newbitrate = None if self.status: newbitrate = self.status.get('bitrate', '') if newbitrate: newbitrate += " kbps" self.info.update(playing_or_paused, newbitrate, self.songinfo, update_all) def on_treeview_selection_changed(self, treeselection): self.update_menu_visibility() if treeselection == self.current.get_selection(): # User previously clicked inside group of selected rows, re-select # rows so it doesn't look like anything changed: if self.current.sel_rows: for row in self.current.sel_rows: treeselection.select_path(row) def on_library_button_press(self, widget, event): if self.on_button_press(widget, event, False): return True def on_current_button_press(self, widget, event): if self.on_button_press(widget, event, True): return True def on_playlists_button_press(self, widget, event): if self.on_button_press(widget, event, False): return True def on_streams_button_press(self, widget, event): if self.on_button_press(widget, event, False): return True def on_button_press(self, widget, event, widget_is_current): ctrl_press = (event.get_state() & Gdk.ModifierType.CONTROL_MASK) self.current.sel_rows = None if event.button == 1 and widget_is_current and not ctrl_press: # If the user clicked inside a group of rows that were already # selected, we need to retain the selected rows in case the user # wants to DND the group of rows. If they release the mouse without # first moving it, then we revert to the single selected row. # This is similar to the behavior found in thunar. try: path, _col, _x, _y = widget.get_path_at_pos(int(event.x), int(event.y)) if widget.get_selection().path_is_selected(path): self.current.sel_rows = \ widget.get_selection().get_selected_rows()[1] except: pass elif event.button == 3: self.update_menu_visibility() # Calling the popup in idle_add is important. It allows the menu # items to have been shown/hidden before the menu is popped up. # Otherwise, if the menu pops up too quickly, it can result in # automatically clicking menu items for the user! GLib.idle_add(self.mainmenu.popup, None, None, None, None, event.button, event.time) # Don't change the selection for a right-click. This # will allow the user to select multiple rows and then # right-click (instead of right-clicking and having # the current selection change to the current row) if widget.get_selection().count_selected_rows() > 1: return True def on_add_item_play(self, widget): self.on_add_item(widget, True) def on_add_item(self, _widget, play_after=False): if self.conn: if play_after and self.status: playid = self.status['playlistlength'] if self.current_tab == self.TAB_LIBRARY: items = self.library.get_path_child_filenames(True) self.mpd.command_list_ok_begin() for item in items: self.mpd.add(item) self.mpd.command_list_end() elif self.current_tab == self.TAB_PLAYLISTS: model, selected = self.playlists_selection.get_selected_rows() for path in selected: self.mpd.load( misc.unescape_html( model.get_value(model.get_iter(path), 1))) elif self.current_tab == self.TAB_STREAMS: model, selected = self.streams_selection.get_selected_rows() for path in selected: item = model.get_value(model.get_iter(path), 2) self.stream_parse_and_add(item) self.iterate_now() if play_after: if self.status['random'] == '1': # If we are in random mode, we want to play a random song # instead: self.mpd.play() else: self.mpd.play(int(playid)) def add_selected_to_playlist(self, plname): if self.current_tab == self.TAB_LIBRARY: songs = self.library.get_path_child_filenames(True) elif self.current_tab == self.TAB_CURRENT: songs = self.current.get_selected_filenames(0) else: raise Exception("This tab doesn't support playlists") self.mpd.command_list_ok_begin() for song in songs: self.mpd.playlistadd(plname, song) self.mpd.command_list_end() def stream_parse_and_add(self, uri): # Try different URI, in case we don't have a good one. # XXX: we should build new URI only if it makes sense. If .open() fails # because a URI starting with "file://" doesn't exist anymore, it # doesn't really matter to add file:// in front of it to try again. for try_uri in [uri, "http://" + uri, "file://" + uri]: while Gtk.events_pending(): Gtk.main_iteration() try: request = urllib.request.Request(uri) opener = urllib.request.build_opener() fp = opener.open(request) except: # We fail, maybe we'll just add the URI to MPD as it. items = [uri] continue # URI openable! items = streams.parse_stream(try_uri, fp) break for item in items: self.mpd.add(item) def on_replace_item_play(self, widget): self.on_replace_item(widget, True) def on_replace_item(self, widget, play_after=False): if self.status and self.status['state'] == 'play': play_after = True # Only clear if an item is selected: if self.current_tab == self.TAB_LIBRARY: num_selected = self.library_selection.count_selected_rows() elif self.current_tab == self.TAB_PLAYLISTS: num_selected = self.playlists_selection.count_selected_rows() elif self.current_tab == self.TAB_STREAMS: num_selected = self.streams_selection.count_selected_rows() else: return if num_selected == 0: return self.mpd_clear(None) self.on_add_item(widget, play_after) self.iterate_now() def handle_change_status(self): # Called when one of the following items are changed: # 1. Current playlist (song added, removed, etc) # 2. Repeat/random/xfade/volume # 3. Currently selected song in playlist # 4. Status (playing/paused/stopped) if self.status is None: # clean up and bail out self.update_progressbar() self.update_cursong() self.update_wintitle() self.playing_song_change() self.update_statusbar() if not self.conn: self.librarydata.clear() self.playlistsdata.clear() self.streamsdata.clear() return # Display current playlist if self.prevstatus is None \ or self.prevstatus['playlist'] != self.status['playlist']: prevstatus_playlist = None if self.prevstatus: prevstatus_playlist = self.prevstatus['playlist'] self.current.current_update(prevstatus_playlist, self.status['playlistlength']) # Update progress frequently if we're playing if self.status_is_play_or_pause(): self.update_progressbar() # If elapsed time is shown in the window title, we need to update # more often: if "%E" in self.config.titleformat: self.update_wintitle() # If state changes if self.prevstatus is None \ or self.prevstatus['state'] != self.status['state']: self.album_get_artist() # Update progressbar if the state changes too self.update_progressbar() self.update_cursong() self.update_wintitle() self.info_update(True) if self.status['state'] == 'stop': self.ppbutton_image.set_from_stock(Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.BUTTON) self.UIManager.get_widget('/traymenu/playmenu').show() self.UIManager.get_widget('/traymenu/pausemenu').hide() icon = 'sonata' elif self.status['state'] == 'pause': self.ppbutton_image.set_from_stock(Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.BUTTON) self.UIManager.get_widget('/traymenu/playmenu').show() self.UIManager.get_widget('/traymenu/pausemenu').hide() icon = 'sonata-pause' elif self.status['state'] == 'play': self.ppbutton_image.set_from_stock(Gtk.STOCK_MEDIA_PAUSE, Gtk.IconSize.BUTTON) self.UIManager.get_widget('/traymenu/playmenu').hide() self.UIManager.get_widget('/traymenu/pausemenu').show() if self.prevstatus != None: if self.prevstatus['state'] == 'pause': # Forces the notification to popup if specified self.on_currsong_notify() icon = 'sonata-play' else: icon = 'sonata-disconnect' self.tray_icon.update_icon(icon) self.playing_song_change() if self.status_is_play_or_pause(): self.current.center_song_in_list() if self.prevstatus is None \ or self.status.get('volume') != self.prevstatus.get('volume'): self.volumebutton.set_value(int(self.status.get('volume', 0))) if self.conn: if mpdh.mpd_is_updating(self.status): # MPD library is being updated self.update_statusbar(True) elif self.prevstatus is None \ or mpdh.mpd_is_updating(self.prevstatus) \ != mpdh.mpd_is_updating(self.status): if not mpdh.mpd_is_updating(self.status): # Done updating, refresh interface self.mpd_updated_db() elif self.mpd_update_queued: # If the update happens too quickly, we won't catch it in # our polling. So let's force an update of the interface: self.mpd_updated_db() self.mpd_update_queued = False if self.config.as_enabled: if self.prevstatus: prevstate = self.prevstatus['state'] else: prevstate = 'stop' if self.status: state = self.status['state'] else: state = 'stop' if state in ('play', 'pause'): mpd_time_now = self.status['time'] self.scrobbler.handle_change_status(state, prevstate, self.prevsonginfo, self.songinfo, mpd_time_now) elif state == 'stop': self.scrobbler.handle_change_status(state, prevstate, self.prevsonginfo) def mpd_updated_db(self): self.library.view_caches_reset() self.update_statusbar(False) # We need to make sure that we update the artist in case tags # have changed: self.album_reset_artist() self.album_get_artist() # Now update the library and playlist tabs if self.library.search_visible(): self.library.on_library_search_combo_change() else: self.library.library_browse(root=self.config.wd) self.playlists.populate() # Update info if it's visible: self.info_update(True) return False def album_get_artist(self): if self.songinfo and 'album' in self.songinfo: self.album_return_artist_name() elif self.songinfo and 'artist' in self.songinfo: self.album_current_artist = [self.songinfo, self.songinfo.artist] else: self.album_current_artist = [self.songinfo, ""] def handle_change_song(self): # Called when one of the following items are changed for the current # mpd song in the playlist: # 1. Song tags or filename (e.g. if tags are edited) # 2. Position in playlist (e.g. if playlist is sorted) # Note that the song does not have to be playing; it can reflect the # next song that will be played. self.current.on_song_change(self.status) self.album_get_artist() self.update_cursong() self.update_wintitle() self.playing_song_change() self.info_update(True) def update_progressbar(self): if self.status_is_play_or_pause(): at, length = [float(c) for c in self.status['time'].split(':')] try: newfrac = at / length except: newfrac = 0 else: newfrac = 0 if not self.last_progress_frac or self.last_progress_frac != newfrac: if newfrac >= 0 and newfrac <= 1: self.progressbar.set_fraction(newfrac) if self.conn: if self.status_is_play_or_pause(): at, length = [int(c) for c in self.status['time'].split(':')] at_time = misc.convert_time(at) try: time = misc.convert_time(self.songinfo.time) newtime = at_time + " / " + time except: newtime = at_time elif self.status: newtime = ' ' else: newtime = _('No Read Permission') else: newtime = _('Not Connected') if not self.last_progress_text or self.last_progress_text != newtime: self.progressbar.set_text(newtime) def update_statusbar(self, updatingdb=False): if self.config.show_statusbar: if self.conn and self.status: days = None # FIXME _ is for localization, temporarily __ hours, mins, __ = misc.convert_time_raw(self.current.total_time) # Show text: songs_count = int(self.status['playlistlength']) songs_text = ngettext('{count} song', '{count} songs', songs_count).format(count=songs_count) time_parts = [] if hours >= 24: days = int(hours / 24) hours = hours - (days * 24) if days: days_text = ngettext('{count} day', '{count} days', days).format(count=days) time_parts.append(days_text) if hours: hours_text = ngettext('{count} hour', '{count} hours', hours).format(count=hours) time_parts.append(hours_text) if mins: mins_text = ngettext('{count} minute', '{count} minutes', mins).format(count=mins) time_parts.append(mins_text) time_text = ', '.join([part for part in time_parts if part]) if int(self.status['playlistlength']) > 0: status_text = "{}: {}".format(songs_text, time_text) else: status_text = '' if updatingdb: update_text = _('(updating mpd)') status_text = "{}: {}".format(status_text, update_text) else: status_text = '' if status_text != self.last_status_text: self.statusbar.push(self.statusbar.get_context_id(''), status_text) self.last_status_text = status_text def update_cursong(self): if self.status_is_play_or_pause(): # We must show the trayprogressbar and trayalbumeventbox # before changing self.cursonglabel (and consequently calling # self.on_currsong_notify()) in order to ensure that the # notification popup will have the correct height when being # displayed for the first time after a stopped state. if self.config.show_progress: self.tray_progressbar.show() self.tray_current_label2.show() if self.config.show_covers: self.tray_album_image.show() for label in (self.cursonglabel1, self.cursonglabel2, self.tray_current_label1, self.tray_current_label2): label.set_ellipsize(Pango.EllipsizeMode.END) if len(self.config.currsongformat1) > 0: newlabel1 = formatting.parse(self.config.currsongformat1, self.songinfo, True) else: newlabel1 = '' newlabel1 = '<big>{}</big>'.format(newlabel1) if len(self.config.currsongformat2) > 0: newlabel2 = formatting.parse(self.config.currsongformat2, self.songinfo, True) else: newlabel2 = '' newlabel2 = '<small>{}</small>'.format(newlabel2) if newlabel1 != self.cursonglabel1.get_label(): self.cursonglabel1.set_markup(newlabel1) if newlabel2 != self.cursonglabel2.get_label(): self.cursonglabel2.set_markup(newlabel2) if newlabel1 != self.tray_current_label1.get_label(): self.tray_current_label1.set_markup(newlabel1) if newlabel2 != self.tray_current_label2.get_label(): self.tray_current_label2.set_markup(newlabel2) self.expander.set_tooltip_text('%s\n%s' % \ (self.cursonglabel1.get_text(), self.cursonglabel2.get_text(),)) else: for label in (self.cursonglabel1, self.cursonglabel2, self.tray_current_label1, self.cursonglabel2): label.set_ellipsize(Pango.EllipsizeMode.NONE) newlabel1 = '<big>{}</big>'.format(_('Stopped')) self.cursonglabel1.set_markup(newlabel1) if self.config.expanded: newlabel2 = _('Click to collapse') else: newlabel2 = _('Click to expand') newlabel2 = '<small>{}</small>'.format(newlabel2) self.cursonglabel2.set_markup(newlabel2) self.expander.set_tooltip_text(self.cursonglabel1.get_text()) if not self.conn: traylabel1 = _('Not Connected') elif not self.status: traylabel1 = _('No Read Permission') else: traylabel1 = _('Stopped') traylabel1 = '<big>{}</big>'.format(traylabel1) self.tray_current_label1.set_markup(traylabel1) self.tray_progressbar.hide() self.tray_album_image.hide() self.tray_current_label2.hide() self.update_infofile() def update_wintitle(self): if self.status_is_play_or_pause(): newtitle = formatting.parse( self.config.titleformat, self.songinfo, False, True, self.status.get('time', None)) else: newtitle = '[Sonata]' if not self.last_title or self.last_title != newtitle: self.window.set_property('title', newtitle) self.last_title = newtitle def tooltip_set_window_width(self): screen = self.window.get_screen() _pscreen, px, py, _mods = screen.get_display().get_pointer() monitor_num = screen.get_monitor_at_point(px, py) monitor = screen.get_monitor_geometry(monitor_num) self.notification_width = int(monitor.width * 0.30) if self.notification_width > consts.NOTIFICATION_WIDTH_MAX: self.notification_width = consts.NOTIFICATION_WIDTH_MAX elif self.notification_width < consts.NOTIFICATION_WIDTH_MIN: self.notification_width = consts.NOTIFICATION_WIDTH_MIN def on_currsong_notify(self, _foo=None, _bar=None, force_popup=False): if self.fullscreen.on_fullscreen: return if self.sonata_loaded: if self.status_is_play_or_pause(): if self.config.show_covers: self.traytips.set_size_request(self.notification_width, -1) else: self.traytips.set_size_request( self.notification_width - 100, -1) else: self.traytips.set_size_request(-1, -1) if self.config.show_notification or force_popup: try: GLib.source_remove(self.traytips.notif_handler) except: pass if self.status_is_play_or_pause(): try: self.traytips.notifications_location = \ self.config.traytips_notifications_location self.traytips.use_notifications_location = True if self.tray_icon.is_visible(): self.traytips._real_display(self.tray_icon) else: self.traytips._real_display(None) if self.config.popup_option != len(self.popuptimes)-1: if force_popup and \ not self.config.show_notification: # Used -p argument and notification is disabled # in player; default to 3 seconds timeout = 3000 else: timeout = \ int(self.popuptimes[ self.config.popup_option]) * 1000 self.traytips.notif_handler = GLib.timeout_add( timeout, self.traytips.hide) else: # -1 indicates that the timeout should be forever. # We don't want to pass None, because then Sonata # would think that there is no current notification self.traytips.notif_handler = -1 except: pass else: self.traytips.hide() elif self.traytips.get_property('visible'): self.traytips._real_display(self.tray_icon) def on_progressbar_notify_fraction(self, *_args): self.tray_progressbar.set_fraction(self.progressbar.get_fraction()) def on_progressbar_notify_text(self, *_args): self.tray_progressbar.set_text(self.progressbar.get_text()) def update_infofile(self): if self.config.use_infofile is True: try: info_file = open(self.config.infofile_path, 'w', encoding="utf-8") if self.status['state'] in ['play']: info_file.write('Status: ' + 'Playing' + '\n') elif self.status['state'] in ['pause']: info_file.write('Status: ' + 'Paused' + '\n') elif self.status['state'] in ['stop']: info_file.write('Status: ' + 'Stopped' + '\n') if self.songinfo.artist: info_file.write('Title: %s - %s\n' % ( self.songinfo.artist, (self.songinfo.title or ''))) else: # No Artist in streams try: info_file.write('Title: %s\n' % (self.songinfo.title or '')) except: info_file.write('Title: No - ID Tag\n') info_file.write('Album: %s\n' % (self.songinfo.album or 'No Data')) info_file.write('Track: %s\n' % self.songinfo.track) info_file.write('File: %s\n' % (self.songinfo.file or 'No Data')) info_file.write('Time: %s\n' % self.songinfo.time) info_file.write('Volume: %s\n' % (self.status['volume'],)) info_file.write('Repeat: %s\n' % (self.status['repeat'],)) info_file.write('Single: %s\n' % (self.status['single'],)) info_file.write('Random: %s\n' % (self.status['random'],)) info_file.write('Consume: %s\n' % (self.status['consume'],)) info_file.close() except: pass ################# # Gui Callbacks # ################# def on_fullscreen_change(self, _widget=None): if self.fullscreen.on_fullscreen: self.traytips.show() else: self.traytips.hide() self.fullscreen.on_fullscreen_change() def on_delete_event_yes(self, _widget): self.exit_now = True self.on_delete_event(None, None) # This one makes sure the program exits when the window is closed def on_delete_event(self, _widget, _data=None): if not self.exit_now and self.config.minimize_to_systray: if self.tray_icon.is_visible(): self.withdraw_app() return True self.settings_save() self.artwork.cache.save() if self.config.as_enabled: self.scrobbler.save_cache() if self.conn and self.config.stop_on_exit: self.mpd_stop(None) sys.exit() def on_window_configure(self, window, _event): # When withdrawing an app, extra configure events (with wrong coords) # are fired (at least on Openbox). This prevents a user from moving # the window, withdrawing it, then unwithdrawing it and finding it in # an older position if not window.props.visible: return width, height = window.get_size() if self.config.expanded: self.config.w, self.config.h = width, height else: self.config.w = width self.config.x, self.config.y = window.get_position() def on_notebook_resize(self, _widget, _event): if not self.current.resizing_columns: GLib.idle_add(self.header_save_column_widths) def on_expand(self, _action): if not self.config.expanded: self.expander.set_expanded(False) self.on_expander_activate(None) self.expander.set_expanded(True) def on_collapse(self, _action): if self.config.expanded: self.expander.set_expanded(True) self.on_expander_activate(None) self.expander.set_expanded(False) def on_expander_activate(self, _expander): currheight = self.window.get_size()[1] self.config.expanded = False # Note that get_expanded() will return the state of the expander # before this current click window_about_to_be_expanded = not self.expander.get_expanded() if window_about_to_be_expanded: if self.window.get_size()[1] == self.config.h: # For WMs like ion3, the app will not actually resize # when in collapsed mode, so prevent the waiting # of the player to expand from happening: skip_size_check = True else: skip_size_check = False if self.config.show_statusbar: self.statusbar.show() self.notebook.show_all() if self.config.show_statusbar: ui.show(self.statusbar) else: ui.hide(self.statusbar) self.notebook.hide() if not self.status_is_play_or_pause(): if window_about_to_be_expanded: self.cursonglabel2.set_text(_('Click to collapse')) else: self.cursonglabel2.set_text(_('Click to expand')) # Now we wait for the height of the player to increase, so that # we know the list is visible. This is pretty hacky, but works. if window_about_to_be_expanded: if not skip_size_check: while self.window.get_size()[1] == currheight: while Gtk.events_pending(): Gtk.main_iteration() # Notebook is visible, now resize: self.window.resize(self.config.w, self.config.h) else: self.window.resize(self.config.w, 1) if window_about_to_be_expanded: self.config.expanded = True if self.status_is_play_or_pause(): GLib.idle_add(self.current.center_song_in_list) hints = Gdk.Geometry() hints.min_height = -1 hints.max_height = -1 hints.min_width = -1 hints.max_width = -1 self.window.set_geometry_hints(self.window, hints, Gdk.WindowHints.USER_SIZE) # Put focus to the notebook: self.on_notebook_page_change(self.notebook, 0, self.notebook.get_current_page()) # This callback allows the user to seek to a specific portion of the song def on_progressbar_press(self, _widget, event): if event.button == 1: if self.status_is_play_or_pause(): at, length = [int(c) for c in self.status['time'].split(':')] try: pbsize = self.progressbar.get_allocation() if misc.is_lang_rtl(self.window): seektime = int( ((pbsize.width - event.x) / pbsize.width) * length) else: seektime = int((event.x / pbsize.width) * length) self.seek(int(self.status['song']), seektime) except: pass return True def on_progressbar_scroll(self, _widget, event): if self.status_is_play_or_pause(): try: GLib.source_remove(self.seekidle) except: pass self.seekidle = GLib.idle_add(self._seek_when_idle, event.direction) return True def _seek_when_idle(self, direction): at, _length = [int(c) for c in self.status['time'].split(':')] try: if direction == Gdk.ScrollDirection.UP: seektime = max(0, at + 5) elif direction == Gdk.ScrollDirection.DOWN: seektime = min(self.songinfo.time, at - 5) self.seek(int(self.status['song']), seektime) except: pass def on_lyrics_search(self, _event): artist = self.songinfo.artist or '' title = self.songinfo.title or '' if not self.lyrics_search_dialog: self.lyrics_search_dialog = self.builder.get_object( 'lyrics_search_dialog') artist_entry = self.builder.get_object('lyrics_search_artist_entry') artist_entry.set_text(artist) title_entry = self.builder.get_object('lyrics_search_title_entry') title_entry.set_text(title) self.lyrics_search_dialog.show_all() response = self.lyrics_search_dialog.run() if response == Gtk.ResponseType.ACCEPT: # Search for new lyrics: self.info.get_lyrics_start( artist_entry.get_text(), title_entry.get_text(), artist, title, os.path.dirname(self.songinfo.file), force_fetch=True) self.lyrics_search_dialog.hide() def mpd_shuffle(self, _action): if self.conn: if not self.status or self.status['playlistlength'] == '0': return ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) while Gtk.events_pending(): Gtk.main_iteration() self.mpd.shuffle() def mpd_shuffle_albums(self, _action): """Shuffle by albums. Shuffle songs from the current playlist by their albums, while keeping the related songs together. """ if not self.conn or \ not self.status or \ self.status['playlistlength'] == '0': return albums = collections.defaultdict(lambda: []) # Fetch albums for song in self.mpd.playlistinfo(): if "album" in song: k = song.album else: # We consider a song without album info to be a one song # album and use the title as album name. if 'title' in song: k = song.title else: # If there is not even a title in the song we ignore it, # which which will cause it to end up at the end of the # playlist, during shuffling. continue albums[k].append(song) album_names = list(albums.keys()) random.shuffle(album_names) for album in album_names: for song in sorted(albums[album], key=operator.attrgetter('track'), reverse=True): self.mpd.moveid(song["id"], 0) def on_menu_popup(self, _widget): self.update_menu_visibility() GLib.idle_add(self.mainmenu.popup, None, None, None, None, 3, 0) def on_updatedb(self, _action): if self.conn: if self.library.search_visible(): self.library.on_search_end(None) self.mpd.update('/') # XXX we should pass a list here! self.mpd_update_queued = True def on_updatedb_shortcut(self, _action): # If no songs selected, update view. Otherwise update # selected items. if self.library.not_parent_is_selected(): self.on_updatedb_path(True) else: self.on_updatedb_path(False) def on_updatedb_path(self, selected_only): if self.conn and self.current_tab == self.TAB_LIBRARY: if self.library.search_visible(): self.library.on_search_end(None) filenames = self.library.get_path_child_filenames(True, selected_only) if len(filenames) > 0: self.mpd.update(filenames) self.mpd_update_queued = True def on_image_activate(self, widget, event): self.window.handler_block(self.mainwinhandler) if event.button == 1 and widget == self.info_imagebox and \ self.artwork.have_last(): if not self.config.info_art_enlarged: self.info_imagebox.set_size_request(-1, -1) self.artwork.artwork_set_image_last() self.config.info_art_enlarged = True else: self.info_imagebox.set_size_request(152, -1) self.artwork.artwork_set_image_last() self.config.info_art_enlarged = False # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) elif event.button == 1 and widget != self.info_imagebox: if self.config.expanded: if self.current_tab != self.TAB_INFO: self.img_clicked = True self.switch_to_tab_name(self.TAB_INFO) self.img_clicked = False else: self.switch_to_tab_name(self.last_tab) elif event.button == 3: artist = None album = None stream = None path_chooseimage = '/imagemenu/chooseimage_menu/' path_localimage = '/imagemenu/localimage_menu/' path_resetimage = '/imagemenu/resetimage_menu/' if self.status_is_play_or_pause(): self.UIManager.get_widget(path_chooseimage).show() self.UIManager.get_widget(path_localimage).show() artist = self.songinfo.artist album = self.songinfo.album stream = self.songinfo.name if not (artist or album or stream): self.UIManager.get_widget(path_localimage).hide() self.UIManager.get_widget(path_resetimage).hide() self.UIManager.get_widget(path_chooseimage).hide() self.imagemenu.popup(None, None, None, None, event.button, event.time) GLib.timeout_add(50, self.on_image_activate_after) return False def on_image_motion_cb(self, _widget, context, _x, _y, time): Gdk.drag_status(context, Gdk.DragAction.COPY, time) return True def on_image_drop_cb(self, _widget, _context, _x, _y, selection, _info, _time): if not self.status_is_play_or_pause(): return data = selection.get_data().strip().decode('utf-8') for uri in data.rsplit('\n'): uri = uri.rstrip('\r') if not uri: continue extension = os.path.splitext( urllib.parse.urlparse(uri).path)[1][1:] if extension not in img.VALID_EXTENSIONS: self.logger.debug( "Hum, the URI at '%s' doesn't look like an image...", uri) continue destination = artwork.artwork_path(self.songinfo, self.config) self.logger.info("Trying to download '%s' (to '%s') ...", uri, destination) f = Gio.File.new_for_uri(uri) f.load_contents_async( None, self.on_image_drop_load_contents_async_end, destination) def on_image_drop_load_contents_async_end(self, file, result, destination): source = result.get_source_object().get_uri() try: success, contents, etag = file.load_contents_finish(result) except GLib.GError as e: self.logger.warning("Can't retrieve %s: %s", source, e) return misc.create_dir(artwork.COVERS_TEMP_DIR) with tempfile.NamedTemporaryFile(dir=artwork.COVERS_TEMP_DIR, delete=False) as t: t.write(contents) if not img.valid_image(t.name): self.logger.warning("Downloaded '%s', but it's not an image :(", source) misc.remove_file(t.name) return os.rename(t.name, destination) self.artwork.artwork_update(True) def album_return_artist_and_tracks(self): # Includes logic for Various Artists albums to determine # the tracks. datalist = [] album = self.songinfo.album or '' songs, _playtime, _num_songs = \ self.library.library_return_search_items(album=album) for song in songs: year = song.date or '' artist = song.artist or '' path = os.path.dirname(song.file) data = SongRecord(album=album, artist=artist, year=year, path=path) datalist.append(data) if len(datalist) > 0: datalist = misc.remove_list_duplicates(datalist, case=False) datalist = library.list_mark_various_artists_albums(datalist) if len(datalist) > 0: # Multiple albums with same name and year, choose the # right one. If we have a VA album, compare paths. Otherwise, # compare artists. for dataitem in datalist: if dataitem.artist.lower() == \ str(self.songinfo.artist or '').lower() \ or dataitem.artist == library.VARIOUS_ARTISTS \ and dataitem.path == \ os.path.dirname(self.songinfo.file): datalist = [dataitem] break # Find all songs in album: retsongs = [] for song in songs: if (song.album or '').lower() == datalist[0].album.lower() \ and song.date == datalist[0].year \ and (datalist[0].artist == library.VARIOUS_ARTISTS \ or datalist[0].artist.lower() == \ (song.artist or '').lower()): retsongs.append(song) return artist, retsongs else: return None, None def album_return_artist_name(self): # Determine if album_name is a various artists album. if self.album_current_artist[0] == self.songinfo: return artist, _tracks = self.album_return_artist_and_tracks() if artist is not None: self.album_current_artist = [self.songinfo, artist] else: self.album_current_artist = [self.songinfo, ""] def album_reset_artist(self): self.album_current_artist = [None, ""] def on_image_activate_after(self): self.window.handler_unblock(self.mainwinhandler) def update_preview(self, file_chooser, preview): filename = file_chooser.get_preview_filename() pixbuf = None try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(filename, 128, 128) except: pass if pixbuf is None: try: pixbuf = GdkPixbuf.PixbufAnimation.new_from_file(filename) pixbuf = pixbuf.get_static_image() width = pixbuf.get_width() height = pixbuf.get_height() if width > height: pixbuf = pixbuf.scale_simple( 128, int(float(height) / width * 128), GdkPixbuf.InterpType.HYPER) else: pixbuf = pixbuf.scale_simple( int(float(width) / height * 128), 128, GdkPixbuf.InterpType.HYPER) except: pass if pixbuf is None: pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, 1, 8, 128, 128) pixbuf.fill(0x00000000) preview.set_from_pixbuf(pixbuf) have_preview = True file_chooser.set_preview_widget_active(have_preview) del pixbuf self.call_gc_collect = True def image_local(self, _widget): dialog = self.builder.get_object('local_artwork_dialog') filefilter = Gtk.FileFilter() filefilter.set_name(_("Images")) filefilter.add_pixbuf_formats() dialog.add_filter(filefilter) filefilter = Gtk.FileFilter() filefilter.set_name(_("All files")) filefilter.add_pattern("*") dialog.add_filter(filefilter) preview = self.builder.get_object('local_art_preview_image') dialog.connect("update-preview", self.update_preview, preview) stream = self.songinfo.name album = (self.songinfo.album or "").replace("/", "") artist = self.album_current_artist[1].replace("/", "") songdir = os.path.dirname(self.songinfo.file) currdir = os.path.join(self.config.current_musicdir, songdir) if self.config.art_location != consts.ART_LOCATION_HOMECOVERS: dialog.set_current_folder(currdir) self.local_dest_filename = artwork.artwork_path(self.songinfo, self.config) dialog.show_all() response = dialog.run() if response == Gtk.ResponseType.OK: filename = dialog.get_filenames()[0] # Copy file to covers dir: if self.local_dest_filename != filename: shutil.copyfile(filename, self.local_dest_filename) # And finally, set the image in the interface: self.artwork.artwork_update(True) # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) dialog.hide() def imagelist_append(self, elem): self.imagelist.append(elem) def remotefilelist_append(self, elem): self.remotefilelist.append(elem) def _init_choose_dialog(self): self.choose_dialog = self.builder.get_object('artwork_dialog') self.imagelist = self.builder.get_object('artwork_liststore') self.remote_artistentry = self.builder.get_object('artwork_artist_entry') self.remote_albumentry = self.builder.get_object('artwork_album_entry') self.image_widget = self.builder.get_object('artwork_iconview') refresh_button = self.builder.get_object('artwork_update_button') refresh_button.connect('clicked', self.image_remote_refresh, self.image_widget) self.remotefilelist = [] def image_remote(self, _widget): if not self.choose_dialog: self._init_choose_dialog() stream = self.songinfo.name self.remote_dest_filename = artwork.artwork_path(self.songinfo, self.config) album = self.songinfo.album or '' artist = self.album_current_artist[1] self.image_widget.connect('item-activated', self.image_remote_replace_cover, artist.replace("/", ""), album.replace("/", ""), stream) self.choose_dialog.connect('response', self.image_remote_response, self.image_widget, artist, album, stream) self.remote_artistentry.set_text(artist) self.remote_albumentry.set_text(album) self.allow_art_search = True self.chooseimage_visible = True self.image_remote_refresh(None, self.image_widget) self.choose_dialog.show_all() self.choose_dialog.run() def image_remote_refresh(self, _entry, imagewidget): if not self.allow_art_search: return self.allow_art_search = False self.artwork.artwork_stop_update() while self.artwork.artwork_is_downloading_image(): while Gtk.events_pending(): Gtk.main_iteration() self.imagelist.clear() imagewidget.set_text_column(-1) imagewidget.set_model(self.imagelist) imagewidget.set_pixbuf_column(1) imagewidget.grab_focus() ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) thread = threading.Thread(target=self._image_remote_refresh, args=(imagewidget, None)) thread.name = "ImageRemoteRefresh" thread.daemon = True thread.start() def _image_remote_refresh(self, imagewidget, _ignore): self.artwork.stop_art_update = False # Retrieve all images from cover plugins artist_search = self.remote_artistentry.get_text() album_search = self.remote_albumentry.get_text() if len(artist_search) == 0 and len(album_search) == 0: GLib.idle_add(self.image_remote_no_tag_found, imagewidget) return filename = os.path.join(artwork.COVERS_TEMP_DIR, "<imagenum>.jpg") misc.remove_dir_recursive(os.path.dirname(filename)) misc.create_dir(os.path.dirname(filename)) imgfound = self.artwork.artwork_download_img_to_file(artist_search, album_search, filename, True) ui.change_cursor(None) if self.chooseimage_visible: if not imgfound: GLib.idle_add(self.image_remote_no_covers_found, imagewidget) self.call_gc_collect = True def image_remote_no_tag_found(self, imagewidget): self.image_remote_warning(imagewidget, _("No artist or album name found.")) def image_remote_no_covers_found(self, imagewidget): self.image_remote_warning(imagewidget, _("No cover art found.")) def image_remote_warning(self, imagewidget, msgstr): liststore = Gtk.ListStore(int, str) liststore.append([0, msgstr]) imagewidget.set_pixbuf_column(-1) imagewidget.set_model(liststore) imagewidget.set_text_column(1) ui.change_cursor(None) self.allow_art_search = True def image_remote_response(self, dialog, response_id, imagewidget, artist, album, stream): self.artwork.artwork_stop_update() if response_id == Gtk.ResponseType.ACCEPT: try: self.image_remote_replace_cover( imagewidget, imagewidget.get_selected_items()[0], artist, album, stream) # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) except: dialog.hide() else: dialog.hide() ui.change_cursor(None) self.chooseimage_visible = False def image_remote_replace_cover(self, _iconview, path, _artist, _album, _stream): self.artwork.artwork_stop_update() image_num = path.get_indices()[0] if len(self.remotefilelist) > 0: filename = self.remotefilelist[image_num] if os.path.exists(filename): shutil.move(filename, self.remote_dest_filename) # And finally, set the image in the interface: self.artwork.artwork_update(True) # Clean up.. misc.remove_dir_recursive(os.path.dirname(filename)) self.chooseimage_visible = False self.choose_dialog.hide() while self.artwork.artwork_is_downloading_image(): while Gtk.events_pending(): Gtk.main_iteration() def header_save_column_widths(self): if not self.config.withdrawn and self.config.expanded: windowwidth = self.window.get_allocation().width if windowwidth <= 10 or self.current.columns[0].get_width() <= 10: # Make sure we only set self.config.columnwidths if # self.current has its normal allocated width: return notebookwidth = self.notebook.get_allocation().width treewidth = 0 for i, column in enumerate(self.current.columns): colwidth = column.get_width() treewidth += colwidth if i == len(self.current.columns)-1 \ and treewidth <= windowwidth: self.config.columnwidths[i] = min(colwidth, column.get_fixed_width()) else: self.config.columnwidths[i] = colwidth self.current.resizing_columns = False def on_tray_click(self, _widget, event): # Clicking on a system tray icon: # Left button shows/hides window(s) if event.button == 1 and not self.ignore_toggle_signal: # This prevents the user clicking twice in a row quickly # and having the second click not revert to the intial # state self.ignore_toggle_signal = True path_showmenu = '/traymenu/showmenu' prev_state = self.UIManager.get_widget(path_showmenu).get_active() self.UIManager.get_widget(path_showmenu).set_active(not prev_state) # For some reason, self.window.window is not defined if # mpd is not running and sonata is started with # self.config.withdrawn = True window = self.window.get_window() if window and not (window.get_state() & Gdk.WindowState.WITHDRAWN): # Window is not withdrawn and is active (has toplevel focus): self.withdraw_app() else: self.withdraw_app_undo() # This prevents the tooltip from popping up again until the user # leaves and enters the trayicon again # if self.traytips.notif_handler is None and # self.traytips.notif_handler != -1: # self.traytips._remove_timer() GLib.timeout_add(100, self.tooltip_set_ignore_toggle_signal_false) elif event.button == 2: # Middle button will play/pause if self.conn: self.mpd_pp(None) elif event.button == 3: # Right button pops up menu self.traymenu.popup(None, None, None, None, event.button, event.time) return False def on_traytips_press(self, _widget, _event): if self.traytips.get_property('visible'): self.traytips._remove_timer() def withdraw_app_undo(self): desktop = Gdk.get_default_root_window() # convert window coordinates to current workspace so sonata # will always appear on the current workspace with the same # position as it was before (may be on the other workspace) self.config.x %= desktop.get_width() self.config.y %= desktop.get_height() self.window.move(self.config.x, self.config.y) if not self.config.expanded: self.notebook.set_no_show_all(True) self.statusbar.set_no_show_all(True) self.window.show_all() self.notebook.set_no_show_all(False) self.config.withdrawn = False self.UIManager.get_widget('/traymenu/showmenu').set_active(True) self.withdraw_app_undo_present_and_focus() def withdraw_app_undo_present_and_focus(self): # Helps to raise the window (useful against focus stealing prevention) self.window.present() self.window.grab_focus() if self.config.sticky: self.window.stick() if self.config.ontop: self.window.set_keep_above(True) def withdraw_app(self): if self.tray_icon.is_available(): # Save the playlist column widths before withdrawing the app. # Otherwise we will not be able to correctly save the column # widths if the user quits sonata while it is withdrawn. self.header_save_column_widths() self.window.hide() self.config.withdrawn = True self.UIManager.get_widget('/traymenu/showmenu').set_active(False) def on_withdraw_app_toggle(self, _action): if self.ignore_toggle_signal: return self.ignore_toggle_signal = True if self.UIManager.get_widget('/traymenu/showmenu').get_active(): self.withdraw_app_undo() else: self.withdraw_app() GLib.timeout_add(500, self.tooltip_set_ignore_toggle_signal_false) def tooltip_set_ignore_toggle_signal_false(self): self.ignore_toggle_signal = False # Change volume on mousewheel over systray icon: def on_tray_scroll(self, widget, event): direction = event.get_scroll_direction()[1] if self.conn: if direction == Gdk.ScrollDirection.UP: self.on_volume_raise() elif direction == Gdk.ScrollDirection.DOWN: self.on_volume_lower() def switch_to_tab_name(self, tab_name): self.notebook.set_current_page(self.notebook_get_tab_num(self.notebook, tab_name)) def switch_to_tab_num(self, tab_num): vis_tabnum = self.notebook_get_visible_tab_num(self.notebook, tab_num) if vis_tabnum != -1: self.notebook.set_current_page(vis_tabnum) def switch_to_next_tab(self, _action): self.notebook.next_page() def switch_to_prev_tab(self, _action): self.notebook.prev_page() # Volume control def on_volume_lower(self, _action=None): new_volume = int(self.volumebutton.get_value()) - 5 self.volumebutton.set_value(new_volume) def on_volume_raise(self, _action=None): new_volume = int(self.volumebutton.get_value()) + 5 self.volumebutton.set_value(new_volume) def on_volume_change(self, _button, new_volume): self.mpd.setvol(int(new_volume)) def mpd_pp(self, _widget, _key=None): if self.conn and self.status: if self.status['state'] in ('stop', 'pause'): self.mpd.play() elif self.status['state'] == 'play': self.mpd.pause('1') self.iterate_now() def mpd_stop(self, _widget, _key=None): if self.conn: self.mpd.stop() self.iterate_now() def mpd_prev(self, _widget, _key=None): if self.conn: if self.status_is_play_or_pause(): # Try to rewind the song if we are advanced enough... at, length = [int(c) for c in self.status['time'].split(':')] if at >= consts.PREV_TRACK_RESTART: self.seek(int(self.status['song']), 0) return # otherwise, just go to the previous song self.mpd.previous() self.iterate_now() def mpd_next(self, _widget, _key=None): if self.conn: self.mpd.next() self.iterate_now() def on_remove(self, _widget): if self.conn: model = None while Gtk.events_pending(): Gtk.main_iteration() if self.current_tab == self.TAB_CURRENT: self.current.on_remove() elif self.current_tab == self.TAB_PLAYLISTS: treeviewsel = self.playlists_selection model, selected = treeviewsel.get_selected_rows() if ui.show_msg(self.window, ngettext("Delete the selected playlist?", "Delete the selected playlists?", int(len(selected))), ngettext("Delete Playlist", "Delete Playlists", int(len(selected))), 'deletePlaylist', Gtk.ButtonsType.YES_NO) == \ Gtk.ResponseType.YES: iters = [model.get_iter(path) for path in selected] for i in iters: self.mpd.rm(misc.unescape_html( self.playlistsdata.get_value(i, 1))) self.playlists.populate() elif self.current_tab == self.TAB_STREAMS: treeviewsel = self.streams_selection model, selected = treeviewsel.get_selected_rows() if ui.show_msg(self.window, ngettext("Delete the selected stream?", "Delete the selected streams?", int(len(selected))), ngettext("Delete Stream", "Delete Streams", int(len(selected))), 'deleteStreams', Gtk.ButtonsType.YES_NO) == \ Gtk.ResponseType.YES: iters = [model.get_iter(path) for path in selected] for i in iters: stream_removed = False for j in range(len(self.config.stream_names)): if not stream_removed: if self.streamsdata.get_value(i, 1) == \ misc.escape_html( self.config.stream_names[j]): self.config.stream_names.pop(j) self.config.stream_uris.pop(j) stream_removed = True self.streams.populate() self.iterate_now() # Attempt to retain selection in the vicinity.. if model and len(model) > 0: try: # Use top row in selection... selrow = 999999 for row in selected: if row[0] < selrow: selrow = row[0] if selrow >= len(model): selrow = len(model)-1 treeviewsel.select_path(selrow) except: pass def mpd_clear(self, _widget): if self.conn: self.mpd.clear() self.iterate_now() def on_repeat_playlist_clicked(self, widget): if self.conn: is_active = widget.get_active() self.mpd.repeat(int(is_active or self.repeatsongmenu.get_active())) self.mpd.single(1 - is_active) def on_repeat_song_clicked(self, widget): if self.conn: is_active = int(widget.get_active()) is_repeat_playlist_active = int(self.repeatplaylistmenu.get_active()) self.mpd.single(is_active) self.mpd.repeat(int(is_active or is_repeat_playlist_active)) def on_random_clicked(self, widget): if self.conn: self.mpd.random(int(widget.get_active())) def on_consume_clicked(self, widget): if self.conn: self.mpd.consume(int(widget.get_active())) def setup_prefs_callbacks(self): extras = preferences.Extras_cbs extras.popuptimes = self.popuptimes extras.notif_toggled = self.prefs_notif_toggled extras.crossfade_toggled = self.prefs_crossfade_toggled extras.crossfade_changed = self.prefs_crossfade_changed display = preferences.Display_cbs display.stylized_toggled = self.prefs_stylized_toggled display.art_toggled = self.prefs_art_toggled display.playback_toggled = self.prefs_playback_toggled display.progress_toggled = self.prefs_progress_toggled display.statusbar_toggled = self.prefs_statusbar_toggled display.lyrics_toggled = self.prefs_lyrics_toggled # TODO: the tray icon object has not been build yet, so we don't know # if the tray icon will be available at this time. # We should find a way to update this when the tray icon will be # initialized. display.trayicon_available = True behavior = preferences.Behavior_cbs behavior.trayicon_toggled = self.prefs_trayicon_toggled behavior.sticky_toggled = self.prefs_sticky_toggled behavior.ontop_toggled = self.prefs_ontop_toggled behavior.decorated_toggled = self.prefs_decorated_toggled behavior.infofile_changed = self.prefs_infofile_changed format = preferences.Format_cbs format.currentoptions_changed = self.prefs_currentoptions_changed format.libraryoptions_changed = self.prefs_libraryoptions_changed format.titleoptions_changed = self.prefs_titleoptions_changed format.currsongoptions1_changed = self.prefs_currsongoptions1_changed format.currsongoptions2_changed = self.prefs_currsongoptions2_changed def on_prefs(self, _widget): preferences.Behavior_cbs.trayicon_in_use = self.tray_icon.is_visible() self.preferences.on_prefs_real() def prefs_currentoptions_changed(self, entry, _event): if self.config.currentformat != entry.get_text(): self.config.currentformat = entry.get_text() self.current.initialize_columns() def prefs_libraryoptions_changed(self, entry, _event): if self.config.libraryformat != entry.get_text(): self.config.libraryformat = entry.get_text() self.library.library_browse(root=self.config.wd) def prefs_titleoptions_changed(self, entry, _event): if self.config.titleformat != entry.get_text(): self.config.titleformat = entry.get_text() self.update_wintitle() def prefs_currsongoptions1_changed(self, entry, _event): if self.config.currsongformat1 != entry.get_text(): self.config.currsongformat1 = entry.get_text() self.update_cursong() def prefs_currsongoptions2_changed(self, entry, _event): if self.config.currsongformat2 != entry.get_text(): self.config.currsongformat2 = entry.get_text() self.update_cursong() def prefs_ontop_toggled(self, button): self.config.ontop = button.get_active() self.window.set_keep_above(self.config.ontop) def prefs_sticky_toggled(self, button): self.config.sticky = button.get_active() if self.config.sticky: self.window.stick() else: self.window.unstick() def prefs_decorated_toggled(self, button, prefs_window): self.config.decorated = not button.get_active() if self.config.decorated != self.window.get_decorated(): self.withdraw_app() self.window.set_decorated(self.config.decorated) self.withdraw_app_undo() prefs_window.present() def prefs_infofile_changed(self, entry, _event): if self.config.infofile_path != entry.get_text(): self.config.infofile_path = os.path.expanduser(entry.get_text()) if self.config.use_infofile: self.update_infofile() def prefs_crossfade_changed(self, crossfade_spin): crossfade_value = crossfade_spin.get_value_as_int() self.mpd.crossfade(crossfade_value) def prefs_crossfade_toggled(self, button, crossfade_spin): crossfade_value = crossfade_spin.get_value_as_int() if button.get_active(): self.mpd.crossfade(crossfade_value) else: self.mpd.crossfade(0) def prefs_playback_toggled(self, button): self.config.show_playback = button.get_active() func = 'show' if self.config.show_playback else 'hide' for widget in [self.prevbutton, self.ppbutton, self.stopbutton, self.nextbutton, self.volumebutton]: getattr(ui, func)(widget) def prefs_progress_toggled(self, button): self.config.show_progress = button.get_active() func = ui.show if self.config.show_progress else ui.hide for widget in [self.progressbox, self.tray_progressbar]: func(widget) # FIXME move into prefs or elsewhere? def prefs_art_toggled(self, button, art_prefs): button_active = button.get_active() art_prefs.set_sensitive(button_active) #art_hbox2.set_sensitive(button_active) #art_stylized.set_sensitive(button_active) if button_active: self.traytips.set_size_request(self.notification_width, -1) self.artwork.artwork_set_default_icon() for widget in [self.imageeventbox, self.info_imagebox, self.tray_album_image]: widget.set_no_show_all(False) if widget is self.tray_album_image: if self.status_is_play_or_pause(): widget.show_all() else: widget.show_all() self.config.show_covers = True self.update_cursong() self.artwork.artwork_update() else: self.traytips.set_size_request(self.notification_width-100, -1) for widget in [self.imageeventbox, self.info_imagebox, self.tray_album_image]: widget.hide() self.config.show_covers = False self.update_cursong() # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) def prefs_stylized_toggled(self, button): self.config.covers_type = button.get_active() self.library.library_browse(root=self.config.wd) self.artwork.artwork_update(True) def prefs_lyrics_toggled(self, button, lyrics_hbox): self.config.show_lyrics = button.get_active() lyrics_hbox.set_sensitive(self.config.show_lyrics) self.info.show_lyrics_updated() if self.config.show_lyrics: self.info_update(True) def prefs_statusbar_toggled(self, button): self.config.show_statusbar = button.get_active() if self.config.show_statusbar: self.statusbar.set_no_show_all(False) if self.config.expanded: self.statusbar.show_all() else: ui.hide(self.statusbar) self.update_statusbar() def prefs_notif_toggled(self, button, notifhbox): self.config.show_notification = button.get_active() notifhbox.set_sensitive(self.config.show_notification) if self.config.show_notification: self.on_currsong_notify() else: try: GLib.source_remove(self.traytips.notif_handler) except: pass self.traytips.hide() def prefs_trayicon_toggled(self, button, minimize): # Note that we update the sensitivity of the minimize # CheckButton to reflect if the trayicon is visible. if button.get_active(): self.config.show_trayicon = True self.tray_icon.show() minimize.set_sensitive(True) else: self.config.show_trayicon = False minimize.set_sensitive(False) self.tray_icon.hide() def seek(self, song, seektime): self.mpd.seek(song, seektime) self.iterate_now() def on_link_click(self, linktype): if linktype in ['artist', 'album']: query = getattr(self.songinfo, linktype) or '' try: wikipedia_locale = locale.getdefaultlocale()[0].split('_')[0] except Exception as e: self.logger.debug("Can't find locale for Wikipedia: %s", e) wikipedia_locale = 'en' url = "http://{locale}.wikipedia.org/wiki/Special:Search/{query}"\ .format(locale=wikipedia_locale, query=urllib.parse.quote(query)) browser_loaded = misc.browser_load( url, self.config.url_browser, self.window) if not browser_loaded: ui.show_msg(self.window, _('Unable to launch a suitable browser.'), _('Launch Browser'), 'browserLoadError', Gtk.ButtonsType.CLOSE) elif linktype == 'edit': if self.songinfo: self.on_tags_edit(None) elif linktype == 'search': self.on_lyrics_search(None) def on_tab_click(self, _widget, event): if event.button == 3: self.notebookmenu.popup(None, None, None, None, event.button, event.time) return True def notebook_get_tab_num(self, notebook, tabname): for tab in range(notebook.get_n_pages()): if self.notebook_get_tab_text(self.notebook, tab) == tabname: return tab def notebook_tab_is_visible(self, notebook, tabname): tab = self.notebook.get_children()[self.notebook_get_tab_num(notebook, tabname)] return tab.get_property('visible') def notebook_get_visible_tab_num(self, notebook, tab_num): # Get actual tab number for visible tab_num. If there is not # a visible tab for tab_num, return -1.\ curr_tab = -1 for tab in range(notebook.get_n_pages()): if notebook.get_children()[tab].get_property('visible'): curr_tab += 1 if curr_tab == tab_num: return tab return -1 def notebook_get_tab_text(self, notebook, tab_num): tab = notebook.get_children()[tab_num] # FIXME when new UI is done, the top branch expression wins if notebook.get_tab_label(tab).get_children and \ len(notebook.get_tab_label(tab).get_children()) == 2: child = notebook.get_tab_label(tab).get_children()[1] else: child = notebook.get_tab_label(tab).get_child().get_children()[1] return child.get_text() def on_notebook_page_change(self, _notebook, _page, page_num): self.current_tab = self.notebook_get_tab_text(self.notebook, page_num) to_focus = self.tabname2focus.get(self.current_tab, None) if to_focus: GLib.idle_add(to_focus.grab_focus) GLib.idle_add(self.update_menu_visibility) if not self.img_clicked: self.last_tab = self.current_tab def on_window_click(self, _widget, event): if event.button == 3: self.menu_popup(self.window, event) def menu_popup(self, widget, event): if widget == self.window: # Prevent the popup from statusbar (if present) height = event.get_coords()[1] if height > self.notebook.get_allocation().height: return if event.button == 3: self.update_menu_visibility(True) GLib.idle_add(self.mainmenu.popup, None, None, None, None, event.button, event.time) def on_tab_toggle(self, toggleAction): name = toggleAction.get_name() label = toggleAction.get_label() if not toggleAction.get_active(): # Make sure we aren't hiding the last visible tab: num_tabs_vis = 0 for tab in self.notebook.get_children(): if tab.get_property('visible'): num_tabs_vis += 1 if num_tabs_vis == 1: # Keep menu item checking and exit.. toggleAction.set_active(True) return # Store value: if label == self.TAB_CURRENT: self.config.current_tab_visible = toggleAction.get_active() elif label == self.TAB_LIBRARY: self.config.library_tab_visible = toggleAction.get_active() elif label == self.TAB_PLAYLISTS: self.config.playlists_tab_visible = toggleAction.get_active() elif label == self.TAB_STREAMS: self.config.streams_tab_visible = toggleAction.get_active() elif label == self.TAB_INFO: self.config.info_tab_visible = toggleAction.get_active() # Hide/show: tabnum = self.notebook_get_tab_num(self.notebook, self.tabid2name[name]) if toggleAction.get_active(): ui.show(self.notebook.get_children()[tabnum]) else: ui.hide(self.notebook.get_children()[tabnum]) def on_library_search_shortcut(self, _event): # Ensure library tab is visible if not self.notebook_tab_is_visible(self.notebook, self.TAB_LIBRARY): return if self.current_tab != self.TAB_LIBRARY: self.switch_to_tab_name(self.TAB_LIBRARY) if self.library.search_visible(): self.library.on_search_end(None) self.library.libsearchfilter_set_focus() def update_menu_visibility(self, show_songinfo_only=False): if show_songinfo_only or not self.config.expanded: for menu in ['add', 'replace', 'playafter', 'rename', 'rm', 'pl', \ 'remove', 'clear', 'update', 'new', 'edit', 'sort', 'tag']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() return elif self.current_tab == self.TAB_CURRENT: # XXX this should move to the current.py module if not self.current.is_empty(): if self.current_selection.count_selected_rows() > 0: for menu in ['remove', 'tag']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() else: for menu in ['remove', 'tag']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() if not self.current.filterbox_visible: for menu in ['clear', 'pl', 'sort']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() else: for menu in ['clear', 'pl', 'sort']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() else: for menu in ['clear', 'pl', 'sort', 'remove', 'tag']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() for menu in ['add', 'replace', 'playafter', 'rename', 'rm', \ 'update', 'new', 'edit']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() elif self.current_tab == self.TAB_LIBRARY: if len(self.librarydata) > 0: path_update = '/mainmenu/updatemenu/updateselectedmenu/' if self.library_selection.count_selected_rows() > 0: for menu in ['add', 'replace', 'playafter', 'tag', 'pl']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() self.UIManager.get_widget(path_update).show() else: for menu in ['add', 'replace', 'playafter', 'tag', 'pl']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() self.UIManager.get_widget(path_update).hide() else: for menu in ['add', 'replace', 'playafter', 'tag', 'update', 'pl']: self.UIManager.get_widget('/mainmenu/%smenu/' \ % (menu,)).hide() for menu in ['remove', 'clear', 'rename', 'rm', 'new', 'edit', 'sort']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() if self.library.search_visible(): self.UIManager.get_widget('/mainmenu/updatemenu/').hide() else: self.UIManager.get_widget('/mainmenu/updatemenu/').show() path_update_full = '/mainmenu/updatemenu/updatefullmenu/' self.UIManager.get_widget(path_update_full).show() elif self.current_tab == self.TAB_PLAYLISTS: if self.playlists_selection.count_selected_rows() > 0: for menu in ['add', 'replace', 'playafter', 'rm']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() if self.playlists_selection.count_selected_rows() == 1: self.UIManager.get_widget('/mainmenu/renamemenu/').show() else: self.UIManager.get_widget('/mainmenu/renamemenu/').hide() else: for menu in ['add', 'replace', 'playafter', 'rm', 'rename']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() for menu in ['remove', 'clear', 'pl', 'update', 'new', 'edit', 'sort', 'tag']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() elif self.current_tab == self.TAB_STREAMS: self.UIManager.get_widget('/mainmenu/newmenu/').show() if self.streams_selection.count_selected_rows() > 0: if self.streams_selection.count_selected_rows() == 1: self.UIManager.get_widget('/mainmenu/editmenu/').show() else: self.UIManager.get_widget('/mainmenu/editmenu/').hide() for menu in ['add', 'replace', 'playafter', 'rm']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() else: for menu in ['add', 'replace', 'playafter', 'rm']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() for menu in ['rename', 'remove', 'clear', 'pl', 'update', 'sort', 'tag']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() def on_tags_edit(self, _widget): ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) while Gtk.events_pending(): Gtk.main_iteration() files = [] temp_mpdpaths = [] if self.current_tab == self.TAB_INFO: if self.status_is_play_or_pause(): # Use current file in songinfo: mpdpath = self.songinfo.file fullpath = os.path.join( self.config.current_musicdir, mpdpath) files.append(fullpath) temp_mpdpaths.append(mpdpath) elif self.current_tab == self.TAB_LIBRARY: # Populates files array with selected library items: items = self.library.get_path_child_filenames(False) for item in items: files.append(os.path.join(self.config.current_musicdir, item)) temp_mpdpaths.append(item) elif self.current_tab == self.TAB_CURRENT: # Populates files array with selected current playlist items: temp_mpdpaths = self.current.get_selected_filenames(False) files = self.current.get_selected_filenames(True) tageditor = tagedit.TagEditor(self.window, self.tags_mpd_update, self.tags_set_use_mpdpath) tageditor.set_use_mpdpaths(self.config.tags_use_mpdpath) tageditor.on_tags_edit(files, temp_mpdpaths, self.config.current_musicdir) def tags_set_use_mpdpath(self, use_mpdpath): self.config.tags_use_mpdpath = use_mpdpath def tags_mpd_update(self, tag_paths): self.mpd.update(list(tag_paths)) self.mpd_update_queued = True def on_about(self, _action): about_dialog = about.About(self.window, self.config, version) stats = None if self.conn: # Extract some MPD stats: mpdstats = self.mpd.stats() stats = {'artists': mpdstats['artists'], 'albums': mpdstats['albums'], 'songs': mpdstats['songs'], 'db_playtime': mpdstats['db_playtime'], } about_dialog.about_load(stats) def systemtray_initialize(self): # Make system tray 'icon' to sit in the system tray self.tray_icon.initialize( self.on_tray_click, self.on_tray_scroll, ) if self.config.show_trayicon: self.tray_icon.show() else: self.tray_icon.hide() self.tray_icon.update_icon('sonata') def dbus_show(self): self.window.hide() self.withdraw_app_undo() def dbus_toggle(self): if self.window.get_property('visible'): self.withdraw_app() else: self.withdraw_app_undo() def dbus_popup(self): self.on_currsong_notify(force_popup=True) def dbus_fullscreen(self): self.on_fullscreen_change() class FullscreenApp: def __init__(self, config, get_fullscreen_info): self.config = config self.get_fullscreen_info = get_fullscreen_info self.currentpb = None builder = ui.builder('sonata') self.window = builder.get_object("fullscreen_window") self.window.fullscreen() color = Gdk.RGBA() color.parse("black") self.window.override_background_color(Gtk.StateFlags.NORMAL, color) self.window.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.window.connect("button-press-event", self.on_close, False) self.window.connect("key-press-event", self.on_close, True) self.image = builder.get_object("fullscreen_image") self.album_label_1 = builder.get_object("fullscreen_label_1") self.album_label_2 = builder.get_object("fullscreen_label_2") self.reset() if not config.show_covers: self.image.hide() def add_accel_group(self, group): self.window.add_accel_group(group) @property def on_fullscreen(self): return self.window.get_property('visible') def on_fullscreen_change(self, _widget=None): if self.on_fullscreen: self.window.hide() else: self.set_image(force_update=True) self.window.show_all() # setting up invisible cursor window = self.window.get_window() window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.BLANK_CURSOR)) def on_close(self, _widget, event, key_press): if key_press: shortcut = Gtk.accelerator_name(event.keyval, event.get_state()) shortcut = shortcut.replace("<Mod2>", "") if shortcut != 'Escape': return self.window.hide() def on_artwork_changed(self, artwork_obj, pixbuf): self.currentpb = pixbuf self.set_image() def on_text_changed(self, line1, line2): self.set_text() def reset(self, *args, **kwargs): self.image.set_from_icon_set(ui.icon('sonata-cd'), -1) self.currentpb = None def set_image(self, force_update=False): if self.image.get_property('visible') or force_update: if self.currentpb is None: self.reset() else: # Artwork for fullscreen cover mode (pix3, w, h) = img.get_pixbuf_of_size( self.currentpb, consts.FULLSCREEN_COVER_SIZE) pix3 = img.do_style_cover(self.config, pix3, w, h) pix3 = img.pixbuf_pad(pix3, consts.FULLSCREEN_COVER_SIZE, consts.FULLSCREEN_COVER_SIZE) self.image.set_from_pixbuf(pix3) del pix3 self.set_text() def set_text(self): is_play_or_pause, line1, line2 = self.get_fullscreen_info() self.album_label_1.set_text(misc.escape_html(line1)) self.album_label_2.set_text(misc.escape_html(line2)) if is_play_or_pause: self.album_label_1.show() self.album_label_2.show() else: self.album_label_1.hide() self.album_label_2.hide() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/misc.py���������������������������������������������������������������0000664�0000000�0000000�00000014615�15003420405�0020026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import os import subprocess import re import locale import logging import sys from gi.repository import GLib logger = logging.getLogger(__name__) def convert_time(seconds): """ Converts time in seconds to 'hh:mm:ss' format with leading zeros as appropriate and optional hours """ hours, minutes, seconds = convert_time_raw(seconds) if hours == 0: return "%02d:%02d" %(minutes, seconds) return "%02d:%02d:%02d" %(hours, minutes, seconds) def convert_time_raw(seconds): hours = seconds // 3600 seconds -= 3600 * hours minutes = seconds // 60 seconds -= 60 * minutes return hours, minutes, seconds def escape_html(s): if not s: # None or "" return "" # & needs to be escaped first, before more are introduced: s = s.replace('&', '&') s = s.replace('<', '<') s = s.replace('>', '>') s = s.replace('"', '"') return s def unescape_html(s): s = s.replace('<', '<') s = s.replace('>', '>') s = s.replace('"', '"') s = s.replace(' ', ' ') # & needs to be unescaped last, so it can't get unescaped twice s = s.replace('&', '&') # FIXME why did we have this too? s = s.replace('amp;', '&') return s def wiki_to_html(s): # XXX Should we depend on a library to do this or get # html from the services? s = re.sub(r"'''''(.*?)'''''", r"<i><b>\1</b></i>", s) s = re.sub(r"'''(.*?)'''", r"<b>\1</b>", s) s = re.sub(r"''(.*?)''", r"<i>\1</i>", s) return s def strip_all_slashes(s): if not s: # None or "" return "" s = s.replace("\\", "") s = s.replace("/", "") s = s.replace("\"", "") return s def _rmgeneric(path, __func__): try: __func__(path) except OSError: pass def link_markup(s, enclose_in_parentheses, small, linkcolor): if enclose_in_parentheses: s = "(%s)" % s if small: s = "<small>%s</small>" % s if linkcolor: color = linkcolor else: color = "blue" #no theme color, default to blue.. s = "<span color='%s'>%s</span>" % (color, s) return s def iunique(iterable, key=id): seen = set() for i in iterable: if key(i) not in seen: seen.add(key(i)) yield i def remove_list_duplicates(inputlist, case=True): # Note that we can't use list(set(inputlist)) # because we want the inputlist order preserved. if case: key = lambda x: x else: # repr() allows inputlist to be a list of tuples # FIXME: Doesn't correctly compare uppercase and # lowercase unicode key = lambda x: repr(x).lower() return list(iunique(inputlist, key)) the_re = re.compile('^the ') def lower_no_the(s): s = the_re.sub('', s.lower()) s = str(s) return s def create_dir(dirname): if not os.path.exists(os.path.expanduser(dirname)): try: os.makedirs(os.path.expanduser(dirname)) except (IOError, OSError): pass def remove_file(filename): if os.path.exists(filename): try: os.remove(filename) except: pass def remove_dir_recursive(path): if not os.path.isdir(path): return files = os.listdir(path) for x in files: fullpath = os.path.join(path, x) if os.path.isfile(fullpath): f = os.remove _rmgeneric(fullpath, f) elif os.path.isdir(fullpath): remove_dir_recursive(fullpath) f = os.rmdir _rmgeneric(fullpath, f) def file_exists_insensitive(filename): # Returns an updated filename that exists on the # user's filesystem; checks all possible combinations # of case. if os.path.exists(filename): return filename regexp = re.compile(re.escape(filename), re.IGNORECASE) path = os.path.dirname(filename) try: files = os.listdir(path) except OSError: return filename for x in files: fullpath = os.path.join(path, x) if regexp.match(fullpath): return fullpath return filename def browser_load(docslink, browser, window): logger.debug("Loading URL: %s", docslink) if browser and browser.strip(): browsers = [browser.strip()] else: browsers = ["xdg-open", # default, this respect the used DE "x-www-browser", # default on Debian-based systems "gnome-open", "kde-open", "exo-open", "firefox", "opera", "chromium"] for browser in browsers: try: subprocess.Popen(browser.split() + [docslink]) break # done except OSError: pass # try next else: # none worked return False return True def is_lang_rtl(window): from gi.repository import Pango # Check if a RTL (right-to-left) language: return window.get_pango_context().get_base_dir() == Pango.Direction.RTL def sanitize_musicdir(mdir): return os.path.expanduser(mdir) if mdir else '' def mpd_env_vars(): host = None port = None password = None if 'MPD_HOST' in os.environ: if '@' in os.environ['MPD_HOST']: password, host = os.environ['MPD_HOST'].split('@') else: host = os.environ['MPD_HOST'] if 'MPD_PORT' in os.environ: port = int(os.environ['MPD_PORT']) return (host, port, password) def get_files_recursively(dirname): filenames = [] os.walk(dirname, _get_files_recursively, filenames) return filenames def _get_files_recursively(filenames, dirname, files): filenames.extend([os.path.join(dirname, f) for f in files]) �������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/mpdhelper.py����������������������������������������������������������0000664�0000000�0000000�00000014035�15003420405�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import functools import logging import operator import os import socket from gi.repository import GObject import mpd from sonata.misc import remove_list_duplicates class MPDClient: def __init__(self): self._client = mpd.MPDClient() self.logger = logging.getLogger(__name__) def __getattr__(self, attr): """ Wraps all calls from mpd client into a proper function, which catches all MPDClient related exceptions and log them. """ cmd = getattr(self._client, attr) # save result, so function have to be constructed only once wrapped_cmd = functools.partial(self._call, cmd, attr) setattr(self, attr, wrapped_cmd) return wrapped_cmd def _call(self, cmd, cmd_name, *args): try: retval = cmd(*args) except (socket.error, mpd.MPDError) as e: if cmd_name in ['lsinfo', 'list']: # return sane values, which could be used afterwards return [] elif cmd_name == 'status': return {} else: self.logger.error("%s", e) return None if cmd_name in ['songinfo', 'currentsong']: return MPDSong(retval) elif cmd_name in ['plchanges', 'search', 'playlistinfo']: return [MPDSong(s) for s in retval] elif cmd_name in ['count']: return MPDCount(retval) else: return retval @property def version(self): return tuple(int(part) for part in self._client.mpd_version.split(".")) def update(self, paths): if mpd_is_updating(self.status()): return # Updating paths seems to be faster than updating files for # some reason: dirs = [] for path in paths: dirs.append(os.path.dirname(path)) dirs = remove_list_duplicates(dirs, True) self._client.command_list_ok_begin() for directory in dirs: self._client.update(directory) self._client.command_list_end() class MPDCount: """Represent the result of the 'count' MPD command""" __slots__ = ['playtime', 'songs'] def __init__(self, m): self.playtime = int(m['playtime']) self.songs = int(m['songs']) # Inherits from GObject for to be stored in Gtk's ListStore class MPDSong(GObject.GObject): """Provide information about a song in a convenient format""" def __init__(self, mapping): self._mapping = {} for key, value in mapping.items(): # Some attributes may be present several times, which is translated # into a list of values by python-mpd. We keep only the first one, # since Sonata doesn't really support multi-valued attributes at the # moment. if isinstance(value, list): value = value[0] self._mapping[key] = value super().__init__() def __eq__(self, other): return isinstance(other, self.__class__) and \ self._mapping == other._mapping def __ne__(self, other): return not (self == other) def __contains__(self, key): return key in self._mapping def __getitem__(self, key): if key not in self: raise KeyError(key) return self.get(key) def get(self, key, alt=None): if key in self._mapping and hasattr(self, key): return getattr(self, key) else: return self._mapping.get(key, alt) def __getattr__(self, attr): # Get the attribute's value directly into the internal mapping. # This function is not called if the current object has a "real" # attribute set. return self._mapping.get(attr) def values(self): return self._mapping.values() @property def id(self): return int(self._mapping.get('id', 0)) @property def track(self): return cleanup_numeric(self._mapping.get('track', '0')) @property def pos(self): v = self._mapping.get('pos', '0') return int(v) if v.isdigit() else 0 @property def time(self): return int(self._mapping.get('time', 0)) @property def disc(self): return cleanup_numeric(self._mapping.get('disc', 0)) @property def file(self): return self._mapping.get('file', '') # XXX should be always here? def cleanup_numeric(value): """Return a integer value from some not-so-integer values For example, a track number can have the value ``4/10`` (the fourth track of on a 10 songs album), so we want in this case to get the value ``4``: >>> cleanup_numeric('4/10') 4 or: >>> cleanup_numeric('5,12') 5 Of course, a simple value is correctly retrieved: >>> cleanup_numeric('42') 42 All the other cases basically return 0: >>> cleanup_numeric('/') 0 >>> cleanup_numeric(',') 0 >>> cleanup_numeric('') 0 """ # track and disc can be oddly formatted (eg, '4/10') value = str(value).replace(',', ' ').replace('/', ' ').strip() if value: value = value.split()[0] return int(value) if value.isdigit() else 0 # XXX to be move when we can handle status change in the main interface def mpd_is_updating(status): return status and status.get('updating_db', 0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/��������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0020173�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-album.png����������������������������������������������0000664�0000000�0000000�00000002361�15003420405�0023266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������ pHYs�� �� ����tIME "\z���tEXtComment�Created with GIMPW��LIDATXýMlTUt:TX["`ԏ5n\(Ĩ$~ .4n\h 7nH4D(1m)) L˼. Nۙ)gs9Xv8[^ RQ KB@) 4Q16-}8sx`pIB(gHc=[__Ip�Cu׾9~a ͮNi͹g[x*)kw@>cN拣3řtzuE]5 <\q야OZ/n*;V#jغ& twT2d5ӿ#,(b鱶, syƒYۂgd tp�-A5+ P%[#L�H4p�/tw_-G:pG#<01x?[ܻnsU+A(Y i`H:Z,cb *l`cC vV-xNSX߅lV laWG\V_[grf"r%lorƺ)n.rz]`guL&0kk s159n FkŠ ߧ\,B`BHU=|O)z׮5F, p˹V^ Ԓ_]͞Nzڛև4# ^э7>Wd,X4ۃz# toA)zӅjEGQ7ɻo+/L.cߎRH B1ʤB2W$]-miHe-<;9zxZ=7ds@^_șiзeH4S j);wLƵ_N5{KHYVYIoGH]Z80D2 ώI_3.{?*R7ekŬ4)qJ#khaB ^1P#~x�L'J&Ἦ]􊗭ϟhk�w77^7:88Sl;s^>]ds 3C5-_=ӵA<tDB7.G_wl3VWxn{Cl_cԊ-=q����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-artist.png���������������������������������������������0000664�0000000�0000000�00000006653�15003420405�0023504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���bKGD������tIME F b�� MIDATh{}?̝s{]zzm1RR`Tj"JPF4QDg(U[JiTjBIRJ^c^>>uc>6 ?ȣs{5~'8|S.NdO+ _# Ua5FǑa))^3=O]m=<zOi!y1Z+LOMjD)M%4[-5ݕ~dͿ^?UsˏesFN{%ldJ(ZP)a Dz+ʯw;͏~sV* Հ')\\őŨ4!Fclw~tVɟ÷U?zj)b@ \A<  i<@Jj7+|hZ'0W@^ɏJ6j##Ց2P"RHX\ܡG\d&,*Z++۶NM6:K+P,qI'hpR#!E7iԥ1^tz/`#M`-4>t<r/&[Ax �) XSYL:Wg)T .ayWRp2`x/y2IRX$ �Bfq0"`@0 �qbGS{KBQb9ͳJk!G>?^)R"2AR)4%M32PZt0,mҘ-UFX`TyۮkiWW{|WIE< V"NSD(t$=ˎ1͇(=~ 'EuHNi"fvRr~�\I^7;}c9B x8Ki$ Q }SjbM,nBbMd1q 7nu˜:Rq<�}lqQ zADEk˾\.QjĨ>+|׋c8AY %[D8>BQ),R^N{q[r ch7c%ESl"B@z ]tԧ|$}U�T$? n$i&%V&`L2+"<?D>w})-/WwN-u^{l-`q\0֤X1-cV%XU`5jk^Y&.ew;˵Z'"+fdo^abJ^_D z}9=䉪<>f Fa>6cU, ͻ<씨rVfau582>;Ƒ m t>ZJV:m!V#1*¤=LêVB4q1g3?WkJZa~M@±@P~Ź.0l05Bay`A!yIHDwYmE:ރ{v9pc4R. |B%%5ŪXTaiʎwC<pՠS08Fklߺ>|ڽ̡T`�C8.M 4Ksm2mhLZA ;7n^sD%u4V�.B<JZg5`-XkРR <_PzR|蝜8qm%nycLI:UcggOdo;,_[Kkk`0v_"Ϡ0Ŗ +U\΄DFx?/n['Tp{kO:W[Kaэր gk0~ų2O&_=2AXMT$Ksn->ǏvHʑSA\b]ΗLN"NYS Rg޽7QG8aq-Xe)zZ4Os8xJ~vޞ쎱B|z}?/zf3@iǬ8TGkWc/ clfFcY+ z[ko0q�~^wL̒jvJ*L[9BOl؜nvݸX2#FIk ak_Vغm3j ;JW)3ls3.. [!;K}nL/ؽkkE<q B*8J`9GvSR{6҅ͫ=zeRMqi49(UE-))ʩ[Pǎq2KSG:MN>o*V-`-֚ CY ,7WÐ0 9($I!5,6Z?@ǎ?Z^hwΝ{LOclt/!NzB?J1zphX0Fc\E/v=X3ڰ2XJ?R p$Sq, Om[N8l qmX#b_ƿ;PzuS%~rEů,A8TQ*Rc��+sc@s>G܍�G8Z8O57;-5lT:_sj1];{Ȯ`-v+Yp\4X-k � ]~<2cŲwpBk񬵮1ާk'K/Ѩtsa _xpt}SANHG,57&@\ ! B hzd|lbV<k;zM^8>|5z0&P&`I%6_WbCpj:2_hqA['qcbGƙ&�p.Z%t{qch<"r7&[jqnjn7ɻҵ:zeXat{5ໂFY2ֺ?2?pgl 7_FvlJ,vMIv^ج[%&,RZo}yb<rhP df_V)V+�8ZK(+(=|/m5V!F-~.L>B8#].kecNJVz,6ﺊ�VƨWhH镭5ָXXk% FH%̄IܚSsM�[$/ju6m "d8K~kV�p9@r>|i>byMP ����IENDB`�������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-case.png�����������������������������������������������0000664�0000000�0000000�00000033647�15003420405�0023114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��X��X���f���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<�� �IDATxɎ$Iv(ث(\# ??л#Y,Ƭ)2=^Xz$*v@UKkͿ˿q︰ݶ 3w3M^G3>ϑ׍>gY{*f̘3<Iz_-gy9߻2?ls>{w-2-ubon綘U{]I}w~t}1ö<_Xv=<}-wxlkџYó>A%dqs5}}ßY朠n_<_>}Ob9u~Hcc)>"b_~I?8η5ߖc{tO51mcog16|G]ϩ ߓ21CC;Ʃ9x|t;亓}}4QOQ_Gyx:#_Ǿz>W_D]+Զ0 BPF[CyoJ_O%œUݡv]>92e0xƐ>9Zk C 1Ϧ&Fb$k}ro'3g[ư1|Ke Ɛ߮c^m3XC>1kRSǼlk n cse y#: KO_wŔ6K#*`a~sϖ1 ֖0x`͹jYI7a[Z5ml9ð-a~u$`hVlz~sv[C6axlζ1 aN}HZI[s75ir߲?)mua|+bjCz{o0ưrQsX_cƐ:~OEE9/_VfǢ[x1[9կ1 ٖ1Lk}W%$mOOuc s5f S{?CbCj_<=0羫mMښ_1x1KC7l_aBe.Rg2lp3<6g[[C~sql1<$R_b5R:4uoζwl[9s0c}DCBevFajeǎik97g[k;xT%B 2 j*LC959ۚk C؜mݯ1 =u~IY*ԺɽY959lkcLFĝ5X։+6g[0,6GcKBO:`u/u9p %59Jaro bs5t 'Tf(:X[q{ζM2WlζC<92c_h](Z`na K%{P{7KRʖY Ğӛd~<ml9[눸$`0K'6S9[xZ_cvs05]k !bza *+'v~axlζƌ!Ga~:Tq&(!Ykv,I5Cr5v_*Hʩmj7 Ο뛤1<~rϐXxlζa RI8[iX;i oO_ةmwmo pT]ona*s>9*M2W0Wsϖ1 V1bP]~*<4879/6g[Ɛo wO2 }bs#iKix|o51hc lo]D\Fh54:K5ۃklk~_l6 g[k{xaRRKJ^x7IcrQsX_c_٪7Q mKI7g[[]D\~.&0P2 ..PO؜m Cߜm1b0[zTfNVc_io ǯcT}Iyj79֖0mx0&鱻'U48 4==q7[Zi+GƐc}iROlζFR=j59lk~K0,v cX߶7O.ivx`Y44KUqU1hưVka$U׉k%K(M2w0<vj[PR[eD|}y iܳc>$Fo yڐ7g[%.">DG5\B%<}c3U›dXc-ܻ1 V1\GĻP^к+uYcoO_ô=g[Ɛ "}4U"(=X5RҎc荡olrNcEn騒g:7>\خKbF+k=m>`c 9s0^F0&kg2i-}<lk~inLC~i1 {~Ylk~Km ^uخel+Xx{c_{Ͽ1\>h%]kz7mp[xaJoi>'6s%%mO/87sC~=a:oZ:ej|oSbsv9V cJ8si()imїomc}?>cHi.LCصrcs` DZ xj2 k'Zb19s94[ e!i bKzk{c@pRԱfFih;V؜mrsx%"3Vs�G&i(u-{o[a c+޷K KJڢ79 !U"S2 R:4uyVۧsxƐXY$7oaj2 k}lk~KC6m Cbd2 m-|<~}cCIcT΃-$Z4֖>$kÜSs(cXZLˁ-Vcs5j}k[#]D<@64ؤLCaucX95ӱoCb,([RgFnpa5<6g[K!Gc/l^6LC؜mLZ1_ζUD|M1 0AejxV ֒,Vp/"M�`q=Xc5RPOôs~9Zs xZVĵ�:*ӰY?`r1hc ϡ1"MY&bVE ZcQ>$KC6j{9Zccv8iX{vix%% 0)!s*"(Y2 K5&i VsUj[uD|6^aYLXauncSڽoO. ƨ2 }bs3ikqNV5;9#ﳲʨ2 RMT>귆1y?5=."Աf ('v~a6l,/#[؁ڃ5I %~L֖Ɛ<Rۺ tiy9Tl7%ǐ%<%l`d2 k'm[ÜlkϿo["hD @Tf2is;${uw6a2 5%mQU-ahlI?xoZ6mR>9ʑ%4< oyu\?p)ml98*2944KuLCV[rP"WaO4MŕiX`9ѥ|H֘1hc ϡ1VgwC, CcKPVW_8 4Ժ@>sk d[k;L84,Be$<!xc~s܃U,՘1DyV[{ 9{_G8[:Xj8U՜mmi K7G[ëobKpֲiI[at9*_ cH\@d*P,Մ2 !%ǐ-<5ưo"M�_a~|?$7g[1hc a1&v? 2 }bs{v9&}N9bC6:ˁo�Тu{lp‡乌{Y+bTbd!g9*u C+k|e4͛D �=܃U,U^qnc_{NM+0Q%-RXaKK;Cc^׉k�(kۚEYk[<acz A|i(i*C>9An5Ga_Eċ8v-�TS!W4!'1侟ZÜcJ\D4VG:!76g[s!GK>C5窱̧uVXˁ=?p4pYOs�dԹkv;Plk1|_X2 Ru!|VWlrUՇD,�3YLCII[n)>\cxVy�f4K>s2 kr琳ϱzRaD=^O=}: f-PrSVcCWc!qM.'6g[S:o 9(9}47X2 %R=.Yo s9=ob.zz-P/֩1\G_�(S2 Rm}oζpkmDFvr%7oaj2 |o~P=X[LZ5ml9=Y+�*pS9he.'6g[~ЏƷ$[�XLCc~~1guD|eI.{RJP!Z?V~ob?k6q�VYK[W½Ǿu" *'6g[s'mQ؜mÔϐZ/L%%<i;G%{/ $*'uY4Ahc턧Ol>DE|NP2 [Tmhc ϡow%AmYLC9\OlζjJV漟C1Ei^'r%-,NX:c�4,֘-RҶTsG_iv8�6"{g2'Z~9X|h^,˅Cb4_ζ|#?i.A44K|r,o O~OC�Աf ('v~p/ opfzz~su6k4׉s�2 5/vsH} p&V)ӰvA?$vH[9(9LsDfv�Tf2iczo |ejJڢolq?CbK/fv�L*'6g[9DG-o1iH|_S4T6K-$ s;ofv�ZWaD+u%ᱫzi8TrҳcCĻ4Դp>srEDfv�<*ph T 'Z[KrQsH~MU<�g-_+Y2�` T'6ה,|9n3;�Ce)'6g[#g5zWڽ|bMA,Kf*Lr5ml!>lf`4oAd-<E|8� .'6g[g~*-:;3>?E|�i侅K{ >)/�0XԱZfNŶ(9ᙻv5]+MA�9Y^q椡ol6jN8oc_]z�ff` IÐZ=G[#_ո`Y4,Ԥ-J췄g)U"�&ZaYelkd%G>o4׉s�E5er;LC3]cFM쫳&lFicZJ6j}cmA2 5-&fgUR“SǾU_�ȩs%%mO/8V̐Kډ~M�0ej|)Iж~Į95�04EIжbjyh�f7K>s2 -!Y9~3D�,b2 %R ܋UR;Y)-;9�XLuere$<s~Ji>&EM.'6g[SgǞ8V̐m"F\&`q4{Pɽٙk'<Ccuω�XE=XSϗE]3SbKKr!M �Xͳ,U1DICخs ǐ\Pg%%<K&mQf7X>4c\I�(3Xk'<KۢaJ9ڨ%�{^³rK;Ֆlqk�h݃:Vr`Dd%G5<OO�@Q:K50*mvfL[9ڨ9\D'G f2lp!Y~JR%W�TcP>9ۚ;i2fg[=,(�U\"uj2 }b{:eA�9*ph T iX2Y}?kRI�؜2 [ThYT[WO1�PE4􉝣הhYTUD+�j\"rk%+&~2sfd/Ӱt[c/YF)Tc\]&b:4=K9*!YFɉ UOlζr&m-J:c~NOZ44Kc{3=5̰"+�6Աf ('gɤa"�܃U,UWlhY$W�l*eoy?k'm7_\iiX{v,NVJM>]D[4D�)~*g T4Vɉߔh7x�؜4(!Yߘ󿏦yMTOlζr&m~--2q�جIeJ9cLOJJ.ω�`Ӟmyj`:[T#?�yeJrbd%GkRbEĿGtf�E4Դp>mjJ~Msh�£2 p5m=KzP&q�O<K5f |,Um~* �ge2 %%mOOukiHLˁv4d)'6g[#g5zq?Ti_$:_,UDk'GkRC4͋5�pT%ZK,:hmY\OlζRirK&+9(miQv�8uVXT iH%+9(miQv�prjJǦ&+9(-ѺUQ% R= oyu~ V\ET�e-Ӱt[cMuTL ˁnb?su8�<qr뾱5,-|J6֚jkTi)0W7YFiK1�]OlζrΎ|JTmF|�N]$̝6Kzo#m��:`M=_RҎcCmxMK�:,P,Մ}W]$UcXr+v:�xg:��IDAT:4�==+)Y2iIRˁM}"�`2 &m-&+9Xk*S8�0Puerӓmx~�\OlζΎ==qlk$mD<�02 .'Yu*{�FkLi?F8�LЫLCT4)qh%�&Jnr,U2 m15-~K�yk -$+[X|89 �rԜh8?6Yi> D�@&i(iv,%+}+qi%�uJ+ajjHg^-y]� leJʴY"⏉X�`4VΤŜVζ) �,jPf&bY;$��fԱfzJyPrE\$�ftTa T7e74/�-'v~O\')}*1"~8�, DKRb"Tjd/Ӱt[c8NJjj{_]iX{j,VDTmG|�4LC؜mLڞ:,U*SDg<�QeJw}Ww6�܃:V,U2 Nx7v4<+!Y<éc%R~Mu]�`%i;W' SJJ%bRaٱS-_*i+3�yS9[\8Khw�f+PRvBTm&� 0LC؜mIN? iyu~hD8�PIeJ{m4u"�(Dʙz~-&Z<e4͏�@A:4hMm{nvO[{9K:�04԰ߢYhA�{TPmˁRg6s=�@=X5RMH5zYy� 5{%mIJTC}L� LC؜mm^Eˁ¾+�R2 k/-m#]<|hD<�PA?3J{"D �PelkvllQ,U*6"O�@3X.w5chi�ֺ+uomZTm- fTaY1K�GKʝh==qlYXK�Y4,V6JX<{`3N.>}7vƥ,m^xr뻈A�؎j4/j;'K�-4V6j;&"N�{Vr x7vh[`:`M=?5iBж, F,Ӱ,1矞8cA�ذ4 IJbYyK�qi$Z`f)Ӑai}`r!K�p+{oaxCc- h݃:DDwA�84MÅCz:6, k!b"?, UaY1m,1A�83MKi(,D̳xmD|h�ذ=XK'>ky_GFtn��r,*k}? x=6[4EW�Val4/*"l�ضleYLYk�ضle0mŅ4M"�Ae=?_]<<'b�32LC}Pk}[EDk{țh#ss}D|:�QfZPOlľb�@<[2ƘOOukj;6�2{m5gRv�@2 Ǵ~/M\M4Ǯ�LCiT7w{6�O*04vY?Eܦ�WrVo5K@<0�pNJ볩YI�=XS6he.pv�U2 .f*Zv�ler17 6ml�NyS9cm,ݳTmml�:M.v|Y4"6�]&i8:gmo~M!�Ie(Ѻ?.�xO:v꺒'~{v�2 m5jjK;GLj�iS,U2 �QCs֘-opMC�6=XSf֞4�@4)i*Ìhw`�SzixzY!|�W%gNm+3VǾ8j�2 6ıB�6K.v%mѾh�zJZg&i.��ٚwbin.�8%9Yen"I�!Z+?=^,2 k �W-Rulpo.�WKJ^~M �裳ډ\I[\]DċT��'DtNu�Zk T=EӼ �"k T=b�X=Xc5R !mI�`magW�,iX+њhG'�2Z/.�dp>9ʙED|>"�Lih}|v�{Rj:{qqww~�=XR}\\\]�=XcR+�`UiݻX�9ROU�0Y4W_}u�0yP,U[[o߾>�˳RŚ�ֹk5>ě7o�S=XR믏��xxy�%YX{�ZO^]]ŋ/�X¬e&�к+uY777��2LCi43�{_"iv�XR2 R>܏:�[LC>h��uY/_ϟ?�,-9Q_gq�R,Raٱׯ_ǧO�![>9:L^�%9^,UwŇ�2LC؜mI^�To^\\ě7oRC��XMrVܳTc�O夎MxQ��k܃,U/_n;�`miș=(�4۷o�LKq�R<+u-iׯ_�4ŋk��JQ\X˃�@zz>؛7o*5�bti( �@ N.T*~��SU,Uk{�Z<xlrzX.^x1�2<ǿWJ=~!nnn��P~*'x-�5yeixpyy޽k�@a~N~_KJf��js0ooovxUq��=XM\^6NPիWq{{c��)z/^|QT{*%*'ulzX?~?v��0?`U="�K~6�J.]իWW�JHln�jv`=Xև�Jպ+ulo~׍�5aI�ڝ܃:67 ߽{777o�DJa �؆e$Z.~7�PY4͛}��:Kò<�l2 9ix{{o߾t��܃5|O��k-�[ҺDT=x�(e^~<�PY4U �ؚY4tẼ?q�RM.'+�`#%�^\\�(_2 s2{�lUo� sTk2 ޽ �P Vļ+�`)p8;vo޼p��eCi۸y��;>Wv�Š2 }bOoN]�=[j{Dě7obMc�%`ؗe �8'*'ullu޽��܃kǏ.-�m2 sLC[ �84*�/[a�Qen<�4v�E=XSο> �Ueò<�K94�4DD|)nnn)�@%f+` �8W4tJ�strRn̷ �P4�ՠ=XCK�sջLÐzXw �P VĴ}Y?~\�P4{�Y4�,e]]]U֛�ɳ?cs;�@2 s7Lén?~}��U\7 ?|L��IO夎u �cB˃��{R^)��'&Zs�@ui<�L �`r Ir�2 4P �'{�`ubI��~1L}|i�2 >}n7�Tgr��\+�&i �ౣ%ˆetk��u+u+�c4ò<�ps, ��ǎ`ϟv�Nr+��l<K��:* � {D&nnn=� *�@Aelp�܃:vZQ�v?Ӗ\ϟ5�:J �b4H��N\r�2 f��NT.+� *ۃ��Z4Y�k �@2 G%X��N.>Ų �[2 ױ햻3�J.` �e�O`�Z"�Y��j֫L+�3X6�G�UA�_g3X��tTurv � ��ui<�0Lg �0{H��96+�܃e �`e$X��Ý\"Y��*wrP�0O<`�pL7�{noo!�{,�ӺDx}}��l%B��D�Yk �8R#h��+.V!�%`�/Y+�f"$X��SX"� �@f=Xf��Ki`�wT&Y�~^�Ls]�0, � �@f`�df� Gev]vUo�v^�L([>��6,˃��ә�L�%B�`I��D�ٳ"f��r � �`g$W��yH��2`�d&�L� � 4H��0� � 3 �@f~�`�df � gf��rz�?�  �@f,�̾\�e;�@f�23� � 3 �@f`�df � 3 �@f,�� �@f,�$X��ك�,�$X��I��2{f�@^f��2`�d&�L�M���L� � 3 �@f6�df � 3 �@f,�$X��I��2`�d&�L� � 3 �@f,�$X��I��2`�d&�L� � 3 �@f,�$X��I��2k~GD|2>WUD}D?+�/aYI7�l%B�$X��0l<����IENDB`�����������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-disconnect.png�����������������������������������������0000664�0000000�0000000�00000015362�15003420405�0024324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME*p1CZ���tEXtComment�Created with GIMPW��MIDATx}yxClKmݖmlK2@&1!y2{Llfd2dg&Ilfu2@bg7a 0%�}Ƈ,aݭ{nI-ɖaSUUw{Q/////r釔W/ʩqyEvO�38ާ}�|xƜ F�$(_( *Ͱ(0-Y{�WOnr si> |r@ (%ɰAT|J@y�Y[4D!a> V\EBQl]'��"b��BbZ�OΙo!Dy 55@@>�Z1��V`ESw̘, ?�!gV?f�TK}�dF)n@dgi;},[jn@c�s BU`( -^wgTc�J`sZf$ZYR]/gVYH +!d9$wZLp ?PTq>�2 M V%`i殔 W " p ѷuwPd篳Bʩ>�2" Q}`u.<WT`�rBN43sjv47�(E_V/N�P (5DNa5 1Z5soWj; cCfmm0-.k=/D�LnX+?vl0ML.f]/aJLbq@0:�Rԉ}i {4bQ ,0) �Xv�~9�ܴ@[di7 >\^�((^<0wuZ:Vgne`D!e}9*2��<?0�>j�#rqnK$ŢgL ��V`Z+�NG[)kJs`*YY[Zx+�t &!q� @u[Nbޙ^ !KEo?j >�.#aJ_"GC.֓T�GC uh0i.!Ǔ;|�\bgV/ P *0vXfI ģNen?tu h\" q>�.k/4`8P9� vS?{NvӐ�irz8}�)嬹 I.?h8~(�{H|:)55֊JVp ? SPVRr@hk@gL{-lGJB"qc��k9d(ѝGP>dxϏ=ArM>�.EkHI%{NS8FrTџ3D!X{MOpqLP ,)wz 5jU'Dq)A!ۉ>kQ@[!g삛o,K0v�$j- k@ 9O0pL3}=q/!�dꍲk�H7-$Ӫ N4"z>&HtQر<iasי\?}l&!r5:9 )0t3~J5|a 9'`,�]PFRVx:r?<7/֟1s4Abțsʬ|�^\l d(@ZN�C@_v11w|�\5dT#w::X~ת{Z7'Y`Usf"x0r&7 Bu꠭Nx N?M'`bS@!f7,KѠ?2o@_} G{vBDiYWo<gIQ((yxʿ ţMieZ<`뎳�LBUKj:$gbڬеCx`A 0O֎s� )r uɣ3f0h9[ObХwF Ø{|�L,�QvHLK �cl$Ow!}'$~`4[AD+>Zr)8p�Y>�&N7` 9:r1g�cCBJ9Q9DIN8T? +j$|��F 6ѓUKn;- @8-F`� .0DVuCG1i (wz)@Y�L`^]cgB1C@x6X&񃣞T}�L %sI%C�cag*g�֊ .�Q.sL5.`"g�WݿSJ6} Z |9[t'؉L"D |5:u Y`ÒjAŋI*vO8~`"M_M,UݬZ3@ׁͅuj{~^\&�eDBΚ;(Jh8fR):)K^ a,C=;n@�HdqIZ1L؉$$Sp׋)yN5oci``.T.V!gnϘ_Nu�zuHS|Fk ʡҬ�&8{;2�pW9Y½>x�LEҴ߃VAl+-a K9T?8}�L/6)U&�dV3L(Ǽ$fȖ{{tW+b &N5 9ǁrڝ}{bPo7H*ӌ�$Q8k ubNhz Ʈ/73`" � . aT 0nG3'|Yy? )]cp^ yWJeNv($�QT@$g:u뉶U>�.0׎pb:TlK p}y%._(}J5}0 n $B9w4uKPjnrƻPIp^<�>{$ʟ6ˤ`xՈ˱ (C_^k0~M: @]1@l#H,aҶgҕbWr\(G[/J7,້pӘ{$x�Mrd�)DHPN4%7Α3gC + " };}ƻCov>٭N:pbkuU�ų ҆y_}Ya!+ 5{׶Q*p5?2& ??" �(-آ42t=E|\Y0s-` Isnb86� -�(m0{טU J{?zWMo^~:N30CN�Eq#soߍi>w4�afqx='RJ |A�Lu�0/�HBX*˨Z2ͨX|țf`91O4MB2 k\_5}̱߫/<~W:%)Yy>O3C{4ߑ6@`  @5 ȝ ޾ #ĔdD(b{\EDzcc/gV}@V-_`IBLk5Ev9 ?G?}F8YT9LAىQH<7DXT! DD!G?r/p? Dd��UwuN%�zX}K즫ea:듊I^ԋI;{c/<rVW!!Z?3?rךBԏ�0D%�.w7<^.5@,?B#h]kz|wT�@ʸz�¹Vh1}B9a,JIC7Yˬߋsv,Lf#m5W3�!)4\ p531u4q�* o1C7nXpն tڗ�mߝoT/,Lڲ)8bY_0-bvo"f (oDz)S(0E"xthEC&3�p4nXQm7O�U~7v,]dZ+zS EV-T�hu=$p9I � -Z2�* d1%%Őr'ֱn J RB g[Y2YvO OꜳoW\Y" U95$�NyN(I la"<ʭGOG0F?o̙}2̥K禸8C}N<tۭ>2xo`VyК&0Q~h `&}�yOMv)x ^qQVj_*i&/i'1\/\h 0f?ֿA}iPd� <P5Fg�˩fm ŸQWn؞�' ~ߣӡkɤ;1t__#⿬ܺ牋Cb?1B-"p- Y+G:uXJh>�{~ɘ?䱣8lG@Cy%kpu<eSʭ{D%� LI�̜} <YmOlJiHP~̑.rnE |`_P  q}f$ o ~rnRRc��9ƠPv)a5.gp}lGO1>NϤ=Az@ ) %�3${tc=M� Q+H$qў׹ýh\gjZ?Do0{rTŠ�(*�ivYhW@&l\g(굢CHwSkM� �iűH3X_1u˱&icv VZSk"։ wM`Q{DtoㆺO%P殶V(+ѮV0{c @iU.hMzge{ CaHSB\1SG7is]��?ўqfޥZt дN6mK;C*փ~} tNZui_:ԔvZ27.NJ}Ӧ@ʒ'ǯGUs+;1\Oj]m\DM#+kuVىl>0wp; xҊfRэ��tsZ54uG͋a5ubE)| aD7=!o[erhv蛬kud� e9Tbۯ>Gկ.wra罗{0*?hNnɪߠR F@x =\ xHiX{D13]8ɩٞ'w^x]7}I_a"#M ":iڛ/ɀ4#ZZGF@XH9q~N^=%{`أ=vrڬ6X+V]eK[<u;}@4)Ro.$:HK5,ka+~jϽKZS3Ia5Qh˷%i-LN;o%i\w&;s/E)a11G7jz[d//`XT '*Pܱ{xDb)4R?/apX<d1�/[j.je$fc==~߽I Yʡ-q+AxS|@K[YϪH8~O]Y_ri9Y OsVnQ&N FW*ul+AsCspocu' 4nl#7&nQ.e'( cfH?(-H#\?7+wcuðtK G}b?Q�~ϐQ6+(R<YdL>;G::g~ԣt4Lpw}k8qq 4VH G>%m}nTj6CwR  !e``YR=¹ ȴ` DE(kuZ5q='{ Ïxݢw2P& Tϖ=ڨG6m1εWeۅG\�F HCW}*db (NVL$B ʅ4@ WpJ9h.d;H;vsOlsy[wLӬ=s'ǾV W<{V<VjO$$a80@VPP8Oʲڀ(e4$ SR0$# A,X);sښӭ'*:'D////2ey27����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-large.png����������������������������������������������0000664�0000000�0000000�00000026160�15003420405�0023263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME:2 ���tEXtComment�Created with GIMPW�� �IDATx}{\Uo}NUuuw:ݝL$PQ #8quq\0s3A3r3"D@(y@HMGүs^ϩsN~dIu{{89N89NM7h"/pBz`ǎaIG>+> AǙ"Y3:Y�fq&<E.8e|F�QB�n*ϸ2#v-3��2G4{ի̙snkkl6۔f'uoTݯ}w}��M'#8?v=W .miiw#ͳ>[n�� Z7F1@gqWZf:$k===6mÛo{=Fǒ h>k%[nl7M:uIlumذa 7=�F`#⻖ ^z鼛n%K\vc3_{o{#>k�;0%~`�4|_쪫V>o>IbaÆo_wu1� hƀy�~o}Bq\7^}>}b7=|04}݅}#=Ǽ�@T'A%b08 בXL<mj̛1!ȑ\߾}>w֭[Xߠ0Rs@# O~[9眏 <m{۸?^bqHG,$1HZz@ %VeB !@Z15 V(~ѻ`Zֹ+iYhAK×}]vLPc8\//zonozhπl},や �$)$0J@`К0I(H+_{Ax4*/8NMftO_qy^g'a& &vmꪫI_>9[_O<LB8�$$@Bh~oCt:f! *�V;v?+؆|I6?kiW(yoY]x絗;ӧr?7oWt[&c h? +<oE6u샏?vC[g&5RN&uH$jjڞB`QkgfPP~~}8z++dt'<_c�G-VP) iii{477M;}}wx/:'7S\=l0 )_� ""MD3 U41�[ٽ0K"bN!$iZ:L;ٍuiMuϟ{qKK F�? fŊפyҠu $"!%i1FC(eh(Ypa a^D$ ~~ƃYhRCέannѢEP7ம.5Xw�Lo|_2L]ʋ^4rܜ#4Gm W%_c8||p!#$tx=,kɦSV,ظq�*E a};-i_=M,  M3\/Wd?Խg$ H!7д/Sk:|5PPϸ[|mޮn76!t2,!- jL&бM#嚌�C%ow<:""u:k=u{ӞSN_f͵E�wqeCCCkǟ_~r2H'ko zo*VM#%aCcY@B:S]cӗ΃irW~2 @ x+P<5i'S=s,+)[W7qB_k4W&eDz S*K}AB@ 44?ߓvz;\׭tCiQw[[[̙s~uS7ulN&$](2y"$ecNScQt7KS~@!p^.;Wy}kdc0@%87tӥizloP"Y/d a'į2&ܷ oih;aA_1dHp(SpӮsg_fMf@ ;ŋA̦NdruNIJM˙/'"֡_95Ae$h&|([&,]|w}4-"1chLL:uYR|r,KW` >^/}(Sk-g̞q-OID4FykSZ8$e WSmօfPL4ivv?xK$kIbTfM|fcw \>=rqђvКK։@J}:uC2zHHKn6=Ǫ=8ε^p4>@h\u¿=!$dԺnت(nȞ<K;Kjnd>2�2 <[PVĜ4߉AB ;^;48`N VJ{c�NF B p}T$yC̸hTΞ, P�|4qIdl}3It mhhhQZrejGGO(IL}C5޲`�9_�"P0 L!=p6(y_0iR$ޢJ۵u*k.9Uhix~^m4�(\y�o?&h�僔xpPRc1bg`*rƱ�CY$69G;^dAj>qFQ\pz偕gT?'\ C DO :5z:Q=OO?cA?<I@|fƅfƜOi'F"}VChG�@9rL&J)DzDdH`˝~!X!�px4LL1P~C/_p�$~03q>*ag4tDPa֜YSbMkj6}`V~hc#cN 72q~7q&{-% +;b|sy*1BV0a5#ZCj'yi�{CŸپ)�/Y3p6=9v¹- @t`jXNvk'067V:?j88&BHsqQb`0y`僼N$ 0lqHq>S\YNkƞۯ !b�߄| �ap4?>,} ^DUf՗u<2Hs ">;7ށ)֬<W̒xk!,dgKOL'iNG؄O iXw�w>dk.B}RgBèHbDv4 LگO C@>b  ~}On;3ZU̘k@L~M@@Ij�Mb\%?eW'5NVh�\ga9S&�̣8u4vuo Ι }(/41&-}gqx{DT"X;3Z*i|< ;{�i`}Ob2}+P7c~!4ф2 ='棶$^˥?+�:BHOV9ktx^+)30({W ?a5@Dݏ I) fUP"[β`T~ �B\y{lc윟|%58`�) 3 Jt$k&R{0 ::.> 9Kȭ5>�a҅;.HP]u{߇7eqeKL?�H?|I*/E.o00E$?-(&a 0Vϫu `I!T} v37Ѝڊ{Ǽ%X3)av46IOqR?ґ6 %a�;:JZȘ=! #Hp2<UʹZ+SNY)7!�nr LȊSK hC $`7nW__s.ъ?]d4̧ t'*0裔sB�T0~-/(팦ΛV࡭ Z@h[% +Vw7y<df-+\Ek �8&AQ12}=0@E:VG=u6gܒD*AВIM8`?[7v�nmUsa~탅2Gu{ kjQ�MQPY32$A M f[Ql4> zo ;}epZJ< hkWIE1$ۘ&E_kD}N63C=]D*$|$Ld f<\d.f䅝!�Bx/؉W1x5I!mЩZ%`fXWR$Pjj2tf#.�+iUexƀĸ' _ч@%Y@.cKLHh@p#)%.o/`[a�ŧ3dSȃIhհQ$`a- gWV/ERk`Nh˺_O_L$C ]v�ΞbtUQ'A�|B2@�CZ{׊,>aFPC8g~wcaD $.6�\d{yUJ`=JjS"x|~rln"T`ma(겥wB"^@a8D|8* x "hI(LTS2Lג aeˆa?ۤ}+p~'b-7!mf~%*` r:)~ s�2bplW^M $v˪ez}_Fᜂ"Y} kN0�7y.#{C!Ӳ2 w16]]]Uk]Y3!@vB,JԵ-[Д;�̥kcD�q՛o v;JJE/v":qg T>GýB^C?ٗw Lh:1+U68L ӏ+q%X8w$�|Ȭ"'D<HJ` jnV Fe^a<yB9!>8jթ3ʔ+Œac~i<d‰(i5H8x٧bӞx2 ;c�Z'i\)-[f,ϖeImQJCKSI ƪsb;݋MF46&P@R5 7:P}8K~0^&`Ht*蜝^DRn fƎ@B=jI8B<2 3%'tδxp ^K> e"R_GĿա٠p4\MѠ8c/HEƀI.w؎C9k%l҅J ,wtQ.fᘄDR], HR[853f�_dJ4I%$Щ,'lg9"@`qBGOQeI�03 5DG#>!"0h;VUk%@8k8ox>>]P*hxkGX@kEV+Ҍz-[}AgLJ($`#Bjp)yۼ"lz+qԚdžFbI</[vAw߃Wy A$J c\ad�>_=#2TP 7/eL̘X8�0pC`iM<d:& kNJ%ɗv]fh"ZQdÎG1a�HԉUO $7/>a'{Vb*sq _(z40AqIMݞɶBB*PD"x2h�ec (#@Z~HX6l,k!}\SaeY�m=PbڮAO,Vf~ggc%!s ^=?8>&`vqCJ~a 7w3:_*ҙ3 FmD!S \\ woG7mxYi-֤X;2NhPlYA$�^/s\u!+T]@9}2⛉ @ɗSN .߄Lǂ܈ysh1X׏G!{  S hKX0IbnuX}�@P|LN >Vg6hlp!WxʉoA  g6gss`%$ee0u2b�:x>?m^.}לH=]) ? 7!JsV#9.A Ⱥ4ʹZae%Ugahŧx_K'R&-c`)6ͼt[O*}ׇHbH_Wwݯ_0˃s AO@_z�\ $H)ӺV͏!0x}@j~:obg`2g+A~]B%P.>2RB]WMMN@_& >7)Om覥`q߇»/D(L�.PH#k&E) '߬l:ۘ>X:-b�ؒT6cs':QQ5oRr:3:)_e%>U`gDGM6 %)^T6IT&<%c89@<ܖ,I>bN(DP[JְfQ5:7?忑EKO8=_aK1! T*Kd[>l_@rlǒ8ѥL̉@*՛7e3�3c[g)wߕj` * #�dq3Ddt 4WĢ2.>3@]P) !s'~“L`v(>CN%Լ``d:|aFc{WaI&z˴5k06*;ِ>&dxh}u`I.Xjd Za=�Oޮm˳ !Ry(#RՂuNoooGD3:X?Smi;4(_A�롺WV |m�}d-! U<)L%=Jƒ577KXAk=!Htuu[n=vsgց�]G7x�1ٿƋ w?̄\oAH ӵHH[/R,H 'z5 b)F 嫳Y(P\ �TgggUќ7cZ= >k5ĕ?P^<ǝv;^x^X:~H~! G%ih'4e' {x̺=[]cǎ̩IyEM 0QL mϟv܈g_5=oK :H ď( 8`V7P8kтj}G4|;vp:5-Y+B>ֱ!JveACAN�� IDAT܊xq'?<>ӭ^{xנ4(sDebMIB{23`gЬ`qyS뫝tנ�oͿJ;ɚKVMCAh߳@9R!J5Q爵auE=uA?Ϟ}a /m>7k�7 Yi%syr'FY@+"{\<uEDpң��7箹|>-7鲙zk`'J ljxA�0\;m '׍DWge|YC]_߇x^,9.�n];8U,Ai/5@sAyF姦sP ja3@h� ݻK_{f?=vlIPIhhŠ_�+󢝌a{iǖAŶpI 8c 2jRc}WmtpkKcSi@fM!Jp5pt3C ~QY2 _ raޱiRcC5zzz]v�z`ǎp€>迦1eM m1R.+XU\&@+@  6lcH3 wޒ*Dmñ i XG|,qJ*wlw؅#f#~4 W(W=538x{.[v[>`m)Te…2I@O?iӦ-|tutmn Yu# %Er 4QP ZyW+toErrm״RN J ?9# kFX%vbɪ>?8qϾkʳϘZbq׭[{��;vs _~mS' r[$}02&XHH&!`oq Dց2 \Aټ2y Sr@TWeAn֙q"W!yP!,D&g$_V'~d8ďzIq~9ܫlz(`/O#>�?[n>k}jjGhzcڴi#O^|S FȬ&�V$fs$ӀК!Xٞ~T*a "PLFV%ې.%$0_MrRO 7p7~G^pO(Pkk+V| e 7M:~a_DBAD}2ᾩ!$aalkvmE&u�5˷,5xpAYDc6rA8.B8yA/H> 0aj? ` -Y qoOG[4uSs=/ַê~¨ --- 1:.9ӧOO>oso_ ^f"0D5|)HSZ@dLf2Ҕ!&Ȃ8N.RB !-# #q!JOf*i]c$A!`f61vu3ܿçe2Tⷷf͚k`Z7,( �O>5k\YWWהvܢy'YuټЁ>h b 4vcY1XX㰷2\5]a[Y8{K`�KhIIuP +fChf &rLfD4T۠:( i'SZk+R^H= u7==?Nէ}׮]{n'H `@Z)ʕ+8vl5x٪t}偕b4k2]}A8e>a7O+0+rȇ�]FL J@+bXA89H  ^9 iuRTY(|"+0~ޣ&{xe4BGyooևUkr89�]Gu]-t3m;] 7c( IDB(!~"!6BHMs �NZվPCxE2!M/;+(cQ(|v솫dܙk3<G�~Oy@;~osnGZk~]]ҳa. # !/9&,P:U뽤~*붎aE4~ZfZMh^5gRfՂ)3Of-j˖-W-?"L Lp}L&7əb{z =dJeߪjqwWJjlw[&5dJ6nW&j$0A@7W_}]-yy,` ?;?OmcQf'0) ֯_W_kll9҇LW~Kچ|\D===}+_%h?b 8�IXv'./rƱxu"<sR/O/ݺk׮+1e2&K~ҥKߗdrjeݻ=ܳ:zQ( ee/|u]w駟oQ,wC=wXRL ǔʴAdi7qɊ+3{MMMOیoڹsnXZU$w"0@ -3!2�2~˚5k.7o|95744LR昙hD&"Z}}}G|ݳgϖM6m|V%౔qg*A1D|35A# ^6a:xEGȔ�ILx3@3 oT1Bx}B`xӌ qr'qr'qr��?M^����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-pause.png����������������������������������������������0000664�0000000�0000000�00000012331�15003420405�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME)\l���tEXtComment�Created with GIMPW��4IDATx]ypu{{vɒ%YK$o1񊁐� YBiH44id2tdZ&mRBSZЙ&@I`l yvIo{Oг i=3K}9w90f̘1cƌ3f̘1cƌ3f̘1ci5Kr>0V[x1C+�&uoC+$T�WbQ�uޞ0W2xaQoւP[g}F*X {\9$Im j �am CZA^}}(K\ $p6BB4Qs, C+�l�%�"jI!%+@T ]G+d@S@gjRB�,8M�y7 d/۸k!@~DQrX|QI%UU +)i9ik*`io^ ^삤&k[-F !BQ�i YQ:M*@š+n հʦhI3 Q $�},VYtlXrM M1K 㣏lZ) Q dMsYNS:2XGNFiVY *`/7 $QqE%@RD(yGM&PՀ O}�VC%+ZI*hC]s`N9ɶ7mXY$0 0~y±�ltb ~^z8TT{-1C�yh�i*\ �Plp@:u0:>͟Ψ�yJeus- @Vw�Wϼn�9JC;nlhQ� Dy:y�Ɂ�@W>|+ V7*C�]�`=@D罹=Ns?I{i;t}fC  M!Φap?.0L x_S^�3p.ڭ6pFBC'Iau:�AO۝7@B6_'ȉ؆�ò(ޔwf!'<`?F/!C[\�٭ׄ(2 UGx $ܔ{:s]KDs6ؔF\!e*jHk)�YM/%~y=1$*eUW7W5`Yt Q1'ủM@ >|7'tjq0.j;9n,9 30{2rXXz3@TWDzzT<@EF?\AT2lrE2%t 瑬�P&Գ:u/ge!Ww6() \;oh!i5g@398&r<=9(QD"n[EuSH0w&(TR Dՙ5R0QA!|O=CVgF^졂!?�lls(] � {VM�)Aw~ Ṅ�`f5^%\^}CNg(ݳNqdJ0]_y^zWVZXMђڛcpQVY\a5eFSGA=|X#yZbge Ff r"I<P~~ᑃzAfN X$J~^9V8`_Wo+Pl@e#HjիN8=M!:w  ^zg;ZzM}!�CK U a~e?J`zK>ZwdT`[v# 0>`0,@B,WV'UG{�q#A:sS}BE>AB2PEJHQ)Su85Zw-K-_2 0$VEtmV0rn[xYVy;`u �V˺60Yl̃\$vQ��٢b=e,k(ĘST.�\�;`7Xs`f ƫ@rt�}y�?ׅhvH ?(2 0{?AZBJ7@Xn\x@8 D`6I'rݘo8'Lm `zLH q`RЍ,&i}l H{ݤSZ_+' I�uVr@iN qe[T��4{91L'Ǿ3N` (FTR�P @;[e *>[ ^>&btb}/SBzXRM6AX떒j@'8HgΦW9} DՠQ]6d:r6iN{Snf_VEј<=S˿8簶UPy}oy&?|IM#:T 7?�oBׂu~ۻs7dpI-HȺ+HKuA>AW^+eê zr_];�4B'k>fS $컽SeSxj(R^9g9o0SD|l{ݼegR/=Xo�׾sGV i7dCyJ��OiPکBo0PT5L�jC q_{8Jhd/!LVBF8 bS'}'H.P .FfZwTQ(D8P~t> I?8NV!D* $JX27u/n{.K_BcL`N�$J,**Z9n7ϾyƷ7iD2GDKQ_SBG�DuSBTGuש !Gd�vh*VOuN?_b˝ӼȸV o:^OAygT!@o!$Mp:v*usRKxPGu0ުWN"u6[&6 NJ|�D{ajgOq*5-ҳow "Aj\ݲD/aXN19E D{=>A7y>O+1{ iMD9sf�`4�u�|@4O\#�[٠Wp2reӪ| pHKcS�|y�3VݲDЯUGW~tL< 3RKy֋�k �\p�_P< s�4N�$9iZUZk6E;`6E 8� s[xla9[( DYMjNNyXp!upt.IE嶈~b8CAT{$_%�2ξN%\g%\q ,�+C[*-eMg(8n_-,d;[ɮ*ʾj-YWo'px:umL-8/~}(XOLӾ5gz mT}ͭWˊEwd IITneCS}{һi^BBNrb=B`Ժz�%NdWX|"weICp·kXˢjɓ+�LL>ǻQhA W%�;zWX3Eh"!*e5^:OVӺ(4/ˆUK {?CF@g�ZN[Zẻ7ˆoeZD?LX^\(.@ !+z� G8ޓ[ F@�]?�M[(?zimmۄP6E0u2ގy>Xh0\POH&,#FdZ8밀&2Dp>CJEJT81/ 1�_fQ@ 쥲G'L$Һ<(eY^|h  Q��sVq:ֽ o&!G@?Zc�&P9N 5ybxυzF&�~d)*nq=9dj!$ �@#:_U<|iZws*PZ= )Uwz/ʼnGW~NǼ=,_~�doS޾]?d<0OЏw;N|||?P~U9�@~Љٰŕ99GU;ޞϸ>ћ>/4 ElprGuϙC7s^T=@Z "9Z˾s+U"|K`0=7pa�{v xv=}$s7aIgp3Oe`[L BOzo# ‰!-^ u';{MN3K L (:}H =nίm 'i-Uq:5W:;|z6ۗRbʙU s:uP >d7Cw-YI+Sih=A;{}=W _h<^̀wp_e3�s�j$>VC[iA8VNh9FҪ'T7X@X<^D/gw^:^[6Ȯ*P1|o*ʜ F--$*eK d$+>OSӺ^JC̴3f̘1cƌ3f̘1cƌ36s{g<E����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata-play.png�����������������������������������������������0000664�0000000�0000000�00000013067�15003420405�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME!]X���tEXtComment�Created with GIMPW��IDATx]ip\ՙ=߽oEjIւM666`H B$,5EMfT*S35S)jH&f& cblc e[־{jƶՒ*UKݯ9|}gygygygygygJU>U .Ҕk=\~F�ΨRVLp|Ħ{g ;^TU�+g2u)%S? ˮR<p/I3V9|JD�0u\[b-k4r fb %jT<\`% 𳊙.Ϝk ,Q1L,YC"-M뫈k�2h0_* ?�g47ug&S-GVP:fʩb ooN57 1>wL3+yd<T#@t] 4}Fq״3 GKExYLbZ+*(P|/56U܀G,Z|EM( ҏ%Xkg4W|#@ɠY Mw #X+(Yg,4ru(ѓyZU7T#@�DeBTث 7�+e%U_3VNy =dշj*2%OcޤKwA74x 0n|e�t(٫с?{MىEoBh:GC00VX�͸� )nѶ/&:>Ƽr튅nrUJxRȫj&�BIy7 z~fn^k,35= dL/�JJ u:Ul:vPO`e,3q%ff,@'{��Cv+_ڣOAO\_Ȫ2o2* YnB7' R2o,F(egT ޡ^դW'% 0q0ߍ_J/@W'��q9!{X�1^Jg|w_&ï{FYITr{(0 TlȎ=cAcB"ݼVkXp´ $0OoYbXL9J)ϐ Xq'*{OR\ 5V_R\G *~ U,� m`4 { 21b弢[�` ^;k>1V|JX'\x~^3OxI(ePXc,N2&{#rh:`b S@B ӉpF \{NjwQvQ�Ls9S� B9 򧞋g_ gPV̎?UzZf@`|ec\G ȿfZS $("·;Ne�"O|}уuv+fVhR<\5cd8UQUy )D8νTPv>>89^XAmHuD<\� ٠�Ѕ9`<%pEU|I%� s0>w/WG}ue-_A(:Q9?$۞w* ӯaFO{ o%Mu`ZchtT|PC74cn*fi�� ?)uWF:?FMl|tzP)O�d"py[ dI)zEH1$-M/^#;YKrx2huK0HQ;/ ,E%]tɡ)kgE<\huJ+^qqP qA8y'cm>S "'_9CH&7dR`q-10 A:|a\m2׮ OLqN+&G/rHqb-N %PXּի9 `~cx}YP"(%7=$g?� -�3+i G!T\vuah&Hgϖ8P/h32G%� WX�=&NG�~ ʊB4MX� \c,XFDrʒ H_;b�=Uh0kƼ:GTt\�FJkA\b Hu\Y1?Z +&<\ ū@df'T<">7+*He[f# J5,Y;9%rp#*((Wv̶x8__}g94}ΘKFcg1 3P{RM`I,ELC�Sh #g[}d恨Z&c#9p(=d#:KdqTsm|(){|<d;gU:U +9.{cY#=5-Jʱ~|0F`2_#7b]\Ct羚Jvˁ/E0&�5"5+_Nw&(k8L[,ֶgޓ}n@�+t X2P+;EF&!L|VMuq/$2#dA_x}F31+ ;1ʚ_6Yk�Ddo'ؗ|Vk ޝC?p m ഌd)�\Q_Fn[p) +h �U(Fq H@=+;)�kZt2 q@n8w0W}Xq.#};7$Sx 0oL 29Ɓpz�ݻMŀ~NDt<M'VV[MZUաxf �S?AcL#8E�Ċ*4*(ӚLAe{'^xnų)__{r{ȓ `U2W#8/ں+>&`Eͥg9V(!Dt%hﻺs hA8}R}? pvtfN!D8Ps9`UtE�u,$V'_`YϣTD%m ;#0R(1$sEe<7w`k*>5ƽ7;257E73QHCɘrV\7\k=됳gˠ>Iމc3fZZ__!s4Fp8y�� B#X=7ΟKg\7>+�@@�ʆjgG>ާ?o'x8N3C �YuӲsfHJE]|~@p8Pr&�3�NkVEZ¥r=ts�5<E&4c%.+k-K>Tމ۹8,XsiG�� �w�< x(R Fm4 |X7WQʛ5ϑ/xq=sk�i H7V^|G9o\vohm]w3W|o+:%w?@ @5ox" B=:2:@3W}H_rUfwDbdn`e5Ya^{xĦNꦙX9-c_d�X/� B"F)Pdkֲ/4mAʗ' !jYg8wr`Dm�!o�- ]*Ȕ}@Z'ݼ>!FX9|; tϵR*!:Y�B�>`s8~*5ϳ/f-} V1EOAL2@n۾,V�_KA_Pbż~ ~J8{!>�-�� �s5~w\mO "�j5�p8\2\�}7[5KɻjO(+~WJ�c8^ };*]o]fpi�dup8 |]G71)N8L�oℷB3\�S\KT)uӇ�:_�xx"YC.!0 ˑ7~F#l�M�nM~ `?�|O�fk/'tV�ޫx "~�@ %W�1Ki݁R*b굂K�' `�;=cR1KC*6 !'b�^*?B|� �d)( ◆;Qe!@' �^9 uM PA8R twaF\ iR np>c|` �vB<=7�kc;oh}4ӼkoǶ8vp@�JFaca8nG7p M`8"xуnFMa�;�< 6g,W �@Ɵ}%QLiV'~U:d#{d #$B�9 SBwn2~q&%%ƪ*>Kמw8e2Fߧ͹U>rmPQSƒu>CD�Akc?֙_w@O i2%6t]? kD;^zto_9Ѩ~*)GJx9Ӭ> Sh[ʱ^Gb.g[.F/)qlp?�(3Lwowozv *|2o8RJP[|yk3}ig{ �}��? m7ﵜ_w0 <n~s#n`W6v!eA|9GO`ji�I��P(2OQ6N@/"ܷ׷˩Z2|ksxMJ9, e?8\)m=|}l$k=BFy8ߘ yb} iKy̅x-HWRGXۧ"}=ӗ;(NEBR9 aqZ}kn/XJf F=ATUXiRTBtCHʊPvKY^qOvv:(]=]pxt S 20j�2|Ŝ7 qh:'_NA)!츫זNn۾jsn:mX=3<3<3<3<,g*t'����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonata.png����������������������������������������������������0000664�0000000�0000000�00000012013�15003420405�0022163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME8=���tEXtComment�Created with GIMPW��fIDATx]Yl\ys2 }$JR%rdתmY%5 RMA %hi8NְDvUXǒlY]2%Js3s.}93R8et~,νw92eʔ)SL2eʔ)SL2eʔ)X7b? .s�!� +!;&n#,~+sE|V�zȫX@SxaaBeLO1,XDM̔ }H-|\LDP}g�>f@֮LQ� -!c-XllSpUw@ �YղNE(V`6b) ,X%Z P@S@cr�4@6Ũ�9d{dE�|�> nV%U;xjsE�ʭ>4mXGÿٷmMr<M{AӗCz!:y}v^f@ze ExE2dZ'ͪ0Pz/�2mEZj%X=�@7,›V)��9$;f4rc e8VbPE*m-CD KÙǡۥtm㵭Š�r#WT׺hLOc}�[& rTК:5V\юU +Q|II膖B�KZW �:x4d_?*w@9,`qH �m)͸ ��]:1$zO@S@4>d*;5IXx@ Gi iG[@#ޅQ�w_>Lv8nm35 dJ �+]@X�=s4,>}<*0X󵨛�*, O4;��8g'@Ptq{c=$2?rն>f~z!T@ 6A71A s>{@}Gλ �s';rT 1�@zO]N>Is(674"j霕t'GH2$CI'H@q'>OAͻ5_W�sL& %)GI௓ ؖ߼-G+Hq5w5(~ز; E9*nw pm9�0 pAxޅK?|]FF<>W5}ݷ,@EEyXE#k_&ʜx�<E{AZNQat?4!E9 e�8ɱ3O%u%#x=ERZ<gEݵ) o*02[)F\gQ9ii"+�d}*zO[)x/[[ ƚmȵ$H@Dt"vo$?!yJgs=jZ|"=3fcIU $? Š=eӂBpzߕgH+2Ȋ~99z(/*p��ysfp"�s/ʑbȦ`oeƟXB�� sּzr/_"-ʿfgF'W)YLJ(o35(٣]JZ xmk#0%5d)Oz?.}O$ąki6^ۺU-S2� �s,*oF[Sd44p9I!Y `լ[f\`�X6#$wp%C0j76#P2heh+Q7ͮ$ 7+$eRxC.C"f\g:[^=^܌+ ŕ3|}p__/^g"Vk,m@ƛtHfۗ?R&J\[+UJZ K)&[lٲ).r@<�2VTuXe )|($I=��ꬸb,'VkMJCȒ09h&@C˼E%�kYez�]ע9�?ӅHc V`1,F@H^;G. ->��cAE%US  y0>cB4�&KƊ� X\c H}QOW)' )sI.E$־a Cu|mVR��$9'cXT`ٮό,HCT5`<8kQoB%h)QN.�F@ =ޅ>MI5I`I_LB�]x4#{  |hVb e >;ÿJ6X<r�V9 r 7SuJkt0w<<O9ogX^ۅk=}<LP1|ڈ\oxNh2� 4w!z9Z٤pK-+ک/ȱ5/i&`i[Or�*"w(dS42D="DZ&Bb8|E{@ _uϐE"uO F O4N< 3ll~� "G> sZkP;zz+�jY2k22Q��goSd'ћ/fߓ#BjjTh)o]" H`>}f0K�H$Hx}҉p.Yi.#GO}s\!#P 0oly M:@4pGswygţJGSNGVP ن^!',`9~x<"@" � +Ұ֖00H}o+J;0ut#+<(]`\�i _?HZ+ `%UE9Vbrt)u;XCbl\=Y�<DHrlFfvoÌ)?âwv"@Y83fxӐd}^(Bh/䦥4 Ob7�: (Y{`KgwRk +ּ߿5>Ќb4|x r #ϋgs?>C]pWֵzLkj�1+K9.\q�7Shzb Y oYׁ\_~�`� p=#jQp|({ދ|tI3B �Ym3$Jn 4smֶ֠RkJnnFdՀ`� 6ϼDF 4c++)yK ^z;yܱr&u8ǢrK! >󱳔$@KKusm}+m<#ϲܯ>ԍmWlcEe-[uTn~''zO@ퟯedwȵٮx[ 3�>[o|N^Q$a"b4|YEvV\q7uH_㵭ː} &@ڼz�(1{Lk9?&& AởU4l4eoeU�LRx(42ex[+ yOr\�J՚׬!gZrP)M_lMuc @z F'.�p @k^B�? 2#':av2a#1x{P\�cgZ౿]-[,̵Rx8s1RH'�D&v^�B&@v5޹0p,|Ă w}WD[pL+g* +0w@ <%QܱQE%T"JXPyɛNS4J��xc&,+j,epX=�*Ç4? Ҽ"k0EF=�< *ȉ]K�X8_ B�*(#crb1p#WRhhqM'oQj \4* 5~ C#T 0 #oӇ-kCU |!.x,/u\S0/p'"+?{"+sz7H FA��"\ ,#+_=c|~� �i\rj"u[)?ikT4 C`1c˵ŕyDhλ/`١\Gޅ6§yMi4"j6qٛCIW Nả �h}I_s2�Y#,"Ixgi|?{~gh �$H$eLCն~]xs@aY_sy%+ 'M | : riF7܍orm0^T\ޟ�)ǀEO5~T<{>M=-dSI" eܲ׷@*ԍ6.dEnApҎys;F={AK_H^3 a\{ZSg m_@fԍ&@Z $K�EA! 9 RFdrdGG(26]93~fXM,.3Z{A] TL2aNU45Wfr@b$�ȉ9^KRζhm2eʔ)SL2eʔ)SL'1����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonatacd-large.png��������������������������������������������0000664�0000000�0000000�00000011562�15003420405�0023572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������3���sRGB����bKGD������ pHYs�� �� B(x���tIME @4|)��IDATx]vH.fI&gcf&37ح>-6 ޠP>t_��v">v>޶ھxt0 hG 0 H7��qu]nPtL?1aJ}_wy]C[{�~mׂ(TO^j�@QPB,˔/޶A|iEQ-$Tُ3Ǟ�qCY)0ƔZLn3U*SUZ$yzNxyAm@,!2`5X{1wM6u`%⽊&sp] À,(͠jXM' 8n5sh ǠI٪e]hj+˒0 ! C8Psפ!mܣ"6i יjBo2JċX(29E1vMYb@Q1 0M}2QQ,ys, sV6ŭօ>\OXAnB i *QvcYL$,1fUp&^.Ωȫ* A`2 q84syl6Z1p2M'Ž*'\Rʟ1eC.s`IFaeY\6CO1 R qbHǒ4M,KceUi YeYPdYv0ɽ¦ QqjyTp`7p$Ii^5kŸ#,3U %ܩzLmY삣849DR;'YG̈́&Rz2S(˒s\`J)AEPJ1YݦW؇W IE/Rzp!xUY$4%dYQie`IymQcom) ,ګÝ G@iz¶m, 8B#m#mX 1d]4{msp'q_ $<mk4M/:{m*Y}j)Bfwj$r$I I#! F-VS ! 9Ҕuٖ$ AeYa)zyM!_g&f3”u94M!c00fi)9XNS2w)-0X!b1Mӓ*H64YGME)Iv;hp,b I9VWRߕy~:Uܩn[eM=qWbyUxmBPՑ:6Y/UNɻAUxMK *�kufiz�;;*'Xd]%؅>dl9ԔR LaP-MS}Z){(BOUzW msHZ*cͅkPR)Fe C *Xfssu\cs]+0:…8ťN!m�_cYgP2 (&C:f<A*E'ӧb 4Cu|}}iS9W_Oq\J�yi'%If^buGs,5yud]U"A𘌖=Eu{&}sdWМv;XT8`Yf%]& AMu*^U%|||h~BU]y BM.U1}E%u6DoTց{IYLJd6)kR"Mh LM^]=3yu"]sM]kI8xڂ]F_ zșO@l!4$Y}_ȫj-F֛�%EU[qmTׯB6OUo6 +դ< Ǣo6^m\tiQ$3gipZ'ؕWAu\ (i:TMJe>d]'oGkՍʞc]F躒(tHFZVSا:oB$'DtZ;$CTb^$ |~~uCd$WX} T_u]E47zk@S@d}A۸SE7KCrSiKX]^pÂM"FڻIuy9Ӑ eK츋 ng<ZQc8, 8ֱC1X6qd[SMMr9"]k�k~~jp ^j͠j=;>l6DX*di͠*HW+օJf0YՉuvbPS KFTW58! CH(t]EkYbh5 U1n{ f'qCQi VԹ9DeC�J4xd.<<<C㾞 ��O*]aV hUPG!^$ <<+a=p1d+"="Md5joZvtjiB<9|||LY F4Eh= 1$I§:cDʲ*0`Z뺓hcmI}˂3 RF,˽aG`oSX,%xO XT}'A0 1dYVxBEsX.�_aJ)n;r1!jҘ<Gl Mi\bbpR ߿�,ځy*rfMz{'}V8#}Vz"ʲTv H;NxBVVsliF`uP2)r<"u,}{ h8v?yJi4Ma5`.Z N|XŁ17\.MS>E<n{&]'W_[$߿gmcoTG2fooo<8\.gNXudnx|+mK8Pkx{{,<(=ň|_,[c1чmi1ڪ7~~}}흓z ///\.!"pS,B^$%Y>\.~XI8n@ȻLӜ[d73ux|| shuזeVCMDMzc^P۶fB`ƤD9 'S_)l"2އL\J 8w0 &U,..iV&N,bH%8Q^Q|>W936`,P ,Ihmk0<Nzh,MYNSeYyM,;Z˸']jĀ(N8ע8AA+n{@B~E ,BԼb�jd@{0IiТ(&WED�@h .iUJD;7'5mɲ� Z+H9ԤVcU%qŰii e6/Bs-m^o욬Rv<LkiAT,i,_~Aezz r`@yCj?A]\a[\zt$MZ3^adh?`5]kiRY'um<Uc-ܪH&w5/2^IOv bv 6*HwZ%[,qLL*2F,qc5t$9*Z9rJE[I!BqF Tk`v;`͝r]U[xC&QmKY$I'ohdYs-#aԴ+!͠(hDMJT)D 3i Y8!M\w8Un&R:&"cq|M\p&0^Bң� M"Ku R>&c#.%^`'crTsm$8[u ɚ18z$7F\Y?WBlu[6Z. !B+?/AcrKBN5dy\UVBO58@M/(!ۭ&gT� "K6nO *�K 뺓w-Aoֵ }&<o0,N ktkXFG)ԉ!sjU?\zC1~ND98E˲`ہm0ϵiTQuV 7Qu pФ^r56Mo۶ eYmy^˴.nNcUћ88ΤceE 3Ra\F)( MS>*wJ�cAǼU*XհD`YEIL`1ct,'10۶qp0\턝PK]WOOfX˲m,&j,xk2yX&4MvB8,˺zC^=]}Qs1PpdҋKEmïp-VNfY2^404ͽ@iUڦit"}0N[ɭwv6M!0 0 c5ۛ {>x/+>|#4@PUT5u5Thc_@rq`i:J�S1\?3@/ j!Lf^_%, W\~#˟B`>ARx~~3Rxxx��\gTi/6ZQNgGMϟz `/0 <@K'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pixmaps/sonatacd.png��������������������������������������������������0000664�0000000�0000000�00000004504�15003420405�0022500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���M���M��� ���sRGB����bKGD������ pHYs�� �� B(x���tIME<q��IDATx\v$%"oIJbgGnsI>G!a~,CUUih#�IYR }ʲDUU�ڦ}s<e_0)yxxQ'm#z_a*EQEC37S�9~ EQ��p8M47B'n~קiBJ ,CQv3Pce y}w]e뾚oX)%8TCrCUU!cǶfH+RE-iy.^tQRՕ(&ihC5=)s} c B98`|yB#Mʲ q# CE1 ׈h P@UU(EQNݧqt^Ҳ(*6 5YAJ<hCڼ1:nH�Ly1]QȲG$0MY!"$I(xbH`1p ,UU[`7UV$|҃1Ơ:4MCeqU6^$8PU0E#T3 A M˘\8_EE(e"&eY4 á榋shiu 7Yi fUUq8ubwvV61Ҫ&Y`sJǁ(}6Fϩ&caD22ũb&Enum>b0 ~V21^^^X3Km!AJ\SƜ{{.EMִ))Sӏ5\ Ͳ աiuuҧU^UUPUa"eY"A(i( `4D`SDY<Fbv89<|I%n$ ޺0h`S+MTUuvfYӠ[s>r%^:qibݢ( ܛYE4(2ɏ%Iv{qvi3틦|j"NU>=�5ZiZ3SUN'ߋض]WkܲYJē$kXS5Q6j~%Y;ufO>iY#kJt]o|Փq[6VLjp2Q>֙n9v{W5VwOqfoK`}߿h@LJ4}$ |GEQjdž<Q+O'.65R )H-.U"eYHӴ5DՕ[(c-ٽiN8PU?@UU ۶oEc}ZSn4M^[}0 oE7i,zv%%IE z͏ǩGI,O ?hXVXVHsV+vsk#І*eY^^Pҟ),znUq$I˅\;Fftׯ�0 ocl<)V1y\ׅ5(t~(*Nc0My#YymQOcW])}~~veY<eYböm͓Lo0 y=ؘ|80 z 'n 1KfG' l67/Md驞تiBh~LC+oŅ(0 5lo!4 5Th囟Oȿr4f<Oic˲mQ_�OgUnO)MxhJQ %]nQ:NCi~shw|J$iDxn ij[GΛ6;)ױc7i~8mRƖO;ёۂ Ϳ9JSx/sO-MϹT hl.(*Q= F'[ûLh}g㴾ܴ"rq%~ket{o4]q<yw r5| Jݛ}b)O7 87Me�9ŒAJYGl".d8hU)gs]a 5KTvZ۶g{qEb i]0MeM^b)8zZJAĵ"sq ]a&4MvZ2MSDQ48ݛ ^EМ5.IxI4$.I \5'y47K)c}׷v�1WfCx~~^'-)yxxiթxzz]&mj"̀!VU^' btPjr@����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/playlists.py����������������������������������������������������������0000664�0000000�0000000�00000024274�15003420405�0021121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module implements a user interface for mpd playlists. Example usage: import playlists self.playlists = playlists.Playlists(self.config, self.window, self.client, lambda:self.UIManager, self.update_menu_visibility, self.iterate_now, self.on_add_item, self.on_playlists_button_press, self.connected, self.TAB_PLAYLISTS) playlistswindow, playlistsevbox = self.playlists.get_widgets() ... self.playlists.populate() ... """ import os from gi.repository import Gtk, Pango, Gdk from sonata import ui, misc, mpdhelper as mpdh from sonata.pluginsystem import pluginsystem, BuiltinPlugin class Playlists: def __init__(self, config, window, mpd, UIManager, update_menu_visibility, iterate_now, on_add_item, on_playlists_button_press, connected, add_selected_to_playlist, TAB_PLAYLISTS, add_tab): self.config = config self.window = window self.mpd = mpd self.UIManager = UIManager self.update_menu_visibility = update_menu_visibility self.iterate_now = iterate_now # XXX Do we really need this? self.on_add_item = on_add_item self.on_playlists_button_press = on_playlists_button_press self.add_selected_to_playlist = add_selected_to_playlist self.connected = connected self.mergepl_id = None self.actionGroupPlaylists = None self.playlist_name_dialog = None self.builder = ui.builder('playlists') # Playlists tab self.playlists = self.builder.get_object('playlists_page_treeview') self.playlists_selection = self.playlists.get_selection() self.playlistswindow = self.builder.get_object('playlists_page_scrolledwindow') self.tab_label = self.builder.get_object('playlists_tab_label') self.tab_label.set_text(TAB_PLAYLISTS) self.tab_widget = self.builder.get_object('playlists_tab_eventbox') self.tab = add_tab(self.playlistswindow, self.tab_widget, TAB_PLAYLISTS, self.playlists) self.playlists.connect('button_press_event', self.on_playlists_button_press) self.playlists.connect('row_activated', self.playlists_activated) self.playlists.connect('key-press-event', self.playlists_key_press) # Initialize playlist data and widget self.playlistsdata = self.builder.get_object('playlists_liststore') self.playlists.set_search_column(1) def get_model(self): return self.playlistsdata def get_widgets(self): return self.playlistswindow def get_treeview(self): return self.playlists def get_selection(self): return self.playlists_selection def populate_playlists_for_menu(self, playlistinfo): if self.mergepl_id: self.UIManager().remove_ui(self.mergepl_id) if self.actionGroupPlaylists: self.UIManager().remove_action_group(self.actionGroupPlaylists) self.actionGroupPlaylists = None self.actionGroupPlaylists = Gtk.ActionGroup('MPDPlaylists') self.UIManager().ensure_update() actions = [ ("Playlist: %s" % playlist.replace("&", ""), Gtk.STOCK_JUSTIFY_CENTER, ui.quote_label(misc.unescape_html(playlist)), None, None, self.on_playlist_menu_click) for playlist in playlistinfo] self.actionGroupPlaylists.add_actions(actions) uiDescription = """ <ui> <popup name="mainmenu"> <menu action="plmenu"> """ uiDescription += "".join('<menuitem action=\"%s\"/>' % action[0] for action in actions) uiDescription += '</menu></popup></ui>' self.mergepl_id = self.UIManager().add_ui_from_string(uiDescription) self.UIManager().insert_action_group(self.actionGroupPlaylists, 0) self.UIManager().get_widget('/hidden').set_property('visible', False) # If we're not on the Current tab, prevent additional menu items # from displaying: self.update_menu_visibility() def on_playlist_save(self, _action): plname = self.prompt_for_playlist_name(_("Save Playlist"), 'savePlaylist') if plname: if self.playlist_name_exists(_("Save Playlist"), 'savePlaylistError', plname): return self.playlist_create(plname) self.mpd.playlistclear(plname) self.add_selected_to_playlist(plname) def playlist_create(self, playlistname, oldname=None): self.mpd.rm(playlistname) if oldname is not None: self.mpd.rename(oldname, playlistname) else: self.mpd.save(playlistname) self.populate() self.iterate_now() def on_playlist_menu_click(self, action): plname = misc.unescape_html(action.get_name().replace("Playlist: ", "")) text = ('Would you like to replace the existing playlist or append' 'these songs?') response = ui.show_msg(self.window, _(text), _("Existing Playlist"), "existingPlaylist", (_("Replace playlist"), 1, _("Append songs"), 2), default=self.config.existing_playlist_option) if response == 1: # Overwrite self.config.existing_playlist_option = response self.mpd.playlistclear(plname) self.add_selected_to_playlist(plname) elif response == 2: # Append songs: self.config.existing_playlist_option = response self.add_selected_to_playlist(plname) def playlist_name_exists(self, title, role, plname, skip_plname=""): # If the playlist already exists, and the user does not want to # replace it, return True; In all other cases, return False playlists = self.mpd.listplaylists() if playlists is None: playlists = self.mpd.lsinfo() for item in playlists: if 'playlist' in item: if item['playlist'] == plname and \ plname != skip_plname: if ui.show_msg(self.window, _(('A playlist with this name already ' 'exists. Would you like to replace it?')), title, role, Gtk.ButtonsType.YES_NO) == \ Gtk.ResponseType.YES: return False else: return True return False def prompt_for_playlist_name(self, title, role, oldname=None): """Prompt user for playlist name""" plname = None if self.connected(): if not self.playlist_name_dialog: self.playlist_name_dialog = self.builder.get_object( 'playlist_name_dialog') self.playlist_name_dialog.set_transient_for(self.window) self.playlist_name_dialog.set_title(title) self.playlist_name_dialog.set_role(role) entry = self.builder.get_object('playlist_name_entry') if oldname: entry.set_text(oldname) else: entry.set_text("") self.playlist_name_dialog.show_all() response = self.playlist_name_dialog.run() if response == Gtk.ResponseType.ACCEPT: plname = misc.strip_all_slashes(entry.get_text()) self.playlist_name_dialog.hide() return plname def populate(self): if self.connected(): self.playlistsdata.clear() playlistinfo = [] playlists = self.mpd.listplaylists() if playlists is None: playlists = self.mpd.lsinfo() for item in playlists: if 'playlist' in item: playlistinfo.append(misc.escape_html(item['playlist'])) # Remove case sensitivity playlistinfo.sort(key=lambda x: x.lower()) for item in playlistinfo: self.playlistsdata.append([Gtk.STOCK_DIRECTORY, item]) self.populate_playlists_for_menu(playlistinfo) def on_playlist_rename(self, _action): model, selected = self.playlists_selection.get_selected_rows() oldname = misc.unescape_html( model.get_value(model.get_iter(selected[0]), 1)) plname = self.prompt_for_playlist_name(_("Rename Playlist"), 'renamePlaylist', oldname) if plname: if self.playlist_name_exists(_("Rename Playlist"), 'renamePlaylistError', plname, oldname): return self.playlist_create(plname, oldname) # Re-select item: row = 0 for pl in self.playlistsdata: if pl[1] == plname: self.playlists_selection.select_path((row,)) return row = row + 1 def playlists_key_press(self, widget, event): if event.keyval == Gdk.keyval_from_name('Return'): self.playlists_activated(widget, widget.get_cursor()[0]) return True def playlists_activated(self, _treeview, _path, _column=0): self.on_add_item(None) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/��������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0020173�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/README��������������������������������������������������������0000664�0000000�0000000�00000001330�15003420405�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Information fetching interfaces # lyric_fetching(artist, title) -> Lyrics cover_fetching(artist, album) -> ?? # # Ui interfaces # button_construst() -> Gtk.Button tab_construct() -> (tab content, icon name, tab name, the widget to focus on tab switch) # # Other # # Called when one of the following items are changed: # 1. Current playlist (song added, removed, etc) # 2. Repeat/random/xfade/volume # 3. Currently selected song in playlist # 4. Status (playing/paused/stopped) handle_change_status(state, prevstate, prevsonginfo, songinfo, mpd_time_now) # Called when song changes: playing_song_observers(songinfo) # This gets called when the plugin is loaded, enabled, or disabled: on_enable(state): ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/__init__.py���������������������������������������������������0000664�0000000�0000000�00000000000�15003420405�0022272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/covers_lastfm.py����������������������������������������������0000664�0000000�0000000�00000005142�15003420405�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������### BEGIN PLUGIN INFO # [plugin] # name: Last.fm covers # plugin_format: 0, 0 # version: 1, 0, 0 # description: Fetch album covers from www.last.fm # author: Jonathan Ballet # author_email: jon@multani.info # url: https://github.com/multani/sonata # license: GPL v3 or later # [capabilities] # cover_fetching: on_cover_fetch ### END PLUGIN INFO import json import logging import shutil import urllib from urllib import error, request, parse from sonata.version import version API_KEY = "41a1b04ed273fe997d2fddc3823dfb0f" logger = logging.getLogger(__name__) def make_user_agent(): return "Sonata/%s +https://github.com/multani/sonata/" % version def on_cover_fetch(artist, album, on_save_cb, on_err_cb): handler = urllib.request.HTTPHandler() opener = urllib.request.build_opener(handler) opener.addheaders = [("User-Agent", make_user_agent())] # First, find the link to the master release of this album search_url = "http://ws.audioscrobbler.com/2.0/?%s" % ( urllib.parse.urlencode({ "method": "album.getInfo", "artist": artist, "album": album, "api_key": API_KEY, "format": "json", })) logger.debug("Querying %r...", search_url) response = opener.open(search_url) lastfm = json.loads(response.read().decode('utf-8')) if 'error' in lastfm: logger.warning("Can't find cover on Last.fm: %s (err=%d)", lastfm['message'], lastfm['error']) return for image in lastfm['album']['image']: if image['size'] != 'mega': continue url = image['#text'] if url == '': logger.info("Found an album on Last.fm, but no cover :( %s", lastfm['album']['url']) continue logger.debug("Downloading %r", url) try: response = opener.open(url) except urllib.error.URLError as e: logger.warning("Can't download %r: %s", url, e) if on_err_cb("Can't download %r: %s" % (url, e)): break else: continue if not on_save_cb(response): break if __name__ == '__main__': import os import subprocess import tempfile logging.basicConfig(level=logging.DEBUG) fp, dest = tempfile.mkstemp(".png") def on_save(data): os.write(fp, data.read()) os.close(fp) return False def on_err(): print("Error!") return True result = on_cover_fetch("Metallica", "Ride the lightning", on_save, on_err) print(dest) subprocess.call(['xdg-open', dest]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/gajim_tune.py�������������������������������������������������0000664�0000000�0000000�00000003756�15003420405�0022702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: Gajim tune # version: 0, 0, 1 # description: Update the MPRIS (in Gajim etc.) tune information. # author: Fomin Denis # author_email: fominde@gmail.com # url: http://www.nongnu.org/sonata/ # license: GPL v3 or later # [capabilities] # enablables: on_enable # playing_song_observers: on_song_change ### END PLUGIN INFO import dbus.service songlabel = None lasttune = '' tune = None # this gets called when the plugin is loaded, enabled, or disabled: def on_enable(state): global tune if state and not tune: tune = mpdtune() else: if tune: title = artist = album = '' tune.TrackChange(dbus.Dictionary( {'title' : title, 'artist' : artist, 'album' : album} )) def on_song_change(songinfo): global tune, lasttune if lasttune == songinfo: return lasttune = songinfo title = artist = album = '' if not songinfo: # mpd stopped if tune: tune.TrackChange(dbus.Dictionary( {'title' : title, 'artist' : artist, 'album' : album})) return if 'title' in songinfo: title = songinfo['title'] if 'artist' in songinfo: artist = songinfo['artist'] if 'album' in songinfo: album = songinfo['album'] if 'name' in songinfo and artist =='': artist = songinfo['name'] if 'file' in songinfo and title =='': album = songinfo['file'] if not album.startswith('http:'): title = album.rpartition('/')[2] if tune: tune.TrackChange(dbus.Dictionary( {'title' : title, 'artist' : artist, 'album' : album} )) class mpdtune(dbus.service.Object): def __init__(self): super().__init__(dbus.SessionBus(), '/Player') @dbus.service.signal(dbus_interface = 'org.freedesktop.MediaPlayer') def TrackChange(self, trackinfo): return ������������������multani-sonata-bf88fdc/sonata/plugins/localmpd.py���������������������������������������������������0000664�0000000�0000000�00000011371�15003420405�0022343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # this is the magic interpreted by Sonata, referring to tab_construct below: ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: Local MPD # version: 0, 0, 1 # description: A tab for controlling local MPD. # author: Tuukka Hastrup # author_email: Tuukka.Hastrup@iki.fi # url: http://www.nongnu.org/sonata/ # license: GPL v3 or later # [capabilities] # tab_construct: tab_construct ### END PLUGIN INFO import subprocess, locale, os from pwd import getpwuid from gi.repository import GLib, Gtk from sonata.misc import escape_html from sonata import ui class Netstat: TCP_STATE_NAMES = ("ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT1 FIN_WAIT2 " "TIME_WAIT CLOSE CLOSE_WAIT LAST_ACK LISTEN CLOSING" .split()) def __init__(self): self.connections = None def _addr(self, part): host, port = part.split(':') port = str(int(port, 16)) if len(host) == 8: parts = [host[0:2], host[2:4], host[4:6], host[6:8]] parts = [str(int(x, 16)) for x in parts] host = '.'.join(reversed(parts)) else: host = "IPV6" # FIXME if host == '0.0.0.0': host = '*' elif host == '127.0.0.1': host = 'localhost' if port == '0': port = '*' return (host, port) def read_connections(self): def fromhex(x): return int(x, 16) self.connections = [] for name in '/proc/net/tcp', '/proc/net/tcp6': f = open(name,'rt') headings = f.readline() for line in f: parts = line.split() if len(parts) < 10: continue # broken line local = self._addr(parts[1]) remote = self._addr(parts[2]) state = self.TCP_STATE_NAMES[ fromhex(parts[3])-1] queueparts = parts[4].split(':') queues = tuple(map(fromhex,queueparts)) uid, _timeout, inode = map(int, parts[7:10]) if len(parts[1].split(":")[0]) == 8: proto = "tcp" else: proto = "tcp6" self.connections += [(proto, local, remote, state, queues, uid, inode)] def format_connections(self): t = "%-5s %6s %6s %15s:%-5s %15s:%-5s %-11s %s" headings = "Proto Send-Q Recv-Q Local Port Remote Port State User".split() return (t % tuple(headings) + '\n' + '\n'.join([t % (proto, rxq, txq, localh, localp, remoteh, remotep, state, getpwuid(uid)[0]) for proto, (localh, localp), (remoteh, remotep), state, (txq, rxq), uid, inode in self.connections if localp == '6600' or remotep == '6600' or getpwuid(uid)[0] == 'mpd'])) def update(label): # schedule next update GLib.timeout_add(1000, update, label) # don't update if not visible if not hasattr(label, "window") or not label.get_window().is_viewable(): return netstat = Netstat() netstat.read_connections() netstats = netstat.format_connections() # XXX replace the shell commands with python code commands = [ (_("Processes"), "ps wwu -C mpd".split()), (_("Files"), ["sh", "-c", "ls -ldh /etc/mpd.conf /var/lib/mpd " "/var/lib/mpd/* /var/lib/mpd/*/*"]), ] outputs = [(title, subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE ).communicate()) for title, command in commands] sections = [outputs[0], (_("Networking"), (netstats, "")), outputs[1]] text = '\n'.join(["<b>%s</b>\n<tt>%s</tt><i>%s</i>\n" % (title, escape_html(stdout), escape_html(stderr)) for title, (stdout, stderr) in sections]) label.set_markup(text.decode(locale.getpreferredencoding(), 'replace')) # nothing magical here, this constructs the parts of the tab when called: def tab_construct(): builder = ui.builder('localmpd', 'plugins') editbutton = builder.get_object('localmpd_edit_button') editbutton.connect('clicked', lambda *args: subprocess.Popen( ["gksu", "xdg-open", "/etc/mpd.conf"])) restartbutton = builder.get_object('localmpd_restart_button') restartbutton.connect('clicked', lambda *args:subprocess.Popen( ["gksu", "service", "mpd", "restart"])) label = builder.get_object('localmpd_data_label') update(label) window = builder.get_object('localmpd_scrolledwindow') window.show_all() tab_widget = builder.get_object('localmpd_tab_eventbox') # (tab content, icon name, tab name, the widget to focus on tab switch) return (window, tab_widget, "Local MPD", None) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/test.py�������������������������������������������������������0000664�0000000�0000000�00000004465�15003420405�0021535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # this is the magic interpreted by Sonata, referring to on_enable etc. below: ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: Test plugin # version: 0, 0, 1 # description: A simple test plugin. # author: Tuukka Hastrup # author_email: Tuukka.Hastrup@iki.fi # url: http://www.nongnu.org/sonata/ # license: GPL v3 or later # [capabilities] # enablables: on_enable # tab_construct: tab_construct # playing_song_observers: on_song_change # lyrics_fetching: on_lyrics_fetch ### END PLUGIN INFO # nothing magical from here on from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, Pango from sonata.misc import escape_html songlabel = None lyricslabel = None # this gets called when the plugin is loaded, enabled, or disabled: def on_enable(state): global songlabel, lyricslabel if state: songlabel = Gtk.Label("No song info received yet.") songlabel.props.ellipsize = Pango.ELLIPSIZE_END lyricslabel = Gtk.Label("No lyrics requests yet.") lyricslabel.props.ellipsize = Pango.ELLIPSIZE_END else: songlabel = None lyricslabel = None # this constructs the parts of the tab when called: def tab_construct(): vbox = Gtk.VBox() vbox.pack_start(Gtk.Label("Hello world!"), True, True, 0) vbox.pack_start(songlabel, True, True, 0) vbox.pack_start(lyricslabel, True, True, 0) vbox.pack_start(Gtk.Label("(You can modify me at %s)" % __file__.rstrip("c")), True, True, 0) vbox.show_all() # the return value goes off to Base.add_tab(page, stock, text, focus): # (tab content, icon name, tab name, the widget to focus on tab switch) return (vbox, None, "Test plugin", None) # this gets called when a new song is playing: def on_song_change(songinfo): if songinfo: songlabel.set_markup("<b>Info for currently playing song:</b>"+ "\n%s" % escape_html(repr(songinfo))) else: songlabel.set_text("Currently not playing any song.") songlabel.show() # this gets requests for lyrics: def on_lyrics_fetch(callback, artist, title): lyricslabel.set_markup( "Got request for lyrics for artist %r title %r." % (artist, title)) # callback(lyrics, error) GLib.timeout_add( 0, callback, None, "%s doesn't have lyrics for %r." % (__name__, (artist, title))) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/ui/�����������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0020610�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/plugins/ui/localmpd.glade���������������������������������������������0000664�0000000�0000000�00000011520�15003420405�0023400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkEventBox" id="localmpd_tab_eventbox"> <property name="visible">False</property> <property name="visible_window">False</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="localmpd_tab_h_box"> <property name="can_focus">False</property> <property name="orientation">horizontal</property> <child> <object class="GtkImage" id="localmpd_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-home</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="localmpd_tab_label"> <property name="can_focus">False</property> <property name="label" translatable="yes">Local MPD</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> <object class="GtkScrolledWindow" id="localmpd_scrolledwindow"> <property name="can_focus">False</property> <child> <object class="GtkViewport" id="viewport1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="border_width">2</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="box2"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkButton" id="localmpd_edit_button"> <property name="label" translatable="yes">Edit /etc/mpd.conf</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="localmpd_restart_button"> <property name="label" translatable="yes">Restart the mpd service</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="localmpd_data_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="xpad">5</property> <property name="ypad">5</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> </object> </interface> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/pluginsystem.py�������������������������������������������������������0000664�0000000�0000000�00000016625�15003420405�0021641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import configparser from io import StringIO import logging import os import pkgutil import re import sonata.plugins def find_plugin_dirs(): return [ os.path.expanduser('~/.config/sonata/plugins'), '/usr/local/lib/sonata/plugins'] # add dirs from sys.path: sonata.plugins.__path__ = pkgutil.extend_path(sonata.plugins.__path__, sonata.plugins.__name__) # add dirs specific to sonata: sonata.plugins.__path__ = find_plugin_dirs() + sonata.plugins.__path__ class Plugin: def __init__(self, path, name, info, load): self.logger = logging.getLogger(__name__) self.path = path self.name = name self._info = info self._load = load # obligatory plugin info: format_value = info.get('plugin', 'plugin_format') self.plugin_format = tuple(map(int, format_value.split(','))) self.longname = info.get('plugin', 'name') versionvalue = info.get('plugin', 'version') self.version = tuple(map(int, versionvalue.split(','))) self.version_string = '.'.join(map(str, self.version)) self._capabilities = dict(info.items('capabilities')) # optional plugin info: try: self.description = info.get('plugin', 'description') except configparser.NoOptionError: self.description = "" try: self.author = info.get('plugin', 'author') except: self.author = "" try: self.author_email = info.get('plugin', 'author_email') except: self.author_email = "" try: self.iconurl = info.get('plugin', 'icon') except configparser.NoOptionError: self.iconurl = None try: self.url = info.get('plugin', 'url') except: self.url = "" # state: self._module = None # lazy loading self._enabled = False def get_enabled(self): return self._enabled def get_features(self, capability): if not self._enabled or not capability in self._capabilities: return [] module = self._get_module() if not module: return [] features = self._capabilities[capability] try: return [self.get_feature(module, f) for f in features.split(', ')] except KeyboardInterrupt: raise except: self.logger.exception("Failed to access features in plugin %s.", self.name) return [] def get_feature(self, module, feature): obj = module for name in feature.split('.'): obj = getattr(obj, name) return obj def _get_module(self): if not self._module: try: self._module = self._load() except Exception: self.logger.exception("Failed to load plugin %s.", self.name) return None return self._module def force_loaded(self): return bool(self._get_module()) class BuiltinPlugin(Plugin): def __init__(self, name, longname, description, capabilities, object): self.name = name self.longname = longname self.description = description self._capabilities = capabilities self._module = object self.version_string = "Built-in" self.author = self.author_email = self.url = "" self.iconurl = None self._enabled = False def _get_module(self): return self._module class PluginSystem: def __init__(self): self.logger = logging.getLogger(__name__) self.plugin_infos = [] self.notifys = [] def get_info(self): return self.plugin_infos def get(self, capability): return [(plugin, feature) for plugin in self.plugin_infos for feature in plugin.get_features(capability)] def get_from_name(self, name): for plugin in self.plugin_infos: if plugin.longname == name: return plugin return None def notify_of(self, capability, enable_cb, disable_cb): self.notifys.append((capability, enable_cb, disable_cb)) for plugin, feature in self.get(capability): enable_cb(plugin, feature) def set_enabled(self, plugin, state): if plugin._enabled != state: # make notify callbacks for each feature of the plugin: plugin._enabled = True # XXX for plugin.get_features # process the notifys in the order they were registered: order = (lambda x:x) if state else reversed for capability, enable, disable in order(self.notifys): callback = enable if state else disable for feature in plugin.get_features(capability): callback(plugin, feature) plugin._enabled = state def find_plugins(self): for path in sonata.plugins.__path__: if not os.path.isdir(path): continue for entry in os.listdir(path): if entry.startswith('_'): continue # __init__.py etc. if entry.endswith('.py'): try: self.load_info(path, entry[:-3]) except: self.logger.exception("Failed to load info: %s", os.path.join(path, entry)) def load_info(self, path, name): f = open(os.path.join(path, name+".py"), "rt", encoding="utf-8") text = f.read() f.close() pat = r'^### BEGIN PLUGIN INFO.*((\n#.*)*)\n### END PLUGIN INFO' infotext = re.search(pat, text, re.MULTILINE).group(1) uncommented = '\n'.join(line[1:].strip() for line in infotext.split('\n')) info = configparser.ConfigParser() info.read_file(StringIO(uncommented)) plugin = Plugin(path, name, info, lambda:self.import_plugin(name)) # add only newest version of each name old_plugin = self.get_from_name(plugin.longname) if old_plugin: if plugin.version > old_plugin.version: self.plugin_infos.remove(old_plugin) self.plugin_infos.append(plugin) else: self.plugin_infos.append(plugin) if not info.options('capabilities'): self.logger.warning("No capabilities in plugin %s.", name) def import_plugin(self, name): # XXX load from a .py file - no .pyc etc. __import__('sonata.plugins', {}, {}, [name], 0) plugin = getattr(sonata.plugins, name) return plugin pluginsystem = PluginSystem() �����������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/preferences.py��������������������������������������������������������0000664�0000000�0000000�00000074212�15003420405�0021373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module provides a user interface for changing configuration variables. Example usage: import preferences ... prefs = preferences.Preferences() prefs.on_prefs_real(self.window, self.prefs_window_response, tab callbacks...) """ import gettext, hashlib from gi.repository import Gtk, Gdk, GdkPixbuf from sonata.config import Config from sonata.pluginsystem import pluginsystem from sonata import ui, misc, consts, formatting import os class Extras_cbs: """Callbacks and data specific to the extras tab""" popuptimes = [] notif_toggled = None crossfade_changed = None crossfade_toggled = None class Display_cbs: """Callbacks specific to the display tab""" stylized_toggled = None art_toggled = None playback_toggled = None progress_toggled = None statusbar_toggled = None lyrics_toggled = None trayicon_available = None class Behavior_cbs: """Callbacks and data specific to the behavior tab""" trayicon_toggled = None trayicon_in_use = None sticky_toggled = None ontop_toggled = None decorated_toggled = None infofile_changed = None class Format_cbs: """Callbacks specific to the format tab""" currentoptions_changed = None libraryoptions_changed = None titleoptions_changed = None currsongoptions1_changed = None currsongoptions2_changed = None class Preferences(): """This class implements a preferences dialog for changing configuration variables. Many changes are applied instantly with respective callbacks. Closing the dialog causes a response callback. """ def __init__(self, config, reconnect, renotify, reinfofile, settings_save, populate_profiles_for_menu): self.config = config # These are callbacks to Main self.reconnect = reconnect self.renotify = renotify self.reinfofile = reinfofile self.settings_save = settings_save self.populate_profiles_for_menu = populate_profiles_for_menu # Temporary flag: self.updating_nameentry = False self.prev_host = None self.prev_password = None self.prev_port = None self.window = None self.last_tab = 0 self.display_trayicon = None self.direntry = None self.using_mpd_env_vars = False def on_prefs_real(self): """Display the preferences dialog""" self.builder = ui.builder('preferences') self.provider = ui.css_provider('preferences') self.prefswindow = self.builder.get_object('preferences_dialog') self.prefswindow.set_transient_for(self.window) self.prefsnotebook = self.builder.get_object('preferences_notebook') tabs = ('mpd', 'display', 'behavior', 'format', 'extras', 'plugins') for name in tabs: func = getattr(self, '%s_tab' % name) cbs = globals().get('%s_cbs' % name.capitalize()) func(cbs) close_button = self.builder.get_object('preferences_closebutton') self.prefswindow.show_all() self.prefsnotebook.set_current_page(self.last_tab) close_button.grab_focus() self.prefswindow.connect('response', self._window_response) # Save previous connection properties to determine if we should try to # connect to MPD after prefs are closed: self.prev_host = self.config.host[self.config.profile_num] self.prev_port = self.config.port[self.config.profile_num] self.prev_password = self.config.password[self.config.profile_num] def mpd_tab(self, cbs=None): """Construct and layout the MPD tab""" #frame.set_shadow_type(Gtk.ShadowType.NONE) controlbox = self.builder.get_object('connection_frame_label_widget') profiles = self.builder.get_object('connection_profiles') add_profile = self.builder.get_object('connection_add_profile') remove_profile = self.builder.get_object('connection_remove_profile') self._populate_profile_combo(profiles, self.config.profile_num, remove_profile) nameentry = self.builder.get_object('connection_name') hostentry = self.builder.get_object('connection_host') portentry = self.builder.get_object('connection_port') direntry = self.builder.get_object('connection_dir') self.direntry = direntry direntry.connect('selection-changed', self._direntry_changed, profiles) passwordentry = self.builder.get_object('connection_password') autoconnect = self.builder.get_object('connection_autoconnect') autoconnect.set_active(self.config.autoconnect) autoconnect.connect('toggled', self._config_widget_active, 'autoconnect') # Fill in entries with current profile: self._profile_chosen(profiles, nameentry, hostentry, portentry, passwordentry, direntry) # Update display if $MPD_HOST or $MPD_PORT is set: host, port, password = misc.mpd_env_vars() if host or port: self.using_mpd_env_vars = True if not host: host = "" if not port: port = 0 if not password: password = "" hostentry.set_text(str(host)) portentry.set_value(port) passwordentry.set_text(str(password)) nameentry.set_text(_("Using MPD_HOST/PORT")) for widget in [hostentry, portentry, passwordentry, nameentry, profiles, add_profile, remove_profile]: widget.set_sensitive(False) else: self.using_mpd_env_vars = False nameentry.connect('changed', self._nameentry_changed, profiles, remove_profile) hostentry.connect('changed', self._hostentry_changed, profiles) portentry.connect('value-changed', self._portentry_changed, profiles) passwordentry.connect('changed', self._passwordentry_changed, profiles) profiles.connect('changed', self._profile_chosen, nameentry, hostentry, portentry, passwordentry, direntry) add_profile.connect('clicked', self._add_profile, nameentry, profiles, remove_profile) remove_profile.connect('clicked', self._remove_profile, profiles, remove_profile) def extras_tab(self, cbs): """Construct and layout the extras tab""" if not self.scrobbler.imported(): self.config.as_enabled = False as_checkbox = self.builder.get_object('scrobbler_check') as_checkbox.set_active(self.config.as_enabled) as_user_label = self.builder.get_object('scrobbler_username_label') as_user_entry = self.builder.get_object('scrobbler_username_entry') as_user_entry.set_text(self.config.as_username) as_user_entry.connect('changed', self._as_username_changed) as_pass_label = self.builder.get_object('scrobbler_password_label') as_pass_entry = self.builder.get_object('scrobbler_password_entry') as_pass_entry.set_text(self.config.as_password_md5) as_pass_entry.connect('changed', self._as_password_changed) display_notification = self.builder.get_object('notification_check') display_notification.set_active(self.config.show_notification) time_names = ["%s %s" % (i , ngettext('second', 'seconds', int(i))) for i in cbs.popuptimes if i != _('Entire song')] notification_options = self.builder.get_object('notification_time_combo') for time in time_names: notification_options.append_text(time) notification_options.connect('changed', self._notiftime_changed) notification_options.set_active(self.config.popup_option) notification_locs = self.builder.get_object('notification_loc_combo') notification_locs.set_active(self.config.traytips_notifications_location) notification_locs.connect('changed', self._notiflocation_changed) notifhbox = self.builder.get_object('notification_box') display_notification.connect('toggled', cbs.notif_toggled, notifhbox) if not self.config.show_notification: notifhbox.set_sensitive(False) crossfadespin = self.builder.get_object('crossfade_time') crossfadespin.set_value(self.config.xfade) crossfadespin.connect('value-changed', cbs.crossfade_changed) crossfadelabel2 = self.builder.get_object('crossfade_label') crossfadelabel3 = self.builder.get_object('crossfade_extra_label') crossfadecheck = self.builder.get_object('crossfade_check') crossfadecheck.connect('toggled', self._crossfadecheck_toggled, crossfadespin, crossfadelabel2, crossfadelabel3) crossfadecheck.connect('toggled', cbs.crossfade_toggled, crossfadespin) crossfadecheck.set_active(self.config.xfade_enabled) crossfadecheck.toggled() # Force the toggled callback as_checkbox.connect('toggled', self._as_enabled_toggled, as_user_entry, as_pass_entry, as_user_label, as_pass_label) if not self.config.as_enabled or not self.scrobbler.imported(): for widget in (as_user_entry, as_pass_entry, as_user_label, as_pass_label): widget.set_sensitive(False) def display_tab(self, cbs): """Construct and layout the display tab""" art = self.builder.get_object('art_check') art.set_active(self.config.show_covers) stylized_combo = self.builder.get_object('art_style_combo') stylized_combo.set_active(self.config.covers_type) stylized_combo.connect('changed', cbs.stylized_toggled) art_prefs = self.builder.get_object('art_preferences') art_prefs.set_sensitive(self.config.show_covers) art_combo = self.builder.get_object('art_search_combo') art_combo.set_active(self.config.covers_pref) art_combo.connect('changed', self._config_widget_active, 'covers_pref') #FIXME move into preferences_display.ui? art_location = self.builder.get_object('art_save_combo') for item in ["%s/%s" % (_("SONG_DIR"), item) for item in ("cover.jpg", "album.jpg", "folder.jpg", self.config.art_location_custom_filename or _("custom"))]: art_location.append_text(item) art_location.set_active(self.config.art_location) art_location.connect('changed', self._art_location_changed) art.connect('toggled', cbs.art_toggled, art_prefs) playback = self.builder.get_object('playback_buttons_check') playback.set_active(self.config.show_playback) playback.connect('toggled', cbs.playback_toggled) progress = self.builder.get_object('progressbar_check') progress.set_active(self.config.show_progress) progress.connect('toggled', cbs.progress_toggled) statusbar = self.builder.get_object('statusbar_check') statusbar.set_active(self.config.show_statusbar) statusbar.connect('toggled', cbs.statusbar_toggled) lyrics = self.builder.get_object('lyrics_check') lyrics.set_active(self.config.show_lyrics) lyrics_location = self.builder.get_object('lyrics_save_combo') lyrics_location.set_active(self.config.lyrics_location) lyrics_location.connect('changed', self._lyrics_location_changed) lyrics_location_hbox = self.builder.get_object('lyrics_preferences') lyrics_location_hbox.set_sensitive(self.config.show_lyrics) lyrics.connect('toggled', cbs.lyrics_toggled, lyrics_location_hbox) trayicon = self.builder.get_object('tray_icon_check') self.display_trayicon = trayicon trayicon.set_active(self.config.show_trayicon) trayicon.set_sensitive(cbs.trayicon_available) def behavior_tab(self, cbs): """Construct and layout the behavior tab""" frame = self.builder.get_object('behavior_frame') sticky = self.builder.get_object('behavior_sticky_check') sticky.set_active(self.config.sticky) sticky.connect('toggled', cbs.sticky_toggled) ontop = self.builder.get_object('behavior_ontop_check') ontop.set_active(self.config.ontop) ontop.connect('toggled', cbs.ontop_toggled) decor = self.builder.get_object('behavior_decor_check') decor.set_active(not self.config.decorated) decor.connect('toggled', cbs.decorated_toggled, self.prefswindow) minimize = self.builder.get_object('behavior_minimize_check') minimize.set_active(self.config.minimize_to_systray) minimize.connect('toggled', self._config_widget_active, 'minimize_to_systray') self.display_trayicon.connect('toggled', cbs.trayicon_toggled, minimize) minimize.set_sensitive(cbs.trayicon_in_use) update_start = self.builder.get_object('misc_updatestart_check') update_start.set_active(self.config.update_on_start) update_start.connect('toggled', self._config_widget_active, 'update_on_start') exit_stop = self.builder.get_object('misc_exit_stop_check') exit_stop.set_active(self.config.stop_on_exit) exit_stop.connect('toggled', self._config_widget_active, 'stop_on_exit') infofile_usage = self.builder.get_object('misc_infofile_usage_check') infofile_usage.set_active(self.config.use_infofile) infopath_options = self.builder.get_object('misc_infofile_entry') infopath_options.set_text(self.config.infofile_path) infopath_options.connect('focus_out_event', cbs.infofile_changed) infopath_options.connect('activate', cbs.infofile_changed, None) if not self.config.use_infofile: infopath_options.set_sensitive(False) infofile_usage.connect('toggled', self._infofile_toggled, infopath_options) def format_tab(self, cbs): """Construct and layout the format tab""" playlist_entry = self.builder.get_object('format_playlist_entry') playlist_entry.set_text(self.config.currentformat) library_entry = self.builder.get_object('format_library_entry') library_entry.set_text(self.config.libraryformat) window_entry = self.builder.get_object('format_window_entry') window_entry.set_text(self.config.titleformat) current1_entry = self.builder.get_object('format_current1_entry') current1_entry.set_text(self.config.currsongformat1) current2_entry = self.builder.get_object('format_current2_entry') current2_entry.set_text(self.config.currsongformat2) entries = [playlist_entry, library_entry, window_entry, current1_entry, current2_entry] entry_cbs = (cbs.currentoptions_changed, cbs.libraryoptions_changed, cbs.titleoptions_changed, cbs.currsongoptions1_changed, cbs.currsongoptions2_changed) for entry, cb, next in zip(entries, entry_cbs, entries[1:] + entries[:1]): entry.connect('focus_out_event', cb) entry.connect('activate', lambda _, n: n.grab_focus(), next) format_grid = self.builder.get_object('format_avail_descs') codeset = formatting.formatcodes codes = (codeset[:len(codeset) // 2], codeset[len(codeset) // 2:]) def make_label(content): return Gtk.Label('<small>{}</small>'.format(content), use_markup=True, xalign=0, yalign=0) for column_base, codegroup in enumerate(codes): column = column_base * 2 for row, code in enumerate(codegroup): format_code = make_label("%{}".format(code.code)) format_code.get_style_context().add_class('format_code') format_desc = make_label(code.description) format_grid.attach(format_code, column, row, 1, 1) format_grid.attach(format_desc, column + 1, row, 1, 1) additionalinfo = self.builder.get_object('format_additional_label') # FIXME need to either separate markup from localized strings OR # include markup in the strings and let the translators work around them row = len(codes[0]) enclosed_code = make_label('{ }') enclosed_code.get_style_context().add_class('format_code') enclosed_desc = make_label( _('Info displayed only if all enclosed tags are defined')) enclosed_desc.set_line_wrap(True) enclosed_desc.set_max_width_chars(40) column_code = make_label('|') column_code.get_style_context().add_class('format_code') column_desc = make_label(_('Creates columns in the current playlist')) column_desc.set_line_wrap(True) column_desc.set_max_width_chars(40) for widget in (enclosed_code, enclosed_desc): widget.get_style_context().add_class('additional_format') format_grid.attach(enclosed_code, 0, row, 1, 1) format_grid.attach(enclosed_desc, 1, row, 3, 1) row += 1 format_grid.attach(column_code, 0, row, 1, 1) format_grid.attach(column_desc, 1, row, 3, 1) def plugins_tab(self, cbs=None): """Construct and layout the plugins tab""" self.plugin_UIManager = self.builder.get_object('plugins_ui_manager') menu_handlers = { "plugin_configure": self.plugin_configure, "plugin_about": self.plugin_about } self.builder.connect_signals(menu_handlers) self.pluginview = self.builder.get_object('plugins_treeview') self.pluginselection = self.pluginview.get_selection() plugindata = self.builder.get_object('plugins_store') self.pluginview.connect('button-press-event', self.plugin_click) plugincheckcell = self.builder.get_object('plugins_check_renderer') plugincheckcell.connect('toggled', self.plugin_toggled, (plugindata, 0)) plugindata.clear() for plugin in pluginsystem.get_info(): pb = self.plugin_get_icon_pixbuf(plugin) plugin_text = "<b>" + plugin.longname + "</b> " + plugin.version_string plugin_text += "\n" + plugin.description enabled = plugin.get_enabled() plugindata.append((enabled, pb, plugin_text)) def _window_response(self, window, response): if response == Gtk.ResponseType.CLOSE: self.last_tab = self.prefsnotebook.get_current_page() #XXX: These two are probably never triggered if self.config.show_lyrics and self.config.lyrics_location != consts.LYRICS_LOCATION_HOME: if not os.path.isdir(self.config.current_musicdir): ui.show_msg(self.window, _("To save lyrics to the music file's directory, you must specify a valid music directory."), _("Music Dir Verification"), 'musicdirVerificationError', Gtk.ButtonsType.CLOSE) # Set music_dir entry focused: self.prefsnotebook.set_current_page(0) self.direntry.grab_focus() return if self.config.show_covers and self.config.art_location != consts.ART_LOCATION_HOMECOVERS: if not os.path.isdir(self.config.current_musicdir): ui.show_msg(self.window, _("To save artwork to the music file's directory, you must specify a valid music directory."), _("Music Dir Verification"), 'musicdirVerificationError', Gtk.ButtonsType.CLOSE) # Set music_dir entry focused: self.prefsnotebook.set_current_page(0) self.direntry.grab_focus() return if not self.using_mpd_env_vars: if self.prev_host != self.config.host[self.config.profile_num] or self.prev_port != self.config.port[self.config.profile_num] or self.prev_password != self.config.password[self.config.profile_num]: # Try to connect if mpd connection info has been updated: ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) self.reconnect() self.settings_save() self.populate_profiles_for_menu() ui.change_cursor(None) window.destroy() def _config_widget_active(self, widget, member): """Sets a config attribute to the widget's active value""" setattr(self.config, member, widget.get_active()) def _as_enabled_toggled(self, checkbox, *widgets): if checkbox.get_active(): self.scrobbler.import_module(True) if self.scrobbler.imported(): self.config.as_enabled = checkbox.get_active() self.scrobbler.init() for widget in widgets: widget.set_sensitive(self.config.as_enabled) elif checkbox.get_active(): checkbox.set_active(False) def _as_username_changed(self, entry): if self.scrobbler.imported(): self.config.as_username = entry.get_text() self.scrobbler.auth_changed() def _as_password_changed(self, entry): if self.scrobbler.imported(): self.config.as_password_md5 = hashlib.md5( entry.get_text().encode('utf-8')).hexdigest() self.scrobbler.auth_changed() def _nameentry_changed(self, entry, profile_combo, remove_profiles): if not self.updating_nameentry: profile_num = profile_combo.get_active() self.config.profile_names[profile_num] = entry.get_text() self._populate_profile_combo(profile_combo, profile_num, remove_profiles) def _hostentry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.host[profile_num] = entry.get_text() def _portentry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.port[profile_num] = entry.get_value_as_int() def _passwordentry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.password[profile_num] = entry.get_text() def _direntry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.musicdir[profile_num] = misc.sanitize_musicdir(entry.get_filename()) def _add_profile(self, _button, nameentry, profile_combo, remove_profiles): self.updating_nameentry = True profile_num = profile_combo.get_active() self.config.profile_names.append(_("New Profile")) nameentry.set_text(self.config.profile_names[-1]) self.updating_nameentry = False self.config.host.append(self.config.host[profile_num]) self.config.port.append(self.config.port[profile_num]) self.config.password.append(self.config.password[profile_num]) self.config.musicdir.append(self.config.musicdir[profile_num]) self._populate_profile_combo(profile_combo, len(self.config.profile_names)-1, remove_profiles) self.populate_profiles_for_menu() def _remove_profile(self, _button, profile_combo, remove_profiles): profile_num = profile_combo.get_active() if profile_num == self.config.profile_num: # Profile deleted, revert to first profile: self.config.profile_num = 0 self.reconnect(None) self.config.profile_names.pop(profile_num) self.config.host.pop(profile_num) self.config.port.pop(profile_num) self.config.password.pop(profile_num) self.config.musicdir.pop(profile_num) self.populate_profiles_for_menu() if profile_num > 0: self._populate_profile_combo(profile_combo, profile_num-1, remove_profiles) else: self._populate_profile_combo(profile_combo, 0, remove_profiles) def _profile_chosen(self, profile_combo, nameentry, hostentry, portentry, passwordentry, direntry): profile_num = profile_combo.get_active() self.updating_nameentry = True nameentry.set_text(str(self.config.profile_names[profile_num])) self.updating_nameentry = False hostentry.set_text(str(self.config.host[profile_num])) portentry.set_value(self.config.port[profile_num]) passwordentry.set_text(str(self.config.password[profile_num])) direntry.set_current_folder(misc.sanitize_musicdir(self.config.musicdir[profile_num])) def _populate_profile_combo(self, profile_combo, active_index, remove_profiles): new_model = Gtk.ListStore(str) new_model.clear() profile_combo.set_model(new_model) for i, profile_name in enumerate(self.config.profile_names): combo_text = "[%s] %s" % (i+1, profile_name[:15]) if len(profile_name) > 15: combo_text += "..." profile_combo.append_text(combo_text) profile_combo.set_active(active_index) # Enable remove button if there is more than one profile remove_profiles.set_sensitive(len(self.config.profile_names) > 1) def _lyrics_location_changed(self, combobox): self.config.lyrics_location = combobox.get_active() def _art_location_changed(self, combobox): if combobox.get_active() == consts.ART_LOCATION_CUSTOM: dialog = self.builder.get_object('custom_art_dialog') # Prompt user for playlist name: entry = self.builder.get_object('custom_art_entry') dialog.vbox.show_all() response = dialog.run() if response == Gtk.ResponseType.ACCEPT: self.config.art_location_custom_filename = entry.get_text().replace("/", "") iter = combobox.get_active_iter() model = combobox.get_model() model.set(iter, 0, "SONG_DIR/" + (self.config.art_location_custom_filename or _("custom"))) else: # Revert to non-custom item in combobox: combobox.set_active(self.config.art_location) dialog.hide() self.config.art_location = combobox.get_active() def _crossfadecheck_toggled(self, button, *widgets): button_active = button.get_active() for widget in widgets: widget.set_sensitive(button_active) def _notiflocation_changed(self, combobox): self.config.traytips_notifications_location = combobox.get_active() self.renotify() def _notiftime_changed(self, combobox): self.config.popup_option = combobox.get_active() self.renotify() def _infofile_toggled(self, button, infofileformatbox): self.config.use_infofile = button.get_active() infofileformatbox.set_sensitive(self.config.use_infofile) if self.config.use_infofile: self.reinfofile() def plugin_click(self, _widget, event): if event.button == 3: self.plugin_UIManager.get_widget('/pluginmenu').popup(None, None, None, None, event.button, event.time) def plugin_toggled(self, _renderer, path, user_data): model, column = user_data enabled = not model[path][column] plugin = pluginsystem.get_info()[int(path)] pluginsystem.set_enabled(plugin, enabled) if enabled: # test that the plugin loads or already was loaded if not plugin.force_loaded(): enabled = False pluginsystem.set_enabled(plugin, enabled) model[path][column] = enabled def plugin_about(self, _widget): plugin = self.plugin_get_selected() iconpb = self.plugin_get_icon_pixbuf(plugin) about_text = plugin.longname + "\n" + plugin.author + "\n" if len(plugin.author_email) > 0: about_text += "<" + plugin.author_email + ">" self.about_dialog = Gtk.AboutDialog() self.about_dialog.set_name(plugin.longname) self.about_dialog.set_role('about') self.about_dialog.set_version(plugin.version_string) if len(plugin.description.strip()) > 0: self.about_dialog.set_comments(plugin.description) if len(plugin.author.strip()) > 0: author = plugin.author if len(plugin.author.strip()) > 0: author += ' <' + plugin.author_email + '>' self.about_dialog.set_authors([author]) if len(plugin.url.strip()) > 0: self.about_dialog.connect("activate-link", self.plugin_show_website) self.about_dialog.set_website(plugin.url) self.about_dialog.set_logo(iconpb) self.about_dialog.connect('response', self.plugin_about_close) self.about_dialog.connect('delete_event', self.plugin_about_close) self.about_dialog.show_all() def plugin_about_close(self, _event, _data=None): self.about_dialog.hide() return True def plugin_show_website(self, _dialog, link): return misc.browser_load(link, self.config.url_browser, \ self.window) def plugin_configure(self, _widget): plugin = self.plugin_get_selected() ui.show_msg(self.prefswindow, "Nothing yet implemented.", "Configure", "pluginConfigure", Gtk.ButtonsType.CLOSE) def plugin_get_selected(self): model, i = self.pluginselection.get_selected() plugin_num = model.get_path(i).get_indices()[0] return pluginsystem.get_info()[plugin_num] def plugin_get_icon_pixbuf(self, plugin): pb = plugin.iconurl try: pb = GdkPixbuf.Pixbuf.new_from_file(pb) except: pb = self.pluginview.render_icon(Gtk.STOCK_EXECUTE, Gtk.IconSize.LARGE_TOOLBAR) return pb ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/scrobbler.py����������������������������������������������������������0000664�0000000�0000000�00000022544�15003420405�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module makes Sonata submit the songs played to a Last.fm account. Example usage: import scrobbler self.scrobbler = scrobbler.Scrobbler(self.config) self.scrobbler.import_module() self.scrobbler.init() ... self.scrobbler.handle_change_status(False, self.prevsonginfo) """ import logging import os import sys import threading # init, np, post start threads init_thread, do_np, do_post import time audioscrobbler = None # imported when first needed from sonata import mpdhelper as mpdh class Scrobbler: def __init__(self, config): self.logger = logging.getLogger(__name__) self.config = config self.scrob = None self.scrob_post = None self.scrob_start_time = "" self.scrob_playing_duration = 0 self.scrob_last_prepared = "" self.elapsed_now = None def import_module(self, _show_error=False): """Import the audioscrobbler module""" # We need to try to import audioscrobbler either when the app starts # (if as_enabled=True) or if the user enables it in prefs. global audioscrobbler if audioscrobbler is None: from sonata import audioscrobbler def imported(self): """Return True if the audioscrobbler module has been imported""" return audioscrobbler is not None def init(self): """Initialize the Audioscrobbler support if enabled and configured""" if audioscrobbler is not None and self.config.as_enabled and \ len(self.config.as_username) > 0 and \ len(self.config.as_password_md5) > 0: thread = threading.Thread(target=self.init_thread) thread.name = "Scrobbler" thread.daemon = True thread.start() def init_thread(self): if self.scrob is None: self.scrob = audioscrobbler.AudioScrobbler() if self.scrob_post is None: self.scrob_post = self.scrob.post(self.config.as_username, self.config.as_password_md5, verbose=True) else: if self.scrob_post.authenticated: return # We are authenticated else: self.scrob_post = self.scrob.post(self.config.as_username, self.config.as_password_md5, verbose=True) try: self.scrob_post.auth() except Exception as e: self.logger.error("Error authenticating audioscrobbler: %r", e) self.scrob_post = None if self.scrob_post: self.retrieve_cache() def handle_change_status(self, state, prevstate, prevsonginfo, songinfo=None, mpd_time_now=None): """Handle changes to play status, submitting info as appropriate""" if prevsonginfo and 'time' in prevsonginfo: prevsong_time = prevsonginfo.time else: prevsong_time = None if state in ('play', 'pause'): elapsed_prev = self.elapsed_now self.elapsed_now, length = [float(c) for c in mpd_time_now.split(':')] current_file = songinfo.file if prevstate == 'stop': # Switched from stop to play, prepare current track: self.prepare(songinfo) elif (prevsong_time and (self.scrob_last_prepared != current_file or (self.scrob_last_prepared == current_file and elapsed_prev and self.elapsed_now <= 1 and self.elapsed_now < elapsed_prev and length > 0))): # New song is playing, post previous track if time criteria is # met. In order to account for the situation where the same # song is played twice in a row, we will check if previous # elapsed time was larger than current and we're at the # beginning of the same song now if self.scrob_playing_duration > 4 * 60 or \ self.scrob_playing_duration > int(prevsong_time) / 2: if self.scrob_start_time != "": self.post(prevsonginfo) # Prepare current track: self.prepare(songinfo) # Keep track of the total amount of time that the current song # has been playing: now = time.time() if prevstate != 'pause': self.scrob_playing_duration += now - self.scrob_prev_time self.scrob_prev_time = now else: # stopped: self.elapsed_now = 0 if prevsong_time: if self.scrob_playing_duration > 4 * 60 or \ self.scrob_playing_duration > int(prevsong_time) / 2: # User stopped the client, post previous track if time # criteria is met: if self.scrob_start_time != "": self.post(prevsonginfo) def auth_changed(self): """Try to re-authenticate""" if self.scrob_post: if self.scrob_post.authenticated: self.scrob_post = None def prepare(self, songinfo): if audioscrobbler is not None: self.scrob_start_time = "" self.scrob_last_prepared = "" self.scrob_playing_duration = 0 self.scrob_prev_time = time.time() if self.config.as_enabled and songinfo: # No need to check if the song is 30 seconds or longer, # audioscrobbler.py takes care of that. if 'time' in songinfo: self.np(songinfo) self.scrob_start_time = str(int(time.time())) self.scrob_last_prepared = songinfo.file def np(self, songinfo): thread = threading.Thread(target=self.do_np, args=(songinfo,)) thread.name = "ScrobblerNowPlaying" thread.daemon = True thread.start() def do_np(self, songinfo): self.init() if self.config.as_enabled and self.scrob_post and songinfo: if 'artist' in songinfo and \ 'title' in songinfo and \ 'time' in songinfo: album = songinfo.get('album', '') tracknumber = songinfo.get('track', '') try: self.scrob_post.nowplaying(songinfo.artist, songinfo.title, songinfo.time, tracknumber, album) except: self.logger.exception( "Unable to send 'now playing' data to the scrobbler") time.sleep(10) def post(self, prevsonginfo): self.init() if self.config.as_enabled and self.scrob_post and prevsonginfo: if 'artist' in prevsonginfo and \ 'title' in prevsonginfo and \ 'time' in prevsonginfo: album = prevsonginfo.get('album', '') tracknumber = prevsonginfo.get('track', '') try: self.scrob_post.addtrack( prevsonginfo.artist, prevsonginfo.title, prevsonginfo.time, self.scrob_start_time, tracknumber, album) except: self.logger.critical("Unable to add track to scrobbler") thread = threading.Thread(target=self.do_post) thread.name = "ScrobblerPost" thread.daemon = True thread.start() self.scrob_start_time = "" def do_post(self): for _i in range(0, 3): if not self.scrob_post: return if len(self.scrob_post.cache) == 0: return try: self.scrob_post.post() except audioscrobbler.AudioScrobblerConnectionError as e: self.logger.exception( "Error while posting data to the scrobbler") time.sleep(10) def save_cache(self): """Save the cache in a file""" filename = os.path.expanduser('~/.config/sonata/ascache') if self.scrob_post: self.scrob_post.savecache(filename) def retrieve_cache(self): filename = os.path.expanduser('~/.config/sonata/ascache') if self.scrob_post: self.scrob_post.retrievecache(filename) ������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/song.py���������������������������������������������������������������0000664�0000000�0000000�00000002027�15003420405�0020033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. from collections import namedtuple _SongRecord = namedtuple('SongRecord', ['album', 'artist', 'genre', 'year', 'path']) def SongRecord(album=None, artist=None, genre=None, year=None, path=None): return _SongRecord(album, artist, genre, year, path) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/streams.py������������������������������������������������������������0000664�0000000�0000000�00000017774�15003420405�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module implements a user interface for bookmarking remote music streams. Example usage: import streams self.streams = streams.Streams(self.config, self.window, self.on_streams_button_press, self.on_add_item, self.settings_save, self.TAB_STREAMS) streamswindow, streamsevbox = self.streams.get_widgets() ... self.streams.populate() ... """ import logging import os from gi.repository import Gtk, Gdk, Pango from sonata import misc, ui logger = logging.getLogger(__name__) def parse_stream(stream_uri, fp): default = [stream_uri] # We only download the first 4k bytes, which should be sufficient to get an # idea if the stream is a M3U/PLS/etc. playlist or a binary file. content = fp.read(4000) try: content = content.decode() # If we can decode the first bytes, then read up to 64k bytes to parse # this as a playlist. content = content + fp.read(60000).decode() except UnicodeDecodeError: # Looks a binary content... logger.info("Adding binary stream from %s", stream_uri) return default if "[playlist]" in content: # pls: return parse_pls(content) elif "#EXTM3U" in content: # extended m3u: return parse_m3u(content) elif "http://" in content: # m3u or generic list: return parse_m3u(content) else: return default def parse_pls(f): lines = f.split("\n") for line in lines: line = line.replace('\r', '') delim = line.find("=") + 1 if delim > 0: line = line[delim:] if len(line) > 7 and line[0:7] == 'http://': yield line elif len(line) > 6 and line[0:6] == 'ftp://': yield line def parse_m3u(f): lines = f.split("\n") for line in lines: line = line.replace('\r', '') if len(line) > 7 and line[0:7] == 'http://': yield line elif len(line) > 6 and line[0:6] == 'ftp://': yield line class Streams: def __init__(self, config, window, on_streams_button_press, on_add_item, settings_save, TAB_STREAMS, add_tab): self.config = config self.window = window self.on_streams_button_press = on_streams_button_press self.on_add_item = on_add_item self.settings_save = settings_save self.stream_edit_dialog = None self.builder = ui.builder('streams') # Streams tab self.streams = self.builder.get_object('streams_page_treeview') self.streams_selection = self.streams.get_selection() self.streamswindow = self.builder.get_object('streams_page_scrolledwindow') self.tab_widget = self.builder.get_object('streams_tab_eventbox') self.tab_label = self.builder.get_object('streams_tab_label') self.tab_label.set_text(TAB_STREAMS) self.tab = add_tab(self.streamswindow, self.tab_widget, TAB_STREAMS, self.streams) self.streams.connect('button_press_event', self.on_streams_button_press) self.streams.connect('row_activated', self.on_streams_activated) self.streams.connect('key-press-event', self.on_streams_key_press) # Initialize streams data and widget self.streamsdata = self.builder.get_object('streams_liststore') self.streams.set_search_column(1) def get_model(self): return self.streamsdata def get_widgets(self): return self.streamswindow def get_treeview(self): return self.streams def get_selection(self): return self.streams_selection def populate(self): self.streamsdata.clear() streamsinfo = [{'name' : misc.escape_html(name), 'uri' : misc.escape_html(uri)} for name, uri in zip(self.config.stream_names, self.config.stream_uris)] streamsinfo.sort(key=lambda x: x["name"].lower()) # Remove case sensitivity for item in streamsinfo: self.streamsdata.append([Gtk.STOCK_NETWORK, item["name"], item["uri"]]) def on_streams_key_press(self, widget, event): if event.keyval == Gdk.keyval_from_name('Return'): self.on_streams_activated(widget, widget.get_cursor()[0]) return True def on_streams_activated(self, _treeview, _path, _column=0): self.on_add_item(None) def on_streams_edit(self, action): model, selected = self.streams_selection.get_selected_rows() try: streamname = misc.unescape_html(model.get_value(model.get_iter(selected[0]), 1)) for i, name in enumerate(self.config.stream_names): if name == streamname: self.on_streams_new(action, i) return except: pass def on_streams_new(self, _action, stream_num=-1): if stream_num > -1: edit_mode = True else: edit_mode = False if not self.stream_edit_dialog: self.stream_edit_dialog = self.builder.get_object( 'stream_edit_dialog') self.stream_edit_dialog.set_transient_for(self.window) if edit_mode: self.stream_edit_dialog.set_title(_("Edit Stream")) else: self.stream_edit_dialog.set_title(_("New Stream")) nameentry = self.builder.get_object('stream_edit_name_entry') if edit_mode: nameentry.set_text(self.config.stream_names[stream_num]) else: nameentry.set_text("") urlentry = self.builder.get_object('stream_edit_url_entry') if edit_mode: urlentry.set_text(self.config.stream_uris[stream_num]) else: urlentry.set_text("") self.stream_edit_dialog.show_all() response = self.stream_edit_dialog.run() if response == Gtk.ResponseType.ACCEPT: name = nameentry.get_text() uri = urlentry.get_text() if len(name) > 0 and len(uri) > 0: # Make sure this stream name doesn't already exit: i = 0 for item in self.config.stream_names: # Prevent a name collision in edit_mode.. if not edit_mode or (edit_mode and i != stream_num): if item == name: self.stream_edit_dialog.hide() if self._prompt_replace(): # Pop existing stream: self.config.stream_names.pop(i) self.config.stream_uris.pop(i) else: return i = i + 1 if edit_mode: self.config.stream_names.pop(stream_num) self.config.stream_uris.pop(stream_num) self.config.stream_names.append(name) self.config.stream_uris.append(uri) self.populate() self.settings_save() self.stream_edit_dialog.hide() def _prompt_replace(self): prompt = _("A stream with this name already exists. Would you like to replace it?") return ui.show_msg(self.window, prompt, _("New Stream"), 'newStreamError', Gtk.ButtonsType.YES_NO) == Gtk.ResponseType.YES ����multani-sonata-bf88fdc/sonata/tagedit.py������������������������������������������������������������0000664�0000000�0000000�00000037244�15003420405�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module provides a user interface for editing the metadata tags of local music files. Example usage: import tagedit tageditor = tagedit.TagEditor(self.window, self.tags_mpd_update) tageditor.on_tags_edit(files, temp_mpdpaths, self.musicdir[self.profile_num]) """ import os import re from gi.repository import Gtk, GLib tagpy = None # module loaded when needed from sonata import ui, misc class TagEditor: """This class implements a dialog for editing music metadata tags. When the dialog closes, the callback gets the list of updates made. """ def __init__(self, window, tags_mpd_update, tags_set_use_mpdpath): self.window = window self.tags_mpd_update = tags_mpd_update self.tags_set_use_mpdpath = tags_set_use_mpdpath self.file_label = None self.curr_mpdpath = None self.tagnum = None self.use_mpdpaths = None self.edit_window = None self.entries = None self.tags = None self.builder = ui.builder('tagedit') self.css_provider = ui.css_provider('tagedit') def _init_edit_window(self): self.edit_window = self.builder.get_object('tags_dialog') self.edit_window.set_transient_for(self.window) self.file_label = self.builder.get_object('tags_file_label') genre_combo = self.builder.get_object('tags_genre_comboboxtext') for genre in self.tags_win_genres(): genre_combo.append_text(genre) expand_arrow = self.builder.get_object('tags_expand_arrow') expand_button = self.builder.get_object('tags_expand_file_button') self.set_expandbutton_state(expand_button, expand_arrow) expand_button.connect('clicked', self.toggle_path, expand_arrow) year_entry = self.builder.get_object('tags_year_entry') year_entry.connect('insert_text', self.tags_win_entry_constraint, True) track_entry = self.builder.get_object('tags_track_entry') track_entry.connect('insert_text', self.tags_win_entry_constraint, False) artist_entry = self.builder.get_object('tags_artist_entry') album_entry = self.builder.get_object('tags_album_entry') title_entry = self.builder.get_object('tags_title_entry') genre_entry = self.builder.get_object('tags_genre_entry') comment_entry = self.builder.get_object('tags_comment_entry') self.entries = { 'title': title_entry, 'artist': artist_entry, 'album': album_entry, 'year': year_entry, 'track': track_entry, 'genre': genre_entry, 'comment': comment_entry,} year_button = self.builder.get_object('tags_save_year_button') track_button = self.builder.get_object('tags_save_track_button') artist_button = self.builder.get_object('tags_save_artist_button') album_button = self.builder.get_object('tags_save_album_button') title_button = self.builder.get_object('tags_save_title_button') genre_button = self.builder.get_object('tags_save_genre_button') comment_button = self.builder.get_object('tags_save_comment_button') buttons = (title_button, artist_button, album_button, year_button, track_button, genre_button, comment_button) names = ('title', 'artist', 'album', 'year', 'track', 'genre', 'comment') for name, button in zip(names, buttons): entry = self.entries[name] entry.connect('changed', self.tags_win_entry_changed) button.connect('clicked', self.tags_win_apply_all, name, entry) def on_tags_edit(self, files, temp_mpdpaths, music_dir): """Display the editing dialog""" # Try loading module global tagpy if tagpy is None: try: import tagpy except ImportError: ui.show_msg(self.window, _("Taglib and/or tagpy not found, tag editing support disabled."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) ui.change_cursor(None) return # Set default tag encoding to utf8.. fixes some reported bugs. import tagpy.id3v2 as id3v2 id3v2.FrameFactory.instance().setDefaultTextEncoding(tagpy.StringType.UTF8) # Make sure tagpy is at least 0.91 if hasattr(tagpy.Tag.title, '__call__'): ui.show_msg(self.window, _("Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) ui.change_cursor(None) return if not os.path.isdir(music_dir): ui.show_msg(self.window, _("The path %s does not exist. Please specify a valid music directory in preferences.") % music_dir, _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) ui.change_cursor(None) return # XXX file list was created here if len(files) == 0: ui.change_cursor(None) return # Initialize: self.tagnum = -1 self.tags = [{ 'title': '', 'artist': '', 'album': '', 'year': '', 'track': '', 'genre': '', 'comment': '', 'title-changed': False, 'artist-changed': False, 'album-changed': False, 'year-changed': False, 'track-changed': False, 'genre-changed': False, 'comment-changed': False, 'fullpath': filename, 'mpdpath': path,} for filename, path in zip(files, temp_mpdpaths)] if not os.path.exists(self.tags[0]['fullpath']): ui.change_cursor(None) ui.show_msg(self.window, _("File '%s' not found. Please specify a valid music directory in preferences.") % self.tags[0]['fullpath'], _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) return if not self.tags_next_tag(): ui.change_cursor(None) ui.show_msg(self.window, _("No music files with editable tags found."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) return if not self.edit_window: self._init_edit_window() saveall_button = self.builder.get_object('tags_saveall_button') if len(files) > 1: # Only show save all button if more than one song being edited. saveall_button.show() saveall_button.set_property("visible", True) else: saveall_button.hide() saveall_button.set_property("visible", False) self.tags_win_update() self.edit_window.show_all() SAVE_ALL = -12 done = False while not done: # Next file: self.tags_win_update() response = self.edit_window.run() if response == SAVE_ALL: self.save_tag() while self.tags_next_tag(): self.tags_win_update() self.save_tag() done = True elif response == Gtk.ResponseType.ACCEPT: self.save_tag() done = not self.tags_next_tag() if done: # To ensure we update the last file in tags_mpd_update self.tagnum = self.tagnum + 1 elif response == Gtk.ResponseType.REJECT: done = True tag_paths = (tag['mpdpath'] for tag in self.tags[:self.tagnum]) GLib.idle_add(self.tags_mpd_update, tag_paths) self.tags_set_use_mpdpath(self.use_mpdpaths) self.tags = None ui.change_cursor(None) self.edit_window.hide() def tags_next_tag(self): # Returns true if next tag found (and self.tagnum is updated). # If no next tag found, returns False. while self.tagnum < len(self.tags) - 1: self.tagnum = self.tagnum + 1 if os.path.exists(self.tags[self.tagnum]['fullpath']): fileref = tagpy.FileRef(self.tags[self.tagnum]['fullpath']) if not fileref.isNull(): return True return False def tags_win_entry_changed(self, entry): style_context = entry.get_style_context() style_context.add_class('modified') def tags_win_entry_revert_color(self, entry): style_context = entry.get_style_context() style_context.remove_class('modified') def tags_win_apply_all(self, _button, item, entry): for tagnum, tag in enumerate(self.tags): tagnum = tagnum + 1 if item in ("title", "album", "artist", "genre", "comment"): tag[item] = entry.get_text() tag[item + '-changed'] = True elif item == "year": if len(entry.get_text()) > 0: tag['year'] = int(entry.get_text()) else: tag['year'] = 0 tag['year-changed'] = True elif item == "track": if tagnum >= self.tagnum - 1: # Start the current song at track 1, as opposed to the first # song in the list. tag['track'] = tagnum - self.tagnum tag['track-changed'] = True if item == "track": # Update the entry for the current song: entry.set_text(str(self.tags[self.tagnum]['track'])) def tags_win_update(self): current_tag = self.tags[self.tagnum] tag = tagpy.FileRef(current_tag['fullpath']).tag() # Update interface: for entry_name, entry in self.entries.items(): # Only retrieve info from the file if the info hasn't changed if not current_tag[entry_name + "-changed"]: current_tag[entry_name] = getattr(tag, entry_name, '') tag_value = current_tag[entry_name] if tag_value == 0: tag_value = '' try: entry.set_text(str(tag_value).strip()) except AttributeError: pass # Revert text color if this tag wasn't changed by the user if not current_tag[entry_name + "-changed"]: self.tags_win_entry_revert_color(entry) self.curr_mpdpath = GLib.filename_display_name(current_tag['mpdpath']) filename = self.curr_mpdpath if not self.use_mpdpaths: filename = os.path.basename(filename) self.file_label.set_text(filename) self.entries['title'].grab_focus() self.edit_window.set_title(_("Edit Tags - %s of %s") % (self.tagnum + 1, len(self.tags))) def save_tag(self): filetag = tagpy.FileRef(self.tags[self.tagnum]['fullpath']) tag = filetag.tag() # Set tag fields according to entry text for field, entry in self.entries.items(): tag_value = entry.get_text().strip() if field in ('year', 'track'): if len(tag_value) == 0: tag_value = '0' tag_value = int(tag_value) if field == 'comment': if len(tag_value) == 0: tag_value = ' ' setattr(tag, field, tag_value) save_success = filetag.save() if not (save_success): # FIXME: was (save_success and self.conn and self.status): ui.show_msg(self.window, _("Unable to save tag to music file."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) def tags_win_genres(self): return ["", "A Cappella", "Acid", "Acid Jazz", "Acid Punk", "Acoustic", "Alt. Rock", "Alternative", "Ambient", "Anime", "Avantgarde", "Ballad", "Bass", "Beat", "Bebob", "Big Band", "Black Metal", "Bluegrass", "Blues", "Booty Bass", "BritPop", "Cabaret", "Celtic", "Chamber music", "Chanson", "Chorus", "Christian Gangsta Rap", "Christian Rap", "Christian Rock", "Classic Rock", "Classical", "Club", "Club-House", "Comedy", "Contemporary Christian", "Country", "Crossover", "Cult", "Dance", "Dance Hall", "Darkwave", "Death Metal", "Disco", "Dream", "Drum & Bass", "Drum Solo", "Duet", "Easy Listening", "Electronic", "Ethnic", "Euro-House", "Euro-Techno", "Eurodance", "Fast Fusion", "Folk", "Folk-Rock", "Folklore", "Freestyle", "Funk", "Fusion", "Game", "Gangsta", "Goa", "Gospel", "Gothic", "Gothic Rock", "Grunge", "Hard Rock", "Hardcore", "Heavy Metal", "Hip-Hop", "House", "Humour", "Indie", "Industrial", "Instrumental", "Instrumental pop", "Instrumental rock", "JPop", "Jazz", "Jazz+Funk", "Jungle", "Latin", "Lo-Fi", "Meditative", "Merengue", "Metal", "Musical", "National Folk", "Native American", "Negerpunk", "New Age", "New Wave", "Noise", "Oldies", "Opera", "Other", "Polka", "Polsk Punk", "Pop", "Pop-Folk", "Pop/Funk", "Porn Groove", "Power Ballad", "Pranks", "Primus", "Progressive Rock", "Psychedelic", "Psychedelic Rock", "Punk", "Punk Rock", "R&B", "Rap", "Rave", "Reggae", "Retro", "Revival", "Rhythmic soul", "Rock", "Rock & Roll", "Salsa", "Samba", "Satire", "Showtunes", "Ska", "Slow Jam", "Slow Rock", "Sonata", "Soul", "Sound Clip", "Soundtrack", "Southern Rock", "Space", "Speech", "Swing", "Symphonic Rock", "Symphony", "Synthpop", "Tango", "Techno", "Techno-Industrial", "Terror", "Thrash Metal", "Top 40", "Trailer"] def tags_win_entry_constraint(self, entry, new_text, _new_text_length, _broken_position, isyearlabel): entry_chars = entry.get_text() pos = entry.get_position() proposed_text = entry_chars[:pos] + new_text + entry_chars[pos:] # get the correct regular expression expr = r'(0|[1-9][0-9]{0,3})$' if isyearlabel else r'(0|[1-9][0-9]*)$' expr = re.compile(expr) if not expr.match(proposed_text): # deny entry.stop_emission("insert-text") def toggle_path(self, button, arrow): self.use_mpdpaths = not self.use_mpdpaths if self.use_mpdpaths: self.file_label.set_text(self.curr_mpdpath) else: self.file_label.set_text(os.path.basename(self.curr_mpdpath)) self.set_expandbutton_state(button, arrow) def set_expandbutton_state(self, button, arrow): if self.use_mpdpaths: arrow.set_property("arrow-type", Gtk.ArrowType.LEFT) button.set_tooltip_text(_("Hide file path")) else: arrow.set_property("arrow-type", Gtk.ArrowType.RIGHT) button.set_tooltip_text(_("Show file path")) def set_use_mpdpaths(self, use_mpdpaths): self.use_mpdpaths = use_mpdpaths ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/tests/����������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0017654�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/tests/__init__.py�����������������������������������������������������0000664�0000000�0000000�00000013050�15003420405�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import doctest import unittest import gettext import os import sys import operator # This currently needed, because gettext is used in some module, i want to test try: gettext.install('sonata', os.path.join(sonata.__file__.split('/lib')[0], 'share', 'locale')) except: gettext.install('sonata', '/usr/share/locale') gettext.textdomain('sonata') from sonata import misc, song, library from sonata.mpdhelper import MPDSong DOCTEST_FLAGS = ( doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_NDIFF ) DOCTEST_MODULES = [ 'artwork', 'mpdhelper', ] class TestSonata(unittest.TestCase): def test_convert_time(self): self.assertEqual(misc.convert_time(60*4+4), "04:04") self.assertEqual(misc.convert_time(3600*3+60*2), "03:02:00") def test_song_record(self): record_first = song.SongRecord("a", "a", "a", "a", "a") record_equal = song.SongRecord(artist="a", path="b") record_equal2 = song.SongRecord(artist="a", path="b") record_last = song.SongRecord("z", "z", "z", "z", "z") self.assertEqual(record_equal.artist, "a") self.assertEqual(record_equal2.path, "b") # test comparision self.assertEqual(record_equal, record_equal2) self.assertNotEqual(record_first, record_last) self.assertGreater(record_last, record_first) self.assertGreaterEqual(record_last, record_first) self.assertLess(record_first, record_last) self.assertLessEqual(record_first, record_last) # test hashing d = {} d[record_equal] = True self.assertIn(record_equal, d) self.assertIn(record_equal2, d) # record_equal == record_equal2 # test sorting lst = [record_equal, record_equal2, record_last, record_first] lst.sort(key=operator.attrgetter("path")) self.assertEqual(lst, [record_first, record_equal, record_equal2, record_last]) # test unpacking a, b, c, d, e = record_equal self.assertEqual(record_equal.album, a) self.assertEqual(record_equal.artist, b) self.assertEqual(record_equal.genre, c) self.assertEqual(record_equal.path, e) def test_list_identfy_VA_albums(self): # Test multiple arguments data = [("artist1", "album1", "/", 2006), ("artist2", "album1", "/", 2006), ("artist1", "album1", "test",1992), ("artist3", "album1", "/", 2006)] albums = [song.SongRecord(artist=item[0], album=item[1], path=item[2], year=item[3]) for item in data] various_albums = library.list_mark_various_artists_albums(albums) album = albums[0]._asdict() album['artist'] = library.VARIOUS_ARTISTS albums[0] = song.SongRecord(**album) self.assertEqual(various_albums, albums) # Test single argument albums2 = [song.SongRecord(artist="Tim Pritlove, Holger Klein", album="Not Safe For Work", path="podcasts/Not Save For Work", year=2012)] various_albums2 = library.list_mark_various_artists_albums(albums2) self.assertEqual(various_albums2, albums2) class TestMPDSong(unittest.TestCase): def test_get_track_number(self): self.assertEqual(1, MPDSong({'track': '1'}).track) self.assertEqual(1, MPDSong({'track': '1/10'}).track) self.assertEqual(1, MPDSong({'track': '1,10'}).track) self.assertEqual(0, MPDSong({'track': '/'}).track) self.assertEqual(0, MPDSong({'track': ','}).track) def test_get_disc_number(self): self.assertEqual(1, MPDSong({'disc': '1'}).disc) self.assertEqual(1, MPDSong({'disc': '1/10'}).disc) self.assertEqual(1, MPDSong({'disc': '1,10'}).disc) self.assertEqual(0, MPDSong({'disc': '/'}).disc) self.assertEqual(0, MPDSong({'disc': ','}).disc) def test_access_attributes(self): song = MPDSong({'foo': 'zz', 'id': '5'}) self.assertEqual(5, song.id) self.assertEqual("zz", song.foo) self.assertIsInstance(song.foo, str) self.assertEqual(song.foo, song.get("foo")) def test_get_unknown_attribute(self): song = MPDSong({}) self.assertRaises(KeyError, lambda: song['bla']) self.assertEqual(None, song.get('bla')) self.assertEqual('foo', song.get('bla', 'foo')) self.assertEqual(None, song.bla) def test_access_list_attribute(self): song = MPDSong({'genre': ['a', 'b'], 'foo': ['c', 'd']}) self.assertEqual('a', song.genre) self.assertEqual('c', song.foo) def load_tests(loader, tests, ignore): for sub_module in DOCTEST_MODULES: test = doctest.DocTestSuite('sonata.%s' % sub_module, optionflags=DOCTEST_FLAGS) tests.addTests(test) return tests ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/tests/test_artwork.py�������������������������������������������������0000664�0000000�0000000�00000024057�15003420405�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. from os.path import expanduser import unittest try: from unittest.mock import Mock, patch, call except ImportError: # pragma: nocover from mock import Mock, patch, call import os import shutil import tempfile from sonata.artwork import artwork_path from sonata.artwork import ArtworkLocator from sonata import consts class _MixinTestDirectory: def mkdir(self, *paths): path = os.path.join(self.music_dir, *paths) os.makedirs(path, exist_ok=True) return path def touch(self, *paths): path = os.path.join(self.music_dir, *paths) with open(path, 'wb') as fp: pass return path def assertDirEqual(self, expected, got): expected = expected.replace('/TMP', self.music_dir) self.assertEqual(expected, got) def setUp(self): super().setUp() self.music_dir = tempfile.mkdtemp(prefix="sonata-tests-") self.config = Mock('Config', current_musicdir=self.music_dir) def tearDown(self): super().tearDown() shutil.rmtree(self.music_dir) class TestArtworkPathFinder(unittest.TestCase): def setUp(self): self.config = Mock('Config', current_musicdir="/foo", art_location=1, art_location_custom_filename="bla") self.locator = ArtworkLocator(self.config) # artwork_path_from_data def _call_artwork_path_from_data(self, location_type=None, artist="Toto", album="Tata", song_dir="To/Ta"): return self.locator.path(artist, album, song_dir, location_type) def test_find_path_from_data_in_home_covers(self): self.config.art_location = consts.ART_LOCATION_HOMECOVERS res = self._call_artwork_path_from_data() self.assertEqual(expanduser('~/.covers/Toto-Tata.jpg'), res) def test_find_path_from_data_as_cover_dot_jpg(self): self.config.art_location = consts.ART_LOCATION_COVER res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/cover.jpg', res) def test_find_path_from_data_as_folder_dot_jpg(self): self.config.art_location = consts.ART_LOCATION_FOLDER res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/folder.jpg', res) def test_find_path_from_data_as_album_dot_jpg(self): self.config.art_location = consts.ART_LOCATION_ALBUM res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/album.jpg', res) def test_find_path_from_data_as_custom_dot_jpg(self): self.config.art_location_custom_filename = "bar.png" self.config.art_location = consts.ART_LOCATION_CUSTOM res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/bar.png', res) def test_find_path_from_data_as_custom_without_filename(self): self.config.art_location_custom_filename = "" self.config.art_location = consts.ART_LOCATION_CUSTOM res = self._call_artwork_path_from_data() # We tried CUSTOM without a valid custom filename :/ self.assertEqual(None, res) def test_find_path_from_data_force_location_type(self): self.config.art_location = "foo bar" # Should not be used res = self._call_artwork_path_from_data(consts.ART_LOCATION_COVER) self.assertEqual('/foo/To/Ta/cover.jpg', res) # artwork_path_from_song def test_find_path_from_song(self): self.config.art_location = consts.ART_LOCATION_COVER song = Mock('Song', artist='', album='', file='Foo/Bar/1.ogg') res = self.locator.path_from_song(song) self.assertEqual('/foo/Foo/Bar/cover.jpg', res) def test_find_path_from_song_with_home_cover(self): song = Mock('Song', artist='Toto', album='Tata', file='Foo/Bar/1.ogg') res = self.locator.path_from_song(song, consts.ART_LOCATION_HOMECOVERS) self.assertEqual(expanduser('~/.covers/Toto-Tata.jpg'), res) # artwork_path def test_artwork_path_with_song_name(self): song = Mock('Song') song.configure_mock(name="plop", artist='Toto', album='Tata', file='F/B/1.ogg') res = artwork_path(song, self.config) self.assertEqual(expanduser("~/.covers/plop.jpg"), res) class TestArtworkLookupSingleImage(_MixinTestDirectory, unittest.TestCase): def setUp(self): super().setUp() self.locator = ArtworkLocator(self.config) def func(self, path): path = os.path.join(self.music_dir, path) return self.locator._lookup_single_image(path) def test_path_doesnt_exists(self): res = list(self.func("bar/baz")) self.assertEqual(0, len(res)) def test_no_images(self): self.mkdir("bar", "baz") res = list(self.func("bar/baz")) self.assertEqual(0, len(res)) def test_one_image(self): self.mkdir("bar", "baz") self.touch("bar", "baz", "loc2.jpg") res = list(self.func("bar/baz")) self.assertEqual(1, len(res)) self.assertDirEqual("/TMP/bar/baz/loc2.jpg", res[0]) def test_several_images_no_artwork(self): self.mkdir("bar", "baz") self.touch("bar", "baz", "loc1.jpg") self.touch("bar", "baz", "loc2.jpg") res = list(self.func("bar/baz")) self.assertEqual(0, len(res)) class TestArtworkLocator(unittest.TestCase): def setUp(self): self.music_dir = "/foo" self.config = Mock('Config', current_musicdir=self.music_dir, art_location_custom_filename="") self.locator = ArtworkLocator(self.config) def get_locations(self, artist="Toto", album="Tata", song_dir="To/Ta", default_kind=None): return self.locator._get_locations(artist, album, song_dir, default_kind) def test_simple_locations(self): l = self.get_locations() for key in dir(consts): if not key.startswith('ART_LOCATION_'): continue self.assertIn(getattr(consts, key), l) def test_home_covers(self): l = self.get_locations()[consts.ART_LOCATION_HOMECOVERS] self.assertEqual(1, len(l)) self.assertEqual(os.path.expanduser("~/.covers/Toto-Tata.jpg"), l[0]) def test_cover_jpg(self): l = self.get_locations()[consts.ART_LOCATION_COVER] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/cover.jpg", l[0]) def test_folder_jpg(self): l = self.get_locations()[consts.ART_LOCATION_FOLDER] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/folder.jpg", l[0]) def test_album_jpg(self): l = self.get_locations()[consts.ART_LOCATION_ALBUM] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/album.jpg", l[0]) def test_custom_valid(self): self.config.art_location_custom_filename = "pouet.jpg" l = self.get_locations()[consts.ART_LOCATION_CUSTOM] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/pouet.jpg", l[0]) def test_custom_but_empty_custom_file(self): self.config.art_location_custom_filename = "" l = self.get_locations()[consts.ART_LOCATION_CUSTOM] self.assertEqual(0, len(l)) def test_misc_location(self): old_misc = consts.ART_LOCATIONS_MISC consts.ART_LOCATIONS_MISC = files = ['1.jpg', '2.jpg', '3.jpg'] try: l = list(self.get_locations()[consts.ART_LOCATION_MISC]) finally: consts.ART_LOCATIONS_MISC = old_misc expected = ["/foo/To/Ta/%s" % f for f in files] self.assertEqual(expected, l) class TestArtworkLocatorPathChecks(_MixinTestDirectory, unittest.TestCase): def setUp(self): super().setUp() self.config = Mock('Config', current_musicdir=self.music_dir, art_location_custom_filename="") self.locator = ArtworkLocator(self.config) def test_locate_existing(self): self.mkdir('To', 'Ta') cover_path = self.touch('To', 'Ta', 'cover.jpg') self.config.art_location = consts.ART_LOCATION_COVER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((self.config.art_location, cover_path), res) def test_locate_config_has_priority(self): self.mkdir('To', 'Ta') cover_path = self.touch('To', 'Ta', 'cover.jpg') folder_path = self.touch('To', 'Ta', 'folder.jpg') # We request "cover.jpg", it exists, we got it self.config.art_location = consts.ART_LOCATION_COVER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((self.config.art_location, cover_path), res) # If we request now "folder.jpg", we get it before "cover.jpg" self.config.art_location = consts.ART_LOCATION_FOLDER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((self.config.art_location, folder_path), res) def test_locate_nothing_valid(self): self.mkdir('To', 'Ta') self.config.art_location = consts.ART_LOCATION_COVER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((None, None), res) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/tray.py���������������������������������������������������������������0000664�0000000�0000000�00000016010�15003420405�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import os from gi.repository import Gtk, GLib from sonata import ui, img class TrayIconTips(Gtk.Window): """Custom tooltips derived from Gtk.Window() that allow for markup text and multiple widgets, e.g. a progress bar. ;)""" MARGIN = 4 def __init__(self): super().__init__(type=Gtk.WindowType.POPUP) # from gtktooltips.c:gtk_tooltips_force_window self.set_app_paintable(True) self.set_resizable(False) self.set_name("gtk-tooltips") self.timer_tag = None self.notif_handler = None self.use_notifications_location = False self.notifications_location = 0 def _calculate_pos(self, tray_icon): if tray_icon is not None: x, y, _, height = tray_icon.compute_pos() size = self.size_request() w = size.width h = size.height screen = self.get_screen() pointer_screen, px, py, _ = screen.get_display().get_pointer() if pointer_screen != screen: px = x py = y try: # Use the monitor that the systemtray icon is on monitor_num = screen.get_monitor_at_point(x, y) except: # No systemtray icon, use the monitor that the pointer is on monitor_num = screen.get_monitor_at_point(px, py) monitor = screen.get_monitor_geometry(monitor_num) try: # If the tooltip goes off the screen horizontally, realign it so # that it all displays. if (x + w) > monitor.x + monitor.width: x = monitor.x + monitor.width - w # If the tooltip goes off the screen vertically (i.e. the system # tray icon is on the bottom of the screen), realign the icon so # that it shows above the icon. if ((y + h + height + self.MARGIN) > monitor.y + monitor.height): y = y - h - self.MARGIN else: y = y + height + self.MARGIN except: pass if not self.use_notifications_location: try: return x, y except: #Fallback to top-left: return monitor.x, monitor.y elif self.notifications_location == 0: try: return x, y except: #Fallback to top-left: return monitor.x, monitor.y elif self.notifications_location == 1: return monitor.x, monitor.y elif self.notifications_location == 2: return monitor.x + monitor.width - w, monitor.y elif self.notifications_location == 3: return monitor.x, monitor.y + monitor.height - h elif self.notifications_location == 4: return monitor.x + monitor.width - w, \ monitor.y + monitor.height - h elif self.notifications_location == 5: return monitor.x + (monitor.width - w) / 2, \ monitor.y + (monitor.height - h) / 2 def _start_delay(self, tray_icon): self.timer_tag = GLib.timeout_add(500, self._tips_timeout, tray_icon) def _tips_timeout(self, tray_icon): self.use_notifications_location = False self._real_display(tray_icon) def _remove_timer(self): self.hide() if self.timer_tag: GLib.source_remove(self.timer_tag) self.timer_tag = None def _real_display(self, tray_icon): x, y = self._calculate_pos(tray_icon) self.move(x, y) self.show() # Public API def hide(self): Gtk.Window.hide(self) self.notif_handler = None def add_widget(self, widget_to_add): self.add(widget_to_add) class TrayIcon: """Tray icon which use Gtk.StatusIcon""" def __init__(self, window, traymenu, traytips): self.statusicon = None self.window = window self.traymenu = traymenu self.traytips = traytips def compute_pos(self): _ok, _screen, rect, _orient = self.statusicon.get_geometry() return (rect.x, rect.y, rect.height, rect.width) def initialize(self, on_click, on_scroll): self.statusicon = Gtk.StatusIcon() self.statusicon.connect('button-press-event', on_click) self.statusicon.connect('scroll-event', on_scroll) GLib.timeout_add(250, self._iterate_status_icon) def is_visible(self): """Visible and/or notification activated""" return self.statusicon.is_embedded() and \ self.statusicon.get_visible() def update_icon(self, icon_name): # FIXME (why doesn't this work instead?): # self.statusicon.set_from_stock(icon_name) context = self.traymenu.get_style_context() icon = Gtk.IconFactory.lookup_default(icon_name) icon_pb = icon.render_icon_pixbuf(context, -1) self.statusicon.set_from_pixbuf(icon_pb) def show(self): self.statusicon.set_visible(True) def hide(self): self.statusicon.set_visible(False) def is_available(self): return self.statusicon.is_embedded() def _iterate_status_icon(self): if self.is_visible(): self._tooltip_show_manually() GLib.timeout_add(250, self._iterate_status_icon) def _tooltip_show_manually(self): # Since there is no signal to connect to when the user puts their # mouse over the trayicon, we will check the mouse position # manually and show/hide the window as appropriate. This is called # every iteration. Note: This should not occur if self.traytips.notif_ # handler has a value, because that means that the tooltip is already # visible, and we don't want to override that setting simply because # the user's cursor is not over the tooltip. if self.traymenu.get_property('visible') and \ self.traytips.notif_handler != -1: self.traytips._remove_timer() elif not self.traytips.notif_handler: _pscreen, px, py, _mods = \ self.window.get_screen().get_display().get_pointer() x, y, width, height = self.compute_pos() if px >= x and px <= x + width and py >= y and py <= y + height: self.traytips._start_delay(self) else: self.traytips._remove_timer() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui.py�����������������������������������������������������������������0000664�0000000�0000000�00000007616�15003420405�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import logging import os import pkg_resources import sys from gi.repository import Gtk, Gdk logger = logging.getLogger(__name__) def builder(ui_file, relative_to='.'): builder = Gtk.Builder() builder.set_translation_domain('sonata') ui_path = pkg_resources.resource_filename( 'sonata', os.path.join(relative_to, 'ui', ui_file + ".glade")) logger.debug('Loading %s', ui_path) builder.add_from_file(ui_path) return builder def css_provider(css_file, relative_to='.'): provider = Gtk.CssProvider() css_path = pkg_resources.resource_filename( 'sonata', os.path.join(relative_to, 'ui', css_file + ".css")) logger.debug('Loading %s', css_path) provider.load_from_path(css_path) screen = Gdk.Screen.get_default() context = Gtk.StyleContext() context.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) return provider def builder_string(ui_file, relative_to='.'): ui_path = pkg_resources.resource_filename( 'sonata', os.path.join(relative_to, 'ui', ui_file + ".glade")) logger.debug('Loading %s', ui_path) with open(ui_path, 'r') as builder_file: string = builder_file.read() return string def show_msg(owner, message, title, role, buttons, default=None, response_cb=None): is_button_list = hasattr(buttons, '__getitem__') if not is_button_list: messagedialog = Gtk.MessageDialog(owner, Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.WARNING, buttons, message) else: messagedialog = Gtk.MessageDialog(owner, Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.WARNING, message_format=message) i = 0 while i < len(buttons): messagedialog.add_button(buttons[i], buttons[i+1]) i += 2 messagedialog.set_title(title) messagedialog.set_role(role) if default is not None: messagedialog.set_default_response(default) if response_cb: messagedialog.connect("response", response_cb) response = messagedialog.run() value = response messagedialog.destroy() return value def dialog_destroy(dialog_widget, _response_id): dialog_widget.destroy() def show(widget): widget.set_no_show_all(False) widget.show_all() def hide(widget): #widget.hide_all() widget.hide() widget.set_no_show_all(True) def quote_label(label_value): """Quote the content of a label so that it's safe to display.""" # Don't inadvertently create accelerators if the value contains a "_" result = label_value.replace("_", "__") return result def change_cursor(cursortype): for w in Gtk.Window.list_toplevels(): gdk_window = w.get_window() # some toplevel windows have no drawing area if gdk_window != None: gdk_window.set_cursor(cursortype) def set_entry_invalid(editable): color = Gdk.RGBA() color.parse("red") editable.override_color(Gtk.StateFlags.NORMAL, color) def reset_entry_marking(editable): editable.override_color(Gtk.StateFlags.NORMAL, None) def icon(name): return Gtk.IconFactory.lookup_default(name) ������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0017127�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/about.css����������������������������������������������������������0000664�0000000�0000000�00000000075�15003420405�0020755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkLabel.heading, GtkLabel.shortcut { font-weight: bold; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/about.glade��������������������������������������������������������0000664�0000000�0000000�00000020530�15003420405�0021237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkAboutDialog" id="about_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="role">about</property> <property name="modal">True</property> <property name="type_hint">dialog</property> <property name="program_name">Sonata</property> <property name="copyright" translatable="yes">Sonata, an elegant GTK+ client for the Music Player Daemon Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com></property> <property name="comments" translatable="yes">An elegant music client for MPD.</property> <property name="website">http://www.nongnu.org/sonata/</property> <property name="website_label">www.nongnu.org/sonata/</property> <property name="license">Sonata 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. Sonata 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 <http://www.gnu.org/licenses/>.</property> <property name="authors">Scott Horowitz <stonecrest@gmail.com> Tuukka Hastrup <Tuukka.Hastrup@iki.fi> Stephen Boyd <bebarino@gmail.com></property> <property name="translator_credits">ar - Ahmad Farghal <ahmad.farghal@gmail.com> be@latin - Ihar Hrachyshka <ihar.hrachyshka@gmail.com> ca - Franc Rodriguez <franc.rodriguez@tecob.com> cs - Jakub Adler <jakubadler@gmail.com> da - Martin Dybdal <dybber@dybber.dk> de - Paul Johnson <thrillerator@googlemail.com> el_GR - Lazaros Koromilas <koromilaz@gmail.com> es - Xoan Sampaiño <xoansampainho@gmail.com> et - Mihkel <turakas@gmail.com> fi - Ilkka Tuohela <hile@hack.fi> fr - Floreal M <florealm@gmail.com> it - Gianni Vialetto <forgottencrow@gmail.com> ja - Masato Hashimoto <cabezon.hashimoto@gmail.com> ko - Jaesung BANG <jaesung@liberotown.com> nl - Olivier Keun <litemotiv@gmail.com> pl - Tomasz Dominikowski <dominikowski@gmail.com> pt_BR - Alex Tercete Matos <alextercete@gmail.com> ru - Ivan <bkb.box@bk.ru> sk - Robert Hartl <hartl.robert@gmail.com> sl - Alan Pepelko <alan.pepelko@gmail.com> sv - Daniel Nylander <po@danielnylander.se> tr - Gökmen Görgen <gkmngrgn@gmail.com> uk - Господарисько Тарас <dogmaton@gmail.com> zh_CN - Desmond Chang <dochang@gmail.com> zh_TW - Ian-Xue Li <da.mi.spirit@gmail></property> <property name="artists">Adrian Chromenko <adrian@rest0re.org> oss.rest0re.org <http://oss.rest0re.org/></property> <property name="wrap_license">True</property> <child internal-child="vbox"> <object class="GtkBox" id="aboutdialog-vbox1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="aboutdialog-action_area1"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="shortcut_button"> <property name="label" translatable="yes">_Shortcuts</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <placeholder/> </child> </object> </child> <action-widgets> <action-widget response="0">shortcut_button</action-widget> </action-widgets> </object> <object class="GtkDialog" id="shortcuts_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Shortcuts</property> <property name="role">shortcuts</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="default_height">340</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">about_dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="shortcuts_dialog_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child> <object class="GtkScrolledWindow" id="shortcuts_dialog_scrollwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkViewport" id="shortcuts_dialog_viewport"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="shortcuts_dialog_content_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <placeholder/> </child> </object> </child> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="shortcuts_dialog_action"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="shortcuts_dialog_closebutton"> <property name="label">gtk-close</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="0">shortcuts_dialog_closebutton</action-widget> </action-widgets> </object> </interface> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/current.glade������������������������������������������������������0000664�0000000�0000000�00000011344�15003420405�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkBox" id="current_page_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">3</property> <child> <object class="GtkScrolledWindow" id="current_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="current_page_treeview"> <property name="can_focus">True</property> <property name="reorderable">True</property> <property name="rules_hint">True</property> <property name="enable_search">False</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="current_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="current_page_filterbox"> <property name="can_focus">True</property> <property name="no_show_all">True</property> <child> <object class="GtkLabel" id="current_page_filterbox_label"> <property name="can_focus">True</property> <property name="label" translatable="yes">Filter:</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="current_page_filterbox_entry"> <property name="can_focus">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">5</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="current_page_filterbox_closebutton"> <property name="use_action_appearance">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="current_page_filterbox_closebutton_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-close</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">1</property> </packing> </child> </object> <object class="GtkEventBox" id="current_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="current_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="current_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-cdrom</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="current_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/icons.glade��������������������������������������������������������0000664�0000000�0000000�00000001744�15003420405�0021246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkIconFactory" id="sonata_iconfactory"> <sources> <source stock-id="sonata-play" filename="{base_path}/sonata-play.png"/> <source stock-id="sonata-artist" filename="{base_path}/sonata-artist.png"/> <source stock-id="sonata-cd-large" filename="{base_path}/sonatacd-large.png"/> <source stock-id="sonata-disconnect" filename="{base_path}/sonata-disconnect.png"/> <source stock-id="sonata-large" filename="{base_path}/sonata-large.png"/> <source stock-id="sonata-cd" filename="{base_path}/sonatacd.png"/> <source stock-id="sonata" filename="{base_path}/sonata.png"/> <source stock-id="sonata-case" filename="{base_path}/sonata-case.png"/> <source stock-id="sonata-album" filename="{base_path}/sonata-album.png"/> <source stock-id="sonata-pause" filename="{base_path}/sonata-pause.png"/> </sources> </object> </interface> ����������������������������multani-sonata-bf88fdc/sonata/ui/info.css�����������������������������������������������������������0000664�0000000�0000000�00000000041�15003420405�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.link { color: @link_color; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/info.glade���������������������������������������������������������0000664�0000000�0000000�00000110470�15003420405�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkScrolledWindow" id="info_page_scrolledwindow"> <property name="can_focus">True</property> <child> <object class="GtkViewport" id="info_page_viewport"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="info_page_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">3</property> <child> <object class="GtkExpander" id="info_page_song_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkBox" id="info_page_song_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="info_page_song_eventbox"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="info_page_song_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">start</property> <property name="valign">start</property> <property name="xalign">0</property> <property name="yalign">0</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="info_page_song_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">12</property> <property name="orientation">vertical</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="info_song_title_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Title:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_artist_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Artist:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_album_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Album:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_date_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Date:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_track_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Track:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_genre_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Genre:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_file_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">File:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_bitrate_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Bitrate:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_artist_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="info_song_artist_eventbox"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Launch artist in Wikipedia</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_album_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="info_song_album_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Launch album in Wikipedia</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_title_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_title_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_date_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_date_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_track_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_track_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_genre_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_genre_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_file_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_file_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_bitrate_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_bitrate_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_links_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkEventBox" id="info_song_links_more_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Toggle extra tags</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_links_more_label"> <property name="visible">True</property> <property name="can_focus">False</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEventBox" id="info_song_links_edit_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Edit song tags</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_links_edit_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">(edit tags)</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">8</property> <property name="width">2</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="info_page_song_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Song Info</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkExpander" id="info_page_lyrics_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkBox" id="info_page_lyrics_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkScrolledWindow" id="info_page_lyrics_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="vscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkTextView" id="info_page_lyrics_textview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="wrap_mode">word</property> <property name="left_margin">6</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="info_page_lyrics_bottom_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">5</property> <child> <object class="GtkEventBox" id="info_page_lyrics_search_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Search Lyricwiki.org for lyrics</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_page_lyrics_search"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">(search)</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="info_page_lyrics_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Lyrics</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkExpander" id="info_page_album_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkScrolledWindow" id="info_page_album_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="vscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkTextView" id="info_page_album_textview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="wrap_mode">word</property> <property name="left_margin">6</property> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="info_page_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Album Info</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> </child> </object> </child> </object> <object class="GtkEventBox" id="info_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="info_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="info_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-file</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="info_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/library.css��������������������������������������������������������0000664�0000000�0000000�00000000065�15003420405�0021306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkToggleButton.last_crumb { font-weight: bold; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/library.glade������������������������������������������������������0000664�0000000�0000000�00000024757�15003420405�0021610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkImage" id="library_crumb_section_image"> <property name="visible">True</property> <property name="can_focus">False</property> </object> <object class="GtkListStore" id="library_liststore"/> <object class="GtkBox" id="library_page_v_box"> <property name="can_focus">False</property> <property name="margin_left">3</property> <property name="margin_right">3</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="library_page_crumbbox"> <property name="can_focus">False</property> <child> <object class="GtkButton" id="library_crumb_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <child> <object class="GtkArrow" id="library_crumb_arrow"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> <property name="arrow_type">down</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="library_crumb_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">12</property> <property name="spacing">6</property> <child> <object class="GtkToggleButton" id="library_crumb_section_togglebutton"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="image">library_crumb_section_image</property> <property name="relief">none</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="library_crumb_break_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="library_crumb_break_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label">...</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="CrumbBox" id="library_crumbs_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">horizontal</property> <property name="spacing">6</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="library_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="library_page_treeview"> <property name="can_focus">True</property> <property name="model">library_liststore</property> <property name="headers_visible">False</property> <property name="headers_clickable">False</property> <property name="rules_hint">True</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="library_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="library_page_searchbox"> <property name="can_focus">True</property> <child> <object class="GtkLabel" id="library_page_searchbox_label"> <property name="can_focus">True</property> <property name="label" translatable="yes">Search:</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">3</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="library_page_searchbox_entry"> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes">Search library</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkComboBoxText" id="library_page_searchbox_combo"> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes">Search terms</property> <items> <item translatable="yes">Artist</item> <item translatable="yes">Title</item> <item translatable="yes">Album</item> <item translatable="yes">Genre</item> <item translatable="yes">Filename</item> <item translatable="yes">Everything</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkButton" id="library_page_searchbox_button"> <property name="use_action_appearance">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="no_show_all">True</property> <property name="tooltip_text" translatable="yes">End Search</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="library_page_searchbox_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-clear</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">3</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">2</property> </packing> </child> </object> <object class="GtkEventBox" id="library_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="library_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="library_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-harddisk</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="library_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> �����������������multani-sonata-bf88fdc/sonata/ui/playlists.glade����������������������������������������������������0000664�0000000�0000000�00000016760�15003420405�0022163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="playlist_name_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="playlist_name_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child> <object class="GtkBox" id="playlist_name_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="playlist_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Playlist name:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="playlist_name_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="activates_default">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="playlist_name_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="playlist_name_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="playlist_name_save_button"> <property name="label">gtk-save</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">playlist_name_cancel_button</action-widget> <action-widget response="-3">playlist_name_save_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="playlists_liststore"> <columns> <!-- column-name gchararray1 --> <column type="gchararray"/> <!-- column-name gchararray2 --> <column type="gchararray"/> </columns> </object> <object class="GtkScrolledWindow" id="playlists_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <property name="margin">3</property> <child> <object class="GtkTreeView" id="playlists_page_treeview"> <property name="can_focus">True</property> <property name="model">playlists_liststore</property> <property name="headers_visible">False</property> <property name="rules_hint">True</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="playlists_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> <child> <object class="GtkTreeViewColumn" id="playlists_column"> <child> <object class="GtkCellRendererPixbuf" id="playlists_pixbuf_renderer"/> <attributes> <attribute name="stock_id">0</attribute> </attributes> </child> <child> <object class="GtkCellRendererText" id="playlists_text_renderer"> <property name="ellipsize">end</property> </object> <attributes> <attribute name="markup">1</attribute> </attributes> </child> </object> </child> </object> </child> </object> <object class="GtkEventBox" id="playlists_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="playlists_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="playlists_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-directory</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="playlists_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> ����������������multani-sonata-bf88fdc/sonata/ui/preferences.css����������������������������������������������������0000664�0000000�0000000�00000000150�15003420405�0022136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkLabel.format_code { font-family: Monospace; } GtkLabel.additional_format { padding-top: 6px; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/preferences.glade��������������������������������������������������0000664�0000000�0000000�00000344205�15003420405�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkAdjustment" id="crossfade_adjustment"> <property name="lower">1</property> <property name="upper">30</property> <property name="step_increment">1</property> <property name="page_increment">5</property> </object> <object class="GtkDialog" id="custom_art_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Custom Artwork</property> <property name="role">custom_art</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">preferences_dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="custom_art_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="custom_art_buttonbox"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="custom_art_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="custom_art_accept_button"> <property name="label">gtk-ok</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="custom_art_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="custom_art_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Artwork filename:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="custom_art_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="activates_default">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">custom_art_cancel_button</action-widget> <action-widget response="-3">custom_art_accept_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="plugins_store"> <columns> <!-- column-name gboolean1 --> <column type="gboolean"/> <!-- column-name GdkPixbuf.Pixbuf1 --> <column type="GdkPixbuf"/> <!-- column-name gchararray1 --> <column type="gchararray"/> </columns> </object> <object class="GtkUIManager" id="plugins_ui_manager"> <child> <object class="GtkActionGroup" id="plugin_actions"> <child> <object class="GtkAction" id="plugin_about"> <property name="label" translatable="yes">_About</property> <property name="stock_id">gtk-about</property> <signal handler="plugin_about" name="activate"/> </object> </child> <child> <object class="GtkAction" id="plugin_configure"> <property name="label" translatable="yes">_Configure...</property> <property name="stock_id">gtk-preferences</property> <signal handler="plugin_configure" name="activate"/> </object> </child> </object> </child> <ui> <popup name="pluginmenu"> <menuitem action="plugin_configure"/> <menuitem action="plugin_about"/> </popup> </ui> </object> <object class="GtkAdjustment" id="port_adjustment"> <property name="upper">65535</property> <property name="step_increment">1</property> <property name="page_increment">1</property> </object> <object class="GtkDialog" id="preferences_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Preferences</property> <property name="role">preferences</property> <property name="resizable">False</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="preferences_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="preferences_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkNotebook" id="preferences_notebook"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkAlignment" id="preferences_mpd"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="preferences_mpd_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="preferences_mpd_frame_alignment"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkBox" id="preferences_mpd_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child> <object class="GtkFrame" id="connection_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> <property name="label_xalign">0</property> <property name="shadow_type">in</property> <child> <object class="GtkGrid" id="connection_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin">12</property> <property name="row_spacing">6</property> <property name="column_spacing">6</property> <property name="row_homogeneous">True</property> <child> <object class="GtkEntry" id="connection_name"> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Name:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_name</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="connection_host"> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_host_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Host:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_host</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkSpinButton" id="connection_port"> <property name="can_focus">True</property> <property name="invisible_char">•</property> <property name="adjustment">port_adjustment</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_port_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Port:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_port</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="connection_password"> <property name="can_focus">True</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">Leave blank if no password is required.</property> <property name="tooltip_text" translatable="yes">Leave blank if no password is required.</property> <property name="visibility">False</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_password_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Pa_ssword:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_password</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkFileChooserButton" id="connection_dir"> <property name="can_focus">True</property> <property name="action">select-folder</property> <property name="show_hidden">True</property> <property name="title" translatable="yes">Select a Music Directory</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_dir_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Music dir:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_dir</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkBox" id="connection_frame_label_widget"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkComboBoxText" id="connection_profiles"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="connection_add_profile"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <child> <object class="GtkImage" id="add_profile_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-add</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="connection_remove_profile"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <child> <object class="GtkImage" id="remove_profile_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-delete</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">2</property> </packing> </child> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="connection_autoconnect"> <property name="label" translatable="yes">_Autoconnect on start</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="mpd_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">MPD Connection</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_mpd"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">MPD</property> </object> <packing> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_display"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="preferences_display_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkBox" id="display_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">12</property> <child> <object class="GtkCheckButton" id="playback_buttons_check"> <property name="label" translatable="yes">_Playback/volume buttons</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="progressbar_check"> <property name="label" translatable="yes">Pr_ogressbar</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="statusbar_check"> <property name="label" translatable="yes">_Statusbar</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkCheckButton" id="tray_icon_check"> <property name="label" translatable="yes">System _tray icon</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkCheckButton" id="lyrics_check"> <property name="label" translatable="yes">Song Ly_rics</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkBox" id="lyrics_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="lyrics_save_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Save lyrics to:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="lyrics_save_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item>~/.lyrics/</item> <item translatable="yes">SONG_DIR</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">5</property> </packing> </child> <child> <object class="GtkCheckButton" id="art_check"> <property name="label" translatable="yes">_Album art</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">6</property> </packing> </child> <child> <object class="GtkBox" id="art_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkBox" id="art_style_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="art_style_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Artwork style:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="art_style_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">Standard</item> <item translatable="yes">Stylized</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="art_search_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="art_search_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Search locations:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="art_search_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">Local only</item> <item translatable="yes">Local and remote</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="art_save_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="art_save_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Save art to:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="art_save_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item>~/.covers/</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">7</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="display_frame_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Display</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> <packing> <property name="position">1</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_display"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Display</property> </object> <packing> <property name="position">1</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_behavior"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="behavior_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="behavior_frame_alignment"> <property name="can_focus">False</property> <property name="top_padding">12</property> <property name="left_padding">12</property> <child> <object class="GtkBox" id="behavior_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkFrame" id="behavior_window_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="behavior_window_alignment"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="behavior_window_prefs"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkCheckButton" id="behavior_sticky_check"> <property name="label" translatable="yes">_Show window on all workspaces</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="behavior_ontop_check"> <property name="label" translatable="yes">_Keep window above other windows</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="behavior_decor_check"> <property name="label" translatable="yes">_Hide window titlebar</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkCheckButton" id="behavior_minimize_check"> <property name="label" translatable="yes">_Minimize to system tray on close/escape</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, closing Sonata will minimize it to the system tray. Note that it&apos;s currently impossible to detect if there actually is a system tray, so only check this if you have one.</property> <property name="tooltip_text" translatable="yes">If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one.</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="behavior_window_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Window Behavior</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkFrame" id="behavior_misc_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="behavior_misc_alignment"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="behavior_misc_prefs"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkCheckButton" id="misc_updatestart_check"> <property name="label" translatable="yes">_Update MPD library on start</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, Sonata will automatically update your MPD library when it starts up.</property> <property name="tooltip_text" translatable="yes">If enabled, Sonata will automatically update your MPD library when it starts up.</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="misc_exit_stop_check"> <property name="label" translatable="yes">S_top playback on exit</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit.</property> <property name="tooltip_text" translatable="yes">MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit.</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="misc_infofile_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkCheckButton" id="misc_infofile_usage_check"> <property name="label" translatable="yes">_Write status file:</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> <property name="tooltip_text" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="misc_infofile_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> <property name="tooltip_text" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="behavior_misc_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Miscellaneous</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> </object> </child> </object> <packing> <property name="position">2</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_behavior"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Behavior</property> </object> <packing> <property name="position">2</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_format"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="format_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="format_frame_alignment"> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="format_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkGrid" id="format_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">12</property> <child> <object class="GtkLabel" id="format_playlist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">C_urrent playlist:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_playlist_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_playlist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_library_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Library:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_library_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_library_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_window_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Window title:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_window_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_window_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_current1_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Current _song line 1:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_current1_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_current1_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_current2_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Current s_ong line 2:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_current2_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_current2_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="format_avail_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="format_avail_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes"><small>Available options:</small></property> <property name="use_markup">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="format_avail_descs"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">12</property> <property name="margin">6</property> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="format_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Song Formatting</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> <packing> <property name="position">3</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_format"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Format</property> </object> <packing> <property name="position">3</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_extras"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="preferences_extras_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="extras_frame_alignment"> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="scrobbler_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkCheckButton" id="scrobbler_check"> <property name="label" translatable="yes">_Audioscrobbling (Last.fm)</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="scrobbler_username_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="scrobbler_username_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Username:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">scrobbler_username_entry</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="scrobbler_username_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="scrobbler_password_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="scrobbler_password_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Password:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">scrobbler_password_entry</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="scrobbler_password_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="visibility">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkCheckButton" id="notification_check"> <property name="label" translatable="yes">Popup _notification on song changes</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkBox" id="notification_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkComboBoxText" id="notification_time_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">Entire song</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="notification_loc_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">System tray</item> <item translatable="yes">Top Left</item> <item translatable="yes">Top Right</item> <item translatable="yes">Bottom Left</item> <item translatable="yes">Bottom Right</item> <item translatable="yes">Screen Center</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkCheckButton" id="crossfade_check"> <property name="label" translatable="yes">C_rossfade</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">5</property> </packing> </child> <child> <object class="GtkBox" id="crossfade_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="crossfade_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Fade length:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">crossfade_time</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkSpinButton" id="crossfade_time"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="adjustment">crossfade_adjustment</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkLabel" id="crossfade_extra_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">sec</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">6</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="extras_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Extras</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> <packing> <property name="position">4</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_extras"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Extras</property> </object> <packing> <property name="position">4</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="preferences_plugins"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="shadow_type">in</property> <property name="margin">6</property> <child> <object class="GtkTreeView" id="plugins_treeview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="model">plugins_store</property> <property name="headers_clickable">False</property> <property name="rules_hint">True</property> <property name="search_column">0</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="plugins_treeview_selection"/> </child> <child> <object class="GtkTreeViewColumn" id="plugins_check_column"> <property name="title" translatable="yes">Enabled</property> <child> <object class="GtkCellRendererToggle" id="plugins_check_renderer"/> <attributes> <attribute name="active">0</attribute> </attributes> </child> </object> </child> <child> <object class="GtkTreeViewColumn" id="plugins_info_column"> <property name="spacing">10</property> <property name="max_width">0</property> <property name="title" translatable="yes">Description</property> <child> <object class="GtkCellRendererPixbuf" id="plugins_pixbuf_renderer"/> <attributes> <attribute name="pixbuf">1</attribute> </attributes> </child> <child> <object class="GtkCellRendererText" id="plugins_text_renderer"> <property name="width_chars">30</property> <property name="wrap_mode">word</property> <property name="wrap_width">10</property> <property name="max_width_chars">30</property> </object> <attributes> <attribute name="markup">2</attribute> </attributes> </child> </object> </child> </object> </child> </object> <packing> <property name="position">5</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_plugins"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Plugins</property> </object> <packing> <property name="position">5</property> <property name="tab_fill">False</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">10</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">10</property> <property name="position">0</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="preferences_action"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="preferences_closebutton"> <property name="label">gtk-close</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="0">preferences_closebutton</action-widget> </action-widgets> </object> </interface> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/sonata.css���������������������������������������������������������0000664�0000000�0000000�00000000436�15003420405�0021131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkLabel.tray_label, GtkLabel.current_label { font-weight: bold; } GtkLabel.fullscreen_label { font-size: 19.5px;/*= 20000 / 1024 */ } GtkLabel.fullscreen_label2 { font-size: 11.7px;/*= 12000/1024 */ } GtkLabel.fullscreen_label, GtkLabel.fullscreen_label2 { color: white; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/sonata.glade�������������������������������������������������������0000664�0000000�0000000�00000115474�15003420405�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkListStore" id="artwork_liststore"> <columns> <!-- column-name gint1 --> <column type="gint"/> <!-- column-name GdkPixbuf1 --> <column type="GdkPixbuf"/> </columns> </object> <object class="GtkDialog" id="artwork_dialog"> <property name="can_focus">False</property> <property name="title" translatable="yes">Choose Cover Art</property> <property name="role">artwork_chooser</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">normal</property> <property name="transient_for">main_window</property> <child internal-child="vbox"> <object class="GtkBox" id="artwork_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkScrolledWindow" id="artwork_scrolledwindow"> <property name="width_request">360</property> <property name="height_request">325</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkIconView" id="artwork_iconview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="model">artwork_liststore</property> <property name="columns">2</property> <property name="item_width">162</property> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkExpander" id="artwork_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkBox" id="artwork_expander_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkGrid" id="artwork_expander_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="artwork_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Artist:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="artwork_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Album:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="artwork_artist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="artwork_album_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="artwork_update_button"> <property name="label">gtk-refresh</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="artwork_expander_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Edit search terms</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="artwork_button_box"> <property name="can_focus">False</property> <child> <object class="GtkButton" id="artwork_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="artwork_choose_button"> <property name="label">gtk-ok</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">2</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-6">artwork_cancel_button</action-widget> <action-widget response="-3">artwork_choose_button</action-widget> </action-widgets> </object> <object class="GtkBox" id="expander_label_widget"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="current_label_1"> <property name="can_focus">False</property> <property name="xalign">0</property> <style> <class name="current_label"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="current_label_2"> <property name="can_focus">False</property> <property name="xalign">0</property> <style> <class name="current_label2"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <object class="GtkWindow" id="fullscreen_window"> <property name="can_focus">False</property> <property name="title" translatable="yes">Cover Art</property> <property name="role">fullscreenWindow</property> <child> <object class="GtkBox" id="fullscreen_v_box"> <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="fullscreen_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="fullscreen_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="hexpand">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">3</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="fullscreen_label_1"> <property name="can_focus">False</property> <property name="halign">center</property> <style> <class name="fullscreen_label"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkLabel" id="fullscreen_label_2"> <property name="can_focus">False</property> <property name="halign">center</property> <style> <class name="fullscreen_label2"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> </child> </object> <object class="GtkImage" id="local_art_preview_image"> <property name="visible">True</property> <property name="can_focus">False</property> </object> <object class="GtkFileChooserDialog" id="local_artwork_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Open Image</property> <property name="role">local_art_dialog</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="default_width">600</property> <property name="default_height">400</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">main_window</property> <property name="preview_widget">local_art_preview_image</property> <property name="use_preview_label">False</property> <child internal-child="vbox"> <object class="GtkBox" id="local_artwork_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="local_artwork_buttonbox"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="local_art_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="local_art_open_button"> <property name="label">gtk-open</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <placeholder/> </child> </object> </child> <action-widgets> <action-widget response="-6">local_art_cancel_button</action-widget> <action-widget response="-5">local_art_open_button</action-widget> </action-widgets> </object> <object class="GtkDialog" id="lyrics_search_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Lyrics Search</property> <property name="role">lyrics_search</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">main_window</property> <child internal-child="vbox"> <object class="GtkBox" id="lyrics_search_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="lyrics_search_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="lyrics_search_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="lyrics_search_find_button"> <property name="label">gtk-find</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="lyrics_search_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="lyrics_search_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Artist Name:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="lyrics_search_title_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Song Title:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="lyrics_search_artist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="lyrics_search_title_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">lyrics_search_cancel_button</action-widget> <action-widget response="-3">lyrics_search_find_button</action-widget> </action-widgets> </object> <object class="GtkBox" id="tray_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">6</property> <child> <object class="GtkBox" id="tray_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkImage" id="tray_album_image"> <property name="width_request">26</property> <property name="height_request">77</property> <property name="visible">True</property> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="tray_inner_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="tray_label_1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="xpad">6</property> <property name="label" translatable="yes">Playlist</property> <style> <class name="tray_label"/> </style> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="tray_label_2"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="xpad">6</property> <property name="label" translatable="yes">Playlist</property> <style> <class name="tray_label2"/> </style> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkProgressBar" id="tray_progressbar"> <property name="can_focus">False</property> <property name="pulse_step">0.050000000000000003</property> <property name="show_text">True</property> <property name="margin">6</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <object class="GtkAdjustment" id="volume_button_adjustment"> <property name="upper">100</property> <property name="step_increment">5</property> <property name="page_increment">10</property> </object> <object class="GtkWindow" id="main_window"> <property name="can_focus">True</property> <property name="title">Sonata</property> <property name="role">mainWindow</property> <child> <object class="GtkBox" id="main_h_box"> <property name="can_focus">False</property> <child> <object class="GtkBox" id="main_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="top_h_box"> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="image_event_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="main_album_image"> <property name="visible">True</property> <property name="can_focus">False</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">6</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="top_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="toptop_h_box"> <property name="can_focus">False</property> <child> <object class="GtkButton" id="prev_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="prev_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-previous</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="playpause_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="playpause_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-play</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="stop_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="stop_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-stop</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkButton" id="next_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="next_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-next</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkBox" id="progress_box"> <property name="can_focus">False</property> <property name="valign">center</property> <property name="margin_right">5</property> <property name="orientation">vertical</property> <child> <object class="GtkEventBox" id="progress_event_box"> <property name="can_focus">False</property> <child> <object class="GtkProgressBar" id="progress_bar"> <property name="can_focus">False</property> <property name="pulse_step">0.050000000000000003</property> <property name="show_text">True</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">6</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkVolumeButton" id="volume_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="adjustment">volume_button_adjustment</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">5</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkExpander" id="expander"> <property name="can_focus">False</property> <property name="label" translatable="yes">Playlist</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkNotebook" id="main_notebook"> <property name="can_focus">False</property> <property name="scrollable">True</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">5</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkStatusbar" id="main_statusbar"> <property name="can_focus">False</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">3</property> <property name="position">0</property> </packing> </child> </object> </child> </object> </interface> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/streams.glade������������������������������������������������������0000664�0000000�0000000�00000021573�15003420405�0021613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="stream_edit_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="role">stream_edit</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="stream_edit_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="stream_edit_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="stream_edit_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="stream_edit_save_button"> <property name="label">gtk-save</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="stream_edit_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="stream_edit_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Stream name:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="stream_edit_url_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Stream URL:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="stream_edit_name_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="stream_edit_url_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">stream_edit_cancel_button</action-widget> <action-widget response="-3">stream_edit_save_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="streams_liststore"> <columns> <!-- column-name gchararray1 --> <column type="gchararray"/> <!-- column-name gchararray2 --> <column type="gchararray"/> <!-- column-name gchararray3 --> <column type="gchararray"/> </columns> </object> <object class="GtkScrolledWindow" id="streams_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <property name="margin">3</property> <child> <object class="GtkTreeView" id="streams_page_treeview"> <property name="can_focus">True</property> <property name="model">streams_liststore</property> <property name="headers_visible">False</property> <property name="rules_hint">True</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="streams_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> <child> <object class="GtkTreeViewColumn" id="streams_column"> <child> <object class="GtkCellRendererPixbuf" id="streams_pixbuf_renderer"/> <attributes> <attribute name="stock_id">0</attribute> </attributes> </child> <child> <object class="GtkCellRendererText" id="streams_text_renderer"> <property name="ellipsize">end</property> </object> <attributes> <attribute name="markup">1</attribute> </attributes> </child> </object> </child> </object> </child> </object> <object class="GtkEventBox" id="streams_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="streams_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="streams_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-network</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="streams_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> �������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/tagedit.css��������������������������������������������������������0000664�0000000�0000000�00000000051�15003420405�0021256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkEntry.modified { color: #FF0000; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/ui/tagedit.glade������������������������������������������������������0000664�0000000�0000000�00000057114�15003420405�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="tags_dialog"> <property name="width_request">375</property> <property name="can_focus">False</property> <property name="role">edit_tags</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="tags_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="tags_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="tags_saveall_button"> <property name="label" translatable="yes">Save _All</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="no_show_all">True</property> <property name="use_action_appearance">False</property> <property name="image">tags_saveall_image</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="tags_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_button"> <property name="label">gtk-save</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="tags_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="margin">12</property> <property name="orientation">vertical</property> <property name="row_spacing">3</property> <property name="column_spacing">6</property> <property name="row_homogeneous">True</property> <child> <object class="GtkImage" id="tags_sonata_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="valign">center</property> <property name="stock">sonata</property> <property name="icon-size">5</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">2</property> </packing> </child> <child> <object class="GtkLabel" id="tags_title_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Title:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Artist:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Album:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_year_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Year:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_genre_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Genre:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_comment_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Comment:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_track_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Track:</property> </object> <packing> <property name="left_attach">3</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_title_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_artist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_album_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_year_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="max_length">4</property> <property name="width_chars">4</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_comment_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">7</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_track_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="max_length">4</property> <property name="width_chars">4</property> </object> <packing> <property name="left_attach">4</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_title_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_artist_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_album_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_year_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">2</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_genre_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_comment_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_track_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_expand_file_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> <child> <object class="GtkArrow" id="tags_expand_arrow"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> </object> </child> </object> <packing> <property name="left_attach">4</property> <property name="top_attach">0</property> <property name="width">2</property> <property name="height">2</property> </packing> </child> <child> <object class="GtkComboBoxText" id="tags_genre_comboboxtext"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="has_entry">True</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <child internal-child="entry"> <object class="GtkEntry" id="tags_genre_entry"> <property name="can_focus">True</property> </object> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">6</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="tags_file_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="tags_file_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">start</property> <property name="valign">center</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> <property name="width_chars">23</property> <property name="max_width_chars">23</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">3</property> <property name="height">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-12">tags_saveall_button</action-widget> <action-widget response="-2">tags_cancel_button</action-widget> <action-widget response="-3">tags_save_button</action-widget> </action-widgets> </object> <object class="GtkImage" id="tags_saveall_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="icon_name">document-save-as</property> </object> </interface> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/sonata/version.py������������������������������������������������������������0000664�0000000�0000000�00000003235�15003420405�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata 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. # # Sonata 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 Sonata. If not, see <http://www.gnu.org/licenses/>. import os from subprocess import Popen, PIPE try: from sonata.genversion import VERSION build_ver = VERSION except ImportError: build_ver = None # Should be the most recent release default_version = "v1.7.1" def _version(): '''Get the version number of the sources First check the build generated file, fallback to git describe if this is not a build, finally fallback to the default most recent release. ''' if build_ver: version = build_ver else: try: dir = os.path.dirname(__file__) version = Popen(["git", "describe", "--abbrev=4", "HEAD"], cwd=dir, stdout=PIPE, stderr=PIPE).communicate()[0].decode('utf-8') if not version: raise OSError except OSError: version = default_version return version.strip()[1:] version = _version() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/website/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�15003420405�0016667�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multani-sonata-bf88fdc/website/changelog.html�������������������������������������������������������0000664�0000000�0000000�00000072733�15003420405�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Sonata Music Client for MPD - Changelog

Sonata

An elegant music client for MPD

Changelog

September 21, 2009 (Version 1.6.2.1):

  • Library artwork caching/displaying improvements
  • Lyricwiki screen scraping workaround
  • Replace Amazon.com cover art fetching with Rhapsody.com
  • Bug: Fix library sorting when adding, e.g., albums to playlist
  • Bug: Fix window positioning weirdness when unwithdrawing from systray
  • Bug: Fix album being labeled various artists when a duplicate exists
  • Bug: Fix album tracks in the info tab being out of order sometimes
  • Bug: Show songs with a missing date in info album listing
  • Bug: Library icons change after adding stream to playlist
  • Bug: Cpu spike, tooltips missing in library search results with gtk 2.16.2

April 13, 2009 (Version 1.6.2):

  • Bug: Fix cli options (e.g. 'sonata play')

April 11, 2009 (Version 1.6.1):

  • Reduce library's filesystem view row height
  • More auto-applying of preferences (e.g. format tab)
  • Bug: Fix python version check for Ubuntu Jaunty
  • Bug: Traceback if track has multiple date tags
  • Bug: Fix infinite loop when format strings end in '{'
  • Bug: Fix music directory chooser selecting the wrong folder sometimes
  • Bug: Catch OSErrors from os.listdir, e.g. flac files with cue sheets
  • Bug: Fix --profile option

March 29, 2009 (Version 1.6):

  • Album browsing mode, additional details in library views
  • Real-time searching of library (search as you type)
  • Fullscreen album art mode (via right-click on artwork) (mips)
  • Improve library searching across meta tags
  • Sort library search results
  • Show file path in tooltip for library search results
  • Improved support for updating less than entire library
  • Drag-and-drop to copy files from Sonata to a file manager (Kamil)
  • Ability to show file paths in tag editing window
  • Use plchanges for faster performance (e.g. add to playlist)
  • Allow manually fetching remote art when using local art pref (Erik)
  • Swap mousewheel behavior for progressbar
  • Only minimize to trayicon on click if focused; raise if not focused
  • Use new 'listplaylists' command for retrieving playlists
  • Allow hiding the application's titlebar in preferences
  • Better error trapping
  • Make process name 'sonata' for linux (himdel)
  • Look for <artist> - <title>.txt lyrics files by other clients
  • Add Traditional Chinese translation (b4283)
  • Add Japanese translation (Masato)
  • Add Slovenian translation (Alan)
  • Code modernisation, modularisation, overall cleanup, documentation
  • A prototype of a plug-in system
  • Unicode fixes
  • Some helpful error messages if startup fails
  • Useless code removed, various code cleanups and refactorings (Stephen)
  • Bug: Bad profiles prevent Sonata from starting
  • Bug: Error for CLI arguments when Sonata can't connect to MPD (Juan)
  • Bug: Files may not update in interface after tag editing
  • Bug: Traceback with Turkish locale
  • Bug: Lyrics don't work with python-zsi 2.0 on Ubuntu
  • Bug: Bell sound when going to parent folder using backspace

September 13, 2008 (Version 1.5.3):

  • Quick link to edit lyrics through LyricWiki
  • Unicode lyrics and better searching with LyricWiki (orivej)
  • Store audioscrobbler password as md5 hash
  • Add Greek translation (Lazaros)
  • Bug: Fix lost connection when hard drive is spun down
  • Bug: Fix non-ascii characters when scrobbling with non-utf8 locale
  • Bug: Selected item changed on double-click
  • Bug: Use consistent behavior for titlebar
  • Bug: Prevent bad cover image files from causing problems
  • Bug: Don't sort library search results
  • Bug: Ensure image filenames are escaped in search routine

June 5, 2008 (Version 1.5.2):

  • Improved artwork/lyrics caching through case-insenstive searching
  • Add Turkish translation (Gökmen)
  • Bug: Fix artwork for files with unicode characters
  • Bug: Fix crash if mpd library is empty
  • Bug: Fix regression where dbus-python became required
  • Bug: Bold titles lose sync if song changes with visible filterbar
  • Bug: Doesn't scrobble when same song is repeated
  • Bug: Python conflict when installed with sugar (OLPC)
  • Bug: Fix artwork display in song notification window for RTL languages
  • Bug: Fix progressbar seeking for RTL languages
  • Bug: No play/pause indicator in egg tray icon if started while mpd is active

May 3, 2008 (Version 1.5.1):

  • Swap 'shuffle' and 'random' to be consistent with MPD
  • "Save list to">"foo" can now either replace playlist or append songs
  • Add Catalan translation (Franc)
  • Add Arabic translation (Ahmad)
  • Bug: Fix play/pause with multimedia keys (Vinay)
  • Bug: Prevent possible traceback from gobject.filename_from_utf8
  • Bug: 'play after replace' when in shuffle mode plays 1st song, not random
  • Bug: Fix random, repeat, and toggle commands from console
  • Bug: Songs not tagged with the album name don't show up
  • Bug: Cannot disconnect when MPD_HOST and MPD_PORT are set
  • Bug: Fix %D and %N formats within brackets

April 3, 2008 (Version 1.5):

  • Replace album view with genre view for library
  • Display covers for albums in artist/genre views
  • Add menu items and shortcuts for playing library items after add/replace
  • Allow setting artwork for streams
  • Optional stylized album art with cases (Aidan)
  • New, faster python mpd interface (jat)
  • --popup argument to popup song notification (requires D-Bus) (Oleg)
  • Show 'Untagged' artists/genres in their respective library views
  • Allow DND of cover art from a web browser (Артем)
  • Allow DND of music from a file manager into playlist (requires mpd 0.14)
  • Preserve column percentages for current tab across window resizing
  • Speed up mpd-related commandline arguments
  • Switch back to last tab on second cover art click
  • Retain selection in lists after removing items
  • Hidden config option to expand notebook tabs (tabs_expanded)
  • Set ServiceProxy cachedir for lyrics to work around ZSI bug
  • Add Estonian translation (Mihkel)
  • Bug: Fix multimedia keys for gnome 2.22
  • Bug: Fix artwork for artists/albums with "/" in them (e.g. AC/DC)
  • Bug: Fix egg trayicon with vertical system tray
  • Bug: Weird bug in library-view
  • Bug: Prevent failure to load if tab positions are saved as None
  • Bug: Fix non-ascii characters in files for non-utf8 filesystems (zap)
  • Bug: Prevent crash with certain locales like turkish (jat)
  • Bug: Using filter causes playlist to jump to the top
  • Bug: Fix AudioScrobblerQuery (kigurai)

February 9, 2008 (Version 1.4.2):

  • Add %D for disc tag in display formatting options
  • Better handling if no read permission (e.g. no/bad mpd password supplied)
  • Bug: Fix seeking in progress bar
  • Bug: Fix blank album info when there is an ampersand
  • Bug: Missing color in notification window
  • Bug: Notebook arrow clicks are ignored due to gtk bug
  • Bug: Potential ordering bug when sorting via column heading click
  • Bug: Make desktop file compliant
  • Bug: Column widths can collapse when exiting while minimized to the tray

February 2, 2008 (Version 1.4.1):

  • Remove queue support (it was removed from mpd-svn, complain to them)
  • Improved re-ordering of playlist songs (including multiple selected songs)
  • Add album info into info tab
  • Use hand2 instead of hand1 for song info links
  • Bug: Traceback can occur after enabling audioscrobbler
  • Bug: Text background color on tabs (ecik)
  • Bug: Visible background of eventboxes for info tab links, etc.
  • Bug: Can't click (more) link in non-English locales
  • Bug: Crash when using libegg with system tray icon disabled
  • Bug: Disable tag editing link in info tab for streams/remote files
  • Bug: Unescape common html codes from lyrics fetching, enable formatting
  • Bug: The main notebook should be scrollable

January 15, 2008 (Version 1.4):

  • Integrate info window into main player
  • Update to audioscrobbler protocol 1.2 and scrobbling bug fixes (mveers)
  • Implemented caching of scrobbles across client restarts
  • Vertically center currently playing song
  • Updated artwork (Adrian Chromenko)
  • IPv6 support for the mpd connection (Shane Kerr)
  • Allow screen center for notification popup
  • Preference for saving lyrics to music file's directory (like artwork)
  • Allow hiding and reordering notebook tabs (e.g. playlists, streams, info)
  • Retain library path when re-opening Sonata
  • Remove confusing 'remote only' and 'remote, then local' artwork options
  • Ability to hide progress bar (can create very minimal player)
  • Skip fallback artwork search of just album name if primary searches fail
  • Make system tray icon scalable
  • Shortcuts to search library (ctrl-h), randomize current playlist (alt-r)
  • Use gtk theme's link-color if available (only for gtk 2.12 and above)
  • Bug: Right-click menu can cause accidental actions with some gtk themes
  • Bug: Prevent crash on negative disc/track numbers
  • Bug: Filter + Edit Tags edits a different song than selected
  • Bug: Prevent possible exception regarding cover art on first load
  • Bug: Fix retrieving some non-English lyrics (ecik)
  • Bug: Allow MPD_HOST to override GUI
  • Bug: {} displays in the Current column title
  • Bug: Fix manpage path to be FHS compliant
  • Bug: Ensure that the version of ZSI is compatible with sonata

October 29, 2007 (Version 1.3):

  • Playlist queue support (requires mpd 0.14 - currently mpd-svn)
  • Use-configurable columns in playlist by using "|" in prefs > format (xsdnyd)
  • Switch from SOAPpy to newer ZSI library for lyrics fetching
  • Use xmms-like search filter by default when user types (no more ctrl-j)
  • Ctrl-i shortcut to center currently playing song
  • Use case insensitive sorting for library (holy_robot)
  • Ignore "the" when sorting library in artist/album views (holy_robot)
  • Better logic when sorting playlists and new "dir+file" sort option (sed)
  • Allow saving/overwriting existing playlists and streams
  • Hidden config options to set browser, hide column headers
  • Update license to GNU GPLv3
  • Added Brazilian translation (Alex Tercete Matos)
  • Added Danish translation (Martin Dybdal)
  • Bug: Fix nl.po translation causing crash
  • Bug: Remember playlist position when adding from library
  • Bug: Fixed tracebacks with certain encodings
  • Bug: MPD_HOST with password doesn't work on first install
  • Bug: Fix desktop file to match current XDG standard (nigel)
  • Bug: Search Amazon artwork using latin1 since it no longer supports utf8
  • Bug: Possible tag editing issues w/non-latin encoding (requires tagpy 0.93)
  • Bug: Fix czech translation to use cs.po

August 23, 2007 (Version 1.2.3):

  • Incorporate disc tag in album sorting (Emmanuel Viaud)
  • Significantly reduced wakeups/sec according to powertop
  • Add stream name as a formatting option
  • Added Italian translation (Gianni Vialetto)
  • Added Swedish translation (Daniel Nylander)
  • Added Dutch translation (Olivier)
  • Bug: Stupid parsing of amazon URLs, reduced success of cover art fetching
  • Bug: Default cover remains after refetching when not using ~/.covers
  • Bug: Czech translation incorrectly labeled Swedish
  • Bug: Song played after a replace is first in list, even in shuffle mode
  • Bug: Collapsed view doesn't work properly in some WMs (e.g. Fluxbox)
  • Bug: Display 'update library' menu item even when library is empty

July 22, 2007 (Version 1.2.2):

  • Bug: Fix artwork fetching (Amazon gzip'ed xml returns garbage)
  • Bug: Prevent connection error if the interface hasn't yet been run
  • Bug: Prevent possibility of deleting image file when choosing local art file
  • Bug: Don't load gnome-settings-daemon if it's not running (kinote)

July 16, 2007 (Version 1.2.1):

  • Bug: Using MPD with a password causes error

July 15, 2007 (Version 1.2):

  • Audioscrobbler support (requires python 2.5 or python-elementtree) (Owen)
  • Support for multiple profiles (and, e.g., "sonata --profile=2")
  • Ability to set search terms for lyrics
  • Ability to rename playlists (requires mpd >= 0.13)
  • Prevent continually searching for artwork/lyrics if not found the first time
  • Search for additional artwork filenames
  • Allows resetting artwork to the default image
  • 'Save All' button for tag editing window
  • Display MPD status in systray icon
  • Prevent GUI blocking when connecting to MPD, where possible
  • Added Finnish translation (lkka Tuohela)
  • Bug: Multimedia keys no longer work in Gnome 2.18 (Florian)
  • Bug: Hide statusbar in collapse mode when showing from systray
  • Bug: Cover artwork filename doesn't use system's locale charset
  • Bug: MPD_HOST variable doesn't work when it includes password

May 18, 2007 (Version 1.1.1):

  • Add Swedish translation (Daniel Nylander)
  • Bug: Incorrect artist can sometimes be set for album art/info (vEX)
  • Bug: Artwork isn't set when there is a single image in the song's dir
  • Bug: Improve handling under tiling WMs like ion3
  • Bug: A 2nd instance isn't prevented with dbus/python 2.4 (Sebastian)

May 7, 2007 (Version 1.1):

  • Ctrl-J for xmms-like search filter (vEX/Eduard)
  • Implemented logic for Various Artists albums
  • Cover art pref: save to ~/.covers or file's respective dir
  • Support for GNOME session management
  • Allow searching through ALL metadata in library
  • Link artist and album name in song info window to wikipedia entry
  • Add shuffle, repeat, --visible, and --hidden commandline arguments
  • Show if mpd is updating in statusbar
  • Save last used option in library search
  • Update code for dbus-python 0.80 API (Jordan)
  • Ellipsize text in treeviews, current playing song (Jordan)
  • Add button for listing of shortcuts to About dialog
  • Resize cover art to fit song info window
  • Added Simplified Chinese translation (Desmond Chang)
  • Bug: Prevent tracebacks between withdrawing app & gtk.StatusIcon
  • Bug: Fix error if mpd is not running and sonata starts hidden
  • Bug: Can't manually set artwork across filesystems
  • Bug: Can't use find-as-you-type in the current playlist
  • Bug: Right-click menu closes right away for some users

February 13, 2007 (Version 1.0.1):

  • Make lyrics fetching optional
  • Allow editing of stream name/url
  • Hide the notification window when it is clicked
  • Small usability improvements to gtk.StatusIcon
  • Improvements to reordering the current playlist with drag-n-drop
  • Bug: Info window freezes when editing currently playing song's tags
  • Bug: Tag editing doesn't work with older version (0.90.1) of tagpy
  • Bug: Prevent strange potential freeze with gc.collect()
  • Bug: Cover art doesn't update correctly if Local Only artwork set
  • Bug: Lyrics occassionally don't stay synced with current playing song

January 21, 2007 (Version 1.0):

  • Multiple views for library: filesystem, artists, albums
  • Editing of song tags (requires optional taglib & tagpy)
  • Auto-fetching of song lyrics (requires optional soappy)
  • Improved song info window and access to it
  • Allow pls/m3u/extm3u's as stream inputs
  • Sort current playlist (by metadata, random, reverse)
  • Optional statusbar (playlist length, time)
  • Revert to gtk's StatusIcon if gnome-python-extras isn't installed
  • Make system tray icon optional
  • Pref to write xmms-info like status file to use with IM, IRC.. (Tim)
  • Allow drag-n-drop of images to set album art
  • If there is only one image in the song's dir, set as art (Ivan)
  • Album art priority preference (local vs remove)
  • Formatting options (genre, song length, elapsed time, year) (Ivan)
  • Pref to play enqueued items on activate (i.e. enter/double-click)
  • Play friendler with other clients for shuffle/repeat/crossfade
  • Reduced startup time/memory usage
  • Use curly brackets {} to have formatting appear only if all enclosed tags are available
  • Ability to run on OLPC's Sugar user environment (Owen)
  • Added Ukranian translation (Господарисько Тарас)
  • Bug: No more freezes due to threading! Finally! Seriously!
  • Bug: Cannot set album art for album/artist with "/" in name
  • Bug: Prevent interface jumping because of progress bar font
  • Bug: Notification window isn't positioned correctly for dual-head

November 19, 2006 (Version 0.9):

  • Added stream support
  • Use local artwork (cover.jpg, folder.jpg) first, if it exists (requires music_directory to be specified in preferences)
  • Allow crossfading (mixing) between songs
  • Fetch higher-resolution cover art
  • Allow specifying search terms for remote album art
  • Improved song info viewer
  • Make remote images window non-blocking
  • Popup song notification on un-pause
  • Pick up tooltip album background color from gtk theme
  • Store cover art in ~/.covers for consistency with gmpc
  • Add German translation (Paul Johnson)
  • Bug: Prevent infrequent crash when fetching album art
  • Bug: Intermittent interface freezes due to threading
  • Bug: Unable to delete playlists with ampersand, etc.
  • Bug: Player can become the wrong height on expand
  • Bug: Ensure local art is correctly applied on song changes
  • Bug: Searching library doesn't work for non-english locale

October 19, 2006 (Version 0.8.1):

  • Add Polish translation (Tomasz Dominikowski)
  • Bug: Correctly send mpd password when using manual connect
  • Bug: Prevent certain keys from causing events
  • Bug: Prevent potential crash if not able to obtain mpd status

October 7, 2006 (Version 0.8):

  • Allow user formatting of current playlist, library, and title
  • Pref for song notification location
  • Allow song notification for users without gnome-python-extras
  • Pref to hide playback buttons
  • Pref to update MPD library on start
  • --info, --status displays current song info or MPD status
  • Pref to autoconnect on start, connect/disconnect buttons
  • Fetch album art in background (non-blocking)
  • Correctly retain previous library state when ending search
  • Add russian translation [Andrew Lukoshko]
  • Bug: Display path when filename is empty or http/ftp prefixes
  • Bug: Fix crash if changing connection w/o gnome-python-extras
  • Bug: Prevent --help, --toggle, etc. from happening twice if dbus is installed
  • Bug: Some shortcuts don't work with numslock enabled

September 27, 2006 (Version 0.7.1):

  • Bug: Fix crash if dbus is not installed
  • Bug: Fix crash if song does not have some id3 info specified

September 27, 2006 (Version 0.7):

  • Ability to search library by type (can be disabled in prefs)
  • Optional notification popup on song changes
  • Show larger image on left-click of cover art
  • Reduce (pygmy's) default polling time
  • Retain selection of browsed directories in library
  • Retain selection after drag-n-drop
  • Keep width of tooltip fixed
  • Show previous instance of app if user tries to open a second instance [Mike Massonnet patch]
  • Add --version, --help; print usage
  • --toggle argument to minimize to tray or show (requires D-Bus)
  • Add french translation [Floréal M]
  • Additional shortcuts (see docs)
  • Bug: repeat/shuffle isn't updated if mpd is restarted
  • Bug: Unable to delete multiple playlists at once
  • Bug: Crash when playing ogg streams [patch]

September 18, 2006 (Version 0.6):

  • Add support for playlists (save, load, queue, delete)
  • Ability to use local image for album cover
  • Support for multimedia keys
  • Fetch cover art if an artist, but not album, is specified
  • Add Ctrl-U and Ctrl-Shift-U for updating library (see docs)
  • (Re-)display systray icon if tray is (re-)opened
  • Fix mpdclient3.py to return all playlist objects
  • Bug: Delete key doesn't remove songs from playlist

September 15, 2006 (Version 0.5.2):

  • Correctly update interface after updating MPD library
  • Interface prefs: show album art, show volume, sticky, above
  • Behavior prefs: minimize to systray, stop playback on exit
  • Increase iter time if connection timesout (to make gui responsive)
  • Use gtk.STOCK_JUSTIFY_FILL instead of custom playlist icon
  • Try gnome-open/exo-open first for opening help, then fallback
  • Ability to set translations (see TRANSLATIONS file)
  • Use dbus to prevent multiple instances
  • More shortcuts (see documentation)
  • Minor bugfixes

September 13, 2006 (Version 0.5.1):

  • Increment to mpdclient3 to prevent incompatibility issues
  • Bug: Running Sonata without systray causes crash

September 12, 2006 (Version 0.5):

  • Added album art (and ability to choose from alternatives if the one automatically selected is incorrect, via right-click)
  • Integrate playlist and library into one app
  • Change song progress with mousewheel over progressbar
  • Change volume with mousewheel over volume button, systray icon
  • Change volume icon based on volume level
  • Added playback, etc, shortcuts
  • Added Replace menu and dir/file icons to library browser
  • Removed toolbar, cleaned up interface
  • Removed horizontal scrollbar
  • Don't update systray icon based on playback status
  • Moved config to freedesktop.org standard
  • Keep app width constant when (un)expanding
  • Keep currently playing song visible in list
  • Removed python-empy, glade
  • Bug: mpdclient2/app doesn't accept passwords (crash)
  • Bug: mdpclient2 - lsinfo skips the first file found after dirs
  • Bug: Cannot remove multiple rows from right-click
  • Bug: Crash if user has MPD connection but no read access
  • Bug: GTK+ treeview search does not work
  • Bug: Right-Click checkbox doesnt set value on start
  • Bug: Doesn't properly retain view when browsing playlist
  • Added documentation
  • Other bugfixes, tweaks
multani-sonata-bf88fdc/website/documentation.html000066400000000000000000000243111500342040500224270ustar00rootroot00000000000000 Sonata Music Client for MPD - Documentation

Sonata

An elegant music client for MPD

Documentation

Overview
     Main parts of the interface
FAQ
Shortcuts

Overview

Sonata is designed to be an elegant and intuitive interface for your music collection via the Music Player Daemon (MPD). Most actions are accessed through right-click popup menus. The main window can be collapsed into a mini view or expanded by clicking on the current song (with the > sign next to it).

In the expanded view, the tabbed interface includes your current playlist, info about the current song, your library (browse by folders, genres, artists, or albums), your saved playlists, and any streams (pls/m3u supported). You can reorder the tabs by drag-and-dropping, and hide any of them via a popup menu.

Main parts of the interface

For the quickest access, see the keyboard shortcuts.

Album art
Via a popup menu here, you can choose a remote or local image file, or go to a fullscreen album art view.
Playback controls
Sonata relays your playback commands to MPD. You can seek within the current track by clicking on the progress bar. The target of the volume control is set in the MPD configuration file.
Preferences
You can go through the settings here to customize Sonata to your liking. You can also add connection profiles for remote MPD servers, as well as activate audioscrobbling (Last.fm) support, track cross-fading in MPD, and a now-playing status file.
Current tab
MPD plays the songs from this current playlist. You can add tracks from the library, playlists, or streams. You can save the tracks into a playlist as well. Pressing / (or simply starting to type) brings up a text filter for the tracks.
Info tab
Info about the currently playing track contains song tags, album info, and lyrics.
Library tab
This is the library of your music files that MPD knows about. The top folder is set in the MPD configuration file, and you can use the Update command in the popup menu to make MPD check for changes. If the files are local, you can open the tag editor here.
      By clicking the icon on the bottom-left, you can choose to browse the library starting from the top folder, or from a list of genres, artists, or albums. By choosing the type of search on the bottom-center and typing into the text field on the bottom-right, you can search for tracks.
Playlists tab
MPD has a folder of playlists. You can rename and delete existing playlists here.
Streams tab
Sonata keeps a list of Internet streams for you. You can manage the entries here. The name you can choose freely, the stream URL should either point directly to a stream that MPD can play or to an m3u/pls document that lists such streams.
Tray status icon
The status icon on the system tray (if your desktop environment provides one in its panels) lets you show and hide the main window of Sonata with a mouse click. The scroll wheel controls volume here. The popup menu includes playback controls as well as the command for quitting Sonata.
Tag editor
You can select single or multiple files in the Current and Library tabs and edit their metadata tags within Sonata, if they are local files.

FAQ

Frequently asked questions and answers about Sonata are kept at the MPD wiki page Client:Sonata/FAQ.

Shortcuts

Note: This list can also be found by going to About > Shortcuts.

     Main Shortcuts:
     F1: About Sonata
     F5: Preferences
     F11: Fullscreen Artwork Mode
     Alt-[1-5]: Switch to [1st-5th] tab
     Alt-C: Connect to MPD
     Alt-D: Disconnect from MPD
     Alt-R: Randomize current playlist
     Alt-Down: Expand player
     Alt-Left: Switch to previous tab
     Alt-Right: Switch to next tab
     Alt-Up: Collapse player
     Ctrl-H: Search library
     Ctrl-Q: Quit
     Ctrl-Shift-U: Update entire library
     Menu: Display popup menu
     Escape: Minimize to system tray (if enabled)

     Playback Shortcuts:
     Ctrl-Left: Previous track
     Ctrl-Right: Next track
     Ctrl-P: Play/Pause
     Ctrl-S: Stop
     Ctrl-Minus: Lower the volume
     Ctrl-Plus: Raise the volume

     Current Shortcuts:
     Alt-R: Randomize list
     Enter/Space: Play selected song
     Delete: Remove selected song(s)
     Ctrl-I: Center currently playing song
     Ctrl-T: Edit selected song's tags
     Ctrl-Shift-S: Save playlist
     Ctrl-Delete: Clear list

     Library Shortcuts:
     Enter/Space: Add selected song(s) or enter directory
     Backspace: Go to parent directory
     Ctrl-D: Add selected song(s) or directory(s)
     Ctrl-R: Replace with selected song(s) or directory(s)
     Ctrl-T: Edit selected song's tags
     Ctrl-Shift-D: Add selected item(s) and play
     Ctrl-Shift-R: Replace with selected item(s) and play
     Ctrl-U: Update selected item(s)/path(s)

     Playlist Shortcuts:
     Enter/Space: Add selected playlist(s)
     Delete: Remove selected playlist(s)
     Ctrl-D: Add selected playlist(s)
     Ctrl-R: Replace with selected playlist(s)
     Ctrl-Shift-D: Add selected playlist(s) and play
     Ctrl-Shift-R: Replace with selected playlist(s) and play

     Stream Shortcuts:
     Enter/Space: Add selected stream(s)
     Delete: Remove selected stream(s)
     Ctrl-D: Add selected stream(s)
     Ctrl-R: Replace with selected stream(s)
     Ctrl-Shift-D: Add selected stream(s) and play
     Ctrl-Shift-R: Replace with selected stream(s) and play

     Info Shortcuts:
     Ctrl-T: Edit playing song's tags

multani-sonata-bf88fdc/website/download.html000066400000000000000000000100501500342040500213600ustar00rootroot00000000000000 Sonata Music Client for MPD - Download

Sonata

An elegant music client for MPD

Download

Sonata source code is available here:  sonata-1.6.2.1.tar.gz

     Archlinux: pacman -S sonata (James Rayner)
     Debian: Available in unstable (Michal Čihař)
     Fedora: yum install sonata (Luis Bazan)
     FreeBSD: In ports here (nivit)
     Frugalware: Package available here (Christian Hamar)
     Gentoo: Package is available in Portage (Andrej Kacian)
     OLPC: Bundle available here (Owen Williams)
     OpenBSD: In ports here (Vlad Glagolev)
     Pardus: Package available here (Gökmen Görgen)
     Slackware: Package available here (Wim Speekenbrink)
     Ubuntu: Package available here (João Pinto)

Sonata uses git for its development version control. You can clone the repository with:
     git clone git://github.com/multani/sonata
You can also browse the latest code on Github

Requirements

PyGTK 2.12 or newer
GTK+ 2.12 or newer
python-mpd 0.2 or newer
Python 2.5 or newer
MPD 0.12 or newer (possibly on another computer)
gnome-python-extras for enhanced system tray support (optional)
taglib and tagpy for editing metadata (optional)
dbus-python for mmkeys, single instance support (optional)
GCC (building only)
python-dev (on some distros; building only)

multani-sonata-bf88fdc/website/favicon.ico000066400000000000000000000102761500342040500210160ustar00rootroot00000000000000  ( @ /" m /|`y|}dp 6J5 vUμڭ{nF2 }fHm 0~zZ h 'gJ zgo ;p <n Pļy`lM sCx]y`tHzW ~~uOuS źV=vT z%~` #y9v4sIs E=, Q:{k~8( }tKr AdHѤuHaEY?0"/!i ,||j 1~xuPs N}r 8x~۹[AV=ļtN/! |q|rt.w9[Az|??multani-sonata-bf88fdc/website/images/000077500000000000000000000000001500342040500201345ustar00rootroot00000000000000multani-sonata-bf88fdc/website/images/logo.png000066400000000000000000000240651500342040500216110ustar00rootroot00000000000000PNG  IHDRxnTsRGBbKGD pHYs  tIME' ,tEXtCommentCreated with GIMPW IDATx}{p\y;޻O,A|/ QH%,[-MGr$ZlLc$3Mx'U#Kq#VG$ۡ%H֋ԃ$&@}sw@b6 v{q~44Ŀr y^_y5TR?DAW8z(2^ 6 4 ڻwoH&I4d23 C2.3E_'NLǟ7'|r@AK744.*kH۷oיLZ˲D$+|}===߿Ʈ3Y.㩩)g>sۧ?06"W@K)cT즛n≉gΜqA\@;XÃJ/=U*zJd@JAaӐ2MI%w]x<_}GyА5$>'?/~7L-b03_MLΔs3Ewbnޙ/z3r /Eebbf0{PmΘ!om{_zƾܹsC=t ܥL-WK_wyDS-JӯM>m`I )HHfScDK@5ŏ#ыh[_"wa)0A1y.v) 3>/7ZәM,ѣG''_~B69{~[ ſ/?zs޵ٖe& JثA$0XbrL5j (+7v 3TX*,?3?84r9l4޶mG?.Ĺ,:7oҗ===7QP#<g9CIF BBH! A 01 `jLT}=>5yADB )i!c0cS%̡SkBmZKFmRZ֭~bbLJ-Y\.'f}_;w~0dk85<{fJp<+i@BJ!LQvpq-"[k'3_T6$  aLgMJod3 #iӦ /ppbbyK}ݷ{tzGM#RHu'! S)|]L.0\#Y  &d!o _Fxə]Iڲ;UDDt+ɼSOP Ihi2t:+*1//tRXKg`!(ČHmX\%&5/7YK+> CF V"=TCg"IanܿNs(Zxӷ|#}rQqd5zV*~.=Yqp@mrʙSM|F.4`1$R7"BXrV!{z1b ,XߙJvGI祝G_==7VV<0Z[{ 6Wj aYcIRC' _ .jBJH3dۏ{ϾDԽ񾁁6RLdgggbÆ RF֬o}~8/،XHfKqUZRІ FOBV(Uf_D5IހAv##t"?AJhywiooR6#Sg(aXH'3/(asp#5R~7X]2kW\ц Xȴzelb]wmNPܰaCW23W<V4Us+ry\ 2ֲh'p]w8#L u *^Ѝb´٩*BMYKDJ, l&*츮:6OI@&]4"ܪt !Z ( nXA V Gf%LimWi :6:L͕_nYVgTDD2L&x{=a$IIn 8[:@!*sؔ$ 琔(pVötEE% !$ISs75i Wde2ò6!D(;w~z΁0 $duݠfqR1lMKc x/j])5j 4䅼3%;2,tttLRQٮSE,GHx\)p B&Baw_'R17 E)Sa%.'HL=^"Xrt:- hXDf&"PcrSsjЄ` f7MܾkX)]+ +Ҩ hVz!&!& N4+B$񸹀^@"c13PXI<%\&\FZ V3f?y\%P5 հ3 ݎl2>;cWw9`OFQTx-%zzjKI.Z .G-\b5. 6B +n]Ҍyֹ8H6 \rY0Jz\ŕPazPߑl | Np:ݸBIgCTtt{Q²E,t5#T-%UMa)Zs6dqݱ)q~Kap О rʀ%j?? RhI%*Xج[jdnY΍+ `Ggabo=JX2 {v{6;6sz u[u#(Am%h1\jΨ u&MNab)1|Tu:=.3j\y!OMZ q%D4I$j1Jr4| b֒Ȧ֛\RIGqvbLJ\3sX5GmV@F]*zIӲwR%\Y^)MہkfFDkcUܤ smj/9Aӌ5׆/5q1K. @4^:3< vepȥQ 6j  Tg'i.{0MyR!-;%"@'&Ɵ0f%$b&xW~}Z _ rPG[@A-@Np|PIp͑eѢ2XH@H@ icz5(nD_lY^KÉqE֐/P-ɞiwİ6O1F >,@ )AJrOzxuؽc+ $v x۲vd~+Q2LTQ2%}0WG"SR9DJPP€&XZ8?9? :;L ܚEwR.(ĵXK-տZ61Wj+o߼<:_ ~W `5@pa^q" AP>&_߼rǺ|s} *^ch]U8?xy*.~\r#H #́(H 3麬2A exvh@_g]?쏤0bzNhA~uڻDej = dadO$}%i"4Cy׍eB1c2o CQ d]+'ٯ́ p:~%B+JW*RbCU b{"$26u!q=gBJ[V>)S6#f'OM+iO,jKZxrhNUn8MK/*&XT5JՓpnt*?wdՌD]!V`փ#_*)DUzV\Xm⿑s(p*"6b*܀ lYE6?JadjʔrHpE ԷYA8~aTgO0ԩjRѴ| 4GˠP8TU,NR!dۉ+a[.3hc.^!J&1Ou]T]tI"nRUuQ .i:+CfAy\ ַDZ#Q04V%3`A#\.aKO?>9G &۝[. &D$"Rx ̸ajI/d*dSy*gUO+`Z%dmzC%ץ YrzoќAz@^E3InulՎډ5'c'<* pBAZ!F]it*O3z&LaD`Oo7_xޭ-~x]Xv]VSUVniAbqUbx2HT}^ @4e%YГcSط,D1% ՝SG'Q?IAF x +JEW EFY WLv}:GĤk|@.3*U :rwȦR[;LU˰}V_C`| ?~PaKW  &&k* =RWsu~UEAFo[;jLB'}́ULP=89M-$f/|gZ7ypk:TC EթbTl4t],a{bHƬ\i2nP>D( l`CC%xzfG+oug]*Te5D*T^~҇'PwBH2UT=;k{tzSg%&Dgp8svv(l2)UP 130 ؟՞p=!DXɱ)8#C`tEʱ?:IE YdB+/`N(5l{B g,lH$vmdhO&`\Clcb.yn /.cA)Ƶ1tfRkt L.M quqvX#V!=CD4PFr$fFR2vvޭkpnk}2xgH  ڂONpۦl'&F(̡@5py #IpfOT vS{ݏapHqtː߃=] ؽuoMJ͕1A *һ2s(+5Tۊ$>7?-go݊;woD&ouv;;zQei[]ĢݢsG(ز@~$i Pߓ˪6_J ԗ;7 f YJ06G^Oǻ@{ZJ  gj',ӭf.{?:5V?=,i>yf,p@XKiLI A5@cE/1YWIiiPM-߲.۹axbhwVǠE 7UM[PX2'툕5"]nC{ׯ*̌ج*e@ftVcA4xY5g]hTv(ܽvÚUX)Ʊi%>R7#c(6A!/}|ղҢ@F}bi2_{ Hc+`=8F0Tqc7)"ew/5A\S͂׼ (;}1/:{5H)<[(:<):5HlI_h6b GF~3i1ٜ(;55J&AʥLQ:;XY)wkVUJ^G@2 SBٶ=y^N%&<³c_dG>ϑNxSѡPpj_HpOUe. J]<7MT L[6|Ph8-nΌc{lcn( jEB8^>o-Ϯ=v\?}4ǯ3Ee5,iUK3Xyv_.#:Rf^T~饗bڗ >^o:S,GRJҙf `;:t#HKT(zui972H8i '\:a^:ϥI OByN̤m{nfffl||^HH{ѱB_yM.~VIzAv8TH-Ls|xudYe,o͡S#xcgqq뀤 2,0j\îEVap]~bfbk:M=â0tJ*wLӬI3۶&|kIHa#(8^?Tha)+x1ө1=`M&C MTP)W/ǁ3pl2 d+14B\*ߥQc'`Pd{={Ůk3Q^.>sG55H* Ǐٴi񎎎]:n=|:cJZ]YML>|_X7rb`cs3ȷB`1VϤӃLu680tug3jO`33yXؔv%˶׿^^ -[(~7n_d2ug;ۿ5'OJyJ&$+X՞L xDR{NJkczlF\x{ 2?1͌'Plٰnϻa do9Ks5I`V V.\$ nyl{œ/sʨk,rN_Lz[Vӕ{xWۗCmK}[%?tflU#&nF#\m)H ]!dni·0caAJSgkA\Qu]%BV$7ffP<CʵspEإ9ٍ 7Y?WGcl{[w\{W}Ӂ]Lz[*ZY|[nl&XLq>;t ،wj&l"`!@u'j'5j..K/S-)b^|B0I 47 WyiՆ%6vŎu]M:7؜YX đ#G׿ "Y`cE,įO}SwݻwFƧgc3XN])ݹBs\OT_3F!Vk ID,&:R ٞ0eWʒmI;Obb1r<~رoC?  H}x- /byq]Ū$NM$b~ AA!Țb8v}ѿy'ju.dkڵ{gG>º${A}^(y/fVsss|裏^ Ed @@ۃ>x߾}~7{he7:mO:u_'?mޥRHDhMqt,˲I!E-{y],O?O??_|qKѫjIosWW`2ܙL&י/yS,K񙙙|os=7]0 xYN{|[Nb͖euJ)Se ! c."bfV̻;L\>](N;rЃ>xdff&VGk:u*86/ŬԵ^fX,KR 0 0 rP(cǦ_~ .5#+8<=ʼԖ{ l5_W E@VЫuz]^h6]IENDB`multani-sonata-bf88fdc/website/images/sonata-queue.png000066400000000000000000001670001500342040500232550ustar00rootroot00000000000000PNG  IHDR=SsRGBbKGD pHYs+tIME 4i~tEXtCommentCreated with GIMPW IDATxw]Gy9嶽ݾժȶ, C)!ɗb K `C0Ÿ&jVھ{{=e]%۲-i%8o{^{Ϝs)yyF^{& qu׉|9%A R ā )HA R |KwΝ|^`+|4Owe"7ˣ?Rͅ|/c-|?߳b=Z/h.4Ǻ>xh< )j ny B|wBL@oy #=ߋ}RQ3>:hܻ/~8PW_WBCΝ~_z~vŎs<^j`jݽ78q8>{& )HXӢ#uՌG׵b.CbwoUu8Vs$ub;r3QG}?{ӀW&{)#,thD!݃h/ ޟgOyt*{~3pe!ImEzЧ|, R r)K+?=c8c<倀r!'Ht]GBC#p"D羟OyR =c-Z)}3[1瀀AYzWt@@@@@@;v2h"dP QD9 倀W /y-!򖷼%e_yE-4B4h=e 4B?|@Ը`d\@o8`ʎilsUL+)'EXHj2aBh<}Iz{{)K<ݛn}l@Z֤ܶ$m%M_qk<bpZG+=p4w靈sB1(k >() V-족!į7nEz@ DY#@hx_e 0O6Hţ65G48{Xcɭtxr>iŘ7o>_z y%JQVb"=Ik{T [dNk;c<a6&Ϲ 8_|'5 TpD4Z)쐍Su@{2\zkBRF )Bf͉ aU%@,5J=%*’6TX?8=&vehp~G\&Q(C ! ysJޝiL5M)kxSxDQ(Si7 L c%u|DcJMw[;RQwwpA듌9nbN^ǷrJc0&jXs>Ұd+>֭Csϼ *0O?NKY )-0#W^HO[6Â7z5B",Y@~d ]G یcxba)VmwBaqzr.ił]>M-gqO7EJmEOӤubϫ=t`-#֜vi߃>T^@K\ʥ2Pp8e5(Żx=w^?o}W 'ouhaHڬׯ{7h3BDS8JW,B\JB8 U.5u 4C{+8vv B.B @ ;fٲ׏SխaJiIi('J  ;7\*P.LUk/bxlBa¡0#(Aju|R֔ y"CIq L4#Lju Z{L]]qv؎! $ lPbd"iG?y5-(W-(6ȌY|I|0LI$ϛRN,kj.sg20MMMGTIn㴴0::J\~fXSƦ t|#ZP(ۯx<~.t;?05kt.Lg} bT~rm?{hiiR8ijn˯:*8#rK'mWcFΟe3<& >`~ŋ`C=t?fPǸo=|*dY|qRFa 4s-"uKK\启8F bx :i9d=ژ' |#IUhf|6 K -04!RոkŝWh=wRpT6;Zc\d]KRaB&HfM(z4WvHi3ZCs_[{y>xZ"@ LZdYD&Tq ch($ZM-X1uHE+1Il.ͩ$^MKĠ`8R)(- 6KWIqèXT 2__xoR.jM Z3y3N­)Fe7Њd*LkW JDmص7ngKlѥ)}+3Rgl t[6i&>񉏳xRDdP`^֭uۿ[:;{fLѿ!sj< ֚C);{Ey{Lh뱨=~30575O{W歛85>/'ַũ%ԄmuъjZpu?A߬񵏝[oܸ/{o2=B?zNB >~AGkWyעrjau\o=|\Mmzg3フ٩(Hòbոb<,i1oL>&bo)D3֞yX0>{=3ز'O2l 3.^>KY H-YlU)=I9EխaUԡM81@{aeE."j4DC๼X>_\1mlAs,D"f-Li!-PV!UkMT`з2CK.$`DCCсaYm8S?,Ƀpeߛ!˯~Y,˞:~O6峟;[(h-~o~ZF:=~@pE'& 9!Hgt mR.Z# h4:#WBP?KM󹖲aY]QwzL߆qD" Aͩ!_F."n4Z3'WuwzۭuH$@7{C|ÿ3?/gwm5XW֏]7->rW>54Z.$JbLI2j2RF oFr|eiS,qj5ܩ%=Ei5 )5XSg4f8Z@*>!%2dJjx9CB,bqPїȩ5-CL{&s*oÉ_xD1 {v h ,A sݮpμn.?mWZ+' ?w)~C뚷vy]׶O2t_?}yD@U=_+ej\|i)6@68q^#Ѱmi4?c&bu*!MLTdҥ|@f|/NJTbxd-OoGghht:Su}|}|ilaG0CQPgh` a *h4ʂ $r'Q.ݹjxb!'I53^C Y K!1M+V]CWCt.K(+X0k6KqS[x xG `RFR˱\`񇩍3/&a7bh9l]Vs0H`dm|CL_ .y 3>/ϯy$I/_O׻ czXYw ;zwd# nx۰c4lB4՘ϑ´ ar#TƹlOnSKF7BTddǮ Z `a2c} eA\ c,,3Lγ-Bbl葊>džM[yg2f' '2ؽu(CX l5ǭ(KOf98Fׅ_)<'e*4T[G#i]8xLc.f"W_g2W%]pXLa(Ggy9r~{ GnpNR`BZ[|n)kSH!(zw!lk%vr21]B*dj==v_1,lmDL#[+̙=CF1Ym,]6+gRdQS#C4FkkS}.y^6l8P@@3>aߣW#$cVC[%JףHJ!iJQVhLi5002}[v0,5W]Fxb)zM68ĕg1w^U_ɝG&X<'J/J5ҹ4]IJyly>rF{G cCn |(3̜9sJ#B 4 ,;A§.K_=lz1ZS8IFGBSJj0$- M\pe$[0MHKa@Ă a(ac)t馹sf=? XKeEV ɕ9)Hgs8C8la`Y&J}P5(2lGX mW1glihӴ1L!L9\,Ca;6 mI! CS5M. 嚘H>u{^zt!ah10% Xuմ ̐DϺ"%k o@{> Q.qT Qv}G虷 ^:Vx bm!F=d)%F vQRFd<"S&3ѺO兩ۥi,=9>cc#ĺ"ضbd})OY}@߱妘ӱD;+ X0 l0BT rJV< 4OJv{#HYD.;}% M,jXU=Ujl-3kO8ል<Q!aJ f0_7KUv ):9}#} Ph/@,`i7PdSI}Og|tqF<ߥT-S,)rJ488괠 .L71~ Wy9vs(\ҌTIkGT)׹D !̨%mvp ՊK]_H𥏡 \>!ؿOGE5!!#2lw _Gp&fdx!*jBL\Rqpr!>%'f㏁M[!s9*[&Fړ1v䪌t4b4̕`dƖV"7>4!8x 6<[A̶N58%chFR+WUJI\,.W_JZadhdzYx&(V_!<)rUf8FB 3Y((AR88 pJ0l%B &*Zulyr㎟MFYj-M2 ݭd]> sմdɊ&D?R_KM> (UVJBCc¦26(PH2H. /&,1X{h 6JWxw/B3NX(޳QJSq}F2 Ca imD, >Z*(#35>oaEMv THdbo+[qbf-[2A\,k$fSu@@@@qHp % D(R&hE%YaExf:JjRpʴ#v<9^ٗ+'bkXBcL8' Hk_{l|~N: i*j=/t+jI.KWsVgyKXrR רr֍i4F8*E9S&7YǷa×H * c!ԥ-!,0b6Blmw':8>a!L#dƐ!O<"B_-M2w|S*L)0SL1CzZ"boov K("%fq|G eJF2eEJ$(0<'A.qz.S !z7ikN"  ay& wסo}*sw#q 7m'py;hڲFcC#!ړ |놛M E$w5U]̙L&9k>p]ݝk!2M38iXI?B$׾g0YLI_w|+1s9Sx>A1$":a>@icjZWб|\uU\uUAEf>Zh BA7 3HWU"Qppɦ[Y{b +m3ZpN6eӶY Y)ӽv+@CC o%%ԝ{hޤ޶RVN떧xM*8 V+!薉iZ-r L'%k!J}!,)(. ѦvM!I.ie:LÆ Ts3F:іvp9MKj[k}`{o.y{,W( I) @"$`CZ&z0h\;_WmY \VoMBQд.S3Ϩ ! +'.vpXSxJK`* (RCz5ڮ9lXԨHڮ |6 ڭc$®}27iyqvk'ȮY۰d K'\9$ 42v-'?>:3l/a-8tL.ޘE.7JYJfWl.!WvAG砗ĭ3_HWJTR.z)ܪYDžS 6"+*u!WhӪts圅ܓD2{G-}7/,bOn)$:͗u⓫BP]26K[!Na8u'SXjg.mhm*C~pw^nKp:\Xػ;ݻٛI51)`ۮ\v$-}/ql: 3hM||?|bȀY2BA 'h@ G~n15MԑxoOe,xR⶛w̱9#gסL/W; lϽ&Nٱ_ŏR^{w">9}aCzk{-&O1C:jLƾJK<3q& hjd~Qv(Z:g@߬4>f\Ֆ|@V)0֌GoX ;…fyXKtxթ<8yɘ; \0`47\q fyD#}Rɭ_T=B8DY!7!B.a DX#a 4.-&H=D7HvGG L)ф,S'p`钐M т~BbK ]HBRRXR&q{!tS 7R!pG3FDAZĎ! hYHjGF#D ZG_O4ʕ+y>|Q $_a>\8zU*9\#͏w{ k$sew'}@}5>|7c8`*ţx6/~o#6ݯ\}F>9)`a6tK( 1b9n8RSSq~V^57\O4)ZXx5MC&~ vgݑ:q옟/3nv/nr),%HKLCV4ӘN_{^sXRhFB$Y% ucض; qh&XϞͮTN߅4R#^Mh6@C]ؕD݉\HMt=r"l,8S$!>R}{ LNmt.6xg߿=# dBPs4k֌#FTmu@ _PDa^.b, r).̣(tAYLLLQtDGRV2A"56٫UV >|+W*AV(UvXA$!!}” =DxSuHn]Xl6W4A !.DvefTs QdqVԯ߀MM1K|jl#+8[814\C g+OIQK%16g$١"lIOz|Z*3Db !m85({ع3uٓO0RGq( 3' X9TzJ Brm+! D4"ccqDEGI\n7t1?u'[o.rxbXQOgI(Z_:tkn@.NoShABMj9 hphƸ$֭΢ o77 a>r34N' }DMdtoQRkr \K30CN#V veY`%Q 5\g}YP(( *&AlT;X/|9c00E$y,e!9viV  5"Ȗ -=E(߅d2!B:qMYylٝttA]$F7B@i$q H,9D:kۢزsiUa;vlfY+ ?)]7 ܑXh/-7'6>ŋv |aZԎěE~^r7;ZIG~$apfԭa';Z`MȀ${-1ؾLZ@HAՉ ԏs"G#kI/ < A1M<"@0 f8Ձibű2[HeM_*s65jۅ Ȱq]G3BxfGr+,ˠnwT^6oOSPPȞ=Yt"'/&0IL_O~X)̧$$ ( RGBhih޲% ,_ &BVh:K p!rzxkLahgٰb9{Y5"B O,4 tMh@h]NĔ恳 #̽פ!o8Qh"݉8{sUm'4b:_ i2l ӟV~Ȼe"9ўk-cyrQye j` ݠ|_F0lԋ:NHM+mQWbG,Ȯwִ?i2t`'C <~ey{imƦ>ZpÂ`o\<u~^W=BQMTřRŞ$xr38sXq]؛ډqt hܒ"^z[A,6.Ş? K sVB`AʥIm76kQ?mHݑFNڜ0(*614C,DtnfM|HKKH&؃B`7t4$BDAZ;RZM L s Fԉte>+ʙГo#e2v2sJ+X)S9( CqO.>&V~}j'?Ur&cWØܪnruܿ+2$Q>o˥9\WkFȥ8\rsSF#UuPc|A J z6F38dX>w_G;=2zuMQV}iv1-U *vȁQTPl +3{` .FƎxR=BQMT- ѬٰACoSJ&'{n6y9Om6^/ݻunݗ_&1 DYlE:Ɏ+-&>-OIq˦~ekWåtaj&e'w3}IghH֯Y6!5ł[I i_F ~/Aa5B^m`:]vj4h@mطB-;v_ pP(S<֭ L3Y*!IVf&AU. qH MȐKd[xMr {o&H$ժI:l,ZKjAV)XEdD)!wo1Q.\; 4,Sq[)QMzaݡ!^όDjPb<n=$2"wxZ ً9E) BqEY &^M3x?`),e  @ $Pf&_@Ϛ-$֫fjHa`&8xk(fDۢ4jԬ'{+ɍ\䑙 ʩѧOgl ?HHY.").܀D Ba#`"(((bϺlXڍcUDa ;6DCS¬P(c) &.Bx )އSOm{ vÆXVxP822RhBG:~;_k/EL@]9;)  -KUt<35!;;Y44 lvh)pCCigBJ$wBK.%EcVmKCJ0L"]ځM& + oe!~&dx╔!bu)#$2 h)%=)m %?/\ĶHUƵ"$ -0)^hNo=+m{⊒lK7_6cJO @jn#$pxwLM6aM'h R&m ڍhyv"ke6 DJ5KP(N6QTnBP<)+Q( * BDYP( eBP((+ BPP( eBP(J BPP( BBP(')U\\̶m۔u&M P(m۶Ѽysed֭\.e '//OBiӦ 8EYQu8 e Xb?jÖ-[*C(N~QP֩@@vee܆ SbdddPTT@tt ֧,P( )?xݻIIIn<{5k.z(++cELQs%7s7o)))֭(KuNuVRSS, FDD >+W0/+s],Z=.ujL9/^͛W_4Ϗ?ȼy0+Q3.AF̟?)%6 ݎ4|rm0M)?߲, R eO#NNLN6!#SL=nxT iZQThm}<Δ)Sx1ei<~ݻwO?cꪫh׮]惉Y)FݦmkCPkEyݛl4MCQAdd$ei]=f IDATL.`rIJC?0QugEdz|iLxlڃFcyݛD1`2x.awʎ1[2-!RaA)bmۤj5[scpZ,C]҅8cG!ѝ4aX^6Jr4>R=>ÞGB墢B\.v M\\K-kr<# AAdddْ?0zǾ&&<ҍĹm F'u.0[^y 6~ɃGc6m_R˾}*lllW{1OɆ㍧`K)Ov3+,2;roG+țy{m.wK`7)l1/wҤ# _XA,{d?v˷wLm;#Vi9c~N 32:Az_UġC˖3sһwJyUghzj ԬEgrˉGx}bGe=.=':{gޝm=όuwڄ;[?Qyӆ ſBrP ""]ʖD$ &xT\b i_(G7%v85AR+ ynPf?5kRRRR-^`5OF'_1W&fgv>!K"D}} {^ta1 |y_A7V*>v@huqWKۮ֚'˚ɜک+d=ߵ^˧~zرCc$Nʟm|pa&6`]̟$/oX9o/̬7gؽ};ma_rOqj'PWrtt >Lcbb\qU|4Ct]w>c;!())! ]c%޲&pV:|4KsNbsjՐҪ6ZEiiiBxwqq1QQQn4MR^) Qߟ0|ﱺlPkD^zdeeѠAj%/'֭[sk.R~Fɍ n^s8ikܙ|hxhK본U~|ٿi4oNC_˟ɬO&pհ?ʎ14h}l9իW̘bbb:@ /uݫf';ҐtaHK|O=/o*ѮUj __wݵf#m{or{IcڜR;FO;Ew*o߾B#82}_vm*ao_;mKE\<&囏ߥ]=v,V(|JS/o8N à/'mR)--0l4Jne_y]PapL~I^.""!.Tv[.ې˫nawy`dnHk=mxczzj`P(T& U n^=Cox[G,Axx[t`GԽK7*&&TOdP{qVm&0S+} m=7P1cVƏiSNp}*ٳ˼GC>dol hT"yqo1 !}cBoA1B7ԲUVѾ} O3m۶s3,P(㡰WW\\LӦMYn-Y_kUVѩSri"78֭[%**ateZjŦMhժ1u$F3l8˟ngŊicNG=pw/kOo*c=Ƙ1c`٘0a>_+{v[.?30W nѭQw`QT޽{ˆsrr֭al۶MI0HNN&99YYBa=_(1/|Ω_2\t!)(+ΝR>}ai_LP( eBP(K*#((۝ZJAqBR~ ٳ B8T:鈞%\,P( E5r$O6m,P( E5g{;咒eIBP(3jBP(J BPa"##5Q( ):+OYP(8q֭2BPEyq Ea/W+{3);~wϭHnx7vW[n)Y+{ҋyq/n!UF9Ǿ%o0<8l^KxᑼY ,e/O:u7~gI◷Vr Uܔznݺ-T(>f {վZ0볗w|lL.{ڪ6Fċ3UI[n\w4O֭gbk ƪ"k$/dşУ{Z92\ܳ_w ~\nXCӻwN~71yQ8E;o+GțSC4+P(F?)^x>g&iChLxwAzSy[ nsAIOӯ\z@&u~He8Vc˥E%cˊm4)))<ݾ'lGJJJzyk `(csKC7V;>%|?ϝ[v0ꥏ7ǟbR'tߡܹsL{F=NAۙχ#Pdž>Laop[dK*#rC#l37^)ك_cz0OYY%].?J8"gn+aDHI+&?3*uM95n&!>H/&0?B4W6 2{7prL}30k=?ѱyzd1=.}yFQ؀hl1>Kv^N70޶<:dkz*7 5K6S0V]W nSc'7wWe 8GZgKC'wdf>AKwvF1}H囘>%)vO+JHQP`֗P( 8Oz7 9ߴwP/ j<6[=UgY'rRB1B7ԲUV%\BӦM"J7 ye/oذΝ;hSu BCRm۶1{lh߾}f͚1bĈ%7H+ BP3jMBP((+ BESN[( ꇔGP( SV( B%K(+) BQ $$$5QܹBP(mێx\ _+ BqDYP( % BP((+ BDYqB PPS^-Kk>/|Q7&E"`̶mcB4TqǔKYS6Q(nͰQ?1C]_qR; O:˚qIm:g㚼? !!ap 8⬶=n֪0j:nPZWDQuT^VE2ʆ$'zޯW^/yιs>ksg1wkT4U5w+uŔnlaS5誦@D1sfAMfΨ=^,@fz[ce2m0U.! S_.#+/ ^z[1g5] S}GV!Kܿ=bn{姻S֓x|;owQx:6NAW_ݤhSZLՋst"bkʂg QCu=>RK01v>>Voeg~eJ `W>Nab WXBTr@њOdd$Rtt4U66b@j"R2۔.~Jɦ U;ucOp^BǑ㘝$Vt*>?Hty35!3I%w@Y_B؟nTVf\\1mR/o\~]UOM@]lZK^xVG 9G@7V GX{Q @.> Q!]E/jZe]Zs,`MVZf~,;EeMJ u"r%]^EH$,DGGShh(EFFj]$˩%JK1;jM֎P1DDԡq-05LJ~TRo[+i:@RgAX&uA: K YOjʊxZB"j5ӗЙ2,k_M*~?>*akTRSieHQ(օB1ߠs Q!]E2m&$jDGb3d6.VzsG~BȾdMyڍdjbJ՛]L^ݤ<ȩpr3 nrd\7YMȾWU{2[DDZB(TR+]Y#^gVuBeGҘ~5kiܤ\qT_P4<Hʷzu)/P ՕouQGg,)mp *ْАc:+" (.'TZRן)9) [YFcjM46O4 , []{[3\>ɨz "uJ+W_WX`lw 1=Ri:^1ڤȡZϴ+]=AJ rTU<Ƹ] gcH}Fy>uf4E{]aP#x 3`#嚏IE~rq#9=bj|ZR2;f~WZM%Ws2qk=c(4})u:vЩ";e}uYH>-Zҁ: L7 *S~~4jJu[r)mRg%FQF22J2M$zxW{Suuo;XHdB\;uXZRg٫A fBIq-}1ȃ$&&d#wйԜ2D"ٹxE+4v"\N!!!$+W )) z'/oaܽ{QQQdhѢ rыaa a20 0a20 0act0 Naa8)3 0 Iaa8)3 0 IyJ/-a?LRV _[mSj[>>]a߰zCSiA 4O*K<`twb+>:2@nCZOYlēopyG0zm |"WX[NhԦ7\N{5zWw4/A=|Ze{%φr鈉0tMݔ} ?X1}?)|SzXkm1Z1`' ,L֗=)Hٟ1ҪT\\o% ati>/ڒyyxt&|`R^&&UK_^OKKCjlN6X>=ĸhyɝv2սI94*| QmDn0X̼Z.o-Zkh'EWf%Z bx/aM7TjEYSqO>7$Fty2g2'Srt (XVĭ%n.l[0XWY%7c`䮝Vf[~nXqwiI>v !s2n@HfltTKc0/fL~=anj 0-$̱"wBu}7/,FuѠHl7 7A>Y0CceT7ab"9̪5yRPu  ǺC!Ȋ4N3 `f JbX:K־yW ]RڳB T(RpfgX5Q{a=cqb` 3?bRnY]K6_~1 ꓁1i/}FB!XYL^M6Bu_BlIe^ufMCAbcWYdɆ`C0̋ o NJ|E@$Vʞyr`<#$?/"FtzFFq IDATT*;:_QkK=) Uf!;#Ѧ9<3r Attʕ+HJJB^X ;)49pvFj,QX`BvBC~2U #ƥ(`-PQ"Eau8ݥ)Nє3N%'DKfieE~oSܹ:}/:.NS닷YmNɢʄdN&ޮ8 p*&Ch Ej8ZB ŋ? Ŋ _ n&6ɶv_D\6nz]R)X1,Ql]_7OpwsaqmRT魫( QQQdhѢ r)|@ض֪?AԖr'd==˱.,OY W.{q?1 ~p1TzXWJ_ [< 1l^0`mly-.OYսדWǂ)cʏ08~>ff5sU @_jʞ(հD+FUXlS1ժDw5Lpy<P!]Ð abqP  4]l>"~yJ* їt^/dm^7(3 $y81`rbRA{++B~gONm #QAmp{v]w_8=Fvi#' 6=t06n8^|ITOVoGG],v꠩p?EZ2͊QܺU~'|4l {iPt()1mT3Obڦ_$77l<2LDU~v{L6T,<|; @oߊ>ʯ/kZ׽r@њOdd$Rtt4U6,h"r¡Gkt*qT.9Ʊ5ԚdD"skH~>ٚS=Nht-;}$⏌&Zpl N>F[%3m՟%gk0hyٓH$XVčs;ɱfS >ټ?|H 9ѡ8M?f3hBg}P:QX{urJ{*,80Ɛx1$Nb_e-{(C=Zr d>ʠyF|WT{^.Yo2;s2r ^b"o#?o %/l)7u7DD?xXlUj5`"RH$KZRϹ=ɵ͒A,S|PZ^HZ'IuRS+kvvu)kncFaoRvT)rQTpiŤP Qd^,K{Cwee8&J!_8ԴhnG{,O!Nߖq!l4xu$9x֔;Jt-3ckCE(Nb_Ťo`R&"V%y[WzAK>Z@鷤JQdW]zg=E̹GNt+hmI/j⿍hyyž) [AW"VHW!d){?CmaJ[.=$ecvPypS'0/K%7T()=a9 ZI"[tU$)@n]i;TRʽ˴h[uږId'J_Hi7pU_Jdy lpr ב=9)5d-?ɥ )pd(L)KMB/Tu|ܙ:_Q~E򔾡Q%H^/޹O6nbZ4lj-!dҮ%ȶ8э\ Ov$vA_ԤtCW嫲&N&5$6g+WtU$)nv#)mIs;-([%^)|,7B u.u7's[l(ȺIﵣjP%-~3 c I(^J9N~>uI"inFol_EL&[ٷy n3Æf lTFRr Att+W )) z'?_9Vg0 a,wETTd2Zh)\.ob6"b. aWS6SwURa*)3 0 'eaa8)3 0 'eaatEt0 Naa8)3 0 Iaa8)3 0 IaJGN.k 7W7{y9j[~ q?OU 7@Lhp.W*)l.7Lox CѪrg;g \M-a hl m0Գ0t6E_LJt핖Vљ Ϧu_B_kO©v3L 2>E`847$Xg^_Gx~ހպHl7 7ΝB좯ΐ벓¯]C9x/^Jۥ67 žP]qK;Q} s2lXZ< ŷ>Y0Cceܜ2>.%܋@o3>̫yt7wBAƹ¼>0dg$T3Ǚya.텹a‰<<\=}-4@"gv|UZFXŘx8k̏T[Vת8p |q?>d`̀uZKsPiW"`!&& p`]e?dAgvlřcq|{X9l:?Nzޮyt(%$!5tƩpeCl5D_C-mn}:!]j.xo!yi1h060RsTqOOl3͠ac!hD$)$$њ+W )) zZeQ wS`i"sԔ8l:G`zfn.z X+D @hG/dm:ESޮ8 73Z#Rc4 W3-a{fNcp&*K%TT E|HeZ;:yhU_挔Dbl[/"G7{o!3D3N%Cffu~"d5C_%I(˯Sqp7 Y([|Tn.Vp 9ozT2`Mj?~<^/xm3Y9 mk@2GA\B}ռgb9v݅]1Aju%z/' 59D/~N Jq߱8b\ {'_"-ߋ條->~i> k>^ CdVRp*>Y] xb.a9|y"*Lv1fB׉ bH!47 žy4$U"L#cqqhk'`njVC#7g7>ڢI_O^ # z%AQBb.+Ԕ=Qaec:WpdV%a҆SLD5 Im 7qXX҅!o4\AJEu6z;lOyL cPCq3 N܃ mR}}B={o:[tz3EMW7ցFoLJ?CGŏh_viץ'nsc[!9#kOT_)jh`bjY5C_Ghn}|;QQSI(ɯ;5<ٸas jUǨX31x~dεdSGjr*2üvpn ^b7 )a^R"NuZ`; hIa^"50Bw_3 0 'eaa8)3 0 'eaatE/0 E)c;eapRfaN 0 pRfaNH?O03JA@4#a7eFR$|bB_\h2z`{]aڠVu/rPttIMP+r(G,zEnqrRc/*P?+PPO5IDd֐W9Y;գٻ `t-;}$⏌&Z|Kfb3۪?Kֺ`8v'H+/w27cͦ4cIu/C)m=L4%+\6/ׄK_;d"5Ȏ&V.xFe-{(C=Zr d>ʠq%Aաc+Z֦V($kGFk:)kVcUOPn=i7ɩR"" nDso((vv'3٪T_"RH$k%]ܞfI 8K*G& wNn4zqut_E$e]z\ZޜP_Ɣ!o8/Ip n..\$ '!#)K`iG(Om;KLU^|ve&];VIʢvvM 떔 LBs/P\Y.̚>[VоB95ۯOR.y|]QBؤ<c6fv&eHR1!,|DbR~hohY5 T-+.c<&0vZfAv.; vۈh[;7h -z/~E\hoN)|(dOȿtԒj5nGb_7|7Z{Ĕ\궤9ߝ.uZhl^J9N~>uI"inF_EL&[ԆHf[j(-.K"yLH"\N!!!ּ}$%%W^w:* հZS׼jxʃ0wETTd2Zh)\.)yUD* |A,a2 0̿50 pRfa20 pRfaFz_JOOg+1 0 a20 0a20 0aT}̍A@psuC~Ԫ?n7񄳣cS~J\To\-xVY;`UshTZ0n.FM svAbQ*Ɩ˩UھAvðc\ٽ=[ׇ;z$ӟ  /a3؟'`X>diiieojQk}m-FB3;>êr{#bLU? Ch< X)]BsP gj)ƇA jC߳1($zqdE{FNV~a453enPMy[en:l aGRz; u=b_ͰcUM]?drQ!z Mkl]8 {Vؓ?R:n&X잆n5ؼg|jZ]GgkV.}[׶8=鍱ßG_MôR=S0("lauXV c,X=s|z|_tuC{)mXBsP ᰏ.N%nsc[Ơ>u}xg4^Ys-fNzU]uZ`orhsX kWucQQ _ϔF20K 053eѷ wr˽6sBfǔMTeHy20 pRfa20 pRfaFz_rpp`+1 0P;Sfa*'ea0 0 'ea0"?-yIY/ʜhfhy4*GbY\mq/W7U1pqCth6CGC6}~J2= iksH,mѨmo2OP1DF5`n*g+LNEqc"6GÎXjScH̬PM_3(I'&Ņ&s9MΣ:"|/kZוY6w{49 ʢ%%it{Q 1*Lwd>/GgAo(i?wTq̓W<#`uvKާyo`ZUƟ瑕oG;a;+8w4r9h'22BCC)::*_CDD9dУTGjIk2ʥ#'u8uZӞlBkH$";4X}hW9Y;գٻFײG≈(h5 ǵcԿU]2QVXrƑ=DeE:Zyk6N~x{Yt5jYH{KWN'Z󉈨 :HlϬI)׸H_ ُ'ΆP4KSHų?Hs]VBumFf;m{Y۞K6~ƛaK_^O5_uMB/TW\~N)֋LD~LX4_4~DbN ʊh H r9IFlBY*"Mko mJ rriDp1,k ;GEw7|vBjM j fNeAϦ:S%Z>[Vv^*Ju4X2$)Hr`tM,,<@MtkC'퍷HHf5HYqyCD4>:]~TQX{urJ{*,m!ϡஂ[Ԅ2%ef؛PZL&+.Y gz{h=\:}ٸ2h%Aաc+ާK5zl.W@2;s2r ^b >)нu|BznSDDԉPQ jNfbѳU֠d(JI"X.iJ=$6KJDLy2/L$RT%dVVޥ:m艟SZU~OfB*?7yMPۆXSdJ6}(YGg#ʈ_ITh\JpjK;Lo@RV  7j$t$BuK%&,ۮeP,zˬ/oDjҍgm?UOz$ݵ9neTXh;qk;ٺԔ517)@E .62RCDiHBy,y tGKWE&U+3J-Զýkѻ璕0""lE_nnOG^q)MixJ>?;})wZf~oJOR}vqY}o_~!BsP ս LDDي$oJS>0(u@Q ѹ=])v>2jKO*4ZBk^{^eg6&5v";[+YҀϟAֶ0-21E{IY<u_vr r%K*ߞUJWw̭\tOylNbK1-Tѓr%d6f՗W5d-?ɥ )pduڮ:d%mC~9Os H̥rR~?ݺw(W{iطJoI(괎;SQRmpg\$Ot٢U(u/ w@Ǔ $! ;v-G5ƽI oS275>,#aC3VeA̠2z\I';sX;Ӡ/vVjRN:JZ!XBuZ+UYoSRHͳ͋\*5ϓMͩnqU!([mYdbZn?TԄ"S=.=S.b,ɬ^;fiJ5[/!4Ģ]nB=[7 k31I,I{_ sk̙Pko7Kݖ4ӥ$BuZ/z'?$4\ׇj^7u/"&[tQ[Z'>ͿSt5{g(zRH.SHH5od_rIIIի<==10$A6 =a5l T:wETTd2Zh)\.ob^OD"\迓20US6ZK;Naa8)3 0 Iaa8)3 0 /zaw 0 IaaN 0 IaaNT*1p3`VG-m*e|Jl:d\<,"L{C3fW_'g}ؿ1%L|71>kk bR Apeoâ8eԥFc/ƒ,n%h| c,0",r?u١)&}ems瞙D V^Jc]ՃD%,j9AL{Glz~%n^r|g# I њ~NmI=oPE6u4*0!-=pcY|\rb-D 0XnT[f듙tg_ETM޵ O_~ĬW)H$bMh-c]hnҴ& p1ZknZ4u67x-`tk:hnۄbyjΎX*k)xI,"~5̋qRDDD BXpYV2ݳSY7ѤmiScS43m.r9r)DҤvV#nur/'")!D/~N `9#C3: cж<ʼnu3}ƃV.Kl* ٩W0Zu'ܙ?^d*G"EZzq3c3T!|gZ~Rp:6A7da&4n ,:J CBsеoh^;qї1w쿑,:}iB80KB2#b4y~?|[J$ c;apg#|uIdc{"[+a3`jӹXeM]fWmT9*Y /ZX8A|bt5MۉCfZG(qxY igK00kEWű埡oc?&olrvk VŒcNJ%֒Apb;XӢbv&Vi- IDATl;s{åj#e +նܳf{&s%LoMaߴ ޹.h7t%&[je$xu G'sqc;Rؐ0Xt+~>u+]Y-f$WrDEƘ9بӧۇVʟТzEkvݶ-n"lFc hs2$t ig3GLIelo1xʿ,ߒ2H篇K_ ;7GѦ&qVNcWϔc12c1A1cc1ʌ1cqE c1V~Rf1 ʌ1ecqPf18(DD OGk r1#ۦMQ/2^gwm7XAG?T)+=V g+gDJl ;Pg#J|-H~XJ*❼H/nM\`jl &:!]ltEj\>-jU rF\yב5[a텲/-k8Afb* pcvYyb'bHzu.S  <-B1 '6l=6óp!ӡ„!;K ~"|}YcvZm/폞oS|8z))8: ''&sϳ0C =bkȭh3.Nl6/h3&l8gqx,OyCQSg`Ϭutr2^L9/7dS'[K KL#$HsM?Fs'lmJh{z@ˑX""=K*RxΕp>nTL&Tt,!M$/d$nscLjBRT|wJtYb%vĔڶYdќXT3T'w撥|`_hD.ޓf7k 7' 4s_7՚&_Iٖxu Y)4j$`ߚ&^h͍dQcejM_]O=f71$zi̓L$W;-G$F}?+ JS(NkVKrZ53Vt>Ik.  l%5TN%#&mܒFl=OL:IE.'s'hE=tRN@>KPJEf>IWfeܒ\MS?SZV׆-9 imyM?RS?iVۮe}儴p/RJEQCܾv gN9d$_qS*wjlN[>/8تwZ{MIDDCE?l$3@=&q"|3/&"EizTX=H" ȩN$oോA&LunnHfs|4C|Uiڞ|GOCWu3TVa%f((+DvPPA+<9}/}ꔙ#~pP.DdPoBcH(M;[=Tp\՞t&6Uҗ?dIǔj_g)i߲>TSQ`jnklf\|uA낗bZvNί0XPȉ&uVb,b&Ԕǽ(0(?9 $mzF^ݗpU{;қv: _"9rgҵd:/~BcD*Js3r ._O@` 7CcH_Z+2()HLN/j D!;tQZwr CBTf6:9kK7Y]wUV́~ddNl̘\~ḨkBճKQzv:#XAg9*u7IMTkZ9S)Y=NCjqQӝ{ek`/X{^~d؆^,u6ݽ>[߁BcM3u4TY/(bKHLY:=PJEwy/ 71$||RU9MV%K_޸ !}K*ВN$l`0;L4%/C*}Q루A9;ou 256?[i:$HƵ,?XwM)©1=$WBFk9SY:P/wjPN{t7B24.bm'Du*ڒHFhV_E*mԛߣ9U07&J i%t;a#cs\9M`/X{ rntj!'TFrF4}oE:#wFU,ڙ\mAMIfdLUҌg z^b{zTdMƦEÅ)͠,Q(HW\Gйsgxxx10c% ** prrf' F/ccqPf1ec2c18(3ce?%cc1ʌ1cqPf1ecFo}ʈF@fp;YT:UF4jĽLvu?VkGxm'J|ǎEجQGz,R#o~V.GRMC:pl=+ѩIu8]Xk&-zb^bw#(07[ONNFrrrig'5'!A4&ռ:cjXcm-]CP̸:3PoH_ Wo#Sxc"&>gwůye ^/E?p[tÐU1XJ6y, K^@Hlf Xo)| 2zA9/^i*Bg,Gb֗>0ϗ_#6"H?o͟0]E ;;;T phjVrgC;@f0dr8fS'=#}NNx`J)Hx4{;;mynZkZ!po*L~aѽLa^"^q׿WhTwW;rY(sXisv}4#3] %{ĕYp%j?3B`%ScxTqvBƝd[[[9͠XZpVl;4e|#cDP((((W\Gйsgi=5sOEJVEkVwan$AĢ=<[ T[y"uLaCA|Zy/YjDb NJag2Q+UٶpxK>2N]^r|g# I њ~NmI=oPE6u4*0ƒ7Կۧo{A"Tg1PnQb琱fzѾƵе/5=N?HܜڽvM 3򷵵E{G ǚn%kU?MFL^+xLv473TEʤ]Xԫ.=ZŹŮRDDD BQ'3ܣGib-égYg nR*xME'RڍI0F 0`^܋ODRB$t_ʝ@ "rFÙg0?tdwAj'my,݋f5, ]v}}[1O?£菁rR9C׋kG74/#qї1w쿑,:}iB80KJr2Ʀho>2^5A/-my} {ߍSGʓqe s#=; b7uE[w @e_i=Sªd9/lhl2`h1N"S_׌F-L AFw,y?|.G#S2:+ Vaոt ^j琱bz{-]BiװŨHWl`vN7Ӳ 3BZ`H˞8[yledpi0wVY[$'8n,\h:٘aƞVgJ t~7Trre?rvk VŒcNJŪkUXdu 5T;{ 03+a~Kl UN΍ wpA+1qR+KK61VJrg9MܿB˛-A'Im,i&+琱Ҽ^^ B׾P{6|t;ڋQ)elo18ʿ,ߒ2K[, F;ǡ}su⍶1м:\4)6Gwɮd\荌L1cgʌ1+c1ʌ1cqPf1ec3'lllc,2c1VqPf18(3c2c1A1Ƙ>Aퟠ¤J f]uF4*v ;Pg#J|}@U2=asez?=SJys5[a2ō?~Zֵ]!3@ݰ'÷M-V_DenD:n05D~Yre":M,csOle7~g/{lqe 9iRa_eɃ_f)Lp2q:XR/J*qq?uu "RgV]L:LP$uC?7~p $HŒ:u)Mڄ}OxofØS%BA(22Rk. HzSrib'#+ΔrCN6u4M9פct'lmJh{u\|Qa_*WWi FUDjBU}LtyHr.OF<7ΤF.dj,%JhwD%]ZWד^۞\pIY9娞QrVNh17!Z(".`_B:1[Ǘ̙<fjfԛ`HӲ)4m=ѣ9~PM"4n ƼPvIO3O21s/Hbd.jїRnЀ:4e7S^l(\e8tԤK%y9='3Ik.  '2Qp9).N~/*ȱъ_ \dYdV#:&]M~Φ~rKs5IS?SZV׆-9 imyM?RS?iV.CQrvNi3jghgwOM/>HY_,݅b'DDہz@zWk)U齏BZ8)C!dnST? W(O&t^ƼPvKa"Pcv?r*jї?JOTBżBDtvGT&VR#JU T2Zi-iʤ_DjAoj&Ei %ń/^.d"+5)7nHE`4SHtkuwI)6S[22ж<}DU'ѓ)U Uv}d蹨oϽIɝXɭiǣTMKRv[Zǎ#"SCȮbzL54uSy9SM:}WB(T_<ٿ?(?&1/̈dDy_3}.NixLPcC7V l$3@=&q9EZvNC4XPȉ&uVb,㋇TjJ_NC@)=@^W%E*8jM_df;~,.#ꔙW?uA9?DB*2s-+"\JD#yM!Gc)9N&k/D/5P߿|-thИח?(NJ DDi(R4gb"搝C :(ǔAC\tY/_DxşGqP.ɜz}ٟ1mTOi׬/gOteGdWwA~K%sTtn8oLY:=PJEwyzZ^@V΃hZu[Z?E̼E,jG ֧M3u4TY/(bǢA5:~]ZܤSè|)a/ִr#VS zw4ՏBʓ^lj$4t8PoQ*Gܜr-tht{jPí3T%֎:O,kZl}Sjsi$Ĵc:6'GTo^(1o~V.GRBqElɟsFPNNNFrrri)1}1Fa`;QͪaEl!fVr;PJgRaa_ |;ᑩ <1{Wot-qI uJ-L?s^\1^Ǚ9 QFP@ 4WKRsGdgg5aX;_@JplyƟ}?9zg$ S:e 5aog'-ϭ] жq-8;:^+nMtYiWaP 7wB+>]g*z]s2z}lAZ6 IDAT\3}Aծwfy NvjmF&056{}L }E'E3N-k#pR .`ΊM3. S"kj3ݯa :,\wvf;"2vLĊ cC-Rt,N䕓mNÐaa N m$)4erl8\:6.0*ͻ[վs5Twzk~p ݸ8\O(9P}"؟Ÿ_4>e ,EG[S}S("Q?A/B=47 ]Bi96 D3Bg&_֟C]Feg8VE~MFAb̳%8#.odH !22Rʕ+x:w OhoF_]6/Eo?yіY-y*<հA |>c-,5A"1RXSJXJ%԰sR(Xlz~%n./N>HYqWlh?JH'ςXt7]o: Uv h *^? H|ΞY:>ޭM0;^}_P}& p1rrwǵD7Bs;6ŎE9ڽvM ^򷵵E{G ǚnXLU ./W(Ƅ-bߠj%R/R899[ ?)_"d5K'j7&ôw/{q/>I }+w):gБ |t/N834ZtYb%B_9jN&h/ 9gc)L<+3qs6z9j7{ p(q/ MB0cSXLNNF\e o$C_ڲ i=[3qRb~(rQg`ʹT,]2- }CcPԷ6)v~SWYի U,Aˆ >OGoki^0fId2ѨYecI!c0ZY`"夌"/Bjd_}LHE~u6c1mm?Q}/T5l1*0?y?|.G#S2:+$4Ҋ3l`vN7Ӳ ^BZ`H˞8[JYaܿ1&fx4^|!/h/أhSI8+e]zUZK&[paYJ#lٞ \ [bSبb7vwn ]ZYŵbS~'^øbջ8:P j);bfwG{~?ȭRh-zCFƟPZqǢ̲tCϷ _gkOZoI%S\xcq3l98O'M*"-nFHLr2v0_x\-Cc\űw?:o{# +cM'ec2c18(3cc1lllc,2c1VqPf18(3c2c1A1cc1ʌ1cqPf1ec2c18(3cc1A1c1ʌ1ecqPf18(3cM26CTTc1rDDc1c17 c1^1ecqPf18(3cL_}6 c1VW..(wڕ{1+Er.c;2cx?.Fu_:At8T?n|i9.09 h{$|K6`1V|||r$?PS0` T[ 6/ـAE n+6oQ'1k 4ZXj1w,*( EYz;Flb L+ѧ' +??Ml԰6 i# LDr{'V/w*` Y nBGK2jO5ŶcW!AOǣ=q*Ҍʡq}מrڜi8ׯ_u}f3.݉;z֥?1^d]k^ 5M_ j>l,l0l/UXV|Ysfr[㽉c+6BrVpMdybL ËST}?ϗ7 }9_Ϝm90of s=^9^DcoP/Yǜ[ BO(A*I) ci/YkZg#)iwޭ;ܨ\5ӐWP|fu;"u WAyD:05@^t?#uZI%dQزҞj_#|:4oGh6޼Fv􆙑5|@9?cD03NwF/)k%cTlhX<$f,ٟ~p1џUA1sDx95ND S#D9z<1L,*IH:v"1 V14폴ēy]"}{mf#yQN`9.[D1Ƙ~ǏK4([JcPL*mD*G61``_$8IlMGFvN6: ΝDNn-sf剕6Ԧf[=Kv^u1vAfd/sc9,ulNZ9I|ߣ5<*di#,;^5DEE5gJJm[c0իw=fME4Mu"""i2ל:יt]97A}x]ip/T߾k2ר\ĉԳ*}M`""S暳0~#D"\GHٓH$=D"HI$D"e!oD#ӿmeIRo;oyo|4HZaH| 'M4hкu~Ŵ??X:|CZyɟ}zJ)u3ڍ;OeF&t޷[kZ4_z-xp7x][ zȵ^~eɓv燕ܚXŒCƍ)޷c-C~ԙ_o2lĠ߹Zs-55Tt]y&AõS7WS Wy}/|ӻ =7vY G*K>zmYem1}H gɣn\9ǥ7yHCH4n9-ZmTWƛ]|kWHsO PC{/׼s?oXs^VafpglXȹl FDIR nm%Wѩn93X sH񵜟ܵcՒGκԪMzZX%gEkyٷ~l-rtwhJDl>k+yq׷]GJ4%UG2#G^t߰l%M8 +  ~:r^W[u uܠ3Wzlu܈wn]p4] le}S '/4H[.{JNq־nkbQWkQ*_*>md۳%3}%%Q>=SP (>˨7,3u<_~^:٧}čkwAM:KC3d*3ve/6o^JBsݜ`Uf3{.!CG86\!בOG'^Je:Eim9ly#co.BUMWY-Mکk9o3wyݭ-_깔VW"~}_p- U+ƺ;&mXrƥ7*>c 3M>g=_1pT{a(li*G!&' eG6[sN.{*W0ou haiwe֤rUTq3LYԢ>W}etE>sՐ!qU jKܐ` EzͫTCrW_ﬦkgz?;F3x8ώrҲO)y> ]M9㶤(moy|heXu׻T٢*V}W%qnzvkzɎB9 /^Һ8>д'#ojZ韶|OG;='/h-qղ.Ms\*] -fѢ-EeDzqnڦP#.KW[Bf5%[ޯM?4UsRi6]e\n:mMfʲk ^աdG/o癷$G^QPQ;ߒ3ԽsJÒڎüzM,}7D@L9WTm%%=75߯sX:\{o9-a ˆwM^{N&!ɦ?(pEs[],0qV.n0'|PU߄ z}޾p82FO3W)p5[h o0{+ 8$p'J4߲Au5z>`ǚe|_챇t5]MNC&]pH lٹ?Z~ʲ*tݥL4-}!~lʲ>jUeo ϸS*ӦMkӦl{1&鷿gϾ3Ƀ(129k7ScS?d\JV~d2YmVfL&Ӫarqk [&Ʒu,u-{YA9zMD65q 2+I$eL_]>uLR$Dr}S?}{D".d1}M74DEE5g?c PSF^pea5j|BHLk~UQEaPhaZl6拊4^FẍHLk~դT0]=''GQՋ7n9!5j|BHLA6 [%DRaa!`t'"ʑD"inOnNi9 9oO"H$ M 20)"JٓH$IC:׈'H$D1&9%DG$H$IC=D "" "9S"H$ c){D"'H$){D"HٓH$DʞD"H$R$D"'H$=D"HI$D"eO"H$){D"HٓH$DʞD"HI$D"eO"H$){D"HٓH$DʞD"H$R$D"'H$=D"HI$D"eO"H$){D"'H$=D"HI$D"eO"H$){D"Wp&~7"Zl^#+0)!%PȦTosUM}G.{CDRc ]Ydt$^MvsY|LYI-r~KiH$gL?x~rZ%D=5/W~vsnP"uஐ.Q_},:OgRG~О 5 Oe\L/Q;9nRO7"Rd-ٍ4{Dvz)`@r3ëIJ-qmZ*ǾBΙamޫkA~FYF5i=ܷv />87r)SNݽ[j͉G=~5tRܫf2C8MY}:H"&eNYԨ?9zhg-Z˚]R 1AsM Z5ũQ!oo}y}?ߙ @z;N۔m|Y_rZF jڿ_1uy˹FKihg{SX3E}%jq1zlUq黇4)qjkLȪ՞!RWw<@PhS X0=;4^J霷>5LxI)Zg>:񴱵_}e?5,bˊʜrfԡmoo;g|ۻݦ>1p5Ǝ/ ?ѓqw6Yj񬚆v=`4nR^孻 9$0w {kX.ԡM<1fA[MIOuYzof4[Qa,4*䡗|?y~UQ/WY7#w2 xy }КR4Qa`āȓ{~YK꼑V;hLg.g, ه˯Xivqk4W֊&?MƯ_$"*=hd uUGr.8JOxolZ{t6[-EfyG66 k|+ubQmB.:ٹ&˕%{3KTz<(q+T{b]}N=u%df^P4J硄xUJ1kn/.jܑm2h;}m#֭W7sb e2L͚a9wV1 O|1bD@{og,fщ!Mxr^CM9>VW6u#~%u= 3_/@ZWlv&@Smn,]?8K=j`ȸ:ʪO]XGgypxOuv_i23o=UwlEvzĿ,<͝ZE+/U hkZ+c lgNp+O׋'ןH?:[6U} YQXW:u%v),5,++kx_m5k˹Ѩͻ=mzoJQv.^CΓv84Zŧk@$a-{EB;޲,E%km:Jz(\gnz^\_ 0}eb63zc{;iH҇Ǟ ?(*Gf3yr]١sRnk nkZN%ůi2Q(}x}IZeMBkK6rJ3* E?m~?*3ڣZWOߟCnWuyPBM}3h G.Sh1{qzrS 3f?[Y/*toi W\/7vPѡS75ʵ\U(d{V='}h P >G7yv32ՙSsN^xdQu{`yd9 22+).jbxl⻺NڥEYBкѹbpOɡgsD0kKC [-x?>jJ@Q@{۪5Q:m~˿PZ B?=7#ޘ!J뻛v%\'*=yIjKOy8hEY1 -$C&ܨ,.|hgg)v3ݿֻt@y5uޘ{cz%N]$az)n +@?H`pSq8{,ڕJj9OE={"kH#2^WO@]sٿ-H~y ev~E_@܄3N`['{MFfKwfN|m" bޮj/ h _=;:i?~Ĭ Iϵ3({]JHYr@.!7E3{gR] oгg=K<=!ݼe?9fsOMf@m1$iV]n%?:@N+Gѩ?̨fz3XkroU=ɞד+ Yd|{oԾ_QΏX|}i5M=?sQ}9JzMJ6Ŝk[iScKޫ&aw">~2| Itf)Nk^Q}H[O5.BOodyueJ߿T*Rsxk%ՀSN}dB\Z\`|7dHjǛ~4੶z: UfMJ o0ɕs Y)Z>AiӦE0fl6LL+ԼSӟX3[eHjs^D#އ?s@@ HAuBh@rCD$A85R2}Wd$IjY'r`DȀ"q@BzH`3@dhHe L}t!0$DP1 GF( 101oRD!(Hq*(3`F;*"1CiW7+k>?N^d-95$u^\eђ%Rjɉs@"$0"ԍQ'L:UA=y* L#CH\4L ]j8/D(SA΍0#@8qD 0Nh-e3B!2Ybb 7]84U+M9!Gd)W7;_\n!/܁ݫkM27U[0F"ߋkrz9"GR h\ e!rщĘNBߐpU-ё#}" pP @H}͜7H1(z%pTFģs3wѤ1z9"bܔ/?a.Cf:s}~~)Nwxz < kl(p# 9c 4 D@/hxbvk3˿Of.X)ө@l~y7hɄQ;; 8Rɻ 2Ƶu0+{F ⢒2%0qUSi0jkwxiœtǘf&L6>4cו}_ԷhAa]Cj 6՟~YLwRyᯬ\EtIߛgi=Us'/KeϛXWő;[TyYq1#O3:qu"1s3䓐3Øm'(Ɉr@$P  8` T" d@L HL !312DJ{(^F]n\IwQ, 7Dݐc84@\)f0&&BəWnݟ]CJ0иlݹonsX>û4 ԘJKaeۺ7#qoy%V}ťgr=<Ѣx.{VT| gekdQG*-+sHw[BKC;қX)pޥ76Οgj&݁\+pQiBfPXK@b{W ?obUoibi.=ɈEl1IhE #1d w )(FBM+FsI,E97q΍HbEup7>I=Ia&=<&!GN&2( dPU #ppᵉy$&r.V]#䄢e]F(^@Nt\NĞ&d ^9~}AUM;S+.r W}+nRn2e-Ҩ<̼&Lnd2Ǒg*ʽZlZȥi]+7Uyظ"~^1UnZ{4uK \oTUoY*,% :\=s?&V]M,6ck6HoRdR]ozK#$b1@FO(f#R(0Z<\yDao 6 U X)qj`hRd:RO˝]q# -|k!cޖOf,$ ( b6bk2bm<>:n✇B-Շ0oelYT|wLݱ{_:z`xlF;~Ʀf졍z#NxW4^ը޻6]0nߥ5a7 b.=yǾKj(fê f<)^83&w7F3p 3֝R +*W;y,m4z68Пyz㮘~Z]1oO\7ήNcyu8 h0f 1Bİ|6)|$KC31FVs K sʑ\@eErI/ XVqu"ryHso\;oOtzb Lwnj) BHDu Utlٲ.FG" g_Xe'j\H$R$u"{LQ*nTl1{[* hj (eeN]TviVIIAlbjRp"fG.7x<Ŭ0fy99%\y:ThYm&(+ X)T Hyą/jȻ א@&S%_;;]B+ yem4|>X*֧dLO$䚕=@ڥ=t|U=Ĺ{a-VFڲkŷ=amIaڶ*.rDDEݮQNYYNnN?Ѻ}kȍk7s l޵s22uӧO[%L3dq.l-=Od< 3J4f2Qc̻{b5Bss%ŭ۶ mYPP`=C#ed%)сyn{H?X;w~޷65<2ƱCK KN)H!733d*"b{ Ŭ7q@ĉ*Len03Jɮ(Jn{t D/Dڎy2].hb keN%tG2GI}*+DdJ@Px)٣iPռݟ~O}W,:9ϛ7*^pџ>)&KLӎwp.3LF z ȢE֬M=+Mҳ6< 9TU5'+k{Ǘ,XأGwOKN=G:,gN?v6\#"PXHP`V'5;[PBOg\?nS]GQ¢@{@|dXl{n鱅¹|=hࠄ}Gw%b )-R,6fqj 21E9K5 w17NI䦷pf啸2U1a񙢂X=1Լ~E:4N*̙3<7y wʱؿ<#kI {3v? &JGw^&bOz72ܡ ]Snw n]x׵L&]省sgOd'"}ݺI8`YmfKtHZLa\CYV9@ MӜz2Oܧ- eg?v\uř[&ĔyBڴv?_d kZTXHl[TpD$DDQM*s ,VDJ+fkLQt^qG!2270TAq3Me.UeEnE9>"ʋKF1HDͭ9uf*LG` !cuW&'41Dq[#,}RMiܶc|4ν遧̞rѫ3+k|usEסO?yWZ7C=3dH(>9{on[[,!|V".(9!s_wo4{ƻ}&~9d2~ؕʈcqgΞ+<9q_j,ƶ3^Z]f}_}\oZ5\^Z3^6jrυƌpac;2C;ܘa1G&Oڴ~Q% -_.ڑe=Nݝ-[~{kdqCQ+|i@++_=j'a½: $~ߤq~Z/lꎻslpfi,I%u{ %ջ2ik:8qA5霈 6L;'6"NII纮s"4wN2[N,9{ʡs@1PŦ9CBݎb"S Bcq҈/b8So֤J0h7c@٤;J]]':q"{4\jŜ=Yxƻ/ihUb{bG>^S=1̦XBlί*:£oTY)7LJ٘jK38Y=It:wj/:$`X[XjH?T0a;ӟZ^m.< %(涧lK ܔSfF#2q8{puw;ciR^g]ϯ)%|3hTUf{OWj)n~Tj>3ON=gF`e\&+MxxE}yWiKtw[7f 20uֽ9.c#3^m2e \gnX;Ǥ;@^ͬ-\ lL})h< wl,9_nX\O$rϊߐ+K#*"C"h SAQN$ywE@N:k|)$#IE?{Eu}ιwf~mR b5*1(60Xbbo}R|W5*bAl$#XDH[`پk3s9 +M~?33;3;ߜ9{ gY| &A)D][x"ɂDV3Rb6xa۶q-13XkHbč dh"hDF˄HbYR!oϞO<=ŗ.|4oQKp"yTIfޙqZ} SݿO*m8ge@N׉cS_x)|( ]63G@'Ϭzs W:T>ɬpho_KNWiEth+*JqXX؊ f1۽H"WrgF_@bXDm y`-MMK֭|gG-ٸxa麚|CP7(H]t'SJe6![AA.ö=_K# +, [61ҋi/f¼@٤,Cּ 0Fwp4jB1gקsu>?w}<,'bN)7l9u褑+g>2cʑ\_Wnjc1 k?ru|\}C{gWGeuuhanGбnUuýǴ?uXZdi~WEC;g}mf0][vގ9郞tkǻuVQG3_K<~o:9[n/>:g:kgmq\L sx,%>mk|`Ӫz~K^yq~D^}nNÿB (AH"Dl7 o0yd'kE6hr]REE]{,HZc 0$_V,"QAn~>F +:`Iiy?/-ZfS442Za# (M1 1q!Rߠ.-uk G{7J{ /Iüi3eL睌=rzs9_w?Σ+?K`ow/mwɯOć__VQG_3mlY1_|fk>Of?tϖ#^zYvhQ;"\=b̠5= k^h'mj>~vP! $ff\H@rݲtH/WϴYbF"vA % Xf&$v\TP1˜9~Ùf.>lpIY6"3v]WChgƳUٳO=e&wqaL~}|8y/;\u]q0NpUR Dַ]0T ,`QYrdH?O6kaں$6.)%kAAň @$ IrH@D(Dºes.-9߾.br&`PZOtz1h#P  @۵,;R1dIk9D@ˡV mP 6sq^QqHi6aCsXfa+ ZD$q;PBEfOD,K:C:JоX]PtP GRR^cѱgmi0R/;aQFftQR^[Tƈ P"L6m\׼feqYP@{ȷ9kӯo߲g/dDh=Ũe02!hQ9XZM3y3᯿B`-BA+P@h ?}0#*AbE(,b@"'(S5>|mGKÏ%]!ݰf땭k]ļR&m!\ƶ<$@ bݫVaԊeݥŭyCXj_-B&Fh: "A PUT?X@ȥsj׮\& L,b1aa (klQ ڽw7q{ #Ea= @#B`7Zּj)Y,bV. d[MQܔq,ib@@ qQH -܋x(+e Uԣ A&j~e מl[9Z`}/Q׃C, ҞG ,lD-". EBD -ehU; "HZH?c}Ff\wMƪ _ޅ_"^YE00 /"M ZKGׯXlnty-pq|i-%eK@ĀyR!` kU!I"Uְm|ࢊPTi,u8o-VxP oj*C@ZWom{&a!@!AFA۳( 6@kXhNP)cEݞ^Tqֹ-^uˑ֕Oc'7n'|fw'x0WN&afS|s6p>޻rwOQp%S+b twCcQRLk- 1֮W$Է_79cT"__ 1!bPT GdaC-qn pm,X0a`ANkYx1m,XkI;QͪQfmbyn6{؉N[?S װhU֨9]Vz^xO7[.i/karoK~UW@58ۖ7oo ntLﱗj^L5GFm4n65e^?w\mo]|wmݼ'o}p ^ǟ9i‰C:)&uh~rmw?KW"4wo=$Vċu تʦgo-6^^_gw#vNWfU1_ާdw`Ԙ=`K,XuGyԐOCf7^{IS&LW~J\7ʫ+ʫʱExsqk??C'Jt7+yu RtA tDg:oLe. 1`Q LOxBA  %2 ӛl!ܸ~k/7GUĢm'unxmrh[p}}N'm}n:]Rvn{XGN}';vU"*N7g==QYOh7ԵfYW1vY.4<8WWY\y%'\tMݻlNs|t⦖eJyxѧߛ-kGpg(xʕ[^R{AkXf}rF9?v lВMVs:!ƍwι9|^YVyEξ;_&>~{%{=mĆ\0i?"b^YM!W9vxkxjC0a`Sw\珿#М<*庩c?u{L{2M:"8{~~f']e$nu{xJli1'+i+9䤝ȭ4xON=lˑo{PiErz|Y%rtl'g7,zǩVn;{K.|Y5o?:g͖4|Pܡ>GN:Te#'-0\)i^Wh2; 0^sc.33[ "k򹌗* )u&S:jM7444=ϦrykAE `ɘ@d(ҭAZ6YC+1T=C?t- ji} "V@!/@*]= 0gVXˎvrn{s\ w@_µ/Pmh0<]?*^u\|~_7܎'yfm']Tn ;*p9]٫fw\vE=51g[e]=pKo,X(!v~p{y#nj*>=m6TB!^[{8|+d @QZaen>FDBpH`eBXC$$`tJ%=df ҞS(= GyY\>Ig⮏_>;ebD5<1-4rGf\9rAёMm,aGnؙy{:h#tg^|iӪߺc[f,iwRS_thh;y#OLk~ۻ榻Y:rk~?ʏntD,W Ό[9?j)zbl>w>7e02Mtݥ3u<|9Ͽ[}~c,x9Y;k Ўjf_g3|w64Y$V?*s>GᕭϹ1~ <+ "$WABbhqC@`ӡ_nhcvt,PI[~[X -jTk¼#J< (DVb 1=Y< @M&d4D28Z@1dQ&ySV@ Xa*Bl0&TbABaf$BFH:)w)q)^\oAúGLnrt.hL8g0Ox\ӣ'p_{|Us=r%;ˡ.=}ﯼ0n8xtFV O}_|yG7fʺp;{DTҟsa߉:GW~l]]5j>rekȰ󛋶[W;߰.ve/5 ϕsq3ol$oOT &jowfÿq>:*6y/1o[X<8z5}.G;o,ݳȅ^رѠFˏɒT,qL_1ċ{#Jp1^|vX'$y1C^/{ƌ)~W\q}С4%qQ1L0R^Zk9\.s~Ïڰn}{?[$Hii[ޫa$fU " R]&' O!ì6 035V\oyH Q~Orj 7D;9߲7 k8sΦs(ޑXe@"̬Q,0"oc}]>.qݟ{ONJq޺{>r➽{{Ξ=SO]f~nɯ'OetwU뺮F^hjR)hEZ+]uw(hbI)U׬xq 146|v\u Ar]QnދBq2i TIux|2ҬtdyKr-J8ˊ!Ke&si6$r4#d_|OJ ా-@5ejlB$B,@PlUbM)/HB H4PURp& -s@ Jb~!C qQq |F'z_v/.٧Ђ&62=a'(V1YѬh& 9?Q!w.44E)Q\U_0 GA@$ &LX1"Qzss-m_ymSwu{U0D!Vx<"P)( D$4&Fh@Y6c$몲73# !Xˢ J ! Mt7AT-tv{*ӿShv =<ٳv2'BeAE",ݫm~h l.2g3mE?A6)LW}&&S01!0G)YR%#_y6H+B8xn>fL$uDv5(fM)?jȓDHi ʓŜ5`1Ɛ"Վ֞^Bkk8DH45F (: B"n/^jC0ɨ+8/@Hڄkvn*ե a+֒6̀F[4,:ZNh B eʥXzs=ߚ{ Lـq= -VBy*B.\4)hLHT92hC0BJIZ˜ ˞"GR{6dˎVI62*QM "*AΏ? (`Oza""@D~h6 m$ˀJ,JbBAb`lj|TڥS\b1$􃰫e6S^#%[2Ib*8(uܩмlFb4@E˵з\+ڀ+<(fE4笃EuQ0pSL&/ ,6fФ(wB_H! ! Z EWLN<0~" &d @#JWQ"V6$?UE$ [Ca$E@) Jq>t4#HJAho{ٗ_w@HyX"tq20TR߻@ KɔM9VVQK V"l,kC+BHlAkHB'+ =,]趬Œe$J! #߂o9dJۏe%N$<lj萐+Ȍ>CS@"K*s.[J$Ͱhy!z.ٔuhly˸&+(b& BYq! ( ;0WZg<) (ED8 ACRIGbBYPTUVTѥeFcUBj$v}DԤ@DE3xL+EhB`B ` 77Z7ڒs8kJf}ݧ?g&n E' dP ¼N%|l&Vtа~Tus)G&2V)@VsE18lm>j)t ($&amm(-J& U |ٔ5qH݊Gu @`"QXRDX-c1ET%"`HZR&=JUJy 'HnLMm1 C+NM^;E1Wd>{:C!*.ʊpsF< k5bI1QYa#`.N6k39P Edg3P@b粴h +W{Ahl` 3 X@$aZc9+5CWVhDqҊH)"jBd ,"A 4A 0Mp>n6|V5똳1G^=`w^؃LvKmN*vNjكguiG_fc#x9¡s}j<0c H6CJ)Z*r?I8YvkbFy/E)BT Ɗ r AE#;-hZ}AXɂQg/ C&L: }cXɴ&9a6τE+7kkk:X٬(sR&CAaO&RFvyf͚ ٖy}GuR^O <"oqFAf)eh*?bD`gzn]g}{9ÿ 繇͞B⪢[Y-@k$rBt0[ hmM9h0a&!""A|2CŰhDHeŀA0K^ 2Z9V!Xʜ>Pj&kCwMuj7Y..g3$r(5hmC 7lZ% Apׄ%U8g3w@aS}cѪQ{s?:xn\;Oӎ-V/z+?򴉻f1O\ľGc ;!?ݑƍwy̙3;)2k^/O.?uix{C ̂X'p>mL 99<nNj>|4eTy'k^}Fm*UskW=TsO׮X:#-.eLV&U^QX pe9?! 7W>sgv3sfƩ!~]qcWϿ 8yc׽fxǶ>y22c_;~H}FvoMny:O{6w777ZWoGϐΌ;KaۣiFzԎ]/N_Yt,Xp߲G ,au\)xS3Owg?O҉;Jq_y/~_;[\uW>WZm=Vsx߼~W]ym>smuPA[rܾ޿->`1wwǺdlR"SO8bCH:6_7{L= gy!{wݶjp]GJ5# ^g_kf٘ӓ?!t-lC>L_h#aBt"*4l9oqv˂N(*xJ,1(Yl$Bjn;7kycR(A;H{Aoʸcظ O=Զz*290?`WJBʝ弫`XZLDu9r%q석"f>E!;+ IcM;`.,7WN/#cc|%J&sζWkY@Xq*SOwenWmѺz@{?Rpw;lT܀a%ٌWlsre\8 ᗧyOnrsԄM䮃8yoTš!g۔~ن]$tzNK7/{C'{oA~sb}pz߿KZ쫞^*7ϹY;M9v޺q`@Ƭ===i05|- )0pCɛ"|ϱ ܒ7{3C8y4u{ /8rݾ0``G3JY@P_ Ya\K9%q&k rάk"$NX*-m{L=|\`TO["[~ۓ Fz:ܨ[z;O {|~??M_<]NW)Ҷ{h)ǎn=>)n.^[gِD7Z݂9hhYu/#!$a肜qH[ܯb1穬PrǫFEXbk3>ĉ}5jQd2F~mo"k T B 65u@ k x[}}[ճ&mw911Nն8{hkY8 sKeT]tj1v6!ON+W Mдۧ믚S;7 KFt{De y7ŧx.Yw9aτY?l?9˾{iȌП9'|nwF~7?}ǎؿ]zXz?h)>i/΍7my0zRN= Y }؁<<yQ;pFId25G=zϑ]wx)~ x+gOAWtW7yc0XĎ, ;QcOc̜YW1I @@Jb;;~}#aROu[ [*qEq KŎuQ7-+DZtFTPMD-/OhaO]DI[˥78J\ ˝:*$Tg0V9)A+>S劊#EḐosJOUy{vw]/=TapX@:]8mUjJ*B0Fp1ص]dv 0Y'%NtþMP^e2}[=/"AP,FpNʼnIbe-&)02Ql.ˡ)+'R[c3g;èXN! (K,b<i [ι)>RaKϩ@=R7=2л-W*UT[ik Q!V1bR",rOV&1숐D bE8GϮTõ<{4AƎ<2*!V,|62`zT~пe֠-CeQI{[}9ELB A@RžqP`چ^bД~-.v鰂"w@% 0 !(09G.]ZLv5ko{a5O8w«Yz㶖e ;:S1p陻~_>u&a6\S΋~ulȴ_t՘+%MK_6aq*UT<(B`a@A8 n .Uy"(d"ҭ#X*e H7\BdQ2 9F]CYOl֔2lc[,D͞  (\,`ɉEpX$@P8 HBeUd+Ğuu:(02vJ&Hd-+EA:a8Q?6U|~&óOBp=[:=BH2cWpHd8^ Э?𾙪i*UjoS"R5(vF%C'nՊ5+#cA"c Qr9;O˿fӚ6*ED1#!(ǪqJgH",\ *n%|bP X-F@") P̄ 0#pB$V30(ֈH6 >dQ α3 *B`!Rwv=|W2/_w MGUu^*Ujo3YED߷oX9c+0Q1 W*z-wvQr!8ST긽w׷{}+CbǏfG!iEU=bh B23,9}=YPȁ6Fk9@"☜(+}k* I$"I8Gs=}V,(gfEرw\]Oė'4]we0䤞/J*Ug@r: #!L6$%b@<:M<|T(:bYU#> (bE ꜓u&Iyy}T"eUmT3R{c&U%ˆ(t$1ja@Gd]j@YLb ;Ŭ)nG )º2S%NmQ"(Q)pLH@Q4q"H=SM?~C.7{a-,ӎyo3'i[w/UTw. 4&1ġ# + 8`@ Y |r8Q^,T)er&;Ҏ*ບ&̰c'bZ-~+s@c&c-o3 JJ#mQ9m22C3.-%v Ŗ""eVu9,tt0 Z!; eFDQ3êN5// ~G?nS^Fm_J*-p?D: b)""7tbP Z?~X_ @k457 bD0Ɓ(B19N1qQ :;NYjl jt#\m.دX[jL>R&lXiF@FbE $rs%NMUR(*l*!% +%뺒8f6ݝMԜC$$"t"08}Vʇ1C5F'Y@HkE@%rD bֈQl-D-r/-kr6 ;" EU"?I:FO;Hշ1`r`c⠭ *!3iɔ*i/5Ԇ55I>"3Ɖ/LHik %XC`qt EJb cR ʡ,bsQDQ",(zʡXq!*$R|@-mu*U|2Btڑlc1<ŠYM[Y4̾&H&EY@jXIPT K+ +lY N*JKuE^҅Des~qƳ,Ȁ cAg 1IP 2kČILa"(&JR:d, , wrW'FVVRJc+ڤc+ !="D(P-ϖERꤦhWJA+R"JQu"d4hFA H&D A^4&lrExYf02Sh"Q$:m֎PؑK&F^h)d&:r,$ t  #0TzUTV{ Y P!! uB29.daEMlELVd|f\{I,hŁ"&--Ρ$@PFa6rd5)Yu A> \Ib,3az~%%Ql4kb"dB`dGXȚJb]J0a (A ZDX!D@ iT&@rVRGWE1ǖ E+ X !Bp CJ6Eo ~ؚO/=801,Z6"1ÊJbXāsI”$b4*TXk3|jBQw3<1#h팱cX20Y(Lc2ﳗ J%]PЊ(1D@m_XbWj/,$YH, }|)W YkRӦd3X͟5/bN:;j!:8F i (NYHXlY'HB$7F+&Me1 QHZQ*2xFY 5Ԁr ΂$l 8feBԍ utScUTU{ ;H ,뷠@|Ve ȡn`$NJB$Κ(F謄!HP08KqhJ$EMgTX*1wRf 2:L@EXXcEhDqtŊ`A (@D@Dd$Q@ TRGV@""Bϒ0sM ^:}YӒv#r(8X*r+u鮢)ub+%l#9+'" slS3*qb'}f,( ,qL$R"ͤ 0uJM7DD@A"R Z(@2@J! `" SI,{J*U|4՞r$)F 3 55muɂ^{%38J *LTKRpsXvαdq΁VY+*cXB"@@""N D!"q2HP("DBaFDdI, 0/FD"ңPS?+TRmQn:k BjB1*B.rq$a$;qZUs5UB?NcD(MDQEpE4F}48A0RFkCd *J(cH)RiD(@ ZDDF",αKX( BTR'N8f9T]3 }2o4{>MQk ~8[{Ϸeԉ_ V@'mHs:g -?ӂ<0{[5`vy~6.ig+?/vw={o}+npUkP?d8c6Rˍ;37#y*Egvلw]˿>}5q;&Kil_x W΍aw~?̏'}+@[xin[)7 Gyo)< WĬ} xq)mȳ+KG16 ?v!*=]F?űM-=9{aD]:rǷ lJ`|y*ֹ5U/G/< V v?HKZBN(;N9?v9z_~޼?(8oZMum7]10뢫^G} yӷy'N>`ß)+\p5wv4qL8snʩ;_n93O}ۄӾݱd7#k7]p6?v/A׿}xG6uQoovJ^vKv ̹׍n-^x㜞7mv϶x?I{WW9N8"-*[Y=˫۾ǜtS z?g}'ll/eun ܆A y͋N9}}1zSL^O37x)g5kѓ?SsIStTSל{Cdm5ds.""i|]=)i{Հ"E@D$kQisl܋K/dl%i)BD'$J9aIB;(h"ROBHgsb ,0(HWSz*OmuUɚ+.\\ &q\ ?^O 2cWpHd8^ Onr;|79}ﳹ*Ѻz#=r`!_ pƦzԎ~v~y> &e Y®:4rΏ7ZWϼ;Jq_y~O)T޴҆m-͎{|S.\uvWϺY::=V>QjymN>W4˂q{Ͻ9|;i!<= `[L=vJ0j׃=[olod6m/Ị gǜ@3+9hm2 3~]G {$^ ̼}N_+w7I'-'ͺYṫEqbQ[tOTzmsЭ]!bTOt}O¿v|>o;_СC#F 5k< Et\%0*P{j{i@@A^BŨ$una Dj5"_{D*,߲=/#cc|%Jiɾmֲh/Uϧaszfo^aF 2wF 8_"n̝x'=.w_Vr~yڝ˙!G?GM֏ȅ=~/.+N޼mqvș6_7}lwdS՛V'~['$ŵOԷg[q=mK{A[`_~Ҭ瓴sNS*滷5ݘu8g7G653pe@6|=f>'4)ƑyӾ/ހ@X\nIxЛ ɿ.!=N>[<ޤ[ {3{t@LkvTJc$A+n`ß}=cιJԔfW\9} VX91et1t8"08@%Z)#7tz:q Q2 _j$5Wӵ J!E`XA? _{L=|\`TO[g޹C>7ޞen^Íʃ*TݪG_9:oG5936>Z{~{Ȋ93/䒣n&ag7@\JvHJhW]ӛh+SL>Ǟg"5&U0O*IS{MGn+_H;ߢf?7xnyeCJ?tCNͮghM dhEv Hfe֝Lw[A@ZIr0ݼ XA :@"t};~OZt2TW{=YǟϢ;oEcr#?-Zb-{˿{k7z/x˛rSu3r[bS?jȴkt؎0^s)ݗ a6R.40~o'{V˯ߛ[5mt?N*Aä9q~7\vbWo׉oNXmUZ}ϕ }'~3r.|76bw=|R6*)_ߵlrϭj-Hص/ +Mʱx͒Wtޟ~74xѵ?:+G0ɇ^茬:_D?D֞:{o;IP3zXz?h)>i/΍7޽OГr9_atWjG& 7O?֒ 9=G~s{ zq#]4ڦ8q6>8}ڿXFn',}[S<ݷ7`)}}W]uyC Ng64fef/Ibgfi۔/4iL&S,ә|>oaAQyUzKr&NVHpQ0)$AJutKt2I$%ݫX:IcThh D,;\ n7lRlU3>ϼ_j=.l`E7S']}uDyyƘ-&"`ݓvDd5K.RJSzfN: gR-K<䰃B6ϯmiYyf:蠓VX.6lX߾}+ʐ!CVZ瘭,[ P1nHݳl"̈,H.lݞ7HȂ0#!Cd"4F"?q l~PJ*3:o^zˆI[Q+EDιTu D=kmZ}? C $tT;}? Ȗb"?~/SK\,֊ȭޚ$̙3Edܹ/2=@qqL "]:tjH f0- rFL]WDDH)Ba\?K* BwYUѫTR%e|/>eUac&OP{U98 Cϳ籣$!0 > aX*23T:qsZtx "MМBv\*E "4 aaA,@⢙3M}?{>*,˞;l;fg{~԰YDHii( PX ǒ꾝UM:qܤ fs2Ddv|rjӦM+?{1.I&]|x2cAo[{SOW~vȚ5k4 j"HW /W)jAAtD_rպ#=jmeKg%5O0( AP03!."Hwc"jnn.dhRv1(JW8N#2"KuJ*U>DlKU'O9s,x=Ib"!T_WH]vO5r49gL2e={{9DGcix$II,(oIp3G,phLB1^6N#!;"("L@i>VD@ VX5 H@D R.ܲ꯿zvREh1z#'"=RJs6}_*"f '=f,o}뗿E9 2Zi8Sy}$?\hApBN/_Y_[s̙̜;}ߙ}1!GTYv6 d0F!H)P"?b )p2/Յ&g3 1[") #q6rU67ⶥ'XN`fBR(i7, ݍ$#P~ӯ2mT&G"9I NHXMy29o8Oؖ=]Lq0H ,xdK[VkWYCM`Aq@`enC&@ "cH~  ,RHۃ<ɉ0mı9fBQ ȞDCoߟDupsc];)۾9+Z=o{ӟz5$gl( gǽNŽ:B9&'B=(H2m0,nb#H0 gn[ETdb{ut1p.8"& hͶmLc0p!Ia4Qpa^RH!oN]F %LQӃUU5,&j.J$'zbY) F%CpnZz/'4j7FXS4L(hn"BdYv{rͯzȹ%Lb5jT[1u1 k{O8~%J $s8䘸&ȹy4Eͱí c`$˓6gw,8)|pmTo^iiWīи.$J PJ)M}ܙ;޼|\ةw #_&qKOBVHchu (&AܴUU9DB0!sy`D+ 6BSDJD 3VJvUd2P5/Jԧt6WdAN Q@ 0l$1cqB0&%sN3У.RHۃSRKF6 n˾2I &Kթj*MDaʴl(= =E~{UUAw%Xs!-vFSc6c~?-p$I$B8Ap6$,ɔ@Q!0*rZp@;V-R],:eBI^kRqx]Ѧsq.  !aIEfdqJθx\7Вq!DoᷪNL+-d"Q][pI6He wnAe0lRJa6K|! z߽y5a"ԓP3Sa12+++rWܩӆ ,t\XHs@F&X 妅 H Jj|ezv)ႇn0Ƙca †c`$9$IHwLU$BmNSY&. IDATo{ߋnPh5<Χ5,$R6o|TTo0HcjN$%ğ682C>zZj~ȳS:x` [kB iYJos5+@sˌ) L꒞YG eFm஘~c5TU蒭QjS$cCo4vyz~UU5;K bMz|8PMLWU2 m5D"z\p!6I,F4Ul I̶lT5_/*dT ‡ !`GYr Rl3&1(XaDaf\p!H붬~ysO_#RM|rw=v$.3?~f~,+޸'9$w;uMU3kOtC <;V,7 yvcNӠ9*ֈ8.\N-}{iE(9w s40aϟ]?{e;{h]5jF?z'S'_}QM/8.Hw sM0wx>8s<泏jv*s&i.x&gr澻Ѥ=^W:hҤ[eJ9%N3~/J8u9';e{fWew'7d̅Xe+J+MNyνhTPŽ07o+mOۚ-3rI{ERyO r~|/if#9#ڹE}dt|Ugy\ @^ɐzԊ3;KGzIJW7tSS]Z 0B #D>׮]kv,/~riFS'僰 i1Y%u`Vnz2iq؜wpqc}Ll% uM+]ԉqӓq,l86cOA16g\0t-۶ea "8?;{Y'+sgng~yWf]֥/|Gw"TNy(Ϻ9_zrwӃlh杯a+#ҧ}ٶp–#?:{ó̟;\u8?c04~O&oln3?hʽ/_C?-hg Z0o0ϳN)ͬ }Y50L^ؑ/Λy1u ??ֶ9ӋOޖȹr)/uU.?qm#/V/r-3.}N+Yag̘>VE{o{Bܒ5 ϖ˂ V 7Lbd޺E`^}-^u*?{{w ӧ\7WiKO˼|Ҵi.Fi72w'&$ 2B̲ƹ0$PW")I5⹲g|K ҃x=*48 E,4TNJ-ڿnVYiZff$z8L$x6m; (&"s Muh+ÃmY╼b'yw_1{f}t SE顏V^ޯaQ,{cy(ZWN3 V0a„ n_xo9&ֹ-+s͹ΛOn&pOSɤ+︹NnT v??) V `_T9xc+Ϛ5ks/v}[ //%#,>׊zi/- Hav>D۞uKvYxdɘ4  sVBHPK/=~bv6'Ze7AYm o__~s̓g*:ۖTz_+C(39>ɍC;6NpL GƁ>~{v ZLHaX&v֓Om[RYõ/A7\ v-T /h)W w@ !2W-8uz"&K Nېh<2#쭬 1$H[#" ^NqE$\sfčתj*uIVUWk fffX)1UU)ƱX>$dJD,ALNZ6ajRq/hM麦PHRzvGONOD} m^ܴlm$ %IYѢB%4- i//7km~lo~{X"V/s<ۿ}msz&nYxjݦ%[[>5o?5'oDtn@}zїPK-}9ʉLz '!]Ӗ1b0fDH3ft]MS a&#;.Vz_*I2%VƓ@S{J:u~`c6mpf1v(y'H&QBt$Ԑ #@P$**ܢN2tI#1ƅ CB2,$R jY$`@q{&L@k@nnrOR+=o)ͧ.t6B? ~lLw芛NC[}rn1f2G:c^|2K> 8g h%8}_:y]c{DD*y?ky[5yW7ɔKnM9oFa0knhC~C'&>n9=wm-w-}X=IOb̹h9/Z8o=}Áۿ9d7Dq\vŠ03??+ws6گܾXyOep"7||?X8oGĆl[5A-9codNO,&g p,+d>|$'HVm_)!.P]@zFLAKK_qMc /O &$8Dy]{`Fzٞ.U^BKKKeYfMo#>Y.]9_>c`Ae!g H TS(gs@+*lFll` hæ1 dJ R))ݲ3.ܸ@{^Z;RhKZҔpcrΚ5ۿgo1m7ETcr2B-PA~k;hF   LlYtv[.@]hha4E]uUh dLqիx&piI K!JUW]zUV1p aؚv8cܟHzѺFQgń"#SOb*놉P[[ c 9m A0_%e  !^ )CAJ9xggvSXtGy;vbbAO8humM +&bcFT/Y2Ҍwɛ#=ϸ~_ >w 7p_ye߁WmZœ9D`u55#庮s&>U?.K3G2læĵk4i : \B0EHPY޻o0inBF#BƔ76i^r"Q˒1`K0BF<…McMϰ'Q #mXK!~pkEmSc܈ ` 1 A"n@nLBpWX٨88٘84a7u?x͹as8˗V)3o5|u'TYY`1csF OKKM~_QPP 0ƚr8p@XHJ*?`͓e"19k2ܲlWaIw  @gdf`dNutDŘ P|i  !Da$RRh) g Wt;#N$'B@@Q#a@(F9c0d̰BV}ݻ݀XI]SBm >DBw@: U۞{~ѣ%I4dy$ɲ,'lXF H(Zec5e=#y3m .m˗ÑPAI7 BV|'3Œs#N !F1a:clL1E6F!Ƙo 'RH!wHR"̠@BpdW̱8&w[n@%4C1zʪn" lH9p_yf̘ܜ9 ݻuMDO?lE$@F"f{crV73L 8Hq GBP!8"ե;ٹB*. iLwR#0P@"Cm/SpDe';ض # asA:n#ݻSc )|SH}[cgs0Gk[DH,_}5|(L&q}?ejJt],Sx7YwPMGkeUS~.@eS p.0&13o@ !lc鄢d,B (R_Nْ۷LT.8&LAQP0,˄]F "H}}}2,˶m! 5?UϓQRRұc.]t- &ɖ*S-j>*.* E6jK?l颵o*ZY4Z{2B {[oE$µr{Xpo\08q9sAp$8@8u%RH[R۶c4eY7BVUM>2ϛ7o袋$r??mBWiB7͛7޳ꫯ5۶)-Lux 8MwS᪛gEbUSq3ї9WZ~˔\Jɦc"iYU23s&Q(|JГz Vߪ.~ڞ?B1.,옛",YcԲ9g 0d92:&8" DzZE")NWdwb ;EFzzYƚDS=涤(l5 ̛m N Ӱ&!AqZz730+TSչ p(E7"TOqQC}/A;հ얒Hwݾ3Q$-?>r<7˄*n&:_P=0a;碗S]guׄ@Ҳ: 9$K!߆:xzn19%9st׮]^7j$eM2LZ&ӖH۶\y&ݭă5L/(JXza'D$aEv2$X4s@ν&օسqeMmSЄ*J+}ҟJ/#+iƥ)۷`,8tJ9/ IDATϜpݖ5=O#>s~ɂ^K{C擫[ﱳ|33}`~21uy_o([f@ Gڝ~}bVm;Z9s9HT.qmcJ hJi n)B -41%FinsNdYsr 4Ͳ,i[cBmG9Q0v8/Dpd1txf5VUqŢu W ^Q$T' "4n"mݵ׌kxM|}W R+{3*3<$ Mn[i2\AL,P {^ʭ6s_8\1g7:zi|So-Р.ϿMkXǀ 4hN55ο .n+??z|~(]cV8UcQW^Ŗn[@ސ1vN;:]lEieI ӹ Jm r[QלӢ^tf_5KkV|Qj`ϙc.5#J[Āk~Swg\Yrc70AoIytGQקOߟ޹sFV,"X׏|.]ٳ{'Ȑe\Y322:u|>_VVVnn.c,---###(RTTAB̴sf<2-!a2mكd'ԛHSHIڶaPhdOMX@V&|@=I;fܭNTdmJfcª~T2k8N0"Y'+sgng~yWf]֥/|Gw"TNy(Ϻ9_zrwӃlh杯a+L񷏮?վZ \޻`窳)lϸw7ycs#4m]Oޖȹr)/uU.?qm-%˫ tˌi#KӊwVw0z3Oyў۞dgóò`a ӯnѿ6XW8muW?a]u)׍~Rӷ2/4mڤ˃ѭoZI=G"I`ΝWZzͮ;֬ZuBL8VW ::k/SFѱckǏ_)Iܹk<t֐!҃sm12P"'L#aݻ|(}vZWq%#j-o3G_"iTBH2MDUM{`֔ٵ7q@$Y1 Y-d ]f N_(j"pֹ~(P)&ѴMtrs;?q{{gyuAFyS[zbw2=5sCo[/O0^t)lO[ uȲ76w_^.u ;p-okj„ \7/n7yܖU|Ǖ9^E\u'6a„70cNwU-x3n,#˞?q vF\0ЯRs1g͚5[Y;- zkw|մ$0U;uaz}mOۺ%;,n9O98K]b&c iZ@ƭ-5Z*766.}Ji19;_,`BslYwO/6op^ye/`!}Եgʃʌj@dK/\>* $3E2-!P!T` %IV\H&Z|faR7ݹld(ieq٠PB3N Mgf9Ow-;;U E<~r<~Lؙ2mGo=ox_=sdy}fšs*wpazQ=iMQv*\7{xVpٍ?|PV[;jׇۗmC%վo%'=)|pWS%OxCgR\p;j6l]۫]wSֲdh-x}fҕ_T7V?d祮k_^oi[<0),^Rp^˚xB>XXUU]׵t(bV75pS9ϯ-^z -Y1c{Snz =e\eqmF2c P9Di3``L(@ Jdz²-U":=۵wcȖm;0MYnf\<險5 //7km~lo~{X"]+3o ϝ5qˊռkvLc6?#}fgͯ?'繧Sxz{!]Ӗ1b0fDH3ft]MS a&#;.Vz_*I2%VJ6v @Kw5|wvuooO?xGec2-EWtK>vۍ19 Q1`\??(?3n@/=Γ#"RVa[YBịM^rl(O3g{yڒc55#~7)!OF>hcE˹swxy9uw;})$+Y';+?'Y5ds~Œ]Λx*}y8u>j&6||eKzu rn#sy晙3ggGQJ,iZ8U6v4>q9~:_ M)Z"8ʅ@4e\.!r*>BaD@QTp` 1B$8pܑ\ s1Aa!G`B $ !@B4+%A B )|aF?r{GKLc ^6-3r!$z=j]8gɤE`BC.[rퟹ8WdY(:DBQV!I-jBŐGr10p윎q: 8qA@59F(?X yO;? #=V|9km9&R2;+>¢?o{9SQOs Z~me׀U" !#h:?#zA 㙎0m6rp8iQQ$˻vA !@p @ضdūcXd A R$ h{c 1 !FV=E3sfBsl w>0zvx7L H ljY&9E=ƍ͛6t1-N#\r3ܜNo'TZRH!~@!tO!RH$ޢE222 ;;;l۶4Mp $xw' q$kD BBeH&MMM,X,o߾L˲ ð,DUU۶cΞ(]4/+_qopa!@ B:ω8  u@9'@q/@$`Ϛ|B )|^"ҥK]]]iiYYYD"##CQd2鈴d2iv"֭ /++038z۶m={llltJ۶U__1NKKkllT%HDQUU^i@RQι$I~!:;ͧ6H`H@N829I:pj NҌq3,޷wVIƄ~?gSkG}wUI{3ta)BJƘ`C,\.I\.W,s\ht~?77&++4͆˕gYVjkk].W u]QEQ!wD`(zBD"z$IrbZZZ<w\1BQj4Bv1.(S.:;\p(#{k Hئ,YF4JtRuݻIpC}}vڪ]u2 /wo@DYEDea),DDժ(PU:"`}#$I*)))--m֬h%;;v+QZZvdYe9..c,ju\ؒ,`DkX~i!( 吏ڰqCӦN3|t ۶x*{ĉ~ߔR' NjO \eHlAcZLŘRD)qЮJO\bkN "TG'k/Wy/{ϣy5444bƍmB)++s\<ocǎǥE"pmm`5M& )))(8βX,fXx8#"I-f+C&.UPJ3 x#(䏖,RAⲭG{|]Cb lLL&h٘',˂ $%%o߾#G|>N'f>S|0Ft:s0 l`0d  ~yuEFaYvqF(&KQiu3[:kjbX8kܐ;njKKdM`LfNod"ފs鏠v!s[\UQz9khhhP IDATh`016fYljFFb)+++((B&) q,bdFoFnnĉ^/B:ZvUU5 HS+ f@Oi{qu3)c)NCaxLznc:}2Ջd6 $͸EN46y{VuJUJ8`,xJRAbJv:)c`JMzgǔ<PUyN1bHd2 pرÇ3h4j6SN8pn)pLEQJngqX. <ORR[d (i(!*cY7l+/}$EQUHFj4/ERW}iiIСeeWk DHO,u0''GraŪZwÜ:cmʄpESE9.)PD.c?뻇B@1 @O)Bl 8NfXJP LV{ӧ`ҋ]Xg([|2w푅vnܱ"DecBU(B( <81qT4444~bdYfj_, B xPn2 ߫؋ble.AdYNKLLkFH$2iҤN: S֭[|SL9p}@YY^'D"vTcBeYE&ni!R@aD(") x)58(`(^g\'* L=jk}{^eǟ?+ ''g…;v[n7!p\.!h,@fav{MMM4efϐreKxrH#a>^gĪ|~Ŝ.d1<>ϧ~п-# A<)qTtBcҕ`qlm۱RF\+b~g7?~/t&-ě:s.etWTorY~IaG3ZZ|͸{\>7{poH;wp!˞3g^r8}JgVs:Ly{, 1D[c322:v 555EEEla۶mr}۶m۶m[IIIuuqnw4lXRj4kkkX( l' J)FF* uzE&fEUԠ?H1xV&9PTQ"D TZDJ:P4mڂ1Yf(E@/88Yz'|3FJ}߿?~y.] @þV?_=,x$ +Vv:``r"GGv~g'aQV)ҹ^SՒkiļ?pTUUUeeǣѨ(yyy,y0`())1͹lʆ ׷o?VM6l'`S260 VD*I`c}tPy88G)uYޚЁm6G Fu RK TL9ra( NB"!9\޲5.O,>˴^gkvFqVa31ɕjy| };cCL>63Tl֫Zkk W!cN"!L]{%`)zYO1儇gϹʉWΐޛvzz2 tgLQ?6^ l|{3r?;~17Chst񿿴nW)n3}j~̟=mR#/R[p޻+\}fΖR{yӈ'?s^"Tڹfr›Zu1pߴaw'$Rs]<ڼv}aYD!WJ0#:nvȡRyAVcg2xDBͶ{ cQ]0@b׬WTNxSf~$sw \i;]Kz~_,B9YtEQt:s'g !:thݺNh۶mVX{.[g)))q:({-/...n)BEE8 0Y,jB}@$@(%>֮vR ȁ`jwYm2+*k0υ¾yJ98H,XmETUr(UBp5jc$ ,/2g[xzΒ%`Ǐ--v>_˳yljxUOΞ?5}@ 6YyŽnEKZw@zϪ]w=a2ڷsX#ד.]>M{?L=M|בH#3DvPيsU d9,d5Ǘ䌞5K>3*76C }o_ZBrh>mXv0<4Xb]Wjܤ;fLNaY,omm-Sg̘:ʂW(J'v?{}kނyXm~%7ԱSwd1)Rw|.۸,_J֩٢Ywzō7ؔgňQ6g_g-#:ݜxCߑ[Lcs-y'^#VƏͷ?wC'dRe!Zzl>KhFZn|".p6e7UTqK֚y;YoisȟmskN-&<=t{m{M}/7'y Б͇=n5؍"Bz!r(Sn*%N= Wln6gΜobSՠk:[8o2]~D}+{58EJ"Wl㸄>r|;pHWu֮C֗|{W ry(,pr{']EQUUY6PUUzY=v5װŒ$m۶Y,ɓ'ckkkY~P(|qdZvv&t){ I1AucYT׺kEg$I۬j1]F$\ZZ1ctð_] 4 ,2g]2(*%.O(*GT 6PRpDyv$8LGΦQjlJų޽㯞հ!}m<<τfs:u!B!)˲t,UUǂ@||b)g !wk((IR~~~bbb0dE#cN?|RD)B@& |T"vړŀTE}{ /J4,s5ֺæ"@(%`fGE':`D萨q?Q^ Zm znoHa@-*E5`t(a{#}7MkcȂTǍcos3%ΤzsڵTBҔvyk* :'?ula֋T;/R Gy -Ou\S8P_+m9tf:˟W0kq`lθpӣ 7 vԌzi $;^ y,$I,~ ^ѣGy)mFsWTTm۶cǎy^dzcBje^ mtLef * JRBV!4"ZNkk"E  Gހ$PP%}+v9r{a#BER!l1_ >K/TT T-9=~IiePvRMl\XcL֗K<*%(z΢E>.)둗x/]I DKƯgyNe6:&}ivצn8ct[ٙj~7CqGۿ[򏷎t_ƫw:|\4pj&iH^x]_}ﴼy/ rW/=?]W:d¸2r}S՘w /}/"!Ϟշ|fG7L("NY~ݶrwP To+K~ùYa۽zm)J̿u|ْb4YXֱU@ HDeNgۙ^CTU>|xbb".[QQQXXt:- V+ϞPZZDG(bY)0Q1(E!)IpTUT(,,9Ok$ŀ;hg F3`*0W⪊EI ~Z/QBF(f!@B$!# P(-筟c#N;@δ'}o3o!;'5uǹ*؝/#mqv|jwRPr; `jO?S{绶xƯuۂʔn##?3W$"oggN; GqmL{^ƫnhG&LMy s[P4:R^{;S0_gOU]\g/b;GnN#FiG~; oj9N|x;}8/'kX1dkݩWoJgptVb6}y;$Z.ڹ:7.AxS}^g ߓ@Li3:/S4{Yf54[cRMjѣny,:3nNv9b1\iiiYY޽{wY=sC5j̘1jZ]]$_,ĉCUVV#dY0n6_BV"b l ag}|îک[>Y1Q6jn޴}t2[tm|SFun_X\q1EUsQJzBH.F b #W~ IP9иYb/ISs]h{1e/}7|xpئz" K\_ǖXpjN4-..޸qU>M6߿f1kjBB Hfۋ1ĉ#O]QZo¥@RE\Im6߾mo߮ FVb&5oTUS+BT RaN5 `4,-29@RD]b?Z4N 9487 Jn%o҇{L1ĶhÇG"DT8vݵC1, [E1>>IG* YCuuu,F>'lR$UU[h$Ic FPB B![F]-^1hM{􈏳غ(8[v6nqмfIՕ:uڥ !J$Buu WQ*Q8cDNC1-F=]M5_,z݅GH=>})RQQo>Eh4x\.#ֲ$BJKK^o$a"ƸR􂂂M6ǏAD"IIIlomCl QPA"ּ#F _2 @ضuw0EkIb̘ctՕ:*l##`1/< @($"]LQe@%8E&N~)c¿ ۴ic2t:]JJʰaڷovzj-//D":.AZW[[($\.Bn|LZN.\p˖-c&''|h4WQQQQQa6~!PB @ǽG ʛ7og?zGʫx`cۏ=gVZZfN9Yi !DMTJ8J,"M fCG#nB%?@l  ]X4@ ТE Y: f8 IDAT,l!$@eWg@ ⼰흡PRFX-['Oԩ ,o{bbbUUU8S%  xBBQD B4Jw߷=۷msp86f57_u`jݝgCz|am6A?kuӃ**UALL(a_T/D(Exr ⭉i 9Tp 1HmQ7^#C{544~'Iۊv].Wbb"4???##l6o޼!LAh4"Bh4*K h4u듕yS8ݳj+%IE3E Ǐƶmfdd0?7fff&''@ 0:ݮY\1SQ2&jlXf͚QJ C\\\II S2QP)B}VXx>A2SJHЦm&BfjۮD[NL0Ɗ*A#G@1=X x^$8t:f_.X6Q7zᅴ߾ug<PdO}mX 24=#ds=W M]J}f3)!%5n˶CG"zѩԕL pêRb7NS1Du:Nz̲å̹oa;)ϥi ~E0eN`Ư}k5R<y-yјp'2۽Dg:˙r2j|>gXt:۷o߭[7Ib=zNv LPUmڴFVW xanoρáԦMz~ݾvmZ i"iȠn6JI `H/cggZ[VIV"ƼWk0bf0~6ӷll?MkPϹ7Xsy5R|hhhhF1fQ$Ib2OUrlA0 ffűhJ2,Ь~zƌ7p'OܣGZUUzY^Y˶ v{ɰaRJ(U ! 1I<ii !Do ֩CG A(n?8 YƌzU}R9!Xa j& ,EL}9^QI ҋ,~p4[&?Ty&5ҷs MϼPqT&rĻ7q{y4444m'^"bll6f4u:^X,,XZZX> yqDz}4u8>`vv6pX,nEH$’y;w۟tpFZzΕ)cgX>|%77S7^|hhh9 /C&)%%%33EQUU}>_mmmUUU `z$Vbbɓ{e؞ʌ 𳤤$!!Ap8\RRbZnwUUU-C^e~X 3_ B)|vl1'}7"u:wN85M55ٚ,uQÞ,s,AD A*ulM?RYP)PX84T~.j&ࢭKDqp 30h\n=Nd!yftlf$bi0X^=J l'u,$ILvVb0f04 <>>d2`0hْdY|IIIqqq?5<:Uzz3-,TdG}[cD֣g$QURURQyyԪUsQfdM iO~ Ԕ8< 'bہY!%cJB1/hdBI:رc=f9N!B֭)EQ4 >_8Ԩ?0;~$D=8Rtf2(@ƻvo6lկ_-)i :j}~ueINb-SdY*OnB@-,[R(%Rg!LK8NUU?Y,Y;搠(J ƘEr:>رcUUUz^QÓY,S7:ti޼lf,,,'U= PJAh`2! x}b(۴iu@n~=zwщ?HNM,sUm*-GeNk3 c^PD0[ { )@'-Y85444\OHTճwJP({k`0lڴСC(&%b6Rɔ:tУGRQQQSSìQ=j7(4BZU~*U^$*z D9fD}ސ*`8t9!T͚8,+(BX(JƋCG`#v{ihhhO|)e%"0<8g555W6yyy]v|`0=== B!x}ؙLeN~ 0ƇZzuϞ=tb2M҅R QjDl.>EQtRsHfPAV*NZ) @]I6P~ FS@@ѣGQCB{_deeJb-`pڵ,ᨮfh4zt씛C>9p !)#…h g̙ø'nߵ٬U\7>R-;ڻ/A],=irW?_n)׶zy󼽵 ?sM@ |s2TVfKpD9M''q' |k? .~;tGQĕ{+[tpOXg/3g^&jOyF7O::'ZE9iS&qw[״=ߞ+lOo?z럭UY݇w8'P5WVl>c>1!(<63W P0޵+ zGS']}|sw=WpWp=ua<">m9sz^̽0: EilՂ7Xǧ͜9KS.xʐk/zADP{v Tf׉_㏛8Ff!`6c7[X?ܖp$lCֿY1Ĥ̱w>Gj {wӁak޾Ϭ5e.[n1Gsv~\J;׬[XNxSN/6ds\jWU׮/,9A fȼgۄ4rhhq<R35csNֹۗ\WZ13w<"f1lq.gL: $}ͪ}E7evwxʺ?Hl$Zw64mǼÖd{3k ;XcK8o,{Z{tUm擳ϟdfͪG;xMxV|iq%?gsђi}]s>P)/ i߅jײ~]ϟߟV*|V>xYM1:k~[kfo P6Qh|'y eώmടW/^\6dEYh|_3z/`ΨgwArh>mXv0<4Xb]Wjܤ;fLNaY,omm-Sg̘:ʂW(J'6}*ZR"쒛u؁;V~KΘp۔y;m\/^oipJoXv 8fҔ)$,Ҍ?ᑙ:_}W=;pűMHw8mToq}{Ot^~q 6Y1bMYN7'|wd\x18U:kסo>=+xlь?!U{ lDH"ʳS&#MB1wV/4`S*ć nL/Y9tSyC/.횇ZZz6uŎӵhsx{3-*]*]pH99?+r9P[ȿmmPi|M]3^{ ن$ ZΝp`P݉$T$.ȫ4A9'{C{9}&|"BBz*2JX2H_:O?=fgm֜~cW^y}#seax<βջ{ZݔF^YQBпW¼@z6>Ʀ @p3ېOt?3Ou¬Z{Mw.Oe?}}V);A1U*E;bږCGix o-ly 60Ȼzl,nh'S3:v֊pILmQw S}D^*@R[rWzZyʠ$+?y~*ӿǘJ#/WvyTJ0FˣYES0e=Ͼ|g{V7_xO mK)DԈO63roXR _t "g!yg?!jgslaBuzQ/D/>x\{t] <mc_nLUc߭kh6U <'<{~ϖ?W0T;flnOXTu|WW%pnm{Xv^owcf-+W4][?)sGiYWvZiO fCv5OLkp7=v/5yAHp8)9ըމUK?F!.9F.ڹ:7.AxS}^g ߓ@Li3:/S4{YfibCCC+V >45gΜ?ESF'z7x(( 95444.k%Uxw}ђ7fjbƀ%9 U{du0߶SCCCCM]oyG&Oƛoo^d!SƹЌ/ڍ?;fM~Wʎn\ve44444d ZĘ~,/߬MV+:_e4444hF˗e7H8Og HzRFCCCC4~*SY䘸Z،7n Co)/Ю&~$dV&_SkhhhhhbĈtGk{= 0˹hJ ?*K'11Wԋ $}X6i(~{ѻK_/.wP}ưH 6IT.!mW)VJkRkmoە." nB"*¢ʭh\g3 if˔yqyy9gk_ {Ƈ}:< OHc@ +p2 @F40A =@`ڃ@ >9\a xBF7"d΃NrB =@`ڃ@ =@`ڃC22U}P}jIO7/vrrfj>FXV-[a_8:~ՏԸmçe^tI\&PX"ckEijAy%kJJjRUeaݬƓ6OWVxڽ)&go,"<\q690l/'Rpa$$(ag] f_hH& _}*mQ[n e-G]Z\U੺SgfOr>,wrU4L}Dex]UFp*:$joi(tP^;/l]\N{.v0`'<}7e?zOYOvq +o2owD H{\]:Q&*Ⱥ zsI}zD+ %V^ #⢎Y*U3Y'(4**4H)mgddTIБQ:^J°<.^1y:_&8g{P9iWMχ-5?/V?£Mtq QqfaF/<@Pq>qu_ /e]duO7}ݲvHjHZ?ہ0n,"*&2WrwY"W5Y oWnp'YGlqmxy{{nZ)ڞg/֦Eiy3irkr;y:Xj<'ຜ2Z/U_۝&tZL$nL#L{>K5)XMʦy^CUmK|S'F<0U GV4zw niFCIⵢ}fYQk0Ε3"@Fe M-,.·\Wm9 \č{|||.$3=* ~#m'&-LShA$-oI{BɸN<,Ƒ,"a"(ݓ :%7[,ҭJ#l(F[a:weW0%~&1wd"ke#|"3] <=r-i5zJƃlf[Y {C"ؔ^vfm,.Vp#Kf G{)F{rD7L%MzLY."0I&90[ o( pprr`/jňt56SַҀi ;3Zmhq5IN ho @ HFioDE2Ȝ/@ L{@ L{r> ,eO $ԛȟ$;99hwNNN3Nl5#,iږQ~pa!"7O3fn=Ku@tQE]BUr$'{ L{XLwx.c@xP±0 Z}aTJݬ6jI/|uY՟:`xQKgjMvo!(v]X\ͫU|'EyW"BRJ@k?y/0}t+b !0XLJUr/o?uO>l<] ZS jLΚ]Otp`?dg6WD-y&L6Ɖl=.Klnz ,@U;u`vQ$2z'G^Et޷zJ^WyUuMlc;O"J ^'" I6Q|Zgl4%jMdW&N{J  c`Q*Ȳ Z6 j̵2&Q/,>.ۖ;_Xy1F:fPZثVIδfШ %JSQ$AGfo?M8l ?>l)qG"eW&2WrwY"W5Y oWnp'YGlqmxy{{nZ)ڞg/rfcK51=ft 9z-xW!gƃy I,ck8r_eū݉nbIǨeK<´TSS v1)ϼ)8 bvH$uǟgIv(MEa1[Tv!PUz)"uq0:F|=Gm;jnmQvkXQ疊G얪kӭ1V$dEyz9Ӕ,AYݱ*,'P 4ح% ĩzpz|ϒy&QXm3aΛKt8]U +o5Ǔ0Ut ƪ䄼Q0RP.gr{PͮgH%!dTɎxmυ R-fifcg5t:/&di.j9QAܤeaq2+ba˞w ȁPxh9AAƑ Gs% \Q↦I+k.=fX;Ta;@^A4u/A$-o)~5m2c"Op:qdm)=H`JbGJf (L#-IAɍj^:_*ezXmz!F@ qNzѝ'>=>՜_Hr4"3{g,hcqY4S8ڃH1s}핳'7׽a*i/_`ʺ=v!;|ܙo`:iW%p#<ʚ6 w˘uʆNz;{ In sٹ &hkX:LJOSu Am`K̛c"ـ8VwL)&44tӦMqC KJJ… UB8]Ցx{zG'OTRVbD"H$8 @ CyI-`8̖[9 :E@ ˆt56SַҀi@ 3 VZ}\ ct0 IENDB`multani-sonata-bf88fdc/website/images/sonata1.png000066400000000000000000001356001500342040500222150ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME6 ИttEXtCommentCreated with GIMPW IDATx]w]E?gI6AH^AT,HQ(4Q+RD CA@)Az^BIH/o_9?clnΛ{g/D!BOD"D1r"D9B6Ffh"Dg漉V##~G4BMлf5~Y}Y¡o?p+ÓnjU}|?u;Ч7!yI٥s_|ݽOf+rӳFag)Vο+zaUL&SQQQ|>A#DE,QEA9sf&8ᰃs^{SC8|Xm[~C9p1s̙3g}4{ɚS/sF?8 tUg~\vɏ !(#"}mwl /,eM“rU8wQ!dEn{{}?ό.-θ??IIdr%snfۏs׿=}zؾg{L\*^cs)F.]?ȣ~㉇Ey|}q!NgϻcCWm{yk.:."|xއ" 2rP~խiF܃ms薣e~ņyځwp[~Mįg/7}Z+_}/{f/ڃhZڳv۸lOse?teOhkeD%g]we}VaX+.γ{\ut_) W uK#_3ɧ{1>K{txuFN'c~Ԁ+xOѢۿ>WӪ<~~-W]%P;.M'"wc.y׉CB_Ћ/~lWNkn۰fX‰}H/ʧۗDYʩ i>īP8Xd] \3C\\1xqM*c#}=I_|̻2|Ƌ<)O^O|>~~M?Cjf[0ĉ =D&W7]yAwȱ^?au'3@") (bL V=s~Zc03]k!v K/j͡|y,O\G']TC9?ʼn8򪓧qooۺBk<-4ccO1a '*\X=~I."lf#Q0] (8@g~ߺmyYlQTblGSXlc3\z]no>`k)3,`+;JsY?ؘN)q {9 㚻4V#=_hm=Gu- #.Ϟ87rwvd Ʊ|^A_u>o>A#DaX;ևrn>D9)r$D pӥ1cB^v#)t=ʤOO:c߼UO(7p2 T7aV߾U!Txn1n|b?=*FKw.:lfLdݘ#~|p/.{ݢ\_?*8 `^QmJxwoݪŕ_vN!k2wλRUU;an_~]>A#DW{uw<\+ e^8,9[眳x3zkN\ | 's-wUO{+lUwp=W{Y_a o^{#?Ow~ u<糮uF_ \5yǾ7~ո~vV-+̙wtu?S^1K}ܔ\WaГϻ?nP*xS;h48ۆuq|' 0Zª!3g,9U#J'z}?ԚNj=ۼV(AOҡQ8^LnBAifpfzf8`&Mz>l}WQQLmpxm DCS+pyY|}at!B 彥ҋKGi;@i*U2vls\~ /M{eq}u"D11r`B5H&1V$Bja]H/^E!BQ"D9B" nh!"DI'"DiA"D1r"D9B"F!B#G!¦ q K=D|Aee "b`2DL@Dl`fCDD`f"CLDD"&&60D @LLa`g%&5cZk"VF3#,P "Q!–aDP_[ikF!&===\Rj cƌFjM RJ"`~=N1 6V"1 cH 20hf& "bP;W( 8kl!7fD&6Sk/A6 F֥Y ]@!&/3aD$˅FR.2FZcIkJ+)ښ̬FbF3@jm4QJeD!ZLJ۹ZSYPp!&ȴ!MR:af2F a.ц5!b&6Fe01*P@Q #X2P 0 @X QYH鸎D R1 PX,%GabdKk1 E&@b`c`` I^f !Z+)&cafkMF t 0*y4cAr9?j\4 b㸎( &t6L 1H0TƄQm"lj6ښEI&6RQ%EDfCd Z D   2hQ )0!? 2lۭ9!ր@q(8 @dV* ("˖-!‡cn3Z[/dFA@KD.L @D,Fa1ȄxC*emR*8cOeVw~z,`RLd=>a4 /C-º ~oCOK&sQf ZCQ:@Hƈ dWN3ZJ`FDcȐI29#fkPHv~vΎ! t@}6'0;##RR;;seƞ9o-X@l_=i!mOSrܖ;~诎/s6W . /+++M,mΫT06^w>F^ 梆 h~&UUW~Ig L:{o*Yʆaرu C8l {SR"aC`RJbB84XUzDTwKgwf~3Μ2yG}ݶXŗ^0Z{yM#|ꩍGuRDhla3X F4l_X(5 `L88FeW^u9X[o;m1uZ|)K/^wܪ_vu-y/Svi\zgL'J-=Ic<~}WA瞭o~_r ([CuYxG~cR~/K\9͚ƮdɒYo1s3wW_^t3<e& X#b(ul Sc,,TcR!a̤|?XuuG|1Z)#t6ߺ|E}]mCm:B~ ~v\ D(@FhQD=o%q6{kmii~Gy\ry"?e8|qûE,`AznLuMUW^}A۟~橒0u-淎#_ .谻C 41<{ܽXň~w<3y;~wƋm?7jnWsX^.9{n;2 79}c֧0{߽{'}>2FoW45Ⱥޠ';İPf| !x<2RA(Q(K./Vpž@B! MMMerK:뺮b !"tR)em0Df`͌R aW^{ .Wɦsv]>}pرzz:0(qF3r?3Z6r-j>y(F.3ߓj F| kfdsg</jll |^ʆ{6u{WN8a`Y\[yVz;OzCm77}zʿ>fNf|);6>2r/b摕MMM ֠J300r#Xܰyk0 "2F5m"!8?@+}uwWBbC*Q.3 嫶f˚JWPC1z #"dR2d Wz(ؐ&T$"Zy.?Nur 3 )Kx"AJ \]K%R2lπR:Dvxܽ&Pˈ@/}=[nDY]]}Օy'ND%@JsGֽHOݲx_7zZgkݬ/pJ|9)'xUߩ-{e wnˏ̬l}R?)1*sWQI>F4C($_YD&TDdB:%2pʶT*Z+!@Ah])Jfjb[ycYR$2d4¬8*@Ds[Zn8Jʪ/}ޔgD7$5\ Eƶup ,(,zE<[ > =+NZGV%9эt˶BӰYCcaPj΄b檤Qk[Xs؍6X92Z+6a6WXpi.WRa&AuU1{6+Wrd` h(@ u'hUȄh!pxLsjkk汓'N1De?JDtqk 1\w[& 3mw_{ 4c>zӥ=ܒ~ǃ}uYțИ0#yq7_}tכ=z!/ HAV bv|UcUlygkˇuFhf  [0 U*7ѦXtI`kR8cC@ LdKgB䑅J lv?flB$VBCLy'DDՌ)>~y_[S &MS~zQG}c]v+>\w"!'[4\3Dz^:pQ>lwSC~>wNf_ IDAT ]]?gӧ8Y߷@.'zݯ9-{~]~w<\wc借ʇf5sy {~rBFNq܎qe Wdv[t0 H!D,Z " =Jjy;gbt]0Iύ lZd[Ծn l.9icBJ_ʲe.=ܫg[m5ŗ^vI'njUWr teB ,=7r=,www7Λ;8ttkc{~ȰO յW9lۘ?w֎ $˒&N.KmͶ|~E~ -O8M)w7EH6T\^y!Hd؟#l8=8aڌBD$( c8՗3v  aH-V5fKYю,Q糷9?Ͱ(/+?渣+kl3f駝O?ὧv}w|'Ǐ@uUڦz?uԮ˧Fʊ!b؂ óK9F^^^L&O9~vD/|GGSC\12o*J6LxK_ c( 3F&f"F@C7k;)rB[Q`"Ң} nI𵢈 !D|<8ֆ%jRx1lV%ш8>@!9 8\:' 4."~k-y/)euu,1B{jhhP(jkk8(jkJnÂy| h?{?+Vx< /^%?K#M֕Uӷ1ol6C)?r)ddVJS1v3abe[c] Me,dUJGDT+Zdl6Z  Jb-]7P]XWSW_#WututL&aV&(]a\B@&2qoj/}O?Ag"('9Ygx΍|=v}":QIJ%euƆ_~q#Bm`c4@CBe,X |^խ !MRfZc؀#$JLѕ` ؤ*-HP (3vāݿϵx.\ޛ60ؘ"B|eS6|q[׾(mM0ijAD9)Wj%F:j+0 hJHda 7>3R!Q:B0 [ 6sܚ}soz#3n/\bf 0R:,ESqEtfdcg H$l Ï[(~+oՐ.Y!fk*Sl1&J)$ B: 2zA@k-e4b,]61QWM<#H*X6S:2D61MJd3# G7|sXh"l|٨=2X԰1ڬhM\:ә K +=V!1b~-)%h P@.HLƐ@@d3eQ#ڲvLolxY]S@Xr$m"R:(fvm|R%#DHffbF&d=}2t\pH+T CMDa`a`yik?PJ'pyYAbK2xDD$%6D a#mƎ-B͜K~ Q_e:!&!ZZ}P)?I){qRicƝBHBGb2 ZwuøqRTEEʕfϞ)j"R )jQGӄXbbNhqF"JZk azzs. 'N=a\׵^u=GJ?tscL(([r_~Us̩bTomR @BF6r61F.G@)Mљ En̓K@& L *նh,K)F) ’ݻt @lQ Lb1yNjbIωAWOÏ<Jn1cƐ28B DG W I:"&!¦g#R @H7Wh= Q62]]=;1Mu5@LB 3"q;?`+b.Vū*UeIsE2+K&*ʒdL._/8q 'O2rd9(q1HCJ)ER)JGS[71+epvc&TBJ m ,8.j;n+iU 9 Y3#BsjkZF\wUF1.vt~cǴ=uyeUuee% CqP)e҄ƑR2b"lb}K6&yxg9m4v=jR"l""BlAOo/(A( HfҚR+%#gD&ݗOeAU#(+ >8R2 u[M6g)'Κ֊+;:OVSS=bDSSZeKL?y{z 00`1jmB"A!Dd!GaSW-r\Ow.&& 5U]Y+ֆ2UmM uhbر|Er~6ZܱG2k[dlE5 M_: M -l_zwho_KuvtھґJ)Zi)2("lr6@F^|Q BzkK@Q8B35 $uI&<"uŖ[Nd+0\jUyyy~U+>[tglM:}z2|AiB p]H<lV#D"Dl^;::uDa7Ɩ=/nK!(ֵdGbUE+cBfRt]ݽahdy2^U(/3v>Dsի|]mMxl3k/wttӡưI)],*\!iBd (9Bj B60Vwv,5a4C$Z WVbtP!9fLS&NXUUYQY&С~و0iҤѣ3e+{SB:Qkeb-P AD"D؄=Ykn9W8Blx?1ؔLj66uqk] hՙ?o~hujjTd2iƏol7뺕 ,lkkoi#>y ӹ2V`` (P0Fp򧃑:(>UߌO"Dfd3R+B~:E ZR ]nj>{f2ٶUsahֶIZt+++ŋE "\/vuukcֱXX A@DesYvSR;}?O ܺ1#:{|:g!BCU- wl5x8N63S11XYY2}jl9/+~:˙;m?ytZHQ]S=݅ aXQQs"رc\oo*O03hHHZ3)*.[w-׿«v'EYEa}Oӥf#%4ĖDZߘ]!0 QNyErt,Y6iDGzVLvll+KM.S컽sYDI{rw8Pdoﶶ+͑;aFmlSU2rIX0)m)jWb1%1!$p%(p=[޺rٲ坝]2jd&kl5:Ww{駟['UV\/\f&|W!O @02JR( $a ?z./2~`/|>кv/{y!߿覛osھ¾Y|0lyU읿g~˾o~|Oo݄f!BYXX)Ux>SD00}}i"jm]ye(HK.(5zdMm%3wvv/\4))S'a!˖%#G6N#G 0HD c S6u.*ZFF|;PLe GdU6. =15IUs- RZl ;>'B`B1 )j̙3K.RӦM[Ϗ{yɮGM-5.>=W11,EW<p<Pgu̷&T~UT4 l,@6AXX+`t&,]Լ瞻74zzz)S&I `ugEo3oūۻ@JL2R*)e" 8X\' D &<bڴi~eeu]`*++ch9O\oytu~/ʉ}p˺Ϻ^ӝe<ط:+q!uo/O1L7}W9"mၔD ,ZJe"rXDF/e⦦ƭڢP)7Z 1'[3c.s9s ujj&L'h[Ammm&cP@)0ո (!8DjӦM;S>+bx>SO=uP:ķ.zw>_O[vĸa[?ȽqQO6N(V~sqmw?|g *Q0i6{~F\O"D 70{wq+ꫯ2)Dŀ=2OmQ%&BdD!]WhaO/t8Rf'@s]Z붘:%&tIU soo_[[-<󽩬6l lx)%2@@-]v~ZSs׿Ԝ9sځt!BCI'"BaÑ* m\q\EB"`fc 9FB6SMe/o;w^mmMSsCRwޞƬƎmijhھyl&ITU2qUUUooԩ;zzS}/8yѺVu0 !F00u >03:R0CZrD"DT e p6̄ԟ(jVϚ5oeʪʊ -\'Dy1/VV(++K&Ksn 4˖Ο7\׭Z|RIJOJ k[q]O)e41@FD(NKʇ~?񏈎#D2uF^pֺ͊ m6zbgGDpGԊ\6\Lcd>ttFswOud<=,lT__3v9s̙nSSSKKK===#|@2)uVP@)ZJa# Jb`&RZ w,)_r%ʋ!Bץ~23D@fDו: X,СM]o !-) !r: h/Y/AAhCD>P2+O=Q__?ztʕ+njљMIѡB0G )fB0HJ`=iӦtMXaYr.E"D2#an#<X @$b aXV#@0!l].f0} lt3&~\.WSS5bD+VrABGJRQ Aa#:J)Dd6Z1Ah6:^!~"$lA @ 2@ a\Z+1dtB!ֺP(9%HēfBؼB ]PU Awvuah[|R+f•1aFD!6!B&?dϰmfW=uwaQ+]dK[zQEڻ  JQT***(Pz;vWJXzْ#w]\tgw239s&$q1ipbJPQ BAR@y 8 @\@AT*NW`  pEq۷\NfN7N1cBP)(BA@)4 Ag(!_~p ZDGx:y^^}mv^[b۳"*4-#1%Pҷ 啥Y#$1"zq-L{hˌ@ (<9~*0Q;9k 7,p_r#tdSʀG{__;Gԓx.7`YumAV 2HyphÆ^/?9{Ÿ~]O+"_[!{攧^[vوY~y$^]iM O?wNsJb\Wbcc<^` pߢbL"(rVSJbHtoG[twP> -=F8Qϴ  BI h4:9'BѨBmG222t:B!@  Bt: a8N 9y#NqJ`<> (3R " p 0@@FAPr&[f4v/y 3Ş >5{hN3nڽuͨPMOKyRQHL磊Hl9rke]'%V/u" FS(*FIM \ c59q F`ɏi }t^%}``ݡ#11G2(U=ۏM~b^83G-$P)(A@i4*@BACVVL/RUcF*#F##((《R0KNKL;ArdA  ǯp A(p AQ)ceuI:={[TYmyuuysoܹvD/MV7s&e.6%L-PT2*8xq,&gC3T~J7!3s^>3tVm}4Y>6^4v pA ':d֠.\jòM~pAׁk7^>|kwF'Ǽn;ZDžzwttDDFAsw2! u/$`ǏI,fJy% TAT? #(a8 4cJ@h4*ǧh(x>B'_P  R(A |i:A J o!oM qlCr_FC'r m.|9Gtn( sIVq|'_@AVU!Rrb{E!,Aɱ0N'W"Br-8(@T0 N @ee@FT*ռP(dm p+Q*ǎʫ:/ gn36icϟ?报wڝ@ (9%) L0Dc8A88(E~%p 2Ȍ8a(% .w[ d P Rԩh0 Eȸ4PP 56124|llllll =@ -@} Ғɷ *2@"C Td@E@  @ P!@"C *2@E@ HsLC%%%IIIN;t蠠9))SNNdee˦lfPۍT*H z-ŋߵim/^ܹ3(2~Fߵim&#d1##DSS @ZNoUT[[ԔTTTdgg]tQNinn]yqJj;i;wk>"ŝ17,!!˗/8h4&qqg&Nmx<2ԆZdl m;wTVVtڵ;wޢGܻw F0[7S om%M+Wd;;'O6rUl jIWLJ=zT4K.˖-MBrF[=qіS䜜슊=z{F#hj:FEQw>ɮS~qik9\occcTb # $ޣ5GE9z4Zbӌzdpa0rCfrN?zט_~zj2}=z++(O:wɥ\md:fz[ocxAC mQE8\EQaT*b0L&3[*x< Æ 1E.ϸb=EKu|uКA6W0@p@ T˳Tѡȶ _Yy?iF80-I\aӧ1s8k9[d|ys-. Ox|r򊜑SPP@>)cTi_*@SS+##] U@W7 q*ǹŕ11b_!}|OܝUYxϵW"d.Vfqٺ| Вstt$7)c8@pL1A8 $Yt)QLX/,"d3FE^z[T~HPۙt E4[va~] /Bi<`Ҽ|ȵ-oOɛ/f92ʺgBuG9+;o_ߜA kkkooo1E[1eEz]yt'J6NV3_T{vdSQ.vR!.=x;pq9Eeu(Lۛ`B.[iѢrbN 3®'ʵ]dPT-jLzɧOvY%ǿa^y~a-ZC'lÉ;]ccc BYY۷oQRR"G^ '5;(³׬4 iBNQ_-Bx=6k^&W36NTdtl\GE~vqq&BAeѳ+C%Z>wKT= -fͫ 3n>'O]5#}ֺb<{ ЫWM6Z[[.;J].[NSGDE;1DTm9~u;]瞩ϫ!~Fn[{~p L%Q Q}۸GKyw}gȺcO ^g}bePx&,`mAmmEpRL&BArM<O 7jMf4JMs-}J]& 3|"=CVųkQ96#eeeuzYYY# &khhN^q(Lm^;Vd4u. f<3kwz$xm],*[?Tdr@D3u&UR* r Z*zf5>O]E FԞN$Mv7eg yxOYq+YYQA咊rm'M HYYYY{ihi(w~%5J&qU %ƿxyy9R%%% `V4fww0H% Ï\75+ Z; <]J߃>J?7Ƈ}%Z.+Ώ:qiݱ2&.Gqyj񴵵.\Jvt}p\^C/h'~ϜQ(sU(AD?8g=.D8BP'W*3ެ7 ks)nl===淼\^6~!ϗX1rg?3e\P dkue}Ab0 )****g/ǫlߖbw<#zkڞŠX4wΛ\:v|vGFXҞ \S [6"E7Nw={(.eH{Ԇ>32bP#tuJٹRIM"" r~ l酾eddT-/71Kyy9J37DqUUs &V| 6_4gț{Õ{ /ɺzt:[nqrlafҍiɯNC>q*59ׯ_¦9U@ |5;Ϯ;#͗  9(FLnQKusHvKc#A88?V"p AriL]딱PP;ACV*ԓ޽ð4mmEj1F%MNӣ./y~%&61ܬ;lRj_9QΕ? btZcӉ&5v]`ӡ5σ\%R?R22leNԪJKKutt}$+3SEU5:6j%7'MQV: SSS'b('@ԩvdv[&v׮]+zùO>Ϟ=x>}llli\GGH,5eʔqփT1ىmo݊i;i"*))IIM9w.9Eےc()))**jii\.и1Ɲ;8%hypAD] YM!Uz%B^Zԟ' בV^-$%%ݡCK]EǧM*'"ƢN:tXFFw3335ro3&}_bRl"ۘ t4^h1ȟ[*-RdATo򱁾aȶfkL'((=i!E;t淌K@ *2@OZH|6 x]1D9W+W@A HC$?IS}?# @ 4eF÷h4۷%G-!Dj?^YYYUUU) SG.++@ F g- @wÇ,-ZBBB޼yB\@~8ܹsN{"C H  /^DFF֓}g<>>19s̙30E^9u%n2W5Tk'BU@d~U"H߹4)Ҵ䷤q{/;:;;_^mv6#-,1p0+䄷Q#':NI4s~{T|7tx1#G[y,RY4WŅu`5zꖿWZ+Ko4- #'Yk6" UܞƏ9}6^IqdvofG37[}2UtGL0 IDAT`sM.G9-'R2<#g:Щ˫Wrrr,--Ç~N]ɹrp4mmmYYGΞ'@Z P!*2@"C 6G׮][P!*2@GO<@ iPQQi^Eԩ2HCAAASUZ @ P!@"C QdB6lƖT=n SNݩ]ir ܢW\l:kqv ƻ]I)n:o%p/$y]|ՄO@Y@9յL 1=50nJqt4 yې"btEBׄ?^p4M%<]2eߒ683iBL}Zʳ|-@ZgnF.uz+Z0Y4布Mͽi)}6ȇR#(tHl,F gO051wea`M4v>]U뾢gYw@ziiyo-Tf~}ՀZjF݇|Lc5fc!7 _ώԵ\y Vr4 CMU ݡ-KaPMMǐIgKO@,DМ;V &u~hGћu E-ѷEvm)SzQG˭cJK?i\ԣOu_s.Բ:ivur+=2Y'Lv[7n񔬜W#߬ong5@Ut .Wl߷?cfs;-qM38tw)9io{::?>eGz:]gC mo] ʢijKOY~'ŗ2TQ䀛g\wGxj;i[O{ee{ISgD؜ʲĆ݃\=bC,pɁkɜ W'R#PRiD3j}oCu֐ɪ:mLN,Ħ%=;;q@g&BaE=CQCBg]t-PwJ/|>lj.grه\1^NQdY矒pb7V\>ޕ(23+ οXzcCotɺ?B~%s~{{հE襴zdjD3j2cG]555UUU ~b%6-Y؁:l6[U*4X!6G5՗MTB%Y954| /5DeAϙ*۱(ҬgdIanLڃ30]EJPK S5 <}46ucn_Ocv\I.ymYnYM̞L̼cHlE}x95 px6B Q׵5:9é2*)赔o_^,tOgXZ*E\[/4_iE\nQ9d=pB&lP}כ/V֔ª”-ַ]Mf\.@QTN&lFn37I+p^ֿgYeشee L" f7T8jX8>#!㖾zp꼗ی"G8XOC]^ uigk|:_yn{ŶZ=,\95¾!rIǼv22FnZ&,<uRM̞K+cO[CoceشVSinoA `̈{QpUBa]5w]`{6r9}/^ɱ .>{H3!)((r劥%5--M[[[YYYgϞWOO&{vUTf)"?i۬zC @ZoB|Z7P6n_H3!/T ՜fB =F@ TdMB@ HRRR MNMMMYYY@Aۜݻ  wFF*#C H3"JJ3-#C Hk*2@E@ TdM &^B7o8i-|=e2`u<1»'rS'wǭj(wG-M/j&l8;Q~i_rt_f\O/GRjt"|mdd&/܏I+I2u[U^D Wç/L ȦbIumm}$0omȕ yeey e̫KOj'Ă[j7ONl3'( Bgvb{!q2WT]ם5BDrD߃'0RSAFFA=PPߴK[tm/K~Z n GwjLAUSSEs^aRxW+x~ .X\S$q}L2/lY+K iJCf05s:"r$5&T]YsZgddl:5mFg(:DO˯kH|g/3 ΗN:Wƅd8n'׃'__ 3f9/c/raˤ> S2FQlɯE kJ:2W@f·r#Vg0|ᯅⴥO:.D}<  Uw, HP](+υ(q,(cy=*k -wX"`|- 3u-UefO&RYPUxY=LfIW&1#Lgu{#t}Sm2%OZl=j5aF o::~k(C!SE7r8P4H{ô ^(&-\T2X_UX8?OFiz<@2\IfiJ @PYNm2}m@ TpU7 RbHJqAHLL]Cƍ&&&ҼGE5Dʽ6>%S$r JKs(KSD9`We\~_xS\Sh~kG2χ6e"Qy%И='./Pg|تx}fR(䕽$?{|fP7e&A ]]P)ՊԏJyXT*BЙ]!Y7toe\nٷ:jҌ`40N2)tТ=`;-N+nƢ."?W eQ&*A)mvLփE^XSuY״ wSr n]tOG. S"{l.-Vϒ[4f͘SᄀNī'}X0q@BN[a+;O+%?Swh3e\$fXMF.[R S6;fQ.K?oqt̊fKd!(SYIZo~S@rEy|rq\"~\Q]3XdSpraUUarӜNNdb1FȱO!c;Pne5laVLp^Ƈ+"=ZLs|~Em,-C wOyyO;<ȣ(r,#+kӕm|]wYzj˫HAn/;4KE׮`Fgtݵ h~SYG[w[3O)CgY̎tz\gsp짅)>Qqۭ$yJ]R͍Tuzeϼ}x%zupY*Ͱm>EL5Rb_2yxgYi @gXUʲhj}IT;: 2al8"b'"5ᕅn7'Ll@ ?I% OYvqZlﺿq@ZcBfVwWm:j4X4"#}$iB a @ @ M8raa!t 12@E@ Td@E@ iۊL¦rwYtw8H~fٿВ?muTjEt6Uh9Տwhk66JJp97}G/'0>ݎ2a`8 kSxFgxδ<}T%K.HԵLS{YOKKuH*E59拄 W8Ns8氉p8KF㳬683=Lʎb~=Ąݶ̱{2ZS:2>'R+$jɧnF.upHxWˤTs9fPjq";].u Aa F=n\xS4v>]UUT)6nΊBPXOKK{k?nݵՌYilj/N0T:i2~m̢ub3l|$.Y_ǘK|:dНi N=_PPg,ҞL-{}?CfW^''#㐕_Z֍p<%+75f..%3'wTG3'{E*"Z3^Wr*-U~SZ6ۆV|o̓/Xu" gmhʒ>foQV~Ni2{gVd@ݭo͢K;]P˪vsek|?t޴r[dO\m]olmH%[tCp. t0ܿXCtfO/ ђ\&m2\ioa8AKm&ZVOk/1RǧvSq otɺ?B~%s~{{հE襴@Ig1chlUNdiTP/CUJcsQqq1Q1@( ݚέ]'pa(畿I;']J+{2Ky7Hfal ]D-fe=%KRwcW=ܒ{t) 40%]G]myX7&vQM4fj5~/v:ne_55N^{%_e|m]p41zVא,M_ܥə O{YfH"=j^"{$.8":(`(bovx1eb#-J>g0}&s;47a\džG޴xնݷVUoj2ŬO pee [ ݜZ7BPV [uh0F]'Ql\ZL4e".(5l Ox@0 f7TaP וKȯOXrxVdTbw,c= .w=V:z-H\7_g֥afne1 :hipƆL{sHe'ctBrrkUӇjiT@ԙu}KhpJ7aؙJMlɽ<̤}{ayMjc/(ubmq{y/kl>a;g\8'l(e/ݨno6gFL]OaR,i8ʡlz45 fĵTT r.adM+Zcu҄wlSUQ;+s3N~9p*?]N$(nрQOE7惡}?į%[$"I*񟮧¤Й݇^lE8k̕,U}ub?闃=(u_35&,= A 22 Aj?]:k{YU}}Q*^bPY; =fJ/*Jac|TN;w'N K5Ff(t,NIW$ˁ+2*+U/,h.M}iƆ0NګY2./)V_y45#F lK>x?<,8Ak߄ ˰VfܾQkǁ-͠nL (q׏JyXT*BЙ].փ+ΪNhQaeRBm,ٺ gr {w^[W,݌E]TE~*ˢH VA 2LYl뵳Fg,šj^R5-ԼG[ 2q[%y\ȸm8 Tq+G(3{_r0pӥY^ +a88_KMKغIF8!jrJϥi/;CCB "Jjo˸XUI.,'ȋ˖ª”s3Yo Onj]a6Y6wrJTVrR IDAT{uT=4l%dZkz\X9-umds{OEb%!ǒWd2J?xi:m˔| e|bz\*Jʭ6l;q@gVSʫ|AǑ=G,rK2j ju3Ȋt%n[+yMJ|]g֭*F#zmA!gЭef l/2"핕x3~rnk=e,ٱN]oP͊zʜ>-㹰SWQP4\^1\J3kfѻvȠ"e+X7yO=\KEj,nt'=mUu]{^_R)nW/:(7'ޙ#yM4'?7Үom=Wt}lvwǣzs1?zZv( {OqV+1i,uѸ-3s.{t)q_lyO֍Ʒڜي{T<̈V[}NJyݶ#E 1kG0FEݑxL`۽'wVg &A2f+[ 05RSUЭOIAR,bWOKC]b rʍٳ?2:=d+9Fu ohOc 5 #B/l6[EUk?˃Z3 Vٜ I=TuH |e98mPљsw*ϵE6Fw2oϑ3r$_<[g6v;CsM%o_w|ʫgM`7*}ɔ!<6aڇ}Nn<9~KoNZvAfʇ~_0d0Ecb@ڙ׻퓝⟐lÁ.w-hKVӓ_j̀@Z-+kVǽ7qZCW^@Jf%w,Z-hyo©XF)r3Bnt&Ȩ`l{_sz輲zl6 s3MG:Jx[lP4: 1N_q 7>=׌I㗿hgPz UK-W ӵsWv R9pVD)yb׵/3)/[M+CqhvJnr4TQAJAA^4i4zJ" cn=8AF\ITT0pPl5|ާ^h-Ւ\{w=UUНIЙk=(B8NFE׫}%h\W)j"Z>m€F|!M*,K$U D:>@\5bj]]* LOZHeҙofˉ?^|Z.(\P uE%7+XĪc~YڧTQ=xd*^v W|hrKw/!1c+:^d~ލs S_m;Ay+L}v5@˩Vbj {j=& ͵ ?빉f((z (rCqwKq@tQl\:Yů]JtC'i49 3Uns뜍K_W][ 1{=sݏE71 4n!bFm̤]9dttVk_x.)q9/OzOР3 V6 >.xwqmjs HkUkۂqie\[i|rym@1[5HMM{ǾSŝ-A.>qƹT;z;|l2wǍU}Ν^?D_KCIV^׶H;{g\I HD **('X r*{E=Eņ;H~渐?Nɬdy7O~=M^R\j(!iHױq?);kQж0k"`UW@;qDdsL`h@0G Dd "2ef?w {g,Fmem;}S\G$ ])"7c'RGM?p61L7 Qf2rڿ|TYuT]u`żxh+W#o0'iw #ez:D,ZT_]tj˻p9+C\.˭*J^?dnYUKUVɘ;YU?m2<'IGTLÅ'[O+lHe엧eu|0'-,AkIs4.,ٜ&M(x.jڈ`/0TJl2}_EgB\VyI$A嬦aͺb[)joSϟDYOf";̸>$ontogtґpGo9m'g]&"{9J*5%{ttd/tHR7o$9K%Ewͥh /1=3qFYYM屴]5}2FCʓ5m8{?c~h?yQULGL}\}Uͨ>磳ty}o},};3ztUCd7T=XVGҏr}W| 2#d,|PW1>a \Tl]aT9' ]ejpOY }S\ c|]ai5"V>j4R8ke + !ĮOQux$6yx}I {5TV (,{"-cщ|~oiϸ^;}u0C "NJ 'DpX,/m~&6?f3O]5e3B(?aI{C{F:nB1BpO+s łv]PU6vBM9"QNs;7ȶ7"]epzv}=~:Y SmAHnShZCn^"G*V~-<o[a]ԕŵO8MNOc%g&hu gKmӑi])g4:f9EFgmwdG𸔵;CPZQ޳ Ӛ,KJ !Ėش^ʓ7zZdT8l}i Bn}bF ya0/Own~o7˪}rrYU{bqw}C;}`$/'嘿=trNIf:ZSBy-f.ȫjh _:S4D}W;R !OC2ЅrD?6m`0F5G=H!6">+|6=߬H'K6J 4BOk;Iӗ Ftտf5Y+'+++>e !JH޽0'ł ?lϞ=%ə_VV<9ryy9 d0G "Dd"rv;|7N[k"rCkW랺ʪ#&ߨ뎞v=ҚIo93rWWw7]7T_d8ⲢָRS& Fϝ6ZKMYS jLD4aVW_ ^o!iTmQʲ$Xp<}d-#Zs`,,0r @ו}kg\7=TxIF׳t/&. }xkiۻLD>YyF.%H>%S92U}4]uM~w>޳|p/EQ)J_@qY!^6ZjjZ6^!_ɹjx_5e%iS3ZF)6̱vQnٌZ|jN?vj?RG`7r Qݢ  7Eҟ5H&5fe"mۢ>唊9'CVKZ~nO%"Jj\"f:7q/o܆/9*[Aݻ;m;8o執<'99*Odl¬w^3 #a o Rw9Q W?uo;%IJd?йzM o(9ײ{tpq-gj ,mx&-RmDY*Iv/Ҧ#iߞ}VBhCLzȑzt2sdgz^NY,,'=J^]$ZCuV{s#^\> #gE'#aü TXep#W}za1yl5%^xŕ]&";Szֻ=3l&nTؔYV_y@w]{TJm+|y$ 4g2n׵,Q%;mm|*b1>dZk!J^t8BWCN+`է #a!}Ro`T..:Z].oc2At?,T39{i>~Ò˷,U]&"iZ>2#ҍe+& U$)L5)mjfM玟36߯V~=qS?Wߦ sa/" ܁l{TzaFo^6q4)#[c0'NzS&bB,sfIiYqaiq 's{jg]B,rtn o&7=FFs4uIG9χvCK{=e5]7"k"o~lUGԱ8E_,vlk!T.~!;ԙa愔"%%bKXlffNMTA80o:)YiBMї}˄0O*n>5nK Qek䨵.Gy?|DљMZ*:FG 㪽̣ѽ #FK{jN.뮦oܜahĝv 3Ҳn_Wq;My{wZJs2SS6mEl@y q˨)79&(mP3sz8#!wD5 IE5jmkb]ZZ\U=bX'41BC]&"گt*Gs%*K ۆ9rUNC2D,Ս ywpD~|(`إ B^/^C!cn!eIa9&U!T<+)tB쪼gQ 44KǦ*-e3s>=G?ϳUnSSS3Dɸu/mj"Gd KPf1}(5/ 0XY.Xi+YVx%:OWVw.5jaڲg{h!V3*Qp8%b}8U5ӒFjYlG}6!#G4IDAT; ߪ&ɏg${FI$<~\.YWӑ\Xٮ+q6O/~wNu_jmL_:-9RXpY 9\n5㤍 9f#fh uDFxAj0_^bl6>>JY^߾s,4y#yå x7JydסCͦ\.yVC]:OG$vg?q󨬎i8MuT Nw˶6qVyBs!oƇNڽbČ6!~cyڮPPXwĪ%3Yn:a/*"۝pF;O]ȹ}.`r8U_#li^1x^C.)L\g?YkJ(WH4G_EdC'l\x+yOrC'?Q!QBzƞ]9eLO2:nǎjiJBJ3Ǎw ɫlRxcdƖyL]0' K|~ږ+.lvODw@{FngYV-@D` " r92@DDd Ed:. oCghaGS ;'E=f뮩m޶?F,2Ԍoz4]knPjԜ@ 0p5.=ԴzfkΏZ1yrVAfrVM(++u]ZȖ׼ȢG̽:k/ꜰ ̃j岯x`7릇/)GK\a7NOCUQElw5 ׎0SRRg:Bj@ z^Z{vlx;!ĩ_u97IqtSVӱPrӷ{75^{+^cF[мB.jLBwٯ o Zi>Kݐ>޾ˁ2Dmw 0TV4 r-4"}_ff?}ٲ3 y tt>ߵ"uma^.'$ʚz*lXJ̰ JLD~ܐd,6I?҆~zm0yW֙>XOz};bW*r9StBŌ3 /R2 eiwz'yN~׽|c')NBJ]4)m c-QPPhIYA߮%tzqKtxxϽVT5,-ȟqnhf:oj<';w-vכ D>UCߥ(i-ՖδVRsx! Ɂa*bʔ.1;FD5鿳 6B՞7DS9Çv1 8ͷ JJqqY jbmҎzNtI <Kܒ'}z%`BBrBjk՟S3ʤQڳ)i7f~Qs&B(h=:ok-[W;ml3 =_t1c2[rcMOm~-8']Z]1/[eTݍEXc-";>U}u|41_Iո #5ߪi5Es~w3Ld>d D.Pw+ȒX>0~F R7׹w_Sc2mKx/ܝYP{ww@ {'yNcT/s֎t(5rZvLrxr?o?=55nKՕM9mnkUFlS",ӖEi/!m4ih"*Zs7S-C1ΫgƬaZ'$*QSor|5Es f4)mխ#%sds@.zWk]]:sk%@kDd "2@DG`h@0G Dd "2@DS"2ķ3:Y Vd0V>U6]$Tv5{)$e&̾]ӱWZ2ZE}m#\۠+|Ue82jc훷st$hh;ޔln^ws,ߡSgZT!6!$b.}rc+e/AO+G_Vʻ/N 7̉(ᩯַ:U>5Dz%PUÕ$ZhHyrFLbssφq؉ v+KL |QVx@A%ZvC#euq$([G^zŗ*>2xAfV>8` ' ]<&aèhJA2,K`ssoΞ=wޔ09$ͱ_҆ um%̟zjS\.w,52*;ay6厖#^+cr6%ez T=Lx!P$l)Ռ*1B%:tsni B^y[8D%\.m:X 'W<֗ߢ es\mNtew8^ZRAˁjzpX>vy}ORRRx'&&$5%%%111gϞhnn.Yg'z1M`e#ː,hyݕ,K+B+;r0mٳ=SBOS(8dz> iI#,z[(j+}dݏλۢ&]o֋bsVHD5ߺ@Y4ּi:2Y}7|)BD MG3RfXKr̺M]VSh,AlוOQ ;VܱMb2a2\6iw-9RXpY 9\.GcqFAZ3B3ֆ:"m:B/cXl6p8%n׷K# <,}z-iD$%BYҏ ~M RoHneq O1sSe١CCpA'ӭU sY(jKDWݙOƇ<*cq>=mSl4*'C.ݲMbܳB`xvlk>1a~_4DF?T7VA(C`XON +4=d1ḻ׾!fp1k >094CCg}!d&5%}`$/"2U OԡHrj~{.'G!zCffi(zr!y= Ycψ/ڃ9eLO2:nǎjiJB "r @Զ[b{ ~4 cyAwP tؔ=)`0Yuw֡ۇK/~vta{'W Ǟw-*aO0n-W]hN#yDDI&6Ū`(Nׯ_4;7oFY[[:z;wg?~ܹsB222OHJejSٚaZ=|A`^ңKq?#UנYHQxF޽{ּ?nOlk|vH˻g >;p>YoTz6tg=S=Eu)42qS/TG'B7ݻűCJtkkkți"MX|b/B3B>Y]J@Hm1~a[_1w3*&;afrj2Id>JF 񴰲cEU!.J),O/w{g5Fd,KwwNyСC˯/ˌ=q:6V 7O-V8p"y҈ `ߦlm`<ε>!ǖ3Y)CO}]YYsWuX"K9N mA}meǟ+}G{ϔb~ 3U_'m?f)ydESf#.X$Bϧv<(3ICW8}잼'(٦BAD^!O/E7_x1C~],Vó^^ۿ@ŽTrzǣwxUŕYEum'w-ˮm%ظnp H.pKۿ +Y DW{, ܩ"LhQ ~?Й+Z(z<)l. tc4.!$)T[R\VŐiLtn=/` /gu`!m.QPZ=;lşCW 3/VaբQ~kjJR %!FIJoQ*Xj,MT L=K`Bf$E}d[/M"q=Z'Fc?Z>E\` }93b}5?lB:DM->~ ,VHj|;2䧹j4O7a |AuccuZJBMYCOF1u"N(%3*YRX[rqh?Ryí,~l$EsD"U7v^0Gn66>!4OБl.4b^z_[^cWҋ*\n}uKd18A Iwmoq1e\8P:b!g"/ ?$Ũ sՒZ$tBc?3ʩZhguhR"hd(醎#: O8%o+\#-'ʩ8iF-%ɩ oОVvq&l ;P_YK*-Fş vFiU<<}zKo?o*%7@o]Ñ U⟟T,EX2d/AB?20*V>~9IkP7 U:m|l~W0JR,_c3dťd5'i% A,BOlekB>V/~~RA֬YXpڶѨ.6f`3_0'c(@01)%//{.˘[\0^D'ʹ†NcgdC;o5<~*MᮯqQ%Jأ^ Ƹx`:Y#)H<]_D, TL"Ÿ 0}W:&E177gAD[AWIyُϗ-+ qya3 <R5+Rxug8ʞ3YF6ޒ6F : ]$:ȹ_ٟq>(x|Cv;upAf<>[jҸ5 5j 'L ux6|eq5l\&]L#xmtluwr.0L^茂J5437aЧ~ꨋKGwA*^=ZfҸXh2 W䮄x H=yӿF ,Cqi5|꣓ tk4#ӂBT衳i9ґH*Q>%e5w[Qe_F p_[D? ?~~ȗ^6ǃAtO?v¸}9;l:rەC,D\ F_sbqL@ m' CA OAPo<:Ł3g%C)#nnn->Ah>rJt`㉰~ۢYLRRRv AQ|}W],NW[t×=܇Ea^6l5OsxZrh _}U.u7>ҕ1X6 ^vVxrLƭ IW`770mb+ngx[gFWˮ8{Ӗ yJ xHi9Bf1ܐ͝ ww=~qu [iu5! KTU^ oDXK7֤T\+Yρp׍^`ב\Tay|PYxץƿb p .ƪfpCߤ$p)_F]{E*ϠK HMRO(f5HFڦ8w#/D/_HU` bb$%H 4 E!)\aya*?9Ap==s~~~=1|SsQc11a n$ؘƖO0Yߌ^bTcW06s(*Ef`aЗmԗ{zuE8M2TϰD߸3ԕun+*8!6>N+uݏu7a_c ;c厸(Xw٬-&IIIƆSŕc|CEecϟ)oE$bc8NJc VXTOBO{IJW#:[#*6Vc,HGiphWrMxٔ`weLl|gkEo:E[s7.ޗbt*D3@ygNQ.=s@ Cu֟>z :8H*Ma9^wAwi3  iu;%89s"tT^cs_̝w tt?2pZ-S-偲0H5-u>`$[>Q-lboOPt+_rl.b^Y{bQvD Q7 G@@ OvbUSXnȻ8*~TCdg"z!&a/g@ ೸X3+ZRy:S㯊QmW>[Qux ջa,u׳a9v\1m5>ko@`v_a7roGe5Ie ~?t{57ΣZRߎ쀡G.DOZRLJ&1a ro?BT]V>,q)0^l>HO˫QQxv|:G2`l")) ~f8H::]MYW|J?`bj~tzy">10>k;CQ]^H\^߇I>jG4_/#go2v|!_y 3d?7f=;`$+oovǮil;bQ X}'V>LNEGo5Mo<hxvv-Lu|A!KDY0-IóY}"qVAqxwj5)3@Gu-$bПEuzwbT'x"FZ:gՙ~.kLwlpwv0\(ds}[ڼTŚyyظD%w~8 ׏K6xrJ Jup_m/Fs+`:3|y+7Kd0FR|\كy_$*I3o_XRBe cE7^0|N#f6ؖ+Vamķg*fE:ّ*6.9x]Uhl Ψ@M| W: f4a(--Պfg$6M 21 `O.00B)ljYsb`S1'D@ԼP\-&9'cE@(Uq֢^X"tO"m}k6x|^|e  @^\"ymϤ7&h%`1XB;njUp^.+!>#l5W(JxQU[$ 9ŦIN`R#Mcݦ! Wհ<tD $ܭ}g玔4L0M?+6E]$Dꄴ-4Oouzn޼W^yE%t66;wзoFY޹K'TOa¥k<׃zW:::x_X ?AD3q]5 EڊpUӇ ?AD[EEE-{A cA  ?AA OAP' AT *A~  ?AA h_-THh%7',~^dKN-Ɋdu=بY]`ѡ mK/k8E7mum2$̳/kmҶ DhohE˼ E7rEߝ{Fwʤި. Q j ^쇩KQΜ}' c.x|i.pAoAhjI!pzl2-c'-_VVڼjkӇ؜se]07 }nbkI0i FGAP_3L^콃 Kak&86s(kl]A#_NzOZꩰמ.μXYYY5Rv#v؛ ,1v"@JUkQHK# @mToKCG`T>@AU8W"wwX N>8+釠N(Bativ2n^X{nEKnYI>[2꾻2}4ty- ^2G˸MIз *CIy%` *ۣ"oں]ux0 F pT:@TǤ)u =HƯ֌K nWz4%ソ{f",n0/r.]oX@b;Խ"R@'XbeFΎ8uNdDcϷcvJmUk6vnB Ϥ^#KuϠפO}qqw'~ƾ ^̠R !trH\-S]\/jTۗmڋ|s73=~eE=sbV7m%zMQd4鹾s)`lH1k+x&1G+q{>X/q\UǃRT;z\z?Ś&}tY41pQmUyV :&<+++111ّOؑơg ,A{? <ݧʦ;v #F@QQ'[W^jʢEK A *AT *5C<d!DwKE2^tR Ff.,q~+7QBZhDGAWOU*hLLO^]@!fRL\֮L?Q02֬\˫C1gBm'ș&t<O۪G219E!x/K0/#-bp޸mۧ4f ;ps FtWG>IJŻ9/Rmo[^`OQ\Y^*Cdz\{3bS_+U >PÔhYaݼ{ 0*,S^-aMc]3 2ncdS_n>d)S&3i) ;;;&4ÔV{RGPV&U72ScO|:mQ{e1-D33>G Z0};3H GoF2狷fV/eVu3ܙ0 r[?}F1(\1ewOVk?`Sk50VVVV{Tq89j4qTe)w`WXۡ0nw`/VlG^aw+~>U<ݔ^YlAv<s-`禋 VGG# Kq gnBLk3Q97弾H>){[KU}&9$hQ&hJL4S%V䌫lT#eŧ8W1*Unr,6a

l1X]Q;>t~_.)ka Q4R_.2nlb3a Bw:`{Ws>#sk_7ͅEۂcUo =8|U ˏ朓(킉as;[sNoIsWexC"Df'H*5ѩ_>N$) TV&n?¶_i9XV/U䗩>O!2l==c'pf_l*?ls5A"a11驘n9brX h.xvXⷥ!v{ȈYn{* V荋ZmqWc/t`x/<߰hk*DV0b~4 :!m7 КEti꨹eSahP'B}D#i-z3{C#*T@{.\F'¯n6%6Z /#2˅UJ{t{6`tWV"1*%{t$.@Lqp4`TwB 89LǬ@R_0X|S{ONpEGJ{"HiW$Ԯ8puN)>u]UmeooH?Sli2?eU<9PAW …(" Շ2 plZށe=J -DZz"at+Uo#JԵWȜZ_U=ަ>S%,Vesubp\l9urA(Fks6FMp"tB UؘyNs3)po n {ULlp=2uU&2Ǖ>S'6V.bp`Grh(e }vHZl&&c'pWo: 9;oԹ 8=~کmC{"s\i 3ujlc"טZ*A4P*Qs m2Xt7&4挓MW%l^86s(kl]AmO-++9"c]gI)CMLM?QHK#A Zynt@(:Y;ni{n0:YϾxIf!&nZʀsWCaKQ](~)&XBr?ӛr@9hD)DX6@q2ۀv50vYVaa_} tx ֙Sr@4ÁnC;QBq 0um;eb%J/00B)lj5[NH8x b$R(M0^rGԌXkEb [E0$?tu u}kF2>CqpqBΣ e} <+++111ّOؑơg)Fߏ&!bW'mu; @aBycAxOM;vF"N^ kkkYՔE!77e"<:ee;R(A5PAPo}rFmDg;`ܥϢ6uW^C d6[aQDvv623va+H^$Y|6w^r"{KY[ tDUY^eDq#|"qYaʂ êSR&Hܫ$/S-t _ ;?(/P,yQ(g͑3 6D;!,)B?<Cy(ˮ3%|Oo`sPuh]MsYAp<K7C\|`d뒟t#k?姪W-O9ǟ|'*]_lW2-e^F=&ö6]y W^fEJ} Kx" ! xˤyż(gA=~gdipfJܩz!!"1rèܸ dq;폘2ZaΟ!x1VjQyQ(g͑3 VRX=`|.N.?!'Ȗ xxѬ}2a A耱] X;#?E(g3MsF"m SыYwڶ(gm7gDDZa-> f:ۺm KrFoH  ]rqoAAtkF k7rd9 Sgpm,.LJmq*eW\ caէŰ(PC=݆8!w곗cOL9N?hK r@9 U%+wDUaV$V)~U`1H]'w_Zm?4 BIhb A"mm. F9nAr@'H  ]Ki:  2H$H$d)=/;o}Bg &+/UBcێID}్#Y,Zn?_D+* 8NvOP$.?{4\g$w@N9gkOGv.̀dx ﯱjS-%y |#-C ]QPUOQ\XG{zۯ,09A2M3[5HɫaPP˶S_yQ 3;?cq`BVHBpD/JbP1b&RS1rĄ]C$ Ua`$Oq 8^XbE"-=I0ʪMt},t _ +¢P8)_gQ6o#ɔ儋3lKKH`mķDݶSaq,:UgZzaH܎,V6噟$G¿v( :>+AP0nj +FTq2nBLi|3rV{c"eS6nىyRb&ylpb]^?.#`ʶs%N1߁nLS+K vsYAp<K7C\|Z y%DݶS`x}g~.l[O4 l;F*ƃg.4 :4z'cE@(A_e#\\BOo$sk_% -:i䋫=Of/&;apȯQ{LBjslq,&SSh9 [Nar¾M|H x;s\Up^..XwkuۉD"LvrCLy!!8BP{|Q. AP' AT *A~  ?AA OAh zr  C ѵkW9jݺuO100{yw6i4OOAuG?n¼4Gh{~V":_LD۫iŒ2v*Ak!}8#A_;DR2P>hc/m{4x<M-07NԽmIRqkDC<>[_~c) ^1g2SH$2-fx|;%=>mTOp؜|z/ GOzȦ}$T v!o&cV v~ӻc1}\<}zlzUeDq#|"qك[;:+Yy..[);TXVٮ2_\[V$~Q^H$R(֘k ޚ> 7*nK H"*~0FRn.{?z0,#f"5=3-GLX@e5G1#GQDTkP'@fP+:arQu1ץnx(0{*Q%@Ŏe 5ulx "EAC=5h*@f'//F={[XjbMLq돬a1F1TS%ilg!HX>S"*ϩ sşg zl 6O y#`n E'bT嫩>prů6u )RTEu2UrANH B HAjOA h?y۪AZ,.T Zy hDž_\B1q"e`gsA0 A.8LMI4gO{&{t$ VtpCpbW]1NΫsY0g+k ſ%~pH$6 ~edʄG#[WnQOؚ^DzN@c\z/o ɖ;0?W& oKCG`T>̫֫<"q;¢P8)_g";;[6 mҬzʄ(Bat}jGAv<s-`禋 鄘Pe 16oulYh.:< r#a`8d K浖`0}yk߁4ml :PW&,&e]mPWIҨdv+*܋,3b?(ˀHݾj gyNp§`㾓(tZ+p|T3LxNU<;}9'Q}v*D 殀u /c81:s-&z2[ǓWcw >b=eKD3닞AxGZ6ؘiX)X/l&*Af)N툙 $6[ h23u{q,!`9h#S&HL:`+NY~OGIv<_: ^12Uk[ᵆ-WA4P*3U脄 q@bG12efBl; h¯JLƇC|(..^y4 .H=H6],ptv }u?+̣G0a&5?lQa/{旛D{LZԷew*˰Of;|c~6';ۓ=߃ >>"sFu|.SJ Ѹ+A8Unc"eS.AíaJo.@hUw\i@\c+j\6X_)DX6i:q6u(DjWș28Un#gG`x :w'2ۏSŐ˲}gcwu~UD):EԮumReՍק'D@ԼP\}6vJ>:^T"yuU)w[i/1rdD}J}ZM{bϥJ*P%|GS ĩm;l쪲A?d厨-Xe D IoLrQǃRTC\ڄDžx1f6/۽`r YՈ\z?Ś&}Էeٴw-Bc]m|fƇ#74._U#O(]Vtѵϰbt}]U"6EZBܭw"n%9Hݴ%|G KC/)@}h;=cATiA6ԣ- Og/#'%.xc 룫Eo<= &$Cw%euL/7+]&cNαǽ1:| !FR-Kw1JnSy%5%tx3PUx_/6q1- k``݈]!&>2p AJz:uFpǫ_{O B?m;j5>Eh"ѬsjK KlFݛv*Rx<]5Xqy B[bXT@j^ ğMO?'*-eBx8AA9㮶İm0{gl);;ˬ`O.F*ƃg.4 :DZjEܿ?6$o/OZ*'hhmgw?"30]eC2w5oh]ca/ ;]PcUAAX7oEE!>z F A&p̋<"kUU_%x>t|?g.jt;`BG|R;=X?vX+,Nk$-[8!<۶mDGX֠\k@T,b '΂4Nq% c31y| ~rVo/9K{z@"ky$k[ &LCز%S! H../ߏbn@~{{E A<O<eX8L34!vX1jv,Vg [Z;xU <+:-5` ʵDf~8'ZΜ?aR`bQ.X >'ʪ .8p b+krԀ4 N>_\Ch߾/MQ4|6EmCٮFCϬ.d QQn%c>8ĉN+zb19oooc־pT9oj "uň?1N7c tjU 2|Xր^&_&֌5#*?$bԬ熁ƶџ?y\~&&kƚݛf.22G ̋5c*fT-d2e˖ L&NE7ci=!KѺ$>5oBOH5u\,gߍw\D)ؿ?:{J_\O7f8by\8q.Ic_rq=֌55SNMlB߻w/4Yw5CFWJJ(a*np/kmP}X?5?z ӄ1w,\)U`^kV5#3?TZŻ~eFnǔ6iv98+˼5/-݌ˎb䎥+#Lig̋5c*fT5gY,*d""Bcx{{?z\g|Ǐ?Ϲ~k#NTBTV~p""3'"bˬB{.Yr^- D/_o\jNb1DT(Ay(HR 1eV7[?t^Zeݚ;|L9߼iSfiم1Y1 nS^◩6l_UDĎIx/LӦM_hݹ"js %DVz.g>DDU:mڳ AֽvrXCZNǭՀ>DDթq:/_Fv]+B^!qWZ(Ӻh5- {1ϽK7d1 $]lذar;t1~Id"** ڬXg"`-[%f5"A&1mJ#"v:Fbe+Vh뮄BI`׬|}mԫWuOss78(kqq GMkW~vq~AxpI/~]Lg|h8jZ<;vRdzxA&~OdX~/v_iDĎQ ׼q5S7Z.A^X Ӣ؆K]wX%/]Ý;I8ύ`/@552~<~o;~ OSur@G԰x&ealgBwkH@~y2"2RӦM v χNg@FZ2ܸ\A˶uѥkG;rO 6Ѝ`=4ef4vY4O~id% U圅P&Z$b8ֲDeG"!& 72wŚGq?G$ĬmPoLn C.Y^z;Zc݁s*""IA@~~SVj:r\d"}/w!pbB}2c>~83T}ǏĤ nh7yy(džToIP݊Aevr}ODTTD"]{·éJɀbNCF =}/CY*b^.X%v>yŎ149K^x'/i^q!"2wsk/"?uuN̈́Kґ/€T7p~dC.-ħStCwg/g k(q7- .ήXl &OeR[ֵ3oXךii|Aߑge=2D3z,)""sODD95 Q5RpqVDT_TBTDD1ODD ~""2Mm&!$""?1ODD ~""bDD'""? w"11Ѭk^n7bQweBәňcyth4fإRi,^ج-oB ૉ'NSNh4Xx1̮?z(záRi1ЯOD C3;1ahf9^CD&?%GoGVov舎ou,qUaOn(.L?{(ѲeKQb>LGo':~?\_Z^GFFZhyUp&{bv]vP3!a! 6?QUt}zJL*+͡:OHǞ]xס̄Bax޳]=ONĻA ~?QUw7v<!ɑfM,} kNxyz!#=V :u ynjE_BQȍX8=HVީ.|..7v<֮[ Hx&M38!xAFf:6Hڶi[ⶾx ]/ ڍYE.#QQ+ fC-:b~DRZd5v q^ƥpR2d.6ƃ\E?;~"2pT ڣ522![/g?``2нLm 蕃 -rzL/#7a(n4q"ĺH-+gK?Uso$N\ns"ڶ}ʸ܁l R-{EV㼀M_#rs4'k'y1ؿl&:fRܿS=Ddri៖ z|drv e;H<^W[8D|7'r?ӧOapum`kk[[;ՙhذ!N_?{7/X+)P^Ǿl l8:-.ZEW }yEuoo ]mfQ"7= 1f'"*kIܵ.HH.]` 23pj'w@e%oie\JQCtB>E.igFq41UsCq~.lk7D=unGAuB 9,3U{O\ЏS#<|++kܼy׬S' II7Rÿ:{XfvDdbb"wl#233`ek֞0 ;&k׭FzCzϰAN>lOnٲ+'"*& =TJaѽ5z)))0 PX)0xPldegnݺ>.ௌ`\yDdra5klHRܺ ξhiiiHMM5~)999xIDĎ@Rifh4CNN^6%$$$$$cf45`d=d͚5~DkJ;ݫ>FfCI6Fx,}Oawf4312 u&VJ`M<]c2yCv:HԮx1ټǮؽ9߽#b^|Gōt]F{zG{ca,Hx"-Zdw4zɼ񃈆6lye K_R@?!!!ƢEv$Bm_M4 K?-k%$$$}7ce0V>cS'Xz^@9mNHHHx%[1GIVM f{_٘[^0Ėo_X} L3[j#!!!!!a̟?H<%$$$$$bpYBBBBO"f <%$$$$$bpYBBBBOy-v,9s F5d\C"zIZ6g0Ure=r%%JbIPC5R)Fh9eqDiBej Z #a(hm1J(aіΠL @X\,V` `Ap4))0FV)A"Q:`)Yp18ܰPB`d~9saQcU H&-b1O 6JhiQV H@"  H -& A :h| F[ Ƣ@ZEekhp$-J(VXR%@ k!05x`C "^oG߫y |b&T*&Om[ĭ*E. =\$^J#XoBJ5 ,"m>44 OH`kce 6&ZG⧍A!<|8%%X|b}#@\!@bܪ aY)^Bsc MǤmm˰uM`@(KS^d^G)R& + 0&Z4Qף J0ZTL:?hBڄюւ뺄ac "u#F A iQbR1wT5!aXn6!Y {ĨZ]c8XhjI!8q4HQ6de\9 [!u1|*6:>wF*"0X,-$td ]hрD"B 0dEU8T`"%؅Q"EŨ@sKH<#;ɚ$̣ 'Z1H}`T񼀪 H[ 9׉ƫHK``#uthE[ 1ڀX"D⒲ %T[Hc@Şǰ_oH!1X!לSe[ %6xHGXk9/^x?Z (ʤi2̋~QOh RI7K@Cc\6K#8@]TJ`O:Ab&.@5jXyLkFb@JA76BYMRD"X1(}ſiw3J E 1vٴaNJK(q<cpeA:0 5c1ں(ݤ #w'Ԯkr^NY˖o8cز 4 U?*1P-m A>m9|~+VTIg %th)AH 䅄*0Z#daAH)w j! `tYX`_` D]~AHUjgM +eAZKhu E-]~SU<a-ʘ ?fl޼6$f{ VMm$㎏JJM5DbV0' i VYbHPj+UV X)hkq-`0QhCM(,~5HE`lU+AD56=XCa[!DK8ʉ0+06!P"ʱYoo/?z<#Ns8m=z{{Yj7lN 㩧d˖͜vk,$Rխ 9s8hkkC)1R`{аJtvv[o<݉% ,yZ[ۢH0U} g4FQcdTbIsIUAC"^R R,)d &`BʀjX`-HkBE@Kho,=FS餰FGDA%&ǗBbeݨ9C|l6C ZXt)硤BXCh"%$pl݌ayW^y%-" a"](dËiK9S˟{n ,~9gV1^BBk-7:lCF)EXg߄{͹Sغu M◷pI2{l>7maYr'p&M~Og|_>| ZL} \B&~k-[׻dͶf. ?s#ZO]%=ή+=3|ݟnӣ_]Zw]}yfV*yPNSSB31B9cBsr,Y[`bK ]4_АH4\JCrL.G} %PTLQ,Ne/ge;.5jADIB 3p0P>hmAX]D l&E1Rd:m+Eݚ-MK465?@80 V E0arj/B+S[HaAz{{Y2-['? _yGeٸi#<0aO'&O=;. G8aJL[ZQI^T1qӺN371hok3,7[˟YƉǟTloK_2O>?B[[T c jc 2dWǏ_W]~p.׭ʎbp_9b,WǵE#wogiqXrbsGoB.W(You{ Q*X N9{9X'p'<ѝƲr }EcrYD{S:gj]A[P)֮ࣵbLZ%VDۀfZL،H(K P(P$먨sBjU 8@H@`$:_SP\RZ زk7Q*z8*r aB00^F1445\E1Gh5FB"l2:;;Yj%V&MȕW^3!~rߟWdq $ݾT)1LtƓT lgc4--|[oo{,\x߻{8_իٶm[оxRwOwgCIsYv%Z#x' 4 ^.]׏tqSFm6:}\m[|3Zs uq3F} wqMMMzʩ̙3u}ӧD߯j`xzW1->PeE!cdTWa"8!%J1: 0.- 45S: e0HEC6搾Ah 䕃FMJ@(Qiq,Vw=V#mLm!L4MUB9V`uԇɐ5(:V _,aZH``7nn-<)H{{HTrͼ]$u/uiӣ_`ZtPb7I=k-aCRX,s3A91Aב4LJԶ,߽;k养\ '!7v> q /I3xϻ/`G!8m }CDm{c(X([.hxٓ#]k)R"JS*w-׾I6U.tJW 7Ņ}??=ٛlw18.e;ߵWWzهfg?0 vkq S;wز={nҧZ&ϻh u1c&hʕ21?@ MUͤGi!Q<!- .>Sfbs: #@ 5Y_&i{=VcBA%tI4/X(ZQhJZ qP֠4KyDH h 8PJEܨ B T]yoX\%b,N91rT6.%XzwSX;~n&>_'!ϛ7t9K>.^N:i8c]*Bj]<+uS4;;xS~EJ\HLM`xEz=w)w̷/bHEww7_ʿpGO|>(zxNჟ](=kynlkלGv475s; 7^ʕ+ܺ-7rJΙ X  .>0jjHϑq/X@`qAI:8JaZqdC RJ<477jk1c{3gymSN>c_uwgP6-ͭ\64m7CŠ%79*?==,[?n!d6Ȧn 'F>=>i(ۋ8x(JR8)3x$F@J dBH #DCfq/BKCBmE4ߘexZ{&-EFJ ҉DԻʆ1Ԯ1 H8 -,f}}ІqgBN?~wu]7[-^qF:uw'bֶ]uc!JT*G>|GBp2 ]#ޢ}455saGrճQ.F.*3KG" kxD_*AI[,T5{Xq"3F Qg4Hڊad#2JʳVQQ`"qx>LT#oq8~'v{,)%_\cx!ӟ쨷/[j3^huDCەuf1i$~!_ӶZ~E332 D*fe=WèTx^PQ_?DJ*_h,(6&9E j)!4iCe֒e=I1䲊0p0#l=Ǭ^|8pPN0"HR My$#%CXRchyFy3ce_]])N,a +3t~ȃcBǤoF99gt;(YP+lh ʅxJc56)*0 [GPcR)QT`!R2HǂLw缑$9ow>;Ko~ T/ b{X!(Ldj%JHdAHAl-Ft&$#|߯ڎ / ^Yg D}f!JcMX~a*^9(8(z5{?i'qC'B8(Gb!ʑqW\TyMNH5SLZ_{9XnSLaڴ>L^6l L8kׂ` Ӧ੧!ܹyG9c>J9#<):){U|J#m"O}dJuXtww3sL6n& VA>x!kKu m )*%D!0&\}&&$$$9R{>8y!b4L'λs!wq"y.'T*`H+2c.v(+W<33grӦ㏧3vsx~Mϯg΂ض3f2e-[ʺus's!>t+]A>C9{L:F9⸣I;kViS/oëT1Ja@ba/]|e%$$$$;F7f%o9bJf1h ==ds9<_I9L)ٔCUBۨT+to0e>qdA4*JE9h 1`t(lXLT|h̬ŕkf604hh*G1k<3mںL,+F`E ƊPRRXI*E9U1!!!a_2*1D UY#y *eDB$x.2TR)(֊( QȸLUٸ|p8Q"8&Ds6*@-alDMq~1E:H-#+,-)ttM/q)( T_K/ Ƣɰv]'LUVɦH`N `A)OS( *pڜdO0c,H2'Gol)c"} bm/x|bZ5h &I>ʐUS83!!!!ax:JX_o(t$JFc\JJdif‚SJ \2$Y!heNb`s hZZf=;]`bIhim €VDctq]F))dl|"f QY4ko|T-V-Y*)Gv]hn͓(Upr`6zqEH@9%ԉ,]'DKk [ŗ+7Ӛ4=? X+9iw8l GR5L| A8B˴&*lMZ̘}sB m ^z>ϭ+sW*|K-}l޸7vUi<9N\{]|T$bX8!%kQ/rY֯d_!M~׿*]tu3r_nbάYly~3|N~ӫظd5]Cl&m*URJ6p g,BKr|f;K?w{c\k'U_aa;u^7m|p;w<9sA ˞p/1qwvsPX~- ?&$B0.ѐN88"DӈD +Ƃ7M6#v:O-y;x Z;< :qmY*~ Qv4g#W,O.;G>O(l:sz#yhΚOtw!g~Lņ`0mєEX~į([d[&sEw*w?_憟lz>y,gV?tt=މZlP/ ݒAwaiAM.ߌP։-T9Q4ǜz4"/( txUA&Kq<'1\`l܂@&(0[/gяJvMI 2yߴ64Sɇ @X^Z_v+x{^Cu9Mwk'?yh%(uwq/޽g VcLc` h"O稳fʖwWNjLa>~Q+ÑgŚWJj82Q uwF^EZxY`l}ݺ /9|T3/x瓐rdTnS.ZT)$=5#L*.Fe֭/r ]ݚɓ[hJkl6xè(|_CS$}2j<Qާ{H3]kO?.LqσO_`_P-  #hif/R+ VI[p& Ӳm)SNgVҥZpJ?dZJ7H|7 Svff:t) ;$ee%6 &,?[;Z#_)uoesuYFn9)m 랥_[.\qo)#e-{kHVZɣlE:͜7U,h9vk?{E?p3mk64+Vv'*Tbņbwg9O`9rgvz6T, A:6[=?BBKل":)e<{}wśi``N#0]#I5mCUm@FC58@ lGDzŶMq ??7?-&7?XB~cϏN]UPVp] E2ӽ)N-k*PXI-f^v ~?/?](+@T'GxUë $qIe[M("P[YNYRh~}+e8 Uj'q~WpB!jqS;ua?v\k#?3֭rFrPA3&l mO%w[]׳oy3PISUǸ<QE-V&z4diN׻1 ,Z,Y쵩[&Im:&RQIrTQ(5k ǩ3"l3ZDV`*XHF,$!iFQg}B9rOũ#2~:7E~\ U8|4 -"2AE]T1~~Q^6WRS[Gm$ ؖ'-kjT#!.!_뗭.aܶ}x.Z6?-jej>_۵Ys5K.ۯM1}8kSz%i=OgV} @[ǚJ,ɨ[K3$4U!3we{]ckPo?\LdkOsD;nuL-*V7r$鷨M-3 ޠb&C.Nu5$RPb Ƽ,Y?`ѳwF]u CvA&AFU:6 q.˪87L$q,]P +br}{ѵ]X E =r<+ܟ[ߡr#~͏f=To@]I0;.B"1P4qt/ZCqV7rKodڴiyͮ2ydJzFp>F^z?0F$e?s }-ۨ?Gyޛ\u3I{6ꪖs\m-eסsօ#<X8\: >z-qe9[B,sɇ09S-uQexy:z)ٸ,8|$\ottaq\1?|Г.S26Lrf;opI'^_$F)))SNgΜɘc֣c*:$YL(TTT~"$iIK#X1H4^K^W)]SB8bh.׬f. IDATy~z%E$qTe>t)%U핋& J9 Pxe)6O|C ?.Pl -|JVN&AMS1PFic&0Tk׏.^,tvZƢEZLh&2IE߾})))i[ \2BmMx, .hZ/?]Nڲ*"V I(Ax}:,)J鞗F|1gIfF&hzl*:H$J@3KKMmUS)0Ĵm2;QUQ`( e5k޻5k8֗2l|/ٰ~X]ZWP[Շ'%H"Ptx+iXCMe xKEq,VTzF 3}dxǒ.)GU< C؉TSԱr* Y \EV- 6mZCB[e"$IjAz3j>=$qD ^\!PTHF< _Gbuf rh Oز_:Aid2k <^/a:#\cOjDu3;¬XQQJDmXRGWt&(D ITA@SP\ ֡*9j_rC8I HTGHf 9AP]/ݟʩ5Gz/rYl%$S',-,㻯ײli9n2MkRTP W0#Q̤Aph p耦&Id;twM8ܟm3n4(n/Ko$XQTyz CZ٪|s?4};oȴ>x_Kn7zYW398Ԡ7~6m^.L1\c6rl\~Hq tr#dtҰb~51CAj1BA/@<钕Dj8XY$3w}RK~qtx]8 鐝[qE+CqtqsGuMxM#G!"'?prjbxlqF̲b;E؀P42:e`~{,>,H=};{&* ݌' Ͷp^}.~UEi;SYsvQog=s VύS Ld25iWnLqU@.hH,XXVEQPd!\bC5P4>/>AfL@J>)I9׉G'z еgzӧo. y0+jXGb^O0;̂Nઈd ]AD` zTԀҩ wb17 t@Tt]E@EQ@?XUUK$#L3w 3܈k1qqL8VG֛˱_D_\\Y\ȃo,5˸ Ntp%.%o. 66Eyjx[e}  -7r5 òCtKy֙<'sοċ۪hoT|_ib\!珞U?HW4a<'L[mcs7Ca9Sڧƺ;xvt_eͽidyoo6%3'AX$b6:5p.xhx< '; DqBidӽo/$ EAje'?7@v^rld]eXG$Q47 PAZZ.Q4ç.Ǐy Bdu.r8i9t?Gwp階(b!2{?)d| XQ)|3k Fx|J sKx!V(.УSŰk;Y=l{?n|7Lu˶q vLwkTLGf.bcpԕps `[_q7̳=fe['mo)'x7ϵ#26X9<5cF0ڡE?/^yxDmǻ^;>h빥IA͜qiuoJs?w\wv`xtjk*qmŵtxvQAmM`ztmĢ1H&[A8j}Q*" ֐ǧc(PlTO,%4Q5ӬzC%ytןi%P4x[PMs@S<tP,E<K(3H^Oee%(ʫXO~ DS \¶]b8FWY8+5~4OLsn=GˡLmq{;^|Σ6n(߃;5W=Jx5v_GLrOw1qfŹ|X4U_FB'\5Ssxn7,/cCƳqˍ v>yG|n; lSPSQΚVo*Eqk63~t~̢dV­럋B.µv/;rwx6>h빥^b61 \K{SqYb$BJJkRchuDu۲Db*vqlDc$ l!M EKhp\PI3A00Pu"u1?m*.1IKKrjtDFn!iա P0-0AL3j8nEK8_M#=+zA j<g7KY2*ך`=^jud迂a󁷗prsh>˴~@fۚ t8o}å.fyS9?btpwJNoEUTƝ܍wԏȱ\ɼt\^MR,k5Y8;(`o/zm#;ٚ\C嫍 zmt쎼4yWĘ =~^4WIJ7c2Mlv4cc e*#HE<A41<`q~ЫgUf ʊ2Ƕu1H$b(ŶU̘J 5+]j;h=sP /x |%A,CU\\ 844MIi\TCZ^:\%ibǫD,B 2'S|5p:Zf7J_y#4ij01|(7\>x{2ډ60f^?8p7:\!u 7\:U=}i*&ص_rQ7-|x#r}@>3K870bQ9\0n)Rv;e=v`k6۾=ީb0joz=oS9mu[ϹO>-W]LB'_{s?~7RgAtOƻ;j@çE3 ,!E]]-MJ:$ ^l ͣccB(;׳g|Z"q8>NFFX,W/4M +4*k 3F+"RgeYFY ܷ{d e+qQ5UXTCSn WBöX0 Uu([gkp"yl@;YCL?oNSeoO=z/.] kIA.#3`'bIנ22 LLŇBM-u: k,AB$RC8DjE#\H$jPd5vR GA34"QŵYS- BCG gj: 3YYk <>a:LJ8nb#X&B󒖓bTH6ℌ XGөE^A|'pynJ$WՓ1KiS2MDq8&Mm<{&?K0MGS2I4>iFL?͍p]r $MG8($8i!*ku hTU1%~HA!e4(x GXvW,Mؖ7ŴhV 2Qu%ݏNWzf{?%Iү<~mJf~Ç E1j<Ú؎֡2s;ohUU1zd9Bu= 'эQAɤK4jS!@rXi.xqAhꐙDIeZ|T,b˿{>C` J"^.L|>`.Gӥ:Bԏha^4Փ4-I$mlFo 4_EuL+ČX(8{u$ 2B!bIb!*4Ӧwgb'T*7qQB8ag@ߵ)PT S(h_LEF! x_:_{oat$můi\q҂`+~K#K IRdI$iC'ʘ{V^Mmm tڕMaaa+rvm{9;8_/|ڴM8CvRD$ڝ}(G@~~>@QV7x`ZcaJ|S{EQ||2[bsgʝ2IԤv%^ɰaG^dJKKq]0dgp%̝-/<1q\ץ!( r S_)..ۡ2~Nd"<oԷԻK0s)S_^ٻð#G|!0 ǃ(8C"=8;-Ж~"O_'ϸawh:رcy۽p?q PPpR4D%m=̌}Yzx["&I%mJfeeeD#Q{oϟaõjQ0 \7QUx<駟PVV5ogVqu7q@|W+O[;l')pqeSBlJ^B'9V\ʉ xV׏q[d"ߜ6f{= 6*"/7=zӻW_ :SU]I2j?H/2w5ҿ3ߋS.ٜƎ[>;v,߾W^|.vZr: .z[ު^gsW;vv1JAVV&in6mYmv%⭞Ϟqwj[7'f⅜u[?3`ۍM_\\K"<ƹ4MkV-SW^]q?łog;iSlRYY-҂!~'90viًҥKm Xzue~TkpQZw>|xFG'?5?'k\aL} j5≠‹/ç"yyy^^^H](~;;o\Jmonx[v.?gm9e\.b*.;o!o_S9͸T[#?q_{Ojs}$ڔjkkx<\YVVs<ϓO=nʍ2PƮ3 KW[70{ȫ+_y~U>ccwu](PbuuuB!FB04F\J_6'Ig %sfי6mVlvv͖w\~ .~JT'sw8s=BG[zL_[ţ{Df^ d&IvflHf 4uQ0LĶN!}uQumu* .C}ϷmYS{yn[=~Ui !ܦmKQQV222ᛦI<:[ks/2;r]?DF_ 9?ɕpK[&GYT_6%Ldc2kx~I2uʕ+xX(D"27}o넋r ٯ ~S.1f,5];yF {pQxG9Z_]4l7}͛eY[ͳmqZ۶&++]um鑷QX?v9uGw|=xs1piqzrB4zkXuAQU]4=hB֮%S'fF$I-uD}`0axYq"&k \CPB 6[^UUU%I$)mJf*3oEͦ&@!fά9y $IvJ9:ߵضbKzxd{b$Iv;3I$Ij7ysNI$i'$I˓L$Iz,++U$I$ilqlI$I<$I]^]_}V\A(N2uD2ddSz1m\އpa}$Ivs)'3O^^^˲p |^lxI6B+l$Iv8~T1M۶QUӴ 0<6e!:(G$ir|wx>[?ضib1/Z[oB2|>4>U8jP^O}U[Ҳ-lܶhn-#br(.9;%]$IҎH9sTH]ǃa:D sO+3 6[4(qS& ׽H8V?M㔖mYkkU!p:}^L:n.[$IR{228qxP>UU.+W`ɒ Qu0^gߑҲ(%X۱EY12}z<=Zi(dtރ[^_8aj Mrwzq^K1f9S&ꈗICzսr%*?e!jj[WfĐ~]:G?I).I*,\0O>~h4xj4M4MqqO3N&=?1u$ß 0Ç7́->\;QipQ㼅'mtu1OP3 -WS_^8ajkMտ#Xpz㬖bxh(=Em:&?N7QǃǜN00ySyIg_pҾ9nO_p׽Igϒ%In/ D adff(*x@ AS5 u{yi=v4iZw-(ҲxZ}>t25K5Yǖ:<ꁛ8m~86_!Xl9޸Ӯܟ06sdޞ3q~K1ܽ%*ïz&V3wʈk *Ѥۿ Nt4/c5λċyg ;L&?vI$5%QG;Nt),boȢg|,Zp-HUUʡk ,g]ZfK? 7}[VZN(-Daa֬^c;XǶz{d-sˎ vraї}K<3gEՋ[g;ZW?UH<_xAit?x<{/#{Ls랂NΈn~` ۺqieo?乤 yh\W<.!ݗe/1u/E2_LCk2>3z1|R3}~s;?~qI{SJJJԩS)--m9w\֯_ȑ#ӧ|M ֱ~!b6D"A"NEcx)+[GfF#GK$ItRf͚EAA_}RRRzݷ%?P]QLkSa_U$ݒ$IR6׷ddfʢWtT@MM-~c=}B]$ҥ?)*g|!;3~I$IJ= 6.B A"sa`?iv|>?ejC@(-3$IԓYQX$I$]Y$I]Lf$I.ӌ?G$Ine&I$d2$Ivywu7l3 !k(Z¦p]*/P$I:Hibdyëy 4 04!PPqc6$Iz2vXRq5 BB PDSIΦC$iԮkfDYIṈ~&#Q<)54n|l+N:tO 0kXtRZGġdmwr(ͣa}Ɯ*O$Ix'3Qep'8p0Eђǒ{w|YUUUOW<ʵ˸w)Ni.VrgrZ;kߛgsٴWYY^Wiwy$I料Kj|G.8対!_@WVݸ'_qiսp~MO~y;U󁫞Wu:؇ISg5.潩W3d`:l5?''殷4_dntN>Y`9Ta":wPf-tLMu8}^2g緿eBEe]yXfUU~f'_9+eo[5#8ZGW;nIM/ q+=xlHX0k!޸\VJC;H$IkeزFFqh}W?+ce((;9ߥSqeJˮՕ? cŸ{Jk|iy㛟H:+gJɨ]in=oe}uFθjnfVv&I$mֆMovqԏ1Nv~Cp Z7^ lE#]O8V6ۻ(ʿ wM%*F "  RBP䵡b*%"JQJQDRTP }?B6&YHNӞ3;͔bP4|4tMŒ8xfzct5hI;bQbF1 .|U2FlӉylӗ}Uڈ#">>6رcHJJBϞ=p*/(7'`X*_WEw2Q "\ӱc"**6<<<1113+OF%,(D)/9Evآ HB% KT'gD5&T@Фu44 ʞ[sIDDDҜ≯I}U IDD0#""sx_ބDDD7ZzWgFDD0#""sj{ZU%W}GZA(5LpA* qqDDD%*woFQ"P%2QF0XE䚭H7)@n3*J*jhhh5*D<Ź|.[ݦߜ>E{C#RuuG$N6oc1?97CIzhC- joPn<tPJ| `W^еu=h5x\2X-$M›[N;E4y1>jruЩe}hUj4k钪-Nu/B|=z}7moM-Qmt%'%_#+ u?v Iwp^v)"D;w"h49r 2#S?9c|< .JhKŗ +vj9F mTQ\_z,]~2zL[B1IMF/trq0.Uc` yf\< })Py>Z"rsM8w:uSWM}#*-:>ԸnE^-*_ =hTif=SAHx'j"e S=MUi؛RXf0?۞eWYCf㞈pSذ-^\ߩ{w:L9tJ&wտJ޺:;~ [Eg{UP[A7Gv-ۀ#C;OIO?K^Xj*lvt) sO9@ J(jb $\JE~J=i~bgߩqk~󺷀JB *_CC]Jz1L8L5K B^e*~9=L;o%O'`vX޲C8cbȑ``tG_uj>I -tv޺< q0 P(bƳsa\CfEg!<W1!2mI.5_y|]5E'cW%WVWOZ*mIWD l֬gNE (_BNy*tG ( (`6[`}Eu}×M5-|d&,l^hClpmAƩv-VauYMyi ! )FK镰Z)X±<#jj 16Uu4%[H-2Q䚭R ,P(HɄuT?1Ci[J\(4OUy. 6AXU$nz!k*m=z]jS_nH1_{\mK"U9sF᜕Z0$]F75jQ*ъ ] 0MU*<Α8>Gƽ& tVE!}v6*s~IB>6"mp6JUeR ŒH6G7FH|9?"xJ {2%+w.+wVK6-c[_~9j7_E܂~K?燣%{\u,^.3/JhFnfX*O Z@;P;n"|}(ϊ~ƨ>ol*Gd1ϦMx5/!q`4 {c0LÕraB Xz?.3$̲۫J',D)M~K.ٝT +P<  ÜΒuI#o3 ?hbfFm3XaKî@UbFCKEj\eKWD **磄 $h *Bh  @hUZᦂj ҇ABAnpV|:SV?o>;UjثQK."nj۸{PBÎ#r& nzav+5 IDAT쪒j;Шa\*֠NG5nh-ΗKj]UC> &C٦SX>:X4̲j cW"[ ) ljlw<[2zZƕ_{Etpِ>CR"J& V4m膶=FrJH 7.DE%|wy/'""r93ogɈfw!R U!9gBO@4(UF{CoH/I1jὌr:̲sM` '[upɊoePX85 TJޭn,,9%^Jey ]@JY9 "N FZ,Z@*%̈r:~ʸDDD0#""sx13S DDD5{fDD${ 3""=ɞӗ?T-Y!okQ1[fLPFB7;[] "۝{fWdd0 PFf /,@FV if#X 8[PcI7N'̚RZ#NٿgqLdXɄF#Λ,H-8o(B"`"BȓkN+/6 !uѥt$,WY>@oRG FcojDts:N_wR8y5.O؛ 0[X0Y,Њ͘ ǽ?c\r 䌃*j]":Kī8bFMEDl5 b^kij(JP ]cEj=Z힚.8Wt0"2, Kl.Nڠ^H4l6weVhԸ9Q'(6DѾIp7sǫ_b/_1J*XW ;7ݗ x A#իع)8ƜPpGXh&{f٩,njN;"Zƽjt_Hlnw#奁Y-VeCLɅ)}j RtmC_ϟ򪻷2gb$< CB<؟Vôs1l/C3hLW.P ,DK=mϝSBK.qGA68d*&ߜÌK=>膸otmv5VB$&fPhZBѰ㪢*#hk3[ݎ!önG)>> n ;ǣ֤G1M} @*qilލrVzUGExfރ%zAHt7l|n_NC: 0kO|m9Qحax,oU CvY_bbbX;v IIIٳ']OxVvEAz ,<)Y&7^*I^:|C/jtph K't5DTMرcBCCeϙ ?#h&utD+ PˆmCѭwZ"s~1"{t:AQ.nf"7_l#kaaB9F3L/!08]zG?-tl|^1F7Ntq:5/R""=Ìd93wn ""̈HfDD${7$LX,Q\fSsp&-Ջ%""a{BHtbeIdRKDL!Zqj.Φ8V[w‹vṵ+F9\~a^AR&w_eQmU˫ }?>~# UioykLdKd6#Ђ5{.ju|LE ÚpA+Krg\|-ьiޚ7Eh]OAtIש V7CMxpx/cߌ1ygK!-\f'SrBo<<.;wWA厈/bkˎ( [\4Bׇĝ* Zɩgg[0?( 0Wo[}y/z&Ovh J&aIX^:OlĈxۿ-[K.X~\(h2^@VsPzW0Etx(cmcAl(SzY<Oco!O&I|*S|ϴꪨuwsf􏯋n~٫Ӭ$MVQ/(V'Zƭh6Ry`tg N\x4>Âb;Bcc~7;9bk+Y-bZfŔ.*T~v,$>>^\te˖2y@]f6f剢(Y龎W^c{}yb0QD DQżkEϽb*Z->Zqբv52܂t!⣯=*t{]]j^皋?Pejsh%@)e3tHmmuw.0C\ßvX.1WÑ_ N^J1`)cH,WG5굶Q }aѭQ0dƩz=SRM=%r>~SOsCxsuPLߕQ}=̟x V {%Zu*d фIsSB,zGA >~6Q_n#ņg,c+Ɖu}3Hge}Xbg_,KM1+N{- ɏ~nJ۰/k:׋ xT4m)Oئ b:QPu__d?KֵVlt(Շ;Į-BE{j3*Z/(׼*k"j1Y;Wf_xZ:Y%m0#">>pǎCRRzf͚ KyZu]tbx+Q-'BZѭ̙3رcBCCefyhPG{p7%lRjdAFT8b/7 ~v7>:rG`E⅑QPsNDDD7Z ҃J<3""=Ìd9̛QQqόdaFDDwCdqPN"""WqyW/.ّ\|u:Ջ%NW%T[z:#r B⯔Bs8NNCPH]٩fvu9۟sba?Ovtx=t:!XbMeS*uLu!lFAcdXϝedd Y|t N/g?9ʒ6U+m7%##h]_>O| o|L7Iqm.?+ڻֱ3mިn. *=HbS *74mlO-:bgӅ%O5FDX$0I:nH"imsۃM~MSa?KEߣ~~4Z4zwcmՙ}u4jZE8yw[=-Q'8YjPң}*cp{}(Lރ~@hX SWNîةE#؆!hÞB9ӿ]eSE븲{fRqU{[K췫yh[x!!P}EC]aHOOMӱxB TnM'&>mTDxv_n*|:)\sWbim~bޙhl҆7| ÊVWQl@>}bɶ  C:Em) h{~&ى83# ,kQ a \xK_U R7N!-BFŋX40nǕfqCQ9ZǕ!W'8|8g1Әݥ>Bݑ7!!Gvte>EKAZJѹb1b* E h~Ο -xq ,x 24FKI%S%_-ށއS^ _˩T ,"Uzxp_3Y5&OѪg.9]vj=[Mߖ-h!Aw9u4 X mePYikt8lɧWzRr2B5 Xt?u\MGKmyn}8=g2 йB2*sa5:z./ SQ,:21uOC|$ XD`Bm^6flWY?qjpVч$(!%NRu3k^G+,޻LW95.{.wC=G}GWfK{cǔeX6ez/mJ@D%;l#tSZ &UCF#izH>L^_{ ̻;"6MncbμYgSUJړ꣔~?|T}Ns[=*ZǕ%}T'U'bd*F#_ `C+ 6k?›JNγxXslB:VwBa[Ԙ ֘F J*K=m#`AFFuHp`X<SB Mrdب5/J|  Zv’/K(e֕x4m#ϩ\iHb mNX}1vrw,mCϽ qeIm}n>gU7.>*S:Կ%)qf5Ц)8Ns2R3uԸg*3O@f'Zt:AQ.tyj_6H_"Zch ߈*$媽2~Ht,SN$"Z3#""c1̈H3uٕnŸgFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${*G9sfADDTeacǎUQ ={::vXyΌdaFDD0#""٫uav)4k֬ ""qxi~mWt0xyytDDNE]zݺu`RnyZwFDDDMBD4YFt|!!!5]QqYYXW-i>h6JˬUIDATKQp7&x7섻{MJEL&@Vp%DDW=G$Z5 BPO/?w.wEmZ%صvZ] "!g&Z-9B ,># Aa΁Em~Tn$))醴UQζUi]رcζU#u(>h0 \X-&tnn9a:'˾B2jƔ|w3f ..uEpppCDt#T0PBԵ@Rj&.\4 ]sAr Wfhݨ % ѪQk՛a;qh}oo|z,6]hh(,F 44[I,YhE=2{;Iˎ}BtI{0K[oaUХdƍѫW/#88zƍmЈn C7+VP{Z s^",tXͅ B4dJ?[S,托mӜ0 ԅ v6tF-L#)) bωq ;cv<۞VRRRqy?>:np$(/\Цj0jʃIp׿>!At<B<{]U%&^)3oqo/HDڟ{7<E߻N7""a 0 }IlJ돋^O"6Y| wARF+kwhĢ^axhmwb둘kD^I71]=_M|q`lÃJM׻M|00 eT.VU0kҰ# o@Tdz =Q7"#-.Թg8H|#2Mݦ9b!E:jyKn歸/ <ئ ~,J.7|2vcw yچ;<}WS~lX?fM+PyWyYسguكwf9-ڣp=| f}>*3R 30ZL(4UDQtxgʐ]`K Vco1V=F tFmү^GGՈ߷LoAOU5gxyyt@;ǏK.U^.QmS0S*pOu(((@JZvV3 Z:| S!D0C RpEhh(R{e7MAFwZ!Cؾ[3֊n%ҴZ/1>\\%lݑ\ 7MB<`6coNż w\Wy-!Hq biG>; 0iڛ m$쵱lG7^47@Rrgw9WێGBj.~a 0KL7hG@ч>~Q{W@|DZ|:N7C׮ն8*KjTϯWW\~p.:::v=*ݿhO(z<;lXcyoFGGcBذJt6 .}M{D'J^z뇽u[?W^ >y-N6FODFEur"">XÌ1~VA`ěλ19>*~Z #HaV-ڃoF߻,}X-v/_NW먟Rio@Wa."xz/%Bot2O3otɸô5wF 7xmhHh$N~>O,V|aOqK§$Ni̳`VztY<ۦȾ҇uإt/uoWX>GKBwW8b'8Ѱ>ZDuģϖ|Xi R@#,%[CҲ̅mw%n-V hm$uSUuPzSWYr2{'VnٍK9XEBٯJ{m,~+CP.m%pv# n @~mq &؝^?* }6v^{]z]݈m stᗦŻ_a\?R;Ga~˸wtuq1seKG** V;S]*:p^{TƗ2r[: BL9 MRФ V\~?ҬXW[em*w^xzzJ^Or1͉h,3n_V`X{Ar#2! Մ~uu[BޢNYt{%*C*|s2V*ӿTGj[NjC˪ uT|oodg'ƹr""ZamGoOg8*Nק#9k^dw9}`iwP}<6|CS ~'e&Ƹi]% .mp &oegjAeHsXM촸G*ӿOuw_'Vwu;eY&o7ՃC;mK_PCe+0 vĒ'dիet$Y7oU?c֕gТÌBLLV %q'e *>gGDD1<<111_X]rWP# z""#g-jڊ_%"?g-VjF""ζgλ< &盈Hs$~IENDB`multani-sonata-bf88fdc/website/images/sonata2.png000066400000000000000000001416061500342040500222210ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME8s䥞tEXtCommentCreated with GIMPW IDATxwU-_^+"%T?*J"07l>o.6 !}w={;g܂;0HHHHHx$$$$$(rBBBNJe yEwy;퇝z|W$$<:Yo1V-˙߻zo?8)9iҨ_={'8oZZ{{g;lp{,j.~}|x3ۦ.m'N R`6|4kd0y5c:nuNPd0i=SK6v!}=uɍI H=o|6Mp ױ_;}ѿ?1bw=C7^6ϟ?Zm,i[%\kdp N{_w0z6SU_z_K}w 13n})-|#'cOpPiMr?}TWҎ>GKNmww_K8l&# ~#+w7-ñ&`6__-qa 9|!l{"a:UcUzKN9v 5„{}Ӵ<~iqG:}Ɵ5sS?yszR-b/>v>죿[Kj(Emjc5i}Rb^W9}+:m-!<ғ+~7>TWSO~x4\s Ə1+L(8}͋ozƟ^|?=38 z1{=!w~IAFF|ވZ_pk['bx~>ћZ)/)'} '_<1\m Ə1ª/_}3z솖&s6wiqE/5?h}i~ku.􎵥rRtz MiOya/_={1>gWH#hKniXr'l3ͫ |~Kkߣ~cXHeE1*9銋bd7 . 9F`E)b_ "m d$0r>|j)RJ@tcysy{O-,|N#d[JSc{@I|ݪ .#ׂ߼X'<̘o/2Rz'9>'~+Okog<= m$ji+7mj ~g:fv?L83"e74,!ɘYJ5MV# C0-y_'M9@_QVo+Oy3kE/76ƬnH](^ۢsC{`HG?+>{Y׮Bc4~slr~<i5y3VV +KI)'1|lUuS- vv0 ~D7|rs0ퟻ'nDЎC-B&%.~֛VۍÜ7[?9}GƖ#;zGN~sC>qg^R@cHz#}~v䷘"ƈ 4gJM Ql_޽KOsl~}٭zԦ^C'//޳i?7ūl Oo3L}NX ߞ=WiW"L՝w{?'B;߾֋s[^~৵+e~98 c Jukjud5W0Ta, j" ƕ-WĪ=ԏx MS $BТKBukcm"1!aЍip͟tF> V~s8b!D3,] <#P5Cd3&!Xz&jIanLHx2" !_;8oܙO^cS4FEޞ{ۗ$z#E~'Z7}]$ osџLS!dmXҔ_iҭWUȻ\)ug|W 'eJHH"'7pL=Y5!!aShw$H-!!!!Q䄄CnHNKb䄄w "'$$$$(rBBBB [bK3D|ӟNABB»]`޼yBz"X*PJJ8(%`BRJ)+7~w!RRɍe ]Q֊j@Iȇqk1#Fa燘]u]u>Rt ^(Nc(ko1̦.8e:q@ McDJmAm܊B SljPR @GR K^]ťR*l /T|k34̋=lK9LccBhdg[N.MJ RR 9) ac1c, j#E`) a P @PH!@H!$R͚=kA:M NhՍ0хPJ2bdsc=X|2􀄄FUxd9gnjK4JPA9 Tb|W 5mb@I@) JJH TR"H:@@(A--ДSI@ekHu( DUO=hm$`&$$@Y 9J) )D6u(&dRL6bJ-\8eLGQH V+qE |]˴7 k֬-z> 斶Ӛ 83j:e/$Hg .BX'!e&5̴mW}mW_[i2*K@BB B5jjI)1qcF˕N"!9R6mG #M$[ҠF 7(yX]  u M 2(5;4HSGFTjJ*8b\Ľ/, Y|ܼlSO9!!aQy[ȉ'r˥Vꅐ䑥[ByAhPM\C$J RKY G!!H m2.J%.EШrLxaJ (BB*vfMn5m4苜(:s^{RJ>lCs>萚Jիܳflkߡ[WðB}3k/1Bgi_9e;߳!꺿MR}Rm۝ɦxɓl|Æ.Ԋ{@KKK6E ![/ӾzbcqԩS2HD偮K^sGn?~l82mxwFM?m~6>QmyQ߷~3O<?1šv_]!c܌?qg;ABJL&S.atZgtL()RJRʘR蚐*_rS1Tv $Ï#S)J qV X׾ tH!q//05:-XtOlMi.1k=$]ע"2t_(V isSL 4eu"CT)Wahl}=vT5tI*,Bd%Ksι3gr wmzg^֖'|rk-BVsWJu2~Tڇ 넔CO4#0qd6EƆfg+b5KW_}ž.TO*!s19~͚ˊe{.O>}mZ*sR\o~6.\1 VhQmcJ?xҫ~"lS^u]y'=,.qgUd^yes;w4uP+6TK^:K5u]AcTq2i(PDZ|/W”$c\JYQ("ps˟ZUKDзt|-þ?T¨T 6`պyn JƂcR!X\NF cBpCӧk5mBCHm9jX7 @|ѨQgF645)E.{WuQwuSO?9:q]wk)?pߪU[p!|qA` )Xнl>MM -S{ [+;yܨ6;.wsvӼd72_~uڌa͞3h#ߓ6(5{y2+󦌫o&9CL2u'2t-L.:ioQ9[5%B(!Ŝ#I *V|% #@., kVj(yɊ//xkjúJژ1RP̙ڢQm͆Ҋ֧4RPT -MRPv#/aR6%,ƺ}ܐ nZ4>?^|^t?ɪ[|V{0gΜ뮻aҤɅ@G͊Qaycޒy,mhTٳq|~R(N9s|_|qgyZt5Sqg5MWUJaB?1B@55NBHm[ȵB( 񺮰j}h!F8ˆs?[n*Ł\.w?⩿}Am`6pcwے< Cc ;>m= A0ƅe(\=3WѦ6P{Ӌojؗe zW.;Vr=g@KM:CaE)+^໮1FqJѸF[țkqJuL L*Rq0mlʬ!M9ܳ\r+ m锪lƈStR N1R1)6mc ޮ Y=,f 4+{BS BHJ ^M4Bb¢hhm:vglbd *'YǶ+n%Cm ؂~ Z}Ur3" >u8gApΤlX2!F !DV?oK!UbS)Iql۠TYXEqT):;"{ jzt"b24Ss%/zAW !MluZX/HTz+;.N )2)N)B}F#y59@XxyCGwV-6aD!QUʕrűTC- 5%ۜ5Vw΢D=I8~%TBJ4yǞ]ζ PBIG~3U?fP949ciK"&T+1*fԱzȘXIq"?ꩰHI- )Qui``EX6kSs! Sw}oyGu]q떹!4g3g_;ϜE^8xAÇop!Ci:ᄆBʑb= a!e-j o{bdBǘ<=\E`p`?9{Ʊ%C?Vpn=~x䩿ݯ5y>i2!yPZz(^]cUG }ِ{i |/~M7.ߺvVEf'o+V]r)T̘R@0K(ŌTz#4TE 521Wè eRb:X(T锉Rq!c(cV*z@ ,60`!T<HBq.1FX)Zg\ "D)eVmL0b~!(k0J!dcÆbi%۶p"6\Ӵcu.}u}9ϿmvinsZ˺ҡ!w@[8c B1TKrg[8ȳ: ~|ٲ}֍)2ѥmw0b [o0wlv=rpæټ=O`Ovf ^Z:BE3.- U7#q̘(mjkj68bP0NX.Yڱ k\h%b~DҪcis|ƥ0C#)lՊϤEi4mjI_Hl™J !_*a$msW]Z bJRLZ}L9\6W[6G8qgSOL2uupЁO>ĔSMkrٺMCYWWng tf5.i\I)Jl>㌯\:FӴ0駶۹ذS)eyćjAR*\dQ"K|K'W̢ek~W]MY +1jgW'WȏDAsT=}%BX)VBVq1(T# 2R$X ndžiDÄJ$`k׭1 8A(!@$X0`X#n=зHG!>0o~6"ruyÊV143jdE}}3J]c!67_RnDRu`F@QT$F@zNA8?I [BH!TY0(ᜲm>qRaBpMLCSP:A9GИN#k]oIv*~26uU#z֗*s(HU%-ސ/H(s Q"+LrE,XCCn\{Sƚow[S!^Y! ;R\K3XFg_q?Tabc"gi:$@}LYBaԖMIԆ`7L)ilHM_WpA}4I-ôgv R@00L+ %ò$1`CCL]K$B+]jmRG] {ՊFAȊ>Iz@BBțE]0۴ `}A0AvαBe?C,J(W8E\J)t$C zK3YW^fC5LG7҈n*򺠿R0`+0))T[_0AF0 tC'$mO}/9,]I8Bj?hfէ\ vy7{Mh2YO_(K0MnG0 *cC#ul S:m0XXԝQzONvKH’J <@1VHd8baBj:&Jh)(F m0um|s `R[s]vuiۤ!5a(rBBRʶDž7eBnhi_zm=KLMMPjQaΘP,UB,Jp=ng2vM DX3x"!ERJk*! P_pC`!oP-Tӵ= aBPiD!57vIHHHykv 8JY 41}YCO/zEQvG))Ji͆m0wr^,dHReT&'uKӍ؋JEW.'!J͗Xx!cP@!%O>d'5I~\t &As Avy<|aE_O)eN0~Ҹ豗;ׯ!{^{h#ϸ~5Eɗ)zQL  xPfy$"T(j{"@eLJS;P,4V=Ðn[Ra&RZqSؐkwرh6m鵩zқ1y\o>J:ABBŽȣ΢m,)BzCO>cڞ.-'~.Ux9X"dZR5lG~`eweE1040eraʹ#5F~Y<}02)3vZۛkf].drxh hlHި7ߗt,Fc0( X!A08X˜Oh46uO-.T!Tc jʱ4aI!VJRR)&̩KA(ksB BR4JLשPgIN3{j1MX8ٶcAHHAHz@BBŽț,psLX X#ifP: P{+@T=s] 0Atv2QB̔(sƆ^SJSPI`ִCή8N Dԧr Y`aQT RIHHH!c. &mMoKLk$Bbr&7V FĖz{JAFR1HB(LakF(bVٕTX ê@!kgd AHkքmMU/T ϗ=jh6%P *$ !!aPȝSwuY QJr+xrɆ|}n52VC FR Lf1P`X)J֦B5tH3,DQ aB R,׵4OϢSH)04][=!g1}Rqp)*^D!I>RjZTΥ PR{AE(&Vէ)3Mئ&!3PJw 0 5:#(1u-Tm(0N6+mSΜ6vld V I=87MN\z3J(Ww]s]!7Uol~Vza Sݭ_t2dݑίo$DG+@mIvG@! XIbfh%$y! 1eL^ +1(N Nz]@8(RBI - J25)Vt竭s/8La_$,05%PbΣKRq;R7x wJ.6ufv%^noJ-@as_J8!Q1DRdp#QrJ~%2,R(T--m) /Еst_"1Hmerbz6e1PBua`$U3FQh0_,뵮 3L4N״HBC$D`"XtVn5MN{'<ɠ޸wroэ Ԙģu#gC#ⲧo篋Ww 7N3WvL~o?H+G퍁Nx^#B)%_Sw,@쾴ZxғzSS$Wr"+j \wh]8fד@J_wRP !3Km\DZR2Y~I::zzT].ЀAQ5B F*fC,HI (ut0DR)Ƶ؆U=sѢ%/(4۱- apm{1HqvCSCR,`=mz|q3ϿyM7/LYǟw珬s%?;szk;sս+㯹 }l08Ÿ6k\wK7׾ѝ]tw9[///W~u.ܯ]4;(6l{BB ]:H J"-t HoRE)ҫRPPPzH @zrmKr#fggg)gqsD +`+cwO'eVsY; ӿRaFQ!.dP3~@hۈᅰ]WoavV`0oDpu:@KN(`wuH/{!l1uG2d'Z6Iӳt@idV&2i 6_#1MץdEьZ)HV,{y+$Id +czN1de2̬ }.'GB"M .-hMeTqq+NgP-iѧSwk7w;Od "o>u&-In! 43pv˖yzOW>^E:a1~]qNЄ!9Pg)Cyzc$d6d8 NMVN#|ܔǥ݉8.Km7[ _Oo;/Y8+IҒ(,+1j UVQ2u*Bv>1--G# ZY=*žPSQׇI&{{gM9&brIl0q]VhB$ JhaX(:!9)/U, ^Ư/-TpسmڰjCs%7kedZOUDTڪS2jhi,/o"owй˲{<V IDAT>qcpi)+UR7S8LJgpu^ع g-/W]I!N[-,"qfW)0!A4#cI&I$5 d[2r֘NϢBR(dD~8.ǿEZ7d\KDB}$] ј T3m!DQBH%Z睚7Mz!#5χsV u$Exyk4$ MS~~^ M<˲|,"~ddۻuƒ:[Of{ PL^5ںs^aـB}ru g+pޓI >h={%B۸!N[E>rNNND7͔lf]g@l[&Mf9M* *J妩c0pfըjU+\{_׉o7oޜ3g+]9mڴd>Qgn9Bx&.ƽB ،oh-|MxKSCc2:Li=ͽJ7@Fmל wC0ZB2Ag[3IQTj5n4ILI_vㅺ* RʙCT@QP&$ @SƉ6 9 $APHͰ k6o,Ui+kյ̆tkp?OpP|,=5`ȨjM*"χ{._Ol g|Va'o%޵;&uH%+SKE! ^f}vtRll۷wC >w`0x{j" QhȩNT$ CB$A"QB.U^El &)9@)o?4zazzhi[~ H(@; P$Ba8Y9ò!$%&}[#+GDVڵ+=u|c  2E>@R[VrfA|= I0M,#9I($e2IIBJKvNl6fD$ H2e?Re,OFy!В(J y@BydZ6!Q}$޼Y2O1yQ I,^($ $) ThBN$@DI  < AR@Rf]+nwnYW&SP\$h H U"-J"D1 BxlZHZ-@!NDERB )q)jDQ4,"Lg[d/WusN, U+f逈eB$)g)%(HB$f b(j8LF$BHbQ*/HPjZwMFAPJzlxl<!Ҵ$h :4E,sj% 8xD(I< APEfB(H0 %nѴZaƒʗ rS((|E׭̒{Q^^F^R_Gpy}}d'P.MtlưDMcX$,MXf$JrSTTV$KKx|y;D| +PDhFS$ _9KF=HJiEN$w7Jn2&/]VPfK+IIHSD! -P~^߬ۨA%+ ww߫S#niy+@8q~TWRk>И4j!N}y1MgxO14U+4*-c Pid*9ID^H$h6[sL$ E)d(Ifj@V^Dr-c Qh#S*X,]]&"T!g%.pvc1-Umy;B[m6h2-v8bDgHC)Z.)HDPyWU޺pPCL?lN97O~$Ss'ݫN4,IX R!Mx|Jcbbz{/e:6/v؀Ϥ|~P_˩111v>_J;4rˉ*_+?׷Wcf73S)􉷉GzY?E *g 2ИW=&j2J,Či/ܼ06.1~J܃div.WnnJ_/$)fYF%$B (I-驖Tkf Hw=T9HK j==9QE.:q݇Wc݉ ^z'~rZBIaM:oҿune?'uW%cbbbbz!n;jFZ;ﻂeV/.r +ݾ}m[qu}Z~~ݲ>igj[fVVNb_ȦEUZ~-[Ta)xTfZecGF[s7]ihCV,/:4Z8Udq# R*!@@&2ԟnj Ͱ CRP %Q 22M IXVPV'R</3FPFۇ_3O0r΁ˇn;r\7׺)nͻpk0`NWH&wae_Ϧf$ AܿQyWD"ճfM HҖ+@˷|3(_'iDQ\{ U0L]N S E[bƼF{4(JQ Zx8QNpӄx$IB`FD^3tFÃH 4xye\aɖe0$XlZ$iF1DD4!]J*d11 R9t]6$ $(77s()">rĥiq1bcǎ[nK5;$$14e8H4$II7v*ce IhX=UrF&7Y4Eiq/9a՞n3\\^O7i”b-\9?Oպdɒ~?p E>vhtt'N hfB(ft+WEرS>}%ߺl6O6uEҥˏ?:nag*z]qر%Kdddlٲ%ozŊ'Oƻ/|sIg܍v2955b1WVڵk4M 9cioɇ) VkZdjjJrŃvoצg],]V >(5e˖N{U>.2;1 >Ew΋:al2eTm[G9r0}tGzΝUXO_g*>ުVk;/|ċnʵ](H5*͛7[iFA@JMQJbYVTxq(6mŋٜxxʊM\!{xt׹;DIrhc(!@RiyӣG9™~]pڦ->sDQ|+ݼ#ϝ;W0i?3$޽۾o@ť$/وMU+rb@N0 /*:>>]wG)b|b;6 `|; {݌أçr[m˷ p|Ǫ}^Ȳ49GMz󁿒ڠ =F﯈q)KHD B-;!B.Ir^Gž~9Ȩm #gZn>OZu]V]ֵ`z' y-ZVuA,@>Oߒ I%w9;f R䂖 6Kn9%S^d n={OB V+?Λ8m7g ^c7v_o%Z <<Ӌ𼞉_G}OHKS{^߫7ɗUV8%G_Lo>!W.355G|N-Pix[_}^9'g=~|w>n1Ο Yڗ_o۶mc[(yw˺^jǵ/xGww1!jµ f|Tw5ò4~ȶqa狶~~X˚Xڑ g`:ϏjY9~3(rn0N$J%I "wq 8<0gшy70p % YQ,"ޟ!UZ o~%S(L8FwSu=a[QCBrr5H IDATlJ̾}䕭b2l1rMU@hLOek=C>\>ieUunzd_ )f(RVr5Uw\rSeeɐE.ڧu~׿m\F." od+?{ZW\y 8>U%B>Y;zQ ~Z6ɧNXbYىo+[d^O[Q޸oIPݟ$I!ȅZ-G u—&mUo{5u=c xǎAG/DDz=A;iA֞%|e)Z9sL:u)Z(Fc``ٳg< j=nWkJ:һNud1 bkNܷyq)Y6:/&tۺ͜LAs玻Zd!LPb[nUX1%%"No˘9*kœz:34)<ŒliOf'lW@By<ǫ|rkZƯ&ĥ=#{{lڶLFy\!99955bdddpwܹ:uL0!_s+pbM}IԮ]{ܹE}q+Rd@:.kK p`0 Vd <p"*nn5nKXv|aA |?z\9$444!!9\ B^_͚5+W 4M?~<_Edd$b q[VVQ2OG6L1  uy `^.a+2yqJ*sp«W.\2 @˗;-_<=X1 y/n^xqE}1v lsdM_,h? ~y0jp Яro7,آc `޸?,S1(Z 2w|`8ٶ3#_jʕ+.ķjw|{جŠ_.r a݇ψiWl8Gtڳoժ]L6cb yga9`$nXZ?GOc$HT3(T+9Glqks~3l"e,lQ[Mf5=)\d);IQX dh͑^NN7q 5E͋7[1n8d!џx JN&GNc{Y0? gK:'_6wÍ:Q  QX\֬MM&ttVypͤtZUq%柦~c `Dr_t75Gk+uM(G޹KMFm'93{7څ|Nd *?hWEg.1 h̪43YaLvWۊyw6Hꖽ's*?{G}.Nݻ.L#Zǎ+gm雘aСרR"f˗SSS?H}d pƍu뾞z՗>ZBq'v/㭦LLr;rذj-w>3osQys^ -R>$\3f~>ÑA mSGdIFUEy;wvPrVCW[3)o|ppQJr 6iI|b0D[\G6+udcVuJF}[KK})M-$eYlv\Kџ]'3~q5Iݝ6w(wS%-kH<1ڴeմF]z(I)c~zi :풵waS'ozsL{}kw\~]9;U:,%j6ƼaI鿶U~+#_S9d% 6!%CPlBK"1d$њ7g]6~vk@*;sCn[r DIPW~V+ز~{~kYWGM|[!Oٳ {#|s7IqC˹9|Uցu5lE;nR.P^Fe?7J>uj8՟ԟg_)%t<IŬ0]XXkﭢ($IFYQ0$5H>x22V+yyf1iS9UbN N?]JBH2>nѵ5pց7UҖ=}|c$ƶBb=Vת;yyZXjz (J$98CXm[>{_6fRhmVCLX75[`䢋 C]"_񱝂vYwJ0F϶ƼIl{_NŮiUZ/yBjߌݵK3EKqrJ:EWOz/ٲIљ7-Io[D!?=5d[yDPݔ1A !#.$6VA~+~7 !ւ:="HAD|c$ݿZ9_G7_=۳"iK_0O rF]TMەEoD? P{~pEљu]gJ'p9} j*2u:=c׎i5ңo1C)go}]s3m)ctѽ\V9C j>ts|w3m5gq*'e}yb~?&!>Ae*u4:?vl޴IסE~fϳƢ!,36hyŘgo?HIA{G۫c IY"??=_E1K{G+_QCIQϻےIgmJ{+:FUQJYyp~YqQ']:‡Z==zw~\s&qUKW2w1ny58' V1+iZ.y>DoϰN֠rooj:̉K!YeZ-~ga{QX_drmq>aHJFaڊB*/O|UMz6$ijcj m3({t6oE]mb#+ZׯYͧ Vt`Sk?tso2#W,$קk%5=qg6 VHω3{1ibAB]ʇ2rQPd.[X}z]kz({`[vn]1a^mG\)1_2c^];niڬ -_ۆ9‘8ktqQ{;;EsKj#eF/|%xzt]?V{W9Ps4k?JBKw #%r5. 4o3Ic !N[Z LҞ_?BSXiy7 E_9cZ6wpgb.wϟ_6T}WF\)Nmycf!lTwV41 +ب!C&\} g0Q 3q!%H\X6y2K^Ҳv`93Oh+sζrjkx[2t:+ZC$/yS>|řkrmmG _CHh+X{ Qr*wFNVnMW>d&>sOk}L\L dĢ-ZETTa,o]-uzKzu_,WJ.]?`uك8MhC]ϟ w-W]s #OWƫzC{K?஠ ~QD9EGjI/j >Pc:lZ٠|e4>y@-rm+ݤߖ|9dzϚ>^~YXu@O++ Z1?]'@AsW f8Օ YNe%}<>3Д¯G)CH#E}sv]3бխ_i8>vEi#;16)|D$W4 Ɣvѝ ;W̙JK`hǍ3b)Ux3?k*x@ziH?F>Љ|_A.k}[vA=wXTK--YSeږ{)"Hƴ;KkysM$ N4?X?Ű6?3Wb g7Z#e6R9is3Sm64g9+lWTŐgn's{xu݂Z-9jx 8G(vUXuHgyJߏJ";5vjSyGQs ^nr]ź˺UH~|njeC+c0tGNNx\c?ϮI! ntq *uɟm5/AѶ:3eX2vZZ0j"~o흶ije[\ [)>7ñg|yTG\r偢V}۩Cw}z} AKm7Vy NhPo Wmu1ɼ҈߭K"E^zV>~ǿP0O?uW}m9#ϫ^}jyʓ{<ԼZMukވc)%lQu{G]:D{?2 IDAT)_OװR?wXEj`:9ROͼC\Zy/Kb0W`E`0 Vd y=qG]`0q`0  `0X1 +2`Ku1E!eGg903iigF{W:ȟZjaoly5zvb0tn\U*m`tN2!aNLy:T*}It"Vgٹzlw5oG{*{7b'cek^qm<8.u<*QOyO^[Mud"O#?]gL\0کLJ2GrS֕@}ʗ~~F/7ɢצRڀ]XdžE;ѪG5uwjbKzs%s+kTM9M/%d9~Ӓh>~&bjM{΃u#7+^O% ЪgegܻšYX c03v;K~Ȱ U;V:7",oZ.(hʿed#]6~vk@*;s빇#[ۇ]я'ܫN+t?ϱ<6o-|ycuIPW| `k۸~WwIqC˹#2F#YWGx)ߺZ7)-hšb󋶳/vZ"'"Y@M( e$vk\v-55ՕYE}nһH# `!<QET P@ŧ扂<[1B1"I+ cqE]A̜qw93;W]\CZPdM..g[Ímt)gL&HTٮ8Kx,~{2&](3Gp^כ]BƯq-h)$Y>42h1<9b;)K#$*R"w w<ʮ=Yf[.'ZR3|z֋£9f0 TsƠU"wG%bt|N:ѣQ}hkku {diĔ{hQ +x<Lk52*ʫnQL "Dj}z)GWRܙ""7hF@qbRs/;U`rvgRM>X7MG>YCLlX1Bz 7VJ4趆]H(ok)kQTJG}YlZUlDUY78+ck'x,$YؼCk5B$Hi=$)7" >2EiG>Eeiѷ5fo2BqܡJ4d-w7+!$y_rrIu;@(p˟]b#ഀ~["j%26PL%uդtz|(Şn9ώLٽZ#L޹3кZ԰ߌ><33-RÓsssqESDY*BƲ{EeRdt"T}U|R+$("aKIZrI4~Y?* MY$O?]09xyiLdRs-ѻOuyd"=.$[_Qʦ>smhp,oJX;kѡCi (;@CdKA3p5ه56F 5WKMϠ.uT28- }䁾^]z*M8<Ԫ^/ ϡnq+SGtpEEv}(32Z~*uуIURRҤ'{m dX3@QWW Δ摽4ߌ*jn|ٯ? Z.]IQ+~ys̅+m'xd<2@D|diЌ92@k<2xd<2xdydhUibߘ8DA La })}\`Zp㗩Ȩ{-K S6. ]Ψa@-ƒQXZ>/`K9py)ǭ$ ED^ nePՖ+|)`zI;*^!7o q LE*+!^%;4.>B(/K+Ar^XB%}Rro%$?~$泋"Sw@ۅ)}_+W8{l```||<#>쵞Qb% hr^e݌x+8*Gy 0@=+Pd:Kb"zA2܊nnBk 0/$y0 e}6QUݞlx?]zc{SWWF7XnZ2h)m4ew,$ ">>^9ܹs=>ܹsYQFKKkA55neأ+X3u7:2Q܊wdh\L3LY@ QUyR.U#$*ەW_nW񓅉YWgvP&-+qҀ1:Ԡ) enBқ[Vtnk)qd>42h1qvazJ$ͣBLNLW,foyªww𻇧˫]"㱿b@JfrԨ @ Yȧ`ڎ:BS1 vf1+J]\UM(٪EDZQ(N[K Jyv͠0X 'SթɬGl\N=7swe#>W;qm)ܔk~sf|LFN^QVo*v-6tur6㑫S-يиs5kָp᫼2JS8k~{% KW *}\MDZB!"0sժdߦnP΄kwܝ% Pd3$D49Ɩ=+:t?m _|C˛|*fw12Z$[D2ðX-u'5sw1~?+Z1H@3}?Kj6nџO&c-b/kǰ'/KN~ʹ-dڟ _ve.PŬ w̴K7[eכzȭ ??|cP򵐧ŚKV^U4Z2lCa*e+5 1e:sYE>9ADe[uQ©t5*.Ze/JjH݃wN/_zqOC>Ib^\2pOfLڙ/r~Nԕz|(EoO4 yÕrCgtZ_|'p?F_׵j ;GH8eMN,ڑ!þ- )O:vM)%`܌ͷ[:TAFHy7عls¸)BFB7bN`w$~0+)#DRR԰M>h؆DDg[:SAFfC"hDb-SwO.bu:v;R[,+v^&.'P_Wd!voBd-m#mmf x"1*$c%grj C'!D<T:@Nr$ D)]YdBW tʢ ȥQCngԐ/-Q}\ 8<~l5NS89bxEo=p{͢QbR}yr`wxݽuCN* 4_adȽUh{"Ut4ҿhBHT8s|%+-LNC4QcMn93G9+-jđ}Ȍ^3AbCκr~A%WYptԯOMlS(XXU>8۰8rw딋ťTrWkZRCFLdfa9KSn/EsLNft%%O4+إQNx },~f`*+-I AWS׊933\x+p?<@3iKQ&ArZ)ǡg D5>,G3*WwC1]ݳ}X߀82MtʍrUESo$mC;|J$]FIjЙ^;w( -׮}!cD`D8)d3Džw'"AvaO6S}yڏ ve-%9:I$Ya ɗ.~?"4ݦ5`ii,܉5jn=Q{dj m: F5:'cFFFAAiG|] ]OhtZk֬!HmԲz)YykNvQ%Qe{XLWkC .sRW׫ggȫv{Ur^ϬQ tY>[QrAA򣿾췘OqN)슼`7yUl0SO0aͶ:buZmȗ vqwOy6I<L):'o5hAlpMzEgGC\›[|vQy Α%n=y帝 *O^*;MNkz "eXYq,}|6o7۔:/;GV#QtJPWbiigc?RUr*:'KR0L+B~&WsUQD?Vp^17R}Ư蛹&T0 >vL ܃MPd:=+Լs]buF=!k4dWj߯O0fʫ28~$~MK9cUd2DvUR ߼Lidؕc~XR_56Kldɡ7~AjlYq,}|6F}V,dG\UxΫ#oQﮙ7}mhqRPC1*UE( Y57!#[n}%q{CŬڹĘ6Bl_v0>/xV- H(W+#UU<<{LLUX|@ GA3TURʽ %<:1RSM7 "ݒcFtЪxvMwQ/]LX8!x#ͯ*:msCu0XPYY^kmޥK2dWM9a&S73[Zm?'V|xt^t+J3?[MSer$Vױn&\_{-oZl6yWy|']*G+|j1CyNU%n:c&O#B<Ţ*ѳhvXj# "€N(7s5o/nZ;]̋<̱;S ӚG8A^ʫF!]o7XB*q;LJS6e&2eC/=C@q"LW3zO. ) &zrbEwyP0op)V(OT@diuQoðOH$vE֛E.'o10L=٣2Df%ESD2Mt ڟF"QZo7ﭷ&wWg1(gp3m|-ͯ/lҽ=HRR74[/]kKK`acbbbFehh_<$$$DDDU}󚚚'cFFFAApE Z    i`  G bϧw)엚ۭp2G[]= E%jhvP .Y1öKmUuxN–Ѱ 55 kJ:oiɎhs3FVW7s]-5zon\2|&xj]i}}9dû#@ú~}0b"2Bm)5z{y:s/)gMGR5.o[Z9,뺯fNf[o4پ)t%KU7tD"dKޭUHC/q}{sbLӎU5l\ere3|q:gO}wWRov951[t{>=$Vd~{y> '1ੋ,ccufs+v8!/?!sܦA MNJ}W4狢dEf't_cN .5EΫR\J*Y\li=VO-oZ|boR#VUm*c9wR_T^Ƕ֎s6?TǢFIJj_CDYbBWcaL V\6V[=S+B-iM|J  y=x:(k5ۮF>M+[[ccoeX|KNp4lӟ =1Bz 7VJ4趆)mi %,I^d?K“~v>WVIkG4$n95sITk& !.0pn[K1~xNaʐ>Nk rX}r !oۘ-%\(?9F)%ǖq)ʷ40.L먍~\:8dKyDT%lsݞu \ Z:i>bUy85O&WrB{@Hz}\ fIoK-XwV&" ݟ-%U&$!*{@ k!߆MOK% s ^9zSLn!jј)$҉RUd=娑Eb4',SVcPށFzU!)W c)P˲?Yh_o-&vXZf]Ro[%%rnT]q.EJcjlq-o`+ߙ;93K]7Yɜ])Elvaʎ -+B0nJ]F2!#楄*z#KyddJE3뮋5aeh s)C|c.};tJ=OEsMwʦ>smhp,o]thQZ k{`љM;u҉# /;ej:kwmklJύ"޶4QCI%KK*mi)iZRPԤOW4(55xaĦ~!]Kg4t4WP/]ګv7W[+%u-O$stYo֬dUe&_ dhի+{N&s,]cJK`i'"6+OmzisUZ_Fx޽ÓR^^ȭn Eh󔖖:HOFRݻzdᔗ7"#| >jd24xh?aBgq;w~ YK۫W/)#,D B'~ T*uҥ&&&K.Rđ~. ˗/5n^ntEq4@wSq+wץ)jjx$Yl.k'#N9 H(6i>߸4 = _|uϞ=z5ah_ƙ2%%G 2@S`2\#om]P*ZiӦG",, `bbMll쯪>;y-A@P/v-ɳH$uZB߽4urVV@S~;wrq}>\G#br[yÆ BwqFX pكyOi޵:0 d`o蛙>jȍ[yÇfff)+ߵgE-j͈Erw^N3fmRzh,'G&ZfW=e9 jƦb>&=|}vW0,&ys0h 322=UQQimY^Vr[(+"nF*)1gΘ<thhht~Ӆe[ 1P>vcP(T~N:XǼGw>}}/Ţ8sX7dClo+?;* @$x-w>b2ssF6";'KAA)]&hD".g+Q8r2kDU!g٨Rn ed W|l9\_^MC":k++a<tK!ybNnNvv|HS ;F#*ku!`@'5ؚ g҅t%+NK9cUZR )` \.afDLаB_Ե4C?/w FHi ")!^GLVO Y\R\"@53K4gԢ^T)wEltsɹ+Htf?!q֤ª¤s;9ouMSer$Vױ"f}pEr4@qaQaFy e2yyLssswfmzZ8Ka'رr%ӝfrmv+bi,AZG}"CVS' >G^{@!]T~SV+ t`~~Qg:sUr4z~Aq쬃G7XZZWSSVP;;;-@lllXXΛi.nfuI4Ojjj0,pܼݺpظ'Z4JJ-0>333##~ C^}JH9 Ôfq:vt>UUUUTTlu~ߧäIxJ#A @8x<.r1 # kd2BrLL {qd?ZG#GÓO>EZΝ;ȣG$ =r@ qt&@Hf+7% h LqE'8]ذFZyHHHTzڛ4$6n C[9'^xF4-.F,گU)=aXwI.ߵD=?eZn[xFf3wږN=ٹ[A?+֏u!BwEnqƭ\aB˥on6s=dPEl}[BZߌ9|cW=y"Ó;6 ZJ>R2țToQY睜PGƸ9{sgw+,{*#UfBl俽u\dJvUIsiuDaXdl#K$g%KFtVqSfj &zdxECt^i&p"~6ǗdI^g Sl&֌u!H,S/ڍJxP&B!a\IbB;V4,jc-#>)xԳnر! !0Z!9}Mdu!e}z>0fFP{]%DV'Kok,KAq+>I/w+GA!T#?TrW+A$u۵,TOz<jdaqꑨ2=9WFoU=B %){|)50p[k^$Y!G#Mc[IMoxϩnWі5Aj<*KO_C.%f 0""'檧s+87XJ}IDAT'U7uBGnsy7^8Go.ܲ׷ꦱvr."71Yk^$YIBX}0Cp/ye/̈o!+F-F/P}P1v\ r ލ9j, ;;.8v`W%bteܱB:OheWfaoK)ݏRQ4ݽF;O]Mˮ)#Q\5vqtE5s) s3_^UF7՘z.߄B,S[eo${_<=(BzNv}$ )3ĩ'\oBzMQ!&5}Gz_N5,zoMvQӚ8>X!6jA m){p}KZnI/%M[?MEÂ*4+"r$Wpt8]ڊw M V4]H/~p=,%3Jd6ea'?CuӖN0MC+ `*IENDB`multani-sonata-bf88fdc/website/images/sonata3.png000066400000000000000000001516441500342040500222250ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIMEw tEXtCommentCreated with GIMPW IDATxwUwN޽;KPAQT%jX5Q4D5hlT@QP:[eDžͲЌBy8;wΜwޙsq59&pppppQd@1WYܱwy1c[GvD GnO/芿᚟ +'OJUZ qn1扻jOR_TL;==OVH7^}{o;ifbw~0E:84w|t1)S?]g7co~oc]W!̜9s93g΋sk97OR՜-ǽt GΘyzn'SL2eʌcN}q}WقVŷ~{< |}ᷜ7=q#(r[~E?n FŶ֐-}d}⽮L=kl 6JjWѤf:׿i)=f (23[Dk) -LU/z{7S\q>[h1޹]Wsdj,)W^~)cI&.&}w(^ӏ9KtU4Q}]qG|ƻ/{XOϞթG8oi/n.h~턻}4SW^?~r\zi'߆<^L{m嗟z1_=E} 1m|R/Ak<<ΚSӪ}!܊ q9nobh(A.&S3`!5MtBq~T嫺eAY2;^~04T9jNk$>kA6Pݷ]ӿy-uֆ)OHlRiz @7]᫿Tr~_~ޟ~wlPͧ_>[nN̺wUG_7\!ckz+^D=g)}X?([=lϏjoz?{)JԠO 4s6{ _͑}YE2}e\(|[lGW{ΧM7z߼;O,vj圮˭nO+Tim mVAFŶѐKo+E&o_u,ow0V>8Zչ_}ʇ_$T62<Ŕ}höCmywpne{tՄ6۩VjͣgDOɑgW_|EKninLwy |&&l= DFBcgQd "Me3^"edjFt07y;_y7(ni^T~6Y|v]ߺZ9?ۅCKtVz7)5nbhfv@+nVzџ ߮]/Ysޥg}߿kWf_kKu^Pr5׵K]{w]q9^5֛]7_<9k-uDbYa)M1"84Dçu۷f粿y?.!;皀Vv;a죕L罜׎!eűnZ=}}cBИ7g!%Z7tȧ립{oaS8@?ȶQm7dS; :{ϝtYh;O}O.^>ܾMύֿg8[+@yonZ^&%׼eVSw%u og.l*LY[d-!ƌ,C;Pݿq}z3q-qIOz]{J(+A:9+wH4EϮ՝WNY sz|_TSU\Cjn_5LJ-';wGR$f#O5dnl[`iNM_/p)o=$m;ԧQ_X'Wn*.WO_wgk[;?_[Dֿ7w}_띀&o8[˶uOxU?њbomгkK͖og/Q9cqۙo¬|ow,e;unՄVUw76>k:lq{H%aK5baBci,md9bL\޼YI|u;ӿ$Us ^-7dv adrvjfՁ?+f~o>Ng|Dc&p4 o[q-upE\z(vQsȸ+//H4D~xg'}^g2k SJ~=뛟ѫIALr ݱ8%}*R)dv+;w/Jt--Ѽ>9K𵺕*ץ:ou8|qS8~"C=+t|d ";8888(b[O̚5gy 3g䜋M)ÒH q" @H:DD@@ )'Hj+&I8aPl67>x$nq I0gp1MKj@4YlPx$*D ĸJ%+*Pv{'_f(I,\ru- Am¥x $P%x9Les p dKq{"р@6b r4<L%20A`LR 9(b !SrB`\iWu1Xܦ%qNt@)rBfQ!""d"d" yÞȃ \8 DD aKPYDJtb>a ,W^j"meEiY )TJ[T75"סǙ+*DAXيʙ.&]T8@dvaOUH`s q "cB@b`" ,9̙A5nR deMroD%ŪKx:-,M2:5mr4yP.@n70C΄ @ـ9 -sOI9888|yHBI0%2e2$# 2h#V̖ 9 Yȼրie $nեηJ'DKJIs] D7kkĂ󜰺U\(<ȑ2む  pF͂Tv18a%?7`3UrG&@$ @[❲RJ\?l$q5 OM d UE\W 6~?jBLdӪ8$mɖ@ L0 l`'`BRuDFHB=:Fp؍Q ""4 Le #QL&, ƈIH!hW,QVDJDQ2V)(d65 ۮYBmb"%0 "wчQL+Y:&uVZ-q@dDD$ % 3,l(i̡W$@R8/D{X`ܾ+GGDv鑫'KG&!r, l@ ƙFRlsy) CD B#|B)Z 4U( 0sG(f"זSe$"]4?Ib([0XQV*@\)@ $a@~E2C5"Gޫ NZ%M\^3?#&K>+*5lT,| b0.QC1NLJ$%")HNpأmۙLZ\.׮:y;Gɐd !Zq"F $`R`I. 4g.\}bkZ =ڌ [P %O(:(ԬtnAJ܄$ 3d6"=v #"DĽwvȱîشv/B#<꿤ț/`\$D`Z8 @&!ʀ C \xT$KhDhD'IɭY% "n4sQ_(~v#pŚeU4&&K^eK(BH$ $nGT$ Q!c%H$9$0 ɐѨ(%%,u=\p8CGD"drH/**fC~ ;zg?G<Oii鎖9/((4mvww@AA^F<bsY^#_խasRdgGǟ#7yZ!IX!d @ N  e0Ms3PB`[h/h#-ACO%l8pP$#X`$RULY ) `p& #. "1F;dh4Si^.˲蚵v-}ήrdH$2.H?9\>swQM|vDby瞿'>>vp8,IR^3G9rT|~fS }9K9VQ䯐D"xgt ngE{Ǜ~6rL !dq$@ b`3@ ["XRzW UX岖$CRJ%" EiuyFb^Bt3ѫPWUDȁ:0S-fQ ;-2 lΏx{G KW,;y;v̪+gz؎X*~gO38糞=o_s IR*~EF3>](4ͮ@g6}ذa`0NHk֬>p`0s2+*n+s|㣎۰j^ڎa C~F:۱lI>/GFn_/6gyK'ac&viuޭ_zg7ޞ(kه/޲RxVj*\n'#"D"A5MAda%fEbb=,j7`3 "B HHM6G@\D RbkM P+$N$HIDЇM¢kdC -Q&%n Ԝ %"E/"`\WE!dÆ ]&'c,h4|Ų˗pÍF6}|mo)+-oΜF[:D().kOD U?"7;Zo!T Sd(*,~zϽ,_,PXXtO~K?L|1p8zwPWغde-T>挋j*IhE=$79F$kw8wˑE~ȧ}l:Q/?_tOO[9,Yxڴi---K.r)O6q8H3~Xe;:G Rq>q";vިs' sq`tb1{Yf/Bcccoo/톛^ɢhDŽuTvl9=˛.=dҨKag̋[v?긓u@&KGl<$s_XAGu͍ō9i}%[]Er? DBK p[@5w̽UMhnn3flYYE]ׅe3V[o$uDrUPw"Y'hH 8pA @XXa ! K:S *Q* :W$k<+!g 7.Z z9gҩCM_qYȳ<̊Иr%D[dU0N 0NL:.I@0퐱n"}%^2eԜM&1$껊"g2)"b$ظ?/T$i;6tJD]W| I2 $qkG{S1ț0 'zQ쳈_X6ܛu8#x?}<BDv#}D5:UJ'o-P{<<7Wo5ڽXro"-+drt:iYmYe"WEHy 7D&I8_֌`\&H3o5:^Sx$t/z1R2PiK T+{Z|{8uL~c G6)(^P Ɉ+!7HbEL)!@6 +' `L_ⒼLJy$s9$I%ۉ%IO$6񑳹,VTJnለeΏrlxH} friy3cV0<@@۲%[Z~qWrwao#S wm݃G!rrY߽~=5/ԝ|֎' IDAT#p+Ŝ{gnvʊR !d*U=REVa N}Cd wE9o~r@7n >?qŕWǚ @D;qclD HX3J$};c8 "_U?²|gXd"}R570$_}2>c-f7M>vo΃ӷg^Q??'NfMM[50z} |Në8YRIF%ՠ @$g{  Y*- @iK]v' PNPx`Vmk @2KW":+TjЙld/1 }Vʍ{Θ^ZK3O!c d"vM2> /  1' Ӫ^]~^ݰ;C   =ۓsb񪦹kʲ6D/[ie LUɭ䕸3Q I) HQD fL_6[lfzٗU}'w@:1V?tSoڰk,Hh͐Bw 3v);Г ˋmΦvFHv,eRyKPĐ*pȿH( 4A/[;ȃ G>g1}$IPA9E˯e)r9g T\\[ÃE B=~TU;~w [zkm?2@qS7m;굫4LN~@6MĉKD4l2|>rQ.jQgmB#CʱG/}+7ezxTSRrcݔc_Z*UH9 bllZb+fwFYD$FV.۱#=mJ@2L{gmKJלy䉵5K~ !\H0 4@VwЂۖy\y$s>ްŚ0tj+=wnvΝlwE;|IleVFAAO>5KW䁻p$8 $ H0䈜$VLsn |nO0?G0ׯ4R#ŅJʹϗl#kj&j'7Xbd2pa[=ձ.Q0zfs<߽j' ޭ=_uqkv҉'{BKsRiU̚kn7 IR&Twݮ_;q{ib$8r_160XcGnz/G2!ioMRŒIqOݷnl`Z<#)&od 1nT9`\I-k?x>wM0qI1OFSFi%%spUW敭c'M*c̛ۙz:VZmy/Џ=Rԫ 3e+kkӽ !#_"3O$+ H`0D2$9hm8UGSOk2@%}tAgأԌ>z|͉հOȖW{eK3YaXu)PY[Q[֧\}IŴV_25;RaWZB:QURktV-N;,;%A^'zc`YNXt鮌Iw]Cf;u]`rovW! ""cb-)2͢=.>孚̒B=ֵ*qOTݶ?A[G+V$]Ĕ"HҶvS53a@nS9qd%U5rF篯ZHeۗUʥF9\n;ڙL $7}V_ZW#{_w:͆UNv yw 9 pO#\ݸ`])7mKS*rpdc*S%6ITdM@H@hOڂ)nLBmWl~g|AՊܡ@A%`t=W/ୁd7*"&􀽆ZC'2dMIV}wI(ĊO4ʽZ6Jt 蓾Yח%[ ˅g-Q&A eA s pKd ah R6>AV])]ͩ!oκ]"!t(xeQh(jZ*AT*\N'ppp3y!!qp,DΊhyz h14 [fFkGq0gdի"  3IXd\au@ $dYTN@#B0`d 埫۾uGc0HE"G+PVU OB6Z~neGA,;l"NzZZ. +b)+:Z> ninr@#C$hT JIP,7g` !Ca3N3W56wf&3f_KsqneRvXך\,4?ӗ0h3Rq:Þ@0I.#BAZb]桏_hl{Rh9TW"Z1bRE?1m- l$6"O:yℵima8"|Sov,ol\t8JYaFb$*,ܟ<ЗJ|DQO]*_:˃ Ȗ>#H;GE-.IdD.XUѴmRLXgKLȂ"xkG;Ҙҹ#EOoyk$4@ &hnWٸ}jCEMYu{"9=<kkaNQC jh 岍GV|0/4S, 8YF"iiD2 Ie M&_;o( Q@bAݑv ;˭njJ%:KZ_'=TwŸ3Teўe=fa 5ͫv^pA:!gG1P(r:>@(9ťlD +RkuKsK>悖ʑj?G2i)]w;oŵ>pÎ5t3q$5PzӱEz9LŒ`Enm+yMRy UUgl4O. D^?(z qOuNc C'`߉Ԇp5>Vt6ovUˑǏ}I~[\["76q|Hw4tּ/wwt4%;V7V',&Sc-w8<ױP5[\>^M57xs(T,[i==J,z{{z@ _חժ%)=myX*^3#TU]& E$cX^[ﱌqVVV3 y+*G<| [SO}'%U"m$'۱':v\Y,ݮQcV]>.Qj+m@rc"mqno-uuoH>泑,]fPSڟZ{:L{"#n{Dpx]]{6EɩVŚ~B(«ok0<@Vwuv66L;Њué\L$v,_ "׽]S3.d~ ݚMDžշΥReâ=#W z] ZgH_ L8IRhhn\h4(! O>׼_y=JEGb3M 5edzX qՂ1li\鲘\"7Slbqzb_}juw[XZ|@DWrLwau|Zd.ɶLT"Unt,b æUAH[|]iuD&YQ諘ǖw #_-<&ve$9ʖQEAo/Dܗg;oq[Of߃8/y$WP?]r> OG^zO֎7Ϋ,t.J}*8ѥ+wl^ ˲}zUVT%gdnţ=_2ǣ$UW|wش 8$L2Z${mJ-\܅-i\ScHEIȝT50m,}=;s}#!w"d~_b/}fջjJԜt Yߺ#o?z}mGN<;V}ח5,VT=bƉzp:2jξWl A{@dnao]vFCۨ]{yGQqv.\zoH-Ҥ tן  E4 KC:Hg>ϓ<{s33~oٙBKߏY1eo9(ߥͦգK[mFu%/ +wLtm1iH=wʺ#m^1ZEx:viVӫ8G+JW5+Zh}e%ůG$"2!F*t|;~3.,ii2л6Ig%J ɣ4ސk0<%<\Ona ɽjIao<ux,U(SX\rCW[E\)\TWLw _5HP g\M06tHR20GOHX%{~u\XpÃÓMd"-_z|7o>`[n~k,\~喧{|4z_qܗA{!g d= Y' IDAT=lmlڲeiϪc+5Wo*8Ȑٴ\A"ĔĹzO/O-apr163N^Ϭ#kI(P bBc÷8 yr2 +Urr^ QqU [LjX9_e&MB:(۴41±wd=t MxNm0L&8.rע+c+5Z8 U%$. )*֬Yic_ Tir湳Hi f,6fLR΁@G@Zfa`@i*K.0R,8&ppNY.aA:5U)Po#$i ^nѬgMLH5whkAkj;xnrW<5Mىcx[wc 8q~ _/aQIV%5myxs!/EͲVQIKf ؗFYK*N&J]Zs0Zi{`yrYmsTV_)fᔁXlQ[&qw+yʋ́lP6׮R|cM2k2D~(zOAlM{\3Rg4՘f蟵}JߵkFGs)_=5^J*p `ՖduOPe&^|zyZ{+Ω,oA;8*\h;?EҎt@3תL}ٰ.YO%rKPrS-Fn;p;@oIOIO۸jDնB ^{E8N>"#=D<\'x|tt+3t!5pcJfq1|?FN) P#Y3mp8lfvDčapm.6<$&A "7Zv 6)_VOh ec-x[b'ONRze9#ZI8"H}{YƑu [bSohHRI0 ha2u\&LjS,WPz-_xy{t|OY1]J9FeNS`b9)b֋O\ciJX7lXGM;ݦ8:48;v@u+P;g%;<.٤ *7ǽ;y)j/qӬZE `111k׮-ݻw_rƍ%'[9~пUz קQӽ=eH|Gp j?0&YmÍy\m?wXPҾwŮɼIFswnI(i`8KF ~ŬM<"MY2 L.YXLV|s)!L1\/mx`ML!ŒI PKݽ{wժU%EJ9~<:oƶxr"OQFU=l6 ,>"JF9SPnoKjW߽Q?E sDvn4dݢ :Я~˿_s`6Y+H`wb@ _>.,z%.F9{pq[ %8c8 9p2.|I+*p:H"1)Ԑ/8)PFu?NsM47VH9!! c6ݺ#kaXJǚ) -Hdz0B&35^Æ]j oQm/"A&W]M=:^ eA­b؂܄ڀm6_#1|v K0qXvD҉'d&P]H<Ԭ2S$gC|$=O ur¶Wf!E.)ܵkכ)G?6?O(6T;Z[+ӬzV&d}m]gJ=]{:ar"7ED<\B0 /F`yx<XdDBDTf!'>MYHwpC-;n8b_W,R{,6!B2äD3Ž2rŋ+zuA ^"4Mt@;k]SCGi \M70AlM[0?{$Yz#Tปo>[Y[kЪ5"Z7׍dǷf͢ƀ IRlvl:__H9lZztv*2b Ak L J̬axK`Vc.0r`<ɢ6m磅Ud.j;xU'tq5xVw [lkJZ~RZZDfUB|CgLW[}"j~f %ANsp2j9BJQI1psHM,L2`Z 'TkD5z+sO<4 d>/v7IoWeaD7s}n3XAke8)´|Y 1xTdn@ bPȚ -U߷F8stAɬHn^ӿM7P)W>"כAѥa 9%ɦ:El> 73^zvIgB\,ERps Mi!Ѓd͌6 a2ؤɒ5|s&ےhNU=Rn$[Brھ%_h~,'ȶ:'JgTc'8\$p&[8:9.dD|?>bM"fJvg@LD~oCY1sV\ZLÌ'u(1-NFHIt]{fHO~hiCسz%[,>9oa]ll약ߍ ~t!o}?rsտ^_>aqq'/-Poǎ6|-gynQCG.vxX\\0s(}Jr\q/,1~Hܐ 3>eFЦ[{5Q[.lg{cGkdfg,_;V||g iY52wb_g|gǕSNMtvoY)0vin*^>#i')bN,lYjZ&8%=͞2$~cVFmm6n6C5_Aa5+)w=[H1U(r\w~ )lP)*)UWB3n~#wf[sAqsi,R[j,X.Aob?)"`O%@l(82Ƽ?>x4kѐ)f4v`poN`eètaeV#£HcsAW:ϊ `Xs8Xtgh?Ol.2&, 1(L9uCU/ϝg11I1fT3G/9V=t6aE@[ktbl޾a!au4n:rڶد7+}O8%}mp[0:5XӺ3ʜcO;G{!_qkM6h`J\ӊ-iRڸ+*[ET9;T`cojm:B EJ1 0u2ﳝ,V+/Cϗ+" Z&bn0$G Z]  2k.GZ<(F[e 0DXpK+_7? \˵YXM"-LϜ2-1F nu{.n:yPm Giknzg~U,>Up\}Z]fwo&xQ2^q!g=ct]_QbT6-ڝҒݻyswB\=- 4lQ"ke=eV9ORs 4pwu "jDW }^K\tEYVn^;uJdԨQO6(1<(TgpU'4ije00 s'4hM+7mn0*=MI|fie \JvpO&MD;t,c(WiAH%iաΘ\=SVZc! DgkLbsAJMvRU%66'.- 7L7~Z<  8:L !/4޳4m- EC.==O& Eaa BN#kldP]KPҁoEss24"d5$_IVʥ*Cȕ'b(7+ i3"%d"7er@\0[TFH]N2E$QZ[uފn߾ EQ"7h߿;N>nB50)Δ~r廁ՒMQYHha.ST]dw',:ZB\\,7L:s :5g|?>i36ZE<Ңm^.:RgY5VpG&Gb"+F< *K~6'Q:&ʞ1:oMD "GDDDDD 6eY v!4&;v/TpTrΑWy@P\ =slKAW>-.]U3r͚6iJbjڃ*6mgϞ=}t𘘘vڽo":ud2vK$l=rX,رk`od2͞;RԴ3ͮ2ڲ埿6ٳg-ˊ+~uĉgϾޢ{퉉ynt'%%,KQX,vss0aҵkWn9Xtcq=bnA٬|+ٳY'ybN>bŊ[ 9sk?L~-^Lۖp"`۽{7ȧNy;8(ܹsQ0 cjTڵ0 srG+8z?K# gĠϭnOps,ǰST8 +dH\%,.|q`cFs?yZn:{۷?>33ɓ0|gx~իW*-mJٲf[ 6 ΍ lm/E\Y1u޺u(^70 (`=)qb4l -T IDAT(9|ʦ#ӿ>;b9Q~S7A̢ẕ,bSuGN18`1zTn\9nM[׌x>0 ۝{bnY~/_.>kQ^K?&'F_ŋZr-B$_o߾ݵ[<qH$IJ$>/8ni׶ݵkJ)~n ;zQ?+#i-v.8|ʂhqX7w78G "?qrk~~~%q\]]c9+%lѽE0}[]YmnQaŻl:z`Q2Rke~SF^jr |)73~(Em?Yh2 ٸ飃1۸ޟ,m\ zZ A\ȲmW6NP9&M&ubt}ĉdyݻ8MGF6-.UɲU5Qp&޿#̤i;6h"N]+xu..5v w ❏Fu 9#3WRx<퐈)))._&%w+hAtO1wZ7Pv->Vt]9=<?5xŚ:ղݺT릮9G,qKaC9h>/o]*|';>3v4?5]__3g-=f@A9v[|{_̫do²mW6Nb914lXϖv޽lڎ~ұi+1/ۯK53ϖ֎4uٌÿZ?y_ma{m]MEIlwRxSyyj.g:V(x9y`s1`{m]/ʋkʑP~4RD5˲$IbnilB/ ϱ#J~Lҟ+w1B}7|G0LvbkHpDAgϘ"Z~boߚ%eE5:{ؗwMgPt-*9[k\XiRT p'"##HRIQz)͡7Sn ۱;#o$ ޣc%e `8>_ Sm֩_(;]? p4v+q`mrTӧ;a}}}?c(رcɧ~~@jcnmӯ*J%<8S[n޷bWHX"שSgLX $CyI&$P Yuww?t@Lۥ1[ZGPǾ#~#~T~z NY2.pxy,ˊ"kg؇]؊'Z_`Gd&]+qqV_$tn+:Q1-'.M-~98(9qnbcBHӢ[<⯺Mh=fQ6 A#_LK5}>Wnە:悂~&ML6T˗/M;CΟ&)AN[2:^Z*^8hܢ0ا""uF.YrΘx #uY4={rk:?ܻwaÆV:ud:M7eYi٬1 nԩ+T˗/ׯ_d7߭4aJqߵlPzZcO?Nы*|ޟ_}닡EvZ&MJܽ}ƴf㸒?wV|ѿ{O|EJ5Mx<^BBBtttq'|RFƍ7nܸGe\%[|۶zwEW^Hg%5jlǎc9ZlI$aNv>88ܹ߳ןa2ӤqY^/]aK+[W|ڿN~8҅k7'6jG&̟?RRR6}WW+o?+@"y-~K?u3E"Դԝ~ t.jJ14m ,d5OHT VB1l9H˲mDI'Ϗ$xǵoq? Fa"8 .]_8_ e?2Z*˶Cƍ,YRɷYWy-xNaI!!!!d@7|=z~ h@@ GykaX^ʝcjbv6KQrni?rnnccǎހ@ ^ ;LϵGB gGѓ=xY@@ H@ ^N޳٣1}i*^۽gg~XΜ= )2@ER+a]\ꂬ@ JeNTdmANcY֩hahZ䞟/D-/Q׵S" ^*Zy{{K$fCcM80l/t% ^ ,ELLc#O2FNL7|Pи\jժyơqJri VWI,F@HEJU6=<>>5* !!!%+Jd_@֞)طKc8xJ=?p=o>lJF$6~yǺ91+a\:R 7O1KǾ4wFھdn⠩'O>@56oӻu;&{Ŧ?~ и \Eyf@<2d 0 s܎(Ql=LxjG7tq1"s|3 ^߬޿dA϶5?'Oٱ rܢmON=h-LdV|P~' V>oBd<Q_]>*X,faTW 1U3k_/%#0p!t4[xW)PGfy6-~9P]pӻ[爤۞6pXJ{wN6Zp?$Y%Wr>Vt*41X5sƕYsk{ G2*!+|5Ԙ=Jl{z䇗vf T*]Сsd!R(WrJ \d.@*u1 ;"VAĈɢ?b&ص8;9Χ?nZ~!o|OnJձ ֆ%cXCiۍKWwtI8/E᣻}4Y;XYolV+;Y˶Z 9gYpaaD|"1Чeݲ3O 1]* ֵhQU3wܹbUK'*kwӉQyS.m_:g]y¿}EjzwNOJ;9FZYo"GDD$I<sv+paq3MB "sA&FXjy un(+)ʕLt+Iwd!h7}[Mo7L[ŭmW~h2,7Wnݾ6Ja_80s 2pavqfXrPȈgMиl{jFuTigixal|h tYp1x ld_ uS_E`]'O0@F ^"|Z{#_p paEq4Gy,#ċCر G<[EH$ 4un3 &6LR@ "KҚ5kt6L&SuV=0ǫ% ) ͣD |\.gY/8^{xrE.)^@"@ H@̬Y]|?rNND%_?]z~޼yk Z UpӧOڽi`=&}Lup1… 3g4HD{LݠY_Kﭘ=g:u9$ stac8׵[oƍ'O~#{jLhì>s@QZMX8ȜN<OwF0eh D@V .q!$'醽n(s&:SRR.]H26t"^Kծ'_ۃ[l,p/k?Pw̄m,5צ:*gS VHkױ \_܏yK_OkXXجY"?TY4s}I2yF$|J=7k8Z|^S/aowϞ0g111:el@I #NqnڡC:tҋ%|=׫WoŊnnno"?9[dj^H D2f:E"$Oֱ߻Q8\Yx*<ܹsK/Sff nN uW3UIJ mڢE7pSPdal[ŋ8Qnu+L6V<;[\zhbZT³zQ %73=~AqЫOooƬ~*kE(g| 7-40Sʸwp| S.]3)r9<%+o<9yd;5 lzke}cx8/ւ9|=iN1~߯%lX@w.5=#K/졝xSe/Zu^㽳?mn۷9frOqKvۧueڴaOL\B]yРh稿"isB=OѰMM+\%k9wp۩Vi>W!U^֤嗧J=5bf9PfoVAӒK+U1q= 6puFz3| |^ӕf^_L3Ys׶?ZP(nT/۹di󎓍0}D_q ڰ=C+ /K婨Rk óB*zGLΘr*JUt_xc7B}"=z4<* ÅɅq(NpRT7&֘qZvz0!Հ.e1^R>Nvw"ܹso$u֡8jz hQHn@/յN}J~Ao{_ָL:?v1ެݐPy8fѪtFP٦G.tN!'nz l_dT7NT^rSQ)9e"XGW%Ns#i&PVC/t>F=K5e^t` ڽ9z@,z|2̶ _U.H_?mƓ;;) {81I:(<իeUCNKW^{ NZu}mc$J;^la8k[*xMҘ b|-B; ";h&D+&uv)xIG #7[#[`{Pw WkGa f)@rLa6sY7@[<߇j^D6I#ڴ7Uhu H"~C˫lm`㚮$>< ~ =kww |ͬSdwX|G yXǁQkt}ԯg(oǮߔ1S{VWv&֑q()(ۆR޾R,g3okɯ=дEsnA:W~wzkWN[xR0d֋vZ"kF8$:дE}fAN '#+yEuqL/Ы ("͆ b[ f mT׆3}~a`af p&7wn9I9Il{R- .<.Ŧj4 d:Cϰiͫo~VS4k^ӝn^8}hgQ9[Q`1c1KLO\ZNR԰هś\ Jm[W%8HvCRNݹ 6-Z7?nOTkIEiMrF7+SQH)M2]C:[&<%d^kIKo z;;JVVVAA-j/8U; dJ%33١`aazOPRSSuttͅ)MsodbķU+ 0DaHV$@ ~HL)2@ "#-9AOI?J-RdB.$fghϡHTl^yF6a3vn=YTAfhw82 P Ƿ?!T=*!zKD >]+_E}|dQoW(>S"M IǷ,2llr ps矜H^|MT+/Ri‚h!EO8dPDCW*Y[/}viSOr*Y\*,joܾt3Uь&Y3H#}9/:PA.Tbf%8U 3?!(]Ĭ*odTg3Ll>6OѰ_-(}wظq>EcgFaz5uw*ڌvRK}_T. ;<<cWy yԿV GcܿjلVo*w7DdJb*!?GP|۔%C֏[*diQPi+Ov͌s=&(ҖBߔqI8=%/GSNGQTSĉ,9]|>MOs&ẝ٫VՌa֭1 Za?=HߍwqO`rqq%',,Xwyƹ <): m#_bƽzﬗϰўCm0HTu!R!cNoQ{Na;\w|@0o&- zYwJkl0[r¢#¸ {u.Eq28TH0@[է?W5u`% G=F;h1fvF\L%S-,~ak")j!1M8bڔN~Ϙ7N:i]XǴțSNag^? P%/oFf+I$+*zz࿕=f.Ā'%*- wz/G^0tnO`zi3ekP$XmxYW$uf49.K+OeM&Dzo;0Q?30ËLÏ]xg/N1Q96݋DAUzp-@aX9NNSFl vÎI^;ˮ^.e6~{¥eH{Te+Jr/~NHqI)闒w ﹐]_BU/ xqD5rs/fqPZO^BnoM(:˛;!1Ë13EK)rTc>;V,<6_k}?+#Kڷ'x Gx%xN}4Krei]8t "syOU<)_qH@Bh5e@rѤcGw֡ (]pDQD1tU%⠉!qx ;a=H &&#nz♈޿jOr(WL^z}NIҮ#g:ϑ?..J'뢓uG-s<|Q2fGzg_Ʈ.߿WFxXL&N嗿vewJpji5EQl 1a:MH%ykD|!k}&yL,^=ץ5,Ca&WC֕s p1]Gwnd|D &ښ|F[۳)C@b rW1rfoxp { oǏ.""BUPPf%2Y# jLAD\233===  %55UGG\4iI@@@[:1D-m 3Q&zҵ@ =jj44Sd8DƍmaÆ!EF Z7...mJ##LF ~(+ @@ @ H)2@ ~"&@|E~_PFD ˹6f\?_kioY c9ˀASpxr:8j("NdYܴo X|v}<5^¯&H vl ignd(c [y Hc'Һw] &;X~\\ ]}q?OʹNf}F#?ƗX5q咽;e%F3l琮u,>ki-wqcdfd*lh1= a1q.V;>Yl4WZӗͨa;;;hأߔE~[z0؈֪șEn*$MKϭjjsUSVB<z$ccfg=^2‚x& ~ Z)F\+7M*ACgwVcɼ@V\WpӃ1CS:s1kQy3xʼ?)gj#8j+Uk:YTQqi$m[cI (q2ڏ_8gjg-n'hXuA(\fARN/ENb"|30~py)HmS!9g&fxi8Ro{xi+Q$~%/K,<$$$$$$tu <5*>FN"mƻg Uzp-@aX9Gԣ3c9sn؈n8!'1D5㥬ھLpov*,-.dZCgH4AK20n0OkqbVfowg'EįJ_ݜG;8/{vvvb|dy*Ԧ }ՄU3ϥ>0ZO^BnoM(:˛;E>p1zZacgXSSE!RXᲴ4 iGʭc=HscfJ>zJHSßKX>~K<}l[Gb;OC*\fT xq4XNMQg9lZmgu(]wԼ>2{/:xɬ5IʌАk':\v Z Enʡ 0LODBsȟt|KM% [5܂Po4js<|Q2fGzgf^J%|f 02D#8_J<*uy+]E'Taݕe$~xBIO|NW+u637K<$#eWO ]~?hI54u;&F]ؕO:Kfb#p9\q6iCuq_nJjO(`P%V~vڵkGurmrȯl{R- .<.Ŧj4 d:Cϰiͫo~VS4k^MNwyElE 6n2px4/j5#.>q]j9IQb;dor5(=m]9`k #U8I9}tF&ڌkej@=Q&h+|, t ,Lw=0&O tYF[۳)C@b rW1֍t!foWzS$V|E.3xLnTҬM%=ȬW"*H9/_}XtVR~m#]DDp%++ɉ͖It5QϪ?e`@UCe 2%璙)m#Gy"tӂ݆{ykы?af~ۗ{CqK%svp ;nޑ]{>ru:XsBv ,,,Zo)Jjj8 i-Le|(= 5iDz'>3v׆`/LՎ=|M L(͆1W4mO^g u}1D-k׭CШE#HLUzp$oop} ]^ 1`߈^̧Mlh4#io#&7_A Z @ H)2@ "#Rd 0dMZ}l묂>Gȧv*̶-Ĩe#!۸J-/IJxYEfLE&E~SQ$(zbVM9=EQoZO' I5^¯foغ5fA+,zQt7A:7HߍwqX&;X~\\ zuWgϓr.@6G%VaܻgzYQ 9k60 D%zZw&kIp34LKi5.<qP|` OK]G7d뺈˗jm8q mKQ`t%nBUgK7~Nǻq +r^f0fҩIKވ"FΙYyĎ]Tz[PeqS?5zj`+OQ4lέ&2v[xB*Pk`"','lγU4l5y}xǩDM;z!jD,""h Mm#靇^zEC Jb-,~atD ER޵ksXbA_Cg_:y7'ZS.. ݶB4`(?EW<ų[N˛#.3?}f-Zj%9eMR:R(M+{ŦM@UaZ`# D1n*R˱ N>y;ez WXߡN䅷Sil-esz0)x/:dTRjz| z߉˩ h[&>t灓oUC䢮㓒wwxS,GЙ]}9d )LE.+:3HMnQ %ƺ䨟$ə VOR]ɐ.rJkm$]f{qV0QZթ?zbPc#wwz4rFnmC4(8ˀ1T~#\[_y#}r.>1O \?Hb|KnRoi.ek8V"=*vY˽QڷTZi-[<ٍtv |lab-6fFT@a)y+οnфt2e8 IDATI2?/=RiՌ*Tܒ)6dЙ $[hB*]_BUɯ[xqD]Xj==x { 5|.oUlX 5: 8^9a,^ORdLهH5E|}kQȌ,Mk>R9^A`&E ܡbR?UE׋~,OIzS1X) Lذ؞cO;b5s]upВVZ"8͑K0נ@KzWW{DtL ū6 cg)NWV7 Hpx˘d )oxOU<)_qH@Bh]2MspYb{Qu!9A;$Q ]U8ЧFFdCsvzLñ1L8F,gЖ3z'ը;P&4-zב_]3y'iЀS_U{*'} /sДC+WtpK%ҺRKƿf,Om2V}7Y7 /-h4Pufֽ߯XHШEH)F䛥E{U(:cW+Qy#DȤź:[ڗqeC?ak,;ݺb/ _عtd;5ׯ֤xuP\?jl?Ο<`Zr!hca  'vxvG謏:=qoٰaCo 4H)QlxŬ>t~(^)D՜0F&ẝ٫V)[cB?̍elAw+q#qLDZnĞdۏ+9aaa2b?8w'\B'>mqKøwS6sH׺m`fJеpԘy3'oY@zP~u!t"qui'D&d^?w{sKֵXMIp34LAm'RXWӒWLT*/eQPtL ~⫧D >0 Q">1llr  )γW\`nxٲeH@f hs4窦xHhG-"Έ{d/L{M0?_@S$]VoTރÇ.Ux7ȪV┋jS6:=cz28}`Jy.Fw-Jb"oO:y,@"yVsZ$ wz/a@Q :1QҴJt<S>T=efTbT&?w"u:wđf]yp~"͌зwqI<aG#]$ŀ$X`ܺAN3V 9,.O΢ڰv S>}"7Eic&D-/+\1JM2ٰ}9Jza?/H4p=Mצ(ϯ.cLWp Z N1HUpmiDu.2NuZt"ʱv6ww߻iيןi6K{ɗ\z8r.4Ԗ*-J#~mq&CR IhG$D=H;>b8'474;<~]HPCkoq3"RDA 9,^nTҬMi$h 8044Bi_U9< *$*%xqD5j==x { 5|.oUlXۨQsyb `QR}\(Tc>;V,<6_24}ɱXKF"U|]+Ƃ;|VJ`Amt@:?,Bm xQO܃ۣcwAzvx=ΐGuk.E[u=k͵}CPa(ԞXq u\%N%3Y=5wʵGƒ'b_{cGGE(2T`uG<(是e@8(CrbwHqO!8-5/O64wa')c׿aLDQz5j.+&I'Mu$kpFQt,^wQ^ɺӆ*?xЈa*إwK64|3„.Z&VA C^:tvNgH9'غfĂR&ME3@=8DwI r*-X±֫}*<ýnόݵ!/ ScwߠJǏhVȉ9eQ/e\EtR(e;]])y#nƨ{9^(sQW!_tc2Cɫ\P+>{3uĸYRkp?}m77ݎW̜9i_ZP\x\Mhpx2g?T]4T$-F=MH%ykbwtC;يld D#i^NzzWC֕s p1]Gwndh v +hke[9@65Mz+ a4UVsCLWEQ߳麀e{yFߺg'˹巃w8=d|MB!`gg!\*((prrb5QϪc`@UCe 2e[W4|!~vfffzzz.D,,,Zo)Jjj0% i-Le|(= 5/ G.;֜/qJ MFrF#M3UAk UʏښR%tn5͵2+*2`-ږtʕ+l6RdQK3Ks.R- O#~`طnZti{+ )2!q֫68Zt*]'.%L1[qqtttKL%Yyۏ*qSx:pt \s+U}kݝGr_Glgg'v MmLkѣG_~E@ }Ga]E]w'%%9pCOu!/Yu&5)zwOŽY{{{׮]k71 6 EF 8| aIz 7)d~^zxӺE:$RVQ^/3R)*γW}GT VOA'4G,hLkxٲexC3#%r D9ųT$ Ɋ}*O4 <ߥK޽{#!"#߅gϞy{{Ǒ"#"# >O">~ᄺ,^#qMOO Kqqq6sx}ߩO"I/c_zRd`ƌ娨(<OP)25Rzh6Uz7mO}G HZJJ@UUxQ!6n_<0~eU3dDE/,\d$é̏߰]waOlvŧvI1/.y ]2>%^EAH[Uufffiiiiiiff`|@8 pp#ܶb^՛ػOߔAlѩҺ8y>uSf9 < @iႉE;抲^@mk~_a?YǾ/d Ba±֫}*2|YF>-]zs&K7ӥs3b֯=m\ ظuzpKs%ۭex -/2u:R `U\\\=ݗV$6 (>t{M]3~YKza^AwT YM[l%,Ή?|LAG bۅe̘X c_9p2}G﮽>K9zƧR~wֺCE>L.f+#b_fn̨#]?aWqiڣf2E~433鉅EIIIeee6Ji);ܐشw3doPуtWsqYU}_^R{fK&4aءlXkcNŝf̚=g,$\u4ow,r`Gk \-`Ovu)ܺ'k-ݲ/&6^ƭI~xC{Ì/z8?|Wу3lhO Noe~lL(usɿ.[3/xgvZޤƨ>nÛ]Q @P+**@IIN*%%%4:p0U앋}&e=LIADFr),,1U82t9mIDAT&6X _~:축LI }(D! $oрx+ZY!35Zԝk IkE`6r&;ft"<6؄%Jt|c*lZmA agrUc?8m$Ob6-i) EvS54`K– ,g٫" 'ϕXZg*QRFb*-ZwO?l[e +noKJJ233\\z{#xgϞ}0 (Jnnoeeeee巘Љ]N4m~"_rj?re'M]u;h8AQ߹ߎ3#Ҫhqn9|G62K& _v:K8'T0 Jey"7H pdRUr-nC##'hѦZ`D!UPhelvه=s4鷊א333̓>2a@AN"dG\.`aa/Z4n=Y{Nk=*,6t|p:RV,YPZZRZZRRV߾|&> 0G片<&jsTL2^?#@=jf,v5Y:'Ql74c=]]\AGG[]CMM]ג>>8kj[/Mֆ,,,lb"#2utvhkϷ:4ZBQO=%xԥg7'lШE;VݻRw$ƢTU |A'r?WzT먡qdHuV!h@BoZwuAwPTSRdDSqrrjc=}tݻoqD"`梯|܏c<|LJ+4ī~amP#! )2+*b>y":55$ x0—4ei?Rj!;9ȪZzzzHݺu{5ï[[-}`™>RUҔ[]2=ߩF2/ @ Zox>gZnιyf/YS"x,hp(븢Ჴ`bPTSDSAZ 2 +*X^Qrrii[_}/>–]~~Ⱦ|]L҂hh{d O^=/ x*\ߴ}џlҚcc EyI fZ{=@QM3mOh#Z)޵21!hPض#GOݩxF9*ei0k /H\8>S+-XE5E8mO82]`4tpaP>_UU],p^ݨA EF oݍhr Ș #"#?$/^@A !Yݺu...h#Z)퍶!Yu?%Jۀ@:mO8r`]3yѦ9䴌'q^<;P~ф]|)Sw\kۺO=8b}Jc1S&Q~nLJ'*ua9fX#z{]׀6pC\]ZorN g+o\'Mڑ-s1j=[3}-ZiS}a՟2ca2m>=|no:T?z|߆=[&O{8{b#%<͘mvi?ǮD}}KU.9,xh6d윘YKDq?9tZ= k8éK'מץ8WU0AUJtԵϫn$g_ ]p Щx!sBw-ׅX%"nsW?6V l3^]?&Gqڊ,ȁm V|e[1,-jÄq68k y^|́FvnߔqstIwo)ܱT&=Ʉf5Wĭ#Þ҈O :f}mfz,S04̭ǻXpxuIa:i}:9x:QgG9MI)-?_U--!VH5'{N_8fFp۾g*K[w#;]x*򵜩q`={7EKDRosu8n*TTљ;SGjdI Y3D̟3sԯ3g4sV΢Fw/G!d+Y9)uw~J4W8?z k3:o #ÞR+d/㦶SbeMߖ{#Y>{1Odx9ZL;F/͊N"˭/wSHJC,~xBDwBHw]rY[Ytfܕ2iI8ܬ 6$Ym"#]/~2ʎ(Ua||d zD~q~Q1G-A&py8eۆ#raǪnGTH8"矣/XXC͜D鄎G?/C993׼H>ɍㇷ._}SFu6/m֡׼väM2zq@førZONrX B,~"`EF-'n>9Ꮠtq?hva 2篋մyVXwr޻ (Ln: gxvWs{)[BvW\<| q1@}E6䚉?qӖL@!"T[/u/m^dzᓘg;*͞daTi?oR;u_F$Q..K;ZiVĈBe1-C yG-_9.V/ﯯPAuRs,UqruYSP&a@VlDʗjňZGҊܪѲ +e+|>#ey Ў˭#Ng B($Vy~ڱC(w_UF%fo ƪr+)m'ws ||}\Ir'.t`Ds6y_>0s^G]+DYo|D#g͗v{6 (ĎZ:0".3c?Qt'sZV˪cYcE+WLm+bpF!DP=v jN Q*;t_VAcPN (O]0o}X%tR˰F#˭Mk.U- 4N_ԽW~q3pp-IfqH3<}-mRZ@wpg`Q܌Wg痰a8K|xm8pqv>-PSW(źL/Sm~I(9zGQG:j4sa__T6x)S{5F(Q3T QariC~+#[Al<~eC-G(pC x<._7m1QiQ222Wp0Q0 F+!2TkLkhrQ0#{kF(`h!TfsIENDB`multani-sonata-bf88fdc/website/images/sonata4.png000066400000000000000000001611261500342040500222220ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIMEG"ltEXtCommentCreated with GIMPW IDATx]w]E?g׷dw j"E)*MtE"JQ(AE:JIBzHds~ܷM M@oy3~߹9g"D_p B"d!B2r!Blᔅ":2^x;ΐB,ai>R}{MfrOs-"tிh2Epiͷv7}~n\.LL:i?|} !|?|@uSOH>/zC- ڲs[N2%ɿU'Oo~bA?pr hhm-M񃉩56mZ_:_<4uC~κ|oc#Evɮ'>-#w틚Q_oJ\~-y|_\Gx'IJqv=s={=45lyշqNG{C2U.A^>ϧ~֙ٛcߺG5 Sglzu쉍('\tSwqI.^xᅞ:^_}?sI!;K}:j)\~a[  `9};iƀpƄ =S۞]x_kO?}w#.[SL6_3 XNѭ?:bG843^I?u[(SrѮS>.8;O=. ?so>ٱuo֊dq])V$}|+W3oZwox}|0 bs:@ 8^$dzn?G vw?㫬)ӆ\ҞPqӋNο+Ma'詷hELz끟N<=]wuvU<?d`r|'_<?8XĒ븄r? &/4Ed2ayG?i+{7>訾w0QM_T{X7+$77m.MV1nz(ٺvBGlͽKzk_s9v0:*_r"@ 6WrbdL0PL>]=kWc$l`v>6.?[|ǜ55^,ӎO=ŏwر)pݗ0k. 3*'ck^bB̸|ERjXy&Z·xz-;8ޗc7ꏉ7ӎ/~2BuDB$#Qr=pM|a JzDD;`11\sgo4m)Sw=j[M^[`Cj˄-kpv\:_(gWu {K)S}ԩ;uc8mڴbΚI Xsjyu]%m~ J_ĉAG&⢢ODT !ܢ@>gw4*j +VڟcΗ/Ćm'{/G|:hQ?tIr٣뢟۬O::k߾|,5ӇƌXyI$yG&0Vݸ!'pVw^ K9\=}!UU&r5ꋖFߏm=’jИcϿi: nտe%sBwb5`G$^1ҹj[؏ޯzrq߿ #-K_n:\tš+7YG?]}e?YU/={2-^2:WdD]~ł'sV$k?;>t_< ѥ/Ğ} Q4kXl>SLV|&FҰ#uS ÊDj?IyibDaX-| nڨVU>[|̀ 6>{T,Zj=gҲmcmkWD,4m2d?L<5 iZm;"Dz_U/qV]+mWO{od"zad铩'{In~7 ##oo$9W>lxEcU߾D"NK FO#KC'3btyc="ʁa_% )D߱ݷ9;5F7첛ZpZB0r_5hq L j1Wa?Ң*ೳgmpV:g̘~B0r{{{XԫbEUeĬYk&5& D@DDDLL Dĺ̩DLD885b"Ь53f`bКfE@Ф<  4kMt:mC"Ħ̬3{} 4+A3u3/fA011W0!+ 01i f$ Zc@D5|V 'OBOY10i.!6%FIs`&*e,+ ] T.oY꠩fIZ&hKUNʬvu lJ6")dsJ]NG۩@##@(0P/a!BjA{he-Cm`hŬ_"͠tgFqXw[PeW N nL6%k#Q_;.Vm ;]R"uȤ,40|Ǹ[PFdfD"26iI!6 Fff2v110 kRāL h'"V\!eRQ6f".^o̧bSjTbTjHҌ iԔ%Z7h 3IH0 @1Q?v%+ (\!BlzŚ:2o(:P2 $=$Vq53hR{~@ l0H4U5tCnHn3dmcL^ufI@jDcTФ;H u#]ƪTo򳋻>etÅxpBlD >km&T~]f*+ȁY3+:j @ki$l`|`f_LŒ%ɺļE A[k-)[+3:W:cbɔU8C'P,8y4xy-v1ߋ?Z!dV04foEw{CjF!ED{{WFV{D}[y!``fv1sbK11!͸ MɆT%t n if|m \Ql)bf,**v功vd%Uј2ffwE #pwi~yri4-kjl1Wb3T-z1Q˟tj31i*v@L&@]\/108J.ZdO_0Yj&MAi7^@d$RYnDQbs_&RB޶#H g|\yĄ}[eew[LX7tI@l3gREDNJ1a[G4]vCN0,X2v9#kˆb.SJK&"}ߖ늚60!mn̈rz= ͘quf}l*0>4}@Cׂu9`#9Fff`WNG{&(wGKg  Cm 䖍[NXɈƂRİM%A܊Z;&Y=y!ݏfZk)Rj JRggi =;DjkklvdnŊbqkg\/-c׷6uMMm= jjjִ2tWW0x<qH_r9qۗȫk P&\v(D1 |.KPH@D4p{Sgɐ[k*w}Mİ!ٌ5u09,nDJ.73~0gH\ֺZw2d4Ku]׶{|2lwvvΝ7gɒ%k룏>lnis֗. _rIJpR]]8w{Wϛv@>vy ɬY2αGL6r[R\(|덱cǍ5r<>@KƏ1C:d|VSۧjM=4 @C@;,{#"(EfϿX~sY,"xz3E5Բ( 5 ʉ[CHUu$%L9wŜN3 j/uvAπ=7tg (N4Μ5c]v $N/X075~V|{\E?L::} ܜi]Y!@!j"D Z Q#ٮ,Ιf̜9s7v=28l~S+8pK/?~ ^,Y)"4 3/k^ X|&*K cdP/\du_7s֌`/G}nvrjkk!&qp##k.pvW8fn러湧cx?_8zm]%{ץknqx[Gr}+#>;hѢ>ϔLqw{gMtntXO'~A9Es9/yQA0u,Zs܊ Pُ5ef Df @PD4f B"VA5׀ Q#b 5"D(---s}Gl馛 RzG_y5hQ~\p^ b'g9@V7#<W_l'nV7[o_r% |o._Kͳ16~_Wlj ڼO<`ۤmvrN3oq?Jvu#G9j2d{i֒lĒM+μޏ`d8Wdr11VDEciɣ"Іh3+8h A1Sq h"Adւd*3{0^ ' …aH0M+0N_k%^z峅b>h#N8[n>|Dgg7#w3#f#wۭQl(*迼p̎t&L[n<ɧY1S.qw+/+69ج WS*=v{aǝF duzqޛSMjO9msظ}X>wWja+#{p˶RRD|邿deLa?Q@D<ܽe8زHZfSXP! B `w 16Tfb 1"3!#2a9= [2 dQAY?D1D lG'8e%ͦBH~<㇦i 9fRQ~ȈRrҺnҬPކ3r"HiU_/w:QiDt=W衇{ ]m_wK#BXҏ9D؈7ݠ1% v,4zw۵NņnaV|­uIkiיߺsL ?`3+(|}i"@0Z;[fS(f n~nsqIҊnik]l jd(h( beyDeJ$bv|B"1L)I0 0!QdJY°x4fi+IcjT@31$$?:p ldo,> x=;X,:64lЁutUuy@EddDē=[]]}igĢ1s:w݆J)byz4@ 6ݯ7jBɂY3>+r-˲""@4eYvP[Z~k)Mێ+aZz qEA[8q^i0@[-+5j֯u~=Ŋ5-ͅ뾶] '9#Fp]W+Eó|nz͕ :t&],]fL4 bV)Ywv"bm\ ʫT@y,xtMhL,dw @df\~g9^w1o!' F̠f0,u@yŞ`dĂ OZsq4d̊%+bIRQY&DD8aҸ[K]ҫس~E玡-P<7ƌ'OަX,_q+Oo蚚D<Ga Ttʚ;[:V"Acl1(1fm%wˁ"WueyyEO)E^ "EQ15*IJtUU2j4X)miY _B$w\uUȬ6l9g+/9λn/!TWլnwSgMM|62>\?-޲=oa7۶D,;SZH$ZrJqjS͛1ę7!6Z 0sGG{|d?FF(׊fr3 +\e`!"v"j%mRH&D+W츮m#b шQtL!DFSj"b!5/X $ $`Lژ5qԠҙcw,fދ%j$DCċ~ӞrωB}V@˲k/)euuMXa'WaQ|V}}F y^QS]#iaY֙zD~vW{@ 8ėJ@UJRU'L3ov>(9~?_襪rFH{nNФWZB* O3ld !@)@ VJ''7 %D$"8E4G*VUۘJčtrF4nG :fGoqf4#dMu:AJH(հn:jMd쟍|Y:!D>Ⱦ\pޏk;ޏO,P}.d ^6|띷ƍ gdZ3CP5#C+-ɴJ)2aaCڀxhX@ZF\߳>-,$1Pʕ4'NVJ+?IfӐLD}"O 03䐆{f6V?bDM)}Pť]m!Տ~ 1!*["=jLC5~I 4`CX;iGK IRiC Ȥ}Z[ӝ/=ˣ4ݮ0S5ק3z~2L*-fܜ sD*96ՠW,9TFH[@!<{DʔaDFCu0",FA /{,fIʎ ZEnj\S!2%P2( 4aJamF|e>뙭\5%[]WS󳎗Hw V1RAmc5% BHa.TľPif?pCI7Fj 1lL!e yg C# 噎u;+$ `6Z:5|_1B)ͮ(󹮕ÆmQ{P"FW+ F{Qt(.+$!x!?)XoT7a 3\lWȶmtvepzUP9kEݝ"0n>(Ar82HE-4fV始,"KX]b4d"Ό"]՞I,S Z2<[tr<9#5p9x[Ƅ,A`d H45\'k0B>jM2`lI9Y[n9rцUA뭷1o9  8;F-RbߝX+f9D_9|~~UJPtPϔXiK2m^"0B4O&,Ӱ A +Zn)fHi00fDhy﭅]VݘTDu%xA;tЉSY&.]ޕ/tK.D @NK܌ IFmmdA5R!&팙4"HҲ, 4T%FJ@fwUܴ% ʊ&]ʹ k >`(]WYFdۖiib 2#Bi0 ˖99D$#W㊱U^k.(dLY#VԎ-Ś+?uʕ"{@à(Zm+Nj%(#0jWt$ CHbA|bf6(_t+O(& dQk@4a` DڇbS-zGf@Фeq&q}?HˌF !$#Cw&\(Nuw{LiF`BH "(JV+?t"&f#s eIfL\iډx.eZ| 2镯2vٮ*Q%= '0"kh@ 9s08@ +* H@10Y=hBDizbT-֨ԚK3TiQ|Z"Ҍ 1j9MGRՍ&* KLLHSӶc$kҬ#@"  R )ahfSH0BigHLV 4d?>Yo?7>lMAxWW,BYϼzVN0DdXb͈R`uR;Ɏ&2Kz ??bQ?a~k^}/m~ݯ4+2Ym"Ħ=V&PL^QPmʘmNi5 AԌ3"# [Gem66rE-\ۮGT]]]mZ"B@$$j-0P@IƗ]l[Ov8)~nŽLqJٯ33,+n=9]GnϭǞiF;ioASQ{m^}*>?'KZ} ;OTk ȝ>j׏{J녾~+ ^833HHODae DRʧcKDȬ[/FӴ*b Gʷ@PĬI?C҅q_~<[,11rO̐08*oO>|kk[ĹW6Gou7cL_zk6=]{Btoﮞ {a^{x?I]]o~w珏7n_κ?<֑Wye矻>BȌ\XLkR @A%&` LXdeJ@B$`8uG L@( <Rb"6WYj\>3/?v;zniI0 y?T l}rsn3ޜ^s_}W1_[jq<;jXMLZ?޾!??m%yON>!jd??zu8/E-UIiO=p:_*ݔTQ]!Bl|"@:P>t;W`m!2,Ff_3 a& Y0ʮ` G$0hr.d@ #DDdNĒ.ycҮm!mdid;:͘_?zb6r,#1%~-owy/|N;]أLVnr;_8fƃw?[07_}>y{+o}jF2ܝoNv>׮ bc2r8NTq0nt B`ήR.aZU1;(rES<|PS>컾{iZR$#BϕsYĨ9H.Ȉq+hhg`vjG rSQ9Nanh4- *dKG޵gz;|_ȚS148/,{~cp BEșLf10WX"P-(B)Nje}~X"O֠ivQz{n.Ye9y[o!(jL[":%֣joBդQFk4t:5~> ^vtlMmц꺢ZFfͺ+K.?~:778o^_}lE%J} l/Kv}fgcgЮ}#M|5BX_|3gg`@rl22H H"_xZGn7yʞ0uSl=pVP?a9x|2>4?f uu~{֊]l{.̞߱pq"0nB4sG>4”Q) f]p=#QO%Mæ.[ٖ&.o_":,c_r%T[o}7z뭩TsvӶl{+E;fW_48#"B[?^fVMWn:kny^ћG_;^u{\_*}ih~t0NW >ۿ=/ wWFZ խ+ ABd \ߘ ّiNn9ƢvJEڳmL_Hf 4&0hĢѪ:_l- ;|!f](A'naN7>yօF_nLhguօ^_juYKse[/~Os%-Dfаۉa}֟-Tw?uwZŷQGg|0oy'EuV{eKh4 v)~t0ӌ;yӞJՏg+ !B>vmCs̙3gNyq]՞ҊI)Hy]/|4{ĭҞg2r-˲μے)(:&̈́}DfFk 6X-hێ=nEMڶ"xHw,<锳vzlˊ!㶟R^8뚪쪁T׋/zGqf͚u7$-O8:+n??!ӧ^>_ eχȀR01DY[cά͝S(yB \?lĠURUSd2 ΣRyi~4 Hm@7DIiohu>dλ:Ld;J{-7}4y̔ȨԐQM&>~cvHZu뷳?{[s;>q`NKS'CP(ZseBDp )uQ>`Hǫ]jkm1;g_pNᴄ1q"1i`&r; dIɩX/tLHN"d@&B4>Y U4e"aUH|֙uܟZRdBAu jKT;N&RbҞ-; K`l1NgKAZʾla䔃/rp8!B|jNLT94A(l0tLIKyY9RZRB"J tU&8p:.&6XP2PD"R4=cٲgj)t%͜XXkb-~5ui4|HT[;Ǐ뮻l=!BR<"ZC2 5 0| RH@. KAc&AZz$tP7D h#g(8^Kri'zoҋR)ҋTHA((vQE@Bz\o;ҁ`g}FL0CB܍xiX#PJn_J޺ߐI]רS(GS"ND 1"'@ >B! !yHD1E "H$D @0FaF0Dd0Br@@@ U! IDAT0!,! #,""""f i"11H$#G( )k_6p`VvYy/*B!B` AD &i F 24 c ϚЈ X`ĸ1"H200!&y<VZ !A$KKH2X)0,/] {߿UV*E)ϰr: |=[~<7g5W^?0}c~qykHy:Y(Z%#@O B@x"ARcD@DB-#"O'"  1NRj_R{Q5Cg}Fxm\y$AFH Iޫ~#)2" FD$%eAX%a B<&a&D <H^G 4jҼ#6[OFƹўvr_h^+Җ|b oT2q~^pQcI+- u¥έ;e'_@e0!RiK>h?c$__~2na#x=>t ;$l~- }mMZZf6/*\]C_yW}AyXE.X!B8Ez!"!@ -D0 `XD0\=5"0a b9 A 8 !A=E  a&R@$BHŗW?]]ܥ_؍W.>F{&)|" }6ؙgQ9{SYѿMlkEݩ=xΝyf];MڍK/ۼc;[X={en_1O:E Ih|ui+A/\|Qa/Xr]Ə@ڑ%T0Ef2bO qRuTʃ{-TdiLGBA$0\b0@B N g " YZI =n0 ̈́`@һDpe%j^CRcL|m/4ڮ_ۏ^T8xis'l@fV孏G+o;ʣh!m|-[~>fbLb vW.鲝WI{}Fa#UxUUPYע;ltaծ'W\e^O'n2V~MkJ+rq7!+BL\ Q$0H_D<#қxEp!;Kb0'0>Bȳ!,)@Za 0@0ikɩAr!cB:q{H;e^@k0g;^N4H1Eg3Mێ^e,+{3q{4 .4pBvҍ6n kw7tU_?oehkG-\ ֯,-Rs^Mt]'niqvqT[ХyuW̅\]D=mo[_&)&.P2!$}H-0 "!@DaY!h#@=|`rYObi#0Xy#I1!"`&`!!@-i)y3k֘NSm-9~ʕ[vQHJud;,BD"1`ɭ1bsb""!8O{ɪE0 ABF ' f`ii?@"W.4%"XLDF  Ro\!ze$knP(eV,MW# "21a aD$$1AD$y&Kƀ " @ !I30#!@"H;0CH$KoyYn!@8ϚgX]KS(rZ!% "t_"͇0 AF`0,ɀEDZN< D ,A#"J4@0ViU0&!Khg%0!#ҔoP( @KR X^ƢH0 b< `!N  DB@<bHiM)FfFmAXA1F PˆVA"J'ByA]80d: IR؂oӾP(ǧ< ByF/Q( Ud BPEP( BLP(T) BBP"S( *2BPEP(J.3c6UTˋȂ ܼyi(D*Y;}}} óy&?m8`͛ 4xFZ~رPq̙gOPϜ9SjU*eUd 4^<ŭ{vQB.?~.UR2BmHMMx;&}"#j֬tS:g37n\=Q;q;V*FE7i9ÇNo׮]6msgE<`Yv}B jv{ZZڏ?~h۷ũ~lߚd)[3.5=5op8VZU_~~{EgEjov׮U7nd2F;~ijg򫽽z~ cl2!rGv%*+޽{ݻQo>|xժU;vȟ^Zv͜97}Hc-[\{2X=uBL&!QNgvvv5EQ]_Vx )*sJƍ'vbtu„ @}C@DɫU(-E-7xu;?:~OX^S}ô\F,'}W?~:9(wdggr^]\\S'OW+VqO;jЧUgsoQ󇷿;Ml(e[M7c`pn{>ݥj ,NV^{kz_0|wW]:s^mK&,L a۟߬Xdz[vqu$/ԯA>o۶=! !e1 }c=rBev[vlݼk?9i`Ok,esk9In+B'gA:K.ڵkmWA후P>ӾqU.6稽|XO.u؊3!ۅ7w myOƵM{N^;U0$y&w׷TC /[*drMx: +xpnG]>>@_KBBq{NVde}"^y#?ϟ(91@^bgrU60rPeԃ.OJ1چp`ҫM5n2ȵz8"Ǻ#G'Σ# z9⻱`Dk1qeWnA}7 cR\8~D9^3*kNiHG FEP(z{{{{{fsK2uMuY)_7~_ i61qZmd[g% ?wfWSלVq͆ 9k|~fM)r߶wwPYU؛U+x R5k~;ɓ(JY6#36db0}Mv\uxnFM@dW^\Ybk r}hek ޷S ʝz/9 1kXQKӮD = O߿S߆V\HUmiސs;l*W܎:i>aI§AcBH>+O\}?7E1gBޖeU냛8`QO/o9fAb:b˲i7lS9vE) )))iiiv=33v:uqӦM+ԩSB}э$Q`ڢe9;JK袒y803BpH ڭ]=gP=iXAڵ[~ի 4(A5klܨ Xn2X, gddt jSի?OVO?9u\PL<-w~m7ʧbEٳ7Ο]3Ͷm!$OR^_jY}˱iG-rhG'r̙3jKyw?hԨӧۼQFݺu{BOm?;w*r^z=/4g 5tlj7oޜ8Vn磢=)9Wޢ(>ƍࣕeoՓYǽAuyw{T8'Ep`!k֛#>tLD7o^~'I]Rӧ?\jGyT0ZڳzG*TjfvϿ,<,B jD14is߿?b߭z,zTe#;1PsS"BڶmxG,V BHքw婉DofW^REWUk5jhѢ~}?Ǥ!*VX1v{ح[/AGi!BP(T) r/x-SBCslii]Ξ=K䟆[Џt@PʅΝ;Knh,&>>>.]*F.P.BP׼3j* .H,zELL b B) vYVJeQ= B)g\y"S( hqgϞ-ճLBP-(;w.++"0?gKݺ?:0 YrYYYҪfiϗ.~9{Ud rU)РDRRJ*ENMK jԅ# ;'OFBgG{P(O.(&''1+rjjJj5x8d2a%].Ej+EW]nHХ)ŋk׮-BfsRR*r|B|-UknW Η1N #BN׮]6u(4.Unݾy!e 6矜[ѱP(,79333;;=%ĀK6Z?FFBPE.+nv7nT(ZbFR!T*V TEرP(Te ! b].˲JR.i)e$H.P(Tjժwws\06NBPE222333cb**Vojj*k B)7Eۧ][xOLMP(M6kڴ2 ByDU( *2BP"S( Ud BPEP('ZԍBP(FP( BypqjjʙsEA$Pt!RZi_S(#T. ?<¬LP(ȉkׯAHrt RѸqn"ǓE!Q( UlٲOWgٳgSRSAL^SF֫P(ʃ(2 dZ>suXDHU0 @0&8.%55Y) rT(Jo?? i֤fKHHJ1$U5jLj) <-yETfdy5*훼 Ԫ]ŏ IDATAB$Bk׮^Zv RR4Zm2oݎX-@AǪ ]NiGS(Jy*BB|PPpPpk?ecpN%+8?P7C<) |aj7@IHQ{eݎoiwS(J(FE,N3QYˍ/ʸm^n B)kc!%-Eޜ.!θP(rSdo/oRy[-CI[-;otMP(r:1>@?C$0!cχ|?V)Y!!%[g ByFHCq7nUDN@  @IZ o/o Rn~pUH5<ABDd ?.jRj B\._NNNdH`Mp NAt &K"Ns&Mi_S(J!##`0r~@@cH7^c0t B)'Ejaaa o,˜J-ͦhwS(J(NRJxxxGf%1BH.Rd2k B)7EBP(z= a|BP(EB/TX) *2BP"S(zv Blj#S(ʳa#K ծfȨ\&bF:`tB!LC;K٬?~=r SR}"Fʠ5 B)"n;-u`aDQ1eb aCXQ(5|kԬv؟X ".'5#IK˴2} Xm&Ũ5CvfVrnQؽCMV.p8 ,0 Q+XnոO3 RVEv\&lure4dz U`e~"VcÃcȹy.M;f1/GBPQғ=[` U(zJ̾xdruDߥIX-)&mTYߡU8nn2[u9Yf[)9]?)_W=s{}wV qم l*'Ff91 ULvAIrJQi;3="PVZ7iA9]1V`(rp,0$&2FLdgrCgE/%W yM_XWx?|MhxkIz~7w t| +雧ݍ HmE/Vt?q@Oil[} W-wZ{ZRC,ƽV]BF46LfJE{W~ Oa|ZCgB w^BZx!~^^*L& ܼ`7fğ?~fB릌kq)9,E^3ѓWO9ը, $oѰ ?eOq:fʻ4otNi{z[,{R )*z_ܖ,iq#+giϳvBE\V8z#\Y4sRypXV}aXePEG64}՝f&JDlz]ݝ?cN<5ƾ+}aY _n/PmvjMaöɸoL>ar euOYc*"c :%v Gr8]+;I! qŋqd>_OJcr"α N<U}S.{t#ϑOo??lϾ>6C*ciUbq >sغc|N? i 2y_/䒍heߦq^Gx[MlppX;k[5/cagO5MrґR;0"8e̶~>]`ZQ+0O]Mn󒛓MSjMљσuF:ÙK,\Dkv+RbF.cr@ݕڵ[~Ǹ8{6--s111бm WL7XNjw>^U"ٜ) Ii*|-V>=ˢRri6<"Bû]YNݑmk*ּeF=_{!tWQq@D3‚(6v+@p\St[/gfIBX )2pyBQV=~?ch||ӥo=Kk~E\W|Xoh䥘ogw̧g;J|*.t,aMUcvDO3fСWc=uHN'g*}ZmW؜[5tdDqSͱw?n #fʿªwhF v> i;_v!.({<ܣ"UpwYzիͥ_㓒ի'}5jTI~d^$S|}26h,+ivhIϲbL&2"]@2.@n|#RS3v`zF82V:{^Dtx %Xʓ )2'mrE̷|;]o77f#]>P2ֿKn2GwLu?VCIw୽Kym-ݗ/qhP_]oب);^{~?[ƉO_عFbCUϟOw3<^ Y6XUӞ[qO= X܆ 8=֋7W(mEbs &#%ӘcXJ6[6K+9mwJP`>5$`qmk5 #,0<4FZ (b˲T )2|gd9W;+B9S^(qi[ ;d:y9MLSԒ:Q{F,Yd߽Эf6H3DBYβdGs3m;%DJn]1,BJeںE8.j m%eƿ7Zl2\rES fJE|+3gÞy'!Y_}qt>t4)czWJ5c圏ltpt&#=Aqrl]q,&NcͻY<{k*h-+ 5*8HLK#|^r}fR{t*E] P01m:Ѥ׽n$jԪ KI*Nr_o]놱v$30:!1ɻhAv BND|+5UJeL&S9"XTЩA/d^!yߕJ>EשjHKhRE^%&@jR,e6ʋ7SNnERPre9 (b +j7/04_RD/ yb\.O4O&ۭ HpZB΅ըcMMvm0jDr95TAEnTK06).7owi0:ސԊ/ d3s޿oT3O=4)j#߃`5iab1Uql&nL9&>!a lt3`۷9Qzl5-$(dҪT7@muԲ{wo wč@=bj)'H[CFTsmPƁ*8t ۥl~6߸NhJ,suqof9DHUfx{q_)@J!EVЁ:o;LR˷ܺF`]bGܶ퇁޵{jX P Ei !MfV}uƄjMz*^O6NK Dt9X#|'1[j._Mfe9ZMt[,ب˗$Rd1NoqWc 6;dėoncɮc\eѶNvg/wRsou*4e{뒓 )‹b9 iogsjy1\I1#SOߞYx`!GU+/5|^t @_^.ci>ؒOhjg^k{զP(O"4,Ya1& ? pA2 c98 O6XrvEAV\eY^A)%ԗ_wֺu<2]ף#׏r%/]9˩U/䷯ XuWժ:ș("d +#׾ZYU,.Ƥnw!OvԈ 5>w&=0sZ{;?gq{UA߮[=1'A~]%!E.>RjW uZ 婡HCWOKHEw7F^j(2h˗|JQJ4*ťw*{vn" .^8F R)dM; DWPk D緧N1᥯G:5 v1Ikbb*0,@s%:M ]9ːjSv NCR#82Tn;ByLNV6F\:Z%je2a@hZVChV0^~A$J)3 s,,URxvkUji$LpD pڀh=1cAcJ,uAȔ2pZsYB^]֨eX0j(P*|KpJȨNP~[c RAXTbd DlwhِE$}y:m*e$c\xh\}Mm7zݔUb޵O(U 9&a}4Z'*&#qJJ5J0-jU5c33,Ajuu(*2bPq`2ٜ qjz: TlbY(Hv&%)ØcfT3%@|u*yPÍV!ÃN贘m6\U) 'lEP4BY} Bylc ߶srrhP( ) ȅP+Go6P()2X qXڀ,;J233KjZN&gD0&@ @BBX33Ngha0B,!"bd,+gX9w BoEv3DYɜt:YAVyy;A`aXE,ۧ[v]v홃 W0+KfR(}+'J*jU*!d/oJ  r\bF(bBc1FaYN%Wd2BDeCXRp25w B)L)OT WL0 ˲[JjnHII~eJJy^x@a"B0R)@:v}Ɔ׺ $ xŕi=IU3#wfr.fZ8m|M-ft:  ?w%W^h|g0z!-x/?ee~zyW (;0HZ^BֹOy"qɩi\i0DAV){oG.^l6Uj5L! Z0 /'/)%PpDpyC37Pe>u;ڷ5 #+{)X"v-8>ʼn>} lL<)e=;#V"'}<.Yy Fs^Z'h؞C;Ckl UZ  IDAT~ae7ՅlG^J  ;gkWzS\ 3;Lv0Ev II \E) Hd9!,=5okI3fLuީVэo5Tes-A"WL]%"88J +3W%C/"71z vwIEl7m;W5v]62R!,ߕ=}*8Ef~튑EB uUnJg/%oԩV!$b $+ šoѢ[CcJ$aw'GZѡAZwʗY^|^r~~y ^czSlE nۺEfM[ZVEAY[ާz*ukxn?wDzTPۯ bJ.TҠE׋ɧ|䛫&X]$֭s$m2hh0ۭEn~vi.F>v9_}m.TB^^×n]e[FCoWԼma@t옦RBHL37/j˜zx׷L7s=}m1Z*U]}w:y ZɅi '4?h_ɝfK :y07L\/YzkNwG_۸nqEUA'[Yh4ᡡ:VT\nrx'/]t:68bdXVư2U0J|qz)bfc\k<#4tFO?PkێĖSJ|gFT6-J.ryϯm0SRnX.ːrNm4iԨj7n@e^xۙZ/+}Uo#1g,bu$Vhx vmhq%)0 rϵ~1 <+|;MۧpƷɫwޘG劲)#N5ayGQ r_.=!@H]z""MH",4D$`&E0t \/{[?r$ |63>3{>~#SFkxύ5$O~`mGn<ӓm0 zBS5Z.2B`&ZZHMJI`@Z8OoՀq !G,26cXq Cmk#>+ψy4ٽis%EEۦ|j9ATbgai9eBԄK7w7xVf4( X2{ƴiӦM=Gc0r]|F7p8qy$E^AA`P3-[x'/ݦlIC^ X&m6mtQPz~emKWL>qbhϞлEZ?Ug#;MNת ˛v 4Cݏyp K5?΄ןf46eB|jLII+%Ͳo3~g$!ANKUxOPm_7ks-ꠘXR@y[gyyf? a2͸)-Ub~ᨪNٓDnwB:|j{o:6Yqj)i t#`:uZn]?ϟ/((ѣGaU~:M_}+D"fy0,** lr>t5}b=gkݻl !?x3]THs6B$:Eqq={zQ1 5*wܸqZ<c8GZ  @bx(/krrr\re{-N͋oߦUn^ޭ pzRSogfeܹF.Y.yd9w޽{[IVjRN1G7zz:%%%%%ۄPeMF O]Ԃ8L*z.+--iǠȨhxo7 ;$^^3v S/;TR_)lGy!F׮pK7"ex(ypɷ; h_9Et \>{j#"J#": )Ƣbk.Bh@BQC~bq 4X{ZӚPK}vb[̚kˊ_9e%k. _ɺS: - ɿՙ^]Ŷ:!LcmQ uϾs;H9=z+vy᧒jF/[NziY8GZ*U CrU@{;w,.( G|1{PJ$Ӷ}qv.]ɫ][|6x/woBVNz!ضxک’o.4bէSBV2<Mߏ: Z- Q WkV %%jLRT>|:fIdgTcq^롍SQcJK^w%/J//Wsq_NgaG7^<+ P!a3[þ^ەkm-,QZQ]NbòH9w map|v;[[m+J%d9vؚ/!vr+ɝJv-vvhߔ5}2fY_txb.P_ޥȶ]Nx_gY',G`xSʁv!pr+7pr#ǵ %0\dn 8ǎo5Dbc_4oM^sUz{ ~}郎{8O3'h0!q$|Upş{9i/% C&VҌS?Zx_>uQ"Gܾ}"YYY!!!5iXע"1xPN)͙n!XsYi9YfXEmJt=n&TA8>oZPZ﮼j+NgNaM~ʞ.-q=SybNlLN!0[%gt7]%k`s*5eRJiE']RݳB Zww}$I!Ve*hd7I^ߟ':GKl;"0\lb֌k:K E*y/GZZp@=n3:6d,W0<p<.RmLGRC萕^M Af\޸ht VZq5Bhm _l@ L) /T%kIv|;C[h}"e6l/˱R6Q*N"eCWF%F_A{OȸBW8C<'kڷk-fwNNb9sϫLQѡu։0Qɛ]lW(D"1Q:u_GCbǍXa(Kƒ1R^DbǕ?lxÍ۠=sڂAc}PÆ+_o6y2LO\=D~(}bIPџ[|hni4XġWF[xqt#>2A`:7 >巣RmHBƱNJMbq;w4N^VxRd+ʥXPU['%I?ۿѺauCL^w4lz:)wYιQ;-iѨAm/{LYfMH헦YK̞6[B2r$ڦ\9ҿAm?ϭ鍭# n݀׎lޡe^ޡNj#NIoX'#g&K>>@^-u2Z 럮C]/XrQW>Xuh3wuB=}a%n_7;PpĿӿ,6ɷڴdY/3yFЬO!Eb 9Yt66df->yL?x,?}^[6jG>;Bt +;}/ʰP,3?~h4'c|>Πˤ .OˌÒ/Oi/eKJEtltf *b(VkzL*?zvg_f}_=jz׋!|G'31TK]! ETSiJ"E=@CDHWk}&q 9_CVfndυD5oPȽQ?6v;vJ00YX,#4rO.KgӓdCxns2.NT,bHc8uzE1A$D\Hϲ&T`Xf/ϡ,rQ1,H_7**28r|]h:Rq\褄";}LD'K,E Ÿ]Oק-Od7WQqf;O%t}K:w/ҤZl:8yp }hxT Rk"pUXmF֭ߐK<oB!Sd ^Z5>ڲOnTQ8۬7[ IDATݜoxͭ%Id3dPd+~ 4#Wa@D^ܢUjc0>u} Enx92uqf EnE"8R63#%I}M8[28/_jrm>|K3IZ6W Tc_7s>. ̈́]9/_Z ߰x7qؒ|{uRbwy6ץl|}Onx+uߞ5'mW5hPG@SvE؎K,2s;c #);¯3"_ ;>^mߏZes\LNfff_+9{NaZ ەr)5ԷoP l.Oٚd!._!0ɣT?F‡9P i@Hۊ^ۡpLwTpE!;=k{/gςUo*DĈ$ȿIsj^6}›F Ol7UkWoZ]Zd˚evٜ8s+űI)6/ M͈f#p ]Wzx j߇1"n372αTsk(5&\c(PՉ*0)@[U4Kes}UU@ ȻS͜e61ѱ;սr5^B-)1U`-1N0=EF&}?t]LA ]*e@ЧÓk5`V:n)ؗ/+CU+ WT@<YuX VtҲ{Z)*r8'H"D, Kp`:Li7׮vzrbY޲o͏(S2t.VOX]]$ FG$/]uLu$xy!puŎz-~AHw%)Ql;%`Pߓp{NYmuɧDo666}?Cd)uwNSjlN_:h^ 8)]v+aA,Ϙ5Cǖiu "Ԥ]bkj|D)*'$y k[9% *_9P1Vy#H 2qV@ CA?QvX JhyPTՋ\^4:}{ >"#+jc ]4~fe&z5zK@ \C@cAYd@ @ L*#[,44|d@@ T5MVzV\$ȵDZQl@ jj) /Lg*trr:E$nP^I8$9.+[$QF1 c Ãb9wx8L_xFYycG"ARf^TK`$!rr$CP\T&0?Bm`g ,2@gy*u3tWѩɇu212>;25DG ?vIeӅw`` zB \]q tVpvg7hFzdasY7rsm6L"EN;_]аU=H$ir?{v{k,`I] TR[uGN3|#5 G^t/-ݕ5˯w2=}^]>0hw ևJvL:h`y;YNS>]heF,O-52c@Yk/\՞Ol募.^cWHvjٮn\JaN0$Ah)9K-Z>|TH`XlIKvG>_hmtcCv) g4P;Bb#/u 2;钓a S4 u͔dǫ~LϦj) NGD܄OƟJyQ\x@pdϑӜMp̋e%c1zJ;Ӟoeq WٗN|!:$0,ežL<'ع!Yaĝ 9MF7x묱dgv.V]dȂ In˷ix f,=ɺ6M "3Y\J&" RB@%؛؟j?u^?ł+]u ].&?Ю MrFnA֥)M2 D'Nf@[%KѹS'kFv:>B/NɊAp^zZn_?dԢT@ECJs+8g *zfe([=75?p%ϬTό{&iQe"]y%ۧ6VZ/&\5߷o_Zwe׎q]d1ɀ`sVlٷ死7D2ðEk͌%M{ Q9;=h׆ԝbWGT>GψdY_.(ZZ}\o7%?o9{ݭa> yKʃ;=bgtvOxyqYXU+,"Wpx&(r 0V+ƒ]㠤EVּYl&a z9C/]~M߳_zэ:ؕU+_2wGRөҶ4%IMA.[dl4ηYF-<% D4`Ĺu{?G\YtY"ZjfxX xL\v72l۴M:l4A`axoeo(&L.ӫIL km'*DGmZ x퇫ې[-OItø7d(y?wnSH&?(N}*ΐ&dymzŵqmX6שocW)[D~R0CrI @ut}M=qɺ)RX$Qb/j&8cnɦ]hז%ۭ#Bj.R$nVlS&xn7G%U&.P7/I1pP.:{-L z' L+3 jUYVך2SvM':iwMvN)jYzZ{6"|hѶs>UPqבaΰVs#bUIi{Ol49λqbXz?| ?0xIyo<%!R m$3Ư̴zc+ȡ~(, uӟ)/Ge@>ruQ 1@x9Seb1!@S¡[EEŶcVڱ.q.8Կg`LK͒&l_w)#~~ Usυ@x5duFL=7ۢ;a'rvL%<"telFZڸ_w%5}Ks^_/=w|\3>*٫=Zn+Ʋn9C۝˰4zgӏ}d( Ŕhv|k~ȃNX a@y[gy/(ۇ=?>[#ū=&<:BZa.=?XEegY Z#v h.ӣGBBBj0//l67jԨq, p`0zT*h ~@41TRm^  0n{?-?lRnuxݦc߬gc\Λ3s߬~g}IEjIBb#MmTGoUDfr4戧͵yy5iB*q 0~@B0fz敛b\&2<$TTzܘDrb PF5rW舤.T~^^m?c[8B|9h_@۩Q㢊 -i9;O2 Lf%b+db;v#28 x|'ySZn?>+B tΝn; x >yH:^p]nf SUzaZNýŖWY :@<<` re됔'U;.ժ4Ld(c,v{ !srnw,N[EF"E\Ho 'vuzga#KXu:4ikwt=?yVyZi4 Zq(o/4L Vd"?%0Ǘ'×}sVԀ~j^yS臈@ 1  k9oGЩkGKr [;IhXWb8 Yz5+Z+aPWtӭLN}çX}'RjF OEcY0 hmZ %bAO٥ѫ hh9f`8!W{k׽@I[7XwHSg)_w(Gu6L@KУ]kWҍF.g09K6yg@)ڧn|P߫V@< IL!xn a84{ yc(8 UdL߲fHsجN|dքZ쳻8+b$oo][V|bϹ-%@ N)kBFou&tF`WNl-Ә%P|_/gܰJA<k^'w+Goo٫kLl۪/Dąro7|iT }?L2 y ,8f3,,p0#qpA0L ,ND"~IL2 Ɯ/įc]/,\E=EY6:5 OOBTNOT--3D{9% c@xjdzcc|Meu 'K؎a `a8P6; c`A>V4^RaTW" R6c삁[* ^ ",BΟDXEIB UUSt-ZwuݨQOBoĿ"ZtĿO@ EF Ϥ8r7@TMqq1K8;yV z `" n}"!čkM&wH ȈPAILkecrR+N@" qYc)gX8DƒU2r^7/1q>RB ~J!k1{PJ$Ӷ}qv.UfX؎2Kv({{Bǟ^9-&5vdK7ͽ׿كO YQȠ׶e e"dR Á/qa87X ,eXv1vo2Y=O޲Z*bs\I+i8)&EMYZb:jLC&g79a6gm|'CtmZjL׷K OkYa֢O,;޻R8uoFۑΌ>Qe"ԟrJ_n2] uyP9Ď]ѱcgcǎ!"$2)N8 pEEkZ0 SHE#A`9hj$ :5好 8&=ᤙJ5F` aVrbRع[,ɧKvx Ͼ9#`5t39m_o,{UeG>ſ?@xlG7~,/Uz:Q;wLw;&9 q=+~餕TQ2C,R"^hv\9j !&a-`yE@-#b\+'e"B%Id^a,+$nի%zf8JR,iqQjJï p}쵠ދNY/*=8/F{v2]Kk9>J$ +k5ycc;B{d5c_0yszqIĶc޼*ņ+fjjƠkxdLFʼsl)h݃ B*\j$үN`10iC'_h! 24bhy "e>-W@)g=\S}"eH):pfJeYx+[a&D$^~{{s7wU'{V kVKRlpU]]Zc4*xF+N!p;%&NMjoLu›'wiѢnHdNLN/'&q {39Z[bn8FB"h+c[^(W=sڂAc}Pu>x9n°-eN_4tBiכ |i޹ 9W5y%mX؎D~(bIPџ[|ZhxT`yf ,/8= $FtJ_qR[1[En7#k:VݷٿqF:p/lޡe^ޡNj#NIoaHPGM;N.e>{AXOa6j1Xu`SG_R! :gz&iWkê.7;P.-֯_%]tyWh::unݺΟ?_PPУGX8իQ YFyyAسT zi+35kR/ΝSnDeDD)# 6.͎ ¡uC,ۭS_'#zm$.ǔUDEsl&A?~h4숧۷oٳG y晒7{<ϯXٳ%4i2}t@P;vLF7n\U>23O '  TMnsl@@R&7ϳH`wYݼ 4aXÃC J .YR^=xGŐj*ߥ Ԭx$}ӀhpG"$1 -,ڜ3Ǣ5׺aw+ Ii4*Qkk P|CD\};F k^Lvq˧7Iw; eϜ%d>ԀŪs='E*6NF\ 0((̵ѣ&gedd|xErr2qXZZfddh(.k2@Sr\.WCa J#gff^Mh&|,jjj133 %??bL q%_0h>(gH̙FuvF\ IMM511i$Ͽ|dZb nĸe^i 6ཟqN1K%;[lg~I 66666qj BZ&͈kfQ*I, \y5d)SflV#fWǗ?4OLMMKUTTTTT5t"R(WUWRɡ1 +U}"nJAهXϞ(l`F鎄lPI;Wu!n? .?|KhRb(99!mnnުUO)*2TP|Jĸļ%Y7RATP©ɮͿ4뫦E%[F.'J]X) HR9|l$ ߖ1pn(&Z-Xug"&T>l&j80b1bDBBB``V e-wROݯJ}\Q]ZKT)T!(Լ K C$)*Ws:Ic3ʽn=Ȼ<#Oȁ"e5!!aha{胇 {(4KYc5eb4f[[ǩA1)rx<_Wm?\._PwݹBN۾E{yz"HRt~r/d|AosKW^T+|u5'r[m<;{w}^d#v?GD8o öjxAe%:eЦ};XW{;m={sW I6>Vdm=iBKvoLcCW2rkte);|^AAA}Yªj"߂!p}Sr&.P>\bƳǷOX/ժQ\.ť~rj?H5 0B3uй|[R1WKՅul]#?d͢~P3&. tjqe>ڥei[~Y87`ոzv-*\˂Z!awBIwtRk]$Q> \ MC3cQiKmB5leuΊ.nD hT̚U'QHPCmw#$DJ0X3ۏw[HI:Ү7b-vo{pd+:BِP<ءZaTXLM1vr:7BȚIܹ#Kb}~ bd ilYhjq]: N@Q{'NP &!ԃC_a>1;kNگ(j"9m̡ݬ 2`"D7:<--~"%%^ąY N}27bd D&J7%b!! 9o*l2ΞާS[sOm(7׶&R}{1w[-Q*TF[fIH\Pqngc/IRR:HrY$,.|s6:Te2dP_W Ȝ@~=^޽ =fl|W&%w?fic~Ӫ~vLٙW)UE\]]ȧ!=x@:MTja=|~QIY!bjR WsAP1 %:&cc"n7~AVF7Z>Oa22xb7M*T5ޖ ̬`o^WR647J\v024hf q /0iA0[jDw0Xtb|ƸC7/|l[՝?tZ_ !mן?gn[pX,t4dlbRcQQQutw@DʝW !D"ID6Oe"_VNNN8;5`ϰ>rɓ3^[]BXvζ_J* \\\3p_._o ep_۾]ڔWTVIR&ȰdBO"YԷ>h~Y[[/h}< ŬEzz:Ț,3|" k P?effE>'=+XsRag???MDJCo^?s7Sߺs cڰ'V-86::Z^T&=!HdЏ>c:oŞFmO3IW=G,=N?5xV޸@˗T2#/>wтWyn/oÙm+ȏ\A貼L_aS}#W#5͟H˴ <W] 2ɳS;= zܖG{wRߧ5f i#Y0naS``<2Ex4u͆E== K{@!HB|}JXJna;WtDDmҡS7ӽGr(,*Y4i *\3&lIٕLB7t<靲arM[% 0z FH#\L䥻p:qDy,x\Bjf_Jmc;ǜZ<âmaI?^8k6vf]4&dE)O/Uf~~~$^Jgذ,N5Tw5O|J6eūSSn3u4PhR ZI%/2ź3RtBGϷy2d|7#.\jrns ,Qw7e8E|})poG(!jYϐ ަU^rtgD={IǍÛn  {W mc/؅ _>o3̳M׫z,4W1lTM*VԹgx_f8:MWPPdOP9"cڢQvzi b8qlậa+t^>, -).pm{uw ][qtNQ3 *3y }Eu:g0cCi+ׄ3ʒZ\0s`CczY|څ͘T80*' !qܤIpD坾k7ѡq~JG=U^{kMoΨKgM2O{)0ں;!f':UCiȱ>3 XTҌ_ >YiBFeM]w3G“R1EI*6s@.C;ḥs6 F>O;rⶓ{,G4Fu]ryya,˶_N:ry[koaӷt#xgP _;l;yyucg*䋥! B41VNdp)8bkNl_|UQeOU,W+=6_nJ 8aYv j:-hB!w$kh= Jw,"I=dvY6HfQų3"dպ X:NYymexȝBmG! SmշЂIyǻp!rM6.TfjǤEXcVR:!'+4Z<.ԕKs49Cj'λU%a# lƨ9I B.p*>*/Eŵc:skK.?rMp4`QKxMcC&q{88):N^.$b3ªl}BiL}'tT b{^X)%IauQlg͛ʞ2c.?mrlӵSUUŒYTv~$kJNEu}\TY%{Z>8}Tԩ?;f-6 _2G^{CC^]|JJoߥ5ң;3qE& m=C '@l^!+oߤtn/q؃j*ǽ-oIDATׄ!~O.9GV]DB\tVJ: Dnֲ Lzv).S{l}M8{}r:k!hh͛ʞc:8h9p/f#UirT>^=Ǣ7d`9 \:αOsTY{p]KRYnqI x +V\= >Y4k9;;GEE}5פJEP;/FhFKyޏ&&+f-^& [j%ޣ-Ջ})n141Y\/y#e8ͺӢe9èvhf1o|)t: "Jh0ggg@s*޴IENDB`multani-sonata-bf88fdc/website/images/sonata5.png000066400000000000000000001323321500342040500222200ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME֭tEXtCommentCreated with GIMPW IDATxwx\mW^-K^RBK M#~ - $!nbc{dV~̼,dYW2Ws瞝;͝;8syp8WdpEp8S@c8W\p9!u&ԟ30Fm>͙ Kf&-^R:47ݧ ط@S䫝R_1LC [Tn cB-6onZ':i`-[b_OL= h}eUUkwZ9#T]wݖm.*ߛ埽T9fMUҳ ` $_V&jGt#up`/oCKr">[_u >Xz9j$HM&┚a*z"qkA;4FTI6vvOש`1y챁e:f۸T}Od 8eƨO#mݼs} )oxԲOV&<߮ 1[Zm#p7k5dH+jJj4eiýmk>8fAcfΚX" X)c5>G9Ǧ|}ؤG?)gXt0oeG-iЈ _J3d֔W4;|VoD%kXl]hk\Dd&[f6oF6bZI}G΄c,Ω#xDfK=v~zer,ڰk΀A`Tk'1n6tA)lLߴ*omce*7n+Y8 vх~6u|T4nm_|Vpyo~ZtsGȫdT{'+:oVrԣDI#, Ƥ*[Q[wf€?+9$YEMX ev= jwmY K!c6% ”/ " cBB4qTK$X90Zq+E=Ƈ?_T M=[c`G(i˦?dg"=JkgYmH,hZc+_ީGN*7$=#Lm:IvQkN'cZwN|z\X;֍n3|s}dJQ$U!PQ3^wӄag@@(41Hçߴi涐I -wMY tO_tlC"$p8'"qr89Y>  J$:-dxWXQLTQr8TaQġp*iMb :Ӭ2 6o4KpWqc!F0EI1C8!1e DLCQr @@1xvRSA{`sNjQ!o_ᨦk0(BTczřE VPJ cƀ$ٙR]$@@Ihp6YI-*h>PE?pDI @9YMrٝ.ʛ2fy/$;ȇClr4b |ÆbA2  vw1+ !V2Լ/{if2b"J$`@3U, D 3 jjP`i7'=T-*-n-׫)Lm*`XߕgɧvNF`πSj :jѩ0F, (PPPbP§FI1Tm % f]ȰH ZXAeQ@F-=cfz<15^`#9%+!)ɢI/#Z iaYΛԣmH;õ*KCXzEeՒ@xn=0$0 FJM(9a.$)G\U[[Z|)]p6e16uha]Sls+ref @Q쬬!B(Q7C Rd*۷PĀn΢/fѸЁrj>{>aGb*H} XH(45#iH4uJ,o/$awdg#p0kz8,.ȜebQElGƑTV$(#("JjVZ $ّZ:1 SfJ/OZ:aDٞZ5aKS)F;RR 'g2"~OPŝ^SA(.(U cdxޟ.B(eTdB(B F!961b@)b"!Y%WA]̜_s9;*wH_?43FR}N !D(a10FnF4]KfbG1-39+ZL EUC 564볲kjjp37FxYUp(_iiw+-0o"ꋺ+rU׹N4@ PQf]۷546~X,oYotM]%5-o_ulo vyB+W}QTT_?R +KJ577Ƹc,z<^Q:w}3N[ZZ:묡CN677ZOsƬD}׬5j䞽O?8;ꎻ1N|Ey7;3/Wǂ h_$l]q(SƦƛ1}^o"!VQwjٴ,׋"_߻[ !3[YǘYv#4rK?{ӻ?O=n/:pd͹g owGuѮ>GUu"c' 1FE%C8nTs͝;7`G)=cnjں}g8v:7lTQY9hР/<|ysSnm'M^bBpW<3\rg?T^^~駿YYYnwޙ1`{Sf]fOc!02uZ0'NpNcicj<665iiL)5tD#w۱Q #"@rj܈.w=Dl*Nw9΂bl՛h;vTW\XŕYMdJ:}VW4a/߰qK^,p^!hu2UU,222IĄ2PN?9jLPA03M 2 AyHdnd x Rrm)1F)FTvb4tFM]Y^ovXl6b(ĉ׮^d{cN+KΛ7Ԟ[soϟ4'IEt]'E 5L1fX1渂11uH E!A"cRQ$ƘE(3 i{֗c 151FQ|3׷vKMy#4H})zW^8e P{6c${.go+ev٢n88Q Jj\p( %IY y"Ju.⨊|[1?> , F01T&3Sj1H݁zF)BXeT PnИ2j"e"Y(( CcŮPve$eeeRёښN1_>l~1Ctq?/{_[*um.5:_[{,d^rѥ/榦Ʀ0M@[Cf\JfBDB-(X Z i@@0E7%JHZQ>S`Ȱ7#&%IL   a Ѥ k(YThrwc$m[Hׯj-ّ9b]w>~Ko_ ~gu;MX˚{nxX~?ߗ|I.dYIwu9Ú&/.:} [?^hњuGoQpN4SNXnaN!%m~7n|<WUi.8a`'w~`2CBDǀ0,(`c@EUVN@X5#n*U5CRF V11 $yEV ¦fqJ0io--86-|²dv~x呛6>syܖy(KYέ7^8%U|/a_ Ouh+n4& ;&p嫌v$g3_xSyy}ɷ(ɲ8Sq³]0w)F5MLs'b,{dq@qd0BP0 eY2HL EAB"HD LjlrqvfXH F!QBDg1e  #>l`3vI[ IDATW_wG9_jQ{RS 4㒟[W^lo؅-QhlhZ:c󻏲8SD sW/53#kJ/[!%X`Q 4ըװ 65e2%fp:e2-5@cSAXFsޚږ;.$T(`](wG:T2%ogsbW{~߷fw{L!sQR\R&|W|/? 3܅/?v?ϼQ>{j2ᓮ;^ۭRiZu,cl_,qb/qbx⡙YGn;ZPz†3 äf]uf"B4:+!S6Q"ؗ=eB1"Ih{$]@,-]J-;tc=5ޫRq %u?.Yv\`)$97-7fdٝsϾ,{n]tm6kjW]u $)9g}hGvYO1ӥ(k~uggEɔ`%IRf9a<O~~Wɮ8l %1j1 @ 9a3""&91:q(1j!xǎm2n88$L&$ /嶥m=^7ɗ67F['|GϽq-q=[k~R"&s/Oߑk?{/%ҷ=O~q}_YOUo|nϳ(!_ylqnݵa>py>qw]߹h;OG-I,gqƙ/[(5bSyḚךjkV KQȨ9 I(& r=am؆ K^ڇ[w7Dr -( ǨA+Gwג.& Kwvf] ~0G/c Ԇd}҂C'34հenːXu]K-C BBY`QR-y۳vX2IbCN,CMB)BXEEQzK`l Ey+9){:?qeѢE^kA2 j;\.9`ЦfDuJ0F"J(QE%McpJd□y$\h/j ۂD$@&w6y"KhBXE!9}um6-]J(;/"tZ{a9ʟݴ:'Or"f\IZ !`FJ)<>ws]vOUfh n&2WBe0Sa+R6"7QmLBVQT"$E3{R{ 湖"`C^3_iI1꯵ ˷g۬k>H俌q83XSf[.1rp0C㲢F@ –] H$`wkmB, {aW-4䒰Sq"ThGMh 9|t7kEAr>9$LS(knhضy˛2uZSSclH<dzta@M#LA BC̭aG"nÔ!@ )6'p8RnN20@14B?wŢû +To,ӌG▱rQMfoT&2T=x;` AV '1ccq eBA6Eh?XWa¡iji`Ja_@ cH(1)bF"(6ppE `% Ӝ GF" `EptCi#r6"ah.ͪn~jKSuOklgӫhZ 2F-]mL7vfm|%,ZP#^ǀi(*EHi_f8#́Ґ\]KT z+fIxD@)cT@%H8<>[{T`?.'٧̖`ˤ`Z(V4HB@Im씼^A@("赭@a-dJN1`-wo+Ӟʛ63oEq?p"?_3>k9355su88tx.5 vF- ¶aB؄"EDaZF\(P4cf Lw L^5u*x\u8q8o{fŰy{SKʤ#s<@auu%>,i= aoZln)G*+# XF-{B6,x]4Y\#5~`Cp"w =NT{̜/u5bM t n2=2K U55$ǝBQ1nXq@aCM~ (7pEi@ 0   8e\pZKIlXjn;:U7XIc[m- Eu `cOA#6FF,Y6,ƇpE)\SS@#aU5JI KcԲ9B)ضNٕ )،GMaӆzVVF #$0<<ˆ 0J8Zu+qH$@%L`0fX(R$X"ENp ”ŅLhed(PPDZ(9uStIyv@N"fV,KS%J '{kll(5Q̘S1E|9Cg@Ugxx2 &tڐԀ]xM|>:\=qj1bQ=-ikp"% "3LCa0jU@S@mS+FdBĩ=f3;UJq4]n}~aHLZu:c+[cVTPDyA>T(-KEnmmM҉Xkp46IsJ|szWJc2i+{ NakohD-5њ[rsD,L;*'3uuH`:%0ljpE>,p;ȴX\bf"H]TWg,+tn '(AǨv?tWnv!T}`j!^rg֯նaQt'Y[>N+20dUU藇aHeZeP6T57\|k`[pmFsô!^4[Pp+ ;)553g6KS7y%>N@~tBLC!R@0-,Ä+ln?rFw c,1,ZMMYxđb7^~-Ϙ9}S_i[@"{P#n>T目ȝ!ÄeHM@Lgh{$%`{/8EaBAԴeߊnBȡZΚ@7\={\ﶋS Ķf$VBUWұ|8WdJ1 #u w `)N]qj1?a4%"RROwyR$p"p]Cs 4`RJC 3nj98T$I8ouSKվH[\Y[b ΀?!p"CPt`cl3kaw;lzlT.\1ɾe t, 21SũbYȸJhbݕ;nNoa;3PU7aqEp8\{onX"xdeaՈAj<e$ @1wzIJ~6fҽmQI"p4`ĥò|8WdJiԺk0014 զȀ(`I!!+.?vd;shJV֠ѕlom+hBLl s7_Y1"۽pvp8\{r1,11 xv1JI[)-ə:n9u9C9}%nݲVL*ŃQ#L.s]*K%Q1CTKi +6'[QF1( W"tp"BztK@.9!%T$DEbIJ0F`QY6dG(,Z̴(1e&@!J=۝yJzEPkCpNyaEYr9"1,MT RbFX$"JƩeJ;(,LMD* 1Y5"PH>NȽ)2`A8 2DLY|6dIcQ%5SEQcF1R55#Eb IbBd`,IljpEX޴<{B `AeIf!  B00e0 0tp8\{RdE!@ 0 փ %6O)y^+rt$bz@uq0Z`"!M>pE%Ư% 1!R!Vnvs!Nn5UW][э+^N>rN2ҟM)PoQU[swحUF&&+X\'[_TAg-{?nedko&0'lk \z׵sמ;Ủ%%{omJ85^_2'XpE:BF{T#k2$#'L74)@ic?+y)}'qgoi` |ֳ]M+N߽?m/?xc+G=+%&2S#cOyYZf:TbDц~rN5E4iRAAADAw,@:@p/\wef[f:}\9i/r7{nL\^$:/] f}_]ٯ %+|sFCC{ԡdY^dɰaN5E.)))))R~i5kOkV(+rǃEW0O=_-/B;^crε=uKۦW@O#gXxGro= "noIٽUr-OB'aTߓ9.c_N9w?3X;=6BsJ|^1~ё1WpU [+^gLWu={}tM|@"yl\֒\:)"ԫ?p;trfe7yoQ>|8j`}u$_)=;6]Δ^x9EDٳw1pN{ݳ;~-34RDA#n\[[_ )w3>zX(WWϿƀ)yrΝ3Ϝ\hщ_I>mOìlAH3cjCժ[4yg?4;~fn_cE=fl8vt**N;Z8+Vw׮3->Wțیa^2/BzSGިXѳL|=YhHco,jہ/>_|T \aBd~kBpW/t?5gl_ L(˴  "lY7©B+Wț[u ۔3 IDAT,Ue{ƂIesbKϮ[|On惲٧~F߾2!G)]VQRlt |wGIK:f}/z'>>Z)Ώ_!ͬB'V/#4sda<6v۞[UuxzW qc{Ҏ 8 J_~coYMQ|g^z; ,k߾}|Q{ 08ԎGb:mOs޷tG0/~N;Ĉ7;>̶%AJQTl`yŊ {W""E"6@I-+~[f?..2ߏ}vvfvfggg7^ cу5J &JiH#븖V1 "ae"FX*a dyttN* 8D˰1ZȊbZDz^6!sjD4λw 0^+E*-]vRJ_~MT~]zyȋ(vNuBڨ4mgo~RU!C9s:۹1u;24D&FX *0z˛>  S]*f-c#+5%U~|Ito}7-VgJV _ 1#UVh-Bfg~ ~ݩVp|dhv:^ ,rݹX@ͩM]F$}1=z^ GX4uYWO{Ј{sW˔ᥛ:ԻzZ3\ݑGehÔ-ӕG +E3vL1cƌ鶗' xp.iS ~#RLhJ1 *Y ܒu*Z>^WphL~mG3uQPk׮9G`ښ6iکSԴo+CP@I8"<YAEFf0nkĵf-c#+rɒ%d7U/G-e].в֬HXTa7tH`"Y@aa_4M\rYFҽ.9LjOF~hX& pд8w˱&N(hG֘h~n ZZVi:F5Bf:4k}wEhv$G-.ǹ}dYm۶k׮{ҭ[>?!׺\* |(% _7w>bInwF X=bdbZ>5gفJiSҷ }DYcX*-PH5fUyzb:\wAYJ/Y9№t:s]>֬~2믔RADQDi Gǎ4M[=?W.CR^_A8øVyY QDZ|$r^vG/dO)9ah7Zk9VY%f7w5m_K0Ƶ{3}DYcX*-PHFȌV7G\q.v̊mgԝ-[)gW9޽{{QyEAAƍ};w|>LVd@Ĥ Iby7߷ʘ?Ix)};K|9䤓y|뭷8UUg~VG%tM7r4_¢E^{/Tb`֊45 >VG;!pDܵk˯(**cL&3&I$XT\,˚]|۶m/br 9=z=z#7\ Eয়}V ߇y~`s{ QOx[)  4N­B $ |}y'UK_t7X hjaT})]J->; t~K vSN_.t<ϧr\qIсY~Z ! +V,0``ӍMx:{KF/~wڬ[:E{WMߞb=`0(rjjbݸ^={>gE7Z/:^a0xW\R.n@0$b%Ib-.)rOxhae`0"BAA~Eyh\.4SZhyntp1b`0"‘#}3L@T@`ۛ4is_^Oú`0E}rm5v-X4nc;\+/Ha]`0"׉QRۘ;CϺbX0 uE.]̝;W$`6Y0z!M&JJJ*..om`|pG)ň t:Qk˳'j ,Y݋ I3f̘F۷x(z|UhԕW^~W ɨW_5R855Ul6h޼y }S+]ve`;v8.k|xIt`0}ߧN5+WlP6lVub03Gfʘ1cج !kf2" [ݸdɒ =E<}'2Z6U}/>k!a;CGAo7rsڈ] vC:K׬?l*:D n^Ј+zG与Y1 6jq&?:J> RX!-tDYپ+qO_/o[[sseW_tخKV !*rAA5UPs!mۺ}vC?yu/IBj=j"v}juG}zRE{fT1+q(};o3.v׻|岳Uho?+%]y,ڻÿ-7}G^`/w*N4˟G_G{is{~kIJҼ?ׯ0EԘq&RD>9''g֜EN'"K7A bdQTUUeX̄=޸w_֪l._0kΐ5#n wΪ/J7Y>g9CWw^ Zd$›mE3٘~Ck,Ƭ3-[D;t6(k+v `۶m!@NR֩cU)T܊7!gĭ}F;hDaE^4[:]PŘ XMUcV djӨB>o-`02^_٪UvbPB(4@y/(TU QtI{_ܲEח;D1iӎ;6O LUdYWZF^EU;w(%a@&%ݷoᄑ]@'~`0E-Zz4KJKK>y >xIII;wҹkYC3 F}*rB|BvԔ/=DzJB`߲Ҷp98֧a0V&ݺ쫯oo@"ߧbiFqh4j4l6,=ukfׅĚ;g pR\."G|q:، 7EZ:lij! ~¡'6&Ż@(%oT2F/*MŸ pbڴis0pjFKSb|R B@(DQgT[-VXz5k2dHcT䌌&;wҢӧ8VD" !dP$kt]7=qp=q̘11ZḸx˕!T-Vb1Ff׻o |dY\\t;R@P@;R+!1[A`0IM&SFFF?ݴg %SFvf57`ԏ"m6id!$z  $I$n41?́h |5NrxP { Z*k^:;Ex4h,U( vy\evn` oV2e0Y:58*ڌ+G2c+=pƎ3fLEl_?o/q_šʉOOΦI3Jh:gиm^%b}3:krk')ZTu=7~HE K=8Ԭ%+pkgZzOМu3 `\Nѵ}A줇_xɒ%]ܛ7wчoc*" P-OVy9q-zIg`0bdV@PpGi! &Eo5MR"eJATIR/a!I$QbOEL$:I h] g|+?,oʔjq|}xC|Wb$#Oj/v3驒KM"swЕUE=?<:O#ۮ&{WhXBI.Mڅ+{+FH,izFZrR=ު[:U -z^׼y봴Ĥdf'$&%%&%jծu))Ml[h v[d5F}a,Z%_wES& h;\> % _%#i`2[W' 2Ýx.{sٌW&F/^; Ζ׽xrkc-P1h9/qE}GF JۥI * D#@ (CH("EdEQ + <p!9q)b* (cbv{ܒyN*S5BŠd% ױ'OYիˣqe>d}> 8E2 3fK|'ۧڒ$^:%%[nR VW. lY-wShάEA0VE HUV:#e0q#qf3H4΀8jUYD, &DxN"K:}"aO@M#i<1ȏ?1S[^2 RcB3([q9!@ S"0„PQyw{:C*ы|ß_Z*=j1Φ xCc Pd.^c>,5xUK~#ױb0)91a @4 QUU4!MSQBTB99tOPqy; 8 |[-ehDTQGyn{[wf0ƫ*(RBJ"B"E$Q1&o!@EU<>9D)!B dT ڼRd`0بE9@) 0V&%"G4l֋Uܞ0eʁvTRB)L%^VTQA^dl6Fg !D#!TUMPUy99q󞼶]{}~%XLRdYOSں"qdJ_ n$p֬m`0N"#L)aRÄcQ!@I8IuۖΜ<߁҂Pu<S²'/،E (D+Wvyb0xhF!yL)MSKKUY<ƸZtlײU̷ٙ `5*+*ox}= p4*8@8iRBA?$ K 3 zE*s6OI d-޶L IDAT,А>X9J5p\ GF4kY0 AX(`M@)F<籢EVE)uʼn+))ҳF<o۴L)#6;@,*AQUTrd:>ɓnXz5y<4\MÚFt}>fML}=YMl-[7Ord VgKuzJ) ; 9)RdEQ9G(B1" !4٣[?]dIgNgK1p||*'(/STzd.vSnE#ւY>vg)Qh p(R  L(?PvR#Sx` &MqWwK+v~_L'dv}hκ?@&qhoy~O7*?5>QkE ׾qyHU _UorYm}>sn5O wFǶrAWp㾩Kzl쩽 I4R( eƞѽ)O*׭Fga0ƑC 1J "A-,(B0/jת۫[g(..3RA¢tHT*X#,A˥_|Qm<@Q hk{J1 )Ws۪Kr]?3L=#\#C1;wqBup 9!]*߻Y}C9Em2:=4 ySyRމI|{?v,|r(a1QRǾ5{j8[?{M <і'__kA3GV5MUTN0"Ƕ݇u8݅.#L(qF! `@5K!aITͯi}np9Uڼyd͛ϽYY~.~o N;n\C'5|<ȳ6%u 5ٻvG8Wmr (ośע W#r Pq敇'x8N4W{bԹ«-}F !ĉIj0+F)7c>6GxoJĵf8|dAĂ`QUJUu8J+%e2"a/-(*-է%aRլәDE`iO Ul3z_˩Yޙ^қ|\W?>ꕟBޚ)q (P9Y(bT9LVل$WcѨCvkޟguGe5zWs=}'Z]LzRG/x辋_QxZ3Vzo?M >E1T?:e@H/IPh4P x^ `+ U54˳f7SqEXܷn]Jy3W_b~Gۤ t}5պzToX|>VƽƯO/29Dk7y͵Ol=\9wGӠF &(y ~uB3Kpwnxˆ[{Y 8#u4>r^C% ,++#ӉaY$ )!U ͛77D9SETV" @H"KUˎ\Dʖc/:*x{e%{S쉛_؄7ߚ{Nіv^{yY[S#sk玾s =4>{qU6p}ez>ӫ}y뱙u9kGOpNkZk}xSצ|{ T" f OZZږ-[jF 3gNdg۶mC @i^*KWF8''=$Jk[Yj<07'-8gs9KK%d~F]_vM@ON:h4@ħX #uk&;yj׎8s ހ[dh`ևeeP'R,p6ۉ`0ȄT> >|# <^UHؚ2ɗ"%C rBjz&GhB< Kt:g7^݋'7F~'1 *ϗQ~>-r$ѐ*u)An/%D ۛ ՠGj)N%.Mb8Zv>ծ"!8:6 :E\\W/[Ki<5! Fc@b DCJK3 ݛdl6ng(n!W98Ec/u"y@b@*&EMqKhaG|pjz`4nEVAHƚ@5>ہ~QtS)"ϙuȨevsNM(0xZ~3VIFh,Q[x?]|U Q+!*_;Ѡ'39`Oմd$JSReEQIg6JH zT$$q irDqfX?1Ʈȇ͟Љ]!oHzP;AY㰂A<Ȫ>&^q|~Y |A4pe_98WېՠBlTk^0--d2*3+2;*?Tl1)6)(w燂J\5]^/7)>kF4 śW8 Pm# O VnفES7yqԩ.wϷs~yvCrˮm]"k6Syr7._>^PJk{ʡ'e~~AdYbE~hӦM5?Q]yw7z zI8]w'V7wqMSM!-FL5.s^d*81-ԩn CøM-,Iz} LB7Il xԡuƗ_uCOC^}C8%&?pԣkp8MQmزQ!˲1X gԫ?@ǝ .y'4,}sO'a!Μl;pJR3(ϯmPNy] %(8.`R9$#@1筎׺w]g?`{*Ѿ'4qok?\{QYŋXPelrK' OdI /Ű3qr?FnJ4_C߫&>KLG{nfu,wߏgi8#쩶mtw4a^qGrF3W@IYPС=SǏJ0ޖ0O4fmDOd/Qv*F&yNoYU+>QI/DDMy΄8#esV\>5;߫7[m܁#.ͻJ CfTz>ۓ/mv2/"CcxyPϸDp>1fr[h2md]|~ WW[0TBp(yy|JXQzC3E;Ϝs["C_,zv?B>ZV,0<+R Kd-S@81-QTh}8v5 ]|]W(Jйzě/|ԵMT;qBJXueR$NA8+u󸼂@vaU&/pARR(U+9f"L#gH .(@Kֺ νI$4؛&|?vWO4>칆chB+皪CǾOO^c?F@#h`:YB֖}G]9n2*a Lzs% C )q [8=՘_.),zʥ%ZKww\߿s7{q雮=^ǟ4Opګic/5gȚ#5ꍹ?*m)}: !\Ra)k)"n}mݿ?ō"G+#%piii[lvJm>9lGFLPflOӯ8}{o؝3x?tA 0`9s";۶m+,,2dH||<.-=rë c}J8Gc4s`%AE%Fx VI@iF#Ոй7y46zny=+vxf/SQɳիW'ʌ3N'.]Up^:%%[n#[z9yk/D JGɋWZaB,81=ڮE¾eEE~ CB49R-&*B/_;'gDv1@,Y%C<$Ap̆] ءfPaiV) Z%)>٨Cy`mA 4KK.*qvZ$IS|}U#yX'1 0; P(TG1zhv:!A9.z7jԔ8kɦƮ١7j I )2d$+I_"% !Ҭ48'XV.,C;vqAh |Tں)*Y:Q#?:fxVA %b_̚e^r^h*Ѩ@>C`0iVZ*5 Q7hSl+ʱ|.бYV$hUsl]bH֑wvzEb0LˡD9: .Dy8-BBƷ0|Ĝ qd& p@q2 D!QTuoH{l]ǓF(g^O~o`s= tCy#4+;C.0dH2A%R@*`J#DYWpb;Qϊ<%$+ǣj΃^B@!v!"D't=S>5)-YxjD80iGS5(k~"T"yQ!E +٬STr֝yl7} IǞp41/kЋ^P"_JJ)Eƒ}Y3 FYS"/ߎ}zKC2x!! 'P(Dt.D)EPM 8a|?`MR@իWF`4*me!dZ8hF7|Sʤ'J_ɴ~n;`R"+6*Ns8Սl `4l9º#'HtX!#r xGQ ! L1 p$2/PJ J B]s" jP)iqnfk&%! F@)0R0/4(PX3 F]*PUC4vx#YG4 H8@@R D#4,ٛ/^#+'HpJ}y`0t|>_ ynF,EƁyG->.Ao.(, )1(QB@( SJBs0EcqT".4!?d7ij.~?B1`:kfRd.4~ti~wf9̔' IDATfM0PB1B1ƀ0B$2Ljr< 0T\'G"97{l4ɬ?ouN:;`̘1 ~Uf'=̏/qzW i'4nW+msRۧW|&v9+!Lr]eڵ.1\{,E=? E8p8 9uS;`GmwUXpqs8s0WG|Bޢ%/O$C*2BdwwGOas SJ|Rqnf#^y &ZO?!zl쩽 q<|/,p{碧~ό3ɴsέ[Fvnݺsγ櫼v z9QT#4Ȼs5y<ގ[^4,(b ɄFƗ5 cNRܬx]o䩾Ȥ`ɒ%}!Չ塚 馊(UKwY#Ǿ56{j8[?#=c% I|huJ F1c̝;7##V^=aA"7㸦1B! Į3 Q3dFJsxq 8Ƙ8@)(0!4\u\|GuL8=cgnw+?yu'XkΛ<"" 9;%B("x-ϋ%M6h`_~B!.NNN-5vufP$J332Y# Q7BqNKQJhߴ[>BYp:5%,Ϲ;СC@;ɌzZ*<1$Ezddft hWr^]G6{!=vWx&>PddHqF\iMAarJjvn^:F0 Wu cRv.61*S!1B}{di7n ڣm۶ /2#=LBdTФ=$JB^TPhަ\P:JH^h+oN=x@DAl6sHn`2ݿ-%$*H.uV$7lKD5*d/Td(4$Ih@Д0 MD^=JQ/"j̞2T!u3HPB)$!4SF).fyHJ *m<1b!`֛D"!,ϰ,ɃFēM{|X-R'OBϠ&TOyprt0jΞ*gwhe2`Q6#I$x`JJ $  kY#,WY&x H|BFN{Wi/Y BD"S(RD" uuo,kH($II@B(' 9P(h8XyRF}c)[nŏ !T3\n4kձGD,gg=?;J. /IR<8#-Dpt BH7r4cYg9R( M#wnGacvB@,23cd6JFkcRgi\llD$=s& ()=5z3Ԩ7s qIgX)+:o㇂Œ\Eޞ%8^&};B( QkyS*B$H x@al١ܹk\Mm~AQ0]FHRj#}Kjӭ^ml]Y$xFbHT02p!EQ[֮E֬1"H-xKM~s?MK@ioru|!q囘ߥ<Η9y3_u^A痞ޱcG\\$>}ڞ]<SA (F$ EV6Sz*D"k)2/,yiꀶJ)nkPr*V1SzI)M!Ssƽn'%ƝǛgo!^sfΣ\R~`bȊ+.7aMJ^rXe] FfU⹑_fϒ!Tc3rgW$ͤeʽu="N_ĂwԓT5n/߁B5cI\Y[h+ʹ"f|`Ndf]; |Qk֭ Gk_=8iL$Ȝo0f^Zsב]ԍ5&a>)iڵX 'v+Ruf<\~} ׳gϓ'O~*:g>p CNF* ВQ(XCO4o^˫O^67\ԏ`ioH,ðL#'OIXZR'}DVm{cFFOc #YyIdP߫|4n~u3gR]3檥RWJ",9/'m:…a^K7=(_ȡo՜Iz~݊Q ço.2=k?*);oV*Z 2:޾ؑ p?>%HsF\;סCf71}ӦBВVH KV|qm?\`Kۖ7G1y t_ya<ښ⼼(/\Z(%ϟJy9-s4 /V~fqޒnRx;v. 7>:x@ }J nb0 ,ao{V&L"f6 TkFvvfkoO|}0{C歈N*--}#K" ) ^#llpy˙#{ΓfQbNc\]~-۵΃YAb-@7rsNJB,4K:8$e- Sm5 ipi,;{8!2ԡ˨dUKQt) iwY6tEj{#:u/\w3@W`>EvwNyt y@Ztyc`zQ5c47Sc.º!#<$ EJ$oM W0,_4GjƊiM}yu|xIE4EH@=`T ;k^yQA~ص,K$|EizK{+W/nx#GR,Kܼp?Gӥ-em5 V%'W8ZVT`0|=7LKRf(l-#P.[*b[2S/ &/{F GJ-z\,0ӎo\PR={R"_`;V|/5㘼Qw!Nex5.`2J&KY̘޻EB͞=FXyBҊ?]@laVs*`G0۵}4iZ jT*Bbws[1;4 jZV,j=~*QM0ݫ$?br߆aF[whe P#䞃w\Oy8nч|8>=`أ28qE%A:s L7eY:5ӧ34 oQ7}uOlkXLYuӹы6>]EV4O̚Z)L\ؾT+BKZ]^fl،s#[+JYT*U:^.nZ#ã-O^ٵkWjʈF%''k׮B.?Te=<<矋gg]Ӧ|N5D"^_~z{ING=FƤ+97̝7k?&gΜyeIIIwuu .iѫӳgOҚLqro|у~$b_@f6>>ޡ7ɐ˻:T7˳2cmZB''%@jk2u*A_ѽM >Je䒿 YyR(U9l6;88:uJ,2†$ITJT*U(j9;;33f䔔 UO $CC9/$x񞍏gfϟg:nNPT-0E>>Amv->ġ:vvv[oFFk>^zɳ*2]k4arRTTvvvJֶ& K{>}g-d2RZHpHHp32B:ɯ`- 32BU]v/{"m'U) IDATUe1&"&kww+W ǘ`L'&fFPTc0&/JBBBE=8y+snBzL 7ۤ{L+4>M bBBl}qlὟebV&`K`L:3ƪ,d#ƭ A*yBYbbFh4/}l25iYBۆs[O愥O!Dp0q\C1B赐?|ÇgggČL7Q(3;^//TܔbJT|Ow>&]+V 17hԣ,KOI V\x.(4ƝR8?ա'6vuuu-=uuup?O"|+ݽg:bM:Z{/o!}^̑KL@3p'~MznqY!Tj(\(4u藧zZNLL,=Sq̙GA Zo3-U;=1>3G/)ȱf(q{ ~}. _9[uƔ?bds5:rNk:Okn΄G& K_m۷Vw#rxOK:ibD& iEc/4F֨1ۀG |y?>]GO;XJFٍ,Gg$]Z>_̞Ghǻ[[J|ϙo>Ld*xizBqFaȉ7nܨ:;F(eXfz>;7<?$#W2C!^@!!0##fdBמ$BJ3r1:!*>yXP !^1G~1ƎmM@9YP_}wfcNlװe=$T))=wi sΰ>m+_͙o=z= ~d_ϻ Qmw>r2i oDٳgsZVon.C}yԊ-]j^lKKJ肫K>;y!}x}ٯC9ԯ>bɤ&2qfϖO6Eo5pp%Iy~ߚOoX>]!tAd(U/*zp}XFpǽ6歜bidI5džnBVM[~_9]g2u}WF^"j35gާfU$9yՎ2ӆWҶXƬ9Guo-$J;e ZjdџoY۩U8bΫGU%zd_E|0m*ˡ5Q;m< 3d%tm?=^)딩Isgg,[iPŝU/T^4 ܜB\ehqg=z)kHdwgP(w1nH֥c%'j+!(IPHxE_9ddgGH$s2zh 矊珟о|#3V!%?Z]LHSPa<4 ٚ7vq'o8roVJYኆvmͯmLZ9zۦyIGYy+c|J֬/{;L&x6.JbștPBe~{NjdEUg-, Rέm 3m85t'Q-EL^%$TL80W:1˟?YQYՇ/KJVmn[Sȷ>_6H!+mzƤ6Uo堦⃛ٺ?R8xN?=ҀsVAغdIVjqcg% s<>6nume48pN[B; թcznu8O'uiѱ?Dj1gghF#ۖ9;!Vg-fmⴏ~ڲ~f5l[ΥMu[R0Y9yj=QrMܽ}>AX>qSw?!+}/ooީGo?o_v~P^h_+7/\]u뭷1Ƹ˥zC!ytRck/^~ׇnCw^{3/U__:W@ W[˿uqvGn1>K;^l9]kyl~NyK/6=WKSAt׿%}_ztcLw[׿^Oj(ָ;~g/=r{v>r'[zw_oYW"뷼_};#oJoίoz_}mwo>Y㎟{[_l oxy}//OLrnO}1Pь՝yvPG jsv3?Oocƫ_wm~LM>F_;[ɓH ֨7+Ojn~ۿ }oȾ@?p7+~~yVK߽|[W^nܰ'(_}9+=g+w-~yN.q߾zwo5.;%7 o>c|!cU-v%0sZC+mwղ 3:Z1m3M?_>3z x/c;A.Y4l߶`3?IRx^W~=qk:%6)O7-[~kxן Y~lG֩?t==S57-wrcdz뭛oy[*J. \ C_g"-{ox#g׺]7I~ZxeGrԮ~ՍyF]qU;d);2TzD!qflOZ^kL0h\hϾW;wu?_: `_ÿ;lN5':yo?JGMuY"g?Vӿ_RGw?n9.c1OmOs_6cC:ҽWbzl?__nzka]~v?]xoC~yxt(jwWQ\d};PQ7~/|_a|盿A%\aOy"-O÷y7[Grm,I [vm'8rg}㧕F<"<ʣ.c}XV۾lسhkOuW{Ϝe/G?pw>هʧ36:?{ݯƭ7\:7mzo],p牟[le~ĝ/?/ݵٜj+!}W155/_'/԰ o+\/,OG/qշi”j>,c'\NnyffWƷݹ+>;'.܈e^Q%vIeÓ@ie1VTL?zeQ쒬e^Y%6 Vq)r F3=gBaZjE0D3yc7_8\? ?<1/v {>ckŁM1Eic1wo}xHc/6c18km1xw=c1qf1du_uBY뗲tcsŽc%s믿,ˋ}ݷ5m޽{Ƿc|I?9 <^ZEpOz"OԔ 333ILUM,*TDjP,Bxc1΃sy///y"vS5AF PHP(Eь:U6%g (*b|1_xslfVx;63@1Q8sk}^:bjN9K RԳL0WF!jJ21(rb=cs|.GiMbDl 3 3_TbI3Q$ > &b Lpi&{@"< Vc1._}ǽc LM$&FPÎP7! ` 5()L@baӒ$ƤZIs|1w}v/-s|S0s>HK\x%kb&\q&DQa2BTbpc1ƅ={vW^%#`va:ɂzjX7+Jw 6@M͜U4iP-B$4Q)H7cظ^[.qk5yyvmc=]q_dyd0Lw.j-U"%V61fFP)dn?|6P$ޅ81BX]]}}2㉖?Wʊl!tZ2t3(L P"%Sj 'WC61?]qnc1dqgVg. ˦A 9RC I"׼м1['L5''Ӥ6zop1_|1,=gFVleSX8ؔDMsN jb5Y~_CPGI|PB5z:c~l࣏ܿə7፛+CT"|dRE-{ƲQcRu{8y:vRETa O-RCv]~/_)tO|c1&DdiiX: oϻ5'V^lk֒KM$|,53EYSGA4J4 /,((EhT&3p' Zmv׶gSx]wy縻׿mp 1Ƌot?m۶럽3^gffV 05W\c%Oo+\U!Ts6_ *Ɗ, 3 vmrncgk,ܶCm;-oyK6J\PsW0;o3YiDiW2DyyXPܘPf`Uɒ'gD8h_T)H"9s7~7^X۹1O쉻\]`7GC7cllFOs'R7{s7z=žUSic}i;c WןctP'>ٟlfeٹAgά o' .L VF-C9Ko{""=]=vmwUͧ98e?zdU GG:;-Kg{IgϞm:2y={lۺ,KQe"3 DSB(;^A`^EλfQKS$FSU"RUݨ67b72-<`DbLT=D(R5$LM4zEULͱx؈Ad *b(]>uD Ɉ b(J(e[,La1FT1;Wx`?v{A׍Z^^jF0"QUTA0})WjUBTT:Sf8ByJ0U KA"`$Ff2lA"xD2hMTt:0oDDBI`((Rիj0ETfbF @ɢE1` w0B#MMadP#4 HX%IAUT̤ʝ8TLYd22 RETbJ 8(f̋v|Fz?j<術+4՗Wnim\^/SϏ9~2SC\d\Upe9e~Y#b}1R^9dcvʙi0[^Vs)(΍Fv:1hc+bύʼc%1Dÿ(ۜMjcVK (!Zf Sxg&ʇ6(Qwh9GhR= HȑAUT 6Q9j#,d`PCEX5$r`%B$ZVe(g+l@ّc.b̋gVxկ_XxA2rjFOGb#9s)MO4( QLUP#c2U31SLɈJBFDBD 09l)(jq a1P1SR!S@Ad՝HD "SS̘`$QE b(T4(  Ag#3U%S$ L(rn˲8tkn !(T$D@ˉpwbj@:33v2DP,U F$+̓qvQ9H0 r ĵiHDE̕?;4'>՜ze _б6EE?fM)L`7:Klj:4z#d4z "65V*`|Q$*2N 1A P 1Ƒ`@uW#L4BA`z#97@I Jq2<^8$A O0RYu)` KLdJ`vF^ 0J8z'O!B%0ly ?nhnM fޫ 3Ԕ7|!ZMF(jc^78'J9L{G瑬X*:z\b"}Mhޑ)jY=Mj;vfdFLڮ.S˫GXY^F8"tnjC1Ff̛\nZx)Fiw$Mc1i՜pyUs5pa|j| *3U'l] 1D `ZGPlHe]$ A@9f$DFjȥAșPGv 幈`6EHLDFhfd`3E9Fv`T"A,Ƞ So b F%""1(h:YT52" #Ra)&"U QWm~0Fr`q?\ebRb(*9uk2mRh^J 3)TJɫ9ԻDGO?9 +&je)gN/X:A/2==c^ac5?8R3;4991hduuӟ&3ӳgXKc=YbQDUŠ;rG(#|#w~xzfĶas8pY(p)@j*D,EYJBDri7\J1̆|iHG{fB@IKzy.e4 1TAQ !>w%2r9k8NETG <Nҧp aV]7HL+A, 'FfI(11|$Vw)O;ݡTͩq%@ y,JUc%h‰MX5EC`Ĩàj5A *+pf0#o!f@ U-52 QوGӏC('Ν`8(۝$jC%|ӮF?*M7\,Nel ~ %Ul%65Sۺ;VI IDAT4-Wluy^.'$?QC"jl-}LC~sTM*-PH5ٰko葰t^4 Sdbk++RDTSKK'ҤT4yQ:4gNUp)LU=UL^3ql)?tȊr陇-CDUYNÙ˕VU|Dc`Ub8')sWoj*4y+7`ybieM̠w;hwfjHT^&P@#cr)7Z$hf .H9eCnV!|z6fb(UCVT<T %5 ";զ[FfQD>RBHӋ[kLҢԴ1=,\'2eJ"䌕PCY*Gs3iB'Ok]nOF_v4"s OD)T`Nlnvf:3V+;~*t%9sdbh_wKkv:pz0L %) Ӳ(aYQ rF D0#fHD<ĕYM$MR"*L TQeYf!BAe$$!q>Mz7bުg xO*e'P̀i!f3cbmTCTE7@M(IdF`Ef=̛9NӴ6Ԓp05%B'T:|HHc*$8 o!S2 6dJ/>t~Gr9&*2Pc=d$ԑ;8(_h4{\Ҭ7o`pG"!l8ٞ}f zn"b eh3TSҲbCUwfęvU +`~)k1 tQ&3++9ρwEDU yo{J'|7M6ŗ\ڟ8*$&F)W&݁Q n$ZpF\oA./y 3rSao2I׷^'?إW_esgO+UuyT(HTQ!(E1$@LUN D0zu tdQHcb ~wDxFf5RɉkDiIW9/wLdȚKd*]ӮʀdWʬ$ُTRJ!Ab$\Q%ש#UJf&D" V\D+<ĭާ +Fgh!p3+wnęSά;E9Su͌q" $FZ8,Z9U5B‡M`U WX!j#]<̈;bN^dF5oM+CCL:e/{l/ ydĊwlje^w3vKYQ08Lt]7-.M^M110L3Aѐ;!=tZA;r8*'>s5v̢s=TޔDF1R^X`S'E)yjf!1}#{E#N`+TtJ&f@:?AYԠf:11ؽqu"$X3e.JN3ebW>GmAJ3Sŭ[;rQ9M)DL=g'0$V^&"eVZpfE^넎ZD̪`aL#q%֑'\q:z%a2((H՘ Zͪ*1Sm ڠf i t{PSgnzjۍiʱ3H]}ˎC:tp&Jʨ{E-ײ+;Zv_Q1#k[YصcY\]]>ecN |^635>t>VmfHqrr{yىL..v.U5QIr04tęSkFĬB(ҡiVϒ4) |!by]HC U[>~L/}gIܺ_vnuO|Ө/ Y޿^7c۶VO,_apfzbKwLm{/k|c}/hwgJ{XjB?{Z0̇" [״鵵05_vKs[vM76;ݵk]( #Xjj;Bv4J$ ăLlhaQi=91!1ԲċIJ2e&iR%;& k4536R7%C\cLQ) Vx* τFJafTR6w!BM-RS)L'Q9F\D1Fd. n9?}g;|83,$SI#k\su;vX:qꗜ<{*N3葃nhάdaB431c]\[1̧,{f'ڝyQ..,;~[l_U4rfxh sVOA̽\Q8x4-..l'?~U/9w-ϸ%qiL&bjՁBkkǎb,QT9r\#+'tZ4ZW+tO~r 0*C d33\V #[Z\ơ8S/L8z;wz=2{v]\299\;eS9:/ PNzȂX|3eY5^"jY Ӛ5Z>I0פHYADD UaP-vM3LqNweɁim-gJѼ>ޕ =ԝh47T۶ɥkwݵ4x[Z}>WowSoPއ}״֚JPha>`3<;Y?}zMDaוi{mk_;С}nSCo]xk׿lGZ#'jU 2hE401ëM*Ha~zKv^l)duPUƼf#”#IQ _YT7rC QR<gDF4ֆ'G~䍲qhndLZJw:J|JRXO G`v2(2cO$(*>Sy]Jʜ*FcW^ck6R.~VK~ s0Z-[g&Z( A卓 M̑bn {'zZ{}Wn`'Qgsv_?ݘ{9E,$d[ɳ۶n_:t!Pz ys/pj {6d03ń|8ՁdDZ}M睵ƠŰ+K]m"j&s4ZU5QaY;)[- 6,lscݾÇ!!a9(K?e=*N{|˞ [k5z.K6\u۷wN ^MMVڡW8+8SvsxzʮK *;{?48|$5]u=yX*U:gN17 s$/_0J] f'ea.dʗcPXh0FI(fḲ>UY%{nӎ50q\B޷ͪrLF"6()F>LQUh)LCs\٧zj7qsB(E2J q#LFRk :D%{ĥIS%icqjF-ےDSl.sS\Zr&=/ɱo֒X[////.l|֨ U9Ni'Rxo%!s~֜<I10( -fNcd=^Wxg㳾 O?mW"Fu 6$ wzAP)=eޅZ$$Mء~j6:UX`SWpC!Lo4P?~|]~hGt8D3LmUej۶7?vj?tS+k5GOYz؏^~?~:Url0bԳ7Pq;+[&,*_5%X X?z#8T*JI3&I2 aJT D*kU7ȍ[Pcmz@@i|p=04Vۨ^6 0`F4ˍڙQU>btʣ,ah&FS1j^jY vB6Yâ褩QʢFh eni">Ȼz͵dôDԲraA=ܾ<ف>6s9A,q 7*%/~,NMkOY~p%yYg>Op8ȇIQo}@2ŴLMO)4Ͳ$M4Kv\93@N"6\KPEہ4%SA;"_?1v%銔fB"Z35uv}N "..[|$&|oXڲXϧ>ZHSi8}WW2BhuurF3/d'>=<`=%Ν0l8{W{j[isG}0^%ֲ%ԲGOܻ'n;u{y&bexL>DK4BdAOgn:SQkEU1Z:%Wed*+%)ޛZg~_Ds|sEE&V m0`_1`Ȁۀ@h7%Yݲ(J(V5w>{~XLJEhC|sVرjSn"*ŌoDEX?6XVe2q41;G01 CظWi}rv(4gT=F^^Me#M#]616M_zgx+((5,H R2)'OH:HΑ/VJiqvzni+ ~W׷ /9ڗn*t" _ 3 AKt\؇[߽˸h>`=G)u΢Ӑ}oJm{ÕP6ۯcr V{(٭&4i?DA;K?O?/W~?xZ[n[a[}w~NF+UU! NDvo ȍ9Iم%Gq fײM1@9rBpžsݛ`!"Z8J 7.ۮ'i -Ɇ5lٔoH%ΓWԆ)1 uCd*^rRP{e8>޹ L?rwa9BhpT]9Jhf2i.Z-6N+ki؛KsKnR+&I gӰYpAF &0;93w"]@UJ >ażF*ٝYqܐ+<fgoMٲەgaҌEY WgA(dKMeyV{cIlvӷK?~Y#Y[KJsjO0PY \ݫ>sn]޻˓g^&߻X yJ\(hWkɪ$+ Ol9cY~ÏKG'R̙G+=|¿?ÓG/O4j9޽>yXX@L03Qi%_ۑCYlM AǢn F<܇A7c8u-6+Ա~gmD vMׇH#4ɷ@#v@"1Ք\҈,%SRApeT뵖\<ͤ0 +B4]mZ4},,s`܄f/jqy>pHKM%fٳb82.HMU: !S&ғXarP 5Fr2f˯q\TׅB0'*&aUQn?+X7Rp%̔x6y=8[fqb[/./򘋦q\\^^nvn?bRca fn^92ݕ/`mŦ][rznUKKHJ&TM:9_~~puSx{sS!RZCrjr}ODsvdFҿ~D ;W fnף"&QDz[Ͷ?F騲xyFd^6lE F "jF<*jRʹmw\C^8pBP;;7d}7 b`:UYZoeĄiҜ,01sۆ(Ha]F"Ի4! EZ9,ݻ߹{;;w{fj=Տjh92R-i''*Z'1&3 !b;X?V]͊"QJf@%ar/\E=LĊhZa:ߜ#KŸׅe卣VJ^]0OƌjH7fuj9\^ҔpPd)9 78wwYe#urcB7;1;'OWHRV6 ŝY H⫥>}dZ0q"DW흠P R@dunnYk İwO݋n[D(uWvBz׮Š۴0}8+OӶ IDAT4aM\lPjk>JՑkNHfvʅA.u508y.G C"<'kI22&RM*0(a`vgz(hI#%w^f$u؜b_RL8*F ¬gEH./K)@웈^o5ajl`uUs4 ! Jt{- ק.Sp 6P~2-n}twM3,`y/}W~R4W2;/z;;?s9i%Z ɢD땩V,,+ wHqwox1 닋:i7InwᲸ䤥s óW&O?><3 " ܰCݸ]y0܋}{٘rjL6݆n('=Gw/?XWdag]Xju@b97 {=Ms4i=l}:s?ku7 ي09ܨBX]#<%,zy5]-PMC2X\@$xH`LZ JiWcnu{W%M~v1/Wz 4^ ,]׺e^3>VoPnbd+&*"o_k!Xy)V,toƗ~{чw 9::{%4 l{!tc>dSZZ6PDQ8T8f79k_]?[m]^zp%6b!P'$ի#5A8k.0LSO# #Mj76y_rY;+jQcX,z~~$-Ve]:ZWYX$^~kms쪀|2K2~|uk#V&՜c==7:rh3ѭWƽo;Ѥ buTĴΗ\]`ʋGKWMZDLw..Ƴ5լJuDc{#"V(8 Ýn× eUzMm"Jk[ӚJ03fM!mzn fcV>!@FMӐk'Ŭ8S)&F+­C.sqs!rRC2K SYOWmm(NԘ|B[AuYleͅz:jZ*ON[P Q8}W-&]EɜA+ A;M<=%mM5؉، RP5bdB4Sg82qIX\r_aMq Zw~v(*qՋ˓{9#ν7[ɺ)TRYi\><{ӓy~ZIoʋA"l0wr#3|_|Ã}H\5ȪĈ \Y'5޽?xCuLUd\:*rwÇ.ω6v"J#:uP*l[*~́يyg4RaZ q1-g3筇mGtD_i06fg![O~G"v{rKZqW"5dZ0ڔ=e; *l=#d`5EY޸wrqzy3$0GrД1h=Ó9:ؿie"r QY4eΧ֎C\'`s.j`]Id:%?5ڍk!$URhb"hnدm- f6HxJ/"MfjjD&pA1X%0j1g~Frx.^zp<(.hvoZM/|)RD^ӸOcr8-yvbņYd0:\'Pzgw^uc~zms  erjKkY ɶ3 jHK 3𢕭R)uE;IZ4Jۻ" ]h"}1gT1`fr۶چ6IlhX;+Dv5Ӫ&,\4&B) .RNZ2Wx1u֤n{7|뵧OϾ{iX.Wvr`W-LL! {1/B&ɧuZOTurq0YeUl"43e#iN;Մqx G5E飢+ s"f%geČEժS"la n*)05TK/kxv]j>Ώ~tzQ7Q: ։7w7_9-Fn:43 ̱wurri9H(Xz][o=;y'zV$6fwK9}ǧMvgE7qK c/m$"4M":q DlVB!*3&THm4[/_Q[޲ÁJIWW^߷ӴSuM@&f;fg -0z(x1Q(NLz/V#7~뷎܆B-X brwΟO>|1˭vd2;;7fB Uɖr14=MKw TVip }'ZX@s: N?rƝ$U prb\XF#vrC`wgh "93*(_A>l#RLַ)MaIbOjI뫫q9jMmaY -?>{zL_|fڋ*չ;ܔk*#[ߝ8μ(0۬ `1 ,[֑̀~OTjPZ-wZqa\׎k#= `mK֭L:Lf! U`S*뤙n݃tY3 `̨aE^-yaEKxi5]+ Ϟ> A>kws+eZQHrn0bp5'qԜQr8PuWQ o590b pt|+ ڍÇA'O>~:(2hN|83ԸmQ`)̿֫G|К#& LRːslܦB1Eg_(ng<p:6Y$ab1iC'6:GI܊3A3ȅ@ (Q&dXӧfЄ 0Azqg{|t뫳q_u;s5lYT4%gb 6߹y+e!!Hʛ*7&4ow@d0Qκn2C;wxW[Z?b榄c0N ,r0j288*gS Ev3=9^y.s`UɞtN?3M$ޟw%jc_/XX rkaoo!=+0Tz* ,UĶ_B]"R%+dŐi1/W:W+eb4{w_{O>w=Uu*KlXRV% ӘC)*ҴIɦIkZ24itJO]E-$Uڜ5-ꫜ>b Yg>6_]I̤[;Ù!!le)vb &76`SE臔GH^ D&R.6ݜnR n˯ S_|O?{_"npSرc&]l?r/\jWǽ}R;*܆Yj*%Lk&!bX)^s0íuⳝ#Hmw\Jmz<ȑO UN ț&<™R6򂀀mldo۬$FsP~j&d=>S?4!rZ m >R6ܶr\r\~歼 dJI-ۉ;WV{)RF՗5d|_~wZj %-*BVvj 5ko{fg 9`NE:-uHW|Y|*j9y0jtf*Ϲ)zHZ19,K$wg{;4眙 #Vi1+hfESf767x !P8\ ^Z1pTW(+3U꾠(CH\)ȩ/@>u9.|G!/f%ihA${.M Fn*=w]|&t}s=ukďfz;\' 7F@Efk)+\M&yҘc#,M7_~? !\ M 70p N 5 ePf#k{<׋%RI(ݽ,^;-+n~07>m={aXguXgTP݉h)bjY!_?Y; mjMɅN$bjEK\dΗ꬝AJ*6$Yj)ӥ^p,N??\-ibYqlHTjdY4Q$,s%4i=10a)vb!ibh܃Wȝvqy=M7F2&Bj:;pX~GgvIr6'17qa 8 ^r7nٳ(%rAqӝXܔHvW\\>?o}Kb~{m3v]fuϬ;1}18կukh@MP?C* 9-lSb6LhQfMƉvvҔ1.Hf a@cB 0ѥ7u GCyg\"SM)uј yu;-ȹf I~o߿!' \nF.^UuŝY^]jJ9κ$l{txE;g{>G5uK՜U$ +F||fFȚC. -%\y4?h۞i$F7}i`zWĠ %Аxq 2O3z4qJʚ&e-snc)Zg7Kyd7f@@&{d% 8J[Ǫh@V VQ3@²ȭjIg9m19u"{Ԭ~9meFKV3wtצ49ÿʗlC캽]v3OB%?8ݜ?ˡZ!nHmDVRlkcQ3晈El s ƍ~oMտE&8 9D6D+'yN7 ZnDUBb㥨y) 3<|:ehh qlQy sRf@J\? &"oV5pR9uu| X,wwn8jrój)1]ALvvvw bI}RTǜcZ<],ǕN甊c+8q̎o[ e9UGjZvsx9*WL6W9Ȕb*62Ŵ(oHH)-d Ry{<~֝>uL6vmhH'¾eNINa`TB@! rv#Po$Xf+> U0r|$}qqqnKB2!BLs!WsRws9YX;A`ٻq*GtpC׵}|JP&JOч1_Ńg=b! Jn;hz"sjp",DSi|JS804΍H~!3:ekj '9 ׆@!Qe>bt!ku z:EH)[G>]ؔ! IxUՍR}n5tߠkUI7QDzU6Q~5 8˾mx#]IC4 è)q@~>o[By"LAgp|T>%)kN،m&n5R XDak7Bn>jea,M@&5f~׭zA[/2_}wzk]wG}kg~cC ?ew]7f]zL IDATC#7@A`\sIcW[NbZ@,U@޴0[)fE<0z15"-y-`"6 u,vv(5 Q\yPش5Ԍj&80XJL,Deg '0hH)jkJpwsOSrLڻwW~%x& '4-P[4y hIk@4v̢Pʷ:Yi;;wԈAQwv#VL`;9/HBӼ2x6nNL@bڐ*əɍ,bBlW{T3sJyF'F x3=z켔)▥^Ɲ\]H miWWA/qU!-@HN_Mh*8oL"m׍SRAQH2 k2׵:Ox rgۄBԅZ(JY_r ehm'=-uӨIMn8 d'{8{Kss@O*6R2snZ/bD"|~FC{ɍ(`n3AҸH0 3`y41 [ؑD~^-p HC K*úLEh[l2-q&R1`s LE(<'Fbf0hLʱ_\\4i)D*(g&OJ^^\絛(ղ;7/N|Yt{;Gyv?C&)0=HLI ʢ$,[Z8ɝt˘ɽ`phwo6 .nY"Gm8칍<Եb#&T2Sw^.@\LcRnQ|r*H9{"Cy;[U\&򞿸hR4{Ϋ/Vzѹq9!plīc  DAy5U/1@j""F(1Lp3{/fͧqɼW3H<ڻwJK/eM".kT8BN}AZsBzmu VzGG;[)άu@K#2@)LZ\Ќb۶qPfg \, t|v5!2)bmdulɋ6Q_I8s\h 1Ā7〳jd鯑^d&dzЛh n UUwUך{D{9YXP(*ʲ2DO*o9Ŕ8^7zIܪNNHLnisړ*VԂY+f14|޶j5l 3j[^cZW+Y @'f{ |8\9 ̧vU=j=9u9SΦ6o|\hZwSh7:qnRbhoj?Vf7/֖\~ip|t2)BY_DmյH3ccl&4OI=YwnJYUE$KwFAMjIM)<!Fu󣓽YjqÄ`KڸkZJLLaz.rC2Tɲ.Ur9DF ҉D')&1kP8ij bz}д8TRL 2mU kWNcUIܙ`LrpfEB‹׳Rʴ/0G5ɝ\<#0|k8\)*5VVKͼ__EK_ixҟ+%ݙXyw7uنDӾ=l.j=]9\5M` $!E^ ], jO\P"!lC~zrnn\~Z lg+~o5KA1Aׄa$1677<?U̡> LLBDL]ye?{%X'</o?xA,ēBn'9JyצaJDxVmmx:PrPlgcYgO8:0p1oˡ 2a\އgsEIpvfu9~Rk;wH.ߦ:Vy;vS^) {ׅ wc^qyoUPVՃ؏07Svfŝ|W+ay[N΋% 1M`NTO޾OG oE-C&!04R91IUUGƼ;fn$J"AKZiJS59ZOYllMY$9HƮMm jsUD* URM,`V B^_b+;z9{\ nD:n1!3\]Rׯ7/+׎hLj(%& fnDlLVC`4 Vc`iuf); 6;;׮ߘ/>>z(#ÝYj(𥭴3Kg;g]*絓k@NL1VΓ՘YoUrN !4Mӯn7;m2@rO`3Sm%0o͙h&8^^?>F^H.ᗴB(0tHZ-maLOy4m>k lfٓǧz8-yxܯaJ&q`*ALfU݃%0DyHDLM3wҜ"ĭٱWWLjE6nMe10dyRYk%#7DZ]5I6䳙굨&rTGƀ*Ww .& 3PAql>sw?i@ AڔG^PbTMUa}\n./)4}CV@1?F|EݝȈ0A\XR)618 S~SWRÐvkP|{ck xtVujﶴX5.,G!FjL6tș@ǵgZ$uF)79 T69 >13.8hL[>|}㍝;gnSn$Ef&zg "_>B ~ZN w0cfquwUz:swrz|x8k9ؕrh{Kh2Ax ";=;;7v>V 69u ͧE&ɪN`@”H+`'ܐ0n^s6i{"˴!B!# MEhJt>㇇˰hK=TaN"0/֝檇CݥܧU:MV-5USi6KKiӨnj v^Կruzv/ksZl?1?{^VWh0_㸳}Ɏ0?kL?欋4٥9C̋9&:K:BhJEc6,X&)pm*^lpuRP&_5ʃsGvg'wjìSWT&B߿t=eݡ0gniMRRkܑ1,e(lVrYqR2A%`S+ml-.~f; X#\T0pgѻK2L^E S!N񉲹+_ȳuÁ$: B^#Pg.gIN/[wM׈M14:>m x;ULC-w#y4%b[ I=scJ1rēS&rJsbWwi}%"Fnl`qca0*i.H@E#|6T7O~4'nA8Q xqɄ$uiJc.±N>w^Yl_Wq!HǏᶙM~$7'^|TdҎ0֔\LLQjV %V$Zlǔ?~r̀aȀ*!n>}}ۯmQə=w;!*c9Y)CܫVԬ5ZH."K9y䣶owR o=~~=<q+- 6#b@DoIBItXlNdu 򳡴!P^40UxZPS=e;gO'EumB)ILm$˱ ܼ8#M!X3(Y1-dF5K-gNd,NWK=!0Ojꆿ3H[WJ<KZ!/]YBLgxgk㰎eΏ?޽fp83oZDuF qfm;_˓ޜM6%Pt n$sp-rU1jD9~IĶKggg}?>>9\w*\Ɛ~$D ܴbk+'"i6s+;l򨄞Џv:jF"XFnw_za\g^j^C˗qzz;7J],899_;K/k?ͷ90]?_z7=_W^o|׮]|ϿVxJagk4,L?v'E:ػ{ܲT8XijOώ&SR5؜Qv+99X!zԴ8[-2qw⎶݊hU+UYHH0{t^v4}fpv+UEf,VԜ)*/LDV 2#7ʁ9f7%\""R"0 ֿ?~hʳ*DNIԩ\cDLN%'^TR Y#g=`TG`M~8U?s[1@Dff.\*Yr򓝲=c-j/5 VGlzwCw^ΜT5 A ؟b/ ` # .wWPƢqHBq@_ՋZ N9* ^{gލOpٛ$9՞B#Ó'GLf?U߫wOO?=޻zm=V.g''|6ϖkrܼyתvxtګ[Yյ3HT/Yi(&q`NN7ƤԽ+O9j%(Y Ww20u/pPFZ\pMH$`.FAVV'V#'D1@L)1fX.lz_:lwSٓqi|Ѧ$46'7PʍqcJ0w iDyɲ]Is`9胳BFgڢi,?>FCJ|շgg'w>/寖You>j1sA,F\{391oZu6Kׯo۷Fu/}w[!Ϻ6&ުf"ܶ 1yMۓ 88M̘ܼIe=Uk)clsj6]5y-+FLU)DT:R;v-@5k6˽;w1Θ,l@MaDى^ٕ\RJptjLpudQ6~v'$DZv+0 ֡ZV΀Ӕ 2!" ?0s#*UQq[V#q:JLEYXB`iGE Vcw@)? ]&6PYGd[U|iwse-G#cjz);fMi3å:Q6O\8|}w!Kmf$tbwG?I+R`~MhZ<9РN"yr~GPR}8RH{L54!OH)J$jI9Rl3@.1\> α蘇Հu%]|zPBl`*f:9J00#A7{ڿV-^<ƐL ΊlΓ~CL5ZٵCp㔉J>qn7Ic6E^ 9~NV]Vb5fjTVc%y9& $ֽ5_~zWN$1fX"rw3RGSF" MiE^EX"4q$ۭE1GV1tlUM.rI[7^{K}}_7o^V.ˌ҃~yy#=Wfp#gD 0lK<%M{_ /'>?~dyv"LC&r1,HЇ4̉+A\A#v;$)4l댨jZɭ'%N))\b:3A ~ DR3:R ʇnM* Yqm$rTR am&'f1P86ht0paK(ZI!WprjXݬfv;*4BXBbjNUL[?'VFm@Яq^McM8Qlv!iy͐|txȍ1b g5r{mHJۺ=rͿWqJ#u"0@N$ >7&R5wo$$&̍`4y;f':NFXgFD0A55|yN8(D,.N^+UH}B^ZRq)cR ehttN-7PrDjK<R3ׯƔ`VƑ ŜaN1֪Z͕ R{\7_~v2'7s6¦bę۞ju2i#ݮb-Ĝx*"pRVgnIAYhOӼȎQhL# 08.F>k9׿/_yU69:Bu:M^aI"!!l¦ W )ܫkܖÚ.5_:CH4XdzSݐFZn^); (چ.Ͽ~ã{߻s׳SJL`^q})Cou`R8$tGW65mj&_[>KS-1[3bK\i=mFo^t1_& :kӆ03sc։ d1rʱƬ\J:VTeNpmfflQDJL+S1j)Vry -xksGP phZsQJDLZGw>̓k/u uyBO:Q2fPul璅IZ3+6zl$O;\q4"\=wsyrKDi k ")cҙE\7 =k9~~@#aiz>+=5Auam[g-|tAOear"\2z'lhO3&"EL{$ƥK׶Wz[W˳ūJEpi6 ,Sp!&S-{D`Fn>55/.]؉_nص?hnί?Z|?D!Er_]_EC70PXō1g qID>DbU #&VHJq^xZmبEicEpT5MNR~8?sH0u-%뾯Z8kJԶDLLPQ4ۤٓO?upV7oSbLRMPXPcD;=Tg w@?2JuY5%=m] %U$ pv);_D3=?W|՟ˡϚZ{Vcٝ̚S时fϮsЙPe 2Q6DV nnqX?~;_z/]o,ݳG4b1^ISO7.u$&7 dS|(5XucrqћQ@ u| qћpfP5*7߼z֏ig>v{g+{W F R~k}i\ω-41K֒=di3=h9SxfFb p{sgrjZ&Mֵ.09eee`i86q(a}ȆM,I6ͧt2-+_| QL-e3K%hYC\ :$,YeQ017m7ʗE_yJ1\$L0rGnG(CBu.ddB1¹\}JN;`-v ⃆`U!In~$p};b<`1i' FzWL鵽݋WB_' a5VJΈ] M-sTz\Z^y}/8>|dyOZڼU^{PyꎥA٧msNَ=\8d2کV"n4b%dτQ"D\hhMtr{e ;"(091"fJHPy^S{]k.n{Nu_+G<,U|'Eۓe@f!*1zRjMEAyAf!$Yz,ڪ5u^ەŢ_ :#e@4`#xu=.1zsSM.g/1lJBm3T,Ծ{σs-,蜄*DJQZMmXH%8"tGiS;\X,q`"5UrOH@b@Ħ瞷Ti ?voNN3F_=nA榝^|U/ܐ˅-W`@B`IǓN)Rt׷tV^QoıY8vt #yDFTx8B;^d3Num5 GCfd5ٞ&}vw${BԜjX82(#\ ̐:Me%@ D@&DqE9@# A60P&9 ~DGjm:vv ] [*v^gm@7ˢ$#`D bfYO'(dEfWdisJ0"Hlڔf:v~2"T <6qN MlbnXDt< m(#jnkA>JY[eUj V+zC}"0F@Ь1%TڨQ#Ղw>ԭ,. { Ö.2SBV8IIHf*tc;|!n\BEYHjә9<ܧSN}remvwvo[ mvi^c(7wwp BƬ e; F&4{JxtvԩCO^U C`)H=X^5X[=Tl_G (suێ U3fe0'X8rMv1gJGZ+qDU'>Zzᅽ= 䙕kWV@mz^Z@6mOP67SB~7ԛu3~ɹ!Gaj IDATyQOy3z_8CȒڜkVcu]SݛҨ({ s=;/Ih U@ M#ZTM&wvD1eɂЗ}HFljM;-E !gP`U;Ȭ ]$ 3l(6 ^}¥YBU(?ˊA=;zԏcH {tbyG<^}wIp Xṍ-xsC`eI!#w=vs9bL+5FIiX ꦺzm?ur;mmƝDɜZcW?>ʰU@,!3YR @+9}OCm@\ *'FLӻάr,‰ӶWF\w}K/lgV˾JjW`V荖y9{nH̷ %{Z猠lF6O!vZ a`APN+JS4҂ *G`F$ƶiM$+&9+D%q>ofiwfyVVC#4B5!"8d "j]ZhD%9 U$!RTU1u/^I*jT2)ŦJA͂rI#j(!@6bηwRdZc|SA2NkdAT}e-|Y>F.'X9Z&|𚌲3SQ^ڞg{vnZ'ADJ g(h Tc,P ot<`?_Bp-1x:WnǎaBlks|>6P)'ΈI{kKMkmVЌ! /؈Lkf}~9Rl˟ҨW-iiwVV{:յb:Mu;};}{[}±J׋$Ϸ"ȱC_UNޭv(T PTU$M͜,)6951y=uݎ' 3AUV|AY{βsW^pC :ZJ 5gb3H9;˞3$#.+2'YmYڰO(J@P]YgA&vft W:*h?\&@1\*S\nq|q]N|bm揯߼&<<Ν?w%O&x74m)6GCk|?z+ιW2 F1j?ho}ua48qj?ăkSzŭMëjWKͺVHb2Tl- 2fߺ6Kq^3_k^yi*F4ݛNadڵ5r@_SٞH4ǻ+ yy7aM]g^ ɐH#+ . f eQ,*\m̛\;rA1Դ $:cZZX=*ΦlVM^X:臞2WfD$ 1<7L;{{ۛq3ݫv' ( ybUAŐ4EeIcLmLu#*ښH\ԅS-.x+U4cB5$,"b!ڱD!2 (Z9evn3ɩ(X_sBqkۋu,'*_e Pq/xMv٠{'\(}uܼK ;g\L8ڌkr7^ߨ|?:r@s h5Kg] ͝ w_\t]io>W׈a-ojF "ho!s2+;f?sۀ`ԡaC'ۿ3 'Z} eP+3fQ}:4G9M=u ^Zh2C*|1\];cnq%̣43p"('-@vK6s#~k_y7_vÏ}LFbu58MW[\L=s"^I+yY| _L_}zUi)¼N^L@Քkx;!Yp3Cg$4Ƃ+ #@p z~Nu41 BEH3vĎ,gA@U}k LhL4%@0rJNU4򸥑Ϟg\=zo_,X%mG!l\ ޱC$$1 V nD$rXN~C۵㽽 .[Vo183PY_x\x0MhE ,3F;`,N:s+/G`0=x-K7y9q[x3uO7{1j1_9{rի{u]7aуxlj7ҋnSLd?׿6t͡u1V(mx{F$f >=Dozc?yϯgM,K΅Gf,LH|)/>-s!9VϭdMٟ9^i͜in+E{Ok Q$8_dsNЉ s*L٘N'EmؼLl"ZDyLb9GO-O8~sP`(u# eDW2x'[Ťj!չŶ9c*b1(G֯OuSرQ53cu,4B$Y$1 #=c"Ǥ3(rJLC5rB$d U#%F斋ނZlShL* ~۵ .PFB7YBrTK_ Kv7 !QR\-RQNI˼0 S_z_[:xΓGWȻgG~d/i[/}ȡ[nܲ;O3RjWKK:6E{ ڷ>OZ|du<_8W.yFÊ0>3x76yk6BaJVn_AN4eMXΟ^XY'Tw7w |1M.3[=e(\e9?|յm k|+řeɹ"BoW LB)J3L.EqSm>^QB9vZbhN8K9HC8qARNc!y+1Ik#t4a *"b;k[m3kVM1'hN&ƊNB1(89kvq-HP?y$TD*ˊi.## e۷^olxeޤM͙Xoxo-RbNSᵵ#G~o攟gg9\]=|W[;ek}=m퍶'h7]}!.;B\okc[_}ݳ7w3t& kD] 6z?^؛\J%ETڄ"ɶNw5XX.Kqwb=:'W{H8y]^~Wڞ+ݽٳgSkˣg={]A^y@vLp4N`S=6^`V/}}s{kC8B}{ǖs :c33.fO^W;S')4*r"{d㫗~m 5g>"daf @}W7n:op%8qM~WR 18`SY >Z΢*O#M?da2+18'AɫzQh}#X}AsE5Xq6YZf*8Oِ@֎܈ 3+6qͻ aH\Lsfʻ9M|W7zVs,D,8' @HWDp>Ku0`(\!;_ T}j#X5)0#cTSIba*DN\Ȍػ@ )01 U`SbtF]Y}it|oqF ǎ:?Sd[UPR>3ؿ1/cVRbG0X+!i}^Xw7.=vhgͼTU~eyW.}LLIs@]GD\>z>X1&0:µso|wsip5P  Bk}zz6A5 ``rCz=zd멸;H '6C32d=;X|b'T'΅m3Clc;_]=vԱ޾~co֭ӧN>_Hh`H`kscks{4X=^]Y>{G֯~v~30I`uk3 9g=_XG 0e V>0\':kl?VȆv":Y@Dtɣ;LZR$ӄ\A33̈@H&FDC~_t 0B89@S #t̊Hλ!rp[捈)#jfgh@_E\4&KN6K L=Hϻ2AuΩmd̚v68slm2"@IŐ!#8 gٌ[mTM1!)@34I %617Ie$D!Ȉh9)@d"&4Ft$UjTW) YnRҨ ".鿯v/#O9yy`K[Sׯo[Tݽkw{٬ZhDcv҉kh}ʅwίBX:ucK=~ts ؙMU+֞/]u :SP<2#vB^(o*D -BH ݵ5OABDH:Ïų'W|{:eVBT$kg#j*Yb 'x/kR;h`EP: "y#B M$skCd<<\X5͛))8;I"1eB.ĈЅC:BU/$fJuWE&j1EMdfY ydU ( ;4F#00pWhLQTcJm\U !G~U4Դ9'5UW0jV0R1e.ҳEɦDL%O4YE:K;~晧z3O~g{BȁMlmm=C"3O8#Žur]~1Z.Vx`dom;~3oNSWw뭧~^yc>WUuԩVVVV?xѣ{]Ymg:G>~gN{}[K/ϲf3Lj<#Eh^Ahd]1frnJ>9)!!}\=  H~Wڎ}eQ.utqV*F=?/Oͫj{G^}Uxo2Fy}߸W/޿?<mz__.<Ϸz#DFbNHŀ e[^ؑgj]ӗ]yV7[ێ"2˯?ɟ|oPBt1O'q'Vvg[gy(ҕPbyn<.6n9g- F%" :!ZP%p .&8#> z'ז$Ic.u-@;JA]LKnṟ(ԛ)Λto3yRGkd&` Y!2~_t":vIY37&r?,cL!̦՘P-(Jyu"f 9#";#r6!H\jq>i6nŕ<Э 4LK70|Y&r=v ]rn(8}5C|`_{__޷/ߣg۶a?@o_eY͋C~kV7F2(0PLBD8&{㘚ͭ{٫w;/\klyU׿@._8vxI aya~' _T[;;;4MGQc0!%@"Ih YBmsh΂Dtr jpٻ j ]ERɉQ7i[ p{Q<6OEUϕ,VDzZVLq,wٿ88Ј .WUb`978R\:&Gll<& WaDIT9"vv6͚,QR I {!!.תŪY;ޝ펧uh4|wl)`m[ʐUp,DȢҙu Q˦@9;d@0c1: Hhh(DdLPߏ;޸" _/TUoݯo9. `0p쿿o~}"0G2R͡$t`bf 9@r ~dޜ* X:Z^^tś.'N-KxࡥhE0C85w?}w!I<]G':48G[LjYa606~_ǞXx*pf&,yHDTD =TYU[tb'ғhQT сiFTP6Sc4EFaSZˆ\`W`НZҹ`FbLi*jPCQAQ5XiiåέUВlݺyu6UQ1Nѕ\jmNUZKm eӽXךH6bl2̦4ֲJ[;ybgRZj'ݲՊ3@qm $F' CЏH In5l$J%QH5g{羒LjY"iăB֭sսu7xhM͘ Dj4!` 2Fmn !:rʬ"B 6!6p1D#[駟Ӽy_|Mrs_g?r3O,tGoj8Ä*X&cZ*ss=y{`# @$dr*8*#:Wc8c*fAEk!" ""xSCBEd љ̌?iel`F%Uq(oZ[]c' ЌDI.KR#QF]|60Р**:ݼ5uHA2 2X*sh"`a1X` D M%2L\=3: PD&`i j`/$*%Y\∐SFfaGrj*yU( 1jVQ=: ͔<;6ӊ[ͥE4$'ECI9è Jh?u9NeY㩩,?;ӟ#ׯ_O4勞nWz୯%BOfpVc\Pw* Tg(94A3s{66 "ɯ. ޭ2- ep\~Jcyq?Y9t`S]H: 'O=qgϥBǻ۝B""@eiW<3>8wkNm@(HTT%cR̀ji7{O@::FEv@)٣ 3O- ՜ =.(P5"R3E5"@@$ªF$ ̜B9+J$cBY6;=5ڭzIK3[I &6qmgB3$ ѳJEf`"fBB>Y AiьO>b?OiޯLyCڿY yx|L&:i`L @j1C3>ʅݫEI2(ěU^ƒΙ-u3s_8pt5upq~w67$1HY2̡^n 疦-FZDlcawG1s4J;Wra}>L';sF@`D@zbԉ[ P`9f$"3od^I;SP䷃aepm%()qF)ڵ 31TR@CBFDzdRE { Ҥ] 9.:!JYnMC7myGk7ePcJ}QhzZ)au Dا>HLb| 'jw0hih* @ ADQYeQ+ͫ@I {1O˼o{n:Lb&UB,S5PpMHDߑ xyy~텯w;粬1;3w+`p^[ Onkȯ~GWt'^}G>|)ڽ]bL`zoÌ5@jW c fzPYy;&X0DX 15RvοN$Nʷӧzbyfh zjcht ;4j}'*ֺF ;`A !!0DICIީWvY#z 1$nub(Zb+"mo2֕_ju~j10:,Bc6S`UCQ12zGČ`*fDTM@L]ƣhdE^e @XSMF4VZ˲A\ BD QP#fⓌSNgCr.hF`j(AB% n`*fjdƊ@ M}CP5i,˲G>ܗn޼я~LUwzݓ͕=wڷ0ݽ,˝!+01Ī@ G1"xdo-p3ߜ?p/ݹY&UP6QI B)9b .v ٙտ_ ??_|Ks 8i◎~ol ӏZzw`f~5g ¡/,WߺvsCnz7܈bկ F ; pH)j焪m-N͈(Լ@9{̊d\)+$1L̺~r;v[n|En@jf=]J1:p@Q0gL1fa9g i m5S=Jk0O=Ǻ~֭ߙ_yg.^&1D("\vܹ#N$R'>V/W[͞hȷgO /.Lc3# $R9zzf귾[rO|Zyc{tx*[Y1X48ɀPVV#v{m/MQTYIQL|(*@*{. "I fYͧxt$wȞGWh\c u9EHZxHАؙOF74JLrJ1Ӡ L7FݵJ.i%I AZ L&FIjeMTXY}:سoP4 |,ԛFG;wv$~glva=ZUDB"*̋("/43JO4kҴAIBc9H D)<)jlH'NT Ur&c3{?p֭/Kkkk~g`-'ҏkc&5"GĠ&r=$E3CzFm*JS͹G6^yV'wh[%r?|{ÇAԪpʳ8qg@@Jg,ŭSE5j =(kfϼw/>~l7Aqc̺ۙF=ZYqo:VO;eݪJ tU Pb4 2#bJk{TǦ-oy p|̗:4qӓ*m)kmUBd/h 4D@Hxrl޴QlJ4SK3RR3oFFhak8/׮]^?ZmOp>S"NJw6,P11\f8DRPDTˑyN&TeR:zG@0*I`mzi&!R% !&iO>H3@D4TSeޫ>X@`%FU@bQyֶ=zѣ?o.pXN]ALnum;0#bSEB5 `@`AL&3Mtg酙GnmIwȫa8{sVwDvk.;wvN?hӌ C#P4h+G#L ! Sz|ȯ==_m6f{xzfZ]ЪX!F)7=ݙ0FʂL^cưRv>T; T#h>m@0FOvid̂6 951(>Нc84ƐH~x-J<6VXA)L8:BjĈL,mp07kG;;7֝$t GckHL̙w.!+,xfn8SBCD5JUw y;eUfqvg}\T2`0YZ^ SQ2e@Q0R$%Tnd b3Smp9DdȈDF11iˢJq~KbXBmI" ѠZAzdZ?BdaV=ͮ! ikaLF.2$SMw͟XX\]_[ywgp45P"o~08xxʕ'OR̷+3FؚӍƕկxֵxhvS=hk6f yxg_WPp|g;d*דZ^;szũ^̒#p++%[ovB5  3&TBKr#Pr?ni[ŖHW;W4.=O˱`!oZJMAP%$j}s0 LZ2b\[F*:@ kLs S1쌮^ڝJcV"c1%3v>i8hcuޢT1 FK休7iV!23A)j*ƶ" ~?u!TK;83Ad3 ȉG1!9栱(*Hi"`@uh C5nRPD4Y$H,MK ;Цx IDAT)~ jpT#}@m Y`?&AfJ`gN6O_|g7 4C1ó}K F:)HMͭ[]\ùvưadP5ZsΨ1ίhX =K2fpхx$UeehI*+T4E&QB DJf;[3l:eטInAG/otVTދkJ@5EDLTD=-&^4S@ۙu56vY[;/_=~(Ę01ϲV$aPyDmwDbȆ #ry@0`q{哾h۫ j K q0;bbA8QĂ=Oya dBP jS8(ZswoN^WWNxn^ZEMLB2B϶YV _Z:8F)աTrgrxn]zb|ZTI|̌I)EXT2﫢*d(rLB! JqqaMϯkۣآOD1"Q0E#K%pnw {i"Rh?1UV#52@t8quDN]hT% H671Q4kMЦAә׷֮]^{euT:;prLwUiiU )hD9f$G_QrӨ"a^{ab@CDTIn߽zSK9gB eLM 1J Zد,s=qF4Ev K"! Ѩ5X4Ā\[׾mK/רv=?Aw"oAjPu2*۱*8ǀh(NeC0@ dT `noP@&Lfcϼ/n>z7^ڹp^Xf.X[: {F@+ T%`,ag<궟^io'$_?3"ՄYL0 ]IG1(I4D0Q{v(7n|8RgD78ov-N]2,爓iߕkAm&J{1^0"WQNo;?R\SnNk0c*F 2DC˘; GRVŭAhFy^+]I;-CfX;E;Z%3:UX+wMEoZEQ+-BbPHQPP@'%8#f%݂ &u  1FШ1M)ܡ`ڵK 3+IL>cmI4 YեiU 1) : 樊dʫ`X8@Kgg[ сcffV qy_SlkQ"thm٨XeqTCGNȘ*37fhhӏtϾk5"fUPQԡ+ RwB&JKDR {VβF=h5g{^F %3IS=(%4I][֪U4jeAQ31 hJ?`W50#b+X3KJߨ\8:B#PCT#DIp3K`&ao`Pl߼nwg'mv\(JB`C f B@DT3BFDĬb1 ׹GH/!"2:4~s3@dN'jH ,`o '>qi#I|]ˑST&jʢJ8ùjC̕Y\.]g93?ڳ؜@1\MqxbcF\!okv0BG d&uP#7rB\߹ݯ0uY9I{Ν^Ȋ]tkuFd&w4I?|gwŅ>][ gQolq^9@GQ@8*)i;m:"ƑXIXh$Cd 2RmlgvD?MVޏ, ]- f4SF"Jb(jj,E:c\$U!VIZ H@xjt%"4 {[n|g~aujzĹ7tUIYJLjN]QD k5"RW#nVC/`(ss7L y1RFb\;F6o#$QÝ_fdRb(S3PAQT U{/_c̨Ox;뛷~yΖ,k9@xW;;/w]^E#@B&(fVVU.U#21N8F2BdG ȓ Pר139ǵI[f$VZ'Y&ZyE-L :T s t\x.$i>RX=V!QP|՜n &G.i[e*ZFbY}3v=D$JH 9q-DzfAXL դ΃F MTDvn{2$B!M0䙀!B(Öc2Fji! iW :ꓟK>O~$@qUUy_+?ioLO?~S]o?to~3'ijҎʹH4lw^]{´˺?cGsuXlUbc3=#n,v8! p\(JRD kIUZϜ 134qP+jQ9BDXQcĀ4Ѭ,*Ŀ#[ 8Hj#{*j i*DVOZi24F5ոVsL,K5KϚSRIͫg27u`qcBRv{IhD܂XH,`A ZtͻŨ!D3%:Lꏴ!@0j'h"u@<0B J{dsk[ #Gfva{L|P#@ROwG7u3&~Sg}.]ԧ>{{od~sUGWSΥcgRMsGN?ΨLo]ח>`{vμ TC7v@PE40'ezR֝%@jZX̨}bޭ[Gܺ.ol̍kg/vO>J4wIFlx'yHME U APZPVe3qy L9eL;l{P]k&D@ZژA AQ5@m+ hIMPP*hǢڅT npH Z0*@P Yquf4m _mt溭UdF:m1@!FuQCU̱21DD,d"hē\-T?Ԫ2 Ӭx*d1112119.C\JrEz"F"*С" I0*&ŸX^^~3Kӧ?_|_|O "\rOHS_INf~81D '\#{4"҃Ξ҃n%鯽yםqݾsw/ůs_h}{'Y?`EZp2s`e#v|s<jEQ0f(5V @  aÆju@0I) j@dBdRoIRɁ" 3k  PS* @AM\jn9r=C"$0jd 鱈Ixe*:QLBDEd&fR֞>t!'o[!D"qQB(A) 1jUH ǣ+aD9LΩ7"4Stو8Q"IXKHDĘ]$ ܌>ɭ={'n]y՝/®e N@v8{ f3*2ųZo'9+\aGa)S1ux5ՐmN}nSk^t}׼{ӧٸw2 줹8oE5yd)e7Ψe^zU;<6V dnT(N<37~,`a5zlpK$V`N9'M<6ϖōxBrV+u/?<@qK6q IZ)O~T!w])JJ:ԋiGg8Xs1SN۽4>LL]Pfc)ͭյsG $[7&sZf%GץDJ}ܦɸucaGj̐C 3*`FbppDz=QOlNE u/NE+%bVx^{?2O9s_L}s=;vmOjwwފI[m;g7}>_|3ǎ>=<|hkn~•I= 8 O@ ,~A Ȋk2M(% L'&,C޷k'O|O_Z(ۯ~ԅ?c~T<̇L<`Wpv-p¥%Y?ئ2WIE<-@)ICHg*0XXC D`07?⚈0?/eA&95.Y@ޏ Aǻ{;Ghb=*ipGܒ.0| }}7P& -T!X(̙nkv"@Pbq ~D1T5bJEsZrZ3"8VsvŅpn8DQтd Znp1R;"$T TkO +?}^s{fmK ˅rr?C0 IDAT돟>=/KE@&nnm:Xi>u߰[έ?zrN=b~k.?|hviz_Z]=zŅo;tSس˘z7Q@*S _DoGFC]G˻\,n}NZ|uwY;RJ =/VR/pv3-ر6*1[JiFѨMFp3,! Q@$|&y?Sw{wE~/}jۿ}-W,n㟺w|/h[6cW웯??sWsϗqXa=١mqxG}.L>O{i /OnNF޾bw\wP+n&WvG>.-_{hA[X;MS?VfJ9s!-B@Wåj-3^v{ n,"\zsfIqi='ۜ $φm&WgQB UBpRUUo$$|Y1o}4h"4Yk Vh8 9 +T)wJ\`YB uUܵFD0G3hj8@Ҟ_9}ߤCwW|Wmpj%ϝc? ܠJONw+wv9~fssAT؆ubO=y~{[;w!V:V83fP>fd nS=%DyH@0ȝJB'oX:}zGO?gyi%0H$.AŤw}\ o|0+?Z?o^r{64OVcP-M(b]`h!55T RE]{ 8q0Xl# \Z xֽ@{[o}jTK{~}MS"? p[~oTxv]y+'Om4.iXr.9To}׻Cr(]7g!f@@gk67|_s*c5%Gx>tޛnfgg@\:9/0yDuE^=W{{U|{H>TH@UC݈Yݱ=~b*&!m wOAj$mF̿KEummmmmmqqU/eZ"&$BF@V %R[;V[Ӏ[ uylm |8m n%E6k<`2*͕:ss5U3 dt:޼z~'?zd슪ױv711ƪp^R&PE*"4XU1LD”rLƗ6"DGA]UUYSF]UU4xRk{6q_<0#^eBf$ :o5^S6oxkz??{Ҵ-=E` )4;sг=ƹ(Hfp3nD٠/W"UUQo453t!AB88"p`,>2oqqs,2RY$%3Ӣ.Yؒdn\ p:{sv,]@,;gΜF9Vu UUXXMss **!Xu]U۶!0Nu1:VE(2K1EfcRsJmCÁB>dx8]&%M|? =ՓG~#?~Oٟo}ݏ~ޝ]wͮ|ռG[7_H\nٻ_5o~_sHeGЎ/eSquf9 KlLuۣU;nf}AfHK;Rn㳓ǟLe7;v&2wX1$@Pk,]aF&n9k"&<\ps#O'_nmc>OW6YG<x |P/ &b'%bP :m>מeE(ܕ􆊉@ὤ9 l">h/O$rLɊRQJJ蘖/hPA\LB"XY .Uj0y~GQit[Xdd$z}ȥ.]X71uS5]V#'!Xf,,AD6jIQCX0gHE5S^5Oż-(H@V7'W# !.P#iy1[?yb"B_lk{tܽwiWч~c%-| 1;ͭ#^<Svfاx;ᛮB p0 \V 3V q i&xfYz|v8o3+c"E,e.؛ooI a.@xB]ܐ2! 6f{)J NDDU#>al+鹮50S~0[SEtwက76hEɥ0ri+wk6 00 TA7@b2*jbL $Z(q͉i.^(qs|k &uX *cB9iq b'vf!rTQB ZB*yˈS*3 %12F9 $u11$džQK㯘rRsyJ[ULe5-ՆU.   6ɜs*\:7S !8-GU c=\䔭m$Lʚkm ,u*iRWX"ݼh[ {2ʝtŢ.cXAbˡ@,nsʹTi+C$jELLRA)_ ޢ:mpwr{H٣2iWlY~b}K'N}Wߺo>ga 9tbc8riauu= у[nᆢGi&Sr3UxuU]#ѳ>Ʒ_u!a {~1;6 fonj "ex1WXrm{S-Ţ*P^5zo,_qy\̥ V-7{C n7\='̙ sgǃ襧al_ Uthp 2JoD gAC$dFf!"av>|؊am,4EDC:Bp@dp Ǭʚ0H"Q((fZҤָ2 ND繺++ (j0]ͽ;.ߩUu몖PTH:PPڜ4tc'RsQJNڴJk$ q!)D3W ˂)ڗW̰~imK^|I36g.\:M/]?_n[w\nXeXEo[u\[Qw"ޱϯOjWڵ+&>W\rBr7Cꥫ_laNWߺq7~|n!cD7=܆ྍ* 8 {%2@)wSphy=J)3c誅;b\IusTG\MB6aJyǎt-p5/= U#-o{5/?蹯5T(%ȁSa1õw݈6flֲ'=u6*(r !r $Bň)6 *ERbf^w. J JǙō\v; 27tk.-xNxAi(pؘ^-VA<|Lyİ*A +`.wؓyPY( kgwܸn8zG|׾󎝈Hą/f\lے{@NW  p8N+R{vƃ/e0A!ڝ ݷ\^28K=zҙMDD6i7Wܙqۮ e2\zb9T}r=~\^е)0 nb^Hɰ- \)E}Pq`LȰdeJPX:ҿb,:s,!+HB uVo}WަK{ g\wd;~ba @`NSjzC)OzT۷KH?N4UhbBm9()XBî #n:9uLbjɬH;wLq ąGU|Ik W%$b03W.iEH%Y$[P@Ü T%L`- `(w:'atyújሊg`bg9!e3"BDkh:Jx<oXsL IDAT:-yXHUp.q],\M=8X_pB$VTl=˾c'/0{(o͐g73zJ3.R~1x=XQ{I9i`] di2,.z5Zӗ6ϧn틣.4+Gav"d߮}:0 Otxݴ#D6m虍%ĝ[G$OQK?~nWWzI\T j~ɗ@ H XP -,^{Ond3P ,,_qkYǼrOk+-9E:,½,돠)Q,G4fgaff1 У8.|]}̘xd"0D2:#YAݓBck'-c<^PK[bҕn'UoᠮDs&fbw0YYc̣k15b1_A pT4h\:MI5w%`e'-M\ IXu9Uw߽{ A4cÚ%kɹ)ePaSF50V#wR!78LCH2 ՋY ^ Ұssyliyk"vզ Z[(aMNmkk.V\.yZob޳X$9I3WqE܊sxrt|tr䙨^\9aRdjx&wm[y C$E[ɾ@Z-tL` mŝ{; \_ ]} +=';yCYRꃔbj7r] kw3+"rʙMCO؎tc7/Z3u'TcᘽHhR2w`ZiٍE]E2l6&k["oaSÊ((fT<%jLinRf84M"XlAw>Ih`!jQSs#saW&bs 4M-TRJj1RaSU( ͏FCB9ij-0+ES/.`nAcRܥ( >cG-]bN !0bWJ9~V \6BEvԪmՋjt8lq=/㍵'.:rpn{+jH ֆ=Wu'ON{] ,I{h 遉"JnJAfZtqUݷ\k?}r}O>uS]Moڟ'phx, I9NȴLH)1K 䔬h nh!$\NZϪtEZc@a@ $LBnT $BXaVba Ȍ\ŭxqK-Kge*ZBG2gi VUT%4`8:1TCln`SsSp lŋz7IUXr:դM-QqrG1 1aNՀ =SAAՀ;: 5q"3nI3Tuم :{%WNw-Z\]mQulH]*Oja-ruWMRwx~|n-ƹc.$Ke5 P6W8$oi:\4'D[PrZ@]nbq?]~SUNB.S+4;PQ `^ ?w {v.orFLmkS'WWwV.e#srXJSmHE͙f'oCO[g޾7~0hqQ92P0sѺLȓYPe mc)y˒XO'վ&ԓi't<7pTDv .D,KanV CEb%wnɭ,P˥(CKe3(P?`YA (+`sCZ* sruM٨Mx@@aR/]{%pSd* Tډ26Bq={pfǐWX?r'g jV?8,ye% ROṀ4L,S* t:;揜975obE=G3kA̒ӐB5SlhUˤ;v8٧?xfRsюdf-WxPvP6?pQS<-L!,ExF eYfŔ eB˦w=N૿z$86в- ]f(DX@QR\]C{5εlqOkd{eՐɳ qIF' ڼ B\T42k=a"!T+`Ż ?ǎ?֣GZ:F{ ZOA\[@#Lm蠯ε洊X\]ϛ΢@Y"uzz$BnTк-mg;s-QԦܓp>qpp6'"Dn,!nҲH]֞^يޠ\nR3 9Iei)Ziq@"*P$D7jj87uzb{!kTq8 OYVןL6/HerFPr3;AA&!gjؐfUfYIT4,:G))T3,$NBFp"3 9QՊ330e‰ 0 Շ 8yug=<C Ra=L2"ׂpN &QQ3x$,%3$BҲp#WȾ$RE:%~`Vt _Z/rqǛ|Fx٭'aOwӉC;g:_ɒ٬6ֺ‰j\:r L$W߁./ܰG؇';6V̜$z^Ǩ(^֕œS^{>PP5*[h!j!z:+,s9-C3Ž鲳쩏؟ g2ԕbbqힻjlsoر}EjRVC cOb9譨mZTj6"q,bBj5kt}hHT2s$S4k,IkIM -k(]JGr+=V %{Ibe{, $,,-\(L@B! Rˤ, $gy^kY-jBƬ6+}}PZ~wz+bYƔ܍، bT3j妙ZHF)%g*38!saBUQ ׆YfI,Lb*IKN`Ȳ`eW"bq֤ЀԈ)O-2Q1,thV=~o]G8?oz掯vuboo%㟽W5w៾|agZ#ۛ4eG0wh44e,U@5w ~/uZ+g_pӽwu{>Z>#'o2`g79˘jBI,233!T pd0TIݜ\ȉE&TyUVEwQ~Z.R$0 īd\r[eroJn,gx]*v>x9㮷'~~w|UW{%}*_^ |3r4UG "&PeYtk#}3_oz >Y}>ƞպx1knBYX yL`gVcRw';A@W JsW$Tbpx<%T)L9QR/)Sg%Kϼak7jyю4Ӎ}cqb$Ӯ+{{7%P7/ Ͽ aȱC˾|NPVϿ<84FDxk&o->%/S?ӕ;Z-ۜ P EL)<ճZoV{G9L5,YT#jL5Evt~xn%DX?6?_w >33=2+KUe"LlH^t{zi&^o~L̺ъ9ܴZZ1ug ݷ=2jjf^5FdĜ܈َl uK/Al&He@ҊT> (/LNW՘U( sxX%\=}v'u7 5>tYdf榈YkS!<#|O;.LS''TrhHj: #W((!Tn 1b%3 aXրۅ# IDAT` eOZEtFuБgk^UX^[1?x~Lǻr}m}jMOlw/~==8;3=;;8hiaOp ݷT t~wϽ;|{Z߳w]ܟԘOfNzufU0k?v1l;PkAwЉ~Y_Z9~`9(WΚ3don]Ouǯx_[_x~Ǜݯk?}?wZ? w=dj%g'a:ײBQ58'Q"b$ ՚,+qc;\DAHj]2uA<q"'AXd)9FKYf Vn=u,A=q)T^Y!7+DVDB ^"rfLGl-iE*,Zd5Ty"-ȅl "gyV˲,kQck0ir"'"e~Lp2`HAա- )9)Rr';3+t@$p"gv1PT4) QWR~sS3k%d?>lsUV-j|cCʅsFkkuGY\m6g!XYR<F^_ vN QO~g1 XCc_8?gaf%Ź NuEҾd5 % c:;՚s`SO>G砄ڗ^?[^Mo/}/g%=Opc-2.~ 엥ZqFbw&(VȽZԘ7psS5Sqcuu}mFɝȇKV'Aua&aOZꮕlLɴ3&wg"ZUI476A@0 a% gHFn51E7O0ca&2& V_ffff؜T1CU /EA(̪@̌C,!49,b^\LT-35,( WBI=V fnnWS[ 0gB0 2X LΪIhkNg|sQ W9"X LmeyLizfzfzW 3Ӄ2;xy/˸o~CK=d$sӍV9k lNڝ: "nwv=խzM21#GdYz;sL?r(4qey-4GNy\vϕw}{Oe&fv6`e4mpp>|!"!"w 3!22X|fNRGeQn^ Wp8$/4_e(s+LIԆ [f>#sŽQoPqwʔʇxa]-*5il2B!6pWh30P}eUO8 :N'g6 `U eHJ!,j< !,́X-HK ^'R6V(@FJ6uRY+)؇`*1aVi`2!cÙ(CɪC2+de\A QaZn,3 s2&V*ndll"p "s&\?̈'ą͉մH@ɸ0"3b^,[Z&1ݾ||_''BU;+|OXsS~ӓ,={8]t SRM^q:daH[l --F?Uߦݎ~%|2w\ս};'Gj[G.${HoE{єpT$Wޗ ollLD677'0/#8o#LUzդ& #ROzn"D 2Ld"D&2LdD&2Ld"&M0g/4D&pKhMo"ȳ\VwC֕ʯ;`D&2B .!RP@x{`I?o?S7z~Ozd! /羡'֩k^ЪI>u?|ߵuD&2|KyWW#kkW|+~]?7Gʯ}| o{^ؿoDAq}Io'Sy}9 u9_}}v/onXᅬN]|q&oD&2Dt_IG^N˧'p|w|w4MU0ǿ - aVcvv)6.[xxW+p^]]+u-:VQ_EqVX5`w _qqs9z_Q{ǯB{*5zkv{xyyyss̪WڸcZjGuF nX7sKnnar wman>5gF7`fرqct-||FUΪ73TCa<=_ikǎ;uL;Yo֨Fo  Us܌܄L'5S3^bJW ; *'jjs٨<:;`j0r7ue.vY4!p8^__̪J?cV_6mF{qvUr0L_hl"_t:~ TV0 U6f0ZKY}]e#\;lP5tx 03& 3ZU\SLjKX3(sX03f1T͒9W6\uwUхM"x$҃j~Ҏ;ƥ2o+;qj4mqm.{]pD_\X;U^>\p5$luNqPM^3ΧvY,1īW1pB>ݐ@LANFwbA0aR~.ڒ̜F `s#`8(ڎ@nLN@cVw23cwlǣ b{b%W ?C,6wm ]"얝%G⒳l1х<cQR چ4 ;7OfnEL,) AG gw kNI <9FnU`ܘ`!me "1Յܒ9 YDdF+@3pddnp; ojWJˮn#2w-ŔT'ɇnTM 8΄10 =8)F<&hX$+¶.J%v;^\BY^DNg|"5icȹv/ztMd/Տ?"LgMlu:?tFN.oL*֙R_"j/4YSAA*lbNQMOSMnrM$͑~ٰi޹oÑv!Yx_k*cVN u_pfv@;m%wU'"wkʸOJƕ9ѥMS˭fRfȚ[:Ⱦ=vk4"`Vi4)݉yea1ffPѧ1Nd!D(f'r8eVq#7vFs^t7@lz0s-=řLSLs 7Skۻ7k( *S&@`5wW/,4 r ԴOOz / tc=▥-9L WSӔY~]T'8g-9\\XK T`pAr  KJqapӱ{7Ve,;ʳ wBVL+~; x%;r끸:@_Zv0OBj`m)@c܉n6?ݚ^:sn9 `QxfF1fZ͘,̳ ܉%18/;yȉFл~3q/z+7b@L,!sWwvLֻPs#wu7nldlAε= KTn2`\S 91i R8HsAb.kL 'ܐR*Al6:~lwZpfжAj.ۃ";tnE2u Z(=HPϛ;G1LV0/=x<$c[ZWڬ΁|BVۨO7ͩ)a嬕VRnmf=q.ltʣg̲b/PmW ԽCs 3 1Y+7KubLZNj22!#JղQF[:H=yr[@ I݄#:FQYэq2@BdE=lnSrsg" NE +}LC+jYx841`nY|O8}aH>J ;שzћwl…wKK_?}?t=?N]pnCὂ^\b\S/b3LtwtAv $Xie ~3ֹQ]]h3p n4[|>4"Wƙ·^t7^֏w~Cw?/~xݏ9gU7|i7t!T%|6\.dw/Nw\UW5F̙j*'h{<BV&͛GR2x5{h߁f]X̃$No՞7ҾzC{;1=|jkS'X˛Nт==+sckǰٷHÎ`ȶĘ\ݵ/V:N7F+lG#Oaz~MGo~jNfB`B{`ne6;W̒%2zlWWWζRNx,% ɇK>ކ'4R>{xx|+o'.;ow| 8SӸCծwo~N=xΛ_'>8u IDATow? 򥶨;K{Q01Rcx흌;I>rsTźI_#ϱ8 67c3D[8{v`^1h{gݜ(#XȝάoLDCNMOY]'x?hQkSˏ];r~m#9L풷O®vL]1,QNJ&nL%HY:V/Fw%Nkf~,L+9c$5wZ;$uLtm?*fZN5Q,\aB Q!"6~AtȸV {9KgTxZ7}ſoJn|\ڮ}cqb$ӮCic|f/3MVFsVvʲ]6"dۖ;nrðcHQ5,7lI!DURؘ~jv|J#*<)gۯl&<* +nUZIzf-0"A@u@pk%$+F<=2 dC1TAܜNNgTL@쵐^leAήnѓvZnv~g5YUSg9w[KY. LdK{RУ/2{TFƭ,|E Q[Ns7ŖjnJׇ:E~bma[[E݈ lF"HT!|4T'I~|_no6_PlEֺǿ;5|ídzKopDZ@V{q.l#cZÑd 9@VS ;}8r 4u7WTlہ~^ou-zCMQc3l;[\єa(Tlb8i¼lw$FIӥwAL״#&vF{ ҫ>}ޞkU^U]BB@b5``&$x< G̀qd& La`$$K^˷[Ι?{YY[%ݬ|w; }Ã9] G;:%}:qV.JOn m!xG I*mk#p(0,#0Fۖ' ٱ(D1nDb7~ێ}5'O|SW-?si_vd}_>% 20j,[?Xlgdzn/!ւ=[ `֟b |ӗ`=p0CTfdFQT {>3 π K߫(",@8xteO¬WF5s|PS{|)_3753px}wTڞ[I@dF dNJW b(tp{"EGW+](,+dߒ߁ّXkGc8\|㼈<ڌ\dh M4j1jzQ$>|:;_?Phk1^ ]连M4-WEjeZe' ʆio:~Չ:HZHfo`yeIi! jhGu:~'];~o>:7?|b n?==mv" pëR@m B(AS`q[כaufWP.Ċ aµ/rg[e[M{8G^% 3p}@?GaϬMP0k酼Ro`FB<*̖n?QXf&cۻlbAA&gO.idl7ܒ5kBjR@t[xzd?>IMcۑ#hD2ЮT摹Z̄V9wYK;ww]'ϸ>EBo5]b"XPqW](:fhRE<`~쾵s?>F@*V0GK0+n L3O[ϖ==/}˽!SO?/#{{ooR?k1am-|K@ ԙs9D8Ps(b8([aL")( %Ԁ6zDRPB A$N_*]T] $Q$ PˌZD@@qj c.`Ad J^l69&  4}?k}nEp D|k4_4@.Dn[RXO:GNV/`F3Q1e8ʂ<ٔ0bd%Jp#n&uJ'+ř#mX3o&ŠIb\R!TuHBtw.q""*nX}2#]{[=CӃKO]nMC@!̾q-ןG~=kvu/PfVAnS0  ,"āpBD@'\ ;f/pV"ٰ6J!0ܳ׈,P x`l Ar|:'393edf{&ڎ D`@*1թlwvv&`0(@wk=W|0s) 0쏎" >泻KlQ#8$ե*N!9dZEVlHQT*]lԈ cgc C65Q+$*% Ʊ R+T<ֶ */RGxq TCZv ͠]8_~9$<7f BX3# V=C"{͠nFثk4BҎbPO͌z+IJ4(5I 9ypYWh^J,eiML3H7^q*Yg \u"G<=FTC+B9tWHtl0Ubtav^ni%I"`AmQDpc(EXVdjx_Df(x{Afxd+wLk@@莉 5~NIӀq2X* aDPIA( PHLf3 "CY%Fy~~> f񖊷wo͵nަ"a[ Ps@IfH4 v I k~f J-YPQP$"8;ug\i<֗lՌbAsJ$ (&Sk'jscPN&.벨[Jn+Rlʔ#\dMj@eBgZ4,44j2 P#ʁsdlŦ5tczLIjA9E1f\d* x`Kf,kD`HP %Cq'Q7yN0)|dBDIw&;}tT ?S( A;v|uRh4EF%vTIÚ҉*(/v"%:5B,ڴzeMEL/m&paV*I$FF-Gm1vh.fv5n)6iL|=@+)%R\QJS >"f2=`q>fEC(02 8j, 8(<D-+D5̬E #RL1Oru;"B "3 iY"f2H}Ƞ*5uҾ2x̮A+|9Ig@ uE @bLKU|\[×h^\`ƫ "u[MVN[ ΍Yy~Ө'b'cNJ^fѠ5%r*6=~|Fe>>>guNUބwmZruM'Ut=Qn "A¡a+RSLu+׽1@wKuZk0 blfGp|)L`.멛7Wz*JF3MԈ8E.,yCoDTB^f)Z1[[(Kʜv':{[v:Qϟ v #"e u?f/{p((0XnþVeo"Rr, [ *ן 9!݊VٌM[vxTčJMLŽr3/j=9!dY*5ʯo6R 5);;ZSXJ rS+W#E;~~akIsjHtKBi4Im;`TC)' &!{x%XDi)-lXp샷vZH@H+Ul+T$xKGGZ$M" 옍6,54"sC%.Yyj+Ga)NwPS/xl_#e~cwٛ$ɭ"+iԺhGdi='eAgLq0寵.ު ]KP)Cxbmу68 (,;c Til`,(R[iY: Dj%/'n#gO֦ӑ-=EOG{FᘢXk Kcͬ4FyHcMN;iܟ68Ϭ%]ܵX(jFJ8-tr7%!Jtӣo4o/uX+E7/FdI} `P2 HQQÙfshtKӲ\K*ב `op=RSaagWjc 'X#(ăbn(H]Nb%yӈBn :Z9J fn09έ%ɱ4,.QU-Dq54\¥XD R3 *NdjDϫn"FhfՋW6vV^ &#2{ E;3L{KT#H J7V!X@LBmVUS$P4vEw yt *JJ$F4H DpF&S\Jӝ|R4[Apak}&̅<0wfHĩCK~>Xw?͸ ӢB֌qmsBMdLĈ'a( J*MaXo[3P):sD+R,lyFx;Ax2r\ԹkEt4-n8X#ݶg6]MZQA?um^<_LrLjPأε詢9k|xXIɴp+QP?WD"} Ao-?h&id E(@@OD"ȳsBl`H aF.u%k"&B2RH gq$ y+"᪪sIxm:ڹx5Nl6}'j.hHzRMQ޵V<0T9)*\JEs—ʁ+p1MO_w-nrDl.8&z'zHڰa..E41\3wMHl7ᠿӳ%^fp:qnH:>\8vJN_`Di6 v8ՊI"PyU zAMwϬ>V>.3A{% @ @!:q{\kH/4јkԾQ_I<1ȭʁ <&SY6*j$ ,T"A-X֨xj4r,c"7pܓZ~0˨:cMg;A"+v' )%Lud]]+ gGeD(Cm_ LP sN05NurgZ6^HT@<; /UǎVsf #"IjDNFf2 {"Y&) ZhWqn\n{>\Mc K1}X сf~UU.+U|.Rd/Uz\E IDAT&:4#euBBJ0O&cL*iV_ qPr zxw&DzǵH|{,&$ e/'Q&i;؉c-gtWI]V6b.`&u>?@A@҅|<;2.w-'7W7嗕n;?4мS|G녅\6gB[/,CXkb03ף|'Dޒ3>q\1*F U@Tv`GNB X(Z4#P9a.g* j75FA(W MfoO C}fMDu^3jB vd!nDE ;ګp1P3 E ̮q˦y1F'Zn'>R3T/'m5uiU(=\lvE4?~4:YyIbtʂS.o\G.HQjR v,+V5\ K3^\PG>.FvT64ưh*iw$sʟ8)"+`(nNαVzsfSF"LO?BlUiD y!bJ @v[Gz Di.;f_B~ wǷ2ϿX7oKgo~Շ]~kկ_{oF?? ykÿe^jynm%d n ?P̓D_0fMuFFa!X+V5jΓI yYs Ȑ( x#гԈ(Ai" TA`,y;n踭%+MĊt+[ʀN;lk(5y>*,V Ef b$d2.'SFCAЖ6H aB@ ˴(Q w+mH#ԑݴ/gHm(m=Me,o\tJs];P[1&z|i#}RoȮG N|J8 L><7{? ޢ/Ӂx ճ ;#J],<;?uL}ꤸ f 6H$ 5vPT"ק$IBQda )(DԈZiT 5F!8u"EwuvY(^NCV3@fHF-D&hf޾ދ٧)  hFjpAxR4)4(압,m$59nVWF'3+݃']sl}$ FLUm=cn@#34J@8&F3I$qȄa3_x7Io9?|s']Jth_T5HN{k$Je b7*n'V$}<Ӎe;Lx$DI1sֆ*(G|Ç֔V<Wz'{,DG1:k_Kz-hoo[-{9[O>tYH8CG;.~߿^nw"BMφi2woM}PչM40 Q5,ZB2 @A1;K?ɯ+?xxl⾩'or{-c{n[aWzazrG%HT{rg~`=}dJ%FEH5P gR=C.:JLr'm4┐xZMGp\JHPiϕ]0%Yfm8  "jj:hH- )~g#fJA@fm"{>%ֈ5#X́k\0T6XڨnD")S(TkGV:6$}?Ӂ{>;}Yhpڤ_zrDq`+pEکUb428aX\ xYwN+ S5^QG9_JnMb*\kąt+)ؕU( c]=GWg.U9{ʖMs,{g؟{ RO>Y3M#DP:,:e!p j3Ph SwbِjGh U3NqU;,SZ!‚4@$QIpADZhQ G2 KW2KB( h҈ @ )np[YlQkf7b=J`LB@DQ 0E P h'XN 3dBZHR7tk!Ȩ6>իΜjs%1DԤ9VW7wcNlM~kw=rrEūm:luϨ|>qҧ? ׇ/-M=e#i⭓|tR^]:bĪ๳rFOCIY:Ly&yETjAD[Yv{N8l5G DQ SgNǔf˚~`vn_}kt W!Hlu3O}AW}.@p %V=(%E0D$ bDDaMYվȑF gT4 >aUr iQY m+g&y;JW:=y^ĉR(B#mg^d\gfQbJ/udbs<ȵt8- Í [X\ҘѪHb?gϽhDyךH&AXoT) _E8A"*0r-+#VjH$(q/tU92Cx ƇYbG%ōW.{BcUFf8:4g뭌3F8ɽ 7䳟JZ@o)nh;_<a5 (N MJHl:L7?] Fa4Bpnx#=?LVR BBuP̼(1#P3k(\hDrSA;6TqGܷc֡k)BM`mDuamK "egRlNCZ 0X 8N`4p;oOr `v] Nt4*)}İ{h\>vooL"$Ir{v\D#s?vM&oC`JO2p~7_o:vt5݌¶y¦E[i}lN4AIJ)q3wp(hw{we߾7Ջ-˒V $x$Fب@azg#)upuӧ,MƣɄY(tjVJ 1YdozӛG` +S\|O+UkKF!Fn[Q iGGXb‹(XzܹmSk6!b $8fg ǓL4@(MDTle(DfxVòXVI^[Y^P hASp5Wh̞ZҕӪ"jHζQlF/@r&5#6wV"PL@`7:L,F ܰas%Wy{鴴>/]i]izc`bx<@W !تR7à -QD®'` 2 nݷpz~Wy5`;jٰ\s+_T9jJclb *?cʘǟw1H+MTJY[EZS姟~3Q: fv6ZŴ%E`/2ahD- (m"-PTW06K]T-mV{Ƀ:>*ҕ6ɆeЀ(zHkPXoJ LEgTr5!X .T~jB F`\#k*0$*‡u޶tv 0^Nu^ŵF3Ny.+KW|n(&e}cBcӚ K#A`$YfwwW#'Z ݕuJbrm_W~<޹ݷ>t;&iVۥ tj/*T ;o,L¤`<ywX=ZGo]ؘl5hQhDI9jgփZIr?2[PC3Mڌa7};yV) YBD,g/<@k-ꩧa &) p-8"IE!J%3 h$`F@*kQ7M 0@qvFBd* *mb ,XJj4D項P ] &*ZH,!p67KC(샀00 +zI*[B^KȰ^3 󶜻 [!j`h`ZnBBI"<[kxo|Գ%u@%l*]ĎK$TTl vdp vELN 685uK=o7g{?~-ZZԧ^yܻ]g I#YfF):W{BVD;\~x}ڋAyaD/I:qnf\d`X1uٹn$-Ղ޹oW,q'q'QOgY9Dey^,~UJhS/ ֙ݻ3$N/p4n;{jOO*eZv{ Nmwt@{k+!HMNb/gΌ&7ow}a)ۭV`缢:Ξ,yY.܋WLw3{5KS `R{=MJ{{/<|@^ۑ̹ [_'Ȏ#B `9X&CAh֪q$QQ!q]l9hD}eDA@",ޏTE$`JZ6$R |Ѳ0J܈c@DtF A3Jj+ 4yc4*p^؝P1pp("U˸ktoHy䳹BFς Q7  !"`VȂbAT:/י]Adj&No{1E+FگE{M֥Q fjQu2ha'awyRW%'QlMgYTvme‹'&ɦYLUTP븕 ܼy$?zRTIYv݋6P20yW8̋{&AL:'YdmDFQbf1:0[>owVW|0?煹5rȱKz$.5MD҂ei("VdP%D!BC" H)2:TG&&@ u{ @`(kBE5hB@BAs ""D"F+d P^ @A)sD)Ǿa tG7_;tܕeP)0ʂ dggU.bX i; d(;+=B%֘,k7퍵7(k/^gҳOFZ~mgNO{.UVVKt,S g hd=PaZeuW'+LD1qUɢ(u[eY.ցw{ Էn$ gFPQ*RwWXǟC&!l,r0>sHV_r!>(@ HMw,:# B E [+`i4ʄDF0 @EPk@2^+&@-]\#4%Dд#ETyh"RH \ *@܆(~KsK| IDATج7 &y00x+y^Jd$I@7$ X{s瑭jV's:ۻG88ul0vwi7Tg[aJ~W7nQxo g\!:U_iW+i[ޖi+nllEjҠJgHw!*oNo;;[ۛ+άX*QJCtQ)9+ `"(J o\B)C'OU*B ꕫ'}ୂzzח?WB>wfNO?g>-]$_ @ ARв )c!RD9(L5;aC:V&0RB ɹqldM:6=`# $dQqE{K16C8$3 "5Yj+qxz/@Z ]@n>X^Ċ؍ tC"˫֩ܤN<|HP)ˆmtD٢(wWvBVF7g9<=Yz?>s.dh{Н;wN;*1D(ԚT襪\a=MZ+ރ0'd yӱ&XlL( x'ώQ|ЫX,~i3b͈()Cd*hMX k s`Jkԫ˱ aI8r"/&[w" H#4n¥KSU#FTT#B^t?J),웿̂̀YyH "2j-;²V٣(*+QHGI ] l"`|6>?{F]d|cs Y$l"VUED(gy'Fa^Yԙcu[ǣyu|g'Nx3axW}%ăѬOsCЈ<0C]\F*:80сH(. b@T_P+R6ƪXpi("=`CD!jEK:"  .qqق.@b `t'`tI'y.'vd+rtV&EP흵AFVJE^*'xǽ6`=+{K}䣟RP>ɠl:"nEFEYU id K'z˄d>~c mb%FZ(' ^:@A; 2|>ʋ'Fʉ:HreI5+&4޹ &B׮]vFy6fJ`Y♭D"}uWf=b8^!.'x(@9"ZB4pC3$"v BiWK1c"DQ,"űxfP`(xdtȄajHD'8{¡C[ʿ"H0>D.K%Ԍ%w[E/[4/3(VFF|f}Quq_T|XN̶wt+1zX,Tv\ݲS__{q (3onK~?xq// CDPeU*k}hBUꢪ'6 QfhЬQtTϺxZ.ͭyH8 T۪Ƽ]]V_*,J~;ygw'&i-nϋ~JT,཯X,zݮR{ﭵhavU !u#W\wܔ44@ ҕ+D+ I@" "gЀ KGЂ$&QkU)jF!Q6v@dApZ@ŏPP2y3# Wd5߆CRF1&쩩 & h p 7G^5xVmmhw?-IB@᛿־[jՄ!8  h2(0%8 NZ6A^N+<ыC8P*s{{T4MYl4lXtF[>ϼ?;*ZJFUZQ]C5-ʲX_[k}#ۗ0L;ۗ|6XIzݎ!\D{STe™@ KA"X8w?su쁇g+P?.4bW68ݮ"b~/^k1JXHkk+V1[WRwzx=o`Q"a-*R=3]$D|ZV5۶)HI6,!*'.HXo f+hcC{[aAJxq:КPDX5r Rp"҈ Tg%V!{^ E ъ4)BQD̍/Dh4!a!;&" A{C<"X!lPߐm˘Xd`f SU;fC7o޼ujxmuFIh;h;9O Ɛ2:48>gϟ;b2x]Em1 ݻlO2Wݜxmdw{̻o WATk6QނLI`'ޯ{ݴ}S=!(0`;n]pZ/?{jv["'yu$Ρ_wld[wĪ6u2/ Z0ۭniw8"y^dY&:^!U(zx|0s^[,ǃF;ˉH"-lwr[ (@AxޭFFUZCT vlu| q֕8" i-օ:hC,<{T5҈GiD`t[GDFuݐmfRzd1Jyv{IHRA~!KCL&Dj P h#,!㺦sq|e6wMS#MT󶰈yDu&r֡G5_UU>'d}}p߃Wۻ{ü(糩t"S֤WFٍ4(?7wKkiYT7vƓinTԖOwc{|驏+ RHn)&+Z7NL)kXgZݼstf{Id0 6 vUYtcg te奊x8Osg`3Zl&n{^;㷪7eB 1viTjZW(R?qWUJ[0DMPuNYZ|V8'!~]ǀ$hmmؼ`E^4- > PXD*lTڬEӕ/oC+ཱིVZC9TD$$ </B arK3{η;ln5!\zc]; a2 cA*+Lo\zf2wk)xn߸dfHP CQ3Whhn7ݿy9 NN'BRoYt`L.fFxf<}yY*ʟjx]uԓfw 2vv{>  #̼#U[TG" t"w1(퐕ʋʪ.ШqTc wxF;_&-RD j[yV" g 5JKF2mP2o0e~Ȳmli#.}SZ7&(K;Y,fyaA9*zLɬ^A+J}{Ȅg'9q[k#N&b;?[ywi1,$=wַM|vc%VW`H c˫2M͵Ί(!&ΖYF\ln1'0VLHazfp?,*ʖ>Hǯ]'^ $pǂ0ɔ{VdE^5 "P+ž@#j([@N^;R䋕og/G/wտpw~{? e,b_4 ^՟}䞵յ _p5G+? ++kg{Ǜ6ky!3[^ϧ,PQp4xa=nu (P.ADĊ(Ёʜ+329/ǚU!`Z/enC,29[I D"X^Љ8daN؃5bDB|C@/ld R>4VuSF!j"P ~>n4/ @W5W8sΊr4?~ `Q?ueoMoֺ,ˮ\,YM9ıHb&~=Dt/9{S?ܱ[=v_[][$)z~yVE5};k_]uʍb{_ s+:0V| (7};ym:WVg-Fdei%Įolܺx"imU6W+WJx2qRTeUUT&Q7$2xy6u:! B(M}Nl ;7?? ~Ͼ|Wn\{G_Ni}/L>S_?_KWE?{? =['~/ >֭[;;;2Ӟ8xy䊀tR:K‚MF X:4 hBYKQ0PF@@ E]EA0 H"&5ox+Pw{e^b>pl$tT8 ge;Z-j_+6qUQ`;w;ݭΝZx~cu&lV,ag08}_u(]Rm拲t\ 0v 2;څ+yA}gwXՍt:UP'axA^OJF|Չ(٭WnevaŀUlZO}I'q鴬tQUU 4E1I8j(4I) BS_mri=v՟W ;ǣ}L~?cc=_?cq_[߳{~ɇ/=_H:-@^SҥKJ6k5 1{'R:6C6/!Px҅e@/e G#gF8&6u(#T¹Qw0ODL%A3xY5-)qK-ae6(W5}1j(Xy97Z@ SUnﯞ]hWn\zciMk˺,R~lm}V8_Mct-|Q{Y$WTSoZ76H'xS/\}Wv"ϝn|l=uexcgΩw+ۯ*li"Owµ[WU7TJXP ;/{dmjcBEʘh<,Y‹wt|Ǔ 0q,ܱs Ă҈x/&f_#|VH8Mb&;;ۤ|_|9sHIoܤ^Xi*)y G[D?ww/ _a=IɻR r(}$E䛿Xk^3ffk?Z > z -}PhF#(- otϰ&щXֳ#⁐FhE`u}"K2Ԩyi *6~i Qcts+ߊR 1 ) & M_ű,1z4IEib~pl-V!',l$4!s{J?)J㘽D1>ǻ8+f;\tTvK"eh&nd;fNg?)kIr[+o?VOmUU{o];ʪ^U+nszkugyWYOx.U $ u λtt@yE}9yGoV-w~oɣ??5lSߙW h=9ѧw?9Em+7]An IDATDq# WپBG4FqܦVЉǥ_H9 !2KӇzY g[dT$VȢ ZiUn083/+5 ({/2ev A{9=slH yFAD5H;44, X1,M+pձ~Qt[bn:wy5.d^w`ZkWFΝaE{ɭk[L{{o\^GbG!]tuR9ѽpn% O>#X΋<^j*d/D+~[S adhF{gibTRƙk `o-" ^ pw{fd+tNʇ7*rޡ"cL~c{X'4Չ76:kW[I\x_ylmMӧ$i 8/S 8XxS/`w οBp?YMޝZ?1o~P_'[7k~Σ~_77 V~x, |/]lRGf2&p gp8!D  $V\/Rמyۻ[$Df޸6}8 ~xx@ރQ FQPy{縪!$mʇټzM> uk5l;~؜b\}{UHuImsч3qykڒVASy+םl6Waw_{GJ1k~'׻6O˪j VTUZ /!5jΧmO~+*fhqX`{{{8"Blðfs( Vm&rn3my>8`'[h>j3Ɋ-&dkQi(T)C$0R6ZP411(RE1ShB*ԋй1+ݍ4UeYI4޼ok{ߟ]Ŀ^ikQѩGޱ<+1$+ZRé!,:"3[xV"N RB K؋1+͇Ol_߳VW.ky}e=ݽq $JUϋ:)cdzW^wW:amk[+46#9ؒ%AED.^hmHΎP D"j]+U#u-HDUU zCa #Axc>KMXֵagE' $]ì4B@8ZdYOtNjFE2" 1pQiVsF)Mbqc"Hs #jaQ$8 κ(QIHԏC ^ց^F !Ic61"MMia7>yk-"! )Nl'|F`2VEj[V'N?A@Jdة!a4l(TDY]Y +7tpGJ36Hyew !"o񨳲G1 ]7.Jc""%7jdb/{Q\H ݝQ:`DE\]I*k͵S°zZkj%{<謞\_|0JK?l:?M}c?򎋗.[Ǖ-GQۼ{_>uqDU x+x/*fH; [;w×QO5z$g$2v3b?F e5A[5<0y28;ֵ_Axo"V ZWEDU9 h$`Uwt{lc2mT|C㳊EW F|2[Y.Yr!xW9H8jF銁D4fhK^΃8陋> 0+i(H+U\z+u5-@DR?{olYzU;Ýߐˬ̬RMJ%@ 0ێۄnptB1nlGcCDAMvPTB!+2 ߰w8eeMB* Pȗqy/߽uY{ o^Q2YҭvdVd fTM e^Zg NZ$h%%b8& MDI5@s]z]k -%VH1X3?C'0ͯwE5f;ow*]Zxߙnt*qd68nZ {y(+U\6!֫ I6mf&ɤ7JfD5VqLi`:I9cMw4$5-UObj5^o.^%`rM=1]zWìM6*D`tq|rGLJU.r~#zW+fws2V+U)Ɣib (o Y{uGP%"3Dz)֪뭈2$8qId!XSD%jȢ$ X:* 1E$:Jxg1J:cH;coXWi!cBXjrLRߺ | Pq/8[?%VZ-) $6*@PḒ׳@׷T?//nD d.o|)9?^Ii5[=|;'{',pxn?2Qj~ ;WU 1ryFCiZK,)kF\3m )gl-LZ*Y `1޾stwU6<3R"TLSwMx? Ek| CJlY9kP>Ր t.;RJMS;笵?*ƓI' ߀O 766)+IQJ*-{ݿ^ 0 rB)gJB` 6  tbZmH J1UZ!+1 \'rf0 J IaX֔̚!@=pCMȢ$qC# lp:[t"JkdJ2b\$D( @IϞ! 0M~AZ+Bu533X,idzhPnnMulllm^Gj.]eeүe;W\sĜ:-$yfVRTX5KiN#}c."4%V&^NX2~:<7{& hiCD:0f:==YYk1Uz!mE]v2Y21b,m/\:~퍲gq7bo}_8\>2gg_ŗ0<=-/Tq?y9gb,s72ƒ11 6f۫9IRcrb-q:8'"Eżm><?t›Nwvred8Eb`jLU9բѐ) GTu{vꥍz"` dgewܹsq46ի׶~NQ&:Q߈~c+=N)i1~IzOU=mI#$;t\޾v'@j:KhTI I&c)& *r²NNw/smsAJN5Ը\u0ܯǛQ&x=HVYHA-p^$uLOLzՠ*L6ykcR2񓍍v\y1m{1~ݽLE&O-֨W. n~oz/U G^ZC w9RB`4?N1 b3=˕r hul3g5l5[Da,7~wˤc74-3}7dv> *R [L7OULmۭ͓ln޲̙2H:TWOߴԛnۺU $HW1aY5hEiٶ没_'e];/2T>%id)lӛo䴆ˡD\t G74,{p˅N8",lf a̩ =7r5#ۿu#ȡ_z޺ )F& TPJDpB^oy\]WՃW"bӖYi8$X4jQۄuےo @REnc }x͛7cJRun[%֙c:,3Xl2ejjxXwR.c. w %isuI?"%(q$ fpHjH]!Ry5>ĐskcLĝ%J%6E}Ņ]k -F(9kM'ZN<| Coz`˞{F륉AREǃA3;s㑹fy^\|||dx_4qg9+?^VU[?3% 'SZSDAъB 6y,+u"%ԨА.T9c& ,: i\>fG!o!"* K+ PjR$ѐ4u S llQMhI)Y"l 1ؒ*uNERRn[8R6X2GkɆ2 A3:)M/9#s&%3EJ`]sԁZ2QeO-/hҌ\27|cʎ& QMB}ᠥ .onChU,/fSԇae|6rhb[F >hlLl6&[\=}y`6yTgs>s}U(C:SlQ&˳re}VIfSE12DIB)JtZ-UYtB2ܹ[P%>KG?o~|fʷͯ{/|>u;~Wmڮ7nOԢs:]Uʸ6I!.d$*FcSrlTwέ|YX%[BluӊRLE'!j(sFe *z{BEۮUafKl(mJQ+*T: !Դ!9]y# GI *15mR"D)3bo͜ZK19;ʘj 1QtwAŧx怬u3\_8:ql?߽qx >A@/q %9GU/t{wtm.OIqZ1 ţ\cbXYT5ͪi/m7I7- K27Ӣ0<ͨt=peδ `2{yIH;_Qo}){C? h2Xf}'H[_dݥOզɕoEWDOB0`ZbLU{& ]O^~]G~߹kg~e ?gk<g;䫾; r/|{W7?:0o۳_ևptxZ/*y (7Ԩ(h=;[$1o L<.jE ܷJ4jcSߌBeRf>h$ 41x D똼 7q^,7 ue Qa &Љ *"cbc u,6cVCܑS~̇Ycquh<<b@ 6SO!X-::h'ғ$*^=swN*,$ 5ΐOE&â5\GԷ}ӣb{<ڹx$ѲeI4d<>>>bi~ћyW 棉\G?Fwʿwֳٝىy _kZenulxeusN%$̦sS$XBc?O$ԙAocglϖU͙ղBn_Y&s~Z)s@ &ϲTu={J_MM~moď0Cǯo~{,?zĻ?=w=ZZ_t3ٷn}4r/|ڻJ+ !-Anj@]=j= lz )@3t )`Z&M ctN:5(3&3֙ck6iӼ K}JĤƀؐls]zDLNH]n# Pd1Rrbҍ~>Lc`ZM(If K 30uk#U[L,2#un(: ,Ht~݃S޼yj2If ]X]X7Uf2HFДFz%W久٫O XeȲ$4)gìW4oNl4ejR2}G8\ꦷzu^#:%f2agnxImOpJaN 3";ї޸?1 e[a\e͊HI`6j/1sd5ev*e: L7;L<geoIYZdo/n ӕ:,@fiwkÿ@UUo߾裏v9gN=mW8o!h/)wEg:aRBZAP(]1lX0;2wR0H hE&$t ba6ȶ:X^,D@S1Vh<ϭ#4[qdM)2{a2q[Y#!Z"k:1;[BdDHx&>~]k7?xePM!Be<_!){  0͋wɸWyΗuh^/0;i^~qc~aiN VnXfnBȜCp|}LضǮ2~C;p/~7~ᥭ7}pql<-D2Ȓ-13ɭ{a,2Vk ͼ ߝ-SPtLP;^zT=!R:l&Ek:9^2jj6&㓅'~Yr]PݜV1_,grJRP_9zw| _iuf n'>Էٟ|㛃R-_aq۶З~ ًߢr*uDZP*i-.Zv[g!*rX Kdx\TX!Fܳ'ebpny8 JlI&&9ǀ s0%*%vδp9A"r3YlP7i'ã(h")JbmPKS"KNӅegI U^.7N" ɲnB\.ʨ_j[:|#J-7O֥&0e6llp{yLO+F_tyab8v*7'}IVldE֎5CWIXdK/ܙ<66AMlGW{ƓW|dd'{p~|0YvQ&:sdN+mh۬N?0Z.a}dWn~_ٻ./?Ο{._{['>~7b?7{>|ݔ]T5DLDLmA:dž{NtK{{R&_ةQa@#@ ,ACb2$)$Q֌*T4uJgUgPM gV -JKA(2c@E1RYÒ 3bXED#[Q f$5&IX30\9IbJ Mm&*dYCu519pD!`@G6n{Xln$ѕ=^o(Q9;vc='Q3%AqyyQogYӞmps׸W]nc4y=QeU9?vWj=1X[GbQnqBhwOc/,k1xǶ/?RSdBTpyq.ѥ[ǫ6VrU,nI!B<`ĸ<ղh{s<.Ο?_ʳ.*3}v?__hW7w;yC?"pU?+_/1+ǿW~獓G_?z^EPޚTQM:+S.UWO5gF<]O1;@"A5@DE'`.MDDh"!ibg-%QШ̘ȶLF1VZB2X%ۋF!D p 1sP:<*˱K˙5njTjNJWWMkAU,[k%@AD1jJ`cT)Řb!Ap:[1s2/zŭ-Mʆ] &#v.m0(.Eht0xq 1dgCl n7 W{|T/LηW/{y [؟k|ϳ<3ôAib0?Iifyp?'첨YB9J<\?ZF'2ˇ= 8bj;NMo"Q0'L"V[.o}_~}臿G˟~Z~׺=N~޽ǿK?3p|xxBqhʅ@׆Oȹwɀ )Q ʈ*AQCLTqDF4"BR$l79ը֦%zM$ d` )X2 햭E*جB жј@$KBt>P ᳻m\on,gHfY`D!nۘ, O%~Qf h1DRD,92wt?U_eIhul/B[~nMG& 9zcQͳDU<N>P^eea^95388+vgzS,q%eyQ#Ws l~P* *LI5v ӹUҚ@Eb!@R"=k5!1ȑmf- F`m6L$DDܘsl\dyGm[&mӦM! +KQ8׳.Yղ)`l+ ]ZCrRaÝżV@Q5$ࡼBDnV1Ѽ+7n޾|ִƦdXpV4Xc%)}XpgH@h|\nmosJۙ.z}zn?G̊o/iFh ֵs4 Duun=T3?F@M FlH*JNF*;!:aXgHJH* GTZpRI)8%& /Lr9afMi30{\\DKւVMN,QrKFEuAII`eQ6k;BlA0$Wb-8A_Zәq*m"Hle2NI""\9sw_({+yݴr2}EMq/OEr^4PcgI>G$koz`/~C횐R۰5ƹYcZCŤ}au 2YĢ0^hFA)hșU(EESML唗F3Wy99]f)/LWx>td%Q(py PTa 4ck_3ݽmۓ{$Θ X̡& V$Ra00pn#Z鹢l|\ T\ΌUl +.1&B$04g7ǾEy63nw6";CIA/Ϙ"&r >SJ"-"c4b6YEDU6 2akL9k ذa5 IHzIY*ֱ!ZED~#~:u5^2n)uфi' $ j:W ^ v8Cֲ̅Qg Ȅ$ضeΞ3g6 $$"(Q.Qn00xscy*hyTm# 8phEX ͛t'6rp6D45"kfeRC0kGJƵ?U?K-uQ/[11hP29ygo]a0!$)Y-gI)y@Qm 23QT' XwTX'sP˘.2DUal[XASa&qIa mz19}Ά>)qhZU:Z IeҎp;!6z&)FHm`Z& TjըY!QA0Lk aPBl6`(Fn$* MJ]Bݰ?Q(BLU=|# @UW>0z)ndjykMDijloZۢ?϶7ʖ&A;~ mgݴ(TH!/z|@0;)]o9b+d< e)wG?633MަmM}ac{FlgSz%4*ǐL;g {N7 -ľ>2\sI*M%!nLA6lÍmjEAtG  n7Cnt3Kƒ4Tޫ7|oᜳ^kǹA5KB:?22o{o\;|dRӀ=@=HMs]gMܤXt$MMt84v,gyh4U&<fú>x HIEʬ!U@AA7~5ZYvF4X+ ϼcTSQ%"vJҨ & \=Bފ2=Ĺ* n)I55a1ibA#,*!}d2W Dڨ!䄎Q8{ Ҽ s݅.(@mܒZ Fg{vt_fy#N M]1-nw6<.ɭ:js  ܹ3Z\{'7um++%}t1w_i aw:Ϊ?'cV9YmMLQZf9`_%o[ d *<FMAy7]ăG˼鸃)rߤ& |A)}ɽD|yT`PL;_t3Z+OmtXL,$28]I`n@45mD uJ0DquLM8ybr"O5 CA682q:,+svbU5#bUbr8j$Z:E@ $'H2PJ1TSF[?ysE%a 3(ghG,@Ijڈ.O&*d!Wr-َa3ZB@7HԈ97qƒo_x׺d}>6N7C!jHg"&9~׭ҥ6s{J&>xy`'BS5@MϜ?qvSuKYqyOA<4#&2cU"GF9t[o]d%rF*rl 5h-sy쥥mKC UQ6hT 40W{bz{F@j0hyoTxe0 $VQ u&m3k}vvĝoMɏ|<~zg=';E.*shVGth4|GoysYʲd}7xԥGm_'5VFɲ[Nns~o:߸zp2ŔݕÃYR3[OQ'^Ϻ+Y~ O%kvHNdt4j'6VW W2Vbsmu8hKS<{?q+wuuɥV 7Â'w:M3tMn'lr8<^YY9q]r}W˚WJpug؅K>/r=re)C{u5h'01yǭNE9hԨO+N9&A"ϝnwkkd rvx6y{ jg}y.2}K}>y.z7I^F0$B"fo845-gEHu38:@ LީcqI@+X=՜s #5n6L9D Fp"ꨵT9na6zEl4N$"#2Fu&“a1-42`"XTc(]k2@0#b[J.m҉b׮OvW/^`:fXa :3y A &X sMȬ*S)xb`׮n>>Ȳ1n1sY;vWkw"2G5{vk}U o %`bi VofO*@mp!GD;B(ã}(ʓ'ϘiSMUמ,yv;?{5Ml6U҅\5"{yx[[1H;=&8*#})Hg]?qKM]Sa3$3] 2-Zc#+@ƀ3-S`&C29KP02X)c"3XZK"fͫq(U hEUϥsPE%5m3楮Upu:nZɾbmKfIaV|ֵnKœcۓŒ[ JJBŅa V)ȃ`xb)6ֻWw?'/s?"(m ~/KH~k d$bfmx/E\k 3"5%Ky6ߒm3+0J8:Aڬ3+=@`g`D9;Q tNa枒۰hi 1@A0ma\OF3jyshfCznFl90f1uƖ=>8ˊrI֠Y^(B0oWu 'OJw=w641;#'Zk];Low=}nRpm;q"3 M q4,99Niƒ>4NܬBz}~A;}/pw<jȈJM>kx4͞u|u=%n|jӢ(,wD*L3hqsw\2SRRAZENj{LEΞN9^^YZf[Az7Ϲۏ-)pH py;ͷ/ V|na7vU"noe>ˢY4:6%q8ȊQ\4;k?u6 f BRk3ӘՕuN*]a !$2h #;{vss@]1JowywYvp8O0?{?v/Yǟ睿|53kx=nj2BD!Zv FP\avFX-ɄL %+ S%b5&x&8Q]of5Q3*͚6D4,ul_0 F!٤% yҗIغL"8+ӘZB]~7{ )#ZQW$׭ލ NtRuE^J]7IεLg'6N\z≋/oxf٣=1 !4M#"{;Ic֎z=veJѤU%qpPNd)o}[?u;O$ V:^&[>"ϼw|ZOS3DI8B<cTVhޯ7jO<ջ/Qq8R޹^w??h]z_C87N{^wr؞11'#ܸ@:Ix+ίez{g%8%Yhw.+sJbQu % Bwє %1v" 523`Ȑ9JD縀uR#f=;s{ bW0`MؔN5&nY8GsLbg&IU'6W:?L0 Y':ДJw搈=c.]ZUyR5"%]fu8`]˲>j Jqb#2VNJsNz9 u71JLD`BAsHo;`<d{x`vh?/־.N b27/?1B;(zőBUUs3b}1Ȩ˼e0 q,KLuNȟ):()c\͚^7_̝b΅OzpʕEWլt];Ӳ Gi?ˍ('CUvDT$tĭ,uI wܗUͤW"s0gRx'L |6OMm[s[)j%\ĴsKwymwj %]8jt͹6y҈^XŭΝ8pQF:ZHF~셃lRnεfqtugm}p^flPGeyPYg;uynU0C=7&M\rŋ1(z.U:疦ι[[x@U|?ַ벹6Ҩ:f9{+_x7R~O}S/Ⱇ VѰ []~k޲+-^:WL&&0г${|w{ܹqhT4(z#IZIVWfLh,!Ӟ+NXtTc1 cL^wAqw¹9%'OuML@o|#A#IR$ 5e3%3Ef "%NR䬒)8}Dj><3LTml5̬yіjL+ыãˣqvj{VvbmY+I˒{9Cs϶KMILM bf)HC4bgGqc3a.]X׺BnzDf B8mѤ4,I僺&QWUOldȜr9[ιwM%c-} j?޿2pD5֓k;e L.>y1ڌt\=4uT&0;wfwwcc+"ݽSU2VSZ4/Tw]':2w\`gzѷ3W=Bμv;-w?7w?zw:O?+?WYP'}3XvǀO LCL$N)Q5X(BtXOِxd66e#"[!69RS8L"w~\׹ZcQ32]eQŚ*Q1RfUӬt:Q&x=MJ='`,29YWČ IDATPƾ n&A961h֩|&mҫDJu4$n@ڠ~~lI1bֹihm}ejyyS=yJK9^g:Uۿ_6W\]_o[[gg4Ύ?EwG^Qx߿;Xocoˇw}3ws悋Fs~5 Hu1;qd@F:ԤjS2CKq*XZ,  k̋_3}fd[|atYDiJ B20(^d<$ҳi hf9 y@&|cd3#7|G_-?_Rg{izxNzjjC[Zy QA!m8B#S3,9kp&&`7LF ,,g"tl!!䠁긮RȳN{#C3Y FY t(LZo"E;QTC|l;3%CB-mA0{aSWxIMZGMη̢&i`3{j1D8bϐu$RvWz|Z5;GY嶵[o7h]+=! Q\0U̪KDb6eoA^"KS+1 *gν::^ve fQ/xsEa SRQ*2ϻ3U3:ԟxkiN&!2R{yEC*5Aؗ)̯}ϼyqwWh/_@۹%Whl 66Cah-~KFrJhO/ OX7 H & Jatd$i 48W0gL%#p0`hk΍@Q\ o̦طz'L@O{ʯҶ( ]KT+m(5VNn2XyƘQU/}UUG;YJW"NK'N>q`lqnz_#3 ;G/jgu5,iDK)Ѳ_yұc<^GZx7gy|b;sʣgw^Lbū/fӪ=L9|ՌWJ`R(@I`841k@CDrum9Ijmk*WG9VO?o9>N6)dbVKb@( PM`SP{B)pܴ[_U@ afdS F^yV.ҹeDASmik؈USLDg9#"b$h+ g#b@V?kݎ:)OMFJG$bj9xLadjUQ"ɻ]ϼ^qbzO]̞{^?;]M/~8uM_y}kDٚ5HJ)OhY6mme^eTܵKO^~[n}=2jٽ}Ȣ$5%!Gd"Y[='LB'uU}Rs̹AJ:HRI)hFZwJYPO)V .@cbώTZ4䦖H6S4 뚹"Y͡=}gpZynH 649Դz,ʼr\:u>w>#xgXo "5$2FtⴉxeDԱ),D廱m^"c*1F4&u!6I]]';p:Xyۗߛup4>|AY6l B>G .\aV,DyLT7MReYbE6@,@k`FGݾ.;{URi^Oj%k}'A S287ΈD6& ȒL| Ɉٵ!GFې=mv:MgԑVνq/fVvL,Z`PA1ܲv;Lw_^U_qe?W J %Mb) É*1/HUUhC[>w}jg)h+)hfeMtjzim&E~h4*"PCTi:v7dֆ fLSbm|3:-o3ϲ,UzVqhT!y>I[N_jIIDs@k$/U!m}V@8 nIKWgO}ã&ZeΌu<1EUfke`sL ݌' ^/ֳ]l[7#Jl>chi/xg8IYjJY(yFDZ2 8vJ@Jp2B'˓GHHܭw?|TdĨTZQQ%L'u~~YF13M- nR}nKp[Yq GrN{WvLhFK% ~4Q-)꠿/sv!PBu>14X{ӃxR(Zz鬒nTMv-~J "6vFKG qˁTwWUu JnRcRؖM2)A!꺇!(%жlL1e!e*p&t>!CGkFBP/ +!c 9dk.s3x9m:*C)B 9sC${pȲ$$ A&&'r߱&`T:CB"HB. PBl۽tBFEIl Bp¶3@h#q/vN~PTHdP"'Ay"fHhb @R,1pL2zTrvb 4@D;ٛAdZ&cF!'{@).$`9a9 42$'HSd u= 2 1N Nƈi50-Zg/2+ 4R A(J 8V"01Μ46(AJ*N5 i!J!9p&qt4,"HJ󰔶V1+VOH08+KX"CPi1cpضȼ/;}cHd*VX )(C)`(-ڞgڶRNB"J:ZR4 )`@ JĜO%#HȀDPNCmO#p8,fXf@"2mZa @Pfg*΀I?J& 1\s29u8(T6j.P"IT< 3ӎ)3xV$I#'1Ԍ'Qut481ΘP (MBUD!ʙ3B/Baؼ>kSTBDC P-5F*bEix!V$9gDdh4)2k0M `BJ 3^(!晶mh٤GTJ@JMEBh$TDaq|c?|,r|NS*`7ȄTa3b+ m8v iEL)EJ9t$e?S90fS%$ #cˁ}^b_^Mo~ϾigՐK~<ɜlKYG׃QO/R>wTAZ wOl JdJi ,D~] OCu82΀1 $PЖJ1HʉkK M΃yi&}vD"@8i9yi:wfSR~.kc∆seF40,xQD!GM3$(($8 ݏjt]BB8-I~8aJ=xborL@hIT :c2(Q2)H `*mfB[(H)J*sМJI$PJI@`ȝxѴJM6-0 cٲee~qnKk1>l{ݕ]l WS>iIk'?9|byW%ݧCZכ֡QZ6H4O׼._2O;^p#xAޫ cՓJUܑx ܇qSX4w .(A %&0 _ ~t1 9c9ta+G!PJIvi"@6@2&GM,'1ѩ&f褤mZdKiC8$HʈPViE t1@Ҷ-J L zk&0 L"]Xc0J  a IDATd5Ox=rMC% !-1>йM[lZ*~c{Kak6m/,)!mDusJZBT\ޭ@2M2eme+J2 [0Mi R*xNĔ!Kzs)}}7]ӒGN1,zoE'X2A{?m5Cޙǜ†kȬ9!3oK7e1RTXCmG#S,2 I Y8>| x1X?cIT1Pr/؟yR},ԑy)S'7 3^34G ;V4;rjHXBF,PdR@> P!p\wĻy)i[m,I2-mE /T$Md)emeH@D'u *BIeARE M?KPIJ6q5fpK"a+aRek,ć㚦iZ[Gk)b;~NӘNDO nnNt/~ֆ[Gz{䟜>1O.|( `"dj=\;5@,GZwf"(Jg,Q8)Fr).c)Ep"uT˺Zwv,~h}{npЯkAp82Θَ,NGe T0X*@#P`ft7źfQH{֤8ƙJ*#:"IƄ4$$S(,D" $*`JJI]d"GA"p{< MIsAB*H1 e+G(vcG?K6KU;4M` I$PQ xk!(p)RRH"⹛bG2ےuu ).Ymnsi*;B}9 žr'|Yw yrC?J0VJęq!%Džq\¤xމ@0J'aFGsN@2!W/ &)5N T4[ p$ 8^'ӝWų# ,sXϚfSg$ AȫHB J!1Be+ahLYB0 AHF9nr$Lp-eGH둠!YNQ]LƔT9s?>rE̬ؑcs" ѱ+*~" Ͱ,Hqk )' ;GȲDB)HHHdbr+UvYvqNq9ހW0UCENS"_tmsuuԠ읚cҍʯ^FPH-f Hȕb|nu&itsC1ΑiJj"ˊ8gعB$Ji& G@9:+AR:)V<kV l˶B@c̣mZ%%W1&B+EFD$Od(j*nٶ56AEEȑII!ѽm[DVdqRt])7Yj)Ͼ-C/FَX]1FHlA)1FWcQS9$f+ʜ"2rfH [)b0D%I?s%Kėk;jo+uv2lySZ~8 q剷>Z:ӣqF7}{x=ި~$0!))ؽvʣݎU7*/1!@:*EHZb,BYrlw1:\SEFbD %1"@M*Q :@~Ңb@0"S1p,BJԊ|9f|әm11RY*{QK)"4MB3p PJXSRftF "`IR % %) ""1ǣk ɩkcRƘi$"%Dqrrty|U[TVS"BR cF5@R gh >' w2 )1#'O'e Ӵ#BVX&$"G Dx^9q޽srrVX|lѢE޽[G_ժۣZB}h)W^۾S?ߧ:>ڭGW6SVSRMjSqo|U>Motqx ;HBgYF%v$P} 5xR DQ$tl c[۴,v=.8]( 4 W96 (fH%dGft8AոG Iy=z0zWg*y{ޠW\C's&SJw16ptHOO8p`gzt6RRsJwx/=39v^UC:>Xq\OĬ/uSbvˈX!t8**F KU:*KVHlqdˈT,T\ya˅L[I28Ɉ)<OK ,VBG$GJ xxOH2-Q6CTu^C!KIf+[`HR0)c *lٲ1' 0M14xER\Ӕe#~.W^yRX#ȒȘlynsk/]i|-9rq0 VbR@GJ47d6`a 2d pR PҢ~/A?ϝD?SIo:E@u⻔9qy)b(tm+ݯ|ViKdBGc!Dx e)Q)%,K״`# IـDLϓ4QH4LigƔ"u lsg0 YJ)U0O *ך&RRDq{qP1Rr p ;xACL Hh R bT'6 3 CF@CO#\k$T6:qɄC7-t| 9pk`oE GYvP: 2A̾4M+sd;bR p&X֮:Iʎd}IH)*bQ2qƹΐiNF_Gie[F6ұSN?gmJ6ÌcX349JRke!&zuI((I0Xg mȴLkkVR48pe !$' θ)X*/>R bǥl' ^_)'tM/h4G4s ]n.ndp9[ + ;'i|8-ST/DD"ZŸnrJ:x#;R˅KG7VZݻw>zt7F{%Yw'ų!:.9/^0\8Q~իWWK :tྈ.\HIIr1 .((U?}\pq Q\Fv…K'^y啿{yvl .\:;va1rσPI*TR H-Ǝ;lذ￿iӦ9e޼yaUv…ӗQ)>/a^vy9"`޿|lOj:ѳmOY~EWo  홳綰qi}xs]=w|-"7|pQEٷw^Zzt9fVU ;+#z뭣F:d2uɸk`素aӺ^s˅#0*4zg߉||]?sWūԆ/txJ?[kf=83/3s5n=\.>Jq_/`\Oljí(%ÞwӬGk3矛;31@f?yF^"OKY^3eх*i|j,UǾm6Qet1<^(Km7T쫷_Z ZQNᦟunuN7ao3=mW͘".Wf>>q\EI] ]WݲHd\j(Lz=ν=ԝ{;s#2ռØKf. Uk޾Wr5'C#++I,^SdI8ǞvQWbw~k-}s^؂Lhx\\2]o,F_KO }o1aP"K븣Ƌn,JNk|Dۛ'?HRD5:a3o/% `l<_Ot3鹇@.Vz@Jf. UUvvY2{:>gcW?QG=m۶:uaժU:tVZŒ3uu)0so>>s҃O}lwfZɟQ#jݺu5`bMLLC0*$rr!M O&ǯ^ks2w.7vcI/M\ ~9֯oۭ[ޟv@)R $)ի>a'L8F&b^^vߦm>oj5 9g͊5V$׺xL^θE%@>бXl.?*S3!!H8^aomuDz 'oL)C4h‡Ҝ)kݗŧVɭ\:vqqpܴmyDݛT_:ոqB|/jR/ gTh3S^u ש(3Sc0ݟަiNIކ)~z ڴisHp0-[_RY C|vhNloJ{pu+y"ɰs:󼔀QS7a`ݺܒ={r|BMC^ohk۴i#֬q:ugˆz}m{yكyVһj](<}LphLDV(g. 0}5^{WUx8ЭyP"']~q^_ߐ+ sCu#gPffa@ÆE,V0V}O޽ֵiZ'(u]?.z;wS`pe/m'֞yf?8f_ (.=Rݗiy̍ۻTbGKcz4ћMzӸǘIkG s\̴L!Ro5mРPBB>b!c٣Fٯ&*ܻ7{Ӧ6Z3':E?v}==>2-` ))[2r܏Wn‡u}Ӗ׬<>mn۸u{uO1u-nD&?Ŏv+ͤU|H}MjSqoe'9A:9gݻsR~!2'L=xpݡCw>YO?ڶ@SAR?_xG^j׼:i딇ڔoZs/`ݿwܙcV;;yu|6KWU￿E$%?&\;tմjˎv'il + [.%_J]M륝wi\zK r6ش)^!~tF}E ^{+@+nxeoy-W c7^koOtz["&zVY_-D ~1kdlʳSne-Y;Nrkh@DIdY7~&/Gr ERo;n;wA/|]yf7&Mxřλ߫#vTkg?ZOL|c[=:okW%|_1 v@ !rYbGmIgWkk}{LHZ5"̘ߧ]x܌ߞ1C^q1s.;rEӟy1xbi}߶[R'c3g<3g.\`>V tl- Ś IDAT}$vtX)F5v۲|y-yy梵3 M%K]#ZTt|SX+,QZ\ǯMytqV-WzP:W3?SUb~LycR^߷FE}Ș˟|no}!ߙ]YO?[ƍ>ԹO=wp)qdzkX?!~zk 3yàuS%ݧ(/;,v5^{qM I(3[}=>qyhW%]rIΝS5cq1) |e}IP;{T\и#[|[ޛtB0!CLHLL6lXbbb\EU޴ B¶+ ~eZ?ر#zݻ{pJ]'pM/=^+;s5\׽_tAP^}tƾBj+o Dcn{{`8Vg] hpR&7zM㗷hQ?jCmֺ2'W9>(1=SZcR0GW\>ϴ(LsFMNX1ih4FŃӯ_Klܸq:DvW^}eE"z˗/' /"xƍ.8l @7:^q$*ضK oY  РA-@wމ]<ߏ?;:u֭"fȘ&#MsXp;$Y :^xSwQ5Ofx(vGDZ l+j9s[7.Sɼ<`(ܨQC*> Չ%^5nZ.YsdcLֱeKE ؠA .o6 9?M7eNZn] 0dݺ%]|FS'VZusqi:0\*BT̏.ТEZV *B)>0sogFF5^i;\u.3VJ_ùTm˺u;w6NnVQ*s-+\TaBfͲllY|\XvǼ΂.ff 44}=M~x'=۷?[Ć Mұ G ߸q:u\tQvvvnnnvvv^^"$$$$'''%%%$$$%%Ul1Pn~?.pql~YfƍqQuzp'[.\TuT-*kR}sw6_t$1wwp* BiE+ԅ:uX4wp`p.[y.NRpDt{ͷ}'ګK]o#-|,>}zaתy?mNjsnn^q}.\8W_u)^ReŤ/77ؗ'MhˤϏ(۬Ɨy~5cGݲ.\pLe3܆~ ^R"{'ǝC_1m^;`zgX ߿7r= {np .Nړ<8b_v|%AH?xkA۽}|}&ox^wR`ԏKSo}AԵ2- p4QTJYCx//L\}C7fR2m:GO8ƿ׏A}@Jz u .NE6~3j omy^uI8U)>M1 âcАr~Vw .NEe`+{ qi=fߐU}u%.K4T|P~x_|(s7O\pq(VVA}9kg~~Ɠiqtp\G@eY)Ȟtr7! t'!/[UZn]$ƛIIIIII9(%Zڇ?fC&TJJJJJhXx1DT~\s5f2RH))))))7|~2>Ђ-h))))))/#<^v,35mK/RRRRRRFM;6y7Yvsv3{Vu<2q^x=  wPGvvxv}^pcO2<[w4l^ } @{;/q8gzVfr nDM_~B7t{nwdcv{bo,s6|hR\ŋޒ߇hlb}Qp,o/wSRRR4/^wL4w{jj9*X޲[]JJJʋ+C[sڈMyp}Ay(sJJJ_{Uf6)~*_3}!H޲_a{)))))){@lyޛ4))))))[bի))))))f޼y@j,%%%%'Uf)))))=2KIIII9IYJJJJaORRRRR{Rerؓ*Þ}ny뭷H9HjRRRR"UɺjE` &kb ˔{+}KC(|*e3DFGiEiRd J@k ʀ !F *PЖmbQR1Ы-]a0 XBk D#hVRJaƩ`5RD0tG RV3ēq=\3*eVG r%rDw*JD࣌&#b1~@ 6JhiQ2V H@" B H,&A EB:h F[ DƢ@ZEekht$J$VX<  K|k!7TmUJJJJ2}drbfT>*&F[TU|.aDYHPc#GHk,1kAXpE),Xh Y41 Ϡ 1ʢmLb 6! tDXr`,FPc ONdpсT))))){bTL˹HZZilj& }&MnGk PY@H6W$ຊ( B!@[M`bW5X1kĮGa-+Ta0! AHD⁄ւDQc i:‘e#ڠkQaR1wT5%eذaá!/3gjQ=uPVC pp3m̑Ϻ(7A)l/" ,*"q # $Ht!`X%1t!FL<`%bZkcMfTuR`P O5eiB.EEŨ@rKI9<# 4)G==OQ) &Z 0 Hr9T~HՄdńUKhB`cutd[ 1ڀXb#gAJjM9 !ƀJ,3+/A @ d, },C=<*hm(8 $-4iCAZg1%K"iRRvF!RL&C6=2Rш STT*Ftb ilrTK DEyc2,:Qf"qjVcĚb X6cR <)^]hA DcPJ~ Z[w3J+ @b(rò]"Hx؂t`4 5c0ں(nҔ=;xI]e˗`IJ02 U?*e;ZڄymXQ%u( Б<!%NĆR8hq,2G 7!VkBa8h B| ʉ]~AHUjgM+eaZKdu Em݃qSU|Ϸa-ʘ -N!,( ؏pE:::hnnJ>\eĉ]O6}Lr288eMMMtvv}vniii Qo4iҘݍ֚62̈eZhkkjP50a,[Jʡ`pp[7 ^)}U*!sj"뎏B2+ hoo&+%CXJ@kEaD@!"5Xetd!N(~H1T[)`G&юVJ! Hl4}B#t#ugZ_![d7cc -('[ Bt@-*%cSf}}}}L&eoaǪ+ٸigy10zm۶ry/")J/nww_Ngg'JC N{G;̂ na```ijls\?0P>ٳ9vqCTbK?o>G9zr]]]@KT .}AH]0 7QcdT̓5Ĥ,媠IDS)X ^6@%@qbC5Zki-R(Hh)Bmh"kt~OTbp|)$VэJ[ i !-T+!J Z, eHdB>J*A8D&!PBRfkXx1QP҅B.< mXs:8nBY 1b8?鈇]YWJ)zm#oRE~r͸Oۼ풷8u!۷oV>f͚EKKK<` ,WdҤIԯi5(>w "kͣkz{:W.~hѢ]wnT w_bٗv<>η[lã_uڦႷ^+=23O+ V<˗pɥq٬!6o#>Lӧɓp}<&N,#ֱֲyk:>e4jl޲&if2h?)6n׾5V<3N;skN;,0PV>@V-Oo|DٿV-5u73qh*w-wVyϼߴ<ⲏiM+߮yÉRҥOpgs'89xO>o}m,6_ 8enܿ ;Jt4gq6rhc^z Z+TU1qb! l [2PʺУ U%8J|CQRmj5Gb@+<X) ה$1!TVBmgݺ->;B@֣P(FBE*RԄ1f7剬FXƁcs3pVFWWVƤIk6mz]ADQw\/\v\ 6*[JP:pT eߞѴ}[o`Bo8;y'k֬aǎB{>\t2']Lߓ/ۓ~H7?e*nگ.}o`z[B.n1be8ĝwNss3}g9sx_i3Pj0HULiϲ'҆9q@շWظ+%uX 1FǁƥfGC0X Kq4dS0DXMr4H|DX` gҽSidjm a90m"("2x.ͱcnnIKak-*aH6|Qj7o@|tttR苕jCv o}[O__:Jm2uCx:*v.T*~PcO~;蘆k Cm۶~3f2o<oEb㹊ùteE4W~qvɼ`^]}87{kLV̫>ܼsw{p}> ehn&LHZCFIPٸ̤[ Bȱl6d2oLІV+">*ɓp<0QD\)Z2TrXn;B $fW#"bP*Ch 6DJI[s 檥jB㡒XXQވ-ށ!@*IX+㜷X`p~j!cBE)".916 $#[fϸqgR, [Cr C\𔪧+J\% TW|L)DeImX..MɋJƃ\.wk&~#Ef.5\ `Vor}g  E# |Kyn{wy|:*aeqgߎDaH/JbȶalĄaX\GҒw^23*Gn"=vlTOJ`5ۺ TæClRf[Ϛu|Њ(0T*ۻK^E90Dbh X?Pa]geaBeCjm噞*堄cY]9.B."Z[[}|.ueO~W˘8a2AEƎ20 @t Sj;jX8|$h>dHZJGyx^R7unWUr\dT*|_q=[o_#]%m'XXzv,Xi=k˃Xa}{vQ9ovhB{#ֳwBkM\|GGF0ZKz@)n9l.353.ӣ+4lCC%bLc&`9`Ҥ\ylOQLp "E9pPU@R0J憒Xl#@cF29ǡYHS&qU{ I)J%;3`0D`\4 Z+Y+FRY-j52 ,0`Q͎uYI܌w3+ꪏ|S^zj\2a9:\דyc9B1 }UW,<׋Ar3S'.К"y2/uݺ2ϸŒoЏ{*W~]prԜ?!DŽ3/۫L{kW'}eq޺On3FS}ApܸV-7)NJ>xteBZ]|ĖL7FF"j0ҘE@:dTbXH/Bm^tDZhqqKZ IPנ4MV}J""P48*LkQ*[_$5[aR]h% ps7,U$_'Ƙ rT6.%X\ڏC]1$;?;ͯ喛?~rU,[C\v;9̝o9wip]u=&pWzqf_x^&U)$h:^Ï]Jo ougWP,I^ _ |c_Wk=2_o؟^N}5 UiM쫂GuϮ{1W{>u8o~ 7t=Vkvmʪի3{` kcѥg0H7Y-_C_ₒƀJ :h B`L Bk_JRU`b'Jb`D4~Y%#u [Mv*?\ꖚJe,V(!+2ĜWͪp]7b6n>=F'p'K@ufva\H lǛJR*3 edȤn W-ڟ|Ϯwɓ'/Q1cy 8,抯$s9餓)ˬY_% cCFq\Gr̙ȬI ȃ=gfĭPA-:T-DXxl4h,V$XiA]ހrBmM(Bڸ4UBMN,<Œ̋%a,2)A8m"^# +T #>:8JaZqdM)% =拉>OW]kG?;'k}9S{5kl5?[[vlxH[[no+Zxh qUWS5|ycc#|kXZK6\)]A'SR\׼qae)\F(4D8naqElQ<% -Ac@) IDAT2 ] 7BKK#"mDo22z-LI06D !cSj9U8UGQdfIZIbơاg0L習nk^q{hK)immWdJLJG <?O69X<#uKl1=Cm+l/\"K9ԼE(hnnN`gcnmM.ɤn*Sf2N+Dh_*(X4^⚊=LȒy"q8|7hTImEQ_ בX'Y@j(80~m Qo1H[PwagUdͪ#ㄐz&2Nc ]_h)]XcAJG^%zw /|v%KMiZ>|!Ud)ϕulokgIL`$r1Qd& ѯ('H)F*My j3GJ$X2Rchyx?Ǻxs(9uwG\8Ud))Gϙ˄I{l_5ތ9gt;8EPH*lh ʅ%A+0+0:ԑ"<mX{ K։Czů+I.S׾t~%T/ bgX!bIdT( V0I"6Zt$|wL9=<@-Mѹ!e&J,&◓9()3HB𡹹b-L6͛A9c /K(G&9\I$ڸ*{q!+=_ڭ4hcPJ4wc7"0d*2J9DڂdSwm"!+*%xB.vGJP1HBY!4%e8'dIRy1tG]Ydq*AU Jո" 6vg``)]݂֭ah-Ľnj6#*r=E8 c5J( D 0P"*ʡű kT8kC$QqձБ + RŅd7IaV&x;(AXRGO̙3))/F7g&@KƑBD!k% M͜u9<#L:bHkL9 k z1N: d݆ L2SSdشi&t2q$֭[R1L:z̙#>ŒPʡTOAٯU"i[R&Sl"hgyf0q Bp1 ZXKdt> pD\qnbcT̑R`L2|co}ǻ8SyOq|i`ч?FR زe+s.y%JoAJg]ɔs8cYYf͘ٳY8NͩF_oӦOc"[odٱg0e/_Ɔ 9㌳Xp!ٕ44Q)SBcsRJCpIdA)W%tHYm)))))͙iIDޥX` Boo|?=>g%%%`2*e9 ]jN洵^wð^w#.a"k1VCKkYц(iW kE(dR*lR>VX8q"El9Z Fĉ( z&tgAYB`d:`qLxK`ɨ@%h,,6tѐ͠*j9S.I gHiW\$,zIRX`$X")d 6IY&-cbeWTIQW1U-l_ %P%0(k͒O1˒SS83%%%%e2SI;XՐ@(t$Js\JJdi>‚F*3!SJ \6$.b3E";+`gaSMT_¬g Lb9iw ؽŵ"K2J*#)䉝(TTF⮽*qZd$Rx$  @&pD\Q*&h)PJT'RRK,17)Blu\Q M<7&N"-q`c1ek-I JJƮFAX2ZeT߲vSRRRR83;z+)ߥѳ4g-WNyD&vEJaQ2(@c&qs&Z+!HfϞ+%ܘ)#4Rt4sfND)GgC#Oa 0:!xRI+E\$9 a!;V'W(0qRa-XLZ5%%%`2*N'J<#4' (nmUxI\imƔ([ĭ[brXKC/D>X"X| xA90sr;ݽ="" aQ[Xt 3fMֶV6=EW\ӫҖ֎ = X+9ةtt:l-/h:W^x.a4"f+U7ZGL֍|̞NXʶ!V4J2yIqȚrp2smSl-2D*"2 KkE(uѻY^ yw~tu-k~̉ .nOHII3*ev_J>kJ%FG8Rad)-J'%$|a˦*SuWxg. enO*"~`ihϲfU?[7U/J/q]'Ǐ]浽{n+-&{xt v dݺ~%T>5], *dr/_EVѽ&t4S/2̞9mR!׼Kн5B`e=(h_9*1-i>8?,ک|y~o}\ؓ|[_`AÁWh—{ y1lx,< g~Iw<É@a}ο([dDc6n- qpDDӈ\AHcq!8t8;Dw o /=c&9+7xn(oxKx|&6݂.6rd˖n4TEy\WmG !EZڛ{/9{[ `nNhCeL)bHfH)rIF*2; @0PR8Wk,wX8Sc:r|?qW?c)|4`+ wÆ%&͛Q.XPk{nxW7=Ėɜ7;78nTL}},zKKyUk³򡫗p?;W.l/~x '>5 YN혇,͆'(g~ ͦ;+.`o0 q"a?xmer9o9;Om~kѝ5PƟd<s]Bˤٜe{9))9*̘ VJ [B4AX!,K؅ ]De"DIEgK;O.%*(S)7j.o:Ô)mtLmGؼwMHNE|_#C58chk,<~.ML)gêYD7~%b6f̝ĩ>*1kZjDCkZ@5[L"Ήm49\!hrxRL?o^6o;NS_/ߺ ߸.wzm;w|W*Q^|}ʿ1%lpR;K`Ob9z0*Y^h릛nګiBPq;XS姛h[p)FNkכ!hV3nd]\q^{~|=o?7vs滾Wrٯ/qUǯݣ))IJEů܆|\0MDa5JjR(ip3hiogr3޾3\N:i][KxxgV?LL?ޅZGlT?$ӚW@Oak!o!ЂPT1rS5'sAPbْg->>xOO2}Z+y޵ kZ(UQa+C_js⍼ҋ- ly6<<@T^V_v+x;Υu95`7U2FX_?^f%lk Ɣy yĠ6+tNhd_yw&~_^yy)XraqU#9:]XiQ/񑷟G-`5trF}<))G"zFaDsҥd$H!ꣵa/ tڰUCth&On9QiQ,P*_Ks$2jkky(6hhe^,R8s Ofك+(S.sPB!Z;@iL0[M}632IK9a,*o=b^h;|˯Գ?NW) Oi,rO| ~[))QɲWCKxHKf6mt[3p{A}5XɹUյǴ-Mia~\__Ǔr1<3IXB B| T"h摎K?{'WU?u-vGAQ(5 AP")Q b?4WC/B IH$[rn6nH03w399~z (|jjbi8ȀPHm,wbJ唓g#-u< ZS[az>2 r% /)b9Nx!3xyMhm#gеH:W$";CDJRȊWWҔ'HR(eIunql k+f1vFA,Cv?moVϵɑ~h!(0y| w $Ƹc~sK7ц90Nl[ W H=~8eyl܉3 lArTI D9kZ5?]~7>P6M,+^ KfN;:meYYٷ7yϿ?a1M5^Ŧu]dR9R={2d2TWB.$^vHwfd::QER'(BJ^BC ;gJ8nB<6ƇO~ǚihncS'= lۅɤ#m_VQE YlIFذb!S-%Q5/ŋ3w?/z-K/b\]K7 K7<ŗ82~w_b_̲o_.Ʌ (оu|xsYO*7!>*˴3˵ϝAnL8y`YS,ߗfcIA>coTͯ =\O//L9n眲7Ws>~|ˈcoE#),B\"(%=uIg lZC"$RQ*8/}z H#,}e=Q-Dϔi$K}k-EWf=4=M!Z(Y,(z|dcquЅ4G q>|/>]0]ĬphGڊR!fk$. Cz=<(<#R!PءźūQcYi\}G?;tV}+˘={Vs{澻]OEU<8}*3F?oGg?p׾}g^9wҔM}y|eQ? 9_0p(p#OՋMJN+GDxU?zYD"R{c+ gUӷ?,m_̅yl _ri2Чᙯx[V#ϟo-[Nlk; )`SWe 4VY Ya)cLD2 B͊!yl9!QWmBia.!ZKiHV/>p`[ 6e ш`ɢ.RC)[ IDATyǨk%aٌi=3D TVSe[^G {R+e>Gp駏d,^xm0 bƌ̟?d5X,'HwgTOBt},G2ˊc+GYE6_[+.Ak JD6",}K1xդGmM-\5D܀$fs-eyhTiIZkjjf;B5vXxG4um)dML6+{ȆY68yOqy3g7fY;MyXōG((4R Wٌٳ˸+h&al݈@T 5q,=CVFx%E]CWiibqMjCRD(沔=Pб)OgjP59xe"O:ˁR]gjIVՠeaي.6Iu#EMmt@(W$:(Q," }-J9!C6nĔ}0%/<\a{8VH8RC4 0md7D qj T!>aҵ1EXPxsÑ ^hÑ%,O Ps pcQ )h[]"gcg;JE“=-I$`ʍYM&+Essb+Jg XVyP(p,)SjWl\Esk5A(Zˆ8_BV=L$p-[T#!_8 ~ߙ@f # fa*! '磱Hǵ4=4Mrl(ޕ#TRIBA+I4E:H£D,G3:|Wu6eHU %TI\WM"RPWC?PB(R ֬`LmtDj&pAHT' EZZ\C$*dx}jZԳn]'ͭ5(aHm*Q5\W_ma6,ъBR*ЪFQ)Ȧ:p]h#,%[؄A@>W@"R$X^])Zy PՔ$,l\F;Ku7I4$@ o/֭Dwʣ;&2kf3WX:,Q؈WxuX Ut=er@esx8Z±Ҋ Nڑ@F̝;rba =gD8rWON@kK5MYj-|tOdT:O2a)u E+e/_Gf#g&&ΜDh2!a9Q/ŦiCSdD?xA@$E1&Dͧ C/!@INiM!":FWKNy|)L̘̽<#΄)ULMPM2b,'FFP]c4anHJd\D"462i^D1ܸMuK#ǟu0W|T}xD5`YۖHK!@RdӅv?1w<Ձڸo(_t> nc/0}ܹs'+Q^kJMUZE_LH/}/^qgr7/JЋ_}}}-y~PesYQ ɭ9,MVsWoo mmoPk.><|Cn{ܹ(| ;ܛHEwaqpyp+Oʼs{ 3{'e7wзnKOaLM;ZQgw7=+.:p݈YXʢ  XC1gӳ(qMC}-cO $kmfҌfj!thhI2jZxA+b<-Mqꛫhln|Jm+Vz )P`#²"u&BrXNF ۍ!,Hܡ9I]cX2ь/9/|1L<Q|#mH!pWY+ᗏ[oEc7c#w*~6=G flѻ]wŭ 9q~@3ƕq?g|V߼sy?[fl1r}+nmסT*tC,P̡ LMP]_ Eh |RCZCNRʹG$Vr wPƶ"!XBKhl>XQDH&H$Һx&M]k,{f^%T|SC7ޱp:}"A;dn ν(ny \?(,C<{ >B>4~&rX?٬Ǔ_4bārs8oЗPg5"hDoezhwzmytr?{CʿίCן߷p7??@򗧦{c|ڛ8/mCoq!s sΝ3¼'o&MhV[np;~#shۿf}*g> ܶPW _VVyF/2eiT)*a6B ( pIX$КVNTa *W$iUI֨0$qc z EPdSVo"ՕN̥ghIIyy,i,ªdyǶ*%՞#A$,o2ދ5-gų+\'R 5(6xhEرrZޙ< +ڭۯn~\@~'4k-?儕9U.cgn~̑CLjQ)Y'?TIJ]Nȕ^̑.9}5ClyNCmZfs6\ĝ^[y=Ro||nO#yԎͱo:r,?|yOrNu܇?vyFXVG{<l["BM1rКxb(k0uJ)5W#Q@ 46x0m?U)!F(@5~@JaH'ʌ}uJ‰.PiA"|)*'erߐa IJ($BT5Wk %E6g j%ڴ\Cը QUfc>iϛaa0ΝfAGrէl~n%L}1Ž9WO;sލ_΍;Ԅ{L<~9=}L- ui sVrܼͽo[U_ϓdg=u|;>l==+E'>wS7팤>+~UûNHSpGv4?| qÐl:@>L ײK!bxā Gb6^!O*P;r'*P,ljj9"V|hRZLVf2vr=n[X8@qrD iYbAP/ *({< CG.'\ǐ]9";~80vWׯ>Gء-˥BgQB JhaAI/yD"YTGkD'r='>ε>D/MA5iUlwHOz@; F+({\AHlG˱ XZW^|1Q<Li-eS xqQ, 0-B*{;Vfn۩"p $|N8ŧy>,xb7ϧf\L 3QhܹH|뻻({TwCr< ـT!cG :%BFcJ+פiZyCA,%ijQ*QJx1k BP,<6Bl++ϔZ6A\(ar9b T>K7fPіE<JVg)!iCmuـ F|_!<>/Ï>E>@kIhPZK]"6ZK=+$H-0 cYߌɄ M4X8B*je}Dcg!GX&$_UI:DTbyF}EPtvQH>v-4ZkB$Rr$1 j"@+H]q{8P*9XB _Ȳz+qڂn@",_## DGm@ʀZ܄)˙PA+v3 00`TbGbt DBM ,te2oetѧasǁ7n daoaQgaFgaa fa30 cga30 `faL03 0x&a{< 0= fa30 cga30 hcKL˗bZӦMzw0!Y z 3g.]J,{ӧcwa&C\|9sy˲GzvwFs=ǬYvw1 è͟Yأ%/6V;r]ww0!0 cX%֬YC*@MM-&L`}c̘1;{~yr=9wrF~Vh)rءG'`ȣ8B< mmyHT%1I~In#^/񥫮|Vp_:߿;&1 f>},]e˖q \v|^xy=wvJ)RZk0_@k2s宻zCx3Ja-纑 ?†L{gl0oGɓ&5.B0X,;ޱaȣo_rΊ͓x)p{3vi{;VP6/@ PZ!ʱf6o~s6clw=W?寜vy8sa(oXp!NHgRФq)%B9sC[[ې:_j.+U$O=BN;tLʲKk Z[[Yf͐Wvܗ~8iƵԞEnj Ko1]ѿ?"_~Eq?Cʽ,lڴi577fw{~6W?!5.uǫ\St|_{ r{BnYIϜ_z8p_.W܇Exa^# fTX uQ|VWW<9gK,75!Oٮ8=ry-M_B \$&O%&/\(+|>O& LǑRNr$7ߋǒ{ܧ6ϟy$Ǧ?;b86˟ٓ5wɟ^~3}.y;tuc{N6N:גϐ f١lƾ`f6D˒[yA'l?qքkgRP|Ȇ57w31:t'&EZ ]D?~i5554|( ;mS;{9os^:9h'~?mtsF9jvNa V~|1:(R*YS>QnflO_u#l6Km`|v'8pZoG.:6-lԽxЇ-*Ǟ,؅#a~uϴePjftWڛ؝4L>]/0v1|} 7lٲ*s٢ض6.' C X,rضC"@̘1_V>o~i<-r. ֶxi~a^xC=tws'p IDATW^%͊kjj崏Zpkz7Qdƌ̟?d51cP]]SO?ɡmD1kMXd2ƍSO=IcS[2mOmm-555T*Hk^(k,REh2w\t8;V;2zNٗao]#N1r+m#迎ׄ6ydvNaSr87x;튛֜qC6?La۶Cٌ~tyaϿSNHӬz}w.Ə/)v[!Xp0!P0Zs{ǚ5kcfڵdsY8ON|[6-3eTwF΄ vQi P0B`6SLaʔ);Laas1 c1#Ma{< 0=ސ͌B{.O"t/.am uoV a;2 cgIhaZ3{rav9}.)aaԶ*Y۽l;0a1R˗/|s0 `fav;]Cu=883aը f=Wn#^/񥫮40 ml3(ԘJ# Z/?q]w70 MF534R(QaV tʃ 4owWʮ3wo! 0FWL+TQhF (B,D4jӢ̋~[`v7֚Z6m4kkk pj+vk 0FU3#@6y577yޛPmc9%[av7jfJ)r@@d2$x)%t\.G2m}?av 0Q"Ǐ0yBawo ߼}9.{w0 moT iA`vޔ kVGrkb0 l]3 W^yדdZ&vZds6%rzL;ke߆a@fF)E"q7DVU33{R.|~ݶ0 cQjkka̘1J%ŽfRfB)E1[4KYޔ-5 04jqǞ 7^ao_&0 1.0 0F30 cga57aL0 ㍚l??'}-c?.a5ayr^XoŶl97dah7jY)^Y cLVGWO?;}߱ZV0 ctU,S[S_X3O?{}ϝ&a͍`V,OO=YW_,z~0 E,53P6=V= ia` Y3 0m5l5$&LxKgaf* y]ea{έ,܀w{)ah5j@,ga{]~,EoxHG]~..a1`V(]d0FrCń.a1ʍcr`ҀֺZk=9M"S%vm7 0f6@Wc]W@AZFE_moLWW6aoQ6o#łU=LF#@r p،z~!Nٿf7 0޲FM0kC|8`˧ faz&}ғvw 0=ԨJ1 0aa30 mY]]1 0]sM0 ;#3 )m#)AQ~-\!4B{BDyb{ݿ}!D2JiHAB! A" @V),4!QH-mt#nwq-o@aΰY_RJ)ضCccJi $BRL&M<q&!5ZGu[%z" C7bYho)J)zzzJđEDZ BZ,BR)q\GXrZ! ( Ayd VH$ /a1:>r@{רatA8hDX`—hlldɒ]&N#%a… 9CFJ%,BJIXĶm?,JL0& T*EYt): HǍȗt-}bǾKx<Vd==ѸnܓN= IP2=MmT&ajïv-%  ,[%K^%Dgg''OaTU%<DZY5֮[).}˝_дSL!GY"MWԾFRڄO,vضXcJƏ=|>C藰\q(sxA vEz(3n<'@: '׼?a8@WmW ^/aXQ>X?0 c1`&$504m!J}hZPo}ZlY HB,ܔ*%++bʠV,42an#.DQ $*D"|ߧ q{k\4T2h 5o}) -Se /P}5PȾl*ja@qDPJaY.cƴկɓ7ڟQ+WͩUfL* k}Alu9_u9Y0 FP3+gږErUW89(K`&c "a\Dc|m ŀAp- ɱ{:U'GU$G>}k~߿/oo[n驦g# 0`tt_u=O ^R?9} C D6Z%0h.8141 t*C<@E{~[0<^r{kI.y8+;p} !gfWˊ<z3?&v=dvzm>xND*(S'-92 8eYeb&^#}0t&z K ؖC2qb(FRH~xa]sRm{-B*R^|lxɻΡh~uؘ$&'FG4OyD*D*hP!زboZBRN#; 1MmǸ-ofeMŐyIJ|e qβ,|Tt/8տyF2Bћaw-hjI߸mӻ ?.[Gǖ~>f8\R_a㭡6y6~se}93+|9/h8}ґ_w o`7>ƕY&].#_}Eh4OUDOTĭ՚f* 2edj6lȺu庱,rZ2SM+֒1Z^3ZN- Z5@65ǡӴ(twwىaj5|umZHZD+y^q߿|t1d^Vn9?5nf|#_}q뿼}lח'⯲1nw?,_ǽ_ӓx?o~G'#$^>xk Xݽce}9R/Q+Jy_8>W20"o/>w~6ORcL?Zٺ4S,̚2Pe5A<IJ ( AQk HH$PJjX,mHyjPA4ak@.ܺ_Xl~** AЬKYXgaq!ԙL)ޘ}/rݫ#vahlc|ok>BOp>k6$F/؞kf+t{3u;O~N !΢Ȭ}7[gw- #fIGݵCx!qK v1|y:R^om ?}So{6?.W~vu=3aLYˆMq\v\yկu%lr W\kZM0j }}b ^VS(,`YAQZ{TTaƥcK"'爫e !RJHCbYTd24uJ"JEbaDxԷwt{>[ʡ+޲:8}~w7Rg>LQ?=wǟh ⤟Of'Lco}=?>9 _MŦLќ Vl iͺظe^M^5߰!jPLNM09uz3߻yx0 VLOOSiZZyKsNj4$4HضXXX`qqrex]%OM>߉($ ,ɶs+o YAPu=7=ɹW{Jw|W~==c%\}{d:_ꄱ^'?7G[:?4ϿeEz9>>f:6}GuZx #/gV(9ƭu{?+ZFy8$ %ɑH&8}|J84LbN 6yֳCG5eGV,N8?W\2D͖1JDZQJQTb)%SI\C iHR)aJdU*TU&&!PT˰tuu!iv*|gzjR399N aoלpNmOߺxr^\3=WQ|F;n 6}1ߟq~9kyG7eW<^88ud|#5_qqI?^qorK~3tɋ?}-z[}׿U?_4럱?+[FynA} _`=SSSE/b㎟15=0, m(ZJa&3ӄaeYccG9thQP,)JiXbqlǡh2JAi4-FѴ8p?яK/m߰a7p=3C Ml0MrT@U6BwW/JGIZMPkCgw7]=dnvJk&$3 `Y8. IDAT0VxG< PJ144L\fff !$rDʔtCaXXJmuG\K/.Q9h4ܰ0DefF>JoBaI$ R,lӓ*9|˴jJb R 4bv={vQq:X\\`b(T )MX['b1Ze8eԓMuzU)ZIM-p 8nΣD>rX,aȶa~Ͼ=QIgndbb9 " `1v(|7mQo8664rj8X( IgRiFٵ1*"j3Ҷ-x<}Lr<BJ6nRh4ͅYt!$eM*hm4{)"H&S(F)A*@nzP޽G~ ]q50yl 2yg&e;, 6q&!5j>tÏϻ~rbqE,!czz)!LaebH|G6cٰ0R0tsNF908q&!ݟ0u]fg92zl^z>X, #m;(a0m\U#k܉X͛ř |>LgO7 U5;@&0L*2s3,LaY6x) (@G{t.MoE9F\Ȭ<0p)'EDxKZeffc'RH^gmz˲ZExö(U*ONpŗfzf?vٙ @љSVn,j;Xd2~)%cG0<~0\,`F'I,].R֬ɦh4 3ZS>Asw'Igrttq=aN֭[ݷ˲ɤdY>r?7"6]ĪUI&SO 3S(N{ ¦~6aaaFba g,86tDd"FRbaa)zY'R$) 4 0D!`Q.YX Ǹˀ4FYY.Z ($I &Jqם?ffrZY ` o@8t wLdúm\q5$i,ˢgjzr R!RJ<'#h4)r ui4!rrY055p,, ")$*0 ɉc;V eڍtw7f-՝I)[M 4PQ4^aJ  As>E*doL6KV0 '-i-T2430l',) P(=9F\UQСum= mHbN ǎ8a53+EyjL^ajaD30 -)%eTBaD2AU[63=Affg1 5ؿw'"[exp 1'F2DaH:aEL`q]NvhS $ߑ'et FY1}{F&&ƛIfS>:-7uR3 tS*׻,a6 Eߪ';xcG( ,.233RoԪeP ˊH&Stw_BjJ2i:*BcǨT*\vŕ:|SXZQh.pVnGc҂HQאRy5UQێK2\pt0Vh{fF0 JA*ddxɣ82+A=}(C LN#ymcZd{244L.<ljTD<oeuub< 睷/@h4O RV!LT!%JHB?@ P&)A $SW0_P#jI&aňbTU? 8 *F8IRXZĴmZX)QeJE(} "V!qx[09B"ri'r }FyؘYfYj:ab {D(ab1' ϣVs)  H$Y5bL̉<)~֒VTp]d2e] Jb;GPquz'MP >Lf>MJA*^7͂bH&! ζ a" H&SHÌFs!bcfR*,kc,ON2PhTT$1C.*Ed29l;X"B58 iґ뤿w'2Yʥd9 V"ffgc H2#<ל?Jyazj(P(L&CJyήT4Bf̎$=z K1FTF/zfuh4FўFh˳=L3C"ZDž8˹*4G}k+ Ҝq+g4W|}GwYtMuK+͟h4͹g,-5y[u. ڒ>m['L40-sdך0%uD()H̀l޳9j(@fS?Gh4&+6fTFedF%J"u\Қy~6M0:;Hvcn]%ڱD4m!$jDW'Kv`Iϼ #ErZT yЇh)5FsrVْR^?V@2ՌrߏW!ca@ 4"+J"dC4BTT}H80ǎQ2;G%kQ@=3F90IFlFD-s!Q3@Ȧ |%"|C "P*dITُ r44  ""TKRIV2-LDZK4N"m4B&gDҸiD#TJ-\ܼ‚F_#Dai$¨FqA69D HBɌp1j^`/Vire~AÊJAtb*1h4 4 J_skŀiD(P-MPB`leψfp)xүKj9Ch4yk3 zqƒJ1RƐ@b`XR "D80!PI$%!H("JzKfb#g )P!lKh4{fg?ml 8jb;8آ(J4=1iI]r9tv$}3CHD=R"0 (iS䎶ϸhyv:F8ӅԩuXǽ}I Yd% 5RCK@*{B ^XDHٚ>ضgx  -mHyVF'zVFh~u6$uNb3'ljE\=JgQ )D|s0k V>G"TdHMĞ,Roy1nŅ|pt~(j*緕>ֽĢ3F\|AdA+%(%1KioQ33C)Kת "/x3eGdeY˰|5P(Z׿cdDfq?P!ت%BRgFQԔU,s@43IJDuEďR5}+,c fI%Ҹ~9QҟȦ';Pıs)flnbf>IBE`;Xb.Bf34ٙ/i4ͅy0f(-DaF,8:7h*9,[WbY]w&cۉR^8ʃWBfbf&NaRaºOȝ{oG:&"uDnV,_vg}3F9/H塤^v}Ï8vIL=BƝ\#nZEojP6X TlIRWG?E/;߃k/]K\J4{|>~Lwy5YApEcGfz;;O{o~\6]\=i4ͅS7f-LK`ZmM9~'9\@:D{nv<}8juv 5L0}FUt6<܀lɇgJ>j[5E ^8C]T" e4֯'2%1ze>.2|\QW1LЦǰfnKΚ3'fHP q}nF? Lq PK^j6Dh}QToX{|{Ƨ^spk>>/~_{w}yUqL/= [VyNVm4>kJO7/z&O|lghƞ5f˥ƕGhz7&`&)]DTFwCL^N9`+_I3}Y äWPdHcUUb$fyHKHTCHdvzȉ8qi(Gō72,ʁEq}-yeaa[s^G~/x;+߽>6]B'l|frnw/sc r7?߼Wynbtrn:y8}|}h4'@_vE`+E$ZX7t%B-BJQ LRiA[+[`]qk]ߎyS&{N, aR}:a+ :;X|ӱrx2;Mob䏨uZ!P}|Oۧygah,Rؖgk<W}7iXvpzӌ£GB5C'Y/~57OW<`ݯԇF8aFD@DJB%i`2f7TN:F>+!̑ua=Hc-Rpٹ*J8Muaz4 E63OdFDaݤ29#B! |1xN?a$cJ2!MfUKT=I;<|wjEcWg,>'h,s,ٝɐ;w I^,sQ*8~wn?so7~kƒ4PĤF9ؘ-/OXBF`>4mI.aR`FSD mJB H{s8,ة|ұ~%,!0ߵ]cOP?xiR&a+>m?-Bn䉘{K>|[? =GwIo??̏>_ǽD$R{ c}oV>?OIMh%gf<rZ ?$QK"JxVAF@,Ih ,`TB!^O5QE~oz fxKHPςQQn[.eqO_}J!]0EԎT-ϬT4EK,-_;8;|oo+^ǎ}o{y5; 5/ )N1>>Btu e| x';j AL܇Tʕ;70W!ze>=ʁ Xe>38Cw}¦7 0KN&W7{HHLd#QaWQFh.\3;[ %VsckGHsUƫƩWelkуD*)HKqYo?W?Y(2Ȱ:cS[[gpe9&)Eطk}sӬ;6G9'$UҪ.ZٌMQpxFh.4ژUU+Ahx{8:EڎcD)k (!Xgz~:FA<$qjxl̦,}2S:u<@9Z]Zc evR{;$m_rIi)5hYe"Su,5Fs>8/B E(W=ՙ+>  bOՐn'#auI;zD@kڣw_Ih)^Y:Wy);~ HNJ@O88g朢9#*/.a[.`Y'x<zfY_cy}u{O}[{q+VČ8kPJ`%H F:)@b<Xl(a@X1nWZYAFY眱1G9>x<ziOx<;q=b񜖹U{x<)W]hcNxBQr 5rvex, cc 'X[9ҕ-eʶ/f,J ((i*|__cx<S̚-E q8lT VX!c9ub9-'Ǯ{5k r^{Z#x<EQQ7JrPFesXye0!dWHQ\!qqJ.4+=9Y.+3Ee ;DGx<51=Z>VRJ,!+' ' Wn_8 0\Sx<Sʚ m-4v\"~[Ne#xr[_&RpHkk5̥c=KRȜZDuJOv'|sMX %Vxi+{rY1(l0زg7jBbn`H8usnjܢtʺ0,jF7gXV%מ;-I8xR&>x<띵)PY\x /Vxދ_ ț~E;zK/}vmg_lvsj]ٿF[ù['iUQ6]p!|n&l2>4# \d!1iӔV:YB Q QvnJf8 uH0:-<dzX13ZCir ghF4-,baKYZSh[=/bCl|.GezJ ߶t~p˥9Di 02R#;$o5QI4rA>s[*&p"-LIJETkP4IgQΞu;vpjd;5=FclqKiqސy<wk2fhsfOIsE\s%y7/yty<\~l:$B(n\zյ|[:y+zanƽG1i K\pU8c:GH/9!c1 z 6ˑ:;ɉ[ؖDɀGZQȁyZVhSFc BJx=k^3 dnn4TA ȹW69J)Y8ܢ4jι[FC0~ǚ!kZۉ)3!Nj0;EY\!2U0ߐr1Xv # ۷$B;g]-,k-:ϱ)kB3X ,BW:W[$k󢀹LDՈN1?%kpVWE:ՅRPJULaNz\q6csˇBg t:9,c,ZAo֖"%V[H\LS0`/l”AYne!G%푆1 XĂ.3Β."6!%6g`̲Q[1˚9 8k/Lp`.-BRLzcx<띵 [zFH`i U6WΙL6N0Oɒo*oa3c;vR@8B4h3`MKH0SpvZ6R3O[ ~)' axV<OjW%F IYt$c6e2!ЁP d3fa %C`7w[Cö+_XE2YX!BRgePԀN0st<{rG:8["E_F!8~f][F%95D8Tkm` zLwΖ BEd" &{̹[t6ux;@uxa@ ΋711QIY_`ߞ6R*5.ßZuQpk{XU8wFyRЍ c)xk[3+4a# qƬ5te͢IgonC~t~ .EKj,_IG qd@K8uXaƒg7c5v"tq sE,W,UgYZ\;/g-eX)rn%kW ay%m9~CPBqq1V򰎩 yN*š6 IDATV YgXSU<*AJ,F$`Mb7ڕ( ~m YZ`-D$Q<|7@X! Qbjxfλ:v{(ڜaܭ $wܺk ֺ(c"~>mom~#E(R8p8%1ƒ^x;kl,PJ :*P).[ 3Hppx~]lug8W,  ^\R /b}YoY\R"oD0Ņ/zMذ ZRhi(ƒ4H$9:s3,VWrgHQdYJXօI JZ;X;ѸIu̧90!csrGd/b;qTLw읓DAĦ?Z^i秢;z ѹo40}X9Ǔ Żxe; >{J1G?OyLW?2zz&cE{(BdR lցe,^ j,˱6h#cSbhq 8,Ck <տ=:< ]΋5+,p@ɣX#QԢCNk\Oe[Y}2xOq;fw?y}3wÛ~-t.OozZ^i瘷g} #ןy_ofxgʵStso{~ǽ_ oǧ{Z1?voe<0G:_鞖s֬3h!BIVkNXkm!%@luAuoxhߵYVyguwj۲֝eWS"&/z>ufpgM3}Ay-<;aϰk( Knlx!;򜋷Q 6{57y'{// ?]T;ůV=Ždw[ǿw%t}.J\~c'gv|s)mo~VQQ^:>O}kyǫ:yޕs3SE)B+Ba Cws/?yDE 4Ȳn˾GՆCs06ڳG-M]f.0J*-;wsE8ԖMJ •QGtR(u0 CHg 5~c[?Ng}O.%}'7?:aTY?sG}[>|W c$Cbo?&?rOλ?|lPFp_O<nΏB3sG?y'q;O<=~b)W+~ e'\kv|^K_K_?*o>WZm<3Eowٳg`wx+ _&k1zD$zJP]7YV;?s|o3}N[9//k{8`:3+WXOyO;"5dsc-F(- UtY25>;gpknƗ_}Vs {Sj ^s r#;Wm/8A}\Vj睊dkC^'?0j#}͛7g>s.o<3c,A $E„1N90 O5Mo_klYj‹*o?|YW1_7/izUڳpqz\?e(wx~/1~C[8ay'w%<Ҙ_"3jjsYmc<3eMkf_l]^/! Q(jt88f]qE8W(f1W& C<'!nvX҆us vK/Ӄ?s{0[ǦT@Ji8>VL&^/%-[xohSSWI kqE4yB̤,ָq)IKC9i՚ 24PEW_^J*a QFb=sϞ9[- $UKYPJP!c8v3Z@@:2Y#@ʂi4+`x<Yj~!/zԓE* Isǐrt;n뿗 Rd9 &@:YD\Jlnȳ $)D7vXPiC{r`5S>S.d' Gnނ:MǏYzԐiÞIatd(8N=TZ0R%%C f8rkѹaI-`YsV8|0"D !JeR1T B1E9IR 0V+۩.5svaMOР;} }[Ŕ֭pm)؀Zcuـ0Q)Vj$:D"HZАъxG*ұmK-!&Yh#ꆭ1KMAKZJEz)%^41z JeXkv'y<g&c6}<'BC*q;E$p5&LkCR BAv1]͡{3zAHƆ,pե][!*)NPAkI H+wiM::!i#&]iWiɘ^P GFXʞg0A@zYL $BgV;ØBgqj:c EՌVˑ,̑i˕H.(9nm-bp:M%VWd{" tJYDd "a9[x::06ĚI,Q",zKqqf8G|&cla'*PhMIRTb$ RjRW@=7| C5E4Td0/6b8I% M$.%@ C³2:+r4Ht:mdC u0P8V:pVyx;k2f&0`qI# <+G"1>ahL@0n#k$(Kjx. ^&ž)["ИNْ6il+ R8GBXcCr`݀HvVc!0E,!r\HA(qF"gtzrx0d̴Ҟ9VZ[XAb EK¨wOac*$Ң׋HR΋f;ll 9z<#L; ln-6{ abM+r[%hIt{1VŘ9rmuґwt"#"EufdzY1Kzq k-ADY.L *a%%Y0;AIWaZ : 2aTc@"GB\zyHРKB): ӊ$14 )%tnšeƒ!|x=k2f b:)%Z6njJyEa|2X8n CJ̌*JU,-sٴRKbzYL5* D@:kI5R;S#RZ &A8Tf9+œ6dڝ$R tW1YVsC< MTP#DBIG&je RI0:8ṯuƦHYdqBK2  T((X+0Fa$ k!uhu8( (=Xi<dzY10Eo0 P@ Fcl ٱESg4 Izc aCj0&-|J%! >X{F-@ʀF#b|T2Tw8B:mKncQX Zh :iE[ ̡E 8*:^KRx<5"+:0(@6OThg@)ElLɴZA/1N3 KZݜ$h0F`Lѐd5ټ ɭR"ef%J8B(5H6A+^R)lE%1CPALkdGፙ|6|[|)CE -C QmݎӒ4ۖ4d#E]1:/K"ʬC[*}"Ƹ u𢔒mQ8 WAJ"k9DB J!T 'x<ϺgMƬ^})!J"V$K Q#΁6!<0~SZsvEr~h"%R8B4қ0zk!DJT Y7X$Bc יy<zgM3_ɚxVЁio1af;lc3(,F, IDAT3dtZP 5F[\ 8 telFp"(z; EcڱHњEX24ZG&pdΡDXRXB)SCRP-o@0ZVr@՜z2xؘ5NQ(u]z Dڐh*FZA5,3EnPB[$A En#iD9X1r$'Chk1F$"1 I  Csu$֒(r)X=q,I;E3 mj%mec]D`ĸ4REj dO ȍEÔZ jg-1#DS;$X )U;,`28N3,$RՅlC[C X[8V z<z挍YG #c0{s8ZGɱHHsz05892 'NzB2,͡,,8 5as)@SHQbN@jF )Ac@$٠x<3v9RFG9txDJ%&S^ՖC/I,-U PR %0l`8K.9 8'E@", #CPk0\jҁlON B:Hą[.6rM48ZAng,ڋ {<Ϻ=3)%՚`1푦!P2 zHi5b\ni9@!4JRӱ(.[8cڇrʠdh,Xh=(E[[wm; 2C;x<36fGRRr*Jä&iO#UkA/wB1(@8D!9KMECm1grzV @ɲXi^C:v!$\:U!K4^Z݌:, E @Y,'{<挍YQ:h,umw1=CJSD$'bD{wgWQ&|WUܵ= !db7FuCwQ^wGEg|QqmP@@DvY',Uqnwn/t9K?]u<5IDMR_KB`EujBӯ5ec=.%6(2u$'O =VNVFcF -V((%8*W]}qǙjNf0"*3HHt6e%)G,q&LeFCP6#rDqu:|L"1Z@`%ɥ5\]F\]&;@P. Tmd8J>龴% bc< Dk}FhwqgV9ڢ$_idƶС.]꓄! bzC+"D`x k d3u)0a5)_g=6(ܑD UW բSH,I9 +W*52%3,PzkJnM3ql&D@#2Zm(V[^JcB1X=6w)kK[K\c ֒V"+/Tk$ÎP 6vWXiJfbhZ{$9LC F' r*QDH2]BNHKf8YL(ICS=%F5a+tfȧ%#%"$VS1&D) +=ځk4VkR G5%m^J@=eW&=0[; O| aڳ&&dPZI~8,Ws2C(W SDZ3*tR dH:ڝ&W$$eR bNnVF"0WRI&DÆR&фHj`'MN9Z¢B qf +d|E^Jn'h #RR k @UoTX3IJSm"2I|)L0)ϴX&)g c&,)$Ief?"YEtdB1NY M&{8Us2LZ]]LkCcz}J'U5/)S-kc@K1)CI1[Do! dًV$2O*X\R (i H 88lVoi%[JSsi4ı%("m)I,%PH*PP tU S]VZ&f)jjV|gsD6%tt璕΄F` 1g6{jr&x×SLIqfg3Ɔ6䉈dzb$+?gYS!dlc,Bk)b-RII5{#100z{+bu`̈C ߓ3)J,bR]*cU6Nf4NVOrktR?!✎8ZÌVQ<#G E%աT:OBFtRC(c!Wq'/m-Zx$,Ⱦ k@DK'CBBN xR擒XaDh g@JXmAqg9yJ`uLKFRh9/f"2|~_l2|0[pB@CEcc#lڴ|]324HX^bmN,:xbc"oBVlذe+Vpylc4:E K&-au60<42@h+ήtff:'98ÃÔJ%/Z#Vʼ aF.[JKcS+,;l% :t6U8ez59L -&7ak |Ɩɯݍ7M;Oy߾S\Sm:Lw'ˁ_+?V2z_Ǚ^=3_)HT{8}h-BjCk'oz64T{K,,Xzk̓%KX&9Iq[o#cO*i6 22<}#ƐQO2~[{1A!%V"޳d"MW>`~OO{.'y毗/P7|~1G_x%w^7ӡ9{f! ϑ6XVܘ⨕ hm" JPMFFca5ؤ:[M|&FZXSk8&:hc0Zca{b̤V , c8iH$&3%%5:0(E^ :<FSfYr i/1o[~wS޷Wֳbr֔qy `}%&,O=8ށi_?6}_{Sk5ryh-ۧjGKK 7\1^pbZ[\^wRҞGe;YOϧ2mۦsp/b6qMjNfI_C8FY߇,^ZJBb'n=6 ԈLC)2qٓOFQ OL>W&KV )VUT+z$J3X1Q"`MRoj<)#j(!5#hKew*m\׶d/%!w<}9KOsLn[}YOC3?z[hlض| yǧ|!?%=wrk^?wsNsΙ>];.;޹='%^޼xS|lڶqLۆbMAm6o~w\]ٮaƴ( A93aV @IA%6PR;By Q]XSTg Z)H[Pr2g+7MӿOg/y8γY+M!"dS&k2>G I:]briZu)!ڠBQMFbM(TZZՌWMz[*BG H^z;)Ģܾ-dw!$ Z~;|S7?}{\y>vk_+8;sh v27}"?=n));L[粧$4V=>?q<*WM׎s\nپ~:I_u~NZ}#mH+'dѓWi h$@j!Fcdd'??_o5`rgiミ! pGNkƆ\])og})=_G )qtTW}I澴cOξ-w'Кs_c&κ8(MΙզ#6rDk[l3Kd<I4g)Zrw #B|:®f0%á1q2bHAyi6B1*4 ,v&Phj!!GdRĐTw3P4v--g]}2'Rޛ<^x>~ +>h;[{=Ǐ]u8Osʇ.nw{^›\hړS_QN}\6ڳ.g^ɴcOz7oi__~;zGS1+ gB^/#[[L{.cڵ>zzz8Shz VeLRJ&Ë$RQ"=d> d" %.Ck}Cѐw1W-cH)QiKLcW-a@Pe'/ 1嘑:PXPςEml\IY Gƈ<ٲ(E c ڢEKi./[\;3?!8k<ק?qbժUۗ-[ƹ瞻/KT'X }/^&=8&:XXOxG#﨧X)+)WbcҌ+`],=l>őq,9FEƇXrMm)R~mZRpDNP)YژStu5P-0ca s MY?L8sBɬѣ+L,Q\$;zRP/1)Cs>ϊHGG= -Wb^ؾo:1,좯7k^;[AR`lPL\!Bk7KS)dx$fq='222}o&]P.k>%g[h,^F4#I0T!ӜC3>ԇy_RdrƆ,:72j-9 c9f5'3ZҠ4t8,"Ij̧tL2BJqczPͭ-X|=}%YYfp1!ȇ,@гaIQqZҥMyx<2ZbhD.B#8#M}+!K\cÛ),7n}t<~!MksHQ F|;83jdҊTBH]}UQ6 ıE[Æ56bY# x~C9hqƋ<@?9ld,(Ġ}T*{KLOoul*ޒMk֭'sk8èGOylZ3n!$yl&,O{47d bRvFiomfo L18lVs2 RFGkP !4RĀAlr?&,QB>myr)(MM+d2ٱnJR~(m޾Ls|FQ)RBB@æ6RWWG&- J%un+FJT*#Yụo(1P{6Ú^R47ŖlsER-9wP畉 n b@/wsmyɋzbCA/?޶~s+}rP\:&#M0f2#J&cyh(3~ 醧Vqyz՜R4~I±QH@%AP& JġFǒ *D&> kWQ:N\P,4XpP 4ٴqȤi{(dxO@;x>^ù lQ( dа8sԜ0  w IDATE4N44ӳ-`ĖހJ%&/,#9)U, 9ZynJ!EhGt4*R(jZrb<-JeA@=B6983%`aJ#A@HRD5A9>FiO*)#XQD֢A *#ذ,XKkC0!$`P^k- & b$֎] ʃY^ǻn[iqgV9Yc"#Vu/kFS*c2$ȋ#0Xe,ĦR!&c<) jX-qbiCC0bʵR*c#=8oi1k#8 JxАW :d.Es0Jl+N>?q穪9EDQTcCF5Q<Š&X?Oϖ> uG[Iէ+D! diJ\mbl"ĐmP" +aظߝKB` &\>O]\#ېVRt6!F`ur[ȷ7F8 # äVHbONaX144h!H{]Oqyj_ U_Dzi a)& - ]!uњ184htfbCPJ6m5XT,&2?c1P r|ƣPcCOS 4e}|% ~^NJf9fF$ PB%$>c-(BO85'e|IOYDehhY-aT8'83M3knvCl8r98sKf8Μ7'Y]Eqg9n`|pqf9=5m0 lk<̹d&mPB K9lzkq,@r,yI|7g:]<~͆c'XwYv>s*Eq@Ys㛷o˜vf%* GVNzv"6y ٷlCz},Xk?f-[;3ѭWƹp/yg91㱸[f:$e?n7|᫻)%W~8qy -œĥGu{_qTe'p_<[3sIlgr}Oo&M|_t7dk_<}oq?_AS[{wxӶqbP~='O:>?m|{,! d&硖vυ|?~;bɱ.qݿڳȹkvɯk^~vڵv6FQlr3cXp}4_{܅׏Zk}B/8nͶ:wF:oۯ?Þ~wv<4lr+Lf]bRʞǬTfϟRlAЖ?tK-[ƽᢣ]oa^w+f`֑??;{o mi.t4h״8wo̲vZ{kf|s=Ωd֟c֎m3&oq۔BxZk ~` /%mE†])/n!ԴڱU_xc]=5Ӵ 5"c=kg\{17]p\{-ZթazrTqqL߹k\ ^q?ks^:ϯr~7;":^]۸6" FMxmhԞwߟ S{_D[sû^F~"gL>VB0*:v6Q̚1F<3JSF)@֯ k->BNMn FRf_wyY#7:?v[Ʒ?ȗ8~N%yO\Dt:S;{}<< 8/˅ga]2yK>-C9pk:'zJMm7oWKSo/2mwkxox_;c^ܘ+Xw},;qh^rmF|v7W;yߌij7L\/_? Ϸ7}=1mӍ'N)Q{^hm^tkO}~uΫlSFMn,^mdWjI{Mi[-VI[zOu.YkjTm(nξ.gk>_OT=yӵs6ZkcvZ_s1sv.73vIkΦӿ)?708se]ڵk'}GOOr K.}2<>T`wdO?u">}Ҳ<!fm'֭뮣UVMn_l{flɥXؐ~⍇w@DL4{.̙-\2@_CZZZh\Nx%_~sn޾˶7S/ݏ&疖:E6tXvo=?ηMrqT2☡{{1f毝 ѷu=<\>=sucmμ@J-/z2~8as>]q9N-T2[3X!XԜ%Mܳ}lC@x=se_KK |\t}7qe=+/gMy*qy `}%&,O=8ށ)}j|얤w̩O8f&M|߹{. /Aˎ櫿2}oqn"ڮGXعGm}ӒyPc|9hgsOKf YD*D{jN}t_EM---pxikmܶ_|tz5﫥}vi_==3sd39dy5=pDjXA*C˶!?%=/s(ﭙ|k޷7}=S}g8vq_{ _}B:볌U"*<~iiic;ZC/㽟.n%!<(C6n4^uޙcEW;|M!SW?X}yĵo$im회e8\q:~wK3=VR`O yGWi/=DEӼf6ڸ6,l-KIt{*۹1pαh) LkIiί1UĄi}SǻsOؗL[sMŬh<9lO6}L'_mM]p[tXn֏lN-;C["ه*]|\'[ J~I(i8V~p%ڼ/^i~%5'x17_^}ݼW3qGOe6 b{3ud[-Uv{|<ɟLe&0Y?Xd@ ytHcZ)@S3Vz>x>1}46M~=<λ+λ\=~l(>…9yw6U )=>Tq.Rn?b§a;OO~mbq׿Ħ?|ڸĝ?盪S9gyg]u Apw>Zߴ#6rDk~ޞ}5g*rqzp;P%+!-Y賸1y w|Ǝ?w׭<])}r_`b~t|3~kVNXYDN(WSp{^›\hzLgކ-P8mY1YN95 ->O\)71'4srGa6N?|GXՀ-5=o:}Um>5ř?p&)2һkzT};N-f5/ci?jx5Z3p㴯5C_?8tf]Ϭ9볠gK!e{SZڥL---h;d3/cee[w<ٙqz^Wndv-f]2h˧9 ':85qV.98sKf8Μ758^Np=3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qg;`ݺu"qyҦLf]w݁qq&SN9@88Ӻ]3sq<q9%3qgΛul,]tpqiBm۶tϧnpǩٜHf۶mxAt(xto˗t(85 CJL'rq[L2sfs9gCpY+Y7ww}738Όo1z8)3a~9-!޽EUυȂiya 7ܴ_nj5%Cg=YٺD$"h=ݼj ٣څ\!0.#g3=~|=!_yh} O;G"3k d`pDao߳u:L233; !h:3۬T~wouuRqNTb ǯPis#%6WsnܩmyyyTTT8%!h+f3xcJ;q%6cKT-o+۾=^I裏1cٓvG!BUj \()9_JE݂oحނZ@PiV.Ygg +e 33F |{bcy3Q/22 v[ nMCYF6\VWSã#nWX-USfl ""ЄzЪdvW%e6 &5@lX˰YjQa^WO(Z~"yS7 J?-[0?߳;m ,h^, IDATx;OII 3o;֝ݓLe3Fg]فw_7u)ƬTo㤧LJtW)|[ƥFӊQUUժ#x">?"p0k-7Z[ZuXoHsSx×vᇑg Hl8ˏQoSQ4|a}.fK*ƒ?eaX=9 <8SI|ԌK<ʨQ7W&gf_fbʎZc/>:gb)f¬s7v)DfG` %0b6`rqVU\F'2觙,"跐qʏi jەsVO̒Be'JFf`4jR9m#4%KI+؛){IX(n z- &~:9mIl> sa p _}2,u|aWBɬMCѨlї1X cc)퉡j3;\}ͬ^;RY+{wV#򫇒gDEe?L r60W/{b{:7pK_ U^^NNNNB\k_3NjjpTjʪbFPrb2b5U9-vw/;)jR ݼ6#7DiXͩ6|ٮD.]',,qH^^1v8i42KMM K/oYn*-jn@O6 F"22ڗi+sK6ߧJC>[[=nLJɓ';-ϜkדV?4CHHLVǎCPAL<:NȠ}v>-pνB߃vl e:α\;R 6+IUGbbNY1f@ʪ60$=_[]5lM*y{w@\V&z6vO O=!O!σr>9;lO fB6FvA`Q&a2FD`2 , cO5|px'oZm(MMangujߔYtdO89۟As7~6<87xzF222NCR51S10G:uc|=gۗ {#e]Nw5'&ӻ}FݕpR?ƶ>ز6׭tsrN !Zb ~qFeo7/Rv揙cƊsؽxXOݝY|,9|ʯ7is.̸)܈jGpjkjJ3*ofIYM:޴=xe_ #OeX/iY<3XGdt.7p3n% a;c"}^o|ʢrv)!SfWt0U㹗nT뱚j(6}W&51 nE<0A`oq /?_cSsp o~j$b(WRKQ1ptxwA)1R̜\sB%VNj|aCph++Ҷ1, 3Vtk"vG_"raR?ܱ{K Ǫ-SBfttan&,%e,|VQQ{bwOIan1=8{-/h(~jvB-ڟ\AKUZfla":C~=-U֓&1$\2hZ1ǣ4Wcې xi32;y;%h^nn.AAAN\:Xx5֭|SJkLL5d:T׶~B;wA&M~ dmfd=p[`t6^dNf.gcg вylV_ltٖ;Dk7rl:ݿ5i'>퇿j-O8ۮ5LS.-+βkӫuN !)M-j1/X2wlhTS1󹉊팻_:{Pҕ?U[~91QN7z^'R70+G>ӢY?vǝN~8^{-n5e{S71w#'6 1Sq5|1LoϦ=ll@ss1B,^JَK/GG]o~ʔ]M3Ypmn[H5;!]-1::]\M>L|ZBΨ%S^gkbfB!::ǙYt@!DHNMB!:,1/ZIENDB`multani-sonata-bf88fdc/website/images/sonata7.png000066400000000000000000002401131500342040500222170ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME7"D:BtEXtCommentCreated with GIMPW IDATxw&Unӓ J0#uE D `M_ST$b )#A(i&~S{gh@̀P׼^S}[U{SNݪbx+ ####Y\)rFFFFF"Q沌"By²e˲eg}|I~]oS2Θ$r | ?#P(;_X?sS·3UCP(αlٲl[;FP8c']&ҝ#ޔW7;&4]v1OsRlo?%{XC2+12i9vp1&]yU]ճ^l,x>_^?KYַGp \O. Xq]w ۭ6 hoGܖ%~xOV#KRmOkn9v^L~{y) Oջw*?o-[v w8po\} C˱Ƕlٲ+lWl^y~M3>}&w,>ȕsGMޛ>teW]~ ?-gnkS6d;1M?&s4U&e\ǞV*5fe 9x|WM{ %c~r^zܗ e_WW =vwG/[mw=> }瘏l {}ouTmt ~]o|qþCvU]/9o~#zW%]~3/ŏVSnjW:54ؗ~bK*>RxI9;~'E=e{ڳvZrz~'S>̍ͅ{_$Tʷfabw^7/~pDKSL~o~і?\~7|~-_yW_X5sBāW?U.8Ǫ_v휪ǶGߝwҧ@,:ƽn͇u@?nn]|us/w$kO ;) '=du[$?ORucŏ$) ^y'r_ł_VIh&6W8aĸK܎x҅3"B d#-?v#9g"9O0gP';)ߚ m I&fۡ<=?Y_}iK +}moCώ_}/Rvo:|lyV}/O~ntmo\?}aSEmnΧld:1yj5yMe6˯9wud;;Fv/oҊ@!l3?zG&ޖ=e~;Vãk6űܿu_hؾvT\ڗ=ꧼn[O~w3w?awWEmS;|l_~ojC?No xw95=Z qRv>etbӚnV_m0CBΓ3M~4W ^z9 5M{[xtENЬVc{g-yy+ߔ=SVec y|叽}\'0s\kGm{#_9ԃ,t_t'.4;?ڵ;yY^nI6| 63'Apc_ wC{ū?IFvqѵk?Sgv2yݩ_͑6Nxț͇ +uֿGsY2Oo0. ϸswu-Wʥs~/FtwzYѕΎ2{1zҢNI?oް_w|u{]:wqjwG[cK| ~<7WY? C &GMܷ QΧ/ӮI6|;g^\^|/O~O}u甥3$w3.;~$R#m7;1cSO|8c8S'M 8∱3<H !]{Z8N!`R:紋'LM'EbKI.IiC;6']no=cm6ysEai+;G*I | 64NA$΅r]GImh( II^Ui+|Lpr q ǪM/~B>IIjKy؉OِČ}9FV HZDj#iv76l⮻;p|{k؟\:|l-2n' D6QXtކk9t7yv\=a7|R`8۬>Vm_N[|<̕ c`'}긾Nj`Wj4L6zz7`q[Ά7Xy6D4A1պQiBpBJ@ -2 CFۺHԃezrRl:-kuT7&"=~U YiZ lSU%-6E } ~lͫg޸qC<%MȄF0{~1(僜c^&d DtGŠZ4MwgJ)٭u6φ?!FvEu+<`0a"YJbc41 V\_(/\.13B<ԇuS fstZ9_x=L-&ndblI:Nu`hz+Jc%!4p3E~91jy'SZ<.̈́@*p 8'N,Y$ !PAb+ujH((bUAkRPir&8ŒB)q$lO )VUh.W\.Z(-q *!8aY 74kqJΪ룣Z!DwwwXP!r_q\cR}7%/\Zѱqszzz8ɥ? uuwwS4_VkW+o?Zv_5E6$IrqƘu4"Vաx_v]Z]z_oˁ#%/jse?|L>rskjxng!D)vR'/5T,zܹsKR| hŊG<ӦM+J1k@wOr3"Imx#jIfe+W藼]᯷޸.V3?oCw; `U˗^A)8٣_}74/}X(;cDT,ku]iI=[I_;7wMuZSt"Okx jJ : [؀1ᜤd-^0oހ#sinO֬( ]]SGZ6kFi'il <g\ |!\q7vsFkr܈q ` 91Eܵd^w(~gh ']a;OnyncA_DD6f^ذqE';s`z{>O[|s?l/tw{v/>zH1o1z}?#8'nVllT[! ;/ucμ30JMc8Ql&%Tߡ9!*3sG4!#+QmX2Rk [7Z`ux]lV5ݪ \ʙ,vv3Js& .HW IUxT\$^ %+Vտ6 =s̶ cn\v _W|Qc8!pށ֟ڍu=۩ ڎ׼5[nyv-%~jժ-[8hud~v֚\H45`7lhNwݳqHj,Y=^o^ڷ[d|})տX,͛7o/gΜ-c!uuJb, tN~jE6eZD ޞh d1fS[ИD&jōV(7F4޹}30))Nr846 |3ZZ6kr\QEqN4jf:TN_>fJ.n|JR"JL)!<. G R1>ENo˟~so~f6ծK~{͙3\NdLvYWF#?>=#O& o;$.W,Y]4c%Cf-NGoOw}'3Fkw4mUBZ^>5oܮ 8FF#ݳz0]upb'{/vg>ۊɚ5(ӦM3 ѦjK+h=5D0g~#.yPa!-e8cϚ)'hTj*oQK Mr1rra 5a-b,ahprJ7[He4#s:+Gs鬁@X*242ƙLHV Τzx~kȿ+q 8׫sz衧}JVAD\D||uȌc ڪmN!v_[` X/MUCqm72 go{O/)0&$pGGM+d Kv{aL_wb-=w=wN4_ow;&sڄ{ і/]s= ѺRmEaڤ6ZkHI^ʩdFOHt77'#һҵZqDDԱ ,$#4ږG7/0u\E[FyB \Hf~E2u>\ 8֘YUB1.+8W'JzӦ #Fl(f\+@2.I&p 2=a##`oo_;L`m$\ԛ8cJ WX&lH.#Qh]V쑱Tƚ? ;18vٵ}ycnlG]*ʀ @H IDAT:Mm.߻{ v4 7̥KlJ:bmuuң5t~}W|w}9qkmLDE1 m HJr%*&?`WCT@\O1 HJ T5rAM"jkS x|X9y7p*B^Eac̓+= y6\PIc0i|~U9O$*g1hVklgIx*ii3!sԩFX#2d\p9%4eE1K/>A&mgWw41 w-`&B< \'[πqڍ}9c!!gL qV_կAN ^_rw_~/n5Mܻ87×N[zG6 ZԷ;GZSx168^IvvtxrW<0ᧁ8csW>t6\c|t km!Ik ZLuJDFpzDT Ժ-a_'3<~o`!$h&Z;tw릡Atv) dɱam#1 -<\q01+.)=^7&ZRGr^d c( ˭+”Di Dp8H ) q?ZᏜS?x!;wμϞ闾e{=:}\|H'Iړ G9HZX!V)kRJ#}Wc..%/~h [o_`jB}8w]r5֑L'i똱d`=wU;%P.4?h5kaœ`ڜX|׎藼_BMCwߖcԬY-0 $Z])DFkpRʻVc9uHWr'ޮd-H2 "% 1J^t\EI3e]8ݜFl)iQM:&Ve΀<>G:c WFfӨQmU6׼Jqc41ĥբZiJsNmdzaDL&9[ "cl钃[믹>vuv… O_9~ [}in-'c 8^wy`Zk*m9~݉j<_םS&/~Kt֙o[S^ơuc%[O:N\08c%wv'潵Jnбpmw#k#=}Rv?Ɋ+6 \rjMμ3\K.ȷ[nP{0Fv0-BrIY& -&CÏYFceede4:%0I :r/@䖫QmAd {IPVNF$ՍVCUBp=a-jtjhsƅW*h8Q7P)FfbRSa,Roz׮]{y{_2Vg҃,Yzǝg?;Sv9bmg])wcdB1fjZp.m"qBB!j햟^W38}?%<;`HO>xBv uG|̆nnN}p=+wd϶~Ѿ|`E#9?wpqkǮ|NG2??7`{0swwYkgϞ}g|Mk8c=䰛oiC(uN ήmt7cd(9%\u=wU'c7u|Ky~G)3m9~mw)6S~տluF4::R"<#Z_O +OaN׮d-ABkXőK )ԊRSVr=!BO("6* 9yɅfS+NwOGw]7pIӝwc$D4mѨ9ڕ>Z7;y㦕#Cq;R%bAw֓AΑFaScO}f|q>?ޘy (-6Km;bc%=f9aFEWyiޔ])"Y$S\kh4F!nܴeRr3r.^Hx٘Z)@5t\UJcjRIX#$)(3%+%MdҖI =^ /X59L5Xŕbٰ5 ‚ $lrmwM#nNMɜu>vB2)ib] ^v]wh:ve&#Hj>@ 1Jm5SHpWH dmD\!j5.R F@v#qsni\#@Rp&5e`:J3ˤ3$pz*gjN:ԪrvS{9=f&dR3 |z`/wڶ7 "ZP@B'͡HۦM*( wfn3_QL7X/H(!c]fhǘrCh,'BmudR$"p`\s9jjQ>"֌r`FeLg@L 39~s~t+ iE#[k-2D , k-Ռd Lк_*yL*VzE7Fc5upWPir(֯^g#&h` HdM"'\Lc4ˀylENd3F˥He9dzq}5n~d݅}ۆ=4}4}CgEDNC-ܲDJ*&VrsΞJzĐZL[D/8`¥sV Znţjc ;IDL 1idFI !2`1ҵHʪN -L)> $6L!Fn,"xa4u8L*LִIꦨJLv1[96%HhNAF5+| M7oz ;:\r+x SE)JY4lw9$1y^L#R2 TANbHa6̙9!9㞨&BB4 r6 FH,Cklnn3qϽ c(iG{łCi-Pʑi%dSu^bmTY+N(Ё:Č$66p% FqGt]9ã)F8d1rFFޤ;DʖJ~ZP)5ZQb5HX. X 룵ca$Av1I7mjF cr4wrDh%B8NS[) 3n_CrB!cZ8\G( IZ \Iz*RӾ I" 2"{Q(KJ)%i@pˢhmxD'ٲfj c̝̈́- 3 ]"gddm1Xb˖-15#$!NyӕD 2i=cz!$iY01ˀa`D@HƦ! FcXMS=a3Y+%d iI+ kV6Iasr:\Q \тyb$ !Y4J"F@FF^Ȍ=)e188)RnAq(NU.O1LzzCyӦfSk㸾 -r9RR".dfQR&MFsFfW+jVtD ?Q*nr޾ΎD74I 3er26#O<OvyoTS<ŝ=c\T8cH7SZ@ @bzE:TQ@&WʗzViޘَ|ɋ+zAP@(W"qLUuA'jp$LNz^4ME R}0KOPhSDZL"M8η-/~1s }͡=$<+p4Msp 褤e:eL ,4naY=3O9J*N.斸#GG(l G]?fOeR)w8BݞҕJB fӞFnj:`2i3-}@)=M /O~DYf{\^g'ZuWZG;$kى[Zk}hM/8M|1V|kۨ)5?Wo4ۿ Ӛ*ٚVcߍ'BmҔaI\W `^y%<M` ( L=ŽV<88<#nY,:waVY> EA]Q QUb@EDL *"& JE2 aW]Ӈ9 $q<7tw9a}`{+u꺡Pml˔B)rׯڠF44 [a-B+5%T?=IJjt;tb* B<-*ذ-ci̍;JiMP2ړS{?zR`,Q_l͟$7w^MfϞ]aj6͗g͠>cڃ7_ٛ=u"pk;}b̤)?u >9K kȭ 3&=75Wɹk.'տ|5YerfS.f\X]w\݊ɛbX~YcEM~xNzgwR- iK]0ͶRsw)375 3w]j۩9Wui-t)kruѳ-KW&O(uׯ܆[pدs@nX!Nu?M>x60.>dro!i.v _k|"1GZiH3y]LBW@9ap\"O8Lߔ܅kVD3v0nT̈U:0K& Ӟ"!`4y/+VllܤYfMPxL1(LM dYF(k7ԁP 풖Z Wr~ڍJ/Gg{?{Z'_4uk?-][sT$wS9.O 85c$5MӷߤL&]UEyFO_m Ǽp+ T{fH#xCDG]w{ʮ ߖ\(J>G0WO5?rqq1/ +`DB)H IDAT\Ů] vZ^4Q(fq% Ō@(nڲiy sHO ꤧ7E^%zA+G_xdjӦMMc36O>rtm:k~\٧[L~T-W&ۺgmVS y{C&}4%ߵ%7>#{gy^Őeær е5K쒎;zL(ThTkEEaeN6QGuUaQaaXd[#ap(cFťMSKJ6 ^02B%֭[EZ+̖4S+۴iӧO<ڵ+h ӧOr\=ٳg2nENѿz wq^W:/v#Ըo+=?NopEsû 6cffGtsw0̶ L~V)UUՑ^ݎt =rH˯oЁQ/g_zQ)M5sXL{hcNj5>ɀ;v?~|^}~ZvmkoںAN468Xk` n:Rr ܍s#1ϋ9)YZTh~iZ-SҒHpۆ%u/R&!e JIn-l,S  2PJf 4n^0Q'x+zV IMӛy+2_G]^cdXfvSZ.>KzUzh4Z!2[J9EˮKn(;\T7, YuMbȠ%B4)i=/󷯿C4HM F"KJX Cniq\a&7h +3;`Ih,VR[P)/oS޶[J bsT %LHG9sHO={u['Hec-92x^7Ja6 { T-6TT-޶Ҭ`VzjzZ00 %Mij-fcJJPZ Nǽhi4q[m. IpHFyL;2L]tՎJh@h-T^pCaAZҰ SfVIݻOy'L;4d ]vGlvzƃco923uÇdKhbІdžpA:DHB0xB;*fU*ĸ9%N8^8-5 e! MSSi°BԐv]'QEQHBxJF)X@BP`KE3c ԖGݗ>?_O!{ۄWyT/`v)2U;A X#R ǀhb"\(& XvnsC<-.Ȧ!e+4J֭^Sa- KҘ) , iHbfIT, -, BFBdie) b2dd+hhfa)͎GKJ%n48.헭~i~ɸ)S_di|Bgu*q=Lrb}N O^ /.]Κ55nb ;ۯ(^UՅF\t3>e3*gfk6mj {qS?߿ύ2>:EB |`~o7w(+rJKv9djO2f+L&C[]{ݗc˓xi I3fUUG>4d@ 6d04]ѶDKZR!A.IM1Gh̅Ha"h`0X"HTLHlhVDH,5#  @٬B2j (J XŔ)- Ėt=ߙ7t;p UZU9OmGI>yKꨰ>{}<}vꚷ;4ٳ/59r ypAee﷗_~yɒ%¯̜-(<(uюG1r\/t2CCZ20,A̬XZ{.܂ m+_7v@RV, !cq0RBmfgDcѕˮ]nAiq8lz6$&6)!84Y0;T,m/=5ⲁ?iW ݒrkOȦi¦a ӒY "ӥ H)2&- Y2hH6D,@<oӀKW CIk@\KBŢh,# ڢ۲Mߔ+ ;k6o lAJ\0mkVtAJ @|;~^ߴ͑2L[JAb.Gp)ք!26@04,!LV%&J"X4$`*6K Af,K]!UT)y`JZ$ @,&ZiOiUжm't]cmܸqA215hP3202HDCD! @`&m)VL5iA D-"Y21'+ O%g )0 !$B ( X6@K4i}||EnժUVjFH X} P@eo%rH"ߴR1l߱r?||| E3y}ד+>>>>>"+>>>>>"+7ρNqqʕ+vl2--dY)bŊO峲>ЉbIglٲ&+Vh׮ߧ ,8X{Wͯue _BENߡe=׺:0sk֮5Z͏koO7mڸx@zzF&M:ꨜ~;v׫V^k9IM?yUرgqphß{WO?Hsׯ n޼wttA_|dN<;@[$Aȟ|I,1bDC'|rЋ28NMnY/"6wNǎge˖-_L YYYww^;˻ը'3<ЀK.s9k6żyF;cƌ[رwPd1cf_C_pk;k,_F";ռY>MӴ, x흽te͘1L|5k_|nݺ>yD_~1TH"+0E8ж^|5vk tz':{"0+?ߡQU7mEY\\T\Ri֥zi!bXv}6mS{Qom9|T_9X%y  1#vyN*݃YV7R{?4u qK͎gu|ϟ_ى1k[N1䖁YAX =w r)^syL x+ŋϿ-[B`JJa)))m-[7e ẮXpaE|̙mUz?^ k.]^i;_n)5ȋÎԯO,C$R=zSo~j{9a(1KM~iBHnl9!̌IIrj~?w䷿)pe:{!/YSF6'~_Y>ڦh䉍mNn7|O+yҥw|'.\f2`j*7ζ;jƻ+72wn]*IMڷyNΝ;ӧ"%:Siz>̪%yйu9u;F:6/MY{u{/8}]v}ӍNV#{I9]&ٳ"oNzo~B͉q%Fvچ9 ,N]r+\բ!W,ʬj g*$wc֙eU~nBו̓'4 y?6hc6~i!rRqc?/4gΜ=ď['###1-&-IPƨGfx6+xnnjGNq}Ǿ~M qNA=1s2+S+WiR*4Pf}3+XIUqJNN[3tΝ;WN۩^h+w}db}*}=v<|{~?gg^zSQ(*G3ytˋa`ߌ?8>˱n*-O<ҨXz{26l~?Fkop-*O>8k՝5tn!Eg&=5\LU5>:H_X"g8P.b Rt^feٞ!biiizzz.-{t/0FnHVmۄɮFmgmۍ7.WD"뺱Xlwl ^dZTgyRluUT;.[Dz 햺G3fw@׮$y['cj!'q2ҙ#*]qjg.w';HR֥o^yUYd&>ŵvtefNr\+ls;6lY|aWܴIM65mo5wK6mڵk׮G-y^(ښi=qjKg=8}Nn8m͇OI/[θ|h22듟wc~,a]~s{wn7ޭ{Je˖eddfWnݺ%KZni&4sVwsG︱58;U>]JC9'_ꌼSo}|̜Of.7>>γjSbs$3yʾ2N2lܸqh477uo߾͟?r>g7{y1k3vyUY|&>创98⊽""mzH)F;())9C-y֭sTs˲,Xжm۲FhtӦP8--Mar劕۴^믭۴ٸaC왳_?晕>$/:k@30sW^%g\~~3uv?8^x:ϟ_yo:HRQA#)EVVgG]{̓S0-iPNhp~ 7>>>>>"~Զʅ~Z#.\7BʯW:)&$##_~vg>>>>>R~eQaaa۶mk$ҲEU>>>>{h4kT5dg/rU篂>>>>u.\Z۶mWd 3/Zm۶d_}|||~F ֯_z||||[СCJ.))Z½#-%f5\H~~~u)W۳軥%.ir:s~(}^<17OOO ?dyzk21Ǎ׮] z}}Y]/̽7/icR4cC۵k7nܸ2&$/,ZHa4:~COySkrKRyIo:Onfv67>dSlSMbgO[<.MH$gqvcEv 2p @S[@Wذ`e7rC '_|&<{. D>jsW4Ecoy?ty/?}Vעrne:>ZM([黭Չrr Chn%=gS]{O{s~O )#ʧ hҾ;x%&G >>>ձxbfj#//oH+r2r 9?[?&'D{gCۭzpX#px]l9,h0S"רM0'oUlLTqmTpO)'&# Pgn/nN<@W:ڄLXWŖ3|||| {^B'N_} B[1q%-t崧5>g|F3|||| {]v~i0ԊÂylt^Aܣ`zνI: ɗ|h8I٦ 1ᶢfp$eL`ǎǏW=w̙3w>6mT).볳i薡3VG[ԇ)cӹ/^4nswg+CνftwA?>>>>>⩧ Wd03@ ULrK.9ʼ3ѮIv&bF~tG,;+/-'RC% cb.:#huX_>>"XP ԩSGiD`@@ÈL(Ҥ9~ 1EHg"bD*&&D-$dH,H3'CbA0 ЀDYbBd,k46AibRQ1+&E5 XM& JL`Z(iH+֚XiMJ)VRD;D"2Fd&&b&5J0Kd B@!la\t9x5kοDD(q&j `F$)b!%(>?bfd̂%#b'$( BfHDYhŀ0&]" @fņ RĈxD]fRXv<" I1iMD)qbhFhLFV֠ 4iBd3HI=y`P/$,ڷo6Łk]w QAwٯ Ą8Y c2(@H  Szr:^gE50I#v"#(&@"D֠SVD!@H @`@& FD(` dB" Z-4" 1qA@DPFԞL (R@Zk P D  D-Ah BC`EYTA0 !QH5ne*ҿV6k7xھ}ӟ|cXFe!=ۋ{h_̵Q eB[F G$N0" I aؠ2 ͠20J bȄ4#2kbRK& !$*X{D Ȅ2@$b&b1" IAH ׈PXL@@~ FD^V53iEZ)I D,n5!  I`42K@B"L]6*k_v@bٶ~Y;Lydߧbvfp AB 1!V@aF\QA [LN*+({iw#먵2cYьhV}7-;R7V584[34f: s*@̰J,Ep&P &,$1f!y@Ĭ 4Gz \F#O뒧sIW]xc= hK D Q -c R 44  Q#2&f"DHFL\AA0K͒2]S3]{ɹ'xr :mUd2۹-H|.Z1_7O/_NrO<lehgēOKjIK>3N9>1DsəJ'?zY|zY)|3gxbDxu߾} N;wu|ZLN?cELU36<-m ~j3bEg~ʙ<1㛲UYkEBO1.X]eϟ?9i_],];1Cog'F%x뎻-;T]?e/;S̟UV '.kw?hҿ5K_O^$%a  d Xqjf?pMsמީӃ;p>yoq'̼yZcYszl䀩g[g̖p•b#_CG{W]<$~ݤ%>>3ROgfKq@*WWĨ7W@Ҿcj֊~ej/7d9N%/G.( pC<@H@ 3!rX< 43Sb~x. @F@Ù@f$X*h ̔@t\QyPi3NqClf[)vTCL{BD E9NZh# kdfҚ i-4L`4!JHĨ$E3$֦01hBb ?D(0! 0Kv#y)e!^W{3iᦹêKxdhg;,fl]IܱeyLjPU*/eRN0SsROdž|mp:/|#Se<|}ƃϾY>"~z'V;ksԻieVdY/eFZ"LRQxn )#jX$ҐXk`GX#!np %$pK4# ̄)r5GX#h23JaS3E0:)A3GB ``ђ\4${.2ID5o#E>M&d–Gc,]@NCHn__"- 4N f :0 #iܧ?%O:<]Ogڭ~|qSgxgpCO<K ڠءs"m{jn7F*4+q;lՕ[0zێ..dAOKO!tk4xۆL_F|?rdF$laSe2$ F(+dѤP /!%X%g,ɪrowD!n2*ÓA1\Ayx P.zU8z~MwuאYykGduPU _N;Nd/V*=HmHLLDEJ)gdV1Uڼ>mW'-M1-] aJtt"6+_uW_qaQhJl:f9G <D2gJ 2jl g2~~&03AhJIYZPs@ Z\P82}-?8Ql~(Q`8ܜlcFWW_~)6Xw[0;E|G=xy| eW>1/z7c_y݋tl2}cy{/O3F>I3Ho{Oi\ywwϝK叻Ng*Ȉ d,DZ$jGfI-Skc;q%cVc#%POm/L}%̙lb'MG A`oI $dƀ` 5:̶9ionc7"T2ӕ<[[V=m4u< IDATi &"Qdk++뫣ȌlW-hx{ַxeh=uJZ/A;zn`4ABLvY(^>,Ƌˎ$h&%,|AW/\, ɓX2 fiJ`1LMAzQmyu { ? T!j]ǍY'Ty_qbQn񞙌ةADrW9爉(i9nl~r &w:\qh-2Dz 7Dcd^Dz*}a0(QƊtE;6Š aX)5@/̼Yg$Js]3'ۂ֎=;RܨrU4|[VOU(L љ]\ӮOo>&?vbii94M=?Xjbtk]KVV?fi77N*[ͭk+ptM7=v좃.<"E ;vU#O*pKȺY3fJP"BA)j %2m]eS#U%;IAЬ㫓ig`\-UndYQ}A Ṟ:JkRۉ -PnP%_Vsm6gG+k'7764]]S#5 lWAԎ=JEVa[umk3'K4xw˭7pEpE᫲((B>wn++腊QGI1 b0GBIQ Yu3ҒY3c"ǀjPf7iƢ4ߪ1Qw s{9. -(;?P9 zjybȫ)T 08C7kF kx6RIFrrPGI5*pN +8ChbaG|@zF>75SӾO!XF 2HOmQ#m {M]Zɴ֮-%Sm*^ؘ19&]Oyf9,&8湺9I<`sv\x5E1luc41VVYŔKe- M(PkiI 2SvU Mekk'&?mVM5)i$>,Y!fsZhx#w"*{k]˿w!kVٗ잸 Wwc_1s]'`(D_mP^zhx)t+Nh:KRRUS{6^yb$&2Cl#9NSә5kؙJB"C"P:6aAD@ U9޿o*.wYwd{syx nzuUK320m?(0-Ə^_\DΉ3)$ ޭ̌UY,g Ues:7 @7W^o/}tYŦM 7 /x4vEĝV?7Ul3#1Duhu;e' GnX@b0QLj>''Lֶڵ6Rt뤋E%:)Y&oʬ=U߰U_v]д4j CjxC`m7fNӍtaHlV$NR㢼v4|x jѬK՞]rtp޵Ō\b2l0:Sc^>6o̚ d* r9ى9 mA=W}?.~wzlY8}s_?{ȃ}O?܈߅zE͖au+u{b5'و2鴉Pxs#Nވތ't5~utx-v^?Uȟ~>oa<8s»>z ߵ | ZܩT !C(e@$J5N)$5uFcj6SU"""};TFS!&G1:Ix4d6PTLyoE1ۙȢi1+ I$ 6b1&QYQpC{W0y10"FWl vEj8ZeЪI5 QLá B,}RaȘbDĽӷr0ե=ūyx{ngby^,Diɥ+_\S/~'~Ӹb^x)C?Um}otq!K;N@om㿅] =^fҍ\sxΞ]G#/jUSrrZդH2#|ֶӘTP풩ro͡שrӬK*j*08v;b&,]'ӘVYgsN,>,,,;k@CUɳlmJXnxlfIS:sۆEV¹LTA9z.8+9x~Ac娘eo kJ gP3QU&aRV%17fLUspL9brzGy7ȟ-£~ .W^?{~y?`5O}\y)ZBVONŹ+gAlԟMGy9)-6"ism|;oٳ)v/vp3 Dn70cHR2L;N5)(9cgp)Ӭֺ.K r{3SP&V_."-e]Z^ ƀmo_8q|N!,8" f@L9aiaHnY(u׭%<$7(eS+GrbD3;FeΈ8 9"#\Tٚ">XSdZ֔ TXTٔ N "u&N tG٩4׷ߦGgw|EWSw7^}~__c: ?𭿁_ǰ9VPic𻷅p:鶹Fus;䳃/8|d}wFIњD51oNcYeM8;#gpαw`]K_uỵt+/-w{]{Cq{?>x9fuD9v˴cɱSnX^ߓrR0Q.[[զ>4MsrZGHLk)99tkPS#߁ODsz*.9 Xa(^gSo?9e> 7]kv^gOQw>/F>=L>kgT$Ay gYfʹI]$JpBdO@{9{x𡃻}.7qx7~+.C^ם^w|1.?_;~u ^r|}߀}<_}x߾Ʒ/y$ 5Wv ՟N֗^z-/]`|,ǣ9oe eg R(3 (Kf2D4gbY6e..sEf'ü'7t'>ݕCÖ`r׮+/eyDRn<:n4xU91Nv˄:lla_(f" HJQrT,F "J!T-[LȊ@xǞ-sΟ'#,3z6Q lү.Qռ{}`Yi ݒq9G2 S6921MYf s̥?tlz"vC.HIȔ̜luxq&k]Lm& L̛vmgsvMʩ#t5mm%qz&9Qfv7S6rU(s98"vll lL{A^@Df0"vcf 3862-wus;σ|=:ؙNPg$r H0"C[1!bxl"DN-d4mnt9ek-B}\?\bRJmL]66%EьبZ:+I9RN]M)X/JG΍E3D:Dbo<0.u)9$9)Rϓ6fI.9 æQB S9(}\( ["7mf, N!Ȉw#vf %.K}rތNp]xG[SՐn+^9XVCeWZf 5cH G`&bBbF)P,>WwIpe.6:Ύ|m6mR(Agځ;p'S|9tS7scǤLXNӛ?q+hsD#fǮ# F))Sf/-OBΜ3&˚ \vCI._t`&8@A\Y4m` Y3CQtqѺS&ՑCX `2&T1:h48*ba+90ܖ_F\󥙔OSn9/w;L#߱@6Tl4@a8b%|g)"i?pW^*f/JՁ䲋u6"ԶHI1L TҞݞt!;AlnKAW]3g rGbRL\0`*$b٨--I*|*)f 9ɁR+ N'5Hjr.*QpcKKmlJ;2k6B0Vsf Y|/ ޼የXǗ3S|SGdODwZOAt]liv-ܻsT*!Fm atW-/,eBjD#7bWGj|`A),$ ]17m6Vh07hڈY4&mzlkdc.eC5y*̎hIcug9v('dӨ* & :M%FNOLs)u= IDAT)7;- yʠ e vp{"1;KEpxMy<~SoO.H*oG|w]_yЃO~q?o~a\Pn.Z@MSߋ!ƻ:Cgeo;>(fwo^}:GSyx\o<ّ`db1dhk2L] >P(] nWn˳3??x~|`05\]0JSmںM+m`ͭnkb)%$OwkZ@)r1SET*CrL jXSD]٬i:hiN97 CSFrFu:ZsDʹQ|j9=D >ʉC6'(=zBr9 A}9`ދ.:hi23]̳v !(Di51pXjv~aP 9ivD9[& L:62#"8[[9:uxޗ*9kNxvAd%;|2jY 8&j80j:j,"ԉ“tk3NkܠK.$KJ3 Xr^BG -gWZ3),+9B&S&0̀99"+!]StKÞboƏ)JF5rw_(4P]-\!Ax71>_m @_6z2G/AB rcMDdL ",eP =@OD29ϋ CvNRM)ōX`$iSpɦI"[7M]lڦ('aU J4*0H 3ck1'qҮђfVȑϹt(s eڙw\H4qNB+i:VJ!xG5eD^]#seRfk}&U/ȩ0,95)8fu240Lip &5Ď)5׷'5/" O?=xܛ |3=C(Y8\y_; e9e{} vk|<>7 [>)v'k.p׳w{521̊V#jLl 1 E%ԵqV[mۮ^Y ]i1݉^siΚD4G&+1L"`.VU1ƜbQrSu)&I1Mj&Ms"V֚09jqY.8 XrcڦMb%fUU@ΒJRf،!ʳ&oM&y$PsLs}(JW ,dt.v\P_R(\(8(J%vqּUͯu}k\-8WwNgV[O5?y.GκS5}J$^}gT)cb<<;:l峿guGE/ < 0v2 3 Pf;9SL]zzbȱloN=xڵ(*"99ssKLvvM16]bNQS]ۦAPe`dj&\: ˰œ/.LΙ!Yc]mrۦmk["Pp8qmsmVcS* rpi($0_=`W0]H>wH3U_u4vMh|4dHUfTMs|ks1٘>E[lO3Ì:LE@ޕEiEJi";9d&@Ϥ=pUH6\.zȧn=kI5jq{h۲<뽏1\kyԩUej-@7x(I+b"B4@HԨ\GPD$\xGT9UXk~]CДb}sϵWk׿o4%$.`|D%[ɈYaT3)l֪`!IuJ Ɨ/al*U+Gս}&nPC܎ih6-+N2Z)jZ9zY 8EXBHjQ;/J"2cd%:*@̷g- 6[zJ) ˡݝQ&Q i@L a[T[bwLcfdQXK$,5P)s v&pi?jYԜ:G}1~eF PZ;lm )%υMɦU!NFd#"Jp͵I-ͦ"䏜KM0ODn0B]Gy.%6bdÍTVuzf4s= eC[a$j)Jpr!ӘU bQW )0!ps3sjmto,9Qp jAI!jraZnkq+V*!p($e\uܵg=l_q8?igΞ;o5R#ᄃăPfh257ު9`$Dpw8*1Yl+zŕ v w>:gSNU Ż=ڏA B2oirJ̬FJk \3(:XvSl[8ԋ0#2"!%UfU9ܽed'dL:[=LO ϛn]JYAhրFP ;T8z.p` @3q`\ͬE`^E~0+>C>ˡ~mm"nVMK;nm5Qp^f`4ڴ,K1EբXq3u Nj)3P, zQfbD0W3#.oBUjɡ0 F4LLP"a>ɧYuTRD*Sם[<~49VA*ęD>[~s ҏ3 RYTʕ"8Ģ.lusoCT20V&9 k_sZOFf /fZjB7rxujq]c:Ҋ&;f:frPIP`pvHm0Ds&v''8Ldtjfk 38YXD,dT , 3bGpUTg65(V" mw[0 5A RO[Y,Lfz1tm5"f&wM|ʰ^ j0R@DgNTVevv8C[ZZ.ERВRdm%4 ,+fUU*52T%l1`F"m1pBm>C ,A zD:p5q@\'7~ex0DpKXCDMD+{0ihl~((#Fql TKCqdD`1ث)'zw2"8\G953n|yͳ~mmg>)ϟy7^ߺ=ydlnnBj Kq @5p} !j^#Y:%g^-KvKM]H@iB^ "Ml U}}v{jD!PۯGHU7(G*DNdpUVٕ\=T@J,bA4婸yT\kpĽSݽkHաQM3?ͷ?ۿ]?ƙ׽]%?ٯxWYT cG~a'!@DАN%<Sy}pt' }׏ݯ WLߟigs~ZkO۟?kx͛Wm6M&)הTL}\w+@@C ٕz.uAw|otny^4f?E$ݨeך*b "N8sͷ^{ΜٝSn[V{u'7/:E8` 0a3ZɵuCxbSQpUtj΁?-$S+D S 0@j$D&X>]Y~-_~K??%?s'^ٷ_˯׼o\n> ^{뾸K:=o= Og<ζAVu?M_w;| x;o?{OEzҿo^,v8Ag{ 7ݟxm*4.@ ~w"pswg)b3ۺ= 3ypbNj0^0,M4#IԖqI 2gݬNᆮןibVV2Ln)F c9/n5t]-̷S $cf5qEԴ} y5܈b[4%@npMS̗k ;FWKl}"S)E&m 9Ak1y˿?yǟw9|Oz╕Oą{鎟/zWЏ?L;tokr/dzW_@}x+e"l#?*d6UdDj+M6x.J !!'^0->t-Z^al$21(fm#-"05"j^Lk8d7ޟ?K1^$cѾ ]p?sbq*CӔ^ f+Qb@ UHIR&2uS9 ()َt^56h&z`?p/|^O7/'_ŷ_z"w}w _?e}7mXsW_3unLd`]}a?v%G?y?^;{w?vr K؟~<;_ҟ~_z|kx=o7\oؔ j<{dw#Ӿ?9Wb{xt$"E"H W2uKaXA30'0Xr iڹR35ժ%[In8C_I dU$\u2p3K9޻y;;gΜ9}|ѦY1$;SNq1kI\kQ&Xa d YIin5^(PXQkƱ T@%31u=q]~kM5??gɿ'^eo~?K?- IDAThw=~} }eg~#?sk%?/>=K{gg)|r'a g<7U_g]^uVK@jIadA:̔FZJms.l9'~> 7ٛCG |r8\m:وbzqyt$|[JOJ}Sgcsc'v)kn=90w0$!TGdRkqe;ֱu\-yKrbC7hi +9+ju v{gh&fQ-Dg{QZJPH9E(-WQB6"$[z䰺!=dELŤ R`O #ev0s"ss%Kpa^q)c؛,r#q:E"Cc;0V-"jgwUwZ5܏($^d I)@;JLAX!1[ ֪j $23yyt514Ib!𼕛wNǭCt*+l(UB  ZXKռZl5)Ŝ95[Otl$[)@ Ui~n6jYDZ"C@Ӧ12w+IFN,x܄ nZs+&),;#JεVc&ѠpFyj"Q-R-d+ȈIԈ /M3%f!D9̊f5lQJ0wb^k_UDsvf, ! 'Qs }8ijМH .@ "sB 6xH~sd 浬/_NjA,lܒ 2϶Φvo͹X/ucV AdfeV%4 Ĝr:knbKA1y 7tG(HyBذャKGt퓥LG+!0;&77'&AT+nnlaH&"#jw4r1qEH5Ub!:Cf51DL`I /Cl➼Z=Gսݗ|J#H`bQ)*!\ ;{, qgLJ r1ƀ&q Y"P\+[oяYfwRUL54;^yW˺ס^) z#KOFQ'uv2Nޡ{U k3!3|Xlo;Xɋh:j^j}1kCjXZZ3j5W'1&)!DXo `@eаDnFjLÙ4GW^yÛZ"?ww`aX--BzDS; d=p8ۃ/Ӝw϶\ȇZfMa6o6%H]Cq;womTA0's$bhu?y`֩#F6Ѭ$&oCxͼ}ח.êP)2W Fj f$3/vf , Exꃇ:8\omÊB\Qk8033<LM@cƬ '*5OŠPeacR>YZ~\7!Z|H|/`w!<9A܃紝|;!8ۍq{noc^Tr]QmWMX֎HMIOy޼HxKAY딞*ݪ2!h:Yshɪa[|#?:fEȜI% UURՃc|aS*DSL5@S5 n4n%@N" P_1y?UGy{<^Io;Mg|֕s_o=^ݰl?*Yqg&1[MLsT NA!UyX-)Sdيu݋${mҒ,nBXˠ7x͏v$$jmu5 XSc6T5h͵%Uա& ߹e>__Z]ML(@kerbfbg[RVU]@,G \ȴ2kr2GrS&X`6͉x;<@ 0Cħ(S0G$?Kxӷ>˯y˫;?W5O76GxtJY7<wOWͯ|YX[\9$dFqbi]bA*XʫR* +1yqfvv&Ny.LUTEP}sigN]ߤ0Q Ҩh_:by4jAJW_a,y-Ur^ɧ88G9;wG'sb&A8/bؘj& afI")*<6)a4@Iګ!\cגJc"Lb!4&[ tڬz+DJ p"OR|ݯxٿv0{^}ozyy ([|rLX/=RAbզRfa/PCef3|A31̢ZMk_'𰇧33&Wtj R}Ivgq 2UΫ<+_ 6#?|zA" WU& 3Gig=Y"NL'8Dy9{Bl]RΪ$'ritj䍣5QczzuZحqЯ׃u4h+SgvΜmDn.",1Dx6M; Jr)c10 $s:n̫ap?<:tZ\\F0ڶmR!\̘l'Q_Zy _+w}~mo~~$CYD~֛^<y#݌l'"?:WK'$@M m 9pH!EIb8n휑xzgވșD"S!?w: »d\똻GC>>+I2Ku1U/nxXry苎kjCu.ݝY[ G!2(E ^nv LݫAzRM:HUǒ2,u\quow| KTmi^D"\Hy$@p'cwrsW_Zu?Ƿoy]GC^?W}sm\-7? 6ذ*j߯ $$aiDHIHąQ* 6mf0f"ӧ/wC6 `7*=3Nj0eUM1U;Э0yM @p"9 N+(EI!Bȣ23:szic^E*ͥ  Q@d9k LY=;?&lJ*2x/wÌIZBB'fDn, D ̊Kl滻EحϜ9:k9UrB^!6ʉeĎbEk5 X\hEq쬔nQue80z.&L!0@d4*  ,prQH[ }CV7fmΉ%qS/9)pKy PZġ\H f9y!Zټ DS|$D~`kqUG.^z$IAN`N.\M-L ն cV5b;ǾoCڝa]RR )"07Jv-AՆz˗/wV|wVb2c ˇ+@GFer8M9^jk5# M"Ap!g&TRM]q8~p;E}TQ M8t3R՜ Nl,QMܙ}3]#K)S @xb/'r"U@lDT=jX"X5A7yw}\9uRݪ2?go I" gK.1{ZjZ8z٭9êvev6fEp" DN^+[U]. g,$ r7D,12 třS0TRҪƉ9GP4'1EgϞ5+-XeL RO }#nnOQ .V+F\ɵ=WYsn:j#b;;=%\4~x|[> 5"Ib M.:o\ĪsuSTQFU fBV w]^hDR!2vzuwD Z͇C1U>Ĝ8D3wlսXLBpKȑ9}ͷ0K#lJΚbQf GPl\Ԉ>̞iuYUfε眯j,WMAOb+FEPy""Q0\ *J4(OD\0^k9Ƹ?֩+0K}Ώ}k^]cswl}8>ۏN>_n3|U1 d "4B4χ0GtP&gf'Z9(d5=9Mi\rq↩dW?p,{0½!͢xԵ&CI# ̙eSXSJ], V@aovxp)BLLs ePDX8kMf44 e2#VQg0HE5)(B.:^Ҏ{ZmB;Ssim/y[wwM_jϼ7}OylXd P;wn>Xf-s$8$ " 1 "<̹V=_9$Rƒh4\ja+/Aй,|n]goy{QN)c ꕁf!b!40,9&9If!̮!ZgOݬN@/t-zyu:fm]|>njBBCRN)A31vpO1HM?.EXJ+gY¡d'`F{|fʿzUc}w^—]s>˾{sUï}'<'W?g|;x>W_gޯy͋U gl}yc ->ȋ"q)n2QJ3p q@ٕJI]BNZb_HE"9-ݓð9_zi IDATމC]n}XOi'!QVd]ҰhptĦ2wHRL >w]|ɯOG'\?w/}7O>o_o^HQgW7\O~͏zk_׾Q7/y^W?w?Oxҋ>yK[ܯt9ٳwJX7Bc2f YΡ,iKb-E+Z0@: f6X83:npxpp5Aht; %]޵ڻgެ'ځA$I!!]TDHVL aL:{g6<"`:\. 6jZӺ!X)w5eeVҎ$Ic›m(*j$B1(i}YIZju2bδ"&;v\ł +4o ހ`/4k֜զC{5jF% nXm_(Iz3?t'/<(7{/(oHA'J?k?]Ox/'n%-:=ܵyysխQ9.8 ] v'ɍEaGh,4,vwO^2<1,ecô_g^HTXX0v"J-R$QRJ*YDH%'ꔳJnެqb j=u3gεs O[,=gGAB:˝nP(4߿@hZ=blKm4Nq}̀Y{3k?w̻W}׳^- lq/ݜ#!漳 Db99LqT P(#vGtVT(yb$E 9,wmˎ37|c%ܻ&?w?CZ>'^- lq֑vݍDxN &, 1<|.>#PHWdg]P[%p&ͪ0C;ӥ.g{|5W^ '2(eaM)QJ}2|3C;&5:UqsPNtj !ID,Lͧ8u}b":*V)!D f UR!0"*<,ɀf-b885 w ƶz->TӧO`oF^$k X sB922Z)q ,"&`"b&Lyw-n%|x xՏ]`V" ZcnzjU9 V $*#JU(-o=u, t{h "CE 0w>G> *n܄Yp ^f"kM`,jD; S .5Z\# DyGl8wϝ;f4y1P5F!-DQű= A v8D)sPmLJ'gjA9ñtUpu׼qbRILAIS]]ʭ4h@-+ 8UWzmnAD H rfe:ʲo{gdggMY݉Gf[o}@l~PI9.X*W6iE<& f7"Dp9UDTfQh-ȳ|O#=-[54ckhf!Jlك,(@Ѳ.vlЧE-jD` @'Ѽ9IDnBPozM7?x7]<{'՜w[>ݚkRGAdj7EVa" "\kڦkr9Nf(pjk7#O]Sǜh-7|ٳ8Lăjν1QxDXkh)阻q1pp@5u{oǀjqF6psk64jhf@sr?"2惴=o"zj]mō-IսYvC #y^ =UeEt%bMkS^ (̅њ x9BD ZE6L&P1VBDL2+.W\2m+Q!Q䑈 {r6બLRWvbah -`BQatb!#9mZmŌFdL;!E@1gwq{辅zZvL}-vƶv2aagsG +#)Nz5v=w9q}M{%ծ;0X+щ1ɂ6wV-u٩URZ)0; 中hDD0UOfQtܩnXtɉB3ERBNsݞ.(Ej3?3돝~a  7wshɜ.f/_)x[/$<ϱ07=u 3b_ٛyd4pnC!\=ĜQ3E8SGЇ1:H4t=ÈDkӴDS^;;Eqkrp3 t}u~8wCEz9kRuL 1 b[@8h f 2|\O̙S47W`,f8R┒j'". bq<uժcs' EyE5Qry=xq㻵%{9-Ϩ 32 wx @1̽͢6D bn Qn6{qs y@`EVLy-=jzx~\~ǝ*"%nIO;N.aR" g6&F37NšYV"^'< ->OwOo{,8?h_3|Q߃# |th{9O_]?W'?x?M |Kqf:p-Z.<؃Q-#07PkLq'\x AGU_$hʉeeZֈck[AU(iK Ϝ}_r>qba,T-PXTZi4U+.m(DzjG| "J ԋG)'f;a&"ќ3ag"n:eaȃ`,  0ၷQO=L}xgOנc/3bjqxxx4 B:VK[Oe3yNVh͢)ll)z}眝ؤK]EE<'H,2u§w~6NjLer>u.>syPURBLci>ڬT8gIId.JH3RDrJ]~Xr ]dm6qVe͢Y )Q:bE'p}e9q%yA͸V)bN,9/ B_7?u\_~1ը72vW-~Uxk?3{ȽCK?~Շ,^/{6װ(_>7ᚿoBg1\k^ٍ=8N؜KK9t099{4CkG5g'Bqx/S?x}VJ9IFGh`ó׼!Ы?+Y> r&jԜsmN81f}R`Hn+\9ORRrʚQ<֪7 V*I%I$Sx t;e Nh nE{y 8F(.Z|S|_UX~-.}~E'-p0 6>rE_%X> -Kϸ  w~yx*ns|)߀=w{n}@5@@bDpc!5lkRٝ,f-6J}ɴcV+ ("adAîO]חxՏ>qUY21Sxd*^ X4jNʵE$ ED8"BXHjNTWi`6l6R5wI;wCgͣuNY,O9q吗k>tF7!T 5/W=cw(wVi'~˫+탶xş?t7_~⎣|+𵯸Tw~K/}m~.d齀O~ 􀻞p-̤DBA1`sj@ \4$@g;}zŶ|w|"2 7kPrb' D#nJo/0S*-+N)jR8(`5sQҼe}x{oNW_y٣RW#"[2n=kϪӥXs<}Rq*F!ĪN nb nWsgt{z9}ah†>Gucp5Z5f-)TWm&Bm-~׾KqŃve]3iZΞ;}׾=}׍70MU%A`aUϒS&a֬DД45gHD8w)4"B\e>4 2tR1 IDATNFthZZ]{ V2a}(yT6Pbj132%4f#PżX9" :4ف@#"h'q]ǩߙd,nAsA]JADFñg?p-o|ݰ ӷtͧ͌!DJTEU벪~!ZF7xsNYUAssNI-)3!j)eڔjW**)0skͦ1CQDEIps~7 rِ m~##Y(KjMܹjZ@9‰̳GD8]1`p56{K9>p9OQ4)f͍5Y2!q6۬l4YaV" 0R\y7~6u,UI) AԈH7 Dh6\ĜAp'3 5b2# V,SBMɣ!)@RSʩLԦM4BbjafaFh;E``'&"r &r Hb 4-1kZuJs$ABI0IѢ2DBШ #[soМzRL62E0Ԉ%Y#$PP,DDD, ʹt䱕ًH&fEDBmTEUUUyZڢ97]\ WFx%āf1V=)5i3)fF3&K JPxdݫG;7` nt qԠ)y{K",R8 &Z+m7#Q1a`դj7/0z,rD,df]jAIDAirQͦRiS᪁*iNXR"p8PCRևf܈u;{;'.Z,-fՉan%Ubș>70P "fj ` Uq(:RSA[|̪pD "ќc4E7"Z\=#!fn|bl86c"/)| s -zRtyhy}>fFމ2n +7pqvY)0k_oǎM5C@mm:<QV}Kʤ6Sݯ^h?vw˝~X Iztu@s4r56{tf=ȝə . 3DZb[0;,T̮`EP%#RDc6j07j0D5pW}O1|$)FFšU׵X6]> O!ɚfha`"$"wyvwN^ku:` ۯ݂RT b~8uRJ .G^kܹ)0oddn14e#vޢnXVY',^[lqbdw͚L4rbOAƩF"eԁR(FPAP &hNN1TIu2XbX,HB56 a5" L$ƃJu4223A"#?8)433Q2k7hpʕäJ≤ߏed$<H222R D(&Sac[j?|A_~M NZ6Gc"&g_/[<(-df_|BlZ5m%je+..hgSXjiqi>-*).YWZ_AICr9:2@I4$ aef$ډ"j֪ZX@ YDAr$bDDc V6)f2$ ä,eJk b-k MjZ:p?,+)-d,+5WnמK,).QPZڠNXQ@ k֪]gmяB~:MQRR0*$V@&aĜټQA l%=lh5/ ʀ 32-sd'K} '_bkW)!P\Z{dljd$bMհ^ &9TmHv8vܢY рIaCuDd`@U"@-a UT*!e+`X=f߰o{JLLlLYfe"ƈZ ŖP@T/M)K߰ ѨQLu>ݪ^+--]vN m*S'a5iS^{[iF 5_~NΆDiV{mߘaf=4cu4*(NB~ JEA$mn ZrjXq-4,KQȉ& kWdiƍL2\.?SuNB9:uX]=eˊJ -1Ƈd0ݼ mZ$,B Y(f$hb{b x DIBC CQ EPTJ%EBK0J?̬V000VE~9|K Ȱ`ѳK,^@}[$Ba\^zu|%AtZ `5[U;b}_o9;K/|z{}3[ys+:]#r#t:gܘ#8̟jٷ^F2Ҳ~Ve5 -Oshq>pyK\3w vsNm,xiC>&3!TY?vcoֻǯ}'y٥KALIDAT =rEOGS7b=ܡS_.fqIL 8GO8s+?ay̒,U_^oJJVY|vu9J~*'zvy.?_+?ݯo =:uqѤDf2DzᡧХc^'y瓟W¹׏ݭKnG]?jyCU &=j fOGNyNޅ[j)77WTFrTCӪ$Ru )1) (;|^Hl|k12T;~wt̟?vmm 5EO6"J!}Gڢ4g|[5|+6VYaS.zoK6o|qо>_)[vNdw3|pݩuRG-寲xN7MQM3%}9?;r沍2];o7M_ɧ1#lƈ>O(i7M3gŦx|9W*&uUӴƆT,koTԣӈ7V.7߿2*+w@ϟ_H_}VW_}bݻoG>[77&*%;;ea|I#O/:~WzI<^-mߥbDyG )L8EkU}}ogċ+}=ۛLlzsuXcTup^z5:U.ƅN/p % ٪GN#XE몦im)R ʡ>罪{wU}yHim%F'yTYw葷7ŗ%Aǟ_೒^GRA)[^wjYa<@TŊJsT?n?fk'=ӯۣūlQ';1dyw4K߯4mfjp{dIg?:b4zfi ~]/vIO/Z ۪ʺҘ֖"ؐZ-/v#.1<%e_btRG7#0WgN,o){+yQŷcFNɻf_['+VazN<{Kf5^wШKU˱c͚+0%бb\~m0ٹN @#/s: פ[{dg=d70ٵL} &==eydG[͟FmnHU :Xuubu7U٢2:c*wO.>q'n]IX;F}r+f-^Q$Xݧ3\e1hmi"̬Z~ɺ%nYa[{ɟ_*UrΌs;6k=Ĕ(L& W<8qJ>#ҷUc zgKY$}G7$GH/p4ԻI,L& W>8O-ض5TCip7,l=#gz9/4:dئ;gu{o:}νz` /]SҠAgv_Dmpm j5l3`RF~eInGæ.jO+1O+sm?.sj,q]3o;e [8bʝ3?:9G9ۦ8MzzrgHp8Gvqc{zu28=r>.]ÇV;9o?6;opn<1eE)oRep8vGV)'lyN)/0?u<~o13J?oϽnMNñ?zɧޡ}h[>i*^Ŕу{ٹC\tp˙fa?G$n7KҰU߲xs]zɨ]ˏW*Ju'ԵE)^j&CĪwz ]:vu™w>iy*8XiM5jbnu4̞<{V܅ڷ{׼cNo?]9O֧*Rɛ[*.VT¹׏ݭKnG]?j?yN"< o^qؗlʰLģ\3m9{]17,e ;>?D k_U\J=͟6K???uP6y{xFz*VvSZubV)o\џzi yϿ>w?N9c|;SYB}OV+*mԡ_{ygh_(v /GV5{_ofknsu~scRⰣ:SPƗt<>/Wa]O]vKaZlQn.3$ ;jHU`W/ZUe/3(a}F,}לڵ{{SYMow68k,tSofSu4XM5j:UvaAL/Nnn(QNk׮ݏ b +m9%T4ՊJ;+[JظSUV[TL; [nXn݂ *޽ , :nĹ$בe?T+~tPv7߳ZVU12gDv1_;uqǘ~,^e͎OλY~l~YK{&MWgaɃ`j7ըU'k G\0]*51Z_$SYB}OՊJ4l_˷Z lkL&krz&)z?eQŷcFNɻf_['+VazN<{Kf5^wШ 2U˱c͚+0%бb\~m#/s: פ[{dg=PvSZc-*JF,*^ceVV>(Lv-S^־QzShX\`[\].>q'n]IX;F_pŬ+7ktՃ,<--[$]+/Yd #k Lv/p˂c/sKjؾ_Ι1sΗ}vܦ~m+8e۪ _=%Xf^>(EWX#z<顕d'ptKK5Vf5muoDe=a5 >(RnɃ^\`݇#rANyzMRϹWͧνgS'^隒?+8z$מ7 n[UPa^gF@z0-kWHvkv==6uYmV{ZZ9kOuӷUcy؁_,+lSL/@9rvSiefc 3{FOޛT3ˬd Uʬ?:9G9Fg\9ah' 7Wce:v:{f͊|'g]9 m5Nl|)s,XpG?Ν;G%=  ''wUÆ ۥZHrՍw°}Ԍ K^}kC%8v^ܶm۟~m;x_pw5#{]r9A;qHgg f9r_7>#Gd#ֻrϸ3.w5b]v̙3gN:W񯺎ccN P~w ;#H4TTvɎe{b?t__2ٝkmsdWMv؏Pgwycsߦx<^sO*{dxuׁ_]%NjX|#ιfK\z۴=}\9b̅oZZŻs7K*<ϯJ?)Y:tS|ՏgϞMjܲ-3MKj Sjëة kkĽ r?~c[UJXi{o٧j~,?m;hz_yEW]o?00Gn~3S. ͞z#m(okrJZsv7 Go~􈫧M/;-}9/ӷ%?]3>yLsss(YxZ5OmoϫժOV4Lţ-+1vERa;?x<ȳ{7I&$65W <瘆ٱXvJ_yu6f]r\8z?/m< q}ʄ6<o Ciwo_o3~|@g87t/yǂϾ*3T4LР;V9~Rzݳ 'nyzë:֎=;El'mO ?ɂ~84~]'bEuW-"6};^;C}3A7T9g]CtP珜tM"\vx嶧g6;a}o`YB*k>P3O2Ue 9 <+N1h64yYB,2o}`,[]}srӹ}K\qUOTLE rI*^*ո%DA}OyɅĠ^%Q_^56n3nnbV-~j"<5^vˎ(Z^-{:ErZ2/t}^Eiph (/g앾-3˒@P8}%z^|cy _i2!W~m>d9ɈA6Aٴ9b|lM{-L<>ǠҿJ1j&IJU|L4U4~ZvN*۱R?6ZgSj]Ie]~_27d[T rna|㛏ϬW9O}jM.Nm֖$%k5q)گ}澴8׽tC+xӢڠWfmeS:4wkd s敧Y~Ǘ6%=zt7?N7x6NyVoµ=3+Iw'>;˘M?R&9Su?l)X}jOϺ!7K*-5M?ͣYO/]Wj797n:vŊZ2=w\>gG|^]u3:}qf&=On//cHnS88Yϩ{IN*}<{f=8jM;n"M-+2s|bcFO*- y+..Ih}SZ1^{vc_rg$}ɕo̸ߡlk?\3i,c;+\6l.rzap?:KO8`v  ̙C=$d*՛ی|~, @RbɽRa (VyiD0nTTTlWVV~!  WK5d[+:A?G[^hʪ*jHm nӚˢbCM-)KeM6#íM'twz\JOJSW]ECK*X%Aa~75Oլo쾬iK[ N&4\Kn^{Y[J,l,SNj`'aH+&r"6#ӧgVnuxykKNR\>$/͝Ewרzn<^Yq.6Z^pJ!Du Tfu*v[~r>Ғ#sw.?w%hbXa K] r#4&Q 'yINܰdvow6n)?;.ك H!G5)¼͉$(@k&,+uMخ"'?uT 3ɯK)/̥vP'(+PU]KqY9*be|i;E ~yҍvS{s%h6FrMyjJ rz/u^zhhjn^˖8Z32jqshq "fBzؒמɮC_1yWW1}tx=uM%7ld$#UgV l+ˠ[5ژk\"rdJ%s9ɔD9䓉Drej̽3!B԰ipMg24WaґlV )at{XMءxiMڳ΢:كƥg^s-Q|=Z9M3Ko:1s_}sṀgfI9ȱ/h~+v%jFDpdO˛g]qG_?Ჳ`Egٷ[^HYaOzapUgs~ԩSdsUZܷ;j.- x}_MW4yW^N soVP4`~{<>֍޺3_Z#.cgNm_\JnQ5՛7גp]k"VlʥX}˸?)Ɔ|wGZ=ݍCoI+tw݅is/σߢͯeCW9mG:mjo. U]ob_NDr Zĸ)?C=/Z(U/%_oBgs/-0u jz 0`J ;PdH}7`kIゝY~[RU?,N_qtf*EBÑb߿?y/??}GCaF#~vѼt?=nws fE+7n' [ŚthJuk䂓(f-IHKc-9 9l5 rٛJ6lhf>n!i.ɚ{,{YhgO7qUTTd'z9_.<wݞ @/bԀ 6 fWsܑ6,_NδSrw Eq[0/Ɲgr5,cGL{}W3%:uj `pl!X* y+,fSB-,~Àn^KOMpX[dU3&s_F! Q9Ԯ^'^6q KAe9iT_PHH]J$ZH+ptcqz9L;1WCLQK_;+o9-;yЗJqkf+߸Z G (TWݰTi3+f|"GZio$m+"^X)]cu FUK\% PHe"wdvMBri E@i!D|b(Ck"UHRv"+^khq Bax<$B, 1M`FȐ~͐aHV5RNw~t=|ƾ*0LP(!RHi ѤS 6lB)Qx^0-B" R$btHP=& VAkPhzUac]iXb^3/H Pnhd W2f: Az `DVeD_jmKJ8c:p4T.m{}h%PJc>Q7K E)d+p)%0PY9.]LBF#Fz*@H49L~ =bw21?R6mv"JbY)RH!h[s%(=&-EfGS$-٨DJePv:.xQJm8J{})[S @UUY1z)yBu{>Kc+^nm@F=YߣOhzSSj; ͯ7TF1b|a p4| l( n vfbJHOUuV!Y9zKU}J)yT>%w}3@Hiu@^^DJo!BV_Eo;25f3lk#"Yr;c{=UOrc¿D@l4rKն=aQ1qOi_-B#1F0WibqB!zL>TWWaRVVF~~~RSSC(_~lO$F)))٪ڰa]n㔕n:U Buu5MMM~_,}b"rb"&ڵk(..iZ\4M*** H/x꡾e˖#^d+}$L4}[Ш(Q^Aoߡ#)95N\o!kZR0Al‰W~¿aZضM4iJ_Ȇ ;I&D".gNNysYt)r&Jmm-fʕ+8cZZZxx+\q)++Tj.)-'^M1LvS_E^G_:^|%Ǝäv4TŒWg0aƌCIIIv;뺬Yp/9lSbI//Amm-6'wCVkjUlꕯّS|-E0tl : FiT(,$:S$I..bΧR:֮]˿_7\fϞ]Xh!/xGqQlJJxrF{ٻzaRqSvz9瞙Q7i?=eY[tb'rRiVZA4p!3j( )-]B2܏o~SXXu4+_\˹'5_uR[l3EwGec &m& gyX["er_\~RMoXQFA0uݎWx_A9c@ s=Ӿ<O|z_PP@mm-D+VڄD[RmePYyQoה*FAJP(B!M)EDQr:gf Wv틉DjcoϾ> .D=r4JO`Yhj;sSS555|0{fKƈ8+hmiWr^}>9dj ~6%Y~7y_k֮ w0x>?b.eYnfky?{᠃b )--%䓊Ҋd2}L)fȰ#Av+tJr$?⩿IAزxu%yH^3<{t/k݌P~<z0k{g]Ky{nw\aww}Yl6מ{ߔ)̚=kS*/)ɾaȾ~`~BWʶlҸG$:Fw.\+æGTmVN 'K/AعNKT:x2H^;@ eZE^_&}6#Ǝʯs__@)x=/|'7jN}$ ,XgmnӍ4/abDJwߠ"Rb q߯˻vifPA 0Ncm>xF/04DTje~݉Q8S°a:d8 8h]|VC,l1,u5 j۾8X'lFiEYZeTxe=nlOBQh%DEI2pM8&Lv],-$*E#LQL⾗s)DcqGJ\ ȎĶx3و-&־:LL%I=}^OOsZ҈iөZoo-cƌeqco2fRq:Nw/ۻ7˦S1  V1^-R^}1w&ٟ^@bਉ|02bGE*bᢅ3yd2R v"9\H\VUPߜ0lc6TkJh1!FRS4͐שB!B)/`Gfʮi pE4J+T+O=W/dcTJ;ԯtk*_zOh^# Pě)J D$MvO{Fkw Qh3뚖ՆX,"8tvmOڒ *;}ݹ0-f/0:)1 Wc>vؔٿ#̸y^N`Ctc$R2LR9c8Cx@LDkMmqnNz 9whըƱmkimKuضc~޺2%Eyaִ0}[T7o輚RiVXGsϔ2,֌'P٥I^SY?#_9JjhmIzTHڒ)RV-$S ix$.t3RLu,t1M UT_+^!;Beׯbبq<~M^GN<؛Yf/ hnJ׿GjHe{E-ijlcժ#ymr1 I*W/b@kXr5b&L3g,j֯!0z]?xg֊&Ƙ{`(-d[9~ XJCS-FՆ֭!/gҤMkϱޗHKΟ|=\bt*_z8Ø-#Ne;lX_Oˮ=AѮ}ne.LD{Jp*v5i[Q5%p߮)q!0Yz%sW0h` K[H5 ,_V`ZIdἏFxH࡬)KIg_ƺ2OR>xGfBCc=EŞ0Bԯ@v4惷^ &DZxˉRÆfDzYծxgBid{)-Os͒>a$mT[+8)+sᇢјRf=`R.b>\rE{yLuE`ݸk8#j`AHlR LFPfeBV#dJ?y3خ;c_uG+A  q]~qG‹# o6˓ri3 '@l2wTgֹx?s7'n~hSQ YWCeY1t:E-A*fLTDB{)''jBPZ1{ʚ>]\vͭ||-[er 9|T] S[SÁ}k?ǂfnrRA >z~KPX6_ IȲ~Q^^Ƈ--`bq4`"uOXt >P[O[-ͭW*0Lf:e8hllF=_^^{ͯu3eMgw`Sbmab^q^uIpޤCxwWص[UwMϕFww\6)'H茢"N? v>S*%1l@mӐGKЖvyH!Xo1Zi-`兩sX`舝~a ߞ~>a%ڥ~ZK?%/dCz&%e(W2->C 8_n E -a];?2`0%7?B~A!Uz*[U+WQ[ȢO#4 9#C~q ~KY~iIZk0rK,~i=܋w߃gs;nl "f3rkSNmL~Qb)JmL wx8 7fx<}|S..u0yC}e.H$(-)elr$mwc!&-8su)jWcǍgEZ ?05|cȺ5H$ᛙ$:'_;GQq9Z+e(Ώ||p >GwFuLQH0Kw}%H4h D)pɤ0yP ˡj*D]aǠq7I,'FQq,N6OSk(ckY^^v ֚#Gr 7/0zMȷe)‹ϳNc 1o dü{ZarsXz Ma (..kNڤ@4#іf!)~ENN']R")R)ϔ{"69u݌Vn4׮'֌ V 1@(v)))aRxILe|e$Ӽ3c¦ɤ=`'p8D8WF KC]=%%yTWգEQI)^o!5KQI53fnPVҊ 2A 2!$~JgОo9Z{ aZ&;onr-FJGGH$‰'|n)%%mg@JI(?|mlz^='ZE"?5H1 ů+228{iii4~WĨlRx ^y j!8HYd%eg哊0q s?{BUVQ#TWUR?0FI/.9Sԙxa|x<ʺuu`Xb5 8¯6q̟;Φڒirٕ4C 6‹ Q!CЮx9/\(RhlP҅qsm_qcb/}:. m:ly૎l@kJ4p}L?Gah\`}"ml;łysYb5s e(0(AqY?Nh-u 2ܚĴ"L|i ,[IBs5K>]UK4x,؃Lv@L'ty|Y/f2f( Ca>E E(&DG#bqSR^BǾFJ'drQHp_E(R @ǀ3)e6BJɄ2xla/btiaYa 3̬?6)eB +NSJ C4Ѭ>|8yLâD4b%Z<&UkB9#F#:KpaG#ڡ!Gvj=0iXJN'?q$R9fAN9 % ²%0g}c=ȭOV/-}p~knr!DjgHRA,xKmZaXa=5v#H;e=n B#Dm2xAn{2q)hGW%GJ! D+@zZ@^Py{GżOFhK#''H8̼aq2yDu I] 3 ! 9^h4mfRzf%K*WVĸ) VAhBD~IM?_a]}5O<ė= @r ø+ '%hŐN9뢕^ߦ0l[F"^ڠ΄Ҹ$v:I* E 1^Ui/tmfr䕣f(~IUi!!7vE(<n2ڵw60,|j @ģzu|EV ڤ$Z"rp--R6H4Cg'=/Q0dލkQNj>kD\Z[$[kA ;rxJG F"ɒEXr-Tn $iRm (Aex7/vGnd5\Ø1c7PG%>v? x=|8HJcPʑg3ffhy?8A.GIkhx#ӎD0tikYt8 OӪ4 z\vO.obź~9:nh+0,kij5A2I,\zZ/ָDFkKhP qFR" Ë`!= *BaoLaPuH$T5KbhE$j YDca,2L sɏ璗[J(\!cQ\\aXAMM- :M3b` 6P50(:)֭]Ccs \qr-_ rn1V~t4C%8GtJ3jfwŽ:Ψo91E+i;Nԫ1GL>kYv6pӫ/JdwOyWc5L@p*ߋ#K"tZS9Oc(F!ROښ0 ;p \ƶ`W98H0LqYdop8JU(,WODD" ii#p!E6> Jba#SUbhnl߀A5[r豔gaZjG8JdjƏMss#V!^ 7kCo"Hc}~g,WM˴?gA>д^k>?9\s35$ۮo<&00@ݎ>-r!|(^/8j`e `!FŨ9o4J)dE&'+C:T )\4t RT ˔B61LT2UB d2A2D„CV+$lY0>^Ʉ9\wc $ڮ£o{G~楙r?D *8;póM:!hb'qmIE Wbzĉvm=x]woÿ{ʩ<ʮ㟪;%@ (l# 0@ ;a_eMv2AGYDY 4HB!['^w'tgl#{NnUUFUu«j@mNM"aF1*fX0! g (DE$Ӡ֘ I4B<# s=n a4ގrDy'l<Pbs{$ ifѢE|bJv:;(Եʐa B<)yq_ /{GPIDATX2vX}ўϜ9_&"E*LT*N&;8F'Uu(C8ux5em>|'V kA}jF ) 0$"q8Yku5=DUO8qR&jU"pyKzAcwf=3jiijs]Q6A ̘7Fwډl5e˗m`2 {mwܹJjq O9:4"Ec 1=L0ɪ$ *a5Ba(C.!@!@kQQjLʄM)@"52Rr5b$ O='ZZxY'[ɶ gΜ jB"s_JJPVQH_N1E)aOJ)Y;e˖$OFc NaLTe kdibK48'$NR)S."r(BRB(TR1"RBkMTGtKKe:(V"1qincCYpBmƇ%Wgyik3`B:0CJdUlzmL4f~&&8njCח}{} xu BFcccuy>Rzfa5ơhVH)PJ'jLV.S480VaJ$Ruw{ZUsy,[N 4R8#eĈ-,ۜ'K7 C9dֻsb.#J-\fÆa=/Qg5yHb록$X+Eg=M63 x66gڠzosѝ}_/;@fU]I4=r̞ ~Cs~gro4nL{=C%.Ϸfxq/_z8l&>WŴ2h׵Q#Hc"se ZRrc$ s$RʞЫ:H!0VU@[GRQR=)jE0 րq 8a$.(mVKP_ȑfedY^}Eo9vutm!MxVTIWgqȮn&/ $yil3ZQYaJ ZL b <~q<N>pZ29^&=_t8:g?gIï.nK1yI\vkfֳlc7y"'c3p aܸqL݁c+zq՜tDnxxV/F\O֤us5NmO;W"[ߺz0nbn_Ib~j'ixގ\x+ڽK-~_@cvζkoAxmSiK|?nŰ\߱9P,-ןtmQ{!)-mUG enQwݎw뤮bFa`I{,HC䐌0A {cl#"Xk=FcEgW7Jn2,L t*"~"y%]%tmqבQi{Io:LNvu399B/iSڐA*״#"U"dU0YjeP:qt+{XSUl;j et?rWs+\WNG9fC[<0栃ȾlA;Σ@}]=s.@ o3?AUMO? ٖٯ{2x/?%w 9.{ʇhĞu!۟u-Oy=w.Moyٌ?`>UcsMhngӏN:=OӲ=eK rkG\r^iumXs<[͉~UG^5gU++ArYENqesS1LHwwN,`שo)L'0eaU˯,Hg2O9mID܇=g:ss{r)oqMz:c8zIk=F*OBrȉ xIQ9rrҞ1W?fs63.tZunJ8~nV(?`s9?{,gUU'A쿪fZِeʖu 4姝LEُ\;mW4~74S8ؾf Gr9WW};v, \rJ/i8N|7<]Jt '8*ZK6 p9g.^Ub@}*\a&d3< @za{~߹c78g,tY~;+οilRH`MLTHĭϓ$*8,T]DrՔD8 B,F+r)rD yKeP/`"!eg$4s֑dPa<8Ρt{ٳgckpֲ]yofIzׂ'/9&=3Ed0dؓ˾wzwcǎ 9+ӷPtn~ڜZHm'OP1ZtvuV[1m]]MMMc& YNCcuuA@Wwk JU(Kt._NCcJX!--dt*hPZQ,1A"tTJTJ%Ѷc] |aX<)=vu$A.fQ %C7>a͛Tö$ɱXJUHbУX," cve\Xag5eTtw搞GlQZ MBU&ka&DA\Zk:JaUtvt[hT>%˩T" 䉧=Fb䈭I6V n;DSc m~P=ȶw~:RH $A-DqzkPq-%9bm)ι`‘oL«&ZEX(|#c؈aaHa0C 3kjL 3!^}- j BLTx,x>Ͻ<o/|njM\9s9 8!' 38b7s)RHb:0ȰEk&L.syx"Y9em4a(kZ4̑ 4BC3<kBӯRHUHO!"2ua$!)$.*[k1# DCkv٣A'(W*A@xTCE'iiq46ק#+E)> q|p--yف։֡ 6I2H5HVzRDXx8g!RzHc)<urIޤTW ѸR&"pBbM"|L"HH 1 q@--| $ݕrr8XpA J"EOcUl;n!cGXm + CIeIN’ CX1Rz$! "lkb)0.'A $ՔGaF# !&{Ơ 'pXhLFՓ~P(Q*.Ʉ!aG+g?ttH"ſc}zj)RH?Vy3xUIENDB`multani-sonata-bf88fdc/website/images/sonata9.png000066400000000000000000001211151500342040500222210ustar00rootroot00000000000000PNG  IHDR}Ko pHYsutIME4vtEXtCommentCreated with GIMPW IDATxYm[ZF;\9KU XVqd`KyQP#Br(BKFJCb Ccݭf37(o뉙b93^)Mm(MMB[PQ0 Ơa1ƦiJps;Nf Oe.2JZ c&Rȅa892/V9Lm ZuoK9;D@CϘ+(apX"!i8CN%uW\ٙ-6k}cVr%f)kqywX0@"jEZSmX"(rZɕZ&V+3̜4!frZ*F̺VR$gR;rc^eN@ JTUH+14JF`zlQJMX5JԂ1l78C \ЕL&dQhuO1csvu  ZVBkmAZD3dVkDa:[F-Z#.|UBi\(%O+^6k"E (p#`1 >|y@(r(VRz$(1մJ1e9{-xRTCƑAU=Wg,m#8ke>**rS'V(P+UF)R ΣrȬ:b&O^I< ~ho6 F9Pn* z9qOkhVJe haf959fZeI V!0Bgr38CJVh8gЂVX k;g;.Pi3VH6h(Eߑ Z-Q*EpК sZi\J%4LV 1XG)8iǑІ~nn~U)2N(3! `,%Bh(D4 yuJo >"+ސ5@J"f B5!k,UQ쵓H마61MKy!RA J@c,ƅ'B:R"D~J{DlAr=mO URLƚdmP0/  ڨ4 OѺ>v0MFmTrJ8w'uByA7ITT>y[b$WDI(Rd0-rvc./7քyi{!Tf rKrd?\O=mlzF_+%|thUO* DlTa ^ANݰZ]c D.޳quŗ|ܦ88W|0)b4CIBm󉬻G \]Ѡ$BZDLF;Gu`DjFh !rJm0GDюznCY8.DMB; Q!fJfpqA)X"BɴJ@*RbimRFr"%ZO҃Q"EجqcF+FY9I%TJDIuRkuq+B̈"WĠ,N(!$bBNc8Ԛ8CƍV+"7%D40%B*, yӎ!J1NQ4h{TcYȉKúeC`^3c<}qS3F֨Z9;kjXKLF>݌ rlWu}w=pyf?Wc Zc oX<( y!.I^FY.^Z 9Ue"6N4h\mWEg= p#d[Z' g OhRTadD d]61ct7֠І\ُbŚGgCK>'UYw|m%.Xxte>iHĪTЎ%2E^|2I= -G͑Rh#9,\S3k}="FUɢI:;1q{s:o\nK;b=%3c< K gG6kF'9o am=$1_|8sv)LԮDjzSH7qM_z+Tz٬0 'LD/y#7F.(3ӌXw!{hĈ=0ψljXA\cȕrB Ƴmkf>)ējᐪHsg% ox)C'bfۣ;_!t-dDsu؂'^Z _uaK<ʶNOY~ 1C QVsee!%8Ktv% ^(f8Ј6'Ӟ0=Q 4akKɈe5-cXf"w3RW)/|~1Qq"K~l3mr"VfY{ :@ -aSu*4ƹN Ky{V["XMo\g>V SD $TcTM)BJ'( 2-h=ӈR-ӎifag؀LX82PFQ2M(U( ߑ21{n4BD)30r%ZK:EUC*L3ZCcP܀<-vaXlPR J]QQvo7d@HGJ'7G)r`) ;Pi 0rr kyhC+%.hOAs(nN55Nxh5o19ӭ q>aɊ] ak״X}'HׁfN۬jzP%>4Y|vM.ZYXJ&)UG*TŰ;eAݚVۣ`l=E<+grb(Gx|_r{!t9b{*3 lVPiy")q{_u-3S{B"T oQ"y9%gRY`c jM + `<Z5ms&WLSvH2^m3^pu!F1@n {IX !*pgu =!0fY"<xl{cZŠu{ȕpKL Vp'Uv#\P=sEyta D0خ2b-! b K02 H#xaІ{JqT/6<-F,tJS-,ׯ&yTV k0 coey&(wLT;";TOl !c=4ʁRqBО=92R&wΏ ~w._ǟ־| S*(#NGHI$r53&Dpa4Ԧ kzZFBʪfxH1Ma )bAPn hggO1\lM|b4]ə;Y$GS302tA,p{K3QPs=)S`zT!AmhKoQ0< jcf9&K֧Ćq[_:ѥ>Ts4Z YDJSug\Q kjyE˳˫b?RUMY'籶RJ29eYR*czlvXOAkٮ]'Jd yZ[ͯh9%e +߹֊1R==l˷JJr.9뽵VZ˾s&ڨ}NB*b&dZ!%Z$:يTӌmw׎EraX_.G^4SlBJYf:C㯑bl5ӄhELWe֬;% c)`;#"dUD qG穅i~A\jƮtkZw߷}zݪqFUJi[// 6{` U(%y|YJ))%tiZu@lxK٘MsN_mWx{m/nl=%"f7?Ͳrs-MX׬m*뜱Zkq:-x ŪTEnuZ)1-JL5./ vX2׿vϓ+R:z--K'+)F;BOA\sB;LiLx*IpaذD+xs}PѭlXut=7L\D0ed="'w4RBN6`<޽à:S4jFZeeM~TN=;W3㵴Ku{צ?*MICP:R7êZUoTmfHʩu`T:ެ~z~|=yr9vtΟ[5tr&r8 m841bjمR*Fc{;:EkX͗~ LL )*9LXMa-#JR V-JjmD*,#;}1R.cEkƣ QT.V􎒩yvk7V~G ZaNбU?~Yv,aKiV[HTZBjLJ)Hfv_be7!P2"FzJaIXJScawmSVKUI- q9V~z0U*-UZ6RRy$8g(rۋH+5 N"4(Q#hqO=<NI[²[ aOz11զcMֵ-VfpYcl3|pz}o'o?窿[_t=}᛾c_1͗py|7^-oJn^ۏHY}+RFc(?dwy^= mVk[9_%L<ݞ-? œ mډㅧ8L1l Xw]2R!'.#0MZQ+2ĂR)G;B sBbaN kr!dфia?z!F6=Dg6k \ACw2giOP ]z+R[K8 Vg(Z -˭foٺ8ZEkmV)9'b*}WSW:y/05!u.夔6ڔZKN[닋͋/M5Ua?\i 8sJkES:\];o;mu6/EN\˿}of_ǃUO|~}_=?G_7}۱[G=iw?u))1ͷV<e)RhiȕQshK*( SwlSA֨Xoٺ~ x@+g: ĜoaFkmۅqAkV!S5M#(;XƲ̧ҹsWwwlCI cJVCG,eE GbtM+Z&X1[*cVL6RSiYu۵߬Tr͵sJ)"hDw1IDΕw&b̳&b㧏߫juF+N]b;#] 1ɴAHIolsl{Y{4!W>/_(oS>HeOԞO| _:??Ǐ?~U۾鋽VG~!'?#޲$~On~gݲm+~⧀_o~ͷvn'la3psB+LBJ(8곲:ä$ юGJۏ4R)KkwtVϱ8*SE4vztc8;ZiӼEb`ɼz(jV80y 1Ao$K DwhvCU,HlV؍̊β,-%7tg;feY;ta0 3>2%B!e'7wARb.To6/tvdEmuшcJ)tIV2/8QEDb,")K8DDQ)I)w8kVC{Ҫ}}R*wƮ~=XWJ4^^xrޗޫcJlֶ8%\~Wó__YO_90oZZ?jw 1@{) +@@_w?1s+_?6߲Wd{bĮ{/z mMq֊핻cٔxu7X!c\s{ v&j)VhLa{h4a됆84!m`,dԌ9)W'mpx[Bb 'КRdaM\q)[P&nPy>#BL#LcVFx ;kgViѝi9.1| 痫(QfeNuZSLh70a9ZR)ԘrQf$KMo5O_|KhkQ8ͻ%ue K 7qj(:R_?0GgCwy'Jl{п/oPI7%7P_o}_QdWy1!PJBBkmpM[$X47^^mm6 6j@A`L2 Mbh(T^ΙwG,իzRno7#F;o!|ksJ#@W>_s+?7Trq.G~U~u?_^|y?ƲsRsz\{Oc8:sJa>C,GD,3xM1 w+u*RT4h#sw)~u?R9~̋>/{o|Ջ_/}1ۧp/o jn=|e7Ozs>S/ey+^mCo[/^?1/{/;_]c>(GIJ4EJHBKܘZŐsSUL;:?(+j+&Sr!`m mtJQ1U/IUZ!%XwhͪG*#c&!1 Te mL+BƐBAH=g2!g\ X-zBBŏXds pzOs?O]_]V#1H$?XﯶoڦT+=L)Z!gb1FimT5Υ,"d$!s}JnDYj40ΚrZUavڍ1!Яa +h 1a-Ґ3OqZ#Zc=G'Lih6ذ qQ3TTԖI֔>LUNjZ2{i$УJZ8XEh< pk/ChjUEto%UMp#9&nY-qa`5 ɠ` hEL/vsbn{`\4FA Մt|Ƥ2FYU9罌ru9)Uca+!"ĜH)SQ*lA(RLBa8t:!OIw;8\-G QRI "9 X6rt S$H!"59c 4iYLXC1\wǨ=3 JIwbݳNdt)EJ^)#4R cfsZV>4BE VI9bLnRN 0%RIKbv+TUT16c >Vfss'gIcKkg]Fi\O29"`cʳQkiVgdF iv.%.6E# g VJAQ-- F5J` ఆiBdZuB1k 1rhnR&b њ;8EHbң_"H9H;5]GSb сeK=XM0LN.D!ܵNAh:L-"9so `HVBSݩ-1iL)҄D )%u hu%F|UjcH1cA(r*!r0PBͧ[1ThMjzr9 G˝wWS,cýC%[P9}EB$jcd +ةK 3(DZ+HRɜRJ)Ak-1Ԇ1 !坃h-cߓ"1$JmOX\'\ct YY@LiƁRl7h*ƑUuzl]AKGbdIiIe{%EE߅;эċ WTHgqJ*at)ƌm};^Mi1f7ʲIRJRʄB,KcR9˜)*kͶ R$PBJ R"N+c GL*GoY?}}Xw\y)G|LIdtZBata+VZ s0BUv~7~}[Dg}Oأ_/Z~pݟ04&-L\-4Rza&ա1!5.ʒcڔT=cĕZʔjȱ(,(fgtHx1#'wےI0v`s9:$ 6%;V1itW=$Ri=D=COaY B=/hΝ3z[!$"èZ*knT瘝)ֈTI&RA*c\(diMU|3A荱Ų2BRdLbg'{ۭ[9}gOO㓃㶞1v}|ڳRrs kWle]ZcLYN!\Vi5?K//{bw<:s82zgqd%=( $fp<$OnOi%hJlA] ӆ+ܸ.af  )=ϳydGrp1QĴa>c>{asn觴 B`!E {0zQI!fcHIEXS6dnbBv. ÐbR!$Ba '"'cDP]X~V'e_ߞͶ۹:Ϲ>hs?ryZXӦ2r)̷6g6wzn$F,O//;+x^l[z?wg_~;|럸~7|Η[>2n4 RY$/Z]9mG%biяs'JCJ)-KSdNZbJVYeBU$'vhܓ{wGo=?o{'>UJoІ軭+7[۵(QWz>-FNeH>Zl4|xTv Gz`,^9u5M޲Oo_zO3wW|_O>_y]o:yS^om ?~Ux;|ozŷs( IDATW_W/_O)ۼx~߷[h7|=v%y&! dѲhQ 3\U"KARBYBZ U=?[tssiO#Y̜T(9׹Ind:c:ck6sĢ [*RZRD[DkFJf# &G'%lbsvԃc¢ m AH%:Bmay1PMSX  yh\hw%DBU)n}Q߿Yr+[99a>Q)U&2iJwUQ rLAcR) @FR"kc9yrZͿ_>#o ?hc7B.,W*8oVO&R jWagkG}׿~ ٯ+Oy_GϺ(ރ%/ 9.W]y_|'^>:*wmݎ?4w}:m /׾_/V+^|-O|T0Dݷmo^h[V蜔NVuSVKk?|tXd$,Bqt<"5cwg"ʊUn?Ѻe@R$%B$%Rbf>CEl3:5)T[[XKNwG "eNybm'LgbPZ C3e̦"gX+> "\`QhMpT|(.')RJR;T y|Y˪>8rN^tC^-{!J dy:+> &3(Ri!&cP"xvfUhrckvef w=;Ee>ؽ%eeaSZD&LU[Baz+;Jhr$z<;tɔHͱ BdXxO(EY``A\pBBbs*]w7 c\.T 5R2VJDJueѫB-uU@n,0ô)HYKJ) 1QV~՝zʿ {C{)G|>~g|g~F}G_Si_m6>bgO^ܻu%/Wu"!1GGcJjFPoOg'3(JM"xT ^ެIG9jڞ,i{F鋬,-A"e5J<մRQ^}Q)UZe1l̦R&cմg(97QJY79)i|SWw0^ٹ{❷Gq#o{K>~LUvwo\fL ҍ׋t)%|m-r݇({Xirɯ{(_oח4pnjŋ"ijRZlv<J0Pa:gZ3΍nLvM]FBb:A-#5BQU$IXrC\BaؘQ01fFc<{{SQYrzOYY.Qh*YfRdkI! ٰZ'NDXE21^TI)<ݥCF,$,bY1;sN9ERtc()CY*M&Әb2LΡRRDYX)9KIVEJ ZcLفT)-*SVݳó7|g=~՝+WfVBM^ɜo^1r>|^_o߼-7}#u%isB*Zfzuw Y-uΖ4ƻQH&ek ei :KcՂe@Y3BXDhAQ5Y ZQOiRb`>L|D(-$9B >#5%eAQPk3B)ad83"5,LɁ쌝 bfDHL)P eI?Pddt#SJB%A!J*2))rU)ONGgMJBIOkk" f\VI!1! RQ䜲/z1*!!~ߟږl*?G9ޛOn>==榱2av;[[nFvyV^4uiOƘ'M(CoһlˑGwKVK1U%>egTsRl ZRՈLHa0 hwd&mO)}F׳q^Cj8rEA#%!#$[[ ٻCS]$ :`R:H3yQؚ0ƨi; dʺpJ9BcFA(T\뒹8(ț۪,R]":ĘsNkZr1G) !T*WҐetc!$ʪp||H&hUUV]{z9kr빒6sR]Cʎ)im'%bVcK]#gr$Bd[ GUI(BTT%94BUbpZrn) i80Xcj-ᙍBRBFx1j%ªP1G!L$Z9IvURJ#yoUS1FH1%mJy߷1֭[Ml=~Ƴnl6+I,9և~>7GS*YQ 4&|L%۪4Ha k 1G&N!)Yu,r_"IOY{g6Espz)5uџ})"r<:J: .`+Š;y(ôH-`H`EdRaʬsF++q>L)xs:hN;)eԅJ(2z7H!B8Es'a{c;${}WΏ}fY]&膳uyUq(VRKʲ;%.co;81+ atׅ?*wxGT%ZXrz ! t(5$aDPJi{ߏ{&'IS=)ӯ,@qHťH̜ѡQ)L#8i) H#!LTJ4HN88\\ pkH6=t^R Dʊ,dQhZپwUa30n4hcJGB*)E&r9!PFe!Hy)QEi n}KntZyΕj{k&9neUYmO{{wNfskcյIqhzR=ԅ.qKۮt]*k |NiJ?qc&\՚ kװVƣ3tA;0B$>4%H ڞ$9#[Tw[7=ʰ*  MM4xCθR7l1d٢@ [jtz}('HM숉!B[c R.X(EA ce>Ej=!pL`" Rh)1FRJ9'HCd))JH$EIJ 8xLq$q˪IRΡRR !>Tz+s!B/I7}}c_'oߙLL8!:S]S)kwl͚)B֝ }s.J%?mm%)}?OVYa#}a1|E:DD"g@#)5J^DyNYE^QD(-W)*k&srNbčհ#ղp]Znw8"9FQHcZለHي$A!Z\=)a &SوmhB^peB!M m(ԻD>xTZ4:75H[trt|2Lv-1JiROs])BI) !{BL*%ʝ By;vNޓ{o} ?O7r߹2[[8qp}ZI(!lnηvWo֯=r9.q5mcFJ-( SjHEtR1kmsc,SƈP%4+u=D7( Rw]:)\E `tdMZB24F"E)儐HL@p4jU1|tlo">"ƒ`T ư hJs@iRBd"rYB (ϲ)(s]]]YkL۵!\,Qm7֥n&V 9sJIȘ{sv>1X+bчCJPO[lon~΍7bks:^jN'lyxrB,LyNjZحW帺%.fBPh&:]*PX  db)38$K䁘bd6+ ܘ51ѥRĻ0H 1M0uMLɊ( b9Rъ3:B0$PDfsX' H3]8 y>FtGAk|"%Ș 8V纓#КIjIےJFB$G=d%>)R G#Re9ֵ=8\` V׶JNj딴Q$h1F>!6EJĘEV9i7zuqNRXrws?A۟8n*!Q \WnݓIN~vWv}=^pYpK8w $"D7s9\9 P-Fa$ҋxDHCf߆EY]XBd:2 1@ZCPccVUV+C0DsJowgn҇>5ztT:^zMµ} VKP ƹH7oC+=¡NpMPDq4-ƙøO< Um 0Ly0ޣi1E`2"M#nZ < Y˽38#hU"؟& .8Y"B,irY2W,z*ft` bD$E~9`+V1K]K:&MR!:̵ؓl˦io%X-L̜U *+#mEK5r7nT-/rmafZrjܒ>:;uu:\?xP_wֵ鴽u$\l {taˇy1Vˣ8ڠZ}Z%8MaTs0e-Z [ kB*h |xj epG %#T"`J)!D0A2 ؘh=RVÜc~x~.!`Jp JAGX "=ǩ췥`py6(zd.Υ)uHJk}cZ~_pfc/myl_L`G!\b`VBr,dZyܳGG1G//wkzlV@OӁiPm `GhqR+,BGqy*\ UG]up>X"g"\M)B@@JHB! G+w0QPz*m"cj~sٯWVXSAkeM9>Ej])ŦvᲹ}O/.7dx5!8a)׫eD4w΋}W|ŗvq|vB].vZl;cPJ1crlbk-~v)4l=_Ϸk/Oq83Ԃg1)#PrnPrR߽qX6f%ž}d<\elX03hc;:2p-.tKElm8nq" P 抣`q:Xx~x8"+Ut-[8 M hEסi*bbգVX e%P4`F!Lb:g RJ2+#hӒ7'aG0cۍإT\O"c:qĦlVϽU[""sw{Z)qrz眵 U"dHW=wc'Gw4-WEב1qEGGǻCfs~=:^|{he]9Ggǧ8g\ݜ*橀hN䎏NiT9C7nVk]}'FD[ T *!-xprrl(Ǐ/utTAiO}pVo߈>kh)kɇ} 3Z&'15[BT`Pag=re8sڧv "H $-A^&4ݰP Кd*~i bAq5WZilBKyE DAXotrx٣W0f4sYv>WY )w ',U0 WѓGm/؈s4r k\m-X/qurڶ3fL/!6W> 8F) 1hŐP)WFp6+,ЍʴX6a8TC*5m/˝^1mL)"5O;\!'_T4mVx(Ib\K$ #(hQ+?3EpC͟9CrtG b1!p-Dm,5meƄ P .³1VT*3 ҴMe/8Ooy-^89s''F8Xfoq7c!_v7/~oJ\k?“ӷo঳v·}Θ~}{?v1.~/^OGLoȟ/|>h;Oݯ΢i .=+8;dFKr{ڭT\nGrt"0;j ,VyWѡi!@G:k.0%\^ QĀZAJR}vV𙳸q5 BEmQFaDHE#LE쁊r`™i~U6lP*dlK z潛^>nFZOFjH{˛|ARDj1"VI)1W@D$ĵW)'gO^~v\,šv~nongyJR*iZD d%Q׍oV;g_~ Wtdӷ>Ow[O}/?]Ҿ}~|5d\a ,XpPk 88d ^x>j]7dZqɱs,zf߯ma{ VA,+'F6;Dr2`U! P-B~c  al6~}by1ng=^X/|ljCPƢZuGf kGqy),$B ;I1N5kAs;G/`Ϟ\h!>my7v5!2QZw܀RK9V˨9srɬUT}[3/Xax|> 2XhhXf\DYMH@xuW}zO‡~CkԾYg_<O@?osdm||_'[O?xouיl[dP DZQ3GvqpLj3\5XJ-Y  rGGeʍwCe,׍g"ιV%?ٗ@`=GPX""XЭ:"@6wc[k jNޚU߉,h%x8|㻶Fۦ<1F41 ~< W m{ϯ<7rwyan M]oՒ:c-<~yw{\EEy.q6**v|Gˣ|>ߞ|͛rjE3u]\#4 TyXgg}˿5[ 3[kyެ!׿aF.iw_OWFOϾ˾-5@m+j C@gOi1eo0˧0`ưCۋeջZq*6>9ggY+dfElAXocRдpG֧El1CMXzr3/>y5R" 9,6baƶ즒W#(YThh2VjʯOo~޽CE\RXz5;cy/Wy|8o0jDVg52?џ5Τw\___'p\Ƌz}s+ &JsܣS׎ SQ{E^rFp@1}OnE{Zq~Ā>1ۧrɢ gQ T~kMHq##7MBӄRQ˛Mbqy\U" ӬS) R}pͪn繦44 HҪi5è4)碬εq^߬ 5 wn:Z+y}.sFUCd@eR/+~.V.MB"9CT}.lc|1e9:??K޹{Tu~ Fև[};m&u|޳3Gw}_]Y}7}bG?5m$mbG%-Wd>=֤LU?ܧh4*C69yKX*VTзP* c`k謵6:!B׶Z5E`U5,f2cL5lO(T~=o|7?I/|5Px#_'~97>?q*N~Wd-[p`rzYv7hǝsn~*[U[ b %bޙ6R\lkIc$N]֢0\ @p>Xdzp̜&eH<8WMi/fF}Ƃ2J9 k % #GզyGZ"""Qk!UUHD C)3dI@a Dec0sf!!K&%6:ccjg*Al?E9φc 5mkRaYstf. ErΒi*h:)f8y酇ר}Sz_3'ow~s _'BXWW{]quW׆_>w@쓯<{_G#=/?G>œgEpM7M[ 00 FOl y}nZ qS@t{9,Vcu|Un6.m~. sr5MSJ1 kiq*ʘrM%X:]4 pΐE XK `WCj\aPSRUa- C Byk1 E)B X=o FP)B z+ֺkQCVIKY%Q(YEiޘR2Yl#&Tod%9o[XXj ͻߟ>W_,`u D" qusyIU&rGݢ\?z͈{~y>s}~k!ۖgQiZ"|Fg@a >XMXEm4 {g1NjiWހk߅8ѠV1 Se.cjZ8fZ)%%T%ecX:S;k!$!9;ԚȨM0ttU$y]m:08,yzӥT4f𯂀kJd1TUY#u6L¢rϏuȹUZaf4s2Yk8 39ʀxBc9eQnw^ Ӕj 8dsR*yŐ5dETČCR5%;쇗_}x7Q/𛋶W!7`Jp%5,PF>< !6y]8l1G[zIr 5 Rx̣y""5œSĐsPaI+` Q k yjU :aajb0g&"kdRV[`k^Z>I0̈ fPFhZƃyӄ4BqAt ]&`ZCdUaѻq8NDChϕ x3a"8k`r)Դrq8EѪP1*DJU5V5 6V*6vMD "aQ$ k "bafX4~J=$q(]"-w6 :MC)Ƭ4 01K#=pbjZyǔ/Yo\q|(}pz7b6Mw_*5PB뚒*GKLdUh)EĘd%c\*3B k5d Qe:o Җu2yBU]5'o`tl\՜_pn"fl|!wWרֵ^oKpm4Vx gpre0@We"b-Ҍ0 M%Y%Aג R&U\K.={9Iͨo5DkYj0Q9m_zqZK>Xk >kQk! @99`c&c64Ԙ-%ׅq IDATEVH*p|(F2,hT/.#ǧÁTRJ9M8Y(ߏa_ ]lڋ_>~c+cs|]OkfC+,;h%GK 5.rdO!-|.wc kc"s~j*$c|41$͸# xt.sN=ڈQZ4F+s52悔` X|B-[>rBHmՂ4Mn0MMhݽ/Z?|UȾi#\G )MH3T?`ITlϱ}f~/ӿU}o?֙`X}9~~xj缭>|)K`cǟ?u< %&~ѳJ״qG&t XƇyHuFߠk᜝3/k۶9甦"2`XB  ]`&k+g1b\p%8,,h\4,њmlp繨Kcm@u$e]\`vrt%M(6GRVjJ:T{{`;xMt HNs/TGSk k]_jf!Xprk΅ae}dAp%TQj<"ϐ0LXfUc;egV>8{'aІgO"hWNk:ZwT*=*ZHa6 JF}3R-6k4!\`֗>i'sJTLvOUp`CD8m1eXkA& 8Yz=uk͍89ca4M"aB1NX/QU5Z qyCp! ^833j; VMDc8L*qS*D4$Lf 3,l8]P@Kt];R‚-x=Aߣa#>b.{ςy UA+'lЄPCRa k]ZI`:Yv}o~I49;O&ZfC,=J'^1%zhy U75΁86/9/Ml۔3֭=R&[7P:C\y&k#39 GۂJdYZMaŢ2sbTBt{yo rm%P.:NPhuk]m<;N[<4>DI6@j5Eg*0ȘyQ q/`]Dh3T-V2%WMPCU7@jh83taa<0L}Rb1x a!0Pf>er-'Kn;obXe1bDk }LJV0A ΥJ Cs`v isE0 /۫7 J:D,=P JD8he#Ϝ*##+"0 \ࠜv v,MXH[ڤFQ%d 48yFٗ㎚br%*,ΔYp[ڴԦ\%;"\K=oHmA".3mFQms/P_(V8G,$ĹN\$¶9c*!,$@" бv ^am&EUn[)4С8pv(R @z>TcYy--UB`V`@]*=h/M@@\;$C( m؅JzGġֺX[T+BNJ)6IJ{}gO)e(%(B(J)7Lur{L.w nGJ%y^ԲRKx$ c8~$u,Q< cDq:$@1oFa8hBV:Z!(z>lEPqn -eR8)JHLt7Bh Є (^U1r9$Z:L2 hfjMA@(`PJ #J#À( w5!g$q"cplC u~E@IB"prJWo˴xwy}79KRV[D끚8B A>GD ] džaPRjURƉaZqh)$#CcPRږUaR͈T:LTʠEĕsh1g)DjpA)#5Z;ۦ ˣrζmNaܙXeeYYQ|jnw 2MU3ՏW7зq+֍-sΟvmlѫ'E4c={ʕJUiACG6; SU;Egw?^kVk~a+q͵>߽4cǻOL篝J ?y>}FCܶ>묳n||~ an'p@5&XפΝ;KƫsnAF<2}4a5THӬY4g/zyXC帓ݫf6tIOVh2ςDas辟$|UA]ǝ>ᵛR8'3~TU on"8'P9(eo{= +.s^z~NVhtp oKZxܩ'4EeKS|ąi">I)] 'OM Ջ/\е]XO=}m:fS[Ji6Wb94y!_y&;,}7҆.v>Ioޔ 8wLRԤUU1]n}}yL}doׯL@E/曾}_cbsC;l~wY>?yzܕSw*p-7M)O9ܕn[yШ=v !sJ741|R/ et떽+nYNCN3dd{Oq.w| )|)6n:OYa;[g~qyѭSAk݀^:qVO:hC;v,!.>ae'cرN51.jرc'Ͻ COxkcmn|۫=<~~wp}kNH#O9KWۗ>|d~3o}˧9JG]{uf57+#F 6DZ0xnL-lKGtiNwơ7ܿM:m w߼#{;mxӔ)B"(^]f?M3~>uߝ{D=O8 g2ۮV7n5Ͻt]'~ySSzm^}s;K^9j5sm7κQ3~w[3yv+;?Һ."atxA'!٭ t6@XnSS5W:ݿ@^0~r] -e޵Ǐ0sy'&ژ۷=څ҄ M^??|H?vǍ1k;v=/ZO˺ {yw&m^iF[;YIۯ[~ԭط|MMM2;;x{Zk%jyfNh7~?伇zpZZW̝ӫw 7$h5g|\vjz8v?_oҼd޺tʰ}~ PZ+z4464"m~"vww{[Ĭ#\V׺|o7O{]wŮ T8 l,lǕ/gum!ʌ.&oJJ%{Ӌ<5/9C  qX[MWujV (QY53;/ s'[0`zࢋqJK~/}G^}yys0۫VlS]P(Dyҍ4{]}/,;ltˁ˝vKRm]]=zI)!hczB\+y>1LwꛛL6r}2+mkOsg% u\9Fǰ5࿧vg/.Ld w|b\.g6{䷯E2z= ۿZSC\Iq۔py̾~*im^EXz ^E2=]&w%:ߨ~{{s[c)ղeY)%WcmTdi#Gng RxSz5 }~sE݆ یg;eidykXl'|;S>5hұd6KG =97^t.kh(q^MF ϝb4 =1SmO5?N Kz5J3 z\U ; =g![hۋ߶m{v߄N2+|wdtoX]: jyor֬Y9O]w9wڿEyq"s9N:w?)RkuQ;ڍnM;u9K2Q['͘8ySx=c !sTSWe*9;dȐ{R\*;1nDlm+/[jjƍ;'hYIDATuEZh4}yW%lJ->ϧ/TjֶX[\w dС/Z`ƈ{ٶRCӷϼ7jY|ٲի?T*uu={?o݅222ۃ4~WV&J^[+ZiX.w}_y?O:%ݪmz{4ppyo"kJ 7zu4PK,;wx÷~jZ8c]2220{DGnHZWmDjO/[m !Ow̮.0H :pĮ=푅BcQdᆌ72:#1jn~6l dcY!dl =IENDB`multani-sonata-bf88fdc/website/images/sonata_filter.png000066400000000000000000027362051500342040500235130ustar00rootroot00000000000000PNG  IHDR/ pHYs+tIME;/tEXtCommentCreated with GIMPW IDATxk̵Uvu?7> cSl36$Lll Ƈ>@ڤ4TC" %ZhF-JT`8 8 5Gawk]oGo{?~Z׺u+_ȡ1Dq**"UE:/t "9DED ~:(c\]]4:֕RHކ:"$眪:""7"Nf/;NCDD(B!UtwX:DDUUBP >"'E4+dX\csg 7TϏ_Q|C\ Y10i&"C!`I=Ƹuu:Mơ" Psc;1NqiEC!""_GĎ($H09Ӏ3FFU!JL7PaN8>dD!)P%Il1P%yr%pwBBU{ if>m!rhq:IMxOXDtwCUB1q?Ĕ0zЩ*sblҫ#>6*Pf@TXsU >IqPDT',g H8"p[TMİ=VfkRDQO)w:x}U|qԺPU7HU9'I*XQCA n~cGltI\97ơC1s^ݺL5翈]U 8:!*̅8{UU@$q+f`ɫ[CDz'$NՅ$n*: #F< >hz{:\BAsă1 t E tt  $!*4wAo¬u}EDFcc4K1 h$7r9Z 6xZCED7I;;s%p:ա.0:U!L&oCV"9=1@jaCQ1rΌNt@T5KH' *s͓U:Ơ9*iEc)"@D_NL8>hDk(Is^]]6*1F 5]XzZ)UuMsq {TLag:1T`<#>{+1jB">{#Ȥ*C+w4#;TX6bi)at9Efy=9wiH!&j~ '!ruug!AtsZeyd;"cDI" "18.*21`}d 䜪N* ujqI;bv 'C@Dt}*"8M{92@|Fhp 2q s`d'|b]+kA΍g ${1FX2i%p33W4y@x|i* >8#\%V!9^]]S"nWV =m ^%I[hTx3G-3;c n-Ԯ#Hl 2D 0ynyC+|ڷHNޕ1v>]+{Hw36SV bi#Ԙ 'Wsjҏ J @0Fɽ3QׂGYD$5o3{d0Ďۻ涤u97“!iOU#0G |5:*Dι #Vn ]m0x8 vED_PU@^]]4'Cu#N:Ia' pcߔ[@ iQƍ(۝8=@bbH#b ZvxqY1.Jd@m;LD#,@2!+71"!ؐcjT(EKq"NUq'>J}-bXsI[7׽$'r]\o;PU3qoE΁l{UPWytiGRuLQSCznwT Uw0O<`,)IL$r$ Dqݍ]e(-5QD!:68nG6"ƍ?>VryWG"" I1Řl(t}=S1*2}TGxȺ5YT=Fǧ{ B"n` * z.M8 g?7@3$xڅ|iQuD]?oHG^o&y7/:jY ,V>tU(t9Ass;Oպ E5PEp>`5l7Il`b$9:܃C}o)ƞz엑 D_T?-bB,W$f ؁o'I2G3ʈ4"o˜Wt:Н]"HX5v<>3+lBsvL }#.vFZ dXɣǷ Ah՝!IPnUU81[31YQ TieGx^OޟOԷ")8`Lg]r)н侀3Hm-Bu]D|bx-wg j.U>セYQm߯gu3 ӆ+w&a󽹉Q2=*tIa<}I+XPڷ)^M'7o"7$"Pn .j ] ]UJCG,ؔ&Nc/l_\0NrE+ȐEaZ +d(B`ְ ޓ^ 6##酴ڷ WAY ˬ9 v;ʳXoѳ{T?k "Q]oK$n,vonwwd7iK^-Gyhl0@|m=)+N>kϐ(AtM9}H'rCP;/*b6 w DkHZm"2LY-RQM@k] WT7*А8)g3%KX 77(e5Ut4րJYɦ|X~=ͫwү>u.\;~"%WMU+Ks'c T4okac+-9O͍Nr-P+C5;C-Βm Z JsnNիA yq ͖dwĦs'x:DP luwGpP㈚GȞ|snnϴ#]3"9y2^b!)-*$2q-ifޱ8̧i{*j-&`RC 0"66mLf%Yk%LZU6.Ǘ*q_Q$2y:='LD$c(}c KoCF0WJNql]=ff*'!%CfBW% Y3dG6H u q9C݃.ӣ* (j^gG_6HEs;CCs{ُ0XO>s{O|׼N*[ӿ}IO?y{' '~^̏~>{o{9_|l?a\c p8wN`h"4S=4J ׽qOT(>LnÞiDWfTU CUy5YPQ @軎wծ>7`8e\z^r8%yʆGs}9}=-{T'14֭!tUYsDdhQ^$iD0 XV)+(w=Iлlk\2F۴;s$Q?_OA IDAT+?7~q˞q|/ 3֯]ӪcN'ln<ۯm^Y4T䈺j0JhjFXUERw-lK]#QP-j,HQU{u\3_ uG;Uugj܇]|.uO6hNշbRDE#5V*[uVlN8ѽ(ҽ Ғލuo91r 甐aL^&tY8vT@Dۊ#*S=TZP8ns1K2rVL3({t3QkxfNV;4+A7811ܢL2araѮn@-.@2M*[]]FXi!5U?-.]#H=8N !l8Ehc M$v1 9o;\$tM @YD jNO0 'I Ӄƽ^01IL?vft!HxqzecwT+ljJj֡݅Y%~!pa Ip^$ uZ Y*P@)opx7ٝR-nf61&88O64ɀ'<&PV@e AFi`,P UܖN lxJ]ZQ8>$4AiRIZe֞d ri[) I![ڏIYCl[+usGLp/ bs .{iWN$!:" B ZlLl)cshcz]sLrĜ.!ԩt`X-!jALBk"7|(.th- {*(% Nl jdTIԪn/8l{`3l"!cL>UJ07~^;7+>wRO{_)=?Ʒoi|=q#/ggq_/z{.qO|+=<,w 壏'f97[|K󉏹_g<=x?)p'~ڗ9=e}nćzW?? |K^OzSxTr]?i M) G'ըE-Υl2~7"cXK,߲qY83 n|hKm#Dwίdӗhֽ@DT&qnrB /j,jn$X+tӌNZk.k:ڂld¹DeD`Q;7ٿ2mrÙd "ݩÈMmiLJJn%#sch:~? _W}~G<zTr]!Ҏկ) akg=DY\ }yJg,^#!1~?W~箁YhU[$2^x鯐Gf[j@i7G1"֋V+k<ϊJVD+ޑ;TʯnR7Q+JRVL꽇7~kT $M4PJGɅqIKC$U >(WI=VA);s'gxm'-;UW=, !P[^6%_J;jZ)|7Ld8P4Y:I7U n)ٙ JY@rXiq}"鍯P|-boRtw{tv6UrSAbnx @V5(2.[]5eW!S[dG FzdX"5QU^u8񸇜j#܄そ{ Sr{**i)0 !: cbchVnD OZƒWcP T*эK- ֹJԺUrˊ6􌶶1֮Fgb6864";5j,DwuTᑄR0睔2\2;Z٘%Kt" ًY</B$n%qB͞H,[pbH|IY4Tm'}.&4nrbmuⱄ@/s N!<";Euˀ|fA{OT "8=YT>AVʖq:(iL-` L '6>åV(E@a#"${F|B6SsD^M [1L#[dj>qnTlm/+tC [ISDky4Qξv)kR%Ъh1z6Ց:Aȣ,KϺ??}?}˟|g5*0ՑX^3&ChMUZw2Z!TϺxs^w"~7g?Ogo_y]=~/WOY_>Gr];_PD#GY ]j{F$m* 5tthPw٤4L:W!si6ݦYQȥgզ2?Ӫcs~w܃.K'{u=-ͪD(ŠoS=9)ȕyٖ檴x׹>r#=+SLpb4sA\2 /:ua t[%-u,Ëʧэ4dKx@x%91`(bMs|Nde[*Cu#JA2Te itSHr]` (P)29O1dt:r2;t8> Cm1 %hFDUb84k=-YȮ -I 13v&N/|} 4"@a9gl|*0-BOĊ!Rpqu\e&MvBp1d#>;<}V5J" ZĉGΰ O&`ki! (m<4ˈ֛Z asI u%2Sht:ӉlM>ONv"'ron'6O6SRBq3ŒTfs9i>s朧t}:=p}4C>ݦ[z^,@д3Gw3#mۻh#ĝf>O=}"DNAI<å_N!vdu7'>OSΜik4>-ȍ{?Ӧ߁6}AOќԚv378Opt0ft3O4wS<s[xN7t"=l}3trsw7Q"MUr:N6٤#֣c[4ܪh3t:l ˜> 7i>-VdwNNnjF7Đմmڜ /i>?=ښx 0T9眱t:]Úci727cle3ʧD>NSiv:ӌ[d<[ QN>"[=9),9y:S'f$#~grד Oܺu5xw[;a.?q<}c/t|Gx3}^x?_7ٯx>~_zW/g?sw}=}.ן@+NۋKe{|H,~^L_G78Uʐ ڞ紩#13pƽԈ'CAӼшEcD)?NKUp)- c'8G(֭[:dUH`e@vݲ.PѳduѥflV^ G[Jjm0\a&26t P!ԡ*pCUA-/X8 wc7{-?,HJG)D[ƽ)c&t7U<^4JEVqVߍUX")Z@V/RTYRi@"6jKHoCTEa ;JB*q*ۈmgx:AœhlG3,f %8Ovuʈ7\*2F!C1d]ꋟTEw[|t6 \wKbh:ZJ#wxC& p]\V}PU=ֲ*ݩJs:cw?Ev#qM !lZڸ@B{4N2 WI9k7Ԏ I.Ȓ7#.*0mf޽ Vѫ9Of,$?; *b/bw!y=PYZEchq:9s 7 ,d~K%@ru4~_RewYM6[elf[UAZ2!]&ĻxkZO܄Y-U/;Yrnv/`5KUj^6g2r%>""٭-BUީcPut'x~=o/}흌f_|?~o=y/~#~7|7~%2VQ}“?^7''%/H2ۯϾ]t<^hү|ѿ~˛~ yѫ_i'>A 7N^}\zUXU0TKe[說hP`9؋Dn{KP t^ IT";C#"[w3ڣ\WV+[:njC63H`c^ t"pt[oYC9qܕDʁe`~KEBctD-h#?CgXԍ$PSq82@ٲݚRCI,x0V$$ERUTd!ueo(jx"la Mnĝ Tyx}}-@pTG2=rF$7b`6w,|P1FPTdhҼsH> ꤽe,s+4-dM͛#+j)JM/]~THnI=D| 7ua)-soFQZᲄV5ҏ5V$16+' J.Iܧ/vP[RD.(vJ N^N**:D%"튔+k7? u6Z?SC>%̲d眷nR558Z8P$@|{H*Rw 5xel^$)iw:D2ACsX_t'TA֠2cvBh "OPM1ᅜMTlM2Y_MV}DCҪ1d̂蚌:͂AHFj?6]G#_1G"8ƠJ9>h&:GaC{.";kʪ8R=lOXfVb\h>6ܬ(qɈB&v.)ŽˣqdQ-hGBIEP@t[3J2*RkkVN|t)'Z%Uؑn恠i"ZkxGZiw`3[!B IDAT;ԉ'}SʦM;/}ww?Ӈ?xS_s/yGBcO}O㿍ux8-qV}gatz+"IR/6wtL w0U p_ߍ`J;+6:ms2bbmpQuaf_,c`!Tp|dQaPKo:pƙ$t_ ԣփl7Pf43b 3H nlp+6]8ܼ;W9ʣMV F `EBqZs2%%Nqܚ{bT jӖ"b%iCEZܤfʯwZ;\R61iy;F)JRq@x,X\sJw#pɣcTҳ䷥K{lffUBԗ ZfE(d[xiN@GzC޽,)[YŕN;~Z2^#:N"VVp tWt"kMYVUZmRCy!'f1;F6Yk7q6TBkž҆PqjnhC\eDNDF6u|-w*sZ.)w#X˔)ݼs$ P&3xa]XvEnIϬdVh@@eJd#GO_r;T9qPdC5.^dpq5őC| uo$R4=*[,tB⊵=5Hr"N7 7_"ǑbaƠ[I[v]Q W bQ2u =hfYCn鈬NKRNNӉNGXC"kjv2&[&]ah5X<;m t:NdWVO*%e0`j稆0.Aq^ &z-)79,%W~~Cwɏ=~뒴\u.#3*WJӚբ[xך¶U/3᭴~&A8-F11#"t>3KN_a-vQK2*[pBƆnH^yjhy`ˢMGCT+FψMҏ$[=O"J KV4U"ڰMڌW;j 5K,WUdXtOЌ Ug7CDʈ[jǕܮBi7"3>)0VHixc}ߐ͑,ߴeU)TOckp_[Nko-H4 ` )*M0PwH }.hYoS%LQayW^YF+B~F6>Jt6!CwGr.I1)d{2 j>a.6^MIpL:Q=0e͍4a[yuh@8]lQ:: IMhRSUT<#7(EԫmՍG=3"43EұA)1'q6R0AF=&WBDA :rUZ{[qi/xz! # K[qnоqlyaOfBIۦMuڠfo-b-Lq>[EE d/vՈOrd``kAt&̒gPpLT:Xm$>l-e~tQW7ەBS:>{hy|2 Ӕ隈Y2ς]3L҅eUZ+q(75zW Be'mUR5Bcɦ"0Dһ}n au 涰^"Z,fAixIg)4?tQMDZ(l.8u8q}΃]~ڻ~AB>%cR?Zxo\pL@(5 wRNW-=쐎oXxOn\ޖ7{;6NE\`n4&jiUIc V)Vں43V}ԣB ڃ4Sw3*yo{2Ü> ɔH644멏J Y몏򕨎ݫ9@MJt3Viބ*})ʒ7xkjE/hyH[KJ z"f=7 $ŦᲬƶIgT_[[6D W)AZT%6i udM#-}3w0B-7dXV#DC ҚHNfMQs K Z 2n.^cRrrwU$H&F+ [/.,Kˬȹ[]H4jHY[)SlMm m^Htv+JT n8ͥ'[qzeK(ðyKᐛOҚ:ם0ۆ'I#v  |Uߑ,lwk d n<)Ua-5ұVY'+ J\^vN8[RwL]b7u鏔W(quL3WǸ+r](. ebYrz(T}m~C'vD8,uy֣KwfJ.&MxSup&cW)رiձ])k6)ز ,ѨJ-!FWF3JJHCT=JUeeo9_Y-[Yz+JǪTbZ}6+tw[,ķtv1=3 M%73aƯ-Bal>iX9W h'([SFUu .G~ )3ψ^_+Ӛ꬗j5:~MjcpSXF/ݿLT/YIW7W:;@z6 $z~:w(ݗ펣ohO% whu^6R%ґYn]^"N~v.\I-ќE r q.\P *..5K4U{XjWmZ\3>E 閭20D |R Brr7ѦOVŁ# p.&;E۱eDfަ(\1BAU:؜-;VW :Y.&̠a I%h-C HFWB^$߼QT:HyOa i=u6Q_J8;<$b$6 wXzp6XSgl1цٞ "`‚F "jPn9DCL7 .Ϊ6|TSbZc(| y(w%f1D*# Q:t VSUPI _u.GHͤE@NɱbզI$O--=m梺W5jHQWƉ܉aSwGjiB Ӎq _J4AF`# xȁF2?"Uגz7UC w菦 I)P] DS߭@ w$zhikR%U[bc+>6݁!z+mJqڿ$&wj)FVt( ^,m~.AҞ#CHޖgr ˘FXW9k'DU0⏤l!)XugA-^$l:l,r[ehD_@L3Ehq,m76>ƀ`;"B9Yq\Kpwݓn|#8 t"/px7ߐ5w ]4Nx3 *lƣJy<X{Lˆ3MwR[:^Oki3]c@My Bsݸ\r]aUչ>Ut@2)(1h!$71qMnb湉AMƄq)J"h4"Ќ=@OU>nzBS:眽v/};.9C5.J }؞e62\<2e C*)Ң3ޗ,-^B"Bd0+Ɖkq5*-78` UfKM3"a+`',U7ΰl}I;fi A|\%jaK nmsb/[KUalb1rKW]ƭtIdLdL}R]#צݶ g[YYޭ?EתMɘɸ_DY]6EqJӰSn)) %~Zހ*D;cHZlڹ) Lx:lj9wYAfY`SMACDY p]ӅYTpb$k8fLJöRikG6"a=4k,T+1G.a%`aXV̬LzegP(jPi}~?\QzkZlbÎ[VVq'\!bdewr⏋Ω|{-R kNyC 8= 6G( CKīIm%S}А<¡qZ,Ae/A60Yz%RlvvҤVm&GTj%Km7Ώ&sGR܅DhVER"CU`aBJ8AyMBpGD0I4֌}QL"h0xp* P"8MEE2?>mKz)x2&c2&c2$}I g;VDiԆ/Kn7 MdLdLƾ8DXgn^)B/1][d Z6"&N 'NP5GTf]y:GZkq,Vi{1% }qC&nk:ʵeG[xj<grx%Q^AKL1 rH l.`2"↑Tj?x?}pZ}#^Ov`g;suOXG=Vd?aɎ,98 &;FA„!\66&NDž~^:D94G?5?'?Gt]7}Kf{KG{2&?0Ӧk}{pmYУC%{ Qt-_ȉm{!%t f!:$&A"HRڜz^J[Z2 ť[t׿E9<1ȒKD nxQVE sD0U8[Cp+Ni`TR?$(YH~84 blxMwr IDAT,gmEFd}uP'_ =?m'/ڲßsMV'vzgxG9%~;z{߿޺MzKV38q͎^,gaNdLOو+/4sݝ]EAPNHΒ6fw6tc=XП2+tm! ֬S,#  h.8stF88 @m6MC=ŒNl%Ørt"ҙɘ5;f0 9G[5>("F&(9Ї>NQ2Lnch` f7 ΆìC]Tc9 ڶm Ɗof&J9gڿEq=QWw-yXY-kFnGAP Y4H"&fIN[;P9m;ܭ[Io}/4>| :~ŊC?hK>3||a|[{+z7>O?\{滮?~W?o {NJe{o>9{_[n/^_56Wl=1K~={^[^xNa;־xtSmwbE?{=Ǭ^nx~'>}G/[{2&<㏈To-&sj4,ݟw! e]) v 0Q9/,,`CI^ !24 RխPY$9V!*0ϸб}^ 3kyIdLd/Gуx0t0*/wYt*YH&Q dZyĬJ MpM?P*>Bpȼfi"IjPLib6Y(` v?v4rKݷ5fÄR"Uۊ&Pt_5 y@P\|b "f#R#g`pm qٲE<@i#d:VO՘(RK|H)f2fڑ7wi5gEH Ԣz)-$ug:<2dbyE0N>aۈ ~'XA ÎTbfȣ5 Zhn8Q{o]{ƍ_uÙ/8HWnXxo<+> x#w#څ+oǿٚ=i|/KTkՏ~S_tsn/MbG; ;ڙ=AKRO:将鈇9'd>8]׀lXoqѽ:!|_?GXƮɘrSvN\鄠h`0W<$y(( ˚n\daP"!x赢%|"z {T"Vhn۲1W%xͣM&dLd/Fyx֩j"6D h0-N"O ʹ~A㥍ܹBfAi!9[RFGOS%p@vU]Å*T9{](UG.Q k"oKJ_O""T?Vc1?~{QJ`u@Lf&-6w'd AB&1FOu!CN?b[Vٺ\M ߰,a9}sN3Tꅯ~sgshg){;؇E?(qls内3.lf3=8_ݫ:{O]񭇼ܓw}=8“1;h-C) q[8w Hw"Rɒr"x{_S56l, 6 6 s9 HH{2$]CP^Ĝ95pmHiW6]%*b?#73\Q➢>MͶ1å.;3`%H ѨdY=^#wY+. *k);" PrZ"[Fp"YG+A٭HG\UÇANkbĩ Ri,琊K^JN4W V{n:СJD]5 veС(+r ovq^\LэoĠzJS\lܨH$xY:`3$z՗藯_~5oթG7om%tS+wV +^Dw坼j3}53}[2ܺO]7ww镧}xY}OM}op;^Ǣ{k3/?ᔇOGɋe鞌)ΚESRJ 'f0SNU,Y` ڍ;vj^]ZS:>)H cnF%j8YmAB %mp`ޢM՜sâJ^`~tƒg=\ૢ5tTA31G3rcZp*Pcr@!~N)Vx-$R"gŜ{U_.}p>`'/_.]}/Ko?#cN9^|‰䢿Xh矷vd2jVb^s;s3/{U8{D\tgf'?j_<.>~N<d'[ыXtzex~swb~'c2rev%[ 1C,LWUSJ.09L՟4Ҋ넴un,σ|I)pĊKE@C:.f(diV=TQY6e3b$R-d/9z,9:昌ɘ؇8Lns/j5*Xɲ6ÄDJ 3'o4 v(gրRJtC=餓jE {o u@q(ȫ#BQ \h *" $4\=KNcP@1 t8T71cXibmz5 A9d{2 P"VBgJʚ2 PMT4gI~ ( %i͌@N4vVj"4PyR9%k:s)<1b#kb/p"ZpYsz*,<`+!:n.rn%mUr"{/>.y;ᛛu 6uo^~l[dL/_o85M4i3pK Β) ^a ܶf1S[mw_?݈ohAl[,]:/~k|Mפg{}͢S{ ]%+%¡۠:lLHn 9gfz+[qwROex5/}^*ʠ0E4As5A{CNXvm Bzqw868"hRIH"GT*A"u(yUXfd [jMީDDx)H6=G;565'"PbuRvDaMT5g2 8*f)J)i HX7 p@VZ9I gaf7x"A$^+bwX$=·OCc)%ng@,"JI ;hzqm>]"*̜rU?! NI»K ԳךSСdz' I$;j "*Y s ڶ PLN0AHfw##1mn}ivǙ 6k6NnRc%.ո Y-uZ񫠜# G@ĒE[i#8g3Q| Cm۲k8"#0 @֕s^^isl+T. ^Gܶ5.EǞ \f-wl/]X51yNdLdCݪfK,,%Yܘ@qF1' iMC$@IvŁ[2-Ue=QV9gd":蠃O>o]X4$CYf5錒=k{+YU+TJ}n-8λ#an:ya6&0`?M㲏_R1=Ʈڳv_|w~h0GbLXm]`bJXD- ]hdTڸ@)v.p=k|=y睖`'-~ƍ3R~VBsuxU3k֮DD3_TO,DﱇB~;h #*r]!)lKf4*2:( ;AF 3 3̄qTj"R-e7#]vvЋ:f X=TŚKaYE;ڔl6HCZvD{Q(Wxb ;Jj+g7YDJeR9`i,}Zogb7nJn@žEA5*@cRtXs4"ꊰԔԘBSg V;2q9 AF < m՘RJ`h'4#a) F(Ϊ6g(L-YX"D7*N)12 -RL^>{.("19R Rj*T;>i[Gn#~;J$#zoq&~ތ?ob-N1?CE4FD)l=q+Pf3w-9 ET0T쵫p8TK7m[0CH&j$U`^֣,dh)64V)eDi*dY툈Ga<}n}b~~΂`LOMOMOgs_ӓcW^%O'?%Ղۍ&$bSsH!@ 7[I- ی1H][(."g ٜ 9s\s:߫̕8G(Ƶ癆NAJiN %ܑgZpĩDrX*E gp;`ݕns՚C9ɨ ϸxBFbкdd_NΗ>j,Yud(\7DqR{B@6QSK ѣ*q~,$a@]d~5Q)V[:ss&;5AY5%&-+DPFI)mgȩRJMf&0]EΝc.{H=36SF#(6{0K1""(1;R:&K* uE_vDٹ R[)TL ,Ibcc#T0͆5MCDFK-3֒ӐP@ߎ)&hsVEIdLdLnlL5>fA[U%fn1%7H-̬> eL2ff"h[O./l:я}W&AJJ) MtD@2ҴjfQ%_6.=E_V`#nٲy:M]hq]?"Ř_.MMnnw{mW5\} pP#"JC e Jff["[mˡGb> ꢴV5wsƨe ԑGOOOy؝4`?x-„z\) ]RG0BӢmEGxd|Df Fp "y]sLX9|ˣJk.<$7XqRF15|0,ŸUpKE0|a9.J*GVq<)) Ds6p# ]pe@d(:!YXoRek)r`68Aqxv )'FV1($Hp15YS.\"u~TjN 34!W0+LRlG*xȏ/iUg"縚%oo`!->F5HQ+kbu['O IDAT?F\N=] QB6ZseрQVFXi^&dLdLn`Q" [E?j 9 0 j)(NS_֞qdkp{U 3,YO[ͶH xcuՊ+Zۼ`[k^SĽDIhMS%оi7L{]wݝsN)x+Va۶m֭zk\>77~X[[u{؋˗/?շvmiM{ӦMCYw]rT=mv;U+W̌s"6lظ~sӤ>hҥ;t=D7fzޞ c_ =1g^ "boU%VWX"J'~(EB e  y~~~֭&N1FkJU%Gkj.|QXQ/6E=(˕A8BhW\[#T&Rb@)u5jFp6<{PfT5žWOeԘ*zf?mxٱpEhtV) %xBpv?ŅW+c1sQl[*Dê*FPFD0`}t[0޶q^O0 E VET$Q;# sITЍJ2"| Y91+z.7jƋqkK%~-:CD t.U-]- ,h_\h?x#pɈz V6&7~Ss]C6D%D:dLdLƾT:D" e(%2,]i5`Yuk Z&73ԥ42(YI̮8ेt(sb-YmK7}!m,SQOzu`a^,DVMӸv%aأ~.OOO/_|ypݺu}p9g=|d0_+曟'.e˖y啩{ VzK_{/ 6mXWlƍcO9UVZcXDl˿pC=U:ڵEiƲK{ɋwpX. {Liz.nhϷ;A8ϟ엾>zuQf'5QhFa: 9`e`$-[9pK*q\ȢL/iQ0R 0%.v3!r覨#+ qH!r!E$L068~:5UNJݵV{VXjɨ:ˢEZv0E~}R&H]dLdLdam'8gXUJ%h|9Xш3XKDw}a{m5E#ؖRIyc>h5=pQG~/ ɪ[΃dfXl9l`~0hW|ƍ4A83תZgGWDm;??-F"aƵko翰bW]u>jÆ?ˏy'O)s^l_]t7m~CX6¬i6mt|mg b7+ͷ<3;yYgs￟+7p`xݵ~f͚τyx'dbaa~t=nvW~^k;֬9o./~U7{C_Wlwijw/׬9l񆏽[{Cz=exMcuο5e{{>>S+bY3`t3>]ltiEiA88J76-Od(]A98J Nr9P <&ZHف]oo,ϩpbY۳Ziu{MG> wngtVRz*9;`[D1B=wKr=Mz ]R:[3= TLnqjb y7]b6_R_JR G涷TJP2It,&v-3N)1 6݌Q 3)uCF1a3(WDdD|]6Vk@̻kNc'fbK lJElXXn$SZUl#O˱ F[g pJ.qlZ(AԌe_E!ʩ`n%qș85uG[AuݍHYFxQq+AT+W(k'A2a61q 2k$%7X#ՎK31%N&2qJթH,i^];ϲKb=lXvӦM֭߼ʫ}qϹlڴG7|moo]~l7#"z B[ŷv5VG[ޔkt>vA!{U+xouo{9?U~\{sN8@$Kgںԑ +q/jfwZ9OOM- twWنDQÔSL_zϞzȑ,[ܲy A= /_k?yiwӱ>/~⿹tYtv;W,,=D7S{LYt/GZtCo䦗~]=d媟Zyo-[fZmoz©k=tGk~ʣsqMk A['Y`)F- ú=R61b9YWJo g6lA4<?%ЬIlG']TfM6:뗄:!"ifb1Ϳ35f݇iR%YU>z**Ĕ1'WB|8 'ͅy@m[R3'G3N~c942)QJ7`m>$RHE4.{O-:5%ułY3`$@"CƩq>H"r.QSfi_2&{0 ƞ8&c2&c2E{@29=ג9y`Y2ȼ-53w *rtNddߚXc^8F{܃ؚ@D 09qSޚ?_P7MjL.$N ^l6gl]b=[7 Sow~HhLG"c]/^ݴu{Vd@=*GJ ^oƧ?;\=nK_|/%XX߰n=Vpg^ ?8q壱'`J??}{?ɏ]/_\U6oIͯ_tCO8ma;OTEw0Xp7v _sw~zmw[=+C7vܱ'߻୏:`??wƙ6S+/}UU3=+X=7o٬i5w<|k~qo8uKt>f}bb-'s$)5M#"YĮ3Pϭ1y  gP~=c0+3-,̘CB{K?B  KXy B ]>637:r,bCU*`$2 ( DX fi(̊v@5Kdh1QU/Tъ*gWk]dA/7QF2' *{K+UlMn@FN# k#0X綝߼unɊPƶty)k|kWQ, 2Š!:nOyW(LlМ l+6"D0h \]-̼h^ߦf!,G..KJQ7P,%Yod0-VEI%E4e"4gJ_RBGDȰOD> J6g[QbĢ%v8 0%eṅ(r !4-gؚn,NzULj%9=[Ql/˷FHJ(R ]$CP3'2 9]u"|-WHOw뛨|A8AGT Yl;9 >_qm21`TsvcR2\< RL 4k4ڸxo3c3UmznM'<vܒJ4e3}-"j\+V'p]X'[(VڪB;kiYtևLLy:tAސy[V $)enKrTk SmL^mGZ1`cBFD_I161v Pb RK7Kʢ`krI"a^yƹO'?}Yݛ9zѧv˭7sIj-"2B|t*7#v8속s=j _\t% ۶Y۵x^mߵm )ö,w\X18WD%[-3{ggg6m40߹ǧwnpRjʳɐ%6-8ƒqpIO?49 2==ea;\l=@p#f^s! SSS=1ܳEÁ5v~=jlv7mڰn-/z Kxуfa\ꗎ[vA?5~.|;x qwq)ͯ;i8L14pl]hL7ηg{pDeU6cY#u+Q@./oX*ƱF m'l-fg"xgpґ=53U3[n17 dhBOF C#i%J_ 9'rd ;bLp0,U!R-HwzJvGTT!,Z쬧ǝ5dMci2Bl8[GEmENSXvl u)oăS:z}Ze$0pdDg՘J㰋v0$":0"/4;  IDATv:774p`(W|w G;u貽*ʆW%ƺFC;?jCFTKf* cu +gq 6Kfx췤ēys `w_?և Usjބ^5CkPJl{& :wDI LcI:y qۃ;-.^Gt,Pff^Jw5+ iU9!#uuRqxac2&c2&cZHYA FGԍl[Hq?z>0ƮRy7~Qt~p饟xSJblz5j]%_%xsy~=˗/on[aJS333o$a&%ݺdv;w3K1X&M V;-\yiz'[|{2=53iofj=̘^?~g,{>5v =7SL  qVq1d0q JPyħ姉h4!DѠSgk}ν]TWISPܪ{ϹggHE*],Ł)yoe^/[n~O]_|Eg7o޵k"f._1. kKC7/\=.~VWhJH^CZY+?]x5}cdT6~m/z_x;?чt:;7e Ȳykn4 c$r/-DΝQ]0Gł0%"sss!leǃO>rţ6ڀ MckGW\٢]XC=N#@=F"(ytֈ0J5U[h RlHesv1;u n"*ÊrB9O5DgkH,QWM}*:khUkp(SIcCT HɚhmhQW+[Rq "DJ̩{fd\B\+Fz&2 'I43cIzbґ8crf8 #԰8aW"UJBL]3P@i)&G΄[!<Օ (11ͪXSݱaj ag4P"BР&0W.Ӑ#+ʊkMp'D$y:4_̐ w" `($E9u)cₕpHHbq&>HiRG+jMHt0l>?U. ny7|`;m!  d =-¤JfT7}  Rv/g.<~M=$g;V:z%L(i5ԫ .NʫoBjEG(;.p8< 7֬߸0!l߹m֝+V\.s||hEF}[#.@4<#(mDE>BY}y(=>y[UJp#N;O%_袋?^:m5Oܳ2 y^{Tcb0k _:#>jVu,u~.X}˯/~ 3ɉ]8|i{U矾wSngf;ԙ1 R?w) :1#af=%k* T]] Q@mrxgAaSAM#8OK!=`,84#)ڄ-C9LMeBBC":ݣj="(4<"sU=꒫BAl:(XBT)(h#XZOXoFs D X3"r@8v2t!D e0r22A8˜rOL0sa+XہD'e !&H gMI\j{ss@$"{01Y!fJLb_5(C# 0s*-D*qIgFndE 0 2lcH0m@* `339rj̱kg~Av4@:w_#*DHQ*di ݃6x$&UM JaD XGFQ@iKh"T3$̉{|h!"xOpsDlD ߼mvbl][B vny,<%Y, `㙚6U" $DBd=SOJ?(=Xkz=˳|޻l流v~+Zڃ74#y UcT}.⌤ϯ~o[qOyi[\y9^ٷE̲i1i у5pF5ߑ*ٽgԧ^3gΝ䅿W Uat:z^[,qȶ{p<[`yGtXzK_Rzmi>ԵK\fF KTT^ zT)7@kuNF*a _6+{T=nw<ԗײ 1:P;f-kuvx ޴n i@hrz:F^`TrF=eŸ($"rL7@E_G/4E|"J73PY'jF(20K"vwS9af#QV,8KF$gzX;#SC,T2CN%QD`n=Fj_),"H[߉#d-wv΅D{ (eQO"fս>12h?z"q|+Ka%!8\_("LҧD77 ɉ#k4FK0]LЄ#=JNJx ٌ^QBNqL,WqO,<]F&J't a-EHq["T9Jy] `5b4&HRɲM"$!8HAD s{ k&|ns1F^FUHt׳HܳjLbD4 " !wPp䱂핢€%^9 (CF PO8no] mm&/.MXcy8PfY.EMzLJ!u$u L(^XLlYhPGШe5 ?Mp+,f;~qSuͿixwmӷfD `&Q,Si}_UviT-6^'§>}~{R#=/ԑ}~[^CC ˃F-wy~F}ŊᱱoUFќ=5paD2x%-e- 8d]fh̒٥_.hEC{ʥo+3!.Kz(c"}u꤭U"b0HR "9'W3+0j"Cw)[EjV\7zbo{7x#3 "\;{٫o,| arz]5d7AL5 &ƽ $ֽ>4u0)7 ѠJ >ߠ~{ MC/R^JSDa PY$V6MPW"Q1!< 5A'>"2QEܠ*B)QrDA9)4ҺYdz0%KLDK`\SpIyn:"R8q\3$SEܢQ9W\?bBJ\R\ODaF{KRm%/W DDWJ$Qq&e 7:udB2!/Q1SH @&@m>Q PPA#oI*6cQ{'HIh3GDBD¥4s'< OL9웙Eqd!BID  jǏۊ{k=DV29Dd I`)j 2u)ܴo^5 :7+EC]yV=ßK^`>6XcyRTiKV_傤+1n ]f-h=K-B=w``h`~`z#CheOwO_===油z(EXvs`KXPPçS@֌)q 88s_]=<9yfi43WK^J!Zg^ժUGAǫ[w*)`?^oG7 ^@)N}";bN[ŧBjymvpkC`3f~EQUS]Tf)} vKKN[ jǪP}rCtʱBAH):n `]"d Y͊ _&)u@ ٢b;; QխP`U6=%OK3f5" %Ox5U$x==X0%EJ{sBbSJX:tʺ N' >#FMTL-b4 V<Ɠ}rGd塨F9rj݆Vp Q{@ ]J/E`` '"2)w &^| zaB<|Zy+VP:ڣ6#ETN 0"891 5*P>k5A8Fk[DId!,+sl>suƑfjQKE\ЄHD֘\\TMD7 dVrMi# %(eO]FK-Nj]&Rt-,;S%XLVS,썒3ׄUz0 ps wT 6sV5?}??~q\lAx}GLLND !8T?9;VQbE1Bi9#Z'ABZ6 =wS$kJ9W@΀킋JVKcQS˨g4{[3-R4EF`N )_#&A,u⤍,ќ2YRŊTq4XÊwqX 25#HE4 ̎7ڝ1$F())3;]dޓ4ՀA] - 61J嗊eSfAh BP2Q$ay7N;jdˎp#e )C*}#v83!Fl D IkOm (l1#E a9)%Bg/YeX$p8,F0s)*#1OcpBJP{QijGeL\F+%6QbrLEgQއn'ojԒ2Q0CZ*1c"Ti\ӽ.+P戎rʢQ`3#(T#yuB@tW^s)~F3lBĦA ;;@ݹ 1X5*1D陖Qj!vIMFz_t1(.UdlW`eWj ֈ@D%1G[Xk0Rma %W's3Qw)H'04yq};&M!H'#|=k``k6kIٖ|lOz߿ݶIRA۳W |V!:C y !TU9j[/AP.P,8]^S DDΑf+`||/>87K=X!Hi_MaGza D6z25Gc[6*ݗZXt:vf;U=g]Ş"E̴njjcvd1e#(K5Ҳ *H%BRTc% TDCbRly)͒&`gẢVU!Ch]6y kUk9/Z*s>_ Nn#lCA01!|UuV*dt+#I%+B8A7  "գ"99S|eT HabT9q( ʑ&at⬔ K+g (fM;AYҧXfwVH"m9e$(0A"pt-Ke [9JPKfK1p)ZڤhHHLH– F!s*1J'!:"΂f́@\cW#D"(G2\  l\Hym@<9yفj4]T) R7NE|)׮gGv8;ʈ|`Y2P&r` I$h H)cH\L>K~yyw|gji"Fި7{nO?g%}3yCT꣏1 c{.]4Q☐ӗ䲅Fw}@Xc]&'82Zw΅g?zal2v׀|lÎ>zjWk``wLXXM"| P 5kFGn5JEGGDЬdٵŗ*Kõn-s:)e,c'j >U5ΐFV~mqӵOέ;gH+q=RQ=4:ٝs5wouoYNTlubeV>w-x KHR+ZJ->$t"Y!B@$l9D7#V@#x*4E)~v7iX;&so( %kPq1.艜@l1C}3UE!TMP h%’)#ͺEQ2ʪ,QQŒ@N[PvB 4{TM8DVvl;"i Ј4Dͪ0&3NU0T"BzlC% \{VYNj90j)79H-VBrNP MT$R,KHX`{8@uFP7^f!ʢ, 3ҊQgW{ ,ɠ"S;4=`rMok1% & eK($Pu$E%!Bz;PBf zeVqgIMB#bJ {  u@!vfu3 6݁UDDБrBi"%&$9Ug;qD,By[ [TWs,\ĸ@!޷֭%ŲTW|Jr%8iOx,  w f=rNk(Uy(Ia@=/w={oBpέZrxxfggwܕڵk5h4j;vܳgOϋCCCVܶٞ_X`73o155[Sx`~ltѨW/f111kD!ܚ5_vn/hԛy/XvH@6l8l,  A;2R:"/L9f/3CL"=3y5Ld``uƳ[?꯿yu?wlua5׮zN7ꍺ̵r~uD暮j)V3qԩ'yͿ/:v} R!"'?QAFx}-solfѥ^ͲQ$%AMi/ UGQ֪2>8i<!*:g,Bxp}tD0c`>nX qe&sZ y2tS([B"1TIff&1XƔOWC\ad K ?BD0Kơd{4 zXH8#g^FRVD;}9S(5p}9BȄ }GXz=#7fԎPvyxڑTKWu-1 &ҋ\Jn/';?𡏴ZFqkJ߷)vyM;xʓ[:b׮]?[lyֳq޽{?O=}Gz^ [j?^l|k^%v#~|bbbx׼z?99y:cF54NW?tX S !lݺ^(앯8 sQaʔ,ow5o|~G}tUGP#}"ۣ*s$BYg _x|b>(2Wᕖs<@?jz'~q[GFL̅|Ն?UG1{w 8g. 2={B`Љ]۶bε>H`rZگݠ<8G NPLU6EF#'G%Β1$J.t WaBۍ4-fgZ2C{9RTK%DPBHhU%lΕI ǒ2eD&4 0Lr>\=iA! 3+c@ʒTd BʨD U*0Qqڽ(7#@F|@Gg Cj߈`̔@w ,~N}:e20d'19v1xb Ą*I.) |1P7٣dƚ b?lXR)>\T$𔠇-oWj&K Q/`]zAa40+(%P2^$M&%Cw.{sְ=A,YݮYBJXhHv3$i `|.}(z ,+NXt4< ur#k7v;NAdL C50*n:-?fT!2~a2g*Rڑd3{j.׽uY 5xK^0;[kvS|1GP`;lwok׎ИNYf[wUI˹Ku],ݨybݏ|ګd~k-şo}Ǯs'=/{3aO⃾qiw|}Or랡_~~yixʓtM7}_^ǜ0~ڦ% I*ཱུrL LYDY uѥM>F\t `laCm } e3\>|=ӀЗe`pWUj_SLΆfmnb'P ŋȍ7L&Q&(ԚLi+I <])PZpΤHD X1! gYZKHѠd -5{jr"/2"=QSeHc,YXw_knL{ED\0(>eDJlT'#S-w.PwT :SZeUef{es!)ޙHJ'1p2?A$L1R#Ć=hsd1!{V9Ą=1nԘMD@d +R]QLlhə$h1i")~DҜRVHrA'7 VQL\Pӵ`1qVTae9X&%D픀XTsl|j DB"5ͬ"a W1 Gm_ϲ,UњXA 4=ZD3"Dgp`HRtJ\Fses-i,$Ug 䖢`J8#@83|"Bv R#-[f](eR4TU)=+8Cb"9G xI6lhط;3#@F>Xs+ x -`(]r%yIǞN=KCvOMڹs׿_7/޸%?z1LMMuo绳3sj嚫El+[ V\wv/zOwn4HB7/ݺ=yǯ_VwM7|x~?l||V%jz"Dt#[2%mB?>~_<_9uO>_xno?*{aO>󄗼g7}?n/|x]͇ 4A({20.`S,Dh0SU(˒6g唚cp7C}'Rx6Hџ ֏X55;502lQkfnߒ ivܱq|mm֔0dT[\V^hkrcy,1f:XRq%!Z(q01&(zu5Ѷ+0Sj߅4LNŽvMjMTH\@$ܹYa11DL<[Qk`&eS!H)31_)D"!T7't]CzxqQDđV/ЕF PQKL455PVLS'"h>Ub.q$enCmޠ 2Ďp:O+X+R*0A,\ݔ'R~ eIg`prY 2$Bx R4QiH5%:enc)%@@M(#;h:(]H,pQR1pEl u^Bw^F*o86=Ѫ̐8QbPuT _5MHtnVʠքggtމ>##-t"F<+{ixZ0ZP.G+ =R!4vrtCΎ np`ȊѽYfTxn `z#o{v!2 Z{l6/T$w#[nw/c8W/oxbӦZtq^F iG*v{>>>޼ic7sg.~OYz+ #ȁ#v,ݨ՗LwUG1gٿ)n=7C]_=7z:777 +FJ+|;w?Ǯ:ݰY[W\<)8KuQQ&[{@8h!6 9nj”7x\jhx* > nXC7pCb>5[~ց9]fv#3=]=[3Pu\k WN7˕XbjyMF3L^(bf6_RDfJ0P 5EoBЃ2@Ey#tXIR:%iDsdEulA櫘U.ʷX BEDmޠʐM&#._AX2%!CFR.[7R d.Vk)W_q@15*Ԋ#z(!xa%ˀҔQDXch *t"UN‘vuuKXK/cEQ6svT!zF](4ZzUb֟)r%v0V])S&FBz[*KVuԨD$"RQf9O=/!⏢ /X GB"dP7.ڪ#ݤ"C M;k-WK+ eU*F-}5YzHO7X;$8뢳TdSTJL9Ea8K+w%BE%+](׊ ͛~u^4(8k;_r=ղeZl`_<יzθ]|[wxk>W# +pP7gOϚi}梋I XQ9 7iWο۷3я}^{|k p8{ _-Žbtڭvuq'?կ}3OݓOx`ؼN8{_AQ9`Jn|Ͽ#GV6tᛎ'ɥl1Le" NǼ=>sdvk*.h.#crXB$$"X$YJyMHUD2.5U K{EpYLE`!gUuEP f9(RJP `U%,qDE!1ŬG5+[Q`fOkuK!"ꌐ5,*xe_X _8rDn\s)V}5̹:$tHJ#"$H>[9XUl8TF#%sN<\VHBhOAQ;aڪ)B%9edY0ٯ5_e4.9ƐQH1S4"$$.ӑRc0fy3G/^ڝ&-Lݤfb) ,=~iDgUSNQ&BGq-+._Rr_6"_R!ILgDRb|]&1r:SN䜣4B*6FAD-=&g*t:9Aez՟|C)^g9ABk+cccB^pjjOCCCpY鄉]<84?oB,L# 癏OrM_9#zEvB!:___"*Oqs٩j vڹ9/̴s;hJp%D*˺*bϙ.c 8Q K8&Fv]`>O}~_QvM~{{߿hdL]|xK^pӥo{Y׼!~ݺλ@Q1m_k-*-s%"O+YiTrxB0'/$&V&ED{sO|: g ͌dhaH^o o{g7m:9?m Ȩض~(vheYȂ,8&Vգ=dA*cy,_ %Z*4*5NseI9 .W`"-E<{c>6Td-NM8`+JH(l,D6E9t Fd*BV/DOHB/G(xN-B/| IDAT݋43' By-ZxP!d9@E^b%1#. DeEiL(_Oso~+$iAW 54,S5KVj:&)SIe`Z15w_SvU {u;D&*!AkYbNfj @. $te^GeFZD|rfș'_x|R[_*Lc3 CP ֲYB 46#gKQH*P;LR#Fa (k+bIb+zF z EN×9粌7D}pQ?QE +'-(RM`ctLܓ`Z :qzV@r-hcr ʈ,|e~=8yg}k|Sٽ=汏-gcH Cy>zzBBУ/:$뛘 j9脛!)b$(O=V&+Xv;A"l av Cҳ^ל;j"`8>aD."C$-lXB St|1S,Qz[ hԵfèǧ<}Q(5ڭv^WCr^m/s[3ynwjjb<<\Ƴe%߹pss&돿iO; y?p?6;nz)uzM17;?biF3-?W[ʆ%y]ٯniPq$rЊ!+U0,)RVm]?4tiGݭZ17@_z#kWWWC#Voې-5 u5v{fEq@Q3BA@RH>Cأa$^`QT1**B1JMg~@ib/~%>UH!N92)lt;c&ۑ 0߾o$Dp],@"] "hPdg&kδ@ kO@eI~dz'LN Y[<} z#Ǟ #Z;>ܻ;&6굼NMKfuZ*BL^Ϛz6S} NN@_%orȋ0sjWCv|{eHW eG^<Mg>s^g};v}3xK^ri{B >`ዢt'F末92ꉜEo!I]n zr 1sZ>;; i}ן^oZw;>>#SSzyi2 ~}=~9엾s9s;/Oy.~c5yŅo_gy 7~+xh_,k4nEQ~'K3&r,ˉ.0W^YTsO- ^bRst3>~no[ym_bg&[ s$w3?2><{FvLa@h t:-e}ync4IdtL{=⑧]o힚bn e}Xp$KTwLሆ93u1T U'#TB,jC P)/%V&vQʁāi3n 6RGK@VW 1F.hX4$CJz/ktҘj֐0"j$"^+ 9D A RԮ8 ehH R-!,j 㠲R3XW@GIj NKrE DuTLt9 !ϓ+VN Y"" a.V~(T!PZu)9Kh"%[B vk":UDAc쫥 r9"$V2Ңq:"r䒥(@ L-=lR(lWC$RlD80$ ~xBtBe&0}pb)9,DFб ^@!>G'N^3]_5&S4ő6ښ];-R(Ι]&YE MQVv9v؂(G[]b夹y륗~Yz. = W}H~#}kଳ~5_k kӾU&tFl5BZިgLt|RW:};Lj2+I\6"-mQ^Z]gYV<5_???;SSO:q{3FYi)fYn,U8 'rAUk7LA%wAnyV{/og<Bľf#w}K߼y׮]|!ǰ'"St(,&- vp?^_Z_*!y黿gl2ke>v/z׼UQJV|ړ?/+6klGٹ,˽v/Gͣ߸v \s=l(0X UjHylLْI,JRVۃ]6v7!lK/j\NMDq4=4j5wnv}`Hrx16=y7XghCXI6_$9F^펎:rC6n<nV*4gXE;$Xcyp`&I ͠%w4#Kw֧vob%cu% 2,'y=bIӈ|(4B,y='*eJKbLF+R|JD d%ŢEK&%GC&0-fHQ& ~5FՈi9C4v-CdXCQ`{m7V$Ӏ[)ENG ս!'P@!VlCF1JlK <]W]h+˜lQ)a1Ob CC2`-3`'qK2'3`K}$""P"UEQ6r,<49! c\.AP= mRRkeYԹ|TS+MJ/9q-Q@F20[r!iur0TĬU)VR?I)SS+R)Ô柒BP isn*y5,n%^/īH>/.@V"RZ e's]Wؚ57>;mߺsʑS{eCȨbkpąȰ~M\^~BY}ݽnuZ9G8ԓN< |.z˛:<N8{/;Otb8ܐ5 AG5&زHصZ=m㕷2C˯/~ 3ĮwG>w,s"}d9| N "ээn/x^g?=p?}ˮ<}cy`g]־v.3NGWWǬK2>T;%G(S<#$Ř*n`KH%+9&]ƤĨqH(!`a1;ĮgnwuXcgŞ[wgI3ణqI)L1縇=~JO~zm#H!J |8z/^)2Ǫ^cy,C p>*c0g0VEgi)-Փ)4kk(f)yIn]QB0@RϘھXJ+M 5cof4`du6EL GJè.|sĉրĮ`Ra) I3)7gK5T鄲(cT?T"1Kn=JHihv::16$p2nK|DbV3Q1J-4K%^ DHNhh}Ã$h/i A"Bπ P:'bJdرF9Qju% "$IA3,J҄27$~?^Qn(:V.eo".fȜD}c$;{sNa'lJ(`0a <&`q$  1$!KEVy8;yo9snuJtg޺u|71ĜmA0C!sCf+?S/VD. L(A՚Ő#V&#! W~ 'm OҋVVWkfffg X[m3*H2 ]izzxqMcTs˞͢,NojDpj⦭4r,b$7UUڢz"bC:.|-"f9~ 773=w_/{ɹ/{[uA²i1 _(\mfq 6S 3??'?ͧ卯OgϞ=캟d91FQU~{2Y6.q‡h{z', G> a;R*[״AcP`2bʹE:o}xUqIvuAd])vQ^@x%]{X/ls~a{7]z&3Konr#ϭbXE nEBw@qGXqe։ Nsg>Gmڼ01@E@.QY<$4Gc4F^8 2df WaNْ@,#81qK˷ama:adl0 9p|3QIGN2.oRLѹ߀٪*ݿ WbODTUX+[6M8xŘA~Ă!5DO{-ęl҈Ҥ'U5L&J֓7PN6g2DrT8Q;z8:$jeZP;i}61lKIg{NH0K-'l,Cs00*4DQc ]ʎQ i"`II`1ڽF擆0 E &31¢(4O'0 rQtDMDQBpbo*`H|=ل"ͧ>/U˜bӔ#w +"[ꊢ&2QV'1IevIIrRπU@>y[s7$:2MrZ\G8VhH?7n( j}տZV}{\s-\&ׯ}vfY,n-0%Mn;`veǻ<9kL,Moz׾N:d W}~O'p䚡S`5>u&'V̻4Zfz|[20C՜\vuS{zҹ/{GeJ>(C}G]C=>wie/}峟6U*o9}{^] ii ) ENū)^VþB[RNv>`oexvnMux~z}Ov/,O:{Qޘ@3ӝ6Mo[j,8yf)԰ !0 Roe-}-:121,LińIaQ)ppT; HD"XmfNU :HyFtɆ"F/HAg8GR?p ]y0cQiz=ksN$0G CG X`4tbn #}l1AB 9~6g`+QG FeۑO|8tpZS^JDkN޳~7=Dh_ty1#:`nJV77`Y"rc솺11'ޝ҉u LqePLmCE1lNn&} U8"tv;3LtMѺC7N $IDb. ]7~q~~~v[)ޚ̵F<&9$xpkHB$b`>V(| K.B17G/4ht Xv#Pwc`2@%WdJi qv$;r: o$g5pM " )WrM!"枘Eb;Bq3y|ߡ+激P 1tIy MB "L[HXU (U@H%Y5JI9h={t1 p> >yuEP //Q$H"<.vXo_77. 7']v˦àKE\AB!xxC1j6{nyXLH{/\q<}3hD AtzsE=E( ( wާ|3mOzeah0V*|n*lѬD~zD#~ĺzGyyv/Jx^F[C`;%`).!94@yc^0%奛;Y#4`ݤ[Vp,~E?n׈T8-9ەJ<#$OoDEb4T +Qi "rv"Fr(;*x3 aVPS<@-leX#|QhęGaZh"["Y!x`Ӊ>9P*(y KQ?f-R;ѝId&&%@d)YKx&`3+-`_2ϘDH1ANJ"4 EQ!qr9FYNTF4t>BS$H9fqZA6򩕿l\dVM+yu{ y$ck&?rf3-ףb{}OGY00Sõۍ( ڵ{[}w.&\o7x61jT(@:9~Cq]=D7n0> I9:>? 87R{O`"h {$VfWUP**p"䀕|QOj\e1r Α,.ݰa>X*ۿ҉M.~[;}߶mnm70O:קN'Q"eXC D,.%)Wx≩@9/^ iF{|Ʀ׎_\C8`:(_FVyV AlcGEfDvfp3V7m"ݘg ځHH<={8h/S9:E4SdDAf/^1wCbAZ)"?XL!y_wԚ 0#c"K&׻NA.\3+cGꉶuB@F"V}&bBhF#. ,R)f\ D]Om5@F" 4kxBz˜(C"x0hNC.:s멀"Hb,D!~T*RΐJS;$B Zd0*"'1_`Uxg`95ƚQMސ PC0zf&qX򝅁x ^hI*uJEqrR':8N "! G擶y@f+3dUcViACv@paJI`L2t΅'=mvhvͭ;ZP=?~nJ;ɻg,,DJ6bU}oGn:JC7n_;=m`~] 8(*K4jV_v35͹,3pռoQJCs-( K+;Q|W= sA_7FlJT=kZjsvɺ5Y1k5YՄfE=kX۽.W*nn4~za@ NpEi63TX4{N:~c ˒X{cQv{Nlo/C:A 7}jp[A@;=w uwƀ@< NAfƅo:\_‚P]ާǫ䚅)Sǝ7zW_Q z[>W޼{|E?_o?s/޴{曯]_۲}'s^-Ͼ[{>GH= a*b*@ɚØCIC,Wjsf =M)Ðb\j4IZ 5 6*țU'@Po}!a37 CSDrZVB7R%DBI8* P P0kqҭ+nӴmS(h-ONX{ g>cVՔ㊾r57L#~o.~_`P[**/⡵":lL4:4lcj`^"DKJfu$0GilX/a)*zcHpctX;FX`zD>bӍ[H5 m}Y]qaPADPyݢGÔ#23覰FPf*09~^yV]o8_<.=^~@>'y^'w*Nh w{eoy~W5z:\_?\9?h}_Au)3&Yꌈ}f9Rkl˙$yܦXW%J'~KS}gUnb(@C+{XP"_>b_;# ߃dUUiZAA[ȢnER ,nCRt44mDG)(}:T1C^}6 Ag΅E\$o3V!-Z(!އ}%(zfkjD<>5yH 1|_EiDqWz C I 308j -{@RL%Hά;F^hexkZW \zs;@uW"X! rse (8瀒TV$Af),#eSМY>"ŏ7`BUhyUR0~RWPm c & 'p$ F+d&:ep瑲K%I@~` ƃHq%YLcBF !#W€9QfP10q9gDaH{itL6MQMG@:w /CtzY`BVPS^IdDDTҠb"AQ03k<,y(9ρV> KSz&C&~IA`!1+h!1gZ a;eя>' EM֮ȯ;zcct0)7ةF+ڳwߥ^="9DvΩcvF_u'=tMR6:#]"􂈐:}`MWljnEi7?Пx=U'.TO?7H_2 OsvlK(ۧ@'NmEFc4~Ga]jդĎ'Z#`bh&7ʑBSj6:$]سYYFND Q)EhVD819O5ch&ͽs4EPP828-N!!(dvo^h!wH,,0H!yB$Jh?XFԣ#`!ca]B%Evҋ<PH|D !R~DQz̛5,6B]@4lf AT 3#N h8}.ئξ慊H}0U"gq<EcQ~ lȩ$ Lm<9'`& ҃7 !TٶKrJ?)D& rl%1 %oQ) c&3S Hj櫻CTlR3NLDx=lɒX&"R[R؁9(y%殁D9qIB ҵzJ.T|?&}`hVVGXmBMg~@B &jcnO>uvn_KAN96wS604םX_`mn-:Dw5۶B԰Lr !8AQ#U@EјVCͣ11d dFMkY ^C802:*$U)H0Rtv14hꈬ _WI Us߰vc6^?~u&o/,.-Ov\/ 2(,lH$<H"/@ f,eY8&#??=Ȯ.}Qh@oh!¹Wp\}e]s}7}/z_;y<пf:}Fks4Fa6  UfYT<90k Dv= аڷv֌. K1q=zjW}vb%|Za?G={Xߝklz+{ɇ[S(,9BƒŤ(!"D&?r[@Y0/Rb6  !i~WP?^#1~ub`Es7TI>b#S 1qT84C$U1J~P, [L9Y="u;~)#fSsDUU,7T9 r@*T@DX8HxT] 9hGp5bP[+ >3!g`[P4# bIg~%&(!f (952w``#Z+syyXw8DQDe y")tҦ`uO!2K+@g/O!vk냵Pڐ!D$sƐCP9ryDR@AɈU|b8njTxM} klx, +(> ֽ_Kӛ6v%竕JO=Ѭ#'eJ mA8C85Оtp-N2"9x uSf8>4Gc4ȖLIA5(.QF<3# "텓s![Y}@M13}!]D6/뺓1~gW?=7 }rOy݋',|>5=  _Ѥ]n%P`Hџ:"ٽO5i>)u LF1" @$FbD @h6ԓCBHL+X O hH*r~T .R GBB ɜN-5VJU y&@G` 82BW#aٍg;h$;58ꗙBWU FB|A zZqps^Pv󴖮6АFu4 F> Z}HMYBQӼ29G0cI-$Q6&AgJ2OA V`SԨ ¢l^+B4TN0D n3aPҍ``FcDE.͐Rf|~m !q HYvsIP IDAT[n633c29 Pu5I:>Xw7\cdQ#֭Cxn5D,wݼuv쌭ߙrY ,ą̢5'OVx11@pC&&!<0 猒l~U|\`ݗ(bSa'Xd׎kX/+8fWfQ3x w .yrm,,/.{WrUiwCx*3맊>kn}H@ͻPHVPwqڛnBԃz?|/}yԧ>p>s.МzWwwÙu|@Fu%Oyշt6l>?~Ϳ~ϧ>S8Y/x|;{eׯ@>ox?3o~~,v7?x;х9qGx##Ƕq1E,YYQ]cXwIMh{ǍD/~]??ʞ+^kǿvya"=c_ +RߣS펿=PAqX?HB7JnC` }+<&s^,T0Uu/fI̺5A!ħ}ccbkΚS? FP(W.b ,Gj7;@ .9Ǩd(NLcb;Z(s[9d<5@5Z̞RGՇŕƘO ;4(v7C/)][R=|8cq9i&ڊI)RW^HgQ%f~}Dm;~ _ks 0oOwvv[_w4wWc Xq {ZeQSRܑGwk<\vËrxШH*9v[nxs q膎=y흾Ńyƫo-up<9с_?8R?Fc4~yt1󕨦U5e-n$-Zo*ϐ"SrzɌ^MuKAИ$mE\@O[ˡH1җ JL7 T/%!3[a Qa ݜDJXTR.멻i;]3Iy'"Xuf&m#8*#rUc-;h INȂe >ٱIV/c"/Z6ֵ!W:3oy$Nȥ Z ITk CG)46# ӜPɹ,cn&N(MZO耓ZTd2[Ē$4h Q(`_3 ӇLvpIcՊc@@ ҧ#V/)+*R]@$V>X.zsHd?JYB{f"B4<"6V#cA;(m"KCSEt,Ȩ3M<5e Nmꖭم.z-Ǭn\ƅz[9l#뮞vU= M+o7zWĮBG@(-C%BER,De3:1 vsz F m6;@sK4YV ƒg* )vP,PBGo6c۷OAm[U~nǮS4~-޻oJPpi4?W`.nv K!5fC@b0!api>FD9M{}Pc5hhˀ48 T`P<YkH-,ĢX R*e)&*xu!_:۱ǝr>yK;aJT%ez_GL'OF]Vkji;X8;ƐB馆pf)1qv!_B=P̎sQйd.=WPjX'0;_NBQZLאg  xK KGKP!9 1Dˡ#rDI!DZJ48-)D"ݡ QEGLf HH9N cQёsD+=JBPGb pSTU`)]3~43:f KC١@ H49ejKNB%9 ̻Da0ފn FѕQ좐:ˤL͜}bhg5)V?<8c! [4_Y^5 V"M!r"’Lp%af4 YH@tCJ@R&, yCz™7jU>dQ24GHK^[zW0;F\ٿ[\47O>LtÍ[ם|ٿ9reLZ&H ~u{ggoah$9,Oh:6{S9RjPfFhh;Dð 0gOE$̪{թr ?ߝ7GMTb q-q= /+~[ [_\J LNMQyrwǦ;ꍵ`z;ӗo܂_fS]yqlin>|za\!diWt a^/m۶.wwNDž^8B7Fc4FNFQNV@&^ =RtDZj@Y [{Q윋(zkL~W>ݿ=5s-cjjk޷M.o?htA5J1d 'eQcCX3hU,jb;\ u,Hbe:,!ů򰕩ڿz_lm͵T #*j"L܉34!r}*q sٌ9C_rH?Pњ9.d-˲̣P5Mfdtɐ.c@r!u!*)YOF?Dmy10Cf23 M{adGb3 ymFq 냙"T!1"j:Tl33#r6۵&rz)&@Z63e MSTi^ xO2sUUUU5(@ӝlfeh\ T13jHQ-j2Yy-6ې OmRLB #>eΣ"+\i&d( \erVv6zgkQOtCYVVڈ{vmeu ;i5OmOM+le/LOHz ,K olPC`MA^hG66_~5G&% Džq4Fc4FV8%<3nN|0$Ɲk:F+ܬ/,RE%\ZJ+ BG^ 6fPB M#\QVI,e 4'ॶ/y.cyf;zBs_xʋ~X uyA:uj`4pYD-HJs-z;6o LqH(!`a⾽ܶ#Ğ/-7]{rm*8h ry=5Ф;K[2J֑W(c4Fc47❷,MrnW8dfRβ, .}(׮޽{Glں}{֭quٗKZ"}& 7ݳk]@y70t!-Ch}\ @Z&XXf EIv{n#h 1PH>9L` Cp,1 ,llB&d uYR>ۍ20QPahNaɖ!žω9h* td QN sSEP$p14KЊ)hnsw4_A E?(1>i<[d҂Afo&e9#x_U!Թ'R21 X9P_;PFrEJEDg6B5 @&CJW49BAmD7Fa)`}B8xNe /,DH%=}كMC47 rzKW8$F@C,DBVadUrE0rL8l?! s}, ĐBRA@DetAއxqU 3 PEQCٺ`HWU{E:!x=h z^Øj~;`h[7H`E R($-Dh2呲 >w7/r")i+ d\Wٵgqqgls~a{7-7MzN]‰v ТPx %_ X9@iOc.,Q6 aHh4$*21q7Hj^v_ Fd[>3iNnz\ڝ6Je4F|yX;=mޯ YE\jتwBE!@eC՛N”1N+/ž}}ssH=*f'y*TV'@s)!Yv!w>묇+Vn}ɿ~_/Kn'FQہ,"iz(9]նBS-bI<2&Qk* $ t鑤DČNߊ,Q&&㯀 Rt0?[Z8&$\FgF `AMS'ԦdA%;08 `Ғc8=I_%D<|/ړ7s, =HȐ>Fê#5L!SUU*H2ͩOwƆs̑‚S^#H&#' dF 0~x}ͤHJ+h"ۼSOj 8C"mhaϬvB5eCD.@Rنν`@DAɞ):_@mM-f0@dPbvbHI<΁%㔨lo*D+€z.u[d ̀l*XR 5}Q7Q.!ŀV@crd MZMlqMpBp_z]"Yo&Hؙ-,PX\onxenMux~5[==lu8SD0 V ̨8#G)b|o q?F2dA '~;ky=:a%mk?|w`1:0R*Y1Y^D5xP-,Z!ɴ5j*GŵXC` -%jADcݕek%GHBV=JV"bhU7VzCfĘl S?+q@Om! fZyXPȈ9,Cfx) mnsbuTn`9Q<9hdAb@.g>aPWqaw}bRFT9%&g4KoGX* `(@bm/V'xԓSL1":=X)I6_D@̲9tYGEj Q45ÓPq@jtN|tG^*RT8b&a.HфS"r?kS}/^ϟc!)5u%!d#A`QeA}28x{pˊl]}QiV cB8͠Q> BЊ8b FF3h"(CQAn᜽kUUι ~~x.gڵk׮]]zߺ^&[rmXcV gnSVh!P Yd5RJagWQQ=SjSv[nȢVz[cTw/ge^q{%KcavjgÆ?6 IDAT};͵3CC ,e,j0(12d!cWK)`m8 ڠ=rAj{dJ\%>Bn/>7؜I[Uol+ZC7r&SI`-L#Ln9biޫWunZQLSՔRh:"P˺FH')a&)TZ)fPDwR٥pM@zL(x_Z|m5; ֋{o2W\{wcÏ?_a}mmZN?wQ1]3xU~~ͫWd;uoGLOj"\wÇ^pUO~k.9{}DKz_{C>_XI x9tŧܰYG+kƷ|>sΝ}^_~~9O VߙVdz=3ubt(+|>`0 EWrVҡ>#=aH&GPhYgtSYJh0c,CSƼ7`>T7,9F@f@`-Yr>H81CQg}]6 A  Ѩ}J@&2ZJ& C5AU3 x"AIm$1$aEsU)Nk@?&Lfg["AkէjDYDW;O  b*j-dFѹ^tטm4Sp( ^ d7A9҆2lSBEp|dJ#׮|QB&uQ~.@ExF]¤gT* _). xؐm #XF!w6}XF}2fyY!X133U~tٲ _.]n m+ku2uyn+jEL]5h5XFgS㮨BbႰknR@tQ *T W]Ʃ+?o\4AfjJ&9v+3SMLjJKձ=1k!RUUQ4ܣ[EhtsL66noL$m%S-PWT |w-j.Z+; d/Z_0=\bJxRi1 0MA1!AQ]Rh7 z,>rkǞu }>{]_y5C/ꅳc{r>z?ꟿ=%kN'_׿Ƨ>8[Cvׯn\w,+љW;by:]ozO>ln>}׽Y|~ݛo~s~cFFsXN[/=uc?8gN \xi{}M{{_fC~ۛ_|8~pW}V\3[Gp211;Zv8x1s'f "bʔjHu:8>>>46CGU>7%"L> 񀲆8/Jk(Zo*3;"&LNMm633޵;f1A l(!tLRY=DRԘ!HC\BƓ4TCI4DXL;x1+67OVv#0IEO`$9TK&|5&"b>DKcB\+MkJH6GNg/omz{n7޵|RFmIMjDZRh - e!9r+~PrrF(t17:[Î> }ڟ|Gݑ_g7PsmqS/|fHepuqFȆݙs!?B(*1: SO2H 6N3%WT7MLTsJ$TLq1FKu1uZ .FC_btw)U-{\jLJĄDn\TA;qe-=;A}[O7qʹJ/>땧y?bS??,'am8 g|;uMG<`ۋ~vK~oK}Ζ aQ͜2gMwsvlIc}%E;ao]wh;k&ʏx#G>mpk,‹&.cV#Kl^dnԴ֪unj(GB /e17 - HU(vYk,YsE kCG9SOTka~EՋT$¤B*OG30PFp lw=|1 0)cHaydC4͙ !H YGzZpMםRU!( j|9GO 8$' )0ޫ iHeC=*41ib5 JB)pD(LXEVusj".vE8"'0oŘJcؙ:# k$ Ǥ=S3~CͳpԣUQ5cR0eBLJ c%ͷl+_;/79+oK;)t烣w(Ϝu;Oy筀|s>޾n]S~ l\es' =gu_y؞;x~<8EgcV蕯;ԗ'-Ws{/:[AF8:3+\D( Eis{(x*U=gNm})=QRGr70UO_zO7R߹|~cdF;퟾y75OީuEswo{G,vx36/# 87pX_Lt{Ύf L>8&Ҩ ُ0^T-6'b%D߶ĉ;,pL~d# A~^'hjD>m("XEN0FhpsXTWUUM&(a \c&ڽKC$b:]zuL򾊆sVG>KQuKXfI gKdF(iI3eOeg 0pcqă:NCaUuǵrbc2wϾcw͝w 拏yyir?÷ǎ;no>nN{͟8mǯƋ9Ϗ[~v߿lgO|;W|~qݻO8}Of>k̎a甞D<>lVc&m>s4PpRz<4[?勢_IP-b6d BtxRiF&=66ă m a!Q{HFJcWv>-%@nB1:i# &jnT~c }?#0&5s]W^ۓṡ}%ʻ>/{G,cO~3OdOmY#;{=gp>?^~M 7ʩ|nc_ 5TfV4";{UvU_84FEQ8vLL̎l͜nUUz4?Wx>sw pNٛSzp@&.x)4=mHgRҥ=J k?VVZD>7D z HJDԧ <5ꘈcb=\{(H9$q'sК(M%VL&PØ$J URG̃(IWc\*eA_ѹʵDZvH9BR|!|c!٬J/ɬ'BHI1)a! fg|ap6"V8x(@ma$ALʑ*MjiUN纠zW?Ep/N"'7BxE r-$4ji۾G}ڗngˢeٴEX'*ٺuк nb37 uCXlñ 3 Rw{NwF=D wrP7.zGj7Nwt:w(ګɺt'~8wJGOz;##cKG鋈+rqwܳ]?YxP@cI??6U?* ڠ%9`"#!g)+H2"X}23/e/sfx~M:L;UMUD\Ɇ"_VP"UhCEq_ #*jk˒-``Fqt0CYeE OMU|49}t7ru^|?|~0Պ.,5sp. siL͉ CboUEWI!ЩΆP ETի|$J bZ!T z?JEj>DC.IL4jĖ1=M @f1wJ;%e(Yu( C$]D$CJ bW{o"놲YB`U+ftJtX.z‹@2Y轟- 2DRLC($B rR8S"RÙc_$xll<6[HAL U\d2;d~(0JOf^$F$Yn86C ]mmG[MdƮj&\HTȹ.VP,%D4Nc͋qRQ"sRQ+[=1Ϩ  2lBD"k:q3$6bvW瓌E~!j^8 (d܍4m4٤xS`+(7J<4ii4yQW։n^|ٚ8_-[lwӂC3Sۗ޺~֎bc=tHZ=V! vF*4*\%1UKH %VpVgZ1(QyK. (dA+jAK%c+|YXL$ǟ{h1/?(Sf&.Ϙ6tt=aӓ~&eU҃έcݪae z6)+ m9niSjWh;P:Q&/;5pוk~8Ͻཫ_{_u儓y>;[[{/Sݼu!N=sOKwoݼy{۫mL?6mжrRV$%(-gcT|U9Z, ъyΒnNڎH1NuXegBdPҪq\Qb1+ZIi}J1/P x*GD+֫vI_76x[y\ϊHԹr"(WZ7삘B'(}0A`E"g.#ƻC] H֠b/2Q&h )snF(P IH@gJ9>>PGDU! P"ĮTU,*@fHX(D* 2S_Ug g/Yj4 e(*!!>E];:b%I^EˠjCC[EZ-qA2&N^*2ExT.b&R sUU`Ef=#U F80nUqYt1ovaUfI*kgD@sI5Heq%9dGڭUzw} 5X$ j;v`F앙Ϻ5H`ߍE{\ҟ\{}Qva2{;tZWɭ߹tmt%ݒg:ԘtSTXxgTјq2]j,Y+JuLa!}=*[︃vsC9'O~x|?/rw[]~է=鈿4=h?췾 {/zk_kȲݏ>C~ͪ'Oj'?}A{);ye?郓v; 6C6ho$^*T̮]{#ٕ&|L|)^2:u[rT(T[Lw" AN%L&hTyi2Y@:&tF;WAUe#z4 tprҩPHbL[fn7F!fmp FL쫊S%0Go{I9.%ȑST"QFqh"hJWW R@dX,Lߒ٫ӽ7THd$1WD]%Aѱ3 Р;ZۣkՈ(m POUE3@p&,1vDű(TN,/`+Wl4VE)-%#d^Q$0{`S Q+pq?H,"l%QL\.D$6jY"(br&OQ@⩩jRvL2PT)1 16& )?pɉX3Z*d "I&UAgbv6EFA)ng/dʤV]rDcU0]F@^a'`WK@0Dʢ#P&V"dLTVELd؀7c U_M8;l+br}adܑJ( qQo?HFZwmwwT mٲq{wccm [lGfq]?Gשnj/q6xmPTεE2tӮln}#ݡ/VRHᇼ( Y62fZ*D{tu!1/1G=1at5^f}=wd=;?/zCǼcކÀ cQ9(#kCELIY0?N8֚C >bp,*dN&7|CꡪXU?'*\FAfwԙBdJ1 JD)Y@BACn$Ӭ;#DI!L9It6hҝոe` Gڋ$cbxw5$qD- UQţqDPS :TS R0Gw$b/z )A! wFW-Rm*@iB`b nObTPaf %LM-LZGDA oiϦ0L`KH?̃&Vݛ#Y_s4UZڠej *ǣR 7 )]ARA}T4CβI[D\Ym('uWB-Qu5E6YN)H=p= JUu؋ڠ C>w@U@t-FsSJZ8%=Z,&Ad! ů jSh $ X/P1݅X%=BJ"I$P` |$$jYϋx#ԝ|1 #c!X)xm_Z,Q(_:קv(?>E%չ[1G$ [DFB5N4հK* RkGع[9EstW^ "&Ήι qR[h8)@`2QRK9HkUb-{=L#MdȜh#st>QDRUU{ d&(Dܴ*ӻ2d>DE45 3)2^\''[ 6 VԜ1 2jY+d8ャ\ MrI`#N`V ƛA}8w!L\댆8q]eMm3 ZբI+.k/ZtM(N5h(Pun\x>0;_&i/jI]sUE# 7Y *!nG7g,u>ґ0^K>_ 㚎AǠ o%Wi3@,Evh&NX,7 hF*jqv8biS/"*Hƨ*Qrp/rQ!U{xnnFxSmph9ڥNqHl4QGSh!D͡|9M\`WI*mZwDzm{ڠ #!&jx:g6u?VKFH- :RLڃȔ 1ӘmΣ5QS|? i fplXY.1qN3RE@x0 9#%L)",T?2C{צQa v\JFب,P.gb"j%kdUhߊ\lE$VMi՘+%Y6 ,8ςyf9D0*)Ic2[3FJd iA!)%01s4cY(9q,# xRR@+-g%4՗^8 Jw5ttk|2|3\>9SQ`A2H@Y`J(H J[X+K`ĸ\(T#&1kYT$e.3mR 12o"I_T 9B,y[hoeݽn]P:HC6O].SR۪]TIZ;K6

o^:clx1!ZB* [_"^ʚA|sb/ū?O 6h672̶S@3U9HikqFyZ<둘nセA+z_51y/>x` ڠ c p2¥٘1  TT:-H%A+CFT)AfVJhHL\{Yy3:(D2 62FUs"#kȐHUUNcB3EDeb! ShҗH5"2 Hh-AR`9zIjRԿ;&J(' ETŽb^QsB&] Nm֐2J;*k,%V׌&FDpn"(1bI[4z rz& f+^"8uX}5+X\0 c9*lTbfEYa&fa%y9fSOy/8593-#Jhneh, ?쥀tՆ4U*Px"It!F4}vp]h['r<$UTR_զwTt/Y)CI&Cm7ۭ|xו'Y׾;ӕVY-UOQ1-2|l- sQ1F#_mD}B9 v{yh4%Q+W5~7n8*♩(ZV? YzAbF$͠>4* y#>Q3bfv CĘ¿3 3!?T*xQ|ZbVpӝ"d{?;ﺳw"6Fk9RL+O da*EmGދ0hT)WE! i@1n=G sh3.e?ۉۿ_K~p/}}-{~~/vqԇG o`MނS_U4B%(W+B6n@1h6hhB^P}L,B*|a%Y^x[&@ "j9FEf)ޡD&JA(59cQ%*z, y\D[ b!c Z@Lڈ}hs"&8 ^~G8ңIb,g" o2, Q#_遝G-Hx54Hj|MfK'iRgԡ0PQw$Ύ?˓vj3I6L"Gql(eM$}u=$%Q{XcsUĐ>G|J̈P9&,1GL'ш$=SnvϓLC8QrK !5ip#bWf._my }5̸ S Ls 4"5Q`" O#$61D5N$N\=!D)>_%GbgB4"bz\[$m…<822211e!S$#xڢ2u"I H:+=)UNv)N)#71 @\);vyj07DB2Qa Zr +޼i$89ׯnWpƑM>S7My9޼ϫw\/?:>ژYsIx,$͕gGE %QZlmm~m-=`WS^4"=1/IFMiX=^Db du|=QB"2"_T5 XP-2}PH.lR"^|UTLAs( 1k66RyZؙ+Z`s+1\TLIZ &r/ ǵl2H!%Js)Nʙ$#"=NH-jO NFd]O5!AW!c4gw81w{7 )nuM `t%KK YWjz1_qf"_>ŲCHfJ"LI,RHxFd%`B:_C 21^)U$TW|]Q T?V鵪N[ IDATZ튔g_9Dž=8^G9 lhz-j"m33ǩ 7ܼ_~5\kew~$0 ͂BIՃ+:7Xyb)J vjJa)J4Beu}ޓƔ0*-3[MZ;RzBڃ>Uݗf~y~ǔlSۖ9ڻ~;kkSHӏZ}9:ܜk^j'ߩ{;8b|zET"{U>l}W?}3w^{=tɩkվǟC6 _:gO܇S1gNjxK.>:b_GߏXC7w[_t}{[|jjC3K; \[R%7NB0AA{4g&>} @(9hf@&)> (IPe@mWY L @fe -F`%TH# x"ڒ3h0<hZGnt'cttw+so r c#gtD΂͟REŋo,e!B =!D!NPR<JY j4 mfëɨ T`Ux ~_AxPv,n%e4v*EkO% ^u BBZA FB:4o8NhQ|Q k.HJǭvkDsԁ's##^"q[\/fBq Ep%/_\n NȈ0R=[V}q$i'0i"^5b:Tv -F^3d3ܜvg^B(D؍{+1ZUPnevӠl-`hh#F/# l$)G@=qEQw;xj[‹ +&,Ea2C+JrB/{^yljѯ]5yM؃/}s~uM߽k8+ry/o( 5oБK7|{WVG]pݕ%g̳kzI}'/瞺1svɅ}<m+poK/^soo]5k>˾xCGw&xhp L660(ٴ;h6ho$ʽf u@4N@\h )D\%zՏCf2f L4DHqrr+=)4Yp.M%35 jDI& >Ґ ^1YdbUZ+lERާay~$'^xθ?ve'mwϼ\svH̜| ŠJ~8 g|;uM;Dۋ~vK~oK}Ζ aQ͜n&K]cs;9;6Zcñ;ao]w5^Y\3Q~te-=x`;p 2=B5$185fJ5ۓE^bp ڠ ڠ=GJU(MTpNbz¨-EByɋ>~ db}?2x9gyg}ϏȆ7H#A"vO>$}ƙY8 1 BҒ~$k$4PoP,מ3}(D_A#M<n8jDHY?⑔-"b{PوQO#wJHeI4(;pe5KE%w',*@=E+s/\#S흴a=IA{iydo(jt%}3ifv;JEI2oȍo}H UUݒO,e9=1IcZ6Aɣ.*J39HW{85`\TwnZ0ej#k1#Ȓ~"= _9g3{+@R\f-60 lZ("aM%ƛͭRh X@tNAx57HM rP)ovk~=Z[-\ ЅͶۨ Vb rI 02UcvOo `dūt!4wNlsE>ìGi O/yN4wwbL>saҟ?BZ{pò7lGbvp؎OjW*zcdwQL{ohWUݏLd a"P@*U(( N8E: ֡ΨBZՂVد-*WAu c!!!y5}} #Br߻sga}g=udb& vebf&jV-\5 -ccmOpa)X@1LƶPpBJAAB]s:{:ׯ>:٩PnY+(UF&hvbh鯥"::O5HKe-9MR1hp!ykl*՘9AF=2CoeZhA[ȡ^=l%RG/ $lØl/LbɒRGd6@mb40t E"`6oX?ՙ 2y dC_ۿ#̜twP6t u" 1&{+]Dbb6p˜>7>__>?8]w[s~I_ySN|+Y䞹TIző>m1x/=G#l v}ϳ=q_WQ{s܁Syzvl#|ѡ'ȇ>}~IO9q=-cȨD0&uhJcL.O/ƢqqK?DLc:i`GPWf%싇ZG 3T_3Vֈ0lIZKfa-,1BwQw(41zݲH"jR9>V4 e3L j&T)%$sPͯ`TBJatȨ.>4Qn @R&J1z``z<G9gHCb5XVwj0`*X(#x%_wC0 RZ)95STX6:e?BZJsbt$;@(1}r(@dhXԎkGj+lU1 -`\`4ɇYBꥳ";T豏R$y!,n!bQ&YiGd/Z|̏!<:4YeĀm$"YXXՋ+# ̎P 5y۶ 1@/H9P$F0&}65f-3X%oX@2pN0/vR)QyL,!} 2lo Nk5ñ;)`&6񲒼F"fH}nF4pp)_pV#)%5X3 HD|觿P y}d6II$fO0IF ڴڨ׊EdQ D #9(QwՓ3S !j0ԴRyu IpՒVa'6)%m|W q 2T&, ! pFd5tpuZ&+:lv+Ѐ";jHG*[8ʓtU: /k"qIp_Vȉhz6ug!t,͗U>=! Oz+yC:SۚT{k^µYI3{ rn7Z @qQ6&|yf6 ;L`63҂s1O 0O$ne6 ͉f/[ h|qCm fWU@SiY-nڔ ThDP5̀ - Rx ,m-ʧT{]}S8}>{6nj,LW$zS)! i–GW7}gl96n6n"! VX[WgGya=iVg`F*C`݅~B@ +) BAb%HgP /L%cc,mɻj 8X0r*WPS%K!(,b ` OZZ$/pMh$*VrsfhF#G36dTUuH Gн?R%FGF ƊQ5,4$|mYaGjFm Z`0a$$LÎSBPEHI(f$6Q D,²4}K;͓SDӒg/ ks{C35+y]RXEd-v#߮J9PվE6n6n%\5XuMBHJ'*a7H0|:z]*PW RB0 =ЃTIn- TU>r9*3Baf]?1(rvCߦ;s pUoxDa& C5bǕ *Q7V\Tl2GY1Uy?3o O2<H[TȞau\GrCD. B7,@rjH%$|R\"tnD仞Ś)Ub)j'1Fa^%[j[vjΠp6ڍ~k8|v|)*f:B*n R⑟ &M+ t7y9::@3 YuۉcKE8CZj IDATQ4̬8҆`+RHH{V EiΚadNJa.RaJ"rmPEf@l x %2'fg{9z$vMHE#N< ,#2 sַQJ@Hi&E8 fLPAC4((0"!R)Y){R,U:t]KTkT]ΐc]_RuU :T/܇xMhomԪ&Zsc@ Rh1( ydkхT^1Պ0Ȑɋ&€@(H_q9mi ]WGXH{`] PfIP ;$@,\ b5ļ!# XC`0% r`5d*n,AAq^H䎠rJ.(eI)3͹g" PX613ʎ8[' @3[h2ٜQa _,/a=3(k8*NT92CmG79]b7-A4M$[@faJ&AZɄi0qLAf^[ ~3}ʵj#kE2¶ ݑ`;d@B @n<جv[v#qq\V))Q-"ۛ`B[#`7:ܶL)f9tմ6nv/."sZ:DQj ]jo[d@4 ۑdS)@g4^v j6F2DtN>*PFaT~JYKx1#ԅmۀ BP9.E"HfP SǑE,Ӡ Ĩ:%=8ah{RRRP#V1E  9(,D/`b6"M';8BJȊ+ÊB6u6ÈP?J\PqEXU-e[#nnfF L@BD*Nk9 x pf=H%,ak$"99G9DJl^%-,ܶXRJFB)KklpBqՑd% Cç ┌UgD:Y%Y d]YIؐYHe5*df V"dme\"$PH)I6ÑY <P3 &H-m k'>LkY09@{E5-SH(ig&+_l`uSj"7<1L}]^yշݶ-Zמ{|ЁiǸ۸ -%;-N$ Gô*x @lxD$D{`^`XGEt)~ygn82t0Bj/*:DAkGՅP>DFE+X@bA-n|@<*1\HΛqA=R&np(E!$U*Je=`TR J̓dKX8)8esL8gsͨ2aU۰ (dŧp L(HH7\NqLUHn 2 ̹5s2N w!]ǐ@"N7j3 pR nR|fQi`8$fTX& {4EHU䤡\e jo7z&mf}wÝL7qq[<"F/.bFl}O .vc"`bt%ܯ~cgLN-_~y8om?n \xﯸ.߶{q[R?o}{?z7Ԍf8B#VDƮ^XO:‰߱ +W-DV%Pnl T%t2 {dq#Ci5zRd-.P2RpkeR|(8B7VXX\9Q.B;D aF'2҇24is.ZE-iwԨ}M߀ L-ψf뻔 0:v,03d]/ƪanG =,NiH"IjQ2t҂;,P1 u"u2̀֩WnrCNɨ)Mſ5G▜J~Phd#N:9cpcҊ G8Fkj ,n0OdOq*, WX4E`u@W?t"k)dE (^(ml~ec}6~\wqox6n6nw zO'2Xha j!E|?4@bly,`'xr R0.Y艰%Ї9 گa/fVGW1We%Z// :J7CO 6n6n*x IO<ck׮}[Ot`Żܺb}gjMM_Mڟe(y˗/?묳o=qozӛǸm6#9d5p;8a%BHYN@PZ2ZY] $QʭkG|:Uʳ"A4ZI$}V,E]٭@*_mvƬyxT"UR+B>2PUuN&bVDdzz 5V,\c!jE3_QW ;e!_z5[)VpP![&Hjm ɬPEPX)U%hl3#u0p"5H(f@8/ @ C޺SN1à#LHPvPYRV!^Z~<qDm0Lɒk sJ` ,Myf&d[en52 I\]7HRJLUHCauQtv \cD!LOE"IJ DnqqqۼUع5jG& [HQOQ.Æ%]w_^oUX^o o5Dnݺ<]tu-wg]\/|p9PyժUt(wJ~)} רYg=}s6MNt'/cv`ンهuYo~[/|/}Z:aC]s3oVN>?셯>EOx}۟ 6룿 ( ZmJ!J՚skIJMr&? ٵ };e#uI'U"D 9zA4AP%AZ+{M\OOr"D+X*P:fF 2YB$MD2b5RJ(~Ίu{w=K_x <78iܷGmS׿ǏkO PڸJe afe(71O/]0CGszͯN9]v}~g8D7?{ץ~S޻} ϸݗ[t_J@* A[5O< EdtCR|fظcbP%9 !˺jamJga۵^KڪjrQͰ0YfT]%}8ϝ }Ř@P0n t('* Lr =(I2g-I'm!yq+nԻC7 Q@ف80N`)nB%%_ĀbaN L@Tv05AM]= Hv-jޞ;MbV1jR3s]@@ј[f.1|NvCAf%sW7b}Ѕٮ+ʼn9 Q=&.7UCD(lRP`ܪ? "@*8 E=}ڬT fQyY`WA*6n6nvZ#Jdvk Kfn<ܚRJ"m86h~_Ŷ .կ;g[o]ͼ8w\NO߮O3XOݛK1'ត}EȆ" .[6 M|;7WO>w_/~pþ޵6yqe||x_z>}Ə?nG÷^댯oDP%srѣW.',|o_vCo8jAG1P\z>13ϾO}~G<鄣G+?9pهx/FYO>Kgoݙ7]}\{xkJ+ U L!XX]'~,H-DKF2! "!WE WhᐔQ&U/5/$[ѾchyUd]F5.Zbέ6fJV݈hU*XJt( G*7NB9|>q,:<UPٺn18*Hh%v*^)sEǤ ,"xq,Pr/G6g[͙HT<D?l::NEGXh[xJRnmm6kSrGAY aYi XDD0RoG4sI͛*VP{Yj՛&q$Ĭymzn CI"wtH׬Yvmn֬Y)L6ѣ#^v? _^stĦW|> ԋ~G?o]j.>xߗ?=~SOħs6g=Y_җU o6Ǽᓗ?W^񻯼O~ >ѷG~ۊ.CS07_GGM8O{3v6a"PDѥ(`[!"r@ *r4<flld6?$YJmqW9B Vp6W̯?XzE֤%.JVhb.}4NVh3p3:Le!% ʽW02,H.f  f(Cwfp/Ȥ(`JP"JdH"XX J8"ئv٧RX @2sadFa HIթ&AxšщXG"6` Y_UMH3I$~RzNrj R):Fp IDATX0i g`uK!!^[RMY,maAj*WC:+.p%GԒ*:CI{[QyHJHfaH 0V1>Bcz$L")S-BC`!ł_Yq6n6n㶹,bd^4uJ .MEtfd@ϼYߛX/ZpjjLMM=ǿ}Ozʵ^Or͚5.2^O Ϯ~7#θ,puܺb٭+X~\Wq7[^p^~P\|EX,}$s/F% "qI*P\"K "-DBB 0M ygU9K.H -J )ίչ#E+qP7"'q\J’ S-<<(ɈJP3 pPJcW P͆DI@y:T4h "X2n6n'8I*!""&F+(6i'Xu`G B`P]2e~(߀dc=weanY~뮻o g^qs;v^]r{Ϋ߮'}|0I/{/w7e4/^7o|Cߍ{#<ăz*щ ϟ?_kuyʧ/y^`ߗU̙M~̗nh#n;o:bؐDu68ok̗rc}oxT?uNn wrȁ}k7wawzIo~ӫ{#_tG9 (-vr۾-gNwUxo76o}hۖHXX&>+ENfF$p^֢93!4M^#"#{ߤKA!zqSMB@Kp* cxR"j_CO[!7 ”RT 6ᢒ@DuQRSniXbݟ2Mv:!*"Ȇ';6 $BD@H\Gh]ՅSfAbXԂ¥wNGyHNW5*BeGP`̒eI(qu ȉfj^`A9S|JPx Q2 m0 jFTrQc`Ka Y9q!&CXZyO;J9&PTDL( 51k#hF7‹M?)f02+o?PKZZ ״-DJhG NBs ޫqqq44rjF[9c,iSAR*ύ6mpA}5~d4;t򛯸k׮m繁q/7vq=O|7O^3St-C C6z?v] ?`0_۶\EM0p PJȉ7~=bG8yOb33tTuŲpڷ9kvvz_>zƏ|{NyO?h-}أ?OGwΗ/{;pwC3n]m=vi5K(0m+1Jd SJT)EL7@܍ ecCi:0Jy}J 7U:FJ@)!(bn6`afndtL)D\Kb#8_j|!_W @9g]3oV4 9@Z1%:jF}PPB,%m7*7܂aVb)iqIcDbDDPxD("ul0F΂P")挀&KyP ,ՈC@+yFL.R)  YPd&L 6& $Y !}Ұ;B8zBjG,D]UpF#I) ng9XXP7^I6<83 *oB,Tt=rߤ3`DH=-dY'퀑xp `B&qSiB)f Vа_ߜsٓ}=`|Sq͌nP"LM>BE j+B a&䉔RY*F7hu],^tO~|Ё4M399km۬vwΗ^<`tlЃm/|͛kfo~x㍽^oUn?/|߯^>mO=w_?S!R>5ck8ИO~'uhO|Wf|m7pM7tw._|zzK.9CN=uXlr%~v'<'R?‚c۬K*KRL%Kp;# ȰU 8gkN)Au|9,؁ZX`s٪ 6lL8s]WM:U$`@nW0Pqn%G2[U,u^WCY!BIPeL5CJ ""bˋBsWDk@7!ꐉTb6+~B(D8Ѡ.#FPe>*Qd4tԛE>% $]BCTN?+cALAQ'6zOUU2F$Im eλpEf#ՃP%!B"Aue 6 [$L@JLSNXÊHavɟs#7yq튅 wv џ( cfSlk0t7^ܱG7M9~Er /~9{=̙8 L+vUڽϋ<C;Wچg?}snwx1Dz{ #;>7G?Ǟ C#&jXǯ4ZQjW`f5Stpv+y0 LΞ<渧ܾr7 JtG?%7.1WiUuSZBMxU$b <3DEA g̒bvb%U’]k LBT\?V*7\ {jUߢKzIʄ`e(w O-dN BIrBRz~Af֫DT i}3ˢ T  !C8*t =`C;1 pJʬI.]()%f |4';:2!gFDV ^&.kn$"A@$ns0[St ɂ[t].3=CG~H`E)g@&5d8K[r=2W &@WQ4P"~7,o-JXRּW5Eb,A"z\frolɌYYnVxXڎkwo?>E8"BH3sH E$fd32߭=yN>_{Snϟ?wիW_s5_{d0`055Ky;츣X6BvS\=F&"| a8߲wxѯ{{Q7VW^{; p]PL0um6jxQ-s?¯0E]͡[#<ϛZ?;Kh;kNYv//eo_f흖%mk0 (.QfBP\j% 3Ɏ\ջhA8(Zb׻ơd 4̢E2vG)Na`((d'eO0t9%Dbj@)7 /C0+DتmqU1 A p5nad)KDuY 47_S~LT t/d QJ%(v"qa:^Z;j 2BJXfV9C>*;. !u"e$P)#'Aڈlb>Z)"q]$na'$oh6?ꨭf?c .=glݿO42aqf&л6 ܥ_?D -$PdI (5I,_?IW]uO~f0oܽgp?RtMG2;}4WSw#7{"kw]u-"g Ѽ;U=ۓ7Tƒ2 5M]7u;u7ǹqeufDi\瀇?=XA7o V޼UEC |p0!D!CdFF1'XIa7_ S]Ǻk"0EՎuݢX[߹gH-`U ) $ 6:C:~utHTa^٪ huvmaGg&!US3ZN)uw8(^(tUK؂deَ3&YXv 5j \M(xUMzt]oKT/څ-T5< FJJu^׸a3 *#܅,ѢN0Vhvުޖq7q6":^f[}n  EM-q]shDzKt>[yayN6{{LJ]n`v_6=Պѿ_cV}@QәDK+sκYն|*UHae 3&=O{ʺWe'%7t |$2|=Nm@f3oŨΐ(~0^1GGOcJ-u|6='>'nysc '#UL΂Vk̜T8")SJU@$bhY0 zSN;zժ9sN̙zyy{춫Fd}VZuÍ?/̙|_^_ZM̙3Q+>9jv- ,e]0 &5KjhC]-pW @TO,0*z\W)%‘(fcEhCN*]@hD-ЃLIm=,% A+TRxأGʇ-^.%X';KCC"*jTx:c'V%!&J)|ZMZXalk %BJ"&E ǡ q6Y4RLrcCgd+̤Be"6fp㼘Q% dҫZZX40+D9R)l^YpZ 0?Wd $.l?ׂ˧hj&f슱̞bI RJHI7nj9+<ꥲwh]ҟʫh½?R76n6n GqNJBtb[0X-{unI? Ŀ:n6_C PFkY/%p6y@zoowKfpVv5[LJ=0|߶^*GᶚieDXcZ]h=/ϟ3gك`0,Z0}Yd^d,Yb Dq]s]fՌkkjɒ%ŋvyo.Xv%^:V_qjM#!b>ɵ 0^,\귾sVo͑̚z[daY-0 tIAѵ윳%"[ΐiN ~8I:`BѢ\ߊ}mc(C7 e=h#WAݐf!bH0QjV @eYRA}5(*{Zn{ 5,Lsn4IBH,J$U^TQdP%,&61 IDAT|*<$ӒFdf6Crn"g\Dle&H5N1Ʃ"݌CCREa6U׸+lgs#YL"I?lr߳cӀ; i(N:q3ܑG>_~+V\̽^oΜ9 .|+Oͯ~N ?X‹6q =#+<7>t$/}3Ѝpضsn-ؼm۫zŊ`޼y ,EaSm.%GmvK7p0,?{`~> ,/rafJS@qЁNd٣\#$%,^ DRvHMІJ 9Q#Y0~hq5!p01Cdpƾ9+P QN Kk}?0"cw!(XןFy0 8 >4)B;ݧþU4KkNGuH0ku Ԁ&M3K7@e Bi=k @pT.@(ni!Vt\XR=%REU2`Hy+HR;Q\FtCVʨ{B}@t7ئR|"%W]eRA9)7$MoPR`nFF3aDk~14L;^.8p6l?_DĄ&''o۰my38~vG/lK_Ŗ;|Uϴ?=+V^wFo}:ɵubbκ/nP|?}i-[3Ϭ_}m=z+&$lRJHz6[{t3cxuwg"6 m }(-r=5kjaڟy ϱJr}lW}&lr]wMLLLOO̡?ZjʕmSJob驩ɩɩɉ8fw-5]ܶ?b#r\Թ6,쌉E^ PAi Ir'PSBغbW8c4t|Pb=i(!4@K&v ΂,jl=dp CddPw{Zc#XIB?Kf"L" Vb (_Ղot_8U A_AD1S%c ИpukL1 9$!{A.ĒLR^|;>U,Kv "`q6Wf4fڂАN+Bd#-%w+R#"|rV9 N.9 ,*-h97 fSž#G . 3VH*>X'q\XšX= G$]w]we_+^nD ACDk֬ycu7qg=qۮ}d8Klw}e# Һ?p<_?∗J-wy gęgw~sg]p_-8Xc)z{{w{߾* CFV6u$L~y)BZM,kW_}:_o`.w Z5XC幞y)U+P)_LJgX-,^*nW^y* LOMYfjjΝ;o)4l/|8tιm7|<| ~R:*F z](# ),l>Q/c_~Cp!Jdr c-څRQg;R͖X-*‫MSKIBTǡH6\vc KГx±G+A""9G^I'9G%zKbd:##`*XDS zf1hcיtЭު .jf…sY`ݼ1ty~O.8>sl7~Ѝd?og㰓>+G~^_}Wt傭uH?Ooy g|kGYo;p-Q_8f^aƃ̈́bJ 8~aS/AԅK?@VAuz9%O=Cv+V#M%?gO} $}10u_8^nyv$$Uo-߻ۮkҟL@Ci\a} Tva$T`h.Z}37vo`0g|}|;]`XFf~]xƛlܶmΖO[y@;F}`rCoR jF2.3MdQuPXi^ڶЇB*m UX[h)%EElBdfn+2QɄ4 wuC7|z:^㘑Jyck1kkDHMO*XvI %#»XQZD Ń,*/5H-;?P8^7\`E A o@R7Rq G?p sa6 A42b0 sVCjScq*E!8VMRM P؀`%.!XhWVbJe&AP5%‘҃92 37W^u _x'&&pEW^y/!"ًa/ nԶfm7/-_sK='mhb~7_g#~/GnvY7tպHTfeps.V;\Besslǿ6=/=^}۪eˮWq;#g\yy՗|jW>s'~K>UI0Lq3no۟ %_ nwy1;OR7M7_r-㊕:o|_87#9g+97Wؗo?|֏}y6gG_udǧN}HR^:ky=,:vg 2vxm﫯pDFOiJJ@6(,faփ!GZt _S0ꒆ sv~/^rU,dd?׭u,VUۗݖ5 (Pƚ_n(qn;h.S(J-3h ;},ҎQ65iǡk[)Q, f%BX:RwwPIP- }BzC"r. y|ygTMjݦ֐Hj*l[-R[k."*5)%:|MT)zcԴf*&E{X*/YtdfgkGdUj0E_1aH ij M˹M@ 0"64ZAEl2{Uwh?$a#&r G(@\\F,H`ض1hMJ,ۜ> Reip֝{b4U71XyWNȆ 9# Q#Z}V+q wqܹs'&&4kҥ^7 _S>p7X.\};^񂿳34˧/HaznE28D.]rmK,Qt>7}o>_CF_e߻yq_׋?ύ>߻o{_>;k>}NYYn2pw?}?<[swxA`Co?]X.c?S:~_<~{=9<1jl8|K6m[|ջ>kn΂ؔ>}|qtxmrƄ6xkx©_:I/ǝ>r_{?ް.511q衇}X9Ȼιl,}[OϯGKyaiޛ;9q|&\c?怅 w^׃V"I)Q"" cKjƃtᚲ)RL4EJ1F18ꫯ᭧;~ zeז24 Hf 8r)y$7 d7{QJ !JZ+֤"Q >H̃`5YF*b#pX&v?th\s>OǮ'lړ>݇,\s{[>޹DSOh8y d=ܳrJXhhŊW^h}}bߨ*eG_WiBdnjg.Ə~s?Oo2odZ;b1//5Ʒ9o>}ąg}_pцKrc=9^s6nbLG7YyfCPA:?`7$awvk4^yEBJd~"jD:٣)k;8ꫯwY:HԪDA,~@I=9 aatm)ͫ2w - 0-^`§qΒp~m<=xz*ON<5}~ /di}^uSKTR2m+CR4eJӁm%ƻ B*eZVM-o0jOΣzceɵW(bI%UI 50?g=2"S.ĎjœBb}?)KWxl9%EXP+ %,QGz{(&#0AmifL i0)zUx1ő-\Hm tVt,ta(p씜B, lfc9xWDZtkFZ܊ PU?-j:"X`O->=h'F 0}CF/P}^"B,kCvr`ڰ,ghv5^'glz[o omnc=Topo_N;||gr yכ=;ox~ZK?^w=hלxZ/{aO|Ԋ|?LF̙xŋk<==f͚}|?sGs,eV,`v_ζ|Ǽ-&Q9Cg\uYw_%/9O{.։G+Ju{n4w7ܧ{=G@>bwxxv >,xT@i#=7螫>yqk븋q|zYm'rsH|bNEg9Pِ+ݓ)=y=û}_y+V`k@|ꫯp 9# ˼"{66U*:ure_$w~#4f:" A3 "CrYZ6ߒ9939ܦp܇ɯHG.2U٫NnJ)3qG yZQ.KQ&PTd *עcGТoWq) sC)QEVc: [Ǯ# Xs&1\:m+iER: b#&@.&󣹏MCstrLaD~͑C5a'o}Mo| {v7il{q?:8o1b?s˩?l"m՗GiQKΜZ#dnݷ{Ŝr~;o΋<}?=KvyQ Eotvҗ܍u]Vm\vsUoDZ3 iS7To9_{[n[s IDATW+928ͼGguzbH =MEkU%"nhL'5+Q7Nݗ #uI'[_SO|}܇UzW3^(u{یcr?W_}=THPxX~}p@<gSJƒ$ao!Nߠ4]RJ Zq&񆏸'&qW)X^@fR4sH@Z .`g7f"(#~@ Hz0mrôgB2 )EQ] 0bDkAXA7dEP4LFDDDZJ4]j-K 5FP#w$xn!F!(Zd*j0cg-i'HatB߰IY3mW`zڀH*DL~BE@{zm)ͮj 0Y^=R &fnYA20`TϑBddR5pGr%!"s:Vul&04IDHKa+Rb`E< LVeV`hSlAUD1,Zk83!LDcHi^ɜD*;ނʛ@0%EAƵ8O}&OyS4I-9~ox+暤ւĄCYj|jMAxGC[_W1Yg}n?/^_[+Z|ӟYguYg͸T8rF'3.AW'rj3~n"Wfe_g>jVi[v쟒 ԧ>?zÛw׬SNEĉ>/]u:㖎8WGN5yKW_&" `T;VkoXӢsCG:w\i`^)&5oFY.  ~ƛlJĮq) V0 MLLt,b)[|M^1Ai5OjF\j° oQav zRk$I$S"1nQ:'ll~ e Gm *Q7Y}e"n("@PB'i v)d"H.urxMkl3@DMz&1yGx l(l)c79^(iD-S#$c&CfNDD) NUwQ<,̴Ë) nK! b+("WX'Vg( mˍF:2)gko=oyj \y*N;/ӃG?uC9BSw%(f1zsq@_Yf+ngǾ+W4=fݽF‰A(-Bvg֤af #0RB@ba!hq>FݗmSJڮwoZF3Bʜp&{4p լ@k$iw3YPj`i?)`OP%YY f ! _PQiq-XQ@}OwF` M] DNEF<΃#WaIVǰtƒAuGrtœ01sfK( 3+ W1AeŁsSD#=;, G`@.|&,lXC%] 00w$)(!HM^ː[q bT((:7krigwdNy_׫46ݗo_|]3 "o:Όx^; nu&UUNNSL.uY}˖_r2 ]ɩ{w11u!G@5 @]a վݠrY9zWr,,ɳx-ԇ'$*$DE-^QD0R;[7jJn>t}!"8hBJ%TBو *)EJ\Mzߐ2CM=u\`63z>(Cǁh71?U{!(#~{HZd\Nѽb|LjR3v, <8Np2ѓ?E3!q,nwc/Lx!6MRk=b@?elY}Þ! ,RӴG€m>b]{s?}:6_nۇ%` C #< D#=y_C_Ь}o'7[ąm/Y_ <_ 96[qK+sGꫯ.Q;iPgQ#9NFPHᑙ2/#(x4c( Zuö[>pμ~U[9sfiHA3r{t\7ۖVfsh[F$$;؄ӎXdYڶ-ٟ~c4qP1Bq@) \rnU~O[!Su$KGĒU2 \ "@4}""aaQW~yr?5=s4QBp،' aOMcQ58Ƭc:dV wq 1ajVXlMDB(!-T>XuՅWD8ŜHS@y+m%ƢZ:ADC&:;IB-QH`IDR,/TrNX:ׄ)/C}gQ 5\Y8ݻBVY\J0&Rm!W%6T@+T+lt{u6}^㳖 ;6B9ꙏL߁/cWʁ~___o^~]x_k~v ɿ{tW~xOyP䒝p=08ֲJI{̹/}l.NLLkVg䇵Ό[_Zi,>) lg2+g>)yⶋ3X&|ߥAnk\"lhbbI9,p-:%N o5wކW~MT J9xzP$j5Xgb! %Ěg3_6R!ޏ<эDh<b#x3F.fj,`| pˠS p'PJ 4H&.ȉm7::U!L 8A@X4PEXwM'@43LR I:${hQ 9I}\+c8 "McR#286}@BeQ*F7. lTc5)\e=[l7F&HqG 2(u?<J5e3'F!W^Kzponx}_XHRyIIjbew00~\yI'b7cWo}_f\>u9x-s믇>'v{ҟ\?283n>We`ꫯ0=_쵑M5pa FmF2չ1%^j{8d_sG z$ gil,aG%V-,mVYt9_yEj1w΢v( ofK,m F9~a cnM 3C{?hs j"OpBds4 pYUӠr1Y ua[6G4z'{H'q:^2'x1 sD$gfթ\z*daQc#g.6",58G,\2gyygل0dۮ5$NhZ0 XQ$C?jPj=23 KXod) Gy.0Ü")~H@̌('jض3 &DL8(6 &\NtLA$_r&J+]bf4:$RnJԀƤjn 1!%L˅dzfp6ZFR א``ӦP,"=&Q 33gnsSi/ 9>G̾?nn`bo~?g? 7ϽZ ?`01LLA$BT"œ["Ln+96p9smnǼ3^~?7[;Љ?Ok-R-GZW ކ#acyHSs-`~Ț o}۲_5w,\9BsΛ`b;hjzpZSPgX q(uPD 4՞UpD!/jb *XqC\4s~0vE0XyFzIRv'2eYYU ((aSh&;a(y |͚N񉪎+/9҉쩙Q b+61IxF+SXB(vz[t=HD/R[Gu:X[+aV=Ne(,N)Q"DԗQ#HtmDt%#2)Lm]R Cˎ#k ,ne\! =Q8`0&t'1:G@|͉C9S"< ~@[Pd?+W`V j:FHHAI.zG˃3b3cY'o-u#}2b zҹ|i_uz^F_}U][>uyy쑆 mm\l>~z&''O Y0U7KvAfƟĢ._85wOZq[#5SSSIYPAg0jOJPOι8 ͞Zx"ZouE$ SS,U }9:,3>fZ#d2(ᰵ4ez~+:G)-[\H9,e+; e9[t>[J0h7e Rz#9-EBCYR?65M, Bt97M(CD ,j@"?fJȮ5Q( fZO(DHvdz{ $4+#{t_֑T(ă4pw0 ^ j"=I'0㔄"٘LUk"oc NBn1,-g&H2 [ pE߈AX"dwm` ~1I D$0,"%B"uנ`SbФ{IAÖRJMJ -z$Q#[[Of;nIW *6 RJ9s! U I5~+ yDmAcMjB 8^aP21-錄_IS9h+]bDhfLY +>c7=kP6ȃZ'irr "kY,ʒe=K4s"vihbm^y6/]R3f2dfeƗlb/jMg4@C3 0:aX1LAFah,*23g $4l9%W8nD5NP9DĨ>"ksmۦ@ 2ڂfan)8 aHjP\VU8J]HS^^[=5J)nI܉*w*g{Ϝ;W$hZ02s3ƶ瞕SS͕ S uNȈH(*lf1}lxQ謾7KX$\$Iȋ%ǔ|KԜ 251]ݞ+Y6SȥLk7zͪp|:HUl7( ňm_&9`d8{m3`B 3"W_}z#m%ؕQp.T ]G6{#zjj﫯.]uuϧyvEQi HPt#4uBL$uz/*<55qݵ74i`m&VQQ%%,9 g,EWdb08l''iIm)Xg(~"mmxXRӗWE_6NЎdI!t-cvg袢݉ yKFD\[ry#\}Hh#!ŘłF1::gm:"[a!yce3T6$Z (Mc| @|fd1GbY)^@hBU@DQlF#f9jnsyЫi#V21ISRJMt|:'u'Q$§t IYv`Gޢ)-ۜyQ N)*0a2&?B f` Y@T (ꫯAsIi 0_ksB˝T{uoG(kPꫯ~036C-,;0$ :Lzmv4'3p}Ys'I@c [GY>YRO P.XPЗ FDJ HСHo۶&?ETtbtDhbbB)(e׳* '(1D3f%XlG3Baq6UiD(DdLj8 &N*2qs΃ ~ |PcX%C@$hP5wS7uxZ;r<WUGפ,UA<)clY`f=sWS! yP8n Аf;:%%sk!%uγxj~W_}+i10"a"& Dl&F }[af6.K ꫯ~G4JP,5FF3bڪ3 '5Rc5+9SHo@I@nvwϷʢ٭$%41ցC+:}r ^9yM"J>+&1\La(@ꕔ.2T-8h!!q6&QRlmT0" Lh%YmNC hFk k7h,uo& "PQ`@= s6#(pJ4š!D`D"n{-yǙV hC d9FVU;vwp; N:q&B"bmCdNUp4Yς&yP3:ZFp TpPuBlAU K+mR>=8b$ )pnbTJq 1w H5V̧iLY9b3q@`); (N4GꫯO G׀&RjH,{z/FCDӷԞCX-3g$AgW_}dFp泠"3+>1$2WPQnbzJ' $\t*.&B73g^@R J i(B[275=^Ndz"[ uwIm-$Z Bҏl@l;Ei~(:+FcIaNJ6<$Y<2mtrfƄqG5""kOVDƎe_e235 hP È$ X.D3`Dؐ#i:m(^aڄhZ``f D̀$+tz0RH"RE#U+#j㩄jI! ՎY"$T. c;'WijԪc^b=t"m8&.Cm\}MJba}W_bFBJfH)9ZͪCxPTw TW_}"dQ(AKk 7uuZճ7A2iM#hM,f(EϦK$ 9st`b`01HRJM& f4Mju5f`4>ҨC5@eA-EQ A9;]X{)K"HVقd-Y2{EG3p`@~ET~ T6|pEz;6ff@&ZwQ؃6!8p k_ y8<(Dͳ f-U T uӌM J–">R(0!%$ӪrI\Yq VX"uxBӕ CF|s; D9+8ѝCwO:U8VYuL3`j @P?iܦwU >acn_ YrfI98R0>agVfzFrib%a y' ꫯ_` Znw`珓{ fbB$„QZxNx[n#?_zJk_p-]<^=/~z_J\H7}E;Ԍn'mh%udjD23 .X]Rz$B lO%_$bH7R6d d0VAU/ Dr/f >ml`"t9|VM7U ﯲ'Fl2F_Z欌w$HUMC (vV}c`̭C_BLNC\: aKHㅭWG -DjCxJ{j# PgYL`/#c8m̌FCYT/KӄͿǓNDu4g@!Hz}re-&OasX)J*w #qbEl-X։HP"N9BbPꫯ;nO4Y&*z jV}8.;F~Yƛm}7}f>?/N. U ߹Ov|w~gqݖ+~ya[m㱾W rYq=w2s\HQE&e z`’|JCe$gŹu&EGQm2S3'#m6Vu%9mT} un&%WfT7C.*@jj|Ԕ6`\C( wFf)"d6gu 3x 6ߦBb05aL8Q+9HZ/Dz4"?)Gu5 ʆ9mss)"9sFuYG:&s$snܶ*CjiL t!1ҊYRP$BgZ.d %c? [Z,֑x flt8ķCk ldt6)&53`45{9+[ 6j‚"JH.Hl]Y믶(; aAS JF؈,ʫZϭehh3=w0%g4T[ )H)aj™6-W)U?]57y;9U;WwUs9d̛}A']ӿq}c礃NMk?:xvW:ҞxW%{~md? OmRBfW4;&AbecLj*LW>Wׄv%ezMR]vL#gnhm5ɪ=8cкN$]XM=*^2s˒՚Fd>K?0YpRjRj( %o-ܖ4Y=DjޮѤ3L I7FDrnȺD@A@#G@fE:-"Nac2 d͜$5 TQ 1 Y5 mY2w!$4-Bm!F*H,#(8p8G^BMeAaVG־1RAq$%JmnGt1f8b8Ya -0s"b)!he@u 2aU\(0o[PNXT "8IWD=;P:s.p)DEQbE?no X@DE4` EQQ(Dbh E@~9z{BsyygwֳX`! lO.VK#vTLQYI+Ut!aHMQ#3 bNQk% {rape)R$ qVH%(+9hW6\O?{w_Xn]UMF-c@Y{W^'uv~c&vv>n9+{ϺD[n]v[lg?O~#>Cnq\o;{{w?t{z~_1{ڻ]{=8憷;^ :<;{׹n7=}W:3;a wyizbovݛ r[\^f?\Xu`׭[-n.L6\]>b۳/KG#6}8G-}=EgSɶݮ5߾~okhBF`NLN L5tmYvk\;2cܑK"߽նZް|٥_]qDS84܊32sF2TB[I\v7 05s L.̶@XXb|*5A$[zYA ĵJ$&iCa)34x1kg2 rDJDē}SXyB fzA:!  XPK)>՘.*w6hsŅ,ZH:׻$$N᭸(u6VjԷZ 39Z_Y3HQV&Jn1JUk V!ep!nZ7"naj&%Ry(^̦t"dAD-ñh0ic#*C̨?2mI5kG< ĭAB0hժ5ô0Zpzunݞ~ڏ>|۟]w?{.u%yc>/]e&>}wO`+/>9zMw7O?.ym6X^x! gig=Ggl\]#N~og!Mcn^Ϟ/Wn}}o8y=C]O젝zŮod'g?x3_ʳ~|jο۷hC}͛?0lOyK?o;にqk4ݷo\|/='/<#O6q޾SQoS8ūO6%ߘo_Q}m+vm@ź6`LpD:SK#ZS('.o=g}JD#w  ~6,--f=o21IְO;jΰ- jn I b.f:%K1РPTl,7 Wc9r@7^T B`ք3LX> IDATfPn`*iQљtL6//̢Camnd$v!j-ᄌ۰h -@E@ S,g"պ̦ 7I(k;JBbfqEo[771rH~L=|xC=B "|!!G4 col.#@[ 3ƧJ)ZM%NfJ!9Gycj2 w N^Ȼdg3^Y MǿUԦI\=V2 f r"õ_5F  <`DZ6 O) -RSfSv, 1g״K;zoҿmMS>?7YWop6v틍DQlVyxy7'|S_~ekW,>?Ϟ>?;|֞^rk.Ikw;u^t9} ^o:Qn ݸNK߿b۷?ԗ6xw޽9622?ٖNwo_h>CiZS. ]awClVі33t1ʰF$ۇv;oqbML;CfYF1Pt#3( c(ej 0~i-s4ҿi:Vf}:x`ARұne܇*uQh5%yho[lDX`ªL(lux>(XΈGP_4C&b]/@eZc@#&df윳chL`SH*:PRh]^d܀+'6(ꚗHRįw(EO72buy?oFIK!bsa0R*y>?W2K.n2R_X*T8m:*gjm31\s͵yH8wO)}L؟?Ӯq镗W?m﫱]\zwi_Q] '?5_s=^QG:c7yC?۟_-d;-exzW#6~i}ʺr^sMw~_rq|{>~73^w? ^t>֔_=M?_AO9:gi~'O˲ɷI| |Coxó!'|fo\fw|=#䭇m)^9ٮ XyGfxmZ vD$:NAQMRF]Ms}hYj-%,_sְs@`͚AU^k2WcFAi?{G=yg:i:[-{X \}X9'(֖@9NèTB3™,4{ca)C2V} @b[G ב]"}>'[:ECH\"Y$3E~x!ӈ7hXzG^gG46UkN7/[C r1 W*db҇jDFCid+&~jA\ 0OH1œGD`;Ӭ\z,j eHTs\kƺ 2%p*Pjj>C^ogk-^jRZ&b{¡d: .@כ r9g<ͮ۽wU:7>3_o׿}fed_xK2߽~[y|@aJkD&Nkx0#WP("ѕny[Zh`s0khѰ}~@kw#rŖѧ8ݛ=U1p>< t&wuu%UWq!)WIθ%:hC׋-+ HH%ؐVgD^:hPF{KM̥ǀYPIhf:5#C2; "&^%:%JRALځlTĐxV, sb>iC0 #XX, Z˖h|ܫr{훓_x^x*O~zm7\s͵{pYo}[/ַfiiaaiiʀRU&U&p)?-U-/7,/uQ7lx^8$4/w {Yl c+~sͫmpW`CSzd{yWNY:ec!/WqAJ8&?[9~Ql[InD"#}Pk:C<;R;3XcX?WRKqs>%UqFk,x/x4r|7 9„i4[/2Y@h Pem&ʱ;Z~TX 8yW =!F'TTk]H!a.y7Ux`qK Xk(lӶPx8UBKnW׉C*(J@Ag y!bFJч Y*JÑ=`Q*Rsŗ@;-xMb\JruV4pif<iuҦ.jkbMPO!"e5ű5DWވ7&yvFBP-(4 N hP.fc[;~J^tڞjVmp')DHT8ϯA&fDW\s5V(s1 (7I24U}KIs7.]g?݋ߡ![n6O8K_nmgvU5q,n:َ)I}ͯ|3UZ'˕ei& %=^?~Y(sXC0VqvpZ CgTU tyNnbzH@P3yM$z`;X1LoN,--//Bto䩪e/6>u VV,Å;imPpG @P[E[Z}BF DuQnq'汊OTUy9DKe1>W\ E8)Jamt(`!; 6ao)\tq>, yEO+L ViCFձ޿6E U 3M9/eGl z, kҮVwmYԅg RJ)E"R1(sBK1AϩIN@TU'RW#^2cs:kUUXdQ+RD5k-݉hEgy,7KY@UT.̉7wn~W _y׌7͵ O}c߫Tgpm19[R,zxW-hず_ @} Wg|rk݁D~|+/q}k\yϾp;Ys{qCvqȢh ۇutE|6mHQ3h_B=xh2y(A,u2LƸ 3C,Q6RTR|d=%>ÀVY=Bs[\8t/DڎACbN-M1X&gkD0:ޯ!Λ^.c4h䦑D]Ӧ .**XXO5JR|bkUM@HQOٴZ=5O)%80P$Q6cղeI.Wngi eD* ډRUEx(a1!2T\ @4ΈPotp 7Gϟ\f=`%Oz[#7_荁,x2 ;Ý=V. k?ҡ=?{injV&ؙ:NV:21dA ck-R}¥ Ty`}H 5|L EiFPHv.͜D3RkJJN0v(,`kX o}k)mO㸙ɍ|ƒu wj<ʼn:Naf.긒Dͫq Dct(ȑgHs!bNa+S fJ Q@/j( ۗBv Dq:uh!ϗΌW M'pDjWk뷫Hc+*BāwҾ7Ih34\s͵5yd tCxżƊ c{B{VR<u˼h{:DBx u8W~Gy'WCXQHMffrYor"MO'[uhC-PTAjq:&}fcntQMVU>D Q5ff߄'HqL> +n[^6 ['M T2J5hR.kk. =, $"g Lf;2\s58/(tKhRz9z<;Z0B . PmBW|~GDJ/>!ߜ˿W> Rسwz] gb޳QҺ{AL7b7qd.'s+2*cU1SD.hnɸ90ľ"FPz'HtFGDI,}r7*= mR!%:w+P#Pj]aX`A\EށfTEdkx3S:/ LF%,?}2'h'FNHOQ1Z+ 8#ks ؂4ш(@ p5Hxt%HmntQpH$#Y K&Ǝ&L%Dkǭ^f67"f@hrdCճsuXgZi=%6gW@*靁FC9d> @&Z䀒hGkkK-fh~="'+=lžȭ̵Y&&ݡyk΃?\suupYzPU8uֱٽ@#oM.j9[g|[U4*$?""=_6I~ B` sX'w6ᶾB"<=':$a9ȑZkBD<## 3lK0Jp\d,:Ap,>EϏY o`*GM8Ã8祹r3I*RLLjWt [n]ٕ).X3hÑnHb-Ihv+N}~hĭD'#R}6#TQLAF`kP.La,"dNZ5\s͵eKAKjX;!ya_a $ %%wkbܻN2T{:ݔInZi>A@MfX4]"~u}< JJ?`G- IDAT:O;nq7N{;{_tr~ 'Bl ̤`fqN"eQKH A(1 Fj+! I-$c'jfNގgn ;|䉂/V\i(Nk z"\7Qf}/Ӕ?1 C~"& A!r,qh ՝ o3RA"~\.1} l8,KSˮ\49m-0 Mh=xO`Ј 0l2Zq,$ǀ.Cib v()`yLԜJz6b)i!2Jv!i8"FR(13%fUDDRhag3jfF@ż=U;֤dY+ /! Zlu?3gxhҏE4g^ڤ7Db]ay=qXl8I#瓠 fC,;E=2 MBœb˧;@WcwyB+neA!ES9 TkU(%ѫgQkk6 y:kJ *3iv+-pUH-<^Ѫ(;\s5ז8x,QYsڵBXD2GZ5o"BRYpqDJ5#K ulU;(`0¬5FZoVD*$ ?Z mw`2v=+w?OrCPVbj%qɟ2:R"{[8v}NTpC~Y$+c_gs5\[8:ֵ\|tˢrZ5\sm%5s}6=[cGw* +ܰ6kmn$A<ݕJ:rx}bOR_ GhV&꾟n,t]Tb;**npU5K]iJЖ;[ >5Y@!q TNCfBfX>aR\KcBEL}ޝP$^F "hwm-w?ha0LZδ9r ɟ:O1<&* P\>dXT:z<(jxtld HDb "߇p5ܐ l|"wdlG|Y4_!bK^5r(!xm|PH37`?tGzKڣXpHa2b>u%&gL%U6xhj3͝sWF$a 2nă~/BAf@ˎQYJ`UH[([Bp#0X-lU~4c E1PH]H]AR$F LG*1l#\2?=q0NJι6UZ ~RV@ܬ8Wh#v<8*w5fX NMH hm HL\s5{ ^<ؓj[R115;rR ݊jߔV֬m}o[S[fu\scb2e@ w4W- 2SM( (ފK/~f;*&'#P CR4Lx*FU邈\_]3"+ 7A;Y"zes`bl%H&wGEUUe u gL 'UeXDJa"V/qTq#F\_l}Lo[La(ALO@uQka&IM'lj uRhBTN1CK=d,jw-a.ȀX+;&@*&G#JG: bb*McP:QМWmu&ꑽ!jIIqRXĖeTkefϽUr|@gc>IX\ØFc&#@D,ɕҠ O/"W XGj%Tp@EJ(3< ,{Blvӱ 31\s͵*2/Guۍ) ,hozVzk~O_x۝qߣϓ[=f\s/oOVAs.UiezB5fP+Iqe>ϻ o [o sdv6K5{8/jJ%R",//_\H7!C+o (3֓&V&fW[>V\l =ɦ1-',heYZR DDH=2ĊeQ_-ErHN.v"b=>Q!oE!DʢBTL`bkIBHPwDʹ }PDT"E?wbPDfFTR[f-E Ua 0 ?PhL"$ةgR g`LT Px(,H7(L(CYZf͚2P ҄)J!f62ìId b.bQcT )l-R 6dX_:MBbtJ)b3)(nذa.im,@!n@UJu`Q ׬**`h \cX00V2 ذZ4a,- }Tk &* La͚5CFZLڙpawWek6wR$ 'TSY28 QZ5~k/y;qG_ozc>Ma&[^WnSxVX_y=o?~~͚wE}g9%wƎ`o|eoMKǎ}uwvndc;o/<7fw~λbSMvin3__s͵5jhW'et}<]"qkMwǴ{hF]"_~_~yOSU8BLYsKHBX7CD#$#"a.衡e)Xd#bv,n(*`]npC|>rl0cg:,S.$PL4HBq9KF/gp4.sz"a(O Tu`'#[kt. F{պE]x;Z U ΂0LSŢZ.kJs2b$&N_7Rt\^D]$jV3GJaa.6OKp:LIST̙½G7#RD K? yC{\7G_;7s>qY6vS?krg\O>Uo* tCU%;<|٫~V>M|/;Op7ͽ~=/<_bs͵t^w  {v`섎Nt EN3#ғ }̔9(h=~wI ar :LF)9NtiPHV#.D{LY2]|!!ܹ t͡bD"\QU#X!3hmsѸL@O<`wT2 &.1MZk$CCBR[>O҃W#ZexqW%Hk% l6D0kM bfw cQ ~vw,tͽXh{k7@/;z:olN}o}]Oo޾w~?G~s$;S7be?xI/6T%z,Y?;sc6WE>-zυxƶ'=;{6s͵U{5DvhҖBUWL@O!3ō./vmY>sz9f_`E3HpCo^.V{46IձC2d&+.FQѐ܂{њgnX^?W?|٫^:>iԓs* Xp[~o>+7;׮D1|=<_~Q76XvACAĖWnqo>Ng|ߛ=55\[fql=L EQkN>@dH@"DTQ(Oqlδ?UW.(dd{acT =ztsXިtcJG'\ShJ@s{ڶAdq졙}fZyrhig!TF}:qJ&L3ȪNH1+a*IJ!VH`5=P4 Ml)r.wAUN\Pb[j23ƻ8?.q|5UzI7쉱;=q1^]6F.~ɔC, ~<)Uaw~ʹ[N+9mLߘkڊeAGDp'Ybk*ZLYJn?um^v_uc5/.=S o^_:oq]#NK~yG}1{cS ~kK6?Y){9|I_X=7?zۼaҍ~\sm-c%z45Ӵ^&ZS %ݮpN5 B5h]r:;0q8%zd @c'-u'Sf0A\pGt(i1aݪգCI foW.L~ұE{ LF>>cϑRCѤ7-ղu54dGzxkk˖MH*^DA׳V툦W"a]S8SKt'5IXS3YYgv5\s͵Y7c'e0gR{P20Q]TVMɵ^ℴ7K+~+_>~o/y7[#_{z't9+8\cYuV4}vc&!S?_Qs͵uIoG'<f&J}p]lQAkUYG}1!"\Byyy:.fHv䆔}3IVVLDK:r0j{l:EK`4.3Pk],lG}#gsBBB/g&[d"& 5L.\8ãS(A#f%{oaXV8D-C5GCt$ID9"[E m&2 Q11,< 80HEDDbavbr۟S St9DBy k򵠰 9yc IDAT)bʤB - YC jt&Xj Q zxgǐDrk!( ,crAP) 0JxF:DQJ)L,gaDZRJQ'sb>2'jX,/ȑN^\)M奥%ۓZ'H?58.cNbٸ ƂP?L %8# O3C5&fDL$cTs}LK"aZAuH&- ߇{8%&@@6٫,Bc GJwSڥb.VNv}f5w֌O-XYLF_nIucJHR;̅5P #2ݣI"cXz_IIic+#N+ ۃ&3!0Ь"{FZZcC{ r   i*P5Od< ]ty`aU 10BEH .s3$r J[AQg*i-uLogd~)p.x7vm6TZ`\N,]&B{D\S:D;߅|z"?ҞVfd\QiGP()F)YG|?)S =Aэ\Ň-t9+GkNy? 7'2(ò<߈*ڞH\s58&Aܣ?jZnQo5ZGњ{Qxǔ9-(Ij&{/d'@wyLL(/5Esn4+Kdw:Ba?h_U8`e=<AJyn]Ȃ}R3q ]:LM"pJhk,-c8;fak xJOLЫa~\۳ "׽T `˵%zM#P(XD+A(p%WJ`'E1M3D7aW+Gܢ \Sw0  5ȓ=bq(i @>cfLM6avJ;(Sg%U%b6\3r$m)3m]qAKkcbٔꏄec7͢ҽ@UhV5\sm=#pDоTZLq5vO݉{[.ȥrdP}pV&Q:DwֈUew3ǧot C?^ wi"]=0%FRٰ?zP}BD |-n&2@JqDwC*LN+&UeJJ8 Aڄh:() _g'#[+~"r$Պ#֐ =Lc߬Brz+Q l#TL.Rlh uNP::#$ & ' iBʀ7UӶfLMEg3\$(Na d^1'|s[Y{ |L%?\0r;5mJHt+-PNąr NIHҨكSg*BpRd9aiu5XK^$ip 4@ekcKv/\F?ND'0 T $2S5\sm aM@>}wc{3aț>R$)o`EJz>ԣ0P̊̈zHR=+\?&_` @"9MPIuafzȅ@P ֺXRde|eo9SrNP(XUUKF EևP0.,j5"Au!]icJDЪPt _wC&:ZRIaDR+*>1pިb3H/O>^'.zRƖ0a/7 \e$ɧ@RԘ('qzqigLPpRdI=V%5JT,j0)hf~Pu~s9Yk&Zbϣ6/Ru5`>K1\* *왴"E&&.XDR}6\s͵5g5]sѻ1/ 1 py&_vkaIZd VyL"T}yHͅi0`iO= cKH׃d ej Xk'{ 7бu;|i_{6JA zcpM0-'Zlٿ ER$Cg#3"N٘XC%bg\gBxS_t6Ŕ6 j432fNeP!(Qa\y$.L)Y⇙ V* ;Ӂ*EEj2? OL+jAu43Y+|.UpS]sB$&J]Jѓ=L¶az((T$|4 ZZHm)%Eez˶U%TQmȰYP`ӌ RE],--e&k0nx``(e?_aٴG2 )NjJ)vhaI:BDDks5\[8VAvo K~6tþ̨tQ*awkТK-\WkSUЊi ])a:Ѭ'1:*fV@bb9muOKt'Ԇe?GKD^1@.녠+M_dNNt,:vd ޾O">ߏU/Vbba.YRxͫeφODXSGww=hۢv=URA0d֘bMgQ&FʈWhQPE=C`6k:G3s;~Ll$ ψm+MnPڲDl+$6ao hXҿ&jN"8'EJĠ޺pxO7~ytV򅾅:'Ufh=FսЈu=$tCgtTT2YF2K(93hgdM'M QUfDay)%$6H N$haZa)h :b4wZ˧P̫Z|܄0J`hQ2RV!Bx{p\%zfrH#TO;\'oF+xA[b"YLja{G)؝"a&6$ j4{H x@~D( hQQQz܂[ ';(2%)KV+U5C2i4gt[X21.٭[n kzgi֭[!+l/G!~,?`7А XСF㡎ɟS %q@|#`tW;]N\F5f;j/yQ_hc/h>0 wMVܩY2ITtgٛ| ;Ώ'*H2ޫa +VQ=/`%zclaǎcwwOP8A{&7\4ca}Y Z'K+ p1HLJ&_ϛR"2O^"egIr:Jטs!5N4~tK]#* &PO1G9ؖ#U( ۾ǭ[n&#I;,i5R c3Ie"\&nݺ/p(/= (8]!k@IfJu|K{z$Q7єu=#q`CPW^rzos|\|@}#[h8q(-iA[ ڿT%Dψ 59h3P'Kl4`Jd:xzu vl(֘ +9sN9'BGTOIwN[Ӵ{[raa>g(R7L6c "FDKL3/Oe+f8㩇ӓ`@ *O-])M:zdUV \+UHj i.6V/7rTv;TU֭[byl`n S0̼`>bϓ.0}֭[HC z~N7*/{CG?ͶkfA1͵v*ֽ{?l*S !~cD.;{ hhi6tz ?O Xc;خqm1gSU5l ̽~iatj=t )%C,<"5lM2|$8B]Eϴi(\H,_e{;'47OTCF7/ %n]A,ܤduwTV,SG1ړZvBGK ja+dYR&R{lNfx y$b ёqggI 3+Rx2jL29!b6Є]Yhb=AJ"6ײ3@+M-nᰈr\ 5[b3!PE(& cƀ89eׇG&㩎E7d4 ֲ 6A:-ʀ!)}y  &OW,t̵=*u|~%q#o(O<.J"]ttg# &cAT lɔG;(gˇѭ[nNQG|Zo˖1%&7u֭[>[; Z']Y99:JLrI!dԐ wB_uI؇4C1Uj+ffQt5DeS5BDheg7"l<"S`@IhZ{{9'RDDzI &xtfK6;fNzK3TЙf Dn^Fg.wVڛNp$}ne gdb+xBKB"=#dM{Zucܔ~ :Gwy]!-e,q{wMq.&(U~vF2k[nݺ+ v~`4.w(lAzwv )^$J oݺu_!bw#/")#CCi8WF7#j!сGwˣA]A< oNpEo r݌ڀ@o r(<0$w|Б%K\U|2RgFmq/]L/Oä+uQDmgJ$9t7d3pk/>^` I=WCl}gD ͬ}2Stzc]2<^_.%*T%sALJ%6jXSTnj呭kȵfnN"2z8'\-em6Np8s1^0H/CV[qf Me*1^;t9FfrwHSRW+i"3([cGu\}&\^"\*q<ƆBCIqNrG}(+8_>nݺuW2lwɡ|\kR_dtٲV%D3]խ[nݺAP52S :-ϪrLQYͥQS@ /@F'Z@@ AB&+AT-Ѐ$H3Ƞhd+8j=HLKU*:R ڈ4#fge#Jzw4;;EF%zl4[lm hD MR}D8!FU8!ʩ#@&H:ZL5tHBSZ^dJf+h1w቞]\rhj*49ς̓3 j13 r'38hyf+5nD.`-} H(FȘeBqyE OyT4CWg3ƞwbXWV"V.oR"uWj΄h `5UN%eFnݺu7\W% Y>|'/&y%*nݺBN§)2t/6-F"+ʾ4f3gȩk@0 /wvgPxRI~>9y$ѹYA>lr3ɼ VeJnd̤3SU3-$F/;|ట4-e {8އElN.x$ C'\_vF 8D1:(Wu'Iy ϙ<<5AhFL阶 b Ehŕ素mY{zQ Kg|_ Di^nݺO*2~!Y2v/T.|YQ3nVCnݺutO j~Ö2M02~l]DEah䕣Y[x')x61ǫTb ^IlO`k:QcI ;$v$lSUe;{zZ !ai05;<0O3!3VziT.4Ihc .M䘗ӃN|.xh؈ W{Eu AtϏ|>bkݽSXVT;56bJB2|=òsj=N_4ƨSʑ؟?D0~:Mg(RGAev:~*^6NX{y uMq%Q<A-.TP'e6TX< {έ-u%je'Fl'ب J[nݺ7HCF[\,1dI3"!҂1nݺOV?/NPhZ LNh7z'3[!͙F`eK:W0=ć#(9dKZf_G/Fh :Gg9\r/"F ǵ`sK0(EHk*Ԥ xVI#^ ̌~H=SVĜ ǀ -樆3c@;7;t</Jo+k):8zCe@βgꕙ2፶Jhc_o-ͧN-~hjL=l%86$w[l#S)p+Cu !Soˣj&C*Ĭ\r-huޒq:|s((ydu#tnݺu?Amh+_A䩇V(7ѝ'e!֭[-at=@NlǺ!lT+q[k Q!p/?!ãyц'AC#b%X:|B'Ѐk"!Gyw}{_~HMVz"5enpLJQI.c|ֲH2[$m9ψ4G=pd3ڜ{.>k~Ta~FoݺuG̥(V ^+{F~ %P+LC/}8d[n'=0X~%3"yVs *G,gJ?TcokjIJbbM`tԘ52z#@A,ts+So+6.!#3{&htgHF|̟H7'XՖjz< =^ffǹ>&qhgd66dÔ$#*u"kCNr5;n2h,;#ZM Zi1(' +G)1Ğ=|G(69)9FGp$ef80#|W;_&i $.cv0j&lwya1H+~zs/X 7BRz=՛*rL={MaӴ[[Nhrȥ#bZd`$O;nshޑSIV,s y\H!_k)/Ԧ< Af1[$TF.GhN1BdU:mC4O fvH.p{_oݺu !:VxFg}ֲ+ӕ3mK,oѿF܋{֭[2aV oƋMZ~B.bhj$'i  C(%=;5SE@~FraْZv8k5{s4Z|Wo~z>%@1 2uƧ 0.{P8$tg"I,CAs%>|h3}xpSXr]!*4=1\tN̸/(hJ@gX]&ePX榙!D/"Ɨ\r i_T̨iq Ru_/^ _2|o=Tn8dh4qcIksF8<DpY ΍a-;s^ǜ~0@\o\ө$r`JQ4٧҈&㿼_-[n|ÌF.[~Y 8cGg}pcM]9qu֭p+~c-`^@c=6w AYX1:HxjjCZXb=3 @C@e$yFgDQ|zӬcQSe"Qڵda;Wb|]l-ch78U>`REID!YI0H,w9N*PF# \0mS39xlC:Q%kY&v3,xGJ+tdjtV'ۨt'K+ 3#5bHn;д8J($p$Jz}k0ɕF\yeR\I\AnݺuoQfS(Uk9^0`6JN2`Z0(Gl=Uh/O!RdX'M#d &i,JiG'˶ibp G$BR%V)P~ O`$"t|I!Nm[S&H%?/\SW}4N~M'Y/-,7v_iDClVHpOi'l.Vڧ##36|@0b٭[ni-l X2tl;Z>nݺufgUG\89 &X(婷Cg?d{ϔ%dRDK/4lrm:%#"62?'#?v:ׇahU`ɇ`HN**63="9P+a 6 RbZe;jx{ey0BdƒCq甐ܫ!PUh:P)홵)L3ufv&#`}2ex|fm8+e@1+(YXPBa3do< lr%5Y0P†v&Qe"ff:kV&*s|MS}"Yd8ze֨J![Mp*20zHL2= Ac'X_=Ti[nWG8->6@h\k~,i E:"7[nH1Q-"D3[ #RQ\|Gt\g1!t2|< L~f`DnбsWBLe)e7cU6ZJ~;Zѣ6YW1`ʈwaL5|w }Vu`z )DHѶARaraVI E]\ -LMh&L7_a*:U냢"!I;%̰ofI¶҈ Ee%+m&PhQGDD֎nb C(Cik +I̖QڨHdyg'^~jej0(pԁX&DaǵDd椪9w'E`!4u~!>pZO>;}ͬSV$ FF-ol[n 0(B>LҮe/oZMkC`kYƿf#Lrx$2"|>$ wy(1;a`iBЄ3x+Bcvc \[fQ#o#46kevʊ>6blemh-A,&`i=9E饐˓afEws=Zըorli7;l zўt֊Wcl=O&pXƑ};fbc"!;L=ڵ`LZYצYj~_w:E;'pUĥ1,NkHm R ЁKX47q ,gy3nzPBsSrw[]]Y*6eI8vR^F$K^&[nݺ7!]0AH eipɄ_cdηnݺu9დ:zpp\O,\g*#a,66m%3>l=;d˷:mL0:'"JOi+ZFJGJ<|{hp͵s};az >iY&n& %( 0 $# (Gd a-DhvsyR23>+h?^g2hE?I6<_ $"D2܁XokH:>*vHU<ʮe$t[ (@Ln㑉aOS,e)mHH+oqlYyI6"1"1c9t fp_ȶgY0\ zXdLg .[#4^icɵtu{(q"a&ƳTZ0'mMbP#VPL1l UU)toݺu_X@4rwȉϯҤ1.E [ncyvft?[h 97ta%OSV*G`PB =;Hl,i`T;awݮIc( h (gbY GiWX$AfeM^PJA/)8- iȃ3YOC`(P5r|FV@0 *%;AU$N#ڊ̗2eʖS+pNH]g(rA6 ؓk 4$'6NV{ r,%ЉMg+,i!|=ġɎ +Pmτmȝ=V؏~o}& *G8MU"ΣyO=RW- aK`Oڇ3r*ˆHE4SH>ƟO.Ka4V<ȭ[nG7μj+p ytE-/ɢoRte FIv{cH"|EoSqԬ<[5|ʀx[}zc #8(AgrIl$KƬ@h0aa e=5f2gCZqN]puh*j2vGVQ--* CtxdDN-NQ8,ZjO/  ,6LY@*IWGɬTC2@j0%EO! U +ɾR>#8 0{ox|^X <)qWj|$BeɨH Z_b!syTZޔ+-I֭[]2m=9˱QdL">3c~{ݺu֭phǯVd5'QDff={ L:@ dGgct|?l/_Rࡆ=|;)6Cz蘪G OCe>2^uN@f<&P_wPw+Fxc: BV: 5B )1ޑ(Ww) )*| A 3eFBEJ= ZaZQ{j+Nxj?ɚׅ@@QA{lթ8~Z+%x#wI x{=zg5 IDAT_ /0 'k5beۘ`zʣD}G͈VK3hI#hN]S2)6JaU{eNia:r ԁb$T$ՀXl-V6˸\ Xu֭[HCmEDRj>˝Vy[-ۿ ׷7[n?pIɷ38^N7G+@v x OWMJl)[4[Jlebڍ墶$rk2 {,sԲx8H/2BG\P^\HcHSۙ@{6f;J"SÂE$0uzگbm.CeV]UFE{h={Vy# fJ53oww-ܻ*pGcPpr}}*. kVVYVm{|WD}P$Y,=+nYTp.ɷgjښ2DJ6ٜt%ԿWU$]"1n!}= @FY~!X+̨hdA)Se݂7Ypy]ZI38"_OEf+DJ{ah.[! nݺu_u-k6SE}o+ ΦGxx2Ճ! C* +c^FF ݿG3"S0TўˆʝJJiE120#x'Ze ̍kyqyFL,8mt˙>DԳ;jꋢӞt.mV)3–+u1 >5NDcփ<|B:0wAv c{v%\a"Ap)0 .rqEG ic \_=yK<便M%i"IO+<8.9uA̵DCi" ,if- K-6D so/`]&W Zȳxw j3GAˌ0{oڇg2˷{ȣu֭[&ޢ17<|N@b  mqJPփ6jwpb=]lgJ3H[6<-ud`x&/?SWDT͡X];*Gpze!,tTO?>t6_<1d|o]#aneKL*D>Te # i5e`&8az"cRCSVxN͉?&(DTnК|Qn.Hm1OWRH#w"k}oݺuT݅CKek,8 +`6xEz]ڋJpDaN[nHӹ @?ֱ0|5]ӦBl0 }ZIJgO*3<"y<r(B=8W;# ~GsѤ5㣚(fA6ɥuAJ'n(4'W9X&Je(O6V ́a4_wN80PǏ>[Sd`"؉&9#1\GICWgN&,qERL%g%Кm`,kf_ƽOIReAhܷGPTq }SP8ܕDe Z դ)4AEI|{̹`)&ƉdXnXVߋ⧁ V0Ft),:CJ f gC3жkpnݺu_7J~Z2*22)n?id)4TVn;nݺXt Ghw8WD5]L|>v>X{Ѐt ߿wz Bzݎ9y- ;kh "bP:0θ}KO2R؀ LEA1M9^ZOG=A̡ѽ?/haҙ3BOYӬ" FS[SfL f$c>k}qɘ"! n(? (@NNC݀L>F][K}j|ߞHOgɛHpr2tO^cJ \D3pBoLGy ʉP#8U v3u[nU]r+ZK| p`Ң j(]ʭ[ncP) gJLy,}5DV-`JVzߞJ3?.V;8܏&b1?YlpWB#&eB|`]tNU=+xRsIzDx$asg:? )p0eX$YEfoeu£ѺWH"[`k9 |+)$EDz!o9AoETG ir )LSa:6&C1Yk}}g* )zkfx]qxG\kl9jow5XNޒ5Lqyx|VXkiDڶ>{kf^-neJ w7O)h;%NɛҁȌJʵ֭[~èキ7b~Eeȏw\{߾u֭p,ZRO.iS1ij!G~#B6'E,];]2L(K%9-f {yckAxq&6gI"ƧRx.DFb(|U i之k6ĵb|dmf'IZ\~roʭ[nj$1ۖQnQ^ \O"M| &~Ѿ [nGvGfCg+ӿ~܇Gtk}rݽ#Tǜid}A6 "l|}{ZdjGl>U x{7ˇz@!p$e--#ZϠWNo:A`:{cX@wѦS%)Bd ^`L-%4?z\DZR& =8ِP $kQwzƃ7 2=\o~D;~_1?. % DH\F$TZt~pO\ﮩA3 $4|Fց&̶6y(NA;^ѣP#LՙT_cf Fʢ@8mzj)];)"OL7IuH @эpGՐdbKm=s5A?[^o?BY7e gc (pVJsX`Vc) sRE%ǔ(?n'8#;Gq@(+LW`# JE$$cvđysIF#؆U|u֭[S%{e&3yro'aCKz'ݺu?8[U Fb)T8{G_bəo'?VWjNBċ3R`dI9^Wl#{كA*e2M& | yfh7ԙG8ꁍ4Тv,}R*+#S+D|K&hx7hW+ARTg)ikjݏunue8.*݅6;f+:~=s P_0*vd[+W<@ԆcJ-0Pb\lK˷#x:$r3MOpKT%DI1P'&?F0%*+. ,:6'XbH[!z(qD>-WK fmu(l@-%všau4$z{B,ܩ< NqL[nݺoS."tR >^@3au֭[QixVjyX*ؙ츎!"HQ/CVAeP A"nmZ" ٽQY^KšV]1vb=ښmY/@LKp,%h3ى=bA0vȄTYQ\^?Mߍ"=0bƈߜP"'G4(#VJOa.g+~" pu(2.wO_H䠭2QDpJ44@0? Fʕjӡeo5md!)"Ze餮l,ER#LzC:,gt&elr|.##iC:MtvȲw Hk@Į7|rUlnW 9Oqq2bi2fXu֭p%6MпnFSy-e][nGʹsH)f4!!m= PGem S,<'բiݗ)7 [r;!2p&GDߜoH1x "12!H.[j|eCD&a~;]Us%k sKUT&:I<(Z|~|>"׿6Q7 U}GS`Zk)XçXk)5jpD ց*"hfǩb *Rs_Rdk@Y. Zr`uOoW4,l= g$pCIFF7A[KcU $p: Pj|&*# ;K˖-; ekVio-EpwMg_wC9{ A~qI.@H4Pr`8~J,d|j:vGȲݨ]^*,zfH۲@I/!o89H/ʷnݺo}l1dx2Wr3`qZ.X_I`ѽu֭p`({m: g~4DD%kP"FD9߽o7 ,EеY˝(j} ҫL?P!TaytIhb z_N_t=ַl<eP4lźz"Gf+!z\ՎƆ`њTUqԡ,v@ M`py be-'y(Z !*_k⏁)O[YTa7+t!QthowB^4s5Xr'*';QbO2]9s'UIcnjcJskI??>ֆG۝,'2 yZ<\`P{lj(u5 _FrOՊ$uge'N!=3%fzm_q{xH€i%Q܏dR۵@-"xfuߺu֭^iEso_0ś hUo52<C[[#il޺u?8j9A ݵοV;(Ks̎}924AgZr`x_lͭ &?Xkuu4lu78.֍qR`݋_@O6v>f R2ЍĒ-E~/06xGs6D4 ؝?3Sb@򼧱C禢ej c*U- ޑa?z*(#l NgPϣW0?aFre:C[iȤjV%B̍M@@JlEz4Vu_0. ,n2`J̒%t@ 6J__;=C<%yM%g*l ]pHpog'%1oX109;5PJu$|P, chO|%¸5"$U'"4ojQh^L֭[ze`語fA$aƏw, 0h+P<G[ l-W[x֭[huE^b|}}hbfO5fɰ8 rizlqrvP4Yx&i'45hs[L/R̷֧54:]OȘYe%JTĬh< M56UmJ6:3a*/kgIVDϮp}5ظ@,MRzNnvoM=9#7OR95ᮕjwxoݺuʭ螪2F0Qft*~ #?[?|w;4E %IjzXB<#9_6 ٌGJpk8X1LQ40J_ =C:\ۊ0nff\.?HRV,iHz WQGPh9)$I#Gm\{!Y`z\TkʓF'䕲Ѹ[b 4/AiPp\aj(d^x:sC)3=ou@rhG\cI:Ѧc\V :8I$K9#ݽ N<)5N!<E6Fo1vfRPh`uq+8t(az53MY(AröTH MTy63 :dZ4S+" :@}"7GMfk) @OHIeJ`pys)g5$I q8S@J,(b'Ҏĕ; oD i"B $ß4fK&5cձЂ3bP9Un[nU].Q]a@xW̕oGnN[nAwlePhuP۽뇋`f3 ?Ewtl5vSV< Eg.G'JҒ3i^f:+FIzWEM*G$\2CHg>IO?ȢƵ &g8;#xFDDG 5&PxM>sL428'ʐ61S8'Š '1}v'Fb\eC &'zs FKf4ZLg'h M.;2dZA( #^IiEcqXe̱Z f K>򪽼6f@i|ei"^D YIGgU#2d& }\5Xn"L $[n|#| iEI_ߟVG<ow[nݺP1dI'_a B+3`6- AoώW;G~0 UHN: h|s5Uk,O)]v& 9:dCt*'b vBfGd.lJw #Ɲ!WfvL5$\ 8y4}|l}mfR]:a'iKc-Ɖd"|[nݺKK(y8z!"f#Ƶu֭[ ਷| =ݳmꁲx_ltZOO2Ht r 6Ԓ+U!J^DO*3 =$ iZ햟G.:VEv1j~o–~t} J?>c2~m[vŝq.x` uhƄxboCHB潐e`!&{!oZNaĹYݸ),c6$襽t^}9]n/;L#v }rkM:jIzN`[*"|I*x_FKbA"١YVO>0w93&,"GBz"zaG}o4ƨ՗>" *c#.Tv cµ*U5M| an6^J[j}%{ci6 1.VQ}PP!EgPdiB‹u.֤Bĩ5]4%_įD ]%L cpl"ӨјƣJќGKo:3SܬLsT<_A Ɋ\, Mp!9T!fQ㳯/% <&g>a>s!:xO|# 9B5+!85O>);QѦ'3iIx I/:P%Q%Wg. Cd} (š;=*ٶSBTռbh2wzQW) P2C&Z1lU߫h5ݖ!CW B؜A]CZӒf2gجօK&$=#WR/ E yd& `)T:r%&zZ>>DSR_fknZ""_i>"R =. X!fJtO)nv8d0[T;UU[nE't) g0T=ɷ(*/]4~wyoݺu9 8)q$VY_D_G/PWO:|h?$b Q)!SSn3T |AQ];(P Mp:$lt͂ Y^Jɸh/ NAttcC+Z(a]5[]loQz6v." aZqp}āVCOQa:RʈLIB3gﮨ -)/ /R$G_<TYo!&) aPaWrЄ T "84]^ū#^ӗ4wA#`٥:ߺu/k}g a|s 1Ibr0qlgpB^.m0q֭[:ѦK+A BMh4k{2S=e}z9KbNmܬX*-o!Vw&b꽌.Q9J!E2,/~r3wn4X&S&I}<TBߴ$l*"B˙4WA8e{ 3-N%` d3p)"{_2NॗILHx(;dJ,h&.D_[fhf";znݺOkx`. PJ aWD.x WZx֭[p`%]qkӔHΩliifa[g0EUٿ[r[s]h ~0"W<V[T_3)՟i4B="̩h!&י@(/ p.."&JG(.i#4}WPYfgFTGQj}4 _s7]t Uυb=*7Ԋ"(FWcI15 YR\$ST- /T/_n<"+- (`(Mp,/,4I詣]Ra!("T V7ȣ%縡ܽ:ED "" n~k"Ef)且cZ/46O Jl"QI4D5Gy8O2(aM4_[[ui|֭[z}gSyn(odǚy 6H5dxu/7}|y|J9]$@@>kF!D2l^ʭ[nW|+ 1isc~Os>Lm/WUw Iܺu/ ˠֽ2e!D0t聅8x`O8giAGU?SjEX-xwLw*"v`vTwcWU^ ,lZyyI9IFV>5M!(92o;.318qŒ!K`"A!]w9,l uɩm f$ABYNL`Iw/1Cٻ.ZMFJ,Q.ʒf<_(ap,02lEz9 Ww i^Hu#dbvVUFFDF U5J`s=PBw+2-#(?* 0}">.91,BfT'_QF̫M0<Tb*&[n2g5!GLCԽ(&*n:t18u֭[Ȯ*'?YlY̞|3Y~Nc{5ߛ\ʣ:T3+á|\ ?S>y Aeg @LBxEXn&iB;շ'+ۨkYA_i "ɵX%PUqWv(\;;&c h,Rl$7\u4Zb*y~bqCX &f kqa2Cx%ҊZIb9%A6!O3qNgfSW7^Y e С;wzcN #% ,pҸSlQk41{ƈ%fʕ2.(mZ'7@/Z>4g&OcAq;@]u֭[h0yM,TӢp2 ̞z\EV{>\ʭ[nQZ9e'gdB0eA*:$;"vkOÁ /c\-q jynM񾉡t[&DA±532TU uk%ɦcvZb;" `ClRc"d,v 7MC<r),4071d,R"Qo$ZHKŨݮalE+yP_Ukв gFU ! zAe -O fQ\ХYY|%|eԬ@Siw4gNKP_V{WZT >rp=D{R"y($J4;ь`ѻ4z˹0׮O:V9G"nݺ+prK #L@e oXţܺu֭ p!46釙9nZTqT7oJo}jP$w >oDk a#i[E&?g7r0_@;Ɏш}M MhxKv6~#*SzJFrVm-JIrDx m |-,L[ѩ+=;V@ |0SBA8K1(zD 0iY]Ɨ BnIJ ch7P:uG^ W oy@eS~uv&@=d=z,NӓuTզY@I|$,HڅNr&Zj$2Ԅ!&"vBG' ƅŒ azf k l?Snݺu_*bg<\6"5M ,a^֭[~qp 곛8BǢH۴0 LGDA δi:"4>XN ‘m2.PWgfggJL;,b ГjHůH5D0)h򏤐{f-OFЉMsDl"Ιq`|w$U%AV24K Xrt څ F/mWF(+F`J5$Jy;)sxlj9G1tNAF 9 F}Q3#{qPHXF^ q@h׊ƕECpo `y6 E F֑bm [s@EM%9ƻyOd"sMf6n,xʈ"solKH IDATQn;_(wmW1chK` nZ(]lEr6_2Gn66"֭[n]vkT>n2,f؆ >Cu w][n C$eI{GY‡0\H`w2T-:Erb$Š%2["#0ߦG-2d j&sTM;3#_st`K{{U1+xFjz.䴋X$Dl"bLIFIa">ămRڊj&0!2_0ޱBh~fh[ ӕ yMIfMRC!s"2>AIg<E$J7(S`-x3{i(x5̌3F D$!pun_\"JK+/=,СMpMTٜ**Sno!)jF"26'ͰI9 f{2FA.nt[nݺu|2TBad3Tw@BTMuz 1 AZ-ݺu֭ pT!iZ͞s9Ơ_t\@÷;"gCUD `@"mNܲm4| 9ZUʿ!r '),mmb*`nP PZk GэwpweZVdnGh 3{W a 4M"B1%Xj@`&ODIDP֤CP9,Bx\ABCx9ncTz RE*DÈٜУ p}]o:)4QD-{%.OfPpy:|A9HA0 N$i\ՙvĩ<#xf,;P$ >ME}k=&!7e 9*"f/3GbI%2}"DU#!Pu֭^:iYd ƺi1a384{}]s֭[~;;j0*V!#孨GgɑX0j(#rUf aMbdks  vBr'&_YK ":P&Ҍ PFޮ%,W"I3[/Y*bdNXy C XRP2-F 2 x4uufepR1*6섅dB\YdyT-IHhV=1lUd-\|y*pR<ЯKmQ4*wP?5*Ch–$l&!3ڟDFNddpmo1ZJ 2F4iK| ug[4>$6 YN蝔30=*ڊB|AYʹiG"H49`TS͘[nݺZY21q୼Ϟ \CPr@޺u8 ut Ws0@oNw02K2*Tf଻c(EKׯ{3b\XTH|X!јGǾPDޭU."annEỉ, M8gM \'8ҝPq WyYsh0LT*JbYIƾjz!/pmB\])oIss؊ VyڷܒAA!-״ 1۩"ÕT)G OX01']δ5JÀHGTm#PhZ?%`G "١4^PM慺扫n,|k?\5aAO'?[!oT'R)*6o[Hw>'ܺu֭SR_mWOxrE E$Z}_bV;֭[~A5XVlkJĆl`J҇R g! $oq8LfVZ89!C黹l/+,\&H q[Qf܎=(.^Hъ-BBkrawd b⧛`]2lŹsT: 參pRIH>~:#L=qk+)H*.bbc$Ry;À|7y}֭[2hBE brvС}Mݺu֭ph3܆tlSt31:)/shiyl)TI?`K')Rj`S[ BvIU^ɲU': @{Y.qh#e)\=C.C Hڙd }{WDth>![MPr6틓fVA =Sŏmqgk~ȟD`` XСRihГw'0D\iaΩXږGkIYiI 3Eh 28NAirj*DWQD9[znIrg<һ꺨4~&+@gHzf,R[ore;ґzf \ +Y|_BqNsBd*Lmѐ]q:|GHS/k;N;_?Y<"$ 65u֭_i6Kb|}}!14r$獤 t |icv=8nݺup;zV|6M3sE:oTp` %ah&<#18W)9*/(|.Ou泇Uke;Nu'jE-7d[Xe@pr&;7&֭[~VNE%]b"2YV5q֭[pT)}OaTѥ"Mʓvf$|8r@}djS-s3KX +)c!IT.>ϟͼ{4)QYv`V2 1m&ޑ<8pdnr#m̌ѿƐ+ CײszMxHKcq;;p|twڵ]V0sVC%!?!5q-*6_M'+$0]V L;o -fJ"ΛvΑ.-ZĮbܕF(Ö]-7]L"g Ct9c=w$E TH2^uV:RF)xY@j[eSIA_$ x H(̧gڭ]1=lf6/q֭[p(YMe䗗qWFtQړuu֭_8ȎomUn!!e#EZ5[ͤcKڟ3fzĚ{9e7t e?W: \]HUJPXw,iBAd c^Á}x%逈TY!@ SI4-ź{7[ k5EjW4;DZGðQkkn!H<4F5G,GhLPҾE[a9l~ B3(+M&*"ȝSfd+G4Ez)6J5csF9',4()a837(*O0S:"WAє}<}5f{_V@\1ݞA0QLĵ)m7WH$"cEl\߮>$֭[~D>XBBc2^'eRic}ߺu֭ p򊊨.3We B_h}膠<>p67GWRDҰ"-av34 1$OQ'MnhL͘Q!WQ&wL 3 ae ca:N0_%E E@e[N11Ζ s|Emz\!{Z.A#}1Cf.7N^m*TB7A[.0RJQ ;4>-6XY)1}6,;0UM+˘Bcfٍ7%&\*caz \1jAmg@۞\!ۜV4a q(HϜH)ndy+& YDgIR4}AUQU5xFm~u֭[F}J+qDVH4/=@J/vI1D[nQ@l![I(q gJ$D$ܛf! a); @c#->misƒZ#;MA&0w&N ?Z,w7WQ p[52\[zR ^)9'$+BV (dB&ΉT]eg!!LTvw^zj6#O88,S`]P|'ո_)&<:ӮSe<*xڀx$ЃͲ~0QbHżln'oɯS`#௒csLJGO>E2*BNKP='OfЦtXJ%"L8NJpr^g.<@v c  ' ]FUw L8. [BDF1w֭[nmfiϘ5m0c*Pw! {_~$#ߺu֭ pD.Kr Ԗ{ &'PVV럠u~hFUz7`?-~2N$CJQu>DdtP?I=푙 !dSiC|;fjFF)Nc9hv} N#%cwe9+#ɢQ,úFv3=mDu>vJKyxD$#bOt.U!6ʉp plx`|ef,lXCR&:]G G l?#eO=1 `B8 )[ w)lGCINWutH̀U$+ց% ;˾7RLIh,{s(]8BPQ })T*KSPFZeoێ`.%q0Y=3~t޾oiq1ؓh<~4%MX?ʋ@ׅ mubq#<J(hnnΔl|W2+WGO U(r5myႅ)IRr#94X=] =J8 LTTMQu֭_8U2c6Cf<W }Pq]9WZx֭[px gqɔ^Kő]׬8.lK~VqID{aF}v;Ip.:j>Ͼ~`WZOJ첝σQ!4(4 rpD)$1HGGRx 6nG} s,A5c|hw̩U["yz2QKV@j$٠yKYzc>:yowjvyeOc0CMj$fpYYZ sIz \e-^%n8 S{m|^~ө> 3Ί*Hܛ˖֭[nm|[<Ž>K9!a'}֭[pt?Hll+ݿI9& DfMWE1Q:ޠo|f١w}K@EH 8uхq)&*=GaL+ '_p^(J>(JLuCh +sl,EÀ]_9 -1bO\?#'7Te-Z[jv}O KsbMoYT@ P|8$YKiI9AY<+%`*MC1s6`R8τ%j*i74v\Ex̍(Ax!!!ij1h)9'r-"^T17sNৣMKq mM};MFUuP*][nbdъMP(;\d\qO+c Q}֭[p(2lV3ڂ_EP`dٜT,v"JȒ](%tluTdda34hD>\f9+~ 7,#*".*GZ Ek|њܭ rTaZ'+N^ޞG[(]Cg-*JC-kM~DJ&@ 3a)-˴X錤P1aL%%AZSrA`[V3b1#n4?2(k,:͘Uy+?%Jcft>CY&NFI"R? Ss<'SݕBͦGf4 tC,EBI\TGHk10h%D ݸS OOF!к`q|Hd|5q3O3<σfђf|$ڷrT5μ[nݺKmۮ0:5MR!W%JrMFoݺu7oJsI<} H@m(!RwYq>0}:&Dnɘ3]IcΧ"KcNC0p Gz0x7 sf$4P`b:OZe!)3lHEcDg3iTd@ܼ-Q,26Ւ5ʻqd؜$ڪ`'i P9YK=_9)HD?N%Mv##Ϳ#4f '(@<!s %^ҩF5m^B!H;̘Q9nލ dJc^ݽ<]:Y%HPl*}p;TVՍE;@ݒ/nEUn=Tfs@thbnԒBD0d+F5M7A+NlrpPUdrh,xaBϛuPTnݒuI>E$nʼ<HS*Ƙ[[#x#pA}NO3psWl2kMip?sEl-kPx7!R-w6}p7OBڐw 3õu֭_!PbI'r(ٸ*yBjnf> z֭[~( 7!1 CEeqO\ϔAkHR"n =6* MX2C| .͟(_ :$ﲛ`m%b<ݓ_#2w-5XPF&'R-zmNj(O7-8C%'"PdƋ P{4̶Kڴ dABEs8c?-abeJ\ڡ(lmQO:>$TUSInݺ;5: 'k T|ҧi(u֭[Pl! af}@a@IAhc^O"ͨ͒5%#\gp"&/[fWpED1 o5/䴾TU$_oc Y++0X26)*dj4Kaa+GuwCe%9"V_UaGkݯa{Fqy⇲Vca?B"xkvCM"姌ɼ3Q7x: \IѧuC${q,cE&Dbnnf.֭[~RX.CCC9Ty͊sF(eݺu0ڪoQ޵6Ita#nG)gLC3Dup>O6RҐ&(JO:: tP}ej`K=mN݂13Tlfe*Qz[fF@#2I(q"Ei.h,s|8t~*mZQݧ2p4Wj UCCNO2l&Gc;|D̩Br3vg$)gcLc+tGȅ?`OKHFbRE:$eўVJq (V$QvEl{M;mB70˛ԊyKV(?ak^GQ.z-;Db6 '#\*,8nݺuw% yv}:;w3zd(Nu֭_8 !!1Rn&v"gwrk| ktL|ofشӴ)B@Mҋ9pd ,ݛ 3Ѳu7FV<@ tk`BtN9PVk;+N%4, u%_Mj B۲YQI^ Ae`o˹/STM S#3Z".A*VUibl Xn/1JEO*]0۝̓ q)F>̦)vxwwA R! PlZ*]ǀ*xjIHVgu֭[L/qQ]230^fy.f>P#}֭[p6 JMey"[](^ќeGR_/H6TOFg|w6}HV?C,@|sxX+'IC=?lP9d*'`^dheO6#ABvq"G i' >D+12 XҮް=X̌X[q"2etd]\3x q%8Riy6mRORR wvM]1]e%&h(Dnj$֑laJ͚K8i@R(AIэr*ЫNX~p77¨[tv2Y0"awR?M= wPϋeKt֭[n Td Cuh&(1J˸N '7SUt+Tu֭_8>|Ev'Ei׭GXF/7JQ,'(8Z)]mFsꢓ& Fr" $gL$^8;sYݣ/Joc|2AL<@ȢH9c͹&:iV:ui%T RU%#`5ʧHGxL48<~IL.-rUY j:sxumőkͪqZ4r|1g8yDFB!/)خhZu|δ^.+RHEE|!;oc;!6vh6ni5$ή\8؂O=`S`p=f8ܭ P<uj!y8vJհR\pJx:49R3TA$06c*j9+ĉi"[V[3()S}z놗UMBRtj{IDanx)QXkG|8-D(!.YW ]r1LxTDtK =nOFUׇŽ8c ӈbnݺ *z6#Axs1^&"k=zpܺuo|n}}i` ;*uGsəjKY-a‹;X?x58cjzWTJ&_ʑCL OUVoy,`|\ 졪rj~,X4 1F:z"[k0.C'X$^6/kwEFPb IDAThk+ Xn3aPˇ,o=47J3`C =er錃yQ0<60ѥJA|p|,i4uBLsprJ)H"gdq}eit:IA$:&Jxg:T06EIT>eTpz*c ʌ1 }ʼ_fnݺD6gc0c !w7?_~^i[n}LtX~ҍoETft78_Z 8 o 9 )(q;foM dw8f@cj|֯VHsQq5xʹ>g=MBDţXek^%>PQ(4 SRD"VIHB֊*BIR@ 7skG>k={֚s9\gaǤw1;IbɅč5?̄)fN9ox+Bʰ٘0Ìl6=Ptj\BX.([4qM`W PqLQC᫘CZBR!IO'l>m+A7~ ܌ fܥHQufGϸ 2zHnף1^ڈbYT! xk@MB҄WR+g7JKz_y{I="8\@#ws3_6-,"WDX2%zX*!Zr;7$,0jȠ22E%|!kIu־Dd ,tvYȱB$Ș`6P]qZ"0ǣ/H!3/DESu.@Df.e;%܁Rʬl;:Bm|T6cW&0+G n? ƢzG UITQȮ1C.-(N ZZsgLaJPuxO4SԲ<9*322I47D}b4S%هtN#6S,R(OtVPuzJ>ϒW3mcBiťl {BKKp*o:EޤhXDJ0gvT, ϾKQDxeKěZzY|{U'ڽf(E x2Qv5,crJҥsE.UXDۍ$@!*"1ctҽb(2z V:l<[knYL5n;RD#x%f ,Z%h\XJvu3Igc86Ю;9S ē.p;ؾ ȤcL1XD!b"/Ej2Zz@ MO&n=4n:1111qaԠ=wl4TےLAeqȟDX1,Pk*5ܭ*6CD9|I#V)[%I47 bTQ<@3&FKkoW&ɚ82}ߔ]BiBIGV=Q3>h^'zZB2vZ <Ǚ̬EaQȲE(5{L17`Nd2L~xP1"n8!f2Z'.ddB@W1hV?08U0`}>#4L)T[ƪ蘖GQ]KT )tf+W[;&e#= nk*b MwhIǀ`I䂇qQ"+=n7?k]AӔԍ w˾#pk^S\M]1h:)9E*L7. 9jJ&"N my<111qIDl)U?vP\e&BuyUu]m OXF^Z_V3=dڈiea.Z'g^hRІDU뢬^XޖŴG Vg";rF WS%zU}W/`0Ƞ\5/M /"QmfӃu]V% m`$F<;g;')0*A? ^} %HGQdr o-u,-Lk`QqPL͈0{+sg0u/&Ҳ,8:f ٕɈzH %s# 2Dy;ᨐn`̴0{o#nAb23W2S9j1W^I;1#q01111qQyi5y Q綼X*M,־ֶ{IpJl.hwqk`x]*"(6zf  j'X26*׬kD*iEv[{G#R0 Z"/ݐZ(8_{8 Qוff3CG*NC\@:7܈BY-Kalјy/ܸI)(*mdUAU@yӄ%5Ԥt4jȮx}YW317i&E R/9\߰ snbbb>) @_J9Wΐ1)po]ZHY#2LMc"ރV&qf%&D)|)C{Q_qcQBfS {lJ SR bP?pR.ҝI1bRPs6P$'㨊LAѰkQD`b/U?H[`މ{Op:幢t賮ZKᏈVٜfT r5_/mٔʑ c9.qtrӹMT!(N~1jΚ蔑 )hDW< c$_l87!HMɅُUXn\PpAjoO܇dI˜ϭs"G暍D;j *ݤu%Z D%_DƓa#ⲠGʎބ qł{nwR]5-eHK8*Vϑ1=.9ApFWǤs6Ւ JzMtǬBΆVM=59Q"Bzg`S*P3o!-y'exQI/ʯҳh}6111q܈xljW\v<&&&&&%Z RDk6&B9>t娵Y+a]=j}*`|&Vڔuoo=*R5i4S 7ƞE-YGJb;NN"Bk_S^k uM8ޭgScAw]݄jA(œ3$.1gQYRI4 U6Hz"DC9 Q15vOxlrvev ?C)@ZZ†D,Kmb5ib:}U<iRT;T]ml.r4E! $qLeUy`̊tU AuO1*ff'c ^!h f^N@Z/+⒨{ D|q 6U- `h.BTƸr-&r7ǒC8628k!e]b[/mATGdk^j#w 7/lxӸRv*q! Q+Hv8U4=P6ڮEBzqW qP YQ+MrM#&8Y4BѸΝ0QFD.T7fDcYC2  >tiʁԶb &Cs|ll:t'w-[)qSE'JۗG3z nGpr.*.h#q!w(r *A行2hVHHli UCa|]L%.n;F(604Ljخp^~1f (I+;+@(NIAV,4$iAml͆6U% jIǟ{ ߅o}7i@ŗw.`TR#!ImLLLL?#Z3(9~0մU\+vvL4RE\'Lbd"6m+)UcsЂ 3H={Y&Nrޤ)nY #MܕB $ۓ-4Wsɖ i9S>H%v)Zs#w WeJp8xl'Bd^*TK@s[DUT_uȸÕ#V,0,_@Io6$1a0CgL.B*hU d&94ZxTD`ۍ+af&K5ڥPs,UB$CʼUnQ pmѶB 7\F^**뺪yem3úei”EC,'쌐+I> ݵjXN#anDP&hR{^zxCVURŨ2SN%.vG??D=AX j!($/&%-ڌ$U2 "KsrF$aXbKȌ0.}LP.Oa6vci2jPEIW%?b^*(Q'FgEn1:34xZ]"_EDAXLxPLc%0wQ"F5ٺ8R b= ~[ritRnmT);#ƛ 1lg=Vo)kX_xjzFd]TVr-/LbPAL̍#1mC:6s\ (d]K6(\_5pmr\Aݹj)ρm>Fb,޸03154\ /vƍ[\(qaOk9#.񜉉{Ip !@i+V ch3BzÒwU{ [J"BQ \H2d#Y]ksؗOoW>JT&R7_>C=k0rp^Rmò,4 2G  *i`vPgI¸| IDAT:<,M?L\w 054$֞&;nM1qDA:)dLOu3}. ~2 drVAUDEy*0ƛUjH 8*n%vzf"Su ף%H$B&"B DM2?cBEieh.n,;lZadyڴ6-)zr9 UT>M͚g1/4TQ;kt|1mEẉX0$#VYO\ ЍĒM fG. sx'&&&=>jutgm]]M8ݮO%XI!$ DQ-Fk@jfGĉ%iw+4畺 LIJQ&ST.p,JݗnhThmVev\$0ZMF=d 9=؏_ǣ!hn'8ٝ\3 4#FLU._jDLͭ?bf زԎbxaL%Taj\ (A DA3^aF)31tH2VEAjKȆQi7Zo4H\1yZ]Lm2.ig7ji&Py"2XDۆ05Xb8[p\"٠x [9L }VDŽLb yO?pYbaPҾpj3iXDFX(4ksVQjJ>bH:Lf'< VS Eܐ2wuv!zس`ݝ=>Epۍ2*~xN|BI$g%jd'ƴ]*?8PVA )Yb{%S4ۂh&'#ÎNt᧑:Wutqrc27xPΓA8rAA}Dyb8*TTU( xYδ3Iiǜ ́h߸ecD`$ĒĽg7׾*/)'_GwaQz؝}n?\ڮ[6[Qb~V("Qu=99M RkB /u_M5/4ʕ y2(E)Yo `1)Z GGNZH$i2;q[w-48r02J+P)MTb WvDDT!rR2{8hnLF:ˀ)ٽiĦ{bAEݱugU /Pws&O:o%IT5 VM,Mue;`EJ:+!T #Ȉ4 VZcv6^;B$2]eS.64N|q*MsG54sIz7#`$eM1111q Tz3(6wjoE(#k PI] J.cTstj4ʨ`@VFmĮ~N>[g>Vjuٵqa ke:[``XDWbnwf]Eea .;0RTQUj*/zUڨɋ #G#g4]B+'RCC O _*ҥg>E =ܖ߉G@m,]QLa5b2ʝvBWxڹpb0)Ks4u1X/ep֪ҕb]-2sh&j7/7*\( MdBHFuyb)KmSv>mEufPP=UEɝe j'tU0ٝhˠ%+jxx2F*ȼ1(E1ն1=v)a]ׅ@"* 꽋M)uTDޛ޻_{./-D;>m{XzCqMLLLLK#:'(šB=ko.N:ݣoh-4GeDS(I(ױMY~dJ cN~T4h4X&QI "*K.&#O}|~.cUY\ؽj}R)Q$p~ҳ$^ڑwbcdGONfQm̒hOpِIzMܢ *U=qd+K Qd<Żڧ6Ie$.I6% `lP/_a#9b*ĹNSpk1U]6N=qd;؞nl0E2;R3FUs#yjw!#%E# R>@F~ȑ^M.ʁu`;.vnv@W;4&&&&9zHzɉݝ5/KѮ]t]u]= }t_ܭ| i,ZGgaW݁M#ɥ,#gEİ RǙR%c\o*g< dF"565g䀔.pVL3U?J&6QRMJd);-O%qJ4^7^J4F'$A/NbxSK N6J.:&! $Ud+DVC:Dh2 #L907ݦ>QBa׀'a X^㠰A3T}4"<&s8QdV=+w t\άu:h is„ܒW}pX3u>vZk]p4$տCp8u=᝘G|=yS&u~ܕ:y ]I)(MHlR$q$g(?PJ|%?pue jRd[Q‘z%|P/ު_ {/T^ڽ'{-r@sQD8c4eG4J@xJR9UH)clGCAݶʶ P30Z-Ww!M DFPQ3!Rλ zs2.ajǛKty&< uI+q]Oyf o,kF0ʩD`b"4d%3BǙE'nͯ^4[r>1Ħ$#f (9∝JWd-=yiT.FWLn2W&&&&&%W^i/''KkZbƜdv%"]p~~~8ΝIpLLLL%0֓7ז\i,fCđX$R5NޫhÉݦyvCW=J߈G ]k8@/R+.d4^\4dĂc5[$7Z'RSIVJO=@#1jX?h^#fxާ7Q8ˑ#0w1E fTbQ/IxI('acf#Bp%{EELGa)yɓAiQpI-~Ah UPsZQq53|7>2)xL:1H N; Y9ZK̑z̡f{B1a}‘$]A|Pexnə*jtQ(&J\v?uj6͘XT膪wx>=rK/_tҥڲ'&{w>sv{;111q Şh0Vʹ}m{Zy#& m!*1>. ߶K#$nEcF-b"l]jFTe&I'dj|ffNp)S˃کE)J:RYdEpIHKD{8RqfI[] D^n3'b[Ȏ]h(4a6u>P67i8`wknY=0F1QQ. p!  MZD7#EW#hX40ff,VڈTID=X<$-ǘYI-&Gkm]*2 k@1# X(*&,V&kQ>ʤa&TT9lQcKL v"jgeDNLLLL[|ȇk׮]~իW\reYdIp8zvv۷o߾yo޼yx቉{Lpd-5E楘 * AϤRɈED([Z*۽b7iw ;^[q7&w녙s$1wOp!P>{ .Bu:³X{HA%`M2(<6Qz4"T^Um8.PgzԏHӔ)3_J|Na ZB[D$3nd iTƱsDa01K[@r(ƔA,ܘQgedjGؚgqIl^% WxpZ`r jjKgÒ%d1ڸhl),3}=!1[3,F&.֘9>\ZGMq3duGTH4Ƹ!:"el9S0Gi6Ờq~Me&]eLĄ "3&PC=$OFU %E 2,TEj*-]ُL0[pq"޵0YeYj!uڽy$ c+RuE~i7Df>be)Fۿ\Wѵw.ٴ^Bw5a@k#Ԇ̈́eYL{H8+)fUba>`+!" P|=?|sUZeE (Y0a2xj7Z0׸IśԤ3X!2k E<3(՝D;L7O wL0n 7Llt(UZ#$+W6nnm]P#;]g( FMZخHoBdr(GK}v+׾' )iaHMH'tWGP.(`}F A(xXtIJjܸ m܉iI!(! տeز6 %bie4jNu6Y%"V0:DK7!U0tl|(qEGCx]D%P*g B֯0X " cHWz~QN ;Ф BalWJVa:t5M}&$m{2^8QyVBuTBt)e ) /U,Rjaq#t))1evpR#c{ĬLu]tzs7`!RU2ɦdHStro&dPef!.!P0Jb;R{7+?nRBG,%Sوth Lҩr7ݨ=UjF4 =0!B7Ci).&hJ[pz轮 IDATkƋդ#Ӎ.$:51FfhBQ.4 X&ƵlP/<@ ״$"X;}13갬@.@݊ƭduW P"&%"v TA>+p+s$qf# {JMaaiHyң" w*:a1F(VeI P- 1t`ΏZuOF4fQP\cຢwM@):NI;DM7(ܜwD3AF JGq+NuQB' hVa1NRF@@"?rC#䋵lm1UO Vp(?TU&9 cRUf!2gefMJW;XghC۵&Lu1<5LlV2H}rNpxjP_̸B^qbTtSΕTꭘPґ!6G-?Qhj8mTiH\Xv\ fPG_~EI#`u('·ǛFhF|)p(I K!ɭ9egq&UBT33DWd^I9HiiJ\w3ڂ;TCYQJB"(5KBUrc}sČk*S2œV|IPQ#R"}kD +0!RJJ]w>f 2,"$H„CH8Wi3])Cż|Jb 1C\FD# c i L ATHSD# +̈5v66%veو5S掊8w)3JPwsALnuؐZu"Drg4ѳ"Z:111111111t'8H*.`b~3XԵL"rC=裏xwC[~PHMldJebbbbbbbbb錅@n|aB:-n~E<8* omWxPQe -m!bUUhqk9Fŝ"bP3O?atIQEpNo<蟽~WNa6NLLL>C=f~A֔D h<11111111196^ UC\ҷ~WMGy^?^e?K˿?_7z8ksqo}o|׽Gzɯ#aX&&~UI7DDL$8&&&&&&&&&&a㑰u.cD2v)P~5;O[|ws_G|Ɨ_E,ua>zBd%K ӠLyA̗^?]I1p7? +k^n:ܮ\~iyy2\;tv~7nxG^^nD'W_]<> `r}?³_/;}ŷo;Wpw{pŋnݾ|˅޸q#ٍt'&~җ|ʧ~W/Q%Qbe+eb%DLx &%RU {Q*(X0f7>3⃮?YoMݛ~_\{@u=?W_U?_{>#!xk_O^?NS׽u{#<{*HiH97TZ-CY_?~o:_3\n+wۙyM/׼3/x;ɺ>>>P߹u_+ſ}ߺsꇳgoW/̏y;QxJ{b7!P%)X&n)6XDN:yr\s&LjA*OTzۻ .%??ַ_?^ǾW/?S_|s?%{O'~{~ğ'}ןq~GۋK>o>ƍr8=jv(]*Y׮|}| >K?/|Wmg.|㽵?=~y ^/~s+НCpga?=.>~-|= C~`S:LG_Sƻ11T\fj`@BTdtbbbbbbbbiOptChCDL$L>U7E}>>෽~|7Q:>}}_K\W/^w?'~@Þ¿[si*c'ݸ wkv?{w@3?/Ou&v;s[U ˾uqq_O^oޯY߀!_XٍVnO`nG=ޫ+۷Oz[;/g0=~ٹ0gOpx7' XXUEeUc 8&&&&&&&&&&s@ DZ "FQATKmi#?Ǿ{_W={YSb`%j޼yU__\| Ǹq?C_L ho?g=`4ng.~xض/4}J~w~׿k]{?y?BtI΅[ۃu{Gg}/~|g\~]<'} w?+7pǾ==1LLԈm&&nKƑK BIpLLLLLLLLL<$IѰ-?yzlt<9ITW^|՛ԟ}n›5+^_^/yŵ]e/|}w_x]~'}GI7IV_ի'nݼ}Do?~*^=ݴuUƍ>˜*ග^z1ܾu|vvos|ݽ/D Z^1dh:;*L嫧ݶxownߺsv%ۃnOpOLfƒ>ٳ?d999Yvr,diW}];{k?|>'??G?+_Miϛ:111q7{g?1.?~{ڵk׮_v+W\rzzyY'a]׳;o߾}[n>~͛>FPW̖:ٜQa%*ڢ"r7Q]ޫp7q[._~>O=F%n.]yRXl'W?] 廖W=pIy⽽p>x)ÓK\:{wcŋ]+x==1LLcƍAPt`"f%xcafnTUTE]'fձn6(nԏ~ϳ~&_/y. "l-kO[3q%M$HaB1PUUe"U}̬WyEC7sy>aݘAcjQvr3EH1ߟ@aWQBD˲-'`f0dbbbb+ڲ,ɲ,'jKk"ZhY=ϼ䉉;"Q֚{0M[*?6Gsbbb§ϙɭpSQQ3X̝qxcFj @ʁ"`f1c؏NLLLL[;̀-'f3 @:Ǐx )*[?{3 11Xl`f=*-m͈ "af-dyOw,( D7nQ A+&&&&&=XZkKD k$Щ+p<111o^uu=>LLLL[xhYo[~ w3+2uLHg474*, koX;}l=ǒ(@cVմۭvkm]U ɍutǿLܖDҖUE; j˲ts&&&&93+\|zz˗.]ZZk2'&&&~CB*T^AUU)I,~ k{@p.UՓe"F (vӓm]o=a%Y AR_:kL'''TwGf?A&"b^>kΤ{ "2bf"&^ &""@>=8&&&&c㴨>~ιS Į`k5=KޣD,Kb+ ( (lOyf-6~ryߜ;w'x<Ech$eٶ[pL&Jd2lkkoko5W`0YƢN 7ZEDK& z٬ J ڠ#M@1KFcȀΜA*(+AD@-4ϜS{c0 (DB A DB`L$I`0)}_R}}= 'ptqΞ:l!8(>{.N DqL:;DD  (a bĕ0*$R ?Wģ̯&CDJ) Ey 2 ADGADB"D! !B X*ED$}`6>m!`0ې ̄ݢ J $P\/VS*" rU:[_- .W `]X~xb:'8<(_2~aΖH( (Pd !ImFӳ`0|ks3D z_ i )o!H ^1k wz3l $,E,ΰmF@(H> R}$3/Ɏ!bU'LTJq.?PMIqQaaAtA (`0c[eY,zDHBA;[3 oaI a}=Bj4 !<Ȳ+J)Ή7ݶgda<8 ú@hd[¶eYeۖe ۶-& `0#˞6&Wl;Dp 8PKV*C0 CST0 QLBpgΡ"* 1@A,q"Z`p 8sg`Ō`*#@P̊ULJ)9"9> S 09Ȳ,ul-j  aَm;c[e`078 yl,`0/,gg "P|k%ۥ&K^<1$'B(D~u/|yRQ"d1BL(@d` q E D%_\b6@%6s'Nc /tQs[YT\bFAX9W`Ҳs~# U[瑔ARaPd"8 an>m=㟏\k.`0Gȗ X+P)L0oFOH {?ʔVҹj5)%8d-?F@I`bBĨF 02 4e,WGIQm!}HﷶU 1g^X_oZ= =+V~m8 BI ER!h`|8𰫎Ϗiww}=hЪ|}{]06Gnۥ<2@O4`0)pXQ  w+pIN LK]otۇH` |t҈䁒@@fyQ3X21[v֞| D s9d*3w6 ѧ=.l"nčDZ}\A.; a "%$lǶ-X)F9ќ?6 us=z%=߬bhu_~Ja7._EM0&$;if IDATGU`5A)]gi˜wpKQ IgO? KƀQ2T"D;ΐ?@1*$PQ!"6* X*f$BHu. :c(XP Jл/әt6)8J'w,u~8μW Am[&`0֗:A EEHjuonE]<΋@r@l `1IAQcE&N$݈ƓmHKm0d+UHrʾS7&'ge3iF6,*R:t>}P[[wwH$ri ϛzuuu/spl֫/_U}hkkWԆ-YTꆛn͟Wz҉82]и͊N?~goLRVVG(Z^z'oqea] )w{/K((Jr k8A)k)mku̿_x;vlvA܀FgKؖ,r*DHBs"$Ba0 #N_t=og\nhI[PZDE&fhٶGI6 'QWT}O u<_K<[G0EPZw X7R:CW(1(Z_aHf$bH rGTv#n3^**[ۓv"["v#=*~ӕCB&Jg-&tI44miiùy;vhii/Z=\TY1t/PXPYQz3]%T } /R<@Α#6RH(+-? ^6|:|XU\ze/-hlyyy+Nqm44@u@fJ<uⱇkun<+~f1E>|;g>4;+)y鏽|6#n?;iooW\~\z/YzyGzw۪tF=#""KvD҃nXTRJX4UT a]>DȼxGz-{薚}Q_=w 'K RN;e^k4̊T/-VRʈfY}*zk-*-B&Kz %ťm VAg}<_e2h)};l޿^{SkF}S1@߲iϊ_~vio}-xΛ7s?~Ӷ~qA$V *XTqRn7om~8axjܸ 7tÏ<w= ) N5gd2l6Ouqcebק~C]ݞ=vt_&ٱKxHw*qzt zNR!薳:{˩[W^ؒݰ~H$t&""cܴe _A`0C+ffV]gxv?| j'8nl7|{'7DеQ20hkt`G8;A I 3|{|ñS }hDH صMG;b89%,q"Ѩ2ĤTl{aQvWJv˂/SbkUK?N%cG%DZOՑ-f}hY37]ݟ_㕇RKD5]WԒf,퇗Ǐ\rѧ_;Ew<8g׏ؑn_w_WG]_yO]zԑ7>+싥yYRdx7sL-,tX"BJ*BX!a`|:n0 A5QR9 %B` =mi? {w[ H*ebǝv{םw]vF)Q+RO{,bFc/#Y`-Yu7xvefnX&UB؞Tʦ:C*YY1$S Gyt,mikIgҺJ!,P+̸JJKL%0 "f/} y~fe_]˨{Oq !U Ig\7k$ƚ힗/nض陸w4\w=w>=DǾ6ǣy=[N,8tK^z#L1Ehi0 HEdob !e%ɨ`0C ,+R)60 9gxJ%۟koAA 2 &LD 89 $+Bu>@2 PZag[nn +KmMXƣqm-,T<&B)Zшk{_~8?P03"Px}i=<ٗΔ@ @ .ؖ}C?HL?X4ft{}~^YQf|}SP=kXBhfE3"LQ/ymE "DK8&osk6vH:bg~]ܯ/!ԟ|^VJտ,vm)ܛ~Wֶvy_y&| z_Q_C˚w Ӎ/{~|ǽϜI?xXJ,ˊD"Z=^`'uFo /HGHXe;B Gsc3i0 @`fo0|k"8YYt}؏kwp.`0S.ĺ:>]S(1(fY?M#"(|:maٛ"Y|⧞zvB&盏Jfoke$N"G4?XuZD(H$7"Kױ#%coVeW5ńol)Ym _ 0k Em 'H"гk˲Sϝ7Ϙ>-lzVm1yﯸd]vo#nM"peٺ~߫W!c;UBH!Q#P6T?1Ŷv}Gg,l>{O9o3~&NP__{s zYKc;S7V?z]/s!F`;ΌfO?U#!Br8w#cw=o2{ĄKu3~i'9lVW>|wc Ned=sQ6O,S|\{Į#UHBaYvN.}?$(Ф dш:ڎm 7W5k.W: a :XJZxkUu\"Bև: EB) |)lƛ,+g]C PXB֤M6}~ XEˆ-3YQW\Q,ͩ,]^XlQlB RfH@ć8!@aPm)eYszzi-}tzɛmǟ1c.&MtoyG!aWPnmԟ#L,ڶ#җbK{rWJt:~kB/O8inn nW\nY9f !| J^VzT7k'hu~~y蚋%G4U=[9#Cp,󶛧vf&afg|jڴh6B& 9 ǕG!Ȳ,!,f\WHaٶ%}!,aRT a$D"bX4q݈m[}y^\Wh w Ý})u^*AG[`8MillP-M {t , H9\ ;o/-m*p"CKb |庖mE_,N0|\,.\՗N6k7cV"TJ"$ Djɒ_~λf뭶gz~B7VP9|/XFGxG^̈ź@bL {Vo=x.>[tiG -J&dY++خW~v;?^dF5`u]z2'<В^[U ;]&Vˠ:WAX AH6`0 ͼx/U/l:InUx ߡzimu,[>ez{e>mŊ%xiBd͚oU :>9x~UƼa}#7xi{>Ĩm'V=a凥/[Z{`Y'u O#ξ{꘧  ;l0| 8kkjߟou@΄[IG`Pq3< Iz⭔"" 8?3((/,Q.dAčHoh_S KE_Tsqkg_T{9 $! U(FPqəzr8FrRJOunk] D,(HcJJdǎ}^?~\N{v_Ͽ8nܸ E%]Â%%ݷ7*,(}"qW˿UWض~#4"h2~I#6hOU_Cepn Zf;v RJ]/ж~Gg >zw<Y#,Kh@&"9B#)k0 AdҩT:L&ɶv>[zi`1*߻pf+?xxc~ww)eJ(.w!A$D >G`>*@QnSοxx~].N$~MXgG$l 8?=!4WP^^c@m\E}k8.V've fqvY>cpEp *RJJ~LFojj=|3@s8'd0 $7 7w#17D"mI',08%K>C6VN8=?55bԳhV+p\q9(_'U~'] 5o{M97{W>jYݻq ^ivugy7]2+2_`[NK~WN$pt#z.SDmF}){?Lbג#\<þ:柁I !0vq0]՚uB_iN͊Z>,{Ymp-#(˒,-V-gQhΏBr=A2IE݀=QQݷ/GѬ݇D۲[;ιdEVʊ 3GĺI"((׍y{e .7| H,]J)D.3oɝQJ3!&=C$O:i 6B H# )cQۛ$Vmo ]+R(rD4XĖ奓ivY9EAur+,]2zt:HVM` q擟?)Ńq߯ DA;٠v$][ 6y'wB A (ۘAaMeblU[z#\Dꋻ輛ܾy̳w}cK&W]^p6+;瞽蠘 5rK޹3Sg~n<ꜻ_E7\xeHFGbۙlPQDςO>cQCmmm-+-]Q"^uZJa*jGg~Џh>cqkY&c0, O _"qwuAOɍˆ@RBK,̈>`.`0 oNGn3%#WV/=zƌEz)\շTf[r9{t5٢ϻ`n<ŗuN(䰫J佟[Rx?9WSӝdo*(U%zynO^9Q|ƭ/U7q~EZV5ҁ¼$s.psoft9O F0#頹`?FFFV:Td!To] 'o>[m⊡ U噯]2Ȭ SX$ll#ښ[JK˷;,X&!I4id[S$)B;PPQG~w]8V~n`eYo_mjVS;' " Fn5 0]Ĉpa+}tU=~UЏ?LpdGq]~/wt&}SѝZ[|.}ԘI#n5I-OSSU' =Sa$v ~I_E꼕p9tC튡O/P 4D:p&%brKy W|paтX{AQƢU]̍Si .,s**R$WY?Mg[MY66} &D3Jdw'03 fQZ6\CoFl"!SN@d`Ŭ h4p2 ;ܓ2^o -gt2-;#+!.0kg;]$&g.л,\e+dfLA}P鲣 RfQh06e=qr|UuJJv ^ K+W$[Z+Fm_(9ӾѦtV`ID"MttDiP D~\7Q(d<V`|8ȗ\>!HfdF@=wa" ?+f" TKeD͌w(3 !TT eDԗNJiFa  $ EXJ$Hzo0kk0Vf>y߶b.``-[ 3tjBoaYH:th׻?VR])SXB`M+3 s)Ǣ"״f=ݱ߰Vի` !yPy$(]@A$b)LV{SFEW^}#9Cqޫ^Y aq@_X5~<-M5_/_0.Sߖ v1>btWpm )ee!+]YܜLe62~&I4G9za688짫+c7a0֝V#ZNUo?fg/4Fw`X UFb]TGo`0|-$RC*#<Q BV4a5D GGyD]sSSO=+@"„L:ErgmK"NEQY,at0e纎j+*(jd +Ȯ4KnKq2ڦZ㾲rJ$36A7:b̘/Ske/m(l'*݅KlХe k[{)7_Dc8b0Rq{EcG{kU>}8/2s$"2R[f`HRdKlL>QԾu1[^sj2Ή5_g8*HP9`#@ lkit--]Z "IJS,h/ǎ炞s*F`5 HY908hY# (XGs_u_ %k a8BucaSUoS {Y!eYDrZ:-#83Z0?%W|D?̗0r Viu5uʹ6զmmKTlf;6/^+.(I*6FQEe % #$m``sdS2T*D`bB1㱍FD b%9/m*kd0֕Ƒ Ӄse qС6F/dnjNmn}[/y)Ç~>g pQPM/;mۂQS7z8Za<D0l<{/;|Λ16 +AK\k 8ޭ劍Լ ێ˅mTO|6R8a{a0TYOs{M{ni隺tu`0G"'` A *D(!q2A1A^aOI( =PSڞmkMdZZlO[8p#M&0"q_E2Jc68I"FڛJqtT+A8je_,_x XHULT`L:%R6.Gg]aϑZU|tpzaQUO ~̟߅P77[b ;s~'vq4-gWGބt|>M= 2ӥ`3/OhKx&]'As3`ۂ}Ss^e)~ zZL38~h!_ t15 w+Xc/AV* zTE;rOrooZ8ȋ`,4H Hآ9sW-[:~T]MYndRHg&=_N{g# `P!((`}F,OPhǕ)@$Uf ahu1f}:r$7֝pȭatot{;gS/fzl%|4z~\Vux8fX$Ze 5lkm6;O}&8A| ov>i8 G_ G´X9e wh0 8:劳&(-4 v1_kF#]v׫:/rEe+V(=dDDe'ƇGZ Y5CFj^›ˋ^}3EmK(DenWwʤQp%v*W۴S!3"ZBp##GM_~f.>s#g ?lRkW7@! -a{ pptyڏvd;00x0֠n,lj8`ډmvJ1 a ^`@N?\#d.i)}ҭCa%TOr%T\*@;]ç<]xۮq,3a0S@Кs0v9r:YNGn3Y=cNO6em=nOQ8y*,ğl <(q57 ^<}آhןq=uΧ((?-hy~6>Cq߭k9#!RL{΁NqrZvop/ 9j Ս9gՍR&Xl ` KVXRL%31bTȄ(²&#+U^"^A oE2ٴv7-1ֶ@.Go)=A yml}c;j/ XX’R 8W!W2JR?ֱʓ>K` :0% t| ۼ}ns6]}j3yMo0rԄ&|-1MKy5ܽ7kwnƛ{;;3yJ9xZO|ɞo7z->rA?߫39 XqnxT,%K];/A?OOpa+lb{}tѧ<-|>s!w ],ѓz8TnPcS4?Г3kt+7<,|2 bAcl"<$=}8ru, _ ~ޟ Ѡ?B];TerU'+!7 &/`FEF*pܜYp{ `~ kc~6vI`5u6p bv@}c4Ie2Dc1f5rp׶ ʋA^k1{)Q*H}?aeb(N(U\ET`bF9VHYHfct3փmۗ-۟oߕ[xy/E+O>{e/q{f.3~z㎿ν~-kn[~yrᢹ7h͒po/{NPW X)VnSfcul0֤>²m[?Ica靯>H)!WN)*h|{Q J`BTAF.shBPęR`AS cV,Y=?"U6( --i^$*Ū #+zqQYE|bI&X)X( q$(mVP YAp3'EiFU,w4]oT ;G8^CJ#A\q!ñWUw0P+[Nr۩3j~=O n;b= 7CJ#v6e~9 sX"!GA"@"JWq%|o[i0 }rh\i+rrR9 81Vy֚HU! v=0E2;٬R~,7:%_7Wn<*ج[}MdMLM ы VE>|P>ReL \X,IP $E (t!u}EڽeB$_~fXqmW`[ȶ#maK=p׹g~?LodǓ]`5sh?YO<ӧО1ö”yRb~! 55` Z6V*n n0 ~@̊u A " dFPJo XOwpPRB^HHg({{$y **xr"z<τSNr3H (("pr s1{"Dpƙz?' ?{{{{}P1#5jp̉l[FʡUuMuuUzO$AuUu wߵZn^^JTnlc3bqCRDIF1jpDP 6JtR "dN~,n4?k-Ï3}\i^2_J<`޽"\9k%#ic/ }duٴ o;iЮo("DQ#0XIU#<!!B"D!v ˭ x/;,K7IQ_Qm/8N.Q*5+7޵g,0WPD:"%^MKVo\\/OTWj_R~/_UUյJ۔LTA;F̤P I#fF뗯ZR[.wD)JRI?Q9qϴsN>2gK.]xz9}Ν;tzaޜ[o~3/Xk{u!Vmtыm,ig_o~g̉Lr# vrnGs ^}"{?r q3ߴD=2ae!Bԃzt82 S4D!Bl/lfoN0"J)Ŋv IDAT7n inӹZޏhD`dXӊV4h n޼a vkSUa]bO[ƪeO7Fq ®DbVQ0HQVVn-KjӱvY eȘT- &[e y֭4k%J2 {ۦ\21}^={s h#5%~/O m:λ"|㎿烍#zk4l@MT&$q75D!/k{?_VټAFMsdsm$gV]\V]%5଑FZV@,,R,4'M-u~Eu2 2vպ{sUI쵛j U@Pi=:Xwkm1f;,~ٳOk*C& FH"0+ϟ|r_N$(U9{/d7Bŷ'K$# \ѤpBbO=b>sϩݚ׆YW/xǤ}s)E5OJajK?)g"}z҅4/#1d&Mч)i|շSzIu?5?wݧuۃt>'>{/xo]Jl٪ͫ/6폛 }v{m:Pͭ-~1+vC6ȨsúW[j1a=(Zjjv۔WwzxTGnΚ}u-[y+;~z_NNzme{? ]sOwv6l W@eŚuD"Da܄AF`WNsT3-҉D40P(@ܐ)̢*ٴѺ`GӰ:'/a*#QV ULqR6j̑ CJL47Kl^CR$e6 Hh@12·X20N`p7|b7-Y[!ByydHFDsF%D!v1fP΃ҕgntij5^\e'&LqcRiDDv;t M=;H_e6Zč?ybJ̋;CQe`sдZpSNv^Zs  U/pyNk}0:sW mn?r`uu=k,1ey%K(-vEϾߗ.ևC!orpݦɽF~0OoHmwȢMk=]oΟҔbd}fp h/[NϘm!B YciYA> `n@"fpл)*J?`6nhuV 00 P&30TIL+ǴM2GUT ֔tPb`%#JQ&H 2xߙutͷJق$f^쨁eH J 6FbVBuT IB`XԶqgw?G愾!B} n"X9e\6RybCb n[-o>AKNDW,Qԧ-Nn;geM6w~HG̓fد> 6>F_=]?w~_RQpɧ ?*.pϮ+]y?VܷKĤ&# ,QúR3:EŊ7XQ}Nռ;`_=}9=uxl.)i*8jH1ˍy; m!B )ECTv*A+i2ܰ,X^Fp<,K.jܨ|@~ 1GQ7DXmFLYNVSe( RXQE#KR 7S,waـeDbTS/$mH@JUj r%efBDXp0^oක;wZd7d'|r6G{/̠3\ias@GyrĆ"Ύ1wʕ_^۳s=k;h/|=pݏoZfؾ*>⟑|T{))9q<\qý/MSKӆBP7ⅸ̫QW`^ ![uz@ٍ̊E:c /ZN}PV5;uȤ?v,5ƞvPİwZ*%Zh 2kk27 C%#G Q tVGd&$$}َ;_t B*eQN`!"$nfUIC@T6"5RRP0:BZ˫cA!Kl!P$,.Uj5$o2r)RH4L͘Y U +<"QF%HflOٽNRsq}؄巁y0c'Mp|y gAG!9 K!v^ DHĀAIfr$+E@yNA4"vŋݥs͔;;-Te.8Ǜt_ښziUUU\\ ܷӟ̘w_p)YW]w}qLt%*'}n{m@"Ι0ܡm']JƂ"mֵ*?Mޮ7bCO}_"2Uh,os΅LO0:7?3A̸>ݏJ&}5E{y\vRxHbG񔫑q3;a?6Лݟ䂓0S\sܷz#6ok9-!BPG QA}{c߷B1ڐ+ A2ێH׶kժO=TM9 em͒ zIXIO' A3ټĶ{ĕy_:|%:`m ۖ1gpcJ Q8iZMyVŎH4&AXGA8!Rh]P1a*ŻEc/k?IR-9¥SeC.hVm=퍯y#Iuӵ|z*~6"OᄌͿS[w˃O.6w;s]~αJ~GQݏ_wPw6ڃwGKX.zߐ#w鯏?~}-/~{3g_ѡIN]ו<`rO;C|o<`A~#-[urx_+Sxq>7.Avv휥K^~%X<Ƣh$F#e"ڶJRd:I&kkk<3 "Dw=ƞD"HX,FMܪ׶m۶L&kkkkjjVO}ޤ?]d.KBk}I~$FfV̒Y2 @ #Seqvs(fX)D!"aEbQyfJaMH``CQÑ$'n6Z)UCj4bfA FH q@M n J 345;|kD}x凱3|v"ij.g\sx}z|Gq#\- ޺٣ ~f,[·e75iꪒFq獘5}7h_V9~qwߚ+`t Ih"D!/}-[id=C ٍ!Bl3D Qap(tR}`d됀$(d}_Jm;<"!K s0\ `*r#B%FpWQ!q#4fˡ9Pܨ)R'|Z$jej1QHVif[k%ll0! t:վppIWN#5k9o6B_$j]~S/vX2J;@hᤆ*mW' 1gڪ4G/^]W χ;nᾩ͙T;튰+>pJ{M#`R}^T08Ԫ6] =Gj5f *ؽQ|XiADjgN\bGHdJ#vJ6r:k,R@T [%bUC ,VdX 8b!7K[B0 VId%&X6fLeʐ2"^=?l02VidE^b3+4J*eKDP3ѯ1gSVaPS6v~`֫YG?q:EYoi3;!mOyC9̣W?=ܚ3HZ#RS {*ӭ|XAW=bsA+zY}VQ7΅Fb'_  L2y8"D!~0 'NI!B ?OJv6M̢Z1+VR!3n6-J! e0 qI"nD@)jFv,jV@-qđ^{3n* Tje)kwrh9*ieVtЀnzCFJ2dZYb )0F*ZEĠMQ;،]^[yޭ\wП=i[-[AĒ]}]us9/ݨnybqW׳{7Nxvc@Sya?N=/=D2N?CN]݆W|Йcr|_?~X*݀İ'7&vIUfPe1!Bt8'0 !D8]!BDJhG,ñRJ8ҶmǶE[zH5rdoH2h404J-V~()Q e:!ln7w~y #kw3bsIM7DAԮCڈmn5UZ%"4@Aj?Yh!AD١"yvWi@o_>jn;j n CEFKbqO.F#sT+T2LRdumz"(VfՏL"֢im >md2F !B' Pnv7fD0LKRԢڲj'D D-ϙkb"2 ,HQ%"H0推6E Ja1`E ]1hQ)"H@X ɐRJRD UYl?5lа,^SH)F=ܤ1:% ֏1zh8!v. -#ʾ^:! ѓ~Ω^$41D!BԅRc5NU_\rƐ'6Ѫ<3Svߴ0o~\]G셏"DF0Ibg` "b?[g?qO/|IG>-4WL@@eDY.XHQL e%I}T[NQTD 9JmJi1 GR 3raʐ #YlG4(i@蹂]oo"X!vV0(Iŧ<GS@C"6`O{k|?9{KXR՟>}2gM[Ѓn\Gοߤ̏k'9D!'| gq $g+dDeheRIW_ *0ܐ(*AG@5' ĘAlF&*LL! &,4bH6̊5NZESDiq @D@T0DF[ Ō׭CtJH@Z(Dk#D!?BRY]NX!Blw jұ]u֯;w+._7;wIRݎ?v#O] "I;{lxYBկYfW8~$89-LkVCqkfΘ cf͸}|׬rc ;w]:_}IǾ>cӔ1_>>O_lv'H5]>v^8wvuZn kҦiF,4M4 CB5 *x^_ʼnc7_g>juX > k߂{e@v[Hxr[S6{?estY!B*˞Xe 3K4s7&[Vo*}If?*M E;ٷ Z}x]uF IDATED8԰o|t/t:NRzD"Qea✇ZED@] I? hPZQ~Ӻ^;k]H|n U_ Oj̥>=јY%j!D""4-4 4La!6$ˀFY vmsY(ƞ "Ghԣ|>Z.e%>=Z9Kh~"m4 :iO@ưVJg 0Cp(H>X1k]3&>MP~oʱKXuԨ^($ /]f/4cⶉ`,3 jF =DB@ DFrŀbO G?+ @F)9e10^+$rh]+8pF"*l:T bgH*PhVMj@)H*HɶY4(5RJ!o!BllO|_}#:/M(ͭW {߇9Y⣵5|Ѩ\pC߻nj y{W7i^[A+Tgf}kx'ē˟=ǕSǞ'Ls7@ߠ8cdZZ}"Q205]5u̥cBtr7>p.c2nuP@Fs`;;pP §S~ ˺!+p-DPFǝ\G8n#=/RBpuL=B@ a 3heόyrH !0л  38q]Jp),uLgjqИH$pkkH$"u̹qA.~>i~t W 3Uqe_ &}::h7ϙ|HbQ+QRJJ҃#"*DeYeXe qڮ<0yС nv{P3t00kem'VR ʋ-$;d|wG3ڄ-isБ9zc1cE=Sq^)%OO¡P#:G !q3urTf~ ?'{9xt7 I (|r&# +Ϗ*5Q;tQS3 2Y,&BtVDܿHrnwB3vX1dvl;8qGXJC^p !"s#Qq|Ll9vRR݌DټX$9=7LGFbs#Ȋ5?-,$VธŖ eҒ&6ZhK*D+@(7bȂ _.tޯ&6Dk4C/,x<F-+baZ6L&kd2i'O7Nv|<5pZ>_Wx]%횯9iG-/~jS{1#zt/3zWpMwOKZj3ҿZey=aW]v>)}yc_q Y93o1 Ԧ펼/fF5[js~qڪ%K(Zj%M8~Ƕkwg)#;qꚴ̸ѳ_4[?[&頉s8E{? 9$E# 8{hnn/؆4NZ))Rq)AJ h} ,ھ-~QatV7V.-ƭHIJiX+bEk}m{,ϊP_XBtLh mʺ "̎c#"5 94 0yR-^ϽwU8E1x !(XbأS\2:>J)H2`_B*KDy?XB. !"`h[zf6be#ߑT"OMh?އn9仴+G ZoԲ; r!"A=̐A7ϠG !<AR_Z]EAnyOR~L Yc+BJT @U& 2((@8TvCC:J@I P$thM|/QdJ%2eVʶLA6b9rMV@i"lpCHX Y:!ԡ"DE IZUJ!(mv?Lzo<񞀝Se5g^';[W)kݿEz p?/9Ov~WO F =^at-_;Ù^/V *gf VYg"u #onVjs˖~ V|Q=F_Ŭ:s(91grpnvbw>Ic;7$zvގnwto C L;W ?턋G^[ 7;vէgLӶG?De_g_BMp Xxng-DV<%VZ2-3bڅÊXi CVy!Dk兺NͩeC7 Mm$wu.|N.#FI9ǙPsHh×0 bq3ܡv@_on#;]DM}-|f_80R> `2J*M(ӝy$VQ97\3ӛ+.]蹷0y4{~ T J*e|{e捪VA!kAZq\mRtȈHP#Rbvmu]:exv$'jy>Cui9Slvr9c.;oJs>~=EJ>:l4~Q]gw0yrw;x_רIG yS\R`Zza@}fƏ/1k 0"mn "AČNojQ=G⍻ҵiɈзKĤ#G@b˳F9}WFbX&[+{%˻\; 8D`!銃33[Ĕ/7tDl bL/8Hmq!Jžû " ebj!L1 ôHIJQ4,4aFֺ/+wz=~Rg3 n _pL^ e*gkÿ~@2a"|1KTp]BkAqt_͂+RIwT>qN< gagX?$)evl23#%{D˰z,:6C(K̋њ "@"J) w a}bEJ}x/v?*q W|iC3/ԍЧ̌rkf!aWaJW|h&50Deung.9w?H=,޼ޝӇ;Z!.WWб{AL ;`}-4U]mWY̬"į ecnZwW|aG!~g L1cwueynD"H~F Ȏ\@Wm<"n mzrp@:!1|Ҁ$S^<\e BaPv@ $Y1tGgzZNʌD`?CӠ!"m#B% >TU~*FJ|a__:F%A׏B)ɈA8Û" iADT^#҃5|kYiQY"t[3vO15Pb3D!vȒ%Ԩ+rR"z1%ͻzi~tQdΨ+;٣f_gإs.\.g[cYzŽ{Fos8/^w]>[oEFEa^ҩGYr<0U..އA^>U)Inzfnv_;§orvJ NBK,Xj8Wo4G}Vi͒Əl[{sCȏL!*e%ɠaa":w! `F$D'8L2h4beB~k,$9nlglxvg*={B(in2p<]n$G'EfWSb4*94B9`ɁyCD-அ2Б9μ^g@2h€Y/D0,D<5\ >0nSJQ`y~fH% ݢRҕpyV ApRKɐnWP 2%D!~5(Nq\ ܷӟ̘w_p)YW]w}qLt'}n{m@"Ι0ܡm']JƂ"mŰ&Loۡ'ξSQo2>\xt x3ČdW|\LwUm'< *$ľ폼.qg>`؏ <懦m$?Ծ"%-9-xıވ8zNK;)Bo9&S'5  2M DB0> 8'}9NTJġd%;PJZ "ߐ&$D`RG h&ͪբsh(($f"ܝ^Hf1" fAw]KJ hd `1@TR~O| (\qwhDhqD&! x|硈QB418H9ؽ׊:(}7O~(;R D!RoAR̔!@1*e8$&W8JJl۶m˯-E%D!Blt."\HĊXjR&SZ7Jz=x:TG7FU.#D!vWG}RBUu!Yxcz>8/9X4Eh$D")V'8Ƣ]?LB2HPׂ<&m~?j`6y|t Ӏ]+"z68Nf; ER3젳踊;=hHZ#яQXL[_ 486',ȏ[RBy"2"aZY{;P \pa'֡ЍQz.\5nSCnWG7K!BlwdU?GOWIBAH(;/Zjj{{)!BfYciY]r!t۔W蓖e=s͹EMZk吖-vE?/o}!vD Q!>>}i]2JXz=&_kݫθmSu~T|Z ێ^u3,}o?q4͂uY)gsnu^%=af쌅+67v?9Vo?ޡM6\!>#۾1b 'ɑ폀ކ  "Sf0AC$bB0K \ENRH$!PPPg4h@F U z);Sl%Q V̎.tXɡiٔLJV>&>fPL21<ϋ2NY C?;:g0 c#3!"a_O-H "4KGpc1t\P䦺44;G`M[xq1Cю%,ͤ H$2KpF&9M9t?N&Jȕ_uD#2YXP9D!v{gf62H+"D틉:mIu NCч/]x/OYe#U{hN>K7k3KBw%)s+UT6r`lHN,uπ@~k[d=]q"Y|]bLȌ h&H9.0 ӱCk`jҎ.0j+D4,/U2j$<dD"n{Xgw'Ͼ/!Blo~/~'EaH)a{"!B؎ho!g^]]g#g>1dUt@vT|/vX kI2y=rS% 0ʕ`FV zR y#9W)`kaJf]2GqO y)`>=D}OWG$ ΛspJ 0h3D"7]OB(}쨣Fx/"$8BcW>MD  2PJalJmi;mێV%%Pc풙&WS_ ?d~N" bkT˟g\+]u)ϡEy =[&\`kn褖iYzMd3{x2_orVy^oLz8w)c<5Lwٗ$8!KzT@Jc;Ub~gvUR|߾}gϞ]M8= ^0L4MӲ˲t`ힸ "f-^o!#X@J)$oIJIN >AȞ߀˃2}lVdXp [143&o|0ft(3K -E!,bF 2za-q /=7HS&P2`Id:Y_gs3w]@H:(0T=Vbڊ?;p}YZ,5c3FB atb5=3 ueHVDv2bL >^s>~UdwFOQ39yPt+jjϳ>s)!$Ǩ 2'H"J)B)1cB(B(Av={=kkx>߹aY{~?V^V B07 ǖ,,,4?d8 n9KqC /B7 ˧Ȗy(YAY ӣ Tz㻙x&:GC<#jh`ۅ Ct(_X )ƥG:nuu /Wʛ{*A'Q&d'VqPU|'KlpXrYh%*U]نgh~n>y+L313LlbڊUf Ā̪!k豰 j Ix4#IR<ep"BsL  VAW͘)!1HX[d&$/F8]2`13S}I0"gx[*d8rw쿭ْ-7`OLHT*#L ' ƒ^.3=+S@X,@(>r.2Bt15=VR g=xCw'g6~uB2PB%V΋JLj-Z8Z!"&ՀiqERf@g"L%UB.mF^#~sAR /ںhM^.ܜ8a_x}MOKO$8j~:J?筠@4膆9 [eE8l=8P"9}i%=o~ zX9`CeXk:tUMs<`un/aYL pBl,)'H*0SW [$@H-r!7DUoyT D UN\ƺ;ac{2+ ͧE3ۏDgc=IS1oտh91ooUڤmjݰak"͖lɖl# "4nG `y 8}/3d=q΃T)A"wWn<]`jq l*AJƘGJ":ޤ9 (+DͿZ)p%sGCbC3ypqeTzK)S/BwCGiBV{ ҈ : 7?#ObS_'C"BL#^/h#ţ$ (Oy><77UG2??[lƐ7D3rWV _zu vԥ˙yeKɪU+>JJ"28>/n{J 6m[on?c;И-;h|9"'=811EqAc 9@. F5(R"Hh4H0X ]MQNYC[9O%E&xb դSB‰1W3jnI)* eolƬ5Cp7视>p(&r঺d;!ƞ!C#LHۉH*pa- jPTaYd)XG TO1I1 rrRyyysI&$?Oչe5ܮc~ w͹ 4h9 ۍ|#j前O^[jӢ/߁{_ =s_qg~}uAݯƳNA/-?ӿ_VQß{h\oxMɺu'į;3|" 6Ag}{Xy9ϺTb7D,wOwl}(];rN3.Cӵڪa iӦ`Vx;VR%?lol䜏~8j{%Kñ\?z}Ft)4aj|1Tm0xYOWpo( `<"C`ktN,B3+ -3&x`DD"@)0fEb$?U.pIW D@Hv,ZMZ J IQ2}SL#Ҵ8CJGb&B <+#`4Sp T*J$ɲm89\CNnދ7<_֡nW˻Gb\0ᣇ_zs?Bl S)s^̼]:νO@ks'lyF ˛n#VRzU>W]9kxrQ WתwǏk[+?رzm:kºYGN~rcG ؐmqtʹvx/9we ٯwty?\_Fz /izlALꀈߥOu[<Χ~Xгא?Ɏ5Oϕ8XWȻ\&gL*I\O 8Ȑj zcz5^V&">. !0R)Υe q}`-STZWZgVϵ7RՐ*NiL¬*9 iٻBDAֆ<\lHV&e *=G#0!by5SDB !{pج IJ1M1\T|KY霯mԨ+/?#^=ԩ_ЦN$Dq|[>Օvk8׭x?nhsYocQT7>aKKd 9+vEQVZ5qDs{-:믿~;wqN4?*t_p +/I&99®0("d&^.r@RsnxB7mZ }r]g*s+^ت·47҇z-Ѿ{S+T3D_شX]ڥϪ[7Ϫ_+~e54dOmLqQp{~^%^Nwsє^3y]ܪ"nH"ʐȖPRޛ_">t8׶gL^8oK~~~^n^^^nNnN2L d2) Z48OɇNͅ\"N0qA2P͟ C9pӚJh`8(%4(գБ0-ء]?\xœ *)+^MԀi -OaJluFNTڍ v&beD*igt4Qn/k V8 dF֏]+mg 1L\ޓƑ T#B΅#Ihuk74mK$6߰q="$V"3JJJ3g,ZX:Ӈ2fcoiOOxagxk/|:AȌ+I%ɊLf\cĉbs `^^Ӄ>H} dudrĉ7(QGӦM޳g׃Zoi7 9֖8+:N~eg(ԴYy3ATH^v~&oHȾE,J D p"lzDR nCDSG.(8M%Jh:~)C_Z 9*Pd"Įڕ$θ5JBsg֜8 0oJiVR hHa>f ˬ+0ʠT AD0&!R RRkCnPD7?$sjedŚF:G2@2H$G w+ DLN׆߿?FQqĵXZUsE F熫k!E#g5ӝCd@F}ulο+۾i[P/ڄ7sU=#>?yqw.UF}0ΑC6TQs9q5k`Т5`g 1Е ̒[h@JG8{Ɠ;u{,5cP$NIylLV2T*2H/E=(ȓ'"Uxs8\3*BekI0\ IDATUID')ȹ5σCm5.Sq[ dhzjKrOrEf )%DtŐ1yA1/NqŊBœ+`,?b_XǃN܌ͫ@N}! d?׭xҍ?6U,gYz xy G98kN8nڦd']bǑI&q:\(*ⶵ3~{GYt7y쟩9Mt?@W:Ю]͞=XEp5O_~}}A5[xFB#c`DQ}re”B)*a\;"=%P-1OK\E7"W>t91r6P(fo%y=U &Je̶mw1nl |GGsOHą,J֑dO Ui"qѠf0iu^ PCD"qݸ[)Ժ/߼س_c/b@Lvν#.T7q]>H>m+gv=Xs~_5+u; u%/WwxyU;Tޯ:}s!=[l״ʅϸ֥xAQ$8yٱ4[*q(6nɒŻ5hx 6Ԯ]g߬_X]w*\j9Ks<.ιYL~Y7P˖ϜA\%w\zb ʃ(]Ф{%w l۲E͚-5j{#O]bSF.*o`{43D/MzzuSc۫1nQvO/8mzuMLUFa;).][۶m/_>;ݭu76ӎmPwfm:MrMl-o}E{6lvS~ig퇽$]dNmDNFdƺrЃ1+cDZARLy )P&d؊ f &:2"<#!qak)`2ķ{h@tO֪YAOʡCPTm<)CE{Ɗ XmCv#(`Llfϔ|wh_?ރ'樂=u*]$M|{ޑާNav'ʬ!-~^I?36rŴgrRn^,|ݫ2Bj=\W9ҍV7[{MpaE'/{MG6Ϋe}BUIxG +^q}=a{KEz6&g+*02ݱg7nǍ'Caޘ[?/͞Mx ;yk혘VUkmS~AA籢Bꔕ u 56n:F$jEs?~y|YՒ6mUV:VZ6m*\|xNgԺ;[Vm\< o݂B\*}>~ɾ!m>fޯ?=k5}qnݼ?V(?zVЏclÆ EEEێĞ yfkm$i]ͺTizy^ tϛQ8~t| ֿ6|=|9'];lTV^z~":BVɩ'~4tuYuw?nr3w(R g gnH^pEHV fcH0'V:Ubs[b+ఔ\V3N+qtJw̴"b]:[jH1c覽@m56Rd Hp[h&EI4h.ơ?1EMn,E# DeMP?Ȗz7fok' !\B0&L*;w"! L`G|Nĸ'W?wVFEJ%87ISlI$Q]mfp1ԝR:pً4ےX,RXcMaN6sZ!lG1f iE*bt'C0RG ̀ Lʘ#EC2h҇e*?/?kRy"Dld<H 8q=*OѤ+VhРԩ]g{w`ѢEw^I#o>[,ѫ%'-/:P yw{uiu;VoqMg~>Jrʕ+Wsಲ~]̧h\*M'STPX)_uq\: ^Cھֿ">u֭mz7\"P/li]=7Tڶmmf덭ȝ<%|~` JZ/iҋCzmm{ OE&u(5 8 E Ԛ&0 "0"$LU# -s.mWH R3\?ҤYӐPe`JI0ۅ0Y]0&U^֧SEW\O{ݞ[Tz|ej4ڻB2ܯ`ű;lSywǎ… իw5r>/~)~k9~s-n{_6變 OR8ڋ FS˄w5J0RFN$"Tn}V6"PHtm&@C$DM1Pf_pC$>G]1"jvB^#z5 MvB|#Wʪ/3h;7R%aVj7pkE,1-QIԘxcR%Kd.[!'vyJgL'Pb4,A@ !' )*ȉOD8Ւtqmw`rS-N3WW4=Љ{ 7iJ SY4ݽ  < 0a_aPy\#W' 4:H+Ɛ)>M>!fƓɳAࣇ|!)JAYGyn аa5Z}?77Z͚[TٸqclY;sI^e̝;J*EEED`-Z-ZXlY ;[ćoϴ-7;l"5s B1n>7[=qؤd;lkYt7o޼jժٳgmvm{u:^;Voql;:qn3 Rg=jQ%faKWi BZHG%9 G he DLZ{vҩfgZO0<_5 cUc ?{V)ĵ*i4V?qNW@z=B[p*Qҩ y1*F"@QZeNelkԼͥw<9=c87ToܪMco;.3w>[etB@NJ?,{5qi (+˜&NZ!*4L7=6+ L~yf|X3y1VdF,VQC+`57 a^$E$Bcw!, H:0i̔[QTؒ "a2#]OHFXFTfmY#c2Np j)xOT$',H*@s\3zidBCw}3g\^A;U ~BD"LJ.7|:רy5íTs>iӱ_q;u* 8I&M4)$zswT0=6h:d@oP{('XAC\PXVHE&MpMƎ|@uG/-fD*rMc+zs ̔h\g Q@AbU̙p2Kȼ 5q*lVK]IPVЍX"{#;}\.G (m[[W1ۉSfvl/߸WOW|dK8/؈'VAmyT"Bo)/I Z^4~@ajZ<.yֹ$beksJYn ƶ6-Q2_X| Qb#.Nz:DT(U*o`) IL vItp#/ "0Cmˉ1CA= 9'SA޴\^V^[pMQ aeKta >7bV\}6S6^yFbPkx -zYT _4 KT=QEcYppK5*|*,1Qu1=s'?mHzI/O`܅g IDAT PTTؤ=L1 wd?GVkagi꒟_ՉNۺ?p]̌(++_??6[Ta L1<ĈmaZW :J+D*] v 4<9o4wpJhL+UdT $'B$mqdjKFrIH'EY-d*Ū@ddXX"3/rαE6 +S]YM>Q粥`)8v2l?W9;׼2nߓ\%8ם}kV }fۨutքu>nǎ^bžsL\^xGNJ\Y %Xr͛~^JjY=WП{Tսo_zi<,|X=w5jq;'vG3M=菩}[w>zmO<;aKz@^Cx'UbvYwtʖ]AӒU&?1.="cuaS$0✧MPSOaz}R)rb܁bĻ`/f)0H }`,yT+ƂZqG‚ʘҮƒX#A!$ЅI X։k[Ȁ, ~|Pnjoz>'_ m 5pRo|=A]Ͻ۞'s .xm¼ܜdNNK~s,􀪱 ל\cD"$v7ǼX7x7u6n0Dze8F@1[ Ffz됋)< %&Gε \]x]SJ7w3~uH2!nM#I8L6! 6'^8STYtKiiIIIII͛7רQrXӷGC>,>UխfN]iMȫ$%jR$k!KI-)< U2ƥA] ^;_Yz<[lQz<6vjզI-N ֈo7xc9!Bkٵ ;}jʾ5Or9Kުav6]1]{v=#VJoU;?]M;k]ݭjlMM5c, Dr>ZgސE!џ*bO-;UR|w7Gڦ3|4co$D")oPܚk,$ .X(+<" RZ°}Uuc ̓;Zٻ52ݑ< [hQRE>dCTZKY D$u \PCgd2u ;Ĺ3EwV5f֌eBaUN6E@ j7vJ+ OohKAHlLEwx\vbx!m;ͮ?v:swgc~QYT 9` 9ȜjJ%2?1Z" Q V2 @Tm;*u`CQ)b  q!̡+ mC zE@gi "رJ4RRk*Zt!. e@OPcJgeRZX4TaZ%OK@Lõ/3:ZV WBC% ;7z}ZC < 6nskw$?SP\cLYq@ͦ "">ީԗ>d%?zmRQuA5~gا)9?(6:Gݳï j׬qK=OWY5}P)_hK֌V)gƤ9U2aOϱ;d}EQW,|ur׺wB1nImvU[ ȼ,գ#K6n\m{Ds1{{daZTy^vTw5هl{pжw_Y ogNHwT}mP;[u)^PT97NҫWIWvlyTBX_?pN2\!nj+HaVdxJRLv,7T3YDCLVdMKECZќ1nH,E4Zi@BiB5se EsY+z0P1 cydy7tM$i0iTcRA`g&)ኟ!c{, :yC}]wwf?1 q rD /̷|j# 1 EEڔTH0Hނ)[Px9ʞב 6`s`yNԪ!g bm^\rg!. 01gIrJQ|(c1XK_)PYE\-Ct+i־2(†ѧAiiɳcC}D?y-|GԭUA&nP9ϱ'4,r|wh_?ރ'樂=u*]$M|\>u ?q~˻W;a7=n\1g/[ KEz6&g+*ͫlgNHwT_UJ7^[a٭ؚ|E78^ϗ!bUOye*[vr{хfn( SIt:s9Lބ+Krv`&:mkb&qRbMMRH# 詋}s̯ h%a1rwAI$\=&JC LT,XB@$ͅp1 Dz bcd\&mMJu:e1w la}^z& y<*Reeeeee%[lyzKr k1[%[|IBk&}qP&=D:CBNp@{8a@"ƚRPWCT,`U3g !4H)a+4_y b[jՄ83V0sgJ+xĔ?0t'Cn+Q鐗nP**Oe[JK6o))))޼ys5Kw߰P6;ge!3,p"8?d);Dc/G^^~N2L&&qCRAXj ~#c9GQU!s4Y\0e# ʀ)p"3QcO Q3+-y ?2@<q h-]r JiDr8hpk28p.ਞQt.o̎}C=f2.C9(=$i [}o7$Ca]ޱB$$lz*j-{C}ڳeR2-!91#Exi O q>l#JZۻJ-]!&Lo !%an`7EĐ`N(qYƘtH71Zk !% a/Z*C%dc၌Fj6Q Bs@pO"˴S0!e2d Eeܢ5_HF!berCDȬz@tZ1uL $DB^*`!Keʫf_ْ-);VXoWc9v:_ MG ITX S8'( bnnSٯb"0c4"㩠5jF b> #9VIlRVb$#9C(`"~JL@?1wFoSxN R) rYxXXL,uE/F, UkV`dpĂ)]uB5WaШl()o=3݇5Tkιx.p23Kt}fQlɖ- )&!%ޱ-u$EDG1.B(-d )J :]DL@PԔ H, |!p*HLՙ@@ !h i/fDz)ȚxcBEt 8GW'^ Ƈ>'$a΢c"pQ)T HqDFMQၤxҞkXPKVQXGu c$C&T92ŗA@B4q {-A:z (Ș{ :smCo|M}jZ:o&3ײJ{㻜r:9^Yеןylkcֹ& [4ğyWɖl9矿?۽.W?6gE zFy󘐟bՎ1,"i9wg[Q}LKTat6>, D<#`\1~ljG/c  W4`IldTdjs CmN ݙ1p7Ka?D#SlڪEbІdPo` Klҍ~$L{^J ".#ݛfKdKl{6q0 TSp; NS_ K RL{H(!zazp 8qHZ\L(j9!0=&: m:@\g\ARp3Vq7RtMCL (OCDaDW4%rÐ{QH KYy#H + L{P)(H?y9/ƑsDP]v* 1%|?H1Ƽ̿-~ˣSv >a7>/jwr#W҇U/?\úO͊]ʋL~_Wl,l=׋):F+#X7K.MOqɁ٘_^h[~en^lAdACNc{rCdϾ VLy~ W'=Uxe7+'jxqǴ:yQnқڼ6.8_߈ƞ*]mݦ= -k71yUw3uk%ؤ_2!:P}+b:MV3ay#cB-;~[ޗ]qxOSM1]ަDсA񤀷۩)LJ.HweDmZvLʖ]8d- LO1r)"N!-0iÇ`Q(AQ" T12@\D VLW!tIC*,X,sD4*#@ߊD$*ȱSSp42bY3E, .V>+bV5+2ꑐWCX).2*s|ٝ~3Mƭz4A]zo-jf-$nh14r ˳Bv`C䕻h]Q/'BdzY,pVX 0$EMì\A4zE3R5GCH  uy3\Vwx vh]J C,qU-Ia<) )%TɃ,`TЂ HA3$G\у Hi۽چo!w܍U{Y]܄.mH Tݽ}P:Bo|gNuE[nκU%K>|Oo;z{Đ}sQO&YJ.nC͉ܽC%nz{!ݧ(Hr/M~.~W?\MC0r }_ڣi'pO{Umnx|8yEv@-TMj6!+j|'eMjSkZdˮh(q1)\U_]pLd^JAmM58nfJVNܦIӤM+Kڣ^š{tMXЂZk&WM)k;g:,C= &eRC^_Mo':R+Jws ʚ-Pli p\w>p $a:}tcRJIuJ\'H\;bbB-DT+,\Q.-⢜P5Іk"B"ܙ9ABHDIZLR:Ȑahx Y= \ȯFAPfȘ̍IwUU11b~e%|<=? y`ccO1>p0h~knaq-̷zB}W, ٛ5ډ8W>i?Pۜ7c![_[^m\qz;xɍCxd{/ bxr?`>?χ>o}g}FGGfPNlK欥 ::…[% 5\EF4-F & {ؐATzm$8B_F8DR$O yV!0ibj) -͹iin{H{R>FOj B"Ӆ5r\͠h9򶆋*?y{Ւ%^y϶~s} 8`/?<(r_ae{?GGoPawxķo~blo>o;Ԟ_x|^۝jϜλNy;z]u27r}{/y[|i%{ƞ03QuAtۯ/ K-{x!{o~4bwyj.ο37\D$ÑW6GZoI6nOLLVW?xzݝxKn4}8>\+Xoi}.mm{~'xb>}wqqWrzQ0s2}t̷ɸM~YEHQc}L U-ed&*:2dAPlNl KGnx lĆGƋ?s:1{#Ud;_7fʍ}6Z?vGv;~?Y@UN3 |vGkO??_Gw:HGړ>zޓ]v>z]<0qztɷ }f='g8kc,SSQ lY_SqN'z2 b@ EPirt:j| b"qW1t$!NLWI Yj=$S61E*Um>/1pg4ϸT4mb1+cʥyX"%| (0Sfv888In+hDUO?U!@B?'@(RjR 0ٍF珎կ*?|o|\v6do9^l}mm[ۯe7MwY|ׇzQG}s{p'p,̘^w[my߼Ͻ{ǎ1mƴiFFGFF:b \7|g+ylphE(LY^W9VզBCUZ*ƴ=?Rň eCBB50ίr*<^0Q"xC\2?ax6zdr5[2nzJ-Mt+kQʚa1lQcd7NOΛ?/[n庫ϐ_Gf`Y.gW_l՝FTq@ذ;0DLT=/./9F;2_>5` X?Ṋk"GzN 3?k{z8QЙx>o8s~ykKW.*qXQKwL>m??y_2W?ynʎ.66wpb/OLE6v`y*o(F,.*Q/x[E3xjLRqUg'<3IHYԍ0@&C×}}?9т!Y 5 B` jhUWe(`Ca!GQ!U-VZ^kIHABȈXUjIJy(RP!FWK5 r@ d\SQVU X N$!Զ3%Pkig AJ_l sp"A T+ HBYXCrdYS٨bp7.n&6j$(ԙʀLNRJH|}gJ#@(ykѭ?c/lKn$ur߶J^|ڵcݱk9o̾O?o=p3r}g}6n3[f}3_x?8o[-6tu>giQݥ3'/[nomahmGF>{]ZY~O=ڇu;Oc6=[>xzxa18T"{!kg4(%/8kmթ#t!? A$ DE߂#Q7F+ZI }b"&FQv  "$[!KH0A W BRR ȅ;  KۓcnW%9]iޚ'LRt2Ku]&Є]A1dWRva$V`DB",%XH"琣)Sɽ&.Q(;4(iVCp_ {PPbA,Lԡ 2< ǶmYVɐW4$M<}?]Wk!W]>KϜ![}|r?h\pV` `ߠٛ>8s:ꡗs373.?}wjYtְ7Wng>>yvig=l<K@+]goÀ ʑ/ιF%,-2MѺ%iSo#! YSO/@HnnWP%S*GbG;tUЍ:cT̺J"iMy>' O0@\pL1&Y&y.E |}JN$.TnSPec+V `( ;U(MNNOtG&&&GG&FG3ҫDewl_mk[^ g?R2>>W+Q9ӧO6cddxxxxdY0 PUN7R'PYvPu s`: )8s{Υ#ְ\,V$%s-U(B*[fP@v 9~k$ *-+I573bX3c=.Fq_NG79Ul `,M@6>8:y -dY%lط> sqr;>>>66>6>6yO͛Ԋ+")QyPm+o9gim{gƋ-a)(:Ng1$E[Ӓ5<#|WW!J,V/NV蘉[e $7t&;QLvG0ߟ2bB49 ql I]?;4I ! 2WI_LJ K9ɅyECC(u&f(1Lz10!˻RѨp2`8qkrf|RLT-E  .]D`%|20nQ`P_j@mm{ɶfpdN,Io9(9aZN9>d5=R0eu%}%a)ۧ^TH 0v]*Jr kd\Z!hT+z4$qU9%7OXFENŗr U0f搃?J(h!,CH R0USi3uR:VDVŹ<Թ 2{;v@L~\!+ eЅ^u+aD0tw}]}6ڶG Y"+Wbt) dhBE#C~2eb )q)0!@@{]knH)EHfDXTr$"iQ&`g `;ɼ[q)AШ0$ `i*5v/عٻbċT.y[ 2$;Z5qj&(L-qs|C=gm ӈpEn H6`L-%.'C"SGV1@@)!P,S 0qϥb%*SRiV5+ȎscJ@qU|LHL6 x902WB kƶTVDfB( z Jf42K'=CYt,E`b[Б+E4 "G0>Ѷ^g})C޽Jc`.VJeRVHb0w 6{&r[Es2 O-y͞X =N$\wu G,QwgRY*Ƒ𑊽kCC5G"$x*44oz0uХe_[9T){;+koWc>9XՖ<HT^4GYLhx)Gahmmk[t:!FoEHCZ:}A+@NU7CkOd:D& $&$+GDlB cBֶ@6jU'b'5yBBiMhؗXl*Τr"bDdj퐰J퐪Zd,<ۥeOĉ)j+onLN]"crYw#MX)3jI4Tq Ǭބ^'{R8~sXV & K,"Ap}'kĬ?LT+BQvV2^-pe;u`0=,K!#¨^Eη\RKdj~ *-%%뷠bTٶmmk7>`9pk}*e=̌PQLC+#$V^t(D*d P|EgJ&9$j,sQ4u]?y QiRKsY<t"yqDP$kF*1'w.2((kAQM7}T-a:̡q`b4M|XJLl>hIt7wk922C+ʝ)аk<535/rՔd%dא(>Qc2#We6*I| C-ͻn/OiK+j岦i[W385f+CqOD6H|յ&hs-ȭUyZ>8v>Ղe'3k2d 0 g`iqPl8!k[ֶ=F>P{z4ɔK~YlN.T6%{)>DTs\(- |#)I."6 Gk!]bu 6q3 8`@wjcO I%6x(B ay ǣI&m{S2a2(feP$<H^<7y&Oy&zDj>>guE?ϟt'>?YY8Ă#0DrŠ&K\Y3YEeibeM-z8A9LPE1KwX=p *_;R9og=Gѫzf)Z ]I[eOo-Y:̙/NH[dj몢LoNC:mmk[ cyT L΄] [!K_[i"MM)8nD'ļ(g*NmƟUgggDB-&P4P. ;z7T\A0ET_"% *D$jqJFQ 5;w9w0 23L 숐/x,=%?08>xPZjmxˍR?59F݉t?톥V\u-_<7z',,.>6:m`~mԴʅ,1wmEFo#_zY?+o/xt%}F.?Ŏ={lƷD-=g,D !dҡ0A?O,0#9ːf,+`ĀE0v?!%hx%%(Ҥ̈AJy-خ>R1Oƪ|F_Z %]s% 'G^NZ`!ՆP"0!Uh1 k+Ӵd%r)jd@J[B2M4NU#SYC@9B0 "9&7bx`IQ_RIMd(Jֶ=FP¸D\I-2K"Tapk%j(;iw " 0X$AՋ+| B0B֪L)\eos,UD *EQ׉*z̚" E9KT0"c,eDBtD@^Nhmk[Z$t9H^̣K} QQ #3Km}?h2@7+m!>"L)Dl,B(C:NE:Z&''K3 b0˒I<3  #sY)Bpp(YcrNybP\Zi[:N(+ㆀ^PX鮯K&MY0ndN#,1n$]Y08L!d42 (8#I;&jJ-Y*lWnǟO~\~{u/㝙kϲ#;m^NzW'g.m9~#{H4}uЪo>]c76WozN ay5q.w>: ),=&rʷ/Ώ6ZqDF`m7?sџlAKl^[s^ܫ3Ҟq/Yeg {(w/"qG~snCF Wz6^n,+޺Ƨ~g;~ ]@?kW^qa֜^1:Ij~]l9ik՟5G:⯣{`N5g-e.m{6ZqtZa߲ B/ Z>Oyt˫Nē|+xwx/NBiD7#Ve}Q})C--Fz~AS-WuK9퓎N u TvJ+ePSԑuB!2Q6jDM74kE2A?b8hдHYbkFlw1/0;ƹ\^ JTVL<ʟ@N QůUY"20d*d@]v#QHhvM:682,H,3;bh9tZZ"ig Pqi  tQq񓝛KVz7`HGJ8ELDbw+|%g/Ҫkrz ]8}=ceg| ?]WG޹m nZl;c#=9Gzj/o#v֋2p۷7o8pҸƃ]kYOͽW3WүM~`!;Rs&:y?qq>ߩ\ŝŚN|[_nx}pON$v??YGxWw|r#lT/Ou}/e.ɉ/7 ~=o|0*??^pyzVR?T.ۘ,k!}[biEHt1͂gZ?7bQ ȴ d0%[1J庌U$0Z`^hlzPC@sGrY"#KǃrC̘p,Z6.Y*!Hi$ӵZ;Rc䃢Su,/ =:zPmMAmk[ֶz@ܪ@Φm gY;XMX7JERZbP%tU*5T Tvkcen7&~!j&_T>/>MdT"v%x19\T lQӇ#<$UJH.z>|&s>El^%@d* tiIrFGF) TZkReJ2Oᶏapaeq>o7oo?g{ƷGv~lD?yTN'{#jsvsߺn337Y@|&;u_>[?>c}~?7gFog\51gt/޳ 3wþmWM/[/>>/+Pg`tucןżicܸ6|WieV][o"+ğUWٜ7o`%W"~'>F,暿6̼y헅̧uG*OTzϧ 7?ʍ-* BA×὚f#o C^'R0aI+VIIA6"NB3!ɕ(j}ť*/H\4Lcy "g1660o\Kx4;({6_vy(Zǰ紛 va︯H΢qT\ ~LF硯:h3ʽ{-Smmk[ۚp*Q@5³6(Kd(;8.&t仔+R8ڑeH I^`8Y&=i@?EQEa!j_r|V`eC0/ȥ[HT"áF2. 1RR,\)bbHlQT:0R$ R,ϫ:Hr-9'q#<&jcB^1QR+PC]dURv*B~Ɲ޴W/C~TN/\gI[6WZǟJv*iSs}$_ǽz_疋oņmJ֟>pˣ.;"{W>Wv,pO7D$Yҗă?:D?&7Yq0z«3ޑ g v#ڈS|=3kt [v_=U ! >a`8 vbJb43XIq2V˕G \";~oAC ,ƊS2ʚr03E#Z(ّ$EcRnU Tڡ2reI& SIk/QTjF0qsoS ف@@lj#QVik/Fl]@lֶ!W !XȂ1jTA W`d<>34T{zM;P9r)A$o!A WRM Hi"#h,Đct:#P 꺪5bJ=ǵTIk.pzʕ`T"0VzH_'<][eb2)LDt7-eF.o/^1fqnnz嵶W4v^s$ɱap9پJӿ_=5xɹq]׺oOq*'@7qAh< _?wUtϹ'%7;qޥ-vzm_`{߹ΛWx_ݿqy/VY矿n+O~\~]{5W'|\o|y߻'"s?J}3gq)[|!x!gGd6Zy5nC%=\ HҨu"Q$bP2b-NuYP.TIŌ]""l'L&[5s\\.*U˹V8\2Ԍq$,WM*Kfo/$6䢂P35vanx/[urlCa=lIֶiHZ+ಁhD&w-"( 6I=48}8-) _p/[E!P6U@R'1h:emcE9Yvn*QFlRI]Ub«"wR[e)1[\#YYJp"d2s$8>BQm*o6z-LTJ,E^]Z$mrAJ8BX7.6|owؾLLs\qҏXl5v8mn6t/W` Os.:8;?ϒXv^yq]<  #Vo˯pn7 .;uH#;sc]}3ܸ-{Im>]Zs (hgYI)83|]e@?ӛ̉jRUm4ςLe* gCq:(Ԋa( -yJJ@_9YaJ|RuC*y+*\^01 yetry9/*VF k[: ZNILCTZꆤ@=^@dr9UL&4 ##uV)j Na.ax!^ۋj 1J NRL, F-/A([JH1̳1Q[$&E$>&$bSxĬTSFJIS;D5u=Ze: iv v[>%叔tU5YG`&iRQ{Q.5n W~?Z#0Rn8!v1NNNΟ?>6>6l|ttt8kUV n۾=p%_dmgd9^l:;}^_^vß}v]~52ˮ]}Vۨko{=6mdڴi#F  v:PSFYu2X飏<<f VrE89++'Un`" D&\Ců'zR- OwUb gxEM<f"# \4BSy\C[ɿII/26\>E|\DVtE,JPq U*B̓nwl|lttltb|͟?*ujϧkuW! a'~Wjr=hv8*WtO/66wpb/o622<<<44488NdڄZp쾼n-R4{mkQeCp饥)OvĜ($ aqjy]TwJ.} ;)v*R%ii3ռKQTxuP%YkshCgYL& <&bbרlY AV7y,>RQowDrD?)0G6!2&AT$_BWI='NO},bguK}>݂M{i>K˻f(L3d(j!u9%dѯx֩DB IiVPdyC*,-hl%mIu!ՁH6ۺzGHȓ)KF0x_9dd@lzkMi_zy$#Nf4 bQ p @%*ֲL\ڨCU dI@7j)9bb UUMeMCVR>% 0Auh"JZdې4BJWZWCD =s߯|t_vߝc׿ٻJσBn[5ClB +2Z婼c@ (D;41DQ-b7Q X:9| XU3BpϋI܀ȳ )br7GUBE*$u<bۂGLj@ϥP؉O{ `h졖b\lFa)yp@cV]C(I6Zyիg_:>K/ɻp?|k|Ϣŏd% +bp=F<Ղ$ -1Ƥ%3(:#S+帥A4}s*"JTLU2ZH;KR3Wy{L[ȮUa {8R˜4H)×F5ftVW]䊛M',*2Ebw;s7"ˇr/eM!g`gpMC>g!}ӆVxvW=0+N>t/B': O\[|Gd}M\qx*hq?}Շ:CoO/9ff XzO\|oz'L_fIOl:|Gkge6n6yJG^>8;/VXK5Bܛ޺CExǩw?Bi[k8޳ʠfMBhD9S `G(:N!. Rd!iӡǒ} h&Z8:nK`E! D鐢(0+\ЉW&#S5;Sn ׶+x!${ pCӄ%O@`)VhXLI5V,s 8(~XlY(uF 4FUd@A7d:EiڟE b ]rjImdJB-m)KYƼ8S[yiڱA=@^B%Kymr_Ap_6F";-39:z7·۽#}c{yKyTN~㣏'T~8w]w;f{Gk{K,9[c?/q#)+ǯi~69D^zIU ӷ?;wTzz7#nS6e|:*LtQ*$:%!H*M :İ0+Cf`DunP$MJ%,S1a !m^Y \t-(< F\u t0 r+Ď /0 gQIa0URGtmB 1M| j D RE-$N5BXE/v%E2R6Dn7Fݱɱщѱc_湽48x+mmkKrVi#####CCCCNG\Bɲ%Рe7 Vf)RNR%  }o`ڙ#/2!p|744ӡ`)]lD6S0ԜժjMWUҤquW.n RɡIr1V%MˁɅ)\sT)k{ < ,ES Lw s= rn;999.mtltttO͛48(<]YY=N>&o<8C36Nmm{i45WrS=qK0`p+apS,#0T.yzuS8Z23z3@JS/H4Q0ծZJ̭*u59H! *i9ZH8y4 JjKտ*ZDeUFDe&\%УFsb0! nZS "2+W7VRK rGIK7 ժ,BǁN?;}K`YMq-M 2ꩉNt?q_|ݗkc\6ͅu>?anZYvZcd(527yFsozّ`q^;>Gr/ZCbph":zmm[Ci64 q$\I8BbZFl Yxj0H5D죦V "AXfBy]\( @7!Tܡɰ>H$?xLvP?SF(^䗲:jQ+X)(~P$B{RS ^%7Ji !  D"@ǁY"ERH5G#$Tg@QX#Ŏ +gb5}emmk3hZZ :.+hpnlФ:xB9QY&pGtj+|p厐ӓF/TCCrɄ >Q[aZ>' B➀J2#u#992Pr}+T1ӰjSK)Ɛ9˚ᕧjPfʷ%00)s-z3u=|?]ukc:\k G.=ctocnq譖4ٸV??ck^%떩b!u=w.M =y o>2:g鑅폿r>{euO8XTmmk8SbQ h~tAL" 't>L>efdgzb'KWM6w!Pu]HS uU jjQ, tbJF@]# a-ՙ]Pj®F(@BW Z) CR *`ቈEQ@H@iͩ!h':r*Y#`(H=u % ED40s@iP{U8fs'rJ)FH>ULEkѶmNSFL*I?rְpt_Ğ*YnI7::hed" NZ"H}낹W_d)vhDc&χja}ZY«tўT;&5VK P,5?~wݽ<K%!X}UIR I!E, 2,z~ʻ|[L>o~u_eg:,>o퐫^܌U6;gW vF夣qm~ϬY}oƅ~pjR>83gwlFck/shhge6n'_X!u=wSu֫, 'krv;<2hSm./>PѦ~n,LgֶTJě@ 9-қ2r&,k#PU./M V O' -2鄢yv`(@(m]0Nh2H xaS֩(Nt| EJH^)fБ,):zLNPGQ1ԫd;998I#kw:"抝`*q;skx%ߑ[h*)'7fHļѱѱy zipl+mmkKtӥV#i#F:*yМqm:G>^ C54SA-\1%qf] ](KHkfxE}m([ ԕ)a!m 2SSw>KUiq˷z==VA*˦AnN`j@%M[dbBh,JuuO_5w^?,JBy\"*4X[ jʹDߺRn;>11>>6p,* AE^mQip   J(Ng^eE&:Ec 23z<M~SB%Ig"qɅ=vǶjG*ad!56srֶXF|tVUDN&H1Oʒȕ>z,)ge"8o_8LD I<b@IH>&TE# KE!Ą Ȣ$/ACTOWk5.D(aE)b F }WaX {S 7[ DDԙBtWD B HDU!!0@t/ؾwֶ47V~+ IώWORQLF .qz@=rK$cD$ Z6 FEB'J'/s$g`lWx8 86T$-ժ;J!00IɯmJKi`S>V:ӢԳ8+39 T3fʽj1#b 2=bK)^,H%oΠIxmc=/?эm(8vƮ2~]̀I:;w-KP` dKop8@&n`J7 ګ"7Pj^4IA*_A*\tY(8GTDbd1'ar"bwDqI7IW6lUyr-uƐvƀ*brq1I}A6{xM}d$JO ecp"3qB0U`ZP`HQ$"Ș,:"$h[ֶgpk7וKdK&꼥[<C@-,iQ\Ͽ7=dB'[!ɢE*huE7 )!VGp,+JA).؋s ̿YبRmMF,X\pWE;sP:~Vڶ{m-r)ԾU)z2A& eX(XuJ%7qvxMU/NU D 3^ r [F\E*@F}S=Τ3ZGc>{7 $S_>T!ٳA%}tV tk9/"# M3A`dNQ !QcEb :P `X (:jmm{fGm&#74%G@u4⻁ Ҙ%kDMv@fGw0C|NiҺ ( b,x@rD YR04aa7_18?  s&y٤L25Ԁ /(V =Jd 0S0 AIhќڙBAR&e&; B0XkUKDz؝gCmmk[^QhNAu~)El }#L']8"(46ǥu6V^Q2S/J˿<<ƀv6o7k !PZp D |iQ _[c.FvSaW]z[ !PY Ȥ+GG ȉ  - `̂,dIG,Tew`@YeEONY{/8a1BvԹλfϞJ!1G.B)B#u1F dFDG{qz_T]TGx#_ٻNQ6km{U$|"RB剧4ͫhs4qeԯem.V:jǙ6> S[ϫ\T*9bR6vL\JVQ K^S"AtTԃPSԵZ':ZJZ׬`"(: 8sURkph,%L [ {(u!PIwj6lgvld2/miȡ,@M#l+®3^.O7>Oޱ%%?]JFEjP"T .#@6 IDAT@(%:ìEz4?ryCJ -f&NSx9rT1 4(@!AC!"M++)w:"2[Ѩ^1EKN9%C`8V)Yx.C=3uF3%CD1}K+zr]90Zi=޺r#c>9hM0)~rޅ<?k՝?hcgYϜ4G3>?rtn;c?U EMʘye?F^5t^yS;0 0Hj;pAB  P$.J 2jtt>0HD.(0Yd,@!Q6u T nElӠd3okN =?}ewS! C HI+H E$HQґ"(/M)lywqfν&&q%}ޙwߜ|:+Dh-RsTnݥ ɯRA kq!jT)Db(….:!CvDXC2ŪGq t\M~;1uZxIQ#&(Z0 K nhX>㤴RO_CIZ"y & ~7~/=}JǞtG,2{TM.^G ~!j&,dcf;P%MS;G';ԓ~ivvGdNR8aG.z3LyO92OXPm-OMbێߞfw}5=֡#'>a;n[^<{~3yMnSkw~.Ţ @mMb6AB:m%0 *RX~ 3wJ N _ Y] 8pڢI*D4!/:Z+jw3Ȋ%5X(  \{;}ԕl)kE.$;:'NJޔɦ\)ʗqLSwmq3 V~5xR#1X% \[ΆV+QyOGn~n1,8f#~v|{ВѤ3Kۢz{"9 "Gي>1n ԕَF "3ō8D= 'Ll(PTq"btq QH"6^4+%)0"v ˲!ux C' 1T*E'ƔM)Mm>40Ud\ScrE8K6/D%+2%Q("ˢ56g- ,DHdb]2k bd$$h`NijCDز妑盋H^ku=x37=rygs/-iǷ^z 훮d?EٹH{M/99.`™6Vx 1gso OW}y3Np晿|=&Y0df33 3q9S;Sf_w`C>y#fgKJϾ>?~!/Qߍf2>S׬7ɸNGw4b]V];lO6y~N6gsКZi4jdXjZWWWWWWgggGjUNNΪNr:嵅mXk>E_TKp>[E,_2;j  fv(,*,Ee pLQ ]K @6b)+} ?Bv%ӄxڔ$,rޭ/ |yث3Dw<]sB+ a`ɤO/FRkZN{A[f8#p*%(los+ 0tvg"zSf+a`b-X+CI;{޶a夼]׍=/7⭕)sCV[j1C]_CVgk^q܈U%~mr0Dyq-nsܷZKUZ㓤o iGM6uig76Q֜p{MF=̎}gU+c4 _xN  mzF]k 3G;qzGw?yޭd߸_ȡ~qDB :.[ ~T+y\kex/#u{*b5p!TQ*~H7 2/ MAf@RT @b# sCun(RZA$5K}lrEg<0D%Lb Į`E PBD&Q/ `I˙"B"H % "C2K*R\ʉW$IcLb1͹.D_IuAaxs.k=qp6[ÒZO8W|g~{g⏷_7>S]b ['oL̶T陛uv8ÿR}UxK!<߷}}OrhK}7wځ 45`';\4AcuQYdq~1[;4M=*a j導NZ:#Mk̩aC ݐ+SVx붬9WДX>lf@ MC>C`z|M,A f)WEZ34!Z68DE16CQ%R;]%ĸڸ2Dnsī'zJOafi$%z^Mo=qg'o}UspR[Xp4b dcR|\ܟO_~ 8}dzO\{`qN=K_?%Nx#Mpv; 9O۟v>D_Agw3;o&C[{3.e\_g7~ᦽqs%;Bd}k?Æ\OZVr>߿5Ջg+WmI$9}luױ:msw|$n ?~N&Ā5O:zc@|l|阁չ9num3uC o\o/" eKD1胅"԰D vciE"=\22>‹G@q!67["[壺+fI͌m*h0|2\V Q+Nӥu@ TI"S$.Y("\138'~П:uP)DMfl ^ QB8R@@CdA!-jj.X3ąp>[_®HަGZ݄hힻK2b€6煃^vK6ZoC)'_BҨ^+2jn#/qҘv"}w˱EiX 0b{K~9j2!<:e[{8; 6w&mqpm=7ulˢ4l}wX`CFz9>:u=G=sǓ]'m:Ah=7̫::}.{D gխquje# 04F<p/t-M?DDd--Z*jfgE/,([1V$<+$ Nt KE2uV/$R3~z\'.)a54WRj%9*BDL dY#SgƸg< &D'w-,(u!T0S=!s d_")!L1;r, 0>T=jjo>;y=ZvY7F&D#)Axo;}ir0s_셣k)v^iN7d>Wf\畞^'thwW?ǫ~/Vs}cI{1֔.+\R?&avc{ޓ?' [G[]vc:{2uׁ_>ţ[K@XdIʜaqH5(U:($Xp@ "U(zHSb8W<(h֧y_6*Ҧ=2tDwn&C[b_& sq5TUVz_[ ilҧKmk7y~N>>5ej^c]wTm}I/Cm+_1 %{+ )C jE%6rc[[u FD.F1MCL2*udrC)}&;"RZOdazPpdJA1y.ɗ*my kzB/y5e/Ћ>l bO )[`UYns(UbU@LKjQ["S^xг„A|1S7W>pGsچWU78oKi+.tz{M<*>yDS{ =%>䑏΂cc676qc'7Vȧ&atou3/2 "(ngeXu\;pmuDZ晤3s Np_ԽZb"ê';J&OA&7 #tl3auqx01&.1y\}  ~yZ OW֝)PJRK R"4\MTޛƿ.&?.9<#/rYwĆzpGrǣO;G^ Cr?>Ҭ.͞;ohro~O̺R.$ gc!/1bO.7i->qG]C7 |9DZa%A-٤3}}Hk{ԓq1a;ןyz;ߘ2SfL}7= uӎ7Z7gσR[akZ-Zvvvuv;:;:{zYdZfa1rBP5b{Q5Ӳ~ Ұ}lr0ܵ~Տ )lDž@oj׻ƞ{ػv𞼱$mFm}~{Q4ؼk {XynؓMW&Lzf=~w#?s^?}a؁OH;3۾LD%+PB<2@ z$[Vb&ipuY+CwYqOªIF̩٣J1[=WZCƘ$1I QN"PXĚ$I4ygqB q j,/Sؔ׫CR*)D4ƔJrPb9,C>J EU$ nV 0'`2oB1Dt/1NCRJdefB!0ƃhYDH XC]ݖ`TQſ\s˃W]vއ|kғKwog_r7JƆ_"({Ha"L,62Re`F_{ YCåVeo,V5;3Z9̀蘭9zjIP]ydV }\ફә'+5 .IbE}=g])0 ..F__ctBB ȟQ W8 %""L B ҆l1>t?k+~6z>hh17am}^1~/Ӄ֙MVy/4kjr0#;e*m^~6-wFnұ/(vf&i` NBnlXo#/xwl^yă>Á۹Nz> {r?zgwk ƉG]~'}l&I^5i?ާI]:Jlr߸5 he9]mEu\@&1*2-$0SzVdh:Ys $EpL 3}\ȹRchhՃ{(3r\F.!cB bVBò ,`y=TwqXt=z뎐\𦦮"h\.eD@(qp]qhչ2_۝~_zmw^9bV_1H2}wW{?L sv_s CÖԦV%Fk]g}f IDATځc}~H{+.Z\*%I$Fg(쳓4>xХ{C<7Y&٦[w{'OT[[ZjZ˥RbLbp4XkDCgsi aؑB 7e@.]# ># !:ʀ0aDѴx<%qȕ E-qH#.spt@cRb.R,9ݐcP_j+T䖐9aE4v D/q^:K!o]Bb4Ho;exd·|{@p!$}sbN 3 eIS[YHf-DdH26m'w=yfoG}3FI*ª~緊 "#"B  E~g̅Κ-x 9>BarMdD\%Ru Ngz]^>rLהbn faH:ŖC+V8P"R uW(bBhF5n9E EVܑU#$uWp<2F nQ_&a} :ZYc/NLC5aH0d!GAa@"޳cE,0 3,#VvN֫f+Aփ*D Z-vzn.@ ؝`EpPlkHB܊a^$WMDZ8s:GopԀ#[T\kQk03dKf?5UƀY:v0A],A3 G3"~)|䃄MU1w32N]4{*[Fh$aQ|&S뇎 `%4*qτDJdSk kJ޶ (g$^j:>^CM#]P\_@ BM5D<%h:q+'F@} uy;Wp*E*BH`9$m23[w` @b17ͅB8*D.F:@L0kَg̀wq oYv'N1^A3LW迭^ѿ[mڟ[=V7T6Ɵ_9S8ZDywz W@+A23p'a%/RL£&^6~c+BuUK/ %XO~p;mMvRee:T2@ |Bwua XuyTIu!"J3vH]*E4KيdfdW.d;4 TG ;SR xHbB.IqDЦ`Ӵ9mSh}~Yl28ZRG^PPILY% L ģ" N 'Y_kc$Qn1Sg XڃNa"sl׍$4^$#Pz1_20E%x4ہuF K>_AxB7reԺ1 ĬR>PllٯY\ZDuŲw5QvjfՑ$W >9_P1r" E0kAbϼ򥷧\iؓ.Ef _OPH/C{in OtuvBl(|  vbfT@UvbxA5( i Zn u! a(XԶP$'NUJ,)[ry:6A LZHM3Kk 2aQN%R7""(,h1*g &DLTE-8VAP x"*ӊ##9d$JSNw%vuD̖JIXoi΀Rke ?ȧO{#4fj]]ZggWGggGGg{{G,)--jRT*r\*Kꃽ\&1%C%CIBIIB ZS"`xTݙap(U ",#u!%kbkEB( `;]c G I `xڅxx`u{6d[۰%2>`PΩ'tXib^Kqv2xCee65փkvcpD"K TXHGr`,3gQ1=eKy9XmXrg ج *ffjJ#.B$&q8/X@wmȒ(x2!"Mbq0)+bkiGbU\X-{֕rʜZZ$V:;,)5N,QӼp-+;3 Y˩l٫3e@>xwߝM޻{S~:}3>91k9_j5cs::Δk,`*$ ȔJrR*URTVJRmiT+-r\J\*RTnVJT.aJe2C$I$)Kꪒ1TJRnR$ T-V2Ƙid`@BDhP apu&<":9JU8%n/Z\J$AgsS0R"j獽ou԰rR^i.xƞB盏qRkmsߔ9{!-!/^!l|358nĪKWK?69OyİJR6b?i󴽖W3ho<C茷[l {rߗ-wLn8Ԛ~<į!0h8 8COnӜ)mRw<憳:i3Z yi;sDwtwCOLv7|ǩ,XkAwo;uekm[bظE6UWZ>[c^b٦Z);Z4MӴfU?/$MS]p/-KHVuuu*ꢾG"ǘl %(՞ji_(5 Vh芎ȦY,H9b*e^x"7oBdjCVAjE,ǫ.oNZwZ w#0c jFk! PXR[KUZʖŲXu綆IYJdі$h|d "[o+$[4[`V&-K Z#4uʜR{IfϜ9wrFkxjkkkZiVrTJ%>yG#!>}V\*rR)%"7 {RbʥTR_ JĠ}9&IFBU:=H'}r&=hRDH89E2NY -#'b@I -ֈ >#UQ iU#1p+tD 'ɗMԓ\\dHXX|v3ə, k Edw Vtrŧb"! pg,/Wy͕A$*( }Ǥ$u~{:aa.yGϿ_2G^`Ujsm!O#lsЙ?×=+N? / o1kfëE )Gv]kʭ^]۝l,-H=Hа"GȨӺ_P]4% yl nDR 2"A o{<yhzK-X$1(|P"HӴfZvuuwwioXn&6O!tteMeb%v{x=OK-l3v2ٮ+}K>irN;JIdSN{l[mx0fu-]&Ap5]E} XmLEgWMڠoх~4/ɬpޛxwtYALk]O68 =MќTz8ai ZvgL]ǒ=vwCsnL֏3LA.JL fh,Érs~TT[YRR2ƨ& pp(yAgp6nycDrryīXC8T32Xh=.l~SDfUD(֑:6uU d( U,@%ĥs N)cbʉNV({jy ^$f Fx`md@s =sZk}.WH^MQܸYQ| us7£yRIxYвEmv\rs g;GZE>5A IBw'\gmpCO=9 5hJ,߇wu7mQmlĄ-@A@tda5vev"kͨKA{48F Ox:T.78[R)@Q jYnC4w@hNKlzɿTDծNE_^XS%k1jbU q7 @AV.uKDМ $@u"89=vpw&1-s~)J[ 5%Y`"ZbP$AIb_dZRV$L I(E-5QUW R+ IDAT{qfeРH^b X[1\4dvel46X߿;?`5?7O/O{Oߑ?j5Wy#-!7ꇯg~W`#:cXpfַ{r!eQZ{A]8?>Ƹ. iMW&LzsܦCxQi8mNN"X}>edZ3[/E'OQggpN< bZ[;2zm1ؑHd$ XLamKܡṖ-xa {2 U甭iAYpf:⽑J# zrdbWB+ ђav w-dAE&hcE-} ެ$F`6B~X *V() 3ؐTA"R(H_dƟJVlW({B>Iﻵ2nN]x_P]PgXd6^rw֯qw5 -_d9y?ںƂ5+ͭ]Żhm馽tկݴ֔nb˗Vs?{7Չ>_;6~5Ly[9|5xڶjKK8m4sעDv](߁DY DΩ Ri]' VUg!ߩoD)}^ձc@!ajp%)AJӔ!Xش+m"8_U"I::3,ڎ.]ޒR5)rb$|#JRmi)ITʕjk$IR.BSSl=0'(=DQ3̪Jm!u/y1.d't(PiΙ2U!~*|8|cQǻ֊/V;.xBn6w !81p6 p1>t?k+~6:S;࣋S]q&`7սZ{2=8ad>bJO&C;}p?XfPy.mx%Ԟ|a0lޫ/d8cXiӑ<:׋^~6-wF O8w;gh8wJǶ?yƸ Xģ.~e>^Oz?zgwǸ\g--+*=3^*|l5W%0Xl Ցq2!elucZ9!f0dCJUA087 '&sNדǟzp?{Htkߎ?+7\gӟ9r@eFC[o=Zk2{sCG_O}v,߽h2=l _aUV K$W[i?M~;w;fL>s'و%*9ZU:Zw|qr{ nir/-F s*]q"Q©eՐHSk *BbMbiQ&1S#T)OUH)ѽG1lj Da%X#'"r3љ}XI!C @xa@&Pq9H2c1.`k>AD̀P*5&@$MS0R[k[ZMI!cJIR.$)DP11HDPPu!t%9Kx#x1z{vK&M15 JdHo+ɸ"e @R[EA|g|NT9~݋nLv[c"yNu91_oŴ/WgAg-.ej$R/%Zâx9[Mn(Ȥ7~݄(CfPN1m.  ua5; lXԈ54ctc>l-Fkb v oEO!)JPc9ac *0)/fxyȱk٠aD)"_XZfDw#7&DEHf^݆\W Z[w]YSfM׼;{p״ۯ]MzA=f{z/vZr3~GhDyymvWr=g+omó!0O|eʋ r﬿t ^9ܶFlzdֽ>5=!ؖt|7O&\v9tуKt~ޒo<>U~᳥~g_?~!/Q4U>;}몉Ik7ɸ?uFio>b[ڜ2.c(5I.)fh-Nq{ix̅$?\~7cG=~DibBP6 ؅ũ:rx>j4S8qSM4$ *H[{ @f%%!:b7_j %^ȩn8%9vx_lwwCGZ!"GN"a ɾPEbs%[+ !.@=G$" u1KlYgBPg1i"k]X SE`U:5 3ǟ,ǒTH\ pVgz ] BD, 2:93AX X%011ƅDCj9)z!E~c 8֍bjA a(hƙYqnpD0,yǎ5nj{ڜng5~V~'=;}{[p3ᆭ;f1q2ۮR's¨e'?}E(~mvnww?IUG?Kw 2sʫMC>:knէO\yQaȥ7Zӿݟbz?oxݴ{U:t9SY'>/sڢ/+tL'|L w7`Ύfio>0YvI^oa/K]ӥÓg*gNfW@|g\>r/017/ц1D 4d C~̂--IL@dt rl!2Έ(!WQlI/&b9c @+ THDE2"AdkTe &,x%TkSD"2qE q(`]&!mH궂 Ⱦoٷ8\!Q`M&6MZ>q6"\*KJRTF?JRdʏ @Iˉ1AU_>A8 JN&+he*4O]΄>}CM1ۺdnv뇌wJksj|tF{z' N)t*+,^{nZyWut.]r H}7dH77㒹T?IF\xɓ:|p-M*^ܾIg\3e遲6}[*wzn_n,,3H*rR2%S.J$)QD XXX<0HHl M *JT@6MMꇾ5ӈZ.QcuibzFfkk"VI1HxEH'Rq)L`8!`4:kZk-3Ggn?{_(WU]U^;DDq EQEP uQqc@cFQ 2* ' IH !:[ !;>s{O҃j Dh )DOֆzQ.|2oo!03浻yZbGATGFGGFGM( UU9鸮En ͪV!0PDxKTX% %4ߛ✠(Df1w: ^68@(ǀ{fAV/!H0Si*Z$kwV'gڣP5~16EgQ=褉(] Tf/t1ccʚ?̶01Q!%Z@>KEݎH|c5{!R 4%W]=4!ߞ j'^vl$ʮogꔌ*ETՒ>r <$!A@5X ldO"r?Ѽ}/{FrCP'GF /i6aɦLA!;( 1 ,Đ3ƔqS03cFl;7߸-Vjv2e+sW]sێxʬ&h>Miܡs-XoZh,=i&^(픓T4}'~񼁏_uɮG70zy͎cjs%s?_Ov{?ӿ?{}&^[ /o=Ph႟n9oӘj$Kۦ'"5I~&;M W6"aҎ?Shk^ y|G*f3mw,!n$ϭ t\E;p=h?4^ڪ9X Y'I 嬴 Of@X0yK5B(cS&H OYpFE]Da#\r @Ř "q Y"@H<˜Lqמ @FU))\U#Tm}P0Xa3'ƀ R clU k1~KhIDfK~)LOd،FN Ta B"稪9_=VP ^linl[^oK8^?11!U,8bmuaxj#-/ȻuuSCM4?[Ϻ߼m+~>:yk_/_FWnɷ?'Mmr7~!>/3/|O-lmw){oqͷ!NsGٞ7goَ\z>M:sМ].À@^Jf{(& \3\\SBIܭ:1ۭwb zu4j$f Κ5l&  vSbU!CFD`9 b YM&6C\^H( u]ש*!8qj{Sl3UMR2(mbF" +>;r]6 HH9U3à1%eAD * `Y!L#EDKX.lٿe8PAZmL)Ibӗ ad:M*! du D!5DB`뿅*`wʹw]1RZB}T@`y1~[=S2}IfEc IDAT5w^+QBvLUuBC p@(*)h6`f3m !WlR&HhIx dͲ4ٱ)6%Gr$PpzS6݋+;Aб Y}B <ʢ8M-K_#Eu=@h"F-&h16"rMYSPm4uI4\m!R5!5s7|2)_{#P 9 `Ne%ˣ*YXle D(0ݷ%GI+M|wMv-lòe7o?^{qhѾW{Q۶ƃϿW?wӛoG&]:jؿͧMw?xsogν賷ʼIGi?'YOzrlD=͆&zKGyH4{(iNcH6ݪњ\A{W?9a&~{ýkRIL{&d'5v kXC{]wݵ[-Ph*D1BnWUE%w2Th<a_5y ^U"E+deH4҅! ԉ "U UB1+۪Hfh H(g g%;bp-W+ yA * lU.5\| >P&ة;Z4tR༺eK.*,~h})Uw(TYc%TrQRQ>)8ǹPvOT\tC(yqoV 0t{=ԭNntws^-oh*y4m}ΐܞ߻?7~e~}4w<ȭ6O`'^s!,%>{#ˮc?ӡs<ϝS.T nv_socxٲߜj_{K~xs^?Mo.kƩh8;F nbLJp \5ק~1 pw*J>-M;7\꧞U?/[ϟq𴟅ȯ؞/?{ycMzk~>MpW{5~lƜZ<9z3mZgoW3X}`pp"U2H`k(e:f53CN<*<9c.)dW0#bLx lZ1!d,&e_Ϻ:d&6 p_ dI/`gpJFJ }I>5k<:fNġ;fhHnsٓUdO|#1>9nD_P-%`hrU2y-'HSb7";eѬQeCH!sie 2qyk¨*",!"lO(3+Lmvqbw^˦33#h&8NwYq=3 G%jp֬YCCvX%8nō8v@ZVR+Rـb@QEؼ!PnzRbwEGTcX,P*q&HԽ S7-U2?Ż>wCw?l[-gMqG L|[O0UEfˆ/|9};PT$a&X-ʪ~ "]U\uo;-PI?mŎƥHƫcEL~m@Ld 6{`>XW*1lr>WK#1 RY>ghYEfVŅIMw7ńsΚG Fou'=Y9BPA4 i- "DrEPUsMMҴU$QF.+E)PH`fElg_Nhژy.@LV7g3FJ5YȐL S< D#@~+Tŵ,AR""AEq*,o J9)k7֦y^V K@4()"a\?%!$ A`S% T^gX %!ǝRBB3>㫹eKp3!ڏ)b<朘懌Y(A z CĀ Sp3fxIB=gօ_ṛxR g9̩Md7~Y՘}q˷s_uW4Ɖ 9Xvr3>pfw;#?+ Mg@djtχ1M/+_zޟy[{:1?݂C^qؓ8m?X|>|[t얳,<30isK^}baYћiY@ϝS)P(SaB@qbd_ Um3L9Ѥ:,EXs׳ aRF`^{\T ن'leIWu K9/3#[يR_SɉxM} JܐBp,' h Q|h!bdfʦdJbnj;I6 (߻/ǎ'Oc7s7|_O9/yǿ|7dx?gldN'սOzKNlu] gOgh?;tIbN+b aw>=un|SN$foВUHu<ͪŠڷ 8ެ澰R@h]( HJ* DIX@ȹnn } dVrF\-* Q`))0RRP9@8Gݣ;XQ +e {Cr>j]:RRr_%&7$xVGZG-VS@ j:m:p&1ӞP䓊uםE3#~1dymϿ~KHU0QmU*b/)c$BeIB$ bM.% nDnjPTdICPb*̑4dTLʴ,Y&Ո`:6 UtʨP1j ag`Z"A2 k3hVSB',RJN@U6JI w]HNYd-O*_ܜC-Ki#]]e)& 1yKK T1QX 끍r%@TT$"#1/ !!`L"X`Bj1nPmT@@ 1D5.\O>;~_o7?Myo9^sv߿ȷdeQi#9 aq 4` r9BC:k[%SD(mIǸ"}N怞Zk9EUT=BJ{rc=qZRr hgddtxddxxd= ip\ΌZǽTu`֬YCCCCE#Vz,48~k֭Ǽx@+ЪZmԎ*DĀ@(f_ZQ̂fE))쟄vnz SJM9hŒ2 䚠f8t)QhRVr_RVF4gf~4(8-2QqxB TL Wsc6 OB@BeX>E &6nM9x4+Y̥V) Pmjxxj!%5$k6#*\B>) *xK4~ 1/_CDa~?BҀI`hX4,d\׽N;::2<2<22N48n`Tc^TF݇>_GZ%hwFntzq/?cÕ ?13N48~{ۃL[UՊ!Xt53a@!M:KȎ tU4M\Fiajg5, Sh2hԦS͘lھ:ٷ Ͷ0 O=.,Kmw0X Pe0*R1auUSG n𭐙<͓a5;PUZ 9ޱ0' ك1^gOZ,d M / "CΈXq,{B`xSPןwKH)%|™ߝi)uNwt32::2ҙ$TPљ[CcV>,uw v݊1<&"~YPQ "Z3 s u-f BeԪPDRI'063v_f0B@ p &%$3 ۗE(T,!DUDd)T "cfnvBg|:q]3Ԯ UDda5l3rQ" cUEǀ@'Dn䡪V!Ʌ9Qŭ@"@" DR! eHY+>& r:2rsQSkXܶ+B֩i :ݙmscu~,b] K!({/Ym!9ƼW<)16ʌ7o¯>kfifAD m?VZC$s$V"0IVY}MO(N7SlZ(=5.,znhSY~Y#(EeIL])ϘK1@@B.>ƝTUevK>XD%*9m# Y(30JP]0 E#"tJ.HD YW &gϙe' 1\rӾhė(*g8B!(eaKb} *sLfϝe6WA׹ϱMDTQɸTTHCk yEf~fL{}Կ9t43ǩ-kSJh@_ IDATNfLHB)N'jUpRw: sbPE(IB ޜ͈h%3(R>4C3 M\b "!c6fC0KhI֒%zόOWةz@Dj@D$̅㫪*Tj^A5kn +;Q*#(qRꦷR4PPt,_% d,7@ј)̌.=qf- 0Ċk"*Q*0?Qe~H\0q V9(iOV% oFMY]x*k7xX{+g~ 6Ӻ.)HjR{!g7+\RI4IZ@ C}/7ƁCɒ,W$nf;)Q1H =.FEVb,0|E NJv"Gj(aQ U7@N A$}ٲ#@W:MgS.) % #ZRй*hD(E-2ws'ѤX@Ctkzix3j]U6`) 5]8e@OIpdߜhQ$[o!̦妜=/妛m31Ӟ8IQ #U5]0I^~~& eDlO{iz ʫ 6(*CC5EqREy$9Q^*,UPUג=̳SNۭ[-$dTKbI"E}PNRh#( %y A\]lnV@`C"% D_+HQw|¢И0+*+7Sk"?!! l#UaTLC,+*FABt܇ Z*FXC ? xB*@,* ".ڋH\\`Ee^w4X5i<1CzäP QyZWlȞ2 9b6FP6Ѧ"%) ԜT'I+$gLi3טf$H0("AT(MVCHb;╅Ѱɇ  /q VPMŋ%HRw)mN&3^RU/(%a]E@VQ.$ sFDk״(ˑbqKm@VKIsIsAA@ʄcPQaFT,iDGXbKY0stD9d@dm촛o(B-InBfܿMڿ`PhlA`Q43P4s;;IL1Ӟ`ky(];])7E264^?ƿ<{5s) *TUU`\de@].Uu]'fNRVȖ`lD!m4&NzEv YJTNx\}t)im[N0B߰, yPhG, Z ia I0K+UAr%(Kf]͂ 9X}bkF*nS.ef!* "ԜZ_䱝DK*G5 pADQ{5d,#.&3DO `(VqʮrN]FE Ԛ}L8 IS*c7L, VzaoUZeδY:ެoq1?SEɲL"7L(-!`ph.g~K|HxC47AC2Ǔ_ƹdF6{% ' @%@Ȧڬ ї ~ChҼk&ӽWQ (dNJ2/ sBWU Y٣$8|@1TLעqٖF R2yt4[:AؕY9{יZ9RR{*3^;Un.^I(2kʨP'($=>(@ty9GW 4m$3 Kp4 =?fd]N{9~4rQe{o}bY /LA7ⰷy@ߞ}o]v9ਛzX{Wn^}Ա?*>V>R-,BE|]yĢDE?ba@!s-FrLXP~MMs_mw䃷[-.͟oԹǝY>zkyf ?f5U3em#02V*~\}Elff򞧯1)'dZ-ЭP:kD4dDJEXAd&{)r^XNqK[{#9a7("}f>btIfZ3Vw b=RR_='XNڀv':>0ۡ‰8@;3^%nH܄5v/$% )pXX) :W)2\A ,w]Lc=}І |Oٸ{㫪+ 5%1izĭAlAW'@"SE+!"jUVUZU]URUU+*tGGN$"֛ct:#B0 d 6ϛigDdCDNx~棺q'銋nꋿQ˺*&t6+E#>p܃ ոSuh/wN:_74œ|Kvs_ Uo;Y6FDZÿumt:#+U*BaD!b5ڃP뎎N(HGWweW!(Ūv;˗/_dV>h덌\Uv@+ 8DhB] ̾IĬZNeEnodz3錎v̩{'+uRM*\Sb,fqVоhUUb@B瑊0[PЊ1k(HMAX_CUUU>Bv_<1nvBUUF!qSm:ݺUNYcI,uz rl*3xUeVk`pnR\̩N^6a/h"@Zj\)%lj([J 'N7:v{u?:,5KR Іcbn1*H ~S%Utκ2C;CvXw;ooߊv7n<>R>x3~m;na ު_sgZsݼWΘÓsOl,'9CmߎzUzV>X=p>lH#ݚo<5?4YASzԡr/Lu&'aLz;Wrv>q=̣v8;y[o84kϸzGMzu0j=ZJ'[QN 2Խl^!@<1s2jϷ9rbSJjN6c3+3[EkhNl}DHµ0*&暹RR\ԫ^v:1 3Xt&ASWI55xb)YTM͢QjvS:ݺN)CDN)T'%m fW )B+VJA)E)I5wk%%MM\"^^u=ҩGF;nݫK#h$Zv{jrj3tznݚ;5vN4KÝp7ҭW \=j3<vSǽZtk&uStV Եtu^{۩G;V?+W\zիW^=22 wF;nt!\qI0Bc,jt 7z_v04o~ƇYWt̮:o}s3#\{1Fn?7qQkyIoAX>Uusz (pXL1{FjO\ڻvy;͉:|kig~%o;q{_o~^g?_3<Ѣ8Ap ۭjh-GVBi7r  "H@b 3ұ&F\TS9$Lbe (bh.*lHyg߻nV xŜYq.~vɳ|[] 式O}[?w;~4>׭>7]tߜjۿޑ/׾[{IϸǏ_c6fm2GfWnvz?/z]|+n(w8kEO;MٕlE*Y-Ka`5Z|0@p+F u ZQe[Ի8{" 1#70S;-Br*& *6!ڌ'E|yjYܔ>PSLJ2Io@T*TDZ IHRTD@88MaWgB6D,`W ~, @ q"y#i2HS3'Uhd`Hl}hZ+YD5X( n"nk#Wx)ΏɁ;4t)23OSI {×|o2gyڸ=  ?[zY׏-/VFuZӎp^{K~9nkw&w޻|vM_{·}Ҷnz+azt8lE=ß4W_l`/6tJqjY*7>[6Ǿ]V6z o^s՛O* 8I@ 큿 uҪv":2\d{WT~UYtFB"pUBE)ƒmD(9Bs؊U""*zBu-BD(`lJ*,C S37Qg"< Eq}P![u9ָP3#Yfdp2O$ #"!/\n M;նHXTU4@"bќBId \C~43Q(ڹM؀I W՚Ϝ8 H)~7N`LN.Î8h)Q'O6p3X % Ef[=p2Ujk˂(*='~Ѻ= T{/}36Zo-/?G^>wpº>⤃0i;?N'~~w||e3y6T'=/x퉟Kz}&]>k_?7z >0pzfYC^hC7Mn)lȳYI-f-Hڷ̄~j9JYM|4{K%"Bvtc\ZDh3gVh!qd]QAYsfܲ t22\r9Ml+m0}11$e)q)&@Y@T)Ep]x06?BAPeu[VgI6I"Ya͌P9 3 x܋+- $ DLpL8k5;w~ӽf=p\޻/_vm?ָK޽}ﺯx$C_><5k=|;l`[V ~}G4/yYsMrw% .-?arE;}; ͟?gOgj?>̹siG4vog\Ť7}벧̳{6b Ԥwaҍa`Ǒ{Sik1=1߲GS]0z>xkGZb/޵gZ+cDp[^x^{tm!gWg|5_IZ wƣ[u>pEg9O>﷍M7^?Θd5(1qn)yD!)Bx _kS۫iyab@"H@tE,II$bb (<Ñ&]\TY86ϘJyp+!~ĵս͍IUݨ6#m~`%W+IcS]XAѼhs!KgNf" d,Y{7LUT-,})0~rhV?038XTA 66Ί1YPMؤ2$K2K6#"+aЏXx2OшÁ!w0 IDATH$>ƈH1O5>TrOb)"̚u]j" W=g3߯\q녳=._%qmlY7{ϙ5&U}|~<䩳oqTսsέu0싄M *h7@(hP(i>&.)EgI&.Db4㋚qCq%"f{9souLw3"4Lnݪ{9s?Llz \ l+_}N|zW wo=n}ʑ}E~-,?_//8y'>ͥmxo撻wv+ ӎY;˻p|oKx~Ï_x6Xq$3'm%oM_W/7`طŠ)o0@o/ VExGO8_뇧u=OA^c}2[jw%%af3CT8%Ib^4J1!Qs$)i9K)%w+ZnH̝Tܳ >+%uX)rfIB ®ښhX*ʍjsKj,O.1 ̍$aF4&bq7ro27zzWa+a2S Ҋ5803 P#)uܱ*j$QB @K!SH/ܡZ]j'Nb^Cn7q. gAj&)XtjBt}$8iØYq7œ:Ip(EuXSrwW&&xXY@k]nl_>v3/O:7=a^>s m[x9?vosO럴_{cy?'zk'߽=o{ƥW^ĽzqO>_>#Wϵazw}_yEѓu{rU ;eTWs4A9|X빵,\sK`Z`tD&f1[xvS$K A,fۍBeg"&^,5UȉX7ފ˱4eJ(R"sKpą- E:FV/aŌnVG[`"hT[?Cva8plUG^Igt]R$ -.SJBlVnEff!$ 6a49>UR@VZRJD(t=4 ϖ'b&LgC$q@f,i17g2$\@T/ bQ5 "5cq? QY db SdEݣdV@SU_BWLXR4ߵVA<В-~j1 ps팫fĕ~dm*hZFYT5tдɑ Ru FUKTgj~a A1CLN>T*)%Aa"\)Uju!g.LL`f$47"-1a٩䖷.zOl|ǹϹߣ}#{p^l|?ЍWMuϡ|Y[ۯ}ʽ?g]S?ݗn۴߱sT{{[};ı/?qlϺ=:7vAkÎWi ǿuӏ>=Wϵa>{=Y^g['|S7u>M'oYV/;>vMJOLX6^Wi2Zz^Z`wkKGe3Gq/ j\$|冴#Nx;ą/ֵ[둻[[+25:%<>ƃ}1c|{',7'ژ:۫KO}._ySex|t'c֧g}gCȏ^8'>}+Vc_Ǿ7nӓp?xGm%BV8mU_gRc?U󩵫q^";Wqa߲#n{>c힬xg+OOKG]x6kev;xvkj\ܵӹsH%["JaJBI\E&dJYYHs Dffٔ$^TCU8P&꠨: 5'Bh‵8A9wZa:jcYCbgS& a2;y n'qhv9OY%IXUmt5Wj$"Dh2,,"erI&5zYL]Uk$A!CE3[Q!3ܽvg/X{Ye]c|7|}0W~ 'v_~/Kݘ|B?~hQZqK}.OӉ^>-N{<.?d"=o}gnl?]T;#׵wt}+ޅ7W S% ^iOZoXRc_6fQKl@-d>%! Si)IXqC`஦EԹ],j:pD,A9RTc|$Ez]7N9 h6 5! DjFImd00RQ$1f)s,T%PVngyg%;PX isu+%ueoB* QRJ4B"˜$jvgPE5R2)-QkF`vM+ f )@b)E )JYgUGU`Y|,D<9KoߗV|̼%.h#VRU"LD՜:6FKRR-9HPz8HW*ya/:hP'i%lk]7oW0s03cj1sVט3n g*n"D5;90!wiv3bT v)j Q]&x eDV=$( B!&%Z+C@f9SտE)='"Nf&(nEՔ͎sOI#5M 5Us"k癩܁1QӅDp&\H!k&Jq.߸mxa[/zW; Oxطs>~GvBl\w_WrwO_7o~___L x1soԏyo:d++^򆃎qCه9#}ʵסNůktc\W\צoxʹK\afwaōW}뷹 7Aa| l4Vx}Baqkm-9\'#%Ru;}꺔J)ZJy`麾KJ!Li6jq뜈,-<w)dst6cKUTb$`E10U9]H{7$a}bTFi`RSE CĩO16+ p4LScSq'@J5*@g4[2*E\*~2i%[µ}Ё(*9Vdjv!Q-^*ԋy +C ,'& r,%07Z/@,%9LH̻juY,\ )<2AV$8K.fP] O,~>9)k`őA}+ƙ`W8PXb#;IY*z[ij<[ E<21朽\Z5b!7G05m 3VYcQضUpV*x7* ӹFޤ^WWWZ݉j-R@':ZVX ZaM ?$,{jąXlq7lkKqb y2Qt1 \sH53QL[(]aeQ+5N+E̓WݭhQ$L…Ϝ@KB֌aрPVH&#) a`DJ)V3bMFWN.*Lۅhx`VdNk)uKҹ;^va`q> {qMr}G'~~] Gr=K7A7 ]QJɹft6]\..N7o޲e˖+;/p߾˾ ݀va|)p^udaaaÆdw]J);^顧?eCNW?0|윓S=q^ve'cKt]RDa6f 3s QS&pC(I\/i< ,3QI7A-z)HJ.TCcbQLU 'ܵU PN̔RW ,9D$8.W:LO)Y L6R-O{9:JZ=ؙ8$IjjWSqWsqĘfAe\cPRwuSb00̆T8dXjF)p3R zu]q3)K 1V*P5pD~nQLFiɧ.U7u#Uѭ2GANLBj( |b..H2gaIbl6M0fRG\1tc7s{oz[o76]wpb??OIu]}(T<rΣ w$8 mބDMY{hXEsH5 TnT娦@:mxJ^&ID<U4\*r  Mw ;;]+v@Ң!%i6jqZ^a#BQ%v.@1;¾2sU ,D@4%{jkFAQМ"J74EQV,E;4U*q荾)aH. cUUSs~F!MI='2TJmLnh/Q} M/~Q:ag^so]g6= 7Zܮ}ضlۂ`I?I@¹hь23;YR,\UiJ Rk(J;H {65x]ۏ&-*@Qʅ@j,B'wCJp܌@B5PU&BT)a8qFܡ#_ҍ,b*BZ j X]Ֆ`|Fcdckf5_LLls1%_4 :JGk, 6b7&_yV1ft0ޘ*tNTPZح:XXqC9"j!-ndUSl"R IDAT>`3BrCE8V LK)1BG},sQ8UqR$A*6!R]V".*'.U8SV0W䒄YRG`9碅RINU]lZ%-qJHB)𞥔Rt+$J.*!tŷR0Όb!:kDT%/BҠYjjEC=u)R7nѬRr r!qK4Z1-ZD8 M-8;y99쟼g_>G{eO7Oԣ['fThQ5SSV$ZTp!0Bfs+1.$8M3|VI5Oi1x%pE4~ BBF8G^Mɫ+膰A%? !;L 6̱?՚Am YfGG\A]K) FcD^ߢ~1ZQFr^upZEڭ9D"C+՛YA.L-rj7a$QR#D9ys[I<j-(`sЉ2\1\8! G'4vS^kpa`0ĘxszoV@ D`x`8a%yhpt0#wԥp;# ДRYYgYsܠuE\7!LL"1%Օ͉[̽::;ŴAHp WN!J% ԥIhVuގP]D"МFWxZrE15c,ovE5)EU%s;2kҪ[)$Ba:kQ&:6i9Ž)!`,+0kxD @4J1܅D0Ugoj5*ȔT As%^r9,pé %R(1 eBx[[]5.@@A}$V 7Z<3Y< "R UvRGuw|_tgoIJNɕJ4/.9]AH'a`,q$ K.iNLMjp s@)e6lteqf0٠٬4)Ԭ2ԥ~ 7+"$]J]I( ;;'٧=]f|{a Gež `O߱|En}\=8Bw$Mxj/rǀ]>nh1q?ڊbO"/z݋mn3k߬8w% 6KО ɩﹰa#_7Zwӟ=oy&6xtgi4+Fʗn"'I8oS+ vQHWS'" /xMf9ȌBƚܬT Qc+Xp2 N(j~̡X)V R|ri.E@P3VG54&Ab:eː5el>U܊{qS*4EY $g@# {a*3-E51hQC" w')uWUy:Ar/J)n.ĝ$!&aƤKs. 3\0k)T ޹sNHz枨SX t 32\;Z"v^\T# Pfq@ IgNBꖵZQfaB`E@= w)Bf@EK9%Jv`׮2z{Hu%/؎9z7 m7渹PTSgtIC^!u7EmNdCYbcHbY m(K@EԽ'P'bJ@jZ >%鄅Q@$lfRE'mJ$)%Bi[xh0srPg"-ЇLR-C=YaŇ2B Ԡ&đ2! N𒋢䜻#&'nHV"uaOVYJ]ץ9WMhqwf(,pc 9 9I)|0)DUK9E$u3`VYQ[3 + Awu!kjԃ(M-,,$I*%`?j#5$)dp!`,IX*K%Ng"idg K 6Hxw}߿_x7s~x/[oq)g_}رnޗƱ1{Nypſ0cSwg_/Y~g}N?y.;I?ۛ73GwXkbOo{n}_|v^8np=&ڣ7K[]#w/;AwzYO}ʙW^Yv;gc5_?"->/'.g]& h\S&2Qu"53ӐHpWWsu6BZn! w Q%~a纨ntသ-!CWu'jr!!+L7S-3S(Vv]$hE`N,馩KIe%D(Y$MRꒈJ.9Ic1(YP}[mZA+]fVx-Ϟp"h!%jfHb0 z΢BBXx ɹ5CthM1b)몁 ЁD$ 3tfjI$"RREغ/!eUU0E G`fDDs2,uQRܻRB XB] GDDl<]>\$EDK<>u]5߈idxuI9gY*R-O9;EeNXNlnH?Գߙv2pߝ}}bRsr;>=?]q޿Ov8g.w;VO)̓8/{7={>_V;渤_Q7a~nߓoG={:Q2am.]qVwi^]l| ߳,W<ˎvųv{_q;ݿu{o}]FH;Edn2R꺮!f3jư4{hFJUgf#hbGX<@|XD[)ǚīxho5qPw]¦n/\%@yuy .401qc0"z0fXJieP`R\TO}Gfjv}EUЈn{(p'aJLP!©f&U_TL5W" qZ l[&DIB Pi2% 26-ì 5il 7pVOl++[u1NK~o?W>?~6nmnBuKͿ+7o=`ac ^({Ǿwwį)Y8npTӻmQ+e?oٸ˾U~g}]7}p}rMI< \k rwC䶞+C4c ;ȰT9 K Z9% "-R$ce8CC(dAQ ϼWBLY9(ES3,obc ! t8p5:HabT3u"Gh&T3وU$*j] 98-IUռ줙01Z2zVLВ0(-9V`(fNVfUؼG/ S,ӰwY(83'f+%{>5boZU5R7jH;9%ILEȭzܰJHyJC9Qb D8 ka~Z1rsqC FŋCv y|埻ਜ਼w'}y}'^~u=m{Sw׽?_>g}yÏ&6.\'uo=};/o8I{Lμ/>v?mظGo׼ێ}q1|tg{ۮx6zm>ȳ~Wgæ X]nMF:7Su%mT&|TU7sYhr47;j?Pz]xyT#+q_3iGZIU,dLbͱim7hB\[Ap ;x{(-@]G͒DbYmc6)jFIF合ZkjZJB푖^!v Ht.yV̔mlZ*,DLY(A-ncQÃ]-Y*MM-PKՑJu (QiB̞ru`2cI EMk +%>)]c vUGx k,ƼBjR~n2?7-`p4f#U-eQP=$â&n;OB ]6ԧ|~n3v2YRxFz G'nZ ճVJK vGDLl~\J44T:- ,զFxq\ 7Db`ݨ?PGkU,LLZ2PNsnTZpL" K7`i.8T/jLԲ@fsx!1bffv#rffIh H q`ɞG?kJv3p jN(p\Ȫ]֤ `4jZ}58z~W}O=WTywxMsK^SKm9c{߹f#}xc{օ) /?z^E _{~pnk>~>x9yg~.o|S7u>M'׽Xqn3.]Yv+}r~G8oO=jֹ*?GEͶu֭D,Q]B9sT{ԥjsbKP0"& Ǽ^ꝑ=!3`8`(\V jX@:&LЂKB><@4XB.bGkLӭzS5.nJN[1Jtâ!QZ1榪#a(72ȎH]$ĈA1z]VPaU$O*򅖠-[)&(҄2`rʐJ&v'k(ԸGߚqݚ `0 A!Րŵs77YMĻ=h~~Z)%WGplټyq-W;kp.k6ﶰaaÆpLOO_qo77Kɤdn~}wuZM$Q25Sբj$:2jEf\P&Ix\D-bL{gg &\t>%ahdL>I}&zbm W6i)*wMMMFQf ~ Eq^R=GKQZWBFCH!vl`pE%Q3D\DFP^wW5憔Pnqi7S#)(U@ t6$)F>ymn IDATb5U3wO,UC:U+k`RB@fDdGkP:Y/TI/4w.$L,iTQցNR(rd-c\D[ZeSÃB$fVUk&Di]HY"&0(DS|E׮S{  첂.lYyHm\')19)u]bfs65*1M&`nn2+ ⢖Kà2 \`]ɤ[X4tss7ffΦD^XJ ﻗ͛7`h"$TR0 :ZLsRF)h Īګc5͌$x \]~,ҕ0 T+ Pbcg\"fRٖudL$']epw餲K4 v#weh PX$^bafaJ٪X P̴< 鴋9G6NK,=Ϛ{2Q]שiOa,]?'J.: 20U4%:TGƇC%4JR}jܔXDb"QZ,Fa I !b%tma>R'in&"0gan=+'goY_gcU-kru0sJ) ,TB+ͦ]0"V8&ԿAdNCd HĐ@Kxq#,"١I侉ثjEa@T0P=PQK! :M$a"`Q'oKk]U5J uɪp#UȈ!bE)[<:a27-X]fda[s-5}͹bYDRm]\ d mVp-QP Ʀ3U*a iBjp xnZPRBj*-\JvM~#c=&8Z"h"5ܴhNg5د O"k$n99[Jdnn~!{2tIpJ`< ;xHnEK.>1.uBsTsQͮńS`5 ffnf82A! ΎIy=jx }u Rᔤ QrժW*g<@`1ZSIWCϙUZGY̊;ޛvUc̹>Uu!ЅNQ1N"ƒhBC?!J |BS:k9.uPkUZi\. ޓ^@i[LK)bg{ԣtH[ Ɇ+s&\xT]Ah)fhSWf[%;Y:PEEU!=! ϶yo+걾6XEHeBÛ- \ξFaTYy+' stCBȎc\CC *">; $usHjYtw¬, Q$K={k)ZJ[SsgȌrI2kxc̞_LeH26+dKn"Hs@bRЗAޤi(v!fNj$ fDrv,VV֦ԬK GhrP PFYA2P+,p:cfD̅ P׏b:8`g=EOM)y㳟t,nO/j ozǻ=K9zW6}x^w'?^3'ȋ.Q?/_b>C^_ؑT6bā˸<ZXn/r7r{ od%x$JTBjBPYURT4 )m\zXRI0R!0^sZO)3\gtgkd6 Rt0g BUX )f/Ud(!*: a_stNt2ڸ4%l4?B)$!TSe!R=cv3krK~y L G3,43rB2ߵfBEN-DHmtwj0OnBGGh62W0\[2(.5&-:Rzk$'B@]:q  Ehm,H,B[d*nf=c=c=N}ýw̾̾|7p∔T8@:dSD%nӈyjRC_ttTJReU=,B{LIZ02z4AsL`/XE2ȔxMHyҬ|΀M`oiDD4ea])09?ICMg~M \ؼ NW ;HABS2i EBf'K)=  P26r2(PfJ NbI7Af1R0;P\>v"xՃ]BLDa\+nJM9 3 P[]×f̧_qxߞ̧p/p]3Ͽ`{k߃nqʂO|}K|c_[ߕ>}i\8g/6//u (mv!_ΆUՓȯ s_.qXVV.*ԭe<;r)eEuQbcbq\""dQ0f $BZ-%/JHk-3 R"|@(""lx&IJł^ndE\Yn1M 93_iRK'ju['.8كb[z`0K ͚s t˧hD0Sj-BBlg{*Ng췈JVA!qk+ptwʌˬ] FxP (EHҬ; Z$h-ק`cƭwtd-5/E$'_:*EfWN vy.Z{?'Di=c=`,D7|nBRŒ LAݢ 깉MΊ*%@#3D8Z YMzu`4"*u83@z#SKi`P ة%J 5(jՙ ;st6m4:. qA "!a! OSE}uWkd@998yHtG.R Uo~eeG#qeo#uy 8J/'$f,;ۅR i+X]Keu)KJsSY4zTO_PǸő7o>M/ߞz"8瞷}_Ӳ?_s!>^Ɨ{_wo'? o>}W|)O寿?z [/l{g;8!7p6~-}_:y w{oI7?䖫-$=׻ϾWx6]G8};oO|gqs~jy,|ݿgǟ|ǻ~; ď~xwȗQ@^<u6yi _;5C!#${ٳ.pT׎Fk&Ƕ'wEg%zB*1 `Q)EjI]moo+ZZB%EE~RU!{:*=X9: ny"I¨5ٴ\j-9AhtTt8j)&<"px$\5@SID@\;/]'l:=᠈SWDm KBZ͔wD%"Z % bw&Zd疒'.[JU 53ˠVsD2}䄜Bә. @Uf(Ll UD%N%A$k (#2ǑKȢ[։]x7n07kMKI.ڻf*yz&P lVVpzz\QjQ)R*vRG1"(q^$}BYH F{Hzݑ\H͹rddIgD\X2z$"_ q\go 鼋I܋UG:.ݸՙ{;.{S7]O\o)+JF_o[rc&'w0^#~Gz>ýC^WG,k`<ܛ[ӳ;`7!R4ibհ)1Ԛ@c4#\ ):MSDz/qgpDzMƙ;/z[|Z~#]!poՑ/ˣݧkuiE#|,VG|y}#]o 3?PpfGN]f{6C!SiYZ!DbJI';]73Blma1c,}M% qo'.[I(Wng3,lqǦ"R 2 bYLSkdD`QrN,EY95IDr.7[\tޜq7W1u  !p hsoyB%4(ئypBNj-nᮚKY 7rf5cX;zLH %eܽI6%־ԲKT, 6뇡0`SjaXV̛YìkUр%5mwH[ZKKvI.BO:2xтԵPdxHY\}jLS_kmݸqrZ:pRJѡT3<)ϯre(L;)fw!̣熶C*`xK֬gGdKhg*D;!J8s,{  YI5Y}hAq~Rt8/U0|]~|y|O9]a['[pG8z7oϰ^rX_zGħpoOP nOxѯ>'}Sot>~5AW_}( |jBLRsUnFZ|ӈi ]"DR iehY0LF/$1LPJd ak^UU#b}ME/kHEOq\Nf؋j],8.JYPp6q ɐTZJ:Q)L_j`HFO %#ͧ+"PBQ1~kmq{lWJq3k摩Z3PRe) ssezŒ, gPBLv (d6*WkLhd[-ZftFt4xӣg[skSٟ FHr67hj-v\0kɥ@"@QDHK)A(Bu$BxD7‘2C)-׵zXn($uR:4կL!("4Mދ|PB*@,Rsg3U57ELxOțiy̚HjGqv&kz݁ B#"bċdM~TQ2\X$%dW=g.EGEDCwl dRS"R"G^ Yl,LSZv[yQo}߮~έo9q=q7⏜sM/6.9ㅿ{.ývY̛y#3΋u֣xu_|^oO$>O,=a}=wv,u_qѭp_?ٻ7G>C>~w۟~[v^.~G=C౼#_WT~VY]Z_=%=c>I99=겏_G>Q+_iB_bc!OD,iT0=bWHl esjf6 UKf"&ɖӶq*"C->E)TRTMu IDATijr'o)ZJx2ŊGZQ)*+Xif]+,P3\$FK"Rg\<RT%$ "}LgJMӴ\nֲ(Xx!ݠ[ }R̋#mj M 74tk ZʍX(Hτ@2;2lEAgp,$Y]byRK[ݛArVқ'*3.BQYUnٿ@B0">9#haȈ{QaqrDn")UU@T5@Lnm" VLfpzz\!:T)XK7HE%OSRcd灙P>OoP-uXtA@UmH2-t37UHzT DJvˌPiH0wh_hJtdCU2+sL-»XJE#ƞ"=#;u懄P0}>ʌ咾B: {τ+FJVA3tDOF{3V4.cfŠ; YNhc.nH0! `‘fNXʑwK5ѪǕf%˱HL'P _%`d-9-o7t3cӶʱ<룯O>ꌼqwg߿q"|G>o([>C#q+?Nn yg]~_&O>o~okG8or\'~;[6јYK6ffhӍü۳I!O":P\z= !) Zk"E(ֲn>.4M3FI0"DdQk=Z.YUxP$KC6[7}D |jMSֱ" nk5%; j&!Gxn̳=ٳX9IY$G. )AG-E"-=%6DIUmXX2 tճ/#Qjo+LP2R͸14öj-+uaE+RD,T$!׀R$݅Bљ B3kD:3PPB<3O,$:0k}:;hIH9Mr9ݐj.T9 U;0$^=QL0 <$E fsQ *\}6$GtzkgxU[>,k#}!# $pEϪVf *:'chvqSPҕ*3\GfKd~L.!n6&s%Y@BF5w7N;{c{>}KO?>ר?ވ׼aU_Kȯْr^n߿޽O >Ow=q c{-}՝#=o/ρ)eO!ԀZsD*k w JWTȬY]D+Gܲ5;APvJ"},Y[JQd̽AB )U LDZ |[߃J&ء!}OO "2Ncj-*K8yF4:Zr%x]Od9u7߆帴wݍijsbƱ%>O_~=&7>/[oݭ>OQ)8m/[~o>x/CW||==;wϏŏ=7G u{HlCuSsHx,"*(ukAX5B$&9iSd4/EZs,v fS* K-e@ꆔ>DК󔘇:,i}f= DE5M֧SL(•4s"nXᩲKJ"H 7tD#M>ID`$4 6|v'yk2E{noeKsÚYj2U4Yɴ-ԦZü$@ S-<}=NhyԺC2U8 s+h84TYFckYGKWq30$LE\u;ZKuIz}c=c=b(RK\EdMf P`94K$Lͳf3:-*B(!.R vgghW>ȭsiD̲:oSEEe1}EOHF#"ԢT?@#Z %HqDc|WgD>)b\wվϗ=TFۄRUfDŽ O閥~\gg$xSOI'+-RBeEsqQ6*=G2Ovfp ׀"#pMЈ&\Rg0:=?<s_Ǘj 20K~_?cg>ᨏl=!o8SX]nw7!Gן~!>{xMot] *fZjRe|K)R( J6kZ+4 6!WЙp G(e kp#Z*TԮ'Ba&OChQ-dHrb!tPhXH-C-n03>1_i&C$wϞdY- {5*(2; YͰ8}Rx imbg&4!lNE&Y$ZT|6GOGEAzl4wW*% JH5NJV.OuA/R֤'CAʬɃjASkY3YId wJZkbDp`f^(W!^[ETƱ WwLP‘PQj%fݗ@(VUWp i渴btecK .f+,i!QvHxki\tQn~sI?\D璤A ;-`WsZ`{9=E:{|iBFE B&rG[3N$-̼HIҮHJYx%U峳.|0&s{W0SSV^8* R[`. kp"H9a0hRTt@97Ф,ܐ8LیXcW@HK_0 /={/lw>=xqӞ~zn'W3>n%ܧ/1/{o{{_c'y!yEN8y|zyǓ; ׎ofl`ja8A"{Ԉ֢JRD0 4Z@h=,CkmBpb1-*EDk JRJ "PJ5kI pD)+0BUP1MD\x7KAiO͘1)% HзÛ%'M a0#3UDUk2;EcYBq& N㴽Z7qCDVɞhcpU$v+v憄@w:U OԡsP*"$B!iL@)YA烴57QRStzYk2ZJ4NvY7ɬE mdxH?;Z,ijW[XXcn*hj<$"/$Q\U9u&C4R7"hǡGUxX ̽yP*٭ YdPidGs#mà9`qW+{F4OgE>Ĭ{LJ@+]C)1o|pojH9==J)Mq2fkj7D$"MZ(͇7wHERD.̦p3 Paz¼c?],u4lbs"Y|=Hʼ)@`^AGnF09+_۴1-7bX hVD֪Ðl na 43kS,RJ"aOMn.2s#` RNÝ%P04qq4nPҚy` E3Q$A):+""R*lo_.܉9qkkO)DTHq"P事L|{,RUFF"BmjTw37kgƐ{YIxk&5fpek -R6zf9PPROz UY4]性TrR)GEkmHYC;XD`zm*HvmT26+Y'Sja5*w{'{h ֚KoWEk2֑a0d% ,Uo+ݮWТu=u 7zDsED"5 }ҸP.T533;# YRҷ)▌awCYp)PH ѦR02f^!Ss .ww&[(7$m)D=9&!-bDg"qѧ^iu;b߳U; 3u@3#1YcQQI hjif."ukt]5EyIa z\?~ҁ( }( z5=Znk`zuYV S!A]E2:BɛfFs2aJ&oYo=(Ɇjx(6ML$JтNJZ( QZCkQG([iZn'bccSJZkp r"r2V{xkZkRif摦SjxX$Si{ ٓTB B{W=F6!ѦRkf2<ΰ^.@@Ze}HfB а֡~T ht`yP2w8y/Is?k>˱զ[c=+ sP %8o=WzoC EZ#2%N,թtLCp0T."Zpt@W+h$礇L:E3 V=#<erޗKRUVuYE`"n.A"5;b- 55*jPb4Db$bqI\"n {Us~[=̛71]=9C ]͊:*iơe` :Mb7.)R5e$:ݔ**@*ʚM:1P6 e# =dP`^rbmFG֏*MJVo?>u?}ಏ=>s'}'?HϽO>^[gv៸bi_}o=@f߸ۿ(N{qιwǟ:}[i=Ox:ܗ>Fkv>tM8.n';>3Qǚmt줖='vn6Cv/X*pĎl{_{.[{f[&3ݖ9۶Ovi[u9W+ 0FB`)J-fVL㉺*j(ŊӢ%.k 9k)hZ]X.^QM̥p%b2IcA+eHhՒaq Տ Es.q\+%lLVȝ 1!7$ԤƐ.nĔ4FR$QJ .LII6854iXЈ)Bii$%nASQFmi6VDmQ$)w|;I#P F`tr`@CH10@kU@1wGz42$@"(BLfj:Hj,1ϦY7W>Lp)a#\\:݋Yhx Y໒BiUÆfig_߼;+Ϟw;G^W|ʝ/ޟˇy}r&L:,$pfudծ \=%nf&" DT+黱0V l ZGffFLF*L"9lhKՠ&h02s-sӈJ@᫸:f(dw?_ZҴYM&h L+TAU͹w.3WP?>>w]Q Ό7'δ(Jo4W=횻+tݛ1޵:٬;~K/CyC9.9׶إ/hH4kg0(Q;R[V&cP=o򱶤줖='vnrPc~k=7+u=~{_uC+'hÿ|N4Ԗn'Vm6ƿ]|;?2Y]XX0 mYHZfqB5$BԧMUIXԘy;B#=@fBut1l:fyDA"&D͘.!!X8D"b+3p,"Vna6ڶDSG5IMׅCʡBUBBUMU,Ŵ8 r;:k@U,Ms^1D.5\܂ .B#ÒLSjQS 3IH QN0̈ .!Z)D`U U82Bȅ$(W iJEw܃YL|@u{Xx(n r {Ja3n |A0$yL M͐W'{Y+g5U3P5SEZ/y硿6Η۾w8o}wG;_g.4;mqC7F׿O99;lJ'?o|+[F7ykE_i3ݐ Bq . 7~ &6)12DM@!,Ua)bb HK67+JDRD($HK)%kɪn` ƈhf`a8@s3C2c+Z $$XBL] !|va,w+ D, HY, %$ %t%w^k=6fEX ID@*u!&$cGeVCNaN4U-U8b"pK Tٔꯆ1ys9YDضILK`Ĉu_L@Q:(DDʤ(Ad ! "GSs3)H5 xG`KqkBvPT9:wZT0 -;lɪ Ff||u.;)Gw|ctѹ9;7n/?h/xS-O=w~׽O|3-un۝wc}Nϻa'"ڵ7]OԲdέ_zSGU8)xl?xso{ة;韼|]wO\v +_5٭Nml!3^BF@K:s࿂f(A2 U 8d. z20"r.4 N"Ұ, C<#Pt`$gt&*wجDܮ՗65kR%@JnE V VJHKGzR! EKA B!4+)'obg=75nAJ)UK!:EeFa6GB`vaF`0 #1ZA$sgTU8 UZKe0A5`4 "ʹhd}.T@Ե(:l֋^g=澏w{?9j7~tk}.>e΍Ik'<7w{陵@r+}e_W9oϼ=;^=v/zz'ua_Vnm'ۮfzI-{Nj[v;q}O w~p<{g{UYq<_o?:e]+^5٭Nm\KE9r1)YpD2\(TYtı:Bd0VT;# 3H†$u)뻜kja\Y" !#*ݜ ~ C1 # 3jZ><`ad  IL\=:o?x}?;Y{Q'ruXq͝|[W]v}cv[ŸV_g<[޿T IDATהeնWm2:}6~豏4>cv=);z?ryaw_~b zY>G;lgy^ ݏ#p<1Uo=q惌+g|5ڝq?螷ois~o nixW+ߖ[@v+ MN~['pE<+|fo}+~m9+~o}9? oQ7qC56FmJefȩmkHl ]f,y 0]H@K~ɥ"7G>6f,H(H s4r*V4H4g"k6 < /57pfatpP䄕*N8n6¬Ӝ zti[fm3NMDOQЊ'|#3E)ൄnN}+XIsqUTm(hC WPmJu!IW! BHp/Xb/YաOI#L`%$)Z{]߇>2U6wԈe P3q# M-g5Uw 'РW3Wt$X8jScFD$I^Xrdُ>[d ɝ%g[?Ͼ?mmlSCe7vE}ư>7-se'9YsXv]N|B?jܦߴ~+Ww8odVj%ZۦZG7+}7$95 a5TjO_=KvSWm&1@ )# `#&6s EtcER]A!(85tqE'et75ܣ_3?xx|t_}t#{}- i%/:u/~~>&ow=fp1K(SI@M.{?z~og7[CfakFEuW|>~᜕ţ}^x+.r߾8عmcdʖ _Scw}#xwYׯex 7jt~K:c nixW[-WO^g[ݮo}-MgCCg^pѥ_yGOxspo}su/z ?c.R$Ksm5Ap}a~})mٓPjIԴMj"vaiL޺~j ,TaE ! !:%X̐ iԦQیi0>Ge`/g/_FP^K' :7-65w,CU@!xB$*U#yw@d H@ڊ+K xm& 8Kbl&$df܀Jez;@1C5/^ 9q !"1 sN4q@8FHHM3v4YYͺ<B_<DĄ"ŌQHHpӌW'M+$X”Xirʹkԙ%*3[.Zf]N4ި[Ż mkն9=_V6 ì S"`觳D$ fE-rLlf nᑑ$HYɈ(L)!W#$+kєQQ符JNK`%9㠽`ӟ r!Լ@A$DR9#UkDt$@2@(5[J- :yJfHU=āЄЄ2hHḪڗ s1*N #!E9k%oU+@DxXJVw$!1@HG\31a@Wo@jZԁ VCwB6H@敘pAК0vwsu*2׀ W!bsf6./W#[~:N;ڽvwgw|ԓe.{OO=vρGM?{o/>EГrK~2}{18.Wf0ͧ+ +Ppwo.pֵ^+YTsDZmu^yS~?ik>MNy7>[ƃCvۋķve;}̍f:?в𖽯V-:OrO_O8tu[0|Q'y֛.zv~3g 87j*l.pHasJ>gЌZh܎"[H׭mť~qRIM3jdF@uծ/_?[f0n%Bղ}?J$ʦMRBQ1s_3N$",bM;TD50s2$C´ ڦAUXάkYK/=34pUf&I)`}1t%tBpR  .ML3MF!bUBά 2 (" K-[HŒ!DX @ʂJ^jƂ@B,9Ҵ̜$-RȗZ)E!`ߗkP&33 \̑$54$swqrd'%M+\-;轣aхR#D74}4u%%"$a8u%V4jfj/m]׉hvLm35)J) Z#",YCǒK)mE BFM=ܛ56$ϖnt``b$܋*50咦]E f\g'aI`fYDԌX՝ 4tb`@_ lvBwɼ jZ T̡r1c*:1 TVQqjhHTi&G^ c MEklk0VbW̡Ͻj33B"'7c$i5IrE P = )F:Rj"9 ؋Y]@b`D]pH)aqܪm BvWΈ/Wfm`!dkCv'ٖCl Qk&;>76_N|fhl[69|vM[o+k^yF2`_9p-eAGǟ_o7.gxS~>-tm>- oUޖ̏;~ȅut@[Jw]6߁y=Է]?;G7iz#FߘүG~_[p7l&% 0噩 9Ch:hJKJ kƩi~q:ΦKAsuApCV$RT|aff4[sV `ZS}_D4M+T;Q1""P̴(2\Lü\D@ _?f/Fۭm%-HJ0dOJ׻VL aԶMRi.#yݦ IV/sju O~`n`NBTp*ZT5qt"&F$uK^{tiZm4mFi[I;̺BETӀyq/%$II}ߛ 'wpB&nHH @H7~L-ؿ Ĉ + ҦFF ͬdvhiKAj[mmݨ6M}m["h&1a,fsut}.jnގ[pЬIҐyץaiy$>wӥY=f$,)“j[rw9RcR7W($kFqt9w}b^AVE$ ?FY9`}^:Dm@[TI-۽ZH`Te"!젪I"VԔh3fHLL,T!rDɐUKH}'54ҋ3&5,B^-OP̈́hnXqq5!S,ӌ^A$%JNAMr00&$DG |U4@ 65 @f'W/9A:"^U`-j8)8PkV~lܹO9m;i<DZCw~o9Ay#|û>~=64=bіs?t6_cs=xv:n9̛f,PO^m˼poy?M~՗/<}3a~,‘{w\xжO|3]v2u0pj{Nd~k7~S=~V=!wu{=G[39UГ#Y$6< ;?_?.W|CN'~M3"!-z3i# '!L(M}7K9!f-:XDR;sJC@(D9!M&]?!*b_pVJ/Ly]BUS#h05`,Lش0W%V@C-wiJ)n]ZT`jŸ%WpB`j}R Qf SX0 f4]Cwd Lմ>;V-+6i920njH@f@) TYBHN<&bfM MX)"IM`d4Y?UbF  m+IURJhVU76ЮGfj5Im j"QXC&:8I`H8dD,$ԎR > M2pBL8Bߛ>lK{N}ȳ.-rQ"۸նV&̭ϳũmHJ(!i45c/g?vViyI˞|sN>+mv;ỏvH/^չ,Cv_v=nķ:e'-[Q{7vV0nK=k{\ L?Ko|cϺuA[z>xV~C߯S&^ `<Mkmy˨i4jR"qSﹻi񢙀hi"$ɀial%cQ`BK&&tʒ 4jɹ#."T43C7aҢᶎƣˆ\|͙T ̐YRfDtWr$qO]V)b:eS3woGd܎f2Dcj$U])y !:Sd|zuľT n#Q #2$R+J8dv"G sf@ HlF̒!ZH*F"A3[Z]%;%NUTMKjqӒ;0'Lm}.]O)M#rfZQM @x.}mJ-]e׽ <|}t='vLq6 #88:2x{-訹#sTUrQpgprEA7¨itM͕Qﻒi9( ^Kas&%"F`'&WRJ7^MI S0Ph$ *9眛/ cb'6$rCD`T$7s+OF'1#i)%W aŪ2(iBfn#7W2ϯR;8z5h/x۶DȌRas): DJ{x˲wZ{Sy4hFň׏PQEpȍ<>DĨ<[s&UZhꜳZsc}P3|:{\9Yn6zjȂDu*"Z(IRHHH ąq(7 ԭ ,z0#K DmUU5̄JNo'A@)  m }p ŒLj}@sO'_ IDAT0 D8@J$ x[fn#f`Z Z3V3N1˸@γ@5R0%D w>6K)K6<1,pax֤e7Uw`$qM; )2tbVᖴB f)'ު77ԣ6M6MSS5D٧miȆS~%/כn]K_n-uͽמ''p7i[kQ3 sCP@jubEE7n|CÓ~(ys_|7~ʼn|_ʵùvg;ǯع׶L7Or{G]܁]wɍ=յ_?snnrIto#<2} pu=_Kv=|ZK]­KQ:һ;Yp @*"X%eMkٽ0jY:{ΉjZeb[չIMZ5}iZ&"bAÀR{ѩYV 00.(cBȌ\hR{}tˎ4HW/A{ y53Hp:WZM`]0P:"{X5mjݰ:AaG.;zmZgmMMsu=nС9qmH)eXŸ(5Ӧ:ӴLs՚v4MKLNh(8,2 S[3*S5j9w:|]֑Y%*oxC~ڧ=Qs?;ůy?vO[o|~s/ fsf2;;y1 $2f3v]H\8HmQD9r2PhVUSPh:*# aubV G"e`K8!a(Aơ~MN^z?Mj"9I2rwqb92EXV'V;'O,wĨV뼞sn?smvͷ[>tgno r%iXskj s3pT U7H;",4@"70#4*D PF$ Ca@pw0L4uUϠ.q͗8;sH* EP,!(S -i2IAWMq<便񌷽/7?^݁.u'<Mg~'pq/KG=UvKpKy;{h|Ӏ?W߾ͷyoZܡn?|sWn)zSUBf&2rhju냃sgn6=:yrb*e@fe Դ>yi3Ӥu΀j뼙7yԚ&`AE`<LΓfj2#P8h:\Von5 "zPTs2S#+(-4( 9z4u5CCD5@ Z+Qk9qC!DYEϱg;R=ѿiʅY R "Y1xHA45Z5ڕHe *p $5 fJ sdgY.y_潰լV B(Č )I!)Ăn꛳˕<O8~`{NSti7iYln~]rlo;8Zvvj\,8^CYeNFewww*,"uژRYXFڢ;7;{p)e5 rXbjՂ2:D۬V".j5w#aajǁqhMӔőO-2$W"  (! OM-gKDH@LE"f)i?XzH),e $ @U4m̔CEd[1")2Hɓ|0mkL0%G}g=ߘo8q[{'h̝ >\_noyǟ|տoVy7^.y<<}Iy}?ora_8gQ]%䥼xGK\򽗻)ם?[}S~So}hxK^?]7"-bơ&aO#\)-BIDgr prփ Dh@4p@ϒʀԭSҵdba!Dp'pt $F mCx)%1@o`) 0U*qoE#g "y޸p5{#&F*9e`1pgڂ٥uf^AX1,Y !U[Swc&NnJ9"b }eNH=D"!d@7tS47wLعVw53jjMቒ%j8]?EgU;=Gop1o_a2;~~W+eoG^nvs3G1%v057|?ϽOտnu=00@GxD]r\/Q=q_\%ܥܑ.<ޏr+?ߣ_uջݵ'TtBDs5fZ,Y8'YiyHX Rd<nn1f7mҎdKO[b@dn )@$fJN|~ZDTOPB9ܣNN1+ 0Aaf>Ly@$a$f8"E9Fy^T5K) Z 1ψ ȘIO(FDh@ o푫qgE8 x>u=+q' ^pw]FBToSW1pF.LXNz&UbsPA fMqFiJ@NL$"eX-kQ rn(,~[½.! -tjHbaήiU@eX *! IB}(økEZB8 90T7]/Y`iDr t@f| pS7wMzZ/ʀ`` @0s3׼AHa}\ fA=VME"@(暕f*# EfsWe6uU%RB Dԕd!2wP"EyY#Va:2w d wD&;fٷD":iI]=r[ŗ']mO|S׾_| ;zoWɃ?o%Ϸ<;1_ym<n7\|5yI޾gɏy}No#SzgrD^.yۓWxz駿?ti>^O}/{rգ w.y)/џ {a{ȳ>7Wgwۯ?nwFLژiH=l#CZ; 9 s!2s0oҲ hMF,6ֳ1 b`^K`鹃LIS=iDPEcLiaرf>OTSh2 @[%\#eDíz_#SՐQF :r@R:FVB"Smj/-9S@.- E2ꖌ@Ŗr.j 3s Cm{4rOmbA$si>w9 " e+"(.ZCtv(` [H$#SÑnۉi(z#snjT6h(T(n0U}U͑"E ǁ!=^ $"&F;cBIHxl."8.2nQ033o/]D"#/i 󼩵UmZ7s溙?08hiygUM_wWݿ pMϿx‹N{kٻvܮ]񧥰 2 2! bd:`]bxa0o@ik:OfRIĦ|"2S)[kvoMU52oj^1 08=3@aG)O9"M  '89@3ߪup@5D%ȔS\ 8dU;, xPR6[0S $+3&L0f&:yBY֚6H RDyvE[YD>̠fȠ@ ewIe@ӖGM{0{wFi/& w0w,aT3YH] sjAսBKBSϯ;AOxِ}t9nTCFfZ7ø.e=mqԩvVjZ.2*E'D?37,,PX- IDAT$Z y3faN䎡4Y[EA"@wWf=H9$D4 E!`{HoDG{c9 8s(C! lnE:R[W4n~Ps γ$GXjPB1~ro:Yrvϳ0ksFC!#0%n"8b00/<2eڔy4Z!@,Dݱ HI2AL9ME!D` TJ^ip@pLbס5$ 3{GI4!J!2':)@J 8YhӰ]SfVժ??,qל47{E7Ru嗎ovOkunJ X `zl CW1),D(<Եn4M0,0 RK0Z4.NDD:kDJA;@VJ12*p:Y;3m FxYx@tpêAD9,oH,&d9sxdH/9V>ʞB.v3׀ L69$D T6vw4jpI_]?ɍ!ж0pof"YjwQ$jikA,\ QA5,!3 d0B֦UMçysLY,L,E4 Ǭ|81DdfF$BdF^y1mn*YBhs![2sjL,faFbS_o4MZ[rj\8 "Av{zbZ1i'FqW7rۉ{A;'1Tmo}f20M:j9e(F.Dq Z J60 -s-|۴"dNd)HLI'BfbZ82 UkxD60y"EIXJf()~AתYKA@nެHZJ҇OXR aS=,ZA 9,|h<~  2"u1Js+$pp DaYi!EBR$ BMmNh@ A5 $"eȌilt`"B!Ka7[kꁤFb\QU-ņC$+lVkNhr3W #iQRJ½ `$b6xw`&. D,TXޡ_,ZIl*8Kt` Ö֫"=,[$swgoקu0cVY+Be*kHg0gN0pPfJX$ !nC{\KN@B &}S$d-'U4G"2b"fr ښ%8!aiґkfJHmbx [t A$Sݬ+I!":8x"zN,W`@`I 33vFudFbEPE4m57!fN|lgHkj&lD-wPF32liЉjYBV>UQ  NH`f4}oVj7.Rt Ή2S QG}K^H||~߹27%/\ÖxWޏ8oni^G}gj>.8+kUo?1,3w+^qkQ?~c#qYlr<^y{n?~?_5OO߈v~-q÷^Y\[-k^8@.-?v (.3_?PMWey݇D ` ."Ffj5m~n^[X`.@S*E) gpt~Gn}sCkN 4sKTwTG@ ^#:qj,ɈDHs,^0L/H"b."9iaqYo=` (> ؍Q , آ-"*?`^ M,DQPC FchDEPS^Os2w ֻ>33^|L۶$BFnS[@JRpD'B'421`1"4d<қ,FE L:qC#t C:A$" J1>rfя7B6?dҐ(DL\1IP9RdN'ń*Īshzj o| ??v7~ٛ~Oz}yg~v~3촏jo扏>c\z?zŇ|ƽv|^og?l/{ OǑG}&K}?yw+_O9{|pz\ŶeSxi؜~;?w^>y}Zgqn;;?۞Տeg [Wdy߃&~_;&{/_{m[⻅2K]h>Z\FW~z?[w27\Yۘ+7c;81zN huV XfT<nwC"47!9+b@- z;G5WU7#pB0?$@33JhG3p@7U7~Rs@` cuE:y#Μ´|"\ "҄L[ &܀ ]vsEu:KGԔĜSLu^zW7fT.9и As8f@DUUԂq`EH#5̜[1ú(ZCdPP@7*a8kDH&0D$"5xBNzvDDKYbK[ϧŻ/{k^W/9.uiG=wZ7|]{?讻% |?2mq#}o?p 'ձƺw?yOჟt.yx"W.'oTvΥ4;?Q瞷o{>,]!qp~/~aAf·aڭpzî|8gpՃ}k3x+^q$hɺl}q ߾S|gnCtw۪…yۺۺ%r7K^*ȳwefׇ&q7+&%,u>RO@2s ~`oJ/ 8!jsI$+uNǎ)%jܶ;!ha[^m-¶.hu*m`BL)`fRHI8z]oEm2ݑ\MER LSL& D)^ipD"HZ5M^rp˖-Dj`ճfnjIٸqhܩR*jlNҍ'mǣu$Ve" Qw"xn58HN؂88u*9 Z MQ y^CL Rt>LNHn"VD+vyLI dj2D bvu\@RéVv.EɁ"llûߝUxS}{tŦ}o#ߺ?_^_G~ګ< ߽lByC?7^/? za'~3/Yuwyw7\zqWmG2xKs3+wͅ/ӑ|ث?ݟ/O|˯$]'zݹK^F\"7:ϻ\ӏ_wa&KYFa/d-.o=x7=_ۇZl=H~Y:w[7\Yۘ+7RڟeSQ9\UU+=(bM]#a=h?%%dOm?!|> ə("B""$ UDrEfpp HʔTm8s !&ݻRWM.i,*AF@UU3)_9rIӨ"UX@TUŰS℄a1a)%i4 D dnR(8%1D"q窄lDE̦iyJܶM4f&"ZAJC{T5Q\s2(!%L# ʦހuD2Sw7γࢱVaP yĩiks2s)Z-:nzٷ?!3}.'|;Sr{'g5K@BO}) gڇr_Ϗ{{G?p~@,ѧ|KB@}e*|C[uc=6_sG _?gv[WR|[>tΡ'?~[ڇn{ΟܕÇ]yU;ghӣ IDATǧϼlȔmeMSguC?񎻯ƿěT%kp u-9;,x+_mwԡn3ýۯ$~+"hca3#mNbL$I"txiSԢ'B3 YGTGW1p'؞*;9wP QUc DLof)S YlH03s9'f""59yE*"4MӶMNl0ţFjJL쀒 P*"#0`xvmUkltu[&6'`2]5k]יDM[F[C0饛Ѩ-fD"b꫻5fRB DXT#KŴfEfJn(f2 7"q"fQ~ncd/'gqo^reu+y?63_je^9h8e{FeZl=H~Ɏ;w[71UX)`efNHH  S Kdaj"ZJRD` NSe@C`p>s` {*ʌLbbn)Q"J)ix!859&ħ[dEx1b_")Lܶm&) 9&bBDS+d\DR*8qm#[HѮM]=R#Sh[d2a <aU/IWR Lѫ'b3;SuE4D5KQ7BH+ HTP دR*D\5( ^sW31bĄnV"0#"K(UyaK.@B@X_n0MK-rpk#A@/Gi;G_:DeCy» /}~am;a樧ܒz_r86 q>1:Gyr 7qоx߾%^Bq*˕?߶ BxU\~ơ#2zzͳsGu_\~컳'=[u[uY| 9`'ܤo Zۺ%r7}ܟæ7!W-|4}_` sܴ̠Eb}kCf.n(KQXqls 2s$b,s-rG_]U<j*3k(L)q&dղ"Y ]KhrN'5S,RF"wtr+2ILͪlFjM.ЫvHd;c4Kg}&Ð, _C)Vesɸ7Gsf-RiuCW[5.N87^ѫLp4;ChOFal3f6!#Զ:Gȡǰf^4MfLȉ\" ȉћs ;IˠW퉙DzB~mnKrNMT@%дGp4Cu0 :hZf"fbJXe0*U SЋbDDʝqfLjE=Vw{+=..wn]m?⒋>s?Ǽޙ'o׺QY];쾜;wY_Uso{n뜌 e[gb 3Ϻcn*%Ђ?"v!o>'5_ɮxfh-s7 l]s8쑷9ucu ݃CrŧLs/~S_>㟲 Ưx˷~w;׭/mFչꛟE.>,Ʌr#W~?~k+.->u֡v#W5ݤFW&[Ԙ.le;1mj}ZzKS<4;3]׋"!&xR6mU9 `f/6E4eĉ (Cر̱ ){pD`,R33A@"w7U!љБ*U" p.))2RjW6$YE`&SJMJpRp497M >Ǜ'R3 G ԐDT+6&.QI q̉RALhuLv]4mۈLReMP[r$tۇ@U}L B<,'j6qep[&]H BK)%&JL:WMؤفW|JRs9'N~ dF\)? 9) Aא'B57Wwe$ y+U.F6@*ݜ1;?rv>?9O?'=CɽwŸݹoxx /7oyOy_~w ppow^tݝ^ >v>ۚϼ.sC׶/?oy/֌Vͭml_ewɝ;?/^=mS#cgxnj,Y/ѷP.?&l6JMYP"aDٛ6D74^DT0qIJQM`N)'`RpsETCcMAr @؀[XțCJ1!&"O cEdt&f$G05!eL!0ps TrG4:`hc*QuuS^"@MJT 8唘9H_R̺GsLeՑ !,a6OH91)z-)1v^oĦfձ"sDD/v9"et L)6N:`$\@DTK*SNmRՄy@*XǫG B+ Rę9]-B'tg~i:~^of-⃋]|pGw~ґm G̙D~s;S3[.:g[F_Y |exgIyԁ%W ګlD̛f&\O-n;RY8G=F_{6H]u|?.t#z\t*ݚ.Y#&55"f|lΡG3/X9[*s,_^;bI??o2ڸe~p2?귌M-pTF~<қ;!&!`U`հm|ѦMx*d&<έ[zLnN3M3 )An) @2(Rb$[1z@5U:ޭ &4&'2TAЉ<@n#cM\ R^T2 &VFn@` ƠhZ\ hփMJfK,eٽZk׮4و|җxd2ɸDPuEh5Q+EhKߗ4Y2*(]}P9LYTsuGXA.+E.S$ެ}~y+pU!ǾWn:ϭ9ϞϞ 랫ȷTݮ:~o}͋{2s>?wOewUOŚ=po\;n׽[L /.]{~'}gӎ\'?겏/l^w7_*e^O~k$#~m/Io>IO|ٚ;|e˴ێk'~QwXwg}ڠLK_e?p5U8OInM#&5N{D/yQ ;]CWW- gwr3iIWDmOč5I!4bZ*DD (#1:6[{Y˖7^sp4W68 V DѬ0"p2P@*HxjhX*;02M}c7hz;#gJv1S3A)س Wt) jVBI )s]'Iݍ3 dbZR)֮Z;1-]{x&~.x1Y|puI DDjO|7~ܝ߮{_iߧ2_ٵx9| -r29!15MIvnEB ;2S3!䐘8aNܴ z23]*`suDTS"„Z5g2e)3)Sh8BmBUZ ̋j4EXp1r VR%&|f3 C=b9n!rHS1G}>31|M&hUAwNUDCԻOI vE@B2X L4"!@/5C;6`"d B3cU-F )NkVLa%X tJSTJO.{A".S+,#zLUk ,:uyoTN}b:Q'>|`iRnuA)R g +[pwC;WnՐiېs jbΥ)%bF2UUqW@7U#ԤɉS̴mB(wZ3zvMqÆDonf # FLSD‰Q=qvDs)A]U*T'R *ģ:! j1h 1:YH4LlS-ĶW .nN! Yй2Ugj$ɊtfF-):V$`}7߼ɵҁ6ʹ ]BbPz]5׬Z573h/Rk2nnAppՑB\/u5U]Vr 0 hbdj"N H䤔 S6^=yx"ڋpbFR4"DnPRT6{N`B7 RY>uFFD "fUCP%pPX-67J߸13qdE8[\'M 'NT]Uzў1` Gt/-Q#ApALĈڋzJL-C1BL##AL7Ua9kѫO9FHLjJ h*h_JP~!!6iLga!{@`^p2 D IDAT-wgr33r .mEC˽T%A pW) Շ6=k)V3LH: 𢩨wb~PMtHU/ C(MTS ntLfj"@L=@DBP"m3^aP0C9{Qqw#,X0#p)q ܑe?T@UEjO:#B9a͔ʙ :iPHBnp*rBLN)Ͷ0% +zrd"eE"R]]Pk!NPyɄ@ Ra* Dj8"ҍ@#8R]iVȘAz)ӻ*N Xu+*R&}̭Y!X)_)Ew.qQGg>kyn^_q~Li);ڠ"ns;4"5^3&[I׋x$H@f()Eze"7)EJ_6o⊫L_JbfiS0Q@YGcEpNԶi6MC@diQULcS1(ttsuݘ:7E"Js HMJ)"R I]JQU: %E eTUS Gt*;jX!E3)z1*pL"#1SB< pV) `j={riN"nRi,N}oTKQjD%I|D455enynR0CRʙRd~b1˞ܴ S>67S+ҫJ)7 2n.`lzxU%R55KQU5/EK]'7ϰj;za/gey^_gGx~O={r3/_pD7VmYnZx'(Ş\D@UF,.B)++CT(-r8hd%Co0W "xaUlH\T' Fؓ;b3RJXͺ X$WDLIV1^9Dm ESEHPi'o5yg w |W]{WN~8OȍzqXٖ.<?<)o\WMtKgK.M7ڕ?uU|2C^K6;h~N.Q?|Dwz;>nUمߎ欟}?y6yS:[ k 'wcD a%wḁPb@E\ܪC%s5DNNk)6= q@A)1n5w&ArGX٫ɚ„e$&!g l%p$LF,`gW6Pue*>L5 :M 6|p 9Hؗ,jU֭nمbnPXnS!Ȕ kNDS[`uͪQڨ:M`# ab¬^cAaWu3۰GUW\"HƎjd0Шݩ2hHDzU z|L3I&,=̐`҃ $om[vڕW^`wYmqхvw/9ޖ:b; sYKJZ52ZUU1nՔX% y3cS77]}$%9n`ܕ^kx4&q ú01բCLz܍`jxf8,x%*Jy(إs7@jn akC᳇SP+1ml ԐsI,ZjHQ,6ԗJ܀ىQXDrN)j8KRZZS'┩&JNÁx4j<9L$q.BS-fa, ; 3p y@4a' 5p(X0PR_YQQJZKK% t~s|z/$7.;O+-dw|_m8z7?kKu_<8glp]۱c>nhSwRP  \nSo cj 6`0 "Cdr~8NbII#0-") !o$>;>bUB<#EcGp5"rYurr"wUvg' @2 DL VlF0XC%TMuJ6wfCU7SScRVdbC;@SP"VxJ1n5UT 9VJ8T D>=| pBrs#5+b m< D'w60%I95prI Y8 œkf={RX<\T SM$|jnu6:1.33>a[2ߝVjv]7LǓxiyyii~?7,GZo00??7?7?ȡ67g>xK.u=SG;r\׸q޻εd<T$dsN 0O`qR Yuݚr !!Zի`aOI "2f!3ww5SS'"a00j4lբxux 6'q&[6>+@PDBn1ޤ0#GFJH$%v$:(]',b:N¥5XfFg $$<0G`fiFĉJ_ɦfm0[n 'fʹjY$bViO*9 @D1FZ*rZtU(遚kHǁ< g<82&X)}N6in Py_X~ծԮGAs/FsϞʬ,fjpe0}zzE+#tU /tfwҦ_O*DbVWd{A<1;YWwnҿ/5/u{ky:!@Cmj=q;{268l;7;WQ6PtgKhp^{}窋>v~w_mVpw-YrQNjFCnr~zO`\۵r:/yPXh֪, Nnjf"):"١A^jEpgtģ;QKL-dMiH9B3t&;Epid2KU69%a"H)@N戻DT"2 `!({fլp 67S"℈lU+j:͹ͩiYA!70 Յ^N: "rRwu3"s _w99(I8d "IUt`*$Is"eRŨ5/kվQP4\6'z7黮&]nrfIF2Wss37; J0fJꨵFi p2+ g9zfpJ--tk~G?k__ <ٟg}GևO<ق]']ַ>t1;=?].wԋw\tfWh#}6‡q'wpaOO_O0ovܷo5>ago+ +ZAb}Wj9%4FIQtՊBLf!ܤjrHs!w0H\k6}A9d=AI'qF`pB [6JmI­]U9X)Y nLIT{k1m ,nUr΀elC IDATU9% $&,SJCH0rJ9 LZ ,IZ\HrnrO AoTõl`}_{'O}o}?nںA\-7ge'W85+_oɎ6fa;@mz.d;8[r qOʯN]oe~ڒmC8س_!Nkg o7p& ỈD/2,PmIXE8 wIQ٢xdMSRݝ$8AU3'5S"s“zB9XTfVqCѮj N,MJMQȆ̉ TbҤ6j 3!Bb3<%pW0 Wp9@/ jjjYInCD !ԈDg'TJ1b LDu񍀍ۨK-QQDZEҴ?QPW7fI\fݪ6& OssT. ܶy^ "1"C p z),im nw&_ͺf4Ms6@c4t%%U2d=LV=&}/m)euiU!ab'2ZzbB{Qs'0:̛}!n\+jk7)n0`u`עUt(7??m{?>~-G٥o]:w>?v?>g{v~cf图go8f[{vʽw>T"'aJaaFI48b,n=w= '$<``n %Na2"D3ժfa~}_k3"ŝ0jbI\u8@dfS!8WFڕ]yC8C9Pap8c K@ ժ\t\D8,$nutmZ`'֜8ߥǵo[v!m_zŋq}+vOxŹ/?fsw]vO]{vc[>vXx\|~ڰ{pX8kO‡y9}k Vҵae{?y6'~9[m6=׻- 6۶g]ۜp[6i_y}v'>LgocuCk7m7f9K&yۀ/nXN%9KXh G`DK2bF0Mͬ$S/Rv kQcyxD0(dȝ}PwMȏ2%pN`2fa!#@UnL1p%aI ~N"w O ($,>kMk`ɘVM̄6 A $I(p&'fCR\Tc2 xWXP)pUjF F$;$$8>8iUKוY)%`!)rF8j- @(QBbj|+I 1"t֍/&KTr;ũNY$$ɤ&ҫ)nYzٰxdVep7_v'ϭS}wmĿk-O1^ZZⲋ7ep|c:/tl ;Gq,qgs1k38XCy[7>/?o:sun {==UsDf??z[_'ofuՆ)9|[_i{rJYɩmr3JA&b@k4jLUaf[MïgA)Ja4% zS񌘒<֙2PRjL̔QpĢ|j&75W| zB>B3z8<`f>pN7Qi0mpFfz)[@bSLl D$0M,E TծTQ"ZRjR$aaZ-qf3n岼)] ɒhڶiۜ3 1/qLɤ}-U~084Ֆ6c쪪Zݑs0Xɩin hH9(EkHEfDO0!\ PYժfRn[f.j 7ujDbDsվcfE4p='(7 HHX ZkJ:*3UkUF*ESsӴsmpHU&}q!$f!"3\u5K]׹[(00[)ZkܫV7ekgI Qێr%b=dRWպ~2LJݠ UpEbIڿQO|)e[G>'%[M78kA_W{qi4rF[_m '?<ꙏ65?k5vtV@kAX\r9v1Џ}2SN8bY{GϏ=9gKro3_M2_ <fjJ!pWw7K`Bk>LZ@ܙMjdu# M;*Ue!N bRN vE~¥28Ԩ1%Пj'LT  O5N)Mhi:5j%P >,J`8MժDfsSJ :61 ̍`G@2GX@\0%D,20fpE$El`͡t KSi*l.l6(0'M: bbvuU+]IrNp(JVU%tV{JUQ$qb.+4ƃN萔1IA!#~jUWC؉8XBOTҙIr7NI䰢,ʨmڜdM&ɤWH[oF76nןٛ "InEBG(մJD ("6P!ɇ"!_( )P$VJMsNI `D ԂDd6[`6E|cZBHC!D! g\-2 IGSznDR2TIa bfŵTG-,(f0K #9M 1Q9881 ) siJN2OY4ʽaTw)ĬnVUFRN/5LD+@RJ_ImRܤlݤK8I_ '*y1!ޒxglXw}ud҃8fayirQ?뵯뺮z7mw+䪮UԽi;ېxL rZ+NK JN<ڽ/wg|=bX6ZƔߠmvؽ~-< {#ϝwVVCŚB"rf^^^^IHff7ZpE_9E؂ vיsGе0 (Դh g8w4y0פ6 Ow3[S.l]ݫSQa9' 3V]|Er$UBTժQ8H늩0ˆ;yLbpl?ӊ\'8O$,1RUs@՚uL,u*JjȂXOI[ !+ jPe"04E5LCfFImVS,fͬV%#b6?Ͻ:a"'LT@!#J¹_sRsdP dT:1ZF7r"$- on[,مf7^$[MݚFDiZjf #M̃oHD,%*a9: '9,RUK=mӤMPW4,"h4IK!șQT+@U~ `fsO)1D(D4`]ZC8U;t}R<4I `=*s`DE{Uu|&ੂ ppߧ-@lnwٿݗʓ^xqawmf3O;OӖeO|s?d]n#_3<֝7?Ϻ#W;!! scƏ_S\S^ ग गpn!1vv;%_ܷ8uy`%g}f]GnesasXrw?[?b{.ӿcc fv iYlWv=ش  pvGn\\m;_>wmj1J> N$qZiZR %L1f&IyRq3%ED Z#[wCC9qJRA?dU Ln:yc[e\,)y hӪWGTI'xriL|`j 7(!1 Q)R AiTlJb2%Dfʌm6Lp'76AAJl5:-Aƀ1l "l73np0%fIǘG) ;37m;7?" kۦm(5$ RMz'uiqR{1U]u= zUsdbw'rDaęJ`,^5wLZs Fs4q DQ} f! -iuLKח6ue<,/w[UmknP_Q0TKso.Rn%@95Mf&u5'WԩZ$Q)xtZ}i)rNԴ)5TNϣMMjuuc3jZk V. fꦖ$e©I-ZJQU5M37[[苖Rj)F>jhHJL VKF17-]cj)HRYDR …%Iʉ$aṿC yD息af40AЮI圉HMKs$$R&xyFv|ۄUjOJdLHVJ8Ɇ܄XD`MKW/O~lyqdP"0'I"5FR0i^+ $<˩I$R fLseo_|itٻ;xog=²ˏf$!r`oz_}{=ƿՇU?:ki{g~w>"Fp9urnogG䗿jևM;0g=toç~ճoSg?ymG7;5?r=sk.[>x[G?yu`e6џ<^oz>']]m7:͞z8U1oLESkͮ8 ˼ז683+fptWn ,9'iE\ְ>@`SxٜPQ()KJiIgf (2jTۊD1uDJ2]a䃝lpgcsq'"ܜՠKb Swvfa PGKA4w&0v}K UmERCDf:KAT` é9#UOLLEq,*m$.L\&}QWw&{"w/jwܥh+^4Mnr>k(Z6,9[T'/ IDATģh]~ݨBj'K} zuPu"/ 3g4T*Jժn̜sVRZ7lKM;Ҫ݊_!ɍ`3Dj,讪E]K2˒ɯ /q%m omdfRB6NfVV0$0[0&7,F܀-ldjLMFmB4f6S9q3 :}MJU3 I;gM37JpÉSj@FsY^j(q7n(N]ѾK_Sx,Tbj= 1!) [DPXZTA^LP SzN,9R,`5eDO ZH pk1MKL'ZAnsjaYJ_ .L G[4Dt~^DڶY+MRB)"&21b$9S3 {^vEs3SJQm5m3??o拋!ύԩı7皼nvL< WCARs F ɯn䗿HC?tš]&lj#s=>[_䗜vw6A㯽}}?p<ɿt: w?u!Ĺ.N9՛p|{|X6@,0nsv ӎ{W]ѝrc]}7[ҿ^|Ւ\wMz6[?O\諫mv٫UNw~q;l2#Լ$j֗0 310pA jRJeI *Ճ}Z  3frm 9jUbNWMSAr§E Z3{" ʍͬ:&afNϲy)})>W3rsZ{7'RJPM"!x {A$09邩?lp&bbA(~J)ʔQ1Ĕ$9 ™b,p"&s5ܰ0;d&e\g.x]H[ْrFmw}t|xkVն_&z[cأ\X[ma\)|x8Ozqd^G?{ S^'^{f}gC6fbv6=kᦝY&Fk_:w^w^[7z1kGfAmTIX 6]Rܻ; AwHXBbԠ1P #朳1LiS;^UK-ph_Tt#bn0(9Nnw;19sn) ܅MA4j,5}EjZM:51SI$0T/ ALRbj j5vW#S0S$Ek0szU9a䆘3AXΐ$\V#3Hi HIvԊvB,"&qb{xۮc̹>ͽIHc("҄l!"򂅴*(e"Z*_EPD^_-PiIHro9{hXr!^&4p:{fלsgJna]$8R A%mpשv]7 MZn`f!V8{ P [xS؈'&7U✎ge~vTf'aʕHTx06^0^ut#;?~M}?Uo}w+⢯O~o}+w>9DA;h뜊)a aPJ CÝLUPytQPWJBRVY,j/T P$3}]rKL$Dj0S KDzAPmNjFɊٜE=M@E`᭵6,w0SJG/&<`E͙XnHW)(yV殖,<[r@/BNff -#;Yښpwfid9D^ S)/JZ,EK&vCIP=O 8= ȳ&C,kZKn&6Y4M0QM#lc 5ƝQPB}ATjV8崭<ϸ<>Գ9t9Ͼ)g:ν οs;nps :3qꝰﻮ|n:vխN9ˇBvξںS=7(ߦپ~>,B ,ƨ6Xjm@,ZZ_`c8s=N;S9Գ:|[gu)6onbዅ/(Չ[#F}4,&@=m"d+>#WKk*`e\{W]qG.?wd9aogoۦ67e{KmSrV=u,l[uk.z+]OY)l5Uky"{XS&+܇gbZy"kk?O{ӿbyߛlkr<^x+N9狿ɍg}7ߋ=٘{^gQ 뾧wWo&^|;]k/_z֠'?a85~ʞ9ϯ/{?^Kg}57~w|\kosgӻwj߫\*=]jVfdu6<,53MXw| #c&b3s:t0%,XCi#"yڛXY:P]Ep 4™^!7 cB dgk[SSj`HhA&1\mmSkQգtUfa 3_Go:c9=#oݾNt;˼?<~5;}ՙ<}q͏Г+M /uůϽSwξc.~}+w~>._{ק?[zS~y9Qm;{hW4M6\']/]_Z@ŚYsh qRh9thSZ1pc6oE2̹Z(3#Hjh լk=צgnDz6j'xP䫴. ;CAlCrcHdF[ᑕktms$bo}.}߹7k:xݫwo{Hn׽}{9g.HaLJe!tOjX,\j9@DkeUꜵ;P:0Gȑ g-kj'zR?&)L8q A 'WHpWKW}'EjV4n1sU-X-gDKcBZ.J,)Ytlg "iJ$vUlnlު)!qaT󭭭R+T>Kj*"L-u&APњ6[ an㸱XcFZK躾)2So,z)q662uP՝մZN qe!'֖ZR֕&)),/]ZKح7뻮0+ɴ)E cĸ3/Z&VӰ6 7u5>rtgww&35"!"!^NxvrU_=g|⁷|-?fXuG}[0]ՕN7ئ+W_ZWz2ǻ]X2wtI6~hs9{v_.l<~wrox, p۾ЦOt' 5_=u+ny /_~>.f3][Ax)8b` Ba BDW "pwmf͌**SzZ")Y?äԕHwXfqIpfH' 䍭Ph1f n Nfw&EAjfz0fE9L4 Cݦ֮ڹvGLڜ`.{{61q'RJ!&,UT"!* 65a*kI6B wi=iD39B͆q2f:A}'CgG98|Ms 26N֞dk(L4N`)^8t5B S((msPj益tR|nڤ4 DtR,xN,As  XYV)<;pND`N(AD𴺏bͭL,# (RY%<*UJ-Bµ+}W_t+Y*Ufc:.0b Qq]7m1G$N*a pK {$fU6dahڨPg ,B@)"T"fa837ɛfwQ%fMUa5iVxLz"NjIFsx IDATmRuM]Ώ??O=x~vEIP5gOgCj@xJD шreq"DTf18M:%9fUѠafj͒8AA\{ޚR%KL f=DL[ t3Tr@zss*v nkG] +X&dk%y%2wo‚I23Iӓ)D*T"8 $RN+'%5:ED!eCšW&'W"Gk8LZs*UELTEL @] *"`$5cA 7kYM{6337憈vGH5 RSE![kTwGLjggyQykSUJ#E]骜Uf1i6hk K~ܻѿOs_7?b2coqڃ/ۿ ~ywo|on{C/?c==OY_ճzx.~o5o}ij??yoQOhm}oo{m=n/<]GE٧{ij;V9eGv‰c7굲<<\ aA^KGi]*D,kTWmH'safP ,^J Dnni6+mlLFu5.`N fd(05hfRBaɛ$ ʄKI4DZtH)9Z}1YD,io{؟G־/~];~' n|s_?7}~n7:}W=t⦷u<w!_yΏҙ>瞗U}?Y7 ړl<~?xW^#')_s3G~7?=v;БNt};D:C7x'|F'9Ǿ{.z_L7?('/׼?ewu>7[>> -<ȅBDT*,zRf{rX%ܺ5U"X Uq& @0B;Lf *H!Tp'܋TiZ-L '0yf2Abg2e;VR @O"Rsވ'͢UD#jץEMͣʡC[]-\QD:Z9!()|&* h !ԕ"nf)CSܛlM:#WuX>pDqғ."/H-5"|=R*",%۝5b˯|oTS7J,CJ͢fix 'OW "n-ڗ+in{{j4wa䜔o4m`nat$NU1Gt108nMw;xd/fp0Vr\-/?c s_zկ|b}bp/epuv+UɒZXHL͆X$: &1M^7(4a2H~m5TDrOBgB+<,iHxWĒi>G2kD > 7!AqnFNAf!.Y f.%B)b.NfFU,Z3;9U@rKҐfvw5SKFzϺs2c3AD&̺~Er.FD),.ltV6MX,"b͍hԦI _M0MCj)fv;J{˕Xh\ $ðH.#"$u&x4"(nRkba 3}]I™jF!0N֋e-Ԡikz{е<:NDyq~y,|9]~850w}=ʄ05k>51-Aem0NjT!)~ܜ@"|cHWZ,Tff6cd3 w}оK$3S.q=Ϻ7_z`|RʠÓ'"'w[Cj%!j_ "Zhn󀃄\q1V,oҲyY 2Ϡxyx $fOr"*LK͢۴F37Q B4Gg@A>'#9e"]3v*,xFLRKUҤf /͈{,\@Vi # !A>҇{xk sdkko"l{{S(;*Q wqaliPXt"L>jvǽ.R+2̮%L9MhfA!#py겴aly3{bcrD'B-36bl7ǑYPx qaݝTM]K%*m߇u kׯ}9h3#(0!ft9Eм ,TDMt!R6 A!t!AH4:3^D=,9gf?T`JXlEL!Bu\LRJ]W;T-|ztVJDLǚ[A!Ej"Ҵ92=*L})bLƥ]""`@FnVJ2c "yD  E0jD,2A!ݵ8jZatIUáL&5 ҮZRD\E30(9"u'|xs Ui}jLfI{83 \:ިj= KaYR$w32?4fI~z|/}4UUqq\ j5,Wrw˞'];i[qcâR䳢'N.l0JIr] ,0TmI1(G83'#fY恠p8 yDP3݉I?|Ue$'DR9F%NbedpuSy98ckM [f?U"1"#F卮,4G uȢHeT殖IIY;3TY%`B)EX9TYXQ WBk'c0)䤑T!b7^rPN)f)Z p7Z@VTۤnafs,ab.B"uV4aL.-Ju}K*lÀ`gv,9Ȍc>z3S?/@6P0 .8IFo6jsPgH(&":9qh6=4˟/zK?pYu-y~g- {׿#~<(=w_ u.wDMBܚ^ۋY-qĄN6%3@a,!DW!yD GKEd^"L5>gtfw8gS u%  2 甌x =]Ճ`8h_@-f>U~]} ^7࢟g=xr/>ʷGyWaeQ? G}gח eFeI06qPaA .gM h=Xg0Q1ǚ5k0<" IJ6fG3զg&7Y*Ba ԑ̜DDU+yx.RUmR 49l"6[Վ$f",T!\3ZX:åҌ̄$`t}]e;*a:KEP2M穗YRJAQ~88i[*iժB֮:`fij1)\EU -nJ݈Qp3r:\UMR8!@7apNi9:EV$8nR86 xXaf.@RԒQ +ZּٵFz#w‹O[}uѥ~/=>p[yoY軾 C]CU=I ȌC"AʄuMPQլ) ]OR aa66PVDd-XN^V WU*[lo8Lmҝa/ݰk"b'jnV UҘ aZR2NE*iKBVt᭭6 *]7M1K0SaE Ԝ`mjjiZ4bNpRXJRԈP 7Fx~\܌u)AlnRJ_KE4ayUוCۧ`aaZSS̗ʫv(FB !Rdz(BqrnaTҨ5Mik^̮$G}#666777k_2#2#ZMK' _;춫1\-$9' H*D/|HQ*+`. % W z"X.*x`,p -&9}߽ך|9$眜Hrg'>s\]s1~E(AQ* ;A.U O 8d6NS0 +̃9j{+pwZW MMUUH BLDjmf:֚qb "ب̆+7frT IDAT"JeNDff[ {ΤfDD$ycYHh<ܝE):`:8dH`86@8ԬM[:0ƦӢ!co{ݟ{\x}oyԅw۝j?G?n7܉L hV#FRLI(y1"1!ͼM) IKJP&S5$D`@et 2e-H)pQ ugGEZRV:{ɓ~4GkjfD0KhaV "&Dĸ3PL[kM2Zk9˪m8GRk]_S$Y)B$K%u0,SDnIa^j)LZZeP&3k0%ԭЦ\F"b1TH ZL)ּA` "3K3fi0umD!aiDfhY憇T9|x:wpf.,@!^+={5LPI]c?u}}Ҵz[l ͿO|$_z= G??uW=e={+dyqOGZmA>p(Kusu s{P@ykjњ5U6R aK|fkbanMUZ0WL 8FmZsm , VLMkf/ (ɥTnSCp3e%rBFSUm,PL]=`N 0 Bڰg}3wyÞ #F]+>ںSGl~ʶsĶ=tO=rŸsDw֡ii=dD\ZԦ[ۇYZJTAT**PY37۷w߰;c{}sK9?켮o+1ְ#'Uo GVv17O8n'Ucg O8ٖ吮{or޳왿7|&s5ϩ;A(",Zx(Rk"uN0"g"4tg>9}š#nھrkΡ+olӴ=M[8N4iS7ePdm֚ դvbpt dvi1ow֑;ܺ_+/CWlmZFYٰgƞ={ 5bQ4ԼiES']9jS5w5-bykfͧqZ;[G9uN:ssϺP{# .UT-Vf#9dA*11F3MmG+l9:6uڙMM[EVZ[3?۷m{ƞ?;sv9}g9{sY78qƁ3l_Gm^77?G? [a_w#]Ed?Wa]ߴԦ%,(":!z Ԃ:A9.&3@.&D_3-+HCg6"DcZ#K92`U@ :p ΠɈiL/|_?FY}QGڭ#e*R;2Idnq@T Q1JBa*Lmm4*ezkf6p)N/X5qI0ws 8Sb`(nH J:ppJ)k9Z=WcWEdpQNIDwKLUd D*%:ܢղ6_b@9 u&pxPJn$ ٻXf36g0L wAsg}ӷ?u3_?q7߿iw|_Ks+_=qo~ ~|~?'\l=5{w/o~4_u|%wμ3~}ǽo 7~g/<_sm8Ox$r/>늷8ḝl$UVh gw'~{W| ^O9_{ѣ/❧i^ӟӽ߮{cM`]4_{ҜO?o=.~!V!}ʧ9!ј;Ija<)-ܑ MѺ*'3 CZTuEHSg4(ij' 4:3IDp! TENB)lNJD:E"-S9QKb s-pS_άD"^! DW.x”!8H::Ipvvi2 v| L=IC!H">MIkPT[,v܍yL6͊RrX) FB(opQaI\TkwsJaŒL9h,RT5JhW"B"* S7׊͜j$#/o;v;|gUw-nq?ݯ׽o|o>9;l;ko<'{O%y橿v~/ 1?xݶMq1/>w@]'o}ա#͍lB]37'9W힏Բ6UTH&" KC$'D0zPP­KWE&2;34;I*Kl80Rґy$m$Rzj)CAA% ! P8rR-s!"g.9g|]w7kgQs=Ru3^zw{􄝫9C&a6]U#,7~?fCBC86WK&8~$}Շ>9Y=ḝl5=CBLij{ rx{Ͼ~eħuy *|1gi?7<釟6+PLu*C;) ҫ !N`dr"Pij?Q)e Zii9,1ZkfYI%DRt٤$\6kBI)R$$qz Kfo(y9Sh8oҦADaVP ºrE:e{l&q0"ESgF@@ܚ>uP a~LY\{0b> DPʬʬl"j-xRJI)"̔^gZIMS=mrItPkAqjOw0YzPD88u=,i=O{,8o8Y=N Ƶ^_ڷ}{NYn=?WV/tGXUmXip,7b >fW]-y"pci~CR m&U8ȗ`YYI nTK:nHS+@9XvcUs޾ᑟP/ا  aa"-=YF$rБĬ "n4 2  RB"AfZ C,L6*EJ}uڎ{3Aa0hGFfl̇ZZy9YYLi pDBpIcYt+QSgY݈L`.N!W!"RUN+|B$ּ;XA%oSkJ:aocWnj$\8#ڬjJ"hs88o=ǖԝǯl-7[7gzOo|:=ݒl䓵3oc?r//oqmtģtazgq Nv ^%pcrQ鳐yx4~u'_ӿ߮{/sozmŻ.4Hf їOnJ{$ r !8&l:cG5 $rLĵd1#`BH~3 䎦U\eptޓ03 f*$+ 26# D ; bQ)E=Vb60IP ̔A ` Ff!r*YCAuHq7Tn A TU04"GdQAJt RaRY22[StVs?[ E [[jDi P!"*dqlJ"lVEB4$pgNݮn+勵|л-Oc{]tطO/>䛾G맏=ooO|2_6K^O[GWr!}­.~ <ȳm_͗-Kоr'Kp$ ǷHatP ";3F>seDp)¦RәШ5'CeR!;$+D.,{+%V#~I}?tyۧ;?ʷ1gg7w|ԓu;۞ß3i|w^zmmwvw#NS}tmlp/.k;!]^Nv}_/yw'ɅnÚR uRYpPH9#(PMN?tDYdR*֘K1Ub6tu+"%L@0930"L`'aP9L zD("Rvis]X03 k#l2p @pDV_" T}Z@kǬkXL:M 0l fdM>/, xjZ3zQ*pN,J\\0ZZf8!ȉ@3s` g& K Ptk-s 7+E 28Li5H\ËzªvY\ l&"IzNoIQWg d',L̒E}}e֫OWo>0Op7_l;_~-վ@BgW[{߯q#o?=qwKÇoz۬{_&O.7ӵGp<ǟ~^t~wz? Dq0)LCf6̉`LuGaO:@MYeDB3sZ#\e~."Tw/'Dw:52t6R$?ĥ+[0P$aaE2^a EDiJ)" 3c*,4uiM0;D;Dj6EJ`jnDNB@0s4#8ץ\E%s"( "xڂjQĤ(D Wcf!&H#:I@wI,Dw S@d a(]@"dXebOL"D33:ݠWAZ*w+t@cH.'o64$-ijt3m" )P!$A±&fiQTcSXR{S$S3 R"BK!%nj!9 -(E<0HIGC)P&Zk,,HTJ ;φa:sfU"PkaЦdDJ,YOm3w3M-9{+:Il&3?Vܢ0*BtO̘;c8% k7KI(L`YK:#HL(7UJbw0by-C:-! l-=@j@*,@*իN{=p{?OWox-+/z_W}[=oW]w/-D+ww Lo={xe]p ! ww;awNXSVvo{c#@aA~^)@,):I,MnA53A}zcg9(ɞ&cp4LL mf '*A]Ky;kXzGxt:k`aZ2"f w1G J-,1MlkE NS*{,ݙ IDAT[ gnɃ(5ᘓY/ *"eiF2 OIX L\wN*ÐFyL.K DzHAug1_,?Z Q@MY i aV!X(R2. p7WX{(3Cղd,nysbrT[uG?~ ?zOa?}͝Wy۾wݞ|O4:W[[?>Eunwӗnz|k>6O}ǿ/>tBU <1vN5'NN}MO~>s.vQ?/կny2M@ fA*0#£,`7Z,=_oj) 2c6(݂Q# )B0rz/ce%NfP-\ z @"f7t"Qmjmj ^)Y]SG6eApWOIZA!ì2IB3mY3`BD u 栮̥XW& ,A#\0w )Q[9H]iGpEwJga@P5`a)TW 7O~iJ::s)!\)  b_FDzafn-' `-2nkѦ1??zdkjZй. I;0 l ǒnp;k3ɭQ7?K7bqheeo=}g8kUvkvVwrz{{\ՈƘGR0Hk Dnf͒БHN4$`0 #5An4Lv! *CY Rd<\0.jX)ktNjPU`vF%Yt@xN",fR&9ÍR֡ndwP*TEJ^MSaNFDA,@it ,J0KZ$DAn=)yHRIe#úw)$#+,, _ufަ ,6XVrgAj: %i)0 w+D)8ڢIpg[҃HHTlBeE(V,QAbX(I0<,Vz_P&"R̼:HtE;lYDӟ2X!B/{ ^PqAċEb1m,ܼtC{7/ 'O80guhuڎ랝?]?w}}î8.чfsvAwCI ˯]կv zOBO7Ǐ 첲ΌpZw!b)u>m&BfYS8U#Ҙ,YeV >21 c&S? +ٞ_H$H%&bhnf-7+Լ7IJ(N %EH "P rWLXSń@5}V  Ӵ1XilcaphN fCJIWȻ톗ؽ7vi 0f IwpӯA, ;y7_ܜ3> DE!(TaB4.L-x^w7:wQQ YDkVXFTmj։ ,<6-,7 +p""LL©µpRKK?4J#tYd[<)rCGPs YFNXY <iJEl}M󽴆aVS8 A/d薗1rE w׮AK=؋I /0yV(dcR'˨Y2Dhm[wƩxX,6bPK*qR5(G{tY[\=wnwG;~~tvqGǝF3ɌYJ-"bD$O b:= AH:I}1.5W҈ZF @ ,!˜)Ɠ.DgB)4tLZk-FZ̖zt)nb:]p~ xp>rsD >dapGߗH\M*EhaE \ ,iTOpݙPW%zD] |LDzWÂ:۴{{XYZ$tb:}ѣw@)SD@~&0L3Kki.NuK̫gyW?o3{E{zwXlmOApm_qFpNHY)P677Uu&j)UКismޚy fq׈rnFfjTQqql4Mlme&&3uP  ^myN=oӳp鈴 FΖݘ5`F)E8Bݛ6 Z |1jS"b)+>QKɡ1 xrL=V3EYIV]##K8&L& # *DaK%Z-(KK",t mp32Fk0.n)hPFH?.=DRR6C.{0զ{X*gY 06Wuf,\8053܃Y3_Ån 8#;wn6Zj[aQY-E0Pkf;ݲ܅z[J t3iqlSKN)>Bp[__[[kC-Ӥ;NR *E7a)]HaI},@Q6%RJ%76.Y`;R)BE+\ JkkUR("CHz=EwG0GZLTK B< Lpm ,ۣYMچYp)e(u(REHR=K/iօ=BDjp3w 0$m$<$rP&niVf!,Al, #A#ʯiakqָX c[Gvvv,`b7­CbM&x1}h#a4 &ʲ`ɺ䧮NAQx mK״o3No}})>?~pW|,tCApp!fL͂qܙ/ 0s5&ms^[iTU#RijiSyR$E˹NSK,F0Ugfn92\w=S!Ue&YD+zX{QOw\aqD*t2n @>*@\È8@&(t'T j[s."‘R#^e!$TQBHM5QHOuPNýr PG2X p"+yj{PmKKNnd ,X AGx\D(XPJ1Ȭͦ͜NLt/u 'CRar:|FR*ç߅c暀RKUu2'U>. n09o%|c;tdKm2f("bZAj!FfemmY"qZ,q1L9ZÞujmD4bZV55R<"B[GrB;2T ,X`n#͍A9vݲM 4 Ej-u("Y!3K]R%hP57 _YzI9"(HA CHA09rmPis$^76nnػ/PfkR8PJav$R3(<)̝<V0s* S,gyr*D^&1mwX/C!j6ig{~/eG(L0;7"`B8 ϼiH2x.̈sO8DMSMW_@ˌ=nCO>24Ç]~_~\pw<}{n؞, N ]u8;&31`&&[=txlmbCN:)sY:v )i3 GZ3p0%XPB]g,ԌJrF}j@7c"@%ix=,)kn&RT,^>RclhK] rOa0R  Ry"K,,@)U Wf.R }/eG@Ȓ]< fr /ť[-0sED!!̉5 01EVz(V;zb) P6rz J]AiQc!%a:#E!P8"HppD@j]W{ۓ}ݛ;xˣ.禟׬n `vݷ6eEq2w+ 7mP)#Yut! L 8.b$ifF" .W PPDPڞ`fLLYXRE8 2"lNQ&i#$9$L$oisOA iBY(rwr2Po=/vƝyk+z8 j$Wv,¹g?xs~%RDI, !p ,RDzg3A4֪Kdjl>_up|Xna)6m1_3I)lblW!|HAtS,\R'D(d28T5kMu ЅC̚zpN;][{8+*f6xg9olla/{'LZT\UΗ؃ifMm]'BusM薏Q@өi8TMI2.FIHSRrtlMݚZp'f!ȃqՁ.R9D.yܑub#wɆs}uW_vO^{; ('~Kȗ7 v}Ea\汽 _2u6 vt$g 3}=+/x_VN>u_^+FV߮_|/ Wv+RY83#H _+ uLMbrMn-:>zLOcj+lņͭɭĐU> T u-iTzA? eQn޺eӖLF;#Hou6\]koƫVZlh'NgSvnYaSv;ErinHc) dHcu_&7nذu[7NOMU3Sjrs֍Sm [6&7oٴiɬL'zz?kTՍ֕ f Met֩🿼7iuUCg|le{,_rŊ+W|ي壣&VD41RY67+.'?_so4iDH (P$c22ASNM#m'HBde8Z h7vݯ͕W\sWG??wK/7.틿sɅ|_?UW?կw7n[ݸp݆맧U/I0E tPYa)!"P؁+a1pv0&xа꺉OMe|̝`EST76±+&O> ]R~le9 ?;}g_}yҋOS^n/w 6;D Rf &5 LZI3 i@tꦏ LE,E:5"hII tcs'p凾5)Iv|grrP-3Sn{j)(8l.2vhõ'LA O%}r*7!15g#UhD@H#.E`Aύ8ɓ8+]y.u`dJ&(egLȚZ{ΤC4mMYbL9l-A,Ijrwں[]'&*Nq%oI9cEerW.x܍,;r#Ǧ4rMÈJ IDAT2s'&!*8wN BPfꩲ(bu]5Mr*^41>1>1>T96W3Vn ~%\91eم 9I%L]4ť):߯IbnctPzP bQdf{:eYU?3)FB(bDc${uڈ&Tof?= dF!F&9Txw|t+"MS7v W͓u])14EDӯgiVtcPFPB%RrFB0!%:uI n6U2Q$ԯ&~p`N*R ާH 8ϦxPA }pxCӴ7VŬ6:sRmxto;|ax?=KSR z 믿} _\'/<3pڵOn:Tr ϻ+-t7G{uW~|ͷ>|ߝ8_>66:6::::22vN'({puw𮬵_@_<9^zu1mGu,cS~] "Jvʑn(bUUMӸv <.2CjYxmp=)v]ʰbfIܦF!j6cG) fF}1!)TQUum&YON0O5sÁs~s,]KV 9_ͲfDV0KLU]lt\C ey&ᵚ cRAES9(sYD5qqOpՐ /糺){5*9/Bx04aqxȕLM0(2l>RͱۿsV2{ XvOUQuf ۀ8K,"6ITQCG>&"h%ڹ7iyv].;rE~O{is1r4[AJ}Raʛ+٧̨NPK{jp 1;⡏=餿8]rUƟ,Ro__x^?Yߧ^gܼLJo_w#cX`#,֖kr1?\wN$}+NbS֌H}sC]H?mO:?v]-FU6[J:Vw9.λXTe25;{‰}g|˅ a ]+Rh?ͥσS~cbɦ("T! .:XiPcP! `2)Jcl|[20/88bfn:5u#ˮԨQ%eёFkuU$FL5IrO,_1chꪪݕ+-ݲMTd&S[gfg(`Mݘ*d)ʉ˗1SUՃ E,b#i檪 P)c,b)SN([-5($@QtH zf?0*jP6_NLN6u&Y~a{'eZh-=HZr}G`fuPYjP D9;"!Ȼ>#9N%J#Ґ岖clD){9r2be;K叧R~{w\k>39~\|ƍ9#+tNqߟ}̈""6 9 zE1@9Iyۢ>z0!4N dFSr(\dNH1OZ5wG,E%mjNA1Qꨌ&qny D 6[@ [v7{~>cvBJA8T`JԾcQYP5zx4  P޶D Yi-jQɠ&3 isL 'Q>U#rB[ô:r{Zє3wc23׌o=<8\5Ϝ;߾`Q=VfG1Ͽo~x/}*6eVQ @E jLfj%s#967FFLB=|u1p2Aɦ{c9S,cs+2΂NB  185 "IEqW ؤp5(ڼ\dbozf5b 1 5D\$-Fъ7? 0VV)^̬, ( F́ mGG m# lDƞʕUB *,Y22(@,% I%1Qޝx 'Ԕ)1O?/A}/x {cs_oVr^ ezi'_gg/^ʹc;dz{N/Ƿx{UN{wO]oהGG 6Žz^yzWOE!;g\?cw#L:6/Uϕ]*Ke'ZI\{bX'H_x[٤a8m*C(Ǐ Uh)T3P2ܗ DFٿ 1"0B * VeY1#FFEU7uݤ:U*uzPߊPjMP>t*q(dAjA"`zuӄ5)el`Y$^H%jdL11Uؠє@0M3B"Џ@ f6%RLH 4ՠzL7ݟX10 Ti4fgz3S`f0k93qJd|]x`4Ej=(@|3ic128s=eI8R Gx[ :E 1Ԑ[Ւh$ILMM}3c1FՔ"ۚ@ >쵬_a8dQ5i|cfDb`.b4UxHJ0KaE(֒\bIڎ˶DˑDc(b!"!+S82`=_̭Ff$#q >4zw$ڈG(I Ky TBdn "fVS0EĜDU !8mC"J)s FDTKI~+ϸ}kn뮇柾H尼g-{}o}/܎U5}䤃L#?wЇ~FZ+yN^so?.x$_p]Oe}ooTn,>NF2 >G2Z]ݨ`2EAN`)1fyxr,L3 Ҝ*HFZ;{7 u! 33)3E )2A pdo3;tІ:!cQ4}ܴ~fjf, @gfѲFnMԀ(79' к'Q"i"ђ7{rJ( w1UQI)>f~L59jMɗ*TmHvპΛSߵmq}vW؅F<fGbe\`t9)[9h~u{ろõC{g^3g^oGr ?t ?'=weGey+R=]Yp@ Ch>1hE4xB! ]:nY P@}#PˀH#"@PE!G@ !"D"EZa4g_J IhC0AiN-íF".Fn]Mo&)"ȷfH6O !ȼ6!;F_`%"$Ctt06zWNU5ujzfda؊1N4M+9Q'sgd; 4Ԙ1P(95RN*V4 2 0XJa'F|^("b̶~%ml}j6 8Zv|[)eh#k]m X*dǼ.5Cqt_\iӦ;$#OOyz+u3i]+;x+.囪ٹow'3P#wo+|ve K@L];(8fy;o"07^t̂,d OfYnW$s%}$h&|ܚAEg!S#8CBalueYf4% c.hPL8~(%Nڈw]|/*HICD(i ,D2Zh-BOpPb|-LdFf IT=5PIT ;>$&_QLiU|8>EUA) 'D"aS N$5̂*}9TS$CzǷш8L䮰",bd)* ٸ$X^F;2P w~o,]T~/7$J0A@2@5KH)sT/80JP"RߚOMP %$[+S]( ơfr+0 ,`PR ;_>88â`dуO"+CtC4w{LE$}pK,14)satC61~, 7&25==uzP7HB% eѝ骖A<-D Fp$BsBY &c 1EL"݂l^*C@昅 JT=di͡`Ü IF*!+YT=4  6C#,עKRcz=̑6~ۏm/_]`CV vB7=Z=_yCOzsG~Yv.fŷ?ЩJН8b Wp iᦹ,@<' yv=]Pڡ >?/ "2"?%S:72fQ +pl9Hs081O>pCH0 |Za9.ډ־F3 Q!=jTD`sXqɝB˦"owgQy&h6I3/|lvN;.Փs6U9}3 gFE1v+PQ3C;'.D0(T!1ܬ0Xl)wFKC%`,?T09.(MYhmߢ.1е4'yU+ 3>P?n\",sWkU6"~kkA726.h5P=Iȼv,qnb2/"YHPCAqrb[51QL D4:2l4Hn ۍ- C.(8f1 ,iCa"& qu B)8d:(hTr/ym;C-30e`F}֯E9l'^^}֞3^[~wT )&nykype˗-[}k}cNJ2W~isyK:NxOx/S213OMwm@" C)IBx$ #,VgkB=\+"mthgR?&6LOq"ȌT{L&ocJ!i#KKQdLZCk_0gHY[Ȳˮ%`ރqc 3S_ᒱ5JL&*9&adˀV2yФF~ΜpFLޛ'6X*XN%7'?wUW:n)6"AI, Hf, _3G/gV8dX6gr=\mɌ`Ž r6qၘlRMRY*Ke^0PvͼA4wϔ#-܂G6Z6k^܉ b'僶tVU?y_;h<Þ6IV+n)̣lm]|Bo{oJ{pH#7EQiEUaıca$:'$̵r6QÐW_&dwd4@!"28NݑjT jPu2zjv璲QqyYā=3wv[~KC\*2vrm3 o@=gu78,[O.8p^wS[?k^y@ͼrU׋~~߻  IDAT]Q>Xzٰ9#`=|4=zrCQoG0C|B0 PwW'Ol9oATdy؋M3i F"sp8|.0@<얠$J!pCx;ǎÞ ܖÍ5Zϣ(A6(`zFkb6 D Sā$)ksUH\oQ_m~";860 !1W&%2,ja~A29'JƤj#{mv=/"3DΫƩ䗾{3VL^>??KOf:ȓ;{Ue_Nx|(6^fg;?X/ٌaYJfd:Ic14C!Y2SX ꔝnKF$JG=t"@VCd3#GCb`vL?^Ծ1j#pO@k;3?X_[@0lkԄ@0U𑮒1FB(L#eέ535u>91!L7^{e/&{}Z55(qk`4L &AdLL@)ւ8bpC7YX83"3VWv9{4g&3{0K#MTuc1u[AU%1Vl\HU1 `#׼dq 8cfbf94@! *IRB %Q%f8% 03Œ`E )Mj (z%NI$I-冯O ;%k~G1K,ƚ7Vd]p=E3bBh۪6.^DBOL1´ɴ~o F e16)Go\79:ϋ"k#]v\`/A%wFG#r|t(;fTUuum~H`PzZUs.Cɏ@=$8d#ASC FIP7p!Xγͺ]67\yQ6./}+Oyމ]M>;l7x2e9籯zu?}Yw8zݿf:fݻ|gB>S_t+?E>O8|χ:[W۞~^/ϊC^C.=]\|nzի_׏>k2ַgy ^׼j[˕/[8u^z>7#v>2i-#"{:}fn""n h !tN(:eH5fPl`b2i:(cP\$54IIIZLiQ$JIJe[ \PXpRȔT j=@-&ULH"ֈ)5̔swt2b eݢ)bQp G c#DiDU뺩͖䉼ζdb[1$cE0 @B@ -(؉\RQ$EP7gDIDH d!u,0$k1@j4`u %S0CJ +"w˂m5=ǕZS Lj`d9U11,M**ҤTUUUUIDMҺALMOONNLgz~_lo橍&7pԆ[&7ltˆ6lڸa 7:i䭛&l{AJjJ*6&gl6mN[A\hT|ɟ|E_xQNE/lzt)ca~m]o {s>ᇏ嚻?me#ޯ[U~GH%KwA9]?7xʉۧvx] ;?Xw+2rst!׽UtcyG9QG='c'ofn?ѝ|.x߾ǜr-ݰ~?9?q}ݶ??n%S^zR2yK]\fgoõt̽bA֯>>f/鳿qN^tqO{ak_}ٟ޽春嘻 3ӛ~=6 S?-wI-2{G+qJcubXv$ !Ts`0g S: d]E(@ v(#ՠpSyPIq cZ{Valy"(X %7hզ 5w*V8("[u~ 3ijX$*퉫nL&1@ 9?/)nDbFsP2!9Px`QMTU4X3L ӔZ%9OӒHɥASij9Y<0SAݯ7$M".af? xRJC YL&9]ىf5 [ʹhZ@994ĀkL젱B"Ӂ瓷^{aͮ?x{歟?<ƟH<׼g]{qkN s>'?yqiv} rXOy''/=wc߳Iu:O7x׼b=O\w_mxOس#eGǹ7샏=y wJYvmM~q'n{>ǝyշ|Kps"?k_+z-X&iu˃3/Sşg-V{v߽ݮKe,B W&ŠFݠ4M,1?r  Y4*}Tu'm=,{yXY*;8qB# jc *1e(hGp\0 l֙-33Y%R[#eE,XRFF'F`BD&uSM 1Qer.3ZkR"hK.  qbf`W׵f0@]# hU{v@0g=kΆԬ}i,qq;]Űf^pCˮ_O//#wv^=v=|YtK}kFĀiQ}i.کkm"&Nt#odOo[Wɾh>P؍e8D1ƥM8D& !A!'Ц(p`w$ȜL TČI!0) jܤ!)PƯ%@Ƚ)J"fFZLLTā ⱶ0jE+ v\ƟP[\&5qL졸0Q 5R /B 0T4@Sa cj 6KXJ3JfHjA`rm ˪Y$Ss: 1H"BnB9{L`2xM]5@\1 DXSEv!DM)%I!P!%dD!P򞒪 R8}R0iͩǞtGH尼-?}#G ~+Á<ˏtcV[;+s֝IO{7vŧeGǹ\۞t{zZvlms~oS>qV>l7OZ7Tevk:|7-}w]n?tx²/mꟷ':U}[z:|dîmv˰=Tvo) L)L9"&if+!PTD|H586* P D`] i !9KXEɀNGeBdbnGPDUgji*Ij#hU-XX ȝUSjwcŴSZ( 2M#'6`z Nv4R83ӟzRNmMA<\E&eIq!mRJ!E81~Ko2y7>+K~ḱ #0ɪVScp :Z޻˖^as#ބ% 2F` c"Qe )lvaRېq@b'v8{NGX>B3wf[w={=a3ˤ9 wVc"R Oϙ;a0g"h@Ty-HKn)S[7&LS.kKEͦv&fjEjz_")((C܉f.@Znrx@,Cr^nf p4Ox4n;e.+`2mU5'cf0Eơ6˵U͋8]h`Rq u6m PH2m9I35Y"Ch%#c*̵ #*W괃 2&¦DNs00'E$'|o~?|wHW>}->f|?_?-O|-u+GeKrz$ozOv6Y#G{GC7ܮrA>=k |d]|~~s}?v~oݟߟMhqz;Xt 'F S3HHJ00p1QEp-̔4 %4.Sɚ0+]_}jQ'F`Cv, 4H [pjwwN,m{"[ܻZac\]YAuzy&w\'8aF3FwHCW8h'& /}i:*X7#! -mjjrns|eGvwU?>zgo+7ys??}7g{P姾x'G_yֿ_Ͼ?؛~v>'kޏ_ԫ^?,xO}ğzz}[oWv~o{7~r=C a 6i qy]Z&֒*^_}<s/З\adnө,` IDATEM4USU1 4=xA˔ u pr<01m)_%vt~3卹& ȻD0j\'1%3s U\IӹnثdNjhL]TrڌNUFc4 PCgh}wa>n^]6fE8 z_̷mcFYMvDLc=mz0bHERۄby\aa>,=娇0fEnbj%"\_W~9s|/Oxԟ}Gv?_=볞~Glww~W}'{{^/z>R||[{~k^?KП?-ݯ}4+((YDDZonͭm:cEH28ondh`B3}l:T- `ZLCX:׾4m+D`[Ācl8(^(~2y-ZuÕ @yG=i ~۾|m>Eߟ/[^oG}k5翸~ɟσӾ쁯w}ʏy__sYp>Oܗ7?]}z^_k⫿Or<{q㿦I=Y9/}u_!>UW̧t{үݹޓ2pFjב9qq.(mqXqX1V% pܐ^SYt.;s9AO '9/FA@->hsj^AMj @+L+bc饑 Hd& aBXh*sգ9gI@ "ɕ06l,K6E5@ 샜9zzZ]0a KăT-EƗ{u[Kk֙s6w.ݹ{nAdah]0H 8:2aYЄz&]ky38|"nJL|d>ƶ5-}ucF,Xm:=k_m1 BqQ"1Nݟy _7G7ܛ>?~'?w~u񛾙9YLƶmu; ~~7K?ݲ,˲ޚHy/~_?㕯"o74W5~󟹁O:U I];;Xʨ X6h 8R XG$Jp',  BX:"j`X jѕи׶\G^fRC f`sx .Dq/pD0s5, #l#[-65 sӉ |y{+6`CB{1\,ꀡ( HĴB9yno+Xr$ 8Z+G~苨ź0i7q=tĦ4H:X2%kH6Gc^Z;yqG{/1 lZDLJtҹ F?q/'{l]o/>QѠn=Q_?}0qM2K|huzgvq//ܙ)IK4TG7`Be)@cbc,wɎ(t<m6YN_5N~c=6pcnwn\vm݇Ѻ\vNԅ)8=̈Aap&&!mÈ&flX 5zWǶYZ0Xfbq\dhS{39|vo5UĆXUIキh&`׽u??x//yxoV4㹹d!cj#"܌6`蒔 bf%p ԓ"p%Q3%V P$40hA  ڈrL׌*O!EQWhr+c8(48 a(nV^_kljzbXS4^JFQV6AQC)`%h:qjGrk1ՔY%!{g°8˱;X2ҤBBV;k D.MZQ38/K*Vc\P6!T .5J:8Z}R24Cb{ XLy~Lj0[K3 y7<5QBY,1IyJ_ze;?!2Sz pM,I=ȵ{Gs$&spvDc<ۥHCGleb[y-sꀓl=UkGusU 1ex.%192'P)ͨ~,ru0\ꪑi 1=XDކ/qy|/yRv%aun] NUUI< @ɣ;+J4Gө_{5[eNHҌDIOg9ɴmLYhҸ tXEŚ $W LZ^ƽ)hFxwx&a#L3Oj"Bۦۦ"<2o+"$5t`!xL1܇[IiE U.M@%@@AM &%r`ϣ\9|H[A#x`S ō}"p@ ۆDי9: FV|sN{[2&[ffU3z_֠uU3w=g\O=mqgq8m z#Ř8nxmy81Q#dPz*G fBmt@ piϙh撢 S,$c$0y F`}Y΀NEܘV.D'Mk[񣊡θ9o.Iu>EMά,2S(@֖P(fBXF0啦F࣑6C^hnX蝜>d`p`߱Xly6ZpqI<ڼ,Y:`eMX-xvNq6и 򟔖!RFe&eӡςkY<))?:׹[-I 3ܽ6B>x5L?ڄy.5eRgB;∤cpy@~eQٱrb,7S#0^Gm_Gƹu[}'~yd:!cP!hR>:Jw.L 2S FsW?Gm  dsSS3tJDs 2S$ӏgJ|^O9&fbH`8* 'l236̀U6X"IqbQ?߼j9aK)I 萄2Χ'}z!ӃTEhN]/P9[grZSq/PDS(O19QDQΛdڂj z 8NymQ|mG3Fn4鰺dsLus=ẺUl4&lu, E<CtU8.(! ڮ>[F)B)=*aa(A 790P_K,5NADVA( pJEc3#<'"%,"3ncL9z#V{zN).sRp.88Nk/mosc5ƽ0ysykN"jm۶&:D,I#1n١lK_;U$3ubGb8I#DP W n28a>cl#"HD!C7WC뽷~PD*U8d<]E-̣=w䑊$`jnjwކmd S/kϟ:׹IlABfԽOԧ~"@9̱Nmj1h4u"ĥXI_FA,Lu+#&UtJODIʝ"&pDR1J > &/]IHcf&aAڌVG* !S C16ٯH.!kc(VEE^2ox2b0Man$s!exB~eBB boBYM'!Iq")qKR<% VB<8֦H^1O^|ha^yae 8N,cjIbpe'йus=zC`~,8045gh"0GI1 S߬V@ťajRuXѹEDzw, 7Yznn̐.am&Y9(n"Tj fsE*W e$4Bu;ꭁ="T = ՝wqI-q$5BH3mMqu|7׬s ~*m|~K>X9Vr, /VȘhNm̰QA6 1AP{znXP1tBPo 's@(K/譺vrۺ0P nP@W'q@14i m C'H;E bB4,>B8 $1-34dURyaHd=8usq'qwAeq7MOXٟ4`D3s`p|i$ pQ6RjG&nm1:!fj[iDLu &Zbv0B)4^ Q* &($h(ͷzNeD SS;wxz e4VZ]IMt4SYPr8*{ٵGnw ͷݷ>y˃޼yci 3S3DB 3%pjတHw5SUUwgin8=lC$#T1tciLD:F83ݸI]曩z8Vv]hYb/ 1E,yzaU3w9&Ɔ: 3w|8Lgus=E]=$SH ,V0 CUkϘ}HN2wIs3y\jAeP1.ax^{i}!w 2>nƨyH#N-Bmp I9kPc( &`J隷YJ' 7K;3hkM(:EyK:_7R*\4/GrOҒ#ϏP *MZZkI U0mH5t:DL Zx{.-׌L`[Ǝ.s\zUI|r\^§q k"svJn3Q8un?2w5 .JNt _abQceiKksN { ߤ 1ŷ @m@qnnfN'/b؜Uu߾>0<_3>y4!M#rZ-\ ,Xڲ nLc1̱.,>"LX$,<;5̈W!7@zkv껾k~sfb(BHԈT@ZmZZ@+b,(:KKkfhuZG(ՖТ&L`9<{׵}skRWޜﻟg}{p$B9$Nc8A#FHj64H"v3/rjB:oEfHmaҎ.({#}uQG}ڍi, Qq+ԬW|􍸱H"84`]nݸMr_9Eb"%º4b}Q7ա[0@s[z%=F!bsx18fİlAv"mKwŴ +ـ,;>@a,هErTY\1L e@sshܼȒV-Jf >l0VP(1ר+Tr*GeDkմt@7raZB UɫWv m"EPv#\a:ꨣzeҬ+>k3Z_R!]Iv i$ҊB =?,͉-d9%/? c8#JC)1u4!!b" h w&!݈XZc@`"bƩ+Af[Dn9"pRPs55W%`puŐ8SiǢS ]D&Q~Q|K[Ê9-SD(,' L֋].vU ozӧ0qlAU^կdK$,Kr1Wj轻8}ռ50 5 11s|^Tјif1Fe)GcOcQG2du%rgZ;n$ NDBk(az @f6@! tfz9eh  "yxۍ#|MgzCE\Ĝ%HVu,QU)czjaՄ# #"}Cм}̾eNX$Rc߈S[]#vĆuNwp^J6]H⮙ Dtw 179l]muȖw6F'y2D)q,]V{\pT8P'ԆJ$-N>F,(7F" I!f"El,ј9C"2ub%֌F4H v] -j%j tǎϦ:ꗬ3 @(&B/?qqt[̂te0:?v17x#},Mp>(HE\,<"-|T++2 n#@ XWv\,C4B {ı,y(ߊ]߰7'~UcԒ(!V1lhG#1_EpLibV ƫqFo B;c5u^ kMBU!;@c*$`ۘV-ZeGN$aPbl9  S3o:c{nGuQG2GA8-XtKB+ҜKERyѰDFlc:J IT OeT_T|x8S%SB*N XH6ټOT)F -M'9ZY ZSQ;'Լ0Dl:ĐHJ륾tu<<3?s~cR$"17wS]`j +ɀ-]Bq#sfd&RPLʴ1ܚIoMDp&qD4͸BQ.`s)ZSM\\;ڲ"3nPH0D2~tQG}:N$C!2 δh%k-LPhzӫ!r!I5H]v؛}}}iX:: tM Ќ,udXIh^ 3tIF\ۈhnq",S` A  r%H7,%͌KJ2p f7 ©v39 WudNE7Q;tVv/bp eb5A, `!|P3wP&SK|gO.4V/OՔ#XZHYAYGc&fj5.'t˄P)hfU9Li 'up#bb-)(+Toi(5Gb(:aZXH&z1gjR% DZ_obIN6T,4qa"13G~mKcOohNl`u\1VS>"LB|^NgVml­,-ser0 adXɉqon 1)Zo,fqޛ02S;1'T6),m07 +O騣(]z>Gӓ22DpQ CȾ&dcЂV;U IDAT ÀY'POhhi4&Sr koS"tF#QMDq>@Twذ ߝ25bX_MZSsL~;5c9=&T"ƐD4Fw@Mc˜0Ř^pԄ$(F;L sK1hXCah:`eep@W /KaZ8^6xJQ`M_oMKqe:ZeF  &+GuQG}|jVy {³(iG:kJ `@6 A5PS!:5DKSKyNS @g%M̉1S! ]ZaNLrv8iAHuΑgxhfXR =ա<( D2?.2&#bVfݓ=}x`AX݅DLp#8ęDb1@| Ok2@݆ifD;ΪCmЉs,XT3wf>}x,|:t]/""C'37"И4U:fN]HkOz%Xweav=ꨣxTqfa"J8@-EFCy8ΡRLuLrۀ7I$yKۓM#U c06 p9#sӠgHK<{hYA4DIҰ}f]Nv(ZT#[&P@ KE@a;lX%#=P g@]25\BNajMdu:pZuXӿVT1(Xt`I.o< imtި$T!19P۴%Huk޳7ʦ[=B*AJCvtъ‰n&VZr⣎:ꨣ^~9!>h!` $q,#-u!w'B[@ <'qޢ*ly {["?q&f8/\) SDipܻ1؝}N]wө5a5sJ[+Ɗ9(];ZCc^5& N0B'fhO6|,]9JN`0G['t Ej_kA9D f T11::gu&E p9;ᓽLnjsֺpg>T"A`̘]LY[k.afN=5G7(Arʣ:O⺻}>>|y|{_~m D^vOǿ:A7yOANd$2MEl' ',0hbL![-ʃVH`&f0DWŠo0߅rd i}'qő߶XSM` )*zf7EzhwQsJBQEk:YZòpc,@0;($-!eT޲]`i~&s:a 7~y8*9jY9*E* 6~ZX+LA0 1bfqd`MbQGuQhzgwEiu6c5CCÜRH*ȝAL:qR!f"3nhB)ѕ3 NTcIqaDB=O 7&v\}"WAyBWaii XݝSrٕvkE[TRWu37&| N<@lC:z ܃ Nw",OEIsP>zo$E vq4᥉ ; Jܛȉ[͈*\jf Tc 4iY^0"^cLUma'+46r, MyR@췷"h?8'oC19OOg_2ܫ~Lߒ5#a;d uh0*,o.7M"HTDGzR6B:Hx 74J4P|A <w[Pf!p[ҪUI^*!!WSq1 n&~&r8cL BB ΋TڃkD$AET#!-F`JtLF1L1aSc-#*Gۈ;H%fέsD /R]Jc~ @d b=er?ҙ ]g&x{4@}:WZ!g/_L%5 Fi&XDR\ )~0'2s[4dk Dh KKyfq7M- +%b5afb]9l`sundEZm(F Ɗ5.Ef'R=B5!m9ǘiL궾t oQqid$Atvezi?b;קw,'N-,aFkt:7#ܶ 1܅y9up7e%r175'"+qGnM9_ӧ/~ XNCnf7u"VN]םw%E4a>c̶` 9ffՌz-,jDx-y~}|G_?ȑ[d,Cw6ݴhI8&;ˆ+۵tʨH:Ww(-h Apd()[ o61D +ʕI"Z S.87N|vM7t y4O{R+MˆoOK8+IotR3Q+u(4fU5{KAsVA@1s@)m}ezu)ESmD5BaJ1j-Vmsfm?.aROOuQGҺ;hT|2h ʟ6ʪ_Yr&ֈB!ԋy(ׄ]G>ـztL5,}NvV3UUKaH?vRV|X튒|aTK Wf섦XpïhKF<Qts d6,K2DzImΕM Dser,K腅1 3Yz͎FM/a}|̜u覨p<}z9.pO|>/s?8Ա35O9swwi몗K]WKd0}/DmG3_iw;쓿wV|ѻ~o_~gFADww/<olq)۾~|~sqw|uԯDy|>xyxUO7 * nB M#3+u=.%V('Ԁ&mX\W<\>M_-rSh,l[7})'ōEWX$Wծcxz1dTҰs3޻;6{|2Tނ^0s$}jXBIʌ5_+1ZzLmJ~~`pV"Osp0#+a͑]Mt3r-@hגD39hB,j:DkHhИ&ZdSȒk ^GJ&7 ;jxߠ&{B;3KϾQ1Ƙ:gl_f}˪G1E>>V}Sz1|ヷe=gЈN//Bā܁,P6{njaaeYT9p1s,}G>hR{UmL/:`Ƹ=unmɄATm f:@$n<{Bl<ӓ"W*pwG /g5#+=BVxO,OĻ~}_7/?|gakӃ _o{~OGo0xM䇿+>G|W'_-_~QG}KکdT DIO e&Whp> 1c~9[JkZ<)NtEpBHXGf[7:t&<-( CDoU"7@53U(ɗ^0g+6>e S_X tTn^"Mc#n[Ţg`4Ƭ &gFO YِiDtp0|xM4`XZN+$7^sxlz!(i/v\K/*jzhX4rdYް{Ș=l-xCg&i@9zI@k(V"muQG괴֙j~]^^p^gRMo[zQ0uƜzNo?cCuLa6jB`V IV/LծSmdd9_c#[P5HE!?%3!f:w`1ADu&[I *L̼K5cxg~fgZ_.t0}nߕc'`>٭{(U41Tu=lNYK_EX0l1svZ^_x`Y챥k=HNrc}x,)Mo~cYX>\/DtY( ,u"~xx]Ǻs wʮgN g2 %? Mtg,_-ÿ 8_?oUod~]緾O?puԯz RU'V KBsNmyqb@Ct(pwʙjA,?[+|BᧈhRN#JW̉nt%H鶊Y|eCCR!>A;1f:&*F$*=E]p> BAXjْȮ!\UyAU0o 5mI+r*t?=݃(ɯeYysץeMŇPMCPkYz&P]²$˥bi?aƲ` ņj/*։99 M0kkh/QQeD࠸EDǬ5QGuQ/TMNOfP5 T>LJ[pwe$6߰ҲWMCG%CEj3EZP7L6u.u*I_`]fXWkcb]K"XN rsg@u z9G{N*T%$L(ٜ6" zvvtn"!XN{*f&"X 0fus'Q&ltuiX1f?:밙$]1x_ND3 f߽sbuN530%" h\l6qo{>~1'}_֒~ͳ9w/ok_wuQ<Ӎ׫ܱ cv1L: U&X9oI"1pjp.e $9An;!/z CWOhzA -A!ѩ!g{P@F=2mo8;#47Hs_a)͈c*cq6ũftQGuQЉ11F7-We@N}#gn_s^N J-q[ob4#Ny0Khw3= qp>%=䇆th e9ډ ,ux> lS#5Ef cJeTGk 1ˉ; `Ø,&VY']T 0-)WL<0:,P&.סF5\ݣ 4nYXuY*:>'բdlMaGd0Z,s⇴h!0)Zרt qN9C=Y?i\XN7P:B[5$K:g% XQnlyve WS7/&1$ քj$*lšmܦGS!LйYA.e?/cogmRmҳ yf3ev'yUGDDo33/K&HA`RxzD"tc(M 8\E̔怙`[d%L&rnLlK6 u, ċqSlkY[ k-sKB!m9Om__{׻~}O_Ko{YoϿK~[/?{~3~7?~w>?o>>=:Wt}Ot#P<|ޛ>?8qƝl;LTv{MQ IDATɹdٞ5%QRZ+O6 >TC)LE˜dX~ϜV-nbF,a $L bu-sEl6ƺ? -U=9) 聱tvV1 CsB8vff!ò74NI+)0"7&Sqa3!ئTGk^I4VL$O2Og8`Tl53|JYPH0,4芩eN*lsTAiKݬCtLMn 0zQG6)q;ӏ@h]DtRƶ`z$3rEcj GJ7OsJO! 0ZgA=c}AoZsnƖM;M-џ>>4:WpN7p/ykqdZ #M{ds8fatY,h1GJg:WPke@.P7X\a3[RZ!4QD"okB.Xpx ԰p, .G`u>|B*Rd"f60q.YTz -d9`̉5c1dUPx8B ZZϿږ#t=^mG|-L7tfq3hȬٚwtFs4ETe`}ZTX/^rQGukcd|yo\AoEp7hR!f"PYzI/Kw3^$gZj lsGo=-sI, ţun,D̬%'3rSMˉ*fAr./Njt3{8ȅ̘Kyș<nPRӞC5<.& wHWYttPu'3s3uwfv9wppܸb"fjDFdJC-E@dAΩcb#1|s]c+@HU׋K-QGu'g8#<|5>[TC\ǘ4H\f9 8匥7a9KOxTlƣ}8vO qw);@*c"E~Q3o% t`2ƕn8H+N=pD2 * <)Fel7 - {OXH5.jTNFn"hDW)>UJ'BA]^ `$Qf%zMgo At 5zof }mDZ4fR~eCRDy+||uQGiQ_C<>`^)?,['ܝAai[WFPf%|ꭉ ֡~rXa:yY+33zyc9 /3"PO';?`Ӄρ _b9Tuz~nڂX0јb`=Y R&ذ+BhL A0CgLOWȹn%jMG\:sh( "0"{x%ݒkuQϲP{6˭'"@tdݎ13VBts6v>peB+AGo8w&ʾ N'܍b̌Z2ab9 <AOCcSKu5T 'eo[TĨbu@ ?YZw=6i7\: GuQ,su{'ιAfБd /8_л! fc6 ny(&fU%y"\īYA)!piuLEhN\,ypScXE(4fjX'ĜH: 3$|}bh Eo*M;.t֢kYhYz􇡨%wsSss@Dsn8c)uܖYCUqLLa;V.FƎ9$:tjզ|"A*ZvFNwa!js<<\DvZXu9]5C]tF?E1tLEbGٍœP9cP%7h@RM!a4֫uL>J1 ;ꨣ:Qff0r0k<^=q_VT5ZDs9Fm|l-KiLG+ms V"NL& &dvUܖZ8[݇2癉<9dlW5!gt'0C%S t7"jҖ9fIW W H7Hx:@</?\$lP K,"fPa/DZٌ m\PEu`DoנjUN"Υ`T9/f@'h1nĊTm0mF}MfIM_IčÂ$XN108ꨣz05{xkM_Һ>҇T +c\`9V ),INR6" fwYx :{ie~2\ܫw=['C%'<(DlJ6VkTҨwqoS[וhur7M1S9aDHLDmY|NgS`[89JDUw!b37s3N:M-a:=%n^^drbX|08vq#(zGӼ6ƌYfi큜a1FSc6I!b{"9McwsṳA^ fBKZ31wnKkڝEA,D|>;3nfU39Xā&aX]M}Za&<Ռ0cքSxIU9`M591uiK@[cjۘ)5S#}b)8"9]a雍 "p3'>˄]ns+3ԘcC&04Xob}XuQG/ernM L/v(,K).8і$!B\Lƚ20l#4*35d3 21f/70URGjMP6[v*$^tvtɾāF$Y LNdN.h]W|^.SObJ ȼd e- it|YԂIDD:ܖ"@*?WDU#a׵5ffb/:zYpi;- sNu'ayiU7i⠔-3_\~̛3FGTQEC>8>:O v =;u(aAb~PT;7ܝIiGAX5\DHPH(@Dps1a;b?TM4D@Nc S'6 ['P ]L##n:& Ts5]c bV@Z"0gP&@ESm ~:j6gj7$ uɌpmloEwk|{T|2}6`Nnֹݎ%#19DBot̏tmC1pmxD1rY[zԳ*qr3) -DDOM_^z׻!Udb r 3"A>&H` /vMR1(ɭr/jaV\ՔxD+1nN IDPDI(vDo? jxnR vlPOr͂p6"p&( aQ̤b79D$"=#D! YW߻t5G:{f cxv}'Ȯ$"h&Ow]ຍMz;j-@ h+'Qɵ$*>>0 \.C7dQw~(QyF Z@Od%h\ A!D|=~ϯH+6 ::+[M[?I='t Yjct+,ߐmH+ D`> ݝ/w]zT_s|e" ŨXG$3QRIdFe`=EtbH5"3HD0sj-+0FӲIt\ :8 `\2o8&,P""zff"U>ZB8H{QA"w# A80y)8:TT"@,̲~>Nw{YJ3㹄 Ʉc**#1k ~SUn0P  V}fT02I&(jt expj@ rOBݐ4$C|;-R0, 91fX%* ]ũwȄ#"bo#"$i##BM*NXB2̑,DQ(P(3{_ 2.7p%`""61zfDzމt3a{gTe,‘p\-mDĶH2e8YJ/R#:!Μw` r /G tZ)y {qGx׻?Kaj[TrfITUBD$"tw <)@u} l,tLIEcJ/\>ۈppz1WD(բ @.v4L%#/&{aץ5Xeme$ E! ưY`jk-0,Ʊw'ۛѓ _lNIU2^VK2K`~$TKF@D"ׄ%"K^s2W+2+DqPX`[y! a+9E%%~_|98l`NcCn7~i x]z׻~m J{Re7⎻2oA㫳uC5(@0)lM,:3Q¢9 $E͈w%$q-`2/u).፻bfCy*Cĩ"R(P 1:aqe%νe_W91eS2so/Fş+f2 +q=M",Dp2<)}G&FTD fT6ZX3xmkek۷`CG's {>OX,HzuYf+Me` ,ɶ24˰<9/(..Zb{3KZ{w]R B Hb2X@LcLI"0s(G2"F(Hc>x@cy +R<d{%0a!ZȬ,/X:d0(Y,Gx\1R9~Wpi5Y`E2,`+H`f a: }vk|m6e0Z@:h]8 o@.#J(/qh/5"5q!.^%hqrƗyeebۥ|z4O_K+j>uLLmOHq:n7|18~C-'~wAoawZd)H!7&51x 84A f}G_kv{_Ak7Cɥ<%2-_D&(fÛDR(wĽSB: wVv(3 1U%)sePU½cfb0kf[x5!zz.R-,sI,*Sz>^ F]DZ762pL1W8}!ZD j[)3^l^oʎW_?)wR& dP@(8H>\XBy({?NBÞN nՀ;~xݙ0RXؐcåx}]Md<|}B؂4 f*\`Bv nH_)= Bgپzhؑrpl!qIP a _e5e$qx&@-*]_)A ZP/kM4<;pe6"0"E3XV۽_M/W䧞_(]1T` 1(ۡ9Rkwq1'qjEO[ն<sw]51 /]m52Q7U>5@])Ř"A[YWKԠRPRլ {fe" pkVTEBYNV&ʵ>GACpa9v:TDnq|e!LL e*V(ZfY+6""(g?Z2S J 6YEXd|W^P$3Dn,|q.{  ڥW1pHĻw {c_e~8 ;۱7Pơ#ӂ r%6-%I"~o/_?GǧrO~!) C,ZD^˟s2bM `ܻI O REIN*Gޞ@2೶pb|q;sis?{{QۍE#&~P-,$DH7C$3 >on<%~q($1rGrH~± zAK+|e/(:<WC=2menS*uBrA:z׻wY ERQUDA(Uq w<0nGm 2`m +#fY7jTibhBK 5tBx@z x&Bcb(D( s-ٷq!`ì;|<'|# aVЃ!WEW\HY9 +%KŸԯBWEJ-m#:ɭay@lo b3h_O,ƈ8qˍRS},T~8;v e8 ^3KJb{Κc~1wZi9lko|EUCDHs?<~[Zi'H|>;}rH<3"<ͷ1<Jc*y,ۑǶ ^:!20oΖ6J&kUPu8L͛o f틣پFw]bgz Wmr;0 )Ę0,Hr`\ _l0L'D5H!4oK4gs Y^р9R2&/u%c{V;>Zu€uǁ@`F|9>p8U~%mШ fg DꩍS 8X\ f@| \AKzOd$MD v >I[uhLPww|s 7A18,D LHrΩ oZ,LPeUȵsoۖOx ݼ]z׻~Un,+BQ# -s6s#ƯZX$\B'3zHpc0&}ΏcΡʬBD*L6k D‚A2+HXힵaSWC {fRlojo‘u01{7F9bƁъ^Tr9";&/`@WK= SjY 򊀱~9D\Q/+t$Th5*GLF%`,64Gc5Κe2P H &hmcQD鏏ǘURLt(3HXB21BZ"`r>6x8דw][_HN@)re^zfT+ ሰ]'Ԇ᷿ <2bKW <P D='!,jĔ "J$7AH"QJdi>HXfiv5HE10[@BdozT9kD)QϼZYQ/I`o  R$Nd#{>_9D Y+0;ZNb<Bⷳ=tM)Ĉ ,rI_JS@I1Z3q+~v+w'w]KkWB% duT\wc~X*D߄__+QV0C @z qo0o_$lk Xɍ{7]R1AJx8"˜M} k}òCIE /YJ`0PP2/3M>Ka[;DJQVʅWv80.a->\U3T)!/:^YZ5f+a$5+hЕD`< : ! omj+̐J|yy hJ~@gE?w˹#MW K~t]-Z_6vDUQz\"O'6-]qת:`8;_j^Q`H;䕪ЏqLAl䶵.1Z}.t8\s0pm" ;< Jwbf҃vXZF^x> ¬V"̻wW8e~ #dE^A5'f3e ߾>ooߏqeR'<3<tXbomvdbt<3^k9 C${y@\͡@KP&s=O]y¬{fZM\*:Oύ PT]D:۰;/92euV5~5K:pȄ!sNbE,m xfCEZ223"k⓪BZ/~Fd4RlZH;T aaf{y2rG8v"c$2iϽν;޸9ŵ{jvQmN`@oaLlV&!zW߾?&wO׿G&PEg]gd7 Hn>rc)&&@ ]Wvw2*+B5y23J`b;?wS;_^ D C F mA6N_vaXq%`lDhCq?64*jn9I"<=Ok P`O$zDV{WpV>+<Q("J-B' dt+gX`( myC~ҧB[,q:[]ލf]2\zz`*l'T1SmJaᎡoyG 33Y:IH*"tj"=v:h`j+!|q xtF,;wK=wI\(]KCF9HϹaV'/?cc܏yO,pc`=La:pK'y /j3^ɚ& ,GJJx-Xcm}Yհf{){i.FRdzAXx.bq82#Ε8׵'(EG?gg#*y 3@L4!cl2TJ@f|~ZA.G5 @FDD92}o_a(.枂EyBŇbx809SݗX0(^-BUqC0&n7Y5o +l =woQ@5G8YqWdɵwɊ1  "ֆ4ws(&P0ajOkab)!Cu.H+ hK[ 2 #Rw IDAT>jAdxEYX[ȡ]0;g]z% xq. !nDz"S"Y9ZQj,Y[:Q9b#=: N9ـȏKMcvĔrr<0q壩05T"LN!2?eW1 (AqLnfvPf)!o @x$) px3Bn GZKCǷx,$w__y׻q#Ia"N⠒gB@IIpJ1&f61s5#BD <>)c;N{W1ocx> ;ԑ^;q{q`(8/Y60{%̐@p!:\{/_&T`F={9a}[}cCu!3=]L?py>qLb"I UȌȌu.,bFc2Ezvfde2NLҩ$`TFdD#IRy+C=`}akpc'=7X@ܴWD+6:cZ1dZ[ka@v/2 r,w]TdoS2ڸ1Ƅje}a$^Ȩ QAK=Qo4Ta̰US 4)"f^rra$s~4 $! ^FBT484"Sq=A{0ψtҡn)#,J3~ z/[kIE϶(n7"q4 oex>aV y3!׎+Ĩt[3$`Bԩ8|C ĘLE`thlZ| , Kb(V<3e+LO{B_}*~3 "3L#Τi:mβ>1AYD_J9D 1oc-ڶw8%m̀ E yZ>z׻Z>"AD!Ię X ۱ kG"1M22|?}= z0x>)~]ܵ#/KpI Z*\qd^i` 8cCORX@"o5+m;mk}__>`s<~ !TNM`U?N~]'q}0 ͼ &|YYso Mď13#ch29v҃2 U0 x}C>;;Ǿ擿weO[w?#^_{)ܨfN__u_w`,r;)w.f86D`CS;=͓_v@, m#06ylty͖D%g"j@m),R/; UP&HB"hYH"#Jy&VKJF"3ʄI@&$⁈H3$LWm2{xSU,MS%.pNޣ!ЛDCTҪG)iD{P,,19L 5 [{gDg=DcLe𺂏%9t9q5C^! ƒ&=6 ҝDu59i/Q 31ׅa5"؃)<"5f("1ɬfy]\!l漭q=zE7'Lh'X fxyx=.O?cd7BdTOͧ@xl8#B2QNq=B;b`W,Pf. @[p&_-8qXB)ya$gn Z< ,!bBkؼj0Qdzn1ޚeAk>)2#e229Tpf)\͚Y,D*]sdDe!@Dnt9񠴌Rb$"USe3ynUɸ +h (7wB ]?z-}uOηO}~.Ϋ>멿+ǿ˞۾{}o~慏yW-/}͍ nZVxS_uo}:{\)\'̡jcJ=U!iz?`! $`Fa3!;"z ACj#P (S.K3q"bo&# D A,P0 '<RB&(pɁ(9r0, q܀f(F~݁\"GKAj3F]2tш!t5aQ,m$c3)'Ֆ5/9}xF ,m\z[ #+0_y0FF*3}it,Ϣm 3I8Sxm1q@3^3)زjv:\Nvkf G+z|vmA+f"|c= a2M8ښ&64أ}VG[%xn;|qh:Ǎz4" ncG? kkkT<Ƶ3a0Cjr5F"&wh0!NJLB fF XP]m'Š P!7&fI[TsK  qDzd^ =xhH h,#(mSgUnjg$ )#'HʖAQyiFm/+ݒ7y%)_}yϽNe{?-=>|_>龟/ſw۽~e_{_S_ܾO{=/SeymoOٔͧ}ٳͯ¨7=ÛGN_{Vw~<y+\_ǯW6~ O]v~S??o7MC=g>Ӈ}ۻoc\7g<غ4T,/ ^Śkc3a1O'LS\hwsnѩ Β0%Оh0 ^U-wmdK̛i:)í-;W-ytBp0;J"3f;r0QIȌM&cd`N$̂Wt<]7kr<`sfsnb.j38%d` `3ŮbI}l$9w~s"apb0hE]p?mbC J1"gsH`J PQsᄫpqx2aUW>ҝD^s8q0kC>;_{pCB]Q;TJPA .2bkdU)B\7]4lqthۥ_"pv8iU;~q ;7pqKb_^Q{#ñb{a=@ ,m7 صse=!HA.( 4,H9c*jP_9dnlAH@xl5u4N A;u0M0l^P3:u<(yabsȲ.q%#%SQ&e>*l6ԆZh,-kbiݵ^ O{|³1Χ|^?{cަH_sUPzP;+R on,ꣿA˭_oq9c^>W}ptz^ywGwG}+sM?=Owx?Gg}}W>7esD{xڷ?'=qso ʔ+HTB I=3h$E%k#$Ǥ30gD9zCۙfL(SÓ!P uFB"n=3,2'f<\-REh2Oڴz%FCp⃜//Ch0ffDfL,,LHC_UsI[a1!sBDIdI EH&s׶;YtC(S*<-55 |ލ<;5g;!%N#ܓ9,Iţk+]A4E2y|D$.(Lj1HӰ9LwI/A|jbe̚ÃeErd \G֬@HFFyߞ!VXz Șîn& [6,6b%7;4G3,-k46^r* l?`c=n I( I}(w2c[Ha#$ rimt IoRa\0MZ]Uj#Gu",B{DU='>K%]2s:xZ5( =9ȄjnAtrv_n54!8À޼Ʒy*%pb!F04]~ PP0Q+5>q_YSd֜#D[3"l6p@ lxuO=wjHIBzqh N!#pY)W_mw[^/}:}-/=g/\#z#)~O>!s=G({؁Ї=GW^2?)/Ƌzcގ^7X.W`[9?/|;jAn)'^rnR(»~;Iw_헽M_ygn ]/rWhGw `*' bUZNDݷykE4d I$g'syCTJN\BM7)fzݶʙ;S%!)ZSfu9S63f'&Pnt|Rdw,z2TY9C]GfDwe G 2Z"`f=RPvב;6Q ,ᣲO)A `HpPp͜SN5_8:pq֬ n8AͺU'RAJ¦aLtN6dPs2 x1/ԘbeHyp]a׆v'  zaj{m/p DkcꞚ1ۥ(cW2ΥK=(ll6Zo2|.Y <4kNMð)c) sq% y4A a\XH/_$(%q0s0 x6ݞ鍤@|H^FӸ7\*]7$L͖߰-[!;JDž=(7Tjڬ61Y$ÝLpWt@+5K #Vc%&5`0E?^g? _Q3 _<.áΗn"]Oo}D7Q=)e)a8`Pb89Ck lf$ D!@/LܦL%|^@SB Ԇ `0m eMb:,¹HIH-.AN#LM81sZ83R5Z+Ln:WZ=Gn;o{_Gox]}{9]᝗3n.㳾O|ڃt?kx=zww<偿_~=> yv<o1o?_|~ȯr;M{|O_/}֛w8nLDxӦ2g IDATZ{:Q%&' # s LA) p)n=-Hr;ܐGtNLPx1;jʂhe \1OZ-9d^DT2 `*$ `&w{m*v A*pmLۆeX~€@'Kgc 4Cbp֐ :m=j(I"ֽEEFTY^8zi ¬$dLQ4YmcY@ckL8.i҈RuʡH=) BN4r5ڄ5*I #iCᣰ/ƃt )CBZXc$"'Ct(pFMw\c33ΘE٭y}'Nt{?%ÚIowy? _=>/iyܳ8ys˞ǿ[9O{?C/_¨oKI}#}-o~cٟvS  }s~|,{񷊛*S22M!4a᪨+ $"LTJ!Kc`*䴙ʔB3snD 4j1.B@!;ɔ z`LО߱4ݓpNX"G#(03 "R*8Q@"N)Gxr S!0:qR# [`kh>YBku 54 Tׄg#b3IP; ' 3=I>qQ Q;sv׃M>< .{׀y*p# ME#-9%0REDnIx+SdbN"ASA h x()0ԯa05sn{'0 Jju4_Ά񇯋Xy«k(UO=cۆeg`0?.c32Δw٪GpB\3(GHB2ĚkNv4cN8.[8-~Htzf.dbXcP5;ikUeAեs^Lۡա"50v9ʄM[mΧ i݂f(ǡtkj*ew8H"aœr"4M4\v.MmU59H)9xWOU흋QEPdձk8YS4s|32z =U/AZH :/ie;NRep:V9ZKƦW_H9yZi8>Yrf>w'TOSmc~z9%JݚcND\} ۿ|/vVTj gT?m{nݵOsXNM+n1nּChp>#2NY5SOhXj EыPc@qp#19f 8BrJL)Y`iUs'bIBN"Y$13`f'{kmyJIv8wTXD$-KKpI wAg_SQe#иx`P]vm8wn}w oW7cۍ+(S QJB$I4_3J""fL$2 sp pY&!",IJ)f@̚ky4njӥ RˡM QKvTaH)S&!"8Ъ 8L=6ZmYj2GPDI96w"J3XSi0VUk萵iO=nH)r$`3`0h')y$ˍ5=&eVKZa>!tlmv #pFΘ7&yJ,D_kQR1z Yy`Yu"LBT t#͙Co/RBJh=н!u@I{_LBl3{T`i! jdȂ, Bu,n@`AB`՞Hv7ԊUA Ib\ߣK R0LT~CJ`&& Fl6yw F/$ H͐VrqR#FNzxH.NŚߺy<3uۘDFdd ]~R"Z訹/rNUꀙ9hNfi%zZ;ScHWQp{{ NnAad,k<6m`" (5")T5UU%p753)\8"Yףxs820xtmYBYCt 1U-m&Ʈ"TC$ҘcM6yN3K,sITm{:tv9&6.$\4-V 5 .r&`-#)U) ~C24&a8Y/IHDDHز a%%Dm{wpuX{J.HlA6@#b+c=Ñ#ͺv"H/nVei"ff D,Z Q )P-pފyT0-ї/=5hHbsʙ#)% i׌h^diID&#a4X3-u8I 4_L'4 l @ JOE9mFiĦbwQh9pu,z[fVeڮ-o ݑ363=_m&K dXs)'MsFJIHF(jNtS&n:{vuT+=><fm'!$eM4:lpx(da=Y't~5iZR"*Lp>1ɲ[Txñ{ A&Dfe%SX"̂"fQGtz8ͽ:eqtrI0mQBIHH`&%023g\17]e+`נɏ01mZZoh4,,9NK^)6t.$fij:5>W&uת :RByĂX |,0%if"&fW23upr'u""<)[233s\tuf2n"h2C$Zf>jb$s, {ޟvh'-:dSOv3q=Ddx`2wE1<@iDFPT]aWsĢT5jÉ$wgEzCipEvnN6|D#ԣҗB؈) YSJi讈kJ 7Ziʚj d Mm[v9ޫ* l,GOAܡ JUtH8@!@JGHHHl'64B%=$\CDEHi a{9{9몒wT֜sFSE|d%%fF)1p.XpU< zvE*sRS^A*VK;m @:TA Ǿw eFʈ¼&ʠݎ9q5!lhNuy7oХֶGpR#CKDHUsG=Drcʽ̃0r0O?FWjZ@NPrDhd Vr锟6~%a Ήhr"Kc h.Tjy? ]+)M^ Imߎp7 5 @[k|[-hrEmIpeQ,+<`SN 󁪠3ҋ nj1ʪh̴5E.[^>UF7|KϷ0VtI ,F" _ȮNW$3nj৹C6'0>ڙI`kZDŽ3[hM;ڠ )g&&`"5 H|2ͷm l _cgq6s)K{k=@~<1ΈITI-tF 3{4pes6[oXLf+lEMaPx`,Lt,Um9ǭsDBX픙 ⿸ǘr@.gBx2M"ou5?yFB!AdL~7mi`pSS7V]cǾ#ݍ A5-(1|cկ֤XOyu!+/ $:\Md8>w6+Ě7 ǜ8nO(DpbpĀ}@0BYT<7ճyڤ(0+N:@WhV81F$)ZHr4iL[ؔTpDjБ9n[ϓ|W3!0`f!PD(("lzi$fk-+23Z˓Gg.y'iBؚceg&8HQ)xbXpT, hw5bmMUi5pVt`fkYw9q8a&\ :ujV`gQ!Nh%MDV$%S!;i0:/GDRb#/:%hP%fA|!4sp["Dp-Zbt6ùw|> jޡYFR_.ex!OJ? 8!1lK=*)SDY׎q1NIM:@ӂ D: s;3 =My$$Ha'Ys*aS!v?LLr.ffVJJ13܈@"6 '7N&*c4)8 'Κ$Uz q*Z]< P_i7DN\$L,{XށO=^0Gma * \Qe|7trEZ~ɝwY*d;,0|Q;2=&uh(Ĥ~MCOV$LJE墿\'=2/ok tߣg[޹ rC(̈1uP@5T‹pegq_ D7쭻qi0}p7`Da0 aFRm_$,L>>a[PmAMAL|Dz:/}ɛO?qܞh0X3ƽXhK-Dc" f,ƴ.WprܞB X>jgak#8>w64\q"f2yo˗>0y!dh 8c`KtGSӱ[d.9spSz?:ʸR9C\HXü>S+ 'sI-be<̎1V)Y7r& n4|ྖs@m J,r%u۴֝EuW(JXVv%"Q[e#\n*΋ lcVɪ'B*JVHГQ:1c*!a!28W1h ‹)5+ MgQ}ɂyIJQŊ/W LbXhD|aMYKї3Rw){|OV\hɚ$Eo` r Bk|˜pC5=?exP.mNy+>hRnL cT? 5 ohʙ7\̶|}+W_4峇@\ bi&mk8P&QJmZ~ *jRBt-bkm3']645[3ko;"汎c^w%xZKAf+ɱb MKQ;j+ƌ<'[B"ePVŻ A%)KK6k/~RTG>ETٙ(:<\Vy1)$^e,kaFkmmX$av\7NUz]]۽3K&SXrox@W˵].v6l'exm\a봀k3x9KE4쳷8nz)î!̊s\0VU/5+7M8Td-\%DvFY`dr? (VlNϚUJ HCJeA-[(r16xpW13d27 ,-ַDVUe*Ē MzIӡj3'Ag,;gOM@Dv2ZJlH(#֐I'e@'e N#"E7B^425A^b)F۪ǚuυ?٢xaU4I|'%y|N`ת@OwTb AH94> WS!q' h~d- 3{5A۲5VZdrU+pXI9'[ړXS'.LMaP0wʦ c Ö̟^w^mrI KI%qh7 GWlT32^ yP<ES@؉_W6wp`\l 3,oe|aY9BAH  6&9́9tcк-d'"X~dx[v~9#BlҮ ܞ?wkZ5YA8`h=U(&]W> aiZ1ocvq:(ہ_|+77w{s0}ڛ7ohL[cvMv1nc Q؇DUX+կ|廾7[W_?s_s? ƭ 1`=ͬUƂHGq-՛̬@ 'MH9a+ytRIkO7P,Ok60)h:M{Tjx`Z(KWǗ",G5""׿XZ~N^/&b'bxE9 WEXH$2ek20+NcLLq1gO<gv9y֊@%R[un8زiOEyXp"b` 7sȾR3u<> szۺ ߏ7ʻUXߡo^[޷K^lcq6gKyJ* zY4QnזNe ivW2tӼQ)dۋzY}QMr_p\fbN~~\B M:I1[`g8WNa?8Gyig^/9zt `ͅ}hIQS%T\%I8%VwFriY"FD|Փ:mH-Kw̳mBeVxy"f/)E|>8ԓˠA aM̄\w6aۯ|KM8nm<MSF; #, i`g^;>28>?A/{_|?:1D7~'~w7--{_7^os}fov?Cw>1+<.W?3nX^Zzu^eu*Ě\nj 9D]mcA 19Ŝ倖0}XA("LbE}%!RUM+{)]i'Q_,@M' B.TV 0ayPx3SPSbbۚW0a [;w9bOZ=)21̐dw9"%!F 3|U(}r[61m{iۺ*KNSL?`/v*a8B/xs3Nj ॎ j[<(R=א5hӁ6m! ",z IDATWa5ux"UJxR緙A&8>Y!U@ҫ6NPH9A~ QY* 0,B:0e m m+pDոNo RW +]/ȓtN ahZ0B:#izZ˒.67$LT Y4/MDEga' qiB<6d&VYOJ$)íd/MBjtԡD:T$ӕ3M/I*A/"?3^!PV $1P Jt^5`ZB~@5^ EyvNH:aY M4F䅽)QJ'Loh)J\}`{) s2¦*Z914 @8^3c>^wI>) 䤥Q[a-瀗(:<*Cn茦$Ө6|2vwQု0u?L >f``LOoj6̃}NLр12w3q,cr')(H"yI\ å!N!vh۾+a1_֒?~{9?/??__{8~W?߽{׿OK_/ۧ?9sĘ P*R @T\+5CNr~U,dB/zi~6Duz2 +38OX%YI ԕɪ^R> !,{Λv}+M6"h%Q~|J[}*VZxabVoP[VH.bfiQ8@#V\ֺ$e`ep .Y 8 AI4ES1B\OYʫ2([l@΂bPWZL lގWG9˃S*67 9h7&X ǜ$ V4&KӮh11i%QtdљKz&(}NcjUϷqlUϧ2" NBiuqLM${^p5#@JJS2 Bv9J"$;H_YqҔN|KP4.XHk+ЮqXK= ,w4]8rRϕ3֖[I=v4z8qRʸn+Ĺ%zߴ׌nXVcLb+ĄB*af1[Z;PIUVx($ `-Ch2w}d;`s tFk`!a%” 0Z~?Y$yiA&m*©XuVi+qO]9泻=#\|PVy;k`- wnV-w\6h6mH 1%sߋ'?F)#y3 Z#0i%NAzXg~Ƭ@'IsrΜd)k sWEv?F{E*$U/}Cʌ$ed>e"{*V ҅td.{OY CCI@JBړߎ|J]R̄+6=}gqI\d;R&>{ ` 04. OOA;ṱm[w&$-lQ\hX@u`LA;EF*UE*@5兓t ͤ\^I/ѧkIZA*TLQ2\v"&BW4 fsBqizLX@`YgFR=>,T!ʉnH-9sbhqsA2"c8!^y3x6q5Ⲧ2]=_x 8BӘq?|E56\'TUnGr|3N>3# bQr$y[ing5`3aX5)>sH0 V3J]Чs/D1  ڱ/-ǑvbQ| LazönjÂ&1G@Y2X ]>O>i=?===ޟ>"Oa NmሂS *`Drulpxx e\w+26U@,+|tBbw'8nME7&yX6h2žu'(%\|GZA35žUy8 5Ɓu ^KbkrXX[36ڧ lpq1pc 8Xgcm׺٣tUӧi=/K}rZkc}x~oywͭ030CXʴ+ |A]i'tN\_N , {'0cYڭ!^9y7@XWyV,kI|ycOn͹W(~]Hun=sp6Ffemiᚵgrk]mKÓ+o}d۾]}i%?;hڲշf:g_/i8pwPD\w*f=԰Ci]of{o}֟=w-u)J.E߾zm]U6BGf{0U0]^%Lu1|u.'imREq˖їO`j){7ٳ7ono/ <[W\?W? ?}}Χַ<~?x//M홸Hýa!bfwcBaQ0sU*_h)‰n#{wpAk EEJaQ/7n34xg/v 󆹮A~lE87fb}xxQ[%x~+o+"f}^A`3{6gfIk 1qAY d >o S{7 '"W#pe G#O"At[D!#fKͮ&c8}P+j]zjuI\9 K-M7''Yϟ(@[q:tVK(/GVj2Z1H? DZ)2#@ A&dRuӭ+}9!pŦtb/7Ё}o Saasv ;b&1cYL zLg; C1ƴBcl@6I({|B<"6&hu&?z;i8r*(D" 6c&u)C h*qhVu>q;|®G,='DAh9٦u8vAz^g}M"GjM"BXsطrk1UƎږH(Gd)&;Gzcw$)̆+je|8nEDHZhnhAj-4;U(c̫[d;pL(rNYuQhVlaF& ݦ%D각#P §A~@}Yvt S|6ȂxԂD71|.hACCf94PCzt8BfhHO*N)d̪m,|{XBDA7kqҤq[0eu]KDށ`ilcjaJfe#,QS8EmEΤÉZJMͺ^/?EC}?=>?_%_??+W?7Ӂ}ɿ _o}g??e? N aas 3".L`& vE ƶi0Ʋku62 cx!dG}ivq#lfs#8-R'l>[9gwޗiN|8a ;XiO˩RXRnHמZ1 +VYdUkLpw7 ^T!*ND"LE""݆FP=͏8D:r`]P2GWOe:"wݮ#g0|eAѻ`lNs)3'QJaAonyYZ0&D 1wT)ĴU--,RüD~@ņ&0#@YЙc.d X4Ng||gzr()2?ϸ>Ol\c: GI񕏌l̲\L8pG3,u&nFA(f[A`Y }IJ,';LJ"x@ 6/_) T#pFѱ< qHî{l03̼$%PiKoI!wN.=ijXBȸe}ض L>#Y03m- M #*3*BDFgx44pE1l 0 V\[ IDAT3UAy6zwٹTX+Ϋ nW0Z!u ١ PHl-ڥLyT8|hNDxw@)> pPETx*47$DӘM:o6uH~j`~5C~dPXY+ @EBΚ&WshǢSQRJ!FQ+Q+*W`0 #s:=m8) &vD`'㑐cNmi-}W<9Lһ!pi\ 1Zbʐ/^|w\]?\g23}<ֶ\gw 1lT+mϟ?M8F^KÓۺm^ iRn+3-5j%:JLcپgrHV` 8-+>"ccy0[`\h*/o|'~?f\P]%c~?W~oOY?ԟ_?M_÷|) Tߏ+j<J$)WxDHGޜمkc+L&koVPt{C*c><Ji܈.NC:fYN~֖V/^ ,YOϕ[ԉ0˘ *SYZYU+*H5#\-)!fiK:Υ)1;cjC"tXN=Z@96,7&.Vêma 7!`DmDLFR*4H7@pAD)EDDhvOpnC=b'P)!b暭ȲS*T K*R lהQ*J RŃj)EUUZL'}eH'rl6B1WE떶J,ca <g#11N$K9fk2XBRZ2=2q|ǷP|) ŚC;31MȰHyj9wVz8S'qN]6gXT!N (Ԁ9 4ofaJu#ڔM&/ZڲU=`T<-s\4%gejRejU6n>#@ap#GSJdƣZ YI#RT_Hu1M*tEYd4|>翏*aD %dՈXͳ(7yo-h#LTqPG-i6OKn,f&hfbeVf[JF ~ny"F 6(]9@\hAM`lLRO->%8<ð)˯5`Iu}7tY.ḙEF)qN"/K-N<VµP,+3 ~ї_;~o}7|P?x&\Cf@L\[3ZZ\U# >#o&P R WIMq'7Y> %#(p8jQF`ԑ=!`&R@5lNېGnb>2riXi yy M<7] >,; )I(`]S(,f9h0J6MI!c)2G;\go m^M4?Kԉ c.(Bᑄj2sLܘiBA=.r7g<gbsј쌈uT,сD͌R|:liQ]( 6v1$\_p^.E2HR=BS< " R!k,3ܮ"CƐSCb+r0'^rS_rZtU0.3l5nHJR 1=WRo$~wŮX cMO$sLAnxvP FFLD yU}tꥱ+PO|xQ5TRTOl~Ԋ'OqsS[BV {xK+m>tnׇk9H{G''77tW!\P\xv 0KIj}e2Ye^{k.дŔ6pQȏ|z)v^ nn|{juַp9Uf"ҭ7{t"5FvDaR1w>Zf7FyHO_F aX.VJY$y/D.́nZ%PS fj~^k5µYKB`V r) mxy|!p|O_7y{sC?CIϟ߽c?}>_1;7_y{+wmM}ɿ|oݿ+??~kO;}uI]AMz4*--ݩq1;\Sdnw^.6x``F\d  @0e(u :G2?*B0Chl+8&1-5"ffAH8kI<""$0U!%fRhd&"o(DDRvl  f)) D)2=p '"{xZQKF,%73Q.Ec3@q["TZe߷MeީX& P (F, c;k0s̒L*F"hot"PN;vA%ya~,f[{ͷaHv=1d1flz=ҋ+0Hˋ[qO YZaK1"2?72oaxwM2k?~Gt.]S4 0z8b Os \ `bjnf;( v͟עwO OxֲRx9lԦRD "AtV:q=òUfJ-0{&&aY< R 7 f()- nFR,33[C4A:S8Aq0SS3LJVZ"3e%bX` i6"1Fu=jNsR%Fz Fg m nnHGh 1U/ɧlMR`̺ఇs 'ND(Z1Xɭ,49uᱥj`B%oԪNHw9(aSҸۜd),3/Mn ;#7LDYNk[[*uӛRqDm9CZЊdQޯLJk#m^L3Ɉ}h+iLdۙ )0E0\?_Ap`Ltu^G T!qЁ, 4qnSXƭi)eir1z8ZNE . #b0Zwo=ޱ]! _?AtN16tnҖ07B60z4n&:$5:HD"_ %1Vv>N4ںz*7K95aRR˶mo.$uЇ(q`<\tz{#xk^;h~>b>t PV 16qa&!3[׊Qݢ{"̋<^/_`~?gM_k[ػ?wwwz׻篽@o؏mm/+~u?7[~ju%³9,^ !q3ƂVd]Wf`fAH+}L!@Zo]nu.snӨ>Ge '0:7ܹAM]R,d#asnvpMiA5o Q:٧ dۨ P 0W5w0RJzL=" u GJ@ˆE(1 b lAՆZKZ{3S~w59ޒ"DP1+*a"YNEs[EJ)E0G#P}O';u)1e[J+u- m1F3gTq5BV^1|@FǜԆ@LrI#X1 &Uȏee(eтP G]砥ICVB>vSe:Wf;1ɝi&SmY:G/N+~>H \u^0Ggыpž j9z(| xF&З!67'gxL[ɻ K:92 $P̦L`!VHx 8bA@V :;@(E\UBEǰ G37t{ \7\Lk9M'Ǔygul㈓VTnn:!xjI^If2LE"g3niD"G4Ewc*ϴT0{,]X: yr{Zu޼}v[G>&1'q0J+ܡ jQ<u!" ѡn?HvE)TMEɫ秷|]U#B ARd=s5 3h*78E~\i)) r8ic ^ 5zƓ3NgnK!PSaUWdl'^jS/Hq0.g=ˊ&"+9WKK f&h4]1g2 ͣt8ഔ'*L[kpVU(RZD8Lwwmûuk8 "zwcJ6JW_7˹iYG7kx楏|mz_*8_oyUP릵ܞm}@ t6aZ;$~psɥKQh]OΧ NPXs |h9ϰ_Otw\NϞA"=}5 EgN#C4c!' v0p60P@~o^}fvwa0znyP1q 0qcV>o:K߯.R">JP[I Y܅%Exy| [?_]z|? ~/e4+[?};{#<) (FD '`6fH.sW/Zk]* XgEsk|87F.Pw{nmYc, XL݆c۰A4ZKEZZpw nf>:p>󲞖D,Zt=D%Q*Cu@ " Xt V*Nj1 ~:k2[,O f6aX+ #L,ecji,=L?|¿0 }GkV5 'Gp C)t4`߁.X|겱m!C r&%@C͂9iԙOb64unSi1Lzl`%fQeRmxE|&1s@aZuwwg‘x3[bk|@/w= ؆XZk6Tΰө0v| qKmr͙yEj3I@Á1}6rtXy[ƊܴgmvR:/by:u=p8=0, Cኞ#w't^ǶϺYDZݦ"{+juGV/ p:F t&*Hi`;NeVf0,-70mUD`YWa?c! &3Xp|n0{ak-RRm(j-1., 0 |p b-RKۘ)v$ܜ(o{SY׵yD!7 wUV۲(tG7}&^Vm8j+#(ye?Y)hm^XkXY0;!j+zS[*O[*>}K]!S[9K) *ž۷m5pwCc7}p{*mm`tÓ[ZUHkna_}? ԔW_{kUmx~>)R!!B$¥ {]HMM.B-ìU& ضa#{ ʓ ƛ>k {vg PSಃ TᎭ:S1i3nI0`"pt W 7Z*^{OVn9 B [*z.&ηƛض cD)t~TmcQ)*(f,ut%+bf!=T n/#*/_};( IDATy|s{?ڏ^Go?'w_w_տ3>?uTmWKz#Ҷ("4>b_-a{4Qxxli7`1Ɣԇ;f?h rRa0GlvYPAX7{DX, -3am-`m,ﻻnt!" P&"V[94q0n1YIfR=|͏G Tt-$фT-<̳e#'8f&""l6c>%ݔJ"A0w"R4FO 3#HJ{tLh ܉X@"bR5fJa`Oo%@і&EA1n[/|ozI1 }ԂKc!Y*+94  1"~$Qcv%Mx6مvT/R*Y/G/)3Zᾧwh\XR\4tLy/0@ώlv1B 0L#ȧd,8ckòtrhR`"i,O@E/## Q*j]LwQ1s 9z[aG8,e]o,>ER$mx& 0$rcjl*PBjXдB2+x'4 [WBJ8U0 ^o 0{F'P&upʚ) &ۏBG6,1yŁeICd*_8\%H+(̜P+xsݳ׫ q 6dCcNUx߇:A Stc-ǩ2 \'9`\T[e!ip!B!ԊD̴,Çy j 7 (c R4);T'ah$SDCO{T*ITZiY3.`R˺.me>+3 M)NXog_yAi])X v"KE[fjİ!=bLN*\煥5 :[xS<=ݞO[9s,K(]][VMjs-2 # Du)"!R f)B?t߰_aonr?Uede* "nw?5]cvlۧʹwfScPA!pw+f0^&OҁE27dzͦL\xv>Y,:dJ,Z.h) S+\ ֢-uYœE伮1:k)QIH 2Z! & GXoM># +FDDkY qbxA wO[t?fbmL4"b37/yI&"}Ub|:iٺ}{UpH\a`ܠl}k:$n#XSA ?_~#C!v9U;6nrLpSUYZ*[Y=,X}4au͢,p̓TUgGەs3>uIƅR^*Xi Ysaߋ}3xk>uc$ `E@V߰*(x[]TEo.Vm-!&2C"#0!DADH%Z9FsD8Q!,uO%m6uމ XD7}ӽ S &"R(H&McM83dEcRf<  L}im6.LJ>?1=nus@LHQժkɬn+ v m̿#]w;ksD0>l:Q ,"rszxa>jk_¡L\5إO8e{vV:`k_1 XcE&3-7E6DjVc]$Vw32  /^*o!6g\Y. teO&@5bb>6 79kdИ5@bI8u:~'_Nݿ?<1縆ސWo2_N{98f> 6%dĜa3$hVkuK$sGYyr yw||Uϊ Vi>j@[(X@\5h)n7 2t˶ 0k_@ٻ0d2goUݢ+x2-FLw tCzDج<,\'"B,1mW2D{ !3DIL 2Q63E(` #2=2Q(9}+v(j$R%&EjH,1g̥s5kO*ZHD"yipbpY[fXTE{g`$~(J"<#kKJ k{\܈Q|Vp}T'j#ޟZCGid 5o_X'FX_s**g7US  UZxV^ՃX?KI+V>a6y- L`QUvL仴eL_R1hOfv;nnGWTtI0k bwl*v-bbuw W&n"UR4708ku^ KT(o䘼'@ =ﴂB+T:6ng~ Av2 i}&VOͼn 1urfаp͸7iX7e ]Vp,o3nՀDůn\0:nFLx{`:pO3u)3p@ fRѮ z[. }*UWUv`UUh YB1ט&̈!LL>,\ /\OĬWq% ~uZ-d} 김\dr!il]ط~*J_&# 4/+Q#FrǟY9?1 hp^6h_ǯe[w9Î⣑6??'?{{C|׵H@ݫE`QfUAde"խIkny[֠L2N<_81W_X%s$|_akWhQZBBy 67ɢI2wHV}Mk+@{EWkқ>FRz:2D3 g$܈8t~lYj͟(#fqSW]k5VGj>|2W'] *.Xh_<[RFڥߠǤ̀U[>- 'Z_8?_t.#.4@uK v5F2?trd ? ^M׼ 7R0y!N#(9s_bKE`UOjUUxp>WQ@8MZ5jmkk`NXRUkuduOy\C$Krwf8h "gN9@Qp*)\5\L[Am˄G@wvK m+jHa+8' uInOFoض>*l9w̹iUQQ%8_2,U HC86](b@xc*Α}[E$BS7T wZ۳ֹ25vQMc[PjbXNm}ٚeahKӈH! iNۑƒ)8UT@6gx\@MX6H&pD׹,0s@8,WSR 0j6K" Ӻm;r=hj<p"9?@)o:0@fHMisk&X2bZk\/|4V"B!6Q~qIb;yYMDdI&ޛB8{#_-a nB6ȣnh 6@,@Kk1py}!=e B0M,umޒ$xTm ؝TrGXl{'pkȎKЧr:*yGPz;$2enaf[&]x״sǜ9("nj?cN-BUm,ϵ&b>Fڟ~)_ǯn/zz2ͪ ۤC <簄lU98<6,YBFL_$$gXݖs]r[%v]6@Iy"o_meX=exm5Ti%02VOhCk 3;6s,+sa3#GqBIec9g^U-a #AW, iˑDM%;@,h ȉB4baZ$"RDs\nv*s"jeIPX&jQr$sI$n wk<|al Y )OMF"M7!AM9X!mvL"ߜQîh `BB&*cYWQKV Bӏ`^%JʢK|zVy-b$ cD?7Zqܪ+| /gx( bm @7"dѭNo*5 9I)Z_Ssku-v:2lZftK㴥,Gz_ŋ yaS  1cw`Z 0OC+`P+eV!CFuəAy]+JnLJm :c݄2Dԫee}cۺ3Ѿws*Q|rJD8z ZLH>c! à1}): Gu(WOP:kib_"UL%`.3![zb#IޠT̈́TIUu6n#Ƽ4^-B"cDsdzSa33È)g}v^vh_m":l1DWfbjq/Y>a l|>O'X-k n9 MP@hQ7W&qE§puFP>:EV&m9y3W" n,4)Ѷa?ǿjClÜI~:/;縮[ۄ[&Ӿixor~qb1am#A [;nK]e*x wǶ7֭@We&O(;)2e2c8SA`ڿGYÃ=<ckJ1$jN)&ue "]3LPdkS~̘'̠ >~cwhZᲅ-;^@aۑq/+n/k۸mқ903n IyE)My9`w"}. ^SZn}z9볋 -CQ]+ s BzdD8}ֺh+G½t =ëTZF9hiksN{@cG}#njs"@$}`iD˛fBU%d9w*,2R9,BL$ 6֎TD#b6=uy⺖,ɫeq,dffɄ d51rac-0m"$ )>h$XZ]gqs+_4;|b㳲 孨eqoLQK@HYc^[[MȎ};6pii4|2vAMז@͋ L) H{aHExPC5Ŭ 3:c>xX D\+nd)F DӲSl`^ HCu"p]wX@V t4Xlu22:5|wi0@k/ %4 Q Ʊn"rd+ae|\# XFO9 O<՘[ ^;Am[2 YF:-J()2 :_U B-n*<$24֩7RH2 [piQn%H I:<[G$ cѰC;nU;#bm_2DAd H( bv03iPULV.A@ArڈUN\D-ҼnUVsQ-gN Q2r1$ [ 0("V#,Ǥ Um/U IDAT&&m]|G\- H]jl*ȗhcοU&^'Ή(['Sx[ex0͵co_ߑ S~G_pLJ,g1Ǵk uf%M)î뼦tus3'23Z։z}\D NfQ{d}#Ez1n)zemk$:{ oMUEDKf(Kf6$|F*ho.;ݓ#x ǖ–9?OqN$isz2>As yafy+rSȞh LG=q#p nJ@4. B%R@܂@ -גv]sc$bL)3ޟд(0oK]ߙKcGM$O7o{;<3|߾86Ut>xѱگ{ Ce;1%TBD̈ȵaH_Z뻇UMޙYV(+h1c:2b(*yԢ72W 7]2Beǧ^#Q"EM t0KΈ<ƪ F qjAӋr_LFl9/|sOf9pFN!&Uzl>"bp!izK*DR lۦͼ1MsE?әFD$kD-&=ECfXSI&1 DoN"iKDUˑEd2|uaB4b+t͔ !ec4"%20Z/.>eJs,k>Ʒ( yP|i 9ϵ3pCLVbB%y Ǵe%%pc$|a|:Yd4 ċCWMM2AS@OZS$.] Qx6QdU4}]Y|eh_۱cA %vkx¡~@  4,jq&F"'@`LV.Lq!#uP+R[AB;v;F qH"k>hC_sSk ˜~SWOGڭ3Se[-"-GmWЉ}fVԌ:b#'V{1{ME)3çQ}:%NWnF8 7ׯ2G)ce7d={Ca93f6\ hhJ(EI5ޚ*!4Jo gWҋpO>F%M *Es|*cq^U~*^n*#) 8sZ0Džp02)2>Wn|ž7'F3AZ }_ ~y:#yaB:g1C:fxG ǘӬҦAs7<~6z? ~|}c3;3,Ӽ7ݛt q @UDAc=:&hׅ̜?% c%G0@PmjS#IϘ~=? k}Lڴs ܯcNԢC3 dqeimk6qlxꎙ|9"]{C|K! %7x݀^$x.4reYyd)[[zcׇ^V9Uf:35/<8_h ߾[[G^WaDx<3RKёad1=xb:~GoP-+9 Gl'Nz<,ŁUʖ@,o9F"њqP /@Vw+pQ%bUR;. b̴fBC/`Hzfd9"*>U?0?X@3_y^2`YTAz9y椠:ƪ֎`8V*HOkM} ̉>T͈,Lk;M{LR($($δjșKwP]3r0q&E[,GzY31Nʜ s5B:5Q$lNi5UDN7Ow` g^58wajmJ+͢\70ƹ\&b(c`ZosL\޾e(Y%SCf\vȭT"2ݻB/bY⮀!DEƶuиf\pЂ;fe}`lk,nKYoo:yb4Zvbx 8.,l<xi>C[ DFu?V@(,jP`__B#\̳ᛗi+2Ә 2֍1g1'4Q: Qbƪˉe|LLCc<q*")B{&pr&y+_bb 6K+jJrm4T 0,jD/Ҍea^r@*K D țSNeóe#ΔonRvu!_ش&x} 7}uF !p9{[Ih$A ͌x*Uy@>c2󅭁D/}lrHiöw}ب襭$ U$jt`b:!%8G csؘIwWei&hy)޾ls$ypalHΏ9wy5`H 4F&пj̠7Ɨom6yيϬ&!?=OzkǶ ޾~پm]c>/Qf䌸'.&B*C!7 1EضMEd^ccLs2AΰmmG"jdsw?@o/3lu \/_y?ޛ43"3:#"PǾ(_GHRcVN!,I |O(" NTQ*C ix .c: z,҆㱷^yihΕ@4023sZ8-.BkH]#UZUT-LŁw(/rUyX߰ h&JBkh]5qL؉K{ôhJ5I}+Y9-k0SGƯuQwˌ e4FXz 2XR҉Xa~nptϠ1X1LF) 83zgfb^!HH-}*b7UL`Aۥ)!])2nc|V7(vWL>PwtTX$mCSrL1gz mt%1[$2Uժdδ@k Sx&I'q&KFEF2XX"2P5  ,Vki!E˼SW-2"&×kikS! OϘȋH2cEdAmqy3ل]+RlbX73'➘& ܡVcH"IN @-8ִ؁NQCCnA>*|O' VDZ*%h/cX&e2] q1GYֿ583eo)VG,X\խA#p"sM-xh0|Wjz_[Oќ0_2bօDwb,&l`k 4eZ/'V_,n L  l6Y%". [k[uMwL!;#xVLlV`w{q Z\FPRAds]ל*].! .z=2=1gDP"k| Bik`[*d7TQpxC~P{<˗j%IKvdCxژp{<9ҦXoz׵&A\y Q99noݷxlKPcLxJ z㷃"[SQf 8pfL ΄uu1c ,DQ0J7 Eck[x8UZdA 91Zy^OL G?m\]>|ЭaM3H&b5`lڶe`Zt0 Wfut7 fgxn<RdSDUoymIHKw95X#%)kdW%@#?aXM ooDt>2 &BDߟ^ͬXQ{c82UX#j Ie1.z\,?owQ&Vql5|>EH<!8]]]Q˩ El2~L&ЩOE-zk5pX.s,v 1,0/8p9.[mѻxMdbs&J*,kP"Q򶀱X3u) ޹pUA̎.D-  8Co[n$ ۱ibބz([l6kN1ڦX;nJ4 x\-K~8b9`]Y;װfeLJKb]0kw1+ OHR\ 9 4Y߻ \1W@A1`ce "zCP6~5;zV28ϿhP#HE~Pu:#f$\^_cSYLh @zĜhJcW!N&BE0v*o"9ivR"]nɹJu9^aAo\mfp"czUs fOthCy`m׭Gm63("|cL`Hlmp+p?6Kpv0{$kM2pάj3"sc,і@YW^Uׄ~nT2I:ox<~Idૢ$hFx8wU&Ljgp޷L.#>Lwc]v9|"ݷ]/R:hi鑮DE8B|aI WTqPK3?Ƶ\a0SW#izcV:$q.y<` B{6ymOtAp9OzsU(5#azWj{- ֶ)%&pGr&(ckvJ29܄" ihkV`pgަZ|"eЈzK&T5f͈̚ë ̟+䟥Ǜ{xzd*9,Ku8jN_DI"(Vo*]QւZO+&7ɪPZe"c8d2%5XD" Є2O\ G f!p=jb@[6DhD1f0iQ*<1cV⮩ܰim*'!Y% hՂBAGi_sfކվss*cs\%{X[AJnᠵx FJ× / )Vik+.QVeƍ[n`&qģ/cOaAvT?豚c}›`L4L[v@pg PPBߐp\ڤz*ļ-' y`_3X IDATh;ιǩHAй7KTʵ^KItO$z[Dp,޲eI4-=ښjS%psgDRdz01eO 61Ht9RU#EQ 5|co9!!vic̀N{nc秉 tT̐TY&p3(sCd%56|}T32@Is5l{6͟|~_ژ Iڿf+5~;Ǿ7a̮k.{WiD4z뙜xEsf32 u=p7Iy0Ɂ ĨOW5YW晐lk. t=lHnBg@ ntCʞ7y{{b_~8?ʜ09ky_Z_fڶ0$[kL/g" fF$LG.LEd9DEE+j凤;1=YQAy#0/|>qYO5J_Qe D6L}msYY]+:# +z_UjO/vDef)@0k 7˔cx-jD<24򶟃|:"P6"^VSLfab|*Y_h1pMJāM $l N4AkרwBx<!~X&`;q[ӌt$Vd79!&8@tE@3s:Ra̾=lὯ]ۆF 4+Qh*Y|on6?O $. yFi芭5#+|eA|28ͫIwcۡ]e FLTs̏be')Ʀtlmˀ+jO5Ƅ_uk{ߛ?_ϣ{z"D maš7;'cMqPs8ǜ6gxiu:~lqxǡ[7:iȤciۇE8*-ֆIob6JCjRh荎}{lѿfc[d&Kþ}ưdkK@N׉sh;WDdH tLu9DMZZ;|ǷϏ9cd5Ŀ=޾fzaum0Z}ukrlf樔Mo-Ǽ,?!ys=3"Lv]5T*V(s0/5 d ҪY` C뚃2*, "MPZ"D|V ylzHտcrdJՉN=FDcrU)R>ǙwT@ՓRiB2x|1.AdG,O}[el]-$V>",.|LDM$%ȉVv eģPLre f6fxYtENj0ۢ_j$b5X[kǷijmy(`mJ7n4\Wr̥U#w:I 0=uy -RK+I@1۔ c.DnˏPq֕FI|0:J[Y} R * BYLRY_'X+e 5@`40a8 tmWfmGd^וɗttϗ䧂q-Nmi4Z}uAf`CAXv0$qlu QR>8r}o"+qZz`\x  5ŵ9V8,vx?Ct.09lza;m76mmksmKNKvY "~s'k$X$dr;ANVDkPUD,eE|gRxmO;+szqٮ}၄/mGq9R@||_ޯoKWjX4 m2& mˤ1d `lDDr0Ps:&6խ1mN*#cӂy]^YȰ`fĸaMUDGL"\z}^EEthoyILו9(m/.^#AWDZGD2݆2痷DZo6^1^߿=K3d[}ذwܣh,t󙥵krM)ɮ_c@$6} T65̌q0r%nƅܶBq:Pѭ[){Dtei6A⼮o>ݒo`Ʊ|yu*V!8"ĊURg]+E >Iy~?lW=wAUޚa^YGqA'q9*%dҍ3<$p Z c]P*Dr֚hF^s]TT̸9 ٘5*d2RzA)>yk[yp T+P]FnL)zDD{fVU\o 4tޱk ^f6]&׉י@l`FH ֢]\ցDq "^MFDdD@,49a׉qδɼl mo %b߈=KMZo%,)BEEjWhZ׃PuND#OQZsu*n̲"жV5/]_~ 7ʏT^k>1)ƅ1@\༓<j@+6}1@}-7W'<T3G2[F p*͕v!hi= n,@[$xeTz#WҌ`?pTԓ n@hH^j `!&Ԗ$|i tWVNVgb|GI@ +mT/)1T1zɐ>y]>W$DU2r/ް?Vʜ5'Z*I*M0@;BץP@Rif9X׬JMxl3Lh(an3#x,|#-Z'DD"zc LP1bQ d50Rڙ͵ p#X"N >Uk r9 $`ex]@Su^_/۱ ryZh<҅D£22ԴrUD[XHw4 o `@dL蠀 DDc fHvG5?u" Mu߶i{K=(# DIevÛ~5J6P:2-, *LDR(q&gdde!q5;n$Jj+Bs>9E)&D"-`LK9/=c[D4"=33c3B#&fsVy~C>qf6.9=AkȦsZuF2(0XJ@ &(AEHV T Oj´ffQ;ki^rd/ 8J7l%,R[֢].R@Di,W!{5̬yeW2EJO`{%\U?}~_իc}AQf75iZЀ z_S7 VMXEsDz@zF&%[SR|<_pq퍕3Fp>:N}FCP=U`Y2 ftn^T CǖpApTM)AyǴ G H1mgN+\ ś{ syXJЩ-}8LVO\VL`TdVAD9⁜w} J")NUo4p[Rl@Kh=jNY>}_'f,eS}7q^Z>/N|\Uf꒴Qqtsu9R`+ei^_0-_dсLy^Woڄ-'@q>U}D []f$"%66B<>W3̹Tʱtc֕dA Ajp =SpkȶlJYΝH#ܪFޟx޻r[y\JԶsf w7pdf9wFMlz>LfLcj6!b!xDZ眐HJR9_۟3~9oں s\Sr#s k+s4s>6"i|]D554l ½w fiAHtm|^fޛT7])jc8(ڶ¹wmMHM??)[ʤnD@z9M2&O9GJ9s`΢#$@ 1tö13bǘW=F(#`~8/0u6l}cx80S)`ty낊_uQN&ze?8OenBD]Ai 7$!"|N1u*0"ym"PB6wͼџy~LbZJV>DY^Ds&"lNHQH m?fDA@"L \Y&Gₖa&{B$yMx03VMSQ*Sdq  TЄQ󫴡+65lj"fkI"MUrZem#CE32+[p ^waJIs*5TRXNIvb.G7.yz$C3†(ay76br][caaLʈȀp5Dff05L]*+ eS@kϯ9p,oKBHq ΐDk>X,cl`< AFuگ à3&hl0Ƚƪ+fZвlMUX(BV%"QHQ/wJ5B$5 keE'b%x lFȞ0p/5f%SR7̑Gr}K B0/.K(!9MUUڊRE*ת@f]S;V{64e0[EVK0Tq٪{ճ)Ʌm13Xvܖ0'H]S\e4AW0h)S`«aJj{Y `83};86a7TE,iZ# zJ0U?B굕)3 UPd,NCչ> ZBƶ7"uŬ]UT`RޣGGHCW0dq)@+k羉'#ƸfK{50N >AT$TD2:tY,OGFL\8#UweA1@"iU.LV ) ) @XDn#l!. Lpi3˫қB#a}pei6%nK&S"#bU'!d-an|]*x9~!`i(%L*2#5| D,925F{dմ ."N<ωXDEZEAۺ<#5Dx 7彵H[kr]Cc?:GfT֚j3nI mOC)B,`7D$**mNJ"b Ƙ1x.چo8&cYD"0!Ŵڱ23ޔRo: 0899KF^ϧ2q8<&pdbmMdӶ{^fCH9a.H)pND"2”nUX *fmq[ѩ0WfH\+Ҡda2Mua蠪DƢD"ڷ194[Ke:ݧ1g%A"`Hbq"&=} DI U@;V NJ umG*x^Z&bsN @3a6fvE@;lFؒVV4['Ŷ˾o>ge`aD @T3. &)[R誄yn?-ЊK,JeW Zxv|Vi},V.h9h- 4@λ햗uWe ow(AnG;|Jt#383P^D]**Sgnr-Y佊qу򫫂E ^pg+?X2rצ#{ 2Ww=6$pEMF%!cU~OKxwBcX1;b+ZE! T`ǖ# $׻-/@%2 b oZU2L[`$p]&,W0qT =)çq,/\M["˪a6O,O5*) XbDWsiL L/;eh/UiwF͙DfmәPGS4*" $"ІDj[w[Ц&H6GxSJ /KtV+ WZIx8!T% 38g5*{oLJ t+~\6HEx30F܆e}ȰaH,Iw_mo 4s 1,ՂaY))HVpPPhWp"C! Qޥ3j%()>efPߺtɬ j,fʜaKurb!b%:QXL<#2H#38Hdy|ß~6'_ x/o2Bw%DrXN% !aiںB[_5y<v3'DR]I[WP Wn~a X mۉ%I_̣Goy (; 13PeInmk5}=?)2(>ic"}{SB8Is1`a.{[$BtWT2en- ON}{oo{.c'֦Ϣoy^n$!q-p= YRzo[ck3)U2v [f!Vx^ڛvLoF,y].ˑ#|r s:lo?'y~Ck$ozh͌df9FkšHǬD13#sX&-Y{03bkSW]E@̐5o2(LD€p2K#LTXzԙD9hr$LAWner"<ªflm--q,Ɂ@]|#+o2(=ܽnT%AIQQap&h1A+2J D}}ۅe|5ޛ‘B?:1m ͠m`&6㝟W\y,1&6-*D vHCrOF~qc ;-j^ UR+혎ȝwAX-usUbHdBmZePJ*mfjK[Un,EEW(rp#)Drg0]? jb Cwz[C'uErRK06lbq]4F,LE\ƪ'XU{8tt]K[F0x&!LO̙5U`khi[T6l;;3׳~**;ڃyU{y\}1vJ'`/* )2 }3j̤B* !NiؔZS~'QRBr>91 &}5s<'xi\,k&}WiH۷ߧ9Hz%}xtwd[|֫u:VM8BڱGoB~|ùOc2n(zGߩfmz?a l"$zbW dg YY[Zfq\Tɰ'D狉zͦ'Xy|9ݷ|y5??/˗ǾI"czicePi:>pͥ_//Otg_ϷCvo/'yܶfiO|T?޿py`8zsӦeP 6R& p0GDz/_v3b&ifcHlQۮ7[%ɲQ5s8'@ދ7xc@s"T[-"kH^U{-yZћ'gR"92T[keK\vi<#mz&kd(i[ED'",d oNi۟߅#6uO8_(&KToox"F>UUtTPUm[D-u*ZC11vimkcZ$̏8눚 n& ~=,#Ѳow?փH,r6c H֤BocHfizW/nja'D۾gsfa{xq9xkJU՜W zS&k|M1t&2™]Ok\PJ0ceN8Vv{M Aߠ -;j\e.[~V[[ _EZĻz ve\k2\Hjtm+VL˾PFo);/Oku`YӠzxp[+栦hJvi5$uwi FU_ \74%X`?KDRs&Z")r #\;uӊ1`5lwd jbSƄdJfjJOzx0=\zމ_ǜ"Åњ3mt$H9t,;D{338<\DD~ *:D9gfR3iÃ% i1mNGfJT&^+įIn1'Bh07ԖTdi=━ǭr \;}:ܮ}tP toxyuu{Nޱ)ұ% 8r17/Ra0,q,jx LCdCh iA& HǶko>ٵPra#΅e^b]\[Kk]^m  gXCuim@Bk/9⻔ 0CoP>YXE!X^G*ӁIkαcʗײ=u`Ǘ.]^:%]X̀9^/4^[%|o\D:>z0|T 4 %d@ l;n7Ĥ %Uv؁yێLN0C KqHG%Ɯc2 HvŦhNo +];ka'N1_`7$%b2}oo}3LJK"I%yΗQћl Ku{#$!O2oqx3xKBPOod91kA6'2@wqRN~%&owOFټAyIdۚE0'^|7 ,nALbE,& p09|#0cdbE;q䰜3_zވ"1ntctZ'Kα`z>m_˷~l {kn]|&F7CERc,~NCKp?GUɷ["=""#L7vLֹ1K3OrCf1߾y6̘iv>O3m<_:WӐ8/֠"[oou̟??yLw "[w1H3T67d4iӑ*|ߘuYɚM"aF2&VEو{ky?xpGovU`u7lTD aqx"Olu8;qQ>_ 20;q)VQ'B#a\ }kf63[nYÒ -Cq$ŘWAx*(Uu[?6]S4fB)TҺP+&E%FUS?g̹JҢ *ڧZHk ȼFhQ+% n{WU?1F'kVǂ־zqMwg+cg9j)ʫc k ,)%]f0P`\u+w|ɡScB ^V_ 3Ǖ0IH:R꽵߽ q5@D35B;2Vy51 dɷZhz]%CF@"`v0s<Pi9Ubp08_! )Y$I 푟sS&:[ψ1YԨ MO5n;$V~YRvHm@S#CmLKti,=peY|FeĐp1ZVd۶oyƢ#}kq%̆-u:R"J@FÆY51E$9&8,o5WD&% x?"*0޾Q~$z}MwɈ(~oҴvq$4fa9-U .{offd1JOLReP#aq|DDn1#ӉInEU53_s.ͽiDIvQ0<_h [&Ҙ̽U#L~Hԫ]nLzƕOI E0^fv$My ~ @'"ǁ90xϵ!<r k%pV$Tp.[D)>P,v+3^3W/^9:ײUmE̖-j8c^ U;JѶf+6c] xkh؟yj+Kj7eƩ ؐ2c 2^^ќq][i^WiClu@J5Z}8֊fs^O_4FWl(TWL4}>ӿCD`y 9WE~Yx";qxmԊcH :+aWv7nDv+S_kڸ,u.`*HMU4y|7uh+EEK5B<^-!"HZnfD(D|} .}otTE>=vsqF㾷VYǨm|^GnbE0KY#&D4EU%q~; YyM!߰u"`8aavn ,^&sl%sj#$d< w۶q)'qe "B۰6j][2Qx~By@n5i6}ꍪnh7 G$1FM[LB2Ι"1`8"33}G8s땯Zߚ)h D8N CoP <<6]]`֟7|ְK5хz㽫Q{>?Ϗwp7_$N顪c؜$ ,hRB5-G%߱o*B 2eW5JE 2bbn5Ų/JϨ,QY,KVD-RsooR.fg]hM2P Hs(K"zJе`|Q%Xjz1߰30\r@A4#+5&`Xm kH`t &\10NF♠J9W^Ir5pzOg\fђ >Vnh +.( ֢_ 0pN2J񰀟q<*+ :I$Ǽ !UV>Li`Z Җ a5"BX ^hp_*:pb y.畂Y mTZ)xw&~lE& eT[ IDATV| `Jb"yl Vkv+UqU-Ü"X@aa322R[?!Gq9qy`k]V^K?+R@ pVx.nzohu;3@`IUHΈ,ƌN}auFy `zάr'<{:0pkLsشim `l]03^3o }d<ow0;:cPo [6eueQkfPwQep:V<& o} pzK"R@%hHvґĽoxU[M|BH&FydqSqq""[ZD0;L'HκMM e1rͥj2]Iʰiә#x ?ƉMA6WXoҔnx{awZTQ(A szXH2RW %D"HH(DJ6Sss E9{@(ZX43͑Vβ0w`f9aqox>+nvos8lжoH6Npqmo7"X+ʳYD P@&猶j 25NXLމQjZIDAj82yVjm{gY< 4x5EF)<ͼYj+ѩJMstOl7PR3DzW p8" d1*SR`7m"DL"ZL礥g@T9cyGuvs- d~%,EmV%ָUᛑsxR;6D{[ҥ6S"uXn [Y\N훨bFAh*|Ekty _d\zd7 _m2ĜG@JK7^M`X^ik R\uqpHd\؄*V^ ÿqmq0XZMUNgaȦ ͸vtpvsUkP>2H^#qm @HzŠPmĜ XZ?F(v?Y( îg_n0}e}WRmG1 fT`]GזK jk3r@d)n>9&Ui#n0gfS/ ]m #c 7VJjed!pbe0z[G.bbduΈ%]ڡtgJ DJsg B)2/g=~قܗ 0 J-uRI^ |9ψK_zLr]1%d[#p<27"RǽK'R$ل<]e Ef` K_ŋ<31=Zsm^0hm5췽MMv X%hڄLF:9(pQ6Vnnvg֡hIA%+ㆌ,}SiDBLq&suϪcEX3 *pF"AB 'zP$W*y #b:lƜ)ؠ?6#1N;ST RnDΩB #sc,LV̜II$HJ #$'Gԫ,߿~3#Zށp9y4RNFdpWQeDA9׌<"YhڤVb&%ho]<91B r$i tk#1ɘ2*sD>g0Sm}͜ ƜUDEZ߲{'t>9Ji`@xy[{Vc'HnE46hcgJ4M3fuy e™X ɜ8l5 e]yNsjVĄݤ ̯&LUs,f/ޅ'Kos !pK.8c#L,P+TdGf:6EW%R/kS&GpLXZ QU3'HdMMeLsmThOa[\UF1tғhZ[\QI+հKQҿpz" >/>`rxCVض9«g2@ XoW) ^!Ij҇ҕI˕S1Noٶ?dW ID\UJ"̜^x}dfu7ø5e\):'"'شA%Ey"iuIfŎLU010hѽ,˄ETe$)9ε,Ih=LD`x3Cgr'Դu^OǨ/?7" l%jGd )J"neZӅTpm0JҤvfZ*/30$1QHHNX b_aJ`_U-DJ \p>.$+WWoylY;Bs/??|)8 +*LKUJc1ĮY^]?~)pS3Y"VY_Of%\[{bڵo41me G%|U[ֳ%cǒfЅe-S *!!Ր udIoLgIWQEo'.N@x 9mDY@dqAZkk5\ש+ OR@ *;R9\LWj+'dKI$T2dyx,3_e+M[ǭ?:n7Eq Ks[n=Q MjIu{GvRDF]V&?1 <ƸhVN̑4S& D2^G\Q,< e{GXz)|}G !& ^|/OMè9L[DHxd0F d"0y_鍹y7j2aV62 !mx<2iN{'BqXǴJ+m)=1-3-ƈ9V ˿7Oweg޶ou"5Ƭ%<{4=0sr0_ oL`I`ٕSXUckCRa&Ji(eJ҄[)Kzp,DBDiwis4l")6My>,9i\3徰De$xy2A䒃3C0q03)]5e xޭ7Ril ti1#|y:"gdȬzIMZo;:1g)zCmZ$M-&Ja&D J"98M5)1E۴qNG X< ¸5*szy{=yL'44 /Ax~B?rӱo|H|G%,Uyی|)l3=wUXvRMu /FQ8@R) ,Ve뵺 2ш):# ^s 0qqWMj9a*A f-M9e_c|$W@_ wbŮ}z:?&ޫ|ź?vtn׹0_4^ ảHHn~SmyEm^q6^5jWZ-,GcHla5r@71 >0YʔӐq LJgwau~)1~U 3Xzj6w%-$tQdeGj'WMP&TWE&-_ށLb]%V&"BEMn3«_48Kas,{`޶N$Jb9çq_[$Oڕr:qt$I^~!NrV$ aiA,}15$n\I̶(a`j[x<9l1 D{ܻ23v6Q*3[oBI$plyn\^0bx>3bFce<͒*Bj qiqNUfC$s%5eI 7 6 "ĜnsL'J iZfZΏwiixNed,ڷx  `9 R컴6lT袆N,pU/m88%sha 9+"1J`Sl;n5xH8.-j20Z[JU6]KP]&Ў NH,p\ +]+L" `:13@]p&#cI 5Va]*B DA|"y2E,}nm Q|Ojb7?8V2>&{׌ѣu*1Z+I/Lqv`+DGh+Rή@C6Y3.G҈aW +Q^ֱwCb6OK ϗ^ ¯Vqo~5l[J% E?s"r`%H32dFٔEDDMzٜ\ժ qAXUf QSl/KZkɜEÑu(d3HOP|1!8t]ZC:^z Oloox2O;Y$i+FnzaDBX$SJFcp0"(,ĜL`D̙˴,l25[Z[lY֘H sk@pr /30N=gVBDvhKL|([*3SʂK]Q5DWC%9,V[IFzͽ[dAL:`L6'hU]LX$% )LX'̽QT@wBV0L$lʞf{Gk= PʶtNOPc& UAh>_T&|,?)'j،X$P RAo>6j]5'xDطxmc=f`Q#fpE)&&ݖ tbXΩSB㣂sB)3Sggt5D(("*ΌHBY*\,@P2 ;H}Bp,@~㖺>kMcI8Yǚ;wVd1tn4͗u0W[4IlMYN]0ֻ7wf>) fꮺYoiq3h&dVߍj۱ލJ8޴*saY#I0±*ዠs8M:kM7ǒczeЊ RJ"T(3r7㺫()2301vԷǶog04a$n֐x/c6F2fvyYc?lNd{- !J|y!)(c-Z3Y=6 ^ MᙙN"\TD$Dʱogp$m[%s2\$OAHz IDAT2$UW֩wH6R _AIU<1Ɯ 9;H)S! "eTvatbnff$UKEv}c~+l؟_Ӆg1y]6,>?񄍕Un J (ܥːp~z}+=5^‚c߭'~#NGl`u˗pRMT2<2gcnmrV1pN$pVw |B<\(RPx>???}||o_1_DZ\*ʆ/U. 'hNEd+Jey /fQ,>#EālB$,u6-UhGd;m^XQHU+b$rK1|TKIfDzag`."E#nZf[ٮFy+Z+ Z#bRP*kṯ GL)D+&2"ZKf"͆^W8<2I"Ek `RcظX5_{{L.\A13;Io&h+͂lBn}ۗ^Gro\" ;Ex豩*;ՂR>2cx^+ڭ1 8 J@`či6Eu9G- ̽6/Bĝ<R&Yqo(%B"(ZQ2p?%VJtNF*<qT]hme &p" Z=ۚ6|k3H_;/ n}@8Fy37KXfDfTF:[{ $8$0U@iY*Ex #"1t_9Љ*xDy%,- ePlUH(ZL<s "Ylfw%D_ox|j \8g-3ġD,EFD͇, {mE0n[&ۘRT> .tOVI4[3g W0"#{gaP*X` #27 GL}pU|^M~ X% :7W~?]Be+a`yiωpq2rd2XT0m8R&jF'K,2ZDL"^ {R DH OujE$ʢJ&hyf8PpTXEWXeZ-"o4rMZZ jmHX2zq8Pnh-符*̋Jz[SxzDOrj"=]Vwws62Exc{#EDT B-EG>| ="\ˌ9Q;:zAZs 9=VB0["%#X7`fȊ ]Lh7lB\5W.@hyON?<1p'Q:j2DT:hR9u V֗: *uḖ=֒YN€bcfp2\'JŮƥ7q'$=CDwR+|.&Qf h}a*8FX7vrִ~5V?vJIڻ|3ػa?vb6'j\΀F Aphs=5 c{)H_CߵP* dbg7z-B+slʑqeo" %@u!h}y&ʋ  (\4Mgb*>4-4;3ٌô@l;s1#6QUDF?s 8VE2#}d(z5&'ݽo lly} uVq7!͛k:{O   i@rY'3bvˆ|>̏E7X @d^( {-a9fXJM GGD ̢m۳KCO"G1BTv!Jn*s/K?JnWÌ<+Hqt]9OgI_?W\;!+Q Fh_?3YKp>dU )"™+Oӈ%A.trZFH%{X0J sm[ dN%_Wqg.||àO|h}}ŗJ ΙZ`;W)3v1Fe2Vn#½KQ`WX\yE(rGC#r#CaԞ8^KzlK爎p W l[dټqC2Hi# @z<Hj)ZLnңfI!*DLQZ*+Y",3=iݟ=[{ϗh&Y*938xtEeQy{}a3~Z*#S)B,6~mF,nE pE\{>Aa#Gn_VymCgl%l匼T8I!Hb.6L{7^x:q2na*W4M Oj,fUDZd;̴ Zx9~~H$C:B f֭0Dt:#ƍh0XDfHL$jFXdfAsg&WuZT&,s-و;@>.w/0`Ja$̳9>3H0`?CRt# qڼc l9q.v19geЍȝg\uͰ)":1+7SD-xT.xyQ-ejApsdEGO_O\W_E-tk80?Qekl =ȉxmv AڷǰN}3!y]/u#r(zޜ D4(al~"uֱq.8)QaDz C̭(SLI t}{QUYXջy[)Edz}LyJPFp'W%ҢiI ,B5)$%!Q'Da?G`QBDq]m#bzl[x.wS4IkyGaj“1ZG}?=߿)Bj9?ߞϿܟWL&Np Jgf @I؊[$4,RT={@|GٶC}^H==ĬeXyhgM^@Y57lEղaB\ Eҷ+)QZr*Oۿ|? c&a b% 7CJ:> P]c۶Xgv]=ڕs!>xX\E 1EKôg >>>m)N`y؊V&k),"E͑I 92"8AM5(YXwstR @DrRDEGk&sxۈ86;j=j!z쏏%bKO\67`|fb?RFD)*}DRP:cEXu~Lb M0V>Hr Jwdy#BEV\&M,Twq "d ƴ/0$Jnx,+ޙS974H|1^x(6O *OhZ9\ "8pZ}l&Z$!GdƺilD*+=Js7[&vM mb+(o`]f;$1* eJcqUlkmL]׹_@h":n cj籖73 2k uEroo{Z vX_C3 ZUyyȱ1y<\c vX !×͑hHyѕѯNpBgG<.xڄ/1!z3?:w6?_7'3#S6acmCUc2kƸh@,YW0lG@df+C<ӢH(@Dl{Xw1jp!~ \#@1Z׵^v80idyos'D(N$k߫:2w\? 3wEY,N b1j0Zd`Z&C m;DK32"}dDf08f+sC+9%"\t'"$f ED0s8D啐nfc$Ĉ<5^7v}Em Q!fQ"J ̌HeePX.xapֲ3d z&Cr|`60UȾ)2R ?¡wm0&dK$ X )7eCd`p\n֜" aC+Eu,%%|l!rp#H k侜ċy1s1?N{z=lM > UB @ ;dǾ33nk+2p"@ .o 񼠕` 2z0|znӽ9ha* ¶Zg+Z[I[T(++0WQZ@PW%ZC24Y+^ۗI ʢl<5fA(>R/,*fQy+k̄/fT6Vj04=1?oYK/mdA_QsTۊ¬Ȫ$݆gyqlAH6ʦyk TUqE~uBEj),E V,ΔVh*= zo?^AS}#dps3oӄ["c\,g bT!pHV.‘njg!r H~ҝw;IILS(҇ZkHe.#R/˗> ZD-fo #'ZZa$4ï_W)؏r[ٶGou-U$UVFBh0Yq]cJTuckj)%Í~#u6|`F;7@ RH<0݅BUGj~a7DDDeَ???KdhA'ƅfVU ;m*[%"ÅuX*?}y9x{}{{<2 UUu_߯¬U'ʹn%sR5Fm֋ bN`ŦiUQ U9l3]XN|ʬTx$,IF mNd3"0{;yl`y "z;UD#ԊQTe<]ȉ4VmcZh9'cu4"-ͧ Qdf[g؁@)*Y 2ݏn]o[(,2ܼҐ.+яwYbU( JWQb l¤QC559=1 9]Sjͦ !L%qĄB3tawPRY- \pV5 ܎pWίmCKN X Д0T't 9!n46͙D ݘpu.;z0mwnwee&fʉY0tBGGc"|xʒXFi=@?j86_Đ`Z5!V@2LofbB7<5s6U$3!`G셀ObH;Ib1"x_OzGjky"»ZeD䩣 IDATD0 [Dk193)u~r]1"g"1~h,Av8E:3Q7./_(E"DZL)| mo\kVeRm=3 %(sF0[OoǷ_/?/_oUj9y6Z&eJ*e,?ln;Y$֧r bϳxC[eّj9ίUr6? .-,GHeIyA,YS=wΣ[ IN6x6rxvgnOӨ/uG{pJ(phsxtU#}&Lj_jQ ^U  -auvrÆ$:w}ajy]~|u]VWac' Rz&L 77B"#myx4d>DV5҂p&ZM2[h*yn_|_ *\jHg<8P.ҙebW݅EuFӆg[RU~@BIٌ t ^Z/FDQ- v1& 2G-DF2GdTDLۛ6Va>#f"wvyvYtnJgz[CU}baX꟫@Fyg^@𲷁Q#]mX&wj d^($US92g%}U #s@(&&HQ-+p<9莺-ܓ -WPk#"R4i'zx e4`˴SeRHX"|~ЎYf723f<2]sk3GwiYP*U-O,fEIO#gdF57Zg[%ߨ'+Ym7`H`O~mv~܍n?"{Ŵ<据XmP^hIII">%a"Ö́0 rMLtգ iE)m,f>1]Ħx$ࡨf]ˌ35ecj>svSXjo>Up*? }ՙm(>/,"N` t^s.6ܨU/dAjmS 2G!R u߷}UfJyJJNk3q0_-"́|@ *+Z!R!eC“/DZosl6F=7R6-Hvfȸn$"Z&*̫)X:o+>?״(a/BGkc\*Q3hi#T5DFF&b,ETX3b>̂<uR K}beH>ͮfK&ʄaQ2'M BKXlJ VJ UeA V0Sѯ#>>.D`8vl_P ^0x>?5gxE[6<"Vf;2Fxeە\?j]Z  MYo㼮>PwM(jʶ:,Jsuhov|P2#n[}GLpcq>6<Y >v>z̺u;Ql6Fvw3c0BhFkC102K"Q) a1꣙1<3EUHG BɅI1"e/Gy='Ͷ((=3U0-24$g3~G!.`IH`9\Γ:'"}yV;#1ZF7༠r}mO|_{em5E[9u jŶatpE$$a9g"pN .\cs-Ä} NۚnLecř-(&fyi)g9^KrRy33=mi +y.w*z?<3 XGbmzP{Y_377l_m-`dӪ@@{ 4\gD1F"1x %afnY Z|ўfNJOmcf bI%J9Ήi2C)(a('DIFh T9#q"DE9k}:^"W>"kgR`ō;) ѻ! '/ŽB&R n7cmnJig|!Bg{|n͗˫U=a5: PI˷ E^U(V'/gzs /Iz,&U9T*Pۺ}k*җY.aÇeT%- +PG(V1o *6osS-B$}/2q=n,$5l>" 9q0藱c0?+[-n2&\E rXp7?|=W/-kľ}<},m^xa}i\xՆϾ*@! /};oB' u) yl)Zk)MwVPz*UIBbacL 2{~k 3MJb-j@ Zm(O.o 88 {VQU2JF*RE'E)ѴhE&@枙`  1bR-h$Gmo*e5 W!+8b4#PWdterR%!)%a9V8yyRP5 W-.(m,t.T^*"y.DQQRn;Z`&˞\zbl1a+@b a82'ۆ^To% Av` je `-"5I&>>o_=W+m7ܶ׭ lL4^yZ}ۉqy~<7oQB2>p g-Eh<Qfj1-jI,,֐dq秇R >sMa6ly*muI(mc7PGCP #<; MhCUёGZ(ZEUc )Զ`MmQ 3Dx >LX_֝v/œʂZmE8Go#3C(hyb":a"Umy纉yL%p ,W:+X"̈ݐ ׅnQ8x^8/di(  Um?`D+Ceꜩ*DR.+J0zm+=s q\rx|ޛo1x<< y?N)`3$K>օ$m'kXpAmnv^*k`!-6'\cz.89ƵiDn7NZ!0gNdMټ@d%aVihSWm"@Z8'Ftڏs]-AG7jڸ^tE -G:"! D4;,%lrْ#ԧ(K"avuyȂ%sGCs^c̣.|JƠyIF&JLmO" Sk23m2sfB3 uJI 2-DF=}VP3>̪ft~0ņ@PGdKOLRV+I9?~y|GjF08C"=Xm.BL٘#asIAZs|s0XQ5 Y`6_* } #}b`^"QIka~7hf2TXϟ*Z3uE$<qkJzx։zM dcqKUm 8Ll1P=:uaP~|?E1 ʒA9̏Ƿ1:|_/>A0n@R$Ŷ,$qϣx> >P*J+_y~;~Z~2ݭ<< $u1l R@je*D[b ^@$E"|IlDpۆVeȐ~SV-6[ًN;&Ъsϸ'XsĹQq VXDVphMZ)l!_mþ׭UjO!R&-3@bggqr0ec#"S5rd3/Beĺ rJd^g?90O"uax#u}MJA/[p چRrnnT#G 6Ŧ5gf0b߰JyRuّ% 4@/0\ZZ+pva$.;|,c0cNu?%@ju(cZ>fZ`^py8]'33yyxBp K &j-|e @GjA)> 61INߍ±KzE9lyT t-%a8yA4HJb܎qCՁ>l'P |*J` 5Hfj6R_xo9"N]?8?x8?_kW"+@!7JZk f"wDF`.,EQy~>~DO,x>#U`v\7bgTͲ{aa8^dW aed̩ar8~I Uq^>Z:{4*$/;s.|f&!iE e=Ӻ)('gvT^1TKëJ)"I4'D$[-ӪBdY'Tm݆y9քR| J(TVsPR"+ n71ų'2" DOe xYК<ޏPZi@% T?8/u\u8Ic&o<?@&1(m(_¸xE=瞇^wK& HP]yu/ {_ۏOv0i7EV??rV)3)ymn;q"2"`>6: IDATJ<'ad~O hiTžGZmyGZ[)g?!ێv[s! Æ0bla3xMV{Vvޭip"AL=>8ovc(uZ9z|<>y\}C:(  RHz1pyҴDžۆ$k̼ū~1(|.ETm _B%=+Hvm:]"斑Zmsig//o[o?~z{̜'o_po_0+1 wO6Zh-ae=/z]xv;>u$^c䞙Kl8]8~~ `!Uj~!YhkMaGDJ|W\BD1"&Z+w0mE[Qu_rU}}}"ֽ,E5ai#i"b&a1q5 w=>5*)Eo/ 1AVW:s݆+xA;T-PT6>v)ɛ&/}A#8,-֣ )uM LW^|M-Mv4>޹_BZ/SÜH)=,ǔkHpk">QtA-"(R21Hyo嗭ޯ>?To*w8΄uc)  d 2a݅3gx{s\ᐄENZtGƺ+H.A@8@RÇĬ9* 2?hYoiG8eЏ珩O* UP+n;mMBퟶ:{b{ $qy7yB볽׿a_⃌F+0o59O<+oDXm("mhu&S|\ ;` ׄfw=76%/%+,^>&FpuKD C.}]JE(E"\YXʢs t`eg|s*" aQ"}T-/$"0bBru̞Bx{jB|~Ff*D4@Duy n77j-"3O}3?IJϑo[+ȰY=gsZxx5c#GQbDNH Zjnl{6"bf.E4"YxF15xy hdL^x5H .'h6Z'y et.N!/A" Gkk=%ێm/_n||"?k Tژ) = U\7E+O7C )Mezp۴({ȶsD$sZ Qd"♄lmG= W\cg^c>؈Z/{ -8UyvRk՚NHg!J3Vk)*ݓZT&Eܬ۸Y sӯ{$"ܔ 6;{[mv[qB,6aqJG!"y]y\h'iar~su>Ͽ8Opc8UV` Ql!O7:q+>ߞ'z_mib<P(zG@5q]׶շ V*VM_#q=~wʤr{*%'TEz)i锔>A NO'VET l 47s"E"?&0}pj=7pA$J̴$IAMy2)1n{k}߿}M\uV>.w"9+R'H&R `dhfYn, W@vT8 :1=\k u ,>'z8h9kC@BooiW=Zpə H}:#mi'ng^3ji]AqY#i#"H^W >`jȋ43@ Z}$Ds_6ٰЂj)$ຜo[T2ێR ImoNLE}qFZH.䤯231Ӽ&na@RwϪ1u?{j?= ˭_{7!HfX4sX,iG. Y]U1ꎲ(T0ͯ|bќ?Ӻ0&{YZOz.'^֟̀qq]*pzڶ}_ ڰmL9WD޽,0$Mcnc QʶUwθ.'Vʉ͆GqHDJ)D<6"@E]%#bވ!2AXlyffQR@|U <ܶmc!։iƌHHDN:u* ֭F+*CluU @8(j3DPJg~\6CAřY5}b٠Wym+1Friů:&ݰ 2R$"MyQ|>^Qr ;}]eڞ/X`oZZ7A@:_u@4z|>H}N7^VUEEiy|_~hQ0|@?i Y dbH7A}Ig~rՈhFd CтP MʌJemWƙ=o q]>aa m .(3&.s30SdE2s_< IG~4h;M|>Q%<2#%2Au~;1_?({m̒6lx<2"9ta@0f3s-=3 7I'|"b3 leEmɦ ff˟9TlXRk&5A'wbk!/˘ۍnm%t6-"(9D*E cH'q^auҦ}kgPjL=o_ gPQinUnǀǙI|| {Z8Ta`+yrz%Jb7޻}<n$cLUtխ$~H,'@@b**RON1d4'B<"eg" J( H\2DAnɑ3meisHD1uemTНINWbPx)BH7vnDKETs6z8E 1P9$_|2Tm7cVpOsDL%$fiٻuzo"1gI\('4*F8sI: Zeb 44!:$'%  2̙zPc ~(y`z*)(-|a"Eno)Ž&EDU<F*DQ L̤HDD([f֔A1pGF.>|~u"\k‹+u.7Z" rL,[bln[.QlnwԽhVΈB4Cg̈́J˻lK L} [tOdBa $H J°9bq?g sۚoZREï&ϘȀ2ThY$YXGD 8g :oM@̭Psp@܍3QdzETݢEKf#4ięSHZټ}?̨׌JʝrTn0Ƹ!`ٚ%/xR^EirB˔L/f f8/2S>(k!&L" ͍ =m'V1|n(U)Һ &$ʽ{pUfxBH-b ]nȓͻdxyhdSb2 *B e(Ax K1_íOu2ɥ)}tg`ߥX2<Y6NEc⶗R8-Ss\Nc FP8p~rgpjaƼ)#pAݚל]O-~rIҮ1GfA9(N_8iL]_:@ Uq>%Ў$ݏv'<ا_g&I-ͦ_'lRYU>O*2"_6J&J[k:nyPJPܑQ‘@_XƽFm8on(Z+Œ pTӑ`Bkx/kcȸ{gǚnx9K rׅM\>*\ls#(AIkk* \ס% fhQңxե2>u9e>;"qٜOIPB5fDFpx)k鿕HAY5laˁKijw,%@G+SK͛UyR4DjTiIs:_L,waLLNʝM`~Xtw#j qHԲיd__ˁRYg#ϙOJ5 p lwEw'm0n/"0lm+S[frDyZHdya,>mkV#ssUC= [HD??,|@YfGAy&.f~x=HX 綒^̲* \0_1f" Xaвy>`-/OY"W*Ot*LOԧP-P {ix<ϱ"ba  &!obB`TYA+ IDAT-v1@yPAuBt k ӷcdxeP&4I= ZF}3'҃)Z^֐|6hJ06!(O+|@=:("vww͙ Ɏd [%ziKׅP3[_Xغbk0.KvVq7vQsq%T $M 8`u1>l}bKʁ֨59rE ') L>[ G0_K75HTs9"b:| -HOZk`ٓn=Zcǘnn-Pə ( 0!+, I(ZlؼeY_R*p z.Nc)HF-8xg#oMcAJȈֳRT6GU+f}hk8DQ6%"{i9ѭdEhK);PçnbLfȔ1׵V&J>g&g)r4dǡs$28i\3ivcY׋^a J7.2Ƅ_t4PȾTᦍI=b:{xCWT{^r->Q"; 6RD8:^8% /]k"5}ȗu[@0d 4E{g3NoQEI^5]^0(aXU@TP0!o_(x ƍ՚k64-ϢvD/t{=]}}ڥ@sH"vJKV1oxa 8Cgh p)J( M3l,L‘Hdkl,dF,xZS*'(YgkDJa[>7pT&,D.?{$pe[F2L()0AN˺uU%\D' FD1͈8lP etK*]wY*e؜Hfa)ԜEd'y=?K)E"1"DZ'z~\ónf\Fp7_>&pBDsw|=sj?7@X+RB=]@~?4VU]$Z1IwP)IdHD2(#/"0ȟT /tcb##)EYd2+4Ǒn5/fJ*,laѯD`Xa1J\34mD,fP mD&ע f^:}0CU~%MVRř:Ph&;E@ _Rʌ1(Rl, !?"_>[?O;~fghZ~&ti2&%K !VDXZ&3 f7. 毬(|-HN ʋt,}FGz#_4+u1Pr'ت0.5\#8J턈yiz5fRsOv45` ='Ώg,"EIfls3?A։~?6b -Lk1clnv`aj8~,(q"ƴq\=:a *ןx>xZ_b*y!&(+E`:<|VpIk5##Frp!DWy+9F 'ڀ FVP 2m*ڴ VʣݦQ袻 ҋyEAt [ +m^߾VPP_[V_~߿Z8ApdfDPQR6{`b0$tw(kDFD+~2f}UϠ1 K>Ns x.{y>ٯ/tX mW<GԂ6OȈg=9ȃc, W "C3=É23 vPFe kXsBيD_`ReQ9"JDk,) wUq)hH0WwYe}ic .z qH㷳V[Da"8nB ly=}_b1Cs icv5 5l_Ţun/j <;f),P>w)N_n*{v֚[}>|<=L\O#tc{<*.Zk (܈y3]S|fvI,!NR vR֒"Ґ b)W"1&-FLUbi窂ײ A ƢI4e`-h78$ Ki\k(>ƫ1ᆑU<2w& N%ĸ*DyD<@"_R)5rY&y4#S\e/$LrZ aIRMFCC|h7Wf [ { +҉1p + C%3=pBP&bZY Uo< K@@BI?x!#as/s=|C~C#&&ʹd*}Ru #Nb@l(MJ0yFJv00$`ԑSH5)2{VݘJǜ&E#3F 7t P̙kݘ΂Rv 晏qj:BL}8CUF5i&uIM>{ bYdhK I"y $/\"8< rNDk.* $mK2#|!B ҂ yEw_$FsD0>( ac];.n`H9n5ߤ}YZp@v,D.ڞ:IL,"\3,}B,kL*k멥$#," d3z}5+UVH0 VǪ*3 *!1Ks(TIi15NO|= GBIIHZdZE)L 43\;1`fVe@Rw۫v] @N0Pd5P&_c_vkX{cbM>'ډ_)Bn Q*6=#cڜbZj~?PBx\=y'>>waäl2%&{zln.W Lq 2`-eg(zJdSksz_Rfa"22r1+? JRVod53,݋pSʀGox?8b.`\sFrzǟ_|uc>4D%eB{V%52 vǿ۷u=#ې h㲉Roѯ9}}mjz1SRdԻ3luXӐH퍹LB|{ood~]XtYAxL@Eh?Zcf4'uci3[#?~P,0/#_!u\Zvlx>0a?MWn^59]) A9/TƯ+?5[8r(ZkB>E0S h%}Ae>` SnGns &Qe)JD>ӧ1Qz;j:{7'Xyul Մ'ZҚO\;xi+uixJ-2<W7h1|)3,l y w>@(\8kI, fU=q @fwF64 œ9bΜiV{} f,ʨZwk~scYppظVz+R '@cLSG!IGr__=_]Z_RWd5;*.PzT ”x. jE2K6@w=| G*p$} vooP1#3-||xYw0 K+HƴރLfEd5gzسi`fO<<&s;ukUxksk?~Y7|{;Pnf˭3'J~lcLx+WIFOpOjG牳V 㸱5횳OCR)M[;"Zk5@6pMtVjz>1,Zzܬ\Im+_?6C1hQĭsxe \'h{#̣d!^ ۷v%*"L$p,*s\و͟דA$hanXMDX˜0빰L c{AJLVka s =qy?c#BD3B !]J$NaY'óîsǯ3̫K1v|~|(AkiUybS"c?6"53 f*"\) sʤ??h'A4AB@f[ذ O""3"Mc#'fH ǁnI*y%Hɸ 'X(hMjz.FAs[a l֚|Qhū ; *-˙`AmɈ^e ZdNQEeN_"e7Gx 8ZB&qr+* 'JPl?C :( AP#lYBD"3IЂƭJajU6K >v_WZ =3HY'z+ _^󎈞znQa@1c^٣C}!BaTa>?֟ UǷox;m^B#tsjP>$_хnN dׂRZvke rM1q:(+v䀏dm  HA)LWҸ qpe$Bӳ6ɯ Ua0eUY0 7=vR"(}?𸐼Uv@%U27ՎrB& %|a4c WU,~<{X:|$1 h_c 7Y[<ݣю"g-u G@dΣ}^c}j%gZ4@ rdQ S"ݽ&Z[-NKEc< AZ{NRTUU}F5F>z0:mjY #5Gy%8YEHʵꃠUUd<%j$}T!qc3?#GS;67c_ވZ<%GdcAk*|=*t)>-+1' pddfϜ2h|\sosqD̢$wsnVc~/X@5Q>OsH79beG`sؖ Ax4ʛqThG %MCWpK/J5:o[w5g& h.`{zKHL<֝Ց}oeeGO+&?`RpyY E)cC"#>>|8Xq orBHe qO|(hzȜ>4pp{nD~1Ӊsvk=H ʞxR X\/x"Bt}1;u#hF^:v2]6ͧynhjisWգ{xƚ "muULDbn IDATMX(*q IyGSQ2Oc~}]לvG+Mbm1w6ğ| j֎"Z 1KanN@xo-h-\ulOtPyGe:XkRPմC&s&as4}NC*jzh6ctd ɥ2sy x;wFnj4(66bזfڶ<4@WUlPRF u-t{㒻_=f7t>|a\"}'pTZCi&}m&ȃ$ '$ڋE&#3 ?t8kQ5!HxD,D9lN#Mo™tY,> \=g`JG!82'cے#;{R(_80biqL(8 Ʒ&,֎D)Z*(BL@$aRZX""@fm )g feڵ:NKpocbJN(v7{~##Ac3_Z$2|'K[J5m98rhQ̴ʡv̯sn[:1{')km"9=!L\xe\J(DD=d h~JC&b,9g̉Ԇۭ;QnZJn6-"җUcY~*Yt$Rnwg~\#a`~ua=yV!BfDZZZ^t=zq J7:(ˆ43#G e& 3"03 FsD(y4fӒ0=%͙IND/TWVGw8f'y=0_RD҄_?~ szFi5C 0Z*p"-jI͑ctDDc*@>8qj#5"(Qeou, Yvsc(H!ąUx~vo4fDT.-Z9j417P*z{mr\; 0D6j-öjsX%^=G$wvU>T3/7?'ZYTVDGy||~~|Q*(mClZ!P&J'bA.1jJ"O豨 4"7ӝ/"^>s7ڶr/t&\Wt)i$Bt8pttc(HH_WSB͈\RA9Fqer Ԯ93PώGnRae5ζ`+ GVA _'7At+ZDR}=JN'1GEEzAdD,…T眣g[mHغ%͑6@tJV!)Li{^F$@div!^XȬh19B*>=7@p+и:A5ww!f~nog-G`+|4*kd5ϣ$^TK)UO.(",4kLvq%n+^ڥu'rϯ:H-&OBD^pNjggb'-}}O 4ars.GvN4,&`BfuUL-mgDXǚGs8,{Z Rnn`I!QYp I9F9fV]K!GnsyRȕZC+AVѢf613Y !%X>P[9緕]n[RT#}o3%GO.'o-cF+Z{q!W'0Qe 2#[2/H@yL*J$9XZ[k‚}>Îp׷V۽J1콛YmBJȾ߇MF dM,R>tGZ$(_5Q7=rc"6- YL?~6MHdzLCe)ªfsrđV0G,Eh V08g@:ÓE>@PwomoU)@Imߟ}tj3קiNK@SG*+۾ݘmz@)$¼S!i:,xS;y1cY-Y% 4 >7j9YVcy-{V7_)f+N ȘQZHƄ\ tg !j0 K^U!\i0շfgu@Z]ymIDwv4EQ: _mfc}ԦIDl~WtߩV1G>0:o*f""0tDЊQY#\ "۴y2 יp}q:ij5I\VDܘDˢ=1(+E5eٰƢ =Eg*(RȺo<~|cMHϰ0@ZA$:O jZs]!eU Hek%#|z&dkKAR|_#..o"(c$LOJS)1>k0{uЂ0z ;W`>1 e([?tBHkХdD-VݾKۑXطMXݦB$|tPg_O<;Nm1ھmy>*s^UbAo"۽U.+fXi9=4<|%E_fw$qVY k)EB&r5YJ_ݓE Fၣľik?~yo`rB c|GBS&erz; -)D L;B\@vy!"~Z! Py9@qs0K|fs"0u{ KJ0iB8)@cƯ9.Tuͺ9,Gof3cMDnۖq3Z SHZ?e'O D8DuE\x@LoZ[-$%hN\r&#"QYe#Fd(<Z{ބ>5$6 )hr3s沜4P䣫e ^˸MkGuv8UZD#WK`9Z'=v L~d8KTy=B{\q J e)WW!K5Į\=ދg'*e3+;cWU?{G[^V z䉄2H y28QAnj5Ly *PAz8-+@,WRV83 vU@'H&V@Ќ#<̉]y4./1.v5}rkm"1Ū }k3#Xsr; }E,j\1N#Ѿ}۞Ggd٘%sBl~{׏o}/L)̙f!ӧ@gw,m{mTT%Zϵq̜J%gUk,$0 ~v)Y8~9P@2IQJ"NLBP\+NHn̗ 0DDMnpEa1&"e Ђ㹧X\55X׶[K&HX>CE _IM&f40{OTG+0밫u?t2tӝhg?qn9&d.Eevτ*ZuL731װ֗!@qvLj: hm~@yFժ>m9D#s/Yf ~%EKd`}}^օc\1m=Boo Kqam+}C z *\Tjtc5֬(g+/V ,G)Z̗nFwseMa 7w9&L 0RTU*@0֑'32FT)aQwmi`6Т,Z=N#sKi$GJBLrwN_gA瓮$ 5KH"Upa%e:Zgu*.>NwUVWe"IB2|vܚ{5GmB-"*tەM>|+Cȵ_z b@[i"l]^y="" O(PnooP> ^qkL:$PJ"/И0T"kL|yb fJU\҉?@J9#B+DvKeUxT(" "EvTtd`)6k^ks"t8$oL()W|UjѢL} >lNS-??nmf݇(ELJYK"f9inp\uQ1iUF'Ba9Z^PpdFU9{VyВh(\F2DD/BztO wAi P ; W& ER95IhdX$5I$KI(_* n:6s@jmuEb"x>h!j4ؗK~c11 _n,jҾ\ Q̔n)g1GX ZӍאt}n/a+µjmEEV 7"g J#(ׇ="at\1f,_{+:q|0}Y*DhdH"" fY9`v)cDk$ı+F>W]+F5V99W7J WTM` %`] 0 ϭ]IaGbwU2L/iUWᢱzF4c2U?I_O}7ϋ]vGH!n7aT%ҋǁljaI7iKExj0+Ak)mG %cMi[$sF {Ahk<8s}gu\Rpt&}@eɮSS63yII4`ZЂЗiZ\V޶s͟"2cf$z?^TYED{{yq1v,s~~^ >TD hԒ*kSɞs|akKţP"HcpAA_Za!vF4ZA6Ju㤰wdeYY,6ET@̴U[0{>`&fH͉HfڶAZi>YDfgj+uc->|Z߾3HII$ᑙ(p 3CZ,Un#(jU گvv#+Bs hqר du嘔S UPUv)眧YԺmPv; ?;ZCf< ZiVf__2!z 2(43Hc Ѷm$N$4s牀Y?pgD(QiBԺkpeKD%U!eQ8tu+9̺ N`ba!MB3RdzmFf]eR2;F[YD ;|n劬y=+-X%X_ b݆gFgQH]X"]9E/ mk` w#1_|ϟKU[#A7Gܶ"*"9mkWڕ3^xQ0R61'mæ' kQ̼,&kcdH!b3JR^hC4s_٥K>ʜA{h3|y<~'OSlbX}GDDDm k_ŗ:HfbWmVr܋zF—!1_jKVLBIs-(.КA(.c֘x92eJ½g~8nmgT=g;' *=cL@91;T2s l, iSSIu sXd8$ʜϞv)xĴ uf;r J^7*@308{n 'mIʠXrzRd\a% W\Q^j)˛mTE 2<¼Zy|W m^ L_@"#lBD"I˖rb]m£ykf|@@D0 bkf̍2iHlb3UN\b Cf5b Kf)1zV4񊗃 t2PmK֋/Wz( D|V`7a6˫ZvpH R(V A/IF6 >PBDOL܇$n-o'׻r{mCඣJR ).KiBce p@HDJ68GþW4?mv<չWm\4KK ;'i[(Sa{kV4}4 PE1knS"oȩJF#C$-Z}"JX3(U"&(Ko 8a w'ɞUXks&Ȝ}r,pþkV"׏M[6R:eE0;ۆ߾aۡ oE{ %c9cW̕gm'Y b{iƝ,1"lL*?~"j?>ya@ pebDR8 Fѭ+Z[e>zu+531P8?<N\= Z", 1ֶ0fpO$3HaH41Fj-n=3Tg>ܰ߶Vjz؜I$r>JQ՝Io?O׏f##2m -JE*G`9mDx3klvCi tGdgxª8?q< ~+"K}v; +D̨2-K2;JV;fk߷v>ІHyq Gds sLZ᭔ ϕaI?u6#E+,&_6sմ03G)_y)K_kBln7o Oe5ʽCo "VGL3i6%[haU IJhuMKD ӕ^ "NU6LnW} 2\ۿq=g5R9J^y1>&Ae!գۆRXE% 5f @" qUrI=H"S]u^cm k 0  ,&mߢIꭶ:mI}*(Z+7Z _B&1/ooR Fbޘ4U6ٜ9*F+|RӮ"7 Z!(ZC~%r_ǥnWVb\/'`훵puUu&"RL nݪ(/){FR*ёL*."Ee|65Hx.W6-Jsj-(1("WI2i-̈HH2Fti@P/3fϋӂ Վ|ZTWfbOEL ;Ty~=ךΉ$XW&-~XRUpȳcy9@zy%իt, N9VZWUB+q U)uhJeiI$"E1 V>{Ǖ[ (-̂ ێVU-i_$\í^\ !:zF+I VX@]K|{[2&fqx>>(.1}fnUQh-Z˶yLn<9]=y8hE=ə?691IHLo~1-[)D(3JPBL[aV},ߜ>JHZq0߈0̷[c(DHfO hEFl`0VݹV0W1AV(c$<"zdo7!i>g4":町ei"13=)f.\'m/Pr(5_VMs‡["3HD<_Ķek FDBd3ώy@mʈ9=(+WmkӟA߾ezw"=rZ0:Ƹ0mi8p0ۆ"X/EkZ#KE4LvXЍ9VDEQU(h6n6-6@qPJMOB< qXk4[߰mMQʥ kt$!bxy3qtlBI}X6xZ]!'"mEo6FP"3Gq#12oo1 ʴdUxzoVBޓG}n HIB^["ox<+][+1$1F_Ga*et[ZWDxα° TE^[cVkCnZJqq9 Vlfs\dfV&œ lo03f>$_ R rE[GcX.0xD]ܴ~pGXQ RG\\qN0ΞRk)0fAbq]m~mX"1\Kst-3#>TҶ☖aRLȁZVTŜ9V1L*uFtoo|1wKDROE \n_ XQYO"aV֓UleǨlZ "Ins*J>̈2݉Iе "" <}\R>g5x",F$҄H3Ɯ8;Nmsemv9nB'}_E3b0i ӓ]+vO ۗ4 ǙR`apŕlz{cQʝ-2!J)Sm>~x~IKaLǾ֠JV9[-X֚ٻ\XmVOCZ5QZ@Bl0Si@f;1ƜgH"b*EzSdΕŐ5XszмFR>B%8aFs?mo%`PM@,|0xUBl^;e6a |} VP;UD b)* >(Jgǒ\Lz( 6vL10_unMx/``d+xZ3 @)d~_Eߌ(t ~@jv÷7" Ïv-C ¨`vaߖ"[x& Dk{I=c+i}U .$ʔn^/+hM|u=QNEmX?~@oU9GGZ֛}׭6_{)2VV]t&a1ݜ*\o{zx3TK*"Y+??ǘ̸̷ϟ?4P0̇\@8nzgqWG-6|W~}^¾~[-Dxjj^i -6f?~+e;|93Sؐ\JWpskSEv߷<a31ZH0=orq7NJi &)fVnM͆>̅BbW!pDεH bQ: {ŷ{oR9f$DB"䴰nGF`!rZƚn!,|HtpZL&.Rj53X.HcljRW蜝f1/GDe6ȰL'HZmR|Ef7}Dv wێײ,׾ $wS'GUefIF8Y]o%I`c9-;ƈ.Z[۷M3W91:VZJ%wsLs,EZ Z}pD-ֶ^E|ϧV~^5 Gj}b\vf Ncy^@6ـ|~9gsV,92&BIdxzdD$"qczdbΰ}NH3}lRYKUHq!tPdp&ƴOs6F?o X42׽TE}k,[{^gw}E*̜sbt_H}󏇶 q^DŽ΁u{U9:W8~?պQ$3YVBw18" }_m[* HgZ2<zʬOdq)6odJ h+i۵{a dxBFx 3/r.At3!V0D3XY4akLj 1ey̴lhMc̻jA'jD4#IãJqosoU9¦ۺ0v z&eD3#H^Вs7U(VGJiww%E+71qu{.R1wc^zj>Bzo@qV*B63Qv'A f Um!ZrbvHW"w]Ĕpt<3A?ϫh)H%VfadQ]tW*"KƑFjED #7 f=ye{%gwwLӦ! {;3}/U1שzY}9LjHUb*s5SJ XlױVn~~G1E!\RKQea9i,~=3__m[FiN<؛6%EEJfZT5#<«"u bc#2D#P( "a"Ɲ>ƈiu3i%a@2ת$cD#zF WojC&/O\[,:fHG-|+q˟[W? 7442aM(Y&Zt[ '8F~(P5x7v0V}v v3oZҕXB~SK@x{o~(ן0""2]xlF['N QIᔘݵ{޴^1*VR%za]ƺA CJUN"d{mmw-e-3kkNcǫ@v,cn"*n5ε$ʴ|W8o[y;8׌LmbQZ! ajq^0G-x{TIA1,cbfD}2q^d8lLtiӭGQ3usdc]U#h^\K[m[&x>o[}?_?~AoOc½}ڜCf?ڢ(#h./OhVU"L`|lLR@zNT}Vp^ IDAT@.ZIx )fH1󲣷Rݦ%I;VFCD:MU3iZvJb0:ϷkUpmbzqDP lݽZT+<Di:ǜI0w V8%cp,fqVLVl#ܥLmp#Ƹ2`9>up )>y___oo[e]|Asf$fxn7IZ홞$}q~q]iE:1'ۦ7SU!!R$\3#j"s"̸-0)"Uئx X׉ώo^j",N#h$@Q?|(! ~pn$~wD(i)(F@q, ל@ƪy?W"jjUJ uL3G0cvy`t@QQ'3>w6 "U>D-yVM?D@Eد+Î+ 6&c8ϻE6獐D6< 㳶2m0:|`|ۣmܚʰ5i[!=ܕ$ԑ|D¡J)o?V1缮8N2?E5*ZE"0yt(e}Xqv?%ݦ^kĝ(j-qv?Ɲ?qt{?x  0h!222meL2IU)11N#ԪUj&עt"XKwVK$(e% 2|S22]!Zg:BPх 0-MQ Hna6t[۾眃<2~dDj>ІҤTRH v BmX$ =bYI)ʯbS\; ZҚ6i}DeIfXE,5ppmaLNt;=P%"1S }BZ)ϑG}o1*X *TTtP! 3_->|q(ud{2_"WkJk*JP"1.^jӪ@,Pc{=iڌdݺVC`2X⊠B$cWΟo;3-l hWD kifn[m>-KDH{E 8^BtGLq XO6O GZ)Zk({G$jKmncyڷgʐ#s]lȤY8ms [DzRgSY3?l Ϫ㘅H}ka&`PZ66TYuv!3:t)gUTK#("DHU>}4uWxd,^޶pY oV"̌I-9B7 mEewʢZ,82Ѷu^ݪTdo}ØPmwVrY _by p"waWCҴv"{"L،@g̡o  |Di6nhSTP @8F\CbVе kXk9rz|;ϝ[ȥX>oU)}wj%Ք"ۮx}]r!.S)9l 1.Y羫' |\8E!bZ5.Myc n䲻GGxi|X&i5Y;F [*7qzu QZJX0(<ЧGƌLTӆ;ln̜fbL` ZJ[aE`x =2_5xl}(v<)(>TC$mZn=y|l|>HǠĤP&fˡ*U"2)0+.4TaEVUAfnn$B)se2@EB (kK"]Zɭ2U Ώ>^}ʾm-"? Rt{_uF@G!|^Y87F3ѻ 2>A pSZC,=)0'FZ57!$Jlep5=3Paaiʢ_Q,m*Q"a Y5tuz icG"O#cYrk0!0YPF)U8#Z +_#y}#YleL]'60!nc{/nr[Ǹ&ѧ%~q]9DʲkQ*N mݎs+h?qW3|NZṷj)ޑ9 6ч'ާhY Fr\wuD}#$ "Q Qf:~ D->iua)'5lshaS7D8OНEB(Sܙɹ@|Eᭉ7/ghf2Z$_R+0u {Ac_qjV7戰Zt' a<RB}Ir9<GT`y-0B2*^m{8/iC Hslyؼ}(s Wď:lG[c BL>c00׽_²rV$J6Y*64HH"iucBFeҜ2 \j`{8l >59ē*yz|tc)~+A Bs(C2n#XZbJ@#3!508"b4[Hi&i+W%(S2)*aRf7w9m[a|qoo.2Dm&E- w 2c,J!-B$ZkM3KGz^9Hf1qx,$b"QNPFÆ#̮MA"\kQ6D!  \ȅ#{(siiee f5I5-(=fZk}"s52byo93x_X}> @!y-zɵ*1]ЄE9 N!.,ʜ+_t]<>b@с`}̷|<+K$D+D>? 9x#!fR5X#BU r" a9]X)"n^ZkUz]생RDF1t~fs/EnoR~O)s_F9: p+o{[&&*^ھ$Z2MsR$HsRb,֩q~H(܄h]9co",EDn3}}}}0?*Q[ow$a**ul}TeJ D.ь3DㆄL0[Wf{nU-2fci+_iW:R!fDȰpFlR&MF,K%)L* 2\ɓ|irZAA,__q.>v;&w60DX]vZWirn޸it+t0 "P!X~=Y)DQ5n?BP 6emeJEv7n nhUbLdP$[O=Z 90@VESyPM1i{PyGC{FH,gJų@100\BQBٮ"1$""CAD Mau>ڴ#?cCA^8)EG/C AQSN|珪.h nu۷9#!@zz?A7C>UuuU2D&L>ω aN>'"[1.x"mGۗ<{LWqafrmGnLfv~F?Z£pH"g 6nV*(d]Z@F۽HKfޫ{]i}fƊ7QxLYTq$e_T0"z-<8؎AMU'Nf9[esEC(W??845RLuDMT%Jc:6l"|5eHEED!ZHXj@FUYQBi.:Y&$WM%6̈Jv*jnoϭmfw|fp-10* e*Bdذ>$V$M]N10-<=gENr"iDt52ZŸM#s+* NNc#ʑVQ[݊"SEJ)ZGд%ڎ(#b&Ut>5LRVpNs8fVĴƵmZe<"3kyc"UsB%aHV"u"™Q[Kd&™!A{+Hxfݫ(#S6ʤ5ȏu0:& 84ipFQaHODdd}ư+@dUMj0"C!?-jr5m͞@S3&

oԗ BgNJ,ω0 WSU*H,mEYTo].EV|%#tpjz0XU'T޳w6gtwuprfq3NukYnDL77r:/aGyP_:P ō6~I,kR6DӜ7"YDKas[A`L36@,wLKpD 8GG>#9sN+gJc23_L0xZV‹XG`Zp9oI7O"!&1 ҹ抣ւ"(6 (K$`N^1#=ù;xDɚ1̝&Jb$T  5%dZ_3KR R'JEHLN"j%VnM!ߕ("{4䌅"pC  LطIIзf!CLQo[$T,K+m + fajlۂVouUIL,LN֠'ۢm-^J/5RIV825^Q%"ҊlmpVwq_S e\q\+7V21=c۷mkw%a(~ϏxtP-|`+ę?>?#iWrlkmԄ\ *U%cڜz̤0.?Yoefl>)ITUĦq]4\U N4Ax<y)EUXH$`&)D̘í(2gTطG}(d*f>|BۏnJR`b ! .ԶFx?2'8PZ%NIps!ٸfinªEɧt dIJ'1z0c y{  +aEkkV؊>c/L9X"~2x}4LcD,: ( UK5yIoDZ5n'źG-Z.Ж9P "W3-]LBBLcuub~gxM@qLr/1ʿ`N_zE6bi]goboWnZ RY&Hr "-:fHfQG&!o\6NG, {*J͎*AĶP {="὇{c`U!{8 2=}y@u3ҮZ?i/qP2AUAJZ"ЯDpc\-zD!39[)M_V= fj+*̾"Et:e']S:'cJIε+X'"݆dbd2$רOR2Iu}+EzeP;ʮn'@d$4>>X}Vk*(}VU-`,{(E~R(3{r_G$sUƼpb&-Dp9O=>i#"-qqt-=~\WQIs7Kmsxvv;/:VZ*@[U&͠9"!2lr|yZhdߴOisNQQ9Ijk L0e*uRZ}\3<1"FfDʴ Ҽ{UIJ\װ`_, CHPGW7 0=͏Iz%lΈŝsw'Xԗ1/Q|ɪAӒF` r%8t932g&KңLhZ3aq8 |9b1Nz/*Ƅ{F+[cyy}ƕ[U)߃Ķ!) I.)p-W2OM"e.)} Vhr'8,`X47|ۙAvS^vDgi{ZC1ݱ2'Vn/hˎ% IDAT绖pX׀e40^+( hp6Q=Dk! Ė\(A记5z'PsVoL 3b&Ꜵ:Dp: 밯ϯON<_ђ Ql[ycDjq+?ua hckڣQ$[ 7n"ZR#V,,RR{6X%o")Ugf"2u}}>H孢H7P ᰉӴeCS<[k V;$n]OUSOsNTB\FZ="3Wn(ӉmxmMp33%9*eRDݗKEH*xhhmg+LrA[{<~Ϗ|kjd?ׅ#m*@9h-`Ba䩤mnZ-g}568qynUHweOae͵}&dR _U[@*qV!R5,"k <ֆIyׅІ0^B ([x_$~oR&ȘE)#F1o1+x=XֳZ<  @2`UUѲg2ϙɼ 9^8y2"3 J!<Pjif}`fh+xIɾ1E8z!vYk+)jfDLRnq$Y>3sTF^5ZTwUnfsd1I9{_@\ID)UE̍3V(*NSJu+P)^nGx~'(mpfy"Kpa+P<²#"=N0qP ת$ R'iAc0Ikm߅^`3}"읅3mx̄) p@:U`~J">/Xz鑠X]{i"׹˭V̮zrۖ˾5eF"測"epZmsMx&ؾ ʙiL_~U=8㪩zKg3% hghU8G<{7_UY+&vn*(u0QڴY!D$n%a~kQe8ly"4| CQE%˝!E59"(RA)<]b[)!2ehk~k)A`s rQF 3qCH0S2BVJJǏis\33Y)-,EEAXaǰa`5H)Ls9cň!b i^Ekij}"/Xv}}ic#| ]%æxyoIܻs([VZ)GS)Hư|?>>Ae%e8MB4&*Rt!9|>TUE34#AI|w 0t#$5SbJ LbM3;G<_KXY94ig xVm\uǸm[тy1f(-KU !EmxN뉒HyLv`DYCgd!Z-Dai }?q{'n|qNrz}?YwH?WA8OTq\2x3# ` "IcZ99vJUDmo^J$xE K edۛP.AfVDTʶݦGhCE޲ȇO#>~}@o_"7=4V}RDlXw$ S1{GN0 VN<9_^8|0 fYĴV1CDNJgHѤRycf-W=Ɛژ*ڗ[$C,g?}Nr: *+3d)Umn|}|Hѭm9۾Tj 1gm$vmjYl:3gZk(͌t߂vnjYZR6-k}nc6=cdx2f,lT1M%_n$ZG9Gk~֏ɚЭfz:Q Z41&3G&(?9r w:Y m[۶mÖH)Ӭxj+ mGځ < Z5=&(PI[{|=VmSD`fQ|yj"׽B'3 ZqHc8ϵ$xb\4NN˰ti0'i}ۭ*OB`0|q%AZ4mWK:J//n  e|u}|?2h= !jK0c cМ4aF8+xyѶMT[89$Jc:hd}oR_I\<|>#eݴU2mј3s= 2eٙ*M>}@9E!MX@B\af3Ehre]g5Id?10'X;;0hIض'/bt q/JI'Q+ | %l;D@(( X5 J/q /UDx _NejN\wF7Dޮ%rDYN&Cp]^Vl}`:vV*XwɗF>)>b=  ޾ai֠)I~ʴ3`v4E/ՋkU~!0:Oo߹(A`\&(ZۖcO[+}1̄Y7sXiokl(H8ErFUB:cy1J>f ?}|<sD8XQwKחW'jm~y?N;*_~y{Zǣ~|v_~='(1mDzMϏU&3="J)ns ~Zy>>O$-ǩ6V8LUoMYx =mZ+j}Ĝ'!e(Dž Oz۾p?Z)ņG}Ι}m9D&.Zk{qasov?OO6b^x[}}{-xy~׿oĨpx>3QKJ#]2}>-V*=& tĜq@(Zf1Hj,\[]gy QDx[- AD ]K;稵ۍ@c8J[+$xFnv%`UVIDjX N"2XZ+'2(#}Z ˶yz0G~gAgŨ^jKZmMal3tfi[y{mesRۯ+H6k۽@RHK'*'/r߫B4=#o9F$Ѫ!۷8yG"}R ~{3kي*Q0'b}גh;yqiRt݆E/CM)¢f_`a5VViV<|A|섡‹O{{۶V#}q1(-,}\C^_Zp]`js0QQ93#1ܵmUseGciKy8{UdZ+2)aaNN&VD^ZK$G2R2Ȇ1ǘ 'Ӿ( e |9ՖZDlJOL U>;BU0.VLx!*Fz)6ڰ :'?u>BQ16L+eN*j{ ޥ}TwfU(Z0j - !1HP#SxoU k &*)RH[6`/A&vۄn>F تdR&}<)= B8nhM0݇J3"fb|@<+v`fa}%G0`cx{CQ W|e}~|RaR -[my0`кo[|_r=}Z^^8gy` ˯Ӡ p' cǏKDŽo3#1GI qv'Q5m9>VDiekTk3p>yRjR4b>m{)o6 ! $Я[ѭj)> _Yc$Hօ+Z ׽GQZ91"˜bg!;daf3\}+2S&n,n9|131gCi_)"a\}dz47m\6UZsF!"4pemR\[t@"v(Ђ_nx>ꬓ/ ]\nuZ %.ٲzlBK"J^Vv?Aj_/射TLq?WyUbFLbR#,GޯsW CI":®JHĔ՗bUI"a› IDAT3.`+ žaI膀/ezT$}u.W< !`3]Az%#13a+j1d)Ȁ mĸl1a/ "3 bG,`5cF9XA'd")~;yt ~FIhz!^eL sA*Xaqi\$O&@Q 7@d>mc8ϠS’j1Uz>mQx315ֶe 拻24Dp3X"4#$6`~۾ je aIKU'4gRiEIlUU%#@UQ ?SUjV(Vmy=(#)DPr&tB>C6Qd6f3.-,y˯릤 ھ|+Dqg M`Rmp|Grp]Zb}G)<9 8KsaxLrssD[PYj{ELHʘkDyam+h2}%"P}ӆ1ᱎD? s"#mpjGP tE">^OCMNt]tD&%>smۦUhRmg y攩L$V,¬ ` P}".Rd9K%Q!FdbJb.$ e~cH4U_" \9v4 ƘW,Q[K4+f#>X_ ,(Zc< ]̐j _ZMO2Њ;Xy *_UATlMQia_]Y!dXE'/XK)ų ݜ2`@k$HjE1<'TH 0i}-/Ԩr/#9\Du)I~ /N8zc|'6j]r e?HE;^3 ʴeO2ֵÁ(T*Aُ1=RNDӱT9ͧ#vC'4D IJ]'⭖Z <1^.n{ʤ40H*''ԉ n9/&R3ۛTynu"4g />OO <`Wr, d-mGwd2 1;q*i9>HIZU9YT^_o\T0GxvV۶Mds DQ~8=.,"@^i+DeR)̒100M{Q!^ThQAZeJN?r3QD轟VQy1ǜsD١2, ʄGVKYhi}fV* #3QY+ "dj)[-EȜvHjRU;h14Jpdex O=&MQn}B,*Ki!KLp&;eXxJy{y9g088|qFBၺak =gx Îfmf58nz//Y-RLNW,kAfHTgw9Fs||:$Zq002WUIt1Lq8#zens|1N|>P'3T~o{#|!N|ٟOw*T(cn1Bi>J3\w0xX>1咷<2=aJq@HÔą)幍$1Z8GGD^jkFBkHӓ@M(s^ 4׵Av%ٱ"3A["]zeNW?W뉐t!H#a8c,~B/q\*Xj%9(E-xeum_Oܼw0^}b(<2A0*"e9n&fN:&W|E"x+B|V[skK ȰXxI693FCARW0o  jbt )u^;-'h"VbVJq~SL;O( |Tժkq`3H944)OXNZHmXeH ۮֻ/V \!knY3#2#,q^BM%îi8\xZkp"r<:Œ\1B%Z)E p)\lKfaɜZW*-$K|:lblme"RB@DX>J-e4*ھ Fʠ @eٓ{(Gqak4R\,0EAd"I3TmEDxR"MhឋzHws4YUTզ6"LY Z.B̀pS/V18ØUHh-:'Ϥ4aT-j -3!W"BW~"tsNj\ZI! J,֌ B5x!C%nDvE/rb(pBO@hxd F`p۰ګ]~r='A@JW26 $FkU@o_b o@z@9|qB =Dqڟ֦S]6J[w2wB§'#oE>#F Aۮ4 Zӭ~WKNv+*6<$ JpueAZsLXgNj]Y^oֶ9-kj߼֦ZΣgch$KR4DLt_x aNT8g>~|_ Opr>aQfa:Ϝf45-}V0w)D%"2k[89bL|L(ExLr}'֝%cΉ^ݿ{ɷV%qI?9Nf}٧Y yVӞvtX?>c_z%`+bsE١A0ӚGEtCY["هߴ o9g?>(S2BUl2g  p1D,y=,"W;t/֪ZgsF;}'ξdF m@2Y#yXgᡥM1w*x}DiI3} ̢ʟqwW~//uߋV-h”LABIZ-BnsN Mfif >-*#b2i=gTᬋz덆UI4ID4/|mGdYzp'ꮞi4 Ώ. I}Xyk$ }"#Y g(N)G,4 oWQ,qں*n6x?5HdDFER^_/[]%}l[]-?'Ly"=Uk)aa1s8}nق>Jz6VCcz}Fqbm-γ Ar{c뿾/k_#͟Yeay&Ir;)c>P*XD=rt|bK+gd\ mT;DA@ Tŭb- c޴'< e`t~ /5 bFs' עokQEFȼ4sME ;""T#3H-eۖ1ƒÉJ2$6$g )1S RKę$)/4Ű48*E3H"sEƜ""Lr1tJ0M>=(283#Im̰CPk_Dk y39)3P] 9Eq){f sGmJ"ʪ3 -Xk9C>,rlދ9ˎR+mYy[|laP *4'"`"PβT8<& 0v ys0 y{ERD۰4wkgTDd"(=\GuO 8{dh& 1@\Ҿ]Ipf %DDS̘2mDmmE7a8|.?TEgp}ZT@y& %1W/ 4tdfu '̑ = j(b]8{o8R^W wS D\)Mbxtd`]/m].҄߈2G[ yCE>_+ob@\4X THP R楄g0G&BhvW ԑ8; n˪>,<$,Vq.v5AJRkdgn7^TUm]ǧmue;?z8 VdFk! 8V_򛽿>KBLLHY}-143u o\dTV{J-eE=b̹@PJ RL8Zcf_WcdH* K-Bt nu[jla;X*E!ڸ@JejpP%t%u!if""gs8A׉ѝHIDm#7s籟>0~F˺xD>!Jj ~ GHϋn-sZA$W9/{T5#GXYĸG]֪Ey<q۪HD$h;gUrs/Ek]t9({(*ZW@tIяpۊ??VEC 3lt*{Gp3GuehDG'>XV,+8Y*G;j3P "sKٱ_FRqcm4O Pm*an1U 6ԥPW{䰜\ѧ,)=6b H"XK-Km?яO__w|~`FU8[gV#31~:~^]@h3y)m|oKK7x6L9zڴ*S 5hy &Vaf:4</ K1mB],M8h0x8;@S՜ $bvjC0'՜H4em]RF;z[qb .ɘ k[y ꩒"פZԊkS C#}E5f:7O2mTQ*cSTEՊb:6־'"eN b3atY3uL\G)RȘ}4'kxZ DGB,,nÆ_ˋ{~) Ņ }gkh cseY&.̅XEdFNg7OmO$QuʵY]"PEsX?WlYΔb8y:T)IjmA<&#T.Qa (C.F0_,>>{NK‘dN@(@|a0rsyr SXj6P,p(PY%qc?l2ɁZQ@qyzwvq~|ZEHcK8hCu>^e??o+3e@ 菷[(3#rcct;;eb[vJKCr`Y*巷Ed꺔|Z~O'Dq$!TbS2=x %Ĩ z1! IDAT1ٺXxZRzFyo`ڙf6"/nepB`fYTTݼv׌<3VZȑQ$ك@@L 9@&<8﷗e9TmلR5 㹷]}I=ov^k/ԏn菸࿮nP" 0RNKP"}8I0y<ݴ"yv\Xv .^YəV( J%"ֱ<'B:㩂&uVrB0}|!f7AzUmk1@6}f\CeJrF .55V?L`HQȰ."T}d2臏n!* +14#sYz8g#fu[$:۰;ۭ\8/L("e)lYm)pasỳ*G`1/̟% a?A2Y{ "Zo/LDѻ]Ie~|XS,ɈwEK- 0438=&"a}JuigDZ H]^˒ARxE| -'s>@zdBh2̓%H|ZHXIo{{6G,9iLaBd1Hu?>o*!ϳ~8;±,X׋mYj%ǢEY$'nNE T)ttTH?[{SBDA3z?VjeV*6F?cb_^hےfL doUP"nKE 2<>y7m%u8298`G304KŰ:^`C%xCf'p 0sSH% qyRD"|6*f\ܣ$"\8r(U0@2 90!L'Z7&tLє/bkX, &Pբ3ARg{z!\q"8͠@T! (T I yhk/djKɥIzNl]]wk8N@ cZ |N*bwxBR 'X_hdl6&/W(X8l~R- SL~FDD539_TR~_14@0 }粐REZm5ؓ@ܷ)(v[",8@r۴Xw̙GcDcaWbnE}ƔR .6HŖHę4wП&1`""DFWyhX U. KHº`1ALR7gaL6G; GHoS篾( Xl{LG?ر]Z/m>ڟ8E͎RQ. [_Vq+l\q(qǷ㛔"uY~߶ۣ QmÆ'LF5"l$u{"Gan]rM yupVlh5ljd [^~m)g`mme[ HBH+bݴ֪cpeުFe"Ve>(R$s8ʦ1` k>̦'uYـ*5֕hir&zc.߾}[<GjuV^,_H`[߿=~譵Kǣu/#asد'k???;ˊ1P j!*X7_7*y⯧__BKHV&!̰\x|&I) pZ'ߞrvFb]Ӵ׷6ϟ>un۝!J-?>?W*>>”9m\%`H1W'PpG 6/Yi) tjPU D;l\?!}@A`l7&ž .$c0!$@@ $rVZS A:GK8Tm ?söR*(}?jQ0} bUZhE#L+)bY$"#m(9RJF8?OBD1p'|۶ɶ` w731:M@KKբ"*26<,*:%=ݚGQu.ub7uT'sN={^W {Dzfb M.El_l\.'!f5^^v#=/嶭ۢǯѯ$ P"£bY #G\mQD/HA |>R?~@Dda13H5DdۖptWѥ,"*W nn(Cꆣn8֠ {o]5TcSu϶>w*:Zr]kwȒQO7b_ouy<>Ͻ?x)vvۖঌkf}?ݍۣ{X]oj AZv3$RJ$S]""s4"BAa4_7Fkމq2_n7l[L`!DHU]E׿ 0?3Gg=BKtK!P 쳅D8s/ K鷛8mga,W&"ÎTÎR􅜎`2јG;gH^[ϾgC]G df!b$Z;#!wd^>.OhoXגsZpC-( LtM!~gDK.۶*:cYk|{c.E2"L͔Y"a1bM7IrO+h0Z!@ ^j_6ʢ$Ytt4AU2nl:)}N5w2fzC%5M\w)qM's |.kR0'$Gbk;ӆ Y>tb`8,ٌA)æPQբ 6|g9XJ9~󜠐IO@;q_˸KAl]WQ+ ?*u+mk fX+UeB<*00c@k5;v1sF.JRس}J);3n b@B|o1z&IZa]uUEjZ)zxpu< p6}QYEbt1 E*Iu@{=2flh }`a6bXk0"l2pvKZs]#QWZ*C{DP+O.BX3yY,gJճG}rؖRas$#-lw fxJR7yǴNL}[cχcZ*`'xm~<1O)• pd,/"#$@j HRnm}}ݾk}w zkkY"H4AcRHvfImf\ |p2QSx1nǻ矽+~><6f,l$1/dTJ>/r.}'svv _iKLuD.[˺Pyh+q)a61S-3Ho|)K" dhZy)e'1 A+6bUl#-OrUuݱbf9}>Vn7ЖxǺo0Z1۷rnx}ŷo >chV텙l`Cj"Go.mL$@Q[ kjLgXDR97v> 1KL=ZW8KEQy|WJky}>v8.AzXe9iA)w <'^Y$8ei} BۋfdnǶ?GC7 }yI&bJ hS?׬FG8I 'ƀ ^tc?Pn"HwŖ%Aipc`8TZM H(sd8KR!jvC8;4.)jUz 8b sׂ3"Xo0F? gRfz@n𹮧k4 3Q2˚D: ` S ,"Eo̐vVKĘE7^S?~MYHZ "Ue%"<}Wc5){(֥bI9#"fIF0nEtpU>bc0Z^^??<Zκqh%qv/N-GH)+t("U[A2<[x+ah5 +@{f&Ja4kFxsƯ`Aq@eD: ZUysA$b90"aEVZpdR Qv0Xxf\ ԥ5 .,$sNsG$&I)LͭٗX*G$s"9㬹Ps <-c?a@.\!0 s`,0o9jVdE8◘FpGo8?Q|6dvqp|u Dc6VԵP$@o}e,L<oe.zʼi})JXml "ɌHp9_}`:ΎׁHd*V5.ܓ5`w` ub6/%럺jp_ظ+ F}~'.Fx~J\ U6\/+ _8: qͿ,%kuЏ/1c`ZVP1Y@` df6NDDV2s%FFnc8 e,X֌cs87%d "[ef‚֪`2H8i(D$~yNl3h}Mk-s+@m)*m/Y*<| +z133T.Zy?|Pώo?hE-<3]|eKcrKV`;߿8џGhܶRlc KA 7S&a!m) "^ggfYĪL>O_5̫Ɓ/q䕸)ۊ bt{>r@ZaײiYڈjs%`}Gܦ1P5vW8n] qCSR$~ 2"" IDAT8c|y}>޶}/Li+*uZr6 YD۶ %\4ǘBJq /'R-V$Z^҉>!_1@%X&C03.fH`kekY}y|mUAԇ-낚z+'Qܯ}.Za(C5Č"W*18 TLȺΈ%H bټ%ʵ&o|c "ԫ >2!sf-@Dw[R>xaE83ӥ0we"3Y"{i'sځ~ kT6gLw)GF9aԍj''ґ {ca'-ffp'WDa9M\>MP3K83qq&O>j!R(bn~$/9 싼+#>~>E 숸_+&V*:k|&ىՈ^C=5kD7xm7-H wSVPjZe)UVAIL* bw7FTf13"jϿ|??¨}dF99,|F"%fOZ I1}ߵJmcFq9baO9.锢\`}X,11Rf֪1>@*Df8;- 8tuؚ1go[bFB72& ai~6I1m|:C-ȁ`ZSl(oPVj-s2aJ"Gg?l6Lh ZK-Q VgmkNV|n6s̫O*\UX7bִcc8#KeMEpgXbU_XseXw\B(v^7|gX7k 0sV)` WɬVln;Zz #"mL""JEm.,Uckc9p3 c E+q F9}epOO yeBJHh2hQE2QdMsPPl:'>?Ϸo/ dbIq|:\][rҪ}yvgxNk-$L*Z VXæ0+0MJôIHys%s1FO-n1Dcf@apn,!*VjeHM_t}Q;R˨,Ƅl\U>8}.5o(zE/6ASE=-aXbe|[d0U3Hd^@U_(\"BHg?UG JC Ǽ˙@JRTyZ$xU9EB8E3|f5!+XJI1/5JimræL޽r}2 a@*VC< N,ek*OR 0Rsz$R02"V3€Vu8lk  sts] fԊH8y LLk sBIjD4Gٺy1uvq[C7n”}%l5¾]R7L>=;/^z~ؙa#mń =no89y^qdբ:9A\uTUsx1}g}tg2 KUKܥmoo71\:W1P JPK"uQR 3aZiL> _2B(*6H"ǘ>_O1v;T9M'H0 )ǙgzT)"?Pus-|/} 0PTk-JdQZDDq~qo =EU)}/6:'Vd,\4dL&tcL$$! babm6= NX̥c&$fa1Oy0Apj؈ײ-,H &vu eHD&K2H()oE)YE}uL$e.*ukcynɊR~ۙn""2}FfTVVg(e%ȓM3bZY 8|""=r}#U9γ?ɅEXkz3iu篢B-"‰3(Y|æ-Mxb!ʽǂ: N!' Ee2kMϣToeooo%_qwٽ5a0cFܬß6@hbm;[{uo$TĜ|٬[/|9mo)n5V?>R)`ζ5Ҝʕ"~$o \ 5-+BZ%yN3ԢhX|/ vDJ"X`u[Q>WvoKZ> 4gpD١ "tOƢZwe}@^U^LkQ.NdGjjsĦq+ Sm)4z ")t3Tx\hOp-Z#!#l{2=}+t$Dm^cRc)`V5,ϣ-AIpU^}RR3|!afJ%I0щf`9M,\ʵtDcmLt-jbgDD 9hZӮɟ`D_~|mUwa冈}4l.l`aH@W#90R֋Ժ/D@KRUjm}W0!'pZʘs7G+`!asLǁ9FlA!QU1!(0"DVm|)0#$Ñkdc* dHjku1%{B(ss.Y8qkث{&8hF,'hQ?.Wpa mri[oxmjk4B|Vڶu(RZU\6zPhѺ J[,EJk}k;_G?:߱Wݚ[)E(TKaEad佲VЪ CFL,4pt<۾f|>_'1n7&d+89"goǏo8n֗!89A.` #{5MUmzyv<_XO|q-4 4ξ]Ejb?x~uz#_OƐ?5_qL\U*-EtRa_BʀzAsaj.L8IQ Q/vJo-sB ©Ol ĉVUn?1tS*ZT)T!Eх*U^XI afGx[֊h23ܝHf>|U-`䈌 0'lTb@ըJDD"sQ"Z ea{F֖g @x,ҸF6ŀ۶ G?kn%#<8գ5)0ML[rIf6Ē is„] Ru#ܯx IuTe%Oh@NG0(,VN} 0w;~;HIuT >V#ޫ^)k|\7e9UeX[`$?5Y\ܪp>&PQ-Z˫cLOHt7!| #ms @UYxtOxcδt,Yk-BǺ4fӝsrkoc6NchD afR)@*Q-"g{$+_ݩ%RWlUUJ)i69)sR1]#H&_,+FI56>+$J_3rv(1"f6Hd]oa.HaEn ȵMͱ_c`! cNK=ЪH&c+U~BE~!k<$Ұx&Vk5~^(u\sgwRFmКc`ۨ#T߾ߜ؛2G|EK9&,UIG78yKǵ`^bgqG][3J]Z¶(c(Vp_L(Gض%9:G*xar|)Udq?lm?21϶mxW2WRU߾)KDȽ0oe+$6)PINy ^bM >W7/?SRs~9ZK7ݽ} f,3p>" coNkVSo`E׬c@ܿɶWfRt7R񦥺m4^6v}ynckAy(Z=<*8$R_[s|_CqP)|^/M2B#U`I3~ֈk Us {h*^% ֐pcXI>|mVaQ2=ܴ*|9{?".*h)8m+i9}90Ax;+@f RBΞT7.j4x=P_[嚙ObaU$9Q~M߷Au1h鉀1bV1L7=1"?> "U?~όZJi>i1^G,wupM#n$Qfջan4s63<.%URm;A1L⁼|u pD6v<~vA["BѴQYVv|}4t ˰o3яˈTV q6k%';99 3"~mt IDATL~UVUU sn ~YYҜIc}Hi(5>,.a8(zðb,M禎+mKM]5TUZ*ذ8X9p|Ghu-z5<[whsf>{'֋-S?ϟ?Ur y-D%Nw3ZyxeU =6 psx{B Ao{n uy̵< i 9uA0y>G"}'i`A;PשVTjq1}̘K1ɺ=T.ļ;Ĕkߴ~mKNhN CѤяӰu_?Wzu#[?$b2) -m=XÐYզ4-vY RJ)2,VPan1֌[DL39㣿+Z-ảwc=B"=$7u7a0s&eD TX?.bl *Le֚XTE)"20J71FJL WlUe%+pL4LR769ga5X~^|AD4|R0;|F9IE*L Z)W9Up?bT*)`f߱IJJnZ1qk' ;XQڶ,ѧc^< AqKk%nom&3|#m e~2:@oo߻z0qqn$)e3g Gsz0>ُvxzoߟ8眖~~Mt6ۏǜ0;}zou=x iĂxcͣѻN$h^UCY *+^} s3axtlE)Ђoo;9nZY|}uQ j?77߾۶ƜPmi3?1=,U)Λ*MyVbEx9F>vHo_ǁD/<0C*,?q=j1Aۮnj20H7" ޿ C Y+缒eU -dFiʒb߾݊0]1A;or|Rz)-AY1c&kQE_?qwھ}3©ZU8g.NY_a۶^)F?>h4o?qWɥ"6[Q}mooߓU%o.ʵ[bci"E2x>J6ʹ1תz־nD&q~ӧmn"oTwϙqOl^Ǹxgl=wֻlmV#cqd!(ͬOKV7&||~mecbٙW5m9vXs~5ZQjٶm7&y{l^GfGs>?qDVePȚ6Q՛4EԶk"1->?< *T״UϏWNwt5TFk허DĈD?'(7 y 7ظ>I l1n,ޟٱUP|,} WdPk^p1'8T۶5wk#I^="0ʊ;3] 3rIAh Ħ>zEly?Eqqݓqf>M÷7<l+{[+/^pFދ &aZ+Z 1u^x}S2<Rʜ HXhZ߾vGxJr81N9-<5*WG?~ε`߱?`l{aHcL3!nk_ * WRo۷<X!b7kZKGA*?^ü\ƌ`R2#5HS h`VL̄H#1 "ЭH~~ZN0"鞙oZk?H=3f}Y.49mNnox]+)Q{CkLę08>qpY!h5>\ӑtHU<w33?zA*Od .[js-|u-b)BJ<ڶ [;:ƜSea RfZQۛZ<JYrJUP:< Z\Ϗ{@ћ&Y$pp6TE E-#PmM \'}o SV3ǘ_/;{K 8ub`kο"kEqWm^/؄%=~TqdyJmdq\F]aGnx{!##5ͦg^9vLX`^>[xKg= y\~@ďv]wPD ("*:S7yfF۷9F)|7f5prg#`"<;}#M_?w.UERnCY`c#px/ՍDx%!J!&⭵Ƕ[?=n(<͈c w 4§9c VNn?;2&,A+ ',& ,`NUTДZD(_'g<4!㴈oӈnۣpS>oۏ,J3@xĈ4fעhm(D= ~E+ڰ:żϏ=sŌzvr?Dm"0ϕ>._)}_JA#c `>:hy\3YZHy^>f5-=k)*_RGBn|1㧪T$ƣޟmy߅0e{, Hp͛8S :PmԪukܢݛϏѿV(~O7}۷MDY{d$c[YO/[> h zksZN;wP`Gp0@~ih4p0 & }WD5gDK0FFhB9]r*R - |l[+6F9"V=Ë홏9Gf{UD{{nfP$N" @7L 6f9( MԢb#s\%JdX.S~M׀ب1M7Ì沵 quC m y^Lۣ\[Q-w2K uɒ 8^|#3 )@P6ЪzZjk71 (rZLl%7H'(6(]Qkٲ~}bk!W:Tv/.2e6|͉! &UugRUTo9E8fJ$q]qWkLL(2Etih_'@b965G-%SVtkV^xH JE%sU LΌ r0K*۬*,RjX"CDYvl=T6aWGɔY n}K2Q A -HS?;)KQKE55XTrMs~t2wqAޫ *Wfzw i,{U-`!R<,7%vJO2Z23P Zyoe #hRR)ns$@`*Eq7֢,$D$f($"ay2|<<&2ID)"}E#{y4s kۘ)A9_cBcp$'Nȅf\)sm 6сUE[ȹoqCH?#R4V+`  Lf09(oOd}�H%<'Bk7򕎮y74eTL}'AtLzVl~ZGQڷƥֶ GDFnJWc",x|_ 禋&y^?9|wz5-̄@-a-g1 .>bq|T HxlU3c&A h9g7[3)DEJZHǜZ6жVJ% x>X{ >Y,F7)s|_G .WH` BE,!A^xfA)(%Z{DXBb̉n99y۳>ڢ?g]Z^xs䪇M.Xr1-&pssRjkZ>%3#¦e3YaP 28?xz7}kR.;?B uu;<w,~Bǽw⾒ $_=W|>Pf!*WH[O UVKBz Qڴ9[U%b~7),]Q31y ط}(UDtV #2>2m3kpn1z֊2mDv^¾( a$""c<ǘ 2/&HU+ #y/myu3/ 7f01szh1N  Vܶi:TD9Ei<͇Y^'ZcϨJ_ZĜR'EUV2"qq\ZS$B趪VZT3SDd)EjdԦD+U#Ez^fVrX!uB{:}ȊB׍%5@46L`gcVnUEV)æb Y1Rv"0i=Ja,U1fjU N'ԃ*/=11k\=1k :3œwV ]ټ[_ ȍ[]Ƽ|q^ KZ  X 5}?3}@ J0n,Ja`¶n"ZDccܟ{,G[~Ui IDATMJӊu&΁Vbq+wn)ʬ+ *z|PfTIZ*a0Pi-#A:g'6؛*?BXf&m+Y4~K[SU U%PY{Ud>3km+TE2vPKnҊh$P jjU2="BkK)Sr]nX܍r4|q!f+D֘>2ik*Z fM]G?O.?Y4_:ǣ? Ux~:-#fl989?aLrk ECHw{:85lϽRK֢<[b4/4 D}AXBy sJbF7:" siƌqgÄe !y?~*AKĬ ۶=mk%uuO,2>̼9,"6x -nTJ)6}N1 x0HXiIw h[3\Q}a9DS  vE!ZTY,ʵH)BQm# 9 HAD ʤ`2\tULըZ0:nkSOt8aۂ`"TXnVB`L=92bFRĉ(hv> `@9Gҭ5f ڎZaQtCy,Vm)weiZrָʬHLbu^^kR8<^˧{! &gJfqf)x}}=7w9ЗQxx]gK_js0l~'gEYQ̈3܉1m HC ̸Yu=2LT52m%Lk;5VL/" Z@BAkoTEJQ6]Eç2Q"ݦ{Fܾe'$/cdIX`-qu J1XJ,uV`71h{ 1 YZ A~|u^?^Cχe EUJr$"ܶ⩍M'&ZZI׼-yƹy^X4qEk)ڮ+nD+}po-D蜾Kkl `0uOs Raי uZKUER+aJKsڗ_ć*@!Dk^.Z6WHC˄v!(6ums `;J8 paK V220CJD!NzH|RQXj ).wpsgf"32K-iF)LRD< s5 o`b [d~}E{<_Xhxb֋q9[&wkLy>ȉ9E9 $<`Q NpM{QGi~~1ۛXh#8 5Gw*3Nz)̐TJIspJwqYBtl5e ̘X$U jCDܝg𕩕$|cvÎ}5D!JVLYdHDV">>׿2=,z&m)Ҧ>c$!}I$q}%B*箖1'ࢺo??~uNG6% + Cɗ_`Vo_JcLOw8>4ZZdϣ:|vl{x^13<%I2QJ%LH)6 O1r!E@J6WH)Xic!M(&$IqF$?4zpf$x{4,AOW+߷V0gw&,N Iq:1譕b|T9bY:<4[A0KJa4Pd,DHi91 1/ a:JAkmx@D+  3q<#բ%F "JGd/ g,=&Xf-U@u*KH ץw~>*eWteu@4DKV^ hjG,k{5ןF$)vs2m2dľR4mGm9{rFا113ADZ2uigR9"c$[i f-E4H!/{f% N`坾݄sN#mkb9ǘf!$ZMiPa9@] 5 fb!$kXקl1Kdzd2̖hpkfKuR ]SZj5[C ba5e-j)6}XXp $BYh!=E:ʐfRNHB!DUZx\@}}qmAel@8ߞU<$yъp&sʼ|Em2(S_= su]c%3eޯ 5#̯Dž{DRx(@Pm6"L*Po5{0ApA ? ̻wĭFo>r5oJE0DƘDafIZS&Q($g?ֲTVHa"fX*,(Fctqغ<~Z]hy'0P½IG)( :רfL_<5^]*`x! .@ꊐAGDH7t J)Bmn@9ƪpYH`y]ZJunjR4o/hݠ%n<9X5#jZJ53pTE]ΉIiCU"c"S#̧gbAf8CBDĤH"Z(|I$cf8 !"3X`mEike)EXhybϋ]FzymHBEKĺ-4̙Ѵh%H%-ܾ|dtKVy-s5f`GC AHYZf&{N<}>K)ʵ%m=! -٤ZR@d O&Ji6Ӊea˙DXjlQ-<#8kwےbJ3u/JPht~~ք ,!JLT5TDVI'EY)H*-0hyIXcLnWջ8_u-0[X^ѢD$6jRt~ p0>gx8ATF[F@ RT)ʢ`De-Hf IHTZ832:y]kNupN#QҎ#_`D< [,t8{9:FRw|a#_Wf>M׍N]"3Л /! xuU;ьf5~}ΫǜB@`7߁=ܠEs=rhO{aoS+=۶mfN V6^"@Pw}(*}oR4IM9ٷ=V­EB2 sc&>m FFա"Z"H\@EaZ_Lb688Ey]#B"BLf!bRyZ=,Z˪RRN^˖ {B)Huc&w+xt `5ګ_^EKZt\|G%ŖMifFL$+###8 id5{^\ / &]`cuoZLU"H(RXPV"*Dɔ-̎y(QjI ,*m]i 8At9WZ eh{xl4mi |}"[a: PZJ}>\ L_sx"V}^y!9GWYqaʟ)x<[߿&@^na+LFdz21Z[ p$kX=ETʉi"jEfv ZEG)JB̢Fq^z-Sfw3wZ$immJ-1fSe%d OHF6G>V*bĚ Jw<i><mݗ j0JAi$* G7VJiov(&$ʄd s \RIͯwF!&;@5 6i2, HD~]6 `I3%Uz1H^b&= cYuMnIM_&sj=ܶDi˙ƘrXTRaM)_m>mF@)G?4r$."8 L(f)ھcGmCD~Jή0?Cd9[~OՒF+"6U,D$kEBu -Īs}'!1'`I"dN+̯rz((,Oxݼb~!D.K&Q$iG{h-'[d,F+ tk kR9!s@2#^9JzPWD a B֥b0}BH"TYlR gD%Lп6[MsfksNDK9J39&އp;0\H*oy$]?Υzٱi234Y]DG$d4i3RXt핡3c4AD$"GD]x{O[544FAε9VJΉ@qoCDVn[xi|oABAf1fpTsI*:X 1{kaFY\vQ2sr8'f@ l=/8nGM,=UopC*@>qJ&Ic,6r~ S3x>;Bo 1B"|=|{{c|b%8J&3!$ aNq-|ԂΫF$%nY Rmg:[CH ւH`nnWW1Rs;hDwM5+(O2pVH$XnYic GbŰsq54&|{㷽$br0ԇt䚭0T~{__><cNrbs)e ئ_m8çpgViPqJE5RS`jW;y/EEu`Ns9ʎD)X8==|^z "8ʞl߮Xy5h_Щ%\`m<}CNt^ m. 'Rm\[͉cyyxnS.![[FmIR BRYb9zb6\L݆Lbʬ"R$,Dd l w8c4$e>a2:њo}UvztmZܙôގ׿|ά٪q~W_=V~/z^?6xN?^}?NHn,MRRtֻM>PeU.I}v1=efcZc>mV pƶۭBOm~crNns\cN9o6GhҤu(c=<5J۶T#jM.AU[oͷa6<1v}<ӜIxu9_t6m7x \̎)@65Ō_pꭄIP3Z21FkgMUY͏ioDa6F?ٻ0՜@GkPY$4Ft5IƈErDڴtx `PsIEj|:e.10FؗhA4FOIk-]}>dkz̮W>%%bV̩*Txt Rɝ8{J/> c-?G.P㴔E Rr5a"vo>ծQ[ɵ{if9.K>,*ʱhyPMY~yW'HV$9i)G'cnu\a梴9>43(KG" }asDD~{{Mh\TPK<Auq$(Dbe%|63r$\U1EL~b ?P\HT$IkGUl$--UihmKҼ "f6"n;[]Ȋ.t+Fꖒw)>ϳ'2=ey V9?8WixRBJhy-ݾcn9W>& I Ck'|@n;Zmh>d2fa4ZR",*?9(* sJ3HYE%~1mȯ(՚r֜%e 0.9s\`}ײъ{5XC>3MATsyxm@[ x~;rgCU5>XPj~Wv_,}4I_ Q[3Dj}I Kģjn>N 䄽 sDn`^|%+E2'|^mǭPȊ}9fMq=l'Z{uv%[LãVѠ25WW ;'fy l&!/ȉ{Jr߫&f};]}aDhooۜݧ#f5{oۻ÷|3G7k}98_9Wr7m͈c4V!>mksZIpRU&`fۖr8haVV3A4 1{ZXh}r) hkf+Ñ9>?`8C_my}EgZrz%N\ɽW$k'[mϋJW= n,N+BU7|VT@Ur z4em#H5}5??; /y8{KYsVt{s 9!Ht:ѨϘ<#%'&2k 0tTb1zz#gJ%szp\k93yR=i7e]y[ݶu/vq<}פ|/T.^@SJɵnt1Cn"0f9 Dp_p|PZʭn9e<a"rRX0\X$$%M%K|^G2uF"G a}󬹨.sL3ZtU|th)r#|h:XuRAYD,M?>q0{UwkE)J!UڶBssdBi0JFA.ob6:Oesp'FX#oVH-=,"c66e Y eW>SovM8g΢8kR3gm?O z5o;MK > {6>GGNw3nv~FM>A\vްWj' 4)%m>`|Qo0",D/,L7fYYݢ7k o4c1U€`oy`_޿y a;3||cƘdf&"P~glU㷵zp^  j4ctD-HBx)Z"av$ nnEDw$ʚXcF CZ)a b&QM3‰]WkmIUNIDe[Eiw9rzyRA+咅ID9'>qX`q_5>qW v?]J" ЫMێA~an 4^?󉣣 9ct?I6d^W Ul[(% jAR|>dN>y̟?0'A@iD~Gά*DG/ U*IU]AQ7rOLE߿RTUXկgx7Ѭb¦uImYd ^3q=Ѻ l7z{DR?_J `߱ofMIj31"*c.Ry^m ͈RIl4 ǒ%/'cB1̷}3In3J91hqiq^l4M7fI昫яUS7?~|W&G1[깤zr;Tnc]5 s4B9%M8_[ԜAn"xm*{i]]%'-*xygN[s}>Fo*9MKBu^!#Gu<-4.z^ZoH-ע¼Rt7_pb\(T˭8Ց^%߶E$dӄEY£9R8bƾRˊM֙YDf6qmb$۷n*2f>zuW7ܝH$y>~\8"9hGpx*vm/ώW](G8Rrur{뀪ITuai+1i?2+HBT r>8qMq`lYq8gAkj"_'[%f 1#t B6N`I6g,;o$> ,u!Wl|XvR61f "n1{\ٮB{ml*1ZW;et00`j7A z5E7 u.qF/hn汮9E%rʉ Ⱦ~/LeTOU&%l?=\D}ČϪd cj0  KI"ڕQ•ek\SYN}u}^zIqs ;<>?~|U?߱9L{)\[HAD&@>(', 9AĘ PF kòH hǸ窚SdKQA{#1yBb3qsLaC&E@$4 ftj wr!EX1;lę5$}n6'Q)KPH1\s4gVIY(5e>$Z9V-# 0 00RT Æ{F,&r@8l`q4imiKffc,l;H,h5QhJEdF̪LcLwb@}J5>)-zZֲAs "cy|<sncK>kh¶u79$шJ9?=%s8J֭Jt>y~14[&`HR}hz0rD-(@^|Vafs!E~1F~Μ:=@#5kڼ .^ߓZyU$IRN+G4Ngqt%gcDDj8lj1raTjslFΉ: h5h, @O8t *mU!J=l3`fU#z3JΚD׀f$yQʼeI&䂤>X^T(+F|-]ES{7Ra daip9цV5kG Z!&&cIlmIaA*wUeѻssbdkMÝ=l-@Z,bfv?\V9tZ'Q/ &Q1TK9& 0IKF"/MQ9'fa4PyJ4_61;cx>/Y_-ŎlԼ^Uq^m5%m?>Rv1ۀ&$!hTYl}Y$EfN ]| w9h-Z*/+ OH Ͻd6O{Qe [D,%fs\ADPY@-䜄)"zܢgVB&܎anPFΚqyuzBQ#/_ &/pTXڑ5\A,̟? b'tybp@0Cx}hg~U (0Z #?Lcc'爀!)ܯ~^ fCKV,$bƳ % p|A.eS8́뜿1!'8@ (>-0iEUC*_Y H%B$f3ɦ۴Ě k͉S`$&f b FD%#UYx]YX&5E5o6ҊP`OT8՟< -q'&=W(0k큫s]ʴ[9!"~{jcl:,c P5̼z%P3n%Py| I TYrZ=6 a}Dz%I-nGDf@(s!'$]2v IDAT2T<8P1ZD+i"<^kHhA%(K:I'|uDftO Z)T31饔R(#tM֦ӦGyM&rmu?yvbˮiÇI3&+@ 8!Z 7 HraZ#5 ] z;mY-90D̅Q01q&8˓n-XtW*$Yo__H( 0+/93ځc= Kdj5yeL:] (%,3hZ5Hd0mmY[Z!(<_3VK㢤zV #cI2Qf3*Heʰ~]}42X{Ӯ<ݍP 9ITfnBn'xzFPdP{:*B8#03[l5aB/ly\C/-AC$iU#`LwZew_{z&RYRk}% ;>r >'3ݷViG5A D}i3kKc!b 'JVa&PX{BcprYRiɶZl`l|ڂI붳kL'7Gbl9x7U[w#x %-ٶ,%1 3ܕR}F6H*A@wM*ZJszpjZE=ǴeHx&nm.^\EkR${QR^x$(rf=M#r. w/9h03"ae&ѫ\CIJ|v?acl[XLc٬Ӡ%T~u%&UF AUxgG[ceȈ.̦eUbOv/ '|1|͈(2p L9p\$,aj"&ʔz*gc IB\lmUK)e"0Qm7ی O1-XP'ܱ!0I?ɯQ``qu"hMhU8͉97Z6o65tE μ[dJ>fD" ;?j)Dk)FcΕg" 3Xj*p9%{hfTFw.yO31%[ F@&XX犕^9ߡRJ+r<>s3~H3c8YfeɯkS F:D%" 8^0Hf$^x1az\8N<pZ?8՗vUԪc@ *< $,*sGs\Xf:h#-ĝˠբ=}\Ǻq ۘfM U 6z;U7|~۶rO"[bmX\vjDBn(mi#҈sIwcB-+|?֢G@$%OR508RZc8` JϘ} hY7v*luN3|gA,YB),,F,E9oDmE@Pe!g2d4$)OƵpV7IEKk |?2|(<-F^"X"$ Vgl<|t80 [V[lrۤ*<' "__@ | D$c :_\׈10Fk˙XS* R&V` #,\ `UE{ Nt1D%2Pw-Eʴʙ֚Rz=Ӧ.};+b\ȑ}q\ o%3f^9>;r:jDD%Ki)8.7۞D{ۄ8"|u\2ypjiMH,E[N1&ʘF;HkMy]W8(Q߂ E!!*n[۪^VtKϐZt+Az~q<ڪP$e,`xJ[5s^_6YisEvjIJUʈ"DqVK^wl45)ɔTUDKct_g>݁UK%޻R˶߶_AT8,Bn橭$p岣EZ)f(0.?io9{Df3IQR} `f ^K7Z1"sND4 _IJ4U3ZӍ%lWز HBrq݄WrEW cXpnvNʫ;7Yx)<^A]^nJ$TT@dED٪Kf>gDaHiaK`XؘL/YilVNK`Tˊ#R hy4G<`,]#py{^x\'o"KXmx߿}klmzci1bZc&bdR\Q鲞6I:&b$!@DIDR+U*DL7f{Puk鶴 EvcSo:Ȉޯ**úERbv WH4Z*B>"x8 |\`5ƌ1uD"Lw%3;E>=hE(U9g_/Z)BIzm, >?ZTH;3a3#|.S"Ӂo;!V֘2) JYʺZ%Knu'&۶]6"DuZ Z`zfP¥(B >!AfX((zeEʪ>rozQfHa-**|!*[B1#¯=cBkn/Euu!yv9-U)*;%8x_kvc+~kvjܱ>' UJ~C+xnӾ~_u\}R%wg¼e33M #ÁJaBf6)3@DWawHJVfh^ 6`&e9&u(Uj}~>m{ii#4O;\,_l;m0a]tHpt\>,vlsWL0CB2*@sxy 0S{U c߬ZQ[-e&  h v<Ǘ?/tc V wQ_?ӦY59O߿߿u>B%3U9S-Qל_kj+`b8|/j2xVtY~߶rCQn#{H_Yi k-ѫVY~f3!oRP{ jBc9-j/J7\Ay}bNtN'ejmD?OIw2f}c川nv]ט1c1[eO}֞[cJb'Jr3>& 2st?8_)|a XXM:k]€!*jQ!?-qZRHxs;'~ 2%aL7f[m C$O3Mt_xL "*UQ}ÞaQ"EYly NHCYڈ"-]n*>3mN  m*dEOwU2>~߅}G!Cp!~?x_<߿_}vޜq{{}oMlؘZ__WwI.̓rZygt\➴ |x[EhU2R##\='5et 7^ZD`#2ۡZWFd}km%o{&uvT%jǔ>V}Eؠ$Op]$ axUUo[՟? R֭HD D**ذ߇͙IէgUD'MǏ$"‘1gŻZnM*Јeʮ{I[*:0O } ("nHGVnB^ bXտn}Bl[p9[zR"Uւk Pw1spkW rR12\Zs<QTav;H!q`Aݕ9jUDl1V% C531mlnvyy(^i*pz|}>G-[Ƭ .B4_ZtR(Id>C*U<~[) Ú0RZE1F췽>"TH[{L)\!Dm3$sqH?}|7Yŕ$^UJmӣG1jc Qo~8vӶU XRrעm4~h{m*%yu.I`b8HnoTZ9RYT)AZԔ"$P{aMca*?@1|pDDL9"lBDRGբ .[ݫNzdz?7~<8_vKx\c=%j+EyRmoowdH(5ޣ$"ۍ^{} W&fC _Mmc꟟k$˳nxovES8("l+ݷ^aկ0rQע"̻nDu=>G+hydy(~։- U˂Dbh)s!ׅ3JZ$ J1] QZ&{ :5X="@k$¢M*ښ IDATjR ,DRFKa~}ZyDX)EmEY N*gH)%J#R@fHh__q1^>us"^_`XUGG @_h`lf}Ptj"rxzLG$]\@ m5m<[%3f/Q8χxxB:6B0%-Yn; 9y1/s ZEQdG c5GZ!Y~LxuX1c~-|Leͨ[_DLhwZkimDn{Wdn[(oݧ46p'%%8pZӏXy\n7ԊM]cγ W톽0yU~Qs͑[AF[sVyk:y&1iz&ĔAzYffe}sL+{uPh!)"WdMƪ:כ̇1V1{ϯ_J5hmy eX.]7fJ9g`];QUb # ono[=g%bx+\UZ[k?_ @)XŖ|&s\d.g_k 7^o߿oR-JUKek>q#2Bay V9)7U&~]_ x{_bښoB$ו58Nh oqۛ"KeiL3NfG|~u-H+R\=d'> K\߿ ֘r~>Nkk>b/E2YjZ-|aEr)tU췢d> :1qv\nwdYp& L\(#)=)S,\s\[ֺ sj} P,r"oM 2-8>m ] a ̗@nRQ  iIl0D 1љ 75ȈZfL.}]W?γ &Vq>M qcK)BREts$a60B]L2 2:bЂ@Z};JmL'cb{,sV!<2e:߿%U^Uz<_7M3gmR0SGs&^Ut3QX"V0>3aaITT2"ӀTR[-I ann :l{{xge(`"0_}L_-d&׉HUu^ fVՕ%&"-%"Gd3__cl & {4*Z+[T83qmo, J&1mDxz Iv7K)VGu"jڶLDϽF2Ue/>3}I1#&L$L mo%a5zJ29B=<9l\}Ie}V(q6%@T@̔1z#Afff xʢ|]6\Y'W o@Js-tJKHhDk"Z8ZAVi 3a:'F`kx} xu}=:nmOޯaHJ_aV{۶V^я缮B?z<9WtHfcJХ.k@1g\#D$ xE[Cq9*~οo__kvb|=76GD-ya Eqo}Mo{{1+ưi qV||Gڒ"mRrWXw4(uSDBɅi*W@*n-=$1ףvY<eQFc z/;>>6bs*(ܳH2s2n/X+N;n_eԪ zY,a>9#_R4ҧn2paZ$W? 2H51V<|=ۉ_qZ8TJBuߺ_?jlu=-X6lFJ-0SDk)I__Xy~H-7-<_KVRb%{VHMjd$| |b̜uE<0 %3O&bV ?a$GlYn0s YgHTeVnf"B>d[ڶ{0 a8.?/dL! N<%INds`^pEk`ULGĚ(= h&'NA)B1{ZpPG~A˵fFDEUElXH;g9Fx>7ab@KԊ@/kIkgҗM@K&@41z 9y __]jBAO#r)=y׽@Lnæq`J>k٧Yk\k)LR#uxY`%3㼜8k-z##P$xx*ZD<{e" $DE7F+@.9|ŬW*g5[{0(mpJτye( +^O8",/7VSl6;P M)6m[ K̅e*(MCBlI9)պmM۴Li3=YEH($d7su-$ Z\+x˪-}1<@$ c'!2{) _O9ұm֚r&RM2އ#e !ĸF߰xu]N A)ׯ~߿Bf( #̳4pFĬRE+` YtEu) όV 3Qi-U+ X*U $U.}d# AMV׸F-^+Q7f#ph32%"TLA$9yRۋYf E;fAEզN1LEIjnI3%فDp3m1{T5DEI<@ ôڶ|3%̒DcĘLDN*09DsZ$'6Qh;mX2eA^w_PDF;q)Z"\2|sp&bbx_GO۸rZ#|ڀWMwFh^y^_`j~߾o[UJ̤*Zٯ#)Zt蚉UUE2b̤KɃRؗ(V0!J%sjUQw)3?B1Y{Ƽ G#g) "T]sνy09̥@ٴy}ۤR[a *H\p@h-E"_3u^5꤂Dxh@`0s9ݝo<Hc|hizg|\߾؟!sX"g_pVOn(2l" 2 &R\+]@9ǒ M45.<_߉D"R66}ylG((tBFrcln`T种yæuO(M@T^F*Xw$`URQb#pu Z"+(1?~w&^u88_>嘸moߋ\ކVv^ݮur,nsujh&kd(G)MPbI`R$Dל>z+79#<,|fj$lGώd"MԂ#ܫd:|녏Oκ-@G+aur Z}}\0(aqny)s/2WdPls~}ڂ0dM_e f!a^XD5"p@UEDdI%_vFbS0(ٜٻ1F)V$T.#݅(Ն#fQZ8zZHjAZOHt#kIp>6rOA Bu No+p٣3(U!p$iyNxqѷR۾:[$%@" $(A}G6ƌ9^1כPs{5Mt629G,'(zVLژ1GLB$101T@b V"Xy,x<L@\(- ww# $k& ,5 DmRQeB\JaLE60v-*ʙ#}q@xEIYGM[m0H/~G,a(RH%AV4<bgXsS |9ǁρ3RЗGwA`*l9++rDd }߮9,bQԉR İH$KL3]e?c㉘NQ Z[L9cnUk)e۫9=i,:iV Rᰉ`D!*kV LyyZQKQzHeI;(S6_V᭕%KZ~fxFdT8|ٵz90j !+$B o(OVJ19LA<9WKDNPj}BErM{R#3:Lݠї,A', ]Nag\LWDXNkRUXjoqu7)Zt` ;NC %|"y8_Z̀Ps> lD}LHC#(pNXUo9%<"%Ԫ5-biTkQJ;,|F>uMB6p)nH&H _>1)RI y\Kh1\EYweZ}1n8gkaB}R82LZȈ\(8T Xt51oX[ I.uq#93E /yݘ8r'.:odOU=ϫN @.*αa 0h{gZ"׭@Њ--nMU9hZf'̤ýp CK2kUd-Ey\WٚIQ*Z. X-'Fa0=o,inckX܈؜sR g<4 |Ԍ ϢMH)AY4t㺮sD̖WMKi=y9 &Ɉ 9&cCr\ғL$F"Z&Pڎ0w6#*IAִ|cvb (<PV"@,c9}0fv( `D1Q*R w61&`x}FDx&S)*; 3!ech鈛 LQQa-!x*_~ŝ(w3DQ[™ -ԪUf7~= ضVBs10:i3>?Ͽ9Qs߶*a$ԙ -.B*mhm[cO0yRڴL ϰHU'{q֭+ bup{{QW#&RPY;V $;F-kbIL+my x43Ž %p>;Dc=ۍ/Zz_+YM#`HUW`M,9ǜ1;l@?vuRźmZbHTBwYi&@rP19>k!&ʀJ#JU_ R!`+O\J$m*鐰W^~~ > W{Mjncue9-֊0 z',2:uן:~9}WUYOHA*j[np/THT߿ׅ9̃PaYRtafd2-#dq)WFfHƘ`cGb>&fO$V ǃr 2q.5frEf~>, \i vM"dXR$2""04at\Ǣs=̉Hw_rK#p\Xj̥;|o hi.,xpfIX@̬aMJaWHI1 3nʞd)Ȉb0^#D6FҜϴs9: bf2*JpbrDD&D9fefBbեzbT 21q220` #kAi4{ pC$a 1:w{}}%~ ޶E!N&IHe.B F:I}V3 Sao).yV(mRAj5?ssx$oo5~P[smZk.ʗH\G;1Ȝ.Zֶ}ܧgܪR[FD:2Ƽ6 Lf1O pv 3=VMU gfD"E%/)%¥r)*xy(XQo72 Y <{V*N맆\ mGm`:Be-6<-2 CRA>#s øV+3#sN*>×2?wU:}RaF.pfYDg_?CJiycǿ{ _+KR/20I\}lxf=> 6#' (Mhf[ "#D ru0յ+*LcWW'@cD4W?I"DDį\=[$@+oUى, kit7#Feyhǯhз̘LjMG ɘMnJ$ąTH󈱄MȴVHx"8mm|!Y>u D4Os#~Խi%a9_ט=08njcbo{cǾ[H2G۩5p,*[+m;JcJ[52G8 .EYbZ1K$R^+bVD4ӚFsFj ۰p@XĬ_@jGZ-Vmb(#ʖ>f2P&O J)ZKYxRy]=6{+ME9Zݷ= 4Ȝ|GC-|xG7 w< J!4}@EV)k?ݣٯx@AVv֮c-y]<@vҦE:2ka!G,D[auodoV#e+oiǁ~}Ubn<=IX1,'1V#̱ftbӯ4&񲣣*o P"-^pbVVN1_o H2WHT)D>9&Vì~ Z,8лH;y1 *Wwv׶ay`LrPf2i2"s-AH0TȮ)Ow"؄;MKȊ.Hf:R(%80UR*ǴNU\2AP"zqEHR4w%%(ooKp^g-5U}/E8CY5ym3sbl[il[Ɯdg9𴻌T Ҷasy00c^WZk)BqsNw턛KGB>[ J֊He*}r SfԂza*O< H ͉"4!"b_/8₶o,drTkպmmm!qsj)s}9 &0/ƸL䑋X/b9;?? ̝=r(B2xn`7g,r*̑p,:3",`V}\Lw S<2q|C)ED¹鱺j拓F-N fb2_͉L͕;{]'cٲ#`0ߪ*htHYyХ<0[RIJx<J-Z1(0VcbhrnH}L$Iج7QNJK ߚ8*%eD؄2/ y#" drVǘ-$iimYl9SdrY8`,*E@egu0QQgz.؅'3]kIID >=`{жHfշGF{ĩe ȫ>c%:#=nqDz>sޯi^ ֘__6'J@)Ok[E1 y5( m#r~^RAA9'ɂGqeuwe1y1(xT8ʍ2}>;p{k>sÌ)"gRmeF-h)z=˜T* Oj8^/SExMO`ލ%iw [uv]PեRK)UKR4mNsH6A`1zkMPaI^dѢ̥J"3|e\c\#(Zvc{mg0wc:R 7D1?1TYT6II0'*#ct#3 !S{e^SMb"*B J "{Qp<1#T-$rw#12]ҵ0!1E$YtӧH.0! %M ҮVbBDΞѺoiF3f$9 lVYf49|\ .c)>PKZxYIsD?9,A@* Pλk_y^˶nf6}sFG||92Yp~`TTuLcEU# 끏Div|X/̵XZyF`ڸ"ax oogk' |{{\c ޛ $xu@עh綩*Zm"&Fe8!e:#lH@ kSU%<(!3C`!0ɽw_O!Oq nmW)+o"XUe{<|&\EP^jf匘cG|{?c49%#>?1&ߞV1 C[-4̙?0 w$P5T~<#630`kxhUy Z3R6)E[-U_#r&,õ 'SVXquhm÷ʌsgL`+|LDYlo{}}L莾dB @捕ч`פ##5)uϟ?qx{[VI[a$H^+ COPJR>GL!yi$"Ef uc`!Y!rVs9nXrQs.}=}%E8x(xn@L_YU `}~?@+0jk21ZOƴmCa@ #L[!W<"'!Ry.C}HSb"bAdE.` I+z#W)7z>9mٕ9 }@k_?>_eEiRyXeǍ_9o"r5["pqQdcfBdэ8@UV<L˿̥9SHrN }b %PbwtێMi NYLچڠ0nItcXܑ9/gJRmT5Ol;޿m= i(B=$~>3#lC*37ߌUMTPs"3_{=kvJ2K}o[huk`LVZ5qsp7g&* IIP6k>2n6|sG-hN!GigE S}ߞo5,^Wz/L`dd6E ӑ=n%j)Md:Pzpy>>~vH[|r!fܞk2KNZPZ !*}\ p<uJQAGxmF*R6g fm{ N,B*F'VUUF aF\G֤>{nDRtkml\}ZRXJO`6}8^u}ܮ_D-3Y}8n կ_r -yekK !;Eu]D$d>KQ:ƐR r! $D%)"E,8_G@< A%oE,Z+ɒ!E>p\&4Tr1u71uݴ1(V<c&-"D 6fCg-ҚVeBe=waFdanĖҩˆ:~ugψ){0/#݉wJXj),J2EHQb@XEyxfpg$<~cc-烉$KX@UۺbrRufa3 gGk}l>}@rS -{g׬>߾1^]+1eǿk30#jQ9"Dmj9/1?>q^Wקu}09q($=Jc)\fMKee0K!Znek.B`M 4G [(``qsou@dL!rkaڢR# x>^H$LY3=#|ڃXS9y\ ?_?Կw-;> ogە\:PB HEf ("*(MvA@DB$4үoq! I|ۙyޛ3tX,DaaMU\﫚F$Xx$tz8\,` @صHe :1k a! p6=5Ҟ98}A37#Ua\I@Mh" tO^:q6bstm[kN!5 8fO^F5p*)E p`L,SYĄ_)8G@(\ CBP(ʍ3%`Cb ۷2Tu JdgI ֳRy !0,B,Ba՚DcRCS N5ovR7_3.1&GiW܌XUU]kyfE5yrHe:]H(Ӫٜ} :OGfFkKUABOc/38yrcxܾz 7~aRX$k&9=oDŰ,[8e9,Y9| lJІ`JzՋB-68.{EIX,#x^s`Bx!YmROs:W^bt(O[ڍǮvl4yVVi롂NM?2/i$i=!j} !]Bd~P7z j":F0O/zh?ݰaspH\FJ58fM!\ op,r,[8xcϝ;Eh8 7()soघjo! 9z*{SC Nj15Wj xj<@Q/ٹ&cְ^CR4 ]*kzv dNZd9LdGa5eArR?pjU/DuBBO)EW'<.5ߑr8'HN{W$95wӰ`5 e;&SVUdp8UxUQ)Ьؒ),9Ø<0bNMK0F0 cuڪXqNp$ ,f3֫4KӒsE&>7O,21*& Nz,}A|$lzk6 m<ϿtU޷IfIdI%م(_4EUUUS5M$ԩSSx$8dGUGi;=5:IOQ]\A=$9bW|\>6okדY,Kl8AF p,;؆FÔK7k,|A{]ԝ<8Jv74m?~wߕ}uni;nWǯfTc%Yds(]*K 9CL#1"i4+=k$#fy׳'Sp,6z,j;-tZ'wԲ(jw#Vex\h31&Aaܼ[볗qȈYjϻ߽3÷3;rٿT%MbTZ:<)<L6ۺI 2*eY˔*zimb5& 3w*?GWMk6o‚*^xnºs=ӞY?wO?샧o~%ɒ氢)kHM4 c5 ^)r…\^*؝|gz6:27.?,c}\>J5ߍs,r2Cv?ow*  HtoYҒO5$8_70jf3 ho{[]ɶ MKJ=fȨ-;ow RIDAT%)?ֱe_ٕQ 3+>Yj#t싴)w?DǽW3C$\o=)M+e:'Iho鷙/֕o۲mV.~y <0ָAzNWRf|&ՙʳvU#AF! aYN-հ7OWݢLݻ~ nPe+eYh}]a=fP5|)=raֳGyHVk['&u7N]PPQW Uw9GOK<lf!k&„[9"={DX1 lt;rM>$>MgqbwӹMז+I]o_]-D&G&{ڶUηcݷQ.]J߸i˚23lb4tǮ׆~bNP~,G>9oSGΆCLQteq|pףAuXSvdWMaȞ#Gv>wkw[ę~޺4%ݒ藷zJ豮ğWٸ@J'@V6XmjY`qNTYIšjgPi뗫aoPExh:mᯒtQVReGq7nj<ǾS ׶{)Gd\ASޚUz(OMutO7wB.;@E_-Tޟ0Zt}wm.RBf3{|u?g\a3o-?,I9;g~댻חo0pϯ?l9 JN>ygқ_pg?s /_;Fwis}> 7>_< }S4ò"k-u!GrG}e}`_ 'OPq=j@1ܨ4-af.VD|dKbp_ԸڍhF=<5CG,~S/n{ _XAs9]By8t^^XP (N)UJ|Mrtzslm/d ?(:e k}KZ%vrWsy +n,W&*AU0$SV??TI9{ybU`ڝqL;',oޘR V/ȽoԛWx߯~ŏOar2ѽ˖0)|yɯ9/w`W}fͺ/y+9k9G-)\>{Y& jZo#~H6?*ϣuig~Njc++zJ豮7~E.a͓##kŽ,2:%90@pf:ȕ~ 崙;?ƧNmyi.-2Gy<\<:Gӗ2tvm*{V}?V쇷,:}gsYyߎ٢~dzԲnXE=7u΢Cd{o~/(0UJ^x;XukiϸvJ )+\t6ķ̋'u+e+*h5 !F5OLVQ9펬lUU1&jԨ۳2bJ)hȑyth nr{ѐicO6yK2ovh\MG֎o̊ı d%ݮm6CgޛG?u9Uɠ3+QgY!Fea4Mt+ 1Ԝ":jO|/'Nx}Oyqwy?5CA/ʲHհc9BERrRt]Y(j'_hBwpq62{ˏqaXu`^RhvJz7j#fxm6vHQT\גtC, 70{8fR'~筜s:_({]/o۹)^SVBuy~mf N;,ɓ%U#I838D7oRi뗫aoPХ\İ#{àGŵ/9  D:ϣx3jZ].7t婮}cwQ.D*<2zܕpxUt93˿XԖ;ܖgr7ŐF=nn`]nyy9O`%YtEؕ8u#MX:Wrf o'.0ſ~"^ϕ,-J&R&F=//_Uew)ꍪ̿ FbYcr|xXͩ I:/Mݙzns:{`O:MK=1JAy/Z;{ݱ'tw.a"`B (F1&'& 2Q#J(|lX1͵< ){h#g.o[{ptkU_r:" Ђu  ;䤨u'LCTQ>N]XCG!.7x"D3+-ؔem,9ڕXC@m_o9G^yw5—O]$ IdPT]~/ov=_DO_bϓ*ZGEM~s:‚$2 Uh֢y9}X\ 1`sKXghYQsxݲJįܟ)߿:/ˣx4})<(VQ]]TSy?'x><֏R :v|c]|vL/.7EJtE#zc@{_Tƣ%'fWαk fci\dm\ub\ۣ-6:\E^V4S)*,LOKr왴F Ekܰa%4C#k-a/ycU/w^_CY}(ݗJtqq>>m$&X2dZUU4a18NDQ]ˋ<%ҝ R4W[: wyPxrUqy螺kgXz,"NєAV( bj ,@Mc0DkKΥw,1M\nxkm~Qm::lWgF-7̀X%;%mh=#]ΤOLH~zuw—kV#ƴz^)^|h\ ݊C^go_j[N>7 D*T@Ad]ƍš7oVi뗋P!^Y[jE_nZVQ7(e˕'m>y|;Gӗ&yX_TbV~fN!pҶ.!:w3{=;Z&?qM,N:5~Pub'Z^TE]]TOL)(co-rk`*K#z}8ݶߙJ)a=G-ޣ_ ^/{tLy#e\ J2S1n̪G\鷿SwomSsݧTizCsy׆)ܿyҿ-;v4:QŠ Q/Dax3V)uҩriJnҭgR6mڵ'ݭhYO~;wO@^xxhh`D(5BnX ,v ;/|8M[yx-,21Mߕ?:Gk{d..sE}s/;0 ]gH 0hdI1R Y\ZS5+weʿ& g,m~ơ Δ6냓\t׳\Ʒy` d)Fm&_K:`s,GQL}㣣ZOR@Xm K>4v퓏1b|uC^H%[A@2Gm׊vooQS`֭u_@s"gEA8!jNgIH]wy9|lBWw|kފ"9^8!o k|EW?e. ,`+\W_=N8#b \dYYr_.ܫ9pXv]vg:a%iޠR+9!)iA)(T5, K,. 4u1Pq^! ` l ,Hc02 "X]*+֜BjkLNz* 7bL&b=rJf>ԏh̺fxs`'ccaM~TTD0X]ǭxHepuI׹аl( OEKWI߹d*l%݌$jxucQ1_n\gϜg'[,6L1(Rp>Zj$?v i|Wvޥb&rx[*Eڬ&j*q|?_ N2  <&61ջhS!.c9uMv" ȓ:,ga>ĩAk)ukj撽uGB2艖ۮiv*Gbybrī1хZGox9r!a(\C7='Ac(Ubѥ籇‰Hy},x1p̟NX?G{JHjy2VHo]v67Dd  9]&zZӥ.CNӹ[K'<{Փ`fDŽ̷e5|fH-kFcqBEEn"h{ )ɝ6(C5|뷳]4g:}Vuc2Ä \,n)s#6sGs8ol g4;kfqK&7u~)|7zlTv1`.20xSVтn;06pN1t$bMȇH^t죽?&ӳ}'m|||?_~VDƸUS6{Heq t>"m_jq hV.ڐ. uM]A v[ cv{a &M,G>dYns_h`g/|Qއ;7?䞏Gzz^xpYxDk!uiI+tI M!B6-$m뼲m{&{gx8\Y^l^pm@'|+ؚEbz(%"UɤQ([siڙ/ CugKK ;E}|χ&95Err\xMC{b͵pBRkVg Ok!!Hf$f$*DzLtO}@.ۏW BLZ}}T&v]^1+_{jU3a9&^Ԫ!쩴W;6XZ',uf ZmgHXAYc. LgXd6|Hf'-ᜓ۔$Cr>.1ˏ,i<"))ncCVuh0PIwzYl5uCXS=5S{{ۊͫhe6|cQMRBUVA: x$ ԩ o,ì*]dAqjЈ}Ք1hY ]!QîƬX̀ 7HuYcR ͿMn> ?l/:tQq K7X*Jten`92{I㦑k˾Li{ owҞk\c]qc1c1xc<1c1cގk^R8W4N[F6aq㷧@BR 79q [ǯ"qDjqV 8 'bl(hXA`c i&p7y3ݠcV~`7EIqhMC7٦W(]l!p@rh0lkcء7 `Qud{a['+7^eX~~eyΗa1;;yr}`T~*sc +j]x 7:o,̎QEIe@8}31'DqJ*i܉ȑrkG@hqAk,t/ͣpDn0b`'Aq4T _6 Gx&-Va&.5ds!B2O",u8EX!I"y3T2/z|{\"v3$I(W4f`Y#_i^V"lgKg8/՟ qޠNkZbKeFga99f3#6CY],76qI`om- (hA=rrc KшѰVa90()7( R"web[͸l7l*6Xy#Խ}6M$pGk1-K{^/;iڅb@UJ J[1`~X#-x!sMs% s`'1-rg$LuźŢN:fHɬ,FgdyZ%j8jlӘaKa WF 73))L!<;3_~k_0x月#)TnISc 4 tx͑aB0] ƙM7iKJFR3$hH u 6I1 f:,ɾHқ*NqB5"6'rfQ|Sɐ0hEXJmn*2IE,X7ӚE}X=Ŷjrf9O4pilcˍ;961pzb ,\͠S)v0d#x#G:tH;&ALQꙶ65=4X)fa9V ȘmFm_I}uﴀX(V kR*\FN) GT f6u"L%{HҏԂ-4"PQ(ɓi*@ikM"gXώ1=Fvm[q*Xbxz [.3yY<{@TäSO$ziy-5*1njmM<}\-y6\lx~Ljӣ,zo}=V? s5^λioq3s3ƌĨ=ny9D/rZ(<e[0qxTx*e@Q<",P(WKR"L&XW 0$lB5JW"AK|e-U@Xy5s]rR0\s NKݷ4%1%+g¶6=}˙EW,,k1iq5fޡ.VIlvVݩT(QO|v8TAv!D*BcO$W"Ѽc1 6VƐ|?PuEI<}/(E,T]eB荥l՚0HziUU;L_k\1p+<%ae@ h'\譥i%AT3tlIXŋQ(BXS̎ R:K!UY>ȪV:#\ϴ_Y8aa+EhVN]] ^AǑ!yp~t 3*$"[(EQ+25)M]CRE׎\&t8Ƃg:\D(m-Mg945bUsc7ytԓmv\<8͕3*e^+2v.cꗧX՛URR\poloBղMDRХUSJE-r<ҧ;hJikBьy!^U`L" &`I&kFG7DmD9o @e[” e$4Ϯ0xxm~s|}}+)<%Ք FAFowdLŘ6LyOĞO&tytԧl}ۗoi#aqSZZgjꇧ-H'q& q0&>Au Ŝم6}2$"? ) ev߉ sP-"I(^k^'Vo+X}$ǦloʩW?Vf!X }:]GN:ZYDKe;ɇwJ/r}Q0˭k-iz,JCjbnդ)c鄭t<?R5w-7 2齸^5F{vtM;hoQIB([jrE. t2<޲ Kqv> JRk9,7:=C:gRcc!`R=pZ=Pƀuڶ̇xloP$Npz }uV+.`)2_Yת&-fJJڔ6T4CQCs!W(-}&InW/ e񼳴h!U*/MR;*?,TҸ1Uu@WJLHRS끖Y2 EnoQ(AB+L7Uq">r֝=E`(N_KUրﲚb6זðjޔRǶ۾ML03bh3BƁzZX g)4J5fU씦vs[ tϭ1_`l$ R6KFdiIM)B8է3l]9Wj08A}iE_$|c)Cu(Zǐ) {am޴Br4ZS9sRE5|Q)Qp2!=,mr[UJ;sKi+j~XS R4S-k-n~T&qz{6DToìP#;UXóv8ՀbRWFbivAVn**34Q*X׃U(==ZvO_6G`ߗDwCi~J#"XEN`4m39ͭ!jZ׷<DqӪdsF*f1ܡ*KN #W{bl;֏Y] D,FXY{ꭃHtjKHA+|R}޽.H``)YepcS#qnEAS-\iQKxvlԪ|جKmLD1&R9'TjQ$xC&&dJdZ\6 lk6IŮ#e!:clqysO1u).nͧ3wú19ѫrԗm뼍hS?tmqO5[RĚo7Rc^A#SFk ވ \cKnre>b4eĀ+#nܸa=s3 2*%ՠd5A54_…-MY[5kmKYv tOUFt63j`N'e )F}Km#ovy_VoS>J{by1^ܘ{pUӃG8\T 'X$=XxvDQHd?z::=\(VS]Z<1 2`RA6axv}I'MtIٯ;o/ڿ~}a=#XwOck4ր˵+U/X(q`dUNZ?vt@beb9v|χ {sΕúqho{`S)<**XUsZ&چʝ]F1Cwܷ5Jl0@2Tmy`a,  y̏\8(vkEYSEN|uKBļy^nAf#-ܜuD,G@<$[qޢMHmv}Dv▮q?uV;Ns1#)B,%@ckyQĵ^sK<>|jML],͢:mȲ3 br4f:?;sm~#S@2[ȻP4&D:AŚZhkos/xY21^WQZ q ԅ_>EZ$$-׆hAk1mI -M;M(Jmܖ.F گy tiOY~5G2-Líyx$;u%4657fՊm]lVIlo+vĚmmsqm8>1+yWu ^wօWM4gJ,v miqG:m6mA=~G~c/ݞV ʸҷ[#6cᶠly<<\y37<||1_1צoèX/|:_SWK/1ףs@u? 3}`c?M,+|?t^1צoèX/|:_M4z>*g/f:_GèX/^Y﷗ݏDn;+2Hx+QSh{^igi-ѭZ,IZ7(ٹ7j+ikqţi1~ʰڭ нF07zk36HJU۠3"k. )GfQޗE" f5X6-{02R;H^h^ 2tB;fI&^ H![*pv&AfxوauNSmVt')muyp|6(TR$ds[>)y9<* džs|<9roM{\A|Rِ@NnK g9zGrotuȯyȸ_z;~=5yW:6ۉz(c0ɗ:͐KMH#'5ns3{u9P]%UZr1,[pAf2r&cŃv#fjM ;UBIvBh;H\lpKsmZMԑaAb%M'gƸ?(RWK!’ wޚ.YX;: F%iF1K"!Uj9TS5-a4tevR_/h.Zz@ԗdrXc%A]cHU؎C]zZ9d~E\Iҭ  ;UI+m3ɒQA0ӛ!x,s73 9Ə3+e 3[$uQ vEKRx;NjTGb2ԏŵc}QFnwKzվ9qJDD+ۘ,plm^'WMR-\$Uy{ 6VuPm|yگQg|':R ?w+%J֮'xPY<]iIp`OwMW+ūrwO<ӹݸn@Wp$#l+CdNƜ304bQBpچ'WZwbLd+R>佯ܼfڹ_'ԇY NQg|':[qar?&qۊ'氷|)8.y[WJ$tH)E1̶GZlUO̗}o蔧aalKJ~':Kz?0?,`'NUS%|:=UO̗}o髤 >OtU?2]TwNi-,`'G:}UO̗}oU?2]Kz?0?,`d.?}:}UO̗}oU?2]B>CPJ沾ZCs@6jAח:`W!ru"u.N\4SkZkU,qر.%gAvWel n:Χjk7Ez2ǝ_gyL*_wy#F@M&j)\$lֲ0,1$JQ{7x=ᔽw ӀƑY=MknOֆƖUubJ(i%Z3Dd˲F=s={ѓu޿/X֚ZjSA4Κ&Iyb\Vg9:[SQu͵1.(V%)KD\sk]DɟposGr^\~" kǐ  ̙ak#Yl[RR",Ԋv$rb|ƫ鴔*vN=S^vybHL*TFfC99eyߙYCo-kSXo__a_gO|>}?_'rn'rnjXW}a_gOW ſ27[ ſ27[tGXW}UBqo̬!VBqo̬!V馩|>}?4g~U~[+/y>]+/yi9&LX;WJW,li+F"KYV<-5n`l"aqaX(L+lց-`X6Ҙƽ :Y%$glGml]9Rr`#lj1}MRMQ#<r)Lu Lj}eu okҭ,eĬS[X_n)+MLtd!H)av`ȯ?u>/^>d?A%l/3ɜg)&ceՒ% *HƈqqvefⅯˋ2ebdHh w-04.R_{ߚrߩG {B[#wz0Sm5ںB19fهqsr^+i9t!\')U9_{ߚrߩG {B[#wznJ󛳰p &t'g BQT}EUe&A ":}ziuFBu0.uIGA\hj\EdRĩX4FF C+g{]s"iC8Y=E$@l2nLE3:V>:+tt\~7 { &,=Iy3x|5(b^g3Vf8ϗ8sK"͔K0#9p'5*ǩuxB 6ss bar{տ5®&uFs+sK ׫7GWigpǦ]KFmS\H3 kU | d1ׯu*$zC]xKF8VR8bв12rJν+15+Z _H<ƚZmd2f$W@UPC;F~zB Ե:!L5-RV#qB1Y B[Ǫ4& :hYz.>ܦ7lĈau̘Wʗa2+[9fCheN^#/kU0#&7PBx]Z-,+1+,*R8X hV Hm&[]B(TX&n:͕:A% W6]G8mjay^oErc$K=ު)6Wq@8`=Wut"E78 5/* ?AZi =T™]fX\*j\;D4W5H E%- 3h$Qdg3ٝĬ[Ueӑ5׉cT`8Xؤh 4 m|mp݌7H@ˮS$VFlR6=f߉[]rd﮲!䆚.\z*nЧYH#E^tr l dxU `fj#5wd%L.RpĻƹ93|grEy_Т; +ARq.GGaȈ3 b@E9~)>+5RnѡKhwխR<~p6ٴ<ȸk(󈺨t狝7K8uc::1]KvyHHS$}7p[fyM9Uiӕ뢑`jb7O9֔[#xLj!pRjr@-8ˆsYb>eҰN?{R5$DL፭7T@shlH^H*lGJ^kNYa0 odQ:s.#lݯ" !%C [1x$.Dey\T[5d ZIعR%R}HV˵5'u9Gт 怖X:{<52"XZ3DD)|u|1 . O jXe]ğ+kMhTRp5} 6٭f!]ag+du㳢ن!ws2 !i%F d $):oY6U w_ff eY2%E l^Gqzf5}sk] beְ8JA11CeVVg]1\`>{):Tk@}M X5 o% d!H">>'Sw%P$$ZɘDp=i!20l;UJ- xp[q4D'H\( ۈ\1ňvkJ̵ m`#{`"oQ]6~O SLQN71 2Ku[p'mҐX#[Dʷj1\:'VxPWi8t<~QȮkLiFɪl_NeEk@[dbn=fT.3  y+NTkZ&}فլSC)2q:A4[mysӷ55y`M9]\wk;MaE1XEur+G]agr5z*j8_fE{(RaZkMm4m"F>w't̝hS>F^;.U} 2R}`.y %G(2MTn[d.gvg^Cp2i֘Kt GCc N6rB1 |nUw=Xy3YՄw]qxB/SUă'0Eb6/Ѻu z z<%(Ƞyj4 \b ]A B 4! ;ıpA\M{59yOZh7ۨ.&9fK0#2y-v ]*8u0ӵUN;J#`͝}reJ]g7^7H}leX* ʹ1$AE0ɏ<^Oҡ`m *Tܡ!-Vyk \Hgi7XaR*Q%.XhxLӜȠM!"RWdQ}={m}̛k"CJS!Vb)v}:pȦV^s QFuĸK:K09}mזa&Xwԩz0k};к-q*N/۴\A0PVQei̛4[D-^ /:B 28kcZeD&PMdS_VhGBD}^m o3i+vK!F Ŷ䰖HBܰI@ qÙcTG["l@`!w Ŗ"㈖JeASa==ոz-{9mYqeC[p]Jm2_Y6L7,Ѓ^[%#ζ J]1|KYbF5eeK{<\3NIUu]ԊNqX Aҕo.x" |j:sӄYXlݓid!x2-'}szQn!^ۅxS.p$*T`@BHWaBSW(ij:sX\ESUn)č*o5FkIBΛ0Im$Bk|ͪ7Tqڢ.QATJvY;هgia[¶Pwqy5||>UeFՎUPkŃ$&.vrN+}fN_+3~DAefg(zЀRɓ:::R/'.w__+?­jۇ. {UYpQ4e{hXW畺:>[umGY[~. O jN3f\ԕ~{65rT3{J媒I2`. O jcq!09 ݡ*D>Nk_H"Ej5m)#+/!zjP!`|YȓV^WI\<nk]o Q#jpV4I@u訄aYy4EIj7V3y58D%ˆlbҀP*|U\cA%{vPMjM8,"ߩ:졓5*-X&jɦmvK Hk4$X6>e\RC&^S[ 2!jal,&{ `+v˵@^*ZڳVr)D:S6~`tKmt_60N؍8dpD,5H𓚜b* sf% x-CZJ::::R)]Ymh*U=Т^1:@¬>oD/3vc3'.w__QZ:Q4~[umGGa}`u_V4o|)o?CRxڴըo'abK |/`^Ls5jqnw "ęN,. O j=#h$`]${M&~,5tʲs-TeSQً}V@6`8H= *pu5=fN5+()ͽW+pv>O`dDp5B+ 1׶l cD8=A8lkېP+3p]l dA+3"7r͐BL&X8=nO{H'_PM nJsbH܃qݶ3auÚK6r(0uoQXR-"lKV5LF(4Z0% B VA ?@$zV>ȃCx/WgXH} &"xf]M"0#5+7W޷LZ+(ј,?fJ[M |0H8^0ʭrviOl"݇^IdPYаcŏ UtN,m,*y!\+Ŧb´շ/Z;Xm̩Dbbٯ|f\MWBXEb  l 'F5$XNǛ%;1nPzh^ a][>Pb\PvNb9?bۗUkuYAlWPWHWTİ.EΊ^1emçwKQfw/7:Eњ[-WJ7.z#7+TGK?ļ9ƚRu嚘&,f\ mxq\mo`2Z:xaWNsD&Y]\~{C}Z0 OjNFMWUVS}9&nEB'signٕuUly`7's2ڪt"ʿĂomxkljP-j "A!zʂꌯB a" O,PfL,7>Aҩ|Nj3RzVMf*jĤ@J@M 4%f75F )%S9Tةui L611@!44-Qŕ9ǕqOk^˩sS VhxO)*R=u)|bkZp l2~hW{C_(®'8UU&#]p1>ߏӜ8:::R/'.w__QZ:?uևu{hXW畺:>[umGY[~. O jXe]!I84O-"9;q=W^\MQ,Suc8 ]c~xM6Bv몶;a5vYbR!+q)̼gɌɎ?8,FYlӫ1$f DMXžJ~HAo ]t*{HMO0d2F̾ q6wK#^I6H\*ېz% Vp,_fx`i ښe4 Afil?U*TI$a3SA bCX%nb>E:$Lo&u< SQG %Ԓ,&s;k! 0qmƤVЙjy4@ovOػ[ޣ KMqn"zH0AMl[mV^H\(k=e4GIG™CGI6A27sgz0u&6`NXw𢊩qynׂg9Jӗ֭14rU}I>H{فYt']Җ3O"45]sŋm3pE}b]h6iȤFpYouf>bح?q,M @Ť-,nZHi|K%ͬ2-LIhJ8 KS 0'` kn4b:b\X^e)(sAu2f!?sVk1"R9hW 9kvEf C]vh^jIT*+r HXdc%As-=>żb;,E5+ .jP*hǴS7nWʑ+BFITj njE%aOf!Olm u#̪zy{0i7#Npez+NT ņM9񉺛!dSɻQ7Y3m W쀄 /4kl%<|:lb2D`4/U`0ܞ[8ՋI{_d1snFcp !6?FHlL.9^%`H-M*v/|`OG;}[rzcG뱩W辭o=Eo}yzv4}|~[. C';01&[qLٛYvTj5dUFd‹&FhWgƏ_~a}`u_Vl=մsfwx>ݺ$swNWeݭbmi2-!JePЩ-΄aHw!QLYxvM3+ Qf'OkeWeDSm7U][M]8SW)ؾ/?ӳe}m]eBӳ"ϴYpZw#x ;? Zy @"D@#ߑohrH r" FǍkU޳Tr41 ?t㻎9k+C A8TH%1ŜyJy m-y}[N~u_O8SAdLK2:1WRr0[ M݃e B |+fyYh~~uth!eC-qY9!,N+s +sq(N9eQqgOeS|_;]o;g󾔧GMeS|_;]o;g󾔧GMeS|_;]o;g󾔧GMeS|_;]o;g󾔧GMeS|_;]o;g󾔧GLRiėHTT6۴JU7l25'B,cavsa7%jRKEs*IL;J#V>:+tt|U9n+.=ջgpηՁVnYxwz_ ^UM[]yiVTKM~H{ qk6P0NUQL3%澂O:+tuҗ(8sZߪJիy-6E=3pz䮪y !;+ݛQ0t_multani-sonata-bf88fdc/website/images/t_sonata2.jpg000066400000000000000000000372601500342040500225400ustar00rootroot00000000000000JFIF{{Created with GIMPCC"   P  !STU V"1X#24AQqt$%&8BERұ6!1A"Qaq2RBbr$3 ?N{5P C 0baN۹p(*t9K>7bL&{J`c}љto'?s`'ccaM~TTD0X]j6z p5EኋyKhc&C_WiH˯X7}R%tGIMbJ*܃G.>#{krq7kQ$1F,E FZձWgDsاz@ax""f ;U6E7Y_ݡ Sʑp#+{Ps8 Rfzq*k\eÌv(L6{@j*}{% cYRYzWnP}=]2u[f60kH3m:nD,%fǶVdh4{9}4bW6`6nIA Sʍp%b]ǧFd]6a]yx:T?UnkbValaі!/| irH]4̖yW"RH0b|ȓ<(͎;uٿq;}fg uh Mm@\3zI|릿qxm1K>ιƑ^q>\mpN|vlkq֒?Gz=Gz=oa181P7vro@ $Љ#EkB` TmdVQL"R5If$bH2ie$B`Y_4YƂQ+UK?L}hww{܌W{qtaPB:1Wنރr3ߋ6_$Mkw0^Ddq"O9뾛Q>hǎRCMhó\ {1nj6^ٹMțo9 Z NbY񌆢~|hm$Tg ;FA xٗL&`.';˷M|k7O.YFQ!RCH)5J("dDdֳrvVEjvMp3} Vh)zVrЏI{VԤ:wr` ȶ@%+lEyLCٶ6u×LA aʄKD첈W=kr[d q覎b"hy4& ^Lw kcnkuL" T41f>Ag>3|;[#kz^ng{.=,8n"y3e >!᧵um8nN]%0ȉ%"rvTnn?b#cs$ԙ@7jՍylZiL‘J/5ϺgvmӮP߆c˯^Y\}nFhڑb3%Ү0mf}e!r zv|8/)K.-:/5FpBb2}f}$QꝨ^!_%ȍl+e 2tץW8З\vv ڏ7|7%ᶶm Ν>%ݓądC!p hixXhDVu$fW| PMޒ 5l4=˚w#&K}qWEf& ST[F"D֯<Z aՑXۺWinw$hU`ԧUBr_Fį^R UW*Յu[2t?xRs{6z;(N\8 x$C(1G0GÉ:kG\kZ3/VA]+!KDEh\q ֋,# y)#]jryFPTŐY<<ںΥclFwH(7n7+7T&{jXIVg2Q攷 jd(WdhB>X&-|f0Mpc"r7c*OM1_=,i J>li<&4ʳ8dz|($[LƣaXh 8 cMt|EEcC,s;go>>h3mώ6m8>=쫄ؕv0!uil )4K kj,2]" i˕A6EJ@l"H _$lH[ijX<,8d&&&k>/i~?@aE%l4; flE$lo>W]"|zr6lyf;I7J^?N^i_ItsQdW[}k}\Ւ`(Y6#ڒ]!kH0DΛ ];"56ʪXfnWyBQdlN͍Z!^a DXiqGԈ4<|6_+k,LG0- c9@䒁|Ff  x5R5kb%R7]/za;i -`J4櫐̌pk#}ܳY!+o# l8(߳cz[VQ71\"z\A[3#at;r$`PRky"*vV(LیQYʪ;Sy­} o0h60"yf,kæ#L^664ފ'eV*,` )` K+v*ćj&A8g.P'< p3" &rL[ [Z$d:ܚfyh؉~ &G,6Uq?;U`uKf& Tb['J0H1 L^!JaqIuOY"@质ua;M n O$BV4iPm6ahEykx- p}rY^{5u}署uw=1H508SZC05Di g8K8|aAM1_׻_UQ}Z#YvwQ*C3dV̴=~M+ӃJ!՚CʷX1.| jYu?ۙ<$UL6&z}",X7˚E|<ŶIi!I3xa.7\_6qQpO4X>?5v͒GVx]NRmo 7|pu]k3mzIw[qdz`-`llYG#]!K8]wMmg;Mygjf 7)3Lma/q\ &;4mXVKlSt9Dc1B:ipmxG,7œjܝZH)X;nAgaeC%t9c0n, -zHO$Ue|%ot5ԍnF4EI/U҄%RUn64'+VYΔuuMr(bBe,¢;5IX~M+5p[^RW30 +Gk)OJAԮM8$jJ+$ZjDZ:9/>3ߥY۝BˆjL5DF0n{(ā=Pfԓff9 8+jj:)G6kX \Bmir0 -'Hd,wvPʅ)(kO b!T,-@3[ JVdk,;XVΔ{\1^<$ʪjˁ1k9(-Nkqɬpp7rGa3, 2N m-#,/\3Ӌ"_ű&FSSDE2;PSA1<.1s'k(bCIC&5"iG05ZU8;& Z2AukBji_n̈́_S1åLa~Svn;)dv|#ͫ wIPI\XI#RIrI<1ɾ$mtaM5A\hƹE'quXx{e*4]fly8#_l(fv)2`~[^3q 3ޒvQ%=,3$}q= }֠b'I]f?z~vv ( ᜮ+WL!C=vK)kz>۱On)>?x}tO1d1Iٴ"A#β ?'Ӄj}YF[ *|`&pssZ{1@2j@$ Lc7sCdtjvceR[R6 %rs H=`,01VSn5{?gݻȤX.X]}M|?Ȉ.qM~-;x'˕`6"eNjxg)74%W؇iAv^SMXSV ~ ]VwUZ5N(o5'.x5 Dʫs˛j=|8h5{0[ǨTaX+kwmp6LYgc.D} W4-Cr.rg!ql'g+}%9`5xЏx1dq})tMLWw~*zZ᧢p})ADGt}ql{m:lq?ϟD2i ٸ:cjFODW7KW.@8tVȖ@Pl<cp;]V* -maA4i@KNd|{I:tb*09,єYDhӊ9۶Gl܇3&%gA<Q:>f[l%u '[xR# vn%%Hu-T\{~[%sW&iuIDD Ժc 9SS8&RVF\jЗanY{ >ػQ)F0?L!zTs9܏Tl>?<ѯ"Uk.ֆ]8n{؀SfY_~ 6z(UhpZ^gS!d疔+5|^ɭ_Յ)-` sg&BjP&98j5Pݣ0U!vKͦE㊑(sOcdE\[R +.դb09܇C`Y1O=DU&'GDƵeHu@t3ܸhI:jO\(XM/w&}|?S/:QG|cմL=~y~O&L50'9/M!IhpƹƮN1Gs؎[nRE\aFEXB j@}W +d"WV-xA#XeH$ȂIkw&}|?S/:T_JRt򮡋[mwzc}^71-;/6=]-hMg\#K+jC*3;_)%M,N}ͧ!q' H@e9e7#fw$H/O}|?S/:=q`Lx=‹9?UEq`Lx~,F~,j6ߋm=13d:d7Xdsq6+KcMP'(eryՆ&ZQ usd<0EW!m`AG8Gc(Mu)NU[YYF$Vn)([ UB+:;y^DO !/`^Pyռ֜|eZPEV2K0mjG$DF'9Li$3k-_m+5Td],NQh)QR=v2XD""c:O5dRTǴ ﮚレm\o>mVq8LJWGM5o{rCÀ߈o܏ͽ)-*<Y\%sH߈$V+vK=G#[Ym¶on3է.*!JmMne }UJr\7b֒DJnKU]flzܷ4>〸s+"rFQqQFY,Y #hde 1 `#K@Ǯ.i&vp5jiKE5EVRRuy=sdoSh;G?h\r LӑN6]:]L flw:ZCGo*ƨWM5u-JdEKn u}NԡK,h32aU#-^wqk x9 /+MQc}䰛.R^YdV)BN'hluwuOpڍEVy X^dF%PY"B'XtFmrVzhItˮ32*N6][djʪ$`zoΐ7+^VKy4kR o?z޻+Xk&J kvڽ җ('#h54t-{Z"~"QKW֜ŅϸV@%í3^A)DBj'OdMz 7$VV5Z$ݧ6\Ծ9NPT~9܅ϒs6Ihcݬ=܈PHƊ[L-ĿMN|b'jEyŤLqn9qi'g} Ucj`nLBeVfY@:Ip̑HHzd@Z8.uү?w!-6Inc MCw l` Dhg^Y$4RGX0RētՄ Hu675#4$Y\|ѪP{{z}=u~zn^{_\;]WaTGK~Q??_ipt{_\;]PC/s~GK~馯ǺUgþpuAyC/s~連WaGUgQ??_>yjHWJĸe=ƾJ}22;J=xUGʕg Z_~Y,&Y/s=m(|t䑃sƫ{{vͽϒIolq?מ'w-ZtWvphNw CB@ Vf$ N/ywɂm ЇZˑuX'L7O!8n4䃒c-JB#MtoEu\mpFZAEBlߊ<=J5"Nc!%ZZf\~J’]}a^Yd_7^?GJ$2kݴp1=~O-uNEaI.c=f)Z8?]h5F.ܙ]׆?(*ùdԊs^QֆK[BQ Wc^ iu^]ys>V_6{IZR,g@mgI&*!f2)a/>M%(+={[l [q캁^\?'$LWl.ke*)ӖmUGI?666}l+}MeTDRc%mk9@.QZMU1SRvs~92vSѥ{DiW܅{RnVD"QMk4GXͿz6v)=)%öN3z%{V[> [o,P"k8 wc5iHcX+=VzfP$FuN@}Rֺ0r3`j+io֦ Jd&Hsn5rcEjTfg4*s[:+"r w.sD\wru)5/JgXzb[-=<ָX~<A:"!elb'pgu%Y=g`9M ZRy.ZN\jZ3D[U[6]} {v J-X,ҏ * }EŖ;<]mK"_gcCM2^d(!Uۺ_vI kf`ܞ)uC=%-r{+5,C-5f *H.я@R U*,aYrϓb%e4UcnT4Q;X!Kq[w0Vv>Ku:=09d}GU]LʮwPߌS 7˃76*[Rؗ5Ջ4@Z;?Ec֡"5|(nXT8+e.j{KEjaQwZ}2u֟G1LtRZj~m/R{5S+]is3㦚BR- @{<4-l9xS+tq8+X=xso14.s^oJ5}zkWVzu\.e}&F y3\!i*1Hy3fS;HMa=>bPv$wae,+ȣEg !i k S5!̩<$2SZ$mG,&fu9)}k.ERbJ[',aHEwkZzR;۬$NRђVᾸTR+jS&zٍ bwIT|ō8}5fo8пSux sWM8ͲeSbfyC ,ЂecPU 2rV6V6jj3c S䅣i6nU(l3p>?!'t|?CN馕\y Qth!mbavG*KJfJޝw:H6yULv́Xȵr#oZ?ݎCrwG/ ?icH8k;!m۶6d[R􌦼DiQFqMkt"@%^xzo~샐>?!'tOdwm7G;^l_/ ?_A4}/M/[?9;CrwM4GvK~ {#oְ?a?CNdMd."lYpQCv9;`lFhb8#$Q׬MbST"NiOJU_ʦ:{]0 $QǮ$]?UM5 rD*& rQ krɢ8mAmEQ&|GU{JXX-ܾv+ʫÀyZU\OTHWZ榕j!L:4dl{# -wE)":&cUp~:CHACi#j|ιx0:n j:::čylx_f4$1"`M˗T|'pWu|ni+Q+?rYaxd򢳛LF#CSY8lk5ZXD87 qC]ݙBm +APd " ?A::LH?+Vimr-%GKO7y0cEvHwhtYXiSN@We2f1R ,'puA'"[pӚQسҶhcR'[f%*Pa2)ahqMz啤`DLM:޼\c?yh\nk$RWYhMܯM1Ka-%?U΁~K`:YkmS/ԍ{==Gldnk^2tx;dչ%>4 ~.[}}On*h{Qm40R+xfa+ꨡ dic/NV3əc藗5%7,8A辥2.fh68S(7x8h AZ8S:>mΠGBB[T{qܶ|4: D٪Tls ɿ[{mt}u!_j"~گ#|8;=X\KpXc9qяޕG(C_'(C_'o+1)VJ)IAu4ehbL#' Dh*u;hk4ZvElq+!Чv]g,/J[0'RstZ"v aGz=aGz={9 j{$d↍q=|TK._mKY-$`5%Af~ceB1g}"A 9Z AFҼWGy[vP3-}s5BZmQqa [Tg,b2e/D3g;v5\`)l* C$\@Ʉ  & /~ПYc*`59Zl6ZPf ]>8-GqV=tUL w>x ;0ɪ({ZU:ru-)Pp6,-5j/ uKUѬ"13 y1z1W"P$¢aN@LkQL6Tā6gB@h:IUe6Ei<- >v[x_^Ңm&=9<`Xx0{]wZ-y-NA۸gt@cMq;;kg%[@t5lW6݌G$6V3]N㵙kEDk^%uvm̬mJjo( f@qH A1@I1DHdD  H4^6_W3gD+/cV9Q~pO1>6c,;l[ț|z]? T.υs6cT^sc gcW UV*r$ g/=I+ ncX1ERceP3zS~-Gb}G7Ȼ_m+AM~Ɖc `QY㛫!;=X{+PVg9 AI&fDL2qD2I;uO1H 08e}کKw21+/H5Bؐ2vVd՘l` ilc%*Ň\2gK~.q㋡+sxהpY]|rW"׋pv"* ]@ 9J]:W0yRjj]BH""fda ~ܟ>) !$ɂG*)@$P yA b@2( Ir˦Glb7Y!lcˉ>>83bY#L=SbX5NXs3҅#2$\}T씽o'=; ȘM ~/[Z `*V .ûԻ{v|#txPQO`$P1W ;}~ҭ:jnT֪"1l`{2qP]Yg ÖvFp12 gf2s83/sَ%ҽ)M>lDn^Pק#VlbZZRh4Jl#{(fC :R)5j+Xl,^\>[YѢ4XJn*$za=O\UjE\du_VFᰙ(*=tկqmmGL]5%*^P$14Z Ex6jZ&n m=p*rSr3`־s fmcI\A>ď9wb|:uh)^}-[q kCw}GGh~XӭSxYNO}gJUߋ@\N˸ȪiXYq޺p"޼[H>YT=-S\Em ax>i)=ZgJjQ:uTj'tO):m/bz,ZiPJ5 PNpn3V~N3+ևŊ:=\TXqq N33SoΔgrMg񤁿:$F˛a[g>lB_L||<>ٴ!-WO/'xyJ|^ǃpuԭං*ʵ6I .MM2WmsA ?`ءDloe85ZhbԜ8lL N*~ю8KW\cZ$c$-_杮IJBJqa^ʲf}9o ul[ӭؗ#%9 qfIcmq]K` lB{pmD:-%)T\JJ#iWݨRZJ^q-`=(a.lwsk4ukRQзlV6,m <befD*Ȭyv"D59 W;"p4B!Gr&K~K]zfPtMAPj3Mݬhf/$Y?jk<["0ם M Ɲ]px}P kX&W4c$3i#f,",w xdzS:/cL[6AkPL ;ﮘA:`@iKj*l]ܚTXܣ#͚Y)ĎT EZ ( Dg iތʼn7[m Y9C@(vb#}IMKf.leaZ^+&qYf;ru*n#߳V gȷ%F6Y̙N9Lm՝dpYOwJ6& ?e4 9 -"]#w dq:h~#?g@(Kok|0{Sw# -V@2U.8[jEdJ65Q9dk%juYj ֶ=Nح"㋀ |h{rOS:dr{FȖj{mdcQrŌ c]d.2k"ujŃ\qrmJg*a]QB]cF+_X#)2L cc@i :3:lUه %xpȩ_=t8RuTb+oVl^0/}+U7J]kLvW;qAFØ4cmLhsFw9S=XϖSQLvʛK#x}S$ߑsvя[8qxK9:9'T-١oj3J@/ntVU%gVZTe"W[Jue/iZGk q.gkw?0<(!!Lf8=lmx;XB[o);kt{,u zsP11 Cq$ 9PP4MRcuŜyי xlP`iXM%H*^ sʮª28|QG`|x8j5Ut~ҲLz.#hƅPn LJ+YM_l*~j]ـ3}aQU[8qxg33gg3PUHEƴ eqae@7<%I9ZQ\*:aUu ĝcTPC kc ] (UGj*U za hBj+1c_S$rsJ2ImEMF }{Tq ɦW6Im9ʠxBZ5Uw@8G@H:LͰÉ]yγ.q3yk^2>6Xf8-oZ R}o"OCj}GJT(24ڟj˻e$0;Nۆzû]%s:5ߜSl5jsϑu?lF& k z> he"N̘D'-~I28'5_d?'}z4ޘEOvr>FeYkemm44 ^G~>iTn]z=V[DD Q_7r0[b.יǩŅZڠ-DħiA*i@ a ㉦o(B{ƭWO:!䐫eդ$‹t-SH툞1j;"mguJv]m6@AtזE( PQՀEul0_ymCbh6#s:VfRTشVBv(Өl4[ڋhXeQ Ѹ1"GPSڈ&(.'"EbYvbZTf۩ҨQJ:=Чن SMہ `^<U"Z.8cQ1$ GfLȜɒu LN-Kb1V63T#ȆCFARĜG+V^K?+_sWX>ednX NWFBa7}TgyY  dzmf“Ml5S*~}mTucve –RS#7!m6FZ v Y&`amT~DGѲЗnVfouߚN)O jBt1SI$zLH;uq?'S;Ν_tF^In 9&=M@ce "5ro3^>+۪_X,, b˥Kze9tWQF4se}Yrhg]: &X:ԌSk4֛.'r'6HYqիA@\q/saKmt&TL`̘Fdh.yR 8 ԉ#bq1&$rC̜CyUbr ijlF\]ȜU^O<*L8hd׹#hQ {Eߕm]#,ǂA˪ΩbQ!gWo[Ƌ@` *wm_?)yVNbtjC휤&mnK ˜ -#3vm+R_ as^V(G3 -+ԲnmCs#UlD|At S-d m Y4,$FE)_Wq'S-4-GnC4@NjƸ@cei: gtιwdzdUh{ !pXYv :*"vJY+a, ijkO~͸㊢AIHŒ lrMdb[Q 0Eã 0iNdI=I$NI$X Yb"$UkK ֧JܬS.4C0K{&ګM_``K5ؖs\YyXm"˥lȕ]fqO ^˾cZbR&N8?*2g yb8,k>C?s?3MGq0v E{ >.`gzc]f--)_ f^"ev)9&T$%12Ԩ']hgoJ CM1Œ7XI> 6GІu캍NLi xĎV1 l)ET]`6գMj$n 4qg(6}{A7=(F`$88&}FsCPt-{ d(7Hиf^{Q8̺HyߴV}Tq?V즞fkf r7SE&\&5h::W ؎*#סqo^e6t[1u\}!%61ɧUw:jCF|dH`S#)!B F3R#1: H8='T> zDHMdd}c$T-;D usJUe#Ge: r.l|ivC_m;(SJ)4dCftn; EO)Rڑ=sV_dc3gKc9Le]w7 7&Ubfdn){#-d!3J6Xe+~6ӷs^eZpERRuq\y]$pNAHK) sgZ'#]2#ʯmEoT&iMҙD&N$EATsYll~hMEYu[c:ꦚ9uLBsO8# Y#rJ*+Eݯ-q4 f8YSEń+V;Z@5<\ǐXeT P,`Ap +UXL^r3}AxsUM\c9GI'yh5d3dE%w<`=0z"_ov%)e)N9ge"z޻.XJfCd:):Kbmb(mu,6RJm\!"O#M%nxP I$ 걲{^Zsl_jٓyyg,6s}fT;ˋ-LPT$>Ne|V~Y^9jmv;NRZ` eK\a=oggc V^keY!SKTNL#N(VK;Ow89 }ې}0զ%!*zblǵ(j-B!fhcSwQ~iv!Bǚ} tC-5c|E"$a%cT JLj49%EZss0DB)% (<;]g8ݧ⾇_7(3]+9V~0Iˌ̄=)έ"$}CAq=܏`>kIR2uHNDfQc'g9|s9s9s~9Yi??jz|&cI}Ӝcu?G8k?GJTO.rT&B*aK-C+] U0)]" \jg}g[|EF9)2Xmy0qqT:ykR6ל4%UK6FŮn6c(NQ&p>ͷgL.4NEǰ^E7!='YPjv֮&@ 8q'!o72#}'}N%>Zc81(^~?PzƔԊ)86m“bY4Z>*QU'FYsaDbʡ(=xĂ i, iVTWid+JeJꏏGJW\; ]uj]ښ椻\zHtr[Z3V_;jb.)CBG 3ȳ0TldgOERp(6Lc.$/K+.wttu"dcH0FA bbAJ:H$hDȝ}5(W[T7Mq&;u/Z5,bMVow<n2x.ͧMo,>\tB2hے8%5.]0msUtٟ!:yQ tm^NԒNTyIm*}nOZ$k\iV]bŀ썀.ls){e2詊M$GD=NQԢN<1RbHme-_/u HL%Prg#0sU r![i;]3] $I^dI2̗`S2§_X::#=1Pf 9$HT )uIQg;R-=÷b{ߘ m 5?/MN0`{)7p'E(эAf@'b\W'raourZ6՗3XNP-Cz om$,UkZ5 LeJ&9@)(8HH2D( eII>^(i0tu# F3ke{6Dw`d%?;lnה#5wb~цݾfRAN[6[ c"EW]EրC6u:kdm?ltunRc_5!;>EIOTgius_;K&~_tuk>/kgius_Jׯ/wu0UF0116o F11c1c_f}n8_R{hJe6xBg#0sm:Ύmultani-sonata-bf88fdc/website/images/t_sonata4.jpg000066400000000000000000000344531500342040500225430ustar00rootroot00000000000000JFIF{{Created with GIMPCC"  NU !T1V"7WX$%2Atv#4DQBRSq6!1A"Qa2q#$Rbr ?>j+?aøs,9#P TE8sY|o6ęMsE{J`cR=25NaLOFš)-/,aYcVYwAܜtAJ t0} ~1q 1gg9X=(]OlJ ew1ΒU͂jwEƕ EEǾxɌ;pc Mrf2I#%b9 #YHXN~0/;93#> w$3XHHj(|LM#FϚ}ēM&7Z1{&Ph?+SLf\HJ~RV5b7^ݣrE0.EUl;Љ(pNe8`ګ]ս vv|9GU;%:9ƏQ9QzkWl1ބ8%cz7_M'^\MQwɚc&^Y*S"p͎LN=q@o", WCgRmHWo>" ^봓w6<[>ceP"9 Ǒrp-QZ⡈n0$U7*yXžB;ZMD+-0Af~P]?'~[Vd٘A<mYX&ZIVVXא%rhM.Ey3:ʃX:5fIesI^XAۣB^aZttDmG4;#L<9nUh#Lͷz\k!ӏl#i"si:\]7]1pW[󸱷&+'b$sm%3><I¨T͂ dQg!,ɬK%n9OMT}jmtTVH&Ґ< *]´!6ոX``V&tx(M ޯit|i뷡m=Vuc2Ä \,n)s#6sGs8ol g4;kfqذ.6>T#ط{ pGh܂A.;i6M.kdW6Ol[=ٟ 隑ibgN!=:zv0YVl 훞BdCsLk͗I \+pe^>1ehQ1;j͞R+\H).7瘧GڢC-r6 Shpb}tu@BݴĬå-%B4^ǘAIc=2H]4̀G@nu/O_o`P 2?uٿ$|;}fgjw6;H޹2F9==sd+yC^^w&^> ?` 6_  pA{Qnd{ݖg}1.ɤyhڛo9M]5M1|]Mn*`#qSOf!é!ezݘn17 L>>OEª{g!kK'%^(;(6y/]@5,GqF}r>x]VEv>łK&5n1'MiI_ qp?Y5isw\v6m#v+K=tѢ[ a1kJ&BƁir?{]6X/u;G!^6?Gj6ƛc8c po/9v&Dykr`2jݝZ,TB .3 ie+ENa1m| VHR O~7sji'a[I>ٮGSnTM :a*07=O:#! i Ad\/g Ӯ}#;C }LoK\:ohnR*cWrUnm]%V&gOPa10Dln<#AO)UiJZ ,bדm0Rmi^&jK1c"ia6ٷ/V/VBʲKȩ5_;Rl|#5%ǵ'd-S[pUՅQxP)vnSA4z>jfh<,j,K.m$64{$]`Ek->`3 `jY^$`/ɂQbhum+Xqk[m c;l6xcsx>4 rfR3` k;c8Q1ǎs9s[zC-Vc3bR-^q`nJFA{90G`9&+F"N.w&6h PjZF+с 0jpÒ"bFՊ0`,5m*pm\g9íC|<>R)*@f({HtHnw9mu/mǦsqK:59ܑf/_a^}_~UW?O+?ԗyX/1K7X*Jten`92{I㦑k˾Li{ owҞk\c]qc1c1xc<1c1c1ގkK68m.V>(SUBcb_13 *spO0AhyE2.b*z{T3!lR(.Pi!J`hXA!`c i&.2\)Vaℨ Lo]M,jp8ݸIͮl#[0y,M#ƼyyMүÖUp7 qjuܕ*Z`8 \3sk@ Fͭ ?R`F'+zF`13)5ʽ=fn+Dg,g*KxY }#(;I,6;oc]uv83I&bzZ"Dl ma"ɉ'LG.s~/c eœXREkpnDR)Pp7 .R1ѳldGfc;/vZ3ML;isH嗃dHy3MeSPiq{4M$M5W~Uc/>PCQHPh$]XK3Df)hK8pNxQ9pPv u (MZm$ݾ?fvNkiKSJ9;2 V]lVg9w+pöXAQxˋiT/$~ED̂'3Ga3 HyAIn+P M݊ 6qU6I {[XK,qD<کp%Ǽ̌JE&ĕp}$OV$ Z]d040@ 3. Yثeg%8g,9}x≯(YM>͹+cĸVv5 >6t ]hg mqg A%+yfՉ0U1ؖ*9Lof:SRCxw3랧ֿ:j?jK1ZV1Gc fX.D%cL&fiCԁ[DI91"bMLB΢2o5ȳ{BTq)D(R#bw1ۈ`q{ji&j]{gAdh1r 6I8lŹٻJKa%S*\eYXQykӤe"M >" r<<>9,uc_Nvz]ϵ{ז;FL!.4vօÐ}L t'|Cd$R;#E_B]lCʐ)nFD3Y0ճ-d4@'X`{i\H廤[{Z@R,̌:ȟ<ARJ٢G#PXV0  6,j=9!I`zDq,G.1A!i3JyL#c7\k8ƹa]7his6'NR`Z,G9F:tH?m &(i65;ԥX)fa9n9&8WQ@xb_`h; *V /?4ߗPȎqHR?0rpOk6/?>3qa($BFxE߯~3H(eiUb6B66͏Bi048|qNoo{A\<5aX'Ln edC RM<馺L|cX_mfj\*܊Q 0d$x`^Drd?j`ؤu587+DɤVmogvOSȨ99|:=}oyʪCGe,Z1gy$]4jK\c14ֵ8f}(obg" nRo=lqK,zIg}4]u1&s[MhNX. oR7ml5Q܉ZXQ)+3 ocpC&fFc|VK={.jMn[אNt_orؠO-P5PeP̾Xe8ñԽ#{jYQn,P\MWN9(!3Q ]n^.ڎr`Dޞ UdmXidiJp96ϭpi̺aGCl ܲȴ89Cr#IWN9np착X.<*/ݘ"x? ` Uhʁ*S7?RꊗH,}\<~94!zU@6Jӝդ/Ԍ4k"2 uVMz5EG00Z0VMż)YVkEBote؁/%}=Kd*oז 0*.m[uB6Lщ}pOWT]*b,{xP n+:yBrSf֭`(lXx$a@- ]H5̀ld6X dVcTFTd{3Q[nn՝,tS{_"25ebBE[C[pfk~]#-ߗ@ZmY O%hQkS)Y{Yuuk4n@sg(еBڽnЮeѽ ZL`MMS/`XF\4(Xu͍KV<ۻ(RAL۰ [^3[PIYٳUT % Jd@TṔa2 c H#z*V8'Pzx7I9i%]d^} ==7X[҅gMIq`&5>G37?u\P "e՘'ēޜ]'|0{XN.o}~tya?M8Q]a|=Q{X-YCj)ż30k&1kI<68qMjs[?9W馟{nwQjЩJ=U =ثAk*&eb9ir t<3ͯNn>{qqhyg"\bK^U;ہpɒϫYkOHQDe>K2\{&J73Vk_4+r7Q$D{wtWh4, !3+&=ݿXdiTmm&٘+o5&#M1 ;QL|J!†]vמ LŭpKƦG$Dѥ'X+,odaFH~73%&LM<, ,2V.x#"FY^+zƘfky.qSj(&q`qc\i>u\gl8>cBl=qqkX7"V2r ACNحZ*8 =<[vQ" TRٳٯی" O<Q&. *ЖޖaNQ K^Ah Evo8Fzfőҍ^O{8?gFi?FGJHoM.kOFƺWȀ{9+}32*gd$OXMUYg.^yT޼$jdϺ6)552ڕX$SɁhYfBg#z"-B &i..EGmO}x>G}^EӇմ{<}.=4{ᆵޢ{ptI'z, DfDì11}D{֓LgǏ){T:iF?nu!2fo[;jZg}7u678:pt#e}4w߇ G%Umi䵣HwksُXqO rVr|VBT>˕]wɝq8E蜺]Yz.bUmk-(Ra;:Ƌ*DKm@-rNS{|W\9w_AL;r}c%hĚqf %Wv [*& 7*nvl::@rka.S*p#툲jѐsmc7FAgYtcļC^OK;`00vFk$\ZB(HXݯE+l*c;ۢʱDrP97˒ !+[) &mpZcȄ,Gk5F4DEW-*Dq_l FNk'U{4=^}2;. wIyz+ʚfX KF}P S0mºԘͽ;;f9( $ٓܞ[GvФzG4 PJr>l9_o-Ъ|7.ڵ(ZzaXSN 3VfTlusѻ kþ 䇐E,TWU[^d4 )v(D$920[Gb%0bLI>t917Kw8@0-$эoF 'mԥOs4O2rkUs=rk,jkx6\.t[-"X &\?%6gR&p\y vA[ۭƗ+'q5Y)q)-Dh+R?jC] ܈!Ub"%5{:&-a*M {0}*]Z0ZEo5ӷ -l95ēFP4H@0[I_8gk>c@\\qW6Q2V U4MS]jSrj tC̊ [#lj+"]u-KDv4=@Z31vSM2{Jڍ^ ")cWΕR`Q 43*yhLB=l~%V\Kk7. a9i9pC4ctv#G"~X+A@| ѼȈ놭/Cxm[jY6w܎A D#Nm4qK6x%Nļ^ ֫sZk XDV忈SXLK-ld^B_k'(x#oȒՌqաǼ \t:FL}Q HnII\oU\+ 3"mk#ͧԄ1Xa x' WHDg*:ID30;ߨl@7אHN ]QN1%w$E]3fqŬT1HDmL:ʭeFlSbJbfr]^!+M5G=L~j148jm\9Ӗ*YVE_@p,'DcnKܜj\09r(u$fIc"u|k#"_D'). W^iN c fZb6P31F^.ihGKh`̚b?V8[ qn(LHqE+KXԶjGXԶj@H5wuo07٘t'U^!K_R-P0^io7z<Ѫo*2\~W\~WjUvS~W</Q_l~l~jUvS~W</Q_l~l~k۝naCTE%tmw3V 5 y[+%SӣPTEYs;j]ؠ d^Iu7@w&4>A4_ hCS"AϙTIwhlf6[m$eԈIX]7U~z4h֊ȕsnL3ʹ[^gN%iϫ\t]ւAkUYj3\M{J 9@ BH(njAGhc d>(*Ȣȷ oI 46\Lb4pV',|OMsuqo9߰ +6^ּlc7KS .)0:;SRJ2_)oyLu(,YD$`⏮HKI`^QxaQf\$qkSp jRS[<.{rg$J:9, M 1{XX!C] h,ҽ;g`fk$;z-oXd@t%jXbY{U=c$# u%f6/; 3-~xqqɜGc |n_YI&]=pul˚[u\[ .W@dnJ0!n_4G p8ͨ8dϠtu'=5PM~vORl$ />rVv{3B/)j;S*$V+sSJ&vE6zSa wE)":&cUp~:CHACi#rZauÀ@ttu _rl(l=0(]qdХ]փAMDDbiw5fe8>aʊn2iT Nf㹳ib-uwvf &n+GBNzIlE~1T tu##>1QGJg9$d5zc=5evHwhtYXiSN@We2f1R ,'puA'"[pӚQسҶѴ"ω MGR1du ]e-E+01`lV(2E1$AjclGq !Lg!&ƠF2.:Y̸. yO}MI1G RSMZ06êH-f,ױؑH\v(lxcbOTek?βPO~@_вc<2]7Gy_>xx(&Y֗Kc,QִA'+ -pQʗ+Xn[ ϒ5 B6_%TQjS w4rzy}:q$S}?3Waudls{K9Oܙ7s!j#pk˯Ee0eT|Vd01U۹+S;",ۧ2J-j/ [T!"fc)d @8J sfY9![0 Hnv]%=7ShI9q*GVGJU^{0,J@XHmA1x,ȋVˌN>ݿg~]Εfje HxQYאPMsr}L2T4l^)vpR2Lag$Hu V 2HX] W_Gzo=B?urz\>\˦׳D/+RqT\#د߃:LbAfwʭ 6ޔ㲎q GlgqyK%c8eg>̱_hvWT}XgIyg5x8 8"͓s`ivOU~K6_絛ah-j UHҔٲj $h\FC]xlE/@0]*g쳼Xn`hDfxcREz'?bU,GQ6s@ UY-qY_lg,YXdd ,|>lbRa99JIP)RIJD`:DPP I# $z2*),Ze?%C :JF,'#HOLS1qOyoVkǺy.hWmɻuLivk0;&ogf)N[ZX|U6W9 ۃsK9|0J-#S DSqeh l3,A exiƼN{p(yl2Z]y/2~h|2w񺄠! Jqȝu/PC7oz M;-jlV~>@JISCaEMϸ5n:.7 ck_\i*O b&JJ"ϭɚߑg]Ń$4zp/-h馊gRBbל0kŴNWzoh;/awNir-޽XҘoRYؒ5[TQ#ngb˅׭an VSB+yCѳ?eܴQ3u7F/18s FO|fx!OrZ]ubM5]L_ݺ͓9YfO2EZϒ("E@(e4peȄqD9YK8bydžz K2#ae(182seFA!y< P2Da8"C2!8Q3JUS?S/~O?7%/CX ( Ӓn1FIIV<}rMdeϒR_n_?c_}9ɰV>8\QDi:L4"Y[dOpMheefFJtb5u+jVšj]hvm3턓Njbד+LYcX}$C v!X.O3h9"䰯ө"Kx 22Hb&:geRtxPytp)Vjk(kÆ-sg2dR)?mTw(J/-Cؤ+*ܢ 25VgLD6(^$\&Z27-8fY>(q`kUۇ&[#lnm8ASZ1ڳa]m}XB@yuێs+shV 0]V{Nٯb^#%jzXӶ:bl,^ѵ 7&rLfG'$pH"U2'8Rn̤3a",d>$i͓!)󞖶JVY[#EvkA4#mH "]tI!(61,\KOM[[UMshUQͥMx+kw]uvǗ8Ŗ`L3)I$ NJr$( +)! RJҕT  I&DWh;7'CU 4yn]` >yi15rP1ѓ)xʷʓowK>MVW_V9q.z`-#wlwQ1q ɍ[#,c1cǏ1 c9|1Z浽I`3=XUVYu5Qlj, :-\Z)a\Lֱp厉Jݨ/AVٖ5[kfŽ㦕X%@VUa u" #F!8F0q81<|s,㞴'$2@BvVFJBw@1k``Ja;aECWHjV9u hV)]E`o V5G`FeX5<<\lz:~ߠBuRVU3x`[@Dɮ݉>3`8"Q32\!8g])X9O7 : KNDe} [;/4MHx`,ßmWxG=&[W/5cc^g;hIҢƩRe@1Ʌ1 ơVO:%5^E' 5md&%]^AԠ y`4%.A:]vm{ݡVQ3irfeEp/]Zp(0AO}$Qi r҈ZD$tLJuroTfoK%mM*mfܫ f Qͤ7ZFk)Pd-N (J6".&Hb7fC[b֎:O(khNthިe^uiW_[حj\zݟ Fs8ֿAUqg.R zIF $Mt?4ߠ-MA-MAJ~i׿A8 `ӯ~G\_6G\_6*--\rBO ̳ͬ g;UE$LIzX08˞n5"pP 0#3/,QQsgǎ3|>Q#Ӏp½f<ny&|Jw42ˇ$l3e<6U:G7WAМ',f2qX3t(;FiI"_"%lB_x||>'HWٴw>{+?qzrxyJ>K]nVBFiٿQFUFfrt @ @"`\9|9ܵo5Z ];^_+Xkv֨ahzmbjly ZĽqm[U .U5\7tu"kX:) Tؓi&F>Y=qV\ƼZT9t=mKV߮jchTcFڑ7UrUƷ^쭶{5uc$?yl]^'B^۪aFš&5P]<-φОÝ\FR, YuS*ȳB-պm_GѶɼjBrs$ujܹ#'4I&hħ&ӷi]ꞦNʼnJ5c%+O+yX8X's9q>^$z0bvÆRߴ֪[iaZ46\*o~:k 9J2B;M׏ZVa-55Y-@·xuezK,WRWq׆ejSZbj&JNjO|-RK>SDjFK+ jj{ozM\\iF@BUnRtxj'ޛNT/@ $d6AP)'pAO;'BsYg,ZkjDᛄ+鶧Azu2nC,Q+b&׍DtYZա K@E:ȅݦ u}4ww6+|^܉ ;Jf-]sN2MtOnVZªTP +RthuneF55wnu8.]۪t]lq>:VTDV2꠰.:H`ڴDsfq $$ALA AĚ$*ATA$`}1M}g)hY=kn*$mnK&o\s)YS{6ZA\{`,Uu_]%/ v<WZ/sFbbnERg*{= 6d[k0x_7>>:RGo]'OZR߇cF߻}knzj'k]UZQyst,K1p|?'F6CCRw&vja.WuӀ8~9另 `6mEW(O3٧q|owǷ.-{ܮ5N1i`e]RRTKvB{6iiPn H/ju~Iri+ӵQKa9hhk(1$WTd+#]Y[5\Zk z[eio^C,-[gyz|C8@Of/4릎oax}ZZog}mbm+{m".lR|Ahh6clk#˼6|K?WN-.UVU@p&afߵZ)qlԝ D1KuYda Fd:AԵ2agfzzqX' SmlǕf{ЦRcy>V߶Y`deYph5bd+JCtY,`BkdBͥkVGIifvϺ D`m\`0>z N4wIhJ OQ= v5`\`bR^eHrA,ǩ).3G'Q SCuf=qj^ojnqF*y `VڵeiU:6:iOmKyT~ 'q[)l`iE"tJFvB[X"]iׄC+⽻͚ ަI ukS u4z2V[*i@p@"zgDV:HR  p`@c TtnP5Z} XdEp.rNNldW#wp;% ޴y^u~Zz^!F3H+ D2Y@BYPʆ0]PDk1cv:_?I$IrI2I׭ {[LA-CB0Sp+@֢63UyfZMO(ΥkeB)=Zގf 4 Օ)X<&`:_?:_?=z>Tz#OgJ[7Ekw:պz,FujO/:*[ {[ +l\`i.5c{y󫘾OCq󫘾OCqВy3ϐ`zRi.5c{y,a3KZJ"1WJ1aG`%Xc1W1}W+㦆E;_Ɖ;KglG1l^2e ٘<&RUĎ",L5b1 pS,/4̖E)1)e Ou[8 B7G,80I(?g?gqB'"I4 yI #r98F#Ar|<-p&8GJPNvCy HK9~>yot?_ܗ>},{XI,} |׵A4TIgkFWyԸY@eukg3H$.!ÙLۂ6S8SkB:sol㭧S99iQO%k)*QQ`H$fHJI ' p]6qMkZ+)} c9f  }mPGVDNe7n;h憑nU+(vC#~eqcz!pɣR㦟'i@TCXCt>?}?>(Q$3U.d3NJC3<2CNER9_UuVYԙm7WiUXJ`(LL,qN 9H9riSKq}!!\}1JZz3K'VKŶI[7U):U%b)TQkO8CQ*CWkfVIJR+oejML}=r mhGCa#vn(=Bp;BL9< AHJc'憮ma0iS.Rk% BDJF44OMgUMaud֥bR=˖EMͱq@Y Kq}!!\}2uR\XmM*О-EB&ȄfCz(aeNQŢb2%b~ܳ=^iy |z}!!\}HktPF-@녶 \'2t!v~,vP+LӱrT:kxB$mDcDI$,Q1k̼o+(m(K@RV Ф$ T\noem-.$8ۨ%$JTAٛ#&M EFR@uQȲ= `2`%blb0>%n]EXIs92!g`&%X sxgĘ<|qxfPv/ LqwEUm3}|ar_K:;t0QxxXi=`XBt,'Vݝys!A!LL >CF2_,CZ[#:舽RX<&dK&"eq3P#kJotj^&Uk5Qz'iH̭*,drRN32:[q''fzi}}M2mڭ-T?M{L[He6+ UmqMQ)y'/;\1k40^ ԸvM֋d۾JSᒴKiB-wUBR7 ZhخkQg9/Ϙwcє)y1(9ώ3㏇K.8M Ǒj⚱"%y딬+`e vncdf֘KX.ٴ-?wϐãd^tSdAySSW$Zz6 8$AYJm׼+:v A\ NVGҴ"*%oʾT'^EЎ!;YJBM[+O9}?Slw 0D`#A  =@=)8m#ծvQ"| A*ҭi}/ -MadvYfQ)P)fQ )ahs03d2qyc _c?{O9}qNm7Zxy9~c"ĭU5'Py,2/ $j粢`lS6VlV[ZSU!rjm;MTb\NL=̝̫,lD$~>t|6st9˷lSK{*yBTiyiS),i% P7jgg-_Zv_N^Zf-{e*6Nm3NaGSrP}VݹZX@ MWq}6ի)MbL[؝%hZ3s*?hە/^&(,/,lNCMDG &}EdN9~Ɍc1៌%ϖYςO9}?Slwy, g&vn4\_:yҟoгFv6+*}zԄSv{JL,)Rh$͞#"DW6]&uES{tOGVe*c8Vv 3oT@V(m<ٔ4hƱbCn "6?cu:*75M=~OނEp%G+4ge] yiU%s&VYTAa ]i6CGԨij6lۆK@Jj%\ Vti#)]45GUXMii&Ek é&ưtBǘ̦$VYyfU}99TӗZMkZ7%sʍ5x}C6u ҅FG!^xDZgy,ssǘ*|{OQKg|Fz5D]~)>ஷQ"H섊='YY1.+)|ֽkdG+eYF{=ZF(XIĵԨト)a`3VGfb}oT&"\(r'2;.Avob@=FKa;e  cPA( Y3PˍtXef.޺5ZkKWj3Q’:1}cOrla~޾s.3S~~u=#xaYIBq0ϕʦ: >XInZKQXᯄg]}LOC>R)!RG292=]gNeԾxR] Vz|C"WlH)$Pək![=}9=xIH{8.s I'UWZ4tB_=@kʘ-r6/D;;:Nde*ն>Z;usJtMY$8T_4JY^Exώo825(b5U?$UbHo"+OOn.VBg3#)ݣ#*CWƳ>6@'=߀?큀 1o*{wߑvWzOgj~6tF=cq'%N[Gi%x64Ĥwx `w0B/uK;6pk0Bkc$fB29jJ9s{鏯 "گogt[/.|^-z{xH9QҲgƨFƱ y1jσĕ%sf}SU숪Sj}whJ-#t̍ e8 psf$PK(\dώ9E3_?C.[YqXϧҪo9EW#ڶMtjE&|M-7>_vTƪwUNvjO9Q;5Xh"#d+&%wvƉ4N_@x.A@FV+3١@,^#٧5* _bG\T&BINu|ib&EZ'b UKAI޸ĮYZ { x-ֽs{6!hnk(XD,pB3ZyL!k[o"F*跻@w=K-UvU ~lވ5AXBqrE%gJI3Y:2$69¾v6k9Ln  ga4x-\2z. ,%dV*"5u%R `oM:V}RhIH"UY$*Hv)zHYc9g -"psW;[6:e=^aҶ^׏0Ҕ:ۊ{BGVz6<fq=-SYVU-^&>j8+_%OWL^3rjt"@k Ni%VG2G2tyc{xtNmnυK8HA|Ce1|rq󒞀)Ml˺$V+-K0CNVM+#H3T%BDҿP&ctBp;BP<׭V6fca[LMOUI_IY+SWvV6j )@CYya_ΔJ(g o<0l%+Ս)4U,.:18ɡ${(-wԾk|q`YdžC!(ǪY.#UF}[PmJ(Ie ST",f0a#RN1M>j-XjCOR㪡Eci425 6)Q,i Z5(AԯV֊8%Gvji_Vj;81~-u">H$"$o4TIP%UG5HxX|NcUQ=,jGTIS#tptP9kF2t|K:`V+i')T H]cQWEh«4ͱS.ba,Y0C3I#Q繐m m,okVvUs^+^V9jUA$XYdASi#lC2@8rA we͏` Ќow6iRy gdPWSKRL00b4qVM׌'mMy+c*Z}R4YEXh0I#H8u{ S9|=U0VݽcG bkҲ=~JBă _e^]br?gwsM\Xd _" e,".8 gK - Ia#^;960ӮԞvE+54P&R2KV2DMҔ/$=jb6b< }$!#'7ȹ% lr`Dz7 acQ6FqfKd|q6[e: q2=K7s5*$A֫=*Dԅl%{0Lqϊ<.*i+i$>IcBx%U$ş-E3:K9T9kp*&bXe F8X% mAj4-]FֱZb,i5~i,waB괫 oO(rk4z5Y`Q,,Bz6 UzIYYN^KyHυv4ekt%>Ά&Y d-|s+dRD2?ޫ=2xY&kJ#llHlY2+eZ=;/,5_⛌?g'zyKWF=B$f;um0R:H;&Ic!YDAyV^;]0۸HRPCGOp ]5R ~;[<dxѝv^+vDp8huW"݈R#ldτI%cl^>rH=F,LcsK}w&^NSԟ00D#Ž2HezGZtj+{sGއ$I$rII>I>Ne#<] qsy61[-H` WgZ\gT튂U,رqoLi>&e|~QSa8K|Z zHZhM`]qMx'g ]%\(막sxme JH >gKdG3nzxXXCXkw-!A: V[&f ~oDPPOwW(g$wWcq( eB@=<@Vd_"t_~~Γ5^4ln ;0Uc.>NEnY\L:I>xkʗn\ٞ!VF`PS7mC4ZGH*G1- EU(EHO7|3Mk|qre_7Lʮͅ ,ْj6+9lac~n/q--9rTȊd7QJ .l!X_ ueѹݛNU)KH zeGIP$`i곎2yU`"GUEiDSk8iЁJm@\YALq9E-ǝ}/58 {&:  ,6aB9HU.D-)ZQ9:>ZGzL#'Iqu/9:Y[sº!x[Fҹ_t%pWO|5U#1ZC!6?&5r>4K{LѺprtyR&<$c[՞$KZ1*EtakZ,TGiiJMJ̵פiօi*ON =dlĽW$XRʒ$W^](0<>ba=Y>JE"0i) @XB-29«*nۃ2&e-rSξnXB)swa(EewIh# ⫘Üʜ=Ύ~:rk U[uvB@`3q[j}5[* T'xm+:}*#\aNIVÇ',F LWN3R_8r&ө֣rփ}Ms&NVZZӗR{MVȀ,5DA4M^j$^ETԫQZѤ&Iq%&VZWTydX?IlC$*4kd8YRh *TVh^1"uyzhL#A Dm}9Q<VFa'>e:RgXEKJj9K# u=tmw(c&kkƮ'eFxCGV=; 'E u¹>RF|q MqayDe k5bNV,4YD_kOgNg/B @f!$4'9BD^ fEcN?*D5?/66Auڊ 8f:[몭.i#W1$ڳՐ5Qk~>q^_@dVb2DI@aݞ螓=aǑxTNsM9w=vù_SZ3q|rS:RFm|q-A. ֹ@l5MElͯu,u {zz5Mz1 Vif*|GƛM^Y4Eŝ3lҪ<yJYmE$ Qo6#tWdy)#[T0kQ|G!,#@XylүQzy*crE7d*r." C]e3̜+cU|pPRH ]Mgg2P5Iʪ2*U_Qtjur6v'WwrMU]nvߍ\#]0A?d2كt"=.Kа( :DGЄgPB NUWaѧiYw3a`$Bj3ۉO\ ,@=͝H@56\,!M;i2'}J9n0S꾜BG+)9#v ys,ldti.Kd.`,'0x9Ū'j*'urz?_E_ԋ~#*ԯf=:#*EoQDhTrGz@>r 3.ĕw`1osz@:RmZ(+rW'_IJ]im Ic"()<pGW>֛\9*!+Y$# 9Ldcʁ6"?q%MƎ ͩaړAZ{hKAftd|ȱ!P=iʻog$#A  s+ҿ/A*sBYq!Mx kiN Sgh_Or7vڋ^g/i 㝇9y@Z#jnhs["Z dv;)tuTӭb> ;9|fߋI<9.^8Cz=jSq,q,+$ie4)^E!yDzO,u'VqWƠ^KUTMbVshK"uΡʍ4UktuzZC$87ڌ,-[=n0a;̓^Em75k.KO,Kv` WfGr;x䚴% u%Ε{6zL~#OGI~5% J 8=T:';P AVcoR\{n@H93{ȘEk2Q9;-_urGVg40W{ H"`Xhҝ#>_kEb1r5޳GUp(|I=DwGY<<c>t֣Ad˲9ZKskIeҗu=M2U9[I AଯW@a3VmeFƫ`mLģkVEI |ݕ#Gxֶ]-Ɨ#:i<՞.`OOH[XB6] G5~l{+rhHt*id%l1Dbls[澫4;'r'E.Bu\m^K2:q{+iOak>]֖g:~0\nI8?Syӹa\J$}j ]7)8aO~d?^Aj2fC#V2~*'W$G$P)_Ϗ9ۃy )5F@B!"A%0꫱Jcy HrB4inFmLUDH$wܨ^\H8"ӹ1TbDUO;_906CnIVK7:&#LwPGs`vïbnH*TlrgOcLU{yc-N$+I 4,4+2W""_+fnUՔ#kX I 1SRF9zW:P˳urY l bza.rZ':H# !@)MGSkRtg$2$YXY"L=cHϙWaosg`,Dٵ"Vr2TɌk@ֹMQ{HPԗ[(xt rw1QBj0$bYcWRU>o ق.7QW~x3%JiBC lm }Fh~Q|N]K0yN'DE a2E3dDxӋ/3t֟^heEo(P)H4>V`CҾ4$%xao&Q;eoN ?3uN&^NnJzG.q,h4GB%LHδ5.k~Y BEzV{;ʚwi.s7OprrAćnka+<=8I̱Y#Dk". 9W6q_yѷ}*4/J}7=O5>,<-ÓhkǺ,[+!=Vt=GUGWxLE,Bw69,&is$yS_"Y NQD~sUcsdFsdα-{$%O͖N&aH.kzL&QbiI%hԒ]Tdðoo~Djb}jtP:ze@6-UECď)ls1Th%X-:GK#BG汌{լvjw|^:uoSi6!f"{.`{WG2=8,C,/e͘bFckH2I$DD|nofP^e&YcfcO=f}\`pkֵG ;EHDfTl~ Ix4vA״V!0ɎڥF*<dY#cը{"ƽ,UBdUTk*)͔Cְ sژR0FG|滚zVд;3t[2]k1MjI$bi@@5s6zxaxydC5ibY266H$Y&l1H,F5^Buu&3V8Cŵ- &w=k`.ױ c5#qYP9ꛓ4@ Z!MR.ZԎ#MP9XC8HlO 'X!50!$\MGY]Ս_.B*_&>SĿSY&LO(62QEd:1&dSQ9䯅plv5MOOu#m!ī3 e 4fQdc!Y\r;=%~(n8ǂ:x`<I&|Jx{<|Jř%,![_d05=tlTf <!hGVC-㉈TVIW̚nu?t5Yv?=q+tl.PX(Tuq M HհDZ$Bu5$j5#:Vh/zF͇C}o1(FY!YX@h9oZ Hd i ʆ(Yf~rU>)ٟC7Rafmbqju&f*'a,x%W 黥ٺr$'K[!LDi)fqJ{b[uv/v>w[m@{=Rf8xZG_d#9< XQbTK+F:ڐDa:u9gڻW˪d*vB;ܜ ́&UV2OA'%/ajz{y(, ro͏ cd aq3bԛipK卻.8G8쓡.  ~XъاF#]Gjv EȽ(*s~\Ùs$V WkwNazC2 b:lI4jF EU-̴O1u\^D+Cڡ`Q0j3L&@27 H/l,c~1?_l<Ua_;㎦ޛ=ǰ2KQuy uO uG SRd_Kag͵-!TVXRu gcs?-k~Km{$7b])e7Si&<v0ߕ ag.)ExP곓'8 Oʤ1 rN}. aM`=9QsM{:E$jrVFbyĉ9V~/Cԓ86O5H]E /tv0A {&H[fB nvVCc/1 GC4SUV^QKk ."#6m/m\~H}ڝe[(MUvX_3]a'.W+1eۯU_ ^֯ST۶%Lx.:h5T٤qScֺb|D,s]:RSH5:t#iVV 8Y!zV*֏ʼz=ngR]"\גٰT&-ɩG;rL(Z\쵎/3>/=vn9żmmNr"qVVG hD"L4qXH;"%:09gڻ\:-s|8jtT\@'RDdTRckIK):s\j=tF"wy7uLme c}F=9O\aՉa fd,$N1ة#>{~gP'7`[-TrmoOx]5ސ3nvQf)35S}6Mgjs >+Zoy'S +Ngˌ6#cX|f >1I"Fo66'$乤Fl5v;9I A\dR2j#a~,XEVްM+G+7}c+MwUj$=:(ʈNiͳ_) ̊!uKrNӭ 0<0X9*~EX^ VFOmSxk&O,+Ra3q:lΥGWyBZژOnETW]?K:P;IX3p+BI^4,ADҵW)%ʲU\z=}BJȝhOBdxMbSvpG]!`ەK1r8U,Rf$iU00c3"Ȕ<-Al^Is2r^K6vKɯd1[W"X|E,IwgP6swAq۟?!f88jN2җq^1F!…VV.f"`GLTc+$3J⑩s:$\#rw~ޝ~'ܧWoqf'F˜m㕚}>~=% qU3fLӭ@a  j1a i^3_,Ltd*BT^X.QkH_!Js;⎡x[n~-L67WO]QP>kQu4K$WH_P_Úv{=_:xv'8Ur[ *<;V/l.:1oIT z~qybttU69PgrRT-G[dy%biw6>J)UK_P`؏,H,F7Z=b{F Oy>,YA)D7 ei{~7 <*]bp@6rj~$FEVnTD C_qC9!BBO0CI4ldcj 6]AGklY^2a.,rH&.ܪRW&{HJhVk&1YjZy&J"ySw{|GvX2N-uF"pw]Cĉ<ĤY/*9cF5OXǥď@pq̿:tgZqXIt2-!"WhϺ-8nڪԌ*s}S*kYrE$gHAP1XuC0i)?;0eRgf}[Utl%< 6:_\(oSЙ̺˪a"EM 0۰;CXn+9 d ۆ6\>qN  *)+o TYu=4A:df+2"*f>R n8̨?sՙ EL-v6-%FU.;"y3J@Pc]%N1V([cZ^{Rz( -,t#PQ]>_ZMrC^ycӳJ6%7q~ N#:k׆%S,^D4eUUTDDOuUUWvOֽbO~(8v)g6(I!i(>jQ[)"C*r!KOt=]c]maDһ.{8^t6ͫL`Se=<\l`M2m`~;## ;Kiq~]#{=# $ 6n.WC93E%7 Yr\OaqUU-Š9^H<,) )Z1i7 EߙQ3hWڂ+ckHFuQ9}Q;T:y+62qnFBث{E[r'ZVR4/ #IIŒfAIcXoRV;tsEn=QszMHVD^;{cJݧI ljw?1gjUzʺVDU= M[O}Rv%j_.=GO\:о'f>7Q6?cߢ|tCWL Rzwv VH&j1T4UNCxn_ƽxu^]CTN'{zA31:%sF,l;nU'¯o\/t=I?#cǦ;`oI̚&VO:=ޒKo_%^>޽?]%w,75]3<_SdUUDUZz^߯oSލo}c'X&hw4k|_V=ۅQ{9mV 5¥j{7C(rL9B#8Q2Dʖ 3Ƒ;dO=cDd/v/v#UXӷn'UNݕQHz88multani-sonata-bf88fdc/website/images/t_sonata7.jpg000066400000000000000000000410301500342040500225330ustar00rootroot00000000000000JFIF{{Created with GIMPCC" G   !t"147U AQ2TXq#$%RWa8!1AQ"a2q#B$Rbr ?<=5P OPÌ*4Ome>euh}Vl坅^WzVޥrͧs|<a\@Okcš+(./iYVYAx>D)o|%3K_a%:,~hOges.B]ϛ๪ril7_,bᥓ%6Q3kXC'y~nT }O6rgsÎQˍ ʨL4ʚ9ߥ(alj=#,X19$yMI:!0G )0iȒihDߝLQcܶԄJJzH";MyHeZ=~lE7I,o2A;P feU--^ v `[6;Zy=<-?ξR٥Ln].'9BMzs&!T!DV!|Fڻ\PyWNɳY/.냦[}[=SŚ2r Wd5E%\g.ٽcʏɊSOs \Xa;VDLϏ!#v"@Ӄs._)#eFu+(he?iTyB_cz$q|b@} `qRѢ=y4ӆGBS?a^-5pcn~lTwivOp͕obZgy\)ymj=]^ 'uOJkc{#L=n՜ \!ۥG^F<ui&όeD;\ꨞpZ{׃{{ u?_ÚRB=Ɏu#^Y7Vv=+y%l0{|~29?߿ztkg7vه.{*1{"BǷ0h )1揅ɪ6J9v;b(Cuo?'qJf_|qLE)8_qn{gMeTBƍ*E&[UT\Ua,tSx0"Cce:{FG\ uXo?UckQC~O{ߺ_~MFѦD! L?< ͭҜ<:n'." V)W/ qgGG>?uu~=ovP-~43;[¾M{/1^#`V{MGoR)˜[nPTt^~?v[?$EfFƛ)+GxG|kU%`L$c߭poaՁ|HŖ86lOeɑ.$Hّc_JE+N+9j EY}̋"MYH.\F eYi7d~q~+K当E u4OQZv-IjEY'$i9 p AjX< ,&B|]1F*ܹSsvςw2\,y,f=S%(]cB4ugŭ<\W5ǸzT}9"ذ:  Z`Z=" %0 L"=CUT(FB0#jY%*Q)]Yw/Ķ^Dn_E$:MKȚF}嵸א^4ܛ~l?yVGEmKHt#yTI&. !een2a%xw(y[g&ks|~\iIg0M !oīz&O*ȍ`TrԪb".xG֞!4󫖧.?lP4K'z\s}{qudv@OG=|+sKOVJ; O{Ϗ;/g{Rwl??q坌1w˰88֘좷.m)ϒ̯> hnb&/Gx5?/Itq*ϪPϷN+Ba !ǽ;>]X,=9}m~ x_曬Cc:2`l*eό!Tm%B5Ο6Bp'Oѣ^T@򑩨z)ϕQ\*r0䭶ss.Rzzz $M'>@ mVǏrϟWZ#Bfs #"QI\Po@wlVDXs`]_(6k E9|"d,RX?u*/: lXl6{~T'>G={r0⢈QdHTאdO)#)y: Vi\f*4yO0\*^]Xa<5qgbH~("z=>T `\XWϡqu~|Kǰ5}Hr6qyZ3U]\9]eIƿY0mUW]fUvp9sss[sns鿞kUʣm~܋VO<d:mD<vg6ƭ@CPy"d/rCþuf`%T/kTMK_iW(gF`d_{r~S8 BV:XV`P@ ŀmG1 ODt(MUlch}:)UCh,l"{>w]%/2B1(Zj^2-d=cۊmD*ێ5]\zCku3FR,%i!o5DY|VO$ W`} :{G^.4YAI);hdAf\*a@2&Wo_۟M=3+q+fº"F5ᵅGϒٮ`{ύSgߏ91GVS=zrcAx\d+5m9~SsPzz?sZb=>O7dxzIy/骏\љ}6P_⠩J5Z`П~n4zB]}lUPENk7*\2"u龏m]2HF u `GLHz)"m f* +c!dV:N^폆<ο"%^=rC>q>:$O}*选f"IULYhXh[{?| 5W{SwF..uٓS8 Mʰ,<m]Gxõx<--AQȎ(HRH,XHEa/(RXIfj䧨 ],úIǖ/8LR :CT. ?sܳڵKLT YxI`ݖgBF;HD2qm 2ѵ|XJ^WgIX6{cS'ࢲbjH_-TZuM~lrVaEI'HӦ&:F;L?-l.eS!UQXˌ}reEr1ehXḓN db.|vvɅ# nWc d\s:ƴ K U='VݯDiMxga}R\&ҾϿzv=.q?1Jw픁w2_y~\5>s>|di7*.֬6]pZ :/oSap!e;/O*=~YMeS,MvR+̮Ž#z$)D2-oc)Sb[ۼGE#m!ql_xm'Dϕ9v؉A2C'p>v>:3nWrbc'GD+BO@`UH̬Om?Gro9y-B $FϵG3kVp퀫sejoBy (WmpAI2M'lA͟iVř1mcEN"AY|31 n S}2q<#Osa9djt:4h jQ,L 'io-1IK =xXΛl{/ӘT:ɀl-W}@WбdM+wyěnI ^mJȔ#GdbNY|aW C0!W@\2q[*1{ͨe )P$|0PGɠa 郲ȥ1v(0b]Cxu&;4;X1!L3)#Q[XIehAڏD>u[tfBx%԰x7Mj\C'SA^ù >6a#y! ]2#t1^Y!r,$/ a=}OdtK+AGMy+ X=7:bf`SaĆbvB r"dhA2T P%n xZׇn*f?ӎA 9C-YK 4JDLFC?t{(-'HT`;vaǓcYST33%5۫U4^*`-j&z KW]\-@24!u\=pU6 ϏNx㵷}.eږ &n Ye hFE4f5Qw avG>ɳ9lFﬕZHk'V eccY&ڲ̶Hl zAkOf(lп{ywu={1wzF]{O9Ϗz9!Fi3@|ըtߓPy@Ud]V\,;8BcO=`u3@0I.!Á,yqtS]p%)vϖ=FS5^}]]ߜg^{T)鈾(ix@_*ʔ̯*˒a6 FvSt{! .?#2ߟW~CA]_\zwBWWe4\a)&KzϚPåߌ/9LBۥ<blŏ7 FFߓdT7QA m?u9GLmbFS=.l9R݂{jz{;{*5pl7U\U6 e@ESa\̛{gk4Y&XBʼV'9F-cj`bxR'D'.6b7?_s{E^/")dR$# ඒi4`` }dģy3Cˌ<%-9 jԳ萴|!ϺC|QؓP ͙ߝ6.NDqG,X Nj4qHY0mR4l3f:/2Kl H%9O # Y)H 11WAm51cX߄h#:w_yceuSχyrWsZ* N(eѨX@q&/ꬸY@SPS*K@wy'Oο]bg[k7вv#fғ&x՞MkDPQ*Vή|_=OboxyeNj0Lfybŵ_,iP;K10 3]DNJ̄G~}`P*${g6x_k㥏V]k]no!CJƙvZtASñS1AR>{7xW~Wr _ vO3 †LQ.@aSfs2u Pob>Ocy]pZ"Z,VySmQ)u?]V%?iv?ry(v<5=6wǸx(WthD>Iᜬ= //b7xlK3錙*!NU@ @r!TC$[~,Sv7FBT0bElWY<5;{l1[:Y$4 eIB(%=[h[%V QIYW*:lnjʌosr0t5v)V['~a;ylpECrɨ{&v-G}zP!x?& ()@d ɈdmIɟ$$C~#b@ԬH ʼpQhU $jǍ5X}&+jiJ3{x?,ml6Q[J-S[mLz;^ȐF..2+;)ȑUewO(f6e~ ca{p s;_;;i=wn_|o%,Ds9gT>2Ǒ?l~o֞fTp*/I,I9!&Bo@=/|m7/h-lp(G/b AH0-Y Ն0o{+q'BiY?e|NHIKBNCZM ^YCM cgΪ-aP 9 UQ9Gv#`xaeO|!*f_p.BBh\d_~MW6mmv/(+ Lԍ $T-,Nb #X%&cڌǐ؞%&86B,0n%#ܳѤ]>镌ǝUt͙EPuRR5dUT!J Y5g*c9b+AܚvIfm8fuw>$$/+-PKo.`\ v%M[j9g&b bX9`z>aY4U~-F,a^a Ǫ_X_{_s`q6nnSfw )WuwU{%^mʝFձ,iv8V[Z#ӟZ\wJcߟS9f#]R׫n =vmgC|A X~L`Zڅ64X5'Uұz p xYTb 1 C/, ١D@w `co?x)_)``?_{f=;sygf)וL:í`H5nҫHh)g*-"wy9y& {Z_̋N ulu.;!wZ*exG=y lv.MT.]M|2{%wz1f/j⺕ D)n~FѷK>?^\< NIVٌ &s:_3yJun}񮿽+{vB1=Ӯ_5܇N˦ B*/Kݝ%xS!I*]ߦ;"Wk ;a#MN` c^Br[:[^.] gp۪^[ R8QK (BHW"aBnp!.pe}e_ "E!A5Iy?#N˶e z$= C$j8Om:c:/gm|[}cJ<ˀͪp3MsKHjqܳ}}Е\>vC;$q XE \8񝳌#˾FyϨA7UE0{-ǝzªTR|͟u&$bxC Fgsnzõc[L3a+pzD̑?7ౣKs|' pseN s%]9Bqߏ%w%}z=FX˜!J`Iĵ^8vQ1W{Mg#er2}4z=F,Wo݄ ԋ:yO 5R?=N+z4ix^7x)#q1Dn p\9@ ּz #BSOyoxѶذtZyWh3+pHgYpҰ#h،[jz<H<O oRvWuDǔv~ 䤣fi$Yq{Q Xl|y ,q9G(a ՠנ;O>fвW-Ulp'&`RjLk 6z2,*\Bfؚo4%G !gv *;jQ5Jw)=Kbn~#eB AnO>|OH 'ՁgxDț[k-hOI# U M Dn ֏E5ѫcFCt_SnyNL65gTh9^|}ͨ BĒ:aEnrik?BueG  ^OҰڬ]+y{m[+Su KQܯ+&S?,~̼˸(f?_ųR/-*9 lq~~8zu} :x=>o_[Nc Vp5 /NjngiifC;@$eh]V^爚dVsPL5Ac0و[-RsƱ QQgw7.1{T<)eZ>ƗCZWA5l;{ ۖ1%Lb}h jl"4 .fބAU\+ mI`?'DpAXE0@""rnISՎOZ :7L Y嬻 ~ŋsZV̡X] H#0d/lbo;.#hKuRaWtA B\h9MU0ݱz_4x{Շ1l[fL<Y7ۢ>^lSk[+VNNky)VN)%4_$0JPfZQ5ߟ=O }j:@E a`}^*|>\jPIbS{Uz;x-_z2h:O\8& gNmbqEjh< yI=)r| ngJtB¢X.ЊxJueFYv.>fj _G Y~|N~ɘGY? v>@Ү`Sked- ^+<4DfTLarRMF};6?Q=T/cbʖuqYZg̭"M颿#FȺ ǻ0(߿"7ɑGՂ/,[R%Up!`{VH;.J׊rc N@*[0ĦG@ 5֑F;C kiqCEf D tFvt5gkC̿=Jiɺj_ǤEJTH@{|~,f)HVB3td۩{]B/ug q|UHJ̤qpt}9sd^}bݍ̾Q?g?/m]3sFQז7v.e7NJT&5b~ŽYdN󶐆+a KC~=h3#p0_ a>u#ʼu 围lE-} t?CΉ5atiѪ8AV޻&<.~^3-iGKkBjg 9Hr.R:A +ip"΄R>M'Ift \*{ǔ&p 9JTK˝ޏGW`DZH4G dYbb/b4y_f+[ P 8y9MG,5X5X|FĐle5jq~6TM.TpҮ?D^]6w=OR =oIM{yd*fo6Vt{r B3ֽɥZnLeulseGӘOن[:;!.ELRbDtNǩܪ3`u("O2 e`5TY_z4z= J_Mɾ)GG4>&܆>pv۹ɡQA i3U+yܰ=\2Qi͞MD_*F'Gڻxj-RvwDzf $I=\*d'̗A eNX=sÎ>E&ry$tY Co,z=1ő܁w嘚 נ6+…G$SA$6ʤb2x{+ dS>I8ZPdmtd*D:&: Q{+Fڷ8uIŰCe0dH.:1vZ <!קI5gY(t/?%any7 sOQp|euޏ/-?fz=4any7 sFxԱ4|!3iW}Fτ-y;Glz=multani-sonata-bf88fdc/website/images/t_sonata8.jpg000066400000000000000000000116261500342040500225440ustar00rootroot00000000000000JFIF^`ExifMM*Created with GIMPCC$"  = !1VX#28ARTw"$4.!1AQaq"B2 ?:Lr|߶)c~ZvJ߃ىfNbl3FI<'? N"2g|FWZnc~7 50޺{ )yUWi3Iہyڛo;ie.LhE='YDe2|fd"Ɣ788NXDu1Xdv݂Iu̳p*̊+c^ f҃,Mw/Nx]LT@JB@H[("ХwVO-ݠ 2xBBH`x$xazϹm[V e'krՔ3XTjE L8Z0 xZ$ߗ_6H ~`Flmv"a730Nc qP0QҐ!d p+䡙ΰ8K 2?BIn9EY-;tka'|_hnUePG#W D&]64,YKWi,HW*r|  A0kETJŶ()uv,%̗oӻE,[Z_EI)MUu<myoPf3‰jVy3XD3 >{"3g`tI`] o*2$v:t"w4sBjEVQJ|ei;hzY0dMxy)2ɶ=N͠+lgY+ЃEXZiJ܍I' VcbV"dt+%B_y''Pjm+U9[|,MzY *)\$<_?7Vr*XRo5f%ŽEծ5lW5{Zq;%-V]GcV2pHN[2 0gÞy;R@})|CuSKo]7v\pϑs-Z0~o(g>rnk;W,>} |}yu[|{p=o}y&1e,~ |qǞ'Ko]J_k/Tb駟ﯙUhrCiKZ,WzS^UFe,Jv%KzkE! ~_k\s?ޡn_ ޟg PLvȄQ&$U2U( %:ǺyF G&oxop0-83珷Qqܻ%hF.ϣ fgPR1YVFʀgH*RRZR7*Q`rMBBAQ, ' Hô{`!U)<-z ֛5~Ů5X@ rdr3jZWٮԫQΉ WvYU6ZZurY`2"ĉe.Lf>funvҡw*ĵxJ:@Z-2eئ l&#7mLo8?nO{c]ۖwTLkh\Y݉]>ҩiZ8\q3#vwuG]'Pqsb2mV[ (2Hxc=S=Kԑ6_n vń,sed% s wCTR,jJԱ0 2I LK%ۓV5sCg=Wmȅ#Sm,gLYA\= .Gb6~_C_܍ۺ_\0vw3#LRc 5!Fw=a:gurw4,)O1zU)9[v|Z:t[S)ָK J״=vW틐mEK'Y#+ks?QCUA]R$2G_Uh-I,_PbrҤpb!i$@9M.so[ZxxBJ2TeIe fbZ :KrSׅ˫k_\B^Dö  #h yb2ݸe;.i5YmYSΑ="[׷bHz-n~Z ji2НG9<JK@R~$lfVp,+um]hZ)WW h.zߜaأgm5~~>]O섮lUP5.k̂aYJʢ՛4+Le+-g@B L;+*vrc%"J%Ro $G$Qd`čr[ϠO Yl 5t 9ZaVκ5pr!)i]i8{~{=ڕ nvDž/)ɔȖ Rw&=M]{["K=Klⱅ5ŝ0y Ֆ,qy*#Tu aȖ) 曞$A"c탃8zk1$sꌿk6<\z7m<.03n%|g8ˌg8ϗ\ț2ûC&Uhm`N-*HƽUY|d!Ev8 P&pa=qgA 2!rŤ={f1̡5H`K@|14jUlK -3/F߼c2I/~Xϗߞ4jQD^[ U@ #$0ĉ9X)g9l+Q˄\6A$kZBv,aZIcLNb-1-?Jg#7<+,w\4sƠCL;E@YM _Tͤbg`#$3egm)~ci/IQܝ<FƜ)F&!ɗ \c`1tkxg{\5oS V0ǥFvQWXdGŽ Qfjp[5Z&b;2 iԳVXrıg2qygUjƶݪmi|0 fZT3$$$u$g2' r$̇9G1{Uu{[-UU;3ѶV܎UжNu,3MOe3,W-mH>F|Ap՘, ;(3w<^ZW'~YZ|Aq:;$aq~Ei?Wrҿs䎎~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJV5ܻjV)rMGI,ܛ[[PG |"%eF1tttmultani-sonata-bf88fdc/website/images/t_sonata9.jpg000066400000000000000000000134571500342040500225510ustar00rootroot00000000000000JFIF_`ExifMM*Created with GIMPCC$"   ;  !"RU#$12A37Xw9 !1A"Qaq#2'U34GRe ?OGE5T,S qn a;NS̓Ͼ=,+gIO#;z 5ψ< y~"Q8{Q“ąs%eQ\o ޖAclQreF}u'vl,OYH5j 3qT<}\ B Q͡ $u9 =MDF$U IT\ChE:U[ qBWԆMn7Sv©}LWח6 e]A\sg6Lep uՅʉZ]ucC5X6=q|FY8>0=U֞GU!aD$R`pV#Ċde)F3rq-%5H"1$%gBϡBT`]&qYQĜ˪k5@W@ܢ9Z|K H8eeT'3#ϕ6eiO9(ﲣ.aIu:IbاE:WEAlLU8!#W5ҕ %6+Z}7}{ZHʷmV]9dd\EG0 YԱ)^TCAV Cku'am`/+лcRխ Eeu‰|t&yb+ YɤIG't ]שr+VDIyvQl*罌ŋ =Cqp̶&qY"E*YNָF Q[h-Gbsx>>)9oLQh%Kq\vǬ>̏-93XyrNHe\Klv_*Ny NeZJ{uʏMI֯г7|U]h:;]AWi̕SW0w{hXLٔGb@#I!19>r>ѮΟ`ꃧ۝ƿDLEQk))Z` .L`^Qr/ y/͑GM)֫_%LR4)Yi(3"2)61 !Pd& )kj &pPi"ǘ G[ip$ۙ?V6M+ e4 Le{3\֠K<:jT2F *#N9pd9B,,.y{b@lOr f1LSOFDqo,IJRϹF>2աryW%vrBmЎ2HfBL2.4j$"u {-9fR74Jd%I&%Pc!R"l+ԸKYbmTuؐN]N-XW<'m2(ⱕ ^Ccȓq_\kby*=,̯ If~2(RTBwǟ: ]s ۋ8T[^ע6W;vV{h8:̦4m&I„9-J%pܗUnTϵ`XIe#$U w L3r>_K-sqY4M扫z&tJM*};\yx6T2 X 6|pmCE;K`I+ d,251ſRGIgI ;}q_1GoíV(̥Zݣ)Ah]L i%15ÅŌF01,?==OUo~7\(~&8`918K!0le(\%uTQi}!5/#S1 0eSk i -y`O+~Sl o^=L$̹a7"#^iNNFN~B B|8h9Xه|zVS8 k,NĦ|W:l|M,}!%13ݜ?Js{Sa1oK'z2\l*ETٞ5@CBK~R,5KW:&ec'5?иDe5%HX &0͇QL@ 2^8X`Uy43>%3itx8"#O8ఔq9EM-V#,}#Trv)2f%nG<7b2!~_t's׷@l r{K؁[oK#rMU*uca}- ܬ+ oiS?9f52,'ʒE6ПVEO^w`/t5)Wple۔oV8](0M!Mk4?KsVx,c8K[HsqQ$g1;G1ϖ%v ezOSb[ۦ%6ПVE?zJCz D -5_ԍC1UGK !ML+$8]AM^zp-ZYΨ_Y.8k~FGLCKs𙧌B2X n40Hrp%FdK)s R@#Pumec#}3r^0AXYIep2O˷.禳zcKOMzwTWks4Wc+t UecZKYrM\`zU}YWSUKŸؔ?Oه(/z=}G5W ;ya,Ec"(3,HevXUx(禨4gKVX-.'[,N0qm˙d)"!ߧтo/~g Oه(/z='mo~g÷?3k+oq\ؖ\*moybXawǶq桬?HƸoMfuf2. 1'c܃*,_,gC2{K '8S k/[ 4bVr\ MX|x#C#e|JQƶQ78(c #!13?G°0lVh}d UQ)W͙H1jNAZGj*̬dZ55sUVXz[g%8N&jNd de9Q~3,rgʰt6^akSUrmԞ"S^U/ ;yc _Ԩ5h4iL0Zel,ĥOk6.74/e, Sonata Music Client for MPD

Sonata

An elegant music client for MPD.

   

   

About

Sonata is an elegant GTK+ music client for the Music Player Daemon (MPD). The latest version is 1.6.2.1.

Sonata is licensed by the GPL and is free software. It has been forked from the unmaintained Pygmy project in order to fix bugs, introduce new features, and proceed down a different path.

Features

- Expanded and collapsed views
- Automatic remote and local album art
- Library browsing by folders, or by genre/artist/album
- User-configurable columns
- Automatic fetching of lyrics
- Playlist and stream support
- Support for editing song tags
- Drag and drop to copy files
- Popup notification
- Library and playlist searching, filter as you type
- Audioscrobbler (last.fm) 1.2 support
- Multiple MPD profiles
- Keyboard friendly
- Support for multimedia keys
- Commandline control
- Available in 24 languages

Developers

Jonathan Ballet <jon@multani.info>

Past developers:
Scott Horowitz <stonecrest@gmail.com>
Tuukka Hastrup <Tuukka.Hastrup@iki.fi>
Stephen Boyd <bebarino@gmail.com>

multani-sonata-bf88fdc/website/screenshots.html000066400000000000000000000057641500342040500221310ustar00rootroot00000000000000 Sonata Music Client for MPD - Screenshots

Sonata

An elegant music client for MPD

Screenshots


The current playlist.


Jumping straight to track.


Music library, searchbar.


Artist & album browsing.


Batch tag editing.


Alternative album art.


Song info, lyrics, etc.


Collapsed "mini" view.


Notification window/tooltip.

multani-sonata-bf88fdc/website/screenstyle.css000066400000000000000000000045121500342040500217430ustar00rootroot00000000000000body { margin:10; padding:0; font-family:verdana, arial, sans-serif; font-size:80%; color:#666666; text-align:center; background-color:#EEEEEE;} p, dl { margin:0.2em 0 1.2em 0.6em; padding:0.3em; align:justify;} h1 { padding:0; margin:0; font-size:250%; font-weight:normal; font-style:italic; color:#658bb5; font-family:"Trebuchet MS", verdana, arial, sans-serif;} h2 { background-color:#DDDDDD; color:#3B4471; font-size:100%; font-weight:normal; margin:0.5em; padding:0; font-style:italic; font-family:"Trebuchet MS", verdana, arial, sans-serif;} div { margin:0; padding:0; display:block;} a:link, a:visited { color:#658bb5; text-decoration:underline;} a:hover { color:#3B4471; text-decoration:underline;} a:active { color:#658bb5; text-decoration:underline;} img { border:0;} .container { background-color:#FFFFFF; margin:0 auto 0 auto; padding:0; width:65%; border: 1px solid #BBBBBB} .titleblock { padding:2em 2em 2em 13em; margin:0; text-align:left; background-image:url(images/logo.png); background-repeat:no-repeat; background-position:left center;} .titleblock p { text-indent:4em; color:#3B4471;} ul.navbar { list-style-type:none; float:left; display:block; width:100%; line-height:0.2em; clear:both; margin:0; padding:0; background-color:#999999;} ul.navbar li { display:inline;} a.nav:link, a.nav:visited { display:block; float:left; width:16.64%; padding:1.2em 0 1.2em 0; margin:0; text-decoration:none; background-color:#999999; color:#FFFFFF;} a.nav:hover, a.nav:active{ display:block; float:left; width:16.64%; padding:1.2em 0 1.2em 0; margin:0; text-decoration:none; background-color:#658bb5; color:#FFFFFF;} .leftcontainer { float:left; clear:both; width:165px; margin:1em 0 0 0; padding:0;} .leftbox { margin:0.5em; padding:0.3em; border:1px solid #999999; text-align:center;} .leftcontainer h2 { text-align:left; padding:0 0 0 1.5em;} .linkbox a {display:block;} .content { clear:right; text-align:left; margin:2.5em 1.2em 0 165px; padding:1em 1ex 1em 1.5ex;} .content2 { clear:right; text-align:left; margin:2.5em 1.2em 0 1.2em; padding:1em 1ex 1em 1.5ex;} .content h2 {text-indent:0.5em;} .content2 h2 {text-indent:0.5em;} .footer { color:#999999; font-size:75%; margin:0.5em 2.2em 0.5em 2.5em; padding:0.8em; text-align:left; clear:both;} .footer .right { float:right; clear:right; text-align:right;} .footer p {margin:0;} multani-sonata-bf88fdc/website/sonata32.png000066400000000000000000000037271500342040500210400ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs  tIME4 t1ntEXtCommentCreated with GIMPW2IDATXõ[l\Wϙx$npPm*B %EU.JI ajHOQ$T!@BMTLEBER/(m'qc'؞qbK[gў6$<x""?ܳg#G ݻW9̃ϝw3㊈ADDDbcd刍dhDNђwbٿtzJ5x(Q[gxUEbԒ3 QD3޳g]ڽ{!S,xSQC@Zס\E-BJQ#Lj[ <<_( M6xsj Iq]N+`m˝s`~zEyeym^?i@ڻ8nzsm*̜Gt29v=a[$nN!/eti|0 &t\6:E_y[O3O>}*}}}{nvN;1_ *my-֩&׭&ס)NJJS(:n˟Ztll챇~xD<ϣ'7< Sonata Music Client for MPD - Support

Sonata

An elegant music client for MPD

Support

The project is hosted at https://github.com/multani/sonata.
There you can file bug reports and feature requests, etc.

There are also a mailing list:

   sonata-users - Questions, comments, suggestions