From c848fb6b0f7bd09c5633a546a73073a8941cbadf Mon Sep 17 00:00:00 2001 From: catch <catch@35733.no-reply.drupal.org> Date: Fri, 26 Jul 2019 11:10:34 +0100 Subject: [PATCH] Issue #3039026 by kim.pepper, Berdir, Peter Majmesku, vadim.hirbu, YurkinPark, andypost, dww, claudiu.cristea, alexpott, jibran, dawehner, mikelutz: Deprecate file_directory_temp() and move to FileSystem service --- core/includes/file.inc | 31 ++---- core/includes/install.core.inc | 16 --- core/lib/Drupal/Core/File/FileSystem.php | 40 ++++++++ .../Drupal/Core/File/FileSystemInterface.php | 12 +++ .../Core/StreamWrapper/TemporaryStream.php | 2 +- .../Core/Test/FunctionalTestSetupTrait.php | 4 + .../src/Controller/ConfigController.php | 4 +- .../Functional/ConfigExportImportUITest.php | 2 +- .../src/Functional/ConfigExportUITest.php | 10 +- .../src/Kernel/Migrate/d6/MigrateFileTest.php | 5 - .../system/config/install/system.file.yml | 2 - .../system/migrations/d6_system_file.yml | 2 - .../system/migrations/d7_system_file.yml | 2 - .../system/src/Form/FileSystemForm.php | 29 ++++-- core/modules/system/system.install | 51 +++++++++- .../tests/src/Functional/File/ConfigTest.php | 1 - .../d6/MigrateSystemConfigurationTest.php | 3 - .../d7/MigrateSystemConfigurationTest.php | 3 - .../Update/UpdatePathTestBase.php | 4 + .../KernelTests/Core/File/DirectoryTest.php | 12 +-- .../Core/File/FileSystemDeprecationTest.php | 3 +- .../Core/File/FileSystemRequirementsTest.php | 79 +++++++++++++++ .../Core/File/FileSystemTempDirectoryTest.php | 81 +++++++++++++++ .../Core/File/StreamWrapperTest.php | 5 +- .../Drupal/KernelTests/KernelTestBase.php | 2 +- .../config_install/multilingual.tar.gz | 98 +++++++++---------- .../testing_config_install.tar.gz | 93 ++++++++++-------- sites/default/default.settings.php | 14 ++- 28 files changed, 433 insertions(+), 177 deletions(-) create mode 100644 core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php create mode 100644 core/tests/Drupal/KernelTests/Core/File/FileSystemTempDirectoryTest.php diff --git a/core/includes/file.inc b/core/includes/file.inc index bef4d253e4c2..c246fe402f18 100644 --- a/core/includes/file.inc +++ b/core/includes/file.inc @@ -15,7 +15,6 @@ use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Site\Settings; use Drupal\Core\StreamWrapper\PrivateStream; -use Drupal\Core\StreamWrapper\PublicStream; use Drupal\Core\StreamWrapper\StreamWrapperManager; /** @@ -1138,30 +1137,16 @@ function drupal_tempnam($directory, $prefix) { * * @return mixed|null * A string containing the path to the temporary directory. + * + * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use + * \Drupal\Core\File\FileSystemInterface::getTempDirectory() instead. + * + * @see \Drupal\Core\File\FileSystemInterface::getTempDirectory() + * @see https://www.drupal.org/node/3039255 */ function file_directory_temp() { - $temporary_directory = \Drupal::config('system.file')->get('path.temporary'); - if (empty($temporary_directory)) { - // Needs set up. - $config = \Drupal::configFactory()->getEditable('system.file'); - $temporary_directory = ComponentFileSystem::getOsTemporaryDirectory(); - - if (empty($temporary_directory)) { - // If no directory has been found default to 'files/tmp'. - $temporary_directory = PublicStream::basePath() . '/tmp'; - - // Windows accepts paths with either slash (/) or backslash (\), but will - // not accept a path which contains both a slash and a backslash. Since - // the 'file_public_path' variable may have either format, we sanitize - // everything to use slash which is supported on all platforms. - $temporary_directory = str_replace('\\', '/', $temporary_directory); - } - // Save the path of the discovered directory. Do not check config schema on - // save. - $config->set('path.temporary', (string) $temporary_directory)->save(TRUE); - } - - return $temporary_directory; + @trigger_error('file_directory_temp() is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\File\FileSystemInterface::getTempDirectory() instead. See https://www.drupal.org/node/3039255', E_USER_DEPRECATED); + return \Drupal::service('file_system')->getTempDirectory(); } /** diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index b3b462e19ec4..c75da59c7ac7 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -27,7 +27,6 @@ use Drupal\Core\Site\Settings; use Drupal\Core\StringTranslation\Translator\FileTranslation; use Drupal\Core\StackMiddleware\ReverseProxyMiddleware; -use Drupal\Core\StreamWrapper\PublicStream; use Drupal\Core\Extension\ExtensionDiscovery; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\Url; @@ -1100,21 +1099,6 @@ function install_base_system(&$install_state) { // Install system.module. drupal_install_system($install_state); - // Prevent the installer from using the system temporary directory after the - // system module has been installed. - if (drupal_valid_test_ua()) { - // While the temporary directory could be preset/enforced in settings.php - // like the public files directory, some tests expect it to be configurable - // in the UI. If declared in settings.php, they would no longer be - // configurable. The temporary directory needs to match what is set in each - // test types ::prepareEnvironment() step. - $temporary_directory = dirname(PublicStream::basePath()) . '/temp'; - \Drupal::service('file_system')->prepareDirectory($temporary_directory, FileSystemInterface::MODIFY_PERMISSIONS | FileSystemInterface::CREATE_DIRECTORY); - \Drupal::configFactory()->getEditable('system.file') - ->set('path.temporary', $temporary_directory) - ->save(); - } - // Call file_ensure_htaccess() to ensure that all of Drupal's standard // directories (e.g., the public files directory and config directory) have // appropriate .htaccess files. These directories will have already been diff --git a/core/lib/Drupal/Core/File/FileSystem.php b/core/lib/Drupal/Core/File/FileSystem.php index 54bbe419ee02..2e9544f481a4 100644 --- a/core/lib/Drupal/Core/File/FileSystem.php +++ b/core/lib/Drupal/Core/File/FileSystem.php @@ -2,6 +2,7 @@ namespace Drupal\Core\File; +use Drupal\Component\FileSystem\FileSystem as FileSystemComponent; use Drupal\Component\Utility\Unicode; use Drupal\Core\File\Exception\DirectoryNotReadyException; use Drupal\Core\File\Exception\FileException; @@ -11,6 +12,7 @@ use Drupal\Core\File\Exception\NotRegularDirectoryException; use Drupal\Core\File\Exception\NotRegularFileException; use Drupal\Core\Site\Settings; +use Drupal\Core\StreamWrapper\PublicStream; use Drupal\Core\StreamWrapper\StreamWrapperManager; use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface; use Psr\Log\LoggerInterface; @@ -626,6 +628,44 @@ public function createFilename($basename, $directory) { return $destination; } + /** + * {@inheritdoc} + */ + public function getTempDirectory() { + // Use settings. + $temporary_directory = $this->settings->get('file_temp_path'); + if (!empty($temporary_directory)) { + return $temporary_directory; + } + + // Fallback to config for Backwards compatibility. + // This service is lazy-loaded and not injected, as the file_system service + // is used in the install phase before config_factory service exists. It + // will be removed before Drupal 9.0.0. + if (\Drupal::hasContainer()) { + $temporary_directory = \Drupal::config('system.file')->get('path.temporary'); + if (!empty($temporary_directory)) { + @trigger_error("The 'system.file' config 'path.temporary' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Set 'file_temp_path' in settings.php instead. See https://www.drupal.org/node/3039255", E_USER_DEPRECATED); + return $temporary_directory; + } + } + + // Fallback to OS default. + $temporary_directory = FileSystemComponent::getOsTemporaryDirectory(); + + if (empty($temporary_directory)) { + // If no directory has been found default to 'files/tmp'. + $temporary_directory = PublicStream::basePath() . '/tmp'; + + // Windows accepts paths with either slash (/) or backslash (\), but + // will not accept a path which contains both a slash and a backslash. + // Since the 'file_public_path' variable may have either format, we + // sanitize everything to use slash which is supported on all platforms. + $temporary_directory = str_replace('\\', '/', $temporary_directory); + } + return $temporary_directory; + } + /** * {@inheritdoc} */ diff --git a/core/lib/Drupal/Core/File/FileSystemInterface.php b/core/lib/Drupal/Core/File/FileSystemInterface.php index 8bcad1db3724..48e833847c64 100644 --- a/core/lib/Drupal/Core/File/FileSystemInterface.php +++ b/core/lib/Drupal/Core/File/FileSystemInterface.php @@ -472,6 +472,18 @@ public function createFilename($basename, $directory); */ public function getDestinationFilename($destination, $replace); + /** + * Gets the path of the configured temporary directory. + * + * If the path is not set, it will fall back to the OS-specific default if + * set, otherwise a directory under the public files directory. It will then + * set this as the configured directory. + * + * @return string + * A string containing the path to the temporary directory. + */ + public function getTempDirectory(); + /** * Finds all files that match a given mask in a given directory. * diff --git a/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php b/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php index 5e1e56b9f50f..bce46e03c585 100644 --- a/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php +++ b/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php @@ -37,7 +37,7 @@ public function getDescription() { * {@inheritdoc} */ public function getDirectoryPath() { - return file_directory_temp(); + return \Drupal::service('file_system')->getTempDirectory(); } /** diff --git a/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php b/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php index de4f9ab2cf3e..9c200679bc7e 100644 --- a/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php +++ b/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php @@ -91,6 +91,10 @@ protected function prepareSettings() { 'value' => $this->privateFilesDirectory, 'required' => TRUE, ]; + $settings['settings']['file_temp_path'] = (object) [ + 'value' => $this->tempFilesDirectory, + 'required' => TRUE, + ]; // Save the original site directory path, so that extensions in the // site-specific directory can still be discovered in the test site // environment. diff --git a/core/modules/config/src/Controller/ConfigController.php b/core/modules/config/src/Controller/ConfigController.php index ea65096c3f31..a4dc4ca07932 100644 --- a/core/modules/config/src/Controller/ConfigController.php +++ b/core/modules/config/src/Controller/ConfigController.php @@ -121,13 +121,13 @@ public function __construct(StorageInterface $target_storage, StorageInterface $ */ public function downloadExport() { try { - $this->fileSystem->delete(file_directory_temp() . '/config.tar.gz'); + $this->fileSystem->delete($this->fileSystem->getTempDirectory() . '/config.tar.gz'); } catch (FileException $e) { // Ignore failed deletes. } - $archiver = new ArchiveTar(file_directory_temp() . '/config.tar.gz', 'gz'); + $archiver = new ArchiveTar($this->fileSystem->getTempDirectory() . '/config.tar.gz', 'gz'); // Add all contents of the export storage to the archive. foreach ($this->exportStorage->listAll() as $name) { $archiver->addString("$name.yml", Yaml::encode($this->exportStorage->read($name))); diff --git a/core/modules/config/tests/src/Functional/ConfigExportImportUITest.php b/core/modules/config/tests/src/Functional/ConfigExportImportUITest.php index e3720d6d0896..4e20768ab35a 100644 --- a/core/modules/config/tests/src/Functional/ConfigExportImportUITest.php +++ b/core/modules/config/tests/src/Functional/ConfigExportImportUITest.php @@ -226,7 +226,7 @@ public function testExportImportCollections() { // Export the configuration. $this->drupalPostForm('admin/config/development/configuration/full/export', [], 'Export'); $this->tarball = $this->getSession()->getPage()->getContent(); - $filename = file_directory_temp() . '/' . $this->randomMachineName(); + $filename = \Drupal::service('file_system')->getTempDirectory() . '/' . $this->randomMachineName(); file_put_contents($filename, $this->tarball); // Set up the active storage collections to test import. diff --git a/core/modules/config/tests/src/Functional/ConfigExportUITest.php b/core/modules/config/tests/src/Functional/ConfigExportUITest.php index 4cd23acf56ce..215b582bf645 100644 --- a/core/modules/config/tests/src/Functional/ConfigExportUITest.php +++ b/core/modules/config/tests/src/Functional/ConfigExportUITest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\config\Functional; use Drupal\Core\Archiver\Tar; +use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Serialization\Yaml; use Drupal\Tests\BrowserTestBase; @@ -57,7 +58,10 @@ public function testExport() { $this->assertTrue($header_match, "Header with filename matches the expected format."); // Extract the archive and verify it's not empty. - $file_path = file_directory_temp() . '/config.tar.gz'; + $file_system = \Drupal::service('file_system'); + assert($file_system instanceof FileSystemInterface); + $temp_directory = $file_system->getTempDirectory(); + $file_path = $temp_directory . '/config.tar.gz'; $archiver = new Tar($file_path); $archive_contents = $archiver->listContents(); $this->assert(!empty($archive_contents), 'Downloaded archive file is not empty.'); @@ -75,8 +79,8 @@ public function testExport() { // Ensure the test configuration override is in effect but was not exported. $this->assertIdentical(\Drupal::config('system.maintenance')->get('message'), 'Foo'); - $archiver->extract(file_directory_temp(), ['system.maintenance.yml']); - $file_contents = file_get_contents(file_directory_temp() . '/' . 'system.maintenance.yml'); + $archiver->extract($temp_directory, ['system.maintenance.yml']); + $file_contents = file_get_contents($temp_directory . '/' . 'system.maintenance.yml'); $exported = Yaml::decode($file_contents); $this->assertNotIdentical($exported['message'], 'Foo'); diff --git a/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php b/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php index a3d4ba5e7c2e..6986dc1685a0 100644 --- a/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php +++ b/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php @@ -101,11 +101,6 @@ public function testFiles() { ->fields(['value' => serialize('files/test')]) ->condition('name', 'file_directory_path') ->execute(); - Database::getConnection('default', 'migrate') - ->update('variable') - ->fields(['value' => serialize(file_directory_temp())]) - ->condition('name', 'file_directory_temp') - ->execute(); $this->executeMigration('d6_file'); diff --git a/core/modules/system/config/install/system.file.yml b/core/modules/system/config/install/system.file.yml index ec8c0533f683..02b376f45443 100644 --- a/core/modules/system/config/install/system.file.yml +++ b/core/modules/system/config/install/system.file.yml @@ -1,5 +1,3 @@ allow_insecure_uploads: false default_scheme: 'public' -path: - temporary: '' temporary_maximum_age: 21600 diff --git a/core/modules/system/migrations/d6_system_file.yml b/core/modules/system/migrations/d6_system_file.yml index 3f7145533a68..025fd2804cbc 100644 --- a/core/modules/system/migrations/d6_system_file.yml +++ b/core/modules/system/migrations/d6_system_file.yml @@ -6,11 +6,9 @@ migration_tags: source: plugin: variable variables: - - file_directory_temp - allow_insecure_uploads source_module: system process: - 'path/temporary': file_directory_temp allow_insecure_uploads: plugin: static_map source: allow_insecure_uploads diff --git a/core/modules/system/migrations/d7_system_file.yml b/core/modules/system/migrations/d7_system_file.yml index b9fba89ea6d1..08aa9b27a99a 100644 --- a/core/modules/system/migrations/d7_system_file.yml +++ b/core/modules/system/migrations/d7_system_file.yml @@ -7,7 +7,6 @@ source: plugin: variable variables: - allow_insecure_uploads - - file_temporary_path source_module: system process: allow_insecure_uploads: @@ -16,7 +15,6 @@ process: map: 0: FALSE 1: TRUE - 'path/temporary': file_temporary_path destination: plugin: config config_name: system.file diff --git a/core/modules/system/src/Form/FileSystemForm.php b/core/modules/system/src/Form/FileSystemForm.php index dedf32a69fac..d81488b44e75 100644 --- a/core/modules/system/src/Form/FileSystemForm.php +++ b/core/modules/system/src/Form/FileSystemForm.php @@ -4,6 +4,7 @@ use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Datetime\DateFormatterInterface; +use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\StreamWrapper\PrivateStream; use Drupal\Core\StreamWrapper\PublicStream; @@ -33,6 +34,13 @@ class FileSystemForm extends ConfigFormBase { */ protected $streamWrapperManager; + /** + * The file system. + * + * @var \Drupal\Core\File\FileSystemInterface + */ + protected $fileSystem; + /** * Constructs a FileSystemForm object. * @@ -42,11 +50,18 @@ class FileSystemForm extends ConfigFormBase { * The date formatter service. * @param \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface $stream_wrapper_manager * The stream wrapper manager. + * @param \Drupal\Core\File\FileSystemInterface $file_system + * The file system. */ - public function __construct(ConfigFactoryInterface $config_factory, DateFormatterInterface $date_formatter, StreamWrapperManagerInterface $stream_wrapper_manager) { + public function __construct(ConfigFactoryInterface $config_factory, DateFormatterInterface $date_formatter, StreamWrapperManagerInterface $stream_wrapper_manager, FileSystemInterface $file_system = NULL) { parent::__construct($config_factory); $this->dateFormatter = $date_formatter; $this->streamWrapperManager = $stream_wrapper_manager; + if (!$file_system) { + @trigger_error('Calling FileSystemForm::__construct() without the $file_system argument is deprecated in drupal:8.8.0. The $file_system argument will be required in drupal:9.0.0. See https://www.drupal.org/node/3039255', E_USER_DEPRECATED); + $file_system = \Drupal::service('file_system'); + } + $this->fileSystem = $file_system; } /** @@ -56,7 +71,8 @@ public static function create(ContainerInterface $container) { return new static( $container->get('config.factory'), $container->get('date.formatter'), - $container->get('stream_wrapper_manager') + $container->get('stream_wrapper_manager'), + $container->get('file_system') ); } @@ -101,12 +117,10 @@ public function buildForm(array $form, FormStateInterface $form_state) { ]; $form['file_temporary_path'] = [ - '#type' => 'textfield', + '#type' => 'item', '#title' => t('Temporary directory'), - '#default_value' => $config->get('path.temporary'), - '#maxlength' => 255, - '#description' => t('A local file system path where temporary files will be stored. This directory should not be accessible over the web.'), - '#after_build' => ['system_check_directory'], + '#markup' => $this->fileSystem->getTempDirectory(), + '#description' => t('A local file system path where temporary files will be stored. This directory should not be accessible over the web. This must be changed in settings.php.'), ]; // Any visible, writeable wrapper can potentially be used for the files // directory, including a remote file system that integrates with a CDN. @@ -141,7 +155,6 @@ public function buildForm(array $form, FormStateInterface $form_state) { */ public function submitForm(array &$form, FormStateInterface $form_state) { $config = $this->config('system.file') - ->set('path.temporary', $form_state->getValue('file_temporary_path')) ->set('temporary_maximum_age', $form_state->getValue('temporary_maximum_age')); if ($form_state->hasValue('file_default_scheme')) { diff --git a/core/modules/system/system.install b/core/modules/system/system.install index 4723a73958df..018d5d003ed7 100644 --- a/core/modules/system/system.install +++ b/core/modules/system/system.install @@ -529,6 +529,38 @@ function system_requirements($phase) { } } + // Test that path.temporary config is not set. + if ($phase == 'runtime') { + if (!Settings::get('file_temp_path')) { + $filesystem_config = \Drupal::config('system.file'); + if ($temp_path = $filesystem_config->get('path.temporary')) { + $requirements['temp_directory'] = [ + 'title' => t('Temporary Directory'), + 'severity' => REQUIREMENT_WARNING, + 'value' => 'Deprecated configuration', + 'description' => [ + [ + '#markup' => t('You are using deprecated configuration for the temporary files path.'), + '#suffix' => ' ', + ], + ], + ]; + if ($temp_path === FileSystem::getOsTemporaryDirectory()) { + $requirements['temp_directory']['description'][] = [ + '#markup' => t('Your temporary directory configuration matches the OS default and can be safely removed.'), + '#suffix' => ' ', + ]; + } + else { + $requirements['temp_directory']['description'][] = [ + '#markup' => t('Remove the configuration and add the following to <code>settings.php</code>. <code>$settings["file_temp_path"] = "%temp_path"', ['%temp_path' => $temp_path]), + '#suffix' => ' ', + ]; + } + } + } + } + // Report cron status. if ($phase == 'runtime') { $cron_config = \Drupal::config('system.cron'); @@ -596,7 +628,7 @@ function system_requirements($phase) { // By default no private files directory is configured. For private files // to be secure the admin needs to provide a path outside the webroot. PrivateStream::basePath(), - file_directory_temp(), + \Drupal::service('file_system')->getTempDirectory(), ]; } @@ -617,8 +649,8 @@ function system_requirements($phase) { if ($file_private_path = Settings::get('file_private_path')) { $directories[] = $file_private_path; } - if (!empty($GLOBALS['config']['system.file']['path']['temporary'])) { - $directories[] = $GLOBALS['config']['system.file']['path']['temporary']; + if (Settings::get('file_temp_path')) { + $directories[] = Settings::get('file_temp_path'); } else { // If the temporary directory is not overridden use an appropriate @@ -2312,3 +2344,16 @@ function system_update_8702() { } \Drupal::entityTypeManager()->useCaches(TRUE); } + +/** + * Remove 'path.temporary' config if redundant. + */ +function system_update_8801() { + // If settings is already being used, or the config is set to the OS default, + // clear the config value. + $config = Drupal::configFactory()->getEditable('system.file'); + if (Settings::get('file_temp_path') || $config->get('path.temporary') === FileSystem::getOsTemporaryDirectory()) { + $config->clear('path.temporary') + ->save(TRUE); + } +} diff --git a/core/modules/system/tests/src/Functional/File/ConfigTest.php b/core/modules/system/tests/src/Functional/File/ConfigTest.php index caf691591a27..9d0761fd16d4 100644 --- a/core/modules/system/tests/src/Functional/File/ConfigTest.php +++ b/core/modules/system/tests/src/Functional/File/ConfigTest.php @@ -27,7 +27,6 @@ public function testFileConfigurationPage() { // upon form submission. $file_path = $this->publicFilesDirectory; $fields = [ - 'file_temporary_path' => $file_path . '/file_config_page_test/temporary', 'file_default_scheme' => 'private', ]; diff --git a/core/modules/system/tests/src/Kernel/Migrate/d6/MigrateSystemConfigurationTest.php b/core/modules/system/tests/src/Kernel/Migrate/d6/MigrateSystemConfigurationTest.php index 33c963de3c83..f1c62a481af0 100644 --- a/core/modules/system/tests/src/Kernel/Migrate/d6/MigrateSystemConfigurationTest.php +++ b/core/modules/system/tests/src/Kernel/Migrate/d6/MigrateSystemConfigurationTest.php @@ -47,9 +47,6 @@ class MigrateSystemConfigurationTest extends MigrateDrupal6TestBase { 'allow_insecure_uploads' => TRUE, // default_scheme is not handled by the migration. 'default_scheme' => 'public', - 'path' => [ - 'temporary' => 'files/temp', - ], // temporary_maximum_age is not handled by the migration. 'temporary_maximum_age' => 21600, ], diff --git a/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateSystemConfigurationTest.php b/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateSystemConfigurationTest.php index 0216e2dd312e..8fef991b4fa6 100644 --- a/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateSystemConfigurationTest.php +++ b/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateSystemConfigurationTest.php @@ -45,9 +45,6 @@ class MigrateSystemConfigurationTest extends MigrateDrupal7TestBase { 'allow_insecure_uploads' => TRUE, // default_scheme is not handled by the migration. 'default_scheme' => 'public', - 'path' => [ - 'temporary' => '/tmp', - ], // temporary_maximum_age is not handled by the migration. 'temporary_maximum_age' => 21600, ], diff --git a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php b/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php index 06a0ef676bbb..d7bad285130c 100644 --- a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php +++ b/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php @@ -190,6 +190,10 @@ protected function setUp() { $sync_directory = Settings::get('config_sync_directory'); \Drupal::service('file_system')->prepareDirectory($sync_directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS); + // Ensure the default temp directory exist and is writable. The configured + // temp directory may be removed during update. + \Drupal::service('file_system')->prepareDirectory($this->tempFilesDirectory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS); + // Set the container. parent::rebuildAll() would normally do this, but this // not safe to do here, because the database has not been updated yet. $this->container = \Drupal::getContainer(); diff --git a/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php b/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php index f57a5c3e4207..796e87b4d6d3 100644 --- a/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php +++ b/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php @@ -2,6 +2,7 @@ namespace Drupal\KernelTests\Core\File; +use Drupal\Component\FileSystem\FileSystem; use Drupal\Component\Render\FormattableMarkup; use Drupal\Component\PhpStorage\FileStorage; use Drupal\Core\File\Exception\FileException; @@ -167,15 +168,12 @@ public function testFileDestination() { } /** - * Ensure that the file_directory_temp() function always returns a value. + * Ensure that the getTempDirectory() method always returns a value. */ public function testFileDirectoryTemp() { - // Start with an empty variable to ensure we have a clean slate. - $config = $this->config('system.file'); - $config->set('path.temporary', '')->save(); - $tmp_directory = file_directory_temp(); - $this->assertEqual(empty($tmp_directory), FALSE, 'file_directory_temp() returned a non-empty value.'); - $this->assertEqual($config->get('path.temporary'), $tmp_directory); + $tmp_directory = \Drupal::service('file_system')->getTempDirectory(); + $this->assertNotEmpty($tmp_directory); + $this->assertEquals($tmp_directory, FileSystem::getOsTemporaryDirectory()); } /** diff --git a/core/tests/Drupal/KernelTests/Core/File/FileSystemDeprecationTest.php b/core/tests/Drupal/KernelTests/Core/File/FileSystemDeprecationTest.php index c081e035f256..84975e180abc 100644 --- a/core/tests/Drupal/KernelTests/Core/File/FileSystemDeprecationTest.php +++ b/core/tests/Drupal/KernelTests/Core/File/FileSystemDeprecationTest.php @@ -46,7 +46,7 @@ public function testDeprecatedFileMoveUploadedFile() { * @expectedDeprecation file_unmanaged_copy() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\File\FileSystemInterface::copy(). See https://www.drupal.org/node/3006851. */ public function testDeprecatedUnmanagedFileCopy() { - $source = file_directory_temp() . '/example.txt'; + $source = \Drupal::service('file_system')->getTempDirectory() . '/example.txt'; file_put_contents($source, 'example'); $filename = file_unmanaged_copy($source); $this->assertEquals('public://example.txt', $filename); @@ -67,6 +67,7 @@ public function testDeprecatedUnmanagedFileDeleteRecursive() { } /** + * @expectedDeprecation file_directory_temp() is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\File\FileSystemInterface::getTempDirectory() instead. See https://www.drupal.org/node/3039255 * @expectedDeprecation file_unmanaged_move() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\File\FileSystemInterface::move(). See https://www.drupal.org/node/3006851. */ public function testDeprecatedUnmanagedFileMove() { diff --git a/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php b/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php new file mode 100644 index 000000000000..159e93882fa7 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php @@ -0,0 +1,79 @@ +<?php + +namespace Drupal\KernelTests\Core\File; + +use Drupal\Component\FileSystem\FileSystem; +use Drupal\KernelTests\KernelTestBase; + +/** + * @group File + * @group legacy + */ +class FileSystemRequirementsTest extends KernelTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['system']; + + /** + * {@inheritdoc} + */ + protected $strictConfigSchema = FALSE; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + $this->setInstallProfile('standard'); + } + + /** + * Tests requirements warnings. + * + * @expectedDeprecation The 'system.file' config 'path.temporary' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Set 'file_temp_path' in settings.php instead. See https://www.drupal.org/node/3039255 + */ + public function testFileSystemRequirements() { + $this->config('system.file') + ->set('path.temporary', $this->randomMachineName()) + ->save(TRUE); + + $requirements = $this->checkSystemRequirements(); + $this->assertEquals('Deprecated configuration', (string) $requirements['temp_directory']['value']); + $this->assertEquals('You are using deprecated configuration for the temporary files path.', (string) $requirements['temp_directory']['description'][0]['#markup']); + $this->assertStringStartsWith('Remove the configuration and add the following', (string) $requirements['temp_directory']['description'][1]['#markup']); + + $this->config('system.file') + ->set('path.temporary', FileSystem::getOsTemporaryDirectory()) + ->save(TRUE); + + $requirements = $this->checkSystemRequirements(); + $this->assertEquals('Deprecated configuration', (string) $requirements['temp_directory']['value']); + $this->assertEquals('You are using deprecated configuration for the temporary files path.', (string) $requirements['temp_directory']['description'][0]['#markup']); + $this->assertEquals('Your temporary directory configuration matches the OS default and can be safely removed.', (string) $requirements['temp_directory']['description'][1]['#markup']); + } + + /** + * Tests if settings are set, there are not warnings. + */ + public function testSettingsExist() { + $this->setSetting('file_temp_path', $this->randomMachineName()); + $requirements = $this->checkSystemRequirements(); + $this->assertArrayNotHasKey('temp_directory', $requirements); + } + + /** + * Checks system runtime requirements. + * + * @return array + * An array of system requirements. + */ + protected function checkSystemRequirements() { + module_load_install('system'); + return system_requirements('runtime'); + } + +} diff --git a/core/tests/Drupal/KernelTests/Core/File/FileSystemTempDirectoryTest.php b/core/tests/Drupal/KernelTests/Core/File/FileSystemTempDirectoryTest.php new file mode 100644 index 000000000000..e106906b5a74 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/File/FileSystemTempDirectoryTest.php @@ -0,0 +1,81 @@ +<?php + +namespace Drupal\KernelTests\Core\File; + +use Drupal\Component\FileSystem\FileSystem as FileSystemComponent; +use Drupal\Core\File\FileSystem; +use Drupal\KernelTests\KernelTestBase; + +/** + * Tests for getTempDirectory on FileSystem. + * + * @group File + * @coversDefaultClass \Drupal\Core\File\FileSystem + */ +class FileSystemTempDirectoryTest extends KernelTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['system']; + + /** + * The file system under test. + * + * @var \Drupal\Core\File\FileSystemInterface + */ + protected $fileSystem; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + $stream_wrapper_manager = $this->container->get('stream_wrapper_manager'); + $logger = $this->container->get('logger.channel.file'); + $settings = $this->container->get('settings'); + $this->fileSystem = new FileSystem($stream_wrapper_manager, $settings, $logger); + } + + /** + * Tests 'file_temp_path' setting. + * + * @covers ::getTempDirectory + */ + public function testGetTempDirectorySettings() { + $tempDir = '/var/tmp/' . $this->randomMachineName(); + $this->setSetting('file_temp_path', $tempDir); + $this->assertEquals($tempDir, $this->fileSystem->getTempDirectory()); + } + + /** + * Tests 'path.temporary' config deprecation. + * + * @group legacy + * @covers ::getTempDirectory + * @expectedDeprecation The 'system.file' config 'path.temporary' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Set 'file_temp_path' in settings.php instead. See https://www.drupal.org/node/3039255 + */ + public function testGetTempDirectoryDeprecation() { + $tempDir = '/var/tmp/' . $this->randomMachineName(); + $this->config('system.file') + ->set('path.temporary', $tempDir) + ->save(TRUE); + + $dir = $this->fileSystem->getTempDirectory(); + $this->assertEquals($tempDir, $dir); + } + + /** + * Tests os default fallback. + * + * @covers ::getTempDirectory + */ + public function testGetTempDirectoryOsDefault() { + $tempDir = FileSystemComponent::getOsTemporaryDirectory(); + $dir = $this->fileSystem->getTempDirectory(); + $this->assertEquals($tempDir, $dir); + } + +} diff --git a/core/tests/Drupal/KernelTests/Core/File/StreamWrapperTest.php b/core/tests/Drupal/KernelTests/Core/File/StreamWrapperTest.php index bfa63cb0f03d..2a0cd9bfd432 100644 --- a/core/tests/Drupal/KernelTests/Core/File/StreamWrapperTest.php +++ b/core/tests/Drupal/KernelTests/Core/File/StreamWrapperTest.php @@ -3,6 +3,7 @@ namespace Drupal\KernelTests\Core\File; use Drupal\Core\DrupalKernel; +use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Site\Settings; use Drupal\Core\StreamWrapper\PublicStream; use Symfony\Component\HttpFoundation\Request; @@ -91,7 +92,9 @@ public function testUriFunctions() { // Drupal\Core\StreamWrapper\LocalStream::getDirectoryPath(). $this->assertEqual(file_build_uri('foo/bar.txt'), 'public://foo/bar.txt', 'Expected scheme was added.'); $this->assertEqual($stream_wrapper_manager->getViaScheme('public')->getDirectoryPath(), PublicStream::basePath(), 'Expected default directory path was returned.'); - $this->assertEqual($stream_wrapper_manager->getViaScheme('temporary')->getDirectoryPath(), $config->get('path.temporary'), 'Expected temporary directory path was returned.'); + $file_system = \Drupal::service('file_system'); + assert($file_system instanceof FileSystemInterface); + $this->assertEqual($stream_wrapper_manager->getViaScheme('temporary')->getDirectoryPath(), $file_system->getTempDirectory(), 'Expected temporary directory path was returned.'); $config->set('default_scheme', 'private')->save(); $this->assertEqual(file_build_uri('foo/bar.txt'), 'private://foo/bar.txt', 'Got a valid URI from foo/bar.txt.'); diff --git a/core/tests/Drupal/KernelTests/KernelTestBase.php b/core/tests/Drupal/KernelTests/KernelTestBase.php index a6bac866820e..02afacda64e6 100644 --- a/core/tests/Drupal/KernelTests/KernelTestBase.php +++ b/core/tests/Drupal/KernelTests/KernelTestBase.php @@ -1037,7 +1037,7 @@ public function __get($name) { return Settings::get('file_private_path'); case 'temp_files_directory': - return file_directory_temp(); + return \Drupal::service('file_system')->getTempDirectory(); case 'translation_files_directory': return Settings::get('file_public_path', \Drupal::service('site.path') . '/translations'); diff --git a/core/tests/fixtures/config_install/multilingual.tar.gz b/core/tests/fixtures/config_install/multilingual.tar.gz index 36a08ae69a80..e4961cc7de8c 100644 --- a/core/tests/fixtures/config_install/multilingual.tar.gz +++ b/core/tests/fixtures/config_install/multilingual.tar.gz @@ -1,51 +1,47 @@ -‹�ûíü[�í}érã8¶fÿöSp:¦ÃÝ'÷ÅQÑ·%Ë’7IÖfY¾uƒ’ D‰"i.Ú&çaî̉y„~±Hj·-g–LWeòˈ´Rà‚ó�çh¶«Î´øÿ „þH…ÆØrÎæcû/ÇMÓ"ÏSä¯$ -ñ_šM¾0øÅpœ$1¢(1<E3"Ë0¡è£ÝÁˆÈSã[ àøÍóði¦ùÆñäY¨Õß? ¢È2Î)Ž©È -4Ù�¼h�š†$AB4uièĆN_w tN!ç¿Ž0 -ΩÐЉ<äÈÑ-œŸP”î:¦Õ'Ÿ( -PÁ<ÑølŒœè,.\>vÈFÛgà/á�×¥DOTÝõã"™0²C5©\À`pN•º…¢tfáù…ñ¼-Ù[ >Ï,=Rú^¿}ðJ>�5^?!º!â'ÉÅÒËø¨o¹þfHƒ¾jZ~žL‘Õ„çsâùîòÏ)'²íÏŽú>ý4¹u•<œ³è<®üô$@ah9ýø}+¿~&EÙPCö9U ß ôaˆï—¯/ºzCñ©ªaž ççÔÄ -,ÍFä�š:˜øMy!~74þˆftÚ¶já -pƒ™ÐÐIü;˶B\Çÿ¢¨ÿ}òÙr˜ãs íéÍǃ%÷x]ÀýOK‡õ?U?K‹œ@ô¿Dó¹þωþ×yÅdQ�œÁÓ€7M@–ÕËK´f"«æ7èÿciw³yûX+*LgVš\VG‹‹¦üTàÔ¼ËÏÚ±ýÐÕÅõ#~C»/øe?@kÔ•f§_Ó쩺^V–¨ì=þòY+~ÚÂZ—Z=}—J?¥ÉyQ€Ô�ÿXµÝ¾›¾æR’'Û- ðÉÐIËߧâ÷ù?B[…:郂£(Cü9v‡ÿ’ÄŠ9ÿ³@™g[y@Ð9ð2Ô¢#èºD‰ÓIßÀÿo&ú½iŽ Pl-„°<쎂¦TCA䔜Kk2q=çÆ)mù¶v¹Aô-I}™íø*!rÖ†`^%üVm¯Ðý¥sÖd¿÷1ôçTl×QéYÛ¤'oáeÊ’EöÿCŒŽÃþwðŸßíÿ%žrþg„ÿ,Ës2gš�JHÀý¿Á�™×d 3Gó´MýHþë€5íÒnö„àvÜ·GïyývWá.C\Þ”ç5«óTÕä›ÞÿcI}'ûÙìëz“û›g¬˜ß†ZðNš“³b-±ê½„oÓX—d«^â?ÛùÌyq×þg9:çHø/é:-š¸×G4ožc±&ài«q¦.0<úþoÛÿØ<õ¿G)ð »åt‹úlv[½.7«r EjuØéWVú΃¯{î4®®·”BÿÛæv^U 侓ê^Ñ{'¬M>DҶûÿô]¼2‹ó 6À>ÿÇ(`«óÿË;ø/ìñ_âòùßLò²H‘ ˆ´`�^by ‹bs@¢y…“š>aü/Tkƈ3½êíLÍŠm}Á¶¦tÇ?^v˜+¡Õ¿²åbÐ3ÊAaC,ø•ñ?f½M˜ŒwO,k|{`ç¬I€ø]QËãïŸÈ@ìóßÃ÷¨†Vh£ci€ƒü§wù/±›ó?$ü§ VäY‚l`û_gP$¬4…eXÖd|ÿ¿™èòÜK¦ØõghŽ&ïÜÓ—Šá¬ñ|Q¬:–3x`¯o˜þÑ×’úNóŸ{•èëª^áøÞ Ã~|ˆŠýÁÇú/aŸÿ¡ëÚGìüÿòŽùIÚXÿ•HÿµAÎÿ,ðAÁ`Y�´Ìs€çY(Õ±% #C£9N裬ÿÆÂuDavQ·†wF‘þ㬡@ºÄ¨ž!OfµËYufOº<ì ®†Á†âHîâc„VuãÊßµþ›ž¹žFH_N–˾äíž0Dªéúcžám bmp< pˆÿœÈïÚÿ÷ÿ™ á¿©Ó´ardþ_Ð0ë%hm�Ž¡‘"(Œ5ó{ùŸÖÛ´•FvK¸î>úÓż÷zOåB Nõ™ÜaËeæQâꦶƒI4Iæû—By²ìsËiED—JD÷ô„° -éMy0‘O8Zú…1¾ô°N¹:·Ns_‡ ìñŽ±¢ÁÙÿqן¯ÿRþc²CÈÓÀä ÂüG"€:Ô†DYáñà�jü1ùYoØa§q?îëb§Áúú ÿh©6º¸¼ -‘E·›€a¨Ú£˜ÿ+¡\)€«võŽ*á’×Xßc`äT?„×ùZã#é€Ãý?³;þÄ|þ?¤þ?«±´ÀD˜ÿ<'� š�eê’(ëÇäÿpf^ØÓ§ëæ㵡Oªþ%�Ý‘þ4+U:nýú’kÙZóÉ.G—Ûü'B¹¯H髽¬~kãžÿ<¨çÿ^æÿØuÂÁÑ€oïÿ%†ÉûÿLðŸ× Eb 8I’/,ÿ -0hÑ0thÊóîù¿÷ðÿIº.:ÓªÚ5ÚµÉîÚaôÈ©² —ŸFíšxÛ¯MË4ª®ùå6ù«¤è gû!¼ÌÿãõýùÏïöÿ¢Äæý&HýÿMã5(FfDÀ³º r@’YÄj¦EøîýïáUš?[zoÔáÄAs.xŠá`¥X´ƒN‰©Ï£a4îi£ÿßïûÛoõûq‡Ÿ÷÷ð2ÿ§qð{Æÿl>ÿ— –ëÿºÉI˜õ¬LÓ€‡²4Zcñø_– -4¯uþoz[â»û NËý ;é_óc½P(·®þ1Ò|´0¦¾SðFfoÍ"”Ûüïâ’×{ÿߺݜý‡ð2ÿçúYò_Øçîÿ› þÁMÃ2€6x ð4¢,È20xÈ‹ŒÁòšd“ÿõ!YèQij V•‡õ«âÂ7û½;tÿü(M=³Véë…¿1ÿG„r›ÿ=\òú¸?ïûß×ùo£ 8ÎBÀAþ;ý?þ“ûÿgƒ„ÿ‚‚$p"5EÂãA²M` -Š®q¬$ó4<&ÿ…N«þíýåýÅÈó=ïÒíR¹Î}ëúÊl/¬›pj;3}›ÿ+¡ÜWäP¼øšFÈ×^Àÿm÷˜[c|3ÿ!_ÿË ÿI„Š!ê@ShÜÿË<¶ÿMM$6‡ŽLGÿsûrÐ}£+í®:å.\«xù4ì?·æƒr±<ÖµNWÞéfMsO’½7NÅøRRc\¸CøÄËemØ¿Pejø•/ý¿†=þ‘aEãLýÿ8qwÿ¯È²¹ÿ&H×ÿeÄ#A€@óÉ�š2H4XQáC9&ÿÅ``¨ ¯U¹m·Å¨\ˆ‰³Çæh|5²o.�k)~!™ÿK„rO$Åt@îýóöø\?<®p¸ÿßÿ3¹ÿ_6XÆÂÿ8: ±ýo@(ò€“tÝTXŽ3Dù˜ü/Ø4Ÿ‡ùÚ)ög×åŠí”nzwQQ䧡8o¥Û±=MÓ=D(÷è—`Ný·ó9¡Îc ŽqŸ‘mŠgÄ%:À¯ñãÇÿâþø?ŸÿË)ÿ‘ÆàWÏ�QQh€} (œ,C玗4<8øþýñž×~ìÇA[÷a~§ÏçÒÓ]}p_¹<¹ÚSãÆÊÝî.@V”lõÝ’Ï¥^h.¿ãí£ð2êöÜCé¶[êƒeÐœÏ~ílòb¡i‡ügF¶IüNÚÿ“Ïÿeƒ„ÿPÇ -—ÃC[^€gÈþ?ó_Ô%×dY0¥WøŸô·o+�"M‡‚m?¼vf•á“!U ôn„ºâ€¨o±ƒ -{=+[“°ïÐáU=HVºÞ€¿,wü¾ â›ÈUÀ.Þà¿iàaûoÿ¯ æó™ Ýÿk2ähȉÿ§qÐL]£ˆšÂÑ,óZü¿#ñb÷>ð=ÖTjU4lŸÊCû¹ùz¬»€æ]2½ð;kþc]õýVÎùïÁüôõjá†ý.Epˆÿ<½Óÿ³Oçó™ íÿñ‹y™¬)€—YóMap&by“´å¿ùP6o&jeQl^‚©×¼ÒÌ’�¹‡¡3Ð.ëÑž4 .‚ºÞ[óS@Wv@+.¤âÂÜ8ˆÃü÷Q€›ë÷(€ƒügwÇÿæüÏéúŸ¡c+ŸÓNË -à‘)YŽ-^$ƒQùcí±rQo€á=ÛÔíª ôº QkËfE{ö‹½ÛzëB}ìñ—ÜSuÿ‰€î*€¤tîÇrúX)xQ>8ØÂüŽ0û÷žù?nwþåòø¿™ ÿiÒ¢Ä#à6`�oŠPLÆ"„Ø€¼bHï^ÿûúWÊs×gFÞ-=6•Rà-ñ~>±<rTÉ1BàÍ»ˆ_Ó?‘Ï%ïÛÉ·œÛ߆—ùϯêî؃úÖó_Øå?ÏåãÿL°ŒÿÉÉd àp�^çL� ²¦¦C$‰ð[âÿ|óü¿Ä\´ -¾zW»×û‘X‡×üuÍfníŒÑ¼S.^¶Ý9”ûëùÿT>— -à"ýšÏþÞàÿ§ÎÿóyÿŸ þ+ˆl÷M ¶ÿe‘'cs@Óu†ÀhÌ÷ÛÿïP�ãÆuY5ÝÞpì<´|¥êé%þ¢ o.Õ²Wg -ó’¡–‚Ñ"¬ªk°5ÿGÜ…ºîF/ÏÿçJàE$üŸ…È ,÷¸a¿W8ħ7ø/bþó¼”ïÿÍk¦&1éâðqþÜO?Î8¶ô$ÖfJRnZÈ6–íU¡’°ut±ÎéGøGé7<?ýìÄ:„|Ú4 w—|±P&Ÿs—eÇ/U‡åàF±muŒÕ‰e[äz$~ý'«@‚qt¿4€_r£ï¨ä²b+ÏÓ)Ô¢Z(ÏèP0«õûhèM u1»s¡=gŠÕËÎ^ËÄüC3Ž:ŽOˆßÃHu'È÷-ã÷G?Ćãwçÿh6ŸÿËXÀ-ÇŠ3Õ¼/rÑ“ -:ì€F0[õ)ו'S¯WÕ@q€Zm•ûÚóm§Ý«þáe?n¢êÏ–ÁJ?§ÿgöòñØ�ÈùŸ|wŠµýØ -ÓŽómö#Yæ`%ðCfZöƒ¹a÷:‚Ìß?Õk-³9§KáèI¹]\i‚œ³ÿOØŽûtþïîÿãy!·ÿ3ᲪÁP¨µÀö±pH 87#º]hvÍX4°®®%íúòþ®bÑÅÞóÓäÞ¸t¤‹Ñ¹ø£#åèúx,–¬ûi®1Ï6ÿ»—ÿ—Éçÿ³Aêÿ/#V”p"Ùÿ#i -P)†‘$Î`uE”ßÿ÷åõ¿ä#Ôò.v\é¹Þ}†Öl¨Í%¸ë ×néÖ´8~"I×WÂÅøaȈìI,Êifܸ Ö×Ë€ÉGrêÔ -±Æ‹Æ$ß:X2Jï?¹ÝíE:ô ËI}æ$ô¡Ø0„š½œWŒ=Vû <äV^ÎqÕø&—ïMÇÂçŽÕ”}ËKdÚþdN䃻ÿƒügù=ûŸËýÿ²Ý·<2gîY$Ô8Á„Ó'i%V>±ôä,Ãò‘Ž…vž$¹ù’ð%øB„é9)8”ïçî0ýé]¨zM'P%]fZ"ÇâÍÀx~¼ øIi€`E¼ÌMˆE2e{–nþõlh9*iþcª‚ügz/þ'Ïçö&HýÿiÝ4‘ˆÀ‹È�²¢˜@c‘fŠº.‰ð¨ñj×·ÅPMÕè~P»¦ŸÃ&[rš¦4nÕû…†1“ -ߺµÆIÒ¡ŸÞÑŒ5ÓéI"çÔZ\W™zú$éØI>ªqø ¬è —%q̃½cñ¡uò䄸pëiIÁf>ñø„mbuåÈ·÷®ˆË¾ãJ;׉¿m^F]*j‰]_F¡ëíÝ@\úûoá³S—å8Rýÿ¡àAûÙÕÿ¼Ès¹þÏËÌJê:ÚS8Ô`àNÕÕyúÀµôÕXåm5_¶î‡U®kUÕÊ©(¶ï¦Ž¥vô'mŒFB…×XcÖ¸g…\|–Ëô_>ð„÷‚ð:ÿ _¶ùÏ -¢ðJøÀ{Zá'çÿªýñðí£®ñ¾öçp7ÀñøÜþCöÿæíÿñØlÿý\°Ð[¿ß)ìPÿOó{û?8)ÿ” 6©+e4º„>Ôÿ?'ï™d¼ÍÛígÂÿ½øO<“ûg‚øzíXºåb“õ¢òÈi?,Þæÿ:ëýGîÿ¦z/þCÿ)¼Äÿö¿ÿOÙ±ðþý߸€¹øQñ6ÿãõôÿ»üÇ#‚Üÿ3¼Àÿ+äûpl!'„AÎû›üÿ¨½ ùÏíŽÿY†ËÇÿ™`Ùç_D„ï¤Ë‚ú–›wù?6ùÿQ¾ ‡ù¿ÿ ÿÉý?3Aê]ÑÆÍìRåPIëçôÿI°ÉÿåçÔÀ²‰ÿJ3{ùßù<ÿ{6HûÿK§o[Á 'ýφ7ùŸQügÜßïó?÷ÿÉKþü÷ÿuí\üdx‹ÿ‘cdÿ‰ævýÿ$AÊûÿL°ŠšŠMxH·LK'Y•?ûÆrd‚·ø¿˜ý¾¸ïKæÿ^ÿ/æñ_³Á’ÿ57¤ çÙ˜üšrúÿ,Øä~ëêd7`¼\ à©iÁw«‚ï˜ÿ§™|þ?,ù_‰ o@?Í dùàÏø?†‘èè¿ËëgCügöò?K›ÿ3ÁA{àô_"<ÿýßÙî:H¡áRžëSø!åÁ1ŒDìàžQ®=Ac7 C£9¥ùh‚Ψ -qÆ? ¿ "ÊÃßÈöPx–«•?^â?‰yÏÿ‡çÿöæÿÙ|üŸ rŸÿŸ¯ñßtÝc¤~Žñã>ç6XÚÿ÷Êý}B¼Æÿãxþ&8Üÿó»üçø<þS&È}~n¼À2Ì4þ#Í»ñŸX:Ÿÿˉÿ_É<˜/þÿ„Øäìéÿ‘€¾½ÿ.ÿ– ã:ó±Kâ}<ò·Æn®~"|”Ïï&ñŸÛ‹ÿ.°yþ—lÆ–– LÄH€Wx@‘e"ã£EšÖí˜ñíâcÉ3J÷Ð7Û7/V‡Í››ËËy¯å6oh¨“«» ‹ -qg|ÁGå$-‰ZKÙ¡²Q¸®ù³_ïåó»‰CügÙ]û_`óþ?¤ùŸyE iÄ�)þé@ ŠM$¬Á#ãÛø³6X²¶åAç Ö29k?å󻉃ýÿnüFÈ÷ÿd„„ÿº(Š´h€dð�i°”X†'š^Éÿú}ý?ª=ŠöÝÅm ödι¨Xº:�ÌiîV³ÊöD¦ÙÒíÅ…7Ió=;Æɦ§bꨌŒÓ×T -»R)y²×·ðQ>¿›8ÈÿÝø?˜ÿB>ÿŸ Òþ_Ñ[�€uxVæb€Ñº¨Aæ¸ñß9á™]ÍY@kê}êh6[¨•ö$š^{†úÔÖÇã&ûKåÉkžÊ¯(�.W�ïÁŠÿcüN?(øaþïÙÿLnÿgÜì„¥§Ž{zN9IÊL‚€‡Àñçæêb�Ð âo œ.’Ã`0Ú)»;:aãv‰³SkÐß)ÐÁºä@¾¨jI½ˆo¨j³5 -ÝJqÒëÔžî¯-g^†õZk”ô\ ìcÅõÝЂ¿ÏÓÿe|‡ý/r¹ÿo&P¤¹Ÿ<èÃ1Š¸/¥â$Í_¸‘O‚þ{0¨žLkF~@i2„Y}zš|âÁ?f¬KœÉ_>»nd¨kÓ‚,>«)Ñ0?ºD÷×ík%|»Ï‹qÐÖ¤ªya óûîckV¨13t§÷Ê -OEý*Vü'™¿>)ÿ+zîçÍãfhÇ+Ê«dó‡ob‹|»8Ùn’TF '#?NøZU½Kip»Ö¥‚ uËÜFË“Àªš$ÑæÕßþ!9!ÍZ´] -–éLÈÜ#õ ¿«Þ·Õ“ñìFåç‡�Õnj“Ëaàöngšå”ë×íèbÖXüœ·k{õ3seãAüèøÏàâ þ‹qþ6÷ÿÉ:ÔH B?Ié•—IM‘Š’Õ¶å¼üN`’.r'ä’Áê·)Ñ£�Wž>»¸NèàþžHÝqHâÈ4Ùß<ßâzÁß&$u*¶Fÿ¶ê£<÷tãGòñ)*¶I0i‰m1CïüË3ôΌءéÌõûqRÊàËÆ}_þg\^éËáKºøÀÔ'¦I’²ÕZ¬+6:n¸uFšB-òò6cí2¶jÀy(&bP%FOð%}®nŸh=×Õ¥FJj~[Ý=Oe¯Ð¸6}>h¶Â€m6»EBµŠ8i¶¥ò๬jÂEý¾2Êí£ŸqúäOÎÿËðÌ®þçè<þC& -:Þ맆4~g^7¶^}¼héú]«w]R€7ÖùgNtV»µŽ]š]>?-*L'×,l¼óÁÀ£òð÷G}Xãÿyž_æÿ"ŽH$þ+“ÇÍÉúÏkŒdš<Ð4Y�¼)p@1h]0Cn£÷®ÿ`¥‘äO†M€"Bu@¡<Íèa‰¹µBø+7s9ª£¦ÊV/"¥\ªò³¾Ô†›Î¥6ºŽ×ƒöåtµ<TŠKÓ8áéI’Ñ<¾ÏŽú1“µÎó -ÎÉ)§ëÑl²¢ôç¸}ÿc8"#KÍ£ò_`·û¬ ¤|þ7$ü—9‰Ñð8h&¯^i€‹ ªš¼"B$~$ÿƒºÆŠ79gV¼îhÒ¤»½š¨ªÏCU4¢MüÑÂcæsH¯ù¿/§+%PŇ–*€JNyQ¼VÏÏ£^ãäOä¿Hïò_àòùßLð_3q´Ä€4ȘûÀÀmEÄ+šŒ>’ÿv©ªŒ'וB$·¦²‚è¢Î·|iþ(<Üû¥ûYO‡Ó‘vkˆ£þïÈéË`yÒ°[×Ï ^à¿ç»ÉDݱ�‡û~‡ÿ4'äû?2AÂZcƒM ›È<+ -@1LhPAn‰V¤än–Šígë–7nÝïñn—ÒJw®WóÂ])UP7=Yé¬ù¿-§+æß'Å+ò‡.eúø3E’¾®vjû¸Oðÿ#LúgÈÿØÿ#ÉÿMc[€ðŸËý?3A‰7LYç`Šæ¿ Ó@¬t‘LY”iCÿPþÛAc¤¹¼3| ÕÜ^ÜW+Ýò°[f®¥†×/ˆc*¾Þtüß’Ó5ÿ“âwÍ�lWñ3N|TÌ×Mä?'®ø-ÿ8þs¾þ› þš ÐP€À€˜ú<Ï1@9H‚dB–cä?”ÿå*ð‚ÅÝLŸŠÞÓ¸ õ2ç%M yµºˆ7ï5¿Û½ªô×üßÓù[¸ì]ÌßøñÏHû^àäypxüÏìÚÿ›ûg‚tÿ·ÂÉH“$ÀȃíC2Ã耗D Jœ,(èÝû¿¿‡ÿ7E/:fT¯†q;ïìÇ™[ï£úE»6föh>:Îèó»rºRM4v×j€Xÿãw ö*ü TÂËü?îàðø_X÷ÿRÂ:ŸÿÏ ÿ‰E -g -€"a=ÏbûŸÑ€ÈŠ†@- -ìGò¿_i<ZÀ›VlÚž×[âT½º¸÷&•Â}I·žKµ»ò´[Ÿáõÿ_t–Þe ìVós™Ûü' Ô8¼<Ž8ÌiwþŸrÿŸLîÿdS14†D}ÀãF‘€Ì›`4‘55^ã¨7ÿ‰$ài>÷m³=xdèr¹1œ¢<ß›—ÚÝÝÜ<öþíýC0.¸7|²üE9])€"9B…D-w˜Ä¿ø{ð¥&ˆïi© ^©í§Ð�/ð_'™ì#*€ƒü—öÖÿÙÜÿ/$ü‡6YÉ0�xÒ�—˜€1°r5ڀʻ÷ÿ‰§heË^'cVÖ¿á”K^± ÅbgØ´Z¡XkRgÍÿ}9])€‹øо ®»‘¾© ^¨÷ÇU/ð?rŽlÿ»üçóñ6HýtÍ@Œh�)2àH–þDæÔ%$KÌ÷¯ÿ¿ƒÿû ó4¹¦.Ìœë£én»ÁL„ê|úøÈ™Ò]Û‘Fôšÿ/ÈéÆ@ûà¥\êÇXò? -®o-Žø9Å!þ3üÿÿÍùŸÈf£x«‘‰E>å&î#Û>@Ù…È\å÷þܾ엛£¦^·M=xìNÍëöbXâõ!3jfÿG∔ÿºü°+â?˲»ûèÜþÏáÀGÁÀµãMÎ>zŽ,‘êúŽåôÏ)FbešÞ=Œ|ßõñA–VDúÐ^hZèУʋ«ÞbvYnu‡ó«‹nt3hÁBñI…íëGË¡ùË\YdŠ”ÿdê§ñŸcv÷s’˜ûÿe‚x8ìÏ7˜Gf1-?É>e²M9´Æhá:hë¤ËÈw=ôå)ò-}ìôö‹+ Är4E}²Þ3½QÓ!åñ t"ÿ‘Ü·i¡Ö½(&[é6žË¶Ý¬È}aÓ¡7—ºnºþ›±ä¿ešŸÆfwþð?÷ÿËñ -Ù,Žç`[ -TA#îöÙUXvZö6U™.tÆðr0몓ª¬ -·a`8áP®ÂºÒ)^=öi»&ÒÜ}ÐÍC2ý1òŸ?Ïþù=þK¹ÿ_&€¶íNUË ùH<Û…F°ì§W¡Vô$8@¼R®ŸÄQK°À’ã¹>$`¾„cïdõ]Ù5ŽÆjœZšeB^î_t”Ò¢g5N+Ô¯Ÿ¯îƒ;úbP´¢*…û¹«„r>pL¤ü·Æ$ØMÿø±ß öÿ·;þؼÿÏCõÕçÚĆ’„ÃÛá•9º¹é´W¨L;“‘û8¿¿kú·½Ê¬ÕÖ›“6_üFNÓ?¶øÿAÀAþ³â.ÿ.ïÿ3Éó;²ð(¼oŠgùÝ+x‹Šð™7”®gñÍçi¡4dê‘YBžîÜDƒ‡»ñmåsêÿiòßvû}<Âûœø¯·kÿó¼”ïÿÏñ4>ôOȲùÀ:è©qÀ[aËp6ô/ªÖ3=/é©3‰2‹6SWŒ™¹ø`™óZöçÍÿ »ñÿðø?÷ÿÉ[WSòÞÀS‰HP~¯JÑàš÷¬Ó‡5õ©s_Žæ×üqI/:²(/îj-{qëæËzP¬ùOvJÏÇOÈÿJÓ»þ?›ÇÿËcñ$Ýé¿HbÊ -(=ò}ä„öœ¤]C>µ)TQÁÀlƒÒE"¨“¯>>ùŒj 3¢ænD™®Oþú$¼±…ÈïN·½Dª–é—%©rYèÏèJC´ºmyÚ -‡å¨'KJÝ\³Û¾ùÌÈé?–üGNt–:GgžÿgvÇÿyþ·¬îÿA"ÇëP�2b4ÀCY@ÐY¤³¬Áë"§3ÿ[U-dÆ JóNƒŸ>Е~GÅÚóhQ•¥àn6„Fy¨Œiìï›JæÚ½wן"²{Šï!‰L{éžÞYÎ( |D¢Ø$q&½´µàôgÏ·Åú3ò¿I{ý?Cçý&H÷ÿBSAHÓ€"Cð-(Ëd'€"H´Â -ˆ‘Éÿ�z—Û+UÜkeÞ¸n«Ýþõ;é ±ÔÒ¯èÎ,ÌÛÐ(Ü%þþ±d.Ù_ _¬ L\òwˆ¿ys=„Áˆx1Œ‚Ÿžé/c“ÿ¦ëâÁà'ØÿÂ^ÿÏ1¹ÿo&Hã@'Z‘0ë …2'Š@Œ.+“ÿÒÜ·»ÂBY}#½ÈVîŸo[Õ†y¥Øf«Î—´nY*”õ˜ÿ‰d.@9ù¶MüV<zqðÐcë…œõïÂ&ÿÉ@ï3öÿpâÞú¿Äçë™ íÿ5EQtÉ�2ËþŸ•±% š@3ÏC]4iåÝûÿßÃÿÛ„ÜÐt¯F´Éµ†³›G‘ÑæÍFù¡XмE¯Ô¨[=0r\9æ?‘Ìо–C9pbõc¢ïšþ±"’”й8„Mþ“µàOÉÿ,ííÿcrÿßlð_”5Ò húy…†@aeHŒ¢‹k˜Ï“ÿÅ‹*˜<0‹EÞ]ÕÙx.4Õ‹¨RÊ…òͤ=“Š·¶*WôYÒÿÇ’¹T�íøË6éã rVÂø_(בƒÇ Ø®¡´yº#9×{Hùï!?¶œ>cþŸ¡÷ü.ŸÿËqþÇ$ûs?ݱ?†³Äo—>уx?¿ç#Ïwu«ý<ý…å¥_L„*OóäÌíü„I~C’ëùËogÿóp~õœþ×¾e~zè?ú_ñ¾ƒ¯–î~ ¦æWÓž|ÕûÖW âí¯†mE3ôÞ?þç‹dbD3ÝŽHðßUÅ_pÅA8Çìþ{±ÅOôß¾|!§Â11~ý¥úE»wüó×ôþZ¡þ‰ïŸª¹![DŽñë—¤ð×/É)škÌñéÌ?7ÎÀß~õþÙ x[$ -È<c§yGýõ_äÖþJMa@9øt“œNaS$X•ä¬<ûõ‹‡+OªýßÌéÉð¯¡âl™êzã&Å - -Kô°ÖXü²ý!°ëãBû[vóâÙ¼(÷šôó…1›uÓgÈÞr×ÍŸ©þ÷ƒJþø—÷ìÿÞÕÿœ(æþ™@@ÇAv¢56-ªÓ<ŽÉÆ°1ñeÈð‰…¦ê8¶±Ì|˪nÛ¾’jµ/zs1ãVÇœö™º÷+Aç•x[¹i8 »”'Ì)ÿÉÚÿ§ù%ñ_·ã?äû?²A2þ3EÆ‘)Þ9üÒÔк"‹¬ S—N’ÝULìx7híâ#–®ÎüÍàسљîŽOÛíÃD‹,íJžæâïäŸ~Šƒ2ŸS_ÈŠìüË9IrÑâ:<¨‡©¢Iö¢M‘Õ¬ß$šÙ`F4½–ŠçÔRaÞV¹ÞÑuÛ,Ü5/Uk\œ×«ýð‰QPÝ~6Êââšó¤ùó¹»<åœü÷¬o»<¾è!þô®ÿ·À39ÿ3 'xðåÄQÛ¬1J"£Åã¨/Ç8[ºï®ž‘³V ëcöF¾½ü uì¨dLˆ`ùI48Lf2&‰ªæY:9°ÜlÄC#Ë´ô4ÔZzÆò—ß“ØÏ[u% -+÷üý·ø¶ZPüB‡¿Eª35žýáÂÖ-½üÄqq ÅŤm_ÿÜ>h[üÿ¬ý_üÞú“Ïÿdƒ¸¿9²by!£ôí† Ô«Ê<˜kÕ†X[Üy#´ŒQÕ{3£Dzpૣџš?<Hð³�…!¶è>j -à0ÿ÷örB¾þ› V¢ñ˜n°‘Ó'ÝçሠŚj’Ô,Öo9>VïOöd©¯é4W›Œ/„~ñnqoKƒ‡|'ØÄ:3m×ý˜Ð1Îÿq»þŸœHçý&ÀÃÕuìùÒˆ¶<5îhòej9†;=§8¢b«{y8ù¶<þž/žY] {¦%oÇÊ}k23%§QCr)¨µ�§él·U«=Ý ×!æÿ‡îþ<Èiþãù|þ?¤ÉbžúcB]²*yNýõ?『†x6œ2÷÷_¿üæüæ–ëdWEòëd¯×r;æ:¥!äPch -†Ô’Éåó¸†3RCÏð±9ÈO_¬ÀuÒŸàÑ;Ð|™ÿE\8tÛÒGØJMR‰›åú”îzsRübÆRVHY¾»¸VÍw§äIÈ•“gJ® píÿE -kõöå9Er“vâ>êšÛwe%˹>š ?°4ÅÏÒ^Ýšy–|eü�ˆ2ð’{¿{šZ¶_çác™ñ-&â[2âª� 6_"8þ+n Ò†H'a9élÝç²5Èž»Úl§È|lL]ßPñÍ¢ð[<þQ¼™fYÏz³ßw €íöÉ+;fûâ×HÈRÏ(¯ÚyÝTøýQ¤Ï#[ÉëÇ_tDž.½r¸½H,ÄxC#>c j:@>ŠËH-äe¤“·qF]‡+Q€fˆü÷IÃé7CávÒã`ÌTü [ÎÏï•õ $Ù’yw‘ Sï’Šx»(\o·ÀWÜ®=„´Füô+ùHæŒú‘å ~Gqû§ƒëíã¿Ä?+Ç'>3›×]¾Æõ“bÂ:3"3žønI8Nr ò¤ÉÂLòÐñ›ÿÍY^眼äõeß©gœv}½_(ÇU±|ûîÚj8ü=rµ½‰xY[ÜòÛŠ$—ž?ªô¤b ›•Á·«"âKŠop%>Ç–¬§<ÏN—âlÈõÖþ÷ôN¨åœQuÒÆÖF—B›Mâ#‘½gh{Ü„ˆ˜×q*Jh9±äm(j¨¹®ËðªÙˆ_biJªKßk,#×ÔßWOTÁêüã†J:‘·›+~sñûGÆλ?[“VKî?Jâŧú™¼³ãëmš:/tx‰T,+üáíÏÒTi€ÏÓXÔß—Ü_’–º—£F<;b”V÷Ão}Œô*ë§HÆÇ{Œe}üËËü㛂Œù®Yw'[¿|Žš½Ê6ãZžQªDÏ3ÅV7amb ž‹2ðp<ÿã»x8‹»+g>v£ã¯ôÿzÁÿCÊç3Aâÿųš(°š6�¯I,€’ÄE×u qˆàQã…Å]µnÜŸ/h:iá@è mäù7E¹¯²åÇ«çéÝ,Ü4þÇR6W›�Ë’8œÇiêFö,XAj‡¤3ÚòÇV`c+öFÔ)ÖW(ÖÉÁ?» >üpÇë„Ä.FÇ]:Èf—ÿ"+æñ?2Aÿƒgtä/Ê"YSŒ(™HRÍеcò߸¡ïØR5žÅLJ§B%ˆJÞM›hÞèú~zëwêuÏ—{× ÿ7es6Kwô�“ëw!æÿ'ûHÜþyÿŸ V=ë9µêROb?̹šxwÇwÜ—ÄÞœÛFë~[Ë -Ëâ½öÎå€i•lw²:ðÊLõ²¾·ç÷ÎÚ›cJÎX?§&Z¸~ªCVç¤?FáÀÝID?ËÎúŠJæn„_ˆ,ò4½>„~êi_ø,>?šêUúºûøPí<•Ï÷tF¼¬8éiÐÓ -ò¨R´Æw¹ë]Ž9räÈ‘#GŽ9räÈ‘#GŽ9rü¼øÿ3_§Š�¸� \ No newline at end of file +‹�Jú,]�ìmsª<·Ç÷ë~ +ßí7Wöæ!!ÐwZµµ¶>µÕ¹g˜E-àSÏœï~hmµv_–î{«3-†Ö –;¦Ã_Vü;‰?4 9Þ¯åÈýq,“„iFeŒ¤—#“ÅÏYU1–5 Ë¢žŒ¦ýÈIG;‚l}ë\î‡Å}æøï×Û·þ¿Ô¦S‡æTqÛÐ €,¨Ù›1€æ*±©Á-~â¯GÇŒŸæ¸w"ÎZ8 Ns¡?å'ŒO¸Ç¸GœžärtìÙN/ZÊå@.X!ýqoú+v.Q>³©Ë_×Â>mJ#w<1éØ‹·ÉÔ ÍdãfŸýÓ\ñ>_À$oç/¹Ÿ-[zA¹Úã¡SÓnéÕݤèPƒô$ú¢/\ü$ÙÙj7>ï9cO|r·ˆoÚŽ„'sîôúáiN>™øã™XåŸæ¼©ëžLÜiÏÕ&‡nF_ÎŒ):7þó$àaèx½ø|D{~¿f.ç‹»§¹|ôÙ BŸ„âXDùf§Ïg(®j2'˜¸dyš›9c¹<ZÁgÑ6äøLMBqn$±Èâ1“¸®éˆ ˆf7à'ñÿ9®ŠmüO.÷¿'ß퇙}Y;úoùÂc„ç¯ Ø£ÿFªÐIH¿"i*ú¯)šœé–è?…† •A @ÛÖQ +ˆ%‹!M¡Èþ„þKÝíÆÕC`ÈíEqVªŸÎz·¹}¦•WzáØâŽÚ›Âê¾v෾ωPÔge—ÞSö•\¯7–HöŽª¿]ëYÑ6…êæÖk$é?¥¨Þ4àf þÙtǽñê4¿(õHôͶKQ™x«òÃ$~—±H\“Ш +Ž"ûø×Te‹¬JjÆ–ð¯CÅ`"ʈª€:¡À Ü�”2®aÕb6ÇŸàÿÓ ßÚö¨ò…æ +˃ûÑ]ÐÀ5L½¢Wrf³ñÄ»ô +W¿ª•^€þÊSߦ]ì%äÞ&ò»À¿ÚÚ;¸¿Ugû¿ÌÅq]nUë5ôÑYxùoŠÈÞã?$Áð8ôÀ?Üiÿ1V2þÓ°„Eª®Ú6 ˜#Ñþ3èÐÒ•‘*AÉ"6R¾’ +$ͲJn£ƒ‚«QÏb8™ôZ÷†Z +!(]–—5§ÝZúeg‡ÿØS¤_ÙC¼ÙYã™ü±‚1jÅ*ñÜz\&Û”¤+oñßK7ÿ#˜×¶øGš„2þÓ°„L©¤Ù¢Õç´T¡PR�³Kµ)’!ÿÿ¯ãžú" +°î6½û],®ª•r£ªÖÔ¬šC:QkƒóžwçSà.½úEå•(ô>—ÛyW¢ãN6÷Ž"ìTØ„m±*¯zÝþ¯ÎÅ;Yœoˆvùñ =~¬ÆÿÇü£mþ5UÊò¿©ØŠ¢pCgÝe�b]#D„X‚†ŠeIEßÐÿGÕªö¤zµ0‹B‹>)-Y.^ÇR[¾@ÍÞ…«‚+ù +°vàwúÿ‚z7"Ÿ³ƒ“�ë-~œØªõ" Ÿ«Üzýái€ô`—ÿ‰8F3tB—Köò/íð¯I8ã? Kø—˜¢AY×Ò™ˆÿ©Ì…X†"+H²8fŸáÿÓ ëËIX´µ{ÿaÁ—|Ö~‚Þ-šÙ>.„‹úãY¡ê9^ÿN©\ʽ o<õÀð_}ôͦÞa|§Â‹n¿X•‹Wýå}ý·l—ÿp<vØøÿ8 ÿñ‹û¿8Žÿ5˜ñŸ†%üs‚˜Ìt$ª�Bƒ(TD”3KRU IG¹ÿ;×#„ÅÙ3¸f´{‹ºA¤¢lN˜>[ÔJ}»ê-ºTtúƒà…p$GqŒ>ÂwuãtÿwUs“FXœ4oûFg÷#!7í±?"á/QѵˆPƒã)À>þUûVû/¡¬ýOÅþm*IÌV£ü?²õX–Pe‰È™PæCùOëclñÐm¢Êýƒ?º#·“N·œ´9]èm¥\–°zcûa+˜MgI¾í”'ë6·¼*ÈE®›K\÷çIDg«ƒš0ä~ÄhñŸÜè7ûÝšrqêüÌžuxa;ü÷ÑQ:£#õ�öó/oßÿ“Õ,ÿ—Šîÿ[Š¥HH\b\´ÿ*„ˆž�²ÑeB±¦Ócò?XØgî¼[i<TUý�÷CÚ]ÏÛwã›JImŽ”Z£ë–§ ÿ¯œòY.ZÕë\qUú.ý0ì?-Aþip“Á¿eïóŸ^þO„þÙó?ßd«ö_4ö„@ Ø*üc®B ×t2E#<&ÿ¥›º¶ë·£ÕÚuŧ—ðÁ1]~Vº ©#µ@VØ´ ZÃ×üï²ÿ÷1öíûìmþGc/ìM�þ€ˆ3þS±„H™e"c@ÄÑÿg`’Æ%¶Îäƒó‡ðßÅWÓ³ö¼jÞ³VmvMÇn8}PM�èåî°UÓ®zµyYâÕ ÿ±S¾€jTôdüï³·ù?^ìÙ^þávü¯)8‹ÿS±Õó†eA‹è@Öe @…2@¦¬+\±lhäàñ‡ð_ÅËG‡v†mUë7–hb0?OΧßoå›åtPuCí¾ˆÿwcÿÖGqðgñþ{›ÿ9çGL�þIü³ü_*¶¾ÿOmê]’�$º,ÉRDü¯ë†A£æÿæWExŒïÌy¹7Sf½ +Ñ|¾Ü¬<ùK.ãåð‰Í}/?Ú ÿ‘S¾æÿ^”¼ßúÿçþ>£Ÿ½Íÿ’ßåApœDÀ^þÑÿŠXŸ=ÿ›Š%ü[œ ŒT è–Eü ëÄ62¨¥*X‡9&ÿènBæUÿê¶t{6ßÀÎä–HbùFa=§ra·žœËpîŽÚºáÿ•S¾‚ÎjU|;à=EÈòoØûü§Ùþ£Ýçÿ2þS±„Dd kŠ$-�%.é:`@Mf +´0;&ÿ7>têÓ£aÝÕSÜ\® Øèu®ùíãžOìÚyÖŸüákþw±?ïŸÅþØÿîø˜Ccûtû/£,ÿŸ’%üËX#Ó(°Ið¯CÿÛÑܔ۪£æÿÆ==¸è¦Öuu®žB©;è=6—ýr¡<¢VûÞœ_S»fO’±7^ïýb²Å¸p«ÁOžrÙh€ûO®œü“Ëný¿g;ü8s¦£TŸÿSµíñ¿áìùÿTluÿOç#D€EðÏu@l]„XâB‹ h0ã˜ü{O׈I +¬ *¦Þr[Ú´œŸXuGöpt1t/Ï€â~>Éÿ%N¹£�Iñ ÈžþùÈvøúc?<n�°¿ýߎÿÌžÿKÇÖó?‰•*€JDôÿ1€A*¦Ô6Ueš~Lþóî_.ü^ñ +½EåܸPÚÅËN žzw -AñjäZÝùj`Oä”;øÇ¥{èÏÐÿØbþ¹:á2V�s$®ð¯h˜â¯è‘è@œÆ¯Ïÿi;ù?%ëÿ§c+þ¹%‹S/Í0$ ¢}UÇ€Q©[¢sðçãÿâ1¯{&úqú-:AhyM—Kܽ¾éßž_wÇV·~ɆùòÝýzpgšõ}åŸk]h¬?‹Úãa)vêÖrÂWÃn)¡ýõ¤9ß}Úÿ{ÉÿÌáó„/úeO]7•ùT¼3ÿ’åÿÓ±„B5©¢ë4Yð/Gãÿ¨à_£˜BKבßá?io?€È›ö=èúaÅ[œºŸ2¹D7†¦=GéŸ+•EÙ™…=O +/n‚$!øì ›âÃzÄßÏ7$ >ˆL¶íþýàHÃ�÷ÇÿÛãÅb–ÿKÅVãmY%ª¤ÝŠæÿ³T,›jÀ’ Í2TI‘ß›ÿïHüÏÜΓü‰bµêÔ]åûØx†4¢cˆ}];ŸŸùí ÿÂAŸÛþf3cþOìþN|Ú7qaÿJöñ%e;þÇ(Ëÿ¥b«ö_œx ê*Pl¨+ŠàMÓ�cªÍˆTl}-ÿö]Ù¾œ™çO…F Ì'Ë."¢Þ ¼¾Uºy8×ÜYƒ©SBigÃÿK}Žšqa..Ì‽¶ŸŸârýØË¿²Ýÿ—eœÿOÅV÷ÿQ¾J•t@nc ëq$�1ÂL6dýkãíü즷JÃbÖEuîëšÕÒÏìsëÑ/t®nšgæC–Ônu‡ÿÄA· )ÝL÷ãx=! +“iÖ9xeðr!ûwHþo{þO¬ÉÙü¿©ØjþO[Ò0äˆ:^�Úš[¶Fˆˆ4>øþߟà_}2ï}yØî\I£A#^|ôÐÔngaWÜ3±ÇB0YÞs¸Á?ñÏ5÷äSÆöçìmþãü*&„á^à~þÑvü/ÉYÿ?[Ïÿ©ê2‘ PÅ�ª6 Ìæ@'ŠmQ±F>3ÿϧóÿX>kæ}óºvK{S¨ *°Rså«|kHú#¾l—¥Vþ~IôÞ&ÿ¿òϵ�œ>fÙÿÏØügþ_U²ö?Kø7x4ÜW³…˜ˆÿu KÕE8`QªrÆlÉÿ �£z¥lÚãÎ`äÝ5}£:¡ExÖ"—%³<¹‘óË"3‹Áð)<ïW7ð*ÿϸK(OßÎÿg"ð¦%ü/BîÎø¸Ó~?Û>þ”^ð¯ þ¡³ñ¿©Ø†ÔdNºxú8&–{«Å¥GFMæÚ\á•ÛwÙzÑ}.tÃhÚ:)ž±ÎëMÅ?>E“篖½XC¢¥í&ÓÝ%Ë¡pÊd)"w]Dýøµt8ž¸v®kŽ„œ8®í/š +OxÔÉóD‚ñì~« ü’=`#ûÄJ9¿{”åvþænZë ô…"»zs;Lfõºù´¸w)ª¥ö_¯21ÿñÔŒ‘¢‹ÏO(ÎÃÐϸï;ìßϾY…Ûñ¿€Œÿ4L8¸ã9ñ›j›¹‹up¾-…mP#çf®Þë³ù¤Sµ@a €Ym–{ÖãU»Õ©þõ¾Ÿ™¸þ‘ÔÿZOVú=í¿¼óþ/()ÿ©˜?žµ9áªáü˜~®ë*9üPž—ý`ÉÜNéð¶{S;kÚ¥T‡]ãêéÂBzFÿ…ÅqÜ·ó¿=þOðŸÅÿ©Ød*:ʦEBÚ7çIÄÇhŸx—C©•¯žÜÚ)¼ï\T°U)Ý^Ÿ;R¡óØݲ’‡ÏúöTÊDào·ÿáØ}±ä¾Ÿ5fËtßÿ¥lßÿC(Ëÿ§c«çÿu®hQ jÑølÀà¶dc•)ÔÐôƒçÿ|ûþ_²uê÷= \hñãÍý#qº¤n6Ό຃*ãâÕ¤ßTáã»ÊE36º{ñ$Pä²'±+¯ÞŒ¬ÒÚáæ6`²…9wB¡xÓQô.¾ÍdýIhuüÉá¾YD‰p$SèË'¡O¼À%!±Üu^1~òèyÔ„û¬vçÍø ×ç +çÌ}ë]¤zý£œÈ7ÿ{ùWàvü¯jÙóéãõI”�ˆßÜóHì¨ñ&¼^ôZ YÑOšÔ'‚Sá´Ëä%7¿^‚ß‘3ýŽ*ûÞ÷s]òCo~ýNÃLLu¹©© +Ó.ûìñá*€³bŸ“s”…_jIÊö×jðïÄ%ŽgF—ÿ˜R°‡Y–væÿ!@ƶzþ_¢Yš8D@3 † ,…[¶F)ÖÈQçÿªU® +¡6œ›ÓÛ~"=† ¥è5l<jÞôòu¶Àu6¯ªƒ«~’4è?o#׌•éçI⧹»>¿©G–N—Ž‘dÑŒ§BG&« $žó`g]¼jóò¤B\øêÛF/ß'Wx@<ïyê»;{e°§ýÄŸ^îÆ\5V6»'Óp<Ù9€¸ôßÂw¿º,³#ØJÿ¿4ÜÿÉÛúEÊô? [¿YÉ|CS‰;'ËÀúã¹ù\öÇ}î«|,óeçvPUïYÁ4ýi9Zëzî9f›v¢sh)lQ¯„‹|¦#ßcëÛô¿¿pã¡wù¶Å¿"äÐÓ³ý?çÿùú‹îÛWíã°ë¯Šf@…âwtýQ4þ7»þ_o/¯ÿzyõ<诩ÇRyþSRwßÿ†²üo*ö<jJt®x0áԱͪúÝ–Y*ö’ÿ¯zô^þ¡´;þ#{þ#{™PXiÁÅÿ±wmˉ#Ùö½¾B31žŽ8YÖýRQÑÓ¾qƒ+&B‘’R ’¬ Â?30'Î'ôL 07wµ-w—µªAˆ4 ¹vî¹÷^È÷áÄ‹�r3ðƒc“ÿK¡n¨“Ó€ä,X à©ËßmŽ¯ÿÜný7i —ó?¬ÖÿJ}i%ËpsàC`“ÿoUöüèœÿ™`ÅÿbDÖ{Ê@T`S`åüÿxÞÿO +t°=°ÿÔQþ{þ¿”÷Ìüÿ“Îoÿ #Û%ÆÀûí?˹1øQñÜþz¥zУügöô¥\ÿ9,9îl+æ4ÿh8ÿO Eb@è诤}ŒÿÌžþ‹ÄÐùù&˜ HrO~ ¬Q(ûE²B]é!4\Ês} +GÄ#˜Àdƒ Ùt?S·®=E7 CM¢˜Ò|4EŸ©Šu¿¼7ˆ(?#éaðsîIü¹°Éÿ$ÒƒL £ë?Ëï®ÿçfè¸N<qI¾_Áùíÿ0±Ýœ¡ÏÇÿИX<8~þ·×ÿQâóý¿Lp þ/Ý +B²„c‹›ƒÏóßv™ð7þ—$)ïÿ– íÿ]:–n%Û +ˆ Èö‡âÒ êuVþÇýÿ½ý?1ÏÿËùšÿ±ñìþFúO4»›ÿ/JR¾ÿ— Vûÿû_×ΉÿÁp`ý'ûÀ™ö!ÅÞ»ý_rýçlVW—üȃ9ù? žòÿM×} éçÇóÿv׉Îýÿl°ŠùÊó}> žóÿó?¦û¸ÂwðŸÍõŸ²ÁŠÿ57¤ çÙ–NZ™åüÿ(Øäÿ[õ‚:Îÿ=ýW6ïÿ˜ –Ý•:øgv©Àr¨ô×ÏÓÿ?žòÿ_§ò7ÅwäÿHLÞÿ1ä5¿o•ó¿‰cüçöû¿‹¹þK6Xö–– LÄH€Wx@‘e"K¢@‹4+Úkö´Ïú%Ï(5úÍÐ7;WÍ¡/VG««óóø®í¶®h¨Ó‹› ‡ +I“güw +Ò´¤k-e‡þ§Ç…ÛíšßûëýÓãÎü6qŒÿ,»»ÿùŸçÿf‚¥þ3¯4À#…Ãÿ hD@Q ‰d5xdü>þ'¬ V¬m{Ðy†µLÎÚ÷Â[õüÚÄÑõ/ÿÏëÿ2BÊ]EZ4À2xV�„´XJ,ÓÍ'ô_¿oýGµ¾h߯KðNæœbuÈÒÕ�Óܵf•í©L³¥ëbÑ›.õžãÓæNå²Q2Nž2)ìÚ¤äb¯Ïáöü7q”ÿ»õÿŒ@³yüŸ –ë¿¢<ö��+êð¬ÌÅ$�%Z£uQƒÌëöç„"2{š³€Vêêh>_¨•Î4š]Žîõ[GŸLZ ì§þ?ž•Ÿž:©xÂ�p¹x ÖüŸàïô:€çÿžÿ/äþ6À?;aé‰ãž|¡ˆ2“&à!ðBüx¹º‚!t‚äg«éË`8Þ¹0qw.è„ÛWœQƒÁÎ}<^9¢Uí!é.â›*Z׬EÍB¯r6½ëÖ¾5.-gž‡õZ{”ôÜìcÍ ÜЂ¬Óßaü~ÿ_`™<ÿ7(–ÚOôá%î«Yñi©_¸‘Ošþ{0ªžLkNÞ<@K1„Y}r’>’à3Ö%Í$߀ÈÆK72ÔGׂ$ŸªK¢a~tŽ—K%¼{÷‹IÐѤªÙ(ZBÜèõÛóB™£ý®ÜÔr)ê'±æ?Qþz'ýWzîé¿ryÿ¯L�í„à`My•4ñMì‘o_Nƒ†Û‰”QÊÉÈO$ŸjcuI+ ·G]2†±Ò6ZÝÖäD›ýù7’–ªEÛWÁJ΄ì=R>ð‹Æ}Þ<÷nT¾¿ Píª6=îÝõ\³œrý²çwC‹Ùz§Öl¨ï©•ƒ$øÖ +GøÏÐôæú/þ3RžÿŸ t¨‘„~*é•ÄÊ+QS¤¢ô´mµ/?‚S˜ÊEî¨@®˜¬ß»$zàÁ—΃&.:x½'³nƒ8D8r™‰ô“ç»#<.øiJ¤S±7úÓzòÜ“7ÈÇ·¨Ø'Á¤%¾Å0½/§§fè}6’‚†Ï®?HD)ƒÓÏœþ”¨V®þÒéñ?éâf>qMRÉVkñxX±ùªã†[w,%Ô"Ï ßfb]¦ÐV ©a"Uêô§Ëÿ¯ßhM<×Õ•EJG~Þ�ÝÜÏd¯Ð¼4}>hµÃ€mµzEBµŠ8mu¤òð¾¬jB±Þ¨Œsÿè£"‘O~gý_lîwì?'Šyþw& :©õWÃ!š¼P×WûŶÞïÖoÚw—%xÃQ¿çDÇq`µWëÚ¥ùùý·E…éæ–åÏšŽÊÃ?®úðˆcüçy~¥ÿÅ%:aøÕ<ÿ;¤ç?<¯1’iò@Ódð¦ÀÅD< uÁø7zéù6©x6ŠLª#åÛœ•˜k{(„ß`å*–£:j©lµ)åR•Ÿ¤ì^uϵñer´?O×ÇC¥äêRÇ"<ù”*š'ŸÁ³£EÅô¬óËÖ�_È-'Ñlz¢ôÃKÜàÿŽID`éãøuŒÀQþìöúÏÒ‚ïÿf‚”ÿ2'1ŽÃfòàe‘øÄ4C“WDˆÄ·äP×XñªsfÅë§-ºwWÕaõ~¤ŠãOµ©?^xLCú‘ÿûótmªø¥• Ò[Z‚§Æù8Và)þGÎëY€£üéþ3“ïÿf‚”ÿšÁȈƒ %Ö�¼ É@ÆÜþM ˆxE“Ñ[òß.U•Éô²RˆäöLöCë|Û—â¾pÛðKùgcíÚÇ;üß™§‡-Àê¦#6`w¬`ðßóÝt£îµ€ãë?¿ÿK—×d‚”ÿ´Æ*#š@6‘ xV€b˜:Ð ‚8ü«H´"½%ÿkt«tÖ¹·®yãÚñïöØÝ®ôbݸˆ7]¤TAÝôd¥ûÈÿíyºf~#½¼&èR¦SDÌèi°3ÚGà>Á!þGÙôÏÿIþGªÿMc_€ðŸÎó?3Aʉ7LYç`Šæ¿ Ó@¬t‘LY”iCSþÛAs¬¹¼3úšª[¹.6*ýJ¯<ê•™K©é +â„Š¯·ÜÂÿ·æé#ÿÓË/ÚØâ#n¼•æë&ŽòŸ×üg.ÑÉϳAÊA +SŸç9h"ÇILÈr‚ü›ò¿«\^°¸™ë3Ñû6iA½Å¸¤iCWk ‡x³¡ù½ÞEeðÈÿyº&_{ó7Þüi¿ÆþGÎ+G�Çãfwÿ•òüïL°¬ÿV8i’Yb°ÿoè@fð’¨A‰“½¸þû{øuæ…#ÇŒêÕ00®ãÁØîÏÝú�Õ‹jØœÛãx2rœÐ‹û»ótmZhâ>šâýO^ì øLÂaþ¿np<þ×)忘ïÿg‚”ÿŠÄ"…3À@‘°žg±ÿÏh@dEC †ö-ù?¨4ûV;ðf›¶ãz[œ©Å†7%ݺ/Õnʳ^=6nÃË-þŽ�º«^ä ìó±Ümþ85€Q“‡¯c�Žó_Ú]ÿy.ÏÿÉËúOF1CcH×ÿ3ŠdÞd�£‰¬©ñ¯@ý»ùOfÒþ—âØ[tÌΰÏÐårs8E¹o˜çÚÍMìûƒ¦Ý¸ &÷ŠOëÁÎÓµ8#¯Páؤ&É;þü¼²ÉgZY‚'Fûà�ÿu¢üj¿¢8Êiÿü?ÏÿË)ÿ!¤MV2L @žƒ4ÀWLÀØ8‹m@åÅõßßÃgêß(ZÙ²gÓ «êŠßtÊ%ï¬ ggÝQ{Øn‡b JÝGþïÏÓµ(&/í[� +êº9á³–àÀ¸?®)8ÀÿÈyeàxü/ìò_Êãÿl°ÌÿÑ51¢t¤È€ 9ú@˜OP—,1ßþÿþ·A·´¸–.LÌ Ðl×=È`&B5žõûœ)ÝtiL?òÿÀ<Ý´ïðøãR?ÁŠÿQ8t}kñºÂ/KÏÿvë¿x>ÿ3)6JJL<å—ÜÄëqdÛG(»9#«ü¢áÇöù Ü·ôºmêA¿73/;‹Q‰×G̸e˜ƒ‰/?–ü×ý×oû°Æ1þ³,»[ÿÃåþ6‡> +†®9ûè>²|4AN¨3è;–3øB1+ÓôîËÈ÷]¿ÈÒŠH«…¦….í0ª¼¸¸[ÌÏËíÞ(¾(ö¢«xh Åo*ì\ö-‡æÏsc‘)–ü'õ©ïÆŽÙÿæ8>ÏÿËI8ìÇÌM:³˜–„¤N™”)‡Ö-\mÝtù®‡N¿E¾¥ÓJo?õø·B¬J )ŠØ“Çšé‘Ž[¥ù}¶ÒèÐBw]QL¶ÒkÞ—+l§U‘§úÂ2f#/–z®›ß‹ÿ-Ó|7þ3»û˜ÿ\žÿ— ’²yÒÏÁ¶¨6‚F²ì³ëK8>°ìåµç©Êô 3çÃyOVeU¸Ã GrÖ•îÙE@Û5‘æA/oÉôçÀ’ÿ$|?ÿŸ#ùÿMš?á•?_ÿ3´mw¦ZN€ôÈGjäÙ.4‚Õ:½nµ¢§Í’“rýž1žëC?V'pnM¢‰ +ˆœ"B^»JiqgŽ4N+Ô/ï/nú8<³ûCQ΄Fì*¡œod%ÿ iv3xýÞïG׎ÛÝÿ£¥|ýÏ# ÔûÚ$†’„ãÛá…9¾ºêv†¨L;Ó±Û7-ÿú®2\´Fõִ׿™Ó÷¯€-þ¿‘p”ÿ¬¸ëÿtžÿŸ ˆÎßØÂQøÀ8ÖÏ0ò{ðÁ{ÞPzžÅ·îg…Òˆ©Gf yºs oo&×5–Ï©ÿ—Á’ÿ¶;àï}ú¿2Üný/Oyý&H¶ñqÐ?%ÇæCëh¦nÄg,l…-ÃùÈ/V{:.飂©s‰1‹SWŒ¹¹ø`¥ù +-ûýöÿ„½þŸçÿd‚ŽÇë-yoè©dJ1þÝ ”¢aš ÖÀšúÛ(Gñ%mœÓ‹®,Ê‹›ZÛ^\»ù±ÞŸü'•$óñô_izwý—è¼ÿ_&˜ H6ïN~%]ˆ)+ ôÈ÷‘Ú1‘]C>µ97¨¢‚¡Ù¥!ŠtP'O}|ógª3„ΘŠÝˆhÈ“ÿú¤½±…ÈûN¶³tª}ËôË’T9/æt¥)Z½Ž<k‡£rt'Ÿ•”º¹f¯sõžÓlj¾/“£3×ã™Ýø?×Ë +Ëú$r¼ #F<”!d�E:˼.rÊkê¿UÕ³¡Ì¸A)î6ùÙ-]tÕšqV»/ª²ÜÌG°h”GÊÄ™%ù¾Ë™ù˜Þ»‘ËO‘¹{‚?CÚ™>ÉÒ=¹±œq@ùˆt±7H ’L2z§h«à䣫ÄmñŸô~ý7ioý'-rþg€eý/4„4 (2¤oÐ2€²L*A¢V@Œüšü wn±w¥Š{©ÄÍËŽÚ\Þ²Ó®ÑKmý‚¾åÌBÜFá&Í÷OfæŠýòÄ +Â4%‡ø›/b®‡0“,†qðá™~›ü7]ƒïàÿ»ë?/Jyþo&Xöÿ€2N´"aÖ +dN& !]6$VxMþK±o÷„…²0,:‹ô3¶Ò¸ï_·«MóB±Ûv/i½²T(ë ÿÓ™¹2�åôÙ6ñÛIôâàÐc’Ø…œõ/Â&ÿI ÷õ?$Ù‡ÿ$%8çX®ÿš¢(ºd�™eÈúÏÊØM ˆç¡.š´òâúÿ—ð¿É¶ 72ÝËÛ1mríÑüª/2ZÜj–oÏ +š·¸+5ëÖ;®œðŸÌÌÖ¾–C9pj ¢ïºþ‰!RIèÜÃ&ÿÉYð»è?K{õBžÿ› Rþ‹²&@Ú ÍਟWhVfÄ(º(±†‰-òkòÿ¬XÓ[f±hÁ›‹#÷…–ZŒ*õ‘\(_M;séìÚVåŠ>O×ÿdf®@'y²MúdC€Ü•2þ(בƒãì×PZ¼¬HÎ-Á–ü÷ŸxNï±ÿÏÐ{ù?¼”ïÿeƒDÿ1U,+ö'pžæóÒŸô ©ç÷|äù®Ž‚`]Ï3XXÞò‰ ƒPåižÜ¹O˜êçÓþ翾„óðÁsË|yè_ƒüFÁƒ¥»ÁÌ|0íéƒ>°4ˆo´Û~@sô�ïçœZD‰Íu;"Íןâƒ0Æì~H²Ø’ÿ£Ÿÿ}zJn†â2|ý[©^ìÜ5Γ¿|]þ‹ ñË×Ð +môþüTÍ ql9Æ×Óôâ×ÓôÍ5b|;óËÆøÙWï—Î%e‘( ûŒÝÖ õ÷_ÉGû;5ƒåàÛMr;…]‘phTªYùù멇O‡=M>ÌɧѾj<Wm”¨eª…›Ôÿ·wdËi#Á}öW¨ö%IUDð´€ÇÄ€1¶c¼IQ:F £\_¿Ó3’¸œ�[6Îz§\–õ}ÌôLwO¡X.;=¯µìà‘·ÛNõæ¯ì†f}lÖ?î®…qݘ; §cµðµvÇ\7ÿ?èÿ |©ËÿØ'þ{Ëÿ³ 2ÿ£€>T]ÙTk¬®¨Þ`;Ê i`˜¢yˆŸXhÚwÈ*óÌ!§º7ö¥ÕI²?4gqÞéÞšÓA¾.ôÆêyx[G§’]ntÜŽ}Ê.<$ògÿ¯æÿEó¿®û±øã�µÿL9oÈÈ”yÉEü鼪—ó¼ —KrÁT˦®œÐº›X°I4h¬Ú'à#–œÎü…fªãÛ(§{ÎIh{•j‘t]) "y†ÿ¤ä?’”¹Â}‚ÙOøË=¡wÑb¾ªG‰¢¡±hSd †pë7ds‚À3ÐHºJÏj©:¿)‡¥ö®Ûfõòú¬o9µy»9ˆòeÔ¶ÇÆgyq!úÊ|ü&£Ëù'—ÿ涧©ÏïºKþ‹Â–ÿ·"3ù? +˜ê_.ÉÚf9ˆfF#vÔ§‰käK¼Ð3£ü*»°žHoØé!Z探6!R£8 Ùà°0CÊšUÍ·t(ÈŒ›µBlY¦¥'©Ö’_¤-LŸiîç5\TA`âUöoâ¯ÕB9¨ÞJW£XAÍZg¦Æquð¸°uKÿüP¨†òâL•“»^ûoû ÉÿkÅI›ç?b‘íÿÈ|Kd$“ÑñíN±Øºo–çá\kväÖ¢ñ(‘ÕÉÕQ»73NaçƒþhôŸ7ü#¢(Â+º—ÚØ-ÿ[ö¿R`ç¿G,ÃCì8ÐÁFî�¦ÏÝ™j#4ÕåºÖþ*öÕûæUè—ü’2ÐtAlMœzqP»\\ÙÊðŽE‚ý¾�©œi{Þˤ~ °sÿOÜôÿóE6ÿ°ùß÷\{ž.¢-¿Ÿl÷x˜Z®áM+œ +¬ºÓbú”–ï“ûå¶g6è*ß-=~uÊWÝÉÌTÜN•NÃV—5½ðÛjÝ×:ßB¦1ŽDþ_4ús§ü+Oìÿ y¶ÿH.; r8 ºp*Yáþü›$t4¬Ð·Õ9{?>~w¿»Õô¼¢*è×4Ö+ ÇÀ²Îi¹œ£ˆS#îoØ\®9ÀÐób\6džüôIž›|‚w^,dþ�ݶô^¥ÒƒTpóༀÓ=/U×À†ËXΊ8ËÅ#XµÀ›BO fÚ'Z'±ÿ€—öÍY…ƒƒ\Z`S÷QÏ\o•Es4AAhi6"}¹ÉÚ‚f¾ ׌;€8wÚ„¿B›¦–mã¡ñ}<0–IšHâ&Ïs«CÅEHuþÄôcíé–³š4e)5 æî šm�öcÃpêF7E‡œ|D‚iR<Ë`¿Å�¶7€!{Núâáç!e)Ov”3:/I…ǃ9BaøñƒŽ wIc .B/È…Hq™J<$¸éˆ¼,0I #we¬ š +öã†w3Ã5ÂtÒI2fŽttÍùy_nÐÀ +#¸í€î»¦öâ +.ª.Ã-pëØ #$qï3þH&ǽe> cDèŸ×ëåɧ9®|fVëM‡qÙpx RgÆ°ã‰[é8¡è)=˜¡&#ÿÝMë©À /«ÝSϸtý9ÎP®×ÇüxÕî'‰Ã÷á«õ â¡üº"aÜó»rOÂ!Šð²2<\/)n`Æ>ÏÍ5XOù¾3Vøz-þ=i —¶$ǵÆÖÊG‹Ð*I¤#ˆ=SAÛc"X^“«(UË%œ·¢¨UÍ‹1:ÌÃ?n3ÄGÂM]2®„G^ŽÜû¬ó +²!øðBÑIä×ä"#GÆcŸ[ +2¬ˆpîw…z1“«~&{N|½Õ¥ÎåŠá›_ï¼–¦J(À¿žÆâÞ§²¿d$-q/?2‹gƒtš‡v#©eÙj_<_7R|/Ü´š%q¤†xÝö&b¡}6Ž¯{ç—ÚLìúÆéy<ž•íþ¢µ&ÖplÔßdBb²ÿxØœÅÓ•;w¼øùOvúmù‰íÿ¨ÿ—TÐäbA”ø² ¼¤)^U‘/뺮!IEõYó<—ͶѨë‚ÖœthX¼EÚÈµÒ _ø|ÿe<4ýÆÂKò¤¼™VÓ7$Ç»Ä;b¬0Y‡$;Ú> ++ñb‹x£ðÜ;¬¯P./m¼&¬ÈŒ'^7‚u1zÞà òŸß’Ybù?ŽIþR^7x£¨J¼$—d¾T0u>/+&RÊeÍе産!\N[ÝÇâX¾¿{¨ž‡ñݩ߸-Ð]\M¿·í¶”zTþWys©Vßnè<Ó{‘ÿWöÿPÄ'ü?ØüÈfÖ +—M©'ÄsÞ§ÞÝDÂ]/Âoˆ7çúÑ2ÐoíX!}½e`o¤Sv/ئ ’üd§:Å÷ë}Ç_mí1Ñ_¤ånbaÓÂ’ýî$龃¢¡·q9éËÆùJs/ÆR’%AX–†QxÚŠ0Xi4¶›ÂÅ·û»æíÃéB‘¤žž—ÏÚCQyö´jitÞvKæzÇ€0`À€0`À€ÿ_øüØê«�¸� \ No newline at end of file diff --git a/core/tests/fixtures/config_install/testing_config_install.tar.gz b/core/tests/fixtures/config_install/testing_config_install.tar.gz index f4f067063c52..8e2ecd3d44c6 100644 --- a/core/tests/fixtures/config_install/testing_config_install.tar.gz +++ b/core/tests/fixtures/config_install/testing_config_install.tar.gz @@ -1,40 +1,53 @@ -‹�pîü[�í}{sâJ²çüíOÁNì„g"N¹õ~8NÌ^ÆƘ—¾ç†¢$•@ —õൽßgïÿû æ‹m•$À€mè>4>sZÙm©T”JRþ²²²²2UËÕ&WjüB¢@Ý6«…mýåTDQ”Àq9òWøø/Å$ç„hü/G³¬(Ò‚H³bŽ¢†¦ÿ’£NÖƒ("O»@ûÃz¸ša|p=y–Üúï¿ E‘©_çDÕ8‰UUpHÊ0 i%‘á9FÕ.,è5WG×9ÿÀ¯#Œ‚ë\èGèBGrtäh& -®/r9ÍusHŽr9Aˆì+9ÑUÌ\¸ÜvõÈBÛ5ðI8Bö¦”°ã…¢¹~\¤#FV¨$+#Œ®s¥^¾ ÞÁ¼‘¿G~Þ^t¤SÂËÜÔ"Ù¡šZõÉ+ù�Ô9í‚<è+¿Hn–ÞÆGCÓuð™©#úŠaúAx1Cæp^çèÏw§ø’s"˺ð¬hhâê—I×òpJŒ¢ë¸ñË‹�…¡éã÷Aîü~Í\΂*²®syrn¡CÜ\¾¹éú ÅUÝ<.®sS30U‘hJÚ ã7å…øÝPøÍ=èè -´,ÅÄ àf@+@ñïLËqÿ;—û?ŸÍ‡}©{ò_õ1Ç`Î=Ýp@þS"Ïùe>ËÒ"Cä¿ Š™ü?%ò_Ó‘NÓ$–Ò�§AH‚,�ZåñP9êü7ÈÿSIwã±Ú¯dº;/Moj“eñQz.pf…ò‹j#fº*2ÙaĽ’î+~[ÀÄu-Ù©÷${*®W%"{Oª¿]k-Ñ/ÛXêæVW/é—©H ð˺ék~Uê@òd»¥®´ü8¿|-jd -N"á_`™ü‹"“ég¡ÿª$Ò†$K€áyŒN€@åhº -UÒ/É߀ÿozÓ0ìÈÚK>,{öSð(ÖQ9%çÆœN]Ϲw -cKªÖo^}‹SßF;¾Kˆœ"èw¿ÕÚ;p«ÎìMß´¡¿ÈÅz].µ zòÞ†ü'idïá?„Áä4è?ÿÜîø/r4•áÿ”àŸç9D±dž‚€)@^å«ÄhˆÑ8ƒû‘ø×�%¨êõ8àƒª=´&"çyÃNOfoBÜÜ—u³û\S¥ûÁþcN=ýÌôÇm}ˆý×5ÖÈï@58æ¤V,%Ö£w€p7õMÉyÁ[øž×þC <½«ÿ3L†ÿ³P‚IÒeCâ ŠH¯²@†ª�4Äñ‚UC¥ïÖÿ±zêPàZVÛé´ù¼Z«”kR FJmÜžh[ß'_ÖÂiÝU¶„ÂðÛl;ïŠÒ魯w$Â^…*PtÍñ]sQˆ±ÀEþ¶*¾–w:ç’ûø·QÀ!:Õàÿ—cð/ìâ_d¸ÿç ÿP…¼Ì³<Vø±àC2àA`T 2<?aþÏ×êú„5¼Zu®Ìç…Ž¶d:4]zàú7]úŽoï,©ôr%VüÎü£Þ"ÈGúÑF€U‹vj½2Äï*·º~¼àB`ÿ¡…N%âŸÞÿE&›ÿŸ‡RýŸ5ê4àyÿ”ÊÓ5C¦ †æX$þHý_ZxaÉz~ŽhÚ]rN“Ÿ¾Xç—b¡æ˜Î艩ÜÓÃW@ßpê‘ê?û.Ð7M½ƒñ½ -xwÌÐGø¹â:ðéþíã?t]넃ÿ_ŽXÿ¥ö×…Lÿ?¥öUà($1€yp†FÉ`yHçX,N²þ3× 5„y±aŽô ºÃþ¼%CªD+ž.Mçõ›‘QsæýgMFwãà•àHzqŠ9«ºqãGÿ¦5×’¤Aæ -ÁQÚÁÉÖ}ÉÛ½ÒñôD1\߆á®g©KƒÓI€Cã?+ˆ»ú?Oeø?¥þ#C J@`ñÐÏa)$Y“°8Py–ÒCäØcñŸðÕÇ°'V›¯ôúþlù›Þ๜„™6—ºL¹L÷E¶aøa'˜FÓÄÞ¿bÊ‹Õ˜[Ž™•º„wÉ_y–yyA€…ô´_C䘖~ÉÙ_ô/,Vî®qµÏ~íÚÃÿ(´±œÁç›ÿã¡?[ÿÿ$Jõ"¨q4 -Ïÿeƒe1þ $s¥bq|Rüß4ZVØm5í¡&t[Œ¯Ýs}S±Pñæ~ÌG&Õy4£GmЙÄø_3åZ�Üuj¹.yò`=Ãù!zÿ¡iŸHÿ÷æÿ<Ïfø?%øGÍÒ*ä1þEpH€@V5 ‘c–’¦©§ÄÿxnÙså±_ѵiÍ¿ 7Ñžç¥Ûî“ۨܰm›©?>[åèfÿ„)÷e�)}wèÁo<ì_läß¡·ño»N8:™ðíã¿HSÙøJðo,kèxêo ã_b4€áÿ£D¨’$«üÑþßÇàÿY¬FÅôôN}ú ¹VõYEÒA�¤òó¤SªÃú¬L¡Úÿ1Snƒ¿FŠ>Ð�2´¢·ñº±ŸÐAüs{ëÿxšáÿ”ÚÿxAOýiU&ú¿TAR ëº."VÅ£×ÿŽÁM\¼˜Ú`Òe…Ñã‚÷dÝÏÃÛBÁº%º±ˆÆe\Ð’ÙçWãÿþØßùhÜül¼?@oã†Ð €ß1ÿi>Ãÿ9(]ÿ§xVäU è<±ÿ³´$@ ŠAŒDóÔIõÿYµÄõ÷I™•‡Sf:¬p¶–Ï—Û•¥¿@´¸˜,õ™ï佉1ØàŸ0å6þ{¸äýÑÿ·^/Cÿ!zÿýsâŸß÷ÿÉìÿg¡ÿRE j€PÖ0þ |¤óÈ2(¨”†ôSâ¿1F³õåGõ©Å(Ò¸qWx¹Çáà5_úâÌ3ê·Cµô_ÙÿSnã€KÞŸ÷gcÿô>þ-§Y8ˆ~güg(!óÿ?%øgC]Õ,@Œ‘ñÔëÿ¼,é4%i:c½ÿïüóOœÕüjó¦Yœ¸ nà5!Õ)•Œ>4+wFgiÞ‡3Ëîεmü¯™r_Kñjà{![xƒöðo¹§ÜúÓ7ãŸæ³õ¿3Qºþ§©œ&‰* Z�/âñŸGà!’F‚”(Tÿw‡RÐë -ÑúP›±E×,Ü<‡/íŨ\(ÛšÚí)³Í¨«îE²÷Æ®_JZŒw�Ÿ8¹lt�ë—\97þ%—û¿G{ø·‘nFöY÷ÿ°Âîþ_¡3ÿÿ³Pêÿà ,¯óNÔY qXÐ9©”ÊH†zÒñßY>ð:æú¸_é+RÇêQ9É"kÙÆľ›X÷EÀ˜²ŸOì SîI€¤ø€È\>¢=ü#×O«�ÿ÷æÿ”˜ÙÿÎB©þÕƒ¢u�Q"‹�"žú34€ŒÊòe‚~´ÿÿ1øÏ[K´X„y©â†óÊ|ÇtK÷ƒ€-ÞÊÒóXX<¥ªm©Ï³tcaÊ=øǥПAÿcŠñœÐ±Plü…¯ÈÞÄ+âà×øãçÿ»þ¿xþŸÙÿÎCéú?KóZlõ‘8¬û‰y€tÁ !ÅS*}´þÿöþß~¬þ¨£y<¿xÐñù¡1jÞVoŸ]õ¹u¯Oòå§Þû 3J¶únñçJ.<®Îñ¢ð&fêÎÂCé^[ j£UÐœÏ~ízÿ©‰f þòŸYÖYâÿ°â~üŸÌþwJÇCבáñø/`ý_Ö PY²P54•Uu–{oý?o?�„›9[~Xqæ·ãg]¼…л粢¡ÉŒn™Ê¼lNáC…w YX3èfG�>Yíø»|CÄÈDÀ.}€?8Ñ6ÀÃúÿîþ‘ç3ûßY(Å?ǧ±€1™Øÿ°þ¯²à!‰,ehóÎüÿDøŸZƒ¥|1äzÍ-Ëç‚òØzy|2ek.–LÆCývVô»üc]ýív†ùï¡ð èk#ÅÄvþ»Á!üsÔÎøÏЬ˜ÙÿÎB þiž¥qÄá—ƨǒ@e@ÉÐuZ#ÎïÌÿO„ã©lÜO•Ûeáñ̼Ç;Õ(ñ};#õ¦Ñ¿¬é£ÎFPÓü¿fеЎsqa¦¤Ãø÷Q€?×ï�ñÏìÎÿif2üŸƒÒñŸ1T9†>$þÿ,ËYt ‹”4ÁÀ³€;þ·ÅFŒ›Ì£ª«wy~Ðk jG*·ê‹_Tí¢Òp7ìsmÿ ƒî -€¤tîÇt†X(xQ69Ø¢ð"œÀúwŒýݵÿ1lÿç,”â_C²„$$JfgˆV,±ÿ#Š–Eöèý¿ßÿÚR~éùô¤;¨Röø1[ -|¾ßšÓð™á£ˆŽoÑCÜþ ®pßIÎ2l½ÿؾª¹¶µ¬Æ?¿‹¬dø?¥û±Â¥Ñ4‰¢ˆÿ¿TÑcPº(Ê¢†~Güÿ#ìÿ"]lç}å¡ÞÔ†‘PÆ®R·èj¾3#-ºåÂM'ß[@i¸±ÿ§ü¹�Åô4³þ}€ÿ³Ùÿ¹$þ×–ý?ÿÏC þ9Jð7á*óà2Ía%�Ñmh”Js¿Cÿ?B�ØJY1ÜÁØvžÚ¾\ó´WìÀû¥ì5èü¢¤+¥`²oGµ�زÿø‡h;Ün& -R‚ÿyˆœÀtOö{Mñ¿;þcÖ³õ¿³Ð©ILº8zœŽ‡éᶩ%±6SàrÃD–¾:´Ö…VH¢ÖQqÀ:gá¥g$x~zìÄ2„í6šD»KŽCÌ”ÉÁlrDÒ£ÙD»Ã¯øb,0Žà—éK:“V< t¹JÒ]®ZÚ-õ Ö†ÁÃÔ(Tjù©©“È®—[³Ii'øÁg´RŒÿ84#‘èøCÇñ -Ó™(îù¾©ÿþHà‡ðOïÆÿgh*‹ÿ{ÂÀÀX‰3Õ¹Gˆù.vA+ÛfcÆö¤éÌÔTPX� ÔÚå¡úRívµ?-fþL‹ú«U°ÒÏÿinwÿÇñÙøòÝ–ö¶¦ƒêÇèG’ÄÂÛÀéYÙº5èò×|nÔ‹mãqA•Âɳ\]Þ©¼”¡ÿß‚b=î³ñÏs{øç²õ¿³á)²¢ÂP)¹Ähå ç~BuòÂÒª»<ƒFæ]ET+7͇[“*^ž§MýÆ‹##¢2!ðG§ÿ¡ëã¹X²î§ºúâ¼ù¿˜½ü¿tfÿ?¥ñtÚx1dý€ÌR< XMÓ%žâ$æ[òÿ½±þ—’Iý!OàB×_½h>ÖòX”ƒ‡_qKUoÔf¹©(>UîÚù¢ýôʈ°ìEÌÊifܸ 5k‡›eÀäôB™™!–x‘Mrñm‚õ'S ´ÿIw·wiÐ×M&ôé‹Ð‡N`ÁªÖÊ¢{÷AyÈÌ ½ã*q'WïMÃÌçÚJŠ¾Õ-Îúý‰½äÿGÄÿÙõÿç˜Ìÿï<¤£@óM�âÌ=k€ÄŒç—p†$«ÍH¦–ÔÒMi˜iI†›/ ^‚/„™¾JÁ… 'H‰œ(@ºbC³·®Ë"ÛÃüN~œðûÇò€‚µ‰Û8pÎ+á]E.ÊË»�T9©z/TE¾y–ä9 u˜¾ƒ“íUºù׳ é(äóŸRÀ?MS{ñ?96‹ÿyJÇž“Ãé€ç)pº„¨†(h´ jwÒø_õJµ -“™5Gõ -õ>2%çÑívc˜oés±%síjmÜW[É€~Ù!‹T9Õ'| ·^ç6ìºÎÔCS KÇŠHr¨Äჰ ƒ^ª”Ä{÷®Å—6¹w’ -qáÖÓ’‚×ùÄã -Û -ÄúΑoíÝ—}Çv¾²Ô"³¹=ŒB×Ûë@\úû»ð©yË2: ¥òÿ‡j€‡ô?†ÙÝÿÅáú™ü?2+)oÈThÍà"P‚‘;SÖõ´‘kjè8Ýl6Ç5¶§ÅÊy± tfŽ©tµgÕFþ–S}Þª„ó|¦»}–éS°+ã„q_Wtÿ»ö_ža2ûïY(Ñÿ•âž|ap²¤‰–9±F,k|cþ‡XÝX;g—}|qt‘Ìã<‹Vè¿Ê®¸mcùìwò3Ñ.þ#G?¹�8hÿáwý?yŽÊü?ÎBiü7Ê !K�"² LÐ8 ñ cІl,±þœpþ‡ê}Áz(VKp ±N±6b¨Ú�° تj–©D1¥j±èMSoG_;zÖ]'xÿúoÍ4Ìý÷å{B…ÙŽûÙïùJ»ø_Îß^ï·è{ðŸéÿç¡ÿ*/²œ!PÀ0TšÄÐ�)hÅP’D 4þ#Ë‘ÑS%4¡6d¡†æó¥rÛ™F³Êx +ÏͶAØOâ¿a®ÜÂ?ô<ËÔȢ˻øg3üCküÛøþ ÀAüïÅâéLÿ?áÏNPz鸗×9G%NÙÄ/ÄÇKŒÕåŒ Äg œ -’Ë`4Ù)°Ý q»ÄÙi5îh£`Sr`½¸ÖCâ âZ<*zרG|ï¶0tëÏÍŠé,Û°QoÛÁŸØ‰ûwÐÿº¡ ðäðúï®ý˜lü?(Òµ_úÐFñŽW\¤ëùÄèçÁp¤x>2Ì9ùA|€ÒÅÿîò’ÀÔµ¡él—ȃ4Ò• 3DJ -énP³Ò©Èá“Ð{YÚAGkF³hò‹f¯ßžçëô=hƒrKÍÖ€¿‘Öø'+ÿŸäÿ¹ïÿ…ÕÿÌÿë,à` yÅt°0°F¾]œ†VÜ.$K™ R#?vz¯©W£Ëõ«Ía«VYÒ†¾ZÛ\Uëf¶w–mWßû!©®Zn—‚ÕrñáʽÑá£ÚýXhé/nT~y -Pý¾>½î :WM§Ü¨t¢â|02¹ÓèÔ[Må3}å“yŸºþGSÌÞþO!ËÿpŠw_*Aè'Kúñ\yåÔˆä-3ŽÏæÇp -w±/°2‚õoS Gn<U|d»¸Mè`-€pÝ+àÏ°ÔÏãožïŽq»àoSâ:‰µÑ¿Ç(Ͻ|õ£�ù¸Š²‰õ> -C/¸þòŽ+Ý<h]¹þ0öJ¾¼êXðåo±ÛÚêV_ß“ì…œùDcI|6Íåf¹âõUÇ ·j¤>‘§XˆÅË’Tö‹`µ–øl](ø’>ØÆMâ5*+‘”´ü±ÒÚú�Ý�%ߺéëÏŽ%j嶂'‡ài™T&^³ÐÍÔ¦Ÿ–Ò@jŸêÿKïÅÿåXJÈäÿ9ˆh¨ÛÄå#ÞN”_Ó¨õ‹mßm<´•’¼Ñ¸Á½°‚ã8°Ö«wÒüæåyyKw3ÁòǦ$äÂŒ-èñþ<'·§µSÙ‚áÏövãÑL–ÿç,´òÿ EžÓuÀAÿO¤ 3œ%š�9Yäÿ/äØÆËlÙd‹UËÃa;èUë¡:«Ùʲ=껬ƶ+øázÓÏ6Ÿ¾JDJ_eØìþñ¬hhE1Yë¼ÞjàšT¹ÜÌf“¥?½‹ëø·n¡©M§ñÏïÅÿ¦…ÿg¡4þ—ÈC‰‚"Ð$’ÿ©E éˆ1dÇûÿþƒ†Ê÷íkÜz½Éô‘ê ê‚2ª½ŒA§ý©:õ'K^, µÁÿ>Ÿ®…@ _Z‰€\RåMIð^;?xÿ‘s: pÿµ‹>Ûÿ{Jóÿ,ž2Àq² -d•Ó�#ñ† -ÿCño•j²=Üæ#©=“üDÅ×öÅEŸjú¥æ| ÁÙDêÂdÿ;|ú¶XU: vÛú¤Àø÷|71ÔjpxüßÓÿY>óÿ<¥ã?+#ÈrPYŽ#I@y`1L³‚ÁèªüCñ_§K…΋Yåôª[ç<Îí1cª}Û[húÝ"ÿÐEr 4O’7évøtüfR¼èâþâã8Úàû`§µŸû„Þ¤£ÿñ¿ÿãŸÍÖÎBiüo(š$1À€ñÿde ³2t—YU£E‰C?ÿLAŽÊRýFa½ÚÖ›ùÑ(”zåçç[ºyß(Øs -nuå•þ¿Í§ü'ÅGY�¶›øM�oà?€ÓSZÿŽÿ÷âtfÿ?¥þß’Ji$>4’ÿ‡�Ê4žHRñÔœÓÑ;ù?Oƒÿ‡‘¸ÏÍÅ+À1Æ0ß‹·œú-%¼yr‡A¨Õ‘îo7é^óéü7N’ØG>ÖúS}(^5ó -€7ð9'žžÿïÆÿ¥Ä,ÿ×y(Íÿ-0¼ÆÊ5JœŠg²!"`#éšÁhƵÿß¼pìQ£zu1œXý¹Û¢F±S[sk²°ÇŽ3ZñÕø¿Ë§k!ðˆlwº™�`íß>j -°×àO ÞÆÿig�‡Çÿ½ü?‚˜ÿg¡ÿ†d0Œ¬Q24ÀiPP¥€¤j”*S’qôþÏïÁQìK#¹Ü³f“–¼àm§ËÜ/‡ð¹RÌëšpWV›Oêh:¶òƒ›-ü¿=è®.5ØmæçR¶ñOR-(q"%><�8Œÿ½üŸTÿû<”Æÿ’T(²HVýtÀ±d& ª,xJb5JœúNþßÓäÿ*-Þ²ctF}š*—[3ÀÊòKÓ¸Qþ¨?lùÕæS`çÝ{nþgŸO× @®äÂÊöÄ¿ø{ð•$ˆû´’ï´öSH€7ð¯AGCÖ ÀAüïîÿdh†ÊðJíÿäZ‡@`4p£‰0þeNBÙ +ÿå{ðïLýY-›Ö²0µuÜý–S.y…¼¨ -Ýq{Ôn‡B½ JÝ þ÷ùt“,¾´/rPÓÜÈ ?”o´ûçoà?rN¬žÿïêÿ4—ÍÿÏC þu -#\'®?ŒÌ`ü*(A�,¯B‰fyJFßoÿ?ÿífÐíì£&éô‚¢Ùæ«=Hc$Be1ë÷YC|è8â„Úàÿ >}5P¿Cx«Å?/ôcZá? -G®o.ÑØpÿ´°ÿâ³õ¿³Ùkï420˧ØÄã1ɬù1d—«R[6ý…u3,?Nµ†ehA¿73*å¸Äiczò¨ÃlÀ—RükþJþù—#â?îúÿÒEeñ¿ÏBáÈGÁȵâMÎ>z‰LÙÈ e}Çt†×9üI$ŠÚ½Œ|ßõIZ�J(Áq8Lj|s&3ô‚¾iåº,ÍË,ò¾ÍÓ^´m¿E$êÔ “?žRü“í©Ÿ†–ÝÿÊŠB6ÿ?ÅÓañ -®q¼ÃôƒlS&»”CÓFK×A[•n"ßõЗçÈ7µÑ*Ko¬ño„xE’MÚ«-Ó¯Z:HáIîF~Ÿ¹mv(¾Þ«ÞÊsÛk½”o™Îã4Õ–¦>{±çº™ÄøVZáß4ŒÏÿ©ÝüŸ¬Ègóÿ³P¼B6ã9X¦ƒÅBPrf]„禕–}UºÞŒæ=eZ“¾ºŽ¥lÈÝÂ]HYub›A/‹8ðÇ ÿq°Oÿ÷òÿ`ügóÿ³´,w¦˜N€´ÈGJäY.$ùé’qzjEK‚Ä+åÚE´„dÛ¤òúÚÞÅú\±áÜ´#[‰ÓÚ1´p0³pÈIÃbW.-ÆXeÕ|£òr÷°=PÅQÁê…/ðÍ…+‡RfN8%¥ø7mëfxúØï„Úÿöü9>³ÿŸ‡Æ*/QšÐRän‡wÆäþ¾ÛÝ¡2åL'nÑ|xô«ƒÛùðîqÜxœv¸2ï·2˜þ;ÐþpÿÜ^üGšÉìg¡Ðu‰‰gáCýP<ÃÈïÝÁ**ÀN—{žÉ=¾Ìò¥1݈Œò4ç>==ØÕúnªàÏ~ÄŒ> ÿ©ùösâ¿Òü®þÏqBæÿ{ŠÍøxÒ?%Ëæ#ó §nÄg,-™)ÃùØ/ÖÌjQÒÆyCÓç"3£—º!ësf)Ýþ(Å¿ MëÓæÿ´°ÿÅÌþÚŠx¼6É{#O!,q@øƒa(F£&4šŒ3„uå¹Û,G‹ -WÕo¨eW¤åC½m-«îM&þ˜´Á?Ù)A<ÏŸÿ‘¥öò?²Yþ—ó‚ 6Ò]þ BœCA˜Cdãläô¹×Œ‘«»Qï:ñ5…¸Z.ôÿõƒœj"'ü×ÿ¯r5äk&¹>uC‘Çøþùå¶øX´<óµ¾iøeQ¼½ÉçÔmK0{iÖÇåh JrÃ\£×¹—2iò;h…äDW©sôÙó¿qô^þŽËæÿg¡4þ‡ Ãò@†4ñÿåt køTY^¢5Š }Êüo5¥0’h7(-º-nöDÝ»J]/Ô_&Ëš$ó1,êå±l;³Øß7åÌ{ï+_þœïð×Q™>öÒ½|0I€‰b¯“@ĘxôNÑÖF€ËŸ=KÜþIèOÉÿ¶—ÿ‘Êöÿž‡Òø*Æ`€(Êp:•æX`¨Pã8ÄӼȜÿônLfPºu+ò¢Ué(½a剙võ–PjkwÔkä¨çÿ˜3WèÏ“ã#vÉßþë‹ë!&Ä‹aüôH›^ãßp]<üýoþϳtÿï,”Æÿ‘uDSPŒ@±€3t¨£JRUC’xZ:mþgqá[=~)/õ!ƒ -‘V`n›/ýj»Ö2îd«ýØnp%µWóe-É$sæ&Ä—‰u¥á<¶@›ÌbLÇp};–ú?¤×ø's½ÏØÿà -{ëbÿï<”àŸF´Æ3TIÔ�'q‡5IÄê?5Èœtüo1nåiBl{<¿ï´ºxl•Ÿ -yÕ[J†9�Ç•büÎ|Ú×trœšÃào -€ I ÿ½Æ?YþœüÏ{ã?ùÿ‡üË¢H1††�”5p‚ ™–)€†×eHñšpÒù¡XÓ'z¹|„wuZÒ_òJ1ºmŒ¥|ù~Ú™‹…ª¥H·Ú<ÿcÎ\ €Fšølõ±E€TK ÿKÎ5Bäà‰ƒŽUu‘nIÎDÁ.¥ø÷kLŸaÿ§©=ÿžå2ûÿY(Îÿ˜d¦;öm8Oüv©-ˆ÷ó{>ò|WCA°ÞÏ3\š^zbÀ T8Š#5·Ó&é ñ.¿üvõ÷ÿuÎïž3ü:4¯cý¯áW|ƒ¯ãà«©¹_ƒ™ñÕ°¦_µ¡ùU…¸¢õU·¬¯hŽ¾ÂÀûÇÿüb’DŒh®Y þ»nøn8Ü_c/¶ø‰þñÛ—/¤ú(´‰Êðëÿ(5ŠAó&.øç¯éÿêÿü54Cý÷?WwÃ\Ùý×/Iá¯_’*ª«/puúŸ¯jà³_½vF(Þ‰bgì>>äþú¤kÍÍ`spuƒTÏaU$™ñâÉO±ýâáÆ“f¿Ä¹¼ñª1Z(Ζ©l6næ^f¨ƒÖ*ƒ_¶?VÃÎw*ªŽFFñÅ(–‡OÔKQŸÏ{£Ùdª…§Ìuóç¡TþûÁJþø—#ö1{þB¶ÿë<¤ ã +‘¯ªË<²ƒdc˜M<Di²|j¢™bÇ¢óÌ·¬èv¬;±^Ÿp‚72æm·»ÆlH©Á¼ ºETâ,ù¾å´¬R79g£ÿdíÿÓü¿8qÏÿ“Êì¿ç¡4þ#Ô(]€2à5H‚@Q<4$MâUÙ ¨©ìEš »ƒ:Wqˆ2bå:Xõ1áåñKWjþÍ¡íYèJsí‹Àr‡0‘(+“£ØøœqéQ ù:÷…¬Î~Á?1‹$/-nÃZ˜ -d_Ú™ÃÉ�N";‘ÍfD:QÛÒh%„¾AD-úP¼Å'n}>Ò™Is�½üTuÚÓNY58·o6nNåÏ"¢RüÇɯ†–«ÂÓûÂ?ÏìâŸç¨lü?pŠ'_NµÍ´Q-žG}™:ú•mj¾¸FxEjóÕLj|ku Mì¨dNˆ`ùI48`2&‰ªæ™¹°žÜl]ÄS#Ó0µ4ÔZZcÕÃÕyûy«D(`¡á^ßÅEAõn"ùË*s[{uÃÍ#W+û–%µÄá-îžf1·e~ìôeíß;LÍþ?kÿ×nþGš£3ûÏy(ccŒ¬ÑA^Èä�<«Åóõ~M^µÖêËû1§‡f‹Öó“Æ`®—Ȩ |e2ù·†ÇŸžHð«�…D‡ûQ&€Ãøß[ÿe3ÿÏóÐ:ÂCdÛ$pƒ…œ!>Gl(LÐLÅÇB£Ê*°_kžäIâPÕ(¶>µ‹ü°ð°lZâè)Û öÇ%¢H]–ëþ˜Ð1´ÿqüžýÊæÿg!<ýW\ÇZ¬”hÓSRsO‘“™éèîì:ÇkÝ«ËÉÙêú11^º£¶DMº-«¶ÜlOç†è´êH*õ6`Uéµëõ~¡Õ2‰q&ŠñÿCwÄ¿Èñ»ã?þ³ýŸg¡4ÙAŒSß&Ð%«’×¹¿þgÐQ7Ï‚@lÿõËoÎoN~µÞIvU$¿Î-È6°ÕvŒõœŠ“³¡Žr0Ìý'1._Ç-\‘n„¯-ðD~öf®“þÏÞê›Èø/âÁ¡Y¦6ÁZj²J¼<r®ŸÓ\oA -¡£ã‰lŠÌ™aÎtpïâVUß‘'!wNž)¹'Àÿ)¬7:7×9²›\°·Q×Øî•™,çúhŠüÀT-?KgÝ4÷LøÎøPNÇHú„3"}š™–…_çácq“q—ô¸)�r¯_U.DÐþ+þA¤Ž‘FÂræÓ®lõsõ5ü2Þøf;€Ø`ƒ`æúº‚;‹ÂoýàñâÍ4«vâ?Xî¼²S~_üú Y -b+òú;o>~92æá^ƯŸhˆ<]Úr¯ø{‘Xˆä.äŒ=$r³òQ\FZ!/#îÅêm\å*áš "ÿ8n¸üffxDø;iq0æ\ü [NÏÇrC’-•d;Hlí>"¦ŽâŠx»(Ül·ÀwÜn=f„´EüôkþHæ*÷gæƒøÅß?\o_ÿ%þiÜ8¾9ñ™y}ßÕkÜtœÔ±xâÞ’pœääI“…™ä¡ã7ÿ›³ºÏ5yÉ›Û)gœïúþG|Ÿ¡WÁüí»Sh)iàðcøª3‚øË–ÉVÅ_~[dÜóGåž”Ctbµ2øvQD|Iq×ìsj®ÁrÊó¬t™!þÁ+¾Æ_W‹|KUüeÓžäV=¹Ê5È76_qÉ%ôú“øHCdï$ÒBDÔë8%4˜ó^ j¨ºnóðúþ²Ï¿ÄÜ”4—¾×oÔ¾íkäþ¾~t"Ö/à|¦dùøcÅï-~ûHßyóWè!Ýc¾ýÁ’ø0lj~¦G{ƒ×ŠÎÃ]«ÿôÚÎgÉ©ô€Ï“W¹¿¯¿a$5õ-ÿF6ZÏwvØ(mî=½Ëæ)’ÙÅécÕÞ~ŽÕmþñMaF*½e]ï>õ™AÛ4¬¹Ûî<TÌ—Ž?V–êS£Ç¾ä˜÷µ?§*¶ÿø.žÎâáÊYØntúU ƒþ_ûñ8![ÿ9%þ_Œ.#JB<€4/N6h ñ4ÄS*Ïóš®ê§Üÿ3æ—µ†~_x)RjmÚÖÃßEêÄóïÒPaÊý»—‘áÝ/Ý4þÇŠ7×›�ó«’8œÇeêFö,˜Aª‰¤mù¶XÙŠ½Q@îK,›äàŸý >“^á?ÂC¯½v1è þé]üŸÅÿ8%ø5Õ”xÊ`'ñÈ-�šUuUiÍЄSâ_¿§˜R½=æ_„þÓsþ6ˆžJÞ}‡HÁ¤ÒœUýn£áùÒ ’àÿ5ondÀëÒ9@grà(ŠñÿÉþâ^þ/Žå²õß³Ðzd½Î%C*ºˆ½0JâÏãÛqC\ûrn/m¶ùm-*¬Š÷&Ø;V¦uV°Ý)ÈúÂ;vêU{[÷jíY˜’«ë×¹©‰§®ŸJu½‹ôñmŽÜ4äñ³ì¬®(dbîFø…HGQ›«Aè§~6ñ¿aÂ2ciîÙ\]õ'®ŠÐóC½mw:ž~oNAuöÜ`nh£Ý®R?¥<Ë(£Œ2Ê(£Œ2Ê(£Œ2Ê(£Œ2Êh›þ?¾¸-m�h� \ No newline at end of file +‹�¬ú,]�ì[s⺲€ç™_ÁÛ¼lÍòE²ì¼q !@ Ô®rI²ÛÛܲëü÷#_H3ÃbÖÞåNUbdÅ6vVKjSwÊ&?hò;ŒH01‰å9þµç~;–HB4ã¿2FÒÛ¿±Èâ盬ªË–UüM’Ò´oEéhWð…Ìão],~£<°œàózûöÿ—Ê|îXgE¬©ê*S@Ž1 Š,¢cA…²‚Kü!›Zü¬hq×¢yxVŒ‚9/X|Æ}‹ûÌááY¡XdSßv†ñV±Šá:Œ¸÷ÃãþüG¢\¢Ü›Zs—¿¯!>D#îmJcu,˜l$E·ÉÜÌôà戄£³bõ¡TÆ—¤d—®xPòÖ]½¬4€ö´rØÜð¥[Ö¸ŸU�Zâ/úFÅéɲÓ|èL}ñɱ8%i;A–ÜŽ¢³¢\˜Ó…Øœý¹ëfî|èˆêßÓK7ã/g&%ÿ^y9þ0¹ñ™?¯Y,º„r÷¬XŠ?;aH\‹(ßœôõ%UMË g.YŸNèP—Ç;ø">†œÜ©Y$î$6ùjF|Ë$®k:â�âÙÄ y!ù?Çu"qŒÿ‹ÿWøÓz˜ËŸºcÿi 4Fhîñš€=ö_ÂHí¿"‹_2V„ýׄÉÉíÿ)$µÿÌâ–,3tUb�2B®)Ò™@•Xè'ìÿ±¬»Ýi<¶Ê†Ü[UçÍÉs¥£Ê!YÚöD=®£)åŽ:œÃ7ÖýE?6ð#N„E}µìÒg–=3×/KMöŽUÿ¸Ö«Eÿ~'¬nñeï÷ƒLúw)®7¹Š6ÝépšÝæ7¥>‰¿Ùvi(*?+?ÌÄïò/6‰k·AáQŒÀ>þ5UÙâ+8÷ÿN")ÿTDz:PüC� +0‹ +‰,!Ýø þô[ÛöÚ T¾{FQmüà݇ÜâáܯúçÎb1ùW~yìêÖùÐßiêÇ´‹³DÜß8r@þøwGû÷êl`¿ ëbâ׳Zï¡ïÂÇÈÿ!ì3þ#NŽCÿüÃök(çÿ’òä’ +%` ‰�ˆ% D°ê +ã +ƒ6ü;ùg@Ò(=w;}6¼¡;Áp6võ<‚àüª¶n9½A“êWýþM=~eýɱ¾dÿmWò»„†b×J¬Äkërq™Ö¦ä´†à#þ‡§ÿH’·øGçüŸDRþuÝ2l)€b®ˆ¨ +B5À8DšN¨maý—ýáž¿b`Û½óÊlµj4ëµNSéÜlŽï&l¦¶ÆCÿ>`À]ûíËú;£0ü¹ØΧ&!¾îôpŸX„ +W 2õ}¾g-Î#ÁrH">Þ»Ùmù$ s*+°Ë¿ÇÃù±ÿo‡ð¯m·ÿª$çüŸBRþ %È@*¿0P±)0dÎR4M¡Œ(H% ÿš-k¢Ú³fce®Vå.{Vº²\½†ç=ùÝ /]½öZXzc^ø“þ¿ ÞÉçÖÁA€—#~تõ&Ü«âËþÃÃ�'0»üÏÄ5š‘¹üX`/ÿòvû¯¡¼ÿÉü3™X2@Èí?$ H¶f¶!ÛŠUŽÿNÿ__Ï¢ª=+¾æ‹Þ3ôoÑÂp9ZµŸ*å¦ïø£{¥~%߀¾ÑÔÝõSÐ7‡ú„ñ +¼»Npñ½’:ÿðîþŽìòM§îÿoŒÿJ;ã¿ššûÿ'‘,þO5(q]*F€6“Á T¤r›[Pæá(㿉rÑCXUnœñµU–Aoø¸jDªÊæÌÒ«ÖùÈnú«ÇÓÇýÑå8|c8Ò«8FáƒQÝäàÿf5_-ÉMÜWòŽ6îßݖ螘ö4ðHôCÔs)Öàx`_û¯jx»ý—PÎÿI$›ÿ¡+щ4U4ýPXa Læ€"Ubš¡z(ÿ©^}-ž¸w¨þð,ŸïÉí¬?¨•BmÉVzO©ÕäG¬ÞØAÔ óEïQÊÂK›[K”5ntcÝÿ|æ:ß1XÜÊ®kF¢ˆ1¦Õ½¿¬¿ú¬\ž‰jú¶ÿcd‡ÿQä ;# +"Ç;R`?ÿÛþ¿P@)çÿ’òÏmY•)A@²1k”aÀ1TUÒ9cô˜üWvÅ]êǺÅÍà€‡ ¬ª½ûéMý\½ó”VgàÖæ)ÿï”òÕ\v›×ÅjVú)ú}àëß]ýYx““¿%ŸóºøŸpýóù?H²þ?$œ0(þ%@Ö�QUÑþÛÜ€ŠD‘xHÇäÿü¦íF½ö7dZ¯ì +>:¦Ë+çWc4w¤nÈŠ5¿ÝÉ{þwÙÿŒûûœö}ò1ÿÞÔFG3�¿À?ÔrþO")ÿ¶¦ª¶%ºþ6×Dû¯+ˆæ_ü’0¡¶®<ÿûþ¸1¯ô–MóÁê¶×lêFóGÕÔ-½6˜t[ZcØZÖ$ÞÜðŸ(å{ÐŒ‹¾°�9ÿûäcþçûDz—¸ÿWpîÿŸD²øÒ,¬©¢ë/S#nÿu@5Í°,s•a|ðøß!ü7ñúÉaýIOÕF5šVP"å²3õªòÍz>®‰‚¶¡Þøÿ»¾÷+¿?qøs|Ìÿ’ó#�ÅÿrþO Ùø¿„TŒ¨,ÇÿUÙºAl``ÑàŠ.#é¨ýÿe£ +Âé½¹¬ ÊbX‡+•jwõç`Íe¼ž<[ËÀ/Í&vì”ïù%Ÿ·þÿ~xÈéß'ó¿æ$py'°—´Å¿Ï�Èù?…¤ü«ša(œZÀÐÐRáú‹öº%K:³ûàõ?‡ðîgdÙ·ç·•Éôög·DêVk7Š5tê—v÷Ù¹Š–®×[± ÿï”ò½!èg»’Ñ€Ï,Bø@>çÿ”í?ÚmÿsþO")ÿ§˜!†à_µÅ–…FÁ¶‰F%Æcò3æ§=4:ô¾˜úøæ²|mÀΰÍoŸñrf·.†¬ýLÞó¿‹ýçqÿÜ÷?@vøw§Ç\ú›ÈO·ÿ2Êãÿ'’,þÏ(d:¦@Vd @„ÿˆk�nhŠN$¬ÕÿŸõðáqTž_ÒëæRLòù`<|º[jåšÇhïÁ\^3»E§…tí?|E¿š1)ÜjðÓI.àþ«X+ŽÿUÌÇý?“þ=n9sï¤ëTm{ý/B8ŸÿÉæÿ@MEÒV ¶T CÑ° Á©DݦGõÿýçkdI +lë¦Þu»Ú¼VšXu={â]NÜ« +P#(¥ñ¿T)w,@Z¼ÇäS¾’þÃÑ4ˆŽë�ìoÿ·ýQÿ;‰dýÑý·%ÙDÃz<€…ë¯È€(TEP²5Í:xþÿ!ü—Üg¾^G%½î—‡«ú…q©ôªWýP\ú`¬;aµá¹t°ÌöÄJ¹ƒRº‡þý¯%áŸû‘`zâ ÿˆ×&þˆ§D‡â6þýñ¿íù¿J¼?çÿ’ÿ«2bIÔs@áûa¸¥Ù2‘Dåƒýÿ×ÿîIôã>Žºl†Ðúš×xp}3º½h\¦tо²&¥Úýýzrgž.õ}§Ÿ/v¡óòY<Ð!Î¥î®g<[k˽$ÍùÓ·ý#où_8|™òïÇ¿ì¹ëž$ÿŠwóÿäñÿÓHÖþÛS°‚Dû¯ ÿß`P5^ HmFUj©ð³ñÿ´½ýÚ�ÄÚ´oB Duu1Xø‚Ùº1|0:ÊèB©¯jÎ"úRty¦ÁWݬ^Vü}ÿÀ$‘›€mù‚ÿ <Ò2Àýþÿöú,«yüï$’ñUÛ†LŠmqüOøÿTÕ�䶎UÉf’òIÿÿHü/Üþs�‚™bæ´Ý�†µ±ûÔy†ä±©°LöuëbY zþ…‚¾¶ýww9ó¿"_ðr°‘鈻ú-C°()Ûþ?Fyüï$’ò/#UÖã ¿² ^Xª* + ºmY2‹?éÿ‰û¾f_-Ì‹çrç,gKjWQïÇþˆžß<^hî¢c©sÂXÃÿ[}õî’ÂbR˜û{e?ÿÅãú°—e»ÿ/ËÎù?…dí¿bS#AŸÄóÿUU†¦YÀÂ6Ñ™f‹^ÀßÛþk•›6ß*jÑËê?´5ÚÕ+ö} +ÊýÆÍ]Å|ìÃsuÐÜá?UÐm–nÒý8þP…Ù<3/ø8 ý;$þ·ÿkRžÿç$’ñϸ¡s]2T�m®¨¨qüŸK²Õƒ×ÿý +þÍgãé!'½~CòÆÒE5Ðãv»ˆ +侉}+³õ‡üSý|á¾›~ÊÙþ9ù˜ÿ$¾Ê¦ÞŒ°#ŒîçmûÿÂ)Èù?…dëÿeMf²¢¦KR<ÿŠm[²060ã¿‘ÿÿ€ø?–+w¥À¼nݲá\«jã:¬·\¹QêNÈÈãë^|Þ-=¬‰>ÜÄÿ3ý|1�•ìcýÿù‚ÿ“Åÿašÿëmû¯æíÿi$åJº&I +Ô@€Š!CápY—m&Qþ†ÿ€ðÚõšiOûcÏ¿¿ŒæŒUa¥K®ÎÍÚìF.«–Y 'ÏÑŨ¹1�ïâÿ1þŸn77{%åq?t¦ÇMûý*{ùßnÿe(Á|üï$²!5ÍI—d³Äö0Û\ûÄsXšk3'.·îZ/›îk¡ÅYë¤$a?œ‹Ê>ÅÉó³m?±!ñÖöAÓlwév$”2ÝŠ™M·â×£y$Îv'´¦ðš,0Éà—%éK/&«¸Çèt`½*nõòqEÝkv!]ãæ0¼^Øåz³´pÌp2÷ZµörRÝJ~ð§Ú%á?IÍ[tñ “ü„®ãOÌé‚cý~&ð}üËÛùÿIÍóÿžF‚•äM5‡eî²ú¸Ô“¢h‡cϹYªúb9ë7)(¯0›wµ!}jôºýæÿ,3ÿK’˜ú/ÉJÿLû/Ãíõ?Pø¢9ÿ§`ºÖÞs¢¬Qýš~®ë*¹ƒH^Ö‚pm¹ýÒáíà¦U¹³;k©MFãù’"=§ÿ¿B?îOóàÿr>þw™ÍEÙ¤$b#3tžhŸð¯&R·Ô.?»)Røȹ¬cZ?¿½¾p¤rÿi°¸µÎ}\Ùs)7ÿtÉø¦è‹¥ã~tjOûþ/e{ü¡<þÉòÿX²#ÌåJ<þ'iÀP%$•1KCW~æýŒÿ¥›q§~ßLàroŠŸnžˆ3 m³S1Âë>ªO«ÙèN…Œïë—w¥Šwÿf&P¬²…D•³7ã&YX;Ú¦›ñU˜K'oîÅïâÛ$ëO»@Ùõ§—û~e#B |’fЗQ@üÐ%¡îKD1™yôºjƃР³ÓùS3¹È—ûÆ„òM=3£ïå'}þq¼äonþÈÿ±=ÿ_Õòù§‹‡,pfq� ysÏ+ ‰¢&ï—ð‡ñ[%dE/8,%ngBi×énþJy ÿŠ•é¯¸RXðÈ„›srËôˆ/ÔÛ2ãÝ¡qo&ô=þçTß¿¶iN¦}Ÿ¬]ÖŠñ|‚ÔWZ£Û˨j¬€äÓapøIC¶?²Å¿3—8¾?þcš‚=ü˲´“ÿS’óüŸ'‘¬ýGÐà +´€p¼d�-L€Î5PkLÖ(ƒð¨ùZõF9Ò&Ks~;jÕ¥§¨£TýŽ½»›a©mpÛ€wæø‘¶iƒþ½RiOàKµõ¬¸Q××7õÈR!UéÄI7Í$}0td–9%ÉšÇ}ɮͻwÒ +Iá»o¼}ŸxRá½ñzæyàîœQ”ý™¶Î“|z{óÅPcesz2¦³HJÿþè{Ër9Ždöÿoõ�÷ùŠ²½þ*JîÿD^Þ¬d~`S‰»$ëÐGÓ¥ùZ¦ã‡ùn5çvÜT¬²ióZ —µîõÒwÌPOФŠµj×£U)÷ÝþŒ¼ÓgsÀ~ØGÌûø"ûù߉ÿ"œÇO"©ÿ§Q i(Nø¢j*€†N.ëPå*‘¹ªÚ?ùþ‡ÄÝxœ]ÄÎQáÿÙ»ÒÝÆ‘$=¿ë)´ƒmxXÚ¼B¡gtX²û²¤Â�B2™IQâeºàÚù¿oÐ/¶L’’u¸Jîn[®n3~TId*MËùEFDF|‘øqŸE3ðvº+îÇXÞû;ùHrˆÿÐÖ^]œŒÿ‡ùŸ¼$dùg‘”ÿÆàhLDŠÀDÈS² ó`1ƒŒ9ýyEÿ5†¢Y+VK`$sv±>aéúŠ¢¨ÍUU£lÎeš-U‹Ewžæ{ÛÚ6ѳáØ9ßýõ?ÐÀƯÿ¹ø–Ra÷yaßû{þQåÿëå«õ~N~;þ:³ÿÏ# þUAâx,ÒÆ*Cø $Z¡ ¦Y#Y’Ñ«ò?rBáj¯± + Έ–Ëõ¸Ò›‡‹ÛéHíAËêPÁ0á‹Våþëš$‡.ßÄ?—áÿ%²Å¿}§o8‰ÿ#þ'žÏìÿóHôg'(½°‹Ï9[%IÙ$Pn½^GX]O¨ °ýø,6’ÛÔdvpÁr.@‚Æý+öÁ¬¾~pNü§+'΋ë$B¾- ÕèãFØÎ*…ù¨ßøÚº5ìup4]Ëÿ'qÿÙâßFº xƒ*Ó翇ñ?¥³ýÿ,â#ßOÏ~]àÅ›Uñ)=¿ðÐ#A?“±ë!l,Éâ(=ŒÀÑç..LöþU™Ñ&´ñ}#@ãÒ'0^£ÖmïV îÅÁÃÚò{ªTÇ¢!¬Zƒaw™o0KTƒ£r[Í΀£lñONþß)ÿó8ÿ‹§Ù,ÿë,ÌàÔòcÃŽT�Ž,òýË)µâþEr”™ 5ôâ¨oMµ³»|Þ)ÛÌšè +d“9´ÍÙæfµf¿²ìépõ[$ÒSËý«Ôæ8ƒäpåžyàÍû}¥¥=8aùáÞG»Æüzê;£êR5ìró¶—£‰Á¯Øf¯Ñnß3W>)Ì{×ó?†{àŸÉú?œGâê˱xÉ‘~ì+o’ÑÙºiÄülq`~ +æ I;ÈÛ Ãß~6zèG“§Æƒ‡,'šØ‘@VÝpHfXšçñ“ë9Óh^ê§9IŒ¬ÑŸ¶{”ë\ì|ÈG^4düÄõ> ×ÿ|u…÷RóB˜—Ž§ÇYiþÕ΃ùW?Åik›uuúg’ZÈ…G,–$gÓX?WìÞµ`oDšCºq‹…X½Ìie¿ò7%°$gƒØBþUú‹=óÀÑ@ƒdÍãJJfþ¾‚]m„®©q¾}Ý+6¾Ú¦\¨—» +åßÛEݯó£ÛÚÌmú™Ùôa%%R{×ü_æˆÿ—E.Óÿç¢ f‘”¸œþEyl³>,vá°ß¬uG·%…r'Ó&ÿÀ‰¶mƒú Ñ7KË뇯ë +ÓÏË- åÂ%ˆ#èqýOä“›ˆìÓðµbA§ðÏó‡ùÑݬÿÏYd“ÿ}弦Q< üÍR +ËË¢EEÀ+PTÞ’ÿ/à¹æÃbÝâŠ=æÞõÕÆJ¬.êÖxÝòT×½¶¾-úÙ_§;ÍÈÕN�OÕ?®ê1“³ÎÏ{|&C.ž¼ÙäDé/ŸâúþãÒ ?0àlõ:Jà$þ…#þoÏðIù¿$È4((“þŸHÅ”‚h†’‘†X¬0¿<ÿÿ÷àßoª¬x×]q¸âfó=5Äñ¤þ0‹ãÍÕ¹7[»Ìjè'ü¯Ó¨G·6* —yV|kž£¾…ÿÐ~= pÿ"}ÄÿÕÿžGÒþ¿˜C¢ˆ%И¥x^Q)Eå!ÅhˆAVÞÿf©®XóÛJ>”»Ù¨°Ø仞´ +÷-¯ÔZŽ XÌÔª&Îð°NŸ×�›A'tÀá\A<ƒ×s’@Ýk9�§÷ÿ#û_b³üϳHºÿs +/R*ÇóÏÊ2¥JG ¬Äp"f5UySü7èN©Ð{0ª¼Vu¼Ë;vJw+ƒÔnVùZ)uª‰]Yyjÿs°N·Èo%—·àœèy£×1Ûà·5ÀÁlûDžÃ¨’ ÿñÄÿ%ILvþsIù¿(BYf)0ÉÿäJážÒ p*d$™Go‰¶ „e¹Qô0hT»Z«“ŸLò~iPþúµÂ´îškIƒBEïØÿûëô ÿÉåE�ö§øˆ!€gðïƒùkFÿ^²ÿñ3Rÿ?‹¤ùß²JC‚Húÿ € +9"’ÕÈ5ç5ôþŸ¯ƒÿÚDó¯ÚØ-ŸÅS„ˆ_Ͻö8¸¾wpmÀ‚Ô]å©ýÏî:Ý‚ÿÚNº{È‹¬þT„ßÕ;Ó|@ðþCû•=€Óþÿÿ/›õÿ:¤ý¿EV€œ‚) ÒÅ«‘' ` QÓ¬¬AÌBü¦ñÿ»‚Lm6ë¯UWúÌ.¦ŽšÅ^=h/ÍÙÊšÚö”‚Åýÿpn•@YÎüɈ¬ëE.ÀÑ„@<ÿ×õ�NïÿGýX!ÛÿÏ")þ±ŒYV”$cHñ¨P–B©VZÆ/®ÿü=ø/JCy¢”æbÖVV‚e÷Ù»µ¾ÞóoÊjë^̧f~t½‡ÿç=€þæÆ‹|€Ãi>–°Òja7‚Ç/_GœÆÿaÿOšÏø¿Ï#)ÿ—¬+9õÓ(ž#ž€ªr”,Ð2 óê7úÿ¾Nÿ¯Òjå®{¸72t¹Ü^Pœ¢<´ðµZ«¼ÉPo{ÕÖ½oå;~Ûþçxn@ÜÉ”ÛÔÄŸø‡ÿóFÄÏ´ÑߘíCh€gð ‘ùŠ +à$þë?YZ2üŸEÒø?‘Ñ�%²P¤xš…”ÌŠþ^F¤+¾˜ÿå÷àßž{5E-æº0·XuÚT¼¶].¹…¼¤ +ýiwÒíb£K•úOø?^§OÍÀâ[Ç tB;ø®&xfÞ¿®*xÿ¡ýÊÀiÿÿÈþ—2ÿÿ<’à_£#„k$õ‡UØÿX¥dZ)NPÌp ßÿþ»-¿?ô;\ʳât´Xƒ|u�˜‰`¼Z‡–j=[šÑOøfî¸�êï°ž›ñ¯ýX6øƒ‰ãkô%�'óÿÅcþ.;ÿ;‹Z£¸ÒGK>Åf´“Κ߇ìZä4_®óë–·2¯õrgÖMC8XàÛÞzZâá”™u4¬g5�?®¤ø‡Þ[5ÿüÛøó£ÿÅŒÿû,L<äO3.röÐChxÈBvàÀ³ [ÿœ‹þ$2MÞFžçx¤-�ˆ4apÔõdô ½!´ +ˬ˜ë.7y±š™F¡PË{–À¸EªkyC4*"I£G™Þx{IñOÊSß ÿw˜ÿÇq\æÿŸEbwØ[íÀ5ækÁ†ç¤L™T)†…ÖŽö]‡žã¢«¯¡gÀɦKolñïBì°ÈR¤½)™Þ™é‘½ҽ![iõh¡1¨VÌVí‡r…íu*ò® m1uWÒÀq2ñ[eƒã÷ÛÿéÃü¿èMæÿŸEâ²eÌç`6òÇ&Z¼‘³ÛK‘`˜éµïC•�Ûדå`<¯Ëc¡øšLå:h*ýÂÍP§Í†Hs-1ü’â?nö~ö?Éÿ¢A‹ðÏgçÿg`šÎblØ>‚¡‡Æ¡k:€ô§Köé-Õ +LÈâ“røiÛÂkl¥a…Ö8n_Ç2âÉÂ/ëžRZðTåÔ|óöᦶžÔèâ¤`'âX(•£r68‡¤ø7,Âu£¿>÷;‘“ñ¿cþw:‹ÿŸG¦.ÒÇaÚÐRN·ƒ<»»ë÷&7¨LÛó™3\µj¯:ª,õ›Î´Ù™÷ø²àµ3øþdÿod�œÄ?ÈÿHŒÿçÀqÌ™yáºvŠÏ0ô7 Š +à×”kð‡E¾4eš!.!Úwáä¾fU‡‚ßûWÌä;’â? ß¾ÿ+#öÿäéÌþ?ÄaüÈ韓có‰q2S7ä({ê¯M…-ƒåÔ+ÖzU‚Ó<†ÚRb̺Ç4m)‚¬¥ÛŸARü[À0ßÍÿgÄ#þ?ŽÏâÿg‘=ÆãmHÞ¸c²$N(o¤R8iÜbm4Æ_ûr¸ºå«Ú5½îË¢¼®5ºæºê\gÊàÇ”'ü“J ’ùxþþ}ÔÿQÌú¿œG,äûqðîâ_„„8‡ü ‡Hálèùès»#×pB?ç#ϱã{ +¢a¹Àûõýœj ;øõÿ‚Ë\yÐ ÷çNà!ÂpÝŠ>~±¯¾¯Z¾ +õ¡½²$U®óú’®´EcГÝ`ZGr¡¤4½ÐÁƒÞœi“? ü#;¼L“£ÏÞÿgŽú¿ÐlæÿŸERþbÈr¥�†äÿò¥Àè¨p‚Ì@šóšýßêãÂDf¿´ê·ùÅ=]Ñûã†Vh<ÌÖuYòkË)(jå©bÙ‹8ß7]™Oé½;¹ü9+®ð×PÂLgé^Ô{æG +Š°Øk„ˆ$“ŒÞ9Ú+¸øè]âöðOx ߥÿÛQüŸÏêÏ#)ÿŸ +$–Å,%I +¢xÑ(•á9 +«�ò<Ab_ÿ>p¯ vTª8·Êª}ÛôÛ{vÞ×Úb©oè{çW= åkI¾¼27èÏ“7„ã#NÉ?�þîÍëðg$‹aæx¤?/»øÇŽ9ƒï`ÿùÿ¼(füg‘”ÿGÑCH±"ÍQ<Ö0¥²¬FѲªbYùuû?K+Ïkeé,*„°ÀVZÃj·ÞÆ7ŠÙít›|I”¥|&äã•ùDñeD›º†R:}Ð%^Œacdzbý¡ÿ»²‹âë½Gý'õã2þ¿óH‚1P`ešRe R¼ÌcJF|d ÈRdþ�öU÷ÿ6ÛÜ;·÷3sÝéòn(2êªÓ.ßòª»•ÚMcDÍlGŽñOV浯açl07ôàÏ*�?i ÿ”ì⟜¿Oÿç£ý_ÈêÿÎ# þI¢Y(P‘õ¥P +£Ð¬ )€ øªþ¡X§æ÷Ìzݵ›#kùθVšS9_¾›÷–R¡jŽå +\&û¼27 + FônõqD€K ÿ?9ÈŽ-2ÔUZ’œ©‚CIñï"/¶˜Þ#þÏÐGù?¼Ädñÿ³HÜÿ1éþ¬§ûX&ù¼ô'èÇõü®‡\ÏÈ÷·õ<úÚpÓ7øÁ˜§y2r¿=aÒÞ0úÐÅÕ¿/ÿñÏÏÁ2xtmýQ7ðãÔEÿÔ£ð8õ è<úüˆÍù#ÔGDÍGÍ4Ñ=ßýù¿¯Òˆ-¡òßíÄWÑÄ~°ŠÀýg±Å¿ÑÏÿ¾º"Ã'EL†/ÿUj{£Öu|á—/é¿h¿| ŒÀD¿DÏŸk8A®ì„¶öå*¹øå*¢:Ú*Îü²3"z÷Åý¥7AqY$òIœ±ß©åþþ/òhÏ-€Ÿ³£á˜ÏE¦H01âÓyäb¹r£É“i¯â‡¹ø4}ÁWUÅÝ2ÇO…›9VPXúdæµÊF_¶7¥Ì¦•ïݪšàâ.–õûýPÔ–ËÁdñ�Øjá>KÝü8’êÏ«æ{Aý{”ÿÁfõ_ç8¶ÌDkìTŸ"?Êò“Â0‹dˆ2¤|n ÅØŠUC´f~ˉnϼ‘/º¼«ÛÇ)Ò£PñûETâMå®m·ÍR?S9g“ÿäìÿÝò¿"kï˜ÿ!‹ÿžERþG�iM +%@@H h’!’)(ª‚i@•û”6è.Æ ÎÝÚÄ1s½Èô1lýâÉKOjþ…–ÀrMt ë“o::H4ÊÆÆäi.~O^ñ高 ùsÎ^E1ìOI_ÚhÀ U:I]Úú„t�'ÌN¤h'z_m”ÐoPQ«!Ð:×’t¨Š¨-';k€›Ÿ«vwÞ+‹“&ïæõʾý«¨¨ÿqóßKÝtTðúy §ð/°Gùß’íÿgæ‘óeǬm†…f´ØºšÛÚ¥e@Ïñ\’QÛ~õ1bCÏܼòÑwTâ"„^˜PÆ$¬j®És³w3rlÀ”j-±yÂÍû„ûyo®D)DJÃùüòGü¾*¨ÞÌdo]e+õN a'XöLSnKz%z<h²•²0µ‡ +üsÓÔìáÿ½ê¿û?2œÅÎ#ñcd‹ò…ÌNÀC4Û‚ÐÖ••¿Rëm±±¾›òZ`´-?kŽ–Z‰ìÚ”7žÍþÔðøË!ÿ¸ôQ@l¸· +œÆÿQý§”åžG¶¡eBÙ:Ù>O39fh¡JR§Ð¬rc0¬·|WveIW!Í5æVQеuË”&÷Y%Ø+ĺĦ㼠õC,'ã¼pˆFÈüÿ³HäþÛ\mŒhçá>&oÿßÞ‘-%®Dßç+ºæÅ™*c%@ØÞtœTp\p´¨,‰B;į¿çtwÂæ·Poyû¼ÑMNŸ½·ÓÝ~à†ã*Éc@à£î´ZüJëW¹ûå¤ã=Ðc£U¾9TŽ[£{¯ünÐò~ÜhiyÛɵó½ßg±ŠoÜÿ_õôç‹þ_Âdïÿ×uuþóM@>vÀý” ÐuqW²J>ÿå:º~õ‰†kWÛ—Áe°›îwâ© +ñ5™à1°ô8ø:±) ÈÀr)±ò—«Ãbè„C¨›ÀD~ü(‚0ŸÀì]³™O½+Ìàpú¾s£T±‘ŠY$dÄ £ Z¾Iü„øPDZÚ,#'زàI´©ö+,l4Ûß«7rEE_¤†Þ<U¾ØÎetDYìÛ}Êyig´ÐûÈg4†–J\`i‚ozHÓØï÷A4Q‚ñ=N¢@$¹•¦‘YQ‘„ZƒÏ xhßP¯åÜ•¤ÌÑ™jÃa<¢³àlCævXš¬«pþ?L“âá ÿ{è‡×(²Mêįᕥ_EÎô<UÈ`ŸTrñÇ"w’l‹ëïBÄV°ÎâdÜ£Œò2Ä‚ÂàT¤ÒØ!µ$3ËK([ͶÖ6†?ôäð˘ gt.éyUk¯¥âkbQ<0µ’Uðã¢Öô¸´8‚ÄÜgö! f‡|d;à2âú—“ëùúmþ)GcÎÌl»©§„c1z7ÄO ¯ãÄ6S±1#˜æ’¿Òvª(äi³+Æ™`A¯O+ñiƒ +Â.Ø7GV¿+/_Å®Ú=4ƒ˜±…×ü| QÖó_µi!.M`X¯Š0—ÌÌgÓVq*Šúr›0c× ]gÈDUЬ¤„¤”ì&êØŸéãDU £Å³gF{P!Åá5ŠÒòny3Ú²Ã! Î4¸½lÛÜš:)×5Çëiƒ|ÉXÇ@ àë3j]ÈóÊârãÒ§î‚äw¦®G]?ávûʬˆfþÐÏhÅn¯3;Ðy¤»6‘"üð£÷ŠSRÚûÅ+ò%õü©!Ù2·|M3Êæ;f$ѽ²£ËV¦\ˆÙÅæØHñ½2i3_׺f¤vöÐpONÏs–ïõïÙÏVû°æßµYïºö`Ÿæ¾i½?‡æ~à×>æ*_ÿa!Lg¡» +&ƒp¸ù] ó¿–îÿ1¡Lÿ¼ˆü¯œ[¡z™šše˜Pñlº–£¦n›¦é¸¶»Éó?7æÃáQÓïÝ}Óí£QËMzæ µo#Vß+_ws?ÎÝõ¼¨þÊû?RÛÌî¦%ü:-™†güXŽDäŠvDÙÀclñllAÄ¢q<}ü½uðž0ãÿCèzƒÇÅt³›A/ú¿±äÿżºÿãM@øÉÉA_—4S÷òZ¡lRR4Šš‘·]»X1Ï)nÒÿݺ~˜Ûo´nÌ»âùéÅîÏxxºÕÛ:·µãñ;i6#VîÔ„ÿÏÚæ4Ì–.ÄCÅ•€ûÿ;ç”–ßÿ*jÿ÷M ëY«Dt©ôÏÂœtE>7÷ï L „çrÎoMùÍm*¤ÅKì…Št”½ +¶8É*žX§Nñ=¿ê¸ô¯¥&ñ´¾JF>L-B&#Hö¿O’ýMzáÂ3䜗…Ý•.NÌÃ!¤\,èú´6N˜Ì³á ¯1açÂETÚ+4lÖ?-PzqØh ÚíÈû#í`|ÑÌ}7¼Vë@ÿ_Æ3 +(P @ +(P @óð‹`Á�h� \ No newline at end of file diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php index e882dd138dd7..75411f05cd8e 100644 --- a/sites/default/default.settings.php +++ b/sites/default/default.settings.php @@ -522,6 +522,19 @@ */ # $settings['file_private_path'] = ''; +/** + * Temporary file path: + * + * A local file system path where temporary files will be stored. This directory + * must be absolute, outside of the Drupal installation directory and not + * accessible over the web. + * + * If this is not set, the default for the operating system will be used. + * + * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() + */ +# $settings['file_temp_path'] = '/tmp'; + /** * Session write interval: * @@ -604,7 +617,6 @@ * configuration values in settings.php will not fire any of the configuration * change events. */ -# $config['system.file']['path']['temporary'] = '/tmp'; # $config['system.site']['name'] = 'My Drupal site'; # $config['system.theme']['default'] = 'stark'; # $config['user.settings']['anonymous'] = 'Visitor'; -- GitLab