aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/config_php_file.php
blob: 7445e7df228f01e2716a14a56720b8398d9f8b4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

namespace phpbb;

class config_php_file
{
	/** @var string phpBB Root Path */
	protected $phpbb_root_path;

	/** @var string php file extension  */
	protected $php_ext;

	/**
	* Indicates whether the php config file has been loaded.
	*
	* @var bool
	*/
	protected $config_loaded = false;

	/**
	* The content of the php config file
	*
	* @var array
	*/
	protected $config_data = array();

	/**
	* The path to the config file. (Default: $phpbb_root_path . 'config.' . $php_ext)
	*
	* @var string
	*/
	protected $config_file;

	private $defined_vars;

	/**
	* Constructor
	*
	* @param string $phpbb_root_path phpBB Root Path
	* @param string $php_ext php file extension
	*/
	function __construct($phpbb_root_path, $php_ext)
	{
		$this->phpbb_root_path = $phpbb_root_path;
		$this->php_ext = $php_ext;
		$this->config_file = $this->phpbb_root_path . 'config.' . $this->php_ext;
	}

	/**
	* Set the path to the config file.
	*
	* @param string $config_file
	*/
	public function set_config_file($config_file)
	{
		$this->config_file = $config_file;
		$this->config_loaded = false;
	}

	/**
	* Returns an associative array containing the variables defined by the config file.
	*
	* @return array Return the content of the config file or an empty array if the file does not exists.
	*/
	public function get_all()
	{
		$this->load_config_file();

		return $this->config_data;
	}

	/**
	* Return the value of a variable defined into the config.php file or null if the variable does not exist.
	*
	* @param string $variable The name of the variable
	* @return mixed Value of the variable or null if the variable is not defined.
	*/
	public function get($variable)
	{
		$this->load_config_file();

		return isset($this->config_data[$variable]) ? $this->config_data[$variable] : null;
	}

	/**
	* Load the config file and store the information.
	*
	* @return null
	*/
	protected function load_config_file()
	{
		if (!$this->config_loaded && file_exists($this->config_file))
		{
			$this->defined_vars = get_defined_vars();

			require($this->config_file);
			$this->config_data = array_diff_key(get_defined_vars(), $this->defined_vars);

			$this->config_loaded = true;
		}
	}

