ࡱ> IFGHn! Յ]'UՌ뵷PNG  IHDRF='PLTE  2/*fU<:6USP%#jgc]xDA-sGɍNhB`Դx /Ҳ~_m;#]=Z@f^tvj<7aaϙܲ7#kWljiRGڼQ8iI2$oxkQ K,{gjmYRjۅa^.t-\SeԖFD+#uZ˺8 Us=>ي]țTA*g x*<QQ:Mw,˶UuݦMK}q2ҭ"&3zRJ@Xt &m:\***HD%O59ygsc jR<39Q*7zLa<<**Y2U1MQ\OIXRl$A e* oD׵FqBmNbJ-BM21<ĕr",Km)?j(TzgBCBv{Ic޴oJ,",w#Qђr6 K=bi [0@rV&Rgx[1+7`mEݗ7]td0dTi5g;ěun|MW҄4|6s ΞD@AVjV#ITrdB!*dG!]bry1w~=Rz&kt-H5^dS΋H<{}ߐ1*u/? ۛwoBmA& LD,ˊ1SE_^=xrzPb AsE)ɶk.$"z89yؓ߂%,ãXr>Oӫ/"2Oc~\GG &0y$i>jY0F*n˙_ˉ|}Y‚X3ag񥈐Xq,`;o><3c/0Ai0B.Ja!S_^0hkD S? z$ KLwo /ꃾ,|2nKטAM YyD,mDH˯ {e AE_a)R?].釋zF0v SG6T(_cܤ ,>x[-šӰ{UwH*B5v7L3vW~`l뫷p'El Em!`RXؗW( >>aޠDoZ <ټ.ED+x4 g!F3҂Sqۯ~`8;k&''pN\fktd^J&x5 EZsÜŞlJ33P@7PbenxC gG;y9} bÿ s=HM}xũs4ER\G;tTd d۰H=;-;g5l0(:؟0v=ΰw;'d8dGM*vR,6hHV|pfm+6TdO# !H3)N]9cV8ϟ\9˽Oϱ<!V!ĶUsgU߼+`]s ]gΪ1-Rqk[sg~J#!ES0kGXzE6!Lmj.2MnzzfzfW>?噽susKRkU.ϯ笡gX:/]~,6wv,|kx<)4G:nw 5sf?U[֖n%RXLa-~ }#6O5o6$A(m88<Z7RZ*TRO3Z:1PK;*|9L&8sij98OمW, )ݸ8äa|@W^1Z3N?M+`NXq6;iUZTcaW/Y|l_J qaxɤiҒxu+MbK9Uji})MaΫBV\2 YGA,(6qNS1eR 98=1"$e_?e3wIԍ*cBVGk8f&NdWbv$N:Qdvx_^݇=7fMcqyAOz=x(z;˗Gn^|L?*A$mތ{" k${i7y>t| rTBmY%;@<Ӣ*W +RP \fxAFvC9H3g6b+ڱ, K/ .M^Ԛ3b2ߔ.D _U.g# *8(/2u%:(T` yg#w6$}PQq:t8PL07Uل=]*%λ30۝bdrBEƌ['e姩N\њ|J Ln*qloB('ڀ[2ڡߝj%6Q{܋P+DW"[,xyŨ7UVp5*MjBu:T++^ml ;s+}%cczBZIENDB`nqGp'kr{׺$=PNG  IHDR`&'O IDATxDpNVޮ ) VrT ȫT+"'goQJrJ ~FAV;nӒ h4iz?g3ؗ\35˰,R1жE9SN9SN9SN7cǍ1#U,GQw->Ghph۪ҸK $1>+Lh˞os1%@!*0") cz 1f8m 3_RMVunrShf|Y֫3z̦^mܪSQ_փU=$SN9nhLuGeW\.3K3%/V̬~lJK A)CU!r]~em2s]g|6W5,wYt.#liR ~L$)3+>8'@~ζԌ>|]8WƘPU` 9t=dŬ-5ie~Nդy-@0TB;֙շK[E?})>Ԍ>6_!`} +zgYlgf59]Qj8OΡmG`yU4 w^ԒϤcߩt&qט ˲"3 1cF;38S9CSݾS>ڶ: |[ʐ3iqOdU[dU4Eڶ&Hr#0\Ȫ ` @oU# V۳2 =XXdU0dU4EEVU@,zȪ ` 0 7Ȫ hX8b8bU@`<@ol׍`2 MsG\`ioGmЇȪ:Q77 20qPq!MriU>g`x8`8y߉?YUpKaAV #S5; A¾(dUECS@Bc(#z$+-^sn $ "IdUM`94z ,bxDC,bDȪ^ds}aƐHG0b4/<ilVU0CX40HfU,zoda +g4y9fk޻{k~[O]SEWy S _@]cFRhw}KkU_~a*o/rvךWnh5t5]zfkzô_\]*qAOhg+_H{x SCۖvd'^Tx.<;0(zZ ꭬IgKPqzh5YoI=Q/iґ@wffuw`ok#vQ=H%x@o U8 Ao˯; ZD4AvϜ4.h70MZ+q`oa~z]K&%Å`tDVա2dREX S{;ڼ/!^Ǔj'ff}!v>0 ` UVm |d_SF5pw:C,3RTИ^0Oc/B6f/mMz"9oz1zF!d G삌!R1]u ^GoѺúƬ%ۃvWkB il>aYO7OQ&~T@'4]}7oazV;rvAu>ma?a|`ROcUz`c p#8e|WV;E=|_wq@8H`0Tk(Hu4׊7G/:!Zg3eu~ZjZUU?֋sV>t^˪=Z_O|  ->W6,׬6F)IzsᣗUֳ:*|.w߆$fzHr 9N O:+;S_QdPюP{h+i8C%y;w^3!|Kӡ= Õ|I3MG;@o#Qt ؄)Z+NpRِF&ti^gkxvuohw#e9=ZZD|g{/T-O݃&%ʽG?ɿG hm=u.x/=!3V1:>A$<|V'?H{ojohO;DrAэXM'dfPf}藠q41CwbugV4~П?~[PP/^֦3Gh&a܍ OSV`Z'ib0? 6/*=d3+Mh:ᩍ"77ysf{ϧmߣ8ǠCۖjƘx͆C/<9=ob"xZ:Mߐ?5+iO)ɞ> aoi6+y˽ەi3oh_c]>R1wm +1,F.ptE _o1c0 eV$:6|<,5L?CU5 ouWRO4Tq$[p+RaqXө;~0 6c_kl@(轑{MACv#pl `=-"DZ8 gU݉Hn 8u(m'D;(_U $"=]ЬG^[A? (o8@XLv5褈?+A" YU` @<YU@TPڟTkF[.'@P#pPqJ\PXO;Z3R*C,4AW;b(èWbY^Wk#qĵ8pzWGd({ Ƙ]n8byvׇІ\;r SC=>D`8bU]լo#U7Ȫ h]FYU YU5izu #:@ldUEOF=9CVU@SXmϪ*Y@{1LwȪ h#m^GdUEOUx|b*@l[+rq Lp +c`T@I(7~'w@ * # YU UƘA# # .o|m[88b:M:K]`5m2 C1JNüm)T}`hҼ s}Y\AU˒e-*z@/8/ Fu1YkAl}:qۂuMXF5w~~k/5dLeTq(3l.XYvђeUU?Ӽ G`*+_fI#ʸ-˲,KVr*T-Yr^쪥j!'9Ab^_vRWjiu698K|Is')Ugg:ۏOö}UY:Vt͗-YGdd Ǘ5S]NDIs-M62׵ r0Ȫ xR.fY\jU s)geU V~?okZuV^)rκ!A`Z_g}e2k˞|`y oՂ\`eM(𷊫/~`KEn[cr[?~ i݁uVdBnsǣ pDOǪU嬜"a]U.\>ojA?=睋zrRlU 9Ez9M߆b>[.V!de+U}eOۻ!P%\P- p܏q !Zd!߅Z\-~lA(-v ߿`P5'cDO'r^);m }kzגmw!n`pMz"7l}{`}IX_KC]gwjj]uyUh43Â>qICDl#Lr0>+8R>,6~FEɹ9Vk_j̦Ƨ#c++ZKf_R[hCh?#3חU*is_ewyYCLmTVZ.;ʊGYM\r)L$m!=RҌfUZ^iksIKvJ.ʲKN;km2:pf͹Dͫ6 5 l6=.-lXj~G0!]!qkog  zEl5%O3t}ux:76?bB:=a1y;רv7㥱+ {Z}i!y+^Fj V!V*[kCS >k' qk^ctX/ljи!Vb@:DHZC-!Qy֛bnx.*R|}!_H~x8$ 7plp#>=md5rQrZˢ j mHgywճe˳HV.Sw_5{=ཋaLʤ.Gr_2I-XWO}1%u;u~HR_`/QIʃοgӌ:m6haHe8}RsUY|Yθ a޶y#7XrlR^N .Fp\_Vɓdh gj34PHYԴ 1CdUE2T*I1d;5"*ndw%iiRahz6z-ʼRn=*0p b @3kcu;}жPU@<G@,qDOp#0Ȫ h`CیDw1T.8Å7.󾗤ښ0.zW~ U.kwl] Stp)dU.sֻYԯR!9m[ L >7zɲGuFѤ/3*/b^d0ݲm[dU27u;TW2MjC{:5A \f,gܷhtMKa O3/g)S_tߟ=em/חuj̭=e-==o'|lYI7$ za5۴N&5>+6Ð,9PU`ݘbEnӑ' ò$c*F]00Iyl ʇ<8~wg ]ޭ\r)r)ݰ1օqcs)a1q-:p~CcF粪vqFLǁ p8A# *zG`0lqfvI U3aW/HxS8tߡm q`1T@O4?'qCG@p~ש%)Aw)aᗻzж;:Q)t:+i@ث-yFSKm A+.x+iⷱ7OU=AVUΊ F+*$,FVU hxXB.jADVUC`4 N`r q=茸QBVU `x ߦ8dU EjL?A_r9kNdUEji/¾aa6֙2ПZ pn%~\U`s  IDATȪdJ˲ FEY K&,DҟŽ3VlW׉uȪHr.e`I`8jvX"-Si{Wzݖf5m2yUzݖBvddUq.$ahhJX4{ܮ68D:hfW*:u[XfV弔?l] Z #ӻ8=Pxt{L[w]M}W4RdYKh#`)dUŎF!VޏM6K9\J2*oK %%o9\__̮ʚmSœڜXHvUtqvdftj59D&r遶Ӥ7[/3_;w.{urϮ:S0g4 Z|Spe-S?ʱuvngw]#UrO*__&/{?SZ2"O<yГdjIR 9Yje@P,l[:-˪dI9Pj!gIylZ\ ^R!uRdYib%2׵g{cN3s(d98/u-K8hJ&Ǎ/eK3f/K9 yāf/jfe~o]ͷ+q.}9/4'a[Ojn,IZ J=OIh=Y-/W/ kw$kLnt~Z :c]4{Ft41ghiHO`;=a->ݦuχ/My tZUuq>>ʼ/Uv|iI&Q9t*ZIkNJ9m]lF΅dtS%Ů}{aZY)iN]DZw,ꕥʵE A,.~Aʒ//׭mw|7=o4ٯ\iS*Z)9 6MIͯLI0]oe^7 zrQsv'خJ#h{c?ҥ E/ 쿏'HzC]r{ZXx52߲|3qoUx>MP`;]w- ۥ߯o=zD-{Mg5h56לdU22vuM4qÐ135޹PZ4DHRvQՙet[7%oOriE+K̩2һ$z@A)p17v옲LC`,{a`򶥯|'c!^׵,ߩNmu{#>;1Tup9طa?P׍Rw.q,L{Ee͢ z ܋YSŢ|^s_.r)%'Ph)_]H(ǃ{\)#iqee^ƤTvl7{Qe}Nf1شmNJ1qݾy#%b"uiR+ׁv5[o͢On@. TJܮ̢^·~҅+MgX˯^?YPS/?Tİ׸$Na. 6L_/?{;4L5o{{'2%vaL_n*[,qW?K`-j* dgklZ-dW1c_Ԏ$$yv|c;*iu5>o$U : iWz;WvV|Dyػމݎr-kh%ivτ˹P-אճLθ]Nֽ~f'?>+˰,Uo Wv#ǝ i3N+4[O9xY*ðwH\um'Ǽl+d?T5bέ:y۟Y-hqϲ+6ϷWAsX\~nՈ^fcU4?SmHNnG;k|RTyHI]7G?{BK\ڻɿ:-zRty*puX{=CRSmg?׮Ӧ$ԇ`םyX;fGYU\;nh><708dset/CY۲܋-?ࣙύ>:0>ڥ~<֓:zdָ'bGSbd׫et;uvqЁΉιK~=ߏYZ۾wِ1>RiNFQwt7>5٣iz Όe -ϵFF{OrD=$]q,ܱ3'c<[-IK?Z@v5~ ;u_G?YNcҬ]_|Ɲ6a4؃;6%#ɽo9:g턞ж;:Q)a->R'*To+S{7|nkO*sf{$wtwUz.^VP~4u%q;Iק[wͭ9m*V?4CU {fI""Sy+%13oeE:om9jzNke޾y$=oZ.OhZ:}-/L;J9<`oN?7 K{ik!o#8ǯw9-:l63$fޗl,=Tۉ-ynuyJӯ=q7 G>k5gHCm4$Xsܔ<ּ{OQĴH %muO+gBqY̷νSb'un=zw}sbtl=Va-nN%!D=?ous9]!i翉_s;%9!u(JcP;et%-IOҬ&;̷֒q?/~;=uꑯq|Ѵ}4bH-Zھָ߫^yN# ?aPaґ83]ed=5d'gS[o<X\eGQ`6 S Ú.ߊ\9|[hb=̳v@+Oe:Ҿs!Zܾ~y"s>#.mJf/SCUG'}7f75KSaT:P/gR_O^{;3YyyVڛ^{zfHϨǦtvcQ4vkikx&WkvhGݗg6 L|^Hv_)L~6el_9QP۔Ջ`TI{kqR"hIwnmݰt>z˽[S˺e?U; bwȗ!-=ѽtoiU?]_ ?:񱃑.ļtMNd4U+D;3:`ܞGyrcwwIo47\WLnQwx3ߗaϷ.˪޳-=&kt4Mh믦W{*g_wؾ}uyJˆs+9K=4Z=DZ}I爽RHh6eSDsޯ%w9RҋG_=VaG5X\IH.FZ37SvqB=Ps*dxYikH}OW˯;#+֐wlGC*%E_Y;9.VwF"E$ZVw Fu^NÀ0m6dUrIBC0,rǯvY{݊0􏾽6Gӵu,]%4"uݞlK))M]/xv`hhs&ؾ>0A#YUGCؚcH`ov~]:uKT:Bu['1/*ПFouv\i/"7DmAEhhvQ_ VLV s0z=sAM1f:lp/T3\8NaN#(`tt?ńg#ׄǾC8k]xyB>]0n@윶O}^"pDSaz]v1EXKsҟJҬ'/9psG"VؗEbc;0.ƀhv=guښje8"ixdØж;:Q)[ڃVփe0r,zh7C)l%NCWa:uF007^HA~ 8haKb8hF9Ƙy7cx0OBgMԯ:u 5^uh[7,*$ 'a=udU0P8\TzXbyBJtW\t:^^I{L=8HWYU /@sdU0YUm[q$NSK USHdU0P8#*D0Ȫ DVU @<JHdU0P8#*D0Ȫ DVU @N]/ёZ !Aq #(r@gUtU`0UJ8K H `0{X?JSw]0 Ȫ `( çYIH@rdU;6PL=q$CV@p~T5I ^0II-o'! 0 [lO *Ģ~j=\FɪV ƹ-]}@!*C  oқz?`vq$ t艍1e1(,;muǑA记^Q @uzCU oQA#dUuG.0#Acs}d?gcFH;_`n Eю|_mL?->x?+gOk 7b_D&YGK] KiX PիהaҒ`lBch5Yo4. _9R=(I~BƏ2֓~JcAK#Tؕ\ƘDv8?=ynuCo#_9h ڼA=5S}b8ݬN8v0XVU8Â20X_< n`Z<yc6ߓd}Iw(fP[Ojn,IZFg)Mn-@eUmg~]4fQ6 =٤|/M;]l:Ұ>z+u~ڟʺg?x kKfV?vB!=z,Л*;YzZQ%}9~AgP:z2v ,~حGd9Un/8R[]?13=mm8{jM`f)oPߖ8~Җ^J-J=^F`0<˲VOB1dhi' 2zU|uU_vz=kUIHtzc8p};+udFx%4 mStW&2-%ARF/zS3 \x:*ު̞]?|Gf0QѰa3N^v{쌩an}G˞{3B- Hl]ɪڊ/S'IYM;938yS?4;ٖvj^G@hױvPeofO˛U';j0'tRo^?6Lt^IE3H2vڔb)`ڶtG+mObޙ+unS|g@0W Ќ)=}! ڒnSt@۶Ԍ`:dC c mU*]~F/d$y9?-RAOXDyBZXwÔޗJ?*Ƿaڴ%Uжᐕ)_O&c?iY};r-cjEfVq[$x~R{02Ԝ.|p Hhnx;|uY : +{FsK7ɨZ9$_sIDATq+^gH:ⱅFF{OzueLϲkuŮ?`Ho#auG}Ezz5(3tbEjҜ^5<]^Գo/뽊{ UxVzwI[5ڷhyCpe} ڳp;x4jQp{{i4{~Azc߿V?Ɩf.h6u=~Ev' 1Ch3()$FAThЗ:q1fGw0VQ.VQI/#QqG'h-zh]oAmFɡmK{eu#0:wN㫤%`08,/+m{:3޲( U7+=^Rk>Å8B8= Mha*Xmj9zi1[{7ߋ|?^IRN?Ld.ٯlƮ?WguWʼM.l釙%YuU~4oG\A/xE걌$z~lJ,N6>ՌӖzȪke̢~=)=mYֻUvX@hnp0 p4ffJTvBIڷXCƊ>^j]ߤl$nyw?ʄ@U%#?$)f LVweZK2<0W Cy}sK:gc/C.@1W{P3g}^Z졥T^O[Q.F.3qcTs`Yz*!]=M}[-ݙZ_dC *֪O]F ҡmSqd>wufޜԖx~Ruz욽~/y;q^fB,ngT Q5\=Zm?uYU̬&ޜޯVgoιj`gڷX:Oǡ~X^ѹqCoKNSgEP֫F=S͚4s9)<]<718b`Ez|Nծ͉8H!.z$ Q_G{ t((Id*IENDB`nv_ 9V$JK;PNG  IHDR X'sRGB_IDATx^ $}-ARwG"C[؎('2((X/,9P@JHG%E l A# X>uw{{;k_S=]= OUo{z ?B?8]yywW׽׺UtUtTGѤͮ7"l 86k.7CS*HNN̹ںW$TjC޺:̮$JLˮHknJ3K %m"<x"7mWѿl ٥mues[mn]P`u3AR! cuRw;-[߸\wSopeUݤα,y)KWM~7y; Z. ue\@&1D 썗&nm{oQO}=*?]ʿ]Z>>s TܯzKYsy)uFuNr']gtzY\zV+?9^ԏȯ;T;d ͖@gRw C`۹:tp ]2CΊ*2&|^G=;>97ܽ.^R>|xekਧ+TMr{_CO:6^z"o9{ۑdK,7/J3-p kCm Po䎔 tv4ɯރr?;Á$]YYW['os?%XīOZ@JW79or.#c?❟foA\yco6eVˠTg_ ~SCwoKRߡ%6Cb_,Ynxezm+cgFeP/PI,;\mx?oTprd)F@%I fL/My W޸}.8vvA{x!tow?J$vn=q?+?)vw`[],UK&D$╣^iut`}w/WϜ#d!\uQ8M 8-HmIF >5}/~W'O9h%wO Jҗl_t+G^ПK.΋ꅿP'&񪤡V-O.k N+,9^uԖoq&u JgWZJrC J[TEYƖJpgWA͋ꚳ*mpz+NO>"+Xnǻ骎|;/l=̩EO2⤢*J$^|o9bp}_ȃ^ǯy"Q]f"`K˨`0%λr6GWduݻWݫ;H.uyixíRݹe-xM?s8:i)a֤J*^&ݤtpA׮뮍>G >TK;QRnSį#rh뒬c7xmw{{5m^]8ӿ~~5p:Y䍟(}#^< a  T:=ww8O>mnçYwq]@~gd]P ȩ[cyۼ?$xH%sϜ;N lζW:jcC]{_)Eyyc?̃~/I$9C7ȯy.>|Bu|>~\?Kۦ}&ͬ<&2ƹ݌%*ޒĝT[Z"- C3>1IŲ_n~gάR] rXn3ڕ3t/_z}WWF9:|'J?wvޖ̌'_q~},IYǫZ=쭽O$]W{sPvi%Ok4śhqe`׊g$A> p]>I/QZ#{ФĞEw_GG៵~ˡի08EAxvm``/Ĉj*&./pϯk~=?t\ӎ39\FS9z( ,"\ht(*|IYHJӓ8x7i'#AOG9xXH ݜrZZz>&MƻW'?O}*+Ѫ G??2~p5z۹L|\:w3% VLGx#~LGάu>. =>%?Hsbۚ?ݿq_Fmp/b(;ꦜ~Y Sp5fݼwn?Y`2~-e,9Vxӿsxw!Z [Vvtvy|ǿ *%6CM #Lb<~906'EWu~:/}۪W+C9"x X;qpcw.JCWV\9uqq{hUw~Hxj.'[{G~֛KpA=a.x0ȃ#-̨$޻prDIk IHEF-c{IlIS?"mkL>~-*0˒7kU򽣄rl[R+Fc#:3sZ0_ޯR}=wV WxXx<绎-`f<1 prEOmr㕣nkյԑZ}~Oe_WYȯ_F8|;0>+L{\o.] HƇMf4H72iMd G*qԲ6 t0KxNżF}IfʫV]Oc9w9Drmr@PNfw{rLPɅ% o ^qxv$hjSROwq*_1^IZL|Dx++-g Uqx%%:r׾d̻&/TM}sX T:6#$S/>=wu:쬮It$]+2t J'Xa~-u_=[?Pj/SVd *PA&X_9c]n#Xys 7׿N0*i(Z|ۿ`y|Pݞڙ{_x:@@ c3oz쉩^NW5xī MJ(;^M%Xk`Jv#JdJ>I=ųvۏj684x; (@@b$X@ `1)@@$XA@ b  H,R  @@@, `Y:@@@ Po TDUlj!)@(G7R+ XŃO@@r\@Z,@  P V9Ԋ - ju@(GrjV@2(!@i`FK  V% 79~:0^=m|p˟zi->~Xbb c r]A7, H]ZӮkH-Yas=.Pg@@ K VMj``BQ @-!dl d `1C@@$XA@ b U }Zv?(M4Z*F@ tܶ~#@c\G9^cW2@k&N: e `%K  Z=G@Hʒ^@h Vk# @Y$XeR/ VCO@@,d@Z+ \"ī:mC_`Xb>  H,R  @@@, `Y:@@9 X Ju  s@, WlJu `_`Wi, ,˪T `1@@$XA@ b  H,R  @@@, `Y:@@9 X\2)!uq"^YB-0W`ن>@h V  `[˶(! @HZ?@@$XE@Z/@)  -J}  z㺭Gj.0SīC,&  `Y2(! $X@@ ePC@H  e,ˠT `1@@$XA@踎 U#F"4@@, `Y:@@9 X Ju  s@,@e@@,  `Y2(! uQ@j-]xUqq 0U @,@e@&o~laW sm>_ ٪zvF סmk VF"2 r--ւag 5J*B \xn/eÊ@ݥ1YdW&kwmwGăK@\ 3pϋK.XZHJb@T<~qPd?C9{ރme}`(ce_BT oup JH@ U Ճ &&?K$!)F@q@VW"\̈wXW@nk]$X7S˿ ,r7`6nE..7$X 8ɫ.<й)7@JYf `$**۶J b BhCgQzYmP$X8'՗7CjgA`xɐb Rqlw$X дIna/4Z@af/SH6I>1+Wmn]mj+I xG[*~e}*@)CK%iSmI~ԣUK!3I,Lde(qqK?YJ|$D Cd%QxZ7H 6^)ᓽۋn˃f'IeMRQbd13[Zme )fa˭$-o .1J$ XAEjKK+O,nmF{2FnJ3f?(Nrz'W8}@6$wku:2 9K1!5 !!2TlC֤5ixS@M$X mV_cXܐ@ *CըN}Z߹X2jB\ܫ&oIU'k^qNroޘb*+$Xz˾?*gGkǗ!L$X }/_{Α`z< jpX-@4I`5ih+ 4KO6kh- 4@D@@Y$X/Z   j D@h VƋ" @H0H4@%@լ   MD@f `5kh- 4@D@@Y$X/Z   j D@h VƋ" @H0H4@%@լ   MD@f `5kh-pΎkh8^`5nh0 ]#D@@q$X2 u >@h Vㆌ# @H>B@'@ո!  PwCʁh$^`5ah# 4JQEc@@ $XM%ڈ  jpX@h VF6" @H5\4@ @ՄQ  (F E@&t&6""@b @SXjHN@h Vc" @SH2R@#@՘  D@`5fh( 4E)#E;@@1$X* M jHN,(yw$0W$X 3  j8J@h V" @3H1N ?{ ) `[QJ@_K%: P(A 'KU"$Xhd],bq3 `o@Sh AejjD6 S#@pVVQƟM(V `E # 4iO/^.(bc:d9w4 ZqW -Nq̭"9PZJ\'=3o^vI rO ]kTw;1CJ[p(\"6K>^HZ6t&En*ZOvcw<l"B ӊz1}a{^UʕEmb@5ZՙXd]J[>jْkn׶kװ ^|K@`[I"X*Ǧ Pzꉯ.|kpjQIbupm%+4v@Kx VKgF" 0,VY *Ƕ Pdr OÓ ᚜lkV%D*4_ $K+0,reW=6D V-F @ _[K>*Xa&K?=̰5@H5^&Pjmjyٕ2lp1K'nHK'0ߧ!@a&" @C8DЁJQJ@  V" @H6`4@/@U1  0 E@ `h! 4LaFs@@$X#Z   j؀\@@h!(3 +V0R4@%@լ   MD@f `5kh- 4@D@@Y$X/Z   j D@h VƋ" @:. \.2J2x 3@,@e@@,  `Y2(! $X@@ ePC@H  epC-]xU1u x @,@e@@,  `Y2(! $X@@ ePC@H  e,ˠT t\3,@ HCE@|Xb2  H,R  @@@, `Y:@@9 X Ju  s@,@e@@む[@”W'Zrqbـ X Ju  s@,@e@@,  `Y2(! $X@@ ePCRb_)T%YD@v `{=  @U*U" @H=@J **@@$Xz %`J  nv?G@uӷoظpC/G2VBH>._sAx\A ╣N~Nomu*xd!VzݚQNnfͦv3dsdwFnՌy,jr( բU&AH eU*'|L,xYs:3Ū}uyz]5ʿN]5Nǻ hb7ci47"l 86k.797ܽ.^R?^xմA{  No_Y$X]u6q^v$ْ4K?%[)7w4pvm /0ܑrΎ#{P7cqg8;+KS?jkW={M^yCH4Hx娿Gʹ'hX[X g~57 F17yͲ eP/?ODҩzf\%_{}/i,7w2O}G6\#2($^ ܎rYu6c VзLOqw8r\92הtTn 3oܾG^l{O x%GwWW;j.ny %n"P@UQ/:z:H;ߗGgtQ@(&IȖ$# PN+ݓnouyx咻]s~v%W{`_ \|ٕ#|ON%XvUE_xUY'5IEZ':j?78Ẇqj+Itv%ww{%-E,cKR%O|Y򳫠EguY]68'I^,]NtUG>OV{ԉUHZ-N*B$JF( ;<8u'%(iQ-&[_-+whks}EVܽ{սnoRW;ܺ,eܝ+^Y֒t:WwcfmM*A$>aBMʛKG wݵ:=\ rX\Ytڼw?$~ 3F[dky5{moۣh?:&o$Fac]xeWx%4y|/ƙ~GWn-us>*^6wpJL6rev3oip& C%1K^j^3w[Hӣt$ߐ^Qo7"^II&ƟWIxWԊA}Wֻ|st:]0xᄷ}|'Bt#=Imyb V2U{_,ͼYtBB>=9rݢ@Y{i=V=/zh(|BqSz%ǚ$YC;%VWGg=<\0TV3aru/Ok]9eU't(?9sn>g2gy5{["̱_I[ps4`" `)oӗÓ3 4ȅt͟S?r5rX6Q7OībzUe T*3QUQ@|RmlkWz=%!كƽ(5~Ǟy~ؙ:!g~U3o%݇O/#-W9~Y+#SO]xLxU R~щ}U SǫZ=쭽O$\jWknHC,0w|Z< v-^ Bθ.)5WЍ> p]>I/QZ#{ФĞE92z4=AdIn+,v;)5Eߠ%Z<*\>0D^8Q#d,Z@VWA5q̕|\\t|~\}ٟ!טvQGr7CH`B+GW3eMB *Zx%*xYYS@j>7}~^>1鮨pq5>я~v!%bqwrz&g<!P٩^7`ӟ2ޑEr;hkϡcPaT3]LA%~c-Qy%kwM7rXPk:Z~NSFrPr~>Q>`:^X3N"ܗN$f!(:+ m ?=7ڑoבW[^h'^%I+F"jxuS_ V :J>V}F?W/gy>8rfU+\vy\?U/|f &^ωnkRg|І .kMuSh n=SrNs~<0ojH%Ĵ<Nk){.m='~X`2~-e,9Vxӿsxw!Z [Vvtvy|ǿ *%6C *IRvSvW+C9"r?>wķի3\̕r":<;8Ъ}wJW]L?N7AjztÂmg??]`=FZQIwAZ#|OlLe[>od"QaGbh. AѳBtD,ș|ZT`|I-y%o%cU޲Z5wekW9uxׂ~ s˥HHCUٳ3P6͕kb-$RT@ZBXIrǺvvV$r:\:g%,0`얺\-}?S+gWK2]  ^E,鯜.KYCqoapUPP75Y{¡=i/3uf )Ǭg~y~x^.וsɥb r5,Y/oˑu+Axy}[S ֓M.`j8W5(PvJt%ҟ qUG/f|zrgW5yvh8D""~7=/uՑ @#AF,bѰ#a GuGrR֍#_x#tV,Ub[Z.PA uksͥvuWc|rz障'Y_Iatu|yM>7/0>,lM >kj=ws8"^. ja8@*`uvkWkb7]Z$?4WZDnn_TnH,b&IY<%tY򽤎|0PfL~ Sk{tÑJ䤫MNWi+cCJZU$Xkڼ Uw:3ZBn-qBWrrT#Z52 YzyR~,뇃?BYkB,EֵrUcl7╙SRīXfEWc?r|ŧ𿘂 P3vԳROī A) ^N @@ V1?F@b$XL @@ ePC@H  e,ˠT `1@@$XA@[@4xUqu qx4@@ a9Ԋ - ju@(GWjE@ `x: #@U+" @HZmXhyGJET@"l2 G fWrVCjO<#`;D?_2 :54Ji~}% :VIqhyG Xn╭%^ْ9/f,CĤ; P)?؜V4~#V +Xp"2SƔN TeWWAxUIa VAWO js"RK6r8HGO&j@`r=LbyK|jXdDWK3E ,MݑOrȣ'!"y֒X2;+ :[eedEP '`%,h@ tr2`Qek truAAȅFaXj!wKOq[5`O{B+ W[鈭4D!Pgʘ3U֙Ye3ؗ@ a;X,~Nk F@zU'X_a-6*ؑbw] X jl*03JOR{4?V/@ .@j0O8e_8my VJ:Ѽdm;9?~􎓛/>@?ogLґ!VIEfg1q&/?IqxZٻ3YNUi  XY2W5ňW8nG@@`"\l;  P V@\k! @˓`}ZzSd !,$XK?Tt@"qRډpx'^v q#0W`5fh( 4E)#E;@@1$X* M jHN@h Vc" @SH2R@#@՘  D@tqC,*׻(΃D@+V  e,ˠT `1@@$XA@ b  H,R  @@@, Hŕe,R*}ZjD~b˲*! $X@@ ePC@H  e,ˠT `1@@$XA@ b  :.LJu `]`Wel +Xa@Z/@)  -J}  zO@@ mQC@ `~  HlR ^n@ D@@qbɀ X Ju  s@,@e@@,  `Y2(! $X@@ ePC@:㠀4BxՈa `1 @@$XA@ b  H,R  @@@, `Y:@@9 X Ju  @q]@Z xC#^zhc@l@@, 8?~􎓛/>@fo~)s% |r=^8󵐭 :Mf>fUMSO|Mm_nUxLP4Abk6ܳ+Ds\ڶ3-vhtxGK`ۻ"K 7/k׶{d6VE$߶G] 87ou{Kj-aa͵L*"y|Kc@īڎ Vm-F tk1^@ Dī:L⏇?13N0<G?e吶y6a΄mVBj.YkW5PI왘l4>;32 PU & @E+X-*$S8'kKgax9^}MFWvp f5 ^d Z U{+|-g+&&?i$!)F@q@?Fк:Γ`ͱe?sdEietyGVMIaZ,Dx6xՈџ'ʾ ݬiG k`VD ՑId[+a ^Uy4f PlBWu$XvFvTEBXv@Q _t7l_Q+ V,"$w4ExUH`i 5j˴NLFgKKj3ЋLɦ3Š.giIXpl*P ^5tzTlUewTiPDhH (>Z԰*H6īPz=V`?5* JgVs CV]T^@䒕UU ^jīlE VJSDr#63)s ܘ0.l6J&c~'6_|~MԬfpYEk(pzkj- "`"īVLE@@` H "o 1T(@]!H>'!@ī!$X&HxU4A@`; yC* ^Un p X Ju  s@,@e@@,  `Y2(! $X@@ ePC@H  e,ˠT `1@@$XA@ b  H,R  @@@, `Y:@@9 X Ju  s@,@e@@,  `Y2(! $X@@ ePC@H  e,ˠT%8-VD  }ZjD@ `|}@/@eߔ@@$X-t@ `7F@h V'G@$XM@Z.@ @h*  $^`1@@$XA@ b  H,R  @@@, `Y:@@9 X Ju  @h!E3@@$@@, `Y:@@9 X Ju  s@,@e@@,  `Y2(! $X\.2Za xEl@@, `Y:@@9 Xpn?{/>@fO"̅Y @|V'Nɟ1V3 Axŧ7'S;nxUXxU1 ,IeJH$UKj`TXlXޛ8YJ{SmNixZTºd7{I,WD O2)Z V*[h 7@0E^q*i{ؒ5xd!^5q|-"d6G Nc<2h F ī[rxDz2OA2¤XǃG 6`4(RDifg۞X@?2L2 zʛHT4Kī2&@m$^vh2VzĂFdĈps";Ni/uϻ;ỲhXgS0ˋYywG: ;:%'S|Xbm(nbG'֬xj dī+w$V"a1e4lQO5z&ONL9W͠X w'B*$^-d$X 2N+ 7(2'9(ie@c2W&mf&] LjPm,eUAR7'hPyo(aXTS*o@!]7͕_HˉW agW$KF_X"L,f.e%ZQ0{ giлpߓy*'We)+Wuh!L:xU԰XIF e_a 2,VR#īF ߂YÉ'GHTY Wlk`wr5>o唯RhUE^N ?(5Kf8ͬP ħo6l|DKlʘ̮/tz !8Rī0W ^J< V,RҰX$-j87b50z?BCDEFGHJhb$Յ]'UՌ뵷) b$X* Nѧk湖n) b$p'kr{׺$=yG$$$$$$$$$$b$ 9V$JK;~_Y 0e0e     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab 33GG@f; ʚ;ʚ;g4}d}dh 0hppp@ <4ddddD` 0xz g4`d`dh 0p p <4BdBdD` 0xz___PPT10 pp.T<Department of Computer Science..2Volkan Arslan.6___PPT9Fh(?f$ RJMLC 2003, 26.08.2003, Klagenfurt AustriaO  =_BEvent Library: an object-oriented library for event-driven designCCVolkan Arslan, Piotr Nienaltowski, Karine Arnout Chair of Software Engineering, ETH Zurich, Switzerland http://se.inf.ethz.ch {Volkan.Arslan, Piotr.Nienaltowski, Karine.Arnout}@inf.ethz.ch"P2Xk F 0kOverviewMotivation Use of the Event Library Example: Event Library in action Architecture of the Event Library Conclusion and future work6Event-driven programmingEvent-driven programming is very popular, especially for GUI applications Facilitates the separation of concerns: application layer and GUI Publish/Subscribe and Observer pattern follow the event-driven approach   7 Event Library\ Make things as simple as possible, but not simpler. (A. Einstein) Turn the Observer pattern to a simple, reusable, but powerful library Event Library x 333G3333 33334SG0Use of the Event LibraryUsing the Event Library consists only of 3 steps: PUBLISHER defines an event type SUBSCRIBER subscribes a feature of an object to an event type PUBLISHER publishes an event (of a certain event type) 23 33 33 3333 33.B Example: Event Library in action!! * Class SENSOR$ 33class SENSOR feature -- Access temperature: INTEGER -- Container temperature humidity: INTEGER -- Container humidity pressure: INTEGER -- Container pressure end -- class SENSOR \Z  33x       1 Class SENSOR0 33class SENSOR feature -- Access temperature: INTEGER -- Container temperature feature -- Element change set_temperature (a_temperature: INTEGER) is -- Set temperature to a_temperature. require valid_temperature: a_temperature > -100 and a_temperature < 1000 do temperature := a_temperature ensure temperature_set: temperature = a_temperature end end -- class SENSORVP           33n                               ;#(1) Publisher defines an event type.$ 33class SENSOR feature -- Access temperature: INTEGER -- Container temperature feature -- Element change set_temperature (a_temperature: INTEGER) is -- Set temperature to a_temperature. ... feature -- Events temperature_event: EVENT_TYPE [TUPLE [INTEGER]] -- Event associated with attribute temperature. invariant temperature_event_not_void: temperature_event /= Void end -- class SENSORP      33     33V                6          ?!(2) Subscription to an event type""dIn subscriber class MAIN_WINDOW Sensor.temperature_event.subscribe (agent application_window_1.display_temperature (?)) In the subscribed class APPLICATION_WINDOW display_temperature (a_temperature: INTEGER) is -- Update the text of temperature_value_label -- with a_temperature. do & end>3333333) 333333   33   !"8 ,           @!(2) Subscription to an event type""In class MAIN_WINDOW (Subscriber) Sensor.temperature_event.subscribe (agent application_window_1.display_temperature (?)) Class EVENT_TYPE subscribe (an_action: PROCEDURE [ANY, EVENT_DATA]) is -- Add an_action to the subscription list. require an_action_not_void: an_action /= Void an_action_not_already_subscribed: not has (an_action) ensure an_action_subscribed: count = old count + 1 and has (an_action)hP 333333)33333333            #"8     "    %    % 8 (3) Publisher publishes an event.! 33class SENSOR feature -- Access temperature: INTEGER -- Container temperature feature -- Element change set_temperature (a_temperature: INTEGER) is -- Set temperature to a_temperature. require valid_temperature: a_temperature > -100 and a_temperature < 1000 do temperature := a_temperature temperature_event.publish ([temperature]) ensure temperature_set: temperature = a_temperature end feature  Events temperature_event: EVENT_TYPE [TUPLE [INTEGER]] end -- class SENSORFP              33                               6   9 (3) Publisher publishes an event.! 33class SENSOR & feature -- Element change set_temperature (a_temperature: INTEGER) is -- Set temperature to a_temperature. require valid_temperature: a_temperature > -100 and a_temperature < 1000 do temperature := a_temperature temperature_event.publish ([temperature]) ensure temperature_set: temperature = a_temperature end feature  Events temperature_event: EVENT_TYPE [TUPLE [INTEGER]] end -- class SENSOR Class EVENT_TYPE publish (arguments: EVENT_DATA) is -- Publish all not suspended actions from the subscription list. require arguments_not_void: arguments /= VoidnP                                                                                        33                  B                                       $  ? R E (3) Publisher publishes an event.! 33(class SENSOR & feature -- Element change set_temperature (a_temperature: INTEGER) is -- Set temperature to a_temperature. require valid_temperature: a_temperature > -100 and a_temperature < 1000 do temperature := a_temperature temperature_event.publish ([temperature]) ensure temperature_set: temperature = a_temperature end feature  Events temperature_event: EVENT_TYPE [TUPLE [INTEGER]] end -- class SENSOR Class EVENT_TYPE publish (arguments: EVENT_DATA) is -- Publish all not suspended actions from the subscription list. do do_all (agent {PROCEDURE [ANY, EVENT_DATA]}.call (arguments)) end P                                                                                        33                  A     33 33 33 33 33 33 33  33 33 33 33  33 33 33 33  33 33 33 33 33                                $  > C     < Architecture= ConclusionFEvent Library is simple to use Consists of only one class EVENT_TYPE Publisher, Subscriber and Subscribed object Supports full event-driven programming Type safe For advanced needs, class EVENT_TYPE is extendible It relies on powerful language mechanism Genericity (including constrained genericity) Tuples Agents Inheritance)H 33 33 3333K 33)H>  > Future workExtension of the Event Library  Conditional Event subscription possible when inline agents are introduced to the language Use of concurrency (SCOOP) in order to obtain flow and time decoupling Guaranteeing response times for subscribed objects when an event of a certain event type is triggered. General publish-subscribe mechanism available as Web Service (time decoupling)Z/333333' References Arslan V.: Event Library, at http://se.inf.ethz.ch/people/arslan Eiffel Software Inc.: Agents, iteration and introspection, at http://archive.eiffel.com/doc/manuals/language/agent/agent.pdf Eugster P. Th., Felber P., Guerraoui R., Kermarrec A.-M.: The Many Faces of Publish/Subscribe, Technical Report 200104 at http://icwww.epfl.ch/publications/documents/IC_TECH_REPORT_200104.pdf Gamma E., Helm R., Johnson R., Vlissides J.: Design Patterns: Elements of Reusable Object-Oriented Software, 1st edition, Addison-Wesley, 1995. Meyer B.: The power of abstraction, reuse and simplicity: an object-oriented library for event-driven design, at http://www.inf.ethz.ch/~meyer/ongoing/events.pdf. Nienaltowski P., Arslan V.: SCOOPLI: a library for concurrent object-oriented programming on .NET, in Proceedings of the 1st International Workshop on C# and .NET Technologies, University of West Bohemia, 5-8 February 2003, Pilsen, Czech Republic.P#@>   HE 0\ 0@S 0Y 0:Z 0 Questions ?! Thank you for your attention!8     0` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@ >`p?dd@ @` n?" dd@   @@``PR    @ ` ` p>> @ y(    6 "IdV  T Click to edit Master title style! !$  0 "'  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  0l "c   j* $  0( ",,  \*   0 " m   > \  C &Ao_logo"[qZB  c $D"f   C 0Aethlogo-140"g   0"q WChair of Software Engineering 2    L ?? Base"pp  H  0޽h ? 33___PPT10i.}`E+D=' V= @B + se( 0 D8(  D  D Nxy˼y˼ .   v* a00aa D N|y˼y˼ 2 .  x* a00aad D c $ ?  4 D NȌy˼y˼ 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S D T|y˼y˼ q   v* a00aa D Ty˼y˼ q2   x* a00aaH D 0ηo~ ? 3380___PPT10.Bu 6.0 (      0 .   X*    6 q   X*    6 q2   Z* H   0ηo~ ? 3380___PPT10.$ϐ 0  B(  r  S NW W   <(YW % tI W H  0޽h ? 33___PPT10i.t +D=' V= @B +   0  P(  r  S ГWIdV  W   S W'<$ 0 W H  0޽h ? 33  ___PPT10 .9'+[W_D* ' V= @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*&G%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*Hj%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*k%(+8+0+0 +H  0 4\(  4x 4 c $(WIdV  W  4 c $W'<$ 0 W H 4 0޽h ? 33$___PPT10.h0t+[W_D' V= @B DS' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*4K%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*4%(+8+0+40 +  0 00(  0x 0 c $tWIdV  W x 0 c $W'Y W H 0 0޽h ? 33___PPT10i.;+D=' V= @B +<   0  f(  r  S WIdV  W   S W'<$D 0 W " @`PpH  0޽h ? 33___PPT10.j@ޝL+YD' V= @B Du' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*3S%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+-  0 D<h(  hx h c $WIdV  W  h BW z  >  d h C <A$event_application4H h 0޽h ? 33___PPT10i.1M+D=' V= @B +  0 2(    S WId  W r  S \W' W H  0޽h ? 33___PPT10i.h1K+D=' V= @B +  0  >(      c $WId   x   c $hW'  H   0޽h ? 33___PPT10i.h1K+D=' V= @B +i&  0    H (  Hx H c $<Id    H c $<'<$@ 0  2 H H?"6@`NNN?NC&, ,$D 0 !EVENT_TYPE [EVENT_DATA -> TUPLE]"8P  33 33  33 33 33 33R H T- 3f?"6@`NNN?NY<,$D 0 \[40, 60]* 8P  33N H T 2 3f?"6@`NNN?N v,$@  0 X[25]*8P 33L H T; 3f?"6@`NNN?N  ,$@  0 V[]*8P 33B H TD3f?"0@NNN?NvY,$@  0B  H TD3f?"0@NNN?N  ,$@  0J  H HF ?"6@ NNN?NYB,$ 0 ` conforms to * 8P2  33J  H HlP ?"6@ NNN?N Y ,$  0 ` conforms to * 8P2  33H H 0޽h ? 33___PPT10.h1K+NFzD\' V= @B D' = @BA?%,( < +O%,( < +D ' =%(D1 ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*HB%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*HCM%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*HM%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D ' =%(De ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* H%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* H%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* H%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*H%(+P+0+H0 ++0+H0 ++0+H0 ++0+H0 ++0+ H0 ++0+ H0 +  0 `\\(  \x \ c $XId    \ c $D'<$@ 0  H \ 0޽h ? 33z___PPT10Z.hBX+ED.' V= @B D ' = @BA?%,( < +O%,( < +D ' =%(D ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%)%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\).%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\.3%(D' =4@BBBB%(D' =,54*3>!Bstyle.color='`B@BPB<*\F}+O  0 )!p`(  `x ` c $LIdY   x ` c $'  2 ` H\?"6@`NNN?N" p !EVENT_TYPE [EVENT_DATA -> TUPLE]"8P  33 33  33 33 33 33H ` 0޽h ? 33___PPT10.hBX+Dz' V= @B D5' = @BA?%,( < +O%,( < +Dl' =%(%(D' =%(D' =4@BBBB%(D' =,54*3>!Bstyle.color='`B@BPB<*`#H+  0 8\(  8x 8 c $෱Id    8 c $'<$D  0  H 8 0޽h ? 33___PPT10.h1K+x wD|' = @B D7' = @BA?%,( < +O%,( < +Dn' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*8;g%(D' =+4 8?dCB1+#ppt_w/2BCB#ppt_xB*Y3>B ppt_x<*8;gD' =+4 8?\CB#ppt_yBCB#ppt_yB*Y3>B ppt_y<*8;g+  0 ]U<(  <x < c $бId   x < c $б'  2 < HTұ?"6@`NNN?N ,$D 0 !EVENT_TYPE [EVENT_DATA -> TUPLE]"8P  33 33  33 33 33 33H < 0޽h ? 33___PPT10.h1K+,Do' = @B D*' = @BA?%,( < +O%,( < +Da' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<%(+8+0+<0 +  0 ]Ux(  xx x c $VId  W x x c $V' V 2 x H`Q?"6@`NNN?NE  ,$D 0 !EVENT_TYPE [EVENT_DATA -> TUPLE]"8P  33 33  33 33 33 33H x 0޽h ? 33___PPT10.h1K+,Do' = @B D*' = @BA?%,( < +O%,( < +Da' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*x%(+8+0+x0 +  0 0Lq(  Lr L S Id     L 0 '@ DP  i L 0  '` _Classification according to Eugster P. Th. [3] Space decoupling The publisher and the subscribed class do not know each other Flow decoupling Publishers should be not blocked, while publishing events Time decoupling Publishers and subscribed objects do not have to participate actively in the interaction at the same time (e.g. distributed setting)l/P1P/33?33=33= L bAROOT_CLUSTER' H L 0޽h ? 33___PPT10i.k@+D=' = @B +}  0 @T$(  Tr T S IdV   r T S '  H T 0޽h ? 33___PPT10i.kvA+D=' = @B +  0 PX0(  Xx X c $X!IdV   x X c $0"'  H X 0޽h ? 33___PPT10i.kvA+D=' = @B +  0 :(  r  S d'IdV     S `.'  " @`PpH  0޽h ? 33___PPT10i.h +D=' = @B +  0 0(  x  c $l9IdV   x  c $D:'  H  0޽h ? 33___PPT10i. S4+D=' = @B +-x]\$t  *T)LXvv06E'4@",W",k>l>A9}OoSPZa:ò!u9Q`vc[dtߡӶ%Cxo1 ǫ)<Ć&.@bTݍ`j 5LM`;d L0059L-`r%L`jy &gS[\ajL0y S{:ԑj~G5l>C3(yq,1m\ʶ!|ȋuaXDX y< )\Q~Law)q2¹.AbޚAM0H;2H ǂd UB%v% P DT)dÅXL,Iv!"~, ?3|ȢdU n?n]g;.9~\|"KdP.IyXEL |@*13+'ɢ<ƈBE"ŋJ_/4J%z*7mXPWs ~^A#)YRFc@ꦓMicBК9BCTj|z.j>ww472l "KCd")tat%K"J˷3J,OXh5 3K&tOakt׬R 9f@/^^@t}8tSg{ajofDAyc7v;.U K`mRgeМ16ĺFAVa]ǣZz6 䛭Z!z{DŽfc=4ZpЌLЬ9BPg|* ݩhLd:ɢ'M¦Lz`'~ˠ ~ǒs@*P6:dso@ u6&:;ǦԙCԹUy@tm|vgF;(Q`ӬGLlq=}T3N-;dmz7̌j 5 :Q˜ L ̀5MAO2c(ct F7֨')D϶sqGqje$z}5osHyl *nNc`Zɡ pn߯*̎|D]C(SrBRΓ aPnpsD5QA5.tdLZ?;GXRJ" L;)NDE@m2l`zUvI8pPK?6e> U"X')l9ݍOV.Dn9=nB(0Ov)Bg[ *p\@M ,8ZJVKՁ9G!< ˋ-Nεa='̧P3abl躃A[X q_ qyL OߍǴ?HY )(̇2$߈+5z qC#ax37К%IjhQ#qrZN ZE=! jW ?xB"K z+5>)pMHIJBV.SIJkO>JDcTB}")_B%rL+ed'6'Na)ESTH'YJ(:Z(fg Pd>4<l頿D B"j#֭@';< V6K Va-t/hz C%3Wpp`3ABC 䄘'QbtRer%V OL%#v`Kkhn EP\D5K4qVX)'&# l {s4 g@aN-(Г3$(ON8КWGH/()(CAG# 21n[U&y]@Դ(+ \5j;Z\~6;o I) QJL&O|QQ|:=viۮ-dk#=+>h69mhw'/l<UXh|25e^3z#>ҼB tjjqn5 `Zf]EOx_=u"Tڀ6:N>гGj#yj,GF\hVy[  RŃQ@^R22a5?%ΠV#=h= lP`u=XS%\D/D p;x'{W `}f:tOX%TC5Qhܓ15d,=Y枬9lލS=")0t:Npv-:XbS W.fz} `0Dqx1}1|V t+ q>G[%\4aMye3puW2PskjiLXh|eus 0s ߽k ڄ8 DJ"@+JBVp1=ߌWizַi>Y'L9gfܷ˩!fpHz9D8 4tB: ȸ+uoJoD5F&lL ]FVaȪ@z*i?{ŀ]­)+TȘIjHDdkg;s <%Ghfa/\Qq\jz:|wv?ۅbiQoJI=aVqm6BW4, nSZ N7pjPS9]TS)ml3QZsЈԶd^C`{[Nz>ؤj0kJ20j` be /aDCg~H`" Ɂ5~8 p =h.upGj~p!17KuSljo#QCj3I>wnQ}cfl 2\S7T6l3:e ftf4V wŽlq?ҹF^\%_%3WԾ?&gD?LHhˁT>O! !>V4rb1Hӎ&C?ҴiӚ3:2c:ُVRgt#ĐaTcR @DEOJ?zɳT~Rs!$?K!~#GzGʙz O ڨa z0PN%&ל0V& F:~=;fiiƹ԰.3n@A!e-<tz€NM7R35t"QVhLlT7#Õa=\e:~Wh #?77?;U5@v`! -kP8c|dM`jC?J3MRЬ#AZ2E@c d`A#7& hӃ?2XxZH{w}kե9$C>IUjRfPg",uijnua}X| +>V&L%"ц=+$ĭ *OV}ހ -C%LmȮxx} $ ZB뺡9} |_, }s|!7‚ÿ/~[ aaz@شn(L :7IAhܷI $>D= $±z(/L D L 5gС:c|uC9`W!l |k gб: :로 $25A86[&MHs/EnN|YxPZ}*Y+iqkX;X>=߅-#hllF мETV/Le Pжզa넪%'ԉBZLXH[G gkƌX7x9@f$K&;^Pj3VHxhۿ MM&eƆJ^XHwb= zAB~,O*RHx O@ y|& ")=?֪EfQ*jSQ΢:eu0 CPM_SڌhQiF7q3.U!6sFө3M6ʕkѓɚF54^'ցW,B }!Q&J@{!xum =UX&*@BVIqwz}aIE(&\l2BԿbV/HGA%`@ v{!S_9?jh A'*Tj@IPN{r VMI"2u$|x"1^0!_%\'N>G'?`ߡKgz:9v#< гb& A@CM-YAG튵!}ڃ]b,w^OF@7yGɸ~pGt 4]:_^M:_2gwX}!:泮i >t; [OQ@$zLVZ刐 Do6b;AݡZFl6}#(* So|ȩ7tj:hԛQN֩?l?qɯ-v@sghFdQ+bsIwŦgشgŦ}LZ>wnXwoQ+6PVz֤+6)3@ D_AX8mH[a.>^Ыn(!ֿl 2A6~ @X Bw=  }?TCq-_hR0 |k   =B_]C(諃RAxZ @8 lxu=|MXP$ @V8%W^H\{?>M@jW N1j}&6ȭg/Ofmmj/wRHp&cbXU].*,TWWVUYq6-+++VUegG(/.,.**xYmeoܿݥ}ƥeo~`-_ҷ$ޭ;X@qe~>C[2#M-nbO8gܫ#Z {KV_~8qbCLaoI 5i0'{em+(I;;wGb}#3\kdy8ӵ>(k-Ftg2#^*..=|Ny&\L=qN+Zª}LmD/qt®ECIupMӾl'7걍u?kn<;"e[5_'i^@+6*`@}|q169Vb=tݛC?^;i+t-V]mO \xmKڴx>M5v֡T%lVDxn~~k?,c4ӁώTK^jAWL2&ʶ3 1hg*^w,9h"tx-[7}+K_;k_IZӇ]=7/ӽO.s4ww~䏓N=F:_:|1E|{e-/Lȷ|wo:Y_ͷ$xg¢khQ(тog}ح|AYV%1I}fq$;O񿳤%ʪ;7kA:[bfw=Le9]8j+V70|!ïՠу* 4-%9.['߾(y!)n'ޚ*nցsm_ ad œUNx6nB,ڽz/[}Œ\uŽ%|%ZϽheoqc3\?jd$oD]`]٨PXt8WzuN.*c7NyĚC[#/~hM-y/5 ׮R%,}.^uKvuo*Yfzr' =>eEGu3 cݘ'. "vuy玥eV?o܎Jes;{TS׾xs5 S9ygn6Ki؎% }pq˟?63컻CB U)~~ٖ_O N߸ĿAɚCGEڬf7l ~{yw3 3u߯MR{K6lzeJÿv,ʽ\=y\ j}֢a=0cW2583&)ncr١bk傝D#\uDqKg%Ȣ]yM))/dOnJ^Œ cm}|W=zf)mHޒMO6ri>i7mܢNl!GDEՠukh@k\V֭_Sf+G=K~=9͟'?ɿo}*Cl3gnNpLI22:g ]\l>]uOp(mӳeow˘: h^OHvj S'[_!tx] 7g wr3 ۶Nim3ykn m}bEƛ+/%lU8w_ ;t=|6AM/Ue'֜u0HƮօKY?_ҦGM5 sBq q񧔜?!:.>s LeVǒ;n YWr:w]Ou?&0ם#: wǷq H gB[ - WʕmP\"~r͟ 滛m:-R›>ֵ}Ql>A9o}\鄉 *;9aoV^&T;H5_̺ πQȹ:iLjV&9e2R╄@ K%r^ A$}K,~l[>{>ݹj2nf#-ٹYí%ﮑ9L2fk53=l?/_y1L3{:]p:VyΫWusifC7 ƙƾw_g.ltlΫ|qWwf욭9ELé/D6z8BAĬX憷WjjaW/4a}sZT7{.->C+|'5cUs~Q Aj{ұ3F=mNa"KKVNKpy׋;ڷ!.eS+vJxteܹݤ}NEt^J4鐣ztO+..|PCvk1E9:^?0b5M%^w.i8Hs>r4Ahj/wItMJ!Tu|h[R^V?Ԥ<ִ./`&^tۃ˚XSHa.xMCt̛UvO֊-?^Ο5uyީn lIg7՗}M4^RvfzD:L k#2ĥ NtĹU}۞'ǎc< ujgDIgnX>~3o G{&^͙kuУ>q^o[Ly65qmÀ&EU]}>/OHŚ|Un)0Ӝע-gZnϓǾf,♬%}H9#1|:HTMEUڸ7͍oa55aS>J ͞\}xKg|mK[ve4ʞ޾(bκ'8mBCGר"iŽze<^GU1eeYyMdCנW-]>vgGB]?eW̜ w:˹1㰪-]>iz-$b-fˉ~2p̵.JC[.yUgOuk]F*"ۈ#-/빖d_+`7)˾M^ txFJQMϐ*s~9RC[ߞU+F́7 Yr0Θ+o 8)q'&*0 (46@GIE ;`! $DBlEYEwOh+'0T hp    (4< Chair of Software Engineering Department of Computer ScienceseVolkan Arslan794Microsoft PowerPoint@0 =@ g%@0> rGSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwmCmmCmsC"sCmCsmCms՜.+,D՜.+,@    (0 8 On-screen Show0Swiss Federal Institute of Technology, Zurich ArialVerdana Wingdings ETH Lightse"Microsoft PowerPoint PresentationCEvent Library: an object-oriented library for event-driven design OverviewEvent-driven programmingEvent LibraryUse of the Event Library!Example: Event Library in action Class SENSOR Class SENSOR$(1) Publisher defines an event type"(2) Subscription to an event type"(2) Subscription to an event type!(3) Publisher publishes an event!(3) Publisher publishes an event!(3) Publisher publishes an event Architecture Conclusion Future work References Questions ?  Fonts UsedDesign TemplateEmbedded OLE Servers Slide Titles P<d _PID_HLINKS_AdHocReviewCycleID_EmailSubject _AuthorEmail_AuthorEmailDisplayName_PreviousAdHocReviewCycleID_ReviewingToolsShownOnceAhttp://se.inf.ethz.ch/?http://archive.eiffel.com/doc/manuals/language/agent/agent.pdfFhttp://icwww.epfl.ch/publications/documents/IC_TECH_REPORT_200104.pdf1http://www.inf.ethz.ch/~meyer/ongoing/events.pdf$http://se.inf.ethz.ch/people/arslan|ЅNpresentation tomorrow Piotr.Nienaltowski@inf.ethz.chPiotr Nienaltowski?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./012345789:;<=?@ABCDEJRoot EntrydO)PicturesCurrent User>SummaryInformation( UPowerPoint Document(]NZDocumentSummaryInformation86