#!/bin/bash # # Writen by Vandoorselaere Yoann # Thanks to Francis Galiegue. # file="group" group_line="" new_group_line="" group_name=$2 user_name=$3 Usage() { echo "Usage :" echo " --clean ---> Remove all group change." echo " --refresh ---> Read group name in /etc/security/msec/group.conf" echo " and add each user in /etc/security/msec/user.conf" echo " in these groups ( if security level is <= 2 )" } ModifyFile() { tmpfile=`mktemp /tmp/grpuser.XXXXXX` cp /etc/${file} ${tmpfile} head -$((group_line_number - 1)) ${tmpfile} > /etc/${file} echo "${new_group_line}" >> /etc/${file} tail +$((group_line_number + 1)) ${tmpfile} >> /etc/${file} rm -f ${tmpfile} } RemoveUserFromGroup() { new_group_line=${group}`echo ${group_users} | sed -e s/,${user_name}$//g -e s/${user_name},//g -e s/${user_name}$//g` } AppendUserToGroup() { if [[ -z ${group_users} ]]; then new_group_line=${group_line}${user_name} else new_group_line=${group_line}",${user_name}" fi } IsUserAlreadyInGroup() { if echo ${group_users} | grep -qw "${user_name}"; then return 0 fi return 1 } IsGroupExisting() { group_line="" group_line_number="" # We get some group infos as well, will be used later tmp=`grep -n "^${group_name}:" /etc/${file} | tr -d " "` group_line_number=`echo ${tmp} | awk -F: '{print $1}'` group=`echo ${tmp} | awk -F: '{print $2":"$3":"$4":"}'` group_users=`echo ${tmp} | awk -F: '{print $5}'` group_line=`echo ${tmp} | awk -F: '{print $2":"$3":"$4":"$5}'` [ -z "${tmp}" ] && return 1 return 0 } IsUserExisting() { grep -qn "^${user_name}:" /etc/passwd if [[ $? == 0 ]]; then return 0; fi return 1; } RefreshAdd() { if [[ ${SECURE_LEVEL} > 2 ]]; then echo "You are in a secure level > 2, in this level you need to add group user by yourself." echo "Use the command : usermod -G group_name user_name" exit 1; fi cat /etc/security/msec/group.conf | grep -v "^$" | while read group_name; do IsGroupExisting; if [[ $? != 0 ]]; then echo "Group \"${group_name}\" doesn't exist. skiping it." else cat /etc/security/msec/user.conf | grep -v "^$" | while read user_name; do IsUserExisting; if [[ $? != 0 ]]; then # user doesn't exist echo "Can't add user \"${user_name}\" to group \"${group_name}\" user doesn't exist. skiping." IsUserAlreadyInGroup; if [[ $? == 0 ]]; then #User doesn't exist but is in a group... delete user from this group. IsGroupExisting; RemoveUserFromGroup; ModifyFile; fi else echo "Adding user \"${user_name}\" to group \"${group_name}\"." IsGroupExisting; IsUserAlreadyInGroup; if [[ $? == 1 ]]; then AppendUserToGroup; ModifyFile; fi fi done fi done } RefreshDel() { cat /etc/security/msec/group.conf | grep -v "^$" | while read group_name; do IsGroupExisting; if [[ $? != 0 ]]; then echo "Group \"${group_name}\" doesn't exist. skiping it." else cat /etc/security/msec/user.conf | grep -v "^$" | while read user_name; do IsGroupExisting; # We need some variable at each turn. IsUserAlreadyInGroup; if [[ $? == 0 ]]; then echo "Removing \"${user_name}\" from group \"${group_name}\"." RemoveUserFromGroup; ModifyFile; fi done fi done } Perm() { if [[ ${UID} != 0 ]]; then echo "You need root access to use this tool." echo "And this script shouldn't be used by users." exit 1 fi if [[ ! -w /etc/${file} ]]; then echo "You're not allowed to write to /etc/group..." exit 1 fi if [[ ! -f /etc/security/msec/group.conf ]]; then echo "/etc/security/msec/group.conf doesn't exist..." exit 1 fi if [[ ! -f /etc/security/msec/user.conf ]]; then echo "/etc/security/msec/user.conf doesn't exist..." exit 1 fi } if [[ $# == 1 ]]; then case $1 in "--refresh") Perm; RefreshAdd; exit 0 ;; "--clean") Perm; RefreshDel; exit 0 ;; esac Usage; exit 0 else Usage; fi H%g|twhlA_4hUѬuy͉sk?=;D<hMAEk..[_!q^}>!<5:`rz:QĽ1P3>*U>1n?kާ7?RA{Ħfj49zG?HKGsܧ{j_h=ҫ~%y - %bqsfXFA|&jfd@8Ot7͗D - ʋ%3W&f&jj-$yyO:{*-҄ǁJWXS=C6>tđj̿Q렌~uNj KaM! : ո[-MG~pC̚["JՅН2 rYm8;CGJ(H{~oe >CGRݣ'>pzTTFzL.3fNY@ΉT'->ߓq̈ˆBy=gV؜.^x{j&g\ eqTOm}b O6/:N\۠K;Uֽ;st'b #AQb&N[b.Dz@ܓHƼ^ x@sk!/@eC|ڳ珙nwshtBnRq[sZVV[تq&uoiXb$s`;NbtWT+-::hI-P.QO鮑?ңVh.l͞&B{+K`Vg}`ZCeK.W{3=g*98Kg Benn?\dVf_fLVZTv8!b^MÄ L8VZ"eHpQj,MgJ?wsV R(756Qr⧴ыT5g0qȔU.HAxۚ:0yO2g+C\$4WxiG2LzAb,M#lCa%g Hn}v' Lll {^ n`J0IW>fj7s+J_]{Ї.!7q GNWw ^}-G 2y-w-K5uE_@ 5ƌ9Ȩc!q,"~5_2* Vid 6l %0~e-V\&Mޱȹ ]88_ JH4q5`Vgy,k@ƖuCNET^y{a Qu+T*sZSvjQd, ]HC 3QH1ZҹΆR⁜zrXx\Wm1iy_>GO#Sl2`ǕKZʒG*JwJdj|3St AoOޮ.9 "k7tW( б9W+&PY}Ltb6Gς<(^= zXLfkwjJ6Ӹ"w\Bξb6@jm) uo7[t{;sAԻ ^|Nw)%g4mJhªqAMWgSqw >Geg9A[+B? 6v=ơp|⑸Y"{װu:Ȫb7OrE-D%bȑ>!os]t60_O R+Y߰Pn0r~oN֟Xqr 32'ˊKBOFפr\ݑiyk-d!jwqي5;@iM~0>lJkۻnTEW]11*Ѳ&!e7bd;yUD"ZԆ1Lk\|J;[m%l(ʃSۖFt7Q&bA1J96R2}6:x.#^Ӧ1.Yz$? )ӗ*r* (v qۯapުÊlqAn $ V9ux9b]MQhļD?mB9Xb: 0bbYc_ 5slWQ4̥{f^&gZ^?q\/ܵ+⥔X>I%W|w [)aZֻ%- b@K{7 EIH-G}0X'<Ef Ro OYc,M=\ZThiΨ1B}*eyi Z`yk{85=z?SbLvP%eLӗg yY?f'T1a-c5L|6Wbufjf ?@cd x$p.1ӓõ%xiӛ'7 _*Ȭ?De@e pSl4F\DToUĕɹ#YЋbPِܧY.$pjFTMd) qdlUlVQ E/ -ҏNt6j59X~t Exj'3AGq-*HR8ǍCdE;B3KYa5d+Pt*owNH} Jr j pSV@\ۯ^.|= l 9 Xfz4pKK^w+p4X/Bة],+u* M۶Mv(:~mQk#fڵ-MXhf@nF{>4!R68]LZ`84L}Ys]\OTOiW'lr Ư*1saKuc5X֜5rF./Z!KM!o uB)^K]xy.szCQzxqZ"Țq]s"炜"1ωy̸Z-%UqM]|vM*BɰV)._^#le H`Ƿ$z X4/+C^!"HHnCT"kЮڛȰZv]GvejD:+FB%۶]~WZ~s(YZ(  P߻tNK6~Vhwi ;)z!X-dZy("(zf2 6djvGsNawfFb!J`W vY!Uj#5B ׺5ZbeZKH`(d-5zjx>EV2Z8G{Ԩ* emL0d\ҺœfE8^q+m`(?gC$[v.7-*8rqC*l7M*3 |F\:^WR,Rķɍ}7M>!ΓeWsvm>pqCCyy?HHz)0W*bAoG3 8 DHi\ Y89ICmHWgs щ 3,ŪXj9_`1:bq+v̦} XDqU[>ov1p=a@='5]\yuߩ%@^T8sK?jtrѶܺ饔z`G,b#!A>^w؛,@0!!b]T$HC@XkRTNJ"^Ў)Q!BhmꮩJy+y2;Ŗ\Q@F!ZхWdm^OLXankKv6e=I)C8-kr¶^_ aG"" @2;!D|ZT(HѐśIV#Hy~px剩þ?~])4Bͺ(-ye 0o okC䒍uvBk]Lc6 Z7ġ@/j}}0gs4y'/KFظb P*^5e""Z+Pj#[qDvU=k-u,|GәLr,8lV;pY=.d궀lD d7N*A[ .1tαqyĆ0ĵv= WQNwv2S3ۂ*wį]3l.F?j&p?\/\M`P[H45H(Lȓ~izI[2g33Lhp]).ZE򿆈<:?3";!f]hMOï2 /zj ސ{ڽTKh5j@ǒ8:Uo!jwNkڕU5T@*` ⎯G0(jnW l9Gd, U o|ፋ/7/M;y7Cm@:F {QdQӀ?t\| z2G2Mqe>y %Hµ œ݆K$OqZ:J3 !_3rG?u+≮ t֓)r|@RP:RB"H1Яô'=[TB"ym6./WtXb {Z)0-ZS~/5@Me 矲 5A;1?֤ddJH]APMdaFtUjjxr偙Qr9ٚd+49,v2K\q]Qw|HvFXMq+>N5d73O:XG.[ T$f*:jQ⋈Uttp `$1B95jݞ D'zUoUFOZt} %**%;(`p1e5 O"+xBStgΤHF>8y90''OӤ|؀*M>Dj1_#EHt+]-_!tvfL砦8U44b/fUyFwZXӶb0+ql_ C)^_-5Z3}s0EhbY t{]?LMSpp`1+i9VwR/V&qKYAP@g{7pBڴoGaPvQsk`Dddl`syt m4uʁC'\~~n^G!Ky']0OM@KRsI@n¶^8ADBVGTb6%)"OL)#J%FJ4yL9& B%&U0Y}fkǸS"IKgfƞ爐|eqʖ#R4b 7VI`]ۈ UqMdڻ?kNboC^+V [ֽn2fNv}2!Hm܁ ΄u 9+THW\CZ$ߵ։yqt)~]i-^c!k>i㏍}' p~#p<Ŵ y}|?=\+t`~E@jSvN>Hjz" ΅c@]$1iϢ~>P7tp1 %*iFT/rQBàI0+VPf-Ϟ _gv-dx1-Ƙ5xWoD͏8/>0A4 aԄ ǴU zet,>SpUfs7Y&Tf( ]}Ay3 am}bfQ1Of m$H9Ħ☛dɄӻ/ⳍȝqsJLdm-AȘg5|0EJ:!/H7gwz8p4o+xC~X AEԗ=Hei \>+?j"\m-T6'4K"C~fRt) _b>xIJmD<$+:7~2j@is}[K-Lw鱍R(UЀS>o >R764ǠBŎcQX/2їQdm}nܥS\lϠz#mpa09W8~R_ɿ4A>vbv~aؘ,e92I7N{B-p%m*e}S@r8nJ7׸luo3 4)A݄ke *[M @ޓm)S'/ImIޖ柿}` qTưUk6A ^]Swt9"rZIX[_MN2D^Wpdf%/5^v 0'<jg `H7 V-xm Y^<9Mh*/JdX\ k^)y9^kJBx6j܂l~L`ZR;E' ;qք$7ޠD@/bY;ցZn\$X`0wxuɤN+:xfnK=)yBh͕A\z vtpAVM X K<$+_ F_Ϋ[a#׮rgQWF0S5 " oi|pnVK6s ֕30h|#dC@/e1)8CɏԫsݩP45`ZX6=hp>4`ER+EJ59$!|H8ӏÍyL7ּKEaj ty$vx @3)L'4ওfi8{f6v ~hZ<~\T [>S޾Kx8 ӇYh b^%Qk8C}FS]DlNeP|Ɩgq@C7$a "vY^v:ոo)i+jte߀;GhJ_:`l gYV5*?pGh_U\ W2*ZIeti|{ayt꘢Ȩ761P"4f|E%Cw>7yZ k@-طȪ C3>KEK Sn:%~l}((=:ʪJc?#afV{TZK`-4@`4)YYMomN;JrMA?aw" 49&1 0MUn3/0q%:YyV݉jPX]h_KYZ}(]E jG*@#|n:j"T% LtSBY/+ uL^Mz\ 0R!XoaLrX<]N:=ףmhgZaG8Ymm&H7aJ8{G+~$ SsC>Fes Ċ|$r D *b= r5 [ Wg3p)#*OOѤRr?dĜo13汴}6BˎUVM)X; ̐ns +ɩk8̴BX}EJ@NTff8T4 [//:fq_ btOr-QW&ݪA u{3Q )g.\BUQdਾa-nN ! =gBrDBh|K+"o1p䬴ehç \wT ,z`&PQl{GX( |[*B S8eOĠBQ74lυͭ3͂,oY*X<}-y%Hva>rR*:e?uaHr"bT=#k_zQ=v>R:jtxӐ<<3=[pWRI^n,IVL9XF 8޷ڒ:jMi!+ csA p菹0a CalJ>˘_O@ HZ_ᲂj$G.]#9GD 'k;Ѕqt 5QyW ,$:<GW_KiܘNT! Aʽk~c.}H+:}2PZOAF}M8.ghŮ/Y@mcϹo(?gp"ḛO]64]uj(NzW [/pYNyJ/.y{PsJA_F`zJ"seS Ph8*^}"ߪnCʴZSʠ|/ bGawvB<=dMb톩} ۆʼne=|xp;,:P&z/ޖ(bn:}-}X!P`->rIK3djZnM q'flrQ~X%8mE?h-)sy7ȩ4G`ND]71څ=YPyz]O%s>0V!TL}q,Q=h9Iu{)Nos po,edMhUlyϹӧh/j3gd M"ԎeT–Ic2YXRxښZ•ÚVchņã?pВ?̒qQ 3Nyɢ і{_!#y27&lΊA!x iU*Y5J$fa{8% @SJTuJ=ZcCIZpdqkpyMրNi})8,LUrާZ_%&%5klo)vZtK:3%_v;1<͕lMI )եړ bëOm Q?iCuOpu?lܺBC= [Uz'L3[ZkQqj< e+&Ot1:'e@j֥HljРZG!\!~2xM=ыXCG .#s<s[R"ÇQ7ۊY haE?5/ T1"u[Rs'm)vKIvEIL#7K=-_#y5o`Sm7EX%`bW)nlhT%mB6`S'W="g2*5SjUzwD@ݛZM,k6)ⴱj}m (ҎIY'0q 89<]"|N=c]X;|[L'0΋1IŅ͙&Pc#F*;'R15f-uk&ox 3Q̐6໊pͫ L2t~I" "(vz@n BW]Tk"Y}vuvKct첮rm==F4RKTGFmHZ5䌏'R`p^鱫*,n+=~Lf./ʡ&Ƽ+Skkt]/Bwdyi~4LJLu3 'ME!W:#w̕3 śEpҿu gG X<>|QpA#KቬaȺ9nSj;"Z3z҄ȑcnx#{Aâ/͐mJAѳ@SSО0{j)ګt?9"  _nƑU3zB1 +d;-o>Ӂ(Mҫσ:ATkE&;xd,8UǿД$Ir?$}xscR[ &s.>U{^$w{CםX 5['G]>h-*b{M:[o?7hwpcXDWX%/^Y]yrBJ%UC$-% ~@f+\YfܐѨxQ9?tcKD.GSip=놧}PQ!ٰ7Lz&vN:N w9Sej-!Rs3QՊS6c."|؎e]萡IN%ھ#.vO-vo0]f%85.;I3!G^ o[4ŽzKH,aașey:|s߇5xSv'4=C{K:,`)- j3>LuWjhZҪ.h]pn ٩ʡ:è5 hz$ G+dӥ/P7oU战O5]YIph=Eݕ\}!c -,yF{{иפOH: \ܯNvox:D*ob4ZR='ϯ4)͐}@>dw)ROJ[mISWQogsYFLrڭiu@Am}7JVqٍ{ N 1<p)'pc"XiþSIY1%+ka RkjTYiJcE% X:X޵bA{)'͝ńhedgM[iYtE`JJ ) [ve3ch~zca:ӎsKBŘ[Waa1=C #?\Ӥ3&ҿNø>bԎ@t ij MF!g(>#Lㄕ`LSKTasCjaP;\~{%=9|~/2W-Pt vލ!.X38'&sz^detjϖ.b6@&*fu@.<.#Z~%PSC7 &s Z.pqG퀸 "_={.> 8$u _?.t#8=B_H֖Ns"ƞs}iAmIJP>*|ٶ˖y2} Q|BKPa apr穊2~b V!CuHh,"XGm,*T\#:2Z®cbhndsOmw^/B| @<uZ׋IЕlAe[﹭Jk=g&a櫕@)srYtʬ}a־CPyV{S؍ *صg/j5z'denkp&Hd5|wV^üӠpr)RK't$P]K_q4κ,Zxrak(d=lpnV*p}S6 NS7m`̉Fk3J,O aG>C_,>{ J%5.˨* =ǁQ07gs>LJH V#b<бD]tԴYmJ( jSu%DhR!шG0!#UvDOBS=ڇk˹s!"(p =QjXE?imF7"Yb^4}N -QB40.)c=|rӊȗlu[ Gڤ-(),A"/ Es,ukx5}! eT.E'݋hQ-$DVVu6`Kqo@al\ 6ZZF|wNPc[_J1j b;G-7+Q*f7Ql֛p=='cP+Hyqrve "nڵdjx'Un-8@4^ ^_au:|u]l6殬1~pz݄EByq}5'I~R/h(/͍i&i5?BRpD4V( "3N$E?ᏇlU<,m_ܵ)!ͨ&a"S KWS=Fw_3ka(%][_]EECژ|¿>wzEa!4k WPċ0eSjɚ@WkT^$a{(bMk ulzhar jJPg<>+N9`t;|ZEF &h=Y1v>J-u~<aµfi5 @15Lwe'<7K ҰY$np on~[+|Iay;H2zR_xlSy͘&As[=`2luՂ^Zz7L YQxfyCbc7hm "Q[vcO>x@~g e/i7%= }ޓ=.I^vI*+}u6T7ƤWR+wogefw!ɞy(/2/^.sg 1*Fxߴi45GXoݼ` ,u\{`N.[/~㣌(7!&">4+\LiVv j>~k+%VR蜱1 )^肰 _7S7ٯuUwW[VJahfʻuM]Afq Mpo{ϺJQ>ylhkw;c^zsM-R7d \=ˡ}4ÓuuF` uAZCwr52/9!;kR =e S5kf"nHGw;rrW$):ڴ,6 Ȑ:`H сoT;:Ծ[s?jF"2GspsQtݞd X~gxwCB #6#I=wӪIO4&e\.㖹2EYN4J4򹑎˛@,FT>01zLZzNSmKLI(81tƆye3_iLo |.W+l!ll;AKRhܦawȞ=?81䧱eom&xE#u2+>XeΩ}J|29Ut Fs:U84Tbf`&xñRyRsk:fRE/Algۧ^sՎTiMP&0],!%M]R)nZed -P1%f5~zrAג_=0,7 Q"4c丹1l٩}*!=Y׾]~!O#'[͈NuELj>ͱn|?d!;xr8g?.zQPuƾFʕBtnR@`_Nr, J&3f~BD/LZPۊ[54GKdu#Eߌbn1XʹMcB݊퓪xEd(fНqPҙ=wvmļst}e"@~ْgYN2 +Y[$2#f|6zyU`FCD"Tr&;ٹ-Eahd G93_&E▔*Rfԡ9f3 ɚBV. `|s3I*3CL(j3JJ[ɺq9{bsm@Qpb椨4F(}XͰt/έyqVS=â00>Vh:Xp2щ]5PGlز|}$=EW ,)q}'c(̇NaYiiC$!7ʙjLt?v%G{us$Pd8fm7¯wԩGVl˼މBdlV>.M۫|4U]3`s AԢrW̾7Eˡ ^ mˏ+GlCx~e^W(W$v=;kXZ[."<4I8Ej(FTbB6. O.ޗlqJ6-WgY4vH Tn'4"FΛO6=m x%OzOn3dUphS nvP2 b ahzě #X?KSrI 3X< Gh2%0F/CAk,tREjwn%R|>.~Re۴ɀ/ndRt*t]QPU,bY`U`vՖM/L X4xY)XL|.tN}:ipSo2 UmZ)ijʌ7`d&~.J=}xSvGd5HBTLk%x9 LW%uůX5SN{$3C | 'rWDLdR(?>+)2OGOR156IВ&dZBX07<ģ>[@,k5m"hhf37p_CFz"7 O=_Ā|D%Udmm?8Е;);N+(HN6-<1o G}22LZ;Sٚ7,]ϛ40ӝ lS.:zk+ʸ *<8]б3[ dl&@RRK_9Rt״nhQW9!ߌǘ[OVSk? 8t 劓R=~  ҭf,C/{kcٿ{[ѕ@ I%pG^/H..# ŵk6P]ǡ( [ P>!&*#{-9kNTq@ިE/;N)_>dU/ֱE9/Z0,_Υ&V4wSN_B2ME_e6IzkO]. k1;?f\h7}Qp54~Ce cw)r˗ժmp\-K:MOYvPr-Q~,l kHa1p˖-߳30lp2R"]1=Cڽ)i1)e,l ytC<Ǒt1%r"hR&F2Y_6njgwlm@_F@ a(Tm)…mSzM~xD=.Ơs93nJ«8|#A] dZ?5~P-+|j+x?FO]fT/qbF:e;b>ݶ8Iόϡ~oqIz2 p9oxa+>(&驻Z@0րeb#iֹ8Mf O7 FP(@{S`'zT(!l(k4\K(6Sn0-{킑aF0⿗G9i6SH/_vҫl`❝`c2☖,^W4wSad |E-^9%!9'if2}IH畣9)EA|P"3ũV,icР0 x#r ݛMr+^- Gq;L` ҒjHLI;}ŃxJY4cߠ'!ZʚIO˳\W`Ո2=N}6TpJv v%KtbĿ~Ū v(S/ Eؙ;}j˥_1g9EUUO5)'$POQ7٢ K_4)ͶyX2򦬟2g[qRDKMKoP R9 RjeO@sDyz#Y_/ +Wخ/P ݊ER\19V9vY=^5sAXRUmZS]>~ #gB, 6" :,p_VheG۬M!N `uȧMA;abUk4 HNG7р!)8l9BR 8xWܨ3jgʑN%VeޫT[%zw98OR5GmkK&]Dw;pC$tB^Aa0o@zTO5.$t` ]",uf&A;s+![BȢfa\녚G^ƧNI#|r5&؋:E@1NQ36"D*<",t}!LH"㣼#fFXw= ~ځրd,F.h3Y&@_"C|I=$!>Ĥ(hӞ1p/j`sDɤ{sn(!'Ks\Tq@ϘޥXw+[r07 CLP{CeI@ٺ1< G2iWC"kBl^ 6E ? \8&gi} r jpDQ DA6yvLdTysN EJȇqhHMGu<4m0c4FO).LfAe*Y7KVZ^h9'l` 6! G˝$ehkʸ /^ZR:AS4fRm8d+PA^(+²M;֗{1r`_u7u t;z! ?$BTiB(q.<|d[n6Z Y1pD5 ܞ: 2 Fk]T3@={rHEc3P pBIm4*? FsaFDw󯤬f@*=jlЊˈ5X8*>沶>u*B:=Yḗ$7GM[AQ'u6rg:wg$x?vF\_ R-GSiѢaz5Wx`4SXA+a쇦G]B*M2b2RUWPXp:?E Ɯ17")5u"ҷeNZ;X?UE0#I74+ W< BiyhC8ێV/_+-ׇ )dol$EOVСEpgVT;RÅ-95QeYf"tA+pɜ? d>6~]qRguO gUuHkЦѥ-ۿ4nj)B慮G#]llO"N¿HAڋMk4Dz[5Ln20/O{Q.-$VCH0 ZGnV-'}ZŬ .%Ċţ2ШhD/oH ۺ]KW0i1Sܘ#Qꞩia8H>g2+0@5j2B}x_4ǫ`[{IY'T *T׋듻\(|mb!9yòSROduw)hZOojv;!M؈+ `M G*JcJ7жD㗜Sݻ>TS6Ddq>s壟{3rp4"PVWo`JnS}7Te-^É=ķʊ,L;Xc_r'GOfBuߛDXh`|1YE99Ad%skc0Og@!#ubBކ&VpqVxA+  aZ嶯eӔPgGܘhEcX͡Sϣ/<66)PmH 3<]4AfS  QK( y`/ ڲWlBVc"]^ч0C525CLGvI6S7Y%L/7ش Y6ڡ$ }BjF./<Qjuj30$U| /c6}V%iQ6 ׿C2Z'DٵG1*SD:rOig ?ˎK\սee&c'~եF*'}'2A}|(vu+}%1:374K(_!>lN9x `*KՇX'€{9,y"fXqIɵedusIWOb¡Yf?l"'IP\6Y 8%r:O|ԣcm@ S`F J= YGlUzU1QybT}I< }h^/8~%͖jC@F:u0'3a9U$Z4*j,@7!6EЗ]Ly_Y,h<(4鷆Ιm3Ϛ5q8<}xҒiuyU<xX.'mQ^)d5uoM6 G m$㏫E~ef;,G99'mgvhӯO"r_%bv7DqCdԧ !|]zSNQ*H(CW4ю؄_{ÜMާvV|%]r}iȺ;hVt()ECP6wpBbGx@a+dw=Vqjh`M- _#92{Zr'ZƬt(6Qĕ72'>:It- lU؞Dɀwn(\xN;rʀ7z}R!Զ4,Si ̿غ^.7bGfb=QgA/i"@]dbYyyC_Q0Asa@ce^t5Z{=1Q>j *IҠ3} ';T(P$߲*20䪵L?ƍ|[M%j&ZOuIWE Ȍs@f ְ#vqE ǟ hx/Y|dic}X}4މ} iE*8vmX}Elo 162;s3Qs UP?PB:!BW^2}Λ?5FAKͣS8!n"'nP誚%RAF郘Wĺ|_xHM \Abn 5"ԈCAԪ'Q^ٔ! -ߘI=gDpTth amV;U.p$a:UXh-0u!FWC6A3#GJ]CVO"\?‰ۗRySmrNg0.%epOd(.0vCPHN@?#!a)~?bTJ@zcV XPh!KE,9<ab>-?{C(z&ߛ;>&ng8zQ"`*;~u>QNkhV$?;w7Djn %5佑[wd8pit@Yب1Nt$V8y@|A+RdPޚ Ix6qoW?_W#]@ቝ.0(UG@qI%´yێt+zuJT*v 7|-hmˉ+)K=^h3lQa is{ `bJ)͔W0?H)ng+wJnYqf𙲒N(Nm߄i":x`Lr:W[GƠ]SC<&d?j4\+/uXEO>]&Kq ȫ1Z.Я?};SK!z{?`;&2p-_: w1+e='Z$ 4b$TvpuXv\{D ^^1?5~&\7'ltWD'r,FҍOPiEiq%< $D]N=r~s]'DwaKwȓ^X屟ƢN!Kل( \}bp!EG+\ Ɩ^!)E +sS?Qu^$3e<+$҂[vTjCdyB^} TBmFd%Niʇ^y>53}uJȍϏ!7\@ K = A4}rQ NI,Z!+XZMo#8_2#45O1;AҠR@T[lj" n'u};/2|<˦@T^G-yuj:B⤚ta$ 8\^Q8D9˦pj04菅,K_%:a/?&4>s TT3u<$ 'fT$:ȾBD~D_SP}'TR_W#Qͺf,;M)bvгt-}+skf_&AHǂhN|GƠ-vkvTwlGzQ~ _]#=O2$gm3 8ƴlTH:]xj} gO*rC jG(Mmū@wygr˳wcOon-5:l",-tHz<@7P j_@Ы Wm9xd? ;lj2*jԳg {ZƄ**ٻ5^O&( "0-6wn(47~/Qb O2`1A&'YD 7F9e51W2v11Wo8hlA-BB= ݹ +kkmIaP4Ű`S*V 䍀;Jb/TsԆZ(1=WfLHc^ 'v(z~BA[WC!c=VWTuoyWZr%/2SхAu$jM5RH"'tJ} 2|z%H$ubH掋g^奜eĬ*[_&Vg9ϼ& r8uN8Щ@6yc™e7| i,#Y˷=*"}Ld`R\w#H &mLoiF¼sN0D6r9*^(k9|JPN= 4<PnIX};Dt' ݈xQaoIU !3'p2)oh m$)˷ nJ_աMltִ:6]rn׶hIL\(n^$_V=,7a V]=04Ě6k2>pH~##bf`{}0WS霢AyeCxT0u4~Faj̝|*Nѕd=)j>_TY8ֱav"$d2^gP͘\&c@iW<ƾǯk)e_wSYQee}ċ`~+|@S(vMeA.zۄ{NmÊ Y oSleDly&ZG%C lvSѰu,G~b>縉AEkn,fΣv*y&TPCx :vQkSXmra;b. 33<Vz'u9qd(K{cBHlUV9/&A^U!yFTMc e "׆3 Oap/9zc3 zVo,*熯d1Y^yᰑsN j-Okzxn., es <ȼ=L1Vsghg~>5]a~<|2{CsEOTvP RSmxQeHq?~"YA 6%n~%-o+csvk𤄐3K,x!1g7i)gtb^Jv}GRL.þZKf2QSyx:@e10 ^߼)1Fo@"DD0~QBxÏ$t#$7'c`` PJdxvH9o>-ϕoM@UHNƉKm JZAϝem]CVYpY3a1=V*\YcUxI`tB#}7,3I7HgDVK=m>`oѕQg3#GnnW3!_- Oto MGA7z%&N5L\Kܓ͠ONQpm2pFLm!~27ڝg C8I&m3{<׊CԓPU2Z׀^1m”vO|H{DDཫbx9ir؅!yY_͙>AqtHo Ed瓇w@mw_\ k 9;0̾O3P$7j˒`ٿE˴{)(*KDYcj*Yo< 3O> bmBڦJJ kTH-v /JMP.i aȠl]x;2Jݐ'L B7\&iZÕCF^ɴ *L[*<+#oYa[ ֓=]#Lt: _JEjN>'֧xZtW%-rvVcmOs8 =[n$O>sTא6> 5_2ՌkAxKvXƻ_:,'"25}#\.zNh% o 7Qw߼Q^찂l&I_*]; ,Q~ RsEnG5on̮2X2UILǺ[O7%H'\KգIckdte6n0I𓤲H /RF.+̿@^$V;$T):*H:4 [3 rvz-&G ^g` ߘjf L B釾z[ehIMUybzŻ4%-D)95FIW:A({@06tNnGWc Nú+e0,P:leQtKdSXG+ "Fh8̿`a}dkW AWIQeօXڎ/T^ǐ@ЅjJ͚fY#J"\CO;hlC\I-"b)?r72(6>_)es߇2څR!%_~&#ye3Ģ쩯@gnئy~)micƝD|q5ćsWz}Q ex8Z܊$O0MdQXB"K0ə^~?BMI D /?(RR3qWsON98!f57rh~[hqb( n"Mށ< I#$`\Af#"k$Èjs_Zv 6(nϤL^h4a $9`?4GBN>;g,U7B:|Z !?,PLiۡhtXMXhs yt 9 ,r(& ŲRN][1m~M;]tb;\RQHOnw 'b6z( QLPʝ[drNi5I87lrbWYbxš+ ug9^GHh8d$ڬLl Aۙxl$ƒ$D2|;5ۿo@#9%GNgѝNJ4+X)l/ט^Q-;x )قu<0mU!ЫUډA3*9^t(}-2+!`~T𣗵w{ W)zwqSʋRe5yC¡RY`s";^h4/Xk_8ک?1Ha^`/j5vY) ~D CMz5lhƪQ.8."d : m)Ɍxo˸.B%+OIdޗYx±HXN܏vüSf> M;h\nBź!A˕P絍<"._NK!ȀDg*t?,IT'xP9$=1W@ZӺyǠ[$g)̝Cuh5i8FN8C}ou7 ]s\|b9zW9aq58 $v˹K@N>j":EfcЀ5.e/ HIhE=#Ϸ[d512-,Zd Xj׷݋RPj@2|H" +'Uxۈcf}a{Jn{&.v?OQyEq?~De ^h -(Do,(H#Q$-A`V-9j;\R*@4g5S| Y4 䢕/qVDz9ݦD+~z`7~\ɳgS;j)zM~GV!!m%a6ao|t3W`mFt6l8`$` \8Pwֻ\niw9ޒY ~ mbC関߼AXJNX}5NrUE>xC0ElB XIWxk^u(ssQB?X$+b<Kr_nLA[J"sh몆f)b)@w896jl-"D@T>"PE=-Bu27^*,҉ŨJTg3{T#Exh\ޔ+5m"P 3PrؘC>m@˓Ao8݅هiҝ! ~C3Q3;ya?otCs#(3)3Gϲr6UMRSJSBVHg&I1dZ@iKg{K‹`,#CY ͣdF^7JXz~l"dg"^(D'm5=JZ„]Q7I0~+8U#~/Sȯ@Uk;16ee̚i3lr@NŦ &)GiҕC+JkV1RUno RYbBYRm."tT5$kE9T|?SIܐ[xFp~wo֚2=>I 7>Z*H|6$wLrў{p(q!Pـ.t>8>~Hd%LQpstbm^r,V(0TRn-sIMnU\[ظ"1^xlV[y\g jߤ)Њ`-9I|:07A{ȵ*wYcA phVÝԼRk eF?m 秉sA9.$#q/lHEG(v.PcT١5D0n$C=.^ 4܏\'$פ!2ʢ"H`h6K=Ahpr8[KגPG=08%Ch6:ip8{%d-,{)+։螅bC~!<nj؅'3ܛ|w߭VِIC–|2k\toh6SZbWD@pWҒUճ#tX_|z(KYݔZγe}:F%R@$K SY"ϪZۺH=Dn9J &>Ý#1Ff6F6.kJ||Idy3o˽fQ4'?4z.M?اY=_|ڵF̠:>gv?go֩Rmui)aN2*Me):<@JCsDSEd79*iȐ&ylY;*G7Rq{`PjQ1bYorJ (U@I3PB˂gFa%eko"(YNY1g Bgk##`tdlߨ.R3πd ', 隯'!̂˹%=_Isע;&)%&լE ό!AmR8; 7 kt+}>YݮqrܟgsA f{iP!UrTF7ҋ4)59Bc8EFR@+kIvp iYynJ0z[q1K3R1CIlW̑▓p€*O~{i<ڪq>hPr81~P 2nyDG#y婝#؜]|v.j;|"^α@isj9@t7N BRd~ȐTJ gG%G qAtqKJwMH׵E/ XA vdf 3 L`b=q{(wN!ei bJ""|Wʇfl;%b$Y mV9㝵{c _6l= %TbW7nr޺߱G=DѹȢ]^o0b>2Jpx4z-`SP-$,tL-h cOPu$[ȚLV?p>AbjSZs5i2H8N?~7K4$. ~i++=jzWf>rSfc[Dj 5ZZ$<97+@FciI 3#%QIyiGLĦ7Ц svr)I\Yt^po8N&'LL{ҭazf% A'[1gwPt Ϗ`ua,L5Y9BLҕGrCV6?/asFsoeAj'UWce<}B\\oFiqLVߠWQ8Nd{{Kv%hDUq A [r h dP䁊w S!㬗pӻ\4h2gBɱچU* H 9wc;rQ]#w w#imZkV mJjA!3d*y{E)㵳a.AVFq$ăaMY k2W`)2)ߌ+`YBče72ӯʶX/r( *^*㍛yE4'msjDǃs EB=ɠpu;_}DZ31WMVj9b&;m~fsT|BpRUfV۩@ظ>b9N:,G SNqZVsTAqCN4{,|N80Qj}-תX%\ZL=5JnhoudJ{:=gtMAeeC]Y#~(&>Znku*{u 4KY Tql;$1"]Rda&/D" 57ﲪ<Ŀ9pwWu.krF.uAO>< SQ}uolWaz޾ZdɈq/7YEF-ܐk'NYInyr(cypDTej&?g 90W~<|+>kz~u#y_*W9-pb/X¢*I&%fmMngjL]7.\4q(q'Gy`Z9v a},ȿRz|a%nhmmLA /v1!bHi$&6KMSv`]-}&ٱl/gQ nJ6W:^O ibhڞm :McT'Đ'/T)p~v~u֚Ƀ  1mt:ץI`X#q& ge8bU{ ژdcʾ. S^gahqua]:F.4:<o]+kYK++ ZҁF@ߜ<1=vỈdWR9ϝdQnyJUEO_6B˂fJ@Lc -!? Y-Td"U}Z]F޹n?gR  ̆iY*RZ;#.mP3j%-M~AtOwYt4 mLƒ۽=uDsH—,o|fVN"wXw %QiQk)ySy)"S(r6SBP7xZGd`ٴDPFj1z ŋM2J07q|~LjjtZ?Xa,RH ޭ' ;,H>L9̀Eb?f.kO9,.k=$DloN/Z(U݈_r uc/ԏcs'[!W.gZCav PPW,qN o:4zF_%ai?]!$ ɦ=)%ݫ"<!4#J$:>;^Ƚ-ܷWCt+Jja؋ɒ%RRvjF!EiCUl3no B] 5I׮/fb`Yrbr a;XX3#|2Ge!\|pP4uo1Fe_E} ȬFO{0/fJl{ׅh1R(#Za%[vj!jC\+l݌a9ʲFZƛL̑(~in2ˏbUJѺ9b0#d?ۀRKk=qߖȺqzׁ`=;5zb> mrHJ ?W eC(`<"_eOV Gi)m+?{(C O8z~BX371sR "lb)Jth@c?:_J 0 }ldV&~d-^vbfa]YpS`,}svb x ZC3Ƿgrk4|_ ,>Jd>Oz>PL^k(ZVn](ߺ"_É_*'=@U%iJ53ʀHT [!f*WB͈lMsF'&>~=)L\th*w*n{Z\Wtɏf)o*cNf]_pqz ~Βf)beCwc?f]fj3/mTzWB'|mh<+nzq^$dΓB/ inl£#gǫ%30c+ANnGu 7D[,Vs *MQ9Iƌ Ol]*|^"r<)T: s6ADӼA.'M^1 &y70v>Y?8MRK*quSs%ૌyܦ [̓or>W.!9hauY"Õm7VnFD,l#$PqޭV{dJ[RFuG\쮹qWo>F뫭lg8bNK1mt"R& M5l׷[ r-CQ7c ֡uR NC',Xż,̉ Wt8&<<0PџS>:QO|+p` Hb .CNoe2C}u*Yi3ϱ[cZA.iX ebm*A3=1Lmص^XbUYKV7k@j!b.Bـz/fàz&edpMSn8ZV sFml{QPAarbj 8j+Df~<`J61!ܷ9~{2":ˌP9$cdeީZd3i JK85.)krq'A؅v6污`_[|E<#Q:?p*1͉yyZ lД$ߨ=~t =IwتykI-{L:xEa?%H WJ Emtk2xF))AFVK4DmR(-Nt1@k^4E;Zt5"rA|tTaޤ ~H]x '߿&3P_X`ƻ,_`]/AXm\Cm,Ra_Rj\\c Z7NfhMb,0Tr:Z pd|fֶ ;{k6fh$W-1ZJ}SY!?A pV2CkGܥ7|dO|7W.;PR"f;m/~aE7N}zUr%Ô kPn4\ա;st@?L.YCsнoa]%rXWn)^|)o o9{6IoŜwŝ,YP>՜̀B I !+?2ncbSM=49p/{P Sܥ⍓Jvg_أ:̱T+~HyOdM̯;Ka֐2BP~Y' s=CJWshȝA iffRЇ0ģTA$O L? ")!;L >R۱ѻ"pKwܻD`SEV>oqxFK,Zv]_ْ3fKϥǀu2Q53CE>&-}7'N5o\XA Ǫ9b1 ŅlK.>}6J6!!xl)^_d<Ŀ.Vb{)ŧ7' r3G@$ÚW8ꯃX~;SGcWuT (2BD_'nЭ4 g|j!IqTg.raWKNUOao{uĞ3gy61dX"Ԩo({Uca^g1/W&;m G 9+RN:cM,X!~5rRnePU'ΕI@HtP!<4XlzHk6)|&A}T\;aAEwyy7DdHEz3s)0aKĆ3OGi3Qhi4Z npN: ᨜oUSvN7FuqE%bVi.@NZvrҭHB{W˚iG"Hl!BU;А&s[#j:7(bı;PJ{0pݡ܋,ܶ,*`"w233!'3R)AqÃc(Kѵ'dmvЉLcGB_;%;3)s"dRp55" cp6)NV@q=poH{e*w# FUbQD5ٳ,Ūv}x >sk+)5Q0{Wm/qч'| fw }r+CH3gC/RkRVǿH5׮7π2ࣔF1.Z:/orq^gJI6WxW Q's/lhdvjR5Ĥ&2p;&=ESr+o?ի@eXTDAĕl#HãqUR̶z&J^œ; שP#Srŕ͊Ml_P~D;Y_$߈ȵZi2kZꆉ|P= +XL$xԋ*۶u+A>;GG>Fg#B5=ˡNN @qYv'w671l{H1*Bm5T*?q@ILWOh}晡N ]𲔢t ػtW5sIݩ9P5 B9y/Ts,qɃ `jy?JN|l1t`E;eWSrR^Ikd`!("7.}O S!"vδ\a<0Α5 sFB%E,ކcMvԙ"Fwp/~LnfO-o;jh\/q$FNevlX^'?+Kf0U&Vjy,]RKҏ/@L7Ndf@Oԃ=B&]#\tW: MONdfN㹷eϛIPOAC5=ӥG/'.|`i^.I9Gl "ౘbb7,ZUhM`HWכ_3%g'b8vtxEéHh^c_qs`H^+`N# VQx?Gq$م[υH&$IЋ4?*E ?4~ɂ2+G *?:&3y^dϖCU>\jۏ}dtI.. MT_-t^WyM`K"Ҋ6Iv#m{1)W(Ü(b"XדMA9L=EȩfS$v 4wlkMw3:GkВ+A{]IN?;]- ɊB]jp]̀U/'~6Oꭞey'.b[#\HŵwT.%osB T0ś#ebY;- D5qV} `!z)Y`V3Zݍ(#IA Zq5O~;l,&1Ze"y%jA.v׾648jjEZ~ְJ>fzx\QW&y^ov-[sOl5끅rd这sh0L]X}&o ʓzZ)۞8kke.b<i ,p ͦnS@{-=Rl}-GP l!zu-s Q&%o ^ON:y}A̓XIkr'ʒq =k{\ĦbRL_r,Kʅ]L"E[ _{.߶{W Ԅ:ȫŲՈX1OM4HP,MBشṷp)R޾ )1}"\!%bK̙0Vxg&:,Bw C ?1E$2d^2cѳǀ*w绗w]| ZW阜"zkX-^a6]$8o{ A K$diSY0.c#4[~~[EA.sYdJ-91FNW7=vHҰLFѕMБi UewO&;θ#oُ6'{9a.+؝Q8&N+v+5U{آu 4>WO\}쑝)uá2i#32ӈ{MTjY+{n2Oݵ$u 9RvȓPY3܅OX-t0 HJ7n/inJN2|`m",27鹿ewi.ˤF!;(CaMInYŠ]+FZr}wĽ}cM6rMc)uS\,,2Ʒp2'xĒ\qdכ9]lNFN]' 2-}4>@@TOayIw[`Ze\38WC9aZ;b7R?F4]ero)cV&dH<9W6@H֓g|mW |#ʊ/ ŕ Z>ワ}_0cHl*PX< e!95|/wt r2Q8[c=;֠/%~ 2UD)n"k}9GFܒ|̩f ",ѹa'AD54ͪ\i&_7eBYB|@e3EC+VwƕVmȺDg_J)=ZLƯysCata>7% c:]N<}lL6mV<L[!R*X{ΧC7S9|t ? QAM1*%!IZF1GVV+Om.vb=>~e (DXd7"0z6ڔ%//(khh9K=7b:nꒂoNJ:2NHP`!R ԃaJ FuW%S&u[>YCpW8zŠݜ Z)-l2375 MU,Dt)2W>P`F H_}EJ2/>~>}J,5E \]2ز=sSE剋<7@,I9$ǃJyFxedx1.V 6>rǔa$)R>* Y' D &O2H}rkCFfma>rkWFHi' pՂD{?NV56?#=l@XcM:a,MٮB$ަLZDQ E}Ox'r"݈v5UNaa)X9c6F*הއDs?mBecRp4?@M5@k(rƨq SL)BH$P@ZRdN-q+OZ l:Lk'Mi3dƽyp:QvM|Ă3#jtvl9ϡ:.32"tq]+gt *O97,Hnj8T94\P42P33adQxₒ<~##DR0gF F1qF1ؓ+ExC+ U\h$:o Faqd֞b5CNՙBaT-y:5#Nt =R2?0*   7,V̾sEȳ[MDVَv Њ8޷Q @#3qQQ  豥 AQο)S(@ y b+Q'zLԋ@zg-}6b6P֝6sʍ&(e͹1n):{@6T VxP >ISIA#JIr{Vq([KF1sSC&xQmh_N1@Z'33$A\ ʼ U k!@*1bsPJh0_]p7I jMl;yIM׃#np62[cWe2ahfӹv/ ǪND71ف݁CN&~n+N{<yD^j?Ӕ#yrrƘ5N|_O!jj\7{I,M4 ֗M. mH.ՌyLݘGC/Q^Lγ[u1d%747H@X5Vg{d`nqҿY'}wԂ5f t9ݗgwR+mR.{/Gr0h͐< {K uNJg0]2Y@8'v \aiDxE~9ٸFMUViIfCσY1E[/,{A(+W|:4X-1S}&գ: $Y"Af 6zh*|IEeDa|Z6xBCPPU!6)B ηH>0oFJ$`qQ =-4`N̞XQ!M3i45x8#N0!q1;=݇:!s9Q$'Zhd7G/eS0{`ܘGZg)#LN@#i1{{*/_`#՚p-ӝoG9(.R19X[BΜnCr|3΃{rUmrbZvku/2d֭:=ָfT鮆8!x2en Ұ}+smNC Gk,N[;ካ" )wyݫ]{qZצP*)[Kvfab˝d-z]"֕'C-K K Fh:xos~J%ꍂ'@ʠ㺖`9JG  &՝^7_}_N~_5m~ R Wu:Qj<ǐ ]Zfqp)aeZ"{-~ݨ[ӅxSצ0 cRtum-DhJYtEޢyQǃ`簵R'nQ%]Ru*@"NU7_`5 ~ʷ X.%an*7[-aۧI 92zP(O