From c44d89e37d4df8320216dc8240e7c7b5f3c82f02 Mon Sep 17 00:00:00 2001 From: Kostia Bohach <57198-_shY@users.noreply.drupalcode.org> Date: Fri, 21 Jul 2023 14:48:24 +0000 Subject: [PATCH] Issue #3364659 by Utkarsh_33, lauriii, sakthi_dev, bnjmnm, tim.plunkett, fadilraj, Chris Matthews, longwave, smustgrave, ckrina: Give display modes a description --- core/config/schema/core.entity.schema.yml | 6 ++ .../Core/Entity/Entity/EntityFormMode.php | 4 +- .../Core/Entity/Entity/EntityViewMode.php | 4 +- .../Core/Entity/EntityDisplayModeBase.php | 14 ++++ .../Entity/EntityDisplayModeInterface.php | 8 ++ ...re.entity_view_mode.block_content.full.yml | 1 + .../core.entity_view_mode.node.print.yml | 1 + .../core.entity_view_mode.comment.full.yml | 1 + .../src/EntityDisplayModeListBuilder.php | 2 + .../src/Form/EntityDisplayModeFormBase.php | 9 +++ .../src/Functional/EntityFormModeTest.php | 2 + .../src/Functional/EntityViewModeTest.php | 2 + .../core.entity_view_mode.media.full.yml | 1 + ...e.entity_form_mode.media.media_library.yml | 1 + ...e.entity_view_mode.media.media_library.yml | 1 + .../core.entity_view_mode.node.full.yml | 1 + .../core.entity_view_mode.node.rss.yml | 1 + ...ore.entity_view_mode.node.search_index.yml | 1 + ...re.entity_view_mode.node.search_result.yml | 1 + .../core.entity_view_mode.node.teaser.yml | 1 + core/modules/system/system.module | 28 +++++++ core/modules/system/system.post_update.php | 28 +++++++ ...dateDescriptionConfigurationPostUpdate.php | 43 ++++++++++ ...re.entity_view_mode.taxonomy_term.full.yml | 1 + .../core.entity_form_mode.user.register.yml | 1 + .../core.entity_view_mode.user.compact.yml | 1 + .../core.entity_view_mode.user.full.yml | 1 + ...core.entity_view_mode.media.medium_8_7.yml | 1 + ....entity_view_mode.media.responsive_3x2.yml | 1 + ...y_view_mode.media.scale_crop_7_3_large.yml | 1 + .../core.entity_view_mode.media.square.yml | 1 + .../core.entity_view_mode.node.card.yml | 1 + ...core.entity_view_mode.node.card_common.yml | 1 + ....entity_view_mode.node.card_common_alt.yml | 1 + .../Rest/EntityFormModeResourceTestBase.php | 2 + .../Rest/EntityViewModeResourceTestBase.php | 2 + .../testing_config_install.tar.gz | 78 ++++++++----------- 37 files changed, 207 insertions(+), 47 deletions(-) create mode 100644 core/modules/system/tests/src/Functional/Update/UpdateDescriptionConfigurationPostUpdate.php diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml index d1adfd9fc2ca..9680b701298b 100644 --- a/core/config/schema/core.entity.schema.yml +++ b/core/config/schema/core.entity.schema.yml @@ -10,6 +10,9 @@ core.entity_view_mode.*.*: label: type: label label: 'The human-readable name of the view mode' + description: + type: text + label: 'Description' targetEntityType: type: string label: 'Target entity type' @@ -27,6 +30,9 @@ core.entity_form_mode.*.*: label: type: label label: 'Label' + description: + type: text + label: 'Description' targetEntityType: type: string label: 'Target entity type' diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php b/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php index 26e6782f081e..3a57641d66f0 100644 --- a/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php +++ b/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php @@ -27,11 +27,13 @@ * label = @Translation("Form mode"), * entity_keys = { * "id" = "id", - * "label" = "label" + * "label" = "label", + * "description" = "description", * }, * config_export = { * "id", * "label", + * "description", * "targetEntityType", * "cache", * } diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php b/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php index 6ec26db183a8..21bcd8888f95 100644 --- a/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php +++ b/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php @@ -29,11 +29,13 @@ * label = @Translation("View mode"), * entity_keys = { * "id" = "id", - * "label" = "label" + * "label" = "label", + * "description" = "description", * }, * config_export = { * "id", * "label", + * "description", * "targetEntityType", * "cache", * } diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php b/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php index a611487fa1c7..0e21b7f6d49a 100644 --- a/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php +++ b/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php @@ -24,6 +24,13 @@ abstract class EntityDisplayModeBase extends ConfigEntityBase implements EntityD */ protected $label; + /** + * Description of the form or view mode. + * + * @var string|null + */ + protected ?string $description; + /** * The entity type this form or view mode is used for. * @@ -119,4 +126,11 @@ protected function urlRouteParameters($rel) { return $uri_route_parameters; } + /** + * {@inheritdoc} + */ + public function getDescription(): string { + return $this->description ?? ''; + } + } diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php b/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php index e7a2a52f00e9..6b5cdecfdfa9 100644 --- a/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php +++ b/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php @@ -27,4 +27,12 @@ public function getTargetType(); */ public function setTargetType($target_entity_type); + /** + * Gets the display mode description. + * + * @return string + * The display mode description. + */ + public function getDescription(): string; + } diff --git a/core/modules/block_content/config/install/core.entity_view_mode.block_content.full.yml b/core/modules/block_content/config/install/core.entity_view_mode.block_content.full.yml index 30115ee4eb00..a1d5b097cc23 100644 --- a/core/modules/block_content/config/install/core.entity_view_mode.block_content.full.yml +++ b/core/modules/block_content/config/install/core.entity_view_mode.block_content.full.yml @@ -5,5 +5,6 @@ dependencies: - block_content id: block_content.full label: Full +description: '' targetEntityType: block_content cache: true diff --git a/core/modules/book/config/optional/core.entity_view_mode.node.print.yml b/core/modules/book/config/optional/core.entity_view_mode.node.print.yml index d695ac52d74a..fd8587525b09 100644 --- a/core/modules/book/config/optional/core.entity_view_mode.node.print.yml +++ b/core/modules/book/config/optional/core.entity_view_mode.node.print.yml @@ -8,5 +8,6 @@ dependencies: - book id: node.print label: Print +description: '' targetEntityType: node cache: true diff --git a/core/modules/comment/config/install/core.entity_view_mode.comment.full.yml b/core/modules/comment/config/install/core.entity_view_mode.comment.full.yml index b2013dd09123..050a69e8d17d 100644 --- a/core/modules/comment/config/install/core.entity_view_mode.comment.full.yml +++ b/core/modules/comment/config/install/core.entity_view_mode.comment.full.yml @@ -5,5 +5,6 @@ dependencies: - comment id: comment.full label: 'Full comment' +description: '' targetEntityType: comment cache: true diff --git a/core/modules/field_ui/src/EntityDisplayModeListBuilder.php b/core/modules/field_ui/src/EntityDisplayModeListBuilder.php index 1dc361eb4820..db6132b96a5a 100644 --- a/core/modules/field_ui/src/EntityDisplayModeListBuilder.php +++ b/core/modules/field_ui/src/EntityDisplayModeListBuilder.php @@ -60,6 +60,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI */ public function buildHeader() { $header['label'] = $this->t('Name'); + $header['description'] = $this->t('Description'); return $header + parent::buildHeader(); } @@ -68,6 +69,7 @@ public function buildHeader() { */ public function buildRow(EntityInterface $entity) { $row['label'] = $entity->label(); + $row['description'] = $entity->getDescription(); return $row + parent::buildRow($entity); } diff --git a/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php b/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php index 4d1538f55db7..69525f0ae2ef 100644 --- a/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php +++ b/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php @@ -89,6 +89,15 @@ public function form(array $form, FormStateInterface $form_state) { '#default_value' => $this->entity->label(), ]; + $form['description'] = [ + '#title' => $this->t('Description'), + '#type' => 'textarea', + '#default_value' => $this->entity->getDescription(), + '#description' => $this->t('This text will be displayed on the @mode_label list page.', [ + '@mode_label' => $this->entity->getEntityType()->getPluralLabel(), + ]), + ]; + $form['id'] = [ '#type' => 'machine_name', '#description' => $this->t('A unique machine-readable name. Can only contain lowercase letters, numbers, and underscores.'), diff --git a/core/modules/jsonapi/tests/src/Functional/EntityFormModeTest.php b/core/modules/jsonapi/tests/src/Functional/EntityFormModeTest.php index 91804ab36490..fb8ac77bbd18 100644 --- a/core/modules/jsonapi/tests/src/Functional/EntityFormModeTest.php +++ b/core/modules/jsonapi/tests/src/Functional/EntityFormModeTest.php @@ -55,6 +55,7 @@ protected function createEntity() { $entity_form_mode = EntityFormMode::create([ 'id' => 'user.test', 'label' => 'Test', + 'description' => '', 'targetEntityType' => 'user', ]); $entity_form_mode->save(); @@ -91,6 +92,7 @@ protected function getExpectedDocument() { 'user', ], ], + 'description' => '', 'label' => 'Test', 'langcode' => 'en', 'status' => TRUE, diff --git a/core/modules/jsonapi/tests/src/Functional/EntityViewModeTest.php b/core/modules/jsonapi/tests/src/Functional/EntityViewModeTest.php index 27bf64d45c21..8a8cc816ae54 100644 --- a/core/modules/jsonapi/tests/src/Functional/EntityViewModeTest.php +++ b/core/modules/jsonapi/tests/src/Functional/EntityViewModeTest.php @@ -55,6 +55,7 @@ protected function createEntity() { $entity_view_mode = EntityViewMode::create([ 'id' => 'user.test', 'label' => 'Test', + 'description' => '', 'targetEntityType' => 'user', ]); $entity_view_mode->save(); @@ -93,6 +94,7 @@ protected function getExpectedDocument() { ], 'label' => 'Test', 'langcode' => 'en', + 'description' => '', 'status' => TRUE, 'targetEntityType' => 'user', 'drupal_internal__id' => 'user.test', diff --git a/core/modules/media/config/install/core.entity_view_mode.media.full.yml b/core/modules/media/config/install/core.entity_view_mode.media.full.yml index dfdbb3a7d620..252039162b1c 100644 --- a/core/modules/media/config/install/core.entity_view_mode.media.full.yml +++ b/core/modules/media/config/install/core.entity_view_mode.media.full.yml @@ -5,5 +5,6 @@ dependencies: - media id: media.full label: 'Full content' +description: '' targetEntityType: media cache: true diff --git a/core/modules/media_library/config/install/core.entity_form_mode.media.media_library.yml b/core/modules/media_library/config/install/core.entity_form_mode.media.media_library.yml index d96dd313f8b0..ca9b3dacf967 100644 --- a/core/modules/media_library/config/install/core.entity_form_mode.media.media_library.yml +++ b/core/modules/media_library/config/install/core.entity_form_mode.media.media_library.yml @@ -8,5 +8,6 @@ dependencies: - media_library id: media.media_library label: 'Media library' +description: '' targetEntityType: media cache: true diff --git a/core/modules/media_library/config/install/core.entity_view_mode.media.media_library.yml b/core/modules/media_library/config/install/core.entity_view_mode.media.media_library.yml index d96dd313f8b0..ca9b3dacf967 100644 --- a/core/modules/media_library/config/install/core.entity_view_mode.media.media_library.yml +++ b/core/modules/media_library/config/install/core.entity_view_mode.media.media_library.yml @@ -8,5 +8,6 @@ dependencies: - media_library id: media.media_library label: 'Media library' +description: '' targetEntityType: media cache: true diff --git a/core/modules/node/config/install/core.entity_view_mode.node.full.yml b/core/modules/node/config/install/core.entity_view_mode.node.full.yml index f52a51dc3d84..50fcac1c0d25 100644 --- a/core/modules/node/config/install/core.entity_view_mode.node.full.yml +++ b/core/modules/node/config/install/core.entity_view_mode.node.full.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.full label: 'Full content' +description: '' targetEntityType: node cache: true diff --git a/core/modules/node/config/install/core.entity_view_mode.node.rss.yml b/core/modules/node/config/install/core.entity_view_mode.node.rss.yml index 6418e4758e6c..7bbea72f00c2 100644 --- a/core/modules/node/config/install/core.entity_view_mode.node.rss.yml +++ b/core/modules/node/config/install/core.entity_view_mode.node.rss.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.rss label: RSS +description: '' targetEntityType: node cache: true diff --git a/core/modules/node/config/install/core.entity_view_mode.node.search_index.yml b/core/modules/node/config/install/core.entity_view_mode.node.search_index.yml index 7d082be3c3e0..e2a094ed4478 100644 --- a/core/modules/node/config/install/core.entity_view_mode.node.search_index.yml +++ b/core/modules/node/config/install/core.entity_view_mode.node.search_index.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.search_index label: 'Search index' +description: '' targetEntityType: node cache: true diff --git a/core/modules/node/config/install/core.entity_view_mode.node.search_result.yml b/core/modules/node/config/install/core.entity_view_mode.node.search_result.yml index 73252b1369a5..5e034c6f8d74 100644 --- a/core/modules/node/config/install/core.entity_view_mode.node.search_result.yml +++ b/core/modules/node/config/install/core.entity_view_mode.node.search_result.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.search_result label: 'Search result highlighting input' +description: '' targetEntityType: node cache: true diff --git a/core/modules/node/config/install/core.entity_view_mode.node.teaser.yml b/core/modules/node/config/install/core.entity_view_mode.node.teaser.yml index dcde72c4c32d..7772fa778e86 100644 --- a/core/modules/node/config/install/core.entity_view_mode.node.teaser.yml +++ b/core/modules/node/config/install/core.entity_view_mode.node.teaser.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.teaser label: Teaser +description: '' targetEntityType: node cache: true diff --git a/core/modules/system/system.module b/core/modules/system/system.module index aeeee140daf2..44253888c337 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -15,6 +15,8 @@ use Drupal\Core\Database\Query\AlterableInterface; use Drupal\Core\Datetime\TimeZoneFormHelper; use Drupal\Core\Entity\ContentEntityTypeInterface; +use Drupal\Core\Entity\EntityViewModeInterface; +use Drupal\Core\Entity\EntityFormModeInterface; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Extension\Extension; use Drupal\Core\Field\Plugin\Field\FieldFormatter\TimestampFormatter; @@ -1396,3 +1398,29 @@ function system_entity_view_display_presave(EntityViewDisplayInterface $entity_v } } } + +/** + * Implements hook_ENTITY_TYPE_presave() for view mode entities. + * + * Sets the description property to an empty string. + * + * @todo Remove this BC layer in drupal:11.0.0. + */ +function system_entity_view_mode_presave(EntityViewModeInterface $entity_view_mode) { + if ($entity_view_mode->get('description') === NULL) { + $entity_view_mode->set('description', ''); + } +} + +/** + * Implements hook_ENTITY_TYPE_presave() for form mode entities. + * + * Sets the description property to an empty string. + * + * @todo Remove this BC layer in drupal:11.0.0. + */ +function system_entity_form_mode_presave(EntityFormModeInterface $entity_form_mode) { + if ($entity_form_mode->get('description') === NULL) { + $entity_form_mode->set('description', ''); + } +} diff --git a/core/modules/system/system.post_update.php b/core/modules/system/system.post_update.php index bbab4e209866..850def033ed0 100644 --- a/core/modules/system/system.post_update.php +++ b/core/modules/system/system.post_update.php @@ -7,6 +7,8 @@ use Drupal\Core\Config\Entity\ConfigEntityUpdater; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; +use Drupal\Core\Entity\EntityViewModeInterface; +use Drupal\Core\Entity\EntityFormModeInterface; use Drupal\Core\Field\Plugin\Field\FieldFormatter\TimestampFormatter; /** @@ -118,3 +120,29 @@ function system_post_update_remove_asset_entries() { function system_post_update_remove_asset_query_string() { \Drupal::state()->delete('system.css_js_query_string'); } + +/** + * Update description for view modes. + */ +function system_post_update_add_description_to_entity_view_mode(array &$sandbox = NULL): void { + $config_entity_updater = \Drupal::classResolver(ConfigEntityUpdater::class); + + $callback = function (EntityViewModeInterface $entity_view_mode) { + return $entity_view_mode->get('description') === NULL; + }; + + $config_entity_updater->update($sandbox, 'entity_view_mode', $callback); +} + +/** + * Update description for form modes. + */ +function system_post_update_add_description_to_entity_form_mode(array &$sandbox = NULL): void { + $config_entity_updater = \Drupal::classResolver(ConfigEntityUpdater::class); + + $callback = function (EntityFormModeInterface $entity_form_mode) { + return $entity_form_mode->get('description') === NULL; + }; + + $config_entity_updater->update($sandbox, 'entity_form_mode', $callback); +} diff --git a/core/modules/system/tests/src/Functional/Update/UpdateDescriptionConfigurationPostUpdate.php b/core/modules/system/tests/src/Functional/Update/UpdateDescriptionConfigurationPostUpdate.php new file mode 100644 index 000000000000..efd5c74a0b91 --- /dev/null +++ b/core/modules/system/tests/src/Functional/Update/UpdateDescriptionConfigurationPostUpdate.php @@ -0,0 +1,43 @@ +<?php + +namespace Drupal\Tests\system\Functional\Update; + +use Drupal\Core\Entity\Entity\EntityViewMode; +use Drupal\FunctionalTests\Update\UpdatePathTestBase; + +/** + * @covers system_post_update_add_description_to_entity_view_mode + * @covers system_post_update_add_description_to_entity_form_mode + * + * @group Update + */ +class UpdateDescriptionConfigurationPostUpdate extends UpdatePathTestBase { + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * {@inheritdoc} + */ + protected function setDatabaseDumpFiles() { + $this->databaseDumpFiles = [ + __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-9.4.0.filled.standard.php.gz', + ]; + } + + /** + * Ensure that an empty string is added as a default value for description. + */ + public function testUpdateDescriptionConfigurationPostUpdate(): void { + $view_mode = EntityViewMode::load('block_content.full'); + $this->assertNull($view_mode->get('description')); + + $this->runUpdates(); + + $view_mode = EntityViewMode::load('block_content.full'); + $this->assertSame('', $view_mode->get('description')); + } + +} diff --git a/core/modules/taxonomy/config/install/core.entity_view_mode.taxonomy_term.full.yml b/core/modules/taxonomy/config/install/core.entity_view_mode.taxonomy_term.full.yml index 3a1f31314da0..a0c57a2abec0 100644 --- a/core/modules/taxonomy/config/install/core.entity_view_mode.taxonomy_term.full.yml +++ b/core/modules/taxonomy/config/install/core.entity_view_mode.taxonomy_term.full.yml @@ -5,5 +5,6 @@ dependencies: - taxonomy id: taxonomy_term.full label: 'Taxonomy term page' +description: '' targetEntityType: taxonomy_term cache: true diff --git a/core/modules/user/config/install/core.entity_form_mode.user.register.yml b/core/modules/user/config/install/core.entity_form_mode.user.register.yml index 32c026b99238..7da46dfe9f7a 100644 --- a/core/modules/user/config/install/core.entity_form_mode.user.register.yml +++ b/core/modules/user/config/install/core.entity_form_mode.user.register.yml @@ -5,5 +5,6 @@ dependencies: - user id: user.register label: Register +description: '' targetEntityType: user cache: true diff --git a/core/modules/user/config/install/core.entity_view_mode.user.compact.yml b/core/modules/user/config/install/core.entity_view_mode.user.compact.yml index 0c41655c2027..b5de065ecafc 100644 --- a/core/modules/user/config/install/core.entity_view_mode.user.compact.yml +++ b/core/modules/user/config/install/core.entity_view_mode.user.compact.yml @@ -5,5 +5,6 @@ dependencies: - user id: user.compact label: Compact +description: '' targetEntityType: user cache: true diff --git a/core/modules/user/config/install/core.entity_view_mode.user.full.yml b/core/modules/user/config/install/core.entity_view_mode.user.full.yml index 5574ab95bf47..e98a65036e37 100644 --- a/core/modules/user/config/install/core.entity_view_mode.user.full.yml +++ b/core/modules/user/config/install/core.entity_view_mode.user.full.yml @@ -5,5 +5,6 @@ dependencies: - user id: user.full label: 'User account' +description: '' targetEntityType: user cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.medium_8_7.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.medium_8_7.yml index cd2dcb6615bc..3df4b5f3ca41 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.medium_8_7.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.medium_8_7.yml @@ -5,5 +5,6 @@ dependencies: - media id: media.medium_8_7 label: 'Medium 8:7' +description: '' targetEntityType: media cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.responsive_3x2.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.responsive_3x2.yml index ec295b54f0e8..c8b1b830dd7e 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.responsive_3x2.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.responsive_3x2.yml @@ -5,5 +5,6 @@ dependencies: - media id: media.responsive_3x2 label: 'Responsive 3x2' +description: '' targetEntityType: media cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.scale_crop_7_3_large.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.scale_crop_7_3_large.yml index 89b4a7c273ba..5e148762e5b7 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.scale_crop_7_3_large.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.scale_crop_7_3_large.yml @@ -5,5 +5,6 @@ dependencies: - media id: media.scale_crop_7_3_large label: 'Scale crop 7:3 large' +description: '' targetEntityType: media cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.square.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.square.yml index 029b0a7ed0ed..18974789e9e6 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.media.square.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.media.square.yml @@ -5,5 +5,6 @@ dependencies: - media id: media.square label: Square +description: '' targetEntityType: media cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card.yml index 8ab1bcb9935f..16f3c6db7f52 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.card label: Card +description: '' targetEntityType: node cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common.yml index b5a57a2d7762..55ddb4d8ed72 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.card_common label: 'Card common' +description: '' targetEntityType: node cache: true diff --git a/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common_alt.yml b/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common_alt.yml index 534654405577..fd91cc6d4260 100644 --- a/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common_alt.yml +++ b/core/profiles/demo_umami/config/install/core.entity_view_mode.node.card_common_alt.yml @@ -5,5 +5,6 @@ dependencies: - node id: node.card_common_alt label: 'Card common alt' +description: '' targetEntityType: node cache: true diff --git a/core/tests/Drupal/FunctionalTests/Rest/EntityFormModeResourceTestBase.php b/core/tests/Drupal/FunctionalTests/Rest/EntityFormModeResourceTestBase.php index 93d734a7d8e1..60a55e92b2d9 100644 --- a/core/tests/Drupal/FunctionalTests/Rest/EntityFormModeResourceTestBase.php +++ b/core/tests/Drupal/FunctionalTests/Rest/EntityFormModeResourceTestBase.php @@ -38,6 +38,7 @@ protected function createEntity() { $entity_form_mode = EntityFormMode::create([ 'id' => 'user.test', 'label' => 'Test', + 'description' => '', 'targetEntityType' => 'user', ]); $entity_form_mode->save(); @@ -57,6 +58,7 @@ protected function getExpectedNormalizedEntity() { ], 'id' => 'user.test', 'label' => 'Test', + 'description' => '', 'langcode' => 'en', 'status' => TRUE, 'targetEntityType' => 'user', diff --git a/core/tests/Drupal/FunctionalTests/Rest/EntityViewModeResourceTestBase.php b/core/tests/Drupal/FunctionalTests/Rest/EntityViewModeResourceTestBase.php index 86876e5b6f4e..fc240a568eb8 100644 --- a/core/tests/Drupal/FunctionalTests/Rest/EntityViewModeResourceTestBase.php +++ b/core/tests/Drupal/FunctionalTests/Rest/EntityViewModeResourceTestBase.php @@ -38,6 +38,7 @@ protected function createEntity() { $entity_view_mode = EntityViewMode::create([ 'id' => 'user.test', 'label' => 'Test', + 'description' => '', 'targetEntityType' => 'user', ]); $entity_view_mode->save(); @@ -55,6 +56,7 @@ protected function getExpectedNormalizedEntity() { 'user', ], ], + 'description' => '', 'id' => 'user.test', 'label' => 'Test', 'langcode' => 'en', 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 38fc20382c7b..3905e7beb171 100644 --- a/core/tests/fixtures/config_install/testing_config_install.tar.gz +++ b/core/tests/fixtures/config_install/testing_config_install.tar.gz @@ -1,45 +1,33 @@ -‹������ì]W꼶€×µ¿‚»u³³Þ6MšÖ;>DQAAPqì1:’4…B[°-_îqþûI[ÖzY¬wŸÓéZBlK™Ïœ33Í,óF|øƒ¥¿£˜†C‹Ú¾üXøÞ·C‰"EG(ù«¬¼ý›ˆ*¾©HUU]W‰ -¿)*FDýVPv_È$ùÔ…Â7‡2—Ÿ÷Ûõþ©L&®}Z ºÆ‘¡1 ³„�!ªJ©A Fñ=>²ÅiÁ OäU‹'Ñi!'âÄcØ"ஈNO -> -·—l - -¢Xø?|L~¤Ê%Ûý‘=ñÄûòEÜþº5QNj´Éx±•íÜêÓ¨Z¨<Kä‚⥋þ¢m”àПç.Ÿ˜r˯îÇ•€â'É}£â'ÙÁ–‡ EÏò•kFCËqÃ(>™ ·×OêÉ8Må[ái!˜xÞÉØ›ô\Ùý{vêVòᬔ¢ÓtçßO"ÇnÐK¯GräÏ{ -eÂ;-“×n‡4–ç²j·l7{tqZ˜º‘Ë<!ßXŸÍë¥óÄ4Ù‡š^©q,¯"7Å|LÛ¢žg¹²ŸüÂêEâ$Ý•ë¹±Üí -…ÿ9ùÓz˜ËŸ¶eÿY(5Fjîá\Àû¯¬mØ*0·ÿÇÌþs[تÊ104…Ä)†nê@eX‡*EµñOØÿCYw§uõØ(™jg^™žÕ‡/å–ñTŠèÌ)ëÕgæØ‹GL¸Zo‚ÞX÷•làû‚JÃùjÙ•Ï,ûÒ\¯v–™ì-«þq¯W‹þýNZÝÂêÝïÛ&ý»òýcs>‰„ɶ¼Qo´¼ÌoZš|²ÍÖHv¦Á²}?¿Í¿Ü¤žEy⃢ƒ]üëÜàŸÈà#çÿ’ñÏ¢:†i�ˆ±äé0!à6£QUÁ†ùüÿ4è·Žã7A±t÷‚ãêàÁ¿Z¤!¢IP ÎÜét4.ƒÒÀ3®go@§©Ó.‹`ÈõSàßííÜ?곆ý6t}. -i\WXöÚúäÒü©ˆì3þc Cÿü£-ÿOT-çÿ’ñ1Š†`b…DPÌ0°È‘ƒ~'ÿ(:cg^«‹£+¿ç {íS;‹8»¬.nç©ÎŒËîÿ©¦îI?ÜAº¯/ÙÛã•ü6eÑž˜' ©•xõÞ‘§i¯[Žk>â¿wÜü¢cu3ÿƒaÎÿQ$ãß0lÓ10Œ Ì4`R¦.Ö Ê›¿ÿËð4ü£€šÞ]ðPâóùU½VmÕˆM¬úànÈÇZcpÞîC¼Eм¨½3 -½ŸËí|j’óÎv÷‰EØê°Ê£ syÔÂ$–,G4“ðƒPࣔNz½Že¶ù÷EÑž8”óÿ¶ÿúÖø’œÿcHÆ?e›XÃ2à—F�A‡S`¨ëq -±FÿÀø×öPsÆõ«¹5Ÿ—Úü¶UµrÏ:ê¾ë]xF)êÚÕ¨øƬø“ñ¿¤ÞKÈöÞI€Õ¿Nlôz“H¯Uaõþþi€#mþÇòØ=q(°“uÓÿë8ÿG–ñ?$\¥¶ -06¥ÿGÔ« Ü1UªHäwÆÿÆbWý!|œ‹…˜v^Pp‹§NHJñ¼ù\.Õ7èßÃÚ¥Ú{úZS÷ÿµOA_ïêÆ·:¬ñn»q(äçJûüÇû[²Í<ytþßö˜ÿU¶æ1Rrþ!Ëü?Ó‘"4‚M€®S˜hXŽ°‘&ÍÃAæSå:`„0/߸ƒk»¤‚NïqÞ4©RQ±mLç³¾SæOÜtûƒèáÈÎâc„fuÓï5ÿ»ìùjIn’±Â‰„ß9ï›\ݶžXÎ(ôiüCöó•Öàp`—ÿ×tòMÕ4¨Ê_*Iù'$ÿ"Ëû?hRƒ@פëGDÕ€arCš†5…ëAÚ¾ügzõ5¶dèÝáÚÃc8{¹§·ãîSµé3>7:°ZU‰vã„q;šN¦Y¾¥”'+Ÿ[M•5qº‰î&C1öÜï' XÂ^ž×˜Æ±L+ÿ*øÙu¥Y¹8•ÝþôeÿÇÈÿýØ—¦G6Ä® ÀnþÕ þ‰‚óùÿ£HÆ¿pTMeÅ! ¡S`2N€ BM1çìüæNÙ›=ÕZ5›Oëá�Cþ4¯œwîG7µ3í·֓Wdü¿SÊW#pÑ®_*ËÖOÑïØÿnKìO£›œü ùœÿãåÿ4mÓÿËq€žóYŽÿ”#Uò¯@€LGTÓ¤ÿw„‰ °ü’ÉÿÙMÓ‹;Í[¿ÇõN†ü=º–'Êg—<q•v¨ÐžÜöð=ÿÛìÆ}Š}Nû.ù˜Äýƒ€_à)9ÿG‘ŒG×4Ç–CGèÒÿéþå/…Pæ†ÉðÞ÷ïÃÿ¹š”;³ºõ`·Ók>òâÉ£f6ˆ€Q}¶úU¯1«*¢¾æ?UÊ÷ ž4}arþwÉÇü.öOd'ÿh3þסšÇÿG‘eþë6Ñ59ôW™™ø0Ý`@7mÛ&Bã„ì=ÿ·ÿu²xvywØÑô~kǦéy©äöûŠz³˜ª²¡ijOoâÿíØ¿ýUÜŸüy¼¿C>æ&Ä€¿àÿ¡šÏÿE–óÿ -Öf°q’ÿ×T&u€Iäx@@CÅÊAÇÿ³« -zˆF÷Ö¬Ú›Âi¯†|^,Vïj/áB¨d1|±gaPîšÿD)ßóÿ [>÷þÿ~xÈéß%ó¿4ôD&°“¼Á?TT%ÏÿE2þ5Ý4¡`60uʲ¡)Céÿ±iتbp:{¯ÿÙ‡|?¦³zxu{v[ŽnPw|K•v¥zíž[»pÚ/îe<óüÎœ¯ù§”ï AwùV:ð™EÈóÈçüÓÿãmÿŸóÉøW#œr(5%ÿš#·lL4 -ŽCu¦pa’ÿ›ºÍÉ£Ùb÷Mhƒ›‹Òµ‰Z½îµ¸}~$³±Ó8ïñæK8|Ïÿ6öŸçýóØÙâßréo*?íÿUœçÿ$Ëü?gˆ„ª:@˜Hþ±Ð¦ÂÔ¡Ab4þõŒèá±_š\°ëúL+ÜÒÙÓ ÷|·èWKUŸ³Îƒ5»æNƒN²µ7AïýJ¶Ç´qÃág7¹¬m€÷¯Bµ0øW!Ÿ÷ÿL¶ø÷…íNü£®ÿÑt¸É?Î×ÿG–÷ÿ ]Ã66�P�Dl Hld -¦0h8ì ñðrm¢Æà±öhm¯OªÅ‰I4Ïw†þÅл,èša1ËÿeJ¹e²æ6 ¿õç+Ùâ?êÂø°Ànÿ¿ÿcäù¿£Èrü/‡ÿŽ¢Ú€êÄH&ˆý¡ -(dFŠ£ëöÞ÷ÿïÃÑ{‹E\4jA©7¯›°S¹ìFZùÜ4žú¢U®|=Í–{¥ÜÂ?mÝAŽþ×’ò/‚Ø©°|ù ÿH– þHn‰Žäeüýù¿Íû¡¢æãÿãÈrþ_S1O³þD˜�Éؘ` lÝQ©‚¦îÿ¼þwG¡ï±ßæcŒ×|± O×7ýÛó«ó§{j^ÚÃbõþá^»Ž„;É–ú¾ÓÏ•]h^Ë/´'â³T©Û‹±X.©å”÷WEsþôeÿÇÈ[þ§®˜eüÉ/gâyG©ÿ£‘ÍøŸÀ<ÿYúÇæ@,ý¿.ã“SÀ´d% s8Ó˜¡Ïæÿ3ûµH´i× ^ׂùùàÉ&甎/ñ€IÏ…ýsX›WÝiÜ”øâ&Ê‚¯ -º^ _¬Vü}ÿÀ¤'‘›€Mù‚ÿ0:Ð2ÀÝñ¿¾}ÿžÿ;Š,ùGšã ®è8f’ÿ“ñ?Ót€„cMq¸?ÿˆÿ©×} A8†ŽÙ¨AÓQTxÏg`*>IËä\7Îgå°³æ_*è«ï¿»Ë™ÿù‚ÿHÐ÷-W~±ó¿evñ¸ÿë$ÏÿE2þU¬©:(¹áW•ÔKKÀ45ÛVy29øÉøÿ@ü;÷Uçrj¿”Zg`6n]0§‚©v?úììæñ\÷¦-[›Pλkþß*èkp—6ÒÆ<Ø)»ùE$¿®¿c�vò7Çÿª”œÿcÈÒÿC‡™)ú4¹ÿ_Ó4`êº lâPƒëŽü^ÿ¯Ÿ—oš`p[ÌfEÜ}hê¬m”sö–ºW7we뱋δ§úÿ™‚n€¬u]îÇ zÒ(Œ'ùàà|Á,ht€ìß>ù?m3þÇZ^ÿã(²äŸÓ†�†bj�9jhIþ_(ªI´½×ÿý -þõóù!T‡î•âZÅóJâÇ;ýv?A$‹vÆ‹Öøgú¹â¾½ÊÙþ9ù˜ÿ4¿ÊGþ˜òÌîæsþ˜ÿ"Ëõÿª®rj€Š’ÜÿO�#ÐQlBLÂÅߨÿ¿GþŸ¨å»bh]7nyo¢WôA ÕžzUliß‹NµtÖ.>,¨Ñ[çÿ—ú¹2�ååË<ûÿ3òÿGËÿ£¤þ×Fþ?÷ÿÇ‘Œ¤º¢@˜‰u€ €©"ÕP®0ýøà7kUËu~pšõ1¯ r›^žYÕñZ\Tl« _âó~}m�Þåÿücñ¾Ünn -vJÆÿ<AäŽ[öûUvñ¼QÿO#zîÿ"_cÙBµ*({•‹Ç9ó®ù¹rMê½èzê”jõâÔµ¢áÄoT›³ae£<ÀÚ�d¥îÒ¢t¶Üî-7õ]ž•ð\ò˜´;®ðìÕ¦÷ÚèÅIÍ;%-ô&òŸ–¯’šüËí =v²µ¹Ó1ûõ\e¯³ÚyÙv,u?ÛJLC¶•<…ͧIQ=©œ'¯5 ÓBËZ€ÙÉ-;þ7‘”ÿ´4cbÑå7’Ö'ôÜ`h¦"]ûïWßÅ¿ºYÿ*Z^ÿ÷8²£N—Ý%ÅŽw@3øîÍL{0¦³q·Î@i€U¿«öØóU§Ý¿ç_îM²‘>�'Àà?YR›ücU¬ôÏø‘-ÿóù¿£È×üÃÐèyÆê¬FÛëv°nŸnå;§µP*ñðɼz¹`xãñ áh&ˆïÆK'ú§?f.ŸHpýiþ1ÚâáœÿcÈŽu:—C¥]l–^¼ÆCÑw/j„ÕÎn¯Ï]¥Ô}~šÞÚg)÷‰òžÿñDŽ¼-FcÞ·"÷E6âÜüeÉ< -å )›÷c#{qÜçÁÍù?ŒòüÿqdYÿÇV˜€ÉüŸ¢SS0P4Îm+È€?óü¿æÿ²Íd´½ëNàRgDžož©ûD›V«lF×]\U®Æý; M ¹¯]ÜËþý›;•=IUyùdÜ´a™ÖŽ×Ó€ÙfrÖÌ¥išøɳøÖÅú³±Êòü³Ó}¿²ˆÓÐvšUÐWOâ‘GcʼUF1½óèuÔX„‘-Œ¬ô$W×KåùÖ’¾Õ!Žúý'‰Œßìþ÷¨ÿ±ùü_ çõÿ#_èÐúpôØ è[ñEÍ,›/¸BÆÕ¥~EðíE\1ç@ XoküñÐ' €ô@¯Ü¥úŸ>¶"è%«P¡qâò¬—톂KÙ3rþÊ0ŒþJtô¯¤StâÓ¡°&Á$¶åÓ@Rc[ÉÛ‘,1Jþù`ô_+YnõÇrñïØ£n`%ßÓ!MÁþUUÙ¬ÿ‰‰–×ÿ<Š,ý?F¦€È+*@6¡Àº˜Ct®êŒ#tÐú?ÚU)Ö‡3krÛoÔ”ç¸+AË!þÝM¯Ø´ç¤i¢»«úà‘5O2‡þ½LRX˜ÜÀ—iëia®¯OêQ•“L¥Ó@$Û´ÒòAÒ"Ññ2(I×<n½—¾µ~ÄNÖ!m|÷i“†·ÏO;¼ ^< ½#ʶ_8ÒÆqÒWoc,*ëÃÓI<o@Úú÷O!Ïëþ¥ýÿà®øÂÍç¿¢$%œÛÿ#È×vºêÞêÚƒ]²¬pR-’’Þ¾ž®ÕáOÌC|Ž´çÍZ</¾w«6Y˜jêÍè"²¢þhf½öãý‘ËÿÌèÿµ¬æÓ—÷€ýpX÷q%»ùGñÂ0_ÿqÉâ?)XÇIÁ—ÿeïJ—Ç‘ôü®§ÐLl‡§#–eÞGEEOë°d[÷eI¡�A€¢ÄË<t…hçÿ¾A¿Ø$%ëpYž[®m38$„(_‰Ìü’9ŠWd•’Q -Ï!0ˆãð¿Yÿ!Þnlƒ³Ë^tqò)1ðâ:‹fàíTWÜ?cyïßä#É!þC[{upòüG8Œÿä%:‹ÿ<‹¤üo4f�Gc - ’&Bž’™§�‹¬`Ì‘cšW´ÿPc(šµbµF2gë–®¯(ŠZÑ\U5Êæ\¦ÙRµXtçi¼·m=ŽóÝ?þ lüñ¯‹ï)vŸö½çŸUñ¿^þg¹ÞOÉàŸÏâ?Î" þUAâx,ÒÆ*Cø $Z¡ ¦Y#Y’Ñ«ò?rBáj¯± - Έ–Ëõ¸Ò›‡‹›éHëAËêPÁ0á‹fåþëš$N—ïâŸËðÿÙâߊ~Ó7:8‰éÐÿÃólÿq9áŒ4 -ù¶€JT£a;?¨æ£~ã[ëÆ°×ÁUÐlt-ÿ(þÄÇŽ¶sñ%g«$›”D¯×ÑÐë 5¶¿£‚Ŧ!¹LMf –sÐ� È÷[ìƒQ}ý NüÇ–÷þåÙâßFº xƒ,ÓþßÃó?a³ó¿³Èóø¯Pë¦w£wâà~mù=UªãVÑVÁ°»Ì7˜%ªÁQ¹ø}äû©ï×°PœÀ±™lŸR·ˆï„9ô‹4\acInˆ_ ÔÇ£û..È:0ìýV™ÑÚ´ñã‡ûF€Æé—É0~R¶ø'.úwŠÿŒã¿ã¿3ÿïYäyük÷NX¾¿óQã¶1¿šúΨºT »Ü¼é…Ååhbð+¶Ùk´[ãƒã`Æ�§¶v¤p´ÑßoN÷‰‡4yŽÐ‹#«¾7Ô΢õe'9l3j¢+MÆÐ6.ÓM'j;Ì~fÙ£Ïö{7’©3t¿•Ú¸3HhXî‰~Ѹgýÿ'tïêÿchö0ÿ“ÏøŸÏ$Ïãvµº¢ÆùöU¯Øøf›r¡^î*”gu·Înj3·Uè®ÿqöåؼ$R 6Á7±’hŒlÝ4bÚ·ø¼ -æ ;ˆÛ ÃßÞ›=ô£ÁÓ̓‡,'ØÑ.€LæïB"ÃÒð‘_\Ï™FãR¿ÌIDf´Éýe»ô¹ÎÅÎM>ò¢.ãG -ùI¸þ—ËK¸Ÿ5/tùÙñô8*Í¿Üy0ÿò—8lmóQ—§?“¤X.<²cIBAõ£d÷ªí{=ÒÐŒÐ+7Äêe̱VþcÊk²ò/Ó/öÄG 5Œ7*);,ù`’©½kü/#Úœ˜ñÿGž×ÿl³>,vá°ß¬uG7%…r'Ó&ω¶mƒú Ñ7KË«ûoë -Óß×ÿDAÍ"!qú|æÙýI%áBøâô8ÿ'2žMDTøZgA§ðÏó‡ñŸåÿŸG6ñÑ?„×4Š„ÿO¢YJay™B´ˆ¡xŠÊ[òÿ<×¼_¬[\±§Â<лþ ÚX‰ÕEݯ»“¡ÃAžê:¢×Ö·I?ûót§8iÝ©ð˜ýãš¡n]âëü²7ÀÒåâÑìL<Jú×'ðçXøg«×Q'ñ/ñób†ÿ³HÊÿ% @¦DA™ÔÿD*¦D3”Œ4Äb…Aøåñÿ?‚¿©²âmwÅáŠ;˜Í;ô`ÔÇ“úýt,jŒ7WçÞlí2« ñ<O·J ]Ú¨€\ÒåIMð½q>ŽøþCûõ4ÀIü‹ô!ÿ7åÿžGÒú¿˜C¢ˆ%И¥x^Q)Eå!ÅhˆAVÞÿf©®Xó›J>”»Ù¨°Ø仞´ -w-¯ÔZŽ XÌÔª&Îð0OŸÖ�›N'tÀáXA<×s’µ×2�N¯ÿGûQÈâ?Ï"éúÏ)p¼H©ÏS<+Ë”* %°Ã‰˜ÕTåMñß ;¥BïÞ¨òZÕið.ïØ)ÝVP»^åk}¤Ô©&veå±üÏÁ<Ý"¿•4oÁ8ÑóF¯cZÀïk€ƒÑ>ö‰<…ÿP%§ógÄ?/áŸËâ?Ï")ÿ7E(Ë,…&ñŸœB)œÂSN…Œ$óè-ñÏ”°,7j‚jWkuò“IÞ/ Êß¾U˜Öm³`-iP¨hãýÿþ<}ÄÒü¢€ý!>âÀø÷Áü5Oÿ^²þñ3LÿyIã¿e•†4 Ôÿ�&2D$«‘iÎkè;õ?_ÿµ‰æ;ßZµ±[>‹§ ?¿ž{íqpuçàÚ(€ ©ÛÊcùŸÝyºÿ•TöíúS>«v†ù€ -à ü‡ö+[�§íæðüÍüç‘´þ·È -S0%AZ¢x5²,! -cš•5ˆYˆßôüÿ¶àS‡ÍzàkÕ•>3‡K§©£f±WÚKs¶²¦¶=¥`qgý?œ§[%ÐA–34�¢Ý¿õ"àhÀ žÆÿëZ�§×áÿÑõÿçÿXÆ,«@J’1¤xT -¨K!ŒTH« --ãçþþ‹ÒPž(幘µ••`Ù}övƒo7żÅë²ÚºS'ó©™]íáÿi ¿¹ð"àp˜µ ØÇ?©0Ž+6Œã—¯£�Nãÿ°þ'Íeü/ç‘”ÿKV‚‰xý4Šçˆ% ª%´ÌAȼúú¿¯Sÿ«´Z¹ëîM†].·§(÷-|¥Öj+o2ÔÛ^µuç[yç–ß–ÿ9ž§[P WrÁå6 "ñ÷Ýh‚ø™6šà;£} ðþ!°!2_QœÄ¿tìÿÏø?Ï#éù?‘Ñ�%²P¤xš…”ÌŠþ^F,IÐ_Ìÿò#ø·ç^MQˆ¹.Ì-V6¯m—Kn!/i…BÚt»ØèR¥þ#þçéc1°øÒ±ÈОÕOŒûçUOà?´_ypÚþ?ÚÿK™ýIð¯ÑÂ5úÃ*l„¬R2-Š'¨@f8VПÿ¿�ÿÝ–ßú®eYq:Z¬A¾:�L„D0^-†CKµž-ÍèGü?1OwL�õö�Oøç…~,ü‡ÁÄñŒ5z‹€“ñÿ"{ÈÿÂeõÎ#$)(N ÂÑ”O±Ç¤²æó]‹œæËu~ÝòVæ•^îÌ:°ibè|Ó[OK<œ2³Ž†õ}ÍñÞß8“]Iñ½·*þù—ð? -GüÿÅÿEž¹ÐZ(,³b®Z¸ÜPäÅjf…B-ïYã©®å Ѩˆ$íƒ<˜xÈŸ8fœäì¡ûÐð…ìÀ/€g¶þ%iz™¦/#Ïs<R€VDšCêzÒ;Óo")þIé»áŸãŽêEÆg†ÿsÈóø¿Sú¡7d+-4ÕŠ‚ÙÊ }_®°½NEžÃµ¡-¦îJ8Îÿ³áùÉG&éȱÉív>%&o íµ_…žã¢Ëo¡gÀɦ*olHìB<’ÓoïLˆzɲ _.ü¿ßúOÕÿd…ÌÿwyÿÌ�ظš,ãy]ÕÀ×ì`*×AS鮇:m6DškùƒCþâx[Æ|¦a#l" Å9»mŠÌÃLÛÞûgø°’â?.ö~û&[ÿßINååÊz±¯”Ö#<U95ß¼¹¿®'5º8)˜Ã‰8 -Bkå(¬ñ?9‹±aû†‡®é�Rö.Y˜·T+0!ˆððÓ¶„×ØKà -q\eĬ‚ð[IŠÃ"¤4úës¿9yþGâ÷ùŸè,þ÷<r’§\ãÙím¿7¹FeڞϜáªUëxÕQe©_w¦ÍμǗ¯½ÿ©‹ôñ}˜ÖÉ”„¾?©ìáÿ6�'ñÏñ?fõÏ$'øCop ª¨�îyM¸ß¹_äKS¦âr¡}NîjVµqX8psfDV¹®eÐÿ™%ÅzÎú>ü¯Ìñþ_’2ÿÿYäÿ3GÙSm*l,§^±nÜÓ«œæ1Ô–»`Ö=¦©hKÔ‹ñ#£N¼ñCËã~RIñoÃ|7û?Âý‘ý/eöÿYäyü{#=ÂIàkë 1þÖo•ÃÕ _Õ®èu_åuÑ5×Uçjÿ{ŒÇÛ#zwâŽÉLË”ÁO#ø'™$òñüõ9úÐÿÇ‹Yý—óÈóøÿ&Ô‡öÊ’T¹ÊëKºÒAO^tƒi9É…’ÒôBz·éAòýøðîâwBBœC~C$7ôüè£r»ó-×pB?ç#ϱãk -¢n¹Àûãüœj ;øãƒÏ¹:ò A®ÏÀC„á8ºÝ~‘i“ÿ@6øGvø9 Ž>{ý7žë¿eõÎ")ÿ‡1d9R�CâyR`ôVT8Af ͉€yÍúoõqa"3Ž_ZõÛü⎮èýqC+4îgëº,ùµåµòT±ìEï›ÎÌÇðÞXþœgøk(¡£t/j†=ó#MBèæ5BDIDïí%\|ô*q{ø'„ÍïRÿí¨þ#—åÿžGRþ?H,‹YJ’Dñ£QjôO ° - Ï#$ö5ñï÷Ê`G¥Šs£¬Ú7½ñ@¿¹cç}-–ºðš¾ãp~ÕZ¾–ÄûÇ3sƒþ<yC8>âüàï^Œ°�F fþ‡GúÓ²‹ì8‘Õöûñhý™Œÿï,’òÿ(bh�)V¤9ŠÇ¦T–Õ(ZVU,Ë#¿nýgiå™a¬5E…ØJë~XíÖÛøZ1»n“/©ƒ²”/ä’|<3)¾ŒhQ×PJ籯�ºÄÜ0lìxV¬2ô?+»ø'FÙ{äÿp"wˆ6ãÿ;$øgV¦)U– ÅË<¦dÄG;YŠ¶ÿ€€}Õõ¿Ív�7ÅÎÍÝŒÆ\wº¼ŠŒºê´Ëw…¼ê®G¥vÓQ3Û‘cü“™¹CíkØ9Ì =ø“ -ÀOJBgà?%»ø'NÛ÷©ÿ|´þóYþßy$Á¿"I4‹!¢€ŠE…R…¦fM´�ÅWµÿÅ:5¿cÖë¨]7Y»ÏwÆÅ°ÒœÊùòí¼·” -Us,Wà2Yÿ㙹Q�Í00¢wû¨OH·òÿsp€ìÈpТ‚ºJS’3Up()þ]äÅ;¦÷8ÿgè£ø^ä3ûÿ,ò<NUú¾7¥Ì¦•ïݨšàâ=.–õ»}_Ô–ËÁdqØjáî þ/®ÿ˜TÖS"�,“x^úS4藤гë9ùþ6ŸG_nú?ó4Ozî—'LÊF7]\þóóßÿñ%X®?è~˜ºèúCôSÿÁ€Îƒ¿ÀØœ?@ÝxPAÔÑ|ÐLó-ÑðÝ_ÿëÒ …Ñš!áÞ| ì«Hg<ÄÁqñ7úõŸ——¤û$°ÈNäë_KÍboÔºŠ~ûšþE@ûík`&ú-zþ\à re'´µ¯—Iã×ˤ‹êh«¨;óÛNèÝW÷·ÞÅi‘È'Ç—ýN-÷·ßÉ£ý-·�~ÎŽºcÒ=íp‚‰;Oæ‘åþõÒO†½ŒæâÓô?uÅÕ2lj›9VPX:‹¼þsKªÿ=ÿŠ?þåùìQü“åGž×ÿ=óZj4f¼èNð2d¬n/t¦HîAÅïQ‰7•Û¶Ý6Kõ#ÌŠÏÜ@‹±7Gs,Îý²H\(`ÛÈL>|w/—ytÏ')þ‰“þÝâ¿xé(þ“c²úog‘çñ¿s%Iw€ªˆÚr¢±³Ö¸ù¹jwç½²8iòÎÐh^웃ú¯ $€´&… ÜR´@ÉÉ”UÁ´ Ê}JtãÏÍÝØd3bæzÑÖÇ°õ‹O$^,u�ýŽ–ÀrMô:Ö'ßtth‹Í“§¹ø=yŧ¯bÞç/¹Kâô½Œn1ìOI]ÚhÀ ÕMI^Úú„T�'„Q$ è)z›®ög¤±IñWéý¬›Ž -^?ôþöÿ¼DgëÿYäyüW¯g²·®²•z'а“G,{¦)·%½-ÖÐd+eajxÀÿ‚Á<2¾ì˜Î°PB¸ÛQ—s[ûlÐs|ŸI¯m½ú±¡gn^ùè‘’*± B/!™‹�L(c²6×€äÂÖ¸Ù»™F6`Êà–öØ<áæ}B)½7V¢"¥á|yù#¾÷?ôß”=ü¿Wþ—x˜ÿÉñÙùÏyäyü‹f[ú²òWj½-6Ö·S^Œ6£ågÍÑR+‘U”òƳÙAþ7YccŒlÑA~çÙÿ7xüé…°t|öQ@6[oupÿGùŸ"ŸåžENøifh¡JR§Ð¬rc0¬·|WveIW!Í5æVQеuË”&wù_[†‡Ð²¡ƒ‰l,Ÿ“ÃÿµweMã@ø_¡7v«pÊ9œë †ÙY$Ì$aŠJù'fÛÈNB¨ýñ«nÉŽc˜À Ìîªß,Ù–úk–ü‹ÌxJ®†Û¹úéYÿì‹þ?]ÿß„ÖÛÿùÐ=} gå~óöxÒ:ëÏîÝFð¹K›‡q·¯U-»rÙïv¯>_Æ…õ¿çŒÂÀ_¤“h/IÇŸ¡ÃÃÜœpÞ&UèpÖf‹§4_Ýý²eBûßêéÏgí¿Q7Šã¥QUóÿ7¡õötùÐuÎ/®*þçú÷ìSpräÝ ØøÛуuQù ¿œ‡×)Þÿ&þ¡€ÌØøÇSë–Úpóã¾<·!ÞñE”¦Üí$nÈÈW¼ôÑñâÈ7øoˆ™¯à¤nã#,½a›³MþÒpsù‰Oöv0g?c„²H²€óeéñ^SbQ‰éÐB9%ÁcNyî‚áüI\~ñÑ”ùšÅ<êÞ@̉í{öw>¯{´—Bxíì0Z@¢8$2ÑËI¼„x—¹Z,œã—¹š‰R5ÎÿF$w{ƒmûÄ+ͺ«’yb·˜Ñe±gùTÖhIDï#ј—Ï«A‰Ã« ’ñ¯Æ ÙÜó}ÞDQÄÈsQPÁ’‹åHfšFòFjNvxÕâyÈœgN“U|¡\M6ÞøKÐ'»°»] 8x(•| $x ù6«q® nHÕ°rš_ªŽkžÀ ËeEuð›B¥@Pê._„’ ÏÄ2SF1 ¸@“ $i›”ÈQ’AÃtÊ^†ŽÝ—Cü¤~² |ñŒÂ9B7¯¿8ÌÍ(ÞâdŠ’š{ 4ðxêjA«Ü ?.»ôŸ‡‚l)ô¬¾±‡#{^<DêäKNs)<$ƒºSð³ryáPQ -ÔWl‰ª£0'-¬ í½,û% ‡(g¦?’—±&uêЄO…âÍwAƒ±ÉµÍ¬SÉ «½‹BÓ¯Ž&uåEdÚ’Èo’«è‰HÊû÷mAŒA¾ÜÁr=‡=eŒÎ™`R¤é¼Ü()²h^sŒÚÎß™0RpMSXbàï8M/@˜æ|Ó -§œ|¦è½ÇÈÙCØ v²u_4Äõ%Æœw×6*:”òæJ/F*B®ñ¿D³'†ËŸ¬Bª¼µa~²ôÄh)P‘Êù?™1½gÇ&u¡½¦ƒ“ð²d€üFÀ%™ý4¶²…U[’ï:û—Õ«£MÕ'å¶ñ -¥Œ×Õh+ëôÿ°/yW,&átó»@ÏÆÁý?…û?êêþ7!¨UqZToRC3ËFK«µÜ²Ö4ʺV¡†n†a;–³Éó?·ÆÃÉiÏéÜ}ÐÓYßIÆÆ9µ¾G¬sÐü6ªüqõçÝØ:¡¼ÿ#Åfvp?MÁ¾pW†nÁá/–#¼t=G”M¼8æ ÑÈ.7FÇËŸƒ¿·Þ“rö?åƒMÀœnv3èYû/íŸCNùß„„ý7ì -†ô†fènU«5 ªµêåºV®ZŽUo•m×®oÒþŽ~R9ìöo»úÕÅõþ§xzquпÍÙy¯±æðHØ›Ë> ŸZèʪx¡ý¿süGãñÿ¿àueÿo@ëít^-×®£ÆAk1ÿ¢vLéõI·?"§ãÍ´ãùu¯ò±ìöûÇz!þ+žÛDŒÔt£0#ÏÝF&<c9W·‹–ÇüVöÒäGáBFº„‘†Ÿ¥gk,ã~è”ßz⣷y†Äi~›Ì<>§™ì˜²÷Òݲ MÆaáïæX—ÂfÊV¹á”7H³^Óõenœ0góoEU¤H‘"EŠ)R¤H‘"EŠ)R´ú¾vêØ�h� \ No newline at end of file +‹�Y•d�í}érãH’fÿÖSpǶMÓfJ܇¬¬wxˆEñI‘Ôô,�H¸„ƒ×æ¾ÏÎÿ}ƒ~±�À[UYU] O3%€îqø¡Z®6¹Rã¿Aý‰uÛt®¶õ—SEQÇåÈÿ¢ ÆÿSLrNˆÆÿr4GÓ´ Ð"Íä(†âê/9êd=x‡"òÔ¸+Q8~0ºò`hê¸dŸp5Ãx§äYrëÿÿE(ŠLý:' +¬ÆI¬ +¨ê€C¢T†á�MC(‰Ï1ªvaAg¨¹:ºÎþ~a\çB?B:ò£#G3Qp}‘Ëi®c˜Cr”Ë\°Bd_Ùȉ®bæÂ嶫GÚO²7¥„/Íõã"0²B%i\Á`t+õòñæü=òóö¢#˜*^æ¦ÉÕÔªO^É ÎiäA·Xü"¹Yz M×Ág¦ŽTè+†éáÅ™ÃQx£/<ßâKþuΉ,ë³¢¡‰«_&]WÈÃ)1Š®ãÆ//†¦3Œß¹óÛ5s9ªÈºÎåɹ„>fA×Y•+ºx\\ç¦f`ªÂ6½Y¿:MItü¦¼¿ +¢¹]–¥˜¸þ`´t7eZfˆ›ýß¹Üÿ¹øj>ÌèkH=ÿª9sîéTÀùO‰<»'ÿi†¥3ùJ俦#¦5H,¥Nƒ*Y�´Ê 9êüoÿ§’îÆcµ_/Ètw^šÞÔ&Ëâ£ô\àÌ( +åÕFÌ0tUd²ÃˆÛ’î+~]ÀÄ‚s-Ù©·${*®W%"û@ª¿^k-Ñ/ÛXêæVW/Eú%uùº8¤øÇŠåÝô5o•:<Ù~i€+C'-ÿ˜ˆ?Ä?>„–5¢ƒ‚“cøXfÿóþÏA þUI¤ I–�Ãóÿœ�Ê1Ðtª¤)^’þ3Л†a·@¾Ð^òayܳŸ‚G±Ž‚È)97ætêzνS[Rµ~³ôN}íø.!r69@¿ øÖÞ€ûku6`oú¦ ýE.×åÒZ�=y5_5"{ÿ!&§AÿðÏè‘c2üŸƒüó<‡(–£€ÌSp"%�È«<À`• 1gpŸ‰ P‚ªÞX>¨ÚCk"rž7ìôdö&äÀÍ}yQ7»Ï5Uºà?æÔ¢Ÿ9‚þ¸w±¿]cüTƒÂœÄRb½„»©oJÎ+^Ãÿð¼ë?”ÀÓë?|†ÿ³P‚IÒeCâ ŠH¯²@†ª�4Äñ‚UC¥ÿãá©ÿ#BkYm§WÐæójR~¬I)µq{¢yl}|;tž| X§uWÙ +Ã߶¶ó¦H ýNš{C"TØŠ®ã 9¾k. +1–¢Èe(ðÚ’Nü¾Î%ño£ €Ct*åÿ—à_8˜ÿóB†ÿsP‚¨B^æYø±àC2àA`T âéü‚ù?_«ëÖðjÕ¹2Ÿ:Ú’éÐtéëßté;¾=¼³¤B0ÐËA~K¬øù?F½Eô/¬Z|`¯ÖÖ"@ü®r«ë_8ƒ8Ä¿‡û¨„fh¡SI€£ø§÷õ?ÍgóÿóP:þgD†: x^ÆúŸƒ2PyÚ�¢fÈ´ÁЋÄÏÿK/,BÏïÏÑM»KÎiòSÃá¼õR,ÔÓ=1•{z¸ô §~pøϾ ôMSo`ü ÂÞ3ô~®¸Î|º@‡ø]×:¡òÿËö©Ãý_AÌðJ×ÿU£Ä�VäeÀ d$k€åYd c±x8ÉþoÌ\'!Ì‹ sü hÐöç-R%Zñti:¯ßŒŒš3ï?kÒx0º[‚#éÅ)æ¯ìêÆhÿ7¹–$ 2Wxe!á3÷}ÉÛ½ÒñôD1\߆á®g©KƒÓI€cúŸÅ…4Ë24þC‹±þ§˜lüJí?$F†”€ÀbÕω4$Y“°8Py–ÒCäØâ?á«÷a+N¬6_éõýÙò 6½Ás93m.u™r™î‹lÃðÃN0¦ÉzÿŠ)/V:·3+Qº„wÉÿ>ò,óò‚�éi¿ð·‘O`Zú%gÓ¿ °X¹»ÆÕ¾úµÿaè�ÿ£ÐÆ¢œoþϲøg>Ãÿ9(ÿsA£ePxþ/€,‹ño ™c(•Çé”ø¿i´¬°ÛjÚCMè¶_»çú¦b¡âÍý˜LªóhFÚ 3‰ñ¿fʵ�¸ëÔr%\òäÀz†ócô6þCÓ>‘8®ÿé=üã@fÿsJðš¥UÈcü‹*à�¬j"@"Ç0,%!MSO‰ÿñÜ(Z³çÊc¿¢kÓš@o¢=ÏK·Ý'·Q¹aÛ6S|¶ÊÑÍ.þ SÊ�Rú¦êÁ?:Xí_LóïÑëø·]'l�ðúŸc3ýJðo,kèxêo ã_b4€áÿP"T I’UþÃößÁÿ³XŠÝYMééúôAs0곊¤ƒ�HåçI§.T‡õY™Bµ þc¦Ü½3ÈÐ~Œ^Çÿét?¡£øçöõ?Íp™þ?¥ë¼ ‹‹§þ´*“ñ¿TAR ëº."VÅïÿ}ÿ5qñbjƒI—FÞ“u?os4ê–èÆ"—qAKfŸ·ôÿ¡îG÷c…Ÿéû#ô:þgpðGæÿ\¶ÿwJ÷ÿ)žyU:OÖÿYZ’ ‹Å F¢yê¤ãÿYµÄõ÷I™•‡Sf:¬p¶–Ï—Û•¥¿@´¸˜,õ™ï佉1ØàŸ0å.þ{¸ämíÿ^/Cÿ1zÿýsâŸ?ĶþJðO!UÔ Æe ãßÀG:Ì Ã€‚JiH?%þc41[Q_~TŸZŒ"w…™{Pó¥/Î<£~;ÔZKký0å.þ¸äíy¦û?@oãßBApš€£øç÷õ?K³þÏB þYAÆPWu ã_gd<õÇã^–tš’41>ìÿ÷üóOœÕüjó¦Yœ¸ nà5!Õ)•Œ>4+wFgiÞ‡3Ëîε]ü¯™òPKñnà[!Ûx…ðo¹§týé·ãŸÊöÿÎDéþŸ¦rš$ª€fhp¼ˆõ?ÀC$Œ)Q:éøßJA¯?*DwêCmÆ]³pó<¾´£r¡lkj·§Ì4£®º‰ï3\#¾”´î>1rÙŒ¬_råÜø—\¶ïÿàßFºÙgõÿafÿ|æÿwJí8åu^"à À‰:$tNF*¥2’¡žTÿ;Ë^Ç<P÷+}EêX!*ç#Yd-Û˜Øwë¾SöóÉú_” )>"2ÓŸ÷è�ÿÁÈõÃÓ�Žëÿýù?Å1ÙúßY(ÿãá¿AÑ:€‚(‘M�Oý@FeyŽ2Aÿ°ýÿG🷖h±óRÅ)ç•[ùŽé–î[¼•¥ç±°xJUÛRŸg©caÊøÇ¥GПAÿ}ŠñœÐ±Plü…¯ˆâ1‰ðküôù?Gáñ?Çq<ƒÑ/$óžËðJ÷ÿñ×âUÉ€Ãc ñ".4¤xJ¥?<þÝÿ÷H «?êhÏ/´ÅB|~hŒš·ÕÛgW}nÝë“|ù©÷Ä>ÈŒWßþ\É…ÇÕ¹ŽÍ7½06迼¼ÀxˆÂ›˜É;¥.¶ÔF« :_ý¾Œ¶ñ?5Ñ,Á¿Cþ‘e%þG3{øg.ÃÿY(Õÿ†®1"Ãcý/àñ¿¬A ²ÄP54•Uu–{kÿ?Ñ·ï�ÂMÇ‚-?¬8óÛñ³.ÞBèÝó ÙÑÐdF·Le^6§áС»Fl¬tã€OV—q§2ðþýàDn€GÇÿ¢°šÉæÿg¡ÿkœÆÆ0d²þ‡Çÿ*+�’ÈR†F1oÌÿO„ÿ©5XúÀ÷C®×<в|.(—Ç S¶æbÉd<ÔogE¿»Á?fеîo·3Ìÿ½ƒÿ�A_)&þ°óß%Žêf_ÿ³"›ùÿž…üÓ<KâˆÁ/Q%Ê2€’¡ë´FŒÞ˜ÿŸÿÆSÙ¸Ÿ*·ËÂã ˜ywªQâ!û4vFêM£+XÓG ¦ 6øßfÐõ8 æâÂlp”ŽãßGþ\¿G�Å?·?ÿçh>Ûÿ;¥úŸ1T9†>$öÿ,ËYt ‹”4ÁÀ³€ÏÕÿÂm±Ñã&ó¨êê]žôZ‚Ú‘ŠÆúâÕF»¨ôÜ û\;À û )Ý„û1! +^”Mvèü‡'XýûÈú»?þç…ÿg¡ÿ’%$! Q28Cä€Ä°*`Éú?¢hYd?ìÿû#ð¯-å—žOOºƒ*eó·¥Àçûm¡9 Ÿ9Šèè!ð=ÄmàŸðç +÷ä,Ãöo£×ñ¯¯j®íAí{ÇñÏïã_²ý¿³PêÿK´F3,Ð$Š"öÿ"PECŒAé¢(‹úñÿ?°þ/ÒÅvÞWêMm %a\á*u‹®æ;8²Ñ¢[.Ütò½”†›õÿ”?W ˜žf«ÿ¿…ÞÁÿùÖÿê`ý_ÌÖÿÏB þ9Jð7á*óà2þ"@B´D¥ÒÜïÿ@�ØJY1ÜÁØvžÚ¾\ó´WìÀû¥ì5èü¢¤+¥`²oGµ�ØYÿ'ðÑn¸ÝL¥ÿó9~K'6üMéþùXÿoÅÿ£EŠÎÆÿg¡÷aùÈUÊ h•îúsÕzÐn©±6¦F¡RËOM%˜Dv½ÜšMJ{á6 u¥Óññ0=\8Ð6µ$„gŠ?Rn˜ÈÒW‡ÖºÐ +IÌ;*ç#ü£ôŒÄäOøÞäh¿QüIG +´L$çIì¼ä8ļŸQ‘,l6$Aõð—¼XÇ$Œ¦±�“Î¥ÿ•…FŒÿ84#‘èø‹Äñ -Ó™(îù¾©ÿþHàÇðOÄÿgÙ,þïyèHœ} æ»TØ`l›Û“¦3oPSAa€Rk—‡êKµÛÔvñ[Ã؈àd ÿÈËä«U°Ò¯Ñÿt¼þ¿«ÿ©lÿÿ,ô>þ‘$±ð6ðCzVöƒ…n º¼Ä5ŸõbÛx\P¥pò,W—w*¿—ÄwgX‰Øf˜*ѯ~ÌŒÞ xÀõÕøç¹=üb6ÿ?ñÓ¹ŸP|«°´ê.Ï ‘yWÕÊMóáÖ¤ +ƒ—çiS¿qÄâȈ¨]ü{ži+*µ‘˜K\ÈgBàH)þC×Ç“¦dßOuõÅyó1ìÿO¶ÿJãÿè´!ñ"*bÈþ%�™¥x@±š¦K<ÅIÌoÉÿ÷Êþ_rHfÛÇ,]W|iô^ ù[ÊcQ|Å-U½Q›å¦¢øT¹kç‹öÓ–%aÙ‹˜•Ó̸qAº¬n¶ý’CÒef†X4E6ÉÅ· ÖŸÌUÒþ'ÝÝõ,Ò ¯›L"èÓ¡À‚!TÕ +bly´öƒò˜Az;ÇUâN®Þ›†™Ïµ•}«[œõû“…ŒOVÿˆÿÃìë!‹ÿzŒ¬MÜþÀs^ ï*rQ^Þ ÊIÕ{¡*òÍ»°$Ïå¨Ãƒùÿf嬲qóœ¶Â’d4#]˜ZRK7}¤a,,’9ßß~#•‚N9Q€tņF®Ë"ÛÃ0"?þýËR²¶z•:ÿz4…|§SŠ‚#ø§ij?þ'®—Åÿ<¥úŸçdÄp:àyŠœ.B !Á�ª! +-¨Ç4þW½R-„Âd¦DÍQ½B½„LÉy4D»Ýæ[ú\lÉ\»Z÷ÕÖE¢Ð/;d“*§úÄ€/áÖë܆]×™zhê"aéx ’*qø ,‘ —JbŸÇƒkñ¥MŠ¤B\¸ó´¤`;Ÿx\aw�±¾sä[wÄe?p§½ûÄgÛ·QVUd6·‡QèzˆK²uÝ?¥òÿSG€ÇÆ#ì¯ÿÒb6þ;½/§Ëfs\c{zAQü¨œBçaæ˜JW{Vm4áo9•ÑçJ8Ï慎UÂ&åQ \J0rgʺž6rMík¦@?5öÓS°+ã„q_WtÿÜîøñ8$Ãÿ9(ÿ *Å< ø +,àdI-! s,b!XÖøùâáÆÚ8»ìã‹£‹d‚[cY¡¿•]qwå«ßÉÏDûøýäàèúOíã_d2ÿϳPÿ2hÈR€ˆ8 $^â�dÚ ƒ%Ë4'œÿ¡z_°ŠÕH¬S¬ª¶��,(¶ªšek*QL©Z,zÓÔÞÛÑ׆žu×ÉÞ?ÿ[3 óŸÿ}ù–Pav£À~õ{þ£Ò>þ—óßçëýýþÅÌþã,”à_åE–3 +†J“ø€"%Í Ê@’(¡“Ædù"2zª³„æ"Ô†,ÔÐ|¾Tn;ÓhVtå¹£Ùö#ûIü7Ì•;ø‡žg™Ùtyÿl†ÿÐÿ6~§Ÿ´pÿâþþÈeñßÎCG6ck=$"®Å£¨wzÔÊ÷nÓA·þܬ˜Î2¼ õ¶ØÃxÙñÒq/¯sŽJŒ°É"@¼/qÓËA'ˆÏ@8[$—Áh²W`»{ùn‰³×j0Ü+ÐFÁ¦ä«ßüƒÖøwÐÐ M~‚Èñýß½õ?†¢ùlýï,ô>þ£Ô¬t*rø$ô^–vÐQÅšÑ,šü¢Ùë·çù:=GÚ ÜR÷öéÞ¯}h£ØcÅlé¶HàF>Yô‹4<æœü >@é‡áÇ®[¸ƒ® Mg·4@ÖýHW67Ì)éÃd?Jkü“-ú/²ÿŒí¿öí¿³ýß³Ðûø×_ܨüò ú}}z3ÜAu®šN¹QéDÅù`dr¦Ñ©·šÊÞò�´b€ƒ5äÓÁ"ÀÀýÝâ4bãn!Ù!Múù±eÕ[Mm)ë-ç°U«‰¬@iC_m™®*u3»že›=Û·~H*¤›¡»¥`µALÃr¯tøCížõû't_ºÿGSÌÿ'å;½Ð Pò›N±þìXR¡VnË xrx�ž–ùAåaâ5Ý}ý{_*Aè'–ñ|e+‰ä-3û¯÷á&æb{V`+dëߦ@Üx:xð‘íâ6¡ƒG„™·ž…X†¥æ#õ|wŒÛ‹L<ÈýëZõyîåÖäã*Ê&„ü(½àúÛ7#ô®t?ò uåúÃØ*-ø¶Õ±àÛ_c³µÕ¾¿'q±œùdÄ’˜‚šËÍ.ÈöUÇ wj¤¦‘gnˆÅËZŠÁÆå5ßÒ{¥Ã¸¢I¬æBe%’²Å’ŸŒÒ@j_jÿ‹'{ö¿\¶ÿ{z_þ3Z¿ØÖúÝÆC{P)ÉÀÜ+8Žk½z×*Ío^ž—·twWþ u›˜|ÄîóÙÎî”’XW0^AýðäÙBD¡j§Z:†ŽÛ³ÿ`.óÿ?ì?h‘çtpÄÿ)È'D †&@NÖù3ãÿ…Ûx™-›l±£jy8l½j}!Tg5[Y¶G}—Õ8Ðv¿5\;ýìòéVr RºÉ°åýãYÑÐ$#ºd¯óz§kRår3íLv”þô&®¯à?ö±BS›,N#ŽâŸßÏÿÇòt†ÿ³PÿKä¡DAhÉÿ‰TȈ¢„tÄ2ŒÛÿÿþƒ†Ê÷íkÜz½Éô‘ê ê‚2ª½ŒA§ý©:õ'K^, µÁÿ!Ÿ®…@ _Z‰€\RåUIðV;?xÿ‘s: pÿžýÃQ™ÿïy(Íÿk°HxÊ`�ÇÉ*UN´ŽhÄ*Dü§âß*Õd{Z¹ÍGR{&ù!ˆŠ ®í‹‹>ÿÔôKÍù@ƒ³‰ZÕ…Éþ÷øôu °ªtDì·õ3HWðïùn²¢vª Àqý0þÄÌþó,”êVFå ²8F’€*ò,à‘fƒÑUùSñ_§K…΋Yåôª[ç<Îí1cª}Û[húÝ"ÿÐEr 4O’7éöøtüfR¼èâþâã8,àÛ`¯µŸû„^ä’Õù3âŸÄÿÚÿٞ…ÒøßP4Ib€ bÿÉÊ@feè/³ªF‹‡>ÿLAŽÊRýFa½ÚÖ›ùÑ(”zåçç[ºyß(Øs +nuekü¿Ë§ü'ÅZØmâg\xÿœžrõï#úüÏÐYþÏóPjÿ-©”FAâð¡‘ü<P¦ñ$@@’Š§æœŽÞÈÿyü?ŒôÀ}n>(^Œ1†ù^„¸åÔo)áÍ“k<BŽ4p»Iÿ³Í§kðß8IV`ùxÔŸÊ€è]°ÕÌO(�^Áäœxp|þ¿ÿƒe²ý¿óPšÿ[`x• j”8ÏdCDÀ0(FÒ5ƒÑŒO]ÿ¿/xáØ1¢F-ôêb8±ús·1Db§¶æÖdag´â–þßçÓµxD¶;ÝL�ðèßþÐà ÁŸ@¼ŽÿÓÎ�Žëþ�ÿL¦ÿÏB)þ É`Y¢dh€Ó + J3�HÕ(U¦$ãÃþŸ?‚ÿ¢Ø—Fr¹gÍ&-yÁÛN—¹_ás¥˜×5ᮬ6ŸÔÑtlå7;ø}Ð]]øÐ`¿™Ÿk°‹’A‰36(ñáiÀqüïÏÿY6‹ÿrJãI*” Y$»~:àX2PUH<%±%N}#ÿïiò•oÙ1:£>M•Ë`eù¥iܨԶüjó)°óî=·NÿsȧkP WráåV"ñ/þ=øÛJÄ}ZI‚7Zû)$À+ø× £!ë„à(þÅÃýÿ,þçy(]ÿg /Ð:£ €£ HŒ€ñ/sbˆƒ®ðáø/?‚gê?ÈjÙ´–…©Í¨ã†ì·œrÉ+äE½PèŽÛ£v;êmPênðȧ›d`ñ¥C ƒšæFNø®$x¥Ý?¯(xÿ‘sâÀñùÿÁø_Ìæÿç¡ÿ:…®ÓFf0þ H” �–W¡D³<%£_ÿÿ�þÛÍ ÛÙGMÒé;D³%ÌW{ÆH„ÊbÖﳆøÐqÄ µÁÿ+|º5P`ðZ‹^èÇ´ÂŽ\ß\¢Ïp8†Z`öã¿pYþŸóq +Š]‚Ìò)6±>&™5߇ìR`õ@ªq˦¿°n†åÇÉ£Ö°-è÷fF¥³—8mLOuc¸+9¾ú‰3Ú¦ÿšÿYÉ?ÿòøüAü–ÍìÿÎBoÎd†^Ð7M£\—¥Ùbb™…ÂCÞ·yÚ+‚¶í÷Ñ ˆDì‚<ù(¹Vìä죗Èô‘œ0PfÐwLgxÃ’^¢¨ýËÈ÷]Ÿ¤ d"!‡Ã¤v&7>…Rü?Ò/Ã?ËäÿbéLÿŸ…ÞÇÿ“Üü>sÛìP|½W½• æ¶×z)ß2Ç[iª-M}6öbÏu÷â?›~dâŽO¹ýÅÖ]’lܦ–®ƒvÊo"ßõзçÈ7µÑ*+o<‘Ø ± N¿þeˆ—ÌÛðã´Â¿i_§ÿ©ýüŸKeûg¡÷ñO÷ cÛѼ§Lk’ÂWÃ@w±Tƒ ¹[¸ë)«.Pl3èíÇ oó8žƒe:(P,õX‘3ë"<í0´ì«_ÃOK)þã4`_7þ§3ýÿEtÌ/W»ri90Æ*«æ•—»‡åè*Ž +V$(|o.\9”†ñŸÜ™b:Ò")‘g¹¤½Kó:ÔŠ–ˆ7ോu +/ņsÓŽl%ΊÇÐB–Aø³(Å¿i“ 4ÃÓÇ~'ttýØÿîÅËìÏCGã´Ã;crßíŒîP™r¦·¿h><úÕÁí|x÷8n<N;\™÷[»ø{h¨¼DižL‘Ïàû¥üÒ�à(þ¹ýøB–ÿ÷Lt$þcä÷î`à§Ë=Ïä_fùÒ˜nDF yšsžìj}?=pèºÖÄijò¡žAÿL)þÓuÖ¯‰ÿJŒÿEŠÉöÿÏBGâ?³ÀKKfÊp>ö‹5ó…Z”´qÞÐô¹ÈÌèe‡nÈú\€{ùßâe|<韒Ýø‘©g‹qPJñoCÓú²ù?ÆýÁüŸÉæÿg¡÷ñšÐh2ÎÖ•çn³-*\U¿¡–]I–õ¶µ¬º7»ø߉x¼^¢÷FžB8-ÚàŸxJËÇóçd©ýý?QÈò¿œ‡ÞÇÿ3_뛆_ÅÛ›üpNݶ³×‘fíp\ŽR¡$7üÈ5zû=÷ A¼xwù$qaÜÈðrÛü–«»Qï:ñ5…¸Z.ôÿùƒœj"'üçÿ¯r5äk&¹>uC‘Çøþùe&M~ðœè*5Ž>{þ7Žó¿eùÎBiüA34†åibÿËé@Öð© ³¼Dk+@ú”ùßjJa$ÑnPZt[Ü쉺v•º^¨¿L–5IæcXÔËcÙvf±½oÊ™óÞ-[þœ{øë( ![é^>˜Î$À’„„›×I bL,z§hÇàògÏ·ƒ°ùKò¿ää2ÿßóPÿO…"ÃEN§u Òj‡xš™Sâ?€ÞÉJ·nE^´*¥7¬<1Ó®ÞJmíŽzbü¢õüCbïsæ +ýyrBb|Ä&ù{Àß¾ˆ±Â`BÌ &ÁOô×iÿ†ëâYÛŒÿ…ý/°Yü¿³PÿGÖMA 0ÅÎÐ 2Œ(IU Iâié´ùŸÅ…oõø¥¼Ô‡*DZ¹m¾ô«íZ˸“öc»Á•Ô^YÌ—µ$“|Ì™›_&Vê:JÃyì +€6™n˜Žáúv,2ô¿KÛø'“²¯ðÿavÿLÿï<”àŸF´Æ3TIÔ�'q‡G’ˆ‡ÿ<Ô sRýßb!;6ÜÊÓ„2Øöx~ßhuñØ*?òª·”Z s�&Ž+Åø'œ¹Ú×trœšÃ௠+€ I ÿmãŸlÚ~MþçýÏgþç¡ÿ²(RŒ¡!�eœ È@¦e + ƒáuR¼&œtþ_(ÖÀô‰^.áÃ]–ô—ü£RŒnc)_¾Ÿvæb¡j)Ò6OôÌ™+ЈBŸí¢>^ ÕÈÿ’s9xâ ã¡‚ºH]’3Q°O)þ=äÇ#¦¯Xÿ§©û\-›ÿŸ…ÞÇ©ÊhAàհ󊪣‘Q|1ŠåáÓ#õRÔçóÞhö™jáiÏþ/Îÿ˜d¦�l8Oìy©Üèu’èÙó] ÁÚŸg¸4½ôÄ€A¨pGjî¦'LÒâ]~ûÇÕ¿ÿ¯ëp~÷œá÷¡i|{è ¿ã|ßMÍýÌŒï†5ý® Íï*Äïºe}GsôÞßþç7“$bDsÍŠHLáuÃßpÃA¸À2ã{l?Ñßþñí©> +m2ùõ”ÅÎ yüý×ô/‚úß ÍÐBÇýÏÕÝ0Wv#Gÿõ[Røë·¤Šêê\þûV |ö«÷÷ÎÅn‘( Ë—ÝLJܿýéÚ¿åf0È9¸ºAªçð'™ñæÉÏÜýæáÆ“f¿Å¹¼àUcÞ¶Pœ-SÙ8næ^f¨ÌòúÏM©ü÷ƒÏJþø—ø0öLæÿuz_þw¬;±^Ÿp‚72æm·»ÆlH©Á¼ ºETâ,ù¾å´¬Ò^þG<³cÁ35ÑL±ãbÌc±ï—MìBi¬FÐq•Ü|{,—íèžRü“Mú/³ÿâÄCÿ/.Ëÿvzÿ‹>ÔoDñ ‚[AŸtfÒ@/?Uö´SF Îí››…SÙËÿš„•„¥P¼Il)Š’†$ I¼*”�5•½Htãûæ*ŒX¹ú˜Îðò‚Ø‹¥@ÿæÐö,t¥¹öE`¹C˜H‹Õ“£ØøœqéQ÷ù:÷lú~Ã?1‹$/-nÃZ˜Ê¦Ä/m†Ìáˆd�'£ˆ‘SÔÚ]íÏÆ&Åœ¥÷jh¹*<½è1üóÌý·Èfúÿ,ô>þ«wÉ_V™ÛÚc¨n¹ZÙ·,©%o±²Ö,æ¶Ì¾¬íÅ1àO¾œ8œi£$àZ<ú6uô+ÛÔ|7pðŠÔZç«ùÖê(@›TÉœÁ0ò“ sÀ$dL¬Í35ra=¹Ù¹ˆ§F¦aji·´Æª‡«ó$¤ôN[‰PÀBýþx¿úƒþFÚÁÿWù ûþŸ—ÿœ‡ÞÇ¿`µx¾Þ¯É‹`¡ÖZB}y?æôÐlÑz~ÒÌõÑ¢ÀW&“=ÿo¢ccŒ¬ÑAÞóä_ z"Q:®’ÁÖg-Çÿÿ§ fþŸg¡#û44SEñ±Ð¨² +ìך'y’8T5ŠOí"?,<,›–8zÚóÿZGxˆl›t°3$ê3‹äð#2â¹2,×ýœÐ1]ÿãø}üÓl6ÿ?½ÿîÀ¨-Q“nKãª-7ÛÓ¹!::’JA½ XUczíz½_hõ‚½ù¿©+®c-VƒhÓSÒ…?ž"'3ÓÑÝÙuŽ%!u¯.'g«ëYì—O¦ÿŸêýyÿ¢Àïë^²ñÿYè}üWz˺Þ}ê3ƒ¶iXsÿ¶Ýy¨˜/4¬,Õ'¦F|É1ï÷ã¿%9âÆ|›´Dêi$òc>õÛHêX‰•fºÛ™3\?÷ŸqÐGÝ<.�Yü¯sÿI©¯ãS2õ&ۜ׹ï Þ\~å'¿\ÄWòë¦C7½enAüËVî#øIs*BNΆ:Ú»ÏUÒÆÀðÕEÎqg¯6ûŸü(ò- ú&2þ‹Øœh–©Mð¸:Ù£%v)9ütšë-H!tôœãUÎœæL÷/nUõÝYõrëÉ’»Üþ%ÅõFçæ:Gö‰w^£kìöÌLv‹}4E~`ªJŸ¨³îš{¦|ü(§ãÇ$=ÿ‘žÍL˯Èóð2¸£I“¸[zÚ�¹í—–´/ð£3××Ü8 +w9àáϤÅsñšìŽÁîç²@ÜØhÕÃø†¿‡%ð#×wÚ/Ž? RAü‚¶¾üæÓá/Ÿ#J÷5þøDCäÓ‘ûÅß_$w"×`l’‘›â2Ò +y%qOVïä*W ׬ùãŽË1G’¤•$YHÖâ}Dü´öÄ„“¬ú'Îä5&µpÖ*ýr¿‡5b÷ÔÝí¶sÃÛ÷¾úÓ³Bú¦b&HW +vküÿ8nßžXêlßyõ27'Å€FDÖYqIÐä.äy“ ¡äÑã/_YÝìš¼ïͽ?ÂdŽ«`õÝ)´”4Øø>¯¥ßTG! +§AÄ_‰¼&Òôªg1'ìJ—Œ›þèÜDL]ñ-Ö,u +NÊý{Új"‰r«¶ÿöY,æ“[XéžHüƒ-ɆÙ@‹|kgÌ뎥]ºÊ53˜[Z2¹„¶¿œ4Düï ÑøK#2ňÓqBÓ‰ÙtKáCÕps˜á×ú—CÎù%f»¤¹ôí~HÅì¯Dç|ùW‹__ü¾÷®¶áŠt3L@š˜\Çy‰¦¯¨Ë|„ÕÇû-¬6Ø,½¢-®Xõó'1}¥`K¿ø=.e/55? s¥ý0o'V{¼•¶ûþÓÇIfG§zžUk' UÃï=ѧÌÿãõßÅC,ª…íF§ß:jÿEâÿìäÿ£(:‹ÿqJµ]F”„x�i^œlÐ@âi +0ˆ§Tžç5]ÕOéÿ3æ—µ†~_x)RjmÚÖÃßEêÄóïÒPaÊý»—‘áÝ/Ý4þÇŠ7×N€ùUI,/SÓ-â\`©†O—ž=äÛfàFl6r—Œ(6ÉÁ¿ú|%má?ÂÊÆ É˜v3è(þéü™ý÷y(Á¿¨1X Q"à)ƒœÄ# ´�hVÕUA¦5CN‰ýžz`Jõö˜úOÏùÛ z*y÷"“JsVõ»†çKƒJ‚ÿmÞÜÈ€íÒ=9@gràCãÿ‹í?ÄÃü_‚˜íÿž…ÞÇ錥¹gO,puÕ·ž¸*BÏõ¶Ýéxú½9ÕÙsƒ¹¡v»JíÙÔóu.ÑÔè"¶Â\(‰=w,67Ä%±-çîvÑÆÍogaU|0Þ»°šÂ¤À_—¯çëo¬C¯Ú{ñ ÖÁÊPRcuý:75ñ˜ÞõSÁ´®·Ú-³Q8r÷²›Çϲ·™¢Y®á" Em®¡ŸÚÙü+š¢f”QFg¦ÿ�J†B�Z� \ No newline at end of file -- GitLab