unity-voice-0.1+14.04.20140304/ 0000755 0000152 0177776 00000000000 12305262767 016231 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/ChangeLog 0000644 0000152 0177776 00000000030 12305262546 017767 0 ustar pbuser nogroup 0000000 0000000 # Generated by Makefile
unity-voice-0.1+14.04.20140304/cmake/ 0000755 0000152 0177776 00000000000 12305262767 017311 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/cmake/COPYING-CMAKE-SCRIPTS 0000644 0000152 0177776 00000002457 12305262546 022312 0 ustar pbuser nogroup 0000000 0000000 Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
unity-voice-0.1+14.04.20140304/cmake/FindValgrind.cmake 0000644 0000152 0177776 00000001324 12305262546 022655 0 ustar pbuser nogroup 0000000 0000000
option(
ENABLE_MEMCHECK_OPTION
"If set to ON, enables automatic creation of memcheck targets"
ON
)
find_program(
VALGRIND_PROGRAM
NAMES valgrind
)
if(VALGRIND_PROGRAM)
set(VALGRIND_PROGRAM_OPTIONS
"--suppressions=${CMAKE_SOURCE_DIR}/tests/data/valgrind.suppression"
"--error-exitcode=1"
"--leak-check=full"
"--gen-suppressions=all"
"--quiet"
)
endif()
find_package_handle_standard_args(
VALGRIND DEFAULT_MSG
VALGRIND_PROGRAM
)
function(add_valgrind_test NAME EXECUTABLE)
if(ENABLE_MEMCHECK_OPTION AND VALGRIND_PROGRAM)
add_test(${NAME} ${VALGRIND_PROGRAM} ${VALGRIND_PROGRAM_OPTIONS} "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE}")
else()
add_test(${NAME} ${EXECUTABLE})
endif()
endfunction()
unity-voice-0.1+14.04.20140304/cmake/FindGMock.cmake 0000644 0000152 0177776 00000000766 12305262546 022120 0 ustar pbuser nogroup 0000000 0000000 # Build with system gmock and embedded gtest
set (GMOCK_INCLUDE_DIRS "/usr/include/gmock/include" CACHE PATH "gmock source include directory")
set (GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory")
set (GTEST_INCLUDE_DIRS "${GMOCK_SOURCE_DIR}/gtest/include" CACHE PATH "gtest source include directory")
add_subdirectory(${GMOCK_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/gmock")
set(GTEST_LIBRARIES gtest)
set(GTEST_MAIN_LIBRARIES gtest_main)
set(GMOCK_LIBRARIES gmock gmock_main)
unity-voice-0.1+14.04.20140304/cmake/Coverage.cmake 0000644 0000152 0177776 00000004222 12305262546 022041 0 ustar pbuser nogroup 0000000 0000000 if (CMAKE_BUILD_TYPE MATCHES coverage)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --coverage")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage")
find_program(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin")
if (NOT GCOVR_EXECUTABLE)
message(STATUS "Gcovr binary was not found, can not generate XML coverage info.")
else ()
message(STATUS "Gcovr found, can generate XML coverage info.")
add_custom_target (coverage-xml
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND "${GCOVR_EXECUTABLE}" --exclude="test.*" --exclude="obj.*" -x -r "${CMAKE_SOURCE_DIR}"
--object-directory=${CMAKE_BINARY_DIR} -o coverage.xml)
endif()
find_program(LCOV_EXECUTABLE lcov HINTS ${LCOV_ROOT} "${GCOVR_ROOT}/bin")
find_program(GENHTML_EXECUTABLE genhtml HINTS ${GENHTML_ROOT})
if (NOT LCOV_EXECUTABLE)
message(STATUS "Lcov binary was not found, can not generate HTML coverage info.")
else ()
if(NOT GENHTML_EXECUTABLE)
message(STATUS "Genthml binary not found, can not generate HTML coverage info.")
else()
message(STATUS "Lcov and genhtml found, can generate HTML coverage info.")
add_custom_target (coverage-html
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND "${LCOV_EXECUTABLE}" --capture --output-file "${CMAKE_BINARY_DIR}/coverage.info" --no-checksum --directory "${CMAKE_BINARY_DIR}"
COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '/usr/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info"
COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '${CMAKE_BINARY_DIR}/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info"
COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '${CMAKE_SOURCE_DIR}/tests/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info"
COMMAND "${GENHTML_EXECUTABLE}" --prefix "${CMAKE_BINARY_DIR}" --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info
)
endif()
endif()
endif()
unity-voice-0.1+14.04.20140304/tests/ 0000755 0000152 0177776 00000000000 12305262767 017373 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/autopilot/ 0000755 0000152 0177776 00000000000 12305262767 021413 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/ 0000755 0000152 0177776 00000000000 12305262767 023750 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/__init__.py 0000644 0000152 0177776 00000017544 12305262546 026067 0 ustar pbuser nogroup 0000000 0000000 # coding: UTF-8
'''unittest.TestCase convenience methods for DBusMocks'''
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text
# of the license.
__author__ = 'Martin Pitt'
__email__ = 'martin.pitt@ubuntu.com'
__copyright__ = '(c) 2012 Canonical Ltd.'
__license__ = 'LGPL 3+'
import time
import sys
import unittest
import subprocess
import signal
import os
import errno
import dbus
#from dbusmock.mockobject import MOCK_IFACE, load_module
class DBusTestCase(unittest.TestCase):
'''Base class for D-BUS mock tests.
This provides some convenience API to start/stop local D-Buses, so that you
can run a private local session and/or system bus to run mocks on.
This also provides a spawn_server() static method to run the D-Bus mock
server in a separate process.
'''
session_bus_pid = None
system_bus_pid = None
@classmethod
def start_session_bus(klass):
'''Set up a private local session bus
This gets stopped automatically in tearDownClass().
'''
(DBusTestCase.session_bus_pid, addr) = klass.start_dbus()
os.environ['DBUS_SESSION_BUS_ADDRESS'] = addr
@classmethod
def start_system_bus(klass):
'''Set up a private local system bus
This gets stopped automatically in tearDownClass().
'''
(DBusTestCase.system_bus_pid, addr) = klass.start_dbus()
os.environ['DBUS_SYSTEM_BUS_ADDRESS'] = addr
@classmethod
def tearDownClass(klass):
'''Stop private session/system buses'''
if DBusTestCase.session_bus_pid is not None:
klass.stop_dbus(DBusTestCase.session_bus_pid)
del os.environ['DBUS_SESSION_BUS_ADDRESS']
DBusTestCase.session_bus_pid = None
if DBusTestCase.system_bus_pid is not None:
klass.stop_dbus(DBusTestCase.system_bus_pid)
del os.environ['DBUS_SYSTEM_BUS_ADDRESS']
DBusTestCase.system_bus_pid = None
@classmethod
def start_dbus(klass):
'''Start a D-BUS daemon
Return (pid, address) pair.
Normally you do not need to call this directly. Use start_system_bus()
and start_session_bus() instead.
'''
out = subprocess.check_output(['dbus-launch'], universal_newlines=True)
variables = {}
for line in out.splitlines():
(k, v) = line.split('=', 1)
variables[k] = v
return (int(variables['DBUS_SESSION_BUS_PID']),
variables['DBUS_SESSION_BUS_ADDRESS'])
@classmethod
def stop_dbus(klass, pid):
'''Stop a D-BUS daemon
Normally you do not need to call this directly. When you use
start_system_bus() and start_session_bus(), these buses are
automatically stopped in tearDownClass().
'''
signal.signal(signal.SIGTERM, signal.SIG_IGN)
timeout = 50
while timeout > 0:
try:
os.kill(pid, signal.SIGTERM)
except OSError as e:
if e.errno == errno.ESRCH:
break
else:
raise
time.sleep(0.1)
else:
sys.stderr.write('ERROR: timed out waiting for bus process to terminate\n')
os.kill(pid, signal.SIGKILL)
time.sleep(0.5)
signal.signal(signal.SIGTERM, signal.SIG_DFL)
@classmethod
def get_dbus(klass, system_bus=False):
'''Get dbus.bus.BusConnection() object
This is preferrable to dbus.SystemBus() and dbus.SessionBus() as those
do not get along with multiple changing local test buses.
'''
if system_bus:
if os.environ.get('DBUS_SYSTEM_BUS_ADDRESS'):
return dbus.bus.BusConnection(os.environ['DBUS_SYSTEM_BUS_ADDRESS'])
else:
return dbus.SystemBus()
else:
if os.environ.get('DBUS_SESSION_BUS_ADDRESS'):
return dbus.bus.BusConnection(os.environ['DBUS_SESSION_BUS_ADDRESS'])
else:
return dbus.SessionBus()
@classmethod
def wait_for_bus_object(klass, dest, path, system_bus=False):
'''Wait for an object to appear on D-BUS
Raise an exception if object does not appear within 5 seconds.
'''
bus = klass.get_dbus(system_bus)
timeout = 50
last_exc = None
# we check whether the name is owned first, to avoid race conditions
# with service activation; once it's owned, wait until we can actually
# call methods
while timeout > 0:
if bus.name_has_owner(dest):
try:
p = dbus.Interface(bus.get_object(dest, path),
dbus_interface=dbus.INTROSPECTABLE_IFACE)
p.Introspect()
break
except dbus.exceptions.DBusException as e:
last_exc = e
if '.UnknownInterface' in str(e):
break
pass
timeout -= 1
time.sleep(0.1)
if timeout <= 0:
assert timeout > 0, 'timed out waiting for D-BUS object %s: %s' % (path, last_exc)
@classmethod
def spawn_server(klass, name, path, interface, system_bus=False, stdout=None):
'''Run a DBusMockObject instance in a separate process
The daemon will terminate automatically when the D-BUS that it connects
to goes down. If that does not happen (e. g. you test on the actual
system/session bus), you need to kill it manually.
This function blocks until the spawned DBusMockObject is ready and
listening on the bus.
Returns the Popen object of the spawned daemon.
'''
argv = [sys.executable, '-m', 'dbusmock']
if system_bus:
argv.append('--system')
argv.append(name)
argv.append(path)
argv.append(interface)
daemon = subprocess.Popen(argv, stdout=stdout)
# wait for daemon to start up
klass.wait_for_bus_object(name, path, system_bus)
return daemon
@classmethod
def spawn_server_template(klass, template, parameters=None, stdout=None):
'''Run a D-BUS mock template instance in a separate process
This starts a D-BUS mock process and loads the given template with
(optional) parameters into it. For details about templates see
dbusmock.DBusMockObject.AddTemplate().
The daemon will terminate automatically when the D-BUS that it connects
to goes down. If that does not happen (e. g. you test on the actual
system/session bus), you need to kill it manually.
This function blocks until the spawned DBusMockObject is ready and
listening on the bus.
Returns a pair (daemon Popen object, main dbus object).
'''
# we need the bus address from the template module
module = load_module(template)
daemon = klass.spawn_server(module.BUS_NAME, module.MAIN_OBJ,
module.MAIN_IFACE, module.SYSTEM_BUS, stdout)
bus = klass.get_dbus(module.SYSTEM_BUS)
obj = bus.get_object(module.BUS_NAME, module.MAIN_OBJ)
if not parameters:
parameters = dbus.Dictionary({}, signature='sv')
obj.AddTemplate(template, parameters,
dbus_interface=MOCK_IFACE)
return (daemon, obj)
# Python 2 backwards compatibility
if sys.version_info[0] < 3:
import re
def assertRegex(self, value, pattern):
if not re.search(pattern, value):
raise self.failureException('%r not found in %s' % (pattern, value))
DBusTestCase.assertRegex = assertRegex
unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/dbus_interface/ 0000755 0000152 0177776 00000000000 12305262767 026725 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/dbus_interface/__init__.py 0000644 0000152 0177776 00000000566 12305262546 031040 0 ustar pbuser nogroup 0000000 0000000 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
# Copyright 2013 Canonical
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
"""unity-voice dbus_interface autopilot tests and emulators - sub level package."""
unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/dbus_interface/tests/ 0000755 0000152 0177776 00000000000 12305262767 030067 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/dbus_interface/tests/__init__.py 0000644 0000152 0177776 00000000510 12305262546 032167 0 ustar pbuser nogroup 0000000 0000000 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
# Copyright 2013 Canonical
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
"""dbus_interface autopilot tests."""
unity-voice-0.1+14.04.20140304/tests/autopilot/unity_voice/dbus_interface/tests/test_voice.py 0000644 0000152 0177776 00000010123 12305262546 032575 0 ustar pbuser nogroup 0000000 0000000 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
# Copyright 2013 Canonical
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
from autopilot.testcase import AutopilotTestCase
from os.path import abspath, dirname, join, isdir
from autopilot.matchers import Eventually
from testtools.matchers import Equals
import dbus
import dbus.service
import dbus.mainloop.glib
import gobject
import glob
import subprocess
import sys
from unity_voice import DBusTestCase
DBUS_NAME = "com.canonical.Unity.Voice"
DBUS_PATH = "/com/canonical/Unity/Voice"
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
class DBusInterfaceTests(AutopilotTestCase, DBusTestCase):
@classmethod
def setUpClass(klass):
klass.start_session_bus()
klass.dbus_con = klass.get_dbus()
def setUp(self):
super(DBusInterfaceTests, self).setUp()
self.sound_device = "/tmp/unity-voice-test.source"
args = ["pactl", "load-module",
"module-pipe-source",
"source_name=unity-voice-test",
"file=/tmp/unity-voice-test.source",
"channels=1",
"format=s16le",
"rate=16000"]
self.module_id = subprocess.check_output(args).strip()
self.mainloop = gobject.MainLoop()
self.app = self.launch_application()
self.wait_for_bus_object(DBUS_NAME, DBUS_PATH)
self.interface = dbus.Interface(self.dbus_con
.get_object(DBUS_NAME, DBUS_PATH), DBUS_NAME)
self.result = ""
self.sound_file = ""
# First try the in-source path
self.sound_dir = abspath(join(dirname(__file__), '..', '..', '..', '..', 'data', 'sounds'))
# Now try the install path
if not isdir(self.sound_dir):
self.sound_dir = join(dirname(sys.modules['unity_voice'].__file__), 'sounds')
def application_binary(self):
cmds = glob.glob('/usr/lib/*/unity-voice-service')
self.assertThat(len(cmds), Equals(1))
return cmds[0]
def launch_application(self):
return subprocess.Popen([self.application_binary(), "unity-voice-test"])
def tearDown(self):
super(DBusInterfaceTests, self).tearDown()
args = ["pactl", "unload-module", self.module_id]
subprocess.check_call(args)
self.mainloop.quit()
self.app.terminate()
def get_result(self):
return self.result
def listen(self, commands, sound_file, expected_text):
self.sound_file = sound_file
self.interface.connect_to_signal("Listening", self.play_sound)
self.interface.listen(commands, reply_handler=self.listen_result,
error_handler=self.listen_error)
self.mainloop.run()
self.assertThat(self.get_result, Eventually(Equals(expected_text)))
def copy_file(self, src, dst):
with open(src, 'r') as fp:
content = fp.read()
with open(dst, 'w') as fp:
fp.write(content)
def play_sound(self):
# Note: Can't use shutil.copyfile, as that doesn't work on block devices
self.copy_file(join(self.sound_dir, self.sound_file) + ".raw", self.sound_device)
self.copy_file(join(self.sound_dir, "silence.raw"), self.sound_device)
def listen_result(self, result):
self.result = result
self.mainloop.quit()
def listen_error(self, result):
self.mainloop.quit()
self.fail()
def test_sounds(self):
commands = [["auto", "adjust"], ["color", "balance"], ["open", "tab"],
["open", "terminal"], ["system", "settings"]]
self.listen(commands, "auto-adjust", "auto adjust");
self.listen(commands, "color-balance", "color balance");
self.listen(commands, "open-tab", "open tab");
self.listen(commands, "open-terminal", "open terminal");
self.listen(commands, "system-settings", "system settings");
unity-voice-0.1+14.04.20140304/tests/autopilot/setup.py 0000644 0000152 0177776 00000001754 12305262546 023127 0 ustar pbuser nogroup 0000000 0000000 #!/usr/bin/python
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
#
# Unity Voice Autopilot Test Suite
# Copyright (C) 2013 Canonical
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
from distutils.core import setup
from setuptools import find_packages
setup(
name='unity-voice',
version='1.0',
description='Unity voice autopilot tests.',
url='https://launchpad.net/unity-voice',
license='GPLv3',
packages=find_packages(),
)
unity-voice-0.1+14.04.20140304/tests/TestPronounceDict.cpp 0000644 0000152 0177776 00000007144 12305262546 023514 0 ustar pbuser nogroup 0000000 0000000 /*
* Copyright (C) 2013 Canonical, Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*
* Author: Marcus Tomlinson
*/
#include
#include
#include
using namespace testing;
namespace {
class TestPronounceDict: public Test {
protected:
PronounceDict m_dict;
};
TEST_F(TestPronounceDict, HashesInDictionary) {
EXPECT_TRUE(m_dict.loadDictionary( PRONOUCE_DICT_HASHES ));
EXPECT_TRUE(m_dict.contains("hello"));
QList pronunciation_list = m_dict.getPronunciations("hello");
EXPECT_EQ(1, pronunciation_list.size());
EXPECT_EQ("hh ax l ow", pronunciation_list.value(0));
EXPECT_TRUE(m_dict.contains("there"));
pronunciation_list = m_dict.getPronunciations("there");
EXPECT_EQ(2, pronunciation_list.size());
EXPECT_EQ("dh ea", pronunciation_list.value(0));
EXPECT_EQ("dh ea r", pronunciation_list.value(1));
EXPECT_FALSE(m_dict.contains("goodbye"));
}
TEST_F(TestPronounceDict, SemicolonsInDictionary) {
EXPECT_TRUE(m_dict.loadDictionary( PRONOUCE_DICT_SEMICOLON ));
EXPECT_TRUE(m_dict.contains("hello"));
QList pronunciation_list = m_dict.getPronunciations("hello");
EXPECT_EQ(2, pronunciation_list.size());
EXPECT_EQ("HH AH L OW", pronunciation_list.value(0));
EXPECT_EQ("HH EH L OW", pronunciation_list.value(1));
EXPECT_TRUE(m_dict.contains("there"));
pronunciation_list = m_dict.getPronunciations("there");
EXPECT_EQ(1, pronunciation_list.size());
EXPECT_EQ("DH EH R", pronunciation_list.value(0));
EXPECT_FALSE(m_dict.contains("goodbye"));
}
TEST_F(TestPronounceDict, LowercaseInDictionary ) {
EXPECT_TRUE(m_dict.loadDictionary( PRONOUCE_DICT_LOWERCASE ));
EXPECT_TRUE(m_dict.contains("hello"));
QList pronunciation_list = m_dict.getPronunciations("hello");
EXPECT_EQ(2, pronunciation_list.size());
EXPECT_EQ("HH AH L OW", pronunciation_list.value(0));
EXPECT_EQ("HH EH L OW", pronunciation_list.value(1));
EXPECT_TRUE(m_dict.contains("there"));
pronunciation_list = m_dict.getPronunciations("there");
EXPECT_EQ(1, pronunciation_list.size());
EXPECT_EQ("DH EH R", pronunciation_list.value(0));
EXPECT_FALSE(m_dict.contains("goodbye"));
}
TEST_F(TestPronounceDict, HtkDictionaryFormat ) {
EXPECT_TRUE(m_dict.loadDictionary( PRONOUCE_DICT_HTK ));
EXPECT_TRUE(m_dict.contains("abandon"));
QList pronunciation_list = m_dict.getPronunciations("abandon");
EXPECT_EQ(1, pronunciation_list.size());
EXPECT_EQ("ax b ae n d ax n", pronunciation_list.value(0));
EXPECT_TRUE(m_dict.contains("abandoned"));
pronunciation_list = m_dict.getPronunciations("abandoned");
EXPECT_EQ(1, pronunciation_list.size());
EXPECT_EQ("ax b ae n d ax n d", pronunciation_list.value(0));
EXPECT_TRUE(m_dict.contains("abandonment"));
pronunciation_list = m_dict.getPronunciations("abandonment");
EXPECT_EQ(1, pronunciation_list.size());
EXPECT_EQ("ax b ae n d ax n m ax n t", pronunciation_list.value(0));
EXPECT_FALSE(m_dict.contains("zoom"));
pronunciation_list = m_dict.getPronunciations("zoom");
EXPECT_EQ(0, pronunciation_list.size());
}
} // namespace
unity-voice-0.1+14.04.20140304/tests/CMakeLists.txt 0000644 0000152 0177776 00000003224 12305262546 022127 0 ustar pbuser nogroup 0000000 0000000
set(CMAKE_AUTOMOC OFF)
include(FindGMock)
set(CMAKE_AUTOMOC ON)
find_package("Valgrind" REQUIRED)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${GMOCK_INCLUDE_DIRS})
include_directories(${GTEST_INCLUDE_DIRS})
add_definitions(-DSOUNDS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data/sounds")
add_definitions(-DUNITY_VOICE_SERVICE_BIN="${CMAKE_BINARY_DIR}/src/service/unity-voice-service")
add_definitions(-DPRONOUCE_DICT_HASHES="${CMAKE_CURRENT_SOURCE_DIR}/data/test-pronounce-dict-hashes.dic")
add_definitions(-DPRONOUCE_DICT_SEMICOLON="${CMAKE_CURRENT_SOURCE_DIR}/data/test-pronounce-dict-semicolon.dic")
add_definitions(-DPRONOUCE_DICT_LOWERCASE="${CMAKE_CURRENT_SOURCE_DIR}/data/test-pronounce-dict-lowercase.dic")
add_definitions(-DPRONOUCE_DICT_HTK="${CMAKE_CURRENT_SOURCE_DIR}/data/test-pronounce-dict-htk.dic")
set(
UNIT_TESTS_SRC
TestPronounceDict.cpp
main.cpp
)
if(${ENABLE_VOICE_TESTS})
list(APPEND UNIT_TESTS_SRC TestVoiceService.cpp)
endif()
add_executable(
unit-tests
${UNIT_TESTS_SRC}
)
qt5_use_modules(
unit-tests
Core
DBus
Test
)
target_link_libraries(
unit-tests
unityvoice
unity-voice-service
${POCKETSPHINX_LIBRARIES}
${QTDBUSTEST_LIBRARIES}
${GTEST_LIBRARIES}
)
add_valgrind_test(
unit-tests
unit-tests
)
# Install autopilot tests
set(AUTOPILOT_DIR autopilot/unity_voice)
execute_process(COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
OUTPUT_VARIABLE PYTHON_PACKAGE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
install(DIRECTORY ${AUTOPILOT_DIR}
DESTINATION ${PYTHON_PACKAGE_DIR}
)
install(
DIRECTORY "data/sounds"
DESTINATION "${PYTHON_PACKAGE_DIR}/unity_voice/"
)
unity-voice-0.1+14.04.20140304/tests/main.cpp 0000644 0000152 0177776 00000002243 12305262546 021017 0 ustar pbuser nogroup 0000000 0000000 /*
* Copyright (C) 2013 Canonical, Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*
* Author: Pete Woods
*/
#include
#include
#include
#include
using namespace LibUnityVoice;
int main(int argc, char **argv) {
qputenv("LANG", "C.UTF-8");
unsetenv("LC_ALL");
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
textdomain(GETTEXT_PACKAGE);
QCoreApplication application(argc, argv);
UnityVoice::registerMetaTypes();
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
unity-voice-0.1+14.04.20140304/tests/data/ 0000755 0000152 0177776 00000000000 12305262767 020304 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/data/test-pronounce-dict-hashes.dic 0000644 0000152 0177776 00000000114 12305262546 026133 0 ustar pbuser nogroup 0000000 0000000 # Some comments
#
# Blah
#
HELLO hh ax l ow
THERE dh ea
THERE dh ea r
unity-voice-0.1+14.04.20140304/tests/data/test-pronounce-dict-lowercase.dic 0000644 0000152 0177776 00000000072 12305262546 026647 0 ustar pbuser nogroup 0000000 0000000 hello HH AH0 L OW1
HELLO(1) HH EH0 L OW1
tHere DH EH1 R unity-voice-0.1+14.04.20140304/tests/data/test-pronounce-dict-semicolon.dic 0000644 0000152 0177776 00000000153 12305262546 026653 0 ustar pbuser nogroup 0000000 0000000 ;;; # Some comments
;;;
;;; More comments
;;;
HELLO HH AH0 L OW1
HELLO(1) HH EH0 L OW1
THERE DH EH1 R
unity-voice-0.1+14.04.20140304/tests/data/test-pronounce-dict-htk.dic 0000644 0000152 0177776 00000000236 12305262546 025453 0 ustar pbuser nogroup 0000000 0000000 ABANDON [ABANDON] ax b ae n d ax n
ABANDONED [ABANDONED] ax b ae n d ax n d
ABANDONMENT [ABANDONMENT] ax b ae n d ax n m ax n t
unity-voice-0.1+14.04.20140304/tests/data/sounds/ 0000755 0000152 0177776 00000000000 12305262767 021617 5 ustar pbuser nogroup 0000000 0000000 unity-voice-0.1+14.04.20140304/tests/data/sounds/open-tab.raw 0000644 0000152 0177776 00000176326 12305262546 024051 0 ustar pbuser nogroup 0000000 0000000 þÿþÿþÿýÿýÿÿÿ ÿÿýÿýÿÿÿ ýÿüÿûÿúÿûÿøÿùÿùÿùÿûÿýÿýÿýÿþÿ ÿÿüÿûÿûÿúÿûÿýÿ þÿ þÿþÿÿÿ ÿÿýÿûÿ÷ÿ÷ÿ÷ÿ÷ÿøÿøÿûÿÿÿ ÿÿþÿýÿþÿþÿýÿÿÿ
ÿÿþÿýÿûÿøÿõÿõÿùÿúÿûÿûÿûÿüÿûÿûÿúÿ÷ÿöÿôÿôÿõÿöÿ÷ÿøÿúÿüÿüÿüÿüÿúÿúÿýÿ þÿþÿ ÿÿþÿýÿþÿþÿþÿÿÿ þÿýÿþÿþÿþÿýÿýÿÿÿ ÿÿýÿþÿýÿýÿýÿýÿþÿ ÿÿÿÿþÿýÿýÿýÿýÿüÿüÿüÿûÿúÿûÿýÿþÿüÿüÿýÿÿÿ ÿÿýÿûÿûÿúÿúÿüÿýÿýÿýÿúÿøÿúÿúÿúÿûÿûÿüÿüÿýÿþÿýÿÿÿ ÿÿ ÿÿÿÿþÿüÿýÿýÿÿÿ þÿÿÿ þÿýÿþÿ þÿþÿ ýÿûÿüÿýÿþÿýÿýÿýÿÿÿ ÿÿþÿþÿýÿýÿüÿûÿüÿýÿþÿ ÿÿþÿþÿýÿýÿýÿþÿ ÿÿýÿüÿûÿúÿûÿüÿûÿùÿøÿ÷ÿôÿõÿ÷ÿöÿ÷ÿùÿúÿúÿüÿþÿýÿüÿýÿÿÿ þÿ þÿþÿþÿþÿþÿÿÿ ýÿüÿüÿýÿÿÿ þÿüÿýÿýÿ þÿýÿüÿýÿýÿýÿþÿþÿþÿþÿþÿýÿûÿýÿþÿþÿÿÿ ýÿüÿýÿýÿýÿýÿûÿüÿüÿüÿýÿýÿÿÿ þÿ ýÿýÿúÿúÿûÿ÷ÿöÿ÷ÿøÿûÿûÿúÿûÿûÿüÿúÿ÷ÿ÷ÿøÿûÿüÿüÿüÿýÿ
þÿþÿþÿýÿüÿúÿúÿùÿùÿøÿøÿ÷ÿ÷ÿõÿòÿóÿõÿøÿþÿ
ÿÿýÿýÿüÿûÿûÿûÿüÿþÿ þÿþÿ ÿÿþÿ ýÿùÿûÿûÿûÿýÿûÿûÿýÿýÿúÿúÿüÿûÿûÿüÿýÿþÿþÿýÿÿÿÿÿýÿþÿûÿûÿúÿöÿøÿúÿøÿùÿúÿúÿûÿúÿüÿýÿÿÿ þÿýÿûÿøÿ÷ÿøÿ÷ÿöÿ÷ÿùÿûÿýÿþÿýÿüÿûÿýÿ ýÿûÿüÿûÿüÿþÿÿÿþÿýÿûÿûÿüÿþÿ ÿÿÿÿýÿüÿúÿøÿøÿûÿýÿýÿýÿþÿ ÿÿüÿüÿüÿüÿüÿüÿýÿûÿüÿýÿþÿýÿùÿøÿúÿûÿüÿýÿýÿÿÿ ÿÿ ÿÿýÿÿÿ ÿÿýÿþÿýÿüÿýÿüÿúÿüÿüÿûÿýÿþÿþÿ ÿÿþÿþÿûÿüÿüÿþÿ þÿþÿþÿýÿúÿûÿûÿúÿüÿûÿüÿþÿýÿÿÿ ÿÿþÿýÿýÿþÿþÿþÿÿÿ þÿýÿüÿýÿüÿýÿ ýÿüÿúÿöÿ÷ÿ÷ÿøÿøÿúÿûÿúÿûÿøÿ÷ÿöÿõÿùÿûÿüÿýÿþÿþÿþÿÿÿ ÿÿ ÿÿþÿ ÿÿÿÿþÿýÿþÿþÿ ÿÿýÿýÿ þÿ þÿùÿøÿøÿùÿüÿþÿ þÿüÿüÿûÿûÿúÿûÿýÿüÿûÿýÿ þÿþÿþÿþÿþÿýÿýÿÿÿ ÿÿ ÿÿýÿüÿûÿúÿøÿ÷ÿ÷ÿøÿúÿûÿüÿþÿþÿÿÿ üÿøÿ÷ÿøÿüÿûÿûÿûÿøÿûÿþÿþÿýÿüÿüÿûÿúÿûÿüÿüÿýÿþÿûÿûÿûÿ÷ÿ÷ÿúÿýÿ
þÿýÿýÿÿÿ þÿþÿþÿ ÿÿÿÿ ÿÿýÿùÿùÿûÿúÿüÿýÿÿÿ þÿýÿýÿùÿúÿúÿ÷ÿ÷ÿöÿ÷ÿùÿøÿùÿùÿøÿúÿûÿýÿ ÿÿüÿüÿüÿüÿýÿþÿÿÿ ÿÿÿÿ ÿÿýÿýÿýÿÿÿÿÿþÿýÿüÿþÿÿÿþÿÿÿ þÿþÿþÿÿÿ ýÿüÿûÿüÿþÿýÿüÿýÿþÿüÿûÿþÿ ÿÿ ÿÿÿÿ þÿþÿüÿûÿýÿýÿþÿ ÿÿýÿûÿûÿûÿûÿûÿûÿûÿûÿûÿûÿúÿüÿÿÿ ÿÿüÿúÿúÿúÿûÿüÿþÿ þÿüÿþÿ þÿýÿÿÿ þÿûÿúÿúÿüÿýÿûÿüÿüÿýÿýÿüÿûÿûÿüÿÿÿ þÿþÿüÿûÿøÿ÷ÿúÿúÿúÿùÿùÿúÿøÿùÿùÿùÿüÿýÿþÿþÿÿÿ þÿþÿþÿ þÿúÿ÷ÿøÿúÿùÿúÿøÿùÿþÿþÿÿÿÿÿüÿüÿûÿýÿ
ÿÿýÿýÿÿÿ þÿüÿúÿúÿúÿúÿûÿûÿûÿýÿþÿþÿüÿúÿúÿüÿýÿÿÿ þÿþÿ þÿüÿýÿýÿþÿþÿþÿüÿüÿüÿûÿüÿûÿøÿ÷ÿ÷ÿ÷ÿöÿ÷ÿøÿúÿûÿýÿ þÿüÿûÿüÿÿÿþÿ ÿÿýÿþÿ ÿÿüÿýÿÿÿÿÿþÿýÿýÿüÿûÿûÿúÿûÿýÿþÿüÿûÿüÿüÿÿÿ ÿÿ þÿÿÿ ÿÿýÿýÿüÿüÿüÿüÿþÿ ÿÿ þÿþÿüÿùÿøÿúÿýÿ þÿýÿþÿ ÿÿýÿýÿüÿûÿúÿúÿýÿ þÿüÿûÿûÿ÷ÿõÿùÿûÿüÿÿÿ þÿýÿ þÿüÿüÿüÿþÿþÿþÿþÿýÿýÿþÿþÿþÿ ÿÿýÿýÿýÿüÿûÿùÿûÿýÿÿÿþÿþÿýÿýÿýÿýÿûÿûÿûÿüÿúÿöÿöÿøÿøÿøÿùÿùÿøÿúÿúÿ÷ÿ÷ÿ÷ÿöÿøÿûÿùÿúÿúÿøÿùÿúÿûÿüÿýÿþÿýÿýÿþÿþÿÿÿ ýÿýÿ ýÿûÿüÿÿÿ ÿÿ ÿÿþÿýÿúÿûÿþÿþÿþÿþÿÿÿ þÿýÿýÿýÿüÿùÿ÷ÿöÿ÷ÿøÿøÿøÿøÿøÿøÿùÿûÿúÿúÿùÿøÿúÿúÿüÿÿÿ þÿýÿþÿýÿýÿ þÿüÿüÿûÿøÿúÿûÿüÿÿÿ ÿÿþÿ þÿýÿýÿþÿþÿýÿýÿýÿþÿ þÿýÿ þÿýÿþÿÿÿ ÿÿüÿúÿúÿûÿüÿüÿüÿüÿýÿÿÿ þÿûÿüÿüÿûÿûÿüÿþÿûÿ÷ÿúÿûÿûÿøÿöÿùÿüÿÿÿ ÿÿ þÿüÿýÿýÿ ýÿûÿûÿýÿÿÿ ÿÿ þÿûÿûÿûÿüÿþÿ üÿúÿûÿûÿüÿûÿúÿùÿøÿúÿøÿ÷ÿ÷ÿöÿõÿõÿ÷ÿúÿüÿ ÿÿþÿýÿþÿþÿýÿýÿüÿüÿýÿþÿÿÿ ÿÿüÿüÿûÿüÿýÿüÿüÿûÿûÿûÿùÿ÷ÿ÷ÿûÿþÿ ýÿüÿûÿüÿýÿûÿùÿûÿûÿûÿþÿ þÿþÿÿÿþÿÿÿ þÿýÿÿÿÿÿÿÿ þÿþÿýÿúÿøÿ÷ÿùÿüÿýÿþÿÿÿÿÿþÿ ÿÿÿÿ þÿÿÿýÿüÿÿÿÿÿþÿ ýÿúÿúÿûÿüÿüÿýÿ ýÿüÿûÿüÿ þÿþÿÿÿ þÿýÿþÿþÿûÿûÿûÿûÿûÿùÿøÿûÿúÿúÿ÷ÿõÿõÿõÿõÿõÿõÿõÿõÿ÷ÿ÷ÿ÷ÿûÿÿÿ þÿýÿüÿûÿûÿüÿýÿÿÿ
ÿÿþÿýÿýÿ
þÿýÿþÿþÿÿÿ ýÿüÿúÿøÿùÿüÿ
ÿÿýÿüÿûÿüÿýÿûÿúÿúÿûÿùÿøÿøÿøÿöÿôÿôÿôÿöÿ÷ÿùÿûÿþÿ ÿÿýÿüÿüÿ
þÿúÿ÷ÿ÷ÿ÷ÿöÿöÿõÿõÿöÿ÷ÿúÿüÿüÿ üÿûÿüÿûÿüÿþÿ þÿûÿ÷ÿõÿôÿõÿøÿüÿýÿüÿùÿ÷ÿ÷ÿúÿûÿüÿüÿýÿÿÿ ýÿûÿüÿýÿýÿüÿýÿ ÿÿÿÿ þÿþÿþÿýÿýÿüÿüÿüÿýÿýÿýÿþÿýÿþÿýÿýÿ þÿýÿþÿýÿýÿþÿÿÿ ÿÿþÿýÿþÿ ÿÿüÿüÿúÿøÿûÿýÿþÿ ÿÿ ÿÿ ÿÿýÿüÿýÿÿÿ þÿüÿýÿýÿýÿ þÿþÿ þÿüÿûÿûÿüÿýÿýÿþÿ ýÿýÿ ýÿüÿýÿûÿúÿüÿûÿùÿúÿúÿûÿýÿþÿ ÿÿ ÿÿþÿþÿþÿþÿ ÿÿÿÿ þÿúÿûÿÿÿ ÿÿþÿþÿýÿÿÿ þÿüÿüÿýÿÿÿ üÿûÿüÿüÿþÿýÿùÿùÿüÿýÿüÿþÿ ÿÿýÿýÿþÿÿÿþÿýÿýÿýÿýÿüÿûÿüÿýÿýÿýÿýÿýÿýÿýÿýÿüÿûÿûÿúÿüÿýÿÿÿ ýÿûÿùÿøÿúÿüÿüÿüÿýÿ ÿÿýÿüÿûÿúÿùÿ÷ÿøÿúÿúÿùÿùÿûÿüÿýÿþÿÿÿ ÿÿüÿûÿùÿöÿ÷ÿùÿûÿûÿøÿ÷ÿøÿ÷ÿ÷ÿøÿøÿúÿýÿýÿýÿýÿýÿüÿúÿûÿÿÿ
þÿúÿøÿùÿûÿúÿùÿøÿøÿ÷ÿ÷ÿùÿùÿùÿûÿûÿýÿþÿýÿþÿýÿûÿûÿûÿþÿýÿüÿýÿÿÿÿÿýÿýÿýÿýÿüÿþÿ ÿÿþÿýÿþÿþÿÿÿÿÿýÿýÿýÿþÿüÿüÿýÿûÿýÿþÿÿÿÿÿþÿ þÿþÿ ÿÿÿÿ ÿÿÿÿ
ÿÿ ÿÿýÿüÿüÿûÿüÿûÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿøÿûÿüÿýÿýÿþÿÿÿÿÿ þÿýÿþÿ þÿ þÿþÿüÿüÿÿÿ þÿûÿûÿûÿûÿýÿüÿüÿýÿýÿýÿýÿþÿþÿýÿüÿûÿúÿùÿ÷ÿùÿûÿüÿþÿýÿÿÿ üÿýÿÿÿÿÿ ÿÿ ýÿûÿûÿúÿúÿüÿüÿûÿûÿýÿþÿþÿ ÿÿþÿ ÿÿ þÿüÿüÿøÿöÿ÷ÿøÿúÿüÿûÿúÿúÿûÿüÿûÿúÿúÿùÿùÿüÿýÿþÿÿÿ ýÿúÿûÿÿÿ ÿÿþÿýÿüÿûÿûÿþÿ üÿüÿùÿ÷ÿ÷ÿöÿöÿøÿùÿûÿûÿüÿýÿüÿüÿýÿýÿýÿþÿ ýÿüÿüÿýÿþÿþÿÿÿ
ÿÿ ÿÿýÿÿÿ þÿúÿ÷ÿ÷ÿ÷ÿöÿöÿùÿûÿýÿüÿýÿÿÿþÿýÿýÿýÿýÿýÿüÿûÿùÿøÿ÷ÿ÷ÿùÿûÿýÿûÿüÿþÿþÿ ýÿüÿüÿûÿüÿýÿýÿüÿüÿûÿüÿüÿýÿÿÿÿÿ ÿÿýÿÿÿ ÿÿýÿüÿýÿÿÿÿÿýÿþÿ ýÿüÿüÿûÿûÿûÿûÿúÿûÿýÿ ÿÿþÿþÿýÿüÿúÿùÿúÿûÿüÿüÿüÿüÿüÿüÿþÿýÿûÿùÿøÿúÿúÿýÿüÿùÿûÿýÿ ÿÿüÿüÿýÿýÿþÿþÿýÿÿÿÿÿÿÿÿÿüÿüÿüÿüÿýÿûÿüÿþÿüÿüÿüÿüÿûÿúÿüÿýÿþÿÿÿ ýÿüÿþÿýÿýÿÿÿ ÿÿþÿ ÿÿýÿþÿ þÿÿÿ ýÿûÿüÿûÿýÿ ÿÿþÿÿÿ ýÿüÿúÿ÷ÿøÿýÿ ýÿüÿûÿ÷ÿöÿ÷ÿ÷ÿ÷ÿöÿõÿóÿóÿöÿùÿúÿüÿÿÿ ÿÿþÿÿÿ
þÿüÿýÿþÿýÿüÿüÿúÿúÿüÿüÿúÿúÿýÿ ÿÿÿÿ ÿÿýÿýÿüÿûÿþÿþÿþÿ ÿÿýÿþÿüÿüÿüÿýÿýÿúÿ÷ÿöÿöÿöÿôÿòÿõÿùÿûÿýÿýÿûÿýÿýÿþÿ ÿÿþÿýÿþÿ
þÿûÿûÿûÿüÿüÿüÿüÿúÿúÿùÿ÷ÿùÿûÿüÿýÿþÿþÿýÿþÿ þÿþÿÿÿ
ýÿÿÿýÿûÿüÿüÿûÿûÿýÿýÿüÿûÿûÿýÿþÿýÿýÿþÿýÿúÿûÿüÿüÿýÿüÿýÿþÿýÿýÿþÿ ýÿüÿûÿûÿûÿúÿúÿüÿÿÿÿÿ þÿýÿûÿúÿùÿùÿüÿýÿýÿþÿÿÿ ÿÿýÿÿÿ þÿýÿüÿþÿþÿÿÿ ÿÿýÿþÿ ÿÿþÿýÿüÿüÿüÿýÿýÿüÿüÿúÿøÿøÿøÿúÿúÿüÿþÿýÿýÿýÿþÿ ýÿýÿýÿýÿüÿúÿøÿøÿûÿûÿüÿÿÿ ÿÿ ÿÿÿÿ þÿþÿ ÿÿþÿýÿýÿýÿýÿýÿüÿøÿ÷ÿøÿ÷ÿõÿõÿ÷ÿ÷ÿ÷ÿ÷ÿõÿ÷ÿûÿüÿüÿþÿþÿÿÿÿÿýÿýÿüÿüÿþÿÿÿ þÿüÿýÿþÿ
þÿúÿøÿøÿ÷ÿùÿûÿûÿúÿûÿýÿþÿ ýÿüÿýÿùÿøÿ÷ÿøÿüÿúÿúÿøÿöÿõÿöÿøÿöÿøÿûÿûÿÿÿ ÿÿþÿþÿþÿÿÿ þÿÿÿ þÿüÿúÿúÿøÿúÿûÿûÿýÿþÿÿÿ þÿ þÿýÿ þÿüÿüÿþÿ ÿÿ ÿÿþÿýÿüÿÿÿ ÿÿþÿ þÿÿÿ ýÿûÿùÿüÿüÿûÿûÿùÿøÿøÿøÿûÿüÿýÿûÿûÿùÿøÿûÿüÿÿÿ ÿÿþÿ þÿûÿûÿýÿüÿûÿþÿ þÿûÿûÿúÿùÿúÿúÿûÿüÿüÿþÿ þÿûÿúÿûÿüÿýÿþÿþÿüÿüÿþÿþÿþÿþÿýÿûÿûÿüÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ þÿ ÿÿþÿ ÿÿ þÿûÿüÿûÿüÿþÿüÿúÿüÿüÿùÿøÿøÿ÷ÿ÷ÿöÿôÿõÿ÷ÿøÿûÿýÿÿÿ ÿÿ ÿÿÿÿþÿýÿýÿþÿ þÿþÿüÿûÿüÿûÿúÿùÿúÿûÿûÿûÿúÿüÿþÿýÿþÿ ýÿýÿüÿùÿøÿ÷ÿùÿûÿüÿûÿûÿþÿ ÿÿþÿþÿþÿýÿýÿýÿþÿþÿÿÿ ÿÿúÿùÿúÿúÿùÿøÿûÿýÿÿÿ ÿÿýÿþÿÿÿ ÿÿýÿüÿüÿþÿ þÿúÿùÿúÿûÿüÿýÿþÿýÿúÿûÿýÿüÿüÿûÿûÿûÿúÿûÿýÿÿÿ ÿÿ ýÿüÿýÿüÿûÿüÿýÿüÿüÿûÿûÿþÿ ÿÿüÿúÿýÿþÿþÿ ÿÿÿÿ þÿüÿúÿøÿùÿûÿúÿúÿûÿýÿ þÿþÿûÿûÿüÿþÿýÿüÿüÿüÿýÿ þÿÿÿ þÿýÿýÿýÿýÿüÿúÿùÿùÿúÿûÿýÿþÿÿÿýÿüÿýÿüÿüÿüÿùÿ÷ÿøÿ÷ÿúÿýÿÿÿ þÿÿÿ ýÿþÿüÿúÿúÿøÿ÷ÿúÿùÿøÿúÿüÿüÿýÿýÿûÿüÿýÿûÿúÿûÿüÿúÿøÿøÿúÿûÿúÿúÿúÿüÿþÿþÿýÿþÿ ýÿýÿÿÿ ýÿüÿûÿùÿøÿýÿ þÿûÿûÿüÿÿÿ þÿýÿ þÿþÿþÿ ÿÿ ÿÿþÿþÿþÿÿÿ ÿÿýÿ þÿýÿûÿþÿþÿüÿûÿúÿúÿùÿöÿöÿ÷ÿúÿûÿúÿýÿ üÿøÿ÷ÿùÿûÿúÿøÿüÿüÿüÿýÿýÿýÿýÿýÿþÿþÿýÿûÿûÿýÿþÿþÿ ÿÿ ÿÿüÿûÿûÿüÿþÿþÿþÿ ÿÿüÿýÿÿÿ ÿÿýÿýÿüÿüÿýÿýÿýÿ þÿûÿûÿüÿýÿýÿÿÿ þÿþÿÿÿÿÿþÿþÿ þÿþÿþÿÿÿ ÿÿÿÿ þÿüÿüÿúÿ÷ÿùÿüÿþÿ þÿýÿýÿÿÿ þÿ þÿÿÿþÿüÿüÿüÿüÿüÿýÿýÿþÿÿÿ ýÿûÿûÿûÿüÿýÿþÿ þÿÿÿ ýÿýÿüÿûÿýÿ ÿÿýÿþÿ ÿÿ ÿÿüÿûÿüÿýÿýÿþÿ þÿÿÿþÿþÿýÿ ýÿþÿ ÿÿüÿùÿüÿýÿýÿýÿûÿùÿöÿôÿõÿôÿôÿóÿóÿõÿöÿ÷ÿøÿùÿûÿüÿýÿüÿýÿûÿùÿûÿüÿýÿüÿÿÿ þÿýÿúÿûÿûÿüÿýÿÿÿ ÿÿÿÿ ÿÿ þÿþÿ ÿÿýÿ ÿÿþÿþÿüÿþÿÿÿ ýÿýÿýÿûÿûÿüÿûÿûÿûÿ÷ÿ÷ÿøÿüÿýÿýÿþÿýÿþÿ þÿýÿüÿýÿ þÿþÿÿÿüÿüÿýÿýÿÿÿ þÿþÿþÿýÿþÿüÿúÿüÿúÿûÿûÿùÿøÿ÷ÿöÿ÷ÿøÿúÿüÿýÿýÿ ÿÿÿÿ ÿÿýÿÿÿþÿýÿýÿ ÿÿþÿþÿýÿÿÿÿÿþÿ þÿýÿýÿþÿýÿûÿùÿ÷ÿùÿûÿûÿüÿþÿüÿ÷ÿøÿûÿýÿüÿùÿùÿúÿúÿúÿúÿýÿýÿüÿÿÿ ÿÿÿÿ ÿÿ ÿÿ þÿýÿþÿþÿþÿþÿþÿþÿüÿúÿûÿüÿûÿúÿúÿýÿþÿþÿüÿúÿûÿúÿûÿúÿùÿùÿøÿúÿýÿÿÿ þÿÿÿ þÿþÿ ýÿûÿüÿýÿüÿüÿüÿüÿüÿûÿûÿ÷ÿöÿ÷ÿ÷ÿùÿûÿûÿýÿ ýÿüÿþÿ ÿÿýÿüÿùÿùÿúÿúÿüÿþÿýÿûÿúÿüÿúÿøÿúÿûÿýÿýÿþÿ ÿÿÿÿ þÿþÿýÿýÿýÿüÿûÿþÿýÿûÿýÿþÿýÿþÿþÿýÿþÿ ÿÿþÿÿÿ þÿüÿúÿøÿùÿúÿùÿøÿúÿüÿüÿÿÿ þÿûÿýÿ ÿÿýÿýÿüÿûÿüÿûÿüÿüÿøÿøÿýÿÿÿ
þÿûÿüÿûÿùÿüÿýÿüÿýÿþÿ ýÿþÿ þÿýÿüÿýÿ ÿÿýÿüÿýÿ þÿýÿÿÿþÿýÿýÿüÿüÿûÿøÿùÿûÿúÿ÷ÿ÷ÿ÷ÿøÿ÷ÿúÿýÿþÿþÿþÿþÿþÿþÿþÿýÿþÿ þÿþÿþÿÿÿ þÿþÿþÿÿÿ ýÿýÿüÿûÿûÿùÿøÿùÿüÿüÿýÿþÿÿÿ ÿÿþÿþÿþÿüÿüÿýÿýÿýÿýÿýÿýÿ ÿÿ þÿþÿ ÿÿýÿýÿÿÿ þÿÿÿþÿþÿþÿûÿûÿùÿ÷ÿ÷ÿøÿùÿúÿûÿýÿþÿüÿýÿýÿüÿüÿüÿûÿ÷ÿ÷ÿøÿùÿûÿýÿ ÿÿÿÿ þÿüÿüÿüÿýÿýÿýÿýÿûÿûÿüÿüÿýÿþÿþÿÿÿÿÿ þÿüÿüÿýÿûÿøÿ÷ÿûÿýÿþÿþÿüÿüÿýÿþÿüÿúÿúÿúÿöÿôÿõÿõÿ÷ÿøÿøÿ÷ÿøÿúÿúÿüÿýÿýÿþÿ þÿùÿùÿüÿüÿüÿüÿûÿýÿ þÿþÿýÿýÿ ÿÿýÿüÿûÿûÿûÿýÿÿÿþÿÿÿ þÿüÿýÿýÿþÿýÿÿÿÿÿþÿþÿþÿÿÿ þÿýÿüÿüÿûÿúÿùÿúÿûÿúÿüÿþÿ ÿÿýÿüÿüÿþÿÿÿ ýÿûÿûÿùÿùÿûÿûÿûÿûÿûÿûÿýÿþÿüÿúÿúÿúÿûÿýÿüÿüÿÿÿÿÿÿÿ þÿþÿýÿýÿýÿþÿþÿýÿþÿþÿýÿýÿýÿÿÿÿÿýÿýÿüÿüÿÿÿ üÿûÿýÿýÿýÿýÿüÿþÿ ÿÿþÿÿÿ ÿÿýÿüÿúÿúÿûÿùÿ÷ÿøÿüÿÿÿ ÿÿýÿýÿýÿÿÿ ÿÿþÿ ÿÿýÿüÿüÿûÿýÿþÿýÿúÿ÷ÿöÿøÿúÿûÿûÿûÿûÿüÿüÿüÿ þÿüÿûÿøÿ÷ÿøÿ÷ÿ÷ÿøÿøÿ÷ÿõÿõÿöÿ÷ÿøÿøÿùÿüÿüÿüÿÿÿ üÿúÿùÿüÿüÿûÿüÿüÿÿÿ þÿüÿüÿýÿýÿýÿÿÿ ýÿþÿ þÿþÿýÿúÿùÿúÿûÿüÿýÿþÿ
ÿÿüÿýÿ ÿÿüÿüÿýÿþÿýÿÿÿ ÿÿüÿüÿýÿþÿþÿ ÿÿýÿþÿýÿûÿüÿüÿüÿþÿþÿýÿþÿþÿýÿþÿ ÿÿþÿþÿüÿùÿøÿúÿüÿþÿÿÿüÿûÿûÿúÿ÷ÿùÿýÿþÿüÿýÿÿÿþÿûÿûÿüÿûÿýÿÿÿ ÿÿ ýÿüÿúÿúÿúÿûÿüÿüÿýÿýÿþÿ ýÿýÿýÿûÿúÿùÿûÿùÿøÿùÿ÷ÿøÿúÿüÿþÿÿÿÿÿ þÿÿÿ ýÿüÿüÿüÿýÿüÿûÿüÿüÿûÿúÿûÿøÿöÿöÿ÷ÿúÿùÿøÿøÿúÿþÿ ÿÿþÿþÿþÿþÿýÿüÿüÿýÿÿÿ þÿ ÿÿþÿ ÿÿýÿýÿýÿÿÿ þÿ ÿÿþÿ
ÿÿýÿýÿýÿþÿ ýÿúÿúÿùÿøÿúÿúÿúÿüÿþÿ þÿýÿûÿûÿûÿüÿüÿýÿþÿþÿ ÿÿüÿüÿþÿÿÿÿÿ ÿÿþÿüÿúÿûÿüÿýÿüÿüÿýÿþÿ ÿÿüÿüÿýÿýÿþÿþÿüÿþÿ þÿþÿýÿûÿúÿúÿûÿùÿûÿüÿüÿüÿüÿûÿûÿûÿüÿýÿþÿ þÿûÿþÿüÿøÿøÿ÷ÿùÿüÿÿÿ ÿÿýÿýÿ ýÿúÿùÿøÿúÿøÿ÷ÿ÷ÿøÿúÿûÿüÿ ÿÿþÿ ÿÿ ýÿûÿüÿÿÿ ÿÿýÿüÿüÿþÿ þÿüÿûÿûÿûÿüÿýÿúÿùÿüÿûÿüÿ þÿýÿÿÿ þÿÿÿ þÿýÿýÿüÿüÿûÿþÿÿÿ ÿÿÿÿþÿÿÿ þÿùÿúÿúÿøÿøÿùÿûÿúÿúÿúÿùÿúÿ÷ÿöÿõÿ÷ÿúÿùÿûÿþÿþÿÿÿ ÿÿüÿüÿþÿÿÿÿÿ ýÿýÿüÿúÿúÿûÿýÿþÿüÿýÿ þÿþÿüÿüÿÿÿ þÿýÿýÿýÿýÿ ÿÿ ÿÿüÿûÿúÿøÿùÿûÿüÿüÿýÿþÿüÿøÿøÿùÿûÿüÿþÿþÿüÿüÿüÿþÿÿÿýÿüÿþÿ þÿýÿûÿýÿ þÿ þÿ þÿ þÿÿÿ þÿýÿýÿþÿþÿýÿþÿ þÿýÿýÿÿÿ ÿÿýÿüÿüÿþÿþÿüÿûÿûÿüÿþÿþÿÿÿ þÿýÿýÿýÿüÿüÿúÿúÿûÿùÿùÿúÿüÿüÿüÿýÿúÿ÷ÿùÿúÿûÿýÿûÿùÿøÿûÿÿÿ ýÿüÿýÿþÿýÿýÿÿÿÿÿýÿÿÿ ýÿüÿüÿüÿúÿ÷ÿùÿûÿýÿ ÿÿÿÿ ýÿýÿÿÿ
ýÿýÿýÿþÿýÿüÿúÿúÿûÿúÿüÿÿÿ ÿÿüÿüÿýÿüÿýÿþÿþÿ þÿýÿýÿûÿûÿúÿúÿüÿÿÿ ÿÿüÿúÿøÿúÿýÿýÿýÿþÿÿÿ ýÿýÿýÿüÿûÿüÿûÿúÿúÿûÿûÿûÿüÿýÿþÿýÿþÿÿÿþÿ þÿþÿýÿþÿ þÿýÿýÿüÿþÿþÿþÿ þÿÿÿþÿûÿøÿöÿöÿöÿ÷ÿøÿûÿùÿ÷ÿ÷ÿ÷ÿùÿüÿýÿýÿýÿýÿþÿÿÿ þÿ ÿÿÿÿ ýÿýÿüÿûÿúÿùÿùÿûÿþÿ ýÿûÿúÿûÿÿÿ ýÿýÿüÿüÿþÿþÿ ÿÿ ýÿýÿýÿýÿþÿ þÿûÿûÿýÿüÿûÿøÿ÷ÿùÿûÿûÿüÿýÿûÿüÿûÿüÿþÿþÿþÿüÿúÿøÿ÷ÿöÿöÿ÷ÿ÷ÿ÷ÿøÿùÿùÿøÿûÿÿÿ ÿÿüÿýÿþÿüÿûÿüÿýÿýÿþÿÿÿÿÿ ýÿýÿþÿþÿþÿýÿÿÿÿÿüÿûÿûÿûÿýÿþÿþÿ ÿÿÿÿ ÿÿýÿùÿöÿõÿõÿõÿõÿõÿöÿ÷ÿ÷ÿúÿûÿûÿüÿþÿ ýÿýÿÿÿþÿþÿýÿüÿüÿûÿúÿûÿúÿúÿúÿúÿúÿüÿýÿþÿ ÿÿýÿýÿýÿýÿ þÿ ÿÿýÿÿÿ ÿÿýÿûÿ÷ÿ÷ÿøÿúÿûÿýÿ ÿÿþÿýÿþÿÿÿþÿþÿýÿýÿÿÿ þÿüÿýÿýÿüÿûÿúÿúÿøÿõÿõÿ÷ÿøÿ÷ÿøÿûÿüÿýÿ üÿúÿüÿûÿýÿÿÿüÿýÿ
ýÿøÿöÿöÿøÿúÿûÿüÿüÿüÿüÿûÿûÿüÿüÿýÿþÿÿÿÿÿ
þÿÿÿ ÿÿüÿûÿûÿýÿüÿûÿýÿþÿþÿýÿûÿùÿ÷ÿ÷ÿöÿ÷ÿöÿõÿõÿõÿøÿ÷ÿøÿûÿýÿþÿÿÿ ÿÿüÿýÿýÿüÿýÿýÿüÿüÿýÿÿÿ ÿÿýÿûÿøÿùÿüÿüÿÿÿ þÿýÿüÿüÿ ÿÿÿÿ þÿýÿþÿýÿûÿûÿûÿüÿüÿýÿýÿýÿÿÿ ÿÿþÿýÿþÿ þÿÿÿ þÿþÿÿÿ ýÿúÿúÿøÿöÿøÿûÿýÿûÿûÿûÿüÿýÿüÿýÿÿÿ þÿýÿýÿÿÿ þÿ ýÿüÿúÿûÿûÿýÿþÿûÿûÿûÿüÿýÿþÿ ÿÿþÿþÿþÿ ÿÿûÿúÿúÿûÿÿÿ ÿÿ þÿûÿùÿùÿûÿûÿûÿûÿûÿüÿþÿþÿüÿüÿüÿüÿüÿýÿÿÿ ÿÿþÿþÿþÿýÿÿÿ ÿÿ ÿÿ ÿÿüÿûÿúÿ÷ÿõÿõÿöÿ÷ÿùÿúÿüÿþÿýÿýÿýÿþÿþÿÿÿ þÿûÿûÿýÿûÿüÿüÿûÿüÿüÿüÿüÿþÿÿÿþÿ þÿþÿÿÿ ÿÿýÿýÿýÿýÿüÿûÿûÿùÿ÷ÿúÿûÿúÿûÿüÿýÿýÿýÿýÿþÿþÿþÿÿÿ ÿÿÿÿ ÿÿýÿÿÿþÿüÿýÿ þÿþÿ ÿÿþÿýÿüÿûÿûÿüÿüÿýÿÿÿ ÿÿÿÿþÿÿÿ ýÿûÿüÿüÿýÿÿÿ þÿüÿýÿûÿüÿýÿþÿ ýÿüÿüÿûÿûÿúÿúÿûÿûÿüÿüÿûÿûÿûÿúÿøÿ÷ÿöÿôÿóÿòÿôÿöÿùÿùÿùÿþÿ
ÿÿýÿüÿüÿûÿûÿûÿüÿýÿûÿøÿöÿ÷ÿøÿøÿ÷ÿöÿöÿöÿõÿõÿöÿ÷ÿöÿ÷ÿüÿ þÿþÿ þÿýÿüÿýÿÿÿ þÿþÿþÿ ÿÿüÿüÿüÿýÿ þÿþÿ þÿüÿüÿþÿ ýÿÿÿ þÿüÿýÿÿÿÿÿþÿþÿÿÿ þÿýÿýÿþÿüÿúÿûÿûÿýÿ ÿÿþÿ ÿÿ þÿýÿþÿþÿþÿûÿúÿùÿ÷ÿ÷ÿùÿüÿþÿÿÿýÿüÿýÿÿÿ ÿÿ þÿþÿþÿþÿÿÿ ÿÿþÿýÿÿÿ þÿ ÿÿýÿ ÿÿýÿûÿûÿüÿüÿüÿûÿûÿüÿþÿüÿýÿÿÿþÿÿÿÿÿýÿýÿýÿüÿýÿûÿ÷ÿøÿøÿøÿúÿûÿüÿüÿýÿÿÿ ýÿýÿ ÿÿýÿýÿüÿýÿþÿ ýÿüÿúÿûÿúÿ÷ÿöÿúÿüÿýÿÿÿþÿÿÿ þÿýÿüÿüÿýÿýÿ
þÿüÿüÿýÿþÿþÿþÿþÿýÿþÿ üÿüÿüÿüÿüÿþÿþÿþÿ þÿÿÿÿÿýÿüÿþÿÿÿþÿþÿ ÿÿýÿüÿùÿöÿøÿ÷ÿõÿóÿðÿðÿôÿöÿôÿõÿ÷ÿùÿýÿýÿþÿ ÿÿ ýÿ þÿþÿ ÿÿüÿýÿýÿýÿýÿøÿùÿüÿþÿ þÿÿÿ ýÿýÿûÿúÿúÿüÿýÿýÿýÿüÿûÿüÿþÿýÿÿÿ þÿýÿýÿýÿýÿýÿþÿÿÿþÿûÿøÿøÿûÿüÿúÿúÿüÿÿÿ þÿüÿûÿüÿúÿúÿûÿüÿýÿýÿûÿøÿúÿûÿúÿúÿúÿûÿÿÿ ÿÿ ÿÿýÿüÿýÿÿÿ þÿüÿùÿ÷ÿúÿûÿúÿûÿüÿýÿýÿûÿüÿýÿüÿùÿùÿüÿüÿþÿ þÿþÿþÿýÿýÿýÿ ÿÿþÿ ÿÿþÿþÿýÿüÿ ÿÿþÿÿÿýÿýÿþÿ þÿýÿüÿùÿøÿøÿøÿ÷ÿøÿøÿúÿýÿþÿüÿüÿüÿüÿúÿ÷ÿ÷ÿ÷ÿøÿûÿüÿýÿÿÿ þÿýÿÿÿþÿþÿÿÿþÿþÿþÿüÿýÿÿÿ þÿýÿýÿýÿüÿûÿüÿýÿýÿûÿûÿýÿ þÿýÿýÿþÿýÿüÿ þÿüÿýÿýÿüÿþÿþÿÿÿ ÿÿþÿ üÿûÿúÿûÿûÿûÿûÿüÿýÿýÿÿÿ ÿÿ þÿüÿþÿüÿûÿúÿúÿùÿøÿøÿøÿúÿùÿùÿûÿúÿüÿÿÿ ÿÿÿÿþÿÿÿ ýÿüÿûÿüÿýÿ þÿýÿüÿüÿüÿþÿ ÿÿþÿýÿýÿüÿûÿûÿýÿ ÿÿýÿûÿûÿúÿúÿúÿøÿúÿüÿûÿýÿ þÿýÿÿÿÿÿýÿÿÿ þÿÿÿ ýÿüÿûÿüÿ ÿÿþÿüÿþÿ ÿÿüÿýÿþÿýÿþÿ ÿÿ ÿÿýÿûÿ÷ÿôÿõÿ÷ÿùÿþÿÿÿüÿûÿýÿþÿÿÿ þÿþÿþÿýÿýÿýÿûÿüÿýÿýÿÿÿýÿýÿ ÿÿýÿýÿýÿüÿüÿüÿûÿûÿûÿüÿüÿúÿúÿúÿúÿúÿùÿûÿýÿûÿûÿüÿüÿúÿøÿûÿüÿüÿÿÿ þÿýÿýÿþÿ ÿÿüÿúÿúÿþÿ þÿûÿøÿúÿþÿþÿüÿüÿýÿþÿ ÿÿýÿýÿýÿýÿûÿüÿüÿûÿþÿ ÿÿýÿûÿüÿýÿýÿÿÿ þÿÿÿ þÿýÿÿÿ ÿÿüÿúÿøÿùÿüÿýÿÿÿ þÿýÿüÿûÿýÿýÿÿÿ þÿüÿúÿúÿùÿøÿùÿüÿüÿûÿüÿûÿüÿ ÿÿþÿ ÿÿüÿýÿýÿýÿýÿþÿ ýÿüÿýÿÿÿ üÿüÿûÿûÿþÿüÿýÿýÿýÿýÿüÿýÿýÿ þÿ ÿÿþÿüÿûÿüÿûÿüÿ þÿþÿüÿûÿûÿøÿöÿõÿ÷ÿøÿùÿûÿùÿøÿøÿùÿúÿúÿûÿýÿþÿ þÿýÿüÿùÿûÿýÿýÿýÿýÿÿÿ ÿÿ üÿúÿûÿûÿûÿüÿûÿûÿÿÿ ÿÿþÿÿÿýÿýÿþÿûÿûÿüÿþÿ ÿÿÿÿÿÿþÿþÿÿÿþÿüÿûÿúÿüÿþÿÿÿ ÿÿþÿþÿýÿÿÿ ýÿüÿþÿ ýÿúÿúÿøÿøÿøÿùÿüÿüÿûÿýÿÿÿ þÿûÿüÿþÿþÿýÿýÿþÿ ÿÿ þÿýÿýÿþÿþÿüÿüÿüÿüÿýÿýÿüÿýÿýÿÿÿ ÿÿþÿýÿýÿþÿÿÿþÿýÿþÿ ÿÿÿÿ ÿÿþÿþÿ þÿüÿüÿúÿ÷ÿ÷ÿøÿúÿúÿúÿûÿûÿùÿøÿúÿùÿ÷ÿ÷ÿ÷ÿøÿýÿ ÿÿýÿüÿýÿþÿýÿýÿýÿ ÿÿþÿþÿýÿûÿýÿ ÿÿþÿýÿþÿ þÿýÿ ÿÿÿÿÿÿýÿýÿÿÿ ýÿüÿýÿ þÿþÿ ÿÿýÿüÿûÿýÿýÿýÿýÿüÿýÿüÿüÿýÿýÿþÿ þÿüÿûÿøÿùÿýÿüÿýÿþÿüÿûÿüÿûÿüÿþÿ ÿÿþÿþÿýÿüÿüÿûÿûÿùÿùÿúÿúÿûÿúÿ÷ÿûÿýÿýÿýÿþÿýÿÿÿþÿþÿ ýÿúÿøÿ÷ÿöÿ÷ÿüÿüÿüÿüÿüÿýÿýÿüÿüÿÿÿþÿýÿþÿþÿýÿþÿÿÿ ýÿþÿ ýÿþÿ ÿÿüÿýÿýÿýÿüÿøÿøÿùÿùÿúÿûÿüÿÿÿ
þÿþÿþÿÿÿ ÿÿüÿùÿ÷ÿ÷ÿöÿöÿöÿöÿöÿøÿùÿøÿùÿûÿûÿøÿøÿøÿöÿõÿôÿõÿøÿûÿýÿ ýÿÿÿ ÿÿ ÿÿýÿüÿøÿøÿøÿ÷ÿøÿ÷ÿùÿýÿþÿýÿýÿüÿÿÿ ýÿÿÿÿÿüÿýÿýÿûÿþÿÿÿýÿÿÿþÿûÿüÿýÿýÿþÿþÿÿÿ ÿÿÿÿÿÿýÿýÿûÿùÿûÿüÿûÿüÿýÿÿÿ ÿÿ ÿÿ þÿýÿüÿùÿøÿúÿùÿøÿöÿôÿõÿõÿ÷ÿûÿÿÿ ÿÿ ÿÿøÿ÷ÿúÿýÿûÿöÿúÿ
ûÿóÿëÿåÿçÿíÿðÿñÿðÿíÿîÿòÿõÿõÿùÿ # , . '
ýÿðÿêÿëÿñÿüÿ öÿêÿàÿáÿòÿ #
+ o n @ , æÿèþVýüåû4ü8ü"üÖüþZ ÀßfîÕw³ÿ€þ£ýAýSýªý#þÀþ‚ÿ1 ” º Ü
)D“+ÔhæC\gk2çÿ¿þâýkýcý·ýIþÿþËÿ’ &hW
˜ {ÿÿÐþÞþÿ^ÿ”ÿÆÿèÿÖÿ‡ÿÿ‹þþ›ýZýeý°ý#þ´þUÿíÿa ˜ Y –ÿÿ˜þ\þhþ›þÞþ@ÿËÿ[ ± ³ ‰ S ¢ÿ0ÿÎþ“þƒþ”þÁþ ÿZÿŒÿƒÿSÿ(ÿÿóþ¬þRþþ)þLþiþyþ†þ‡þiþ3þöý¼ý‰ýdý`ýyý±ýþŽþýþbÿÎÿC ® þ C—÷hô”.²j ²œVäbó˜A÷ÑÇÀ¾Íæñõ1h¾5šÅÑãÙ†ô@o‹Â + ¬ÿ<ÿÿÿ@ÿfÿ•ÿÝÿöÿÿ»þÑýýAüXû@úIù×øÛøÏøiøøò÷ï÷‹÷÷ëöN÷Ì÷Nø#ùAúû3ûèúúOøÜõ1ôÏóWóòìñnôø½úýî :´®
sl{
;
E
` }6 l
î UÐÕá@Õÿoþ€üCû¸ûTý.ÿ"û~ °E=wÍùÄÆ¹O›.ë É Ùÿ6ÿ‡þ¼ý…ývþóÿä >ÝÏZ6n Ûÿÿþ÷ýWýiýøý¨þHÿÛÿu 4Ì ×ÿËþýý5ý6üQûû9ûTû/û/ûûÂû ûû1ú~ù!ùæø|øþ÷øêø5úAûüRýÕþŠÿáþ˜ý:üïù&öqò¤ððßîÓí9ïîò„öcù8ýûs
‰^
}
w
2
³
K
GÅ
Ó
ÌA°K'þXüðûû$úLû;þ? ø yÔôÖZ]L¤ÿÖζÓó a Ê¥ý“9 eþîýþñýúýãþÄÿÜÿ ï jÆ / ÷ÿÆþ¿ýÌýþþ+þ¾þšþzý¶üÓüüTûLú,úüùBù/ùDúHûœûüýŠýˆýãý;þOý©û)ûÀû–ûeúñùÚúªûªûéûý"þÏþ[ÿ€ÿþµüæú¨øNõÊñ“ïrî\í§ì‡íð1óÀöÎúðþ™ÞËØ
à«¥
-ø
æ
Oo1ñLàæ
šÖÎ% þ*ü©úú"úú$úû‘ü ý_üAüýÿýÿ+Xÿ}ú
Ïe
g
1 Žj?s äÿþþŽþÿÃÿóÿËÿÿˆÿUÿ1ÿôþ~þFþÜþÒÿ> L ë
~ÏÔ = ·ÿØþãý1ý¼ü‰üü£üQüü,ü)üû8ùÚ÷L÷®ö‰õ€ô0ô\ô}ôœô!õ+ö]÷5ø³ø1ù§ù‘ùžøæöYôÿðØíì ë¸émè_éªìð¼ò¢ö;ü@#ŒÃã
3[ª‹Ë;΀”e
Ž. y ÆþŒüiû³ü9þþèýþþÉÿÿ;þOþýýÊü¬üwþ[ |‚&m
!°
Ùðåy
w9ÝþTüûLû†ûû4ûGü·üëûoûòû4ü°û±ûÙüþ
ÿ{ i¼Oá‚»³, tþ¯ýÀý¤ýyýþéþäþqþ¸þHÿ—þŠü¢ú‘ù§ø{÷†ööéõö‡öðö¾ödö²öF÷÷qöö·÷†ønøø'÷ñôïñð›ïGî\ë\é&ê)ìœíÒï{ô+ú¸þ“m_«'~Å÷ÔºðÆ»»×E°
A¥ jýüoûUúÍùýúbü`ü6ü^ý‰þ"þbýþ3ÿcÿÌÿR¾õ /
SØsKW®
Ö
8- ýü@úºøÏøÁù
úúû#üü¤û$ü"ýZý;ýþ‘ÿE ˆ ³Ö>'Q”5 qÿIÿÄþþþ´þÛþŒþ‰þ¤þïýˆüZûoú-ù»÷Äö-ö]õ–ô¬ôõ<ö˜öüö÷Ð÷‘÷÷:öwô¢ñNî<ë¹èÊæPå]ähäÔåyèÜëÕïôÅùéþ™Êˆ·OjéÏMd‘\½.(~
R µ²þùûúÂøþ÷ø¥øùlù3úBûÍûìû—üùý.ÿ }N¡Š
?
/ù=ªèÚÑ
ø °·þ)ü¦ùÑ÷T÷÷Å÷ß÷bøù4ùùù-ùù3ù¿ù“útûœüGþ о,‡AçxWgî v Àÿÿeþ·ýÌü”ûúCø£ökõGôóíñ†ñ¾ñò»òØóSõÖö&ø9ùØùÇùùC÷MôÕðîíªë&étæå‰åHç„é¦ì4ñ‡ö·ûÆ ¬î Y
5…Ö.p%$%CZ+3çA
K sóþþûÅùÂøXøÙ÷ ÷Uø¥ù„úÃú4û9üHýÓý<þ:ÿò Xã²
¯
¢‚áéDçµ>ÕýHûßùùrøøNøÒøNù‘ù¢ù–ùuùHùóø‚ø`ø×ø¹ù§ú°û+ý
ÿÜ AI#¹Ú|ª”x{ ÿfþpýàüŽüü`ûšúÌùÎø‰÷ö{ôóçñìð4ðäïðËð½ñØòåó™ôÎô~ôÒóÏòfñÖïlîRíìŒìƒí}ï9ò¬õÁù<þÆ5`àŽv£!ëU²ñBî\¸µQr(m
%~¶ñI çýüÆú»ùÿø½ø ùƒùúÕú£û?üÈü¦ýùþc Ó›Ì4
d…¯Ò‚z³
šm í)¹ãÿDþ¥üdûµú0úùùêøºø>øÁ÷Œ÷n÷<÷5÷‹÷ú÷IøËøÕùûGürý·þëÿÖ ¢€-aG¾ë¹ wÿ0þÆü2û˜ùø†öWõ•ôô±ógó_óŒó¾ó ôŸôjõöuöKö²õ õ§ô¦ô[ôƒóÉòàòžó[ô/õ¸öêø/ûEýŒÿBöT[ ë
úÏÁ
ˆ•?F¡¨LPÔÇC¼
5G+
㳜9•0Ëÿ/þéü_üüsûÃú”úüú¯ûüÂý@ÿø êü³H
µ„`®é
á )êâh!Íÿ—þªýõü^üèûŠû(ûÕú§úpú úrùùËøtø!ø"ø{øèøYùñù¨úFûÐûyü3ýÐýUþçþxÿÐÿëÿÿÿ Ýÿ’ÿBÿëþiþ¶ýôü/ünûÔú}úIú ú«ù‰ù³ùóùú_úÜúnûÝû-üfügü
ü]û—úÅù×øÌ÷ªöõžôøó¶óØóVô6õˆö5øú8ü„þå '×b±
N±÷%>`)
É
u¬ u=nAºÉ
|)G€ ëþÒý9ýý1ý¹ýyþOÿ% à oÖ.~–g#û×…Í ¥ ~ 0 ÄÿWÿÿ¿þGþ˜ýïü}ü1üíû²û‡û_û)ûãú’úSú5ú$úúÖùÍùêùú^ú×úzû!üÂürý4þñþ ÿ? ¾ V“·Kñ ¡ I Øÿnÿ*ÿÿàþÆþ¹þµþµþ¿þÀþ¦þvþ<þþÑý£ý“ý¤ýËýñýþþõýËý‡ý'ý£ü üjûÉú8úÈù…ùrù€ù¸ù*úÆúvû*üâü™ý<þÉþJÿÆÿ6 Ÿ œ‹·JÇ@¶uÍKk‰–P$ÍwÂw3î²…l]OE9& ä¸{)Ïz"ÁQã ƒ + Ôÿƒÿ?ÿÿÿÿÿÿ)ÿ@ÿ9ÿÿØþ’þ?þ×ýYýáü{ü üÑûûfû[ûlûû³ûØûüû%üYüü¾üñü-ýfýý»ýþýMþ‹þ¾þðþÿ7ÿGÿTÿWÿGÿ'ÿÿÛþ£þcþ"þÛýƒý$ýÆüiü
ü¹ûûkûgûûÆû2ü°üCýäý‡þ'ÿ·ÿ= ² M‰¶Òé4756*ùÑ©„b>ÿ
î á Õ Ã ¬ — “ — š ± ä V˜ÙP†¯Â¿¹·µ¨¦»Ðç3?7æ¢Pî}
š 4 Ùÿ‚ÿ>ÿÿøþÖþ¸þ¡þŽþpþOþ5þ"þþ-þLþwþ¶þÿZÿ¬ÿðÿ! E W F çÿªÿ`ÿÿ§þNþ÷ý›ý9ýØü~ü)üÕûû/ûöúÖúÊú×úþúEûû*ü»üiý"þØþŠÿ0 É K¯ü,9/óÓoU6ø î ë á Õ Ï Ã ¬ w ` L @ : 9 C W p ‹ ¢ ¶ Ë × Ó ¿ ¢ [ 1
æÿÇÿ°ÿ˜ÿ…ÿzÿuÿtÿnÿeÿcÿkÿ|ÿ•ÿ½ÿþÿU · %— c´ëøÏ† ¨'¬ 9 Íÿvÿ7ÿÿåþÑþËþÈþÄþÅþÄþÃþÊþØþìþ
ÿ;ÿvÿ½ÿ v ä XÄ"pªËËo¨„ ìÿVÿÈþHþÖývý,ýôüÔüÆüÈüÜüýü1ýwýÆý þ‡þúþyÿõÿh × 3|®Ã˽Ÿ}T0÷ Þ Ê » ¡ ’ s O 2 ûÿåÿÖÿÝÿñÿ @ i ¤ ¦ ˜ { H ÁÿnÿÿÍþ‰þOþþóýÔý¼ý¥ý•ýýýý¡ýÄýõý8þþøþkÿæÿc Ý KI~ž¦¢’rCÌ€(Å \ ïÿ€ÿÿÃþxþ=þþþþþ>þmþ¨þîþ9ÿ†ÿØÿ1 å :‹Ð.;,Îy‰ Ÿÿ9ÿÝþ”þbþBþ/þ-þ7þIþ]þxþŸþÍþÿMÿšÿíÿH }Ú*m• –|N ·\û œ A íÿ¡ÿ]ÿÿáþµþ“þzþlþlþyþþµþèþ#ÿaÿ¥ÿçÿ I m … Ž Œ ‡ | e J 0 øÿäÿÍÿ¶ÿ›ÿ~ÿgÿTÿ>ÿ*ÿ ÿÿ!ÿ2ÿDÿ_ÿ‡ÿ¯ÿÒÿöÿ C ` u ‡ ‘ Š ‚ u f \ N 7 # ýÿåÿÈÿ¤ÿ„ÿkÿZÿPÿPÿYÿhÿ‡ÿ±ÿÙÿ ; i ½ ¿ ¹ « Œ k P 6 ëÿÓÿ¿ÿÿ˜ÿ…ÿvÿbÿMÿDÿFÿLÿ`ÿ}ÿÿÌÿ : m É ô 3?FC:.
ø ä Ë ± — x ] D " ûÿÚÿºÿ˜ÿÿoÿbÿZÿYÿ]ÿcÿiÿpÿ~ÿŠÿ’ÿÿÿ‘ÿ•ÿœÿ¢ÿ¦ÿ«ÿ¯ÿ³ÿ¶ÿ·ÿ¶ÿ²ÿ®ÿ§ÿŸÿ•ÿŠÿˆÿÿ›ÿÿÄÿÞÿûÿ <