ࡱ> *<=r~ } } `!*Z閃hLix yxX}lGݻ;wiI㫯(i#ı6)nm//|g\V2D(@ 4PH@RϨH-J2U{ƞnEvfg߼y3P**(SGUu[sCMQ;KZKz?qEΥ㧔znX;'i4F{r&~qOߢ^rT_KuLMCmB-@-H5Ԝa"A ^w>__͹W&~V:r5O홋|Gsuȴ{ein3c\=gOG6_l:YgXǟV^թVK/ҥ;̮2l;t{ JU~抯>/N@}C裶Fk: j"JUeTнS_;Zv^ݰ># 9.220A_hX$uΊsfb?gQRd/Ow2ی;mDG=)fXֹPKK=k{VlW7;9;.Qd~_OoF,Vo~P#f$[B,G; l; `c',*25Nl3;-JHj'nV1@' MP>Q 8r2.Ay ]E[_4|`Eɻ%ݒ嬴?%^LM^ۏ0cY[d֦[A%VE5T8Ch-NYEl5xiGg_X'4A-7l˘rT47_[60S !^w~XȳaZ˻بN0głEBe>ꄕBXnΖ;a"Hmfm}=4y^|Cʷl^1k;t+'2e"#ݝkkqyKcQzHw#+E"#ayG4q#&PG9#zvt; :5qA\AC>בIIxʸIvȈ[K}58'~%pCE } rKG}7u#=%aо!KHDAlF`y~7C+HHn2`!3Lp %Bla] \N H:Zx͜PUם\} o "lkmHVh5;}qh;:B"ꚸ݀!`d#˸/Ѝh_JVVu{~h&1(+|>/_pؐ1 Ky" @Uߥ#M7Rv +'&S"mw1t,`|,kRI( ܦ[PȧY~w6w;Ǜ/bx8_cpto^Pv#=7o;9x Srq_?[wl"i'Vll{5~J2B8C~i'@d),#2N,0 °ʀF+ ^aU[ f-_!W ;ހ/w,ܯgd W:?v|ػ>Y+.pc.S{ݝ3J]z߿VYm,?&YA]PZkJ{ԅPx/_^'i|~CXr+Gݍzg_P\zkd0ݷ~~6:kR?܊q y wJ&krUƎk6# LZBXg}>TC OLoj>7s:5*opOqZsZ=)kGk4[ xVnܲq,%18/YQ g8' ȇK" RMk458nvw[ǻ5j}5*?5[3B5kLt5S\3xŵ2:k·>㝴6.6^qXvm4O'㼵QLOFtTk&[3^3 8H@ mPnawV >= m0_adA> $q7^4}h9|;if4>k?n%̗5suVNާXOcyF\+zbiVkbuep< w9rsRF#rsX6;d}HFr}Dل]rvF얍1Walι&{,x7뉁Oqm<;Nƛқk ;AM_3_r曙oe^O0!L_|93_J3e>|~cGbUo?+|^]ؼη`2?oπ:O;p~Jo| ~˼sG,m?7!ӿ_c{o20%3̟ pogF_`g~2m6N6 ߀c>6k}8x/db˙W2(1'pcOd>|70檓f'd]l4;:iv5lB̗1?\泥|Tc#aKdqsG1?R |! ~of~5K|󓙿?h{og~#_|5S̏`m3e~/lf'WRXG N)͎l+R曘d-d~*NSld=k߃WNtg=΃*^ c-cK;0zW\.u;~..vV2ѥ>AWm{`ػػRweUhhۑu}z]qa0{_`^. )Og7Yp}[頋=V/'ȼh~2}1d~+_|q_f~c1'2azofs~%̎ azv 3 3maul1?23_(̎6Z-W-Tтh:h:h:h:h:h:h:h:h:huXGKe-G >0;S!+R曘fmx0D Jٹs}NEOa~:/gV滘eW=B/f/`~%뙏2c>|wL?1D#W1_|lzi0{o}``׵^m`u̯`̗1_ fff^_>=*7긙Qa0{TӘ/eQW=L73%b[̫}A0FW1j20cglӿ^;\ 0{T=ʿ^Uo*3~nN甲yK_f;U`}`UU'Ub/r*S1S=WsU {տQDHu Bd:\W;~~B&R/ u xʹ-}Fx23v۸> @ ߚSuO#>0&2.-<Ҏ?Z8 UͯYX]:;C0.6}?)|gv?9n;w)*d/Dz^'WhRngkDZ"yt?~ZlZǯfQU:cVbx,SǷX'(N$|=3Gln~$SHގG2WH}( Ĝf9A͊M!6X-Ě"KĆ4 iVLLb $XXXXeb8M$!VEXfof׭7<׌;ZkuyvQX VFl<\bCh4 =IƼNޓ[5;$KIb{X1!~b;F{ľMĞ / & jv8Y7Z5{3'6ؽ҉wf&1}?1gk7pGR0CףLoJUMl)e4jdrGMw~hV*wc֙d[xnnͩ}5Ջ%=>#^޻-o-gԹG] s?&ud)Ħ%X3Vb]z vԹʉ$JbEňʼn%]&s?&uDbbU5ӹG:)kI( rG+:b3O,X6螇ȷ>:/ \ BY}/{4b "$v>ّfuLl5%f 6}&f{?Y_Pb6[El1jbS=Ll,Įؚ5{^bZ='ī>[:S((,3lH%*&X54j:7K?:wJd}r>6[}t^…z?s跲'>[iąN8J1q=.M!6X-Ě"KtDžN(&VNl&V[O,J,F,N,A21q=.&"VON_ :{(Mw mB':W#6X i4Zd:(S)S(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(ف(فZwQRg #NF%;Ėk"#b[h]d:.t:[C¶oDewh>{>['@OQbONBl:Zbˉ5k%E bON+'6b+'%#' vNODbbU5 ~ttN|U+{?t2#Xʈhx >ts/ :"M#VJ(bAb:à< uLl5%f 6}&f a!Nl#U&6AL'xt]b{k5tN| ^:&RUYĖ[Ml3b4@g{,? >7呩a?_{p(]`!*uR7X(cH ~ B0j8x luvvvgrrㄘ%1vAA8|:79Mr>[æNĊ,T@*ieԢR! `hE6*E E(}ٛ;yvgvwoޛ{ >t-!!KK֮ۚQ(ϰT_! XOAK -@r2xi->l0hzֹ|>!ۯ &#[']$LzHD.29}=- gyi͵),7b¥PVXܹs)ߢkeǜԒK88orq~O4I/5I;Hޒ{*Yjim뺮$&8E}/eq,}C[Y?Y\6O^'sZ@P(S?<τC__ow_a^IQ[F(L6UG^ecgPV2 g}@Av s -~\Z >޾Lo.Yqf.o>/=+d>wmxK+XK-Bu \zI϶1C;cjxn d#V_Nv\O8c \KʫYK5AYE>Jym(\6w `mc0S `LβN-%`g޼7!]~K{3sL W{S(?&̵gj@?J˺Xi{\peY%[Yusc%>W&-Ko􏪕Pu)^]f$ޯ o+ X"c&?^ɹ=5:=GsÖ́Nh]k8Fʬ9!pf2^~~><PNqo SU({ӞM/S16eLVXDankwjjYr9Ԑ~=' >y/{׋U^4)Zs-ڀR?kp< T+ 0ehP^ ua*Z^ |b+O' zAf!97IxnhWӏX-\_M߄Ձ|m1L-m{ok85Etf^@{A ;|G:$cT5NG[JmQ0lupkP'F_:nT_g}L2Oroퟪ_nj=C;Ni= p_MضW=/c]NqiZ< Y3^g~:XrJRvQuLAɮ"e[I,ۊ{lN~ƬpkiW0Ngϟ2)5z lb %t2`%?[bP~joE2-\\0Ɩt8@\GR.OP.bpւ3ѻa\.K&ԏhc G4cWV嶃vĺ)y/.zs?uxZi QQo:YRoZ.p ֈқG1gJ "ݸL['ɝp[ZaһTj.a[>(hƭk7_O{ZvI}g+ O*5 ښ$SURަZɯ*dۘo)Dk -!Fs2li"o|,L8O3>;]!eo'<(lY/yb*g͆*<Vs"juW$-[ 8W(]{ٞ}_U*A HueIi;] rY)kyJYwIYwIYKP0[HY̑6IIk IgmM7Ƀ4;bUjev 5@^Lz:9J{wf&.OvhْD7'(o⸎m G⻻:z8e5~חs3}wlM=qAxb=9]$"wQ+5c]/fAXm:# lh] vv0E[1n:íY]X{[xX=""m7]Jew-֞^S&D:xW8Y{(.^pEǓ.Lb,^hYkwwȒ/âi-:{;QA~}?Wx.TZ\8H1Fa5w Y-l~K6݌rѶJ(3[I%=@lwX 'MÀƐ?a HN_[M]@8!s07`@v ܾ/+tҀw#@DҕVGde;Q4O"rH If>&^d1K#@nG맮yRݒ=!rS7zRݒ=!rS7zRݒ=!rS7zRݒ=!rS7zRݒ=!rS7zɒXk&}bR ֳg[w&inWj@Ԟ]9nTrv|ۥ}nk.n*f0 GZ9jV{Yʨ 53\aWSA&뇃&KS mBl8fCSșv3"'Z4eg]Dِd@iV"WL9dJrl #׷(f3BN9˔;,hì-g4#r-M!$Y] -i7%5Slh@N1)d @djh@va,u&)o@XH3e)-`@ڶOEvKBWAoZd1# ҝŐs@m_xrvŚQ q+l3٤)B$tmHu ȶ%*R!umŐ75;d;R ,0j+Od=p07x ]c^tW5# )eG[Fzϡ7 [>s䀄tԽfi*/dY 4)2Y.($0'0wu dA5bZ/u1Y#aICC=8B:^?iK1:G##0}WoZNIQ CRV&VB)`%-8]Q4ˤH<@&6}I b Hgϛ|ER?5Y| Зk\ $2@Q:CN5K1\\eͷ6\p٠:pRș5qSC!v{H(lxkR8`H+aޢnzkM/_23ȡWoL.YҪk4O2G ,mm h_-/J=cJuzHPr$-tp{m*)$j&GLi`)V  Zr T[DWcdZKx)B쮐ٹ%~mODc ;>^y,<>./Z:JV*dPf^9?9@afS⨗v$-uVm/ ),DW 1$)}#~nځEoY@bp2V ~? ^k5W $ńYx4Ч<~_GsSm 쟐*+4 Ǎj@΀\a;.ZQMB/)L!WrUM!mj 9n;S3oUSqBr+$V`K47p~7 uoW5 qUVӀYP ! xJH !RβRǼCD.HD9粫s{GRGbs˅Ao2qO\G γ(Hb)\$O,H#|_d @3KʫAk!b,H£ŗXN#7HʣHi# /öoeρy~r 淽sV`MZ[HYn{_E@؜GWjtD@,IÿL&!Od Ӥė@ʱTl  8C C ʠPj| LV+cX&i(d=>R6@f3"_)cKpD!X1E8n o1$w: XO0eo )*@jq_p] 3đR_&+v^܂H\5j v/q6]{kjM]#x:\U=מ#*y %#YD);}"ʀ#29>WN1oawDoTR1|¨wy=Nhr]٬h@TԁUL`u6VP6d[cKq r>I$m_2'i)d7lƀA%DHJ?G Y',HNȋ7@wHPy.*xb5WH3 `uyK}Al ḤR o }e "\{$bU!s FTdЀ$@n =w᭠/)yo@x$;~1Y ;9t/RaW,d4WlvPPN80u_|Hɋ]f Ȱ* $݋ԷTfIxD *КۅDb u껮LﳏYWʢ;LY@-gc&4*g8UEsH@Wu2㵓. H,yR .j΁4 ߋVTɰ24 #QE6#WLV&֢D-"S#ťK{n(]>b:q}Dï uF"d.5N[_ZT d0(+q %GE*&U;R7~ⶕ}WM^ 5!@4uh:T4?&H~mE H騏$Y@(22{;|D _ЖbgF !Eް0߽SI2f@T{j6!;dI"AE4{0: iw5ꅕ ڊ̀tIQXS8jLSHHOkmCV%=b Ƀ2MH/ _iԇ 0 '6}p$nZ_eD j\`-;O^sRH\5נ(Ik$H٢1({lN\d+㔍@2Þ m:IhVwd A J 8_@s=%9Dy1)2 㘼X3rr5$U@29M|_7g Ѫ2nbGΈ,C ݝq\:kƠHf$ !@qG[' o`wLBfa#  F2 Pmg쌿 Η! qe  DglPHOJ0.6)l wN<iq6p @5Íg~Tliad>6#wOneB I(?na(zΈjd "߁;yAB{$7@z_ aPu,Aj\ ~?;U@_ 5ĢYήQ@Nj =/  _{jN@hӷ A2 1T3y~=Hyqy䚀.i^w9RDL =I Scgzh;kn*&k8PH6C rQH T@ _faU uy[E n~B$ZWab W80$ݣZIj8}r!"~A!}?qMJN!a dL^ qLmR +`FcrHVbY9@FceA߀ɝe_  6$`@M=Ȍe/^fuHu~5̂MjND7Oڮ(w@~Hq3.c\%Ҹ`ȫBbOQ~G%S>B2$8?xZN7jjyH ײCuW,Va@??'Aҏ"u _I74}O?>bM*mDaJ_~?*duD u[F` IykŅ5ZVX]}P1tT!_bUԿQHZ֙W$1sLQE ['jBs?Dx݇`ϒ@aTW j6SgލH|.N8 /KAm f&3 ^c2 vC"DoӅ LU=mt%} D=Kfe"t4OE G ߭Bo?C/ #"e(5>|*zOx:>sƬ.AO+q<݈BT1@&b7.qvE¿"dhbƝ*&$"4d֔ X3QnlDbJ4 ;*4GWϾIfzw$j ;r> BZTdl7YHM1$PS>q}2Z|p>c$z=H8c} Y 2%D& 1We߈ xeK$6 zUZ)<],ǘ%0Em@rHydݖ̆v][-K֘Ή3nhު\Ӕ6 [H V /wIqLp7. yyl&Ҡ2M;z2eK:=lw~?d'H$_Eǃ"$0Hz:QV xE%q8&@w8ή9g043er'h HUr}&;[&șKDyg3; ʐe2ohҺMQjf{ ,OR`5rw boñW[,+K#@QB2};)G@q䧹~ I.+G@DΊJm v#6p8wã s"?= HA<m*onx$1t QHh+q DQ>^,ݍ&O򗖛Q'+5iI;uS-Ž@J[ dr)ed]Ȯ,,J!kw"{- H;ҀTAp % mweZz>i|; X%L!u)fȲĘ]Me5`VdR+m!k[\ HHl&˻ߕK 0 $JB*zM-<v.l%@yvk JQH~rӫ5E_왑+I€wl͛v|(X!iF)$MΜy\oI=wľ_ZܷX I#zQmX{JʤXr d؂)$MM6M)HYO-T wH'm((%uRWm H@m[ mJ 2#r܊5 q3 Wnǻiaj4) ۙBη)MM!mg vj 9nSSqۙB)|Brv+lg 9ߪ>0qOZSȉ 4OHO = :]5X >'J'P,4rnw$.jGx8 HCUoᆖ;;d7LoWs$0Tɷo 56WA.s9ėFT^ Yhynn $<ŗYhA3L>&uuq3H < |xG¿~Ez d`Y 9=gx r}Lmk4 Ӊ %fλ@CAs"FQ5n&C dJk@ׁˣU B#BӐ;~@rU@U Q%pޓrB3! 8=( MۛymghN˾$b p:UYx3ϲSvZĥdA7_2Ja:}6/þoqw~>3{z2 1SĬp BҞ;lBt (\L}qw#:SyQTBK;)$  3uEgܲxS]~zFO"kXhd)d' YÀw€@ Sbb]nmUh9b5WGiO@qHk6 5>2:ȝ;PMa@J5 Ǎi@ۮXӀ79n;rDPa 9n;S3oUSqBrL![ϦnQȕ7 rdꑫBN;toL!;M7 ;dْ,`@rQ&%+XŢdoCVr %"4~|#n*Ba'rNǷb ُodbAfI pDNjfL!M5V1  Dbu #X#Vkc@6D5bL!g1`@βdvjXwHݓ}uv̍kj˞rZ֐C"}F-Ȁ4\9jDh Vbȉ 25krY<;܆Ui 5i ٶaUe#a@ۮXӀ|`TJ-XU!'2`@N4oMRO5 Ԁ|b=Ҭ74nRk 'ֳ-`@N75Y0 |bt -& ~Yp6 \O-3 [4bpbGe 1@2WKkVd i]~ŞS+y3 DR dl3_諥>A+Ss6e=e?R$и)d9B^@рl1`{V MC #-mZd 8uA!_ae. - P ^Of5^3 fe @kwnŲ䐕J>0fvN;35 Xsi@[ԀbyZo1Sre:g9kL -A35 Xsi@[Ԁb FI:IENDB``!J~,*W=#*xW]L\E>3]XVuEvAe%\`j#֦ԕ[vk0]ldkҤ!hH| 1hBb"I.bR#_|0%Ò&d=gf.]l93sf̙f2(о-pA 0o ^qpQ09@+DNˈJㆵ] bG6IaBUz/&Ҹ  Mp8C␁~QW?`w?ԄrZo'^S2GxeoI~ysbxFFCFɵ MΜ1hŤԾ0銼}^+x^ap,üvl#!:Tހ*.zdS q D<~&j[`neS=pjlNpNj[pR+$!؜aFa3Nj[pߧ3|`WAp_|=]D\Ac\hUxvm*JSpF6IH6$N[[p%tɵK)W)\jݕ\D\j64S+y48ǥ >8-69aIŖ#FƲcs34ywҢ3S׽Y4i%%\|HW7~ d|)R}d-GŬ sfƜsQX܅'_|zԽǸrhӟ\{ 3ݞ2131£XFLwH\m#8ﳔ =È*GqR "U+|B5Fst9BqbX6w㚱i-{ȗXc=l7~UEk J{_378Lm_SXD9w@oؔ~8?=8 uv{ӆoOGA<hQl|'wpF]/e;ieln3Dܩ؟z_}J>ޟ}2}#qUHfN֘XW+NqN o`oQco`!w K cqjq$ ,) 8ha'E xYklT׽kcx)ʋ nJY8 r P0(lᥦZ` &*hB*ARͯCaU%.)RR $QDICyݵ ^ܙ}sg̜saJOURBYFϵ;RoJ'SBXA^'AGJKo{#iq,$#A2O]J8~)'$-vNldta_rA[ޟY ǔ%@JUyRf]=w Q755  ϩ?ܠ-%(' {WK|8 ̏B}}}lQ0bR_g3K^Z/ٕ226,_/%?a Lv+J^GWULd_u,Wď~a]z #L !_M-'q7ߛZ,J=\fk[¡ډCG[vR%Ylnj$Cx=j^?wm=߆6*5 SlqYR =.`i)A'?`¼L0/ (d^yY@%8#mH= =eK z_=%9b\coqB[uqHa /-H1_Hܽ~+#|zLn3Ox oPb|fdmcw=A׳k;tzz6k!|!̶G׶3Uzyc, KXϰ ?8x[_/e-rZ"OZŏZi?f--~Y|ɃU'{xW!{O1x+.^_W'd$!?ɗrx!u lU@m1$yɘrX>qG^C jnSsY݅]YTz 9yA!OeYCx'!K|:LuEf֐Vû^$  AkT}R~*UUV[EHl9b["["[|',1"OZŏZi?f--~Y|clWyPbgl!UX5&dl%tlM+<&&EO'}@<τߤ3}}D{_+UKTlj>/bs]6Xv5)+I.WLGYzs'4P3қl1E(y5FtpowUQk v{>s`(ݗ{F@x#[1h6zE+Ҟ"`Ԑ}lEcvDX'8m^G6[QuE&{UgiLs'RotŌ`?띟l76"fq`0O 3d 쪚=;]+ 5y]| < ;ń7z`3&(~*=݇g61'yvm[ۖ0[__?Aꭄ\QJv` VC5K5>5Xi,4v`,5kl` V/46$4v`w h찣7 v`\\-?,p}{lś]梇=J3CLA3iړ(tΖ3"j9՜,`!/6=ؘS ~ wMlxV_hU?~I:tqXLκՙ{i- iWaB#n|cE0܃PUT|ݳ0Ð` w˷tˤՂ7r=sDmt%H(E#"A?kR5O DyIr`+0Q=lcނ>tGٵDS v>E"T׍>C=B \Ako#@Ōk^jrꄱRVb~`8a㔕v,gc=PZ>6{|+ƎпQbtf ?}>In^m_i[t]M8vϏW{<.5{K>1â R,SW2 nk羕$WDo+#Ffg|qح1r $W"[~|oxwZxxxՔ1cFP?ƿK"q H6+T8_ſHeڏ]!}WػjQ\Q7vuf#w.C+.vy?8vcRW{и1~&żSF}$Cbo&CX 66}˗ ZGE ѭ}s;qlxrϠSO>?y`c|F>v>xQ'ٹm[2M\˜\9 :!wJ9CA.csxiR,~9dshr `L zLv yiOTe-uD^ɤߖ3̶ ]K!|Jy=N{kl#DR71R9X;vFݯo?⬝ԎRN]Wt;^Hٷ{w ڟAPL P(X=eYŎnkE^^|421hVVt6{E,uޯC{x_W*l2]v->@}<%.-snq2_Ne'KTq0+dsӸ7zU{7duZVH׾_DP`!H90;tWLY$( -XxݙhVǟs7ɛ55 jX2-h?DĤ*mY %ekAh50hl2 B(_`g 5Y-9M2G {~9ͽ'8HC-swoxNh <0%'G.y@+ɇW6۰B\Wo"q생Ј}=f6Vs]>ZQ2S1t/W9#AW:0eVyaOZ%:}u*vYxbZ(W[m|"tB^nqUq>HZghyȢ%1k_K'p y5%WqbDZO\ &pu`l2yrd{}G4=_~@^ZI]cw̚؟f5A_~??Ӯ:e\#}l$B}הK5{Є==<_QZ6 v3Ϙϓ.DE\o84Dv q]2^Ƨd*MO1~G/e|FDU.w1^s0+.c¬-"ȕFQ$\E Q(JbX>ʐ]J\ s^t-c_w|̍aob8*/(aW K%*X+ U|Kh뱼 ۞    a6DK?~Ʒ@9TkgZW3qc7`$g{h72~"KL}Acv}9"ң=vjͤ7,wvt:Rt[W}r;ao9knײ{FyΑCeO.ϊ9fc~ڳK{{H@Z\ GZiIWV6BZ?iH&JJw 7CP|3ߌ6X%Ҟ!m&-FbJ5ҎBZ-iI˸Vص$ i%IVVLYƶbpGW*AX9Og1yv[Y0+nN|{SmXM': ZZ߅ڕPU6oMJt_ƞZS844F21oc5h2R^P0xEW`C2n2$\N D0&뼎N*-GMo"9z9ԊkʝBm5zհnGZڙ%Cn퐚D)1JdYX*Z N8\KsU!ؼ1 ,NAfKpPI?/yJܼgrqj"d瞙S:n\`hvKW݊"(?QN2F=+kO.y8"7?ko68]q:MsDu,=0x n #e~2|=GxҫNU~5 #bߕs=yo4+qL)$g܆xGӡvfFOJӆ"< b<2JI)bf8aHFtTîOָW_ΟKc6bwXY؜x@\h{Mu>N0O*:uH|ۖm;^[ֹ'k;!~kl }FeJ?9Ko)MqwRŭHvl# }S[ѵgK+yXJxO㚅mQ5-x>x\bu>)I}R2ynqbzdfX\z8鏥&tg Ap:Dg -YҔj &I1Tjq 7u!=:p23zei+`u 0~I22:#zAk yQD93ghPO9 }+= p~j gPl,̑('y=5U"~`c%,L, }?!+DWܹ#?BG5;jQ,[qۋdn<})p*hD ZH('W$dd??iʁf؟p5F9bYz5582覹[]Zsg11e>pQBaMNoyhko, ?1;}HWB..aXyH6̰ j;OO :h<0̈K2:rW}.2[[M,~R\,c'9fjPWsbӓq«ɎYRzdI1Uyi"lNl5swyƑl;[ N{ Wfk'gcQI^͹S=޼?]F8.nY fn%IX6=JTꐘ^h-c$zY*v:.l2j-a(̦Ix`Hvq](c|B=|'R8b## r+f~#A >7aSGB_*FRSLe7gikȭ>(J -orw}2;bF~azĎ᳏Ϛ+'-Wً(4k7VYoz肺7V u괾3dEm)-yIu=OneG:I.lF?+[I]w1L}AEcMKÑ@&MNAȃ#5Mln7-AV?>6{ x[Yfs(Iwכj^6O1n]/x.&)`MP2𥫻vNQcB$V#[coRs]s8%̄=X\nd,ǠV\xu ]C[.?-˯|dmNb;ȃWѴUiipl'n} bR[\q]ӱ?/$2lE tzU|>%B" ݍ赪K;mB-9:edVq{BƒTm9IwKsk!E.L('a7Z2 =J G^0%~kYo' TBʏHqڹR?k [,vę>ֿ(<:ݺy:1?ZAf[Da:]%}]\JH9iy?kٔ]ž O⎉_-`k~Ro{ YmE{l9g$J㭴{(9?VGd?'UZkht^",mK🈯QH/Xdo/'j7NEܸO468;1S*Gr8?!r?*I\{TR2e rtT2s@ůӡ#E] Q#ZmcjU*ӢH?|<CHp_q k*F4G_Q\sRl(`-R`&qO}'[9 ?+vC0~6H@p}E/.' N?QK\A@붺Uvqҳu#-WRKA}:'5 i~ȥ+78?-pRK[ơm1wՃ\c> Y.#I1S">iiDdOJc` ɢ"$'r4PAPpC8Aé҃kc'z-4,=B׼QT ccI…ll$@~>Tap;g~9Ќv8,)^3J6%72P:R]c9J(8fݞ=֜F~c"AZng9}8%}8*)r4ebLN=6i@VidzVӓ~UUd.=BjZDƃ#5 1Sڗ$L~#T2 SӓMW#iPPN8S2VaqM" IJ|;sM8 ms#?֐$;bdX0=Ll.O݊"P4#܊Nc }iF1ovsNXc׮?Uf}Qߡ (B,M LslK=}vpp,cܮ2$~QMt 欴l( MTBU2@G#'ڕcpO4Q@2x&(AM22e3sEݳ;rj3)$4QC#az ^6 )`c$ny>F/N:{񢊡 u3D`ur3E> #c<<=jWCEd%$U ?{ڊ(٠F.>4s JFIFC  !"$"$C" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ɥ^5uWV0=֕7UQ_K̏>E5qCn6zUj_+=譂P<ӽUӤo 5$ á`}&mQn,^6i-KK8R9LX~c%UW ֥RH9ڥcJOIkGͽQJ]VERRR~ 9r[{z_Ҳ&D)zXR9+4I,N .*+=* t.Vks{dl`E>4í,͝F Q6Qp(rXz9+vA][$ ǽf]1EM{Kqn1N9\~7YD4#8d:λ(sx^μُM Hn 30+\HWn cK.A$c)iov;ص?!\vҡo7al֝!Rp{iԹh*pqk-ֆLyp0ϰWV޹yb%)"XˑEpb 7/R229`HE-#92b&9RG`jbILE8r=j)2sO(,T|m!tSbDx&[b5x.'wh1GB) 'a鬪Px' U%mjaWo#+=̧nŘc$.#B*ӑW)[է"ѫE(z?=|B2ך3>(bI'Vmt$]% h W[ska  ABmФ0>p#O"bm$m&"8k_j$PϨLQLl_vw;)U6,[r?E܅ ]g{+~R3?BjHH222+&& ](¤H?tN%+4 &[}>ip$H`:3qکEK'gwoliA*d=M Tk:$|OmO[Oȸ jH]56~ RUcL' ,x8*EEѪ2x]i\Դm_EdiO^XW%%b4T^zg+eu^zn(̄<'nrxc?M;}*7̩#a z:)WCTqPr2i8#RqŠLWcH(cuydR?N1K+اk":L7asEcVfO,tAO=hVfGc,vq~d[8Ǟ82eg'Z:}PHʅKhg5elu}ezK #'B`<[?ņu-85;LCcƪ8 ҾYȓ4VW23+q]Āq+еmf`ѾtLv~NyuEw6ړn0}p69z41QH&<Yij?Z&Ӷ/inW~C>ŖdK;4HoLݧKXy~˖ ~d5؏2H^z&x渘X6%<e [N4дOc:@\ >*/Dߩg=2{9e2 2P4|''&HY[ʵP2q jssPs¨GcײXhxG2rt^x;Y+My_ox(uI4C^{WHKyn#:f]myrnT?Bk@BuT~FZ&Ĩn?%^_|5j:L㿎'_os~z^,ph_a֋ybAZ} #fD!x5ci,Xg8r88IUekN %`@BqWoFO ]d'ԯk}ks4X>QbtܨGa\e/4Mq/Rd3d5TsaMhxiIwy8Xu_bM͟[iR~eu$d5~%5W.BkZnK{O;^fUer:wK KAP#lYsxMTxRqJ%8h}zVOd>mƤ4;s5Ot16,}WyxoL0k,YmRT'U܌tbw{W2V.#-]Z) +(`pJY/^Z@!hBs=|s5ϖ_wcK"r:x-Mc[,ew`HwծW] ֳDI7+crߕ|xUc@u6RqQ@m7*x$ƬVE|)C|jkkJGx\Ѽ9sus:Ƣ3 7.̅opH'nEmVg]qԞ=>+uMSǗ>)[XLh@<|ÚrQ.N~gy?+Y)pU V9$!pMm/ZZZ4"FHw?ֹ謁e>x;M{>jwK>;a I%p<3o\W鷷Zصsq,8(*[;WM2LҬe+2;LNgR85nH4v΀T?][q+:HJ[[?V'RIjݕiCzMfj%D-um*Fch7'^>aϸ.haX1p*+>hחwS4kā4l :缀M{->OMw񖸸HSsv?ћ=h;3AKMٛkK }B9iP 1VYM90sO1x W6?*&qpmऑubwEl#xITr,~yG(@)3HK=z(B1>,稢c1}hv`9֊( 9d,ՃdsIzXIE$HRA9ǭWws! g'E!!RG;cw.;~tQ@ O,?7Oj(2!q.G+ɟڊ*:/'󢊳K IEP?٠FYOEfRiT.L:,Æ498bߝV,zߝ0-[cQqoƝf(ØFz>~rxdgҞ\1>Sd>fZiIZ &0MW6HfYH>;tG$~*ÞdcҔD8[X["94|nH6 kGP=?*y"Uy㱪$r€t9?Ǐ˜ҡ"aDߥ5(C:b3wjC}戹dZ]/ouK뵑7=,ܒ07`{xZ}:5`y7f6Z.yXE;_K?3hSLj;)54w;RGR~`~&KliI4J2v)fd-o0MZi&O5ewRSQBKE=b,&+7[)VSyqvGQYNhh_hU>$=q{"Gv \t{5Ư½^MN9Hͺ)0y`ִSIM^cR~0-J)_aΣ]o>#JH׬bW>~S Z?14} _j OXZe?־l py5?mo\ZMZ8G* |~O`ܫ@9#VL㝱i}<⫎ehB00?ʹR{;ru|Vj$.Eݓ?ʪ]py~]g ?gt]'KݬܽQ'?+Ѿ2vzk -|V;Gm}=A+;Vy5NyI kS<]5Cഉ?\O\y`>5]ĖOdyx#aDcͨxbT\s$V-ߖk/ėS$k,g(9VSEzς?pH5V/CT_*h<} TrG$Î᳎U_.Cmukx*(޽wDo"vlốvy7=>xbKZDO" #Y֢ӄe~p{ϦмOְr>ĭ6>o ȶ#:t0GO}I?kimsȸϺ}x/Үas}yI׼So,_RGwG RE-!;tEžP%'^kidkmqmpz9#d#5/ִ q"Go-{&'GěT-5$J OMg<Y^` ;@8~e?|]+Kqc!C0##GUft,z}W˫]wFN _ G;Z+XdP$ujHc :9Hb3+1sҹsF$s!FA¡zynRTs*zҐ)TS+ Pzʥ\:k͝7k0X*G=j1$q=H\բ*-8;*{\N:`ˀKc.PM+ed.שa15"pэrGz3sܩYԯA,y㑏Ju)0"$)bT;O@4GҪڏő69j?1"O'co8R@Dc5 }?ϩ5{ᢎL%Ӟ9W J/-9'<i>w~"K+*iZĶq˝Ǡ 85~.OV_?2j˛pc-,~X\q *PGIϮ>|QKFP\1' p(o7oHΊx4Sc RY,t ҝ?5hvcIqaOE17Wp{TەCW([C:$85t(C4mޣd@fF޿8Tz+6zj63s-N{HńAxʒIz`uLЫ̇ePD82+KD$?`!@.}jV6[ 0oCQxZklU>v  $/ D@iWBRC DcG4F !"b$RDA1&{mWd6;Ӝ=s~s(LdUK.mG5FG_ҀrWX)y;Np5M7Vr7nݨW n6K1&7(8D)e uSEXbzau}~&g;G.΁B%kL[YVR wSk Șae2[;VyV>ү7:25u[)#cq\/%pS𳩲c$'&Ⓦ ryqڽrXq}h~սB7u({k/QvX)ڰoץ(X %ZA\w_gbqb=?硖C,V;[3G(<:g>谓|T0,,'ul/oֿ*.= u`l0_zhK KKR]7Գy:v\l>?OF2ltѐ>5REԥ?UxRv'?eϡ_ #Z>5i3gd^t {WuUZT*#U__p@וo"$}=R/t/\ޝ[Iu:|ӕ"Èxx:0f@R=rf>LYg:~;f9-xji^ [ T_B;#?P>Ѝ:ǻyʋfů8="JNU u%sZϊvW_9lNy/Vͽ|i{Xrx+9]S=f@v᣸TN`Yar>}ѿ {m&m>ry5gMfy,6JeQnpM3'jἜGW)NWgc,32g/,ȳQf}JH g[m[y9g_sɳ;hoA$68=M%vӃm-#][Y𷔯CD9'B@ޟtvo33^'m}}S%y<'fξt4wX{<%yH(a^ӵs^%t~ s-2a.ܫ]R 2z$m+ ^L9nҖE§RT*|yc^YFڵjprHm_߰oq4.h?9tڣFl-mގ-z;>Aog[m4yt˷z`!3 Lk4T) H:d xYkl>싸hb(4MP Du,TT8 ^W~i*iZ(?TQ>5,RRSW2NZThQ5bH@=<{vƙ9|wgap!jn8>F"`ğcB$ԾZu]0XWo5?OF(X5R_3;3 ax!PHCz i纈jBf J_ *(#}z_Xu\.^$? ƿ_ W9QS DW\}-mhy#Dc lܰ^h.M{Z ^aQax @TۋÒ~eBUr'١=b_ų n3~B/G$!NW/D l%6 #E|yZ~k!қHSH-8&?ak|'s#EMMбB+|w +d"DR+d|++uuX+-Wx]wRDE)15Alirz Zx3<iS>n>b oh-|oX_fsvY^ؘ)g!"ar>21lK*;Ƒcx>mTq1(x "yrq]~s5@P:hW188jc$5ޣN5[U/k}o]$k U<|˺ 9_A~7VΈ,#Azm(6UՠPκ:շػ@g7;ErOs?po7SOYZg,Xxoj ~j{s?oXϘxr"<ȆWY:! *7:,,|ﻷ#Tsy>3.z2NQFVut~L-N0y˻3x9`"VQr/b?LxZsgo:LvNX"½#|zz7%w }2omOu53v= MEwaeZ=`^+J]</L!ҳ5>z@B Kg/ smDJz=EaojN'MB <|84~zX>T9׵r\ gW,jd9e3\nٔ٨Yڌ쀑5f#6L0-adFv9{~~w1[ۮFVnjaUq]P{ U n.Gzz۽'ӟ9س(>iN3A+%;8/OutK[ˢFZ6õ즑MٸوeYm6j#ϴӲF6id+FsDsg B:XLTvţv!+Jިq7;d ?O.rǠWBzŝqht'ћNwl*'݂nXtne?65B:_4ɾΞSXW&ĜO;8~p+)w+;%#`!1 ƼOaqX,'PS<hSSd xZklT{ul['v!8@ۘG]"iHP\",xHi$j P$% E:N06DAB4p=xw`M:s;sܙs/%iIdg{dlpF"l  A!NHmB.I̩8̚0 .rBP!r oOIo 5d>)&@J|REd Q8\&nh1hӽPMx\(c_ӵ{.Ƅx;^b4_2#@PMy-)[sAVQ^ .gxU 7E&vdc:zkAq cx[?xO)y)\i皝Q!\wž}_ `)}_ȸr.t\B~HgOA='vs兼q +SVC' u$K9/[s @" l6\_6͘>c rL~ϵ2(# $ePZAW(GbAQ8s%;lsH0w esG;!oّRb(玑``ˍ^nˆ޶D?,9[.Bjbl9Q)l-`K8 q~PёdU K.CkKq&Bm^&X @}cil}eR|KT5aWrM!}%䭣((,}J+ _Q}.}}eizo_Af:ީ\C&r Oq/UJ 8dEj!k|7;X,V4Iwif%?[h|gh_)oiϸ4Hij3Ɛ,=AR- Dqg=T~.""^i`<- -"( ,Q[-PQhOD1'xi^1{=8{ }7z5?'_CýrXM#!*mGr87؟l-׳]Fo$[}u5xƫu5~V4Iwif%?[h|ghQWc?4UFo(ؿWG&շr:r\7{bLG)bQ/Jo܄XM7cr#! 4~f ┎'E @NO ߇gv;fO1hiotڶ7==@?mWڜl>ݪb@GZE)I Vi oA;-|$ľpQ`+ožÃ2\FJ!WbJ!U~; QQ+wźlQεf&cMZI|^ JeNQJ_r ;|Rf.#@7!a*F푻h 6k,GHhEJPc6,brѭ|5Zٳ  sd|-eźmLjPn5/~2L&V`[Vڀ@3?kO=k1O(̀2W>7!H~:~.*|z}¿9Hɿ2o}}ŸuoXᯁgCs>Q'>AA)_᷃S;0וw)@𝠷+ &—~Dׂ~X<<%7@߯@oTc!--X_|.=M[N-8"m>` VDVu!Fg4ր>|'njX?jY$8,b a?n;jX?f?Gaz/b١csYz:R9z6zH3;rS,>jԜHMx%B#V'džνU 7yM}bD|)߹@䩣X򳩢`!X7XYk&ecmƖlbcy6acW.RV{J)ueYJF|{Uq/,:xn_T 4w^5lվVׄ"Ӧ'n><#&λw;ng/KX7XYk&ecmƖlbcy6acW.RV{J9@ovޜsx1W&zҼ4VW74ՖL3%ov=[T{qs) G+Vk**Hl ,_ :+8n7YVo\'>'jUEiEV/ Dss@֮T'vgtfrϘ~uꑯ/-\ΌF+k5p*,V(b?1۬wf4t[HN!;^FgD߳ O[\`=ntNz)h5'ƻmsgv}#.vU`Xclc_I;H`'YT`;¶ 0kAvH`gkd}++,ͱv6{X=l5r5 l>;*vV`Ŭ]`k286ql,+X=)V)0? 0.0+DX;򈱧1tN;A -aV`i7Hl7=IOWMin.T)_ǬBy. n"|sHYHרPNG  IHDR}6#PLTE!!!)))111BBBRRRcccssksssf×/tRNSZ8bKGDH cmPPJCmp0712HsIDATx^흇0R 6=X .7(Iwf@ %` $@=Lp }ɞW&}d`8 d+>O  %NH+5ґ>O5߱Le֖,$DdΓ>GAuHF\E\%nxIy-+&/Aq3a8(6!BNwl-d鍾Sua=TNJem/=skʞFJTG1]o*ԤDYzyE!з 3̑TY4 x4h5=ǭ:#Kv'IqU,fJ#r#}>x>r+]G,X1o{s7MC`dY4>"JD>x^U4G9 , >Cj;ޗ{_%}845_}$5o*Ah+]J N{||es)9QCo!L#dU}.ζ:zSxM>T_ }v1jjm I, {x6N( V SڵWK>>(6 GO}yY*/ȡtͫ{H Gf>z[tm[)nj_>ԓӪ/Wu7#sC \]zuXQ>7Eˮ$#͗5P#&Ӈ38G^F>t@=,1ƎPs4гݢ*8gUtJMMdNH<7ݧOy>eF_VLFH8Mjf<ޜ`X i _TEVEq0V3mYG~?ɑ#)y0kI{/軺(hܙq[5=T&r{lpK9, zO/&~HwIoKP{_Hr]ɾ3u>W>WIHIK}pV KϿXo>~AwMϿo;K”cޗE0-2kIXl/¥Qa<-sd$7a6 Ƨh3ezeT_-%>">xnY)>OsʮOYʟKzx^"/;+00/ 2th%KL+8h4&[L}ڻ|*hơ҈RuWsYd=U J_*lSŧ@p өuv1;)&A}A[+^m@d,EC,6 p+yE2XV6)}*]?IlFW˟-PĤp^K$}^ũ ἖Hu'$.}NbbULґ>WqQJ=ss{:*+*)tUVURHHӑ>WY>WI#}"}rOkZqqi_H<1$ǎ2e(ss{:*+*)toзq|k 2ˡ=%kQ`2ϭٱ\flZY^D@Q׻;e>mJ8$}Nb},۝MU8>_|T=Վ!ڶI_[>}l5tV;ߧZm}c۽D_W5R>'1uJt>ձgR bSfK{|Kqub 3l켉XsWc,Ro|^7V63Mh7ll[m 7Q^ZX`l\-8VV:A>Fل[lA-.NqdrLzE]B.tLc,1pR[NY,M7 J4}9_ȮSUtB-N9J_5V 4{;cZ-P݈a@)VZɮ[T͚WaHWJ,xc=)i@UVag [oU^>S/Z2(7 UCg3{L[7R]3PQ1Qucn1}j *6>=04?hl-®M1t_ugޓu־-tTjgOR߫u;mժB(ؙ>{#$WwFzwG\@i͝eg l{QNe }'(3ǩڸ\+]StXԼՍQcKg9{X NW%}jQeyLWLVK4 NɸK XUTFMO)ċ lm^7r+VwFz3m(i3 lڔYvt>B?jV,L0<|.@džTV;g{Lgr9b'*\!^㈋#Q]Ful,kP5nnVkZ = lەzyg]Ąq(0=+m2fzI {'{4jEH^ÌG ?ųOYFvK7 GH*S*)tUVURHH]w;p/[R>&V'&}%}z 'dɄMyJ$}%}n@N݇'snbII(ܧ,G4Tltq+3zsSO3٩_=Uk~?N%>½/A:pO+XExx\}ts+OGE*B<HZ"/0)-3(Q~C>Am[:O3Gڤ>q)s,?}I_i[/ٱAY9Qij̺\], `$3ҧQL=m|َpsCP@aNirYj{և|@,}CMv\}ѧCcGy!>,k^/.}htN-}KVd}籸!޽Ko 'G,ę+(nj6׮>*4{V ʙVu \}ou7vM_6]xnXOʛH6WD]}t#.}<,zpA‘@[rޟ~ohW>WY>WI#}"}rOG\eE\%垎ʊJ9@ I3^9ˈqM(O9>rMNG\Mُ"Sz>[)N%{t}u䌟3&SOE''}6ܕՒyj)]TVɾ~BA}{;'DJO*=Ge:#|ofHCڛ~ngݍߛ뾖/{>w9C-O#|oG^{NÞGx9>>煣 am|/Uk]@_Q7qb\k]&i 042 -}|53 >_u׮pu7:w2f!Mwyaޫ}}(I j<,߀,,uZi~?\yi0h0zdt_3!u"G%}T}>Y|J.uJr/Aܤ/ b"%\G| !<ǟy'EtaWں}%b5gq;`@&82}/|]C/ּ矦yϕ]DPuMkmL%{a60QKo'%T>>W^Kѽ@DzHw]G\n*FʰvWOM&;lO.K?]Z;? M5_7iW?YiM>/I~DzY\ǯ9'^F}/߃ҋH_;}|'}f/(FSvb}ʶŐǷ륦7ưu'8U^qۤl^33cb*xĐ: +*&`qwuQKRbL\Zuy uL> xW/f·\Eb FeSl.LH.Icryy˱2qLڥ8 ;1.J_,Sb29*7'uIM}uLʗ(Jq#JpDi dng3$WHy EDNIU%hdW(Cfr+࠾'wτ:Guk,Mj9}#}/TSR!8ha RC&|,#@f 0B-!m\;U\i3B3S"A(;RmԤO8ޯc=)"T۳}BjV8HI돮I߇Im|}$}K~Q$if)`4e`VH*C̢Lk%@PVsZ De~h~0*-^@lIm,v|`{$}W (`gM@51R.yp6V s78}lW¥޷IK Y}Bb=6faO NNSdIC;U5N@TĻ_RUUY$Yh&R0\w7} uOW%;6wcḿ D_ 8 5 }v`%5{#}'p-l͛k'qΉzm ¢rҀk,87TR#њyaOE N_)h0Ӽp[ij'I}fH럲GW }p%Ӳk$}?J&}Γ>]m%>HI돮IkcGW[ɤ1yGdG<#}V2#}mwj+6F;OH_tLH_#'}?J&}Γ>]m%>HI돮IkcGW[ɤ1yGdwQf"W7ͬxJ_cJ -ݧI߲o*_{/(Au8}}&bG3yn6_y;6멏>oV? 2šCcǮ! H$˲Agf%1o^}4}zPNxRi@phڕzոϟA=PFrrF[k$8J哙Ô3y~/Z~w]*j/*.!nwgF}VլJLR&.<ӥ̸}L7^Y lhIJi&,]ϊ(J5ilAѧW wuՋ˸؍H_ R}lp#5`*QZѨ\\S㥓.}O#&kv4fIf>P3}ft䢴d!XT\Ű>hͥY3ˬc?)}$4v ӗ qk"Q,҈oF7UXB|weecU($7e@Ôܕ>,W"2.j% b'yjù }o5Wf=|4 ysY<6v_d:WA3C8zH @{2I"Z.#M95UH0FI0A $}Wtw [%l|'MvEY4/SLª?ZSc~7#}MH돁Jf5u_t>]m%>HI돮W^Emr6^?^E_9L4o/Df>+j遾^EEWDaf%a5,VA, Nz|i|9A!V2>!fy6{U["eeUKkL1@z}zaKU{^Eji8q(_6XNW[N7^*y=O9ƪbK; H6^?L+^E$V{W~I MxdF˔_F}"yԾ 7RI?wǫH3-Pv`% YUxYnv3 da<@l\Q opzцDk>IǥS78}k~߫Y$qjA}}n> $#}?+ue?MH_#'}?J&}Γ>]m%>HIߟч%ПF\ wL ܑ#I '{^$@=Lp }ɞW&}d`8 d+>20HpJSYFIENDB`n/TPWIEl RӾPNG  IHDR :iPLTE!!!)))111BBBRRRcccssksssf×/tRNSZ8bKGDH cmPPJCmp0712HsPyIDATx^흉z0k"H}9#@÷[5I~'LpK$  y ^"H@$pJ# DBi"H*(F  D"H@ D"AH@$ ZH@$ di"H% sr͒o@/"ATb4yR*ҫ"3bWAt I yN5Hϧisʋ yN5HϧPS%/"O,ʧHI+&ۂjғ^B6NQtI/RƧD?xiz*TVb;!a?gNBp?I/Z<!.EcC,H4HdS44C-$õRU[$=!Av-^8@%qa=Itz1TtIVv[5Fzm( A Ϯ}қ`y&dU GX'[=#,iu~U>Tp"H/U"N g')r1 =ħݠHw/+טr8r+99$(ŵadWOװ:?݌( ^)- 'e6N344rBkl bN x];ZmB=]^KE(_9smp]0xsޜ|Hع7#tOZ_D7*$!Pi!he`Vv u@&=}|ayҋe#;he砅kj|#%zլ"܀6/bGs!ᵊpϔqg߅rfdGo˸Vp";~Ca^+ܱȳV/P=º&{ӯW9?I&fm OzlX,Ќ~I<UcP'UjFlǪQ}t:" rzs!hUN,k~3q0~-sV[V6lA]Iol]KQ`'^T ^QF  vZK3p:bwrAqr$)IK 5sSУWz[( =*Ne=>Ucpw<N}zn&.kFVǗJd ئ 7&4aVF+L(@[:7iɞ+'P~BUX8[EfI/Z#<8V>1V^=wo/*X!tʅڏ(ef 9̮D+P19lT*DVTVLSѾCR^SFzayҋ<ƓvRޓVM}Dl!MlwzHv0bB^1ªLmrS1]ŁtNjDVD4ʃ aA/鱘y WR]9_,@!uܩ4ֶtw&#Oz'->?x/1xҋ<Ɇ3(G"AbzU'ȓllWRGU'ȓllWRGU'ȓllWRGU'ȓllWRGU'hd6r#HDni1`5X[զ'iF)K$6 n|3c gept#*$3Gf}HpI/ÝZ5r#A(+ڬ4%ވpxWQh)Em8"(tҤ9Q\_FLHXArn|} [+n\c>}Bs&4As؋UG,[tB ^[~qHL BmMϕD ]̦˧q(Um.jTzhjI/S KA~7ц:/zl"ӑ\" ىM/*YNSy|FZ~q ^'1C]W0e[MBGRSCVh ub$!W92sݫ>g'էuck*UmB+ƁF=E㲑d;$"Vě8OYs 򮲿KO%"GTF)3TѣijVW/N2&M$B+}ߏ޽޶Xi4N4V-"X 76 !b2.Pܢ)ohƬ1 u/Fڄa8cUtJU.tӮt)HaήO( dzmF_[ t{ҋemR1h=Lk ك2fUKb'UX!%#5 ǃ'ub5$M ~@o5|Qv"+UE?c&E! uk~UQN@}6 kxXj@8/wLZB` c!^YRҌ&iUv}ڸ%/Rwg@1ɌcbMml6 `*E egc?5F{wA Cj5ёc`Oӈ͵(u]b5+V əEuW&,;pV_I]Pn yh& Ik }+( *H(4Ԗ [ٽFӃOƕ..B}]z Pб2h3:*&L>JWo5ʠV5%#IAeyB Ѳ ~dMGҿVW/VX4)ʗh 5: `ϝPX{XjvC.B饶ȵwqoye@WmѺA[\ 2x) t;u|2t-N >(KThK)J 9Y]qHbp䩶¼ą`w zD2K'z}Iߛp8Ý:@\Q!ѯvMiOk<@l` ^AV*,80$QT()d/9w*,&uQ$e?ѥt섐GLz!x^RU=jQ.^j+5fؖqP7Wߒ>S;F̸Ȭe*j E< _ǧXLOY*/2@zM{ljВ>  AT(ǧG,z"Pر,(|zZtWP8 ?/B'jvGO e0l4PQ({ҞB _ _TT'dhA Q(3A=UEI+|L@DZ'kg_P~PXQ_'&#!V8y=vhBD0]p!m=饵Bj:OAQ#1ڠD}[~ @Bu>!Ӆy|/[YnNh_ooa0~gs2,(N>Gv96#2'ZٕSPݣ: Ks/(|EswR /s<1\bX||-C/{jS8H+$}q_>CpPq91?_ $~G8 hlB ߟ#]~*_@̸1A!plC85oj~_#bfuCA*q%A(~_!`il8k-ґ^)8(w9 (|{q):E>ļH%Bas8KZOc\|96VqP}~d*qQO{~E|O_/,#HPN縱}'R^V:=s ꈿ_FrA#(t&5 _V:A[߃>]<(`:F H/zJJ% h/?TAPP8K/+AK% s;X[@|dp!H2@vbLy]sQx9Zm;ͫ)fÎ3z1ÿzݸR=/\ɂ̋=/'XYȞ/|j` zDzsQ\'^D^o瑅1K퀼]~# ~npnϹ{s88 K% С(l|15bHV%3-n ?pp\ ~GԜ 3_83?NU_d\go%|QS;gzFQ}f& `[8jSCg ?~{s88 K-V= 0w<ow<]n3'4=sOQ7/c+wz_GBh܋? aU<~X^B!腀XDr::-,:6C_4Tu'F9&/祽EaAvd_k3G&}1;>޾hfRE~n0@~*4:KQZ!ʂ7M9BBz݄Qߐf2 ?߿vΌhullBӄlROL*{;@[qY6:_fb>8L`Ui/O)\^Lݣ/OFy!R.]lG1$L3K;=q! K$7+,Ma1B4A@~/0 WԷ >3@`35?ӾTʹ|ćZاk\  ͳpҵט^`"$\J aQ FOXe\L/Y? `FC nu.Lc * : *rI\esb݂yo\qV8/rH>,ƥ{bXD7*$JǓFW3ވb> ZRZ)շzm(,,v` )- QRގ7l+E&Pyӓ_o|(aA|}#"aq-==m{_yAzwn}F#QX<-U~bfRAQt,Uq֙kL9vӆH+U&in7LY00&]nЙ  惱@qӎmU;1x^6j#sUQO{EP~F!$ Yi(cU8 h&~\!6=)2a7y;z'ny;1y_:|Wjh1DAN! 37*06`q*2]8AU; p tUqyBgj aw4Z`B 'h`t{(&/+fz`*>òV`$5A)EF!TC eq%kf%+L k3CNZk<V-"uAH y\P1&&K}d#Nz z74׫ƸlF<@Q iڑPTgB5@\a;F!*x5 #D!Pzq5ҫ8ijfk#sYHE‘pݽhk 2mbԾt)8Sp aCz$R[cplIxҎk81WIZ0J=ԏ֙ynW/Rag|ELڋf_5i{^4DK|[ҊEX1)m Z;z$Q,#ƶ7ZaAL)aիƖ&{[)J;ek<' ^~h8q7[mݶG)磊y N@]Dhg6 rVsqRa֐{pt+ɆVxA✐C3IxVwZE{SjZPhEKESgz/h /T7*BOuuES-#h[ɇ}<ޟtLBX>!Q1ӊG@tC#y Gs^z28d'Z,<2?7Ƚ3AkދV_h/5Q'P{ѠPN!oQӌVQz Ug//mKlH{/=VnF`ADNU +*}@K094Þ6h35m݄4z—1<@ojXgJ;0MB-0-GI̽99od{/r/ ^4P@%3( Ť@!z71)06լ>,F:`j)vH<3* l 1a5{>lV|Cj{xE nf.m(`Bw4Q)}VspAwA"@eVر-som ~hz/j4P6'{f e:/җ|,#vvVhjhb|&UoD^ޡ^4kf5QxKºwX{w/M}锾c yi&=hMwg4JȌq)(\q*^4~hh fAF! zV/җ|#vK?~qD2/#Vt#w5 G9٣'(\Th~h@3~KPx&O<%{HR/߾>-,S,*}OP&E^|@v^|!xOZx;pM؋6)#Mr=˪K;A9kF7 V+?o)D\UV^-{:U[>icZa3L\1)Quyn\!{(8l_\fm( +Kt2ZOtrB˨.udl(4/ϳ#xq((t׊͗N<iStyH>#Wqӱ6|Vd6鯏Q.V K6P!,=Bi &:iY,.. B`p44~Bқ?04!v=:x4L;~ATl5q>p| j 20$/zPB]y90EmR}Z,O`hkZ:TڟI?W$,9`>tLFuEVV8vXOP'; X4Hܙ^hgl{a#hi1}>*=2f SlrINNAQ%AF#rRT0 `۳GyUڏx1gMo¬H#ĩ{A@'k#UxH}}p|mҟQ.v9-\ ^W|tg]~:0J]؉KVX#QA0).oU6&QhFWAM0^}Xu0aM=TUwpSɶ˼AV,OxXZ.s .Ax֏rrݛr}J{ ͔+NQ8g䐄)!_v:U؅}7;*wU,uG)0mҪSy*̠=;Γ 5œn]wwc m1s88K+gGaaX3V YVa@oNIoC^5s靅BW k,[vs mBZWV>; is"m¯f"91(I^CI[+$6! Ijw M\ Ae>x(k j։NY!p PyP"wB\龻dOO &%ƎSw5 *`&_.wvt…pk<\:;L3V1XpKOmB`&‘X_G9 %, 㡬ZOsi7vׄ5 kwf+ aהD*(H@9\Z٬X/s`8NB!첁ՊC{)Xxuv&Ao_`_iTَ 6qcW 6RnDCla6Yq<ʵr\-O# ۣuG?JOiΕ;+H-w&:T9&R\Esɞ(ܢOKSnN /AMx̂9Cy-SBR_jk߀B.ȕ,Wa Vhl%.}=9 !~?K,(T?¥2zLTih g+.iЋ\!F: >x:w(S^0~0D~n~46>SP((\Q+ŊrSu C]#"_޹}ZI@v |VYp"tA;vjB"tX Vp#N d bzdd%9HƟm j4nY$!F,j:`Zo<ns=uA!\aQGVFB\ QHCZa' {x@̺NIiR$m' g. 7$|w ! Iso 8R.PM u{ 0@ S:A޶^5BX(\+(Њ& ˆVة6PX6 h99@{ pAumvC\u Z? sx(ekC-16 I=WLyk5/a߽П))IK6OS-'e !x8OoPX p/'-I,M2岙 -aݐPx=>+c[Fa ݡ~ FaUYe;B5IB+U! L\+M4YTm:٥0cXڊIJ}ǟoX5f7f|:՝w|=<~0 NW)Hg;1ˤxul |*nϦ\&UFʪ}vls ?~?AAib}z&sqFVnm,ԣ]V8y/җ|S-VP8u:T|锾õ|󼴂BA:Tn:%.npy񼴂BA $AxV[tiAa. cQ볰`_x*TznyiE+C[A޲Rt( Xy&\`1ٞ6)=XIzU#yǵyiB- E! lk^Xf_ tIFPoUqA]aP?yi/suqi*~Uܱ˯gmpe!+;9<{uf dOV%p$tx6 BbT R;26.8tf9jH|PӍ<.Ȥk# Դ3jjQXE'uA`6 fgYwzeݭC۟ܠ0vw .NN`x.Aa3J$\;PQxiiX)& h$q52;UsPlVm2&c~PP)8ftb"i&qWⴔ}BI(Gd<*+!bL "?Xw8bX <ǠgJoʼ<4Y6ρTt:xR~\rh73B6*OG]f0 #-3e'#VƯB6PolO(4n?bTM _Q9؇*cREJ'94}-Ü,egU5 p #oP ElIqptv5 'A(q%&ԯ(B2qFU]TT྅NH"Sx) CS;:MU#˲| C3Y~rɁDMBaѬ(hƯ'F(9.0/d]h:DUؙu*7K@4Q_OBty$'[j^o#62p̀C3sQǡ?`Rd|b4\­]7(d?Ce Aܡn>pB\?K0ŎGhi5Lk]\HM"RekB!~E5u^q V]ppiW\"te5:7v`_ge/D>51\ '[+4n?)F{M'y:^Ooot|DHC!N.!ix()8nڨ2o"#'F!@Znd;t' f_mA&0 Ⱥ)׻m_7Lz̸'{f6r=;#d-U#]Gۛ;7"tCZy~5Is33BҨ?]6 kVd2WH2WxF#¾ZiMapC%5vn=Qc ql TPP(B<= /ێ +y6 ]BƩ0jVԑi6a8{Pؘ+?@+ /;5D"UkYD it\ćאTtQ""B?9;(D'rF! =Zn?M OB!>?G Cuhc3 & s<j LA32\;e2cueA h&f|`ɂզ{d&ќ+,8xfiG34 ZQΗV6yFE+ [ze<%ߕPz%U"vpH.cLꔕ6[ 4FŶB, 4(,ptP\a|O{ܕԧ02e|(,v,B®4^B.hpk_{nfW QcSvPW,!؅@rP,qid!F =p(k:W<;)@kV P@Xeet@T<lX؛ŶIw(W0$o{7m)Qcqh?^;Ir n?`;UcbHPPkp, D!m_튅H{q m}G-5`Ak 6kw=h;;ɅIĄ ]+ ['d]*mҼMα2|jkvNKG3 vÎGܱSW;']PUz_aSP&rn?uqEQx>a$ xVO~#ZPk 7Mkx'dV:Ui){a6ȥ0#?}fEQx˺ uQtH_ Lif)p)4@3K&GSGrsδWx Eǘݟ~zq{it׬oP(T>8 ᵈvAW_6}锾cVnjDh}Z_*C%vǏo5$m Wu.K?U(`N{up;&#p%(\l*tJ_NE{^(9ggp:rrpƑ/_ {\S(ΨxS :#]㑔VO i/җ|SϞ> ;N_!i8lwdO+CT9>ԺhD~=w 9B.}3&mxH#05Rv."gN R0y\{O ptJ_1ɍ yih덐V>?o?l~ǷKctv.0 τBQ2FpPQ4"j gC!ص _#ppklk}8iGP;Tڭij?ab}'PxaBSx l%8\=3kT|B@n^̜6Gcɛd?uxarmͶىgA2(V&`cD >@& #Lɴ>@!{ilk3asl"(tP (LhճP uh-zل igzVdPX°}-_#9hiډvw(g}SڡN)}ʜN~P>~_~N;WK>qbvऄ7r/s* ܺAbrW{Ci,%#۳Ix6N 1kgPk|v / H5>u[m hkD!]N9a %!EIB/2%X49&q xA\`gێ𚀇AV!Dg:=2:$[Em (, $wz1ڳIgAMEP+=Wӄ}~}I=szuDq4@b +5fVØB\y4<nAm'kVAځ:!!-Ov=*}+XdaOP ,@-x*pz_9俎0O0*֒oWG,Udv΢sgXVX+YMex/|k? r3A 0XA ?vwtA ^>1.y{u0|aŁil˂5WC^;,3ze>|QO;NBmܔMsC *B''84%UN <5Yʬ=V?A(z\&L>9R~`N.c@!s&yL(чBeo* 1ڹ0/ @ `ۊݘ/v ŭ׎>6 Й2UF~ OM+2NsrWV)m&2n DQ@!ε6ӀcR^Kl=64kP{֝&  ap/UCy˹J$$P2nF QX"OPk, RGg~=l\Z"_­y`PW`_H?lz.Jixb"^;0qJP+*O9隷JqRAl?OMj*'`4D/'(GN考J^"y6 ɟ Gφ.γvR?vUny6c&%@8NA(:a(i$E.3C[!QHA]^EJ#~DžӲsm]瑛,Md gWFGM2[jgP7egl^M7XPV,ϓӰ)}ɇ> R@rf2#qܹExgӮ NAWۡ|锾ÍTyi[QxpXK#3PʖKQwSGb} i//җ|Sv& :)hom7Ru1@^J*|锾cyigpO>/Y9R?ͽU`6/A:u*tJ_Zy^ڙ(SQiߟ347>e<]QjЂu:T|锾õ|]9vw'' F =*0pN:_K>\Q8'({u5}-}}ÙspbO*0pN:_K>\Ϣyr$W:a7SkӉ\ 7L\ףAq 0ӇU_\?Yٜ4Nj AݣXW) @aOfwwҀXl2nC{s0F(|2fW$KK`( '8,tΘw3Cf!(܌e3~N-"m|(U^P$4fAjwQ8:$H@$s>g  j%" 7*P$| JE% (:oTH$ (>_K`?yH"j,)AjMU A>C-IE"% (\XH@$ >C-IE"% (\XH@$ >C-IE"% (\XH@$ >C-IE"% (\XH@$ >C-IE"% (\XH@$ >C-IE"% (\XH@$ >C-IE"%oBp%IENDB`n<<{{$0;,G2/PNG  IHDR5,tRNS["bKGD#2 cmPPJCmp0712`;IDATx^}-յ<v` +a-̰ k)Ka 2,-Ka ,k-[HbO2w[ι㱥eYgCDNÝ##"$͑@de,Ids |?uK9p?D6O]ƒD6GS$͑@de,Ids `VmsڢhU>[$Hl$V)D^pG%[eIop{@][jƚ $GM[q(DAQ`I;1ƫ`$]X4+HHiYʯbU]wpX}ws6mRQuPVj CsGzk-$8oJZ>ޞt ++F'<3# ;ƨl0(A!:vδ]Ldk.r\Jr@XC^}埯AK29%^3{4_}Y*m4!;_?tWiFK E+]qlRA]'~,Vۥx,w\Ó{iͬ7B=}SOd{g/[")ˎ920gQQLQVEMڕc5kB|AAjO{e.5Rz}Jd|*m]B7=;r`:tLSrP\YOlӠS54/Ibc()!+3\cwOdw'56['øzE0wt@#7j! .Ht,| " W\~G]]K ovmH,"_.>7_9c&!GSf>g9C B6(?GrmT߲T-lWgg;Cɞ6a+'+>Xcc~ڲfB5t: E\KO|jQpEE=SSV0_Yb:贂lFtT"=fXt<7Iq> 3fl.AZW|ǀ/5ÆʽQBK`ض x"Ses FxI`0b&+D㭊r[xHy|KGC|s (MhXw<}$s 7Q7'h ?:p2k35DF#vKY9D"S"$e£J>Bb ~>]|nQCHNhYlU dˢ7!|>g& ,%@B|)R,ܝ- $,l|.EZ6(U= y?k@aňGW:J?"Ǣq&xbL^6FPe3pAr+H'V(|)8 3.<&G0 Gc(DX#4 vXpƻd0lҸ>KXVnX1;L6 獵~c' rf\Ny U6X6ÅT0MA6[*!U~?3xMwm^2]dCQ$J?zzlO`<2HؗNz۹J3A@Gy||$?LD_qar{f;%\0$H1\׬řאTE_j2N6oo_+@X3H!4E&,kwż_]*3 /~)ak2s@:@on@If "n^wI<|\]rQt#N|@C 壞; Xr6K r6`5!Q1eyzwZ ?]#/s 6b N}s@B +!(mwb& +܍3v`c7QT{zg`eaiiPr )dEAdž،Dh^Mg=%LRB>޷6Y1Nj ,3h``́φ0 Ʋk`/U1 6h&anB#/9D>M]%u{ dh:m _p毋=^3%|}@rd){s k|K_G2wǧ7g& M/:Ȁ0l[i%*8 4+%Ӧ wx?_}W9!} f}w:Lo|+To8&8w448@T %0t>8eN p\q VF'4c (-L &oydҷ@t0M|=+!+1[ Y[#t>LB6~ >oFb&t.zO(Xm5 PAl` 9*ȖlǛ 6xh%3A:cVb/ 420nu3@i\9sfUfy2 *͜IO'a\넮e.kɜ;X o.|"tD;2lI _ul$E 6딞_47+\sSf\4socBw7^a+/nJ;)Xe]La2'ɷ.] h r^dkbktd|_ L*aˤO\2˚Y{ 8 m%F4S#t@i@dMes3JO^{R=Q\?]Tl=& Q)JC̃pʭ$'&D6ѹθJW'p dܢe^n.iVitC);oa3߳U[ʾ 0bOA3>;g4aD60cgGce9{.bp/ҴA9r`tT0>4C%F6b loJ'ٔ=V)y~ C%Ã<.Phh .;JU\(/WJXjgb%  K3\r#ը^Cfpxlcދ"'<@q23UDfKYvR4E>ޞK05W +Ut4)r7Ȭl}|%[E<D>YgMLU%l֬=bWbgV9.U V2^o!8{3VM9!jqzјUB_AP[ xa]σ|Ŷ\pWl W {aRl"ep 8ls}].fO-+A\iTTh\lTk6p.I\Nj>ch|1tEr_Jqf[/li[nj.fw+RR61R1M 7{+R'HK c:ʪI%W-A7J (J:dOf "V2eBuRy?8? =9QaI go <:6kP]#6oY,y7] 5&_8n-E=+{TfwGl.oe9UfҮ&~p+]0]ds{>p_`T)6hoYYk*32Ϟ\х@-͑@de,Ids -RZGVwOL|Qb]qChv%v!$_=<"]}샓:%AΟ/J +l $Ft hc));VJoxmJq4ZGbLmۑP5=YR~0CWRZGX;_.E_WJrw$M؋\LS;ZG)<͕F}huJǍU]oX5ącFLWM5UC()S*Ws3 d"o/\?ץs6ZGnA\oȭuq˫zMv/E`i]r5vdG5Dh_!/I?dHT~MWr& n.7""~3qLe~LSC\~Kzt.di`El֥,!e(䫤~Cu$|$~_nJdͅ+ _F?u4er6#Ӿ01V @DBlv Ez$r/.D)h&tURZG{U.QHgXd-ɏɞKjWfsnqWjlj\ٌ|4UTJDU=9ir 嶙bFFhpW *#b]K'ۅG_H(hG ';g.|gRIj)]eQ64B@?E#02xoCoJD*N962_e3; JȄW6E`=2[C5o:OOGOoONl P"="TwZ=%+5qy0]ӈǴc6~zzbQJj6hh],T44.h@Ow`崎ݬayzwRi cMQӨ|Kv!t҅%'m7ܕ1"t#=/uԌYNx;Q`/.=#9d¡QWbD% I ?bKӞ:j.IFX{'Zǿ8y!(gqnM#qtf-:$KPWh82x 3MPQڳZG͎V@=ͧY6'Ce"F?cLq.=SYԲ1 <䦛+ǯ4ӇnzQF!R##ӝ;ZrQS?+VRy*j1dWF}Y8<,]$ERn!p@Q\ٍp& B庻A6'FP=M̼`~sfQǎW"'#zd1bDlnc~C rFߍ@dw#-pdE| EyJRYCD6{ٯYuDpw-Et#ߏm'~bs!P;q%M>W8BP΀v|πJ,m"9M*CDelE"7@6c%9CD6؜avQV6 ؼ$mhDgE e|qjg)Nfh`]Jb9;#gO:C^l"7e3%Sq#rd1Dn p˞~cňF@Hzmt B D jEq~2$9r~l%l".cI"#XȁA ~2$9r~l%l".cI"#XȁA ~2$9r~l%l".cI"#XȁA ~2$9r~l%l".cIFf<- ٬VI0`%ˡ/:V)wu ,+ꑞfϻևl$}|Wbvr?@m39{yrXٽ~nk)yvE - M{s|eth+pޙ[ImgI"&R4pO~w\[d"00 gemruFO5\JP9>R-TOR|=ISe@- L}XTG@ rC["*hR#cuԊ tq.>@P-_,n! 6%hyVT"#t6ff:~B PCONe DrAjwr/@u:-=rj̐$=3,8Oi|5\ݏ"RE^,3sr?H&6I隃H9,aٌkp?Cgz=D'36+#/zà>rqA͏o~۳O28G[V A1z$X 68c7n2jY̵ֱmu@0ptv2.򪲙"PL{| I,i;}6/)٬ۨ6+DOdd\t> 6s zh-l1Y>eĿ`:_EW}3RhBqQ.>ˇ}^dt;|] ud&\f2#=^K9"* }J/)ji %ݽd$sf1&AfkQMVo<Ƽol5@QgT%*ն$v\# A PpIIٞl.zJ] /MMF-EҮ_&k&V؜2xxW1ܚgJ[fهk] cWE#DJ2V 6͸s6sLyT]l~Tb^7y}XrQ9i ކQ oNT++"zHI=0I| OޘPKyou5C巌`>M~pDY_{*٭ٖ/QܐA/Ȓwi&=F  \).HxT;'g3ۨ6=ޮ@p%\ϒLS14?eLC-Pji.e4Bߛ1+UK#uqa4➏i ;7!ʏؗ8b/] mBhС>S|ϓq tqjQ |ҙw?%w%FlȇOз#͖<i) KD 2ƌR9FQ#꾘P:z1,$(1T;尭M/-D1J`IQ_,ǛTkӢ7KЉaf2K83o@YraqW>%Kau8MqX{_27g4X,Z,xEw,'W6J R@D1l-sniNan>JJl)Gy u\ΐ1hI`=@yV?eZr&fz:fҿq/3?)\{ ,KS$dx3GQ:ƶ&R-J>V 1 _BB j5lֹ@i_:J6Lf1zf]}蛫D7qm6͊w)vd?gkweZ}=[KEכ}rlxkܵ٬c:γTlƵ7Øܭ6rw-ۨ6+J] 0 x)V<+33ݓL0LwBÇ{M#  {ux{W'g7䰺}'WsxĞWQtd"O*Fz"'#|2T1#p@MڴLIh q Lve.smѱ4p 8@/Ud5"+1]UI0xHfdQvbO z9GCѹLzՐlbgu#\/id"=r=*k׭ීnb5dvptbs„QCءY̰=aUfK*O\:n4ܜRS+ܸ1zdL] M,b{v-KٳS#-:~i)č.A|S'eQy:5$(+\lc]"qPpi䉕Z`X#KtoE6RFz87cYmt5[lf.^vK31*9d^zp+7Efõ}_w; Q),*PfSŪ!RVfc-B+Vmw|[7u4[ws%ybCs 3m)ҫSͻ)ynoX"R5K z9ɮUJ.A@Y X,Rf4c^sdϽWbQ Ԑ4z4Α z'$D<ezwŚ}2X FqT63-<S Él/F(K9ER(!WE- HX(^I͔P=_9+lQ3Tb & i5_e"):`< Mo+}KR s,*ޔL6}oFHAKCo&Xwyw@XI{ sTF?5 hPu!R9b˵>jQ@7Ib r!0QH !OY*΍ yx ԃug;y:^5!S{>gF[~0Hg%s\5w,n`'tg(M&&JRWs8<JE(/n՛d)Ng7:%]M`"TC5ŸZ PNblDW4ZE(x:dD`ǫ <^${k4" '())B+<7FJ@2hJA"Kz"\N$GAFsČ浻|1afu$c Ms m$/(TE2ʛޞ(Z\ȔH',hP/T*H$6WB%">>jKp !4˦z NzL,ӑl׵mX(yi`?hX N6(CH1T8̙:_ ՚>i6 A0Hx /x?⁖jǬs>%矾ƶҕ,[ԑ]/4̢| CdOXw[N'wF,m#|D6G>7IaOu\!wv ͙.q?pԡ^q daZL?:bSQc7ô8{{"/0-jfy"|Au6 0 tflC\Q ]l=;I{ȨNis_rAu5hZϞ',e) .lrX|d]`]Z.k*e9'ϘMR%Kq/{M n: 9܈[2^rQ.ZaU類c)n+ZQ%X܎9hiMLCh6'SAúy{|C}' *!lMnm} ^O!55Tv:3.D+\d6_N' 7ӧv B) 訴qW|A:fr>-܈Qς@{6_P&y^He=gz*bg6nڳ0u {S``LkГݦڍC1|W@w;3 .pA7IM0ƺeo< 2{sF7,>MUhϪ~:ZIZE1Η~w8c >4d$!Ugb?nNS~狥o/4Ϋuį;gB8:b~:ʈ"OӋۉ:ڔ5t;Mt("Z5l4'#$;jh!:֑h_g}R.RȨ" 3BRpt!2B¥'Q [ã}x߆:rJ %6m&v Y kb96+aZWԓhi4QV#ۨw4Φu\_疓j&!@(]|nL#~Xv-[ڑبz%4ިv^W ;nwȹ@v\4|4[L+Gljab-zԓ;l4BI JRb #оm>!j~+X|sP=I_knhރR? Gwv˜t`cDp4%px050lcd 0F#1ᇩ{(7&%h?{'z:HnO$b`XiR\~p͟f.0Ȕ.Ss7~Vl,%L0V*t/c*;a+fWo>Qkc4l\(pM E#cXMX&?4ʉW@6_qqmQ;uxq~\o?/Vl՚~W=ȊA ~2$9r~l%l̘<.7ƒ9CfhW]/id5k'pw= w~:-"`6bEvL!=Y z_D&؜& 6z澛p>:Vfl}^!ȑE l!`ct7ZpL#[/Enm^l6v4n!!7^͑&7@fhdF) gO"Z6b}?UIJ9۩wr??;*t,ʝ"4Raq^jCDo] @%l".cI"#XȁA ~2$9r~l%l".cI"#<|IENDB`nRG-dL y'u`vAPNG  IHDRtsRGB pHYsttfxRMIDATx^KvF&`ft&ҰUҩ\VvCbG.?Aۏ?^ @ @@?jOt @ @O> @ @ M|N&@ @ z @h.49 @. @ @I@d @ @@ @ @&B  @ @ @ @ M|N&@ @ z @h.49 @  @y}ߵk`vX. \X^ @X$Y$* @@ @"Vm~&@@BDC @[ +bA A a @ll I2T ( \Xk"@z  ?%vu_~):d5 0S@0S\ @(D! `qdB7$) )f @X!`UO!Z¼,.,a7) H N 2ةSB^x.h @`Av^>Hⵃ pM@p @@(AR2G@.BzY-H&03M"$k˝:\@ym%f\urqC]iE  X @F   GM" \R @ r¡YЪw-A|. JV VɛjB5  @n҄*j?v}Y@su<&]G`QL()l, \ظF tOD @q!He-@BJY'&Ԩ9@~YCd…d\ XoF`qi !K@K8 @`4aY $5$/' \W "@ML5L7 Ԏ @`7&VQ!^@DH p!\I,: ~o"@Qc54 – @8^4ֱasze u3…F'@O3iSd 0N=k2 L.L6[1P&h& 4f 0 :Lh  dz d 0…&@7LAL:h2l pa˲,(,. / h_" $pM@p @+@6 T 71o466P@(D3B2[+S)Ô# @ ɜ@`'X@'@D2DŲT2lSJ[@w}:e ~! @]& … Ȧ @@aP?4r^~#  P4H& - @2!辩%un"X@ʠCD.D5 @z9/)w'Bb \ T@pM}D}((RF'A@) @D-3yibN( eXkQ@cUH) r41DXOʑ* hN!@d3!B"!K3p!W.D$н{sH.(% @@W噂k= aڛ!U,6p!ha, L$W xK@K8 ,- @`7KKʭI`aY. ?~=@YFd ҄` .Kf(c e &P+<~OApX)S*=w)VlQ Q*a P"P+|)JC`KqÖe]”Aİ@]% \X%o^ P).:yjRF, \\=k'@ :lXqX}G1[[;& \h& V%L, n8{/I|~U:%p!K|"W V$@ P$ k(b:栒A~L;lQ¶1 @UC*X88[# @x/ k%)' Jf @6)d6J"R*]'-.,@7% @Bp`wݲpa @@bACU-$eC& &A @@-Y"U滀pA' @$ kT؜X@'@ P- hKqӔJ!.Rh$@\@аkE Vv} 6+ @x4"jَ v @5l"mJF Ԏ @|) hؠ9D q- @(41E=H2Kphm @[AC~1$-~.WS;"@ $ hh[qa9.h @>2 CzmZf @ M(bFkGA @@Tjq"8n~q%a @Rv #& . \  @ Hf)b%}<…o @z HzIqǿkC 6  @L2LFP…F @ @B@P6f.Un%@ @@ʰ`(sO A @$)$iPL'-B @l)lB#b I g @v2ĩS+.d5 @M@^aPk.$-e @S@ʰ"%ȸBƪY3 @ kk,bXnvBY0 @D -_XnjBY0 @ .bX%k^BzY- @ K:@İ=Ѥ…DŲT @2ry Y*e @|" b^a e:BJY' @ 3+ 3S%\HQ&$@ @T@P*|p N @x+ e ).(E @ P) brWÏ2c   @(2[U N.TM{!@ @ahxa(o cm @ 1 aFY:F @@ \?"16…ձ6 @fHF({aj1 aKca @L1t/t' ;p!li, @"~Dgф aKca @,1 C_π Œ @! bXBG̀C Œ @% eR?"х1 …u* @ + ] "\V!@ @ | xsa  @ Wvxs!ZE @/^axp;+ .o.7/|ǿW\*  @i^ax@i}t"S" @`}NpIa& C@ _щV!\_#+$@K_E tD+$B@p5bO  }/\"/bt'.- p@QT>h$@"> I%:@‰Ug"t.R@  R"C}ÅK:l4>BCO՟SIUݿV8f2I @`[?[׍y,`\l -0兀K1 @%0ꇥK8`o.[z'@`՛ 8+w< @ Cy N @|AZ0"&sFo\ҹajD"G$V/wַ…i&"@h_>j^pI)Zd[eY#7ZR# P@ZœcsB;W.!@N~Dⵚ>"z.. C X%娥UNѫe4!k#>_֔9̬…0 @gO~:^atS" @I`ηKpIMijNVKկSpmVP!@D@ _(c N'@Ms֠, _/ no// G*n|At\R.VAq/9e\KjdR +xĠ X @`@/KXquu#q 58)G jT X @a8 -)\jL%0; $BN=.4:+& pIP{,pNq/\Nj@-L% @`|a~  p@ N-鵅-h/|qe…+Z%@@_.K>dlֹK .~ U1_dϩ#p`x(…o6Z#e벤u0C\ BߞKieh8q@Ѕ x$Mqnk5Tq6Єu{^Y . _}h/ ` KL\RgtÍ6 ,pfp ? |{y o4Nuߣ^Su>0+&>=Dx4~w[!R…r+G KwoSsK dfyNc4=FJഈAP}-8ADoV K*w̴oWI.n`88*_.|4pD1\{׼M@Ti_d΄nu7OA >MJ/t,Qr '0 %7aa/U8M_/SֵpY @eB 沯 0R@0Rw ;T @@|B|+$@@:tY`X58?Ň% |D ~8j' 9&$Y\u4 PNVI ,IZY6/dHu "T @ @/)>,f8$_)\(r$ pA`a1 P/ĨCUT: @N W! A a B WD3\˘*D[NpDIJC  -pf[1x…% D@A' Us(\U/%@aBE|lh,8-_ذ jn*ndXu4/ ܪG?~Tn4Oþ.X .ju娓U(|^W;Յx\ȕjUk̙ݢrFjۻKϴWuwm:…piڟ~~-Mغ k5QOƸ  Gm6~+G V..&{`dSWFuh _ <3>fO8U[ܣn/+I]+…U%@ Z%vhzI3k{p6s ֿJ޼ *.\8sb>j}邉cpZgJ J~¼'01…ձ6b~TGN|תkiv:iWV],넏JwCo!Բ/6g׮s|!8…f$@  8>aDItBqBOgdm/Ɉ$\XxezO1?cyrYl.[c}GwJ JP'p!T+Z S& `>S|] ė *qa{ *R /Pk~3fG]-\صE/١*׈rcjjN 4|R]759]M)m'1?S@L=u\uVȪўUFs@…'@@Ok|wrq8]0F$ԕBexm;:Ukk &;>ܩW^;톯#숙zԅxB/I!4wOcBbi6g =aw!<-=OPqp)b ؍tˈ$fGTex-zύ|5Zۃ !:yyOF@Pw8@h_LƵ8 u4<.hfD<3*LݠmMብ9ۼ }=F`@OYʩ+ #ݲFTJ_]VH.$OK%\s1l"`B,m'"ܫw v!l.T9 ?7_(CC"@,aڄCL쪘XlRh @`GwjO-c2B2&@d @/c#ݲFT1nH BUο 0 Jf=x(hnw*b=o~(兎.$*[ ? N%@$@^^^~5qF| D5b% CI36N>-SFT+=*[!v{XTN<|ϻ_~4o.X+?W s'p{_ûA*FpO&OF+p!],@8UYGp`Ar{MaXtroܸpf D7Ifw. Dd^? ًEq ~e]m>ovP-q+A\>.9Z̿F)\n'X {)  _ m?kh;ޢsf ?.J9G*2G~*E@ϴ9A @oԫ>9i#[F\>a7e덨G5+)~Y,…UNW'3~ +/vCH"…DŲԣ=eh藜L@w|{pcުvG@$zGr4{VmWP&mQw3*n'#61FlИ.. Z` <4] ȌB5GIOF4MC=iVqN?Hu|hB~Exa)&yK0p ΄}7p.>K~{~\/B.=F-FsxЅ_(?c0lϬ$ )8W z_1NoVa& \8K(_S*&s>HTZ Sg1qϿ sdB̺Xp*ޮJ^5RjiAAv.f#& Cw9B\oO)91 . 58z#Jt;D{x;f@Kl-΁X[~ WR2oDv:B @}Ɵv 58ʊp?S>u%Y@tr[6 W(\ht:~HGx Yﹶm=V؝۴;f2 'L,$$h(|㉎-1.,Qu_j>^B9E`ww][j\%…%8W`'q=>Xhrn#9}".K\/q[2il \ؠF`U̵kY<렺'k 9*,x^5»o,n/Wx… 4%D/Mz8"tP a C N p!H!,@8ğG:}ck{ڧrlER\/I @Z!_!ö߷׃M Ni Žcւ,tli"TyQE:L…e._ DxTN0P} Kf/I%\+#>Q~P컵 WGc`m˯M*Uի-y^M$3lwYX 74u,ߥfr p͓o z@r.́ cA]ekUUպ=.mz zI@@GLUtjP[ TIkP*Qriaok_…|Z/]A`@GZ!/HZyĜcN}/+ cVBUX T@1,|`Y> u)焽>G +:m-P=,x…x53B=7|`@h|\)*[ tnUXo!ʈT ؜D4 ZLh+\+[_!. a5(ʓbxN u52f^aok>.]&fC~p' ls,R)zf2_ƘoqFUPk @A…A%𥀇$mLdmz zI||s3/ \_#+J T Vݶz3,lL@vNyE蓙 絛H, \H\=-2Y[+'_D…f> 2Hq# b5ӆ8D\)>ꄝ*U4J^r|[b oc|x5zl_]b'4I2X􀭅l.@x[~m%Bbzwb[~=n˰[v݅r!@@ZwփFr rjc T݆GG r%6tPRC BL?…3/MΙ @@@LjP r*'LĮ.ZY.S9QDlxg  뷵&PP1)b6rzGiZcx&g"Z^[xp!q,}@Oe_V5y >7LD`3P}uff;.]AWTO'\sAnnajmiWN5I@"K"PU|[w&Px]m ۔FP ڃda&;oK.*`)z)> 4) gBwBĪXOjv.qE=+ v5_^o*H!p޲%)\HѱIoK/py~轼d[NHT7غNn&൅.$-eH& /^yms:/@%՜V)eҴ 7~a 򋷽7 eRC~&\^ #1?x^vw,Z"]|Kt\8# F @7(ot{{πs>yͲJ i^dXU;(Pwfiᚅ P#@pm g2F:a/>8~q-3a̠f0l^ȯ-4pO.46 L?:΍>JQAeذmew-iKwn uDRZƮ[/B/I(@C7>M݁k/=|-ݘ2px;rȯ-|L.=#RB# S`~+3D@{ {Aui-/}:ߚtyiʰ\K8…8 O~nzʇ0ʊ5 ݷqŻ ̻wGxma1 MGk^ GOt[cbMN'jL3onvwx_V&6 mf o (LQY Lxf0E}zۄyjYiW*LBu,ԗ./iOs.tZ:b/Y e/,ZIM;fIfZ}LoS`K rL1_[,47Nn"h9knw_S L? @NcfEXE."&}(|5e4kJ@^O.)|*|OgƷQ)Ս,/}mďD\j)@$ ]MЅ |79J@U9c: cjtU18Ⴖ XxGmvqc=^!"W8\@pxlɂzupq C T:R ʵ\;{R^r.AL3_fB :be@WZ.y-SnA]Pw)N k uB;,\ءT̯yg:HR @@=b( ʏ,az $J /^a.- @@݇e|+'q@o*tG Oc2Okꮔq~Kk.\r0nu7n0_tהDX%嵅V۾.{@k÷?盛M  w Z ܾۄz6+mޘ M3һ %%Y{WDB# \XsyN0' cA=DR |!n \H}uX|>W}ER!xI@6wl#1Y87)\n la\_QrvE$b,qxnks*n,' a/"\Xoq|'V=ƞ>|bU-2q9jąEt *۫!S Qx;vwV%\HW n,I2}&"J& Čn\%Ӱ[pY/l tCkdU-WbUվc*kZ1N9:1.ĬKUy]?'@8[@pv+wF @ ,lW.77 @,":b/? @+ G{i$ }[ԛ }=F @dd \o.,KEys!y- @  ? qwF7F @ NKndaP_zsazs< @@Mn; bͅ'@ @@8B_p!  @koF{g;cvJgK @¸JF41 sϚEpV @ @X&'Y>"9 @LaͅGLͅ#l @Ib& _pCmBG!7曛 @r% ~}㤶07?d{x677 @bO/~br}572 @ P).YW!nXʎp7?dxE @ nKW!$ ϛc…g&\8vI X l0BHwg % Kh @ 76/,Q;F @#$ #T(ͅF@"mA @`@X _8zǏ2 @ Ș,5Ca bI @[ cp[d&;* @ L@`.כ V޾  @- V]I@! @ N l_ Qp4kA…Y!@ @@@XBX6 Q&.+ @ p@d dƅ P#@ @@c/, )C 0 @_$ \… h  @+4X!e~h6 @Ӵ쳅   @ O@j)YVG. @ p@X?L -Vد Ԏ @'9Y$ ߂ ,D @bW/,l|}6. @ R rpss$ +{q…f @ @0­P?~o }=c&\Y"@ @ Xm )j…*6' @ @g»,u* @ _ ups{ ܎  @$ VBVJ?p!} m @bH#-\kl @r X!gG_pa8  @H$ V+$j8K.ĩ @ R@@ +[3… UF @F  #눱 G&  @(?SyկlMmWMpʑ @l" Vx\H&>q…ئ"@ @`@X 7A`6Xauf_rM @%c.¥vr;႖ @ @`gM ;{.Qg$@ p@X$SA׼v,\W3+&@ @@LU>O$ \HT,K%@ @6¸Wn|~hpa1  @'M0U¼  @Opۋw.Xt[&@ ,y#t~iB ƈ.lWR"@   ^w!Mv …mKkc @BA!f (N$@ࣀpAW @}qoQ3,/&m p.h @@ GjΥmF . @<Y1Ӗjmf™uk @s=5uBd@E]og _@Ԉ @|,#-T*$@ p!B P/<+;h_%@`K–e) @4B4P. @$ÉM@RR~ @% DثvC@pTq @^o  @{ف @%%. @$$. [@>VG L@dLN…& @ Htv.ZY"@NML.L6 @X@4PL@X/ \X_+ @Un%@!…C m @@>1DY1N.Zy&@XYv&@pZ\IENDB``!<>-CXIS̓0w(!HxVoTE?3K) K׆ !6-B#bv7[BOJ/%&>  A5*BP ;3s7А9s̙9+(t"vjo8` |MDk-Jzj7 zmgB+3>qy됇AAFo,Ft9o;jU"ʆ(Di*G9zaֵ8S g7>~~ٍm;\^@cU*[,g_ćEa"d_l'Ao~gy֩bd/͉Nx>IrNLRt/TzKۙ?cr\Nzn6w@eNxB@ (!WiaeERrݍ륶7Kz_"36'>p5|:d0E򮙻{/?ss@*]"בEqp L)<.( J-ާCF7<ذ$H@lxq k3G(gxd(C>A5!kAP^ooh9L݉ !5meAy9t@px_9平BǭQNO.Sw +@SyWopnǏqS#Q;g {rEH 5gNx|IKB*׀_na!XN0hc ]PFňqxv5d"ϓ=*-ase;Z{l>?+xTjt2o~cG6y͏vv8d2\"TOj~Ûr$}!Y}kc :(ϊzn1]*fRN0]rs,՛3*S2G[ 7Zo2c{&=eCtA[Hlͺ&@[* r*Lfӹ+) :8&,<{Nu/} Xj`!+O؆Hrs4H =B$xX]lTE>sNlbh-6eh@K X&%v *"dMyIb"UbMyCcm0sfnli͹3w9|3we`std^,uP 1*XUru@y""]׶Z G_TN- ]A<eM&I{Ym~pxoɲ](-P K _y]#ӎY/Cϋ Wgow؃xkB-Yq8G TCgu#o_T7 Q0/5x@\!ut-ފ$(6)cW>&+mmOP(whi'mb|-ѲzNp55Q[BwܞzZ=ֻLMz]Lz̗I+]xLލuKیXQ L=Ŀz9(sϚ%4Żdxׂք/֚ZTv/N$5a;˗I_AsDuwXޝ1GGoԇhiʧD|Z!w7'j}l&sm*Py (Aqt1u3d;b~oLu9EcKub^k09<~aXƯB5| X fUÖq[Wy gM?15sb%Ӄg;ߵK8f!Gi_4uY$&9Lv.BfqTbr΍: uAD6s >V$VRQͪա4c ڱuBk'Yf#_(ye6pdT9-yH" ,8PJ1_e9XFmhV,ߍ]׋alOm$+Ytb,Nmw&_)X0DTf›}Lcao+^Nd`Twɵc^6ɏ!վt+QlK|vηl_M]st5,MK2% xֵ)FT?jF$µuX >77ZS'&`I#Q:zx۞x>h/7T7h)O_d3}VG0I\VfbM1w`th>%Id-{A=?Wd_6v` 3v`/fm'F3D_w jP5aG OJ"e)Ooy4f5{@6඲!Vŋ)<ҹQ3+]ϣP*]L? vt;MX" $ +GЛ4:! @+fuF,<1mkS___1 @tYxf+]G>~nԗ?2AG5XI,1>xJʼnӎE}Ɣ@tF^ xa #g!0V7 xA4ٚ}!ai~fLՙsG;QC;!FMOSsqWAQS1tI;3K'{!w@+qJVhUq7w\ÃZHjt6"ͳ*}رˆS=NaXÖa_g7Tvh *}}?變[Di3cϼIS{iqbqK9<-nt! "{E>\Nz|Euep[CޤnVS|޷ʽm({2ĻE)cu9;潚}M3 oǻfPr!jۊ|J J)+G*h|i*GB6uh`o/@0-wA܏ktO4 [o_7wgC2Tbq,gSZQu1mX^6Lf?JB|vE[(71ʑPȘn+!XڷP>ac9R>{3=?-L_]>u^{ O MCԻ}p_d @+0c>1}WN2%sp|ɢ,E+ޏ=@V51ɶVa}7(\'Q:_EI|t +G)N囘{zq徳%)_$7, :uc;U򇼋Y!xs `s#HbFDPaBGy=jNh_E&9%hJ }gWW'FR_{+s|16;̇===Nw̳>ۍ %wG;{n;sTw}E;q&. z>W>ǬχAUNqԇ@Y5:!bj6nv9v.a0kdի}t71e}Gmu4|19 9 qλ|}緋wcqĽ`5UeGlPJ-r3CrC.l ]K!UrKX G=Q0T5Ԛ} oϨrS31ܕI%Vˊz|P )ˎ[Go7c<"'*SԻ+m[[fSV"ގ( E}&kśVPc{DRW29z,=ȜebtⰕk%48q,&+)o)sk寢_NύdM^f]!.XAxЈENj@Ί"Sr}g.7Vf,Z|آNil6Z#8a5+Ꮃ(ۚ5W$ڸ`! D (L^ߒ=tb+I1h xYL܏?"I V^ԂNNZĖb(9Ex*?,[mbT6ih٬tMSqS;KY2&TWft. <*Psνs{?)F޾SX6}x9yyIB/;[m]2 ߋݿ-D‚G5NQ B@=E o%|Q(VFQ!z.0obN1dio~x:Fy^? enǿ.,/LeyOjr,C 6n<%c]tRSҩ Lr]M{Ubb(~>>W'WN'K۲>.л|Bs8Up}1'M̻<4_ikubcҽFx•)}ul~O5O%WW\m41xvq^?1uݼ%O|vwz>W 8,!PG }~ys=7yZǃ,ޥP_(5W`wcyB<du!Y5 =^}=!媻D0=l@^ *= 0}c\rb߷7ǎ]< wba$W#.e`*6;&m'^~v/gh .gs!,g8şJ'g#V;bhRuM1>b)$OGLosc~ƅ-9oos}_L39 9~#Yw"od{iבtg%vDKTv Н!W! ǚ!] SpY:&n9mMnbp7]swWs%o_0rŗz _|XAN|i1 B6Y e!&A>{xr^?¼I1J:wpkWi\6hQ X){4̠3g[Cry ІsـyfVog2o}B.gX$g>'H9 4|s9uR>@ +3ϛ ySk*Av9%1{x-hWe=j|A_ ~%բ}5-TBZ]D>r/9>AG||t|dI#MOהuk܉5\/jAj,Qi(gϥzOcj-GkDfzߘ/wGy$0S_=_t[s?|ſŷ0rX\/s^ϓ=zf>}~AY&5EVe"R"5CtH1e?{~J^?{OA~W!$m%5j\(WO^J^?[A^?[/ ?~weϲhZXF+UY2ٷy.h#;e;#2 \>jə hG$<;îyP]١wD }g25[D wl3ZLl-NO<^:OlcUt8Ul >zandսDDM{̯(mw /&=]W꫿p)lK 5QGTחVTj!tqSƭ7 sD= S凶壂{8vNUnj7*-/Z̶=cܐ~}$zu -?P~l+C_cW${X(N(cE"Z, DKGHH;m)׎w^vc^:CTOtӽN^kN^'!Z]^(ɱ-7S,XY6';,եt;'J̈"u m 5b}1Qc(򈡷76vl׻m-7ʕn &ɡ(k>٢iCܡ53V'?ѴJyEʥ*2ʇ5-Op۷-4tv[2vߏ?jN2vJ d^C(J۸w]ݗcd-%*Åz %fv^!-bN9ްCʴ$U4UqHO"iF `! ?Pac>c !8] X@I *k xmlglps4kb]8g|=8N?DQ"(I(рԀ&?RRʏ*FQ J"4Xvls6׳{fUH!ZA5!>RQJW%w#D\U4Oo9ZHiW0!Glg.C8)m.#UL qU4B":MI7@O$L(>?@,"xZjxE8qߒ\i4u \c!~7.6|j0qJ8sF~XݬB7g{&j\}4Gm[ B9a64Γc{}yr'{Fݞ19H:{ƸNA!ImzZ/4/jIm !R\G{_e!@1dJN'98鲏Â8fzu40L5V9֍:ޮO#+ BC~az&F,G>4ic? ~&9\.xΔo%(-K%!d}c?=vMx&V{>cl.w>YЯvP JԟofW(? 'f|%1?Kp]" ^iARzlp)\ mǥ["k5~bzGAw}Jsojnu~Y/Ig5Bğ^ s6XIZ]I6f=%_kp>!o;LNh!6~ܪ; &B 6<<ʤ}4M~uV@a) qU4U8)g]=B_0@C ե26. qZe toYi67_&f~au~#/ngAEsަ Bۡ.,-K&[W~qmi;fbLzr˽ZM.o}g[Nk:M(96@VQAþbg3K5GiY #ÉHD̄Tѹ* B9m33g{|^S7j޶`L2 sc,9f5CCY FPAj+ZoTo۝\0[:Kc~ FcGS>wbwrʏ9r+aw^o(sp;|?܊tjh*\3x[E6"hѓ Ulܔ&p75n.۸6%Źu΢s9ΐsQO1Gƒ#iwx]cXI|YzfXCT%͋f_icbSf|v'"#]4oڦn>>--Xm$@ JVSl[%d N`! 0k!(LTI[ hZ=5 xmlg_noMB'*!AjBHD rU2✚c[5B?X 1#!V(D2Z+ʕPDFj]љݝ{?1YyݽyD+pK|8w+^xvBLwSb+.DL[$\[*yȓP{cZI"%S:/T_'U7Dޫհ>+hqqX? -+ 򻥘ezDn/~%(J4Vuyo&+VeMʕ+yR|LBw ï* OX3kB qUdj0weք:`bblòb>^Kϗ"s/.Py }O~Nw}7y;NEt[xyMu7S"jdYʂ~D5T'!< |B'uLb?)w*ů/UzQlu}BAqTm=2U)9|1o`XE/X|iwΗ 0pT*^|s/iu22]mt_CjCgf_fucȷo'M0q9[~8$4 =ȏD~|+|N7?A$^_$%|2﷒E|Vϒ$?J~ph;4W&"L|>CgQQcȷo'M0q9*?8$4 =ȏuƝ(bߓn:3U>3U~ *Sɷ"G~,pTpTucȷo'M0q9ᘩᘩ'ɧgw!?@~%1S1S7I~?'ȟ$KCgɇc74'בo!N|?as1ӛ.qIi{!?ۘy+[nzeq:cS^`-os/<~m5iET:dN*nk=|/k\^+Ծjz/¿gR}æi_-Ԧjl=YƉ^Y'ٯ؍r{ǽ3g7{Bhj{e:72GFPMk_t=']dzfTI6w^j}Yl=DCĞB1b7;P?7S^ϭCv!vXau ȴEȃJ|4*#*<6=mM/CrHɞoIm3k>krSYȇ/tfO '|)m8Lq g_DؓJo8]d>Y泭Up \U쪖;=Vh$Ց#׺Z7" ŮW=,#Ǯ3l;" F#nL3]_o>}g"^}ʜhJ:Bׅl-'^cY?vKT}Ri31w+OǿGwzeT~˲@r=93ŝ0*bͶZl:[}*5 ̫}M4LC*JOg /VZ#3{Vr{t|7X-E|^o{tko-gk3 7-:%Z~㶊'X)grqi}ZYw]hq~ GE&mnZuV5OvlW3_:f2<*7׀UU`2Su`1XX X;X7X?08X̵4[ni,Ke:zF.MښUؚm I^`.M-h2V]`5`M```gF&`UU`v/KՁu \%`Q QoE#ZokfU``)f6.>!1,mjlX ,V 6 6s-͖[m%`K``ffvk;v!1,b`u`-``````90s1`I4XlllTn-kϨ=hVV kk˂٦fLց`u`-``````90l8X, 6 VjkVakl'~`'z΃] 6$ʈf[vՀ5uƟVV kk˂Q(X ,V 6 6s]?,Ke:zFFVk}t-Кs29+mU! KdNYeXWqq&K֊θp,2f{e\uBk5 _\iG-~Q=ohxPGnQ&*o{]G3˖-rl̾Kdy,8ss8/3=-6檧 =/yv;fwZ}ZГٵYcj4- uϛ6-:0Ӓim[zQ)vyTVDžbs_OoKzGxOk_^k3`! d]jҔ4؍,Ac( xZol>CmӜSccp(`Qb)V8ƜqJn& ZAJUPU5|4JJU9mJ@U$G R6wsw`==̾y潷w(ofwO!BOyI35 b%Z!B>C.B&X_8f+}Û ~[0v5!3Pl}Ivn[؟~2NyL ElJD1`MP|IAW($xQQ!$Y%x^[uD?c.wy~~IR 1֖c?hG~(Ey4hZ@cd)(Zpz?Ym)oc~d/rq^ߘZCm@[<Ĭɏ{*>y4g[{OҵZcaMzvx;r=oL\F}v"pÚDmUBxiF4>mz\lcmMs״aO >&-Um\z1}zp!p4`o!ŠcB6ESBӡ <_rX+m߲VM۹'^_醶&]z{!kH6Xfj-+\g˳.zx{_'Ff1# =_3c<.ƣ>>ue Qty;J:CQy)Ṕ̣{FVtTh>~LΣyvhoX*?/J=yi{ P]}&G7“S+d͌g>e995ݺ%r+k&"x}ƎC3۝VL |bJXYU¯dL_ 8&5E_C2k+zM>8L6727LnK4mXS%!@JUײYaVXP aۄqlX6KIvn +1أ*GbFM4%PXRXRa {Na'R؜n*X7 iA< >"6/Zd-⬔?|]%|/ٽ_%B^xH/-ޖ~_˿7gQ5~{F/@_* њ YX-eзN~7QNx]lT{Ǻ 5CCa(l +Wا!M+^R +au+lVǥ{Tbv^al,=3^a5 Bm}<#wH>qe~Ÿ?aAQ_qΕ`9؄-˙w*$`!E0~̙=+Qw(~HxWKlE];ΓX qH8JQdA*R`Z&I]vd[1ʩp T z"q ;UOK )|_;uP!~k3;;n.5VG3s"ANvR-uOT&ʴ93sXu^btj"(L5]#ZCo@/<)I%JSVA^oX {:~/0s]n t7-?S7_JZ]o ֱ2hMUl`ȵ/^i Jwh7}?]KoWǒ0{%~ӐR>`C7x=;(h QB/.&G((qW7Kv{f},vXga{MOtzL?dsocSr>Wk^~-Ѐ-nI mvR'OIh]3wKSN3s7EO:qdML9dQ3cz ttBx\Gq KܿM:5[lZ\u[o]`]bKuiF]GQѾ6xLT]zyoIRȡ,2)[{ ηxhŠ]%Yd݄U-ϱ?h7l;湰i'xm&\kήX XQ`"N5a^#|LBc|Rוz_ bt^}qDۧ` _>Q׾m>y|"5KFs\Fft|Ȱg}3mąKEv>}EKU]^,-?-}wlTV $۩뙴_SU+KޅTz^߬U+t>FhnR/\,2~FDH!*7]:OV^n<βtkۈ&˹|ox%?<_QOy6b WcmŸ''Srze-Ofb1__'B1ή "K#bè6AFPg#<DOoXzԈ'۰_ZW VVg!Epwj)TNebf~lj5Y(bo0(c_=`! '.*m;rhO*1 Jhh xY l~3{ǿw9.P[2% BL ,S .ƘZUB]RѨTNRE*$ic:i-8HJ ZS!-Qo>{o7CN9:(Llo2!cG HЫ̔.@)b~Hz>f2Q:Ew[:T"$SP!!*IZNEUO崙vzY|IzU.Cf#f~64&ڜnj>Ji:;;'YNhS EjPՒPUT)%4CU@iZH;yQW&M_ èw0kA~ynkp01^LJvGzE'zIQvRHFYޤyZU K- <(T/SP7)@JYR cR.!%J@e? f;d^F2@Cwh&'o]zx>L22q̹ӿX1v8V Ăo\w̃ 3(LL<&}љAPȮ_Όg>>t+E]<>}Nv4 t1۸m|ע}~Zbgmg'La/g9z%-=l(u .+Khk|9CV:=qg~Gw1B#<2c,=#*UPf}cD_6u3FQMkd@/ӐE(/z_o,ʎt3FLGc=,UIF9_HC>8 7|⚯Mn]l;F="\'Ciz=$7r"w뭒KwbHĈ^E7c˾1i#qlyK/1ޭ'GڇUaL0]Y¾=ttMNWi|rAO*/uShz*mԳhK|%wo<GnǾuL;N}]KVB*ݓ}Nsݨ*`FdtMw0S))$όGWړ1DH#3L4{&hh3=c }sc#O[]w3Kʷow+cb*YEU{*JvUcOfRخ%*,۶ ivERNzX^}\+>ڗ}jǴYh떑{|r2֌Qq9duXu7b3 ˨fKYQ`iv^^^aƩ<V2z`e|bv5zihs߂{pFچem論 Kު[9^hEcF7FLcӌɼb9kbWsl `q9U{ʥʥޞVm`jK<҂챸%]n9D[wh6n#55ukjtFrW+`r[uG$cފk;ug(p{xw_`$|Z|dKx^%|27D}Yhk}k3Z%֘7;!_`!V 8ćᵅ-Vhh$ x[l\uzz]z78v|K'pp($#~َMPRJ!*> "JVC-PJH">*PJTsfܽwM&Wwyל93לU0VA ~%P&oڸ#qAflK@7_" >3[X1M5 BpnC-c; e30/c,cì1l&X?a#lv![ .O-Pn T{KVKem;Vx/vf ρ_»'$9+9C68 _n#[qY~ h̵^v+~lZqOW:g'x@_>:8lU-51z ~m85Mx Ci}!M=Lؒl hՙΫ3jk;F+34w*܇.FEa簿Mo7eYf+}Mǻ͍2mXF~~c.uS Olp}#(o  :9=<߃>.УgeqbM/KZ &AcA@'TFppae| ]Uυ.b>s+m^/g\/g^AWqGzA`#(12l?)jwڠA)k=lH;e%ۓP{(\]lH9cAd +m9ܯ2G- Ϝ/^3eQvq۸^ _N'.>|VҚU9O zoOKeNZ99ywl~QZ!Nh @~UA@Y(G-bv\V9+YwG_bKvzd,5P%n vEvwqJ@>:g>pd/uVPݗ-` 7(/җ6aQ^4K5!ZLaAkLblav]CeVao"i:ĵ1"~femfDGudz?cEW?x0A s-$`lʹʿJƦ惨gs@MmfRZN`n'6F髩WK!_BY]QXiYskzW%QH>!$} 鐭\ fNG=GzEGopyhWZ,(_px=3=F>׸乐[IF#7+JEw G]yА}y7s|삹>x[ >m]L|A.{T4ENz]IOjnFOkT/wlgRR{qS{~mݩΏ^ȭr^7N8r'w—wY]~΋8na%/N~'V9/,s.9os^x8 kwVawq?i gv2|_I-NSYIy#n b~>eZ 2 }EޝF;¹꺒xK5F46>j#PFFB/1~F}On$n;# xE8a 7= u[+gW_EJGa)l\2K#m7DKnd׆ZŲwpߝeS"Qx>[9vbPv$DsX{`r*=Vi@⋄&* { wJԝ_ӈGj*QfX@ռN}["Y MOL 'aJN8dBɄ$'o|F+ˣܾ:5io[wm-jfW"k3ǧ|§1 F?wT]2/HHANz 5ߌyĭoHط22o6D6}`}q(dlcxNOMeLrB3@ mfP&{.""hx5sO+(Df,7??eJOLvm{%բ>5V1_20~N"7aN Xkj& n1v ߦسo"mvYƧϰ &f jA:10sEn斖sxDk2f ٍ)_.1ރ*q97' Hۚ'3WvP[ٹ{ZǍ`c)9p,E  WPp[;p&"Cr-]ykŏN mSPъPq"پ@)c-Iz$d4qO<<  s;<.0ř`EM苙Rә$nb\Aإ C 7`-Q w[S w Tv mpi po[S w WV[gYQ wpO)L6R)jpK&KF" < ۝n+LP+<23TPNG  IHDRBsRGB pHYsuv' _KIDATx^흋$n-#rNCJ@DJ: ֭ ]I|6>Sm!ٜ~oxl$BU   kߟ~d??s UkuߊEa%@~ ц7 zCV 1u* )۴RVb6{i@`dPߘġ,=a'=Nv3B_cR* qrh=KtSG@ ύ>(-+%A_8sߟ>Q 5 X !StWz)pk\8+Q n&p(ی8i䑇sVZN ]d0+Pq wJǯA?HfU+¾jA THȢ~RyըijvMt־Ԟw}"nK Yz$+#p͟PJUÈ#hB^ﮀCow藸5 v%To_b])榝v yA`3'>K^E~_}Bf;-./›nz`mggfQd6ql!K=J+R%QX }xKWApӳzl.p쇗v xFlv/T}SFIWz՛;2ST -.r0Wӝyȥ:wىHNY(p!18 m+%/PA!{͗Y}^vn ԠxK=[2:̴YT_ xK =1n{P;|M#|#NdM9lWCv=*Ϙ3A=ٜK#gG[=-mŰlO,f62{@_hJ[M5ؿlC;ϙgK&Q04t8ÉP۞Sejb%riXw>Pf@u} nji3TKw|7UM /_J ,Ҍ㚍~7<݅x~pws:eLZ,ͺ&Xd_D`](\` %A׾~jg a77ڙX.Jtc5h2L51u.w22 wn Bg-nJc5g/T'T88=dW VISTf1HoUO+";T3rZgҤ`ýTjXx,limuVaGed{ѭ+biYP̧dw {Էj< U 'G}r{R}Yw$6z\^*"ۏ0^z꛽N 0aNOk;FٞR40IN}yUʛSJ~/#;k YOO ~8s}aR&qTWJyVr4T;I8yٞ-5C{m`E=E^0ŲW+ZjH0@~>k (>Je0$ϒ&8[ yUա_o@GU'wg/rmkZ w}QHw .ČP߉0Q|!|rSeP0JiljрR_!P_8FOuilEF4W*oBx:4LA Y@!}ݝ(E@`@_tNoc _ Xu|ۇzt׏q Pvf!qS0gEw{y=MFjWӻ!cyгC`“lg<{-jcΖO #rENZvڦ! /e􄸧uwWEW䟽zkQ Xz0Av֪tA& 8ªQt}ʛ:)9p* 2ȗP4DM6]Ε*Ƈ'[iL U#O'[;opSpAerg%sFתy vrfѡ.^5ieDr;!;W{{ߚ~):/k_tITuUmR=9p&[Zk7 h2wBȼ?X6j`p3fkd)l6&%sWڵ[,īHAr$z%mgM)4jО](6[]*aMpIvQ[e[m3AbӢ:T_J4j*"(1t_g2]=3SF} .W Y ܗJFr-QdTܐɚ|VǍrT_#(Xˎ~ h552KCrVk: / )R Xp2ĕڗ'OY:6Uӌ#3ɀ2+])R)[+5x:_Vg ZnYJ[D><[t_8:uAGLYV Q=.,NM_@1LVy:aiщf͗2W=ŬeQr.ى\wN$z`Kt.y.EegjjlN Պo"MߴG :ư_y iroO}i.T>r}-^|SQLk [`%wÁ r_.հu?>P>n@c)')Ʌ'=x#bWub`DLe\;V{Bn2Sis(f:5NƓr6Wg;Ѭ E}07ْ&Psve vwEw/|y?ލPRa!fKr JmG*jFղl};tlP]*5W\ gz,*UK]yT hwK=ӹҕ82גנE7^=B$+#SךjCz?cI4%O(/OhΧʤOU.n^|zmKŧRJ>(U[Fݴ=C^K$dM% yYcӚ6]Fl}_}%2(nc&#Z<5p<=i휒 ;# XN`T@2l a/kKRQRn7?{/Ŭ?v:˄:A!>%rX6)lBTPߝQ@OIPvQ\)K>W뽳SdikKܯ<;q/JF'~_?wq}}#zX]F0m KJott-RY-W%RHN,sU/>(*G2URKgf~P_x/.FNXU+\Uk틿[yn51҃ yc k_}N0VN n)Ì܈cHX_(/uk_/wG"v|;?,go֩;Ϗ"[nh~A  a pJNN㸰H({u4j2?:D˲.tC}ze0YwOiu-UX#!R:V2RAV^<A@2/+~*Jc:ɇYKۧj> d<wҁk8+d&[Ek?n5-x+nTp~ƙlG^OR Y(,sɒEniԣ7Hk&MiHRiGi+w}vU\*̴fI $=Yzyo\ p:;yqT}9vlԉvMUZɢiİD4vP!R&d-k,RqK";M-5(p4i!2dvi:4ՆeM<=#ΟRǓѓfy5ÞrSB!SW OJXZ 4+ZAa'%9uNdĴfZbTEHh=gc8W=x\U^?),:nGtWrKU5dMenTTg!rBV-A׾s` ng#60Hxnaey+eˈ =K_^Z_f kzsK6:!a{wVhK;~w_kqW/SBJIvi\OE(oY yPl_t=5e12ftoI ,U1V3Q_ rۥÞgR-B7&JT Pj v )R]ijک&D}9sA?} ]c[-B.M7.U𘸣%%bXOw}#:[FxxKERE5BPbX{t%2>){R߾ìەgϕ>tst]ϭ=0^ ٰOaZsMᒕ(,f[\HKUT}i)ksSӑ~UD ]M#ҁnbKVVmhކ*7M]@ҹҕ 2"$fFu.|0DK@3g yrN i^Ni-1o+T8UU@}7anj@|?ZZ]߹UdC^Kt>[r6%J3zV 9KYo R#P,,2;%UM,g^#|:FR}͖lkg񷿣ju ׾g"P2m'YU5ܺ#|&^|iKҼr+ߏt.|GJVyRZb Twh0-+5Ɵr[ӊ/G  I T4յuT¶{4_Y=1@}G!/' O]&!jS(zwӞ2(AIw L'bVx_XNXςSW}5}/t- SW- p|ȜrEիxq:5}rbvX QWukOs`j en2S!/+VB}WVuQV?Ói%Op]ˢv/~3G  !P:g$R<߈M2,c?LROՕ|}E$냿LMK.=* _uEV>LNc逓fIh_Εmyڧ ƷeGO3AN;zQ-U%7.]'ǫo6/:!%N)q)V-X\,ٔYl yEUKM*)UݩZĈYt=;˅Ц~4֥TࡉPÑfDZ;vsr<ƙlCw?+qdk*q2|yD%+V}k.7rЗ"7u%p;s?Ư 7E)etؑYɤxTwWlIlBOFOm/NmDfUdxV9Lp4|:YּnHȩ@#j"*ŞT'L3yypnw'41lb.ʦLLQ}eܟշV꽒?p =uMFϫiZ0"D͑aknWȖWMڒ/s~øoE+ᠽ7i8JIyt_NJ7>]0OXbzճ"^Z7L,3ZQofIilF[ {wzur¦ܖW1ʦ:P(m-y}_o.uMyE}J&qzXJɯVz,2V|J \X-z:YF5|#r53L ˊglϵȥ']Loww'l./P6X?,.4#T_mK#{_> `(8VzŎ馔qol9?˸hyg3N7]Y ([ʛ]aw,fȿi:9=PF(Pb /<=JK,,;o6٢dqչɚYS(q7 J\7-oKvuFm'?]ZB[Eژj8N|]LjޑlP0tE!wV_TBy0ۢYR,#?2Oz7m[`2#Jv:m |^^L✞S+fpN5 L*B(zGN[̐ړ~4}f]NES՝A%~r@\-MM.\XRim2L2dP/6ӵuci |S.KpvQمxuu^M`t`'@L!r' uo`sQš:,}e4ݭCUt܃1LрYY©\_ ԅKެ']5וCu~dyrEya]*S63# ޕ pjXC[\HNz?+ZaMjT\i-)7<]6@&<:7qb-|bML;WؓY~A%M8nɺ6#b `E ;hd rC)K٪i|S^*a]LcAi$jYiy@`Dz. F 0־@x*EkAfˠm0@@t*},P>oNNh6PmQ'0EzeH=JO)*=xo@}"/G 0tKqXNy~JNp z <0_n۱\I!#! b4']іv\=c<7m7)M4 t'6?: q> c%P_\B`aPb)&U.^O {U~΄' o"4 ##n  M>Ebg} N@h8n) 59@{FA@(PMi #c@}1  /Ƭ)h_7BXN[򜊫vQQAlPA@ Mz  "pʑ{ԗ݋dzX+ wh8C ־>tu&-W>eg^ttڻ|Q|Y޿;ZwEZ+XV\Y5Ox_}uL 8F:  }5ϥmde#}QgHo8BK/*A.A@@I뤃d   wU   /@@v&@@@ >@@@`7@n6;)f{NJZP8?Kpye67/'k''6݊ZqzJpo~k/ADbsjȿǕ:h= Nka{HRJ_-(ٰB"؋h߷ ڥn8C{_n.yo#kXP ڞFgɑ0it.SqR_ U=ss-7U夃M=JcT1RK@p)hgMAձeQYzԷ$ Q:!q۪;G bU}:5[g#dN-[ezlm]uxi;;dii,p;nz zf 7Ͽr )7%4[ L6v'^@}t)USr +{X_w+g }&2Qy چc3aMqW ]>7b)"Wc`to:Z-K7\v'nڼe.Ϩf:vE7m'4&;kO7-ev0zڇ=UTc5\O4YG7VhNw5ȱygh;tiu>K-dxozy R/66E,f@(MԷY{3`+j^'ߴWF.u.w隸[}oHHǁ{#Rv)utl7#tg"|T݉K)첂WhVdYwEke6}U#%Wg`unuh7AjS)kSqkfS[lń7Xc5w[i%o+ N&4SݎUB6[]Z |5g|:(V;6A눵iq[[ƕͲpG3ּ bS8v=秙1}(`;v+)ĠاbiAA5W|2P8n=N,sk/KǏzGwImڭAX N7waFpL`;#F^!<   0B;ByA@@Է<~j:}P:~a@ <G~PoE@^nfw.07Q7b{jY'!wSj [) PSFVvwzETr;O^|V7+)e^Cx_Nc͵T }W_q3M׮L^־n7ln'Z4I U}9=t wo=  Xb(im?r -,hG"Ϣiq3\3%9+p;#ez,U_rvo?A%mGns i~{WE}\MJ/)1}TŇ_ @ t$C_qĀBMk|B}+ ƹ;g@nV_>sUDIMLSW顪}';NC>Qcg-(<-ޤiX .O]"tؖ*+kjU^Yc:f,$'?J=/L 5uXev'm2A'O%RJOLKgg5Y{Ѭp՗<[A 3~!oTJVVKܪKdzA/IV~d'Φug3 GsvSuEPZ%j)KY"c=258. p1՗'5odB:}s|z.:)@bJ ᕺ˿sE596٠BߤGiAD#;lK)͏ni :Y,ؼLzWyz *#A G՗MX;75x(*aWNM fA9  'ic:4ۥ@A@ o(sMW(%7q+dWG+'!4J{+7H:j>-2 `>-x*?nQBdQ~}'aog{V>mÓޙ&2-I8'YJOۈcWZr_Dډ,zX   XyAM}mWp՗C7x#l'2h%jygkIߐ^w>Z![hOJGmK}2KݧZr35G͆g}[7ߎa  0FI3 pf3ǟ!S0K}>^>>e7:bE6-''?"W(|BKrYT$>'gw6v@O]U4U;^M U.~&e‚y1 @VW#Ϣi@w4K_1 @7H(}61Rȕkc\"N/oFy>UϯHV:uNhOo j@`} ݰx[C#N!ب5 #Y7::- X,zP[˟o7cZ !EAm4I]5Z*,,z/<7ek|KZ7Xlw=uG!/Qd{e $+jM_BZ~q{4FK"q렦Vt(apʪt9ս6$ |E}_D|h}W榕E)R4$>HVKǼl!.' E2XxS= LҙgZSM4ʢ6Jv{6jU8N]y,4gfZ>Rqċ砦npw:[4qKvni43? ՔU_! U g;ЎZ @bPߋkj>mXL"uvPvf7搧h{/ bZ<ZJOsɓr TjFYBtO  :u5ˊ;.\ 4tin4ub0kJqO)~׾R:{C %,%Y(/m ׾V`Ѭp鳎g@#k)v?x:{bӣi|@gуغ-oN}۸NMl+=5޾;*Y`zL&;K?,zP߭*ߪ[-,ݭ ׏k<%0<}GX#/HkVy"^{bb)U#lϢK}*ޜ+}} ܐyB \HpXXn2t.Rl #c){WJ|YpWۺI׻~`㷛2W_dA6t>;  8^}Iqv t= _@,cW=^.gӥ+4h'% 5Qߥ?lN^yVcp@cԷWy*@@[v _9@$pw`u?H 'OpH&0o>,[uӏ͍eM?K&gѻj;b6m>}hv,K _?+gʳNEN#Ϣwp]^d{l >,zyu[^Ho/{ @}7һ 4@}O  p}B͏?},zkg^$gYߋ^ HugvG<yA@f2h,A9  >n_AFYzΪ;N98vKκs Uو>,zmk_Ԉg /A5W^}|3r׶8yœ#p@@@Bw1@@"Bw#x  |؝n57qsQ`ּJ,M0`|h8u%,?Jd69^25] o^-3 OU6];2'{ :[kvo%6^Ɵ^g~J~1^mH3/ ڀddipQV_2RelDžeUͳ}@[[pnH+AGzVLcW+Ja'yhN}/s5b{i4IxI*haxN 遂Ŏ>`ab +G0@&n(Ю"&þ9zoW]|G\ʓK׸Xuʘ*OeA^Mic?H;#( > Cx|edgo-y"Nev[`Z~z{R;T$<Ғya|QӪzp6,ihEWYR&Yꋡ|}/^^%YfIoxT l ќ/Nfؑj!8 `qM%xIAEwq~z[g0qzS<1)iNW eoL uE{c~*e_ﮮ)=f +~\<4j&8^+< mMJES82bz7_?xE%iiȉ{lޔ5U"`jZWcnPL,zjSy##qnvv9>l5լ>Tc6) GSPsx>|J&z*+KG&M1nYzk?vַ[Q6p!'+# 3 ̡n\PQD5 vjCarU~L(}]ԗGr Y#/;ǭ;wx=0 y,riNc[kj ͨG{6.TDE5[uC!?2}2|MH~=cD{Nn(cˣ/o9+A|n{e- 7@Nwzo_@:g\@B;ʊ`T2|'ϊE>y[RQj;OS]rQ=+KC[/2HZ|8[}KUIȆ!I* m5.NڥYH@ W6ooQ߲ٟM {m6=OdQ76JnBwӑ@@%=ph6M8Pá  l<4@@PPC fLG,IENDB``!~nbQk'>^4 mtO Hf&:Lx\ xTE}TD$@ ";v ᑄ O䱊AoUY#;:+ h2LQUGAQ7;9.u yu_SsTݺҼfLi-J  []B:ǧehC}!܆|M[!B}Ҵ*fyMA1Ԙg(Ba:i|pnbOJmiմ~-qfvnQOcu{tWgf)vs8Խl2O:Iy<8ea~17~ sӈ07 ).5nl]y.JR]"[*a^db _zѕÇ d8b!a2/i@{JB5b&zr,]Mzvޘ/Qm=El>U[" [t;C[toCl([آc-=-[Pwt;aAl剤;3!^<gwFWl3?SeL㴏߹L@y 02tF m,9ɤ/ןK,sb#~G-}HrZrzUY}BdNY5U9_lЙ͌a>1 Zuv%KcV jlVOŷ(pu\o1L1<r=l'4ZGi͵Dа~Ty37fgs:5-Eqp#su>L<1F)?@\C#փ 02l /FC䧱}q%8ww4/nL#Chs?Fh3Z)\cqlJr>H!YY˔Aj]0o M"9hy"K6V07BY_69 < ´K>R0ʒ5tFóB,-%3NiMi<64뽰λC6@Xz5 [Xݬ- b}XsȠگs?R:˿d 0^z rK£6a#)y [ m'Yƶ}d52}Ccؼu0_3"|3s4jϽ?ısPX ?^gCĐZ;ޣ5FVp?H8ҷ*@ ec݉Q|S >WRQ >RW9hMǭeGvW`8FS Owt_||ԝgT ?@<+P*uc3~*~WcB ĚW\١lW +C@Ut.ynet:Ws1]lEMqlc/P 7l:*g(c58*#T~hͳv=%a0mlنg{js/A(^iy/ [q/Ӟ"C7>Ͱd򌏽یcFm@#?XyZq΀Ocawfax0t7 Aw%4<3E2v|&UbyOS^&ųt{H~ߪx&~YAVJ#N7/ใx׽èuo0ks/7v7pw ]} _aLGioӛv G^pe:Z3nBB| qN=uiA9,U@,F㉵7+x]Go ߓ]?o= y-bzx!.u:=P"4Y=%QE1 6z 'C\&B7CEO|+[Jk lKDi/d"bwv?{yO%=0'`%?sϡ?fB6Ba J9ΤC;=ƣO~HqT>wly4 ӯ1|ağ0y4W|r-BEo6f(73 |Kc-0t;h(hn3kN ;"='O.x~Dr1>$$$%O@N m.@o^݄Dz~8Ы%|Ы$WJg\^&DJ8e>D?@H[@/: lW 8y1.(aӈR𑄕'; Msۻ A&'k7G}\Jk<4a"_Ss)esCOz3~ {$|,u͉]^Cy/NYRr%]DZM]:IW _QJB|υx@gSv~!O,j ς:sxY“ EMo}; =6a{`$|ЯI8ΕC]9k$R@#>"#8m#l ݙ@7YәB;R}zþ i:oBECM6^w%ɾxgǚ6<]D0Oc8WKz4uK{ < T h 0k)}$)eke/ 1F1_6/W{ON?({Qnu}Zx:X\(8WbHz0Ty )\s!1Al7l~& g+rPL(.*$|{?G\MPM%,|PIeN9զ:u:iKYoXѰ~aN5ddВlxfEՖIvJ9ENLxm<{yў֪:#)|>kцri uJGic1xfK1k#KyzZOoE}oq%<#YxbXW,v%#7 ѥZx~Hgst!h :!tŞ>n)ŶSC?=YE^8覈h ]yAkYmwT;,b#8z弣"Fͫ7E,GISwޡ5=LB]v6E&[CY[Mp=_F弅`X1ƛJt!fN )I5R5;VhJ_6~՘ #5JJ7̡XE)~O!pA[j3[e ^Qd~q_k4;Fԛ+=JGynI?þ!KY&-'(,1oӔSE0`!kdufg>̒y``:`G9xTMkQ=$i4cGBE E۝(HhD[c u UD$b+"\ʥ7u){3o2IEf{g޽>Y>2:z൞bhyʋ?*Brm>!]y/[V+^"e"]avn՚٨ԗVfazY]d8p.i5qKV/GN@h2Ţ>`D:? aŻt0H+y>*0{=G* ܭuv~WsK@ɬBt}sYGڲ_Vp 1~ RAuj V?|h8G5\$z(~c~-S+"kĵ(s]-Ƒ^($ePmi0Gh :ؑYZ2#SaeQH4U;hHX™;r)g*HWN'h^)7GZgw$")}C=Q.N! Fb{C%o: J`!'x\ pT>τd7BR&*;#)b@I K&n Ķ*UsDЁ:V3VjGЪ%#(ҙV*vcXsݻwمkss{ N4G\TN/U-"izrХ $鿞͵p<Y7Q ([&ᩄH.Zt-IH? ^-\g <"g|s P os}Two WSy9{lڽD>{,Ǎf,O1/m1zUsYYx|Hӓlչ*7 iy sy2,X;`{q .x 0;6oov9Qe6~| QALD'@#pSma>d>:<_ ҭ)! ɹFfzɯ#}Ɂˡm">p`g?UGډ 7CN~qx_66/Jr~j'^4:׭>&%uh1Ʌś%f]\eȽNx_bĝi8,ez%x^kbCGJĉO9!'c- 7QmD b8ԒۄQgȎ9{)U> *CHgu~['+nf)_2q N.sۗGd]`blAZ=eRu"X~]\~M6X}g:}wqȲ3UoZ6؉[ꚫ;ks땧klǼ7N11  P#j!_j i pk>eًk9o>_r~ޟf|98\v֠_'{ag9!n;`}E?Ym;jOmn$Q K {^΁..qmUsP7=V-+%ߺ(7\ cw|i@ 플|K[R~m.8NLGٰ$Bz0.@8|qWyC}>ϷOo! xCY`qq?!=Ů]}ϖ`Sm6qd. _fv5ÖiW؆vU1v k'71! :x6ċV\}3GPMfYz ۀpٓNz5ު;9ש5BU)EZLbWJ2s"cZF~xy4 M&Yۙ~N6'Ҁ#+V`-ŊaGf6ح8 v]dfjNk`;g_c#tGolbh9jv·`\Ǯ%̮^XNi$1Vd.˜n 'e]Beqܣj*eV9)ް-<vg7,?UO~bm!m-#}b5~O-FiMlb6T!:G+6/)bı&{uCAҧ=0Gfs>8Y%#qa&|w|OmGs |#ˈQ~ *OzukqTq7`fCwH k&؆8Γ}8Gy fq,QokI ]ooC2>mgv: 㮛bt `w%cḫiHUtT1ǘu)``-`#a<N|uШϋ~__ ~Nllı9+iӨ߄} rFFJl3ˑ#Hm6I:1]MmcuJ7EK Os=&}CW}Fj*G2~g Vߋ{5ʹl9e6z]mScJ%gsK]8V:䷏W7;*X̺ 򫛃d={.w,uˬjI>L! ɛd$s[`hv]̓mQ%7~lE"d¯U>Zdzy{Bۢy+8O{Od4L+̻]9Rq o)E2_|~gLl'fК&yg4W3 |^)˼V\_3Wb(/Zrg4ZN3G|M,nsq>e>ssǫs-Ke6+0 XosSsl[69N]k ͅ8_ ו|ΗUFJ:RB'!{PwvFΝV񈹞ϖZn0nyRKG]G7qO>>i9&\J΃$ب8mGC]`7J%TK/BKe:pk#G5ӳ+]}F^azbak$wabZhh%d=f]@q[nS+XӇblUH,C7IVGhVdd?l=VAg/A1֝s%h,]GևP{cz߸Ͳ+Qe ,͑h2|^M14VU p߆eq?GHՏ|4=HlsQeh1pK!o^2o7qYuVQ6~7.}\xlRzs2~6GS,=#/t"ׇ߫#˓U|aGk5ܒl3d*n <Ûn+ #?HPNG  IHDR%EKsRGB pHYsvvIDATx^*9k`ЀBz/1? ?@@hj@h@' @Ҷgz'#y;iF=&6<M|vDeoqrd|.n!J#V扭#G#JLϏ&>?FJ|*gPX/'ܿ.֦zf{7o7y"K`QM  @vN kcK4#8_;?-Bg- !pEu _x F ЛGc8î2e}фqOgj{1Y=k/x0k'O p:x:R" 'O\Ju+s~^qDfo$pDΦΑ~ sA"1;opE^^.bAOᱦ6(dVgī0N6y1o^MHkZD ?r}O'ƍ?<C` Nb%D1Dn ט{ߐecD@aaRi  pxD] p tws[&M"P Y<\hY$@? HOIM<NG`C4 H@8x@`4q\ '@3] l|o|8 xM`Q)i`  ?eGJM<~@]&M pxZ# =&Mo"pzl=d pyx"p+έq=y$D@K,Q2!@&FȂ@ %@hb,Q2!@&FȂ@ %@hb,Q2!@&FȂ@ xB&c=!)1dewk_um5 _ dH۵MߠwLHLmO/>VeQ~m6ȳO4o iM/k4Phm+Dx#vFՄt]mo3O,0O!gIrT) .߁{!#/ﯵ_7+.4BOU Q*k{k9+\'VfCS&_W틒 ڮ4;:4Kb=_ۦz5ˢ:C|515_A&%Tk;u8oUd7V!qΝwsn|5)4ѫ4>=;.#mMUЙٝ ѽ#mυd{>76VGZȹmǟ's !0KzfP'hONib$@7D#@eD< p'x'}@ -#A; g/j23Evo 9x{=ۏ)%޿l2+Z;ά 0 k<ǖ+B_g4Rڛ4ֱ5禵sj꜏yb뛅=78͑ &F@ _: KܠMEY4yyiz 5 Mњ;51'-GlNp}ݣi8o&6?Ϭ`a\YV.E5!},FUD;5&vT\v LUT\&~2id7cC_܋ڃ p3Wem1+ܘ$}Zɶ)3 P݈~*jP  #*53O >-&.N6rN+M~qr՘^^G~>nOmdTqv$0PxJBur 4g<^NX;{Yna10 D5%@U 3GGı9$zfKO|7OLiDVBO[@7@rSkhb ]qsWc/ a OSX uq/V4q\Rwww@BjM&>:}>?YވZup񌔈rMT_$Eoɥm\kғ#E}ͽ2EH.k\(p7Uu ԻjhPu| G MK<[;.n:/rk {`@+J=L&]cCV4{M9Ɔhb+1 028rv Z Vb@`d4q#h56h%@[G đkl J&c##g@Ml%F&@Gή!@+J=L&]cCV4{M9Ɔhb+1 028rv Z Vb@`d4q#hɬ2~1~AɽS*90hbRFtc|#prwC۲3UߞW R~>e?=:G\; Ҿ"5q”[E0I+b&9;C0ClM_ be۱krXML֫\.a;]s\dۑq/\mɦ%Wt4E2&ܽ/ncSn?嗯ʘĴpNNurJb ^"P-u\|5-omGx rN}˽Uɠu1&NX~]+}d`-yZj {j^mˋԋ׷=&e4r^gU>nY>ĿQ~4NӴ䵩)g N$#TY 8OlJc@ '@ MT  MT Du'@+6_C_Y' &m]|f^cqks9n=ssm)3z4?[I'b =7D_K&6;>KG+{ZCjJlC`mКׯN MMv/KVN_Țdnyhy,_cƻ5y3*4 @;EPkw#;;݈D8N=F=Kp@.w""&M< M1!]h]EhbĬ "@"/D$zv`ńJ`PS NDxB\;vY5&K&%H&UcB\lvzIENDB``!Hd -05sr ?Y xMHTQs3P2}JAn5$DD BmQv2܄$QЮhBj-jEjM5yΛ!y޹y Qy߃ѝG/M/WJS#7r\B*Om{juQGVzt8C12H)lx֎ѡddO^R,T>'7ɶ湯sdcXg;cZ7YjP5ۺex" rGҐ#QljΫh+7J ;=H^>Ox ".)蚽k_WkYz.7"D U3y&rX2] {!?b".+-D#H:$#wB(ȌȌʩm"YJ[,2n" _I74H TAĪeQ⣛ |"켠 DG0zJhyԣ\~*nP%|GjY3qȯ2|4^a4pZKz/?D%lob%f >vNs4Nx;8XE? {t3t/l? ~s]ܣ;kșܬс=Yß?-G`!0ۓv=c[n ?Y xMhAߛ66I%Ơ(%Y jŪŃZ[SEГjo)z ބjǹO&f+nYd۷3(m~]JtB.YKWb/)x;a籏m֚]+,J[ԕޏړ! 5X&O#FSC&&S!^XTzVL]m*J0ۡ#[YriMֲim\uH<: p kK$s*vm"g꟠1g$v6rSb f_9@#Qzf6m@}Ye0Urjt˽8P#joWdsm׍y&b R`XW\)84:ɥ19+H/:ڼj4B@")o4A"RyiT#DQ@dEd "3."36/[D$O*5&2@ZwI֛zSHky99Ie6cZo}Ks#`G. ~^ЊRg<2^hnnD`_iڿU3'Տ}<ƀhB:pl:E֕??ExB,t E@Jfz+NR Яd]a-t%=dJfЕ +@WZbC@&dFX@@K]iai-w> v)2|ueR0T1FW`ǃ<tM;@W;f9{=%C*|]NV6]A~ E+dFUX߅ݎ@kzJw뱇認ϭ\\1]~'.wdCot%k_/B NRi+w_.{K(-DY~C͒]Qz,?=j5 r."ЕMad/H[I3/vTl{AW+;ӓ{T0"(~\vz*]гnC5]"f<(y`sU[988kl#JNE#2QuX3@@M]1"t%"jJ +P@Wjd H]0R#cD INj0pif Я78"#\@Wnh߽v@ +52@@$DD@@M]1"t%"jJ +P@Wjd H]0R#cDJDЕ @W"" &a5tFЕ +52@@$DD@@M]1"t%"jJ +P@Wjd H]0R#cDJDЕ @W"" &a5tFЕ +52@@$DD@@M]1"t%"jJ +P@Wjd H]0R#cDJDЕ @W"" &a5tFЕ +52@@$DD@@M]1"t%"jJ +P@Wjd H]0R#cDJDЕ @W"" &a5tF>>??E# !CI -#dZyrE)EZIQơHTǸur"ZӬREV _{ʞ)!fE.>t5{l~GL|~+Е=SzǡhrRc8 [3;%/-tp탹Яڤ@Mf%~8 TLe{-OA*UtBq5j  Y"m5#0s+LU)G|>z<o"O(֬WJ&bXWӧwr_my9j):J-+G;q+B_MƂOi\~5O.H:q͓K<^x]B+IjϞamӸO*z<6,KB5FfmԦ:U4SEWOwiSd— }<,[ C}{)oz`3cdW#igvқE5X=5v|ք, Wؖ~a2٢U%jF8p|73h\̑Nڦ>DZulyʛ~_a\q9]9qUCIeT4Mn+[65گ,<β@W=s 4qʚЄ32v_<vuΝAm<3j<=2K#U誫Zb48bhQل.yK"~mE_u!ݪh\Bg5Qz˞&mAjyaѸĢAW"`iV]a?ŔL3~?tU[Y]ST ľ5rQ'tdfJr-W%kta2AW՘^MzS]y`BkSݭq}-R^;7Ϲ&trX<>]_S 56#3ꧫ_yt-$CW6i!öwooA FQ=JP+6~=IDZ ?޵(&DW-8.MLޯ+[b]>Hm$#[~gK˃Ce>x{̶Հt] S>k½t5@TWTW&QToOںnOcqF*hFՄrzS]V;]rv4O;V5UNU<*7إ!Hk~5y2 |'K}*TRg{\QHJ_&w5GqߢSO g %~yNvNs Oo MKZj6Eomjո־M}߈xv-Y.|*%]q-ٯP vkf.48߿&șbb50HvM|8YFW)&܅_CW!Y̶&}EUe$>sOUͫ =&i\UVNMaT}uޝsI]Wb_Pd)=wV׃gg_]H?f{Qoc_`|D]Ctf*?s++xB? l i/-G]U%>8^K2.up0]+1R]>k _fu v8rp"]Ѧv*gzf[n^E S š侅W|M?}0"O]Ϡ({x+hM:.M+%h0t&?QWU˕TW=jGe*|joqNy> y +:bi0hV(_ ޚDUMjbYJf&i2r7ks]9^_Ye?X@fxjwМQbѯ%#:1x:>t%TW=5j|9c6ú;WՌ9& * S0/kn{˄58+{>>F1 LPtE}-B֛@:C!!ݚ#+]RXEn?`ϮKWcpXZ%SĹD7Ok~UЊo%\-rr1kV@T5[I z <m,el;vnvWW׉3{nSTntU1GXԡ6ψ.^*tGx ".?݉*FF^b(A%7b l@`KWpYE7]6I`j0pqKqUYMҭF|v{y]y *gTeUgLJgk>+]N** Ej: !!( @WLtE @gG+jЕ=SXe7Ea7HH (%{r|$޺}ٓDqK1, .B)NfT`}zϏjR7z!B/ (q"[z |d| B/>i)7p6>gX$NFK~ F d␋4|VØR)rl" s%cY0#* uH`F3-aTē5Ǫ<16f8>.mSχw:O+GFֆƒ;r>|ؾlL|b̟ tɧ@#? H?px7a)υi'~iτ9O&Sh|܊·"}65 Fɑj~ ,vDu׷Eo DS}#];F.Z$| ֊TF7з:W5=Zhekap5B;Rv8oL(77oM699aDZF>I$(Z(-OR`7⼬ؘ13#-7bba>#=$la>@S`Za[s9n0  30~KBM -W5-CDmzHqV'ݛt-Եrgj<еۜ!7߹97-p8C79fg= 9kw:X⬅2g ;WUU@SU׎kMFLu PYR|" V)I00y%~bo!nnANJBU^PBsZ۔g:׊O}e 6x#|VsG!9r!{Cp&ǵ M# v '_HCZ5Z }”H8{^!L=vɵC~C4Bm !헷BHIq䛺eF~A6UcTѦo1|6}HFӗ|ҚjtLo"|'qWeWXc߽H#H`?Q0 K?ڧ X%'mh栗d's,y:VzsT{({za>_r {76LYTKy?HkD; țtŇ\GpґLDytcхwv~Ad}8"> Zi/%Jf:S@뎰yjU?ת-_t|JsrDUߠw870FJfe,ݚG> xXdgf-L@L ]iLZLun^ LkKfߡ}}"^i/ZD^k~m'TnAXy&GF y*Qud#bby݂9PV#1)&ts'lL86Ϧor{t†ᾛ.kݚRWh7?jJ!F?!CN iDwƈ] EGv #L9 j/QjaDeL 2:cDqg1*4VgK5g?V Yk_;~ƹw'س" S{jax¹0ٳ.lO#\i<7x @Sϰ]jlLKF0ݯ>Vk5u4A}^RhRvxGmF\ЦVu PrM`:Wt~=:z8S <.қR};\o"} 'XW|}k|({#1؛~ aӻ^n׼[-oxw3|]ko|魅5w_1%M^LHˀ9B Am ܪ5xwE|bxtLN=d]I?$s=nٗ-݆_"UݕLAyk 534`ZFl Ƒg(;5̞!|uX, a,KdE.Z*, + %KFFT۩'S ?= |e1 & OeÏ=A'PU.0$ɺ)vMKPdNdd/zaZ/Eru1^=1Ǚk(;T3 V2&ͣ?ٜ;?@ABCD +=ERT+= EJKMNOWYZ[\] ^-2$*Z閃2$Swl*Z7+A+2$Lp %Bla] ;w 2$*uR7Xb$7K!*ǜIkj1r-2$~,*W=Rk_2$K cqjq$  d2$/6=ؘS 4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOF`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UML). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fV:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f<TEMP#Durchgngiges Programmiermodell! b!  !3f3f3f  3f$v  ` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dd@t? " 33d@33 @`  n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>  >  0 8 0  " (   f  0A?"c:`  s *B"2`  s *M"  68{ `  e-Klicken Sie, um das Titelformat zu bearbeiten..8  0{ P0 { pKlicken Sie, um die Formate des Vorlagentextes zu bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene=    q`B  s *D>"`  0h{"` pModel Driven Development & MDA (2 .  0( {"F `i n g e n i e u r b r o f r s o f t w a r e t e c h n o l o g i e www.voelter.de.a 2R  a  0{"M~ f 2003 Markus Vlter (2 ! 0T{"8^  Q. 2  " 6${  ">= { z - * -.  B  s *޽h ? ̙33 Vorlage0 <( @J@   0|P 9   T*   0$ M i9  V* d  c $ ?P  8  0Hb  09  pKlicken Sie, um die Formate des Vorlagentextes zu bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene=    q  6 g 4m   T*   6df 4M im  V* H  0e ? ̙33H (    0 9   Z* 3f  0 M i9  \* 3f  6 4m   Z* 3f  6 4M im  \* 3fH  0e ? ̙33*  0 R(     6(   L Model Driven Development in the context of OMG s MDA Markus Vlter voelter@acm.org www.voelter.de h:3f<BBBBBB,B BB~@`  s *M"H  0޽h ? ̙33  @6(  ~  s *8 `   x  c $ 0   H  0޽h ? ̙33  P6(  ~  s *x/ `   x  c $ 0   H  0޽h ? ̙33  `L6(  L~ L s *@ `   x L c $ p0 `  H L 0޽h ? ̙33  p6(  ~  s * `   x  c $% p0 `  H  0޽h ? ̙33  6(  ~  s *\$ `   x  c $ p0 `  H  0޽h ? ̙33   H(  H~ H s * `   x H c $1 p0 `  r H 6A! ?` H H 0޽h ? ̙33  6(  ~  s *X `   x  c $ p0 `  H  0޽h ? ̙33&  N(  ~  s * `     <@  p0 `  H  0޽h ? ̙33&  N(  ~  s *@+ `     <+  p0 `  H  0޽h ? ̙33l  (  ~  s *3 `   x  <A ?? F V  0$6 0#  $Generative Programming & is a software engineering paradigm based on modeling software system families such that, given a particular requirements specification, a highly customized and optimized intermediate or end-product can be automatically manufactured on demand from elementary, reusable implementation components by means of configuration knowledge. Definition by Eisenecker & Czarnecki  2(23f3f3f53f3f3f3f 3f 3f3f3f3f 3f$3f 3f3f#3f3f3f3f 3f%3f3fH  0޽h ? ̙33  6(  ~  s *D `   x  c $! p0   H  0޽h ? ̙33  6(  ~  s * `   x  c $ p0   H  0޽h ? ̙33  :(  ~  s *  `   | 0 0A#  0P   H  0޽h ? ̙33  6(  ~  s *p `   x  c ${ p0 `  H  0޽h ? ̙33  *"L(  L~ L s *̬ `   x L c ${p @  X L 0A ? b L 0L$ 00   SDL: { 33{ 33z 33{ 333f3f3f 3f3f R L s * X L 0A$?P  H L 0޽h ? ̙33  6(  ~  s * `   x  c $8 0   H  0޽h ? ̙33   6(  ~  s *@ `   x  c $豘 p0   H  0޽h ? ̙33  06(  ~  s *D `   x  c $Ի p0   H  0޽h ? ̙33  @6(  ~  s *Ř `   x  c $,Ƙ p0   H  0޽h ? ̙33  P6(  ~  s *И `   x  c $ј p0   H  0޽h ? ̙33  zr` (  ~  s *֘ `   x  c $x֘ p0     C AD:\mathema\eigenes\presentations\MiniCAMPUS01032002\mdacoremodels.gif0 H  0޽h ? ̙33  &p(  ~  s *R `   x  c $@ߘ @  x  <A  ??p`   H  0޽h ? ̙33  6(  ~  s *d `   x  c $  p0   H  0޽h ? ̙33  6(  ~  s * `   x  c $D p0   H  0޽h ? ̙33  >6(  ~  s * `   x  c $ p0     C AD:\mathema\eigenes\presentations\MiniCAMPUS01032002\packages2.wmf    C AD:\mathema\eigenes\presentations\MiniCAMPUS01032002\packages1.wmf;  NH  0޽h ? ̙33  6(  ~  s *<  `   x  c $  0 `  H  0޽h ? ̙33  6(  ~  s * `   x  c $L 0   H  0޽h ? ̙33  6(  ~  s *D `   x  c $& p0   H  0޽h ? ̙33  6(  ~  s * `   x  c $# p0   H  0޽h ? ̙33  6(  ~  s *<9 `   x  c $9 p0   H  0޽h ? ̙33  6(  ~  s *! `   x  c $h+ 0   H  0޽h ? ̙33  z(  ~  s *G `   x  c $TH       C A D:\mathema\eigenes\presentations\IIRTechnologyDays\prodLineEngProcess.wmf 2 H  0޽h ? ̙33   $6(  $~ $ s *0O `   x $ c $: p0   H $ 0޽h ? ̙33  0(6(  (~ ( s * `   x ( c $  p0   H ( 0޽h ? ̙33  @,6(  ,~ , s *Q `   x , c $HU p0   H , 0޽h ? ̙33m   ,P(  P~ P s *0  `    x P c $ pp   l P 0A ? `- l P 0A" ? p   P 0@  |P Optional Features H{ 333f3f3f P 0   ` d  Alternative Features H{ 333f3f3fl P 0A% ?     P 0X  x P  n of m Features H{ 333f3f3fl  P 0A& ?     P 0 0  Open/closed H{ 33 3f3f3fX ,P 0A'?!00 H P 0޽h ? ̙33  d\P0(  0~ 0 s *Y `   x 0 c $Y 0    0 C A zD:\mathema\eigenes\presentations\IIRTechnologyDays\jodel.jpg,  0 C A xD:\mathema\eigenes\presentations\IIRTechnologyDays\a320.jpg 0 0 C A zD:\mathema\eigenes\presentations\IIRTechnologyDays\asw27.jpg H2 r 0 6A( ?,`; H 0 0޽h ? ̙33  `86(  8~ 8 s *(b `   x 8 c $b p0   H 8 0޽h ? ̙33  p<6(  <~ < s *i `   x < c $i p0   H < 0޽h ? ̙33  @6(  @~ @ s *Xe `   x @ c $ p0   H @ 0޽h ? ̙33^  D(  D~ D s * `    D C AD:\mathema\eigenes\presentations\IIRTechnologyDays\bindingTimes.wmf`H D 0޽h ? ̙33  H6(  H~ H s *\ `   x H c $ p0   H H 0޽h ? ̙33  6(  ~  s * `   x  c $ 0   H  0޽h ? ̙33  L6(  L~ L s *D `   x L c $ 0   H L 0޽h ? ̙33  (  ~  s *ğ `   x  <A ?? P x  <A ?? ^  6o<T nH  0޽h ? ̙33  T6(  T~ T s * `   x T c $H p0   H T 0޽h ? ̙33  X6(  X~ X s * `   x X c $\ p0   H X 0޽h ? ̙33  \6(  \~ \ s *$ġ `   x \ c $ġ p0   H \ 0޽h ? ̙33  `6(  `~ ` s *Hɡ `   x ` c $ʡ p0   H ` 0޽h ? ̙33  x d(  dR d s * ~ d s * `   x d c $ p0   x d <A #??  #H d 0޽h ? ̙33  &0(  ~  s *tڡ `   x  c $0ۡ p0   x  <A *??p *H  0޽h ? ̙33  &@p(  p~ p s *xա `   x p c $ϡ p0   x p <A -?? @? -H p 0޽h ? ̙33  Pt6(  t~ t s * `   x t c $, p0   H t 0޽h ? ̙33  ph`x(  x~ x s *h `   x x c $ p0    x C AD:\mathema\eigenes\presentations\MiniCAMPUS01032002\example1.gifH x 0޽h ? ̙33  php|(  |~ | s * `   x | c $4 p0    | C AD:\mathema\eigenes\presentations\MiniCAMPUS01032002\example2.gif) H | 0޽h ? ̙33J  r(  ~  s *  `   x  c $ p0   4  s *s@` Foreach EDOC.BusinessEntity e { Create a CORBA.Interface ci named e.name extending CORBA.Session::BaseBusinessObject Foreach e.attribute a { create a CORBA.attribute in ci named a } Create a CORBA.Interface man named e.name+ InstanceManager extending CORBA.CosLifecycle::GenericFactory Create a CORBA.operation co in man named  create +e.name Foreach <<uniqueId>> attribute in e{ add parameter to co } .... } 2H  0޽h ? ̙33  6(  ~  s *  `   x  c $  p0   H  0޽h ? ̙33  ph(  ~  s *  `   x  c $ p0     C AD:\mathema\eigenes\presentations\MiniCAMPUS01032002\example3.gif H  0޽h ? ̙33  &(  ~  s *L `   x  c $ p0   x  <A 7?? =  7H  0޽h ? ̙33  &(  ~  s *@ `    x  c $ p0   x  <A :??   :H  0޽h ? ̙33  6(  ~  s *( `   x  c $P) 0   H  0޽h ? ̙33  6(  ~  s *0 `   x  c $T1 0 `  H  0޽h ? ̙33  &(  ~  s *x; `   x  c $< p0   x  <A D??  DH  0޽h ? ̙33  6(  ~  s *xb `   x  c $ c p0   x  <A F??@0 Fx  <A G?? z GH  0޽h ? ̙33  &(  ~  s *m `   x  c $tn pp`  x  <A K??P   KH  0޽h ? ̙33   6(  ~  s *4 `   x  c $\M p0   H  0޽h ? ̙33  &0(  ~  s *ZUljbVRmQrZ^W"EۋwfΜ9̙7xyuM Y;|.?w,+.P.B Ϲ%)J.(PrE %w$wx8y(y|QCi J|QuL0b4ѐB( yy#@Gr1m+ FD&(\/|Jx:_2 /'A‘>~OOD7BhX tw&cxCj .±q'PKJ޶"eJҔMXFSNcQZM lԶOW?zO'i 43bpkLKkZ.MDFgt"@DA\R` $ʢW5@)ږ÷ڬps៟G}{aـS ;F8){\ޫO_.pj8<; 'Ƣƛ,! } e=tcs|r8P2J;(}&2&׍ߜKŠm;'_%/cO/߭\BpiG h1<! |z:!vy}n4>unX̢9bN/n{멳}(N }Ï 4%}yc,q+<4x !'Aُ mݡ/`\a~̛B<'` {1>8kcea#>8{86D4!4Fοp85s6,FuF~:~N;?ߋr'awÏc +c/BQč(=xd33~79ƣSDY=:q_g=>o@M->w ?o8"C1XUpz1%>pac%qk;ܩ~BX+pkQ[}?VDqy`Ļ &nG#Bǭ : #8P9A/uP^:b'ΠIObi'{ &9I[FI hGpD ڙ p_OXnJO^℟ AIeEƼ(b7.dBe#P,5c9?۔3ͺlٟ c ͥƬc/j1{rN1P[\䁴Kj'F\5i,c~ȵt) mDurJn1ǐ4e &s~M.wb7;TvWBsVI&@kGovFJ=h!ZlE Ŧ<"{PzGa>}ZJC(Q;;mCwX&Ma_WOD1Ƒd-ᤖT`4z/ޜV(4cGZk3$C!g%/u,CW4rްO3-!#h'qq&xs~p1$?ː_lthIC8ybcfqIQc3c r6Z)7lbHk4ERꥈ3nM!ϔ[&p:䐏}J\čִ9ffgE s(?*shE }DX 1F~\ڸe3 lSXWduQQ : Bqs3tp.9>2{ !U >Gw]>uE4(vw#|^Xg;KٛDM=B?w B _"1qF1م/yr0&ŗ2<""ۃI12ٔgd4RLRw.S{"*dGQ>vvxj3IJ}͔vgɪijڭvGiy5=7մ I"ޅ"v0;z'v0;X;X;XjN/y .6K&雽!:8b? xdaXK#a9^8;Iӳ($[RةYBխUlPTW lje֑  !ODd;/௮ תmU1IHy.NGCct`eXoH]IX2RNA2ߍdlCtrlKܦZc*D鬺{9Q8 /h$7֤Jɛb8D^By<Gv%N"ʌsS9Suot5TB?ut{SK٣_N9{>=Y)KB;ҞI&.db & T7y6~A˕ɕ$Jz.RFB*>"d;4UJ$Z5 LCKA2՟AM+x?Xw # !$ZeX%=nʹXֆZZ fl [^Wneg?o&МeǎlQa:Y`qC)_ +pOwWRAN)rt!yŻ-dwSkĎցZ6@¯YYEu5YIԽ&>O˿oۅ6 2Iy r6@o"7Cp_C`Єhq@T:(T!U@F$Ee?OD*j Lwj\k|AAn|pēc(ݟq\=LK&)*!c-G$FTBqx*7y +lz &s2wd% $=g 4d3t9rzxL'qƖ´Bh. ]6 jU;hF,~[OV;h:EMÚ2/ڿ:jg^?cЫcI}ؓ?1S3iatQD156 &T̔ߏy 3 Ѽ <>IT^Iuxح"bb[yJ,N|O'JI9yILN|iP AA7okJ g9W!D[ւ,E2džv,%Q ]b1ŅhXny6."_-)uÕWUUK0}'hҊa>Z(yؤs'TyQ{ Ӣ5C/x>KԯB;G}FVs|ԪAн`ehڋ^6P܄'.z'dmڴIiiiG4m)Om1OW_g2 kjL.M7aٔ~)};Mɷ捥μxk2˝ZiMc)VƟ;u*:2Mܩ+ٷ $C\֐/Nu(ӢßDʟ)\Oʿ,EVY5J*šˍUu/q*a}:z`ucl%l# >!E>W/&y];gs~c:aQM~oW9͎خa3Zc5`Lio`TdR^R{(2|>ًl:p#c Rr[Ơqu#mhIsFY~8z<:uS 'nLihQh8~U@}y5<w=b2H(i2Ȟ~tMq[V$v3ݸED?IR7 U˪}s U ru[Zi/Us!MKVIQNouGɣn^A˟J~GG=襦toVi!JKe]*/%K~psZfoⲼ ZK{,vҍVn[n߷B@PC|;z,^;Y&d8*W[ѸAjp7e/‡:(׫^ d6 :_W~m-6֫2J +ÄlY :vWfFSQ3efIdMȘ0p|My)A\׹!wqEIGdׇhjR.1 "FӘ1]fxT4 a6r87gCޤ_6/"` I0@2Kq!<<7`V  ~&Y1SUB高WK1Z2}i0#?D(fD(#"WÅ"F(B"'"E(>D/G(PP<2"3"C wB@9PwX#Xvo@Q>z/d 6@>Y>K#/*_U+?$f#,b7E0HhuxX%>w8iRJK7e/\)QЭ ]@lV-G1Vn_,?EnaN INAQ ىE dz>MKĹ("tr7ڦ_7 k8jlí*zzU{Sw2K3-&$֫Xez*z >Wnaf(¶zU 0~Bk%jerXdV,%aU QSK dC 5`7 3.d]1uޛ]zwruԈ?A>h=2ZqqhUVԫ^ECތ̽RUHlw,ggkCT)/rL(+ 1UGBfa&?OO^-L3j*HY7X7PZnܸ ׭mvjv"jHThokc[V[k˶[PʅI$/\nU|ȳ4y׭7oh@-IKEbs4nCmh-s!I;Fа6HF~#8m`=܅6"%C:G2#/PQCw6Uiw/Ͻ `!{ ゥS@z0Vֶye -'vk͸9/xqF>hEP.p!uW[=i*<^9l緄>S <$#S(zr #Fz] xܹ<wV?S|_i)SgFLq)&E&E1Hy3ƻip,w8;{ĺAbwlvfooCcՖEk}_P<4M"Ap%Lk[Kf1V; A3x \TƸ[ۀ㒦?qLk *⾤a&ji%\--rr憘 e̜Movz=ys̜e;lytpaF\<d%p8Tjr{_qMXܰRK,TP'/,X`R/jXT%K ,XR Km,uzXcyK, } -X`iŊJ),46X:6@(0,X:a錥 ,]nX"tb˳Xzb'$㿱x.:;&q+xN} wҶ ze/tXOu5CA$mjr KyA~8p1{}hR=cpL;.}]U7uo7-l\2[*:tpaiZd]9s_\b""lA?0tF$:$8(jHȄ1KI1Ct?a&FM7P tuqb<#Ozo%?h}ȅ 57h藏Qx0!!Xp]K)jһjz%l;*a؄SpUD:>aĀcs:bMWV9x=;߯`&;uj/ Jڨ'.k͚`#VzD`tz[RPNX5ٵWvpH-t YJbE\;׶D]9WŬa%_>5=}q/'WcVSXRŽ"{ȡt]1X(}sjFWl)rtg 9:aahU4yg꼌/cqm.ۆ"n8&1ɍHd?>p[77:?YFJV}3<`h \EWF.svx>IDZxBOX8eWk"ŘDyE-k^t#l?j`j}cź¿SszEa-tȮp{1u/LOx#0?nύ ޘ>}\ۼ0b;;/1LeǡJ>`+6ၼ<^b%_z`:טz\<5kν1ww3qe";7X=·69ZBsk9-]ο8|̖=Kd/\,XwGMtp].Kg pR#.Ղ[q2Kpf]x3hw瘉Ĝ|5V_ll8.cs!x޿REVӸV2bzm|U6&l+:cpl86L86*|6>,+vcaIl46T?p7Dؘ!=4UFM?Q$/>f*)c cn8 h<Ӹ c%j6xe7:޸7#l~P aو]Dri$+5f+3p'3~ИH33z~oԼ{Igwg5O0]cY~X7ci//0s0k jcf~؍ž1x4C¸fa2^#x<(?y{O#0+ C1#KL-.L Dm85yj}ʾ_3x9%c~yV[1ZWӼD<?Q#%嘯K̗L%ic,-3^oIsz1'2K0O|mm1˓GNsXiy)"'SYxG2>g2V2~_9t+˛3b|o3x>ㅌ3~沼,ox$c|,9vM{md9:#M{-p18Mޙ1ޏ.7cDƣe!U1~T7_x@m?x=ƽwcY-;\/k/' 9vLr4|5\,nڇ1Ƨ0>ql&9r"'DENYlD".!߾/x ^l s1i_ces,5+JU(yW!PKƜ+iyͼUi^+}n^łڨ"mLVu.KƼ˄yW%̻|YLJEm++l{X{yWfPbmޥ奌KLeypƧ2#\ +ZQx_Ѵm gqiyM9?(Ƨ1693^x1wl.VG28g0bѴ9~֞?iڋZE Y4G2ޏ.7cܢEV[-HUb9hzрhZޛp-WgĸѴȭ,Ɨ3dbZ jU׉bXf>~x=8l3Do݅6b zK!mzCϛZ89o DzP;89m;8r.q|ڜXO1^ʸȹndjM{g^x#x5؟XQ4<6;Zkv}ZHW]ͣ5Dƣe!U1.(-?n*w3,g1>z{10%Ʋ[w2"ѴyT Ɨ3q?j&y>":":E^u:yU{;^^ 6G9jUܧ~rC($7'*; Q ԝ1-{9hXr%RE% ;7\Yb]3=k=sAAcwe\ʋOgڍ^rc`_%Y5i؄ῷNa4|=m[cix]sgV:(bĘ#&S+?<͙}w=veFeg_;WdHA I#~rS8{wW3$e,6K?\@moߗ};$VW_6Yvo~'ԓ{qzyLr>yaQNVJ٤j&U !#i}INT2I&m+iI;K/UtSn֜Ҟ'miH{I+$;U6Z]"-xƑ6LZXr- nj@Ui8f\AH-# iH "inT-|SWڝ7(9Yݗ" yNWޕ5|hOc)_V}?_>EZ)i˪!u$/iIJZ&i٤m% igI4eE??O /fynՏ|2H͊=s4 ',7Uwz?xU[| 7*8~$ݼ 3R/^ѧ@TTl߾Ν;u;SRac`k ~~~su0*ԭP^$EcTb)OV Vc۪:<1&{„ɽǏxtJV9ErͣK.\:Co^b4D+ͤsx3aԄi fX! H/,Q{5iox \8_JCǚ;1q25n]$Hzj+"8u- <>rY+$-7ONכ.@V﷦~ _oZ"hJ]h4DAn%*D4[P-0+~Ru#/dh/Ӄ=Ύ&[NZgvreRKZZb[ca;b;94]ba;vd*MwWuCg7rfptÞww&nj"CCe5J즩 Lz:66BAu+2CUs~Ik:8䎬7-CTtUdn\7uۃ Z 3M'DZmotWSL}m[%׬!-^1ceM:S)3jg41 cɒ~9}Ƌq?g@g֎Ωoα.x憄ͳN }G?ktVZVVY)kNFneϲgɹAY_=!wF9{,2Ly>Oa,F潒7/O߷κ/+5ϧ~- /UX0`V܂1uHE^EPeQϢ /ڗuy(ZV#R hqTp W;t٥ oS7Y_հJ "ZWJ+n];c,^ip!1aN/_B;՟'6˘שܴz_(q~ȓLuUeIeﺁl0Yʦc% BPoMcF7gqUAە{ܑjyf U_} zY2ϼW.ۯ|vՔu3Bjܸ~OI~ҙl^ݶ18I%gqQrNR5{5uj-6=y {"ȧۏuu+]ȕ6@L %'"9Zʐ ƣ2>qhRI{mC:)wkq74҆Ik6)dyĦy僧Z z6L֚1),xZn>ӐZ[>`}y'gEWw:ܼMECfq5FaI?($аoHzGXؚa>3o6+%շ:u:jqWw+4<jlv-hje}WL{oWxm }:FT1;.KPorwjew&d~zOץ}Oؠqllm6ȷ&Bx+mqdqqqq^{6yU$o2˸cquINY͒e<%ɷ&y)4(!XridZ)ۛУMJ)>]x0 SΧR># pwkmc2e,؜q (#'Kwj%빬YK d˺u;kmm6\*Bj =s qܕz3txGO\{׿lмg``޸ݫ~y/+yRWA݂"oM1{M)x`i]pqjGE=`뫇O+ ZP$n.:Ppr\yK[lMppS:Sds2I*/E> d_|++{Ы6~Ur}n83}MæMEU!׈}foҗ3ܗszڪ=&=<e OO?eI }ԧ^7Y-M,aAiX:[zLcYmIfrr3Hh~Q3wbP>6'&jrJЛl7mCV4DT~LE9(6mMiZov6ە807~aC&Az\V\>u>I^u[&G$-ycRӈ] ݔ?&OilnQVה~)FPa^6I>JV-#aFیismu0=㝌%f72kԙIVXV,5>kz;Ye.ɕKs|n@%݇ӉEKs_E-#={-W{Ayyˋp~<_/^<ˊo|[jTZp-  =8}'u {H}_4(T8'`hPNnWznt`5ܽigZ{IYកf%c=t^B{@SJc|{>V>_gKJ{Kۑ0(! 3Av|"ń& N$JI:1P3@O1*yt{Ck]tz=$xΡ~Cnd`ޣ'5H퓠:#h -3U&D|wHr!z9Cn~*^Jr)\,s.±RCU)-](mc>.Ka%RY c0Bd)BaR)c)v{- JxB8S/g 0O85{'Or}z{ū.x]s ,zX^T.{; &^C=Mɞg~F3?kK0&{o(f.oR>wjKnpM54̟p _g Rx Ry_*V`0$e<O1.fybXzqo^tOaN~XKwý7 uӸ|BYN>Bo4l>"UH}{ lX1xT.1 [65Tހ+W8'S*_n=Ol\e0vUa^>ho%'pwnOQkV+qe=>v@؟d(t(V` {0VzԻ9Z]'`f!IOғ L Kg_:+[➀'*3y} %{`Ƽox_NѲR g**+ۜF-Q~߫ x)C0/oq.2iY~ M7hXoQ/85p\O blp^B'['SC{g9O_qn_ wKvh~lM{["+E|6M/wKp赿[2O̼wi=f-K3ўӺpR+9XZ)S[JayQ{ \l3-5e?Cms}u[|L3/>Ƞ>HL㝍=? KQl;1? s<LGms>Q?A,g,o?x(}Q\dB,xTl0>/b|)+Ռa?c| /׌a;O0~3_`ŗX{iM.3  :aW3+_"eP*ƙ~4e%V_T|AXC^w1mob|=k_{/a3>7kˌxG3>af|㱌?xǰy,^ioc]Y/g|1: l~fv|?؃Sq]#AƧ祣F, KQl5=# K֧6۹ƧkkZ>!'1>Od| 㩌1>ٌa| _RW0_'Ʒ39_2?w`$gx /?K5tb~iSD2>$!. .4Դ/V|AgX2~a F?e0/c|1o33>iOe%'1>Qg|( 3<}^ldS\SY66ml>|dc棍l>@5q/ ./rXX~%}EciPk̊mx\؟h%}Q\q>@1>$G2>Oa<4Ƨ3>9c|!_ ?`|5kv?gK35Gd /a%^\3i5kp8=YweX5EFq<5x.Nj/h[54`0~.w0Mg|-3!+%|23WhG0>`<65kS,nioc]x㑌?x/G1׹wvgX@[- ; "ͨ鱍ˀjǨ.ع[4}O|-ƓX'2>Tl0>/b|)+Ռa?c| /׌a;O0~3_`|n[a&/a^b-5\ 5\̵z.,2^{1xE״x (J/b82~11 c<_rƳxWOa|2x2/0@}XܛRƟʟUƧ\Aml؃fܗqƃøv~?h_#G?LGx-$ k^GWOѾюD9Gw<}};c~o_7۟q7K}7~y-˪Z6$F6M!-4Ҧ69#m!iH[J > m5ikHHBv>'K5iGH$ iH+%nr~3>s>QmRWi+H[J"ޥBF&\Uϰ\ m.#4i iߐvHK.vM'm-i!i+I{%C|i3I{WH{IOhF6 -HC΃6罫@y\ZR󖗓H%mi66;gi ]~ߕhN?Sߧ"'N.u?-,n iIKHҒHB@N8p Ph,iHv! IJF>%吖M-#m1ioIڛ6iM%%&6Q 'm(i œRǒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ#/z)Z W4zu'+iHkO3ZkrÖiQ^hJyB+V Z)/R^hJyB+V Z)/R^hJyB+V Z)/R^hJyB+V Z)/R^hJyB+V 4Q^؂)rVTmɽڑu$-HҞ%i}#|z< z4P[-@ yv<6uiH[NZiH mi*i)M&micHK&IHZi#z+@^*ZT &͗4҂HCZ]'ll iբ>`pC0&#Eo*;ߕ!Gώ1{GSr׾]TGnIBy*hoQ]=;x} \&(x xUQ@Pzx=TVg?6֫Q<&\ɾ3I-*ϗ<<<3 嶮RxV3M@ӥ4M[NSvfƢ=˜ @AE`PU`P.#B=' \\"$n<<#4ABh 9B > 5wD n#@G !>hB @"!# B0a(0#@A0!ah1Qc>AF*BH0 ^esDcy$s{o]!ٟ!@|ER֛-5?X8DG8Sү٣ }1i?|$$ fӿ:6=.5͢Sҵ۪FS`vkk@ ز_vaP Iۖ""Ďʹ泭%Ac"dPTBUQ[YgdEӌf #쁹wya%*l݀=[ݏϐV DмŃ-};Wm5\frdvvn~&M-]b>bP>Ŷޱjh;(2*1284` KLlYxr7QqRQ#5^%>87GPcIٝxr%[ȝ)+mKN==*\z@*G xjەH Qkܛi{ Q+˴x5e1;#&۰Xo=Ǹj{f}}=bO ʪE=#${=|Eyci{"$ :f;||r?Yx7y^c:}5߿O.N~a ͷEyD@XgG Gۨ6ʯR|[Uʙۧʩ"ʟ2{}h@)6"J<1q(qqq(?̙@QI ;MUy/mvyPgr̹O6nuT&9?>3*`7I7G>fma֓EWzyw==:`gUp {AT4q36ߋ}c|N\œ# x`v%ۭxBxL to`iSbI(G?hТg a\:+.W Lz#9 k=u4;ag,M]/+)wyfer|Y+}K{QL]ϬGzl9մMu.vSFSyrbP|Ey[%A6*%ΙOD-Pb܂k{ol|b\~;\;SN uSWq6Ea(Ͽn שǴem]%k]՛j(H72im,8o*[^Iw-k]]wͤ/m˪J_+*ʴׯZmy3ۖ'"Xijsmelw-Gͣ |yc%dZD߈Y'u_ky{|͌[4eVoZWKn&\<z 5V^g兯ayvGa S<\&d`r޹YlorQ“y93W]MU3svƇgig#}/팖˶3vz}l%v n""/v1c1ʦ:٭P&GQ6O-|asϳ[x&cTD{O7~'/k]_gЅR>v% X=>ON')A.dAu㪰_mGLQI~e~W#wb,܇!;S.h?rv?bz j#\>;/-Xl1^>>1zsmm5Q9ٿ-?Vږ2_4@{|>:sx+ysxy 0=Xv'VXWiXߞ/ߜ۷c}{O~o/F<7WWwq}\Gl>!O `|yA1ylO|~$(O/_7or{:BDplnklL?xz@XTa ģ>Dxbw}{j"s<`ꡯX}+9 yGsx''(WF_UyrqL> |qR>Wq:h'Yy9"&x?hA﫼 "jrw`dSm77Hf(q´:m$p&:nFFCTաMc[l1-H\n^ܗmf@#hL;<3jw0[ǹDY,؛4e?Gck9v|9La$FqJok|۹T6Z|:}y_6ս132ugǘ&dcɱ 2Ձ˜;F>Y0Vvcgea^ ;UӋ❪p*{-rچF>¨^rs(VNy _rz3I`Յ12q۹L~2O:K~Y5<+?| ˏ3 c֍xӶ:% ^Kc˜&506K.lXl}V.bpz ωgVM>FY%T S\V^];|Lʁ[`0cEto@tw*k͹/~HJc&0جo5egТ73Q^&":攣_~ QQezA⎥02QzRy$72Yװ|^_mr}E'5եgu _.3t0՜-bwujq,cZx(dAg zD#F4j4eE>sY TW]d2X)Xe |e\y\6V1XM|y% Lt|SN-x5>+6e J>F]+6_e`7TfmP1>3e- Eb8s0 ߦmkBщh?ܺ|m2r MXN6>n/A=_./|8 cZ-xlpS5Gv65!Yo- vO$K{LZ4Y⩻IfoBWeO%<9 TJB <,\Kisy7r4SϥYLBۦDz꽺cY^]豬=β/`j'zfve LrU~U//vŒ WCW\E|Dl^ϚgIhxfɛXOdI 1/jCZc>}m[P\Q1qd߻ ;oNz2yZXW4Ihm>GYzwdJ>GFEƎLbg;0Kj kv/g|Dg+0G-Zvp+\-Yq/W66G210,⓰ё4a* pVѺª15**2i8˛ >v~:nѩ^NzcWU]*ZAVh(eBhn (UؓRlߖ_KU]ԲƩhiGo,G5AՅ&:o&ʯ.zU~mKu)kN6];ʯL9>!}yUܿy:o}m/q?6",V8&^5϶˦-/-:E+7Ϳu|UͿ;2xQ{/ۋ{592, Ό7@.E:0Iq 9bo^NN&l2.'nr^^-1F~Υj (͈*klUdNe6 αE[«^Gߨ|Q^5BV[e;'7.1<<^ /_Xs~T6˗_5v9X+S;5m-12N | kGy;teOχɷdG@}HKï ;v07|05 խ[uvBAV D c~@#g jsDShɻ|ؒӚcI'HDN T m d֤8q9r&pmpS]/Y8Tt>|m:8dEGB8 (23yZg +{tr8!q2a:pTxBr(^O#V$Ym@4,VEL']WD;g3]=Údp9tN`1WQ6iTmU#KjD4JFҨiZ4axaCiw ˝˝7d96't:i Dhz9ܺO蟚!\ iO; 3A`q`kȨЕ,XCZ-Ӂvд-Onk ,&qdrdG%}~zwV$s.ˌa f{YOn; wցt<^A8Ih=WM kP #\UqHqV/8SĥC`r[>~ 3heiʿ5';uwM[M/Mfɻg͞,@}!e Z/lc޹gq]2dfgL.~XXF)C@j%B'jgknւN{A3 _7H; v޹NFttKtɡ;tGttttzkCs"^?Ө' 47 4|d1ȸj3S1409KH.ьOF6LKg2`ҹ  E'S6\:fp{B)!){CI/JªF-7Jڄsz0ES$[rMw}FLXr?y)E#'"%Χ1{aV.J;#ȝ}4o5,!~m>}E wj|9't^[]OVMTϪ_㇫OL_ ^Zܘ:r][ND6K8ܧB-h5) c.Ps8Y>- 3Dn K$yۚZ)ʁfqerBv?S˕1E/2+iem$*D5Z5Ig94`Md"Mi3w>vXr6wD4HCE?h92cmm?r󡔌Ԍ{2Nd/g3R-]@N"~ 0ժ+޿׵:m!P>dsOt1:n/nn)$ء9G5̀!)&c^i?V/SGAX2ڎ 36bC S0)ndبD(c-2O2Nby}hb,XO幅tؾ20t٦=@`MHG-" foCIoImd Stexx[Y/)mIogWmdNEM3+.t3r1ۚAΨ+JTr;z`nKۓ_VMRQNnWzҐ̓6ԅ|3ЩG#2 ۅ k$ >ف+[~WU?Z6|Yj7Mvv64tՌШ4S5Xv+Mھ_sJs5E>]8Ku /Nn8iǰEq 'meڌg2%6mZ@ I@_Lծў^@t޺t48w_Fw5e3!,5vݯ^a.-~UPxFusOh֧t`bhesff5N?Ͱİΰppw `7zݾnjڦ}@ȫ態JLg5qR_=Wam*rܻn's8XT~ðE[XO8sQ&zbi~Zt&J~I~!pjHKH87 wM %Q=U뵯#:g~(-(Gy&;<<)Khp̏qq۩5^8Wyw%c$+FxAnd8:[?q::ssR [fu֨ry@?߅y:ؾAs>8K{!42X)[3kC[?躤ȗp8CѮ*WZOҾuq9(nvW TLo3Q=~W䰺dp"_=>5%7TΡ\_-&kHݍ}ʇZtp}\AN[D&Osב~,M{Ycl(mǧ fzSj9,U^x#+ytc~{ڝ&KSoH ݽi<$ɯ"Z>xN~VpuI:$jjܖO@1v .~CUW +BiVb¶z^1W4;&} D SNЗޞmZB!x { ?B~z MŐت"BCA 8]AjOajs莸T,;;H|R^`dX,ZrXxsMRIoC2B|rYj ekDŽw ,/ˉx0Z i!C?*jML}DP/ߧWTf{km+듳#]'NkrLbZLEzZQ}UN]ZrZ!ܐh(K}mi0p?=ǭ7tK;d@P_Y}$(뛌pڑkӉ'iom<,5B)2nX#mTwZ[(Ǎa¯>%l8eX;u͵33RD 62Vqv$Rd)Tzvzhp7oJ5%D PF>o+-c)*76*bknOΐչzHu0JʩWwz};=hw9Y P7衫kNmtCGa_-rDaaa C#iuawKhẲDi3*ʸǍnD6Fz 쵉t,0Au$(ۨާ@bCDt^Gl%eukzU#t@&R3Q3[f`+:;z?~FߖnKKrfjn;u}I͠E[A(Pyh!l4?v:nh'HgIhi*?.ЊMنe\-%×~i J6l4*FX9i1cb<`ZQ<$MWƷʥt +HK J4xQQN5@#&Ok' 4(Mc2V描Uh 9˧%3e>_=y ugrNvb,΅dwR׉w^Hm ^{قM;׬U ?S35wдS hߙɇe|*6mB%F.곡.'jvZc#"Ovhhנv jFXX[٫9kXoa\5DCf;}3D#2TS3jk.AoCKvHZVXSspH14VQۣ}xk=15%sڀ[Gڈ:;NqH{3|½fgw[څ˗:w?SO.>Vܖ8\)Mvl}qݵ4L>bj]=M#WMY$ïXC~?%ٛ/5tj0윆0q9³' Cn?~-t deѕ& c)qI1Qg@[5 >ӪNpn%mA\2VRr6oGhch`hi>4,0ԲF3=Zb t e Y0`͘|Yr1K';ySTWE-ޞ_dl"~T#\@X2y|Q "J)+OBrrS95F@-e]>4UqTP?cj {IbfBvjjYYԸԭhimrzӲ8KFę%L!`IZ;j-U> @]MwFR:UcЄe\?+[^Ӎ_פ Gțg؜XkR!kL[Erkqsd3M 1{L,Iݒ&/~#&Ҕ81t| xKβJ:r6Yz. u9U~74שgMZRWGeqtmu獓9S3ԸuDcV΂G\߽-s_S tYF\7˚}g6w`2!)g,Xݝ}W|ﺾAÓig_rxUm?Wxl^ָn|d;%鸋8_kaZ=]SZ[aA+Gv;s;7e0n?LrJi}'ζ` _Z*=3IJ{$gǚ3h%WZ:e>SqoDt<ŻW)MFCdeqSgr}uzGz^81WIo=n !D B${{ U 6aW]G;qL]?Qәoh6H:Fx%&~gc"*bm~9rs d-e2Y%~"2#sw+u}R/űJ.@AJLQ@FfdJ:G&zEd8j;s|8 >[+L#*Te|hI"\߬\(\-QUkB*RqB-k|Ư('{}kN^vS4 ѳTXAǫW;};t߷jg_X#9HzxW׎W>{u͵mHzojSSE齳$kFT?RqWuRI @0+ßx* #8gD <`͍а.88%!rzLWۆDK&K4oX~@?dz2 >ƨ aX:W\@&= Z+հg@A:vk鸛S,(^jDf"EpGITGu|"ai?(d:ApG7 zh!<JilIg0+_d}<tcm ĿOk|vGZΒq+GU 5zCo",٘2u[Nejް]N#߅V|EycwPK !|N~ lٵ5ob5o$o.b;ށr8dlG:M]߽lve"6VUQ!|ieKu<ڱ,7TwQlñq}L<6Fq%;V,xLҎx%̼cc#.Fd{AǨC1,#|WDwI+FwE߾뻪25< B>c`,f_j꿎B>ޘ_4C~y :f_q_<}=mQb&' }nOG6 zȩYN!VrR (z3[NBk#.`TD/%Ymcc.=-*?!{ga}_e$~W Ӛ6!Cro)bhc/ptU|bʾR>:2&[>jߗŵhˊ˒x|-(Ȫ濢&%ԑ~˖XdSQd^eXyWA~UP>vKYۧ^VUt|UuKtSuѝQGo,>u4Pu:Jmd_WZKy6ytY% ȯ|tFeMGM_(ڡ|sBj+.|[W5xF ۢgf6[$W5WozVe.+ggk+.+U}SyW4hM]lʻY7wEso*fTv+zSyW4{/F,l29X]nO611T C8PoA5<>ݯ~݂;9=,e7`uovSl#hx} \% &(jn(5qE- V X"C.umb+sƭFjbԅZ5wFh}Oa~gv=wcO2 vi2 ?I3#Y\ 3$Hܐ#iDʚx DIS$>H|"iDD$IK$ۯoΡHAI;$!ip$J$ys<z//dsL=|piaO,OQ˾!(.$9L=Q c}{7pF٨ca>5|a^x:E6uc?.kV6\kׇO}:(} C$(:x9=kRVmİl]m(''%?#+C'yce=?}#dŁ%]ힻD6_pVvveO3q4رt?KcfGnP>ja;Q .klfJ^^{4`v߈\k E0`y{Ӹ඿R|ؠ~r!kkΦ8>!{k0rR_Nĭi2QXA@c6Wt4 DG^5!mi\,Xʄg-pm]{I&lff+ 3?xq(= {\ e. ϵŹ{_;9ฬ H 6 ̡_=4~EO^2Y^0>⑤=a'nNW~NגltbV=aG [֊t?^D4=( oٰdlz֎C݇gy)`{~y#W$WyBn#nsij_ nWOd۠YN0ʻډu>]8dg>j 돳7*,5q-p^n.cegPR'-;"&ǟ{!WDzYN %K^/o\aG}< ۑd|Wn6'Y;|GT7r7q1Y9=m`4kJuv b^ut.,Ⱥ|&Y_* xUϦ+5LqwW >LT/?ws<5op+/xNSWN^CֿR,{]_%^`W c l ֦I7RZ=AW?fW8ʱ iv [X9hhD{x[Kt]B }?SOI xw}#[uGl>=;#iηv }+P|$ٚ47я_qS2{E8\mewK>{& v%Abb '9O^GL2i;[ѝl"Y_Q3'#FE޶+w?A-&<~ly:~p&smDc+0n,BmK7mEmo"u[S$h=6ET66]am/1)H5򭫟jLNyֺ#u0?V1v)~0>GOe@UuiCFÎ5|t/VA[!{mkHR:}./ezf,mϼ׮avd- wRǧX?O|LtCjytZK4Bv ϟge |APq`РAeұgU M㌓ Ьj&K>xȻI(3)cU +&d=$4 P-Sg =/^Quſ\V\>Bl"H"—Ǚ*k( I4(P\N޻ECzDEO^N N&PZ"M&UV+SBp7 Tjx(AB!EŴ Ceb|<1H YNTg_wBSET| ]r*!.Ŵk1VLHbZZLˊibzg15YL) "ۊ8JJJbU2h [Mk!{ &wM A>`a!g00\֯Ĥo hgBۣ 8J2uAm/ wޒ#_)/&fo.rHwU i0g|^9N:F6|u*FS(UeQom> ʏ:ӰMwTzjvjУ.:^4DK55hh?b&?PE;U^;b}W}uȀ=':?;Cӳ%Ԏ'kSi$ $̀2yM[TY%n R% -U٭`{)BA:eqFHQ|ƥʐyHZy ATSҙd8sTwVl3>'=;;SD~)VY߈(|4oEu{`x0VEb-]Ep᧞[{JvƙL٦i&r-ݦK{&r8c1.RV>|^rpyK9a2C9y*3<0{CE-GqƶLS7>UV>VSv`92QN|յ5MI+(G'=~^l]a^bP`ϙjKA|afa+UKŧonl$9pW rUZ$uR| 9?XCW z)E}Az/G`BI,{$v\O|y:ɽON߫DSju| /ka]Oːmju"J%g[ٚIdr?5ъ ۚ $jKSxTkO3o! |Fs(;@ydڎc@& LXBJ<e[AdD*`*>C$:NKB?㔈( "ЮףDS" Bٔ߃sAd v_] "{[A@xս 2u#O(xB넲''mO([P %r[r"D yqh3} Ƌi-G`$j^IO2ɤZmTŦ]Su:B'_=!ըXuA+mߕ^}7{M[Jt=^ +ZS|0)DowWzD&aQCktm&# u-qa& [D "sWEjDSڅ{{É%J6KX A+]fD$%i[!"6M#7IY7~vK\OC1C j7%w@F̃&/ݛ|}YC7E8sg G7#s{&)5i/z$/.T(PQh:hԚaK~~[A,M O5{4*t D'MZP^I>?my>%›EmzkZ"ӻCg{ Ig^/ʙ0ІLo[[yi@ط׾Oҽ;J*$dXLIɓ\Wog~>2ֻ+ͅZo$"6m"77B߭PYY3̋m.iF3#[<=s!1^]Ī}&'e]7^Vz%(.x?ڼd%[mٕg->+ f o,A{~)ZtJ] %wBZZޱ|'#Y9m 쁆sYYɸ1] X`cH7y ']/zݢUEW+a(W!/]%~%KVg*Ȩ{0ߖTrn'^#f̶`c@)i`cv@!ӒhY-^#h*21o"`Z1L,CT-fs) 9 w*nW޶910h:)3Yt?bt_rxd p Uo~K$Vח7הĜog~ެ1s3f0feqZү*X@KS,;ts(6-[pB;䖄W[M`j]k:Բ|_yaypW߾2iz׎wG}OvA mPcWqU=t2FkwGҩPxbYg7N&ߑ?"8 MM#MLʯ`EVn7 /,ߢn̴K7𼸷uʊ w].m AqN}'_3똴)h͜\gH^hXm°pp3*E.]M"{3j+<*#}{ϊ][oꑒՃIZ=B 魦$//kw>_WTOȝ~ӿ]~^H}KLd1fɛJ*J*7-Js/srePuj| e ̹aW;}iL-f5(Cz dXpsɲJΔiX~&٢-ьa>do,3 ;3KIȉ_u^D7i6y^nVi4-pRett'7wT~vb{H͉g˧ [3MIp9W򏿞t˹|ކԜӃfMȍ;|HxZ8,~n Zt8\p'gUsĽjj*+ư7z5ŕf(VUmra9U;k|vYvn V3Q5KZ&v(wBGvR[}j{Y(/]#tcbNvpZ4V*KzCZx -}[#WzwA_|A*zqgn 54%_%bVZ0}  -qU ,PSY{X(G wCg||M| ]Yb2t#'벘 ]N7pcuY CfFֿrAe<"V{SlN/Q7*ɵ-IH{3"r@"X@ʄͨaP Hs@EeD/ĈPMˠ&%N()w! nk5p.y9]'j E5Coj`G lPds lk`5j`n B50Հ*րO kPI[B-0MHqCMaJ㌗-`ZH{KHӤSIgwhM!s&WYvpyO[QeDշ=o){EޱN'{K;eUk5M]|^_v1IP1*-+JQ \Re}حQy+ UY׀9uJҨ1 mڑ)›}.] Z$x=0xG5!s;^[54ܾ(3P`"*b, -Csx,p\ȵ\v: JY`(u0@LRyYj!,p6 pe;' 6eGc*9ܣ_mޓ3KѤ RP|]o\؞vlx }Bp>ߋz~1ߺhLUp,`h݊\7\qalw+VK[zM {Kw+={[CGU{¦>MC:ꩿ[qH< GrbnESUO*VKU6 @[g5uL:\U6)ER[N+#QfcNܰ{OܰC{GtNR |` ²6 Ga?jcKp-`su2vD|iR.,Q6\?A:́G?cGx $2ӏE9:p̣EOч-hsgo!;Oc|*~( }?+ ZD|K)c|\#{V}㯰9_Wg/{UK<%q{P% xoQX )D;}JѶew%ԵoGUK<%q{P% xoQX 7nn{;]⇐}o}?;j݈o [yw[wX(=[] pz|O 0Wsu0?VoV^o{Ǽ]!yן~zV-ZFCz~}aۍ{NF3Qvo{țlcx+c<6b[cyl#Cr6qЫgb_xM~7i?_z?B 3x \TƸ[ۀ㒦?qLk *⾤a&ji%\--rr憘 e̜Movz=ys̜e;lytpaF\<d%p8Tjr{_qMXܰRK,TP'/,X`R/jXT%K ,XR Km,uzXcyK, } -X`iŊJ),46X:6@(0,X:a錥 ,]nX"tb˳Xzb'$㿱x.:;&q+xN} wҶ ze/tXOu5CA$mjr KyA~8p1{}hR=cpL;.}]U7uo7-l\2[*:tpaiZd]9s_\b""lA?0tF$:$8(jHȄ1KI1Ct?a&FM7P tuqb<#Ozo%?h}ȅ 57h藏Qx0!!Xp]K)jһjz%l;*a؄SpUD:>aĀcs:bMWV9x=;߯`&;uj/ Jڨ'.k͚`#VzD`tz[RPNX5ٵWvpH-t YJbE\;׶D]9WŬa%_>5=}q/'WcVSXRŽ"{ȡt]1X(}sjFWl)rtg 9:aahU4yg꼌/cqm.ۆ"n8&1ɍHd?>p[77:?YFJV}3<`h \EWF.svx>IDZxBOX8eWk"ŘDyE-k^t#l?j`j}cź¿SszEa-tȮp{1u/LOx#0?nύ ޘ>}\ۼ0b;;/1LeǡJ>`+6ၼ<^b%_z`:טz\<5kν1ww3qe";7X=·69ZBsk9-]ο8|̖=Kd/\,XwGMtp].Kg pR#.Ղ[q2Kpf]x3hw瘉Ĝ|5V_ll8.cs!x޿REVӸV2bzm|U6&l+:cpl86L86*|6>,+vcaIl46T?p7Dؘ!=4UFM?Q$/>f*)c cn8 h<Ӹ c%j6xe7:޸7#l~P aو]Dri$+5f+3p'3~ИH33z~oԼ{Igwg5O0]cY~X7ci//0s0k jcf~؍ž1x4C¸fa2^#x<(?y{O#0+ C1#KL-.L Dm85yj}ʾ_3x9%c~yV[1ZWӼD<?Q#%嘯K̗L%ic,-3^oIsz1'2K0O|mm1˓GNsXiy)"'SYxG2>g2V2~_9t+˛3b|o3x>ㅌ3~沼,ox$c|,9vM{md9:#M{-p18Mޙ1ޏ.7cDƣe!U1~T7_x@m?x=ƽwcY-;\/k/' 9vLr4|5\,nڇ1Ƨ0>ql&9r"'DENYlD".!߾/x ^l s1i_ces,5+JU(yW!PKƜ+iyͼUi^+}n^łڨ"mLVu.KƼ˄yW%̻|YLJEm++l{X{yWfPbmޥ奌KLeypƧ2#\ +ZQx_Ѵm gqiyM9?(Ƨ1693^x1wl.VG28g0bѴ9~֞?iڋZE Y4G2ޏ.7cܢEV[-HUb9hzрhZޛp-WgĸѴȭ,Ɨ3dbZ jU׉bXf>~x=8l3Do݅6b zK!mzCϛZ89o DzP;89m;8r.q|ڜXO1^ʸȹndjM{g^x#x5؟XQ4<6;Zkv}ZHW]ͣ5Dƣe!U1.(-?n*w3,g1>z{10%Ʋ[w2"ѴyT Ɨ3q?j&y>":":E^u:yU{;^^ 6G9jUܧ~rC($7'*; Q ԝ1-{9hXr%RE% ;7\Yb]3=k=sAAcwe\ʋOgڍ^rc`_%Y5i؄ῷNa4|=m[cix]sgV:(bĘ#&S+?<͙}w=veFeg_;WdHA I#~rS8{wW3$e,6K?\@moߗ};$VW_6Yvo~'ԓ{qzyLr>yaQNVJ٤j&U !#i}INT2I&m+iI;K/UtSn֜Ҟ'miH{I+$;U6Z]"-xƑ6LZXr- nj@Ui8f\AH-# iH "inT-|SWڝ7(9Yݗ" yNWޕ5|hOc)_V}?_>EZ)i˪!u$/iIJZ&i٤m% igI4eE??O /fynՏ|2H͊=s4 ',7Uwz?xU[| 7*8~$ݼ 3R/^ѧ@TTl߾Ν;u;SRac`k ~~~su0*ԭP^$EcTb)OV Vc۪:<1&{„ɽǏxtJV9ErͣK.\:Co^b4D+ͤsx3aԄi fX! H/,Q{5iox \8_JCǚ;1q25n]$Hzj+"8u- <>rY+$-7ONכ.@V﷦~ _oZ"hJ]h4DAn%*D4[P-0+~Ru#/dh/Ӄ=Ύ&[NZgvreRKZZb[ca;b;94]ba;vd*MwWuCg7rfptÞww&nj"CCe5J즩 Lz:66BAu+2CUs~Ik:8䎬7-CTtUdn\7uۃ Z 3M'DZmotWSL}m[%׬!-^1ceM:S)3jg41 cɒ~9}Ƌq?g@g֎Ωoα.x憄ͳN }G?ktVZVVY)kNFneϲgɹAY_=!wF9{,2Ly>Oa,F潒7/O߷κ/+5ϧ~- /UX0`V܂1uHE^EPeQϢ /ڗuy(ZV#R hqTp W;t٥ oS7Y_հJ "ZWJ+n];c,^ip!1aN/_B;՟'6˘שܴz_(q~ȓLuUeIeﺁl0Yʦc% BPoMcF7gqUAە{ܑjyf U_} zY2ϼW.ۯ|vՔu3Bjܸ~OI~ҙl^ݶ18I%gqQrNR5{5uj-6=y {"ȧۏuu+]ȕ6@L %'"9Zʐ ƣ2>qhRI{mC:)wkq74҆Ik6)dyĦy僧Z z6L֚1),xZn>ӐZ[>`}y'gEWw:ܼMECfq5FaI?($аoHzGXؚa>3o6+%շ:u:jqWw+4<jlv-hje}WL{oWxm }:FT1;.KPorwjew&d~zOץ}Oؠqllm6ȷ&Bx+mqdqqqq^{6yU$o2˸cquINY͒e<%ɷ&y)4(!XridZ)ۛУMJ)>]x0 SΧR># pwkmc2e,؜q (#'Kwj%빬YK d˺u;kmm6\*Bj =s qܕz3txGO\{׿lмg``޸ݫ~y/+yRWA݂"oM1{M)x`i]pqjGE=`뫇O+ ZP$n.:Ppr\yK[lMppS:Sds2I*/E> d_|++{Ы6~Ur}n83}MæMEU!׈}foҗ3ܗszڪ=&=<e OO?eI }ԧ^7Y-M,aAiX:[zLcYmIfrr3Hh~Q3wbP>6'&jrJЛl7mCV4DT~LE9(6mMiZov6ە807~aC&Az\V\>u>I^u[&G$-ycRӈ] ݔ?&OilnQVה~)FPa^6I>JV-#aFیismu0=㝌%f72kԙIVXV,5>kz;Ye.ɕKs|n@%݇ӉEKs_E-#={-W{Ayyˋp~<_/^<ˊo|[jTZp-  =8}'u {H}_4(T8'`hPNnWznt`5ܽigZ{IYកf%c=t^B{@SJc|{>V>_gKJ{Kۑ0(! 3Av|"ń& N$JI:1P3@O1*yt{Ck]tz=$xΡ~Cnd`ޣ'5H퓠:#h -3U&D|wHr!z9Cn~*^Jr)\,s.±RCU)-](mc>.Ka%RY c0Bd)BaR)c)v{- JxB8S/g 0O85{'Or}z{ū.x]s ,zX^T.{; &^C=Mɞg~F3?kK0&{o(f.oR>wjKnpM54̟p _g Rx Ry_*V`0$e<O1.fybXzqo^tOaN~XKwý7 uӸ|BYN>Bo4l>"UH}{ lX1xT.1 [65Tހ+W8'S*_n=Ol\e0vUa^>ho%'pwnOQkV+qe=>v@؟d(t(V` {0VzԻ9Z]'`f!IOғ L Kg_:+[➀'*3y} %{`Ƽox_NѲR g**+ۜF-Q~߫ x)C0/oq.2iY~ M7hXoQ/85p\O blp^B'['SC{g9O_qn_ wKvh~lM{["+E|6M/wKp赿[2O̼wi=f-K3ўӺpR+9XZ)S[JayQ{ \l3-5e?Cms}u[|L3/>Ƞ>HL㝍=? KQl;1? s<LGms>Q?A,g,o?x(}Q\dB,xTl0>/b|)+Ռa?c| /׌a;O0~3_`ŗX{iM.3  :aW3+_"eP*ƙ~4e%V_T|AXC^w1mob|=k_{/a3>7kˌxG3>af|㱌?xǰy,^ioc]Y/g|1: l~fv|?؃Sq]#AƧ祣F, KQl5=# K֧6۹ƧkkZ>!'1>Od| 㩌1>ٌa| _RW0_'Ʒ39_2?w`$gx /?K5tb~iSD2>$!. .4Դ/V|AgX2~a F?e0/c|1o33>iOe%'1>Qg|( 3<}^ldS\SY66ml>|dc棍l>@5q/ ./rXX~%}EciPk̊mx\؟h%}Q\q>@1>$G2>Oa<4Ƨ3>9c|!_ ?`|5kv?gK35Gd /a%^\3i5kp8=YweX5EFq<5x.Nj/h[54`0~.w0Mg|-3!+%|23WhG0>`<65kS,nioc]x㑌?x/G1׹wvgX@[- ; "ͨ鱍ˀjǨ.ع[4}O|-ƓX'2>Tl0>/b|)+Ռa?c| /׌a;O0~3_`|n[a&/a^b-5\ 5\̵z.,2^{1xE״x (J/b82~11 c<_rƳxWOa|2x2/0@}XܛRƟʟUƧ\Aml؃fܗqƃøv~?h_#G?LGx-$ k^GWOѾюD9Gw<}};c~o_7۟q7K}7~y-˪Z6$F6M!-4Ҧ69#m!iH[J > m5ikHHBv>'K5iGH$ iH+%nr~3>s>QmRWi+H[J"ޥBF&\Uϰ\ m.#4i iߐvHK.vM'm-i!i+I{%C|i3I{WH{IOhF6 -HC΃6罫@y\ZR󖗓H%mi66;gi ]~ߕhN?Sߧ"'N.u?-,n iIKHҒHB@N8p Ph,iHv! IJF>%吖M-#m1ioIڛ6iM%%&6Q 'm(i œRǒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ#/z)Z W4zu'+iHkO3ZkrÖiQ^hJyB+V Z)/R^hJyB+V Z)/R^hJyB+V Z)/R^hJyB+V Z)/R^hJyB+V 4Q^؂)rVTmɽڑu$-HҞ%i}#|z< z4P[-@ yv<6uiH[NZiH mi*i)M&micHK&IHZi#z+@^*ZT &͗4҂HCZ]'ll iբ>`pC0&#Eo*;ߕ!Gώ1{GSr׾]TGnIBy*hoQ]=U"hx= |Eo6'Izђ- r;Hh%%R/\rx/Q%EA,An -ȕO d!][(~}μysvƏB*wI @9u phj18lB b n1x`C3 /? c!CBq> CK 2 r "0Dbr c0 C{ q]t)7ۢL|wLc{xB,Eow<L=5%DyKÕ8/GP/-"LiT|U`:m<V(Ùݘ'2uѴ˹#O9,z`m7dv3cA:L`G3D7f>ST ]E]\T ߌh_+kl"b#K_;9jܖL> aW{ 2alE/ #z%f4 ù~r^#/9JG 2^ڇyܖfi')&Z0^3g.4<)~M5187:cZ&;]hU>p.Pۡێ6E\۹!b[N˝Jb 4v\ò(1kKmIhMe:n8i#۶ఓf[r`Уd.`Ppe;- }`G׍roER| k1|A@#4)b $6s kX|+sc W@< r'b{Q*1+'+_qmuWY_yϾBhA6&އp5 p\Ocxt? ]>(5n_'x+?' :bOjBE\`a< \;M~NV&+أ$D 9XW+1Σb<8\8΍4[4pvI5r ǣ~Rv|GG7 y]ͣ;N&@7qG Q3Ehy{(gaޝ)ъdkrZtޑMj㉘s+u/'{}医QTD̂]/ph= kr`Zc~0Y|vfbgH?9ǿ@HHwZuS =Eg!Ot= ߛDTrlUΆ0‘g"9? GΟq8puv NkNB'S;qN\'qn"wqNщ{8ٹF[;6ltvUP~lұyqn5%xL-wRԬIj9ݻYiq/m?@"wݢ?ywlx7sY(wԉډ38q9q 'N t:;qNĉ8Y:qF'=k؛E"7i}a߫7кNu܏W+MwNeW$D ( ǃV&/;beo|bmz&hj'Ƴh|7{u}VN]_4h}N38kIc23y4K'婅5w_Ң9D\cHFHKoR&B}7g@c Ҵ ݃Xa<ǯ?+wK~ٛRy;IBH˜gf=siҒImj y>'-cҽuX{o3#<N++r\ AkpZ\i`qхKtQCp{زeK5P9LN <u{dhp (N0nylQ:z-1s cKNt;CW!u(M0!TмI hG5KtTP,嘅 (ks+kZӅKs'`_F ^Mbg!`,`tXP70b0K}ԹhYT5RN&ҐŪ\|%3^dQ+Ƌ2x> EΠ2(jZFc iNS36Yh4lDS)D) *A .Y#p[M3.[|tVvca|ٛ] uR%~p٨ҩUBv үx#wu\j„0OR#?lrE |!Sͽ$脩 ( y1Ы#2%*NEY!b! Cu}hbJeẓ)kU7P>T!U_ ?|`leOٲnyjô$rp9훟IoZ7/PAG|y* @!B99 <$3s|)*F. <&4gM%WKNC) r4S]DrS.؜ڬ#t-0=>mAH넄Eߑl:/}[k> FSYڱ44tϣ>]9RR'T,qmK>l_0|r7h}~^G/+jde8VzVoջQ~Ftbk0~2L(S*6E?ςO`ҠAƱbJ#oxnQyMc Nl^ XLR&tdʌ6!ͩ͝yUfj~hCyyy!$?}4'17\mZÙ|K;NT\(\[B`_7/BijIgBȸ~3"7~>u6=?GߕSӗ+|Z.Wo ̺RTGfB ^-ї3}(D;VPxP((IJRġGm7mģ x*z:yKN@X;Wֺm㶩UEU+F,Lh)bt/F>,T+ס~/C{i@ r%'ȇ vyTSцxf E7T꠪{,|}mJJUQMSiZ-|MYFՏS*J<[|PbTwT''KՠVGN)SK -=ZrZ-|-␫uӅ~dWv4Ś;ʭ~Cn.׽DlηमFG.:TPA P,鯭[zK!ls,QUlao뀾o 3t7qg-V^/JAHQYm;q1򇘈+my瘌 [qs)B+<ݍ柊lGlGUoMv0`ڐj8T'RnX46p+ʃWV-g3:4ʿu\׸Aq0*#֒& {t ݧϫΖFIZ:?njS>vlQ)΃vm%UfE|Tm8tʿrEg"=E 9;M'=L7L^'R,]*[`kfomwϙoUIVTNb&ealkmY`x +bCd^ "dX &i.f0qMzfȔ{o_>w4=t6~]:h6L5#ya琥ýaE E<5F; :n_ơqq:FUmUr cs39֦nqǤLJ⮯0^߉[}R;~̒YSrl}3帤j2 &fFGerrrWSoިܢܭ<$^.-6'ں7\:UW y:|QYvVg}S^e3nabEX"ngAQEX^au}\6J/% 25 wr8{ݠm̖䭰 wac|ガZ(y5d.Zw%~/e͋|)y BD@In9|Qnt/U$߭Gp{c5pΜq{L@\fbP{n>Wiɿ9^=@W_o|Ϸ?mF)ţox< Gã y)i6Ͽ_fveAPC#_{74Z߻]wKdF3cbD`MOLdL['i,͎'A #~}Ӽ~uX_MP-x} |ItBIJ[ B"$-} `h!-EhRM" hX,AkU {*Ah4"L: e7|Ns;3w;ef.,|\n ;8q2 0?a/+B ;,Xxc5KXai1`,M49P,͹Dp ,XZbi),-hX%K;,tX:a錥 Xq6 Kw,=:o ސs`+-~}*:$~D8\&@!a~?&tO| ﻟksa".y-B"$avxۯx#߷!l"O]>&$%f=5;cphEҸI\GW24+7K׶WNڴ̶Z-!|[ۿ)@|#4<⭆ Voxrm{~LJW*!IoV|nݏ:o+&/V}nU",G9טHvJʨ ׅ׸\.| /uoET?›]PmƝƵk33!d0)² 3<622FSN?.;,0"{#ph)E5,V~N@;qD AsDssz +$ ,[9Aa{vN@q'^Ŀ2 X{O'4'DW̕s^>1A.ny"dՊKC |8;7X^}~߿'=҅wᅾBO.^¿ss]x ?‡R^.D?›]㳇Yw_ކVzh:u8q9ضާg{-De{ |\^IEeM~?b  &? !b~MIhOot)ON۞t'Mp9nZW&[Wf.]OaO#u غ:|]}PY %8\YUI}ƾ"Vz:/]K$Ksq\&=粞G85}oߗxnA|_y9x`g;֮ *xȟa|Eق[#Hdh;@GD;c l.k! w#4oIl) _'\ʞĻіqLup}3NNۆ:'}h;G;}bvM/LFD-_kzYۉ Gnoqg;!uX#v/~g 8;g%N(DsZ,bbv,]OXl;͎Ůӵc8miL6~TtäYA tp+w6L?H? bڣtX @D|g,@޲ͥmXyϓ [ }^{yEBT7lk-<킵[X.XېFrU7eg|?$G`ƺEu.Co6 SX/X_'%W X_&۸k<\?/ x-|>' $ϯ>< = w]| Xo+)Gb]!uXo,gc_a[u߁u`[_}U n|0QX?&UX$ .c}_ɮ{ -X/_`}ve.NK5͍٫=_C_yƲ \vz.E[="? םnw~n"NN7"L,M}pdtwxB!:\Կ.G2.Le"(+/3򦾢}ܠjrnb)D9D%b(vc..{sgkW15ߑ&{LM='+ms^#j4=wv⽮q%-j( J8ƴQI9cA X=AxN4]YbgVr+],sH>r2S|ùR8泾}>e|~o)Ɇ^V;ljvJDRc:?zǗo5uL䁺G9"v=O"!  "c(+xLNM'6ω:1::0'&ub7]DY,qZݞ=_j5̸8*_z85+wn.VZWZ%'BD9>ꚼS;_wi">j+ߣb5=ߝē˙6%K9 l]zh)ϑ@4DBb6iRVvfN\R8'ܖcŐw˷?ݒE?\[&?ߩ]-AFhgg릤MюM;FD:_hM}O#uSGݾ[-"k߽|mcKrXs+Gg/)DHqFc 6qh/E8N]-JIX2܍R9'Fp氯Y9:9l>rX1uQ2;-p\Ja/QC8,rd*S 9l FQ9l(qK.sXúP2kGyX[ER FrXcJal8LLavîo9*:a5;>cF8kpx"L9ɸKOߘlV;2XsK*`'YL݈E~YLbvb.ubZv+EQ )=5$r<B2[_*)+ZWTW( bJION2eH_fC4(p֛zYMø2Tv'G#U$T*{B% U U=ɃD/**Qn **/%ih]:,R{pWh9g%;(*Oyè%7 | T`Q >7E+DEn+DU rc9⹜ZN{/}`9-]N˖Ӿ ~i4|jL@|jrfr㢽tY(_@:I:M߫/ ?|(3R_L}[^n*qM|dúsmHn=>3繵SP %N5+!$rrRJ "3|YMN #冦])WC /RE$[eӥ5Tܴd׾qq9kzyW2v@綽 Fk375֮$~6o vᓺGsF=#l7.6t6 4=g:ah)x(%liMFM5=oxf.in$ ;6=Мidm~L9gMUKee]dc9b ( "C#geV"L[֭/Gc\<'iW{l[ ̡̒~~ d' Rٙ+A/E^(mEOIcTit=2A>y/1@gWgwݥ\$6Vbʵhsk@f? h In\A"(I5v>|_AZ̋@JݻOȿwo,t[[B%~%tI. j.8#; W=KJ騨yF%Xkh_ /b~OɊRKCE7*SE[[IFP6`B ]?L';}$?PԏPGmRfnSfb)j` lF_.U4h 8q̬q~c?&C@~S٦N74ʏJ>IǍX1fc^Ďny3+=11qlxb^J~Owe]@$J=.?xq&ZDF*U?R|2+ UW8wꭞrdta0CoO)_Zcov sωCKb|Ӈ,Q\6~ȫ 4~+n&Ǧ I hKD_'Q_'Fc)zl"/0jV=QW;&,ourPa OFӚd!B8zuGj /.@g5]MC޸7ijjrӯipȗ Ńߟ#&R ^Obe 1 GrwhSNK?T٧NKg7 ;M̓z`֠2 15(x$%ڲag 3Ƨcs>ƉFqG6WȰPS)Քe6ꇍ3x)OLߘN>Yc9|Kۜj20j8sl5_5, -NVEq*Z[cgrnŴ̴f]gbg5~t/Uy>*/j5[!ϮT$XV:6ҵ3HLlK|36,t)f詞sL:nS}FO 8@T3Cvl (S7&![dO}%T/#% |gOdI)ŞA _+H l/Y'y xmOZU4OT$ϠO{v|.lWLg5 !W!e2I 0CHԅY"J>&5(ֳEK<ߌy WI^?yTI 6|ޫ4[D{+a UAA*T[bX61Lr2EZ]C,4[3wtiWH&Bg$>c!*}%7_jx(H1k,c )W~&vZrC[!h[J>D\\9wʭrQn5VW/4,M3?+k~/:NQXg~=,~+pQg$& dfEUltIϴ唱p~ֱ7q7j`Y̶7M~ᩚQKtZXM=#jG94)*W^ {|B>[Rvv[{xOs "no/<267A-mHb4f'&3@ѫSLiJ#.к>%yզ4S _kd:'L5R&GseflyK:S=rj!֬GHfr e-KakĤF_G7D$gk+Ut^3:ch̒9mc;jarHYT,%1V鐙?^7롉J] - jMFxRiAј4{4G4ƿ\ҸK}&tx3edD:h}l3^9Ceg\8RG(Z:FWN[tƷ9u.hfo/T_na7RtL7,A{~AcxoN.Cu"tm]e,hok6l** iںy2܉y3̿G {^9̿1v2Gn|hz:!Cg2KE]$Y)ٮaQRtttci~22Ra+8F~G?j2j׺g-Uʞʩ[*dG5/[pxYHeY51S>c}I#](xȜ?jFOd3"bWOuYE(ߗzZ=o`S6E@,eG´|_ycs~6i_3ߒ́ϥIe YVi~4f` g{,5^h} $^|љ^!AjIM C@mViAe^r_t.1SW稓L\.T%!HeYVb`V6!Z 3dK6͙=oNG^.]O~>]U -UQ_b*XSTp/|̫vEz\vj@CƗjI~?ˀKqcMҐeCa^+J}@׋̜RPYfy|?duǝ?&+P}ZGn㣲3o뽹 =}SߡOu?O+g{_C~?i'TG .[.~ _/q_us]Y..t~ ?مgZ>ͅw។7b|}|*|CfTmKfcH8;G=Y|y"l5FziSPAs>~?6O#¸:!xbHQkgE`5#+wOB;߈CWozKFtD!W|Ljk^X'IC|%jR%0_z,Z u|UdVRGķڡַq*VПvKW|]C9Çoc:Wu'{#{'<Fi'u4/3;y= ~_f jy;>_ؽx~ 7Qs*;'{doK~+;'~z'{ >^O_a=OGJ0ϓr<'|?ĺN[;]gyx_ϗ#vڹ_3|5b+RF Orn<*YȞO)bOX,>/JԳ8IП';?-BN$s 7(@ޗ _}}[ws)onZD-V[Wkwi . 6p-'ƉtbENl{Չ-pbs,'Ħ:NlrbZ'F9N,waʺnZk_BQߊ+le6 "ckJ'VĖ8W'6׉rb/:Nl&:,'ubiNlRpQF}6[s;gj~Jۣ.VTuGW շRg Vy}uL~QI}+N[{uF6Bb5aa 1drrxÊ@a Ö4[38z{ YlB<5s|g|_&=sy+<g̝r ܶX__@DWg Z+9$C ^KavGS5>A8Źnf*aS2`M4þt()'6̝OOiL@a{'eK/b': D7D0B莐!DD('" x菈D9E!1X `Pģ8c@|_xO@$"`WTDb8btH(D"8b4" A"ccxzx}Q~Hx]$wʅ#O#i0nv8IY3#Ʃ5'TLi __!Ϛ\4C]fS\MF?RS2@1d=#)^D[lt>w0p:-/ 5^B1xLIk([!W_v'x8AI<2&"3e_/ E'x/]ZB좚6 iXZ" I|=7;510N*n #ށA|Y0\#wd i#q%^@;Ȇ<A!^&Ca^c܁pLlG~~v0خ-t,v{?pvGȻupEB99 `_H ]KSI.NS3Fdq9U J17;{Ot qp_ϝp'"^0r#e'< ɜ/"xp2Z,)og;ty:&H~_Co]u,M{LE#s0&"z;j';9Pކ(>tq;O%=Y1mnSrAWsMR7_iդhBߥaGƱ'#tMdj2mM;eCjZ?s|ʯ񥚢[ 98NS4#kvYz/?h+LDyn-K(ӔʒK5峇 #qoRAK]0q4sgj?uл9Ǐ()GH(9ʂc>1=O^c#l?I Y a%Ӌեr ʃȘ"KF"VfϏm`+ M~lvqѴӴE̿c}d- kCn5?ن$?3US21ME%yA9w8^h9H4*~ ѩZ9ғ;PGy=3,YAkq5EKVj~0)i~oFpߟߧ?Nk)fXKw0`w$ 0&<E8JȔHa+37b.hl]#//nh!i4A1"0WZl1Z`j?G :ŋ>|v J`"7q"9bbb (({"kpl:T4q.⳷CWHdU{"1T@ߎblt5W&M/*LCWѣ )&sG+j TD!\ C&d #Lf*2W"zۙ;Xl2%!ujY|h(TkKgQ&b6.3 @/Zb sxR a.9Vjj:dqe,v/hqR)*6 bb\n{tb0EkL a\Yj6ǭuf=YOxUjVRzWoTO^2m&ʩP:5y+5M  SCET1ߪK[UƯ']L}0M)z!#Mhg7p0Z s<Z00ð@sI#%64Njݸqsq㗍a͍aA'Ӎל3f 7w?9Nɛ8r6\bt$lˁ­LT:YU?pg~x)h/wL9+Nx^nYv ǨRXWO Y-f[&4-2$l ߤ\/f/N{=[f= Գ)z91Vs(H]a#AD!4YeUw*ḃwf"t bk I)[jkdaaGRAԙڠ-]n35 g)Tdх)ԕVk!̛= >gA%ܿ凞a u/;ѓNΦA򭕆چTJ ¯i4p̻zwc8 kUjQW´fG.ͮrW̏̊tD{=z6֨m m.nfYZy»GZ)f8u5EΪ3JՇ5OT{rRdTGz-!T`jJۻʋb{Ľ֥,3݅Z&J՝&]@mVPTf9"r$UN֢(Z0Z7RR [T 2 O jtu}J j Ӌc $epJWAW8*iBRiFe'D7*OۃӅk'h~螦UrÄEڭJ2G}ܜ4 ؚa8Քnm@o:{;u*Xֻ 4GN=0"e vp=qڗP )Wpܸ[jkiOҷj/O:KPiQ-qq#a嗠Y8_ qG<$9. tfKQgAP]ĕ}aYW3_=u>R5U+5GFVAA̪g>MkUU_Wڪ}>Y>fXf}-zأ?nk6~d\sfDM~MInm\ȋJ~kh  Ǖu? 5 #ӕ[n7wO+:%W`DRwB\Cb Σ­P ,pu8~&- ܓ??QY+VQ!Z#ޭ|7%\a|\ePzZw'Ttչϟ̋|qV6|_E\]~[ȚlJ\5 ~@Ee}7g/좨Ն7 _8qO['+LxfZrK YRti>={Z}H4h\G V1u|4i0Քex9I\d3 ʱ?4NsdAPnd%/hDcԊW01爈9aH9bڏE=ݍ c̟"@A Uy,E^MwjkTcT㼦 SNz>M~}c#g#fZ'9f!BR>YKәKLYŒ^tVu -kKG|1.+t28G8+'(|dz04亼9~GsQA~Jd:´SՑ׺"ghE5jhԝF<iP:z9G˔LQQNQUQJ6(w(O4bm#WZi*8cTl~ZZttwf'MaДܮ J GQWZIs =[mH#4F0K 5 ҙ0t5lk&$xl~ܛm);˩" 8ƨkJ8FiHH"F]•jԥxg6j%ietFR<˼]RKCl, 0q0WGDsZ(@^lY +i a#0F \ VÐՐ5dtH ٚ 1p9W-p3, 1s,1,6c5 X(H (-U_ [@hA{8/~0%&W|Gqʼn$l2::~*w$.bDeW[n۶;C|5>"υ[ʲ_ p˭7VWy_Ied\-J;ԉ̷(-f{D,ǘԍ|bSJ {:sku=xcpEM< f x-?]~Mzz'`a.ڵ9Mfgٹs`P|AjYk2vd &dk6s4CK҉+!ץQcjH ` oad] iIZV;깂}lj/Rdv\m{A:fgyJ4^'^¹\ ޫjD {ôN$gɜT qSo^%XALKmI}N #_, 1JˉynxPW ?( ws 3< 4g塀Feӹ2uuV(YR4Aety[,Fl QZ\NŒ{%]]Z3ϙE5Ϙ,y{ kR( #5G_kP '>sy3VrDI9eL~ɹ͌e논qANTuRs?ϽYس VEۥs,j|'#1W(,<2|}fm_{/y֙~-c Q1({Z|vkpw=,WZۿ56rWСm"c#hmĒmF62V}_FNҧy?ӝ֔Klbړo , I04?1g r3'dNef+'G!!>+ΌǽaOM|_i6>#x?h:x; XGw2oHR鏆T.FD NJUTGՂmkm-VZB"+ZIhvx|3|F 8`ߦ4WFYҿU?y0cpȵ# 8cp C_ < C+%b?K`^oW7;XxzX۶5?H18ag)J(/6M:xL!c \Et 0 7)k_^3fkЦw`#Fb~c"]ݩmi!eROaԑ >-{p {{~K jqy"XV("'vomhL[X'Is/"8\)ZǾ;2 >d0/=Ěsk'v\ޓGX#Pu6wK"K#Ȼ؉8n8:HQŀ8NmB1ee0ޓg WދLސ1BW,hc/ސw߁+?78 s` 6݋ﰚ|Gq*{&o z?n(@'X 6e+Gϐ #8" 뻚)S9·'T}'̇9+DYǥrq] .ŐݪVy{䭶nvRxd697q4a:1C~ (D#\OJfה٪V[[-E; 78;螲'RhxO=ccɗc=&I 50룭/XDJ詿䝜K-za9܋n/mD?r1x1΁f.5S&G[qy[<:Z3'yןu4l]kY5,+- {ؓ?5zi)˓xl$HOgH`I?Y6JƣȒZ)w;MHWZ*  >Av "~&6GJKcGl±T/s޸#!v6+ߟnvȆ9r4uyQ2Kh2R]q,2 `Quޞ5+4S5Ҽr)W%D'-*/UHJ1? /<̿D:KyNj۬7!Dss rJgs,#q^{X81s Ce4uѴUQYFI~ٲr)eW 7^, y |ixɪ)(Ub\Xv1KlL,ZxO,,:!6G =ҤI Y7})002`lu\сX7ۥDxqBB0ya[32 ց/ܿL (z@ t+Ha`wۉ.>_*»48$Ogs*`FѼZ_ jM$_'TS˲l h1KORUTf ü0aS'P0YǬcL:FXղiC-X:BZVTˊkYtGjsPEOq|DMοzgbmZOAyJKO3?5$i&so!ˆ] /g_aX]CR'r'NV2 G 3'6Ӂn7 {\sݝոck҂رckf̀'Bheh(xyypDf+9f$],~fo0NJ.D x8`, BB*NR͕&3 sH +ؿk7]jY?H^ /886ΟϏ'%W\+}AQ%έ~ ]?/L8 }<j7tVVmB >%^^7 Gj[`X@<iA!P,~EURKU/ƯA`nX3 Gy|V;ޒarOCn rKNEIDoߧ(\mòCp_%gi]Gi;X4 OB*בQD0/c͍aߋaicȕgĐ U)J_ )X^ ]%w MXXbWY3ƯsBe$ R-gMyK&k{JJ!9_g82#Ógݳg*is&{_Q0}[F ga200Jy3Yk \qN/-%3hA$':ӗc+/c륍(θΩ>v!sSa.:<7ns %Ua~~+ؠcU:WWέ޸q@.˖?u.ڃYqW55wWɊ&p$mD[jicmMغĺם5jtT{<nvԁ y}9|³>Q+-ҭG |_ν.י755k\V@׍mUQd/=t]8k0 d(X$MA 2i0 ˥)|*&OUBZJ\MIy{P_TA{h4>@`]#V֏,vF7[L"SH F͘ S]YOwފCIjb"bkNΉ|*bk]n[_k.jsҐ|8]tPt.Z̿I+O-;OgA.MzTǏqT9,<%'\ąo.ʏo݋PvI| =nRv/{orQ) 0.W t"݋k[_/VN.)tv,uŏ R^9Ћߖ9HO,a]3ס 0``z:4l?G`ϕ& o0hT<E:1[u î">J>/3!\"  S>l|Girr20B.]pXDIw [*" }oL?$E)s*:4{ ty!l -N+ޖEV˝G-]Kk;ӚĈna!^}3%w \w#rrCwbB'%MMRdžyCF̫ a ɔ\7;kLYnR9 ''-kazY?/A U%lAa`+&{&{&_±r9接(R3!ۮgxlD:)o|bЫߝQ2uB%sgr%ܡ)ODk*0KtwQۥž]\J%6:kBVfYlvӗ.z7k,4j{ujxNV~5"UDu{|q1*#+VH9.pw;g kr+M>_ oIބTN̪SФ{5Mр|Py|RTW- ~:@z z[Gݵ΍vd3hmHY5&Ra9ءi^VN*;1E1 4UKq<] 1>ri;eop8~8?=/S_ҸDt;8s.ݯWY庯o.Ļsm{SIh[VET^ٌзZ*WouݮwK[ /Yce.R{w^ H*89ͣW+j5wt_+_G$[B:~S>~un9/ץNJ筩cm68Uv"Z M.}t/A.Z{^RW 8nLҦkBXsfdU'Id75nLcpkEz2G|6a K 9z_\,DPr1vC-a񧻬l38f6/Tlkf\~U~I޹Ϳ($/l#|/b1l; S~הmLT4h]!F}u>΢8 L Kۺ|A$|Ay067Dp]yo^n gM@H.@=[]+osUbpٳàKUW^jFOzD,)ꮘ?MzU#ɹ,vʡՅ(b 6 m]k4Ycyd"j*ɪv߾y .D@|ԈfcuXĐ+qP'5=rꂗϠjOOEw`Tʬn}< h g0X؇]L7#7 |E(>P>}t᠁1B5]h{=QUW*iFJѥL;װAqlSK ^Us,H7E;>C;~; ]1.b{3^k2sϙ]WM1=4UU3~3NtTt`m }Վq`Rd;1Zt${Uhö~*4-FgJЁ //(=7Pޥ;ϮV 2Ro}vE:T=NRdQ͔b6^?.zmɝ߽qM.?}hכQB:+ht_zo*85܊uh}St~!;{?MОё#y+1[]G?EN4w3 0w3.%sFd*eZ!yA%)OQd(ZLqZqUA飔)!2JŔCARU|T!yU*+W(V*V.)@N¸(X&aK'FP0[SV ryj&`Ge\ ˜\V1!=P̃KoUB'u .;|c3p_ p c| Mo-\b &xKqa rM0 fwMؐDw}̗@ܳmF+w|EEi<< Ѳ:vAtba]b02Iz]/p6]0{#~.˕Œԗ=ܵ.f*|Md! 7!t_` ƻÿeH9?pt9 .vQT""jI3px(qU.0Ar1oD-2׋ cFDC= 갻 yE"!ܪϸbȜW?~ >mmZ_hiܱ/Zrh1`Lz{%{-f'Ǵ`A*}Og0.3dh#lfU"WzށHg.͇ܷۈx6p4+B;x{}D 5t/8~D,CЪIDB >:CیG}HӁWs ua3No_B`nVxvsEטMЊ Wo'hѷ׷ɷ Ba^ a;뽽'@T1Vd{#}K2 ,/8]}1_ ?)hytjWj}֩6YIs:'YtN;>uB>ǝDwz&C;8i9mL'$̈;#SmwЗ;E7xEf6-bS(. $:L.!4\JOJJJIOH3דĄI"ї)LJn>}#_!Xx< \TUfEpA5fpIb3YEDwM -FS-47L5Lm@Qg'wYHSv={9vYg- f-ҐA@,Z?*laW` 2a`-; aT08bp2AapC{ ^1t 2ώ:a? ]Zo߇8_ \(l;fpci1ʔ=e%95ߋ)˜",H>[PKz3X94;Ȁi{:D;e?s>{;' MfY؃co@eUhv6&o;ɺ0bH{ /0 (~|jNR2"sJOR㇎j/xka1)$%gd4g0 K]_ТKUtkdz_hW_9w0O0]wD7^o8! )q0 r'78-*(h+)u` ҦQ cZ "r"N?ӂ B] z}oفRynK7F̹t3vql'ww4h'-ʹ`g.Ӳ-¤Oapļi'HKI^16RD}/hsL2R@O A-wa-++ߖ}t5ܢb/0nIgC@L;xn?aB i':A ߮taa>9ռ1SQ^m:3p#_mIg0;ryѼ˫3~i|e. Dqy^GԙzbhL.ے?dΘt&LOБ۴IGf09Od<&0yc=pqqxCp|NOY\..?כvp{i!:bvL,__pOgI9cG¤L[_Y|FߎB}m/IkI?m}k I[IMX̏ml}vfs֖3CچM\mxi16h#> NideKloPh[ȷ*)LO Qƒ"3'.e1M'DsgZLz\3B/-MjyGK[3S}g.>()yU6sOr7ršj١)a>}ӧLɔgOO'_ .a"a/chj`K/ffFˑDM ˍyLq~ۃdZKF2L+yujfv3o͜ ȣl׃q<-Ӗߟ=J~>M<Ǧ{كyҵ2=2F/f#DM<_ϵUkOu8[ݶax!p}\^–$H7[ӏMOF ?r0ѵmCp3cjܝ'$|q-ϳwbDSp^ZY2V2gQz(\W!ÓIpm-F0^Nӱg9mUX16emcWH2_2C2i /RBHEu?DuDuFuDGuNE:=6PrNTUtO?cʨ` 5ajݮd!͇0`.j*s&Ch A:{ 248|.6P_SsF3, 2`X\mkzþ mR+{tv ~>_KfB)QUX8;懮@FWaP{q(;Z"5wRCcd0nHN3CCHXY1'D'yAE0a$#N_Sc@i=P&ɊxB*ddd&KgH?&6ZrV-C%kRIԍKx&yJ>+hС>9t,^UV;ot\pzP8*v%GU$lEgmJ߶ȂG1\UQ((`bII/P%z)'v,P.TW^ *ʉ%T\_TW UerTTTQ*U{T'TTwTj84(B"GjRSZ=OF' izj4L|8jI,ѬTjCӬѻ%.dNjz]*vit'Dž鉢9ݤz# Em "]yXA5_l|we)~WI: t}t,*6`}n-ſpjTL!l5D-޾RnPxqwq>' D!"nЇkeӛǬ<&:8C>\5OJ|VP ܮ!O5k܊~~NzɳGlkj 譝+xNE9p*8J.5r}^r֋8teZx;C`u %j XDe8T3TF#@.!qϨM~G9=ebIz˫ ew%966/M?>&#"iȺ7r`Z Ieq2X(lL%;";'ȞtL<*ybUɕ3'# ͛6r/y|mX9|Q+_'!?,?+.-r/:ÿAy72 m6^vƔyb'(FK7j%S_-]7%.%_Q\fnxhʒ=%'J.)WHTЗG횪w?+\4g}jpWvUQW(sseƮ36+|Dv|rخM|yQ{N [$Ri \ ?R>xuKؤ0ui5)b/]=bG ؤZSj_OTԪ(ϯSg؏fYȣRx,,)iGyŦٍz3D"z-MP4a9v+A=nHy 'h]mkgD>sC^V _Yi.aT!+{5p:Uܥ헪tJGkHn`nJl,сZrh/ cWY5Ne.O:'~V"rQlr)n+{:xkw\6]O85'x;8ۥjL vЯH(9;EKN/LC.I3Q7m;rۚO5_iՑҔj闝ٺ+a{[šgͻxOv&{B8Mp-J_\I}Rnod |Y̡T ;fW.ji.(9[cLGFs8p)57g:Vm*MѩBw'Wj-Y0|TSf[[:oXRYa_Q#%%JvJ\vCJ9ez$UNyRbRrUP,9Ǻ2eQT+e([r.5OYu{@akHJkͺl+PC |׮Pn z"/{\nx脘qU'j5qU~/a7+J5dO_G}]w1ȏu|$|^')ǔa˅2KM߫90nC_/KާW~2)HUXSsLYښ7}/ruz0ȯ7J%E#{wM[R͓̓-+JJj$weY/Ptl(,lsL.')&*^VN1gy V/{?xt |K2)(Bṕ  E}X_rqnR~c?vG rVuVhUXjKUWn]J8j Ȍ~y Wo(w -p:l.X.;#GՇiC󌦯f&U3E=yhbE\puWY5Zc8K&x.f}/c_{;cgc})4?YޖbcXag؏ۇN7z&k8> KrJ܅]=K_ř>/+-=4M[Aguq]oOzqׄcSJ7\7PjK9e: K&_d/:s6[y՗rޠؔܢPVU/Rږ(S7J'.|O)T-TP5KF-v_^QxEEBWW.7}{|B6dG/3.gOk^&_e.]ؙ>!+E nESguIyy #UvZQhRpn ߣaA$ee$U .)jU5G4`,xfkZRrΩ *:7RuYM'^~d&5TOYgp!DMP3Qmuk74j~.PW7L~o|;:l6tx?/5R 'OEĩ>ECBpoӝWmR2ui}Hw-vplN ?wb/k`*xqXR;);«;jāNp ܴBPuY1߻ϸ_n`PYgbS$陚tl63)dNhzz6"[F-*̞8;X~G`۟ӋNʐZBPCY9@ )Ja `X*$$г"J!>$]LhD5DNs29Eapg$6.G'hq5ő]aG63|jp5ǑH30H p\ 5`}v٪,{3d79:nOg (;^eE ByF,^n Z#&xl)ӑ'wA&Vw]$r  W':g+R##YH x2IBػۃ8Yv|?gnq̃D5=&w#zeg _l2Ok*OA;8;!]JIM| ێ; n upp8>Tۓo7{oLߴ^퍝zpŪ(+z`<Ҳ^h6EB ^V1 h!ouzPc7gq@^0RbvX;A,9н*P@w[`yҶV[i[g-``/g_I2t_P01i4} DMXcs-nyۀ5kã$3ʜ~ x7KatC ?O@hE-]Sr?9^89'߽OEE.0xuq,2Hasyp!o$z$;,oLa~eI9^rVt>Mp,',4LՓN>Xdk KdqNVC& 1dPR)ϘN\Ap?͈Uh9i 7`6B:x; XSW- !ILPDV4**6TQFl;֨V.VˏZKVT@*hDb;|_olvT6!/ʕ/6[T'o[xevȂ))̲v 4ޟe4 sԈ<9]/!8.KY\.z(m;&Y$Q=T_d r'_G"i @#3!m~؛ ƹp%8}${'wM屴<ǵ~ dI8kWj`mRAc-Ǣ0y [~ " ́*lWT#5`>IiJp`%+I`%2 .8oI:~۰:YY [Cuj?(ݗ 0RY6S?y[Fp`bb胠pc98tb^}pQ:q[ a?G'`i`:kxh-UhLwwms;ceYq:>em?f$Ft.\owEP`.abA,a1 3' ?ʿS z**\HNBɿdesMVqide0c2]/_q]~~pϾ/LN]ACg@_~pcSfW`;~7^I>}ېo0usal' |̎Bsܦ lc~ΟGt֏V;fg.{pS Wwhs?Z#؃m@Qq'۽潐;}Ǜ !`[uMms/Wx2 <>P3X9wrٸoa{$HqTJڽq0{Y6xdf}Hf]"fv{D7Ws`/fOQIvIU\'== _V.#|ʍv-C1/h HWi 9e}P>(&A1)ǰ-"vl Jiиq%(fJ>r r&P{@'#u=X'dJяL{$LqɿZEOk7t1l jYfNUG |V/W ?Ks?L,(QEٽYda!,ߎїŸ|r~m19\= +I#و ơSv>m'WW Ӿ؏*:=9mwn~ lN<`1NiC:dVOGO?jr{. .n=\픱kTN :Qwn܍oQndn뷼2okApe:;vh_=`3a 6 b11 ۓE|&?8 ?HdZ݆Db?Ac(QF^) WϔdAv!, wifoV\г GX'ɔubS/- P'C'9%NK''i^l =@ TG҅Տ_+OQ>&;>=3zX];Q3 w|k2/*G<ՍʷUL<4*gePe5kv}(Zxt"Ur+eU1+.XkEC`tp]HW'+:gR/ _~ S)/T:fvkoPDCaa<8:xk 5=w=\[3'Ϫ_ZvP_E#C B}#tzCuƯ3  =HLG[ &ʀȼ,Z,;]1'ܼl$/2(7Ty(MB S@@b:5BzO2x>_*Oom9/CM喿kF>ZiHY7KDXFݎ]bJ4A IĵF@.-PtjGy*'t FO| ҩxȌ$ZIK&i/< ;L͊VzkU_DHU׷ĥ K1>Ѣ][~]"a>Dow*u\UO/wEd-C *ȎOdކmt\IYN) Y9uEx/:Q &lmΉ?&^VtO. Z듸K+<Ѻ A^t:F$[|x29Oi6+)%O~B:D n1o!$Y~B^\9f ZLd4i='$ˆ1V9RbҐ5r|91+*2j/'QPmM#J'JIt]EFl9ߔ4רrGųJ199dzin*4.EDg9("X Bb N6gmΞKPlM·&"oR?]8N=fl$%bM je L^ಮ~.+ɑ?T>nwg}vgJ:Nd7yiWi1& 2?+쌛g]h.QxA!~j/iok`?I'6yWj^4M90|6ߋֵhagR }MQ|l;}c#3l".lwL+uqE|xelz5XzWUb?EiPI[u:A2KѪ)TNkG ߬ڭ:٦OrM軝XoQN5c j*| [ G45vv + ]G-rΞVM,|r" KtiV{U]kc˺tMp:zQC\_W_{YO t!00a!=Q#Q#tl}/}rxr0޸kM3sF7|+"CK!iD0azCEk 5|ް!7tMڅdLW/cdC)^||)G]IQ\r|caׂEޏ/FH_ #G s/U=*-<|`s|xҐ]]o'oK3qxOit٫Myq; G Dm IKTGΌLT ɇI'T"=!G3BѣmjJ [ ɿzM5yƺ""=':fʩj[^N=?;;pE2DS 懮wruj9{s -`Ho<[ zBT}TgUۅMNqDy{:'SnhF!~*c= w*SR0DfAL5TS D AD@jS !=uh:Hy`8Ȼ]lM \eT`-pߡQ [`/*n |jPaZ`FxK,P ,kaPXx7 x[oAt+0ך0X}' %Lg`A``` " [^ufs[j2݅AZd!ٷk!^y"'R y<_Rkw!5·xFywG^/I/I;AOAbM 7 _o3LL-6u$N"}hb ckm|7$&L]"8Z`2Zxm`AxґUJ|u)\v##b].[Έ0R{MWOkCoM% ~F]'AqGFRߥNdFuYZk`d&y>>VVҾgwMft8i4&skk04hlH3[k!W$3a1#kSC `qGgp)Nb6@Ɓ.#NG*\ADIKnMNWR[`HWK{m0NG<@<h=Zc!:@S S'i fqua׀+l/9̃J'$=sӾdnOw{$>Ξ~ w{<&4% eU[Oס|x 4lioȯ߆q< C ǰ529 TYlRxZ0giqi︟d7z@ٓQZ ǵ6nꁾr{v55m`{#6 h,7'"k8~-p%<oݹؙÝ+Ql]"cPy'97`$|1H1ah 1t2WW$$t,n0PW1Ʋx`B\rwg.]-B4 sCc 4,Bn>0 )01n{< a@|au/~mpAn~P_{!Ό׹/7C<g q˵,m~OBQ=ރJHl;8jT\JBޔKLKLn55nBbv~quED/N>jYAZiWZ΁9| !^`O~]S̡Mǟw8^=}a/_˹0dprQtllGjf;*!1=! h#la Icӽ '27a oCH@ј 0o =kmPDWr'yB \Cq%5N&y {c u* +qX5ؕA  Q5&@"m# Yb2ܦhp5ᴅɳ4;C2HҴLgCZb!de7c I~y3T]P6pA7V&&xH ) o heo_*8+sl AVϏI9k/q18㞃Uv]0rB8F+q8EDԎلxDaEz;8onefV3V$hܟ`5c|3|hc׭u& Ϙa)<T/2U̔$Miw=G}2 ui%$k=/;8O jHs4IX\Nc2VC}7C!~M¦}> 7P8°{VQ31󚙔c^tCq 78lCei4RhQ]1Ɖp#~?kءm8S?|?rNrϫO#q3D+}:CD/#uhZơ9h$BdM@$8q8?cyP!pu-/8/8-\u\Oܓ:'!f8^[\iG/oLӟaH~'uÄM;m|{l;m|Y`ω'8${|cnkw OOpFdŒY"1oxj6y38OoMe{H"61OglA׵$͑@u@8F(q ͙̼ 2~G|ٸ৤NvS7zNQ *iKtfP P]8 V%-8q\*~~<7Or{QxSFiI1 :rq:22HKbUCUI?2aY2e:PK393n8B&zxĸ?C1uc>7ёv ƍ܈;O|2= Ǘ/\M8I^2I?Aq5cz)Wt7tI:񱆚~&$]%ݿ3aGp[0 hC!(z^_goֳ-T]=[KճOMS7u͠هT]=Oճdtr\!q'@EGx/꟣gd|'zFʜQ1 t(Ewz~yam ɑ:5"0!?#r?OqQNq0r5K>CE4ֺ9>ՏO&g&w ɼtQ}z>-F;qahBfdsgE .. 9dO׹,E|Z}s8zqa];w 0y {PdD2<{zYFj./GyF9"\1qm4|u SzF"J8 F7Byp,0<̏%/C1n3-xV!L#:k5.= P/6i&i6N89kpˁlwF3r:7=v^qPjbܯ#\~ 1?(Ii c+?mמvIωFi .I-`͐Q[`qHrRz\bRB*tL=zp[(a3y^=~֍,'M1[|]hFӿt.O8M jwDl6#JC U:}6 o:0]4R Gz7ģEXƣ7y uJ{KoC;\"~t°tĕoCvM9SCudVON7b,ɐUՀ@=Ɉ0an>Uu!m6,9#)O\RȄΆQ:TnZ#sanPy9j5=Q\-y̭<^סm~7H_ {wT>J82e%Gh-9NpiԀ ሡ9PHs~@pyQ6;<~u׬_-k)#?|_8G^YoȦ6|$h2# 0&ad\zB``K^bÛƖe"!qcSn7\WޥnU*Tg݅w0&؋t% P^^ɓ'aΝZX|(a;b2Ťuܝu¤0Nr5\{2t(lUi^y˰2tQO)?.:ql&O L?6. IETttU+U B]qŽrxmE߄[k =t'1&Ӈ QIU'{'Y0TSV:PN2s6l kyMY@~1j tbR})R1[V+Za\Rao(Yyȵ]A߅w͟X?aet2:|#XF/e-eZ,e,2VKkyk)#X,el22E l" 3 P*ԃzB=fPQ}f 1.s(lN6GRٯ[nba)ޣYC_jڣYpf0f,gj,DSSJٴIve l֋lus˥R`tģHhtζ-߷{jNM$s<:p~6 -?KuT#=Kjk @4؊g3Kނd:êGy?0[dBK,v5dew?͗8Eȗ|#ΠGF/| 2YdgFk\6"Mdhv4];rYL l;0ͪtfY@eL€,yFآ1y22GAf(ݬgժ=͕_hrȷ/ U.V|W ==' L ϏOߜ_tQV1f.ߜRKzLP}T]j9Ssԓ=q%|3שz:E=MDM|njT!IFSAYڱ4tpKJySStgsH|ۘ gn*Nڍ]#)CoNjhU:ZMcU[qǜY+y_`CȺqĀs3k"Z⣔~";dY{ tD?<~9P)l[*vɍ&r㛛 :R4䜹 ċEvۈȍoaŅ8\pu͹brcSwӖTesc]#--ޟ;)bZdDQѭjZ7zJv1/u 7q1ݼ- }0yJh l.RX(JOuv]o*ݮ:3?]z&\$tyvvV,@2$_ p(;.1Q)R*%们 ( ^=BۉHW$H." "DzE{+++%vA_%auoD"i 0~#϶j˳JL1ryfXdžK,-Љcխ~\mNNhu5mYUvGI;'& p900h: V"]PLC-tl-h"]$K4޷/;x̮c#<Y b{%|flN9^˖hdSΞAɼڑ) G~9Y<: NELA^jisͭRV9Z}d)C*8}J6 oGPk`>>ɖ:\|p6>/m^ g;w%>\z,#ָ'ߔp3 s*IT6]O*% 없;9w\Yer1Z[rU&L.N >fr9b͡ɒ [VP(Ŵq_/>*nz*Ef-bLn_EKХEtŢT%%K{J&涷֗/u ^`9/8lxxkxmq!ޟ 's6LXa YIg.QG ^3p"x6𓝒'?J 2hD"馦}ɰlԊϓ5ϓ'k556Ιm2TdggΜN%Mv9Mssx/C?=ti C`<4 igby~eVGpԭ֢ڥʰͰx˔=.1˰};rQ-꺵&.6/Sk^?`;*:y j'u_TԛԹ{X!\^sdz4C:ܫ7ڥ:N{uot=j=Ku3ϟ7[|\sO^mF+ARwiؽӬgQSnҬ;X=}5"BK-#T*mH,,U]oV/}fxts]Oݽ6U޷8EfżbV,r;h[d?ާw@YD㖡LR=+a i۾q{+{/xs֎ >ڌ~x|JVPohFJԆȜJ[:Y6\-XX+@ iL;8 ~ Lc' "tXU0&`V6.gQ;8 SeeNyS]JъY";m>+m7ysD3'g^>}@냺|dA2%&>}* QeepCV#3STQU+q=eQ44fJ+su+VyZe7v4|;\Qg![D;1O~aqх~mK긱%dcJHYϴ Sz2qC6Ģ2,SmQrN{\F<Ώu\~Q^[ߺ}1k%sǎǫ;v%ɋ aӡ7 ~NYȡVN}>k48r4d;į?lzVWÎeϙubRS{P.Xm_cKjWz\sR]oU_E{Cf$& 1ov^<3PRKP[=TѮ%=Ҟ#L=u}n^G]t65~~~L16W‡ls6뻃=ΞcGn#px cyy+Wܢ5~=~a2tcg!`^qeVD`o(qvH u XQ8%{+XSTD1>n>?+FƜV̍3'nGEhaE>|}XV{Hpy%SxqڝxM8_N3~z8@nwA]~0a"2A Aڃ 7$:;H]Z JWf)~((U)(ˆ z-?< O9cU8|x3瓘{aCl ۓmWV~kpc-, chG&6-v:;Lef^<ieQOeK³n=LExO,Dn~fmP{ S3s2dvݙQno3V4jh t_:^ A5hP=`&gmw _[`?/<t ^}6\g["Iv&q7qyN2Έ.x X}ʔ#1Բ!lD#SKo686kmZv-{ˆœCOTVjyۯNRpvYijr|lQmC m/})f4֧ J;K{aǑ>%3M7V-?ȇ%7^.%6+l^j6Bs ZmGFݞ7 ¼H}N]+O| n*by]+9Y wAu44*m:Bٲ\R=sܵд8Hx.TOP{Xԥ킞skO0vIx6:~jXOkB[6@45RbIwM)-SRMޚ{f\-@ZU:UJ*]z;o)NJ@iBA[i_TR:PKfZU@ҊZr;NMܓI(545xbF=yD~NàQ~5ކivt]u_&3{l:|]{iкӵai >?yV{4W+c*`XZEcّ`Օ .e8>k;Xptma;>bX;2y+ǃo kTQnt˝0 x,RWpi'Hw>vگ`W;*NWܩyV2:Y5nڜ?FgjlyTUV ԇuʟ wY_VGG'~]OsuޞQ#-RJ}j:\i}} p+-7n6QQ n9fff/Mc.-g-JDAO]{S\'dNwڕ(tT1UvEV y^+16?xGމ+YiRXWZ:BjO!5fBƃ1RlD9d?69cE>?+:XtY*B>VYAyѫvYD{MO-NK4;KnUSde_C$KH!Odw6y5{:9,ٮ!X7]E:ӆlWSݨF&NY2/* a2~dwEor>CC|2^}u/yŦq ?}~]9m_mkW8y̚l^{@Cۿf41 lofq<^q3?Wo> -^wh9(l9ܻCp rpr؆r^p=°cu  ^cߨ!ܫdK74 hwoE2B3^` L{! d2 &2B_; x'*Qc{C^u5i֧UQzE<{JF'a5&"[Gqizd6l4 gy-Zv7M-k!8F:p9)q9wZpY[vH]m}6/ OҥcG8ybspӎ!IcFdg;!c;N;vbF.j䋧a/ f-&_`Ep.oh%o!sd,t3u-X UR_Xָ6O9͕ܯ9KyCk~>z9D|~VκO82sDNN:a&y-l' 'X餻N#ݖlT^k4Iyo+_y#M=6Upkk[RHGG]d~\,mRoÉ9Rct sv 6CQu%cܖ~V˝D%裩GM{{<{1^{5kH!AьX?6 etY?‰ϥ>\Y^JZ@3#o7^$@:W~)9|o0K3ѐr14x\W$_؄{TVʚ񅱐N6XbvV<ʞʻ(`:_$*d8ݎ52\񵯦y0W)IF;Hvu?&뽫yJ^Ш54̭$v;ո8과sZG#lfG蚵vg"6 OHnkIb|WB92At=șHHųY/Up{hE_| )rfD׃S(\ex{hEYt9F&|MqNj6G#|yC~ߏ|1vo !?UoE'D^!JjpcOE>|"!_5}>D;#0䳐b#ȟG&~Қ@#l"=GTC/ChOC>y/C~3/Fގ G_?䓑4# B$ȳFW|,g"B "+n;r47}ҿi s&K{Ι,hOC>y/C~3/FގҞs&KG^|2c|W!CȟDy9=LG>T3G~!kߎ|%_Csdi9;#0䳐b#ȟG&s&K{Ι, G>/E~#{?%=Lg|4 ȧ!|"!}d3Ysd6G#|yC~ߏ|1v=L3Y=䓑4# B${Ι,9gt8ȧ"|> _v䋐/As&K{Ι,x!L#E<73YsdnD~89F~)߃q/!9g: 䣑O@> Vt{Y)X k|" ,0`Yf[ l=;&0?ZJE @`Á l);0"',X4`y[l3ف rhrh46 |`mvI` h hbl!5+vcc#_7Jűȵ"EK,<`ˀmX10;0YC^di%lV *)$"k*Y8X`2[l WY l& (n󓊬Td݀ 6Xl.#2h2h%Kle6 'L,`Ӏ V`V L,X*L`[l;"`?e9{D ,X<`-~`^d y l i[l+CNDdbl!5+V0_Ad!:6 X[l' O*Ru6p`9f[ l#=Ƞɠ, Xy l?b`v`ڟ0 d`cM6*`[vX%0ڟX`2[l kw{~߻Lˬ힔wo綶By=G/uVL|8kKC>q<'u]Z} vٰ4[N \5o}VNQics'>AI V@7(ǚ{_^]YSrTSbr﹭=G{}\nNs_t~ZHGچy73x ~ޏi/K^(AW7reb7"sNrY9|0),,,#oF3OF;F&<4DFƍ{ѐ|9<^P(O]@m\2Ji>xjK>:Jhc!w"%c';C$S&ؖH:u#yBK6HIR{Er i=zr4vf!7Qj%K\X@BhћzqU cJ5=Gܩgf iz*Mq dlyB>H&ˆp`^Z y,R^I I6^}[մL.i׵1ߵk:$Y$yMHPEۦ\$Q^`@-DAY B~2b Zq-$ƵZHZZq!_J &ﴘD _%ǒo9> ] J$?AWK2"{ 2c 'j>D ϟ 6 73n:G*; ʋ&ay (sx̋hN:EڝTKჸN .u#xja8+Z/ 6pۭ I.2<[װ{\42Vg79MNffY\~b_]:t\rbeݲ(4Mɋ;|e7vLEtΈk;EYS$-Y8wD2x놠#u8D;F-ޘs7;$͍gUZ!>#KwxwFn.nU|;^MOֿ'%2S>м$344i2N7.4wC7;~rzHMMMMS)44$ 17 atD$G̩i6o,0mb>`>a0mYSx/·ߔu|-4NzmΠSo֘ 뭱n;s_hB~|#iVM&;|O.tD>>WJ/I>lX_*4ۿ<]le4^WV,zAJ%]km<'[x$PKf [˷TȆ-:ɭK*#7OM; m:ɧ ;+d /{77S|cN>/Ӽ]-d:7yJdTԂOxOSIT(T)TUV%QɪY'Q}:"߫*>,(uXaİvּrXaJoyYڇAudX⭤IjtnXbQ+#=)l\U*o՗K~68m@˾3G?aAf ǁt ٣Y޸l:9g3?lm%L& ]BO.Mzrr]1Ȳ^jYgCVltYd]kf=l׿ټ"-WܣƹdmLmoj:kf:gS\V֫,,̫Igaߙ[KqħM׏BR^|S>^ȢVmMZ d;; ErPiݓ쥖gZƘhL3N16a\oaT2U;:zPnoϲkz->Vr馩9akKm13JG [-8J 4~57O |x>~%[Z%R7RXhK-/#oICw~vjeg'I*!^g I?tJH!ܥ/UϿΑK[ժ3z6V$'DE׽c űc W?c=^{ٲAmG.\T? ~mޓpDHiOue)Ѳ+7,/|,>hȽHW?H')͹9 ;`]ülg9$R;gz,m^c^~Jk铇&7;;p͆!1gT$ydC節EZejUli1LVWE sֆ 0f"kuϙBO5Oڲlm mض~my^a4>.J=ׯjqCQ-i١hNgukZ4B ߥuԍ&*'O '7 M֎fcf~?iH[T +j#/hoĆpjutQt 7fw\ܗźS[?{H7]L'f4_өal}VC?d~U*!#Vc**W+ੲoT/_r_^VX|EL?R)yn21W;&usN`U5ȵ0ۨ? n젬T+?0ՋiN:3!MgGGV޼;UNur,g_3RR:)}54'W\s;޾n{e-M?&At!*/>`]6oi:IэMoĬ}_"myX=uu}|µ]a 5A_0֯ȼ }ãxpouCheɊ%E=,ơ)Zwo9~k/?]߬TcH||h2_XvyfѦ[F4Mս{n.IqƔn+MD&kx+eY*C3y}ľ@ i)نz}r+B9@-v8k{OH^.\yiXa$I7qLy0@BNmUr}N]7ypAH2}{8bv0xVUBdv5I$:!`Ī @kx$_"7qgFp$ő>֖2pDtΓ^v.􉎜Ic'吘Os>~dC؉I^tu"]lEܤdBzgrqSo t NHʤIkd>;4!ӷDNRzt$uz>IOz@cJ :$W*SXE*}|M_VϫgUS"UibSy[EޡU*2̢*HQW"V9&OKoq_\(v*K:8`ei\f.ܧʋs~re}U]hꥺxjc_jw~h!%W3T/7(ObޖV{Uwɨ9UR܊P. گr 4O*/r>M3RaNˊu!Wm#+79' x9X&y eR>l0:y\Bn!A/ Uj%_]ozHwhġ# ~;pqw=m;mr߿ayN>o*Y;o+ .ɿ=\ |q} oq^br7one^[FAc(i0ٯnlo5KoqwkxwzI߭aiǻJ5yZjsO $7n[Oiֈ>/>GZ@gW!Es߭;dqni-c!u7iwezǗg!u2yͷX8ߞ+nP窻z$SQg ?y="?y3\/@~K7!ȯCތ|![߆C V  ې?9K/C@ށ\M@ y-EaG"|O '!PuȏB>F>,"oD~_ ȯF~f ߂6-F~/w7ϙ QD^| q@^|)E^(3lsB~.F %ț_j!oF-oCނn!y+G? mȟAȗ!_Uo @sdi9}W"| BȷC> H䣐$SQg ?y="?y3\/@~K7!ȯCތ|![߆_3YF>,"oD~_ ȯF~f ߂6-F^̿|3lb{]$gt& }1%g3Lwˣԣ]ynu6O#m>ChUtՓʉJd5q]tg(ϧsLNpKpr7SmsdLXvEw,#8C,Gƿ/xovl7j/ZΟc ]ƙ78Jƹ~Λs=ߟSph7gyY׽ѼF__xa x nyp_F'Ek q9 gyY^{=+k1\%$]?L79*G=f!_5vZX< Eb|eb$(SW LY].P1Ϟߐq?]۽3ﻼ_$ɟT۶M1WVZojvy|yB~ڮz+];啄Z;wjGT}vVn}m3v,_Նk;[mgu;}svN9͕$}Įzw:;/VgH>)I. 7h@^I}aeF˾`ͮv.x= Xg$lv(5Y*AVmm(V "X Emc}JwC]jjէjk*DTw&b>g='3{=˽3#5N?uA@A3c 8@ Ø>_ 3 [v8 h=! Wnx D @@l? A .#芠z @ t:#腠7}EA DR_=@"YDC.:C)iY8{,#Ǵm%oN&(t] 9L'a$ђǽAO<Ԏ ; }s+k[ uAb$x S6.73ca=^;5w1L؞!֕({FOɝг7iJv=X? C>XC ߰˩|>9Oc㇏߳޲n|p<+ 237cRzaaPy|`hӍl PviP*ㇲBµ]{BpO^h +P8[]iΦk$ɖ`a=ő'<fH?hM9HzNh |lKZ<njimM@GpPZ/+$+gU 8)1}.c<_gIl%xim|ؾ`KC.,'Z>YFƥ(dF#zjFߘ04og?Aizq,qXD`c1p=[l Uck@0ouø6찎}dV!Evf&rԔHzM*DS" '?M2nY&CuET'lLMrFn'A ;-{Xe˾1bXYMrlgXVtg+z3525;+n+'Vw賭VíVt?+z{+zݚ~nMﴢWXˬ蹦Y+{XGu|Xaxblj ^)AgŇGg6B>.QYD`c DBܢ Jf79_V]`lۜmq,Yw,l/1b9Pͨ2ls}g zsrO}~xe=i";=Ř8{{~} B7ƣ>Į|t1`j>%FV"z14bZf5k)V']Yl׫gxH}9iWP VϢmfonxg| tGBnm\RQ<r$QBNT!DtfR'{mx3Fm5 a\1@cx0<:3 M훀wjEg?f=<B(/m;!@6ZpE[)G?kW:m4z#au0~hj!TqziG(r(,J>m9G4sǏi?-s"E(w[]x%jMފNJgEC=:+O*\c6t~O@N-N̡,tNEey(Qoy/:>jWώ|ZSQ%W 5 r)z44f_?{!x7a#-0|[Kr |W;p{{Ϛ-*wG!k-sL{-N@v`my7>OߐHT1 鲎Hoo`8K1l?K2M(jei?:Je_Dv"}×D~R<N9'Ld q @ ۇ*2!q9~P;8#p12/<6 lw=z#!IAX;} F5y:1/4H YDC"M&ƐW]?abL/!880B@MtF2L*h~- *KZJn B۽('?$/2‹ijĔGªFg-ʦ*h ڡn +haXA;UЫ+h"xH_CD?OcyX1V\+sQu Џ:ʉ\;՝}ϻf\/ $W^ 5YV9 y{] $g}7V*rE^n\D!A#V3,Lym+ ".dsD{H< ԥC[t眰#V8D9aN H7J*fj"F_ : ;zD)#/$5H_m8F!"hzkx-BiU",m8UoFN3?\*A1CK:8mIPSRGmͮc55)B}}EdAY}]ZCfo )N-m±dUo41`2owPv3ں,b@6vz*C\j-mR(@{Gmx61brL"f2J$!,cqKgt=8Mh< s *Z Cv. fh,u~Hqs$ Ю[=8$? +ËÆa ;`Dq 08,cMyqX%aTqX٩_KBCbqbHY.̄Ieee遲@@Y*(K EB@YXk/Pv+P( ѐC^2w(r#j7~U,9W&p4R&sg8T1ܺ{ױ+?Fc%ձW| Nϔu(hĨ%W%pz,Zwao}Xﯧ,_/@Mp q&M,/H ?|ľ#C5PnĬܐ9CI.FWthFGM{wx?6CVYıDeJ^19VnlH6{erng!(Qyۉ)xo! lW]g‡DNSvGS _:a8"O'e',YzSI۳wU"1'r`dCNʌˮkd$*; +?bYuJY\zN!W+J Ie)(zžNz5tSʺ()eȺD؜MK=oJ"{5/hUUUFW vF=JSx=$hD]OS[>rTk]߮e E*T(Jd~jܬ$'m-uKM.мjuV=+*ulݤWSh"5I,X3_ mf0ZƶBPƝ0WK{Vj?Vm:t"k!uu77(i/cdKrOq`dKJhN1V =o\8Q3Y +]4nrh|jjJ3/j Xxֻ#^#gg90 aOƊ. KEYb|O ՆZC!U>Z,3rv}DQHTdW+*^&B».̛:q*6?۱ 7]>ZNX|_{OqGv=N~jvѱXjoo㑫%7,#N%7~sLH.ڟCͅE|IϑNS-ǫ<{D% xIj􍪞6ՎI2HL5Kj?u Uw a{Ǵ[:o5;5*nF~FBU5jǖ Jm*O}+u(7}%xhW M*/%4/~u?tq6\_e{8W;}p}qOy4~(^ڻ Խ~¢~յʟ|2 蘉fUku׿[JzIZ՟ax2Ch[E,ಗwK]NuB8sT@_ 'ML45ʌglы^{EIio"bμ{¦lBNb) _,x"E7m|/m]{Eޮ~7\1"[_Cduk2_,HrR{nn0 ͆^~x0)`\C,mBVmII#$%6|IwioaiGh*bWMK ˵OvMeN;nl:>8udzh:.Pc_X| C@.S7M7OnN;zQ.^֧0>oP3*3.D|IwJxDUk*KBoYS_~:lN MrNϐ!'m;彼ųl1!MrE'E"RR,Q^T|2*nsbd5;kR0NsM=G,WV(?V~4Rb^|$Q+&'}O!LG#'&RWslM*]ĆFLf3g%72٦}7Sij7>pLu`7e ySL_y*3LA97R6+6UQN_V:Ϳ7fE3xhvyN%ǞD9O:@:a@M~75շ7|=}5[K-NȗRrg9eKkt+_$`zҡGW☩~G}V= ^ R];$tUΩ"EI`ݑlMg EtGGG _vCg=>4 JTN/zg^j$1^#Hc׵Zk7,~/W>>)*^gS\;=K'ntХ@*:-+nu05x8TU;MQi_Du뢎l$S9Wկ5jq^#'ڜF%ۘ7LbiR($ Mk n?!}^Bh(bSRym{Ҵj=N}i'\x]Utʱh=w"FtFt]ēxHJac L ,l$1HHm+eǦ*I߼ ')HWH(ʓzi}P+GS9ÜFg}S8_g9܅wUHU'+AyTw\8t&yNuY) bV9sCgra1ޖ[e< (rr2Xt6Dj*41s4=TGlҔ&i4M>am;5gۙZ’7/T{a*T]}[i ħW2ru:g+ Uow{[~xjj=&_&.k׸jsk5õcZ(.rE\j NǝWF݀ߩ 1\Q }r=oRHERAJ7#J/Յ,tk).$.4Ƨd3#rrLH$a0#3sBrb~!-wL(%vN6T}W9󎭌i 4 5—""rtAH9`d:` {)Y Bbh޻~`FL,/)OM7!~mˍp6ύC#| M#Bݍ>oOQaS#|k#TX4F S!F6wmF7A30ُ)`0 ~#O1.º[MFF U¨z# rwQ( ]uΈ}b{pqq(nw3Eoxe͑R9򕎼FN7 .DW\mK Ԡ6txHO_7^@C/l!ti/ Äo2X7ˑn{ª,,KFaf/^gW G! @+0U0#@<7/eQGK4؞ 9; e=uVVTԇ| =34]^F>}IF{zLzgZв@Դ+}A׾F0ɰ`$ii=_ۼ!R/uAR>h1!\bzcipe 4HԵ7;4-}J%1aVn0;ձC:,$h`7OCcuz<ptrSo7./p9S!KUN:Ѯ8d#8+a_e^4ܑg;{u|!H/0qWk. xEn?twx)p_g-xy8{]?5ލu|YۀG/4o5JQ˖ [N.-Et=gLZM 6W ݷEpܷܷ},C4uWt .BmHv2m䟱o5?9IfaqZr6OiOސm ($&07YyO# /<6יxk ߍ'\t]lx= 0ELC8gOSKn\C'ϖ{ ;r!ϛfz}]jE`EcEKݬ]VtÊbEZ+:eEkI 鷬׭+z+9hvyZ:i>Zy,D?pcqs?(:4l£8EZWF"gBF (-C(82lˁ?BWkrtutֿa 8z|B>7''O>9yGgư(r>xr" 04e Y[[C\tzv]lJlOQ-ǭG臭軬_Zѷ[ѷ³ịQa p\_AOy ʖPfS\kjkQv]lY 涯F+pqάAQ`]`ۂ^0&'I'bI~6Ijk?_?kբeiOfN;WLģ~uAy0_ 3.ւbI-\ .܂Xp,.':Zp'-8GYp qw-ݲ[p ނł;g7;'S~$FFݶ P.31gO2ԇoҺ?=m+[<Y7O˦УkmIisʕ ۷Ac{2tiR($dtZc^xi-qϕEhxk6a칽FOl ͝$H ; ]nZݧ} )z 1S3k\I\TwHV~`Lg] C{(Ba}U4lhuTcȊp4}oupD7_k"@'@+'Z? Z_BP?㬎Җt`&`5ONObl b ^z #!Kx[C{9ؑaC|?t5-q}D0|ت7- BGqBkpcSuυ PZ`T^+La ?j"̂TRtϙ뤢t/ڡGW#I==Lѥhuv;#GhfHm4犩V>xYwx(e]aTojǼF# m#^* +Il* CN=3c<]'pN>]탞&0ubqY#A;8amlqQ|M\LT`ZѼn_)`kfnmSs3ii}- m9{]QguS?d& /  4Q=\u!]~PQ=)OL,\G:24x$GL՜Z(1m?m/=oSyS14+R+]ZToo"̴*d(3 (K >o qԣ6 s}aǝMZ(ڵ~ZQ t^=n.{y{3fݩvS2hk1 :Ϙ17>Jh4`y ,8Ss;ʶ4hx'Zwe_y_L'6CN >}]tc[6{qfB6}=L3ֱ.::t ~F'mv̶tO}0>FOshhu4(~F5`Fκe`Ԧ.t|Gcnuo:sbg{m>u&oڳa65 d5q>AZ>N(&w0wza%V{_bV<#630kp[e~F#_j+ (ꖼӯ}ٟXP71>ƷϢq Ú*|ח֟W xk}],vJ_~୎Y.e3EJ#gi_dcܘw'ե1O T3-4)K ˸XOV۠~gg~`{^-Aըem~o&)MwjkAPVjoiCk$M ;]K^<ûjӭCNF,A"j?U;j}i_,}zY.<ǣFY>]/πX"kKؑݛVz4cKH4|@ܽIwQ zXO5cdjd9r$KɈ;rD]3 Sx2\}2 :רUD,25I Ob_G0E>"y itYhi";R2z,EbkAN)&:Nl|P4N[%FkԄO,]+61aJD,՜ o5$Z"a1DZo;~\ՍCQGaI.0ffr *b&EZqi4EL&3=)n4w?C]Dp0}b0QhՈaZ4+b1/bZ1-V(ө)brEM6ELۙ&Q d+ck+3ܕw5Q Jf*b.DJ^iR!d3g 2F]KA_by(Y>?Ry0x7C1~ >.o uՠ. `+d ,IB6xؕ%@ׯA)^?.{l#K[`,^gmqg d ճ[f ^Q)ȈGNd[U fF!Hv;8Z$'n3?E$ZL8#.lS! F4Y\HmUQ̈́ fsk6|^*LsOWdb^"u*ʼns;m90MG`Έ!ˆ.Ϻamf0vy^z ;sM0sP_C9ZaO*2 '$@뿀oj3$G$WA:7w`sp?kM?aS0 Sg =VvIh˶ޕ ~뻫 .Y_ur$sxԗa]$.v2ݬoG/XS)!na<~;j0El iTFcȾף$M8;ϗ(}i8?ЭIO.XK>\\٢ \!d5'D&~%1_Թ|8X˘PBȆs)}OYrW_VLt &Ft&ѲzqFU=W|ȟYiFP/Ih4.=67½粰؞"ا.f.D 4 0B Ӂ1Ujߊ?!",Ck;˿*KqbIyi%6^"u+5U'aHevRwUDD:o JRU5f)G.ry|j#RP?əZ)!wNr>J2.IRr|UCUsWMV6[Sp_JQ+p09'2(2&29&@//ke#OF"Oõw\oayyt^<dڃPXId7cK]Bv CU֥˿:ukڙsycN*=H#Sg-g--UY`AKb&<_DC./U }\bR@&Y&(%#z$ZL笶̼\JL^yY)gn?J}g+4q>! W!(*޾+HIA1X}ML4WjRߑ?[KN o&g|GfF[s?zxuҮ]iºk?%W\Wmp^׌l2 6f|xƁڥ'{D |<0L/MT9%eύXڋQG>|cqRy]$s :f<,<)Y10)yoΓ;̊ϩ(8`?7?j*8Z-ަ(~9}ȟ"JGɬ{~$'xޠ˹;]X'g~\BFK'!70IRbh'COLk,a\䇼<(1֔ƚ|)S)އ|ޙu'^폜n/E!qq2QqqOϘ=r)xԻgp۸]wk̳>'G*\+`'ghhhܺv1cqr8I"9jNم)6ï U8NgwUIU*AY} 2*О:V,~~(Yr)cA 7` nVV˜U5wbH9ORd-#8-T&nlK%}M_1-N,lz5lQ--8oTBmC˘.eᕝ&hue'y}迎]#lKRxq;OEQ$ 5- =xxEF,#Mg z^A;~t-.\mTvZM?%w\c&_7~܉֒M}z]7Quz 똰Z‚]-eӎNoyˣ&;vMi8p+G<w.KfXR8(b[  9;woލbk/60`W `OΒiG\Jxegջ;('Ҫf08KYpSF`6eO%6a9q 7K#OܻDWcgA^/|"d?ede%Co0-"*](C4qT,tvXq&3A|u9zSeW^!^.VPPBҢܹܧxcéԏϯ(äNo><`F o+g7,.CٞR_UԣG+Q*HReS}z:RuZe. [ɪqd6yސWsȣ lYɞ|eae8Ɗkvvk֦~F1dޭC% Dp/-6'g4|tH'>}>>|_lVY*/gǍTwf.Cgy/&˒R2<үat<n^0|v1G.[`=xE;y(:3mq_T5L:O PkB6tِ: txD*hft`4w3:"ZW4KMlF3hFD4yDeE&Gma7kt-z5FX];*3-.Yao80%K}x䌱Gܸt)*$?;Nz?ÂXUZάk}!@a16ekvSMV"F1;wnu "ϲDne|oeɰI#,k9-ɻ- m$JK ` g`t%uz{gݝ{,%O)QdʏEmQ}}9D1rGgXWզu矌<]T]OawEiVtzIY{D1xn?Hġc7lR٬)iRʊ#.GD^o_既1)x̪CS/_rYrf!j)>diBuN^!Ȃ}Nq񊍊,]UaՙST EWUS|aF edNE\TIpiϞVi;Co2^`3jQLb]_֙QBv~ý.r_?6;ʝ&Clr`6ֲ#]7T<\MZ&%.lWLEM E:Gt5Uf87:(}C*wmy2&kx@&١iY:i['Dt^c\p '*vJWOv ȂFI{͏V'6Ė$W#QD)tKլzG^ 'ٛgQQ~ojHJmU\ ŻF5f7X@7;plP3z@s׫OC0P.sV8}.}=.Q] ?s=~yԵG`e, ` QB w1-M [423w>:%O' K%#RөdN&!өl4`JҩoMnf|o[M6 f bZbRS0}h%B( BDLBW a`!f|z9(DX,?<xc~#ijj+p~F3F8Qf#k+ak#lFkE(I0DPѫ݈-:[~EO{~ٛߩkr 7.`n6&Mc~כ{sR.[j7kTﳳHuǿο3&vFD٨f"3 ;ux5%GxHa\]w̙/tN`pTcql5EQs84'=ٜK95`y5!ZՙVHeszUl<&gʧ0zkΒӍA-~y*qk8\[WDy̹V#U߫qy@:F@ic1֨M0 9ӑ3h ;~RNQDؚ-5jgУvVM2A $SY*|6rޅYpcf4z@{ٽ,k\[GP%)Cǜ[_È>XM[|:?PS}yZ ǜ?UtXf,ظ77 JP>k 'Q!9݄Iǝk\sԩ7k΍ wߠWknFϽ; E޻t|{myU;R|%*"xWP:p!Sz'5>Ꮰa*GN~zﺀߊv~#@{ZyV3ld@}~/#h݋|E [gg ar։,1gaf4֥q[wzmN1Ch߭ezoݺH,NbB-6Wd[wPc?R^uQ8k)4Di&gΝa3FFCFP=FLe+nCvdIbmo(/F!.71/}<80yᄑ{qƠ6ZObo3`ɵk;o;~gBcG)zx}\Sy// a&LqTZAg (QimqO֑:{FC֪XhUT"C[T܌)ߗutݕ\B=p,2*eM8E sG@ X"X!X# AH"8!8# CpEflbO/o_~5EBs@ `-Z! Fh֬=>@18ᐄn /|bLuy`J;:{Cs0Aʐ !4,~$c?`koȀAJOT=]'}M 4f|C3x幓N!\Jl w>r˱4~M'zO.2qfOJKzU'!5AѼcJ츄a[ByḱK]w}U,? A~3W?aY X@mHWq[BZj(ds80E"ƠC6uWcQ cⓀc!>>).1v̘fӍ!7R1$a6֠B6$i( 8]TF~Q `sl#F!Ԓ8G' $%uDZ ҈gD3@G u0c>K#VLV`h Ӗfy}G~8u3e亓 Tk>f激 |szaMR}>ՙܥ1Le*= C` 7l099Agsy.b5S?bFd1s'civǣN &&KoW}ieȘzfmlymJlֳhː8-ȩa>i a;ܖp̨i˘62kOmNM[Ɯ,]]5/F F\HZ4m@(BO-{ۍC}3>5,>7ɉ^_0}~.j5kk}7AL/5e۶ۈtDOA}dNN( w{ j5O̕IGD :uTp.@ӏi :M;Xg#_q UR(}..5Zp*( *nMЃ'衂|zG 9d~dSAxvo,Н2 /``&?}2};#[j\nKm}wF>f i!6j% 0L_EtY}UPsk%It鲶=?C52ha}>zݙ?'@|!?GA7 # CSb432cxo/rG|sۆ?׷7т=p= {{,:$ 3K g_7dkq( 9.%>k>&f%]=@[ ddwOhl %kCϨgF@]0Bfsw9)calkӛͿ͈;$& JM{F# iNq)[ |dg1Q1,!ɯZ#g4SgZa^0S7D9gg[cPߋdN}Oר>3DS5qT<3_xlsqnxpF}=gL?!ؔ7oH!z\@Y#).ktvEgNMgAo{/:y8oyt”v>Ɵ;.g_ Wc)z9e~qvd PRa(.D^q?8i>כMs^ϢRQ pbВ"7|j2洒Zҭ\9-*m*Y=9K8K8p "d1-,:@,Ff1vYZ,ah-?b7BUEwltvu:EEXQ_F,qBO~V`QP0 fbkn6 LjG]/VH`4矄݇&1aOi۪/M.-)i;$ i#9hh"6G)4.۷l7/((%.#G2p\fqź922Om~JL̖32We?}GWwV-T ^eL ۩{c)jzet|)NmAkӽifhj6k@i&_]p`ˡadmv>{)k*4ay[g;ǧ$*t(^ GP_+,.MfGQV[ȄcN{‚NΏa+=<2f:XX)u4FPOc]uӮ;c/fJ;%Y_>,tƷ;8d9E2odJ#<,|+]tOU&Sl󔳘We4/ \q L6sŃ!YX8DYԳ8Ȟ.)ve]-Dl(`WlWlgG7CҺY33VWlW(u}]aVCKLE&ƶiQtL'v)w?˹4ΎFW~ة=oKAC<.0v hl/Wѐ}3;.AP`bNoI0K]I+Ay&=5Ȟ\?>sm 49 =p\[ ブtAZbAWtP c?Iv⩔#6q<O%UsvJR\iz;+bP) -u~R̊$Drh\TPMMcS0&ԩ&ŗ;9rJVwhpV˖*6%A 59T'S]F?ŋ? JjPR7am-ڝmRPW_hn`Q+EITG8HvH~  %$fLHu<ة}}'%vr]F7v#o-;ʡs]RI*t+Ukp7c|Z1/?U}m/B&hPT gIZ71-׌~͠餒>1KN+6%L-N*\+:攘竜dZtsʾ56IIεy#ƋXEE,WVf:3| E{ّ_5Kя=VnuL%O+Iݣw<{熝*=*e-c6lXnƻڷu֊gJ7df;.6&amC xq܆X=\}nwc(:}|7*Vv'}p#Cݏdzv=[}#⋠1gM{ǡ~&/ƫe+7I 4+/(x1C?Y[ܮ$#d=JS?|G-H&tHt5&H)_)&rEzt!L*T)=tp}zp!lRTX( S4*){*c),z O%6TDb%P$.Y{RX,tB+B 8*W*X f* fYu\ZP1^uJgܳR4Qu{ȺMӬq<`hh9#o [׽I_l{۟N-pd}ȹk}[wo'C<؀d<#iՉ'_}v#!HE۾=w|=aʢ7s22Nv>![d֤_q>F+:/3brdn%SʳV~aJgILIʭKJKzd$mfӯ6l7-alovΦɗVSURnXHnN̓,B9|EE]EK^$;A3M3<-f_re_BƗTiޗ߻{OSk DBm}~~ՙfI]%xj!jA[ٿ9>`KwCχ[6㰳xL25|0 RӥU}'h槮.>YYY Zל$[~f ^ e-s%"mU W,a>NKG2yyW'yP" .p~AݏVQl߉˅S>JB*^7^XLZtВn2Pd\)=2J PLfg:(`S"t@E.S{ [ #Z$?Z۸6+$[%):#BHH]PFvQyW ٖ:\}%̣28/-{, c2mS2Ǫm>(3/d++yA_ub"K^_qR.6it暟U闻JNqA"TBIZ:`hh憆eCEDȹMREh$>$Fb}캁kŞv]%7+ew}g e>pVW؟~(>' 4͔e`k兪3T9K7*Arr7^!n%S.)Rn19Nbm%+^λ Df5U?_-\A eu8.Xyhr(tS] (h7kX33OߦyhGuO&K0y}r[K.\$,t?!TCk{VS<9UxȈ sog{jmlntꧤ?-%]K$J&(הlQ}u’%"m Sֻ$]]Pl iQL%S_ vJzy;iǤ/1x|Dp^ !Ppnxp&.VoQ֕V9LC/VР.8j%R =jZ C[WxԔ!dhn, tO{^쥣|w됷UَX'^ *38vuI/pv@x]<`> XGx0^=!M^4t`.$vLJB|{NY1$21!id*7`l٤YtN D[5fȗ桉 `M Ƌ )QPa{S}Z.f1D&ms"A|T:t 脛\e0TB0<ޥpTM \+b ȭ0pV ؍6T: 0a`tU@ T+x8'T[&۴` c|u=b)0L[8L.%\.<RnkQ*t&;]2!/zD$\Ȳ-GiSخV *tZ srp(*unC`t<l\lp5MZ+` ፇ,DE~Hh~hXź2׽92nVJaB\"T=pYcU/ lt i\kujn> 6{pD(mCu6o+nKAqoч࠱^`<;"LQ&nq4iP{$qGNkw\D䌍!s1ގ b?;^宻WwF7ִ 7 I>ҿL{ۛ[4yk6B"mԼN_2޺Wt5Q}U6{|NͿ{{wCb>ge΍}()GE !O&*Môa|SLoa~/}ھgyŋմA>l;#́ \h`~q1!.Pcc(H_zķup@B ^\D]X);`X%a_o龘S0/Gmnž)F ;7Ȝ.j' Z۹87 ׅzS 5O&q  c(04Cq'pke"ty-tJ^["E;wC tnnvC_8vCލ{gm~|{a~Ax +AT9aߊ0tCч92ɒFWEU˒Jtҩy)5>#$ 8(K,ѡ,ѡ,ygH7@Ugpz74eN o)1N)kUD@<=90a70O\EiiigHۤNq`LkT037FA㸘`q p6qA ^NCy//wWi=*ѕƄ} ư.Շ߄WNi$egUm7Dw);G٢.C; a_o龘S.3)3Um7S4e"n"{@zïBs_,I0́Hr_7Gm} o69voeپS_Wy>z96oK}{S<^?];79[˼9Zw ku-݂gȼbSdulkdj|VF&KmOm_=?o秺*zhdmZx-}}&6۞Vϛ}CP ;ai ?B}"tG %o!MOw-CT8T]>Κlw(jx= XW=3܈  r3 "G 9D]*jG5IϬb~'n \!pGS tB_]!G`w;rX t΂\W--,H&3,[fqa$S`<$S #SG[14f\bfrn)KNUe%f O{`V7P؞ 1䅟.m'Y:u0ppOn;3_#^'^+G2mzz--b*#g6cL1ɩ9c X3's.<#\TyV]{$"fg`C#v!y~}h? V20Q(Iw`?\'gʅ!PZJ@c.^W!A.j"A*Z2L1E<=&@&eݙ4K&M2#if[j]dqQv7t43 &~(^&M01_2E|OvX:A&A!< xq!H_Hc_qXBP%\8==3c<@x8],>]Kl ~bq:\zvq֎@a$ )g]\L]{h&QOŰyfßm?Fy 3fnlb'l? ډA9[&mπSư>k5g$m6yiC[45?lS%'d"[WdЎQ vGE7* RyRu3L>Gi""xy:Ġh. &h]\ǃ@_2g;&;}ecYmO_ ZO;Lm0#m6 3;_LD n)=_|ߜ/ JZ/8 A3c4]w4{8rdgʶ05z#$%p[C??L]CܟmAc ^@(8FF|kX-b2i :v8_q:t}|h՜ec4>u4{vO^Fy80n.@<#ڽaA@И%FF1ZS m~m1*p?Px~@ooXO0;ؾUt.Z/w48Vג_o|u{D6h@^Y5Zse&a?ФV ݰ +zV `5Sˠ WbXWj%h06=+ǻI/EZJsttõ aX0oA? <[.Nrې1o<6 lHlFVOf|91z!;G1`kpL-/6Hw`Θƌk;tDs Ytْ,E:}kI"90C=<<'h%5guVbwݙ"9 Ҍ<$]%y [iNZ#gs [k~;m ҆1,l;֘fcB1,ɿ-^Z;^;M0^\|KcbԶFbp[7pl̋8o'hfOXA k> ͛1/Ʊ1 OclJ섷 ;Vjsٶ٘oFǼnk8/ő~Wkd+`s.|i͘#;:MMf`:`Vh^Ab{XvH}H㚑w8=ߎUC[ś;#!峈K/fBcc qb(^X~X kmeibZskQ0*G%m yD(rsYzzS`]{dW>X̍$voHԷ"n71Dق۵&SV(Cqz!dq6B>潉-MF=q<\܍Qk?wy׸Mj$=c`bL~-ѾqrNɶŋ"cPDc :*2(t44!i;j L82gDE/;]V1;ny #F;mcA&,.Ivq+z=4eq,[ R)z"=nG;]j8s0cqz\ǥqtF1)k2@kR Vi11OW͏;z{ S.Fz#0GicHF`$o ޯp0G].uA*d#P ѐ 鐬 kሮ1) j'؟ܵӍGs qomycxbt2>Oʅ'}yXóP ԳZFDykl(k ݻw)駟o+W@>P))0p@TwGtw2xm4j"*P2K@o#c/}H@eljz2-'<M $ERl[ _wZVKWH ; [nK?Z#( *UUK,HtG믞a\D,U"M) I4DQ'c*_oL%BxWoDC0w>^0' !b/*&gyQ&ˍWcߑZgG۳,"v-Ats 94I0LE/CL|b9ʴ)拋bE1KbDEQ4$~ }D+*ܕ*w4ҳη;B=uF("auY̥7YODA1F(HnG 9p>`>Xڻ;b7ӡ7i<&[$Y.4r|=oj,KF6y輥Su~vh|>y@\YXKvK /CU z#BNr s; O&_&{Vtcf.GlQQ_dղλ́a~n|~ց岅ɶ]![e@ZD@a0EQL>76zL~%~sצ '*?O8UvVq;vJl idCaQYpx_}F4xr'CY+ [ēS,[298rlh< %a9H-gCr^zˤ{ʼRn+ *d@^,sg@@VҌC]ULݖsM^%%*f;g,TPU2ds (),VEF.+є*i!yyTuEIa7|,tlifҢRpoK^,}PԶn>C*VLXPB8Tq"νP[]]=X:]]^rS]z]U^V},t;"@>!ȅO=oHa_%2ޤ]e&S>Y&";.=1&WyǡFD2!%"|kL V# N۰uX)O!?wyu"JZ2z`+r:F*swh+[g7x zdk8mVBGR>r AXM=1vvяD1Ų,z@*il!D,<(xAGQ]!3Cg*5 erK႕ KMM8_h`H?O;W9'|3-ܞ74g\wn2Ri%(gҙB¥3WE3/|+VX!m+_%ǟ_1冱|$ES(:bIdQ KNr7"B>#?_(aS|cLAr!yLczT}`xI `ːh*9TAOQW8T ]C պbO{JGk$$t]IIA "1-CrlSBs¯ ̍ DMWEuvQNЭ16ە2ys'EAt` OKncQuxQU 9[V/H;n=>4F~.dWԹ(XC=h5:~OQsU8dZD޷(6Q{S3E)IfJ06SGek[((d@Q?j ǭӲyTI:;x3!Z%ķ-XV&+g?+OvS'%% oEO E3F߈N rxXmJPFS.䗪KVޥj~bErOԶU\aAvJ@>qǭm]?b MalfMxҩ.[ x~*kYcn:oIu 9v~DH[n[tNIӂ#}ߩy.R.?t=#7/-!aNe!;T]NZ۩ U*LyeǭO+ޟ 9=6+ժu䱹 LnY\~sؠ۾g1 l#NRsNkjXڹi#W "DӯG|z]`7x/r0![jMPB[cHz9{!"КNtya{}׏[_Tu/T~n\U痂_uhulu ѳEb ).B$HIC*w_Zu 5TF[=ޛs{+Y'kZ{6^jڮhwTfRDe1K'lw8;_Q};1c]@7 e *j?_(zBMW%uXĂq߶|tsVĒy⿉=NIy𐄱u_N#W3]rZItH,~@ZbGWKK, EG (B9)jl4-ʷ7l 1I[ȋ\,$g/&b ?,,,|4.$o*v _RRհu< ]M%=7n.;&n;}ɼ 5lT­5Kj9 >̜wm.e6۲ S)$"/ć HFex.r?'ܐ#:?\AH%%I%9%(J/ ~umt˱K#7ۚͿ;Uc?[މ2s}Z[URw8W?Hn+&k.7k8[^:t3}[ջݾV_l:wfú;o<|KxI䯮h9zgѵyU]FԻ񟁛 U6QP_;&QAWQSE3M_ˏ˟ M!~!/Q?Fĸ9~h?:;}S iE@dt8辈~j^cJwg/M:YMB{ܠK TIn@tDWlrUM[/N3<; ((=Z;[=Vid0/wovUOÜ!2s~?"Rj!qW$J%(KM$PxoM:%9JMʁ>&|ERrT9>5lHnox<(<+T̋5`C0b>B1~C&C2($BC;D L&t]ݗAe㟹 D bS jj.5-\B%ʜha--AZF _ia#ʬj-$- ԂL `)Nj_P(jߓN"UJ|9EP}Ccœ īsUC5qCt.1:Wi$]Cj¦i)vw_{J 5EM'_}_]%fQ7bʠѢ`>:b `%u%/;O\E5c_טۋ<uSnK<$y j޺rǕ;ݯ[laN:WPvhYo?4dah&(*SpzN:]UItD Ż>PqAa"5&WO-maj]`Ž'hʹ28Q Z*GE[ވRR_J9K^{QuSgi]=>,yX@5rC jɆ˝l GԠH4{(rH}_VivZS|ldE{z( $Z*M{`1@BZ|/mKj'zt 5`az[q9Djݢ?Chna߆`}g1oF~t[Sf҅Z^p%Q:P2X}cy+=A\z^bp pFsI>,?'@'}T5:tҚ1=gخ0]n3M+gz' ȡwez=Cγ?jb"ص"m c-a,ݚC9t)ơ{r9t?=CCɡ90=CУ9X}>COp8z&áOЧr VX7|ɡ?Nˆ\tV@1\R鈮6G >%7 YF/0Ch 1Xg9qR=M:q~z\Sqaz\Eqz0=nǍqL=.GM$Ѹ&eMfqQӦcVǛ}0;x` V0t4^G׿ctdA]!daO=+8x; XSW , јX EHD-"bd؆mg:B[Kw[uZ,n+MUTܛF377Ά{=s{zhu]dfYVf5 zX̹G N$1H9w r <1q_ |?/C1ˠ)c#Eܗ7s uϓLahulJB===m XLqL_gzӆxuyPjۯ7O:ܝM?n޶~cP`S?v"!DI< V '[;gpS\ONONSEO+:8&1|0*}Fni^M +˭*(FnuӸh(2%J=t7KF+˹ݙ۵':zhaC7V8F2G)Oqx 9qeOc8]|H.v˞ER5"#V$F:klBP"iB>:eB?Վ.B/3\s!psg#z7ctvL0&ڤx~THBpSx+y n H}lUs ږ#LfΉO_Ȫg]}!gI&d/_6ܩU18K(F:Ю=U} F{TCTJhkXa(E&< ~xcT1_crnC͢Oܖ13I|A#5kf(f& zu>'}aԅ2"m!x^Cz5]"G(DlNO$ء ]"ZKkK$OK@NY9$K%!Wa6$-إ]"xz%{zD"z+GQbyhD7)3h! b*ƚTWR f&ce˫IY7B]q_0_'GMʂi]7ϋ7pť[v>{fw*m8\AO_e$ٕxץrL_BstX"i8x-ÿRO^X6fpwȀx1[էd'Шca5ni%SMq9Rg]"_.TEXw]l5EV''J W%;[\ tSCa #WέWM{}]QŔiE({]{DQyEwkݳPּcz;Qܜǩ@{ xo<@I$,L]anXa~Ǟ {A=~G܌#*1Lؼ0ɟQm]ZR< 4,(:ZUW6;,Y7JU^QVP?ki bCŁbK@J<&={l)R{ )t%e_0.zo9ixiIyAEAI(UF.zm)<7rb+f2#>5&{janyyt47hh|5 1ם︮/~B= جcXw %5F [KNNʹXbH>%04JZ-$4M`Em%-8 SyޅO/rŲ;&&Ϻm^wʽ-c白OgIa\dyAX[DΖ=~oy7Я0_LmCTɫDm &U-˷ysϩNr>tXХs9/ ۳PBss3?~};ॗ^Ncǎp}x8qYL(Y6Qz-{Qey<>BcXF`3gԼ*ո!@Snᔞr0[bN߯dϩNSC(& a0ƚ-aقB2PaK] C2NGcb); Pg:C#El'hiG3xaЕ񈙒IeRzF\8ԣ55&Yt=0Js*Q:^k"}Ho..A*^鰊YUc=TdJzƥq zFZzUy=1[Ao@w %ү'd:XU<56iyP*9#/~0588ְ0-ݰ`!#'*xSWeA9,lhN,>Cpn|X2Sm/MjEa푃ʯG+EpǼ،'ga OrgAq5ZBj"}\J%*]#y|ˤ5iشQAMf~aR d?=uUe;4[GBAdDWSBmI8cgN\Hh?dUvO\~չDQU%gySsa}M:{&=_0\Oh;ٿ 0[Zj5!K U f,KSG8 (FEA+܁C9ѕfiHMJrkeQaUM7(,lʼ]5UE;s?b, ck7f5,~?`k#jkԾ{5o˟]dZh7|Xbյ{7o/KRr44446 kGR =`ip  K 1l2ڧjb{6XӜb7މۍ{OLp`5Ě2MjRF`edaB>}\E_4i7õvC}m=_#Uk[ _ù8bʂǮH /i7GNvg[!ۋ Tf aI&kXMu;+iun+-K4t>|ѡ&>];}N,Z}t*'_YI%9 ɃT^}e?80wU/ Kʠ@vDTQԏֱ!,VEs5E#P&"H<:tjNXҚ9argP_mTglT*ߨlT3asM Mu^S N̏0S4vFf.sZCx.6|vyFm:s\6xxoP+7 ==7hY c!οIwQ&VY?i\9֑+c wq+40wp9 t߽߹IѲ VB#ȰmGj欳:zfEv VvWМtjnLZM֡ThЅ!-PW=#쑁Ei'k.?$˻K(C н"=tK}cΚƜ؆W%B3?[ﰲwap84ǝR/_w&,В"C__iEYXMc/G5ZK=VV x튟~PɺTJrcSX *]s*S7W5q{y]TQ#vO}CTJo%>5 {o^x:m9QǦf+CNnЍLvlvFUVEsά<>Z6.>R|Q<-9%!Hh#43FT^=zh~O//}T~KZ#G+z!$fЋ-Z/|?2F6.ni,~sv혚]I-3>[tWHZ>:ި#ljvg稥 ,|Jk_;j7ֶoP)n-/ZT'j}Kf%>}rJ8Ob=bQ ) 7аu 6ĵ65Κ]ħZ'R&ojI;]LT?>jOF:3ҳh3>cy:lJح_6m+MBl}{RK+~-a<|m ;wV8(`Kْ\M7z~׍/؃l+zHqH ~BfZ+d-N_jOqc+Vx'Ya^FXg,+LX+h}V؊'n`l h`lcFmic=. fJҥҗϡO#"sz)f,D<}/-rLO`GܡD~"u2_2Z/^Y;}<|QStkQ:n!fE>炜!\}\A ]6MI KimQ(7* KR. FJۯ&B~ =y޶-gFJA3`[@Y>7ѡ+h(_="+IYӏhMA/ǬAwtUqR{- /,u5-MfX WǝLuޜ*Vw--e؀0[ӯAPvX(oYw E#TɓU֦v fK 1E1\~ iUrYBe/!;߅3(veέfKI'> ܪHu갴fɘ[sESq-aowN-Z]w(B5Q' .U û>'` 2Vf;=VV\sW% }$R-4RpEwzKPrDmɉ9-4 `@xo=t,XxEpBnQ8m"}M5Mo~Սi-!' <9=y7wzAh.R?G&KnB~[s0{s{3zz+Y}wodt|7osFO[h1=b|n<;$)w6;oV'{q# 8";=.-Hd\HyL,diH&=4#ǜpF0B7h& 5Ću=vɜ}?Lզɥ1Cl]3ז6*W=pĘ{XE?e}kǎGY$,1Oʊ')"=WUdǛyty/PvyM=[KcTyߖ'd<kʝ;CAm?0߿ ۝fp(mF}%Q i|gеʄ<i؋;AZ c'`hQ71Dl;Ί-6S(sFzV~oX0kV X i}ix_;pv1AZ8P l\cs]\XAD6FXCSP-aM=< 1m*_.Ւ#11]VБ~uљb"@+a}aSCcPjt6cU33w݋|.s<,W*y)I2w2 QVbڵabw3eB,Zme/C.oYnB1FY|Yyv5։m]6dlqͲ1w=sjoPZ财a|ԒL#,7d5`h }ס߇m]QA2mǖce]'eͲ{hCް׎Fўj׺FP}J ƥćZ_rcNۉ`dz4s #6^z{|OyZAi’1ӟ`GDd ca p 3\oνlP~?@UcVHs3[5ҏ퓨pj xjnM2&~l H3Y2gx~/7 x]x3kc J|^d_7 p˚eM7{ 05񛜚m6s p5C8Y'69 |a`2FgY@y< 5ssmm١'R\dm|ֹ!sij2ob;\=A<{.fe!Jo +.C&ܛ&+gMdC&K[y%}me0PCw\cw|\1"w}y zw&4/?@~%$C[_h@{MD~T{2{f߀++lpcؾWm~]A%TBܯ/1x^Mp~qh5h v5F2b)A0t_,% FRQY$z0 "mbH La J=wue8[M8mPD }t"#Hr~$&&G\I 0ow !pq=țXy}e"Aٕq$V8 qh'FhfAI '^g|dfcx`<^0C< %1c/Br!9AP7"R~4ZsD  .s#FC#Vb~ K`:Y@N5F0PWB'I"jmD qsC4vu ́d0E. `(A7 $3-&I000 #ѓ>^Zғ"5nx%"6=_\w.1l1lO?Yw&ugTX xFC,?œ ꞷuHݻI\hz4_B"RA{]>aXg[L9C>3z .h~5XGCLb&,\N"ϧ73yǒ /XrcbMW!#&\ "Hk,|r!ג\}E'p/E.;aO<ħ)x61El3x nhOA2%Fۈl1x 9;RFx.7YH@^"1$"Tҏ@Yd D&3rMvd@l# 28Bt#Wx1yW +H|Nyd97ȝDf[Ijn ,g(,6!5o>B[E\Jwz3ogk mAO~{YEb uȯaưz_={,gA~: 4',<,~4Dz Q,#t'䇱 $W`E{>ti*p/1q3Q6C*>NPyc5wcqU6CPegUU7 YwdzGk2 GznZ_e$4)QI zG/c!-,<IJwB8~HjGB. "k~*-X}쾉l$߀wa)0'p(p;0ܓI,~I_0&{Sgax \I泮G/2ny,U+`]m`*oa'j߻,|%p+GXl|! Oqc!ŷy^>̀K+&_׼*^3׷H9y8sy :3%zc1> O.rNk~(6@bKUh^E0 qT{6=CpLזE6U"g3~6c:.I@G ^DeI -t^<[$O+Y.( { 3/Ҳ$DM;(zZTQL`@߿~V*U L mL+:3n3]A!sNI5 ߶]|qtWbd-J+c%0ݷWjuV#fwR)L1R8e^r_BuA) L ~q6*=#i+j;0P5Ť[3DŽA ~7"+>0 :ix8;ߧ)9iPrJN}m%zk׍Xǥ& Mj-1<%53Crz37 8 @6e`6s= g-*7h'HĔ2`?Q 쫋fjKu LsBrWkAJjnMtPߣjޞZcd^?|d5TCBj`x~oo:x-wbj-}?Vύ?NG;qZ^ig1*IHS\tBz:zsRi_Ps;<\77"NN0d(Aд!ICR3۴a,3h>L˂9HM ]OzSsmvoM0÷e>u-Oݢ[# E IL/7RW&5Lk{ߢvMr O4L,~StxhRMo:R^5cꚚE,&&X4ˊk_l#;v*;3ANCg|51R!3rB2Zv+CQX"Z'q%Ҳ]f!в<dz8%˅mDfht:!e`QD7O eٰ]Xb4"fҲrZNleÈ?iYq Z&&H9̛!lѝeib-E̡ecUmthE2ҁ^FV8n +BIe{ɝ} ͦBr,-;{-:AI2)afBmilFˊaOgBu(™P9J*w$ i8grh3Δc:@ѽd-IveI!-[O6eȺ8Sfth)iD*.2th:YJl -˄v i4 1JKFȥ\Fs!?"=R}wBSThUx`%dEQC ~JS0bmA?̧NSABkzxT~qJjw|\A;'r?v 5J>3'`;QIũiHb;<7|W9:?xt)_*0HAWv]m!-=ҤƆ鷇P۵)};\aZ!s+3J-VW2>0}Y a\~ZGd qRϘN^-Lh"@W0~s]_uW'ʗ#Y9}϶3غ [ n߾EEE`j/l0P;p ԩ'''V  ^ iTX 4e@B2/kFBehMp^4pmbR&iF { EK[fӵ,)b4mV +8y~ne/X3ǃMB#Lt(`>187-y4XWXE7 +hAB߮ E[`;3;'rb9|(Q;nnv)il"S~5w4w6w0~aByF Un|d>k:7- c9ǭ6qVF a`8ܸk۹܈vnd;7#M;i~ACZmB(,~>w>=}.m8ւ|=gt<-ĦC`&ۦ0+8)AllU#sX8j>6.w+589QO`hxۊ[O4uÿRỹyC{_o/( 5o6μS[NNpL)iécW8+yKf؞;jB7K)'$hc?Dgt{kg8%錁VdkliTAԁQ; 5A(7_k+3vG-]xZ\:лN&]ssJ8`"(5zgAh<@w47Ѓ! 57O,}8\uLI12nDDŽ)ۊ'Ph%5T =l'9yO?;o|ބ]e~?7P*Dk.@+IҥKwgo:mtS)ĵ͞XIJ uˆ&dd`l{Ff̑ dűn#ˁB~ItH1tUH[:*i Ή^))^*়JU&+G)+W)3JewS٪j솪L^lrjjYLpEF g@yXFyvv4+_}Ai}DG@1\3 (p՚ƼH5m1sVFLԽh@(iv(bћ"T2)dY R:֝wwqp:2/ayd1Oq6J# _ q \H il?k\ $ 6X"ט ij _DknX]CauLʝL8q=fK \lG:u9ks'v+ܡ΍9wx7>3cMVGzF;6 yr+.pf㥉0ʴ4˵Ͷ&w4\Uںbi|㶳YfsŞHq`AK+Ņ ~V%VnO =r[armH*Us3YY?m\ZKxy'pg#L30F.7lw>.񑽇w@Bfܔ [R,5̍*_Gkw}!~̉WVz 3lPJ)p'Es$Zd$TvIU0QT*mBjtJ}({(;&zj :n>CfxTjbtOs& 8LdR.1Db5lcbrϖsbUǪ:k{^piox*w+˭Uɽt2ZP&utr*UIe\?W'UDAJUR'Qx-x;yn'*c {.-uw(Z;]YiGG?ɼ7x7 (Tl%uĮe+;%Yjs{ -މzGhɃnGOq%]<ʺk1 vҶ:YY6@@Lf*?Vů<Ʒ'!#BHF< ]50(gTM:?R:Mt ϳuΘ&*{;x^3*I֞Yщ`rrr7jSTL.Ί"$*/ɾ*8{xčo|BG=T-nTG(VWO[Zcٛ/=dAv^dceR2F|X6tpFϏϩ V;ߟ;5a܎ ,khŹy֕&˿3Y%X5z9AJ7ZIozenR98#>,i8wpf/ň=׍''>Mku: %Qиn[IYxOil#*Cm ~~~rH׵r~>9Kb"7IR5@/oE]T9J%O$r~C{t`mD\o'Jb.% TŸo/ߟBU\KD[M݂=]Bz{vRǩsԂNqUit"iW^G^Ef,}(Zѝ?ceC; 4dlLgsDŽc8u\ m\2j'9X, /DncɷcV~üKxw]_^UAÕ?9D{jn\$υS3. |T䛉IFM$o8QvQ/Qa#$p[TRT`^geF8ܟ9}\ZܬChɷ$o8+S|-%}Glzc6u2X :̼uV6;RJah.+\{b 2W൥wgQvtk)5briS?qaX$ԟsr 7ofn9aIo.p\J W:IgI^z^)B>M_SHHX/ߴ9@HcgE,EV.t74[e[eRg.UpxWG:[>D>Nfɗ*V)TK* PT(+"{l.fH^+H]NZOgqc*zh$DN.K)r<_Vw-_VȲUt lT5aݣ9f#ZfY aCkhLu1gŭRZ^}LK޷wypkHLaח8ə#p IUo$"@乮DfW^=1`i7P>r 4=_ E˫`LکsIsTz̟TqP6}\[jew^y긁}>cn~b[=MŖ̕2AD6L;q1Nؼ)u[6wL]-7ۮ1}c@mEQLYiyiee W'u,gl_NShb%{K]UO㙙F"}S ~>> 'gt%>yk*OV\,KT٧l:b͈:ӠPuA1!'S~A0%ŭe{z,8j|:sQoN<3H$m9A{X$FUީD}}Y!VN ;]O[5tg8<Sy<|r>`vLט];g*7Q>D:_xąbŗx[L&׈mEb'~S~QWS/&4a8;0)h'+-ƽˈ=`UyS6Dԃ=?a5b!wg:uS?'?v}vkc{ J%['Xy8*9%<mIp9d"a_=c>'yעSfc<4hƤ"*/K#;E'9c~ٹ]*Zj=*gbǨmΜKTNԓ.org(^DSZpfyVp‘[In(ooڪ8aKsE}/[uȫ}ڼnvcqf6T=}3*n\$Yx-ʅ mJ`werQ$8˥}\12;$JHVplHP>tΤ1#_GPdV<_?%ʿYz9^)hR1_nETrC41'c4Sd>[VY+:;uu1tkGDw+k.6͏n#5m ,XWx٤sUxb!ǩ܌ܱm3 5+: "7;\>#e9,o3nѳpm%zL/ӛM>f[x^gC}nhi:cgn=_ZxϹr *ޫZ9uۭx.S(EV (YKګ`l̾( ͷ*[?gW<˼ƙYR6n2PT8YAƛinA.+Q /E|9=YPB9_uR^jRXu:̭Czv.$w}uh~?%4ms.*v/ ^C=47#clk) %h.L\4z.H*(+ArҜ7>*7Jj#G ~G8(TE]$H.^t6 ,̮IWBuz>Zt=sRd8{!sJJպU2|!9Ҍ|v|4>{q8g>{ap7Gw2FG <8ѴLrsyl'in.,|\=dl+tkãzDDe%7׸Tvt"쇒E]E$|3n9*3"?"1*#*FY<6Ik5aqUpnx3npܱHWi;iR3YGe훻N ޼M80qpA["#|oŵoUK&INw[R]R(,%Z=b/JA4YIT<lLQ͔MzN2F^z~ j~G@jS2mN! +k#r] \ jY@,Z@T~۾,oygdK4bSS؊eŠ3vb-oQx}@a1JD_Vݶt?&?V35[vfɒ7zy}ꝶ7/zϠh}.{xv{C663"WTL|=D/<=i#Y6qG}-Um#x$y1'ȟwYg&ߋl*=9_cwI~WilFpw[GL^kEJU?o33V)Uhe>:geed`9'. hc6G6n`3/pyվ*7Ջ+UA#:nreuL1Ϣ%ڇBU4fhD"wia]g? '[Jvm4cΪ _Z8w*2wKB̎T`} P=6vϺEj8/b!M|2=g߉r[)TշDvg;Nˎ)Z$ǵɘ2ˇ. +Tܲ_S޶Cr8.;w:(iw<`/4qk۞" DƃT*vD"hke.?L(v+wWdW_Q}˨S{]HjF6E{](y-IH[٠A A|6,#|tpn^?oм^KnX./Zqoca׻+[Jm9f b8(-DTq-ƾN7=UEϽ>rweyaYp6{0 ˱#VLҜ?Fo =*f/S^dɩ/(veu۸\nJQzAq_p0x|3E;X^5–SU|t $8j.nAW[N AzԻ'5hkI#vO/@sMyڧq O//m@q*m"MM-q@k{`~VYėDL<6 J D hqA-W4~Ww ]V^`zEghg=W9Z~Pa`k)dF3l5աL36`LpM\u_Ϲ/g`0CJtLIզ$IV6 F''I3@Q.NLJHt{'"ڸ57Ƭ1~&dzÈJJMMh@G8=,,d$btJF yF&t{JL}N)ѷ"LvJ^b0 _ أC7DJi߶ZnUY.W?+(r[YCE-41e-ig-Osx|e2MCr[EƥLw5xfOhq  #Ԫ ^ 1nH`gS{ ;1v=yHuݱ=~#XQlk;SyʬLS~?1?+rl\RW#, G6ErXA2JZiFq"g+6#pYiBb[fűM,G[rͷdy uAF//v,#[}F_E{ѯ!K}ـ H|)$j6J<;^ ^٪0gT3h9*IBd"Fsңww,`88E^aUA.ڃn(Lᑺz'ӗmopcma)w3~əsxi ȇH qwJfK}yDf9]ih 력>{t=-7aė}_9Fal=* _WtG%]Owq`T}m1cZnF9iE AN2r:cu-|3`ov[COoM_߃E~/2 ~|jod9§KC ug& tנC;๊Ϋ7Y>tdZ#; CQX0נC;X(A0 vͱì~I&:buo!Ĩ[4A|Bc, *q߳G{ ʛA!{c<0RMZCM~PRUſFaQml*+X|k^. wݤ®c81FD3՜ @Bw]_M~x${ C~N z4Ǝ74n'8`\h0sX k5:A. km!ʣ$^ ^  ㍆Pz{n c:چwAcʇc𽀲=/HYk{볶'_>>k{볶_>;o$SkmO>uS+VmOqy1çBZj{t. /`xcd~.ZA˚Ν 7I];EQ#hFAK?L"E qjDp{SK#t0 X?]X]nX'݂uߞSUbY+= $1)TL:JtD`6HIh$j_~ɢz4Le[\=KI=Uų> Ih>RIJEy6&gRk^dyRjг PڹD&H v 0{-a\͆754fegy15\ q ȑ͈d8!X,H/(O=N-W/.zy^47FHh w4^uyӞ^F[΢ c><9?Ѝ{ֳ~' L,bqw'Npds\-sf;+3,qsҙd[ן^(@x}\n&D05 (p;5#H"Axzg9wz`/+jbʾ3 ? ϗ-3DK#S xna aa aa Q&p Q+D] D} !A4hB  ?D&+6_Ӳ h DD(DGN@t6+܇AC|   ";D 7"""" /D"D?$ !V}l@2 /ڃOClPbLB3*߻ƑϺ#qsa.;Yy8V}tMfG66Ϡq#e ʴݜeˍ|3ɔ9_mӌ=Vd?uRP;[_Ю~'&juz[[>šڅn#; [4N/%3%n1WRetS-)=I,8-.+)%Y pպAODp֦7ndފE9% Sy+u%®@<|TLə=v&{r֬W='׬olKиը}`Wv^[c$xj;P;V4tԎf-i^bP >WƼ#eI@ncPu/KOh iцbDȂ]q_-쇬#z) <1]:1@GoD{wجwb<0-;:&tmSN]:3$^`(R;/lQ"cַ#l;-t0q )t6kc6+iXL\+tbމ1x9Yi!OTe4ޕ7Czs⺹14 Ͷ4pdO,L44=kQ=*兮+mUXB=ws# bKFC87-"~[9y  1*X௭`k/La}TXq~Gt+(a?_9|:<|oat|_^%oI?깥b*#F U(lۑ$ؒ$ް-xEo~7y(g}nz&(}n"}QޢBLonx/~qEI.(򅽱~ChmwT||[;` ֠Os_Y L إG+.,Ggm^(G jVFd2FILfNpKӪ/xlйY7 2c" VN>+M9ցɆ%mƆ,ިß+Ȇ-']iײZE8Y_*00|{\H+~xKUye?' g _A]<v-e5`"WO롸5 ?^a(%S l/q'6,K֧v&L؎؄`vt? c_{1r/Fv,ݗ-l;F*#]fߒޅ2Nƙc,7$'Ui215T?+^uo@;j#뢮wC:\Cw6ֿ(7=iQTxFuEY- гh<]<.MF|B?W8Rz|v|ґu)0~?˶,ӻvgSVS_WY/ޅ:1$b,p|IXRB#Q1DwRYTfrS@ Q = 3kgD*ǮEׄkͪo-.-n*{]IFCd'<+P|"@# ׭:!x=|`Δ W5JLh2!@p96Fu2['#g,ϙ0,jR6I0 *[,L h!'s.r5շr57C,%WY\[,W( ɕkxfڃF!6`*h Qe~" _MPw.B%x}^X WEQ[tXu8 rNNGVɞæՈmCva(>oÿ!/ >UV||{]F?yԟi%\MĿemaA.`"PZ*%uD=e)hU@E./Mmmd>@u/@_,~@#"XV!º:w.03ՋEi筘b^_vw|"ҭ"s\ɶ6r)#SB~c`5P6hNf_i4{uㆈ/NVQĿl mKEnPPmoCio]Q`4:@d] ?!xTcߦD;[7 WՉQw`b /6} N&?ͩyOkh0 UFiWOD;(ݮN~!w xF2r7<XV'Aڳ&Kӵ*>J;if[]1҇i,ģ>|#!7oU;BҳPb`IMU}b>+IϘ0e׹L6s|gŲXL|M1>e-=GX^ ! z][3~/](fK{ J9¿>,B&?]a?? z[ $ԧQU|~3Li9?^[l+ Pވ 5s~VPڶXoCio/C61U!I yF>Bfnm&J{فYB}ˢ}6N^/Ձon.qϬN),|+ݟ#(7(9Uܟ[5&kVyeg1;0&V`(a>V(V@ɪ}?+'c]}oh>DR2/6K@dyZ#TNb*XM0J{Xonb1Z Qu\:I{)7~cM$ }6:V)132%-;6t8:GY߫xPWQq pT()nU셧qzo+ފќ&+ZJ^xs_~^u~¹ҾLUE*__ ]륕(LZV*dkb]!S ե<^U-SUW:xU5{zۥ%%Wo|4ӷ#{DIϐ |Ff3]/Vx;S~KNr$ 'K`zs֛=G+[1߼򘤬蟺\z2}#6_qz*ۯ/Wu%U.7}\]8^O]OrUS?׸ՅU}ۛ :^1E:v7s~[ݦ:ya+Z8G*R2qi2'['WD Q7+[ʕ2eQ8tLIJHJI@:?Db?z}c_Hb&4y,=]k7vVk?ʁ $1.Q4>R  <֏3>6:%1g}`g5d_Co$ 8.#N!YH-3~ K/?}\ܰBiq hGt_'[!j"e2@P:zxCW5<)U.K)t2ʷV@!KKBwkKd+jД-|QM`OQ|DQd,M֧ ~xT3No`;"LMK^P{j dY@ic\A)4%B|쒔& KK% )4Bo4CdڏL6F}4Qd$Q_o E}( St$*ObΌUռCP67r'g&6혒`~k}8LiqeYE F(4O^=U7r>ZL㲦We_=.z*jgR]|(}-cIlPc8Mg=һJ)UܩCfںI>ن@O#鯦2fs8qP7l ׫?PKo 4ׇߴyJO&mlI<^=a; aH6:gsҔz?Џ4u1-a. _ުam*ͣp Fnqp~f w{O أ;`B΍;Ghjl^rׯ׃s纃Зt)K1{ą%B@PĠâ+1 tXC֔S 5/k;vQIeT,K!M~Tt"ڽ]9{ڽ XSÅ,uPlu(J A&b!$պCWbaJaPx(H?8B. -z4n~b4 290V|4XX4Xf $ cK.?p,{O#^_Q,8(X.6؏Zv:C{<0_=4=[|5@ eKHHBt ފSEgvl1$r N='Kl3tĿt`)bprdtdMSN p>)b56?lM؎aW1H $!J {L{j#wCUu[cб%G}*8?^ޟ(Og\`?`QjH@9BTO^B;/$%Ns;'&Y`W, B> jVD#'_ h%oطXߒlMkŘ Hs.`ݸ;Wk ɜ1Sn pCh|tvS' sBK˶X&%Bpܲ6 v؂9g;n k ܩ"teuzr' iٴi#6.!2XOo Ce׈[&~ȝh{Iox|YOXgyʛO z#`uĿxxH?/Sbe$>""#۵Bߵk }Y叜پv-ץF<}ol_u3;p};]^u[EoLۀM(`;cmx\]4e⓵8e}g} IGپg{3.,-k319~O~X.O'ig=1e wA&ѹ}ܞdnmdnxEZs\[x"sssosŹ܃ZĹs7U&&nid7h.sb~v3FtAgGaSGQ"r:I˲"IzԌ}|KԓSqQוчed{*؏^g?=ڭ|U" η8ֿ["cpPNbX}|Ǽo:۳A9/>+̌h-n#n#*}+mNΒiMK)Vwd .Fc=oYb`%iXk˗'1L N.WsbRrM~Hߑk19ad)S!o zB2 .ёAda"HLyBG*+,+8䈘zYSeШRמoU LZ"?(8_* \PNjwfM5j3Xt:1awWZe݂o44rHK~KXN\aosC-2diit;'A)TWq2 E6YI?|l䄈}TougJ7lϽ{gE qo]!ǃuiϏ-.R pICJoL}~=Ne]8w4R7/t#EI`Ţ^a ڸ zP)G~f.Q8œTDW~8pS [8η !`TkvpQ'%" IfZDz)XdֈʹY}΋A8 @i;|7:йspg쪰X<7;mG&?p[ᆟ)[NTdUl`mNnEkrgy+?.Y] ~!76 :ѧ~ ZN-csOL. ָ'g$~ 1l%?#*E(Q_Qsm Ũ<0\خ }]8w~$֯`67@JrO5PM- JtDYvyjX SP%9HFC\EՏ2jFT5Jht[zxT#]*}Э #Yhy Y>B>M>Lbm=uO5B"X1K9TA%˷a?w__2U*s:hQʾl˥adlPf--TRjYRJSUiڹ 6WŨTu.݊XU[Uʪ)˟G-՝=)G&hY5q`Z&Lոk45cIzff.{Nj>B:j&7-N׆jO;LL'>lda^"[ =INvbc'N+{̛ >f7IgD0Hmy0qݔcsuiΏmmTps(;~z,`өdL{o?S`V TJ04D>J9st#a1Szᝳc5'avըꇴoʽgd&}T?Z6Ck؜ș8x'1@ܫ9Խ.ֱ^b3K-ܟUe}/sGr[|v۵AaE'Hӹ$6bлIB:u$Zw*v'߉Ǐ37jllAC ujeq]?Vn89smFDj}@I6 <QX-J $ EK5dtS!a!Z5NvogvKM?]{:IRp% KL͝:-uB;alb~RmMRaEաR%ԍHo2ZnI5i|J:?+7b_!v*fL+%MUmi\T"&*1 aʵ 崘ˠ>+G(wR3Bc]dˌD!W*WՎGjVuVV&|p*@G{jEOlMSGqt5^ަ>֩57sŖN٢٦_jnj C$С?ݵ0m9ީDjFbeb3YWo[mt"ك A3ڱ#t}tuGﴃikt;緎\.CDOBK (GXNy#}>$ȱ" 88tNV]əعD=qX{zl8I̺c1\v-)2]qQ2Pzڡg Y1 |${d 2Ys#ճmV5#KR]qҴ%AڊƊWtqtpbbbR M|<&Fږ?hl ZDrlcёRi2y a]0Tչ5:G+P oy̍P%@j@>QzzlTUQPh!6)v}jrƞZ_PC+h MEPv}]aڻM-SB{Su~.vώ_۽Ir%mtؙFo8YG.kQ .\`ie+Št7̓ ZزDhm-(\p Gī? <]԰kaRCGݱrJ/ o]Br#l i'[jޖdJ7uj#z{"3h])akPSX_:V#&p( [NZ̪q[W[?8 v}7Y;GZ̍^`w#qu1ʧnQ|G\9<.Ƚ~̀.њ]vlݿ 6 ~_urxj^P3W?  "\ '  ]$޵MIv\Owi*kVƂ%Yi{aNdT@Nj-MOccG'ՈՉFe2AMQcQc\6v*:ʹ\}_Ir[$q.&u_P^[rJr]Dj Z*v=:EE¢u$N|8イ/|0\BIPUւ NeV4]m٢S7o&֟QdIxHc@<$}%G,5穖}4H~Y5K^^,!hK֤fSIF3=ŽNo$}}'t8$(섋/u[E\VKIP`qq' jnRHqWR@eg%AǏ1\İRp;oGT2:wPSTuR9|U:]B5]uFQ'gL^ԼO=ө$ٶъ<] Y~~#/f'~Bd_ h *zS3a8~~,U't /Q5ƚ٢T ZFDR=ؗu6ōPyq=sjC-Wq5#\0\w;F{\ 'h)$}G88L0U@Nv N @FǏ!e&~ˢk#"[\גTnt!dBre}2$c%?IVHrmf_Ig*ؕUO%ctJZUY aohlI(+!p?Ae^-iRUylU2IRV?_O'R7޹y̤'.z9#*u\ѣZpw.9l oi hKK{iۇ-tkaUǿi 7%_%ҌT6&W=v7Y:( 8+gF* 0}8[ (^ʛUEXJd-o\WmyG{WO~/-ڮr|<3-L,قo}-u2?%sؿaO20dk;G9tH#I>G?e=2M?"܎`UNzt2V6HV\WrFx[<]XgZ!"<;c146=)$'U|^0jC:Q^BeDT:Щ;U=xɍکVxyL:5c۴#yaz7s}?>[,')QgJ*E3c$[C() 1j1 n3+!lreņ;pr8y|U&Os)4me]l%%KGJ_+jUĮ)ϴTk(0L~wOʯwc -R2 E?]"14"]}\J&"};}^җ\y=UY_Pz>IBZAES:j3%j!)sQܾlgo0RqWsG}x>"}:8D2}رZ1j& v M #"8"gQ#BuŊDѢ<2`AѕY $z&xKT0S!.Y,(+F x"A.OXPGGaa;rx@3 :cq`uX~QV&{Y,+uIIoBnWlDMu*~hݘG(x9Wv]RߵlG 7,6ZC , =Í; hj8bNP)DM\_B(ۀ`q{"1P5=:0)[8[b8lol8\5$م`XUVkB!m;=AݵޱЀ:=^}/IC[k޿zMGhZ33kjG$Z%nѓK &L%rGCnJ %z@ҙVZ{ao`^mX>B[Lb u/e_ 1[m Z~t$P_lK [94 Z]E2oPD&b!yc,Q )̪t+?ϋuAG Y=4LCD,9K-?cb[`g>HBwXbJIFwF:agIBCժ9 th`z جY6YyA+yoxz\T]/z\ޕ/ ' :C1w¶aEo\óN1fn=P+yN1# f4w`K?G#K~7ox>xc,G&8e|XG8ցIes? _E=Ȗt6ҭ$"1%q&locYf% ޒϑoB hY4 e!~u`P=T(XG@ \.3e? B0RҏbzGg|>Ҟ vݟ 0={9l}>-gdviW@$]4_,HpfDO2>/t_7)H2{2YRO~K?G# FrA( C_/ _BT"H"˖#+ _i^D~[^7VuohbF*ALѠQ}&9l }_;0>F\a|+ωFVb4݄4,XAW7^'{_@Y6c +xlEW7^ǧçpO! x?'~J+4s+Fd/`dQ!{InhXc+:> O?| 94XAN46ԀUAHC=+Fd1ƖlyCyXuu|B3̼ 4NcN4xD #MO&nBc!>/<IWД#1G ?p/6S GՍi!DSgT,E9#M]Y4 Y@4%X/%z W {b@!xx7ilPxZ{'A3L!RsH>PAaRx\JN4!d/]I 7hEV1 ;eCfTC^__8YC"4y |p-Ƃx rLcAPslKBLs2Xh>mx.u{eUMtU^y֭) T {>oݚ{F_!}nE}U.1Ea<[FG}z2ɔO] 2D<&V2Փ)zըO]OrUV2ER]W5Sד\U.>uL3ECTURxTXM\D:|<2mncmnmͤ,xL:776767#Ǣ dz-/D~~,~XtXy)XyXyMXyXyxr,ʇ_W`iU|1|3*ΗGTWū~绡Y&4?ч9Is͘Hw Gֱ}L$F_G;wM`g|Ͷ4O?^T 8 Xx\ l\gzsu9N -a8qP۱` D-BAEZPRH!PTQZ-Ԋ#@B d3v߾gn77禜8쿁 Se൤1MOR)393Oz $sHr R)Tgt?iLYHuTtRiίp>H.DZ]L> %p,C0b E%_TֲMzIf`|,`)`t%ӊpfmOЀ6X3$RoHoŞ K,3~u!"e07iiAoǐYSl<IzKHC8Zqj>mHzla%*0[-CvնN62W+#c68eLqR .<>m;{}gϱsiy $vg&Fz|!}JS,17pM ,d5duJ?.wJ R,=G,~/yӄ+ŽAnjLϴjsikDg /A9oeq/6 q?<==V_m>8)# N}}w-Y%VkzqmVZ[/e]Əm=i Jz7tIM⻊_ lvf_W04P#V9ValW;jցCxUa8 R&KĐla䓀QXy{azq$2-OyVSN3^jMS=ySET_TԉLztybA'*̔ IDžjNO6$ܯ!%[ NFҚ`ll MMilP̟aA2EQY2 Hnr>@dy-}A^_חuWGT\4ΕMEs HW #WrJa +7-`eK(Hx()tKƋwsyHcEI9Jc9|yyi<H5Ew' klhÆu- oVƝ8ƻc>7@Sc)u+ 61N]RL[BPh/-eK;&3˔~'橑v1.{ pC|>nEMa`Ed\4 f=ѥFN6V,˽K>nTn؛W&o/;QJZaNoų(q23; IvWS #˒cPgޒ. cp9IN)x*5Ֆ^scT9Їe\8K9ԃ&S(4vI|Am]zwF+p.Any.NSvTz"zp#rpC2>M /P9Y-/NFlǘEdXV'JRiR:wv|rD%TrLRAM*Ua9!}-N冦$l␌uh߅7cxBOҞO5Ëp܉< Ae܎ϕ~vJ' j&ߎ\U~{= =a=Q[fSzϔz÷770vf)&?=/y}t@o}9un"Գ2YTT Cs JHiHӑfzGJog/e1vϔ8i*y4|*(R~DsS+NRƟP%w+9cUK\:;&&'rPa=Ng\EU̅ E>,>ptJyÉ}Ѧ% 72½'q+^s>U+^w&ALvd&SڂjbʹA[W3ʵLY'n!oJ5'Ph@wW_/D3f;vnL(Urhtdx419UI˕iB3ZB]u… .\p… 'RKϾtOw1cKkcʎ'{ݠlAn _W@Asg@A@niPɇ@W!'PbC mh3 pgį<aU%g0R7ѽ+:>0-μH|d>'5m뚯Y{պtVcHcWJXu@N]ˡ:_LK\%}4b:y11gƿ;.\p… .\pjMv Vx\yl\Gf^{aNAkgN8G Ǻv{z. R5Pi+PRZ!B@*HԒMShsf}޵~ͼ9{g_K/`ݠhNSS$}4q*ɥPGׁ |7<~{B~3hQ~~']K\OcODc(Bo/@J7I11>3`rOŹEOҌ"8C~Zz1~L1b'Ďӕ7M [Chu={LF=U{\HPo,wbor}8Y=@+wyȗG5pAsF hO|xp4$;j\'L![ᝣ+yWvy'OB;3#=npHd..ROwfN3BJZM1'w{&ŏ3[z)HP?y*=-/=t1ۉi5ZohL<]R/'݂6NjS5PcNUc?֟J]RG u}`ԲvRRMcY_O|kYO'g.k5MWYOM,a'˭ +0T3$S\y\ت,Zvhob-y9;M WogC-2Vq9 P.-*<>; }pv8_Sr஦ 5E>>iqJz:p"lY/6a/UL]!U >9hVA(W+jֆӉ>e6έB|YѭqƆw/K@#vDapZF_DTE}IVdJP=m3m+mxZ%bdYkđ t)"銇ʿPmc"3FwKy<#a Pr՟$>@l<|[eӉF[.yb~ ^ n`2\ټd*{Sw{(p?FT8KY47d՝kh:UW ו<*; ([dY\$Օ4+9Hs:]hujL3Ax%܃}cHY2|Fua Ig FWٽ[K+i7ͭ0[z:DBY]Lt`?r:{iB\sLX wTLKLEjqtDR38} %6?oȷ<;}ٞ?.1ɟ d+ߌ_z>!M2HjΜ PkץC ZO~ ʴ\E M:8 gƺWSlbLk_Ǯts}"ٕ=Anvד_4ہ z/LSU/ۜA+e'WUқzޛfoYu|]H5>_Їilc|$] BtZ>7+OG{ݬo3ڟn iN E@9Q_nfLh`#;O }fq˦ /P{"`tU1]9gGvJϞ ,9ҥ'YZvtٙφ ӋѸsK_x;~ *^N?7{ )ދ Uh* c ϋ< QeA50wەx_|I˒,7{#Lʿ˿)?CmPGof;‘՝K "CCpW T_ C'RKի$_% 7̮Q6lذaÆ 6lذ15dST/?u+҄aKX v0` 6n(`6&*}Q)JU&M*jQۄ4$RmihSBURHVI|ݻ=8e73;oNez;`@p8 eLC>Oa8lU#z1T1u Ҙ݈YZ]9^\<0 1q: ęZ{Y/D8q.ⵈEZ?ňKeZL"V .BDBmtX V#üL 1:-WGeƶ?>T<~)kZ }i483jZ@K҇گoC˯ d?a<0!RV\8qb%u]{lH c2=7&s 3oOEJ<yJ2gz驊 #632<:=y|r!S% Ou A93r໌ӐT$%.HJ^7;Fmo=g? F)1A)+"j:kku^9/ryMy:Yֳn i1TXL4̥T#˝B_Ga2Ȟυ_GY,?gw cCFޔϳZ%魇T%XS>7B$Q M"ѻ@}[Zhe_ Oq.NW+)OVԇ[)/QiqGF6rElt#CcVtlϏmT2#β ;W_7,Ye>|A0&r*zm7{@:D,nkZ %_itbpDnh )E:Q.N/^G*`qK`kj指hj0  jBmGNƠ*(Zap$,GO-OFkPT1.Ml˲mY,Ͷ,ͱ,MEّ%GڛHW$9~T5zZ^TI׿Ph Q̎3!·F($ _R]'tM9wȭua%MZ e@K`/AO ?1~H Q@5oRB CNN+PP{("+a$2.AAaoW5z,;m;ܶq8)JTP#ݦePh4\IezHBiFʔI(LbA8s,39ܥЎvL׉'>8g.'wnC8]:aւ8e{S 7G|3Q\\Q9/fЃv )I64*{y 9n]޸\_Ebc1|DV!9wu//ɿ iYL+ }cLцDxq ztKGDGikg×6PW,CqD0C SSS_<dA;"qQDgKp"X=i߬yz4(7.#|M")+΅ݛ?ц.$o)Y9 2[uS\hwLy,>տ%x%Oo1U:YZNzL7cz<>_ȏhn?u3zs'/*'پq/ZD@s@G Ǚ72:oĕˆ/8c\wh?_\ue|6`Ԃhsx[O}MaQ7)zy/:~/c ]d؝zyz S _Ejd(,&_'(&_N UdpBk$wURySlgkdgXfΓ#][{.En1:7G(i/'b77T// 'F'D w? D_Bu 6` 6` 6` oO%?x?gϷ`T9t~zXP,b?xw ?y榘}[ iS b3?z#.yV~GiLtϭE>w9>H`H@??fʯh2я)&qWǪV޶%Q ˡsuP1_+0WXphS5_-blll/!fbx\ tTչ>gy 8 !7&R!D-. yHx$1 ˀ\3WEѻ\`uiuUWe8.]] Us}̙W2H՚=~߿:gL|\%(Яet~Mӌhm}gHzHv,=mHQHNA4i,R^h'"t.ɧ癄d)HHEHSџ4iR)ҿ#nxn `1 㧂][Ĝ7?<);9e%l0.83'rct_:j9S/@ͯCBIS92Lcl|1i_4/FhF4WDcruO.}fV [i)6،x[ bGy;kW")RZtGI0T"zT{Sk;F#t@\~Sahon*GF.|ذ4f1I qW<>a kڷ67uq{~ڊp"Ii?Y >yv=^z ڛ\U[C1RdE"~De+!8be2q(4ʔX7v(!M࿅A+JnJ5zs G8nT۫-8|Ñ;_R^̜1CDH}?#ud GsDag:?=U/@df7VR{DSe)dcTb> lQ"!0sx>f q1B*.uԈ"tNLΩ~ YA-@.>N_rzq1b8hnq~($חq=)fڊvWWݷЇ]8ia*dIjY+j#kD}y(VwAZ0:c$\[&ժڅ\ p5Yg!8BޯlIДrR) h$h,#4KJ4M͑MM@NfmTJ4KZN4kFhhք&7&7I6srɕyҘVpDCi>|C!mBSa+>Zѿ)t ոћkHV \Cj œvoitڜlp6'5'c 3}:;ƨ׿ ѳT^0QKbG'"amID1Wdf5nj91a"Rb';g&O&eov:K瘌g`æ ά=6M/]I"NÆB\ ;}A6Owu߈?|? 濕?+'{O/p4sK$<l,PiT8F;^;CpLTNrU~{4Lnrt>mc_>=ͤeݏ++{I:QޏR{~[*XgOtre.R<9G-* t曇4i"ҹH^IHkB>|FW)fp"kl2l\j2SS}-z? ɇT4iR1 |wgfg4=hF?qx>j &u#-pRUS$/łz d$t/E(N{Ό s-H*A#&`H_`ܽ-^,6w%L281sQg(Id#4?^mI2т ͟P"E KDษExw¦ᬩ_a4w8u_}v9d]`(fa8xiG/<Q=uULɓeK&;:&kɝULJoRrՕ&P㎆ζͭPMǸ0Q޹aKiS{7DD8-Yd}ϼ`Aa$¹>$'IDEW zbw0[ݿa'Ak}Hy^c>ϋH'^a3="Bz YW<%Y̧x.ErAgq``/%NkMG S?5x*3U5]5NnF P!OyYz!L8r"z++=H,ST7t_*TA mw}};idoae{N0WφjpP J& lpÈTJ"Z74qbه 8{CEuA ێm>{CDqN Pד:.6-^kࣙgg8Ci0SaTGSۅ";ATDYE@aٶU}gH>MVNi эiӔ C *B’:-F@.(U:'-_TG/CB* (ΩhO %CU${O'ԫbJ@]ӎkD^R2k:|cRG&$ b%TZڤREi-'AAKL];t{&Ov-z۟C'S%,͇Mux<$<Cz<)旚^uN˫[0?utɩ =NsCGu):i -WKȶ;>UO#l~/09>&TB,t5C4lBB;! F9w)k3@+ Zm{XO0Pv2@ Tb,0O)0eTiïPǯHΛ" uI$RG B:BRL!*FaEVŹ$ wr @@my\TJ]D.z-W+.0KU'{lRGÌDq 0qpx!ti^>R8VZ̾ 1p`y )d ™ ZQʁ܎#>p{/?ĥrs?MaOO'Eq!r6G`ɱcww8pS|q$p#G 1ÉOSԕIN )LU]Ǒ̶1# {ՙ}PuQ(LX8G:62F r 7Z8-On8ҖF1 Dx=\SG%$& gM= @H!XmW pUۀTmm-A .Ob6N96fUFoHyMӦoahDyBF`%+lP#p@PA} 8"h A#\4FEC ;M4E 'Z h # 2C[tA{tD Ag]tE^"!Aw=D Ao}uC `1? A0? G0HF0" D 8 ^s/'Dh0>S]9뙆^Uչ3  !!zfH*>5}P??ݾj@0ؾF_$ > +k=*$|\Xd\dcE]ɰpiAᑡmځgvM`4翎Wȼsy4,^-[ڎkе/XEw`?}cubh,0% e1 g56=4$<6$@-9LX=C"#bc[#9<0C Dː%QU+ojF7E}&a\fgC  >F%M-z\$ ԋ0TI\=b@޷/}A #jHfn<߁ta>PڢʽMevcɪu64x}G2RhnRy1` b]Tn)6s , WIӳ\Yuv븯8B" PUzR݆! D P=;6qau;}qipaf༷3H@>|&Ҁ[KMci:?jj__ GgFIG@-Rt zvkq3\^`Ќxo5Y# mF3~i%'cuyx[NWxh+=UDBZixi(+:?[$x &#Ӟzq#egqwn T$z+V]zUva @l3EU}|mRm>tC'5!EdGF^=A5Cf*_ ] QԯAh0Af=13xh%"}ú ?C:$|._ PO@'C[b5 AH/R`ȀV|A=&Cq#v7L֟pg`8 ꖾ$4w a}PLtM иl~Āo8Ҥ8.iz^uz =~!{'z6plWC7ynGt~]?;P}@t}*u]3 zhV32pd`[zՈiLa=^x# -]ek̺kÙ]Ŭy#pv8eǡy&0ALb[a"3~\0IT8 ~\ uU.O10?I*hfWI6F| > 39a[Gylg# =tK-NÿfX+Z2{>XCr rZUVQ 㼟#}}> t6%t *FՔfҗ232o/X&Ix Ce 5dїᲚ~(ī"xu[sY |) |'knO57e0_>4O13RϞ<2j>Նa|Eeq}13sCfQs4O7! _8Zd.!b-r,BE*W@5<؏TEVEJe)^f_XK)JZ~GY{1a:sX'uYjv Ubm#y8{*l7]lOf9v;x>b>eښ7 ̝lh^Ѵv VZ;@7s֯oTޢr߇)ݵS|ʹv׮pf^;_=ôv:ڐ+p˩jaǴNcoZg5ô1߰Ί:kUׅ  H0K'.ñ)x DǓPC~.ę`X8#>8#;|L<|Apċ1Yնټ09jYLqv!' ٦2' 1:1611!)"#) m  lNl6G_#Bl |MR= /y6;Sm0m1T?okü`?[ಚl_*fvKo֕cA[a8 Xb[@pV .7>9I }}tCoU|^zj8jm X-VVj+a:V'`q8(Z탓C|]3jXWӋus֕0 ᨧ9YL_og FQ]ЈTS4fԐ*4oSofXJln㢃&ĊNѨ9Yƭj7k#GsS}w1HHݷ}8KwS=}mk}qߣ2PݻaoiVk2X@g$#f>_LN6k㝧O}yA~DŽI"ƇD{!c{YONm6޵翕8#w?)#xcq4gY#\jM w<"?W%mkͅE[e-g,lĢVZo+.7jG$~1ϐBu)k]mdj{WF8 iT۟F<=lrVhj#8b̠s &:|X3z[< |x>bRPXiTVo" ZUk^ ֘aHbåAmP\.@4;wgVPDlHtdPl}\wW}VПXnœNMjqF{ݟPF<# M)֬ҷ-j/ޑBПZT1Ht5AH ƒ"b&~s:Ưzwy;y~k~6ݒF~|~m@ut/9k|%^*?>8.\eBb"x#\8UpfEHcx^qoFj';#N97QA1w[~JcmS:,ڦQmd%ᬔڦQmd%,ڦQmdg|jxj#k}5$~<6Z5x0>qԟu=EmƁ8}n~K5ٜ MiJ|0[~_}$Mmn}V!0+ qm⼗? O$Xմ},V'?XEyl3~y3=_u@=:>xL'7:̓?,ϐ<i ޽Ks΁ݻw+V9@O|d>>ɩJ {r&ɂ4*x= 4,i d t psphmV3|ݚtvBޠxpdqؚ!e0~ȋi[V>m8οH'4#ENH i'}7"]3ЯHGhlHǢD?&A0*Āx2A%ti_% !r[gf`6`0@TY*Jɉ(X`02»\9D\-Aw"; د_r Ka k)+EЂ0OeX2,SV ktbʠRTm*c]*~ {*dow;;Yow7/[h/k}6l$&:dzG`d9}F`,DdxDѠ-1i-L;sA_Gi8̀ wIE n*=]?%$jEX ̛˸ܙS`w܋ML*n+`h]w&bN9ޫ~F:,ir?Y EP[6dvC~5_n%BZ,gF Gq4Fս>~C.$h=5 m1I,DNf5c'C E$ӹ#,.R;Χ'nH 'W8吊dDX:VF$ 89q5@Q=p &r̀/5N%nKRB0fN+ԀPp˺۝VN2퇓`5X4q/a'LC'af %F9vٵ:;:xfWjѠE>^ϔۿrhȨA@e2ITnRdEgX=N&U<xSZSf0fS;T/7pb g70Nu|ܨ3Jn&; ѫWMLcTE~ ;~pL&xg@7. 9 7VOfCd++5pO& HN"TQJ/Tk8]+ H%%%ĮĶ褕(Ch.Ht@'VD(LLHX(H!HN O 'n,mmYl(,v#lroUpx,̮LeWZk-JTԩ4]=ޛ@(}=Wf  Op Ȱ?=`m-Lޝg= 6Ԯm Y `zbO o]']l[ 2zĬ%V^m{/U#v0RBqdÁ* v[HkλItq<6S)L}use2ٵ -oh"I*EW'<pGQiD/=th3) ;6cu ,3B$r\Rj3K}4^8:-ul8Xik_MGM[M*Ml~3f}9=o E}[s e13Mi'{BV+Vf^mv׮n"Yߴخkq ]Xʛt՛CLy@ j; [pCn}#9Ppwyը;/鯹׹B$ dSvA)(ЉO}R3R1GeS~σ94 @j' ?p.l2,wT%`#V|2?])Ϙǿŷ!_\5T"n?5^X ^}0oQ.X^~{űu7+wCS`6R씴"Ƒ]ౘJG('/<~x[Ŕ#_>;Idh%}Y/"+en^(gkTO}K †Kl ,o,R& ُ2u?"Ʃ[2\V8)Z)>W)J4PU.S_W{Sg&J =Z9Iy_\+8Liq{8TaT 6rU}N65}fB>->D]>p5[T<0Z&5khVh䶫ӳ6ɏ¥`τt>y{Eph+۴^7zS&hBVǏ14+8D2ϼ1g L񛧓U8?GS6<&:s01 m޻ _#_-6f Z##d/.kL.*g+AE2ތz(ynDZjou=rmK`S+.vMxeI`daqz֣w{-+_[.4F)-2yYmϥ nA=Qէ3Txv?I-" eGNPkJn\#r oTl:̴eGVa? kѯpwCەK$df&C[޳@uqrCDg\Ng/Ca99/Fx''zmŽ{Y )Ҫݫ_*E"Wa}WqDcDA(O; t"1-3`rv2[ V3$xVqU^Uʌf;#* ivUiLeS_vUrIT&V}ՏմViqFj|Qh֞9I_зnԃeSNT+Jx!x LR+vlA|5UAqnܶ^\DnG\cY\˽KIzJs˟ǰb|7|P+m'-)RA\ѼyV@N9"r]wV+OݙVt\Y[awʗ(om{m(mmV,/U$ffVkhLF7؈DȍnL|\z'f,>7kKݵd@Lщ)([ K'[qaqYD.{;W|sX2N귘^'rg{, EJҙy\9~ ݾc+LpJvEPV&Qފ 0LqJ\Zջf*(6(?+ ZE"vصQwڝrKZVv\*e2Wy=WJKWuS UlZ4brsSOfٰ%[JyЕAprD՘+ʉSesg mNG&`*uVpdZ#Cw r$Ч'ؾ$`ڔ#4?/.'6osW>s0{6tj)/'WNS/-x$¼_4hM&UIs\sVF!ߎqzdt S܄t.a$5S_ Exv z^vv3ηq3{nFfNzr?G_wo6eZb;ݺ]D[̐. #T0{Cw& 6hګr_0G_,7Bdݮ-=^uW° ~s卽78V"c9^,ԩ / ü6~tCƴ$?ڧw;G!L{K|v6brKe~"QLۖsӛEa%Xx-98EijFpKI1?,9,]K:sK0 L!';3$0O ڊQ|?H#N]b駇ZD\ p f@H:72\n|#F"Z9}7Mzw9toϔ~"bLt:_%Pnk#'3^}"?aIĒdE"fօĴ}KHDݓ.1;HX8x4 piFQ4-΃+W&( g _΍^>;m}j2;cZgnkv$&6Z(1OzY-|%fmOʏIٕ3~;e,s8;NϮ76KJ7$=$.QDTNSD/8N*^7"0G|䠓FP̖%zloٺ1T=tOz쁴aل948Ț *Vʦzr*Y,WvGbu I:*Z(*)@"ZF*6)**n8i<45.NJvR G[RԊl#UlMYhqܾӌqOS4SV$\v1!1fb 39"cVulѸʅa@\wɇ1'ven|Xf/3'n5e]3xkHEfHw6y%CS$rZqnMQ糣ԋoƷje~8"Mw5vWSV[BO3t^cAL8ׄo̖*vu:G]~fkf?q`6Xxќ\9uKx6ɸ9) t5io ?m6V;[{V hׁ>Ӛ;lQX\T \pO@O[5ŏb[ڝnG8qgKifzmKӷhMl}u@q|6ڧK9A'Rө)FݥNPm+pn8wAKʽ QxO?^1㚥\Bn׌oD 3fX_ƿvMpJ=M[6dP~RԩeC:mb0UI W@ S&jym n@@{29۱7?&Lzw-DdrjݢobHkrJ=Q{ˣe KIɆyc0t颜@y9Wap4:ʻǻ7#*TR۩8CIHڴ(%S\ٟtwl4⤟"Xgg1>T}Γ~`qXzl穚4!mۢ//~"tYys ۲e^{S8 ]6Zleg^9_8aRg>[0oyyk_ȞՇQ Re[<}<0AvϮISEɋ2R yÕ7g] F9snljZ`ϥ̛tZs,<MuD')J]|Jgb]\b]X)(Ҝ޴RM=]̹n1[xrVe(t/8ys47 RAj?i9sv'h41լҐ?˷kb<+t3,yltv}Ȍ+MXR+]"/,Zrc&g>1/gZqȁ ʻ>xB"2i} B~ DE Ku fOuKK 0# ^ݠm(MyNc܊]X0(=-0CIOEOSntc ELP)6%Y7ɢB遠W[E"  6-+SxޒN%x!;6=^?=R\R}K@}$ պ3.tE|gP"Q:}X`8 a$sYU)MQoϸQ:"F"ALC xěyK<p9o4 eb`U+obq4 p6`Iuƥ^d|ت錋 cYktÓyHrn;2֧X+g YшPmx|K6^>3.eE@2&\C{.d"UϺqpbݭƆu?K8B6hlUU%] LC.E&Hsq5!yr``2y!z1%s!p9r>3?-*7^ߢ%^M /0^0U !Z ߍiJoFK@9!lEBݻ }P7CzhA8pZv(ϿE=ӬZB\Woo+DK~ 0HBb(C0:֟W̪ߋLDqj;N> tПp¿It T),>Ǫ߿vo÷?x}öoj_1DDA00fF TFPz~J9j`'~"OC`BY+rev##=m#8cÎ7>8(#]1.r!ClMrqb{X#r rIף+kTv3yh@_^0aoR!I`BYkrH-!vAJ9#!8 LTvAt]ۯ/rwy&2k9`?0M`1P(BY"o+B?QyMo cr$/3T?$̿ Ue:O}ߥ2=!FC pOzMi)t aǪ`d3;m'\! g 8Ն' AV"@uT}=TGPC"jT~0@Laim-##R Kh;B -AC %. g# E/YJҐ-M 4:C(ԍXݺL0 S lqܺ,{e+lס+F EϿ|~0_ƃE1j3λG=x!|HV#_2"^G.9"G1Zܫq &8pr=d, GF|`%NbBYNUp𙭇,t?7T6p i}H#qs,i7bP| <(#]BeGuώg'FeWi~jB:uyQqym,4 LaV ͔+P{_;69n+k^ (dCa&*?P:iY;< #<m*< 1(5AX3Lka, a r%I*Qŧ(Y}:P Xdz׌h gCHe&>wGc4=7e(Ng?[@o WqMxK<[gJmv_GkvS':v[;Ն_'5ʸym=0~Gu1oɨe~wSJmӿ&&eEIǦuu8C_̂EҠ5Z}i~Vk_^ ǢIϪ[zfjU约㦕~jJdESAOW*kOO jQhgk5K44iQYѧb Ȗ3Oo!i%%rR-}*> |D&BJi\ڽf?ZZ}SzxpT~}rx9S32d'*N>opv8>w!HF ylJ.\+w7f'iw@"9">xPK@^4U{% :{-S/`*mIH6+ƣ'`6.q3jn0{TxORk#{_s.OQ,J7W)//c۾Em)2B&E7)&;FLLåEo ~X./\o!6Ɨ?i[u-:&b|,;NǕ"[oN$+r|pqNor'O6cs6V @cOV{v/!N6ȏ݆WrW hߊ4 m4;[; a5'.\8b؃I8X*_  7"-w+$۱X5kl}7-1FiB:4 C6+r/SN`RT6Jm95He!wo|jfjpH(C"I$vd**xA,9¿Ud]2 ,L'%VZ+|֢ٿtֲYo41%eYRAkdxҚA$x -`&xql-5 N+? 7._J^r7AF^;J6WXgSDY/-)թ[SۢCAV:^V:+vL7pz(j e³ݴ rE" ظMlnztoV8Wq&zY U#?gga 01浩' jyWK86z&pWw2'[~ľ'ۧGFs[!͚4GjtNQ$<~y]is 0?N JwB$$K_ɐYSb",z~p<7ڽn90ag?G{Ϯ^ 3+6jzt懄wA C"m#$:{`M.nZmN0'~_Q/eܿ\3ֱcglte$kM:P&LB:u)jѺN-os_/^j},gRvƙ枑x{4֌cp8H{G5 Wɔ\Jmρ I>>|̾MOaȅHfQL:…B׊Y ֿ\SnlUl~1ykQOdU캙ҍ͹|lS-|WvIH*+ؕj ke63V+pX pq 5/1蕏L[^Ӽf_/;wx a =aC¼E]i-)p:19o&$J~0_,"^L'VH~suP'}ı|mPoq*ll (ŻG?mi1V(f`oi$Wi&hn}}p&q2)E3BdPaF dp؎FcINN׮TbmŒTTN<b Tm%Xf|78^ȝ=8}]0z"Ah}!A6H:ıX|yA242 qNe 1}5 >f2G @,%ΏıC= x*x,ԃr^K&9};?RJpz(!J$2@ X d$"! "`fJ 2 Q "%`~SdWiڡ+b"ʓU/[Յ$V=*İZH)1TJQMI%2 C]Yv"&z!p)p0pV" ]P?.y۝{j}V?N"O$jM2 #Ƣ fS8}ٳqmUsٱ)ıIH2'FiU9'rFchN=P3_rwÝ{vPwl & s{OI#l1^iUK+ҭ4$HJԁ';ec甮Z}VlXvZ1ld!lLY7ӟ/8Qu1-9@VC /g6ξy{f|suͱS usgIJ)ƽH[4J1 ! l^GKk9h<.Z h .S,s|~|J)w1%0C`G ZۭjrxTryraЈ /0SÓV9g !bRҪF`EPZۋN/2 PnX;da9`6XJa@S"QO+hg!kfz+_YZ5JȎV } 4 +vŕ⩴pzI6.UB|up.'j)Ϗ@8$&%pU<1KKS]pR Im<ڠ_ $ѸW* O l|@GO| ]G G'jfތxֱpz(!ڔTB z0 nF h$fn0,  665 bQ8iCE \'ˠ/A=?yЁx_5_Bo_#(!*QB5+ @Hs/Yrx.]wQJiy~kaȐTmZ]pj;#-@Fήh,,wnpnIqb՝ͮ=}][|G;k^Ig_eҭ 7H4=fRM 3n_+.L:厍~ʪ7#㟎R[ mQ =rS3Km&86w͇e. ~s0L-;#pV28$7)_U26:=vR!ƶ{_4JB%{yȹڲ(hp;rcnv\KG.,^'x+q˓K d^0^{`ƀ|~ ڽE9!fƔ `Md&k]8'Iv$!hiU:_nTk/Zj.@}sk-:ja_"ä<~ewy/-(ߣ&IHNU"!$V(`4vtIRWOp:5 *eIdRP'mx`*XaJ^yxx MPi3sz8\1 ̀ú6ib 4K&!}:U҃@큩 f&#4ͺ[\y|N) /O7y=:87ɓ]no s jg 80B&;VlIZA/Б8ZqDeT挴NI)od0~Ċ c5'W.1{kq ]/MْQ0E^ϒ,𡀾C/i~B$qF \9]pӊ6vPLMfiF&f46fZ`nZB##*[򂡷>M.V͗+˫-I|Y 1irN/rNN 8ӧ"ÖM u/شo{rn;oLnm[l~ۋmA wz}C$7|FBˋo+/96e>؟9;(D5i{dzP@E֜HcGZp"l<\nr65bWm$NYy4L3ʥn۬_j^'yeH̟h2xLB?PO! *4ps(&s4lk]VC<\;8v{&wle!8ncS?>s& #fhUm9a{:%.gܖ?l֛N/{u% "Ǧl}MlJ1;w"<RX?:e8DJWxYs3a` !Kn=7zĸie*ӕϚ\\qS<|aE3MBnKr6K$ws- &B(7X)"^Ǒ uSS C|GUXx6v)me,r !#ͱz)~D si([&ʠB zparJ` Xxm; 5BW\%;rFA09c%!#f459mD>P32Wi᪙F qԥdB@ L@[vRL`VnF@;N7ngMwoY[F)vzfyRdufH2 C^fiYX mgmowY|e;=F1kvёa 4/DeT7IU W.>'!K+oӈ/ ݽl0SZ4;˂"1y\Z ;odF|_OEP'VYOvx_j_UodW4^9hʾnUq%D pE;zmmm϶S)A}E\;( 4lsi:fJJ,]nmi5&!_ ^ACE 9`%C_K5*_MzFKm6cQ~sIMoν}[xQ!zcz\Vadgn0vegoZX~L*яȷEk7DO #P'njU5-/;c\񼻟Zm9g$5]3 /lX풳U~`ʚ| g`9#hI !Bp%1Igt̀!߆rYG"TLdBR|@dT :۪zjf-4bzٶ>媼^mlfjULnF"o)F1N hIX# {F=IFx ϘZ`Q}p`s [^տ:9W6 J/ L*Ʈ|x{`U[x;YS|YǺRv.3AA,>48t1)l]\i3J$UcAR&^]BG) NwE1))8s&w[K}iyhV"QhPD (@{A`5u/?N'ىf}SF`Q@V v6ALw!^4JQV*f3$[?.i$Mc=dT!@dD !lC@&!~:DD@CdMRq: F@ jDo8h0ܕB $P))ah0I$v= >%2 1SIR팀LBgD!2 Q="D8ak@'كdMRw@@&AUD! NIPU]#!Bא)ABIH$fl=*$H$D8ك+WEjA) L&1~nI1 7C`hg&cXTv7XR''IYr~0:U"hZTB!`B#QG/F/6H­ F C]& [6nmo<'4k=$I fكk 9;3K|o]<4nAduR,™ڨ- aG+x:.ͬIˎ6]ʔ.!ǃs(Α֟ۊP(>+J.# n s\GͿ!((LxT<57-ãC8[5z?~8Z(! '@K9-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO) Pictures)Current User4JSummaryInformation(QPowerPoint Document(zSDocumentSummaryInformation8(Id㏨-xNݮ=*pR.mЄSA+v. r]/11bXAH۵hq,=ٖ?^[E:2u/R~B&#4)zJ\͵EcXDWcmDay 92֋wA =ֆ>FG#<}u;h.JUg_Cg2 qԏ}-]Ғ6C{Cxd-24U g6b̪ϟ[&>떰߼RUKz{2l$"EY\3+h< RC?ub0ov0gFtaUn$ 0}A4`j*[VZ.W9|䓼|rf'dOo&.lB6 el̐O.wVN~ccW/G3wmVmZj6hijFӗ!aL帞1I(;bڋ6ln ~1UYYbb:S Uh簃 _5o֟bt5 {ŧB ){Q]ETZ^$hul}+F+A{/ ?[Lk\OlwO*G~NЈ 㛐sR.s^ke%ZQSl>::x]v;0^cט:Oy˜Ua5wչ`xjN^u[ha}B ɅJOb/ b\H\H\H\7/2 Wﻓ?aeg=e({go1Lʫwvϼlf^_ț녔S]0@8M(~<?AqZ֎ݭ}}Ђk*?[Ad;O{߾i{cvXo+\3Ouwwmi ~-\ >JjQOsBk[Wog+ӽ[`V(RW/7Xy֑dLwa؜;C3Gc}e_t.dÏ"oi KHL{Ϲ .#VG*nI}(vIKڣ!-#0y^ #@Ղv Ġ}a|#o$mi1nzFmҚI+'-Nڸk+FI;@Z i[HtǵVw47MMS|ߴ&EҞ!m&*]ץByäVKZ1iih{F;KQVOZ)hF{cui%i7]pv^vVFK'hNON6#0%aHk&8i`+`Q҆k+Ԇ;hϑvIhEw!f)3n'E/m|_F 1`gIPNG  IHDR K[sRGB pHYsut:&IDATx^Ѣ6^'0A-)chUsq? @si/; @- KY @{|sU,+OK @T+_ln^G ZO >8>_Ї u]1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1  @QdQ:m @@ Y1՟b4Os6Mg#'kzYj5_{slzޓ-7oq" UYWʯDl Yf ,C/uye ) |H^O?Š+,Q`y2鑎okXnS8fz[q1ף-S>,O2KYc?dٸfO/,k'96失9g TK<?eS'!0f-OC=t?vL7 cv;oI?P<,=I=ۜ7˲4f}|Hn}|aTZ?_>m{3N}t?_s)ؔtb)"wGm)?,ٍ,>/Fvhtu픀謕]mN) |ԛ_ڣkkmݠ=jby1]N?b Dk/.HCe)(O͟uqK:LZզ1.ԁjSn_.2/O?7:}z#= Y &twfS 7XN7 YKX?zx!jtk~e腊s>~Fw7tw~*SARhVwؚuw֒?t>Oi\8bӍ[ ;zi;Nݭs9C=uAeyz_?C:͇X|Nga,6kÍG؛|-+|:MR$Proɧ?+%iOȇ uO8 M✐e)@@_RuB[_&TL`y >sSɻTK  @dh_@jf@<' K=g @@T=4 @9Y9{G&@ @ R;2 о,~̀xN@zޑ  @d{h @ssL/ KC3 @wd @}Y ,# @ R  @dh_@jf@<' K=g @@T=4 @9Y9{G&@ @ R;2 о,~̀xN@zޑ  @d{h @ssL/ KC3 @^4=W# @B R[8 @ ,A#@B |wx0A`o(TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC @ Rõ܄  @TFLC Y`Z<Ӈ,U @@T-6A @,U @@T-6A @,;?/zJX#@zzy @OR_=  @4*67G~yo 8o37XY6،.`9zf_Z{`|H 8Wt>\(@ZB:luZZ0+l5r=Plyk?ۼyUE oUg}p=}ڡS{y} '%>/u~q|?{rg&KF)g 2i2{ץݻ|)Fyw~?ÎV;K!qj}gգpdI*]  @w~i*w98C8oɿCz[p_y?vq7At<=fd"'KپnzjFNF@ꦕ&B< K= @@7T74 @Ϟ?!={ @@Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Rq Mt/ Kub$@ Lk?4MiG;hENp])x\@z @r{җzMOM". j @ZZ휺  @T.hU@js&@"R @UYΩ KE @VdV;n @ , j @ZZ휺  @T.hU@js&@"R @UYΩ KE @VdV;n @ , j @ZZ휺  @T.hU@js&@"R @UYΩ KE @VdV;n @ zuL4xn =]iBbn1r*=gߘK싪 @6d6J @ ,/"@*  @fG cGU @@pTt8N @k @ _UF#@r Isټ:[Wvmo'^>/cc}RzRT]t+ug4t?.rt]j 1św>R̯Kڼ;eǥOk% #j @Yj}5hHR5~sxx׽RD#چ,P#KU @ x^{{rnyr >zz^d]K ҈eiFg(?mꪳX/48y~, @5Z_$t7rS|z˅w|,0SFz.qaNQ+^ӌ8_\x6eO]pǾ @@FϞg,|PՊv ϞGzR<6zVT"PTJ)!@4' K52 @RSGtB.R7y^ꖑ  @]]} @nٙ\@|> pK@gg @`pYj` @-Y  @d @d[|v&@_Onٙ\@|> pK@gg @`pYj` @-Y  @d @d[|v&@_Onٙ\@|> pK@gg @`pYj` @-Y  @d @d[|v&@_Onٙ\@|> pK@gg @`pz iܥv(*TQ^ @ R7 @_TT}[=X нRݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Rݷ  @TA\C @ Lk?i eVoXCzz_Ou)k p]@ngO @,e  @ R{Sc!lIfuƣEg @= z7 @'6j~;C̅&Ft[:[r',dJ?ܧ6̗#:3_Z\l~\Ym=}WvyN>6ݾgANm\:\){_nG @ @Y+h X6 @6K\{,rK52%Rhwt@ a/GhS4*f/ =),9w{]j)fq 0=S6K͸K">=i^J  @`γTJZ!#S7NT| yE5-=fu)=&@_@fH_x ϞN$@0KiB @dd @ , !@l  @0TV(hP@jiJ&@RaZ @AY)# KiB @dd @ , !@l  @0TV(hP@jiJ&@RaZ @AY)# KiB @dd @ , !@l  @0TV(hP@jiJ&@RaZ @AY)# KiB @dd @ , !@^׾i; @R @຀,uΞ @/f,mDp]*B@* K9u @d]P Ъ,jMD"tA  @@TS7 A@5 @ RvN @@Y*B@* K9u @d]P Ъ,jMD"tA  @@TS7 A@5 @ RvN @@Y*B@* K9u @d]P Ъ,jMD"tA  @@TS7 A@5 @ RvN @@z똦i~uWv{TwA׾\@[!z ._O͈' Kճv$ @?Y PO \zJ_M+QthB \zPmd @ Y6)* K5"U!懥 f[=|+}Y_j?ʧoL9)Rp_rSy^;6]sFε4zD_j}űju)m\'}@Yr^%{yY?85"'J0ugBݿS}o MISBۇ[J,8MwO[`_ @ @,b4SO!@dh;K->$z^ƅk( D Ro:P?y'mdtRn^^ BÖm|mz }]~ Ж@,Xbڧ}ӓUk @ {K"Y._l' x?Oqyd:v @神ڴCMymjM??q5F.2R$ 0,5lM Ke@4 0,5lM M M*p]j֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A@ʀh @`XYj֛8 A`z^ai0!B vTycUXkRiLB*&A0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0  Visio Visio.Drawing.50"VISIO 5-Zeichnung0# Visio Visio.Drawing.50"VISIO 5-Zeichnung0*  Visio Visio.Drawing.50"VISIO 5-Zeichnung0- Visio Visio.Drawing.50"VISIO 5-Zeichnung07 Visio Visio.Drawing.50"VISIO 5-Zeichnung0:¼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Dü Visio Visio.Drawing.50"VISIO 5-Zeichnung0F!ļ Visio Visio.Drawing.50"VISIO 5-Zeichnung0G"ż Visio Visio.Drawing.50"VISIO 5-Zeichnung0K'Ƽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M*Ǽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0nDȼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0qIɼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0sKʼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M˼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0V̼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Xͼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0ZμPicture Word.Picture.80,Microsoft Word Picture0[ϼPicture Word.Picture.80,Microsoft Word Picture0\ѼPicture Word.Picture.80,Microsoft Word Picture0]ҼPicture Word.Picture.80,Microsoft Word Picture0^Ӽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0` Visio Visio.Drawing.50"VISIO 5-Zeichnung/ 0DTimes New Roman(|dv 0|( 0DVerdanaw Roman(|dv 0|( 0" DArial Narrowan(|dv 0|( 0"0DArialNarrowan(|dv 0|( 0"@DWingdingsowan(|dv 0|( 0PDCourier Newan(|dv 0|( 01g3f .  @n?" dd@  @@`` @.8.&Tj1##Ge1                       2             D/3 !#$%&( )*+,../0124566792;<>?@ABCD"-=ERT-= EJKMNOWYZ[  '- 2$*Z閃2$Swl*Z7+A+2$Lp %Bla] ;w 2$*uR7Xb$7K!*ǜIkj1r-2$~,*W=Rk_2$K cqjq$  d2$/6=ؘS 4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOF`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UML). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fV:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f<TEMP#Durchgngiges Programmiermodell! b!  !3f3f3f  3f$ ;  0(  ~  s *(  `   x  c $      r  6A ?p$  H  0޽h ? ̙33  ~ D(  D~ D s * `   X D 0A)?@H D 0޽h ? ̙33 !hx] \T朳%  b^w5B@+kAEE5^-~Vef 2?nia]Pnygv #uz{s|<9Gk=Oni`0]tlbq-.(wM*BtE W,nXܱt6X|m# t%K,*,j,!X°c>,Xb釥?H,,Qvi~Ko>E"k!]:_bg+Vz} ]d K8OIҏ sp>&_NX;ğesρyMk,No(?Pݦ7Ɇ:?l!0­w}ɸ9z~N eİ53̳ %r 'f/͟ \{o/.ۋp 8rbcϯW   u  !"#$%&'()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@DߟI`l;Xصz{(`+'ٞ9|6`C(ͳnwͿz;?'x)JTs'eϟ+:GFnl7T|`L(pO"C&r%M;2ޚ/oۓ4~֧+ Mf]pk:j[JI8v$M"g?8d\ Fx,)$>Ua!m-V$l j.n/ wiϝyf77@MCN`͌F#Zڐ #t/K# ;5 dog& a*|,헽ͬCAW>/]HYj ;`qF1  !W~%8p!:SL_nWUp-PY8 SU,N+ Pz4]4+IgAӡH~FJxmfct,obي_[@lzm<\խM2SRO)2ɶ؆[4g02ϫq8R7X&]u6ǂu&hڗY'ufOz{;,S=gOɞ n<"_̞xܞF,588~ w;&XfǾm 9K:}M1XuI&,wt:K1N?ZL<+w)˭3t"鐤 s6df#9usmheeD'a6\|XNbK{]^H>zR[{R xgi]`|C3/oC;tsn[X08J. K7*¿`4N-XH&k}eV}mI&x̛ϑ3d1X? c}ݍ|w6_e}uk< %ޕG$ldU ?^78G$`2I dn <0 f#W;-|/؊ キ BV[< B.(#, oq/Xv[ w{؊=Otܱ-gT ?+seF/bt07A~"nWlMbzXpA~,cnmVZ[?Gw$|f ?u 2G #W3 O`x5÷ W#>ïa<  _;{xG0|2Ç38GCΑ3|*exßE|5r72|ç3oAp7²Ď϶%+71|WJ_XJ%*,Y{I_KH{HapdܸmNe$\GHsD)`o㤞Y}eɜjwZSY8LVkvr̜©OJ`Dz#/ݏ8ysfv-5٧@ޖDA[M(WǢÿ Q7y wX2uұeL w_;J3/wz~cyt޺?wa)by1'eu,#w ѳɟ=? 5d}?ƿq8.F%X%)]~C?|Xŝ!|wՇԇuwZnW_NϾtYÝ#ƾH$a8VQl:) NNrbeE$PLD-{b{ba@lz/: tA.|ܕb_K7_._*RLA2 IFQ,bQAm"M 6,FpCw_? 7JJJJ*$bvE>Ȇ|)bS)X ZeL¶Sl5fP,bj  aSl (6br͡X2)&P'arS,b})Y$aH6RbP̍b aA6Ql ^mY%x%a5Q+0~~s;ےnqoC~giڃ%\ ^(dŦ?: _ -o̿zgy5kKI_pl9ni=CJ_.cm_^H9hv?<1^`ԋMfR6-7LN ,+Apy9;v 6l&NcǎCL zqlgCFS=Jpi4MfP?Y\Cd~O ;;GPV0avv~q]b86r 81bFfQsI.7nD),y ԉ0hBq]qM&籱khAc.Oj/~IwĤ^ $_O.p=pBrtVL)N{Y+`"Ҽ_93b\EVEaŲ7+5eCnj_PaPpFuь'/qVeNUU{a']_\5jNՒ*UNV]Q[ ڌŵjߨ0=^[r-^]iřzYme,~G/NllQ'v%}qghJh4Lm"gGz=;i8}]t #qλ_6%)Gc#22:`h"ҍryb7].OZV5P:׵OLWs]S~R%ĭ_vpkt p^Q`B1 -PtjM,w *dB_7/iw uun p p3z6iiTp˛]Mޫ\ ~R$xe5]hml)ۦ-w9 'VvPSvCexѰ[9PȿoBtTF&6cs΀"D_G.#jȊjSQtr"a) ٥ޥs&`ke&G(QT֬ܫ֜p@ʷ0S6xU&~vbYk;!v)i\K{?xjOZӺ~#.h# i'E'$7=!۷E W>#asJVuUpW4{z6CbNGnK7$YԵ @?B=ҸEFyyGeL.Coh/gsc"F FmS#QheYT)z7 E$q^P{DqGg/<?`e73Pi\Yhq69XaMY3p7Oj[`: .6s J>woY#L ((ciڟ= OrW pG1]l27kb)l9^I{ 絽 P9kS߶wH3TsJ۬R| .) ))3F^XPR^N1O9>nhTC%В"׏sZ[&pe.|ZLgW7+T<\1/l !GIѿ(8_Zb@C caqJÆOS01;F^Tem;eM)[P8oe}Wv UxW{U X[g2/c⅊Vȍyku=Í־qk^(mh,;덕ƽF8b76ݪVUU=P/.}*fkxwA՗2ロ3eS3,[ ]{;<:,U~#_xZ"f g's{׏%vxJn]]x&yk頉Եڴovnj%^L>Yv:`fn?j늽3ܶ&f Y 1^2/'?cwAü\<]#o*?O_ްt^|U׆Tի8b~wЪGԑTx7^yO?WY b(aw)ħ;M71ΊW,4@W9LX|iL"3M.oV=o[)T4\j,?zXe,wV7ĂWite1^ϳ4!IdyHTOT'T;TTGR.=Rѫl{Vej^+([غbϴ=zY{"}wWU/3h8mv6UQB?3~in=?=āOj_Sv',;q#[v9})GSO?j(XhرO&E] >e6@?R?Ql>-i~mIjm yK3R>n* ΥZ.;KC ~ *-yL`,xo&X_Tt k ƿ}kȶ\X?(3nbP_6Ⱳ9emKzV=߃pG0r_խ>OnaM[PjKv6vOeq XT C̫(X_QYB8Rc3KwF7} "8td뻟\I\G/@ZES9'__S8o#W`rNڐ?kp>d>ST8B6OwO ߜC(XmG֒( bY kЈ<f04`Z9pAèw!g|1 u2C \jf3\2E3ǁ3f1×8p fa>0.x afx Oa5d35 '3f\qʞba.|'ie:[yxerXJrQ_y }vf$DxD.6] F.H*+r*:{ɴTk.C^WlubYտ|psf'!-Zl7F5$ϕ.6!WwwЀ,uyEVF+]I|ٚ U+^ kHR*cm#DIE# -|eFeQrP -MqO⩇ Q-h =LokrS9 _Pzl]m ]h tjL+1&hp Dlin5A6KUP^&>{$hFӼFSoEƼ eSp)`pWM沉,Ĭ<dJ-kh ZԘ.!lp }Wh [gj–kh ^SGn@}?19_4\6c5Aiac^YbyW}m J3x yOX/=3 ڱhG`<3;UZS U@D؎q zX 3٭K/9LB!2t=d/Z֯V qN:߉? K]Pyf|ޕ([>ׅl"K-enTeir-+l%eC:2/[,?LoaVJ*|nY[- vq{AǷǹv V!"Nd Kb-_9[2Yk-2sR;i1BHJ"B~),msa)X V;'ot3<ߜڟ-ߜu#ԓ `v+2Ἥx)x%Y]O֑ɦ$Wt䍬: ABnhҩMye`Җa"-,  Ix]|73K _O3r70|e ?'1|Ïc$1|څ#l~)~4B0ƬXÿi Wr4h_|$Ç3|X'd~~bx a ߝ}ޝ /# |_dΎ'um{^jfA%ZK^r{a%^``xowcxNz$<d1 C~ g0W3|7bxW&8W a _~f _%/g~92L>1|>>C>Ȏ'{!v/tUX[\{>#>W[\M$k8e IkBWW{gv9u1/;#wڝ?cq&Jڭحu|vnu` eu2s#=us#q۴~vJ`X8l}6b)VI{b{b)fXRl&ŦPl2(6bIQ,bvG |mUҐП(KHSLd$m"ņQl4CN1SLN1j괉b)=(vˬIچ [MssssssP0(M17|zχH)6bJO0)֍b^s@ aWA.Sb) ŎSb(b)bL(VN)bQl.fRl &Q,b(D1(MR,bx6n,ߊQ,b,,#+2ǟj 7DiݽiHi'rɣ=0bDx/Mѣ/ww)@r }~"`$E |,E`t(im     !"#$%&'()*+,-./012365789:՜.+,0     ( c BildschirmprsentationMATHEMA Software GmbHb kTimes New RomanVerdana Arial NarrowArial Wingdings Courier NewVorlageVISIO 5-ZeichnungMicrosoft Word PicturePowerPoint-PrsentationTable of ContentsTable of Contents MDD definedHow to execute modelsAbstraction and Concretization(Abstraction and Concretization: ExampleReasons for using MDDSoftware System Families&Examples for Software System FamiliesGenerative ProgrammingGenerative Programming and MDDThe Role of Architecture$A selection of architectural stylesReasonable Modelling ConceptsModelling Concepts: ExampleTable of ContentsMDA Definition by the OMG(The Problem of Middleware ProliferationModels in MDAModel TransformationsMDA and Architectural Styles MDA and Architectural Styles IIProfiles (as of 12/02) TraceabilityTraceability II RepositoriesTable of Contents#Software System Families revisitedEconomies of ScaleMature DomainsTable of ContentsProduct Line EngineeringDomain AnalysisVariability AnalysisFeature ModelingFeature Modeling: DiagramsExample Feature DiagramFeature Diagrams contdBinding Time AnalysisTypical Binding TimesBinding Time ConsequencesRelationship to MDATable of ContentsMetamodelling definedModels and the MOF More UML MOFMore UML MOF IIUML Metamodelling: Stereotypes!UML Metamodelling: Tagged Values#UML Metamodelling: OCL ConstraintsMetamodelling Example#Metamodelling Example: An instance#Another Metamodel (Simple Version)%Another Metamodel (Advanced Version) UML Profiles Metamodeling and the MOF LayersModel TransformationsAnnotated ModelsAnnotated Models IIModel Transformation Example(Model Transformation Example II: CORBA *Model Transformation Example III: Mapping+Model Transformation Example IV: Notations-Model Transformation Example V: The IDL Code-Model Transformation Example VI: Annotations.Model Transformation Example VII: Extended MMTable of ContentsUML 2.0 UML 2.0: CBDUML 2.0: CBD II(UML 2.0: Behaviour I: Sequence Diagrams(UML 2.0: Behaviour II: Action SemanticsUML 2.0: Metamodelling SupportUML 2.0: XMI ImprovementsTable of Contents&The Role of Testing in SW Development Unit TestingUnit Testing ExampleRequirements Testing$Performance and Scalability Testing,Performance and Scalability Testing Example"Testing non-functional properties+Testing non-functional properties: ExampleTools and Technology Testing%Additional Tests: Model VerificationModel Verification Example (Additional Tests: Model Verification II)Additional Tests: Model Verification III$Additional Tests: Generator TestingTable of ContentsTools: OverviewTools: Vendor Lock-i&_VSMarkus VoelterMarkus VoelternTable of Contents Processes*Processes: Examples and Characterizations%Agility and Model Driven DevelopmentOzIigXay~ݕ+DKcM;^~YZwAK/Yx{H|Cr$cd ;1da=Ys#%1ߍi8hA2b.r4քǮ[s||)h%Ο˻csksqlӑs#N"v4ŴOLoИ&L.8hA2ك8j}CU&tͫ梫^s5`I%,Zf(* b30LB!aifzjtޙ<9vsӗ9cWmf`Zڊ/\[x z/yh"2 Q(C@CvP+Pq\HXDLm^Z']"o^x ,L,dizPU.PX"M2 S $LBX.hFL] X"M7֯J (F! d2f#"tHY@@PceU 5Bg+B=hjR\T{P Uk*B@ ]$B@I@%B@R%B[<^&Oc4Mj8.ݘNxT{t F!(N\-\%`eų$z7Q)ӣq9>iHqihp(/5m9; Š "$P))&@oK|.G+ڢOd>>jzltHzXr&Ǣb DXbLB,TB, @Bj@mG/LBa.DJH{IzgiGME#(ʏ|2 #TrC[4PLBТO$4F1RUUvs{ ^vhsZ#+L@H2vc;Kɻv5vÙ/%D n.G;1q& #|} ARfG\Z$4F1(8K$םm48 ؙh "3`ؠ"׿ ݱ .g6vL*^ndItb@Nq2 )Q2Wabwk/<=X{Aso gԎ<TsEVel;Gc\v3Ew q (wjmP|tpp/nt:Mf&!&߱3dnnh(^}J`ͱ#~sMӆ/.6F9 wy7Um̗qAZ@ky$B-2 v&A @ _N*ո# -3iauw4?\ڡv:.:M! f􀶎Y@d(fp@=3 ;s8 wÈGS>yزClM (&w$`1Rټ E&ҁLBȂK6uxi77FV(~ybAO[O7;`EHDט`NV]䈐AF?m؊ycF<~#_d0xTS4}( 4G/ԙ E&X5wD{ͩa5oz#ϵ{_3\o>>i/'Sq^Øo@a13@Tqi޹6>(ةmir@e\:rQ&zrP(D&oQ$ &)"ai&…­ҍJ%&O|Z(>~;Hr`!| v{CIY7"б"[Ts7w;X~ P p[/T{ɞ"aQGGtdCAF/"D -QEmʽ*FU_{,꥽9Wxom^0#kl:áUF*0ty$@S:V$G@geBOo(u_4@ZZd؋c"ۛRAïKX/ L9WU!*dN*6W"z7V/=*>p_ȸ}Kk &G^<~a=~mUV!ҿsx:b0&U0ͮ60b`ÿ4Pkj8ul_^Y G8;edf Ñ~C5YKpT8BcwW_n=݄g<1s'۵*}YGF%j~jz>-Y.KL g՞,D"jZɰ+0!wh/<<8ijok;d# .(W﯒vsk^Sd-# cK#^H +&MȺIh =*?Hl5m|^yo76=MFb6ˊ#ZH(+cRmʥ[Kt!J~K|g6 yŌUWE Y7 ׭Oka\@pwd՛6c@%/^+F%`d{MYYX0  ?EωNRIik^0|v cSQ]mJSy Y7  2K@jR&Vr,lq7(;j* /RܤTZ{t8oF ZKul3^G+n{w0<{eл1 Šj&1b- -[Ydm$Hyy7̡IuAj͌C`_[^6#a(lr'%zD@G\GX w˻aʠ4iD@)Zh8(m2sCl@hR%Gb`xwb*™g~_Y4u3MߌμO@/de.VoޱXJ) {P@@)D5h^8 QD$9gNL%hD8}CҐT4h1eU$Vjr|ɛ7ob `EۧQBd#pj3_[]#/j~3=3ɨ[xf?+\8oֆ kC ,V'J(! q:bJGhF?s#6}D&F{M߿R}?O<4Bn| >(k׿|p +Vn+KTѫ"DE0ZEh:QBRԓUãW+ K?BQ>"@_27K>zw#;khxDOʿ f[4fT4%ud_ʯOh)İp/ G|b30b Һ ȹFY'M@dl^O[YHYuBdīu0ap@[0f Woz畻jLDۘW¨1ģl# xӵgP>?֌ѲWU ǬRu%'>a.i~ɤt=N<*6Zq G3xU>,(z~pȋZ_ZfqQSyaHArL@*QTi0>ٙڤ/okc ]B@$Dkcc Hі孇G;>b6}m& hhKCX!B"С@(DQ! @(:V IT ɼ;߹⹏,o-RMOOHH*' 7H40G6nE#U.^&Mi$ s{kV`+I$tXJi &Rv۪C?=>~o ioyDM`4j~dp 8[ƶiA3oʡtsplM ߉~@$B@&!u6ǦsG5U=cުm}r1nLwW+շcWFIۛ;|l'1]jښWV{o]mX`mq{[.I>֞xߎkwo+}RΚ1 VNS.U̓Z%`C/d$kbs1?ֺe k|˝ͮ 1P'gZ#U6} ab4E=_EHKhQT`oe! g%̯%IKB (N>T?\B˚_n,N+1ro+d>X(鎒"$7…_]2 S2`bܩO/TWx,ZsڻC`x‰ig+6rYaZϿ)5ȬMFB(r63cI-=4b: 1g7&Du|,#ˑm"67Agl]:[FLx VٹÊ5,f%Aq4TPSRv$HVkc848,Ό]d^K-leκaS|G/"pjoGf5ny2hzo86VrK;Γ8+Ot둵^¶Wo %Q "/M`lԖxrBI 4bdGB#2 !Jv|dơo(t4մ<>6E Ne[5l%c>:YfLxI>a@xWxqFVXF' 1$$Piu'ӏI/[31};u8mr;#GfX4nyȰ5}aڙMo2#q[BT#{F7 {m۷~Ktp[M/)JX7>@k~Ԋ+㍀LBV:k%|_rsͭˌXH -ٳg͆rk򺑡O.Uofws$N3hlBk4.#Ğ)6K?==@ˆ[N.JtÃ+;I|y0M\0e=,$ď[''U/|́삎]A+D1(.+۵;r6nہ<1fE K%мjcuRLq$bM}6| R UdO]k.%Eo $aq-b}е/f*R 49BT%B@9үcP!9oY7OL.> (4Е X(3  Q)G!M$G/FN~=&ds2/|@] J~?Y]p n\ME!"QBO㇏-L__=_Ȇ|p0zyW}̥<~o۶|r<ѓabo!,! |2eT\Bhj m@ ؕջ& Xԓ@ b֡ (@!?ߋo')Y O!_-400Eas1$x.n7.;62xeTq5>}/Qf3 j} |gm wF'j AETW)E"֕fu 2V[L# r?HF95f\Lh'%$D54bIKY("k$dMMۦafCCÅ+($R]*qc ܵJ ܕ#V" QC9pdVdbt!=T Ǫ-d3 =U%<2 YM=ngtbebH1QDrŐIH"iO\MmH> 9PG2EPBC/{3Q4H澴.cjƵ<~%L$ G6W7QK&?RԈLBX<ك̩>JQ2 !@Kpك+gѵg@&!:v%=Ȑ[U~$Ձ$ddE)?R2J" dB]R~.LB,{~-HaKm:Ԫ &{rGQ<@1%$S)H9$T1%{ zJkȏ͚ 6M+H~h9$ ze,HPSTB$Dd,h 5QҨ&eIHeңXD~X%bd"tXd|)IH~eҠDA~D ae+Kꥒ)*IHZeK/?Ru^ dPك+/]ˏ}~.{,LGjJg |…B ^Zs"4N"޳CG0U]TXequP x{1xRępZ*,_eEUHYd$_;(ggfn-p|G/H/\dё{dI=򅍹=%yyiSݫSWB{G@~1\K}S<!^#Je9`0 t1%IvoXI|d𱛧ʯ?|H#[#8@O:riZ\z {,`W?JDt pSp:=451+wW^|Cn;ݞ:3y>I׿]F\.Y`OddS`0Ʈ9Tメuq(1 ]@ &hn-U~,Y vsk# |xpHLom3;|jfi&@z~G΍\r SJtRD M0J7rEțFP,1PBEIJ>VY8$59 )# *$ "KfHhꐀ?OE% KET~䌝 X2IHHDPD1VNĢMקG,nv|0 Qeo/@EWB 1 $3gd,ك@ك@:ISd8 w KTz!L{]{5e<2{Ėkxou.-I⧚^MLB*ijX$T %"m.ݘC oqb~tm!b40؊܄1w,e*6meb '@Svw˯w}a`ы-_"- ;В=HKI&J$㭆%Կ/a pEhݛ?~yN$X͓͕+ orde{N`N)˭ >.C3kx䟎9U><)\ekv[[MJr JQvn{bCV[o6V~֬*4?=xd{;xѫ\.Os;$$۷oxȖ!X6V?>:6-֧qNn߷mk]B=-(/^sd ,Z~a:VB?cG?cEצF?"y៍LN\5/]%G^q{_l Ij8vo< }-]ZRZ5eՔ}E- Lx-y{ p;/0ls[)l\c_"Q$aݐ*Swلx fƄ{C9-lG{Q_҆@ÉP.) ~zt: ^g.^hSnu_{a P1\]xx頄I{M S0|%^p#hʭiR:Aڱʼn5>kQX3P&i!0fv۱xh)Ɠ#[hUFz5 icB* Pkʯ*ZBZ.ˎjǪe1<34|JI ȿ1…E vwON|b5=SdgX+f'52V*6"vӻ`N#>9QO$M&l3fT[<#Ɩ$.UIpHc V;"ׄ3co+J}(8LX%jB0̅cYn"g1]X fg&  K@<;3KMZk۔Q³: x?mza8buٚ/,'e +7Q'.^< b TV4^[ƹdenNoхRl.D/j&q(Y^фV1yZD_`Ha^|*|];p]ycN Z5| TLj_XJSf}[-ɵS v18'#L6O彦X$ޞBi_RGevb>+=zU1a8~o g1YD@wzْw!}Wr`\nfO l9$޲KVd6QC@ӀpSV$4EF#2A@>ĨJ&ĪN !F7:LB:tDzo"2 YԺ,fh_&!˯F2ʮ8zJqZ͞Σ,z(!&^B@D# h_xү8PcP8G p0: @ !LBzڦO6q"т8 h@wXop\ڇ1!$$]-~G#E*G9U2x;<1$^*B (2 A X~h+/!\*C>i8-2՛LB2kq&֫IЪW^{%SB@$"$jM2 ! LB_`S! @IH$B/$V1B@$$jM2 ! LB_`S! @IH$B/$V1B@$$jM2 ! LB_`S! @IH$B/$V1B@$$jM2 ! LB_`S! @IH$B/$V1B@$$jM2 ! LB_`S! @IH$B/$V1B@$$jM2 ! LB_`S! @~Kܒ9|k^ эޱW0IxLB@%l_d@"zmJ^"?UK(z` >JpU_u@IG$B 2d"Rd{ՉT~K ƣOIOa+B@ +w7Ow),4 /[  Y-0@E vyG G/ܿ{~c`ZnZq44ӑq4({jfpa[XʼnH#ײ81zxs+2/7߈~%m' {G  ĥS\TB_(|6vҭыowrrOZ-&4w0[ 5> eh F O13ĿR@)%Ʊ܋6=a:3N!#xuY@?K#t舴 ^'e, B w wy Sa\.]G(%SoP"'FmdET!F=!~28`ĹUKٹd!t\h̀;9, =h"J&^еbRn7&G?s(A!@#*]kDžϘ*0]VrF@ׁZG k"X0FLB E#y_n-V4⸏^ip`)Czy8aʝGdNəne}]h P 3R?5|RHCKb1";^$ļVgT.oVo;r HqO"(w7lQ j;h7Ϟ:0>șv~p >M0+b>%_\o'X;$TmH%x~c03G'l,WZjMr_/=%JOl+x'@Iv$[L̡]lqqXwq^!ar+\IK%l_d Y~9dd,7P&!c/`@֗^s}u^ ! RLBjT! zE@&W^!dRJD!+Zq+O4M/''b[ȓIH;iC-/v"?U 񗰽eZ¤%ĺz5 k\s z#$B$\B@$ dK ! LBk! @IH$B$\B@$ dK ! K#Y`Oղ1/a{m$ħK! : 7$5B %$bTP4JHɫb! zG@˽c(B@ EB@ICqB@(RB@LBB %$D*BwdzP)A@&!%T1# ; H 2 )Q!1! @JIH"U ! @$8! RLBJb! zG@&w A!dRHC!;2 c(B@ EB@+ /B=$IENDB`n.jVkhIW3PNG  IHDRO#QXsRGB pHYsttfxIDATx^_hYۗ:yP,QqDD%\2s,T0=G.-z2]){e2r=4VC4HRp4*3'+o#EfFdI䎵^wD\{x!`!`9Ei[!`!`<0 C0 C ѵ!`!`ڞC0 C0i{y]!`!`0 C0 C ѵ!`!`ڞC0 C0i{y]!`!`0 C0 C ѵ!`!`ڞC0 C0i{y]!`!`0 C0 C ѵ!`!`ڞC0 C0i{y]!`!`0 C0 C ѵ!`!`ڞC0 C0i{y]!`!`0 C0 C ѵ!`!pŋ!`dӄD`{b@R֮!4h{44Z *`LCܮ~!`!`r?AC0 CjL!`@0m/Cl4 C0 F4zB K~'93S L V#g]W<71Vz\æF`cyXS%NE#fBl{/HksnBIoVn zV(vwVaSL_*C0v@=6l:.^SBUPϝ~#!hJ.*z׏K1ZU3 C q3 {uh[^Y;71,^b:%,_]1$Eߢ n(>ʜ{#Ϗ45E.X#f9x/G,v¼r et!KOkآ!WLZ :տZv+[Ospmg>yk}p\W>LMA ϐ}Ƈwn߻?nPn,Poo)|.+, _>;d\p_C0Ri{"H}0at;ߔWA+hcg-(Ɔn">;\94z{Gz{{o`9!Fv2LC0CĠlw;rfhyڃͱ3i>;"g-zN] cO㠐[zÃ5wli/ʱDWq! _n&<ֺ!` ˮѴdve㗾N,Io6BWkm3:&!B̶A1Lqs6?c`@ML۳aʴb+i3ѵV\$/&?'p1 ȌŨ ?5]!Ope/~=|_+4@S?UȒ~o=wYA &%(DN \:_.кit3o=Ȼ˒qw,<a@"pVӌմ봍cr? BfyZ/cpU-]17e9|Tc;TAr3a;r܌!`ći{ak b;wi.`G-5`2:Tsn6gG0d-Ӡ喫+WdsXڝHFӘ@L۳at޷b=x=d7P*3kIa&_)_kɕUr|T RGg}?a_;~ygHSMR+=Ǐ]A.E#J ׿0І[ %R+dβZ%{ȑ7|__Q\P_@B 3鴷%r'J  2O97Ծ[}p"aEC{we'ds|Ԯ8)K(s:?rfx{[p<5gsآb .UZ^tkK~Nfs; (u߇yEv?C40_Lu.a.B `d!~LKBeV?NEhʄd(RqbHCi"\pYj}Yn[}vQF''oaCU!VSge8<<mPf̑7հ$1C aN_+(ʼTy`yY^Dݭ!@ɺ-Q|X8V8* GGPb=W4b뤒lomF@U/v X(њi$2o=(,p;̂>dF@ʌT?[ 6|| eeLΜ ДΟ݊UBJ 汆AR,86,b9=M*ԽkC+>嘉 byQ!>R!*A >p'U%t5$?IH6YAj6Nu7}yxi+&)l7k_H^|MW7*=!A ۲E0x&` TΏTku~7PaQdM %=u/n&y>M586*i{8k>zSfwb>fM}PdQsT>JnaUh^$caL#`Fa04O=Eֵ=rjv?9!]gW8TNꟹ4 XK59mPg\MKϺLVE90zGRK0ס êg^& 44ᣒ!Lۋj8 9U5!.YHk rHpȇٯr4MLpwHys`^Ozma\hM%ϋnAڤLۓhsBڕl%J Xa-}vzbcn6ǬJEЦT^U{ȮW  | *Lks2\ރQ ^SQ3U:'J1ym)eRjp9VXl{L31.1ѽȺomOZ 0dվn*_a,׋1tt]aKcEDK,R=W|:}䓭K| c[6VӫeX"O:6:&mmo-kMOڧyeB%kmp3&"j$N"Gh$ ˪RK|ۯZ|؆Yց.t}ͯk `xUg{☟dc,/LMH6 :)mJgf:ük|v=`^S({m4f)ጩbp>7$HUw&׼36h߬ԒE24^j7(X$㝙,b09 MHUT$1.{m(6E0!'sH4}lfSU@{ MF4?~u*j93U˴:36ݣi{=#e>OHxRBi;969Lf0m"{m3ޜIlӻ3× -F;2m7i{>frL 'Mp8EFO'=(+*Lۋ|򧝡Mz7BOdm^>cMl}ffkpI hobidnޯe%+ilz'=gz_3'3qb7$H@?B6fd!`9F%O'?-:3Y'_ ɟ M `^Ѻ`@ddT~/E12i{70 Ȯ'`jbiD4d@zȺWGʂuz&IQL؆!`t}|;=0m/!YC02@>>oq&xXFj!G Ojlnr<5C0:@>3uhX3BN!m!Ծһf(#u[ Cl,,bF,%n!mMq^!`t8ŋj$Dɮ MñkLʰ_8vxo Q4?x25:C0 0mf!NrE n`oٓ;xI ܏{Z69 .F.|z@!qVi'!\sc0 0m/&`! >2ax2UG;S⛰!=Lޘ݀_.4{ +W8:!__+/CH%ppDoLdu. 2D';gux$ydL\4̢H@0m/ CJH;TK'JN.-Bwς, s:_U&ٌ5MLr&.@^4`+iJ!3D5m`ɯ!dĝ2g&3! C *Lۋ IcD@xoVu,[͒x6C}&daXբYl>VIUv:l''rl!`i{fX {.72ܥ^aҍͭc]:|.R( }ap@?ˑ4Q֒@hwC N$dL C}LkC`D@S8Z(yUIjU'ZL&.RX+uբ:&lkЖ㣺\N*w=B?ao˃ ;VvqB]%̓c+wǢhj۟g>$fx 9p&E"aGܽsJoo7sw'ّO*^_L|:|s\CQRէpMuU BW(J_!bzO-ɏI=u?DrW"wM yݼ6#$CrrK zZ):Eɝl+woLr&.@,H@0^&ut"{,Q၁1۰[3}µ% ݍs\l5^C`Gcn-fX=Zx[tJQλMI\+1CcgDsbxPߊrM>X|O+7_VQ.2\d WX'=l]wַ0xjN;ĶXApqpj]rqITs; (u߇yEvHvm@R֮!RF ciĦӚ(TryY:6gk0mNNx!;["vÆvX XMMU9xy & :5dR2&FzHa'˪ay=nVhdIu[чXepp GGPbX4b뤒loF.e `޶|wNvX-EbW[# f_k}®ML̄YJftH 7C0:i{ٚ0"Fd*!K@GE<ְahP_ųކ^q# AwwS|+F19080u<Ш`M *G$zaT=ȚVYqLt@XV^^OOkH;51cdF«oY\^~(H%49.&!Ɔ$EILJRGҮ!Hc`w(\4y& U.?[| vFZAQFYLdƆTvTQfL\4LH@0^\j5Cf{ Y)&4Wۃ|6UVPNL*CBLA.E {Ntr'IGB )K8n0K:VYE.HnHL C eWjS*Ҡ~ir$+^ң+C0D6E^nf3y&!%%mlm`!`!iLq!fl|3u[nȭÆ!`!U%L&:lCMԸO\=?rdH;5H~B]ڊ) i6(+$.gaEi{iP2D2ޡZJ=QP?,T8^{ٳZv?@WC[Skġ)3s"4cb9x+ 2˙il`+iJ!ED\?Dם'^TʍVtTy~L] w'dzcgiY!nLKt@Oijכm|rg%=Ony~>w+Z}7|z4g]1-]i{]< ZrM. C@9 f9=µDO&!`Di{i #mg'^:_`!8HΫs㛏kQv|٩ɩ{]3;݈i{8d@-uoEۮE,#'"gWkXM#!PlbݎO&!P lnY1ɟO|epqgI˚_eES8y 8oI ObE nF܍Ons盝ZEƋM}|}zSra;~ojr qH!73ctX:5.N ;)셉dQ!`^TH #вi*}.=.ݼuS⑆Z|l.}7@`>Y<' ~qU2۪C ^i$-C93lkmVD{h&pW?c}1Oۜ4GɹE_#.4BX=1w;^D'4p~91r|D9>ց=7#R9t$OmRNfe'.gaExcbČQFC-rq`͋ITy([ƹs:4Jj_< 釞ꄆsU5ZڝwV!j I))XB:iP㮅%ivXO L\ d0ByEz`]}wsp`z޽mNyѽd@ŷР#K7.\j a/b(µQ(W\Z<lV0 nAnigUrs]ؙ1:EM ?-`Y1|͡C6ߟ;_p=+5Z2p\'^Ӽ5 C BLۋLce$[E%XC =ta< T=>YE<"0ɍ^XY˸,%50mnm\kW) 7 C0򃀂$ !,⥇ Yad鳥ףhŇ|+ ơe\ǻBSJp,RP@u/?p[O C%#δ'hP"aҰD cViYju?|f i:Uzvڹ ϛc盕w&dEh6lNpS;tv9Tk!ň,q9 rH[` fkybt!_1bxctIz I9[7oy隥]Zԧ_"B.x@>0m/hhzLsLE"OT6ۛͭݙ7<X?'+Gihp L9>cgz{p`;#^s!LH(/l~Pxy#e%!zI6 G``޻s{'=/^pc(?SeTO(W)wdYd5i{+= Щ!gKOK3+Y1| s̲چ!`>B&_,~%ddϥ?z9#@^9v|-z0 0m/*$OiH*~gbWЂ\PȭT Lkq9 o7LKPx7$Ռ X5VMIi dJ,}R$.g$|ڞa(MC0 C0B5!`!`0 &!`8ƃtmyN.ՠqmʧ*rM!NE7ШP)LS0bEX5憀!`Dܥ[8٠ڃMqj]Z /wgC0!`či{q#l`of ` xqjmXO5NTT ca0m/ JF%+wװ#;l޻{eE+~Ңi @cڗa=ahߛ4Z ?k]o%zjqyd]q]\>71e|s,qK!Wb lMD\k;591/lUb-p&1 Jc#;F 0JNȜ-%}Ҏg8zytT-o}1΀W,mlﰶܡU8K/-UBx}vxhscQ;7_mkcז = e 3؃ۛ051B0K`$Prw{(yzL(?F*ktޑ3<,??cJ_5= Pg ҧ!%|W-ݞƪt @hP(A>W5~:pgB\XbWCo2+>v٣nԿSo=.oo=z4K>in;(B2&!yL2sƃW%A⧫VgcyU± W : l9ʺ`yN(0Q ĉOJ^.է"0q |!.b[A! IXN M/&~!aԐ' Sk!`$i{n?ŷ0NBT6o/^ yl{(pUQw=+spOO<1-``n2_ X1dAyҧе0A+HeсGäzʼI$MqzzJp B_T!^^r6Kn˙I!o7̶4 C4 ǭ%5[Y{@Ն*ގGrOu`IR1X@X6lՆ1ؖҹ,K簎r-PVWq%Z󹿿! 3^i'%DG9kqC9"%nn:([HäPˬXؓϥVQ0JJNxZ-o,C6Ɋۇ&x[B3F$ݹf;ד[J\H yр02D4D!AjfA aySÚI{ߟuJNT~n5Ӟ'dH/=vBУ"DyUzaEW=]%u I:v9 Q:iJWM 6KTO3qBn$ m/ {(j B5cD)C ayS@Gn{z3CX.M+m/>} ӲVħkDfˬ"tņݐ[{Q ʼ'+I 23!f zye xK0SNn>'.g$H@0m/ CJݐ T3F2bX7dtNt^:ətkM$.g$|ڞa(MC0,OYi{C!`Ϫ@60m/dR!`!2 C0 C q2) C <ٱ7>~ljE5 C;̌{C C aySØ$m67|ztovf9pFA:mκvlnr&.@SpD 4:ѳm8 8Ə@+IJŪ?-ni?qA&nֈ;@,}gzQJr&.@Rۍ[MP&)mT'qB-`7wH***ng0ui (/@SMW%V`|[4@`Թֱ]$\e nșSSS? C0Sl ovZq!(CsU0]g?uUt^sDfD*ELaCCwzlNU,u ҏgf5fTl@z0m/=c$cgIyʹp5Oҁlr\3JIx9Hs%8|iimp7BWݐU69Yz7rfɉ腳#NNNUtGU+LDV*{wK-^[^jr&6ifad!`D3"i\b6D!AUp[0Y.8#ggooϓdn`IW﯋_WXJT W|RMp:0?b#rBGW +i^ .4])N0J$ŇӁڰ2)ȒvS76^?7K8)\ֈ;@,}gzQJr&.@RۍE8qwF[籝9ƶ7o-W%FXM޻F WTxxg̴pmijr /op-f>8G+?x}vT__oDҿ.dTvauEJ(_#J<_`*^ }їUG$/ܞ̇Swx̨ޞypd\LTw"S̽5_=ɒ7 nBn}E[btA<նv2;U%Z j'Pkye |sƧSTZU44?d ^S|W(0LsV_CAmϭ~ј=אGHcxH3bU$C&QNO\Z:|8ss/"g05 C0mZ1SIG93S&JچU0k'˔pGosQ#o{_)Yn@tTVtw @ DFlDUװ}Yw&B& P HڬM_); Ox=.fp-_YR0i{y٦+F2b?(U,+pu97!|U%7ʈyHNRkl"J+ZHEC xAED˨B|ƃG,zRGg%tj,H~w19*q_FiT,TćmF "ıwċ4,%dDamz!`!Plj`?Z0Dp`yu ӞNsAvp_B qhÔ[Ԃ^%(߻+ u +Z*-kTc;[;Zrs>TKc 4JoLeYzMT^o) Lz$%0 =`&HbqRI冀!`]@MILJRKt2dnKB}9PXѫ:hM:2o KHR65F,k}r&.@TH'̶պ~;%VV %^;k]3 C0 `ڞMPp{ U'i"ң˸e*I hM ٯζ{Mp|4r$k#A*sp-:4 hZ qNҶ<V"4 H[&:Kܹ+$@-6$i>Œ\kt,¤6/cBm珖k9[So7mP{\7ProƐKaU1$[#3Ed CO~}fY~c-R~EvH:"?_nZy(@4tb]T"8O:3C|&iv8 *7?lػ_ bCBvz4^k4@N֍KGVCD.1k̛tv4k eo@(Ij'@*6&7Ed$)au\(K<"_ݾwކ.%C=M]O O ߣtTfmtj)BL\lU$ m/: aD =:)0X$V+HfǪd?Cjb i)".f8IH5} xjEV1jE] k\]v;dSjnv8$]7ީ쑼ژQ`szom~y做Z΋C 12 C4d#ARQ*8*hHWmi(Iֈ 7E:(CVg(ydk'S:dDS̠ Z敲ʬB fbp|]#ZC-݁Ҟ97[I@0m/Ce! mWꑶCsBD!Ae0[?%[e;ҡ$ힾS#k|8p ;jDÈM[aUzsBӰޕ~:b| 80m/T!`q!@1t;/l\G \!,V%(ֵᦈ OiYnSFE,SGv"3HtG{ 2J*C=VR$ٰrƲb҈k!5E3 C 䯆?Ncʈ$26 Di#M%& jNrU A1UU)"mApmVmKiIk[m$&0FB\]vQ$fq?tvw,kZEuoO;r,VnX9aȐjsGz2wV"qg!1Gο]漪!4$\$cbX7N'%/4MIq=-[ &Y:/UdE̥DfY_|3qE,H@0^Cc< C $c rJFUf &0m 0 4#@O3tLI9@kv@90 d@s,=0Z5i{ya!`!`t7u[ .C .̺kGu0 C0 :g0 C0 <#`^Gf!`i{6 C0 C3yto!GB4l>@w"`^w0 C0'73#,sȑ#}dfLC 6_ 'UH '$i>i2fKOK6f C0 L!`^˄:\oooD#G6ެ<\8IC;0#Aw0@=݂܇Yy[P~!`tuߘwkg}t+oC0 .E.@&!`hU7+G[\GE޻d#`Di{hL C0K^ zeP_ t)U≾ɳ⪔݂ LkJ[E;;7q#gx؁w&BYŠX;zBed@Hll6aPMk,s+\{.}{{G8՗JSU<16vf xU;~? `f==}Qqp&%g*!871m"3'(ݲ6ypd,9Pf#q pŋqt!r,jc/C4cb#P(/ ?UȻhy?b0&G#!r./i!kA=!`ޒ$6aC ~itݻ{up`tOXإdlA__"k0mG=>I!9gOmyym{2%(l,/}v/򦍡!423r20u2E =mJ"r(2U9|-{n1W>}\UH (T#,i6~ i{iP2D2ޡZH?!-4c+v ȧw Cv$d] i{< N 1ͳ0]gqIMH^I l]!&Fn|r;ma!L ]JWyY\mWwT8gv`>yz&ќ4"`+}W 6~W8lqvzW6 ?HzCP%vw׋H`Y<7lPeLpo|rcM|EI-a:Nh8$mn&.@xQ㣌7@ιIMm|l6+1ycdEIӣ{>--$v9 sjSꅤ 1i{YYKdɃ?X^הl J`dP0GXM[xϖP#>EC xAN69rJ(HNrra}$wr,-C .1N1r'dV@:.,jvgcag~hKxF8+Y1x,.^[9׿Zg2 hv{g T1>E5wỾW>9E \9MP~sNj'C7hHw% tVI1 /j|`07o3Nϲdh$*S9; pV=jXdZBpBo[zOx|8sMyqaRz\LKk\аW6461GU*:N/I& !`Q݆~/+_yٱ4}yXE%i(X-Vb^!jd,b9Bs\ONL^**;뭅c3c\&;RjQ@W5G ʜ6Xuhlie +'I ױ{!yC~$Y G2 %2v4xp:zפS% *Ү|t%ICKcUnyP J;mosks԰Siݎe&lYK;!'?1m8aA5>H@[87\M9V2"G ՍKµO]N[ۨe\`[ qe~L7?{Uz"茅ү~)pv9Fn]c%njۆ0 :Ǥ2%S0Ρ᷇)1ZbzJ!xhrE+XGW[۬ h𙚘"9Q9 pC _p8vqwPbalf—"dz'Ŵhbk YRAfwR[= idcb ^(#!^LjA|f"<- O AOR8n:1m/Aipcbˉ ^(#Vr 0VXiB 8:T| ˍ4 i{6r\r5֙HGoʸnY%CE:@ LYY5Oӎ͢5TOˣ?mo - q0 'OA}H$5 N"`^'&ų;߬􅫤]{&Wtțz=9XJ&!-+9ak^7C ׹7w;Wn]Z8ǭTovgq+wvQTiƓo?f\çGMuv&n}L>C 5׹x9>1VZl 9P*%ZէeK渥 3OJOPy=5LJq`(Og2k!YeITw2?)׵x}ޫ=|]Aof>]l}iӆ\8Ѭ,_WbpKd@%<5;T+\@WQuWmzE~^JU9+ˠYy$.gaBFôL S$BF2#$r&9Z}PP >|Eۻoe )\C\|IDN?mШFΌIԾGۤ9̑/zq:Ep"87qnRtI/Vf^$LJ! C+?;g?b/sd+PbHae%.@%l%7.iHB22C [p._^nyܓ@\Ňk6<±T*@<_n~iqÝn Qry2  ׮z;|0pp=Ngy)ܽ_)sQ:D2P <,RjOvTE% X;gDN]- Kc <Gykev"55~Otwmf>`4L(|`?5ui8g1m<$4w)Inؙ1hqia?׭1䝿p}bP4) i F)-Q@v%?GՈ3+M!לaQN6gwc{҆%eN([\+7f "0&'<o|5 /bPDk`N[hꨃxQpU셤4G:-?|>zɮ:__a7}V:\%WVtEB֤ȐW0}6H| ZN!U Jcq U BW>Ǐ0i HO]Vru!)C4 łSYUЅGog(e瞗?tHO& JiH@4(&!`otš*˩WNj!S1Q( m*8r@/*OcÃ{(mZWjVKurua )ˋi?\:YOrm߈],o-QfeM ]o\"0]5;sfqE]5lkXQ$ƭ}K\h ] \a0`=:ߟ'-Qk"%!GUtb`ջk}>6CHaB2Y$3;Pk<Rٴ8zaM\H܋n\}qEj! 튄2qrW EC Z|t\x?χ`PFYw`C[|{Bs){\eiIzHYh2!`@FC2ؙ!aQH܊] [jݍg(dcg~ .ݞ?7qE^Џ^{z:Fҭ9be |KUZˮ~)RnZ Bj\8{ Cbl$+[x"Bum¦M.>ä́HxP֌4 #CTz=7+'bDž6dA'vdJ>!dF׼[L mxSӖx-+rD$!G$ NN!M|c1 kLl#$l8B!S*ζWKENC3ɶM7idۃ^~{l{2aF~P>)%ZYŒ.<`p [%ֿF?&|{lkW!JcSM4LHEixW?[)(e2R&*۞kBF8 l,:sל-޳qLnUQc)4XD#5`Sd$+c׬iзֵ#_gW![/+2_uX74ܚU-ͺGً8!=Fs^)LHF֦Miw`AN?MIqXsЍQRVv=s\F_U~*ذUCScӹGҘ[$=e;hg$_bҶ@:VeiX"+js: -0qu'kCݫ퍝+pǏ_F+F)pOSogѴ[~:xg ӏ2軯a˪$&!Zyّ9m|wX3dȶ8JMOϊb <44֗0=5ܬ!"3EP+mSYE~DY YP.KiuZLm$V뤄nk]C%Ka\")I.\Wdkm-UmeTLliJ¦EH@^^qj,bI[ޞdO֚#B&rOgפ#7k<W La @|7ZCl Ad)"çpSX$D[Z $wS֑22Q7T Crp9?E3 /7X [nl;?_ %PY*''!YkEUwJ|^ 2>4BJ9}v]ؑ0YXLFVL&>taBGxxOOϑ7e$nHmA+ ɸjڄlQ?[xƱDũ. Ro2*E\̝JYRAZr bZ99y?q^=̶mG܇={F|iX=zuce0{^x:Cj,ląq&?..w B [IUJŻr4:ZpdsvJ}L۳fMz潶dv_,ib ^CtNPp!xVB* ';<|?apɕe_bܞV27'2sOԣGӣ,jbO)/IkfwB3l!45m>["@rT6xƛ[ZB9AN6%aϴ]Zt{[KpA06vYG]>snx(YvY *)q+Eq=R2s!&_m{gli8WGh@:eeڗ30֛_{n|jVnyOJOWSz^}Ǿ)b3@i3,EV/}TC;ՂֿZO}@´h4w&_qSVm/oo_xܹ=*S &=Cm]Sv%y,q^FS-N"k^'Nʱy=k pħS$j=GJGXp:(ν߯Ez?կ{ȏێ?mܾ1A@{+O'zF^6H _1)ϢmN.DpK-!xlGk/f[i) "nG4׍<]*[$3;Z U #;żb⸡6?:0XH`xA#&=?B"CÒljV*Tq_u=}=SW;Б^t>KAQ -b x^2Q OS6E,DEiu=-a^|e_:NU}VP9YRB墜ʿx{))}Z^yS-jUnrRsTPY*K*Vl U +\iڃ5ܤkmo@5/O;.z(m5Pd̓} ri8%&Ρ_GܡX~4mk7*OUBhN7{|L!T.=7v#JD%Q=NcZ[}7xoͲrykܨq%K*%YO7:̏6OGM᳙Bed!s-2F6-TIڿrLI-i{6 okU#w`O~>+[z[7!-p  hc.au.=[-*Y2eODzQ.OFGguq2/as̊b·|Pצ&J|{~bi), Oû<%%b%ZK4qDۻGԞѠd\E +)%+#վ/FxH *|뤜F]xKL -zp_x +wtQJC*Z%AzN?&_jj5a'0.בIlI~E 7-:DtZPr(_HA2Vi*,Hfv⦩Hn7tߏ@i(9hJ=/&%D6D"+a | &]8τ?ɻe„^wfd+ihcr KBXB U9"æ<@DUxrAzzܾtEZt+Tt}!1D)i]ǫn!bo*Uh-.nV?nREdn \7O]%cU:ӆ=UI4"Y?~a1=hNhl8ك$d\' '4ٝ[$6mHb{xR6%aS (A$ RzRB|&P>zW6 %+ړ^%+E V* VJD@_2^88szqI7(ڙ yd>:}+&Ė̮*ɠȆ\.'RE2S5]׵TWaN0^|:PJ`=>p8 ىo.*CVډXR*6>mD ׁ3l85E`ޡ#T%o/Qq kUᔱ(L8Bb(q:Xդb8ը7N*QZq EP:hCtg%5u]!s`A HuI@5&Ckm"c"p=~PTN[RPP8)(_@0r ^z:cO|Z+d_Ժ_l8[η )%O$ XCmG;;k;[j't=SOn*qq;Gi(K= anPn r n( Nol~ݱMiKaƿ5ֳg[ز9A=+5<`t愈 xI^! lxEQvzuyC*Fnʕ/7ݱd=o/nLjG=[o7h`kP wk }pc긋sx _E6:)ٞNCY/o]NK Fr4-:>4Ύu^NǑ` i{h^Éz صw| 3oUXdP enҫMODR8EH*k?zu#9ˆMCaȈ0)QS{HF/cbtNSG:ŢiU] `߹p-?lBPݤ(ѺzNsĎR8-7On}i!b` ]bЮPF߽v b;RLN(e88 %Q+rbӖScbr;SvY>^]1C.^xn My|'%*AvAsRYuUvg򽑫חb0@][E{;o @~$R-AXkb"Gq9%!1؆&lxW? MyVoec]]դաɡpGL3WŠD#;zwF;=[s-H17|Sa44р:tV]ny1ۍ7ڏ bťssAiRDPVz܆xqpȟ ]xoq~ZPEyK.MܥW_Hsk6 E )yYE '@bwRaoM5>qM1K-WP;#Oćm90z_gfA}Yv%|}RW.\Cwn_97mRPrr*:Tk//^Q9=f2d~٨[U0jO%^#V9 R᣾;iUܮQ14>Q!PeEkOkTmE˧`SʙnpvW$)fmogcH;]xS"2 ⑯48uꆦʅ 'zj wuݕT(7 C*R |SRJOFuɀ`4JJk#T^>%3 2K$ר#XpqW}[ uˣٱMv3%랈@CzG8rYƑ_W*n|n)12D R;OX_J3:>`w׋)=._^j{5~#gEݍ;,}vO<r[Ea1w+dg H{i"[3CsdS2SK2sP(W=I 7Vf;;n:x/w<*V>獏{6/H5%10r~Df(2A'9r"]D`цZ2N''K.q2tT$4>YDF歛ArƢ &Vmh,^; bokGTIi6RNh*<Ox䂒__a#"횶סaŘZhVqrb37gxoeXܵ\d\p]@Je:id4Dw&Cڔ/"ggdBk+Զm'ec#YNp*$FZvy"PN|]b5+ Ͽų2촻>// R4wi?vph` ±w'ώ4 i PiӔC^"70ߨh*Icx.ޘrѣ]Vyo<Uqz-PIn iY ưǻX%D;<Ϧ&ֿ"3E~Tc-$Q0VMkĆ@ Vsᚿa{ 4E[Cp:n49ֶʹ?6SHBfߺ팵oq␧#T.>^V~b%V!!l7diu*; $7{e@F8s ȟ"uFk!( 17|§i^i**.BuPj 6D8t!zȴk퇡4uΥAvݠ܍,*ৢﶣִ!nOOnG0ϙ<Li=A|q|Ń].([z)_ST-AOj궡i-Zh%7U .2l/V^h0玼)Ul8-ւy'6 BOA*~܏` ~+~<չO[bN-ǶjohZsj˯?B43 & (d\C& gfNOژTC}uvVh#K`4׮Ԅd+Bk @'{f+U=ir<_z"gI4kH2=VyB;47F|ds `+T%RtwsdKJ5+˟N#Uyb=aS{O VZ#,0㚟", ?n5VO>ƂCG,n{KzW,W`nրjy͗~+Nbg>y?O9$= pl{.˻/u^}0W+ַ^rM&Spyryし{_b驷7Jɼ p`l{_ɓ* |X+2XLi$h eF;b^F.bCũZHv~l_@dƕhZU3O_XϏ|gX-A+7$1oH#*׎(g?B<md/d| 0*J VĄXG1l0 &Cu [IO ~BPB~pۧ_) 91k{OQ7?)^x"LzE`.d,ŕ9/{ѫK7\d718JSYs{)ClҙA1Ryo33Z^n-p(ܥbU!N>G҂*v3猎Yәl2E_ ՐU.V&(̦ CX4F"AH`4&@l|q|`ӉoC_g5V\w2 ]3uA#Vl:^*$xO}OK{HGջi{꠿wͲ/)8I[YWwuC*:, <%@IT51NWI A]0U "yhSҗP)؎:ش0;uȆlD] 6Ca֞H%\}O< S[} |z4%Ǜuy 5_G00Z1LqgkYA12R&gkīi$c[NA-ٙC*aK8*Wv9m"`mh3@m{G0uj r. ,jۦk\QFC#Y%xp`=ά\c* Ę[߻8to/#"Y#xa<.aɠ,Kj-;/'}V: ί?go_l:0 V c5{s>P;0gx &Fg6ҫ1)̟˚8>1ԛN`.gN\ύ~僨Lb.zǙ~ s'F͓ų~$9=ލPOsX_Z*U.MMNm<`[ϟ=i@7ILWshtwj,W- 5վt_7Vm/QQ!h| 1}oj骔7xwpWz(q<+u*7r3G>.1*!(J6ĭj,WZ+aA]yh~ō4JpO00* @hWmWíc{92 $,S^=zzd+hQpCΉī<4 14`Mtؘ C]H-֙58pXoAW)25\IQ;:̍lߟ.*#B +TW];S<(=^M傥xR/*~֢dj,Y\ ?^P/_2)?{w`Um0,r+W1Fq^+~fӿ04U t[<;prI r;TMbYqyB:4r taF>TR(iܞd4~[_^fu9YP[%An,65$COoc|;o'JEܺy޿U[g2;s(s䄿z*w"x-Szg>m~nqr =J&;*j =H^'qMQ5b[[z!**\^\q"x| BB @+j[|wUс ǖk="H!h)7IYb$dSrq"4PWSo-}jC>UE >d[nqM UׯyDŽT3k k$mnQ뭟"vۻݵ?-FfXUa%-1 CYԯُf9) e~CѕZ✿<ϧ:HҊ4ܝP[%Qp;7'd@xBwp([Үy@-&Jr$i#mO9spvɨ[7D(H8<}d__yيώ3 7Y+w=?,.^?6ːU=ɉɅk +wWx<aÇek..C  \:]qOKÁ؎taRŊzX!8xpK[UPP`"ɘG ЬͶ>cbD!O}cRp9u˭(y>xox` f3BV包OYWXg u|G-B': O+ŵUAW[ma@ۯ7[-ϥe1\+<{n%oWJ(箷βEUKuR[]Gܑ\  tWoD"JߡeMϴk c>t]!'o*>]U$ζE(0ٕ溏2 h~|UJQWGs46h ?W~?u1RVj{KX% L$ovN{mb-ee4[5g6(_kO~`QEWpڰJgؑ]"![v(u/!_ɠQ@sp鲢 q.>ɵ)>$6!uzTɁ~hp!@*s(;wz; C&J /LOsiל\|mXˣh$?;% 1ȃ%5+*B& $'XӒ0@JxC=CI.pẮA2G ;o C mKi{8BZ8O>MqTMҵܟ΂. Xv(t_|E_JS_ϖk'vҪN'JU އ球?y+5U$B{l@W%:fFsC&$@pU7*$$锨[§t,)HZЖ.2 u-m8&_'$A Gv qj7|磵iӕOXtڦD.G:VmϢ4^kJMy vGGZx v-5fs}2`;7?[%) ;ղC[+MDhJ9u)!)'EVHSJbPG'ϸžF\-@pd,zRye3WV/U.JgՋ3C!J裛#(s mo^ZZT'us%j;W lVtd-Fee*jč~1RJ;>1 ?l%Jom塱~TA)ab:7@ rd/포q&ؑޮA=^*ʙܺn9˖3dʼnE1]MP]KYf3??, \n[$E}lUz[˶'k3|迨C&k"j"Z @]iwi0h 3ML_-cE]4ԅ\WNewAưX;W>.j[ؽjS ?ӣTlfjrLP\I2,}I*' - o Ch{;p"kZjDb$3%IDXRd)e3L7?&kEr*Ћ!*@`TcTäVJ‡iYaOOMR1&.<~5IfHuNղ ^*{w'!2["͝`"Œ)XmnS6ּZelc̥ jU0!`@ ߘQ@k$m87+_=mIk>&]QṗbY)UT{V-\1Ȑy鶷8ܥiZ VQ_UΞg5PАD )O^SooozAde5!umHxp-v)PZ{LV}>=ZE̐i&C&Ȭ$ِ?fT' )jɲmn Y)LcAEw-~d`L̡U6%V5J*6ZXLlA>A eC'7^_n{@*ZELҮҚ|!M{< ޚ/xL״m!825 3ajs9e !eewB* xܪQRPo <7n_Qtר46!dHՊ'^ɽU+v@-*%YWOeᝦme #TَoȬD+>nMuE;[;\'L`5r#CW+I" O CPsb[ e_/'h O~2+tXoHW N6LN(>αj{X5O—gbwD}i7VLh*곩FlyU`)KNGQY]j 34YB"ٳ_ͮx$E+esY ꧚G&t&Bv AxOǠi:H9` OCi7j@' 7;f<60# 4ہc)*+ʹ!a{JQ^,m$-Rn{_5.YYv2T]D@ʼ^ [-Oo7Z$ɶgmoxțs]bMvY!p(g3o9|#'Zr=W~0rk{;תʙ7ue;(QXb E~n~B\yæ77lE>]Ʀ5bCա ϸykx0KZY{-;TOU$&)gͻ)86QHå\[wݯ!=8o"d he^OqsdHT}&"/<m-L㎼qdu'>Y*Hlk ׬t7-dr a?Y.w% dt^T6Z܂ˆWWXPדz)ynN x*auer]ECPJ%[kjrv O~;0c[6ʚHL =;%$Mǚo/3iW( xI^>iuo]ٟ^VW:T)Ii$UTii"(}ʅQN D[Rєh{{1wT2 Cd%(t2?DU/'8H N"xNJ%w-OΈgtL a<yj1Vm/+\/txfqb5"S2FSUQqñm\s_x xO2 j^wcgqsY-7j N6cax MΉ!'D1K0T9Uon[϶pq;L]_ANBU26US0H9@6G?C KxZyo,kdͪW'_g}ʮPhxkS n5Cлr n˨be9/|9QQ*1(A#?<Y9ςɁ5zωO<.2" }h_**%&#X!P lnA3a` s䧃~2c#lS H:,κDZ|畐)/=~ d +Le' /\?"Ld1aT(=JK05 CudkD!Jp>*704P\5Ye55e]X|c{'\K8@z6)!jg[)'t&İ_f*G88MVxߏ">5ς8UsE|le7l١kďѧG4]dٱٰ,!b)hC]EpԹ۬jr!M6TnyåZZ7O-6l%7ǃk]3 C0^" s^f33NG74!Zbե|Txtn$Ȭ3Nywy$?DZ_2Ю4SEU͸c^.:e!`W^T?51aR䚞͏xA~SQb;DE ]u$ 2ftѵX3 ,ҘQ3G9bVy*d=EuU8i^}Uj?@#?G<p-fh5#0E`"؇Z?E[̥,e|~y(+KAfZ/FiEAQѨ)'bkDh߀ly[J,Ui{]5٬" +kGB;ewz DjޛcڽIeWG ) ɟ JD fY8Sgi /Y (]z @; t"j&nphH2k"-ߣ]Rfҝ |~U pmf(x`ޮ#J:9KîQ$DZl~"A&{;OQ^)>zs[* AijtUe ^TL^&M<)+Ms~6N-,HT/Zx5[?\d_`?ppdaxn\ب(gT &֍U uJ0|110v)bH_ ~ӱN-Oci3J4@R)w%|E.%NWA9eB(: $M+[tmԑ:qT}Ǒq%%.G;KEL&. ;p'p!49)\vMM얧MSquJpCV44E܈YwݏU۳V VHZ!+˝4ohM*/=dU&<.#Z`cY~sd^j{TT*{CP쩬 #Xe;X'GV|W  bxK<gq id%m?XE.AO-L5&x~Muҗ_Y%#ӐyS AT/ 䒌'8lKNodM aVgG U&;+*9>\D%W'gCg8UL^x[==! #fęBٵlzv—*qN4"[[4=upku jkt@ d b@{s;'APq*VCaʋOΐ?𵏡q0v9D[^btJne?G~:'apY?E!)CYX7lij=h^SP)>O]Sv`HPuL XJFl2~K"6'/)Ī"G_y'(|.#`^[ @@ 2(\6p} ̑UfX`) M~<xQ:U&;@:8xKyȘBÁj]pݩA~{.cKez U/|*iPp( CrS_#th.AӣUS)EYJahe0Cfٞ'Yx  ]@֧1/Ό] ,!=TN!MN"ڛ;irN9'.Pݡ s)iB G@JZ;kkm}ڤ7 fG}<9q,n^G6~< P{v.}dp4aԧs! 2!*qLm: D\j2_]"4aGW&v9P׉5uB "q 4jL :d}7c 3 :hzTCf,4fk |&9/%$\H&zeN ̩\5M?g :1UdfSN1NϠO.ca%7^ ,!U6@Zӎ͙Xm{Zi&wC BlGf L8&}g>$G_*s=隧TB/e>=cPjq.92%BWqآERwIuԺ((qVȜE PɍriN 8BsWd%maǦVڞEitƄj!S?[ gkE!B?Nk5V" eZrWrd.s'%Joes-B2Q\ W} GYO 缒Qx]+sdL!ȸFl(O LKx@P!fwWAs*W[As"KUOU[v$5 x:!("Nx0nsT+\"oee ('%6U*T4ۭ"o}N] $%EUOȌ̢9 !P7pZb@$^x+W~?wu~U2WַN0E.M%UNw)w~0_ Cݪ{~M'drb?US4c$pM{}SgJQ8nGG6a/I*}b:_C#0RܐErJ$ DP86 @*@[b\hjL1n<*lX rs6 =:tY1j/v!-a^@&u)/ h9;s]I\?*Cd*8N|r CVlO8(2Oyss(9QxOwhdW~=]E*O &4//|1A~Gr _ՙBRPkFD@,~DG/gdMۋv^Ūef%W`[ͭ:`1-8-fVnM st'A5_^,Ƨ/,j ?B RD?3[(@+a(h24bUucV`Y)s ٹ$os|軃`"gpP+ lEZdA'm<$jx "8lm7T'A;ҏ@ƴj"7%L}F{lV+ -ǻ85@(ЩK7T]ӥ-K.sp_"ֿNZ4'n@|֩ N/hУq_aSk54+{*UQ -=dO3^zfI6*ͪ:Jst V(^xrPIJ ŷkY|~r*FEn?󴖦Bja8c!^5J*s\ɗnB=aP)hc=E± W<8noq<@dOSb<TUdUG$7Df/8׵dgpu&{hwp?pY+ZԭCN ߜ0Ά@nX>V͝<̰L W]f\#9\=rq-xP麥)!T%"Q<հZ5_z@<}-#_KQPH\%z:Ddf0p"`36cIMɜo)P*/SU&o\e=mz2p*҃+z]:kbZw ),vȧ2_[)"Q~u2k~фd"6om9a]2 t `vtCdR6HV^K]4C}?]2nz3fi.nù<i&&$h0J -A0R6uRkEe8dXnZ& "5#2+ML31 C Ηa*Ǟm|bD b;Pʪa^w\_ X{?bcH $gK/X E#?/.L ym/L5JC s{QN|SwPWoMԢ.z h`M dmsũz4v!`:_&2pJ ,654Ń0}sQ z(|TMQzwRA3^w.5/Uw#mvh୍e]./@U5%Xv䟃-/,RFܮU t>C&+k. lSr]Y=Ҧ[<;[^zv 2ʱa佤} ?x)Gf.i7O4yS4)/!8eHj 3k)Mah \N?o@{<> A؂"`GI0h ~!v]̝rUTQvdeE?\rY$*:Qo-V ʼ[+[ޖ}SCtM+^J^&d//=x!PJ.پl$Mk>L (箷@wԁrؼPۺŤ,O1J-h fhyVRDxƩ+}Z1q2sg>UT~ʊDuQXge}[p:iTnD{(DS(‹GnJ2E!-(N9I$@yWw͎K[6q˂vFO =l?h5g y/LF}KY.1h Ohl帳6Ea{*`7lQWгbˆiBna-㏯["xPX6åFd.=-/{)><.pY-ƿ ?4Ov4&oHKCXEԬ;r6z`|,-9; T> aD9YUMkb4h]̉o^P؈Vr3^䝿0_6w"k:W?Y:4buG!C߶Z&c[N08H.+e=g>~^@dz9ٖtl_8]AXa˵i a Çbʹ2iD 4Y*Q]wrng#ΞW)Oz!CN9at,{ /ƪ>{qtg)ԨPKt0`O7m{ -ob{yS$U&J<X emLznQ|MqyDϰ2J*bC7⟿puER5/hy!S7MG@ocMsc>PLvJbVa;a)\`i8W(ɒ«o̒߻=-˺,^2dE)STO^L}ޚgͲB@Ea?{- `:_ =ٱ7>n; C2+JVUsg{eKVًrd݂I @'wV¦pN#"GR^J)K Yn'Mps) ʴ:4fn~~#?sW <%BuW 6v I %/^+{y h:ڥW iCC M>D/^;x1T%d=== b9 3۩,<2asLw7E|㟬kʬ O(zd+'JD 47\he>=!B<%q 7ׄR"rxA2Z]6 \"ẽZ:ٳg,T?{0B0t큗hF`@ueQg>gɚmHh-m9+opx$~r X>ʇˡXC9qĐUR[Z>Yê[eX>}MA&zC4趞g@!`:_#><-P6m |cgWW:" v*ɝ۫+dZ{OكM)|ʻlP(1ҥy%'[6^D;j_{D U ))|)s&!`@xa{[Jp#P#cЅCJs"l+7: oeףr*bCs˾t{_('P4DMQ.smKGպG|˘ze/^aEw$ ~*1q^dOiN 49rQB(0'Kف;uNهzl<,o!$lrzְQttH;[SBC0t˸bZ&j$1'rݙ'Q śYwm;B_-uD5+$?zz""^ՌeJvZq `:QNO\Zgp^9v.uuL 60œ Bsu[5% 0[U˾}H/h Ђ5_v},~[{_^+.zHV]hP.L BlH8JR37Am)D @ нett_}NqBh|]I`E9t1tR8;ULFF%pZk?*)`9Eq{0bkMvkqaƮS½7ˆh*j+11z&醘ܣt5Jk>`c#*oċ@p3\RU%5;H)p x?O-%*cqsמN_ƷvT#ƆlV_pLh O6_oF,9oh`J&ŸlFV\UCTIi,֬~)ʿŅXa<\uxG:R-OH(3O;@W秄M>/%kӹ)-V~;lh;V9U;g(U7aҀ@˓PyA) M 0a㯪xzU˔cȃQÔJF55o%.wM__w%Lꠌ|Jȸ-g)r*Ȃȵ~UJhAM mY! cga9[~PaFc|{h % p|~3$V"-"T;@k,a#οI\Qp'ulu\no>C]A]p C dSőqH+%$!IO%IigLjBv?꒽љIc!pQ-lz*~6зʊԀ? S*|8ZyD XE_P_:lEÂ2;~Q S"ҫF(2 C tgnř)[LʡY Iá*/l 4(ya+.{/̳JdE2ղw!BcD.bkw.z ݍٶ؛RHw /\/Sn]@wi{ )|]>3/o48`􅺃c#=VYm- 5Z(mIz{r(,4<Ŋv_͒^Q._TIآҝZ$y)gL%4[SJp 0Gp%!?¥Л؆@`83F+s^V&*I:2%g@/La<sFc.9 u's~ ]Q8mv&$ogJxNL*!Eq\|U2SSCTՕ $jȉ-J#b{jr[l7d&sd[-9!Fpx mԦymhs^*&JWWdmw!zbyGFyrN$aV.*v_spVA#wS<+;ƁlVȕӬ0lQVhr :eRPNA dtt$ǖORc|*^^J|ruG#N޹v%(TB-r+Elv*|.^qA *SA 7"^i) Ċ>tNulͶ׬k!%ʤ` Yx@#!Ph6G,IBAMeM1DdeV+Vj>ZRr:2'+QgѳSqKgwݝ'?Og晵b!0GQш~׬<$ZWJKҰ_Y]Bb{̵߭)YNybeZIݪ)9oZ@— ˾}zLMu5sJaZˆ2;ת(9u:'T>`Fct5%T,^,kVB@$ XaSḾa=JYVv%JjMzp9r`ئz4rfしnu,Y!{UTKv4tٹ䢡Ǧg~g+o #6Gˆ4ZGJ;B^L^ (-ݞ?aA9qcݖ$ 5Bzvl{ޛs6'FP4˱0T⛄S ӜN>N|.o;ZJr+#_|A P٩̖)-0^?dQ|UB}LREѵ\]Dƅb4*-T\?4؃kgU»v!$QOS8%ˆ´ h@S=âGg'.!W v*֘"s0Nu!'5V L;.̇)Jux^VN]ʖF)%*.#)JU Us9 %ĭNQs#s%IB)yNU \JJ-4P15Z6IN eW)FEǣD9;c際B5;+2XFN,I H^H7X|_+%8b91VX/x UY)dc1_ ZG$( 8)X\V>Cy 1p yI rKÕ6Tz|Ʌ .8JA_~gh,.$gY;VaTʒ:|ڒ$M w8LKfpYtQoo/;L^ 6s͛IiO{nU@]T;7 )EwNS䂯 SQUN_RBK {pQH@I"_rq2!Н(&'BǖGb0RNNYgU \.a۫_~rwQ.G5ַxLf荞v oȳWb@xdƪt |T7C0^ d砛޲NB_XMܒ5< < NBbљ8Y$˪01bMd=pJj%AY*Bݹ1:%U rb1mp %9^4^OYݚ Y)o\m@a$ G" x|=1SrVvW!/3ݍao/2T̩IqVofX~#rV9>2(Iq1c.Jn1 Ch49Ԍ:3G10EAW~JNVҲ8o&n<\*=-7V^Lϔ2n,_C%0m&fދv7Chn"Pw\.[^}eklCؙyh_XP270`  `?!cG6 Y#d.RRk&\дJkr:|P0U,|c;\"9Xewskw0QHrUq~=d c(rꥁ+%'%Š3ٗ$ Akq淶mpԊpzj4A7 xͯכeKr9!;~@`Kj Ձl5\'BqMQBCi; Rrq0W+dĤ:oY`+|J*N.Z={k ? Ɩ|{s| `OH/i- `^(̼ :Ot,v͔6eFLbxщlJwG %&`lg¢g _Xh7hqv{B̺g@,bFo"P|89Dama_xN108--KD3D&m@5^sd$jt.| ìѦ!`TE24=1R޴VH%X(a0u>1 aN!u9(2̶ʀ[RVP:@mLY 9;jY6̖1 Gz4m9 -m !`T! ~M `>y8Jn.:e@'ߒE2rt`[!G^c8'C 2Lۋ Jcd@gg _gV ,"`~{-Zn&۷jp0$`;DXLkq@s#-dƫfrӑ'!t@&bl%j-!2eyLvC0*0&!oB㺮/CT=@ 6܇IX+R C+mǺ^@܇bj<.Q HA@z(p 3_y̿3g3g̙^^kmC I{% C7L!`^{YjC0D>/Ř2zI{Jmko]rWe!`0܄KApQN !u{͗lDMEU?TUꏰAZK3^7V޿MqgMhmZyqYm?9||*{]&7 q$P?_}k}Vg̛Kե65w4LJOK`iw'ޣ Ev&a/]^<7qZDcX}7rb)Gʟ?曟h${~B7Bf%n=).'^GrL;$KVH꧛s0=g/ݶPn1dr?9Z( "-_)3L9#i&AͲ"T[;{n|jK\E;ՙ4S/ xT=ޙi VQio]>^JλDVd;SLF!!x`wo0|xȒQ׸/}D*OA?"H=ߔeͷA7IVtSy)W'^&d ,Q?-nygk{U3{ȓpuArK()Bd*.+4M9o6\_ǰPzێGF*b{Y]j R9x;DqT7 5YsG!mZD }Ê0aIO!X|OwAMU#94I~Jd PߚHD͇& a%o*LK- Qoแ CfŬx%]iѫ53ON" 3:_SyX8CDdt{T4yȇ@,_sZ@fu_}0jfĶ؈$>Aii%ȶ,[WtT3/[# h|.+~ [*ШYy:* ˕iII^>l]v" _r8=V'0-~ɭ7XX!o._>>`득O?B*6%e6$3SڇLغ]Q=fNn@q[3~f,OFNҒ.yf^ zE2?=dŋ36>AO9Eӱ}"O0+zDqwzEeQ\^y]f]z=iddэ_:v/2g~a\S'gJ] %h:V. O>~I;` rk0 ~Ql=XĦ~=̖.ޘf1̚ΙD@hF)|m6ku(%92&!2K#qO*5gż[<̋UL_>XS2!ׇ#ya%bV;d&ug+% ?;Pi5,&l271 ]J!bb=bG=f& T*Nj,Fd^疤0 8iS=7 &ݕ-37<N΂\mHf挘Nqd)fiq^, wύ߽yr_/+%_@K:'U=7i;{W!Q,B>Ct 1:8Rdmk >z!ؘ"^iRΟ cQ2%g.r{cX@wH ozcO=_bOA[ӠHK3 fJE'-z{X!;Y$+ޯD& mdي׶:-V=|`lD*}7Jb-a^z';hJ/b}8Ȭ.yV.I7'IZ6y'(ME`+ߎ8Y뛊sK&[̚: Z['P.ʏ,\@Oƽ6d@r rɩWJ<=O]ωAYAAdlQO\Wnq.\"' 1_~# K|25(/Xjr&Cxa5h;JX^ǒME ĪC~MMEN4Sa̜O'91 hR l x$.0/T1Ƭt%\4(φ:xMrtiz G㜦 sHx{*Njݔ$xY ىCä]9v2Äk77yc )cycM>WI+Mo60{pj-'O%5rh[ޯvzX_87[@Zx:/f6TgP ?t*PPL LC~bx!obiE.H3ĉA\a}*[&0i/>VFi@ aOy[#aVɽ'= Or؈o鼯D\ vL듆j!&Mg(J{-ʑþJ ?nKA9LIC[5 Ch@>.B TJb%*=B6nVv=3ppུD [A.1 RxtnEN6T>]}+>Fĕ_ ~ _}dhTyUGV„GOĐ<K 9.5%fØ`;¨F(Ka+ܮR+$R;E/#o De1HkwVU) 9}x&C/NGZC˾"w4spCTLq#q (>̟![^Az.kkfa$sV&_;Ż0!eCrQ-m&fN_Pj+.IDATA=+ sӀ,R; ?dzI{]:?Dn0>FcDG-i.঒|\ ~,R*& 0~[L%R( D͂܅sjcH`Ȼ:I "z6)sM1 izr #ys=c#ٴ(Vkg"k?s$??9lUN6NL\|FiJP]s[b~3[:'F swqidC8C[yxU_˖*8Pa2I{pT-#bQ5{ˉ+ vG?8! ؉!f(oU]'x\_99)oFCO#fSmZ"1f,_#0)zHdA$EM7_hbTX3u@YȓH L"A/X{P[1Nv>vLWǐ_劋ql{_7mTLKsMDz^K}\I)cg;nih_1} R]Cl]0>'g+b%#2Iɬf6݁`g;Û u ^"z"g51@7wou.Z7`3|%05aS PALA #I/&{Fg`KS V ()h۔H4t'|V(\{JΖFϙC l6\<3a`).T#;q+ẔHַp ŪLQLiy*zW8y0)%9 .N$UnMb#R;v: g0L}e5$, 07YĹk)w%QAJWA, b*W\a#_yi6Iz3Q8LD%1Gk5y! G"-br-YTG蛊t%o3뛊UdFUqn#u擶! [O>jTۤ]&jHd&i]s0=g-(A}a7vy 乫Ҟvq@C0 !mZ5Fsa^ C0iZŻo(󺉉I{D2 CQۈToa}n/!}Pߠ;a &Y6@>@7l@ںCPM.ճ[94248ˤdՓK9dhĆqyLK5ɨf)?mdY!1rhTg;8_ե3geq6:MƒJ>[A5l 6UĹ?TwƮ!no{@3)IvU#[$YgԌ/YYOӬ+?g `Ykބ8!J!Y*hb^CFcTdIUCU@aU 6f'-n^䜱IH%XMst_>Uq*0]b;[ZC ΐb#`^aO˟=1*X1 zD0Q)9` ж}PY>!&{&}O++C[`nξ5yYDU %&XM`2}in0^bH8]¤󥽽OϹ/|hs 7쌜@epqoCXAZ f29Ϧ"5g.j#U:#1O-h*.ѧ/+d̚~'J7r.[HE`^5|䪉`A?]O|$|Ͻ3ڇK N*I0xg=Hg %rVrf^s(ystzgh)C s PG;#&7Nq`Fc 'P6.9Nhw7tCVSlC =++o?=:|b.z[gύ]ظ ʉŋ3 ;3?^dC8b4\_dBYx'Зpzj224 CȣWٷ&_[iHM"><}sr'cu[wOO>6)6gTbO2C~o6*4O.EHA^c#1"Tq=hOˬb!):Iᣱi:#k221i@oȝ t43o.$ˡW+=14*G:`>y.x] ;}nPY?*"\AlV7y-%4bCU}qPOY28LJjz>m|9*:v,_W= .L,c4!`I{,v+:" vU`*əK/={nmB[zc '('#salg&Ⱥ@]qq=#KCypaͳkQz(6y޿8pgx*9z>l!Yd+.C0 N} nos !a'62<=^0>C3R0ܸ8]Z!˅N"+tl쎽+b1a!p'(cSEm9!②{W0`Z^ZY>@ϝ^h^N"6bi !l=hf>w'xKXj .#3A<6njsV!_`{~|KuWL@X_ZֈGy"`$BÊ01R#"#wT@G6^fG`N)GܓC`ė+k9=FsҨW9JcI! ^YV@u{0zAOFИ{c;2D̍2> &7^~,' .{P.**S#;aP(@ٴng2Ά -+SУ3ؿFXOl ^\бS귊6A,FZUtr_.U tAhRlĬS1@sHdG: 0V|GYE+*?,2.*5!Ȏyߑ|0 :>!MrtNn7aMP&͒OgL) (ateyoo&bٯE;mh$i!T[5b,P-Op&WVˢ#$79wӳjzG\9s+ \Ti>z9-l{n9{-mAN+ ˗Rq03ܚ$^,6vXɯrG/Od)rP'iEύ nv{m^tc0sxY,ץqȸ n .HRe 82O6͈OE<ﴞg Fa|K#>VFi!`@0i/{mf!`!ce!`,$H C&eIC0}]b0d](HFl'73Me! B0l|I{ݾV;C0RF.tc/\egi#`^ڈZ~!`5o)ZSsχ{9gur@&0i/fL!+^{^]*l,]ʇٷfopWY!Po9`LsZA:۴mrcwuW0 C0 ?0iϏv0. C0 C &uW0 C0 ?0iϏv0. C0 C \[́[{sz~ VQc'#L,L^41 wZki5 C]l']-!`!`># i/[ >0 C0GlI0 C}.eEԛ~8phGәaư!`!`ҐyTy6~X.kiӧ5ǍOOM?ooC<Sֱ*!F _]xsueE'/ccKnz7oҞ `Oy̛'gl@NSD:~2UKϗ k3ZiG T Pe7 ChlK{+[փKVzĘ$wUuug`k@'\ԫȉ?w^z L,7? ,OC0z@=v6 g'7oV{寕EoV!tAs?czO '&ijՠ36 CȪ'ehPaWvRaa<Ɯ,iYo?<ew.KA$jЙLdbƷ!`Y#Uߨ[>@n6od$1FbttV,kteY^+ _Xjil~8μ9ӴjW}udF`@7ȘnO3u}nNYl'bÛ|jjx3zokL,m@+L=7횿0Vߨ[Ҏ#-7o!`"=2V 胰Y:$9 뚋6W4NnTS@,k20LVsz9sb\%on8MijuPbQhXzj޻e լB'GhRd`qtj|MD@5tOWS=OŢlE)V.Xr9P~jA r<4yοWr\DNt0 kaZB _LZK*J_YI3ɶC oG5#-߼*;sʍΆ޿Fn2%?x3=;T:]tW^o*V#2Jѓ_ch<\'g41gΊL*;xrS z?\?^xtLIbRK „`3ӔD4=4$!!ƈdLL7ϕyAviS!` Gg.>ʛGAC=*h GeviPG duii3Os-WK<ȱ[T++R8Q.ut P{0Go%:N%u_$2 9Y_,zrP[PMR::qWbU?Ɂҍx+E27JK\ žy1C3 PsAp=Sn@Q8a"RߦR4L\#B^ 7t#Eh!JL3 FRIZ@qs*ŕlPP9nV!` :8=T*kb^s?auzW`EnҡꭖY+;-KdZD\zֲ{dt)sA֫7W0=@ҜܴE4@4ZeoKBz?:02OUM/A-fz ,xHnzaHz;y(ݿ G<324m|r}%ȰrxLj:xLF]DRռb %%WNm~IԎ$z)Tx (9CO#+WSOXثdix S;*nRbD.2dI jP;8AU?␒/\\㄄F'NhJ.@!`舴ƛ> +W1j9_ۯMr\:Kw C|`4]2߹}g;CI\EAp ),cL;,IlYw$VQGNP exh%I@-j70{эHἽh27x3}lK9Z΁8,PB-]^RʇnFӲ-.]k0FĴӧx]E)(ĉSGQA Cߛ:7%V}򟥎n^iڰ"|g8gU\\t ZgHj2FJM`Rk:J0 (j;F[}(̪i bkM! K0gG<=?X;(.WK0ۂ%9mDԔJp5x1 FchK__^BsӠ [- W_eBīN]GPNoqZ6@'wtD䶝OwJ{HNv"zu,Jϗ&>X }VX>Ój2၀V#5k>8 f")W-/T_rWZ{3cP$v!:d$e1?W{ٜ5n_yx@?ntU++BrûS8ѻs&zs=4~12#Y(:P轢˽iMo^?[FE چ=E,+!]jp>JѾ#ˍ7Ћ3NmzWwQ҃}JlȲaI 2$վ{\HM3.dRra$ uTrepƲyIʐ 4@IXD 2(]4M@&.9Bvu_!`@ 6ve̤&dh/)@+[N9X1 Fj }Ź&_8Cc J]#hZpCAI&]xJ7sw>|KiVTDuw,A E^omg.ze(rE?A _ O腤Ug.Fӡ$GD~4-8~rTqL 4M=z$F墚CM^尻L CZ\4n*!Dury Y9D=2O$Dh$dDJP?89&x{`@D Ҟ *4 XpH+O$1| Eq<2wnef;G L|RJVkg!v[#mDxY.F6Ls2lrO i Rvبu[{ $YDN aHFrlJ*jOVaj'u9!`E$ˬNc*|1XaŅ2ծ lIS 4Uql2g2L2TAc0r^W\40v1JrغB8ϐA:sAF獛dcX C轴C\=yAzs -kd>ϻg)"ciO>_9 CM>~ߊSǏ!M?zq%1 L cif# qnZL(,G,\`OtpS:s} ?uύBrFD +,z%rR 1ڰQt$EDSβtG!q,*A:H?w[@>w &qQwBP%#lw@Cc/Rá!`#N>E#P  whP!#& 0uB:9B7g܁é<{98siQ9Q}k<‘- y8#SZ=-#C02@NNT!`!`E!`!3&:ƛ!`!`"`^ZzC0 C0|F=[x3 C0 C]LkAKo!`so!`!`I{"h C0 C|n0 C0 v0i]-!`!`>#TWK$IENDB`nP˪?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~2G @5@ @db_ @21k @_ ľ @db @}-? @S @/8* #@Oe@6aS\  0= @Z)Y%J!@@'f1 @ @k#@ @L @ @2G @5@ @;kq @)w JN<$p_% 0=!ՠ_@6=^paV, Х.Y;h3pʞX9'`Ol95" Ё`H;2w\J @mATXuI@26A @$ ij , LUrA*Ta @dP429>}NC^/;f;NگXH⭳vLEɆ7ڙ  @Tq~$_aq76̚&@ov6 Хor~y5 L݊$vUՉάq 0n`;VPrG`6kw'`O)0LXg&\>}¬ @D21ˁ Х[w9m&21k Й@s-4;p * u捛V |gC}b @C\ @.*ޝy#/rݼ5ycj퐉ٜgoUpkN. @i E |(m+ +>:[*ȿNg;Vwމy96'6$ @N79`&41Lly6J @;akuLؘjT @ӡ%  a,lyԵt F0Si  @`R[[Na\@& *μqD@&6DM 0vwDm/~dbΝ  @U@&̉ @~dbΝ  @U@&̉ @~dbΝ  @U7;:s&@`rZ [ɧ/Yk_eVudNq_-Ⱦ8RFMc!@@s.Wl@@jf* %Nq*^uNT `+>~՝%k{'fuoU#%52 @`p/ uyk!n.D@&6D- $9Z, @odb8Krf%ǟ|SRF\ TYdֽL/ 81Dzu6ޑΈnx.[!':5T&PC m(fS&6 0~>W+>.N}kDZ:n|AEI2̈S$'T&V_L$7?w\w:ݹ]`OSIx_]%6J|Ca  ^SᶽdĪ=/vU{߭J[ O 7_P\km &;&T; ka@YTf[w0BM=(}׾8\vrg/{SkxWfs9|W)p9kSQ db"@@CZ6D?Y(K"u˭vvkIþ_n򛲜*N9+ܲLVj?ZH> )_GW_K\x`++pfGl;ڙ  @@VWyB yFd|"o09/8ukbyuhm툮XyOȽT?)_~PqVþ嘬 0x| Z$@ZB[nU &_$c<-y͓>B<{\WJ񗌱!{Lma @E7c&= /y/D3I֥ʺ_>ݡ%!iV$fRwxj螝_&/tؽ  0\c.T)ow~n MJTI.$ZIv{EpH !i-cϫol}8V{Hx{bjҰR)g/,:$(.W%p}/!P~~or;Vo-{|{>JfHTƯmNTyTŸur'uW;, @- ]#ZyR';&&T2sqny0[!]xja.5,YĪO @\B|}R,5|N_ T NI`;8 w-*yMՉ"@&X}38^߹>p£Kr.Lz27} @y;{>GLZ%%(<ڜQ @ `I>ʲuȻxyff>nkŴ-+dbM @k-K|~aP[]Z# ,BHC3~dbΝ  @;ڧidbÃ@Hs֧kBgS$uVv.7I󴙦X h]@& TXz**7m{JR;% kDK\NW4l)9:4z%@%%6 @L7\Xvl񥑭-t6a3;c%0Ll 6< p_`Z[ƅ lZݟP- ЂW 0벶4)ApI)fs<ޱnjZ_{bL! @X`5 @^ITI6vO7%O~]ec2W-hH@&dWޠXIHq?~I  @db}͗h  P$|sn|p [ŵV?_ X4 @1  tug;IRtԯׯ;ML ⭀]9}iؐ8ϣB?޸bŵ_ÎVr jUvF2.IhH@Zd|N>2u!rksj7O=N*2XR^U^/ ɗGs[;lalʟd'TQXX'pOEI.fbNdwNwvX͝'1.iN+-c.ek ʬN5" @`Uş_?& W'ƽ![O*/y8P6{W6YR2W o/3y6)DՈ<ʢmdA5{bKa[u/oĹص-<ԭ4?4;j.phx:kէr.ñ[D  7{~|ǃzoOƏߩ\`F}xE{y?Zu/L* XJ&ƙ#B.1Нw rXqi]Pg.gbM-㕉=kֺdb_/wA P. +R2StT/ 3w^7&O{<(`>)ru#k@.|UA=%2¯[Re51fDz]:Z^h.5[?i;a7M7k}} kĞ`p;}o.PZrFPM|YU&)IWk(0 2 :mVXS#0%P~3[)[(_`],;UP>/E>5a?IuV ٟ=XiN`&yxqq w&r\Nw {f{pJY?xB|td)Y >+sK~<Zu]/*dboVN  @D%eh<P19.AckFPx*_BI\cS`NwsF'FX x 7h5yg^Xd&Ϯ^OoLwdӞ8y|dhfhqxj6/rLmS 쉹Z쐸dї9()FgcP P.˝Դ<%:Yys+6q (C>XrhAQI֔_K2S+Nhw_r7y>Y[n{KG@S#qah[s:՘󒏬H @?.mMoE}yVج~l_xubC8~w^Ϯnպ6Dk/-Y/>`\8.;$Ws4f0K. !˖Ϋ.>۱pi8#T^dK0.kv5 MBTHNZrb=IN"V<ψމdɖIQBp^a;#60%: @$I|X%>2IP2Z=X|<<ڭg't,xqOlyi#RJ6pX8\LI @ {p>K4/;vZ+\tzJ@a @'VqI^ڔ[ҪS@ra@/a @Y3}/}Ni Y @f.[srqO¯I qFsӸՀG[y,msq5u ZBxkmg{0k ;N_zruiJ zZes5ygγ靵層ūv< @xމŭe @+0Nla@ @ә @}oM'M @cC @ @5{b͈x @_ǟc#$@ @5ovN>noFi_ T:'ۄGR k|-Uy-̶&~ŠdU^=Bg}^$:Wa{jpR.i;:'w6+-_6j[k~NZ/WP P"px^]K!@ ) rZ a ѷDԟ' @* wd\i6OaHR+T2[,.yHIB P& +sRj8+9dJgk+,y|j[a,b @dbL Ƌ>5$PJ!Tx  0@x ^[SϿϛ65؊p9;Xw^Gw&/JĶ6~PSϿ~>6N~k{*H 'P}Okɍ[N|) S ig3>}ۦۗQ-I*Q\}kJ Р=@tV@&vVLyJ2$ ub}Yd>[lrǏ9ʶ[ ЎL쏹($Glbe8R/5t>Z .4`Of?7xI f 8^`)NRFgOeu%hkO=E?LVoO o /r7zyd~V~}W!nmL#'V2U{f5nO $#"z.. j9>OO.$]ouxy]:.yvs#4^,v3m\bgx>T=Z`S*_ O͗vl ^b ,\W [V,?]~D@~~/CxJ`g~oz9eR۞#5/qqKA $a3KS%X 0@%CpP2?: 2 _`x[ ٴ)h_5< ]Xn5H+⣷j*ɑJQ`&LakLa8)p¹p,y_ziɗ`fk9UVwk/I+0̂N`U = 4.^ٯ郌L{w_k$Nö~N]gq%%퉝V'\{*y NB5̝'<5yHH>{b/m]^fUy,9=a%a<ة4."^ָ%=헱@AqY 8iOsS?!ٺ0.Y\a9搉9<;)*~u;b͌sB/[V_LJ}#Y&vy{Xqnebҭ^H^5u|*ophrr~6*}j/͵L%njWoݠ %w^w^JǕX}3yq~mךZNbv?0:[6wYreV G>l+iʒ_}XɻΨ-F)|y*߉pѾT ٞKΚ%@@*9JD.*drK\? ޺ʇTmyM~J Zz8 ls>ԩ+\" +QRQ-P 4#/Ws7[oI:xd`{~aem 6#N|Fzխeͪ&Խ3#67mNTVw]xGO]œ&?(VӰF X:wWYz%0 7D@ 4љ˅X28!\Xq+J ! b 6\<&u3?F@@.Gl`@@oScu&C1].j @P4&.أxGN4LE_C} 5ynIl[ej{'fu6qՋ%Muw0INHh&ڬ{`4ElZbuGo1Vqw䝺wfVwbVF=pt 6ՠ-{bVJ>/|YkHjaS4F6:1"м;v4?Ex6:[~t?NYL c;58 Y$>LeH֛}0 / ogͮ_R+Lvdy $bV* CNՅt^#x9q/ H%6(rfE` wb-p(6#`ϯ5Oy%c_Z}>dR#;;uLla^nw߫kpm7;-w.o$'of6?fO]9$z#Ij<%,Ħ^ g>;=Om%_|\ߩ Ywޙ~K܉Ako_uy/i?i8mQ/kOJ ZrڵX&Md o ୾/]F3N|Q+F};:tD  @OfHƄ21S{3JUbF3 ~>0S%`;5 Ĭ @ݥ#-*Ih3j<+O\`W%H>!vY thCd{+#{V8'+y=q|,A`5aX!fz27(I+A{5 y b~5>̋++~:1w8.g2;J;|t^R2s.\{rWWcن\&V8 @SӾ{F򃃅N{VjMY`:%L|kk%omIS fypyge\V_ WJf`|]kl.|>w4'M)m[+ߜgJ\C`\".<>] &NVk|96W!Q~?so[ήf㿼2חb PAKt]H1pOH^5UovxZ&  pK`]x;KJHa&W}ŭK {_L&vP xX s1h0= WpN5<ٴ֦FpU7p_AW'^~߮U]:'@G*̻b'v=`mV /M` |~r^&|:|^Y?}_-t*pm÷ M@&Խ3~㿯yZnp'Mۿ~d6ߒ}qmyeyyڰ'vYRExXLITi.(9돍Lz @Oo92Hn~H=<=ZsO|Ÿ^K]>K֚\sTjQyc&1jݑnїax-T2g{b#MCQJX*| y*r|&@`_B`X՚ZV|_Vwrf%`mXJ +R @  @ dbP @ @1c"@ @@LJ1,w N ۝Nq](\.|m:, 0.lf_L@&6؄[#[*[_;-J¯k$21Khs8 =d3duo$)TߩD.$+z\[V|-QZ}*jaz>[8}żk%@H2fX< on$@0ZmS wla pN<9! @L N -_fs۵þV8_(l={5]/XiJxt'qښj3M_n3䘾dq/v`v_h$ʔ=b4x$@@SRS 1^XN鬒?iճ\}sysEOy6x[=.6x/*MUמTmBD>\D$ /f/lv{4۞'@EX"& M1H%jߺdQf Щ;hv?V0Չo?ݣ 4({89uu"_<{V_}_ q{bQ?ގ66ET t:ϦVGfgkĮuKy[}Tslt]*J6u'} l;S }{y]S;{I5+?܌' W4! kbA`$gwv `TU5N]8'7l}W@&69Y|%y*g)j0l*0 @adbLOcqH\vR @`S@&fq @I, L%X p,0 @!dbCLAhLkXotml\{'@dbj;%O:%^+S# keJApGւLl4MkѬ~%krŝpmb;ޟ @n $ [jc 'fGv6^fKyxci PK`5 ۹Ol~%a0K1gxj Ai|L^cQk::;DZNfua.y_ )_VS[% Hz߳~oy?6j)Ϻ}?Gg#콼5yvYgVG9vCÎm 9.gGVg𳯩?''_;zz @x㠱>'~`OlAӯ\¯pT<_Qݭ€QB)F~_W*ۺu^{V;Vl,Y0V'cI|,_8 \Hhjb快 tɑX @#JcGIy83K~= $<<%?x2;|D(xjI~] WG @@/{0tu2Q5F@>6T6dbm΋ @j>:^^f4J BR\n}r1/{ $?Tu @;)v7e&ЅLl5Iw4?RiVkuX`c @`gg3žl)=cY& RbMɵ>[:"@ 0ءcuK#w.^ҭmͺ;Z @`  c̣Q.p&g87/N˪K  c7^NX[4l"ɭKi: 0su$ɔ_iC_?{$V\l礵߯{_ 1?=2ac4r?( @ >?,;<0m}@+d8y"'Ky}  @`jfˆv,p|{_g  @g{bҰA׭a @[T`O,|դ!~'!uu"̅Cny0)ď~N]gDZ|Ͷ\tO̟ZKc}_+@v_UY|uձ Ĭlx{{vX|@ Z[oy`E`EW'eF!Ͱ {-o>$sLl6R @uGҰA9ʿS챖~ \Xؓvޟ\{Ca"<<6HB~I .?DMFZ=ovcuݿu{*{H   @q~g;dy6C: Y_fnIuᒶ͕lĕ$[u$dbVJ @C \.ȅs|))I{|D;% % k5} L @s%8Oh/ v/ ~ @8o3M͋` @`U_N#ߚ/7UKu W/e#qa #t*2:SW\df+GʖgӡҼف\wbm]xWӳ%I=v_wٶ3_"!@==o1^hQ.dbkfip Cy p(~a |cc/ ‹*m叄mJXy >" 0v*~j[۾k.TZǬǘ^$usb[i2KSygb[nLIPf'f'Қ:Vեw @OWucXٲ@!O[zvTL{ jIUuj[-c̗"4%jS3"TkLlA,|[oZwzI}5tjS\  @@SmĹ:[DŽGq43X;zqJǻ{lLs $[7ŲtgDeb fucj5:I~6@akS-Nqak @okm 0%šIkqP!n9+HE`#}ux={E8k[+ ;%czj =r(!o<}t+9^L8/Z$;V/gk&_]x[gcvehP(_2rK.PLv7~. ?܌<# ):Gzyp~RRp0ITyGJBǻ5 'n* I׀,Mnv4Չ7-&~jP>Ix~PȒem=i; &-,i2G}-eVpI2T&NΝ+ ԽY!C퉵?gErսx'*d>qUsjd-Vs6{eݭ= @`*yz8XXQi /7r#dK/* @`TG/Ǹ4".5`## aZVIl!;Lڒ+, 0L{c=*;.2?NЇ;c[Ckg"!@s^xaShJ6SǭH ){Ɠ~Ld|Nշn*B pY+%_^Ŗ.,47Ґmmy$M;O5[X|Ͻ ,6۽g֨ ж |垏IHj.<<6-߃y[$fwX{Y):xq[MnG:ʫlD^אַо=je @{\..eóR>? o΄}?#ơS/1?ZG~;qGu9._3LT[N\="0ONUKak[',֒ 1{2XjaO8Ճp4o|-Nj_s{hq&V~ zjC} ]WptY^/ǯx4i99xo_3~!_Cԗsў]qx,?GB2,GB<~ȝȗY{ m_8fcҝWߪRh3/©/,Pm< V/ e8;E{NTx-$IW-/j?jvJT˜ ~e @kQﴳ$u;9@|KBJ"OFwUP1neh;[#;2S9W ᚨ\LF;@y.?L_xcULy-o($е8,%I¯յ*lvI{vbL VCl=^8 dbT$U[W9MӋ!Od%vJL+2sjs﫤'0@7oUn^-Bᐌřabʻ@a[Qm` Y9[Y~6ȎLX7\TX-/|N/wUoa':+0(TÝ>rT-v~[*Og-Gpp?#촳z]>X{IgǕdu6OKZNe֧L=)Zϑ'HXXى@ѯSQǧB^9.vZxʘf2NT]췶_a=$lY#c؏*n9im`Xq&.+n4|H4r9|iKG+ⷜf&dCi3ly9,?P ǂAax-O>" qgrņjɚVG`Z>qeg\~Oۚ[|)V2^9JVbXSBŰȓ[}/W_geO, (pyc0y Vx0˃>э!v \؏!?d}h/9 Ǧ{/IlI᳡aZ`ipuDI֑ dxU"ىB|-#zpAp. -ξAҼѫ#QRמX2 .Pz\'uNK@nヺ"L&|[=ٰJ}X\&޵oHVL_T~<_WǕ .k;>^rp vd)èB./|DNm$֞ثb 0@ު_qZ+K6V GɃ[7d/[MU2N~}k՜JxgS&q~@NɎ\H8Vޗ?pk=8!ɏNix*<:>~rvhwx$oy. ><$;f%VIW'=1*yn%޴t,pn,;ǣǻ[ǁYԑN,9ROFL{K>8mX-S>n-y54xz/)s87.D[}$ ?T=yҒ iUsjd-Nİ%@UbLrНG/CW7n͋H/dbP`? <ˍҋ*(`C{=߯+=(()3@8i0(sI[r07[4ޞU6{dSJG^E'pM@&vM±N=;cI>9$<4 @L[?vUaωz7EI<+[23R@r.N|s)womwV*.^QÏwg @{bL0U ?wiW|$ Z7.Pxn[XM.&~ @`G@&fy @Xf¥ ҎSP@& otuqoFM7LYS RQhG@&\v=@lKd @@ )2lwmwiV=|gfk~gq%@`B{bN! @ PYX cmwR70;;s-I0 'fy%חrTؑPKB @ऀ=`,qC;uoϓ/f[5 ;< ~WH^~N_5 @ Ćb|W [ K<-DUеN PO@&V^x-R X@  @ &xL ([wC&EG @2S f 0Ll`wxނ9#- ;  @z6cmF Yb|a]+ƣqub3s+ @2׉u0gJu!@hP7;78)BzKEIovo͓v ̶ ~ 9%E&  @db_Iڝw>T @``kh- _, kqDD@& N @  , @|- Z\ @Y @Z@& @ oJ;46wRov`%u;:- MτClQ } sDݼ@8tr6yv,`:$`O  @sgV 4p]ӷz#@! cDI @H2fX7ĖkbbAhI@&l= N:,%z|ujS<7w$& urŬ dԞ2$ i6e[a[jojwK(4/ k~؏,gE@z#f%ǹ\<#yF @ YCsMS߲+<rP>+IBIw!iHHè.-է@} ^暈,Nj S УLYs|~}GF( @`8si$hJ`y]S!@1dbc̣Q @ٰR.o'xدHaw 5FC6( *d1WGI[W?n]I_ @_jZfغ&>lk{J]bI @P2` @BՉ]L8Aҭ=۟vl㭻NM553 @>'+5xX\wu2xg^N} ; @L" @ϔUٜs|ԅ7Ҹ\̖HkX Ј=F&NQUrN,^'~;! @){bMM'!% {KV p_}C- @@26ET .`[ @1dbc̣Q @`@bN! @ ĬhZ%-ẵ}&88 y @O Ğ<$HXoi2~d @SX'l @:uz=] @yTɲf^$6~V;t# @w\> &4G!sH~ȳd_٫/V$t @@& ($ί[OŏDUX[ijb\ ;tYP!@1OL=wʖPyyodZD[a~$+^A @G9_M2Ł!w{b;B-'COZSSz ZKKnyͼd^vuɽWAjN%Q{w^Vp @` {bc[7VwZfհwkƉG ߾>p0'maK[  @y{bϛv6o%/ŶJVTZ۟9tN{ƿL͵2%Aߞ{o{kI PEX^;ͷŞ=e2~82K>lT7G1MW  @dbOP+mm{!G2CU;!jAhX@&T -EaY Z%?'-ijy!x_w@|Wp  0ωM97ojkxkۂc6[}{Ei>'1 @ _21 @_ ľ @db @}-? @Ĭ @|- Z\ @Y @Z@& @  @ Lkq @ @@&f  @ @k#@ @_7ip?>1OquUv%]JUֳN  0= 'ݐ  p]`4'5ᐯ5  @XX1 T< hGzSO~go?+Q^XSh @t' nLT`9ªR/ @ > @G@&f!S -6 гL; @} 7Q7lY2 @dbMM` @B@&64T[_ŦZK4. k|G @2'Ր&?8_#> @X  @5FK @@ 2fA PwqZI6i*%*C>} ;L-p*/ W,/9L<՞ @`hlm톕 =G   @@?RiVX >R@& 0@Q~’D^p<mlM @7U\^p͆P OVc\W&tVzWeB]r(   @E{K#ܜSxq4M5P'(#JJ^%jpLy ĺ]'@@7ĺ* @`{^Z͒-M-n5`T!@gdbgŔ'@+ɇ Xjm]<_G @7NY/D~]|v=Y'@@_/ @ 0LlY4 @5_%@ @`h  @% kDK @2f @K@&| @db#̢1 @ ЗL- @#FEc @ @/X_%Z @F0@ @@_2K @ a @X PQ_GK uf @v쉵;7"#@ lOY 0=1( 0Ddb}̓(  ,9jyvF>'V} @ @t2܀  @. > @ @`:tSn @TU @ 0Ll)7` @ ĪO @N@&6ݔ0 @dbէ@ @L' n  @2S  @M7L @@uX) @ Ħr&@ @L @dbM @ P]@&V} @ @t ڀ  _zc?Z1u7e&@Ćb$@] / |M X#@`4吷mk3x{,f+u  PQXE|] @ 0Ll҉7l @* * @IdbNa @ PQ@&V_ @L* t  @2&@ @`RؤoLV7\VhuD}_ ĬH [~]˒> @@=X={= @`P\fYaa,)65(a @2g )NÖo6  @@LDI/+yJ!S+%[dZጄK1 ?U ЈLJvvJx)Sk#^o8/?Iw КLZNÖC*u6Wyl7aˇ.xU @x2ԈV`뒿֎)d K涔$۟7]yYk @ YC`a-hV(0i-,1 @FBz:}VwN#W/_"Ns$E/_$J @=*:%@ip _>Wqg>3|!`O e} 0G[wU?c.դ= U2eXX9*bA l %7kc]^[>6];!Hdb&P1x @5W'FaJm6-ƫdaM| `Od] @> @!C!@ @@LJA @<$ {R3 @(S)H @dbAj @2b*  @ L!H @ @X@&VL  @= @ Ċ$@ @C2 5C @bX1 @xH@&f @ P,]\XAHGG6GMP  0=yH  @hEX+3! @'6\) @Z q @ 0Ll6R @Z2 @ @` pHYsuu !kzIDATx^]ɕ'keX i1=#^4 8,JzaE`VCv{1C;{6NhwfƐ%W(+ Ie޺ޫi{n8{~ԩs#hnhY4pߤo@ /.>xx.A-ӃI{nk;` }23`4:^{Yu_ ^j=~9{Zw_ -Q%*wGK'a":q&SFo ?K58Y{4_ .Zw.I@czpvGKig`)i9c_/ -tɣ`|3pc#l`㭋{>/޾8ںSGԻg;ߠ:O@z_8 Q[R_9h V[{p֌<:w-7Q<G*CGT~̽ r g먑 4wS7O]߂7VfԽ=1<: - K8ջF4LH^7/׮7'7<,ňF#ZRG< DEGg֣%& g`|%1x;.XogD4-|C#Z^ SCHxzlŒGKBgx~}3z-`0[@ kOYoG3a a8b|DKЂ"oh)\bR8E S0i`h.Fstąc&O^ gp AD@Ab$hq>-7w?%KQRb|%.3+:ZX2HbAx8O9l~ Bń{YP!Zם9_-DWюq1^9_73'՚>0р-QA{׳-Vܫwu fDU's3^^>w|9ƆW^/!Z>JDAD ¹l6-7٫g {^/``[ ˟qApr=Z 6 +m.%1-Eq* DR>(nA2gw-0w?!읫_ zhVIs},|̅pAb`1`n׫z j7d9M J:殑3z6jPs퐷,׫jSL%ȾТ*z̀SZHZFo bt%&͆auyK{d,J*k,ѕwS,ЄWDKCK4U@H\ZTEo,Rx Pix5-?&FrhbЂ̪XXOK}UhA {'-1+o~J TZGKchEʒp}N>c,TCK4# ycsz!WXk-FR:ZDޢ͢|UI4M@(hZ-)E3TCWR'PRZXN4#My0f9j\k* -N7[KD24"NIM?]J[E2;FKi/'{C$F61ɋ+;Ģ Wav,vi kXRϿZ-ʔ~*.o51W=~Gųp*ZJx>S'̀GK .ZoRB-h-N)92(-OEZ& >S/2Bei09]8ysl Y)Mgpa}"h-ܐM(")ݠ*{fh6%_w7sr/[pa~?u ׀UgvF!l*DvO-@B9Å<f`=7Cj6c)vChw@B3?nvC·G4e$[t\O9߆}BWEO(5yRe۫k<'-'#>?];Eyt?Ձ.h vx =z??þba?\ȇH@rsϗ55rzj\A8[3< kdUޛ es!vZe%'!5p_SElcCbm}H\-YKhi* i-aa¦z:ee ZܳQWĜc>˶zg4[ed.Xm߲>09mu}y4\-5R^2i)H%RtѕJ\t|-[[/\ja-'|Ut5h)n̥bO5M8GKPػջI _/`ABzv]oӀ-yKϽ*wwV7hy57fI Eh\aQžRoC2nH !i';ͣN 9[˵+ZYxܤI| O_e"[ @ޟ|q3_m_G0;# [[䋁qWixh)z~~PyLR/Y3ٷpЂ,<&'\\j2[@B;\w T"a3sc[ib=y $DEY\b]Z h"{(z J)$EDžnC pxXŞJVd^أ$F3MLOd>pYߠ4tݝ_{`7(7"dIbKlWD*bvR4<}|o1^t|eblW?kSHkmKQoLPC% ;Dy[zf&& Bȫh1^d|Nmb[͝˷K~_C(lCo&x HD\Gb6WbD\-CsCn԰i|Ë)Z\{4t- @n*6ۋGN>9;(5/q^}%S$=_RԌ>/L= }cǗ^Dį1|Т37h|-rx#Zp[k[ՐQڋ>wxdg7<0k-*LiDvLAi&=ui$ݵR%fߝ,AG7nX ~l9+=xУ$U8nHtVlguUX['V跙M-m8hvbv\sh~b-aQТAbtuLb9 -ͼm鲛 6 ef >+Cy:iܜHomn^+y*ڝӖY{v=_ `a~UʃY÷pLh)}$8@LSp -te޲AeA*V%1sM Olyg_Eق[2&|pB9^}'vN66h1&CŠX9I-!o5LNҁtTs"PNFS2gwe r@ 2G!5YsS_;@y[)Z\uSfR(؄@!1<2ڂWQh!"gZޝǧ.-Z+ o2ْLؙ^qB7 ZFZ=_"TO*>Co:F&r -g~Ta4-@uzUVCF O -o G V{f%$SbU.*dPtM+8=Z&-|p* Ytv?P-T#61CI2 0A +)<$-A<ԗ5#2hɥFcjf, L-FW"h Ȇ@kcӷ'ђޢŀ#U*t/~S0ǹ V-ok2tUl{eiA5o˯NBOv' >QWҋsXHQ|f2K͇^:n|<_5;m,7MF|NqōD-XޘwK]WJAy<3}-su`Nyitf/?om<֮%yRR2uКV*߽*|f9HNHl9m@H>ZF hy/!MJJP98obl\Z}-DxZ"Bk2- '˻mܠ|Սrq_uPZQEv-p{vR-ZBUCi#AU7bգţ-z 61GVM䫆H1c:+--6h(4:'-OrNɾTG˟,hqBRZ#Nx:z~ܴWh[{fVmWs=?nc7(< /QU]hqz-1lI&QU{ԶO.j--ft4bmG | ѥZqzQ^A]#[Ύ6=J^hI[ZJxxE(##pv zX.Ti&օH-rb@w_Kkh^ {5Ѽfǣ-D5 -tB==dkdbibk޴OYGU{NNeNxGK%z[/B*h-{c/L=J ~/?^yLՀ 'Hܼ{;;63愷.< ]/h $"‰bBo:V{g?&Ō.qR3ڈOq]Yo%ك*~p+"}'"[h $ao=LRWX$1A[o(m_v-T aCM-~/?,h RdVBv!+3@1`I) 62 ePspמ? y ob`zZvhپjg-erZ~$fdQ:H 2WWa=&ICB&f @$aRy? &/;2M,MW' ET;wǟD M 1s-84̠>/K\^3o9N+ѪR$vt~0=K=W6BzLxI-V@ niMh&4+p4Oha[|hy03?_82 GvN%F vhu@Gbܖ݀LS7i!Nh9^ZFo\ok}-Ly?1iΈƙaB9kՋ">@ v?!v#h1u'oт&z+XlN;1D{RZ6Z#L,n+%6]9A 5Ē󛁖ML4bs:Rk 9 ZFw7*Т r3,(ڬWjsAk "-ۃ-H@OΜ}g0={ξ=؀!HmzLR J~nȥh`BKRO&;AϠlh)-򏱹<("m%q]xK&z̉/ _OO'rl_G[ԧV$mh=c4ԃRxuUiCe3Ђ/I XpxvڸBMd}t2Xg +(Vu>KbTi-֑>zTy]ڕ.{߶댎]ڰYnx I\j[7m3:ZP$)C q|EU֐uZw#EK0s~QjO~\4[. ? g3Y>9Z^M)Ul%Wt|-{$.ey(H)3?-b=( cJG/ //?ő)F<)*wy${h gPc!3p!N{<'0Z6hH-p'VTZ:&2kdl[9BVAiÊn,X6g~3,c+wO "N/%3ĩ$^"en *?[ xK+h~bsn]KcR}",Br06O$)mj{#VMn־8VXBSx0ϔ+CX%z1|k6xE*X !oo -kAtss_dkX -V-fRʩt{zxֳyoUyka)z1c|`xGTfZ@DJb{ZK dv_vӴ+mSv͟`p r`nB?0GH8LQ_vhi@ v^$12b^3$Š])p|yԥupxH /m$A l8z82Wff*ۻh=e'7/)~A+LCz]yJut+Y=A &GK8r?T_&-0S 6zj-;ȱcuPG{}6F(ނA1/9RοgL AR autϣraEȖ9-/()@)gZؙ$x s끆p>M@9{j6t-߬X9N7RtHB=e*yFl&#m (RE75K}~FXbt[:`A6[Hmȿ%:LUosA+z>*FF^Pވ0S8dwV]fxKy¤Eh;-P㓧镜ưF񲪲6uB(*zD 12׉߁BZS4Hќm:,`xGms\>@$wvd0F7HΒţce"sV4P-Q0y mbaħD^Ђ 2Hal+i_$v'trޡU@ :;F~b5޲։Fx5D1eޒ{mn\Oi-7/AI9,!jmyKVK 2vzK\z?1KJwQ<-{+%rPJʠE1 CfZdbD3BdR<|%bXC [y--qvM@SBE/(AR nE11MN#?1 =L>D(ʗ"ث»_<18TDj8AC@[zb['Vb-QLS8Z4^S'QI뻟Lђ4-۞$qLZO`쿿@܈d/ ph狃Lb=~$lHV@ SHbS|*{2aO&CUi2#})ZFp˽lUG ߧDA@vqԲcѰ0G4uՊQ4ׯ0%ЂAFE,p`4( ^@H D==Zj F<{k6pvhqׂ X(~M,opmEI8ˠ% {1xTh/#5Z'V$7=_s!Dž2١%yOBX01h;V9-~Ow˷G;8zh.1vghy8* emvWo;bCZC UV˫Nx2K)8hz _9cļXUpW%/I%[n$vsB/>D#8F>]FsAKWWXmrhWb.Z?1yrY ohq$mu=5!/W+v =i-w.A#b &;&dm|ph)?wl-YZ| TR-GKof՞*G\dK RrIMͬhM. >XηH<89"'[jYڧ]OZ4ޢO4-Olh-R;NX-lqҟFx}AZhE&d EC!)4g͗Z2:j^Bh!lNIm-Lб.YN5 [_ʡ%uزt[-[]~ZSBf DZ(&g'[ʠU"p/p.pcNRCҚ->BRC9^8io5|X-GKXB6?r}J2Z|i!명tV#--ue!麞]E2&ps١JF [ԊyVx)\ A'?Ɯh"ܣHojrMMM/5@eeI")\ᬣZ3RTtCsB t-G+ӾHhW ֎vhXf'fJv庇`)!'FXQH-4CŚP*t -OK W7K]|oF)YYxKIG"mTR`Y#r@KNвya5J\:١V.#EuG;x?QJв9G3*Z`bU Z|B(UhᬓtxRcJoߺGK5fY'1qoߣv/net9&iÚ-Fe4:H o1C-x?1 b-[$WDKfn[σ-S\S0h~bUĪG>]Ѩ%ޒE'f¹h{&n;`jyKcW~Iby-S` %o w/RtdeŅdђz'h}-G7s³Z^I(`$:;%bc_,-OQܕE˥QvF:KE.cuZTn#/^\La[9hzףdG]˙utH\ǯ2s+$.Ehr_;ZXF@ kYOB%-19CILp[hudkz aci>^!!,kaY VB-feB˾KN " ]˜ef#(-Ԣ+"~M-ȁp~XW*b}% ƾb  ƻjP"-/).hPxݰsAKބ'fD x@D-\ؑʎtC}KK6Zg%@ ›FKֱ¾{@定l-YF j-5d0;Ra:hfDu<3Rؠ4@ OfbH ꜂e@hٝrzDT0ۓ2hR.E7 e;ŲN{(K^xKQx?1h)8i?hq"\GswנG>hq7-١վ TT?YTNGg0JJ_Dii#%^c'f7d[LI)sI*e3q}Qh9u>a/B&!.a& Z_O婥ޢfx@{hX]h)7&f4oHb7?0?[zg]-OLMGՃS4EE2ނ_vh~b-V4-M,:M}'h~bV$v>-ΝGKѼ[]C!rb4o-itʮ-fy~bނ\D#'dT?o[.a Wh\k= `[N|r.uMZ,BNs$_q-ش5rXh1"(0)ݨ?+o'?g-wh(/91IlĶ( 2-FS疷h) O]FQ->ńĺ[/h^Fh1D![-oG-I"1VB-fΣhArPRx-9ZMSQu&7+Eh9ج:wθ/-|E$&=BͣeoQ ;ƍZhDt~b\ϣXǪ֝xKӬ-I 78:W0$1^fhj BK|~4H,"ej4yB TbI s r9~u-@ i?oF2 ~d2ìj돁B xt -c_\+L&|E p Dx *LG;|xt -@"pWQT8d̓:,IȢyPKo!xyI,]ܒ9U҇ [ve6X+jqϠo~[hRr%0_O|/"fxwRv't'=?Z(>CÅ.j@wOOOph {$?\\ NK}kT˽EKc"1{iFwCKz;AKD@Wl}vLoz ]'?1$rmZ2t ZP; ,0\8!^BcX&d-E^&Z'K90G4ʉyX`⢒ETQT+C{/ ~`l,&௲PY3-zTFٟI`p ?up M@ʚ5Z# GѶ Al)RfְZ22~bhz1%~-)%k%6cwQ-eWXV&qд!9*Ʊ#J`1 VZ>] xoƠㅖ]L2%Ϩ8T9--A3&7„-v7Ŕƿ![c{gQ,-E)\nG5d-;Ԭ.Y? W7o.݆9ޥ"|Ba)\nGKhIgյTh_:h&%NJUa|Ih-n7ɜܙ+B y<)Gs-&vPZp2I mp -3oۑr<<[zHj0安e6@ !˜ h-٢FZ?ߥ_)woK*_#Z` Z܃S$cIS(ms-j'o닯&K٣:w.Q_ZJyuf 5LU#ZmHYPo9|SňPYeP׾nK w^e k*((pjXPy~$sA/ ]Rg5ZO^'Z1p ǛXcIw) ^SotzORl܆MV晴Xy5gsFqć|Txk{HhhptW`EĜІ`.!66.%fA6#pZn}Z3ZE2[-.bNy,$u, bޓd.Iv]."h7*nlWx[' |EIh᭖B'oE[CmTu~67oX VKx/ReRZx4 } 刬mCgsuLdh臘ZvJAn>*уi .XYr0-ؽXnߒ6>a 085lp83pUuegi1$ >'YL#lbd bg2ђ`"ԍzž\c4M MRqh(Ƥ;Z$,^v[rx˸ &68\ܪ 9 T@(>A^w(NJ,_upeq~%aBRX LoAN@O]Wp@% A T~?AX; ĿJx$i*\-RayKxQ*"BFga*Ő/ 硠bA9@~岒D=p)'7؇|w)-{-;)ӳ3%'$-(rAlgdo-kخROp8vi} ںj1uSUr-hyXs-OWoʯ}$ȣZ>;":"kO15oumޭ[[~5/_+VDh9cm.Nf55lɽu=kbA v3n)J0#"*}oʓc}0:d)5b:r|]Dϗ.+۾K-HOߝT61)&&jѲ'V'ݢ GKƤv-%۰FfTF}@F0)QKX%1GC %WNH)Pe+G52Fyx ,% n !za$,A/5 mEƮdR'fIe׍-rUËmre\%( 20!. CƮjuM-*W,S7Zx*dj KL[>Z~ST.qKPJL t1Wt-bDl-{ژ7KjGK4@Kh}.1n$z mvrK@vHUy(b/P5a *A{В:py~#o݈`^y,c=h %_q߈[AT|ܔ]SBO=I,}ha{ l4ڭj8GK]x po$vR2O$lQ-*i `C%U"p#S a'M xMt F>N NΊ(S%c4z4o 񺀢@AصqOZ(DMViXaOЏϘk&\L CDN(E̐tDx ,Jb(U(n]+tВ1v&yz ^H8-9Ph %rĐ0V~+D}oLB]<0ՍpQ.Eq}$f-Y/2pD*wXӪ(o,A MoauOI%2~b)"LY|"~|@aHwLV>9py&Zm`:M ;2Z@Z3@*ь=Ҵ]<N*w?@BgZC + njÇBY]X1C0o-8 7uYK@m-?Dq,D7lHbǗfprEĂE{?1VDo+uQoXQ2[BM}VV8prJnKѢ"BlkR%lc&#R*ِR@W]dQ|U4\5H-ыkLX侃 *;+Znr(qfo%ZWua{\;A&j-aWrQ1hQSPt 5HGq;s'_ Zl~݀^h@iE1.^ Ɉ'l9Mc:\p(tm?z_[J_!?pgO ư_zׯ6^d6+s0+exit MV-dĀ1-ysiz+#ЖD[V7ؕF0uM6vGeź9/z{VG XL9Z|IЖBD3>@6(s/̀ 7\T͢%'_)& yD4}Rr?hSse);B0<i-ŕWD @O<NR'g?x pk_$Mfq^ME 4\.#agN<̆d%uɌ=%c^>4?e襙RX:,3M UmHu:%JcnG2,' Qm>#m ó!wk9d RsrB[F\--é-;!sч3Z+sF=htFW@|/6Er7;[9d,8Ќ=%c^d0I-C/M񵌄T+$BK\ D\!!ЈSdZ@ 2>rNzdSP=K-ʧ=S2--5/͔ЖZdt,)1%ݽ)HTx-cx#Dg 6u n2@X ?zJƼ zKAhK奙Rk0'V- /DD`/P@YPEߖCKnla+ҲGK z:o,b~h&R,knlb?5IĘCKĬVZfBU-.j57ޖS,6XGS{ht:"hypȗTՊ-93& aG>_59fERɂ`elzNTC˝٩;CZN+[$fM:+\YlZ>3.g[f +CK ?dP o͟kk4z/|nUy:;M=V崊;nGMnE_=+EMn9UGZ|\ĪGKYI9 fqk.LuzExќ`eVT`=B/~m=&ZL%;RDY_H4~jxf׼VLOAM ;lt% p;Jd[3Yo^-?bȔ HbKeph ̉ᵁw ~6ZA h!N,ZbMyp:ŀ\Ƅ/-^Z[Zܦ oљ=JIQ^,AXT3x] 75{xk -Ih)Ӗ#A%~`Đr $ AߍɁ >5`pWv6."Zh SV!TIFj6#ڋe>=F) j]U ^.źh j!;RI"^p/LaC?#bc2ɹm]D&Y8{6W|V]sy~b1W*a4=#SE`-Ts]/|dȒm-o)'^EO+X9(Jz_E{$Acd"VLE/#$Kj{)it[x䄢-p`e RsZ_6h 2Ђ9#H.yC(bi T 9!}F$EYz7}, &{g s'|GY\nr|EOZ 7&/$E;1p)ZkooHj~#RѲJU#\* B@.+S1]FifwFW+*Wuhg%w>Gz_h-@l͈khbz2T#Iܑu'X2sN7[fR鿥?6=sG0򰴔XZ>bEU6E-5/b3cruקDS_wfM}}*vxrj줫)iS`/?[CI| -*-rGUB;fl#5ʻS+Mƌ Q>dj֏ߊ'HpE^WRQ OV;ɫIɋ6儇6%d!Ij$b/D˧_0Dܑ +4̝RE'fVN ~L(uҊwbz)a#'S@|0ׅV2 Lb-dᜒG Ю m 8AB?0~$?mh>'n7/ RyåٖyqoxQi)#[ oeh Q)dCWyTA"0tFT;lz s'h{Z"V|xaWdf +t-0kc3Lb'fJYhY\~%ɍ}]\T@ W}("p̔/܉.[LY! ZF-8$F/O5hɈIKʉ%鲟O^SEvioo~ o;P "[Ll3"Z,WqA +di’,8]y5[[N0-pk#BES߾&h*x)x4kefRDC~wPނ^ P]70,hPJArSQWPo "i\:l_T!BT-35GK=M\<1\Bf(rq/Y 냭 fj>IM.o$1B@VfItExGTOC[,IOٗf[[c+jhə}bQR;})Zp5i;$2 _Oaw-?/-iMǣţg"Rzh$;B> -RVhCB@;r E.F 3ZMqHX}RzE=ZJOu!~Ah!Fz.Ibh*xbs -ͭK+h)LYDp8Z&ƪM(IDV1oin>GKss ZHBRЭPo Jb[ܜ;E~Kó35?`3\~!Q"%g`GyLF=|zlͫF=(E XXE" rޔδ鐦o 'xNTr`:S{&3-$,OY٬n/sZ=_oJכQEGJA2+Ǘt-sGItG˜* -=|2_et 7D6c8>-1ҢL]ZƗxDȡuhRA\V1ɦHyCD2\杬:&E;05X266'H|KD5I{s!ohq'j.uI-&d e&Ej.MAֳ:҅iYf\_.右XIl4zCdDuf-7Ƙ\k%yBu-mAN[92!&WHkA\CWݰрt~.#m{g[Ƅ퇱 $½H9黚ī4 󡌴ؓ.O])ƃg˧"op#hɵy$޷{"nl--[{"nl--[ђ=a2n[WmaD˾x!DIENDB`FhR :/JFIFC  !"$"$C>" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqstuvwxyz{|}~ w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.(((((((((((((?pd6ך72 ,NZ+¿2Y­'n.UMiEq| @?o?suWx\ ug_:h֭-f.] =uo|\nɴ'}%歨lϙH7|u]OqM7xoA5+}^l/[5 ߌSiMOZhH0[熴_=&)ҿ}<]ʋs@ ɹ?V7?^E[4>&:|;7EDԼCqg/q*>~]Oޜ4>+lq, Ku#ɵNU˻/:Uhv4 7*ڴ#f[λUMא5ű-xtM"uiwne;r|Jt-Ix4]N[[UwUh>f®6P­'n.UMזF~ ׈ֳscϥwmo+ZjQ#3Kڬ^od6w^l.iot+]&wV&7ˆﶀ=o?st­'n.ZneZ櫥KfoX^rYz׹P ɹ?V7?]|"OivjO#?fm73w4ǎ?d$Ҁ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )=vS_,z(*''qGjCFxþ/gJK!YgM;a֭[~^Zƣn5elk[j[NvϷNh&'{tIFB,'y{7jOiŕd[͋z/Okȴ^3ѼgqψzoMͫiw:U˽ǔ?iɜm7\~:/MK<e ^?ۙʋb͖e~QہOuo?|me5hm P#lʠ1T^kgG#>Q<;}azE4ǎ?d$ҸPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\_>gҼmm?RKR(hk= ?EsQ%T@I_ =__ܥ4_ ; ֢x㺆!w.>oaY/V-wV-Dj۰NVTuB] Džuo7B(Ru'vO.,⺇t ivMϹJ|$>!/v_ m|Kxr=fKּ2Kj -mџ~Vao}e% Ѭ]nVSo?W5Y_n([6_w ]G@ y8F*($*jnl1O ,%F+7h~h5] \n}/DŽX,mSI&X#}Ww,dY'i_b~"_ .wy۹>ons^+ ,?EsQ%@'AxWQ{b$HjQѹt튵~ ޳6/^_&;H"Pۋ&wq9K*Gh;W`y|+:9a}C=ݲ:[+W;Q|7j+?G_EA  ?1I-k;/ib1Y5[OD  ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )=vS_,z {:vi(d|C*~voP-Dx/<]c:WΑ@3;kٍ~L^xM]~λss~垡gobgwBs;?6Cy|I/RxZKr_^#(TEG\I leoƨk3jMizԳm%D7r[ pjxzkm$i'ՠ%c3Q*,Mעi*1 x>۬ŭKķw,7`e̽ @i/ō?=;pUu~e]mݼEw[]g_t i8Ěr7_rݱ|w^%v.o!dkNyl%}پl{[>ΥuMg#\jqnuUe/心[[)/K+Fѭ@U۠fiip\߈|}KPTJDO[OӬ嵖x8ynV65 icy;Yo`ׯ)f$86Zq]Z^W syacw8ۉeV.w 6>mKW!ލku%ZoD?ժ7,8C?/KwxJϊOy5:8&TX⺉Fg_Qc79mt -/{-Y'|Y<Ťwfoƀ-Am|䚜Y(H'>nbQm2OGkzO-˩hֶki{3}%*n?v7K!~w#^ܛprmMv/ 5߆^V6ZSomM΍k|/Cy>9nA$/@ EYtO٣ϻs/ͷ4Vx6"}VkY]a$XRnmSmv +{y\֒/E_#f+m,H n<#뗷w5ޕ6)2k)̊<>!6ZS5Ρ{5m-l n8O3X~msZ|s+x^-}#=E-ȷۻٴWKKmBhpw6DTo@|?Fj't1>[I5f5wEܟ`,w-.̻;Nw]eZ\2Q\gm\ҦKQVX P ~&hrYǤrê]YaCh{<ϾʛmUZEOk> 5-?Fӵ{:4ɹ"uP#*snxGiĺ4kkp'oRf6=7]{cSKϞʣYoyT{.ZW]#Gewcrٕϕ&\ɭ?Nq^ivL}Qn5+a rڣ*,w/[뷍kl׉4Iܿٶj*QO!}c\ѬgЬ:Wf@hi_ Ҵ(J߉e浢mx]qifQnQ>QUW%\+נW_VgK:ƟkK @ު2ƞcUVR(c2?Zi\_O xGKZ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/_ gi\_>g !o-Bni0V}vϽ]g ^8Ԓh7"s-ݻ|LA?^{ti-Hw2;QS-,QgZF<7w }?WCVmԬb~ӹm͹ZJ]/?رE.[[bnۙV2 #_Ux.9J𽖛si㈭GO7n{h|/*FjZ_A[Oއ%gdfݷ>ψ+MsEw/4y7d_PWk~xo,?̞ `Ӵỵv3U?ݯM޼`Ѝlºӿb]g%]ºӿb]g%]ºӿb]g%]ºӿb]g%]2{-cz;jE{D{iYwN7ƻ#?[λJ(_ؽ^^[ڵf')RB&~mSC@(}OMk#P?edT/uuzZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWNӼ=ΐZZYsğ7}8Z?uѿ%k5ue_]jhV9GnE<|@N]ʾ#{ы$M.ߟqW?Ms6M4ص;[6"L"eʸ۹r4P;Xvq'7$io>xgRk[W4k;;֬6'#sE^;([ SSS7oM*&k?_h n-/|D+E,<ZJ:{3^_4[f_O{O)xj"x [st֝P<<&FKaqgeA"8&e7Hl=_ZgѾ$Ⱥ["UhQeJ(<mNj LjR(%U}Y};Z?uѿ%k8Z?uѿ%h]V:(?gK ON.N)*w))_»((((((((((((((((((((((|w"F`۟յX= rq$h K[UY|+o1qkGVS|ͅf5=ï<8|bj DhQ;~Z+t/? ]Q?LBSoy GSk:VQYQI-d7C7}@ExZ,ЕMQ co ZoUv:Ɵi7zU"{;^"H^?54M/Ú Z-eo !-y5[~^}l4[v3_– M|}im>=49fr/}Ey?>Hɑ')%iT\)%iT˜[BV7@˜[BV7G)%iT\)%iT˜[BV7@#?[Λ}P/q=qxQN`ySov29GCߝk ÏX4e֢k-.w1:uwW޼T0o_V'U V};v/-@|G^`7ZB[2 tHvut'^&Xx;Kqsš]5@aN^SfͿ¥Wn[zLJlEZX7Sܳst#d+c<1d?__F9χ^Gaݾo߻n6bmu/xoz/Xt=^}>Of[}Rjmqjպ ./uUK϶&/[8Ozogf~{Xԯn'UfjZ}Ek|BUݷn|٠#uq#M7h,k;XWA,|7]6v;wƾ%[ϊXx>yE.ݻ[T>G5 3iRl֗[)aUED՟ouoPUіBN,^DޫP >Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~$Ӵ CNeo-X,ppr#Rz^U\C“ͬxsϩk7ap(^Xx7_)ͼO_N| g|yZnLgWzg5KU𶛨kLN5=Ք_\~]ǵg|AX _Ks8F-*īm߅fߊgJ\ۭؔEuOu)w)_WGmTk XnͲyzoS5}C5}NZ&IY;iYx'\mr=8,?u)nao&!a=l#h Z@6C_E(,x [<o^/.moկ)kb7ϕWZm]"STm8;tYey*((' |\_nM׭kxuj$O]vtG7oZZaLOf~靠#?[κ-{[4=kTӬᦺbMހ<0K no{8 쑸+?& ZxxHm*WؗmO$wn}/ZNK"V;err5N&+§YD"(OEkV P\i&ѯRRޣ ??*m{ysgg&x"-j27۵g§YD"(OEkU?T<4+OyU_p쪮vUVzw*x?De5*QԠ2HܶqsJ gO?& Wl|Sfɭ趺^pk#bKDsvT|-hV"Ү4؜G-W#+6p/@4o?S,iZg3\AK&m%Jcx)S,iZ§YD"+8T ?x7VE4o(/?& G*M<+_"J(OEkQ gOҊS,iZ§YD"+8T ?x7VEy# xSMѯ<3]FydY4>vuڧ5῵AZ*(8(íSUǙHio&m( f Me|]ysQkyvU˴q k>= 6@i[z'2sC\׼We#h[DUfBǞ-@.YqF]R!ξWU~oZZoWXѣi[qFx7%d-m+o/:}sαAlHr>UU\_/ gϤObwq~lw}ۇh7/ u%?vvo|ͻ3UkvזZǁ-X"WmyV-]f_x8ĉc8S%Zan@CxvOᑧkWV.̻_eXi[j~#;I4~ͧH̫9˸.fš=Cjgu!ci2;_33ci5)gԝm3vVٍ͕?Et=nmD[Bi>ʍf2[jJxö>".~ѧA!RYO #W|Wa=5v%x4j{3đ:Fx7^S|:i C?m F;&+4/_VG54ڳik\EdCmvNӸnaSkYrn|H6jӵVڪ>m͹F=zC>"ᶯM#zGWz&Krs2aV?ZE?lkilHv^z;n€=o>=i>ckgiz/4NͭbWG sMG^:Vijw6ڥܿm6 3K+,QUb{mK+ B/#ZW1iZApb+|7b7U?_ißf7zv׭ei%IJZȊIhC>Շ@F$aiY.l._٥b˻wJͤ֏i: m~kV^>MPdOh]=q,]_ۿ߷nLRMC_ x| JlHrb:_UPEPEpPźšx>Oϸ|nN%9YB&z(/gG7GB&z(/gG7GB&z(/gG7GB&z(/gG7GB&z(/gG7GB&z+O&E5elHFˆ=gxFSI_Im cz2=cI㮶?: /bSv߳kkgG7G퟉"hQGgG7G퟉"hQGgG7G퟉"hQGgG7G퟉"hQGgG7G퟉"hQGgG7G퟉"hQG.vq:ɧ[6E[gwQEQEQEQEQEQEQEQEQEQEQEQ\cRu3720R\g-_:qC+@qC+G-_:\g-_:qC+@qC+G-_:\g-_:qC+@qC+G-_:\g-_:qC+@bD?)Ïto Z` xgķ]Oki]l$*&gve-cǖc.V$^SEm_/tӬuN;ZھKmƸxkZ4]RE?ŐEWwmmwqPX|I>NҭF&P2|^+qiSJb_i_ٿtRְ̅1*֍S&O΍jgO޷ *+p㼰Wwjq{yr HRy"DX][Ɵo(ucs '"ŸjoK~~$q6D]>[TӉwl\GVƟoHi6KI+e}Xz6Nikqt2|L_{ƺ7.`XX/ݙky'In^97nvI>Kwh3ynnu2acgt֓ sc <u?N{{ xn"Tr W\ f!~/oL?W] 6exyݳ~l.յ_~&YFGBؾo-n~lo2jRiexηZŷ).$Wݷ|NxJhxB4AHB5v'|A ['WS|5k^'z-uX[,~ѻݹ[~(ѡi=v4,8@v-[:gK\G0ZTVY~NGmvγ*Zy S]MR T"Xƽ彿t$58&2#N|򏖭կ xU(%)҉嬱U.ͫ_~Zt?~&񎽣i~t0TIfhh-ۗ|vZ&G][UPmOXv~qcĚv\\$:Coݬo[v=k;Rc49G/.t="K߶-ҼJ!Ɗp.󯈿5Ş=mS^խ ֠j]F|6񶊷Sjh:`}Pk!?ݑ}?Uv~J ~mTּKKoF'skp˹UUU |4aNpVK?wH;޺Z?uѿ%h]VYM;__G+U}R^uD rwm7WqC+G-_:度uOWZ%-5;q`妵̊5c۽%dfUV?!~ZόkѵY4'K, ]%^M2÷{'-_:qC+@Җ^ZyV74PA G W7~JgEq~J W7vtW W7~JgEq~J W7vtW W7~JgEs񏅼Iq5?RW;y2+tlzWA@xoq m%Vʼ76_+@EPEq5G? |S+2im3~\ÿxƺ5BRy\2s)@ׁUNb;=BONI 9\3|WG_+s %]S]VӵvMSxeԢ#-6kյX"Eu3%E;nev@TM'D4]&g[n!m*3Tמ|%i7͡i׶7ry(8FvbS@ӵo 5;$o[Y]vn[?Ŀ7l='ž+KkZ|71ɡO2cïtu|?_> ;h ,M˺O~~O|S௃,ޗqwCg[*ӳ/o}@SQ^7b:W}"C<7%W6WN$eo/lr{%QEq :KJuW%vQEQEQEezHK+b4?ZßxB]kQxj.fP܏ ۾#R5>Q%ͤn;GF/bx缵nP€2>'|Xռ%ޭPE5Q[E`{Uu2!']"TЛG[W:n?w5|2Ƌk?TꏠCVr%bۉbhm(X j7Y4vbԤlup+u ͷm{khn/kk7a՚xlR#Sߚk)ᶱ=j_Nd%yjS¼KீwOk5u=FioVKy4院 FsrPS{B-ZAyVo^C?>MGTSZgx ;5|C xƓG{[?m,b|CǸ*^v&~zO/.l/CQ#:^;P㾳_mD76'M5MkJ CՏi |;i&x dnfT}~u%~K߇F9&6sxuwmJݝ#x+Ml~m|\Z16Q z1Tu#xn-x;MroadBNKs\7)w/z|3 :<~+`xdf*}_7jɴ/goAiZr̞!Yo%{M/nfݱWf+@GN LXCl>6JWةO0|Ck}ml?ݻڼUxi)nݴ_^>s&_Z5Ξ4V҄ܬg܊6MýNFZh_`|3c|1WݻlE>p?٠buM;IKgnW1Z@dQ5Sķ-lna}H:1e[[23as뾸=>>!jj{d;x_j[;W>|h״6Q76ZUɥC1f_4/_J>7-v{x:$es.2vcM~)x{P>]OV9b{{#2}Cƺ7u8i/, W"e(YپﻻV·zcj5ӵ3 e+kl2=Xmb;~8ši>o9~1cgK0y{;ϝv7Ӿ+c3!]h3>!^+Di]ml`E_e{?, =K[l]}k ԷQNo<|"5xN hmo,dЄV4bEr ڏ_K4af57MRe%(Jʩ}s@đx7m=N; 戰?Ń]룪6v}[ıA kmUn-g].XiLQNf<@?O/4-laNY;bTV5>OMHo˩/R_5JqP]xCƭxgUu`2:[갈m%UXՓM-5ob[t~6 sfv{++PXz;z滤S(0Ew}M'n)߉4 kfUݤ8Vm1EVx`C,NOu#4QEQEQEQEQEoonk3ks]῵AZ*@|K{Q@oo9n#hUцOk7=Rou}1vZ킡Fwn5P'a]š-l5o%_7-w8GOoC_ѯ2=)ntAy#Kٶwpu?|3\Vv=a) ]6؏> :ᾏN׮aOK8vej[vws[~?N8tK[\iikyk!*+4럇UxsZg4/."kLĕFVݷ°?bBm/MJ]i y)wE?^F|E^z\_Ba\E t5-WzUWZk6b`ͷ_ 55%ڿ.5ۺHd n!CjCGA՛Zl]iZܥ 媏mh|5Y$u\GqzY+:FQ\{]:h/MIƘϿ~'ͷ;٨|Sw۝ByC5EI$ 2ۻif~(=t \귞,ҟR UHcq^F;( 0#@e}<*,bj>hV5Z|XCu.(ڿZVdeL|Q$<cw~+Q3+TQ7v7_@* Qj[)HwlڽU/'G:xԥ-4ۏ]]5Iufk}|cK] φX'ڭR_RO[CšVjt7:Σ~ֶ֫ eRFyimc:ºFqOe^vY?6 )'4_ [á`7Mw$[wᏍ"ypiLy3€8xDֳjZlxWSZ( (<{QGmWŇWO Z<]ܣC|g_wǫYG<ҴbKW+t;7%e]nѸ_|LqxZR,kqQޯ(oA?Q|g_wǫ9|g 13O?/j͜WzEF׶ȖqHI)˖Wce}?3_N?h>3O?/y'#NhPxwB h_dUrY2ӵ>m'R]>f *MA?Q|g_wǫӵ^|Aq7uq\X5}?eGYknn8_?o4/St3O?/y' ( G z#?=G~}@<A?Q|g_wǫ(?>3O?/y' ( G z#?=\ߎ"+K{%yYJJ>.'BKҨ(((((((((((/׷WGIGgj(((((((+$k M[U5覠$h K[U玭ǤXhmbo-cNYeUS-W%7fsᥱ.SGYOYb"=ZWN=>;kKN|T+o|2u&񎽭xKj1G5X1ʻ6m[ofOZށkwyytuo+/3l^kmoz-} P\O M4H RMxh~ l+s6>toާt*J;+YNjߎ%Z/5+Z[lOP(m }.~)ŷ:R %I)( wvm[u{ck:Ryu(}8oUn!~"h ,YYbXn+W]2~Dž<wxXDCH"M.w{@LQ^aG<[NQHeU &G۶xi&Χ-I [7mO73m;ۨ<#?[ιm*<>hZt^+yX_[Xmf y?E9'5V.SγSAvOfZH'ozo'%xqqxGǶv2x(ȿ, ,gY[7 ;|T+.+G o|BOkc1i,>H]ʻUYxl^ I~3_eG'%yw>׋|jt:6pnVbYV\/Z|'4%wM 7ZOK *?>/+#MymG,1}ݻ}/gʏOK *(/gʏOK *(/gʏOK *(/gʏOK *(/gʴ#?5PY6W,WTYǡV(3ks]q[[ۚ ? Ŀ ׹W_hܨ(+4? Vž?Ku-K[>iNS#[\+}STӴd5 K^EdbRW-Voe[sF5Slq~𯊵O?rk>ӭ>,tQ\,ȬQWmp'_ _lYjOko{)Ė}嗏_O)qgQu·dmݽjW Gn"״!n?kXv@ }7~)>XĚچ!cU6~i 5 Zm7S ?0rs@3kZrh<~n:nߝj e֫JRw#%Y? '7~t(EV[;ckXRy~e?z xYFi>ĊɹYA޼ױi8v LFyZ[[ ;wEGUuPVwx Kp<9G.YOilJ&ǕF-m5;Zկu;-A!GYXte}px~Km_Tu} Yn C=_F؜7nl༴&H# b1] n:ym KĀ嘚дU..575Z\6|͸7NԺaQzeFMrQS\kɢCf`eݘvO)a7Q)xƽu}ƚjkbīꙕv皧|+4nO<4<;uh"IDrOed\sPs'.[WG!yg_7i}wF>fX yoi_49fu[sM1YjWEk1Lo ökG>6 .]%2ڴPK]Z׵K-+L$K5I.C&x=zo0]}n#Z&-oww:ŻrvQ@Q@Q@Q@Q@Q@Q@q?ɥTusA:_G@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@qxvҸ?JЕMP>J-PN-Fx./f["ehgEݏֽ]CTRI}6Gfmn헏nq޹S J&17o*EZZꖂPy,CsŒpH^ثQ9lZFmi^=Ay;eXo&XffHVT6=[V,ay.ewktͺV[Z17o*S J&Ѵ=bY.x0N3۸.dadk-?|f`6nۜL|-+Mɿ<[M Vp[ItetoMUρ|3M{uaa$qu:uVO)%iT˜[BV7@P3qi:@9D"6wd]g°_;ݷ|j)%iT˜[BV7@7]NM~Y_,b'9ݕ(.* jKy`}қV9eٸS J&17o*/h/VZ6ƫdqs*FiL4}Oc.IpjדJ@S>^8j)%iT˜[BV7@~ uKMBL͌%- 8~viAAᨼ9SJ]%'(F۷tL|-+MɿwCV#EoXO[<,a[ȯ,ӿc[MZV.>|ZA[wZpw[9.wǚFa :&8bNc^@4=+L44OmlVD_e~(((((((3Qw_6_J(;/%J袊?ܷ55΀ @|K{xoq m%V=ʊ(("6gumq*)o MVZ~C2!U筤A^TeN1^aeD6I2,+uXgZ'Q[;wVHghԼJPȞ6$ŕǂ?޴3z5KwZ^%_lla{EcyX]C_OEHS|2+2 |8ӼuMKJm+IL^WY|z}u$ͥ 0j6zrJ_aUv|_? Zgi)Cis٢M9HY9޵n<1ק.v=mp6cwé-!~_HEӯbYn"Uqo6E\j[ _~%o'E,%scxG~U d?C[Ix>xךKt/K4 ?[ۤqsQ *_n>Ե [kh3#kaYi"R˻_@6it +Jiֵp{`(({h> Yqi\1o,vx6~n̓=4NY W{"|ͷwu :Kk:nd%VWTEՙEy}F֟Yڕ&u~!iԵ[KR=ͬ(byNU&Uݻs|YZ_|!o-YR+ΰ7]wmeEv=xnĞ]n廵z\Evswր<>?#[\wi?&=(u ?whAqi-/m=x %"mݷxֺ(7BSM>_ݠYWkfmExxKexI'[jeyElgvyu*mmm{_Yɨ˧ yK,z#oei=}dc7]Gx$E76Zi0Ki,7ȭ~׵MK+Ziũ-r]3OWWQ@1·Ov-N+/HU[vz)j.kwD!ݷD|+|kٯml系&9br# 2b x¾~?gYeyͱ\utQEQEQEQEQEQEQE|\Nc&Qg\g_2iUvtQEQEQEQEQEQEQEQEQEQEQEQڻJ({@Q@Q@Q@Q@Q@Q@Q@bD?)jY(Y秵hE'_Z(HwD+PxV (//:?G$^;u€;J+NQ jҊ"CE'_Z(HwD+PxV (//:?G$^;u€;J+NQ jҊon%|UmRȷ7_Wrڮ|G YO n&;j+NQ jҊ"CE'_Z(9o:+scEWu}I."[yeM]QEQEQEQEQEQEQEx3J7IR:<%e@Q@g:?ܷ5^\Ar ? Ŀ QEQEQEQEQEQEQEQEQEQEQE-'/G@M!>٭h5䒤Bا\+kx--OAq𳯊d+IgZErFbutn=TJӿ*P@"4C]vn_,'5{cVg]o"UE܈~ҺI4M*J,l-"0@ ӞTmJ^m+bղO5|YgS`zV7C4DnQz,QG@G\H|g ?o>jw>-&p>Up;3VފV\c$Wzά**@IJj=[^/ iϦf9$~bڌnp8wqZxkCk\hido+/_*|٠S|{q-jPuKKi_o,)Wn{\^%VVmX@r΋kO2}M_xrA8tďNf{|2Fۑ'iyvSֵTYXYYU-6yv4۾`Xt((((((((3t/4*:>.'BKҨ.u/5Im伊'iyڮhE8`oeg|p{Xu'O מ%P6>onڠoO!4YdD](cTlum*S`0:7xwL/~;^wiEYfdd++.>uSݩ5=x7NY rE>3w6bj kF/t^nQNW?~qk7.? ZK:5ZKs*@0>2m |QH]wLPԙ ŤQYb;G̻•GYM}eώ|AX/C6r)i܊7n#ymFO{2i˲+eQ+ 6xA2xDĉ5ݵV׈;:»e~FPxJ-|Ce>ZS}3mtC7 δ4q6Cp+G&ﻵQK*\f,kzᚶaͥYG/ob(doo$E(ͅ,>V\,thtVPx^+h$L^7mU{5׈t{ uM?N35F;yc[[Ms>#iv1$Zq.ߜV-Bs?to㖷&[ߤ^!u.7˟kN5՗I#MA4-V(&sF9-}( it5k (Wtp,cՓ;i̺;^_V+j{k*J-۸#/m_MP\_%o/׷QEQEQEQEQEQEQEQEQEQEQEQEQEQEQERZ(➫Iiie2{hQ[5G'_ uyݼ=$v>Ie;=ty.T[EPO|/M>⯧~#Ju-?šJfykߕj/?^,}m6xYM n+/uk/z3ɵo G.-]Y|y_oOjJ+4/ޡenhzCK%hyjZ/5 nޭ[k6ƙoZ4$YA2,S\ ]svۿyQo^u6u~8Gw]GC,!Xvt}/fFvP)%]x|Im.Gii<Ojd*&빺=SN|+Z5jwvO-6EQ"e_m݊|S>-nڬ߈mlmṖXVyGvw^Wg|Dk/kZŽuM*O- ?~W .jS kUԻ5{ZIs)KT?r:Ƌki7zu-4 sVuOVм:+Yk mٞ9-e]v]/\7rVeL5Ҵm>FHܲTmL>(\j֞!VD-ͽǟk&Gu-[𖫞4MkxԷh7Zo]U~_v o xO^h=ݭI寙lH6nMڇZ3jZ6:lwU/? xX$t^ b%]bXj*_/(E&>!TxMuImddoMWAxkL5 k5䐸eO1u&[kum~ʺ=&WZ,![[RT+xwƺ5KJ!.%n~DX9?4ѬZsSӴY, ٗkamon.1WNn\m/CW5×ooQ[ o*WfOHSҶήuM@^Gb4aw24~o}Z{˽;NMpeM/3WSRGC j34}bxܮ;Tc9յxZ--'H>˛'w6cڙΥ&\].[t|'˔ x M't3uSA%o䉖(Ydވ6ܪûUtol]3_.5 %e.Ίܫw/+Ҭxs^xGԣ̕%ksay?7yj: kmtN Jo^ yUe}jKnvhz( ( ( ( zx.['=\\Kj%l/'J>0 "!ڣ_?jItφpyY1{? /Ns~3C} 3FFȵxu/lώ?VI>mMt,]\N߳W~CQ69Fx*x DY## sSix)?]'?R"Z^JOWiEyt~-p8 K&Y|)%yTݻs·ix)?]'?R"Z^JOWiEq A?9Q@_-/s%'(OEvP KI?ix)?]'?R"Z^JOWiEq A?9Q@_-/s%'(OEvP KI> #'¯IqHźvPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPOd봮o~g mݕWNrM+&k?Gz7(*DFZՍ7 &m]v]~aݪK[ k%'D2|?gx0Q]~Wa mfY='ԮA ŪĚ̡BKtQYnygVHo.?Um.%VX6ʻU껷PwWp]DN7 uS-u exbXiߺf>دmxZ]2.FCpc>6-)oURtA?_:;+{jW/<3:׎h'֟zO7I4wwQG'wu-xޮ[if{3x2N⯄UK庒´l#o5R?}+]zK&Wƫq*i/'*~-} o7p}'bۻoj|'m~]i##Yo޴ww ٴQEQEQEWsA:_G]q?ɥTtEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqw9 ZVOϦNSYEQͳTQ\_':߫?HKό՟$PiEq_N|g~"Nu/'>3V@s9?9ԿYEvW ΥD(Rs?gQ\_':߫?HKό՟$PiEq_N|g~"Nu/'>3V@s9?9ԿYEvW ΥD(Rs?gQ\_':߫?HKό՟$PiEr^zB55" bWTm7~ׯuQEWha]qz WѶQEW(;/%Jgo͗vtQEq[[ۚrg@xoq m%Vʼ76_+@EPEPEPEPEPEPEPEPEPEPEP𳯊d+|Kc_t#V]CW+1 K'HI<.Vu>7OFvhfX.>Mw4;#lQ=f9yf*xb-Ҵ$OvcIҴ`Uw劷lo UԮ~E*ۥ;#jP"SH8$h* OgHG?J_:OiMe&4kֺ&~e*6˻u}Qi^?CЛö^iui,_fYWnu^i~Ş4nZxDh|M F &{<+r:yHȻݟZW8Q឵5텢j^G@<_jߛnsk2wrɣϡj7iMf-\DMo~] >P` MwTv :d M#ʒ.< Gͳv=\_$P?KAeV T{Sɮ]M]<_xZM;s--Ư.dWQ嶯2j :񮱨[K KѴRi-ĮQ4*>_=-Ǿ*dž_xjwQb2Ċ$WOWKpkU~!~!+w.,㟛fh:, 5ɸ)"gY|F v}+h ( ( ( >.'BKҨ볮3t/4*;:( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( HӧWi\_~#t(( ZW|CKHƿOZw=G.4^iknS?}O|*0w]ʹN7;ʣ'> ׭9A~ֳ.$dIGoҀ=_|5/3MrڇLWj}]|<7k}M5na+yeɰ|ۙU&7=ki^DsZ&]ntڋF\>xL~iV'BV u,),zPk?|/ZJ'$N]NIw݆|Z_[/4[KF%=սһU^k/~%Z׆/ķc^k m>c+q;h~b±\WO[EEI Ms@#H;xği x$ݿ?t.=I.dyC]~Mx㟂5gA֡]ΜZK%LV~iᏂtd^wf\EG??͟ ( (8-gwSk]qw[?ֻJ(+?xSzҸsKG? (+go͗vux3J7IR;:(8-vuoonk76_+^^\Ar((((((((((( xMgׯ&P&m|K巃tmQ5=NWEV|" JK=΋*PoQftG t)@^"V{ۊ7t~+ gK8(rcedNs"Ct.=Qjim mqo=U4\D| }6jWE/P<מڎ Dh_`JOBg<5J_]jiz^)I짶LkբiQVQ <]V*C +?-ewЬV2=cEki^0T'62>sͽ յח ԫ, dDC>]wI_[GK-Y d %#itu쇈ciŴSyvlGܤag+|} klvPErWh&n#d݅ :zou2{"SZ5R6패ɹVZ(?+OBOƚű5Xvv"ڬ߹䎨ͷ_Hu}7]mmu VVι7?v˲ds#_k/mρuIlk+*,϶^[l[~_j+5K~5F}JE2H[ҫ<]XcI?x? v/#-Wpmf?7@EPEPEPEPEPEPEPEPEP\gKn=_:6&MtmfTKie«qEθ  /Qa?_5Q@_#;XƏG|wE(vPE,?];(EhwQiEq/Qa?_5Q@_#;XƏG|wE(vPE,?];(EhwQiEq/Qa?_5Q@_#;XƏG|wE(vPE,?];(EhwQiEq/Qa?_5Q@_#;XƏG|wE(vPE,?];(Ekv ~:1qމR:eccv+߉Z4&>t{Uo-Nn_%l?/DUc|bU rmG)YPfYWjaW{|K|#k 6jh:]j ;lE6ʫnQ9-_%l?/DUc|b}Z/iֶitQ5"FULJ6Nm:^j~8t-/xr>6Jho /DUDIy?*m?Fo_Um>Hu&\"o-_jm[VZ炦t/Ȑݶ:o/mwrhcI/?{gQ O$=⫈Oku z~w-XO$n_)aW5Bźxf-B +S}⮬~2+̶yws:)8 /K"$G%?^wz=Αj!_* ;p?sotσ^0tmt{ 5}N-:k;m4PՏ^ gX:*dWop?>$ӵi?"o}gUoҺ?L|iD3ӿ"qKՕYTKUnz+)SЭOÚƩWL{xt.[)QL]G&>4KG&>4K@Ys_,Wtd%)\wou_ x+WnbonSISk|9{L|iD3ӿ"L|iD3ӿ"i>E"\y[`ٸE7YM{zƋ׮.6`m`n+S% H5Ѵ?k?||q5w^P[%ڲ/ Av덼w__g4ⷽnaO,Q}\ȫ 6ݭ]o&>4KG&>4K@CYxOz kծDE¶\E/Kجf^Z#|Qy.G̊۴]w&>4KG&>4K@׃&×7#ˣlk'v@2>^w<)Ziɯje׾ Եhn4%M<#rʮskcPƟI|A=;(ƟI|A=;(㋏:ݮw#P-4%_ Ӵ}~icO$ cO$ xZZFxZƧm7&dOseqfd)_]]V<%w&fz,74vuw`s5/&>4KG&>4K@>I}vf-~L17cҹNx卬COv,6W1oRcO$ cO$ b[W~6teY*F2^o'\MN'C FIU&72p1_N?1_N~6mA Rgkw Sv}pVZ>i:즴o=\5cO$ xĞ%@><z^뫋)Q?ңzQ@Q@Q@Q@Q@Q@Q@Q@Q@q8?볮3>w_C=vtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEJ=GZa9"+y!rv醙]>!wp\x9dlgjr/[gúY=G,qT~򺍬Wi+G|9bk[=*Ś{YZT| ٶ_RFխnX&'M:{pVjNe}pO~V-Kwkݿ4H1v}h2'ww_׼ O7Eamc&:v(q.2|oIK25b:kK]m#}tb~}ʉ6Wv#i:MkdgZSgIG5KA!}JvZZ?7cBy;@TVL3k:tww^Y7I}i:}ݽ\[5#~o?[қZ+xn~3A*If h(/\O6»J-l((3Qw_6_J(;/%J袊?ܷ55΀ @|K{xoq m%V=ʊ(((((((((((/g_yWi\_ξ*dҀ ( ( ( ( ( ( ( ( ( ( ( ( >.'BKҨ볮3t/4*;:( ( ( ( ( ( ( ( ( DHͣX*V*ź^㟈6WֺҶ4+]7t=Er/Uft[T5+ѠeKR #`WxJN;@5;@5xo7+o kZ]YcAQyYfl~Q]C'ǚ^w8DR柳u[UUVTo(̻vץenenW^',k:mR;s4FS*oENmYoLZnܾ9/.GvXHm_;@5;@5yof5VhjڤMwW1c3ddV?,;_FG,;_F@Q}Km}vFEmxc_K#h7j"o7>7lٹm/Y^wտY^wտ<zy?u]ⶍh~cgV({-ڄUDh_jl׬PEP\^%ŸmvZ<)`=_FPiEP\g?xl+3Qw_6_JEoonk3ks]῵AZ*@|K{Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@mï \jw/&:xP?yT› ÿZ$iEq|;AeM|;AeMvP ÿZ$ ÿZ$iEq|;AeM|;AeMvP ÿZ$ ÿZ$iEq|;AeM|;AeMvP ÿZ$ X-? ^/_՟{N|_,їθ*nKr3 մCֵIS,kxE_ îk[07mW>E1gڀ"GlF?zg{IdvJ oZZw>2V&xV".!Фk8Ƴnkf-eU.^LGt q& }te OVտ&Vտ&J(k -[hk -[k8Vտ&Vտ&J(k -[hk -[k8Vտ&Vտ&J(k -[h᷆y|Gw%q^xQJ,썃"J((((((((((3>w_C=vuxGNHgΊ(((((((((((((((6F4WF߈2C:;J( ( ( ( ( ( ( ( (8-gwSk]qw[?ֻJ(+?xSzҸsKG? (+go͗vux3J7IR;:(8-vuoonk76_+^^\Ar((((((]Χ\kgkK$|=Ub]vRUR~:mRC@_-/s%'(OEvP KI?ix)?]'?R"Z^JOWiEq A?9Q@_-/s%'(OEvP KI?ix)?]'?R"Z^JOWiEq A?9Q@_-/s%'(OEvP KI?ix)?]'?R"Z^JOWiEq A?9Q@BTuM>;;Ȗh&CeX~vF<`;OPEPEP\g?}zԈ~#8V}Jjgފ+ XxŚGou$HuXguVXYw6}zgiZ[G-֟ S]"UfFC#t{R; M.^^j"+YinwW KGQx6N[JaK]%iī+>ymm=^kri3<8 .~,mRv_5wnPW,4w\t<#[9]&^\|<5QfcWy;!UK.ܻrNk[ Kߋm# ( ( ( ( ( ( ( ( ( ( . [UѼiiWKxmeO5` 0!N3])) l?x~3])) l?x~3])) l?x~3])) l?x~3]T/2Q&y(PxO͆͝LYd>IKd1bWr"ܳx*djV]FiGȸ\yR][:z cy<^-mSyv+EUr]vjz?őc"%p Rv]}b,w&c @SS?kfeo} ~_j67}ZD ]me#ЊTe)aisygH:O|€?A>|BӾ&:Oa)yW=wzIǁ]FO޷eʹHOt~f~VkZ.mg jSSipnUe~3޽.<;O<KO-sKt \Z,N%g+\6q/ k>Y]*hWM}Ď?\y/oʽD5hGFnoxVU vGRoY&OdYDlc'Q^׵xLsw"/M+?`խG/CN- ۻAl~PZE ֏|Kp'R+h6ڛYWWwKBmuNͫjrts:j+"۴嶢*((((((((((((((+7Z>i:Ţ]ml0a+J|#-Nr[^Z73A2^Ocb|RѾX5}Ӿ:SWi@m bbU((((((sKG? +?xSzҊ(F|*Wg\g?xl((rg\g:+kh?/U῵AZq>XY2Kxs*ʲ_Wt|#<_N,J΀8V>z|#<(/瞵=G+=kzJ(cQ ?ZҊ*56S~p77+|:ֶQx^b[Zc"?%kM_+|*ďʻbwQw˺=Wp{5 [R5)nmmB_%宿HM*RsͬjH҆Sk? ^~=,~* Mu;x%Rڙ]c#(Yһz? o xw1a=>hNg|^K|V۟{G+=kzV>z|sWf,uqͧOy/bTt,6Xkw>2x vM]Ѽ,nķ4|#<?XGy_?>zvP ?Z瞵=]±ֿǨcWiEq|#<3gƾFVun]Zd/6F_7OCQҊ((((zvP ?Z瞵=]±ֿǨcWiExݭiT:>f#[V}.lmk:=O9jz..~UԷltMGIiTg@ ,rȉ+?l[۠bDk[uD_?XGy_?±ֿǫ xSo"ֵM?^z|#< oz~0xc^05m CmluI/yۺ_|xr-wBz|#<(/瞵=To? &gMj<1S^Eq|#<?XGy_?Q@_+=kzV>zvP ?Z瞵=]±ֿǪhs4z.fHSw36>W=|Gc&h(((((((((((XG,V+s=s> LT!xV > ȇ/.J"CE'_Z+8HwD+PxV (//:?G$^;u»J(NQ j$x[YE7_ <kFi>^h}w;>ٚ!$) Si:fh}۩[DA:rMr|2G5SE0_)Fe|t氾$xS'o/DZ-sUA~]_WS]hZtj$:nnAYs5Cßf)Z[(Uqgs"_'޿Ïǣq4p;'ḩ<~MS}{(ˮB-@'Yi~ҭ-S(*]/ *f).|_sou i:lRګrۥTOEkQ gO ږc.6qnQk*R`S%ׇծѬL mJЂquHc§YD"(OEkP^>hZz id[D_Wo\_*M<+_"T ?x7VEvW gO?& @§YD"(OEkPiEq4o?S,iZWF߇?2MFT ?x7VEs>]zh^{ :+y?adPvTPQEQEQEQEVg?UտoN$kZ%ۥjS_Ei0^5=ހ=:bmId?x=t{RWwߵN >scj?$zj)7>^\yFdkIY_©:|7[! 4;\Q\J*T>x-?r1 6w:äoimw]w_m/RUw'GfjvYCqK_?%o>5=kOu Sӷ+WwǕhGģħGmi`:ߘsygQo=\ͣ*?$>NǪY|~ UeԾk#ٍ~|x7)Ѯ52f.[87Q3ZymgxVWi$nx_.oximdj6o gOoQ7&׵m?IZ,ZDX)UF9 OҟDDؚyOL`VG*M<+_"T ?x7VE^ /WӼ-[h*V-Sʛ?ƯMOMJk-+ %w#T? X_4o?S,iZQ\_*M<+_"T ?x7VEvW gO?& @§YD"(OEkPiEq4o?S,iZQ\_*M<+_"T ?x7VEv(_ɨ?S,iZS൅km!HX|ߺxEQEQEQEQEQEQEQEQEQEQE? j_]=v fEm|wˋmF^>*A>*>*A>*>*A>*>*A$kZ{OS"Ѓpҕ7~Z>4ϧ (>4ϧ (]H bLyG}l۟^*έhncki7/V&/=Ӽύ??<ύ??2=֍oKNa'k=*IJZ/IK4dHു!v/>*>*A>*>*A>*>*A>*>*A=}kgyyxM^dx>U>4ϧ +ZMOQmhty|Ϳ}vw@_'%ԗ?UQ@_'%f_➋EsOF-|%͑WS5PEP\g?xl+3Qw_6_JEoonk3ks]῵AZ*@|KS⟂PGs}ӭ`;HjF[/_ǣ߄F+mvWDWQX1fV۷Z> 8*uRAnր>_޵ZkfeԱi_G*loSw_ďG{yuKkyu}d[wܡwK/ͷ/h7LjVcaO {xU$_KG 󢟛w'۲DmpG|Egx-6Yum@CD|K'dN?Ufv 5( Zm7~?n`h LMB-p7WMo_nʠv+W,o}*>oU/'u "C X'k+/m>¾b޼ujBIPYXeHaq@HREPEPEPEPEPEP\_Ҹ?5@W[bFy$vڨ'j7?[hOr}ͷqMtP^ʇ**؊_6w#{_xNO^}ZoJ kdrIo]۔U{:ơii7z ;H^R .n?>'D WIEvEco+4~y?2fۖK? toP7ԵsV/ (~ExZ/lp΋,onV׆z>7v^xe'Refۓ}ϺTztOYOUjWjķ**G\*/z(W6w7pEqz-cweVvUZW>ռW|.umUo"u4\'ۭM+>Tf_/MS>WsW$hX^UoWno@|mcj:Fⅶ卬nlX0ܩSҺ x( Vmuk-$eQޣ-b|h-汾-Z75xmuy{}k&{8bq+6S5TF*ozψ4 C÷,]5̊ʩV 6b6V Z+kTɬXnY"GDX`b;$n\V &Y$אq$N=]zי^'i$_i+GW!Dg2T -(on.dİ6xG|`<7kiƧ6I~jTdgc&˅_⮷Ohz ,5k:Eg17w\?Cͥ?zE^HѴDrejπ2Z;5 ZPQ~W^\>ߔJˆew8z-Q@Q@Q@qcc#:>#FuvtQEQEQEx3J7IR:<%e@Q@g:?ܷ5^\Ar ? Ŀ ;k%I7Fm34m;e~}5|}xZÉ&] QӿDMj->-޹+ںn+u;h^'䎿*σ#E&i:4Y\Y]hre(|GwY~֎'lM5/b u¬TG܊{o͊]7ⷉ&6ּEkF=6vWwK xw]Ŏ} $VJ]i~lvdgDpNΟ:|38j޹UkY#KXF04걤h-;WxËR:_5'IfwZP۸Y|L^[2m@gKxsC/WTSDSj<w73*"o4Qt}SVҬl+-'/1]Y[~J3:ֵ8f֞HȻm֡/Lˆ# [@BֱVӬ`+/_뱴ѹfQ[k_z΋?^O.{yVSi $eG^sZoj75bDФHRv $hYv9t mZh 3Qcyb^SYX}aҀ8AgGеѭ=R(xDcbi2,~^nc߃~7rkw]MFYk R "/̌62>V[ַk KkS]^,N6y~QEU/?xi?]k_El*"F(G4f5qjK 8~_y}ݸ⼻WO{k:7-M:YgS#[7z+[+u;u;L~UyvWfwfr,γj7~04mVSɖ)cyS2%~@6xJ^5&UoUdW,~u0wU kw>q/,=wq-ͣJ}bn͵~^_|+e4OPl:dȒM԰t[f<KSUUؗM q"w_y~ ^ oo簶9`YgYZV*~}|DπF:-fͯڅҬwm۷]Jg|+.f]<C}+fApcii:k\C[K)A1yvL~b>~#Cj#\!|NׂJX9"%hY]cn;[gx͛zoÝ*^c6KWfM$^nE=3Pt{fCe2b.ViDoykg5K{Ӣ Z "'أ+ C2ݯZ׾zj6 KK`HQp l{T3|9MK~ KmcZmV"QClbEۺnOm#^m{F8g}.s,IR)*fvo_xPޝ=GP%ԯ_S_)X]Qв}Nӻ߶Zuymco#32bw2W=M3C4VROIO\y$m*Hdv?1} 赁RZ%ǟq:y~bHnǾ+⇉g𧃮5;+hn/{{[(ebʐoA^{tPq4RꅙVEfC=x/l/=~ZK¿,G"^gFn~h7vAqu 68U!K BEyi1eDxVt|H/ г _MxWbhm6z\o,m"SXnhاs|).tˡܷk{*jb_+Ag-svxWbhK¿,@ΧMa_PIN[RuǗ2* o Wu]k6]*WmIFY[/[G#K¿,G"^gF_{H\~9T^ݬWNU鋧_h _KDɪyrq#*tb~]W"^gF? :7'.~xcLе]7wvvgfko ͣt_UxWbhK¿,@%F?- 7EQYѿ/&D+B΍14[_o ͣt_UxWbhK¿,@%F?- 7EQYѿ/&D+B΍14? |?joi:Eoeڻ_Z.|3Z\|_lR\I@G͵й;U=|A74a&eUDHĽ[~$QkI^΁t{>=aK +/۵?+>2]'/t S;JUK܁rˏqY˯!kBJK=GVӼBd3CVq*׆u< uZѢ?e8U/J][ӢԴ),'HtoUC|GEg_ yܾ"M>"Ե [5HB2_oczMGľ' IhӼ[#~yV}ᶪz= =%Y??CZ#x8W_w?RYx_Z-U)cHdta.Tחì5CU/usmhD:+l}ɻs}+Oz|)T5+u`K;j@v$鏛(liQi#iҳ#uW[-E=ͭ_Cq[B??X'"F#w:}Iw+r淕k*J~k>/x7F}o{9,!&THv|#z!#/ o 7ſE)wvTW ~-ԇ<u⫸'5;f(+ Y#Uʲu*Bo6Oj"-:fTTm^Dsc4>T8,>1Yd46Zb; b?gl?+>2]'m3Ɵu]f_JZ[[JjhjWVbK"#"u}/ˆG4?+>2]'߆$Gʑ! %w;Fl8oG8+%eDo&n|oV' ο+K~+OΗ êYAodv/::{ mz_Jn+0yZIڈs1B%uX-HfI?\}yjjM#wi> WټQ/O-SG𾙨Ĺ Iv3327}4?+>2]'&i~1ur&"dϼqogc#^+s6 {qQOy?ʪ72u]N [xRkʼn#YV(5Vڟ/Q@EPEPEP\g?xl+3Qw_6_JEoonk3ks]῵AZ*@|Kt~ ~ \?<-{V\+~\؇w3wVl_x'}Ι>wṠ^UH_{4/Xom6o4Anu8KK\w@~&;×ZrM_Q V͕5zĔ<;V|?o%c,Ҧbʊk\%oLџ_g]N+*ͥ_6 gލjmT|cMOtOŞteg@yw ,em5lxGtjZ4[iWUfl6kvO']GθtQJ'ޙH:s^ymҬ5y߻ZY 1q㶱״QuwKmٛz&][^O _LP;a%g]n P|]c[w:DŽtxoۛX;_O4rRv|mןG].{xRyuLsǯZD\kѰ YQrWyK{Ei5`J֮6a vn&*~JocЗZդ7ΒNEu!ٽ_hߌ-?jǢ:W)ٕdhUJ]g-u۩4b-/4uUkKde3FVfګ@oSZ͒h0Xo=y9߸mvVzڄw>#:j6rltr(op>n{KCY"[,p٥<+DᕖTVF\y`xgz~ ҬtKK= yy-K<%|odFͶ3]6hoo t"|*?h,n9n''XO_ѳ.EaxKGf>4{}AInvaUQ_+3r_t/xo)5#( ( ( ( gyM5ig?Uտo_'^MZkk$ K] QEQEQEQEq?xw)_Y=C9}jYʉmFQUjm57f]~Ú0h: ua"{ ŭ0HI?5b?OMDH'QxO4/;6c{|1R 7OvڭK-*(~eh>%;mq+*MW{&buwmľ/eڏ;u-CڼKSvvZυдMm5PvtDϖL]r~+Ž&Kfķ&[iqe}hۏ4oѼ#sx;R Z^(hɻO}h.3 ~ xXTX.bܪLI W5ͽŧZ4q;I&hWj.]Em72]g\ZxW om Ky|AeVwm`/͓h((((((+Q#PѵW=|Gc&h(((((((((((40 ?=lx'bYo\-ݫs,E*.x[.닙<I449_ٷ1IU CᯃY .V7Kyqh/&[InwFI_koOt;\5;ARN ھ Z7-Е2棡階j[){)<SH*H5?~qjvKqy ޵wXD}:qMUU_?Jѿh ̚t|B(͆SD#tO Eҭ­ww,E"gPoªqBVG*%h >`MvŮC-O$3۱RX]{}zU-?᷃t=WGM$o"dyWj|Êo*%h ªqBV@zt=YⲒinf =~jþ ׇl'4IX6j|e:O~e' Z7-Е2_ z}izjj7wJ,1x{`.Vekß 'OJ}CSKIh/J<}-]w*%h ªqBV@t=W[5n k} xߺT߄ICtZeg%ner.+T0 valU|8+FeWÏoZ?tYGiI$pηS<2*l"'=c}GN.&wxV]?U|8+FeWÏoZOco]IZVkЬ$r߭YҼ3iZ:}w%/'!''w=yU_?JѿhU9; %}"Leծfvv\Ź&vO #ᾅpm>opOlmWF߇?2MF;J( ( ( ( gyM5ig?Uտo_'^MZkk$ K] QEQEQEQEq?xw)/E5q_|t ?j-Vvhh_U}Xi7ZF.*+oڻG˜7˻v\o|A Z𞟪^o^.tz_R';z+O|+k t2ȸc\Z V[UxZ-cd4ٽ}2fkBakw5{kt Kk=;me*gu+5{evZZ[‚8v(AYZ*]?Q.muYP& $)e~xp/|m(JŶѵҙem̭&v*ۗk׺0VYtmª)mPѺ=Yv2p%m#z8ܭCWm&Yt=MŚo4:HՓJibϛ,jʫʪ2ZឡxWF^ Wm.cY6yv{5->&ȵGlϵGsX'/d񤺟C̻xdvJban]^7scuX5kɬbUt)n~lM*ˏhi.&>Ǯ :d'o<˾ ^7(c;E_=?_?WTu_U~+v |@5Vk˛g$mgWvE߹6:aYޙ3O sKnYd!⑑ FR*-{^3`5Kн('8KAu~|E# 4Sʶ2-UvemmZ|:-u8,'imr%QA~dfqm3|􎳩Fq귑Y[W?ˋ|Tkii^jR,,k3 t5⺿ 䘖wyg{}ͻc]VFo6wݱ>QvOOQlFM2'z+2[|( _RԵ_iwWqxZ,(~[ e6n话'յ7oO"؋ ^UB,ݷ~ݺ[jh&}^xFy͏ȝvwfoz}^kmsPcKLlj7 0|NJ 'O(>SOTբ/N{ԿCJ[)CnlWPEPEP\_Ҹ?5@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q$6m]Vli.5+HȪ|}+.-_-2#M #lHFˆ=vP#M #lHFˆ=vP#M #lHFˆ=uZ4z}̱:Dmy쵮j%s^QIkn%UTPď4o(##M #x[Xj!@>Zm* qH#|{5]>0&>-SI]eaKdɾtbl@ď4o(##M #|IOt=[Fq[W~lnlŰs$c^k㏏ oRhڤ "2FiC|n???Dѿ?Gď4o(#cLѼg T%ƽc鷗7W -&o._h͆mc/Ki(6xK}xK g+hB&z?~$ЉDG&ks[y7 :wz_ǞgHfcDր:퟉"hQGgG7GMn/k8Ѽw}LvZuߕm3cp:OfA#mN$7}|yEBy@#M #lHFˆ=x_iº+4A.? ԛYv.ߛ}گ(B&z?~$ЉDJ(B&z?~$ЉDJ(_cQcFJ%!B87+؟ʺ%%; vQEQEW(;/%Jgo͗vtQEq[[ۚrg@xoq m%Vʼ76_+@_'?yRg\AezvW ?Z瞵=@±ֿǨcPiEq|#<?XGy_?Q\_+=kzV>zvW ?Z瞵=@±ֿǨcPiEyw<3~Qlc۴zsuy sdo>GNle]6[p_ҊXGy_?±ֿǨV>z|#<+#oß&NG+=kz~x_Mխ5k{Kֽv{w&dh*#.8#@uQ@Q@Q@Q@fxE][3ş*7G &E-t5|5u襮 ( ( ( (8F&NMOTv"[x#^7͵/MozBxOFU+7%Y h_)lo7rmPۙ~juO>lM.Cij̛}_P]:ͺ㜳#c dV>uTƳT]1Dbt xk#2~!vB]?vbx׌}]BQK^xvQ}>mNDy '$Yʬk_7=ŝ׆{;d; E"_p- >ХHm h/'=\ JVujVV6w2`vivW^jY~/XGdžF5Ɨ N<Tt|}cmvZ/iziseNffuI bؾ~F_'ĿAEqm'G۵R CgԵ/ 6ީpkM}}#v$_=DҬKYP|yK7}±q}? YnAgi¶ԕn;guK7tmWQwG[KsVx߸ _xDԼ]])u_R[M/߆vT KE4;@-B[/SO)fi;n_K=Mu?G]a5x-e5//w2\s3qXij WhxE_ \k_2#FXЫX:29~&ЭbQnnqaټO;]m;q 蚐Ծݦܮhw ȸwFT?DҬ4,죋MHt#u_ָ+O]" ?"֓D]&Y.Z%J|-3| {]4=W×:&m,p#u<N(42MAii CKQmUbᯁ`?͔w]؎mj1n[hmqΛ"ح/JYg wOM?MRZa\v}߻6B1@$}M6C>!%յ XK,z~6J+s \mU|M:bh!LEEdN7 o^C@[V$m4˽%េ~> _4{~F*3<=?H]Sp/#S p"UƺoP|epuO짐FwǨ_oZ>OxDCjv-\$K+)>Ь5o ZI,LcuztqctFH#S rZKڗ)OE4>]ź|χf?2Rh_ {_5i^z\s*$y.ݻ>3O?/y'~ xu=-u q2yJtmo;tZϊ?A-fHuhv(基e|g_wǨ>3O?/S>3O?/nh, c 5vA?Q|g_wǨ(?>3O?/y' + G z.xKJw?D+~lៈ?hi,rKY%em6ۅǺ'B-:3;\F |Ϳs  xY6\xrmODnuoZ<:oWTݿv>a۾ZrnڶjZn{AjP3,Rw{_5v_ xOMͨQ:b[jj:Y*ec WK\4c$y/|KiŜM#ޮv*3*& xhw34o65V Efa=[m|%Zߏ>"i^١e@dSS;cyh}sDIypK7U^p̾?oQ4\*T&)?n=00,Ӷ<|LQ{egmK6"DK+[mWQL,%vZmۀO"|]0\yt5+IucYeÏz3' }kzDLڔ+[DF1ɝ€#rXOοj FȊѮRr$&6ޔ/vjMk_Z:&[;{IQmRUN[ i-bK=&`2Jw7Ezޑ>.a6 .zgpohiC0ݮK.Cm\lhP$9B՝XRӶ_eNIx[>6.H|H a~y:pb:3*3 WM<Hݶ=Il<}[TKCK}^GJ,UaoqS-pU)M.e߇=&t"9qo(}}.!i x_LTm]Z<,]W?3n oHVIVRwKh=Y3P|>Vi[:'uoMCcge]ٜfw cX| +h #SwK+W%UdeF9^IhnI崦Q[vgwgFޏ{=sDӮ4Qt| vS|q=Bj~.>y{Jmm5,K &k_˄}]YzWUKRx_u+y`ӭb҃5vx3zA&m6t[pd]fynz֞iJ>c$OVIB7N?_<1w;6kG­jvv)̛wejZ(uO^6ujzi nm|׊4Ugpn>_W2znt;k<9yipXE M+rȟ*ʪ~fzz[mrMZCO%mmOK22C/̵ӴVG#[Dՙb@~Q[PEPEP\_Ҹ?5@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y޳}>bL%öԃg?1^\\?[[Je ^1?b?Z^.kj1[Xv\ʱDgʭ'o:u˻7,tk/bu Z;}J{nݹUz3Wu&orIƝޒYUݟs4 jmŬĤ2ߦw+͕W,g x4^ \yi}Leo~Qj{vxcxo¾Q_mpy{K"Ee.ȁF:Queu6cyuo͵EO.rozxJ/˦A]i:+a[*;]6:uedaZ,&J.K=:Mi7ɻ~*6mU<]XGvڭ6At. {Q7/R].^gM%ȣDYc q\|*ӵ-hxZ5CYKoh!M".s(@>/x.|I%2Rԋ>h6vmÞߍg|<ּao:$FmoG =ei!˗e0|q[WWcX/[Imeo#EUe^sBÄ/owPcV~jcrf+K{,p)fb*=i|(iVjڎCI w>d?k*OiEy߇83>muyuIv"P=n_ /jwkNzij3\C`HOvP|u̗Kll.y=^ݲG aMjk<7^*MխIl۫d@S.SʊtxkH.t1-_FOTvPѳ3&%;=}j^܋ۍB;ayֲ:T7u@< <*4htm./cU6heN~^.vtvf7rIEuvu|9袊((((((+3ş*7էY,WV) ? xo6)k{ &E-t4QEQEQEQEt1?覮cǿ gG?+(nd0@4,+&S5t1?覮Ҁ>|kixu[/Դ6Y_6'fOVž\,w^'{O 0ա$-rYv9P~ZʊĚázMoU?dnjH|)GR鷺.i_h\Mir~]ҽ_lZZӭG5# Zk:MeY\Q<}ihYG OiV6aC:HZ%7m`roS/&mbxb[}R},GTF Yp~}OXݗ$jƣ/v;p#K%Zс0w/+ͦ|' 鴹R"3e>G>@;5ρ_ZXY0ﶵŧ,QOue{'>-u]=a[V[YRUkn|+o_j+Rմ0ifeϴLuk=ݺZ.2FᕾP:%i|9zmܣ~V+[h獦U8ܛGl( ( ( ( ( ( ǯd?mv(_ɨ((((((((((+K}pLW6Ttb/,n<9o}R0ҭoHÚnkK *2?+2J쟥]􈯴#{ÛR[TMˏ z|1 ݲG=gbm0S{Iej?tgȕ]/*}bj{kMմ"G{ydc3]00=jկmamoiϦ_Š2Io5Y~`U+ 7?/亳,uYծ{aUءQP6ϛn~zz Q@Q@Q@Q@Q@Q@_x?AҸ N]QEQEQEQEq[[ۚrg@xoq m%Vʼ76_+@EPEPEPEPEPEPEPEPEP\gß ȿnθ|HGk@Q@Q@Q@Q@Q@Q@Q@fxE][3ş*7G &E-t5|5u襮 ( ( ( (8F->%WM5W ݠ]EVٙvm7ϷKHnjwk +[ۋXefki^0^&aS3i=Sㆻw^xuZS]Qy$rLmIUAn/DwKսڶy^k^Zo;۷z Xhڕֹk:&h#vD4_ʼ5'>yo7ojhFV:ޓc=?{n a=͵5`xi KK i{ͦ›-u]ݰWxxĚw"j}ֱM<4r3 b|UmᶃggC^jεjwϛq$ y@Pʪ>R񎬾-oZy&1Tlϛkmq:ω-` -l ȡee]*݆O״-^Ğ զ#x4ĽlG;q7 IOhuKOGnK71Jse67h&PcKKTL]F$vig|EWTLwo H˹Yhםwxq],uÆ;^~_MIEPEPEPEPEP\_Ҹ?5@Z+%X#7yɞFڬ#x@}x.ZTP1at9<)[ 7EfuI'm.ŚS Qd6|=Ex->/쏇"մǵ/7Ztw<=ndٖnN>cz忈YN{TixGvw}-[f0n)6 6$1b& xFe촖յunaRd.UO$e|C/Q \7%]W勴c7獫@Ef_sX_}n,ęqvv#~(j74w{"[{o'ʸ"%d9?vcgހ;]/X5+NO>p-T*SZheX톕6&ǹ)l b7mEs/mzxx:OuCn.<9Z tUճ6&{kwZ [H^y#;s7.Tu;)pH7n}yOZv;sm^MwTӬo.Xń^ @|)7J|i^zmj>ưXJvUt]ڭX&Dt>{uTE+vU\umƙ&b ç$"قۆҽUjY/x"bmEF7,^Vk+oerGGo[ރ.J}鈢|y`stoee&س[:=\LʲuѿꚭޣM5t{M6j[J,U.>'|Cs{oլVfU6[?x>xzMs'qo;VzWK|Uq9o XKzԬb7O-EcI3[բ]i7Pؑw3A1N4sᶛr+>}B[hlIRٺv2̀ ix_>'ϥn_ymʯ OSr!Wx/wx)'{[åE \euUWkmf -{ ީ-nxN4Etu:_|IԼwwMPf4IXB33.跲~ xzJuv D"yn>}hږyI5S%ԒͅUF?CGښ]N@NtE}껤|T>y[XJoku)e!Y6,!}++h:τ&4lዣyW u|I;p16Eտ̌PhK/F>Y}2MBE_aiu/n6yAUv/:?u#˨c=}b']wnb̊ۗݺ((((%^m{&Ң/vDnfo5}^iE7WkUaq-@Koޟٽ"?7->SB #ɼϹ7"L~l1 W~xYV-V&{So1ץX7i<=n<׽ƑQ`(P xM/&i?]e?$2'hIeZO&iEqx7+I?2oVɵQ@_&^#M/ 6LGD_mvP xM/&i?]e?$2'hIeZO&iEqx7+I?2oVɵQ@_&^#M/ 6LGD_mvP xM/&i?]e?$2'k#cZB-K"iW".W _0r͸pQ@4]7ZևZOs v_1UʐkOoS]6Yb'QP~Gv_}++|i̺_Ako,mr ֬_$մ}_Z΃e6*HYgo/x;1Un[u.{iͰM~&__z>(ދ{m>re)GGѹ?2ּk}DKinI':nfXd1̿v=i|#_xsM]Vݡ$Slɿ+Gi-("t|pݝӬ>x>I4TfqU䕙(7ڹ˿Zo`)m}풣=nk_+C2̱yf;by,y5 k:< k]KVljTSWW鹾_> L<)[[nQbXAɻj6ΙPQ\3Imf%3WF%MRer[n65rwěxviF4ɌS7$)&'_(+~22xw<9nviszsW'VvA*V|UhV?jVwŽcl^R_npzvB>!ޱ6d]N,AX#D72BB6o>iڏUfXRxa˰+Wz@Es~=cYW]mx)+BA98 N]q~pJ((((?ܷ55΀ @|K{xoq m%V=ʊ(((((((((WC8ր;J( ( ( ( ( ( ( gyM5ig?Uտo_'^MZkk$ K] QEQEQEQEq?xw)fU` [q?xw)c*6]7QЅ^6JO!~ދo>Qi-kqL7)hׂx5 ⟉I>!3-H+ŹF]7|cmQ,Qɯ<^˪3\+ BX כ)&^j̱5Mvf۹V߇IEOx-?D4]oq,RIЫve7éM\'VE%ԧ_="O]y^wK ,9Oh3ú֙1j=wSXdlׅ/X|Tfa}yonoB@+Dfx.}b苨ZxRk?&k"O.;%oǷ~ns:晡Ee.3DÄ-i[b/>n_5}_HvESoYy[e^w|_^V4Oze6ޡ!(nZ({|4ծ"=ׅ+kunefe-hkχB H.t;ɉ{uįĬȎcj6i-е$eӯ ZY]eGۓW/X|Tfa}yonoB@+Dfvk _ Fqonuͯtdmfe۔jo}?E|\\8+_ ֵ5oUI;3FЊW@.~~<":֟٢s%OaݱЦWRܯePu MHկ'u{ Mf/9m#&Fc >=k⪄Qzѵ McHլ]. vr\gén- r{X>qm^(sŲ_ƼNq?V)/Aj:j oh/MԪAvf}Y|:+<0a<&<}x[5aZv޴ cM6T\mߗݺxSFz%{)cr`Y7UW{v=S^bڊxdL+ ;S9nt/_u}+Qխ/Y]5+gk2.yWJ.孻7->&z5'Rqk MRH(I"VT}/@Yok?I;.yk51lwE"s*WSX]vsEKk+ IUP~/û[ƿ u-Non| {$7ޕcHώOwil/sqĎꉰ~%ׅϭv^9+]ujψl6m@Skڶw{/jud.imƪ́s=|Gc&k >;.?&jQjke(y9YvڻdzQ#PѴQEQEQEQEQEQEQEQEQEQEWҙk.-_-2 ]x>73}qY_15Y_a[xgbpXvoZY%H4;`Ostz K,(d'H ;#E:k{{%cP̟:gívo<,:{_hӉP}܅3폀Ez$e2:᥺ݗ]߿>mVc zmxg+OE_[\{)u#f-K/暗ÍjY/RO{M?^3oo~_<"R߰\DuF\KKSU/Pa䳎A"r h+9\7?/exzg|x2wKi;ۻ~jϻNe݄ڤo3!nn~q~[i/$mn渺VazY/mHF.yqkM  o'5@>/?Ѽ9q4F^mGvN$G=QԿ~= ?X6{/[ h?3nإПҢ|/DkҴ b%Ybn߻S±mD_&(cMoP>h0OlgFx"Y#fR1V4Z]\~e2]Kv Čʻdq`pi?X6{/[±mD_&(?Oo'5G+O|%k":}/VkI$sXH]z AYcMoV{-7Glt;k;Xa޽ط@>᷌e'nuyN}ܤ$43~ ke_a7vt@־pɭrR[OٜN{~o}LXV.:д};w-ZMz9/7g0|x|/Բ3]nX7s/_i]rq\-WϲԼSh77lHx]7So/}OʹE,mVDkk5eue~0Z?>(zuos=>[{H(iMݵg)YX1SDw`'y|yx"+R#Maogv+K6݊v#AmkgW!%DXw+oͿ׼%DgnD椈DY-v>l~|)oQq"+d÷nq.}otR~ټ/zy-WϲԼSh77lHx]7So)ia%kVkK_X۟ەowUS?JMVFA]˥EM /Mݿ6B п a􆴟Z/ eV'BC*p9ܘ+hX7:߇l|:|/$V/9lV$o9Loo_[it4J"aO [+{I>X ne;RwsvßV/II>-<\j_gM[vW۳nQ@2iDZ⻙K7O;߻}5@m]TMc._nO/~+Y#r/>xM"ºΨZ%/}foj67o,w☡: 0 &XB&&X|ޯU4UQ">a_?|7ĝ.f`exf2k+Sg/7%Х^jugMV͋oǷ~_;S.'ƂC|ڸ N]QEQEQEQEq[[ۚrg@xoq m%Vʼ76_+@EPEPEPEPEPEPEPEPEP\_O xGKZ+i!Ik@Q@Q@Q@Q@Q@Q@Q@fxE][3ş*7G &E-t5|5u襮 ( ( ( (8F]s%ŸZ<+CT~&׼C-qŪ#yv[|ު##k_ڏ[w6>![ap4f;?U|7D.{k{o+2yIb-^YV|!^/!Ե;5qu*Vn@M_EԼVtD$񥆒d]VϷ쬭ˮ^?GY5#~'}7P6ݕ[RY]WVFFo\jWׯ|^_uRVkts\jO|>:L7fs\|WzU:ύu7GkRwݷ:*zWXxc?ub]RP捊۫z|˽Y?q]zS<2ܳyme*v#9}'Ƴ&{}Sحok5xŗzK}2 FVTmVv~ifVwM-o^ѵgU_̯lh#B 573MֺΫo6i9Ҹ+4H.-_yC\\Ū[7~|scV*Z[O;L v-#G+ {uy<#G3n[qRmxYEŧ^J32(~,2yh}6?|axmTBԴ 5+RJe`7To&E$gc{[W[+\"i[ʣ h xXn.4yѤh.}jݴm`䯆R{?|5,Ι%q›s1hpۄ{Xa󷓑ֹ^#XM3DKFյMtW alydp[jD]˒W Ifx5+1op%a:a>o|O[uscqgt7[i;]wVಕ`AV4˭>0麦$FxbgB]ooqOg/m5t=Ry?jlֶr۪\ZwT2鵃UO&߈ plA>/\^j$O"kbP(F_:PxSO|:~hcE׍DbYWgW|&e~յ 4Y=s=-uwQM*Д8ﻚ1:vk5bo$N"E mv>fonῄD&/C@%LUdaC꛶>>]V[\>5ZOuQKʋv2^o~.Mb˸IH 9aA$XV^FG4 44cTuX5bQg[o6-Z"ҤvG ?kwU ]]H-UTDUH((xKJw?D+ۇ5PEPEPEPEP5θ-vtW_kܫkh?/TQEWOM}'~4u]O>Iw[dTUIw7ݧfSJ€;J+Cٿro_Ҋ~)%naGo?,(ߊ9x7 [XQO/+u (/7^ VfSJ€;J+Cٿro_Ҋ~)%naGo?,(ߊ9x7 [XQO/+u +i!IkGo?,+/E}"TƾvZ7 1a]@Eqٿro_7^ VQ\_o?,(CvWO/+u ?~)%na@fSJߊ9x7 [XPiEqٿro_7^ VQ\_o?,(CvWO/+u gkՑisE+ T´Q(ϿZ\J(.|@_jV?R /5G+K)_?eA<2Q WEƫh>isE+ T´Q(ϿZ\J(.|@_jV?R /5G+K)_?eA<2Q WEƫh5YY>j5VY2UKJw?D(((((rg\g:+kh?/U῵AZ*(8GK~bާ6Wo[»J((((((((((((((SB0iiizƛsm~nw{'Z+7u,r[ rمq7oxľ&񗈼a}ǧ.*4VEͰ/xh<CƩJ5Qll irk6pmhx%>!5Ҽh)[k Sm6,Oyį ѵ! MNpj:ͅ77}|َl5t![x_?O[5K:s[v;wmێ}uσ #^'cM.&(h.`Bgʕc2mShx{Z~jxdI-%iA'ղ#P ~1߃KՖx!;9ISܬʽݯl*xh]S3i+(cHo^յSSTԵY&FFܻ]}װEPEPEPEPEPEPEPEPEPEPEPEPEPEP\\?[[JeҸط@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y߈u tiƇrt[eY݈o-N^Eqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEqt|gG,];7yWgEp_R5jVWZ%ˋkmGPy]PEPEPEPEP5θ-vtW_kܫkh?/TQEytS`HԜXGn8E|\wsoC|GEg_ QcqZF}A|5y1]ZuVew~=^x~+XP=S`]LJ v۔@!#/ iu D˫i9IHtne\ý[ģNxNԵIROksa{?uK,Q|_[Bkm{#VPRUoo7Y[Xb!{EeJotB-Pϥ|OM[E+F*s/;_\WjzCxmR~4u_Lv|?όI*? .Uc-[yi4%.bdJ+fi~Z5$%to[8jҪq$vlcb/+>2]' / kY_eͼ)bHtql<^o2ӵ-[Hŭ6؛W{leYS')W5XD>r,P[&dYP͆?Lk_ٟ[u+k~t?=FEh?+>2]'Wom4'ضln6m _o/Ω؛[lk+k1بS+όI*? .Uïh%wG\SA/&)wFˢ+7* .T?+>2]'8C|GEg_ όI*(/Y?G!#/ J(7V|eO!QotBҊ .T?+>2]'8C|GEg_ όI*(/Y?G!#/ J(7V|eO!QotBҊ .T?+>2]'8C|GEg_ όI*(/Y?G!#/ J(7V|eO!QotBҊ .T?+>2]'8C|GEg_ όI*(/Y?G!#/ J(7V|eO!QotBҊ .T?+>2]'8C|GEg_ όI*(/Y?G!#/ J(7V|eO!QotBҊ .T?+>2]'8C|GEg_ όI*(/Y?G!#/ J(7V|eO!QotBҊ .T?+>2]'8C|GEg_ όI*(/Y?Yu 3W%յVk"_yĿ5u%ŸZ((((((((((((((((yT3_#Hm/V ,3Ʈ/J?^ &6 Y_KZ{3?F}_) }/Vh%gֱ<3? ¼ LMlkGA+? 5m_w$Ҭg!m̍H]$8k~ӵOx}- XYt*:P@u_Jb»?I k& SfžM[Q[KXϙ[|øG` ? Y_KZu> OC (w/|3? 8 }/Vh%gֱ^x &sA3Ƀ }/Vh%gֱ^x &G `hk_KZt!A{3?1U>QUBDZh(((((?ܷ55΀ @|K{xoq m%V=ʊ(/QߠطMu,A$HHteʾzW mJJ_6pkR2#?Ҭh/? (S\#(yʥhh+Vw}ٖ2X%ơqqaHb0|*=Yi&kY-5[e":˹cmf(iD]tvuuKX.pLy H.#Ukmzxg1hZCT(o$_7~o au%У v߮ʗs[  }(;nzƣy}{ܳ_:17+5lq4~2𽶟KZ[XE x<#cͻ宎_7{5g^xW6;!w;A?@>4$M BSePWǥ2:=4o,)n-x][vw|kioq  Z,ڊi2@!3Jv~~6P#i%ٵ]Ji0RIvn#m -K{%w%D*@,JUvQχHe 2e]T;ˈӎ5xgxMWoM6q!X b,i33wV \ԟKҦMԚ-H,`(fנ ?dM)UƲ|?ތ~_Y?li7- InⅸLQmjU4/+ִmeOo0 Pn+3JbYJ<>#Q%U*A(Wv=x;|[qgNդuMSIt Ir;mfduvV߷mq@w,=|ú΋wڷ6<8E+#|k2՟|A,d}R(8yJy_#o(y+xIMFz 5`_O |̠s/L״]Nk}7Wflv)#GѠ,/[hpS1zN@Lnf X0xOjzΛ%M0iNg6@NoRT$}eyk{n.,!H=|s" "U_ꖱsX9gH5m߆0xKoiZGFT!3#QA5]7Zm|1%Λ+F #-۝ޠxo]^Ěz/ ^M~ʳay&ƒ`V.^IoSu7tM?9淏h?&#j?*G0`g8*tEԦkՅđ!Ty07Sj(3w 2/:>"h((((((rg\g:+kh?/U῵AZ*(8Z4Nto yV\|T<9=ޚ'ķ;"ŽOJl+;.2R+uҀk$bʛ1;wV-j]:^Y(ھ𞻧x3MaxᐡM븮p܎@o|=蚻 Z'tQ1uo#x|7nv޻jtoi5 ۥȽuO16x mm}9_tYv7\7_€,Q/d+CN 7;Ŷ^e ,n并kvU<vsU|+|Gƹ}oh~G,!P_c{-7ײ_޼_n-)$3nffIƲ<,G#NumJ8hUzxq7;Cυ򼧕Qݹ[RPHԮWwz,6ƉW1ɷ`{ᗈޯ.hɟM K8mUVF}~^qx>o YhZJ[sdov6znBx?Y6iy –;Hv|{]t7c&hRKUXά}F9>>ehz4M/٬&{P/DTFvQRPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\\?[[JeҸط@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_Ҹ4]&{gNӭ)4mk^ mdG#4/Z~"[:@3C+ h#Y'ƞ 4}N;+]>֊^~}˹} h6CSs=P۝`Mm޿/A?APSKӧ״-22ʲnw#𦉡hWw^ҭݴ1i>mYNz 7cψobmY5yo.oKnUr̸ >U<2gK{ol5 +Y`8߲Hqknݐr|xox)x_LVv[k[#nnywoU_ZO΃S]ܷwhM\B%#l͸v¹/h[߇K/>)UU[S{7ӫ`%fvfn ֯U-"-7KӠgh`HPRF*@qW5;H@Q@Q@Q@Q@Q@Q@g:?ܷ5^\Ar ? Ŀ QE^0iwrxkR?jSxI 2YƝsB~k][H$-Y.mը~.h:O-SNРҮgTpMHMv|7+}+MH2;H[sl.}qQKjjR_K^ ݌v"FO'PMmsqZ]onܪ?\eI-ǂ#M_ƣ5m)Uݵ[kJ uwWӗ&z{i fZkd$;X7KYbC{zc;[;![P=̛bwt~S5LZm<i6x> -هη2/z: fV(ϗ? 4xM6;cn/NˈfW<DŽswK&K]P|W9GѼN6+7N|HGf[VIWx[7-AvڝŕiJeYZ GkK+$,Qj1oF|x>i--cuI+Pc-)[y4|ZMIxZu5epfYeoVU߳lk4涞٬mL7L&xm-C֖v7uo˛TܓnM#)e+tJ&*-XLh4]JyKlNJ}[h6ϨjM9Gg10bg3d@Yz%dj[tX!WwdQ&YHcy!bbvPZ<g%vҮ!0z̗NH6:G㵝nYlȷl.ZPtӞgBmYVfcS0w.OSO(((((((((((((((((((((ط]qpon);J( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( &UWeַ*/<}%^e.{-CJo,~ɨP R،p7ʿ.)"|YOxYZe?I[%ekfrmK]eC]eCVLou`xn+m3[#andFWϕT_U>-< x\M9Q򣉮R"3u<%y#Giψ_D|k7e+3)gwWY).?<c/řg7 #j)?.]kCf?֓žmNv۝WvMzO*/<}%G*/<}%^iˉ5VV-oHִ[mKmDt*7m̥zWy"B gϴE.Srrh]eC'XfM> G>tm, Aˎ:|k®R\T®R\UP"'mY|Ecc %3^yMc]6`UߑZ&ߋk]$L[&輴FU~oG|!Kiψj:GSzsC) hy?]m7{}߽ڰ-;k)j^!մkl9- '|7˿oܫqq7/Tg8b/R Gk<𫬿tUYW Fn˜ן37atO5KKq[U:X%uնdڻ_ݯC$¿ AΊ((((((3ks]q[[ۚ ? Ŀ ׹W_hܨjMWou&Z-l^y?ҬʬTwo5yo|-iTY,(%-ݕ:7~u:ŽOJl+nB,b5游heuv_᳕oJ|WԵ9ֵ Xu鐤z&FvUUyY>xwnv)?t7Qy }sWe|5|G~FXtn-IvҏSsiu菤Ij@ѝMRmPsL4j@ Ƿ^|iqx}tYn-I~5ZZ|<˨NA`̷kۏZWKIX^Tz@:do.),˸+@u_xm?>$᛫ymi/GVF }~mtoakb6"#㵃N|;s]y>(Y# nJ@vS<1-k%h`H5h:*Bۨ#c:t>NφFfUصVHO#`Q?ukpYjfii᝙_Toi :MK RB*Kul{/#sS<=PNxŷ CH4Ֆ(|Ti%uW?^s4_kjb7?nݟwE}{C&jײ0mK"7y֑vַu KM:RGke ܂KWiqO^g [\}eV/~'>IRnt&{a]Wo%ۦPjZmݘ+m;"l7w lΑjzEMaDwWz՛rMS垿_Q. lgD|Ơ̼n&9?,ϢVOhM>9bYc{h]w-x5m5WO<7 [^xJnlPA4w>G`sW~Ca-P״۫'{ny;Un6b9;okoxBi,tfIѕmx5x 5M3ID y-ot+ùו#0Vm%喘u=Fq0\< $OX-{cQmN]tF $IX+BJގ#pUh)jrxVP&IKYثq^5o[׌'6x-? eŌRPپw+|˻|+QY./J;T]J+Skwi xs6-~ZO::ωQsjw=΍8#uv!w1nvJ<,'x/K !5^P{V+|bܲ6dڥcU^>5~iME,7"\$ygʯv~o[ciUz/ }[Mg'o2K "aF67z|kx`LZFigK[hHdݻ|XmT|ml5?A/4{WL:eeo)7 @[VGVYjdWZ0mFݗi'Be6ws5$UЮҧ=F+]z>"j~*K+3-ak{Iu6(k񷋵OׇumWjgLon>0;8NoJ<3lyo̻E|?NϬ~.,Z#36ާo˻+<׺Evz$kO$H_c}#^u=KBmGI"n#⸝du/@?k`6(P|-j7L4?ĻU~SER:i~g1.gӢ9 Ӵ$W;r>Z>x^_ oOVxn4o]jx^\g#d_ '&^#M/ 6LGD_mvP xM/&i?]e?$2'hIeZO&iEqx7+I?2oVɵQ@_&^#M/ 6LGD_mvP xM/&i?]swV6}MWBMY/v(^1W}EW_kܫkh?/TQEytS`HԜXGn8E|\wsoC|GEg_ QcqZF}A|5y1]ZuVew~j>9{izN#| @x? .T?+>2]'μ9KgïZ ޟidWvU,ܐ?-)KIo|W=\E+誑nB/ٿ~YvPz/\5Z]ҏ*!A_Φ|9u}Ŗ@ifHD]́ɲ ~5>)d$bXd2kZ_^6}gW7&&+qrm`w@wjVwW?<]ٓCkekle$Wm.}Z^-= m};]bc9v3+b;T}k otBY?G[Q}g6|u BIJ*4E԰+^7fQ񟈕|Y/ԭ|CohMgkoKk-ò(6빋.hֿ .U?>1WOgsJz]uok1Mw[v, 7_ʻv/%>.YX?ۍOE.۸c*U@otBY?^agie*|r<61[ nvZOM> AiW v%|77s54;I7+vx#z¿y,4jkX]pJNG&P.ҎnV1@r*!#/ ƷZxVuۻ_۵ڒ^D"Vb]Gn|Mi6 S\MrP.x-ZuW)/_;/C|GEg_ Q4=GZSQ~0xeJ̎Qdz+±mU?jb%Uomp^oO>|S-b|h><[vycnf߻;z_lۯ]=]+S7!A2+CY?^3x[/hqzw3ik ]\^{Vn>oPj^(:6֚|]bKV"6[/C+6`sDԴ="Vվ1x73;Q}Ư?+>2]'z"&mm7E&}ԤW> C-|ihVrid.e.w#3&!#/ C|GEg_ MoKuIV{ P/&G*;⼣$<-=4[O[gt>,_ e> 4{G-4;o"Ԍb حe۴FhŦw|m=ZlYaAٝv+~YMs/"ԯmA!y5hx2XFKZ϶k0HgĪ쏗k|όI*h\jڷ/Xڦ{]'j/xxවgmKU-Z,-|ɷ"k:k-O/% jlef4)C|GEg_ όI*oZߌ_ >K]=t}?[p 8~UؿfaVj5=V;}B)aՒ9YeVV`FsF1 .UGV%m~1xnbd;QRkӴx/I縙S͘EUHux>?|]ݵt&bǦaR͡jPV4XPIq [;/.p^ռaHŚqsKD;+nʫvUWB:k/u%]KR2]'7V|eO!W3|.MfXSVMQ԰x剛}F*w.wWДz>3ntw;-tN܇ȭC|GEg_ y^*v.o)wP"v"B/Vo3量m9cmg[ŷnYpCo_?+>2]'7V|eO!Wjz.ⵯu k*{,Qc[N ygYޘ8> ~9oIybB`ֲ]2*?+>2]'7V|eO!Ww5 u&kVj43C+y;w%V|Qq(-H5[Oey + ?+>2]'7V|eO!V{L6I1ovn r3/8ZZen]jWfUP2H̨664xF4 &m[X;6KkMˏotB߂^)u#О-b )bqwnܭK/|azcYXZZGo= JUھ7V|eO!U-JjF .!k}'{Wa%_5׼YVRs51fUb|ҿǵq~޳Q]}s]JK˻D.&}ڛ N-KOӮ0x;E;HI+"lU&?+>2]'t=gT Vw:u1/JOgVp6߰Q>!>xTдɧֲOO ۙvۨtUԖl.O\PhNY?Y}ɱ.0 <7m]deWk+;}7ns~|{n;P9otBoUo,w Co'h8o>*_ithi,xz{u1d,06cKOAOwl5dOHK" vGP]C$0}"k-Sr/Vo_Xo#S1'M$t-iRit:^DX5sCm\{)u/!ђ+36>ffךi)Mu2ĀW;_at]^Myn op[uqNj/L^+{w{ig[i\cz&[ zL:n.n侁亳k8U:wz5^j6z͜9^',@VSqY~>E<#k^Ki߽RGDV?vI_ѵ]a<ViCPI[xZx<4xڦxwVd|)kMo}Te|ö>/]F&_Z^ͧ[6ܫW Z7-a%QxS^]R:Ώe浆fe'o-~eEn[ƶia0{lc[ۼoݷ|{_U_?JѿhU/៴}0y߽ۛϗo^ ֲ4pEVoi+ Z7-Е2m+&x5=-w闺JzSL/7ywYTmͻVա+:՝ޓ Yt-frcVܱ|GWÏoZ?U|8+FeAi-ϰ9?<4}]5¥?2"v}e^f؛~OqWU|8+FeWÏoZ~)o/obխ{o_ByR`8 hLmXmpJYJ{_U?U|8+FeWÏoZӸ𧇮iLjo?B^N>|.?:~CZZNΖ-K;RdG *Ǻ Z7-Е2F]2eҤ7*Ւdio_Z1xkCCmkM GeֲU|8+FeWÏoZ5&U/aSgrp3S;[#w_xI"Ѯ4Z.gUč[rÐC*#@5 Z7-Е2OßiiysZ}PK?+Ew]R]F{ /o66>UVUU_?JѿhwtmGNS-ıFFXQܪ)V?*+N]6 4HnVv?gdsSªqBVG*%h -]]XKb;Qi.eG[-շ#EVw j.-[Vu{.&G ;JϽmrGJLЕ2 Z7-oxD|KhͯڴOMR;Yڶod#5o߈bq )ˊUU_?JѿhvCҭ5O쨬m\_ &͇w,x湭+*+=BiyU.[͟Sd{;SkmUU_?JѿhUoXVi/o;i]`ۛr*[::KǠgu2=%p6ܬJ3WÏoZ?U|8+Feb[ਵ(Iu kOkk3͊ uz|tG~x3\ԴMA[E\Coq&6: }n-M Z7-QּDҮ5M_^M\\D1 ;u;KS[V[v2%_ӊ--೵kQG: K toideT-JQo`vה~h'XM%%﵃ CҬMJӣ--dK$+cc(uO_[ۋ[ܬءn?]{d߈<5\xFOI ]vڲkoU_?Jѿh5OKBM:]ڥiu*۫N(嗟?_#jZ\4ױW x ,{n Z7-Е2oBk+mn-KXmtn;~GNot:G,屳قK;.IЕ2 Z7-3 jvW~:|2O-R,} Z}K-gv:]+WÏoZeς^..+)Mo}(;tKiuq;y*y~+}5[W]Xj:RO$2+bu*#.&yy>O  63m =ªqBV@𵮟Xc-k1y:RKuP6 p3G8𖑪.mcu5ڽqlwCo\&ªqBVYǀhcփmۤ-fh4xWÚOh4]h, Srͱ /J x_E]~ktylbVd߱ٻwWÏoZ?U|8+FePkVmBK\Z ɖ{[QW֗:$/ůkpZ(6Vmqu'gU_?JѿhUopxtFd+"T+if4(<w~Տ|<5FMy}k2Α:7 Z7-Е2<+]iE,~y={Qȁ'Pg[okåOgnl-;+0GG ڿ'*%h ªqBV@x_KG~Y+3IՖWc}ǜV <ioZz峻o?WÏoZ?U|8+Fe 5M:>ge9-!ݷ<#Wkk&wwɓCeHoq}ۿ5*%h ªqBV@m|?x~-7n\Esa'gv[ id_$5M vu->|W![?Е2 Z7-pk~)ԼG^YaR}NO+`kTVKFQv[ئ]tܺZxVfUgZ Z7-ioMh:~%ªgUAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_=|9c&keMƾ1:{ii_,<7l674ŧhw !r-sDVvoeSW?exw27VjK2~ũh4s]r {7Mo[&r4~5hGs[gN]^M6XmM"b|n¨2kexw27Vj?exw27Vj<ȝ6.Fܸ}xnFOO֤] Y<>>UG=+W/#uoFW/#uoFw{h1x+cl.k;EfWtK*oktDơ.٬H}w@7M8W/#uoFW/#uoFP }K5\vK5U_V/+{'٫5/zkLڕ+ַIF)#Ӗߟws`x[x[ʵEm ~XCn^E}kxՕ lTmek ^mHoYAe>5wTΟQbq5;@5;@5g+({'M}eJ".wMͻc/JJexw27Vj?exw27Vj(/W/#uoFW/#uoFҸρG+`ȿOY^wտ)xQvL˴J((((((+kh?/U῵AZ*( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ZZv\E[dw+nЀ Ey".c& O('íJdo-.юELu?€9⹿6[͕ńDa7+q@?j:ϊ-^KQɦk[[ĊTuz2YWǃ@Ѯt/ Knni%3yhC| s(GOOMJh%yhX<[g߅e]qzNj-AӼa> ϪM췩*ꈫo_jkƾ!vKVjv >#'B $Iw'Ni1j7 :tda%^sW$٬t.Ylv}=V/hܣc5/|Ea (A5ŵ^$%Yx<]-NWkַ5CxQ6HX sY*"!;d־º-wV/<\XX(hyK[4A4amacobvF <K}WN{em\[ʠ%+s*NY<3au^"FL{GeTՎ*uNk; [4k"sggiW~w|Gx5XKK{dkiт*UPx>:Ƶgw?[}~-پѴ M l7U0Exröi+\xJOgK(ڻdeYv{p7m{Ǣ^οiwT I>EԆ-ï [;eQS7Wp1.؝wg}vP_ZsT伿ͷ ȧkZݰYV6:V6Ug+E]nڬ@[6kf ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (84]qß2i6J(((((((+$¿ AθρG+`ȿ袊((((((+kh?/U῵AZ*( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( gyM5ig?Uտoʹ?'ÞnV/$n(bdhvG*w?t Y渆 YŽh(((((((76_+^^\Ar((((((((((S➥Ү~xAslY6o4-SI|TTx~3G"/iEqx~3G"/iEqx~3G"/iEqx~3G"/iEqx~3G"/iEqx~3G"/'W>FUhf"(Yx_+"2Mrߊrͅ=N)/<IgS8α?Ƽ:OF#+OZ4%ݻ2OC"cMFV)}{Ŀ#~&xł _ ma`|$1ڬ;.~Qӻv;'>&4]6fZĿ'叵[SS񇋵-Ş$,o4JE3AN[}zV;<a`pEV΍Ywݠ xxX)kЦ`AE<_E?Zmm-chyΊK/>Gi/|,TkBTMsN@@-_:qC+]<jzO4yV\)y0ʬ ꫋?9q(((((((( ? Ŀ ׹W_hܨ(((((((((+$l*$l*袊((((WUZ7QiKok-[HHm%p^z4 jvƼt}YhVmw(#|M۱^ܭva%m F2UX]YyV U>}%ō-nBo|6|]k? ^@u=V/G,OuNIM zݶ-GVKiw[o^V~ zP xyuPS}IiMUPձ(RZqgQiY,Kz 5^[:S&dв\.e^I.}۵֘Ɯm%&۾_XO귶0Kmj\ULA[*ᇇ4{)U 64v C.+2Aq\΋[6 A[\У3{r \|X?Duo 5miıA }E+̼1z{>&ɰ.:}]>!喜ڤkeͪ֕[s.=="|n🉵3N|Gai:mu {}ߖ DŽ/{{1CYvD@7z( ( ( (8$a_Nw5WoD?9J*&iPGWi|"$}7#maCכEzf G4u9vC*T_3nm@G;*!w!UFI=ѣB3rt¨|iXuօb|DoVpϤh, blYc?uZ7Tt*?#.!k%\/G"F7{ƃF}-|!h>Y$j|SVn[=>Ɲ.C42+4WDE6/a=I;FE`^ӡ[- ]'HU#|6ž5.;moGwλUbx7ЛX6NJlQ&M<7wwoѾ-OF6u ܲ& 0jO Ěmhao}=\MI!)Xy]B>7MXm6=>2{n_? ^߅ñxRNg6YW)w3s ljiBboO7޾f=k!Fpju͊Qg }}[t[TWd|&pl%Nmuai<:FΡy5j3Ҟ%tJ:Z5T(*1q^Kp~?ŭ<ȿkn>ƶ?6qfͻs3&[Iekr!u5hfU?v>}-6tv2Z0gP0nhW*(h((((((((((((((((+7"Ls]qIÚh'k:>ZIt~֜61yn2l x5V.]uM;H-.g淓zOUek\Yjs o w.o];)Q]N^PIbrL4X@.jPhiMgx#9f^'5+Ú%Ƶ^cmgSs@/ޣ|Zc#u47Kot lhUpv0Q ٮaem&ڶ/$,Fd6 dd(N~^Zemoa1@#ayԾd'۹ڦc6fh<#r0<m`1{~iZ!սck1vu^u Iu%r c@*Yk#-Ǿ)4 x_I7.[=Lw k-?%?=w|%yϨ,HIqh"(LKI`co§I@!kMHLKmOE<=g{ừ[$k5eBS GP P6i.X/пo-wTW ϋ/w_G>/пo-wTW ϋ/w_G>/пo-wTW ϋ/w_G>/пo-x|]ktW2uR;8]ĩ]sIV⨵ {hg E ٷǁ>iע=B%Xd޿<Vּ)W\M֧gKt2mt|^;Z>{hÿ^<[^/,r9U]ڲ˻w-WRԼ7i?Yƍ+lI^El \go Mƭ-FoY>>hU#W[veJτ-w-K$Z3V]s9?9ԿYEvP ΥD(Rs?gQ@_':߫?HKό՟$WiEq_N|g~"Nu/'>3V]s9?9ԿYEvP ΥD*놸|.[vW]vpvߍw&OjsҾeoQ.4xrpV=yB/V'+K|c9FS@9u⯆>xkMmBY%{gKt*"Y4ERxY?si^i=[e܌{6GƞtIG}jR̍te!e ZԥIѮ2Hr/Pu[>|{qZHIb22)Cv1s:|EOdžg%Ƨi'1gQU_f^߄?q.OCs, 2e޿U|0/t7A|?tۧ- B @q_G<aum3WLww?0Yvep|s>=__.g:4 X[3V{j4J>~k?ᏁtH, {{ #RMR(q7bR۷;|T<ckϏ<طX]M2npS~_~$kaeqA;iw MBH3vMJ? >/QM_[%E!7FNb_ճ!ܸnSh͡I,wWQml_3-GO<+|xd4 |,x hzƿR M *S٤q;o`ZfWp${P~ΟEk#ҴˏߥiZkWw˜=(>,_˧xWiǮMPӯ˽}_Rs?gxGevs9?9ԿYEvP ΥD(Rs?gQ@_':߫?HKό՟$WiEq_N|g~"Nu/'>3V]s9?9ԿYEvP ΥD(Rs?gQ@_':߫?HKό՟$WiEq_N|g~"U>"YZWuGwG2)kh((((((((((ύ_N/Jθύ_N/J Wtv_?=o(o$$"b?='̿/̿M;ľ0 |ZivW+2>vUEYݫdd 7ൖ97"qDp7_?5Ⱦ!6V>'ҡm7x.@mn24Fu1-BiA־mͺ4SnE۸7 ?-;O+'rG}=G%-$+CM, "مM۷³o5m;PE–71'r';To<<7O:|3Z[k6zIXBO۩J2|Ui~j6zdJ-Է(kGPgZ7l;',<;6m-KImܒeS/+V[62umOQI;U"o{fKY>["̡7͚/K/xmgHJH;ۿ{_w^3m}]oyr/ژ,loLZ~WqGx7O֮,}'My/c<3Aݿko|ogK^ TI?~mjsڱS=\_MҼS=ՂڇDG+*R>-^I⋽RSR4V9t a? ܋ڱῈ~-.@R(xuݧC((ʍOK]b]U6ow.=t-.[k>>We߃3G{ErEEwfַF5]6û&<;OU'GuSpdG+Ȫ޻Z֟Mĭ]/{u! ϕV0~_>&iZ_&Kc+-B(<ͻ[B/UeVoV:)O;;y,/V3h]Uktoz=rjcxfA8̓4M2mz|MgmW'K;Co)ٶo?]h((((7"Ls]qIÚk(((((((((((((((((((((((((Ciw-K(Z^B7 {(o׼7 ֭_RFutͶ[՟:3 /JL|-+Mɿ~-hw$xdܥbD_ "K5?g nNB.,lf()%iUo_ P.M3nVtk-^\3Ǚ_b;&{ߊ1EkHN>-|9;|2IxoLדztڍW1,ەeE`}L|-+M/𜚮ҿ,jd>_;>W[v4_xW&4zMԦZ<>wğ>蚶[G\6V5;Q e7M2<[-ˋYOZAwج~oWGu=ZA?.>&jqErѴewnvۥҗ/'N<58?*:>58?*7l5rƻ~SO7?J[I5ڣ[-ȭl剷eeU߽kY|I{l]WFcqx´Qe q@izONծ-%kxSv\Q_;]qњ] S,ڪqmj"L+ iq,2mwEn>%ς8-I$Ai5kwAo>4~>;7H-/9%Hf_v|V:Ayi?1 q /7:ͼ~W-.oEd.x]m9F]:7k|=h:iy6z}v'"_PNaesã$Wϊӵ?Dѵ'Tէ4ۋD,*;|ywUhWh6h- ݩX}6J2+~ x;[mwB״翐iҘ ͼWfoPj=nm.TvU3ܪ}ovjIhi5;U ʿfߓx ?::ؼ:kdf9WO)Y7neeݤ 4/CѵB_f+N[w"@s2=xiZYhvDڿ]Z [ _GԣmT*w8w]g¾tis\,[Ƭ˻嬭>++ZǦ]i]xkĉmzk]D1_P['hzOIo ʳ>߽8n>_HǏuOv_#n:qV7mۚ((((/2sWӝv&OjsҀ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ȓ'59i^xV}R}Id$P[{Vո_oLqοuR*e:ן^RK^'I5-]#ȟ&eCճO]xoKeH!I)l௚@B%@R'ޠykh\gڠ?~רi}xsm^U_4/6>SHmn4~$k˾_)ŵeU]ۘ(..[{hfeI28˺x"5>uMAƍ~noHKDGCbfg~ZĭC~"q[Z}c6#I]Y\nʍBYzlf7X6 [hmⷊ$<cj&<)&kJڎlAmtdmͅF7coRxZ{gaB3˺6Jn~j鬬滎[X$!ht7j_?&Yٮp6Y%S#3o%w|aw텽- k,d|2(Q@Q@_wyaˏ6^Wi\_wyaˏ6^Wi@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q_͟E]q_͟E@z /vҦh DŨ09|hx_uyMIE,VyE]p?)ج"@՟IA [<ʼn_or3WWZ5ϏDqMKKSk<2|VÿiuYˡjͥ奼E-`G]$VTms{]P5 2n-!yR8E2Hʈ1 >0ݧCx}y]xz K}?76Ds٣IFm돗/<q[koɨi~ a+ײ[b.۵v4Wگ5j+}ŢStm^olmO4JS~-{mkB QNk~#+K%/T Z y_RY|^ h((?9q+?9q(((((((((((((((((((3WҨ3WҨ0D pbF_ln\:}kG&u{mNx-vbG /٨/~(>xr: +Y5/,RĞC/ǯ7s3GWKng })SYemM[[iR_B5[ǻd2l{ҹ/8OkNc,7Z京_7; @]_%iZBF:N{j6w)dVe7=3E߰Il+4ű߅߷`,70hh_ |+Zz_M'+J8 /m7UE'2Xm N3]Ҵm-~2~fD`S"<;hZƒ\< "b,6# n'R.aQَ=G͎j׉˨KܷH7rm.@:D~%h[J+'Yw/4 hwx*'wD.ϴ'j~0_kv+ZxWXJ'w7Pkmj|mj'nO]D7ĊPSi5ܺccnq2FV5_~UyykF[Ku+}B}0`h%nڭT|..rVwM)bsYpMF{mzUVz]ŷ`\y1#07pNz{,M`KmB CNI Wb];FQfVܜmvzzqڥŵ(fܤğy?0wxr òK3kœ"L3>[ [r Cm,P-uS>io6wߊu ^Nk 6'bg? Ef}^M _dXö6-~oM¹Qjwftf5':H1706."ܣ-'Q^]kmzXj0hzEcYJ3LޭU> I׋eҭ5?xGKmV7l,D mW?znjZ}k_i,v[>s3l`cW;jm[. ŕj%]J8ڿܕGE;z+żoTh/{w~-#4̲nVMw>񵖫ˣiZ,W4+#²6M@~+ZY=>[O$Fد)9V3[úlj;{=3G)̓K;伨s€=xß nn;*$MY%I+ e.j[O/ h.˭\Ο[x%(Y?/4|&OjsҸ$a_Nw5PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^'M+{$mdjV7w 忇^^GĚՇ-<mZbv1?(GJo[C? jC?nװjʊ?z˴'=_§Iּ=e(Hw,+[qf=Y?2oVɴe?$2'hŴ%`\ ͷ&mDO%/-֟woo -@LۗT)_y[-vx7+I?2oVɴ.Zc>ֵX5 v,i짵FV;[ݻSmP΁j6JZK-1V[}y)[U ̿*?5z_&^#M/ 6LGD_myvxEn%5MbO<[ w6wwV_$:mX-n˹ZHm̱7͵9U/&i?G&^#M/ 6S.6u}ZM:<đ7s\&^#M/ 6LGD_mvW xM/&i?@e?$2'hIeZO&rMWkzx0^+^#,Y:1ͼGq#n8^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q_͟E]p^|1MpqyBV*jy=ƶ$O˲ݬa+,Oy|6(y⿉zmh.m^)?K_7|^;Z+|7oNmhdn.c]ok|*՛M49,Яu[5ۻ܌vVg E➟h-l|+ h(uEfmNX4j^퇅Q-Fn~y|٥ōenxZ?\NZ2jbrylBwuȴ} "ħ~Vφtt{:vH~ض\*l Vݛ|[G}B]zGMcM.HQOZ%-uUFʟ.uϋ/w_G>/пo-Rx]ƚ;X{h|3nLKǃ㱼n5ˆktzW Tmm[6<[x܄[+.H0nz|^;Z>{hԼ zZ|vvqi7T^j36eQy7w*j>5oOLO{V/RYimbT;kg E_79 Mo|JSx^PWw%]Bݻw8Z5fxĻNYF|@R$_DH/lVuO|=reFZj>/пo-u6RjaVQ$F\ninߓnnVеOG|.74[gRX+Dʢg E_79|*-hhj.\):4/̛YY[[msw + xc /JR4Wj?lBwuȴ} "%Ɠ k>(úa;{Ogx)<+Ȭ<\Qτ|Wm9;a "#x־fWx۱ݸm_]O>/пo-lBwuȴx|EVӥ;OYh_C֨|WdUFEV%u+nU獌nUV`HumU_7N5sPX:Ϛ"ɝ3zŋOxOZ-΢QY2Ux(Oi׺L^wv-T|Cϋ/w_G>/пo-R{fᄂYvG<~և4td]Vq= P+g E_7&7"Ls]p_ |=FH#:.΋'ʤh(((((((((((((((((((((((((/2sWӝv&OjsҊ(((((((/;</+/;</+((((((((((((((((((ύ_N/JθْO}E@G_KZ? Y U}/Vh%gր/QT Y_KZEQ%g֏}/VhG_KZ? Y U}/Vh%gր/QT Y_KZEQ%g֏}/VhG_KZ? Y U}/Vh%gր/QT Y_KZEQ%g֏}/VhG_KZ? Y U}/Vh%gր9$a_Nw5WY+#kZ{j(((((((((((((((((((((((((+i:X%-[^dc"ffQ@_+_G_YjG+_G_Yj]µ|e4µ|e5Q@_+_G_YjG+_G_Yj]µ|e4µ|e5Q@_+_G_YjG+_G_Yj]µ|e4µ|e5Q@_+_G_YjG+_G_Yj]i_;zrkWLl Hf <Λ; ((((((((((((((((((+e*((((((((((((((?f">R+h ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?nT,D"20ߣPNG  IHDRsRGB pHYsuu !+IDATx^ 6@J׏LzVoJ`6;d/ @CQK@]7 @88 P 0>N.EBus#K @u @R$ @@]7 @88 P 0ed?.XQr ^bC]ZGfbc)7  ;ǜs ky+G @3d| @ༀ~ʑ @uu 8/r$h]@]o=CG y+GO ?a{oz'Coq&͐ -#u X |iٝ>eo94'Ho ?.a~xx9|]ڟ_ĞosLD u Em M`ɢ>ৃ7OIKE_ػZmN'ul+NrnuNaPo9_Pxu=@+KE4:]Urz9k='Pq.tlw?|~awI`˚ Psj@eXrQSʵǮ=/ xˠ#PE`^_l'NJ#^"MIekaަr9TI ]:x=GH>ÛZ8sw}ֵgm=ǹ,EzL3tJ`  Y 7MQv]2nמA`kA) ן9@gmG8^gQ @@ u=FEٳFz= P9WỏzP{ϠO _KW)+Tm:$^`+>$i?AAswu#6Z7#z'вrv@ K71*zqr(0~Mmn_2-N X_fO}&_+SNKx,'熃~0xN}YzeP @zE|]8%`+)& 𷀺n" @q_'"Uɽ[;K )=us#`>N.E2Z>sʹ- Xc#@k^&P^~z$Яo,us@z2@z)2@ pZ@]?M@ м| POS9@%+@zi3h )Z a, @ @%ul x&?s67z<|SGG˨x{儏]ً ~+tDX\Hon9:Q3(wOb)2E$5u}t @1S0qq!YaaR)+@ts6{-SA==dc E77Si$ъ_xN7%7!!P~?|-^fc cWt^VDKzK0DmmfZ$0@-ޑX&_7 .p#/7e+`nrY@Q/]Ũut,`nh]果ۺKKR6z= ?$M @@tu= ?$M)Pc"@u=LJIb9-N  @`0u} B /xL@],P~*$l&@:$pQ~`'Z} ~w!w<9$.o<;{߂zᤪ^MD.xC 4)7"pQ_nLIe>aM.nF,:ybEWO@]/gFM~vn/*^Nv&7SO6L,!P@]tm 4REyM_:.a17/m+[FC }sPC64jYϻO%:b/m+g|~wNn?C2/qo9'* XW[k2i<㼷<=s(ά+Ezƺ| Zirz8i [*ܡ6`/ ӟ@1uT/|s@/6}yit6vRК!]uwc;bn FldLH#(`^;Zvm}rh`_E@]®S. A~ !i)3ȗ #f'  uݔ @R$ XYq!P&#qW2y^!GQ @uྀu};g @ U @^C]pE˱ g  @`$u}l:} eB` u}<%nvW|w\~z_4ToX  ІzysO֑}Flԃ |59z$ Y@rHޜv$C .H %{pd^YzX)[z( |3PN}P׿9-:u=Z۟ϙJ_\o oIj..fÛZ>k꺍Y5I@]Y Qj@$9[gp.3P5I* uKഀH/I@on\dTFͬ^ϡM PG@]>FGQL泙0>FEA~z@WkD ipr8p˘C wK^բNݏeFg`>7N,&k@4e\DϹ @-u|5ʗ~>d)0 𚀺d|L%0>dZEA<>hݑ%P T^ @ Ql~I8dy M]n @ D!(&.`?|vbx(`?C@%`*݂%@5OC ?T:3@~%yI*S# /`>|Hঀ}d7FzU;k9ͫ֊Vi!a( @ࡀ XPJP @ ~ <|wT.`=8|~Ԇa( @ࡀ0֑?\p) 4&@!!**!Y@] y PP@]/=\W֑eRog󹌳^r 빅O :rF|bWGʦX @ }}}ϑhG@]o'FB O#oY&q68%[X @[ri,:PwSh?:Qإ^,mQ\z|/:1P3{t5Z֛z+`W @^R{-1cqr) |30ˉP9)zA^@Єd@$ fÀ邪+MeW^J*fV\|a>+\ff8ǫŜl3/zT<\mmKk1rZ."WY)X%(/0]/;M Pkҧ29/0dQz4({W(Jfi*9hs{Ľ}͏BckNZM Т7-cL Yk%x99Zysz7GGNPMt&`ag +;\u @@ETu=JI@*z+9xuh}A3ZFc|v+=ܼ~ p^,TkXz9R]%S-aY1]֟ټב uApM~}?s6 wLW |Qs kX x>=7gxfJfI~KFB_-[-6֛&79;-;c^=O>9_' ` ڪo~`<|-~) @@>9tq':  @/6o-u}  > ۡݦ<x 3󹳄nj @qqrY>.o|s>[-PKjwN.GRy'"%@s,B#ɵH  @`|u}|Z./`>7cu=6  @@ϛ>Fu(^N.ǎd*ZlBfǞ#𖀺v rOj Yj)y1xohN;6^^3g @`-Y]?=p=ug)Ҭ#cn6v2F  tV׾~w7#o 8ey0t tYd,F=N+1,'@\um.AmSm&O\lon }i;~43<8x^<_.5Uf-Zc{hwzke)6yV,ս/3V{Kqg tN<%v%ųKiwXM A%POpG_-<:0TP9}?"POX?:1wx"&@`@u}Te;d ̖t̍ 4y)b"ysU7:/:KVc,Ek[2-Ź,$`n& .[N,<ZP[ʆdP3jvvscd @Kv]5}r|ť>sX_Ǘo_>F[Fz^ @@ RO-?9T|!@ z ~I@])b!@z ~I@])b!@z ~I@])b!@z ~I@])b!@z ~I@])b!@z ~I@])b!@z ~I@])b!@z ~I@])b!@z ~Iϟ?GG,~9޴rü,9+4) ӻ^.eN B#"ݽ = ͤ@ o[}RF@]&UVc:l'@~ @iu$_r0:lYg>U <ړsz?}|6wJ=\'+_t_@|i4líׇJ` /{eqȼH/Fu5{E//]}C 4uLQl3|%=>`Qe^㴂qEj_'Цf^#W?u`( 'Ud8t-0UJ$H" C]®Sn<~z\{utg0~=_'кz@*W Yoy'ڻ~i&IOB yCUPO?9IJ'z1ϵ>fާُ'֛u+O6ƹWQR׫7ҩH" 'Y?ыy3SGξ|l?wFGο9b'@2*|ϛsmm'q}[ѽԦ~߲~02pM bkgpgF1O Pc]# 7W ֯$E^k}>EQ?7_03bկJmS: SuȽWJ(S#}N_2O[X|wS]<gag[8# $ʼni~ۓ~ϵ^7wFNb;yY^olktAU;|`ǧLGyTҘr /;cC6^2eqn<>հT]Nd+i}<~/sӂR WO٬ia4N9{8"p *2{Zy(-fQT)opqk ;yh}O@&=tq/ yZy =?wqyatm|~=tȃa .{?Ope:=0ޘ7>L:3 b#M|P׿+4|b{_=>d#|G]A'0@Zf[_tE80Rzݜ"~ 0no=0#@ U*`?|Uʝ{_>k @``u}  R.`X@]8B#@ Ma둳/>#OFI _o#FQJϯlϽ~w͕b?zY1|i8 'I--g贮Ep} B !.hT@]4"@zȴ PM @ 2&@AA+,)L  @`Pu} B !.hT@]4"@zȴ PM @ 2&@AA+,)L  @`Pu} B gݷ?>;+KgY֜FO7!_oO Չ_ig^|3-;j. 7j1T;Hב =us?mE1E":!@o[}Su :']@]N>???_oV@@] B @G@]'"!@`Oҳ:L >$ѣ9ئ9Z)i@jp`|]Bn`sk3/F(pc)Ⱥ(!ռnְѬlsR] Kc.!;DFA{ZJG4++)*Yߺr^4&;˽EJzvVP׫#'!4h׃&^B *U׃O.ÿ8 fM[6<{_MtwCڔ}}u3k |9>ۋ>qGuf䋷,YGt<11(#&`LbH^kZgjaH*-2kg<.^\GtS 0 fBi;**Q?>7>fXsyּnF4fn?imCJ%|r,e6nvXܼJ|P7 +r꼴/Ћok_?i;APыÇLS٘_]}WQ,.3tbKL>c|j@zi2ȗw|SiWķ*b^|kg|uwquay)NL/|慄1.3= x)0ϛK5l^&+^r8wRB x/Y1߸<`:`s>Ew b~Ӱ~7کϕD fDWzFxC~otzB~eBUm{ov'zrׁ9@_}h^~ׯo5- Xc(PׇO kAu=H ^08PM 0>N.EBus>P,¿u?˙ PJKIU?CL?:惰xmW,_.Xz1cg^huz,%$@z,Q2-N GȲ  @ %$@z,Q2-N GȲ  @ %$@z,Q2-N GȲ  @ %$@z,Q2-N GȲ  @ %$@z,Q2-N GȲ  @ %$@z,Q2-N GȲ  @ %$@z,Q2-N 8\ 7IENDB`n@6JY`XOPNG  IHDR i|sRGB pHYsss"@~IDATx^}t\ys:޾IF7f;C#GV.RJY`X ^ J7']CN6Gl!Vs +89YcOƭ݌87C2s"+4~C{3!}߽/~կ:XrVaY- Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0  Visio Visio.Drawing.50"VISIO 5-Zeichnung0# Visio Visio.Drawing.50"VISIO 5-Zeichnung0*  Visio Visio.Drawing.50"VISIO 5-Zeichnung0- Visio Visio.Drawing.50"VISIO 5-Zeichnung07 Visio Visio.Drawing.50"VISIO 5-Zeichnung0:¼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Dü Visio Visio.Drawing.50"VISIO 5-Zeichnung0F!ļ Visio Visio.Drawing.50"VISIO 5-Zeichnung0G"ż Visio Visio.Drawing.50"VISIO 5-Zeichnung0K'Ƽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M*Ǽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0nDȼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0qIɼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0sKʼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M˼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0V̼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Xͼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0ZμPicture Word.Picture.80,Microsoft Word Picture0[ϼPicture Word.Picture.80,Microsoft Word Picture0\ѼPicture Word.Picture.80,Microsoft Word Picture0]ҼPicture Word.Picture.80,Microsoft Word Picture0^Ӽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0` Visio Visio.Drawing.50"VISIO 5-Zeichnung/ 0DTimes New Roman(|dv 0|( 0DVerdanaw Roman(|dv 0|( 0" DArial Narrowan(|dv 0|( 0"0DArialNarrowan(|dv 0|( 0"@DWingdingsowan(|dv 0|( 0PDCourier Newan(|dv 0|( 01g3f .  @n?" dd@  @@`` L/D/&hb##Ge1                       6             H/7 !#$%&( )*+,.2345689::;=6?@BCDEFGH"-AIU[S-A INOQRTVWYZ  '-]^_`ab2$*Z閃2$Swl*Z7+A+2$Lp %Bla] ;w 2$*uR7Xb$7K!*ǜIkj1r-2$~,*W=Rk_2$K cqjq$  d2$/6=ؘS 4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t v w x y z { | }  feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOFc More UML MOF dMore UML MOF II`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3feMetamodelling Examplef"Metamodelling Example: An instance#g"Another Metamodel (Simple Version)#3fh$Another Metamodel (Advanced Version)%3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UML). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fV:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f<TEMP#Durchgngiges Programmiermodell! b!  !3f3f3f  3f$ ;  ~T(  T~ T s *@wj `  j X T 0A ?H T 0޽h ? ̙33  ~X(  X~ X s *tj `  j X X 0A?H X 0޽h ? ̙33  ~\(  \~ \ s *`D `   X \ 0A,?`H \ 0޽h ? ̙33`  `(  `~ ` s *5 `   p ` C HA-0C:\temp\OMsample-r3.jpgR ` s *@H ` 0޽h ? ̙33n  d(  d~ d s * `   x d c $ p0   X d 0A.?E yH d 0޽h ? ̙33n   h(  h~ h s *p `   x h c $@r p0   X h 0A+?@8sH h 0޽h ? ̙33A!hx] \T朳%  b^w5B@+kAEE5^-~Vef 2?nia]Pnygv #uz{s|<9Gk=Oni`0]tlbq-.(wM*BtE W,nXܱt6X|m# t%K,*,j,!X°c>,Xb釥?H,,Qvi~Ko>E"k!]:_bg+Vz}\ݱo%ԧ@4 pȾ\Ix5XGo2肓_QRJı#Ilrd<[+_$J0cI!q !mm\l"9g[8iuhW^vq{ٴlM{3ٸjL:Luҽlf49gxԆP{1_n W$iX @]^?h=3TSqclof {mDR^ ߁+4R5M^0W 8 .# %,T֙-eRrO䬂k2/QoRgtj'^YЕҳMA^I:S D6RR.o7[gcyV_gk:np}nz}bO yO60ܢ<nm!6^k1ĪN6xDdӽ9Xq"ԺgYN XnyNN$MXv|!3ʭ3kC-+#>\[r[ڃBJ;KRZ00_px|{sF:謞 "|4|=YWryN_W5.Kç2|_W0|̑9^n (8G~/b ?ocǻ!k^7$[da= D`w oVZ[hel O`x2߽bǓQW2T1| ÷/dv_3> &8_ ~Ç2<0|r ß9G ߗ ߀jod"Ogx û1c˘t}g%n)Ew8!g^\&b)euRbNNXFŸ@$_g˙??{~nA~?k1~{p]K1ϱY/;JRv5~&?hG;CH߫9S;/ܮ}y9/#<ׇ;}?G" sxC`Ō6b)O1npv+,%Q,b"o+ :f<ջi rIt\rR)֗b 5$Z&a)VDti(FFA b(6b(#4ڰ }*o+o+o+o+oc bl vަJMbkI2 NA)&HWO5ˣ(R (VK^)6b @S}I OTb HªmX)AmڲbK:KJ)VI#kXW$amv%aݸF߆.yK-OM@%z%3nQOɊӋM4NuZpKox'`]k&24ɷϿ6r{by>[.?C=.--]Q۾twrf2> 6~x$cgǩy-8ɥ ^m/09fxBP j%"TWWùsD8rرlذ!J`8m;b 11`;UEcaNT(O_ ݚL(4 ^>B bȸ8+=wv8O=.g:`>p.m.pb^ǹ=3 -Mፗj[DAͅfutqwC Ju`SͧNl2&L@"ԍkh2q8M5\e4Tq0A{ ^74yGL:eZ@sx3 3axi Hepu|m*A 0^iϙ]T2*B\l맸~],A0_ϯuZϧ^z^Np^'d\ nwNP< 넿zW= oA{%pI!֤!)D"O q2% =zMq!K>ա\uG|u0Aqc2rÿ&p΂a^r0Ĝ60d^zHsU2%7^6>斁SkP>L'g^?{5PU 0rfGlo_7e Z%"`lVoR5V}+7,Nޯs+=!s]xo+uǔnRHԊ)%9i/iV}LDGb5>1'9_')l@q!蕔)RH97vC1Z7Eִ`ۉYok4LߵaZzDZL}&>}0<Gi1vNLCu/wPODha G:NU3nr,vA |WΙ_`WkiLk(.RE/L- .dQ?dZUteokO<21DgYHe'd'V^I%ϗXSs|xhЊqY***ެ*֔ 1&3~UCBG3B4df*7YeO9U{VɆwur9UKʫBwT:YuFo-|o4k3j׮}XxmmfK޻zO~vgf@:ѲEؕ ǝ9d2` zI~v93E: &ɔߧnz\{CϮn䰔Kp5R}ղ.}E~e*(ܘbӀ/"nEį+_Ýdc e@Rah'MLVЦ=o`WeP *y)T>g- |ls0?dKO6lixP>ڷP^"Fj/s U}΁wx8 @5} 75i۞sh&685uQtU8FV5PS>{{G Ka.M.Ψ44^4.49BLj"M:]f^dď]Wݨ4Z] KO:]Sq^pn`H;)?($$uノyؾ-VvxMF {VF^Qڤzp+ZX6M9eѻg.77^a^NiAQGR;c@⽋~x[>z!HbQâSOwjw?%nc"4W,4@W9LX|iL"3M.oV=o/k_Sh<T~XA7ƂWite1^ϳ4!IdyHTOT'T;TTGRΫ=Rѫl{Vej^+([غbϴ=zE{"}wWU/3Zp0 L m]f6izfz47t5j s ܍k21&nm9~QfܶA-++Sv~攵-)Z~=|Vd?%Y7nB]W?+W/¯ ?ն3b`EREb?& 90b}Ee HŎQ,a_냌Hpcūw~rxzs'q>z[FUc#,g<| wل0/q(G#@I%-+9|e.n/V8<ܮ~r ` D ,a^ѹ2=g+UZ˸ f _%/g~92L>1|>c6?} k{!mlHcV,Ƈ_r+ 9Wr/{>>p2rl? ?10|O> roG/0 _gǓ:xҎdb/`m3 Ik%n/90Kc/|007û1k'a]|2g ?3|ë{1+ _bF?0qaC w3vd ×3 _s~&OaI >u   dǓ;:*-= m +-y.s& xO_r錄5gg++o~Yj^xݺwL֝;Ο18%Vt~FoEgyxW?Sq:2ߺ]ݹ֞:?_wҹmZ?h;%@XER,ba6>χMfDr=M3Pbs)6bS(6bG$(GX;_# 6٪hiHjiOX$)&^26b(6bXOu)&HJuL bu;eV$ymQ{C9T9T9T9T9T9(b\m>M؃Cx @XF1/RLM a(Hb)VCCGNJmK+[N1Ŋ(6b3)6b(AqKbqXB)D<boł(JEu ve pwߑ OKk44OV$ Դщ[9 N1||"tߗp]S( r,xE`f c`0 &   z  TE hH (im    Visio Visio.Drawing.50"VISIO 5-ZeichnungTable of Contents Verwendete SchriftartenEntwurfsvorlageEingebettete OLE-Server Folientitelbc0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0  Visio Visio.Drawing.50"VISIO 5-Zeichnung0# Visio Visio.Drawing.50"VISIO 5-Zeichnung0*  Visio Visio.Drawing.50"VISIO 5-Zeichnung0- Visio Visio.Drawing.50"VISIO 5-Zeichnung07 Visio Visio.Drawing.50"VISIO 5-Zeichnung0:¼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Dü Visio Visio.Drawing.50"VISIO 5-Zeichnung0F!ļ Visio Visio.Drawing.50"VISIO 5-Zeichnung0G"ż Visio Visio.Drawing.50"VISIO 5-Zeichnung0K'Ƽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M*Ǽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0nDȼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0qIɼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0sKʼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M˼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0V̼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Xͼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0ZμPicture Word.Picture.80,Microsoft Word Picture0[ϼPicture Word.Picture.80,Microsoft Word Picture0\ѼPicture Word.Picture.80,Microsoft Word Picture0]ҼPicture Word.Picture.80,Microsoft Word Picture0^Ӽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0` Visio Visio.Drawing.50"VISIO 5-Zeichnung/ 0DTimes New Roman(|dv 0|( 0DVerdanaw Roman(|dv 0|( 0" DArial Narro  wan(|dv 0|( 0"0DArialNarrowan(|dv 0|( 0"@DWingdingsowan(|dv 0|( 0PDCourier Newan(|dv 0|( 01g3f .  @n?" dd@  @@`` L/D/&hb##Ge1                       6             H/7 !#$%&( )*+,.2345689::;=6?@BCDEFGH"-AIU[S-A INOQRTVWYZ  '-]^_`ab2$*Z閃2$Swl*Z7+A+2$Lp %Bla] ;w 2$*uR7Xb$7K!*ǜIkj1r-2$~,*W=Rk_2$K cqjq$  d2$/6=ؘS 4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOFc More UML MOF dMore UML MOF II`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3feMetamodelling Examplef"Metamodelling Example: An instance#g"Another Metamodel (Simple Version)#3fh$Another Metamodel (Advanced Version)%3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we                         ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | ~  use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UML). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fV:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f<TEMP#Durchgngiges Programmiermodell! b!  !3f3f3f  3f$!!hx] XT{pg <( j(Vր" 3xA-B-0 e^Ni0L3AM 8Jً%u^}o^x yW:`.V<ϋ0CX:W A.XdX\aqK,r[o,>X|aX/~Xc¢_׻t._ ~#>K|+^mG:ƭTt=_ˆ}J*CJѹs~.l1f}pBȁﻝ{~^4\0i]߮ :oM/:dƝ\p`lm}a\=~tj`s(XP0:bj9srYyy9 ߝB{Nα{0ؿ׳e1&v^2 ldIg8:lci?P6>[=-V*Zs̕`źn7 a6>ǃ0=GHma2`-Cz#lB9?I`{p«6z .85.-J;R-3r%^=^"N%دBV J.Y0cI^5BۦkEtpV#ء}kqf7)T`OyO6T0ܪ|rufO,tnOv{w#xgqvYwѭ;&&Zgy,m9M:}E1t܅M2 n,8xj]3YXjyJ)JBzl <2nC*=;+P~ l,0KEu,bO{C^|ŶwG;v!-R10_w3xldf{]s&uY= 62 Ⅵ#-rwQ(>܁?*\+`+62leXg~7̗QO($8Q|O/3șFF/ WS #M߰,qsa/ ?LM9>>ľv + mO ߱r kpm/{HfpfNy0\Kt1}A5&b m!?tl9=^N[+'6~pX^` MlfR4-. /ϕ A p9> ۷o6lOcǎXCl,9vqleSfCFs=pk4OQ?\C$̵~_,듑7;P0;.IK9u1l,}b`FyxCM3IФjhy@w7XAgIvf`4=,v4 q3LF\֡M%(^ :s{92(Z2_F(. bd<%Ʊٵ.4 #_qLu:c]qu:{:QS^.i&'Pr(nMC%ɡPs򌯡Goz=tITޯ::xYXUrY<;l«LbS1KjzFrZ#fetx|fճWqjE1-Uq/F(ߐ_h|q1X9k<_ +Wx{BQ`z-[VKjRȅ'xK.%BçH|yP^0_)TŦikVh*N16o@S ؀CKSH=7v17Eִzl;1x=̴]LˈLoɴdۧp```7h4,Vc] R i{Z&J2}D r.A9I&00Tve\[xivPϴ3 &fa3phiPDLL%JF/6-ߛF'~4? P@cqvYuWPS_\lɚ؍Ʒؕg+s+./,_V^^F9_8Ĕbzrs1ʏd.4=nzUoL]=vس*:jz՜%UeULa۫V:_uʿ7YL kkWվ^eW{6ץZT[է?T?pd~{/nlwcДh6x0WO yK{P=pm;F"uUdNaB7=FedLМy9,p>M;r'7]*WZR5P:崈W5/IO,~+.)vi?h"bVK]DZi UzL8zq/a^/TѪ(eT&ӕ_Ⱥydmz TqA"Lw6UWz5H:卮fWUn;[)|ڲ7K6ClSIzy~ s `B<hXL-0 x}ΌCHү[8޷ݽ^Y3G' +@3WѯbpűARӳ̫8(X CvcvwDgܩک٩v۩ʼF+Tҷ+6 v4W}&-̔ 䴣ώohm.E?-j)|gMI}RoyMdځ _#ͤФW}&;d`Rȓ5WclYڪ i?3BzwF_yhBIȍ=C>wŔv^RGj(LZB{v:>6& mT3Nd6:Y֩ݖEwQdAyGӝ}{΂ i{OC!Ze9UoK[_eo*˞Q`x]-C)ToMŽu޾wOeP+̮pb ?LH'0<ތ]D0f Pq4 ,؇ [UumB TZ#շ]-RU4kT1KtmhRLjbjVꌑªSMRݐu Jt>{ucu:\Vw~ݬTN#O̕ _[n67\754lx)unÿ cTb.zgvhW3 iz*_[`2}7ޣKMk=#Lqk~/nh+;M=&8l753%dBB%QIߑا&?v(`]́@P}~_-uWSۘu K>ߛz$uaLdB]G}0)UpսO*2@HDݲ t{'4M+g/ˬKyHˮP5d1;lչ( J)siK>L?f&=kj35xekJ"r~ĴmKA%15'{8ض~Í”;tFD5%}@v{\]ڪW>3JhfW퀟p-X\&G!畗/(S.>ꩥ;"M>z^aE/^k}÷Ó?Lߚ~4oi=C盙3j(=u{YwMh~,Q o(sdÆ/4q0u\_YrLssU)y|^.20c r Cb' yAnW ,.z3WKOz$fWyoWg]pP onfhf6"`,fx|CDxz$I.r-_ gݺ4 gP0t{¾h ؾzZ AǙ9|;d,u2pvnl!g ¹}-K̾3-\s2{I9d%>,܃-;[obLWiJ*|nY7[oes'l B`5,ދ:]geBԂ#Z_k $۱LBDd1#(x.L{ fq; 7D7M$kؾ݊eL8ok1^+0^j wVt:2uD` @w|MGHQ(ڀm^C;):w"ӸUڒ>]$wE>(>; u/wQ|%WPf(I_N/?P$ϤqLZ8p/Əv`_^66 1+p+9ۗ#EI89$F(^M}('wx?x)̷3D({s:xWÎdb/`k3 Zkn/RKK.e/|Q/{P{'aC|!<1@C)~ pWQ|7xw(8WD ⿡c_C)~/JŗQ _Ds)~&OII(>O1Iap :*=#Fc-\6lm{ Wkv_spL2fl; u;.yaǴo 3QnEgn߯H]t׎gwup3n/ͫ[ם#u'9ۦSG(E,k1VI m& +#ؓ[N06`3 6`IqK&`sE8<2;n:F8E,`b n6`&X$Xw̓`RDkDM@ VGx]fN ytwh4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOFc More UML MOF dMore UML MOF II`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3feMetamodelling Examplef"Metamodelling Example: An instance#g"Another Metamodel (Simple Version)#3fh$Another Metamodel (Advanced Version)%3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UM                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | ~  L). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fjModel Verification Example  3fk'Additional Tests: Model Verification II(;This template is used to generate IDL code from the model: 0; ;3f3f<l(Additional Tests: Model Verification III)IMetaclass used in the generator, this has model verification code in it: JI *3f3f3f3fJN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fV:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f<TEMP#Durchgngiges Programmiermodell! b!  !3f3f3f  3f$ ;w +#0l(  l~ l s * `   x l c $>j p0   X l 0A,?R` l 0$k p` 'Again the metamodel introduced before: N'{ 33z 33'3f 3f(H l 0޽h ? ̙33  ,$@p(  p~ p s *@ `   x p c $ p  ) p s *Dj   DEFINE Root FOR TENAInterface IF isInPackage package Package.Name { ENDIF interface Name IF hasSuperClass: FOREACH Generalization.SuperClass AS sc EXPAND USING SEPARATOR ", " sc.Name ENDFOREACH ENDIF { EXPAND Operation::Declaration FOREACH Operation USING SEPARATOR "\n" }; IF isInPackage }; ENDIF ENDDEFINE 2M p s *-`@  // generated code package omtest { interface Controllable { TENA_string initialize( ); TENA_string start( ); TENA_string stop( ); }; }; 2H p 0޽h ? ̙337  Pt_(  t~ t s *S `   x t c $ p  ! t s *xd`H {public class TENAInterface xtends Class { [...} public String CheckConstraints() throws DesignException { Checks.ensure( this, Checks.containsOnlyNElements( Attribute, 0, Messages.INTERFACE_NO_ATTRIBUTES ) ); Checks.ensure( this, Checks.containsOnlySpecificRealizationTypes( this, TENAInterface.class, Messages. INTERFACE_NOT_IMPLEMENT_INTERFACES ) ); Checks.ensure( this, Checks.containsOnlySpecificSuperClassTypes( this, TENAInterface.class, Messages. INTERFACE_EXTEND_OTHER_INTERFACES ) ); Checks.ensure( this, Checks.notContainsSpecificOperationTypes( this, TENALocalOperation.class, Messages. INTERFACE_NO_LOCAL_OPERATIONS ) ); return super.CheckConstraints(); } }| 2||H t 0޽h ? ̙33!hx} \T3]7wy]CaE1  !p_PKmP,̺e7Kд{afVEM ,*)rsv #u393o 8{grÁv)[ypQ_UEйg,.X\aq '/,Xc=O',XzaQbQa ,}% K?,` ,X"D٥. XPLw?|p%ңVqr={_ˆ}J AίJ޹sy~<.1f=qBȁﻛ{m~VT\90i]߭ &Mu:;8zUڧHӔĕ}粳M#;N_uʕgX>m¸9f˜ՠN0eİjՄss[ ًrgD qϳɭ-{^T|:Oda/ۊ`quk?3]՗ymg œW06DpOR{W X~J;qܨxk}lORZ"\lN~Sgm)Ǎb D\ g?08U¸A& XRW͆EǶx.Z-:iO}lC6ͦ=w=l5L:͌u}lf )cԎ8 !b b$9".Åa8vycP!Luv:x;(f=Az[V1 j =aHpzuѷ݂2N_LUr݂M `zR_fWIUp-TZ8 K{JUNvEn\]$>$ko|(ԫδ'-C;c;cYX²׷xlV]~j7T`O yO6T0¢<b[Ro"Xw) -{kp2NvϹS[:語zizK Ǿx1L xOØ͜?Y_U_%pl~їNbII0;S%0&pw{櫿7A_=m'YBG"J?#/NBH)~So2)ƑEMILRݞ?J (! W;-|?؊㒭 FV[H#ܑḗ,l:ڊ{^{^RǶS)?(đ8))^Mn98G~ /I?Ўocǻ!k~7D[$Q=ĹcOqn m-QFق= 8H|/Q;Q(M)qwRI vΑs?uG)>XG~/ȗQ\O0( 8/RO/ȑFf/tWS =-v,ma/ ?J9~>>ľv)+mw˟6pw kpmY$mZ2'ܘN!Lg(`+gct{;#xȲa%]+[@Of,WӚ h孽Mfmw+)d-;azO( gojg g>mIK? ssU#·DIXWB"t]]ֿĮo߇tq UÜ=-% 'ϝXDJ:}YoߟeUXʺDZHIY(1s_ 5l ſ}q8F%fXː%1]~C?|{[#ŝ!|wՇ]ԇuޗwZT_NϾtY͜d' }H\ - 0X1ͬ& LIbDl M$G"vX%^ X"X( SkҎMRQ盤7I] &EX b?d;/jm&X &8;ĉ-&$ $X `b87tCmDmDmDmDmO@ MaWm1ϛy`6`ZM"b_JDl'l&"X;'b_s",` B0 X+b{Y+#\%,`0"#b/lR ֟`2G"VDl3N05"vDl Ֆ[Y"VJ %X3#lW=w--Ə?wv=7»婰;׳^7ŠÓN Nu:Zpox7`]k M,e}Ö#؍`1w~o,ӧgo(`m|GqT//]ĜYtaO /qfR NrZ֛&' O\nJ|@=jx"G]v5Mӧøq Fv^y?\48>x9УT\M@yc4@zWP scz,RLLFϤMĥN~w޶E1(4^nV5>ǍQrcKBou|)6Pd:*\.gn^`fylaZXa):RLJѤ|?/\4 ;30KǝP)L#I7pNЖtMq(Kvq}Es-G>!7ٍzlode8 \u綁sǁn8NsYS*d *$ۓ`IR4)ɔ:<n ^3emaC>f3Cy`0yma Z `,^> &w GOͭoW:#"zaͳo(7 I jh5c>aӀP6̀g޸p-@Y(J+ZH[@w(6+'+gћa6b&P8êyҙnFַ2qҺdrɅncK)%i4*?&!+$c;&UQFO3 ܁4'E (N:3`ʗ)z:VVXȺvׂl;ww"#1vX4Pr8hrZ;|:9譙 2R=ky򌑹Nhx[ 'xwPy۝qfocժq~dn1ы}AJâ ,=P2(jQq4VD]fhDIA= A$ë )?ܳ.䅒u1 >So#s/*/,_^^^V9|X0Ԙl|rS1ʏe/2>m|ٸUo Ofnطگ:jFܪUeUL#!WTuʧ73jkW׾Y0=Q[٧{Ciϩ\}c=ܪ21_UK-[݅>34'4LvLUAsCfG,z]UݏsU/E{RGme"a ݣޣ{se:+S,RWҥWS]oIF8Ez4̒ iGbhO݊~Z!j/FV;`%MxƒA H7'5tPbǎ35a7F1PmWUu)yUWiὯj`q|41yfA_P0%ɼ=P H=0i1xБMeD CF jQ4yI'A)'tp"[ЂU=\A!Z Oe%O] _em)˚YxU-CYoKŽu޶{OePk P >/0~N`= \J#`:ǼY3XѬyD:/-@ 8w}"0MK;A7%F$duiaq Ny%Řr aQ ۗBkD{P7Njulȼjq]i *_PShc VX=Âeł=#7ii'חMd|8(|{GRc^}Kzm0oܞ׫ȋJˎFcqFUUqUUK*Ü-Jb|m>ck?bQ=gwGƄ~oTu6}Y ],6g-t*[qGfսWK<+Ǿpkb]mC&SjkjM<#מ{ J'tV({gmO c$5u [_z98GY )e]cK;W6,]ϕ>-[ݽ22c*_¯ \*Bwܙ[&wn4qE%˷}ƞQMZ;m|̿Wy8_óPypyl ֱѳʷUZLgOj^)jXvX漜m1>24Id}D O) ʓ]ʣ)pScؙy0r^ uVр/FwrngZ4'}]%*ψiC_lNdjfjRed:)Oݢy_s(vEaT_} RT͔vfCZS~}S я-BI\_Hk#-Z YL`zE ԍM-K sZۤ{GJӼRZ|ŌTtف UC&{ٙ6KAs^/qyK=J ^)4zm~!zoxY1mm6N5J;UAø' s K }^5aucwGn\hלJFT K&.K]i-!WAI27ʹF?lwq'4"#G`OO>~G#Fq3T`xi5!i9 9ܜrSrU!3N(h=dI#%Ct8ykZ2_XX 1a=a8l& ZCz5w.hL(;N{Q̐b+fl8p 2÷f s3 A37Çf؃]3l7Û8 3āyfbqfИf1Ԍ+N:f9 q:ɢlpW{_K/ϐϐW_2/7ON!k(M\"R9By?x4AI-ːps˜]>qny]䂵$t@H'w{1WLHZqyY-2 vl- (YKyҶ?&|=_j[q; O7D7vm$kXݎeL8o1^+1^j wUtud:jy!` [;nwiStE^i=اq%}؟Hd |,GR|Ňvo_WRN2ŗQZ_Az/y?RdϠDZXp/Ə!6`_^661+p+ 9Wr/{>(>p2rl??SQ|oINRoG/S_g uCl^jfASPCKe/9AO^F]uv$R|<AAIQ-p䯁#D ⿥_C)~?WRN2ŗQZ_Az/y?RdϠDZhㅽ;:*מpVxHq~%|79 8]%_w~3vWrǼcڷiw|zN(q3b} .upk:;ׁu7ޗU΍ύm}!)%X$jJ$Xel-VLO"#,M%del<%Xb|66 "6@W=!=?,` #X{HD '` ֏` ֓`s'`of&Xl,`S< J0`@Į5`g -N` `I m%+#Z `EGYJ x%LK8E,`! $?[1_b !X8˺}|'˲~{0ǟf o -O-,.3uL.5-1sL V΂ p1!:|thnˮ?5r $ `J j0Ԍ o   ۽ lH ((im    Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0  Visio Visio.Drawing.50"VISIO 5-Zeichnung0# Visio Visio.Drawing.50"VISIO 5-Zeichnung0*  Visio Visio.Drawing.50"VISIO 5-Zeichnung0- Visio Visio.Drawing.50"VISIO 5-Zeichnung07 Visio Visio.Drawing.50"VISIO 5-Zeichnung0:¼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Dü Visio Visio.Drawing.50"VISIO 5-Zeichnung0F!ļ Visio Visio.Drawing.50"VISIO 5-Zeichnung0G"ż Visio Visio.Drawing.50"VISIO 5-Zeichnung0K'Ƽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M*Ǽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0nDȼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0qIɼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0sKʼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M˼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0V̼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Xͼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0ZμPicture Word.Picture.80,Microsoft Word Picture0[ϼPicture Word.Picture.80,Microsoft Word Picture0\ѼPicture Word.Picture.80,Microsoft Word Picture0]ҼPicture Word.Picture.80,Microsoft Word Picture0^Ӽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0` Visio Visio.Drawing.50"VISIO 5-Zeichnung/ 0DTimes New Roman(|dv 0|( 0DVerdanaw Roman(|dv 0|( 0" DArial Narrowan(|dv 0|( 0"0DArialNarrowan(|dv 0|( 0"@DWingdingsowan(|dv 0|( 0PDCourier Newan(|dv 0|( 01g3f .  @n?" dd@  @@`` l/d/'xf##Ge1                       6             H/7 !#$%&( )*+,.2345689::;=6?@BCDEFGH"-AIU[S-A INOQRTVWYZ  '-]^_`abcdef2$*Z閃2$Swl*Z7+A+2$Lp %Bla] ;w 2$*uR7Xb$7K!*ǜIkj1r-2$~,*W=Rk_2$K cqjq$  d2$/6=ؘS 4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOFc More UML MOF dMore UML MOF II`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3feMetamodelling Examplef"Metamodelling Example: An instance#g"Another Metamodel (Simple Version)#3fh$Another Metamodel (Advanced Version)%3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UML). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 x 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w y z { | } ~  3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fjModel Verification Example  3fk'Additional Tests: Model Verification II(;This template is used to generate IDL code from the model: 0; ;3f3f<l(Additional Tests: Model Verification III)IMetaclass used in the generator, this has model verification code in it: JI *3f3f3f3fJN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fVm$Agility and Model Driven Development%^Metamodels, Generators and MDD infrastructure can be iteratively and incrementally developed during the project. Agility considers code and testing very important. MDD simplifies testing and quickly, very quickly creates running code from models. The engineering, creative process that uses an agile approach is not used during the development of the products, but during the development of metamodels, generators and the production infrastructure (as with vehicle mass production). And by the way: You can also use an agile approach with 3GL compilers J ~qH .3f/3f3f3f73f3f 3f"3f 3f3f3f3fP3fW3f#3f3fF  3f 3f  3f3f3f0:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f<TEMP#Durchgngiges Programmiermodell! b!  !3f3f3f  3f$ ;t `x6(  x~ x s *$a` `  ` x x c $b` p0  ` H x 0޽h ? ̙33&!hx] XT{ qAP@QBhe (2p=+2 Nec%h=afvIp33K,{fkuַn{/XZr1ԍprAXMF!,x0.p'`{ #Llr0vd=_:'iOBx5Goa6'ƭŔcG { {+pK鿂p\Ja\ Fx,iB|\X LwpԊHnGSM:r^ySQ 3 03Ir?쳙Ѩ~]KQ$c-,ދH爸 e D;Î3AE0Y!˾f!lFl%qǀriBmȕt 80u56ǃ}HY(S'2vxCe(޷OY҃Wsp:,zB&\tSPB:S .D6RZ )^/GgebyV_k:nN ݤR5.=%=6Pp p/9#:I xCW2$6쉁_oOlG\%TSN'3 ̞XܞF,588~kw-M.q/X}?d&stc t'dd<d۽9XJp"ԺgYNn>N'R:6aفx?U܆TzwNj\m[ XyT.|BX.=đ m%vKB;K[ `ߥ74c` a6žÈ9=vmMUqO27Q,O0ȕMS'pu:Hp>.8 dH$h@aa+{ag[q[qݿ um )>RJ\j+)>5E +s7Q"H,qN[maN8N<7Kwǘ'pJB+e -8+_A /w8B(ſM+)~*(>[%W~;ůDjo\8W}_C?)(u|9ϡTxO1+ϧtK2?\jobϤx {Qп9 '>2#D]++}#`c*Ak`<Fgaw'}F*~aߛE2ކ-sϋ_"{{ bl1#N`ocĞᬤ}eɌjwS8׾ls.}yESs o,~mG^1L%;YG jqNAx[mEhavn~zxanAɼy 0 x1$럻85.jsėQ⤼y ]˛}BI/sw [YKK))kt5zys XCpACobmt^bzz Qum﷫13qͷM;_rwG:^}HA}wl~~vAa~ v<|~D̓`?8g3;|*M'X"TIFvDYK!Xx$b"M f  s` t_17tA*|T'D oTt%`g%"V-+&X&4"X'b9DEHX~~|o跕跕跕跕U1XB t;3ol%LGJD m'j XkD+N'l cEl+bCTE#)F>dD'X:LFHĪm$X12 !@m"ڲcK:KVI#k"XW$bAmv%ݸF߆.FWx<7wBzVЫ0;TXqƩN"n-/8}$}kMᵉB76r,Nbt qcoR9奷3!l#ʏk^lb.4$oaqCMdŦ4 JypرceذaC(4~4;v, 88)w+f\M/>5ZQ&Ge*A=(?|I"acXy< Äٹ}tcL\ʩ+ļ>ԏc{f[3-ZjyN&uCC`ܸ~#:)_7Z"`LEgruq5f4Zvy= Px-ç2- ]yk33axm وd1utm*E44`q7h[=T!2*BL|0(}/E0]Ϯu[Ϧ[^zVs_eyxNjZІcftxrf:sWCTe܇-U4/Fޔ_h9)X9k2i{Vctb:IƧ _O.=pߗ\jlO+N{Y+`"Ҽ~@|o`|N3bJAmO;E3*c/R?Ӡ4`ۉ 9okN̨LL} Fa@ @Fb`u];MAO0 ^ /惾ׯ5haҊG仡nU3n2$~AlWƝ]`MVk%hL;k5}dbf{GM^t`}Ln,)}:~G!L c 3 4&^yeOxNߕOY)ϗhzy{W}r <4ghŸeoVkLC̩_~ThVBPe<ɭDڳjO.섽SWͩZRU^<Pɪ U7j{՜XU;vU s㵵ٽ.עzzU?>Vo~^fS;}umc8'wFƃ*vT Ic9ޓuVwLԍ%O> tCsϭn䰴#H5r}ՒƲG}Eze̘ӀJ/!f%Įˀ^ÝOdc %ARJeah'C&UhӋ>7Q÷2 p|e*30;QYhTg/2sӨ207ZVEx496-)-;m J`Uii iHܺZ$@}z~^Vаe^pVU3YPSpd [ >0$Ʌ}/ #o3SW7<~ʜqƀ1r7w#c7匃m;MSL L+LǙ3}jtل**Խ*U4o}1X^B֊+5f{߸G7UJ^31כ^U]">5K֙-G讽KʼSv<,sp[p;gGWR?2R[ss=֣Iڄn9ha9u.6ݧa$3H>x?Nݬ[Ϸsںb 9CnBmfIX]g0+!ì=hSxe 4'嫺6DZ^}%QQG~R?c@⽋~x[>ylBf11~ȿWx8_ų`y_0yl1ֳe37yYVTgmѾ&+V=pAX~x欜m߲|!:OYÉCR fPT'T;TTG.;Z˴='JQ~[Lu [Wр/VgRO5kOd. JZeV3[X  ĚЦL38I`3 C Y5mwҲY7ژu K?ߗv4mqL1TFB8)UpսO)3@HDH &M+%.ϪK{IϩT7d3;j{, 3 Z5 s GK>̆?f&kj05zegN"raļmKQ-17'{4Զ1'>)?}5nɌjuKs4A^RU;~fV/̮ ? wjV1""]qWQVbowbǨg2oJ,.x XaVx OYa̵d+ 'BV\q|a.VOeLn\'?{G|y]^"_%Y,/؄>_S;YjpQhpŦkh煳J } g1?Y2 <{#JRkղŪ n8C(M7q34 M -0V sjk{x tov5y{D/GG=6팮6ZۄA.(/7]n}%iw_7'(7Z?ǖ\\"[ʅr덖y8?5JeKh%xpWRs^ @l|bVDdJ+ihQ.GjK\8CVU02x5Z"Wr-+`[.k>DltV\d0V]cl5J4\1/~MxW}mQfpޓB5#[ FKQgaTYEOi3o=+_ gݺt gP0t{¾h)ؿzZ /@Ǚ;9|',uʎ2p~n\!gm ¹7|-Ḵ3-\s2GI9d%>,܃-;[oaBWJ+|nYϷ[oesÝ' Ba-,ދ;:]eJԂ#Z_k I87/c{# CI bP_ʣw0)X v;ߌfx9u>'[9uFn'Q_MV,key[2|]2[#CGHQ @tuD  ]V5Sw7J9ۥ- E~7'GX)>#)>>Bx7oJL/Q|9?M)H?gRDY?S(^G r?kۋƆ8fc|Ѷ}e W@GS|$GtNE'Q P|I)ޟ)^J<7QExt59g~#|K-L=r8µo<^({ɣ%g>)ޏ(޳)HRO?S|ū)R's\_?MPqCwSvŗS_Ls)~&OIE(>u@Etⅽ`'>:*י(uVxH6=q~-|'9 8 ]!_w|3vWr:׼cڷiw|zNǙ(q3b} .:upkdz:ׁ}7U΍ύm}A)'X4" sNJm&K+'[N0# 6`3 6`EqK!` wE9x<2n:DxE,`b"n 6`!X$Xw̛`RDkDMH VGx]fN  utoh3p )A測DX%uVvY#\=tqU1 > 9,)kj;CbV#UCfP8YsH5'ɼ@+1 a;}u`VgÀ:T]%gΙd"𧰊GJ\ScfuYfQl{?w=EJwD*\VB9;Mz8kԸ9@N2gr+ؚ2"A-4#*htH4-M1[ekv@VHзmۧrXĽ5ЃA01t=g섒aDko -v 6ԍռՎ5!uɜ d J_o3Xc躹(H2q#s{#Fg[xRj_zՃ!(&pcH9oiѪg3L!ljED|ik V?cl'8)p$`WqX 5ީhc9h a ZN X}dFxq#3g$ *JYAWz{D'LE -y_VbֿZ 7)Ql{1HЈZ[ب̵ \@$?V:?87s32NXSTZd9g4݌]R } 8V"ۍ,9Fʎa p8|.8H{}[G!d#2GV4DFW(Y gVr  8yɧdA8NV]0#ԂF8g'm ) u Q~27N!jV+I-vprǷL%PO9WF~W D\cwS О#*֢Š|P%'@Q4.h`f$J"Ccyf[q#q]ԾI~kہCKWLyK~߷g'x:7rL&hڋQ(4v"ѦʶpY˅ Ը. "bЂA*owh-Y)k8glYŴ'ִm eAqϠCJ8mP*#qي8TI({C6 #GS6臬(B,W+<6^vD@į>RB2=cÇ%!iCK;X(e5,1 Yp >89Dۣ],匝K `QSLTh)!Lm)}$p)^wn΁԰3D L5;&h"` 2eqY*xSs2b  6X@|Ówih']q.:5aJZS1 eiJ+㋡7< 4#E*We94!ٹk~9JZ;RXS2,^.sl2:1iυD%5ҕY $`J&*K4hbxF8AiSBPgBE,P"ׯ}\bo_ez֧OOoA}K@oaNۅiP+&V6kMOe>x>"eO/ |kZfć .tML- {hL` >=E4|\š#6n'!4gɳHh\MXRgz8߃)]P=b^d؋D~yW?1prm>- v:(CTlo`55ZHϱexPW%ϛi~85yC/b"|["CP#@eS,r壉 L:sw }(:x,=qcH1`DSC,(6{D*hE$Y@&V (8ӅQ: MC(jnx+0"̾l iSh'#`dZ`uT); [6Xu7wBmꉵtohO5>@3BKE)P֫;[+O[M n B < ,,1PRHh`*S?חBCX 1?%vH! <3A hd Da q4 id 2_8R87Ԫ l(. L ]HI qm6>HH'$ ŢT);d}O#* ~W qs?sYKgkS 6? ~ڂ:`TTe!nlm =GbW6Gbji!uj6_+3gb7]li yD|CI*m굙3֬fLN)/mL{/h" 5-oo}*Ȁ_F3څ Yizw/xzdp0n f @^#>&aӍ-PJK Rkg @=iHc7CēK^yFNWDrV/)`e $rzhv_rAB. O0XfXCkPAsĿؼjj^>}ov4)F-*Br92|%xwcJzW㙬"D"(KZ`HI;HŸ5 ֒2hʀ}q /USM+)0D\zbJ*21ЬDvRi8%%#l-J?4>ΆU '[ q'Ʒk̆yX[x侞+%\UEmaf?A1˿ De0Tw)5MehA2P,{A"hhIvUkT}pF0e\~Qg~:F.P{cޗ%a9E͋>pL%].8Ka" 3Pf*ISYKPjc)_'!7 D%l73zؠ3jXR[b\z*cumX5J2Ql<ԋd± sɋ! H2H=. ?jO^g4a@`Æ&%BK$5xh:N!h FK}䨍Vcdj$!'Žn^5h(ff*\”]T!`C"g &ˈlE$ 2(QYt O4)HY*U318ACDÜ]  #Xwn@`&9Q[%ι&U~.<4ތ{]t𮮪IcsNdb*yV4 YunKI56ORr I=^PeաUP vOf{^l4C`^\hkF~xϞC46Le,.)*Lo ja/LŦj҉a,,a!b,`)RK6˥0«|-d+eZR*:u};-Wzp)hDpb_*frD,Y"}nW!cb) KԉH!dP%SRlɇ^a!ҝqҪ[wC@o6^%T1Uvo D&a+Юeu)K£{!PF3M9b296S~CF2P=!oR)VVvTKLA@Qzl7`-H %㥤[AQ< q9.)Zj(Tf Za cQv@^{4$OeXub 13`넅:ӢIXUrv2H}Ұn])m ; Vwe#\I{bDB2G\SZy SvC6up|ueoU%"jK:D4:eYk=\X |3q;r4608~9D )X8u<ԎH-qh{;{] A)4ũAjSo}V]Ѐ%B/Xz ȂaEEbA?Hۂؘ(Go"HhylVBCOM"Eʥ]QY:hQps,ϼe4T!璜EBPd2`YlPϡ2#dG샺=R6w }+` 鷊%|1 ǡèBS[4G>5&Dc4`v8=xvCX#=`51*v ?01Lk=ȀIps M"j# %ob$1%ǒ^t)^TC8M1 tr']N(/v;/N9`~~2Raڐٝay3 iaX#&uucC- ~:D>3xᆁoʊqJ-%Z z~vnZ~^ɢ./d<<=#( ʠQLbkd( Oe=<<[Cua}kC7G ڏ*>J`YC᝜mQ%O"yb ?CvN Cu$/-([00XʚE͛K$1ŋk">[m10,k*^qc=܆TPI^Z,c$x%;rg.pϾ" ؚ(4y@Of=O$.h`n%E)!"Ixd ^lTXcU#mvS`:HSs,1hBa\$5(ehJće2EчwAB-dՉ%J)b UU42ge{J~Hm0qڅ3W!6",术~VğbY#g[yK@c`" GNG^|OI|6GT}i'Q TA@a#%'8+KN) ld5C#qրB7U^-`Ō5 AJ)+5R*N)ƵvDu0HwxBЛ'жQJ9cޥ˥jJnL;tJ^r>scvTީ8 zcC7iQ,E^&HYzGP\>R :E9βQCiѧhPh 5 GX ޜ3c;z=DnIyzܞ-+jGlj~[5;Z:t&_TV髩1dΫ?@% a[ȋԫoO~3c<7~ThPBS* +e] +/I](0[4~riycE9;l؏f'bH Acl*;f("s2Y늅&QyQk _8kIbk&?(`ȼ=?\pfX07FaZ ap3Ikз)d Tk3!\jo쾢dOCq5E$楂S ʫVhu͛n2k of򈆢X|޲^ՃPP@t^FQU7<__%;|]O 6 &rŬC.=cSPKWƊ+T~7WU9jAP(REOK>JY\xhS>) QVԯ_Ѵj*i lG R Jp7̫qJxA{y?iRx2n{:%rcY VUn.K4Ly&B|4`F]icDфP,~FCvY"}cTV FQ 픦~WV" /pL7mAS&7"^-q|0P.}?nyB< YA>PvpP@ tڥ_ЀV`vX,?D?xP/ l*"S}{^>dt!|i{KªǼ8OL'u } L=4兽Q,. E>.qV;2)YaD@, 9Y*JuPDA(ވjX-_b;"lqVML`*HK?2#rU!T+OԖs@qQx7w4O.] 6,6 t_d u"c08I#S,R6aldf!z 6[&`&Ev߇hPW P9q/ ul#`u>s{Cx$@S^\]ۡ'DM7-iY^,?`aK?OeS\u_ЫU*"#'Ycb m>EdZǏ@:pA -y%O?>\KK)*i_oQ(B Ac-b- вl6} 9;/S=1d^T@{6s"Ds?{Iꑣ'q)ԔH<3 &qbff1#G A@;qb"-H w9q]SO?1 &A s80^$:>tP?8<΄ O >8BRF^eKKa)$qLpj`=⥾Zۥ` .UC奵8}Jq;R /QcTǙt-f4d,L:B#F_ڙ~#uؘo(M <9Adi @ȶ7UA&' U ٬'\ xpvfRF|BR9#H# [>dkSf~ ¿bMm,fS.hbj Qc?z(Wh/`,H([Sod?>kk a&[/N<6~9a9|B.Wtc#O3,ݺup<7*k*Yر:pd\a2k1xq4pضg1*҇l+/!2s~foBHMt81*Krɼ zZ'?lM#O~^X~}3ԫQbȬ=3hN tf`[?/HXNbr1Fz}#GAp hOnpZ[[vu.\ef[:nXp'Fm. Fou}n|BQ9͛pn)빡}Nr Yځ`&\z@/}m72cWzWw`tsR )d4?>x<ݒJ&'Ovݵ FT.JE/1nkLy C`$kXhsg 4ʾ;:7i:Lhok7tο b~vE!U`!Ɵssضfه;f4*43 ?:A/=3MïxK `m4CM@ hacPb?>8_w7N%`/~!Z:w޵sP68; CO Q-`1mcw h(q"Ĥ~jTŜ:~ ,iÀ;ax&NaQ1`a A {'swnumn#J:3[2Z@_f8_?+0T єyj$1V$jdɅFQ_A=<3t(c#Dv>~b;o?rGG>N0컥oaAy#7 } ydžiFW/6R/4 ?߹ȏﻭW8sp5&Oi0o.*B`mOrAL@O?!Q,(u›eCa)VD9z=z$ :*RfSD?%%G;G7VLbL]o,zIru#<ʦ~xlvԏ9"b:=7$eĮ\/eikf30BVP1/| 8Ib  :BZaMQʔ3"" o{C0 xV33^Ѡbp'ђO'|0G>-D& iE+IAW.!Zf ha#l `y ;H[9|AccSFn[(@<bn'$o8J/+u/F==&(N1}y?Uҳ A2a;D#ͦf`8a dux.a'cͦka]Bz9k3ɽO'dyL&_b!*G-u@ji䧲apᖀzoQN.R| fÂp$9xqKz{ǃCfR3 Dr~n"8V&zW ~Q KZDBc#3QT"p8t/ :1R Ka{+JG^k{:cAg|cv hoSx-5 tTew<􊟯?1puȯ8vaǝQ//%]/񱝈8_Ꝭz EWLB%xi8#\BE P' UwgYW|/z}+ZJf{NG,(EGݗ{Th'0PmWt֛wXCBLIP xr7I.*&pwxyG!k}BSGL)Rx̜>m.ysd(կ!l>(h;/Om-x5(MXs|9EIADKw_ R55!9ް2QgTL|/J.*k-b`q2Pg94rW]_|LLU  R~rݲg~Yҹ5H k~kC8mA]_.g5tG"BnKI\a@u(0C^O݈U`7լ R1‚/` iL ׯ5!x7Uxe``qT{;$3Ndԯ5!Pû^a{/8t&٬YEq\~*ZNGvat!rOuVnoi?Mr7!5"52䫾NQ=*UEp y%x,Q Ꝇy VZAd5KGQ dE :ZX獪V9dt}g5詟OQ 9d.|}5b!5"lbd謣~IENDB`n7@>;%|75ùh~+PNG  IHDRgsRGB pHYsvy&>?IDATx^}t\us:ھIF7f;C#Gǭ\24H +J ޜ4vYNp+X́GGb˭}2nfAq3$3'ɼ9+L;4~ho 60|wwW֮5|9{5@,{GӍnzkp` vѳNqf5]u=ԣ;ltjtkZX@d:חw |itFZxyw`vFq4EcF̘>RVb|́tˎuR ir":/F<>ά3\- _?W 1gYkpYXu@w(t7 qva0=ϋIPcczUSꀮif_7dJC7W5PVzW!Е=.j\AVl ^etBWm,C6AeZfUvPa=W!>>4]^ F$vg}~fE.&]3]n⓽򦱽ia!:Gl;>87;ˍHP jl!+XJatZlCWW=>Cvܶ:iU֝W a#-}MY^ޞz5Ȧ5;W8p0m{2q'-+H]3 = c+aO^ *u n]zklE/U݃ t:xމP+XAqo]70vsPې>7z1bt-VêJJYZb]D]; =,l8(dHģFoXA@l'8i;vy5 ǟ|G 5w5J=^'YFzТ0y?=7>@`|5O' c򥿧Mk|`''ԭ· QCk uXᚹ6, 쵝2">@G@e|+$8选kU8Yi3#ʎ"Uc%r]m@>M|{@LXZ8v;>@,ۙA =;Z\uƞtýag~:vO0i:Vr/SN̸eW%/PާSe'C;cZ(Oۀ&D|yx?;A$wv\G n6Xo h7F*'%܂4WO}_uC|LZCLxL}/wDûN$nա(r l#06 9tJ[DΩbA\[c%^qE4je-bt7 U7z#e`&?뉟-dN4ʄ n vWLўrQ"0t330ti.0f65;H=nT+;?`0cf]m{(z`5}gQ1f^7=G(3( kTQ <'tўTne_NV:;eFє%ʂFi,Bs;xꑂ\)#t(hP2G@GSδ5\?9; &њtWD-B#O%F N肻\"TڽH3 .5y<<:*$QNǓ^LuMil=y2S ,y-e;'_vωP!0 -oiuEsl!Dq;Ai~(=!@c/!ߖHíAjD4sJ%_u;BכR팽<}wў Tn5йOf㦐5blES,.6ۼ*nO1rM須 .yh7t ?ed' OXN)XkvyoǧsENx .,p׀߷(éz*QAU™T"3ZH$ _Д!'l:B2n˗],=22VIB!7AjOcC*}Ruw9إ?}~++1=T;8i֝R(l  p0f.p\ fD6w77}} 2"o:b"3@ ԖJjiZ57[ڰ*W JRQ}@Cpjz 0^[L&M`5Sz#T$8Gf&Pl?^釬( EvRnmi(u*iX`W}N0Oeu.Z7/E墭u a&NC3mx)!<+ _Zݱm?C3g;#H^f<pmTh.NQঋ"DEdH̊ҥ0k9im͐hyz@ocW67~m_zO#cr]sr \C|f!_H=ڰc>j.j>Xe:4H񌽏5PO[} %QK7pbRy$p/+8c.ppmLhN)StҰ@}yLQژrUҺ-  *_qƠgdu_H Xn$JPNB'_)jh4.1nM6cz ͑g"FRՓLBOZX*՚hNM7AQY ІRf$|掖f3h~"SD() ʙOCt\ tؕͱ͑ا/OOyس"pO73`ssȓ&WG_Z3b$՘ps}yKg 9, :Uԕc|AX}|uE{X?,g!]clO\Qz)&,FY*1`+d2Cd/1- C"~ )χ>k'>q\&CW6u5@!e3APMQ1lQw@$>h.X0zKb</yҨnڠRٶ;%Vg hQpG~R> 5?nȗϷ-+#<9[P#ɤ41[f5ɺ0v} jĮ3[R&!b@Ώw9oHgR!u60β )|Ѩu q"$(d) ۟܎,KelAR1wd(yRIJE:Y5e b"ԯ64?%BS!L?l8mJ;iA(}wb^{ʘVbHG8}vހu|mh8c:pWX0kCJ¾ HD"iq-['HѨGD'ŀQ^Ժ|m%Դ-K`({so6D]^!omB,qxs"03Ão6%Bﻲ*&Fy]l<&6A,#7IQLhƸNf!" UiUa0|KFv U] Y8Q3;8<G*Iĝű&CS_p=ykt9gײ\Վ]A9Y"e-` Jѥ9enx1Ydt4̦ݘy)hhS :[Hv-B""in3cܬF(p5h.Mq#*5fT{1!VU%@fwZVsh{XM ;i#L)!yi0X, ;*,LRS?Vz+fz@$Z'sP]$aQcG[ \uX^Ee͛Ʒɬ *%zA~z3<+Pl_ us ,zjCF ,<|. 4w42,Gjš]q爝f q-i<~^ D]WtNs{ʰjUok!:>-*hYRΪhG(|z͇l}8:4؆} w 4md,30J*"*F  CB tX nBW iqJ=1_f{AР9h\lC#h)]\CK'CI:~u%U0JAT,P X z?Cx D_cK >92(u ,p pE@lM4AgSOd d!XTtPx 9_t`ڦCkA6ZA3x3+9X^Q؜> J|j[$.޼N1Eo[Üvcwv3]X[x/@< "z]ߌ8_aSbk pE'RG^(]R\ 3ց#z;vitrwG6'w_q,6x4ˡl:LҬ 3܍XvjpΫ35[B4̓ dnboP% ɾ#/c4~"gx{3'34$ނh A|.phA#m6 R]eŃNd`aC i?u(!C)dXe 86;`ae i!CQQ$64 [쌵Ӛ{Y dP>M4rtC93y]ɅKQdip P^䗳&a7S[6J QrQ8)fkю߻FWMcTa1H(nᘢrsQ+b*557~PQAd7\ABYONwª gP8_!\.4t0tU3GཝcQQ:"G5Z"0uVT}4Il9ϐPP$]rr P\-U$)+mŠɫFވW pQʲcưݵy:3/܊CRY`ecDf5ʸE>M=5kRl˨=>^ٔD x[7DYZR1׌o PI/QXز"F1#tGXƷK2e#W6*T`0ͥ+ `p wC,]ȩkoX0"6P5L'c&1w/86܅U/ s}W@WZL\d u>UB0vDaкC Q:.8W M:<:t)ȁ`WxgdHƙ .rF/UmB\ o( JF$ލtVE)WcJz!}t8_1D8(r*5]5C$L(tȔ{mY`TTT/ g7Ŵ/a*XaWW.b|27ڜt5p"`3Rr08Utp@PWJ9YQ܌Ĉ^3o Ӗ< BB1/KH[ zN)577}S0C':̩ReͿgP[,T)̷d >Udæㆶ7o snd62N$5)U>IYqRqr?m; :΢z`l! D)܇\5*u%gF ?g勵Vm. l5D}vK X pL0eq 2Ùc͙&XG@TZqCSX2qBgnl؁RBũz=xֱ15:ԙ 9(«Qᄇ-Rq"_2.ܡ4L#R8WJㆎNs" R )>xWlBB#n=20|3Y0;'ohfާLUYfu{Sc$[؉W2⦊4 !^y]hg~{4SxLũh:mn4`LpXo 6 $0|;IRT`Q6+a`x]RIB7 Ps{:Z|..(dugR4B42H$$PwŒGT鈴ΙuKj0wRx9G{+\Tp_iMC)1gi!"X@xuZϴI<%E zVZvy} 8/w‰bD>ᑖv+E+!.&us'w?i +sܕ`8SLv߉D{M{50].\8-7*5?[^ɚ-$1!F -Nu%]Xs>*Pj{Xc_q"I4ZBrGnwO%>PVU:ۄѹRV2>ęa*_a/1\)k:Ԥ S'ҌKB+@p>W2ROH .\aHxt?j̈IhrK2[WTT"Uѧ {>`‰6탧uA\2Z wXŏ>ƆHA%x#g-7ؓe*`o-wwGfeB>O N}.~I+wf,|^|eԏ| J?:Ye~]a1/ SHFMcRIH\I9V.?<+> ӯrU;Ȁ2VaL@, 9Jj8,7kQBƕZ JurNOY4nmC!z eGxpvS֯*Nk 5憿te:xbIzo\mbUA yP bF)ԅǵn -Qz|G*yRPҏb{X1tiڞԩh~+rWIwM̑=MFRf2lSh;UiÙ8/%e z$ o-.PIZG~o*少Bֈ:و[gF6<ΉXP6`{EJʥDCL+Rl/׾9 `9z$'N#uX;/@Gts_8}wAs< nu=~8Υ9j0˝w- ^D&R9~9[}6 WN&O|@Ç.0O^'47#L v/ekb1԰p: [lW/e!P(fSΡ*6~Qc?>h^ɫ" Xҳ=;H cl 5&`E$<ǶDFy|1,F:5߾;AxG*^S&pɧLNM2VW;@ ;҅t8)3^\ &Ƴ㣇Gљᧇ[7^֊F,[ Exl9҉d"]8\jdrvr+ Qy]'>#L$Z,⇞ڿ,q`qdsyq![ѯjs?pxt>΄Håi2)\9.Fz=pXJUl8UO^ؒ?D<ǹBo))m.WCyD/ T-=-Mf F(lpvj:M'I(d#><|hPەmm-'NP2 >IcP AqmVBzmWZj<z_ͱ1>u@Z(p$Hl#w 3bb;b m 툑b%^261f0?~最/`Q$]r?>R׹58x`Gm-m^Lnͨ7OLMg)sŕ÷~it!nݺz?O7J:͛}};wvp>~WA`>7K MGm{Tt4e )LCzy:vzz@d P&-~}%v 꽞d3]ȁE=-S'7ަᧆ,ӯNٟ/513-Ӓ>=v1 VhxށGJt?L8rS3_i<R2{4L?1~׷ =:\ha 4^܈"rMl|gϛoi/[cGE~kGD7GyguQqy}&O'|zˋ^_~+!u.1/WX'>d'삍E$#?vo=HW%#s: ;rro/j@!VO<2M(2kBsM ::G7B`)i¾ҋꁿ23a%ߺ__7Y@Cx ?g(NvO%`=6^|tz:.蹹|r Q @!q*n8A+791i6'&6AfR 796 ـ` Р@\i|>Q=}S][ pSs~v+J*fme#` G R":8r`~r81992Q70<Pֹd,Xp|bK_0PyT 'NyIw ([z{?Ťo 2"+ ӌ`x\k,Ng:$(+i6"]k];{[ <bI8PS qLD>um؎b0sK/p$m &R$tIyJq;.WzllvSD"~<˽uIiA +B뢪9TpE]_anoxEɶVx޶Hz%2zxdm>\`LCs/ǫJ0 u٩|ckf8PKzd{p'Nj"[xÃBaN3;֔:~z TO2S$rW$V8P-3LaD2Hz :8Py&,xy\&_d* xp_$bO$f0uހΣ@|Llv\fvD*h]ZQSϵD\VHI qA?LbB[k^7]FRɔV g%J޵kr<+p./@2tAw_ړFqk78zxؼ$zz1EZ;HD#ECz)N:|@sg4&w)5΍+jJDlOHTB/gGܗzh?ő ekת :a]{ΏLq5ۣOS6;|b;kɎay^Pa@Pk"&!r;܆%cZUX@g8v(coVW1>]U2^,8⁎dNYv9S*U<|/N_r5 x#gծLsRQ!ì핪WflZEX@G8Z8vB+-.w_M46֮Á t:/US+N7p9Hӽ#=ܷz{ήD r"P;Lwq of:C.VՀdf*LV!8e|F:^$0/24S;xey_mRF ˾@ uXas9FY3W?rA#k "Ack srth ^%9׊jIENDB`    Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0 Visio Visio.Drawing.50"VISIO 5-Zeichnung0  Visio Visio.Drawing.50"VISIO 5-Zeichnung0# Visio Visio.Drawing.50"VISIO 5-Zeichnung0*  Visio Visio.Drawing.50"VISIO 5-Zeichnung0-¼ Visio Visio.Drawing.50"VISIO 5-Zeichnung07ü Visio Visio.Drawing.50"VISIO 5-Zeichnung0:ļ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Dż Visio Visio.Drawing.50"VISIO 5-Zeichnung0F!Ƽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0G"Ǽ Visio Visio.Drawing.50"VISIO 5-Zeichnung0K'ȼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0M*ɼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0nDʼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0qI˼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0sK̼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Mͼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Vμ Visio Visio.Drawing.50"VISIO 5-Zeichnung0Xϼ Visio Visio.Drawing.50"VISIO 5-Zeichnung0ZмPicture Word.Picture.80,Microsoft Word Picture0[ѼPicture Word.Picture.80,Microsoft Word Picture0\ӼPicture Word.Picture.80,Microsoft Word Picture0]ԼPicture Word.Picture.80,Microsoft Word Picture0^ռ Visio Visio.Drawing.50"VISIO 5-Zeichnung0`ּ Visio Visio.Drawing.50"VISIO 5-Zeichnung / 0DTimes New Roman|dv 0|( 0hDVerdanaw Roman|dv 0|( 0h" DArial Narrowan|dv 0|( 0h"0DArialNarrowan|dv 0|( 0h"@DWingdingsowan|dv 0|( 0hPDCourier Newan|dv 0|( 0h1g3f .  @n?" dd@  @@`` //'|e$#Ge9                       >             P/; "#$%' ()*+,.2349:<=>?@A>CDFGHIJKL!-EM\aW/I QRSUV[]]^` &-&5678XYZb2$*Z閃2$Swl*Z7+A+2$Lp %Bla] ;w 2$*uR7Xb$7K!*ǜIkj1r-2$~,*W=Rk_2$K cqjq$  d2$/6=ؘS 4s R$OEf-CXIS̓0I2$O؆Hrs43W2$1g=7#w2$TxpGڤ3XT2$D (L^ߒ=t 2$?Pac>c ! N 2$0k!(L 2$d]jҔ4؍ #2$0~̙=+QM-2$'.*m;rhO F32$8ćᵅ^  >b$P+<23T3LkI2$nbQk'>^4 m2$dufg>̒ys$2$;%|75ùh~+?@c $ 3ff33B@, g4KdKdv 0pzppp@ g4=d=dv 0pRp6 p5<4dddd` 0,<42d2d` 0,`Iʚ;FT4ʚ;<4dddd{ 0:2___PPT9/ 0?+ TestO =YjR0|Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f1}Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f MDD defined :Model Driven Development (MDD) means developing executable software from higher-level models. A Model in this context is defined to be some specification that cannot be directly executed on current mainstream platforms (such as Java, .NET, Intel x86, ...). Models can be graphical (e.g. UML, Aris) or they can be textual (typically called DSLs, or Domain-Specific Languages). Code, on the other side, is directly executable artifacts on current platforms. Thus, the definition of what is a model and what is code is always relative to current mainstream platforms. l_wPn%3f73f3f3f3f3f3f63fG3fw3f  3f  3f  3f  3f  3f3f93f43f3f3f;4How to execute models Executing models can happen in different ways: Models can be interpreted by a  model-VM . Dirk Riehle s UML virtual machine is an example. Typically, however, models are compiled into lower-level models or code, which is then executed (compiled or interpreted). /3f3f3f3f 3fb3f3fU3f5Abstraction and ConcretizationlTo make model-driven development worthwhile, models must provide some higher level of abstraction over the platform on which they are executed. This higher-level of abstraction is typically achieved by using domain-specific abstractions in the models. UML models which show a box for each and every implementation class might be useful, but this is not an example of model-driven development. These higher-level models are then typically transformed to more concrete models (and/or finally, code). This can happen in a single step or in multiple steps. The rules for such transformations must be specified somewhere. kx-3f53f.3f.3f/3f3f3f  3f  3f  3f$  3f  3f3f 3f3f13f 3fmT'Abstraction and Concretization: Example(3f6Reasons for using MDD`You want to provide a way for your domain-experts to formally specify their knowledge, and technology people define how this is implemented (using model transformations). You might want to provide different implementations (i.e. more concrete models) for the same model, perhaps because you want to run it on different platforms (.NET, Java, CORBA). In general, you don t want to bother with implementation details when specifying you functionality. MDD results in a fan-out, i.e. one set of models can be the source for transformations to several targets. Fdk#3f23fV3f3f3f3f3f3fQ3f3f3f13f#3f3f  3f  3fS  3f3f1=Software System FamiliesTypically, MDD makes most sense in the context of software system families because developing modeling environments, generators, translators, etc. can be a lot of work and it pays only if reused. What is a software system familiy? We consider a set of programs to constitute a family whenever it is worthwhile to study programs from the set by first studying the common properties of the set and then determining the special properties of the individual family members. Definition by Parnas $623f3fz3f3f 3f3f3f3f3fT3f$3f3fJ3f  3f3f3f3f3f>%Examples for Software System Families&A set of projects in the same domain (banking, telecom switching, automotive diagnosis). You might be able to generate recurring business logic from models. A set of artifacts based on the same infrastucture (such as EJB) in one project. Here, you might be able to to generate all the infrastructure-specific code around manually implemented business logic. you have some specific business logic that you want to run on different platforms. You might be able to generate platform-specific implementation code from the models (this is the focus of MDA) a set of artifacts based on the same modelling paradigm, such as state chart. You might be able to generate the complete implementation based on the model and its predefined mapping to lower-level implementations.ZDRxToO3f"3f63fD3f 3f  3f)  3f  3fx3f 3f3fF3fo3f  3f $$3f.$$3f$$3f((3f7Generative Programming:Generative Programming and MDDThe Problem Space in GP maps to the models in MDD. The Configuration Knowledge, as well as its production plan can be considered the translation from the model to code, or another model. The solution space contains the building blocks that are assembled to products, based on the specifications (or models) in the problem space and the config knowledge. This points at an important point: For MDD and GP to be successfully used, the target platform has to have a well-defined architecture with well-defined building blocks, interactions and semantics. This can be The syntax and grammar of a programming language An enterprise platform such as EJB or .NET Domain-specific artifacts such as reusable components, VMs, rule interpreters, ...3f 3f&3f3fn3f3f3f3f 3f3fx3f3fm3f3fK3f  3f;The Role of ArchitectureAs mentioned, to use MDD efficiently, you need a well-defined (family) architecture. A mature, reused architecture is also termed an architectural style (just as in historic building architecture). Such a style consists of typical building blocks, their interactions, and semantics. There are several well-known architectural styles (see next slide) An architectural style can be generic (see next slides), it can be domain-specific or specific to a software system family A formal description of an architectural style is typically given in the form of a metamodel ( syntax and  grammar for the architecture) Architectural styles have also been described as architectural patterns, eg. in the POSA book.U13f$3f3f3f3f3f3fO3f23f3f 3f'3f03f3f3f3f3f%3f3f3f?3f 3f`3f3f3f?#A selection of architectural styles$8Reasonable Modelling ConceptsTo specify models (graphical or textual) we need a suitable specification format. The specification language must fit the architectural style  it must be able to represent it! Textual specification are typically called Domain Specific Languages (DSLs). It is defined by a syntax and a grammar. Graphical specifications are typically called a model. The set of legal models is defined by a metamodel. The UML can be one format for graphical specifications. However, it needs to be adapted to become a domain-specific modeling language for a specific architectural style. UML has some means to be extended (e.g. stereotypes) UML 2.0 will provide a reasonable extension concept based on metamodeling (MOF).  ,3f&3f3f83f#3f3f3f3f13f3fG3f 3f3f3f  3f  3f+  3f  3fS  3f3f3f3f33f3f3f3fYModelling Concepts: Example ROOM: n 3f3f3f3f3f 2~Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fBMDA Definition by the OMGMDA provides an open, vendor-neutral approach to the challenge of interoperability, building upon and leveraging the value of OMG's established modeling standards: Unified modeling Language (UML) Meta-Object Facility (MOF) and Common Warehouse Meta-model (CWM). Platform-independent Application descriptions built using these modeling standards can be realized using any major open or proprietary platform, including CORBA, Java .NET XMI/XML and Web-based platforms.d3 3fE3f3f 3f3f'3fd3f 3f33f<3f 3f33fC'The Problem of Middleware Proliferation(Unfortunately J, not everybody is using OMG middleware standards. Intead a lot of different middleware platforms are used today: CORBA, COM, DCOM, MTS/COM+, RMI, EJB, CCM, MoM, MQSeries, JMS, HTTP, XML, SOAP Most of these middlewares provide common services such as: transactions, security, persistence, directory, event handling, load balancing, failover. It has shown to be unrealistic to standardize on a single middleware platform; within an organization, and over time. The goal is thus to enable platform-independent applications by separating business models from their technical realization. jw~3f;3f'3f`3f3f"3f3fc3f3f"3f,3f)3f3f3f"3f3f;3f3f3f]D Models in MDA*As the M in MDA suggests, models are the central concept of MDA. As in MDD in general, a model is a representation of a part of the function, structure and/or behavior of a system, and it must be formal so that it can be interpreted unambiguously by tools. In contrast to MDD in general, MDA models have to be built using the OMG s Meta Object Facility (MOF). According to OMG, models can be source code (a model that can be executed by a machine) A set of IDL interfaces (a model that can be used with any CORBA implementation) A UML-based specification (a model whose properties can be expressed graphically via diagrams, or textually via an XML document.xXg  3f&3f3f3f3f3f3f 3f3f"3f  3f3f3f 3f/3f3f:3f3fg3f3fFModel TransformationsThe creation of an executable system from models is achieved by a series of model transformations, the target model being more specific (more concrete) with respect to a specific platform. The MDA defines the following two kinds of models: PIMs, platform-independent models are models that are not yet specific to a certain platform PSMs, plarform-specific models are models that are specific to a platform. Note that the terms PIM and PSM are not absolute, they are always with respect to a certain platform. A model can be both a PSM and a PIM at the same time, but with respect to different platforms E.g. a model can be a PSM with regards to the J2EE platform, but a PIM with regards to the specific app server.<3gB3f3f\3f3f3f3f"3f;3f3f,3f  3f3f3f 3f,3f3f%3f3fHMDA and Architectural StylesAs explained before, a well-defined architecture, an architectural style, is of primary importance if efficient MDD should be implemented. This is also recognized by the MDA. MDA defines a set of Core Models for different domains. Core models are currently known by the name of UML profiles. They serve as a common metamodel for all systems in the particular domain. There are core models for Enterprise Computing, Real Time Computing, ... They leverage UML, MOF, CWM, ...B90!3fN3fM3f3f3f 3f3f/3f 3f3f3f*3f  3f3f03f3f!3fIMDA and Architectural Styles II 0Core models are real PIMs, in that they are independent of any particular implementation platform. They only capture the business logic  the problem space in terms of GP. A series of model transformations is then applied to concretize the model for specific platforms. Mapping rules (as covered later) are part of the core model definition  they operate on the metamodel defined by the core model.f3f 3f3f53f-3f3f3f3f 3f3fC3f3f,{Profiles (as of 12/02)&Domain Profiles EDOC (Final Adopted) EAI (Final Adopted) Schedulability, Performance and Time (Final Adopted) Testing (Revised Initial Submission) Technical Profiles CORBA (v1.0) EJB (Public Draft: JSR #26) JAVA (s. EDOC) .NET(open) WebServices (open) Mappings: EDOC->? (open) EAI-> ? (open) V 3f3f3f  3fV3f3f 3f3f3f'J Traceability There is one very important concept in addition to metamodels, PIMs, PSMs and their mappings: traceability. The idea is to link artifacts in different models that denote the same thing but in different levels of abstraction Example: Analysis class business Entity EJB implementation class, set of classes (remote interface, home, etc.) plus deployment descritors this set of classes tuned to a specific appserver A typical relationship is  refines Consequences: You can see the history of an artifact All the models at the different stages can be kept in sync, keeping their different levels of abstraction A change in one model can be propagated to the other models, if rules for such propagations exist.lt^3f 3f3f3f3f#3f3f23f3f3f3f3f3f3fJ3f23f 3f 3f3f 3f  3f3f3f3f3f3f3f3f13f3f3f3f(3fLTraceability IIUML Packages play a central role in MDA. Packages can be a refinement (mapping) of each other: Packages can contain the same information seen from different viewpoints: X 3f13f3f,3f/3f3fM Repositories "To realize the concept of traceability, a powerful repository infrastructure needs to be established that stores the different packages with their viewpoints. To make a repository feasible, a common metamodel for the different models is necessary. The repository will be implemented in terms of the metamodel. In MDA, this metamodel is obviously the MOF. This allows vendor-independent model exchange on the basis of the MOF, provided that The MOF and its streaming format XMI is unambiguous and completely defined The metamodel is powerful enough to accomodate for all practically relevant uses The models are formally implemented in terms of the MOF Vendors stick to the standard, and don t try to add stuff. Currently, all of this is not yet the case, but UML 2.0 promises help. ZZZZUZZHZ(3f%3fR3f3f3f3f3f3f3f3f 3f!3f(3f(3f#3f3f3f53f3f3f3f3f 3f3f3f3Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3fP"Software System Families revisited#Developing an MDD infrastructure  however simple or sophisticated it may be  is always additional effort. Such an infrastructure can include A clearly defined system archtecture Modelling abstractions, metamodels and pofiles Model verifiers and design checkers Reusable components and composition rules, frameworks and libraries Generators and/or model interpreters You only want to do this if this additional effort pays off! Like with mass production, the amount of effort you put into the infrastructure must be less than the amount of effort you save when developing the products. Rm#=3f3f93f3f3f3f3f3f 3f3f  3f  3f$  3f3f3f13f3f(3f3fPQEconomies of ScaleAs a consequence, this basically means: The more products you develop with your infrastructure, the better. However, there is a big difference to traditional mass-production. You don t want to create many identical products (because you do this by copying the CD!). Instead, you want to develop similar products in the context of a software system family. An informed decision to use use MDD based on a software system family can only be made if you know your domain very well  you need a  mature domain .mZ)3f3f&3f 3f3fG3f-3f*3f3f3f=3f3fW3f"3f3fRMature DomainsTypically, a mature domain is the consequence of domain analysis (see next chapter) and especially experience from building ( handcrafting ) a set of applications in this domain. Mature domains are typically implemented with a particular architectural style, perhaps depending on the technical platform. Obviously, it is also possible that a larger community or a standards body gathers this experience and thus comes to a mature domain. This is what the OMG does with the core models It also considers the mappings to technologies to be mature domains (orthogonal to the core models). L}"3f3f#3f)3f'3f3f3f;3f/3f3f$3f3f3f3f<3f#  3f   3f  3f&  3f8  3fN4Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD    3f3f3f3f3f3f3f3f  3f  3f$$3f((3fSProduct Line EngineeringDomain Scoping Variability Analysis Domain Structuring Define common architecture Define Production Plan Define Building Blocks Components DSLs & Generators Production Processt8J083f3fJ3f3f03fTDomain AnalysisGoal: A domain model (aka metamodel) Scoping defines, what is part of the domain, and what is not (defines the range of possible products of the family) A common vocabulary defines the terms in which the domain can be described A result of this process is also the knowledge of whether the domain is mature, or not ( are there more commonalities than differences? ) The commonalities and the differences between different products in the domain have to be defined Variability Analysis~%uK{3f 3f3f3f 3f,3f83f3f3f3f73f3f2  3f%  3f3  3f  3f  3f"  3f>  3f 3f  3fUVariability AnalysisVariability analysis discovers the variable and fixed parts of a product in a domain. Parts can be Structural or behavioral Functional or non-functional (technical) Modularized or aspectual To define variable parts, we need to have a commonality base: a base platform, a common architecture There are two kinds of variability: positive variability: add something (optional) negative variability: removes something (essential) Positive variability leaves the concept intact, while netative variability does not. d[e$cV3fP3f[3f3f%3f3f'3f  3f 3f3fc3f3fV3fVFeature ModelingAs a consequence of the domain analysis and before defining a concrete metamodel, usually, a feature modelling phase makes sense to systematically define optional and mandatory features. A feature model describes the (sub-)features of a concept, subfeatures can be Mandatory Optional Alternative N of M A feature model can be multi-dimensional A graphical notation exists: feature diagrams N&)0]3f3fM3f3f3f)3f3f&3f  3f  3f  3f3f3f3f3f_Feature Modeling: DiagramsRequired Features 03f3f3fWExample Feature DiagramExample products: An aircraft with a low wing, piston engine and made of metal, wood and cloth: Robin DR-400 An aircraft with shoulder wing, no engine and made of plastic: ASW-27 An aircraft with low wing, jet engine(s) and made of metal: Airbus A320 3fP3f 3f@3f3f=3f 3f3f3f  3fY.Feature Diagrams cont d~They can contain constraints on the combinations of features They can define  names for specific combinations of features; feature groups Features can be open: additional subfeatures can be added Features can be incomplete: the subfeatures are not yet defined Multiplicity of subfeatures can be added And more... =N:@) 3f 3f!3f3f3f!3f3f3f3f3f%3f3f  3f   3f%  3f  3f3f 3f3f3f 3f@ZBinding Time AnalysistA feature diagram defines the common and variable parts of a system. It has to be determined when it needs to be decided if a specific (sub-) feature will be present in a specific product in the family. This is called binding time. Binding time has consequences on flexibility performance code size type safety and: on the technique used to implement the variable aspect !j]3f3fa3f3f3f3f 3f3f:3f3f3f3fu[Typical Binding Timestsource time: manual programming, template parameters, generators Compile time: function overloading, precompiler, template evaluation deployment/configuration time: component deployment (impl. for an interface), environment variables link time: DLLs, class loading run time: virtual functions, inheritance & polymorphism, factory-based instance creation, delegation AFdg 3f53f3f 3f93f3f3fF3f3f   3f  3f  3f   3f^  3fu\Binding Time Consequences]Relationship to MDAMDA does not define the process of how to come up with all these issues (domain analysis, variability analysis, etc.), although I think this is important! MDA also does not explicitly talk about binding times. However, it implicitly assumes that features are bound statically during subsequent model transformations. MDA is very code (and model) generation centered. Feature models can thus be used to model which feature will be fixed at which stage of the model-transformation sequence. R3f|3f3f3f)3f3f3f%3f03f(3f5Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f^Metamodelling definedMetamodelling denotes the definition of models for models. Analogies: If models are a language, the metamodels are the language s syntax and semantics If models are considered objects, then the metamodel can be seen as the metaobjects/MOP Why metamodelling? Models become unambiguous if they are formally defined Models can become more succinct and more expressive if suitable metamodels are defined and used Model exchange and interpretation is only possible if they are based on a formal metamodel As in most cases, modelling uses the UML we will now focus on metamodelling using the UML. UML itself is defined in terms of a metamodel, called the MOF (Meta Object Facility). The MOF uses UML as its representation; [}3f3f3f 3f 3f3f3f  3f3f3f 3f/3f"3f23f3f93f 3f>3f3f3f 3f   3f  3f  3fP  3fEModels and the MOFc More UML MOF dMore UML MOF II`UML Metamodelling: Stereotypescan change the meaning of a model element (eg. class with stereotype <<interface>> is an interface, not a class) Stereotyped classes can also have their own symbol in a diagram A model element can have at most one stereotype The meaning of a stereotype can be defined in terms of the MOF, e.g. using OCL constraints. (eg. the number of Attributes of a class can be required to be zero for a class with the <<interface>> stereotype) Currently, UML tools typically don t support the latter feature for custom stereotypes. However, model interpreters (or code generators) can enforce such constraints. q@0 3f3fZ3f3f"3f3f 3f3f3f3f3f  3f"  3f2  3f   3fV  3f  3f 3f"3fz3f3faa UML Metamodelling: Tagged Values!>Tagged Values are basically name-value pairs that can be assigned to a model element. Stereotypes can be used to define the allowed tags for a specific stereotyped element in the model. (eg. a component stereotyped EJB can be allowed to have the tagged value transaction with the values required, requiresNew, ...). V3f3f)3f3f3f3f83f 3f3f3f)3f 3f3f3f3f3f?b"UML Metamodelling: OCL Constraints#The OCL (Object Constraint Language) is a textual, declarative language to define constraints on UML models. It is thus used to express concepts that cannot be expressed with graphical UML syntax. It provides invariants, preconditions and postconditions. OCL cannot just be used on ordinary UML                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z models, in can also be used on UML (MOF-) metamodels as they are expressed in UML, too. Thus, OCL can be used to constrain the semantics of metamodel elements, for example based on a stereotype. nX:k33f3f'3f3f3f53f3f3f 3f3f3f3f3f3f3  3f*  3f#  3f  3f3f-3f%3f3feMetamodelling Examplef"Metamodelling Example: An instance#g"Another Metamodel (Simple Version)#3fh$Another Metamodel (Advanced Version)%3fc UML Profiles UML profiles are basically extensions/adaptations of UML for specific domains. Profiles use the previously introduced UML extension mechanisms: Stereotypes Tagged Values OCL constraints UML profiles can be specific to an architectural style, a technology, a business domain, or a project. Examples are Distributed Enterprise Systems Realtime Systems Business Process Modelling ...OA*uO3f3f3f3f3f3f 3f3f3f3f*3f  3f 3fU3fO3f dMetamodeling and the MOF Layers Metamodelling happens on the M2 Metamodel level of the 4 layer MOF. As Models (M1) are instances of the metamodel (M2) changes to the metamodel will change the semantics of the instances of this metamodel (i.e. the model itself)J3f 3fU3f3fU3fKModel TransformationsModel transformations are based on rules. These rules map constructs in the source model to constructs in the target model. Transformations are obviously defined in terms of the metamodel. |B 3f3fT3f3f3f$3f3f eAnnotated ModelsrIn some situations, the information in the source model is not specific enough to allow the transformation to the target model for example the target metamodel allows several representations of a construct in the source metamodel. In this case, the source model needs to be annotated with information that allows the transformer to decide which alternative to choose. i +3f$3f03fi3f3f+3f 3f13f$3f3fsfAnnotated Models IIAn interesting question is what kind of annotations we use. If we use concepts from the target metamodel, the annotated source model is not platform-independent anymore. If we use concepts not represented in the target metamodel, we might not have gained anything because we still don t know how to do the transformation. Pragmatically, the question can be answered as follows: Whenever possible, try to avoid the need for annotations by extending the source metamodel with concepts that allow the transformer to decide what to do. Define these extensions with concepts of the problem domain. If this is not feasible, annotate with concepts from the target metamodel and accept the fact that you have sacrificed platform independence to some extent. P<8t  3f3f 3f 3f"3fL3f13f]3f3f8  3f3f3f3f3f3f03fT3f3f3fgModel Transformation Example0The following example is taken from the OMG s MDA documentation. We start with a PIM, basically the analysis model. We already use EDOC stereotypes. AU  (3f3f3f3f3f3f03f3f3f  3fh'Model Transformation Example II: CORBA (We select CORBA as the target environment. Based on the metamodels, the mapping automatically produces the following PSM: Note that this PSM can now be refined even further, exploiting the features of a specific ORB. ~ 3f3fg3f3f(3f3f-3f3fi)Model Transformation Example III: Mapping*SThe mapping rules on the metamodel can be specified along the following lines. O 3f3f,3f3f3f3f  3fTj*Model Transformation Example IV: Notations+There are several alternatives for notations defining the mapping rules. UML 2.0 will provide support for these kinds of things. You can use UML diagrams, OCL constraints and action statements. There are tools that allow textual specifications along the lines presented on the former slide. (See later TENA example). You can also use XSLT to work directly on XMI files. But you don t want to do this J See also the code generation slides for more examples. `Jy{U8 3f#3f3f3fD3f 3f)3f3f3f3fI3f3f  3f"  3f  3f 3f  3f  3f8  3fk,Model Transformation Example V: The IDL Code-The next step is another mapping, that produces an  IDL Model . This can now be implemented in the traditional way. 3fl,Model Transformation Example VI: Annotations-We could similarly map this to EJB, refining it further to a specific J2EE server. The EJB mapping is a typical case for annotations because there are two primary ways of how to represent a business entitiy using EJB. We could use Entity Beans to represent entities, Or use the Type Manager pattern Using traditional annotations, we could create an annotated source model that contains a flag that indicates which option to use. We could use an UML tagged value for this. 8SD3f3f13f3f3f3fc3f 3f"3f 3f3f  3f3  3f  3fh  3f3f3fn-Model Transformation Example VII: Extended MM.The better solution would be to enhance the source metamodel with concepts that allow the transformer to decide which option to use. In this case, the decision is based on a couple of criteria, such as Is the entity write-accessed concurrently Do we have bulk-read accesses Is there batch access to the entities Now we have no EJB-specific information in the source model, and we do not need a annotated model. Eqc 3f3fI3f3f3f)3f 3f3f3f 3f3f 3f 3f3f  3f 3f3f3f3f3f3f3f3f6Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fpUML 2.0UML 2.0 is currently in the process of standardization. A release is expected in mid to late 2003. UML 2.0 provides improvement in the following areas: UML Superstructure (i.e. language definition based on MOF, semantic clarifications) Component Based Development (e.g. ports and connectors) Behavioral Specification (extendes sequence diagrams, action semantics, OCL) Metamodelling (i.e. stereotypes, profiles, ...) Diagram interchange (i.e. XMI) The primary goal of UML 2.0 is to make it more formal so that it is suited for the unambiguous specification of complete software systems, including behaviour. We will introduce some of the features, focussing on those that are important in the context of MDD and MDA.  cZZ5Z(ZZZZoZ Z Z3f!3f-3f3f3f 3f3f3fB3f3f3f3f53f 3f#3f3f 3f  3fS  3f   3f  3f*  3f  3f3fD3f 3f 3f3f3fq UML 2.0: CBD HComponents can now be displayed with provided and required interfaces. This shows how components can be  wired  the primary means of component reuse. QQ  %3f3f3f3f 3f3f)3f3f  3f rUML 2.0: CBD IIComponents can now have so-called ports, basically collections of related operations that are part of one or several interfaces. It is also possible to hierarchically decompose the internal structure of a class/component.   #3f3f 3f"3fG3f3f-3f3f3f%s'UML 2.0: Behaviour I: Sequence Diagrams(pSequence Diagrams now have conditionals, loops and  calls to other sequences. In general, UML 2.0 distinguishes now between the definition of behaviour and it s use (instances) d 3f"3fG3f'3f 3f3f(u'UML 2.0: Behaviour II: Action Semantics(Action semantics define the semantics of how to work with the atifacts defined in UML structure diagrams. Note that no syntax is defined, allowing for textual and graphical notations. Among other things, action semantics allow to Create and delete instances of artifacts Read and write attributes Call operations Iterate over collections (foreach, etc.) Instantiate associations (i.e. create and delete links) ... fjN.  3f+3f#3f3f 3f3f03f3f.3f  3f   3f  3f   3f  3f  3f-  3f   3f$  3f3f3f)vUML 2.0: Metamodelling SupportTUML 2.0 provides a notation to define profiles (i.e. extensions to standard UML). dS  3f3f$3f3f3fU+wUML 2.0: XMI ImprovementstXMI is short for XML Metadata Interchange provides a standard for exchanging MOF-based models. E.g. exchanging UML models among tools Feeding UML models to generators It has already been there before UML 2.0, however, it was ambiguously defined, so the  interchange was not realistic. UML 2.0 fills in the holes in pre-UML 2.0 XMI to make it really interoperable. It also provides XMI elements for the exchange of diagram layout data. _HwOG  3f3f 3f(3f3fH3f3f3f3fO3f  3f.  3f!  3f3f&3f!3f3f3f3f  3f7Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3f;%The Role of Testing in SW Development&In all but very few cases, the correctness of software cannot be verified theoretically or formally. Thus the only way of verifying a system does what it should do is by testing it extensively. There are different kinds of things that can be tested: Ensuring that the software does what the developer wanted it to do Ensuring that what the developer programmed is actually what the system should do (i.e. what the customer wants) Ensuring that the system performs and scales adequately Ensuring that other non-functional properties work as specified (such as transactions, security, ...) Ensuring that the tools and technologies used in the implementation work together well We will now look at each of these in the context of MDD.  eZZ]ZZ8ZZZ9ZZ Z Z3f+3f3f3fE3f3f3f 3f3f3f  3f(  3fX  3f  3f  3f  3f  3f  3fJ  3f  3f  3f  3f  3f3f93f3f3f  3f= Unit Testing tEnsuring that the code does what the developer wants is called Unit Testing. Tools such as JUnit provide a framework to implement and repeatedly execute unit tests They are written by the developer as he develops his code. Typically, they test functionality, not nun-functional properties In the context of MDD, unit tests can be generated from models, too Tests for static properties can be generated directly from the model. For behavioral aspects, It should be a different model  because if tests are created from the same model as the implementation code, tests will always pass. Additional Testcases can also be generated from OCL expressions (invariants, as well as pre- and postconditions). When the code is generated, we can even embed OCL constraint evaluation into the generated code and check these at runtime. NZZZDZZ Z Z?3f 3f3f3f-3f3f3f/3f 3f 3f3f)  3f  3f  3f 3f3fQ3f3f3f3fZ3f83f3f3f3f;CUnit Testing Example9Consider the following model: This could result in the following code: A similar approach could be taken for the invariant in Person. In case of the invariant, it is easy to automatically create a set of unit tests that check ages like 0, 16, 78, 120, -1, 3.4 and see if the system behaves accurately.   3f3f3f3f(3f(3fX3f3f  3f:ERequirements TestingbHere we want to make sure that the system does what the customer (or the requirements) say. We use the same technical approach here as for unit testing. However, here the test cases are written by domain experts and not by the developer. If models are annotated with OCL constraints, they are significantly more rich that  typical requirements. A lot of test cases can be generated from these models. If we have a suitable, high-level modeling notation (such as a UML profile), the domain expert can even specify test models himself, or with some support by a technical person. Because of the domain-specific notation, developer/ customer communication about tests is simplified. ]g  #3f73f3f3f 3f3fF3f3f3f3f33f3f83f 3f3f3fM  3f6  3f/  3f  3f)3f"3f3f3f3fF#Performance and Scalability Testing$FThis kind of testing basically works by simulating a certain number of clients and then measuring response times and resource consumption. Running such tests always requires a setup of an environment similar to the production environment. This is typically done manually, although some deployment artifacts can be generated from models. The simulated clients can often be generated completely. The input is basically Which operations to call At which sequence and intervals In how many parallel threads or processes And where to store the timing measurements and in which format P(3f'3f 3f33f3f%3f?3f3f3fC3f3f3f!3f3f  3f   3f  3f  3f  3f   3f  3f  3f  3f   3f  3f  3f  3f3f3fGG+Performance and Scalability Testing Example,cA statechart can be used to specify this behaviour: Note that we do not care about errors and functional testing here. This is done in other test! This statechart can be code generated into a client. An additional (textual) specification defines how many parallel threads and processes we have. Tools for this task are also available outside MDD. \5_43f 3fL3f3f3f 3f3f3f#3f3f3f3f3f3f.3f(3f 3f4  3f3f3fd>!Testing non-functional properties"vIn contrast to functional unit tests, these kinds of tests cannot be run in a simplified testing environment, because non-functional problems only show up under realistic circumstances (many parallel users, database crashes, ...) Many kinds of tests can only be done manually, for example trying to  hack into a system to test its security. Some tests can be automated based on constraints, however. There is an example on the next page. pb  ;3f13fz3f3f3f3fC3f3f3f3f23f  3f3fJ*Testing non-functional properties: Example+GConsider the following model: While the constraint may look like a purely functional constraint, it is actually a non-functional constraint with regards to transactions in a real-world scenario. It can be verified in tests that run against the deployed system while power outages, database crashes, etc. are simulated. }  w3f63f3f3f%3f3f<3f3f  3fHLTools and Technology TestingBTools in this context are for example, Databases, Middleware, Application Servers, etc. Tools and Technology testing deals with questions such as whether the system delivers the expected performance and reliability when deployed using the tool. Many of these things can be tested automatically using unit or performance testing. There is an important additional aspect, though: Many problems with tools and technology arise from developers using the tool in a way different than anticipated. These kinds of errors are minimized if the code that uses the tools is generated. The generator  once correctly implemented  always uses the tools in the same, correct way. XU  3fS3f3f(3f 3f23f3f3f3f13f!3f3f3fo  3f2  3f  3f  3f3f3f3f?$Additional Tests: Model Verification%&In many cases it is possible to detect design errors already in the models. This step is called model verification. The most  extreme form is to interpret and simulate the whole model; this is however, not simple to achieve, although there are  UML VMs . However, it is easily possible to verify design constraints in the model before model transformation or code generation steps are done. Example: t 3f*3f3f3f3f3f3f&3fH3f3f"3f3f 3f3fA3f  3fjModel Verification Example  3fk'Additional Tests: Model Verification II(;This template is used to generate IDL code from the model: 0; ;3f3f<l(Additional Tests: Model Verification III)IMetaclass used in the generator, this has model verification code in it: JI *3f3f3f3fJN#Additional Tests: Generator Testing$Many if not all of the previous statements on testing were based on the assumption that the generator works fine. Of course, this has to be tested also! Over time, however, the generator will become a stable asset that works reliably. Or you can buy one and trust it .... Just as you trust C++/Java/etc. compilers. The effort to develop/adapt reliable generators is of course considerable. This goes back to the issue on reuse, software system families and economical aspects discussed earlier. r' H3f*3f3f 3f3f3f3f3f%3fF3f3f3f3f  3f  3f%  3f  3f!  3f  3f  3f   3f  3f  3f  3f3f8Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f  3f  3f$$3f((3fOTools: OverviewMany kinds of tools can be used in the context of model driven development: UML modelling tools Metamodelling environments (XMI) Repositories Code Generators Model verifiers There is also a large amount of tools that are  MDA certified . These range from completely integrated environments such as ArcStyler to simple code generators or technology specific generators (e.g. for J2EE). Lb 3f83fb3f3f3f3f3f3fPTools: Vendor Lock-in[Because a lot of issues are not yet standardized, it is hard to integrate tools. Open issues include: Some XMI aspects Specification of model transformation rules Code generation ... As a consequence, integrated MDD/MDA tooling is currently impossible to achieve without vendor lock-in. Alternatively, building/integrating your own tooling based on open source can be done, but requires compromises. Many tools are exemplified in the context of code generation (see other presentation). Build Tools are also important. UML tools (such as Rational XDE) also develop in the direction of supporting MDA.fQhq83f3f3fQ3f3f3f3f 3f 3f 3f3f  3f>  3f  3f  3f  3f  3f3f-3f3f3f 3ff3f\9Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f    $$3f((3fR Processes No piece of software can be developed without some kind of development process or methodology. Processes can be organized with respect to the sequence the software is developed and the amount of  ceremony used to do that, and the basic value system they use. Sequence: There are two main ways: sequential or iterative and incremental. Ceremony: there are processes that use a lot of it (so-called heavy-weight processes) and those that try to use as little as possible (light-weight processes). Value System: Some processes trust forms, rules, paper, etc., others try to put trust in people (typically the agile processes). `L ;3f"3f3f3f/3f#3f3f3f 3f 3f 3f3f#3f 3f3f3f3f  3f>  3f  3f3  3f  3f  3f3f#3f3f3f3f!3f3fxS)Processes: Examples and Characterizations*Waterfall: sequential, typically a lot of ceremony, trusts in the defined process. RUP: Iterative and Incremental, adaptable level of ceremony, trusts in organization, rules, and the process XP: Iterative and Incremental, low formal ceremony but well-defined rules; trusts people Agile processes in general try to adapt to changing requirements, value people more than process, try to travel lean (i.e. produce as little of paper as necessary) and don t trust too much in tools. A question typically raised is: Which processes do I use to do MDD? And more specifically: Can I do  Agile MDD ? SlYq 3fI3f3f3fh3f3f3fV3f3f+  3f  3f  3f   3fx  3f  3f 3f3f,3f3f3f3fVm$Agility and Model Driven Development%^Metamodels, Generators and MDD infrastructure can be iteratively and incrementally developed during the project. Agility considers code and testing very important. MDD simplifies testing and quickly, very quickly creates running code from models. The engineering, creative process that uses an agile approach is not used during the development of the products, but during the development of metamodels, generators and the production infrastructure (as with vehicle mass production). And by the way: You can also use an agile approach with 3GL compilers J ~qH .3f/3f3f3f73f3f 3f"3f 3f3f3f3fP3fW3f#3f3fF  3f 3f  3f3f3f0:Table of ContentsIntroduction and Overview Mapping to MDA Economical Aspects Software System Families, Domain Analysis and Variability Analysis Metamodelling UML 2.0 Relevant Features MDD and Testing Tools MDD and Processes D3f3f3f3f3f3fD  3f  3f3f3f3f3f3f3f3f3f  3f  3f$$3f((3f  ` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dd@t? " 33d@33 @`  n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>  >  0    # + (   f  0A?"c:`  s *B"2`  s *M"  6<  `  e-Klicken Sie, um das Titelformat zu bearbeiten..8  0  P0  pKlicken Sie, um die Formate des Vorlagentextes zu bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene=    q`B  s *D>"`  0"` _ Real-Life MDA (2 .  0"F `i n g e n i e u r b r o f r s o f t w a r e t e c h n o l o g i e www.voelter.de.a 2R  a  0"M~ f 2003 Markus Vlter (2 ! 0"8^  Q. 2  " 6"  ">=  z - * -.  f # 0A/?"B  s *޽h ? ̙33 Vorlage  0 E(   E  6   a Real-Life MDA: Modellbasierte Java-Entwicklung Markus Vlter voelter@acm.org www.voelter.de b:3f<B BBBBB,B BB~:`  s *M"X  0A*? #H  0޽h ? ̙33r ߑ:ARO` :Sm