ࡱ> n%t Ri=HI PNG  IHDRK,"gAMA pHYsj IDATxM)h#զt4hmKU=*mK5Pղq1,$'28xpx?foq|SoM ׷8~{ߟ]o(Ǘ׋W*О|qm``b[[VWN+ϫ!#H~L ~a8{_@e^P ^fOlIShJe BbJ]ÃhoƜ%3~kND[{ _%B1!N+Y];J1h0KjY/pu?1 3iJd;4œƎ&9+_p4ʔ4WVl̈we1o QewJfjD%?U I.VF0(,hpf<;/h`NNWC2xF/ ``e2Xl V}|S֕n,OkM4-l;Ensࣲeݝ]TĠOږcȎ_^u]#@Γș< l@Nyn^SV0~16v鏘:sLơۄSO5/s %9#GUb. P,hGN8Mܵe辣WeR +ԟcjd4UTɖpIB{ACp 1zE2V 0Y%P@_8ךkcQ'zB%ܧ|8ױ4uo* @;x, V[+ ̣y?}1J]ؼ'y ADGƗ}yr2Xl V[+- ``e2Xl V%A'_xªz&U*n&`Fe7fZ: c!{ti:~Y9*簘󁡎5Yϟ,8:?|$Y7U)˿XJ0:M[ɇ?zƠV19Y HPTP/{=KX`|Ӿ>~_ U"SfY`eLK&6*1 <kM|j}19977Oz3c<0z]{9=^1"{\d,S[˩qРc~BSIS-:2;vc? &W"c7[bv}`<4%T [lP`>Q8vKncҩc^G}]W̮?|\mL/ʩ?f{ ej8纮tvz1.XA ^nڶ#Eo~K ʾzP2|H:Gs\>;~L'*pVqCsK,Le*9 h XY=4ttP ޝU= Ԝue_ Oy\{dUzcIdxwll*TMLM7!xKBu3/J~%6M B?k o.7$㏹;-^YR>b3aaWshDԭck|aZ$+iFogdowJtEl} hp~$V(hjC`e͑OPϤd \]ep) P(2Mfʍki/( J|e#89SzԹX M^n4ːU 2pXˈksku}p!l'(X UV+y^,-  fBG p1^VA\\ _ rྐ`CY1M}ʍߑwz_#@#PИHPH|} F2d hDk`PΚf12N,e%=uva+ko56 wAw~َgh4&U)}j; ʳv]'<>Uv~`\O=VMe?G:D89I;S=^VLV(o3Tn;eYր@#ⅼ,Y"\LsS W%)K+?:&BNG>Z'8L[+]@JՄre U_g#Mh.*ւ l ˀ_+@ ! KÔe5M| mMb.?#` ~v`ׂˠ'/+EJ eMm 9wdb2F8dFb'Z㛒lکiX&7%PgHu ۱K rs'8ocj^{x&&-^R>6ˎ&={'D)8)VFLbB9- m4eu?FzZY-8ĦʟP3:?"_^` Kb7'wau[8HbN*q$(ܓ6%fd^AP&I&\;:f 3ɩS!vj?[cMd]ux~U ^4M(k]ntxY#'Z9< OqBz&YJ}d1M[t.iCc(aLk5]4Ȫ7axY%6yzy=qM.u`՛cò,SܱL8`x̳Kg)'8Kr[+{ HBSS("~sKbbgg W|Q_厹Fl/3Ύ˗fN @ ¤XeMJk½͕MeUx!N;n1j/!1ĮVgk.oΌIxܶ FuuuT zbRX\Irfy6I% ށdyq15ޮF:guLX&k֖3>Bt#/;L26e0}gmo`N]]oL Ƣ!w< am#-_=IF뉱UYCga9[y,,CF}5_ LFX0_Yz+K$dD~`6|r˰i>&gʍ@2!N]Ƶ\UW(9>/=s\#ÜǙ 4zSeLx2ZPaRn.:o5caX $g`:4ۭcNw)0T5ewq<:xB X䑛jI gW}l%?ba~ڶ|aR+e1^V 22"^ %o9h ).o|Ig")a;rfa˲9LWwĞ lx~g9屶r/<#_W8oB"SWblUϔ+8Ϳ価Ѩw KeehW3/¦Δ ,S;R 3ޢ.v Y8JAnyNa}0~)](\.$ _ 6$QXVpO}C7NuueVyF3I~bt˅3{墶 Š2 >ӼYߵ(f%{t~ &ØŜ/n8B 蒃R#5s98%7oݒ/ԍ=xʡ.B,l+S}=V? :k3lqvI_ZNHM-Y s:˦9d'<>ΤB΃%jG~7:o>1#[q>u[dDN14+U w] vg5~WlgfLgSX2o՛{O\rf>dg+ilu ~zDN0dd5[{24g[>s #mّ(HZ> GOPzueK4森}Zl4gdڠ58Y;Lyv!_<8lMAЋY.!EF X.&r<> ib1ݎJ7aIf=UiW6k,/=AY inz+Vq>FDz7av+ x+}M/ 7J+M}F`v]Š3#yhin&`ˠk `HX,7FA ;*><,7avon9fhi2nz`˶F'ɟOcXJ&G1 K-GH І_*J%a܄6Te_ZK@.lYqf%t'MF2՝BQ*706e 7&+e s4eS*jXuv[01~VEAzp D-J2y]=:2Sf hd='T[;\rƙ\Plپԕlw'] lH\XgˌLTOl_b,kY`M[F5j%nž Ύe?&5d րx5C܏* I゜dXh 8Qe e[#;e|o\nrzR[͵u)~d0DŽ[4JMQ1#o.nεQYPlg!1Ɖ;%Z{a MMV¦Zi Aw#[M(ExYkAꑦ֝]غac;?lR=5ʲR\**,kxcUAC8S.WL#!Dl17^l$:S-B{ ,#&wZ*+G֝e e[Se?81e[#όd ia,~;b`Ǯє7ANq]n ִ'}N>"8nOzYsLZ_%hl5M9_l\4f g[߬`;sQnͪ9mrޖmdز 9en;mcĘ_[p#D?`Z9Ӟ9iB};m&L^ego Y_z5-Q =;o:N C65ux_ul~3ܚ`nS,l+ȦNg˗'+ˉ8B^dA}pR4ːϺeᗘeVGQ'RPXaPaSd%.~ |r|]2˒#cs[ 2L28 ׯrCd+YX AxGY8 e9T˗[VQ-G~wbOJ'u!\lsLL~,6Eo{d1.e0ɯP,ءl7+' OLy*7/eЍI%@#ran=]"x~~~A^8 .6BPWH^"K pcvʆuLXۼ>uZ!\rw(k)2Xeeˠ3~9Lm.#6~a0Q#9Vغ㋁_[ 3 eb vMS9vydKѮA zrh4c}K`bp0beЍtt~a3twY|_#k&G|KHu_= 3\ˠβ`8!-6fdQee0(kiJFkR.> KN.ĶeXw98Zxؘ#: gI>zt|1_+_+_+_H>\l%OVluL艉g S9ɒ5)V ~rlx8fbMj!HZubM{U1S0ۻy*̈́%EgUk a.L32y>cfμNr]&+|'ns5#췶 *H%k25~욛y?4V>~VlFFUJ/s:A(!V_KnO+D_`5 Œ5)px K-`>l R~hb1c` ˜'? IRTRR[IؐewSqwؿ]!X zFr|kd5[wDq u_uvj~ټzCQrXYBɁiV.K뗍)ɃǼI wxl?mغs&\Ǵ)_y p<~3 1qu̦yS*gp;ScI#SrBGrR  (HIDAT`"_8?nQJ?Lߢ^*2!b Yl[bA,F0))ˏu(c26DeBpvj.*L&_nktnJWu̡4nwn/>2/J> foE2c9N;c+Ț*uL|/>2eYyYNՅo~`FrXf;HP~/";/hC n,{ڢ&=W\[6^ČKAֺBn `tF`޶bc-0&/K2S{ӱcBBRž/~ %`'Y[Yi%Y/2~-7>X1-ĂI~vP}QpZVb ˰:&p[+s]Wo ߟOj}2X68A ``e Iv7[P3,Q:!5,13 eYƐ٘k> 9]'Xl ?Pp[Pg&t[P̙a/|h 'MMYe%8*v*b_:/ڿɻV[+- )-*nl:lh 2Xvd. ``e2Xl V[+q[ ?R#je.IENDB`nYuXJoM7maPNG  IHDRQgAMA pHYs.>IDATx]rրatr&W3sw.T0٥7 l X1S)֮%$yFYpy(ok|R?ϟb:o AF/'A\|>~SJ=}4nDL&_mSJ_$Tf6O$JsfAnf˜>^/&+32lv4Al4ӞַĸdrXf֧aPJ_INp̚CTI)/)s+1dpo|v&/& &j2gVOCnSN5i?Ov\BwVo4r6zB6.s3x}J]$7H򮂭Re?=OI&V͏|iP~(5(Q)?[M+@wyW?0 ZK-C). Eu+ӛ䧺]rz'/gOE's5`6ֱ6v֯-P13FPkveMjq+5RS 2_U){{rtx1};5fR{n'9X0Y\S2rQzǵRUYZe,[{xq3)_aO{?C2~]~y=6RǰҜ󣼃ѾKN[z#J$(ڥ8=:_UR~6AkiFJ9#g>V[&ǒK@ނqEI`7ǯYnK{[Oϧ߻AulzJZϳʲ`݂i'iovt޲AgTA {:ּ a+3'̮`$SJ6'%b-:@k}A@vR2No64js7ܭQ '&g'=dP>SvYM9)-%/`|kdPUҭzbJ9g8"tE{o)HuſOr Bjθ@+XhȒ\"NS=5^{kt,΍ zTIffu^bʿ!7~nS뀾UbXa\=mxvIβV\g/9wjGp=O/Κ orU}A/doő/oq`m <`g*!Nǝ7j< ΋-b-~ L\n?N}oB\Y,,*Q50-FrvxU'edIPp,?O$̋z[ѷ7X'퐝FHX[k-nP .ɭ?o: XuvqS9>ey˿RwZ%?@{:$<;[߲OV~86u-&U:XUdϤsAA?krv@EܟymIrKl0y?<@/X0u 6b-X62;nb_V|y}b[cjQķ }߿ 7!cn>u{v-8nߒ8l%xTX LQÒavKU`C-7Ck˿%#96X: <@/h~ݦ DE:y^p&<y^4< ky$<zAuy^PzAuy^PzAuy^PzAuy^Pz&DZ?ę(ϚgG,ǍjXC9C2y?Ƒ<:;X9N8Y3؏u0 0m"E[ 뼅!ԗ9Vyo5i{fñ0W 7 4ô* 2[J<͜ZW9ah n iniY-`՛Gpz^ݴ(m+R)6ϽJiQImrTVla7:M\rUbߟp ҹM9;clܬv^2< hOk6+mz㧷لy@$9p\&%&׌sı3rD,mhiiiiغ/t3.yZkOyvy-1qƢƧΣݲu_^qW \oy>ᕯٿ&]FKKKK{}1:fqLyKxKs^pry 1hƄ# ύsXhiiiilX~}l= @%$KɬIENDB`nEAJdyt2d͛'TЉPNG  IHDRWcgAMA pHYs+ IDATx흿%q p84v 48)BAoz\ A4{t{\Ӭ?@ uFMˌQUY}7YYUYQQYY` n^9{[^9?w5g(͋kK{!wϾuOo/ιK?R~w?_}ݳ>7x_Vha^+Ni;wWe+$|oo?>Uda|}]>O?}gݾwg~Wi6 AjTQF@6 BJo, ZvucziE͢6`k&-Ifž>/ۏ~snM=8_@5ۑҐ Lm<}HYrAܓ߿wν󻯾}7/?/_={REA\@49Aݟ>{UM-7H>bd%Jb4IQmGEF5boIuG؎r*,wt(2,5B~q;O}{o?~gϞݟ>fl!`KZ)b:IXخJcQ]r?N_D9"*冾b"ݣÜ^Wa XGP6 \6(qC2Bgv2B@J8d~S99ܭϝwӻ7>@k.Wk](JG&R;]r:f/Kz!4w$ƻ4X?EוNn=s{s9J}b}1/&¨f(JWhO8TE.Gﴢ74|)89]FJ"j fjFE,EYD!B,1Ok=})4y܇UsϾƹjl%OF+lrb"aF{w `W}/oi*Wk \"w?oswt'ι?9QHd@>[1O!e jc[sxΚ̱"{%4cu˪+,Ӣ䎖tZ~^!>ۿO_;_J@odjQqιwx|_8F B΢yB +ENkk׉6d&?yn|:?g+J9YTI߲g!:) RCo/i ivS&4Euv6VV6vl lEtaOd%ݥ![CK++;7W۱_|qpD_KRLIcDwrrqbĖm;Ht]R袢!;P (yxwHMmhlZhIag5ȵ+*ʹީ;$r5]&V)Gu QKj qbh}s'5շ}{]VC5}IĚ.-ErPor\0vQܤ[7&v{F?WBz;;uFuҮ2 5l+2H|H_]׏ErJBĿiRu ̥F:`/S/r'YNLlfjtU8Pu1NҌC 5\'9iiL+?{͙;D:%.nZA:ߩͷ]<&t*yf @!<+_U?7|>0Ps{jEirπʥ:DHI[kWTTw6*̡|+6.mVlsZ@zMư劉?y/yqׯ~;f.yW|7_NTT>KC\;gHeDتK4]UrNfM[[5F,m,XЋѢ0_R-m&sm{)^5m+&T6l[.wY}i'2ōskSb7?qA_t-Wd>я5yq2]rIN+qfN݅2l)>&o߹97yqs~@}s\r1FYc:!_}t"4::G'uU,>)ʦ&+gM\&qRi3Mz~N7/ ʇ#$CI0.y<ū0[%h֧3:PJďˋs) '&ۇ.wv-%N_n+'.Wizu:^ Pn r$M9979wa[7OtYkOx:9 zR,= J|hFf|Dg&?[Hc ΄4̓0@!4FvNo[8Gr!Ng=gJCOW(sPSPi{xj\믝[EAԹ| J^:; z P,OY3܉X!CGbyBlaT ~]pι7νt}0 Tx?wr:ϊ5I|9×%Jic%yt;12!2Q/tyzNR~NO͡49nsr8@Kjι=4û{N5k;3CLG!6C]Ip%@`ʭڔmf ?^w97)7u gd3;޼R r7z;_$NdZ_eJ'_~y{窜&?樢TsgM+Mf[tD͛4iȚ,A~~h< qN pu83JĿx1P5yq3Mt&WT61_f7ٗ9xgf՝K'Ef,%4IÑIMr_cJA}Ќm^CPw+J|r/`vJ\*Ieeq%2=lю﵊tgX>)~zsQ~U?_<}xYfN8t08;;F 5b,k9~qXdaɝ޺woA*IϺ^ GȪ8mC1E']_ GȪ8mC1E'x>Օ8Jik6 Ɏ4Н= ?Gs. ЅpŇ6N`,N`,NX Jyū09Vh8#.8]+vR>M7i!>8Q "?yn:%> K @5 EMiܣqkX yp1p8nߨ|QKNQvQb@"HΎ%BNgE(W@$G*T]^51`w8.'; W8^|H1M:,yhz_+?Wli RH˝s4qCH$jz"t`U r'FQ9m#<}~6u۳/kA$S:'pʾ~'p=̣IE'ruٗk}JWLNhW)<¡>E' ?C\$ښ.q"J;y'az(UU Y|.8b y2כNuv]*'a/-Mmլ:z/Jq9)S7/nn;ţ+"7ZѼDxP=-\l( nڛ\sf$jo9hhP>lȵ44i"#K뱞'jяܡh^ڰ<=ى:?kh_Q)T^ mu0\iiF#X#;v;K/G^j;u.P& J|G.Қu7v]Xs1Rkd^iu~ȨZ8S9$8.蔩v\Q+>Yjl bXWf:Qj2Uuj7]x>j'w|Ƒ_uFqXM׾vk֖_T(;c. e. cR GWGUgt^ycvgy't>&9X~,%C$Q|4>ti>N`t&3ࣃrP={|sT (4y|J :;hϝԼ݋@SK2Ͻq.n5Svy׾TIZUb2|w~;]8;R ǥ-xQ'D=/"`~Q38F׈Ld ݌WTTz΂ %1'W2\>tINNmYtxTx5қ'"1)bPR@.KH;ĕ8NZ=aMn9EڢavaMSx䚩HTdix*-J.ĝjZn3шbҢ.s"Mm{I{WNן}ߒ:uVb3XS-O6L)N_Lr5y"r\EMetyQxvɖæB{rS$)}pCq!qm睬X!"rG9<*VsE&nNԋq;b.|fNE&GP\;Cطk. r'0|Ƃ %; ߿Og-*oHBNj~#uB_ qPRKǕ%,șiI3|w$S1)Y{hg?~8G+Tvw~ro^>|Kp$Sd3PDLQ1eBfΎ#N@;8";N"{z|ɏFBdYeIF;OrD S#dYay'pm r'0N`,ȝX\z'I!㐹h2S{ިB;PfNhnҌ;mXsQQQ[itGu/EF-(KbQeF-杜l,ELE~hqLf)SUŴ9 JTI勊4BqpHr>el~hpD+p12w2^ě6U^9;jPTaioҜūiFE[-P5EpLʈZOX8˝LPҚ⎩V2Ռ5;m TPh@bf ̝ᅒh@~PE0]+XDB"ӾWM1xAh P37}T|X97W7'TY ft%EfdV##NѝnkxKaJZKKE2#?p'bEIZd!πCw2%/)/}g1=MXfhd*E9jTx鸟p1O+L[vb]{c/2[JITkY)xQK<=uu^NNvXl,tW,ܽ5SWڕfbeOdV[Kb2K]cTmwtsc2s\4@aMaW{\!Ǜwrm5n/9Ims8h a֣z!wcz'0Nχzqy'J}e NCn ]icQ@-G5B'u~Q[SJEZ:WHj(E?'Wl ciIn\GlgEzץB wux:^7$R1.16ЛԽOVڣBpHT) ƵTXf:G2])*J%:9pcks D-6>G Spaa7*d5{ҚPf5 jz뱪;IyGmŚJti'51v):Z,Nڢ(RƹL"k{Eᣙj+|d' kά}-JP-B{x\f2Śiu^Ө4e@D"3"vGE(J’tqk\J[vD-&MYןC;BV+i^oQ]8Ԯe ) .R'(*tjȎ4եBm-2hm/w2&tXMa8kKKenuo"TKEbI"2>Rnvďha7$X w-Zs';̊]|zvENMYk<@S\|c)L8aRK,yJ5x)Q#E♫숏vFn^wH`(E&+o2w2==5OCKuaepQXS4I)OQi^hRڜhІ^)9NobT7Tc>g|ZELGQBT?=Mv#р>R<4/QeN8%"bITn9i3[3IԑȰ7D?JE^o^Q9U}GP(*RVUH3)xjfk\,Y[j*|dTW'3-G QؔIXL\qqFwXCK!s'`8E!q ?h|xp`qI#N]&zFl|4>bWfHs'e N8ハ(?,͝ Ov';8z'pl=癩)X~@34/D-5ŗD)U",䖞WFz:yce" 틒{ef|t*"-˽vB:Х7"gIq+ D;v͈*+zEEuh,2m&1XF}5t߰޶_$%z_?+,^z䖞Wz&қtr;BGagXv+qX3ěR YRR IJwҥ [5`²w=9EvN-`NfT*j9rqNK/P<r']ݥ斴ێKɾ>~nKFc܉Z?R0DͧsD2Wr6=/2b"ض,zj$":.gbJgqb7i_:qC -Ns'-8'u@3VdY}{~ 얞?IXA.Ƥ e/zܑIm^?2Zt띬w7`+ X#w1OkV4|/o1A"\2\k[Oil|.vH΀}ZQ--C$N~Ӕ(3TNxӦlٷTWmTc;Zz^F seFLi(=ShaE]9Sa/EijUHCwqdRhI*Zop]bTr?#r o/TTDJ YDXk.Kr۵X4%Q$;Zz^ܺ؍u#]nOۮ ?Z,ߦ;TT+C -_2b)o}qS i}*=Bvn1;m=qv"F1 e߁e ]dr  :m<ɾ*r'0|Ƃ 띤S5WB!S4BJzT3Ү&=Q+@Fɝ{ JDb_QXK ey')KXgS+[ ɝT?=A^  1D!b2) r'ვ Q&kѮdV`y'5=-dJC(&9G*V(-42*J-} v_ZXH(۪@&EBhP@/ȝX; wc1Zۣ| 6=wt^KeH Qyľ\?B]TBQ'|Sz err_EK#G.ix,BꎺtwK[iL](ڋ챌sJ<-ݰr{ſϢ=wrCRIb35V3\3x$_޵d(jAJU9jd3.)\s*Lm\Bu݇]n=b73i߶<-gexKr7ڇ:; Sգ@jV+K~s'vZ94`:f\۫;Df_EۓJi8Y%G? 9jD kɥ.틑={lϝL-#KT\ҔjhtߊYu7>XFS{X+-7,o)vݼ*4%; 7nDJzcw!vwQ^/X=tbT(NOO9K=\<Cӝt|6-Sb]%tN}qvUsv"4wBD]%RIxG%aNjE#)&nZWz[J\r)A)imU$+* En=`?'gqő֍uQ(^wjl}W{9꼓$6 6^qWp7rI6\ǛwNKY pa;8z'pِ;8ؼh[ͼ0˝EfL'.NrKvdIwR*lr'3~=hsk@̝DGZ?n,]s܉)`. s'Q= ;1’s܉w4$* hC)t/ԑVؒ;)yKeXN6`{wcAƂ  r'0[NҵFHb3`I=wwOƌ5$^D) qvvZÒ H`_K  (w"tc1X`FNKP @s'`/vXd; gaſF1 ; (vA#zJgzV,%;#BƂ  r'77Nؗ׊ WCWpɖ cwL?6ΕDhSwfJT-T]t'`ޥ{)*wO ߲XF-aysšu/w~XtM sKT P6w/L+nJ勊5ɡKNjѢņR 9E26_rf$j_i؆;I(!0]hFN/Ukڛ4gq==ۨ(Rz1>B'BQc[Uy42Q#˝LPҚէ⎩.ǘ\3cIzv";yQ;QQANP#Uo/N)|zkFNC1f'Kv!E"-u2WΒ0`%;3=sc7s7 UDVuOoɅuh[B\3ڑLŊxN.2åwbaJZu<-;dF>j=shq$,g@0̝LFq5W3dPkFFFb;jvQvKHu:Wh]f((+ԛWh^ eZkR>rwZD Qtԭ-杤yװ\/)X?}sMѠ,VN#Wڕf$xj*2ɋtrc/k\,YtQ1\BhCq5S$nܝNqwqɵrOv\ָ?trDL#?#L{p\6N`,w}Vؼx%hϝW-ʴ.j_o SBWCXEfBZZc!vI׉5SEmѹ^rUKMZi15^%,QN{DQ˷7DP;I֊f0b|H{ &uEBQhg{$*ݔwd^~46S4iQ墢TB76_6{I2#Ѫ|ِkihҢE~;IOOXj}qGhR9==I~{ץcg _o,"]Q{)'K/-j4V-v!x#yE+|dngQxNw<֌.'5EE"So73v#X_35ڹ^8 JG-t}{IGEH0d~?d$P[1w ojCͷh""cR~f2D%k4N}/}\" hCPw҇)W-NO}Ŷ$r-Kk܃vo"THdFXe&H1Z|4I\rbbCĘ i_Tnq 2ܕR[U:{)4^nf̨OOKZ*Phq|SvGuQ;"杸4Ip湚4$-\Ԯ.MRs!V+tYK!YvQ:xȃ´c0X'+T{bE#RZe>ZԒ+OpH|4rI^q8z'rRW{E;%QA٪HVY;\*襈^jlXŒž5bGFuu2|wBic;aq18R׃^p?h|;g;Ļt.%z28Ims(]w \`]N`,XƂ >N9JbI2gNܗDR{t3D{i\B`%;.#ExJj:;Zz^ٚ;;,1-|%wZfwzB"Rt/xEXoQ=;N5)B7#Ӑ&#;뱞|賱D-;G,E!_ X4畞ώ$uJެ[8Tځ\,I;ĕ8NZ=TWnQJ-f'D;E_M]QE˷i..2r*PBcu<bK1C,7i}/֊Hč$6 q/ۤacXEя0&nd(X@wXP93%čcM  E\|;Q"3ܫhVn;z6Q{d D?Usw?,IDATEᩢ6{ ,:8*rJ&J ѥ7(3шnR%@."I($~] }HZoqwca.¨741<V@5 lEۇ SzYtW9NȚF1ŏ\ZrFԬIENDB`n*9D(rlxPNG  IHDRWcgAMA pHYs+ IDATx흿$,p 8ۭs>;y\=wٿc.+@>ן󛯮~'_O~_o~P8^30cV~c L\Oͯ?{x'ze(2P>s,M)K;?/oo~4ژ?=?o~L0hekT`@Nxz̈fK(ecmq%k*݈]iVl],L ipě1=N:YlVOKD+"ɓ}/׿N>wߛ˜/|u_~_WFcP462Fm5U!vǨZ6ueZDMָLYO~_۷WO?3&eJ=Of H] 4lmOTqߐə 𹿻4zѸ&&ug1ͷ/_}{翸|xpe@4f+rSAr>,;]'+o*RR VHx:{ `9gl/*>d꼜beb`MA4'Sx??eNoA*.#fJ"/Jz{_2[J5-)׮Sp>&w|إ}:O?nl-Oz3r b$ۡJEnl~׫W8f;8Dwc{/_cƘϞ~Wx[Y!mo-G4w!dj}DWU^ӮyאOûox27ehpIAi :i|#V__|q{oWy~:L+U%tG%`jpo5Z(WRrt905!a-Rʽ1J}ob҆TɕO5 х.tlA:4b >_<ח_??oo1e 3'? C3~۷Wq?ԹZܡ`JL+K2;D/5 $bRڸ~ՖV$klt>\&%K hEjVkJY$uD׬{e\ZVxzUpfФú ,Kٳ/Nz'*JM-ZT ѝ5,et9N._]n %GW7.ܾ=l+)Xw}w}Q,a͞MjQg҆WS ;1W豏 GH~,\zK'  wv/_TByz)b7!Zѿu75{=<ϻ迿[SV6l!Q,>҂Wify+z!uþUI PR{?L"aO%QMރ':}o~Rܞ3JH>dP; R0#bч:>FM^_ A9"8vBkcz}5f1ژ&saTkM۷/_LnMGM3`̒1uۏBvX/-wN׏cQ&F5󥰁fM[pr&ƘkF&᝹3Ƙa+@[m_r>,{-ʄ[EvM&.=  ;9W1{'k & GML"pbڭp\ivqn6 7 8j'ͺ&ݒpq#._rK[bYemȥwbٵ1>k-,51smA˯8^͜re̵#I}fn*Dѿ^qWW7_]c=LWEKGQ:(a|1z)@>>333X7~pU4NM{9 coL^9"Wͣ~b]{k7[wqjWW`&DYoQ`Ñu#:(&PɆމf_۸& h̻؉s1~Ľ=XG c܇~b-7_ó_˜#b)/2N;?PtŬ|E?^;D3$nDh[:+.ŎW7NVcykKcP-uY_Cee0 obIy\}Q4O+(؉ppGd|^; )~5%6t7&h9c_<;xFnqvB.vG{zǛmPz¾&q4pGVr1W?鷈>NXô,3fi⚄H̓$eeoXe5c}pJOvrP"䞍l(8U iKt6!29M[5Y癣 kО5Ѽ$2 ަ,}ߞ/`I]?OẓfT>m -Mԗ]tL_4PyxXSNaB띴z) ٯ~,*!SNNw ٯ~,*!SNNwh[Ɂ8jAw}ѿs'V,hM3IM`  Ed\._]N@ ;X⻱E_ /D7L; N&k!Ld8[; ų M6)S9R4qJL&z2Dn' *#jI)*,PBda8NyD\zr6'U)D8U0'nӄcKxcH#وWMVi,Gb}L :"Hn17x*DĨ.<X؉溤,Kdw6R5Ϧ>?qJj(fN‹K/;SWlh'|4Iu"gQ}Xje\KB XMa$;VJ_=N9e@OAu~݉ xxBfT.)XwB EZYG3eL([#57 sy{Ŭ5eJ5[v5_skBr@N%f?dٓʼN*_d@Y~6[l&ЕBmhg7Z/(;kd 1*Z'#sSs]!aS< QEQ;`1z2w-T5^_\Vu1L G="₝LuY(lȔ J4b)f?B&K٩<R'lTf HUv/c:;v͖Eb4!ϰcTÁEcRؒPFw"4w0Qsfes^Ҁl*kZ^_k^s/eQ&g_x'YgXa*&zOdyz50D] 7m^&.]hn@{=x'%L.]Yk+}~2njNP|jfX#eq'eg5gibg䎕 ǚ ;/*<RCMϞh"0`gh37p4亗8EyM({bg G-dil!3NV7k<M+⣳Sl'CE6slbXΔ()bNmC5Q8}T&#:W#gxKD5$lyŕ -*A)3m]@=kҬ;=Q,!]0,5vnyz59Yɹ#zBԕRl)[ɼ}~ DEܤ/qDʣ,"ɚ;`_4Nj>R>R49F^]#aу̅צr!gRMRS9V:E5<RL?+xڳf݉ajJYȪS4ʬ, )'6 셮9Ih m k6 job'gck b'N/@_; v}A  b'N/@_; v}A  b'NaM*_N5BҶ{؉ggqω'%Yg)ۚw-IDATqn 'źasMQ]96eG-htn'-~m  U-k_¤zn՝zǹDyeKQc)=nfWE= M ?e;΄(S]Y| m`l;UNHՔ=u-f]pIPZҤ% p_:xefthi%n3;'p]s"D׮3NxKPmFs=eSM-)Si1ZCS-\f@N*keD7Eȣ@WXND)5j Y&U&*!pw60sߺ8m@_; v}Ed1iBIjˍhPB{x/ Hz-/OIGfhRkxiH_ O@l;q/{|͢yK2أۼu֞0cbA 1mQ5kF'uj&h,Dnk.}/&zu'ὕٜBRPʳg~szƏo̊(`6{n!9]Ɉ#9Big4fIֲThMtFjj'3<YX}xQ4|eI᥌[ 9q*^Mn<ƛD ޤdaN|+|sPXh+˺)37glY2ɩ }MY=XWV`l;f\;iP# lx2SaVV;tf)yW([^T)O9[9Piz%khl#3Y5uzCL5 ZPNœ%Q3֘^æm,m֝x+(Ml"z, KI &yre))<ЇՐ^;h =;3#/N/@_; v}q͢ls%(imS+ _K=6ϣK$ز< ژDi2ήyEySN-c'ޞقx^rRfFdAKhq7 )E^5ը"KQq+y7OԱfW_|j9w{ˣpnKWrE)^b( gWٖ(T0V2AM򲥎{sw|:a(Omf*^*rI/('R*%k /۶`/+؉)mܜPfVhXm[6!N6#c0ed6Oӡe/v.DG#4ĔLHQDIt~^X/7CEYţFF "/]ix!DAx#NJѮhUPlSBuXIwR?EܜJŕ:.tI̦BY& (dkiLn$tPQI .߳3>]3:lm @;Y3_M &e.c'p b'۬;qvR,mx;Ļ)^N5R⵹ж)Q-rh KΪrM jy4u7{ M71j[,\gtS,HnPTAW>p<Pa/)/}R jxXG*<#^h2#Smٰ߻v Ma25rUƙRX\ijJ`R(mVQ(s,^OmB"Oj 5]=2h6FIޗXN~.%&q RrI18d^]vpn3uu3l:"Yb԰B+YrPC֌aK5:Md`AsV=[Rf.PlGN>`Q wcD݉wB>Kh Nƹ%6[AqSF.< ӳ9;XS靥KOZĚʓox95rVZޖPKN{z2 L&<g.l(b+mvH:^TWm}0W!Mzr2^:2:{´QI1ruic8w+ &v2oIt/M,'d즇) C'xC;xŭR}Y^kΎ5gJQESSfMJȫ|V>pQ-^qvFmϨ&h_=ge՜Y_gmdT sjds–-ʩ!7e0\[taN]IJ٬ԒUԯ)?R#=?VR4~a*a6?pBYvY]ys;g l,g4,M`WRF^B֝h3%&Q|I4BVg)IwU! H䱄g%m=wJW.7v:(Z׺-߳&ǻ) TD7e2Gr769=Ξ̆+!R-ihG wx%WT. dNvjTx_RHߨh&NɌjmEsm6nm))E5YiЄם۟S#up֏m/ͭڻLǢL {jf{ZǬxfsj A =! ,5r 6oi̶$Y)M܄}USo- b'1acr77OW.KAV赯fHx cμY7@5q/WC[lOֽ8ֵ)O&fT ,GﱓЃqD$o YW5eݛ8ؙj((c0T34Ug.߳{孹4OrJq +6*0% j23<VWx,pj3X5SJe}壾x!8;9)~k쳵X#MfPjI5;)I.OKbg%gR\ȥN*9{3&4au' ^ s Eg5[hx)vOBJzݮN.b']TOS2SRlHd&+XlɆ;[mS:zæpl;7Q1"hϲG4  ptdQj0Yu7*a 6ۼ}Y Ҹz5E;eI:+@çuf}xIأ&?N* /zlf6ȇ̈́ţr_M0a]pM&vb']q_9E_3L#jф,N.;=&p3;ћ;;b'cBxG1)N v}E$ow% FW02#a42 ͯlPKqSC9gE218\7F&wO򣊢R\w/1ZTaN`GB Y '…''v`!Xw2ao EHXQ^|| ֝ &RC|Є7jEWi^wAVq,v ȧ hò>vb=Kx>;X ֝}d:DOBWؕu&$ZaUޢ蕴x'Y6;ͬ3U=DCn$tP+b>:tBGN; v}AbxD7xnLRy wÏu9+s: |;dE~1N-ᦟD&[\D g5!4GqݣvT'Ն 9z6[w\|8zEzj.ἻNM^jr*eg1mYE;g!rNBtd"z"U?-Q,q%N b'їg)Gઈ.UzNR4 s+NBl$f7lbX6\87{E+S\,C^"`6LsIx%F4$v^%]p ({4qV&Ap5Գͺoe ~WoWЄʺG\w\ub;0mC:@_; v}A ƱRKD6'z3”YÄv96FPNG  IHDR @gAMA pHYs.> IDATx]8`|j6e5}1o$يsS2  TjƍAׯ\EϏk޾EGp4>jߟ2X?EڋE((=ŭ(;xIr<AKuX_Qԏڋj6;nn柲T% .Ȕ\ThFcfjٶveb#7p}v53A{%B;Mm FAՃpJ+PlLퟶЪDžD!Q$U-u}^)U`5깑P(~>sqQh ZՃFZ|âS ft͜+HidފZ:֮rZJbE\~-^-C(>݊E=US%/_jW2Hc9J[4eLEwt-vWngά lgWEw~Ѻlqʍ=t"]ѡ [u]ZB\8U+k~=([CZS|Pܞۏ~(OjJMLTVpFrAFNJh"(x.Z2[_ګ]c(vs! [fU:3R]uuf=lǯsKK׹*S5\*/$I-^Qz#;xzkj[w"0Y5>kX&gbKhzϐTʻ]m[_'qFw5Ƨrk sG/ . z@Oh >Ԣ(~_)^˻ hߕ[ޘIƭ-#pB]Nk)KUZEE\~_G򼤌[;1Ka\.Y矲T]KOGt+>GMb{Lgj-~uuX^8`$@f,XEx^aI'0pMWWX~Q`Un[ Ui`иrdRgFyk-i v.2YUEZ4T=h&oY:Z+*)4UQU]\Y֍>Fw ۟2eU.[Z pfIVzzWf̹[l"(2EyZs93Ɣo"Lʍ]1\FiscΘ1X WeX6+v]M ¢%"qyaV+A5t6k2^Z۹wB87>"Ur]lųek[`b"E-em4,*kjЅ?pu˕uԔҺ^g)? ]3b9)l4 KTxz]UNoO%G}kO+LL~t&;k)ek>ܫ,#2Gpv{C ' .8R!]>ضjjBBp!~r)]m+vZx종tN …Y"lt}U~[woӵ;-Zi]8'>]?7 LEX)w?hKy7 >]G/^.nOyUYl6hGrV7br 7EsƬBEʑ*HOlt~o>cV(.C ^?->v \.__?&:GQ\: L\ #:ѣ |dCېXr1RH,bKѱ)R>tyQ/Ϗo_ʇ}y6Ge+ӭcqmʖܧ`ս}ykLI |z)'gTvxE5zGW?[хnCoɕ#K!Rn*dY?^FO׉1}O/e\z=.ƪ̦X_˙#)?s kQEqA[5ƚ)*.ҵui&Fҵ^l#Uy\^&>5z7є`.U2׆^#ri˨GWEQL_gxP{}_FTLB\8Eׅ1VA#0RN#ZH#Q~e y(.brVkZWХQ5^1V}zFtE>HnbUw5}x`=+dj' ~ 꿎N\<ftX/dP@TbA&vT4TEYZ89?ՃcJcWjϺ,_QT-]3ZUd/EWV{ V6U p\E3G{{)N)ȆO CGbGnC\%*rD!E ݞUGpR|YG˧Q˧_g Kjd54 _A*W_δP3.ţx-Ozva.®X*FRLcb=q d>1**mҰc+y=;n}]1VˍdV[#kF?7jzzoURYnE 2f EQ|kbUEH?^>~qy$ n*<R-_6jJfScQ,䍱r5}W4O_j@԰_qU})F5ߕz:Jlya5bT{cE]GzX>]<.{歗p).q)Zبb0-u*|\^H=QV~Ľ71\.ޏ)\̇$kgyWEQܾݪA1M#!RUc~h=ƪGWՃ^k.or?}<g㿷RT_.jJ[#Od<}pT͈+BFLlO.*jb E.)iJ UTcUόX7*q_ũFב]d~~rG(E8+uϯE40wGh Ҍ.$2Oƫ]^}\`Ju~f>CD=wUNE6Ym0Pi&,~XJ 7 V7:3?C_+~oh]E(*eֽ/s](A[]TUT9}hd]tT>HbY 8şz.~ppBM5fu[A h3XY|Bf-|;ZnY N!~B,z [N!Bf-\ 7RȬoY ?X!@.=rm,N*L٘ʁV?<3ݱS={aylWJ6t5<:f#Nt;bά=o6wH,Tpf-wy]Cy0 uy]E/M{y/9Ne;k6R\!yp4s\78,-REyw-N?xƺw[}2]X/$p @!q8؅!euL|U+l 7%%7fUZ}#)X>|E|@+қ@B^㋶",mh#տaV`a`/|CXBzcR֢hr/q*-}dL&EDRl޺"ņisAؠ$Y丫g<`_ӿW3;,e zt9=uo[ƌK$ei|ɤFCSD"r7~o]x-%^y#=*$*~~L~L 6/v_>{^Teu0rw5"4T8۷[coۗp'43X_mw]OjJcƻӫ[;ٻO.†4X5tkL:l,Z;p`2XU Q^*x]X+Z|J8i.B8E?\㫊"*ʄ8/x(m 2>CbgԘ.—O/GfīG^94B??-[#`=(e5.(;+90-11yC9ib|=pa밧pF_d*w!]ugX^{zEyLCJx1zٔǤ5O Bh'e؏ 2c jb%hX!M 3@f,̌(G`3 į+?[ڠ6cͱ޽#v,ܖ-Uo^g;oSZ/я؁ ~z2G3Vǡ*.Z뀬_`2!n]g;+{0k>Ȫmh>S"IhnAVۿ>"Cj4FwJ7I9Vl9ZQ]XŸa?Bb[W]KjJ g緿OspJdEHXZﲍڧP+UBG2T]֘'R˖w ؎2XSeB_ePhOo9"_{u~^1OַF5%1L82ӫhͽn0cCw;rz-_n\ɩcqsפSp\̌Uڵjt~ oq)A8`zeToCaZx-[JIYm--__)cF_Xf0 sMEغR9S2ZH-Yhݨ렍A·6lγ+\)6}~A[oϯ|:gƱD$*U3HMmw;N 2]gq9' 3@f,X 2`d&L 3@f#햷18z(O/34d={;,X 2`d&L 3@f,X5xO/y1kln0!*Wt]}ǡ}y%d w1݄f BnF>J2Ƚ1WB"TӫV78uvs"K)=Hj욬l4ؔ*81]/^Uh# `-ߑWo'AWm|1X#6[ac$nnS!ՀX+OMy2`d&la < بm!Bl{WXv}EЫ(6m}.BX 2`d&L 3h t;\}z}ĉ]{ozi2#HW-ۄ9[:KX:8T`yZEZ?9zNN:[WlXfbL~ߔgkjG?'a> *12&9s?s/'VSl,[7ktU2+wշXϊ52d]גX/tɾ'v]!]-6tJŬ=]符Ȩ;5{U]0ҮԵtUz햍Ki|U'^E)~]j\9᧼\=:]b1>nobѶNgoM7kXږO߬(LκK3aU VJ*14's1"X$'ZfHt\,:o$t VQ|`F7M"{ĝlIAF&)|tEb)~#v ۖgܫ]Fފ/-yAۈTwN ڥ{w·얣uݭZtG` j\z'~_:3 ]<>n2[3w˃FәJ)_`"23 3c2L 3,d2L 3,d2o޾-ppsQ/^Ƭ l1X46͝2 8wd.Bd2lw6\=KH`uiFceZ5:]>G,v0<Masc?\4a1pj|kk}vel1U硿K8%)`đIuo_6'ef[pJ:R`۷[bc_EXgUY)h[k5glY=˃FlKcc+mXs` X2X΄bEH:Ϭg-C{\ܕf]Mtb7m˧}=s6$wxsO=ZUFHʓc9۔w6/י X\1T=Zۆv%IWx9?ݗ#˖]念2j@ÑH7Nm] s WSM/KmcR/BrKZ\9!9Ķ-yƘ.쎯uxG4~ VZ;=s_o9]UEEډrXShH?W4欗UWe#g)qcx =p#^T^E4QhVt V}v 5wjE2CCƯaQ]A96/ y[^I2]y(m wܲ~\y+[e0ݔZqIw3hVS=a[u_k=IDATǾ2Q'ei.º#q8q~Ľ?ڼT"٦! :/"΅asEJ];<u#1]GkQݏ8Z8wE'etL;bIu'%wM\c`gv9,=K` }y[ ;'uR{GݾnsqnY;ʷO^>ˣ̹*2Xg%+[2w]x@f @f2X`d&`h˧-'׵ v y=[{;iߵ.B`V.B`V` ֩].Ȼǣ!=U`YBWi%TdiO}-ԒR]3&E"o3t !ްV۪S-ӵu[ޣkbX6%Y)Uۤh2^HSH&]k2v]2X[&˫BSo8-Y VH]em:1誘?(t!0ɔ`e6`5 ~/*2.:xo&#%a`XF*[ _A6Tk $0b(cBҦn"Z-%Y&ĖplU7s*v]wkΞZ%:}/eL$Y0Rf RNw]iJA%Z Gcym[;/5ƗIs -EJڿ[֖+ڌAzd? ,$`RrdOA*~huaQg:r^jRȲ6c1="ߝ(9+# 6 Ex*3qYo;~x$8"^Qz3VLH񲢔&uКo|//[a\MBE8'z"QQW`]jc.^vjcG#PW]]Ķm.ºF~,=93ж-eB[hm5+0աk6bcG"&F6yFm# qᔴhA̝j<3۔0R*݌%6@`nY2Xs=]Hk'ӣB4Cf.v\a#iyf[KN=a^JHm&,gwUq .n3H+$8}ŜymB \^>I+$8 +f誐:-i|Vtv[ `X[$ϊ< jwU!uNrWlsdB`/v] 0ɬj i+=unM]$uc%l||%=KL2_2_2X` r"8O/io|%ϝ`m׵ ߳eRb,v+wU Lr V6`W i2X!֦]XkH snOWս7Wbt-2%V*qޢzC&zUbRfj|oKR^@ VhtmC9GMהŎ+ӬN(kOiR5gbK+ #>xEC1HJ9?H VH0?)yzÝF1`6cD2XyaDTvtZfQUbfkjj_W=&kg] "rINV.xG j@e!NbS]Z5ל]-W4e ms^[8L V|%;UI~/AYBu8 k]BbCs"҆*"xdp2X`UQ!Ѹ^h+w,GbuFsG)mhsJ S*^f/`"S=K$2cZ,TS,dw VJtfWFכm-\4: ̵k|pZ`"bPjN,ܥlkI'?NցPj3fp :Ҥޛ?Wuٔ:)p}XK7Gk)7 )aGp˔ƌko H%{ϝP겝7ZtE]3$M ֧5ؕКSWjڼAÛ||0񹈽˶nG0ݦ bmjfh*xXDTbx @I2X)-cvq4>l5nȼ V|t)v3,HWCSZ_vuL75|mK9 ,+^"L 3@f,X 2`d ~)$w0o_,̆3poU}RjbγgSޯ곛Bx Xy|' 3]קkקk_[>Tk2%%IkԈpؘ؟j5ZA{u`߾5:eKナn.{XȮ2XADRY{TE0]W~/]W!:gVO$t7n,(;RJEVEW} ,`"i}_kduڵ^֔H+^Z:lN?46K'2V |v Ov`:*>NuBbS]#޺"ņaVM"{NzN]cX.;`>qbvjHOe'n=gP&y r<4a!oʕ8lз_:CȪ{N1AZ+cc_"Wvua8nkx-u94si#Ϸ1ݪQj@ƣꊮ1X= m_Ek5`1Y3K7N3ꊋ"U} 0L3A,] `M S=%]IJ]@SZ)E+6`1Y3)הH!no\7`1Y3)4dGQ`:ء8}IENDB`n%6-PHRhbwqvPNG  IHDR @gAMA pHYs.> IDATx_rF7`*e[ya'oV4,c1t4HJ<I~^PoUU=poUUǿ?:^ص,~~蟪_營U?~h~QEЮn'yoy/٪Hfj~[FխSZ8fWey^Gq5 :Z`I,i!{,,rD\҈Cr5Y /Vmfp88㉖Dd< {!֗/U򥪞gꝩiхM5{gm y;];G?%6W?~n2tkzߧ(gU}_uT_n9Gʣm6KG!n nbHbI_U"{:Fݤ6EU愭x굪_9/]plm 3&].2"ZꥈF_ Dž^T_T_suk/Uu|oK?X{:frf?UIXUU/Vڣ|ʱrz:sȝظp~\jy2`=\l7?&DOHj+j5{M7&m¾mE-L#w1)?4+mnDST_/o1kri5;SّCT]/XzNZUΌ=7K" ֗'S6݄}6Cw)ZgU}5WR/+_Xuavdzl).Uϴ^LWj&gЭrIP 0@aVsÝJ7?fŒ.5]bf7UdkrͲ]X85^DyȺLC;EH{=tn[d>[p]`C"lnpiR5B0i~X^dgC$1v%fKuvT;ݱ%(4]덪]y M}Y|qh7ywVYZjy/̐U`% ѣ6{MuW.u47feЌvgIN|б Fmj3POBb9Krz7ۖzoDI7vnl-Mg8vz뭰dC-!¦nH݁-岙{' 59Eس?w4IIpߗ=>|73Xba+S{!ͯ_37on.OϱuҏYmsm.h$Suċіs-1~* C!7}ۮZOeށOK9뵪SM(ZC#}뵪>nM** fRAndh1d\My=4UYR <9/Sz`?[![|RkUĤjm Ojq5ۼK')N-t*Gvs6o߇ޙկvopov#j0r+(HTWfWYb՗iTj.Okkكz6[JS?ϫ5r33`=K/u>ֽ_Wp?3 蟡>v7-cBqt^]PF&4CU쪨l95-z^5Jkꪈf۝-2Φ*UH(}06cng k'fF_,Wȟ~I6_}RXc-<34kdR4Tm6ZXTEkaS5sNnؼ\XvOV*Sfnx; }IunY8ޠ jߺjo㷽w|ʝ)y!&X˯hE&ndM= fyS<(Z`<=vg-֮ůu̳>9irJMB>4Z܈ o~UB]]CZ}\paħo8E8TK:CH#+%Xa3RDR0(j\y3"<=>h|gS)Q{CRٳGgnMVcWw~ՌyWa.0d#a5x׵ V[! Q_&Qͯk]mCWj)h65}2mQ5Vyt^aN^~}]a9|\Mm!=skIuUĒ3e%F~fX_$[Z]5Fk輫j0|J?~6puEN|`K<%G_p&{n!5|j^5 ʟG/hva4Ȅ9Xu]]u=@)%k*kuaAy]˷Kk6Jj_ מP5c =a5HXKVyw-:hM:߷ժkFܷj4»,oDu5}28If*Y }M/Ƕٍ$)X:l)rQjhG+$tfIX'}t%j7C ?Fr7 nZ~2qɟZѽz]U3.B棓0ݕ2嗸{^Mk(S5sfq8XS9[xH*jNX-.hC9s|H/̖8X#6FVm7ȪoU?X#@#v-oUN#6nidƷȪ䓎'9s4?"N]̹! ,{gnmkpK<X',h 7X`1V݇wꪪU Fqw6XqQE mV'9lznsP9XTUU=~֩7Xeu45ۛV`86ްǧٛO"n`W:W i8ImtG+3ܤft+m877>[u{onh_7Cۦ趫;a$n{K5{+t!BhUYi<7iNN73jlة1tCF;T'蒡Mf$ѐ&l<=^-4SpL1RNniHcNKy iIkdtvGXԴ9XŻϬuֳxqNYb4ч6` ɾynNd&6I75Y'Ix"xp9+,=E3Itdhy!xe&1! =R؎+?fd?I4ȑiʎR*E^<e,>zþ>=vWÖE_Fڅݕ7C.J콴Y3gz5`V/zO]mjfw!E?z]NBiܥG45cXÍo}?,,g~!ʲ_^_{#^-|w7k嬹ҟ`EOIlî5׽G!#Is©'93WD[?W$=v` uogpFK0p$7}iUCkv߄TUb57%4mW;j/߁E:jU V6TfOScV=VL=c.7xum Xw?F[EΛnu0kh5i*^0F% ѭoA'qFݻ5ܨJ茶='dsՋj'|]=լto:)s0'MW%6SDa;7ȷoU k,@ZRcͼ־W^]8cp%\P;^vT;}h ~&9.-%XC‚Uw^ʒyh/XW/*Ɍ6`/LeК!8{jkޤh>mg޶]ۑn;!%;LеPΉE(%ܨ(q{Vn衩eJػ^w;-ֈ™47:E[N=.\IS]-$XUk, /aE5un/qqIx%3k٫хzoBU-! CPyx3h#@'XMu+z!g> sF Z)"j GR蔯r8WMuʩ/|<[{_5PWj4^WTE^hy`"?K'z'v`u%V4뺣"#W>Ym!ꞏ띛˜Z ooFpQ"X+,NAl6&1,VfXR }O#Jɿy릓7}Klfёow{pB%6j  (s `&(LP 0 @a,$XI o5^oydZX%jUU2uCI6`Xs `&X`kt ,`|0 @a,$XI `&(LP~ɷqg86+y|z|>fkνNe9kzmٕʠ%Xm%3XY6oeQ6j XFIl.X,t5 Wc7yZ:S/ZuⲶIXN6`X ׿^6ؾr ͈$Sx|Y 2E{o`6`\W#wG^ݐֵK,5zy6`p9s\^|9 nD$X= 8zpoov[%6y|zGȑ#vJŊ+.][Q]/Nk,bK:A:﷩imt!L^"wv]c5޿Ouv1>N¦WH,1~aC+,K|*Jz:׌.heNU W VV5DRw=C9: 镇*L>:'IB+(^z+S'ޤO>`1U$X'Xf fWQv/4Zm 31.+`粄fL V]/ev6[KBC܅&XO-*7Zbz V pW..k4 % )>YU괺Wj hd9rX+d D,^^,`$X!+`| XX$*Z^;R`.rkR`." ,rk9Q`Wײ 4 VH," S/ Q'LF"|l~rbe`5k6|ǧIz\ (g"vUUoKգcc-HsoK0%gV '[zC.'b.-`2IDAT kGjj&n/9]{pc'LF^)GA9MfrU'/J^pzS^C5s R1e`p`I>cw}NM쎺gOzhݹVIUd/"`eY8QH5:4` o&:*9 ?ouݦ"-e[`=ʙot&ymku❞U`d`:zk"P;9Clzeg-':{UP8Rw+IN`5;'`IN`}ξ 3OՅ3slC;3p Ju+==B0FukӞj7~@$XgOnL8HΞ`%f2u$u/3i3sy̰^3F+1 IΞ`%f2 IZ8QHyi9X-8i@> NDW7~`$XgO*~vgG%<$:uױ{Wn`IVQԝ 4 ֩\G$X,0 ֩Z .tz.ڎyp$'Xj٧jwYp$XNum)@uKhI$X:w_jFuݗ $Xݗ}[3`Iu٬ `I~kξu]`$XN73K*˙  k72l z}3`I$X,0  (L% `I$X,0  (L% `I$X,0  (L% `I$X,0 a݅a+Du.iy$XMHZ@ p#'XiUaB{0s}`;M`eI`єb+':r܅K+J_$&Xuܬ(  (Lu   (LukBlp^GGs(\sd&T VxѺs?zҡLgv4ZitK#\8Kukʂ̎zLS@k.4 `=`=NjgLn[ LPZ31jݑ`=J:ʟ.Z3 #=jВ`=ڵ$HT6Gr'XgtԞV~1YDGI$X}ݩQ3΂u[hx&ІPIN` U9sRS'3 F{z4-IHBH$Xꀎ Au+5#H`I$X,0  (L% }5oz7- V㌭~mvkKGFŐF6`Sp4Vbgfё+h$X,0  (L% `I$X,0 1eG{?K,L,3`I"хZ*2 VUI$X@ac&XO20Gu=KCݟDOZiG`w$XN5H`U!V-uV%`EL`@ VUUWCuylpr, P p{, PK5xgwi*Bb|sf/ߣ9ֱ[tM, ыF/CؼCއ^C]G Vݹ{)VŻ(%G=F ͹v [}Y :uU [C.rF kիQ2;ZG5ӶZW' k..fzК"&rzkAu6ōQb͜ `7;_+gbfl2uFה` V\ UՉdf Km=$XM¢1#$:)ZΚG3ޯ쉮Gs{^3`$X{`7ھk`p, PK5xS?3Ϡ%U.L/m@%W3h i%up'Xm2H$XXBu{yRW13 +n+zĬ"}IN`UɸhFHIΛ` \[1)$XgO*_D'WƔJ VXSԣ֢V%`I$XMH$X@a'X.aIN`^Au (2xǡ7ܓlE承 ˠDvcLMF[2 &X#W`%(LPkJ L `&..$FW-Ohy蟉}t`9^`[%ڑ<\`fh w$US݌ĒY>?e(}2LdTMԭz+O &:dQ]Hhl晫e jṶDu՝4Zw!)<HfJN2W+wphT9K}41+kNHm(EX (N5ʒ{_Hlf]x斉bkLs ޒnSkU !Ew*`_$X3%f.[]]]>rĐ{hz#m`ڌs!`$Xg2e$$XI?.]9KoNZ89{y{^9$X3w3zi˅֢F'<ѽkɞybK#L ltlndf̎[JZ 6`$XIf 'tgD>ׁ[5G{?&gOtPGHvfUȌbp:_zj `:v}3uS%$C.PS!ISz 68i+<Խ<~hIbGݥ0:6L{u@Gp_ݻt%(L5YUq&3_CҧF]y_~Y3G9InmhVx{,nmgRSS"$9&Ҹv& - vs z##$XI2:jhn4UzG÷ԨkV9DIAׁ9XCȟ~h;3;r`r V5  J5ScT j(o{+m>lQ•{\Kr:ʯ*rR"5~GIH~q5PѨfC] -Uotmը1l 0 @a,$XVҌstz{YzMJ,nFcϤO~ӕ` գ+\׹stВnw Wj+8VC+,f*٩cK}U[&z}l3YiJB=peܪop{;vT N&++#z3lV)AC ӍLy[zRɌ= #= &> 3rRY&Su۟4+lf-, M%2,=M'XugT\[V`(LP`]]ʎدn}ǖϕֻ[nI\hm }7na@a ,X) S`(LP 0@ak ާ[ r ,7X,~_8˷]}59ϞWyn p33*SIz|z^;cw%M;]ynp?**U]ޒr#֑C^iD e oN;EX!*$TWr p<]݇l~n[3N#=}{/M .izc/7 U=i_`Ew*ܻ4Cn趫%^jUNo5Ԭnue3Vv*] .5~'p إS K#zt|$ܗbS*\$w) "sDYݙ܆[yn,Z]StӎG=OWn6nGg][7 UW{8˷]~k7s==3~ E;׫S#U e CJuYty̼.jN/fγgU>' ,؄= k{IENDB`nJHfҜ[?œ~PNG  IHDRvgAMA pHYs.> IDATx흿$癋gq;o38ck[ Գϸ'`d>8ȫ1 =8 O4sPyL"kxMo=y~gB?ӻ?3a /US\Z 凫8޿{|nWwo^qӨ,c7u* CUL+>%Zq$~6}wdmk4Z&_}$)һ6$NgZPǩ%4'c_J*ӏxg/?X!?||~W~@?=l* zҕ9=6\3RY?ΏNYYavXi_O_ ?!/?(+i_|o׈Aӧ7'B\ 23uA‰l7d"Eb8oă=:+N+knie5 UAZY:Lf_OBoJYVee_|~< czUw(6os[:ғQo^7)d즽T]ig M4'$8}D4\R, F|W9c7_Bd\qOb~?tx˦B?&Q$gQ#TafEq u>̏da <~7mc^zt,>#W3#" ~d'Sv*__E7`sMerKqo[By|w}A7Ω,9)A^mWc lS1,?2.+]S4cYκߥIs=4l3ؐO3pQnɬ \ԈRUdvY5E[2 ܇ctЯ5DʑE>S_9lTGJ*HKKh.E 秵5 ?XX~FsUi(c[%=j}C}5 X 3ҋjw'`b"ExpZK{9TW}W/t9 X0@vwziyDoq=hYDr,Sj8|3z=04-\@F0Q ! psT>mH@4_ZJ*.N'g~uH^ՅgX{,兾I"n!d5^4ݞ00&NWq1Ǐo\ s94%>(:#4hJ$cpf]ǰZU"D*})wrOu~`2~omtzu{ʔTd',%^yIZ\(.!:qw%DžP_cD{?NQOw81NK/e΋ d3W eɒr; !>i>+Cz'Ll-4*;q'>@rQ!,t~zBLQoBog_s~\t:.UO//x_Í*)ΏYWB*}=_SZ V&OWOž=9ΘuϏէ>oXse:czܱ'I2n ٷWF3Bhkȉ:KvF#3Z&4+heIG6<ϋWjRX*xz<_]B/6F؊pb:=S;Mz*0IXV_݅=?9|ˁps|%VX-nKa_iP=rhhT?9x_uD%ˎ?= QeizαVYAypFU_[Km_xU~~rgY?¾ 5ì]8 !N*PbI\V?nGYYYg[h,(:3t[jIҭ,s@V:1))!UÌF^2̀DȣF}is9{ouU R燅AXeakie˶D}|f>~19¨զ^u+K#V+j]FXj%Gȟ1,gZٷS/ݧ;:/3)kG"u5`d,]pW~iTP4"ɖSRR±ǏrBencN+T]+a+WJ< 0m?ݔgd5n^}f_,;o9WCic}0N/V]tո:)JZÆE!-nI 9pF]XcIn_M]()ݸR=.nH|bkEO R5?&WBE`/7J< ,ehRh& a t=%u|ZZn6AwCkli)^XX)42P}sƘ"aea_a}/}u.&ZMʯRV9*c+YlH㮗^s!l5+_&yAΨ1'qدME +nOZ(C~8+##(/-qjqELi},S¾^l55 Φ}`SP 3 yY3uc^/v5&wsVZ=ojKL'¾}ƭs.^ KY׺KS!;攦]r^,xFju;9:8k5شA"GZ,1 }I*aHOk_A;Ęo>Y_S ̔c4~X"k^lLBb1Ů{El&]{D?"Х ooa o6GJl97MbQrY_y 6^Ǭtr="mjɽD!cF^ͫ-!-tLɐju]Hqa J 2eumvȉ6[*dE\0q#WE{vͣ O여CW&v[oNiuhAC02&6oiiuZiYZVZVHK:D`b3VieiuZsyY0:@ KX2;0ftP!α}SLQNرXb/R\=arNP]l ,nh%unxyBP+)`*Itg #'g<ܺSU2ϊc~ ;˻;!`VNDfu gkbV03/Ck- խ Zr aid_A%Q,qqAL_MVvGaJaYhdv,+kl`\ac Z7Jڅ#*}.e\,lsQ9gNY Y ַvsRm蟍30N%EUY/6ƃ3 EekӴt(lڴuahyvnhƸy S8a}CiR*A:+*H$8 g~e)7xQù]?qY,E)Mٴd2dzJ8nT11+߸nA}OxNtWx mqY~y ۯ?$(Z:#Uu];rRf 3b:/Uw}Cs\7"X([BQ7E>J!'ѿ8RFwoזx5spMe/#4߼i:~<^ڶ\n8fuy - ˺l l\.\{~<ˉո|dE|6iPDu해@U6pr:\}gD@pM+J(,Н LWF<Үi]oi|;\jIy`bŷ֞8UG"qY4ˑ:0,!n8Y?>4 tO@,ְ@c_̃e~ۿ֙fOZ\y[urF:wɫ_͙_ {@a/(++o2NEuΊ21X[G u_Vcxu?DG`lqDz52y+CP,gX+ن"X`[o^$e =LrQ|hXeV$LXdPYk-DsxX ">&I/ʅUGn(&v3`eJK"1eqb(M=*M mX諜ȉb0s2sEY =.ff<]אP;4ez>*in49/,|igTc@SZbbL6QL 1:af?B2{bksKV/gJJ%˹>O|skf!5Qy aL|GHXd}T\BP 7?kEO iA/9I|׎_?Z؈}eڻӝMmh--@4u hJ{ϗŧ;!6e\%-b[СIiLu m%D BZhEULrfuY4NۣZpGWiՠ"e-Ai0E#XJ^lhSW V +2'} 7N%B[BRmez>?]]n3 pO"^~%VpĵUD}sLuragz i\u*m- m7,F:nMxgDݘ.tgFh}JҪsdjztgWVד!XĄM+Yp:~Y4\Rq~F#ED&-0JUi_1@"A{rXgE1^s!A4>s˪ uA$40 0ZTuoSFhP-IW[I&6nO^t qFKk1K~&"ɐ\@d_^:XI9psxu^}Mˈ8Gգ[H#j%3e qE88Iz1$\ s`WSs{AIT#taO.X+^m YT~- kq(FTLɂ.%Bt}duE+#db}mEWC>}^lR v Ѥ)e Z[uhW/8Z0 @|6xSe@T|S}#jC_:[9H =܂XX"4MĦNW»Sڡ9p0,%bwwbVԶ=ߛe]zEu`яO0Jb[)Sb=ue}^%|b_D趺^*)?Ы+WBbIfsAFr:):ŦyS|F0.Oeim vvZ\/An:YٶHؼ4bxwė<ꜵok.hjW˽WB>ͯ(n!_4WjOGO_o⣺^=b,( [}+љߐy ܺ}X4T}Yne/"h:Iב 1ngT_K0=t&䬢<F`^l6n\b癙/V} 5<U1?!_,X%-3&}\Jqݓ놬2 2j!=xm . ?m!!qL$Dʡ oH!zbWPV wT2 ZiCƵX! h 噁Ҡ>l:#K6E}%ؤ4+UaBiN؋8SA,e5pgdjH%?# @klkjtf96׷q`-4D֨^$Α󪃊5rσ~ՋR_tf:54|,v|va>hQ*WLDkğF3A϶cq.w_خ^5b08ȴ\]"aQNjzu8G Ɩo!2>5*N3)G L9ĉb9R\bGϥAf5g _}뫸X'R9`tMdNj+0PĠd3Vi;y]k}2vbIoOvѿ,#VzG8.E"s't-D4p/X9u(3YG)ٝoٹc-aQ Q8eW{`^FmT*5.;{ޤdgnIdܿIIX7{j,D5Y>o튆Rr br@O.ny%X!/Vd7`:~9T0~8vcW'o|dQT @^k܈7{lW ;8^fK,9O}b->Rߝ-p:b`$w\,'5 8} ; %;5X{Oi:C&| EX s;ΔNi=8u}*6#.{#qw8݊ b]ZY˿nSi5-<m=ɧ;t~aFX[eU'9tD-_M+V6v2cy,ƷLvtȮjy+*{ٓ E&պk j42_B;@%[-Sp< sb>g q2!Of4[co$í7$Nʉ䈷!3JxIiy[2:oh|9s )čᴂ4M1$0l(_l/6JgCc@q+K㪗ɍl7@ع|#;فY(tL*MIkA=Q󡌵<ǏB{6%ߎNAVá ?LZY>"L"Vmb929b9uNTe]jLp+__笓d3%4a6,I 1:[2$],}gH'ҷUV/6MEd۠ҘwR^+*g53B.&g,ΧG=uxNb՞wj¯,o ] (b86u>oXD)l ?}(K7C4z@yA U)]+G;B4dWY<ٓ/vQ@b|5θMъS,(VTo;oj s(w Zq3(cuhC) +Ns+K7!J[,c=Xf,6{+5pu3BRԫ m\,6zuA,z/tM6;?b x-.Xjdž~c/ʖVӉ$zϧ^,o8/:D},Fރ ^*cVyNEqW-o-M /6) )"LPߋk$2wb0Jۄ·-\_؉&Ma cw{uзOoG$O_Ąn #ytŞJ'$TqYhڹczWuUZfI_[|eݝ'Ml\Ӊ0mdB>Xzو(]A8S_EnM-uSCf+tt 9 ѽ vwUl2Mle&WgM5o.r&URvH9wнъbj^lpz[ty{|1dםL60>WG2=ƽAT$8O-t/F /vX,[+a%QіҺ BzXV3 )jCOܹPעZw܅ѹ]>X9)ڒmD{SZь梭` "UhtCVV'hX[oQ BK; Bo^lC N 3Ex: jY^={lxv}VC! !oMt/θ^$hw2e1o#Tv+Zc\yz+H\[|Q'˂D:^:8 +,YVӰz xD+V[^B /6) 2F ξLП @Ql_CƊMW R= YqaG (ɠ{&hz}X\A+ૻt+}{:F0r4IaF{Y E aaAmDCD,v|]4%e]KbmD3ٷhm8rYro_!3n,61_lm˵#D&  Acu&so&)h#-a%+_ ]:0bu+{ɷ״psV'+)nQg=..`,2#ZPYCFXl|>@qpq"򳩫ºumz'_mV 02y] iJ;s.3azv%Ҟhi`E1qww,'DvZY]&#\܌>-Ҕhv5zbp|U;EnԘ(DbeJ҂<85h![,69X:j|XةG%&Fi*D$1{@QJ%/ \ C\ۢ!>4s5O`PEq?(CAG07|M\Le@>*3h,|1~+*NQ`Jx(&#J)h ǤS+ZPeXzn"4@+Y2S|YݸXp'FێUNO5%/ ~b1>E `F}uC#ton, /=%b9{~)WW8N{2u6^ 5/6ۏlLa_#Ê┊}_1[ FʼnA}F!F^,Xx/0{SHJv"'+'ë]יowV'a<}"FT הvY'rnVߺo 5/0zU³.7en.xԋ5Ic- 1G /0zq)367'ͫ]b#ЛKH^'kۦ, K/0yYOh_\>|]b#ЛbeE^p ޼ lksˋت8AXXJ]X7`2|$g"/F<3QR jL57XaYAF^,Xx V^,`ł xcb#0;\[$\j y'g~ _1:/0C{՘,jVox݋lQzXb#/X+/0b/vF`t/vʔ/s~ܹZ)YP>޳ ^T&_l]USÉcF`\/վJJHp/ۈLcF`P/ִH9kvH?/x(N|P|<\,V/yc UmbGwC$E/0{-jVox V^,`ł x`F^,ŮXN|Ukk eMVn|5|Ë^T&_,_!~Px^e*-PF`\/վJ֧el1b#0kW3_v%t‹^ogsBJq4/0ye:iQmeFiF7/v|bF*ݖXXYF7/6J\\[a~91Zb#0+ 4Nc(.ə&8èA-WX/ /0C{՘,jVoy3q|R*E8c]3]7(K /6v'&ԋ匊[@,(+V(/.ԷLô¾|e|jU:Daq∭]2z(Cb_dPsbiSbulk qcf>bKoL!lau Ac}9ŶL ?ȩ'-++'b/6H=&::7/|L|ҍ2rEJ7;>@(y䋭C2-z#}͋sڎ%PߋG/ֱv+T#őK /S-e Nc*3H_} ig듵]:+Vfwwh/a0`b]5,Rխ݊{ F`XlvnE/5)&(:[fW^lu][X_GHob;Wvx\MH!/yuk׈+@&IDATx݌ū[vXI7WBiŋEխ]S^@(xxukה58Zb%ȫ[v&А+kċutb;`uk׎ ӜuVvxJ+=Cw[M\IIA }]r+WnV_;Ϫtx_AL|7~_F52{9n XbL)==)1k/"(fn<*@Tbס8X*^l'v׻ ӕZ&ԋ,kbw;!f!c?AiwzGƼXi_Ϗ/zaew; z]xͱ%/OǗչ}XYYZYiwOOwk rgQ?O$8~wN=L|3]>?a"(Lߔ{~kWնjfgv;+Ҩ%w[1]c.lod(vWyv(gY7ŔUNnzn0yӾ*m'ST ۞ZzF:ubfzcj@}b0MGVDou5R,܋z{7߈NZ(׾VXL?(=q@Q2Xֶʾs;9T1<]Nf_ӭobem*˺嗈c{JV [G ܕF[OB2*>i4剓?uf_%2.M QЋѦكq ob>?z!3Ib{LN';>(|.l[˵Р42Z@H\Xl>{cMNSw&K׉H|&vMA:&^n6@߼(ƛ* EP lA,(V@onr"˳`-/K 2[狦`E0Q [Njl߬14p}QAnY99 ._GeR\9TbޣNyM? CXAXAɧG=eS‰h%u \7.( Gϔ}!>qoK4C *X)šHj^dOtGԟx'4~\)FTUٖͦ3Ϩ}WzMbA}6e0/N4^,!-V Q>B8;J矉6TOo^4 筣 X+qKv.Q%fHK CuA2CXՎOK> GePm@hs{!ʔFg7Ķv'Ojz_z$kCvKKΈ*v.J4Nubz{[P_⋛hS↣-G&_>wŮ AWא/r'}clN,`XNT.Ϯ{0a_Xtx,G1Nnր:u]hj/nbq+08CS'=!Tirjm  2&:}?}v (N=:4]IENDB`n,9Ql֬PNG  IHDR ;gAMA pHYsod IDATxݲ60lUNS;<1Vf#S4CK U]./,!x|tǟa/?}tK߿O뇿GnSi?L+p}>_/xs4*bfLzz}k6|]v^]ᴭ~GGwWwϱ~^?/<%OnW>\JfǧiߞND3__Q;!$<9yIaa6o%\%u~.LSS`Ps|Jt#P҈sԙ9FTZFnb{/~eCsvi&ӆtpC~ʒnU#ϕ啕I15yB1}Z"'N]eymS4W^OgItQ{CС#&S[]G>^4^% .#߲@tVt.Z?B0=ݽ-.Dk$5Lu7񶝩^&8TU|D pU;q*gY~jyX 6T5=L::\"NjYUʣ LnVU; gꯕLkU^mGH=)M3G"[-k(=0iz=%[O3x~SGW3=*hy"ty@Zq'o砖lNj,csa;>k5zJgC`V^϶<ΆԆsPKy?P U?4N]ז8Gxݝ>|C( pso2u:ؖZ08M)lJ-mOaz6Q۞ﱶdv.^z ҙmyp~[o7G,О6z*ٿiw7%B͂loIT ǎ!(ϯ5"WwV|_5"AzS% JR~r{X]aE>QL=onm]j|`2ǒp&S˹Y׳?r ˿ ê8 p1d)rΖͱqzمG-`ƤO0 eM.?&b'(Τ_ZE thwrܖIp3ns>j\;-~&z^sBS0*\oͶzڹܢ p%d@Z%XT1z26@& 4@&}N2 Pk// tB&7 +1&  04[GNGÅUrZ=(Z ]@2/z{d<S7B k]5@& WWXNo |u,o>؅ݛ5AMxVmK$Τ[s.^]j:JMPeLUJa3e@ȤSs'ySBSc^_[d)ak1LQpg6&U>Sg~+dpOd89\~f3L3K]P oz#N 0&LpY^x~ Ӽя¦Fgypť#ڹ|=w6S[zW2k>jngTןj`{C;ˣ,۰whz6capiyV9ȤSR*z6ǀ9Gd;p3V6ĿV]U=©ԪozZ{.~g/Nmӭ6]U83ߞQər[& Ѓ3qU 403FɮFigsf=5@& N1pPPjt겝o믕tnvFiKlL:s2sfj4菩֓igƴmgfѦv!o+`\dpOd$3 /EP(n PE& 2& I@d)4tJ& I@d)4tJ& I@d)4tJ& I@dЩa2x<`&CWL}>62 cTSka23AwWo%,Yf^pf/X.,h )tY23%K5!c`3eƀHsap->6&})ȫPc[&n+0Wwg5cs"_0PS R{!ky~u`&/Գ /_ٯ̽SI?&IQ& ,NI/&WN'(PtyL+ @+̤ӥ慫xlzvVǤ[ÆaU+dnQqϤ[_zsLU.+'+fg^8Zn^.)5c5-rU*U'j9azO=#Bʱt4VX*GFn𑗅 `nLeN#{&|]I%ɤS'I/'&NRJ'%|jy|,ټh嚙gUY>zm?h ?&GU =3HNvL89V oT>nUՓ)iv}[SqLU't3MٶgfҗTauˤ A78NysVz\ڭgC{a;%BL::iRXOǷdhgfѦv!o+Z_ Wݘt' nQC<鸻½ A& 2& :)^pvGIÅU6V?0 @a2y*d?=2՛);u 2>!:gL&8 ɤZ[GwneL:uZ;u)V&62:0>J̉T0;1ṲD6:6\;ox=KͤS7Z%6M4&_g~'5p7ݍI,u^Z =~&|]0Uzx*:~% 4t(˴v At%~lL:%,Ӭ#v[SY I!NJOj盭 l~oLԩqզOSIGW<+3~\ݝ|>_*6]^~=67#3~gd\!Ƥ9 BZoͶzڹclT{v% ?>tw怸h7ZILjdY>nhO*7gL:ß>['3bKG~0;dHЛ{ 0dXGG+ÅU,z(Z׷5g_^nkLKM.Ăz|&VsW-ycvEw6@&`VWXr0=vwU&v?ԝIRެ&jj4+͔m~3V29Ym::nzv%_~>8~iuLa3ytt>>.J~fz#L:l26o^ы?@hLzFUU p%dl~RV*H/Z϶Fn/Y2QrG96}mcR3uZ_ҒS0@& 4@&}3g6?0gR7@B>9L:5ZNYNZM(~65TiQЧ1?Wy1@&<,/Q&Q(5akηSunU;utEdm%B3eU$S&z2,\xP;\ %=vyl*_vJ 6OƤҳ nQr~raܻVzpܭﶿ\L:5pO2iL:%NɤS2iL:%NɤS2iL:%NɤS2iL:%NϤHUx8&2U|M-?Zto} l(wޘtNȷ|iחtm::'&p|aƤ#ЧǤjnT|=nj WmOڳ ̤S'fWe?ˬ۪ ׶'|_v0nI=F hL+Gurd)cЩ3 ry>MM|T;SjM|uIgMG.?v ެ>:"=gE>|Ƥ6qrw^sF&}GjJvNYƶOct~3h^:jv`y':':F2T=,̊*_{i^6$I;OK;7,y@q9Z:-ݵ]7\n caX ?;6N8}>ZIa]Sb MD7uI/q xI@d)4tyՒ荱6lvNN^%ضݰö5.::y:|%U3p}eҙ)gnS{'Φ Z~ZIƤᯫG1֊蛁gʤ8=?(ƒ3H~GO^BݍIkGSnxj2L$pY5P|5Ԫͤ+ 7Int~u4&?9t}|}+}9!gPw֦ZOc 4̘tJy^jVY-ny)ٯ3ò=ǘW9t )хL:ӟ? t1+ /}Oc9304tyKwt84Z2g(qVm =Kn^Qp&9j'dڿѕS;(Rv^L:tyatKQ&[0]`й2i~t1dW]&w>bߐL઺ˤ78BGG7!]&]<ͣUj%,BQ&}GUn^^)w0|& W)4tJ& I@:4ᬧ4yyN^IS;U_%YgmyꗲԼ5&nIgY4+,Yf–ZeKφSScL;V)% gB/ʽ2hxfl%|?s޵qL:|W6Igd.nJk˷zgjk2&?'Amh #_jpQȤ/鶚<&&5&{?.W)ś_#J৲֖S^܁LzwmS/?*odc؆NG)_ n7&4@;M n⎙e~UnI(Id)fG~lη)3_Of%ut[?j@dO=AldWmB{:'njpRw-y\nu:uWm^ ~68}*~W;75wYXݰ+öw]t珼, 4)w;̼ؔoCm&nVK?gwp1z[e8ۀG1ZC@3p~}>a ouu{~{㧶v]D<M߿_|$]Hݪr9}O?='OqLzzwZ U| m> @&Q>*91%IgXim&})3ЃM O{}x]CcL$¨VRg9)h vշ@IW[Fv+᧩Զ ?:mOS O& I:+kK?Q2irKϟ|gM蜫X!N(Z2LKN-nZEpm|Buyۍ)F%-!~N5 $b=2j"5aԝ#e*gv e?gm rT nJ.cαZ |1ƞG.H-\ު%a64wfẵ#kIo9Zb ZIDATGV7,oҒ)#f%_;^ ~F#o/Ѫ[˷"gIɵTUiML۹?Rfn1Q 8c'=g/Id0B]}q[z^ZCPB&]my3~c ipa|jkKZWo>tZ,*@1i84($kA/Sd)4tJ& .g?޻*Ukv<WLVmG^#Nɤ)uUytL2z&R?[2i1i5gq<|]0QU{SIW -W'Su?Uɤ7J Ħnoymmv ެ>n*1Nz h:g20lhV|ESI%vy+ݞgaIL pG$>I?!'<_<u6bͅw[S8g/gݽQAzGl 7wfܺO?=Ioߛԓ?BJڱLSgƤЇU?9VȤOrb 3'|]>`m{W?g2&]myKv+zRmϞvmdsD?d)49R3%&'w(Ww@d)cS\VKÍ%'0S/zQ<ܯ;[;`pٔ]T ˧ P-t>Gr2&]mN̑Pܣ|L&G}#AD`LWp=`=oqk/~22#}6Io?lA#Gm] ">OhtBz:DȤOrv6v3#j?5f\تOA&]-5_6;15ԏ%R[/]Sm`UdVܱtI&-_.zse9 ʿ pNǤ2c8]`7I{m#nwx&r'dpI \ہrRI4]/i*S{hǎI*d 9UI@\ 44\L:%NɤSfң́H& :vt0)8hR<tjө._- =0IT=m /I/=kmxqnFUvP7 48.GOnѢͅ.uu)U\I2~>3V m.s*lx=Oy3& ? 5֥ƤOa<~iseT.ГLNͅzLz[4tJN' GI=9 J$HW=ǟP ן3zu?~}>_ϯyIe| &%X}DNʰy>xz~&}fsu7]M^O{=O"H.W #cK@iPM^O{4_~UEh WvFTJ pX9G_Mz8nzzkoa[\F藀4qӫ^SM"1-WF S,qXi@qL W6IE/{Iz8nzzk?T߻; WN]mS }yD^Z[~o~ȏ;M#:p `ߝ~P_ pu7tɵPWtIENDB`X(eG   4            / 0DTimes New Roman0̱̱~0DArialNew Roman0̱̱~0" DLucida Console0̱̱~010DLucida Sansle0̱̱~0"@DArial Narrowe0̱̱~0"PDCG Timesrowe0̱̱~0`DWingdingsowe0̱̱~0 vP8@  @@``  @n?" dd@  @@`` H @ X7\ @FG H&N')*+,T-U.V/W0X1Y2ZOQRS7A!I" J$L(PCB   3[6  DE#K%M89:;<=>?  54\$$$b$t Ri=HI %b$uXJoM7maa%b$Jdyt2d͛'TЉMA,<b$D(rlx29y}$$b$(>v96F =$$b$-PHRhbwqv-6b$fҜ[?œ~RH)b$9Ql֬,Jrc $0e0e     A@ A1 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||@8g4QdQdر~0б Nppp@  <4BdBd <4!d!dLg4BdBdر~0б p# p3?  O =|B;+SQL Best Coding Practice in PeopleTools 7.x,,PDavid Kurtz Go-Faster Consultancy Ltd. david@go-faster.co.uk www.go-faster.co.ukD ((F*(( *!,d- Who are you?   UFamiliar with SQL not necessarily the DBA Might be Application developer Team Leader <3"3"FSo Where is all the SQL?  yViews Scrollxxx() PeopleCode SQLExec() PeopleCode Mass Change Application Engine PS/Query / Crystal SQR Stored Statementszz6     V f.Views(  g/Scrollxxx() PeopleCode("       h0SQLExec() PeopleCode(,       i1 Mass Change (    j2Application Engine(    k3PS/Query / Crystal(    l4SQR(    m5Stored Statements(    " Simplicity    QAs simple as possible As complicated as necessary Data Model Avoid excessive I/ORR R N"SQL   BCoding Standard Implicit Type Conversion Sorts Indexes Sub-queriesCC C X'Coding Standards  Be explicit Make it readable Indent sub-queries and brackets Use table aliases Lower parse time Less unexpected results without error messages Avoid implicit type conversion Avoid possible Y2K issue Explicitly specify Y2K compliant date formats  @8.  ?7-  \) Readability   ^CREATE TABLE PS_GEN_JOB_TBL(...) AS SELECT DISTINCT ... FROM PS_PERSONAL_DATA A, PS_JOB B, PS_PERS_NID ND, PS_NID_TYPE_TBL NDT WHERE A.EMPLID=B.EMPLID AND A.EMPLID=ND.EMPLID AND B.EMPLID=ND.EMPLID AND ND.NATIONAL_ID_TYPE=NDT.NATIONAL_ID_TYPE AND ( B.EFFDT>=%CURRENTDATEIN OR ( B.EFFDT=( SELECT MAX(B2.EFFDT) FROM PS_JOB B2 WHERE B2.EMPLID=B.EMPLID AND B2.EMPL_RCD#=B.EMPL_RCD# AND B2.EFFDT<=%CURRENTDATEIN) AND B.EFFSEQ= (SELECT MAX(B3.EFFSEQ) FROM PS_JOB B3 WHERE B3.EMPLID=B.EMPLID AND B3.EMPL_RCD#=B.EMPL_RCD# AND B3.EFFDT=B.EFFDT))) __ _ ]*Minimum table aliases  DSELECT COUNT(*) FROM PS_JOB B WHERE ( EFFDT=( SELECT MAX(B1.EFFDT) FROM PS_JOB B1 WHERE B.EMPLID=EMPLID AND B.EMPL_RCD#=EMPL_RCD# AND B.EFFDT<=%CURRENTDATEIN) AND EFFSEQ= (SELECT MAX(B2.EFFSEQ) FROM PS_JOB B2 WHERE B.EMPLID=EMPLID AND B.EMPL_RCD#=EMPL_RCD# AND B.EFFDT=EFFDT))EE E n6Maximum table aliases  XSELECT COUNT(*) FROM PS_JOB B WHERE ( B.EFFDT=( SELECT MAX(B1.EFFDT) FROM PS_JOB B1 WHERE B1.EMPLID=B.EMPLID AND B1.EMPL_RCD#=B.EMPL_RCD# AND B1.EFFDT<=%CURRENTDATEIN) AND B.EFFSEQ= (SELECT MAX(B2.EFFSEQ) FROM PS_JOB B2 WHERE B2.EMPLID=B.EMPLID AND B2.EMPL_RCD#=B.EMPL_RCD# AND B2.EFFDT=B.EFFDT))YY Y `+Wrong table alias  GSELECT COUNT(*) FROM PS_JOB B WHERE ( EFFDT=( SELECT MAX(B1.EFFDT) FROM PS_JOB B1 WHERE B.EMPLID=EMPLID AND B.EMPL_RCD#=EMPL_RCD# AND B.EFFDT<=%CURRENTDATEIN) AND EFFSEQ= (SELECT MAX(B2.EFFSEQ) FROM PS_JOB B2 WHERE B2.EMPLID=EMPLID AND B2.EMPL_RCD#=EMPL_RCD# AND B2.EFFDT=EFFDT))HH H Z(Implicit Type Conversion  +SELECT * FROM PS_JOB WHERE EMPLID=8001 ",++   XSELECT * FROM PS_JOB WHERE EMPLID= 8001 "-+ - o7Implicit Type Conversion  SELECT * FROM PS_JOB WHERE EMPLID=8001 TABLE ACCESS (FULL) OF 'PS_JOB why did this not use the index? "mK" m  SELECT * FROM PS_JOB WHERE EMPLID= 8001 INDEX (RANGE SCAN) OF 'PSAJOB' (NON-UNIQUE)"Y+. Y p8Implicit Type Conversion  @SELECT * FROM PS_JOB WHERE EMPLID=8001 TABLE ACCESS (FULL) OF 'PS_JOB why did this not use the index? SELECT * FROM PS_JOB WHERE TO_NUMBER(EMPLID)=80018K"3   SELECT * FROM PS_JOB WHERE EMPLID= 8001 INDEX (RANGE SCAN) OF 'PSAJOB' (NON-UNIQUE)"Y+. Y #Sorts   GUpdating indexed columns Distinct Order by Group by Union -v- Union AllHH H $Indexes   H>~ 200 rows <~ 10% Very rough guidelines Avoid updating indexed columns055 I %Distinct    Sorts whole select list Can drive the join order of the tables Avoid distinct & order by Order one way for the distinct Order another way for the order by(YBYB  P#Distinct&   SELECT DISTINCT A,B,C,D FROM table ORDER BY A,B,C  Order by clause unnecessary855 S Q$Distinct   @Instead of SELECT DISTINCT A,B,C,D FROM table ORDER BY A,C,B6 6 5 A t9Distinct   @Instead of SELECT DISTINCT A,B,C,D FROM table ORDER BY A,C,B6 6 5 A  1Try this SELECT DISTINCT A,C,B, D FROM table@ ) ' 2 T%Group by   LInstead of SELECT A,B,C, SUM(D) FROM table GROUP BY A,B,C ORDER BY A,C,B@ B @ M u:Group by   LInstead of SELECT A,B,C, SUM(D) FROM table GROUP BY A,B,C ORDER BY A,C,B@ B @ M  =Try this SELECT A,C,B, SUM(D) FROM table GROUP BY A,C,B6 5 4 > &Union -v- Union All   qUnion Each query is distinct, and so is sorted Duplicates are eliminated Union All One query followed by the nextPC C  r 'Union -v- Union All  DSELECT 1 FROM dual UNION SELECT 1 FROM dual Returns Dummy ----- 1X.@. E  ISELECT 1 FROM dual UNION ALL SELECT 1 FROM dual Returns Dummy ----- 1 1X2@0 J V&Union -v- Union All  FSELECT 2 FROM dual UNION SELECT 1 FROM dual Returns Dummy ----- 1 2b.@- G  ISELECT 2 FROM dual UNION ALL SELECT 1 FROM dual Returns Dummy ----- 2 1X2@0 J (Disabling Indexes   :Functions on columns Index disabled TO_CHAR(column, DD-MM-YYYY ) = :bind Index enabled column = TO_DATE(:bind,  DD-MM-YYYY ) Oracle syntax, generic principled$%&!$%&!  )Use all indexed columns   [Specify all indexed columns Cannot exact scan column unless exact scan all previous columns(@@ \ *Use all indexed columns  "SELECT & FROM PS_JOB B WHERE EMPLID = :1 AND EFFSEQ = ( SELECT MAX(EFFSEQ) FROM PS_JOB B1 WHERE B1.EMPLID = B.EMPLID AND B1.EFFDT = B.EFFDT) 0   ^SELECT & FROM PS_JOB B WHERE EMPLID = :1 AND EFFDT = ( SELECT MAX(EFFSEQ) FROM PS_JOB B1 WHERE B1.EMPLID = B.EMPLID AND B1.EMPL_RCD# = B.EMPL_RCD# AND B1.EFFDT = B.EFFDT)2x  +High Water Marks (Oracle)   `Oracle specific Delete -v- Truncate DELETE FROM table; TRUNCATE TABLE table; Full Scans - HWMF$*$< a , Sub-queries   OCorrelated executed once per parent row Not Correlated executed once in advanceP   P - Sub-queries   Correlated DELETE FROM table1 t1 WHERE EXISTS( SELECT  x FROM table2 t2 WHERE t1.keycolumn = t2.keycolumn) ^ f H6W        dNon-Correlated DELETE FROM table1 t1 WHERE t1.keycolumn IN( SELECT t2.keycolumn FROM table2 t2),VU6/       .Sub-queries (Oracle)   Oracle specific DELETE FROM table1 t1 WHERE (t1.keycolumn1, t1.keycolumn2) IN( SELECT t2.keycolumn1, t2.keycolumn2 FROM table2 t2)6xw  /ROWID (Oracle)   'Oracle specific physical address of row(( ( 0Sub-queries (Oracle)   Oracle specific DELETE FROM table1 t1 WHERE t1.rowid IN( SELECT t1b.rowid FROM table1 t1b, table2 t2 WHERE t1b.keycolumn1 = t2.keycolumn2 AND t1b.keycoulmn2 = t2.keycolumn2),60    j 1>Order of  From clause (Oracle)    Oracle specific Rule Based Optimiser backwards Cost Based Optimiser doesn t matter CBO + Ordered Hint forwards Distinct tends to override this%   %   b,Summary  MLots of places to write SQL Code should be efficient simple readable explicit0+#+" N =+SQL Best Coding Practice in PeopleTools 7.x,,PDavid Kurtz Go-Faster Consultancy Ltd. david@go-faster.co.uk www.go-faster.co.ukD ((F*(( *!,/23 4 5 6 7 89:;<=>?@AGORS U!W"Y#[$^%_&a'c(e)q*r+s,v-w.x/y0z1{2|3}4~5679  ` ___f3f` ___3f` 999MMM>?" dd@,|?" dd@   " @ `"  n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>> a Y   (  pF  q0a  q 0a2  C BUCENG HZI8Qf3? جU,جU,8`T,8`T q0a2  C BUCENG HZIDQD? U8U8D`T8D`T 2  C BUCENG HZIEQ[? U9U9E`T9E`T dn"   G/*d6?@33@@@sf 4  Zd$gֳgֳ ?  T Click to edit Master title style! !:  T$gֳgֳ ?0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S    `$%gֳgֳ ?`  ?*    `%gֳgֳ ?   A*    `%gֳgֳ ?   A*H  0޽h? ??0 ___f3f Fireball.potj     0 r (  pF  0    0 2  C BUCENG HZI8Qf3? جU,جU,8`T,8`T 0 2  C BUCENG HZIDQD? U8U8D`T8D`T 9Y 2  C BUCENG HZIEQ[? U9U9E`T9E`T "   G/*d6?@33@@@sf   Z4gֳgֳ ?`  T Click to edit Master title style! !  TD5gֳgֳ ?0 `    W#Click to edit Master subtitle style$ $    `5gֳgֳ ?`  ?*    `6gֳgֳ ?   A*    `d6gֳgֳ ?   A*H  0޽h? ??0 ___f3f 0 f^P(    T9jJjJ ?7   [*   Td9jJjJ ?J e7  ]* p  01 ?'?  :  T9gֳgֳ ? 05u  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  Z$:jJjJ ?G   [*   Z:jJjJ ?J eG  ]* H  0 e? ? ̙33 @ 0( X  H  0 e ? ̙33H7  v(    3 r6gֳgֳ ?`    # l$7gֳgֳ ?  d2  c 7gֳgֳvd @?UQl$ 000 < 2  d2  c 7gֳgֳvd @?@UQ< l$ 000 < 2  d2  c D8gֳgֳvd @? UQ l$ 000 < 2  d2  c 8gֳgֳvd @?@ TP< l$ 000 < 2  B  s *޽h ? f3f3f ) 0( @V x  c $$  ? x  c $0 ? H  0޽h ? ̙33  P$(  Pr P S   ? r P S 4h?0 ? H P 0޽h ? ̙33 / @(  r  S h?  ?    fA 1? H  0޽h ? ̙33 0  @(   r   S h?  ?     fA 1?}H   0޽h ? ̙33 1  $@( )pM@ $r $ S Ti?  ?  $  fA 1?AKH $ 0޽h ? ̙33 2 0(@( )pM@ (r ( S i?  ?  (  fA  1?GMH ( 0޽h ? ̙33 3 @,@( )pM@ ,r , S j?  ?  ,  fA  1?^wrH , 0޽h ? ̙33 4 P0@(  0r 0 S tj?  ?  0  fA 1?H 0 0޽h ? ̙33 5 `4@( )pM@ 4r 4 S j?  ?  4  fA 1?H 4 0޽h ? ̙33 6 p8@(  8r 8 S 4k?  ?  8  fA 1?87H 8 0޽h ? ̙33  0(  Ti[iRi x  c $k?  ? x  c $k?0 ? H  0޽h ? f̙33fff  $( ?|b@ r  S Tl?  ? r  S l?0 ? H  0޽h ? ̙33 # `$( < r  S d   r  S 0  H  0޽h ? ̙33 % $( TH0 r  S m?  ? r  S tm?0 ? H  0޽h ? ̙33 & 0(  x  c $   x  c $0  H  0޽h ? ̙33 * @0(  @x @ c $d   x @ c $0  H @ 0޽h ? ̙33 ' 0( < x  c $D   x  c $0  H  0޽h ? ̙33^ $ ( F)*, r  S n?  ? r  S n? 0 ? r  S To?q 0 ? H  0޽h ? ̙33p +  H( b Hx H c $o?  ? x H c $p? 0 ? x H c $tp?q 0 ? H H 0޽h ? ̙33p ,  P(  Px P c $p?  ? x P c $4q? 0 ? x P c $q?q 0 ? H P 0޽h ? ̙33   0(  x  c $q?   x  c $Tr?0 ? H  0޽h ? f̙33fff   0(  x  c $r?  ? x  c $s?0 ? H  0޽h ? f̙33fff   0(  x  c $ts?  ? x  c $s?0 ? H  0޽h ? f̙33fff  0(   x  c $tB  ? x  c $B0 ? H  0޽h ? f̙33fff    0( )pM@ x  c $4B  ? x  c $B 0 ? H  0޽h ? f̙33fff -  0X(   Xx X c $B   x X c $TB 0  x X c $Bp 0  H X 0޽h ? f̙33fff ! @0( <??, x  c $B   x  c $tB 0  H  0޽h ? f̙33fff .  P`(  `x ` c $B   x ` c $4B 0  x ` c $Bp 0  H ` 0޽h ? f̙33fff   `0(  x  c $B   x  c $TB0 B H  0޽h ? f̙33fff   p(  x  c $B  B x  c $tB 0 B x  c $Bp 0 B H  0޽h ? f̙33fff "  ( ??, x  c $4B  B x  c $B 0 B x  c $Bp 0 B H  0޽h ? f̙33fff  0( | iii x  c $TB  B x  c $B0 B H  0޽h ? f̙33fff  0(  x  c $t B  B x  c $ B0 B H  0޽h ? f̙33fffv  (  r  S 4 B  B r  S  B 0 B r  S  Bq 0 B H  0޽h ? f̙33fff   0(  x  c $T B  B x  c $ B0 B H  0޽h ? f̙33fff  $( > r  S DB  B r  S B0 B H  0޽h ? f̙33fffv  (  r  S B  B r  S dB 0 B r  S Bq 0 B H  0޽h ? f̙33fff  0(  x  c $$B  B x  c $B0 B H  0޽h ? f̙33fff  0(  x  c $DB  B x  c $B0 B H  0޽h ? f̙33fff  0(  x  c $B  B x  c $dB0 B H  0޽h ? f̙33fff    0( @  x   c $$B  B x   c $B0 B H   0޽h ? f̙33fff ( 0$(  r  S B  B r  S DB0 B H  0޽h ? ̙33H9 @v(    3 rBgֳgֳ ?` B   # lBgֳgֳ ? B d2  c dBgֳgֳvd @?UQl$ 0 00 < 2  d2  c Bgֳgֳvd @?@UQ< l$ 0 00 < 2  d2  c $Bgֳgֳvd @? UQ l$ 0 00 < 2  d2  c Bgֳgֳvd @?@ TP< l$ 0 00 < 2  B  s *޽h ? f3f3f4 0 (  ^  S &>   D  c $D /5u  D zKeep processing and SQL as simple as possible, and only as complicated as absolutely necessary. Query fewer tables and select fewer columns. DBAs, keep the data model simple. The kind of query you build is dependant upon how you extend the data model. Admittedly, PeopleSoft delivers a data mode and you have to fit in with that. Most of the decisions have been made already. Typically poor performance is caused by excessive disk I/O. The best way to improve it is not to do the I/O, failing that you have to find a way of reducing it. .@  H  0 e ? ̙33 0 KC`(  ^  S &>   =  c $D /5u   uAny operation that causes data to be sorted can cause poor performance. As far as possible a database will sort in memory, but it the data set being sorted is too large it has to sort on disk via the temporary tablespace. Sorting in memory is processor intensive. Although almost infinitely preferable to sorting to disk, the database server can become processor bound. .u@u v H  0 e ? ̙33. 0 p~(  ^  S &>     c $D /5u   tIndexes Indexes are, effectively, ordered tables. They are maintained as data is updated on the table. They are necessary to save other operations from sorting the data or scanning large quantities of data. But, the more indexes on a table, and the columns in an index, the more it costs to maintain them when rows are inserted into or deleted from the table. Updating the value of an indexed column is particularly expensive. Excessive indexing can slow both on-line and batch processing. Rule of Thumb for Indexes Generally, an index is useful when there are more than 200 rows on the table and the queries will return less than about 10% of the data on the table. This is a very rough guideline. `@`@  H  0 e ? ̙33 0 ld(  ^  S &>   ^  c $tD /5u   6Distinct The distinct keyword should be avoided. It causes the whole of the column list in the select clause to be sorted. SELECT DISTINCT FROM table If you have to use it keep the select list as short as possible. If the column list matches an index then the index can be used by the sort.  `s@,@ s, 7 H  0 e ? ̙330 0 (  ^  S &>     c $ /5u   vUnion -v- Union All The union keyword joins two queries. Union removes duplicate rows in the combined result set, union all does not. Union sorts each result set and merges the result together. The larger the result set from the queries the greater the cost of the sort.8`@  H  0 e ? ̙33( 0 @x(  ^  S &>     c $= /5u   nBatch processes frequently empty temporary tables. So, instead of DELETE FROM ; Consider using TRUNCATE TABLE
; The delete command processes each row independently through the commit sequence. However, this also means that the entire contents of the table will be copied to the rollback segments before being deleted. This effectively doubled the I/O. Truncate table deallocates the space from the deleted rows from the table. Other objects in the tablespace can subsequently use this space. The result is identical to dropping and recreating the table and its indexes. The TRUNCATE command is a data definition language (DDL) command and generates no rollback information. So it is very fast. The penalty for this is that you cannot roll back a TRUNCATE statement. The TRUNCATE command allows you to optionally deallocate the space freed by the deleted rows. The DROP STORAGE option, which is the default, deallocates all but the space specified by the table's MINEXTENTS parameter. So normally just the initial extent will be left. Deleting rows with the TRUNCATE command is also more convenient than dropping and re-creating a table because dropping and re-creating requires you to re-create the table's indexes and re-specify its STORAGE parameters, while truncating does not Note: When you truncate a table, the storage parameter NEXT is changed to be the size of the last extent deleted from the segment in the process of truncation.h@E    7   C  ~ H  0 e ? ̙33H 0 P(  ^  S &>     c $< /5u   2The following query is an example of a correlated sub-query. A column in the sub-query is related to a column in the parent query. This can be expensive where the parent query would return many rows if the sub-query were not present. The sub-query is executed once for every row processed by the parent. .2@2 3 H  0 e ? ̙33 0 @8`(  ^  S &>   2  c $ /5u   <The following query is an example of a correlated sub-query. A column in the sub-query is related to a column in the parent query. This can be expensive where the parent query would return many rows if the sub-query were not present. The sub-query is executed once for every row processed by the parent. Where there is only a single correlating column, as in this example the EXISTS can be replaced with an IN(. Eliminating the correlation means that the sub-query is only executed once before the parent query is executed rather than once per row returned from it. \2@ @2  = H  0 e ? ̙33k 0 +#p (   ^   S &>      c $ /5u   UWhere there is more than one primary key column the above syntax will work on Oracle .U@U V H   0 e ? ̙33E 0 (  ^  S &>     c $ /5u   eThe other thing you can do on Oracle is use the ROWID, it is the physical address of the row of data. f H  0 e ? ̙33m 0 -%(  ^  S &>     c $ /5u   WHowever, on Oracle there is an alternative. ROWID is an Oracle pseudo column that gives the physical address of a row. Referencing a row by its ROWID is the fastest and most efficient way to do so. ROWID can change. Its is only guaranteed to be constant during a transaction. Now the sub-query returns the ROWID of the rows to be deleted. .W@W X H  0 e ? ̙33N 0 $( @ $^ $ S &>    $ c $D /5u   8This is another oracle specific issue. If you use the old rule based optimiser the order of the from clause, no withstanding what I said earlier about DISTINCT and GROUP BY can effect the execution plan of the statement. So put the table from which you can drive the query, the table with the best set of conditions, from which you select the fewest rows (not necessarily the smallest table) last. If you use CBO it doesn t matter unless you use the ORDERED hint, when the order is exactly the reverse to RBO, put the driving table first. .@  H $ 0 e ? ̙33\ 0 0(  0X 0 C '?    0 S $ 05u   \The difference between union and union all is that union removes the duplicates, the query is distinct, and union all is not. Union will cause each half of the union to be sorted, and will then merge the two halves and remove the duplicates. Union all does neither. The results of the first query are returned followed by the results of the second. Hence, if you know that the different queries in a union are mutually exclusive then you don t need UNION and can get away with UNION ALL and save sorting the whole of the select clause for both queries. $/~ / H 0 0 e ? ̙33L 0  4(  4X 4 C '?    4 S  05u   xIn this example consider that the column is the lead column on an index, and let us also assume that the index would be used by the optimiser if it could. However, the index cannot be used if there is a function on the column. The TO_CHAR and TO_DATE constructions are Oracle specific but the principle here is not. In this example the inverse function can be put around the bind variable. There are exceptions to this rule. Some databases, Oracle 8.1 for example, will let you build an index on a function of a column, so if the function in the example matched the function in the index then things would be other way round. y H 4 0 e ? ̙33n 0 .& 8(  8X 8 C '?   & 8 S D 05u   nYou cannot equi-search on an indexed column on an index unless you equi-search on all previous indexed columns6   4  ( H 8 0 e ? ̙33\ 0 0<(  <X < C '?    < S = 05u   This example is contrived from HR. The index on PS_JOB is on EMPLID, EMPL_RCD#, EFFDT, and EFFSEQ. And in that order. In the first example it is only possible for the sub-query to use the EMPLID column in the index because it cannot use the EFFDT column to complete the exact search because it does not know the value of EMPL_RCD#. It actually has to scan through all the records for that EMPLID. It will, however, still source the data values from the index. Adding the EMPL_RCD condition on the right means that goes straight to the correct EMPL_RCD# and EFFDT, and only has to scan the EFFSEQ for the combination of EMPLID, EMPL_RCD# and EFFDT. Even if you did not have concurrent job processing, and all your EMPL_RCD#s were 0 I would still code the query as on the right. Do not remove the column from the index, but you might make in the last column in the index because it is not helping you. If you remove the column from the index, all of the PeopleSoft vanilla code references EMPL_RCD# and the database would have to get the value from the table, rather than the index. Moving the column to the back of the database allows for sloppy coding.  H < 0 e ? ̙334 0 pX(  XX X C '?   D X S $B 05u  D JThere are lots of places where SQL is coded in such a manor that you can change the SQL, either to improve performance, or change functionality. In a view you code an entire query, typically for use in a search dialogue or to simplify a larger query. The scroll functions allow you to append a where clause to a query that populates a scroll in a panel. Mass Change / AE / SQR / SQLExec - what you code is what the database gets. We have, and we will continue, to see AE being used as a batch processing language/environment. In PS/query you define a query via a GUI. But you can see the SQL that is generated. When I code a query I often decide what SQL I want, and then I code the query. Another place you can get at the code is stored statements. Unless you like coding COBOL, you are only likely to make changes for performance. ~   H X 0 e ? ̙33" 0 :(  X  C ":   D  S TD 05u  D <The areas that give you the most performance problems sorts, CPU intensive, can be memory intensive, and if you don t have enough memory some databases will sort on disk. Indexes, when they are actually there (you would be surprised how often they disappear) the optimiser isn t using them. Result is often an expensive range or full table scan. Sub-queries, long executions caused by looping   H  0 e ? ̙33# 0 VN(  ^  S &>   H  c $D /5u   In this example the ORDER BY is completely tortologous and superfluous. In order to remove the duplicate columns the distinct has had to perform a sort anyway. +   j H  0 e ? ̙33:$ 0 (  ^  S '?     c $tD 05u   ZIf you want the data sorted in a particular way, do what you can by ordering the select clause. In a formatted report it doesn t matter which order the columns are selected in, you just rearrange the fields. The benefit is that you save a sort. You will see the same idea with GROUP BY and ORDER BY . H  0 e ? ̙33B% 0 (  ^  S '?     c $D 05u   bHere we use the sequence of the GROUP BY clause to control the order of the query and save a sort. c H  0 e ? ̙33S& 0  (  ^  S '?     c $d 05u   sEven if your queries are mutually exclusive, there may be a difference in the order in which the rows are returned. t H  0 e ? ̙33 ' 0 p\( 18At1 X  C '?     S $ 05u   ^8I am going to show a couple of example of what not to do 9 H  0 e ? ̙33( 0 |t0 ( %\ X  C '?   Dt  S tD 05u  D EMPLID in PeopleSoft is a character field. On the left I search with a numeric value, on the right I used a character string. The query on the right used the index, but the one on the left couldn t and so had to do a full table scan. Why because of implicit character conversion which disabled the index What is more, if just one of your EMPLIDs was not a valid number, if it contained a letter the query on the left would error because it could not convert the value of the column. Y   H  0 e ? ̙33_) 0  ( Q   X  C '?   D  S D 05u  D Make your code readable Lay it out in a manner that a person can read it. Indent sub-queries and brackets Every column has a table alias.  H  0 e ? ̙33* 0 a( K4 ^  S '?     c $ 05u   W1On my vanilla database this query counts 351 rows 2 H  0 e ? ̙33+ 0 x(  ^  S '?   r  c $ 05u   Whereas this one returns no rows. What has gone wrong here. In the second sub-query the columns without the alias are assumed to come from PS_JOB B2, so both columns come from the table and the sub-query is not correlated.  H  0 e ? ̙33, 0  ( |  X   C '?      S  05u     H   0 e ? ̙33- 0 vn`(  ^  S '?   Dh  c $B 05u  D Like all similar systems, all activities in PeopleSoft require some form of communication with the database. That means the use of SQL. In some places this actually means coding a full SQL statement, however sometimes things are less obvious. In this session what I want to do is help you write more efficient code that will execute faster A word of warning this is technical presentation. You will need to be familiar with SQL, although not any particular flavour of SQL. You do not need to be a DBA. Questions: I ll take questions as we go, and there will be some more time at the end, and I will be more than happy to go beyond the subject matter I have discussed during the presentation. Example have be illustrated against Oracle  H  0 e ? ̙336 0 DW( [\0 D^ D S '?    D c $ 05u   M'All table aliases Still counts 351 rows ( H D 0 e ? ̙337 0 @L( 2R L^ L S '?   Dz L c $4D 05u  ? EMPLID in PeopleSoft is a character field. On the left I search with a numeric value, on the right I used a character string. The query on the right used the index, but the one on the left couldn t and so had to do a full table scan. Why because of implicit character conversion which disabled the index What is more, if just one of your EMPLIDs was not a valid number, if it contained a letter the query on the left would error because it could not convert the value of the column. Y   H L 0 e ? ̙338 0 PT(  T^ T S '?   z T c $D 05u   EMPLID in PeopleSoft is a character field. On the left I search with a numeric value, on the right I used a character string. The query on the right used the index, but the one on the left couldn t and so had to do a full table scan. Why because of implicit character conversion which disabled the index What is more, if just one of your EMPLIDs was not a valid number, if it contained a letter the query on the left would error because it could not convert the value of the column. Y   H T 0 e ? ̙33:9 0 \(  \^ \ S '?    \ c $ 05u   ZIf you want the data sorted in a particular way, do what you can by ordering the select clause. In a formatted report it doesn t matter which order the columns are selected in, you just rearrange the fields. The benefit is that you save a sort. You will see the same idea with GROUP BY and ORDER BY . H \ 0 e ? ̙33B: 0 d(  d^ d S '?    d c $ 05u   bHere we use the sequence of the GROUP BY clause to control the order of the query and save a sort. c H d 0 e ? ̙33. 0 hX(   hR h 3 '?   D h C B 05u  D f@The query in the text box reappears in the create view statement A H h 0 e ? ̙33</ 0 l( `P lR l 3 '?   D l C B 05u  D ^In PeopleTools 7.x and earlier the bind variables become litteral values in the submitted SQL :    H l 0 e ? ̙33 0 0 pZ(  pR p 3 '?   D p C ~D 05u  D h,Again the bind variables are litteral values     H p 0 e ? ̙331 0 zt( 0PP5 tR t 3 '?   D t C D 05u  D   H t 0 e ? ̙332 0 x`( 䫅dŅ xR x 3 '?   D x C D 05u  D n2All bind variables are resolved to litteral values #    H x 0 e ? ̙333 0 |A(  |R | 3 '?   D | C TD 05u  D O)The bind variables stay as bind variables * H | 0 e ? ̙334 0 >(  R  3 '?   D  C tD 05u  D L&What you code is exactly what you get. ' H  0 e ? ̙335 0 A( PT R  3 '?   D  C 4D 05u  D O)The bind variables stay as bind variables * H  0 e ? ̙33Z; 0 P(  ^  S ]   D   c $B )<q  D <This presentation deals with SQL Coding Practice in the context of PeopleTools 7.x. The principles of how to write good SQL are universal, but this presentations also describes what SQL you can get hold of and what you cannot. Essentially the way the SQL is held and constructed has not changed significantly since PeopleTools 5.x. The technology has changed, the place from which the SQL is submitted is changed, and one or two new tools have been added. PeopleTools 8.x builds significantly on this, but it is not dealt with in this presentation. Sometimes customers ask me to tune their databases But that is not what this session is about. Because, usually, the problem is not some much the database, or the network, the problem is in the application . Performance tuning is 10% database tuning and 90% application tuning6=[,. = H  0 e ? ̙33= 0 @(  ^  S ]     c $ )<q   6Sometimes customers ask me to tune their databases But that is not what this session is about. Because, usually, the problem is not some much the database, or the network, the problem is in the application . Performance tuning is 10% database tuning and 90% application tuning I cannot claim the credit for developing the techniques described in this presentation, but I have gathered them from a variety of sources and this is an opportunity to share them back. 63,/  H  0 e ? ̙33r0qw")9Iw )9T>v~>  m7"F (N'-Yi2g5 9I;N>Ӣb@&FH۠JInMDOׄ߆9WY^ydh=kMmoqmsu~wtyXfx5m{π;DŽOh+'0TW px  4 @ L XdlNo Slide Title SNC:\Program Files\Microsoft Office\Templates\Presentation Designs\FIREBALL.POT\ David Kurtz43iMicrosoft PowerPointoso@/B@yV@p/i =@"`[8GUoM  * P& &&#TNPP0D & TNPP &&TNPP    --- !---&0&W&--&&- $WjjW- $j}}j - $}}"- $*- $3- $;- $C!- $K%- $R)- $X,- $**\.- $*==*`0- $=PP=b1- $PddPd2- $dwwde2- $ww&&&- &P$&[[\{ 0CUd$p,z3;DLU]zepmdtU{C0{\ZW\L&&-&& &&-&&P$&[[\{ 0CUd$p,z3;DLU]zepmdtU{C0{\ZW\L&&- $WjjW- $j}}j - $}}"- $*- $3- $;- $C!- $K%- $R)- $X,- $**\.- $*==*`0- $=PP=b1- $PddPd2- $dwwde2- $ww&- --&&&O &--&& - $O b bO - $b u ub"- $u  u.- $  9- $  D"- $  P'- $  [-- $  e2- $  o7- $  v:- $ " "|=- $" 5 5"@- $5 H H5A- $H \ \HC- $\ o o\C- $o  o&&&- &N$%T T s   (<!M'\,i2s8z?~EL~SzZs`if\lMq<w({sTROTL&&-&& &&-&&N$%T T s   (<!M'\,i2s8z?~EL~SzZs`if\lMq<w({sTROTL&& - $O b bO - $b u ub"- $u  u.- $  9- $  D"- $  P'- $  [-- $  e2- $  o7- $  v:- $ " "|=- $" 5 5"@- $5 H H5A- $H \ \HC- $\ o o\C- $o  o&- --&&&K!~z&--&&- $K!^!^zKz- $^!q!qz^z.- $q!!zqz=- $!!zzM&- $!!zz[-- $!!zzk5- $!!zzy<- $!!zzC- $!!zzI- $! ! zzN- $ !!z zR- $!1!1zzU- $1!D!Dz1zW- $D!X!XzDzY- $X!k!kzXzZ- $k!~!~zkz&&&- &N$%O!O!n!"#$&(+$.71I4X7d;n?vCzH|LzPvUnYd]XaIe7h$knpsuvwnxOxMxKxOL&&-&& &&-&&N$%O!O!n!"#$&(+$.71I4X7d;n?vCzH|LzPvUnYd]XaIe7h$knpsuvwnxOxMxKxOL&&- $K!^!^zKz- $^!q!qz^z.- $q!!zqz=- $!!zzM&- $!!zz[-- $!!zzk5- $!!zzy<- $!!zzC- $!!zzI- $! ! zzN- $ !!z zR- $!1!1zzU- $1!D!Dz1zW- $D!X!XzDzY- $X!k!kzXzZ- $k!~!~zkz&- --&&&0CqW&--&&- $0C:C:W0W- $:CECEW:W - $ECOCOWEW- $OCZCZWOW- $ZCdCdWZW- $dCoCoWdW- $oCyCyWoW- $yCCWyW"- $CCWW&- $CCWW*- $CCWW.- $CCWW2- $CCWW6- $CCWW:- $CCWW>- $CCWW@- $CCWW@- $CCWW @- $CCWW@- $CCWW@- $C%C%WW@- $%C4C4W%W@- $4CDCDW4W@- $DCTCTWDW"@- $TCcCcWTW&@- $cCsCsWcW)@- $sCCWsW-@- $CCWW2@- $CCWW6@- $CCWW9@- $CCWW=@- $CCWWB@- $CCWWH@- $CCWWM@- $CCWWR@- $CCWWW@- $CCWW\@- $C!C!WWa@- $!C.C.W!We@- $.C;C;W.Wj@- $;CHCHW;Wo@- $HCVCVWHWu@- $VCcCcWVWz@- $cCpCpWcW~@- $pC}C}WpW@- $}CCW}W@- $CCWW@- $CCWW;- $CCWW5- $CCWW1- $CCWW -- $CCWW')- $CCWW/%- $CCWW6!- $CCWW=- $CCWWD- $CCWWK- $CCWWS- $CCWWZ - $CCWWa - $CCWWh- $CCWWo- $CCWWv- $C&C&WW~- $&C.C.W&W- $.C6C6W.W- $6C;C;W6W- $;C@C@W;W- $@CECEW@W- $ECJCJWEW- $JCOCOWJW- $OCUCUWOW- $UCZCZWUW- $ZC_C_WZW- $_CdCdW_W- $dCiCiWdW- $iCoCoWiW- $oCqCqWoW&&&- &,$9C6D3F1I0L0L1P3R6T9UgUjTmRnPoLoLnImFjDgC&&-&& &&-&&,$9C6D3F1I0L0L1P3R6T9UgUjTmRnPoLoLnImFjDgC&&- $0C:C:W0W- $:CECEW:W - $ECOCOWEW- $OCZCZWOW- $ZCdCdWZW- $dCoCoWdW- $oCyCyWoW- $yCCWyW"- $CCWW&- $CCWW*- $CCWW.- $CCWW2- $CCWW6- $CCWW:- $CCWW>- $CCWW@- $CCWW@- $CCWW @- $CCWW@- $CCWW@- $C%C%WW@- $%C4C4W%W@- $4CDCDW4W@- $DCTCTWDW"@- $TCcCcWTW&@- $cCsCsWcW)@- $sCCWsW-@- $CCWW2@- $CCWW6@- $CCWW9@- $CCWW=@- $CCWWB@- $CCWWH@- $CCWWM@- $CCWWR@- $CCWWW@- $CCWW\@- $C!C!WWa@- $!C.C.W!We@- $.C;C;W.Wj@- $;CHCHW;Wo@- $HCVCVWHWu@- $VCcCcWVWz@- $cCpCpWcW~@- $pC}C}WpW@- $}CCW}W@- $CCWW@- $CCWW;- $CCWW5- $CCWW1- $CCWW -- $CCWW')- $CCWW/%- $CCWW6!- $CCWW=- $CCWWD- $CCWWK- $CCWWS- $CCWWZ - $CCWWa - $CCWWh- $CCWWo- $CCWWv- $C&C&WW~- $&C.C.W&W- $.C6C6W.W- $6C;C;W6W- $;C@C@W;W- $@CECEW@W- $ECJCJWEW- $JCOCOWJW- $OCUCUWOW- $UCZCZWUW- $ZC_C_WZW- $_CdCdW_W- $dCiCiWdW- $iCoCoWiW- $oCqCqWoW&- --&&&&y&* Ywwgw* Y - "Arial |wwgw | - . 2 d1 .--yH-- Times New Romanwgw* Z - .02 SQL Best Coding Practice in+ $'$. .2 PeopleTools 7.x$!.--yl s-- Times New Romanwgw } - .2 N| David Kurtz   .Times New Romanwgw* [ - .'2 ~|Go-Faster Consultancy     . . 2 ~B Ltd  . . 2 ~e..Times New Romanwgw ~ - .'2 |david@go-faster.co.uk '   . .$2 |www.go-faster.co.uku    .&9#eO&--vG-Nd#9yI-Lb#9L-Ka$:Q-I_&<W-H^'=^-G](>f!-E[*@n$-DZ+Aw'-CY-C~*-BX.Dޅ,-AW/E.-?U1G/->T2H1-=S3I2-;Q5K2-:P6L---&& &9`e&--vG-d`9yI-b`9L-aa:Q-_c<W-^d=^-]e>f!-[g@n$-ZhAw'-YjC~*-XkDޅ,-~WlE.-|UnG/-{ToH1-zSpI2-xQrK2-wPsL---&& &9e&--vG-d9yI-b9L-a:Q-_<W-^=^-]>f!-[@n$-ZAw'-YC~*-XDޅ,-WE.-UG/-TH1-SI2-QK2-PL---&& &9e &--vG- d9yI- b9L-a:Q-_<W-^=^-]>f!-[@n$-ZAw'-YC~*-XDޅ,-WE.-UG/-TH1-SI2-QK2-PL---&& --"SystemwfU  -&TNPP &՜.+,D՜.+,   1On-screen Show%,,1 4Times New RomanArialLucida Console Lucida Sans Arial Narrow CG Times Wingdings Fireball.pot,SQL Best Coding Practice in PeopleTools 7.x Who are you?So Where is all the SQL?ViewsScrollxxx() PeopleCodeSQLExec() PeopleCode Mass ChangeApplication EnginePS/Query / CrystalSQRStored Statements SimplicitySQL Coding Standards ReadabilityMinimum table aliasesMaximum table aliasesWrong table aliasImplicit Type ConversionImplicit Type ConversionImplicit Type ConversionSortsIndexes Distinct Distinct Distinct Distinct Group by Group byUnion -v- Union AllUnion -v- Union AllUnion -v- Union AllDisabling IndexesUse all indexed columnsUse all indexed columnsHigh Water Marks (Oracle) Sub-queries Sub-queriesSub-queries (Oracle)ROWID (Oracle)Sub-queries (Oracle) Order of From clause (Oracle)Summary,SQL Best Coding Practice in PeopleTools 7.x  Fonts UsedDesign Template Slide Titles,tgo     '/7?GOW_ _PID_HLINKS TemplateType GraphicType Compression ScreenSize ScreenUsage MailAddress HomePage Other DownloadOriginal DownloadIEButton UseBrowserColor BackColor TextColor LinkColor VisitedColorTransparentButton ButtonType ShowNotes NavBtnPos OutputDirA,0257,2,Custom Topic A258,3,Custom Topic B259,4,Vital Statistics260,5,Favorite Links to Visit257,2,Custom Topic A258,3,Custom Topic B259,4,Vital Statistics260,5,Favorite Links to Visitddavid_kurtz@peoplesoft.compaviavi f3  C:\User\PPT#_S David Kurtz  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)Pictures'Current UserSummaryInformation(WPowerPoint Document(wDocumentSummaryInformation8Root EntrydO)L9@Pictures'Current User+SummaryInformation(W#_S David Kurtz