summaryrefslogtreecommitdiff
path: root/arch/csky/kernel/setup.c
blob: 3821e55742f46f0070688f1e81161aefb8760f5c (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
161
162
// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.

#include <linux/console.h>
#include <linux/memblock.h>
#include <linux/initrd.h>
#include <linux/of.h>
#include <linux/of_fdt.h>
#include <linux/start_kernel.h>
#include <linux/dma-contiguous.h>
#include <linux/screen_info.h>
#include <asm/sections.h>
#include <asm/mmu_context.h>
#include <asm/pgalloc.h>

#ifdef CONFIG_DUMMY_CONSOLE
struct screen_info screen_info = {
	.orig_video_lines	= 30,
	.orig_video_cols	= 80,
	.orig_video_mode	= 0,
	.orig_video_ega_bx	= 0,
	.orig_video_isVGA	= 1,
	.orig_video_points	= 8
};
#endif

phys_addr_t __init_memblock memblock_end_of_REG0(void)
{
	return (memblock.memory.regions[0].base +
		memblock.memory.regions[0].size);
}

phys_addr_t __init_memblock memblock_start_of_REG1(void)
{
	return memblock.memory.regions[1].base;
}

size_t __init_memblock memblock_size_of_REG1(void)
{
	return memblock.memory.regions[1].size;
}

static void __init csky_memblock_init(void)
{
	unsigned long zone_size[MAX_NR_ZONES];
	unsigned long zhole_size[MAX_NR_ZONES];
	signed long size;

	memblock_reserve(__pa(_stext), _end - _stext);

	early_init_fdt_reserve_self();
	early_init_fdt_scan_reserved_mem();

	memblock_dump_all();

	memset(zone_size, 0, sizeof(zone_size));
	memset(zhole_size, 0, sizeof(zhole_size));

	min_low_pfn = PFN_UP(memblock_start_of_DRAM());
	max_pfn	    = PFN_DOWN(memblock_end_of_DRAM());

	max_low_pfn = PFN_UP(memblock_end_of_REG0());
	if (max_low_pfn == 0)
		max_low_pfn = max_pfn;

	size = max_pfn - min_low_pfn;

	if (memblock.memory.cnt > 1) {
		zone_size[ZONE_NORMAL]  =
			PFN_DOWN(memblock_start_of_REG1()) - min_low_pfn;
		zhole_size[ZONE_NORMAL] =
			PFN_DOWN(memblock_start_of_REG1()) - max_low_pfn;
	} else {
		if (size <= PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET))
			zone_size[ZONE_NORMAL] = max_pfn - min_low_pfn;
		else {
			zone_size[ZONE_NORMAL] =
				PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
			max_low_pfn = min_low_pfn + zone_size[ZONE_NORMAL];
		}
	}

#ifdef CONFIG_HIGHMEM
	size = 0;
	if (memblock.memory.cnt > 1) {
		size = PFN_DOWN(memblock_size_of_REG1());
		highstart_pfn = PFN_DOWN(memblock_start_of_REG1());
	} else {
		size = max_pfn - min_low_pfn -
			PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
		highstart_pfn =  min_low_pfn +
			PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
	}

	if (size > 0)
		zone_size[ZONE_HIGHMEM] = size;

	highend_pfn = max_pfn;
#endif
	memblock_set_current_limit(PFN_PHYS(max_low_pfn));

	dma_contiguous_reserve(0);

	free_area_init_node(0, zone_size, min_low_pfn, zhole_size);
}

void __init setup_arch(char **cmdline_p)
{
	*cmdline_p = boot_command_line;

	console_verbose();

	pr_info("Phys. mem: %ldMB\n",
		(unsigned long) memblock_phys_mem_size()/1024/1024);

	init_mm.start_code = (unsigned long) _stext;
	init_mm.end_code = (unsigned long) _etext;
	init_mm.end_data = (unsigned long) _edata;
	init_mm.brk = (unsigned long) _end;

	parse_early_param();

	csky_memblock_init();

	unflatten_and_copy_device_tree();

#ifdef CONFIG_SMP
	setup_smp();
#endif

	sparse_init();

	fixaddr_init();

#ifdef CONFIG_HIGHMEM
	kmap_init();
#endif
}

unsigned long va_pa_offset;
EXPORT_SYMBOL(va_pa_offset);

