.../optional/views.view.aggregator_sources.yml | 6 +- .../config/optional/views.view.block_content.yml | 4 +- .../views.view.test_comment_field_name.yml | 2 +- .../test_views/views.view.test_contact_link.yml | 4 +- ....test_entity_reference_entity_test_mul_view.yml | 2 +- ...view.test_entity_reference_entity_test_view.yml | 2 +- ...tity_reference_reverse_entity_test_mul_view.yml | 2 +- ...t_entity_reference_reverse_entity_test_view.yml | 2 +- .../file/config/optional/views.view.files.yml | 6 +- .../Plugin/views/filter/HistoryUserTimestamp.php | 4 +- .../node/config/optional/views.view.content.yml | 4 +- .../src/Plugin/views/argument_default/Node.php | 16 +- .../rest/src/Plugin/views/style/Serializer.php | 16 +- .../system/src/Plugin/views/field/BulkForm.php | 15 +- .../fixtures/update/drupal-8.bare.standard.php.gz | 847 +++++++++++---------- .../config/optional/views.view.taxonomy_term.yml | 6 +- .../src/Plugin/views/argument_default/Tid.php | 16 +- .../views.view.test_taxonomy_term_relationship.yml | 2 +- .../user/src/Plugin/views/access/Permission.php | 16 +- core/modules/user/src/Plugin/views/access/Role.php | 15 +- .../Plugin/views/argument_default/CurrentUser.php | 16 +- .../src/Plugin/views/argument_default/User.php | 16 +- core/modules/views/config/schema/views.schema.yml | 12 +- .../views/src/Entity/Render/RendererBase.php | 16 +- core/modules/views/src/Entity/View.php | 10 +- .../views/src/Plugin/CacheablePluginInterface.php | 35 - .../Plugin/views/argument/ArgumentPluginBase.php | 57 +- .../src/Plugin/views/argument_default/Fixed.php | 16 +- .../views/argument_default/QueryParameter.php | 16 +- .../src/Plugin/views/argument_default/Raw.php | 16 +- .../src/Plugin/views/cache/CachePluginBase.php | 11 +- .../src/Plugin/views/display/DisplayPluginBase.php | 39 +- .../views/display/DisplayPluginInterface.php | 12 +- .../views/exposed_form/ExposedFormPluginBase.php | 16 +- .../modules/views/src/Plugin/views/field/Field.php | 21 +- .../src/Plugin/views/filter/FilterPluginBase.php | 16 +- .../views/src/Plugin/views/pager/SqlBase.php | 16 +- .../src/Plugin/views/query/QueryPluginBase.php | 15 +- .../modules/views/src/Plugin/views/sort/Random.php | 17 +- .../views/src/Plugin/views/sort/SortPluginBase.php | 16 +- .../modules/views/src/Plugin/views/style/Table.php | 15 +- core/modules/views/src/Tests/GlossaryTest.php | 11 + .../test_views/views.view.numeric_test.yml | 4 +- .../views.view.test_entity_test_link.yml | 2 +- .../test_views/views.view.test_feed_icon.yml | 6 +- ...views.view.test_field_field_attachment_test.yml | 2 +- .../views.view.test_row_render_cache.yml | 2 +- 47 files changed, 799 insertions(+), 619 deletions(-) diff --git a/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml b/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml index cccd45b..c4d6a15 100644 --- a/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml +++ b/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml @@ -141,7 +141,7 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 feed_1: display_plugin: feed id: feed_1 @@ -398,7 +398,7 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 page_1: display_plugin: page id: page_1 @@ -418,4 +418,4 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/block_content/config/optional/views.view.block_content.yml b/core/modules/block_content/config/optional/views.view.block_content.yml index ad5e1f9..5409102 100644 --- a/core/modules/block_content/config/optional/views.view.block_content.yml +++ b/core/modules/block_content/config/optional/views.view.block_content.yml @@ -464,7 +464,7 @@ display: - 'languages:language_content' - 'languages:language_interface' - url - cacheable: false + max_age: 0 page_1: display_plugin: page id: page_1 @@ -486,4 +486,4 @@ display: - 'languages:language_content' - 'languages:language_interface' - url - cacheable: false + max_age: 0 diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_field_name.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_field_name.yml index 9938a65..57ba803 100644 --- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_field_name.yml +++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_field_name.yml @@ -200,4 +200,4 @@ display: contexts: - languages - user - cacheable: false + max_age: 0 diff --git a/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml b/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml index 84b2a2b..9ba9e55 100644 --- a/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml +++ b/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml @@ -133,7 +133,7 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 page_1: display_plugin: page id: page_1 @@ -146,4 +146,4 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_mul_view.yml b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_mul_view.yml index 489ea04..e95103a 100644 --- a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_mul_view.yml +++ b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_mul_view.yml @@ -117,4 +117,4 @@ display: contexts: - languages - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_view.yml b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_view.yml index 291b474..d190788 100644 --- a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_view.yml +++ b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_entity_test_view.yml @@ -118,4 +118,4 @@ display: - entity_test_view_grants - languages - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_mul_view.yml b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_mul_view.yml index 33911a6..ff48483 100644 --- a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_mul_view.yml +++ b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_mul_view.yml @@ -127,4 +127,4 @@ display: - entity_test_view_grants - languages - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_view.yml b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_view.yml index c281ef5c..6cb60b6 100644 --- a/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_view.yml +++ b/core/modules/entity_reference/tests/modules/entity_reference_test_views/test_views/views.view.test_entity_reference_reverse_entity_test_view.yml @@ -126,4 +126,4 @@ display: contexts: - languages - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/file/config/optional/views.view.files.yml b/core/modules/file/config/optional/views.view.files.yml index 5e727fb..f9a521c 100644 --- a/core/modules/file/config/optional/views.view.files.yml +++ b/core/modules/file/config/optional/views.view.files.yml @@ -716,7 +716,7 @@ display: contexts: - languages - url - cacheable: false + max_age: 0 page_1: display_plugin: page id: page_1 @@ -749,7 +749,7 @@ display: contexts: - languages - url - cacheable: false + max_age: 0 page_2: display_plugin: page id: page_2 @@ -1103,4 +1103,4 @@ display: contexts: - languages - url - cacheable: false + max_age: 0 diff --git a/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php b/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php index 4117ec0..2216927 100644 --- a/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php +++ b/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php @@ -102,9 +102,9 @@ public function adminSummary() { /** * {@inheritdoc} */ - public function isCacheable() { + public function getCacheMaxAge() { // This filter depends on the current time and therefore is never cacheable. - return FALSE; + return 0; } } diff --git a/core/modules/node/config/optional/views.view.content.yml b/core/modules/node/config/optional/views.view.content.yml index c8201f2..4214f79 100644 --- a/core/modules/node/config/optional/views.view.content.yml +++ b/core/modules/node/config/optional/views.view.content.yml @@ -563,7 +563,7 @@ display: - url - user - 'user.node_grants:view' - cacheable: false + max_age: 0 page_1: display_options: path: admin/content/node @@ -591,4 +591,4 @@ display: - url - user - 'user.node_grants:view' - cacheable: false + max_age: 0 diff --git a/core/modules/node/src/Plugin/views/argument_default/Node.php b/core/modules/node/src/Plugin/views/argument_default/Node.php index 556b9aa..afd66da 100644 --- a/core/modules/node/src/Plugin/views/argument_default/Node.php +++ b/core/modules/node/src/Plugin/views/argument_default/Node.php @@ -7,8 +7,9 @@ namespace Drupal\node\Plugin\views\argument_default; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Routing\RouteMatchInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase; use Drupal\node\NodeInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -23,7 +24,7 @@ * title = @Translation("Content ID from URL") * ) */ -class Node extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class Node extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { /** * The route match. @@ -75,8 +76,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -86,4 +87,11 @@ public function getCacheContexts() { return ['url']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/rest/src/Plugin/views/style/Serializer.php b/core/modules/rest/src/Plugin/views/style/Serializer.php index 67a8364..ceccd61 100644 --- a/core/modules/rest/src/Plugin/views/style/Serializer.php +++ b/core/modules/rest/src/Plugin/views/style/Serializer.php @@ -7,8 +7,9 @@ namespace Drupal\rest\Plugin\views\style; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\ViewExecutable; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\style\StylePluginBase; @@ -27,7 +28,7 @@ * display_types = {"data"} * ) */ -class Serializer extends StylePluginBase implements CacheablePluginInterface { +class Serializer extends StylePluginBase implements CacheableDependencyInterface { /** * Overrides \Drupal\views\Plugin\views\style\StylePluginBase::$usesRowPlugin. @@ -153,8 +154,8 @@ public function getFormats() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -164,4 +165,11 @@ public function getCacheContexts() { return ['request_format']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/system/src/Plugin/views/field/BulkForm.php b/core/modules/system/src/Plugin/views/field/BulkForm.php index 609d4c0..3a3b65c 100644 --- a/core/modules/system/src/Plugin/views/field/BulkForm.php +++ b/core/modules/system/src/Plugin/views/field/BulkForm.php @@ -7,6 +7,7 @@ namespace Drupal\system\Plugin\views\field; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\RevisionableInterface; @@ -15,7 +16,6 @@ use Drupal\Core\Routing\RedirectDestinationTrait; use Drupal\Core\TypedData\TranslatableInterface; use Drupal\views\Entity\Render\EntityTranslationRenderTrait; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\field\FieldPluginBase; use Drupal\views\Plugin\views\field\UncacheableFieldHandlerTrait; @@ -29,7 +29,7 @@ * * @ViewsField("bulk_form") */ -class BulkForm extends FieldPluginBase implements CacheablePluginInterface { +class BulkForm extends FieldPluginBase implements CacheableDependencyInterface { use RedirectDestinationTrait; use UncacheableFieldHandlerTrait; @@ -114,10 +114,10 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o /** * {@inheritdoc} */ - public function isCacheable() { + public function getCacheMaxAge() { // @todo Consider making the bulk operation form cacheable. See // https://www.drupal.org/node/2503009. - return FALSE; + return 0; } /** @@ -130,6 +130,13 @@ public function getCacheContexts() { /** * {@inheritdoc} */ + public function getCacheTags() { + return []; + } + + /** + * {@inheritdoc} + */ public function getEntityTypeId() { return $this->getEntityType(); } diff --git a/core/modules/system/tests/fixtures/update/drupal-8.bare.standard.php.gz b/core/modules/system/tests/fixtures/update/drupal-8.bare.standard.php.gz index 9ccbb09..8db76e8 100644 --- a/core/modules/system/tests/fixtures/update/drupal-8.bare.standard.php.gz +++ b/core/modules/system/tests/fixtures/update/drupal-8.bare.standard.php.gz @@ -1,409 +1,440 @@ -~Udrupal-8.bare.standard.phpF O _B(~)y<-vclk15H*HHImE[C7' A$X*ɌY@"/aɼL_gi\Z<0z* }b]Vr^,/I?yqFj߮7h5uO2ek4{U8^}^ym -i5_c-Ϣ&#_̋ YfwCіe&-W"Rb`})PU_5FU*շeN7A2CXv}WFoeKXe9OP%ڈZuoiiYY9OJ)%6ċ~&|YeM@@~f~[(O?I:䑁 -}/qRdgnOH<^kc髗?|S,j7e],q3O+:׀KTPŘf}>O:BH`:X !5ۧ߿Ѝ70OV~՝ -i1ܴ,~t0=gPecq1Vuz&k/Cd_NV7 >j8ۉ:&%\̘imͲuYM3}Ñ p7]{lALё$PfF-b>QUD;ikhQDPG0!V_N@UNW Ļ wgD-Jyy@1yKY|dӛSQ )&x;'Ό`mp݃^\9?%uixIgDt?k%Zq8k%޳VBs!@Ƅz]Ҡ|`sò Zm;ޚvUT˵]޲aH܎fAdt,VN ˎ^NOܡ]ZVwL$4 inz;=/$(}E8}l|0%^1qKa:g~r'g~r'֓379s379s܄#P P xRiW4grf)grf)Y -SfəəO MMxnRa2ju'g~r'g~r{u\ -j&N%Z<ֵK=zu#C:&4C{3`밻r 8Tߛς;p?M@&G99y7{zy*&FIF4Dpn=jZb~ r!f-K*LvasVwhn@oHWa^3JC2MIۺj7gl'Jlǁ~lh: -Z1Y崐jnvgj[Ro[,7/s$6Ӫ)FO Fp1*t)XָZKKOȖ ݒϨJw\ XګK/ūJ͑{A'vQ_yW`QxR_EkeL^fdYdyhyqaCBlӹKA`Ired n`*s:Bo)f؂)=@0jë N8k2z;#<޴9R5L4SX߲IۺxR {7^iWReM Emm ~^))~(UVLǰDA~3q-̂8L8\7TI*kO!==7{R'A3QI_u9-]e(S2/5FeaF;2=ǵLضi$\':6c1hFK:aߐb' DK;>2o 6X$6@Ż8@N&9a=)91%RqlODz^s04̧!He@#-}'|Da%|֋pa?=1A͑F׻ѐ &:6o6X-~S#5A$vP!dqe9v( -ӳ2ی/1CYbG?D|iV8-xɿ]\] u} ɤ R7lǦ秄c(! ,'2_tL{KhvtCVh ?VW.5~UW2Fq&6L/Cr-s\3pb+C~4h 'f{nۮ' -cNȎ,J2s#όr6-VɵtGD [ ܩ>-W*uq^%i(R\{ij1±!~!^n!^T -Gk2TNdl[Jqؽ=j2KXJs]‹ \37߷4`ͷg3 _YPNWn85<ÙGn PWP l:&==:"3lB$,cCh rԙil 1x,b3LcКZIC4 њ-hMk8ǟQZ8  !hN?0mcӵBrq; TDudZ^*EA6*uZ+ayHO -YD dhߐ%P 2(@cEmDc34%yp< t=PfoR:뎬hɧACft>/ԢG=rǀ3]_28KPXg|$ܴ1M1qNxqM wҗI]VCEGÅE#~9%<+S&Dpى@U].yN8 (Ʀ$gij?#"b]M|Y,Kw}Va}R}'[5SV>/LbQ)}Av_QXTX\z%Dd ǬQ^P("%K^uQFx -tFFYxBr<^nƾ嚖z7z[˜1'yO[ &sc s,_ALl]I:̌ui+CphNLuST ʺBzNBm-!AJ -p8Ȍ)ޱy>h>$LB(g%]]Hy޼ 1/rAY@9)9FBȄ:1)t%;Џ}'&aON|-rgMv?CGsR XVŇI}FhMx x=a*&z1~Y8ĖL"pwM7 Ru$Peݟ_5ӿ 3; !H0NyQjifQYԋ$<9v5՞d* vQ!zPU]1yq\rXaVׇŧ{S˪|SC1]NR|[ι]o}[Tl*Hs A QtbuPuE>+X^R@:r`n,r>ֈ6OGw=V42slyd<t,۩;ӋnZ2YY]]{=6wmV~5rk -aYC@*Pe# mdܣ~~G(oS1lStܣNNf'p[s3+!'̓ Mz==`k) alillGs2y~ p`Pg {Oe*]Abe -刬p+*,&OҚ0p~.rY.^`@e0q! `2GIorRC ީ5}Gp,?nxIQ; ^QZdP8ޟ|HʒvYQ 3Z/)^G25IX+ݦBɨѓH_+7/%< ތ57'Zr+e>˧=KÞ䎓 ,5ܵġȉ,}?>G'u֫#j b%gP i!(~ #pZ}'~2݋|4s4"gϣ)J3#dz^ȳr8G^ Єj9G%BjEo; C=,󑇅Cdd̦K4_, -@@Hכj\z`|r(gTa96S΄ّAjbŦ[ +Yen9af%;&x>Z 7Hkʫۥ יCt6$q W=3 l(#30ۋl|vGý F6_r=;\F<iQqV0:yDozF,,"6 0vVj!P1[YmY<.[~%""dS,IvBP;qf;LeI-I\<陇\ug1{^6 }z܂FIwŁ ap} †VeA)O_(+KuyfBG&P{hPxĜ}KP^gt"UD&N -O,nlqvnKkKΚu.,DQ'ljy"xa}1ps - 99x[kqx.a)m5Fn9^8Ήl'#R{Qh>>>"r۞qԑeΒRnŝ&@9^V*k{y;&G {TYUA03,mS -LY>J*zߓ}yE[O+ _>\OnŇ2HJc#Lĩ#Q$?~q2s첲'|7R`: 40'5X ^FN IM/_ -MHdi)$ 0 c';!@%Ïj=o9&}p8P[ ;J<%G&!*ddJ,HAayIp!hEb!ssO͵Og- 9EjDR]:-) TĚC]=lʼnL Ŗeh< , -hc,> qptX:5tVio%yk!p{MMγ_K6o2Oe?Wʼn'|A&͈=NqTzU#QE x(x;FN+:P2}MmOPz=@]k&+F^fM/rOyV<'zā* 'ŋi^7 };Ϥ{ql. (FNvaYx'@.%tϊ`BCk%$١鸶 zxx`+!sC.b< n4 ,s| !]Ȫ (ؘvxvB?#>\Xwfk IG!]@G[4!8>!з SM_U;V/y+Z5)rȥ~O:m('ҨD dVLKa *wWEU"'Ro;!73/vid^n1R}!$ C(-":)*8/[Y\1K@ ^I ^ժ,{4Cdd~N\*MxK3%T59mhw{:CAc&g6M!yhɟk\)Yq'ۢ&)cH XNdkDvL%+^:#?#_7Íx4Y,ELmtG-ݨY4GD .h]n?7uj7[!wB[5ZfʸeߑEM種ʼn"<,qH&Tf5"ON(2˂\<͠l2@JaJtT?e+T,~"IaipLU`,#rj& xSdͱ -5h> 2|r@3Ef[iEmCe>rpl:9 &m&VI9By0&4phHGZM2'AZr>UBiaMّizam<2z=GrzdlL &iʌۭ. lႛ2x -|[5$ZDVD RnQn#YXڍ"w{6rGv؋4B1>%S' W֕;ص;mw/ -Z7N%S;|pYN-`򸁉J+ _-o"7!7B6|2p p]7xЗR6fF&lS FJYRY -{Al roq!$Sh ]D!"p5eE(JF@ixQqdx*Hl̋z} jHEvx̊Z<2~o4=2.kLp=2~-݄J^]쮞W6ť.p%5Dyْ&9w2Z*@Oqmrv:&Q屉]ZC<f*+hNz!Z mU3v&7ܲdFd FtTq5JM/Bf8Q"igj;L!wDIRI>naXg3`u8DYsLI`;f;֙Xyy l9NAA i\'qr?i-:f& )L{S! =tQ^0aan $ CAPut|HX7d dmW Rlb6w [jUD}RT2NoHIj3N%| -T _{?{j@ۯRI(s-=IsJ}%[C[jKİUө^ݒMך.Y0D͇ǨtGQd%k kncexKӴڝwlST` يp- {tl .MBb-g/v"no+r"uxNnj0 Z6r\UbQhGzC$PόMOTb9'ͨ8=N-VVYE&"]4.P9P5/Lc_//SryC~$2E^/x4w#L]B򤥹@} tӐ70@nyCM&t[mП`BHg0>uB mdYneP0TKC\2v1(aܷR(=:%:([Q41$L/G1eOPY<9#nk/OmgI)yđYDŐ2Ӕ\<"x$};!IRc-`&% u)4"猥Мxe)u~)ɧ#'8=}ֱ$tqrAVZKӅ4A31@.@$Ey -K~dPĨQkƪ% $4F%j./ ko~E^)n]4Ƚؽ轾pb; "?1eÜF@@T[j]C9| Ȁ(z>߆ G n!ꦃ@,^J\Ҹ vX%& K.Y~yxޫqw\ X=t8TȌ`i"bvI7TJleObZ@ݳ8a>&Gh?KRH ;ń.F+-!ႋY 0m|N]<+ {@{X!3{]o[99Ψe٬*X.i|EQɐH\b{yx3(  -q~GYfoTmh@ ւ3c,TZ b$]]TC»ܧE4YϦb;q2pfR~sNyG)鯪'i}֟Egh;4(Od`QEYjq;r;!h> - R=P}eEcnNxkfcolTD~nd.IFw.Eߕrb؃aL!qBrp^噖b{c3X@JJf;kʼ_K`RdB$*3MX@Ge$EsYj]8*ip"_UM6K{q  @ٯ; - hy[NUE;BCP'0LJݮf tx~@+wNK/p]smWLuFQ@!Je(]!mgF 7xy ʽv'òk%͠xAdiYdzyJ0LO-ƃ"RnV,'%MA:s z5slӡe9i>J@&2&J(,}~A%fUޘ93rC|kTO,Ys]ӵ1KD}YKt](z6K%<80k1c=Kno'/0q(Qa3n9rHMYg/Ǝ ; 5huqp'wA섔 bVk+u,AlBN23'Ih~M3~)k D=p0\,X_/6KSHUoy"2l!{RCCV)L&"`"pߋ-z'!Gwg -pח淛"rտi[&--)~Ki8-oo^}_B/ߦ MG̖hB6 ]?~,BQF" g/7< /} ,x^oٛ}=1k҂˗d7µp=xjcI(l35.x"nɰ́F3GQj@@L mU=Ⓡ.\nBAfep'TV\15cO$yžkHrlO ⅡeF8y(&"˩O `~$͛AJT0#~򟦥55kmrz1,W?'j'jafZb0+9 uhX68?)Cs :" rr-[+dYy5l.oe4E%rrGAY ,ԴeYo_/EVe]KM+c,ٲ"R[acJnY|NwU\QԒhɨob6z͈ -yy81;8m-Y\|lzJZԳ\r -flwBG:#k!)A9)|ɣ]`B|V+;v%7q!M@ᠭɁBVO^Ʌ"oʊ̃l1(p|R މ\<zgԚdȋN+YΏSMuI67Eg)ԍv̧T`{ܖpqRgӥp䖳kn:n`:٦닢_qk&_s]ſKiAzZ JM(8;)'")/a< mǺeuE r.VjAx}3K ۰2`Ы|ZЉ!HZ~+[ܡ(2(^& -Yސ&_=[j]Pӽk\0^ @SzUD$; j~MP\?2tp&t A^O$Sop_ -"1Hon H'ZarӤ -z4&X- 3-AhD6'^Ӝ-f|pQNvB~n UÍARj4`?V 1r1@F"W\?U7Kq W^D1(WL%Æ+xg1ٴcpqE`X!k5_E7^rɟ?}a(y<-Krߖol+-ti|CP@&^&em>oV6{dlj\D2]?V -t([S[H3fNV8 `uaN-ltB_4瀨O0PMB.\S!ŠbŲ$IFD2e™#0o 9t= O5@k&^_JDj~ 5PEEwx@JIY/ѰwI) 0\J> -^dd a<F=[ 'e-ZÉ$ݶq77 jVć -jN5Xѷx T& 0!]LNAg\$L0aNZMtp|Sd7XZmϫCYE@}?Ui -!8b#7W^)uYfU0!:r:FR]]&;## 9o hV+"Sd)e+4TPkrG lRŧ՚ H7 -:Hf&Vi02s8EsDAtl$E0 NLZY\,%NE˄Ke5) -D51o@A/ -`qi|rQF'RHgL:tѪ(qh \u*^艧w /pBZ)u`ÈSb}A!Dk:K~2o+L\ܛ Ř΂.V -R~\aHp?]v0#Jd;bJ:{)F g@ǢHIF. -%?gvcΤs^˿Wp dnre@J`.wj -%@b^K8%X[$ vo]=OBIK2 -fj!r3%+l3d 3'u5=t.ߘ^!⧧9mǟŏ[G<?n]D'm pPOG͟y7??R#ǗM-/{7/zͳ\.2/Z|Ew߼|/un_7d.W_/dBb.fݟ~YLHVl_7/^pM~>ťxU׿=Y`-VOŪ_R\`V/^? ?t_b)|{cW[8c\z/7=)wW#T6 ڂ,\r^dv9EEWRJ[@ VJMl󹐒&gA~^rэ$&1-a 0>n5yKI8ɼ"1MX}h+ŨܒW Cf-S,e]0qYyLԃ7a~RADth Ο NeVU%YQSKEoJJLխcbz]2엿Չ|2TyنG]X -v' ]$<9[JJ-ҳExw3^JBKPIY ے%YPL2%V w*GjF` |nH}y( G(~NY'3vwcC,P*-κ3R,Qf& qѫz֋("gU珮%Y(݌HEֽF[3r5jbjo~RECTdYH؂C9Fö2nVj&}Ot># lc@%]|?}_`';*9iQ{C5l9>ݕ e`fRUa!ZTmЩT- \/@^8{ZgMRg5+\6JBk -R]-\t4X h73꬯mo&<R$[ݕXQC"Yѐ+1]j}`m=_lMN߈qq;@+ɶQLd`"OԴ$vE$szVu}Ŵ-;]idaj,KHQy'Uu-$;Z[qIn"rvwtO" -¬=|G"q pIZ Sq؃3ܩ؃"| ;8>ҎEqnyI/-;1M,{Az'-0/>iީ8ADgz].1/De9HPbQ_K#*"e`imxDM*d@ H؁e8Jd"Axch+֙),0,<֙Y8,ϟ_LQGgkvkɮzMi0=7YjRUڴo;u/޶՛lMxr$Jܐ"I*Hܛ@vzjŪ.@&x8` jW% [q!A-*@h^ȑdgJrcͫ15(> z][Fbx< -Uw ttGqE^H`F3 10w\i۲-'9i8&㿂qF.2Nܭ,dDSΘNdlG? S}f T5dxFMƁerÅ,bW VS``?ݿ #FBEֱJ)|Om[.:IwE^pdF"=*S||اJ,hoLN +_Udrupal-8.bare.standard.phpF OU/!pbǷ|3Xk4uQ.276+47 뱑XmUY|߾)j:2ޢڸK\5,5765JP, uZ5*ZB7c߭3tyX^2q->%aɼL_gi\Z<0z* }b]Vr^,/I?yqFj߭7h5uO2ek4{U8^}^ym +i5_c Ϣ&#_̋ YfwCіe&-W"R``})PU_5FU*7eN7A2CXv}[FeKXe9OP%ڈ@QK8)Z 8]=/+|5[_ 8tφxqyyO?k4 /SB~k +%s' Z7<6PUO`Pdןe;qT T$-p@p;NԢԟG 4zG(1G9 +-kM<'{e (BCsj6 +H) { އ ۲!l$Bݙn>=t&(tu_VĽB-z#)qgY'3g=d4'YMԀNX~SZlnXvDrTǴmzRޭjb[9 ,,Ū)d5)t;4 NdqF5X u|d 罋M1A"/b)WOOx~2vt&gnr&gnpĜʙʙP:-jR,R,e;Ka3?93?9 UəəM*LFOO'# iw̤Ch5~)愻z7ZX{ce߁'1gQm^- ^ ӵJ{Zs(}ap<{L6tߡtkr`\]#3[&BZ.Q%-oܽ7Hs)Ȫ;}hX.a9׍rX ̂kf 8Tߛς;p?M@&G&99y7; ]wRc倉Qo"> f<[Oڻ;d$B\`T{9&nz}28Rc +Hpe#K@oHWa^IC MIۺ'%j7gl'Jlǁ~lj: +Z1Y崐jnvgj[Ro[,7,s$6Ӫ)FO Fp1*t)XָZKKOȖ ݒϨJw\ X /J͑;A'v.Q_zi}f<&,۴1qFQж#=O^&6y@Fy8,҅IK%xb_yL:.`| _r/m_>Zk Be 4WM?&X՘,##$%M̚O7EGO_溠8XaFQx)N?z!@Oa>`*s:/B SnͰS{؍҇,;uK-лa͑2o` + M#P'Ŝ0i˺S(&f#Bl'Ǟmzf[QjIƖVpV#IʺkChڕThSC~ۢgB_xJJJFQ6eiƦDesɢJRC|'u<ˑt9U@Ҫ;2.\j$Yyc? ";4QH;qbrsxMrWұf4%oE1qVf"ۥw;VHw ˑgA9B9s ,O#Ƨd:0ז:Kr9>z{U$3F ~$ +S=m/r'4 I`yWcuJO*܆mDmsM5Ma|*']J+8|:<f"?7 MR/2CO(pb߷d VPX]C|l{\k?+{V&!6=di!sӵ]'qgl4 -5LBw𓦅w~ e2NROçs/;eV9=||0g} VkEfuZ5{)"RIk]9sKOp6-}?=33C=3b0\|rĞX(k -ƼAh;n9 wKWws{Ko ҇li=v%,¤֧'g|<'琢SQ;5}tN#bC4![ԫS}e0c}x{^ |Ѝ`;qBGˆ -3vlPմڌI=m]=u%|%ܯa%-^P*fY=brV5N.בYf&;Vtg':'nߎUc3j ̙:f+Ti;c'?uq6nr}x锸%^ؠE}rGdaS*wcr\nhMǔؿB -ˍtLd'baç&K%N:Bۤkd %E@f=zei38E$͜A -a,عf&rlz (a,( #;8IK(K_eCžNፒ@t@[}uErcvM7aI W -uBSz) p1uU:e}3.c iU;e՞6f3Ťa+m&yyy]bwăR %Oۭzo[6<>k "ЅGO" -oYI -M㓠|CȁrcK$:<<b?4ω@<׹2^r}Fs[9g7£;i覔hQǦUI䢭,#̳3}APjV.x qqva%Ogjҥ=4 6y-S6-afnT]ù}xRkTijZmC2SMz^J0)Tqu,Z4Ϝ;⡹̜hx.ExnJn" |o@ǟY\I>m?*OeS'%ŮZDVfdE>R;q[ܣyOOt^6 r&=7vy|lҙ"W7_"G+}m1gB=u·IUW? '4O?χJ4_qBa*Ġ^̸ul-Ell3z5!UYOb Zl'^dI=ZK"#ˇO Z:8&Ou`<mvAT;δ<5^8|ٝAAAHNmWFi4~E{Ȱn_z -&-[殠z/y)(߲0 ld#}(#'s@;qx2Ӑ=4d;N-џSF܉)4 9ۏX95VFCt"6[q]_7=c }!t0R8A UѡQAU˥\n3i\c%N gj#M2/[~׋-s4%m\5wY⵭!KG=u7=>>(IQIc2DhҬu - -ZҬ z(+rBdp%SQaoK3;FGkd]i{rbL4rd@pC% -*t1 ՉAWz]n!s8k)Ň߉zORRܕw7}fTOalBQsLE)YЮНMnKT]fp -ǖ6k0f{4''f/8oC~c>Ɔ=9@F -Gba@&= hv/80%j0Тݙi9iG(dϜ"6>38*q `)ape݇6jc#ND`o73q|Uʹu`ȓ"5Of]vȹ˨7:08cJvqB)T+"G*$򚜬&$gmscb8j'IZ9F|] D9wdݕWX|IeF^GqhM ]3,t;lGSjk+C ~H͉J *1d6Qn:S?a46j57n0%z?xBԙ66ZD;vqg54AҊ)>O{<T綩-hiBGi}۽aA!P66G[MmݽWOq D=D䜴9;ǚзЧí4c|Wл[3;s>awʞ#? -ixŁlM)^g(,migvogvo-708\pg.n_cOVg:Cn8,ir}wB^Cp,8BۍSݸ3?<韾uD;1v:Su~Ow:pIDM5-8מ5|xSxO ].x3םۼSi/p.["+܈g:5nJ"~NuXX% :h*~W4odo_Ljq -}q=<3cvL3JM$82/LwIu>V<^%r]'|fZT6vu{O ;Roit=wgͥBW0iRW+1@,hN?c)$΢C 5\i¡6jXw a[ קp?!R4ḃCVEލ{Ғn>Tq$/:KN#̡sQl׬ޟ+R5{ U^ndn-Mp ^Z,i3J|>$[%\E*Apf ^K'uzǥ9Z5UWk:$Dy xIy,_J^Ki/s=*:ő#yvM{i,!2\ J&v4t`)kI 뼯LҳA< OGl~G;s3R;K4Iϒ iG jsxM1V`oj@_vkIU{cғOpl/ÒcAFЩ7k69!"ĉ3 kt1^߽ם#3uHT3m5і'f9.FEΖXy|WKmh#uJճJj HVAن獑 gԧ4+(z4fjO 6ԋ"+ͻmrʊ\B#d q;Fmj[❾i* p6 s!3> hQaA4 *XP|["^ew_yGlF78^yGJʜG%4mFXT3IichEzWdw3BE -_(a,Ik3T /IcIYˆ.=KQ9TGiyXu gm+Ij>%Cх>)o)H\.s]*{&l]v\Ŝ8PwbOH*U2vPokUvU,LT_"e1Iqb:o^&BvnvxybEqrTsℨ.Uߵ*ٻtc*\kXbI&->kʆf\_n(I^Nz_N)[ʘ YNbF9L;ԺO8b.z۹vԯ᚝BVͬq3{+zz󖪼-^ NaL6Wz2yZBl^i{MnWp͗,HyZ(}U5A! jʆ:g,:;r'D{5]"|QS>QSA[wSݏv -(NiIi׎ h(h>2{u{rz\穷ܵ[_w]]\7TUT(:~ `)}?hgl]ta[.䤋??}3FPw!i31anptPc(}σs@0ڦ#j@盹zđXmκZi?a~q'*VV7;Jl'%f˛-x$H*|%ᒇ0+ +kG oH ߼x6xIͺ3uk?`q4.d|у9x|=żCn20vmxaDgjNf55e`&;K? ż5|؉8]g%{ln; -r]_|f?88BuvĐA5>X5dm'*qu}v!RZIGmvW 1'.]UwRL.98b {b=Mݽ7׶s7,,V=mJЮik]Mcuh?|،148,0/]. 3x_ԄR^a~vܖs&Tpf2H,>X.z'Ews[%߃itRuJ)d$tfgxf x}V9X&8*%[=s'^S^T^mZ-%OeCy_fPMݞGg4iIuK%)Sh僼.໡jw0wW&`S+,Jq8!ߍuн(!'i~[\ זpD'$κ\|w}7i=:.^S_8@mֹ+uHV#],TțzޖrAh 9MPo:Xfx}"+5 6/n8u;%2 R=v|nfp(лunӒ«{/yC4hx^&=3t[.ouq#Yڅs03 V56gnn{]VI5]˨w?yO2IRU XkEy22K -b\oA&[k_#Wvz )Vj`{ʢ3ƿO԰͜yFe^Y%e5zۭ[a]C/5x{s..`˹Db(Jmǵ w"=0BMf屌o%zqL,|8q :7EgabGpVv?{#^@^xG#/;֨.mu̔.<5~̡k]UWSݫ*9 :1F4]:%ӥUkϤY&@+P6D`6g0qg FMydDL/!%8^}C r>z,aa{./g40u+T7ef>[1d7]Z;*A2u`i}iw3x2@r9|Uڅ4l9;,ǞnQyƼVM!MP{T@?$h"ٺi| /[^Y75LloxiyU;dw>&Cb]or6,-_gb!on/’Gӹunу̺r}QԚ)lVI>Qu4K&" #CH]('L=ϛ"yeRXW&L0Z6u2(N#saxiM^7_u%LEg0=C>h땠"avJvFh5ydC0Y Bc \k3]ITgS~W{`̇4 /,xvOjUum<_ZծPpyo LkѰ{5O*ktJW)9LƅV&}<.~g=ē|]5SFyO(#,]|&$RO߰O9cՕ_\Gة{LnV'oÜ=*h837Tl.?FJx4lcWm K>|klGhlŇ 88('f1LmNUɼD8g:QȬ7ł X )PM(n̈́աM*Q5Ï ܛI:A5YUؤ`%d$Aަ -; EBq04@tm(vZwEIm06\F\bİSk!3|)I뤾PAt l/M1R]Zu~r!wB 2BR5,XNLىDxN$,N8ivDN躔Hٲ;OLkU~TF繱CC;Iŗj[ /["2e.mZFYaMc| C(eXRZ-Ω-D -LdVċ,)r7zS;'|A5G ٘u]UHa \xb$lk1O ;sTV>(Q݄P~c}^9BgbR6 ILoIigd'?vD"ۄDT목|kD~%JV0c'J^6ϩɭiK;!b#iݔ->%TH^(^3M3ٔ~ex([8.Lc)/z9mxPvB.dUå"-'qF! QHv)jZٚͨ-ND%uDZၕ0o9˞[-;ᐢ| jM}j~uM~)A.PEaJQy?T?fКZ6_pܚ kgԥ$&Bq u͔]=ɣ#,~=zʫ`F)4O|}3"h!>l ?H}$G6nhԓ!.hL)[9ID.4"!aD$,'U8$iÓ/j꥜63mZeUΥ8RD 3eN*wfUF%Cf(Q~OxbtD3xK:\3'* K?.D: F(:Ki4c*h6;EUVY9*g5-츊l?.\[R?"9*XԟXo1K8ƽ_د$d8II(&zZ[&!Էnv:sX`;[ݹ:{_uYg۬8+-E{5RL}* 4&MY=$Zꬾ:ꫳꬾ:9_؈Oc0V8c1 H!ۧ-s' ^ߚ<-V$Zq2=NR![)VNv?x/&_pMN!w!g癕OJ\TK_{nJSӋ'Tz7GcJ|Ŭö{]bäNtLQt0N KwEa?6#e~=;I##E!^٧f'ĴΏ̏kjH>]LBd_go}Q{XvdDaN3&x]b`W,0a׿}?-Xsn'= _}=+_3&"E!y\ԟSA =O䤉\m'.ȯ?/04"Ӳ,j/xTنu~:i -̥N>~է*7:G]qxXou|ڬu?ׯN;r8gb)z'؀Η0Sʮ R<1;|4Bn9MVs`g34_q@[sX( -rHSzMkϿ*/ۧ-{ zc,zI~Q -[|K~#J`l$~8n0GBa7ZrPuao|sQ -V^O6O rV}оV:rXVy="w&s} "Ϡb^x\CJF곡T ɉaTc=|S5|,gא))rje9%hC=}VhvdU6L.)N0̗6oGus5i(o6T]?ғ[ Xy&oFUrbU^6 -˚Ehn:yM!_*Ӯfٖ(gj[賛o'} iTȿ,ojyy^Wه[R2,ܼ}+ڑO=wQCorl7 eMf+ܰC{ZYT4ƨ (Բ:;;P\X9VF˼\Nz 6DG΍DJ(Kw Xv9 on`:UݍzAwvxT`o  -n -vEiY Y+[UWSʩ1Ǫ 4nUi,)r~F81[Ei񶝖U1=D;+J-"t/[lhp#2 6JP-}ޕ,]o翙+'Dp|2c|3J'h-ٺ gفl7IߢAl95tW.8_Y+eDfK;|){rhQ{VKB>wpSB$4Z-6' < ዠXo>㶡EelxOkmI09A'0wri^rqH rs?;]pv{iU5l2m疗ieg lZ= uн iltKhxa^ O6Q #>sqЃ8̫8\ 'mk;dSw 03~6MO8pC?}Vi_ya4%,C t f9iwa7]x4(*h{{۩I;묩WЁPNzeZZi Y\5{҆Ye[Ykw|ʶq.әFQܞFMCNY:O)Nʉs?ie`oțFm9<:a͞IaдrJX͌mO0u}u-tlDV a~4rZ!2.b'n[B2F7װFmM]x42 -KнfY Цvhr[„ceQ\NqӘFd~v6*J0dC;C ݯ]&*,,In{Xש -/Xv]Ƌ,ݪZTtKqᜥU]MKJ'6hݩ[9 0+hnhU6)-+<1iw܏t', -iTfyQ\T&,Ue:va""\nf&rp6{x_Ї-c V Zւ"xu!Ѕ*],e"@tsq9;ώ.S1t`sGn:}+`XN퐛CQlTY7Z_9ݖ0M;.]7nhUGgAq 4:kO{U .0 =@fs4B'.;aUЇq>ÿ@3IY`-=0(o^q;` -hjE KeiѽY-na?Nҍr>4D.{eTinW[NxMgt0ɖswU+qXwEUYթ#CwiFǞsQ>@j<<΃Mx̙e><@7X`ۑe% -4 B؝:UyQh~ٹ'ۖV$ 2adSzړfY n7o_/l'B?#D$Kl# ߭nPCr2bp^.cu< b:vU^ViN ꙅ2=Xt i>zZn^EԷ2{Mq.]?Le#l]fׁ,YAB`#87Iu޾~`v>ڵir\ (N\sFש(+cܔ9Cʃ -ˢ;S'X[^`8t7â>5j5ҕʚUE1xg3C1J5 7maY.I iV)S:A1Pl?V Y督(Ȋi|tH(0𬼲RSNZ{{`}cM/C3 -n|}*2: s3>`s-$GBz[~"tsfka%3AEϴTiZeCW`cYtQuoԐzuZFO39Vg3wNݑ^BiXeK7+ i07cHaV}PZƮD{u -s8LG؝qq~QYYhd8[6,fz?N=1(zNC؎D!EceI9-ѥ, piʬ`X w\cf 32ӣ7Egy E|$1s+vh~ک8F`hC<|11R58$1Vaٽ/ܲЙu۲-c7‡ $z7&$Ms}۶37pbr8B8Ut+BXܻ\FC:K ǶJDRpԫ8q{zU_9xTY4-0.9_t Ycm A_ /J s~{ދf](,v̟yA -)fe!:O}Ф[d"rܓ=><}of=jHg$ ]꿟NAfںf;kǘuSR t-W4EoisX߄I-O^f2 gKXͣnxSV>b!^˪\N*hI^R<-<ףrM᭢vAqyTtG>z.w`В' `1 -O:_W`6|'| E&΁jaKGB0\[pv1zX:vj`;z%}P}TbOs Guf~BN?d L=ıd]Q!ּu|CZ6Q)SESf'.sj<3O ^PKc^>/KEd }K߷D*1]~uݥ8kivHր4%o׫0eb"#IHG&\O(gP:_ElmkH8r~agְV&Qh䛫JSsI[$+ȃC)1(BI?ȾPxS\z^Ol !/N;]nI#RxMXq0LХx7!x&3|,O6+ejDMծ4!R# ߦJ}sm KCeYMwK<5i6ܜ|A4-vq0 -pF -|]QnN#E9! kvP"JAܬ~PLV#D^RvTC*]-,eԀZZO,+ߡGb>\%7 &Wz e `؎1Tsj[}ZElBiZN X>$q8 Em^QC #RRrn\(|%A bfDrȃ"5ԟnW ~ZQ|Rp@J3|yiw~H 1Uiҷ.mOhQ.-%$i^ŷߑWO4f,".M+6HQTߐܧKh?_OoŔ,Z*ӍsNWz@JG/%Nw,_1Xя5|E(ʖVG{Gd|j[Mࢹ\1^("Um];N$EQ|oYEK#//jR0 -po@,aFG1|ce<]p˰ןZGx5XAS r !Xլ?Z@Oә45!l>*ֽ&5M6axGWb-zwj@<,{$LDl̍9;dn=L;#@7u2$S4xNuC}?((a0@'9€ߧb!+t3`aȖr3aθs3oܖH=߻ra:¢T!64?o{eH`@L -Q&DRyr RC`d$B3thW=d& pz3*ͮR=)˒ޕ )I8S宜۷L &jxTV;z43,cK5;VӔ=jӕ,9k\~‹<$֏Z:[9`^2nom5mSVSE2;ЧY}ȑj'E!r\W7%(ZP¯cP'|dR=Tñr].UozV1͟`B[7GV6`Ӝ*+lǜpch\(3Bf2Rb_bM)cuهW2=F4^oXM|΅Z}~>v=ꖶUFdn^74|lZy`m+SFM8Ԇ#(=^8VB -_É5Pe+0E484XNF?IǴfy0I= - -I}3IdUMW; &mB 6Y n!]. hhɛ8:('Ǩ?XoKk 00RjؘDtx -E?0gZ1DM{XN"lL%81Mb@w1*;{˓]Q+&2iJA(Y(FPOM US%L}ZhU"j:?(^AB V$IԔi" -1KX R#f6U44q$:.lhh]߰57ܕc?P4AUyAG$sۙq1نQcQ?' HmHh77_v yVm -I(u]L* yoRl埈T ; LQc'\D&܉PKx*EBmu"ǓSD9LLD&7lPJD@"3rd6aI87LԃD=9Lѡ$% Xgؘ ;Albyvsp()~('pbx@$] t:c3 -0CRu9PJSGC.JĨ& %\'KNTsVoDR80aXScPP,yBxz8ҒY2EhHf&,;"jkZI8^rĞ-&<<,`kr0,HSϮjxt `BOm (zY)y~GM4Hk u>PDd xv٨CP"z37/dn;vᱮڬ5TX |75U ^-lӱP VLxRKH r>pŠzUR9+ -|Kh#q 6kXcU.ґvˈWOw`iQZ]hg -l, ڇe}P?lr3;'?yXґm=aRNi3p'< ->;,V.!_:X7;%#>u.#+I5kB(|b*)~pfR})_fDE|`%~`FFp}:(!+U$TQ<ta`S/iZ ~QHkR!d0fEۗcRV *x:>mL+v?Bs%&Raץ{.肘N|X_<#oSFaF?R🂂D9]*đ2{>jBBkfT%W_g>`3_uE1Rw z٫ -C c-&}^7L\|(ߞC;_ʛy\1|U/1MsJN{nȍi < |0I"6 n=b1.HڇK]'YñF=J]LЬQR )Yz]` Hg„54zn(HZ?A:-J-P4@AoRcFL]NЮlɠN -ԽfP'A̗{ϖG:lrQ ،qQ-fۇ40R@Y[>w|-I-aͨ][!spɳ -/!|˯/_UO_/Qvc5,KYL5$₳q/ڧxo:ͳjS,X%yݼrk -o^N,a:s0gPVK91ߐ0&jΠ{O@>'uLm,H$tn!҈56x(oL=#0Ío"|A"=Wrr -)3:>Ǥ* }Dc*R2H}]RFj8^}$r.5Գ5mhZS9VdNx/rFq)|Gm'#\>2GnaOD2הV)(9Y{\r>r~(j{Bb-;iJ\&lL|.?! JE .VIȾDG@7C= eæ0zػkLZ\І֯tD8.6{@*;b{<=,Vi\.ҕoa{=Zbq%AkN]\^qq׵km,Dzf|%QsqLcI;ayUkv`tޕJ 7ZtjBEs܀[zݼ(Ko٥ ?.xE&5-9LR^hfO)%EEi_a:өaE,G"=0u,ŋS/_}Vg_tc&{W,OC.mz:#^̓a%S~P"e!ic K܉fi ۛK%R,vnoޕ\MCKExcqЪ` 8A3K[BLr#…ͮ=?-PNJO2HY7]QD8狲S*Lةhdb~O]|S۩HOBZjZl+gwص40OUUg  R<_91o831Q~W3WU%gMct5՟aKO]y$Q&y {(Ր_Y_ -jeT`P8ͫ ?iw.=U0΄ܸt :HߐLi RT鍘s,wN}(@Rd+z|mQ[E/;LD&%lR_2$ލ<¨PB@/8IrOCژ&^ -nu -[Q /yϘ/:-v´ft̘y< %1=- `F.~Uf#٠<|_$QхZۻɣIm;TlbɯqG EShwlNbuJW<]sXP J`Ǜ?{Ë2U?M_#-Z^"Aւ"14rv`pOe'eW38Pȿ(7_Rl~T -@=Cu$La&̨~(G8ްK:D /%%lȌ όej)9 H-R$  'C["e \ElyfGo 0l%ŹH9d&`S+>H}AV>/lvEKD.}\ZOS C+KJLw-գl+ ri-FY9Kʦd CYiRCк6Sxç*P%;TW C{[-*TVI=#\]k"GX #a=tg1b/{ +Pd_\dw2PܦCTBOEv=SPhQC8PS}b{lڮq]%pA0]@sޫB";R|Ihȡp"7.i3^ UngkyQK>Z]J=p05i_!+#=d,Fc ͳrD ˁMj VwrrVMRq\bi0Tsi`p ` A^_؏p;τ9)x@G@.ɷJc_7nn&7j$]tL[.Y~#q &]yIG຾#I \ -aKerl -[^􍶿i EVC bR>J. `ا  -{u]4^dnx*Ajl}Ȋo{jmE}x\kn׎ڡ睆 3Hbnq$Rgu -`sնua]˄O]%A߶8ǂŌeנz.F9chY_2ȴxE*“~+"ݥGgZAQ>ln'ybe;(y+BNGg-0 l͖efdzr?<DgҜ' -x<8-U&#:efC˻X˯% F%]|N7 MעI͉2!け+>,ÑV&ojd.Ȅ32$h Ѵp Wݽ6.Lo2ćXu[})Qx"5%K;qm {ץ0/~DGMf>^)t$)'@RHqvۊKQ$dkyGV`M6Fng34 a{k~NmT@S@R׈ vP1v0Y ^ݼ\4=w\c9{ӾujUQ2CVƱ,@%TA |ݲ(s!KP"Lf\>PPql|e6؁k`|3 =f9CGnm,iҾ_ LR$?T9k`QhLyYt:7$}P/N̴®S/KĭIs6?cxA66Uo#@>we鲡Qz_$:ι<Dǜ^̤Hx_Fķlq6֌"T -ճJigM:CW -%5zlӛ?HUk -7q j9% $4٩ 7Uܶ H2'EL~eq̤֖A 9&!łv Q AvuNZhڤ_չpҟ(8?K -8ShZ>RK}Xj|z{ϰQx~ jɾ7IE/>6jЛ۸b<'Prt@2k[Y~Ჱg#ϑR4RPZ4GPvx֩#ӺP4r1hP_־{ puZ=}{8.w쓿p XC=ho04\؂ow;bg:>)lb){SR,&85Qfoax+F' ;H1Q%u)A|uZ6pwCN+y_}#g[ctlrnwk,eXB?JXNvbðL.OF턵6iG!\!Sw 2ݎ=˺fWPSF(wZ9Sn`kAq)4tKm[`t}:@iAs$mzw`Z);-ȍ;uڔ4DJygn)W}W8J8O4AܨD@j S?:l%z@f߲ aS<㗡aKDHjZ+9.Dǃt\Q*n+#*nIϪٞQMHҶYЄbs9]]*La(@1Iԗx幽ypp5^$ZR(<[LJ0zF#jZo(qX}AmqҾXR3'K*S.Nu.Ao~ėP1F68 j-Ew@v&lc0'yY-':C/j7K/'vC) ka"), c8UW7ำ*+;*"iU?͞lUPL&U"V Dy_q0KK4$֖.3ܟmv)^:*vgxSj:u@B<1WlL3M+Z= )nhۖ+JЦt qEq.̓Ku9yz-xڐAͪ0#{j;=򪘦eM37ôJ1T%A#MY3wXo׻͖کuP)h_!<:`nO<AJk(Ԗlhϕ)J;!sEE+9Qʄ!.JlQ(:\WZM]XLU۬q8GkcUSU4(pUe>J˝dNUjP:*:IG ?Z6Z-ר} -BӺ/B0/_IPV[A+(,4yh-wlAA.j.Yt˝3"Wj&+QA,oM؝6a/ i CwFV0 4pݴڞ^WpJsɧٝZt[Z@ P=c\CJꮩK-snfYkOc^$^A \u[7#)cL==dj -ZPݽKNl^x:hAS50 #T .%.eLpj -y!n11N_eZ)8؜IB$}դ/VvVԗzE_U]' wݤsJ%V0зux-]YqIDo̠M:OoU`'ڬq"+PPUJI!#yUٳn2aʬlJt09lME6_eE"i==/F=/r\$'WuHYPv%Y:k1jtў׈M;05yzٓ(t,p-sjܾ]TfP(Rt g,J)M{ "->VQ7I&Tt~fƥŒ-9LIܓ).) swZ7^^\K -X /.k~[T:o2v]T{H`.tiR/&" @i5vΧg#PBh?.᪦H] sK&(&mA)osX8X?m줠a"{ioVtU +ZňU,ץ.f+wn;zs钠kp\sy LSgMkzLM=k!I(?.("܂"(n䯟xGzlz- LNcDqxGB3JR(̟^TAr]wϗfRRz: ${6 -P8\yC|R.79|opI+(ZEY͒SNz5?^b+*ί/!S۠_CȊ6^,BﶯRph,cYԌ!4mk}7:{K`?!D~^|:RSQ"R _S(-n~@ wvrgf\Lx6Y ?{z&uѮ=+ }[&V;+`Uotr?ۀb`X^ GdeZ9mQ)ͦ+^ωJ<91` ˓Kѐ^z|H;;.5_b3μ"޾˓ꀸ*r2pm^/4\e:WNGIMxJɡyx,Qѩ袚|:ʮo Ƙ59j^4T;}첕,I/,">(- z>u.Cȣz1f[ Q?Yf&aϭcLd4_vϳls>%}Lraޯ&|I -zs2HŴö9V5{Oڭ \{n:8Z-/F񛖱 !>QLRGt\L>ηFWSȣFBZrN\Ր^!M@Su4s 2M mM{v&j3Uebƽ  1}Qh̕kiv7ѢnDL׺d4}eI. -24-Lbo7jߖ5BL -t^ +*O3G3(j w5?  ;*-#'5]H/QaGst>k" 7 v;júu?ÀM؃t,ޑ -vs!06?7^a.B1_L: F@_3Go WqxAG ~-#ڿ\a^b> #CI0; 08bLTy0`\&tɂe'<҇Z=L ][q.jqlqk< HZպsZoJf]j'ݯdPӠ( -cF!ky]8f~: =ߋ _Y;Z:ŪpEztC6 JƹًIZk% D<}pz"y"1D<pR0Vy(d#=,!58n20E1[Mɨjj/8V:_nlå/Q `jw0Ɨu`nɊF/[c } 5!]c.ZǍ{/9Ls*TsuyOd7m /sJQh˿1^-nGh!( QakP#נ׹V_-,(w(Se̶{t+=dnNb^׎} 5Ebe?xMQs~ - --&<93Q3)$Njbi#T 詪HhCFUFMƈnH^*&rTJ:' Y9a뚦MZC۔8*B^hWUE, S:Bsjr[,fWEzEEd - 3G~yX̩nͷsYGdt:ǖ2jDC޾}(+\UH7D{.-^A<==uًi/ +n-G*/ɃrG -4_l&鲘K`nŴ *@xZԛp53v|33\Ě!zQk wIKrnlH>63%GlY##)!s"Γw',?lHt΢TȼM Vh΃{PE6D:j5d2)%2 -an6hCٌ 9ϫwy"&5ݰc?3j3m=4~׻tsW%mږ,P],ôZdEMګޗ@G9=Cu(MG*>jI -_zŲ gv;#t0{|u:װ5Fɞt ?}0 C)Jffa FCUteߌd\bb'[c儫%P -"礡 ~s*xiXU2U$DbK0ѰC;LVIX忕Ł }CQӣu(ĺL!ecP/D\kj:CqaqxٽԩЈ kӡP]|:B;G5<A_),q#=w06 ?iEP#UW8Z/|k^8RT(6c>aGӢ)BPj~wcY}/*t*TW!H`'5G#8RխzeAxn0N}S~Zk0K ib`9X[kpgqIJ^-:}`U#2a_5P LnZB%Piҿ@v;5Q: W.8D;Qt|SLjb*V*W _ {t;ȋ yA#JߥC]#h&ԉ03WGyذcY5I;uldr2P^2oTPw}Q"M~Iq0e=Dg>}[+_@oưޯk&?ES^@d5 1ROy)J -b"B٢l>ɨt6/+Cz\&*r' i[s-3F\NN#8qɼ)ׄ$,yE"KRYX+}zMmVȕ4#Ѐ&tpBOϏ$t*ͿuA"gԗ :Q[*W[a?c=O׏x,xQonb28AZPrT^[g'.zrf۔iThfu67rHք<5w*b%!YnK[ HU K*{\5.ת* {A#F{"Q51cq.^g_=jM4񞾞m`cep2St DFXψOMWt#[1%Nn!ƼZoK1co!ciJwQr@|q@4o)6)6 u"zDOB"jỔ!:/YR™Wj$śb! ƧDS(=s~'v,=tqA)sow eڛ`oJ.5?զYYgBa5C;/۝'G -1xJӀs -&a&'r7Rƿ21I$ -HH*Nk Iظ^~9KS@@d$]G{L!R@A}YSmB'Z PTx -gLT|: -go2{|zꡫcA]QJ B4|@vTv,:3 #MO4Uj>6Ed2x7]6;ve +%[1L쓳f6R']UYcy;n_/6cfjC4 &ԂJ;" Neƕ:.T#"? -&̛0κWuֹۿ.q]4=ӗdFQ'D]l vcrs pj-.\(siE$AG.WXL(g#lK72t:i:.]NYc#[~(z2fY_YG%L=e b5լn+}J'Hp%wRF#A$zPG,Qs&[aR5UY̓=jjUY{sɐ΍!eMbMT+d"K21x)&:f4&El{l)zlR*ڣvv9㈃㡗‰t)Z,gFlyp֐<Ń4q 'WW˖_-w&7y9Hd鯂QyӒzj =9VƓ tչ'df -Gf<5R)8jb9z(:MD]Nd,NN{Ps .h7YځtGN|s90n#О|_5~JMnq& %p״`)ؿ#f֜%2Pש|S#S ߟ.IPƪ=aXuvvxg?={v {#WU"*U:XQe֮ȏ -vRUSUj%z *{yRH43Cy7\5Kkdd9Ymdd\=*=\ !%邉wDd 9aeǏUh9B^uUEaBExt]%ate/I<[H-o;\:RfP:m LIe&k{A8;Ǭ!ȫ>sя0eӃ2eu -fTI -''m. 򇃶6 a?s&6&(C^PshuhdhQ/IJѢ*@Q(jymylbyAuMV4E`Ek۬6{ ܟKYmE >ñI46 ATW41F઄B2#.fݤס|bF֤sC>p=Y>-ObiyN.N"T(xDr8yn"zꁪ:>\'纂qyn. {??8JۘҕpTzfkFN/N/ᔐpy|IƑq9 --=j %]g"dwSC\>|d-3͟,J\]v$:!@s\ܣH"=(ңH1tx(Fy|U;:s|-]zBqL$+U6CdɎpeZ2Z'?e#^ž(;OaAzBAr¦Ti04vB&wvܨ2 -QDS=aw—qBwr5aЛі(9a{ydxhKyFMjh#硉p9a$Ƹ H;%I,#{m)5'&"Esbs$I񍨁IC)E'LPYy -yeXq(f۬qx'PWd]y]pמ/M=>ٓ'х !B#wm9Kܐ9 f;u_G]eM u|.v)7`=eds Y"dgrQ'MIZ^rV,xY) $8p[e-82~"Xp@0C<$s8LI^9Tu:҂6Xl J:L_ Zr Iq ˪{A${A${A${A$aA$I H|M{ C U -ҽ{ Eչ"XTⲹYNGV\KoN972QHJM8NUynBTIbeܲ!ѤGMz4y$hrQwLw$9>H1GYS^CI20^HrgGǹl9!vGk0XIZayZ [?.AuU[[mbJx~J{ѱo$,7ҰH_rf%>XP*0/Qͧ6/%4dɉq9Œ$癊}% ˎ)7nʛ1)go=dH`Btpi|GkAEy-u㵐U)e6BU:l.̙7Uku(>E؉n'"W[U\rX.in#<~'drjS kjZR=-^k[-lnURjDxVˋqhb^6jh{hdg, RQH:V%_d'+D6ZR6I( 9g*H;QY@Y}, =:[JĒdge -cC5luDE IJ*8p^k$ru$da9VDV5)arKT.!#LfЎ)^Sjmkrc ;ZuH[,Wp@bz}YCq>d{MJHb -ښFts?죃t HtRcl*[N[B6o}Yv^i#YJnJ{T7gLNjb$h;;L59[=l6TXqnЪN`T'vx⁓>tbՙ\ e̓^nRnuS>)rO_M]oU p)k}S-nř9m5~%9 D߲p|> 4> ԸoOF[a}8 d⏰3D9pE}%5mW27N1O[l Nl, XnѤ2q|c ->eّS霏2wz9t*i83g,SL[;yFy.&nw,JPVJ ewL&ǕSDZQ|@39{)"TKv˂Px6s`>ۯ&Pߵξ͎,g CNΈ:v۩ S 8Nh6Pl_ȹ"*{rYej%AB]׸]owآt)挐nEhnX7\5 gCoyecgnk#c\3͙;|< Gl̟ܠ__ꭷ׿^~xvw>/_Ð#Ϟ;tDzlܝٶ7\^Zf9;G1ݏ?qMm߭|_O#oh~w}2a,4Զ;Ͻ9ph[1=xn3-Ɔ6#}8sϓg//~9]M0f~fn>3b1t}]_ ~9i:a5ǜi3};c\85F;tfmx8X[|?޾}+GMَ679k;kf̴tk&mX=7g}*o_|o<ۇ_vb~tm{ih>^[oPk Gh~,˟~sY߼r_:6ŗ?~?]p,]Ǻkcgf|s4w {[3}83ss ՜,yxXߍo6~m}ї? !h0QGNJZ $iشC1b'az"9̇qC$6萷޺nكA\B!cрAwOA0/pJB,#x!sRf)PH8`r ~aF?g",>'v`!rቂO:!+\C@fX&OFnC'mLOhwڟFƊCQѺ:?UwOu6!t3]o1# -VL~f|$[~7%. ?Ȥ#ڗߜ ַh+uk+h8t+2XD(Bdӡll7<l3NvM# -6$ -l"Mv͢ONw #6)A7U`݀*.@ to:]pFݑ5& -G7' zE 3gN.'@*բpY`al ͙a 5Fl R5_?-#KqqG!Ls̞֨BVb[tR . ]CN@ɂsu9ScL!,7}r>QaVAv9G>OtܡtTG'z~o5O! BBsŲ4| bp`˼;j%Lx\Z*[$/0bx[w8;wْm`_3aeinz/pI:"ݱ {O" R߈ܸ^K;v~-h6e 8> ~j{G(Ű ~^%Z""@^QD$zܻ ш$R+&XHJ,6Wi*Ar,GR&z$`nw0a9m6O؀PoRS#ħ69(/hƤ؏TLv2ex;3/t&A2[DTM[$~-"XF8EfDl^gaOיH`?jvVL:"U( = ž2!/h;F{zBPU/iDMo/? `+#3ӈqGww1s_z4h )I8)+Xڭgj;O;393vJ}H`ғ,3T ,~AI>J?3̞|dkt1~AI|7T/Ϣoiy |s_#EiD].y8_TWGFn k"ȍɿҼ"N -2%g€jBX_ fwמ#dY ݆3nl"0kb<\,y~{:z~i/_47ƿw+ɝ٭'X"9X;3氃C/?v.uIc^b?ҝN@' O 7L/_՜Z^~Oy_ӟ<|/1^|ֳ_wk?7Ĥ׿!jZ*wJ3uHn?Ip z7+17Gc8O؀&X)}?Rn7B.@Dϣ^LRA$<iX5e;UJJH@TD˦)J:)ǰ=w8s h] -{]TnXn@rtt{{H -菸}kG%D%T7|t)^r ̊Bkb֫C8#⥓A+5@0K#y6`%9'"] -܄5>>634KO W9= ӝ"}ɛWKE!MP_mMl.73w7`v1K~JA2) }ǿA$D[fN#Zoz{3wNbܳ"x3Sܿ[Rϐg_gQ(/z>aʌOuM=z\;~ [BzVwΓ$M$IAbbX - -:\7?E}$r˕'&R E-v=^Ӽ:%u Qa+%i)MA'kO1XZq>~ɶ31!߆C MO3$7Wxxn\\KtsR[!Jnep\9B~GIo8~Ix4A9dd@Ub^çX@5X⯶w.4E#8n6K*[8TuEJ@bH+B`L7@^r4{kj6~?Ca$<қ 1_M8x `qHeckXdW "b`r,EYDX% -17*.];F<ǯjj Fldݽ7~AETLPW -zrɛœ!v|Yq(&]\{v5L7 <+9~a&P`U$cX/zUa`4@by#s8r@̗q z{io/iR|Rkr)%$|cq>6zzo@ L7t7ހ~ -31 4|LCo邒#.="0h~ a=ÆFzĈ#@I$5hЭ.pVt1 yRtBq8/awH$Bq(TDB`s)hPda]VLܰܠb鏄Y^h-?X F׀f:Io42@Lp8p -7i~mRh "^z8M4ش -zn]PI:nN441=m$Q^ipr 4N<6ݴB&N͵M%Xn ,Nġvngn rE Ш<- -r+emV˭@ Զ@#ȡ&JGsM[x7Z=n,?@3{N` !MLJډf;.B/]uYLTJM -<Л~YLǚ>?a {Oq4+<ž`ݸFypEV8R2J]3Gذ͑'Bj-"S1KveM/<ӕ-4DxF5[9: 2=Z1<&o.f֪M -I33 Ⱥ (1bNi@ƛ19ݎ5rWtJ%u"tJJdOQ " vE~)$Ah@>X?Z9IﭷǶz$ s_V쾃.|vGլo -\*& OK@eKOdiBĥbZ*_ .$~h >k"`eduR|uʓx >bT͢YpWS4[uB>Bnm*8)6\:H\~ _NZL:i@bm)d1ˆ*PT -k^h=D.0LOB3[A/miۧ;7Mov.iv8n-4efF٭iv9nbiQXCq<xLϘnzFkEm5wAl).ǿ38$i"ZT(H:$D4b'-gs4uv*]bjtCwԖEj1$9Kf t{:=ǿ -d!?ɒG⑒I'd±s -$pdVT DҴkmb~Tr|!"-%U~'wSđ<' -ΫqɐK<}v`sQbtTOx2i9Li%:?S]Pbg(ASB\އ#YOKTBlC!y|/迕7$P蹄? -1r1ZјtR5D<($^.T(hO<臿+M')Q  1FWjSGFk -j."氣s: +ҏ(%.n@@jZ  kG H! `5 -KL JoGAPv(lUшE;A >Xߞ+up4ٌ -f'4riH%J.nk*2Lz#}LSYKQL2t#% -58By/<;Pvq.XaD#4ā;a{ـBH$_s)[oV4&iR9lB`0bS<{M{Sք{w(a@/+}~trt.h'A>ȱ%:?$zd$d&Mjs. 8iX Ȑׯlw-@iqR5wD - A9[<&CP+Mޢ}µDhc+db^q\ -Kgw`n)sw= ccOBf=<{ ;O* i6h{|h;=7 -E ߝ+YUBUyOydI^aK$6ww [6߹t|ꙒV-S\SHgLov{FԪI,!> -$9 -Ȟ7sw53/`1 -xW: 帻ͮK͍kEGN-񳏒wh.LvvJZ֬B -?`x28l,*|Tta$ܻCVQ U}|PlcPwit<%]? <492Dh߯3uQG4eytR"x=U1(a|آZSNb\QD*<83XK76M%5ZXmq ؙ&'Hc#Ux>J|Zo? ); |K\,!`k`>{4λ&JWZ7+v ̞b< :&j*mQjE9%䓛sϜhR]4#RMAG:%I0߬*%$3wX3B23Ǐ؃]~?X'Fګ$YF`HF7zNuVDe_TjJ.:dlQr"q :C=\RcCb_mIΒR u/0RS2,SwGw)?挊WP1at[p]iPÖ*i.vm;,Z\!e^TvjTv*I==׌;X@\9Uu;V y+n$q۰Љh }TWo.MuS{B$VHVx+%r$Np")pY e-JSp="WV&|QC='KIbA"ß>u p}POH_c! -׎XDGziBr႔V54gh]`m*$d4I iE5)O%b#Oz`rZK._܉IГ;')"֓S1b\]L Dxh"skk'٭eb?0̿s IMR,?;",/3hޙ2Ѽt-f ƛ-7%7PMcy7X!R)kZ pDkT@΁ - l>]lq_ojo@cӮ!4IcO͡N_j:dBXC!q_}յI^k]eU&8=Y'`00u~i3].Ui-M`N%k؅ or9.ۏ"]uFYJ˥0R,2V`Y[ -oQo*)?uyAPNTф*R0H lh/> %$G?JRIKtjs;h!YA;4`^8 Et^VpgFbSR|x;-ߴ Z…Oaxg u~ Vʏaj3MRJӫ Pe C쁶whAF[8($WI6e߱.-csPb!+#շ*ʑL""4Cd"C(崝 K&)Ơ]J mva3qW&d,6ۉ0BqvlX['*:VsO.%\^53Nmnx.6cDK-QYc@dLN_i3*߇v6S ԝG=eH6Hb۵q`[ˠwC?H?DbM ~ӿIt7x%>eL1Qz=^38A<-և%o~ze& RvV7uܮْ|F V߅²k<_F[Q$P0Fi,b]v(f>c "X<>.lL:;MMBAL|<7}4 9>E\OK*;6C޲M"W). ?i_"TK懩Y,D vT:v?zCnV/vk.0)IyF "`Unj]M5VmLelU\hXKS!#KY{QŷU&U|ۈG2z߳7 Շƒl+-zѬ:2 ֳl\U|GZY$1UuP7s~xUbwbqsWr -tX4=@iù pqp54& -W;SY$.ru8MZi=C;rjobl$K,a!=Q~{j+ofeDؗ`}bWLWZΘwx?^T [+g">?IuF1Ƅ *cud6yQۇ') Zkjؕ;׊W]r 72 rksF-[S]DhZwn0" V -' -ItmT95k]|>di)Cґ1 -8+oBOJ /J,,vb3&p?"Xy?МWb?BI;]zS%J)nt2ʅRU#TjRa!95A侾 rTɠ)BWƔKBct -(`|pW.xS1& ד9J L(yT -$Wed@*|o梿q{YytsU#7G/Y쯿ѳ9>gQ4w=zATU;?:{U:0E [0{n̖Yca[]8{]YLx֑}u v>.{QI])Sil~BCIЌh{,GJNh}XW WH`Ksg30qOW'Eb (%$:5ȶ5lҫ@Q߿;oBMM2?V3C{vaج&/6f>[ӿz66gϜggW?Wϴᳫ1ۄ{+z]^}N#gW;$0~GϮ+طo>H޲ȾM/Q?4Ӊ61<*9QHf} k}'閨3zG# -}J'_`ͨ{T UDG -=BQdj>itڣIrH`OׁZhxl c^#..FtxK'οi4R'U߼ -Go>t{ jRҽ=k<[ 0b/tZT_oB*"a.blaR zF},b6b!rBz0][˫gbLg"gDЉm 7!on7-'OǿF=7>gɹ8&8g:8Z-~`$K7)9q)9 -)OQ%C)\6\*6%kkf5 K:bK.3D$rtbQ,wSh=ŭQP5b˶mXpvi䴡- 8mls:? h -AnKy0Y#A39L>EG2]A; .݇rpSaR2,9EeL,L^!~-{9hXOfՔL$H(ёj$gsF.5[*1s/䓯U -6_LI7zjСM]`07"y.N=ң=jMJɾVH;^ -vpMa茥7H۵> XVB3f{I%8DL'{3 q,ԪJT-c$;`N~!k{I^ 2#[B~RGA16GP'Үۈ(VͤrYRjsn¹iz8V5~[M˦xQ!`8^7BVZFN:)`ZQ5^SK[xӻ> 1%&]@ ׏xA{2!o995kĠs- T \r҄3:Su](f1 }'rUp/u@'sOrQ_JtWE4ڙ\=+ڑUw5=U\u`PTG~\uf#NixI.s|(w*8zț #F5t0sl@>~lx?-ysxYfNu 85D'gwd - 6j]G;Ƒi#_q}ܫRjc;0joz(Dv81I8Hcy{`B%N6ro9$ _ -ZX:2-q6+ qs w߀DNH䊽vp@O -QSlIuyTɩ -FX|.BCn8UPse2:KbvKL'8HbO73 9RM3H4\  *qr]Q+br>7?a79P|iReI&^.p2KPJbYLH,8 gJB' -{+6y2h4!䦋lVN@ԩAn2O˕%^2QQtK8;uMk.Jn*Ds.iiux=ǣ\<UcT7'CP  -݂W.`cmXgQLS=1;|7"=rRv5!N 3&T>3P'#4R9 RSC -7ÿK)8W2Ln?6ˍ+R]au=U_W⺵iͪ]lU%藤ݘ|K Tb&UA@6 - NxC5=XnA0U1jE-* - _O8avd&@7DFU׀&ubܷ!ZKY:+K|R -R ,EcAUegh&m }!"!4Cx w::;.ObFMh3(9)>%(18!;T=xңFUQbF4Ƹ99r `Gh =DMh -(3t\ [@@!|4Elne5yD~H  Dx0P;C*/ -"de?zGXYZy>Nňq91ΐU٧,)Ӏ'Z]Kuj)Ƭ2fcws|SpVEGnS_Me{;Q`Q#)L4ǰ'Ofklc,lIjXbC4)( m(0E2k.–4pyQ;rs{6_CвOSe:GGD,U `B܉1p`\cB,ԄjBgzqډ\06~>a ov]8a;s"gN8_U&qW{٢'ߡV3 c>5aU' >D&ODÙ܄2 ,q>a}9Ddo0.Na.~M|"')>IIsp>ɰIOsIO<~"c'OD>?~d=&1\k)>9˟0?,LO2 - 럈qjC)a4o'5…dȠaBa"( iTLD`1b"$ƋR$fTO\#$O~ >9b57鲅|{]@yeN/RvJ=y} =Kp9U0X1\,kI;Q4gfGNSҥ2wJM2gF)LJI~L DȿOڍ0KH2gP<%3ͳ=#6_{7XW=Yt(K0e328I,g[gS:#X](ɓ׏ 8WePau`q)Hl aK^ E ׇ5c*̟^cS/(\>P4, %cMsi:GrV3;ʓQKZl=STip!DžSj7FU>%;X>v\;<^Gmh5}vR'9TX^r/7C -`$U> -$vke6\Jd&󴫈I&QohۻFY!["ϓ^G]o?/e R.hlv41 wbMe8-_.]70=jk*FU - ,KC[V\7dG|`tta̡Pw]tQ盟~Y+*[ƗO\}RBX"Nn+mhA,1_; /DJISd2(B0j:8U1lbrAjRM,PԍH'SRެE.{ svkco)P&>%pA~ǐFi~zicGj2㹓w#哊>_"۔R`ׇЯ*z)Hu@@IaR\@P,ȱl )~Nn Cw5 cCfʱGpM}i3ˁ.Y{ -p@/dwMjG{EzzǺ;ؤ9εyZKVZdQ+zWop5e4|=wכu0wqiL)&x#ZUs  :bɚ42>/W%^K=%_71{F%Qq PWڕ/=|dT樛F 5O$0?ϫtUm3-0naK9ёRXcDVf-ès?pD}ѣ!/ -C|3 -ytyA]1jdt -6<$U!f 'Thc>ww{Cp)k.h;K`ɸWJH -?WæRhsC#BGC:%<17s6}8Sfv ly՗ D,K;Z`dP˩h -ڨu0008-5d ->T97F"|tp'/j0˚qrTVI:Y=";,xVZɥmyˣAcpA)UnC%?u[%w{' XPeTT4 i=(ne$p{dGĐlé,*Ze s~W:b#)O.rt+ʜvA]C#$: q9+Xgf^:{%I7J49tD+u*s l`p̀B8!vRT7(d7¸7[`9`^&ȿ\nowwՐNsi[n//n -t{z^Sۋn|^Ǻrh n|(qEt{+ -^f큍L E@؇e3JIݞ*QDKzFqʺd%gĩ&>큰ҮnOUt{9I40D3$gE#Kg :QGъ6QT+kRXCwRX]ӗ.4}>BXK]y':RK]p"̳E/3'֟U0q+yǼu oy-=Ğ- VX|!w:ʚnԠ2tJ( >C׏k "q\ei'ZPy@)>D` @0@Av.jKUz,.e)EC|FUud14aܬϋ|.0Yz[JW/Q|f:L,3|C82 .F\znSɨ6 -ѹ*bS0W`<3GiY -|n03WLj9 ZMv-Cז]r\"b= S ߙ|jv}hk q!`I-6D*C`݃5k |`=VfU9?EH ^ө*v&ۥʀC*Or|ʚT4[^vy(ؖ4EZlL' NlDB%6?[pYjM'inm7 -ʛKWfRD2v{aG˭Vдv~DH?t:, 8xv\ ] M%*6ieddYݬuA]S:5|ZzzĦ{EDk>r(Pi:ŮJ")V.͕K,`NoI3n7( yVHڴBA0?Oj++G<2@/,;sWm5RB8.GˎHzQu:v͑, +[L N..&5N1~)wNiynFrNz餗NA:p9]wUUDm\?FOP@8xf_Aϓ䠶'}%=$yv(!R9q-ZuzѪO))N]bUwlO*TPY0oʙ- -  ,Q)+z[z,Ŗ!q* 4rP b9F(WZZ#FSSZ Dss'Qak bṫ~5r>NMc -Kt *B^Jꥤ#= A:yD3SIJM9htR)1qt)DjqQ^uS -imrFFsFz>euM/jF/j1r$#:fU15gDyJ̓)%^ H.wxٻ6 -O:"!!~3wg{xAl>ˤK^T?3˃p+;W}aR<]Ǔ"FXb&)`WbQ -O$x%X -5G$a=|[Sj=}UhT**re?TA}T_BhT*7HCfʺ(̂y9eS/&bR/&4kB^m>&A@`kQ#:ؚ0Lym0rdiZ .tWtQ~7ۥX0t%ew.2Ǡy̤ -ιkC!+z҇,ZMq"cHqiWX-dERBSj;hTZh)"5F~PR5뻽 9 u= A6cz.}We![Alh\*JUs4J@V[Wųqz^^NͺE{x7&ѡ ARBhF-b.TrpYQ&AzyۃAU b.w*(ʆG -i40)u|n{`V<{ `7ˉdԊ©D /Z{U1I3 ɞuJSbt%tr1EfpvZ-Qt[fa2aH%+QR=&"&|@@!NNgv*Lfl=uP;)]ZqTdkS?lN[c Yp̊+ΤI^>lP6c:naqڢOOlgTpwMj ol>o nGF>G xi{esY դY"ؒǵ~ފS6VB fW[@")lD|^އݣQ(GݪT%̓)da/{{j7sʮ?p;ڌ5G_ -8&P(nDu[\i5(='n@XuqyH%?u})G&^ PaT$TUSo~Y+W'5DHj^ja;SFTQ#rDpnLbq%E^/A71jBJ LeL0 C0t9xTP㛺3Tb IXr$]] _B(-5.+n1-UlH9TO`9^>h^2ZLZVI'L0W;tX .i;$rœI:| XueJSH ;wp(IOMeFH83z -u:Ve\(*ɍtAQ}b J,V!9z9N\2AZUS[qlcU@O$OY& -H%gTv*T2U2D%Sbxgi!:h3sӨS^:n^^t4U%X -xIk]{*Ok5{Gv^&PKokEfz@+D< #L2iXϺB|k)Wh1Je)7˥?Qci!~<] (|0s0@U3`i)NLID%<L@& -̲=H}sU{7sٻـӜPQoh S -3#9Dwc⊓ȁzI^>lϡ6c:n[sgT:s!Dfo7oCl}3B ܢrc_hx. VԲSYВǵ~ފ?4:=pj+hC4'D/Z@s{(RvޣJnUe*<bqԬm*OadnR]5?5i!SDcxnMֈ@n k;CۄpܩԔyC&V=ܰ IN" -y!ph[E <(o~.H$j2lÙdfLQZ`utNv7NG]j#'gu܌*E0R GMqQ;w-Wh+xTZ?|왙6LݬTX s}|KofԣsiHŢBDThYI3 %c)%4KFǚI%.Jiܤewrk0fwJ@W5d%4c6 -GUcgn@v:azecNkIB=)@H@.Pu]=H S\Vs@c0j0I4@+acUv,s6U~<%E7jӰHn*kKO޻:&3R .*MfVZ5٠+dVw̰z)֗h;gPT NOSv&J%bȟEqzYMH\zBQrMKEewՑmgdPDRiCüKlh{6.#zaNS*iL;0ȌiJd 7$ƴj$ߡ1-)1Uה2ɄHF5}8}aZŨF)ZcZَ V3~vuʦF[zRY+[,ЙFi3$V7aF"DED4 e5i:Nt!&4Ji xNO3.ƟܹE-+\qVK( $V'8v[ -Bիp9zg:aެV"Q<žܝq@N*_2MH Xc䮥p^:6k։]qY. `-@&/zUυ Nqc\ӧhpZ4ĒH`J 5arHUlZ|_:P]*zY0YZvvUCRXYCQH 2U|3q榸ķJŷ^|;C|-yRa=a,:cX= KIV BS8XB a P -g(CRUaDGwUof<q4͌v"W-ٹ"{Y:3t*/bt4;Kl b[J%HMe`o+0gE\FiYۑ4>; A -$ܱ-4.%r #1P>׶'mS+?*,Z/!$1N-l. -4uYcбjgUOm1>ˁYhr6hk/eLEY ʖ9T:啶( yցϳN/5KFIM<]cTۖs -P:2u g*~s%UV|Mqfz$]btG : G5p)p hq9Mϧxt@?.C?3"}2 iJY߿|~-%cOLw -R`2R7h]dGo!HN' 99wRFI BgFU78 -A7麊?jHsP1=Fã== X=m -oU}h: (Q?@ylN?'_ʞ`H0HQlPmC0uUOE9?kvcQ{,9rId9j -m‚z5C_<.Zh^wȓ1rgJӝf{>M'9HjTP7mͦ􋵎+ )L[H<#N4K!c֪*$9D]>GR -0u'T,KYL1YL)#&?67sYbt|A^m !jm~ʮH/[GVBiHA(1ҐɶPzH+%%npK< :+ +PWVj+3biSc)ʒȤ,Qw\[acecY9ڎ -mU h|4GifnGW:)<`_FMGI4L+H/H";^WWۦu+6yH/1zTI\DIN_{<*eUR]-^F2ܘIJ_DddS]'6k ]i׋, .~\ 8'L f.zw)!:Q FD^,\M;owhD -J -,FO}B_/znljp࢒m`~KG#`֊Jfk2BKhȠ{ ~0~[62l"_W$WTiL*RIM( -HJNA#S -ᖾLNOBX$]rÅ]O5QJWހYmh_<-SZ[גQ{^#'RSn6cdcqX+ aW>aL(FB]tr+%#9Anxl䱱 ׷vB lFjC~OAh#5ɑ֞qu M#L?Vs朳M.e놧?)gXNr<Hkg 0c~ ޑ^kEBj -FP*)TA,SqLF-̘کNmN"B `ӵzXxKZGٛ6p|#T'3f3ό5k&v -'5^[&J̈́Ӝe--Ay k @Ay kff`xWyIO+I"0?*?~DtDZd -G?Ǎ825wh{r!߬}*ǖx\cKZĞ.U+)wk̶$M1u!{lj٠GuGdyIuЉ`DUJm ltٱ_-`|/Ii9QN'm{ɝ1:'\3HP\#(H Ӟ<@ IPEH*#[fHsƣ*%6?ǩNwxLZxVC>oïRSqaI!_v^>-n-4s~xm8C}:;¯F&6\v߻}dq4?˪am*ʨ%8J*d?l}OJ~l|_WWS)0ut~Id&]CxaQhP`_jWpp.Jr&5z7&OxEoT:o n'Cca&HZ=phΪ7sVHC'O` Cg-KN+~*)'1d7^&DCLftx6Z~p!r2N|Рn}1cCv֗FpXFx&XDїo"̞fT8; ;ɨSwaL;= A]g×ZEc($وpd/Df⨯RJ8j@q@ޭӈ#.1$pjX` a?*rGj8R76Q0b;8g4w./qq)O21z1NNT2iOC #BFD(R gMaìA8@s7FUGoAqbAp\HTPNkMF<|Aג6_:hObس?ҋ7ҍh-wsJ1V~ -t\5uUo6ZXufϲ6P-aڄjQ/?B z:DS>wFh;-p5fRڒY;cxP{绫ݻm>,q6D=Os˯=&.S z03/K s̵?Vis\fY,|D:G{T_&Ѧrڱ)nt^e„+N|k;#Jnl|pӆQ s+d65$ [/^t fVuʱx dy(Κ3$AӫJzUȎ_O[`QP=4iP=UO՜韫 0UI/Ш}4OA}aBoN硓y@΋'!aZg8bIc-2[j㜈Gm-CմTkKX -ڭv;mrDе;<ҵ=q&LL -[u絡T>HS5>t)Hjg4Y+MY!(jJ;#qޯrbX:qr -;klQIOH YoۻY>m\ !P8) : -G*;)I.6kb^ kjLX-%ؚwR5}FX*k>wM8D(j?Fx>s:'e)6f{;^YUQRܑ!<9ghaZy|8{2F ӎ^E ycmE`n:#MOjY:IzBStеE8([ږ; k;Wd1wtX|n_ri4U+9lvqs\/v_ZK,ZFU H.ɴgA@(qEFE{F5]nw9Wq.aI<߼W<\ָ4z8ٗ-ޒ0-TlHNxԾ" HW&r11ʥX:mF&h;kFKNp9JeWPg۳-7/1j*aTAUi_WTrY+-Fn_V,ouϣ植>1>`gϘ$\9'"y3vECA #⠇rpH0@G F)xX -)y,Y {ZHkt)r7{{vG -d1jJʱuw y߫i8E/ ^$N]TaM`yI4kԪ5jng++KI:e(7iKsd%^JrO%=;ckT[4ި<իYVV&؎545َ}8тĦRCHlQ"e6,KIH 8on"POZِ[U M`jk8t I6p$;#Gk< h Ls=?h yRàBa#P" -= [=knaVg`co{^AɨgmNZv 3?~ moGы6G,_Ȕ`Ƌ96a6Z]BqamYKhy3^NNq"5!KLXRS(:9P4xkbhGn8q1);okUo(#H]BѨ'.8iM^xPP%Qt2RtbB n\T68xTa,qv1nLeQ]0?Xo^qw -w1N۾o^+Ot -OjOz8(3S&ۮ e< -.>5!iЍι&py FL\訃af,>^g{|YI z:Jv;c?VݨyxG -ȣoq[/(y#hsKHjF5bthi0%yS6^yg+?O˷xia`_ i9τ%\-_n@{%oAshX6q9^R:bHgotZ$\{`:XmB%]*)?.3&tTT+*a|2H%{Z $'z¨1ELh 2E,2E;Va1~w\Qi HQo -?o}U ́ =Ɠ"D'ʼn0FbA{cƤqzo@wuTr^*cakn +7xH%qq\ͫoV)@EI#[+<'[yC+WXV8nXosSMEi -(l G+Һ1iûj KCE`hVnE:vdL&"{T-bЗ SӥLAUzSy۬l<Ԏ sc18q4d6†#/WD6`),܎{Ll (#.ՄLaF=3\mn!$)MFͯpTjp>E -Du4ђpKǰ!ijJ7I/Z{|j.et{ u`1wnYL -V#lQjm +݊u"Do2~smڵm 186Nf!,<=sR+JܥU]ǎ7|a~0E_ I W^\;Mx1G@>z)GlLpܴF6%R/iǸTAP s»K 0MUb}0\6LQZyKKYf&VTuӤsY9#kIXK#M|dL!1nP?iN{Cpo S8.0Lkl8"^F=po. r0?C~? - -̸əŔ_zxD8I^q+2׼Gzw_55V*;Pr񾟺ƘN7ە1J@ֺ!hCGӟ#CryaX[sNÁRS`0mRS[ZaJYu?R֘Gs)%dlv/ z7υ5ڍ.L$Wa2[3#۳b5n;%éogsxRW՝9sq7LiEV/y5NixLPM%?rmc.XylÅlFڃv -ג#Rb b,<+G-G{-GmtH/##?|q/ &65Hi+V .D7 - (z&ixܞw&4$\ÈF& |MRt=JxNx VBP p%t >8p)sN]#s% ]%K3( f:'2*N$+Hɲ5MXu LQRpr x4ՁC:j Ww>OATȠZV S1"`wo"Zr%}=C'#cHxȠhᐡ{0r2kLA\T.NL.IY \*]#D(_7|~E)TӼ\j^ ĉ颖"(|7a=2 tR7ZS+ -wK --!t7/ GOj.tqNߊyldxV(Wø<Ësivfי~c&ʇxPхF(otLdr#<{ΞїkUZ=\ DXt,%44-&KbڼiM'PȯN˩{ʇf{`=7aY.iq{9/߆[k]=5[ϧL`<)$h9NFi 뢋y3i3=oW#]8:]T%SG,)%E ^nڼt5Jlzz&/e&`39*}="h!%X5TEjhc8{&pH%nP}>ې|p3w}IBmIKiZ6>x6[vq5nppa)@Okv=40pgz~Fk/Dwzmd 8_j8}R {TcKta#z((tPSݓ#<5[a]4/I!Z -@ t%C/kxt΀w^M"ac(DŽbusH q ֺ;? 6޿ vN 1XU 2^u?n a<#M "EO7oiDo4brj}aȧdNGٰ ;oЪ,6ӿݵE_^D09;L6U@iUt@nẠ͍fSs]("C2#G$Le(׬I1ߘl4j-8*Ƌ\V(lIb8<Ȉde׸"fADY a4gClU`|zʭ=uLAs -kT0fk& 2o0̂ >HMv[g#柈S)%/zꭑO,nP phj*72vz8E-՛vq둥J#m)zCf(,cI@lm\~8iTJIjЌ#Q40bXs=*0t -GEPܝ즜nݿy_.V୨X2ܠ܆|*lOpx906C:.Ϗ)!NW\ S)϶GT: f @̜~u|MإFLfefo16js+x/8\~)v^ZZټ: Fj5LD:_#:.%HFx/W!x?|Ys1ȏs7RB70hxFh!@ (ON67wN' DOIMGJۢmKWz;sִ-y:5T_C~KJ4fI!K5, $S!3:fm+uiΓȕZd۾7,R[2~njNq" eFG:MkL9u"(=<tQSJ۴e6ډH'>HZ%v D! Ӟ hE(PE&I0| c֎Y)NgX ^q`L)lE|ڣ_bO23iĭr{vN }M-JlZn!c;Z0c-X̧ <ޭ6߆B R#3nŎ퍏XΎ֯|1+aM3=`|u!?]L"6 9̒^#3T H3mfY-&Rc]?Kh4S]69hV;e}!ǫB>& =jK%Pa2Q@Z9_tω|;؄%+r}b'B@m^%/NԼ;n&F yj3={NNJrl>'?|{|-[Kǰ{::Z1>][ 9rI 12fxp|A)U=q0:;593b&yEzGAMW=C\\A&\O"(٠zJ>sAX0k"~@c -@x(X3_@IDITqT ϨqoIت% UЌA+h絉&HR Hr2M7i"u"9(w%ƛx- T&M={ݽ&l8`ʙqp aQ"͞"vg5ԗQj9QO Y9c܄ ЌDSXD}׹HGME3ؼ<AmA9JPvyWD,*!q^RQIz3y?lQ/HX!7y1~o6܈"VNX-*==;D5VlPg=BRi D"\ ܱ}KحDHO/4[32 @vYvaW\U3`vº]qWX`(ΞMBvqMHB h9HDž`\t|}EL> ,&_حWjQ!( Ta]Tol ]@zOKTİEGQjbfׄ@5Db8?U |)KqSOCe3R{X -gW}ʣsТ3Zt("G;8"mĒJ~hTA,h+ZbWaE`udbfDf@f$"VSႆQդ|ޒ(Ҙހ-ܛj +O˄3AT`s -F9-k\W(^G <)%TcGj#Q2am^#? - i3JuGZ(/֫ŞɃ%k -gq7TE*ْC,qstnp8._qq٠h漋*B¥_VK qkތ CK4kD 8 -=9- MT⬖2Q2ǑNf%)|˷T{盼gMFR&nT~ӗ|769j -'+fԐ}&CeWX`Ȯ&>RҁL#6j<++Mo)F\BQ{z<Sbw;k:3Wk4Rx~+A -~}si{RpGxgdA"csy&D`ôr*4p\B>"o!0:xY빂\ !2!Lw|$u~-\J*?ƀUY5NGt".t#1(Z0>+@Cy;^M@/W-\|,9=CNƵ" -~x4g.csFtWXgQ@QnM!"D%qM ej녈YQ #]2S[fd&hAөOk&7߿>k&Vbh -QD):=XytJЭ31|gbU0cz/<\ X\jV|h(`_x7ҳ9lzC;zq’84Su[+d!w/dc^=GX4:/[Ӏ@]z\.{,xF~ЧZ{͇Eb6k74t56kVk a>oL5₵{wsr򱭥Ba8b:ؐP -@JsS@FW~3F8 Dc~E 1Ύ9: "4x,Ѣ1W~8^g-b( ~b|s=l\g  Úc"@p pݑeH=xTy.@`NܟfrhapR:+x1*O̬Ek(}.M E jdu!WB %85EK >'_/OFQiF_$I*WJz=9 :rQh~ط86t$Id`}x@ZxL>w5鴤tZ3IjTڇzE -?XN2E]~86{h1Y h$ûEe~b)v1F$ҀP5 ,!VuAVcdF:C?MUE3çW|O\ ˸?#eF](`7{(Kt/G#Cx7}>/lD^^[R+窗 ]Y -n2&{ymέNE0hG&5SOJH15,aĘg % @ ! QY2?>2bg]万>?Ud@]Tr4V6cUrc&g,"b3%A؟Y@îw>g8ߊ"z/j/4gf)Fj׽Y@[׀`N%ҦJM͑v^,׺:!uM-)9k|F "i}0bhB#Y`$_EO1]pAП3/`M69BȜd:~nRa3FGP5l$kKY [qG V#%tbyHf 7f FCd?R&?k35ʔLY0{mpAiJz3(nFf$+ፋ]bb-ZTŘ@Ww[5ai4_x): -\g=W _ `8n~Wd)~"C~=9rƙ-)O мpk/*E_`3fHx8;Nrz7+! ->"7^B CNg9׺m4[_*r.6=w6}TIet]ad5q[Znס %n@ C6j='inWLۭmˌ;i^a\a[2]=?v~``EpQul|7C޽98j=:-ڵ>-!'bU[ޑmPڲ\t*S֕~<|,T̊E`Aв骉3…e",` -FTCVb3ADNA%گh^l SA4Ox]rE蔕 -)@&RȲC\tX/CVT.ogPH#Z@m 0}&(,pqp7 erR9W^UU 9̖0Ymź:PWkU|d,)h[wK;LQp7]K1W1[qA\PΟP3S]#l@L\%Uq'QDn:$CX<{>8lR&677i]S7_D6®d*I|%]eQ#=y:FR¯v^ʯD͖H1i80Ҁplpl:~2k|%nܕzzͻ-4A#GaBA -®PP -MJP:W6F24l$C~ݜ+!8}'P] @Uܐ/H+y<_ΠYtmX׬it M >mI7ٚUK[wJt9?j4;'AZ^~=;J;,`T5O"g1qCa]_%_~p zÁ2w&ә^/B?XPA&DݰZw#V]VVɻE8ne~]pnL|Zft`_JEA~dcXzu=~]+mu?Vre{qro\$ع?, 5Y9Դ~!#OeHߴPţ]~(~.17vtxe\E $q{~z1|K<)\mtDRu+MF(|X9,L@3:ž+?9դV$tQRƹ qh - B;/dzw%:lz9yR - ï֋v&FmlւuQ d*^a] KL_l {ላXqslc lx ENZ9✹DB_68A1a *= &Ќml=̅:?]W('ę wu$r)=U17:Q݄=]8N:Hw@q1)>#kA3z\J)[ _?hCnÚDX9؀}/ -xs!B( sZ@Rl5ZzMkw_lNՅZ-2=Ql<2˜3 ]l~!ا.q|YՑcxŽn~LyJ޼E˼xo[oo?k]5p8:;'\cLHjP^bVSFϬ7D2_T:=ør90?6o@;7CcaʙM x|’__~ ?89GD܊TzJ0302! =B<?.ȩ΋ !(ޭIM G2 -Jy  uRidJӯQP]B.={ۜs4;|0~~3p\/NIJbnIjy;XgWVQ){5PWLe16(f5B@UjSGnQր D7T]YH`yGp"ܷ4y iR -/ٌQްsT ˵{ )WO)' &stc-c':nn/)R؆3qvH"~roKa"d!a(;(TqQ)::`ڠE)[òHe9D:O>mwK,O`=8-ǖT@څ'g=q7`raFql' Y)%]tek\t/`-DJ~੥]NbXOqMrIʚssa8D<GV j\2I]on@@&ϠȲ>,%wpXiccNۮ8-C9\j?j54QP{ۻoB7q3^hPk*"kUy|rHwɡzoaYP5'̓wۏ =g*# ˇ>bv -[bDlݗ' QM0L*&YV,y;xN( -o?1D_S:l}DĨdT֬.vwG!@#3&9ڟjੋyB"o5֥J pG(ViaQ/EBIâZ8,j̅"B.h{#jpQ}h'1*ju#laTCF&GhdVȌBn 4f-:&4#'HLf-NĜA6K)zI0)CRp&CZ$wg NLr]zK# G(GŜ5I;OnJdT_RwWh7z@oŭ\~NQ۹X 0f99yۼ͡|sLM GKEΈJdi$$utCN^x:=8?2I ^`~삀"K#mi✪k]s -Aqu-XS%ec1 Z#'n Zvo5S*2_Ġj1X#h~"" Z%7ElPerHXŨC5li - "˛+ڝe">Yf8翺N([(p` T$4K;=h+Wr{7rbNsg4uy/wf"!Eqbd X`(jX1ީrDvrY5Hq|96c47%W+ke1n4Xo2u9[ctFiN,$֒H);w&!`}RqTJ|<,Pgf+j yyXvD$)?p@=+&pX-r۲ӥ2\2]"y(+ -| =ƌ%hǸ7d Zp'>˯(M` ͤBjѳxsξaU8I,NRA H)S2R6˔Ji[%@E}&)g<$wsBG75)vD <>da 6G%v"CCiC.\ @&p1x@Mi(?@Qhڐ#`B'JX3?gU<%V$&E0×R$ <>I`&}2F$,;9XL"'0?YX$]z B0+e6R"tD&JA' a #1|2rNJć'l x &&4Ru<ޥ` 4d4k:ZF0|W7Qa~ " VXF? i$vN!c,d.['k HJG%x`5w{w2N'ç(([. -$HB3$4k+ -ZCWbR(L#콝$qj.!GĤ &=F1ivYbRgՈIoib%I 4u$4\\@Aᄢ6إD;@t;NFm$:DGÉNtY/?I Nq*S&NQ eSq <@PYɳpծw)|9UN&/v7VL#ST4D}"*~]g8WbUc5Z>3q#CV˩Ѯgh1PovI(?'L%r'@񔽌'&$x;x˃qyo]a|csbu)ս*!jDпm2] d~d""r3Iaj"K - i!:ګZ x%{C4քV jMsٷ-?rA%A=^d$o$f#PP?Lvyt Pt\Z,(>qȷx]je2u+8+%NI]'`JSv'Y:2ܿ/=vC\5)[·ݩw [ a<2[alo+{.d~íA&L /s撩o6wPv;ߎЯo7xuvlʉڃqV;ߌߝ|v؃{sM+݊'6d&TsNjx}9kK -lỨZ@tVy?v-_h|(BLkK}ZէNnY ]9t(GpX5Ӕ3V>^RG5DM6fmwh":[I\ux6Hk=p- KY!26dxskV%|~XHX1=RR^)@co6]V]E@W5L~dfQ_j1Q>&4 7ڡĖCɧq>^e*]1(omȣL=kI@\[Ӂڥ'zaS{I'5Y8Vvnl6txɤ=ӳJ|-NyXmbAtj6U=aWcR=_-)PF lB€UP,JSc!V4r9`{WBwp.₿ 6~iG6׿zxhyz(4$#=B˳  =b딏Z*f{lo~pݣZ;Ns9B65 -Yo8J9|#4ɧ(.u~r.GVUUIJ\LX>U\C_k iwI #mGMM~ow+"=#:}LnIq(7ɡ?x3OfQ\ts m*}TRxXrRO]>^B{o˵b]wbZ;/9mY54u5UI2%UVHf Y'aH%e?[ڬhS9BӬeν[@,,0,8ߙU]q}=8LׅnH% :5[DKRP`l,v^%tXHDr!YmFSV >g㦖 SL5@*&]Uhat߇'Oු! tHn7nXEř)nBϟVKV#x߹gf@]R1ށ\?\Lt )C8ڞ][[x~#*6]fx|n%W$IbHg,N0,w6i/,zwN۫Y4ήY-fSwF~}ի~P^aD@y -͆P\}/U}'?l~e}Idd2|ȭrJ(,~)1%:|y&jϟ|b}٧᧟?ܼ?nݗ/6/oo^_~3c_v{~:o~~t4>d(j_T/}^;`]YSKlj"XѺZܩ#xeekGtm/C? r|ճL.@신u;{OuqW\좛L8nRQS"8e \ No newline at end of file + Rv41n ?#knOL1r7O5 %Qg +ų%`bR:i'o.ɥ>ZCxQf1NLk Cf ZӚa|#g~um\pJ;.΃''qH:,(UwJBVo`ry2yFL-9S#j&|ya24O,PAխjvxa@ iU#]?3S*d6.sleF~C B30˄Gc8IS5m;M@֌1eQvGԀcԤb%>`ƺ#+Zii?˷lO\61`'L1(}݇{4͜[%g`Q;fY^N/8566 3ު`hP(b5'yWsʄ.;W%w 4LCr&!(7ȵ<; 'd@?w_Ýu|GXTV"ot2"Xt>k_WATթ9Dx :1+y5Az|h]k3o`G'ǓOvo`fzѤdo.s=}Zoq F΍6QU2Mß;tM&03֥W Rá93MQ1|[*;6ې %8ndF ټZR4 m&Jpx3(-wG:<ԏyH( cūg߽xɩKÞJ 8$M,WI:^Xt^ NP%)WGGvq:InK&Πv9BQ@F + {Jc?Duu>9os(vnj=1dY{^cgBԜ#d!oABâ! 2UVSfSR%JЈCr/KVorU tscuUM5`.[=0>=~3*ZTݑ)[&B Q:>uZi#Yy5b4:8=sSZƇ目q:lp 9O+Nm|6#L^#vs/9\R.#(8+ 8dS3RrVd&سGYR7Ng+nǭ,_z S-R?’Ab/6,IMNrh8 2$ؒӞyUw&S/aܻם/w@7J7,4<\ ;巄3]6җ. N!eGYY5}`7t85[G52=Ƌ&4[B2:95j]Fc5A)JrBӍ$rHejT鬉^Bou"8{'߉?v7Pw%RІYcTk˟3r(c^6 (OC;lwakloHZ,)E6Zh5jChrGl]3Ҷ8+Ȕ壤+oЗWTp>8e +dH9Llqeyfm7QDgŖȋ&yRs첲ܓI)0t,y/ l$al)X ،!Uy,d~Zv0vsT?s`#50t,C/ ,_i&#H`l8N7 H{C]>x.{xԣe!HH׶>T6[2"!`9?Xs-QB~b9:Qx͇8; 5emmukiw8qQff^a<*ɂ,rxMMγ_K6o2Oe?WʼnFeڐ=Ţ),™FYYyW`Ck" X<|ZPs$w /w`7p=v)/%k%UZ6Hq Nq +p'a[xɀqs +sI~~@׍*zߍ0I=g )ID3]"rȋRQ.HG!?(4T +ԍ 1fGyj Y%yFy N.h2;b.FCV4sbg(I10$;4(pcѰº3[cH=(02܃ah"ZL#s<0:-ozw"^VjRnK[9u:z'( 3ϡjE8ϝn*_Td^j;`c>NrZyBYLRNJF{v6h`sɢ #R0Tp_^b WA:JLGͥ҄Ǹ4 [oXBu>ZV^+}3T?ifCXƕw+)j22PE~@DFdǔlPҼ +`3N83 k1RuS0܈gHRDFwҍ)QEsD!|P2A*RܬX~^CۨJ90W*m2e2CUMVr:Gu}LTVa׏۝h*p"5u.qB{XHn \VoCTTAGIQBB0Pw+Y vKaȘF;d˃dF 3S;]3hE)m5D1 .Y&)=eJ7-X^V7|8‚ѕ!쓂a@BMxBrJƪm6haEã~dbߓS9d%0‡!u=<+"-5Π:ċ XsAںuS![w ^KݴRժf/ NiE<ֶRBMT+X,6y2ɶz{J&X+K?$Mu ꂱkXYF */5L@Țslj}@܃x^0̐ +đȵ#pIwRv\|?NNy8O0 x/7P$քn1%(.ô#}'lg:3^|2ЊL& 4obڗN3لi)KklTij:k/IWD6 +R+KLF64 :I(޷)6s􆌁4. +DΘMU|aKM UoQB&iT-W:Yn&)"O-;)B=d-'`K c;o-!~kWMW{vK6]kd945*7ў؁#ӽ8Q8Na>_Sk ;j)v*lEHÄ=:N}6[Zj&~s3I6no+r"ux''0' Z6r\pAhƐs¼b7,]?:i.%ĉU`5Ɵ_𽠈qPDh)<g0zU)2ivʁ +ygr}i|z]k#-֘'?g3'ϼ d+[?ƃ|' +z^%ORʒg,|њe^´EغaUK H{-i؇PpYVEDixIY,[>cía<<6n obJ3l{'5`eonMuk(wLNS怕=S[yiC2B+7ˊ( ̃Xy> K$bI ۱qv)20wL于[I[>Nx#wĦ`oMB;/7"z>q4j726N?fYKY쌵xn +ٴH\vյ( YiBί 2c•X,s(:n!M֒F\'~&w{}<أxK;qܑnhֳ|;7ecUYFel2bKC<7Ŋj@!bɮ}3 Zop^͊ Q3"5ͬ; ]-0__IGfxr6cfJ$FIz<]-J8I^zGo<'oM.ePhBmK#9%Y$vDIFYo;ӧHk&sD@Z4WOn2`Al1дQv2T>q?<%qr:-BY"q%QBeYNlRtfuS#qNH ӣd d +d#nFsLr?1cBrríz-pWm l# ;%Ϝ82!LlZz# RϷ0Hbܷ=" hRYYwr@)RxX +Y\9i跛|j ò +?6Mzc@Kg BM B bztH,LE¯_Q?|PWY~@$]?u|fzeeF{)JuY-`JS~K]ԻK6[37,@_N]>seʶaI'NXVz&\۽-g d."~.| Xŧ3A(&]j咜{I.œ9߸5ʬ #TN`S[+?G 5LξIk+4B"pKe+^'fxT0 N= k dYjEmN!o&nygDVQCIxs4hM &D?4'Pl#D%VSvC']#+º kOS3 5 s0Z oa(Ͱi~bzA0DT}/-6CZZv=JY)NE Sd_׼ݥGzE9`(RFl^Kr(6} pob3tBDsMp }n}@k 5 Ev?de^h! ۄ4}ȱ3IO5=DrtͲz#LJ=#Ѷc;fy\IFllFb/L8I϶*P; [bp`wUU.=ejg19\rцNJ+xqr:K4[FNfkC\V0s'1v,*I.(kڑc :3+S?i.q npON ̴8iz؃c~n~ڡǶ%?DN=:Ih0%Be|"DONc*?N1h.)QŊaKFHbVu;CNdg^b3t"#F.j췭gTlVsA,4drA.Kܷi, +-dGrUwqϲX`Ѐ.@7,gF1+Y($I|Tq s,g=> +0/ _蘉>n&h]8ws7"LyG)鯪'i}֟Efh!h5SrX^&ri4'i$xeNHsڪBO*|7, c?E!3 ,.ZZ1rOt| .IFw.Eߕrb؃aL8.r6}ȍ%f[dI"r{XupRRr4#1 /uJ, [{EӸdR0x$ƥo9tyhV6Kfώ,Z#Q[T- f C5N#\U 5_ӁLԤAz4=K@WTz[% DV@l +5*_ A=Ԅ +)yw$)xI;R[JjG"0MAd˕Xz6(㨄``/=s 88N/f5/7̦%\RCKobUV yd yv:r@ +OؔX'XZ(&GXp̛zT`?ky޺zҗs(ss _K,|cK/TȀ`}#s>ٖـg-u*y]ŚT,u6Dfnd?~X'44*dF.:ul9Tp mAԕj#pSu-hvNH9 vuZ1?EmY%Ɔ%tva 7f 6!ߠJ Zp&pRO^ Eǯ/7_.U^n;mf$0یC xkiCQRP,gm5A7sUzsl2e8ʒ =lYZd&uPQ$t`kCh}B́|m) |$Xu}:e=t@l9oZ~8lNQbŷͲo&@Xϒk lp-Ğf䆗&ABMr0)أ2]76 +a kR2'[mRYW+8}I tr͵ lxpx^}a,,!a T]T 慑Ǿ#=SD~5a70"O!rhf򏢽hH%& _WfeDp@!'/ BBZZeEAEF=(n3I(B;V?Lzt]5 vC) TTyȟY{L WIb rQ ثt^. ؟ neϪrefۥA+] /"Ӄ`+aL|l1r"0"Kp/l0ڼoߔ%9oʷD0[(em .6`r7B }+>665Z. "{Hl.+uoi)W:܁`}-\I'+lTwD'Ö@6:/s@t'(&!{aBDFbP1bY6Oj#Adfn JCՌqk٤B"RCMtcI4܇͇-*/|7l'5Gcؐ}WHz鎆 >KJ!7`] +VQp ڥ %%g_ ^^ D5yPwغ]> .#nN, q3`IP">$WVsʨŊ+Oĭ[0@2iLJ y`}f/tz : &d /~ns"ƒǴPzh}^$+rTC.J1[V`N'd u/d2K!j\w2houvd`jw}a,G'SOބkmj_/ |x/2xpcRejd=J7(dE X: lVKCifT +#}{|SФuz#}-mmk[KyO,DDeVtMFF 6N&9u}MΊ~t{,5^>aol纀yTV>7goeu +zO&WXGC#9 + S5Ln#zw葦W˫3a\ERP1Jxܐ1ڣkz@]Ȳ|BifR80P +f~[z_%2 +Ք)j=iIE.1d02[ $<|o.vSњUd;Q ;啜 ~*IHFtNHi-sՊYdJ4 TudjY`Fo$\1c+R49^A9e} @}'&-NDz. fD:: + +DRu\oEA/ +8`qa|rF'RHGϘ)7UߤQ$]kDVVϐ=@*^jI:a:R}3 "vy8B?:I2o+L\H X6.V +T~\aH 1=[v0 x?> )j3O,z&$^H66ӯ/9&?R~Y<{*ߞ,0+g?߿Nq_Z ` 嫟|'S7?21 =U,Ew/^rkߗG{KQpS ;EKj*a)gez횉o# ly9PQT R2BF鳕S +[|.ǠY7Ekt-IZdj,vJ[ cRƨ%#N2H"xp &5b;*E\)(~@P~x&W?HY ></ #K\4{ƨ=ʴ%bM:ʆr0PBVfRUa!ZTmЩT-󺗧\ahq))إH!^Ϛ>ϖkl\|mr16$=I`[ YHiZ$og4 BILy!ގM x5uIK`͵gE2W!WTcVfou{zͅ_ɻer53ܱ *Q_JNeKp ݉QB,}Y%Sr#PTm^ܲCZ |7y)>SdW_xGk/8.#I-"T\ΒI$_FSi0ٺݺ^#:GfFLMV%\2uyq +4Wct]h٩zE&eOaSTq,)٥T{{O%t[t;|DQucm%UfKfTJ'2Ht+Rʜ#sc}=[zMbZiIm IMPޒYqw٧1zEZ1qw!Ȩ 9gKPy f;"zŻzɅ8XΝR.M[!FRgSC@x>/VuQ+J\L=cY+dP;,ي j U)wBcD&O;s'Um^yGqmߢ7/]cbۤ;,BBK 5*h׌h㪔Oޖm9ȶM7S52v9`Gn-e"#rt~-(c;a8{1!%5j4-3/UbA{grGWP2a4-vϗ3f@o>p(>vڗR}oT>{( GS%g9=cs)§Z@fVk궷Tr6tj S<`lK_w{7A P b -߯#ZF#}D1x:LBR-^[![q)vowKW=~? Hxه?9TmMg)4;ӫ7HXPM֤c={_LX? 3R?AAb"r5.V7=bX)1VQw. Y1D>;U3+O,˶GlSЊ6Ʌ:rۜ:K^$ag*T~$ZGpzF;GxuC59 >ƅyS.g&Z{kQ%҆ ➻3cgaA!CI5MZ %4P2hr#Tډc8!JR&tϒ64IJCIxYDm^YsLc}s ok3!q.[%(' rFXaOFIG_h `ž"91ҏ&ś0$t=M:+f`wM\*rHЏʗJ94NSٝ2kkO=ՙbR@ۃ`m6WSXbu_^p ZAQђ']W-ZtAQ #ʧ/vRrpXP!O^91RkwONF1埍w{DGa(TT{S^9x߮mpg3] t]JF4(Hc4{rVF}wfmdu (35B8H0\V,Ho2w 9o{>;l×Ҩ~~G3Dwp }0KX7|{0z<|biUjx^ m+^LUdn1yqw>C35іw]a7]Ff}Q߀?B󹒪@~$0ij~%YZzyfƾncE^Nbk6CStb7o+iަSτ.b@: *M>S sQbG L-.cɤO0 i")ỳ]8"87SU>UAqgc[-f7HkCVfLAXN5 &ɲI5z>(IQI׶2DhuZے zS(+jS2f%SQ?ao7K3Ɔ=9@F +Gba@&= hv/80%d0Тym9iGdϜ"R6~38*Vq #`:*ape݇6jc#NT`oʷ3q|]ʹu`ȓ"5Of]vɧ˸7h؉*?\Ҡ]\|РFJ"t~"ĊˈoIsT,+ͼ&k F64]LlξIj܂PN栮 /8{@&A{/M5weօ.aeͼ$1%eI(5F'Sk+C $Hr+RqA[Gd2" Bw;oG雳G_~ڋ1]7 yV:'*Z +ͷJ9(ۘ*1&EQA]>U6j5nB$3z{i!L9-{U7YŌwts;3lNu*tT{{T݉TTm4F4>ѰK΁P.qOy߭Ķiҏ^Տn)w; 9<>~@nα&=00`,)NGD=nwfth؝oBao*=kr [SE4 +1!]5Ǚۙ0 @ L9\(D Ez_,LMBT=Tk[=={nIy.>/ͬ5BQ܌i帿Ň\[|=w[q+N"jZv* Ӓw5qjr3GU4BÁI`zɹEz5mn0%͒SGV@ ߴ`Tq|xSO ]x3םۜUi/p.["g:6nJ"~>uDX% :hH~OI~ήi]SScpSUP5W0z3pnVܴ0rL/FDef94$5ʔ0>k$N.5[zՊ u=i:l#kRl>Wuap_ +->G:CkFr? k8}7ȗG&CZ}ͷQ4wyg!`/$x zl8> #S ᤁZ4ȥ0ѱ'-G)hu[sD4?Ŷ?kz USP+FmBSu `Q oeΊB68 +X'jgnXJ/%0~>ӲKqiγMshݚXvq^+^Df@?Zkk)egV%}Q;8 $5ώkqmŝ>D5`$_َ)K-w~*u4Qb_'b 8yAPќyhχƖ\,e 9 dIz6(A݈/hgxgr@! q:j;CK`|wQFe{2gwf|g QD˂7Ȑe kbbyZ.69bm>]Jy2CTsk +,7wVqwTZ!N#x]75 xfgyfgy"橔+Wvx[ag{ lSj Aa>:/sL_j-ex敮߭vA(O(DY陟O]zlE]4A(1Őxƨ:'/B&b[vZ5 p&9,@6.Hghj/7 \.(r3}<=SGCd]2 ?PvYiYmj5mXfhO-x{lf NY"í;wRbLr íEɓEL ƢMZ!s4PùD,ip?0/O' OqT6rUP6 m'>D^Y7@JҴ,.:4A_K *q6 Mm!:\B?F?osww&;ڲo۬#>ŕGwR!or+mD7h&*۳JxԳj$fVIنg ԧC+FzC!j+O 6k$:^|ͻmr.ʙr''N>]w /wyںg+z+yWIQW^22Ͽ»f||f^g1IϻI7 ARk̪ά̪>Vu箾guƆ̝̝>t׾B8Kfs'}v.ݭZe&k:f-R6 ) +@ 80l-QN'5h3TS⪰Ns'VAo+ +P ae-\G + B iحd5%5db/R%ot8bs7[P%3 "XdQ&mo+#g^} Z+|!QH'DP-Ơb'%nf2 n +#rTPG.FP':0_fi}W)0X蟵QnB^pEЦ8 ypuB/vN79qlŞؿ%-#!V^PS(iIpi h(h>{å +Tokܿn(֫G?tZ-"z?hl]ta(]{ esٟu+;4kP@078:w1q9zvYErChm\\=p@shŶЊ6;2O_F9q~Aܧ}uκI~f K01_Kw!L¨5ڠ;egeaB7/O#Da%} SpqX<`K "vf*nD@"lt;, +]d&_X)x#DhmCMk&I@0ҏu!d?z.y+vb7`i[GL~5U-?޾jn2 u}ɂ1hК:1$v](9_7b(h2= +G^]_[|~Dhƻr&Bs9I~KWݮ$Ӳ->| vp®Xϑ6ݛ{mI;COճ ާdڅ?mMsi,Qu;`QbF^n;fZqi`^.Ckq9` urUpu2b:7N.=L8CR;%:2]'1/D#By = o'zkw8 _CΡfP&lo J MG?U{l? ;TߘE&IS@DqH-<-ϩ|;-pAG>rěx[px7„ă+uiw.*%BŮډjLbE7U\#F=R~ R'{Y'S6KEu,|ۡWU䵐w}l%ptYfMZ?-bqtY'oF9еt,}o<0޳$@. +(?.kS;}4]'@H.?іJbF YAǙr߁rwLzl;`{j` +Jyi1 XJ)) NT#Qq1bpds{;Ա#H]pS4"InZiZAc/w`t;U()ܣ ΰ33Be>I& %/?Oζn3f͡G- 3]f,j#>yN?F:)ޝA;&x0gVsu38 W9 +!: ~A>Dl_Ö4GI&#!s|Ԁ=u٨OU`x;}WV`@rd;=Tf]լQunTw_=E!DfYص,v! +4 .?|\wi.9e c+"6r +hT>'SոKZäoۤ#Wx2Х[,a9"b0 LIϦ+&!:b|~L:BOv+d_},p_IC9},p&oŊW- IN|!2wݎpq2%3>#?hH}q@5h|FۄFYy2(]<'Ȇ1k&GV̵k=+:gÒMCi'Uv\qHåcw Ǿ]DjXLHGR",^}\mjZM1uMJ̬,3/7 +˴ 0#p-+rˋŒ9uLlM0OL)g:cF؅V-&xj~WP +F +tOH֫I2+6Y v K5јRLAS,`> ]{Kg]"lCxc,amH\[G f'G*1> [Yb;-D&$@ 6oR{;^3@RQ}Nz1n)D-i::X࿘j4njR;ljdo bXXkej~yDFgCa;V)Y M["2e`mRF$YMl1,evRX-ʸEou &nKד9WChs=Uc򀚐PX‚[\ͪ.*a w +.,1PZ|HJKjopHF_r.3)l)C_a 43! hxE;Y{,nUT•XHx,b)[)1c)Y-A"DF_4 ;!6|#aݤ :%Dp +ZF^3M3޲~E8y([VMmJ/ȁj9yMS-w`dɕBDž-) Z"1`Hv H#1HU=\Q&[K fL}BHg4nC4^ؙ51#'r]b8PiŔ0S}(L[iEiƸ5V;bqcVь"Bv ~M]=栳,v"l ;}:hlhs.IlT*[:ۉÝX.4$!n8$,&TGY/j꥜6 Sçw*I"GFy2@I;m˃*I#Q 3[GՉdyE~nI>%! Knc~h'sW/0pƒ7PwM&ղ.:W5@TԊzSUIhm6wv8u<+А pX +i CEB?!yp192=LC0E$[1;5a:ᐶ6f*:>3U#pu-}.){OaJ;gCLPɎ)糎i&\tetТq|H:x{(Ln!Ͱm=_0Xrizlyuq`pR:?2?fmR{x=:wtwz{<ه#[aJ¿,W Z~KovhyYoN[8l×d'f}Byǖ~9Ze$~F6[%rwmϫw3;Ÿ6+~-f)9CzL7s$ТSrJU#<>6ׄz3Ń7wٿwszN;NHlbOP,\\T[Z{{ѭ"Hh}/P}вЪ7Ƣwap53ԁ"vN +׊Sm0FrN+K*U>[`hmD 7?nk#XjuR3sHѡUd~UzFyF *m端NɓK&&B]bTY]mᛪ1c?NLXS.ȹ,VQDCjOknO܌hG:_DLr{ʑ41 +lXF9t""Ksvfd3JXTئo#B xy>tY܉r3@ g5[iv5 a,pNГ5s +И'c%#:cgQxynpʦێc.'YE~H6kke  +vʶ; ƒ~jO#MKQӋζw-lx`gYz9Iihm}ځg톹E{K?ispC>@`tIm׻S6= '`"yeXEb~eΨ;e"+2r J*meY~;Cl9ix94^j$)h+PtvfhȜgFv-\nyC'mNXF,MФ~Yf@y߻8e ;/$B/Idn؆~[&Xfm/V,C+i&# vgc:ݩ{6}#5-SpIndhul#- xQ'f2V-Tu `sv@2Lǰ Mb#a9VnׁVB/mm1[ndbv4ȑw#/nE.@B%ev3IYZYvL9aiD)X1]+ +kF8h-N#sjvi'殽{ S  vH1I wCn jiz ginhpn +H/"r[{oY#w^ieP8~yFE>-͢ Ǒ>h sS fF.t q-Aƹf"#uγ ,I@,}-1C/O O +%\? 4A) `m=Xen.afVi}]Q8yU%2IQlkP㛬N_ЮŰ35`%&h'`zDᕙyXzʂ'edhNAiR<)MG;" @VЍA{2-O:M/wx-h>m?Lr35 LjIħSݐB/Kd?;GA[#rdam/4K8Lj^G,Bysxh`x3:3-}3\>skS,̒JhMvJHge Nvj3u-SCl +ѴѾ9v?s03ωzXA uu& ,'Hr;:-8tgS|U#9|h @R9SWDaeÅyde'`v-Krm:s YG3C"e^GInvto$qk?_$}'v=YN?w1 "*-d^a';0(KC$ubBFXv?4FVXmg$f1 ݰn[ 1 +7-(Ṗ|nvg#['Y{XfG.2aD}LM5q;L gO0gRg8LHZ 'V'ƪ#gA"{~hiF2q·R? +=fkJNԹV0bnTEd^+3#!&-s42MM0"S¸wNE^᭧gfDf$+a>l}#$_֗aZRe_鞠,]] r2 w&vt+y%BZZ +CPg-$S,!:7kˢw;;\Z2sanl*$FXë41=UT#~9J$-:@-iQ:VI?ky ;`/ `w=8qg̟Oih#BfX7'0ݠ;Ai6ɳ0( 4҅ 0əefYBrxb4#)WNڰj$,-/uk %Ui\Gft!{΋#um̤;cU;#P7ΧYϲn3ʁޮDAف# + tevc͓LƣB@PR;/h!u(ɈҤAvNf~iїowOB#)BoaNjG!t6|+L 5gYNf[a[Hn"|)O69 1<.%9۔zP6)RXb<ԫSlݔ`oϸ]Sⶮx6$.]J=IJ0ʩO405ԉ#ޥ&;w";K)k"Tf "t}.XH+k1=zfLdϒ,q$v;mhЍ1͎ތX{:-+|z3CbPje ų҈Me"-c7 (sh˜8h̴,M<ېnAYEZ%L~Pev*NF@uR%<#BͽLjƍ`J5ŗhi^N5N@"Rd%eb%j~V Bqqn.yEXEBfg!l-ꔙdN%cj@~GfQhOw$j &}@qYRӴ n6/)3\ 7s)tjkڳt!4 XPuVY~ }ݷQ׋m R ±/is JsNI`xzWpȞ#c؆k!qNX sڍlA<#m4^}/ \V|$F@aنYgYZpC~Kۢ"#- qSI0{:Z QG6}YeI +ף㢐2$GF g[A v2nE]vk$lVpUL7C8o&,6KSngP _ٓ6Lp{B!4I[q)NQ?] ejhE)fGYYXiuL G5π6g![H-qX阹]tn?} u}R#hw"dq(sZ._>FAZNX.wCXGܴӴI9m̔E]8NZDIX >6B=R>d>Rn竪Bm4 PuҔy^DvT\nVXѮgzD)Ğ8 ERF~a:^؝DŽR)d" 7=Oa.m/KK#ĬEEXAv+O'm$r`$@b:Q<,=jÕil^a#kBbvmsHӏubfeyQX&p/#L" <-/G*%zY|=m]3L K$l%kuBq=iH" W}'VF$ZNtq3RZfiȭaӜCpKV^ufn=mrEJ3CȅC]+="!Hˇ6mm[E7_1&m7?ycӿH@~Z 7 +>ax寭k͉m}h =k/ eޒG+}sǙ6]"  #Ь1Zl +X\whýg!4:D3|MQbRI%v]R B@gz$lYmV^ +8*:3|٭yk0#7!D8EfXϛa= =˦YݣH9iZ[O@zşki#a;rŜq |'ѱ[8ޑ.q3Fu."ozCۂh,OC?+ LN=]!MeVWM77{Dʤg!|!3F:5}Q' yd^KcY}D## %SîiM"k:0 ͬ6ɟ7Fo /MO;]nI"xMha0Lx7bx*3lX,DpĀY-lZ1SZҰ(NSx(#1ϔ1Mi fU3/Ĥips nƈAPY6d65Fr^yыr!EOYǮ z%-%rI?ґ+R9toTr jk?8T@?ſ4 +V. NOIB].v\TލDc}G>V9_ӣ(K([=5F[~!LzǽlY h += vW оWwqj^U;!($l sEl>$9-Mlͽ *X^j[R pt#gK޲] NA_n@asހiV6HFHƔKA:.ϲdp/^)yd `moO-Y-'xzVk`֬?Z!c 3?5hJkB} np{Mī=:mjI0<' [Ԁ8xW$HR9usv0{03w|o/JTHRh4K?+uC|?(HahsPDHʃi[HQt3!+aaHݲ}^0Y!%PEn90Nd0/,d1)PB~϶B4~ v&9( %&Byr7 RM`dC3Q-oPܯ{PL`&ɟgTgծ=J˒ڕ +)U։v_L2[*pZUd 4(K[o͎4i7A@JD&U6ϋgp$B-֨Β(g[=EٔTӴ>TI~ ժ@ʻi,d:z*֨?BɞCUX.b7~yI_`ۈ7GV6`S*-lGpch\3B3/R"_"E)cGuG({8i,5 -۰ |D.x@-m}+YܘSng}@4lh"j&60]GG±: N[ b2aM25baMTx} QiIdUNV; &AmB Y f!] hhὥy71O>8V1ZH~= Lj6&!Y->آ&YFֱ5;QmV< F jct6.{׽YJgiY%aLfx4#&ano`ەt#ԇu)놠@ỹIM<ߋ78JkBUXh2W踿j2OrcWB;_۰X;HeVd&hn:uA*VcDmȴ*ħ"Hh?l$3_c1wvWI.Fz@i4eIA?Hm:٠maWbj)O Jȟ #p"TJ壐<Ԯ͗"[љXC2I~74BLV$Wz۩tgn+}s2R!BĕWy^o2F47I.of0K%?D͵p{JYH/b2[%kKi@_mP[JZЅӷT'MYN$+JՕ'9.!M5V^%C)L5}юYˏ5Roi#3zMLKEl_OuHF'ik BEЗĬBLTBKaƏHV租*H۾B#JٛX]겚u0~[!zR:Fud$v_ҊDǖ %Om_9ž`GǤjʓ%<s^Ό*JkKFuqB0#ԑn߄f]XA(^U)sv%8Q뺘4^z'$ʿObz3#GOt1?7&R4X ƒ'ft,Xox);&Xd0& lLxb~n|rC)X9c e)b1b,cAb,^,$JÉ jfKe'05hɌ!߈ɟC8IT:0QF5 /f:<>:1]bV_bbJK?abqƻOT6BBB` aw&TJgI "Ա&Xhj)YX<~|A҇{jj7܆jԎXDgw^=ŕj`iOՄr CC'NⱵRCzS+-_4â* +iumtR%h]u*,)WBitvV"ZC*7t+Bb;o=/f߂T].P?8L6z1} {A+HSϮjht @\Om 4(zY!YvOL4kr9 u>Px xv +C@ z=ףWaHUee*,%E(~ dT +X+,!Z%רQ&CE\{t[9;S [[&*2IުVMw/[a +, J*Gwy#,n{+QJj,j-8c]xF +| | !>H0 r>2 m5Eke +8X*]:Pol>B' Z1j۔=jk{QRoޯ|zn5_\pK&Ioڧckں`E&N4ٹ73J׷::l/n[`( lSèM A'IUEǪc})shtHtώ8[BGN\J۔lWJ u޸٦HQctޟע_Qa<aIEꕂ9jleTE6$Qt^ЫnD!X! ޫ2 .W=(ԑќ~@ +o͖HqAuőg86g`5Ŝr0>3?ez !eg=p~qql>_V>kR~MA<QQ4x{1i^g5FwhBy-`N$،Y.;K$/"Cަ@NXpL2|7LY ÉO(MH*QO҇ 6#8I6'-Z@)Zu_bZwyqZ/Tx6)c5gΗBޮbu[H͏PHxgd|q<5ѣS~A=:}L\K\4R0U@;F E%,ґ"PR;IA^e@۫{z ~$Ϗ[}l:~Buea{p{E탲7;Zv8GX/Eɏ-֦#t`[)oS=4 'O)U! s]F@Ȇp + ӗ՚Aӏ%>}RNxhR?8c=v3c2m`6ZlPR#؏>*} ^cfXFyejAZYgH+Rlc!&БkfEcRV "x*>iLv?D/cs%RbW{邨N|Xt7hJ0%\)OA.H=NCa!jl{_"Œ6X13]|+Mύ3a3_vERRs4 z +C -E qtl<$wT\| ߞCJmίy`(o̗˘&!=7xdFA7E6[ψl_Fh:;uaG>_r@25;o#U %ՠ_UvhT.LXC熂Sߢq$&(Qz4HXkI?5:!WPAPKuT3uH]waF5`3Fmp QnRORGfn:zxq7&6vm#n3Z %O*_ +_O,n^n#{ rlX$ǙRkpc>^O܏o;m< 4T k^7RD$(eOĸ& }Hm|*ՕX3_ s?,!ݔBЛRewM)CD/Vtݧ#oX@NC#M |Vvn=25ib|7' +{z(ex+ SՒpN*\dXe7t~ɗ(䷼X1-CŢ?i.M9Dsߦp ciu]~1MWt+*#xe,%pbîu"rH4$q/)&S AH6UL/zRڽA=Y3њ59tgTJ+(0+[} 0RHԠ4h;2m{_,pr0q_ 2QH-:'l׽qB$GQy.R"ѽJ2L#t.G+id[3d{pehIS$/(onv[llG$Cԧ/Ã#6RF#;Y*9##yD0o&k!Dΐd &*uA㒣=_ɔGQ B)!DhFjX`bAλMxw Kre_x#˕ˮٿS2)H6Ec=5hdTgZK-E~Q`V|JN0 *8;`U?@'u4Zئ^sDCКDkWqDr\dumZC"um~9k3BɹԸe8ۉ5]m2RK-pjx"9rn ~ťh7҆[< Aޚ&^*p.4$"4/0TWXqٰ"#DV+x9±h5`E}Q@Od4Q"Ib+r0sDAwl"rؠv7m/H҂8iPJ95SSJ66 *]5Iae~Ȅ +GS&Hi][HqLGC L7@& ++_C-pLG鱧_Byf% s_P_ɶ9`: IWD濒=]X^_Ջ5 ipüXQXPՋu*/%˦"K2pg 1Ҳ,󍔩af}e!Sqm5xeKtϠGPP!© =Pm}[jHGHhl$e7w##kT.nS*1^ 2 R]6P/=+QމQu< + R[@%?EK7WsA%"J # ˂ i(W8jx^[mv +<-`٘T@^qQ-"3J]X_Oֶ!^VΣ.rIKOد\kGZX"W/ʕ\ЦᏢ֏>_^j*ne%[yK/sə i/c1va-z ~Y}эY\ɲ>CKǷOʲ8 x5L) ܗ,0wD -|)s'R %PcznofX%MM T#_㠕3Nf -m1A3x>1&ϫ]Y{~}[HA:)=lgItE氞͋VNhS)o:FO|I6}|S۩pOܐ55US5ΰki^̕a ۫/ ۧOtA1Zԫ~_91o81QÛ슳zW3GV%gMct5՟aKO]<'37ƖY$hɧ@թYҎDiJ>? !h߁2kIْ#o2q\( 󃎧{n:HI_hY5\SHit!^ND~\M lX:fa-M9ha8Qӫ۫A; r:YCv~hW3yY[p?9 +b/d>Ym&bEJX!ofc/uQbL~W<^ӥ3O?L0z#6VcWD*G*C HkQ(l'8c4UFja'k +-'öڪ?T[B0jőu)]*"ߚ-^^Qz4\jp*'&-j3*UYެW&?~dÅv?0꼉՜3&{!CUTQȦHqcע i] yT޽$0 Ib)JІ:ep'<#K?/*Ip$X/~ϓj;;Jշ-6v3iXD`:#{^ͮAW5n'5٭Yͧ /62Qm$yvV!޸U\^t˸\Ǯ^" 0$?I.5}Zm&Nq+==sZ`\D XQh/$U_bϑbi֦t`KeW}?>2AZn iy1`-VH@I 꾆_^inq'H uIpw&Xƥ4Dr[`p%s,uN}(TCRd+z|i葏I/;ؽF&%dlR3$܍dEW=QYhPD@a+8I rOy +aCҘ&^ u~96Xn^=%R_Kuj['sݚՋI1c(f',~#z.3ӿ%.MKj[%z:j.Z5Z ,E[:!)[QdZꆇBwgTzw5yËU$?M_#-R^"NւĬ"10rv,Oe'eW38Pȿ(7ط @F?gXH&ؑ:b]&3\ jTaaR# rbo%iZ0<.A 0Fɤj2dQ1WqybOl9†&Bc5$W_rrR@&R`q\b̺iTsip  AD_$_؏p΄)xDAG@G [P2['I5ٮVdSLf˘"LrF&Lr\U};?E=FOZw"͖|épcs7𭲿i D7ZC0bSR}B+Y27G?XWtJ?WLfŊ eeE_~Gff>ՇĺfX&V1v({iGvC-D_0 mڶN* j0}M+E<Xp"jRbLQCAI}$lRO\]t=cRxxs3'-EtXK~̀%I9O>[ ig1J($;C~G@?I&H_+$Bߡo(&oM$71_p}84TꧢWzLQ$ee^u5P>PͫU _9hP]?c30Uz1zXES&wBDx,VhE$tz ] ?ȋvA|[G%rЪ[AE( 4Uy }B[el)ٮ\<RUڣ] 2E)>0Hh.qܮ 3.OR* \6ȌԶ@wy?bب$C5Pd:ԜHr99lΰoj 2ieΑFBL<;#iMq}KmBp%>ĒX/ےֱDV;֔v4iđ6E]üD45{X RY#P:B 8%GjݖtO &c_ɻ=ҵFۿ'mz ;ztӐp83,ὄm/X&3Z[#zB-n %*"lP,ۇ * .j=_9+~Vl@;|1cyYi_22* ([!` (J@APN lݲ(3i!KP"Df\>Pql|e6y!߁k`Ѝ謚ȅyN݂!@y~V#6VU4ipKASɏ2Uju$=(F_dGNA'(k t>Juӗ]'fZbשѱ֏]9*1u~<~*Wq&OzO_6)6멗-ELos{яd1TH\74\ +¿cY75f͗WǪ$?uo$zK*>;h_6chM\g9|`E{ZhIClZpLU1]2y0e?,~"b]ԟg\LjmĐc,h<da礅ԨL +{MQ*II){TDd\nBLOUdGU$`3TRmFX\FL{Clf$,E~Eh0{ea$oy7-=i6җW¡+s$bvXgp ujM7P0uT@!_}ɵi#^k)rRD^;V, ^=ߧЏt~J>I{d֛$#~gv}VOu],>`mTr z2m[Y~cgϑT=4RPZ4GP#vx֩#ӺP4r1hI}F9uZ=}{8.w_9p|4z^n.h=|g:)h({\,:f5&f7om nfdM +£ ٩t ;ЄMl`e]XpI|BA +)X7 {6 8 b}򭛂uJm`T}:@iAOs$mzw`Z.;-ȉ:uZ4DJygn)G-V}W8J8O4AبB(r S?S:l%xNf?5C9'a{YU/Cǃm㟰Z+\AuTTx:.`]_gl}([&\(Eq),]r{C.u Q6! Rcדx:ypp5^$Z+<LJ0rFjZo(q>_}A-~>_R3'M*.Ne.~o~P>Z68 jMIwLВSǞAN?6?LOiAt_j7OE"ţqqJzJH톏6}wTlG2Ӥ,1u { j@45U{w>VD)Um1maACWKUM~~"սtړr +* Ŋ>+$Q.7&ܒ46B,50<1nHG +* &@(L[%^wlr813vJ7Ӥ*Cg"Hgm"T6=7C(/_\˄OJ[3~ +L?zy%Fᚮc$㖶F~f"S-c-S5ӂ\?qȟ   壐2Ԯ͗"[_2IN4BL'tX*&GvZ,%QKlQ(:~\WZM]"{*6Օ{Vm36菠qm{Ib8nn!KLH܌ $j\MdQJG_JoÏ<νRj5jji]4AM c^ɌZ%;l JH;M 39ģ|>Zw]L]1B?{D <5`wdhۓzyj$YhnIJ2N" j{W{l^I 1цS&fwjuGӝS׊fjVHM-6.ѺYNDdAdEh]u[7C!cT=]`j)RPݽKB*)Q1hdh ~X#&\ ~ܯSUeh,C,c2$ܮR97KZ`1Iy*jM>_ح9 %/1?׫^d] vݸ3BW!a o59[DJԠH!j.f[>pXQǽJ:[&9zc(Є̊m7ǷUTb =7Ō^0uxOFk:&27$Z5j}~k,:{M!`-մAAȈʸ~~RM^Nh"Q}gsjO<>1P<R)u>GuE?NTO|\0UM,tPL(_'!Xnbuid'-KK{`E:"}]_ЂGd.uI +BN3<빯]υKeFVpiw=2Mz5=ү5FB Qp| p >K ;L?~aq뵈[/v9ErjN +5ZvH-sH:zQ!w=_}H]Jb^ X{$/8׺p!VyR.79\0KA=ocȣnEZp_GO.w:㼎IjȀtm*JtG!5ݺY59+]/{ܢc+rԡ pUӦLM (ݵ$|D@V:uS =i0k{Zyvzݧ_7 p d^$\E%̖Ġq՛YA*%̯CXn3ɔ_?0; ql[VnD*&`3y4vF2nKE.>̒9|{?|k_OkJoTu` x+Vt'ɳ}\kLg9vJݮ3ED,=RVY'*iT&"o(~$ddj(G'b:Y~W>~R2ܰ)gP\~̈́e72уm2RR ?Je4 v_0| 1ji>3vioBYl/*A]3)ǁ+O6R3y)wʈBY`QȣBBRrN\U^!M@Ru4} 2M4mM{v±،ڂ&jUe.bʼ + }͕+iv7$V<&ގkӗ4b9/1|?EJ]њe}IH`Ke:?@W0{>&dH/,Ia5'd ѵdeXaP m9YTGB2V~p;=#c8^YA8Gn/@ 15lǯJ'c߃ӻIعs}50bg9|;yk@Û b?ki5aX| xo4NDpM&`ʃij6K//eD@g$w1r_מEAŭ,h,JK VVj*)viٌTvn^LZ#;CM 7; u&yu{'W74|//|=J4fXkꊫ5$$&+jf/&i1zPqmĽ)|J|_CoGz8Xwo;kq8$dacgtQ?\e5M7,y ھDYn@2D݁{_N6Ŝf&+~nr􎥟Q;TO%uNJ]U^sL&T.k_Wm /uJeh{n#L4pXk/5`k\X|viL;Q.2> +פ̓j;$umU]S/Vų(OQ%NCn|`HXV@#?N&IH'PvΞxo|$U%F1lRT9iqzzdcԲVr\z "p0S>Hw1Yzd\XGz%vM%UP᭝HP频g:4[MR(eUx04N*g»ڌ WwRysoWbI%N qHO y&inS +;˦.T X[<˺EV/I. +v.EၚZ,*9f^io$hi/!iگFG/6wۜKZsP%<Le;$wΌ>^'36uu9@"lүf 7xb3+k%#Dc9*;#_%<׊<;ڂ jLb`0? h/_wH215}1ۑ7orX11o `DX&FVf k"X'ۓTU*q\=$9N4XizeW65US"? }f =SOnCYrf,eg2SH3ci24 F(@:TѕUӆ!֏TH]+zuO+Y9aLZCۤ8*QhWۑE, S:BsjrX!]ͦȧWEzA튤 +3yZş#-sjӽ[||Zo!^&̱)m7o>N +e*I7HG&-^A<>>v i/ )j-GHjVY1qHfj,  -aVh`lW)xfˊvvFKH3XZ?omaarbSrv11žp<)b3?e<8O0EL4(30:fWE~ (H9gPmT@] +)m1rH(e:񕨜cC5a(n֬>0"7*Bm:tOB@G|^U|Fxzsu^\sz4[- 'EcĿ}Хh1h9X[kA?Ouei#";˚h (.~̷2"$MA=_g9(i;a5"#/prݓ~?G1bE~|pS@xE6GMζ労јكlPj$LK0}A࿊:Wlact:0mVFef$ieE*:ocF~ɧdtE'IU[H$_bDBr0Z&CMV6nWJMǖLu7Ǩ3Nw@mSy`z +0՜M mۈWiF(8W{ul'ebW=l]-ܖ\<3aq3@O.)vˍǍUYW+^Kctλ +-U0@pYiZ"$i]dy@n%+:u7R@kYjܲ j0/AMi2{,y='>skm&չQMrS\)%Mr>sڹp{•Fyƹp"1>#SM z:Fר]{-Q=9t|0y^[}maقg'4x3Ĕ%Z'ru[?aH֚o6x,%=~.ge3rIʊC=Eh"<u .>@}xMBL~?!I}>#S +jRu2YG$*XXxao|u1Zi@B #rX^gGb̫ڨ|2>0*`Jѡ?Ri8c*G X8Cϥ]ҴW6Ej-pz5aL,.; PL0 ]}l/l3^(ʇu6pPj_7z1:_EV `OgxO1[I^pd5@~Gjb)هЍʑ& ެr@x)p7$$GL}´޲\wr .~"Ә,D-1qO{ h aMr_S;6=b@ Mv)<gED1}Ӏr +A&R\JßDM( +NKHxWKtɸ]|j\IF?jeeh6-Ї5&K϶qJD0j&Ez,U04%3kR\[ 躈躈c.LtiL)Gh$ѼhG0RXeN2OniRƊ&fwa}Aqc2 1яAhj(ø n>%kZ򘀵;cT fE4Jmdu+TzX"q3.\h0G$E>KfTa^ ;p0 8u 2צ@@Cq-<; }`;ܼƻqWw#h>G9y;Vu`A, #6´D +U(' %Q9*x2PdŽ4nǧ85G[lj ǭW=ĮE!NuMu/#jGѓFRYF+bq4r6S'tʥ? lXntS4XAj`'JQj{ -{^~88M(x/ +{x;-a8Izg8O0y8Ke&zTJѨWCî!.k6G|DOH*H)5cx xb cFx<#naA +2'E7%H N,2Z%VDq'g*s,!Zu'k+ӄdP.Ma[u Òb8Nl>HCOaHvFg Lh+eq#LA&;'I.;NyMue|Ru^& +mUON MnqLHmOQUn-Gᡢyڬy & \tK){R6y $M8qx'R2鯠.wHMi;I[]" ݼA%;* 0΍kdMbM,L( $n_(ՃK 'Mq. z%);>4@-q@]pVq`8s2y(k3]*ⰸv]E]O⊥8"|GZ +oA9;CunS8xznJVS~8-,KuijM·M4ng{ӳMUd_h?=3qɡ5^ Vg⨚Bڒy:j$܎Av,gžf`=#S;XPp +tvp,>笚@`8 wo$Y-pNHUrL??8T+,GNnr=Ď` 5 L+:ʔ텴b#R}qwG&N VRʒ8g$̲E~)w:=0(HO,-tSu0äJFqr2fu}]?z }o+7:ƙ::0Uōy#u]ktkB +WjϫgĚWdnZכΓjq3A)6db7tb ٧!?W?R#M@Cf)צL}ī9V69:Կp5Ie7 +ZtUz\Wgr{/0]rS%L'_r ӓ@&_/6"."." .Į$̷qh\ugZ)|ӸR5N'[ 'h8 \4W / 8 /I-XY2{XK^ہ5߀c=l|sH/ ~ԁ޼_Oj:EШ(B!9a}#"E.R"E.R"E1ބ"c6k:qt[Vɭ%;‘6kqfG kf޽*b4P(=&iI11cQưMcc,xWc"za a}c¸ǔ P +3 =@ Vuu}1.DžsJa8h UD3-.]jUsLݘi"u1j+$7Vpw'DsH{$k5)Ҕ#IUBV1SH+ U8*1.} hfxHq X+/E(EH^ɋ"yQ$_Hj7uhtM/5̏Wun;]VX:y(,[5**Zl_/V+1?)'0-dvJXV= #."M."M>i/dHR#g9rfbJ1cʴBD,ώWx8]i3դUה +Pu8$& 0^/S(Θְ C|i~(3M 0JNe kc hh/"$AcMGh銞P;’0!kO7W 7uL7c; njߔm@Ŋ-y<1%&\õ@q0en]. +ա mZ+96?7MYۑXk69,BQnLA¥d'pWZ=vwnSѯD0ǹ0{:fY-=1{8f$vkr3*,zw7YuuW7Q)նU=%sdVptqsFRUzkuuf%7B:ȧ~$Gn,AjwJ`@9)\X'NIlpW" VoKM`G,6ev0mu][6K][[b W&5 W-|Զq&GF |6}k*7̝\_u.dKmvU$\x2Q: + +QSjzZƙgm'Jʛ'ՃÑzOw ú(T\=ԒGTdgt6%DT^fJ&|[ߔhBЫ%#^%j^S5J]@4GLf_k^A;栐NBfCiCy>y9Si{w"a,z@"zHaODuR0AVfI gq´kdDo#lhз +/i`&6U*<ԸJpSW;rޜ09*544zHJDUPda9L+K~ĆsV5wlx>l+ˁ@C:eNL3,y*knR6Qs<) +O0J̓,KI/UJ4.M]à6][C~ԜeEb&EڱX#4Ia]a5p(% fio@3[=ꀏ 9 A_R{e0q^R܋b s\}?3ipS'K00=u4p׌P5rSKNpH{:Nl}te>&+_29,Se.7]ndn:q+:P/:QN@*{F)Mt#3i\FeKJ[?s&u$7WN5z7 z"]`'P XSZivn͋{Ž>z' s0&88΋{b%YDjnvPv%9f0 Vh\ +;-9 YSxNNu&ASG3(psr7]ۛ7oۗctowz_2~ɾgyN۱/3yȉuċf3i<ۮ5`Mj݇_asͿ^^}ceWIݏw<<=Ov0QσQ`ٖGZp6bOf9l4GFxm~n^~Zk辜˯y~~zxv܉ȟ&Љ;{l8aⅳȚğ:Np>am߭Gn}Oc.ݢEޠs>-x  +Fi-QN;B߳dxd<Ե/=bs +su81kf f|-pŔ8fdFE 0ULBHbIrC3 ˾B;vBW~-8ЍEw1lP]Gi.K0$Õ^oM> 㡊}c.7yХ-^) f''T!9Bη +HGdBZICKHrD fWdos 6aw0; p,\|>"|yl ti  dV +sR,{ϲ0_^WJ=z$6N^WWBBh2MtRCI>C6$^_-ZaSuI<y:Gq xPUȣl6!aR]C/*225["؋O|$,c|GdR("JUP1fN>)0L"zPx̧D[:Oypw#s`Jfn-3y Bї@l@GOibvMfC>3Q=RΣKRarM+PCG,s,6JWre{m_N/}c?W^y;lW(\ǻErmG1QII¼ Yr[o=g/u ӏdo{A 8(4QI"}S٬d[cpC}nBf}kN (v]<]9Pdg؈7R 2 EKbeYD[lB|M_]&oձB rL+BG#[svEJ0\GR{=OA {-zFRk:Oe1i;N%U +36_"tBL;_B|[J&Q+Mh^:h|DU3}P1 d_ ]XUD +((o^a p6kI:QG%ѻ͚ PF>s?UtF&b!ge5( Vۆ2 t5cEN֎ Hg#(M!]~d?~b(,$Y|E7@$#U5S*Ap?9|(Lj}FCc( @RBܘ qb65:v,tv0;(PfR4HXU +O}IȪ:0GfWZXOz-Z#*\⤰&3`OXٶf@iV!@K bU@VAK&ՙ(SU5?}(#ia(h^{Ygۆ=u4L==qu4LEɇPia6"] kMTDQkxg]#25P]'I1 Is#lh^i0zoljOPK4]x/~1_UbW&*pP"B׵fz[URW]U0:*g@Ш!BFŅJ߲L>*U0W~%v9"P?:)ӽ  Ӻ{QGkA't mJ[ gY\j|gjC]+4,VN릖e#Td9k~d?d@U^m 7 KQfg,MD + )g۶,43[zOYeG-9ekxBM_Z395s.0B@X2n`yz]]Ĥr822R!iDEQ֎MlHV"4qf B%L bQKsj]+q&Gr,9e,34e.L*mEu0GiEJU"ށ=ƻk St(XJ+8jCⲜMPU5"lzXuq |Ó%\yFa\ PfE Eix3-ΒײEbSE?>у?ygm8xry=3]@6喋&U8$(i%(T"M^Rk8F(4lmۤ敲RlY@ Vu[$U$wԀPQyl-hQ_G9ېJL x"i~@K[UU(~!v@"_ͻ$[%+Ue$B.H HMP< <-mxxbJI; Fg1Zݔ}@uw/Ӣ@7`4HQUN1o2fwCiwX떞enFZnHѿ/'!m\R웲YO2׭Џ@6͓P_)@pN׻U @Z:Ip1~PHt"*TDKi":udQXׂ֦S 0ٖ`ja 0tTֽe]Gf(T3U)~)ԴViI4d%{*\%<-\%^l}-~):bWE3"bUAs.ڰ|,$ \B(6~CyN~wT1h8'PR4Q7nZˉռ*٣GGѫ98 @҇d|J\Hy!Pmn<&ytK?0#p ϘJ2M܊U(~)R5MCี!Wi{+;hB +"y_bqB3tLE܌.]l՗uʪoLäK,ڗ +;!~%0SII\]+ř) %c"?z(}AD4I(;"&嬸lhAOe׀Uυ~'4Ϝ:۫e5oE% 6zګWJ~G+qV,@kЫoUI\Q8MpźLWGgmQiAठ虯gϨu5-eRp_ZX(gz׷SUQIf> [sEh\E_c9`)*O%b$<+Njf6Y${Ra__zI=jQQ{`KՒ_REY1wӒWkqjF%*ݕS!%} cD`B^mU(=0sx55E@K))0({Pa>B8J .`a_Ze]bX+Uy/s9eq~ʚW.w9qgJZWJQmtzʺw]YrM兾BG(ʱ=פ +i@L[j f$gޤ5&(EԐ6~敢IMN~e|H&&#ħ.v]SiN. ]OW{O3L-?ć7WWJa|~~5u-{-3-֓e_G*ƒTKpIoì]fm}=T|VY(Tf8<#>*+NQ3mQBRk"XUXMMO1PrWS};WׄUʾ_Iwv*k_*l+G#*xE,QNv"#H4Y:pIE뤛^s_yV>am_?-~~7 >?Dd_?gGJ5Mݭd]/z +IP0,)~]:61G[^n~޼O׋e#I2o3K9`]tQo0䏌p[ WnJ㾐o,%g.IOtL.ry|nSAWEè(r P 9"<-Wo I>fue`?"Po0][ dy$\~}~Kfx-x_|0Wd Ǯx^[8yfׅ>BtEY=#aҍuBi |%܅PC;ChltzwSѵu s:Og$#e iSQz#(D\}{s1GK>D"Wbm;A+"s]WQ6$JCThdm#eq@ƛwTV-lH!,2m7(5`ժɤ tnl C=gW20R:{[Va.nc)!tᅕ)3I2OmZ>Jg-I{G'޺_)%൤@ꆤؒQ_psza'N!M-ʄTMtGA)ú,0OJ1u‰!a͕.יV_ti<d W>ez^j4(<,S0Kqӵ5m:@^#KovD2M"P*&ݡZ^K+Y=.A0qhHR'b2wߐwJI_Әt7xwdyE-D'=z:Ȇ?8ZkQ&zel#~01#EB/`hqe]/y;#zi(^VW7Uݨ׸R:WU+´6 f3^{P Rl +4uue&9W`Sh]pW%ք+5zSKDyq`I])兲<{d\\QdW1t“{ {Vw@ +ӯ5Ip0y'ik|NΩ(ݬ6u8 XN8nx]SXzڠ,O,fzBrZ +ookAV|KerE{)("aVMzԣBgQNnxFS#./X@ pJRrr1+2"N |YMHԫkXiU6'vMHy *·h@y'r3DUu&AR=')C5V'ssJ +Ż~[wS0P +Q-'m7+ z`Q!`ٶ}2{Ӿ?pB- 9igFR&Yo52m*q\5 +B/@;-0p̢z"&੟%Jpq^8 j=s-F!u\U|| ; t +_]ϓ$&iG7 j%qyz#! >!#a &-jÕ]E+Phr= z'~C .A%x:@]w/ާ +Is~;A$[%J^=vR}=(~y,=A, Ins/c}PC^s8Mߝz;\z#[CAtQC& Ͽx?^726y >]8%6ibP@^sGH@/&Q>K1ܨjv*f_s *<B^St\01,iA RE/dʺ~ڽa GS%(¯SQ9]UU܊Xe}Ԝ.~dIWul5D)  d= <䬮d;2U /k폆{MvhJ݉+4"/akcߠ/>x:8sLCYeN?e<,ņ]<NۅfO*~ԿQfpx.Nr4D֔ KҏW7,2 +[0sA8wx__/ 3ɞ^}C.E{w 8Ο>Z{m֐_kxF>bm^w@cǂbEK{B_7C6[߀%T[vM_F_? _`soӐ~r@?p#{>˖LkGXQ÷7qog!\VU"ÇϨ7zh,IlwaQa wHe+C({#}Z4B-/ 6 75؋7 TE{Ɇ=pʈQrϨ&˜l~FPg?UHeO`OC cG <aFzMsA'D`|8W&iP2X`8:7 8)bGsl5J<Up+n00< u_[Yeյ%5'MOHϫw+j2?^LCw8t5 ) +(iqtPjWsn52: +aPaljl,@%:eD?<l)~'g7_ +oXH=-2WwȎWS@ٷz : +{wQCθlaGȨ-&tșsl)GD =eFy&JJ7gpK7 { oF-,\#!&?_67L#qڃ'bx3x{^ Qi2&="гp*l0ǰФךœt_}Cfl0%fY13{؃t +x|=rtxdpw0wA~ +iaPhj4K1N~kkĜ[f^qEZ!aUHfU'`59-[HI t5T(uK:* .l8BԘ94='ةE+h +ʄDBAw (2I׫ZX3cF:%+UfڐňgDʘa5HFZA`3F-H#-͓`8 <' Aa4yϧS+HghorCȑ6%t86G=##><8E'tFQ .egp?Mfehw"la\ p1<\ {E7}bX0\e[4]w>Op>yȋL=."\0F1*P1A*'AϨhAXnA%*:-ˌZ8ԛGA+پtT~kcTW*TN~Q *TkF ͇Q4vi8I4x6J7+|=cTt[*TtOݞQ1tr[=*#d3&lCS1{]p-ctS/9/H㘮dׂ I$o}60PCXToY|D[f苏Cq$QCy,r{P'M:;{h/=$,$t$y{PPHK{n;{`et~@~]A܁O+ʷP ^R\G8z"HU2 2OpHٞd:;+ɞ6i<̓$ +2A($dj'͛^1:P_+ ]$y61 + _` + 7[#o9LLϟh+0 %CXo!rOtOD˵s"WD>Hr2Jaܩ,JihJ7Yt6(:z>_dvs@,`>%bWIHQ4'fi]b4-Xt9~F?7(.1A]cZ].v{q^@}oe6+lE<0 +zOZ$(UzOTwBluzCƁr-l(?,KRfjF66>$ +zTt>OCtH86wA*. %LlIWI+ISI!|l_^" "8iǂ?;ǬʳBE *Ra,Z |k"=TCIdQշ7݉%VI +D$9<m2} S,[msyPj%ң({'Dq0Ylz' k]bfcU{IO|1 +yPU8q5>h[n#m;|}C]5/ u뿟+cc$S3PJe:vGe\}QY?MVII ZlIq 6j䞔E|rA{~ ++@6 +w=ElPpvDX1G *УXEg̾gUޢE{h}e}Фվe=8Iۮ!u0;(wdu +T<*xBevK{"$@TQ{oa`{mS}v^ϔZmP"m=R#PunXf: tҭcn6A;nFc1}<@ 5&z:Ps^,v~Y 'JveA&YYg +[ !]#M vYsnOHr5N4iSq#. +Y ի5[IAI |cM8; YoɊVcELCD:qrK+Ԝ'őDf%DOSj4EozSK9I|7iOB ɨ />~%]$,O .m&Wc=Qٗѹ@+C!˛ ] -0i5:~Cj=)DA\)$9yG=Va{8xDFxL΂a**/.Q|r4ghnf[ +=͕ݣȢbty|w*C}= *(Iή.&ܹNb +*i}H;3`LlQ@Ga>R. hDG$K_'UŕA&iI|$+EU69"|?Ht.߮ѧDcM*hWFd|_顡Yu".D֞ȞJڵumk +V ^" +?G] ibAP \gw*=A }S!B%f q- 5inЬ^ҥjŐ;;:wkіn9LqŔ3'' >W%ֳh[Dc$Z-/:F(hܭ3% KW$o e=%5ZeP>Mj(̧Ú-|=%D)rJܧĕZ0U]珫Y=̌x["~[Uh   (6dVA.g:ΛtSȓX8&6Ё^J#5KK$C3trނ>ղt#yN< :r'u{Q=aZT__8<Ӿ +~ +d,I1m` >Ԣ`=-zxA^ٷ=#EfyR 18.$) ӶĘ[X>5%N!][K[fo4CoN wxLdrJ6O +uM5TδΠ,<K &KѼAU]UwtD7&5lޭIK^?vv%Gu_uLhW >,X_M:F8YIiO HwR/H\d,80߮3(w;6])5顯M`L5ǿkob1.vgC{*r,60i9qJ| zb~JЅp3|g6vbk%{6.ɦ{8 +Qtzy<}4 r֕OrIyIؖ6 kd4pkj?NA4|j4_6#GOj,<@oX OJz1T w/5l[$"F(ŮL>`cn RZ9D6<Ό ŌOxhQq#٠m"ΌNdL'3+ E3 K H:H8p6p2 8( XXBTW^=9E~ζ^ژ%U+k/#}l<;NTulv0Oxy&૨:fHP_.kܣ9例$ +T܃R`X*?Q|)pZׄ& >DXfSO%QhHzR >kwP-D7Vp4vYo`5ÞIų3mB .`̸{Tq9ul'<"#)\8kMQΟQJ߮GBLdFOTDp! ɇd/^O+z|/e._z sQ5(BP"ㆉ,p'.VF?5l٭nEV4rRo:uer(D,M"Y1Ln^BҢEAtgξ |"]FG݊U.5 ~|8c A*O Ɛ +8Y_ļb_4!dt="mEbPHbd][60mz4toIOZnXXIɣxp qyүu IL|Az{EAP G? Y9bMͯ~SY&Σbptw0ro +lej;A<5GO׃ 4iOI0AYA2~9kd]1HEie7]ԱbP;73ayS) \BTʑO +Uq*ᅵXะ'pbr/,rrO4YKY^N\E^NHu\_~%ZFJMUp6bZ}J41]{G4x׼?8Dk),be5C) Cx@Ǿ|hI(hVk4`0c Ee۽6,"vi<ێl(gJ@BvQ-=+Ewo!A SX6A"il:Dn/ +)O~ֵo<.zY@OHCۡݎno+Ջֶn~oO ^Tʯ^4s{%Fy6^M~߼z}%aVA3vӋ2Š.x; +yEʣ!y.`gKzkNG}X$AOh DHDV38k +dJwkMՋ&i -j_2O`jtD&& CMVp~m MzoP,Kp0X_@ƚۮ%+~ 7G< X &#zW { 0gXט ~>-0|Js78r #D| +̟IIVR +1  ig$X_B*qFACfCNe10 a p/]=:!t +}"OoLqYKђ8a)S|j]02 +1gXʆp~ +8YkJ8XXC;k57N(-aW)xI҉$!OlwhcX.u KV0 NQ9m8=DYœO|l*\XJyz)[%R"̲^O`u05rxYEXO40h [K uqL0*ak^,3J1L2>Ͷņ^3'S9I ~TrSf[:GuKێbK{%RΫ%Tσo_6=D="ҳS`JG~mu8v5DN[5sZF[V#c*"}+~Tn3dT"Z^^rRF'pr~<߳F 52y܀cWG@ʽkf5MN)ur (\R޼泾h5yNҽX-m[VtmF[K/qop ^#nwă +zf»UL-G#{{=C(rÄ%^P#Avqk8rCeQ6] +( WUw?ovZgփ5O^Y 0vvDI]{4MQk0pc |3:W +y7mPaGg4R y :q\1sOZ?p PM̺Y=xx-u:7r'u{M:fO +?@A~|KjX9'0홷jhAmɷ,pkX5yfMJI/܈sQ-,+LE?iɔ/+G] N_tdgc+ :9"t$ :pyOUU+c*btm$J(?$8l#-%}O. c-?, tW.YnY%N%aM+ɒ$zfAV.KGڰ'*& +Zj:M%=A yijux n*.oX F,Xjc~#Ptf;߂f _&1ۚ-X#sxg|pE;0=\_˛q/F쇌a<}1AدR&u[$8@X҄t j`-ə vp۾6aW [ĻęѨNL{@}_jW0y2`7c@@_o,/.mMr$Z%emdpM(p,^:3lj%۟ ib+ځ ~( ᧜ + +%kTW@%6bKX| {Tf`A2YR8-]S9A9,C/mK@Ad^xU''9 {`q4]>hf +K%Zc)r du@t>7G;7q,֛%޻ye#Qn6pGe +jr_zQY7g1)'aXv04cEAc}|kʔ8 *m *=#L|2͡rsx6a?c2fR\]⅒Ear S /Q-rQJ 7ANSMnu8,a3y +E3 ?Jdk| ޹jSVEm3M~g,G#=2mv)) [N}qc!N'!2P=ţN7G7/!wjQIzdX k&ɇ:NbTW>-7J[s]vmfMpW~{M5aL_^4OTc^}hn {1kxhts]Ky1@t+Y(uW}K&;@ p,&"D.BmlT#x{Є&/F[ٱh= =gZsPm-t4u4t*P)ƣ,tKyMX[Kؕb:=h1Ea.5NčT /4yni}lBD rɋ_Sv,]d~>LQ LX9Aóf{WhB}6ttyw ZCϥFzI5ͣWKx*C>;>2fnLL28ƘɎB1xnjӎ9ʘv|F! ɲu fy^1Z1^ g x=0AԘ+1ecy>(c3 37L}L:%DŽ)g},1a4 "-0ch 12K},qsS>VX*?~,&&?\~LcG1.xXUt,Lxʰ0+1cy߀8mVE,9Ǥ6 qal c$ƜdN bɊ1c^Zyq1.Řc(18*Qf4OXJqjX=.FV +M.6`b_B @}gv= +|H {؁6*;q40XXE;q\ilH۝zlw@:Nu݉shkF%o@&Dˮv:͒&S@}f˧@ncX^rכ|ye +1"|4vChc+w\Ke7^4QE&*S(o0\}VhFjP 5AjOVjuJWՄ,ZW,R!/SB=ZD7А (H[:1yO'=%ET kFI뫗;H|$/f '\pCti0yY/1`LA>'՛:]m|m670 +gZ+ɬL[ 'Ql(fPlf_1#^#7&vӪDfݦ2]פ*]T'h 3%F0d~V|pT6˿"wy;|iQ5:8^CuӃ"3bpI^bsz'99ſ=z}u%~,-Y-[_'ҠG۪R:z8#8=z&\eZjlHxilX `?ZEmՁKG9d={uWd&s[:dd!@X \0f%R8W~(?S3JИ4)K(_SY)X1MX2ӄt,1gaC z;ѓةs:sM]sL:W{_˼խ`kzTBs3}w'_ܡ>_{7<?$5;.3n*#yC0m_5@=}}Fv<̕몁C +_4(qWuTgWjT4l!60Z,жv"1Y:!=p:a}j]uBъC㥕 HbcÌPHRp kۛ>e&>?r0_P1ck.c훧xO9tvߞ6O_kP[IO `\S)f:ߡCWx@J 旻*{_n. +e^J/ "~t&o>^ʌ/C[0*ا +hzM|Q| 3\|[e9mm>M(zBa>޵ PfsAQ|{uYNvž43$g](G÷n^b)V=5Iv 0m^p! 9u~CĺJV?NvK+{dz^}Tr m<_խW}9\~,ȜbAPB:鈽`*nrv^@<&0ӠrA 0֓}!Afbp#2 +BNFSA=BTNB@2CCfz}Hn$,} p'/i ͸4-} jIZGmvpGƢ~ʍ@bjz6șopuﵻr-,r^xZ +B$%W^z#ڤML+NI9DžIU 0oY:Yh%o^Q6/73e^y3r^o3A,(Ugr排ml{z l{ 7`: `k۫Om<߶WNez1Hlf#2{ӑmol۞|:k߇md2):Ex" iicjCTGi1eXV=~4׶J=qMl{qaRi(I^LJm]=N¢LtX4OYXK_-,}DsKOCX8,.u41K]-y.yef9I se5Ę`p*oyMW-Bէ5AGi^xIo#@FNI8zuP)VJE6nFZ8V#SROMjxRUlXEt}KvQ5{80-S-zkּiN{YKEEai7K|| q..ɺW'%@Ҫ*G ԛ,\o_oæUJ)[n^ +Vſ .EؙDZ'Lܫ׉ϘK:?nwkeJ6 "m>8g|~fZ24HE6py= MJ2]x*SU]EPe\˵XZ:$.(eQ+0zSEݴREC8.#e$ +X\sY4̭̈́S/-FjGhoql'tڦ:7qZ $H'A:dyb1ߙh\^ dk9zub +r)wkvik;OJl?v8I`}kxI!RyD Z c1;𣙝bꆟB#؆V).;$ 뗟(-Al bU-!vzEB eaR PfdTZ"F DkW~1҇7OgBM? +M񒓛0c +K+bY#0킔SRR=}~OrP ٶYluā"mZ/5Gcᤶʎdq8D7hF6>m6ѪX6H{)kD jLT(Vpf3Sc*!/ӑydKj fz\"Rrq|8#ܑZHx>6O_Gs2a^ɺd$/M7+ӋAύ7kż|D5wD] )`W`(̧8a 9G@UGȾ_H++1+$%72v3 I(!4 >ef &1)IW.&-"^HэÆϡ7 zlX +-H"I65P*β fԖAaBOg_rCx4';ů>(]S*L6kJ?{.UU2&"ؼӖPܰ +9,tEaQVf4@5I +(0R`Uf y[)tzm%rҵkNH0K$<꭭Gj=Z) +D+>XUƫJ4R#"^Ujl]N?Eglyv0r!HY"B/t9m[{%W l-w*0,Z\j(˜w26XqndTeT`/Z8zm403g;!YQ,1"Y蒁`eػ᰻'‚ch_-1rHYu;вP*mn[QL"@Do2ԕ BmX,]"9n1*ؠ8=|縼_~TVJ)D +jNhmD.܂# [ ``U+ wUs8nQDՕ_hKmD*C:N >cK'j 2G91qcHu*Ԝc-rK5@EPcUD?U]]$#+/neiEoc&׻bLeAwX*->4n /y7 W|D*RIhʤOFӪUnaQ*W|qm40o%[Y;j5ipVca$#A6aDxWO"4)/xӒ,7jzl Coh6 ҡƚV%UT [iR?AVҭ>4j & g6(XGS3tj /5%d Kϡ .DzзxP0++D-+AD '@Җ6X+8hB &IFf,dv`f$$| qmkYlN(ON Aߒݫ_{p||O+ M$UVNɺ&*"g$545>_.5S}\c%YM6+0RjLF ze;b%aXE180X& ٱ\t8i.Р!zMCjRwp\mT؇(T%ېR5mXlK(0m#MaC\`?Ɂj%mZ&% )[XNMĆ/7Q@@k/h0wV'6ꆊ#*@NK\'ζnmsCeK[)<N"^qEO7.U_o3J_k51pSi8#A +")WSPY,_1T>."Ax8X7:m͋#00rwaǙ=mD/Q<*Yf^2p9)dT0O`q1`p e$1f-xO:;nC*~ӎVwT"AQf%t3׷'me+U? KR.~\AӨ@|K:ou3lcYvRQ0pQu˥`B5յK<4n ݟ4_A8꾨#G +ݓߡz`&w`侀w2Eᓽ{5Xf4B.YNS3*xJzBe\mZpf'aKkhlaL/a]vDjt[YnXd[FK $曆[E*rJz|ZŪȝ]&HT؆+8T.Ab_C jt.oX_w* nF"v *&r BʣPo("wxij/3/%} -CV\bXwvs[eě~:{=7l/fLii.HsA>iJsp<^\!Lfjfn7ŲB e3ޣ\enKxBZ,7q{EkeXmb[oBV7djB&f5:8i 8%u W?җ^iW$}>=<5Xq]&A>Z#qc0ZU* gϟ)>/aƩ}P*}m{, w=3We\[m ZLA+Sn`3AJPǒ%𴀅zѲ6)7ըM7\0U> W2g ޣx+ ; S&,;d + Itzn>H(~d= ypJ@;;N,+9'3,Z@QT?3Idz$XBM]3M2SŰg$2wZ0uFf"/;eswY#8c̶qq2FeL2ַ~f4h4=ݕ^"L}gQ_Y +E'o!}grY&2 ^D!>48ͻfWCRљ LMSt LD4/3w$# gUHF4LE"ʩ&";j֯?S͏qKZ5n1l#H;vU{F1'l~I J^6,0EWH4wa<"E4n^}jQJgziMѤgB[їG5ewv{k5tbbГR^XeƃU!h|G`*vGH46 3f %?;FqQ(Bb19QhIz`#su]`#ur)\\dZ + HX +[i {˲Pa1^B ު+X&J' 8CL8*}0exa{|?6Oӗ! )wiUg+]%>X}ky\Z85+ ӈOzVƘh;Fh` 'ҶKJDk 5C]=v*Hcl6O 1P@aR[v~UCRɃYr +5%tJ\+n8m[iA| Ոo7_ۤyBaD^g{"z0c'dlan@6砆@ ; +a+0jCy\Q܇>*e7nMC +n+f\ER}Y̮lfCr00K_htFz,3#:>!rvG;x >8+Yaxρu}z~dZqlB#$_;yF3e]Q";8QنڧLڧ~++>xhIPT?A Ϫl!&L-^ueK0'hHCu9/~V)s;󳘘&WöQ0A·\ʲ IdzL"m#3(|[XV9&6.Ihq,=kDv@,#"YE&haߧUX!xtKO_K" zHvpEE*JRQ +\]m`7$>`J]OJ?ΘBbJQjÖvAAu6vQV@d9Gdu;1LO3mQѣ'Rd%a@I@o"I*ZjU}ٲB +z\CywxJ\گm<1ǒ}}g}ߪ?U/:ȥ\&#M*YEkN"~!sD4p74{2kvXm=BSWb'jMSmyn8cT?Qezϲe2jv5.=B +?l`V{j~p辯kDw˩XJ:-?dbEh+M-o"9x38V%U2Wll:xo4"6"l,i00&^I$av0}ҝA}{ 3Kl~AY|W}J&IFbD#=9ߑcEku\q7 .c/{w|g/#gwƔaJ`!O$Lc5M` S`3h!]b&0V›Y =>+G3.leRLg)4g-bۚ8>[}Ʀ**46`r0ott(0E=zg޸ :ߖc1oRYRc>M|X턙4r4MD~<ʔY`W )?O̩n,ÎU hU@;g#F/ ?(3"a+IZۼ^`߫:rUO‘\q`WitWCzycWL~ܘ pg9@XaL!u&\J̈wg_N0a֠תR+Lkc'Ѩv4'ZB¡Ջnv |ܦ8 k4tWo[栕cm|KRpVM+;ԫ[ueβ6P-{aZjѸ_ 5SdSЛ*:o+pv@et|t{HJq}:N7{#wݼz| !)oPU6{AjE%rZqmziC23u +s5ÍTMTgz֥ QiuE:G;&twQ ;UCWrMuV:=7iŋO82;-ţjm KA5nV-C}+G0yW'".1۩ugx];+J͞-=MG!OHC@ |NFDr?FK[ޟΗ]}AOmh:}tࣸdb<g@@*!j6ol9FC~g3/_i!`_o>)B^1SnrT6z^8ٷ&%a[(!axxҾ< WP&r1:1ʭXlZ''h%DQ8C=1܎+O?Qgԛ`tZ +(!~?ѿ~B_R:rVwz5jĸK>(}Ϙ' +"Wu3vESA 6Oxf!},/=z}%%U90π-i/['ҠG۟t2i3!D, Y,EsLÝH^paڟU6a6Z]:\(zt]}ZX&vtgH{;M BN4\6oNXtXÆ-X(nhC$/+ٚE/ &Ud4zD)'2d)(Y'Nr[Vq4HdBcR'ZޕQbӴ! %Y4yK=Ԡ +֬@M͔FBj(HbV RvgdB˪=duSKnn.8]F@/!9'4Axyĕy\Ur3޴N^Nr"!IK LRS(:Y8P4xk"Km)ڑ G1.87epܑ|yb~H}yRzs5NI ]{&NBNt!I9sʉSlQO9F1WwDwq€(ew?˘;v0q0qW h{t}{XP]+L^zqPWLLP]mxÐ +iwԸC7:g1!( ]Xw͙Qw{9D> +y( :A i%'܁qkݨY/xxg +|MGqw|<kg(Ux0s$vfw:Y0p[ИJ13T2b&mt̋r阃Ŋ3R^(.DlXm`t$a.Dp ц6Ա*-}riA3+SMNS +,~B9PX20|_~AL +BNVUPjr-e2]"R`]2ƺZ%U)U9|I{cFe)JI'pS>mbM`TtS|N=ΩmVwj 4X>果fZ-l8qre(jsVd26\Me'|! +\=4FnR-d +C)U%vSЇ%Kf!iKW$/F]-^*K2,>s;,&Ν0Irr5 Z1}MdQjOd ɑ:1vj]&˰flY{ۿ߁=~{Dzd偾:}ˢ,/<'/ ]Q*.)B:}{m~[we"~np&)~^ub\f)T}DRJYF0ܵF>џ-HT8+S1C&| *H,VHϫic Gmy$'-9:.d1ClZbSj~T-*dcfBG_C c(-ҡ  Z7%)@p.Gq,^pI%q5+ԁ In^Lc!i8@D/ODlhvJkH=wE- _z|YMQ#L+bf^/ +Tщo5jWH_up\f +X!K/<'/JߑU/G4. xo z+ow9xgkΨ?gW 5>\daTm V8K JG=\<#1Y`ϔ-GT}L#؅#`nM]'ַ$`yؔAZ)Ss=c{_ Hz%踦8睢 OK(Hu=*$ߍj" xI 7+݊fpAlޠ)Rm`~M#9v9m;!ՠ[ +G.Wݰǣ ous/4C} +D2H@XJ{ѢlWgoDgʼnCH 9x!2u/2YFF(I:w8Ȱ A"xFA+R#w@׆ +`/-NȾrZK9_k98zyty!%?\6w5:wg 15:s^Vht W(h}m?bvn1NJgy ~#g9X L[B+R_mdWH &񥩇sQ +XIUKx~o8/%țzL@ωLYtw=NAt=51tk& *HCrɰex`}qòj]V9}2?" Nꕪ= )20cܾ; 0vb޳f{!}@ψ Uw<|K5Ohwh7w~`h\Fo*?J rW{;Z߾]F i6ͯV1cbM^Ep3Cta#Z:(4PdE b)z|*TR\jhE=82{97M6ôfFNru(b&Lf_mVFX,;1 ڽ-f '>,pxɻ5{/(1,Ws)iW(n=R\==ʄr-O<Br xճ>'9hHŢ^zL-H~]v'ʨ@qjdR1C40â=t^202S4dLÉ(7u.&K%^כb \6ǿ?s_ɘ}]o&%x MԀ5{JSP- + 6itAynv! B~ +pٸ$1 NWxug04S A1@a.1>س̍0D鄻'^4G5 p$57W4yě>;vx`^k5)aӢN*A$a*.="..-h!wwf  n[Px8'M'Df!f\FO2C|\W\UxZkyr [|Տ=.ј ,K(>q{2M?FR[rv$X!dIG3sft03IZI/n*[[~ d4Hxfa?~);k0l:MI:{l6g}\TMB E1y <y'4f3/B0`{N%"ww{P{P=cE/4LhT"Y$qC}Ŵ>x0lTfyW`'*}~MUMr*Zwm̯Njϗ́vơv.ςO\`X)Kш8^H{޽{#ᇲenɃ7˧pqMTk_C"ݶ 4qpEܱo}{A3a}7ߑE31D`GԌNܦç>}6^̙ikY"R_ϣ!{$Y:AS$Wr`e[)Ɛ7:gmC:ɍ\)Y9|8Em/%meOX?-D@>pvyn15PIe'j؉B%>|Kz%wABs""ʋQH(E,Pd*TR>2-wd_b-.x?- Lva DTY"FG[̿~62Stb9OYr{jr{dF5 x`!=04Yrubm9rt[ WA*Us|f_ҿװS.3u0B]LK"~lgc~2̒I#sR H3fXp&H*4ή@r͉dٞ@"DxU‡33ˤGzɳ +?WFJH+9;I}bWb\&/eɋ]Ĉ!j0cbƌ{Η=lfyCtLp;5mŷ%h4]:5.Is8'Ww nB6'TA5%1 %hMΏ>QaJ +SQ**L3pf.1Zd\R-< ]9u(_x87E4vt qTa,vVFyy$IMA9J9PvՀ9hv{OI6 iRQIx3{8Qf0H7?y`Jƭ o m]r-9g}A AV\U1 `r<Y3 \['Ӆ u_4tװ as5Kkt%9049va"_ +2CC6MՋ(JMS5)Mu`/1H1_p\i)EDzi=]$×krGzQ9ChQ-_zitqEډ!-EP1E:hg;L9^?.Gf ,PGfy`kdaF(jM8nUM[E +0AxA-abi9烞5A&N3ʱ}Bю:Ni/َ(8 +;";"8I ݎ5=kʼg$}㟍nȴ*8<أa9`q,Hu0Sr9rx:o6qW88E?-y앤 &[??:wn0/A!~K4{d 8I=9) g"Vq[(YY$grY =D~|ו쳫5Z?@)*M +o2Tot`pLZнߤLO|??/g!WȮ:&ҁ.#fc2Qi +0CsGTzDZ"5TV!R/~BeBLӋOwaK,-? gF8lߑk`c+ Xq^Uű+qI ~Ӹ/LFDdرWz=v|E:^;F;kvsޑ܃{$$k5&G%sa TfUEiz4YY` J@PKɟsfZȝ`e rZ!/3eL&3A>>E81n}FĮB*vFb h7D*:=Xy J0ShK>xwXt Wm3%;-;+Yf_#׌xO/?ӿET/c;Aҏ#RD[gQ$+);6rKoč:f)0MMZaYrnL9B]ʯ},-n众]Re7&+p ["\D֗uk,Wwj%#Er:$ n,>mMv}>:boe(r9δ_6 Z6Yډ >43PBPXea_gZ.AijG%OOWYrjMaX:5mhLKX_-L,3r{Tsz?oh &eiBn .'XB}uUPyz:䤠ZPx=]^QS٣rzͫt0矫? P|AC7_m3W xd󐯗QuϑP7>+qtN~|ſ)7ēeՐ B_{/[x*WDv>iR.?0;-V!$䕙a}M42 W㠻$*?|DY'6s,~7յ7N:BE ,L|%^t}`Fks|h"+aAc*=ѓShj` gJE41 9F y)+WLQ|#j.ꕩ632С;yAez8@ȣrtW,4[a yl@„dQWFdihcY:FSzRTW5+.pi/!~CQ;6ěfpi6FxPL_}EH0C +SP<;Gc$&*d EEœg9XQ_1vѻp\5mVR[<#֚u6DЧew:]DӜ `iQ"Kufsii?/?Sׇ:r6)jq0"_wPpq@GwW9稛s?9*K8h\{r$\9;й]t7K&tI@.#ХjK tlf! ]@:GK.t.u )sޮN/V`V;a[a.xwO=~/Pourⴹ$v1p=ԱFϐjW$Qa2j+!j3>λw' +8•dv,< fiS]pfrhdib [DLkN F24}$..|@uq]Bw%K3⢷C[bsn +wH`Bs'yu6.w8baQ~hD.\="K1:.hhX9|AWPwχL9|lj56S%3>TAqzt5d4ΚY$H"0iW+YAio270 +NLs3re# l:gy.@lonqhnrV*bT.k (Pz,{L ^ 4Ƈd!WB AD%T]߯;'FQiAۤH*Ja=[o8sM?/q _;c[:t$UYsih>xY OcW}<OA.2Etz83~F bGLS \xv;Z{p!`7!?0|^I%9 T'7! K(:‚L;ׂܐ#& +ix<]D_5ari0 +\C1e`Y#sÎZHyC([w!@R8[T'kƜ&fA" ji` l C ]e6c7q還kqdjh f_!X m=h! lP5^[W6k«Kn6P/gڹܐ# +}-,p^.&ˠi!z0FyvɿY#VBbURns8n~#]v]BM&J17}+-cR+/5=y&/{}„yI Ǽ(^q_yxحX10. +07 +Ikxx  089;؇8 iG\Q žӓݽj!cg7: _1*ZEtЕ&bmUQ"MmK6<. :*CY,D3wi1v|be,ʢW}xywBɀ 8xջ><ȕ4VvsU2Y)U>\ eΡFd]=gw;PEI5zsVbr%eЖPh&Uj6"m >/Tlz~7쳺eԈۻD4m|BW Mh&˧ՔYe|$h#A3nV)cu!GcΟYELDKײ5RH1꿾/^~ *w4ZMh)lֹTr]?=Q;EQjJiz3(nf$፫Sb]3sJŘʉDeiffiyquE^ĉuWyk^n"ACĝ .@h]U8L;/#02iX ܕt9-uH]A[awڡõlNw@~>;_N*Ze= +,RHK7ww2aȔf B^9\q%wKjZf_+l ~`S eAa4ļCGʾәl )Y-x_psn[ u>:DϽM<|+0]D@ҎI~DFJ.,zL)?Cp=<8hP87[CJ &j կҥlΕ6:LĭEFb_G~uKjuL1ztRËL0 I/EVΧΜD֧q^=x&:nO B< Bۚѷ7)f6]s8x<a5y|g +ɇr7/cєHY=|@1ܵO+nVO &ݺzߣL}y6n u?>aF}wLҶaE^aa[}6V6MV=%W4fYHG;h4hUl{u;@]j?r@5h,Y_;HHe51LrD-j|…m"eP |U$q"r +?ҩ֕ɦ_M"%)[N˖~ÎZ (ITBl:M*dbVXETv4R7{ж!o83Amevz6Yȹ!sŏʹ oQXl %F?=Η͡:W[X(HSaflK;J˿V=n]\bjcyqSbG؁ZMno. t$/ HX&' SͶ~7CXP(܄Ϻxݴ6}hWJyUDy/Bdfb)Rv៚~Q?c߶ɑH'987Y0ʠҁ +.>r{[rhv%7{|H$q͹! ka<c؈. afbi,D+x!] kH`|2Mr/Y ZvSsۏX'ڏ>BC IZ4 aRnGM*.aI/R@}šڜ>" ġr--rk3ΦEg뭬^'# b0EpWYK?ehQʚt!=^dZ<>2#z?Z F~oD^TD :MdaBj~Ky΃RM+(Jۍ];4Z^t-OldH~*nuw 8b@,rfb,/ HV7YQ >^ 4~blVH0Sҿx"|K9"vm"}dߔ]1ۛ&A}ْn05*> 3>*k]EYZpzv,xTb|ʘ8vs[e]_,  NQSV4oNWr&W/ly>k3o(mCua)1R臚!%Pg<qb`36ViB?ۜge٥rA&DݱKeB,r+ s,Cޭ,vVfU9?в aY}@}V(PzUEQzO5xBczzC +c7= z2||Ɏ?v>o>!>T鈫Xrg2OM@/h"_S-+O+LisQ|p{P>M04ana.ģ!D1&dȿ#XR4RzSi 'evsٽUhr|~B 4%j# tEk锏@Q:d8/ev9Cx+#4ԤF)'0MJ + +c\7Hh$KLߓ1uEyGz }O#Km`aj`I)z'87sGMi9ЬT~OMiƇe SP88[#C/Gt<q?Fp z%pL~p_Chܸ 0hS Ը&Y jB㯷nd8q6 Æm(Y7^+Ã0:ltM*(AxX.S}Mk@6k5YIS\{?rvk +øluvt>j{) Va֋.Ksw6_Y{xx-zו*gjs&*NK`/\~9" +p&r +5TНg|p +g0y[Z;\xJ[ ?~b7E٘[oeC^v(wxZ~@oúLA\f9m:/?\ MٷۢWڡr59hz-N9Poh3tȏOPJ@aI ٠o.A ki5EMש_Aici2~nør=IȾdw&Gi0e)g$C:Q9lEH;O"36w2d5pL/*k"^[~.)K303|Wi>aۍ5O? /!~=™V/rj^mf8K))M?NAu 8?(}5{}47#yxWxO5_7Lj7UvKRÌ^ Uf.i@<%B@+ Mu3IjcfEPS-ՔJs},[^ZkF7ph#Vpڹ[gX~}wx*i4aF]omn[XjarŨAFiUz-bBݯB )0\:XR6qK1x5qYwK} roD BPhwCnčurbײƾn ")EXvFXUj|Cz0/?-0P+\弻>Nf2lR/3\Y9$3ntV\tѕaזG_n%xU|Cx@Y:E3 &w;Za!5y #>;0f7^_щ1}1DH~~otԁgW :N1:[i8qv)Ii+}L,ypO+v@};hq}A@a>a,'*d3p\D,G: Ծ{}kYV} UMg_~u|bB+xx&pZ&LӎNۭ[l3K8R6c;*׸͈W$bArN)u-E^ંJSv.M;&)\v=#.BDOuX'ﱶ_[:rzFKD_R0 SIYZZVo93G؜0|xx<mŒ.ɍ8>o5H䍰ƺT Ar.#B0{9nу.ћY-/Zm>#vI&3cNLFGLJ)z3IO 0!-D`H5gz +9S3d@-2kQ"& j3w=3XÑIÑp%Mr!=& -tƿ^^|.G)p_4$4g[/j*P>aZL 4`ue0Q؛(H"9r;E :`RH3!ͭ+W ru^ewuVRQ-(lh!'o]J*'C ~~e2~ya:\R +2D!)Cs Cdd.q+CvG$a+FsڈP

zC)RuK ]5S/ѯvp ăɻLpN&o!*CGߖI-W b*DjUb9XCegUg;M ۤ0ʰ0j0r]>RG9кβRlywGu U;i]G)kg2hZ +̡7@U6K\l?uk`M tˮwp@q_Jti+S漿3v{HgPr0m"εSaƖTz ;6Byy;m+&`"[?;?6'n;- vTOta\6h?Y饁_߶BfIpQ^rw͡yIyamt<;nw}o97^gX0?3ef83bIn[v}PIᴿߜ>~}7l{_/GƁxr;nlÁ؁=!:p܈>_FU4ٚ68&3a߁̰,ey{vfrෟq;>=\͖~o`^VezKN c둵>΢U|vH;l6W>N{lMi\}o,e-U/-Y?EjYoB!GGbXך1Ur~wlGէ;E:֐όA0&]7 TK4樆󂎣R ?Xv$n +V<kmZV~z#26dxk>uLo9GF܎QC2^9nKjLd}*k:X+UoMYmoYݬ<΋|-V)vʩĆSdmn$e|27Q~{xG>cI[p Brp^X}AOy~C@vfd!Xzzm9eɊf-Clt*{?m??& /!rXF܄]ڔOXfO_oҡ˽&^_ڸ=l ?/Lٕ/+Ԏ^AJԽuBX>30 DƀDLJ'-X:OJexIo0o~p6'Eji\/:(>iD +6nZʌVfr/>t}-%ÞA $@]~;ߝDob,o-]tnMpJ!Sbd|be+> m#G_GY_N;0XR{1 N;;~w$Rxܜv~2| -Ӄžx:֛~ex_r>Nw=gИ.ט3Hz?jdAkr[垕d)>taEl>zgObnww L7Js}㘤?zhP$տjBgg[[;s)\ +&{t]-TX9&Y {pkZ[f}¾6fi490A^W9mM$=$mpQ#Uy-]lM7@b~sakvgo +C1eCz  Mņ<~M/2aV]S *=Z^mkaO:RzvZ3/r5 a9pn&#lQHF/|-Ħ?n L 'fz.bܲ&^Pŷ}?9 >a +8" Q .=_eؘlH28oX jPO`w(S%Q4"MJ4&n0I$ +Yx]E p:[9 kOi95z쾹aTVGgZ_LYQ%Aabq_k,׶n'7h}iGP㯦AUXvFKm޷'E@^H+?c+]a-< O{ܯ,Kbeh>@ʝ+Pje_ݞX6XU[Ѥn"qPmȞ%޼> \ No newline at end of file diff --git a/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml b/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml index e1086d1..f3784d6 100644 --- a/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml +++ b/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml @@ -247,7 +247,7 @@ display: - 'languages:language_interface' - url - 'user.node_grants:view' - cacheable: false + max_age: 0 feed_1: id: feed_1 display_title: Feed @@ -283,7 +283,7 @@ display: - 'languages:language_interface' - url - 'user.node_grants:view' - cacheable: false + max_age: 0 page_1: id: page_1 display_title: Page @@ -300,4 +300,4 @@ display: - 'languages:language_interface' - url - 'user.node_grants:view' - cacheable: false + max_age: 0 diff --git a/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php b/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php index f162195..55cc6ef 100644 --- a/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php +++ b/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php @@ -7,10 +7,11 @@ namespace Drupal\taxonomy\Plugin\views\argument_default; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\taxonomy\TermInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\ViewExecutable; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase; @@ -28,7 +29,7 @@ * title = @Translation("Taxonomy term ID from URL") * ) */ -class Tid extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class Tid extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { /** * The route match. @@ -216,8 +217,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -230,6 +231,13 @@ public function getCacheContexts() { /** * {@inheritdoc} */ + public function getCacheTags() { + return []; + } + + /** + * {@inheritdoc} + */ public function calculateDependencies() { $dependencies = parent::calculateDependencies(); diff --git a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_term_relationship.yml b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_term_relationship.yml index 22521bc..5e13b59 100644 --- a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_term_relationship.yml +++ b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_term_relationship.yml @@ -199,4 +199,4 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/user/src/Plugin/views/access/Permission.php b/core/modules/user/src/Plugin/views/access/Permission.php index 0dc5165..7b9f7a7 100644 --- a/core/modules/user/src/Plugin/views/access/Permission.php +++ b/core/modules/user/src/Plugin/views/access/Permission.php @@ -8,11 +8,12 @@ namespace Drupal\user\Plugin\views\access; use Drupal\Component\Utility\SafeMarkup; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Session\AccountInterface; use Drupal\user\PermissionHandlerInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\access\AccessPluginBase; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Routing\Route; @@ -28,7 +29,7 @@ * help = @Translation("Access will be granted to users with the specified permission string.") * ) */ -class Permission extends AccessPluginBase implements CacheablePluginInterface { +class Permission extends AccessPluginBase implements CacheableDependencyInterface { /** * Overrides Drupal\views\Plugin\Plugin::$usesOptions. @@ -136,8 +137,8 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -147,4 +148,11 @@ public function getCacheContexts() { return ['user.permissions']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/user/src/Plugin/views/access/Role.php b/core/modules/user/src/Plugin/views/access/Role.php index 4c2b732..b21af04 100644 --- a/core/modules/user/src/Plugin/views/access/Role.php +++ b/core/modules/user/src/Plugin/views/access/Role.php @@ -8,9 +8,9 @@ namespace Drupal\user\Plugin\views\access; use Drupal\Component\Utility\SafeMarkup; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\user\RoleStorageInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\access\AccessPluginBase; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Routing\Route; @@ -27,7 +27,7 @@ * help = @Translation("Access will be granted to users with any of the specified roles.") * ) */ -class Role extends AccessPluginBase implements CacheablePluginInterface { +class Role extends AccessPluginBase implements CacheableDependencyInterface { /** * Overrides Drupal\views\Plugin\Plugin::$usesOptions. @@ -149,8 +149,8 @@ public function calculateDependencies() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return 0; } /** @@ -160,5 +160,12 @@ public function getCacheContexts() { return ['user.roles']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/user/src/Plugin/views/argument_default/CurrentUser.php b/core/modules/user/src/Plugin/views/argument_default/CurrentUser.php index b3c86ec..0d435df 100644 --- a/core/modules/user/src/Plugin/views/argument_default/CurrentUser.php +++ b/core/modules/user/src/Plugin/views/argument_default/CurrentUser.php @@ -7,7 +7,8 @@ namespace Drupal\user\Plugin\views\argument_default; -use Drupal\views\Plugin\CacheablePluginInterface; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase; /** @@ -20,7 +21,7 @@ * title = @Translation("User ID from logged in user") * ) */ -class CurrentUser extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class CurrentUser extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { public function getArgument() { return \Drupal::currentUser()->id(); @@ -29,8 +30,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -40,4 +41,11 @@ public function getCacheContexts() { return ['user']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/user/src/Plugin/views/argument_default/User.php b/core/modules/user/src/Plugin/views/argument_default/User.php index edfb709..d50d2c0 100644 --- a/core/modules/user/src/Plugin/views/argument_default/User.php +++ b/core/modules/user/src/Plugin/views/argument_default/User.php @@ -7,9 +7,10 @@ namespace Drupal\user\Plugin\views\argument_default; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\RouteMatchInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; @@ -24,7 +25,7 @@ * title = @Translation("User ID from route context") * ) */ -class User extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class User extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { /** * The route match. @@ -108,8 +109,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -119,4 +120,11 @@ public function getCacheContexts() { return ['url']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/config/schema/views.schema.yml b/core/modules/views/config/schema/views.schema.yml index 7ea599d..ea1bc38 100644 --- a/core/modules/views/config/schema/views.schema.yml +++ b/core/modules/views/config/schema/views.schema.yml @@ -118,15 +118,19 @@ views.view.*: type: mapping label: 'Cache metadata' mapping: - cacheable: - type: boolean - label: 'Cacheable' + max_age: + type: integer + label: 'Cache maximum age' contexts: type: sequence label: 'Cache contexts' sequence: type: string - + tags: + type: sequence + label: 'Cache tags' + sequence: + type: string views_block: type: block_settings label: 'View block' diff --git a/core/modules/views/src/Entity/Render/RendererBase.php b/core/modules/views/src/Entity/Render/RendererBase.php index deb1806..19f98c3 100644 --- a/core/modules/views/src/Entity/Render/RendererBase.php +++ b/core/modules/views/src/Entity/Render/RendererBase.php @@ -7,9 +7,10 @@ namespace Drupal\views\Entity\Render; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Language\LanguageManagerInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\query\QueryPluginBase; use Drupal\views\ResultRow; use Drupal\views\ViewExecutable; @@ -17,7 +18,7 @@ /** * Defines a base class for entity renderers. */ -abstract class RendererBase implements CacheablePluginInterface { +abstract class RendererBase implements CacheableDependencyInterface { /** * The view executable wrapping the view storage entity. @@ -66,8 +67,8 @@ public function __construct(ViewExecutable $view, LanguageManagerInterface $lang /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -78,6 +79,13 @@ public function getCacheContexts() { } /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + + /** * Alters the query if needed. * * @param \Drupal\views\Plugin\views\query\QueryPluginBase $query diff --git a/core/modules/views/src/Entity/View.php b/core/modules/views/src/Entity/View.php index de736ec..4978ae0 100644 --- a/core/modules/views/src/Entity/View.php +++ b/core/modules/views/src/Entity/View.php @@ -311,8 +311,9 @@ public function preSave(EntityStorageInterface $storage) { * * Cache metadata is set per view and per display, and ends up being stored in * the view's configuration. This allows Views to determine very efficiently: - * - whether a view is cacheable at all - * - what the cache key for a given view should be + * - the max-age + * - the cache contexts + * - the cache tags * * In other words: this allows us to do the (expensive) work of initializing * Views plugins and handlers to determine their effect on the cacheability of @@ -327,7 +328,10 @@ protected function addCacheMetadata() { $display =& $this->getDisplay($display_id); $executable->setDisplay($display_id); - list($display['cache_metadata']['cacheable'], $display['cache_metadata']['contexts']) = $executable->getDisplay()->calculateCacheMetadata(); + $cache_metadata = $executable->getDisplay()->calculateCacheMetadata(); + $display['cache_metadata']['max_age'] = $cache_metadata->getCacheMaxAge(); + $display['cache_metadata']['contexts'] = $cache_metadata->getCacheContexts(); + $display['cache_metadata']['tags'] = $cache_metadata->getCacheTags(); // Always include at least the 'languages:' context as there will most // probably be translatable strings in the view output. $display['cache_metadata']['contexts'] = Cache::mergeContexts($display['cache_metadata']['contexts'], ['languages:' . LanguageInterface::TYPE_INTERFACE]); diff --git a/core/modules/views/src/Plugin/CacheablePluginInterface.php b/core/modules/views/src/Plugin/CacheablePluginInterface.php deleted file mode 100644 index b700ce7..0000000 --- a/core/modules/views/src/Plugin/CacheablePluginInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -getPlugin('argument_default')) && $plugin instanceof CacheablePluginInterface) { - $result &= $plugin->isCacheable(); + if (($plugin = $this->getPlugin('argument_default')) && $plugin instanceof CacheableDependencyInterface) { + $max_age = Cache::mergeMaxAges($max_age, $plugin->getCacheMaxAge()); } - if (($plugin = $this->getPlugin('argument_validator')) && $plugin instanceof CacheablePluginInterface) { - $result &= $plugin->isCacheable(); + if (($plugin = $this->getPlugin('argument_validator')) && $plugin instanceof CacheableDependencyInterface) { + $max_age = Cache::mergeMaxAges($max_age, $plugin->getCacheMaxAge()); } // Summaries use style plugins. - if (($plugin = $this->getPlugin('style')) && $plugin instanceof CacheablePluginInterface) { - $result &= $plugin->isCacheable(); + if (($plugin = $this->getPlugin('style')) && $plugin instanceof CacheableDependencyInterface) { + $max_age = Cache::mergeMaxAges($max_age, $plugin->getCacheMaxAge()); } - return $result; + return $max_age; } /** @@ -1211,16 +1212,16 @@ public function getCacheContexts() { $contexts[] = 'url'; // Asks all subplugins (argument defaults, argument validator and styles). - if (($plugin = $this->getPlugin('argument_default')) && $plugin instanceof CacheablePluginInterface) { - $contexts = array_merge($plugin->getCacheContexts(), $contexts); + if (($plugin = $this->getPlugin('argument_default')) && $plugin instanceof CacheableDependencyInterface) { + $contexts = Cache::mergeContexts($contexts, $plugin->getCacheContexts()); } - if (($plugin = $this->getPlugin('argument_validator')) && $plugin instanceof CacheablePluginInterface) { - $contexts = array_merge($plugin->getCacheContexts(), $contexts); + if (($plugin = $this->getPlugin('argument_validator')) && $plugin instanceof CacheableDependencyInterface) { + $contexts = Cache::mergeContexts($contexts, $plugin->getCacheContexts()); } - if (($plugin = $this->getPlugin('style')) && $plugin instanceof CacheablePluginInterface) { - $contexts = array_merge($plugin->getCacheContexts(), $contexts); + if (($plugin = $this->getPlugin('style')) && $plugin instanceof CacheableDependencyInterface) { + $contexts = Cache::mergeContexts($contexts, $plugin->getCacheContexts()); } return $contexts; @@ -1229,6 +1230,28 @@ public function getCacheContexts() { /** * {@inheritdoc} */ + public function getCacheTags() { + $tags = []; + + // Asks all subplugins (argument defaults, argument validator and styles). + if (($plugin = $this->getPlugin('argument_default')) && $plugin instanceof CacheableDependencyInterface) { + $tags = Cache::mergeTags($tags, $plugin->getCacheTags()); + } + + if (($plugin = $this->getPlugin('argument_validator')) && $plugin instanceof CacheableDependencyInterface) { + $tags = Cache::mergeTags($tags, $plugin->getCacheTags()); + } + + if (($plugin = $this->getPlugin('style')) && $plugin instanceof CacheableDependencyInterface) { + $tags = Cache::mergeTags($tags, $plugin->getCacheTags()); + } + + return $tags; + } + + /** + * {@inheritdoc} + */ public function calculateDependencies() { $dependencies = []; if (($argument_default = $this->getPlugin('argument_default')) && $argument_default instanceof DependentPluginInterface) { diff --git a/core/modules/views/src/Plugin/views/argument_default/Fixed.php b/core/modules/views/src/Plugin/views/argument_default/Fixed.php index 99f55ae..43eb1f9 100644 --- a/core/modules/views/src/Plugin/views/argument_default/Fixed.php +++ b/core/modules/views/src/Plugin/views/argument_default/Fixed.php @@ -7,8 +7,9 @@ namespace Drupal\views\Plugin\views\argument_default; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; /** * The fixed argument default handler. @@ -20,7 +21,7 @@ * title = @Translation("Fixed") * ) */ -class Fixed extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class Fixed extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { protected function defineOptions() { $options = parent::defineOptions(); @@ -48,8 +49,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -59,4 +60,11 @@ public function getCacheContexts() { return []; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php b/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php index feccd21..f4bf3f4 100644 --- a/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php +++ b/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php @@ -7,8 +7,9 @@ namespace Drupal\views\Plugin\views\argument_default; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; /** * A query parameter argument default handler. @@ -20,7 +21,7 @@ * title = @Translation("Query parameter") * ) */ -class QueryParameter extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class QueryParameter extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { /** * {@inheritdoc} @@ -87,8 +88,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -98,4 +99,11 @@ public function getCacheContexts() { return ['url']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/src/Plugin/views/argument_default/Raw.php b/core/modules/views/src/Plugin/views/argument_default/Raw.php index 20715f3..bb88532 100644 --- a/core/modules/views/src/Plugin/views/argument_default/Raw.php +++ b/core/modules/views/src/Plugin/views/argument_default/Raw.php @@ -7,10 +7,11 @@ namespace Drupal\views\Plugin\views\argument_default; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Path\AliasManagerInterface; use Drupal\Core\Path\CurrentPathStack; -use Drupal\views\Plugin\CacheablePluginInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; @@ -24,7 +25,7 @@ * title = @Translation("Raw value from URL") * ) */ -class Raw extends ArgumentDefaultPluginBase implements CacheablePluginInterface { +class Raw extends ArgumentDefaultPluginBase implements CacheableDependencyInterface { /** * The alias manager. @@ -116,8 +117,8 @@ public function getArgument() { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -127,4 +128,11 @@ public function getCacheContexts() { return ['url']; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php index 06a18e3..3b28ffa 100644 --- a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php +++ b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php @@ -8,6 +8,7 @@ namespace Drupal\views\Plugin\views\cache; use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableMetadata; use Drupal\views\Plugin\views\PluginBase; use Drupal\Core\Database\Query\Select; use Drupal\views\ResultRow; @@ -211,7 +212,7 @@ public function generateResultsKey() { 'items_per_page' => $this->view->getItemsPerPage(), 'offset' => $this->view->getOffset(), ]; - $key_data += \Drupal::service('cache_contexts_manager')->convertTokensToKeys($this->displayHandler->getCacheMetadata()['contexts']); + $key_data += \Drupal::service('cache_contexts_manager')->convertTokensToKeys($this->displayHandler->getCacheMetadata()->getCacheContexts()); $this->resultsKey = $this->view->storage->id() . ':' . $this->displayHandler->display['id'] . ':results:' . hash('sha256', serialize($key_data)); } @@ -288,12 +289,10 @@ protected function prepareViewResult(array $result) { /** * Alters the cache metadata of a display upon saving a view. * - * @param bool $is_cacheable - * Whether the display is cacheable. - * @param string[] $cache_contexts - * The cache contexts the display varies by. + * @param \Drupal\Core\Cache\CacheableMetadata $cache_metadata + * The cache metadata. */ - public function alterCacheMetadata(&$is_cacheable, array &$cache_contexts) { + public function alterCacheMetadata(CacheableMetadata $cache_metadata) { } /** diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php index 3245bd2..92c393f 100644 --- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php +++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php @@ -13,6 +13,7 @@ use Drupal\Component\Utility\SafeMarkup; use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheableMetadata; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Plugin\PluginDependencyTrait; @@ -20,7 +21,6 @@ use Drupal\Core\Theme\Registry; use Drupal\Core\Url; use Drupal\views\Form\ViewsForm; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\area\AreaPluginBase; use Drupal\views\ViewExecutable; use Drupal\views\Plugin\views\PluginBase; @@ -2151,9 +2151,9 @@ protected function applyDisplayCachablityMetadata(array &$element) { $cache = $this->getPlugin('cache'); (new CacheableMetadata()) - ->setCacheTags($this->view->getCacheTags()) + ->setCacheTags(Cache::mergeTags($this->view->getCacheTags(), isset($this->display['cache_metadata']['tags']) ? $this->display['cache_metadata']['tags'] : [])) ->setCacheContexts(isset($this->display['cache_metadata']['contexts']) ? $this->display['cache_metadata']['contexts'] : []) - ->setCacheMaxAge($cache->getCacheMaxAge()) + ->setCacheMaxAge(Cache::mergeMaxAges($cache->getCacheMaxAge(), isset($this->display['cache_metadata']['max_age']) ? $this->display['cache_metadata']['max_age'] : Cache::PERMANENT)) ->merge(CacheableMetadata::createFromRenderArray($element)) ->applyTo($element); } @@ -2271,18 +2271,13 @@ public function preExecute() { * {@inheritdoc} */ public function calculateCacheMetadata () { - $is_cacheable = TRUE; - $cache_contexts = []; + $cache_metadata = new CacheableMetadata(); // Iterate over ordinary views plugins. foreach (Views::getPluginTypes('plugin') as $plugin_type) { $plugin = $this->getPlugin($plugin_type); - if ($plugin instanceof CacheablePluginInterface) { - $cache_contexts = array_merge($cache_contexts, $plugin->getCacheContexts()); - $is_cacheable &= $plugin->isCacheable(); - } - else { - $is_cacheable = FALSE; + if ($plugin instanceof CacheableDependencyInterface) { + $cache_metadata = $cache_metadata->merge(CacheableMetadata::createFromObject($plugin)); } } @@ -2291,19 +2286,18 @@ public function calculateCacheMetadata () { foreach (array_keys(Views::getHandlerTypes()) as $handler_type) { $handlers = $this->getHandlers($handler_type); foreach ($handlers as $handler) { - if ($handler instanceof CacheablePluginInterface) { - $cache_contexts = array_merge($cache_contexts, $handler->getCacheContexts()); - $is_cacheable &= $handler->isCacheable(); + if ($handler instanceof CacheableDependencyInterface) { + $cache_metadata = $cache_metadata->merge(CacheableMetadata::createFromObject($handler)); } } } /** @var \Drupal\views\Plugin\views\cache\CachePluginBase $cache_plugin */ if ($cache_plugin = $this->getPlugin('cache')) { - $cache_plugin->alterCacheMetadata($is_cacheable, $cache_contexts); + $cache_plugin->alterCacheMetadata($cache_metadata); } - return [(bool) $is_cacheable, $cache_contexts]; + return $cache_metadata; } /** @@ -2311,9 +2305,18 @@ public function calculateCacheMetadata () { */ public function getCacheMetadata() { if (!isset($this->display['cache_metadata'])) { - list($this->display['cache_metadata']['cacheable'], $this->display['cache_metadata']['contexts']) = $this->calculateCacheMetadata(); + $cache_metadata = $this->calculateCacheMetadata(); + $this->display['cache_metadata']['max_age'] = $cache_metadata->getCacheMaxAge(); + $this->display['cache_metadata']['contexts'] = $cache_metadata->getCacheContexts(); + $this->display['cache_metadata']['tags'] = $cache_metadata->getCacheTags(); + } + else { + $cache_metadata = (new CacheableMetadata()) + ->setCacheMaxAge($this->display['cache_metadata']['max_age']) + ->setCacheContexts($this->display['cache_metadata']['contexts']) + ->setCacheTags($this->display['cache_metadata']['tags']); } - return $this->display['cache_metadata']; + return $cache_metadata; } /** diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php b/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php index c1aba0c..6690c21 100644 --- a/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php +++ b/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php @@ -439,20 +439,16 @@ public function preExecute(); /** * Calculates the display's cache metadata by inspecting each handler/plugin. * - * @return array - * Returns an array: - * - first value: (boolean) Whether the display is cacheable. - * - second value: (string[]) The cache contexts the display varies by. + * @return \Drupal\Core\Cache\CacheableMetadata + * The cache metadata. */ public function calculateCacheMetadata(); /** * Gets the cache metadata. * - * @return array - * Returns an array: - * - first value: (boolean) Whether the display is cacheable. - * - second value: (string[]) The cache contexts the display varies by. + * @return \Drupal\Core\Cache\CacheableMetadata + * The cache metadata. */ public function getCacheMetadata(); diff --git a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php index 11a3e2d..7e19634 100644 --- a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php +++ b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php @@ -8,10 +8,11 @@ namespace Drupal\views\Plugin\views\exposed_form; use Drupal\Component\Utility\SafeMarkup; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; use Drupal\views\Form\ViewsExposedForm; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\ViewExecutable; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\PluginBase; @@ -35,7 +36,7 @@ /** * Base class for Views exposed filter form plugins. */ -abstract class ExposedFormPluginBase extends PluginBase implements CacheablePluginInterface { +abstract class ExposedFormPluginBase extends PluginBase implements CacheableDependencyInterface { /** * Overrides Drupal\views\Plugin\Plugin::$usesOptions. @@ -336,8 +337,8 @@ public function resetForm(&$form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -364,6 +365,13 @@ public function getCacheContexts() { return $contexts; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } /** diff --git a/core/modules/views/src/Plugin/views/field/Field.php b/core/modules/views/src/Plugin/views/field/Field.php index 386456c..28122df 100644 --- a/core/modules/views/src/Plugin/views/field/Field.php +++ b/core/modules/views/src/Plugin/views/field/Field.php @@ -9,6 +9,8 @@ use Drupal\Component\Utility\SafeMarkup; use Drupal\Component\Utility\Xss as CoreXss; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; @@ -23,7 +25,6 @@ use Drupal\Core\Session\AccountInterface; use Drupal\views\FieldAPIHandlerTrait; use Drupal\views\Entity\Render\EntityFieldRenderer; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\ResultRow; use Drupal\views\ViewExecutable; @@ -38,7 +39,7 @@ * * @ViewsField("field") */ -class Field extends FieldPluginBase implements CacheablePluginInterface, MultiItemsFieldHandlerInterface { +class Field extends FieldPluginBase implements CacheableDependencyInterface, MultiItemsFieldHandlerInterface { use FieldAPIHandlerTrait; /** @@ -952,8 +953,8 @@ public function calculateDependencies() { /** * {@inheritdoc} */ - public function isCacheable() { - return FALSE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -964,6 +965,18 @@ public function getCacheContexts() { } /** + * {@inheritdoc} + */ + public function getCacheTags() { + $field_definition = $this->getFieldDefinition(); + $field_storage_definition = $this->getFieldStorageDefinition(); + return Cache::mergeTags( + $field_definition instanceof CacheableDependencyInterface ? $field_definition->getCacheTags() : [], + $field_storage_definition instanceof CacheableDependencyInterface ? $field_storage_definition->getCacheTags() : [] + ); + } + + /** * Gets the table mapping for the entity type of the field. * * @return \Drupal\Core\Entity\Sql\DefaultTableMapping diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php index d2e9fe8..ee383b1 100644 --- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php +++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php @@ -7,11 +7,12 @@ namespace Drupal\views\Plugin\views\filter; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormHelper; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; use Drupal\user\RoleInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\HandlerBase; use Drupal\Component\Utility\Html; use Drupal\Component\Utility\SafeMarkup; @@ -47,7 +48,7 @@ /** * Base class for Views filters handler plugins. */ -abstract class FilterPluginBase extends HandlerBase implements CacheablePluginInterface { +abstract class FilterPluginBase extends HandlerBase implements CacheableDependencyInterface { /** * Contains the actual value of the field,either configured in the views ui @@ -1465,8 +1466,8 @@ protected static function arrayFilterZero($var) { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -1483,6 +1484,13 @@ public function getCacheContexts() { return $cache_contexts; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } /** diff --git a/core/modules/views/src/Plugin/views/pager/SqlBase.php b/core/modules/views/src/Plugin/views/pager/SqlBase.php index b2d7389..597bb26 100644 --- a/core/modules/views/src/Plugin/views/pager/SqlBase.php +++ b/core/modules/views/src/Plugin/views/pager/SqlBase.php @@ -7,13 +7,14 @@ namespace Drupal\views\Plugin\views\pager; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; /** * A common base class for sql based pager. */ -abstract class SqlBase extends PagerPluginBase implements CacheablePluginInterface { +abstract class SqlBase extends PagerPluginBase implements CacheableDependencyInterface { protected function defineOptions() { $options = parent::defineOptions(); @@ -374,8 +375,8 @@ public function exposedFormValidate(&$form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return Cache::PERMANENT; } /** @@ -392,4 +393,11 @@ public function getCacheContexts() { return $contexts; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/src/Plugin/views/query/QueryPluginBase.php b/core/modules/views/src/Plugin/views/query/QueryPluginBase.php index 0d6d9f8..540a110 100644 --- a/core/modules/views/src/Plugin/views/query/QueryPluginBase.php +++ b/core/modules/views/src/Plugin/views/query/QueryPluginBase.php @@ -8,8 +8,8 @@ namespace Drupal\views\Plugin\views\query; use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\PluginBase; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\ViewExecutable; @@ -37,7 +37,7 @@ /** * Base plugin class for Views queries. */ -abstract class QueryPluginBase extends PluginBase implements CacheablePluginInterface { +abstract class QueryPluginBase extends PluginBase implements CacheableDependencyInterface { /** * A pager plugin that should be provided by the display. @@ -317,9 +317,9 @@ public function getEntityTableInfo() { /** * {@inheritdoc} */ - public function isCacheable() { + public function getCacheMaxAge() { // This plugin can't really determine that. - return TRUE; + return Cache::PERMANENT; } /** @@ -342,13 +342,6 @@ public function getCacheTags() { return []; } - /** - * {@inheritdoc} - */ - public function getCacheMaxAge() { - return Cache::PERMANENT; - } - } /** diff --git a/core/modules/views/src/Plugin/views/sort/Random.php b/core/modules/views/src/Plugin/views/sort/Random.php index 9d8fdbb..944ac7f 100644 --- a/core/modules/views/src/Plugin/views/sort/Random.php +++ b/core/modules/views/src/Plugin/views/sort/Random.php @@ -7,15 +7,15 @@ namespace Drupal\views\Plugin\views\sort; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; /** * Handle a random sort. * * @ViewsSort("random") */ -class Random extends SortPluginBase implements CacheablePluginInterface { +class Random extends SortPluginBase implements CacheableDependencyInterface { /** * {@inheritdoc} @@ -26,8 +26,6 @@ public function usesGroupBy() { public function query() { $this->query->addOrderBy('rand'); - // @todo Replace this once https://www.drupal.org/node/2464427 is in. - $this->view->element['#cache']['max-age'] = 0; } public function buildOptionsForm(&$form, FormStateInterface $form_state) { @@ -38,8 +36,8 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function isCacheable() { - return FALSE; + public function getCacheMaxAge() { + return 0; } /** @@ -49,4 +47,11 @@ public function getCacheContexts() { return []; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/src/Plugin/views/sort/SortPluginBase.php b/core/modules/views/src/Plugin/views/sort/SortPluginBase.php index 98f3797..f2742be 100644 --- a/core/modules/views/src/Plugin/views/sort/SortPluginBase.php +++ b/core/modules/views/src/Plugin/views/sort/SortPluginBase.php @@ -7,8 +7,9 @@ namespace Drupal\views\Plugin\views\sort; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\HandlerBase; /** @@ -27,7 +28,7 @@ /** * Base sort handler that has no options and performs a simple sort. */ -abstract class SortPluginBase extends HandlerBase implements CacheablePluginInterface { +abstract class SortPluginBase extends HandlerBase implements CacheableDependencyInterface { /** * Determine if a sort can be exposed. @@ -228,10 +229,10 @@ public function defaultExposeOptions() { /** * {@inheritdoc} */ - public function isCacheable() { + public function getCacheMaxAge() { // The result of a sort does not depend on outside information, so by // default it is cacheable. - return TRUE; + return Cache::PERMANENT; } /** @@ -246,6 +247,13 @@ public function getCacheContexts() { return $cache_contexts; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } /** diff --git a/core/modules/views/src/Plugin/views/style/Table.php b/core/modules/views/src/Plugin/views/style/Table.php index 4efeda2..3960bf9 100644 --- a/core/modules/views/src/Plugin/views/style/Table.php +++ b/core/modules/views/src/Plugin/views/style/Table.php @@ -9,8 +9,8 @@ use Drupal\Component\Plugin\Discovery\DiscoveryInterface; use Drupal\Component\Utility\Html; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\views\Plugin\CacheablePluginInterface; use Drupal\views\Plugin\views\wizard\WizardInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; @@ -28,7 +28,7 @@ * display_types = {"normal"} * ) */ -class Table extends StylePluginBase implements CacheablePluginInterface { +class Table extends StylePluginBase implements CacheableDependencyInterface { /** * Does the style plugin for itself support to add fields to it's output. @@ -432,8 +432,8 @@ public function wizardSubmit(&$form, FormStateInterface $form_state, WizardInter /** * {@inheritdoc} */ - public function isCacheable() { - return TRUE; + public function getCacheMaxAge() { + return 0; } /** @@ -453,4 +453,11 @@ public function getCacheContexts() { return $contexts; } + /** + * {@inheritdoc} + */ + public function getCacheTags() { + return []; + } + } diff --git a/core/modules/views/src/Tests/GlossaryTest.php b/core/modules/views/src/Tests/GlossaryTest.php index 7d55f85..8919854 100644 --- a/core/modules/views/src/Tests/GlossaryTest.php +++ b/core/modules/views/src/Tests/GlossaryTest.php @@ -73,7 +73,18 @@ public function testGlossaryView() { // Verify cache tags. $this->assertPageCacheContextsAndTags($url, ['languages:' . LanguageInterface::TYPE_CONTENT, 'languages:' . LanguageInterface::TYPE_INTERFACE, 'theme', 'url', 'user.node_grants:view', 'user.permissions'], [ 'config:views.view.glossary', + // Listed for letter 'a'. 'node:' . $nodes_by_char['a'][0]->id(), 'node:' . $nodes_by_char['a'][1]->id(), 'node:' . $nodes_by_char['a'][2]->id(), + // Link for letter 'd'. + 'node:1', + // Link for letter 'p'. + 'node:16', + // Link for letter 'r'. + 'node:2', + // Link for letter 'l'. + 'node:21', + // Link for letter 'u'. + 'node:6', 'node_list', 'user:0', 'user_list', diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.numeric_test.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.numeric_test.yml index 8593665..7bcc16b 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.numeric_test.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.numeric_test.yml @@ -174,7 +174,7 @@ display: cache_metadata: contexts: - language - cacheable: false + max_age: 0 page_1: display_plugin: page id: page_1 @@ -186,4 +186,4 @@ display: cache_metadata: contexts: - language - cacheable: false + max_age: 0 diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml index 509826c..e2a148c 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml @@ -323,4 +323,4 @@ display: - entity_test_view_grants - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_feed_icon.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_feed_icon.yml index a5bb9f5..b0087c7 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_feed_icon.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_feed_icon.yml @@ -174,7 +174,7 @@ display: - 'languages:language_interface' - url - 'user.node_grants:view' - cacheable: false + max_age: 0 feed_1: display_plugin: feed id: feed_1 @@ -198,7 +198,7 @@ display: - 'languages:language_interface' - url - 'user.node_grants:view' - cacheable: false + max_age: 0 page_1: display_plugin: page id: page_1 @@ -213,4 +213,4 @@ display: - 'languages:language_interface' - url - 'user.node_grants:view' - cacheable: false + max_age: 0 diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_field_attachment_test.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_field_attachment_test.yml index eae936f..eeb345e 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_field_attachment_test.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_field_attachment_test.yml @@ -137,4 +137,4 @@ display: contexts: - 'languages:language_content' - 'languages:language_interface' - cacheable: false + max_age: 0 diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_row_render_cache.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_row_render_cache.yml index 28a1812..aed7b54 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_row_render_cache.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_row_render_cache.yml @@ -500,4 +500,4 @@ display: - 'languages:language_content' - 'languages:language_interface' - 'user.node_grants:view' - cacheable: false + max_age: 0