pax_global_header00006660000000000000000000000064140033760220014507gustar00rootroot0000000000000052 comment=2c5f24371f9a31dec5d40aaedf4acdd8741e3e58 pymediainfo-5.0.3/000077500000000000000000000000001400337602200140205ustar00rootroot00000000000000pymediainfo-5.0.3/AUTHORS000066400000000000000000000002171400337602200150700ustar00rootroot00000000000000Patrick Altman (author) cjlucas https://github.com/cjlucas Louis Sautier (maintainer since 2016) pymediainfo-5.0.3/LICENSE000066400000000000000000000022751400337602200150330ustar00rootroot00000000000000The MIT License Copyright (c) 2010-2014, Patrick Altman Copyright (c) 2016, Louis Sautier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. http://www.opensource.org/licenses/mit-license.php pymediainfo-5.0.3/Makefile000066400000000000000000000001321400337602200154540ustar00rootroot00000000000000.PHONY: all all: tox -p .PHONY: qa qa: tox -p -e "docs,black,flake8,isort,mypy,pylint" pymediainfo-5.0.3/PKG-INFO000066400000000000000000000043521400337602200151210ustar00rootroot00000000000000Metadata-Version: 1.2 Name: pymediainfo Version: 5.0.3 Summary: A Python wrapper for the mediainfo library. Home-page: https://github.com/sbraz/pymediainfo Author: Louis Sautier Author-email: sautier.louis@gmail.com License: MIT Project-URL: Documentation, https://pymediainfo.readthedocs.io/ Project-URL: Bugs, https://github.com/sbraz/pymediainfo/issues Description: pymediainfo ----------- .. image:: https://img.shields.io/pypi/v/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://img.shields.io/pypi/pyversions/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://repology.org/badge/tiny-repos/python:pymediainfo.svg :target: https://repology.org/metapackage/python:pymediainfo .. image:: https://img.shields.io/pypi/implementation/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://travis-ci.com/sbraz/pymediainfo.svg?branch=master :target: https://travis-ci.com/sbraz/pymediainfo .. image:: https://ci.appveyor.com/api/projects/status/g15a2daem1oub57n/branch/master?svg=true :target: https://ci.appveyor.com/project/sbraz/pymediainfo This small package is a wrapper around the MediaInfo library. It works on Linux, Mac OS X and Windows and is tested with Python 3.6, 3.7, 3.8, 3.9 and PyPy3. See https://pymediainfo.readthedocs.io/ for more information. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Operating System :: POSIX :: Linux Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: License :: OSI Approved :: MIT License Requires-Python: >=3.6 pymediainfo-5.0.3/README.rst000066400000000000000000000017521400337602200155140ustar00rootroot00000000000000pymediainfo ----------- .. image:: https://img.shields.io/pypi/v/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://img.shields.io/pypi/pyversions/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://repology.org/badge/tiny-repos/python:pymediainfo.svg :target: https://repology.org/metapackage/python:pymediainfo .. image:: https://img.shields.io/pypi/implementation/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://travis-ci.com/sbraz/pymediainfo.svg?branch=master :target: https://travis-ci.com/sbraz/pymediainfo .. image:: https://ci.appveyor.com/api/projects/status/g15a2daem1oub57n/branch/master?svg=true :target: https://ci.appveyor.com/project/sbraz/pymediainfo This small package is a wrapper around the MediaInfo library. It works on Linux, Mac OS X and Windows and is tested with Python 3.6, 3.7, 3.8, 3.9 and PyPy3. See https://pymediainfo.readthedocs.io/ for more information. pymediainfo-5.0.3/appveyor.yml000066400000000000000000000035751400337602200164220ustar00rootroot00000000000000image: # Currently required to support Python 3.9 - Visual Studio 2019 environment: MEDIAINFO_VERSION: 20.09 TWINE_PASSWORD: secure: /EO8CxTxhQVNsGNZZvU51jjHwPW524rgddNlwOAyLoA= matrix: - PYTHON: "C:/Python36" TOXENV: py36 - PYTHON: "C:/Python37" TOXENV: py37 - PYTHON: "C:/Python38" TOXENV: py38 - PYTHON: "C:/Python39" TOXENV: py39 - PYTHON: "C:/Python36-x64" TOXENV: py36 - PYTHON: "C:/Python37-x64" TOXENV: py37 - PYTHON: "C:/Python38-x64" TOXENV: py38 - PYTHON: "C:/Python39-x64" TOXENV: py39 install: - "SET PATH=%PYTHON%;%PYTHON%/Scripts;%PATH%" - "python --version" - "IF %PYTHON:~-4% == -x64 (SET ARCH=x64) ELSE (SET ARCH=i386)" - ps: "Start-FileDownload https://mediaarea.net/download/binary/mediainfo/${Env:MEDIAINFO_VERSION}/MediaInfo_CLI_${Env:MEDIAINFO_VERSION}_Windows_${Env:ARCH}.zip" - ps: "unzip -o MediaInfo_CLI_${Env:MEDIAINFO_VERSION}_Windows_${Env:ARCH}.zip LIBCURL.DLL" - ps: "Start-FileDownload https://mediaarea.net/download/binary/libmediainfo0/${Env:MEDIAINFO_VERSION}/MediaInfo_DLL_${Env:MEDIAINFO_VERSION}_Windows_${Env:ARCH}_WithoutInstaller.7z" - ps: "7z -y x MediaInfo_DLL_${Env:MEDIAINFO_VERSION}_Windows_${Env:ARCH}_WithoutInstaller.7z MediaInfo.dll Developers/License.html" # Required for tests to pass with tox, Windows looks for DLLs in PATH - ps: "Copy-Item -Path MediaInfo.dll -Destination ${Env:PYTHON}" - "move MediaInfo.dll pymediainfo" - "move Developers\\License.html docs" # TODO: remove the constraint when https://github.com/tox-dev/tox/issues/1550 is fixed - "pip install --upgrade setuptools tox==3.8.3 twine wheel" build_script: - "python setup.py bdist_wheel" test_script: - "tox" deploy_script: - ps: If ($env:APPVEYOR_REPO_TAG -eq "true") { Invoke-Expression "twine upload --skip-existing -u sbraz dist/*.whl" } pymediainfo-5.0.3/demo.py000077500000000000000000000014411400337602200153210ustar00rootroot00000000000000#!/usr/bin/env python3 """ a demo that shows how to call pymediainfo """ import sys from pprint import pprint from pymediainfo import MediaInfo def print_frame(text): print("+-{}-+".format("-" * len(text))) print("| {} |".format(text)) print("+-{}-+".format("-" * len(text))) def process(fname): media_info = MediaInfo.parse(fname) for track in media_info.tracks: print_frame(track.track_type) pprint(track.to_data()) print() for track in media_info.tracks: if track.track_type == 'General' and track.duration: print("Duration: {} sec.".format(track.duration / 1000.0)) if __name__ == "__main__": if len(sys.argv) == 1: print("Usage: {} ".format(sys.argv[0])) sys.exit(0) process(sys.argv[1]) pymediainfo-5.0.3/docs/000077500000000000000000000000001400337602200147505ustar00rootroot00000000000000pymediainfo-5.0.3/docs/Makefile000066400000000000000000000167741400337602200164270ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" .PHONY: clean clean: rm -rf $(BUILDDIR)/* .PHONY: html html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." .PHONY: dirhtml dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." .PHONY: singlehtml singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." .PHONY: pickle pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." .PHONY: json json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." .PHONY: htmlhelp htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." .PHONY: qthelp qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pymediainfo.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pymediainfo.qhc" .PHONY: applehelp applehelp: $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp @echo @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." @echo "N.B. You won't be able to view it unless you put it in" \ "~/Library/Documentation/Help or install it in your application" \ "bundle." .PHONY: devhelp devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/pymediainfo" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pymediainfo" @echo "# devhelp" .PHONY: epub epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." .PHONY: latex latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." .PHONY: latexpdf latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: latexpdfja latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: text text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." .PHONY: man man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." .PHONY: texinfo texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." .PHONY: info info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." .PHONY: gettext gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." .PHONY: changes changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." .PHONY: linkcheck linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." .PHONY: doctest doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." .PHONY: coverage coverage: $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/coverage/python.txt." .PHONY: xml xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." .PHONY: pseudoxml pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." pymediainfo-5.0.3/docs/conf.py000066400000000000000000000237461400337602200162630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # pymediainfo documentation build configuration file, created by # sphinx-quickstart on Tue Feb 9 10:51:37 2016. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import os import subprocess import sys import pkg_resources # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc' ] # Type hints aren't very readable in the doc at the moment autodoc_typehints = "none" # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = 'pymediainfo' copyright = 'Patrick Altman, Louis Sautier' author = 'Patrick Altman, Louis Sautier' # We can't use setuptools_scm's version on Read the Docs because they alter # conf.py before running Sphinx, dirtying the repository, which results in # an incorrect version being computed. # https://github.com/pypa/setuptools_scm/issues/84 # https://github.com/readthedocs/readthedocs.org/issues/2144 # Instead, follow setuptools_scm's recommendation and rely on the # version of the installed package (which is correct because # the repository hasn't been changed prior to installation). # https://github.com/pypa/setuptools_scm#usage-from-sphinx if os.environ.get("READTHEDOCS") == "True": version = pkg_resources.get_distribution(project).version else: # The project root is the parent directory root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Get the version from setup.py --version (inspired by jaraco.packaging) version = subprocess.check_output([sys.executable, "setup.py", "--version"], cwd=root, universal_newlines=True).strip() # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { "page_width": "auto", "fixed_sidebar": True } # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr' #html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # Now only 'ja' uses this config value #html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. #html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'pymediainfodoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', # Latex figure (float) alignment #'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'pymediainfo.tex', 'pymediainfo Documentation', 'Patrick Altman, Louis Sautier', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'pymediainfo', 'pymediainfo Documentation', [author], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'pymediainfo', 'pymediainfo Documentation', author, 'pymediainfo', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False pymediainfo-5.0.3/docs/index.rst000066400000000000000000000115371400337602200166200ustar00rootroot00000000000000.. pymediainfo documentation master file, created by Welcome to pymediainfo's documentation! ======================================= .. toctree:: :maxdepth: 1 pymediainfo ============ Requirements ============ This is a simple wrapper around the MediaInfo library, which you can find at https://mediaarea.net/en/MediaInfo. .. note:: * Without the library, this package **cannot parse media files**, which severely limits its functionality. * Binary wheels containing a bundled library version are provided for Windows and Mac OS X. * Packages are available for `several major Linux distributions `_. They depend on the library most of the time and are the preferred way to use pymediainfo on Linux unless a specific version of the package is required. =============== Using MediaInfo =============== There isn't much to this library so instead of a lot of documentation it is probably best to just demonstrate how it works: Getting information from an image --------------------------------- .. code-block:: python from pymediainfo import MediaInfo media_info = MediaInfo.parse("/home/user/image.jpg") # Tracks can be accessed via the 'tracks' attribute or through shortcuts # such as 'image_tracks', 'audio_tracks', 'video_tracks', etc. general_track = media_info.general_tracks[0] image_track = media_info.image_tracks[0] print( f"{image_track.format} of {image_track.width}×{image_track.height} pixels" f" and {general_track.file_size} bytes." ) Will return something like: .. code-block:: none JPEG of 828×828 pixels and 19098 bytes. Getting information from a video -------------------------------- .. code-block:: python from pprint import pprint from pymediainfo import MediaInfo media_info = MediaInfo.parse("my_video_file.mp4") for track in media_info.tracks: if track.track_type == "Video": print("Bit rate: {t.bit_rate}, Frame rate: {t.frame_rate}, " "Format: {t.format}".format(t=track) ) print("Duration (raw value):", track.duration) print("Duration (other values:") pprint(track.other_duration) elif track.track_type == "Audio": print("Track data:") pprint(track.to_data()) Will return something like: .. code-block:: none Bit rate: 3117597, Frame rate: 23.976, Format: AVC Duration (raw value): 958 Duration (other values): ['958 ms', '958 ms', '958 ms', '00:00:00.958', '00:00:00;23', '00:00:00.958 (00:00:00;23)'] Track data: {'bit_rate': 236392, 'bit_rate_mode': 'VBR', 'channel_layout': 'L R', 'channel_positions': 'Front: L R', 'channel_s': 2, 'codec_id': 'mp4a-40-2', 'commercial_name': 'AAC', 'compression_mode': 'Lossy', … } Dumping objects --------------- In order to make debugging easier, :class:`pymediainfo.MediaInfo` and :class:`pymediainfo.Track` objects can be converted to `dict` using :py:meth:`pymediainfo.MediaInfo.to_data` and :py:meth:`pymediainfo.Track.to_data` respectively. The previous example demonstrates that. Parsing existing MediaInfo output --------------------------------- If you already have the XML data in a string in memory (e.g. you have previously parsed the file or were sent the dump from ``mediainfo --output=OLDXML`` by someone else), you can call the constructor directly: .. code-block:: python from pymediainfo import MediaInfo media_info = MediaInfo(raw_xml_string) Accessing Track attributes -------------------------- Since the attributes on the :class:`pymediainfo.Track` objects are being dynamically added as the XML output from MediaInfo is being parsed, there isn't a firm definition of what will be available at runtime. In order to make consuming the objects easier so that you can avoid having to use `hasattr` or `try/except` blocks, the `__getattribute__` method has been overriden and will just return `None` when and if an attribute is referenced but doesn't exist. This will enable you to write consuming code like: .. code-block:: python from pymediainfo import MediaInfo media_info = MediaInfo.parse("my_video_file.mp4") for track in media_info.tracks: if track.bit_rate is None: print("""{} tracks do not have bit rate associated with them.""".format(track.track_type)) else: print("{}: {}".format(track.track_type, track.bit_rate)) Output: .. code-block:: text General tracks do not have bit rate associated with them. Video: 46033920 Audio: 1536000 Menu tracks do not have bit rate associated with them. ======================= Reporting Issues / Bugs ======================= Please use the issue tracker in GitHub at https://github.com/sbraz/pymediainfo/issues to report all feature requests or bug reports. Thanks! Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` pymediainfo-5.0.3/docs/make.bat000066400000000000000000000161331400337602200163610ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled echo. coverage to run coverage check of the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) REM Check if sphinx-build is available and fallback to Python version if any %SPHINXBUILD% 1>NUL 2>NUL if errorlevel 9009 goto sphinx_python goto sphinx_ok :sphinx_python set SPHINXBUILD=python -m sphinx.__init__ %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) :sphinx_ok if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pymediainfo.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pymediainfo.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "coverage" ( %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage if errorlevel 1 exit /b 1 echo. echo.Testing of coverage in the sources finished, look at the ^ results in %BUILDDIR%/coverage/python.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) :end pymediainfo-5.0.3/docs/pymediainfo.rst000066400000000000000000000002101400337602200177770ustar00rootroot00000000000000pymediainfo package =================== Module contents --------------- .. automodule:: pymediainfo :members: :undoc-members: pymediainfo-5.0.3/pylintrc000066400000000000000000000432411400337602200156130ustar00rootroot00000000000000[MASTER] # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. extension-pkg-whitelist= # Specify a score threshold to be exceeded before program exits with error. fail-under=10.0 # Add files or directories to the blacklist. They should be base names, not # paths. ignore=CVS # Add files or directories matching the regex patterns to the blacklist. The # regex matches against base names, not paths. ignore-patterns= # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use. jobs=1 # Control the amount of potential inferred values when inferring a single # object. This can help the performance when dealing with large functions or # complex, nested conditions. limit-inference-results=100 # List of plugins (as comma separated values of python module names) to load, # usually to register additional checkers. load-plugins= # Pickle collected data for later comparisons. persistent=yes # When enabled, pylint would attempt to guess common misconfiguration and emit # user-friendly hints instead of false-positive error messages. suggestion-mode=yes # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no [MESSAGES CONTROL] # Only show warnings with the listed confidence levels. Leave empty to show # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. confidence= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifiers separated by comma (,) or put this # option multiple times (only on the command line, not in the configuration # file where it should appear only once). You can also use "--disable=all" to # disable everything first and then reenable specific checks. For example, if # you want to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". disable=print-statement, parameter-unpacking, unpacking-in-except, old-raise-syntax, backtick, long-suffix, old-ne-operator, old-octal-literal, import-star-module-level, non-ascii-bytes-literal, raw-checker-failed, bad-inline-option, locally-disabled, file-ignored, suppressed-message, useless-suppression, deprecated-pragma, use-symbolic-message-instead, apply-builtin, basestring-builtin, buffer-builtin, cmp-builtin, coerce-builtin, execfile-builtin, file-builtin, long-builtin, raw_input-builtin, reduce-builtin, standarderror-builtin, unicode-builtin, xrange-builtin, coerce-method, delslice-method, getslice-method, setslice-method, no-absolute-import, old-division, dict-iter-method, dict-view-method, next-method-called, metaclass-assignment, indexing-exception, raising-string, reload-builtin, oct-method, hex-method, nonzero-method, cmp-method, input-builtin, round-builtin, intern-builtin, unichr-builtin, map-builtin-not-iterating, zip-builtin-not-iterating, range-builtin-not-iterating, filter-builtin-not-iterating, using-cmp-argument, eq-without-hash, div-method, idiv-method, rdiv-method, exception-message-attribute, invalid-str-codec, sys-max-int, bad-python3-import, deprecated-string-function, deprecated-str-translate-call, deprecated-itertools-function, deprecated-types-field, next-method-defined, dict-items-not-iterating, dict-keys-not-iterating, dict-values-not-iterating, deprecated-operator-function, deprecated-urllib-function, xreadlines-attribute, deprecated-sys-function, exception-escape, comprehension-escape # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). See also the "--disable" option for examples. enable=c-extension-no-member [REPORTS] # Python expression which should return a score less than or equal to 10. You # have access to the variables 'error', 'warning', 'refactor', and 'convention' # which contain the number of messages in each category, as well as 'statement' # which is the total number of statements analyzed. This score is used by the # global evaluation report (RP0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Template used to display messages. This is a python new-style format string # used to format the message information. See doc for all details. #msg-template= # Set the output format. Available formats are text, parseable, colorized, json # and msvs (visual studio). You can also give a reporter class, e.g. # mypackage.mymodule.MyReporterClass. output-format=text # Tells whether to display a full report or only the messages. reports=no # Activate the evaluation score. score=yes [REFACTORING] # Maximum number of nested blocks for function / method body max-nested-blocks=5 # Complete name of functions that never returns. When checking for # inconsistent-return-statements if a never returning function is called then # it will be considered as an explicit return statement and no message will be # printed. never-returning-functions=sys.exit [FORMAT] # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. expected-line-ending-format= # Regexp for a line that is allowed to be longer than the limit. ignore-long-lines=^\s*(# )??$ # Number of spaces of indent required inside a hanging or continued line. indent-after-paren=4 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' # Maximum number of characters on a single line. max-line-length=100 # Maximum number of lines in a module. max-module-lines=1000 # Allow the body of a class to be on the same line as the declaration if body # contains single statement. single-line-class-stmt=no # Allow the body of an if to be on the same line as the test if there is no # else. single-line-if-stmt=no [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=FIXME, XXX, TODO # Regular expression of note tags to take in consideration. #notes-rgx= [BASIC] # Naming style matching correct argument names. argument-naming-style=snake_case # Regular expression matching correct argument names. Overrides argument- # naming-style. #argument-rgx= # Naming style matching correct attribute names. attr-naming-style=snake_case # Regular expression matching correct attribute names. Overrides attr-naming- # style. #attr-rgx= # Bad variable names which should always be refused, separated by a comma. bad-names=foo, bar, baz, toto, tutu, tata # Bad variable names regexes, separated by a comma. If names match any regex, # they will always be refused bad-names-rgxs= # Naming style matching correct class attribute names. class-attribute-naming-style=any # Regular expression matching correct class attribute names. Overrides class- # attribute-naming-style. #class-attribute-rgx= # Naming style matching correct class names. class-naming-style=PascalCase # Regular expression matching correct class names. Overrides class-naming- # style. #class-rgx= # Naming style matching correct constant names. const-naming-style=UPPER_CASE # Regular expression matching correct constant names. Overrides const-naming- # style. #const-rgx= # Minimum line length for functions/classes that require docstrings, shorter # ones are exempt. docstring-min-length=-1 # Naming style matching correct function names. function-naming-style=snake_case # Regular expression matching correct function names. Overrides function- # naming-style. #function-rgx= # Good variable names which should always be accepted, separated by a comma. good-names=i, j, k, ex, Run, _, f # Good variable names regexes, separated by a comma. If names match any regex, # they will always be accepted good-names-rgxs= # Include a hint for the correct naming format with invalid-name. include-naming-hint=no # Naming style matching correct inline iteration names. inlinevar-naming-style=any # Regular expression matching correct inline iteration names. Overrides # inlinevar-naming-style. #inlinevar-rgx= # Naming style matching correct method names. method-naming-style=snake_case # Regular expression matching correct method names. Overrides method-naming- # style. #method-rgx= # Naming style matching correct module names. module-naming-style=snake_case # Regular expression matching correct module names. Overrides module-naming- # style. #module-rgx= # Colon-delimited sets of names that determine each other's naming style when # the name regexes allow several styles. name-group= # Regular expression which should only match function or class names that do # not require a docstring. no-docstring-rgx=^_ # List of decorators that produce properties, such as abc.abstractproperty. Add # to this list to register other decorators that produce valid properties. # These decorators are taken in consideration only for invalid-name. property-classes=abc.abstractproperty # Naming style matching correct variable names. variable-naming-style=snake_case # Regular expression matching correct variable names. Overrides variable- # naming-style. #variable-rgx= [TYPECHECK] # List of decorators that produce context managers, such as # contextlib.contextmanager. Add to this list to register other decorators that # produce valid context managers. contextmanager-decorators=contextlib.contextmanager # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. generated-members= # Tells whether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # Tells whether to warn about missing members when the owner of the attribute # is inferred to be None. ignore-none=yes # This flag controls whether pylint should warn about no-member and similar # checks whenever an opaque object is returned when inferring. The inference # can return multiple potential results while evaluating a Python object, but # some branches might not be evaluated, which results in partial inference. In # that case, it might be useful to still emit no-member and other checks for # the rest of the inferred objects. ignore-on-opaque-inference=yes # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of # qualified names. ignored-classes=optparse.Values,thread._local,_thread._local # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis). It # supports qualified module names, as well as Unix pattern matching. ignored-modules= # Show a hint with possible names when a member name was not found. The aspect # of finding the hint is based on edit distance. missing-member-hint=yes # The minimum edit distance a name should have in order to be considered a # similar match for a missing member name. missing-member-hint-distance=1 # The total number of similar names that should be taken in consideration when # showing a hint for a missing member. missing-member-max-choices=1 # List of decorators that change the signature of a decorated function. signature-mutators= [LOGGING] # The type of string formatting that logging methods do. `old` means using % # formatting, `new` is for `{}` formatting. logging-format-style=old # Logging modules to check that the string format arguments are in logging # function parameter format. logging-modules=logging [STRING] # This flag controls whether inconsistent-quotes generates a warning when the # character used as a quote delimiter is used inconsistently within a module. check-quote-consistency=no # This flag controls whether the implicit-str-concat should generate a warning # on implicit string concatenation in sequences defined over several lines. check-str-concat-over-line-jumps=no [SPELLING] # Limits count of emitted suggestions for spelling mistakes. max-spelling-suggestions=4 # Spelling dictionary name. Available dictionaries: none. To make it work, # install the python-enchant package. spelling-dict= # List of comma separated words that should not be checked. spelling-ignore-words= # A path to a file that contains the private dictionary; one word per line. spelling-private-dict-file= # Tells whether to store unknown words to the private dictionary (see the # --spelling-private-dict-file option) instead of raising a message. spelling-store-unknown-words=no [VARIABLES] # List of additional names supposed to be defined in builtins. Remember that # you should avoid defining new builtins when possible. additional-builtins= # Tells whether unused global variables should be treated as a violation. allow-global-unused-variables=yes # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. callbacks=cb_, _cb # A regular expression matching the name of dummy variables (i.e. expected to # not be used). dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ # Argument names that match this expression will be ignored. Default to name # with leading underscore. ignored-argument-names=_.*|^ignored_|^unused_ # Tells whether we should check for unused import in __init__ files. init-import=no # List of qualified module names which can have objects that can redefine # builtins. redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io [SIMILARITIES] # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes # Ignore imports when computing similarities. ignore-imports=no # Minimum lines number of a similarity. min-similarity-lines=4 [DESIGN] # Maximum number of arguments for function / method. max-args=5 # Maximum number of attributes for a class (see R0902). max-attributes=7 # Maximum number of boolean expressions in an if statement (see R0916). max-bool-expr=5 # Maximum number of branch for function / method body. max-branches=12 # Maximum number of locals for function / method body. max-locals=15 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of public methods for a class (see R0904). max-public-methods=20 # Maximum number of return / yield for function / method body. max-returns=6 # Maximum number of statements in function / method body. max-statements=50 # Minimum number of public methods for a class (see R0903). min-public-methods=2 [CLASSES] # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__, __new__, setUp, __post_init__ # List of member names, which should be excluded from the protected access # warning. exclude-protected=_asdict, _fields, _replace, _source, _make # List of valid names for the first argument in a class method. valid-classmethod-first-arg=cls # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg=cls [IMPORTS] # List of modules that can be imported at any level, not just the top level # one. allow-any-import-level= # Allow wildcard imports from modules that define __all__. allow-wildcard-with-all=no # Analyse import fallback blocks. This can be used to support both Python 2 and # 3 compatible code, which means that the block might have code that exists # only in one or another interpreter, leading to false positives when analysed. analyse-fallback-blocks=no # Deprecated modules which should not be used, separated by a comma. deprecated-modules=optparse,tkinter.tix # Create a graph of external dependencies in the given file (report RP0402 must # not be disabled). ext-import-graph= # Create a graph of every (i.e. internal and external) dependencies in the # given file (report RP0402 must not be disabled). import-graph= # Create a graph of internal dependencies in the given file (report RP0402 must # not be disabled). int-import-graph= # Force import order to recognize a module as part of the standard # compatibility libraries. known-standard-library= # Force import order to recognize a module as part of a third party library. known-third-party=enchant # Couples of modules and preferred modules, separated by a comma. preferred-modules= [EXCEPTIONS] # Exceptions that will emit a warning when being caught. Defaults to # "BaseException, Exception". overgeneral-exceptions=BaseException, Exception pymediainfo-5.0.3/pymediainfo.egg-info/000077500000000000000000000000001400337602200200165ustar00rootroot00000000000000pymediainfo-5.0.3/pymediainfo.egg-info/PKG-INFO000066400000000000000000000043521400337602200211170ustar00rootroot00000000000000Metadata-Version: 1.2 Name: pymediainfo Version: 5.0.3 Summary: A Python wrapper for the mediainfo library. Home-page: https://github.com/sbraz/pymediainfo Author: Louis Sautier Author-email: sautier.louis@gmail.com License: MIT Project-URL: Documentation, https://pymediainfo.readthedocs.io/ Project-URL: Bugs, https://github.com/sbraz/pymediainfo/issues Description: pymediainfo ----------- .. image:: https://img.shields.io/pypi/v/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://img.shields.io/pypi/pyversions/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://repology.org/badge/tiny-repos/python:pymediainfo.svg :target: https://repology.org/metapackage/python:pymediainfo .. image:: https://img.shields.io/pypi/implementation/pymediainfo.svg :target: https://pypi.org/project/pymediainfo .. image:: https://travis-ci.com/sbraz/pymediainfo.svg?branch=master :target: https://travis-ci.com/sbraz/pymediainfo .. image:: https://ci.appveyor.com/api/projects/status/g15a2daem1oub57n/branch/master?svg=true :target: https://ci.appveyor.com/project/sbraz/pymediainfo This small package is a wrapper around the MediaInfo library. It works on Linux, Mac OS X and Windows and is tested with Python 3.6, 3.7, 3.8, 3.9 and PyPy3. See https://pymediainfo.readthedocs.io/ for more information. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Operating System :: POSIX :: Linux Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: License :: OSI Approved :: MIT License Requires-Python: >=3.6 pymediainfo-5.0.3/pymediainfo.egg-info/SOURCES.txt000066400000000000000000000015211400337602200217010ustar00rootroot00000000000000AUTHORS LICENSE Makefile README.rst appveyor.yml demo.py pylintrc setup.cfg setup.py tox.ini docs/Makefile docs/conf.py docs/index.rst docs/make.bat docs/pymediainfo.rst pymediainfo/__init__.py pymediainfo.egg-info/PKG-INFO pymediainfo.egg-info/SOURCES.txt pymediainfo.egg-info/dependency_links.txt pymediainfo.egg-info/namespace_packages.txt pymediainfo.egg-info/not-zip-safe pymediainfo.egg-info/requires.txt pymediainfo.egg-info/top_level.txt tests/test_pymediainfo.py tests/data/aac_he_v2.aac tests/data/accentué.txt tests/data/empty.gif tests/data/invalid.xml tests/data/issue100.xml tests/data/issue55.flv tests/data/mp3.mp3 tests/data/mp4-with-audio.mp4 tests/data/mpeg4.mp4 tests/data/other_track.xml tests/data/sample.mkv tests/data/sample.mp4 tests/data/sample.xml tests/data/sample_with_cover.mp3 tests/data/vbr_requires_parsespeed_1.mp4pymediainfo-5.0.3/pymediainfo.egg-info/dependency_links.txt000066400000000000000000000000011400337602200240640ustar00rootroot00000000000000 pymediainfo-5.0.3/pymediainfo.egg-info/namespace_packages.txt000066400000000000000000000000011400337602200243400ustar00rootroot00000000000000 pymediainfo-5.0.3/pymediainfo.egg-info/not-zip-safe000066400000000000000000000000011400337602200222440ustar00rootroot00000000000000 pymediainfo-5.0.3/pymediainfo.egg-info/requires.txt000066400000000000000000000000131400337602200224100ustar00rootroot00000000000000setuptools pymediainfo-5.0.3/pymediainfo.egg-info/top_level.txt000066400000000000000000000000141400337602200225430ustar00rootroot00000000000000pymediainfo pymediainfo-5.0.3/pymediainfo/000077500000000000000000000000001400337602200163245ustar00rootroot00000000000000pymediainfo-5.0.3/pymediainfo/__init__.py000066400000000000000000000513211400337602200204370ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : """ This module is a wrapper around the MediaInfo library. """ import ctypes import json import os import pathlib import re import sys import warnings import xml.etree.ElementTree as ET from typing import Any, Dict, List, Optional, Tuple, Union from pkg_resources import DistributionNotFound, get_distribution try: __version__ = get_distribution("pymediainfo").version except DistributionNotFound: pass class Track: """ An object associated with a media file track. Each :class:`Track` attribute corresponds to attributes parsed from MediaInfo's output. All attributes are lower case. Attributes that are present several times such as `Duration` yield a second attribute starting with `other_` which is a list of all alternative attribute values. When a non-existing attribute is accessed, `None` is returned. Example: >>> t = mi.tracks[0] >>> t >>> t.duration 3000 >>> t.other_duration ['3 s 0 ms', '3 s 0 ms', '3 s 0 ms', '00:00:03.000', '00:00:03.000'] >>> type(t.non_existing) NoneType All available attributes can be obtained by calling :func:`to_data`. """ def __eq__(self, other): # type: ignore return self.__dict__ == other.__dict__ def __getattribute__(self, name): # type: ignore try: return object.__getattribute__(self, name) except AttributeError: pass return None def __getstate__(self): # type: ignore return self.__dict__ def __setstate__(self, state): # type: ignore self.__dict__ = state def __init__(self, xml_dom_fragment: ET.Element): self.track_type = xml_dom_fragment.attrib["type"] repeated_attributes = [] for elem in xml_dom_fragment: node_name = elem.tag.lower().strip().strip("_") if node_name == "id": node_name = "track_id" node_value = elem.text if getattr(self, node_name) is None: setattr(self, node_name, node_value) else: other_node_name = f"other_{node_name}" repeated_attributes.append((node_name, other_node_name)) if getattr(self, other_node_name) is None: setattr(self, other_node_name, [node_value]) else: getattr(self, other_node_name).append(node_value) for primary_key, other_key in repeated_attributes: try: # Attempt to convert the main value to int # Usually, if an attribute is repeated, one of its value # is an int and others are human-readable formats setattr(self, primary_key, int(getattr(self, primary_key))) except ValueError: # If it fails, try to find a secondary value # that is an int and swap it with the main value for other_value in getattr(self, other_key): try: current = getattr(self, primary_key) # Set the main value to an int setattr(self, primary_key, int(other_value)) # Append its previous value to other values getattr(self, other_key).append(current) break except ValueError: pass def __repr__(self): # type: ignore return "".format(self.track_id, self.track_type) def to_data(self) -> Dict[str, Any]: """ Returns a dict representation of the track attributes. Example: >>> sorted(track.to_data().keys())[:3] ['codec', 'codec_extensions_usually_used', 'codec_url'] >>> t.to_data()["file_size"] 5988 :rtype: dict """ return self.__dict__ class MediaInfo: """ An object containing information about a media file. :class:`MediaInfo` objects can be created by directly calling code from libmediainfo (in this case, the library must be present on the system): >>> pymediainfo.MediaInfo.parse("/path/to/file.mp4") Alternatively, objects may be created from MediaInfo's XML output. Such output can be obtained using the ``XML`` output format on versions older than v17.10 and the ``OLDXML`` format on newer versions. Using such an XML file, we can create a :class:`MediaInfo` object: >>> with open("output.xml") as f: ... mi = pymediainfo.MediaInfo(f.read()) :param str xml: XML output obtained from MediaInfo. :param str encoding_errors: option to pass to :func:`str.encode`'s `errors` parameter before parsing `xml`. :raises xml.etree.ElementTree.ParseError: if passed invalid XML. :var tracks: A list of :py:class:`Track` objects which the media file contains. For instance: >>> mi = pymediainfo.MediaInfo.parse("/path/to/file.mp4") >>> for t in mi.tracks: ... print(t) """ def __eq__(self, other): # type: ignore return self.tracks == other.tracks def __init__(self, xml: str, encoding_errors: str = "strict"): xml_dom = ET.fromstring(xml.encode("utf-8", encoding_errors)) self.tracks = [] # This is the case for libmediainfo < 18.03 # https://github.com/sbraz/pymediainfo/issues/57 # https://github.com/MediaArea/MediaInfoLib/commit/575a9a32e6960ea34adb3bc982c64edfa06e95eb if xml_dom.tag == "File": xpath = "track" else: xpath = "File/track" for xml_track in xml_dom.iterfind(xpath): self.tracks.append(Track(xml_track)) def _tracks(self, track_type: str) -> List[Track]: return [track for track in self.tracks if track.track_type == track_type] @property def general_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``General``. :rtype: list of :class:`Track`\\s """ return self._tracks("General") @property def video_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``Video``. :rtype: list of :class:`Track`\\s """ return self._tracks("Video") @property def audio_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``Audio``. :rtype: list of :class:`Track`\\s """ return self._tracks("Audio") @property def text_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``Text``. :rtype: list of :class:`Track`\\s """ return self._tracks("Text") @property def other_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``Other``. :rtype: list of :class:`Track`\\s """ return self._tracks("Other") @property def image_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``Image``. :rtype: list of :class:`Track`\\s """ return self._tracks("Image") @property def menu_tracks(self) -> List[Track]: """ :return: All :class:`Track`\\s of type ``Menu``. :rtype: list of :class:`Track`\\s """ return self._tracks("Menu") @staticmethod def _normalize_filename(filename: Any) -> Any: # TODO: wait for https://github.com/python/typeshed/pull/4582 pylint: disable=fixme # to be included in a mypy release if hasattr(os, "PathLike") and isinstance(filename, os.PathLike): # type: ignore return os.fspath(filename) if pathlib is not None and isinstance(filename, pathlib.PurePath): return str(filename) return filename @classmethod def _define_library_prototypes(cls, lib: Any) -> Any: lib.MediaInfo_Inform.restype = ctypes.c_wchar_p lib.MediaInfo_New.argtypes = [] lib.MediaInfo_New.restype = ctypes.c_void_p lib.MediaInfo_Option.argtypes = [ ctypes.c_void_p, ctypes.c_wchar_p, ctypes.c_wchar_p, ] lib.MediaInfo_Option.restype = ctypes.c_wchar_p lib.MediaInfo_Inform.argtypes = [ctypes.c_void_p, ctypes.c_size_t] lib.MediaInfo_Inform.restype = ctypes.c_wchar_p lib.MediaInfo_Open.argtypes = [ctypes.c_void_p, ctypes.c_wchar_p] lib.MediaInfo_Open.restype = ctypes.c_size_t lib.MediaInfo_Open_Buffer_Init.argtypes = [ ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ] lib.MediaInfo_Open_Buffer_Init.restype = ctypes.c_size_t lib.MediaInfo_Open_Buffer_Continue.argtypes = [ ctypes.c_void_p, ctypes.c_char_p, ctypes.c_size_t, ] lib.MediaInfo_Open_Buffer_Continue.restype = ctypes.c_size_t lib.MediaInfo_Open_Buffer_Continue_GoTo_Get.argtypes = [ctypes.c_void_p] lib.MediaInfo_Open_Buffer_Continue_GoTo_Get.restype = ctypes.c_uint64 lib.MediaInfo_Open_Buffer_Finalize.argtypes = [ctypes.c_void_p] lib.MediaInfo_Open_Buffer_Finalize.restype = ctypes.c_size_t lib.MediaInfo_Delete.argtypes = [ctypes.c_void_p] lib.MediaInfo_Delete.restype = None lib.MediaInfo_Close.argtypes = [ctypes.c_void_p] lib.MediaInfo_Close.restype = None @classmethod def _get_library( # pylint: disable=too-many-branches cls, library_file: Optional[str] = None, ) -> Tuple[Any, Any, str, Tuple[int, ...]]: os_is_nt = os.name in ("nt", "dos", "os2", "ce") if os_is_nt: lib_type = ctypes.WinDLL # type: ignore else: lib_type = ctypes.CDLL if library_file is None: if os_is_nt: library_names = ("MediaInfo.dll",) elif sys.platform == "darwin": library_names = ("libmediainfo.0.dylib", "libmediainfo.dylib") else: library_names = ("libmediainfo.so.0",) script_dir = os.path.dirname(__file__) # Look for the library file in the script folder for library in library_names: lib_path = os.path.join(script_dir, library) if os.path.isfile(lib_path): # If we find it, don't try any other filename library_names = (lib_path,) break else: library_names = (library_file,) for library in library_names: try: lib = lib_type(library) cls._define_library_prototypes(lib) # Without a handle, there might be problems when using concurrent threads # https://github.com/sbraz/pymediainfo/issues/76#issuecomment-574759621 handle = lib.MediaInfo_New() version = lib.MediaInfo_Option(handle, "Info_Version", "") match = re.search(r"^MediaInfoLib - v(\S+)", version) if match: lib_version_str = match.group(1) lib_version = tuple(int(_) for _ in lib_version_str.split(".")) else: raise RuntimeError("Could not determine library version") return (lib, handle, lib_version_str, lib_version) except OSError: pass raise OSError("Failed to load library") @classmethod def can_parse(cls, library_file: Optional[str] = None) -> bool: """ Checks whether media files can be analyzed using libmediainfo. :param str library_file: path to the libmediainfo library, this should only be used if the library cannot be auto-detected. :rtype: bool """ try: lib, handle = cls._get_library(library_file)[:2] lib.MediaInfo_Close(handle) lib.MediaInfo_Delete(handle) return True except Exception: # pylint: disable=broad-except return False @classmethod def parse( # pylint: disable=too-many-statements # pylint: disable=too-many-branches, too-many-locals, too-many-arguments cls, filename: Any, library_file: Optional[str] = None, cover_data: bool = False, encoding_errors: str = "strict", parse_speed: float = 0.5, full: bool = True, legacy_stream_display: bool = False, mediainfo_options: Optional[Dict[str, str]] = None, output: Optional[str] = None, ) -> Union[str, "MediaInfo"]: """ Analyze a media file using libmediainfo. .. note:: Because of the way the underlying library works, this method should not be called simultaneously from multiple threads *with different arguments*. Doing so will cause inconsistencies or failures by changing library options that are shared across threads. :param filename: path to the media file or file-like object which will be analyzed. A URL can also be used if libmediainfo was compiled with CURL support. :param str library_file: path to the libmediainfo library, this should only be used if the library cannot be auto-detected. :param bool cover_data: whether to retrieve cover data as base64. :param str encoding_errors: option to pass to :func:`str.encode`'s `errors` parameter before parsing MediaInfo's XML output. :param float parse_speed: passed to the library as `ParseSpeed`, this option takes values between 0 and 1. A higher value will yield more precise results in some cases but will also increase parsing time. :param bool full: display additional tags, including computer-readable values for sizes and durations. :param bool legacy_stream_display: display additional information about streams. :param dict mediainfo_options: additional options that will be passed to the `MediaInfo_Option` function, for example: ``{"Language": "raw"}``. Do not use this parameter when running the method simultaneously from multiple threads, it will trigger a reset of all options which will cause inconsistencies or failures. :param str output: custom output format for MediaInfo, corresponds to the CLI's ``--Output`` parameter. Setting this causes the method to return a `str` instead of a :class:`MediaInfo` object. Useful values include: * the empty `str` ``""`` (corresponds to the default text output, obtained when running ``mediainfo`` with no additional parameters) * ``"XML"`` * ``"JSON"`` * ``%``-delimited templates (see ``mediainfo --Info-Parameters``) :type filename: str or pathlib.Path or os.PathLike or file-like object. :rtype: str if `output` is set. :rtype: :class:`MediaInfo` otherwise. :raises FileNotFoundError: if passed a non-existent file. :raises ValueError: if passed a file-like object opened in text mode. :raises OSError: if the library file could not be loaded. :raises RuntimeError: if parsing fails, this should not happen unless libmediainfo itself fails. Examples: >>> pymediainfo.MediaInfo.parse("tests/data/sample.mkv") >>> import json >>> mi = pymediainfo.MediaInfo.parse("tests/data/sample.mkv", ... output="JSON") >>> json.loads(mi)["media"]["track"][0] {'@type': 'General', 'TextCount': '1', 'FileExtension': 'mkv', 'FileSize': '5904', … } """ lib, handle, lib_version_str, lib_version = cls._get_library(library_file) # The XML option was renamed starting with version 17.10 if lib_version >= (17, 10): xml_option = "OLDXML" else: xml_option = "XML" # Cover_Data is not extracted by default since version 18.03 # See https://github.com/MediaArea/MediaInfoLib/commit/d8fd88a1 if lib_version >= (18, 3): lib.MediaInfo_Option(handle, "Cover_Data", "base64" if cover_data else "") lib.MediaInfo_Option(handle, "CharSet", "UTF-8") lib.MediaInfo_Option(handle, "Inform", xml_option if output is None else output) lib.MediaInfo_Option(handle, "Complete", "1" if full else "") lib.MediaInfo_Option(handle, "ParseSpeed", str(parse_speed)) lib.MediaInfo_Option(handle, "LegacyStreamDisplay", "1" if legacy_stream_display else "") if mediainfo_options is not None: if lib_version < (19, 9): warnings.warn( "This version of MediaInfo (v{}) does not support resetting all " "options to their default values, passing it custom options is not recommended " "and may result in unpredictable behavior, see " "https://github.com/MediaArea/MediaInfoLib/issues/1128".format(lib_version_str), RuntimeWarning, ) for option_name, option_value in mediainfo_options.items(): lib.MediaInfo_Option(handle, option_name, option_value) try: filename.seek(0, 2) file_size = filename.tell() filename.seek(0) except AttributeError: # filename is not a file-like object file_size = None if file_size is not None: # We have a file-like object, use the buffer protocol: # Some file-like objects do not have a mode if "b" not in getattr(filename, "mode", "b"): raise ValueError("File should be opened in binary mode") lib.MediaInfo_Open_Buffer_Init(handle, file_size, 0) while True: buffer = filename.read(64 * 1024) if buffer: # https://github.com/MediaArea/MediaInfoLib/blob/v20.09/Source/MediaInfo/File__Analyze.h#L1429 # 4th bit = finished if lib.MediaInfo_Open_Buffer_Continue(handle, buffer, len(buffer)) & 0x08: break # Ask MediaInfo if we need to seek seek = lib.MediaInfo_Open_Buffer_Continue_GoTo_Get(handle) # https://github.com/MediaArea/MediaInfoLib/blob/v20.09/Source/MediaInfoDLL/MediaInfoJNI.cpp#L127 if seek != ctypes.c_uint64(-1).value: filename.seek(seek) # Inform MediaInfo we have sought lib.MediaInfo_Open_Buffer_Init(handle, file_size, filename.tell()) else: break lib.MediaInfo_Open_Buffer_Finalize(handle) else: # We have a filename, simply pass it: filename = cls._normalize_filename(filename) # If an error occured if lib.MediaInfo_Open(handle, filename) == 0: lib.MediaInfo_Close(handle) lib.MediaInfo_Delete(handle) # If filename doesn't look like a URL and doesn't exist if "://" not in filename and not os.path.exists(filename): raise FileNotFoundError(filename) # We ran into another kind of error raise RuntimeError( "An error occured while opening {}" " with libmediainfo".format(filename) ) info: str = lib.MediaInfo_Inform(handle, 0) # Reset all options to their defaults so that they aren't # retained when the parse method is called several times # https://github.com/MediaArea/MediaInfoLib/issues/1128 # Do not call it when it is not required because it breaks threads # https://github.com/sbraz/pymediainfo/issues/76#issuecomment-575245093 if mediainfo_options is not None and lib_version >= (19, 9): lib.MediaInfo_Option(handle, "Reset", "") # Delete the handle lib.MediaInfo_Close(handle) lib.MediaInfo_Delete(handle) if output is None: return cls(info, encoding_errors) return info def to_data(self) -> Dict[str, Any]: """ Returns a dict representation of the object's :py:class:`Tracks `. :rtype: dict """ return {"tracks": [_.to_data() for _ in self.tracks]} def to_json(self) -> str: """ Returns a JSON representation of the object's :py:class:`Tracks `. :rtype: str """ return json.dumps(self.to_data()) pymediainfo-5.0.3/setup.cfg000066400000000000000000000005261400337602200156440ustar00rootroot00000000000000[build_sphinx] source-dir = docs build-dir = docs/_build all_files = 1 [upload_sphinx] upload-dir = docs/_build/html [metadata] description-file = README.rst [aliases] test = pytest [tool:pytest] addopts = -vv -r a markers = internet: tests that require Internet access [bdist_wheel] universal = 1 [egg_info] tag_build = tag_date = 0 pymediainfo-5.0.3/setup.py000066400000000000000000000046351400337602200155420ustar00rootroot00000000000000#!/usr/bin/env python import os from setuptools import find_packages, setup with open("README.rst") as f: long_description = f.read() data_files = [] bin_files = [] cmdclass = {} bin_license = 'docs/License.html' if os.path.exists(bin_license): data_files.append(('docs', [bin_license])) bin_files.extend(['MediaInfo.dll', 'libmediainfo.*']) try: from wheel.bdist_wheel import bdist_wheel class platform_bdist_wheel(bdist_wheel): def finalize_options(self): bdist_wheel.finalize_options(self) # Force the wheel to be marked as platform-specific self.root_is_pure = False def get_tag(self): python, abi, plat = bdist_wheel.get_tag(self) # The python code works for any Python version, # not just the one we are running to build the wheel return 'py3', 'none', plat cmdclass['bdist_wheel'] = platform_bdist_wheel except ImportError: pass setup( name='pymediainfo', author='Louis Sautier', author_email='sautier.louis@gmail.com', url='https://github.com/sbraz/pymediainfo', project_urls={ "Documentation": "https://pymediainfo.readthedocs.io/", "Bugs": "https://github.com/sbraz/pymediainfo/issues", }, description="""A Python wrapper for the mediainfo library.""", long_description=long_description, packages=find_packages(), namespace_packages=[], include_package_data=True, zip_safe=False, license='MIT', data_files=data_files, use_scm_version=True, python_requires=">=3.6", setup_requires=["setuptools_scm"], install_requires=["setuptools"], package_data={'pymediainfo': bin_files}, cmdclass=cmdclass, classifiers=[ "Development Status :: 5 - Production/Stable", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Operating System :: POSIX :: Linux", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "License :: OSI Approved :: MIT License", ] ) pymediainfo-5.0.3/tests/000077500000000000000000000000001400337602200151625ustar00rootroot00000000000000pymediainfo-5.0.3/tests/data/000077500000000000000000000000001400337602200160735ustar00rootroot00000000000000pymediainfo-5.0.3/tests/data/aac_he_v2.aac000066400000000000000000000161351400337602200203560ustar00rootroot00000000000000\@"@"n ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"x" ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"x@/R/ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N0! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N@#! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"x&q ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N@#! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N@#! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N@#! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"x&q ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N@#! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@"@"N@# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^\@#@"N@#! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^pymediainfo-5.0.3/tests/data/accentué.txt000066400000000000000000000000241400337602200210260ustar00rootroot00000000000000This is a test file pymediainfo-5.0.3/tests/data/empty.gif000066400000000000000000000000531400337602200177160ustar00rootroot00000000000000GIF89a!,D;pymediainfo-5.0.3/tests/data/invalid.xml000066400000000000000000000175621400337602200202560ustar00rootroot00000000000000 260 1 General General 0 1 1 1 Digital Video Digital Video DV English PCM PCM PCM English TimeCode TimeCode English credits.mov credits.mov mov MPEG-4 MPEG-4 mp4 m4v m4a m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v QuickTime qt http://www.apple.com/quicktime/download/standalone.html MPEG-4 MPEG-4 mp4 m4v m4a m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v 712816548 680 MiB 680 MiB 680 MiB 680 MiB 679.8 MiB 593474 9mn 53s 9mn 53s 474ms 9mn 53s 00:09:53.474 9608731 9 609 Kbps 194196 190 KiB (0%) 190 KiB 190 KiB 190 KiB 189.6 KiB 190 KiB (0%) 0.00027 UTC 2010-04-12 14:58:21 UTC 2010-04-12 15:00:37 UTC 2010-04-15 14:40:32 2010-04-15 09:40:32 Apple QuickTime Apple QuickTime Apple QuickTime <>00;05;34;23 148 1 Video Video 0 1 1 Digital Video dvc http://www.apple.com/quicktime/download/standalone.html DV DV DV Apple QuickTime DV (DVCPRO NTSC) http://www.apple.com/quicktime/download/standalone.html dvc 258558 4mn 18s 4mn 18s 558ms 4mn 18s 00:04:18.558 CBR Constant 20874240 20.9 Mbps 720 720 pixels 480 480 pixels 0.909 0.889 1.363 4:3 1.333 4:3 0.000 VFR Variable 21.744 21.744 fps 0.111 0.111 fps 29.970 29.970 fps 29.970 29.970 fps 5622 NTSC 4:1:1 Interlaced Interlaced Interlaced Interlaced 2.778 334768 5mn 34s 5mn 34s 768ms 5mn 34s 00:05:34.768 DropFrame=Yes / 24HourMax=No / IsVisual=No 0 674640000 643 MiB (95%) 643 MiB 643 MiB 643 MiB 643.4 MiB 643 MiB (95%) 0.94644 en English UTC 2010-04-12 14:58:21 UTC 2010-04-12 15:00:37 129 1 Audio Audio 0 2 2 PCM Little / Signed Little Signed sowt http://www.apple.com/quicktime/download/standalone.html PCM PCM PCM http://www.apple.com/quicktime/download/standalone.html sowt Little / Signed Little Signed 593474 9mn 53s 9mn 53s 474ms 9mn 53s 00:09:53.474 CBR Constant 512000 512 Kbps 1 1 channel 32000 32.0 KHz 18991168 16 16 bits 37982352 36.2 MiB (5%) 36 MiB 36 MiB 36.2 MiB 36.22 MiB 36.2 MiB (5%) 0.05328 en English UTC 2010-04-12 14:58:21 UTC 2010-04-12 15:00:37 51 1 Menu Menu 0 3 3 TimeCode en English UTC 2010-04-12 15:00:37 UTC 2010-04-12 15:00:37 pymediainfo-5.0.3/tests/data/issue100.xml000066400000000000000000000021001400337602200201570ustar00rootroot00000000000000 331 1 General General 0 1 1 2 AVC AVC AVC AAC LC AAC LC AAC LC RTP / RTP RTP / RTP RTP / RTP English / English pymediainfo-5.0.3/tests/data/issue55.flv000066400000000000000000000056121400337602200201120ustar00rootroot00000000000000FLV  onMetaData duration?333333 audiodatarate?@audiosamplerate@paudiosamplesize@0stereo audiocodecid@$track0encoder Lavf58.12.100filesize@ &!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&+!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&@!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&V!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&k!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&+!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&@!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&V!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&k!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&+!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&@!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&V!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&k!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&+!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&@!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&V!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&k!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1&+!EPF ZZZZZZZZZZZZZZZZZZZZZZZZ^1pymediainfo-5.0.3/tests/data/mp3.mp3000066400000000000000000000001101400337602200172030ustar00rootroot00000000000000HLAME3.98.2pymediainfo-5.0.3/tests/data/mp4-with-audio.mp4000066400000000000000000000027251400337602200212730ustar00rootroot00000000000000ftypisomisomiso2mp41freemdat! 7p! 7pmoovlmvhd/@trak\tkhd/@$edtselst/dmdia mdhdDU-hdlrsounSoundHandlerminfsmhd$dinfdref url stblgstsdWmp4aD3esds"@sttsstscstszststco,budtaZmeta!hdlrmdirappl-ilst%toodataLavf56.40.101pymediainfo-5.0.3/tests/data/mpeg4.mp4000066400000000000000000000004061400337602200175310ustar00rootroot00000000000000 ftypisomisomiso2avc1mp41freemdatmoovlmvhd@budtaZmeta!hdlrmdirappl-ilst%toodataLavf57.41.100pymediainfo-5.0.3/tests/data/other_track.xml000066400000000000000000000021531400337602200211230ustar00rootroot00000000000000 test.mxf 2 MPEG Video Version 2 3 PCM 1-Material Time code MXF TC 25.000 FPS 00:00:00:00 Material Package Yes 1-Source Time code MXF TC 25.000 FPS 00:00:00:00 Source Package Yes pymediainfo-5.0.3/tests/data/sample.mkv000066400000000000000000000137201400337602200200760ustar00rootroot00000000000000EߣBBBBBmatroskaBBSgMtMSIfSMSTkS MSTgS MSCpSsOIfA*ױB@Mlibebml v1.3.10 + libmatroska v1.5.2WAmkvmerge v45.0.0 ('Heaven in Pennies') 64-bitDDa\~{@Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !s/5R mTkׁsňF~s=r ꃁS_TEXT/UTF8D(CpEEEہEffsĈ9|rEChapter 01C|engTgAvssArchʁ2cňF~s=r cʅMOVIEgȐEBPSD0DzenggȦEDURATIOND00:00:00.000000000DzenggȝENUMBER_OF_FRAMESD0DzenggȜENUMBER_OF_BYTESD0DzenggE_STATISTICS_WRITING_APPDmkvmerge v45.0.0 ('Heaven in Pennies') 64-bitDzenggȻE_STATISTICS_WRITING_DATE_UTCD2020-11-13 21:48:23DzenggE_STATISTICS_TAGSDBPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTESDzengpymediainfo-5.0.3/tests/data/sample.mp4000066400000000000000000014261271400337602200200130ustar00rootroot00000000000000ftypisomisommoovlmvhdXL@iodsO)trak\tkhd?@8$mdia mdhd]YU6hdlrvideL-SMASH Video Handlerminfvmhd$dinfdref url stblstsdavc18HH AVC Codingpasp9avcCd(gd(@x'Z} p2h,colrnclxsttscttsstss(stsc  pstszI@tJB.,DdM\*[5qӫ^d'Ï8yaHtdjj4' AUg,bf-9,PIݰcS@/V1ZcsXBLUq^ TIDyˆyF&5P#uK7@;3Ƶ@o㏨N9`ĺǮϊ[hbCjAH6CSr8Md ،ѵݨw~wCxWgZy*y}/^5Փ%tAs̑w h-ɲ!8^h1${F: ƚ Rz nƗ7k5XԷ0`΋7' 2jBzN`ϱ-6emv#_G#j]f&gVV7 )tM 8ĵR^abdlXqddѾ/Qqo}3j-ޏ%Ʃ`6[QhJD$x+\9tZf?QtYtc? ^иd+%a@EGUaM+ atl =:t"g#|+\~ R\Z`EDNXQoڝ@^}?%r !kԀ~D+4vQ+E\eWlH:?65#j6\f^7N0|^;nlcL]@ar\׊2)Thfs$@$Do.ZG,K_)EY7#||Eӓz=7d+p{V 3Y94{K hrS@IBv7>+=ڐCA/C_2xbЩ08tUjS^_%2 -RUjCQ<u/ kj'7/e՛tZp}0bO1A9]ZK}gAs**G =Y* [TyWin#qğ*hVMܖE}AkgO0k/j4#8JD 10B"Qnb=я4+Eqhu%]%Q<㯦gK^dἢX9#K VP y̅JgiaE 1kldOk._ Q_`X[zwƗeO*"lAc0z; !ns0(BY 8]nQ91],J }}J\M_^w Fxք$ʴ+Vc|GԤxo(#殃CIͦg|x]@*N@7$azʱ5w伳jj.܃.((ǝ ɷo;]X{%󆹴<_Aϖ$dfl4? `6oZW7Mpqm1v ٓA/9j!qt1%FJWHMۯgDh!?q 6]tS+Ac}p (+^qLjYG}hJ*֝,ZbX:>7yU] /Hɞaj}4!>j@?5X i V> Ȥd}8F’AQv]κUvcm7IuZ75s*Ԅ`B]2KW&F:@A9p&o )\"*;=EԠ,8\eܾMZ5%N4uy |CʦYqؽR<91ID6ua3њ:v ~fn\ ; xS[>pg=:$ZM7.hQ 9xtE, 7tō(b3x#mG 0o0 | =*S@lzAizdu Rѕپhs;~Aw: L-"aHOq ؗ7=+0J5G_=G3.FF=I$Vz~P07}QeٰWx~^1*P(!ȥzۥ4^Vht1^`5p{B0j21x|b+LHhhvDNˮWp\?$"TZXeV|/BCv p/JF^#K{WJԔb}Ruz>7U.!)-I>wÅzh1tx<boÅѽj*~y(xO~|`-ٲ"zԋpNRҴ)B&"e=kdN~:,J]!{^{qWhR`} mn񣎷S An6n?| 7lkqO -Vϱ)ƩJ/ _`w<Y.j7f(/kf/X qCjqE{S7ܕg;FVtFP^^(OU bvWG,?NӝDџRҩYbHuNJы%nUl}LymL'BF) vIݸ*ܶxLo̭U ~<'XpkԄYx 3Wk*a+77HȢ\Y u IHB |[2ҧ{F߫K![.j:t4MQAO:v/4qq$F4>kDO3̛1j"r+/vsup9c"z/Y;b)v[)b.2AS@/3!OXS^(mG ssy!y:B|(Jr逖BQXn5ߤ5^3г 鯊pǵXf"A6sv g&.$b.6hY9@˧SԟSc)UjvɊȕ/*z]ʠx&UL:ňPלEEE-𰧶 i'"L#A|-V_+x \(YtXL~7,ae๻ 8$|/Rҟ1Զ`NKT!|Y'J ۥC&Hf'&{dq] LX3A@"#b Zƨ]ڼssȹ"AQ7]3yx 1Vž7\/zQ\_dž^l24 Vi^3oDp f :.hz>9eulC)LZqsl%_G(h sKa~pǴ,]оIGL5ic9[l  <Xr&op+N[dmxԳmC;vwdWH$wȣ O*LTuYv~CɃcd }1޲v1q4? zr mUk率LVQIJX\%ךm5G36ǻ~sF jM1{1TT(sn(7XDYx`6I֟G>2sp@I,`m71KԯM u=XES17ryfmj3㘿#V r>`knZ`4}HP :JW>}h 3$iVpBkM/oH+>WW 渉}Fbلt02B.&;i>{[>վEVTYC`a>羼 :Q@5%0;PÞhK0Sj* e曢:v̪!7T S\/vzBDמzzl$<)JwDLJi[CHNڞ ?/['s5fig|!y%qwD|'jH:yK\y , b/ -}Zy\xGW#YYi8ƕh 1-h&6&^oani@YO}2>v e0ERӮ.; )`4sUhQLg`6-gE| 3qaWBrATr%ڕH= L^C:)Ɍ({ 2w?7K 䁹ah"TNEe0F絵]r=UOM| Hyb=c_o5hXXLKSC@[[\/ѝ[dW խ &h7]D{6l 4af:2z̀cSy#E@"b"))nMLN?q}CT45[}F[Tq鶁Ɯ`A9?P;^< n[@ 伏EDnw=|ܘ?٪}\ r*gyzE0B~nA]XuR~-`3/\uowq3J޵j 4uRZ}bPiXU-ŸP ?P|eس b? aS:,->>1r_HE^l`MNg*Q ȐVkE@v߃{Qk׉wiZrdp~tR{oR#h-4œrǶbX9 w^cKnܩEe :mvtM^}T` 8[~ H@=XglJ AdKSxfN0h6P}?\ <]UuuƟ[P3!% "|<ˣkad_4ԩ\fh8/=LSl$u<@R-,Q.3^W~d@rj"FӸ7,̊-AӇKeBs6gqdlЕpt+EiiDjG8@\ނU`g:8ʫS42{{1'M71m-?17p@U5IC"op}1ceCRCq'Kcb‚D"4.=dhř%RGKew ۢD0$+ICXtIؓ2la ܟ(~Дs1$z У)Zr9쫌C*49߽(t6}O٢5(h+b}ٲvuaiũ;\1x;Z56O/F1}N(Ja !KNcK&.?j)T%F4!u Px> 34>w?/զb${&kYf%4c-t)wX@z\:'BJDS~ K.).}K.G{zr6}C̓(zduyuQw~>za*&5z`.q9TyJsmbYlg"D0uQ ?pʱ07pTN\YLs;KR Ɵ KPŢǁYXV*f>ZA h7@0I/zQv==9r[D.XƚUFuʕ{}"X?߈c}c'0 )턺@6]lo/`eâAB3Zx?lŸ-4NH?(5 y#hSnƫɝi!0꣔ ~ż`}:<ѿ|o3Q<ς(:9@ٛvI柋^^EN'a 0~ůϑ9ԁA12'$q?'C)ަl`jjn^X0aN%PY cwP0lzѭHaf'])R;rC&r97NxRvvNY~_ps2 KJcMvYQ3'Ÿ^RE떥Iǿa D{~JOn."b 䚵C wX*\v/,pdw(S)W6|3Q1c^zؠ3Tm( 8Icue `صEЦ/* 㐮z5vg0pw'Hu'_5qvc\j_ ߖŢ{:Uzfi"̒ +K $vɤLkң:V/`~ܘ2:]!lkᆅJ';"TV *՚=П)eGK a$' 'GЋ'" s[~l \iHg G6[^ݘ~T_.xfnh"R&%*sbd.mѶG%tޜ5tzGH@@@ϖttCPWMͳ 7!l U*`6eK@q݇/Z( xuꨲ6AcA(i)vac!eR'x䋼zm~ lZİt/4HI}(O0MCC+kc[ (a}5Kԗk|jY\A _ ;8Hw aX7>*P5MN!n}'=,ԃ=#+cJ.8~ v)%NIҔʝivfK9K W8Z]in-z}tpZ)S79tQ5wV@հؑ-MT`]}HG@0&zj5 nϬT=OEtvNaէ Q)yY41! 2_yKN!PM,W UP1`mW=1@lqj!C:c|Zc~vfgNS=wXM?2P"H|p6 g}PVjy;a2Ab*qpƥ-Dh{sN6ݢ@dj4*̓ ڼn5o~`oGIaaR\3)}<{;8^:K ғJ9?iamzg- Xr6a48Qx\Eiz%Dnhk1JKCM.9sDŽNbhn&.Ro撎ژ&CBXWቱwcՙ)@9v(Os2;7cKV>0""VlDK@+ 0L%$+B Y/-d & (ZBxdόQa%6l~ 1%b|UjE)re95NLt_G+&u[9{,>8 Tiag=4yyCOr(M0"\LT#\3 h|.y?@Յ:,D=X5y!CQlQO 46G=4sO@QDbMGYT8g5j!,>yQ.>P r,mw9DWR<\qS,o`<'6e :zaŴ߸4Ǽ7x `XlHu0mZ4znp l*+O=, Uf̦a}MLv1˾Ä\ Y{4dX#<+[xV < oʡ3W>IUՒ̐> #5 {Z~,c)/֐8LH29dM@Bn4?2˒.M D~A@1V& sX_Kzi[RL2#KhBK_X sN&k"]%u+ = Q)$}1clB*%k1bU:ɓUuA + {NIw!rMIr71cc;-Ψ˛іXQCWzr<,9Xh9(0V : "ޛ8n-,54"c-m#aIՕ vX;x7_E#oR :E6Ѧ,47Q`Kјwٌ50=9`QxvKSIw60*?c9L6LXQSWN4MldMFa!H#= y\g}XϠXh`d2׽%M^9~|,Z, vkbU\3=~޵f`$]6(% CZ&!5<3X'8䬽,Mѧ6{-€E20{1sN3"+B25B5/yg$rnz@"I[٩ *jh XѠ@+q0v({ vE)HL^f%H& ^!?EPz|(y˺{`L:.y*OU `HEM)hАz&wkcco}%zXN@)p޼w &mA:Zz5 D!xj6>[lh`s6a;X?"*w#CyWA8oxlel'j>G>cIO V~i ~@w 3T䯒@pmjy Yޗ["i:%N1+:|Il 5#|ojMh[cZG{A eZffLA%Dm> ډ`ԷǃOc@c.tQKQMa#)Q8e')#ڎY#u\~MUAm'h3 kv8.[ș81$iBҠV^8kNE"35<~u< kѮ}2^,M9~1..`N' ڭ%@72QQRwgLM|Nq6̯qO"*朎%PZCk}% Wd1;R%*,؟D0p$Fsoo A d"Tq 7H#?g? pԨen+^Vi\|Y @?ƀ`St ^XheG jYDRFl܇b=V2;R:RlXvfދ]#F^<)}RKB0kp1]8 fݔݿR]* 6qb곝V)?w"Nb2mM"zP $㌝})3방Y pen$gwq;rBj9* lTs8h硭` KѭCy*87" pHOhGexwD ._fY]{i#?ߗO$E 4dnC0D'7fy%.naa׵ފ,`O@o] n~Qt^w 5h)x "\k.6'n &x yKJK "v%, Жhsk[}`7%Nqɸy2nI]H_IV }o'eSA6O/螜ڦNMg8EK4Yd4EI7f6bdrYsŠ@ZpMP-k~eDLLG95An4K:+_BWg$W'$KFu L|{^~==sb lKܢ ±{8P7ٟ0v dsXD*n0uY GDn:\+/H;q\珤+cjDoz^ Nb>: 5-HsS]nqfMYfM3Bs̫!UQ5짧[73{45Zj|{1&P/-gaҿfk.Ju:L낈=ˤ1؃h0┳q|xe+279Ybv[m9q8µqJ")+VW:bTѻN_tm͍*ZdQJZCowWO*!cGZ5|m7:s ebtI.9O?\:sJ4F1;<@VxN~"a %K^~hv͔/089%m9𙔨jp_,3vb Ůބ u3;N` a&6uy׿K$@zsvqɾ2_Gpp[j7CzqB >7 Wp5/ ,3-nrYcYU7P`}eIHQ`gtfb#gPOk܀j1,$ NiAkPO'́BFu %FnbޗMvCf}vL]%} {nnB_Tʴ+Y>;?!`3/qC K\ zAgYx_)*[ȪPF;)<ՁGTص*\ܱ=1Œ*EF$.t CT3ol{NX-'^&bW2yG}n̲(YI:4sc36@s'@qV.kf"'B僒Rĉ/4{%Ujok5@ ]}jW2LڿN5TE{*tYTfrY%i1='>v{ʹsup2lt1C`?TDŽ㜉o\FU/b41.e]f?ܺHWLico $}rܮfB4)t!=r$V;3q蓷.rJ۽6ն"-/ $Q?fg+l5 PVC!xa۬bQr&8W#EPaOHf8yӹʹc>QBrs` ~Yb'l0: dPHGIm;NFimHL{ҶJ~;PiDTaW8PI_6҅B"F`#n[Y\oEF)&VK]]9H -6*eGy0?+tGȧ8Ӯa*"S ^}MY9bQU_?=&RJ& 4'1BU9fhuVPjԷE)"H~?VAv@9K,ix;LA@DPDF&v4iFwsG+.v`2rsBzϤy&F?bz]~[IЇZ(iҏ(h >2t_QѶ޴JLЃDզQmcDg$vҮb7*z&k/{E5UقbU3zK LgƛlQ[q_}Eeo%tY20 ]y&H&5/;Si/wd3m,یIOcbR֗'pv[쬡܄n* _w ZB;E(SODdwQ [ !s}1 E䞢DT$frT)xϓvEƪx?sƓyͺ+&eQ_+0>Nw`~-Oj5ۃFİg+Z)) c׫eJS%39猬'[VD;$YLk.D}dX V?\Ͱ-4/1fl]Ϭk1H!]2_ˆbC&&S4[8OB^%C:'Hs% 0N#H\}(oBkԅyr쳍zG |5 UnX5H5i4jgxVQ }7`Dz,xժԈH|Kac}U_[d{# c[ ~o\r֗зY P RN#[AV}}eTBdm7?[,<'PfodR &IsH)D |j`u 0Y Q$]X[V^, qz$ԖEoyyj`CU-Ҫz TwԼ$ȚX\FN H]Uo!򠘘Fd 3NXK8_Qrj%0^}Pm!w4>2kSSrg.\0/Diب&W쨳|E|j{R 1JPۇ8r|53/́yt^^hE{nڪ2F8$qVTъ[ZM]JSAr.,얾\65ݿn@qX&:B%hËo-Muϓa٘E^MUt&> [8a9*__أNhl: <.}[%eq8ġ6H("qSER0tVY/gGf ڗ͊a),WgZ&OCg{H؉-ln'Nt|j]DݘP h+M;֬tKj>tT%F:sBS$ʚ}W0Qa|N9̯Kΰ7VTVT4JF0ᥰ}u`8lY/D"t&QXX =6 v"lCU~4E]^•ƏU*ܓ>zj9P0O`WBM >DĭRĤ|BMj/ -Vd`SV %0KndK+хN #d&҄` rXRE|ۖ֊02TinX@iGMޡz5ip4NSy?kF/&؇ Hb4"zUȏD% QfjIqUWRk|WMm$ܒaҞJ #[ TK(%1TH>Byz%f%N=`hBk*l\[ewo6 fC 0Qܠ,hhL4UoCMt)2{Yj9EJv3gcw+T/#lHN B7!ǒ YMc(͖izJSK.6Gvl9Tj/I+(3fƒpC['m}VPؙiz0;ƓqBzB<1:&fє ?B2%Um,4mӳϭ&5y&Hqv 6w߾g TAXCSfh 6 p 4GLJ c_q# [׉c᯦q5\@ *{|@Z'!Qˋ*f}@* N=!,مW&jƜ0DCpLg ӗQ m0N|yOQZE;r='ӣ!k ?L73^"N@+:'pC(M (Kd8Nsz0o$ѫSzhǔd*]C8|س4[@kyc㓿L=/gOWG%}n7A]-T$8,ذwx&$/B# wF>k)Oaי7/b;2@#ԱfDQ g\rf+H ,Rd5`߾/9r /=&+W^K'FǴ ``` A55 F'ԧZ'ЄulVi5ʍ֟ԴL:D!63WEs!Q`(^>b-ηo2b'g/#(y\so[A&ܣ܈U-e XQ]4)O2vN#YhԌL%v\~hg9e)4Ts6G {u".*]nSMڱkB&lsm}M IcP4 5srG{<)yrBX\hg3SHKE2hikEy!ѓyX;h 0[Ràk/1fR|05$ 'CeG\]ʏLP` cEŎ+}})ˇ=cG-?Yʐ٬4dlHN^r#%ۺJf* I2] 85ɿX&A=4E+WC̎<%Gs U<+ Hf(ͮ@> w: U"GI}Sv=] `J_`U5Ed_YyݝNk*`od"<, 8l~p~f&Be|r$ ,ս~߻lD5.z? (Z>YYoQI%)L˹q-+T! P 7v9̦SB)v]I޶-hdo'0R\A4N`Ψf8nY"o.CPH$~px8jic) Ju>q +-C64S)95Hu-zr+J>uiֹB78&שJw ֓@azȉeMi' V cYDq^'3O"s)x:|+uRĩC<N[ u3Mi;M$NPB]toYH} W/$/Pdx3U44󆧕4#p=b d !luңegx`L2`LB2Tg rVRE:5iJri*$m.qU.xl;(7 \M]'RkEWK [[起DwacM<0dBW @ֈC݂h!~vߗlȄڴ^(߆ 1XH\\86L;=Lg6AJW 5ZmBx`cgq"k=03}DY<>G d q,CcIZA%vA fj\kv.'J1xA5bMՀT'uZ}tefs0 d>_-)p0#'2[VҟIt%E d6q*la$؜TZBuS4ooR"ըAmEk,6\;sz fl^MfoSpkaACkڍ0B& z oxJAAjZD$gz1rBCnΓәDzt؏I6^_x30hm3V"H D%)Zn~ʻ2LCL80?;zV[jC> /Lpa3߻SNLCƗ1YuU,Ra3jqb-,XV/% 6^cA/!M(aTEsᖑ$O{Rm[dAΈ/!;~73͍s)+,suR^Yn0Ql/qi Gf.-MNL+&QË_1$jhBHɷ Qyg)JO=_7^(-"~7p\}A`G`l|DGdrB&wa#0HyOY"q#72spc2ݧ7 F~QS7RϚִ5_e0k9Q6{,2w Jf(HD2&KagP !鼌zkj|/ɋ!AhiaCF?' ɰSUO2o1s+"9C)Ev5* StWz qt?FN~FrM,8UaU>B3B8uZ><5`ǚ:2v@) D8~"C(eɕݎrq(Z쀺hj9Ɵsw3[z`S[ln9 rRL}V1ŖYZ+a(t!7-fO^駷+4ED ;0,e?JfFbϓ<_@ mo`}90q4j]E%0l)qI~,캡s NK=a,_vq!ep]rr#{C&mEPj[k"4~uvi8M"q; xɌAdL XXKs[bZ'8T/t*[/.(r༰/Qa6YCG_1;3i v:eV {#8k62b:KF{ݰ[*s&S>cX`Hj4c/Cꏳδ tse]oJ{ťΛpH,R٢NolV)mc0 sa:{3 ]$8 b~ l% 4+_:.I^\^| g:>I=dT#_r6G`d>&X{Wآ8cK%Kf5:̉IE9I:`d7<$1?;-iBA}My'#)9, ՘ߛbV%@&97Vmnu_=i*+5Ea\]qgI†VMsZE̲m lް`8EתQ'ԭ#3^l!r9!m(@edii fKs;8W-ž`/̾⎐dmGn_鉷tE>`y~&kIew>yV 0u)iL6фcM+[i~NձDgdcݺ@i>:0$͆D9]::d/^e/*D2qFmN/ ͸j ڡzvP ZJ,G6]qHD v "mRPP"yT@ VA6%(왶9青4n>T݊ A[a $"},>-?,푰x5j eP`V6s, - {-FCDb̒ie{J˲RWۆV]2 $oTK =V-( zvgwun](]%5XH\s+~C'@5. 5K X!T]큜IC>[jg(Ӡǂ &¾ RՍx)!IW zE(x|uq}T(H P߸aZيjeh(cqZeԯj,.תlR5@PMXjO~MkJf]=|0{JymR6{{gIb9HE9wl}NOԆ0'L2s#Q6~N=?߾ҶQs{ow\-Cu7˪Mkvv39Ó C /(FbKbFpI]&\v xΞbcQ}7OKGp޵hrie K.2tZVnxaUD4^u[] Μ(@[AL4ӟ4hCpX{5:b%R^f@|+eY'e✤NYrԪżLwYH v!eO{' j=ADzq K욱BPUR357S{zcD?_j+? ) F>9 A $Pק DztvVEOʯqK @;;~h]uGvrO 'qmE/:P1'ٜ&-Nr| HTjpw Ekxt68n E ź&CH F>`D̃:;t(q;p1D^30o͛qX;D- ¯iS@+6n$qCo 6b}!ܔOK/0Q4b|/@{?=r? :wU>LZx-#BoKY$'?$#FL5a (Jڈ%,jr>7_ʰ3\:X哼#t\He@e1"F_߹C+V Yr]wyŷOKSmH5qjɍN Ю􍝰~U<tPv3bֳ . PilC84Ԏ.g"Z)E2 \7wClTUyGXhSPEv}@v2wx*`hK?/ZXܭ,ЕrZhh:!(cjq:qV"9 BfћU .@,t6*e_*m-HbX` b@X ~v=r΋pyN; @w,.@_m+XH~ɸFӠ"=L0rxqL@d.$@)QSdbE:=ZEA,@Vb;Zv1a_c%7|=w]ee|`n-B%&\haT~d U un8B$+qk"w.ߵ.3ǕMof KcHL6dma}4BiL+)C ѩd?pA?b~|0INbeѝK"{df=˳[g4EAk^z"i̔ ZEImgkOy&<ēr'&z򮁇UE5rOU΄/K{F~αQ H{}h#1]Fୋˍ'(x(p;"q,vX"^Gd~<"4ɝ|EI'ٚYso3iΔaw$Pa b4 U1P~"\kJ,fOH/OYYMBwcdW{\ټ8Vi@'- 1}%?,tw C`=fISL$ԣ4u7exp!YmhѼ?&ubHiUz14OCT quթHu D5JR/RXS*vWY6@l^3VJ`˩K_jӖ?te Z髚(ΓH9l" vbł1,_TiJ:A޳69Vi N5Kf԰L?6ԑ}^gupd*&,y],2EutI$CX 2w0<49F0@Q"sUZ@BCk,̴nFau E߾[txm XnJL{9Q8tIFQsV! %$m3ONOHTezI{O yJra:VŬq^?_Y;EH|`|!^'>6=q~^v~ 2km۔Ah lD2n}9wQv >_PMf]g F6I ݽҁr)TODsI3 E/(8P]ޙ& RJ>|#I&/OWTpK$@D&uiaNF5pyݼB5X#b}uޢlhAYm:2<@-חJ 7g,@<dhd.VI#RR@!-dg^^.O*?Α~WцmP`9pN=>osԃp?8]yCVoa|8%Ѥ> [BA5u3`DWy CR`,n8 cs4X&,oױ%5rrMn3:`7v+?A' UeC0V# vq 1HWO}bQeJZ~ GspUC>j ny] O/GwӱǮt(MgB*rlΞOI9!Z+6YlW݁: 2rS~3 j~ o@+/6I-Ȟńgo(' '(h󕌲 VfAC1/ސ49tAhX("ų8AU Of9u>P~݌BҨ_ȊsȴF=x@PQIW $?ksI襁'\'6yf GU[g>G|O8"bKŲ(\ CYُi'] v\ DjiCYm':1T;.v)J9FJWP#~WA9g(pg*b (m$S5A=S%Hp\NInK% r쾗0][=u?LCn[ޝ##Ax㮦pSQ^\.Z x:1??Pc[Yͬw/s"Ͳf|рj.s`O/Y&ߜ b)&t[ ?,Ũ ~MV>yF9y+Ӛni.^V^KFjFoϨҞP#O\#zgvFYʅy(sJZ\^]et&D -Hs:Hi ]A76gLS[נo@vz_<ok|F jWh4r7 flJW p=}Ior)HT#_/g<|HAC+6DL|P |hqu8'g7S|zRzlв_kJP%$4S )BēTo=C%ZxqU6fxl4J_Cvîʡ?O͡*evJK?׺;7?"qi'BZ87)68n .tqYzs71 @ {S"bZ6Uh//k},1 ]W~A!0+N1T9ؿЍH2G^op k8opZnJw񴛱v$Y5F5foR a Ǝ*o|ˮ]S(mLWA&p('EL1JJ:J((~lFtŸXQHgT4㷬Ewxi7q)B$۾zu'Fۼ&W㰵! (w} q64R<j!KٰǭhQk x_HFoq– KZ8\?8]n~WݽwW.nlR?Yz&ĵr䥘e5k6P-T:(G={YXgOu_Dz w96BwZwe?LPԃ%|b,ɍm{O.z H>GR+_DgtH&E%R]sgɲDmWm9~Po fY>p\{j㺖$mcGczBs1YmhK h𕁎BF(z=&H[ѯd*@lmJ-#a*Fu<2sI1}}8IRsJ{?﹊W [5)fUSV?za~~mrEIѓɳ*+8dK3I>OQ8J+u}؁BM. N݆Iy @Bn$@gGly@~6G6 vN;-~ C:$jCD6+BV#~@l =r[m˵><=K@JhcWGz ~,0"NT67"oKGu4k@ٵz&HA8lf*ƺ_SW[E:pW)&ƖQ<>X1`o;&h=_tlF{g=wIrAoU*]@AV!ojGsq-qpogBСㅾ] x\Br|4LUkU|L: ǘmTYQ"oX^\>Oel ߍmdv` khhĈ>bec*sD%5"1[k300͆dT&q䳿%4] 3gJHi=y;%@@*&=qx|PDذauu[W$j5_P6p4 W~uGN"#`Q.-ws**3b ~fk3HH)44ahh+ۑ L+rBC{ 8i/CWː\n^L {%#þt?eSn6۷$tX(m}Aey˯]+lUmOĭ:5B +bo3wHdesr*F^1bKvuoo8 lb`Zz#vt~GU n%w:t\4єXR%SwS$Xpdr8 t$Z ) d vGqvg][j-fĵ?|1y~WVB䌜jj~ Ajե&ǂ8V?cx?qhk\\b᳻W:7gp, 뢧+t>Q)f)ܷ[~f ㆘_._ءliLԼ=93ӧ8ghc:~XJ>N}/JzB \TXX4[Q+f86;>8Q,7n |Xy"\(.6?O;JcUjൕspJ]i+O>@(ͺ95{a^ٞ͡`e蜸fRڈ*b?;*FсY|o He/[ lR?]M{(ƞ'|ڳ T~b}Ks?،*ZVXQ_tx&|MWπpTLg hR7Xęz7"^耱~_wyU%紞\R<ۭXӸ_tzr"9(&5 7SW6['Jcat70nwdN)4ZX,->r_O d#6 c 45/]Y{'vXtV |=rĎ]+R[ƨoK݀ˍKttbx3+`N7N;lIn5V+m)g%l}jLldoH,? 8Ҙꢋzd 8'Vg\hgTMX9Z;W ; Lv`?~2rnWYlkl.A֣c*Di f|0_W )>>hS]ݠBN Y\5޾acSm~f斑Vd,/~+>Ku2?8'f=+@MVӽZmzөygf~#D=5/9+nUBL}-6ʿ`Ҩ|Ës]Zp@8e/gGÚ]ʡ5`U%b ~\kE/RUkϜ#΁^prd#mk^ ė~z0LR5Ԏi5 xOogp&ZNWi\Yl3N' \4(ŸlOaӌ,W!d ]SƬ\1ֆ*L7Du>Q#T3Z<>ɗQ~Dū75H"ҀUIMRQo}pxU>#o`cm, ƚN;K- $嚿[pW]ϚNP/N=^@\, livĒrFA3y/w$yDqfRB @ l8iB 噡,Z4*[ѻS\@~y`Z/fxS'O܆vPLx%egMd {dRrBF)4X5pK\rk?eQ&+l\Qm-s9ړ"R_uavIYAU=>ܧmfс=͐nRASpkz햀ZF'q G1Y$JP}:rUZgq $ ͣflYsHS1;А7_lG_C!5~El~`7YIfܦp(Jq1W>(UՋ)hJJ|̇޽([ӼAeY,^Z@Rj4PφV#=,GzֻN!"Tpd,ATwg<#M%g/nnPǐiϰOtitcB;O/PWA/1 m~074N8!g/F- %y83+rexG4٨* /,WRgm-/WYh1.- 6/ެu;YKBa*-zOs F}oVCHu_رK(A|b[9~ZçvKQ?=9ٽucB:<3Je6,#]`qHd-8|[tBdnzle\! 6j#o3+c^W=/Jj#"sP-eN^.lJ_e(@ܺ s #:?NG >tpGI֡0:oKo)-4GӼNAj.5&܀tFqO19­hg $WCxBVR&^jL7|>oic8[~ڷ4jw4uJA?xz:0%,Od\K\/oڢ&hF$J'.eO?{C2/V: 㚶`VKAJ.d_fd =5#_ky4Za|T:m-%+zf}}!Bٕs?t|$嵯U!+ ƀ M*P]vcqk|iwԐN;mFk4V0tl.eU]&z rZM 6uw$ϣafPBy2S49a{+2k,:)Vd=Tjq:l-RЬ5 x<+=&:"qڀ)בu:AηUnpAQl|v< L^Sгe<;ifBJ BNRL,Io6|!5dMDKUށf3d|v ):Kı%hmB9=B,SD}UXi-4ktM?dZtN_bV;2hb HA띺jr8aR:u׋->?iK<}TJWߓIס\$ܴk zBKPzޮjk &nOT:̰V=xː"?fTVL.Z)FoB(`U>a #0#qY)::Lfd_X>bާ`-NfB^AQɖDn-ykڒ) ,h _Ʃ + ) B NiPJOYdnYPQ cpgl"xL)%Ύ֎5S@F?ڃn lTbd7M/(; +[ڲR䈝nʹDLMCOyJCJݲ`zsS>36AU|{4tqFv(EL)V-DV  XhH؝A7dAZ*+GS mA27 O?hijnC\`kZ2^t+K>:PߎW|Ѳ_ު󋙰O`5PE'!pu8y(0^>istmƥ=3.HX z[Ah㳠ξ {/|Gv K$E͍`35l=@yA".p¢ӫU UOaЪ`ۓӡ^; _m>T71H^s{"k7$揾 Ҵ뽢]4go(`&̧{+`f6:d++IH߰ iz>sZi_/Zr>5r{# %GG(*Qmӓ6$Cc3ᣭpP{+ЈVe Twn6٧ gVmuuuM= 7njy9@n OH+SC}nwVI@cu5c NXe|]EK؝LurC> v}d÷Լ6}){rש!-hS02jq`|ȜMi#? )pO~l1/G=5+ 'D6H"'냆3 r3{fqؕ:ޚPt_4T 9*i)G~(3+v?q_}=ژ.0ԓ. g#>FU6D2qX \<7I"|9: I!*{yY3qŇąfg$TE#E9`0G:"!jje> wi壎&A ɑ"8CXG?tP0PTFcH#Tr|/_]N&&X#QbqΒܡ{YU{h*2~ǣmAUufH 鹦wn Y]%:u\ SF/ʹ .[a%|MBn|/XpfZOrFqqȎ+kn9D |-SJaR:-xY}'B&Yp& &fN6^"\/60 exS?oMbYT@ŪdHl$Q? 0{(Ug\0p;i-,"yNkYdO>x;a?hi3K &?!#[J].lBP:d;1,Dt+ː(y| f*h=O(RԴGhG:b(^Qtcjz-G濅z~fNu$BkAKW\[]Иv\KSyʙq5Zn#Ax_'sbF*FnfܝeVhޮ;S5VGCL`lAĩPA+~lj _#TÊg'NkZɊ <ol2ÊƿPn* i89LǓlȯ7>"{f!liR $Ӓڀ-,$,qCxUВv侵q6ʢ U],ԯSf_3{%nóW8f}*䰵e65d` \n8VM8Z^Z}9+DM,[>=EݏWI~so|`vAyƬZ+('kY]nv5GVmZ@WG!k4_ƑpېtؕеejK$Qϖ @7>m\7~Q0X<}߫c޻KF"ymk;f /`c"}wb}HmUPc>~)_1U=9umSXXn)i4R$ $<?{=%&}7⍁b#KM_Wb(m*fx $,|w"i}sk:^ \P`CeP+@5Xkx ޖ LϮsk@T$> cSQ ,rTM%qqRlBsLOa$hbYҺÈ>UL M]^Awl;5!@;2~!L4O3a^&B ;~Xʇ鿍_E8w p r)(Cu'v\kj36jo7YR6. VtVPG=}hSбv;嘫iSpmԐ%`2ܪ=joB!E{#QEbbϧsZ\Pc4S1}H 8|v7@p׎qF93u0U/ q %*K3rmb<)">A@H>l${ \^8xr3R7@>>[[qY]YhYyhOŵ/!qi]\K|!{縏%B5Dl+/3jcg~ ]1rt^㝤RaGIh(9/T8pKLJ_ӳ_S\ ًi Ǐ"7}:b5Jj+Ɂ]Ռ.pj\ 7]xY`~F-d觳(^5 cڠor7~ᦸ2!#7N#;3L@M܄* Due8u&$AO ֠NbUicmm=TeK2@SMBc1wWALݶ`8gIӫCX]\wOpc^6K")۵FpEcL"c*CHTfQ+(S[[W}dZ[N)ܰ?>ytł0|% ÓV\~LXs1w]i&ZD>fLWaL o=q>f:8nHk;Jǧᛥ5}kj m'}_kDlޝ`}O-Ddѷ6H3* 9W'j0nX3idkgK6KN{ovGԕWqB5+ypm0Y&fI=\\B%Ϫ1`ks@(R>Źg D0G )@+5g'W 6xF<8<A=7gxDxh=_ m+*z/ 5|GMh *:ޗE{¹%aZ+/J>atɼĵ#W%ΔBŵ݆+(5G:j:^kiPB)fV.>@݉BPk.SD ?۳&ݢ@t|]e?<_DF?7nvnyWxL/:0z\ .l2*XpmLy;anVKt&_풒lg-wD!^Vy:S4e`/ (#(a9ۦ8TlbNK95W,k@.bx&"MM@iRj"{) ԃɆm~ET;&%}oP^ ɩv|oT5\K*)}'qjV/ *)*UlacM&A@$hX J6J/}Y'^KGQL~{wds_k4[Τ;؋%z֛CI`y )hZz*g٦+ e҈; ANY $"=?6+VD<_iCth>Ysim[ցFCCpK7')"BOe^Z\6t`(`2HI*#}3W'ĺr'!Lּ8`CiGB56?=_G.&qm7|VGu-1HڦځUE6 Kb_ zkXEa86(U!{.}5j,مeKKo)R5~Kõf5W[aZ;91)l*J506JW)®\dgKav\`Ys eŮo҄2N4MrTʣ%C 5PJF= F;nU#]E`SJ_Ua %t%1.!XzK1o7?z{:z(ãYS$iN&w<4q.WxsGzKOyt\Ȫv~•u1Gm_ &uYk~&՜7k$\G4l.MTU ^6 hk; Hc7vsEp .JUZ`Chv?=eˊw43D[ZLt\%k I6bGƬhO$͖u$pPF )'蓡ʇ GE{?}%?H ?' L+2csvLg:6~av)):PWxE@XClQF))ٿ&O0`6 PgVt39ͦ$/n[4#kk0=`cϒ$JLt/@Gd Ab~~^A6E27f6دeq6a`3rEQ|>]P^Qzų>Y*D^31گWx+_h nQ#$iM4Bޝ p{Ab#/n?̇kvWژd|UgހkUy/ ٵiXGྡྷ\Td\g}WFrxs19>lVH`Gx,@إbF%4{ϪԐP&IZX^D-=:rIРYۿUHogyl$פOY'w"ƺ#I,93/^WO# 2<=$\$?:$^j{2b ,IzТThUP/TʜD_q^Rw "vʌ7"&) l$f Ff=ȗ9͝ΤOQxT'yʎJS5s%G+/Uj7JPUg7l*3wQ\_ɓ[:ԆI2U?J(/Tl8A ZX S+cXGъknΆ5OpvQ}▊bY W~m ꋲh@v/n0{ &Ӟ 79&cŌ|gp[uEIk~g('m::zu8{̰Ww2tN_*GLY83No8<\2! ABRGFE'Ȥ`nY˄qoQ ]޽$(ܮ;i27jYL?k^O/.MCkd4L !xZFb+ >c+ƬЀXp\!I|e/l}9;ِ)7mP5@g**<w%Z{B2.kFQFL 4[5PkTUY} *hޮcE- )YOb?:"i]7׀$Ǘ3D׏Nhl є@1\T9%4}qT]][_bYua1U>Dt'd"|>;6,tyc(nZQ&IA(TWvL?^] =6I4@XI,}$' f5%5eyGC),퓏; cx1𷘨J]2ܑkL.vV̽!k˪f(e!V7NhP!\TCm?3tEIo~4r)yO Ye—,Vfy͓HџdP6Y,o֐&EF 'Fcv<, /9[7ƞ~?$42m{+D??'Bfy$,XXvZTaӲ夢bݘ74!#r\]δ$Б96X]m %Ԅ}) '!֍<\E}Qc[@]p?8ƒf#2bRfԧizU>tg$=c~YM0dHxiY8|/cuL BjY+3:{&T\6{bc3V;~ mB$wq}@˂wJ9g4\. / cVKǤf=,8%JAaN܆r;e$D,~t5n7,yҧx! sKwa1~I(!)D`۰2v؀zb6kTid}(5DtkY@SW1`-h KL\h+%@q 3A) NMZ ~XCAJ͓2? [ b}\<䖑)P򤤞NMQUh dFHݡ^U &x-%ODwzH]}|4Kg>.ɇuٛ n%CxFlhwJ7^p9gRC`1龃 L׮ס1J1FM';͡pQ2/A߭߼"*q[?Cպ?q Zꚣ(TaS^a}w,ZZv-{JkȈ_֙yuj 6f[ -&vM}CSTAstF iю+k.7A#Sފh.wqSWh)8J._d,䨁ՑH:UhWa>=:;V7Lcw@*_Y@ [rt$6QrׂhcHچB褗nʹćy".YUOu MG =2'W\ NP'aV#s|beaD|8NdaމYf+i<{(v*_S4ֱ)>t]X*Q ![֕4|QCec}βLA m. o"kM9Rqw':#MEDMb/]ap -3o\s Nto)o1fH|kX,wDymi1)Gl?%u#cNa.CM#bJAtz1\5V?a;2ZZ9! \%c>@ܡdet;ǧ@Mk| OoF^&w-}4`$=9SV+20;3'cbÑxbHn.N-_ 8HB5֠4AWp0wOa'czGV)ݦbA'SE-̓%R9jX^>^dZm0փA2{oqlAfpځn 6 ⎵, ;`IJKzboXŶMkM;f;$/t~yǖ6Ӹw5_Hw_s\{)OS©V->q?4YQEza=ۮg{e,7X#Cr:ff| bn/z6&[a B\&MMv$N7cs*}P.a[PV(!*4WgC(,mKĺۀޠHk4LdKe׫6=`!)Ŏj]s!*X>b _+Roc,`5ߡ?6[/ `pujE׿nܘC؃L\~9?aMOzFP?" PuCgVd'p|N}S"}A(@hW8l%_XwުC f*JfŶ0NN|n}8$K}^5^B 5$RRh U5 ʔYcY-I] vu5=|ǜYn x͘B=Sk`9 ( ltѵ o`&5ɟD+ZC{ gd QOQWf} L QkA![Δ=u]n.ߖ!A8 ,-E*ş*.!Z)̲']SJLhD"oD8# SĹ4G<=0X›Q~e" zj\dXkTnGKca_\vP_I dIFԋY;w#aԥݮsbn{;KsuD o&Qs4>hԁ%yi.Zfw}o%e܈ķj5<7}7Q2a\Ke0 \1tf{]!%roQk7O jB zL~Ė&x[Lܮ 5ڻ 0v6f=(:]&*2ՍvDU/+?gD#_vydN(VQ^I^`C|,'/% Yw83K5el02հց W>vN^%a SAAz{ƢJo'ZK&lA: h[`O6?`k[;}$&΋ĦtOQ {l+(N@r;|Z,}W|ܭ{0|dp<-u/Um+s/~yIp% T~UW83 %8#?6tdzqݶacHr"> Fj p(]d &^a8?>1RH1DWgxX/>%ͭjP~ j>(?BAq@Vje!,|dni"ci;PSJV@jbJC0AeuK R0pi`U&X%JvȐ)8aIbvZLӤ@Y#yvP9z:F[66֔T0EHXF!QYЌ'rP{IŻЧ:Vò|ѬyTyxKNf j}&mtƆ|A7 hp+z0!OY#h6HHe851 Z;y ' R$.iw [{96 Sx|hWKc.iH1W`B\HeȎLF9oUq'woQP/",QZR&AQ/<yJRY*3m7#;- aݺ4=n=-Sjst7\юvlhyo4,Hۉd.?E9Ya"՗ÝWCq8_0pT]$lLJk|K|]Կrjv!}Wq|9y!!1%24  v~r @ d&Lo;Fa yEoE)A]UZ@qNZjdۈ9AT" nGFq 8U{E-a'P8M#s)ZfXRh9kx 9W\J+N"Ee(].d*gWYMTzDfFfsØOBrjG"㩚Ӻ\GH^̉<>-K _tm);8y=qinnW ݐU##y7P[Qz%pQp9w{l8*_8XT|:ͲQzff Ztvtw‹ sęڎ}` #U`z1vw)ժe &YRqƛWʎ$C5""yJ|M1Ec X?*Ã*\nJH9T|P.+ŠB!o5XrHV @XU5ED2gY=Q9_SA[KyG=DM]e ?(Jr gG9:C%E0Cd>y%&#$gtB$BNyPiΞ(>lࢥ!DF+#J~B5t#b{Yݕ7M  YtBs T*c~E\]zB&PgK֯gz+}(gY~p7y2vt_^uT_i6Xיe{;.CN`;˳#Ti,qcdW&e~)Al+T+u6XZF_N^u^B͋g4r"*seaGOF83`;OOi#@)? ,e#>%کPHfׇ6.1)k[uh ”9v/5HM!´*ó=\Ί|n'>bp J>eBDwUox{OT?8TF=k901]d79lD\9tѱ4VhPEi)\'cJ(PӿI"rlĐ1Ϗyԣ`I +(T|!]nهZmtjr]PMPdR rQ<ãFCz| k>لnZ"峈O%W6~E-z [.9pfw ~Ln?QQEL#kϘo$SSٹc"QfJҐI~ epv f˙f_YfqZ_%=jh(DɅyܶ`|!:pH@Gd43@M=;oV(PҡT^8$嚓gr7,[e70U0<p>JgT{lȸGZ{I۵?pF,#Tބu*܀C)YJ}(>9.%Ⱦ]3`9%RG9__xWjPxn0 ֬&VM_NClC,qԯXA7M!OҀF61 7/2dpd9P Eҧ@c$$1= |/Eؓ_O=4RӤ5k9PJT&f&= /Lk6Lb2kՃ<4 E)%(\hTe&D"_~5U^X|[YkUjc$P}]◬FM{L}hp΀ժ%{`?;4 UF~݃M/ 61~1~v,ͳ䤩$h 8w}񋗜.yR]l Z| !A' w!6,o6(~ _;Wn`I`cyvqdV ^; র{Aʕ6|rS}Bc`uOxJFWq>>g|+ fZ #@<6-> m BoMlY[WہPUȪ)⚛Pf^gǰLo:ADۏH<A)*yv C-Q;cVhl-G;!LUd$#=Lϴ _^ɕjR(~cg7'MuZ&gA3yVypp a&`.z(mc !`t `nw\eG:\jvәuNU+_B =Ea?!l;piڪSK3o ƙp fοjj QM2OzEquވ]ZJPKBk*9y8M;. l(Gtm{zݧd;l5lB'phʖ]e"4# Vb6̵8AN,BJ=PrxDחP#eVjT95٤J敮r>poDNNsHS"t֨öC=BDͣdo P ـǤ0S>2cUlxy! QmbH1Бy*ӐF &[#~~oB5$q\57ق!)5ܰEuYS֙_xxpD)X4nܮ+&}$UO~S2}-#,囵5 ͪbV?x?z\/}!+6Ä+fQ_(H{*QOaPzyи/p u/4nc\n{l Y }-a# Cd!0smqE9&Ԑσ"۸Tx˟>n<;KM TGdbB@ɚ+bT3upkid <3]}LX_wZ-.'ui_3Z##O#Y>酸^~ \vD/H^Al1Qﺣd::y@JusZќ  ; !KD &W7΍S7̶οT#FY&gqJSrغ_)u4;is}׮Ѩ@;.Q6Rִou\YFGGoSq=}ۋRU G= e9)Χ싹\݀0ݙV RDxrIYe٫~~zpHdΦ_u:M/#OiɽWȿק*o}Ȍt[GA%tȇ5hb\v%'ns*>5*yI NBtȈF"^`ṉ KwV[FI#`9#q 31cqKGem׺P.bpj8"!e1Gϟa{W-ӕ OT(3WmQAxgw-<7K)d gv/P\7TeIY62Àa/S#GFk@Gx)/ yO>dZ[Feyvɥo-i7T~$.O:oiF]K>ZlUnϖ?!v.őQ9}{,ْS`8G`ύnƽn-P`$F(-/'*I Oåтv^F<mo%* `=~ul7G*fh][TW^gy= 3y ;ڢ%wb +:> jDB}8hxoXR> +m i@> (<ׇq4),FvV]IѹmV ]PwU.k wxL?V7;Ul_˂6jy9sIʳ]׶׼ aƵ#:8EYz~0hn;tYj\1r\a2;MX>&4̷eGO`FVߋ8mp kP{|H2P'Asg3$;JJYo;[&2LKȥ:%GZJ͔,Gsw ʼ|g_;ڇI_9"* &8P*~(l[W&ٽVzA{TU`Y[>S<J& BHc$ y 5=á5wg{۹ZՇۥ<.5{F{S)'kSXgD'NJ1ѝ{J|yE!tsDXGƫ;H ;>'*QU*'ͨq@R=4nu[ YMr~p_-|bȫ9|;f[ Ui3@'eBHp_d51Q5f-\)(%̈́10;i#7,>N+:$κ#_9iic+F9$=ޙi|ʙ[qG5dž+ˈ.#n!RVx_M&OJWV_/^bLҼV_齝 Rl/(@ ;sNx/ˆo]̞ED=DޞVWe`ҥ qS3⧿#> :N{I[JJYO{@s쥦!pR{= $sKYrw{zb]|s%>~ -^ߜM7)u7r4RC*Bbb_48"JBI7gc`VVJ4nCǀSc}hmxӽoYDl Vs7aC$JѣstDrU(xǥ*q967P6JC> a^ԥ6lBTрh[6C, Yun (> \n^s`cRsC1kGP4Ppo Qu1xEx+ HɆ2#Wt`?nB%nc ȹRX^-Օث pO#oNdI:$I$IqSBwZ\aq[XBgHtz)<]lh# u=24d4r6W]z*$bccwuyp<ҴueGQV6KAE! KqwvFLr)WCʆN4M]nٱ,ֳSB;> ٻů dv)xޖ%Krۥ9w9KNEQC{9GPhZ=ӯґ|y9Us؇Wˆͳ]ӫ -41qy@&Sp;msXX_%p6D(PiSZ]I9BҞo]E+=u6~- nS6t\$ވPc]Ǡŕguurxa-BWP_3ᰨ$Px ?'c7i%JSg߹WoE[hTk֌ѨYR +/]c q5i2`vaҜ"ǀ#>eufJrOJFlٔ׾Gw̕l>  ,xp~UmJ1Nf (D,N&yE.y_dl5~{B-n!.$`Ϟ: 6ZG:`"%g v(۶/Vu=ML}VY'^>NT&REMscr{4(-•1:qarn5F](ބ" 5H0C@zNwS-KOG˰ 2Cz뉈`fvMYJ7+&9,zNRKv*\3nh1^/[nC+EK!9BQ SʁCW ,<ÇBԮPh6i٣{k8>Ɠiw*Q`wHگupbH%&3?# ȼGϼmNЈyӧRvôi=j7p_!n9a:h2|X;ƔEb\{ʤ|Um˚3 I ,gZ!fDF ɗSG]*VOY$ r VjbF@ÞsRn%KIN̸Vo5`Bwq34m>uhP9G䄸f XPʥcM}s#<ʺ3nk'TL~Zd ,w\픳Pbr}םt "AgGn>3Eش籥"Գ` k6x8=P Q{~̳d "4޻,Zdޮ-5.K_݁FQI+S}a.9i%`vs'6ϻD\7KT;d*4 ~n?I$ G/vFJ,E7:nt-0zI.;Li0b[$l;,ZQ [MɅUE+M'M5<{QV5m&9,fclٌD>𪉩&) w'_yHo,(!$)5Fr:ШӲ7WyȳPo/'l}O ԐD}Z 0֜H]4MEx]*3^Elw0}֥(4C "j[Jk{#t!Şz*k` /Rx^$䡕,]E$/[ˆ4q.{r<w}VZX9K=, )P,o /.n/Jz# tlD}Q BK^+Mq m)[H.irgԝQxB ;P{cꔛ wċr P-ְq|I`,Y>yJX\};kH"?%S-xm¡4D=-DxvRt:{uUTzI5#dw8A @ nGaL-6Fȏ&:y4EP`<XK zrSun㗓2碂RbvH 2X%ŀ|@:o<6>y@,]3sa])-w<<0z8p\l+TVrwJldWD-Wv2*Zn! Py9x8 ūgZgVW `fwgj$́rɎ/K=YV ILT1[r8@?F㋲D*6i@̱+|1C6q^Sj~+Sv]N"I>dRnSC4$'Ugt9YWc Bt7L^*/l\Vmϰ!wG,k s `3<ٙziIk=Dzno~M>:٦W&opCb-XpGVsX'[ܸ:=>vU$&m@KMP{a4N ꡾9$KUKV=ꗟ{?AO5HeAEp!p*ZEv<\uq)2&59 X)o3qGXAN<ŪfɰHr/oėVozAzi<_G J*K E ]IN+QMi5ڏ#,aha.&iq %| Đ %,æ|+v(gV3i:=7J^639gu;p<q8ܭ薙VHf# L3i';TA(+$-S#+CtDY|~h(W~i3W#bk.7ؽM;ȉ O;~93 JC0a ۚ+'EMIQ\ֲ;M9mJ]){fx//>n@``P0g^yWqGֿ* ~GD|OHϫv_:b)Q;k{Ir7ax+FL+_-+Qh؆aꅒw|-W<-^H>_TZqHN5㛨}VF \00"XT`Q\2ާjfd'Sݘ1yK["y=ӋEf=ƱVwJ{$&"1"Cctk>s {$d: ȘKbc1=f1J+zԊqCB.n9z h&/cNj`?!+00nԺ "8_Qd`A@E"Q[F/=ВۙF/ vgD badYq V7gmW[^X98>S P!ZM9[Yz^ Ϊ+!ɥ8d#Byn3_qE-!үWEu>:|s][84}2={ݾrHjuStQ.Mij}p%ǔp¢Y_nm#O ވi_턩mh^u]Sw佽.N/MDݘ\lH`' &iR`SXn/ ^_z'!V΍@nG-?C'mPY :f6!7m!ުUcaVeh^dn})#+d Q$ZxE^6L}.*Vl•>E›lS4,Ty))JjY5~ qbR4e(]>*滁lh$n+vC>EQmtL2CviÆE[CيjF8Z+Xxw꯴uqFx0(ި@rz)P1Z rMӭ,?tk٤zģS_+$-DҋC]h^B(**H8髾Ƃ&l }Qzs L!І%d_YeFl{Rq,mB&JNav*1sWvX/[XT)S?h9r䠅Q`4f{˿LfG fN8 _J6Sě1"h8ն̗SZygt_j<BY(3D Jl@ 2 \GkU+j?wN$RK)S]ޗdjMnw >|h>: 2Bwܥ;T2!{;,v"% X6[ Vmz(1(` 0I^> d"lE3L&6da5j8j} >`62Tʦ I.: TCLbab&O<\Bdyr7 <`A2Ϻ(#mw4%[j4v<Fpqڔc;ko]S>U&oքMu;)x:ѳ&()#R \| Ga/r,Y˿m'act-p`WϡͲe_yiN ˱$n*Ӎ L9v?<ۡ~&Owu&jKqN,+R7۠ppyr.6k!߲e FI"~8S<坳8wJk (7| ϱ6cw%svg1+gc 61MxC >ZsQ,UX7ClN "EL4LK ΃ݥ;lՍNB?ԮGFce!Z*`._YйKOiÛ@M5ld̂3;d{|_;#,ǩLѺJ):w:Alש4/nwro a鱪#ι^5`trŠ}1ba(7ԛN4#.ߔ h0E NV:<ߍ@wbt5? ܱi|@"\; O`hSm43+$A7;Վyܖ?F'c8_`2SqC<ˣ7Sx 3:މ:Dk+qٝ2|sQٶd5^E qYLW/z;FkľG\/˥9+I$s;#E/@Խ2H6ub~-{wWI8ܙa."Γ?x ' D̵- \]adZmʭZs}X^?SuE^A]DB;gdR1Y-1cǘX No%C2[d܏;۪ضzC@ƶJm}wuCD@`"[_-OW /^j6x*=e+UʕY]Pf04RY12lq;`c|(>YbJ[!ip/nK.|=)⌹H1SXg:-\*MBq B )އv$=Iqٝq"CkyիߘsWN hƽdû %>y>C& +v܂F+n yT~_8RitPhT//VE{u潻@n*9^~AN|8 C6 & myq^Fs*X(X X4EJ/dҷB~ &Q> ,mOk" m"׺TLst*lnqJ`{kMh(uU樕 c&s^EmgGO8'^_ZoE^FC*/riF׃n{C\\#07aoR"5{.cww=(UЌ]{UaR|Q@pu l9ViGKj[~\jvzщjbLW'ӟ)WejyK<Q$ͪJ%~;takёKy@cDl8 K+-7fEe?dť ɼ \ILG?T_4'veBV9}%p$Y9h2~J*G=S$G2Hj6O{kWDž_vFC*]}D 1iQF,$;BwԨ\5R8%w\$[gk} zr[y6];W"UG=^X#BĔ >qe IGoKMX9CL؜:_a=5|GqȂk,ʦH 8iUi 3 \‹CUigMV){jŊ9̺]u|WFZg0y`*#c74hT>DNnUP;u}Kj1Łݟ!H;;bre]pS#sȋOKQk\Ҫ͆4F2dP>3rcm#)ꆺ/82EW vs{?oo&amlڣ$UJ״AT3;s58g:>H5un4EP%ԃ^P F@֐/@{@m]=@:i }BG)! %=/] K祖lڒ/bSW3&t "8rc-."q:k,, :?Ή&RsBpB{ \׀U 2ԟ9zMtg_0sP]>v@_dUdBD +EAjo[MpŹi{yr5*bz*oqgLjé-s'SE -<S0쪟`c-ka?R[3z[\>g:';iRiKC aX6 Wg-PXVfi1M[G~ P?9 =Q!~XU+;"IA:'N'!M جyhMܫG)ո)`ǵ}Λut'z=[MO(AQ׻/G}0]@BxS{DK6茥VNen# TZx-qY]D]U1ɹֶuē<s-(jWzK[.˯d;)\;tgWO1x#G\~j_NJp_#쮷Կc2ؓnu2)B)\f ![$r}ԔN슗v8+ }>v&$/W!s$5l}ňatYGB!hiRbʴЏ!k'G/B'T;+2q[uNY6Ǯ8 eXGfnѶ@{/t񁳚^thۭ(՚ zeK+6+֒#ueq`T\FqLA e+lvfoI@]Ђp>q'>Ta]4R:ܟӼK[G 4/7r]BH"54DjoBivx- i`vkHiA[MzlK.3=˪>*FIXn{iC tsoνji%qj$8uخ;R#!Hgs4aެBPy|:=钫\aS+z|8t}DKMg&#'H OˣV>X˥ /@]i+F *&f  v,) Zo, UXp(O;C'phO0<E5/vEtk=K`1գJ@۾@Az3%/ffI²,9EܡS8tEYq>j!bٙ>AV]n7فM.NO71"qtX+F1"?$!Z&.cGHn ɈQĠ[oeEX q#uŒpe* [NHW ;QH3/{v'^8^()3^H~``y. |3f b,oꆠ]i+at\H%r̿}ˎ O-x>r5`7>>4諃M)B,j̰8M;qb9wk^m2DQd ܷ/Q*٧Rg {-݊W?!PGUVuceVz>i!3æŊ̊]Մyz"bȇRrR55pWAa5oESDoڴ PC`"C|4N`r6CîǘH,*&y!!CVkpb[fueSe N&~~K}d:/:jE9AjG1jʨuN1(urZɴٕly3V P!mwR,(}V(>]Qz?0S6cGT Wϲg\].΢p5I픗J  4 eBjDuMS7:bxK0B鈽lfb%7|&My`Q*cKjCJnVJM|et{۰S0}v}GFW 05~q uDlCu|#*\-7&6+z֒ kslj8\yV?~,yu/5i\?DDWk c8ˋ. R7= rj?xQ([E(dZ+kcB^k 4Jya2=8w5P|0r2؁Շ!523?zn-Dx.uMY0[`%:%u{둜mGJ&Ú%'uFag(ziy(! or) q+jY%L D9V*ĦLO W=t#!v\LP,v=[M+˪c"Lfꄋ} v؏q!9EiHmJ[y"-1&4q{7% aXp++l3N|6ּ7X`CnxHe4V"3/ugM] b=_l^i͹E+J&BI v.i ZnxNIea^pJq Ou edOkT~yԮ>zs HQx7םχ),5B 2NŬld~~$Xq뾨z4wMa7ՍIwJ ϭʖe"}s/J6 KO` _xMo՝BͳݭiHMMO:7F۾Xq_ܣޞVuk`eeix.nSj Z[*,twۯMJR*Oӻja\v:-8OA@3Rw5\_ U4CwS,"ϵ°@MN'o+ ĩ3L`yDCkMBjl0Kj' UxU'G)߻^I"k.Q;a<v`L7YX1hI14~8s'<"Ye(:1dvSPoFs^kCn'CRwH~Q -A?d ]bfQ7M|D^s=EliK^M .ceK"3L/9KjuXmV(+ʅnm\.0Y8q+qFZJC ೉*̑ONa!$T5`n<^V*RP\xqd? K oDdPb0uhXy_y'Qf$ow(7=:"I En.{ ݣXN\~wz U*.;Õ­~r^ۑNr<\d#'MT \)lNUT3C.Oq An{qPAysGUߌ!!TvLkW>uǧsVܾSsomFm^Ĉvc Ruc9xԻi[)WaSx 2S4.$2k8 J3i;Ex)6emGۆBA祹f J֬tr=8e  ]WV(B&Ba\ s8O,%N<A~}1 t3޶"[^Z5ߑCBi=/ 4賸bG+d .'sԼMBRq)'(nq EcpwX(CY5H \i4&twa{{=h\.\2Gg{]SmC nwImɂp5RJ K:"&;U%? Y|k.%ܵT8t@.mKƨ߯w ;(e[&=N_Qn)y ^S(&2J\v/TP9=>d>f%]C͒GoN` :"+g2 8I*/&VAz)!]v⼾vn7IOk_Bl`˙"-2ȴ"CdNHA{w@%޷JXI8t:$ܺ'󽼉diģR֍GwpxSviYQk`řkJ@T/ԠY{>l$:ڨ>+nݽ´s CنyE*TKmMB!hڦ[L 8bAeUc>~!;=:_F'лryٸIe՚`5 KgMBCQ]M- g!&w\]@o i Fsӷ⾒¯ ȫ w$P%qGghh:?/&YF+9/8geXJփ^ԓ-WU2=JEMH Glں` p6>,.j"I9/ &Pf_кo y5:OW[zN- rmƞ#i,[29t&Bc~EEokIf%&,A +#(']H4"el-!?VX?Hm#<kv"3#]O*[rE4j )v[^GWA;m}ؖE1+U"'AMC[a4Cm| P1R"y*\<Ҥv7hlQ.&nSͪ@A$7 ¾0ah+C:85jGB05'<JV 坋 l Ov0k彦A!' Ȯ7g'N["LQ,;$*0>^5fV׸ުY"t-ͱ _E>2 3n;>AAZT3AoS>)4vo:ӍcīʊDxÏzl3-hW4BT-;ihZف4{AqgգE5eTl3YTC8_)*?62U*Bv، )q +)2b)TAu0E\,ĥ4ckmnY{#;F5*A#%28]ar 2V*bZl'*oGR:./k7]TO^'rCAYA5$Q}Г=(n@BB!B@aIUyD؟,9>e56?Q<@rG dI졿yCUo$94Bg$o h +@7 u<![, V۟_UÍsʧ;G2湨VvXEwG-BpQ3e"9 C*yv4$onjq*T!wsz}L{TB9}ͭ:7ku"t*V)( AˎX [jpp_0͞M?VNISD1XO)jw.`ab,$-8Ex&/ >;R > Q#]F ^JVT,\BX^)F'yNr<~"-$B"o`FQ.+[Vq y kQ,6^T\;Q0_#M\*V kqclYpA;+H/骁V0w~]ɆE0>L I`Tdir6z(!{M>撕YB1+-AsĽhHX͒ܠX0lkh *i7W}hr.>ft**9,%j4?KnIl梛++8`h&Vf1n| *3Ns? AKlvk5)mrՒI9/+{miҊlCthP^W ׅx&|`5=[|BoICqGڌ'hñ:nI(Ch<A)ߗYdgwm cRT MBmj%#V$FdHj0Nsmܝ']6oaTe0bx(&_# E;KamcֵyzjCwB s}[փ?ţvLUԁFJ] z%)*kнly-&i{aUB`aAmEHTf2v}TNM`Q?N{vZ;3N13HUlukA ld.ho: ~F|qP'|ω 4vWGpST x <咪Ҋc@ ׀Mҽ?D|;tՈ!P\aVK씷IH "@oR{czcine|?$lD^> #:kNVvFyv]Q/Γj$HM$'fYR!={/( <͖ZnN,7_]KeI/arI}@vY:O L\)TZ@Oc6"h81"E)M!ox2¢1is)A9m`hh,|~8“gHa>Wn`> H\ 46}H!U6_.ŕUf_uٿ eJYm?&{h!cB3q0)0ݬw 5VGU.nKV/sCL)l\EݷpG-g~ ~<7q@{I3 YL7qc\ mkViK{t-΅ߞ*4_='0(Uj}^* (ۘOЃ@KZ9R(;̹ vHTΩFh{D6fQާb>LQ橆%Rpw8 %#SqPS7eedPFiԆ\\ުztrbpZ&7Y'39V$- -n*ݷ&|ň+e#}Rͥ |)>;T,)yS$9!xWitXSu*eل2`WjUr աFO6 i]':fELoA5Pݤo@MAM00xuG-^ԩ{F@L--5INbpƳYˑj(#IK$Mo;vU΂rp]V{Y` Y2 |D"Kٻ$ׁ9Ynᤅ3S@ xȘצ}5>0^hJo) 9YZdۓ-̂PNIh+V-p%âjٴ A$ҍXbOcJI׬7"ϜA4l0JBz؊27&K:*ca|MJPF?'N,]W+Kr6^{&DYYd4PpTL5!xȔ=WTٲ~>*\8Jjap;sL(8S1}Tfs-ļ}Wi=7)1p~PB=k%te>z9H8IP3.K<8mp$^X6fwq&) >P݄lYq]̈́"i+0ͯ-Hu!i} hJg[yܸ(!Kc'Ţ_ Y21VNRfUABd.|L"ȍJafnYq$02Ƙ[t66T.jūMXx>lC_v)@RD?jZaxT.yPϦ ;mvxs&UkghT+1̑mxgNs0dNx9dRy-ZJAH ,"^i{ˡوt9`I.вĪhioަWi$6@v}8m9bkV\b@7, fPՎhKN}@wK[ gI+b?f`Z+ UeOlakU|AĬuրYF-j=e  6ã(I %Hp< Qc{ݹLp%M]w[  \;=h4G/j.H_ iw-F<$/omV5, R>}};czk9H=:RpG'oA#mNPבbO^R&E$ ,f/jU(B/T(<qn};`7 pEK:#U x{tݨ?>|%7Uz.."嬬FTAvoeyfDDϕJEә ;ڢ jHKxXzW`_`GI4 G!/y<` 1S0u0Zw4zG=YN*c)Ɵ8:Ў^tE|bV$,6tbs$S:K7 `@R2.M赕{RFþNq;9=$akt{@\'٧-mzel=uB9<f1WhB00ū?Pa蹉C)z!(mЪ$}q!=#. lsjGuY3hZ U H)W/o_e–uRU?8Nx5):K{`1O:jx3'][@*s/s۴[r.Y(PO7-> 1: y FBUPq"`&ɠއ+\]pȐr ;[SZ6י{MZ8 'Y]#NKp!fܺ6RlG(ùt@wsQsyYW P,A̛.Et`@0qBϟij>gA2\zɳUHڻYaʠZ66%D~@_zCxgHcx1OB4 8' թ a^֍[7Sj Gv %4(c P+Eo}"/ƪ%/R{e256k# EML0]ڭ/!;jsYx4FdIrvM ,"9,o bGءl{P^;( Ȅ!XcIg(" )㊐T;V.p$ fcۃx]sm ŗ뻪ۭZݖ4pOOPb@ 2~c>`V%H(yKBk؋JB sjBO>.e[:v2ߨfjA 3xN+M?_hڟ'R[KRJVoPcy>( }Ld`yX[tF`6_*Rz|{,]2{DD^}oCm\¹}>)LdclvP\ŦC:}=H,.3Ё_hkbSZS1F>|r:|=g7u1Knuv$exXL^⌔T(tY.$nlݥ,1:20CSIčU~aYa NF&=' h8wgݿDg)K{c. _筶߿+?r8NUqd1 ;.*-E,!g-GkX?@+rnNQwH6^\T~=bR'$-#'vv2޽ҶZY#40TzT„nʬ Y8`%:杠k wry(@)W~mE)n*@n15`-Xө3?R+c4IO$T|^[b=)*߳ړE _RQ/.;"9}SN? 9C+@тbD7^ށdYfa͘uJy޲pJhfI*^b+=0pXYE6ԛat ;DTA(X"9g]2 h5`VgFiA 췦³Q)|۟Yf]@6 4l.mcjm瑳`]r׋6v8 0:툄2ЭKNcy#&bZ{ʅi4 E25Mr/%H9!0\"k.t5-bqK9Kkβz8g?,吺=0y3zsOlq "~!I/s|aP>JKsxjIqft.Aa\Uu| KiqN'bҜiO1A,G MI'Lė`ŦPZ8w,{!M -lWN?ttsnOքc^mΰ0ۊSf9k902*9 I,B,Y7&aҿPr9G.;62_/hu\z&=:5I?glpzI8 DKam]7^:>"Wʜ %^;֚ڪj!J֫IUeGGgC7Ve+xюS!0Эz|~kG"<e);Ī Mbr$[K sQcߊ/!V,7D.;{fgvS?E}_Iq@{*`(q.F"+1r0Mdgwk^fPתi OU0,?=o6ZG26:B1ҒJi3lSY {9+߯<<%`FV}z(*\[ޛuA'ep[cL!D`h~=iTED'^bsXT*'ul5^C*X -{Ͽ6pb*;"'٨o1n2kT>)DO%r T"H>ѴG+Rv/"Jf:kzCzB:~hO3k%Wa>a1>(y}fTyy`fٞc9h96'Y20ಥ"fYENUnF6ITм&RBqFOZ_qLY,"IqXݺNHsE絣.a]%`rؔ,QU+Iv'av1t =bbA-JJרJG&P$_.R0O~Cۈjq0<%ަ`_8ZP[B_ai-IimE ?1᝟`;\o k]:`?وك3_]= c:eqb`E'I:5r٢LAW -Ƕn}%9r~>}b2'abQB5Eil.+UlMJÐ@ W2?ߗ䍧vr05,mq#?c&_iYn/( 6:AAof/5cTcFet|B;>XQo  k@F`;tO|zlyǢVfMͦޅ_HNQ6#K) VgKfQo_Jq gQ&[#n_`4:fV k7 O&dbYE[2%:Qr% ^&6YŞm "20'kE& ]Y;o}Aaa!dej&T6TX΅<,C *| VA7DH|hN)z|bK2,ll3 XxN0#1(nlMml`,4ǩ;YxEܪ\W|R]`~NCؐF1celwqwebj2R+Nl0{Gte/OR<J~-® C}pEI zx!fdVo)8B 25:[z%G_Is[dI0ʖѴQF"ҙڋ6ޥϷC!8Y+BDOdֳ)H:O̯sH܇lJ32+;:7 lFa_f<`J8 YWH[ݼa.7q5 H"T^L9fe%-OA5`}xȪoYݷ|0^ui-\rh+ 9FLzWY(ٷۼ,f%WrsuBN!Qp:)x̐C4_8^]5uqlIZ+]ING4f]fc]=V1^ 9m蔠%Pe&)Z)| 47Q f)c}x06=!Nl) _8a_6th_@snvX;~B^iV. sҟ,x ;H[DV| tKObe*fvv}>%ƛ8*L8.Au2YI]J: nn)hlWJ.\Xky8$JjastJB##Jݙ3e|5Ca`!\Y[65nܝaI5-;Mk[Z X}HA(I,Դ,{N VhىͰ#W/vM^>%/w]1WDg digw`nc4i1|aRٜ;tBnj`G* ngDq 4M`[p}xme22n M>K(JN%^L3dĊ+ nw u\I5RNl!\QUstW8}%҃5d"'f3rC|@Oh!y1jcG4%H%a}&_ڃ-N`ux,dF5N)ӣV S q8~R>;= +"1}l:^=jڋzoOTǐP yNR^f cY}ofq~Ek4ԔÅ5QUax[~6lň T};kfs]*ʃo/24NT֜Ӗ:=7S`1>PCv)`HZM  #MM <1M <:+ԃ́?5C$m׋<]Y&e@At4>kgE?j"^TJ弤?b!uIi/F?$v_BA,ku:㊝ĦO&wi a#{x-_}2F| O.8*\e -"bƷsJlY#xPtjJwD$j:b1)BO]\ f N2reîLbl~MR]eb_Ɂe#$o,c٥(!m{IPxRJnjYws vE917Pռ_9b0hg·.3x"d$C ArсlXfOJIiC#Mr/_bTDy0Sw"euW|g1c x:8@h'/xZ$rEB 8a0Jo'BɡoN:RP.Y"Id[ pqd_n9׫(;KNtr q/泌td' XȚ{}yՌz>x |)+u-֕{]s! HTorQ)A YJK/Z<₆or9IR<#E_Y垑BHn ^kSsl@y䃸;qC箾tmct-~'У: a5J5bejRJe4ҌhYXv-YR`=\I-!!}429J#:bg`h!Y)E+πbd\Dլ. XTis2p PknHX* T-%.Fkm ^e (>x:k Z%HrkfwHI6Xu5 u2+0$! eG+q {@7$A8շSC+01(A[r6k$>Rg])lu,\ehbJ~ Z%u׷i7-F>L}Kkh4PKDd;Xt,VS %ӧ~13TN# \a$ /wq.ܮSWY8AVM$JuE( d.|w5 >+<"db) iTaI0tˁ$Ee>hZ{go$S e1UK 5qxy켱H5 $L,*k"ţT\1@Bz2=]89FUh&^x~25PYCǻN):.NQ[B<Ǡ,86ųBRA`ăW)9'LVҐJsq g=94w9E-NG`ImJPgw۸ork0$~<+ <3YBBx GN'T_U/Ws;nqC{9qTGظ"ϔG9&%ۂ$pS _4՚  " N@! KyIg>>8K@`-VRICuqk圉͌#P_AqTE[ԤI'.9օI`p"@h|OnM$Nwzju_9О/ݴ| )w8\Lms_\r~2o~hoqw~u{> 3i5g nL|/E7X)A]J 3lO{YgbJxyJZ=D3~OƐ/tZ2C0QVO12Kɕ< u)J.CvejSCO&Ӟ bM䌗Np'Bn_"Df'{-OwX_kA#mBY6.Ym˽zY$ >J p!GhͻZa)Ck!}t:vy윘B(r 6K0ANFH C9[γgX:3P"XHN/9<"xXD*WffPH,`ϰtl7jkArɈ[CkXA恖 f2 =[XK>MfxNT@m]+1rfDxh<)pOs K* 5c^Ro~ef|K I+$[iLDZ d3w.a## vB rlULL(ZߑW |/đn_M ıb=>+P8*7pdǤzv䂋tY aH{Ef0ٲY^Xs><ܷSni:x@<..U@('' Y끪|᠝ vi_eT<?x9td5wGexG\%D9t%f:X|iʽe+?/Eoګ[c<`Wo/yIVd;jFs&M7ǟ݇=޵Y"qsR>:~/ZoIw@IETqҕbU$m۲yD4!*Y&(\@5k:!/A[Y\?mbBj @oS)aWRAz@Ϧ?>{g6JDqPcmn "P/VK1961;§d;aOR` ƺf~E$= TYhٵOg@?5Qp_X+RWD[ %]cĠIҒ*BGi˓ϋ 6ỹU[]<=4&r)JUepehou8r~L u+Aɒ hZ»1O`3"bM4UJTȠ <g}\r+9:VQU:1ur&g}:x}ŕ:ezB}1WԫaTMA75zOsn$B^M6&'ldKƏu$ե}ZX\Eж/ҿ[t "7I\PǧL[(sYdu>*z:l=㭖pvZ[# $+z_fU.7,|Qm.fhfjUj~'[_k 9AHpKwreY2|}G6 ,Vm7ѽaw?+Y&^t[#}FAqý@EbDkH'ç#1֛4Ikni p~&tEAHBErPH1)5{.Ƨ!nk413~3(!01ᆤ&Ґr3Z|+G:6'&D^`Ҕ_Jӄ kJ^g-k {"OF%ö!J6E{ӔV_4T6Ud/ FxZg-$ϓ6KZַHEFI?R*ch/!:]REf J4S5y_^12ܗ>k̑ާ>ˡF6Z$h]>Vk*I#l+,'9\.Q\v2O <%EW1FFQ8荓YK*Ki_ho-A!_SRdi|~n(=L't_ޢJꠙ=@0YHR5/ (%ݴ#^lA]W83#t4.*nzu|4Ȇ咹u+rTRTCc*Q/\^N@ XP{ pGdr E2SsLJ Lx@ddnG'OHsҍz# ӠDK[Vx3G97wSqWg`lH>!)@,9|=ﻦ(re`yrMi<LeMp !(j2''ە._&ci$|ow\CI;QD@*ڈg!@ gSLqFv4/@΀?4"w!T7a@}lOڟ|z構$PEp1emc$#oQ \8PY CO*O0 omCNOEEN+\dʷ\ޢhX6,h$G(w&z)Y>4orD(wkz7ѯ\#e_|UjܔɌ_ԶE|;l9Cj#ZyLb|$dK,WF_CB|AC:ν?;|7U(qɷJRa\*$jӾZuh 7._$ˇk-,%𔒒ksaҖlsURXMꄯXrm}8SN湊CjGsdRbM@3 "uzLQe =%aՀd@b M@ibqaCqv~1n4 sǎ8~7䪙sX*1읈Bd|"Oj[.>eYC8rγ'87cOiK]ZYA7חz`/3=L3|tW5@rW7_C2\[B04}"*jX7~}ZnISO s@x;Ҷ/N2MT|DV^ɜ `Lbdޗ< BxQW}4LaM'?UZ5*eAN!).kKT3-$4)4\TFy G*S0嶺2HIfS.L,(c`Qv:j|d8L 7יվ/bk8kĪeb BLRՌkT7j 4ם\Kr9ʉ/:~‘Pk\w, ɆVd~-?٨>R5865P]$'JP݄^xm4"i5`ԟXJ 3Pt+rLM[]}QnDⰪ\7Bǡ~sEO3Zml mӀ,iE<>:">f2i8 F^A[v\,, ;ն8JλR]D^3;[jD~P ^UѨ_XIZq"&wCh9vv!:V@)gp/&tXeݏ3]-jRI'EsLu6nQ9kV- /CՎԴF5 ]]߿'{ JI|Jw!̒ݗL;pM1q}[Ͳ׬'^O11kG+pg'97e^oLI~7J޳1 I#2 T¨P\uam˸T x|m}}'vpcijwSl+ $A^tܥIS-V~C-B}d&pӂrsb(LHɠ3Ҙ2x-όKhrVKh_.h:t~Li6IEԋSeG֐s6 aYł0H~IEE猰#Ol>f)#hDk \bNӦLs^?`ˌ08Rz r5'_ 1߯3v*FjZ7>HWq~.'Үee' Y(%DO!hz[xz{=z;D9xhCEIUaA&ʛ3_^]n)ɪc+'؁x[ZA 2k߶փF|1d硻 "}TķV?w>)ZfG +CۇY/DX2.6=E*1OhLY^QdY  ޘ*#41Art(هV-1@{PΟȢhL gbj, xXwhu(IvHt"欮Z }uO-˫J*[Ϧ6%Jjj1pQGfrj3^{RZ.!k^s@$4٬t3=:ڌή? `U>ImubYXTZA\wp/JFd5>:&|" 4Zs:؝zH\:ݿ9]$EVonƏMCLomR2L׾DRʼn4E 'GC@zA*{xo(WZAfL@"~+Ҏ]$@mP9SE EQtjʡ6I_^0]DA+\y] ྦྷYv (]#lxiF۽R5(Y~CqOE+j)ҍqQ)r-eCcY$ _;РW-I=>ﳗAo t'iBdu(-9%bDheu{7졐V@Lwo1#O q ״?=uv?AY3J(W Ap粍[vlnzN2ݰ qn?p#k{|Š:LJE%.kݧ0jw&8PwʬվG=d%~tp+p[ɀsG8kF@Q%2zS&!^.b1UfaP}gGFhW?.9}@;4WnM,dԽEpv%[0]\ߥR?q1lvщ=:  \8&ϲ|"`O)`*oJ7B= (ҐKI>&oS,U >f|67uC xϜ^ DZu$++Ej=P):vxJWidž:Œ0@ھvo fĤhvZؙ$Ef6'M IQ«'3M-:S֬:c`R4 xKP?V| 7|ul4h[5mS`}ytPLcwp_ {38ntHA_F<] F2N(r_v)nOI@`%ŒE3o!ha#(?7ɿ@4p s57B JsLaO<}{I.G*&e1]dS*%vW-.1c0~^n<$NedOcc`@ Fׇ@ʂ&, OS-__6H1BszO^fB? a7cs:ZYJ4 -~w%`]a.{y_0h~6gŕ%]`Smgkk _]㥾[ \>tm.hX+vP-eAxP 5Q,vE{֎%O&9$8^a3fkux0w{~Gߞ^Wet43p6+i+i&l v0b`xa}>bvEJ%e'XNæÎ 'V a*xX 7ڷfL։볗;.Ҹa8p:.OqW~jh& qKe-Fx2DG#Jm6GߥQK ˏ FQZ)h\>3J%Y> [$txCW\?}!9-=s1 Cv%Toq|YmDxN\oZEIxoC}.4Df6@1 `kK^tm7q:3wc^_\L: -I|]!Mb+H&(:/jW9a8"V78rSB~M(@AʳFL@UA]uI{f*TE*B\YTDhoYx2 :&?A+w?Z@~WBe!{Y+AD(f cLc]̷ZrHk}GS窧/tMc(gk̈́3 f={4&S,k ?#Z1 5O K _șF1k:48if t&ڍTЈ7 غkJ&2tH+&=Q%Q p[@a L]lNꅎL\9ya/?&/GJMY{M+Κ]Xge}F;=>懽()`̋e'L Osi$ˣ 6ٺjBw,32vj;H&#ڕT_HvbX$cNda 斎:9͚]}W,(Mtx5=.翛7ۿ,;_:ty< \H-=;RGBzMyƒNLO\GC4?4 &}ѓ(+2*sNB Š0ueFm\w&ZmĢ,X_Mxtr!f9DN)̐h^Jg|Bhxm^x3. U qW=Enr4Tm0Ax#L-^LrvfWr,/d)yU]8_ϺUi (@TC4Kr0}*:_,ez,tDPNi.Y: ab 8]1M+Ga/j#*caKWW9*s0#ݮGoƔoHIٍp6}meJw2(Gc&J`m'%iT4"|LkH6 $dGDEcхdZ4 nuHcÆD6u}ƨ!j:,t E U?āwفZ-i] jR#$H~ѪӁ&MDI^X=9c'T|^t5űq2kj:'\Q:2JClsE ꊥ[Hx'bщL re57r x9~\+ȑ| 8']x=hd8,r`G=}4*iP$#A ]qyS s,Q}4If] u,sjQ|q_W<u՝WfĤ^=Q*&GI|J 근zKlx c͌8Ej]f[[y#yBZTrj}HZsGSQo Ĥ!C_㡣34M!2U/mV/ 'pZ!6H²_[`,*#˼hVgZji޽髽zb8l UM`B9؇AY^''huƩM*~aiÐH?K(Y$ȍ퐉-4sXM$=>jcOH$iZF9p}% ow/Yz6N`YBg6@(~ *9a[H6pN|uZoJz`7N;Sj1DVѽl tGWoHz.H17@>A0@y/( 4-q9\.U.;#tQL'5U+MAeeL[1#WJZ5˒Wn } ewM%(܌q ^\T:g[>WQó)؅͑-Nx•"Not(5UvXөݾU3LM' (4)ApN [TDvݼ yx:DA(e;sբj%!vO0)ܢBg2ʊ(F]H7qb Pj0b' @l[g٧0؃";y@xA/='=a:\t7lEUaK 5PMfVن(-Fb4$4H*s/݇p]yPթ{Qt6!ݍW8o*]a\ovv0Q)^qr΅T$EDv7M;ns'G=7s};)_۽ B@r.t<Ѻ4qH=s)p һPؗ\a ~S8 ,Su.hB yL+RўZOB dpX5eMYn/ʧ* AӒ@ҐLtl,HUlJ\wl1LzKqT/2/U;6w^2v'_2JBhznF6fCBn;nPI$T1" /LEH7( oni {QGDvI8nqD$ߞt #5 ,v_Er,_tϩ"/lVow h@>I%\[b]/?35"]rհFؖRYZѺqcFIU PaLY^hnf״K?󪥡X9%Y0xI%x$EǍ۷MohCalNg#[҅O;CU3Qp@N Dd r>vwrYEx ժw^)j-^*BNWgNI#3*g`حdYi׭팩W"$KMW#sI7L֭?:QmcݱHOZN5'"کxWmauI #{mOd q!T^oC;u  3Loh@8|GtWuE  Z2hK7:D%kXCHddj'M4x`0"x`kpivr~ܺ^@ݫ=7~߸-:ִ`U!Ր $At+$+ۻZo4X&{Yg#oģ[i67z`g2 UȽC^[lV{ayܬ)+ȪqgJ~җo5߅K1OVAXm{ʱO|w viU╆=|$ "ul+`Lsa~i^ŹʹzB@_>ZZ[RmV+1CX [e|<7٧ H$  %SzQ09x-UF GX\JYknB^'RqD-?"'U-oд4.ƚ2evQi|8b^EdUKo܇B]2#]<*ڎsaG@W[]IDDy <ʙ,6{0|a20 SuzRmTs.Rm`]NکV(Lm D|]N.-ySmfFSrGb۔?պ0#?"&X'}e7T-5=ndjxB .34CJ]U36J~Aw)i7J4BRA!u5[D/a+ÙO݄KP!5( _]挕\U|je[= >.E,a Iݸ+(.QslKƁ%-F0~hlۿ'X^C@ƥ7gq\h8fe v2&~Z ˒n)4xgx{P@T/}m50#[j8`n¦ID&Y"6:ɪkJ~qUT@5Ӹǣ]-iS/KRʏ 媀vq΁mJ~\{[3O-TO2{78>ĭ)fAtH$U]G\O'e(t)ȻqB_b"j?&p(]u2CYQݘN߆fsJR,5z 7I[1> #b-զߕ4Zsp`s+al\k&N5#@ {ZDD%? f$h@xp0I۾4ؐnE潜/ۣPߡ St +4):-RqC,=TҼfx B `E1l9<䈜)$Gd+Lؗ[ s|C#829>` kڟ)?okf-0eˎ߶Ӌ{{\Fc-JK'yWҐDZx+ 9'RFwe}As*L~#=[eh)&c0)*I>-fBZm}sa!mHqծw8J:cg;h|K C>Mh8UNTzp/r`),N]ݫJMb8egT'=MVP(=ٛ='L!-(zpF 5Ek%AޅOcIv0E]TaNE#@j80D`27ϯ%(⯲v ZcG'C^_׾n{=tjk( ?|Z/ uY~C5}'p cz3w\Ze!rxe_Նs.&~c&Mق7e EP>Ԯ-ݸðh偙M?($jzBNEYz(7Ӻb{YC!vw v)$Giu0c;rI'\y\sV~nndK8d&~ c_û4rXlG<3PճhF'/ #UV0'1G P[,AofezxGA\뺡f]!_q{UFn]Acµ 󸌇nVAB(veMiآtf Ov2r$ouX*r#@ ln#?G7b >.O~UO^M6`5Pu wJ B[u@m@ K7 5Ѵ+)'}W"?) -ojA?&G`.ㅵC[nW)Wqc[G29,cRDaVh(wt tݦV[&r1c`/ގE+6 \PMW?5;_ll5y SE۳q(}#\mzi+/!]||Z>+?^Z*#;(bQsL ZﲞntQ!#Juab |[~w`-C(Po3\ P t(p_umgd$Vft/l@n}?㋧;%4doky0Wm1:bŌ}7X I]!)R}Ʒ"RN]qEԪN+*9,JVO~8(H?Y l!jzG* |L9,w~6K zRa`,[Ǟ˝*fR 9)XLn޹8t'^-N}F죰j|| Kz`-  ~㡘 ,0H!# ځmU{n @I|"b+azhЭ+ډ2J-bM~?]SK3<J7guƏr"g1~$vU{EJ61c%Sx0FoSEHIXG)v,웠W+O\<^e0PAbO4Ja%3lEm/_ WUV<`8dH*A4/u58_DQғ =]-Ĥ̟yT%wuKӱˢG-Z.dI2d<{QSZ"2Izft lB~lU1Z5ʁz/1bt(ЛkV~<&<%ĥSyjJ:)fƤ2'<[Ll+*6D>ӰL'E^NJO/J'%`ԻMb]  GAs@tU4tCPM'Hd,E:Ci ?QkfX6r\P.xw%j)Z}0I7k\(*ʆ0!xEY25x9H$,¸wmx4~z,B+d^F;;$]j;L" kBqXeZ4z)1@X1Ӊpq (rbۮlz- ;*vaqگjr Mӓ/e'9z_)ߗ 9Fz^KvUZͼַRВVG UՕ>/V5ӎ>!G;TOe?|ͩ2k_]6p<,]4 I'jWww?$XUPU9oYy*}HnrNM? ĭZR}Lc[jYP?/ yH#|]ŭ\Q,x^K2*C8#AiysIs Bv<^O Byf5-귓$KS'Yl8Cцq仮U۵M2ߖ}٩ŚƱ]0Q{.%Mn]7Z]B݇'A_dQe!Nc4S% roPd-{5;<,ϣA\{ +2#7^1L/u uZQ'2SMq zSޫtwr6\zٯ;^Im/#txQڍ W 97^ȸD6?5K{ޘF) f7Fg6(w-E\\08p5`2iJ"NJc&#N)[Tm>;%QuHKְXm(=vC.CȢ6RGa9 w5{H`zѢXx.5WöHey38[qT8H|SnϾ''Ǜ?zG,@1g6G8 H]| :+RTRJ8lc2rq>5L$O܅y-TyVf?f]ZZǪgN.gV ЛI'TC:мϐ}㈨@Yq!)m5/5[{^YDp&GdyV۫!xo֬gkoL i W&ϙ;kn"< >$2Qd>>ӯ8GDϋE|u*rUKHӦdC_u,q F(zڑOnԁXz7Kr#j@` Q@GE[3VBügN濿уl]0TNPz ll!EГVz,JYg+%.߲#U) X"uɚwo*&[7S7ZgO k+!Ȩ#A1f7*NQ+ ILqV=_$s@[t5:E+xհ'ab5hˀoAA!j7«zcU>e 9 19$V?lN`LG]Uz7)l#{ZϿ Tj{Gnh mFGz|IyyldYB7Fxi~ {ZՂ"X#>z7qH 05]*oZF<ٞ#۰s:A ~pvH$jAB'Ѩԅ+K7#\DcII*_Bk,+˼9~ fr9q8t8 vRo<tNzWisP6I|Fgd@kՌ Zlg-?rn.^?'<պ3]2 ,PU]ފxx'LRP?NX}p`5+5rhM'&$GZ,B~02_${anDw)hn'G6jb-eO@YzcΤ,Iv)9emGiN^7ŖW\Io㑷~-͟\òqqgbnY>J,-5ҶEm8A;;ޑ 1+[.O՝2hwsbc'щ}`Ufa?'FtհD AH72kgd",D=tingΤB*I!hjJ%+z[0ffbR!oP5M{Pc_. 88 koq^bUs~j$/^>L-r҃7]86PI"r%׸Pi5(fv"yXRhVP eb}'Np.7r;7rsj[Hg'hCzLuC^I*ՀfęsI vip9Nr/vh ׸kg,}s;<"S;j4MԀ fb2l4qDQ`d-HCK21r'lN(ġOJdswQ:֙j|U[Ǣ-_Si jX<V@:WyT'Y8 }/9ix a5̬+ uImHҹϓT=uJTrOTwy"߀&9UWq5f5WWrҨˎ3\## H!t˺D͖='("q //yvDC{Q`JէCz>mjcƋ så|E0;,ׁ93yL[AٚE'r7ՎΥEcTQ7>t5By1c{3F|V WbyK fUQ_-0<(NrNR^6ٔIf~/LC3f<'15} Եe wк C]kP|a.@ CҖܺ9׬WeRzD4:* IVU{D$s摌Ԡ.J=_n䙓O\c&6 %NަTLƹ#9zM`٫V KVTDn 􃘅hk˽A> m_q:e=[ExVh-G} ڡ0.6rWŸO*60gc<<U- t,g'-U'=Rqp"vA1!hWbfPY4{]>V5 aR>ei-\dpL;u z3/gZΪk93_?xp ιJ  Y;dT'ᵷ1q%g.9ij,,)0 W4K7 Ho My277gԐW #+QvAm[>lˀH@Nln(]HؗH\}O+%vs_ Z%ƿ Dl҄Dză-:|Wx>XFi1RЇivau^' 7+=X6PHhUua%U X0ֆIߝ< pB42<;Ш1Yr2^=XҞXrr){/u6-f"lZoZwT7Pg2'K%ڰ8_!kGyͧ֬a'fra[[bDOO/>/h(kt.aE_a\zd_ v"=xUd$B#AAb9uFȿ5p, iDV_ӫc. M0 "\=%r$ p"K7*/ kFS'f-FuAY|u$ÇLvQzXc)hOR#H;skQ6E_]mȚ](YHf4ZW, I'ֈӢs}bR=9l#Qa$ae,PmҩIcqq2簌5sI.n6ܹf ! LQ6p.#%ph w%x)e]5~:O,:ꭢc$j;Ʉe7tv1l3X\X[B0~\B{?عܠLGrA@Wo^'j)a8$?r͊##NiB\vɲpWhdC/p: 2 g@7X= LY -')o -;g{*ѹlg=ȭ&Snf/!F+Ed񈚿w/dx^BIyQmsحX}c"mb~<OVA02{\./D) *`M1CY;Օ0 %I`Q.gVxEF)yu_ ,%rZ%Zok{q6(T< \R;t ASU ^IgP~2$[׍:8}Ռ /̶ tGk|㦤O{f ȍ Ƚ%& Ƥ/;ѕ&8=b^yx@t~)Hs;eFnlnAfT?,uLtn_p1;E7E yjIfb~t@&'y?·QtE:*S̴AWb].)Y81u$d" 4*{Ӡ1_#=D+Vq#S]tuuxzARz""[Ve8)H}1V,]\WMhNw|8BJevA>Otj 8z])#Mpo 3JbcHRwB.ic|+MKv4uTXƬ7ߞJpgҪ&ȧZ<βϲO9y3Ǒ4Z3;zƳPN 8$FVdk%yJ*C{ļz"]% fpLѡ(%q4VivNtg DxZw`1 8ʞo>F'WN8#y^Џe'"3`}2 FǪmgP7SI0AGpw.Zg}Gi1`9 `6OZ(Y?7h?s7R@؊NQ%%HLo>bV;H_ =HA9 )]d?2[FظpelPAji>34DwFA<)RL08_wk=>xAxIXFADG^6ziI?@yGjnNк@+T I`hVLC_4" ~ ,B{_Cuo\%oݕ$Yz }d~=7:?UBHf#AkN57W?ƳEҬ-,z^"Xp~oW=mqX谋!ԿYCWǬ]0c%qilFxG(@ޗp"KK6f_xՇWxĭfyN ٌ8LzRSX(iX/ʉj(=D 4yexw_4y;%Zotdl<4'bIp]%/$a-g0+@;1gYZ: @Up_\) ͇wĭ/zZ`h}wzKd)󦠨l hہVQaHE׷vXQfwLk vsۃdoj? 2mW:waml4:UI,d%76lcWn*)"N2`ktKG+8~ - KNȥOǦfߞW V H]@(PZעZ9?9yݫ?/xqyNC!por_RjwͰV2Q|C}% _au7eM⇈XuOOÞAٓC'Gmm4]|4C2ե&znG'MϪajx]q˿[Z?NIQc1.wgQMhXY n3cKl.dj;'B/mPLt,T+ 9efu'^Z~ezAM[-(%2}g%g }m(nEI b{$rۺ|ql(n`T\eJ8紑]P:X6DGQ|cH V8i|F꺴m;%r+6̃c[ ۭ7>삓?^Ÿ4nFw9*+&i?T]V^%Tsi,pgaħ-&cҽS{SƥTK:$j{IPL%}k^KRNG^^*:.!.V6"gZTW'cf%W򲱤Wr0(+S)T"O+oNXl&y\Ȳz,f7es/AOAS9UI0%yj9%w/7w̙Bz?3|4)^E/3B w@ }8QꗵcgCD‹^@s5PE緃,Moޞ'G@$i)[Kn>>zQ(G?F/P6>Q!J/rW5ޔ/ft!wr5)t015I9BuC.ۯBF,D߾ђ 1μTlD5=uuT%Z6#XR 3܌=!8^'J,&>"8!nJWM~0AD6ɴę~;k7wE^~n<0UX ŨңJNQ::²ԍWT3.(žGY T z}T9vQOGOU `G?Qw0opWEn.k l}clGY2 $ ٲН"a%[k?;'DKhqhM"8grY(^bxt#BrH Kp>r_! 08]=J쁫H(mWL$Ђ<@,z]- {O.`sĞQh%&fsroolL|j^zr#p:tRwE#\a7uƅuWݻ0,jC hwuh "xŲ~k]tyXkөJġ c\RzV~{j[ǑPF*M\gn~AP% 뉍}Á*BRY|ڶ0GǧNJzn"/=$vGne?/;+u Z<mWuN[ÈR)*ڊd Tl&ͫϪAIaeߛLuh}L Ysخ>7GyvTid0 :ZEꘋp)Mb2׷oI>E`` Cbp j7%GobU"DPk][c*ǹ4WB2*de}:}YE-dM: :7ؾBof,w^ E6ΩSQ6)}Aij#]|ȴOjBxwB]θ|ʐc fzԺW/4jȍ!T)mfUyѴ! 9mn#\QKd9ֵ8շ2\e cj: a0 ւਫ਼W6}ikB -Q(w(3~:f͕6= BeMPh|ΩŎbL#qDWG|8Rm|pSP9*bS` zgO% d.D8tz.2+|!ߓ5r%plr)U^~uKF˫Tf.f4m|yXpx6]1>t{CEtjq%֍j^[OϫT9\u Ep 74Ww.x66-'N )N"ɲ'/['SM"zJ!nUq׫ˉ@%6*;4CA[e=2YzQ ׇǬ%eH;(&3W%r "]YوS$Z; 笧ZB8>q6_B?gSCq0u3CPvC<0;?ˀ]Ir3-])DzM%yc_(3K:'޲(6ڭBpJPėaVGQ11(RXQ,o)J /x##|nkyI>ל%l["d+MUzŵв4?1Ũ^/''Y󈂍#*%,Wq d-z*eZh>ĿSQ!=C {H7>)`7:@ZQr.?~\W-BX398tu0ngg@9\ݷyҝ]#Ǔس 2Nׄ3m}[eիȟ.I3pG`Պ1]T0 nE(x װs\P458c7ѡaMlq%XȞ+g) 5oVnIlY PvcO-m_#%>מ;<ϱ7 RR5d9(^19)/vUI4a.DͅnfG ?8\̂~ z+įc[S^aWYrR,XT :oےyYCC6~JIcn41$VV5eGkd 5ܺ&ML޶ ͔FL񵭼E/_NJ6`iڹCk`EBd>?߭@3O v;+zM*U +@?QG"換EW4Sf)*7,mBt>|YF/4Wzd-4:C ] :/1 ~uL4KQ-]7֩N6'I~%}"ǞO,gMQz;&wF4壩GȀ:w`nOBk욝,?Ee9dTy%2iw+̐O'cŦ.UaVח2Zh:dfڢ(vcJ!EDD>=]=@{ ?,S1XIy=eR =DF)a)m[?l0/KaoΪ`13҉ ; HT@VtV顱;y^[ʧ=o*9trHM,d+Aij,JqWF;`EAGukOk9ZB/!p'# "WƬW%CQAsT!C5 / N̏,\+Nf̘fţYƖ+/3VUu* p S<9 !NJ((Mָ sTōnF_ ͮJa૽ȏ3Tow!VCcrEg`GId7?O7MBR!Xwȅ1b0-_C+7=zMG ˉ"|{^IIm=+h׬m< 42?NdƖEs#+dHcYK+Yvd-m;r߲1p]Nj8YP9/y=IF/FZ%*:ch9J+CK 1o /iyZg: %N$ѿtfR804C+ lłCJØK]hl?5[%Β0.8,TjpIPsSV2¢+`8j8єMb`Sx#K'OZ꡹:ExoAu(SעNBsC>W_64\k/2bK(Z`{HȨ'@lW ?Y HHcOK$Vj)KcjjIC̥rcD O?/]|4]sV qc]C/A($,1Bl1-=gdz=D܍j -7a}zdP@V u!]qf1_Sh:zIσSRx!EժSI0b~$l2 ZOҊPA47W{Q eb]w&h)2e ?H 8P!SXA>8$*o"Z%C(Ɯ4z65قWz7D?kI2u) !WwK?T)-o>&:B.BALlwW\s˥!6]S1a5DiN`,AjVsQYt=&a"rw%uN1DS{]  S-> pyy|&OV{ \?w:7ZS4p{_nRcHF@afZTF BkjG6)Ⱦe1B6jDczԒ;k;C;o>A \L=`0rH6\"QÝ;Eg?)-,:x\y}k@;'Ʋ"z憵JɩS<| ]WuAvM;*r2zo[׆ӘgMdS2`z6>$ڊ3P9Ϙa6>ںWZbVy87<﹣Q75ُSϩYZ}5!4!ۅln{_xۜ,ū>zJ;J jQK5HXguQ:Q>Ϧיk6 Q V}3ݝi!hn?! fjj> ;AE^)șt iu4{":n\C.\S+23&8H55ؗov@2=Bտ-;_rVI7?FQ؇J0Kz%g-ODtĮ?Gx³z1q$.:e1$5yh \9FnJ$4qX[1q]Iֆ08dڍǂ1EK vw劜sJ[bd&+|& "e@]dp?wktJFǀÓuxto&MG((!}W"l/4aXF#EFe c?,3dA4tpΰհ[Ȕ\!מJEъmd/p>r}!+6M`dIeuŽT$njq8Jץrp L;bũ?E'y(AQUe[#/%IjwdjBZ] DcgչBVI7eJo6&9+cf&5\to:y'n-d9` 3 6.3yߵ bGIEAK/  ׵/g5iC2 er>`;7Րxp;=r"UH7yJ$IŽ Hζ5GжD~l˖{TCG1M2[)p}Qtڋ830DJɦ1ƦLv4OAB5P;:[D~vCg*Tqivk/\MAFQP a.7%RH ;VfgC!~J]|oJ=KGqSaKF x޿Jr.kR:` W/uAM;!^@&!ŗUHٛ\A|QPjN3:P1!ҍұfɐng:sįT]|@=&E[%Vh$}C4>Xʘ2UUD(8;\.T؁}r1@&w{1MS; w:#lʍzqSd0 }ް~$!\%Vim:':@ZIIC @f;pY?h^R~Uy xN1/Pvqi<&U|q$ o{;:ҥeۖ.!5pR UsjcToyDEyW'"Pbz`hNV* 5Pk?u~)R-ː -wN^QXy= pQj/GFLBiDNb1toEzJ";-06* k{?$BЫl&>߻#Hcc-J[9)+T"+."ɑ(CwjLJ>>'%&͸1-i ؏:eڄf{"N-J(Y1#Ќ<#`8S1 ׊%E6KKL$R/?iUA{aLBC=I+LO$3BHt4l-m5r =˿^;B4!zz3+Є?"}ǁٹMF+n. O ]dt⃆DևuǵoF2R{VAw^NuIeϪ}9?V7wK4"%خ4ؽs=͚^e9YYa=-Wq<띁]H(|،`|', );J^[)'^ hR^GO^=a۹->E Xz~٭ʬ%hck:^U2X%&i`j-ѠDY+ZI7@Is s f0Y)GWSG  URi ri@kl@JA,W*b0<6p"h':rkA ,eB'U,رÅ7zB=mx Z&F' P^/rNwn . Tuy@!,X^o+|QvlYʐ5fTz9}3N1rq5}CaP>n誏vGX{m@&^_?oe|bi^R /K)'× @Na.N}iSlcŭ?iZ W#WuKKH^"e):MQo c%1UR} ֵ6$87 _4l-"- y6bSOdb h(xMrn9VA`0ɚCGځp/ vpNT} 3~еahIUMYCJ3c0G3_?0_$|H-_>VkxX X\.S&TY+iQGxZ UL|h㻟hL=ܫf-|"|W#)SE%2U4ĉg"%}`ji_9V(s hfE@v#e#ȜEՐ ?z:ei3UnU(/QȾяD ?X`و9/-]i~1J1蘬 ^Y dPm0f}ՖWZ:y* ~ۋ!9찝tYi%Q;8ٻO;)pfrB&NFV#Z$Dom 7.F\L,+ O(sD_:^?8s +zÍzi)^ϊwL4CB'^˨me옙:լm︦ O0oAr7nvAtq_ PEs";.:Y*D$=kr=NH+tpPTR f;7jhHGxfql[NwP BK!6̤ʲ}(_~LwlfQ#nHZp`;n&w? ]dZ7R a~h[L +ftC e23!~rI7q<"[2bt"x&wx>S9 YHW <\e`#{hH"snNiG.^oSbe1Q#Ͽ[ij6&~ )^YT %yP vAu^@"9OMq3jk\i\D񸁳Vr@mqUe<q$JC!cSS$\ jI)T0 u'#7)"ZDKjyZo_\A1b]]Ιϙ٫iNԿYɌc YhHd&Tz#*V KV/xGO/m;>9ҪgaVnӃfCeKBwIS%XATc_nz>jٕ5)*g$pHe-mIaZ l*cz/H3'vJFD-t7i(~O+/T>DP}NtZ0E sbU}C2! Ef}foT|Gi3(9R^VW[O.b Dw»%|廃?<" zΧCY =S) ]tf xrG"8#fyL5QTx@~Yސn Z6!VsK{Ok_oqg \^@T=0lZ׉Q`^\B 9V#sdmR 4x96ei*!F@ݾq~.mPQ,n l$Mpl{$+ʉWڊƝpYZ@}k@fCF8@—q,~u E䛅(z7yЁTLۤk m [2Ek$b?bu7 V8X6Xkmy@Ǻt ǭ|2؆(AP!BR%AuAf}84EJڝZZj:@|lry#_ѥ#?&݅{zV-H6I[;VM@Up5H3m,ݮ }=#KKQ\D7$w{ru#fiA&8AL.LlR_.]ż8FVAUϲ0iaɸFIUq[ԹZB@8'_<(xo3G>iirV-)%,[Ue V?I2-mmb fu/Pk(nLީv׾ZݦGK0 x>כ|0􎇗-^ )UHKS{M K&Vȅͨq"/‰:Hşb+>t]\tk잠1K(=DC2A C=[we[9=ċeX-|o[ȟ}7tGtI{h $#QW{0džc:2i($@ɻƾ3c fBxppCDHLOU6(`ȋ`?:JD$_O<4$ITLߚO+fI+ŨcJnifU 2g..+ "{(>DԘ |nsvЖDmEWZ? B$D(7yVf>Q 3@r+6йɡgS{g=5[lc?C{ֶo_.!?mx!Ȇo2~x%Eǀ}PYPNp%w ̨Zs2x+fVT8Iab5nUv%W@O>!J5r8vNehdTɊ*rڛ'Bu~q͓EA71ɴ@D1yYhIr7[Xp,+8H OVfπ12UM[o 2]>((7d+1{ϳ2 qqH`V~3)iu~ C o4~,zC v9&] ߋ?XNuRʽjP lVQ)~7>>#U=<84s6eWwoj]zErճ6+#eB &dݰ,Ġ3z9g; a V ލ+I>zk]7; Y)=zbr5[THws/ no&pޔ]2D/;wnWvvL (v =گLT3Y;}?1k$V+ƞKդ[ǝՙzVO(zn6kq [tš]7ֆn(ZC15"o'Zm04$ >QhBuuHG5Lt f?vd?:pJ9qJ !</k\hc&.f1Ϟ(oE8fO`o~V Vmx#, b XYDd)2D>bvKEb;dw~V׽Bqp]قNj}.o449fy5^r?QPĴ z/rEg h*ҜtXőjK鐊qrC9b(̥ ik N}*Sс撣0km╟.w]q5ikDHb: S2ׂ|005H@`m &2~BG:vE?hiHv9wt y)ٳ3vS (M8(:<{Y@ь) T;=e؅I\b=l*3̳ PDthwGӒ eޣo((9N Hf|<뒞83gGRK+̼.C]rf;݇}7cJ_*ͪ46(T (;=>aXYJ,ln{n5V2DJTa>S~pוr/p{*}p&&-@ge&^\{ƃMeʹk:;0>0MW`"Zs=f_섂۪jv# ̕^@n~Q a%{fj]Kܶap:; ΅&|CM<řlF9z7X*Gyx^'s.n 0EP^^)?U=p21QDN)Tz-zmqi䃤AK~-̶РThՅ/+n,ծ3[gd"*?rG+jBY 񲜫N|&-x=Hs S?\XƎ-!b .u뻚=t!z=9LzzÿEYns=uĊ *ARmmC!zÏ^J ~T!'} :d ʧ8 FHԏ%$ Zj?+3=].j| 0~'"zg\"AzRi:"ҎsQ7]7`mF!iWtu:Y{=-(*>JZzn4i%}{Fr2-ExW竈i&eh{bqIZ!2I^u۷7"$@@ mELJً~V*wex#n$JA~[sq@Sߞ+𵍾>`^ou|F(_o.uirDGISsJ_b־rnM`0:MlK8 -ҬrXo0ɓ0߉slΨVeC"85$ٳFKN"rtb\NUΑ _!KNE-IU"r%ZfFSX8"^+l!ە#z_uF^DSӱ%n:dȊ3F5G+GB<"zNUilw(N$Xex $fj>.DNG h$M뼦g~Nb&9"ȷ&0]3&iNyp](Lo0?ρ^95ׂ͉E`XєFsP A?O2:[/UMj:a `N# T's^pW#`,Z%Cn"6ʙ+C~Ѭ"#Ϧ]p 7$Irn?&\!´D:|js,aPJy½;;N Xk΢L"S5!S&9BSk19ʷI l؏Xxkԣҝci&^f?yEH{WC~FD$`{XS䀛Y_jD5{(ecހHU?GT=_43 3djqnZo%n]hKɹ:ĿnA3D;w7<+ AI^ltbsU[.} yjs&R޾h5YN!w22Od2h4~<{~Lw7ِ YNGVM87y3&SZt]Z)]1+¢ im3U52o"?U[hα3rQ>᥅;Ξr!HҠP/ʃC`[dQN@{%O#!"QS?Dal (yx_N65`һᚆx]1U 7K';"6B8&)O K:~KM$3*BRg:cn5=vŮ7Q{R= "q4n)hRɉXE-Õ( 2ĭxg57[ԟD Y:N$ ֖,e{o?7LeVm`ֵf4߮J( c3+heC?t?1\6`ݨG+weJOGɿ~.~ ڟwGKAҗN4E\4-8Y*<>WF[ ûIA-fjEttՁ_Q` 4]s,rB->Ҳ*Gnۑ_^5˞ U6;I -+h}pYk+D9/AUH ]8XfרҞ\|-rzm#̓_Kn@y$ߘ% @D5&qQ!IH>*ۖ]&O)Ŋt KBc1ӟ\⩲g;?}>4`W瞿2Dex!C/-]1w#uA? " N œft)6l /bŰ1S[{STZid ه`q۱%ђD.Pd(#sX Ӣ$8զ@[Tޟi)^q״5LUrʵ2%^"aWTt@oaQ 1b=lϵhe sS^pŒ 7nP(^An~H ti6`\SQLˍ T`s2!~xYx*\<_qŨڑ1d%0<-=5H 7? 1˺gMn3Dk.(?/ 'r4KFi%A ^tVJ] #dGKOC"Kp ;c3 ӭMpe!>8Qq7V45|~Zރ' Ŋ4UHbv˄PI*Ŕ?@`H%PsFIP8C2W#ɖA#_䅄H7af<\:UL5tkE "7zK0[Tsi2`;!4#@şin:;p̓(&un$彂A"ۤUH*i9I&*1 , ^1RƟ%u7D ~eSߐa[p"{ VE rO 8Q,0pدhł%28m$,Doq<=S!{j@B8A+L^Tm8 NOrNxfzXoxaQ[VɟUx{՞t ѭBL;XbEXe;Ϛu_ HOȣ{bUX 5㶊f'``[xFL{ܟ Zf"0@ˎqVnnIctK78K.s ?18:B* EEb=paB3[` lgL./&'A3s PzK9;5AY}x7foZHQk_,l={Nzw5)2g}*02bT]KLctk(sL395 {딩Md$pG{ud/Ɇ**&V׸Yɴ@?pMfm_)c=DNV㷡97U<ɦٱ@j?m%ߵșZ~ʲ[:A2#͋߅"5ZzXf<4Q\s%tN 0t56WŽKr ay@-i$;]]>820en2loƻ WH)NX;DhaSPXl氟S5p _V@3;CB9·ý]j% dmI 3;ܸUR /\m@l[TF:e˱7$s'vQnE/=_02,Def=΢z#hGDY2i4_n Haf N/5.dAa00NLhG2g KeO[ _ܲ V3-c>3~ڜS>Om|&RwnmoE qS:{Q~U@ hyc)@nIysGlk>hi Fwv1rM4wlsp %#^$.Cܩm'W\JrЂ &ޠ\JGnҽ|JY?Y#]fDzh)x+&̽WcL" IuJDQLveቌ8ŝG%O腻B39d I'վ,NI>Y)' )o'e&zFրE[@QT c6B܍9Gia*1ٖDX&3 ^Lorפ9]+0r"_B' e,X`@9L7mqرNQK˂˄E}ҥOfش 궖&G70DBZK9j⫳öag`: b"h\RIU*ٛ'ށ^(rt# Wnͪ M()u,e8a"|0X)׆va*֦ 8C{iㄠ< ID] OC y1Ƹ?S e7$^"X[CK`}sȏ]Uz:"5-,G/6.d }"2( Dd6wP l7H9ۃQr6tP N<\= u4;exeJ+9ؓXUveӌ|Dndeo$,eeax%/ަ=ZƬrU  hxsYZQzF-HҀ@ewtnڝ B>czGgnYFr xoZ,K?bLK|8Q!m zqI~ glzM!C!j:RyFN?.NH5M,=}6<*RV|C!vn\clM4 c[Vۄ^I"<"OgNA8 Bpq.9L0<_"̏!r7G =?BuT(fqw*H'$詤( P5Xp1x"Hy{T~j xO|*-[)i@T1K5Κj8 &7~E/6ֆJ:z[!7 P[ygY(MS2d/m-qExi(Q!{ ZFV5o]wC\ {ߦs}ùT?;kc액}[/t+"%޳xhG:~<D<*hLC %q5xe&53w]jY^v5,(N(5ͥ[4 : uI./^%g 0߫z] B5[[l4TN)2V2Ǹ#!]P> {a=[?>SFaB*|&=zHy ϶Vw[k `MJiBpq^dX¡CNOg "M|,Ep6 >+쾭q Qd%58Ao wŘshqCR1V5"pCjkDEÕ.ldSgnQ]yhDyl%wK~)(׈~QT'5avkܔ 09 gh<4i3P:IK60|3KlDG.9dw'6y'U#S#吝 BUN)dd9B1RJoh$AB=X+YﶼP9^1+0ِgIմ*v.4n?,7H.I hPE,]@DYƠ4?xCfw 343'Ofkr^QRs vqjJK=ق =1,4lK4BƾhNTyt/ePZ_SkK5*&l-5G: H2e#%x3Ka/?KBiI^yD;?~?,Qc@ޛM2Ud>4 ,n *IQq0+C+Ŭ"t9?yBQUQM`x*K ]7iDec<63#e VIy}Vgr*T|0aԹPYZU,N5rц!;Cu8~hӹG<ǁ3{OZ#6ȲmE[g"N͑V(J*3I 0N6Xd:xm^hȤrr#G i6{( QQ &&sKŒ"Po\Rk6OR57UW7vWD0̷a;JJFkΐŘ0GcYХ3a[h1Z>VOلw'V_RsnRVom}<SE4d#ZO)2yx? on1j򭛎2ՁSq=;.PR3IPI0E$Ip s,wqi#z(+|NUݤ)SjB`ESHZ5" J ʅa~Ԥ|'PjVıRs̃TKT!L8ܩrJR {2ibvgbi$Ͼ[A?WB^#(ܕYfY 84Jx n-C30EmqS%BGdEѾ"rO Mcvۥ9Zo/*?j՝&!jy rM i<}pf;>}/bNc@9r!Ư1z$N6_Ap* ާ`5n )\KLr)KE5es^=xnVJ=C+g$${a_΅)qgY^ԞM#i :oÜh5Ú9rih:3irepkNL5`xj(V)J.c.r+74Gѵ:g:swd:KHWjg3R[,}`~^HcZz g<&3+Iit ]ӎ$.I![ Abrt-͹[;Ncd}RO_[/i O:%,߳@E(k @6ѕW*HgQHKM= SӼ [i7O$X\pwϭ/MzxQ#?424Lс[" 8÷w@/ӫ w'@pL*wʣW{b) mCOӑyσg,:ǵ%>`ܮgUAOq5ofyIvתtH%vsڀ;ҡ6D:U|.#k:;׹pT%vh*(`n`WkD:e<եGJUZ< 1ܴ.761Do]̏iYcGfշ=y*[9G0\#%|^utSRip(]pN{C\MHrQw dXVV|gYoyQFJUUPRxj{d`toLQDZ^ZWCG1"x lIڳ3nEI"ܭU=#+>Q*dtd}0Yfy@{˵mTػgbZ5}SlX1e4$-N}DS7GR !6ҰW;nrD~-ȈܥMlS~db,J;(#z^Th'g7}>^t SMܱ ސ=̐L^% vefaFފ}8?|(_8iFiG1}K_NzTsǝ +Ў@U[ 5K-KiʙT0< `3sCs-TK.Njdy4ؠ327Ԭw>̥N7oӨgQ"5Y#Qv28SoY&6M:<2Kv:œyiiϢ r&>m__lr !T44泞ZGDI1`Xz.5pRk/')udmʠ*ya-7̅X:+`_a!z8 n72}"qQ_to8NGgf}~q@u[丮f7"f+5:P|{!uH+6LNhYd\!:[$޼+]G TIftwQ"_Eh B0v,y6^,_eLcFfuc</3cu' X'O[XN81<~8U36 qzgz3w;tM;Bӎ3AlhBX%l\4{CRi|m[X-0ĕADd;^qhZx88HI.;,zIG6~~nhS{sKy; wAhv'LK[z Ɓdp4A^16T{a^n Ղ9.{e&u;&VX^CL$fIg(܆x阗5¥'g;#rЮH$#`.օt{?"Aq;g#w8( 3ȁ .)kq$ ]p>h" v|@#_ Sw?j uZ`$̽Z u C/$DcÚZͨrs:վKJ$B}Dɡ~l3"~S6+/הhDXf׶QRz5 y\>SSXw"G 5 ,#̰$F1u=b[ܜ`(]n1x#s,rDa>U1m-J$2UwI^J!)Ax`a9#nxi U4́E'ƇvyAG6.Youlv,>a 1M[7^ }Hv?s.ŋu/xZe}ؘNJ^"h[B(Y'@^\;jΑقcwζVv]>Y6}^T,h&tSgө"Z.z toWtKذ~>.BՈl6a;>!X{&}~\Kl1[6/9y,G60«܎O/ .hHiٸHCK|QojޠȢv Ao ïNnP{~g-7LypӲ(|= ):Gy ':WU3V<))T 6IfJ) t vS?gf. fa=[\3Sq7WK M}nN/ÓSyz_zK!"*ۯ1I+pޚ~iv > (==R!M0={͉n=Ax.?fy|O`Sj6|b 丌Ȃ7ifуP|*olweR M&.&|B QMłJPp-?G-$~#n՝ԯHbD_mTc<YEkQks@/[ڹ&?158H}$񔳖+;!嘚uSa[ƙ)#9& i sOyT)CDAo Ya۫VjUAGu+f/Ҩ_:RXPkSii)) 7>ʨvאW f,U7fs%l;dYO Evz:"V4ʸG;U5 .=렏5j]+sf% Osuy+wHny_ٌV?RYY3-Cs07gc+~xssZpatr@&b*s{+ L G_X\U %x~4_%(4o4MаR<@&R?GVII>hu/'.f28lI'Zcn_6WeBmtx bS=UQ$钷@HJ@GYYPhUb\toxY߈-Bfolm=rb%J$o-:HOuC:qT~\StQGы ~ [t(T\rUԪ L }j%!0p,gA4lEe;U*Tz 3 ab):'Y׻PB+uo6mFhʸE ᵕ M{4*ju>ƙ{*bx ) OExs 47T0DeZG.ƸE2R'ѫyA c{.k,f30ԁ[`6̼\b#H&)9G*k&&} I+áGROM$J@Rs <(B闊9b_ ҉b/ol9mlk7fmeqh; ǒ~y-VnIagmT~8sY=u,s*hng-3hKarbN35mrT#kTձDWfT&Orմ!:7Iw\s7Sq"-l~$ ^NDKe!s'QOhj uJ 0y/Bœg*wwZDd qqO 07-J0g/1uNrcYz",<֭ȓʰ9~X7)T5p&6t+HgpCQ|: QVESc IZ6'-Hx&1|}?aeUlfHD8~t /)61 `>`RwPU.4c7W8y {s ]ڰ5}n5608E1lxu&V*7zl\+E]~$'M:vGр8987gR<⵽tBˍ4ʗUO+QZS}7=GbxmQ%Znu `[& #j<( XxRu-XY7`59쯮pˋx#2%e?a#HAψA^X P^U4 %si EJ5ƴb|z6;SƋpr*-HЀ:nGF+zgp”kK~r QX~';Wf 2C7N]jxF>Z+v'sEkn˚lbΙ27brY#-{GS}L(V͝3 Qč P>f6vB-{C%7U1'?\/Zmq)]`>891z6?SiURfQR2(* kG ÂuRȰv)^'O(Pb 8`}t-9W ؕt:;L(ޝj 29҉t\Lڀ^w<9 R1G&1$ 雸ĊS%$h{- eNk}:ZWвP*ƺPNh)1̯.&MKnq[*`3`wx'ψ^ ڱhƇkSHm-A)JLZ7vu~aU\ѓ`@2݆N]niXXvTB:MWˏIZ߱'\j>c Lus:OI=3͙ɒYqԮ[?ۏmw}!>\?`b +zdOSk<<KKЁ"7a<_#CT *@sAncJ]_ުJ qAbšO^Ja?URt6Eׇ!Cf0D>|3wƟ&f{ymKA9ZI"kˇ^Ue8,RĻ2_ڷOޘ}ڪqk!0ybYK0Ł 2cY,N/p&(0w1^L(XnU{x%ZB4qJ;mgCfzP2c Zm̩>53 I0K. G%&:by9le9K%LS4_Xݗ&)['Ö#NVPF  TXa37_w3MZ MT?%5sK(/]&v#Y'<[D bNx;y86i)YF!wue}z/r) 'x5F 8%.1 XqQ*&6BNxrD[h^ckҒnX>#g4f%tBU+6J~xn"]lj? ܠ[#Qap֚X}^@NtiqZE'E'Ow쮴؇碝=7:| "Q0iiY^.Ƴz7b*M|jIW(PK G,K ҴUz0anKddh2DI+. MT~Дoʮ?Tɮc4)X$#V0V2Y0c{<.UMnv>`YNKQO|D¢gXpU-[X0ష*3)ٵkcs!O}Yot& 3zy_S芟I|@J驺4 eU2~d(!:|}u u_r_KF\qvV8O0…6!shX=23u1Y?<.~z'r0Oh\.QϪ&t<@u'7㩥 SLEݶC($"*d/JTkX bZq0 >UtL7*_ڒ\g1fB#EB'R0]Hzєo>?ciQ{+ǵY딛mޯ ^ ydb<_F{'_#ggL!Cl&n "KcNI_xlVhdbF^u|Y]?5J,?@e: EkH wvƖ81D1PȬ»4Sux2~uJhW%goV~.`J;8PBw3tI{R`IxP,d@~3Ҟ!/۳$z *>CYۜǂnei09[f/2isEXՍIqꥮ[hՈ!f%` Ho2ڱ- #dQ1Qiv!f=zx6Tl|#!Pb'ePWp/o@?HՖ4HoW hS§(o% ҵkSΫo,;7hZQ*x؛Zή@t277a1OG19ETl8 dÐҚ Gٶ_ʵ]yRH?(,DʾNJn8E zzmH,bh` }AW ?N>n>$er ŭ dwTdǐqWS"., e?~ſL Yya.ٲ+'3B}kavF5QKAd1c*^zyptU\ pG~_,DlO z`eh\;W2GzC{[uQ]X݇T5rkI}eSIæ{kS@{M VCۮs!) ^O*QLv;g|N,o9Z_v u: A_ly;}C+neuz~}-Pu?> fn@lKk yj.g/'@(=x9YL?&^R@Y\D2nM tfل-RpC7+3EmSH$\QBiڮ\-pnpc/- ]-rj[yNoO ,jY ڴط|ϲau~%KEâ_\KdPg!E&UVv:$̮堍Tx(֢b#e!љRȤըCGJ+5yܘGn@c_ c,"v)V$5eeB8jrKjSPc/A[0bz Cb>+ܭogeī[tJ*wVN&|>iENWʼ" NV*o̪FO󠐜r_D}0l8l7S4n?8i0є6e]  \MF^ж≟4G!aB͌_Dtq+$%&t`T }*̩m6${K g[3G˜^K;SsH,3U5SXY-(/U?##z< ʘ !q4x:PeOW2R:̞1OcȉA=,flaQQ@Xɫ߂Y(Ǫ>>zH8v{aPH%O~'&nS X.t$ZI'MjCYO,t2j.r|( 0q\e1ON:T7]OcΰDL(^:,ݟ=C3ulS*RnA2iZ6vV dG "bC`lb$2k{s(k09ϤpjxBWx3xfK@M9eeHb9Se"43Gc),Q (=mA,u/ w(]QQ;PG -~?gvb97 ߈D^q0p{N~(hkta|*U pjpvػRh;d  -yd:$F:VS'0q^K}PД?9~J'MÚο<7%{RюPaW/6ί niу)F@D`]0*k"N2xp! m-iˆY!U'3! ["9ejdӘe?}1Ih4`8z` D-+gbg5q]7 7`<|J=5]ȩH~T%|oP{0 =]vg3է(9gDžj!<՜@4й! P&tM YP ]ܪD;HCb/| X2VoFQ~AqEV9 bF ":L8D7Dn#Mo(! M~&R<6X]Eeq;y{e>5̏aooDF AW\P1u7ErUWPTa븼wf{$mU OmEpkɏnĩڇ] @ `έ>#7s+ZSbwհA;w3B6=y@E;܃x!j~RXmd;IzXp(  f@tYrC@k<6MYrCYZaLi&xPڵ@NI&Rn(&L 'YՐ\ć5dAr4'"}%3WPҹH"胢S TO'lV1Ikgc{CEuE4.dZ+:kըDAyG؊D{vw@LɊ_2DyEG- [t]k~Pےohk4p")./f!g.[ ݵB$'ǝ@DθZɠ2=𥿔b^8Í}972GOZHMES&?d1/Hxl!~}kr2rOyZD=R!HЎi:'e 1tQ?ws큘FnuJ`b6GxY{CR j'URڛ@EIJi\㑧.r )`O$bb(luN_`ERȪ [+Yy'Td8VcRe=4An-feٹLbBB/>_6Vɦ]f5}w̏NDCc9B~[E3HQq8XOL[#d!)` f>PlWK'yM9& 8 dU?&00])a{΅ *W7q 3F7@" .N^-/d.yWʼn!t<(&WxZb)I9+ -ȉNȱNً [O+C> ʹn?0u~xIK9s4?-.PuI$)nqP޿rv mft};]?ՙ ZwM``◲, Xawfˏ;8 :&iN4m.PER< aN/H{΢ jH<~7a =ܙm·a\SמU%Lǩ鶲׮b#iDZL/F5HL1wvc0P5ia3ҾS8aH%LbLL$睙py OXC=*ȃ&v%z,>jn_af} Ypn@☖2"*s涚p-I'.4~4r̒  '&Xo"V$nK'}$ ^'2nW$ EAPۣJ `im# [לv*݁HRU!J5q>"%E!dgL^I/,uNX8>XO&MMbIF'D \lir=u$'_ct=}3gAwp QyWls!ʁOh\,ߞ1̓~M*]ߝGq ?n$%='t|30$ XX>d X"GD9sRV;Xhl}b BB)I8ȩHQ'E5#,ۂIcM(psQwZƞHBȊOy)"ym?ʍ1d}ijx'@E J@rc '8v) Cs,<SQ ~)o44km#P]w HWx[- ?zc7. Y_`Z)Rv ~1ࢨ'5,<;'WsAj\f}.T_L^}f}|Lw;0yVΕN@$97g 6  Aߙe Wd$eE ~kdQ ưFNDwnz)!z7z]5}.WFWVݾ4kVÝE07  kt+lg9 ,a":^<~\$\y# a7ׄUnuZq# U ?Js6+ewf`o&6J4ᐃ^@ թ^wqN)E I^rֆ(v^E4W?ݿ)ANNaN=6w*e99Pm˖0y4wow?KPle l ]2w {gpJ|I B;|*L+g#[4|QiQtEi,nE{~aCECgg# "KvkL5=,EFٮr=1٪`6gfHuQF>'IHNBJD.dm\Kr9)2sgLn՚'@GU _)$@@ܪC쮐]*ܷ˵aw.0X ;1@UACZ1&qWdϮ6!g4**sC~0#6Υ-m}tKR8tL3XzΛ'!sPi|@O`7 ${5!I,]~eO7&<( w)xg~9xDi(fh5~b7Svx4i ;YgM}"Yi$~% JL N%᫶+ْ*&ͧ+d{Ekh |dTr+[׮aPT3!9k$fp1@[ cߦ[ :Ӎ/MN*R-͈/\YccoHTtw]VGyTӏxx9SrW 9vK!"I(<@%-A6܋I> _5*B6\gzz,0*9?|ۖS|"1<ѻ`n[b=ݑ| pol잆J8|]WMgm 勗 /+@!a9M*v?cڵ"AD8~"`Ad0tAIwnly@;Ue}qoR}P|&dж 9)Ku޺[BI5V:DTƿ|`+Xm(ep*Q|58*[,-zv~KX4^$W&tu&B_RS>RئVRQ\P<9eKkjT$-]Ghe\z(y8ov!a×U`]yrcأhr%59QSjoDtp1}y;C|ŊhYƻ)0(k^im$f)(]Dx'>$%  ^]1a7uVZf0`8ۊT.n?$&h VO;/a 2(#q_mNHSNW70p@n08RNlxu,w!1H^{>+fٳ.g!F.651̴-6͋nvφP OeD}3;aeMH#CM2A %[`F1p":ש-;hd ( pk )Wdv~ޝ_rg0?cl(=1ZMN@9->/BIِ^. W(P#"7 ‘< PCHRRo\`d&X?zMOH˓&pobJp* Wz%u^!ncj^sC븅2XRC|M,n9JsST*H-0s`eGU|h8itm GEǎnک'].vswMFdW8P "K|[4&G-aAvվap;o?j2ՙNIϪ/cUQ -0H]O:2i{ 6Y`.Ta6O6~zӌkx0膼{^ڞtܺ1 1CzىҜ7֌S4?*9oo/R!ʲPKT"vMWmrAVWiĂP:>\6?$6AJ+H]kR ASd8yɒXrbTh;C#{a|VuT R`lAיê%}JKz?UH =[p@N砒Vz['QQWT'-Ԃ0Ӭ6}?Db *Ì9˞n)i G7J&ez"x`ek=^d5:ܱt! DUM\ה'}ώ*Ʈ?j4J|C0`#UxfQbVśh`sBmMH/vд&g`xJ]JbED:3ְw$-3\i%EH'֟=g#O+tZG|ؗwO4c2{ǣ$T&E>U)NSa\Np@39.3+dB{by:`!myc&tU .ޟ1R=;Z⤋u@aqmqfdGT/'8pqlou T3'"7Jo"7E d"3Y% J:ULa+Jg)c<֠q"*مKm k I ߎtsĄ(~'lrh \7T,5LmE ^Dgkbu1uUw/ (4%w9A+ֳȿU}LB{!X s{5,͋>sCj'jI\SLPH*IMd=3誝&3JH/5lkn /\#'Q;~;TJaҕy.(QXA +# CDq҉nH_vGܵ5 ECR3..tzwmFi \Wf)%dstdE3Ɋ|%Bm?)#2ڽU?c"l-er~THD>/<f]+Q۬~v`OWd:K#$ vm[%(ln*u%9 S`VZ` /[_BEM=K cD Y׬HGQ^Կ^߲:ͣf}&Q:Cx 8`w;ⱵX[ ':r0i7RA}bje9Q&#S7xXZyc .օN\zY(&ȺfJ*3Ulxޘ"hWe5ooz`dRvti̱ۧ󍥔;i'\zBWo1kʹRBN`r*(}+6Y/;@omi{ft\zR6qن hU&`4WW>SAZD j&1,H?b. Y~ ³Q򿣞֚K|(s7T IWZݪた4wsMZNdx("YX4Xb6e^|&R8G.c)$ DUYnxQ)9&"UɈu|=1vJr2E'Uыh*mn SVU3jf#GIiȔ^b;@K9e2C|}AJ6'ͨi%H*M2B)6ѾƷ$q˼RW`Aлh6FZ\N;2=9̠ND!zf{+1J*2 J^~*&e@J5qFǸ8"X_}?!g^]ԁNZF >0gz5ӇE{NIɇ*u͕n+U MG&/(t~ŭRR-Ze\oj(PCG+!ORL51csGrD 7N = |GaJ=Ƿ0z `2J^3%~B穝6|cy'.oϼx!諩$_ov3$컙Kn~+6GmI:wbXXO:@[w7eW^UVDS k:zά#ǷVřH[4RorP'" 0?E4؇erVz6~UD!_}Lg ]08N- uJ " 8ݨ|apǑsE+Syc-d1,60g"ɋ":H..٫AhԈة :.>Ճ_x',7}>P:ҮIZ:&m34KmYN>~?6.vqѲOOLJH3Ï<]O|b!Q,^}QxPW\,)LlAxΤ?7x+([ UK ӰXNl e>^/zWSDaO{ׯ? N[ tSXڱ7}vdZ(~22L55_-‡bqga إtHm,NgF%;;ena 1EWqIb76xZ)K}]P2`qz`s_xz9ЀRh1s-3[ֈ DT glCW|\{%LA'{ 诬o;Q* jO=1Jwh~nm:^:5zcTP^+ȭEEt"Ek^,{E^/S\tO̤)i͜ YСq S@_i)Lj_Dl/9U"S#_QHvElNj)jۃ.ub8$U? i>Es NMk|m1j\ݸRMnǭ80, { m{x\5ǫC@.TVbGH M8NIWkR ޴^s(Fה|PѯDZN@ ?(@4XhSD}ÀV'+(akjaTb`2p\8DwWRJZe8UkUɧƫh ЖWçs]5tޤw@Ds93?GY쩏`*E.X ]75zDz"'Y7#z<"UCr 9?esALrH`'7ysDXLXhPyo֔1|0B}joPqEFh/\/&/BjL _hlަ)"rՉ0^PDm+eJ!8`C" jKlفMH>yo3>=Hg0e]grqd_K4YT7bdȆ!|/BX:-v_rl@1V._w3q^[b9?6^ȡˇŲG2d6Q nt 3辈C&Z9 '@?*Fk )H`8?[wf{z)&Mq&5]sU$U jLq9hh6~+2*$G&ˁCr#_֪ P"b"vI7n:> | ,p>_ibːRFt7;')lOydSxJ9;0at}% >:8΁'d7BI㰙NkъjRf,ƫޓSz-eP=.fՌM޸~k<xE8bdVtJN&dkDiWHFË}O5%j&u)Dݷg\hph cX"VxbO}~EC)0Vh_Bd;I_ox% *n6K箲aypH+"@ ( ,\)vA>F2az[_% ~@5̴M:#')#' 7ꦪ6]FÃ/`65ꭌOFRS[ Cľ' kN+ne9;1m~GwG*)nڿzDs(e]@ac6-t~^,5H?wX20ʇTsU JbYEq|z}Wg =U1;I ͹ 3Eutpr|Y}D ^\0U΅?۱0"#f*gmz@VE+EB]湪DFQ0ś"q\|{=Yc T.37p`|1ޅPU &X-/u& /1%vW/Mͭ4VB͈_r[W>9O^” ͺ~Ϊ_'{|@dgHFޢ` &xHc^?Ma@Ha&D}(hHB/xnSSP5Un}ސHz#u6 5ag8ڟ(S/'J1@=V?Pf,7G:qsF9E`'()>|B?xN/l~9Ӑ@WExzG=;90. xLI~t{X/b@J*X.˧Gd4+<|689j^i#2 p"י:IfViB<ui9a$q($ 7 ګ-"r|C`-Fz7WKm52ókvm6j!$ɫ;\ᶛ upQ(L5m@O;~@GyhnTmI UTO{&íϏ>P|aK:SW>C; t4,FNuxdbx7@".²=?3{.'rkMxv)V5B4OTpp'Tps w3xc_&DfE"+f{N)Sg)Oj}?x89\.^^VvӷO d2(x}Rm[%M8.y+g:ƽ Ѯ'҃`aU ;d! ǧoܷ߰I}DDע+hJ6lPp̜Y@2298*eCFh\MV"D~?ZP)ܞ,3ճ!k2~ tr6hf֘2|Ěa'G˟7-EG a%ryMU_*n|]ߩip*jjn43~5:0G doDzby/e%J.ZǾѹ 7|d{%j:N\>7Pu Op"e(|XC2[R98(=X;~Nj,{jvV<)k1Z۔kv!/)cSiRKٰBQ]WI9Ɛ18{yߵQ\)+3P6X\ &&ȽFgE'vߦ.\uwa.߮x =9y)0j)-68l!2$;Eܽfc~O G]$avq3]uyVҞiɤt'^z5Q~YjJb q,´ہ8=7LIt,JzNp%XqG %ӗV]fVjnTf ?jtͪ}<釸< 60}ҙѺ҉[t/ nOy&D@!4\wR($6Y :; ߴVuMگbb6RQd)'2ETŸʮ}S%ȃ^@QBouUv&+@YX? d^I FlCJ?G&mm.^V!C5/kijj~v4=^'*. YI`kBx9 )2ѿ>7251,Py%=cҬ&bk k8‰&&Wl&f~%^h;"e,<%p^I8OnOcsˤtX$mqOڬX5BS-|g ͣ_dO<1pfD4f ߫)rtyX֨(m ZC9EaL @̓M[̞GYյĜRƤhχ϶F!~8ph"$GYP؈'cSZ.Dtժ[.ӇӉbԡIJTń\,bV`w@],OVeo7(QO5h`! _dJ}` xfGA~[#]pqwȀv ,ٮܴw; #% &&FȀڛqmV͞vl"O:&/wGZ^bC過Ake>i t<$05qP@ܿеTfYm7I_ف"@r eeϪ;f(MigEhI?gXͳ1=MqU_U(trfM%ݰk)C%]S0\/D̾[a@FAD~!oU Q \i-Z(E,ɔg>%e,Hi8[o'=᮸Ps[1t;󣦛?lѩ3ܭ9O vߘ**c z}h|?2,CJm2}{}t!-^Bcޑ9_C.$oJIELPV :fXZek2.B.RNā!!H"-4l1Zz7/s\Dq-1ۛfhLx; Zxlz;({\<L6\VkL 9/͙x kLYeGѩJˎ*iLn6ce:ӯKkѕU`׾xj&2n ;?ǃb2?"w9Xi\)8L(twٟDLT@ ER1t-u:f_$MuoMIN1p]߷op):,WD?ϢRBRzchHTD'TAS8 6ݷ9}Ps3AHpୌis&HB+"-6B"2^x/QDp;OF_Lp6> Zݧm]_C3\rX ʶuqў' #$-$~{MO,ewl'IQ`U-VͪCHS E߀07IF+*}e U_&ܴD IgPB vaGA_i-5$Gy76? ^MF\4q _Oj38b))faR=dLUV GP~ФAV~aK.UC=KWc\ozGE9r0 ^k.d.}`֞$NUZ]jKqn3aM? M۲ f&پS%%~ {I+=0Z4?:R.Ru_ fav.t*\T5N7xDq ],x)4Y?Э$A=s:LDujRfȉEByH}~;`0檆(_%M=Y"咹Y[BA,~Ϲe=e׻.Xm~/4)=8Wnam &86kʻ+0sK<(lxnJV(fYʷ67`Ly\]D [IbsX4=ViV:OD͎FlXtpsŲK!IU9UgƓ~c$N~EhiDs p 9g} {oh$RL*'"Lrv"Ǩk !MJ@ֽӑ_H$rM3`p/dfYәߖSR~qcWi+a > {vLO$ju_{ *& ɬ"'dbV;^-mFU.2Z|"醏z$9V{C7?CUlWR> n)=|Vl4RrSGGu : Y3_sl&,Ao'f{:_tpi +R2r.Ync*ĥD:\MO̳XJlI:} Zd5,U  tKtm/1+Wuڵ.eZ9mM:.& d;ij MKq"'` 69F],mY#!+~ن+bwxm3 n c'^(yh;3U|AOZ R~⣸xcRb@%~ҐÊ,FUMMe<R^v.'$|M*Cł:Sm#YF2F}B:tu`E;QIJw>r{ESߓ2rVg/S٬:늖 uU+s:$C6P=v)F&tyBٷLܚ |Jڄe#%o  X6?@N:UG"Qnjlfb#s9-L'iD~ +:]k@}>^ؤ) 5OÍ/VH( ͼ0|+nd}EzOc`3I#MֵUhN+$GJ1d a{pܚL|u%^S{(5}ϙ~_҉3Ϸ(N4>u!;$)!7jCIN%jsu:Y> ZPXFew94\:-";ޗ$nEg18Cvz Qhy\7%];brx5fo XPK*񶼙ґ{3X HNeuE,up}CEU5h;2.1_l=+AFo)@F-Hc޴;QZ>M $Qn6hTlJ cכڤV3b }s 2VHxD_1vL) )):]8*Rs2bX/*cȽVgp*Ud!52ksD{?4mڽGǏ'B:Y_V3&3pn5c&pn00vi:kyI4Rv躿mS%U\T xS 0!02E]-h3*n,(m۸i^ {-a0Lit11j D")d|Q+]ax<Rkl7匎4݇[c]ݑ&kFM R80,?s12"@'o1@֌lkovR͛=~zyL, < :ɞKD;v <ެJFD3alߝPǥ-]Ơ##էXN|וCo{ʎo<m+?{}n[fr`r2as6p2-ѩDB_uHq;IJo͘&tu@KZe6?U lo>Aoe{/եNn=ɻ}JYeҁ~el!vo5@iQbU=A}H+)muv*o uLؿ]üEHk\"(>=HI>C|]oҦrI(ײ3hxRH3βfb]LIe߱9K*4Zy֖v.^ ȟA|ZeΜ[a^!vgr=Fh;iyF!{v+8L_ؘJ2x9X[pDjCzBA?Ve|̲+VvO FV̹MD5QJ=xN=Ӭ & F!T8Vo Ol,Ԟꄏ[$՗46hl i:@.ϫjo/]Еxb.Zq~^bmjy9sѡ/t>JOGƒHVVlaF .^њ# F@,7.NDr<Agbܾ=m#|0܇[`eYøYP׺ 6匣}I~Z8 |/w[ߋuFϙN~F=5"2-ZtmJ/mcͿ-)(7Ged kOr*lstE*~$%`۹䷦-6lCq-j 5]^SU9 ;t_1\%W缔K_2!s^0Z 9Lc}Tv}D՟f!F(+uVxL:zU[ XԕU.08*&~_Uت~Zfcq&6E!& %7z8XPML)A mKA} kA]c:78>;oʭ11Xhm>m'Qe&#VPZ.W8A#2 [t=R`>YgN>X  k-PhK<շQ'.U,> eG$"^&ٔq"of Ɏbc|uńqB\mNDw34w?k5}5 #VD{N}߃<Ǘgހ.j޺EcEǻ0u=Y9MhowQ틏3.ISjE$JѷG S), loudS4뉡E7ҏ:rS2m||2BfYj!B3KooBpA "蹣u}^<8gAL8\`F-IwBZ\=x& MF0Y:|hbMWa:Iŗ#M[\oŮn4%ZP X$K|SVC`ޯ3A&NE s4sPlF_j.?ːoV) @ k}).j> =ChS=»j,qU?EA8T6\>Nόu$Q?I}PYE~S >$H ZXz9~sXT Y(U(i3'#\Ə1d$Yro+OmpS[*%pg]90̥!hN%e1Vv{ 5w0QX,.$'BmjE3¸t_)5Kem]U֔!d D̯uTb$[O'%nr~4?!ol}\.RTm6*ǒݗy ffD\uVY0__ 7jζ$wM6OK:OtպYiSjHe2'a}}I(ԃ۲k!ҏ)w};o{(:?U5%F阩gS|fc,t|Kgu6nA yl#nd;p~,׼᧹`Wq:9S4RevNp)+9%9v֤Pg5K ᴽy (mζ-V/aSSъS'YI*/K޷&XEA[E[)~N*89>mU ~4VJrXR$_M#Pt)ti uHѶ5i&9v.$?9Ƥ Zh O' 9}!tݶ"OL}:J,ORJTP fLm\~{q>^5' 'ygjdM R,Q!γ]P/R1򪍭{/ҫtl_(W͸HNI=L~/(RtPtϿ !3 !zijRWXa.b]syX ֆF'7WLws"e451m}V'=`b6~~΢qGІbK0kCLZFs~Sj%cƄQ%+9#9]ǮPHaFr}jNd7GN nPrޚܦ_s58Χ]܎cY)!}{5QJ֊xZ"bꒋ9ǯ  гqlDA2a v& 1E:;n [w9 p\YZ4'e|=&Q+z-L$l_gIGaC2N# T&T[=-$xzs _f$^7alB(c߈ux9FFsdo.R?Zz}+fIZq05F/4|?a0eݸ >3ˎ-qݟ KOn@E {߸Q7f 3-tC"yYcO.Usc&̤ӛ ķH!nv֘l6{kd.#ij 7K:Eh.oGw})h`3mOKa3K,,:YFzG1?Ù7X˸OdmbU5:< 0VR¼z`Nᔷ"wg'B2 {Tyرd)5 X{ 0G}R#_G%t1}8>]6ܟdGZvÆtm&mWdGD8(֏^#Y-lYV(%uABoQ3ݰW21E*#yA;App`,jm{[x2 2.KmfU5nicK 7g\@[G*.ɹ]YC!7JH.K9gPVB M9eYh|Dh'O\RlJ8OsXbB(@u3!`T/ xKm\s;nw%V˲/EA='4tO{&3 F }5ϴ+Y5mT[/lV{b-9)/J8P`ee@(CIїe{vl>NOKALG6U+^9Hw$[n~iB@;-00w1ǧQW0c~?8 Ν ׍U1%3wNz)@ݬԠ~&^&QY |k9EGO ʆ%^7 0m?k{Dw-5OFNlX4ՍDGb).%@wI >Zv˃ehYHwbU8(ð-q8sbəh[93|ٚSHkb3'Pi=odĩr+PC%ㆸ%JQû.B7QQGE- F֥%)=aO}[@dy繹օpӺשk]~<^zS)uE5d- Śḇ~AjT Α*A%SP[Ǣ̫)8Sb8 4Y@6(ZDo "-*w55_Hʢٓ$&`>0q!%gIv!x<0MYvWVm Gbo8AG٩%xhduP:iox "#'\ODž _Gi ~ l9. jdJct,oA!IX~3 X)8cs8%+y7JIL{ fc,ظ}Ml)*{dҢjp_eEbsg8fUuCoÊ/_aiVdJLݳ߿_Bk#OU2Nܑ``dvie-:wne+0/r|M1YvX}^t`ZꜴ~H)DGNGVVTv "*G1'S7א=}8{qK'1vcsN 6wcDiK/ǃψ=:8.g[' 'X` - 81˘G  gxܼUGY@l@FCwɀ!ޱ I-x$а[+."5Ÿ2t߰>(ޘ$[iПVzbDJv-&b3&IYiŮj'_%ȉ f$BCϫ ]IыHѾy\yoāث6ӷ.eD J Fjw5V-'s߮]~D$#{?o'gyWǠLQϯB @gVr\|$ߺm)YUnzOuIvYY\m͋x!5nKTOE3uХptvc`d~NP~ t;o ߅@A˔}4= RMv8Abg0̮0hTKw $b4@4s^'ĪmfC%ez{W 8ܧMpyaG|֒- )^ JV+9o~3W߬j9K8XJOFMd>(@Mh9T/!AqV\O߅ ۭhꆛ vc>Y./9S}k]sI{:p&O:u*z"x0bC ,ՠ UyİsJ.Ȫئ,(lHE$ %LxN_Yt4T:=a_6 ]1mc}N7N蛝iUN/*Ka%ABd4|7HݬDH&AW!8S2V7h:jG(zKNGZ|r>یyM:;܅ @, }H<`";5xYB1:g^TJtɾk+}Đm=??Y8F\v7wGcc3t(<>dBJ7q߭=3OlJ͹T3;1T&f.-]Ud?dB8 x? F뉷d_kHMZ|mwޛ l< ySx˔""A=%}v9ϽHR 17 f$mWǕbASꖍE9&~9r#Dovɼ-yFв I>pb0hjJqjN4BRܞVֱ8y\@֎W23:tFIJC_ձ[BT}s#g⽫z6γ2p>LE0iTx}ڈ1Gȉ;ۨ.9} PkF y)@JrgD/ $x{=9aUz}rAj'NH(*utʨ4޺Nw7SL/ė0p%JVDJVt6wt$=sdFw!WtyJr#-/Npǭ%խo B?o-ޛ.[ ( ~I->`̀i=zH#yAlj t/DEvȴ @O'qgNC~68ʎ̳mw .4C3ȧO;p&q=#(q)4sd >3kM6zN8Q |zMb=wuӠMS9}AZ7/tN\KJ+KCʛF12ld@KY+cީ*\lAQAJ) ͧS y@)T$`e ^Um@cb$2F vj[RTn:Px; 3 fYg,52A$$4&u;("ԴD$mq,p["*Jbc-lOw\Jf*z$>SkYK9tn>6WmzUn$_qZut ~T#Ecx"JScfEqyݬ8ngG c3jaNB"ߩd[8®٥H:‘N++ gcutY<`>FU/F+<3}&zmG.'0]mVR,t\CHc[#C5$X+ ;=mLcAgPr>74^V2QFPcoohD?g5fLL@!%!G'r><5҃,YjL|u#w")eQ Z{G^[ ZR(PBֳ؂lj%-@g0a8:?{Fn{ʳzv`|ܼj4;{c_r΀C?;^aeˡRɈ24 B,j?J/Z|%NV|.QnB'q uke@-cu5a"ZH;!:sazF\| 2ʋۋЀv&Nҵ#Ak c9ƊНhL䡙V2o%[Y"{ΛApteJC. H:wu nKnr bߐ90q~y%(ǃ;r3pz:ܴf{d:˱n$6 l@*Bh {KX\v64uEOsUQſ3q'/2ߊ R7+ۓ  'T۵%gF;a5dT%C`l݇[ZK5D&["Myjζ<}[fJ` n۬w:wF`YUǤU[q9r嵖h:v(<75P?ާ&nt}:ݬE' rѢ[A- (~6`X(,߮Qm ]'[DXl &ILSj .iGK߆@HfR@H^b @C&̜[̰a>RnpcYFlu{,ӖR"5> b}>Ϻ?u.((nS5nI w0(w;}M[mj٦ [IV8~qSeUR}n HG{}f/9*w݅'AM۵4҅}qg㯢Th 3Trv/-% 7]VY HZy˺Y(H}%1O#AI 9qHp09U1-TwF0`sy=HQ\ђlk%I=0}--S>jTiBC^Uf{Í1r,lx'>u`ʛNZ(U04OTDaHBFW!KRߨ!w Q/A١ܙqY32;mN,&Y`>XC'`y͇e,E]3tV6N;5䷕:@R)mh=Tҏmr(T1D:ΐKu3m$_eKh~(vAt~zq Sre( k|B~6wGdM;6t)4/hb菲򛝪a 3kpq?ACuD^;lDZ1O5Z x׶{I6>Ǡd:p Dx Kl6 f46Z7f[jUNC ]r".K"|=ֶ !rkwêi xhx^G0(7ؓJw"[Xns'@C2UPZ#|.%7|k[̔o # \K)Ilg>[qgouXPE4L8wեڜ[I}uCGdkc^w~otxjի(WLQN/#Y3BQ=<,t]VEO.h̺+s(>B !͂!DWۋ"n^dѿYkpα.Mr)cat8d4obBi?[@-tv3y2ڍ\pRx1m@¼{vs] 'b|M'$g㪞̧16m&gavF Kw8ap<*5 E'K8,,uD>|21Ss i4j0~qgjˆ˘]Mh;aNV6=zD;JC)s29L`so?dmoR׭7[b:Xduf?oDG\ɩlp*} -Y$8WlGҽA{bD '&dTgbi\2М͙;QأgK u"!svV;rPq>,1ܐG3Ѳ<[rl@50;!鲈'5Dbc):WH5$^R!i`w 5>޿rVU1y/>ȫvjsm{侰tQ9ߑUQ"'?j|uW#ˆ$\rqg#l_a)J=,fx'}`oĒC2ci q$*ToHϽf H fG|O!|+)jcv\{x֐)ds¢KZ0Pe Ssy(4 [BTbi-*\a9Xb ï\ש7 :y&|Zc"v(7TUሓ2[rj xȔ2;\j9lIYhbXP̓PxyeAhU%yLGR4af4d3[:=}9\Tֆ> Y>tRjJ(` 1@Z 9QIV_ |eWUSHYYo.6\몞pUHG [Q 5WԊm+V*}0S b^@Z`Ůe|!aV7o{!皠CAHn&V%WկN-i|Ya 肓A+ͼ-䍜݂rSNQeEABnc;:u%1M&'Yxɫk Ύ <~D>24Ռ=TVZ8^򮅕}-)Asޟ8k.&]:G}Mz{b|{nIA۵{cqd.P O)WeʠPyޘe'v!ȅvG``=5\L}%]L]pO ǔeّkA xjVHNu1l+lw&ks 3)pP).&w@a/t 6]Kli2PJgd,puE0_YwB[j`l8rݧ,LAdUI#@ GZ+7.=X/x[tQg5UǯU7ͤsu8uk5<D cxn@Jaeb]ֺ*AHH`QV9qܨD`Tpo녃 mnBj=1 NrxU.Hr880:t"̞h.խzSՍok.R!>,OVnxm0j X"AhL֨Ʃ“qE;}拶' ڒdno-eݾ? -M"%lE݆U>y- uHzC)Ui| Tv]mH=hhz&E'nӞ2R"J&cJAo`.-Ab_eXL$a zt}4j3X 1a |$ۂK>qMZg%9 w_g s՜|yB)BY/qNG̫i\qW/%֪E2[GHfFSk^PVsO1<~@OdnGkplI x 6bET vzzS[e(It^Tv^˧wd5S{/fń_\X8t l4q!.^w F39I>xjoȰ A pHRh 6'!)X?^mrx#Ɉ$Ȕ5PـKTS ,Ծ^Y)pFk1@tt+a?~8GZSe?+{Sl:v.tA_r uUi2&XMQdgp;Y_O6V6,?8tN{;7ԙ!ԗN&YN>R0Όq$j:{j6qt)4 mL4UW2v Tٙc+Pɬg_x8`6X !O'Zwy TZc0fl)%#6PgҭtH}~kzJ#+}?u3wrsH#AޞSsr6׭xE\~="v+h.P0཈3T2Aew3PGi+A_u&y2 c ;lZ_Q!˶ ,1[QA@%?ۚd*)LrOc wFKX70Ru=gsG0QW=MNi<0-8X)-͞9h+ޥ IΕg9e[,[ ӀKfAMN^yK6۽P'55;ė=wl!yG;{ai=1=oLPQPSdE%Hkt%. D` HA g/?˔yC7i;Cb4r7|uBYYs,2Q2pڍ>,zw$e:8ؤ@^9Re'\t̎%qJ-yqPչCck2@@-p0LژGBӀc'e5#Q,D]x"E("P'Jٍ$^qfFtlZҏl#fC9 1rk]e,q9* ~}Y{}0Ȍ7Eҽ{g~>ʷe ;{:&⍌=Yl`"pҹ8?z蜉73i#{\}s'aYW׼hCAG'$}l׆r5hN:қT.ZyS '{ ~o ~ЯXXaX0WzH{S6hL)Qt)e#'F\]5Glc-R.g=T,ur# dWc| Ƥ!EN iY s֯`ǓwKe2$l1AZy,Zeծ}Eo`r~=[>Yn#Z$Re٨V$EG ^C>ۓ#4{:K 鸙gQ0:Ũ(f~doC<2Ҩb~>ѷQ7+9a{ dyGϱ[D7 jڻre2+x3/tv֓{ ͕ğIފ9('#p8;Z\ǥcAzh-=acΉa~ Aip'L0%FǭZ> /b0zRsҦFxXc2HC]T)ˍkqr$K4a 1`Gw~{si<:UJzaU&`skNvӺhi@8Y17;߶x^vp2 -qHmo^ZO#R%fr*l}Y3,O< 쁱hW>1l=r|Ԓ-":%9-O݃ŕᑺ0]u!)]y*pxC)o$96 VTfG7>*sG@  ,jJInw+YVs$Z[[!\gGUIAGx|~Na5竰nA_x;–_ )OgrM'޵Q߸!W{3[^L}oAK,c teF|+E F5ڰ%.( $Nyor~$4z'}Qfg*\jL : 6&Sp[|Ux8O^d> prNf")7r;vʝ yc`}Fߏ>4!V[)ؽλ>B|U/q{X IO(v6>E.Z('@"$q=,3I@OmҔ.-QhȨ@O6ldhhacm Z iL8m] ӋZ`.kOpH5s@1,,/6#|Ik$F SEnéZ!tnNV-F[&Wvv/V~֖kk7(x(!Q$KeآL\Qlk`oP.a7|{݅ߍn]!h$ n^?-" {vh/WJw 5ǕcAjB bRAp,ފRC\#9NEښ֞:DBkV`b 3s[N2 T_j1{gv륺b(S"7`/[a!#'@ d=T0|͹ 8,)Z'}h ʪ;,=PH˱b׿Cjvgf-~N3:2w,SR%od>EH^_mh ƺPÉ?{U*+l sxžPW/]YL>2X`U8A^v{nR͘,R]Q'JrBZ 6y"=a߃u4O *J絙PPsڙ$5qqJx vvq\18b/WS f]gc-h 鎮%lssmti1Z yM1H.bIœRl;OTCyd^МYG:Ŝj}'ߛ6j5v9lDU5{&v~m]֔I7/oA,nh%P866oE8[e)9b̃vB!N55'MOJ-hR1A~žJG$97:' 2u9P Y2.F7+M~%ޥ^B- gX_jhˀsb􁕇 HrG94)q@mv 0Y]%nvU |X#2xaǪw8j =(v8z^r}H⟞< B醘d gD=ug&L@h&F 7Ewu׿ތ)Eb[!@tQ +r𕗴O efWw b)G8;{q oJ^JD [%aB O BCkK]tIo6 =2b лKTKSҀw2q0WnOY]MK*F%id+!oPA$1vٍ1vy/$4Xb~^8-zoJ%4FѝM7@d{srSh.seG*kZQ-۩',ˆd bJ0Sl@w(eʑODѭN묅6-YR`V<`w&<&=Iqt2ݍS@O^9͏- JWgqwJB}6Ks eX?XZ/^jzJpp jvkPa}p*̤)ok j(s3UkG6No~1&XtBX + H@3-ZN ,!.V*YZYL{M蜮y'A ](!z:{f}RAX^q4aa\EasK>i6+؎g1y&ւPNl[oC?piU33{8oVJ)6b4*v*C$24{cQ=񌑪">͜K/mBH3eXE {yWgVqa x]B@3ΔH9`5}1- ٦jvtyi#wǺrul:0=Q O6XO#++@hїGY+jX|5G}v 5]4@^,D4چz)=BHm2Wx*VV-{@2X6ҠgG$0@jJ]0hW>}B?x!1~xj9VRdtn)NO4Wz3?pyULbz\#>}oZ4ָ*-rg)asW ׃!0E2`:YYؔrgPw_|sOe]eɘ*w ))>lijcb l_axP qo8bs 4 @v2n ˭UX3Ni;PJ?qAbxvʧ7mK"u89vPP+ w2]蟬-i߄ Ne; 3+u[]X ‡YAQ5TFκ| Lv7bu̹F R^ Su]sz0ttQ2uy#j#"˪LZv~ NpOkwmp_₫qa-anҧ@)+:]g~m+4s Bãd{빴sAF =9Cu1m?x ݗ9ua9E4 *bTt0 4o ;mK `N)#4PG!Mbl;*—UqkB4+oxM<H_dT0V3B%<ۯirOl5e.uz?U'IȦIt̬oJ;Ewtz3 cdPp HcqD[fS n5g.tCiP65G eiES}4ח=oS~(hꧾhZt6&!KqNeԸc`>SPW\M!aps]I{W<3Xghf%V@@F1v<<*:7 T|ua sn|RW#ːm{q0d8Co:(DDxeϷ,HWB&J`IZXnp¸a'n:\>FYc1=ӎ̑*54z QCk% x9%|,) j.USP{JkR$ :}+|.6o`b |uwkK '.0\NFP9mH?d$ 8̄?Ƽ CE%A ͸I+Aeԭ1VN9Y"tqnߠH퓣*mư}<,GU]%Q 2/ FW:2X޼mK>k!"m*ȏ %\t,d['N pK)C @LxIG1!ea$cĨs4Ǥz!QD3`H69s&HzF ]AVU NW`.OdE.C7VO᫦.yf*]@VUbbjgXM[0,`(v ܲW?D@nxe)׭rsv9{[Q+ߝ4fش~'t\ lK#l L+Ec6;\q|0aǍ1. [_F(䲉R_DzѾl I}pi[L쵩:틆(*bi#pᗻRD_&ѦdWԃiKS`v2Ry3G5"*Fa%ݳyz(|##H k:Rqf 1(PVoY?4yE{/3N<DjP ip5~%GVpNn!F˸ؔnp}io̬5z9HTYq {:dClFsm72s#pʣ4_I)&I8o[buaڨWZ.oHegM>o1x-&\?qr`skmTJ8QJoK.V 1KB~!Q""$ԅJVt ZkF2Iig--d svpiousV?3((^d 3>i=5$&™aI"zG; ij|+䭌k*{S_\0kkeJ\+rWGQb^0h[ 0qkҺ+sN= \J=o_b1`WwJ?RZ1riėf,fOmN;o3 D} J (JbgV dMz0E4t)_rߗYI2g\=&X9J{˥9 Q}oRyWB qr'2_V蹐FgV<XmdvɡX '}-9%UL`q.\z?t]7?9 L c׵S#8p)O#uq?de_Ѱ}G>pu;UQ{S>!sְ~/\u}Q؞_\ 6Yej8V/*9{ay0 8ߥ?c ɃT(%o7d{^T.= u-t~c2 ήz{nh2m@vʅ(_$W23c\i7>?mɥ{{ ,Tbҋ{"o,ǁxXzPY"=@ un%RJ?a(# IT;X= |R? D̯j_VTK 3tt*qvo_*Q<:є:]@STv+ o79 D ؂3[sJZCOzGN…b_`y_7{!u ǽYʔ!4. <th3$sڽkY^χIk'SuΐQnme|{~RțZ>'MqIWc4fm(MiM+D0K.כ(9RW>Ѡ K}.Î$rUx) .룔2BX"K͉jQ!J8آ;7F'qApLɣR~lAh&zr(JK-8Xt[h/pwLcwS+vf؂ ;R"yC7W,gc2s!0ɂ >DCy>Bm3`7k|j!yG_u:o5Dž*c6ar_HWFx2nf¦јY.t|QD񅤘sZfxM $!pH Hv1 1-M9TX$A>j.};psyǧ-+!FCNۚՓg 6vG8y"mKnV|7DVF5s+ݹ%m)Lnj,BMGyv){%ibC7L{=BO^k4CbN5Kgl8jK($J"itҧ[Un%&ژ\%uI7RsrZ1U1wġ-jbI_&b}DٗY3cqH( Jj&41~-SQ Ggد͞~s=D[`r^bFXM&|o`%h5n'FNEIZ* ?;FrⅪys]Qџ93,-Ԅ &1KfItsAl/7B{];t o G'qNכpnM:mY>M?q5 {~W>3||k`^%ȻpOԺ,nXdL▩k>4i݈ζa`x]GuXbj/DxJ` :ܼtj8덴޵΢rh+"A :><`K։VWm;6y8Ef'r ls9x.zi=lD:uaRRU@.!n XſCR9O`H+6Quk_teL})&~{oxMՅ"@"`71lǔaVtG;œNxJҝJ]x jZj L;csA 3A~)Z=CCdA~ 6hVfaHUy lyѾ_8B[7L ~QDjCBYiŰI_(ֺ[M,i{^4`k # xĄ-|F*E! ._kGozAQ Hh6N.8G%ѕf&a*YjW&^GҒ0}ᡦ?^+W: ӄ_.O"[Ou| 5d xbNj K2 w 7C7ލI@tB=i!e}uF:ixŻ݊OY}mCXyk vͅ?0tvgMON+EC!m / eA|^8j5V0mzqcW }}Q7*wvMo;ԏyj}7crI'g.E)/ܜU9U:Ą/~Fqc ~ۊ( H> On :[63_`7-n^Mna܇S0o..I!A9-\mZ3hT$tx4C)ϲLM^RI@7=Neq9_O9dp\iI} e]d}oi9Z/KV,Gb=L8dEGҶtqj[`NmaH=}e µU=q(CdKfI\MHͺ#&;[0ܩo$Xi1  ?BWܤ?>xw^S< +Z54*L_ne+]%hnЏF:cq6|-bf!qln2g;c.fL`'NBJ5%¥ D]AB,ҐhQgxKr{h >1oRmGמ} jCE%?hCRg6,-qeo鼙({N\yY|V{TU7u<@ޑ=h&dDN:@C uuMcoP)x擑0pqѵТ>Rb&p\on>#t:᪗{ }DڼeUx 9dYN0XY iOH0+hcХ.BZ)xvJP\5 MpԔ-=~dm Hj'ъrp۹IDZs[[C?VzB[vltʌ`pJFۙ> a%FN* ?#V˂,&D)Jq-oz;* S3}/Ҷfw6aZm!+.,HEpJ1){P PYFӌyȑ?t @HHQWn O^&_%*ܫ?}BvYxF!{r4^])-jH|S7 @+@6@BW@d\d7TDzHE5WCP+rvd L pd-3AHpy5$ZC)M=o/ GvkBiqw]q.=# *5y7p씅`D9qT!0t%[0zg+H4מށ v+$ \ Hz]6F AFF>MtC+2' ۹b0Y,1Qۺ:i:<Ň(ebգ5f%*y81!"*5M6֎$( ds}dvNiYodvϪE I^ ɪyZ9feeK*} ^Ԕg HpB>dz~؆~wrM9;(s>79,4&53>'^+ց'ZB+HP~\#wxe} > A/~A's$ ~q<㶦DQN-,+[_!)GY+ptzC ?m3(12RlϤ2.9 U2NP; E [U~@[j#}pa ɟ‚ݸ,|Cg-BW:FQmh`{)zk VM"h 5Y;a`Z>@\:M&n;`, \.Nm+zvTS81kbCXFmv*ZDs_e>-Re9Jh\,Jp #L]. Ljsè#Ci^WʦU;YDڅEJ$Y,ڣtG3[e ~=>kV6H5CKv(w7@e1FPc1?fa]UͮM]R&ĶTwŠ03^#w#ѶO{jNoz5w O7RoL~Ì%*2 a9F:Ŝgq h/ВHϦ">߲z5G;L*J E8#T\v2òYgxBuVНIs>v$p1HV8څXAWX #:Ov(6Ÿl*ierX]4Uu]ݡ@)I&F*uⷆ78 sp٦y[):InrUt ,W؍TQeE Lԉu:\T3To}:5Z 9^g7a"})"TOP?IRo3R}3|lhp7 2NV0J.r>2OH1HqUG^.Bڛ@<7&Kw^vĖVNO̖uI'[IhVi$Zl$~ҩWiJ597ڡ#=LÜ oUt~NEF0? v݃NtSC **ӺppfQ«iƛ*wس5:M(oH/(^dO L  pJѱDD^)Gá 'q:|| ȉy`6X"$r0?Bqւ<[Dý7npebs;5z0dBI8O?L}YڒWv Wod)=V,0a|q&BdEΝ袰oΡ0Z?pyr*iL^vL&T(Ⱦ2#pdu*(r8얹m^|P05y -v"`*ޠ?~DZ0G#<)>=^cZ 9=.#hWj4Qj`>L ZkG_goV5Wa5"S v>k OZ?dhf5 ^bzz@8nj>rE;B #K`'Pܚ8fy(OQC p[;Ud/┄(Sz!&6ئrzP6 )f8PWYILHr=-{k=6wOU|tV %V`8͗ͺdcdTOagFK1NUR[G49I'ara=t3E$~CiRB]< )*gzEʹbkTr,s8NIA{-ʧSh\EQf+C O!Y"%<{QU.*Te9;.Nf޽&)߲pm dSoFr$ -ve"O#xG&kYN+bS=RN@)b6Q a_u{dF`(6sG ;+v7mw6\wް:2sVFס5fbn--O._0?he U~ȱv6'l]$YG Baܤ6yT^M1MW/:c/-UНjR- gc'9>'h7-΅K|.ҨwBk95"l!DGđS{k;^B%R,g*G^r#?"BI-Ƞ%xf9lzgTSƼ)*6}VEf-XM=Pcrk_3|ʃ7vdwZ9aiCAPKkWSHB<(tW0Q -U.Pz$ɈW90U `_]4ˡLZec 0oy'"+5{q9v1DhxQ\qL {+`lFؒU?c%'C~yBo<шZߋ- q| QCz44EanQ' ],l3ۜ/DHV- 8hǒ2YaUaDoHf'f{1_Jyn|j0S!H\\~1RǻPp&50 N)x=FBr$I;N!t҂h= ޹up3cUFZx7Эq4bS _N䠑%9?@+D/xߺ5hp|(qgف~ JgG1zcdSh cb/A)kh~.h<};85ǰ{KN5#L"w2Yml5O|cT$$[կkսz@R|Agy<īMwS,D1w Oi=#eJpbSk d~ufۧN\\ ];S~cWzFi*%Uw#=J).dS \>:Ydɵ]1eWOejsu9'+N5cWaWʾcfޫ缢!T^CqyE%ԸloaLBl4H80uNx/rȟ_x׳aPFSzĭV(<4_ j mgSQ. ]oQ|<0f0A;bY稣 9ݺ;k'0K4?!"9(il!D8"@n/ۚBI2_V>ł ѬP蚲 V!¯k^" ai*<3*kCuD[Gjѐ 5RDaEXqJ0Yq ]Wg_:~ ҏE'iXJL$[ !M)ͣ* Rp< (gvɽ^?#v5VvLmeRz_)Gb5pf#4yǧ2(ABjdό 4ZU?v˺cM%3m_(mL?悏wާB6_ssLɤx%vȋ:,m!IvF-f+Uf տ"PnA̧AS(k%2"+<$*m$IHz.g}yN4 ]tV|$:di}T+C.,

}̉5US6q}Gk}GM1gd"pjK#D2A fϥ)%r1M1bǞ\2~cвc JN`Ig#Qma>d T:IGbe__DGjfm@HGDP\|}+vpӵ]7 ucUSXZ'6j :6q?4t$\[=ܰKЩx4׉JYB1*0c/`W|*}ߐ!Ycb~^,VP~\jT$T Fl `ʧj8X)$MG4A Qjp\l.\< B0/ɢ@*vq H^y*Zʼn|F8*T]+W_)POU?ּѠ'I7S 5T4]^|h=dJze#;lX34$6Ew44c 69NO e#u2V˭("nxjٿhJݭ8yKUcȚ[f4[b_֡G^hM|ÕD0 &3@=I(;/vT+Q\j@4g0ZNڟ uϡ#tg2&42Y+R\̜b;>*l)/HUwr8d$+oaނ PNq0S|p0Q8J${o*ܟ[%CSl/ /9 ؊M{ַ|鿩9$/dOSU]8B+ !@%;aE[v({,s%&|mE*1p / r-t5aZz/#궻 s;ߨ܀\ F?@AX>X_4OgOS6f 4;OSX[t7Y+%?kV+8r'?*10fCNldr!$p!O¡h<_U ծ m9 RKVӓl3Lm:u\iFOlA;0XUx__KS;):{o6HXOEM^~!rC@m Br7ptO-n8+GxB %iIn5Zα3ƷZNnnuAI0%pEXpl] ,IxpCu2pD,*-DFߠyS=ޗnI%FI9 zW {{Q%zѼmyֳ(Q3."c)-d7u hQJk}lH柍ld®N1-S`#c2/pb£j] f.Ig+L+wk}!'IJ`s|)PV~y;9D^kA k/ƪ9$Vre1+sglr:{6_۳t(dD 9":O}&fb/V<kFP`ඈ.7yDₜQbKՑ^xqe~W%W[BtM/l RwoD/%g[. HZ(HgިmH p7j9C_Z-ݠ7V!cxjmŌ%ABb٢~.Wє{ ^7|5~&$rUr$>,#dڦVEq;Gv>s%1FU$bgJSg\k׵/[SҾ6;2Eo]3}Qg#Y뇉Y8 \!GP׆42Wy+kNkhu=4woC#AdNGEy.s&IyH2j)H8Ѷ3Lpy9,J6c(<{;nKs?Hn b(JmxMx~.@H]հ2uþ.[u(!Ymjyٽ)C ?QGOt߶d4.u_Qqf-B4IsM9 2 HNu}Sr[^;/X}I6-LX6i[&EiR'Ťl416Qg"޵5cTvnDSe!b%B:R(knp\f0rd%@xo?/e 0qU$j-Az GM\5y76l۳>W5XWmWja {.Z 67[Ct51}$h/8>V KmFZ|l~Tw 5>W4hSbBg*VX)M ĭ`DLYFao[Kx+9ם(*>Tl)No!2j-i%G,NV"*>@F.P( -8'm[ feʁD}I*aOfp*]׀pя5P܅][b)S>RAg枎>+Ecx/cWIvRu[::E )vU%BpL`˗p6?HKAaOĕ ˤFct\(eFApN!V臌khnfVٞ|u"' hkiiB͎HOM DT2{33`Gsג^zu,8gjls;,5:8?:Ά;T )>v]249|zl6lnʄ8Lj[!(^>z%zӽ&5_3*4M>qYhcb<뙑)4 Ōz@6FF5MW9niUa}|~1^'G~PYw7bu=vl!c>VM-á7@#(Wfs=Cs:,p4ɶK.W Yv DCu6w35ŌՏ 3 R~jz[$N6s@Ԧ43ple.+2c1qSd& mSN)!#RDC8'+1 P݀>=.GJuv|DLp7VsOg _jTY6SD(߯!wVw?dW.2;4Ksa\~jk)\M|/w8Voa!~+F!OIƝnna#czfr}53Ci= -g0 ?,]`kŤؽV1f\ lo:ʿV e@8? gd}VA}csGᵕU{gnՠb!)JH F\ <.'w`ڪx̣"uKrvXfCojf-rXN(|x@w_ixV/?nr_&\әM3,IDC۲1Bu{P-2'J sjei۔~{gPLX|\~}McEeɩWOa̞1V:\k5(Ed`򩜍Ϥ-ǧdcZ^t;M'}4IpUо]=x %y8u|t#^$IS#wSϹ#C=MK 5<%~yԏoO+KMQ92"o]y5LI`ʿt[} h-εv{É.Hbo7JCʋ_or,oywHnZYbTZvd>FȸPD7\A}q]"nI\c1 ~h2~ :J 0qZ$?d?J-O_Ytîù)= RGKg򞑏[g j.< }U14X'QtFU[@B$IE_6|c V^r.ƅDx𚘖mL /eŸQ9|Ra/7ӤjMi^R1?a.JJo,Gƾjӊ\%G G̺j > j"WMf }k+ JNQS]'ұik|VdE]D7l;ع.>k馗 ֝m nօ1l w1Z}`Qԏ^@v` qQ0- lNd,vvW6|b.nd4GGTW_mY^cQE2RʫtLA Qm j=995m#+d_D>MK*U-$#8P)bQR$Tt@7ozv=]i-(7^)6%ٞ 1%PΖ3AF̍U9}n*8N 4BNvF-k v`PF66]Ğ3 n C{ 儙zlۘԴK`2##*˽b9RvcqNV2(=?+I ce @}"ʹgٶ/TU>OFGh| 3N=z&dz<if^ycߝ8.&$-͙ Ӂ7.YT#u:pHL ş/lRf‡Clq҉DmUO)E3݋BfQ-HS}7pT[3 tyi_jʎMt_b((۹i+4 ( n6G:R S `e#+>iv )XEPjU[Xk=-pHyi\Pg)Uc6NŖl+*ka"+#jUAvxҙ3s~C N8Y} |yaY"t{;,ޙ6 6Cr.еp#uV`a`f$_gF=7)&9w_-@i" T@9ѯ@jKt䶃^s6%MB Te8͛kmMo#>ʁJ'6 #4Ǔ1JA;:q3_qBN|FGkOMA4)rƵ'5x*1lδ~2j@9',A@zev,\k{q%=+z#`Ӱ,sDr|$.(8D$EpоOv#V9DV"jh>G1sߕvSaFk5 \Yr [/ v }NK!@0dOX,"cb!=Sm"BJ->Jƽ|\s_񹝔j?*rinhR{{-Y֠wT5TlPQ_^GH0'i`[;sP ɘc 7 )lqk6bIf_wW\}7gj lutɡ4gMDM.B}EB46n*53 Z ,/x5~<~RȤRLO-ʅ~vm,-uPE #/j Q\8U8qWpF .Nd=K^^n_ 'ZENsYK3  N \)?KYc<*cJsgGf\盠3 PH@U!S;ۣؽ˞:93\ m"hcEOU7%kf,3WJ r;NMn,j80 )65)qY%xqڢ*\YFpQtHH/`߰ڔkeJCVaZִ!fAqrbh!nMڳ#z0 EQP-"Q%&tV;na] \Gd߂9Э[VoO3oC1CIfx:.&'#e4-I) 5́EԮPLݝwUGW]UNVQs {qZeUmRA{gGs؂[=4XWoܓ6@ՖEZP4'M%"@\P_!x sP̬U5q|3 D"GAC4qe8fN^NRި]DL ; MҪͅHn),#Fl>2ZG iV+j^`_Х\zFOς5!Rl.cIIKBEr灦/A9)#Q %:eŴr3w/:׉C㫁&z7 LtJU NɜiZ#TbI\V_`}|FyN8(xلVf4=Ij[QL3#%YUQW rHR:d(L@ 4̇(bŘi] 0Wꀿ+l=2E'`o;/3j#sUS*̃f?Wx:.| Oam{EۧX_Au{؇`g4SDvx(qS.h~_DZE!T8=ɼޡLP~sI|{|B{>'kGo_r.s:|R D7VGiX+7 p&[y!$F)4;7ˤɼlzzor#"@d &#A0DTTr^y!P?֯eKK2OSTe/ƣOzu깆p; KL㐕F6bJ2Q#!-brBJ75IPM`ܛhe&ΩLoWY{kJLm2Y#Qθto*<<4@*Zސeskj٧" =Wjv׉sWu&ԽFgƦXGv|%=ڸh[c$ +(ׇǔ0{& :.N OhM$ n;:i:+]^fuaBw4-2JNU`U"8 }< f&P[͝X9 9ۇDzطCPNXGtF{NhA!=mv'V$ 1ym͐M %ZdkڅZ룵jT,~ 2Jv&Y N>LU%!"׮) 5 Rӗ Rw,:2[Lcxٗ }/g%(5k.%s;t%ӈQ,((!RaD^ۯ}I/e|#298*",DxLZr㡡=jboPUᏱ8ſqIR I%Z}#)cNNGBEfQ.\LÒW ajT_D<5*NDÓĀR38SJ M^தVx<1:Ws dV zL_aƣVGA7G}쪙3*qJіǭ:]`aN}KSB0<i?}rllZi܎4XL!j?Ÿ{>>^ںȼ ue~CdV~# _ v9N9N,5IUV͔9sǰ}E7I&Tx$4EtW]'ҼuU4[οÅ "wϢQӪ9ielƓG]y;"wHx"7oMԮBI?vusF<op`WwfYx!jPXIZ$𡅁ji'&iBlg[̡:y0RŷnGH+R |tNa%zPˌg&FjkL&DXD ٥'sՓV*ot8$bO&Z;bImk֞{f~iw)3ĔLG{IKƂ[^JlQ/[řD ^r%7=SaxE̤a*&{UN3OֱFuBenCe(Pa*z&mog ůQ (W5 ۅSDGJOG3 \#Nݼr%NE^Y6.Ac6rL0% [N`O6>&7.hyXX]ѥ"1ۋ}6؞!6sbmσmZ[!|Ew/.0-~QX:m0)iULZQtq&B7]_ѧ'¤m'ʻjyÀzskrzbΜJmP آS#D =[f=A4O/HȐ` ?V79lQcPbو*98|znhNA@rM$(Q0Mӣ^=ytg }"apmb`W- &S=喱[%~"l9bX̙w)dp۟z-ST1l/zjRbF'32`l @+_~1ΕpN8uu-C#3qbH F|_ 1 $5[/İQD>@?GxӕL&KUOKOPPӆ11f2z쩎!(r([FQeeYjThsm=iXL}I dD~?{}󩤝,u[l5a9eDvR& YMRuiFB0x(Hj2q`slyzb}"G[uN)0t')D{hh5͠]ltcc 29>bEvikSH0Y*̈́řHgAe'KB`bx_5{'s, [XXǐF }~+ͤD>Znr_ @ly1# y7ڄ'b5J­K#[h/XopJW &"n ";N'!xA27#Cv{yW+L'6y[ GB&MpLCs*a}uњ,?{q/1TfEqu>֠wa4ߋiMјPFvj.?cC0JYo99A,hF cࢿp ݾ_G:;2B0o1gz攘ҋd. I \M%emň083p6pז* r0#`!tZc_@- }7WP&P4`I" @ۍ>N ԇpDg?`=u W v D1V+}BMXUNTY(J90鳋GB[vG0 n kң 2LKm8pTƼ㒵{pMuM҂crJdo8n&>߰zcEfƖύjgO%|EN+ipRdEW#JkB'U@H%Pʵ­T "=XÂ/Vl6X)Nbw{\FSV7omI-[z 1rz?$-JBdV%oevNQ:V oKn%+×{`~*}/ԋ@%Zm*8T5y0[ȒgyJtj+XYU@1@ҭO{9a]C_t/Ăp& Ģ$m}a>7 %)LLe8"׫F>`F񋸸J}Ҷo$R#h( K2Q^K/u_gˏj,M rP"< r k~J$>X0tS/+S0)\)&7ĪFU!"Ap{uPCZS«LoEI;:-7[_'ڣ|<.6&.k/EU\~>Xv]T, `<B?W 8g' `p}yed_8mқp(L4bCoӮ8 ŏ߄quKY.w*]'.4|s"tŷ` _oJ$`'!?l<Ԙ|j.QOL-T;_2KLT.[1KuHxv&cIh7mfZ92[ _νgb5_iDg>B18Q J&P !prRdS–4֍ky{|;ܦz]:dKfud_cLqB{i骁x7/POz,ۏ#7r(1o~ii l85KUlEbm P ǫB:f:.>pI}ZZ#GfB+Uqm!wlWMe^ Y}Zz+y:=.q ,ûf|a"ļ:?)sNCGe!L7+]@ffSA:H'K~aBJڝ E_[N7ex<6MΘ W5! ǥ*J%x--FxDFTeIDhߛn8`/*;W$Rpne|t"/ZH:CVN{PdNAp[(.Yo>_ˑ*<.`rK @lD~A 4j ȹd-K;H;$4b~OAOLO)}va4.j$2]wMʧ 6힙mܪm"~GjN 퍐d+n:% }7'd/n[,B/AxREVqRNXb^ җkL0#-m3A,@lڵRM;9,޾Ha9*=!v{p;&%F `d<~xG"=ϩeFiw f }3xRBJ,OQP$bv_Yv^$4sqobX):ن"b*˳/B-D~@SvU˿"9m-K3g;?[h>c?o2Kdۥ%'w≒ij A6|bÏͮYn5+6~+5OۡnB\gs ྀW 4klR"̤(Hplso<!yHW:3WjCV6~>+[.1 A/A V kvJD _{/\HnO}|bau`1H>Co ?3-\vjjmJe'~"+dv ϡyh5RߛwQ֏O%6`R[%%ZKX2V;8˖4#S<]1i~s­{X5|Ņ\~6uJҮ&z#8:xqr g$ cf-sB_;J kn>]NtSY[Zm1VN AeWe/Y,Xf? pЊ!) pxJ=ԕ!ҊF_/?Z|[*;~*K(Ȧ^lE77fڸ)LO{?EfR`6p"KD>j{.A?a&9ER6kXLUCi;nz;;_\T|5Q^(m*Ns})q Xhy36( MLѸAYkmbr[n19+Y? B8Cr=oIӑW#w-6ŋɤ7L1"E޷ljQ"S-s0=o[1;NZI: ^&\CLa.3#acɪ^;00fVG j 7g㞉C]^hEkH]κϧfjqx[ V8q|/7BUJL쓛1,@%F\`4TZ|cI p78\UU,* ^] iSjFxo`1?S`5vJ.]jX bn >&sNED!>['䫵. ro4<$"Juڏci-Sx>i^n z7+ܔ0\SpͿ(~wbcOLtagf VѬbL=yXtj;*UFµ LSU7K̈D+K1toc6mMKûJ&8K*퀪N¢$RH`Am)!!{>_(sPnӲu_^̕,&"1d];\Ax@VG3,d$]*K?y㘴 e#}6{6UYw'R`$3c3 L&wdsbqSNIKFV =g {.XIS4ڤ=@;@Y^ЍoT4-"{~ۿ0>HxJYLS86WzBcKj#[~ۯ >L?9萮iZF'榪Vf갯I1tTT瓹YnMAܓ;oyPi2g%.u,jp\zrTC !CnYT&P4Atqښxfs"uӶ4r|qc _z^d^_ȧ7mm~otƟ`l`h4Y%lZO.;1;OWn՝YLiQR{QJ [ߍA 8haD//L>JZk;_c>L|v{}1( Os7Uw({2! ޘglӋ6fچPJa@\\AѤ}Mb9Y"rYr(b?]fj`a4P))lXlȆTtEYhn;ia6˶`-Hz¹c7(7CO0Mvag c^?n-DR  T=!o.d ؅ʒa_RWP%+dћӶ45)GA,PN-"bQ3GLy+VNoDj&~6`s܁le6@Y'щDN8ɶwIۺu*.?xhZͰorsm,S^Cif/IaΦ$kڴ:Lt N:yVEA> #Аz#7e(1~VyUR &g+-yx~R%H#XB pjIú=̜ЦZn0a>C.pNjO$5,Z&i?Lݓxi7P.`,TS UX{Wd n9ߥ0vuI\|KyƢGAf5VVɟR<-:U 3A pNjcȦ7F Q# Mm \ w0S$Ռ!]-)&de-W\;h8q*vWv:R_v'1tJrOLBkz '퇫 O-#jf9]֐ ORbj "=Z51 zm[.!Lb|<)q^,Bd]{]J8'$p'8mR*YL35Na=mm,77jN6QeNрf 6Z1KT{B~!X/(C>x[ Xf)bw'Psnw;+\>M4)!3+5QfLșvnϴcEgؿtzpFBox{QOB~K"D]:BH!toi OHt&rafV0c Ljk6fHt͸>Y{n+Idl,89ba ߛ`B?#?򀞡zfr)gFS$C`m 9uL6V 3ezPM{_ b@ώe9qgc#NwiM BƁaDyd|ދH@u=j2Q9W-tm[3> H^cj?QAg5b [U-PXm`pioKR?Q ebv|OQrX\دgĝtit|5pNh"~+F36jʾQr)W}I}mP$\!wf(n}̯kc <,6֤a_.?ʺe}["Pڷ(_p/3>€ѻkS N o )@9MPtNw:' l[=!tdW곕v!k?,,~*MH犀8&L{}渨f@UZnVSGG(!u;9 rw,`xJ>YDgѵ?cB?ݒ@.U@o9Gs~,m]O<}Re]6e=.Lu.RAl.Z!t_cd9;n5P.LLOo_ޭܥ*/W%mzHiK; 5=+芪ȥX XZ>7/&p9Maי^1ňL8lM5/R4*W|NWy>7D`V[ȀXDJF\VFa:(*zJi &Pu,#r+g?GDZ};RCN&?]@(΢Z|oHkӶni׋9q$v/.Vb+`Dxet ?}32f~A&2yݍ>D˹scݥ壓AoJZ -:$mBFa/M%GnR @舓PN yLkR̻L‘0ZSލ&X7|zWML}LxIP@FZIe|iavh;rG -+8djagcAkv}u?=^eolg 7)m-gkJRJ{Jٺ`AaQ-A^?վsxOQ mkViɖkڲrȴ{+ҡHEо_I Dv_DE=#N>%  HxqhoLZߖ( VG7x]5ba3S#v&+C0X{ak=Cڦ]s,W3h2h&L[>7,u[v -rƪ${ 89&L PnC~@<1ײ`gHoOr-ъt3]{!_BHlB6Ѯ~*R]t$Dv>1. eދ˲=@M/M´N3/M¿&;/ÄW&{|rsL.'ԪZ%/nǩm탘E#LHDY qMBlo, \#w SS>;z2U).}J3ϩA~$ le{xY`ϫy*2$>q'*ćg‡_)gMhR*B2 ֛0YxV{ҹ%nfչ E[W0kRW$L~i\="_x{I|kxopx= x)5 B{mEA07?+7EQOPkjJblMJRak@D%yo'CW ܯhD+\Gt:f^ ZN5y{>aGr&t2m>Ǽp9EKwE`USbxgNxԊ ӎs円 _;okQ?N#YHA#  {k]F-}9HL; c83)-,E2i_Cg1S؝)*Z*Hs'*Pps,hhM({3V*[_Q?C.2=}q7AEi?6e{[$5^qIJ4L^LsyQD*&MP}S7l^8hZ=jc H#hnY'ܭs`grDVQ KOULm8q:J*^fmuNOڮqĒ#-jz7N.>#y4J]/-܍0QMaӟV+A6ן4 n7 kgsk3eX^DUjg*8q y|#$ 8"i%D^_z֯B|F+IL][z- d973mKn(5F)D._H{ I%f}9m@V778֪F4}2e~mxpo8GCfi,7dd@2&Nbh>P0oδf C\r:@f\2#ѿA7\{!ӔnRT~FcPI~/6YMNIYz,z~[RM!Cq.Y>7g+?4rl補{8cu@pwM4pT*!QCm4tF^L*RSRԲЫ=[EHǭd[L6P:<Xb}6 0JQI&wͲ ),pl3A%js`3yvI`*i:@'8Ew=;YT \0h5dg:II[|/p=VJh@?S&>؄,taY}V6奣9 AGk6F61 P}|O፪゙|ٯ:𴺧03j`u_Y "iX)i$s PA}?)tؕXCiS;rYU\̠ޯDE:w8ԈovyKlqv4PxS׳a˞b({DFhXXެ?+|d'KN O3dL7KɤAӵf?tlyX6{ꄥC}2 ~ {eq֌ 7s "C٪MmHR^BIK p2mJB,2{&$)( WsՄOʰsG̟\rmٴKF9c? nAB4'ȰE2}ر0e&3FRЦh7aɾVoyzh* HI J/ 58K ֲKܰg$^d]fIo %7'oa) W\~+Pi:t V|& }9L B`$|mew8 ȕ9=ͰUBz>rX0f5O*M\\;tE )}L%L~ nwFPvu 4ҘvwW;6"ȴbG4YFa|e l0`p$uD#o b4-vẘм"%Z-cE)-_Eivkh.4c@75v_/*%98s'8wo*{/$^v~*/q-4ƨSfgs #DA5Ij YZtk dۨ㎝FnW0"%gy! ([$oIiDCߏ{5ʶ ΪdDxO4Δ NG!_VE2|CU[_v=ғ 6r`Х7%@<,+k-GDhbAR䅡c6ej & +-ߠ/=A䬶噈! kAO`ĥ+qNn}xg:AaYaB(] 3w?-Qo}Ey~yUiHxI[V]+c3[S$/Aڂg[;0$SB>8T#db|6-$|gh,_@Jl68JT1-+ TdG-ì\+VB{ss/,_EPDY9X>:&Lٴμ|gfDym/>lYmUD 6ΩB7K4r+'3El);\E=S^`}x"-dXA '`hNAE-' .AgU^`;ܜ2WQB9iD'< zb2 XuL%uGsE Xh:M ; iCr?o{ #\yIىExT t9vV1 Xǽu4twAqkŔp/-DR{DZs_b% /d.t„?J@˗]8~|4Ү =껵&T)s hIes7' ~:yL; wNB?P9y~R␙@lYé=JmҧO&jgݦ2Wѣh[Φ.fx"Ҏ xm,3(E"t U_XPf t݌.tڼE~Dn>tOąLFC:;I^&gjZ("fA 3xs+=٩wKKqw(JmWʝO7o=\_Mzq ;0sA?ouRmCױ\If!۝v"] ԣVYឹ %Ɉ?tEuk$_twW&1YMu9I 3D؇O+Ψ 񓃽ܾVFQ6e]Sx0RǎϋpjqgCt(~-:D^r3EWܱm&QɛKC|O='M'а$TvRFI1@ ")X7dl*q)@׏Л9ҙx|ԈjqMI*AR(Kr⵱ͬ72) {΃du=j 1xZԩAF$]}ٹ 9n6])1YAPʢ+3{yB*!q!~;DƆPM;; 3^iRV 3 ,ĝe]V ށOG#elq"4Tb@N4,>J=3C8QIh6A.YE$5[%o!~Z$`fUa1BCa4 yUi#m0Q KIDkCD6(%W _&f kdt(16M/uLɻ\u\aF=_n걲j6E^u ƼqY̡kfa8u+ļKZ #4[?j27I2H|;lptW\\AUl CzfESqu%Co}>/+(zΪ:hlCƻ2-+U,bk*b{vjYŞ1e}y[o]~#^7.Ì`yR^]SHlj ;@P Rp|Λ{4-2+Wb+.xE}EX}~-W\TD@r)ώ1K}%QX-pd3sbUr<iFȘc:E?UzD=StdJAMz@ N jo'YOElWrf$_5M1$ETw"*M]I}\hdϗ 0b+ДYZ ^wj=3_,(O(<_!bbF<+?_?bg c*_ HOzCDn^` 1Cl%˺fg$%*'q!Q L ?DԨbST^qR',໏_]t/]ЪڴbD ,c\פ5laV8ATrelO[6%asJ28$;eWkL TUnnd: Tjv ?ZBkcurVjx㦗84,6FB 1C@%6~}7pEJc< gv q%zWыS\*L]!!L%|ivT;4B8eS˅Vh Z@fJ3PPGL?+VgUhI3xp6&˞>pkC4gn 7dy>҆Eo(6u6;Cu6TH0c3x9?*Xf>R?}8W#ƪݲPoEhŸ9F`y/qa!AVl;d iHMe~AŻJ ]VWLYagtI!(y: Z3eN}cRn,RwpmeTk%;4x{X"h=iN/Q:mɥ曐v"8D ?x 9aXpMd}w[^9c¡>vtIk14N{)PH'g.j÷GPZs'Gd|RpcK{ sOq"l?vPXJZ߻Azc]~h Q2Kg2 _1M-d'+]3!_S:_<3#됙AyD_;>*v!x BtK$s9_ ;gf\6L#/,-b3;hFjWfШw,? :.{.10qR7"T268鹬4fn>[)ȓ W}JLck]OeG/Pwo_kųPGzI1O3\(z a^a$f'PKs_ q}7| a/9sQ=es-褷$8\fTvܠ,mXbnjz!#osTf/hj*G*<K&\o jECvKi4HLt\ݧV?J7/7]J2M >U^HLZO4j,[ P | zi Uje[Z;: @ۈ 87mMKL &xp'\ɏ_rU u« 5 Itu Azu)T&@01<؛@S hlUE?N. u /) &]VY| kݳ[uhC:NNȾB&YE9`O&!bDb-zfXȪr'h)mќ79{B? Snd%/.E. xm9aSsd.,i"Ay0g7O"30;S-@ u^>+۳{'HhBl\,9\G^B3+atb,C3zcP$5:Zj *{IÐGBc0 ADKooJ'e-&t79+ 蛢E\7&SJN T% Z&}]qg= VyӼq9\7"ibL; ܸ5!s6El.]Zn 2|\ԘzXE+ٴBnl sHPގNLpnYm2pyyY-"}Aiwe J2M>_N tc'n1oiA?GThyҙFWsBlB`|L*!!"xE9oL>q=׫zDF+-hPKkLEA;"V7@єXvAq79Q;F -kPJ.DZ%%U:Ђ[Rf )lru_kǑ3LW"*&pFG ௣/9ήE{-_M}/܎]y×6nk!7V]nPk$^#Eݭ _5/R[e4x TI RexMX0fmlaȡEP'V^^꼾+i+ 6>P>#/8Tt,׹Hx0 k) Es|ϊiaak@o%&ݳ&0ZE OQUMzr4^8x"R5\ WD:v%C:!Qth>jP@Ez\‹Lv!36×$+ی#Ϳd:n_[Sv<șWM8dYx*+P!2q΃:Pҿ+S_QwPՊ%Ć6'_ӰRQf*0f_]@I޵;.tcCXVD}kIé&S:!VKU-c*wP# vlI}ڬjp_7 mm@XsYSCs\afoQY]f-rέOȦZJ%S\O\CNwu[H|T:|MȐ(H2~T ir{.Py,tGv+M#OM;B:7SPUN ݺ 'V9։m4dӜe3Dw@S Dl(Ϻ5:VڊaRb :DѐN3=h,K nxpԽ._s80oˊ|/1.]ږ`4v֖1t,فtxRߩ6#*gTmgFLI=\7M6 >?;|A Ͽf)|RI͢ ^7(O_Ed"ՊTLXyQ PnjPFנD0Y)9,Fu@!Q_V)soOC zsc9"hj-._ބ!'u~G<{.Vdy 9ͪ9Gr叀lJ_Xbc.m!fi7~Gp6'?W&Xb+{`,wyT?"U;%!{݈oD{?ö%Ӥ9A$c)&OkZb62ۅS2TtH@?Y|Hh"hjn2k%% @7Z zQΘۥ 6Zhz3zxe!;S^4J 4 ׅ뽢{\GXE/0 R Xgy{Hstc^: NH5o@t B"Vߑ:[fL4dp7n%csHa  r,]EvaKk?JӍ)yJQ )ZظWA~77r>r8n+i`Buj9WFN:Y^tVMBޕxU#)Ì!] 2qiXՃF~%sݧU@fL5uoc]WS}SMPM" С A`(*/'z7VT>Hڨ4HɎlYŕS"3Kpa.IPɂMm2J2|c{H~=Yh|80PBINUBT<6,IZh| 4]LҌO`H WvT 2\3NZk.4 şkLRWt r H\ ڈ'(;vG]Jd[![DD77qv^}ԗ$pk-RdAY&S0qIq?pC3H ў+rJS/,Ĺ{ CgG[قW;xXRʷ aͨDrǴr6MʭӢʾ`mEcjJ-E<Bdei [;fsUUOBr" -r:Qe,GmQ{eAi>4٥2G}+s"f oNgNj_NR,JʠYr;Kjb6zw4^*:Y*/usKb&4U-O+2Gltb+CވPog,jQBZL0N8Hk2A[<IYuzcm׳W9ѧԧiZ.Vt?pffg ,sMvFmc?G hffJg~Zd&O5o=^X٫{ 1%C_׃_ԸJEUZ ^g By#Iܳ_n*V!Vy+2/,5']"HZ>/6QDC&+|o– d-a[m-j "(?߀' zފT4G@:jZ[^)0v}m5FBtݭMQۄJCnVdݫ-):c%D*S0#GCwc9ڍS=um&}Ľ}[yHN|wc1;SxvJ7^Qy%^|;*%Ce/j V.PԶ\mg+ WFewX"p;JsAGlӠ/92d #E/@]m&U߶N_ml˧{}&놴mo`x~$ ]aO]hکw`z# :3nF@T?ڼE!i㪵^ ̐oV{doeJIp)/|fhMbB$l?[u a,`JFzbv([.%)KO$2!VQ{[QWq^M2Fw5 yFIxcALR׷}s?*G0F݀KکM#C =tE<)¼\&(j7֋J3[ILy)Z!3G7:*/vL ^X{CWx &mDrwF<aϐKFuF0]3&KjwFZ{uhRšy0sDnW:b V-M)L@jAȈod^c ;Y[_~8*ʅRQ`zvJ:$,ص$ڇq̶Th ݷ) 4&އ+Ĺ+Rw3"/j+Y%/g-sg $C-%:Ƈbzxㅥ8R:?rerd6Ua=9A k $Ʒ 鈣/D\L~h<3GlZ趚r@ ZK} hU6'8+<ͦzVrsx^98=d&,xy^Bv㪜f-[Yl"79f'oXy+ۊG!y,sPP  s:m2OrȷӚQ:`Z;Y lIvѰOTv4)S/{Ū2*q'^u4/t&z%oӿ#mڸL- ד\(p-bu̝ 4pvN)rM3D |dKۆvZQU/Jҹ{*c M%_ Tfyȥ1j?BGr;J$()|QRH'ꞇ gB3OK*2RZF70ea/4S8v`ju ެlbx3 ιFWXx lvNe{9;p o5}M! PN&d׿d85?UR:o](q",zX0QMSw-g `'xe}"+E ]5{ 'e:o갩'{A-I BI~k Tx6s[u4 7c] B{7I72. + 1q\յSn~w{PzYéoyw6:ՌiΝ~48^М$w0)Hg߽]NdfCzݟft͇(Hɩ=(R 0}*U'v=iMmhP%)~Ν>1;w?fK૲) E20']7+ib \@_ ,99- CCfQYV 6C~)];7|Z.YNI5: "od_weeR<@6PZ{iѤ1[i ??_>vD.ϛh з67&<ڤEt_f QenjbdAwQ]'ҭ|qp3 `nGCאC*wèToA mۡ(X E;'_熉`3 5C"M:4Dq/0٢C+ve>fu뵃;zV^/A_/,Nm'ug@4wVp'!خD*SX Km].>Ll.U ]{W^>Q?p~Fw+P&`]4_Zc3UfY{*~!? ƳqIm6v@Mr niɅ희KZ!Npjsr[v^+9%mϞ4 s ؊IpպpT((鶿A5}q (tztd|1~'YMؗ~}kM2$|f v1uBXHxV#$;JJ_d=l$u*vvoRl˦̭# Z$j-$dB op6gc;۟CUxfKIjqAS$ßk=g]N(?9j%Fa E{<OZiH=nlkr CЊ b K%bF>wŊ\yaҩY>VmOuX٭mte{0Q8a-}z'm9 8MF q̻9Ђ_0UKWG`lA\pcf:lD]Eֆvγp;-!*Kk20ߥ.]PjH8tt8Ire~x7`iF܁Ԝ8e3Qs dntr[`5'PQU Q%k$H/^r ?Qb;wpmQ#EF`>ȥPr09~Y/ax3(`mg=a#V)HypVRkϝFZ0K g jF^9zsgRbŚ9BSp}=P*p}&: #I#.`Ty΁\7,Џl$0u\$u l`CG) !^_E2hK˘*2<Qυ0"3G1IM--3OgvN{-)\m43gİ0[ol%Qj** 6D0oAvbɉd`/v84[kgi6e*^'ZV`*y*޵<凾4{GבCacfYWۅ% KxS$&:5 b:{P5dY=IDUi nJ[MsdxsFY2k3|8@(@4ٻ;.! /%%~ؒPi>p>䛛 Ɍ]¦ie j6 r/{<~qh9<'PH˜ ާhJNe,S۲ $0bVMQTxw݁a{df~zQl@]PO (P/hYݟ|>7&SRRU2HoHgmfaA ̀Ik8*c#פ8N迁BNϢ Vri#] AC隇gNh1I4ߥbhײ_TLn!<lbz0v9հ`* 㿼Ho2`$(;8&0b] Y QmW@s8,"B1_[ն}KeIF{a]3'H-a1;Zi66Ap`p"=0󿷫_ug(~H~^Ӭ$s%<"_wͩO_&;g kisct4;<|B'_! Do@ :Yĸo@0Җ(R'.p> xs+X%ٵπ%|I(._w.H7M*}Ǭ c3Z Vkr([ed`ׁ߭Tݏ<0oͪB=<²Y ֎NP}rw# fڤ&f?z ,ٺaEI1D&$vb>&֚-=є9(I^k@M?Uƌ?a -FLX(UirGk.R?].bZg ƀ ^Q[% +Z\mPqGQs$XtA6?X;N|ֈ/q ߸%o)7<ǼΡ&4z+ߛLL`hӓV](!ZhfgHD6漽k{m.62 7A%* nTpӣwxvnưY2-~YIsn `ImarZ#)*ԍO!1 0<,NY9O J T]f3љwz5Q ӬlTN_ 駿ˋM]T尌/<23-eB5U@6 ʗ03$D60d2izeIiT 6WC7r'r775&֣ss*xB*:AH!<ݶӇ%,)N-XLo&*zlld!~hm(SFIODPtol?ff6(>弄]Pϡ h~ ߋpPX֡7N<hkcj8Uu_$X]9@yFgԔM8!ӌĞ51wh&1Q)W$1 Ub#f*2X9CUz5zFHK%זɱs Ԍ5k+*+&[bHZcmp,(Tߑ&!P$r>jքfF]SA<Y䈃s/D<0GbI Vlontzaa!n5^b)vF4GbhJxQ8ZjGW. n2֪_"\˒דbr^XK*en8Kc4;!U~/w6ޤM+z̛Cɤ~k])Kc gSBGQF OFQ4}tY+_ t_DG=XyJu͂ ʞ5B`m vHD9)E IfxlC"gL#(Z!l:,?P Z@7ĵV:~_}gun'Y߉g͏jhi m2'1!G~笜b>kv3G]LAeirjj|8)i!=7U[L@6.lDS6p>m唟ۺB[dO$nB_nnDz[c<4^4.ˣ6_kN Bon~|4(xL0*TaX%~kw-J37'.p[hӹqNEBV(`߮fAy`0կU<Ge b!I2Nc'9>U[jA):Omg~thl[ܗ-Bޡs&/@wm)xh]s2>0;Um97!']!Xp6~ !bJU\D[q>("NO>~#ųx_`D`]!hzyzzզ"H*ؚ̾HBQFKOpo8"ՠ;H T2&R;nJ;y|fM)?3 ޷sh4el_cj}0tU-h'zTd#w5J W%G']LsdEGsGpKD=|?%:/\Ei$ D_-{Nr#qpM6l[bZ)7_u8C!C$(ݪ74B0L#&̇Z*qhUk-sz 1t2ئ14>4BӖ˯9>bZauV~pe%w* `{!uGQ3 2z|pM\gcԅJuq|;F}&O2 fݾiOYfׅFe%I3BF yΘ]7 (VJRԬz f8jcWO\6O3639"iڠJ.YeP'99/]!MxQ>1}%G[.S/]nr'Xdxz*# +E=IdׂR,HpC>~X|9~% KTʽcxSV%mc}3!†`hU=M*R紬? [2g mcff6>ߊKbZgE4mWgi8^lAϑy%mRy?G!#?HTfTHSUq񢔪HaSV/q}vK=It*3).q6o#J6p@ZΒ#hquR10mˤm/*犡eIwg5_3O[koa@0zb{ <?uKV6Y}i;T9N=[tn1xu= ?ymT;rm5[}xiA/v0ޡ[1R1wj&Qj?O)1^< l/wqi-픗uO YTbkKQ*p׍1O;lzIzG)Q PbӋe*\FEy"KB7 >6XN99"T,ضVNjm) tֶ2vJ1WtT7#Pf~WMR.DsaLܦ[2z &E5-(6ÊU{!F,6őMLAAZlB63}x ǠŚ 0 n'f{]7U=|~P!>S%n.<2|EvZ΋ x[HH$h9".ߚ#+$oc3b$Sy WOd0+y*Chŝav٘,Op'ZQ 2lVL#¹SZ0]﫧0&xcܨ/;,jv,/gC8=EiR~d,\fkz^&W=5+\8{Lwz`DEPLsGp<S퓵Dlwx4o] J*1D* CAO]^Yr$Q"Ta.RPt8AF\GmQ{[ȃؘ:s7Wm7_ӝ^_(hia kɬaEΔ&4LWg{` 9y_ӿ83Nl`ݠu她& q(#>Q"NWƨtRݏT``K* 6kّ$!5ɑNtq͆S %6x]1!$L01 ?ۖoha梳0x>r; ,,R ,̦Q&p_{p?gnѶ`16? 8ąp-nPaI¾b $VTUҢ U.p_ ZhqYoJaL6Tn{0$2]e/ZܮD9!8c6x,k $BQlj hΌcP&Vg$iu](14kkm nF=zKg{gf6z8fr |nxzD*'B?IA s-S#SY6+s_&[jGAO?hue-xt,0w"(ԵӦa1}Ԟ zIn\y&,g,lX&^NC}7W|\ÚgA^SeKK遽DT $,L8{UEa#ŏoiiU#)GY'%a04 ,ȼ}]ك/Xp;Zq,"ń(ޢB(%R/ }D@2,}YHPMGT(/Rӏ셨\`K $R1Uij@['WNin"x;$]߸#_+qS"* GrRW}G˵C OWѥRu[pyd?uˢRFF\sJ+{+K)q`UyGIZ{+FUyTY9(jOG %%ߩwm;&4_U0\b= YF]̅˩4 XqRk{x5vr̭ͦS}"8Y? ڂ - f)T9)=ZH97u :xP WC迊{Ls 'Q5JTr. bdLF{X(U(% HL@ZL?-/s?/I?YQ)2eOQvTA{-19յ4IԣxZ0Iv3e++ $HFnK}̂登n,6T2gqu@;Z⽂\[F"0^W3h1Rc2طQ F{PF)ōq~$[nfH^umc|frnu`u-]WDBdI#Tv$#cLNqj"->TS *}>0ZoNI&q,4I?:=X%?/`dDVǹC *UoH)pzynV"H_?_ΊuRe.CS{h v~90o~f7ď XA}RLBo},6xU `Dvѿ(&?eb뮬Zٿ}/`'bJ7I̋Uu]9좒Jݳt8VG0fY  3Ù?6Pŷ]Ei%hs/$30DŽ%5r <+t+Q=`)0yRUcvIL);/:{bMYȢƵ% *C|<0>v?lPʓph+'{l*/e+eqTwR@-ZO8f@H$}UgSxcyJ5!1($mߪys8.8vUm)>TA*6ֻ+XXx^ ž$M ;n z&jCN)OQKY/37$ 12J})!m~?kR`r'aP}թKaaO^AEtL7ljEqQŏ-j.@;#>W>E2}ήM^4X0cn)J"NG,ga2 U0!J Exղx튭f/xWG13\3EE5&nީ0ġG,+]#"r tXԾTgJHyg.Duyb`D[[b}Knzĵp1.H6jh rs<+`ke7{, 9ʲ-Ÿam 1PMhmDXStą14~m[xu"Nsʈ  @n`o[u‡Y_zAEoFB%5AVMAH Y,.ujAU9c#i1K&]SRl߿Uk-:GЋl]-'QNW+RZ$fG&*~E< jh3Ҟ9Һ}I}so KRBgRԝ$kqu O-v'%؂&K~}ZC$Y } sdĦlOYG!Yb(%GSYy8򂸤ү#ЂZYz&aCKb%ኀZɻAa?LI#7 Y;C`)E'Ϙ(hx'>< #o`W_D*`\k9jfRTDu7uxQsm-FjUUvÜ~aiBfp7O.{;~_9 q2Ԅq|TO<@f+D77 r}1HgA|'"[D!z[s9c&,b &3ˤ+{r7PʳϚ+BV'ؿq`{B>O XKH${*Yh՜gȤF1H NgGk9L5 |"&=z 6jRk_9tZ +2/t\RKL8(hoc-lqԫj0rHVX 6ֻ'1^KI/jjSj?"s_oFdXd1arb0Bҟ_6Trt0]eKHhF`h\ui/X*͜ǽw}mΊ1u T4d NxҒ t TD 8n9X~ݻl$ <]m}*]z[ bu`$peЩ\P[f93aX)+h@4)q2կDe.t t?g1߳uM@P_mtȬN-Zx[RiToȼ5V V=TuWI8*60'&@]S"ao=E9mdbx@@#>p> 7O0~[S/`Jhk-dGX/!9ǖU]F; _=ɲ.Oy43:ΚΉs*a6SloGŗ\A326v:FEx СtuPgN@8RJ^2~+a8Nؕ䧣a݁׸{-#A0If )~Q`5"jU 3&nWzx*-gBݧcC5~^beliI3ņ4MTH x1k> +SL6 --ә]}Oq SeY'˩<) ꊃcyTta'-gOi ,4f]{n}~x1q(j>t_u2bZhثP,u E&J`vD j i㒅F+~v'U51ZwA zMErI6sZ;r~sYD/:b6|OL/@֍ȐtuvJUI'A y\d#Of68o4\J SN9we/K`ӧCQ^ɸRNwIDD;OKd҅60-2Mj@he<2<]9+ܧuJnt-ᰉi@~R)j..]4hKE3?sN*rqEuqU) VyrL.HšwsEϛfCc;[x'v Iu~uZVݥ:FDnfd&esDM0ᠸ6vǃĭ/g HhW2Ciga{bg~ Y WxiN\`MaUsE~nwM/$X$j!(->Wl[?A;54.M3TDp{1nK`0-]7 Qy'1 յ׳nO}*\YǬ~D1#1ȁ\f!6N˪+;HG*P_WMX8=ȋy Ej;|$jJ;)G KP)V'K1(6\^1`?+ٴKv@4"(۰]"*Ȟ'3nlƸI'+@40TIv}W}ІSW\ss-ry}1]Ux[nVBWsbv3e%4.EfR7 \R$0:6mc2z<5VFEoA[&5\8e 3Ӌ9V2zAEtczbNtbAK\(+=Y4]2ZINH3Pz][C<"-qEufl%?<>^HC ,D `iO/Q?#԰ѿfpakxm)~erLW&9Ip6n"+Ry$˗q"OHXVPF ?t6B"TMMr=r1׷~G=M2?ߋ>:U} M(xbJiJwqc#ioVo32<oӰT,Py(rt况%meN[%f/^dP{5@!_A^=Vr6_{{&TǙM(Ny܊si*=2 IPzχC*oCrŃHP(dDsl}R:!(i^"v=kcfa5NkmsVdJ-VN9yLCzTTA+ma̺?M^J-yV-3)3155"#&0 t `9>v>b2@F8hXȫ%b6= ۫hM%eZP~eQ]p:,F* &_&z^E"g^:&=i`j;p[T;\Ǽt )dRBVg&hOuK(gD¢I{s Cm<6xcFo͂l=UOɩ!{dLSYoS+V7bF#PM&A'ǁ7Z5\b6rǠ0F-u&5Cp63V_M̟].U}gb:R]dX \ayڰXȰ8KƐ<&EY5LQy[Ak2>#0_FtI`ƚ A; A YK6~Kz^SO>6Q+)i(k/3$h4(!B/:#qM"Ӽ[fͫZr<ڞ)䝈0xEvis\T5f@s3@ * !9Xg'c ZAsa8(==^^FgV Bȓlf,.0n da =,06kbS_R8usQJwv\*ZGNR?eO9nD.^+ӔJpXAjy@k/ZX¬U km.u,2Lw'wOj/ҫLqчe\Z7SiID<A)^ޕn=5J%eٟU o;znAՍPO$#aRN#h]S-޺UyE<4T^Kf-Q.q+65mR L.g2|I'| >Ɖ4K?j5eAYjzF}nf$O~uqc/Dt2dmEU/;Ak*){HV#0~/ Jx}=Sv=DZ=.!T/qK< Km6Uza ԫ ˜Xsш6B&( 1- %)?}rœ5QSKvFr!9s Jpo^;F#GSGhUJKu\!^7uZRi{vn]b Ic-V\0dWJWIQ>kZxK LCQ-ޝ*fxlV$uȷ!jjuq`qsrFwD휕~O`q8<98Wى&KN,o%-U px+Hqu-xEQ׹-|3:aC3g^)S c\tn}-8f Ֆz>nxonLZ[ *3BB-Vqΐ z9|#k_TA6ޢ- rWП[g\&X4=}O\+tZ)9)$#1H0u$xfAOɎ+rCiZB |!j Vzq6aI0ʒ/ێ֠R6燵8mF^t q]C9 38|6H}/%E(<2Y#<@$?@ڜ3 %*3?%eQr+N̢E N㯓zVE_YKSzU.^ȁ͎8eN}5jXzb6\fe]KCޤ~~v|: PJSƭ  DL DZKU/`эZ?n&IX*ޤfQhVdb |)yӿ}4-  UN@EM >TρY\_:/D|.JOG]*P R pH .R+"TX86DZɹ>hbR![2ƪ\Pp tͳm&vz\"h 3iڕSc -3#߳O$("wSLes+ rIF]^Ng*W]KNAX"\x ڬ9B@:C%|NT=@Q_Yk-Ul)Tr.VA4:smՈ&%>I302i•1Ig~˦}"$ߌ$MYGU?dp\p[#W[!v^_H_G%}k4jkfŏjߍCKO Q /X^EʜxLw`tH1VpSu$\e<;^)@71OFYYɁR מl^S= Ym'Ք%8'/)#nwUuߣ> ?O-:en7C]-Hl:C7czO5ZdZ SatE z<ӕ-Q%.jIh1R]diw+yAӱE;+fRcs$ODw>TGf.;ysk*[0tD"w|8&oG`>c8PS$U٧f:1pbݤTa펹1|v(cKʟsAj, }mZp\ i)=ϭ^"{jZr 5%09eNSbkN9͔|[t2qP9߻!Ua1N"ofp6ek. ,5㳰q[ϦAs\Ew >c3VA/ٛQw @xz"HvYE@]nl]3.(ğoL|?h;rNO%RUF5EhK_*]R= ֖)- `@oUKIzjVqޑ-K¨y*]<<:UN& )Z?w9uVqY|w.4+-%MM:^0Vujʹ<)" ,L*?^D`KF=6HZlu4Yi7.C:EU>ia<Υ!ˆ>>1z95isG3V޵zPsG`R37V,x Je@QEh kL7J@V$ZBƊbN˲O yӟc$Ӂץ'He_"F^0 0L]%;cY3^l|͋ug#;(a4jT3,.ɓfځ5:&`CJ Ɔ9}ϹCAELTA˾i2Wk~KEcC,`j\#ȥwdw'$Jb%X!kb'ti ́k%$GtE.Á\'b쌑s}1˙=H~|@#/;txnU ~a7hea(O[z9!ō3;xmgz_x}~m徑9-ԖfX.$ XmBHrM Y$H} `Y4/h\qj%Zx "C2|eq{r~!hz{87zFl |W]A6"HI(4^gEڸ:b>D9q<<#]uFFĂ& Vk(.C]o7fpH,2v.\`((aE=k7EL,Yp3B "j \ .G<(6gS`1$?VCA P>DzGLRcޔͅ~|w^ {M4Y4vTf*`'MEXc>_~8$ՉaHqpNwv'cHyA|+s?aLIi%&{QA#6s󁥡'_C靓Wx~W on+erL`-!,BGhUwk T>%!F Ǥst`̩:ud-q zjzA;h8Nn)~a$@Fg;k] zVeݮTId* [er?=[XLpy q.]HP$v5G45tث  ab8^ٌHPƶ[|vBr\ɲbtm͌fUbAe{e}YwB@q62l/H0-fp:4MZ ,IVЭIZ[EhUۼjĮ}mU2稏v2~,>m~[ě;N(S(g1YA|h^Uʹ\sX.3м/,AmKj܂܁c(F209zCaIŠYdxǁ~I,:; q ۸)NõVFݑ.F6)z.R#{-C3SCuDdjDOd7H:<PBzbGGbZ3 6e)WD~ߞ=* 5#Zu?zRLE.\AV*y11W3Tw_7,W|K[d/=.YrEGu$#(ޣp$s(Y =۝ᡙ6;Vھ@py݆gmK E:5ee֚ȓMEnF^4+5zշ4EuiGŲ85tmv"mΐw(VN&ʞkqEQ.ضM=y{hT,XII#I%%jF4^yv L%\xZ~rw @$1-pQB w{?|0BRڻ5G'j:|`K ]|48|¸QayT]~Jz%\x2rZ!z>*ϮSjǪ}z+Eq#knH|JxqpN&n[zp\Q" i Iؐ"+孜ڈffq\8hЬgL)ԣ'V'"Vf{p ڏ໡kӒQtT/xrE6'{KG ? FiY"]iih,DdŽJi{vmŽB&,~c޿6 |H& j, 43s8[2/<aQ(R%u\̾mьx͋ %H[zL8V^K%ڳC1$@o6L2m'_$,C&:?'V-&M#Tbeؓ nyuE>+n\D8]fa>56j힙B;d+@ EG),<t#挰EџVx?G$3W]mVWcz)5m Wœ@Bn0;7^}lU*M+ӣ@:PsɰZ]Mod Wsީpo'ͤczuOCTw\ TeS . ,gGm.8(˄Az8/AB29Dx;H3}+ʮ{K@%C~|'ry +V5 ^D)(öPEsgKeV\Aws^.ǔ]3ԟ$-c{ܻx_Q83f- N@{][uW51;:^߈jQ:UԖ kqmn_ü?J'48#GfLHT?g,:9\fNS][A*L|@T<'=mΜ6HĂodS5l Fj[Z*mCoEqw!K@zIcNnc΅|:j:LQx\U< d;B,$<<?Mlk2%>ٕSニa,>iу$WM*N&1[G:oB\m]qAWID)T12qm'yw/'}3AHe`Sp K_zz8u!zA<ȝ~ᣊv*uQ&;F)n$u6`%0Nޏv m]Ӹ$zݿE55xXFjl!NxM.?ʾ7;nxQ/r|s].l+_"k _* Bt\OϺ$yCn{.s$kPZo92B#]j$,ᝣh1u6FB,[m,|R~ n4jaT ɺnXWF+lpA''Y̪Tt}(wKpnS*aQzPLe_i|,FơVj2W˭D RBX(S|7R'ɶ#õp<ֲi+O#k36FLtF _-9W2BUAzz&FPBy(B<06'(F7&-y?aȎ][^dCG$[$(iʶSȒ.:2k ,up-&ׅ:6pŴ %"1yqsӭ[KXٳ8g@>oj)$SH(Xj-T+:\1!Qf1~ 슕՞qG׵Gd3Roφ {E ?|FS_x}Qi] v5ZuijRc2R]9@"ʄWŰ|%7AxqW>~7H3O1I5R*ү eܐM?"VZ 8⥧/= xi5 %3ZaQx֨: ˽R.ke>er?BZ DZD`4O@N*9Ŧ2)pXneNEQc)HA f fHÝK}m jw#Z[0S?XQRyf %4NqCEiKA7;Ӭqoхu5cD~~3k9>.J4* 95}6 [XrF+`Oa] vr$bw=.)2mNG먮eݠYNo@)"S$Aoy0G>Z}t=Ka 5/4rW"_C): OWtj`:`iC)ߡ1t#^0wx)ҁsvcfҸCL.݌vF㴘n 86 B) 8BȄMD(-MfǧPV/\s捭F[`$]Ov%izo ~0(Ud.sX62z0ʚw07ې~67I2XSWt龗U!<.` e"yi[ ZqB]~sE1QԮPNm2e"$^2I@.Z BN-GޯxYaΪ=:RBx dX)a˩MpN]Pny:')J0`gS][ c7%/| Ң [fe#{ͅ"CG[)J/NQQZpL:(η׷t &=(T !WXCH8]>=o_feu 0мfG68:͟`Cr~#x 7 "4Ge!$,q؞,L<" !RFo#/E@u ]ʨ 2 ɜDo#jx'_QRR6NXl6ⷅdl;Nh_d ?> +1ؙ-{v<J>.{0TFn 4񼠞rQ?%x5Ea zŏ9B|OI}HN1m Uʐ;#/nxBƟc["C.p%]$9}g2G͝< ?A;& W2-澜la8fP;w >&QURϙVP@'V#eymR7jl]$P21.qsuYodNg 1C S n]P%9 e~>| P? <xFuʑg:k&B~Z9In 2r%Gb\ 1wy#lłH3]l!ey{ƞ%$'p.%vpĠ "vjx\Գ5*<Ա1'ugX$)F?^7 ?a,rmZpA Jx6lZxԂd! <0Z>Uݲ?gʨgpBvG;EaW5**DU (;<2֨|΂ͧEc*n (`e2"ˈK(y3'vړ0^8b-c9Fe+G5=ɚ Hg$fp9PDD~fQ5Os2ģ(ҭy$-G@WtGv<(4ǯ;1G]1ĹVk|it!J;V1FɢBi"we+hj4c+EWhw+R3ᚊ~P=+%}.y4U\]ȒDxF_v{|tud:A[%,w}ύꘇ Xl*TsAa&&~a:Ϛ^ <sj.R~5Ezy(aj p*^s3U/x?*j]-C+IS_[ +1n5ce 'Z׃e->3 LPjvo\%_DK9Բ~%õ30΀~ωc*-=eiՊnt~ۣ)t#f߽$ej0R@\w7oʜe00j"WʸX8O\;4Sk/&JClfk u:\K;D_ sq˘㊗Hʭ2n!(e7B]b&y/<3 G.)Gt%KPGp^w tc!4ķs(G7Sf/zTX6jGK_Kp2B[6'ڭH'JDjO\cܿD:MKe{Y7(aҙQTyo#6OǼl8˓hvXtlޙ Iv?uL\lӭ\Wj$Zo;ۋkZA&ݮz+9Qtm@aCt'&oN, I L,-0'QxZ^9M\BkW'<ϟ3b' %]@L5^#Mv)O2o ]y AKwh Ԭ0E g/965~ %ȃJ:Jr{)AO>|w^fJ;qq:^!ח䵩mr1cnt=2~ Y/w,Ͷʊ&ro1d=(r!R̖6 6>GL'~?&9EsK^G^b?Gͮy(6@,>3x6HYU{^oJ݅cJXSeh@xި5 e[iM :4&)JVS4`U=pFڌ:,Sxx7<ǚi^wm7QṄbS,<{mԶc!ܰN Τ$>bf&Њs c"/bΦvv(]{cÌcǷ/lC ~dea_D_RjARyڦWVnhN/*Nu:U Ɣe_{l%ŅR*v$$bwEzn$bJqa,S׼L"w!Vb;sH+&p)+ѥ fƔ̙ܽ j`qc=*Ҕ\} 6F*ktݵ=-f%^mU 6Nv_-^S]C_p&z!w<),ҕ&u+ K{2| l 5!iBC(i RYUZ}b!#l4Tlǵ<qgW'Q 7K6*v62=/wxG=i=8w,rp$C{{wυܦL?| 2КqRc-bLOZape_(⠕mF ضDU5ǘ8$H&ta>^֓/QAzFwjySnԊxBN*!{GaO1Pcƈ'DZiv=~ȸb\8 D& `8 F;Y~f&%m`8@MSV1|g΍Y*ojPŠLjlAbH{ 521I>B[,Bo1GY# NLS(ƁSY_۲%ޚ㩄z4V4WPm z!u*a3IJuCU*= }Xv*F̬~DPrWfn^yD'hpdz@Xz=_(PUt,; @S8Mxz& HLք w\";hJmuAmJ6Yhۉh$a`dbiԟs &u&Xs3؊ɲ'7K0G \}\Tޥt^{!Y4;aSbw֊ R@E$ ]vNGhv+әϵ V9Lc 4 c8ظNl!3NW#2KxVa0.04$Gdd~31K߅rI@6Ns VE};V7Q_m C !t4m5vb{~["/NK-k}S6.NSg]c&> d^Lfe>86?xAA2l9e%*Х0yΡeP[gRݦ*Ł!K?\]zBWy@YY}l2F!TO񍦠 (iL)ΒS:έKlzOCzMYQ Pu\ E4bt>0_R<3Y4NB-]( TlW.Q(T|;\rCV~dیH׳KV_LN2ypвλ5AXLsıLiO2,`a z[p=9EBN;G"BIqT2=þ6@{ us1ϰs8u%Mv= #2ɲU4 >^Pn\a5_pJguӲB;gڑFl]Cf3: EW0'kXQa.`)9Y,ܞ(nDu\<^nz1펄͐իHy[bDh7 Q-Et8ԙ>VO,.p|713kŌ\Be% o"T#GN=ـfhi ? >R;2;嚤YĤ Yn< gr%QTԼ0( h;hqWF5 @`vT7D={":=vd,^9ϣYĥiO}\L^m`##q=c{VI1GpyF{m$ U8E]=>j ZH;8P91ea^fb ׊u0VCn} ad7Xǰm k ѿ,Pv@wĽ#N-T`P<:m^[IRs9~=tl~^“-P'Ҵ8Z +ݰ2 Es^5{ނ,s'O]l1&_jq$BDQ ~%!$/1Wu*w?m2{@޾^ "0x࣓5z΃/!Z>?ky MpZ[Drnr` lLs@>Rn:khSӔ3qxG%prt|p/R8+'hIU';d$ܵ 인0YDZRc2t joִ6 kIB+*^̃[ǀ.{( ɼi,W u+j3a e&+RP8T ^X Qr2"[k|PHfn"~֥D}tS} A,3b39!}]JZ[nG;O5ER#kT)~(m COohǿ`Kwr~mS-Lx3ɜ*33g&Uv D?nvz7oN~qG|hc7("!=4T >\DKqLbc>k2`xQ7"%[)j؝j ӛ@Y7GzVL601O"];ݤ{2d"]w>;dX%29-,z_Zu>xb]Iw;*Q;Eaծ>L,垺k.b8%;ru{aJ J V QYy-qహ>xսVkеq8!bܞDSCѷoGRIǂvm쑩dm(c`S/MߡtZVQ1G; CYV'(t7-(Cv%J XV4͓C,ϻ4)^ߐaoڣ(0Tea3^8R{PTx&^a.mb.l2h\ mtӬ|L. v©Ŗ64dw8|Nv(9x?cߥ\ch-FN2- +/'}B?nŠDvkδPZ=N@`IlsVQqˊk@1t]˜kَc |2@L.!^ ~[yo*v9 mjB^X7N$ "E2YR$C-ҝ%pXx,5s~0{kznBː=%d/#BAVO5iRUVVX?E/59"ت29Ki3ɧh8jdoq6J%EEb=ȼ?AS5' Uq:68`@an^z4ShnƵRH XqkcI72Š;~kxG=H35NJR7Ta{c9F/zq ](oOA7B` e6WRo#)#`򔢏WS1Zq 60$՞KeCV8]*}]%i>Y n'*5rXqsY"lBaZ~S8<];.ъ$=C#7WWg k0T~rLeAQ;5S -|iaj#"AhO ޅFb W L]#U-, X~rz@o4IH*FaTԁYNիc됰Zt$;ucpZ_Du\&D)v ./?Ԁ\q}ӯvPt81X*8v ;|<:f S79!_ybϙ٠TX4Z1}гJ <@8[RoXhl-ڄn 0$?@xȏK=ا$6V U9 {y`9=wރ}1hʗb*8qo^ K~T"Tr2Z [[NGlWղ'ib#̣XEC~S ,|- ?a6.a:!VXhw +-aSkj̼UsL@f͏q8Yy[҅mF$SU6+1_KYwbh$#ne&OdAx3eC!S-#>I1q]D"DT,c^i]ܮ"f8'#hBȷR-+." <oc.wߴD.hrrb!auO'nb<qMLuW"4sC/`}eMz}2 IQU{tV⟲a.fpV\ٟ<&zT!>[c*zC/ŀBy Ķ pm%lclC?nb :K`&RH~-K;(X1zkYw_wJT$Wn1}/k0tpi9ט = ,du{ٕxiBY:|`j{+PiB~osdnIg'__oݜMN^&o]}}l {yK}r$XV8&13JkiBYF73G!ҒS ס}f%oS 8QK:ϲ%%4ڲ4U~ŝ87D1'1(;V:6u.j廨stMHE#F"W)I5q\\;i7Z_4퍀#DDݲvAN+.w~2YspN,px@ xL[=m2woH̚%7VĈ]5(jg| "wN}/sqQ Vȸ5S;5ZT٥!vaO%׷@.9/uV7`VӅ9]Z|;eݿ)?j7Q6~NKk vz#4\غpKټq;%s}1"93NȺYަhSմ<%7z WHd@(yMU#ދ?D 0ϑ|van;oP_MD"0[Z)!fx_W5)҆HFT)$wr4_poB. yxf~43@Ȍ} ?X&4&k*S{ V 1opDp\ʿY4A[4'|9eV1}6TDa1Uu|"lR/5FѨF#lxPdzgdu iC:o20V$ha* _<8wiڝ4̤ڤA'i%=5ȥkWM_ɢA}i\ Y3cxRZ aatB_j: hI[H/yڜ|k @(P3H#d3$ W6/W6! Ltm06cpnAMG|L̝-^ TA+}6: oI ѭXpv>~r1>0%KͲ|S+EβЕQDԪv"D 9 P7K]Th23 {†]ҶO'(Ykk/wwކ% ɍcCFB"M|C7Yaͻ<l1IhL&`F_TJ`*#/ak‰ BoMiAP>y.t翪pA:Nߙ *Shj+nj,VL]g=SnůFaF9k Qգ'no V]ӧr=3?eg0ɑc(0}m$d곽ܳdc?o5aq݅ë>!S8J KB؂z0UVg3/Jpئ/b'tU6=/wt *#l\0>cjB_IzBkZAA#c7m8C̷|_s.;aC &8Lφ`R!q)8ޭ@kJg,CKX>X Aj8 q 85/o~8%)*b>Mr5oOUjѶYaषz-xeOl KO|̠F/N)Zxˀ湚:ўI"C7M-~tf@XЍ!U,xdqwCv[^Xl]5)^SCҰ!Acf0g6#KȪy!}\w^KR9w@:8vM \_߄&F,SltG1٦50a7 p霺t0Vsԏ$( VٖL7tj; ݏlb'.MԛF<pV/~@Q=]Ob ,m d ˠ " (*fil`DiSQ*auﰾ;@PJzExܢέd~гӞ-6LW~;wi"AP׎'/><Xw>^*Lc r#ڞ\6:Xُ!j(ߪH"sıGjmuy˒JCwqB6h>I!M(-A! uVqVm>R9h#Qشv򾲦&Ĝ9 =}s2t.m_[Tg@^Q{[1Niۼk=g33P%?"bC|J@}vXԤz 2KT-`R,?`T=#3`eUWR@L ZLpJyTvcQU{!o vܿGoߐ7LpЖh эLxR,QVF`6$$3"Z4,E]cCtάLfl rnBfUf—2X">د/0tP.7`kv"e*fD ۉ;TJ`řzICA- RҥjR [|qY} A\L%)GQ r2cw8hD|b]l+3O'(*n(ڀVU$Vgbs} bBP+fd]˫VLoz-Ufo*ykcT1y=?ɰoH]m\w'UZ(dԶPGB_NݯP}GW|+2u#?~@#UҰA*/OO r-@~]GeflqW]N(:L 2-10ƅ#Kwc) .#s`=|6^C#x#y؀ i)}eÐ4,uXZZ|؊1^mR زޝ.p ~ۏ/v\O쇼ҎP1rzh߿N% ae#k)`yz xP7)ޔgM@YCK.Xwi%'^/0^oLq8}ǒBxm(5b%e>A&55S33j2HqnE5rwrϠ7?c7 ܝ),žZ*aGY/,H>D2LZ1wےwcmQAȚ‽ZLI͡Ú"{eɻ]cIJD(3)=|e7r'vfh( ˒Q5&Kt#j 3#e6XӞǒ ydS&haDG`H UD0.|Q a-j{2/'lkƅ6`L#(y mVLb> C._Phs$BES;EoHΓ" P$(LjD2}L<غᎣ|r}M'Rj[ Nqa+o& @K)\DfXHx MV 4{O=BcR}PdC G#an].fv=37F qi"Mh)3G_QO3No g%3(? 2ja%Z>3rb=-e+~XN^Е[XLi0M?،Fg Vt6߰]H2wVTgsc/a)ʡo˰_PlbZ aF#vU zPMb.{FWp{%R5?W-{ߟ@{Utld~I";X*e@NZMNfxeֺ-TvJ\LůxB˶ WX$HťM` 4ڞT>/WF+{跏%S% 2z9dm~y{0D f5 (z숕,0,ކpqAM*<9Hw%7sLXuJ5%/0ڲ!;RWOa~˼(SXtN6gQJ,R H~ѾrN+u]GKmABD|J!,"ÿmCtєHY$`TpQz#f" @ui9W- K1AK\`@rxyM-JpxcŻ}N@6j;ߑk 7|GI_|ضJ,jgU[POicxnshta)7|sS몸_!,ς`Lu?>l)H6Y=Pd%9  Hh]fɥ:֋Y5#S8+"whD ϓ.j[t)ޝLg"~w\Y.Bp W4?|C Q—#`~]Vz rT $]r@韵ER^R,i^ZŁ܎pƪSe0٪dh؁~2 NXpido<:A&]NÔ^D}+=g EM|&snYô'+o^tU`p!N]auEDAP02qnktU\mS=\ .eeB9% OG Rxmc"uu6$k q&k*-h6[(e}D'OttG~|7+\K*PJۏ0N_@eDekzX,wߪkM\`E;!pgr8,2%VD= `݁ײX\lTݳO{4Vُ~yUaĿ }<:4Kթa+;H8x7" #`']`CÜ Z_^@.f;]*`'{CO.-ZO讋 #4we/+i|yնb!0Gl̛"|*vb/K&qOܝzn3o:pm ut j )zZ aY3n#rۂn(RyOVSikIV9 r+MPM{D䳓bk5UjAm7F䮆x`P^oeI׋)LO"1-/E)kxe"+saL9Jݏ^i'xDO''O,ˋAs>zyƊ#IX}M0{PGu\ᥙQsOo=q[Ζ@]/CG+׷λ.bI&IX[i'Ϛ7ȺNq %ARHmKB O-fRY`i ƊmH!y9ҏN2BmrE0OXv>.d>*8`~_` stp+83:@@?W6?vw6ִQ4[&aO/7BV\VcbJ3΢tFѺ&_ SPgQń]N%՟ 0ʢH D̝(k8f"kcmܚ/|'3U!PQ8JQbHY5wemt=md)!{y ?66gq\BskYjFؖhi(6w=3\&Sn.tx=9Ƅ|1<6Is~`aޯ Q+ -(W]b&^U uω{ACVS{@dU}K阫t7 7/&f>W ~d!:jYAOt}16ȫS:-g=m|ҕlԚF9%/|TċW)Kw:o*NۇG J&F,oFɁuPgf@ ˎ}?Ut{Yk!와:=!;EY!B"tkeb`['h|n8[: L M)1,2\D)[\=iouJC0RT]h ~`*QGn;G;$O]Kaٍ|b.$' *(n QNq'e&vky[NY +}ݬ ⡁|oH 'S8!$<,%/giSldւ"g\;<V#>m-%>Ӽ\hKUAa^2̬ ' x~e*(׾}mS9'-`PMhYN .Xlqj5K/3q2HHřN㌑2p#'!|7Rϼj9}Th.0(-!%O[)6LyV|DӇiP)ӊ@3S2!D؞k;@sk38:n9 ˮy-ez պDV8Bud@ܧJK2 -.gt4es?1㝙0mLKB+V|w D%=Tr¯;W^/)ӇVXRVuxCFsd_Ԕ B\S64jb4b;\@Ɠ55tkt!ǽm(&^XÍfy'O&gs|_vBxm7]SX-:0r`V6Pz-:zb#TA#9קO7 .#ͤ—l#6t 扴  >R$Ƅ@9c$Ff$χ"F”J^ͮV{ R#k֓yHqQH--P ʹ6&YI` X` =!ŭS#6By 6x_1 6ĹElJ3]9[l``;M5J|k? 5wy ;IC$p-6nC#۽9x[Uޱ?dKwU wb4$MzV%ݵJ\fZ-&~v=^GSZICF͛XX 1 [1sb D55N;UfIS *D(}/%7qRK4H)Mv4E6hMu{70IyLq_-;S[XZO1YOr>2]n 95(ksY9r^z(Va(gc.iԾG@:BFA!H&ܜײ&v3.PW7gX~3ݫVTurGZ_ +_ʴYUWEȰX!5Vsmliq%#MĦ-͐z :t~/03ɜ{|ee`Iom[D1}qOxlǕ\Jė1~)_'Am;X~sVј8@@,@΍Zߌ5C]  /h3mGEr}`oڐO-r˟w%S_J*.sqʘ;x?3D v{F4.`9S|Wlt[MT#f]D^ v~ #}M:"3SX1I8mW/ȷeKq寽SYzdRiUymT 6 9$"-+]>ХzZu@[ZPoVRGD{lA~đlBځȊ`b*Nhj ʼ,fU!)[MZ#N{ xn^>`~d=JbV"lv~Ou,PX{aLyDYL;GRx~Uムl =7en4e?{ άwFPEd <[o\U#6d[6Z#:? ):̓ob%O^|ݯK&s>aREB8' ⷂ W0̀{ /ֲmUFf HNS=oԺHK5_gx[ʱx.WZZq߸FŻ֝,17 ^dלc|s0/,pSOɃ m~rTW8+5)JF{&8tKRXnD[th~~{8Oi̠o .ђ)FA@r>\c:ol-#5ҦW֏9E{es fafC>{z3N?x܏1$112B(7GM+nRycWUzvαX٢@{:p֒ YA20qhiFqYADj煸MQ4nJV?sr ;e߿U)a[}\rJiAHgQ(uV6x?QZ [M.9-R^;d%YVJ, DKH@~;u7n2&RE@ @hU?o+ Vl}f #`T 3~Ej|Gv{ 9S䱖gҰlTR *vNE|FpL`ʤ^| Aص'i)Fۨ,E)S&ljY`aOەI,hSUt![pA =d"^Y/t W@NV&ۜ0CWJj֒Gy$TsJ,GD+*)˷3M/I($wd!u_ ߎT0TnQΛk|6)s:'4Usd b[ˢbr͆ցlTᎇ_ZXG,778z4ƀxXɭ9P;IH]/d{mb [E/o72ػ*hpɸwpfDI_ ,8ഝ^m%cg7DA`㈘&ߴMO_}GQԊ|U3!T0y!!/8ۄջ,ӭ~o#Ͽ=t(Ф.nͺO:; +#A=WQGU:Tp-VV4|> D3R~<;@2 S;M#.xo3PTGq?;hjQp1;rS L 4 +5}>&ɸǔO8NozTӗh.` ]dPP0$<\*&`'hSJaP,F<ŝ  %,Hx*7Oɭ5KPkO'@:qn$Ғ1:J9)Wo00۲rL.,hw.=/\81xt$UJ-;\p.tRpoNEis-;c?8 ӿ6ys;58H_"7 ŏޭ5 Fi ƏlBdj@(X)z`|:J% @p?1CMPuU@Ex%4Y-K vH^zW+i.G&<%[)QQ,ݰm8Ӫs>m ץ#i lczd'MF J^Co9 EjT~j[j?⍀XV6BJM0#sg-=n*@sAיX0{(CY"戁Sp af A|>l.n%an8+q/r=20ِBaY٭!x6yt Ed&\x_yP&|'+"(33YL}+whM!GY5~A (kˊGok݄|!$4%osDzg{Bljײ72ItHKgGLhKUʽ^?yuu]Uq9-eipQGU(2SP~*;RLt_/O*4cUP)`N(=щtOqY^mNҮJ',4F!wpI9j7;kl:[l%p剟rȍH LyǨߣT@9tYS?| %V|d5CxYU>bLxjV5VۇBKlwQsύ_+SXMȮ,ۙjla# Ӥvs^;σ4/{9-t)!*x3k%p8#[f j  %[\%D/#46LXڵ)ZA#MCX.، {;D6ơMK蝀J6;52KhnUc6jXpmAv6} HeÐ?r[öuFuQG=3=ǃpmoFj ^;Myze-b+p.ѓNuYF.bt1(G-jZkJqY->T 5,mZZWkX엖CސnK`LIt\OrqQ>ڢ̋t.YCT@-3/ ~SЍfIWZ߾ƿS甆aM$|=YFKV!( >=JZg5bDxjEu'yks|r"[ӈFuP-+w#(%vdC"niԹ#5f3G0(I|_3R6` ItGxI^ Ga{}3M1  Dul;/:,fBtD@E/ Gٔ"MġA\xDIi"!}(Lʒ#Zs!)#q{=LjI;)/ؓpY2ċ.E<%48jd[[v1S|>V~.7,A_olpxuumQ%dRT>$uhI< ATW'lJ/Da[<$k8R2>4fD&TW5A(.MEm, -u^]Z}}dC\,ԍzu"X#siTW ͠AE,>Pc@h./˲Aià }4ܵzVQYB}?D9{NGw*oVinRa]\UlD@B#Vɗ_ԫry X"f % bsMmEUM33!"^`fp L5+a9?ʢcqܙ_Zj;g-\k3 |ƒ_\(\IgDbB~H]Iڤ)?kY#Drds:i]6 &kWNMPr+oK!]2AxJMZƞ.ֲ|QxAU_\TbQb>v/?o)I֣t0ȯډ*()WtyңMyWMhu#MG'F> CWT=W#'s̾MqV\C쨶sSb+Dӄϫ0\5:~N H-Ԋ!`qQND1mkFBŐ<1 `!Og%`Z;` `r-Bi8諊3Au4܈L-l&/$* 27aLy[+ސR(?*bgO ӔQԺa)G5Je)$'bzE&ZyXc ?H"$<0~MƝJncP<ļN4#{9bp/ᣖ~*bAP|*5FD&?-^]%^FR+t@A$'! Qen:㫡wXg?R%SC-!qW~۷ 5 CuUߢsal7@2D|Z%aVSMK5*]]t8韼( sjy9tnWߋh$C&9!V2|Z  bKzX#JYH?FOgۼ&>q T;B1Z5g{о\@8=[Dn'B Om}"\Si+Z5esTL"S8h}禱IQ\8d"!H#.Dڐ=QWک)S69 d'^ZWWrtU ,Yq68r.y g}cbDr9 ~Er5 ՚)n,ﰟ̏D l- l5Njdo\@_n "oECЈ%;FB-zrBO|L ^#AV'׮録:n!^L6l ]wJU!alAY5j셌a 0899!_<">QKz*w( Dh|ְ{j]:+"s@ w^W\(l90&s km _9Bxַ9S%\:G,8ǡ^˛_膔=~F(ZH|r F8m55r{6!5#PE|h>2^ eWj=2AXovG8vOZ~S$q9/9woXo:Y-6ui$E7Wc6@;$_Zy)*ˇKB.w L,I*A%"Z#1Þk;E!ȵmIM}#ع=f ^[/(o1l<vQRdZdH*'a-1}7#sXuI՞=ya0dtDN-I&HCW t&L #/KM\;W@*$ērGGǨ)a;6L;gB <(ted&(C3IK*|i R2%;T}ٛ1^+b#\R}m_5-> 풾ZM9Lbu^o78dC5jefrmțn$ˌBtK"":OC3sZ=\o3Ha3*ON<?!T!BK.2P5E9}Q]--jVkTxpoZfν%V|d[ti5;P%M8?Hn͏1l6Ӭyhv.yi '3tt|`RegѳI̞Kss&;M. ba'Ӝ4ݶs#СP K(Ϥt5I!n<1ń0T$s ۸]ʥ&ƽ"@/t2sO[,ү k;|Z0X(Y!J|) <=l؁ߙ&|PŖn g[TJC0ԝ#p(<B\y_(N+-C ?S|#)oȗuyը}_)C@[ X=~iqi?xg "6t,OS%;WTZr# zM[YJkBpfO<~.Q<ޣHq5`AzȺ c=rh|(1Y(ʳRh #dIV ߕ]L+wK0&{_(l |=ƻZt;a-'T }qnkr *.psFXhL!֔(@*LVT զ]Fv@Rka4NM|:EbɆx$wNRV 0`8-Y#4:Cq5'-=3`s)mJAk| ԯO`0#|n~զ/S]76;4 񠰠pjPb !3͌F9|N_tMT bHԬ0zKd6RNyMחY覡y,S ³`BdC8};Ԍk_ωu3ʳJsD0@g=צ_&ɹtRGKah*4\(\8~G7=h6Vv 50Ku]Lxֹ*fat^"%|r+vNJ?j- /_NePul'Tx ugAgDٓCJyb夿ŁF3p4Dv݋u<+?7g 9age c3۷0%3tA_9# z1oZk!F S4sj%-#x`[;[9AƑ' +ºn'I+`#~aP~~Tkřk+^:{g]ƕ1 LlQֵ8HZjT5DܸlbDQN$KMRrwNXSrSB斾_x'V0+h|xia ̊}@usU: bstt︹.To-b7El9|g3d֩urvE義ףi< B0'M">oFʰP.XtxDO֓IcHAwZ+7gpV;_W ҃M{Ѻ6.Q:6qk,˪7%3O8p(vq$e[eF 9yګFsR9E֌]g(Fp왛&/O'5Ey]8 ҁ[+M ; 9Km@O5S$%f5+͕[@k^&Җ G r&",ٽ vy>|ڙMR-wYQvz0K;9& dO -~}㨀Dfp:v+ [\1Sv5O<1 *&.^jbڷ^)itB_+=LJp1֏)&ǹ=-bVT:muzaXwPiCUML>>it[ݜHMU >?:S( O:5=6`%0z<} @X9nlGx2%kY깑تHI}2@_Kck]iEN~ǷfAe48;Is9dʯ#ES:)4jWc}޽bs+Z٣ߍkY<;v' Xk#rEj= i_ɼaky*®7{1Nk?gxE5xX^RҕZi;'BVū18q iJ3*E~Ix6N,$3bA1{ye!Ljx*7*9hAdc !Ԡ0J ڌ{;k@~LvO+>ZAT2 M)\o(F܉J0DmN2*cʪ]ruʠ@ƃNhcԵP ȶܝg?fvKA#<%S n5Ň󤜘qt&1BZ\,wʸK=>֘2+ڎԨuZP@wl%1l-\? jLƱI9&}.3U6[.mw}`Z3+ !Ubx$qfzg}Fe[i;jɴH n!FHkRqi%x})`J[D.~!M$~Q lP34;{2TB4H&(EX_ۛb t62ˆi,bY+[\:W촸tiA+['E]GP>xOH"tYXreϜSZ(d{yfmф@žIXڨLM\;/\o@_nXH]?:O["ܟ|͐J뫸IǺ4ͤ;'`qsAD2Lj\}|J2Ye5WW۔6'I P [{hj(:;s(6{~+4J<# >=*kby1l!+T_&E !n-ۺ9 ou=$:6$xҗIAϬKwqfزx̕Ũ =nJ?3j#K4C8[whέqV<%'!́<V|IFrTs[) uDN؞S͐ocIw^ONoף'W] ~c_tkO-)V/ݷ*h3eOe2X7JVbLB#BI?}/yx~s"oCl.؎̤I7窺LmH`G5Nz[dV%]VPO~$ &8VQ)[W@~=?($9Ѿ*+G!_|ru =%)VGi&2[%垈KQ Z4^y^pi1npn Xk ^ҌEvl Y R˷NH1͈̑.~>S 69NX-`Z`ay$.hY}ᤔ_SnQBS Z±U#K#gܒI5ESxW(~G e:DD"@$W]"˺Zfd q"ldD`/֝?Wf*Rk6r(azA\7*d4+@`ZWcр {BCe!oJW&TB'T#ݩue&Z3*SF DcLq[G X+ɋlbVq$$#ݝӳ[.D E0yX,Ž#Ojʱ&z"V%OrB4zklˬ/4(Rܻatg݂]P1\?ra)x EqFȋj/l\P7d0OroȴðR6LEx|֎v7s(Κ$RQzZ"=nu[ÆNk;Z0j2;Xs46[&%/We.õW}p -ۨq䈡I/\^"raOAR;*An 2i(oX^ܪMM#Y]ueGXvsF,gh;P_#qzEv -} L~&1P}PS2ωG sA]o51ቪ`f<=L]h\C@3;$gYvC{ B~9 NTC!S%ChjG|9U2.pSD]*yfWJMF#d5b '6}O9c n—bdo T H;)ǂPhJl6 lPC`UU[:p3`ϵqg ?\iEF G %WB/Mq~5LP=NOD$zJ3TgaB+рO|gLӖD~WvŨɿd|p[Ȋ]Xp(Bm3ό$^ZQq"9?I*EHk7zc]^6 ?2D)1ťߍκY١:\5Jԉ9=i)UGj'V-EDoDZ.?몤QdSFnβϷFcLg K#EmrqH(m3f=1@y`.AIAlL b)ҝl_zjE)sp76d%OwޕW *4~0/f\58VۯQ5 "9m]ǀR0T8N4}YAl)6!CƟ@{Y[hSuǩ7|=ֆEEk CO)w>F#2sb=:q 5mJf̽&@L7@,D.>s3G5OC%pFr| Dz$70C[Y|DZ b h8p_8B`l&#<ضEZ+ߣ['nݾaER|/݋uƆs ;tNǚQÀ֚ RsP# \}> \QRINZn2M99xEҔV!ұ! $H(!a1(U.{P U2' 2F%.FAۂd+LJV<.#@̼縒1G=.Sa͕eDJ9GQ"'@gyr;-*Din5$*?ftW*ϥL=%ECP||>_B@"6֞(#r%-L-^Akg7ǗDھp+: z~ /b}i99Jv~Dh뾵k-,l^P' fEt_pˍFc( gioZ1c.=~fp˸>)& QL0<ÐdA(D`pU"4Vv*}9.\tO AF- ȲJ]t=86-OboozKpG%^L3 m:cg:4"Kq&au*OFd`t\Ϭ#NCkƊS)mmsv`t۴̡@!^3q%aHkߩZk 1WY!P`!qRYQTy ~NE$oנ;ס[*W,#@~$ƌ+hPZ?hqO:j]hbv,ZYE6: K/XE7zi x2@u{ns^FQre%5.:PzSOtXeĸZ=*#yTDnNˮ/hZc#S H 0qD *;~۟YbڧםРcl tMK,)nAGԥJt4C hFھc7@0H5ribϩTNB_zko2I>Y 57Qef[2{(*<QveWdbȂ^yy#r4 0ox6u|9\.~Xn)~;tEOSd|4!ЗZ@U͍Zd&ΐy^@+{D.)-TJ}}q'gnxp kbb.!~LP4g y {u-7rjU6 4/[yԡQ6k'23lhZKl)˘ij4Pd2G2 ndYU,*I\;'xUY >31}N~|9}- #!ԣ]kfjLe֑U;.sPY@CijqC^"l"bf?Sz/R4Te(ZQzkq0M7 g=S]읆8 H6"N,GP+C+2oJA]ßV`ͩ9V+$kh'wUtՇP6 nD~*L=MOLsocVR}EYрiPXoE*=yU:EgA'>r%NdU+S Wk^0|Hĺ"zY"t)'v35_|5㙞ēi~fu/<3T䜫Ogl"rsMoϊK!x9b *si vsXA  @R_bu#h?ne OkȇtLdc "f 8WOfCh7yZ#D6Xm"ڕZ'@>F U`rp@=72v骶q`/Ca@Zz^gz"u1|er`wAK F+"n0zTcUZ91y5˃݅'ފ$uB-i#.}U臂cIu0}QHU\_ZÖAri x>+૟秡YmPI`۾;0R $4PV,lc *ޤW"ƅ8~ uZ&'kTʃE=7URQn(V q_z:"ě!EoK䲝IdK&.2J ފtȜBcbQ5.w߆>6 ٛPǯ뾺{_c0gXVu(RWAP B8q͒'p2%+sA;3'+ =aB._Gq4"IOY!tDu]݀27Vjzs0 ט)G4 yXD;$/J. ]H6t%nU} x;|YƤ3 #b15- ,l]#>P5;jA!ǥ!Q|%,H)Nr:{s`p|)cz @/ ͧ5y7yUM^s_S;Ϝ6UM@MD5 YEbbF{R3 ܒH>e%Jt)ALJz (Gp`)* :}_] =,|tuP勞@9OGx@=<#9q9n0әe!@6v Bh |S ygJ-YR;S0XMȬ򫴬;(>Ry^vqo!e6G!ƵmP*hLEt>s$kCm6 X(H&AAv,! 7šg r3F@ ȭWBwfDXKtv~k+]8}|[^m̕"0=:ޣ]+}v^2dx;*?3RP 3&X>H[RF,fsM&3]3_1 - b_Vd5RB!Rs&5^Th^_ٙ(<ﶤHL&u~xԑcl5/ˋ ?d74%nKV 7Rیt]æ gl5zl8r;`I|>Ins <" 6*7+ ?~D( уj$q_QXry3>ufOOo*T:!?D@) b]{$7`=vyg T*97ɬ 'ȵxmu_'1m{ϙ kZ8l!g3qBG0++P7W\|ƃ}/^D0̶c\)~m3YeJ}:k. ysAcz&=Qk DB(Pr6968_\22)BTJtƇ I"x\)AvU:9刎̨lVx#."wIuE*BmlŃ|([,˩'҉ j[3FA?XJy\\0@46 _i'^9d襤JuAgAǪIb5'L8.U%q:  b7{VjXG=fy5ON8//N1jرBᑣbm0Uji&azLJ ~J}@yo3(V E8"dA Q5$ H$<y׭s^\d&;ҥR]K+S򸂱*eڝì7vS-pYn_F͑e8JZh#+uw<֘C}* :ފ/|sbG:Yz% J׷% Hj {&YMdp⣶Pb\kp4Z.Phֆc\gc}f Ho~TDrwB@(Ys#^hΛkɏ*Z"{] (Em)VFfA]@% G"u~~]+ )#"e'_Nxf|fl34r4I;gh }¯C#{w(z|9oTm"1("/{w yT0 oO4̣{M 15U+Hs&Zg}I .u4/, dsAw08D62Dhh00^/1)jtO꘵r]^ bD޹l|ƂxM;9b~@cXޘo,Zl4GFk\7@4ucǩ1*;>!5Trswo #ȾTkoS<&-D"=PRG3}Ӓ+/9zh+3tႜ@-5Dk9@)N7W ˟7ohĵ{ø[xw),jkxh[N_>I~."?F>~-]!1--G焵Av!J; rYT@; i5\@"s;ܴ-%F XYg4+!R+\% EeUjfyY}\%X0+qMB}7vZJ3ѝr\GO''l͎7{ 8ڽjFFNVꍼ,/0G_۝IЏlމbt3e&ٮj>;%B$i$eQpjfΊF^ o$ SɽS&vE'?tb9Qt z." o}& Y7F[7";b-UjVZS+V0OO|λR(?"hj@>PXf!JErPɜ(VsvOX ]u J=ttgųثhP0dU9xE"b@nKA51wpMyH@V-9])tPl^ !4Ԭ>jdkcu~%,i-DjqsY7P,?"~T|z]WKDu3OID=!+{ezoZ9r5@(}a1x絬bF<ܰVj^s$z:"" <-v8hpە$ZwQ:Gi{iQ}9JQF( =(FiH:bo#clL>di6L)Wǩe$g2rn+T]Ӽ6M$ҙOuŽ}.ldo5#1'gf&@+>d% 3MJm$wݮPNw2~hV=qpQY|W}·_Gkjrf@>*>tqyw^,9jgElmmNhB8E^7ˇA&9j,x&6:7%z >784+JX?F%,G )u~V BRH]F!@0c 6,c.ÍMIlLpL*  lh6,¼|0-|W-d]UE$1aO} Gw"ͧK(LK lցꁂUDeY7(.ڎ@T|sK3A ˯ 'H3̄*9Cy49Q|;Q>VF% Öw/u0*?Ɵ]\iV3ڨZ;sHʯ+lV^I[l %L'Wʽ^4&ŎGxz֝? mx)Z'O_L&1޵ Ո'lO'‰C16 9 B"(5"5Z"ItU|]a$:D;7Y]ٙK؉h9eK0PժِbK*$WJV$% TF1:_|6zgD%#dTQu ieié2y=}m~"@:sA8>Í>T)q sB($!lVJ0t#;^,R\4eG ?q^2s$,bYz8zŰ\Ҭ2в9`ce &%g%}-0i \CI Ɇ~YݫךUXiu,)B6_]ڙ|JAxRmgGOcGhzj:N~ 7A.x(^(\37^ҟԧ!|Uĕ1|s2ob]=kie>Ndn# RB}UŶ;J7h+"f8 _~ǣ4~i@1߿ؾy dLK o.,Q h!ׇup󶔂]6EVj`Vz Ű$IUx!.2/x\]|aIFEQ$7d z:Cɯx,ABuH$ʹ(9Zh+%f [/*v"AY <*撛%vD1RCr"b9U2)e*E͊c'최$|WW3n8k։/ ^h9vzg7Ilf9[;,f+gb[6+#ekT#.^?Ka$z)Ys˾~օ' _i2ZθI m6E;2ȆaGCٹ`` Ё>@mE~x"TP /N>N=ņ?@؛:p\NbNz6qR[R)S{$;i"է\>)ӫ7K?cϰn[ZWGbEPgȼ9aI2|ku\(KIR<*!Ep;Wrtw]=Z|qv;m0=-YE K*}k'!:61>p+ BZn8)"NUilcU_I+\is0/?/ϴPu_ 8܋)DO',r..NORz9mvĖ+GAG\|iy߼&cRدA?_hR !$`pq#/2>6Q-Cp!aݺA%ʉƤQ8Qa)~ϱ X\r0,82eP.s:Q>&rr9-eE)#դP~|%/x?t얟T/ʋɥD-bd,Y,=fYxܗ^&)!LO@#MfNaVyfue{ !MˆmtV"Tm/~4/#N쁽eLF\TaG5 e&`dz8KD6;Ě* d89 (@=79Q.o@ IiZSW^S)n^\dxAfk Qp[% Y-9#߰o}@*iK WJe>f a-{/;k&F7?0e@ .R3 \X܋vsT򖺙wv[*j0Lѹ&NbnNkRXܰK,aO|VqFc`p= ^-o%`V%0߃C~{{ G 0hS6Sw0q)3/+`^cQyzWP4Ld7_my$k8.(B͞[/AӽUd 7XIK!dv)P:ܟ_چJWm+S /zk.ӎB)*7'aBIAp!2` Tb@ֈZwR@NmȤ@"6_ VT,D~>|ņ ?q1E8(Fo@Քْ%ӌgnL13λ逃EIuA96d9| '2;"@H YJ hŭy-0B;qH,fýx5اc CĖS d[pGј!MnaniN[o@RpCUUUD)iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiix! Dpd {k%d =v~#bB{gvs>M#zBwZsh:V 8ɤudcJoHh(>r^I濗qm,txf_ek'9]GN[NұbB>#hru!}^>`[pw]]r[9,N5tVNY蛬a~_F@jcTCL]!̑ \uP;=LDf3kF+pr2{qyTa8G6֊/TԸ&X5`6er8fu@.Inj$ZB]i)ZZw *JTljWBlGX.XLѦk#x|W`")pJH`JWxI',~qxܜm}|U)O&n:BдL+5)007[\ ?4ש>5eb9|v~892 =j-)0& n5SмaZy)eYK3 d zG٭BwM)}Go/^xOjJ:q -7$B"vTH f`LJ%hHvֵRܓs 8O+a 0<2P@ %HL&iAYmu.!bEEk/u$*4ֺ ac{U/*;pɦ"ʃ/h %ctwoBѸ+TKJ#7XmU{6̽Ȅ D۠wY0%SȀCBCY#o&)ܤ[R_c i !`9!mi}x-pwCHy_Q<Ty=;thaϻ_gZ=\-9?̫ uMOp!@ g̯7iߩuZJiRIUX߾B_kH$,.XT5%c15+WL.а<Zs owqfRJRs^` An2%V_(NS T T XV9 :8It=V,(FoɷAZH|TmeQ.S2[5sSYt)qVGQ1׉謺"ҝq{>fޘ1klm׺6cчWts0h v]\$¡?0۞#un_o 6 Vt*~sp! "wԏ5ʪXJo6G R%Ҳ*T`FZ\vUdOE72]St_#ϔz2E<yAfQ qZU6B26n]Wj95@Eݵw=weh.~7( X Ǎ$+ )J䞷*]mhʦoiL1= QÑG3KGϡX# f &"F$ G/"e-*3L$sACՖqR̝S(`sEÐPrm37iT`5ow xrv{Wlƅ2t4ޣIrNY2|,c-6CAT !AY3]XkSkΝXZےWR%,׶YJ^LHCz4JƔ&lHVJ>EoXGg݆<Au2'W'̙Šu`SI4P s#9~SL’ OำRQ='>U9M{ch#2DbS l)Ez3PODJr̽cI{5R4.jqP~uvpO*vTXtgitZRf W]sqp!CpN[Q9```+0nb47p~0Cv'I%F@ϱj⽍" 4/`l= 7Nx0moaR_0v1frL9ɻ)xi * ]}'86ҹu}؁W[Uw}h \:TퟴzLJn[īNDrUFcצ%*]\GUvAW;v&qA F ğeL_)?rL`fHpu=g,@hlzP\# g6jjJ{ D`ؘp!P(2-^@(/1+ϜTW)~6#2TMh`Tn$ntkN6fP<_tߌ0 P ʫNYf9LB0@;Cej}sG. ~Om-BR:ܭ+/H`ܾƋx̹ہTW< -@x`*`HeVStp2'~a.6!dm@dtd]}!ByB6^|VD!!EJ)BcS*)KD7$Z!n&ZwS?Cdn/e>oblWymO.C:5޻D^3Y9Ց>/ix޶[?> :m f!v57Aũo嚪3\>6& B2*P*4 HCI͠kӀj[PIH++ۯQ^Z^5ia*_Q u!@Kf$µ_k$K Ңr8uukOź\%=VQܴ%/8. WG-#SDZf%5<{`WF͂k?c?xw2Mr_ߛ`TS[`}}rX Ё.z( X! u@bvU.zJUK. ʽMU?T&?nur ; 5vUVM[Q >KvLg,ULUí!y%=4YtĒ>#ڧ/~m89V>aT-KVvc/Ģ3.{+Y"!&iׇz0︦h-x  +CSogB1J2jʿ^bMķE:ƮhNK{DvdXSgǗ+jQfO/oNmJԗCJ݂ q#ĢXX[nVLMiuR[vZO7rO X\@/;2n)~zh5hj*\ !'ҹߏ+kW䀆l|6me !kg/T?۔y?ܴ>\g,ڛC:Ra\&3YF }xzcf="tl򈸄ZnlѲLlO\V;[ G׎$emGp*I9$JӒ_WF4HldmF |VwI[.dIRkfL2BӰQ"";nreV(V+XH FC#5B0j^MUN. B`>ca{7L\ȓ4Hp7=.0P4JFYU{ICBBe&@E5'< 1E芟k1UXtF9[$ËC?n˾HRzln|{ BumʠQ"Dڜ`;BM2ƆeȥΛSr{&'T %A.9%(ʏ; A.%qDp[)!a`V"PjMdB.:dmOvW}ލHNp=~y@\61 y[7΁OՋ/|lGy~`- 8oUc^. @g]Gz{~=Z!Ûcg,V8wWA;H*ю&i$ Mr=B>gvHݓaYsN{i{kQpņɩfEv Ic#V:+*Y)>UmN+Y]KZL9/xk3rN W`/]m1GTtIFI~݅m6V&vX󭠆,>7m߶ ϵ}(uM8fM6} PvϢ}M%[QZC铰A&6>5teoјH(o׶rRKd>1fD;G~c;,(R Ϻl2-*)x:f HQ\5/=m'&1㒙 PVOyrw.XcODHb@BMռEX%W0zS1/< :,;Jj6ӌIj"M=G_{Y|޿ig3ѯ\!Z.ΌG=3vf o?~6m#s/kAdij:6D]ꞃ1ˑ`tPs#伥r%%pDyb_ f0=$s ][>ҊU(+!E g ԪWf.:3S +c ˚-6}7e 6Ъ/=!4 #PﷵXdmha {`0 #.[Ko߬ T90#CXIJtG~Fkh19Vhʙ: C -qA/y,jq6Ƨ_̹{j-KJ*K "2(_7L'Wn!pXYo{^w+s mĬ.)(|<6gE{u)5M5)>FQ-պ;*KqFqٕ?snN49$ZbjZo1F׃jpWU˦›vtm?>01#.4 ZuҘRͧ)sb\9E%reou%0qJX&ٯZ " RLd]\c\yh t,jw$`&(({7Hb 0 4@A(lRԴ}N7ԝA,SzScJWVE>[pJp<$u*4% nдL~ ے7LOUw[W>.6Mu47/s7#wMzDEj>qgTC&]Ǹi}?b4sAUe ۶4XVprF]I6{npLݶߢ%_İyw״F|^Ǩ\:7gX~8] 4gGp/+"[6ՠ7mHҖn޾h$W$- XJUY/h$YcvHbLxrL܅KiTiiX}]>T0.P$CJj]i-bb@BveTFqŷCa)wƬpE-LFd%5dU OLF~>Ή"Hc|I˓Ƴre`tMB["H䵌u_UfJK6N Z2S6 s\7{fRcn=-%(: LM$wTM&,VtMd>̤e<} S?M4>ukc%$/5k84!f !As+^Y|jb` `e3fOM КK׭1 aVLt.iLevtRיLEzpp=Ӷc+߰G{[񺏪`{N'3SUs ]\_D4߈8N{6\8jɃ@r ' : ƶsfV [޺vݩ2c֪]㢉d_nIelKnn^o>ܦyW~eCQx_ZZg*n!zTu01*sr+?famW2puQ|Qz>lOܤ}B`)d֭I+@Ԭc߭cS*z1rs ADU w!+Jԅi!DL !Cة7yrЊˬғ4.&Wpmշ?ݣe^\]9Ν; _YhUkN(h,W3S%^\ey3{xIC2;g0ֹ@o8L-Gzx="ٝ ]^0gJܷNHeXN#Ni m=.K=*۰>/+bb-QR8ga)*-*&o %$-Xk("odQr]2xqgISD‰u8nZzmU~H+?2 FP6_Q2 4n<>mοdj m{ Ɩq5TVc5(jyo/4'~z+NY&WQgνdo\WBLrwA̳L5.loDt{*&#<*Tk! @A #RX+Vs+R +M]C[tC)kvs!p)ar"@/\:@6i]PGACbUhm(\xZ3(^Sxy`z: Dl D(UrjWTaaNt (ߟ3ggˣr)֎4RQ;%˲_=)8섘tOﰲy/jS^9q%G[szoQ"xi+t6/ʾSLjgJFJЌ ʂ֬SB! fa !AYL MkT:ͻ'9,-So_Ao<(Ǿ55M؟0(pV[αOrގG'9V\|T?c]uÛZgu k߸e =hFp{0|`ͼ;PM9][M?Of\=]M;+NZ$/$6@K$ڱpe$*aP6&$QW".\WT ]g'5Ur2k|E tp~"HDO3h.өߠ1oU xq]RڂvUN6IQle6Бwyg377q 0T:AԟV?]޲ f[ FΛ5.է{Qw!A~NѢI` 1R잛LWoEI#< N J|uA!0n遵޶k'iʼn-ض]YQޮkԞ! qn]ARk xD/%2v9">'!¸~"BS34.jCP=շ"߶RO{)ch:Ja~k͙~ޚ^#ѫ|~qf\Ty}aB1!7f.$xݪjٕj PM~öv"{zK^ "et%<Ͷ@YGKzɘqỦe;?׍+IB~F 4o´@:L%B1L !@>VmH#0^jJ,7"r'YnWX̮ܐ=jNkY#e%lΞem.k/Bnsc'>2eINݜvlo\5ϫ~{şUcjKLssASH%7>2tHC9=>D0*^ȗ\9hQAX"CJhMJVM5;KFԪW1=yQv>X˷ǴUa xń!` !AleiW|jUam{k|4:,3tb-zݙgEYĹr5)ޗ+Ne =iP/~O|vs#Sx3i6kj˪jGn#hse* T9C~chs#9}wssn\h/(%;&B2'YfwWo*/io˪e6v3WO? \*yǦnQ %k$O-^T95< Rd%ӋLlV'RJ-OIӏ)Ш@/NzM[?N!JB9 TeUx~Q2TI-`2%.XXC|ɺj75z@)Hܽ@vfPP}1 |t6ÌH^hKDP ڭaNS4I6zߵ{sn^5kDr&/pz9 u65zߋZq;lCp⫀ 4w)/^ TW"̪֤[7hF}zl/WSUWNP5VT_+Y K0Lhv_aVn5]=11eo`+0+iIa(; Y_OOG`t+ a VzԛY.iyo+5)<U<љ,Jʮ%sުN*ېCiDq]c5DdJd/ -$C*BDq9hƆCoeZ-=Ԩ9&>?v^,tuM?1}Ŏ)jIm~d6_Q쉏>%iȻ_2t'znԼпk# 䪘0;Dgx=) yR_O!U7N_"¬7 x4 mB>򒘨LcR\c$Ppeݓ|(vڳe#Ǧ9;EZ9vi+8R˾MSX셤B4K B`m%[%KAa)3&Xb]ZegOfi Of^M)-(c.|֐YHbVϾEqx S+Yi a98x Z6NC 5O1me8n魿=ȧxS&-seUDl_fQ*q&BpNU4):~ïM;+0J@1\zzcwDR@Nt h]KN2AIAlLH=o .s)a?jdFx 7Z#~e<x\%+H\u"=UaƨZucgULl< $Nyjb۸뀐Q<"J+t?]ϱgu ƪӔ59{;1zP'b]Dxxh+Z~d>&r)80o- jQs$.Uf>feLFbΩqHHf P,UT=FXD:tgϳ3-Ы#(C90Y {A1nXS{k #4`] 2$;1uVvlq8$ͦ6N !&=c-d;5;זO;QO6HUBFSS"\]C$m1bFmt&ȕ BV%**8W0-rNR ѓ$rXWGHș}:@HNQLʇ(k*gp:K)_8;Υ-kaZn쭚}(sZiP<*¨|qH `3%_;.R[R3Uu+d[M+/>2o^&.R䩑{ #|a}yOz$ n@.YfAw;H-`( ;'vb'qfXn,9 1_$3x9g}4bV/P؁D2ah3Xn@>g k2Li|[ah54ȢJ$YJO:g@Kw}KS:F( 8befIc` %=EA?yz7Vl*ŦC6#%ߡaN!S.ܨtݱ ;x|:*(36z1^6Wxd]/íBP1D'UאMwıM}$V:ҟK:%hYg4SL;w'!h^/lߔ}8s[Yo rPSvSʀX$)ܸ;8}-~ sWv:\:jbwYY >-S<éQxփK(y,TiyҰ1F-vA=|4eCD VC+My-XTb+*<nS>A6G2jy NeՔ>:` ?fmD!3Gm[Hȑ3Ɣ ?bw-~ "؛~f0)`7^3Җx@~ꬽ ?f v䭃GQRrFt uu#JZ6[/Ϧ1X[F yzY~pSSPdtq6Θʍ;2kI)ZM%.>K}ɼLc/%;qX~:$a$'CLbhaK!Vn}~>Ԯ)SRlb17cP޴9e;R(7ff0ǩNk]-&~? )w&9X,@'6F{QrePr@( Owhf{r*b[iIafSl-ظ2&c -G/7]zwd1*1?TL8}b5;hf[^k)@\vQOsd%50BΛ&Hlm (*5ZWgJ)gD6;)ʔ i z fLMA }}c!}.KQ'5D4#IcbIb9d!M .8VrkPٶ)<N{Jq$P@Kg YikOϙcaC,c=O>UBCΑFM#ޱj?ͻ20xJ6D=X{Õ(k: 0]"n=1n\(2.\h7uVۉow9/I+}mdj=~ؚ2P#ysH)>5*Ë1\2sT}H&:.:zvZ+{a܎*}ee,e'+ x.C+F7|nݓ3n|В ij4C F [ߡe]Fm2 !q;x @d.BҥfQ3=[/nB8 >^489Ixֲ,yU_sPnH`ۢ fS38ʄ)}1P^ ]sJ|LuUe2C yzؔ4͍ fpҢUx0S]t 1v;HX$+:p+3xP:o2QflϧIcbg{k34~ްG l~h͆3wsXhmrlMnPw/` m+.%IanqX)yިFw 'קI4Ӡ?tŷ`YpTvh,rm*sB8M0#A9s{Cf az#mY70Zd{Uޕe!IPAi8/̉кM6G?oH= (:a7CB"ԿE:xs5hWN9~?PFlUtS#  _f`IT&KIT7v aƐwϢ:]Cs+KkiwyV{ֹԙw$JoPHB_4 Ҧ/\̘A',c#?oq;| &OƽWܝ}934C)':nZfrc`#ԍKhҙ_+b(9GG՘ \7|t ʮO˳܎(RdJɴΓ9tsrJoZꆥfNr.#f%=ጠ.vIsxf$jUI^rr)BܶluNu9 KSZ)7fĶ%uOݗ|ӾhF>-3j<)&+̅ҨKgcPy7Tj166e`򓕤\J[ uA쇆s+шVgD'ǟoOe^ dSߠ밗4)05>,_aZ$PP-!Cr!zk9vfv熖]\n-G=nWhۘ6SΒ϶G%9&es~&H #]xC]E+iܴ%Ef&$%ـLbuVVbEgq6T1;R{ޯ^^3a5s8od(핁ڈYR#T>`tg;O͐N65:nl. Roj*׏ha<$? Dg ]S`A!10{!%.OLd]qOftt2}j]P-#jM R!O)OֆAKl `:pCZ$r ׫ ev\,.:½qJ ?,!fe?B21v&O?AK:Dtm^(z%q;>iuV]]!0[*Pp[O{c u[t/UpZ衵F>MfvAo uQ~ {)p x\IK̳qYHe֯9+QJ`ԫ-# yJ9_̟C5Lw+ҕw?UN c2'Y8 bB47 ԇ 8wf.Ss|wO49_gTũu jJCcߴ{`PٙZ$&-3XQ#1myJM[ Vo?Pr{t~H FWu#X&kډ`߲;bfx@X~\a\f>~>6p"wJDiAzroCqs̍R|*~1?w. 2T_uLn2 ypfh>hb=휒\P@tu];,וI),A0S5(tC$Ni7w% 4:<-ՍTkʢ>9A}Y*)cǧ6c$y[nRP!efeq[$P1tإ5f MU~CݕQ잘Dpt8a_9?}01Ϭ7Y7o>%в@٪qQk)+{kM§˕<mTϊw3*~9 caiIMްծ#hF+S%ܽ0ʤA`c[ $ o!GEhwcR%+/!w -fk//aԂDxstaɡ0즆r!_(κ5H3 [Q9|-^ mMv9BE(RkIx:]8BH㴽Ov)fryl8L&8ГeHQ%GOiON% )d:@=/dsO UoA#ׇCVIo^s ~ftRf~/9MZE@c}, D69a'f|uV{k9xW`y؜$¥pb.h̯lvTv5 ={3z7Y%6G^  ?BxwX"fܻ\{n!{PgTJ@.R~t~wutaxx|뽠r`$БT.DCp[?p&f⇉P9-V  K ++8.~cnn&U&@ymĬ[}7̭߮5W\2-_Ÿr|?w!X i 9ZX5\FU Xe-68 +9?Gj[ vS@>߀)"!}JPQ)8uݢf$.b->jQ~W33aA|@v.]aDU4&%L+ߴ'XLa8Q:z"4)$g"Ǯ֤eC@ _[3.l%2^Բrlv HaS곖 E_XmE" Pv5ubՁ $mȚFv /ߥZE`>XK@"P<+aq ݝ~!]LDoCD; .߉_[Ӭ c\%_Y| %!A ycL)9¿H߈%b]2R\`gzNb f4g,N#TCk;TnZx jUz;\,/S$爍IEQ:7xmn (.2#C3-zh6,@gaHs<ז->Ѽ.H$lmr]MSUjk% ^jٹ6TIu,mNڲaz XQD` K2*@P55+-$/)T&1'y=INf #'ЉO&=8il.к=(iP4&AT=>3j>ic͚/dhy )39!ڃ|ށdr&V gp%Y@E;&ٲ-%kV[$<M 'Ivނ%[!|D0B x jաMAUo81~Z Y<I}`%.a+C Hb<ĿPlSW(q.YDQ591Os,17wTSC'W3 ]hKh.ۭٹv]wG㢦4̉Ѭ.` z`({V%GI͸k禀r QpZL &~,=!#vPCU֛9e']okͱrgm=U5q4ۨI}UjoT7#ܕF_ϫ)7.N9" :뫚ظRFʤY{4j ڋnNC1'n6"9U_W)ݒdyX:pwiFbJy1gj~gLcaBӒHC}elI=P~7fIZ 6_K$_7k "Y,BQ C?0V& M o&`GzEYz`JrWc4.Fsbkr#¡~k9턃}T?ꑪUWeNr`]:FָX b L!Pa}ˣoop;q;MQK0 "PwO8ߥLjI r8gD@lB`҆=6(Lڊ#uREN uE{ˣ0QS_j)0, oHKnUV&l~gynUJj[6u)Hiژ…d1吏.<<;Қdi0m'wg0KnH:\5>!$[Ek'#`b h~y|$4@ò?xmzGh"ij1^qDsAC\ϳn5|ֳT t[c{/F~ 'A=I7bA@dLH1'|↻n8&9:::fHiW][7M su&n &~S(-G=iڶ۰ Vݲ0 ?c TN鴃Ms~{Wke ZlѼ)R~ jquyѱIю#,P4Հ y\*uV)Sf>I9Ԣr%긜f>f YJ{+M~Il+4Fgzo.]Yp^.7s,=C lXԮbkNV^ܟ h(2.-\KRo ccdcï/YbGUSa&:75޿OEolJZ7Dg 8KPV[{vBCGbTcq6 lr(5M.Bcp5,o}ÍqIč72#(%aē\ \C jI%a}8c%wŚ ìP:-q󌂫wuMȧ ^seZ̰' SDsQhaޚ0#Z4oirKZMvF۱"3|.Mh{hnʎ {-T綨7͢[pxl j6w. 7- 2+?=1t3oV< &D]ku3tz0-_y?dS7>@n0f@Rq\3(j^34zf43.tAߵ,L#)\At wG~`@ƸgQR(]X-P3#}GG!XtC n<\KdZ,pM&킋 wj&`#:5n@*"@A B,>@P xT{ơ8Ob4Ň厓01NЭFڙ>)KՂ*1LeTaf]&$,r2X^4# Jn|d47 bŘra*|*DOD[m>H Jߎ$ ޜPjf &uGWIs>==ȶh gd̂e ۶QURzpCL{4zv;Y BW7 yxIJz1Bި߀r2T`wq%xI Nk%>EJ]Mi 1UU?H!>Y.77Tښ/W7w.Vv碴)־^U_s b"cj~(5%ى@gd>:w߄~OjVE7iTcB^s%'lsW؋F^[n#-s@U#8#'+\}fW=Ωb?}rG]|8 WugcA.ʬk?k|5h0`3y x-i\G(PW \,A(݅G_n95 m*urC*`Q:Ev~O.Eѓ,e}\"|ZTAtOnK I6Q6u#:L@ȁf,i5uެ)%: "F?oP[R0i Df2 ^0$Bas_d96B&Kj-_:U/T~S xlD=f)5SF R@].lQc-qWjio+,{H37CYx<Њ\. cuZg+0ZL4|3* y ɢGN4r< |r\| ݋@ FD'JPhg_ : k]ZA8f#֤Us3.S,$b0q̝i?Ek~qlPreOSWwnSնӹO`9ei0ႇdt'}BG*,͓'@Ir,i1nXH,„I&=@Y94iF! |WUӓz46O-8Fq,"<`H})104b8RqsQgT1`k.vd_4'8A`G-ifnZL~?Pؙ l #x=G)aSC:q=*fn>5C=BgWVp"0ޟ*@~ 1QA e%_sӤWgM+ XP 9Q<vNY B g57.*ӾöPX x`^ ޵(7Wp4|B;VypZ#<惎O. 5(]Kڐ2|<-g5 )(47GUd~rbvj#q N@Ö f~BQ(UE;՞Ėva͡j.)aM76VSҲ. B(>~:e%R$QF.|7pT8,Ў[wхzsR1p1g.Dk2, p>X>\uͷ3,ǃGAiut6" iLu U.!7[ҙKR4 c?P v",:H%/yR rP3=֓eMGr[la%mJ|af5s9%/ulG -yQŵž5xcp<ҍUl[C}!},+F,rVwD\TF= ( f 9K<8ꧫ" @RvDGLI,͘GwfKr?5=3(.k@iƄ:"d4[a"@fSb @3UA2IAlLϱb,_Lc88ctձ(( [))s~E ?PD/\2r V@Z "q[<_3MaekWgrrzAQA iakh0f+ ^D'| G8J殜.RB,wtxYbi̐(l$}bK+3M6eT95N۾j bH1-ZtH]AS_SLfX3^,xKvϛ\Dztn/2E_4J-[Yyi]$ :0B@crJ}coyAk|ЊJF&@GW5Yi!hp[ Aز*?0r!o@ĵ̈́mÕN)gP0ӓ \d,Zz`-5"ſ7`5CڴKVV٠ g'l/7ty0T4;KO "gxciZ`,?ljǀX Xґls}h N<Mï`hEDio=xY0fXvЕCrA)Dkk{w\LB %4ϊ1 FE}~XaqbS!>V ؛\gHu_<ёֺ] iȳm PlľQ'TOъ;U,`WyB}+dFםn9; 9Űg:n#R;v-JڤnwQH1%B[=M%ZRk3!ޞ= WPj~FDm8aMݶQ=G %L&39eBxO"(˚:}=_vqM)b)Bhfp'~lϜe_@`sqi~A\ i0ݓP;.J?B͡<} ^6q\k]-TC3*S^a5AHAKDu (ېJ_x0gؼ.]ߚu-cՅi@fsN8/0y:va&-dؾG}[H)z(~`56oS0 eSSe}ToDlFc3~C.=lv+ΖU@ialkMZ\1 &Si|y 閜0c}X׉Rs$QH.Na%d+̷'HutPe!sYXj򉇵ӪWvJ@a,|fS{B] d~RQi4]8ͩ1x^>*JtN] mjk .qaA!8pGyCqP_<2$b!HvQȵetE46U -m $XCP\ ;< |tR P?J/$ GL3es ,8OXR#SV2$v 6ZN!<3? !Zy3xK~%k_3/Zk5o0bLdtiTwdP< #|`?[C{g/g]3>+3S"y}1`n'F{z0vuZqG*U^Ce>~sʓw!q j^!b~ʁH%_G*P7ʴ\U׷Upͥ\YcS9OqwjB~1K̅Ns;iLCq{IoKd>s鈵|Ȕ ot6̬``O%{܉i: 1eemҴRG E1(f "]`Zy%tHNe5肘?^/5P E&ŠB nӘyV_f78Ai^H?r:uywYdAD%c{Bksg~n]gyWӇ͉ӝ`'MTc,S ?|ZkXQ@;:^_"?./XH]Ma $t=%i!񀯁?m hkKur+__Ssc"S<{g;G Ǽ-㵒|'ݛs<VfQ(k?4rcڣLdク, E Rc38"EÊ(ǹY e=OBj⊰x@n΄a L&t!"eBc`5~bD~-@XA!)pk\+q oxwؼ%l0Ѣ#ݴuSh y`.2 ;:)^mRxE'r7Zunhr*6#ӸS IrMK; J?wT /6)\ے {8gd˧cAlnBxQR#K޷e;^:=%BQҵl߄h_T/#jT_z9ᖬz-;.;`2_tdrD φXKubyX7*=~g;AzhkUPUU*X/JFT]gAW_]R\+V;\<4dT+n2oyTM9/襾WzgD9_WQgi{7w~ORCCK"hrqQ/jd0PK8Ɂr ,yV,N~Z3ˌ'qY ׋̨ӗL?轒qu4T}gX1UnX\ V8k^@ RXȋEgxQԵEx?O>ED*ƶz M-~b֝qwVăd&!o5dLq&J7}--"BA.N{^콙|mpx$FGgm VkJ] ^G,}SQzg[5j!hU>%4rp]IJ,?!4»]1 hN?>)_Giqv'y[c].> ;;_;$m&*(Y"G+}3d*E#8㚺? H0طOX&Pq|Ĩ.a9/4 %~5j:EU}j,eQN}"6bj3s|/'G~|6(濍ٝa چr+.X0vݟ f!EL__;U=2}HrG'kF&K\l>" !2nU7FBB%wPLbȉNnnbt@*?7&V+slP|^Tr65J @ޘ)y-w%oIc ݤCIh>KrG& e SGn \d^]N h̪/G;ԷY}.8uuڝP/? o u'ysb}> bӥɚ ?(V6ig_k@O%qztقg'`W.ݬDOG(9\c_ߏy や]EE׳?.crٺ)ΌNmYewRM:)FZ`oX[:K5:gvA `1)W+i|o xjUGݯD_UOn~P ֽLJN)I.5GZ%%_,ǖ2ٍIg+Mrl"b/MD絊ek |s XK+[!5&هC@ĔRhiӵ 4( QoÔ:tmDgZ%C3~EabZ-,+쿆[6dVl |f& f2X\0oE ^6jCĀΚ-~ ϰz5VP#G#Q9HQ{{ R>IN8LuHBRĦmwPzM(HQ^_N M>A7&0Ɉ.Hrij=5f? 56ͱL=YG@: o҃I-NE>ٺ7ND5P bxHr69⬬M r%m홁~U{ә@= 9O?\+L]h:{+MnL'< q fPQA5vUJrPb5I NXZ­q4]ڃ^-PtBB*AcJ M!Ev'Le݃hUthr#,sc Fna10]hwEk2|0SQZ,f$s 5'7P\iQhODxk[-)17_դvU7<8y͊3,=G&NJT:R&Z E("U {zr埤aY:dzIKQqZ$+[_hǸ{`h\5`Գ']_8>~@?$XRۗpKBxÇcytdIH\? 05&B"0=7F'}*<¼=x!#qX&z7KkʭAӛt1dMq11EwxA0B1801HjIZSO]tU!:R$/8ry'{tsSPr!8hne|N e T*ʬVc7 y26:ⅾ"o@#4^]p%@E[M:Y6)ɚC9 `u}\x{R5e'˰A*KLQC\eK{`\HX)GL1#5RjDK|+n+zJ8JE)˞خ"@,7"F0P;YYy4 a$o Z^K·b˛i4LtulByjЇ HY+H׉wlȍ\!wsVeա3Opܥkaԉ]8~k{)^}5h|YHy:RrTB9^ƽD\Ɵ=_n$*qF`c f5gytp4iE ? ` CBU_\-ɱi\hzզY!;%w|)K>\Z޲2pv0땓Xl+ã3u |5A6g+tLU{0H㉇jSq$h2-$ɑO ss1u Ʉɭ$¾gy7ʣ# ݝ<쥜X_C2[)tslk$HK[|PquNlRs\O+"-5kOTNg{}-D?ߌbv^,ڂkD5\⻵:%}NnGR kp=#!P>".*E:T bO '#~'b_AH۳Qbiؾ`Vl3eT˾f"El傚w췚otC_=! ,H;}Z:b*ԞQ%=m3ޣPK փGsVq~3eocڦzTWX7߫p rcFa]rc 7zs|04qG-$Л*w c^h6@ .[e.WMܯ2ڊx`'axE7gc0kX3 z qPb8͡.3膩SkP!qcLz$Ϲ7 wi@ Ad3&'ƖpQz)8 1^b8T CIpDˊ2gg"YR>tO6:t.&DN\6,^jI'~wIP@uLOg^(æai2눜xaL#A{AyqiDה<ױ7m# %_ZoGAJ'ŵs(~:t@!4GhƃeBTcFQ=!n<q/O,k/z:L~zj(gNCŠP铷"Gϻg+GC $qjClDU RZz'BD**1&-G~A_gAFaoJ,F@m?D%HDvV\H П%>,c.Po@Gn6VX"tQN;`NDk28Gn|J<ҥ3k]z#!C0 2!O7 ?MM&ȣ].lܹ. -"ߒJ_کE/7pEK ;!"[#֨vjh4-iJ3skk2p,>%[O;bB(| Ҝy؀j*vWǑi0aJ>b^LX69V&/m~2vT&2>޷'jXKOu0-aXD^Q#p2ۚ/Nw^~ }9f*&ުJ$lDO#9h%w/GpV d+&R0ߤ"61RRQV҄+ 3}~' cJ1$@]~`IdJ {TWAS؞^yg)b'+װ'QHVӂm_5d@ i盋Kj U&9eϵ%j"/xSe8֟FIYuP!g,s2qӜY+4 i5:NI_۠Vzoj`}:Esڢ(`Ka]|5$-sTz 5ibf|(M AvIAlL>afA/ߊ픰2gZ$Z91.ӖsYK tķ `\?aH|=I&W6kagktBԌptjQg<+5 gzZvr*G|*~;`n22 's_~ ĬUg2)1aNY|ssv-{搄V90ZL%i%M0oG S`$Z^~4[IV3+] V }Ӹ^) aY3ӼChK X2(N x[Ls-Gp-TDxP=Qfx:c8P x,E֑@ ΂Jyctu[Bad8uC1g540J4FZ̔paWS7FUkd Ǽ+P3bU˚*w3/2#'gq„`Q/XG݆/}rkC92}i-H@0,7$7}#1k8%9 It BmaWpB n>@,=em b&SYvD k롖p(SjCUFy}e6|#mŒ%6(<8˄8Q++!J^4#/zC Sq!Y,ܾ,(s1$w1ҵ΀p#`Tw^V*gQ7 >O j.o#Z8lKi5}Sש0J隳x An!!fs+"{M&aZ_]i*Hc?0Ԡ8j~`HW>s*?t72 -\.]%>{$⻪@TEJSc52yHK(x)zXY#/\]ڐF}`|ykC?XV5=^ أ/Mb.:6nZ E)ЇZD)ܻN!B_""u] I֛ZBcw4_%o4@7ckt8ovLᝥ^p{0"%JިP;8;6ƿR+MF@%fnDsN׳ZBAe@GWlg#[k#Xba&b/sF xL4bit5n?e>K8U]"6 f ICy9` 7ɳ:ف|ȸu҄gf(3lw{IM7NWz`E3\6 fn@k'?kv_gn9s鮈}2^=IKT)TZO <뗞ݰr^ 9(vGp7/ EcjUlͽzcIym+Yp\i>x8Q6}$P07 ] ;U6]nO i~s Ca`ХeMP>X.2B_ޡ  zlE/er{ v;@s5ba~ (B9CA7+X+m3d]E|f* S%!i<wb{9b^v<9Jz?:+!G,1_c$3h5?馢|y_(T&!)z#AJw%L;\PoG:>emω`[]Ad ƾI="b\)-35gfݪHKt]{ p*de6pAK"`(u Fp9o>)pJvȎ>'b\=2t'-A^cPx{7-+o{fXA>2Anh5T޼kA#ceK#x[`Xjk `, `@dc?!iD^cܙl|7% b1O )Vq/#D.G4$r!jZ<8T8~P 070;EI;N?2,֟#_dݷ!YI).E_BcHف @ۗ;`}f]X֝?#qlǣE'7[bw.b ?BdwYSj=U!/Ҩd2 +gR; I:L(37VNB՗LtZGXi:eJG50hT3tY GHOq ZVí#OXSsQk/\gn@(u@`Ge+3%}FHإdZ'yͬ9[ d92)hj13W{Boec RQN'ĭE'JIB) ;]|bxh0_sSb}lUI8|VFb o͊[yD;MjQ`R)R)ro_TD lwa[UHG+rb~oZ/{j~IBbgf=P$ r2'յIꬼ<+<|Q^_>8̗l}zMy0 2~O`[{ &$HkGH*3!?QTmOwoy`U3m![oZ};0bTAS"&j ց^YJsj!q0~5\ar-'13,FzjztKH7NU]sjyƱ˧n: ^'9\*Cd*`c(y8V(,S ({DBG.MuFg5q:E[&+S4&&F%9/`IQKop4BbWeNqqHüdAZ߮3Xa{ RYe #Okw60TSkU^&-ն@QR=荮1@:z7+2U0~SY5;_ϝ{<196' n+ĘLa?.<,sg>)XA'Nbk,L7ϲKó*PU\Bu)2Vn5.&sIiq[3 4wtآJ[mަ& xڒ" Ej81UՠM;.Bi]ZnG큾)Xji;lÙ#QcV(tSz80EOI/Ol&w`r<4ːC`6%|t ,)I$xiworwrp@ߕ;ag6϶ #0xhXD_w2zg-|@%6٪(t\2u?[ZdY \O)D#Z(AHZC31\ ,xj,PoTk@XJKT(j&\lQgۢڍIBTNлknt`Ifa:Űs |=O4?+t譛llqs-5#̊$Yڌ28'2W՗:c`u'S5M{\g~2+~;@̺{qKg޲SDU \Dȵ,ln/zm'%K 8)JCUy?')e0Ke?yRΐwËPZWnA]p#f|X}n%kƂ̄2.\,=$fӖd)xhpZD,g?Nl A [aіLHC&zWߟBuC~Dw"m6.9܏Ks7Xjl5cTlrţ_NJ-z-n GfĽFCZ#Rac!tet\CxT|# ]+t.O#4Lsi=U:킅> S(Bgޒ[ 7̌/c,dDph4atUŒ@ns%2yAE,1h<|{AvH_n>'nC;]y t8D2$7Y=2c8ơWs%x旧XUtAp:pm= CX-)@[[};nvz"Vjɣc1FS0֒ :d 5^HߌRKaݯҲvfg.8A% GhnLLI(E;-[W˱(^I fF7ihmBavZCU8]JwJWeFyTQ-q!t84fx *V`rͮؿ~zqtJ=k wsD┯"(SFfD|oXZ't:>r*+|@,ʁ 6;<'pQcQY⡵*#|v>u'BCMTj`̱?BMf `ƞ\0eoP:%N^]t4PֽE?$STqQ_ S 5`p|a5CobMTDZV#1=m7ƍ?,4`' o[g'.*2O*=De7KM%27ZR#е*uLC9r%MΟs/n>#u*bvBO+ˎ{m)zPI\ҋصJ.0]Q@&fuBrJ/qqj=tC5߇{V:ڸ!+r^RggNyݴJz3z[ ޷1E+{2yeX1/r>ںk4 *TdΧr.d] SopWVfm໥'2J\b^¨%^F̥.8..c"g'r)ݩQ,E(=9^@%76xU gŔ ^=mZ`mc_w\V:4˘y%qcUÃih4f~ԃq[<=6]&D~=սOibrs>aC!Á@BOʅV1+pmƴJ#|},0g f;go4m~Kک\˙|3#iK:N`:tٸu\'`Ʉ:;2Flj{VS:XwLC_|f3(CwOdFo!9@%> 4/錷Ra=n[%D^Zc \\Ǧ9]E:5py,^7mr@Dκ!Z9Bٷetym חIWLC= h, du7bJqkp,&C0p&$;!aV(0B@XpPoVZ*gz]nzWNFUxKtL+f3H)΍SۅSۉzHuV*um*IJ+$Bu승2+-_?{BmwHH&1v|OOEeP93 򞬢L lOVGjay)n: BaY!NJ#lzpR;lֺ{;T tL?6V @mM/܄EJL! EPjVUމ;kLi5QP<ůTFJh::nΠpufh#[d =AS0Gy5ʻ}a׉Q%}W*"t4Rg(sò6lś){aLg_ilkz] n?u\U{FwwMwnq^Zwm<i%h{.E'[[sۚ/,P# 2Xi*6B*vk_Psnt ^2ݕn,aeҩwPt]z=ѰӨ^*Ym- :mL((`//WBS2՚=>2%Gx{$15IK%ν\P[ܐf)^Qk33aˉ!us3oaN2ҬVrgdUm|Y|̋N3ٔ׭(}?M9uM%TjY{hъ9C}P&|C}&,t(*!UAOכPE()a0riǶ9o/O'qJ9G:-teLc!ƍbؠRWԘ], "y3JD^رWd)^dqsw Z+$N; ?ޛc33ˬQ:!g4lyjqܢ75Cp~5P44]Y" tϊc)S;n|.p=ȊyJ^S(׻? jO[+G<NTvF֘_M@2{BôM)SJ$ĈqDOs.kҕ"(!l"N< ApUv]?o˟LrtིҥYQ&4ժtY Č:EAL !@U9ޗMX!ZU.xJwBBIDBwBk?%u'VTR%2r:_M;6o y\ΗYm6iy;1MUjغ +6mKstU= tWՅ>55DM۹gUJeÓ )#eT5̊Z t@gks 7=$&49 9 B|$UΆPKs '.c. J ]!D`om PS|жœfɈ_*xmB_4n]:W-ߕ5f[nMtKFDٱԏ͙uR6l57+3 I:d4<Q<5w۳k!|v.{CY{?;[iI9t\6 < b|ۄlI}z&Liu0zH|7qLG(i( y BwKSXD=jϊM w8xc8ܷ 0ӫjYilFtr?V+!EA\ !C̵V #`N,7o>WF8 F}9̋Ԙ?$ݕҹs4YZ2>\+љK% ^m}a76~ޫuRϋL6z и'vE WuJ%Ka_RWuPE*#ˢ6Lg0b}w*a3-te1֯5 1K}&r6#ljL^htR6~ÿMvƮM]>WkqV%7zk/Ooar˖ .3:j^ʴNzOucl4V@rCkz9Z!XKntnahZAf6w=^Rg]^lQǚ8N<;9Ha`x<<*RemJ7Eރ7jto&eԼwE5 jelQ&*b{`_-FO|w6AȈZ&TP@[%3MJ*8LD$J-\`ȸäDYmQLó{R8lMsdw gC; b**IXs{^!ra !AxnKlkZ èWm\b˂ɫ'#S~"k ؾSw:(s_7j޼Bב^xɈDZq$G>|K_-}6 yOK3d{F)oJS>~)^8J{?u'5U) M_rt'yZM7#z5{ݓ;t>wjNڽ`A|ۧDpr0݋_UJ9/*7lnUoh5AD=IytR#7gD*/[ӣolqun2MjJ-"2"8m b !@*`I615XYO/CfR@^Mf\UMϣ ;ЀdB֥gՔB Ȯ Ž Y$*䧣 BTfl/$zEqgZr:Z kmNsI{ sY}Ӻ}?Q<ƙRu QlT4pn)R=%9@+XE[HnܣiK jι7(8XFlacL!FAP !AUb%PVΐ@q! wZy$n͎hvN[%}/?y܇2`>KXGN/?GхX[z}g]⫹3kslؙӏpНWW{²梗Cş#e@9%oЫT?mb?48%dzkDt炦jvŵnlKT z]6fJdm UG"@qSڶs#U4MH&}(66)($BX4R}qwC"(KDi-E Vf,.šXt<L8)jg=c;a f_v>?'~'1[ZZwY0Td (YjuQ$4̺ɠ\iT#U蚒ЈChbob#~߾Yƫnv&~0%fXEfNcbr7eXp# N擌wZL1z֦q$Ĉ0A3)/c;vFtݲ/gpF{L֜|źJjS2# )Qq4uP+;2S#_=;D6aP%#C/ɫ8{2=X(kcH!;(W4i/??>x1[mMo៦3]M9h^f،Sr\>[Vi:*Zd!1 o|g=k@Ndl݇0)(!EL !AئVλR뫜E2'M0[pNr[?'qxӇ [mS 4W4oyKUf6źUj˜ 36(,*pG'1n½8U{ /oP;G$/~HK:x*puNRţWk$gV$t/B创n<+J0-su9:1śc}r(ͨk@D$Pa~GL>H YnC*RnUY;T%8~z祇t T%=0Za }M5ġؘ鼑e1 \I0,n`0AZp_̸wStFeN<Uo\[CY$ yҡ-ocI j(v/-qidzPPٯ]SR^@sC[0W{1O[Y`E7v4-;t1r~+IJĭFbtzcDڟ{Ujrߔ=6˅wY]U:l_2YvMh I܀Wp(.b!CPUP27pnY[j^"l;i]m\[jsۑg@H]]g \KK&/K|ߕkY0jV۵&nE%2{$NCgN\)tJ>E˺K|ƽܥtNw)=`HԘT;VrSO_xH/HϖE!@2vHvyƦ(t9pXc Fͼm$.9O6F#lW\6LG)oVΆj9Dy9VeCXWlD,`9t;y |/t!i$ø|aC&?;~t>RݗφM*yZvb -]ݡZrnvH)?>L.2 v[uqCQ%_&5I LOSywe6$_\qM6_*X:zTxڗS\,D 9r7 [T"_-GsaBQ :Ea"1SJsM{]5t7Bˋ„GTo]27:r5aqL$*bMYO6]ia"zLZunc9֪5KnƀN%&! ET !@G"Ƭi@;4j`S(ݥlۄ{bMMaHw<pn>޲'E>@=A#5MjaO-TyMeWnޯy_w n (ב'@91.JC\S$yМrL}bؿgfI. wlS1؍zc]ahtvК@XK6Bm;k*5dMC&Sp Ӛ:7`i:4SHSdm Ul75M𾣌1 <>)Yҋw%ol"&.oH<%I9X򢼧@P%sNQ2[M~b$d*۬]` ?Qvx2,N$ꪴwtHnp3u0p]88U‡{ҝUĂ `a@BEUG)|W|/ˋJO.Ώmm(cn+--(Ѹ?; ,GL\/NΟÿeZo%z`H(e.5C1-IE]oyIMp8r<p(8V> uK)Њ=p:8_ Z-0Ynt6@:M R׼DZh&IR.'gxs 8! DT 19MV* ֵ|3T,"SŒV`5_T/0{o!3v]'~xSSp+8Kt ]_h]ύyr>xZ~܃mM+]0߿ oB "KfH/sEXJ('u^[;;&GYיRu T԰{M_v]/ۮ, 0Du6a@ !@+a#E+Ky] T-mk"[7S"K CZةrί%fS[0@pYR_1}[_RpˈO!ɖWVPH0kWaS8_Et#G0ɳ9.؟9aUO(xKzTXY 6,UD3%@T-X1.w(eQt+Kb &`I)Q}8Ec-^wH#*1V1c$ 3!FAT !@g/iwEUƥ ؾC?g'9j,PY ;i!jKKu흺DCv??rtߡY.)._rNư{MCEZNq.*X T#hTP)⯶ZBWƮg.+U$K5#V$*SA#cՊ¹QIrfg|ʼn2[ٚwWvO zvmUGܱ?wUo8g>M Ϛ/bD7_k Bvn ?3y}ͫ dǚƣ oe69c:l+:F䨍NkYn`񵗆?>+0qg" ۚU UAp:Ь6 sqOg<(/GBeOӧw(31=,Lpψϱh ]&qxkU)D"t%C4%ZD ȀZ9Xfr-:CL !CE(rkwA7†^ -B70SqՔ@sIbrPҍӳb`Tvi8PrA w˼SbSecIy;PZ5q)̷7zm)yĶN#Hdօe lV# EA= 7P bp C2,}J}:jFetS(hPNi XHvE >w~L‰F2xU"酷ZVZ`! TL޳ɳƵ L)g}E^6w@ U0"p`zޘH-U;,F 쫠쉡6߄#ڼE`kY+17xz?!^kbu{i|ڠ=0oAxc,0vcGN+Zg:29ŭf'GI"?t*|bGu.F/"NJpiNIYƋ,5uak6qg۵6:^V5ƫ9s" XP5 [ʵmL+%3y>U dc ruZ9J`13Zwi1iP&N*"I^ϼC`Pޖml+GY*J;Ͳ@)\v60zՇeLESk2}# fT6DZ>O~ -*sU^s2HHvMӴ$7&{=d(fpe- VCܚkel;zv˛ُ^9=K6mN2_#_IHqS8\6ޞ={tCG_"fs+(xUԧ5 #f%Dɛ*tF$,x OT B}~Fs:4n75-o[d{/Mєmۤ'9nsȦhv BpmP){jdc<ϗMfσ4aOkJ9Ux+n뮫VTRA {XQn22X!hǥ&9Ө9w K%2|H*o74 kKUi{䔮IC9{c Zsә'-n/뻝~[nTV؛N`)Vït+OWhW.`~1ٰ&ܲPԑ.[\8*z@)Z7^.UMՆBT]~-;X E#K8t`6EJEH/e Q%.DBW벖czի@{ r_H4֕jڈ9r<|lÕ%?9&= (w z; @#HE/ 2J(R"jdjnCOXhF-}vAlȒ+3ںi;__k Žkv5W2?c5i2b&=4βo1r,I{{ho ,n\ZAeKUNt\lNQ-hy*&Lp Pp!ʎAAT !@(24@X loZvrG}PO}N.̾!?EUv$k+k|:ҼY*KN'`C1L;(ǣeoUfxmmlMgܳãW}>g=/r/S=)&:2;-ǰjnpՒ<ί- u?5EF;mOq)ά=jr;خv?:Pk0!'y䥉ɥLKgG# ]崩h׺̱̺ne^w[KUc&/NTt{ PMk$@P >! 0Ґ2oZ^f7.e9iHV .|w;w4aqJ# 3}뇨>^|}DIl#>xA{34GuƝYAc5vN8Frz)vu^}~$m Rl n6E4'vlFIn 39jwҚffByӶŗN5/`G8DE`Ea$y\ 260 1 General General 0 1 1 1 Digital Video Digital Video (DVCPRO HD) DV English PCM PCM PCM English TimeCode TimeCode English Downloads/source.mov Downloads source mov MPEG-4 MPEG-4 mp4 m4v m4a m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v QuickTime qt http://www.apple.com/quicktime/download/standalone.html MPEG-4 MPEG-4 mp4 m4v m4a m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v 365132611 348 MiB 348 MiB 348 MiB 348 MiB 348.2 MiB 61394 1mn 1s 1mn 1s 394ms 1mn 1s 00:01:01.394 47578930 47.6 Mbps 64835 63.3 KiB (0%) 63 KiB 63 KiB 63.3 KiB 63.32 KiB 63.3 KiB (0%) 0.00018 UTC 2010-03-22 14:47:44 UTC 2010-03-22 14:48:21 UTC 2010-03-22 18:56:55 2010-03-22 13:56:55 Apple QuickTime Apple QuickTime Apple QuickTime 1C8E7037-D348-4981-9CD3-D60AFEE7FC1C 148 1 Video Video 0 1 1 Digital Video dvhp DVCPRO HD http://www.apple.com/quicktime/download/standalone.html DV DV dvhp 61394 1mn 1s 1mn 1s 394ms 1mn 1s 00:01:01.394 CBR Constant 46033920 46.0 Mbps 960 960 pixels 720 720 pixels 1.333 1.778 16:9 0.000 / 0.000 CFR Constant 23.976 23.976 fps 1472 NTSC 4:1:1 Interlaced Interlaced Interlaced Interlaced 2.778 3600000 1h 0mn 1h 0mn 0s 0ms 1h 0mn 01:00:00.000 DropFrame=No / 24HourMax=No / IsVisual=No 0 353280000 337 MiB (97%) 337 MiB 337 MiB 337 MiB 336.9 MiB 337 MiB (97%) 0.96754 en English UTC 2010-03-22 14:47:44 UTC 2010-03-22 14:48:21 129 1 Audio Audio 0 2 2 PCM Little / Signed Little Signed sowt http://www.apple.com/quicktime/download/standalone.html PCM PCM PCM http://www.apple.com/quicktime/download/standalone.html sowt Little / Signed Little Signed 61394 1mn 1s 1mn 1s 394ms 1mn 1s 00:01:01.394 CBR Constant 1536000 1 536 Kbps 2 2 channels 48000 48.0 KHz 2946912 16 16 bits 11787776 11.2 MiB (3%) 11 MiB 11 MiB 11.2 MiB 11.24 MiB 11.2 MiB (3%) 0.03228 en English UTC 2010-03-22 14:47:44 UTC 2010-03-22 14:48:21 51 1 Menu Menu 0 3 3 TimeCode en English UTC 2010-03-22 14:48:21 UTC 2010-03-22 14:48:21 pymediainfo-5.0.3/tests/data/sample_with_cover.mp3000066400000000000000000000005251400337602200222300ustar00rootroot00000000000000ID3TSSELavf57.83.100APIChimage/pngPNG  IHDRĉ pHYsys IDATxcA$BBIENDB`@InfoLavc57.10[pymediainfo-5.0.3/tests/data/vbr_requires_parsespeed_1.mp4000066400000000000000000000214131400337602200236610ustar00rootroot00000000000000ftypisomisomiso2mp41freebmdat "moovlmvhd@trak\tkhd@$edtselstmdia mdhdDU-hdlrsounSoundHandlerR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ (stts@+stscstsz-stco-,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~trak\tkhd@$edtselstmdia mdhdDU-hdlrsounSoundHandlerminfsmhd$dinfdref url }stbl Ystsd Imp4aD %esdsbbt^vorbisD8vorbis5Xiph.Org libVorbis I 20180316 (Now 100% fewer shells)encoder=Lavc58.35.100vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4(stts@+stscstsz-stco--/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}budtaZmeta!hdlrmdirappl-ilst%toodataLavf58.20.100pymediainfo-5.0.3/tests/test_pymediainfo.py000066400000000000000000000375451400337602200211150ustar00rootroot00000000000000# pylint: disable=missing-module-docstring, missing-class-docstring, missing-function-docstring, # pylint: disable=protected-access import json import os import pathlib import pickle import threading import unittest import xml import pytest from pymediainfo import MediaInfo data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data") test_media_files = [ "sample.mkv", "sample.mp4", "sample_with_cover.mp3", "mpeg4.mp4", "mp3.mp3", "mp4-with-audio.mp4", ] def _get_library_version(): lib, handle, lib_version_str, lib_version = MediaInfo._get_library() lib.MediaInfo_Close(handle) lib.MediaInfo_Delete(handle) return lib_version_str, lib_version class MediaInfoTest(unittest.TestCase): def setUp(self): with open(os.path.join(data_dir, "sample.xml"), "r") as f: self.xml_data = f.read() self.media_info = MediaInfo(self.xml_data) def test_populate_tracks(self): self.assertEqual(4, len(self.media_info.tracks)) def test_valid_video_track(self): for track in self.media_info.tracks: if track.track_type == "Video": self.assertEqual("DV", track.codec) self.assertEqual("Interlaced", track.scan_type) break def test_track_integer_attributes(self): for track in self.media_info.tracks: if track.track_type == "Audio": self.assertTrue(isinstance(track.duration, int)) self.assertTrue(isinstance(track.bit_rate, int)) self.assertTrue(isinstance(track.sampling_rate, int)) break def test_track_other_attributes(self): general_tracks = [ track for track in self.media_info.tracks if track.track_type == "General" ] general_track = general_tracks[0] self.assertEqual(5, len(general_track.other_file_size)) self.assertEqual( ["1mn 1s", "1mn 1s 394ms", "1mn 1s", "00:01:01.394"], general_track.other_duration ) def test_track_existing_other_attributes(self): with open(os.path.join(data_dir, "issue100.xml")) as f: media_info = MediaInfo(f.read()) general_tracks = [track for track in media_info.tracks if track.track_type == "General"] general_track = general_tracks[0] self.assertEqual(general_track.other_format_list, "RTP / RTP") def test_load_mediainfo_from_string(self): self.assertEqual(4, len(self.media_info.tracks)) def test_getting_attribute_that_doesnot_exist(self): self.assertTrue(self.media_info.tracks[0].does_not_exist is None) class MediaInfoInvalidXMLTest(unittest.TestCase): def setUp(self): with open(os.path.join(data_dir, "invalid.xml"), "r") as f: self.xml_data = f.read() def test_parse_invalid_xml(self): self.assertRaises(xml.etree.ElementTree.ParseError, MediaInfo, self.xml_data) class MediaInfoLibraryTest(unittest.TestCase): def setUp(self): self.media_info = MediaInfo.parse(os.path.join(data_dir, "sample.mp4")) self.non_full_mi = MediaInfo.parse(os.path.join(data_dir, "sample.mp4"), full=False) def test_can_parse_true(self): self.assertTrue(MediaInfo.can_parse()) def test_track_count(self): self.assertEqual(len(self.media_info.tracks), 3) def test_track_types(self): self.assertEqual(self.media_info.tracks[1].track_type, "Video") self.assertEqual(self.media_info.tracks[2].track_type, "Audio") def test_track_details(self): self.assertEqual(self.media_info.tracks[1].format, "AVC") self.assertEqual(self.media_info.tracks[2].format, "AAC") self.assertEqual(self.media_info.tracks[1].duration, 958) self.assertEqual(self.media_info.tracks[2].duration, 980) def test_full_option(self): self.assertEqual(self.media_info.tracks[0].footersize, "59") self.assertEqual(self.non_full_mi.tracks[0].footersize, None) class MediaInfoFileLikeTest(unittest.TestCase): def test_can_parse(self): # pylint: disable=no-self-use with open(os.path.join(data_dir, "sample.mp4"), "rb") as f: MediaInfo.parse(f) def test_raises_on_text_mode_even_with_text(self): with open(os.path.join(data_dir, "sample.xml")) as f: self.assertRaises(ValueError, MediaInfo.parse, f) def test_raises_on_text_mode(self): with open(os.path.join(data_dir, "sample.mkv")) as f: self.assertRaises(ValueError, MediaInfo.parse, f) class MediaInfoUnicodeXMLTest(unittest.TestCase): def setUp(self): self.media_info = MediaInfo.parse(os.path.join(data_dir, "sample.mkv")) def test_parse_file_with_unicode_tags(self): self.assertEqual( self.media_info.tracks[0].title, "Dès Noël où un zéphyr haï me vêt de glaçons " "würmiens je dîne d’exquis rôtis de bœuf au kir à " "l’aÿ d’âge mûr & cætera !", ) class MediaInfoUnicodeFileNameTest(unittest.TestCase): def setUp(self): self.media_info = MediaInfo.parse(os.path.join(data_dir, "accentué.txt")) def test_parse_unicode_file(self): self.assertEqual(len(self.media_info.tracks), 1) @pytest.mark.internet class MediaInfoURLTest(unittest.TestCase): def setUp(self): url = "https://github.com/sbraz/pymediainfo/raw/v5.0/tests/data/sample.mkv" self.media_info = MediaInfo.parse(url) def test_parse_url(self): self.assertEqual(len(self.media_info.tracks), 3) class MediaInfoPathlibTest(unittest.TestCase): def test_parse_pathlib_path(self): path = pathlib.Path(data_dir) / "sample.mp4" media_info = MediaInfo.parse(path) self.assertEqual(len(media_info.tracks), 3) def test_parse_non_existent_path_pathlib(self): path = pathlib.Path(data_dir) / "this file does not exist" self.assertRaises(FileNotFoundError, MediaInfo.parse, path) class MediaInfoFilenameTypesTest(unittest.TestCase): def test_normalize_filename_str(self): path = os.path.join(data_dir, "test.txt") filename = MediaInfo._normalize_filename(path) self.assertEqual(filename, path) def test_normalize_filename_pathlib(self): path = pathlib.Path(data_dir, "test.txt") filename = MediaInfo._normalize_filename(path) self.assertEqual(filename, os.path.join(data_dir, "test.txt")) def test_normalize_filename_pathlike(self): class PathLikeObject(os.PathLike): # pylint: disable=too-few-public-methods def __fspath__(self): return os.path.join(data_dir, "test.txt") path = PathLikeObject() filename = MediaInfo._normalize_filename(path) self.assertEqual(filename, os.path.join(data_dir, "test.txt")) def test_normalize_filename_url(self): filename = MediaInfo._normalize_filename("https://localhost") self.assertEqual(filename, "https://localhost") class MediaInfoTestParseNonExistentFile(unittest.TestCase): def test_parse_non_existent_path(self): path = os.path.join(data_dir, "this file does not exist") self.assertRaises(FileNotFoundError, MediaInfo.parse, path) class MediaInfoCoverDataTest(unittest.TestCase): def setUp(self): self.cover_mi = MediaInfo.parse( os.path.join(data_dir, "sample_with_cover.mp3"), cover_data=True ) self.no_cover_mi = MediaInfo.parse(os.path.join(data_dir, "sample_with_cover.mp3")) def test_parse_cover_data(self): self.assertEqual( self.cover_mi.tracks[0].cover_data, "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAAAAA" "AAAQCEeRdzAAAADUlEQVR4nGP4x8DwHwAE/AH+QSRCQgAAAABJRU5ErkJggg==", ) def test_parse_no_cover_data(self): lib_version_str, lib_version = _get_library_version() if lib_version < (18, 3): pytest.skip( "The Cover_Data option is not supported by this library version " "(v{} detected, v18.03 required)".format(lib_version_str) ) self.assertEqual(self.no_cover_mi.tracks[0].cover_data, None) class MediaInfoTrackParsingTest(unittest.TestCase): def test_track_parsing(self): media_info = MediaInfo.parse(os.path.join(data_dir, "issue55.flv")) self.assertEqual(len(media_info.tracks), 2) class MediaInfoRuntimeErrorTest(unittest.TestCase): def test_parse_invalid_url(self): # This is the easiest way to cause a parsing error # since non-existent files return a different exception self.assertRaises(RuntimeError, MediaInfo.parse, "unsupportedscheme://") class MediaInfoSlowParseTest(unittest.TestCase): def setUp(self): self.media_info = MediaInfo.parse( os.path.join(data_dir, "vbr_requires_parsespeed_1.mp4"), parse_speed=1 ) def test_slow_parse_speed(self): self.assertEqual(self.media_info.tracks[2].stream_size, "3353 / 45") class MediaInfoEqTest(unittest.TestCase): def setUp(self): self.mp3_mi = MediaInfo.parse(os.path.join(data_dir, "sample_with_cover.mp3")) self.mp3_other_mi = MediaInfo.parse(os.path.join(data_dir, "sample_with_cover.mp3")) self.mp4_mi = MediaInfo.parse(os.path.join(data_dir, "sample.mp4")) def test_eq(self): self.assertEqual(self.mp3_mi.tracks[0], self.mp3_other_mi.tracks[0]) self.assertEqual(self.mp3_mi, self.mp3_other_mi) self.assertNotEqual(self.mp3_mi.tracks[0], self.mp4_mi.tracks[0]) self.assertNotEqual(self.mp3_mi, self.mp4_mi) def test_pickle_unpickle(self): pickled_track = pickle.dumps(self.mp4_mi.tracks[0]) self.assertEqual(self.mp4_mi.tracks[0], pickle.loads(pickled_track)) pickled_mi = pickle.dumps(self.mp4_mi) self.assertEqual(self.mp4_mi, pickle.loads(pickled_mi)) class MediaInfoLegacyStreamDisplayTest(unittest.TestCase): def setUp(self): self.media_info = MediaInfo.parse(os.path.join(data_dir, "aac_he_v2.aac")) self.legacy_mi = MediaInfo.parse( os.path.join(data_dir, "aac_he_v2.aac"), legacy_stream_display=True ) def test_legacy_stream_display(self): self.assertEqual(self.media_info.tracks[1].channel_s, 2) self.assertEqual(self.legacy_mi.tracks[1].channel_s, "2 / 1 / 1") class MediaInfoOptionsTest(unittest.TestCase): def setUp(self): lib_version_str, lib_version = _get_library_version() if lib_version < (19, 9): pytest.skip( "The Reset option is not supported by this library version " "(v{} detected, v19.09 required)".format(lib_version_str) ) self.raw_language_mi = MediaInfo.parse( os.path.join(data_dir, "sample.mkv"), mediainfo_options={"Language": "raw"}, ) # Parsing the file without the custom options afterwards # allows us to check that the "Reset" option worked # https://github.com/MediaArea/MediaInfoLib/issues/1128 self.normal_mi = MediaInfo.parse( os.path.join(data_dir, "sample.mkv"), ) def test_mediainfo_options(self): self.assertEqual(self.normal_mi.tracks[1].other_language[0], "English") self.assertEqual(self.raw_language_mi.tracks[1].language, "en") # Unittests can't be parametrized # https://github.com/pytest-dev/pytest/issues/541 @pytest.mark.parametrize("test_file", test_media_files) def test_thread_safety(test_file): lib_version_str, lib_version = _get_library_version() if lib_version < (20, 3): pytest.skip( "This version of the library is not thread-safe " "(v{} detected, v20.03 required)".format(lib_version_str) ) expected_result = MediaInfo.parse(os.path.join(data_dir, test_file)) results = [] lock = threading.Lock() def target(): try: result = MediaInfo.parse(os.path.join(data_dir, test_file)) with lock: results.append(result) except Exception: # pylint: disable=broad-except pass threads = [] thread_count = 100 for _ in range(thread_count): thread = threading.Thread(target=target) thread.start() threads.append(thread) for thread in threads: thread.join() # Each thread should have produced a result assert len(results) == thread_count for res in results: # Test dicts first because they will show a diff # in case they don't match assert res.to_data() == expected_result.to_data() assert res == expected_result @pytest.mark.parametrize("test_file", test_media_files) def test_filelike_returns_the_same(test_file): filename = os.path.join(data_dir, test_file) mi_from_filename = MediaInfo.parse(filename) with open(filename, "rb") as f: mi_from_file = MediaInfo.parse(f) assert len(mi_from_file.tracks) == len(mi_from_filename.tracks) for track_from_file, track_from_filename in zip(mi_from_file.tracks, mi_from_filename.tracks): # The General track will differ, typically not giving the file name if track_from_file.track_type != "General": # Test dicts first because they will produce a diff assert track_from_file.to_data() == track_from_filename.to_data() assert track_from_file == track_from_filename class MediaInfoOutputTest(unittest.TestCase): def test_text_output(self): media_info = MediaInfo.parse(os.path.join(data_dir, "sample.mp4"), output="") self.assertRegex(media_info, r"Stream size\s+: 373836\b") def test_json_output(self): lib_version_str, lib_version = _get_library_version() if lib_version < (18, 3): pytest.skip( "This version of the library does not support JSON output " "(v{} detected, v18.03 required)".format(lib_version_str) ) media_info = MediaInfo.parse(os.path.join(data_dir, "sample.mp4"), output="JSON") parsed = json.loads(media_info) self.assertEqual(parsed["media"]["track"][0]["FileSize"], "404567") def test_parameter_output(self): media_info = MediaInfo.parse( os.path.join(data_dir, "sample.mp4"), output="General;%FileSize%" ) self.assertEqual(media_info, "404567") class MediaInfoTrackShortcutsTests(unittest.TestCase): def setUp(self): self.mi_audio = MediaInfo.parse(os.path.join(data_dir, "sample.mp4")) self.mi_text = MediaInfo.parse(os.path.join(data_dir, "sample.mkv")) self.mi_image = MediaInfo.parse(os.path.join(data_dir, "empty.gif")) with open(os.path.join(data_dir, "other_track.xml")) as f: self.mi_other = MediaInfo(f.read()) def test_empty_list(self): self.assertEqual(self.mi_audio.text_tracks, []) def test_general_tracks(self): self.assertEqual(len(self.mi_audio.general_tracks), 1) self.assertIsNotNone(self.mi_audio.general_tracks[0].file_name) def test_video_tracks(self): self.assertEqual(len(self.mi_audio.video_tracks), 1) self.assertIsNotNone(self.mi_audio.video_tracks[0].display_aspect_ratio) def test_audio_tracks(self): self.assertEqual(len(self.mi_audio.audio_tracks), 1) self.assertIsNotNone(self.mi_audio.audio_tracks[0].sampling_rate) def test_text_tracks(self): self.assertEqual(len(self.mi_text.text_tracks), 1) self.assertEqual(self.mi_text.text_tracks[0].kind_of_stream, "Text") def test_other_tracks(self): self.assertEqual(len(self.mi_other.other_tracks), 2) self.assertEqual(self.mi_other.other_tracks[0].type, "Time code") def test_image_tracks(self): self.assertEqual(len(self.mi_image.image_tracks), 1) self.assertEqual(self.mi_image.image_tracks[0].width, 1) def test_menu_tracks(self): self.assertEqual(len(self.mi_text.menu_tracks), 1) self.assertEqual(self.mi_text.menu_tracks[0].kind_of_stream, "Menu") pymediainfo-5.0.3/tox.ini000066400000000000000000000015741400337602200153420ustar00rootroot00000000000000[tox] envlist = py36 py37 py38 py39 pypy3 black flake8 isort mypy pylint [testenv] deps = pytest pytest-xdist setuptools_scm commands = pytest -n auto {posargs} [testenv:docs] deps = sphinx commands = sphinx-build -d "{toxworkdir}/docs_doctree" docs "{toxworkdir}/docs_out" --color -W {posargs} [testenv:black] deps = black commands = black --line-length 100 --check --diff pymediainfo tests [testenv:flake8] deps = flake8 commands = flake8 --max-line-length 100 pymediainfo tests [testenv:isort] deps = isort commands = isort --check pymediainfo tests [testenv:pylint] # TODO: remove constraint when this is fixed: https://github.com/PyCQA/pylint/issues/3882 basepython = python3.8 deps = pylint pytest commands = pylint pymediainfo/ tests/test_pymediainfo.py [testenv:mypy] deps = mypy pytest commands = mypy --strict pymediainfo mypy tests