asmlinkage __visible void __init csky_start(unsigned int unused,
					    void *dtb_start)
{
	/* Clean up bss section */
	memset(__bss_start, 0, __bss_stop - __bss_start);

	va_pa_offset = read_mmu_msa0() & ~(SSEG_SIZE - 1);

	pre_trap_init();
	pre_mmu_init();

	if (dtb_start == NULL)
		early_init_dt_scan(__dtb_start);
	else
		early_init_dt_scan(dtb_start);

	start_kernel();

	asm volatile("br .\n");
}
>ϋTC,3_R7p` ilɷd$nHm$Fm$vZAF]t(UXɷ 7Y cjV{T:_dd)R?YjzWqLt-QERSbIRo[cu,5:Ck66qJI$I$pæyU?^o~EDԪ@La-ݎ7kŠ51q?\XCDa]ϲŞQ)5("@}MY=Evh 16.#㺜$z6U"<$YJ[vX]xL~JWF t9i:Na;cl3g Pf<t_+8drMCfhsuĔA.ˎrWi-鳲΄Ó /8 U0Us\V]Xm*R厨ݥ_"B82V)+Xj1YLR̶׈{䲦qrλ;,DM0fcTVdLz.*ƠS*YVR*ΛfUP\krS~N%r:q{KEc)P.eYmWa&Ito*6U,Y*Uh'+أk3B0c58I _H;xYquбrBur.yݘV%NUp][-[䴻Ok#oCB f 볊峗l.mfz5iɵ&FW=_Saٸ8gcNي(s@uUfE1sNx99^+8˯{lK29عcɴ,cG[SZ>_溲0!k;\ܲstM&}pod'kiNc1 e"ڰ}#mZҒfhx`Ut#+/T Ryc=Fh+ˮբÙr9_%? HlDSd   3JGrL?7vш!DW( 43*)}X8š#xH43v.;R߰$= hshATn}?B%zGBUy3Ɵ|N|Q|ץ}@h/SKf8rʄ{Si4=#bWwOÒV-KX[٠Ӊ3*d;߹SzOwͅx-> Ob{rUXz.gz9FPd 5EhIvzyTLA<%oL#lLa#In՝{7|c5.uƳXV5Rf۰ёDB|&N@CM ^pM3KKS=U~$4|[yy_vk!~*M ca'p~&800ŏk*?J]>F%].x#˵unZb:Oema+M3.nQXD2:z=/~:}0)ܿ#,l* &'n]ruCd/Bjd:.0;tpkzGGq_| S8$f\(I3Oܺ>r7 >꿩 =)/ [C0xl,6LAi ;(= :ֵwVɆ'`EH FǮ\̓ׯת7aPclOB}q09쌈nSwbcQe@Tx0Ǘ>[=쟆nb$࢏!vc2!=J# :A$s#鐳|f~`'>#B&h:4HQx{ąHu&ؾGq1mnk|pzxάu9GU^\pdh ݱ{vEm&&0c_xNd 4 Bwhj`8wlﯽY~ow+lp!Nu#}$\/oո:cnr_>Lgd'Hb"93A"kd>?KyHqD::~b_ I,l[]UC_NJQ/^lx2H1,]]x w:f_~uEŷXm<|i֧u5&YhZK W zGfbF'1@@:x").nl#ob?r30q_ WOhfnHkZU^H=0 .86DW{®&>u{)ۥRx S}]0 X6 2"t5lFKnTמrQv|lvt]l7z]m֟?g~8~?xd9G\rZt_WW.|߈FsF]rmst|FV@`܎ٍʅ6p]S>p嶸Y'44pkY+zj#egF\AzuڑԂӶAϗ9U)k00oH og{jsAߧn & ޢ *9s36vX2PxROnw4ƒGl-GaY6e+tvݖKstvG,Óc-_;IfNmhG  !KœzqYiSdD{e>c{u vxoHuqy[T6tvKwD/wn͑=|Pmk OVj_rmXMkHB_5m^(^ ~PY9?|sQi8F}Ï?nxx'cP) p_7NrՏF%it\wAi [R:H~VŃ3A8OZƟ66Gwnm8md#bcdZr,9y0AβajՇQt3f_ t! R&uۈ ygC<"0.GKcLzb'J 9O.s#<.RRX7B GTs:]x? ÚN5Eiw(YIM> o]9Ń~rJ&NbI]k%2Bk6ݘkSzRVK7k~ɱVߓ_U|Rps|:t}*#tN;G,@p#2ܽNV͗Ud"2=ZHҊ *ySœ䶎00{iUUH4HwlQ`wI=E`-:G+R!- *{,${TGt .Jk(QSpw3V@1 l8@J 4t Le)!zU#ÒHt q4B+˙ I%'h1b2#]7`ec.N;K5zq($ۯbxjC p3 At8 ) Gkԇ)(xYC)ݞAįv2I69!\\Ҫ&uy]K(6I(P|F%nenvV3i (RGťԧ /sԬ.k@35 ;|1; ąfOmaoޯ'z,#$n`F 8 ]Ú:A͕-0"RT/8kuUJ9si{*,.tܲeo14K6{p;V$: ufnx&jl0j}ǁ3.MMg#N~3'Ƅrpl`WDGYdaÐ I3e`MXD*Iug&Z#S g.Qaٍl7xXPx`F X(&\~0յ{5C_$ @T@r3'OB?@? !ϖ`w#ʔXc4ּ:ֵpCB $ڎo1A>EO W;e~97v)%({:k_5.7T # Σ;n!. Dm%oښ ì(O0>$og4gGa'ȈBrs[̲w%n~]ܸMXuCmƹqɢS9 ~N['QjI\)m"BƊՌ.<;LgN\ҵm=P'0],z Dǥv2$ka((W[@ S{]3;Kgr,P{|Ue5T_K b! 7N̢[X ~9JF6Y.~kzlZj핼b뻁o'ADN}[ց~K)kxa]6RgLjMa Ѻ d iiR^rb C, GQ$ Jv[irv j[C>ΪA>.a߀Biqnװh<\SGx[v!V7)a/cr3i÷qTpCy/uJ㕮5(#Ɨv U~\/؃^>DxGa;H)ɏ6;.Y*o`MVѷTt;R^7bhD\4Zڭ֪t!MYƖ:kY<*<"݀lr0II(ˀ7@m< y1; `ذl,Wg0ZsCE!_&V.P[a7H]Icy Ȩ+ͮz @ٹS]F67\j¸~&~k5}l(۳msuz9R~Mb(lx |4tS2S\N"w?hҟ<:l%3ic7Ssw }/?G?Ev:?~A—Mܗ=e!x@!ׅ9?={;euKأEOΑo'ͩ@x }]v۟G $p`^w<l' _>D'JcL ` ~/}3П ~BYX5;: bbv^&lOGoiɭ]gN4s{qtpqpϹcLzA,[so#LϏnoGa6*X{Og{.~{HL՘ְZ9[IY2;DҡͿpsr%#~!1iP;2ko#^PIw(ܪL.VcqH(t\ac^&S1|Iy&csd9%-C(@،b2nj)6BJݗmlZ,m&zTmlCa3DjH'p<0o"JxA)qzP/]qV@uXB:xytD"l Dp-8YdU7tT㗎y;gxg/We%H?Q~Tav=D93yV,~YfЧ]dsh`e8.@*[9 ks6u"D+!|MudsDks(X}%m]ޫۏ4 }FY ٿNFI=gXIBI(I1SVN&*"3Ttۋ]2ØA#^H3 CĆXYڮd~C&U)0#QD&4թل]~sc:3^>*r~(CP{'|8\8to;.%x;VkLsʂc[1} {`s:}>OZh )1;Xn:zSpD˦!9s=Z6LJZ&)~,oiR= fP EV¬~Q$Ns6Мx 0M\汢G9vy/Q:}F,qܕ`4{[~(exuLpdl1Qԡl؄;ܤ< /:^U3n PNKhᓣzghNh ۶U?uc?xKpS7cL)eyev»S OPe~k}S ct@y7k0w׵Hյ3n3Z~@4b6pEC'3QG7sHOGɅ}q]F=VZZrqHR At[P%րeܢ:k5N˞E;H $>Zy{ǻ+.~z@}/oxC@ @W8kN0F]VmgA~67s$)z4JEa,֠ [F#" f9nZBPOnnMj#oZ]xؼ'#P&ʻV5qO^""S]*EJ|b ( =Wrx]+kջb/^DeTQ꜆sh]@~QGN:FoRu biϪRt }#ogF>ATv_g* Aɼ="P"[E9 QWKVj,+ulU$0%}t<Ϟ;Gl`^ 3we1jA@nA ãRmVTj405=>5F˙>dž`ǹAD!r@_4 zRGPL}t YTTrHl x0 ]r)= 1;zW'Ĥ/]7pՂw/r#K#1% 8B(2QdJK'R!=&Ip}_O!iK?X8p*ZP8. 6Cz&1;җle^vG}b#@0p4xAے , 䵙α@+R)-$={a{<_>@ZR}feponޮ N6ҍuyĵȤ*e ݘzTnk x͐ʛR .w[ј hA+?W ~Yߌgg'ǎKwc!`P7xn007b7zp}79C* ̺ks6zvtdPYɍ^cP^+|:v}+EUk$PijW39:\V(UeM>5]Z%; d$|,fF`68>b#gm'={u(QgQDΔ7 V4f& je1ys. q$ bv#0)JJ )`Y)Ll`hӥEeqB-&Rn5Ⴗ(ֆC#фXOcH ^꿚l_ hz2 8HW:#A ?ciyWF4]f 2@vEQ;w 9 o#@C @b#+|epQ0wސNݬQĭἌNLۙ> ~2Pp>i ٍ^,<!emz 5z}{yg4@P_BA`q $ L܈0ۀ:RCsQRc$-Q@IXkY~9PrqnD.XxDGmǑ~Ღmp iM`F-1*d|-ϛͳܭr8<569. ۂ{?[v^rs=wm} Lx<@!Ed XZ!Td|@ wɯ v1F"+F҃N?d!\]b$ܧ`x0unDǻ->Ŷ6%>b,6apFM =ٱ=@u#͗;8ֻZ"csHnf),33g;q?XȈHvrSǃirʭ)7$YH:ao=F}81Elub[f-fӹ =3|h;qgz 2btޒHz,ˬ@ngȹnoQͻMD"Tt% 繁5S 2yLip) 9kZȍ F&6S38~Md)K:Tg"l7u\sm8NrU:1?̴nDYYmmZ/Drrί,F:BIB~{b}Ǡ_-V6 JMT|B ê4|pA$BRq?be{[6 ilp!:o˦avۣ9i:+EY7񓱶~ LIS׮sNM{6Ѝm8GWgK V8ړ  眚fGm,\WC PDm,K QB*!apxcR@WPf0nѼܻ>)8pg/Sclj*WFRɑ3uBb$..} # 7*ap?p # 7]Ѯ^?쉃l"N>xz\žCSʾGX))a'Tv$VC!<8@:xB:Za;toTmfNqʈfKDZ(. Qgj -}zEt0z˃E+5m_X^WpZLpvQ|p /Y>Mƿ}7[7}q;c-i}9mt|*?wFLwҶEw .Mψel RQF+eiI\-a(3tTm5F HV5"SuEK F3QxIJYH ;o|+X)J VLxBbY~86B{iǃ2w͢}BLAJOIMT>jM  H{5Wۘ n܊E<%sS}2t;\j^Dx iXuRweGsiWl`DA ,|q/W8@eϦr&J6HMcnh.T_B0Q' Zkݏ^G ,p[ G2~d.vu,Oe24.2xg6e!:~9e I/ -e AeڭgJՌm=%xYr<gY^^+_]9}'5d}{ ' C +Xޫn0s6J5G9-Uz=΋ -t&^~+(GSV%Vp!55 1|7z1o\>μvuɂאt,]68i%Qco!?JGHp}kL:d[chrWG`6eD ؍OVZcU<}Þ/ru8b@8Dy.)s8,*)oمfnfxON9¾c-o_=0.#?~3R]O]ԭG|X|џB fCǴ#XnJ؄~4޹vxW+Ǵ*$KЌC:7&2(adY>w( Qi4A͑uV~>3| K|Dl.(&lPaoo.9ckL[2I1kpz0mAK;c83]p)&gdşdv8#5Na NDET_.^[;n JE69W*k; `|D5A"{ߐ^E`Ɛ?b~Kj=Y0X.mi@V :! ۨ×W<)|_f1`x6mN v nrqb% *{XAX%`=O$9VbK`1wr|"6>03BsFN_(X6x~]%r.F1)tT6Yr9;8~#- Lj<ڕ,aQG,_Y.!̳|Rr"tJ6LaqDdāEWF!W7 f緶!UeU-pTHrMaDp)Cvji}qHiyE] >?s6mUcUҡFuԾDD6 g:&d'UVa _Y{'X1}4FV 9Ȉ09M Ϙph_f1Ta6jv@0(.1p.VgLG5$Q@Ġvs*Di6\^~E% 6lthy̶qOzǬl^śH EyP/ g?.gI~}Be{PrPԵKMx ϯ"w֠w6zkJW+!cUn#_ \KQb (*GxG#?GG!b7g\d` 0^)3>3lSz2z`avʻjFEʒ[0"#0n;?㐻#o?jfTo0e ӀAE`gx7~uo;v ֮loN[S@QL`/w< W w$yT`jh2轟`W@g=(\/;,ܞWV. Ά1 -g5I}Xâdm$UUޣ݃r3)Т9oz0LV#78*<=jQ< O^/SB8e\ Fed,覺BXIaMW;}W8( )Wo1T)y ۛP$ y.S&Py$QѹQ*L3 Dl:n,[cy}&XD9a@PQ h'=^4 \dSr4V,){6ͷy߳?\|̩0UG cR4r(;F/ HXyB2!|JCAᒗWBDLP$a9RH"- .r\ \XCXij8vPDrFn"3GtL%e]} ,KQ-q@|'^ djx=#A&$pIaP9⬦A@pB7O0}?'w=u/mM\cvIb?p{޵S1 q.ȫ`qfNR8=Lgz40nxo>ߍKPF0Vs8ykf7/7:\˫6tiMNN$2(r) y|bT9}f}:m/&^:h&$Bj>7U{ F6_1n h툣Gn/|yr+Ա,ܣS|@Vqc2}.V! }{eiQG:78-(86%أj4ߴQ+2ΊLaJMhCDjLPF2 e֖*F">q{~|aLVpjX\B( H/CX)! `w 7,鞼]#껞jt*ۻt"\5ܑ|M.3DZ֠N>ëǧ$l& ;{EFU-WOp6󬯻 F/c9Eר<¤X~WYXZ(jmW6YTVCbBMz[d>puF/ |HWgB[Rf$2|%]gkw ʼv_ Ps(CZv#]:{"v$cdbY2#/o\0u>wi4 NН7eZ/ ?uVD QjB%LHU]d0*5&IWWZeݣ?䖥n;UK;f_?Uq?akcڹUsMibpvCmפ:/:Bd"4>M)Ne¼#G^xa v9MmZCG,L:*+^6_oOT2S;6=>!Ny:9WI*dѮxt~H[ W;HRa ) &nQm{zp epۜ7aŰ 2U_\mгm4zUFi=#py[UwWDda&yoVWW_fAvհK[WTn:twi;lؙѲS-r#9hOFPq Xa;/Y 2WFw|_mqu˩%8-Ke/Z7 +SڿzAwŅL8& 'Ycz0zxZ`8x!ѱ)-l0j!T@.iQ˱͘mo^>&81LQ@$t,h=tΝ1W$ NhLQmAm_5ݘNXY"P (AEs%0KFG,K>.lE%2P'QIqP5t@+AY\8[cUT9IrDE|{-T( ioB ^u4|5.V1}QRG9 QI%ӼG"@T~bH8AE~OAww{jb_ $ЙPi1+`e 3C˖h}͉]q碶j#,~:0uװVxS0/M }?.5BOͮm!_*wKDbР#=mt* Hs`ϰBo 8Vv;|zgAzeY*" ]}æы#:j-4qR%l+s7YB47o?R0⭺ f\H7 FkVWWl 08.ꤠ Ni25-Z$.gd6 ir DW31g`S!._}O^g8Xբ4BTm }J;K$?W\ Ć}KaC;gkH?pTWp{p,򺘐zpcj(p~aT,TaG>~MϦݯ>M`mphkpWpUƴsj@Ɋ,UwzU%gTTZ}Bb@ܣlʐy+!.,3NV"Q%OؽCc"K"&tVsįޚki>W.-4ǼD&пFwQ 51T@.ҳ=k-.v^ G~z@~yJ#a)BH8pzU?7̅?W;0,r!+=;:3?1aȿ>!B>m4>Ƈd;&U-abaYmtŊ5AAw[*%!$_ ]W8ti;"C;6 Xy^XMĪ3+,+FM5X$.6VVI)Ћo֧3>=U&6<(>hu Fmk7?>h wt_X1ɺ)=" 8po-DB^"!1BIs+A[VSG=*p* g~6)`ȋ=ۜd¥Zd5ǗekJh89v,*p =ApqLf;phOU-Iى@⽿@%s[yeFklluo+ǚ~;𚴫I”@\2}[(_&X^.Nk׍-.``XS~o'MV|њifޗ-6(y\oe7t)Ӂm~U0aQcѢaD׿A2QlTEOh` qr}9(KMuX 4{kRM[l#XNwX$v+U,q?Tg~q! H@?^cA$gY&a=\ 8p#jk4Hcp[K_dk @DwLڗO?8yDnR HH]t?]|,)E v%k~MlDjr7;CdE!t;|ǧ7E5p~SNJk?m.[r5/[~.)P>Q0H6[z[+b}f&2#;|_voX6/*jVR:,]9 # 3ȯכ]EB EIlY9A ~N= Une_ƠM!4"_.I/~w@ ? f q]KT񕳋=DF gph*8&0Gn n1ٌώB.Pu.vHv޶e4gڢ27_vvRTH*>+<&9'/,:M|t}{2dU+B0iHIG8fO˞MS@Uht* *LZҵMʺuDuވ){zZ(0!&"vHڳyy~[k$3D!vq7 h/Z*\T>y hW(qA!F n\v6'(׳\lѩ͕ʯ>tPxzb?-sJti@CP(3MBP&G{X=~r @F4]fz ӈ# Hnum6N:ZbN2BM#gg3QS%l!W lKH5ls:SG0= =lHwJ5s. *7 mn'`u`2&\!P\@ ^y5u@@!汪.q"kA<Ve>3%?Gm bj kQ1=^X|Qw{%|&-tXM0}omA^x GJmFnR Ħrwe m+,#AȩH/zE  ;ÒvhX@USaCߵ~%-Q0c"Ρ Wszی9 GI* >CAsvVM'/}`Й!&Gf};gϮ9RS/t^_& J8?eT,B^V;kV6+P6S2{* PFl춓$2i%&li) o/Jތ( 2u;~@$8HJouހ]ì 9J~Τסא) ;?g7xL,d71OX)|l" n0io3$K9Us$!0$vگ)Bm).f4wUJAli^nf E-~i}K:j`Bn gwUp*ghuĿ9|Lnhw|6Ivr߭9ߏg#͞z4=*^4 q Q.ѐ J+A@O_f(Uܮgex勇hYꞝ3dsR zzO-s^`D,]|ߒʓ)?d]3ԢR{C֯'.pVMDkXV5I%REW{ ,wpvڭeBY7zvU*`cj6zWn5WAQ7 ~pq}*.n,p}:vq[rHh[umrJ-z 7o=yi>upxjғk:2 ֲ(PE褟|ݜM. u&1ov0(ߕ|f4Cf˻gw~UaR=CY=o6-[OzRM*"so|y &t Tneg*݌ʵ ]UG8c9{1yB.$Xyb,EF|ʇ+rJK+ :@נ)9#[H:,:d1*&HMy0UƗWH;G<)qno(5% hAh`GZ>2:|gJ/D{]6ak:G껰趬&Lw1 3&3˴Z^ziaLWBڣ&΋}OgX~sn5z!p4!0 4  3,:p~I5:ɢ0dpK5 ]P@]q[Mŀ3D/Լʨ$mwA!·ݷ?͛ АG,ص>h{$J\_ͭ4Fħ2+ߓYb&u1"%ΨZ=aed*{_Nn NxA|e+ :diA+$YYSqbÒx -}Tqjeqٝ";4?@ţ{A>[£h Y_{uDbDHIpLȠK\')k[MI^@?{%n{>bTkj"Ha8+WQQ|qBU5pP~AQ+9?Hsl9(< 2upNWb 7x(@v_?,i9S6S~lS׶}1G~˺*^W @hhN@(#@Aз;p\7ov#CK: R0)oA`Fd `dK'j}EplXZYJ0 yޤ!ghGoiKd>I < ==YR\v_C4@vu$Ὲ!˙_..axOh]dq?'fa1qL$ȦkZc仾ӚZsNx-M4;7%ił$Va,nәYMzD|g{=}R6!!bGOچ0eK,1 =FTOq{}F[]L>yfTtn.ѣzC>*T)Xj3Kj>w,7H5meK/פ nQj6/ͪL* ;5>ITZpX"ECϟ_wiSk.7Y%_g>98Ƥ=ǞAR´m%J@JWi3 r4CQM+$̭5"ʋ:يe\1ー0` CZzI5k{looN|[v!CL8mku-;D7aKFFYJGHަXK0t)? APٖ f2[lƙ"g\hϿu{NuzЍQpmoESHMDږNh;BI 0f^j-SͧmnO4ͳ2@ˌCJF0=vPG2z 1 ^HRnO*3dH;-D×4b v!$HV<di[vMu@9! AM.zDC(طR2sd 9sfmbSO"!ix G7GFp"H#B+n)eTj(9r$7w1EpeJe<9! J2aDkHOPFq^6u@KWC7 fkeZzcSǹ5K Hh"E!p܀!lMt<>S4x6|Na >hMl;k0͟8IgWgݟ pePgk: b8<~7r_b`:ZV;#֙tdT-:ꢶVH?Du+#1 {dT[_<3A7%_G_ZYq(n!]&+Oǀ$)ʛ*^ں;yttPAp sAԞ y79DlPv2yx:qZ>ߊ98lh+9&Y`,2OOABkjT3M!DWV -iwfՒ{3""\ FdPŠ^(۵45IB-BE(xM" IVaJviih$]])KN0  C"JxC;p @'~ڎ ۯ{"lROۿ˕No׺o {X5"bP֗.y:'h!#c;7vFkj+^GRI} .hdB%~]);Ӑ4[i.nKѢ?X\/ޕ"O>-!p#/_)L:WTWejQF.v3X+ndam `6(XiOXdjllm1Ҷ :\V(} ;G[jWR$6r gPq Jx'ޅd!v|c~?˒Ll(&ϸ|(Y"a3VkH=-WІ)=tAHWD.YQxkgLK@=qZ QPYfA/J9ا!{.ֹ?9xR|kAيnzkrpޒTL:>w֕Cv C}*B!@9 COS$zۍV{3 @F!qgE͑?k3}k=g"6F: BVBJ7 )ﳣ&/%YͿ3]n˒Ngt'㩙|5,O&A%Ѣт$cr[2u6,D)[=N|M(F+r}B I>*q*ͼ]`Ӂui,wd`UڷǦCBwjn;bKS|S2i.@XֵhmE#>>ŝ2Nz2 =b̐* `l4[;af|o; Y k_0fm9{ ܢ2W6g 6 .X\LL:@-6Ԣ=z*}iF@F!b!|ET;<Ѓ 7T5-s쥗-pt`Y|n 8;;y;L t" Ԙw˸\+rpv(C|~넲X ¶)|Du/﮴(~#~UQChq'b|zk0W0ZK Y` P xSs7URIz4'^f*}4z !Pmi `?^R&ZFU%_hI; 8! CCWRq usJJW~nXˊ W~;RSBCuI\zB vZ̷'%6w2?&}"أǽbϋV>;ˆ(E^UGIZJteaGӿ#5ػKYI!2E2n1~ vz?RU'gU9?[>Z',|%6!)={0ڞC% 1ܦڮr91Ŧ4ր+6\ m{aɰ.QõoldXZf7{ןvdhq;V _Y3L Vl<|x|c]sN MM^{~0.|g: {ah& tۜ65'#6oMD^Ȅmɳs xX%KD~l&muX`[N\M٧iRյr4,*lUˇ`r:7bs{HRe/ Xul=?V%BRF& _eh) >_!A! Qx ^zi 6 eP|z Dx]VZ trͤ869fNOت-} ρ߶q.71BKV^7{!U5 0g_!'fT=I_zLcݜ&iI\GQ!G>#+߃ڡ2e֞xFS \\S @K#)e Rn8ȶ{"$- E"Sȩ뛘h ֫0PZ9IB3MZOcP=$obAU!EJ77\޽~XMNOC ~Yhڗjy$a܈"DUxr"0LElu^;|z5Bqtk6H;J&kSPKwԯŘ '/r82"ηXaX ng,?Gߗus%=ojM.RtY23d4\Q+2XjNWGEa3kDdz/濡ަ<~)UA=ËCɿxD & H)Kr$yfk7Kk=pJaDH,a$ Fae׶% u^و[ Nܲ}BRGU;x}y zɲ@^Mq3sD3K#kŽӳ /u$ GT]ӧ1]pNfWkBOgx.G4"{5wqg8:, tB#Dc`\);WOe24Rrwum286xinBr*"/z1M-9|q*jS\_GVbN-3uE繮]|;Xs&Ӟ>p3qeIν~ӹߴ"v,QS (\UGU>:F8 &HvyVúLwÐ]m?OGkfzλ%/J4N0b$5٬ÌQdYL`sgְ3nAr4|ޓ1WRC8BWTUv^bvtk|VS=S6p zVC"Ko\k/ߜQ~g[Q,bYxֵxncńQŧX&S;r!r[Z[8q;&EctO~F.U s<옎RRT!`J;`n (lZ\0HzT*%J Q9pt]y=ۓ]AV|Sxebf#kpQXM>2j7vH[(M߇0J!mD}1%8L79B"8h瑨8-ޫI_ MoуJh T'T9S)L#*:UnYޱmwO3%Ӝ( dTbY `i5"O 〄͇4"h$5q{s:svCDb'n3Zi6(ϥ^8u8-,OW8zqeO/% m0kǷᅨ6/C#X1% Ltx5hu6/s:w%Ϯ>~;GF<ދHn9P|JId-4_..,ӘR<Ŵ%^Xz1/s:]*FAdLUTW T3SYrcV>ٗ:7 Y$q4pvafA`K :mW}ŝh٠}$ڣnzm'\1ʨC[q5V^l3MWI:=z4rޫ7K߆9f1}̈́˽1{Sr/ M/t} >|"|/aΠe{ /'~l3;y'gJsy-{Y5ޅZݝ ҏ $`D0Jz0WZDA5.讀'$.eZl}L^8) NaZg"4D:!!{>S|fW y5!&Z ϐ}nf}p:fN{Y 3LBsӾFW 1*є}UQ$QPTC8B\<1@n!׾m2_h׌ y+>^ֳJvd?Lvc1QwxKL5eŖv(ssG;^w͘kyG$ 094EK8ׅy^RÁs9Jo"p/2x+1#=x5~'`F~J`Q]auRwwHV~k/dҫ &lp(f6jpL"&år2^Q(:*V-Cǀ }^XXJPF|0XG*LAvH֏gk {g%;-l %H %` 0kq`yQ>eY7q(M2&ͮ}@3;pt-?Gqdʁ]gl*kYmZRwcog"h煐R*b^vfPs2 Y-`Nj%(Na{^:fِ5CH_vA@T)KLOTc1^t&z-rлhuS]s:C΅C/R`j0`=х6NX D%C\p٩68>A$78< b-ȱsH24l+%C}a'c9}"ƪH6 nJC뙋]U^-T*Ӆ6b8z(eʞ?sW\kYsڐ?֯/K@0'dz: Hm2Cl"d)W92GLt4GjdDfY(Tg(VM=i,dbiąO<%n z *KY C *Qfk",oل4ԕ+oUuZm|`S~j"*:Z b"\'д^V9A-t|gIJsr8(b"< M ]LO C]_r.~F s򬬮wlkx8#WS@Z1 &8Dʪ"KI⹎态om&M(lոSa`ɷm;!Rb9`8Dwy}zX%5Ιƅ7b"io3⎤2-FK~x!/OyscLJ@sG$-O'4nd!yz |i*=ҞQ;2k:"Eue([7VP9#Н*Mna0_ Ԣk!+ڧHT/͜Fʼq"/~jǓ e!@UaH羽 $dYc2$w}m@ņae(z]6 _;+/Hィ :,fB*˓#n~(#PH/mR{]L΄SmV|zzS(@piW5jAnߗ4O=ʀ9G.e'~H NddWgjw7ښrUAz+5͜'? =K0e;(#;o\4&JͱM=tW~LmFvj.yݜ\IibJK lu`rs#].>&ϗ\eV?=y~=sdYf!iyӈT(bm#NQj[OxJF>uG~Se*slOhAħO\nEeÌec0`G V"I1Bք'ZX^~{zg#7"1'5ϸ ^oˇ6Y {'N9 5MwO[VЌ+c<V'Aގ8J w/- "۫gU\"0T>p/5~A(+Di8^^jkeן˔_,F; <鱣Ͽxk?N`碈݀sꠞ2a|v#1OL !_h8 / t֬!Y~:To ]7GD9m~~3pl*L Ju+G^a!f8ILBt[JRH6Cc`;D% lET@v>7]gS*oh=$0LDF! DxUb3OȺa)gÂ0%Jb>ZDcY0?A+aßmmŇO0PpVin7Sa'^7jhFnɥTU@ W6lHtZ6Ҹm:q]_-.bzOIWJ_r+\8ǪH{$M'еpioOTaYfgu8CUbΞV;#fEH鄐.D_W\.u]xB^^"f-ǁG/iX[u-檌UjcJ|Jʼn[0PO0G5Tx{ImRnzK7[Q]tY}Ry{R (82n$ch,b̄($vÖKdCtE~V:4%qIMX{f8V;eb `9pĤC *L( >L-D@id"{HW%!P@J<GX KPPRH>U` uX=)aXh+CU*djd7il/^g9OT_dxkR]|@"p kx?}x~1ȖS\, ay4$h`?d )_)D;  (¶#605i!O$1DRzNA#BҋQ A*hH=(X~yi $ȸמ@o{'!!@ $))5j_K 7Vow0'~]q6dOFTvtw$\b> ױ0)uQo:ηFPa߯[1꿧#9Vpt(o\t_R4:Ur |#)]V=} ? :5:K# 5cΩ^ޏdjq6O9?=J?ij?6BCHB"9\T~ea,a~2nb!@u?g( V@m/6vlK @oDvl &FA6@fA Ф ?^NCǨ{!CƟH y<Dw~cfZ kݝǟ_6g?`gǯe>~k<'o8✱.v]p^QB5ya[}~3K1MRs;;]p변k#snQ/7 6|w wl13%s1[/m5NO4*ømU/D(p SnwszF6)'extwS]0CC>/ G1 ['og∖y>H/g#*.k~hh"BUc0 iw?nx9O~6pD!#%: l2zsxy6a0JS.~/%E }#0\}}!a.AB{z*, 1s;,_o7ܻx{#"?BZ5oͷ~EW֭Zzu?E#ڪ?gnlePY c)864wI7([`3w˓,E{"Y_wL?W]ßxwl]ُ=tQO`sg==R9D]sߺ tQbWkIxFI`Vz^=Vp6Qy Ur|pKhtN#~wvN(;Pw9_ ԽR߮gϐy6nilOtG[jE{.+-#цnqsd,s;SPv=]ZIbul^R?-CV|TTb?"JjKY{ ;i;c:^z 9wQ[~#=RA , "NOuV3[ITYFeq+?sÏ}%.."$u.z(|E)cHDhm"TR#J)_5ÄZcf'1Ֆ^rt 3F4p] D_Vwt]elC7y\`xn[Nfb}q.|YkO+_}^zM sJyb~np1R.wir) =4zVs]n\yc2vc =>MXb#0#t3ϴƔCɱz-߬4Me@!4&%{UWCe f3¯USX4#_7]bZ&AK7Oon0|i&&/hdU_%1pFIR!Egˇ^Jv#yF]x|#e06EbtP %Vz81A\>(a M&d:b$x_dsl4㓓'ϕA/]ی]0P^3&Q_zY'D (^[-O\ȏC9C'.XlX9%p-'T)pbz^[1+uYI}$|{]C~y9:$Ihskߖ7a玿cHKd+fK^gp󒢔o}Dի++yp*=J6?h?\5MS#n>$Nl7#1ø4J Hg ia9R$#/t}'KO K)kO '3IQf{<ۨ2ΟjWt @C.pB|W|܏6x.ORS˗&Y}0n~\rrͻʡntNm=':^?D =CMe싆OZkxx1ՄŽ_J!>2M(#Y͝`grk@ Jâ0}+_=g &φڞޜL#W_Y)-X *]~f M;j0HZ>>Q:xMIi 'XGgpU#2?űٮ؆#d@& uvN+VyjBlXb<`:x`o7td/9 I{oː;*"O^d5 ౻w_$0ܒ%h()bC:ρs"GNbmqE9Y @! loFgR9pĚ,sF&"1p~eH|kca طZhHΒD6xMJ$+) +l&apm""""! oA t#S-T>T/qp" ~=dz07D?1 Aq(cj _tei~Y Hjh5W/|0@8)q򪢪 ގKyQTX>uВ }= cUsJA.8R3 !L^;vu\v5thBC1pؑ'C4L h4zٸZ fhm4jpv3L>jo@#AL7:f^+Kq{bI8eks\dՠ@@ИG[yߓz ӻ l1,3R"P5b!^&P&<ܟ~b@V:UbAx) !g6_+%a 7N(FE*(yqe0-77c \rA/"=|WgrHB],4ශDFf$4LIIÙQ',* &uEWGYj +6ھ/2j$b j) TfT2d59LF33v)ÿhk; aBKU`14)S"Aj82'zTF&:sʜ VPUf7p$9Gk/ Gw|؃'v*\7^Dj#p(1`7i1BZ3gU vVђ%C7knfBT=x6ZbpgYz '|_-s*)%iKm>T8U/0XSսM{3 ~Gsp.~qw!^V;}(N;x~N|_VP߷T5_qӟoHFy(R:['K|Sl~ѼY.-6Kh*UT`Zkʊ@wm+|<]pq 93_[fѵoHY UڣH6nl!ȐlJ=f=9 8յ<}*% v u$;~f`Cf;d $QPXq`J:SVZfEEmsUW1\ M>׿餓 bIP8tr.quzLg;X& =%>չےשmDEP kx9Czn9WY 9Q%`+> ,ǍA5 „Iyǐɹ/xeͣygrg]t;[;\0(' UHG&R!5Ak*2jۭ`kIMM%w5Ǘm^%#Џ*!U Vs?Ks41mQX'ZL՘Zb3c.wۼW+v>r$XQ].Z.}yd -UR)5")қҝ&f4K]8\b٠'%Et{nQnWJƝ״}&W3youl _u݌&L#vz(b(I|W͸Xc 31ZsgYW6F9o5W[pmWq>*sD]Y! / JF J0Տd!ykZs[Yq{ىXLM&.A+|_\eQoʩ?}dF\U!ޚey0x%tyE7wy# o{yHecZ0 +(nmlT(p#5z굽QYI$fX7ʉ-۷@?oyh~QX}nPw cC[拸YGz+3X׹^pZUsDQѫś6BX{θ9t2w 'رQCj=T,'Լg߼z>wM-rDUұHɽ3TH"2EDX'Q=55x*lzru0hߠsxauX>:xkAW3,V,)9ˠVefvg5~\Z<}lto; 8j29h`D8:D}lO})xXfÁO.ɾ,Yᵠ3A-9S7 Pz=~<@K,r[Eݯ}7cpG0l܎OW6u?`.G!2ѓ?tCfuk![k-yd3w^͌0uHS'l7 [+|5ĚZDJyY& YݘdI`,WABqpuy`#a|`e`fvN7W g=հAVΎ:xV7GK#"PG@AhZ|sONZ(xrn>^zyQP:AoKbg:Ҏ豻45gy?xxbsnһ$MABӢ |W9xӦu˰2S5"!_8q(}Tp,P87g?M ׉ړOƨ M1,΂A +C҆C\d$y= LѭUPУݿ}Na.5W֣4t[^>0;yj=*%ZO\9_@O?/X+=e ;~?]Imom݄=FPv P$9]]%<$g!e\m`X l cJ a (!QhD"omnufv=ʎيv;ۈ\&@`J1O_c&O o~D^fQH^ʎ2_}k|f;P|[q̕ =9~/F v ;LxNSuEɰhCbɤ L!e3>h0i<CQ xl M\9Oe ^O~x^ugT\Ռ#,nd|a5{am#]LxɡWX&RIi\9+]twjh>^uzߟԓU .1oRb>/%Cܻ]q#>B2:5Gr2_OOj1}3X"m;NjYЭҿM6+wɀw7?}<)i3喻FCYcl C}>%p[Ke贄=ט곋$L.E-3[@r(@#=~sx++qsڰXqM52#e[>V*Yb25CګŽ='6@$ R"r DNU ut!Zt0Q^lI.p'#ۤ'tXw/liۻt~Ƣ;4iM}.CCLP By$!>I؈/D8< |ُ܎̏>4  ҦjC[i4$p:?g*r~6scPڑ!a1d1ٶ!ؼFlG(wͰ̴OysQjqm0ZZVw> Sh J&a 3[ 2 9 #̉gWpÚ:w3``Uap厁 Y4BE&F 5Qi{*1W߈bڍd.P/pfFtɼ8 h4cF p~fpKȦ "b ! O!(m+Xl%|8_)8csc #hk'y}0Փ(xfYE#Ȃf x:ճV}XsbQ -ќhv/]yh<1PC|rS=}YO(-o[\enNn}YH2B!V\ՇJ'ߛnY+vO!UͷGF~.kԶx K'qqAQHQN(4n u)A Xuw5B!5ɃhH5QԮC|&T?t{=1 ilE0,/)jyG(|K{U,>ҜÒdϮ,]IP8 T2u'boXQ"6|:~zHH$ďcjU$[$I$G!&SNi `~A~ǣw{v~Iψw_`E*BoAf?Gc)OxG>v~٠YI}|Y*'Q`F;|uKhA«g䱹z؃:]ъA@;GO淫˘ ׿XY.#Ӡ!A\ǽ,'$ev~!=!lntW{;ez% $C!+ß$Ci>] uXXhFGhj)]g1:1Dwv& hmy~c65JHE$Y#z1k̃~ C,EW?]yCLWXd;P ux߃ƤV3}b`,9MzN΢~-sYȡw=s6mw6}ˬ@=m 4q`|{3@JAWD[bYK|mmmmQarJp_)̒H q1k bb6Ph6?8z@$̖W:ft멵c*I`ej \u+V(7y^qbP>F/'=G^z`QvΎR3KPBLui"ănӨ1=aNyW)5b@icYa[]\bC_" >]'x;L?g  *.ID+RFʏ?T3pTkK6mcy ێi7YpiL{9e/;sBǏD(ϗ'*İ1͓ i - H "T-H3` Q"_E׌^$A+Ѝ߷:AIi k$T zR`yB)B{qؽ4m>kp At܍Zh/f+mEwj"mmꪪ %4qBP)Q+ν/gfl PD0n@Xr+L:^HqoES݇.xM J6kFMX.WPwK a )G]ed2ـ@":Ѻb:#H%)"r6 3B'" jd" %[).mQ3e4M6   ]B$$i -suk{mSU 1*SFKiZ3p 3RAu:]y^;vs[[*Y .0P EIY05UHOou4o_q߯'AF$$h fi(Xu\qKi+ $՚<< %)nF%m^h[}1j6 śnΟM普봦qKF5YFuklfn:[cE4x4!<6^LvWe A+%8eTumAa @h t 'KBp撰D1 Nm}\S|C[v@# >{^}j '(uZ-VM<Y]Yu<wk~08`B90Z+u.6%d":K1i&1~z hh7ȱ-ND4P'1ɼYvnG xW,8@ s]t<0w>bz;y$ 5'f=(F)#;^a yE-â҉}a6C[1n#K4Ŭ ptBb!H%QXUUUUUUUUUJ08| [gtJCKh ɣ Ŏ% MQD/~ mmh:f褓o( ؃'P(-l-{}xi9ЏϓO]쥑=96k/N1 6ՔzRڰ\@YW[c1Q$f}:吪- JB TԜP> .@]vph#x 'Q Kō`+dȃS~2 .Vx-w,sQBbX,# Ρm(H;c V9ifo*`tvE['+aʔh"`&ūB(J10L|{w\)δ3yHB]T@6(i[o`k^fq.9fld{KX+i ui4g0L~R$]nk$G` ߺFeNzç䢆ڸ?Z>baXE`6>Daޓ~ᔉ m'~rPW?P?V~Z]oW^7j{p@B† ߎveBE 7Z4\(MmmmmUUUUUUUUUUUUUUUUUUUT-TQTUEEUQUQUUUUUUUUQUUUEUUUPQEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU̪m"m l:S@. >9y G$#A"yGG;a"`CXڄb#@\ nLO_ E$(ETf Sbꤪ+=BXh}0^ $kXf~0&=ΟSIVv|p6DS4&I̿vP_E > A(A>fɥ 8&`D l@1 P9[U24> `-/ (*Ds-SU5)4E6`AgO.1>|h2`~NTDz8"[oC{`m3+?ܖ7-[&Nn˳3m;e37Wc='OC M;oVG33cdQ){kGl2?\ng}]Rwts񷇕_0W/0ϷU~ !_y9tf޽RJÅ.0(j@D ?n:Xa#Z4ً[El|NE1o#= Q sׂT{$k`fubVGM7xɞHЩ?d kNjb+HwEa hI>AqbtG$gnsE<$>@[?c,V}3Bp6z`61Ny3]BAHIenX_&hCS~~/n s@L KN ubyߍG'v@3|GGtNȾxf{@ZG 2̾~/v>9ۥO8*vBI 7 b?ny{Oq H H-TE͈pB{*E#/&bn(qQ0~8-aaa1/Hs_wؤޞUlJL ybCj*PT՜ @Eec܈ UrNtv[xUknqs6,L*5>[IZ&{R*tKI ki\]Z0t8O$_fc{#}*g\segr AbʁJJ6J7ǼF-(̣s%t U Ej5`Z -GK;y[M>_osg~}POPTMw,n3?"N0W]h1 qſ.7vhh,3Ame$:N#)y@YW1o8o -:zMQD')*Ơ$4_2+14b* D¤EQTS{V maA4Ƅ(5+"'\g7]R_T o]>[n\䨀QqA"*7/"W萓VZ_Hu?Ӎ'9mkY(sIRe[1byz  ׷zʋtԱDY?Ź֯Zi/'š[D58/$rXC41Sc#HPJA- \kYX&2EqfLbbn0# G}  GE #u'dǭuˁrFDSЦs$ %ccIϸVw>DjVC& bד ŵ`EDGʈWBn-<OZs _^[|tXcm-g-3Zg)S@nO(A62~S+ŏ '" YvY !!R͖0e# }?A6Zs ۖ[YUk9LAmrBl6@`pEbĜ ]k\4Ska tz?f7ff$? NE b^Y{~0}.vU9V#XNd${ZL?z'~}$lwdW)ess&(Ps6J6P}7%6: Ju2  |_5mB$1BQ}tB 6th0a ow;F]q)]s