	/**
	* Convert either 3.0 dbms or 3.1 db driver class name to 3.1 db driver class name.
	*
	* If $dbms is a valid 3.1 db driver class name, returns it unchanged.
	* Otherwise prepends phpbb\db\driver\ to the dbms to convert a 3.0 dbms
	* to 3.1 db driver class name.
	*
	* @param string $dbms dbms parameter
	* @return string driver class
	* @throws \RuntimeException
	*/
	public function convert_30_dbms_to_31($dbms)
	{
		// Note: this check is done first because mysqli extension
		// supplies a mysqli class, and class_exists($dbms) would return
		// true for mysqli class.
		// However, per the docblock any valid 3.1 driver name should be
		// recognized by this function, and have priority over 3.0 dbms.
		if (strpos($dbms, 'phpbb\db\driver') === false && class_exists('phpbb\db\driver\\' . $dbms))
		{
			return 'phpbb\db\driver\\' . $dbms;
		}

		if (class_exists($dbms))
		{
			// Additionally we could check that $dbms extends phpbb\db\driver\driver.
			// http://php.net/manual/en/class.reflectionclass.php
			// Beware of possible performance issues:
			// http://stackoverflow.com/questions/294582/php-5-reflection-api-performance
			// We could check for interface implementation in all paths or
			// only when we do not prepend phpbb\db\driver\.

			/*
			$reflection = new \ReflectionClass($dbms);

			if ($reflection->isSubclassOf('phpbb\db\driver\driver'))
			{
				return $dbms;
			}
			*/

			return $dbms;
		}

		throw new \RuntimeException("You have specified an invalid dbms driver: $dbms");
	}
}
ER]؂98BOeOp|qޫۘ%3N)B9?$AP60>puo,Wt6 868a'Z|[7# nF]4hϤ48ҩM߷wءӯ{BCl^:*Aup.^:Nqm1u|[7qs.s0;&JP璠D j=[/ȾL:{k28F{"*{d:o):aujՉ<!Ilwd>0U0ݑKWAc}G|>xVR4<1+隳@p9 J k؏_}1,![=6=FErhϕAWK!ueOኟC&\tY_F09Ԡ43"I! [D 휝F>^gf|!W<WFr)ăn?6V r.;-<orVrfʤ"2yd T^5"Ϙsku"6qi J+]R>vR& > u԰Rɽq'ub|bh~F?onM/b@#:HX#~YE,\n@M~r[$S;0GsRfyv2mOxIYěH.?CMT7 bqjg>#d]bJV JbhGY4Ҋ(1 1S|R[Qd4TqH"?!ArXv|Xo43O3^N'Ȉ,y{!6<&My S̋=skdE\s y}IEc Bxmsύ,_䥸%dPldFldqjM4wim0(SS `|ؙ! G|-  UfhlKRsIoŽGcV4LqY]S~je#"|NﮎJ笠1s7ƬջRuRBxW@T pK! @!7IV{P E/œe m=d([P%͕j\4ݖ|ddɎ#J P}pE헗R .k&cHxRX,2%8\e*2 Xvw!0cRަUnD{03TQȢ?=m m1ڝ}|%sb+2)4x|KG>/Y9wϬ%$oV .)XhK6=t/$B{/C/^!QZ0 8~6.l@"K&7t)໛7v3܃IU Ew8j(~nx 1Jw]$X3ex}m%/ՑghVE0 6ؐ!cEjHyd?7tn+DWodx@..荞B%|| 5\`ũ9j՛p>fi6D]Dsk2xNj֔sHy(/zB^#=m͹ Nm2[EJسV3XBcu? ^\СTEOl&( GmL  /MC1k8^f=AKZ["b Kc;6J=RZXl_U !1 @}8RXohWd6_6/hp7_VZ92񽘬ލ~h< xvJ c}*X狰˞Q) N(xQx+ʸ5 "hWXs. 抱"'ldcZQRZjS4dsBy$[D822H|H(׳-n ^<a@;0 b)|Rf+J6`|wo lG_~ǒA.5aݼEI']jT|7uH9Fje8dEy|CUo5>ٱq$3.dɊ̦&-Dg F*o00@uFDt$C1Jۺ@~+Z&cPΒD,=tt CnY@0{g9Ez$x"U>hx[ Wh"bp^\0C6=Z7G0Jv +L7Ц i!9}϶.IlI{'* {32  %Oxy'6[eՕ!m`mQO(Ѯe:Uޞ\23G&[_'eAwϥ@&VS7@y; Qp ܩbT9bgRd헉ͭ踳,?cMrRj|(^X^5bxp)ÆOI= g˧3޴:-Ɣk@[JoI Q`i=ʼnIP1@\+|JVdGT>GokdE4ɝV;ЕIWb]!P ' GV(X(EgJ͙Q\eRuS䈾 z['JBem8-W5H/EE!_a<2:Ƴ-U*j60÷YuhM~UBp.PC-#]B I6w~rLk~DP mؐ]+>܆eD;Ǥ_!:$ϽOOE,++z J../KA-#M?!1oql?XI#h8Ƭ258yH˽}}(WdDnmw)Sq5_X_sa4k\ Z~StM4"IG\i:< ZVK5[ZS 3!V)r@:X,doOTgtޖYG͹}}m_BښSaV]7<mNtm˼=E{Qmv?ZA'\Br뛧/]1G VUжrm0 ,wѫy7] %r-`/#/.  tV tv+w RXS,xn%CdQuJ1 g_psy 4|Z㸻?@ֽtA}Uk\=Ag+b^R{%|H7bB a`0.pllL`-/=҇KmJ?6ú\nM[;tDt)c@sK^d#]9F4~e}Κ15&3ugnD\vУɖ-l E}{bUjT;.jzl sbr {*ٜD d۲n~$<,m038Ssz:,;_},B}Ae3Lz%#88JgJacb U;1 D:±uempC!)Q`9R3hVC?s\4 J/e)ԉ[2l"B@{J EF{C"?ragFaOhѢBH [`SӪ%rQZug ^H!K*Oֆ˲]OJWzL9kXt^Q2H fߛ`ׁJ0P@8GvK Tg*bVC.(mq7#4&L"c|fr5p/粗†hu)Ƙp!h-ɡfM-|ξAG49,p U@0AX=z*(.3}-0p34ݸދzo^T1v %0 LHh7[X sSNC _`nҸg8o2 ZI:J+%۝`l'l!%5XYL/ oG"[LjX渳Bl5kшIg]_,)y9b>GfkE)T cFv}k 8׻-d pvDm(Qo9;+nXRL->fM&OqD£r*Rm̹]-ucĔfv4}D>sG|bWd r!,_쁽Z;3&ViXB|ԃ( s("S̫JDY6W|Cer'z7|z(wHBf3Щu wP }–C ZYwĴ^>dG%ݶ@-_ j\Xx~;TM`ֳkaٷS/ VbTH [0]"6wx\O0ntх2o36Zql cIj2~|'0A)t{9_^$<ĠZ=Q$zݷczeH»spd>L-i P[>!0HEN GXU6IhTc qF9p.vw,B#!ZC.iy>9MQ UBw칉=*~2΃YQcVq!tC 3{Nq:ۣ/s@M6uvߝL|[,<:*Auq"4F篟xu:Ǎu{c9"LWlPč܍ޱb.tNV~ow{L6 R ΥqJ<-` P.x50e>1Կg6D ,CmXw(Ny)4Zt۲rl- `Dcu#MPGFNGV+N5=϶ EO*ĭٯVM"tN(,4qG-(TOnff7>wE jY dh,(Mh-n$R&Wuّ/w>U,h$?NWP#+Yl [˫ g:XUU7 gr Lx8k^ ,jຑ3(S'ͶƉs3+peCa&M6֏VZoM%Ж,Ooc-hNc]zlAliQAh#/8{[?@%EEatB,:D0JԹ_3z꧝&/Pb#tЯ(k0O F*^$ޑM.oWMgujɢ?x2osÞ(=\Iw/|%g:e|ǎ2Gi4&^($T.K,Y逎9Tľʉ삵XGWJltF4Ŭߜ/vOmeDV *bB:NR@>*-i;~ep Sf"Fm{pBqPvS׉o?פ㨡 0S&>`r 2c5uWu\ 0J|O+[ 3rk5=ŧ0hJ*Z^r):y^ ^еKφ!2-1~>,IKg4]H!=9ǛH_#\8dD  Poh48ӆ5J!ީM <]z (V$43'a?meSӳQh1ĆGؚ qeۙ[I٦yȣݬp2OysBD=0>HYb~,h"wO+}1.ngܶ/8) mLJj:b0-CwgtiQ"jɽ2$G; _yh7i==W[w^ȜݰzJu) hLj32lE+7/r ߋdNωseL3U51 {\?:Q5`D p:FfI4%׈fus|~ِ4[A+ABpƫ :|9)(v7ڡf2Pp۽]$׋”"i S9Uez'NC60&LE>Ni Dk(Nw@X$Cgќ!!a»D}UH ,:,\R{6D| ?F6 {{@Nmsd2NX-.W;@돻e8[=iɄwo .(51y+ǵZM771sUPq8e,sK9tx0ə:6Nɯ0tc׾Y/t:jhOcp:?񡓜՜fF*T 2cL}D@|PǮ%ES&ξo{\7T`OE6M-Z7泉K6#*$T:VP8E'6tEe48Ww u4 U>1>SI9r)Xæjs5ֲX)HJ_wk 5;_/ۧ -Xෑ#GJ!mjJ5bړz^Q&ify꒶ZX  fާNmWl藓z/pCGw?{^Ad?h), H#B8:0ޡwaPWl4ՌGAiL:y81s#!Wi1NٯշDJv_h"u~K)l ڶ09n!ZDcμLѬh})0f .&Ec\,\c_,Ġ{d G}$Zơb`90,l F79QHBm'J [ 3͆yBv{.vlo31ź$83(HY_>J}7rlUe*D"~jh$ {5n%-Ю?jm ЬIYb+3[2<=od^r fNʩ:IB-s.uaZ.Zk #t<aL .LVXTٯ0a vģ ]7ے`x2/S( 覽!33v['~XԽV*1c]gyǬn؇Mz lxRj;ըV֘); 񮑮fN)9zusxVhs׮|0zs2!0wQ;r`E_92,Zbe ŏQzyʭIiDb1v:d8`v NZi?p <3μ)KiU7x/EC!ݠ֗Kw?"M yIJx;5I<4i7%dW,1o OG ˊ]!Xϗʬ9$:I"Dd60z?$3U-j{Me:kDzDt @ 5]WEPNֲ||.|p˭KQ.[A%_5ϐ׳ Z5n0}zB9]Z=[.?l/uT!_%c7mk[C ?B;{EO5HPG''˘$#X=Y aDxW݌b!=&(AW(+:ȁ ŒȜV{*cRՏђuGn%6fy b޵J#+w%WQ?zXu64)֦e?Pm?ўRNW̨inUHyjT9{D֨H60+;j5~lmmۦϴYfJ\"U1\LpMyT}9)Ŀ@BWkJtL#njo3MΓ]KGTQ>օ5y/ϽN`UX6-%>OGb͓ DFFFinY2ұc%̶V\){R2V{R.I$8 "TObXCT<ע^tP)^~74Z?s\cm *iwFX҅D6hPGpYZ1>YlLAƮ Q_{蛜9D;z1*!9M!eӢ0t[XȔ)40P;Fow@|DǪ߻(˼VK$:h'3VNmz.a4j Mף)Gqqj lal2ߓ'̒p~ 9a#r+؆]n DN J0&2."Stc>}39kt:Sܽ@pDsV~]:3@I~1Rc7Sˠc9EyI&Wy$ifED.+>l;.z_$$fu yȧ!9 @ Գ2GIgp 6*ZsϷ$"SD/h)\Ib~9֥5y://*2b|NЗx@XI@Cwa,4-I }%ZYn*L>qFzڍn)zOCX8줙d-|`~x3~^Dyj M`M#S3Stx D<,n@1PQ- KqGNY&k 9[J|Է <eGBT+h T, PGMqYi{kuBE_?s.!솶#> ;/'W>f;^{緇}ϳgoD3KSC$eN}_hs& O(Kq=:C%biÝCbzP0H!O*9Rkbb N;+n>flB:, /?I& xYtg{j.~Xrﶺ%C#ӎGh.D#(A2Rd1Gj씞C7)k+,jLm}׏8c;B/V+esTA6饭R/ j.J?K+x >دblw %^oZ7f4^%??V+(8z:kaʥe(Ę'X8z[BJ{,"1'n?{8c@bZ.Ko(1Y%_Ѽ@f4&k5uhGHieZyڐYJO]Z`Vc"Mx+|Jҍ  hhEJvՁ8^vd0Ƅ@2 覀78l {{)I`4AM'\$eKVuY 7vQn<*AjK6]ңjiCSԀoDisʼn)ƋGD#IG8SE-64IwSTXkgsNKWRW\E )xa6$`emDt[똣HsBGX8ι$;Jȍ##?}EB0H3U.|?; FwaS';Aq 1?$,Ҹ(]fUmԻ֚[|ԉ`7g$+v:'#%lvdX5_l NOsC/~i<|h#~'^xkT,>4bD{$t[2 G:`ɳ*{F-[n^SADI60XH Qy)l8՛NDx6|>v6#'2ظNFd?sLi'#\"J}aypp7UT72봞E؋fL%$8gЁ,ܔ9uߛUa9v,=Օs9-&;3Q=R0o9S۫qcr}?kEUppzT *|Q\#vd逎mv0BĿh #Qd['acF0f<^Hْlҳ=OR >>&W_K)(Lkr-y:cDž)}60x3܃`&GD;\/hEbvu@.,D%"Ľ|_& +NG`hIn܄#| .(9h^Hc@7lh 0zڒ Ol`ZPp0ʿ}X&+|#ʯ}YnN$O0)>O<4_`3= l)M/kʐ8w&%q p+ݚ;NsG~1 94|hfFSK'`*e:xuv {_֔{.}QV5>佰-`\SlEzorHP3.NvVfmd+)˒$PO]@نt 0H0OocV;XeQ|ҎBPm%Tb01?hPX#; C9LMrBLzmĿo(,G)7'8Rh#QbW d\ ;c+kXz^2o Rl`j3.Dg$ of`T_í*51hD~ϼh tfxDQ ASj @Sf-FtJ6<*|Ex/|Mc83[(K *Lw"CL+EV0R3M7ӝZ .Ak(6Ye+NJlk-ͳn^2f8!6<@EoU_85V.rfkS=Go#&ߋJOJ-ܚ]./Q,,uh?A!cˊ`Xay_|1v0㸼8ǁ8IϽl{x'́sHΤlGh9'QJ).ct<-BIrP=$ֿCsq+dDQmW{ k۔_*3yA "HEᒡ-oSl6P צ }+0/JKFLe\Lvq⼢\ 9"s=gqȯ76 !.j,㷅RpQ ! sj0v)Lx & 帖IU)9 I#鿴^?Lx( ӶwZW >~;;baV2r#FCyI;e[I8SQbe"vc ڳ^ڪ ĺyK8?{Ismy=&SNaǃ [h)rY' lj m/|Wޙ.vUi =y+Z~WQ]fտrWٶـ%VY8w]S#je&Cg._xC9:JP8T'qw24ݍh- L?gVݨ*;B]1-%{FM!(a"dc/4-[œ` ^q.IF=*dy.,/Y}:UӨRǛ1~X[==]d6u=FKbeu`E<ÄD%dX-Y%I_śz%1^Clxzzko0@jZ+S[!n+OL?ZG >۲nҋ2!kw`5喋t RO0oxiKZf2# -of^)Mgƃnʟ[[\h)nav䴔l|HD(Q=Ob:G+!~l"E8f Nṕ-p{G?8aZؿ魃rм|󖩧f{LVJl TB ] J8]3Dx+d⣵?L,sg%D#bγhY fAT6GMN I( ưø'rpp1͍^jp nsI!&ȕ[>ǭ̌56$uYN<})ء^s/KlAq DL,`zcdNl/_qk'_̓*maXlϞI.h19=+"̵ ɚNԅoj|,l]_pR°nS&v4P[%_s tawOxoN  dyj^b,_bľ7 T$vU>Gڿ=Qq s\UpSv!ȱUW3be-7?>7opSLs'D`]dy:5 tGU.L|Ine θGQ:dTf+ A*u]L|=gFgafX-a4{%9Ac")Ś~mqtcgÐl}K@ (VǐPʂ0hdD;A:fR"hTOx4j0IVf-* K|u5v+nHcGhL>]kHCĹj%YrzWE63-K)Vׯ-?DO SES^͵abclv؁WLfrpIU)-NJ(ƞG ! x7ZxQ!Q髤]9Ce@Gϒ؟@hj>?1|2{Rg!5Y9U*fN 2NُH%RX;Ή+%Cݮ̾MYCD)BuŢÞEӅܛ4u0?&:nuߢ4W]?8`TH^*ĽO n<pn`ŊD(ҹ.}vVnOݯ_\gBeGwwJZ,hl-ޘ\ *sǧ3 9zH>mQ]['> ʯ\S}J,Udr{w6+ _տ)(8WcnC}gaKtKNsi;qXN)KMH_7x{<^lgŠjdb?/l,܄]A>}T~p Qi]h t@F ]ߕwr?WvSf|9O IPoMT.-˜  M"D_5͹'tm& 3ƱWWo#-\ C|^#J#7}IL|5NuP ukN #_ԾHmA@%^2ݔ:҃!9S (*{2H[> .1-FRE+&tVgw&ҏ4:jۻjؔ_o$J9*"t2K8[\OMr_3Л!g|L뾠*+]?;qCam0~274KūP$5`-Mr:mE~uszy.﹇?$m~YFb$JiE4b5յ3塝{y P|?ßG-@ȍ\`j4BIոf,kl{D=&Eܬk@ |gyDW,j|H S4!׺)f e{roXi฾,kfц*wrFN+ e{M>)1v%6iסKcJv~C.,F W$Xm*L8aCGD]K =j2ĵ:G QXKxu89axyujes\<~9 <,P F!j 9zx}0 )w rTJt)A35Q+r/$O}<T?pk-E6Ic֐`C+H|ygӚK} su:|$f{Mm}}PR`Bځ>5wC|Q+-`tXsY;Fi.×aӣƦcXa_GxR]wꛏb `ne Xo Ti-5=ߓ}}|6`%>ls[j\nz_ρ" j: czc+NK;B{krg4xɁW]VAm)/vE1f0D·I`*V5p7h}\= f 6JL`UcTþ+\2-ӌ3@c"nɓogx۟!M".!xFB%n,&`cy7 Ik"-^rD8H=~ު V> fwI2ЩXZ0.ҩ7\cEfB ;^j?8#V?jQaA#߱f!6)uTM@I íF,k"b;4_j'0Iq%= uK}VcQH`rJ $&dk'wN 鐤&+ O[T?lA$~B b@ET r^fGqIs\ҰCf9>>,| ,A WM$ 8.[3߿3nv2ڑ5J xH#3S~R3[IrS=uW{GR,KyYkD 05&'i:DQ~2 ,-+ ISQ[dgmPͱ]\gNך7qlB2\z.X[n^c3bx#Wٮ[[B ]MS`̘'7e_B<ӽ (&rbwvi.C@Ty{_ro6+jT.]8WP8u_J.z_Lq9䂉_JϔC].gHvR-} ǧ"1$qA)S8 iq3v,nWT@\F"D[^(R]rِninxޓIlJfIЧwX4ݥx-o#N>q?̓y(V¨c'E'^+N~8sO&kKt5H5L.E<djqܰR_XYV9Aja/jg_6MuØΝUDJtG_CUGOKZ8ip*\:Xˆ=aG&g՛gҙJ%̜ZvWG`%duȗ8NE)3p"oW$ R_ _͚Ʉ$,>DB?`q%G^H|as5V~3y*Vz\T)PBDeHHW~P/{"n%/p0 +PA]Vj|Wo 'yeq+fB,`2k$<#B䦈 2e# ;F{sz'ٽSAS(#Y|k-<я0?t ?v3eq^$L_&l%wk+g€&IKm檃W .|;4.|y:pe0:}҈|Kڴ!}n{,6%R1KzByC;zuщpxڏ|jIb0Ft=bz*7 ؄NJ˳dY!9Ή kk HV )9=4&Y̘ho\o@ZWJs/|1EЅ D,gMa/מ=,h<pfz1IVkNG2^u=2jG 1zqÁ,ue^uL'JyYޚauKM2 /ָ? r|6{4Y$mw'7c"H2w#PQ3$elWׅ ւiobu.!$z=no˶@:NWԅw鞄 t-JFTje;<2c=E@1psɗ]'B9,nZhsn8 asB&Ƞvz1?j^_GWI'jQ`c*VLR@F@D0CN q# rҷL{܁\hwzZ $"H]tCT <|r$How{ ȨO_-2YfDd]ʼn0! 6:' Szr/z=q>FaG}Ry cyVJɕ)ѕ2_(Inb#V ڍT.(00P6 1#T+?v)"4Fr3=l8HWRF(7+ ZMupiN1cIvA#f2`DhwkC\t&-p 10mۡmT=ţMmȹak&P$IܵE>O<뫜 jtmb"ɩ55PZJ~~a_[ zL=d&2MtW t\x; BQ A؍?۷(d+K[Ɗ!˵?>CM|afM-6]:EٽGl2d|A3f*oeJn 7ޟ>Eź8^WЄ+w)J.Y禴&~(`㆐^+4ȇ[R9B0(ӆl΋41~DX8 ?h[ *(9~ىۿ%洆tyP݌NMj $QڱRշWT%OV=a65aM+"6v,ۆ?0uݩz!uET=w ^~yq}oΝi"Pᠹ"χHTн=25Mb]f~ZָI'\U&)S`4$ θvCER¡,Y1AddHR^ؒ$uhE[-zdv}sFW1*˼VO$[ Ќ%d)khB#ׄۅ{Sz/2 ӡV.vҰD ՒG TV6Ϭ*.u,DC:`+)zTauϦt#.sn͙]ct7h@xߙTK?1 pD X} !}C?g뜳X1qYǡgTș!5v 򿧽(Sʹmd<.mS50OhϫCg`p乳8QJQDL74*AW69Cnq:i6NMh㙰e7<~ad \ x@=< Rpg1uҐB n5IrWabOlpFhEC /zyi@{z*l A4Vf5R/.jb{?w]aԛùCz(Ae)Ĝr c*aUl-O:~PvVK44>[!̞;TW$0);[4ސkMa*s5ۣqLFX {ăbYɐ-/๚ZG\Ҳ$;vq:TsYTBw/9%C5i 9_k@$;D#uXpH["Mls3'Bv+gBJDGcRUo_CF7!_E@@pI}.-3g n ;=P|yKqr+w8Ѯ9AdOLS..cEKKw'?az}m*8iӴr9VɽWlo-DAxVYܿ2+tK]h_Qd;مgMnKV^+yd0y Yr\޿ dykFҰԷ7rZ"Yfpq gf&9ğ= Xd.GzJ1Bˏd*^ ZmhLZUgzox[4Ly (i(Di(|K0:.7XVm+aA%pU6cOcS 񘠟X#u)SЬBD >ltigo|+ه)Ņ}vg_C05{י';__K3C>$q$F!ٛ#/0,'?89-z<-?(Qg۸#ߚǍuf3)!<珲h1m4V;:tr(-?7ߴu3T\*;_7žcxT+\8ꉱ_Q4[3lkak/ U-B,LWJm\f0?Ӌ:t}ێ$?%r] wFuǡ.Qˡ+@6|Z>٠Vɬ-L9J&_11>XɽԕY1ң[rz/,{P5N [IUeŗ]}vp}S!WJ6 HO?xCùQNqk,Dɻ,<^7@<ڞ!gRbR6 فKSŋؐ}~gͪEYP`r1@2fi#2/e1v>$s |#?w h*T}>%#rI8dfa *sBu#kSBR==>TQZЕBb%E-?|~U`B2hSYvaUQ&E<35ul|y7t@Iu$ g+>~}Ƨl+DCl& 像C S[Gh)mOyߎdI/|͇n. '0"#|pIUEfĿbjwYп",B 8|Ky8QkLaqsq9&fs >"q>ds4۔5RNE-14_9uȻ+A1U%npM%d$iQ8!鷒>]%gq,QeɸdLG3ɐ',ow\BQע!)~wS-;ڛJ*lIP.tB7>S9s<-p-@!:{Ƨeˆv Z4ȉT_XH'_{-,&(йxyȥy.Zπ "p}1}!k1 sBOYNC~|/3_QxPk)h\D^<)Z ՓXUǒ^_XĪ"}m.SW Ѝ (:0w6Nk[rTcbP}a4穃Ơ-?;UPJ_ QU/1HL w "E $JnVӗ}V%_8C@b\dmOĻ{*D߻A`dWk:0"W}&$bױp?N;?Ǵ9s_{J3j)=L O-1酙MS5,3\`bh^r_S%w xo5In{_Q W+W$YZNuի 3ٙMwl?R^a'Mn5qfi#OJK2c.# {^b62 wn<\6)0eI ŌvZo?=adܺV|دU`Y y*^ Y"򻷳fKj_&/fƿiD'AGbGq.Q84 EZGzR+lӄuEWjHZX/)FqheGN >9ӴZEK=]a_ӏDÛ?k*Fx`ꓛI S,̞m@1`Cp>G \=-:RVРZP5)҆Ơ-N9$$ %7J`gWyf6T8,5`5;x.'I&Xd:$}O;4-|.=~Q~4%ZB'7+ e-t<u[9*+9(IVBRύSh@\ݦim{ G'RfF0sSgS(-7لIH!b7F`'/&{ZytwS)(:D%ФIOt=Rn)|iwm4 7jtJ>q}ˠضu*cų}Z2Go_-ju>/Tia+yrPwr¡]ZϔSt9v,Fa-/붧 >cWp\`xWQwM'&fI鮌V?$l`{d;ѕ 2ìo4$lJd}W4 ]<021xO>U3~,'; *g X#.4܉윲 &{:uY A'BZo Tws/39jcNmpVc` G_oCfD!Oޕ\A#86Kxs&0EȎIع$zoFkj!PkSPl`|Q_No^*n{)n@p FI )V4 #qb+$P2ymLX`pPqD( k!{xdd7yҤNaГnQ(XM%Y@5eNX!nmr.\xf;m&r\Po}{ _}K6GTsV-Fd3G*SZVueԑ4 "7CN`[Z7n۟ ץ7ٯ\ ܩX,u_$(a@S,Gy1 K${*+nˁw;P;e3&]qZbXz?ㅄpQV8!sHj<cp#S-P?F3]L/bKzyvisJ,ToD') `Cq$eEq(Tyࡑm uxo 6KږlEB=Y.JT`]bIܰ׋h#pi#˫*CB/`u\? =+yZt:q+|( k`t#c 8؛ /ӺN;Csi[wUQEڇzWyP*Eiԭ 25iIKK\, Bsƪ&ڒMTMA(Z2r p #rRMV'yfUep"PkU$6WEXdS|4pK82mt{@wsӋ0#Z[G (y! "p) WWY![?:Eä.ܩU&\`[QȪS"ht7 ~1Qˎ.' P<