ࡱ> nS;-)kdPNG  IHDR[=sRGB pHYs+IDATx^kK~n;%tAFvn;F0=80GƘA8W6 ݭ+j䦌U6ot\eS1q5~vpzhӦ[#8KǏxQV8A|KшG?Y0LZ`=k|f 3PxpY-LNb }OPgG1v{I{Q=4*k-q s^O:ujx529-OZo5y~Zx$#ɗ𫹵I{<zxHs%!WCt*Z;8~mx;&ҼAiNo̩@@5 Λh~q"׏/.2`\;:0w~̲G:l6s^t_bޙekG3[TIq**g/݋neϝҹ/sҹ}4zm{-ؑgk4D߬@:sΏdjaTy%o gEWH:/*oyV+[SW} ϿM ?me}>}5?wz>~ ?a<{gAwD  0ݗ^n9[rs 9+[~Cm]U|_﨨dM~I.>|ٷȃٷuH?zp!W ?>չCW_W_/w~|\{oW_%o|UQ?R9|+r))~o~YQ%/?車60 L@3)ˁt.Dn*6%rM~_Z_OY_ Ͻy%=Z#4nAu&G\XQ@rMVW;z@@`q5 Dʘw%@6%lI=u\^6r[*EE?\m:wWi,kɬc1A7sK~k&9fe]hmH@ɿ׼0sE-f\yt u|wmf?owzQ@Ys\2qcz{ \>3> qwޫ۝UA9D~ɲ^(pNZOC5-䳼5-HitwT # gHZ̀H...H[?-|*4gݹ|*n}8JSrw V?*w>IS9sO{TSʹH~yS#]wP$6]}P;O#\oσ??7`-Igݹ>OmO8eŹTg; ?[n~TYw 9]ܢ Mv  ΓӼGJZ+tw^l-?Ef>hOw878mFGnFE>_' |};_w F$FCd{]fT)rwY/{tx80lɗ!gzt0hǣB֒z=񟬡W𫹵;˧?z~` ;a0_^CTCKqk{w/r^\9ڭ /Ρ>*آoBc\D㡻rh|iyi=O\lQpYvܚ%rwGԘ\c`Tqgk4O-s3Akyo{Q=^O6=~Q_b C<}"'vX g·_a- < RBEߝGoenq~Z5ԗ9uhWsրk$^IE̷> =@V-m?yCۚεerqLy0 >G^ X'Kj ۟Y/ؤswzc'9z%\ܹJr/Y2w"}*x輮zoǦS37ɿ$_<ҿjߛ%.vpbs~^DzMyŽf -VP<+r`76ʋά霹s+L_.C.u  ԧ/;uH* 09Bk!MҼIv#U!D\~ W/6qZ^쒥N37鱘jT4c6c-4 VwWݑ0GEѫPu_ .J}5z@FHsiЋU٥Nm~U`ٙ,w!҆!*P3vhґjwjAZ 6.2d Jٝ~gL֩hzg&nvp/PwS߯#IEmߨn3gFs6ө|j\`ӈ}Er3 gAqNm%̱]6mc5w|U˰! pY<;͟WvWd|ch[r_v}{1md?UeM7d3q'-HF](]Wmp+ A+}`oguuS8sw~8&;ψ.z|_o#tg@J@0ÕNtE^lENSȌ8Gd$Kf豏=CټݴTWO]nR6a9,;#'&L/~f( 0OtozNj}E_ hJ2s1 .-6N7K|isʛ?db6م's𛼛4@@zHsҹ|FXr~-=BK|ci9~ŏ)sf/g5T0^vgY6 (5o f:4i\ۊU+G#Bݯۺ9 (m?f8"; ~} _y1mϚR^M6B+^ݻ'y pmݏVQ @`Pt>hk@@- 8-Sw@@ Im   @@~>*^@@@ .;g v  .//5qA`&gTIs j&9+<7Jڃ  @G@@M`td'{Y'@@^=/ qDl un+eTL^Z!@LkF~ԧ +ߘp_0;:{ދ7~mo߲UŭvAP8Mnn"x!eP^hwD⢹z~?slS¿| Ҷ6ߌG>ZKǘյ8Z@t|t r#+ErLNgH>#[cK9A{^0ɨz3c~Ovky]R(5 ҞK_a?OglӅg{{}plByzr}}&!2z"EwM(%@`ҹ&˶qyE"$Fj"'=ՋSyQ]E/}h5VaJU2X=|f1iCpw&( K+FsɒB^ygodkRK"ļv.A0dLsPL$&3[umvth.msM g tl[ ݪs/T٦$~[ѷw7WT1_U/Ǣ+i"%HYĢ<Ї&ڵS^Śi󩼮]^'0̟^0~;K@p&<֥C# MEs:73[>_ +]nnfcdLd@gRnnL޼4I ճ=VWߔ_VȶZI.)Hvnߝd,ʗ:rhYSI+W26 {6 ?=wVBT4g=4IIϖ[[<t]aeySX_Wryz*Ѽ9wݬuɟ3t#PԭO>MB@tgetsMw䗢$*]".293]Kcnb muۆ.^Hɗ׺uPnO}rw~=&^?f!_!SYWPM{Co}@H gtAya]ہuяhZSFszd[N^DoGW K4l^Nn׺$;s(`V0~'sȲ?'n3$@Tk:ʏ2!`#wKY͇Oo%g/ y\pjtﶰk]J-*ofV歔zZE3=OI#k@>+,:xV:i5O8 5Ec>r|_~.RؼJd;fw› x{Ž+V^ ɭ g _s/ FSج@?\risW& 衆| ?F.g/ Щ+7PB3PG~㚩>Nߠ碉s̝Yj{9 N*֍Zb"=-I|h>liR|{!Dty]2/S&<MSY'zgJi*Gf'*`O&yi}\ue4IZVzlc^R~9,ei'@t.Iӧ|S/ukubjdp[rÊHv謝8j;]nSi!)Y@K1ZSh s6uQp~m~ ɼX] N31|!nC?U0+n͖Eou̠wDs}բƘ?Pt5 s羒m[E )o)!v1]r<ۺJ۶ՌX;tNYMj5] 92Nyģ^ଅ9F鎿mtᐣ\= uCQ'EF;L;$͆z\j yq:>O-E77noڜ2튗6,w6ܖ;|kҹ (/Fn5kftdY;tvHxEe ]NW'ߓ8ҬvMz6BrSX7M>{+{"?fCh\~;Vc}"HVo&ӹN/E-靽Em,q>-ܺ\DD[{ uDs]9ԧs5>K20L5k>聢tE0BgG|_Hh UOE+ohрngtye/"Mˌo,DJ=uK*T w4Bw;m?VmUh\v]}47>:sG|=J"0OtGs3_>P4wؚ]gs,G%Xk߫ȟE=‹J)e4@C11e ̝g.rn/f9{N;<.M7r?1/',û6hge22,zl0wGI)|q=Q5;vJu-~e^ Ձxc@c6~mtr__7ThoOmW٤@#SmEdyhns_ک9 V``%~mF]nMRy-ʩU9fw/flUf(vùwyOH+N vJ{e6t_G G@Iɷ< XcVn1;D-349mKE9J]Tm#ms6g;v\{֣`|l$yTk֌vj6wI܊Ft^E]$Lؑ9mBgsVszwU l@rn-t^|( @@ b,m[E:agkYƓ$wϹm#SDv7g9\}{QZY%  @\⦼kwԆ  ѧB#@@0^DOß ]DH9 O A@%8g˲:3mk@X@-rbJ!sg}   Y vsٞdβ @@Rw^*Fy@@8:g,b1z|KZZxcm_jͺ󢃁  \+"-Ne-\[*rӞ  "ie͍U5(넽+9'>jֿ)S@@^S:oU"Ѽ"h{*͠ۻ fIYj.NO/OO/v ]*?@@ tMA].gfF<"bؽǸx?t   p$gMR{csz F]h~'+ϑ_\4Y`  s;LKWwYwn/(//:߹~TΨ(ITv  dfHu}\5S7kZG)G6g@  ݬsMS;+X*w.]sf*h^3l  P");9\wa/ky;q纛So`¯~YQ ΋  lBwŠ2M_SLHCjn.~O9,@@@ʖ]4?ows;DbJҶOC5`VIc@@-Po .>HGlrI{)D׬o~3Z˥\/.-䖀CG@@.<u%͝7|bbŅ.~tRg)QNKGp-  t~~ryZ}O]}_2eܞA.WIid%:G  N ͛;zjYnfe^b91KYYbfs*   \r~rzqrzs%KLs[,+[j.#-3Aܾc-_,7VbºYR&  TS(>* 1:^iy|<{Uͦ$  f᫈rin/'d.քV3*Fx/㡛=D8  h|5zDhgTLZg47_  L%PΏЛ%:\b_Qduz9?i  0si]NQiNpFfǗFWS+U-   &p;֛R1?y\~*wKOh`D_ܜ  `ks~CߝP>ŤsC}{I@@@dt>%Θ{g_#Y'w_zY6@- HȰEa&uMwdJٰZlD4;t._e*`  2+WcQ6[ Ժi[hoX]ɠ,T>4;tnyA4qF@0S&Δvp9`Ghv]h+la~7H udd&L4/ nD   ]εR3s& ̒kgT]fdg+6 VS?KY/''Ν-#k;@ЀkR)ѽ,fbmvutͻ߶sO HOΪ9@@#`OVTbO߰7qDeEivYC@b V &g=˗n;[+6@i{:8ӗ}! @P h.,p8i=xm8RcšC S||˯?e|Q>&%@H mD&QE o#.zh< [ oacD"w:g佾SL@@αE`>BX@$; HKy,3d<|#"L`Y\9rSB'㼲;JxY^4@`N-.u;Zh'BmM@@`8nye@@`g=%?[ _4Dž%,B2Kt6EF" @_ٺ=术™;˧69K;^jҹ*A@ ^zmϝK(Fy${i ЋϜWX}(S{]) ?tsrP  *sC9aDO}vB=b|[%M%T+ennnȞ!W`sسvu}$Xf29! 0gs+VɝڏhUJ}gퟲsdRlL->gy2t= SØ4 @2i-zsɭ͂mU0 #P*PJ=K)S# f['uTNS7 ^U~(@@q:}h@׫~$dΊΰ  ,`ϝšlS=;uu[e6b Ԥs)ٖV  0@s֝1"Թttn~@EEs֝2 T&F  0XzѹugTy[!prRmDAۈ3@`FuۈۚJo#2+Hz~(@ηҹ:PUWlR- O9ԛ_C0:}W=9oL"=}"aI:_xZ@ {; N'-7 =wW0t@`dEsh4v$yZ :0Ay@`N*tIo?sځȓ~ۿ˭i*Hz?)2 Kxg| LwNY]/0ӌ!Enշĕ iL`gpIB*_yGgw +X *^-q?E@Rt҆Q ȳOcu7D@ K-gmL!,<],N*@@@`+cϝ}?/?VdBQ @#&0g8l]_w~zzzss?.ם7\?99=9)=mHd3( @N:Ck"rݹN~t'˶&z^Q^!qLP' *;t~uu52o|;7>"0.fN| ~t)6w:~4.﬚5)]J:a +!o󋋆QnH ~t}wp<΍e\es>>F8qC뺽5X:R՗IQ:{;b׋Ns9ozX7M,֣G@  P* /JvkZ䲟AOI*;-`,oVWRA˯}Mv+ҋsɀ{O +,5ԃ # nҹ4@&ALʛ%Ó?m TD6_MONcLMbPdhۯOGV;w.r 7,EPt-ȯ#@ӳH֥zhKW?\9M|`%95A;E^iwg?sA{$ӹgA~=s,Hɓ*M'CgO~ꢹl?=o34*YI#f<. 儆&uKH_Sٓr_g.:7B@ G ?fDoH8 Z ?Sh_.L@ /~ߝ9`Yh&op@JȞyѤ;#JlZ̆ S3DH$Ok>S ;G"gtæ=7>zSz׋ݱ @-rwplMh+8P!PEyu@7TtM@@`zst,wm 99cye@FXw88;G@".ղ-K([٢g3e^\*I$+-ݗ# @P x@,%)\"Z[\<"_Xn#5U! 0C #:CYtn&;K=z]Λt@`;տ6}7O_pzt.]n_;v_ұB6G@TOWlx6')kgn:׉s`N࿹# Os'[fGYu}iTMܑMc6=c_  ]}醚vZkh/͝wE:`@֠~ӈ !LG~I6/0f(D:7-y;Ao:} )p-awd휄wn739GnON|o&#Ѳ-'N" }N QW^75$t@-Lt9%Kzuut =mhOSWff:譚3K\+vO޸>;;  MG[j),)Y3_[{<'z{̾KbC>rњ]z]=Co8j:3ԏ KH.oHΆn}$,ޅ&m~^{>bZko޼_Ȩ/+>3l68wnN:_ʋD@`U͝+S$.#;G3Gzz5%#G"SU=;C:@M@%3lqvm9yw^^-tQʬ62q.Yx4@ =w_ ք5-:^5@TOWomǟ# 0sg7? :ݮ|cO@Pz nݪɳ'DN2F sH  cΝm7͗Nsv@Tt MKC6Sɍ=R.vٶMΊMz%VtϿ]bi3 L.0ۇ×H|3O{G9sۤ 'I,?~^eϟI4[Sܹs~_@X@hmww|\lBO붎ΰI\;'0tv  ;S2Κ-/% ]lN3iH#L=+[~MQ'ue}ע}S@6+P4n+%74dDۜxn73GZswΚǝc>Mp)~JyT  Ѓ@ {hU`A 0Ggw  L;w 0[l! f) tc@f)@:(@.0nΛ9[ 0?i'od^'F@@) D{ U Ыܻ/W+ZֆMriEH3Ί0 [x+HUS7G_&G?3I=vٶBbwT4lH6;}M0w.Q:;ڀ = TLK7t.yѪo&6^GkmEq6Ɋ7GQ|]$7a=hUy,4{]k"|UDX\>QKf>iQ3}m?.~{`i6 통meBI7y Y,/KFΗ;v@`*p4M 8&7gWSt# ,I`sUfwk-A r~mHd\Zv_*:C[I@j;O6MfU g|V .mf't^zP@zz&λu/^wG|( PL;3|mpZ|5# LkݹO<8 ""g\fn!?*(,y fA|R9 ,]-m'P6 /m۶I~{r]kPr*tn(4~" @/zsΎt;L;KhǵfmɎj .GZҽ'Ge ^ dhLEwm+8y(P@Υa9 sZFF t6Ȭvu=dTs4 _ > 0sh P6nVD_4yZ6D@ ̈ϼ 4!֝_41GՍPn׬TWȆ  0֢h$Y<2knKK@F;p#d.;`[@@;Pתp(_t>1 Pz ^ٙӓS5<9n:rƊ" "kj@Ϗ2խٵN.&q U5wd|Eφ: @Y Nm=g\C^tVwVӪY. @:Ǧ  P+P1 ZY Dŝ]qq =4l@@Pɲ2}zz}}$yq4>b|V][e,1o?f9g(9[f8(4 @- Tϝ`5)V֙Ft\.R$9!mqu9$[Mj̑lߜ=" IL&J50r;})]Mzi]߫+oLgPlC@`Νtprmv|J:;]@,غ/\g ڊ Kz@#u:p9k=.q/ڂwz@c}p Vg/9HY٢s @@`;yi~y~4_we@@`M̝IlD T0嬖qTM@@`Es˜E(H&iY#/o ǘ@@w)i·waiq~V&LPֲs" b̹s8~jn&W|xlkt>D qI@V)GjH%BB֝M7L>fvFI*|$-U9g^+z&  0Og3h1h6=X03&ǂC yI:aSݝ|ˮ}I  >]_~JX]2 &MGbHp&ީʔԚot>D|T;9[lD@`qvtG4\ ?ӵf\/O>MΚn:^*{aLrZ!&S  Esy\.tS̎? ږ;VV)N$Orx 8&erΛ]\8{5I]菜;k1;}H[I@Ѿr6C˞{87]|S E sYQuM^%@lϻ5؏b8'NJE,~M%Ej;^T4r-Gqsi|-CƉ>" yvo%)dIQM3f{t?bs>3uv1&x{_uݏ:cQh ς# %sf_h;CaLwFf&I'3e~j'菳Gf<0 Q:uV  +\3 z0|mXL%bM1ؼ[ݒH{wmZr.\9}B@`& Z3ӧ1 X%gHNIiCN_#vMi[ۛ SaGj72 9d+(6tnr * LtiNLbN6 GJƋj}ُ93秝z$v܅)3dnhM瑳/?ER@hV&hf&ϧ)|ll*Tan9T2E@X.tnHtk|C2VMullܹ$r5ESq_@X=;>҅ ds'|k4׹]ִƿ]8B@@M yq\kA7o3r  lG eVΝKdjΩ2  ,] ;RΔK   ds'3\jn;3LiO(  bl*<7g\Y@@@#КeJ O{LQ_-@@X@ʖA;l/HfFR9  C "K'5͇oG@\9|G mC@G`F|@@f+0}:/=8h  șaF`w  L.0q:4@@3@@`@@`>-A@غ|GG@|>cAK@@.PΝӓoݏ#  П@Y:h3ٻ^\\#5@@ش@Y:Pq\o%kL  ҹ5gл7@@@@ҹ5W/{) K\8@@(Nfft57EsY 磥TH@@V Nf\sMXϟ;7%W0t@@`tnf5;Zy>os̯  ,Z u5Sa]ygWe.Z#  P*Nvv(wbz_LIm  \ s)wº>2h   ͝yu?y#~ @@X@A:7Zṛۏ.EQ@@ s{YK"9[j0  K(Hv5E SjC@@`r;4v[+ Z>"zRS}Pfv%___͙! 0+G[jV1C@Bysl_k%Ia4Y'@@X@:WɼLw^:qt2ڏ  @t.; WLFפnryA  @ +;$usbi    s $(Ѽ!6@@ s5r>ʹY8:  @P!  #@@2@@9  s e$h  s@@"@:H@@H  Et>  Lr   5t/B{_;@@!NGFۋ#8 @@JsolF;^~-)v{Хpf$yԹ>==71ifiI󮯯J7< D e -`w`ttC# Yd:YJ`ދ] vzif`::g˴c  0Cd>b:kڜ#{ VX- Ɏu-;z9$h[Æ:q.ܟGk#W  *\=Ů__pnk?XJHچb#I[ʖmC@X Ͷ<4#q"RX˴{y6y}P!`>r%鼂M@آ=)۽ng[{[ouEۂ8X莖nO8fAY/|Aa/  0@椻H&g˗n; UO!5Ot>@XftY@bl[f nkL6s ]&7 ^4vuR;$qYk?b-}%J,_tvvf@&\x}S*~&`"PmD̝O%  A/9  %P|Q/# <|PVs/~sX2+@f,0ʖw!0#y MA@`Bt>a5ONeSNg@@f-@:8@@M Ԥs9ݔE@@`uܜط'MUC4Nw^& S? 5֤s N4ob:|!e 'I5!@#_s+77 zܹ9\;s  UiG`SF-g;,?Vv,n)җ\.W]^!@@̅\e9t~r*_w^DF/7c @@ zo}^:SYu. z5 @@ S@b&s'sC!0@^:?̝75.zk&wds@Fhk.{ήMg 6g2?t;hn/8z/]#H%  *k2AE4ۖްҝk3s$W4.ҹΝ7OD=Q d{<$IBvrb۟7&g8-װ3}pή)&t~-QvR! h,SwVST3+s^$rWgfLKΏGq\JsMɇ;%@@`fYaOkԤkr0^dP6̵+mw<=y]4N3Rs_E;߅=" @mL gT3IL>Zpw3My kN.M\k7z[%f@2?Z:l/v4ۏ%⬣i,k@?^:z ev@8[*$&^# &ЖCq4|m  @Z-i#J  r׷u[87GVlv8 H:_ $L5 LrE,9[2( |*tϚ V0֋݅iydr M(L(! ts'lS8y'ߕ%zvdu C@\$n9[d>Y_Ⓙ J" ms~/ IgT,>C,/J" @ܯטt:f-?y[)S%{, M`Qk;dO%oOdyRVjEy@f( QW:9ûiyGS`# ֖A,T +GΧk@ϼ;“2wD1@J|nͤҊGLh=v75w֮y9q/@ d]srj$ ̖! @@ΜwNJaVmZ226;N=9R( -u 2u/fdP@0Ng#[˯d 2~着3oRAZ@V:;T4oݹ}D'jJ#@؎yuyYIzx]96Ӭtnϝu7G@@ (`Bgzk]JWS]F1MT JrҺ"m,LUnܹDfMћh.ԅ-ys羠yY)@*I;)'>ͧBM @_q۶ޥ꾰 ჟh.X.АI~{݉ӗ) w=O7/ljʭ d|,/w>ϭ ,zy[@@`XOշ=mΟ S3}-aBY|5EOswxw֗rB@HhTnt8P.i\ȞyJcNaG! J׻/wv*t[hOR\4#US9LCS@@`dSywz߱sƟ̖l%_*:f~}_&___eb  W-',ELSRL;&ZD:ɏIul @kM*Q h"yleKr!x[F?+QT'@@X@l|6ecG@Ȝ;_S"sܟ;'c ]ӹ! "@@Q:ߙ_?xJd<Ψ8z!   op2  LH3 "~C=D;v:u8k|#K@\@2GKd7rݳTV}.&fE0j:6D@i R3tIw!4w-{ݘ@,yF. 0lΩYptHd<(nvpwV4DBH/N%YgNۉ ߦv@@`Cj}d$ ~m#͋zJ $匌2wz/: ml3w/iOW֙6^bEKeJDR-g| L@@O̝LBp33%S )=^E'Ɯ# 0@bq!{i6Z ֵ],`rT^s@Hq-|3';w>uty~Iڜ%kf3̝of(  QtYb?n 8%mt·Yb` z9jj $V)*N! 0@r9Օ!s(;?[R@Ϗ@ ! h 0\ΙܱHnN0$u gwq}}}vv6m3;  x+H>~N&-t.ͭl#Ossyy)bh5ēs@2UfC[@'̸sםkȚ>>  T ;"  @@yR )N1@@z;gY   sRC6G@@`)tANբ_s%wn-۴@@ s9ErjӢwX2I   (K ME@@`q\V_@@@@n:C[i   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  HK-ڊ  nǗ! ,ItѢ   {|  N_<vzsIN7R9 J08/Y)T )M5MΫa@U ds 6A` 33N:}" tF#s֝/fh(  Hb:  ֝/fh(  DV\^^k*G`|*tˣO@hhKyPCA8gˠT "";CX~Bu :  RJn! ,PO.ph2 l7D~91 t.?B ߵ9+[rZ@@Hdl  @`@ }eбv4B_E". # ]/?['=^MϷ*@:o@: ; X|CH@A8wtSgGS~Į]Pt>AI ,@@ӳfk\yPA:M^t>1{@@`&]cP[|CL@P,x^ͤ0K /}i?  'v.Ɠ  0@΢ͱr>N*X|eJw@C }|4yD}`Rt>aQ O gV g;44 @ 6n *GBt^&   "@:J@@ W   aR@H@?0ˠ]5w:5|ԉG&v R4%R]" Q|ae.XVmOv"ye@@0$:l{߸Wg;|;cMO@DP79TI۶m|36 {j iӆi{)#^_vSMɜc rTe]4 >pC>.4y=E@`fL<_à(3o9jlܟo{c^ Mt-T/Rͩ}G@` `֫Onv.?;쥺6D sT  λ}GNUA@XwΑ @rݹ1aTnd15%C-TO{۪55u e&~u}κs! P#k]6mFVE2 ]" KuK)ډ S :eJ-tѦ   {|h  H[m  0oLJ! lItѦ   {|h  H[m  0oLJ! lItѦ   {|h  H[m  0oLJ! lItѦ   {|h  H[m  0oLJ! lItѦ  8}ٝ{~yuq}}}vvV@ذW_ Fyp*t14k%!>@@[:i!tʖu&@@X| H@@!@:_8 @@50@@`u#@@X| H@@!1@mgTu@ * >9;0A@[9G '+||YْD  5%_)m@ؔL^S8{Կ8/,W#OIb 4(V잽"LϟIM@;`B:_8j@gN3摜G7k=% sA /ywpj@@`v6bөt{]FL$=UYiIpL')0,̚~ICS' +\W';WLV*ltCn! dgF|]ˬ=HC:A@ϤŌ5Ot@(bũ?`KY )sST~|}9MP{P勗) PVz Py]m"+گ?;E@`t.y3m4B`5sD# Ы@<_]]7*CF@Ns‘  \Hs ځ  c@@2@@Ψ1  8jz@pRKS.l zHSs9T{WF:z\HC S? K O5r%鮧j_#B:Z@X|t>@:! 0T]T-g!hCF͎@@(dl  @`@@by1   0| XE@@Xt^L   $@:j@@(    Z@@Hdl  @`@@by1   0| XE@@Xt^L   $@:j@@(    Z@@Hdl  @`@@by1   0| XE@@Xt^L   $@:j@@(    Z@@Hdl  @`@@by1   0| XE@@Xt^L   $p;֛`j?ylS@(W@^]]-Sh1IM{GD'ah s qTmh~yt>@f*@:ЬU z  H.  j՞\<ꁣs /mDVߚ8lۈfu2=@$}8U4|4u[w.t`h6  f4|G@@\rE@@ؘ̝mt@@ yW#I}IENDB`@=L+ #Xd͊W )xYMl[Ek'N)QHKK,'nFP(QEJ4U|kS 2 %=@z)G$*D/rA 8@D%f~g4vQݙfi(^Eؿ8;0V](l=p mՂ/P]4`;++$;jFGf6dcށ:$M.%/ z Lyx釰mfM6l ڋyX"/)&v;T /#} ,$,p^ ۷!z5c8r>XK|g wB}_`^2YMc_\)߾K W fɽEB{j(}1< l7Mm&ɷNQ|a}Uqnu&=17awGNڄm<_vNW,~Ϡo E8)cLxGnne9GL+}!Ns@ U{H@ը &b{ c<6Q.[~`G҅(}gbM?ۮS(x1c Qel X初i,{1n.nK{*_xLu[w%PGy5Vkoϗ=e!tϯSL1}{ƨW6&YEG,Ŕx:hXw_.h`ulqc}B 噑МWj/p-{젹иY~v,pQ ^T։N{vmA )Q  )4(YKh(QcELx!` _DM*QE!&d=9ޥ۝b LgΜo|g}<ܲ`v9@dt2@sm<@O=5&&p%{< @%a1] f.da;#jBoZ44Ԟcp.jXcC:3 CI'v* ]eh#Recr+smϐ?m><ϩw;ڟظ/zL_ucV|>kVxvC;t;``oIM(ROyh {yӗͦˁ_SXX'!Ǭ+nloB#]4 E\|\+$J5,'oT#g.샯U v݈ N{wr[\8:Oeru%Y|# m;}=@ )*$]ug]i^6j²q4`MҚ?)}_+129p'_3~Tl%+. I|P?~ċXn; |6i:{A+r٧j]8bX!w s eοㅣE+W_l Kl8kss*J} ;ot +;q|l|6;׹H;\ܰ167> U>/nۀY x~{c+0czw%߳0W㎷#ON5 E,{qp),|Hww,_wVsBOeE0;7!_wze& >Z<{؞X/WN[xfٯ <ϑgBO\.0{Ypww =sf&w/.5]jK狳 pRUnf\HxI,bC@@,bC@Kbòvl'qpr1ب2IǬauϻݺo[jKr] VClU܊ yOٖ7ub7ub[F,ub)b>b1ÑubK*ؒ>ؒ-Ñubs2ܒm ,֯`/] :Nlrn[[-aܒe H,[Fg;FSqKz?GEfݡZsLi7qwLܣS_wzn ȌbPNG  IHDR,3JPLTEfr9_&?r?L|y_/OuOo/i/|ol_؂VBot &tRNSzbKGD%gIFg$0c( cmPPJCmp0712HsIDATXGn@ v3 ?AɔǶV(c[[^ZMKey=C8bȄ&dYJa3agQ~NY[y2!ʋ]_sJlG-P Y.\PdVo Ul~z?[ vQ~Kˆw.2f O›lQc;Si Kѕ Ӄ +Y+W&ҰˤmeQJt0dEv'Rw^21w{rD1$Jh]tSN1g1F+WN9*pIYjdSsHZo D:tLsΛea,n)ˬU-Y@ ~ Q%R1b:XbS7-"w}-)Ʈɭ+o™ku8Ǹ'o?(Z~n}Z%=Rn5Ms R94Q w~i2ʟ_H9t*XK - RN)n)op`[S-]x-*uv/fW0ՒV6qsN,kpKt#Ji_zQxϧ}y->U7iӢ9)H0M1@q`U)%๊7IwO=:52>q!jkQ]*emkIX֜ωctL Gd`@_L߁>?;=ImX$ـJ+woD؅9_q[Lj #0K#i u rL)On& SJ$آ>hǽhֆp?ncu,dӠ_K/UK)p?OsP֟ IENDB`D6( '$/ 0LDTahomaS 0ܖ0ttt 0"@ .  @n?" dd@  @@`` P#     "##$&'(+8; >? FG H,LVl ovwxy{|}~ob$;-)kd["$L+ #Xd͊W[$$"$`nrc#;tb$ ȌbS 0AA0 f@ʚ;ʚ;g4KdKdD 0ppp@ <4dddd@k 0tlt h___PPT10H pp.0Simon Murphy.___PPT9xEJ?  %OT+ @Simon Murphy www.codematic.net)0Converting XLA add-ins to COM Add-ins with VB6.011$Simon Murphy simon.murphy@codematic.net Developer  Codematic Ltd*B $  0'@Spreadsheet background@Up to 200 Mb size Up to 1 Million formulas 1-10,000 unique formulas 5-10,000 lines of VBA Billions in values Often linked to other technologies such as OLAP, ADO, COM or .net etc. Finance, Banking and Sales and Marketing areas Development cost up to $1M Active member of Eusprig  European Spreadsheet Risk group  dedicated to raising awareness of dangers and error rates in commercial spreadsheets www.eusprig.orgZ,zAgenda(Solution design patterns What is COM? Reasons for using COM Reasons for avoiding COM Automation Add-ins Intro to toolbar XLA Intro to VB6 Add-in projects Discussion of IDTExtensibility2 Structure of an Excel Add-in Code and test Package and deployment .net.Ph|NSecurity (bIs everybody s concern Spreadsheets can be used as a staging board for privilege escalation (with your login details!) Consider SD3 +C Secure by Design Default Deployment Communication Threat Modelling  Assets, Threats Threat Types  STRIDE (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege) Threats  rate with DREAD (Damage potential, Reproducibility, Exploitability, Affected Users, Discoverability) Spreadsheets (all flavours) are fairly insecure Compiled UDFs (.net, COM, XLL) and Database servers can help Set macro security to high and use code signing certificates. See Microsoft MOC 2840A  Implementing security for more info.P P(P:PfPPUP0P=P}P  (:  f  U0=}Solution design patterns ! What is COM? (>COM  Component Object Model, also known as ActiveX and automation. Allows interoperability between heterogeneous systems Revolves around registering (and then searching) interfaces in the Windows registry Excel looks in the registry at certain times and can load and use what it finds. VB is the language of COM, but COM components can be written in many languages, including .net Can be expensive performance-wise"P~" &Possible reasons for using COM add-ins'' Improved security (from meddlers and malicious users) Improved intellectual property protection Better forms engine, and richer UI features Better development tool support Installed so may avoid macro security warnings (depends on settings) Code is out of the VBAIDE (Project Explorer) If functionality is used by multiple workbooks If functionality is used by multiple office apps If embedded workbook not required If determined to use a none VB language (eg: C#/C++) Possible application stability? Possible execution speed improvements??? 6P" PHTnE)Possible reasons for avoiding COM add-ins** bVB6 is out of mainstream support Targets Office 2000 or newer not 97 .net may supercede COM More complex development than XLAs More complex testing than XLAs More complex deployment than XLAs Solution design uses an internal workbook VB runtime library required on client Access to development tools may be difficult Security concerns of potential users cP" PcPN #~OOne performance test$ rHAutomation v COM Add-in Automation Add-ins are COM add-ins that can be called directly from a worksheet cell. COM Add-ins Must Implement IDTExtensibility2 Generally load on Excel start up (can be changed) Automation Add-ins May Implement IDTExtensibility2 (discouraged) Loaded on demand only TcSEcSEpFAgenda (again)(Solution design patterns What is COM? Reasons for using COM Reasons for avoiding COM Automation Add-ins Intro to toolbar XLA Intro to VB6 Add-in projects Discussion of IDTExtensibility2 Structure of a COM Excel Add-in Code and test Package and deployment .net.PhtKToolbar(The issue: Opening files from other people causes the reviewing toolbar to appear, there is no obvious way to turn this off. (possible registry setting?) Solution Capture the workbook open event and close the toolbar, that seemed too early so capture the activate event and close it there. Requires no use of worksheet, may be useful in other office apps. Just for me so no deployment problems, active all the time so better out of the VBA IDE  Ideal candidate for a COM add-in.t PP PPP  uJ Migration ( Code sensibly in VBA, with a view to migration Provide a user interface create a class to wrap the application to trap events Add a global variable to represent the application as an instance of this class Create folder for VB project Export Excel VBA code files to VB project folder In VB6 create a new add-in project in that folder Set designer to Excel Import code files Set application to be correct type Manage application object lifecycle manage user interface actions and lifecycle Add start up code Debug and deploy. " P xLIDTExtensibility2Private Sub IDTExtensibility2_OnConnection( Private Sub IDTExtensibility2_OnDisconnection( Private Sub IDTExtensibility2_OnStartupComplete( Private Sub IDTExtensibility2_OnAddInsUpdate( Private Sub IDTExtensibility2_OnBeginShutdown( (Populated by a wizard, just need tidying up)yMBasic COM Add-in Structure sI COM ShimsWhat are they? COM dll that loads Mscoree.dll which then loads our managed component Excel>>COMSHIM>>Mscoree>>MyAddin.dll Why use them? Security (code signing) AppDomain Isolation Protect other apps from failures in our component Protect our component from other failures`k,\k,\ b 8 ' g# Questions?  simon.murphy@codematic.net Spreadsheet consulting, reviewing, maintaining, rescuing, migrating, add-in development etc. Staff coaching, mentoring and training Websites www.codematic.net www.xlanalyst.co.ukV & &X       0 0 0/(*+,/<Goqvwz{}    0` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@,|?" dd@   " @ ` n?" dd@   @@``PR    @ ` ` p>>  T(    6  `}  T Click to edit Master title style! !  0č  `  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  0ˍ ^ `  X*  0Ѝ ^   Z*  0Ս ^ `  Z*`B  s *Do")`  C *ACodoLogo")   0 ٍ3f#" `q TUK XL User Conference 2006(2 fH  0޽h ? 3380___PPT10.Z Default Design 0 zr0 (    0PO \   O P*    0\k   O R*  d  c $ ?D, k  0k d k RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  6 k \   k P*    6O   k R*  H  0W޽h ? 3380___PPT10.rpt t(  t t 0 \    X*  t 0    Z*  t 6X \    X*  t 6|    Z* H t 0W޽h ? 3380___PPT10.i`ħ 0  %  $(  r  S OE O r  S ?@ABCDEFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesߠCurrent UserSummaryInformation(TPowerPoint Document(QDocumentSummaryInformation8